summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ci/README21
-rw-r--r--.ci/asan-ignore-leaks.supp16
-rwxr-xr-x.ci/build-efl-app.sh17
-rwxr-xr-x.ci/ci-build-test.sh13
-rwxr-xr-x.ci/ci-ccache-stats.sh8
-rwxr-xr-x.ci/ci-configure.sh67
-rwxr-xr-x.ci/ci-exactness.sh16
-rwxr-xr-x.ci/ci-make-benchmark.sh12
-rwxr-xr-x.ci/ci-make-check.sh34
-rwxr-xr-x.ci/ci-make-distcheck.sh11
-rwxr-xr-x.ci/ci-make-install.sh17
-rwxr-xr-x.ci/ci-make.sh22
-rwxr-xr-x.ci/ci-setup-ccache.sh8
-rwxr-xr-x.ci/docker-ccache-setup.sh9
-rwxr-xr-x.ci/travis.sh24
-rwxr-xr-x.ci/ubuntu-bionic-install-deps.sh19
-rw-r--r--.ci/zlib.pc13
-rw-r--r--.mailmap8
-rw-r--r--.travis.yml50
-rw-r--r--COPYING2
-rw-r--r--NEWS139
-rw-r--r--README38
-rw-r--r--cmakeconfig/EolianHelper.cmake.in4
-rwxr-xr-xconfs/freebsd.sh3
-rwxr-xr-xconfs/linux-elogind.sh3
-rwxr-xr-xconfs/linux-nowayland-nosystemd.sh3
-rwxr-xr-xconfs/linux-nowayland.sh3
-rwxr-xr-xconfs/linux.sh3
-rwxr-xr-xconfs/openbsd.sh3
-rwxr-xr-xconfs/osx.sh6
-rwxr-xr-xconfs/windows.sh6
-rw-r--r--data/elementary/config/default/base.src.in53
-rw-r--r--data/elementary/config/mobile/base.src.in56
-rw-r--r--data/elementary/config/standard/base.src.in56
-rwxr-xr-xdata/elementary/images/animated_webp_image.webpbin0 -> 4764 bytes
-rw-r--r--data/elementary/images/static_webp_image.webpbin0 -> 10474 bytes
-rw-r--r--data/elementary/objects/meson.build1
-rw-r--r--data/elementary/objects/test_tab_pager.edc9
-rw-r--r--data/elementary/themes/default.edc1
-rw-r--r--data/elementary/themes/edc/efl/separator.edc29
-rw-r--r--data/elementary/themes/edc/efl/spin_button.edc65
-rw-r--r--data/elementary/themes/edc/efl/tab_bar.edc139
-rw-r--r--data/evas/evas.xml13
-rw-r--r--data/evas/meson.build4
-rw-r--r--data/meson.build3
-rw-r--r--doc/Doxyfile.in18
-rw-r--r--doc/eina_examples.dox37
-rw-r--r--doc/elementary_examples.dox2
-rw-r--r--doc/eo_tutorial.dox8
-rw-r--r--doc/ephysics_examples.dox52
-rw-r--r--doc/index_elm.dox2
-rw-r--r--doc/main.dox17
-rw-r--r--elm_intro.h.in6
-rwxr-xr-xexamples_checks.py2
-rwxr-xr-xgenerate_widget_header.py2
-rw-r--r--header_checks/meson.build11
-rw-r--r--meson.build470
-rw-r--r--meson_options.txt66
-rw-r--r--old/ChangeLog.eet2
-rw-r--r--old/ChangeLog.evas6
-rw-r--r--old/NEWS.evas4
-rw-r--r--po/POTFILES.in2346
-rw-r--r--po/POTFILES.skip11
-rw-r--r--po/ar.po365
-rw-r--r--po/az_IR.po363
-rw-r--r--po/ca.po574
-rw-r--r--po/cs.po523
-rw-r--r--po/da.po584
-rw-r--r--po/de.po449
-rw-r--r--po/el.po492
-rw-r--r--po/eo.po508
-rw-r--r--po/es.po547
-rw-r--r--po/fa.po363
-rw-r--r--po/fi.po494
-rw-r--r--po/fr.po587
-rw-r--r--po/gl.po523
-rw-r--r--po/he.po378
-rw-r--r--po/hu.po482
-rw-r--r--po/it.po449
-rw-r--r--po/ja.po436
-rw-r--r--po/ko.po436
-rw-r--r--po/ko_KR.po757
-rw-r--r--po/lt.po451
-rw-r--r--po/nl.po449
-rw-r--r--po/pl.po520
-rw-r--r--po/ps.po363
-rw-r--r--po/pt.po523
-rw-r--r--po/ru.po503
-rw-r--r--po/sl.po574
-rw-r--r--po/sr.po566
-rw-r--r--po/tr.po523
-rw-r--r--po/ur.po363
-rw-r--r--po/vi.po574
-rw-r--r--po/yi.po363
-rw-r--r--po/zh_CN.po488
-rwxr-xr-xscripts/test-efl-one.py52
-rw-r--r--src/benchmarks/eina/Ecore_Data.h81
-rw-r--r--src/benchmarks/eina/city.h14
-rw-r--r--src/benchmarks/eina/ecore_hash.c949
-rw-r--r--src/benchmarks/eina/ecore_strings.c164
-rw-r--r--src/benchmarks/eina/eina_bench.c3
-rw-r--r--src/benchmarks/eina/eina_bench.h5
-rw-r--r--src/benchmarks/eina/eina_bench_array.c4
-rw-r--r--src/benchmarks/eina/eina_bench_convert.c18
-rw-r--r--src/benchmarks/eina/eina_bench_crc_hash.c1
-rw-r--r--src/benchmarks/eina/eina_bench_hash.c551
-rw-r--r--src/benchmarks/eina/eina_bench_sort.c6
-rw-r--r--src/benchmarks/eina/eina_bench_stringshare.c16
-rw-r--r--src/benchmarks/eina/eina_bench_stringshare_e17.c121
-rw-r--r--src/benchmarks/eina/meson.build16
-rw-r--r--src/benchmarks/elementary/meson.build1
-rw-r--r--src/benchmarks/eo/class_simple.c8
-rw-r--r--src/benchmarks/eo/class_simple.h8
-rw-r--r--src/bin/ecore_buffer/meson.build2
-rw-r--r--src/bin/ecore_evas/ecore_evas_convert.c4
-rw-r--r--src/bin/ecore_evas/eetpack.c4
-rw-r--r--src/bin/edje/edje_cc.c9
-rw-r--r--src/bin/edje/edje_cc.h6
-rw-r--r--src/bin/edje/edje_cc_handlers.c1869
-rw-r--r--src/bin/edje/edje_cc_out.c333
-rw-r--r--src/bin/edje/edje_cc_parse.c12
-rw-r--r--src/bin/edje/edje_external_inspector.c7
-rw-r--r--src/bin/edje/edje_multisense_convert.c1
-rw-r--r--src/bin/edje/edje_player.c230
-rw-r--r--src/bin/edje/meson.build14
-rw-r--r--src/bin/eet/eet_main.c22
-rw-r--r--src/bin/eeze/eeze_mount/eeze_mount.c2
-rw-r--r--src/bin/efl/efl_debug.c2
-rw-r--r--src/bin/efl/efl_debugd.c3
-rw-r--r--src/bin/efl_canvas_wl/efl_canvas_wl_test.c (renamed from src/bin/efl_wl/efl_wl_test.c)21
-rw-r--r--src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c (renamed from src/bin/efl_wl/efl_wl_test_stack.c)10
-rw-r--r--src/bin/efl_canvas_wl/meson.build13
-rw-r--r--src/bin/efl_wl/meson.build13
-rw-r--r--src/bin/efreet/efreet_icon_cache_create.c208
-rw-r--r--src/bin/efreet/efreetd.c10
-rw-r--r--src/bin/efreet/efreetd_cache.c35
-rw-r--r--src/bin/efreet/efreetd_ipc.c41
-rw-r--r--src/bin/efreet/meson.build3
-rw-r--r--src/bin/elementary/config.c166
-rw-r--r--src/bin/elementary/elm_prefs_cc_parse.c4
-rw-r--r--src/bin/elementary/meson.build37
-rw-r--r--src/bin/elementary/perf_test_01.c4
-rw-r--r--src/bin/elementary/perf_test_02.c4
-rw-r--r--src/bin/elementary/perf_test_03.c4
-rw-r--r--src/bin/elementary/perf_test_04.c4
-rw-r--r--src/bin/elementary/perf_test_05.c4
-rw-r--r--src/bin/elementary/perf_test_06.c4
-rw-r--r--src/bin/elementary/test.c33
-rw-r--r--src/bin/elementary/test_combobox.c40
-rw-r--r--src/bin/elementary/test_dnd.c6
-rw-r--r--src/bin/elementary/test_efl_anim_alpha.c4
-rw-r--r--src/bin/elementary/test_efl_anim_group_parallel.c8
-rw-r--r--src/bin/elementary/test_efl_anim_group_sequential.c8
-rw-r--r--src/bin/elementary/test_efl_anim_interpolator.c2
-rw-r--r--src/bin/elementary/test_efl_anim_pause.c4
-rw-r--r--src/bin/elementary/test_efl_anim_repeat.c4
-rw-r--r--src/bin/elementary/test_efl_anim_rotate.c12
-rw-r--r--src/bin/elementary/test_efl_anim_scale.c12
-rw-r--r--src/bin/elementary/test_efl_anim_start_delay.c4
-rw-r--r--src/bin/elementary/test_efl_anim_translate.c8
-rw-r--r--src/bin/elementary/test_efl_gfx_vg_value_provider.c298
-rw-r--r--src/bin/elementary/test_efl_ui_text.c15
-rw-r--r--src/bin/elementary/test_efl_ui_vg_animation.c (renamed from src/bin/elementary/test_efl_ui_animation_view.c)140
-rw-r--r--src/bin/elementary/test_factory.c2
-rw-r--r--src/bin/elementary/test_gengrid.c1
-rw-r--r--src/bin/elementary/test_genlist.c48
-rw-r--r--src/bin/elementary/test_gesture_framework.c176
-rw-r--r--src/bin/elementary/test_gesture_layer3.c6
-rw-r--r--src/bin/elementary/test_glview_manygears.c2
-rw-r--r--src/bin/elementary/test_icon_animated.c3
-rw-r--r--src/bin/elementary/test_label.c120
-rw-r--r--src/bin/elementary/test_map.c4
-rw-r--r--src/bin/elementary/test_naviframe.c43
-rw-r--r--src/bin/elementary/test_part_shadow.c24
-rw-r--r--src/bin/elementary/test_photocam.c9
-rw-r--r--src/bin/elementary/test_tooltip.c2
-rw-r--r--src/bin/elementary/test_ui_clock.c90
-rw-r--r--src/bin/elementary/test_ui_pager.c2
-rw-r--r--src/bin/elementary/test_ui_pager_scroll.c2
-rw-r--r--src/bin/elementary/test_ui_progressbar.c2
-rw-r--r--src/bin/elementary/test_ui_separator.c26
-rw-r--r--src/bin/elementary/test_ui_spotlight.c123
-rw-r--r--src/bin/elementary/test_ui_tab_pager.c24
-rw-r--r--src/bin/elementary/test_ui_textpath.c20
-rw-r--r--src/bin/elementary/test_ui_timepicker.c6
-rw-r--r--src/bin/elementary/test_win_state.c38
-rw-r--r--src/bin/elua/main.c9
-rw-r--r--src/bin/embryo/embryo_cc_sc1.c20
-rw-r--r--src/bin/embryo/embryo_cc_sc2.c12
-rw-r--r--src/bin/eolian/docs.c2
-rw-r--r--src/bin/eolian/headers.c16
-rw-r--r--src/bin/eolian/main.c13
-rw-r--r--src/bin/eolian/sources.c42
-rw-r--r--src/bin/eolian/types.c24
-rw-r--r--src/bin/eolian_mono/eolian/mono/async_function_definition.hh37
-rw-r--r--src/bin/eolian_mono/eolian/mono/blacklist.hh32
-rw-r--r--src/bin/eolian_mono/eolian/mono/documentation.hh288
-rw-r--r--src/bin/eolian_mono/eolian/mono/enum_definition.hh14
-rw-r--r--src/bin/eolian_mono/eolian/mono/events.hh140
-rw-r--r--src/bin/eolian_mono/eolian/mono/function_declaration.hh4
-rw-r--r--src/bin/eolian_mono/eolian/mono/function_definition.hh706
-rw-r--r--src/bin/eolian_mono/eolian/mono/function_helpers.hh2
-rw-r--r--src/bin/eolian_mono/eolian/mono/generation_contexts.hh20
-rw-r--r--src/bin/eolian_mono/eolian/mono/helpers.hh215
-rw-r--r--src/bin/eolian_mono/eolian/mono/klass.hh327
-rw-r--r--src/bin/eolian_mono/eolian/mono/marshall_annotation.hh21
-rw-r--r--src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh4
-rw-r--r--src/bin/eolian_mono/eolian/mono/name_helpers.hh113
-rw-r--r--src/bin/eolian_mono/eolian/mono/parameter.hh206
-rw-r--r--src/bin/eolian_mono/eolian/mono/part_definition.hh24
-rw-r--r--src/bin/eolian_mono/eolian/mono/property_definition.hh390
-rw-r--r--src/bin/eolian_mono/eolian/mono/struct_definition.hh268
-rw-r--r--src/bin/eolian_mono/eolian/mono/struct_fields.hh127
-rw-r--r--src/bin/eolian_mono/eolian/mono/type_impl.hh4
-rw-r--r--src/bin/eolian_mono/eolian/mono/utils.hh22
-rw-r--r--src/bin/eolian_mono/eolian_mono.cc6
-rw-r--r--src/bin/ethumb_client/ethumbd.c11
-rw-r--r--src/bin/ethumb_client/ethumbd_client.c2
-rw-r--r--src/bin/ethumb_client/ethumbd_slave.c13
-rw-r--r--src/bin/exactness/.gitignore5
-rw-r--r--src/bin/exactness/common.c436
-rw-r--r--src/bin/exactness/common.h269
-rw-r--r--src/bin/exactness/exactness.c707
-rw-r--r--src/bin/exactness/exactness_play.in101
-rw-r--r--src/bin/exactness/exactness_record.in76
-rw-r--r--src/bin/exactness/injector.c393
-rw-r--r--src/bin/exactness/inspect.c1615
-rw-r--r--src/bin/exactness/meson.build66
-rw-r--r--src/bin/exactness/player.c1149
-rw-r--r--src/bin/exactness/player_entry.edc932
-rw-r--r--src/bin/exactness/recorder.c397
-rw-r--r--src/bindings/cxx/eina_cxx/eina_log.hh2
-rw-r--r--src/bindings/cxx/eina_cxx/eina_ptrlist.hh2
-rw-r--r--src/bindings/cxx/eina_cxx/eina_variant.hh239
-rw-r--r--src/bindings/cxx/eo_cxx/eo_cxx_interop.hh29
-rw-r--r--src/bindings/lua/.gitignore (renamed from src/bindings/luajit/.gitignore)0
-rw-r--r--src/bindings/lua/eina/accessor.lua (renamed from src/bindings/luajit/eina/accessor.lua)6
-rw-r--r--src/bindings/lua/eina/counter.lua (renamed from src/bindings/luajit/eina/counter.lua)2
-rw-r--r--src/bindings/lua/eina/file.lua (renamed from src/bindings/luajit/eina/file.lua)18
-rw-r--r--src/bindings/lua/eina/hamster.lua (renamed from src/bindings/luajit/eina/hamster.lua)4
-rw-r--r--src/bindings/lua/eina/iterator.lua (renamed from src/bindings/luajit/eina/iterator.lua)4
-rw-r--r--src/bindings/lua/eina/list.lua (renamed from src/bindings/luajit/eina/list.lua)46
-rw-r--r--src/bindings/lua/eina/log.lua (renamed from src/bindings/luajit/eina/log.lua)0
-rw-r--r--src/bindings/lua/eina/rectangle.lua (renamed from src/bindings/luajit/eina/rectangle.lua)0
-rw-r--r--src/bindings/lua/eina/tiler.lua (renamed from src/bindings/luajit/eina/tiler.lua)0
-rw-r--r--src/bindings/lua/eina/xattr.lua (renamed from src/bindings/luajit/eina/xattr.lua)10
-rw-r--r--src/bindings/lua/eo.lua (renamed from src/bindings/luajit/eo.lua)12
-rw-r--r--src/bindings/lua/eolian.lua (renamed from src/bindings/luajit/eolian.lua)280
-rw-r--r--src/bindings/lua/meson.build (renamed from src/bindings/luajit/meson.build)0
-rw-r--r--src/bindings/meson.build6
-rw-r--r--src/bindings/mono/ca.ruleset.in334
-rw-r--r--src/bindings/mono/efl_mono.dll.config.in1
-rw-r--r--src/bindings/mono/efl_mono/GenericModel.cs54
-rw-r--r--src/bindings/mono/efl_mono/efl_csharp_application.cs11
-rw-r--r--src/bindings/mono/efl_mono/efl_libs.cs.in2
-rw-r--r--src/bindings/mono/efl_mono/meson.build5
-rw-r--r--src/bindings/mono/efl_sharp.csproj.in14
-rw-r--r--src/bindings/mono/eina_mono/eina_common.cs8
-rw-r--r--src/bindings/mono/eina_mono/eina_container_common.cs24
-rw-r--r--src/bindings/mono/eina_mono/eina_error.cs18
-rw-r--r--src/bindings/mono/eina_mono/eina_slice.cs5
-rw-r--r--src/bindings/mono/eina_mono/eina_stringshare.cs10
-rw-r--r--src/bindings/mono/eina_mono/eina_value.cs144
-rw-r--r--src/bindings/mono/eo_mono/EoWrapper.cs10
-rw-r--r--src/bindings/mono/eo_mono/NativeModule_Unix.cs16
-rw-r--r--src/bindings/mono/eo_mono/iwrapper.cs149
-rw-r--r--src/bindings/mono/eo_mono/workaround.cs125
-rw-r--r--src/bindings/mono/meson.build72
-rw-r--r--src/edje_external/elementary/elm_notify.c18
-rw-r--r--src/edje_external/elementary/meson.build1
-rw-r--r--src/edje_external/emotion/emotion.c18
-rw-r--r--src/edje_external/emotion/meson.build3
-rw-r--r--src/examples/ecore/ecore_compose_get_example.c2
-rw-r--r--src/examples/ecore/ecore_evas_buffer_example_02.c2
-rw-r--r--src/examples/ecore/ecore_evas_cursor_example.c1
-rw-r--r--src/examples/ecore/ecore_evas_extn_plug_example.c2
-rw-r--r--src/examples/ecore/ecore_evas_extn_socket_example.c2
-rw-r--r--src/examples/ecore/ecore_fd_handler_gnutls_example.c10
-rw-r--r--src/examples/ecore/efl_net_control_example.c4
-rw-r--r--src/examples/edje/edje-basic.c6
-rw-r--r--src/examples/edje/edje-text.c4
-rw-r--r--src/examples/eet/eet-data-cipher_decipher.c29
-rw-r--r--src/examples/eina/eina_log_03.c2
-rw-r--r--src/examples/eina/eina_simple_xml_parser_01.c2
-rw-r--r--src/examples/eina/eina_str_01.c2
-rw-r--r--src/examples/eina/eina_value_02.c1
-rw-r--r--src/examples/eio/efl_io_manager_ls.c4
-rw-r--r--src/examples/eio/efl_io_manager_open.c4
-rw-r--r--src/examples/eio/efl_io_manager_open_multi.c2
-rw-r--r--src/examples/eldbus/client.c2
-rw-r--r--src/examples/eldbus/dbusmodel.c2
-rw-r--r--src/examples/elementary/.gitignore1
-rw-r--r--src/examples/elementary/bg_example_03.c8
-rw-r--r--src/examples/elementary/calendar_cxx_example_04.cc2
-rw-r--r--src/examples/elementary/calendar_cxx_example_05.cc2
-rw-r--r--src/examples/elementary/efl_canvas_textblock_obstacles_example.c273
-rw-r--r--src/examples/elementary/efl_ui_slideshow_example.c4
-rw-r--r--src/examples/elementary/evas3d_map_example.c1211
-rw-r--r--src/examples/elementary/evas3d_map_example.edc964
-rw-r--r--src/examples/elementary/evas3d_object_on_button_example.c288
-rw-r--r--src/examples/elementary/evas3d_scene_on_button_example.c280
-rw-r--r--src/examples/elementary/filter_example.c2
-rw-r--r--src/examples/elementary/gengrid_example.c2
-rw-r--r--src/examples/elementary/image_webp_example_01.c38
-rw-r--r--src/examples/elementary/image_webp_example_02.c41
-rw-r--r--src/examples/elementary/menu_cxx_example_01.cc2
-rw-r--r--src/examples/elementary/meson.build13
-rw-r--r--src/examples/elementary/performance/HowTo13
-rw-r--r--src/examples/elementary/performance/Tools.h19
-rw-r--r--src/examples/elementary/performance/background.pngbin177255 -> 0 bytes
-rw-r--r--src/examples/elementary/performance/camera_light.c354
-rw-r--r--src/examples/elementary/performance/graphical.c622
-rw-r--r--src/examples/elementary/performance/graphical_struct.h90
-rw-r--r--src/examples/elementary/performance/initial_config.xml11
-rw-r--r--src/examples/elementary/performance/layout.edc170
-rw-r--r--src/examples/elementary/performance/meson.build31
-rw-r--r--src/examples/elementary/performance/performance.c953
-rw-r--r--src/examples/elementary/performance/target_texture.pngbin2123166 -> 0 bytes
-rw-r--r--src/examples/elementary/performance/tools_private.h51
-rw-r--r--src/examples/elementary/progressbar_example.c2
-rw-r--r--src/examples/elementary/sphere_hunter/EFL_defeat.pngbin88373 -> 0 bytes
-rw-r--r--src/examples/elementary/sphere_hunter/EFL_victory.pngbin108064 -> 0 bytes
-rw-r--r--src/examples/elementary/sphere_hunter/evas_3d_sphere_hunter.c858
-rw-r--r--src/examples/elementary/sphere_hunter/meson.build31
-rw-r--r--src/examples/elementary/sphere_hunter/score.jpgbin51305 -> 0 bytes
-rw-r--r--src/examples/elementary/sphere_hunter/sphere_hunter.edc251
-rw-r--r--src/examples/elementary/toolbar_cxx_example_01.cc2
-rw-r--r--src/examples/elementary/transit_example_03.c8
-rw-r--r--src/examples/evas/README32
-rw-r--r--src/examples/evas/efl-canvas-animation.c10
-rw-r--r--src/examples/evas/efl-canvas-vg-simple.c2
-rw-r--r--src/examples/evas/evas-3d-aabb.c237
-rw-r--r--src/examples/evas/evas-3d-blending.c312
-rw-r--r--src/examples/evas/evas-3d-colorpick.c415
-rw-r--r--src/examples/evas/evas-3d-cube-rotate.c285
-rw-r--r--src/examples/evas/evas-3d-cube.c262
-rw-r--r--src/examples/evas/evas-3d-cube2.c258
-rw-r--r--src/examples/evas/evas-3d-eet.c210
-rw-r--r--src/examples/evas/evas-3d-fog.c238
-rw-r--r--src/examples/evas/evas-3d-frustum.c446
-rw-r--r--src/examples/evas/evas-3d-hull.c465
-rw-r--r--src/examples/evas/evas-3d-md2.c176
-rw-r--r--src/examples/evas/evas-3d-mmap-set.c260
-rw-r--r--src/examples/evas/evas-3d-obj.c239
-rw-r--r--src/examples/evas/evas-3d-parallax-occlusion.c264
-rw-r--r--src/examples/evas/evas-3d-pick.c189
-rw-r--r--src/examples/evas/evas-3d-ply.c235
-rw-r--r--src/examples/evas/evas-3d-proxy.c262
-rw-r--r--src/examples/evas/evas-3d-shadows.c689
-rw-r--r--src/examples/evas/evas-3d-static-lod.c280
-rw-r--r--src/examples/evas/evas-box.c14
-rw-r--r--src/examples/evas/evas-gl.c2
-rw-r--r--src/examples/evas/evas-images2.c2
-rw-r--r--src/examples/evas/evas-object-manipulation-eo.c2
-rw-r--r--src/examples/evas/evas-smart-interface.c2
-rw-r--r--src/examples/evas/evas-smart-object.c2
-rw-r--r--src/examples/evas/evas-vg-batman.c10
-rw-r--r--src/examples/evas/evas-vg-simple.c16
-rw-r--r--src/examples/evas/meson.build21
-rw-r--r--src/examples/evas/resources/models/NoNormal_NoUVs_Colors.ply67
-rw-r--r--src/examples/evas/resources/models/NoNormal_NoUVs_NoColors.ply60
-rw-r--r--src/examples/evas/resources/models/NoNormal_UVs_Colors.ply143
-rw-r--r--src/examples/evas/resources/models/NoNormal_UVs_NoColors.ply140
-rw-r--r--src/examples/evas/resources/models/Normal_NoUVs_Colors.ply144
-rw-r--r--src/examples/evas/resources/models/Normal_NoUVs_NoColors.ply141
-rw-r--r--src/examples/evas/resources/models/Normal_UVs_Colors.ply146
-rw-r--r--src/examples/evas/resources/models/Normal_UVs_NoColors.ply143
-rw-r--r--src/examples/evas/resources/models/convex_hull/column.ply521
-rw-r--r--src/examples/evas/resources/models/convex_hull/column_blender_ch.ply295
-rw-r--r--src/examples/evas/resources/models/convex_hull/column_blender_ch_test.ply164
-rw-r--r--src/examples/evas/resources/models/convex_hull/cube_blender_ch.ply43
-rw-r--r--src/examples/evas/resources/models/convex_hull/cube_blender_ch_test.ply24
-rw-r--r--src/examples/evas/resources/models/convex_hull/eagle_blender_ch.ply306
-rw-r--r--src/examples/evas/resources/models/convex_hull/eagle_blender_ch_test.ply124
-rw-r--r--src/examples/evas/resources/models/convex_hull/home_blender_ch.obj40
-rw-r--r--src/examples/evas/resources/models/convex_hull/home_blender_ch_test.ply35
-rw-r--r--src/examples/evas/resources/models/convex_hull/plain.ply846
-rw-r--r--src/examples/evas/resources/models/convex_hull/plain_blender_ch.ply18
-rw-r--r--src/examples/evas/resources/models/convex_hull/plain_blender_ch_test.ply15
-rw-r--r--src/examples/evas/resources/models/convex_hull/sonic_blender_ch.ply659
-rw-r--r--src/examples/evas/resources/models/convex_hull/sonic_blender_ch_test.ply260
-rw-r--r--src/examples/evas/resources/models/convex_hull/sphere_blender_ch.ply469
-rw-r--r--src/examples/evas/resources/models/convex_hull/sphere_blender_ch_test.ply194
-rw-r--r--src/examples/evas/resources/models/convex_hull/torus_blender_ch.ply12313
-rw-r--r--src/examples/evas/resources/models/convex_hull/torus_blender_ch_test.ply2556
-rw-r--r--src/examples/evas/resources/models/lod/iso_sphere0.obj3208
-rw-r--r--src/examples/evas/resources/models/lod/iso_sphere1.obj1608
-rw-r--r--src/examples/evas/resources/models/lod/iso_sphere2.obj808
-rw-r--r--src/examples/evas/resources/models/mesh_for_mmap.eetbin19495 -> 0 bytes
-rw-r--r--src/examples/evas/resources/models/mesh_for_mmap.md2bin3400 -> 0 bytes
-rw-r--r--src/examples/evas/resources/models/mesh_for_mmap.obj639
-rw-r--r--src/examples/evas/resources/models/mesh_for_mmap.ply401
-rw-r--r--src/examples/evas/resources/models/sonic.md2bin660576 -> 0 bytes
-rw-r--r--src/examples/evas/resources/models/sweet_home.obj107
-rw-r--r--src/examples/evas/resources/models/sweet_home_only_vertex_coords.obj40
-rw-r--r--src/examples/evas/resources/models/sweet_home_without_normals.obj96
-rw-r--r--src/examples/evas/resources/models/sweet_home_without_tex_coords.obj55
-rw-r--r--src/examples/evas/shooter/assets/images/brick-stone.jpgbin30416 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/brick-stone_n.jpgbin23490 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/bricks.jpgbin90039 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/bricks_n.jpgbin34584 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/eagle.pngbin35011 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/gazebo.pngbin113938 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/gazebo_b_n.pngbin148096 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/gazebo_t.pngbin119501 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/gazebo_t_n.pngbin128640 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/gazebo_t_t.pngbin121842 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/snake.pngbin76100 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/snake_n.pngbin79061 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/soldier.pngbin113272 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/images/warrior.pngbin118574 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/models/eagle.md2bin196728 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/models/gazebo_b.md2bin153476 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/models/gazebo_t.md2bin154756 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/models/snake.md2bin270584 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/models/soldier.md2bin591280 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/models/soldier_jump.md2bin518676 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/assets/models/tommy.ply3558
-rw-r--r--src/examples/evas/shooter/assets/models/warrior.md2bin130276 -> 0 bytes
-rw-r--r--src/examples/evas/shooter/evas-3d-shooter-header.c359
-rw-r--r--src/examples/evas/shooter/evas-3d-shooter-header.h196
-rw-r--r--src/examples/evas/shooter/evas-3d-shooter-macros.h242
-rw-r--r--src/examples/evas/shooter/evas-3d-shooter.c1186
-rw-r--r--src/examples/evas/shooter/meson.build5
-rw-r--r--src/generic/emotion/meson.build8
-rw-r--r--src/generic/emotion/vlc/emotion_generic_vlc.c789
-rw-r--r--src/generic/emotion/vlc/meson.build8
-rw-r--r--src/generic/evas/common/shmfile.h2
-rw-r--r--src/generic/evas/common/timeout.c11
-rw-r--r--src/generic/evas/common/timeout.h5
-rw-r--r--src/generic/evas/gst/main.c2
-rw-r--r--src/generic/evas/meson.build10
-rw-r--r--src/generic/evas/pdf/main.cpp79
-rw-r--r--src/generic/evas/ps/main.c4
-rw-r--r--src/generic/evas/rsvg/main.c2
-rw-r--r--src/generic/evas/xcf/main.c24
-rw-r--r--src/lib/ecore/Ecore.h15
-rw-r--r--src/lib/ecore/Ecore_Common.h18
-rw-r--r--src/lib/ecore/Ecore_Eo.h12
-rw-r--r--src/lib/ecore/Ecore_Getopt.h2
-rw-r--r--src/lib/ecore/Ecore_Legacy.h20
-rw-r--r--src/lib/ecore/Efl_Core.h2
-rw-r--r--src/lib/ecore/ecore.c116
-rw-r--r--src/lib/ecore/ecore_anim.c137
-rw-r--r--src/lib/ecore/ecore_exe_eo.h6
-rw-r--r--src/lib/ecore/ecore_exe_posix.c100
-rw-r--r--src/lib/ecore/ecore_internal.h33
-rw-r--r--src/lib/ecore/ecore_main.c40
-rw-r--r--src/lib/ecore/ecore_main_timechanges.c2
-rw-r--r--src/lib/ecore/ecore_pipe.c3
-rw-r--r--src/lib/ecore/ecore_private.h10
-rw-r--r--src/lib/ecore/ecore_thread.c3
-rw-r--r--src/lib/ecore/ecore_time.c32
-rw-r--r--src/lib/ecore/efl_core_proc_env.c6
-rw-r--r--src/lib/ecore/efl_cubic_bezier_interpolator.eo2
-rw-r--r--src/lib/ecore/efl_exe.c185
-rw-r--r--src/lib/ecore/efl_exe.eo12
-rw-r--r--src/lib/ecore/efl_filter_model.c35
-rw-r--r--src/lib/ecore/efl_io_copier.eo4
-rw-r--r--src/lib/ecore/efl_loop.c6
-rw-r--r--src/lib/ecore/efl_loop_consumer.eo2
-rw-r--r--src/lib/ecore/efl_loop_model.c36
-rw-r--r--src/lib/ecore/efl_loop_model.eo1
-rw-r--r--src/lib/ecore/efl_thread.c4
-rw-r--r--src/lib/ecore/efl_threadio.eo2
-rw-r--r--src/lib/ecore/meson.build25
-rw-r--r--src/lib/ecore_audio/Ecore_Audio.h43
-rw-r--r--src/lib/ecore_audio/ecore_audio.c10
-rw-r--r--src/lib/ecore_audio/ecore_audio_obj_in.c13
-rw-r--r--src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c34
-rw-r--r--src/lib/ecore_audio/ecore_audio_obj_out.c9
-rw-r--r--src/lib/ecore_audio/ecore_audio_obj_out_pulse.c131
-rw-r--r--src/lib/ecore_audio/ecore_audio_private.h2
-rw-r--r--src/lib/ecore_audio/meson.build38
-rw-r--r--src/lib/ecore_avahi/meson.build1
-rw-r--r--src/lib/ecore_buffer/bq_mgr_protocol.h60
-rw-r--r--src/lib/ecore_buffer/ecore_buffer_private.h35
-rw-r--r--src/lib/ecore_buffer/ecore_buffer_provider.c43
-rw-r--r--src/lib/ecore_buffer/meson.build10
-rw-r--r--src/lib/ecore_cocoa/Ecore_Cocoa.h36
-rw-r--r--src/lib/ecore_cocoa/ecore_cocoa_app.h1
-rw-r--r--src/lib/ecore_cocoa/ecore_cocoa_app.m10
-rw-r--r--src/lib/ecore_cocoa/ecore_cocoa_cnp.m61
-rw-r--r--src/lib/ecore_cocoa/ecore_cocoa_keys.h2
-rw-r--r--src/lib/ecore_cocoa/meson.build17
-rw-r--r--src/lib/ecore_con/Ecore_Con.h331
-rw-r--r--src/lib/ecore_con/Ecore_Con_Eet.h71
-rw-r--r--src/lib/ecore_con/Efl_Net.h139
-rw-r--r--src/lib/ecore_con/ecore_con.c73
-rw-r--r--src/lib/ecore_con/ecore_con_api.h32
-rw-r--r--src/lib/ecore_con/ecore_con_eet.c42
-rw-r--r--src/lib/ecore_con/ecore_con_eet_base_eo.c18
-rw-r--r--src/lib/ecore_con/ecore_con_eet_base_eo.h20
-rw-r--r--src/lib/ecore_con/ecore_con_eet_base_eo.legacy.c2
-rw-r--r--src/lib/ecore_con/ecore_con_eet_base_eo.legacy.h2
-rw-r--r--src/lib/ecore_con/ecore_con_eet_client_obj_eo.h2
-rw-r--r--src/lib/ecore_con/ecore_con_eet_server_obj_eo.h2
-rw-r--r--src/lib/ecore_con/ecore_con_legacy.c112
-rw-r--r--src/lib/ecore_con/ecore_con_local.c6
-rw-r--r--src/lib/ecore_con/ecore_con_local_win32.c2
-rw-r--r--src/lib/ecore_con/ecore_con_private.h7
-rw-r--r--src/lib/ecore_con/ecore_con_socks.c28
-rw-r--r--src/lib/ecore_con/ecore_con_url.c91
-rw-r--r--src/lib/ecore_con/ecore_con_url_curl.c102
-rw-r--r--src/lib/ecore_con/efl_net_control-connman.c9
-rw-r--r--src/lib/ecore_con/efl_net_control_manager.eo2
-rw-r--r--src/lib/ecore_con/efl_net_dialer_http.c2
-rw-r--r--src/lib/ecore_con/efl_net_dialer_http.eo2
-rw-r--r--src/lib/ecore_con/efl_net_dialer_unix.c1
-rw-r--r--src/lib/ecore_con/efl_net_dialer_websocket.c6
-rw-r--r--src/lib/ecore_con/efl_net_dialer_websocket.eo2
-rw-r--r--src/lib/ecore_con/efl_net_http_types.eot2
-rw-r--r--src/lib/ecore_con/efl_net_server_fd.c6
-rw-r--r--src/lib/ecore_con/efl_net_server_unix.c114
-rw-r--r--src/lib/ecore_con/efl_net_socket_windows.c2
-rw-r--r--src/lib/ecore_con/efl_net_ssl_conn-openssl.c22
-rw-r--r--src/lib/ecore_con/efl_net_ssl_ctx-openssl.c2
-rw-r--r--src/lib/ecore_con/efl_net_types.eot2
-rw-r--r--src/lib/ecore_con/meson.build35
-rw-r--r--src/lib/ecore_drm/Ecore_Drm.h116
-rw-r--r--src/lib/ecore_drm/ecore_drm.c14
-rw-r--r--src/lib/ecore_drm/ecore_drm_dbus.c34
-rw-r--r--src/lib/ecore_drm/ecore_drm_device.c27
-rw-r--r--src/lib/ecore_drm/ecore_drm_evdev.c92
-rw-r--r--src/lib/ecore_drm/ecore_drm_fb.c6
-rw-r--r--src/lib/ecore_drm/ecore_drm_inputs.c34
-rw-r--r--src/lib/ecore_drm/ecore_drm_launcher.c10
-rw-r--r--src/lib/ecore_drm/ecore_drm_logind.c92
-rw-r--r--src/lib/ecore_drm/ecore_drm_output.c69
-rw-r--r--src/lib/ecore_drm/ecore_drm_private.h16
-rw-r--r--src/lib/ecore_drm/ecore_drm_sprites.c28
-rw-r--r--src/lib/ecore_drm/ecore_drm_tty.c30
-rw-r--r--src/lib/ecore_drm2/Ecore_Drm2.h26
-rw-r--r--src/lib/ecore_drm2/ecore_drm2_device.c20
-rw-r--r--src/lib/ecore_drm2/ecore_drm2_fb.c6
-rw-r--r--src/lib/ecore_drm2/ecore_drm2_outputs.c6
-rw-r--r--src/lib/ecore_drm2/meson.build10
-rw-r--r--src/lib/ecore_evas/Ecore_Evas.h287
-rw-r--r--src/lib/ecore_evas/Ecore_Evas_Types.h2
-rw-r--r--src/lib/ecore_evas/ecore_evas.c443
-rw-r--r--src/lib/ecore_evas/ecore_evas_buffer.c16
-rw-r--r--src/lib/ecore_evas/ecore_evas_ews.c2
-rw-r--r--src/lib/ecore_evas/ecore_evas_extn.h2
-rw-r--r--src/lib/ecore_evas/ecore_evas_fallback_selection.c111
-rw-r--r--src/lib/ecore_evas/ecore_evas_private.h373
-rw-r--r--src/lib/ecore_evas/ecore_evas_util.c14
-rw-r--r--src/lib/ecore_evas/ecore_evas_wayland.h2
-rw-r--r--src/lib/ecore_evas/meson.build22
-rw-r--r--src/lib/ecore_fb/ecore_fb.c2
-rw-r--r--src/lib/ecore_fb/ecore_fb_li.c6
-rw-r--r--src/lib/ecore_fb/ecore_fb_private.h6
-rw-r--r--src/lib/ecore_fb/meson.build10
-rw-r--r--src/lib/ecore_file/Ecore_File.h4
-rw-r--r--src/lib/ecore_file/ecore_file.c100
-rw-r--r--src/lib/ecore_file/ecore_file_download.c2
-rw-r--r--src/lib/ecore_file/ecore_file_monitor_kevent.c290
-rw-r--r--src/lib/ecore_file/ecore_file_monitor_poll.c4
-rw-r--r--src/lib/ecore_file/ecore_file_path.c5
-rw-r--r--src/lib/ecore_file/meson.build16
-rw-r--r--src/lib/ecore_imf/Ecore_IMF.h32
-rw-r--r--src/lib/ecore_imf/ecore_imf_context.c4
-rw-r--r--src/lib/ecore_imf/meson.build9
-rw-r--r--src/lib/ecore_imf_evas/meson.build7
-rw-r--r--src/lib/ecore_input/Ecore_Input.h28
-rw-r--r--src/lib/ecore_input/ecore_input_compose.c2
-rw-r--r--src/lib/ecore_input/ecore_input_joystick.c2
-rw-r--r--src/lib/ecore_input/ecore_input_private.h2
-rw-r--r--src/lib/ecore_input/meson.build9
-rw-r--r--src/lib/ecore_input_evas/Ecore_Input_Evas.h2
-rw-r--r--src/lib/ecore_input_evas/ecore_input_evas.c8
-rw-r--r--src/lib/ecore_input_evas/ecore_input_evas_private.h2
-rw-r--r--src/lib/ecore_input_evas/meson.build8
-rw-r--r--src/lib/ecore_ipc/Ecore_Ipc.h6
-rw-r--r--src/lib/ecore_ipc/ecore_ipc.c4
-rw-r--r--src/lib/ecore_ipc/ecore_ipc_private.h8
-rw-r--r--src/lib/ecore_ipc/meson.build9
-rw-r--r--src/lib/ecore_sdl/Ecore_Sdl.h2
-rw-r--r--src/lib/ecore_sdl/ecore_sdl_private.h14
-rw-r--r--src/lib/ecore_sdl/meson.build9
-rw-r--r--src/lib/ecore_wayland/Ecore_Wayland.h9
-rw-r--r--src/lib/ecore_wayland/ecore_wl.c24
-rw-r--r--src/lib/ecore_wayland/ecore_wl_dnd.c57
-rw-r--r--src/lib/ecore_wayland/ecore_wl_input.c88
-rw-r--r--src/lib/ecore_wayland/ecore_wl_output.c6
-rw-r--r--src/lib/ecore_wayland/ecore_wl_private.h4
-rw-r--r--src/lib/ecore_wayland/ecore_wl_subsurf.c18
-rw-r--r--src/lib/ecore_wayland/ecore_wl_window.c94
-rw-r--r--src/lib/ecore_wayland/ivi-application-client-protocol.h42
-rw-r--r--src/lib/ecore_wayland/session-recovery-client-protocol.h4
-rw-r--r--src/lib/ecore_wayland/xdg-shell-client-protocol.h48
-rw-r--r--src/lib/ecore_wayland/xdg-shell-protocol.c6
-rw-r--r--src/lib/ecore_win32/Ecore_Win32.h60
-rw-r--r--src/lib/ecore_win32/ecore_win32_clipboard.c224
-rw-r--r--src/lib/ecore_win32/ecore_win32_event.c201
-rw-r--r--src/lib/ecore_win32/ecore_win32_private.h1
-rw-r--r--src/lib/ecore_win32/ecore_win32_window.c58
-rw-r--r--src/lib/ecore_win32/meson.build16
-rw-r--r--src/lib/ecore_wl2/Ecore_Wl2.h557
-rw-r--r--src/lib/ecore_wl2/ecore_wl2.c10
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_buffer.c20
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_display.c31
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_dnd.c2
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_input.c51
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_internal.h467
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_private.h28
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_subsurf.c3
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_window.c150
-rw-r--r--src/lib/ecore_wl2/meson.build19
-rw-r--r--src/lib/ecore_x/Ecore_X.h36
-rw-r--r--src/lib/ecore_x/ecore_x.c109
-rw-r--r--src/lib/ecore_x/ecore_x_atoms.c6
-rw-r--r--src/lib/ecore_x/ecore_x_composite.c14
-rw-r--r--src/lib/ecore_x/ecore_x_cursor.c10
-rw-r--r--src/lib/ecore_x/ecore_x_damage.c8
-rw-r--r--src/lib/ecore_x/ecore_x_dnd.c22
-rw-r--r--src/lib/ecore_x/ecore_x_dpms.c26
-rw-r--r--src/lib/ecore_x/ecore_x_drawable.c8
-rw-r--r--src/lib/ecore_x/ecore_x_e.c270
-rw-r--r--src/lib/ecore_x/ecore_x_events.c54
-rw-r--r--src/lib/ecore_x/ecore_x_fixes.c159
-rw-r--r--src/lib/ecore_x/ecore_x_gc.c4
-rw-r--r--src/lib/ecore_x/ecore_x_icccm.c68
-rw-r--r--src/lib/ecore_x/ecore_x_image.c14
-rw-r--r--src/lib/ecore_x/ecore_x_mwm.c4
-rw-r--r--src/lib/ecore_x/ecore_x_netwm.c132
-rw-r--r--src/lib/ecore_x/ecore_x_pixmap.c10
-rw-r--r--src/lib/ecore_x/ecore_x_present.c2
-rw-r--r--src/lib/ecore_x/ecore_x_private.h6
-rw-r--r--src/lib/ecore_x/ecore_x_randr.c394
-rw-r--r--src/lib/ecore_x/ecore_x_region.c24
-rw-r--r--src/lib/ecore_x/ecore_x_resource.c118
-rw-r--r--src/lib/ecore_x/ecore_x_screensaver.c28
-rw-r--r--src/lib/ecore_x/ecore_x_selection.c50
-rw-r--r--src/lib/ecore_x/ecore_x_sync.c20
-rw-r--r--src/lib/ecore_x/ecore_x_test.c8
-rw-r--r--src/lib/ecore_x/ecore_x_vsync.c254
-rw-r--r--src/lib/ecore_x/ecore_x_window.c100
-rw-r--r--src/lib/ecore_x/ecore_x_window_prop.c44
-rw-r--r--src/lib/ecore_x/ecore_x_window_shape.c48
-rw-r--r--src/lib/ecore_x/ecore_x_xi2.c11
-rw-r--r--src/lib/ecore_x/ecore_x_xinerama.c4
-rw-r--r--src/lib/ecore_x/meson.build21
-rw-r--r--src/lib/ector/Ector.h36
-rw-r--r--src/lib/ector/ector_api.h32
-rw-r--r--src/lib/ector/ector_main.c6
-rw-r--r--src/lib/ector/ector_renderer_image.eo2
-rw-r--r--src/lib/ector/gl/Ector_GL.h29
-rw-r--r--src/lib/ector/gl/meson.build15
-rw-r--r--src/lib/ector/meson.build32
-rw-r--r--src/lib/ector/software/Ector_Software.h29
-rw-r--r--src/lib/ector/software/ector_renderer_software_image.c10
-rw-r--r--src/lib/ector/software/ector_renderer_software_shape.c16
-rw-r--r--src/lib/ector/software/ector_software_buffer.c8
-rw-r--r--src/lib/ector/software/meson.build14
-rw-r--r--src/lib/edje/Edje.h2
-rw-r--r--src/lib/edje/Edje_Common.h41
-rw-r--r--src/lib/edje/Edje_Edit.h122
-rw-r--r--src/lib/edje/Edje_Eo.h1
-rw-r--r--src/lib/edje/Edje_Legacy.h398
-rw-r--r--src/lib/edje/Efl_Layout.h1
-rw-r--r--src/lib/edje/edje_box_layout.c4
-rw-r--r--src/lib/edje/edje_cache.c20
-rw-r--r--src/lib/edje/edje_calc.c609
-rw-r--r--src/lib/edje/edje_data.c147
-rw-r--r--src/lib/edje/edje_edit.c20
-rw-r--r--src/lib/edje/edje_edit_eo.h2
-rw-r--r--src/lib/edje/edje_embryo.c22
-rw-r--r--src/lib/edje/edje_entry.c187
-rw-r--r--src/lib/edje/edje_legacy.c79
-rw-r--r--src/lib/edje/edje_load.c206
-rw-r--r--src/lib/edje/edje_lua.c20
-rw-r--r--src/lib/edje/edje_lua2.c2
-rw-r--r--src/lib/edje/edje_main.c2
-rw-r--r--src/lib/edje/edje_match.c12
-rw-r--r--src/lib/edje/edje_message_queue.c1
-rw-r--r--src/lib/edje/edje_multisense.c11
-rw-r--r--src/lib/edje/edje_part.c29
-rw-r--r--src/lib/edje/edje_part_invalid.c2
-rw-r--r--src/lib/edje/edje_part_text.c16
-rw-r--r--src/lib/edje/edje_private.h227
-rw-r--r--src/lib/edje/edje_program.c89
-rw-r--r--src/lib/edje/edje_smart.c7
-rw-r--r--src/lib/edje/edje_text.c13
-rw-r--r--src/lib/edje/edje_textblock.c37
-rw-r--r--src/lib/edje/edje_textblock_styles.c226
-rw-r--r--src/lib/edje/edje_util.c178
-rw-r--r--src/lib/edje/efl_canvas_layout.eo10
-rw-r--r--src/lib/edje/efl_canvas_layout_part.eo15
-rw-r--r--src/lib/edje/efl_canvas_layout_part_invalid.eo2
-rw-r--r--src/lib/edje/efl_canvas_layout_part_text.eo10
-rw-r--r--src/lib/edje/efl_canvas_layout_part_type_provider.eo20
-rw-r--r--src/lib/edje/efl_canvas_layout_types.eot3
-rw-r--r--src/lib/edje/efl_layout_group.eo2
-rw-r--r--src/lib/edje/meson.build14
-rw-r--r--src/lib/eet/Eet.h29
-rw-r--r--src/lib/eet/eet_cipher.c46
-rw-r--r--src/lib/eet/eet_connection.c20
-rw-r--r--src/lib/eet/eet_data.c22
-rw-r--r--src/lib/eet/eet_lib.c4
-rw-r--r--src/lib/eet/meson.build10
-rw-r--r--src/lib/eeze/Eeze.h6
-rw-r--r--src/lib/eeze/eeze_disk.c9
-rw-r--r--src/lib/eeze/eeze_disk_libmount_new.c2
-rw-r--r--src/lib/eeze/eeze_net.c6
-rw-r--r--src/lib/eeze/eeze_udev_syspath.c17
-rw-r--r--src/lib/eeze/eeze_udev_walk.c15
-rw-r--r--src/lib/eeze/meson.build21
-rw-r--r--src/lib/efl/Efl.h99
-rw-r--r--src/lib/efl/Efl_Config.h.in4
-rw-r--r--src/lib/efl/interfaces/efl_config.eo3
-rw-r--r--src/lib/efl/interfaces/efl_file.c4
-rw-r--r--src/lib/efl/interfaces/efl_file_save.eo3
-rw-r--r--src/lib/efl/interfaces/efl_gfx_color.eo2
-rw-r--r--src/lib/efl/interfaces/efl_gfx_frame_controller.eo16
-rw-r--r--src/lib/efl/interfaces/efl_gfx_hint.eo2
-rw-r--r--src/lib/efl/interfaces/efl_gfx_image_load_controller.eo1
-rw-r--r--src/lib/efl/interfaces/efl_gfx_path.c28
-rw-r--r--src/lib/efl/interfaces/efl_gfx_path.eo5
-rw-r--r--src/lib/efl/interfaces/efl_gfx_types.eot28
-rw-r--r--src/lib/efl/interfaces/efl_input_text_entity.eo (renamed from src/lib/efl/interfaces/efl_input_text.eo)144
-rw-r--r--src/lib/efl/interfaces/efl_interfaces_main.c2
-rw-r--r--src/lib/efl/interfaces/efl_io_buffer.eo2
-rw-r--r--src/lib/efl/interfaces/efl_model.eo12
-rw-r--r--src/lib/efl/interfaces/efl_observable.eo2
-rw-r--r--src/lib/efl/interfaces/efl_player.eo53
-rw-r--r--src/lib/efl/interfaces/efl_text_font_properties.eo104
-rw-r--r--src/lib/efl/interfaces/efl_text_format.eo67
-rw-r--r--src/lib/efl/interfaces/efl_text_markup.eo3
-rw-r--r--src/lib/efl/interfaces/efl_text_style.eo142
-rw-r--r--src/lib/efl/interfaces/efl_text_types.eot24
-rw-r--r--src/lib/efl/interfaces/efl_types.eot4
-rw-r--r--src/lib/efl/interfaces/efl_ui_draggable.eo12
-rw-r--r--src/lib/efl/interfaces/efl_ui_factory_bind.eo2
-rw-r--r--src/lib/efl/interfaces/efl_ui_range_display.eo2
-rw-r--r--src/lib/efl/interfaces/efl_ui_scrollbar.eo12
-rw-r--r--src/lib/efl/interfaces/meson.build2
-rw-r--r--src/lib/efl/meson.build6
-rw-r--r--src/lib/efl_canvas_wl/Efl_Canvas_Wl.h61
-rw-r--r--src/lib/efl_canvas_wl/copiedfromweston.x (renamed from src/lib/efl_wl/copiedfromweston.x)0
-rw-r--r--src/lib/efl_canvas_wl/dmabuf.c (renamed from src/lib/efl_wl/dmabuf.c)0
-rw-r--r--src/lib/efl_canvas_wl/dmabuf.h (renamed from src/lib/efl_wl/dmabuf.h)0
-rw-r--r--src/lib/efl_canvas_wl/efl_canvas_wl.c (renamed from src/lib/efl_wl/efl_wl.c)686
-rw-r--r--src/lib/efl_canvas_wl/efl_canvas_wl.eo183
-rw-r--r--src/lib/efl_canvas_wl/efl_canvas_wl_surface.eo68
-rw-r--r--src/lib/efl_canvas_wl/meson.build62
-rw-r--r--src/lib/efl_canvas_wl/x11.x (renamed from src/lib/efl_wl/x11.x)0
-rw-r--r--src/lib/efl_mono/efl_custom_exports_mono.c25
-rw-r--r--src/lib/efl_wl/Efl_Wl.h229
-rw-r--r--src/lib/efl_wl/meson.build32
-rw-r--r--src/lib/efreet/Efreet.h9
-rw-r--r--src/lib/efreet/Efreet_Trash.h2
-rw-r--r--src/lib/efreet/efreet.c12
-rw-r--r--src/lib/efreet/efreet_base.c80
-rw-r--r--src/lib/efreet/efreet_cache.c202
-rw-r--r--src/lib/efreet/efreet_cache_private.h28
-rw-r--r--src/lib/efreet/efreet_desktop.c17
-rw-r--r--src/lib/efreet/efreet_icon.c2
-rw-r--r--src/lib/efreet/efreet_menu.c8
-rw-r--r--src/lib/efreet/efreet_mime.c40
-rw-r--r--src/lib/efreet/efreet_private.h8
-rw-r--r--src/lib/efreet/efreet_trash.c26
-rw-r--r--src/lib/efreet/efreet_uri.c70
-rw-r--r--src/lib/efreet/efreet_uri.h2
-rw-r--r--src/lib/efreet/meson.build69
-rw-r--r--src/lib/eina/Eina.h10
-rw-r--r--src/lib/eina/eina_abi.c4
-rw-r--r--src/lib/eina/eina_abstract_content.c458
-rw-r--r--src/lib/eina/eina_abstract_content.h154
-rw-r--r--src/lib/eina/eina_accessor.c30
-rw-r--r--src/lib/eina/eina_accessor.h22
-rw-r--r--src/lib/eina/eina_array.c16
-rw-r--r--src/lib/eina/eina_array.h14
-rw-r--r--src/lib/eina/eina_benchmark.c8
-rw-r--r--src/lib/eina/eina_benchmark.h16
-rw-r--r--src/lib/eina/eina_bezier.c18
-rw-r--r--src/lib/eina/eina_bezier.h29
-rw-r--r--src/lib/eina/eina_binbuf.c2
-rw-r--r--src/lib/eina/eina_binbuf.h46
-rw-r--r--src/lib/eina/eina_binbuf_template_c.x44
-rw-r--r--src/lib/eina/eina_binshare.c14
-rw-r--r--src/lib/eina/eina_binshare.h10
-rw-r--r--src/lib/eina/eina_convert.c25
-rw-r--r--src/lib/eina/eina_convert.h20
-rw-r--r--src/lib/eina/eina_counter.c10
-rw-r--r--src/lib/eina/eina_counter.h10
-rw-r--r--src/lib/eina/eina_cow.c16
-rw-r--r--src/lib/eina/eina_cow.h16
-rw-r--r--src/lib/eina/eina_cpu.c8
-rw-r--r--src/lib/eina/eina_cpu.h42
-rw-r--r--src/lib/eina/eina_crc.c2
-rw-r--r--src/lib/eina/eina_debug.c24
-rw-r--r--src/lib/eina/eina_debug.h32
-rw-r--r--src/lib/eina/eina_debug_bt.c7
-rw-r--r--src/lib/eina/eina_debug_private.h4
-rw-r--r--src/lib/eina/eina_debug_timer.c4
-rw-r--r--src/lib/eina/eina_error.c24
-rw-r--r--src/lib/eina/eina_error.h28
-rw-r--r--src/lib/eina/eina_evlog.c8
-rw-r--r--src/lib/eina/eina_evlog.h8
-rw-r--r--src/lib/eina/eina_file.h76
-rw-r--r--src/lib/eina/eina_file_common.c132
-rw-r--r--src/lib/eina/eina_file_common.h5
-rw-r--r--src/lib/eina/eina_file_posix.c (renamed from src/lib/eina/eina_file.c)359
-rw-r--r--src/lib/eina/eina_file_win32.c276
-rw-r--r--src/lib/eina/eina_fp.c4
-rw-r--r--src/lib/eina/eina_fp.h10
-rw-r--r--src/lib/eina/eina_freeq.c245
-rw-r--r--src/lib/eina/eina_freeq.h60
-rw-r--r--src/lib/eina/eina_hamster.c2
-rw-r--r--src/lib/eina/eina_hamster.h15
-rw-r--r--src/lib/eina/eina_hash.c74
-rw-r--r--src/lib/eina/eina_hash.h76
-rw-r--r--src/lib/eina/eina_inarray.c54
-rw-r--r--src/lib/eina/eina_inarray.h52
-rw-r--r--src/lib/eina/eina_inline_array.x14
-rw-r--r--src/lib/eina/eina_inline_crc.x2
-rw-r--r--src/lib/eina/eina_inline_hash.x2
-rw-r--r--src/lib/eina/eina_inline_lock_posix.x52
-rw-r--r--src/lib/eina/eina_inline_mempool.x4
-rw-r--r--src/lib/eina/eina_inline_modinfo.x27
-rw-r--r--src/lib/eina/eina_inline_range.x82
-rw-r--r--src/lib/eina/eina_inline_safepointer.x4
-rw-r--r--src/lib/eina/eina_inline_str.x20
-rw-r--r--src/lib/eina/eina_inline_unicode.x9
-rw-r--r--src/lib/eina/eina_inline_value.x15
-rw-r--r--src/lib/eina/eina_inlist.c34
-rw-r--r--src/lib/eina/eina_inlist.h38
-rw-r--r--src/lib/eina/eina_internal.h45
-rw-r--r--src/lib/eina/eina_iterator.c79
-rw-r--r--src/lib/eina/eina_iterator.h42
-rw-r--r--src/lib/eina/eina_lalloc.c8
-rw-r--r--src/lib/eina/eina_lalloc.h8
-rw-r--r--src/lib/eina/eina_list.c70
-rw-r--r--src/lib/eina/eina_list.h74
-rw-r--r--src/lib/eina/eina_lock.c36
-rw-r--r--src/lib/eina/eina_lock.h12
-rw-r--r--src/lib/eina/eina_log.c158
-rw-r--r--src/lib/eina/eina_log.h88
-rw-r--r--src/lib/eina/eina_magic.c10
-rw-r--r--src/lib/eina/eina_magic.h14
-rw-r--r--src/lib/eina/eina_main.c67
-rw-r--r--src/lib/eina/eina_main.h27
-rw-r--r--src/lib/eina/eina_matrix.c355
-rw-r--r--src/lib/eina/eina_matrix.h181
-rw-r--r--src/lib/eina/eina_matrixsparse.c38
-rw-r--r--src/lib/eina/eina_matrixsparse.h36
-rw-r--r--src/lib/eina/eina_mempool.c16
-rw-r--r--src/lib/eina/eina_mempool.h16
-rw-r--r--src/lib/eina/eina_mmap.c6
-rw-r--r--src/lib/eina/eina_mmap.h4
-rw-r--r--src/lib/eina/eina_module.c34
-rw-r--r--src/lib/eina/eina_module.h62
-rw-r--r--src/lib/eina/eina_prefix.c30
-rw-r--r--src/lib/eina/eina_prefix.h14
-rw-r--r--src/lib/eina/eina_private.h7
-rw-r--r--src/lib/eina/eina_promise.c130
-rw-r--r--src/lib/eina/eina_promise.h590
-rw-r--r--src/lib/eina/eina_quad.c8
-rw-r--r--src/lib/eina/eina_quad.h9
-rw-r--r--src/lib/eina/eina_quadtree.c24
-rw-r--r--src/lib/eina/eina_quadtree.h36
-rw-r--r--src/lib/eina/eina_quaternion.c84
-rw-r--r--src/lib/eina/eina_quaternion.h92
-rw-r--r--src/lib/eina/eina_range.h116
-rw-r--r--src/lib/eina/eina_rbtree.c24
-rw-r--r--src/lib/eina/eina_rbtree.h12
-rw-r--r--src/lib/eina/eina_rectangle.c26
-rw-r--r--src/lib/eina/eina_rectangle.h73
-rw-r--r--src/lib/eina/eina_safepointer.c8
-rw-r--r--src/lib/eina/eina_safepointer.h4
-rw-r--r--src/lib/eina/eina_safety_checks.c4
-rw-r--r--src/lib/eina/eina_safety_checks.h16
-rw-r--r--src/lib/eina/eina_sched.c2
-rw-r--r--src/lib/eina/eina_sched.h2
-rw-r--r--src/lib/eina/eina_simple_xml_parser.c46
-rw-r--r--src/lib/eina/eina_simple_xml_parser.h61
-rw-r--r--src/lib/eina/eina_slice.h26
-rw-r--r--src/lib/eina/eina_slstr.c22
-rw-r--r--src/lib/eina/eina_slstr.h16
-rw-r--r--src/lib/eina/eina_str.c34
-rw-r--r--src/lib/eina/eina_str.h30
-rw-r--r--src/lib/eina/eina_strbuf.c22
-rw-r--r--src/lib/eina/eina_strbuf.h96
-rw-r--r--src/lib/eina/eina_strbuf_common.c72
-rw-r--r--src/lib/eina/eina_strbuf_template_c.x14
-rw-r--r--src/lib/eina/eina_stringshare.c18
-rw-r--r--src/lib/eina/eina_stringshare.h18
-rw-r--r--src/lib/eina/eina_thread.c77
-rw-r--r--src/lib/eina/eina_thread.h39
-rw-r--r--src/lib/eina/eina_thread_queue.c24
-rw-r--r--src/lib/eina/eina_thread_queue.h24
-rw-r--r--src/lib/eina/eina_tiler.c36
-rw-r--r--src/lib/eina/eina_tiler.h32
-rw-r--r--src/lib/eina/eina_tmpstr.c14
-rw-r--r--src/lib/eina/eina_tmpstr.h14
-rw-r--r--src/lib/eina/eina_types.h125
-rw-r--r--src/lib/eina/eina_unicode.c80
-rw-r--r--src/lib/eina/eina_unicode.h32
-rw-r--r--src/lib/eina/eina_ustrbuf.h52
-rw-r--r--src/lib/eina/eina_ustringshare.c12
-rw-r--r--src/lib/eina/eina_ustringshare.h12
-rw-r--r--src/lib/eina/eina_util.c4
-rw-r--r--src/lib/eina/eina_util.h4
-rw-r--r--src/lib/eina/eina_value.c166
-rw-r--r--src/lib/eina/eina_value.h112
-rw-r--r--src/lib/eina/eina_value_util.c4
-rw-r--r--src/lib/eina/eina_value_util.h4
-rw-r--r--src/lib/eina/eina_vector.h48
-rw-r--r--src/lib/eina/eina_vpath.c22
-rw-r--r--src/lib/eina/eina_vpath.h4
-rw-r--r--src/lib/eina/eina_xattr.c36
-rw-r--r--src/lib/eina/eina_xattr.h51
-rw-r--r--src/lib/eina/meson.build57
-rw-r--r--src/lib/eio/Eio.h38
-rw-r--r--src/lib/eio/Eio_Legacy.h138
-rw-r--r--src/lib/eio/efl_io_manager.eo8
-rw-r--r--src/lib/eio/eio_dir.c10
-rw-r--r--src/lib/eio/eio_eet.c20
-rw-r--r--src/lib/eio/eio_file.c26
-rw-r--r--src/lib/eio/eio_main.c10
-rw-r--r--src/lib/eio/eio_map.c8
-rw-r--r--src/lib/eio/eio_monitor.c34
-rw-r--r--src/lib/eio/eio_monitor_kevent.c8
-rw-r--r--src/lib/eio/eio_monitor_poll.c4
-rw-r--r--src/lib/eio/eio_private.h2
-rw-r--r--src/lib/eio/eio_single.c12
-rw-r--r--src/lib/eio/eio_xattr.c18
-rw-r--r--src/lib/eio/meson.build20
-rw-r--r--src/lib/eldbus/Eldbus.h4
-rw-r--r--src/lib/eldbus/eldbus_connection.h2
-rw-r--r--src/lib/eldbus/eldbus_core.c2
-rw-r--r--src/lib/eldbus/eldbus_introspection.c1
-rw-r--r--src/lib/eldbus/eldbus_message.c34
-rw-r--r--src/lib/eldbus/eldbus_message.h4
-rw-r--r--src/lib/eldbus/eldbus_pending.c2
-rw-r--r--src/lib/eldbus/eldbus_service.c7
-rw-r--r--src/lib/eldbus/meson.build24
-rw-r--r--src/lib/elementary/Efl_Ui.h25
-rw-r--r--src/lib/elementary/Elementary.h10
-rw-r--r--src/lib/elementary/efl_access_object.eo2
-rw-r--r--src/lib/elementary/efl_access_text.c2
-rw-r--r--src/lib/elementary/efl_access_text.eo20
-rw-r--r--src/lib/elementary/efl_text_interactive.eo25
-rw-r--r--src/lib/elementary/efl_ui.eot10
-rw-r--r--src/lib/elementary/efl_ui_alert_popup.c2
-rw-r--r--src/lib/elementary/efl_ui_animation_view.c803
-rw-r--r--src/lib/elementary/efl_ui_animation_view.eo313
-rw-r--r--src/lib/elementary/efl_ui_animation_view_eo.legacy.c162
-rw-r--r--src/lib/elementary/efl_ui_animation_view_private.h42
-rw-r--r--src/lib/elementary/efl_ui_bg.c6
-rw-r--r--src/lib/elementary/efl_ui_bg_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_button.c24
-rw-r--r--src/lib/elementary/efl_ui_button_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_calendar_private.h15
-rw-r--r--src/lib/elementary/efl_ui_check.c26
-rw-r--r--src/lib/elementary/efl_ui_check_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_clock.h6
-rw-r--r--src/lib/elementary/efl_ui_collection.c31
-rw-r--r--src/lib/elementary/efl_ui_collection.eo1
-rw-r--r--src/lib/elementary/efl_ui_collection_view.c2
-rw-r--r--src/lib/elementary/efl_ui_datepicker.c4
-rw-r--r--src/lib/elementary/efl_ui_dnd.c878
-rw-r--r--src/lib/elementary/efl_ui_dnd.eo120
-rw-r--r--src/lib/elementary/efl_ui_dnd_container.eo46
-rw-r--r--src/lib/elementary/efl_ui_dnd_types.eot60
-rw-r--r--src/lib/elementary/efl_ui_exact_model.c23
-rw-r--r--src/lib/elementary/efl_ui_flip.c8
-rw-r--r--src/lib/elementary/efl_ui_flip_eo.legacy.c8
-rw-r--r--src/lib/elementary/efl_ui_flip_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_focus_layer.c12
-rw-r--r--src/lib/elementary/efl_ui_focus_manager.c8
-rw-r--r--src/lib/elementary/efl_ui_focus_manager.eo17
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_calc.c165
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_calc.eo20
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_sub.c15
-rw-r--r--src/lib/elementary/efl_ui_focus_parent_provider_gen_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_format.c22
-rw-r--r--src/lib/elementary/efl_ui_format.eo2
-rw-r--r--src/lib/elementary/efl_ui_frame_legacy.h2
-rw-r--r--src/lib/elementary/efl_ui_frame_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_image.c159
-rw-r--r--src/lib/elementary/efl_ui_image.eo6
-rw-r--r--src/lib/elementary/efl_ui_image_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_image_zoomable.c154
-rw-r--r--src/lib/elementary/efl_ui_image_zoomable.eo7
-rw-r--r--src/lib/elementary/efl_ui_image_zoomable_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_image_zoomable_private.h2
-rw-r--r--src/lib/elementary/efl_ui_internal_text_interactive.c756
-rw-r--r--src/lib/elementary/efl_ui_internal_text_interactive.eo35
-rw-r--r--src/lib/elementary/efl_ui_internal_text_scroller.c7
-rw-r--r--src/lib/elementary/efl_ui_item.c5
-rw-r--r--src/lib/elementary/efl_ui_layout.c124
-rw-r--r--src/lib/elementary/efl_ui_layout.eo3
-rw-r--r--src/lib/elementary/efl_ui_layout_base.eo3
-rw-r--r--src/lib/elementary/efl_ui_layout_legacy_eo.h4
-rw-r--r--src/lib/elementary/efl_ui_multi_selectable_index_range.eo2
-rw-r--r--src/lib/elementary/efl_ui_multi_selectable_object_range.eo2
-rw-r--r--src/lib/elementary/efl_ui_pager.c2
-rw-r--r--src/lib/elementary/efl_ui_pager.eo4
-rw-r--r--src/lib/elementary/efl_ui_panel.c21
-rw-r--r--src/lib/elementary/efl_ui_panel_private.h15
-rw-r--r--src/lib/elementary/efl_ui_panes.c4
-rw-r--r--src/lib/elementary/efl_ui_panes.eo4
-rw-r--r--src/lib/elementary/efl_ui_panes_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_position_manager_list.c1
-rw-r--r--src/lib/elementary/efl_ui_progressbar.c232
-rw-r--r--src/lib/elementary/efl_ui_progressbar.eo54
-rw-r--r--src/lib/elementary/efl_ui_progressbar_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_progressbar_private.h2
-rw-r--r--src/lib/elementary/efl_ui_radio.c25
-rw-r--r--src/lib/elementary/efl_ui_radio_group_impl.c12
-rw-r--r--src/lib/elementary/efl_ui_radio_group_impl.eo1
-rw-r--r--src/lib/elementary/efl_ui_radio_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_scroll_manager.c9
-rw-r--r--src/lib/elementary/efl_ui_scroll_manager.eo1
-rw-r--r--src/lib/elementary/efl_ui_scroll_util.c81
-rw-r--r--src/lib/elementary/efl_ui_select_model.c44
-rw-r--r--src/lib/elementary/efl_ui_selection.c297
-rw-r--r--src/lib/elementary/efl_ui_selection.eo120
-rw-r--r--src/lib/elementary/efl_ui_selection_manager.c5678
-rw-r--r--src/lib/elementary/efl_ui_selection_manager.eo139
-rw-r--r--src/lib/elementary/efl_ui_selection_types.eot60
-rw-r--r--src/lib/elementary/efl_ui_separator.c46
-rw-r--r--src/lib/elementary/efl_ui_separator.eo20
-rw-r--r--src/lib/elementary/efl_ui_single_selectable.eo6
-rw-r--r--src/lib/elementary/efl_ui_slider.c52
-rw-r--r--src/lib/elementary/efl_ui_slider.eo4
-rw-r--r--src/lib/elementary/efl_ui_slider_interval.c49
-rw-r--r--src/lib/elementary/efl_ui_slider_interval.eo5
-rw-r--r--src/lib/elementary/efl_ui_spin.c1
-rw-r--r--src/lib/elementary/efl_ui_spin.eo2
-rw-r--r--src/lib/elementary/efl_ui_spin_button.c48
-rw-r--r--src/lib/elementary/efl_ui_spin_button.eo3
-rw-r--r--src/lib/elementary/efl_ui_spotlight_animation_manager.c (renamed from src/lib/elementary/efl_ui_spotlight_manager_stack.c)104
-rw-r--r--src/lib/elementary/efl_ui_spotlight_animation_manager.eo75
-rw-r--r--src/lib/elementary/efl_ui_spotlight_container.c36
-rw-r--r--src/lib/elementary/efl_ui_spotlight_container.eo12
-rw-r--r--src/lib/elementary/efl_ui_spotlight_fade_manager.c30
-rw-r--r--src/lib/elementary/efl_ui_spotlight_fade_manager.eo7
-rw-r--r--src/lib/elementary/efl_ui_spotlight_icon_indicator.c (renamed from src/lib/elementary/efl_ui_spotlight_indicator_icon.c)22
-rw-r--r--src/lib/elementary/efl_ui_spotlight_icon_indicator.eo (renamed from src/lib/elementary/efl_ui_spotlight_indicator_icon.eo)3
-rw-r--r--src/lib/elementary/efl_ui_spotlight_manager.eo8
-rw-r--r--src/lib/elementary/efl_ui_spotlight_manager_stack.eo12
-rw-r--r--src/lib/elementary/efl_ui_spotlight_plain_manager.c (renamed from src/lib/elementary/efl_ui_spotlight_manager_plain.c)57
-rw-r--r--src/lib/elementary/efl_ui_spotlight_plain_manager.eo (renamed from src/lib/elementary/efl_ui_spotlight_manager_plain.eo)4
-rw-r--r--src/lib/elementary/efl_ui_spotlight_scroll_manager.c (renamed from src/lib/elementary/efl_ui_spotlight_manager_scroll.c)62
-rw-r--r--src/lib/elementary/efl_ui_spotlight_scroll_manager.eo (renamed from src/lib/elementary/efl_ui_spotlight_manager_scroll.eo)3
-rw-r--r--src/lib/elementary/efl_ui_spotlight_util.c2
-rw-r--r--src/lib/elementary/efl_ui_stack.c2
-rw-r--r--src/lib/elementary/efl_ui_stack.eo3
-rw-r--r--src/lib/elementary/efl_ui_tab_bar.c13
-rw-r--r--src/lib/elementary/efl_ui_tab_bar.eo1
-rw-r--r--src/lib/elementary/efl_ui_tab_bar_private.h1
-rw-r--r--src/lib/elementary/efl_ui_tab_pager.c140
-rw-r--r--src/lib/elementary/efl_ui_tab_pager.eo24
-rw-r--r--src/lib/elementary/efl_ui_tab_pager_private.h1
-rw-r--r--src/lib/elementary/efl_ui_table.c22
-rw-r--r--src/lib/elementary/efl_ui_tags.c2
-rw-r--r--src/lib/elementary/efl_ui_text_part.eo8
-rw-r--r--src/lib/elementary/efl_ui_textbox.c1998
-rw-r--r--src/lib/elementary/efl_ui_textbox.eo94
-rw-r--r--src/lib/elementary/efl_ui_textbox_part.eo8
-rw-r--r--src/lib/elementary/efl_ui_textpath.c127
-rw-r--r--src/lib/elementary/efl_ui_textpath_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_timepicker.c66
-rw-r--r--src/lib/elementary/efl_ui_timepicker.eo1
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.c1592
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.eo179
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.h (renamed from src/lib/elementary/efl_ui_animation_view.h)2
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_eo.legacy.c200
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_eo.legacy.h (renamed from src/lib/elementary/efl_ui_animation_view_eo.legacy.h)10
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_legacy.h (renamed from src/lib/elementary/efl_ui_animation_view_legacy.h)2
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_part.eo9
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_private.h44
-rw-r--r--src/lib/elementary/efl_ui_video.h6
-rw-r--r--src/lib/elementary/efl_ui_video_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_widget.c304
-rw-r--r--src/lib/elementary/efl_ui_widget_common.c13
-rw-r--r--src/lib/elementary/efl_ui_widget_image.h2
-rw-r--r--src/lib/elementary/efl_ui_widget_part.eo8
-rw-r--r--src/lib/elementary/efl_ui_widget_scrollable_content.eo2
-rw-r--r--src/lib/elementary/efl_ui_win.c673
-rw-r--r--src/lib/elementary/efl_ui_win.eo4
-rw-r--r--src/lib/elementary/efl_ui_win_inlined_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_win_legacy_eo.h2
-rw-r--r--src/lib/elementary/efl_ui_win_socket_legacy_eo.h2
-rw-r--r--src/lib/elementary/elc_combobox.c6
-rw-r--r--src/lib/elementary/elc_ctxpopup.c4
-rw-r--r--src/lib/elementary/elc_ctxpopup.h10
-rw-r--r--src/lib/elementary/elc_ctxpopup_legacy.h2
-rw-r--r--src/lib/elementary/elc_fileselector.c55
-rw-r--r--src/lib/elementary/elc_fileselector.h2
-rw-r--r--src/lib/elementary/elc_fileselector_button.c2
-rw-r--r--src/lib/elementary/elc_fileselector_entry.c6
-rw-r--r--src/lib/elementary/elc_fileselector_entry.h2
-rw-r--r--src/lib/elementary/elc_hoversel.c11
-rw-r--r--src/lib/elementary/elc_multibuttonentry.h6
-rw-r--r--src/lib/elementary/elc_naviframe.c11
-rw-r--r--src/lib/elementary/elc_naviframe.h6
-rw-r--r--src/lib/elementary/elc_naviframe_common.h2
-rw-r--r--src/lib/elementary/elc_naviframe_legacy.h4
-rw-r--r--src/lib/elementary/elc_popup.h6
-rw-r--r--src/lib/elementary/elc_popup_legacy.h4
-rw-r--r--src/lib/elementary/elementary_config.h4
-rw-r--r--src/lib/elementary/elm_access.c4
-rw-r--r--src/lib/elementary/elm_access_eo.h2
-rw-r--r--src/lib/elementary/elm_actionslider.h4
-rw-r--r--src/lib/elementary/elm_actionslider_eo.h2
-rw-r--r--src/lib/elementary/elm_atspi_app_object_eo.h2
-rw-r--r--src/lib/elementary/elm_atspi_bridge.c682
-rw-r--r--src/lib/elementary/elm_atspi_bridge_eo.h2
-rw-r--r--src/lib/elementary/elm_bg.h2
-rw-r--r--src/lib/elementary/elm_bg_legacy.h2
-rw-r--r--src/lib/elementary/elm_box.c21
-rw-r--r--src/lib/elementary/elm_box.h2
-rw-r--r--src/lib/elementary/elm_box_common.h2
-rw-r--r--src/lib/elementary/elm_box_eo.h42
-rw-r--r--src/lib/elementary/elm_box_legacy.h4
-rw-r--r--src/lib/elementary/elm_bubble.h4
-rw-r--r--src/lib/elementary/elm_bubble_eo.h2
-rw-r--r--src/lib/elementary/elm_calendar.c20
-rw-r--r--src/lib/elementary/elm_calendar_eo.h6
-rw-r--r--src/lib/elementary/elm_calendar_eo.legacy.h4
-rw-r--r--src/lib/elementary/elm_calendar_item_eo.h2
-rw-r--r--src/lib/elementary/elm_clock.h4
-rw-r--r--src/lib/elementary/elm_clock_eo.h2
-rw-r--r--src/lib/elementary/elm_cnp.c302
-rw-r--r--src/lib/elementary/elm_cnp.h2
-rw-r--r--src/lib/elementary/elm_code_diff_widget.h2
-rw-r--r--src/lib/elementary/elm_code_line.h4
-rw-r--r--src/lib/elementary/elm_code_parse.h8
-rw-r--r--src/lib/elementary/elm_code_syntax.c24
-rw-r--r--src/lib/elementary/elm_code_text.c3
-rw-r--r--src/lib/elementary/elm_code_text.h2
-rw-r--r--src/lib/elementary/elm_code_widget.c138
-rw-r--r--src/lib/elementary/elm_code_widget_legacy_eo.h2
-rw-r--r--src/lib/elementary/elm_code_widget_private.h1
-rw-r--r--src/lib/elementary/elm_color_class.h1
-rw-r--r--src/lib/elementary/elm_color_item_eo.h2
-rw-r--r--src/lib/elementary/elm_colorselector.c16
-rw-r--r--src/lib/elementary/elm_colorselector_eo.h2
-rw-r--r--src/lib/elementary/elm_config.c180
-rw-r--r--src/lib/elementary/elm_config.h156
-rw-r--r--src/lib/elementary/elm_conformant_eo.h2
-rw-r--r--src/lib/elementary/elm_ctxpopup_eo.h48
-rw-r--r--src/lib/elementary/elm_ctxpopup_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_ctxpopup_item_eo.h24
-rw-r--r--src/lib/elementary/elm_datetime.h6
-rw-r--r--src/lib/elementary/elm_dayselector.h4
-rw-r--r--src/lib/elementary/elm_dayselector_eo.h2
-rw-r--r--src/lib/elementary/elm_dayselector_item_eo.h2
-rw-r--r--src/lib/elementary/elm_dbus_menu.c1
-rw-r--r--src/lib/elementary/elm_deprecated.h12
-rw-r--r--src/lib/elementary/elm_diskselector.h4
-rw-r--r--src/lib/elementary/elm_diskselector_eo.h2
-rw-r--r--src/lib/elementary/elm_diskselector_item_eo.h2
-rw-r--r--src/lib/elementary/elm_dnd.c827
-rw-r--r--src/lib/elementary/elm_entry.c71
-rw-r--r--src/lib/elementary/elm_entry.h4
-rw-r--r--src/lib/elementary/elm_entry_common.h2
-rw-r--r--src/lib/elementary/elm_entry_eo.c4
-rw-r--r--src/lib/elementary/elm_entry_eo.h246
-rw-r--r--src/lib/elementary/elm_entry_eo.legacy.h4
-rw-r--r--src/lib/elementary/elm_entry_legacy.h12
-rw-r--r--src/lib/elementary/elm_factory.c2
-rw-r--r--src/lib/elementary/elm_fileselector_button_eo.h2
-rw-r--r--src/lib/elementary/elm_fileselector_entry_eo.h2
-rw-r--r--src/lib/elementary/elm_fileselector_eo.h2
-rw-r--r--src/lib/elementary/elm_flipselector.c8
-rw-r--r--src/lib/elementary/elm_flipselector.h4
-rw-r--r--src/lib/elementary/elm_flipselector_eo.h4
-rw-r--r--src/lib/elementary/elm_flipselector_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_flipselector_item_eo.h2
-rw-r--r--src/lib/elementary/elm_focus_item.h4
-rw-r--r--src/lib/elementary/elm_focus_legacy.c20
-rw-r--r--src/lib/elementary/elm_frame.h6
-rw-r--r--src/lib/elementary/elm_general.eot155
-rw-r--r--src/lib/elementary/elm_general.h18
-rw-r--r--src/lib/elementary/elm_gengrid.c67
-rw-r--r--src/lib/elementary/elm_gengrid.h10
-rw-r--r--src/lib/elementary/elm_gengrid_common.h32
-rw-r--r--src/lib/elementary/elm_gengrid_eo.h116
-rw-r--r--src/lib/elementary/elm_gengrid_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_gengrid_item_eo.h48
-rw-r--r--src/lib/elementary/elm_gengrid_item_eo.legacy.h5
-rw-r--r--src/lib/elementary/elm_gengrid_legacy.h22
-rw-r--r--src/lib/elementary/elm_gengrid_pan_eo.h2
-rw-r--r--src/lib/elementary/elm_genlist.c64
-rw-r--r--src/lib/elementary/elm_genlist.h10
-rw-r--r--src/lib/elementary/elm_genlist_common.h32
-rw-r--r--src/lib/elementary/elm_genlist_eo.h160
-rw-r--r--src/lib/elementary/elm_genlist_item_eo.h74
-rw-r--r--src/lib/elementary/elm_genlist_item_eo.legacy.h5
-rw-r--r--src/lib/elementary/elm_genlist_legacy.h4
-rw-r--r--src/lib/elementary/elm_genlist_pan_eo.h2
-rw-r--r--src/lib/elementary/elm_gesture_layer.c37
-rw-r--r--src/lib/elementary/elm_gesture_layer.h2
-rw-r--r--src/lib/elementary/elm_gesture_layer_eo.h2
-rw-r--r--src/lib/elementary/elm_gesture_layer_extra_gestures.c16
-rw-r--r--src/lib/elementary/elm_gesture_layer_legacy.h6
-rw-r--r--src/lib/elementary/elm_glview.c3
-rw-r--r--src/lib/elementary/elm_glview.h5
-rw-r--r--src/lib/elementary/elm_glview_common.h2
-rw-r--r--src/lib/elementary/elm_glview_eo.h4
-rw-r--r--src/lib/elementary/elm_glview_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_glview_legacy.h14
-rw-r--r--src/lib/elementary/elm_grid.c21
-rw-r--r--src/lib/elementary/elm_grid.h2
-rw-r--r--src/lib/elementary/elm_grid_eo.h2
-rw-r--r--src/lib/elementary/elm_grid_legacy.h8
-rw-r--r--src/lib/elementary/elm_helper.h2
-rw-r--r--src/lib/elementary/elm_hover.h4
-rw-r--r--src/lib/elementary/elm_hover_eo.h2
-rw-r--r--src/lib/elementary/elm_hoversel_eo.h2
-rw-r--r--src/lib/elementary/elm_hoversel_item_eo.h2
-rw-r--r--src/lib/elementary/elm_icon.c15
-rw-r--r--src/lib/elementary/elm_icon_eo.h2
-rw-r--r--src/lib/elementary/elm_index.c12
-rw-r--r--src/lib/elementary/elm_index.h4
-rw-r--r--src/lib/elementary/elm_index_eo.h2
-rw-r--r--src/lib/elementary/elm_index_item_eo.h2
-rw-r--r--src/lib/elementary/elm_index_item_eo.legacy.h5
-rw-r--r--src/lib/elementary/elm_index_legacy.h6
-rw-r--r--src/lib/elementary/elm_interface_fileselector.c2
-rw-r--r--src/lib/elementary/elm_interface_fileselector_eo.h2
-rw-r--r--src/lib/elementary/elm_interface_scrollable.c42
-rw-r--r--src/lib/elementary/elm_interface_scrollable.h2
-rw-r--r--src/lib/elementary/elm_inwin.h8
-rw-r--r--src/lib/elementary/elm_inwin_eo.h2
-rw-r--r--src/lib/elementary/elm_inwin_legacy.h8
-rw-r--r--src/lib/elementary/elm_label.h6
-rw-r--r--src/lib/elementary/elm_label_eo.c2
-rw-r--r--src/lib/elementary/elm_label_eo.h2
-rw-r--r--src/lib/elementary/elm_label_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_label_legacy.h2
-rw-r--r--src/lib/elementary/elm_list.c16
-rw-r--r--src/lib/elementary/elm_list.h10
-rw-r--r--src/lib/elementary/elm_list_eo.h8
-rw-r--r--src/lib/elementary/elm_list_eo.legacy.h6
-rw-r--r--src/lib/elementary/elm_list_item_eo.h2
-rw-r--r--src/lib/elementary/elm_list_legacy.h2
-rw-r--r--src/lib/elementary/elm_macros.h4
-rw-r--r--src/lib/elementary/elm_main.c6
-rw-r--r--src/lib/elementary/elm_map.c4
-rw-r--r--src/lib/elementary/elm_map.h4
-rw-r--r--src/lib/elementary/elm_map_common.h6
-rw-r--r--src/lib/elementary/elm_map_eo.h4
-rw-r--r--src/lib/elementary/elm_map_eo.legacy.h8
-rw-r--r--src/lib/elementary/elm_map_legacy.h16
-rw-r--r--src/lib/elementary/elm_map_pan_eo.h2
-rw-r--r--src/lib/elementary/elm_mapbuf.h4
-rw-r--r--src/lib/elementary/elm_mapbuf_eo.h2
-rw-r--r--src/lib/elementary/elm_mapbuf_legacy.h4
-rw-r--r--src/lib/elementary/elm_menu.c52
-rw-r--r--src/lib/elementary/elm_menu_eo.h2
-rw-r--r--src/lib/elementary/elm_menu_item_eo.h2
-rw-r--r--src/lib/elementary/elm_multibuttonentry_eo.h2
-rw-r--r--src/lib/elementary/elm_multibuttonentry_item_eo.h2
-rw-r--r--src/lib/elementary/elm_naviframe_eo.h2
-rw-r--r--src/lib/elementary/elm_naviframe_item_eo.h2
-rw-r--r--src/lib/elementary/elm_notify.c40
-rw-r--r--src/lib/elementary/elm_notify.h2
-rw-r--r--src/lib/elementary/elm_notify_eo.h2
-rw-r--r--src/lib/elementary/elm_notify_legacy.h8
-rw-r--r--src/lib/elementary/elm_pan_eo.h2
-rw-r--r--src/lib/elementary/elm_panel.c21
-rw-r--r--src/lib/elementary/elm_panel.h6
-rw-r--r--src/lib/elementary/elm_panel_common.h2
-rw-r--r--src/lib/elementary/elm_panel_eo.h2
-rw-r--r--src/lib/elementary/elm_panel_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_panel_legacy.h4
-rw-r--r--src/lib/elementary/elm_panes.h4
-rw-r--r--src/lib/elementary/elm_photo.c6
-rw-r--r--src/lib/elementary/elm_photo_eo.h2
-rw-r--r--src/lib/elementary/elm_photocam.h6
-rw-r--r--src/lib/elementary/elm_photocam_legacy.h30
-rw-r--r--src/lib/elementary/elm_player_eo.h2
-rw-r--r--src/lib/elementary/elm_plug.h4
-rw-r--r--src/lib/elementary/elm_plug_eo.h2
-rw-r--r--src/lib/elementary/elm_plug_legacy.h4
-rw-r--r--src/lib/elementary/elm_popup_eo.h2
-rw-r--r--src/lib/elementary/elm_popup_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_popup_item_eo.h2
-rw-r--r--src/lib/elementary/elm_prefs.h2
-rw-r--r--src/lib/elementary/elm_prefs_eo.h10
-rw-r--r--src/lib/elementary/elm_prefs_eo.legacy.h8
-rw-r--r--src/lib/elementary/elm_priv.h25
-rw-r--r--src/lib/elementary/elm_progressbar.h4
-rw-r--r--src/lib/elementary/elm_radio.h6
-rw-r--r--src/lib/elementary/elm_radio_legacy.h6
-rw-r--r--src/lib/elementary/elm_removed.h2
-rw-r--r--src/lib/elementary/elm_route_eo.h2
-rw-r--r--src/lib/elementary/elm_scroller.c28
-rw-r--r--src/lib/elementary/elm_scroller.h4
-rw-r--r--src/lib/elementary/elm_scroller_eo.h2
-rw-r--r--src/lib/elementary/elm_scroller_legacy.h76
-rw-r--r--src/lib/elementary/elm_segment_control.h4
-rw-r--r--src/lib/elementary/elm_segment_control_eo.h2
-rw-r--r--src/lib/elementary/elm_segment_control_item_eo.h2
-rw-r--r--src/lib/elementary/elm_separator.h4
-rw-r--r--src/lib/elementary/elm_separator_eo.h2
-rw-r--r--src/lib/elementary/elm_slider.c27
-rw-r--r--src/lib/elementary/elm_slider.h4
-rw-r--r--src/lib/elementary/elm_slider_eo.h2
-rw-r--r--src/lib/elementary/elm_slider_legacy.h2
-rw-r--r--src/lib/elementary/elm_slider_part_indicator_eo.h2
-rw-r--r--src/lib/elementary/elm_slideshow.c2
-rw-r--r--src/lib/elementary/elm_slideshow.h4
-rw-r--r--src/lib/elementary/elm_slideshow_eo.h4
-rw-r--r--src/lib/elementary/elm_slideshow_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_slideshow_item_eo.h2
-rw-r--r--src/lib/elementary/elm_spinner.c31
-rw-r--r--src/lib/elementary/elm_spinner.h8
-rw-r--r--src/lib/elementary/elm_spinner_eo.h6
-rw-r--r--src/lib/elementary/elm_spinner_eo.legacy.h4
-rw-r--r--src/lib/elementary/elm_spinner_legacy.h18
-rw-r--r--src/lib/elementary/elm_sys_notify_dbus_eo.h2
-rw-r--r--src/lib/elementary/elm_sys_notify_eo.c6
-rw-r--r--src/lib/elementary/elm_sys_notify_eo.h2
-rw-r--r--src/lib/elementary/elm_sys_notify_interface_eo.h2
-rw-r--r--src/lib/elementary/elm_systray_eo.h2
-rw-r--r--src/lib/elementary/elm_table.c21
-rw-r--r--src/lib/elementary/elm_table.h2
-rw-r--r--src/lib/elementary/elm_table_eo.h6
-rw-r--r--src/lib/elementary/elm_table_eo.legacy.h4
-rw-r--r--src/lib/elementary/elm_table_legacy.h8
-rw-r--r--src/lib/elementary/elm_textpath_legacy.h17
-rw-r--r--src/lib/elementary/elm_theme.c4
-rw-r--r--src/lib/elementary/elm_thumb.c13
-rw-r--r--src/lib/elementary/elm_thumb_eo.h2
-rw-r--r--src/lib/elementary/elm_thumb_legacy.h6
-rw-r--r--src/lib/elementary/elm_toolbar.c28
-rw-r--r--src/lib/elementary/elm_toolbar.h2
-rw-r--r--src/lib/elementary/elm_toolbar_eo.h2
-rw-r--r--src/lib/elementary/elm_toolbar_eo.legacy.h52
-rw-r--r--src/lib/elementary/elm_toolbar_item_eo.h2
-rw-r--r--src/lib/elementary/elm_transit.c132
-rw-r--r--src/lib/elementary/elm_view_form_eo.h2
-rw-r--r--src/lib/elementary/elm_view_list_eo.h2
-rw-r--r--src/lib/elementary/elm_web_eo.h2
-rw-r--r--src/lib/elementary/elm_widget.h9
-rw-r--r--src/lib/elementary/elm_widget_combobox.h2
-rw-r--r--src/lib/elementary/elm_widget_gengrid.h2
-rw-r--r--src/lib/elementary/elm_widget_item_container_eo.h2
-rw-r--r--src/lib/elementary/elm_widget_item_eo.h4
-rw-r--r--src/lib/elementary/elm_widget_item_eo.legacy.h2
-rw-r--r--src/lib/elementary/elm_widget_item_static_focus.c56
-rw-r--r--src/lib/elementary/elm_widget_item_static_focus_eo.h2
-rw-r--r--src/lib/elementary/elm_widget_layout.h3
-rw-r--r--src/lib/elementary/elm_win.h2
-rw-r--r--src/lib/elementary/elm_win_common.h2
-rw-r--r--src/lib/elementary/elm_win_eo.h2
-rw-r--r--src/lib/elementary/elm_win_legacy.h214
-rw-r--r--src/lib/elementary/els_box.c38
-rw-r--r--src/lib/elementary/els_cursor.c2
-rw-r--r--src/lib/elementary/els_tooltip.c8
-rw-r--r--src/lib/elementary/meson.build74
-rw-r--r--src/lib/elput/Elput.h24
-rw-r--r--src/lib/elput/elput_evdev.c2
-rw-r--r--src/lib/elput/elput_logind.c141
-rw-r--r--src/lib/elput/elput_manager.c2
-rw-r--r--src/lib/elput/elput_private.h8
-rw-r--r--src/lib/elput/meson.build21
-rw-r--r--src/lib/elua/Elua.h24
-rw-r--r--src/lib/elua/cache.c23
-rw-r--r--src/lib/elua/elua.c109
-rw-r--r--src/lib/elua/elua_private.h12
-rw-r--r--src/lib/elua/io.c10
-rw-r--r--src/lib/embryo/Embryo.h220
-rw-r--r--src/lib/embryo/embryo_main.c6
-rw-r--r--src/lib/embryo/embryo_private.h2
-rw-r--r--src/lib/embryo/embryo_str.c2
-rw-r--r--src/lib/embryo/meson.build12
-rw-r--r--src/lib/emile/emile_base64.c4
-rw-r--r--src/lib/emile/emile_base64.h6
-rw-r--r--src/lib/emile/emile_cipher_openssl.c15
-rw-r--r--src/lib/emile/meson.build14
-rw-r--r--src/lib/emotion/Emotion.h207
-rw-r--r--src/lib/emotion/efl_canvas_video.eo10
-rw-r--r--src/lib/emotion/efl_canvas_video_eo.legacy.c4
-rw-r--r--src/lib/emotion/efl_canvas_video_eo.legacy.h4
-rw-r--r--src/lib/emotion/emotion_api.h32
-rw-r--r--src/lib/emotion/emotion_main.c19
-rw-r--r--src/lib/emotion/emotion_modules.c54
-rw-r--r--src/lib/emotion/emotion_modules.h89
-rw-r--r--src/lib/emotion/emotion_private.h1
-rw-r--r--src/lib/emotion/emotion_smart.c185
-rw-r--r--src/lib/emotion/emotion_webcam.c298
-rw-r--r--src/lib/emotion/meson.build18
-rw-r--r--src/lib/eo/Eo.h219
-rw-r--r--src/lib/eo/efl_object.eo5
-rw-r--r--src/lib/eo/eina_types.eot74
-rw-r--r--src/lib/eo/eo.c780
-rw-r--r--src/lib/eo/eo_add_fallback.c2
-rw-r--r--src/lib/eo/eo_base_class.c142
-rw-r--r--src/lib/eo/eo_internal.h37
-rw-r--r--src/lib/eo/eo_private.h42
-rw-r--r--src/lib/eo/eo_ptr_indirection.c13
-rw-r--r--src/lib/eo/eo_ptr_indirection.h10
-rw-r--r--src/lib/eo/eo_ptr_indirection.x7
-rw-r--r--src/lib/eo/meson.build33
-rw-r--r--src/lib/eolian/Eolian.h448
-rw-r--r--src/lib/eolian/Eolian_Aux.h45
-rw-r--r--src/lib/eolian/database_check.c20
-rw-r--r--src/lib/eolian/database_class_api.c38
-rw-r--r--src/lib/eolian/database_constructor_api.c6
-rw-r--r--src/lib/eolian/database_event_api.c16
-rw-r--r--src/lib/eolian/database_expr.c5
-rw-r--r--src/lib/eolian/database_expr_api.c45
-rw-r--r--src/lib/eolian/database_function_api.c36
-rw-r--r--src/lib/eolian/database_function_parameter_api.c16
-rw-r--r--src/lib/eolian/database_implement_api.c18
-rw-r--r--src/lib/eolian/database_part_api.c4
-rw-r--r--src/lib/eolian/database_type.c2
-rw-r--r--src/lib/eolian/database_type_api.c68
-rw-r--r--src/lib/eolian/database_validate.c22
-rw-r--r--src/lib/eolian/database_var_api.c8
-rw-r--r--src/lib/eolian/eo_lexer.c2
-rw-r--r--src/lib/eolian/eo_parser.c20
-rw-r--r--src/lib/eolian/eo_parser.h3
-rw-r--r--src/lib/eolian/eolian.c6
-rw-r--r--src/lib/eolian/eolian_api.h34
-rw-r--r--src/lib/eolian/eolian_aux.c12
-rw-r--r--src/lib/eolian/eolian_database.c132
-rw-r--r--src/lib/eolian/eolian_priv.h1
-rw-r--r--src/lib/eolian/meson.build3
-rw-r--r--src/lib/eolian_cxx/grammar/context.hpp25
-rw-r--r--src/lib/eolian_cxx/grammar/eps.hpp8
-rw-r--r--src/lib/eolian_cxx/grammar/klass_def.hpp2
-rw-r--r--src/lib/eolian_cxx/grammar/type_impl.hpp13
-rw-r--r--src/lib/ephysics/EPhysics.h2
-rw-r--r--src/lib/ephysics/meson.build10
-rw-r--r--src/lib/ethumb/Ethumb.h10
-rw-r--r--src/lib/ethumb/ethumb.c10
-rw-r--r--src/lib/ethumb/md5.c2
-rw-r--r--src/lib/ethumb/meson.build9
-rw-r--r--src/lib/ethumb_client/ethumb_client.c17
-rw-r--r--src/lib/ethumb_client/meson.build7
-rw-r--r--src/lib/evas/Efl_Canvas.h55
-rw-r--r--src/lib/evas/Evas.h39
-rw-r--r--src/lib/evas/Evas_Common.h361
-rw-r--r--src/lib/evas/Evas_Eo.h353
-rw-r--r--src/lib/evas/Evas_GL.h79
-rw-r--r--src/lib/evas/Evas_Internal.h127
-rw-r--r--src/lib/evas/Evas_Legacy.h1976
-rw-r--r--src/lib/evas/Evas_Loader.h67
-rw-r--r--src/lib/evas/cache/evas_cache.h110
-rw-r--r--src/lib/evas/cache/evas_cache_engine_image.c103
-rw-r--r--src/lib/evas/cache/evas_cache_image.c233
-rw-r--r--src/lib/evas/canvas/efl_canvas_alpha_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_alpha.c)22
-rw-r--r--src/lib/evas/canvas/efl_canvas_alpha_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_alpha.eo)4
-rw-r--r--src/lib/evas/canvas/efl_canvas_alpha_animation_private.h19
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation.eo4
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_alpha_private.h19
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_group_private.h15
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_rotate_private.h30
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_scale_private.h25
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_translate_private.h16
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_types.eot5
-rw-r--r--src/lib/evas/canvas/efl_canvas_event_grabber.c2
-rw-r--r--src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.c4
-rw-r--r--src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.h4
-rw-r--r--src/lib/evas/canvas/efl_canvas_group.eo4
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_group.c)51
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_group.eo)6
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_animation_private.h16
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_eo.legacy.c10
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_eo.legacy.h10
-rw-r--r--src/lib/evas/canvas/efl_canvas_image.c68
-rw-r--r--src/lib/evas/canvas/efl_canvas_image.eo2
-rw-r--r--src/lib/evas/canvas/efl_canvas_object.eo10
-rw-r--r--src/lib/evas/canvas/efl_canvas_object_animation.c2
-rw-r--r--src/lib/evas/canvas/efl_canvas_object_eo.legacy.c38
-rw-r--r--src/lib/evas/canvas/efl_canvas_object_eo.legacy.h40
-rw-r--r--src/lib/evas/canvas/efl_canvas_parallel_group_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_group_parallel.c)10
-rw-r--r--src/lib/evas/canvas/efl_canvas_parallel_group_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_group_parallel.eo)5
-rw-r--r--src/lib/evas/canvas/efl_canvas_parallel_group_animation_private.h (renamed from src/lib/evas/canvas/efl_canvas_animation_group_parallel_private.h)0
-rw-r--r--src/lib/evas/canvas/efl_canvas_proxy.c2
-rw-r--r--src/lib/evas/canvas/efl_canvas_rotate_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_rotate.c)30
-rw-r--r--src/lib/evas/canvas/efl_canvas_rotate_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_rotate.eo)6
-rw-r--r--src/lib/evas/canvas/efl_canvas_rotate_animation_private.h30
-rw-r--r--src/lib/evas/canvas/efl_canvas_scale_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_scale.c)30
-rw-r--r--src/lib/evas/canvas/efl_canvas_scale_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_scale.eo)10
-rw-r--r--src/lib/evas/canvas/efl_canvas_scale_animation_private.h25
-rw-r--r--src/lib/evas/canvas/efl_canvas_scene3d.c310
-rw-r--r--src/lib/evas/canvas/efl_canvas_scene3d.eo20
-rw-r--r--src/lib/evas/canvas/efl_canvas_sequential_group_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_group_sequential.c)10
-rw-r--r--src/lib/evas/canvas/efl_canvas_sequential_group_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_group_sequential.eo)4
-rw-r--r--src/lib/evas/canvas/efl_canvas_sequential_group_animation_private.h (renamed from src/lib/evas/canvas/efl_canvas_animation_group_sequential_private.h)0
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock.eo180
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.c22
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.h23
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_internal.h43
-rw-r--r--src/lib/evas/canvas/efl_canvas_translate_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_translate.c)30
-rw-r--r--src/lib/evas/canvas/efl_canvas_translate_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_translate.eo)6
-rw-r--r--src/lib/evas/canvas/efl_canvas_translate_animation_private.h16
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_container.c66
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_container.eo4
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.c8
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.h32
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_gradient.c24
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_gradient_eo.legacy.h21
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c20
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c28
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_image.c1
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_node.c214
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.c20
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.h36
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_object.c213
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_object.eo22
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.c24
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.h29
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_shape.c167
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.c12
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.h59
-rw-r--r--src/lib/evas/canvas/efl_gfx_mapping.c1
-rw-r--r--src/lib/evas/canvas/efl_gfx_vg_value_provider.c38
-rw-r--r--src/lib/evas/canvas/efl_gfx_vg_value_provider.eo23
-rw-r--r--src/lib/evas/canvas/efl_gfx_vg_value_provider.h4
-rw-r--r--src/lib/evas/canvas/efl_input_device.c14
-rw-r--r--src/lib/evas/canvas/efl_input_event.c2
-rw-r--r--src/lib/evas/canvas/efl_input_focus.c2
-rw-r--r--src/lib/evas/canvas/efl_input_hold.c2
-rw-r--r--src/lib/evas/canvas/efl_input_key.c2
-rw-r--r--src/lib/evas/canvas/efl_input_pointer.c4
-rw-r--r--src/lib/evas/canvas/efl_input_pointer.eo1
-rw-r--r--src/lib/evas/canvas/efl_input_types.eot17
-rw-r--r--src/lib/evas/canvas/efl_text_cursor_object.c (renamed from src/lib/evas/canvas/efl_text_cursor.c)127
-rw-r--r--src/lib/evas/canvas/efl_text_cursor_object.eo (renamed from src/lib/evas/canvas/efl_text_cursor.eo)89
-rw-r--r--src/lib/evas/canvas/efl_text_formatter.c47
-rw-r--r--src/lib/evas/canvas/efl_text_formatter.eo21
-rw-r--r--src/lib/evas/canvas/evas_async_events.c12
-rw-r--r--src/lib/evas/canvas/evas_box_eo.c82
-rw-r--r--src/lib/evas/canvas/evas_box_eo.h102
-rw-r--r--src/lib/evas/canvas/evas_box_eo.legacy.c54
-rw-r--r--src/lib/evas/canvas/evas_box_eo.legacy.h54
-rw-r--r--src/lib/evas/canvas/evas_callbacks.c40
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_camera.c203
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_camera.eo89
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_eet.c211
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_light.c309
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_light.eo249
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_material.c206
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_material.eo116
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_mesh.c1172
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_mesh.eo421
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_node.c1695
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_node.eo368
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_node_callback.h36
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_object.c101
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_object.eo77
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_primitive.c152
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_primitive.eo130
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_scene.c839
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_scene.eo168
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_texture.c606
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_texture.eo159
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_types.eot293
-rw-r--r--src/lib/evas/canvas/evas_canvas_eo.c134
-rw-r--r--src/lib/evas/canvas/evas_canvas_eo.h144
-rw-r--r--src/lib/evas/canvas/evas_canvas_eo.legacy.c130
-rw-r--r--src/lib/evas/canvas/evas_canvas_eo.legacy.h280
-rw-r--r--src/lib/evas/canvas/evas_clip.c39
-rw-r--r--src/lib/evas/canvas/evas_data.c6
-rw-r--r--src/lib/evas/canvas/evas_device.c70
-rw-r--r--src/lib/evas/canvas/evas_events.c148
-rw-r--r--src/lib/evas/canvas/evas_events_legacy.c41
-rw-r--r--src/lib/evas/canvas/evas_filter_mixin.c6
-rw-r--r--src/lib/evas/canvas/evas_font_dir.c20
-rw-r--r--src/lib/evas/canvas/evas_gl.c44
-rw-r--r--src/lib/evas/canvas/evas_grid_eo.c22
-rw-r--r--src/lib/evas/canvas/evas_grid_eo.h22
-rw-r--r--src/lib/evas/canvas/evas_grid_eo.legacy.c20
-rw-r--r--src/lib/evas/canvas/evas_grid_eo.legacy.h20
-rw-r--r--src/lib/evas/canvas/evas_image_eo.c2
-rw-r--r--src/lib/evas/canvas/evas_image_eo.h2
-rw-r--r--src/lib/evas/canvas/evas_image_legacy.c218
-rw-r--r--src/lib/evas/canvas/evas_image_private.h8
-rw-r--r--src/lib/evas/canvas/evas_key.c14
-rw-r--r--src/lib/evas/canvas/evas_key_grab.c6
-rw-r--r--src/lib/evas/canvas/evas_layer.c4
-rw-r--r--src/lib/evas/canvas/evas_line_eo.c4
-rw-r--r--src/lib/evas/canvas/evas_line_eo.h6
-rw-r--r--src/lib/evas/canvas/evas_line_eo.legacy.c4
-rw-r--r--src/lib/evas/canvas/evas_line_eo.legacy.h4
-rw-r--r--src/lib/evas/canvas/evas_main.c186
-rw-r--r--src/lib/evas/canvas/evas_map.c78
-rw-r--r--src/lib/evas/canvas/evas_name.c12
-rw-r--r--src/lib/evas/canvas/evas_object_box.c36
-rw-r--r--src/lib/evas/canvas/evas_object_grid.c29
-rw-r--r--src/lib/evas/canvas/evas_object_image.c68
-rw-r--r--src/lib/evas/canvas/evas_object_inform.c8
-rw-r--r--src/lib/evas/canvas/evas_object_intercept.c31
-rw-r--r--src/lib/evas/canvas/evas_object_line.c2
-rw-r--r--src/lib/evas/canvas/evas_object_main.c153
-rw-r--r--src/lib/evas/canvas/evas_object_polygon.c6
-rw-r--r--src/lib/evas/canvas/evas_object_rectangle.c2
-rw-r--r--src/lib/evas/canvas/evas_object_smart.c133
-rw-r--r--src/lib/evas/canvas/evas_object_smart_clipped.c6
-rw-r--r--src/lib/evas/canvas/evas_object_table.c17
-rw-r--r--src/lib/evas/canvas/evas_object_text.c44
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c2730
-rw-r--r--src/lib/evas/canvas/evas_object_textgrid.c16
-rw-r--r--src/lib/evas/canvas/evas_out.c18
-rw-r--r--src/lib/evas/canvas/evas_render.c213
-rw-r--r--src/lib/evas/canvas/evas_smart.c16
-rw-r--r--src/lib/evas/canvas/evas_stack.x39
-rw-r--r--src/lib/evas/canvas/evas_stats.c16
-rw-r--r--src/lib/evas/canvas/evas_table_eo.c36
-rw-r--r--src/lib/evas/canvas/evas_table_eo.h38
-rw-r--r--src/lib/evas/canvas/evas_table_eo.legacy.c32
-rw-r--r--src/lib/evas/canvas/evas_table_eo.legacy.h32
-rw-r--r--src/lib/evas/canvas/evas_text_eo.c52
-rw-r--r--src/lib/evas/canvas/evas_text_eo.h54
-rw-r--r--src/lib/evas/canvas/evas_text_eo.legacy.c52
-rw-r--r--src/lib/evas/canvas/evas_text_eo.legacy.h52
-rw-r--r--src/lib/evas/canvas/evas_textblock_legacy.h209
-rw-r--r--src/lib/evas/canvas/evas_textgrid_eo.c20
-rw-r--r--src/lib/evas/canvas/evas_textgrid_eo.h22
-rw-r--r--src/lib/evas/canvas/evas_textgrid_eo.legacy.c20
-rw-r--r--src/lib/evas/canvas/evas_textgrid_eo.legacy.h20
-rw-r--r--src/lib/evas/canvas/evas_touch_point.c8
-rw-r--r--src/lib/evas/canvas/evas_vg_private.h23
-rw-r--r--src/lib/evas/canvas/meson.build82
-rw-r--r--src/lib/evas/common/evas_blend.h2
-rw-r--r--src/lib/evas/common/evas_blend_main.c2
-rw-r--r--src/lib/evas/common/evas_blit_main.c8
-rw-r--r--src/lib/evas/common/evas_common_generic_cache.c25
-rw-r--r--src/lib/evas/common/evas_convert_color.c20
-rw-r--r--src/lib/evas/common/evas_convert_color.h20
-rw-r--r--src/lib/evas/common/evas_convert_colorspace.c15
-rw-r--r--src/lib/evas/common/evas_convert_colorspace.h12
-rw-r--r--src/lib/evas/common/evas_convert_gry_8.c4
-rw-r--r--src/lib/evas/common/evas_convert_grypal_6.c4
-rw-r--r--src/lib/evas/common/evas_convert_main.c4
-rw-r--r--src/lib/evas/common/evas_convert_main.h4
-rw-r--r--src/lib/evas/common/evas_convert_rgb_16.c18
-rw-r--r--src/lib/evas/common/evas_convert_rgb_24.c2
-rw-r--r--src/lib/evas/common/evas_convert_rgb_24.h2
-rw-r--r--src/lib/evas/common/evas_convert_yuv.h10
-rw-r--r--src/lib/evas/common/evas_cpu.c8
-rw-r--r--src/lib/evas/common/evas_draw.h48
-rw-r--r--src/lib/evas/common/evas_draw_main.c58
-rw-r--r--src/lib/evas/common/evas_font.h171
-rw-r--r--src/lib/evas/common/evas_font_compress.c4
-rw-r--r--src/lib/evas/common/evas_font_draw.c28
-rw-r--r--src/lib/evas/common/evas_font_draw.h16
-rw-r--r--src/lib/evas/common/evas_font_load.c71
-rw-r--r--src/lib/evas/common/evas_font_main.c200
-rw-r--r--src/lib/evas/common/evas_font_ot.c6
-rw-r--r--src/lib/evas/common/evas_font_ot.h5
-rw-r--r--src/lib/evas/common/evas_font_private.h2
-rw-r--r--src/lib/evas/common/evas_font_query.c60
-rw-r--r--src/lib/evas/common/evas_image.h85
-rw-r--r--src/lib/evas/common/evas_image_load.c45
-rw-r--r--src/lib/evas/common/evas_image_main.c65
-rw-r--r--src/lib/evas/common/evas_image_save.c2
-rw-r--r--src/lib/evas/common/evas_image_scalecache.c42
-rw-r--r--src/lib/evas/common/evas_line.h12
-rw-r--r--src/lib/evas/common/evas_line_main.c72
-rw-r--r--src/lib/evas/common/evas_map_image.c54
-rw-r--r--src/lib/evas/common/evas_map_image.h14
-rw-r--r--src/lib/evas/common/evas_map_image_core.c2
-rw-r--r--src/lib/evas/common/evas_map_image_internal_high.c18
-rw-r--r--src/lib/evas/common/evas_op_blend/op_blend_mask_color_neon.c2
-rw-r--r--src/lib/evas/common/evas_op_blend/op_blend_mask_color_sse3.c2
-rw-r--r--src/lib/evas/common/evas_op_blend/op_blend_master_sse3.c12
-rw-r--r--src/lib/evas/common/evas_op_blend/op_blend_pixel_i386.c2
-rw-r--r--src/lib/evas/common/evas_op_blend/op_blend_pixel_neon.c4
-rw-r--r--src/lib/evas/common/evas_op_blend_main_.c4
-rw-r--r--src/lib/evas/common/evas_op_copy/op_copy_color_.c2
-rw-r--r--src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_.c2
-rw-r--r--src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_i386.c4
-rw-r--r--src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_neon.c4
-rw-r--r--src/lib/evas/common/evas_op_copy/op_copy_pixel_neon.c10
-rw-r--r--src/lib/evas/common/evas_op_mask/op_mask_pixel_mask_.c4
-rw-r--r--src/lib/evas/common/evas_pipe.c30
-rw-r--r--src/lib/evas/common/evas_pipe.h24
-rw-r--r--src/lib/evas/common/evas_polygon.h10
-rw-r--r--src/lib/evas/common/evas_polygon_main.c12
-rw-r--r--src/lib/evas/common/evas_rectangle.h12
-rw-r--r--src/lib/evas/common/evas_rectangle_main.c12
-rw-r--r--src/lib/evas/common/evas_scale_main.c6
-rw-r--r--src/lib/evas/common/evas_scale_main.h24
-rw-r--r--src/lib/evas/common/evas_scale_sample.c10
-rw-r--r--src/lib/evas/common/evas_scale_smooth.c6
-rw-r--r--src/lib/evas/common/evas_scale_smooth.h4
-rw-r--r--src/lib/evas/common/evas_scale_smooth_scaler_downx_downy.c2
-rw-r--r--src/lib/evas/common/evas_scale_span.c12
-rw-r--r--src/lib/evas/common/evas_scale_span.h12
-rw-r--r--src/lib/evas/common/evas_text_utils.c20
-rw-r--r--src/lib/evas/common/evas_text_utils.h12
-rw-r--r--src/lib/evas/common/evas_thread_render.c6
-rw-r--r--src/lib/evas/common/evas_tiler.c89
-rw-r--r--src/lib/evas/common/language/evas_bidi_utils.c2
-rw-r--r--src/lib/evas/common/language/evas_bidi_utils.h2
-rw-r--r--src/lib/evas/common/region.c16
-rw-r--r--src/lib/evas/common/region.h8
-rw-r--r--src/lib/evas/common3d/meson.build2
-rw-r--r--src/lib/evas/common3d/primitives/meson.build5
-rw-r--r--src/lib/evas/common3d/primitives/primitive_common.c203
-rw-r--r--src/lib/evas/common3d/primitives/primitive_common.h62
-rw-r--r--src/lib/evas/common3d/primitives/solids_of_revolution/cone.c140
-rw-r--r--src/lib/evas/common3d/primitives/solids_of_revolution/cylinder.c136
-rw-r--r--src/lib/evas/common3d/primitives/solids_of_revolution/meson.build6
-rw-r--r--src/lib/evas/common3d/primitives/solids_of_revolution/sphere.c189
-rw-r--r--src/lib/evas/common3d/primitives/solids_of_revolution/torus.c67
-rw-r--r--src/lib/evas/common3d/primitives/surfaces/meson.build4
-rw-r--r--src/lib/evas/common3d/primitives/surfaces/surface.c91
-rw-r--r--src/lib/evas/common3d/primitives/surfaces/terrain.c86
-rw-r--r--src/lib/evas/common3d/primitives/tabulated_primitives/cube.c57
-rw-r--r--src/lib/evas/common3d/primitives/tabulated_primitives/meson.build4
-rw-r--r--src/lib/evas/common3d/primitives/tabulated_primitives/square.c18
-rw-r--r--src/lib/evas/common3d/save_load/evas_model_load.c82
-rw-r--r--src/lib/evas/common3d/save_load/evas_model_load_save_common.c230
-rw-r--r--src/lib/evas/common3d/save_load/evas_model_load_save_common.h62
-rw-r--r--src/lib/evas/common3d/save_load/evas_model_save.c34
-rw-r--r--src/lib/evas/common3d/save_load/meson.build6
-rw-r--r--src/lib/evas/evas_api.h32
-rw-r--r--src/lib/evas/file/evas_module.c24
-rw-r--r--src/lib/evas/filters/evas_filter.c8
-rw-r--r--src/lib/evas/filters/evas_filter_parser.c66
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture.c25
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture.eo19
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_custom.c25
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_custom.eo31
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_double_tap.c13
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_double_tap.eo7
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_events.eo (renamed from src/lib/evas/gesture/efl_gesture_events.eo)29
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_flick.c17
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_flick.eo27
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_long_press.c5
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_long_press.eo11
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_long_tap.c23
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_long_tap.eo13
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_manager.c592
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_manager.eo27
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_momentum.c15
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_momentum.eo17
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_private.h113
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer.c139
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo37
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c37
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo28
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c185
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.eo14
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c325
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.c143
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.eo13
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c176
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.eo26
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c287
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.c269
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.eo12
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c112
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c184
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.eo14
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c263
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_rotate.c17
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_rotate.eo28
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_tap.c13
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_tap.eo7
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_touch.c116
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_touch.eo36
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_triple_tap.c13
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_triple_tap.eo7
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_types.eot56
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_zoom.c22
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_zoom.eo28
-rw-r--r--src/lib/evas/gesture/meson.build20
-rw-r--r--src/lib/evas/include/evas_3d_utils.h1698
-rw-r--r--src/lib/evas/include/evas_blend_ops.h4
-rw-r--r--src/lib/evas/include/evas_common_private.h101
-rw-r--r--src/lib/evas/include/evas_filter.h42
-rw-r--r--src/lib/evas/include/evas_inline.x2
-rw-r--r--src/lib/evas/include/evas_private.h599
-rw-r--r--src/lib/evas/include/meson.build1
-rw-r--r--src/lib/evas/main.c4
-rw-r--r--src/lib/evas/meson.build85
-rw-r--r--src/lib/evas/software_generic/meson.build3
-rw-r--r--src/lib/evas/vg/evas_vg_cache.c118
-rw-r--r--src/lib/evil/evil_dlfcn.c10
-rw-r--r--src/lib/evil/evil_dlfcn.h15
-rw-r--r--src/lib/evil/evil_fcntl.c5
-rw-r--r--src/lib/evil/evil_fcntl.h2
-rw-r--r--src/lib/evil/evil_langinfo.c2
-rw-r--r--src/lib/evil/evil_langinfo.h2
-rw-r--r--src/lib/evil/evil_locale.c21
-rw-r--r--src/lib/evil/evil_locale.h4
-rw-r--r--src/lib/evil/evil_macro_wrapper.h16
-rw-r--r--src/lib/evil/evil_main.c39
-rw-r--r--src/lib/evil/evil_main.h11
-rw-r--r--src/lib/evil/evil_mman.c10
-rw-r--r--src/lib/evil/evil_mman.h10
-rw-r--r--src/lib/evil/evil_private.h41
-rw-r--r--src/lib/evil/evil_stdio.c4
-rw-r--r--src/lib/evil/evil_stdio.h9
-rw-r--r--src/lib/evil/evil_stdlib.c115
-rw-r--r--src/lib/evil/evil_stdlib.h32
-rw-r--r--src/lib/evil/evil_string.c4
-rw-r--r--src/lib/evil/evil_string.h10
-rw-r--r--src/lib/evil/evil_time.c54
-rw-r--r--src/lib/evil/evil_time.h33
-rw-r--r--src/lib/evil/evil_unistd.c38
-rw-r--r--src/lib/evil/evil_unistd.h9
-rw-r--r--src/lib/evil/evil_util.c54
-rw-r--r--src/lib/evil/evil_util.h30
-rw-r--r--src/lib/evil/meson.build12
-rw-r--r--src/modules/ecore/meson.build2
-rw-r--r--src/modules/ecore/system/systemd/ecore_system_systemd.c2
-rw-r--r--src/modules/ecore/system/systemd/meson.build1
-rw-r--r--src/modules/ecore/system/tizen/meson.build1
-rw-r--r--src/modules/ecore/system/upower/meson.build1
-rw-r--r--src/modules/ecore_buffer/shm/meson.build3
-rw-r--r--src/modules/ecore_buffer/x11_dri2/meson.build3
-rw-r--r--src/modules/ecore_buffer/x11_dri3/meson.build3
-rw-r--r--src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c142
-rw-r--r--src/modules/ecore_evas/engines/drm/ecore_evas_drm.c43
-rw-r--r--src/modules/ecore_evas/engines/drm/meson.build4
-rw-r--r--src/modules/ecore_evas/engines/extn/ecore_evas_extn.c6
-rw-r--r--src/modules/ecore_evas/engines/extn/ecore_evas_extn_buf.c2
-rw-r--r--src/modules/ecore_evas/engines/extn/meson.build1
-rw-r--r--src/modules/ecore_evas/engines/fb/ecore_evas_fb.c4
-rw-r--r--src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c3
-rw-r--r--src/modules/ecore_evas/engines/sdl/meson.build1
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c886
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c2
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h22
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c2
-rw-r--r--src/modules/ecore_evas/engines/wayland/meson.build2
-rw-r--r--src/modules/ecore_evas/engines/win32/ecore_evas_win32.c383
-rw-r--r--src/modules/ecore_evas/engines/win32/meson.build1
-rw-r--r--src/modules/ecore_evas/engines/x/ecore_evas_x.c950
-rw-r--r--src/modules/ecore_evas/engines/x/meson.build2
-rw-r--r--src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server_fb_keymap.c6
-rw-r--r--src/modules/ecore_imf/ibus/ibus_imcontext.c14
-rw-r--r--src/modules/ecore_imf/ibus/meson.build3
-rw-r--r--src/modules/ecore_imf/meson.build1
-rw-r--r--src/modules/ecore_imf/scim/meson.build5
-rw-r--r--src/modules/ecore_imf/scim/scim_imcontext.cpp158
-rw-r--r--src/modules/ecore_imf/wayland/meson.build3
-rw-r--r--src/modules/ecore_imf/wayland/wayland_imcontext.c36
-rw-r--r--src/modules/ecore_imf/wayland/wayland_module.c4
-rw-r--r--src/modules/ecore_imf/xim/meson.build5
-rw-r--r--src/modules/ecore_wl2/engines/dmabuf/meson.build3
-rw-r--r--src/modules/eeze/sensor/fake/meson.build1
-rw-r--r--src/modules/eeze/sensor/udev/meson.build1
-rw-r--r--src/modules/eina/mp/chained_pool/eina_chained_mempool.c8
-rw-r--r--src/modules/eina/mp/one_big/eina_one_big.c4
-rw-r--r--src/modules/elementary/access_output/meson.build4
-rw-r--r--src/modules/elementary/access_output/mod.c13
-rw-r--r--src/modules/elementary/prefs/meson.build4
-rw-r--r--src/modules/elementary/test_entry/meson.build4
-rw-r--r--src/modules/elementary/test_map/meson.build4
-rw-r--r--src/modules/elementary/web/none/elm_web_none_eo.h2
-rw-r--r--src/modules/elementary/web/none/meson.build3
-rw-r--r--src/modules/emotion/generic/Emotion_Generic_Plugin.h148
-rw-r--r--src/modules/emotion/generic/README79
-rw-r--r--src/modules/emotion/generic/emotion_generic.c1908
-rw-r--r--src/modules/emotion/generic/emotion_generic.h123
-rw-r--r--src/modules/emotion/generic/meson.build24
-rw-r--r--src/modules/emotion/gstreamer1/emotion_sink.c2
-rw-r--r--src/modules/emotion/gstreamer1/meson.build1
-rw-r--r--src/modules/emotion/libvlc/emotion_libvlc.c1555
-rw-r--r--src/modules/emotion/libvlc/meson.build14
-rw-r--r--src/modules/emotion/meson.build12
-rw-r--r--src/modules/emotion/xine/emotion_xine.c1707
-rw-r--r--src/modules/emotion/xine/emotion_xine.h118
-rw-r--r--src/modules/emotion/xine/emotion_xine_vo_out.c766
-rw-r--r--src/modules/emotion/xine/meson.build16
-rw-r--r--src/modules/ethumb/emotion/emotion.c9
-rw-r--r--src/modules/ethumb/emotion/meson.build1
-rw-r--r--src/modules/evas/engines/buffer/evas_outbuf.c14
-rw-r--r--src/modules/evas/engines/buffer/meson.build7
-rw-r--r--src/modules/evas/engines/drm/evas_outbuf.c16
-rw-r--r--src/modules/evas/engines/drm/meson.build4
-rw-r--r--src/modules/evas/engines/fb/evas_fb_main.c52
-rw-r--r--src/modules/evas/engines/fb/evas_outbuf.c4
-rw-r--r--src/modules/evas/engines/fb/meson.build4
-rw-r--r--src/modules/evas/engines/gl_cocoa/meson.build4
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_3d.c1494
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_3d_common.h40
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_3d_private.h183
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c428
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_3d_shader.c751
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_api.c16
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_api_ext.c2
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_api_gles1.c14
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_common.h12
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_context.c812
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_core.c8
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_core_private.h2
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_define.h1
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_font.c32
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_image.c77
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_preload.c4
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_rectangle.c2
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_shader.c47
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_texture.c20
-rw-r--r--src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x55
-rw-r--r--src/modules/evas/engines/gl_common/shader/fragment.glsl57
-rwxr-xr-xsrc/modules/evas/engines/gl_common/shader/gen_shaders.sh2
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd15
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd11
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd16
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd13
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x2198
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd64
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/flat_vert.shd92
-rwxr-xr-xsrc/modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh68
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/include.shd254
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd147
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd128
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd240
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_vert.shd88
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd103
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/phong_vert.shd51
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_frag.shd63
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_vert.shd12
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd60
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd21
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd17
-rw-r--r--src/modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd24
-rw-r--r--src/modules/evas/engines/gl_drm/evas_engine.c6
-rw-r--r--src/modules/evas/engines/gl_drm/evas_engine.h4
-rw-r--r--src/modules/evas/engines/gl_drm/meson.build4
-rw-r--r--src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h2
-rw-r--r--src/modules/evas/engines/gl_generic/evas_engine.c355
-rw-r--r--src/modules/evas/engines/gl_generic/filters/gl_filter_blur.c9
-rw-r--r--src/modules/evas/engines/gl_generic/filters/gl_filter_mask.c4
-rw-r--r--src/modules/evas/engines/gl_generic/meson.build9
-rw-r--r--src/modules/evas/engines/gl_x11/evas_engine.c10
-rw-r--r--src/modules/evas/engines/gl_x11/evas_x_main.c12
-rw-r--r--src/modules/evas/engines/gl_x11/meson.build4
-rw-r--r--src/modules/evas/engines/meson.build12
-rw-r--r--src/modules/evas/engines/software_ddraw/meson.build5
-rw-r--r--src/modules/evas/engines/software_gdi/meson.build5
-rw-r--r--src/modules/evas/engines/software_generic/evas_ector_software_buffer.c2
-rw-r--r--src/modules/evas/engines/software_generic/evas_engine.c198
-rw-r--r--src/modules/evas/engines/software_generic/filters/evas_filter_blur.c16
-rw-r--r--src/modules/evas/engines/software_x11/Evas_Engine_Software_X11.h2
-rw-r--r--src/modules/evas/engines/software_x11/evas_engine.h10
-rw-r--r--src/modules/evas/engines/software_x11/meson.build4
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_engine.c2
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_engine.h2
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_wl_main.c28
-rw-r--r--src/modules/evas/engines/wayland_egl/meson.build4
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_engine.c14
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_engine.h7
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_outbuf.c48
-rw-r--r--src/modules/evas/engines/wayland_shm/meson.build4
-rw-r--r--src/modules/evas/image_loaders/avif/evas_image_load_avif.c376
-rw-r--r--src/modules/evas/image_loaders/bmp/evas_image_load_bmp.c6
-rw-r--r--src/modules/evas/image_loaders/dds/evas_image_load_dds.c2
-rw-r--r--src/modules/evas/image_loaders/gif/evas_image_load_gif.c30
-rw-r--r--src/modules/evas/image_loaders/heif/evas_image_load_heif.c300
-rw-r--r--src/modules/evas/image_loaders/ico/evas_image_load_ico.c2
-rw-r--r--src/modules/evas/image_loaders/meson.build3
-rw-r--r--src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c6
-rw-r--r--src/modules/evas/image_loaders/png/evas_image_load_png.c47
-rw-r--r--src/modules/evas/image_loaders/psd/evas_image_load_psd.c40
-rw-r--r--src/modules/evas/image_loaders/tga/evas_image_load_tga.c20
-rw-r--r--src/modules/evas/image_loaders/tiff/evas_image_load_tiff.c2
-rw-r--r--src/modules/evas/image_loaders/webp/evas_image_load_webp.c256
-rw-r--r--src/modules/evas/image_savers/avif/evas_image_save_avif.c181
-rw-r--r--src/modules/evas/image_savers/meson.build3
-rw-r--r--src/modules/evas/image_savers/png/evas_image_save_png.c2
-rw-r--r--src/modules/evas/image_savers/tiff/evas_image_save_tiff.c2
-rw-r--r--src/modules/evas/meson.build2
-rw-r--r--src/modules/evas/model_loaders/eet/evas_model_load_eet.c111
-rw-r--r--src/modules/evas/model_loaders/md2/evas_model_load_md2.c423
-rw-r--r--src/modules/evas/model_loaders/meson.build1
-rw-r--r--src/modules/evas/model_loaders/obj/evas_model_load_obj.c461
-rw-r--r--src/modules/evas/model_loaders/ply/evas_model_load_ply.c249
-rw-r--r--src/modules/evas/model_savers/eet/evas_model_save_eet.c205
-rw-r--r--src/modules/evas/model_savers/meson.build1
-rw-r--r--src/modules/evas/model_savers/obj/evas_model_save_obj.c241
-rw-r--r--src/modules/evas/model_savers/ply/evas_model_save_ply.c91
-rw-r--r--src/modules/evas/vg_loaders/eet/evas_vg_load_eet.c7
-rw-r--r--src/modules/evas/vg_loaders/json/evas_vg_load_json.c6
-rw-r--r--src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c239
-rw-r--r--src/modules/evas/vg_savers/svg/evas_vg_save_svg.c2
-rwxr-xr-xsrc/scripts/eina/eina-bench-cmp249
-rw-r--r--src/scripts/eina/meson.build4
-rw-r--r--src/scripts/elua/apps/empty.txt0
-rw-r--r--src/scripts/elua/apps/lualian.lua65
-rw-r--r--src/scripts/elua/core/util.lua20
-rw-r--r--src/scripts/elua/modules/lualian.lua718
-rw-r--r--src/scripts/meson.build6
-rw-r--r--src/static_libs/buildsystem/meson.build4
-rw-r--r--src/static_libs/draw/meson.build11
-rw-r--r--src/static_libs/libunibreak/LICENCE8
-rw-r--r--src/static_libs/libunibreak/NEWS14
-rw-r--r--src/static_libs/libunibreak/README.md16
-rw-r--r--src/static_libs/libunibreak/emojidata.c264
-rw-r--r--src/static_libs/libunibreak/emojidef.c61
-rw-r--r--src/static_libs/libunibreak/emojidef.h46
-rw-r--r--src/static_libs/libunibreak/graphemebreak.c88
-rw-r--r--src/static_libs/libunibreak/graphemebreak.h8
-rw-r--r--src/static_libs/libunibreak/graphemebreakdata.c114
-rw-r--r--src/static_libs/libunibreak/graphemebreakdef.h18
-rw-r--r--src/static_libs/libunibreak/linebreak.c66
-rw-r--r--src/static_libs/libunibreak/linebreak.h8
-rw-r--r--src/static_libs/libunibreak/linebreakdata.c225
-rw-r--r--src/static_libs/libunibreak/linebreakdef.c17
-rw-r--r--src/static_libs/libunibreak/linebreakdef.h25
-rw-r--r--src/static_libs/libunibreak/meson.build2
-rw-r--r--src/static_libs/libunibreak/unibreakbase.c2
-rw-r--r--src/static_libs/libunibreak/unibreakbase.h4
-rw-r--r--src/static_libs/libunibreak/unibreakdef.h12
-rw-r--r--src/static_libs/libunibreak/wordbreak.c92
-rw-r--r--src/static_libs/libunibreak/wordbreak.h11
-rw-r--r--src/static_libs/libunibreak/wordbreakdata.c201
-rw-r--r--src/static_libs/libunibreak/wordbreakdef.h20
-rw-r--r--src/static_libs/lz4/lz4.c445
-rw-r--r--src/static_libs/lz4/lz4.h142
-rw-r--r--src/static_libs/lz4/lz4frame.c28
-rw-r--r--src/static_libs/lz4/lz4frame.h9
-rw-r--r--src/static_libs/lz4/lz4hc.c122
-rw-r--r--src/static_libs/lz4/lz4hc.h3
-rw-r--r--src/static_libs/rg_etc/etc2_encoder.c2
-rw-r--r--src/static_libs/rg_etc/meson.build4
-rw-r--r--src/static_libs/rg_etc/rg_etc1.c4
-rw-r--r--src/static_libs/triangulator/triangulator_stroker.c4
-rw-r--r--src/static_libs/vg_common/vg_common.h19
-rw-r--r--src/static_libs/vg_common/vg_common_json.c138
-rw-r--r--src/static_libs/vg_common/vg_common_svg.c51
-rw-r--r--src/tests/ecore/ecore_suite.c1
-rw-r--r--src/tests/ecore/ecore_suite.h1
-rw-r--r--src/tests/ecore/ecore_test_animator.c4
-rw-r--r--src/tests/ecore/ecore_test_ecore_audio.c46
-rw-r--r--src/tests/ecore/ecore_test_ecore_evas.c44
-rw-r--r--src/tests/ecore/ecore_test_ecore_evas_selection.c89
-rw-r--r--src/tests/ecore/ecore_test_ecore_thread_eina_thread_queue.c10
-rw-r--r--src/tests/ecore/ecore_test_timer.c4
-rw-r--r--src/tests/ecore/efl_app_test_promise.c40
-rw-r--r--src/tests/ecore/meson.build1
-rw-r--r--src/tests/ecore_con/ecore_con_test_ecore_con.c4
-rw-r--r--src/tests/ecore_con/server.key62
-rw-r--r--src/tests/ecore_con/server.pem39
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_suite.c7
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_suite.h13
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_test_display.c138
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_test_ecore_wl2.c22
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_test_input.c196
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_test_output.c33
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_test_window.c654
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_tests_helper_egl.h64
-rw-r--r--src/tests/ecore_wl2/ecore_wl2_tests_helpers.h44
-rw-r--r--src/tests/ecore_wl2/meson.build14
-rw-r--r--src/tests/edje/data/test_textblock.edc41
-rw-r--r--src/tests/edje/edje_suite.c2
-rw-r--r--src/tests/edje/edje_test_text.c77
-rw-r--r--src/tests/eet/eet_test_cache.c21
-rw-r--r--src/tests/eet/eet_test_cipher.c14
-rw-r--r--src/tests/eet/eet_test_common.c12
-rw-r--r--src/tests/eet/eet_test_data.c12
-rw-r--r--src/tests/eet/eet_test_file.c68
-rw-r--r--src/tests/eet/eet_test_identity.c17
-rw-r--r--src/tests/eet/eet_test_image.c26
-rw-r--r--src/tests/efl/efl_test_composite_model.c30
-rw-r--r--src/tests/efl_check.h13
-rw-r--r--src/tests/efl_js/benchmark_object.eo5
-rw-r--r--src/tests/efl_mono/Eina.cs459
-rw-r--r--src/tests/efl_mono/EinaTestData.cs36
-rw-r--r--src/tests/efl_mono/Eo.cs136
-rw-r--r--src/tests/efl_mono/Events.cs41
-rw-r--r--src/tests/efl_mono/Model.cs7
-rw-r--r--src/tests/efl_mono/Parts.cs13
-rw-r--r--src/tests/efl_mono/StructHelpers.cs159
-rw-r--r--src/tests/efl_mono/Structs.cs76
-rw-r--r--src/tests/efl_mono/Value.cs504
-rw-r--r--src/tests/efl_mono/dummy_child.eo4
-rw-r--r--src/tests/efl_mono/dummy_event_manager.c6
-rw-r--r--src/tests/efl_mono/dummy_event_manager.eo2
-rw-r--r--src/tests/efl_mono/dummy_hidden_object.eo1
-rw-r--r--src/tests/efl_mono/dummy_inherit_helper.eo4
-rw-r--r--src/tests/efl_mono/dummy_inherit_iface.eo1
-rw-r--r--src/tests/efl_mono/dummy_numberwrapper.eo1
-rw-r--r--src/tests/efl_mono/dummy_part_holder.eo1
-rw-r--r--src/tests/efl_mono/dummy_test_object.c111
-rw-r--r--src/tests/efl_mono/dummy_test_object.eo189
-rw-r--r--src/tests/efl_mono/efl_sharp_test_suite.csproj.in3
-rw-r--r--src/tests/efl_mono/libefl_mono_native_test.h4
-rw-r--r--src/tests/efl_mono/meson.build1
-rw-r--r--src/tests/efreet/meson.build2
-rw-r--r--src/tests/eina/eina_suite.c2
-rw-r--r--src/tests/eina/eina_suite.h2
-rw-r--r--src/tests/eina/eina_test_abi.c3
-rw-r--r--src/tests/eina/eina_test_abstract_content.c224
-rw-r--r--src/tests/eina/eina_test_array.c18
-rw-r--r--src/tests/eina/eina_test_bezier.c42
-rw-r--r--src/tests/eina/eina_test_error.c4
-rw-r--r--src/tests/eina/eina_test_file.c97
-rw-r--r--src/tests/eina/eina_test_hash.c10
-rw-r--r--src/tests/eina/eina_test_inarray.c2
-rw-r--r--src/tests/eina/eina_test_iterator.c44
-rw-r--r--src/tests/eina/eina_test_lock.c19
-rw-r--r--src/tests/eina/eina_test_log.c6
-rw-r--r--src/tests/eina/eina_test_magic.c6
-rw-r--r--src/tests/eina/eina_test_matrix.c123
-rw-r--r--src/tests/eina/eina_test_matrixsparse.c2
-rw-r--r--src/tests/eina/eina_test_module.c4
-rw-r--r--src/tests/eina/eina_test_module_dummy.c2
-rw-r--r--src/tests/eina/eina_test_quaternion.c24
-rw-r--r--src/tests/eina/eina_test_range.c72
-rw-r--r--src/tests/eina/eina_test_safepointer.c2
-rw-r--r--src/tests/eina/eina_test_strbuf.c14
-rw-r--r--src/tests/eina/eina_test_stringshare.c2
-rw-r--r--src/tests/eina/eina_test_value.c43
-rw-r--r--src/tests/eina/eina_test_vector.c76
-rw-r--r--src/tests/eina/eina_test_vpath.c24
-rw-r--r--src/tests/eina/meson.build4
-rw-r--r--src/tests/eina_cxx/eina_simple.eo4
-rw-r--r--src/tests/eio/eio_test_manager.c8
-rw-r--r--src/tests/eio/eio_test_map.c10
-rw-r--r--src/tests/eldbus/eldbus_fake_server.c22
-rw-r--r--src/tests/elementary/custom_gesture.c19
-rw-r--r--src/tests/elementary/custom_gesture.eo26
-rw-r--r--src/tests/elementary/custom_gesture.h16
-rw-r--r--src/tests/elementary/custom_recognizer.c56
-rw-r--r--src/tests/elementary/custom_recognizer.eo11
-rw-r--r--src/tests/elementary/custom_recognizer2.c41
-rw-r--r--src/tests/elementary/custom_recognizer2.eo10
-rw-r--r--src/tests/elementary/efl_ui_suite.c7
-rw-r--r--src/tests/elementary/efl_ui_suite.h3
-rw-r--r--src/tests/elementary/efl_ui_test_collection_view.c156
-rw-r--r--src/tests/elementary/efl_ui_test_config.c18
-rw-r--r--src/tests/elementary/efl_ui_test_focus.c18
-rw-r--r--src/tests/elementary/efl_ui_test_focus_common.h2
-rw-r--r--src/tests/elementary/efl_ui_test_gesture.c769
-rw-r--r--src/tests/elementary/efl_ui_test_grid.c7
-rw-r--r--src/tests/elementary/efl_ui_test_image.c27
-rw-r--r--src/tests/elementary/efl_ui_test_layout.c26
-rw-r--r--src/tests/elementary/efl_ui_test_list_collection.c4
-rw-r--r--src/tests/elementary/efl_ui_test_scroller.c51
-rw-r--r--src/tests/elementary/efl_ui_test_select_model.c7
-rw-r--r--src/tests/elementary/efl_ui_test_spin_button.c115
-rw-r--r--src/tests/elementary/efl_ui_test_spotlight.c16
-rw-r--r--src/tests/elementary/efl_ui_test_text.c405
-rw-r--r--src/tests/elementary/efl_ui_test_timepicker.c45
-rw-r--r--src/tests/elementary/efl_ui_test_vg_animation.c122
-rw-r--r--src/tests/elementary/efl_ui_test_widget.c124
-rw-r--r--src/tests/elementary/efl_ui_window_cnp_dnd_slave.c191
-rw-r--r--src/tests/elementary/elm_code_file_test_load.c4
-rw-r--r--src/tests/elementary/elm_code_test_basic.c4
-rw-r--r--src/tests/elementary/elm_test_entry.c190
-rw-r--r--src/tests/elementary/elm_test_hover.c48
-rw-r--r--src/tests/elementary/elm_test_hoversel.c110
-rw-r--r--src/tests/elementary/elm_test_icon.c26
-rw-r--r--src/tests/elementary/elm_test_image.c137
-rw-r--r--src/tests/elementary/elm_test_list.c96
-rw-r--r--src/tests/elementary/elm_test_naviframe.c58
-rw-r--r--src/tests/elementary/elm_test_slider.c2
-rw-r--r--src/tests/elementary/elm_test_spinner.c6
-rw-r--r--src/tests/elementary/emoji_wink.json1
-rw-r--r--src/tests/elementary/meson.build18
-rw-r--r--src/tests/elementary/spec/efl_test_basics.c12
-rw-r--r--src/tests/elementary/spec/efl_test_gfx_arrangement.c4
-rw-r--r--src/tests/elementary/spec/efl_test_gfx_view.c2
-rw-r--r--src/tests/elementary/spec/efl_test_range_display.c34
-rw-r--r--src/tests/elementary/spec/efl_test_range_interactive.c8
-rw-r--r--src/tests/elementary/spec/efl_ui_spec_suite.c4
-rw-r--r--src/tests/elementary/suite_helpers.c263
-rw-r--r--src/tests/elementary/suite_helpers.h49
-rw-r--r--src/tests/elua/elua_lib.c17
-rw-r--r--src/tests/elua/meson.build2
-rw-r--r--src/tests/eo/access/access_inherit.c2
-rw-r--r--src/tests/eo/access/access_inherit.h2
-rw-r--r--src/tests/eo/access/access_simple.c4
-rw-r--r--src/tests/eo/access/access_simple.h2
-rw-r--r--src/tests/eo/composite_objects/composite_objects_simple.c134
-rw-r--r--src/tests/eo/composite_objects/composite_objects_simple.h132
-rw-r--r--src/tests/eo/constructors/constructors_mixin.c2
-rw-r--r--src/tests/eo/constructors/constructors_mixin.h2
-rw-r--r--src/tests/eo/constructors/constructors_simple.h8
-rw-r--r--src/tests/eo/function_overrides/function_overrides_inherit2.c4
-rw-r--r--src/tests/eo/function_overrides/function_overrides_inherit2.h4
-rw-r--r--src/tests/eo/function_overrides/function_overrides_simple.c8
-rw-r--r--src/tests/eo/function_overrides/function_overrides_simple.h8
-rw-r--r--src/tests/eo/interface/interface_interface.h2
-rw-r--r--src/tests/eo/interface/interface_interface2.h2
-rw-r--r--src/tests/eo/interface/interface_simple.h8
-rw-r--r--src/tests/eo/mixin/mixin_mixin.c2
-rw-r--r--src/tests/eo/mixin/mixin_mixin.h2
-rw-r--r--src/tests/eo/mixin/mixin_simple.h8
-rw-r--r--src/tests/eo/signals/signals_main.c31
-rw-r--r--src/tests/eo/signals/signals_simple.c6
-rw-r--r--src/tests/eo/signals/signals_simple.h2
-rw-r--r--src/tests/eo/suite/eo_test_call_errors.c4
-rw-r--r--src/tests/eo/suite/eo_test_class_simple.c15
-rw-r--r--src/tests/eo/suite/eo_test_class_simple.h16
-rw-r--r--src/tests/eo/suite/eo_test_domain.c2
-rw-r--r--src/tests/eo/suite/eo_test_domain.h6
-rw-r--r--src/tests/eo/suite/eo_test_event.c14
-rw-r--r--src/tests/eo/suite/eo_test_general.c3
-rw-r--r--src/tests/eo/suite/eo_test_reflection_complex_class_structure.c8
-rw-r--r--src/tests/eo/suite/eo_test_reflection_complex_class_structure.h14
-rw-r--r--src/tests/eolian/data/base.eo1
-rw-r--r--src/tests/eolian/data/class_funcs.eo1
-rw-r--r--src/tests/eolian/data/class_requires.eo1
-rw-r--r--src/tests/eolian/data/class_simple.eo4
-rw-r--r--src/tests/eolian/data/class_simple_ref.c6
-rw-r--r--src/tests/eolian/data/class_simple_ref_eo.h18
-rw-r--r--src/tests/eolian/data/complex_type.eo4
-rw-r--r--src/tests/eolian/data/consts.eo1
-rw-r--r--src/tests/eolian/data/ctor_dtor.eo1
-rw-r--r--src/tests/eolian/data/docs_ref.h32
-rw-r--r--src/tests/eolian/data/enum.eo9
-rw-r--r--src/tests/eolian/data/eo_docs.eo10
-rw-r--r--src/tests/eolian/data/error.eo2
-rw-r--r--src/tests/eolian/data/events.eo1
-rw-r--r--src/tests/eolian/data/extern.eo13
-rw-r--r--src/tests/eolian/data/free_func.eo7
-rw-r--r--src/tests/eolian/data/function_as_argument.eo1
-rw-r--r--src/tests/eolian/data/function_as_argument_ref.c4
-rw-r--r--src/tests/eolian/data/function_as_argument_ref.h12
-rw-r--r--src/tests/eolian/data/iface.eo1
-rw-r--r--src/tests/eolian/data/import.eo3
-rw-r--r--src/tests/eolian/data/mixins_require.eo1
-rw-r--r--src/tests/eolian/data/nmsp1_class1.eo4
-rw-r--r--src/tests/eolian/data/nmsp1_nmsp11_class2.eo4
-rw-r--r--src/tests/eolian/data/nmsp2_class1.eo4
-rw-r--r--src/tests/eolian/data/no_nmsp.eo4
-rw-r--r--src/tests/eolian/data/object_impl.eo15
-rw-r--r--src/tests/eolian/data/object_impl_add.eo2
-rw-r--r--src/tests/eolian/data/object_impl_add_ref.c2
-rw-r--r--src/tests/eolian/data/object_impl_ref.c2
-rw-r--r--src/tests/eolian/data/override.eo1
-rw-r--r--src/tests/eolian/data/override_ref.c16
-rw-r--r--src/tests/eolian/data/owning_ref.c4
-rw-r--r--src/tests/eolian/data/scope.eo1
-rw-r--r--src/tests/eolian/data/struct.eo6
-rw-r--r--src/tests/eolian/data/struct_ref.h32
-rw-r--r--src/tests/eolian/data/struct_ref_stub.h18
-rw-r--r--src/tests/eolian/data/typedef.eo15
-rw-r--r--src/tests/eolian/data/typedef_ref.h42
-rw-r--r--src/tests/eolian/data/typedef_ref_stub.h26
-rw-r--r--src/tests/eolian/data/unimpl.eo1
-rw-r--r--src/tests/eolian/data/var.eo3
-rw-r--r--src/tests/eolian/data_aux/aux_a.eo1
-rw-r--r--src/tests/eolian/data_aux/aux_b.eo1
-rw-r--r--src/tests/eolian/data_aux/aux_c.eo1
-rw-r--r--src/tests/eolian/eolian_generated_future.c3
-rw-r--r--src/tests/eolian/eolian_generation.c1
-rw-r--r--src/tests/eolian/eolian_parsing.c17
-rw-r--r--src/tests/eolian/eolian_static.c2
-rw-r--r--src/tests/eolian/generated_future.eo4
-rw-r--r--src/tests/eolian/meson.build3
-rw-r--r--src/tests/eolian_cxx/a.c3
-rw-r--r--src/tests/eolian_cxx/a.eo4
-rw-r--r--src/tests/eolian_cxx/b.c3
-rw-r--r--src/tests/eolian_cxx/b.eo4
-rw-r--r--src/tests/eolian_cxx/c.c3
-rw-r--r--src/tests/eolian_cxx/c.eo4
-rw-r--r--src/tests/eolian_cxx/callback.eo8
-rw-r--r--src/tests/eolian_cxx/complex.c3
-rw-r--r--src/tests/eolian_cxx/complex.eo56
-rw-r--r--src/tests/eolian_cxx/complex_cxx.cc3
-rw-r--r--src/tests/eolian_cxx/cyclic1.eo4
-rw-r--r--src/tests/eolian_cxx/cyclic2.eo4
-rw-r--r--src/tests/eolian_cxx/docs.eo15
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_test_address_of.cc3
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_test_binding.cc16
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_test_cyclic.cc3
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_test_documentation.cc26
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_test_inheritance.cc5
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc3
-rw-r--r--src/tests/eolian_cxx/generic.c16
-rw-r--r--src/tests/eolian_cxx/generic.eo39
-rw-r--r--src/tests/eolian_cxx/generic_interface.eo4
-rw-r--r--src/tests/eolian_cxx/meson.build1
-rw-r--r--src/tests/eolian_cxx/name1_name2_type_generation.c3
-rw-r--r--src/tests/eolian_cxx/name_name.c3
-rw-r--r--src/tests/eolian_cxx/name_name.eo1
-rw-r--r--src/tests/eolian_cxx/name_name_cxx.cc3
-rw-r--r--src/tests/eolian_cxx/ns_name.eo1
-rw-r--r--src/tests/eolian_cxx/ns_name_other.eo1
-rw-r--r--src/tests/eolian_cxx/property_holder.eo4
-rw-r--r--src/tests/eolian_cxx/simple.c7
-rw-r--r--src/tests/eolian_cxx/simple.eo4
-rw-r--r--src/tests/eolian_js/constructor_method_class.eo4
-rw-r--r--src/tests/eolian_js/test_object.eo3
-rw-r--r--src/tests/evas/efl_canvas_animation.c2
-rw-r--r--src/tests/evas/evas_suite.c5
-rw-r--r--src/tests/evas/evas_suite.h5
-rw-r--r--src/tests/evas/evas_test_filters.c2
-rw-r--r--src/tests/evas/evas_test_image.c154
-rw-r--r--src/tests/evas/evas_test_matrix.c42
-rw-r--r--src/tests/evas/evas_test_mesh.c202
-rw-r--r--src/tests/evas/evas_test_text.c2
-rw-r--r--src/tests/evas/evas_test_textblock.c748
-rw-r--r--src/tests/evas/fonts/TestFontSource.eetbin0 -> 3742912 bytes
-rw-r--r--src/tests/evas/meshes/md2/sonic.md2bin660576 -> 0 bytes
-rw-r--r--src/tests/evas/meshes/obj/man_mesh.obj2493
-rw-r--r--src/tests/evas/meshes/obj/sweet_home.obj107
-rw-r--r--src/tests/evas/meshes/ply/NoNormal_NoUVs_Colors.ply1679
-rw-r--r--src/tests/evas/meshes/ply/NoNormal_NoUVs_NoColors.ply1676
-rw-r--r--src/tests/evas/meshes/ply/NoNormal_UVs_Colors.ply1681
-rw-r--r--src/tests/evas/meshes/ply/NoNormal_UVs_NoColors.ply1678
-rw-r--r--src/tests/evas/meshes/ply/Normal_NoUVs_Colors.ply1682
-rw-r--r--src/tests/evas/meshes/ply/Normal_NoUVs_NoColors.ply1679
-rw-r--r--src/tests/evas/meshes/ply/Normal_UVs_Colors.ply1684
-rw-r--r--src/tests/evas/meshes/ply/Normal_UVs_NoColors.ply1681
-rw-r--r--src/tests/evas/meson.build7
-rw-r--r--src/tests/evil/evil_test_stdlib.c88
-rw-r--r--src/wayland_protocol/meson.build9
-rw-r--r--src/wayland_protocol/teamwork.xml39
-rw-r--r--src/wayland_protocol/www.xml28
-rw-r--r--systemd-services/meson.build17
2314 files changed, 71535 insertions, 142905 deletions
diff --git a/.ci/README b/.ci/README
deleted file mode 100644
index 8365a74818..0000000000
--- a/.ci/README
+++ /dev/null
@@ -1,21 +0,0 @@
-Matrix build:
--------------
-We are building our software on different distributions with the help of docker images. Right now
-we are using versions of Ubuntu, Fedora and Debian.
-
-OSX build:
-----------
-We are using the OSX support of Travis CI to build EFL on OSX. Build testing two combinations: Xcode
-7.3.1 on OS X 10.11 and Xcode 8.3.3 on OS X 10.12.
-
-Run locally:
-------------
-For easy developer testing the CI setup can also be run in full or only parts locally on the
-developers machine. You need to have docker installed and after that it is a simple:
-
-docker pull fedora:26
-docker build -f .ci/Dockerfile-Fedora26 .
-
-Travis:
--------
-https://travis-ci.org/Enlightenment/efl
diff --git a/.ci/asan-ignore-leaks.supp b/.ci/asan-ignore-leaks.supp
deleted file mode 100644
index 027800db9f..0000000000
--- a/.ci/asan-ignore-leaks.supp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Evas
-leak:evas_module_find_type
-leak:generic_cache_new
-# Edje / cpplib
-leak:handle_directive
-# Edje_cc
-leak:edje_cc
-leak:_efl_loop_message_handler_message_send
-leak:ecore_ipc_client_add
-# Elm_prefs_cc
-leak:st_collection_page_items_item_label
-leak:st_collection_page_items_item_name
-leak:st_collection_page_items_item_string_placeholder
-leak:st_collection_page_items_item_string_default
-leak:st_collection_page_items_item_string_deny
-leak:ob_collection_page_items_item
diff --git a/.ci/build-efl-app.sh b/.ci/build-efl-app.sh
deleted file mode 100755
index c8a0e6aa0b..0000000000
--- a/.ci/build-efl-app.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-set -e
-
-#clone our examples from efl
-git clone --depth=1 -b master http://git.enlightenment.org/tools/examples.git/
-
-cd examples/apps/c/life/
-
-#build the example
-mkdir build
-meson . ./build
-ninja -C build all
-
-#remove the folder again so its not left in the artifacts
-cd ../../../..
-rm -rf examples
diff --git a/.ci/ci-build-test.sh b/.ci/ci-build-test.sh
index 05b753e38b..1a38c30c56 100755
--- a/.ci/ci-build-test.sh
+++ b/.ci/ci-build-test.sh
@@ -1,19 +1,20 @@
-#!/bin/sh
+#!/bin/bash
set -e
-. .ci/travis.sh
-if [ "$1" = "coverity" ] || [ "$1" = "mingw" ] || [ "$1" = "release-ready" ] ; then
+if [ "$1" = "codecov" ] || [ "$1" = "coverity" ] || [ "$1" = "mingw" ] || [ "$1" = "release-ready" ]; then
exit 0
fi
-travis_fold compile_test compile_test
+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
-else
+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_endfold compile_test
+travis_time_finish "app-compile-test"
+travis_fold end "app-compile-test"
diff --git a/.ci/ci-ccache-stats.sh b/.ci/ci-ccache-stats.sh
index 76b270488c..c31325fd5d 100755
--- a/.ci/ci-ccache-stats.sh
+++ b/.ci/ci-ccache-stats.sh
@@ -1,9 +1,13 @@
-#!/bin/sh
+#!/bin/bash
set -e
+travis_fold start "ccache-stats"
+travis_time_start "ccache-stats"
if [ "$DISTRO" != "" ] ; then
docker exec $(cat $HOME/cid) ccache -s
-else
+elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
ccache -s
fi
+travis_time_finish "ccache-stats"
+travis_fold end "ccache-stats"
diff --git a/.ci/ci-configure.sh b/.ci/ci-configure.sh
index f9a58604e7..77c196848b 100755
--- a/.ci/ci-configure.sh
+++ b/.ci/ci-configure.sh
@@ -1,43 +1,43 @@
-#!/bin/sh
+#!/bin/bash
set -e
-. .ci/travis.sh
+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=luajit,cxx,mono -Dmono-beta=true"
+ 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
- # - RPM fusion repo for xine and libvlc
# - 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 \
- -Devas-loaders-disabler=json -Decore-imf-loaders-disabler= -Demotion-loaders-disabler=libvlc,xine \
- -Demotion-generic-loaders-disabler=vlc -Dharfbuzz=true -Dpixman=true -Dhyphen=true \
- -Dvnc-server=true -Dbindings=luajit,cxx,mono -Delogind=false -Dinstall-eo-files=true -Dphysics=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 \
- -Decore-imf-loaders-disabler=xim,ibus,scim -Demotion-loaders-disabler=gstreamer1,libvlc,xine \
- -Demotion-generic-loaders-disabler=vlc -Dfribidi=false -Dfontconfig=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=true -Dnls=false -Dbindings= -Dlua-interpreter=luajit -Dnative-arch-optimization=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 \
+ -Devas-loaders-disabler=json,pdf,ps,raw,svg,rsvg,avif,heif \
-Dharfbuzz=true -Dpixman=true -Dembedded-lz4=false "
if [ "$1" = "default" ]; then
@@ -51,39 +51,35 @@ if [ "$DISTRO" != "" ] ; then
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"
- travis_fold cov-download cov-download
docker exec --env COVERITY_SCAN_TOKEN=$COVERITY_SCAN_TOKEN $(cat $HOME/cid) sh -c '.ci/coverity-tools-install.sh'
- travis_endfold cov-download
+ 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"
- travis_fold cross-native cross-native
docker exec $(cat $HOME/cid) sh -c '.ci/bootstrap-efl-native-for-cross.sh'
- travis_endfold cross-native
+ travis_time_finish "cross-native"
+ travis_fold end "cross-native"
fi
if [ "$1" = "asan" ]; then
- travis_fold meson meson
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"
- travis_endfold meson
elif [ "$1" = "mingw" ]; then
- travis_fold meson meson
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"
- travis_endfold meson
elif [ "$1" = "coverity" ]; then
- travis_fold meson meson
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"
- travis_endfold meson
else
- travis_fold meson meson
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"
- travis_endfold meson
fi
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
# Prepare OSX env for build
@@ -95,9 +91,24 @@ elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
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 PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:/usr/local/Cellar/libffi/$LIBFFI_VER/lib/pkgconfig"
export CC="ccache gcc"
- travis_fold meson meson
- mkdir build && meson build -Dopengl=full -Decore-imf-loaders-disabler=scim,ibus -Dx11=false -Davahi=false -Deeze=false -Dsystemd=false -Dnls=false -Dcocoa=true -Demotion-loaders-disabler=gstreamer1,libvlc,xine
- travis_endfold meson
+ #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"
diff --git a/.ci/ci-exactness.sh b/.ci/ci-exactness.sh
new file mode 100755
index 0000000000..40a0f54798
--- /dev/null
+++ b/.ci/ci-exactness.sh
@@ -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"
diff --git a/.ci/ci-make-benchmark.sh b/.ci/ci-make-benchmark.sh
index 17455c1e52..dc267782f9 100755
--- a/.ci/ci-make-benchmark.sh
+++ b/.ci/ci-make-benchmark.sh
@@ -1,15 +1,17 @@
-#!/bin/sh
+#!/bin/bash
set -e
-. .ci/travis.sh
+
if [ "$1" != "default" ] ; then
exit 0
fi
-travis_fold benchmark "ninja benchmark"
+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
-else
+elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
ninja benchmark -C build
fi
-travis_endfold benchmark
+travis_time_finish "ninja-benchmark"
+travis_fold end "ninja-benchmark"
diff --git a/.ci/ci-make-check.sh b/.ci/ci-make-check.sh
index 44f5f2bf90..17fedfea65 100755
--- a/.ci/ci-make-check.sh
+++ b/.ci/ci-make-check.sh
@@ -1,27 +1,41 @@
-#!/bin/sh
+#!/bin/bash
set -e
-. .ci/travis.sh
-if [ "$1" = "release-ready" ] || [ "$1" = "mingw" ] || [ "$1" = "coverity" ] || [ "$1" = "options-enabled" ] || [ "$1" = "options-disabled" ]; then
+if [ "$1" = "release-ready" ] || [ "$1" = "mingw" ] || [ "$1" = "coverity" ] || [ "$1" = "options-enabled" ] || [ "$1" = "options-disabled" ] ; then
exit 0
fi
NUM_TRIES=5
-travis_fold check "ninja test"
+
+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
- if [ "$1" = "asan" ]; then
- (docker exec --env EINA_LOG_BACKTRACE="0" --env EIO_MONITOR_POLL=1 --env ASAN_OPTIONS=detect_leaks=0:abort_on_error=0 $(cat $HOME/cid) meson test -t 120 -C build --wrapper dbus-launch) && break
- else
- (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
- fi
+ (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_endfold check
+travis_time_finish "ninja-test"
+travis_fold end "ninja-test"
exit $ret
diff --git a/.ci/ci-make-distcheck.sh b/.ci/ci-make-distcheck.sh
index 22f441c14b..b9b090a17a 100755
--- a/.ci/ci-make-distcheck.sh
+++ b/.ci/ci-make-distcheck.sh
@@ -1,21 +1,22 @@
-#!/bin/sh
+#!/bin/bash
set -e
-. .ci/travis.sh
if [ "$1" != "release-ready" ] ; then
exit 0
fi
-travis_fold distcheck "ninja dist"
+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)
-else
+elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
ninja -C build dist
fi
-travis_endfold distcheck
+travis_time_finish "ninja-dist"
+travis_fold end "ninja-dist"
diff --git a/.ci/ci-make-install.sh b/.ci/ci-make-install.sh
index 157f1a2401..882b80372c 100755
--- a/.ci/ci-make-install.sh
+++ b/.ci/ci-make-install.sh
@@ -1,21 +1,20 @@
-#!/bin/sh
+#!/bin/bash
set -e
-. .ci/travis.sh
if [ "$1" = "release-ready" ] || [ "$1" = "coverity" ] ; then
exit 0
fi
-travis_fold install "ninja install"
-if [ "$1" = "asan" ]; then
- docker exec --env EIO_MONITOR_POLL=1 --env ASAN_OPTIONS=abort_on_error=0 --env LSAN_OPTIONS=suppressions=/src/.ci/asan-ignore-leaks.supp $(cat $HOME/cid) ninja -C build install
- exit $?
-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
-else
+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_endfold install
+travis_time_finish "ninja-install"
+travis_fold end "ninja-install"
diff --git a/.ci/ci-make.sh b/.ci/ci-make.sh
index 167e2369cb..5d4508c159 100755
--- a/.ci/ci-make.sh
+++ b/.ci/ci-make.sh
@@ -1,17 +1,13 @@
-#!/bin/sh
+#!/bin/bash
set -e
-. .ci/travis.sh
if [ "$1" = "release-ready" ] ; then
exit 0
fi
-travis_fold ninja ninja
-if [ "$1" = "asan" ]; then
- docker exec --env EIO_MONITOR_POLL=1 --env ASAN_OPTIONS=abort_on_error=0 --env LSAN_OPTIONS=suppressions=/src/.ci/asan-ignore-leaks.supp $(cat $HOME/cid) ninja -C build
- exit $?
-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"
@@ -19,9 +15,17 @@ if [ "$DISTRO" != "" ] ; then
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
-else
+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_endfold ninja
+travis_time_finish "ninja"
+travis_fold end "ninja"
diff --git a/.ci/ci-setup-ccache.sh b/.ci/ci-setup-ccache.sh
index ab7d3b8613..e1c868a83a 100755
--- a/.ci/ci-setup-ccache.sh
+++ b/.ci/ci-setup-ccache.sh
@@ -1,13 +1,17 @@
-#!/bin/sh
+#!/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
-else
+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"
diff --git a/.ci/docker-ccache-setup.sh b/.ci/docker-ccache-setup.sh
index caba08ac81..81406cb8bc 100755
--- a/.ci/docker-ccache-setup.sh
+++ b/.ci/docker-ccache-setup.sh
@@ -4,10 +4,5 @@ CI_BUILD_TYPE="$1"
cp .ci/ccache.conf ~/.ccache
-if [ "$1" = "release-ready" ] ; then
- sed -iE '/^base_dir/d' ~/.ccache/ccache.conf
- echo "base_dir = $(pwd)/$(grep '^PACKAGE_STRING' config.log|cut -d\' -f2|tr ' ' -)" >> ~/.ccache/ccache.conf
-else
- sed -iE '/^base_dir/d' ~/.ccache/ccache.conf
- echo "base_dir = $pwd" >> ~/.ccache/ccache.conf
-fi
+sed -iE '/^base_dir/d' ~/.ccache/ccache.conf
+echo "base_dir = $pwd" >> ~/.ccache/ccache.conf
diff --git a/.ci/travis.sh b/.ci/travis.sh
deleted file mode 100755
index 6ae67e2e82..0000000000
--- a/.ci/travis.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-# https://github.com/travis-ci/travis-rubies/blob/9f7962a881c55d32da7c76baefc58b89e3941d91/build.sh#L38-L44
-
-travis_fold() {
- echo -e "travis_fold:start:$1\033[33;1m$2\033[0m"
-}
-travis_endfold() {
- echo -e "\ntravis_fold:end:$1\r"
-}
-
-travis_time_start() {
- travis_timer_id=$(printf %08x $(( RANDOM * RANDOM )))
- travis_start_time=$(travis_nanoseconds)
- echo -en "travis_time:start:$travis_timer_id\r${ANSI_CLEAR}"
-}
-
-travis_time_finish() {
- local result=$?
- travis_end_time=$(travis_nanoseconds)
- local duration=$(($travis_end_time-$travis_start_time))
- echo -en "\ntravis_time:end:$travis_timer_id:start=$travis_start_time,finish=$travis_end_time,duration=$duration\r${ANSI_CLEAR}"
- return $result
-}
diff --git a/.ci/ubuntu-bionic-install-deps.sh b/.ci/ubuntu-bionic-install-deps.sh
new file mode 100755
index 0000000000..d69d9f58bf
--- /dev/null
+++ b/.ci/ubuntu-bionic-install-deps.sh
@@ -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"
diff --git a/.ci/zlib.pc b/.ci/zlib.pc
new file mode 100644
index 0000000000..e217860219
--- /dev/null
+++ b/.ci/zlib.pc
@@ -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}
diff --git a/.mailmap b/.mailmap
index 354eab2bd5..c5fb70a8ac 100644
--- a/.mailmap
+++ b/.mailmap
@@ -21,16 +21,16 @@ Tom Hacohen <tom@stosb.com> Tom 'TAsn' Hacohen <tom@stosb.com>
Tom Hacohen <tom@stosb.com> Tom <tom@stosb.com>
Gustavo Sverzut Barbieri <barbieri@gmail.com> Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
Gustavo Sverzut Barbieri <barbieri@gmail.com> Gustavo Sverzut Barbieri <gustavo.barbieri@intel.com>
-Christopher Michael <devilhorns@comcast.net> Christopher Michael <cpmichael@comcast.net>
-Christopher Michael <devilhorns@comcast.net> Christopher Michael <cp.michael@samsung.com>
-Christopher Michael <devilhorns@comcast.net> Christopher Michael <cpmichael1@comcast.net>
Christopher Michael <devilhorns@comcast.net> Chris Michael <devilhorns@comcast.net>
Christopher Michael <devilhorns@comcast.net> Christopher Michael <devilhorns@comcast.net>
+Christopher Michael <devilhorns@comcast.net> Christopher Michael <cpmichael@comcast.net>
+Christopher Michael <devilhorns@comcast.net> Christopher Michael <cpmichael1@comcast.net>
Christopher Michael <devilhorns@comcast.net> Christopher <devilhorns@comcast.net>
-Christopher Michael <devilhorns@comcast.net> Chris Michael <cp.michael@samsung.com>
Christopher Michael <devilhorns@comcast.net> Christopher Michael <cpmichael@osg.samsung.com>
Christopher Michael <devilhorns@comcast.net> Chris Michael <cpmichael@osg.samsung.com>
Christopher Michael <devilhorns@comcast.net> Chris Micheal <cp.michael@samsung.com>
+Christopher Michael <devilhorns@comcast.net> Christopher Michael <cp.michael@samsung.com>
+Christopher Michael <devilhorns@comcast.net> Chris Michael <cp.michael@samsung.com>
Sebastian Dransfeld <sd@tango.flipp.net> Sebastian Dransfeld <sebastian.dransfeld@sintef.no>
Sebastian Dransfeld <sd@tango.flipp.net> sebastid <sebastid>
Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Mike Blumenkrantz <m.blumenkran@samsung.com>
diff --git a/.travis.yml b/.travis.yml
index 15a5aeb93c..a66ea7a47e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,9 +5,9 @@ cache:
directories:
- $HOME/cachedir
- $HOME/.ccache
-dist: trusty
+dist: bionic
-osx_image: xcode10.2
+osx_image: xcode11.3
addons:
homebrew:
@@ -36,6 +36,7 @@ addons:
- ninja
- python3
- libffi
+ update: true
env:
global:
@@ -45,40 +46,58 @@ env:
jobs:
include:
- - os: osx
- os: linux
- env: DISTRO=Fedora31-mingw CI_BUILD_TYPE=mingw
+ env: DISTRO=Fedora32-mingw CI_BUILD_TYPE=mingw
- os: linux
- env: DISTRO=Fedora31 CI_BUILD_TYPE=options-enabled
+ env: DISTRO=Fedora32 CI_BUILD_TYPE=options-enabled
- os: linux
- env: DISTRO=Fedora31 CI_BUILD_TYPE=options-disabled
+ env: DISTRO=Fedora32 CI_BUILD_TYPE=options-disabled
- os: linux
- env: DISTRO=Fedora31 CI_BUILD_TYPE=wayland
+ env: DISTRO=Fedora32 CI_BUILD_TYPE=wayland
- os: linux
- env: DISTRO=Fedora31 CI_BUILD_TYPE=default
+ env: DISTRO=Fedora32 CI_BUILD_TYPE=default
- os: linux
if: type = cron
- env: DISTRO=Fedora31 CI_BUILD_TYPE=release-ready
+ env: DISTRO=Fedora32 CI_BUILD_TYPE=release-ready
- os: linux
if: type = cron
- env: DISTRO=Ubuntu1804
+ env: DISTRO=Ubuntu2004
- os: linux
if: type = cron
env: DISTRO=Ubuntu1910
- os: linux
if: type = cron
- env: DISTRO=Debian96
+ env: DISTRO=Debian103
- os: linux
if: type = cron
env: DISTRO=Fedora31 CI_BUILD_TYPE=coverity
- os: linux
if: type = cron
- env: DISTRO=Fedora31 CI_BUILD_TYPE=asan
+ 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
@@ -92,7 +111,11 @@ before_script:
if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$DISTRO" != "" ]]; then
docker pull stefanschmidt1/ci-support-files:$DISTRO
docker version
- docker run --cidfile $HOME/cid -t -d -v `pwd`:/src -v $HOME/.ccache:/root/.ccache -w /src stefanschmidt1/ci-support-files:$DISTRO bash
+ 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
@@ -103,6 +126,7 @@ script:
- .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"
diff --git a/COPYING b/COPYING
index 7079647b7d..51d541be0f 100644
--- a/COPYING
+++ b/COPYING
@@ -12,7 +12,6 @@ the licensing of such libraries is compatible with the libraries that
use them and is not more restrictive).
evil: licenses/COPYING.BSD
-escape: licenses/COPYING.GPL (used in PlayStation native)
eina: licenses/COPYING.LGPL
emile: licenses/COPYING.LGPL
eet: licenses/COPYING.BSD
@@ -35,7 +34,6 @@ eolian: licenses/COPYING.BSD
elua: licenses/COPYING.BSD
elementary: licenses/COPYING.LGPL
generic/evas: licenses/COPYING.GPL (separate binary/executable)
-generic/emotion: licenses/COPYING.GPL (separate binary/executable)
efl: licenses/COPYING.LGPL
csharp bindings: licenses/COPYING.ASL
cxx bindings: licenses/COPYING.ASL
diff --git a/NEWS b/NEWS
index 76b8b92af2..922a0bee93 100644
--- a/NEWS
+++ b/NEWS
@@ -1,17 +1,152 @@
==========
-EFL 1.23.0
+EFL 1.25.0
==========
+Changes since 1.24.0:
+---------------------
+
+Features:
+
+ * ecore-drm2: Add support for using page_flip_handler2
+ * ecore-drm2: Add API function to return default depth
+
+Fixes:
+
+ * ecore_evas: only define these eina errors once
+ * exactness: remove no longer needed _evas_new()
+ * edje - don't set font sizes less than 1
+ * ecore_evas_x - fix maximize/unmaximize request corner case
+ * exactness_player: do not test for delay_ms
+ * evas + gl - fix callback-to-app-changes-state issue with pixel data
+ * canvas render: don't apply mask if the objects in the map.
+ * evas_object_textblock: fix to free style properly by edje's style_user_pop
+ * evas_vg_shape: return NULL in evas_vg_shape_add when the parent of shape is NULL
+ * efl_ui_image: fix to call "clicked" smart callback when there is no img
+ * ecore-x - ensure we fully look at all xkb events and refresh all binds
+ * evas_vg_container: return NULL in evas_vg_container_add when the parent of container is NULL
+ * ecore thread - feedback threads should not be background threads...
+ * ecore_evas_wayland_common: keep the backword compatibility for wayland dnd handler
+ * edje: fix animation memory leak.
+ * canvas vg: fix dangling vector containers.
+ * evas vg: clean up dangling instances
+ * canvas vg: fix vector file data memory leak.
+ * evas - csd and wl csd - fix alpha zeroing to avoid framespace junk
+ * efl gfx_path: fix memory leak.
+ * evas - genetic update regions smart merge - merge v adjacent regions
+ * efreet - handle runtime relocation right with default XDG_DATA_DIRS
+ * efl_ui_image: fixed elm_image_preload_disabled_set api is not working when it is called before file set
+ * elm_image: keep backword compatibility for elm_image_file_set API when setting url file set twice
+ * efreetd - cache - add more statinfo work around 0 mtime distros
+ * elm_code: on newline ensure line number visible. (T2798)
+ * elm_code: cursor visbility fix.
+ * edje - fix edje_cc mis-re-iding images in image sets
+ * efl_ui_image: remove the unnecessary code in efl_file_unload
+ * win - x io errors really just have to exit, so call the iorr cb + exit
+ * evas - render - dont crash is private data is null
+ * eina vpath - fix windows ~username handling to only error when used
+ * efl ui image - fix scal to fill - broken with non-rect src images
+ * embryo: fix a integer(cell) overflow problem
+ * elput - support libelogind.so.0 as well as libelogind-shared.so.0
+ * edje - calce - really respect max image size for img sets
+ * ecore - don't do anything with heap between fork and exec
+ * evas - fix deadlock with sw async rendering calling cbs in post flush
+ * ecore con - curl - fix error map to map right enum
+ * eina - statgen (stat generation) - fix enable api to actually enable
+ * evas - image cache - fix loading with skip head on to load changed files
+ * evas_textblock: remove style padding from native width and formatted height
+ * elm icon/thumb - fix handling of a wider range of video extns
+ * edje - calc - handle swallow disappearing mid-calc due to callabcks
+ * ecore drm - increase timeout for flips from 0.05 to 2.0 sec
+ * docs: Correct the mismatched group name in Evas.
+ * elm - toolbar - use correct theme icon for more items
+
Changes since 1.23.0:
---------------------
+Features:
+
+ * eina: add comparison macros for Eina_Size2D and Eina_Position2D
+ * ecore-wl2: Add API to find a window by surface
+ * ecore-wl2: Add API to find a connected display given a name
+ * ecore-wl2: Add API to return the compositor object from a given display
+ * ecore-wl2: Add API to return window type
+ * ecore-wl2: Add API to find a window by given surface
+ * edje: Add text change signal
+ * edje: add json file support feature
+
+Fixes:
+
+ * efl_ui/bg: unset finger_size multiplier during construction (T8304)
+ * elementary: always use a font that matches our expectation for our test instead of the system one. (T8277)
+ * doc: improve colorselector preview (T8304)
+ * eldbus: properly call parent finalize during creation of Eldbus.Model_Method.
+ * efl_ui/win: fix max size hint eval (T8304)
+ * eet - fix loading eet files that do not have dicts (T8368)
+ * evas/callbacks: emit hardcoded legacy smart callbacks always
+ * elm/layout: add some workarounds to try handling legacy min sizes
+ * ecore_evas/wl2 0 fux xdg close cb for window when it's closed remotely
+ * wl egl - use platform get display
+ * ecore-evas-wayland: Add handler to array
+ * ecore_evas_wayland: Fix array step size
+ * efl/timer: correctly handle recursion for timer processing
+ * elm/genlist: trigger filter,done callback immediately if no filter queue exists
+ * elm/genlist: fix "drag" smart callback
+ * elm/genlist: set pan need recalc during item move on item position change
+ * elm/genlist: fix item focus unregister on item move
+ * ecore/timer: correctly handle recursive deletion of legacy timers
+ * ecore-drm2: Fix issue of shifting 1 by more than 32bits
+ * efreet - consider ctime changes as changes too
+ * edje - box - calc min size correctly at start ...
+ * vector svg: apply fill-opacity to graidents fill objects.
+ * evas vector: initialize data member properly.
+ * fix jpeg loading which freed the wrong ptr (T8497)
+ * fix the wrong method signature for evas_textgrid
+ * efl_ui/layout: fix multiple emissions of theme,changed during construction
+ * ui image: fix scale_method expand behavior.
+ * ecore-x - fix fallbacks to use capital X in lib name (T8543)
+ * elm - widget - actually check object smart data return for no data
+ * canvas vector: fix to refresh svg file of vector object.
+ * evas - fix access-after-free where during destroy hash item not cleared
+ * elm - fix filesel deferred unref to not crash
+ * ecore_con - freebsd bind blocking workaround
+ * elm win + ecore evas - fix csd stuff like base size and min sizing
+ * evas - fix access-after-free number 2 (T8534)
+ * elm win - fix client side move/resize req handling csd in x
+ * edje - store original size in edje struct and dont exceed max size
+ * evas - loaders - jp2k - re-enable in the build after it was lost
+ * edje_entry: Add matching tag.
+ * evas/events: fix multi-touch object targeting on touch down events
+ * eo - fix - fix alignment of eo object class structs - it was wrong
+ * canvas font: correct wrong masking length.
+ * Efl.Gfx.Path: Fix condition of for loop in current search
+ * canvas mask: fix incorrect render surface size.
+ * canvas proxy: fix broken proxy source clipping function.
+ * evas gl: clip rect with proper size.
+ * canvas proxy: fix a missing case that proxy not updated properly.
+ * evas_object_box: respect static clipper.
+ * ecore evas x - on argb dont create unused 1 bit pixmap masks
+ * emotion - webcam - fix segv on webcam plug/unplug and clean
+ * ui textpath: update map before rendering begins.
+ * elm icon/image efl ui image - respect aspect hints at all if set
+ * elm icon/image efl ui image - respect aspect hints at all if set
+ * elm_cnp: fix memory leaks
+ * elm menu - fix segv on deletion/shutdown where parent was not done ok
+ * canvas svg: fix memory leak.
+ * ecore_wl2: EFL Wayland Build on FreeBSD (T8659)
+ * ecore_file - address issue about false positive of finding a file in ./ (T8678)
+ * evas gl - shader cache was needless losing and overwriting
+ * efreet - work around conconforming apps putting startupwmclass in quotes
+ * ecore-evas-drm: Fix broken init count
+
Removals:
* emotion & evas: remove gstreamer 0.10 support
+ * emotion: remove xine and vlc support
* escape: remove library from tree
* ecore_x: remove support XGesture extension
* elocation: remove beta library
* eeze: remove tizen module support from eeze sensor
+ * evas3d: remove support for evas 3D which was a beta all along
Changes since 1.22.0:
---------------------
@@ -4450,7 +4585,7 @@ Fixes:
* ecore-drm: Send proper keycode to ecore key event, and remove erroneous variable.
* edje/Edje_Edit: _edje_edit_real_part_add init field of Edje_Real_part
* fix ecore_con_url using 100% cpu and just let fd handler do work (T1251)
- * fix behavior of edje entry to match other toolkit entires (T1229)
+ * fix behavior of edje entry to match other toolkit entries (T1229)
* fix ecore_thread_global_data_wait to work when no data exists yet
* Eo: Fix deref after free. (CID1039898)
* evas/render - fix segfault because of null cow access. (T1252)
diff --git a/README b/README
index 83ef671d29..03085056d3 100644
--- a/README
+++ b/README
@@ -328,15 +328,11 @@ runtime library being refactored to be extremely small.
//BSD 2-Clause license//
-This is a wrapper around Gstreamer and/or Xine and/or external
-pluggable decoder binaries (generic binaries provided by Emotion
-Generic Players or any suitable drop-in replacement). This glues in
-the decoder library, and its output into a smart Evas object 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. Note that using the Xine module may
-effectively make this library GPL v2, so be aware of that before
-turning that on.
+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
+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.
@@ -361,7 +357,8 @@ pointers to be indirect table lookups for increased safety at runtime.
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.
+their behavior as if they were real physical objects. This is now
+disabled by default as it's rarely if ever used by anything.
@@ -407,6 +404,15 @@ This library acts as a porting library for Windows to provide missing
libc calls not in Mingw32 that EFL needs.
+**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
@@ -423,9 +429,9 @@ to C++ libraries like Bullet and our C++ bindings.
Required by default:
- * bullet
* libpng
* libjpeg
+ * openjpeg2
* gstreamer (Ensure all codecs you want are installed.)
* zlib
* luajit (lua 5.1 or 5.2 support optional)
@@ -437,6 +443,7 @@ Required by default:
* fontconfig
* freetype2
* fribidi
+ * harfbuzz
* libpulse
* libsndfile
* libx11
@@ -452,10 +459,9 @@ Required by default:
* libxss
* libxtst
* libxcursor
- * libxp
* 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
+ * giflib/libgif
* util-linux (limbount + libblkid)
* systemd / libudev
* poppler / poppler-cpp
@@ -463,11 +469,7 @@ Required by default:
* libspectre
* librsvg
* openmp (clang needs libomp, while gcc uses libgomp)
-
-You might want webp support so disable fewer loaders and remove webp
-from the disablers with:
-
- -Devas-loaders-disabler=json
+ * libwebp
Wayland support:
diff --git a/cmakeconfig/EolianHelper.cmake.in b/cmakeconfig/EolianHelper.cmake.in
index e79d3c8325..b1ca845bd1 100644
--- a/cmakeconfig/EolianHelper.cmake.in
+++ b/cmakeconfig/EolianHelper.cmake.in
@@ -47,14 +47,14 @@ function(eo_rule_create build_files relative_include_dirs)
${EOLIAN_EO_DIR_WITHOUT_NEWLINE}
)
- # convert relative to absolut
+ # convert relative to absolute
foreach(relative_include_dir ${relative_include_dirs})
list(APPEND include_dirs
${CMAKE_CURRENT_SOURCE_DIR}/${relative_include_dir}
)
endforeach()
- # work with the absolut paths
+ # work with the absolute paths
foreach(include_cmd ${include_dirs})
# build include cmd
string(CONCAT includes "${includes}" " -I${include_cmd}")
diff --git a/confs/freebsd.sh b/confs/freebsd.sh
new file mode 100755
index 0000000000..ac41281bcc
--- /dev/null
+++ b/confs/freebsd.sh
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+meson -Dsystemd=false -Dv4l2=false -Deeze=false \
+ $@ . build
diff --git a/confs/linux-elogind.sh b/confs/linux-elogind.sh
new file mode 100755
index 0000000000..a560793cfd
--- /dev/null
+++ b/confs/linux-elogind.sh
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+meson -Dfb=true -Ddrm=true -Dwl=true -Dsystemd=false -Delogind=true \
+ $@ . build
diff --git a/confs/linux-nowayland-nosystemd.sh b/confs/linux-nowayland-nosystemd.sh
new file mode 100755
index 0000000000..9315fecac4
--- /dev/null
+++ b/confs/linux-nowayland-nosystemd.sh
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+meson -Dfb=true -Dsystemd=false\
+ $@ . build
diff --git a/confs/linux-nowayland.sh b/confs/linux-nowayland.sh
new file mode 100755
index 0000000000..2b080f4c45
--- /dev/null
+++ b/confs/linux-nowayland.sh
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+meson -Dfb=true \
+ $@ . build
diff --git a/confs/linux.sh b/confs/linux.sh
new file mode 100755
index 0000000000..18b1473421
--- /dev/null
+++ b/confs/linux.sh
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+meson -Dfb=true -Ddrm=true -Dwl=true \
+ $@ . build
diff --git a/confs/openbsd.sh b/confs/openbsd.sh
new file mode 100755
index 0000000000..ac41281bcc
--- /dev/null
+++ b/confs/openbsd.sh
@@ -0,0 +1,3 @@
+#!/bin/sh -e
+meson -Dsystemd=false -Dv4l2=false -Deeze=false \
+ $@ . build
diff --git a/confs/osx.sh b/confs/osx.sh
new file mode 100755
index 0000000000..ff546cfd4b
--- /dev/null
+++ b/confs/osx.sh
@@ -0,0 +1,6 @@
+#!/bin/sh -e
+meson -Dsystemd=false -Dv4l2=false -Davahi=false -Deeze=false -Dx11=false \
+-Dopengl=full -Dcocoa=true -Dnls=false \
+-Demotion-loaders-disabler=gstreamer1,libvlc,xine \
+-Decore-imf-loaders-disabler=scim,ibus \
+ $@ . build
diff --git a/confs/windows.sh b/confs/windows.sh
new file mode 100755
index 0000000000..272591270a
--- /dev/null
+++ b/confs/windows.sh
@@ -0,0 +1,6 @@
+#!/bin/sh -e
+meson -Dsystemd=false -Dv4l2=false -Davahi=false -Deeze=false -Dx11=false \
+-Dopengl=none -Dpulseaudio=false -Dlibmount=false -Dfribidi=false \
+-Devas-loaders-disabler=pdf,ps,raw,svg,rsvg,json,tga,tgv \
+-Decore-imf-loaders-disabler=xim,ibus,scim \
+ $@ . build
diff --git a/data/elementary/config/default/base.src.in b/data/elementary/config/default/base.src.in
index c39aeeed70..9a12e52bcb 100644
--- a/data/elementary/config/default/base.src.in
+++ b/data/elementary/config/default/base.src.in
@@ -1,5 +1,5 @@
group "Elm_Config" struct {
- value "config_version" int: 131094;
+ value "config_version" int: 131096;
value "entry_select_allow" uchar: 1;
value "engine" string: "";
value "vsync" uchar: 0;
@@ -3275,7 +3275,54 @@ group "Elm_Config" struct {
value "action" string: "move";
value "params" string: "next";
}
- }
- }
+ }
+ }
+ group "Elm_Config_Bindings_Widget" struct {
+ value "name" string: "Efl.Ui.Textbox";
+ group "key_bindings" list {
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "c";
+ value "action" string: "copy";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "x";
+ value "action" string: "cut";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "v";
+ value "action" string: "paste";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "menu";
+ value "action" string: "menu";
+ value "params" string: "";
+ }
+ }
+ }
}
}
diff --git a/data/elementary/config/mobile/base.src.in b/data/elementary/config/mobile/base.src.in
index 520ba90d73..5c9ba5a333 100644
--- a/data/elementary/config/mobile/base.src.in
+++ b/data/elementary/config/mobile/base.src.in
@@ -1,5 +1,5 @@
group "Elm_Config" struct {
- value "config_version" int: 131094;
+ value "config_version" int: 131096;
value "entry_select_allow" uchar: 1;
value "engine" string: "";
value "vsync" uchar: 0;
@@ -9,6 +9,9 @@ group "Elm_Config" struct {
value "thumbscroll_momentum_threshold" double: 100.0;
value "thumbscroll_flick_distance_tolerance" int: 3000;
value "thumbscroll_friction" double: 0.95;
+ value "thumbscroll_momentum_distance_max" int: 3000;
+ value "thumbscroll_momentum_friction" double: 0.95;
+
value "thumbscroll_momentum_animation_duration_min_limit" double: 0.3;
value "thumbscroll_momentum_animation_duration_max_limit" double: 1.3;
// will not be used
@@ -3261,7 +3264,54 @@ group "Elm_Config" struct {
value "action" string: "move";
value "params" string: "next";
}
- }
- }
+ }
+ }
+ group "Elm_Config_Bindings_Widget" struct {
+ value "name" string: "Efl.Ui.Textbox";
+ group "key_bindings" list {
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "c";
+ value "action" string: "copy";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "x";
+ value "action" string: "cut";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "v";
+ value "action" string: "paste";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "menu";
+ value "action" string: "menu";
+ value "params" string: "";
+ }
+ }
+ }
}
}
diff --git a/data/elementary/config/standard/base.src.in b/data/elementary/config/standard/base.src.in
index 0aa4e8f017..2e868cd9e1 100644
--- a/data/elementary/config/standard/base.src.in
+++ b/data/elementary/config/standard/base.src.in
@@ -1,5 +1,5 @@
group "Elm_Config" struct {
- value "config_version" int: 131094;
+ value "config_version" int: 131096;
value "entry_select_allow" uchar: 1;
value "engine" string: "";
value "vsync" uchar: 0;
@@ -9,6 +9,9 @@ group "Elm_Config" struct {
value "thumbscroll_momentum_threshold" double: 100.0;
value "thumbscroll_flick_distance_tolerance" int: 1000;
value "thumbscroll_friction" double: 1.0;
+ value "thumbscroll_momentum_distance_max" int: 3000;
+ value "thumbscroll_momentum_friction" double: 0.95;
+
value "thumbscroll_momentum_animation_duration_min_limit" double: 0.3;
value "thumbscroll_momentum_animation_duration_max_limit" double: 1.3;
// will not be used
@@ -3258,7 +3261,54 @@ group "Elm_Config" struct {
value "action" string: "move";
value "params" string: "next";
}
- }
- }
+ }
+ }
+ group "Elm_Config_Bindings_Widget" struct {
+ value "name" string: "Efl.Ui.Textbox";
+ group "key_bindings" list {
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "c";
+ value "action" string: "copy";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "x";
+ value "action" string: "cut";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "v";
+ value "action" string: "paste";
+ value "params" string: "";
+ group "modifiers" list {
+ group "Elm_Config_Binding_Modifier" struct {
+ value "mod" string: "Control";
+ value "flag" uchar: 1;
+ }
+ }
+ }
+ group "Elm_Config_Binding_Key" struct {
+ value "context" int: 0;
+ value "key" string: "menu";
+ value "action" string: "menu";
+ value "params" string: "";
+ }
+ }
+ }
}
}
diff --git a/data/elementary/images/animated_webp_image.webp b/data/elementary/images/animated_webp_image.webp
new file mode 100755
index 0000000000..5b44046e2c
--- /dev/null
+++ b/data/elementary/images/animated_webp_image.webp
Binary files differ
diff --git a/data/elementary/images/static_webp_image.webp b/data/elementary/images/static_webp_image.webp
new file mode 100644
index 0000000000..0da983e2ce
--- /dev/null
+++ b/data/elementary/images/static_webp_image.webp
Binary files differ
diff --git a/data/elementary/objects/meson.build b/data/elementary/objects/meson.build
index 92020a7795..9e383c4103 100644
--- a/data/elementary/objects/meson.build
+++ b/data/elementary/objects/meson.build
@@ -1,7 +1,6 @@
edc_files = [
'test.edc',
'test_external.edc',
- 'test_focus_style.edc',
'test_masking.edc',
'test_tab_pager.edc',
'test_tooltip.edc',
diff --git a/data/elementary/objects/test_tab_pager.edc b/data/elementary/objects/test_tab_pager.edc
index 95715713ae..c4ae78b703 100644
--- a/data/elementary/objects/test_tab_pager.edc
+++ b/data/elementary/objects/test_tab_pager.edc
@@ -45,19 +45,12 @@ collections {
desc { "default";
}
}
- rect { "bg";
- scale;
- desc { "default";
- rel.to: "base";
- color: 255 255 255 255;
- }
- }
text { "text";
scale;
desc { "default";
rel.to: "base";
align: 0.5 0.5;
- color: 0 0 0 255;
+ color: 255 255 255 255;
text.size: 20;
}
}
diff --git a/data/elementary/themes/default.edc b/data/elementary/themes/default.edc
index 71630f1512..bb53a0e0b6 100644
--- a/data/elementary/themes/default.edc
+++ b/data/elementary/themes/default.edc
@@ -222,4 +222,5 @@ sounds {
#include "edc/efl/tab_page.edc"
#include "edc/efl/collection.edc"
#include "edc/efl/group_item.edc"
+#include "edc/efl/separator.edc"
}
diff --git a/data/elementary/themes/edc/efl/separator.edc b/data/elementary/themes/edc/efl/separator.edc
new file mode 100644
index 0000000000..5107bfabff
--- /dev/null
+++ b/data/elementary/themes/edc/efl/separator.edc
@@ -0,0 +1,29 @@
+group { name: "efl/separator/horizontal";
+ data.item: "version" "124";
+ images.image: "bevel_dark_in.png" COMP;
+ parts {
+ part { name: "base";
+ description { state: "default" 0.0;
+ min: 2 2;
+ max: 99999 2;
+ rel1.offset: 4 4;
+ rel2.offset: -5 -5;
+ image.normal: "bevel_dark_in.png";
+ image.border: 2 2 2 2;
+ fill.smooth: 0;
+ }
+ }
+ }
+}
+group { name: "efl/separator/vertical";
+ data.item: "version" "124";
+ inherit: "efl/separator/horizontal";
+ parts {
+ part { name: "base";
+ description { state: "default" 0.0;
+ max: 2 99999;
+ }
+ }
+ }
+}
+
diff --git a/data/elementary/themes/edc/efl/spin_button.edc b/data/elementary/themes/edc/efl/spin_button.edc
index 5b257f2a46..674ff69818 100644
--- a/data/elementary/themes/edc/efl/spin_button.edc
+++ b/data/elementary/themes/edc/efl/spin_button.edc
@@ -279,10 +279,6 @@ group { "efl/spin_button/horizontal/inc_button";
images.image: "sym_right_light_normal.png" COMP;
images.image: "sym_right_glow_normal.png" COMP;
images.image: "sym_right_dark_normal.png" COMP;
- script {
- public mouse_down = 0;
- public multi_down = 0;
- }
parts {
part { name: "arrow.image";
scale: 1;
@@ -321,64 +317,31 @@ group { "efl/spin_button/horizontal/inc_button";
}
}
programs {
+ EFL_UI_CLICKABLE_PART_BIND(over)
program { name: "button_press";
signal: "mouse,down,1";
source: "over";
- script {
- if ((get_int(multi_down) == 0) &&
- (get_int(mouse_down) == 0)) {
- set_int(mouse_down, 1);
- run_program(PROGRAM:"button_press2");
- }
- }
- }
- program { name: "button_press2";
- action: SIGNAL_EMIT "efl,action,press" "";
- after: "button_press_anim";
- }
- program { name: "button_press_anim";
action: STATE_SET "pressed" 0.0;
target: "arrow.image";
}
program { name: "button_unpress";
signal: "mouse,up,1";
source: "over";
- script {
- if (get_int(mouse_down) == 1) {
- set_int(mouse_down, 0);
- run_program(PROGRAM:"button_unpress2");
- run_program(PROGRAM:"button_unpress_anim");
- }
- }
- }
- program { name: "button_unpress2";
- action: SIGNAL_EMIT "efl,action,unpress" "";
- }
- program { name: "button_unpress_anim";
action: STATE_SET "default" 0.0;
target: "arrow.image";
}
- program { name: "button_click";
- signal: "mouse,clicked,1";
- source: "over";
- script {
- if (get_int(multi_down) == 0) {
- run_program(PROGRAM:"button_click2");
- }
- }
- }
program { name: "action_unpressed";
signal: "efl,action,unpressed";
source: "efl";
- after: "button_unpress_anim";
+ action: STATE_SET "default" 0.0;
+ target: "arrow.image";
+
}
program { name: "action_pressed";
signal: "efl,action,pressed";
source: "efl";
- after: "button_press_anim";
- }
- program { name: "button_click2";
- action: SIGNAL_EMIT "efl,action,click" "";
+ action: STATE_SET "pressed" 0.0;
+ target: "arrow.image";
}
program { name: "access_pressed";
signal: "efl,state,animation,activated";
@@ -406,22 +369,6 @@ group { "efl/spin_button/horizontal/inc_button";
target: "arrow.image";
target: "disabler";
}
- program {
- name: "multi_down";
- signal: "efl,action,multi,down";
- source: "efl";
- script {
- set_int(multi_down, 1);
- }
- }
- program {
- name: "multi_up";
- signal: "efl,action,multi,up";
- source: "efl";
- script {
- set_int(multi_down, 0);
- }
- }
}
}
diff --git a/data/elementary/themes/edc/efl/tab_bar.edc b/data/elementary/themes/edc/efl/tab_bar.edc
index 8f1a10549e..cd4a51cc55 100644
--- a/data/elementary/themes/edc/efl/tab_bar.edc
+++ b/data/elementary/themes/edc/efl/tab_bar.edc
@@ -2,7 +2,6 @@ group { "efl/tab_bar";
data.item: "version" "123";
images.image: "vgrad_med_lighter.png" COMP;
images.image: "bevel_out.png" COMP;
- images.image: "shine.png" COMP;
images.image: "shadow_square_tiny.png" COMP;
parts {
spacer { "base";
@@ -10,53 +9,12 @@ group { "efl/tab_bar";
desc { "default";
}
}
- image { "shadow";
- nomouse;
- desc { "default";
- rel.to: "base";
- rel1.offset: -3 -2;
- rel2.offset: 2 3;
- image.normal: "shadow_square_tiny.png";
- image.border: 6 6 6 6;
- fill.smooth: 0;
- }
- }
- image { "bg";
- desc { "default";
- rel.to: "base";
- image.normal: "vgrad_med_lighter.png";
- rel1.offset: 0 0;
- rel2.offset: -1 -1;
- fill.smooth: 0;
- }
- }
swallow { "efl.content";
scale;
desc { "default";
rel.to: "base";
}
}
- image { "bevel";
- nomouse;
- desc { "default";
- rel.to: "base";
- image.normal: "bevel_out.png";
- image.border: 1 1 1 1;
- image.middle: 0;
- fill.smooth: 0;
- }
- }
- image { "shine";
- nomouse;
- desc { "default";
- image.normal: "shine.png";
- rel.to: "base";
- rel1.offset: 0 -2;
- rel2.relative: 1.0 0.0;
- rel2.offset: -1 2;
- FIXED_SIZE(69, 5)
- }
- }
}
}
@@ -134,64 +92,20 @@ group { "efl/tab_bar/tab";
desc { "default";
}
desc { "vert";
- rel1.offset: -1 0;
- rel2.offset: 0 -1;
}
}
- image { "shadow1";
+ rect { "shadow1";
nomouse;
desc { "default";
rel.to: "base";
- image.normal: "shadow_inset_bevels.png";
- image.border: 2 2 0 1;
- hid;
- }
- desc { "selected";
- inherit: "default";
+ rel2.offset: 0 0;
+ color: 0 0 0 50;
vis;
}
- }
- image { "shadow2";
- nomouse;
- desc { "default";
- rel.to: "shadow1";
- rel1.offset: 1 0;
- rel2.offset: -2 -1;
- image.normal: "shadow_angled_in_sides.png";
- image.border: 8 8 0 1;
- image.middle: 0;
- hid;
- }
desc { "selected";
inherit: "default";
- vis;
- }
- }
- rect { "bend_clip";
- desc { "default";
hid;
}
- desc { "vert";
- vis;
- }
- }
- image { "bend";
- clip_to: "bend_clip";
- desc { "default";
- min: 2 2;
- max: 99999 2;
- rel2.offset: -1 1;
- rel2.relative: 1.0 0.0;
- image.normal: "bevel_dark_in.png";
- image.border: 2 2 2 2;
- fill.smooth: 0;
- hid;
- fixed: 1 1;
- }
- desc { "selected";
- inherit: "default";
- vis;
- }
}
rect { "icon_clip";
desc { "default";
@@ -384,30 +298,12 @@ group { "efl/tab_bar/tab";
nomouse;
desc { "default";
fixed: 0 1;
- rel1.offset: -3 -7;
- rel1.relative: 0.0 1.0;
- rel1.to: "shadow2";
- rel2.offset: 2 2;
- rel2.to: "shadow2";
- image.normal: "horizontal_separated_bar_small_glow.png";
- image.border: 4 4 4 4;
- fill.smooth: 0;
- hid;
- }
- desc { "selected";
- inherit: "default";
- vis;
- }
- }
- image { "highlight";
- nomouse;
- desc { "default";
- fixed: 0 1;
- rel1.offset: -3 -7;
- rel1.relative: 0.0 1.0;
- rel1.to: "shadow2";
- rel2.offset: 2 2;
- rel2.to: "shadow2";
+ rel1.relative: 0.0 0.0;
+ rel1.to: "shadow1";
+ rel1.offset: -2 -2;
+ rel2.relative: 1.0 0.0;
+ rel2.offset: 0 7;
+ rel2.to: "shadow1";
image.normal: "horizontal_separated_bar_small_glow.png";
image.border: 4 4 4 4;
fill.smooth: 0;
@@ -439,13 +335,11 @@ group { "efl/tab_bar/tab";
signal: "efl,state,horizontal"; source: "efl";
action: STATE_SET "default" 0.0;
target: "base";
- target: "bend_clip";
}
program {
signal: "efl,state,vertical"; source: "efl";
action: STATE_SET "vert" 0.0;
target: "base";
- target: "bend_clip";
}
program { name: "st0";
signal: "load"; source: "";
@@ -459,9 +353,7 @@ group { "efl/tab_bar/tab";
target: "efl.text";
target: "label2";
target: "shadow1";
- target: "shadow2";
target: "bar";
- target: "bend";
}
program {
signal: "efl,state,unselected"; source: "efl";
@@ -469,19 +361,7 @@ group { "efl/tab_bar/tab";
target: "efl.text";
target: "label2";
target: "shadow1";
- target: "shadow2";
target: "bar";
- target: "bend";
- }
- program {
- signal: "efl,highlight,on"; source: "efl";
- action: STATE_SET "selected" 0.0;
- target: "highlight";
- }
- program {
- signal: "efl,highlight,off"; source: "efl";
- action: STATE_SET "default" 0.0;
- target: "highlight";
}
program { name: "st1";
signal: "efl,text,unset"; source: "efl";
@@ -535,7 +415,6 @@ group { "efl/tab_bar/tab";
signal: "efl,state,moving"; source: "efl";
action: STATE_SET "default" 0.0;
target: "shadow1";
- target: "shadow2";
}
program { name: "icon_set,animation";
signal: "efl,state,icon_new,set"; source: "efl";
diff --git a/data/evas/evas.xml b/data/evas/evas.xml
new file mode 100644
index 0000000000..7764c0c05e
--- /dev/null
+++ b/data/evas/evas.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+>------<mime-type type="image/heif">
+>------>-------<comment>HEIF image file</comment>
+>------>-------<glob pattern="*.heif"/>
+>------>-------<glob pattern="*.heic"/>
+>------</mime-type>
+>------<mime-type type="image/avif">
+>------>-------<comment>AVIF image file</comment>
+>------>--------<glob pattern="*.avif"/>
+>------</mime-type>
+</mime-info>
+
diff --git a/data/evas/meson.build b/data/evas/meson.build
new file mode 100644
index 0000000000..ddcc57dcad
--- /dev/null
+++ b/data/evas/meson.build
@@ -0,0 +1,4 @@
+install_data(files('evas.xml'),
+ install_dir : join_paths(dir_data, 'mime', 'packages')
+)
+
diff --git a/data/meson.build b/data/meson.build
index 4e1f68d406..5944dad07c 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -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)
@@ -10,3 +10,4 @@ subdir('edje')
subdir('embryo')
subdir(join_paths('ethumb', 'frames'))
subdir('elementary')
+subdir('evas')
diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index db4e63cdb2..5b0711a390 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -666,7 +666,8 @@ EXCLUDE_PATTERNS = *_private* \
*/efl_*.eo.c \
*/efl_*.eo.h \
*/efl_*.eot.h \
- */Efl_*
+ */Efl_* \
+ */Eo.h
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -680,7 +681,8 @@ EXCLUDE_SYMBOLS = eo_cxx::*
# directories that contain example code fragments that are included (see
# the \include command).
-EXAMPLE_PATH = @top_srcdir@/src/examples
+EXAMPLE_PATH = @top_srcdir@/src/examples \
+ @top_srcdir@/src/tests
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
@@ -1325,18 +1327,6 @@ GENERATE_XML = NO
XML_OUTPUT = xml
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD =
-
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
# dump the program listings (including syntax highlighting
# and cross-referencing information) to the XML output. Note that
diff --git a/doc/eina_examples.dox b/doc/eina_examples.dox
index ad7fcc6b2a..1eecc05408 100644
--- a/doc/eina_examples.dox
+++ b/doc/eina_examples.dox
@@ -49,41 +49,4 @@
* @li @ref tutorial_quadtree_page
* @li @ref tutorial_strbuf
* @li @ref tutorial_ustringshare_page
- *
- * @example eina_accessor_01.c
- * @example eina_array_01.c
- * @example eina_array_02.c
- * @example eina_error_01.c
- * @example eina_file_01.c
- * @example eina_hash_01.c
- * @example eina_hash_02.c
- * @example eina_hash_03.c
- * @example eina_hash_04.c
- * @example eina_hash_05.c
- * @example eina_hash_06.c
- * @example eina_hash_07.c
- * @example eina_hash_08.c
- * @example eina_inarray_01.c
- * @example eina_inarray_02.c
- * @example eina_inarray_03.c
- * @example eina_inlist_01.c
- * @example eina_inlist_02.c
- * @example eina_inlist_03.c
- * @example eina_iterator_01.c
- * @example eina_list_01.c
- * @example eina_list_02.c
- * @example eina_list_03.c
- * @example eina_list_04.c
- * @example eina_log_01.c
- * @example eina_log_02.c
- * @example eina_log_03.c
- * @example eina_magic_01.c
- * @example eina_simple_xml_parser_01.c
- * @example eina_str_01.c
- * @example eina_strbuf_01.c
- * @example eina_stringshare_01.c
- * @example eina_tiler_01.c
- * @example eina_value_01.c
- * @example eina_value_02.c
- * @example eina_value_03.c
*/
diff --git a/doc/elementary_examples.dox b/doc/elementary_examples.dox
index 76aa37e953..b705b1ac26 100644
--- a/doc/elementary_examples.dox
+++ b/doc/elementary_examples.dox
@@ -2750,7 +2750,7 @@
*
* The both states and the item are using the same callback function,
* that will cycle between states and unselect the item. Unseleting
- * is required because it won't call the callback if an user clicks
+ * is required because it won't call the callback if a user clicks
* over an item already selected:
* @dontinclude toolbar_example_02.c
* @skip static
diff --git a/doc/eo_tutorial.dox b/doc/eo_tutorial.dox
index d8e7d7fb8d..1cf0a2ee12 100644
--- a/doc/eo_tutorial.dox
+++ b/doc/eo_tutorial.dox
@@ -120,11 +120,11 @@
*
* @section create_class_h_side How to create a class - H side?
* - If the object is new, establish the public APIs
- * - #define \$(CLASS_NAME) \$(class_name)_class_get(): will be used to access data/inherit from this class...
+ * - \#define \$(CLASS_NAME) \$(class_name)_class_get(): will be used to access data/inherit from this class...
* - const Eo_Class *\$(class_name)_class_get(void) EINA_CONST: declaration of the function that will create the class (not the instance), i.e virtual table...
- * - extern EAPI Eo_Op \$(CLASS_NAME)_BASE_ID: class id that will be essentially used to identify functions set of this class
+ * - EAPI extern Eo_Op \$(CLASS_NAME)_BASE_ID: class id that will be essentially used to identify functions set of this class
* - enum of the function ids of the class in the form \$(CLASS_NAME)_SUB_ID: used to identify the function inside the class; function id is unique per class but (class id, function id) is unique per system..
- * - #define \$(CLASS_NAME)_ID(sub_id) (\$(CLASS_NAME)_BASE_ID + sub_id): formula to calculate the system function id
+ * - \#define \$(CLASS_NAME)_ID(sub_id) (\$(CLASS_NAME)_BASE_ID + sub_id): formula to calculate the system function id
* - define of each function consists of:
* - the name of the function that will be used in eo_do
* - parameters without types
@@ -138,7 +138,7 @@
const Eo_Class *evas_object_line_class_get(void) EINA_CONST;
- extern EAPI Eo_Op EVAS_OBJ_LINE_BASE_ID;
+ EAPI extern Eo_Op EVAS_OBJ_LINE_BASE_ID;
enum
{
diff --git a/doc/ephysics_examples.dox b/doc/ephysics_examples.dox
index cddf3c8bdf..ba509b05f7 100644
--- a/doc/ephysics_examples.dox
+++ b/doc/ephysics_examples.dox
@@ -196,7 +196,7 @@
/**
* @page test_bouncing_ball_c test_bouncing_ball.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-bouncing-ball-c test_bouncing_ball.c
@@ -271,7 +271,7 @@
/**
* @page test_bouncing_text_c test_bouncing_text.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-bouncing_text-c test_bouncing_text.c
@@ -297,7 +297,7 @@
* The purpose of this example is to demonstrate the EPhysics_Camera usage.
*
* The EPhysics_Camera facilitates the usage of scenarios bigger than the
- * viewport, thats because the EPhysics handles the position of objects
+ * viewport, that's because the EPhysics handles the position of objects
* which has control.
*
* @image html camera.png
@@ -323,7 +323,7 @@
* @skip struct _Camera_Data {
* @until };
*
- * @section add-camera Adding a Camera
+ * # Adding a Camera
*
* To move the camera in this example, we'll use an animator.
*
@@ -355,7 +355,7 @@
* @until ephysics_camera_position_set(camera, x, y
* @skipline }
*
- * @section add-uptfloor Updating the floor
+ * # Updating the floor
*
* Here we'll use 2 floor images to give the impression of an infinite ground.
*
@@ -402,7 +402,7 @@
/**
* @page test_camera_c test_camera.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-camera-c test_camera.c
@@ -426,7 +426,7 @@
* usage.
*
* The EPhysics_Camera facilitates the usage of scenarios bigger than the
- * viewport, thats because the EPhysics handles the position of objects
+ * viewport, that's because the EPhysics handles the position of objects
* which has control.
*
* @image html camera_track.png
@@ -454,7 +454,7 @@
* @skip struct _Track_Data {
* @until };
*
- * @section add-camera Adding a Camera
+ * # Adding a Camera
*
* In this example we'll use 3 kinds of tracking, to change this values we'll
* have an Elementary spinner widget and handle it on this function.
@@ -480,7 +480,7 @@
* @skip ephysics_camera_body_track(camera, body
* @until }
*
- * @section add-uptfloor Updating the floor
+ * # Updating the floor
*
* Here we'll use 2 floor images to give the impression of an infinite ground.
*
@@ -536,7 +536,7 @@
/**
* @page test_camera_track_c test_camera_track.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-camera-track-c test_camera_track.c
@@ -583,7 +583,7 @@
* @skip struct _Collision_Data {
* @until };
*
- * @section add-callbacks Adding the Callback
+ * # Adding the Callback
*
* Calling ephysics_body_event_callback_add()
* will register a callback to a type of physics body event.
@@ -632,7 +632,7 @@
/**
* @page test_collision_detection_c test_collision_detection.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-collision_detection-c test_collision_detection.c
@@ -671,7 +671,7 @@
* already covered in
* @ref tutorial_ephysics_bouncing_ball
*
- * @section add-callbacks Adding the balls
+ * # Adding the balls
* @dontinclude test_collision_filter.c
*
* We'll use two arrays (color and size) to distinguish the groups.
@@ -711,7 +711,7 @@
/**
* @page test_collision_filter_c test_collision_filter.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-collision_filter-c test_collision_filter.c
@@ -748,7 +748,7 @@
* covered in
* @ref tutorial_ephysics_bouncing_ball
*
- * @section add-callbacks Adding Callbacks
+ * # Adding Callbacks
* @dontinclude test_delete.c
*
* Calling ephysics_body_event_callback_add()
@@ -800,7 +800,7 @@
/**
* @page test_delete_c test_delete.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-delete-c test_delete.c
@@ -858,7 +858,7 @@
/**
* @page test_constraint_c test_constraint.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-constraint-c test_constraint.c
@@ -932,7 +932,7 @@
/**
* @page test_forces_c test_forces.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-forces-c test_forces.c
@@ -998,7 +998,7 @@
/**
* @page test_growing_balls_c test_growing_balls.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-growing-balls-c test_growing_balls.c
@@ -1069,7 +1069,7 @@
/**
* @page test_no_gravity_c test_no_gravity.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-no-gravity-c test_no_gravity.c
@@ -1372,7 +1372,7 @@
/**
* @page test_rotating_forever_c test_rotating_forever.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-rotating-forever-c test_rotating_forever.c
@@ -1417,7 +1417,7 @@
* @skip struct _Velocity_Data {
* @until };
*
- * @section add-callbacks Adding the Callbacks
+ * # Adding the Callbacks
*
* Calling ephysics_body_event_callback_add()
* will register a callback to a type of physics body event.
@@ -1491,7 +1491,7 @@
/**
* @page test_velocity_c test_velocity.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-velocity-c test_velocity.c
@@ -1588,7 +1588,7 @@
/**
* @page test_shapes_c test_shapes.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-shapes-c test_shapes.c
@@ -1673,7 +1673,7 @@
/**
* @page test_sleeping_threshold_c test_sleeping_threshold.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-sleeping-threshold-c test_sleeping_threshold.c
@@ -1769,7 +1769,7 @@
/**
* @page test_slider_c test_slider.c
*
- * @section ephysics-test-h ephysics_test.h
+ * # ephysics_test.h
* @include ephysics_test.h
*
* @section test-slider-c test_slider.c
diff --git a/doc/index_elm.dox b/doc/index_elm.dox
index 759512f4cf..b85703fd5a 100644
--- a/doc/index_elm.dox
+++ b/doc/index_elm.dox
@@ -44,6 +44,8 @@
*
* @image html img/widget/actionslider/preview-00.png
* @image latex img/widget/actionslider/preview-00.eps
+ * @li @ref Elm_Animation_View
+ *
* @li @ref Elm_Bg
*
* @image html img/widget/bg/preview-00.png
diff --git a/doc/main.dox b/doc/main.dox
index 46f3c4edca..fa47155886 100644
--- a/doc/main.dox
+++ b/doc/main.dox
@@ -23,7 +23,7 @@
* @li @ref eio_main asynchronous input/output
* @li @ref eldbus_main D-Bus integration.
* @li @ref embryo_main embedded script language.
- * @li @ref eo_main generic object system.
+ * @li @ref eolian_main an EO file parser and code generator.
*
* <h3>Graphics libraries</h3>
*
@@ -35,15 +35,6 @@
* @li @ref ethumb_main to generate thumbnail images of files.
* @li @ref evas_main drawing canvas.
*
- * <h3>Operating System specific libraries</h3>
- *
- * @li @ref escape_main playstation3 portability layer.
- * @li @ref evil_main microsoft windows portability layer.
- *
- * <h3>Early stage libraries (BETA testing)</h3>
- *
- * @li @ref eolian_main an EO file parser and code generator.
- *
* If you are looking for methods that do not fit into the above list you can
* see the full <a href="modules.html" />module listing</a>.
*/
@@ -261,3 +252,9 @@
*
* @brief Physics simulation integration and visual effects.
*/
+
+/**
+ * @defgroup Elementary Elementary
+ *
+ * @brief Widget library (See the @ref elementary_main main page).
+ */
diff --git a/elm_intro.h.in b/elm_intro.h.in
index cf489dbe05..52cf1fb388 100644
--- a/elm_intro.h.in
+++ b/elm_intro.h.in
@@ -4,15 +4,15 @@
* @version @VMAJ@.@VMIN@.@VMIC@
* @date 2008-2014
*
- * @section intro What is Elementary?
+ * @section elm_intro What is Elementary?
*
* This is a VERY SIMPLE toolkit. It is not meant for writing extensive desktop
* applications (yet). Small simple ones with simple needs.
*
- * It is meant to make the programmers work almost brainless but give them lots
+ * It is meant to make the programmers work almost brainlessly but give them lots
* of flexibility.
*
- * @li @ref Start - Go here to quickly get started with writing Apps
+ * @li @ref Elm_Start - Go here to quickly get started with writing Apps
*
* @section organization Organization
*
diff --git a/examples_checks.py b/examples_checks.py
index b5494530a7..ef42de80b1 100755
--- a/examples_checks.py
+++ b/examples_checks.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
import os
import subprocess
import json
diff --git a/generate_widget_header.py b/generate_widget_header.py
index c1de110855..3c1045a954 100755
--- a/generate_widget_header.py
+++ b/generate_widget_header.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
import sys
import os
from ete3 import Tree, TreeStyle, AttrFace, faces, NodeStyle
diff --git a/header_checks/meson.build b/header_checks/meson.build
index 3aaf3776c6..2f0205f28a 100644
--- a/header_checks/meson.build
+++ b/header_checks/meson.build
@@ -49,12 +49,10 @@ header_checks = [
'sys/times.h',
'longinfo.h',
'ieeefp.h',
- 'node/uv.h',
'sys/timerfd.h',
'features.h',
'langinfo.h',
'locale.h',
- 'uv.h',
'crt_externs.h'
]
@@ -90,13 +88,13 @@ function_checks = [
['getxattr', ['sys/types.h', 'sys/xattr.h']],
['iconv', ['iconv.h']],
['listxattr', ['sys/types.h', 'sys/xattr.h']],
- ['mallinfo', ['malloc.h']],
['malloc_info', ['malloc.h']],
['malloc_usable_size', ['malloc.h']],
['mkdirat', ['sys/stat.h']],
['mmap', ['sys/mman.h']],
['mtrace', ['mcheck.h']],
['prctl', ['sys/prctl.h']],
+ ['procctl', ['sys/procctl.h']],
['realpath', ['stdlib.h']],
['setxattr', ['sys/types.h', 'sys/xattr.h']],
['siglongjmp', ['setjmp.h']],
@@ -115,6 +113,8 @@ function_checks = [
['dlopen', ['dlfcn.h'], ['dl']],
['dlsym', ['dlfcn.h'], ['dl']],
['lround', ['math.h'], ['m']],
+ ['mallinfo2', ['malloc.h'], ['malloc']],
+ ['mallinfo', ['malloc.h'], ['malloc']],
['shm_open', ['sys/mman.h', 'sys/stat.h', 'fcntl.h'], ['rt']],
#from here on we specify arguments
['splice', ['fcntl.h'], [], '-D_GNU_SOURCE=1'],
@@ -158,6 +158,11 @@ m = cc.find_library('m')
dl = cc.find_library('dl', required: false)
rt = cc.find_library('rt', required: false)
+if sys_sun == true
+ malloc = cc.find_library('malloc', required: true)
+ socket = cc.find_library('socket', required: true)
+endif
+
thread_dep = dependency('threads')
#check for the headers
diff --git a/meson.build b/meson.build
index 5ee96f0f09..a803a197a2 100644
--- a/meson.build
+++ b/meson.build
@@ -1,7 +1,7 @@
project('efl', ['c','cpp'],
- version: '1.23.99',
+ version: '1.25.99',
default_options : ['buildtype=plain', 'cpp_std=c++11'],
- meson_version : '>=0.47'
+ meson_version : '>=0.50'
)
if host_machine.system() == 'darwin'
@@ -10,15 +10,12 @@ endif
pkgconfig = import('pkgconfig')
-test_env = environment()
-test_env.set('EFL_RUN_IN_TREE', '1')
-
version_arr = meson.project_version().split('.')
version_major = version_arr[0]
version_minor = version_arr[1]
version_micro = version_arr[2]
-version_name = 'v-'+version_major + '.' + version_minor
+version_name = 'v-' + version_major + '.' + version_minor
cc = meson.get_compiler('c')
host_os = host_machine.system()
@@ -44,11 +41,13 @@ windows = ['windows', 'cygwin']
bsd = ['bsd', 'freebsd', 'dragonfly', 'netbsd', 'openbsd']
linux = ['linux']
osx = ['darwin']
+sun = ['sunos']
sys_linux = linux.contains(host_machine.system())
sys_bsd = bsd.contains(host_machine.system())
sys_windows = windows.contains(host_machine.system())
sys_osx = osx.contains(host_machine.system())
+sys_sun = sun.contains(host_machine.system())
module_files = []
evas_loader_map = []
@@ -75,50 +74,59 @@ dev_cflags = []
dev_cflags_try = [
'-fvisibility=hidden',
'-Wall',
+ '-Wfloat-compare',
+ '-Wpointer-arith',
'-Wunused-parameter',
'-Wsign-compare',
'-Wno-missing-field-initializers',
]
foreach cf: dev_cflags_try
- if cc.has_argument(cf) == true
+ if cc.has_argument(cf)
dev_cflags += cf
endif
endforeach
-add_global_arguments(dev_cflags, language: 'c')
-add_global_arguments(dev_cflags, language: 'cpp')
-
-
-foreach lang : ['c', 'objc', 'cpp']
- add_global_arguments('-DHAVE_CONFIG_H=1', language: lang)
- add_global_arguments('-D_GNU_SOURCE=1', language: lang)
- add_global_arguments('-DEFL_BETA_API_SUPPORT=1', language: lang)
- add_global_arguments('-DNEED_RUN_IN_TREE=1', language: lang)
- add_global_arguments('-DEFL_BUILD=1', language: lang)
- add_global_arguments('-DELM_INTERNAL_API_ARGESFSDFEFC=1', language: lang)
- if sys_windows == true
- add_global_arguments('-D_POSIX_C_SOURCE=200809L', language: lang)
- if (get_option('windows-version') == 'vista')
- add_global_arguments('-DWINVER=0x060', language: lang)
- add_global_arguments('-D_WIN32_WINNT=0x0600', language: lang)
- elif (get_option('windows-version') == 'win7')
- add_global_arguments('-DWINVER=0x0601', language: lang)
- add_global_arguments('-D_WIN32_WINNT=0x0601', language: lang)
- elif (get_option('windows-version') == 'win8')
- add_global_arguments('-DWINVER=0x0602', language: lang)
- add_global_arguments('-D_WIN32_WINNT=0x0602', language: lang)
- elif (get_option('windows-version') == 'win81')
- add_global_arguments('-DWINVER=0x0603', language: lang)
- add_global_arguments('-D_WIN32_WINNT=0x0603', language: lang)
- elif (get_option('windows-version') == 'win10')
- add_global_arguments('-DWINVER=0x0A00', language: lang)
- add_global_arguments('-D_WIN32_WINNT=0x0A00', language: lang)
- else
- error('Version of targetted Windows incorrect')
- endif
- add_global_arguments('-D__USE_MINGW_ANSI_STDIO', language: lang)
+
+add_project_arguments(dev_cflags, language: 'c')
+add_project_arguments(dev_cflags, language: 'cpp')
+
+
+langs = ['c', 'objc', 'cpp']
+add_project_arguments('-DHAVE_CONFIG_H=1', language: langs)
+add_project_arguments('-D_GNU_SOURCE=1', language: langs)
+add_project_arguments('-DEFL_BETA_API_SUPPORT=1', language: langs)
+add_project_arguments('-DNEED_RUN_IN_TREE=1', language: langs)
+add_project_arguments('-DELM_INTERNAL_API_ARGESFSDFEFC=1', language: langs)
+if sys_windows
+ add_project_arguments('-D_POSIX_C_SOURCE=200809L', language: langs)
+ add_project_arguments('-DDLL_EXPORT=1', language: langs)
+ if get_option('windows-version') == 'vista'
+ add_project_arguments('-DWINVER=0x060', language: langs)
+ add_project_arguments('-D_WIN32_WINNT=0x0600', language: langs)
+ elif get_option('windows-version') == 'win7'
+ add_project_arguments('-DWINVER=0x0601', language: langs)
+ add_project_arguments('-D_WIN32_WINNT=0x0601', language: langs)
+ elif get_option('windows-version') == 'win8'
+ add_project_arguments('-DWINVER=0x0602', language: langs)
+ add_project_arguments('-D_WIN32_WINNT=0x0602', language: langs)
+ elif get_option('windows-version') == 'win81'
+ add_project_arguments('-DWINVER=0x0603', language: langs)
+ add_project_arguments('-D_WIN32_WINNT=0x0603', language: langs)
+ elif get_option('windows-version') == 'win10'
+ add_project_arguments('-DWINVER=0x0A00', language: langs)
+ add_project_arguments('-D_WIN32_WINNT=0x0A00', language: langs)
+ else
+ error('Version of targetted Windows incorrect')
endif
-endforeach
+ add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: langs)
+endif
+
+if sys_sun
+# for getpwuid_r()
+ add_global_arguments('-D_POSIX_PTHREAD_SEMANTICS', language: 'c')
+endif
+
+env = find_program('env', native: true)
config_h = configuration_data()
config_h.set_quoted('MODULE_ARCH', version_name)
@@ -149,7 +157,7 @@ extern char **environ;
void func(void) { printf("%p\n", environ); }
'''
-if cc.compiles(code, args : '-lc', name : 'environ check') == true
+if cc.compiles(code, args : '-lc', name : 'environ check')
config_h.set10('HAVE_ENVIRON', true)
endif
@@ -172,21 +180,21 @@ if get_option('native-arch-optimization')
elif host_machine.cpu_family() == 'arm'
cpu_neon = true
config_h.set10('BUILD_NEON', true)
- add_global_arguments('-mfpu=neon', language: 'c')
- add_global_arguments('-ftree-vectorize', language: 'c')
+ add_project_arguments('-mfpu=neon', language: 'c')
+ add_project_arguments('-ftree-vectorize', language: 'c')
message('ARM build - NEON enabled')
elif host_machine.cpu_family() == 'aarch64'
cpu_neon = true
cpu_neon_intrinsics = true
config_h.set10('BUILD_NEON', true)
config_h.set10('BUILD_NEON_INTRINSICS', true)
- add_global_arguments('-ftree-vectorize', language: 'c')
+ add_project_arguments('-ftree-vectorize', language: 'c')
native_arch_opt_c_args = [ '-ftree-vectorize' ]
message('ARM64 build - NEON + intrinsics enabled')
elif host_machine.cpu_family() == 'ppc' or host_machine.cpu_family() == 'ppc64'
config_h.set10('BUILD_ALTIVEC', true)
- add_global_arguments('-ftree-vectorize', language: 'c')
- add_global_arguments('-maltivec', language: 'c')
+ add_project_arguments('-ftree-vectorize', language: 'c')
+ add_project_arguments('-maltivec', language: 'c')
message('PPC/POWER build - ALTIVEC enabled')
endif
endif
@@ -194,33 +202,33 @@ endif
config_dir = [include_directories('.')]
eolian_include_directories = []
-if sys_linux == true or sys_bsd == true
+if sys_linux or sys_bsd or sys_sun
sys_lib_extension = 'so'
sys_exe_extension = ''
sys_mod_extension = 'so'
-elif sys_windows == true
+elif sys_windows
sys_lib_extension = 'dll'
sys_exe_extension = 'exe'
sys_mod_extension = 'dll'
-elif sys_osx == true
+elif sys_osx
sys_lib_extension = 'dylib'
sys_exe_extension = ''
- sys_mod_extension = 'dylib'
+ sys_mod_extension = 'so'
config_h.set('environ', '(*_NSGetEnviron())')
else
- error('System '+host_machine.system()+' not known')
+ error('System ' + host_machine.system() + ' not known')
endif
if host_os == 'freebsd' or host_os == 'dragonfly'
-# This is necessary. We MUST use OpenSSL in base as bringing in
-# from ports can cause major issues (2 copies of the same library).
+ # This is necessary. We MUST use OpenSSL in base as bringing in from ports
+ # can cause major issues (2 copies of the same library).
crypto = declare_dependency(link_args : [ '-lssl', '-lcrypto'])
config_h.set('HAVE_OPENSSL', '1')
-elif (get_option('crypto') == 'gnutls')
+elif get_option('crypto') == 'gnutls'
# gcrypt does not want to provide a pkg config file so we try the lib
crypto = [dependency('gnutls'), cc.find_library('gcrypt')]
config_h.set('HAVE_GNUTLS', '1')
-elif (get_option('crypto') == 'openssl')
+elif get_option('crypto') == 'openssl'
crypto = dependency('openssl')
config_h.set('HAVE_OPENSSL', '1')
endif
@@ -230,23 +238,22 @@ if get_option('crypto') != ''
config_h.set('HAVE_SIGNATURE', '1')
endif
-config_h.set_quoted('SHARED_LIB_SUFFIX', '.'+sys_lib_extension)
-config_h.set_quoted('MOD_SUFFIX', '.'+sys_mod_extension)
+config_h.set_quoted('SHARED_LIB_SUFFIX', '.' + sys_lib_extension)
+config_h.set_quoted('MOD_SUFFIX', '.' + sys_mod_extension)
if sys_exe_extension == ''
config_h.set_quoted('EXE_SUFFIX', '')
else
- config_h.set_quoted('EXE_SUFFIX', '.'+sys_exe_extension)
+ config_h.set_quoted('EXE_SUFFIX', '.' + sys_exe_extension)
endif
-config_h.set('EFL_BUILD', '1')
-if get_option('tslib') == true
+if get_option('tslib')
config_h.set('HAVE_TSLIB', '1')
endif
subdir('header_checks')
subdir('po')
-if get_option('wl') == true
+if get_option('wl')
subdir(join_paths('src', 'wayland_protocol'))
endif
@@ -255,86 +262,97 @@ ecore_evas_wayland_engine_include_dir = []
evas_static_list = []
luaold_interpreters = [
- ['lua', ['>=5.1.0','<5.3.0']],
- ['lua51', ['>=5.1.0','<5.2.0']],
- ['lua-5.1', ['>=5.1.0','<5.2.0']],
- ['lua5.1', ['>=5.1.0','<5.2.0']],
- ['lua52', ['>=5.2.0','<5.3.0']],
- ['lua-5.2', ['>=5.2.0','<5.3.0']],
- ['lua5.2', ['>=5.2.0','<5.3.0']],
+ ['lua', ['>=5.1.0', '<5.3.0']],
+ ['lua51', ['>=5.1.0', '<5.2.0']],
+ ['lua-5.1', ['>=5.1.0', '<5.2.0']],
+ ['lua5.1', ['>=5.1.0', '<5.2.0']],
+ ['lua52', ['>=5.2.0', '<5.3.0']],
+ ['lua-5.2', ['>=5.2.0', '<5.3.0']],
+ ['lua5.2', ['>=5.2.0', '<5.3.0']],
]
lua_pc_name = ''
+have_elua = get_option('elua')
if get_option('lua-interpreter') == 'lua'
+ config_h.set('ENABLE_LUA_OLD', '1')
foreach l : luaold_interpreters
lua = dependency(l[0], version: l[1], required:false)
lua_pc_name = l[0]
- if lua.found() == true
+ if lua.found()
break
endif
endforeach
+ if not lua.found()
+ error('Lua not found')
+ endif
+ if have_elua
+ message('Using experimental Elua with interpreter support...')
+ endif
else
lua = dependency(get_option('lua-interpreter'))
lua_pc_name = 'luajit'
endif
-if sys_osx == true and get_option('lua-interpreter') == 'luajit'
-# luajit on macro is broken, this means we need to generate our own dependency with our arguments, a library later still needs to link to luajit for the pagesize argument thingy
+if sys_osx and get_option('lua-interpreter') == 'luajit'
+ # luajit on macro is broken, this means we need to generate our own
+ # dependency with our arguments, a library later still needs to link to
+ # luajit for the pagesize argument thingy
lua = declare_dependency(
include_directories: include_directories(lua.get_pkgconfig_variable('includedir')),
- link_args: ['-L'+lua.get_pkgconfig_variable('libdir'), '-l'+lua.get_pkgconfig_variable('libname')]
+ link_args: ['-L' + lua.get_pkgconfig_variable('libdir'), '-l' + lua.get_pkgconfig_variable('libname')]
)
endif
subprojects = [
-# name | option | mod | lib | bin | bench | tests | examples | pkg-config options | name of static libs
-['evil' ,[] , false, true, false, false, false, false, [], []],
-['eina' ,[] , false, true, true, true, true, true, [], []],
-['eolian' ,[] , false, true, true, false, true, false, ['eina'], []],
-['eo' ,[] , false, true, false, true, true, false, ['eina'], []],
-['efl' ,[] , false, true, false, false, true, false, ['eo'], []],
-['emile' ,[] , false, true, false, false, true, true, ['eina', 'efl'], ['lz4', 'rg_etc']],
-['eet' ,[] , false, true, true, false, true, true, ['eina', 'emile', 'efl'], []],
-['ecore' ,[] , false, true, false, false, false, false, ['eina', 'eo', 'efl'], ['buildsystem']],
-['eldbus' ,[] , false, true, true, false, true, true, ['eina', 'eo', 'efl'], []],
-['ecore' ,[] , true, false, false, false, true, true, ['eina', 'eo', 'efl'], []], #ecores modules depend on eldbus
-['ecore_audio' ,['audio'] , false, true, false, false, false, false, ['eina', 'eo'], []],
-['ecore_avahi' ,['avahi'] , false, true, false, false, false, true, ['eina', 'ecore'], []],
-['ecore_con' ,[] , false, true, true, false, true, false, ['eina', 'eo', 'efl', 'ecore'], ['http-parser']],
-['ecore_file' ,[] , false, true, false, false, false, false, ['eina'], []],
-['eeze' ,['eeze'] , true, true, true, false, true, false, ['eina', 'efl'], []],
-['ecore_input' ,[] , false, true, false, false, false, false, ['eina', 'eo'], []],
-['ecore_x' ,['x11'] , false, true, false, false, false, false, ['eina', 'efl'], []],
-['ecore_fb' ,['fb'] , false, true, false, false, false, false, ['eina'], []],
-['ecore_wl2' ,['wl'] , true, true, false, false, true, false, ['eina'], ['libdrm']],
-['ecore_sdl' ,['sdl'] , false, true, false, false, false, false, ['eina'], []],
-['ecore_win32' ,[] , false, true, false, false, false, false, ['eina'], []],
-['ecore_ipc' ,[] , false, true, false, false, false, false, ['eina'], []],
-['ecore_buffer' ,['buffer'] , true, true, true, false, false, false, ['eina'], []],
-['ector' ,[] , false, true, false, false, true, false, ['eina', 'efl'], ['draw', 'triangulator', 'freetype']],
-['elput' ,['drm'] , false, true, false, false, true, false, ['eina', 'eldbus'], []],
-['ecore_drm2' ,['drm'] , false, true, false, false, false, false, ['ecore'], ['libdrm']],
-['ecore_cocoa' ,['cocoa'] , false, true, false, false, false, false, ['eina'], []],
-['evas' ,[] , true, true, false, false, true, true, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']],
-['ecore_input_evas' ,[] , false, true, false, false, false, false, ['eina', 'evas'], []],
-['ecore_evas' ,[] , true, true, true, false, false, false, ['evas', 'ector'], []],
-['ecore_imf' ,[] , true, true, false, false, false, false, ['eina'], []],
-['embryo' ,[] , false, true, true, false, false, false, ['eina', 'efl', 'eo'], []],
-['efreet' ,[] , false, true, false, false, true, false, ['eina', 'efl', 'eo'], []],
-['eio' ,[] , false, true, false, false, true, true, ['eina', 'eet'], []],
-['efreet' ,[] , false, false, true, false, false, false, ['eina', 'efl', 'eo'], []],
-['ecore_imf_evas' ,[] , false, true, false, false, false, false, ['eina', 'efl', 'eo'], []],
-['ephysics' ,['physics'] , false, true, false, false, false, false, ['eina', 'efl', 'eo'], []],
-['edje' ,[] , false, true, true, false, true, true, ['evas', 'eo', 'efl', lua_pc_name], []],
-['emotion' ,[] , true, true, false, false, true, true, ['eina', 'efl', 'eo'], []],
-['ethumb' ,[] , true, true, true, false, false, false, ['eina', 'efl', 'eo'], []],
-['ethumb_client' ,[] , false, true, true, false, false, true, ['eina', 'efl', 'eo', 'ethumb'], []],
-['elementary' ,[] , true, true, true, true, true, true, ['eina', 'efl', 'eo', 'eet', 'evas', 'ecore', 'ecore-evas', 'ecore-file', 'ecore-input', 'edje', 'ethumb-client', 'emotion', 'ecore-imf', 'ecore-con', 'eldbus', 'efreet', 'efreet-mime', 'efreet-trash', 'eio'], ['atspi']],
-['efl_wl' ,['wl'] , false, true, true, false, false, false, ['evas', 'ecore'], []],
-['elua' ,['elua'] , false, true, true, false, true, false, ['eina', 'luajit'], []],
-['ecore_wayland' ,['wl-deprecated'] , false, true, false, false, false, false, ['eina'], []],
-['ecore_drm' ,['drm-deprecated'] , false, true, false, false, false, false, ['eina'], []],
+ # name | option | mod | lib | bin | bench | tests | examples | true if build in efl-one | pkg-config options | name of static libs
+ ['evil' ,[] , false, true, false, false, false, false, true, [], []],
+ ['eina' ,[] , false, true, true, true, true, true, true, [], []],
+ ['eolian' ,[] , false, true, true, false, true, false, false, ['eina'], []],
+ ['eo' ,[] , false, true, false, true, true, false, true, ['eina'], []],
+ ['efl' ,[] , false, true, false, false, true, false, true, ['eo'], []],
+ ['emile' ,[] , false, true, false, false, true, true, true, ['eina', 'efl'], ['lz4', 'rg_etc']],
+ ['eet' ,[] , false, true, true, false, true, true, true, ['eina', 'emile', 'efl'], []],
+ ['ecore' ,[] , false, true, false, false, false, false, true, ['eina', 'eo', 'efl'], ['buildsystem']],
+ ['eldbus' ,[] , false, true, true, false, true, true, true, ['eina', 'eo', 'efl'], []],
+ ['ecore' ,[] , true, false, false, false, true, true, true, ['eina', 'eo', 'efl'], []], #ecores modules depend on eldbus
+ ['ecore_audio' ,['audio'] , false, true, false, false, false, false, true, ['eina', 'eo'], []],
+ ['ecore_avahi' ,['avahi'] , false, true, false, false, false, true, false, ['eina', 'ecore'], []],
+ ['ecore_con' ,[] , false, true, true, false, true, false, true, ['eina', 'eo', 'efl', 'ecore'], ['http-parser']],
+ ['ecore_file' ,[] , false, true, false, false, false, false, true, ['eina'], []],
+ ['eeze' ,['eeze'] , true, true, true, false, true, false, true, ['eina', 'efl'], []],
+ ['ecore_input' ,[] , false, true, false, false, false, false, true, ['eina', 'eo'], []],
+ ['ecore_x' ,['x11'] , false, true, false, false, false, false, true, ['eina', 'efl'], []],
+ ['ecore_fb' ,['fb'] , false, true, false, false, false, false, true, ['eina'], []],
+ ['ecore_wl2' ,['wl'] , true, true, false, false, true, false, true, ['eina'], ['libdrm']],
+ ['ecore_sdl' ,['sdl'] , false, true, false, false, false, false, true, ['eina'], []],
+ ['ecore_win32' ,[] , false, true, false, false, false, false, true, ['eina'], []],
+ ['ecore_ipc' ,[] , false, true, false, false, false, false, true, ['eina'], []],
+ ['ecore_buffer' ,['buffer'] , true, true, true, false, false, false, true, ['eina'], []],
+ ['ector' ,[] , false, true, false, false, true, false, true, ['eina', 'efl'], ['draw', 'triangulator', 'freetype']],
+ ['elput' ,['drm'] , false, true, false, false, true, false, true, ['eina', 'eldbus'], []],
+ ['ecore_drm2' ,['drm'] , false, true, false, false, false, false, true, ['ecore'], ['libdrm']],
+ ['ecore_cocoa' ,['cocoa'] , false, true, false, false, false, false, true, ['eina'], []],
+ ['evas' ,[] , true, true, false, false, true, true, true, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']],
+ ['efreet' ,[] , false, true, false, false, true, false, true, ['eina', 'efl', 'eo'], []],
+ ['ecore_input_evas' ,[] , false, true, false, false, false, false, true, ['eina', 'evas'], []],
+ ['ecore_evas' ,[] , true, true, true, false, false, false, true, ['evas', 'ector'], []],
+ ['ecore_imf' ,[] , true, true, false, false, false, false, true, ['eina'], []],
+ ['embryo' ,[] , false, true, true, false, false, false, true, ['eina', 'efl', 'eo'], []],
+ ['eio' ,[] , false, true, false, false, true, true, true, ['eina', 'eet'], []],
+ ['efreet' ,[] , false, false, true, false, false, false, true, ['eina', 'efl', 'eo'], []],
+ ['ecore_imf_evas' ,[] , false, true, false, false, false, false, true, ['eina', 'efl', 'eo'], []],
+ ['ephysics' ,['physics'] , false, true, false, false, false, false, true, ['eina', 'efl', 'eo'], []],
+ ['edje' ,[] , false, true, true, false, true, true, true, ['evas', 'eo', 'efl', lua_pc_name], []],
+ ['emotion' ,[] , true, true, false, false, true, true, true, ['eina', 'efl', 'eo'], []],
+ ['ethumb' ,[] , true, true, true, false, false, false, true, ['eina', 'efl', 'eo'], []],
+ ['ethumb_client' ,[] , false, true, true, false, false, true, true, ['eina', 'efl', 'eo', 'ethumb'], []],
+ ['elementary' ,[] , true, true, true, true, true, true, true, ['eina', 'efl', 'eo', 'eet', 'evas', 'ecore', 'ecore-evas', 'ecore-file', 'ecore-input', 'edje', 'ethumb-client', 'emotion', 'ecore-imf', 'ecore-con', 'eldbus', 'efreet', 'efreet-mime', 'efreet-trash', 'eio'], ['atspi']],
+ ['efl_canvas_wl' ,['wl'] , false, true, true, false, false, false, true, ['eina', 'efl', 'eo', 'evas', 'ecore'], []],
+ ['elua' ,['elua'] , false, true, true, false, true, false, false, ['eina', lua_pc_name], []],
+ ['ecore_wayland' ,['wl-deprecated'] , false, true, false, false, false, false, false, ['eina'], []],
+ ['ecore_drm' ,['drm-deprecated'] , false, true, false, false, false, false, false, ['eina'], []],
+ ['exactness' ,[] , false, false, true, false, false, false, false, ['eina, evas, eet'], []],
]
# We generate Efl_Config.h and config.h later, they will be available here
@@ -344,95 +362,129 @@ config_dir += include_directories('.')
#the other modules require theire package
subdir(join_paths(local_module, 'eina'))
-#List of dependency objects that might be disabled due to configurations
-#If they are enabled, the object gets overwritten by the library file.
+# List of dependency objects that might be disabled due to configurations
+# If they are enabled, the object gets overwritten by the library file.
ecore_audio = declare_dependency()
test_dirs = []
example_dirs = []
+efl_one_parts = []
+efl_one_deps = []
+efl_one_eo_deps = []
+efl_one_include_dirs = []
+efl_one_sub_dirs = []
tmp_empty = declare_dependency()
foreach package : subprojects
package_name = package[0]
package_version_name = '-'.join(package_name.split('_')) + '-' + version_major
- package_c_args = [
- '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
- '-DNEED_RUN_IN_TREE=1',
- ]
automatic_pkgfile = true
if package[1].length() == 0 or get_option(package[1][0])
- config_h.set('HAVE_'+package_name.to_upper().underscorify(), '1')
+ config_h.set('HAVE_' + package_name.to_upper().underscorify(), '1')
dir_package_include = join_paths(dir_include, package_version_name)
dir_package_modules = join_paths(dir_lib, package_name, 'modules')
- #ensure that we really dont copy the eo file targets from a previous library
- #Those are the variables that can be used to reflect the libraries speical handlings
- # -> at the end is used to indicate where to find this variable outside of this for loop
+ # ensure that we really dont copy the eo file targets from a previous
+ # library Those are the variables that can be used to reflect the libraries
+ # speical handlings -> at the end is used to indicate where to find this
+ # variable outside of this for loop
- #public eo and eot files - which probebly have to be used later for bindings
+ # public eo and eot files - which probebly have to be used later for bindings
pub_eo_files = [] # -> package_name + '_eo_files'
pub_eo_types_files = [] # -> package_name + '_eot_files'
- #All subdirs where eo files that are listed in the pub_* variables can be found
- #For every element != '' a variable called package_name + '_' + subir + '_eot_files' and package_name + '_' + subir + '_eo_files' must exist.
+ # All subdirs where eo files that are listed in the pub_* variables can be
+ # found
+ # For every element != '' a variable called package_name + '_' + subir + '_eot_files' and package_name + '_' + subir + '_eo_files' must exist.
package_eo_subdirs = [''] # -> package_name + '_eo_subdirs'
- #All subdirs that should be included in order to include every requried header
+ # All subdirs that should be included in order to include every requried header
package_header_subdirs = [] # -> package_name + '_include_subdirs'
- #eo file targets, this list of targets can be used to ensure the files are created before accessed
+ # eo file targets, this list of targets can be used to ensure the files are created before accessed
pub_eo_file_target = []
- #private eo files target - never use this :)
+ # private eo files target - never use this :)
priv_eo_file_target = []
- #use this variable to store custom variables in that should be placed in the .pc file
+ # use this variable to store custom variables in that should be placed in the .pc file
package_pc_variables = []
- foreach static_lib : package[9]
+ foreach static_lib : package[10]
if get_variable(static_lib, tmp_empty) == tmp_empty
subdir(join_paths('src', 'static_libs', static_lib))
endif
endforeach
- if (package[3])
+ #package_c_args definition for lib and module
+ package_c_args = [
+ '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
+ '-DNEED_RUN_IN_TREE=1',
+ '-DEFL_BUILD=1',
+ ]
+ if package[3]
subdir(join_paths(local_lib, package_name))
set_variable(package_name + '_eo_files', pub_eo_files)
set_variable(package_name + '_eot_files', pub_eo_types_files)
set_variable(package_name + '_header_subdirs', package_header_subdirs)
set_variable(package_name + '_eo_subdirs', package_eo_subdirs)
+ if (package[8] and get_option('efl-one'))
+ src = get_variable(package_name+'_src')
+ external_deps = get_variable(package_name+'_ext_deps')
+ efl_one_include_dirs += [include_directories('.'), include_directories(join_paths(local_lib, package_name))]
+
+ foreach subdirs : package_eo_subdirs
+ efl_one_include_dirs += include_directories(join_paths(local_lib, package_name))
+ endforeach
+
+ tmp = static_library('efl_one_part_'+package_name,
+ src, pub_eo_file_target, priv_eo_file_target,
+ include_directories: efl_one_include_dirs,
+ dependencies: external_deps + efl_one_eo_deps,
+ c_args : package_c_args,
+ )
+ # dependency for all the .eo file targets
+ efl_one_eo_deps += declare_dependency(
+ sources: pub_eo_file_target + priv_eo_file_target, #this here *needs* to be public and private, because our binaries and modules do depend on internal headers
+ )
+ efl_one_deps += external_deps
+ efl_one_parts += tmp
+ endif
endif
- if (package[2])
- subdir(join_paths(local_module, package_name))
- endif
- if (package[4])
- subdir(join_paths(local_bin, package_name))
- endif
- if (package[5])
- subdir(join_paths(local_benchmark, package_name))
+ #special case for eolian, this is never efl-one, but will be required in the library
+ if (package_name == 'eolian')
+ package_c_args = [
+ '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
+ '-DNEED_RUN_IN_TREE=1',
+ ]
+ if (package[4])
+ subdir(join_paths(local_bin, package_name))
+ endif
endif
- if (package[6])
+ if package[6]
test_dirs += [package_name]
endif
- if (package[7])
+ if package[7]
example_dirs += [package_name]
endif
- set_variable('build_'+package_name.underscorify(), true)
+ set_variable('build_' + package_name.underscorify(), true)
# generate automatic pc files for libraries
- if automatic_pkgfile == true and package[3]
- tmp_lib = get_variable(package_name+'_lib')
- tmp_deps = get_variable(package_name+'_deps')
- tmp_pub_deps = get_variable(package_name+'_pub_deps')
+ if automatic_pkgfile and package[3]
+ tmp_lib = get_variable(package_name + '_lib')
+ tmp_deps = get_variable(package_name + '_deps')
+ tmp_pub_deps = get_variable(package_name + '_pub_deps')
tmp_package_subdirs = []
foreach subdir : package_header_subdirs
tmp_package_subdirs += join_paths(package_version_name, subdir)
endforeach
-
+ if (package[8] and get_option('efl-one'))
+ efl_one_sub_dirs += [package_version_name] + tmp_package_subdirs
+ endif
pkgconfig.generate(tmp_lib,
name : '-'.join(package_name.split('_')),
subdirs : [package_version_name] + tmp_package_subdirs,
version : version_major + '.' + version_minor + '.' + version_micro,
libraries : tmp_pub_deps,
- requires : package[8],
+ requires : package[9],
variables : package_pc_variables
)
if package_name == 'ethumb_client'
@@ -441,23 +493,81 @@ foreach package : subprojects
subdirs : [package_version_name] + tmp_package_subdirs,
version : version_major + '.' + version_minor + '.' + version_micro,
libraries : tmp_pub_deps,
- requires : package[8],
+ requires : package[9],
)
endif
endif
else
message(package_name+' disabled!')
endif
+endforeach
+
+if (get_option('efl-one'))
+ #building efl-one
+ efl_one_lib = shared_library('efl-one',
+ link_whole : efl_one_parts,
+ install : true,
+ version : meson.project_version(),
+ )
+
+ efl_one = declare_dependency(
+ link_with: efl_one_lib,
+ include_directories : efl_one_include_dirs,
+ dependencies : [thread_dep, intl] + efl_one_eo_deps,
+ version: meson.project_version()
+ )
+ pkgconfig.generate(
+ name : 'efl-one',
+ subdirs : efl_one_sub_dirs,
+ description: 'Configureation for efl in one big fat .so',
+ libraries : [efl_one] + eina_pc_deps, #eina is a special case here which drags in m dl & threads
+ )
+
+ #overwrite all the dependencies of subprojects with efl-one, in order to link the modules and binaries to the correct .so
+ foreach package : subprojects
+ package_name = package[0]
+ if package[1].length() == 0 or get_option(package[1][0])
+ if (package[3])
+ if (package[8] and get_option('efl-one'))
+ set_variable(package_name, efl_one)
+ endif
+ endif
+ endif
+ endforeach
+endif
+
+#delayed build of bin, modules, and benchmarks
+foreach package : subprojects
+ package_name = package[0]
+ if package[1].length() == 0 or get_option(package[1][0])
+ dir_package_include = join_paths(dir_include, package_version_name)
+ dir_package_modules = join_paths(dir_lib, package_name, 'modules')
+ package_c_args = [
+ '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
+ '-DNEED_RUN_IN_TREE=1',
+ '-DEFL_BUILD=1',
+ ]
+ if (package[2])
+ subdir(join_paths(local_module, package_name))
+ endif
+ package_c_args = [
+ '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
+ '-DNEED_RUN_IN_TREE=1',
+ ]
+ if (package[4] and package_name != 'eolian')
+ subdir(join_paths(local_bin, package_name))
+ endif
+ if (package[5])
+ subdir(join_paths(local_benchmark, package_name))
+ endif
+ endif
endforeach
#build this later, as the debug services are depending on ecore
subdir(join_paths('src', 'bin', 'efl'))
subdir(join_paths('src', 'generic', 'evas'))
-if sys_windows == false
- subdir(join_paths('src', 'generic', 'emotion'))
-endif
subdir('cmakeconfig')
subdir(join_paths('src', 'bindings'))
subdir(join_paths('src', 'edje_external'))
@@ -465,15 +575,35 @@ subdir(join_paths('data'))
if get_option('build-tests')
check = dependency('check')
+
+ if (check.version() == '0.15.1')
+ error('There is a bug in check@0.15.1 which does not allow efl to be compiled with it. Please downgrade / upgrade or disable tests')
+ endif
+
+ test_env = environment()
+ test_env.set('EFL_RUN_IN_TREE', '1')
+
+ if get_option('b_sanitize') == 'address'
+ test_env.set('ASAN_OPTIONS', 'detect_leaks=0:detect_odr_violation=0')
+ endif
+
subdir(join_paths('src', 'tests'))
foreach test : test_dirs
- subdir(join_paths(local_tests, test))
+ package_c_args = [
+ '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, test)+'"',
+ '-DNEED_RUN_IN_TREE=1',
+ ]
+ subdir(join_paths(local_tests, test))
endforeach
endif
if get_option('build-examples')
foreach example : example_dirs
- subdir(join_paths(local_examples, example))
+ package_c_args = [
+ '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, example)+'"',
+ '-DNEED_RUN_IN_TREE=1',
+ ]
+ subdir(join_paths(local_examples, example))
endforeach
endif
@@ -504,7 +634,7 @@ efl_config_h.set('EFL_VERSION_MINOR', version_minor)
efl_config_h.set('EFL_VERSION_MICRO', version_micro)
efl_config_h.set('EFL_BUILD_ID', get_option('build-id'))
-#FIXME placeholder
+# FIXME placeholder
efl_config_h.set('EFL_API_LEGACY_DEF', '#define EFL_API_LEGACY_DEF "FIXME NOT IMPLEMENTED"')
configure_file(
@@ -515,7 +645,7 @@ configure_file(
configure_file(
input: join_paths('src','lib', 'efl', 'Efl_Config.h.in'),
output: 'Efl_Config.h',
- install_dir : join_paths(dir_include,'efl-'+version_major),
+ install_dir : join_paths(dir_include,'eina-'+version_major),
configuration: efl_config_h
)
@@ -530,15 +660,13 @@ subdir(join_paths('systemd-services'))
subdir(join_paths('dbus-services'))
#output the three new efl-* .pc files
-efl_20_pc_files = [
- ['efl-ui', ['elementary']],
- ['efl-core', ['ecore', 'efl', 'emile']],
- ['efl-net', ['ecore', 'ecore-con', 'emile']],
-]
+efl_20_pc_files = {
+ 'efl-ui' : ['elementary'],
+ 'efl-core' : ['ecore', 'efl', 'emile'],
+ 'efl-net' : ['ecore', 'ecore-con', 'emile'],
+}
-foreach pc_file : efl_20_pc_files
- name = pc_file[0]
- libraries = pc_file[1]
+foreach name, libraries : efl_20_pc_files
pkgconfig.generate(
name : '-'.join(name.split('_')),
description: name+' configutation file',
diff --git a/meson_options.txt b/meson_options.txt
index 13124c1b76..37fb67774e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -6,7 +6,7 @@ option('audio',
option('avahi',
type : 'boolean',
- value : true,
+ value : false,
description : 'Avahi (zeroconf) support in efl'
)
@@ -67,7 +67,7 @@ option('eeze',
option('opengl',
type : 'combo',
choices : ['full', 'es-egl', 'none'],
- value : 'es-egl',
+ value : 'full',
description : 'Type of OpenGL support in efl'
)
@@ -109,7 +109,7 @@ option('crypto',
option('glib',
type : 'boolean',
- value : false,
+ value : true,
description : 'Main loop integration for glib in efl'
)
@@ -122,13 +122,13 @@ option('g-mainloop',
option('gstreamer',
type : 'boolean',
value : true,
- description : 'GStreamer 1.0+ support in efl'
+ description : 'GStreamer support in efl'
)
option('systemd',
type : 'boolean',
value : true,
- description : 'Systemd support in efl'
+ description : 'Systemd and Elogind support at runtime in efl'
)
option('pulseaudio',
@@ -189,29 +189,15 @@ 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'],
- value : ['webp', 'json']
+ 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 : ['avif', 'heif']
)
option('ecore-imf-loaders-disabler',
type : 'array',
description : 'List of input methods to disable in efl',
- choices : ['xim', 'ibus', 'scim'],
- value : ['ibus']
-)
-
-option('emotion-loaders-disabler',
- type : 'array',
- description : 'List of video back-ends to disable in efl',
- choices : ['gstreamer1', 'libvlc', 'xine'],
- value : ['libvlc', 'xine']
-)
-
-option('emotion-generic-loaders-disabler',
- type : 'array',
- description : 'List of out-of-process generic binary video loaders to disable in efl',
- choices : ['vlc'],
- value : ['vlc']
+ choices : ['', 'xim', 'ibus', 'scim'],
+ value : ['scim']
)
option('harfbuzz',
@@ -265,7 +251,7 @@ option('libmount',
option('vnc-server',
type : 'boolean',
value : false,
- description : 'VNS server support in efl for multiseat testing'
+ description : 'VNC server support in efl for multiseat testing'
)
option('v4l2',
@@ -276,7 +262,7 @@ option('v4l2',
option('elua',
type : 'boolean',
- value : true,
+ value : false,
description : 'Lua launcher binary support in efl'
)
@@ -300,8 +286,8 @@ option('nls',
option('bindings',
type : 'array',
- choices : ['luajit', 'cxx', 'mono'],
- value : ['luajit', 'cxx'],
+ choices : ['', 'lua', 'cxx', 'mono'],
+ value : ['cxx'],
description : 'Which auto-generated language bindings for efl to enable',
)
@@ -311,6 +297,18 @@ option('mono-beta',
description: 'Mono/C# @beta Eo methods enabled in the efl'
)
+option('dotnet-stylecop',
+ type: 'string',
+ description: 'Dotnet StyleCop checks. Use * for all, or use comma listed: -Ddotnet-stylecop=ca1062,CA1032, sa0001, SA0002, cA2225'
+)
+
+option('dotnet-stylecop-severity',
+ type: 'combo',
+ choices: ['Warning', 'Error'],
+ value: 'Warning',
+ description: 'Dotnet StyleCop checks cause compilation errors or just warnings'
+)
+
option('mono-examples-dir',
type: 'string',
value: '',
@@ -336,12 +334,6 @@ option('native-arch-optimization',
description: 'Enable architecture native optimizations in efl'
)
-option('elogind',
- type : 'boolean',
- value : false,
- description : 'elogind support in efl (subset of systemd)'
-)
-
option('windows-version',
type : 'combo',
choices : ['vista', 'win7', 'win8', 'win81', 'win10'],
@@ -363,7 +355,7 @@ option('elementary-base-dir',
option('install-eo-files',
type: 'boolean',
- value: false,
+ value: true,
description : 'Install any eo file'
)
@@ -372,3 +364,9 @@ option('mono-friend-assemblies',
value : [],
description : 'List of friend assemblies that can access efl_mono assembly\'s internal types and members.'
)
+
+option('efl-one',
+ type: 'boolean',
+ value : false,
+ description : 'Build special set of .so´s as a single .so'
+)
diff --git a/old/ChangeLog.eet b/old/ChangeLog.eet
index 1f29bdac31..e90308bd77 100644
--- a/old/ChangeLog.eet
+++ b/old/ChangeLog.eet
@@ -544,7 +544,7 @@
2011-11-16 Carsten Haitzler (The Rasterman)
* JPEG encode and decode in eet now uses ISLOW (not IFAST) due to
- noticable quality losses in the chase for speed. It will use
+ noticeable quality losses in the chase for speed. It will use
IFAST for quality less than 60 when encoding
2011-12-02 Carsten Haitzler (The Rasterman)
diff --git a/old/ChangeLog.evas b/old/ChangeLog.evas
index 3bc62e3d22..0b9a353652 100644
--- a/old/ChangeLog.evas
+++ b/old/ChangeLog.evas
@@ -296,7 +296,7 @@
2011-05-04 Carsten Haitzler (The Rasterman)
- * Improved table layout for homogenous mode to handle not column
+ * Improved table layout for homogeneous mode to handle not column
or row multiple sized table better.
2011-05-04 Jiyoun Park
@@ -502,7 +502,7 @@
2011-11-16 Carsten Haitzler (The Rasterman)
* JPEG encode and decode in eet now uses ISLOW (not IFAST) due to
- noticable quality losses in the chase for speed. It will use
+ noticeable quality losses in the chase for speed. It will use
IFAST for quality less than 60 when encoding
2011-11-20 Carsten Haitzler (The Rasterman)
@@ -808,7 +808,7 @@
2012-06-14 Cedric Bail
- * Cache convertion from Evas_Map to RGBA_Map.
+ * Cache conversion from Evas_Map to RGBA_Map.
2012-06-15 Vincent Torri
diff --git a/old/NEWS.evas b/old/NEWS.evas
index 3271bbe905..cdb93ca51a 100644
--- a/old/NEWS.evas
+++ b/old/NEWS.evas
@@ -60,7 +60,7 @@ Improvements:
* Reduce cost of propagating event by limiting the object we explore by using a bouncing box.
* Don't wake up prepare thread if there is nothing to prepare.
* Limit the updated region to fit in CPU cache for Pipe rendering.
- * Cache convertion from Evas_Map to RGBA_Map.
+ * Cache conversion from Evas_Map to RGBA_Map.
* evas_object_smart_members_get() now returns NULL on non-smart objects.
* Pipeline rendering use prepare stage more extensively.
* Properly warn when user try to link object from different canvas.
@@ -240,7 +240,7 @@ Improvements:
* speed and memory usage of textblock
* cache handler to also use file size, mode and sub-second timestamp
* textblock to re-layout only paragraphs that have changed
- * homogenous table layout alignment and sizing
+ * homogeneous table layout alignment and sizing
* textblock linebreaking by using liblinebreak
* image loader to drop out instantly if image file is a directory
* object allocation to use mempools
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4c906e905b..fa4061f352 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,184 +1,2208 @@
-src/lib/ecore/ecore_getopt.c
-src/lib/efreet/efreet_base.c
-src/bin/elementary/config.c
-src/bin/elementary/quicklaunch.c
-src/bin/elementary/run.c
-src/bin/elementary/test_actionslider.c
-src/bin/elementary/test_anim.c
-src/bin/elementary/test_bg.c
-src/bin/elementary/test_box.c
-src/bin/elementary/test_bubble.c
-src/bin/elementary/test_button.c
-src/bin/elementary/test.c
-src/bin/elementary/test_calendar.c
-src/bin/elementary/test_check.c
-src/bin/elementary/test_clock.c
-src/bin/elementary/test_colorselector.c
-src/bin/elementary/test_conform.c
-src/bin/elementary/test_ctxpopup.c
-src/bin/elementary/test_cursor.c
-src/bin/elementary/test_diskselector.c
-src/bin/elementary/test_entry.c
-src/bin/elementary/test_fileselector_button.c
-src/bin/elementary/test_fileselector.c
-src/bin/elementary/test_fileselector_entry.c
-src/bin/elementary/test_flip.c
-src/bin/elementary/test_flipselector.c
-src/bin/elementary/test_floating.c
-src/bin/elementary/test_focus.c
-src/bin/elementary/test_focus_custom_chain.c
-src/bin/elementary/test_focus_style.c
-src/bin/elementary/test_gengrid.c
-src/bin/elementary/test_genlist.c
-src/bin/elementary/test_hover.c
-src/bin/elementary/test_hoversel.c
-src/bin/elementary/test_icon.c
-src/bin/elementary/test_icon_desktops.c
-src/bin/elementary/test_index.c
-src/bin/elementary/test_inwin.c
-src/bin/elementary/test_label.c
-src/bin/elementary/test_launcher.c
-src/bin/elementary/test_layout.c
-src/bin/elementary/test_list.c
-src/bin/elementary/test_map.c
-src/bin/elementary/test_menu.c
-src/bin/elementary/test_multi.c
-src/bin/elementary/test_notify.c
-src/bin/elementary/test_panel.c
-src/bin/elementary/test_panes.c
-src/bin/elementary/test_photo.c
-src/bin/elementary/test_photocam.c
-src/bin/elementary/test_progressbar.c
-src/bin/elementary/test_ui_progressbar.c
-src/bin/elementary/test_radio.c
-src/bin/elementary/test_scaling.c
-src/bin/elementary/test_scroller.c
-src/bin/elementary/test_separator.c
-src/bin/elementary/test_slider.c
-src/bin/elementary/test_ui_slider_interval.c
-src/bin/elementary/test_slideshow.c
-src/bin/elementary/test_spinner.c
-src/bin/elementary/test_store.c
-src/bin/elementary/test_table.c
-src/bin/elementary/test_thumb.c
-src/bin/elementary/test_toolbar.c
-src/bin/elementary/test_tooltip.c
-src/bin/elementary/test_transit.c
-src/bin/elementary/test_weather.c
-src/bin/elementary/test_win_state.c
-src/edje_external/elementary/elm_bubble.c
+src/edje_external/emotion/emotion.c
+src/edje_external/elementary/elm_slideshow.c
src/edje_external/elementary/elm_button.c
-src/edje_external/elementary/elm.c
+src/edje_external/elementary/elm_web.c
+src/edje_external/elementary/elm_video.c
+src/edje_external/elementary/elm_slider.c
+src/edje_external/elementary/elm_progressbar.c
src/edje_external/elementary/elm_check.c
-src/edje_external/elementary/elm_clock.c
-src/edje_external/elementary/elm_fileselector_button.c
+src/edje_external/elementary/elm_icon.c
src/edje_external/elementary/elm_fileselector.c
-src/edje_external/elementary/elm_fileselector_entry.c
-src/edje_external/elementary/elm_gengrid.c
+src/edje_external/elementary/elm_toolbar.c
+src/edje_external/elementary/elm_actionslider.c
+src/edje_external/elementary/elm_thumb.c
+src/edje_external/elementary/elm_multibuttonentry.c
+src/edje_external/elementary/elm.c
+src/edje_external/elementary/elm_clock.c
+src/edje_external/elementary/elm_scroller.c
+src/edje_external/elementary/elm_entry.c
+src/edje_external/elementary/elm_combobox.c
src/edje_external/elementary/elm_genlist.c
-src/edje_external/elementary/elm_hoversel.c
-src/edje_external/elementary/elm_icon.c
-src/edje_external/elementary/elm_label.c
-src/edje_external/elementary/elm_list.c
-src/edje_external/elementary/elm_map.c
-src/edje_external/elementary/elm_notify.c
+src/edje_external/elementary/elm_gengrid.c
+src/edje_external/elementary/elm_spinner.c
src/edje_external/elementary/elm_panes.c
+src/edje_external/elementary/elm_fileselector_button.c
+src/edje_external/elementary/elm_calendar.c
+src/edje_external/elementary/elm_segment_control.c
+src/edje_external/elementary/elm_frame.c
+src/edje_external/elementary/elm_notify.c
+src/edje_external/elementary/elm_bubble.c
src/edje_external/elementary/elm_photocam.c
-src/edje_external/elementary/elm_progressbar.c
src/edje_external/elementary/elm_radio.c
-src/edje_external/elementary/elm_scroller.c
-src/edje_external/elementary/elm_slider.c
-src/edje_external/elementary/elm_slideshow.c
-src/edje_external/elementary/elm_spinner.c
-src/edje_external/elementary/elm_thumb.c
-src/edje_external/elementary/elm_toolbar.c
-src/lib/elementary/elc_ctxpopup.c
-src/lib/elementary/elc_fileselector.c
-src/lib/elementary/elc_fileselector_button.c
-src/lib/elementary/elc_fileselector_entry.c
+src/edje_external/elementary/elm_label.c
+src/edje_external/elementary/elm_bg.c
+src/edje_external/elementary/elm_hoversel.c
+src/edje_external/elementary/elm_map.c
+src/edje_external/elementary/elm_index.c
+src/edje_external/elementary/elm_fileselector_entry.c
+src/edje_external/elementary/elm_list.c
+src/edje_external/elementary/elm_naviframe.c
+src/tests/eolian_js/eolian_js_test_constructor_method_impl.c
+src/tests/eolian_js/eolian_js_test_test_object_impl.c
+src/tests/efl_mono/dummy_child.c
+src/tests/efl_mono/dummy_hidden_object.c
+src/tests/efl_mono/dummy_numberwrapper.c
+src/tests/efl_mono/dummy_interfaces.c
+src/tests/efl_mono/dummy_inherit_helper.c
+src/tests/efl_mono/dummy_constructible_object.c
+src/tests/efl_mono/dummy_test_object.c
+src/tests/efl_mono/dummy_part_holder.c
+src/tests/efl_mono/dummy_event_manager.c
+src/tests/elput/elput_suite.c
+src/tests/elput/elput_test_elput.c
+src/tests/ecore_con/ecore_con_suite.c
+src/tests/ecore_con/ecore_con_test_efl_net_ip_address.c
+src/tests/ecore_con/ecore_con_test_ecore_con.c
+src/tests/ecore_con/ecore_con_test_ecore_con_url.c
+src/tests/ecore_con/ecore_con_test_ecore_con_eet.c
+src/tests/edje/edje_test_features.c
+src/tests/edje/edje_test_signal.c
+src/tests/edje/edje_test_edje.c
+src/tests/edje/edje_test_text.c
+src/tests/edje/edje_suite.c
+src/tests/edje/efl_test_layout3.c
+src/tests/edje/efl_test_layout.c
+src/tests/edje/efl_test_layout2.c
+src/tests/edje/edje_test_container.c
+src/tests/edje/edje_test_swallow.c
+src/tests/eolian/eolian_generation.c
+src/tests/eolian/eolian_generated_future.c
+src/tests/eolian/data/class_simple_ref.c
+src/tests/eolian/data/function_as_argument_ref.c
+src/tests/eolian/data/object_impl_add_ref.c
+src/tests/eolian/data/override_ref.c
+src/tests/eolian/data/owning_ref.c
+src/tests/eolian/data/object_impl_ref.c
+src/tests/eolian/data/function_as_argument_impl_ref.c
+src/tests/eolian/eolian_parsing.c
+src/tests/eolian/eolian_static.c
+src/tests/eolian/eolian_aux.c
+src/tests/eolian/eolian_suite.c
+src/tests/eina_cxx/simple.c
+src/tests/ecore/ecore_test_ecore_fb.c
+src/tests/ecore/ecore_test_ecore_thread_eina_thread_queue.c
+src/tests/ecore/efl_app_test_loop_fd.c
+src/tests/ecore/ecore_test_ecore_audio.c
+src/tests/ecore/ecore_test_ecore_evas_selection.c
+src/tests/ecore/efl_app_test_loop.c
+src/tests/ecore/efl_app_test_promise.c
+src/tests/ecore/ecore_test_poller.c
+src/tests/ecore/ecore_test_ecore.c
+src/tests/ecore/efl_app_test_cml.c
+src/tests/ecore/ecore_test_args.c
+src/tests/ecore/ecore_test_animator.c
+src/tests/ecore/ecore_test_ecore_evas.c
+src/tests/ecore/ecore_test_ecore_imf.c
+src/tests/ecore/efl_app_test_loop_timer.c
+src/tests/ecore/ecore_test_idle.c
+src/tests/ecore/ecore_test_ecore_input.c
+src/tests/ecore/ecore_test_job.c
+src/tests/ecore/ecore_test_ecore_file.c
+src/tests/ecore/ecore_test_timer.c
+src/tests/ecore/ecore_suite.c
+src/tests/ecore/ecore_test_pipe.c
+src/tests/ecore/efl_app_test_env.c
+src/tests/ecore/efl_app_suite.c
+src/tests/ecore/ecore_test_ecore_x.c
+src/tests/eo/composite_objects/composite_objects_main.c
+src/tests/eo/composite_objects/composite_objects_comp.c
+src/tests/eo/composite_objects/composite_objects_simple.c
+src/tests/eo/signals/signals_simple.c
+src/tests/eo/signals/signals_main.c
+src/tests/eo/constructors/constructors_simple7.c
+src/tests/eo/constructors/constructors_simple.c
+src/tests/eo/constructors/constructors_simple4.c
+src/tests/eo/constructors/constructors_simple6.c
+src/tests/eo/constructors/constructors_mixin.c
+src/tests/eo/constructors/constructors_main.c
+src/tests/eo/constructors/constructors_simple5.c
+src/tests/eo/constructors/constructors_simple2.c
+src/tests/eo/constructors/constructors_simple3.c
+src/tests/eo/children/children_simple.c
+src/tests/eo/children/children_main.c
+src/tests/eo/suite/eo_test_class_simple.c
+src/tests/eo/suite/eo_test_class_errors.c
+src/tests/eo/suite/eo_test_lifecycle.c
+src/tests/eo/suite/eo_test_class_behaviour_errors.c
+src/tests/eo/suite/eo_error_msgs.c
+src/tests/eo/suite/eo_test_general.c
+src/tests/eo/suite/eo_test_value.c
+src/tests/eo/suite/eo_test_init.c
+src/tests/eo/suite/eo_test_event.c
+src/tests/eo/suite/eo_test_threaded_calls.c
+src/tests/eo/suite/eo_test_domain.c
+src/tests/eo/suite/eo_test_class_singleton.c
+src/tests/eo/suite/eo_test_reflection_complex_class_structure.c
+src/tests/eo/suite/eo_suite.c
+src/tests/eo/suite/eo_test_reflection.c
+src/tests/eo/suite/eo_test_call_errors.c
+src/tests/eo/interface/interface_main.c
+src/tests/eo/interface/interface_interface.c
+src/tests/eo/interface/interface_simple.c
+src/tests/eo/interface/interface_interface2.c
+src/tests/eo/mixin/mixin_mixin.c
+src/tests/eo/mixin/mixin_inherit.c
+src/tests/eo/mixin/mixin_mixin2.c
+src/tests/eo/mixin/mixin_simple.c
+src/tests/eo/mixin/mixin_mixin3.c
+src/tests/eo/mixin/mixin_mixin4.c
+src/tests/eo/mixin/mixin_main.c
+src/tests/eo/access/access_simple.c
+src/tests/eo/access/access_main.c
+src/tests/eo/access/access_inherit.c
+src/tests/eo/function_overrides/function_overrides_inherit2.c
+src/tests/eo/function_overrides/function_overrides_simple.c
+src/tests/eo/function_overrides/function_overrides_inherit.c
+src/tests/eo/function_overrides/function_overrides_inherit3.c
+src/tests/eo/function_overrides/function_overrides_main.c
+src/tests/eet/eet_test_common.c
+src/tests/eet/eet_test_cache.c
+src/tests/eet/eet_suite.c
+src/tests/eet/eet_test_connection.c
+src/tests/eet/eet_test_init.c
+src/tests/eet/eet_test_cipher.c
+src/tests/eet/eet_test_identity.c
+src/tests/eet/eet_test_image.c
+src/tests/eet/eet_test_file.c
+src/tests/eet/eet_test_data.c
+src/tests/efreet/ef_locale.c
+src/tests/efreet/main.c
+src/tests/efreet/ef_icon_theme.c
+src/tests/efreet/efreet_spec_test.c
+src/tests/efreet/ef_cache.c
+src/tests/efreet/ef_mime.c
+src/tests/efreet/ef_desktop.c
+src/tests/efreet/ef_menu.c
+src/tests/efreet/efreet_user_dir.c
+src/tests/efreet/efreet_test_efreet_cache.c
+src/tests/efreet/ef_ini.c
+src/tests/efreet/efreet_async_test.c
+src/tests/efreet/efreet_icon_cache_dump.c
+src/tests/efreet/ef_utils.c
+src/tests/efreet/efreet_suite.c
+src/tests/efreet/efreet_test_efreet.c
+src/tests/efreet/ef_data_dirs.c
+src/tests/efreet/compare/efreet_alloc.c
+src/tests/efreet/compare/efreet_menu_alloc.c
+src/tests/evas/efl_test_canvas2.c
+src/tests/evas/efl_test_canvas3.c
+src/tests/evas/evas_test_text.c
+src/tests/evas/evas_test_events.c
+src/tests/evas/evas_test_evasgl.c
+src/tests/evas/evas_buffer_helper.c
+src/tests/evas/evas_test_image.c
+src/tests/evas/evas_test_filters.c
+src/tests/evas/evas_test_textblock.c
+src/tests/evas/efl_canvas_animation.c
+src/tests/evas/evas_suite.c
+src/tests/evas/evas_test_callbacks.c
+src/tests/evas/efl_test_canvas.c
+src/tests/evas/evas_test_mask.c
+src/tests/evas/evas_test_new.c
+src/tests/evas/evas_test_init.c
+src/tests/evas/evas_test_render_engines.c
+src/tests/evas/evas_test_object_smart.c
+src/tests/evas/evas_test_object.c
+src/tests/evas/evas_test_focus.c
+src/tests/emotion/emotion_test_main.c
+src/tests/emotion/emotion_test_main-eo.c
+src/tests/elementary/elm_test_bubble.c
+src/tests/elementary/elm_test_index.c
+src/tests/elementary/elm_test_flip.c
+src/tests/elementary/elm_test_slideshow.c
+src/tests/elementary/elm_test_atspi.c
+src/tests/elementary/elm_code_test_parse.c
+src/tests/elementary/efl_ui_test_radio_group.c
+src/tests/elementary/efl_ui_test_slider.c
+src/tests/elementary/efl_ui_test_image.c
+src/tests/elementary/elm_code_test_widget_undo.c
+src/tests/elementary/efl_ui_test_grid.c
+src/tests/elementary/efl_ui_window_cnp_dnd_slave.c
+src/tests/elementary/efl_ui_test_timepicker.c
+src/tests/elementary/elm_code_test_indent.c
+src/tests/elementary/efl_ui_test_vg_animation.c
+src/tests/elementary/elm_test_list.c
+src/tests/elementary/elm_test_web.c
+src/tests/elementary/elm_code_test_widget_text.c
+src/tests/elementary/efl_ui_test_select_model.c
+src/tests/elementary/elm_test_thumb.c
+src/tests/elementary/elm_test_popup.c
+src/tests/elementary/elm_test_menu.c
+src/tests/elementary/efl_ui_test_box_flow.c
+src/tests/elementary/elm_test_map.c
+src/tests/elementary/efl_ui_test_list_collection.c
+src/tests/elementary/efl_ui_test_widget.c
+src/tests/elementary/elm_test_fileselector.c
+src/tests/elementary/elm_test_multibuttonentry.c
+src/tests/elementary/elm_test_hoversel.c
+src/tests/elementary/efl_ui_test_scroller.c
+src/tests/elementary/elm_test_slider.c
+src/tests/elementary/efl_ui_test_view_model.c
+src/tests/elementary/efl_ui_test_atspi.c
+src/tests/elementary/elm_test_inwin.c
+src/tests/elementary/elm_test_entry.c
+src/tests/elementary/elm_code_file_test_memory.c
+src/tests/elementary/elm_test_icon.c
+src/tests/elementary/elm_test_image.c
+src/tests/elementary/elm_test_spinner.c
+src/tests/elementary/efl_ui_test_progressbar.c
+src/tests/elementary/efl_ui_test_popup.c
+src/tests/elementary/elm_test_calendar.c
+src/tests/elementary/elm_test_widget_basics.c
+src/tests/elementary/efl_ui_test_image_zoomable.c
+src/tests/elementary/efl_ui_test_box_stack.c
+src/tests/elementary/efl_ui_test_focus.c
+src/tests/elementary/elm_code_test_syntax.c
+src/tests/elementary/custom_recognizer.c
+src/tests/elementary/elm_code_file_test_load.c
+src/tests/elementary/elm_test_panel.c
+src/tests/elementary/efl_ui_test_box.c
+src/tests/elementary/efl_ui_suite.c
+src/tests/elementary/elm_test_conformant.c
+src/tests/elementary/elm_test_button.c
+src/tests/elementary/elm_test_notify.c
+src/tests/elementary/efl_ui_test_collection_view.c
+src/tests/elementary/elm_code_test_basic.c
+src/tests/elementary/efl_ui_test_win.c
+src/tests/elementary/elm_test_toolbar.c
+src/tests/elementary/elm_test_player.c
+src/tests/elementary/elm_test_photo.c
+src/tests/elementary/elm_test_label.c
+src/tests/elementary/elm_test_colorselector.c
+src/tests/elementary/elm_test_grid.c
+src/tests/elementary/elm_test_layout.c
+src/tests/elementary/elm_test_panes.c
+src/tests/elementary/efl_ui_model.c
+src/tests/elementary/elm_test_naviframe.c
+src/tests/elementary/elm_test_mapbuf.c
+src/tests/elementary/efl_ui_test_focus_common.c
+src/tests/elementary/elm_test_datetime.c
+src/tests/elementary/elm_test_progressbar.c
+src/tests/elementary/efl_ui_test_callback.c
+src/tests/elementary/elm_test_check.c
+src/tests/elementary/efl_ui_test_grid_collection.c
+src/tests/elementary/efl_ui_test_config.c
+src/tests/elementary/efl_ui_test_position_manager_common.c
+src/tests/elementary/suite_helpers.c
+src/tests/elementary/elm_test_diskselector.c
+src/tests/elementary/elm_test_hover.c
+src/tests/elementary/elm_code_test_widget_selection.c
+src/tests/elementary/elm_suite_build.c
+src/tests/elementary/elm_test_radio.c
+src/tests/elementary/elm_code_test_text.c
+src/tests/elementary/efl_ui_test_check.c
+src/tests/elementary/elm_test_table.c
+src/tests/elementary/efl_ui_test_relative_container.c
+src/tests/elementary/efl_ui_test_gesture.c
+src/tests/elementary/elm_test_genlist.c
+src/tests/elementary/elm_test_actionslider.c
+src/tests/elementary/custom_gesture.c
+src/tests/elementary/elm_test_plug.c
+src/tests/elementary/elm_test_flipselector.c
+src/tests/elementary/spec/efl_test_content.c
+src/tests/elementary/spec/efl_test_selectable.c
+src/tests/elementary/spec/efl_test_gfx_view.c
+src/tests/elementary/spec/efl_test_container.c
+src/tests/elementary/spec/efl_ui_spec_suite.c
+src/tests/elementary/spec/efl_test_ui_view.c
+src/tests/elementary/spec/efl_test_range_display.c
+src/tests/elementary/spec/efl_test_basics.c
+src/tests/elementary/spec/efl_test_range_interactive.c
+src/tests/elementary/spec/efl_test_clickable.c
+src/tests/elementary/spec/efl_test_format.c
+src/tests/elementary/spec/efl_test_pack.c
+src/tests/elementary/spec/efl_test_multi_selectable.c
+src/tests/elementary/spec/efl_test_gfx_arrangement.c
+src/tests/elementary/spec/efl_test_single_selectable.c
+src/tests/elementary/spec/efl_test_pack_linear.c
+src/tests/elementary/elm_test_fileselector_button.c
+src/tests/elementary/efl_ui_test_layout.c
+src/tests/elementary/elm_test_separator.c
+src/tests/elementary/elm_test_fileselector_entry.c
+src/tests/elementary/elm_test_dayselector.c
+src/tests/elementary/elm_test_gengrid.c
+src/tests/elementary/efl_ui_test_group_item.c
+src/tests/elementary/efl_ui_test_text.c
+src/tests/elementary/elm_test_bg.c
+src/tests/elementary/efl_ui_test_collection.c
+src/tests/elementary/elm_test_config.c
+src/tests/elementary/elm_test_widget_focus.c
+src/tests/elementary/elm_test_prefs.c
+src/tests/elementary/elm_test_video.c
+src/tests/elementary/elm_test_ctxpopup.c
+src/tests/elementary/efl_ui_test_spotlight.c
+src/tests/elementary/efl_ui_test_spin_button.c
+src/tests/elementary/elm_suite.c
+src/tests/elementary/elm_test_frame.c
+src/tests/elementary/elm_test_glview.c
+src/tests/elementary/elm_test_photocam.c
+src/tests/elementary/efl_ui_build.c
+src/tests/elementary/elm_code_test_line.c
+src/tests/elementary/efl_ui_test_collection_common.c
+src/tests/elementary/efl_ui_compile_test.c
+src/tests/elementary/efl_ui_test_focus_sub.c
+src/tests/elementary/efl_ui_test_table.c
+src/tests/elementary/elm_test_init.c
+src/tests/elementary/custom_recognizer2.c
+src/tests/elementary/elm_code_test_widget.c
+src/tests/elementary/efl_ui_test_spin.c
+src/tests/elementary/elm_test_clock.c
+src/tests/elementary/elm_test_segmentcontrol.c
+src/tests/elementary/elm_test_box.c
+src/tests/elementary/elm_test_win.c
+src/tests/elementary/elm_test_scroller.c
+src/tests/eeze/eeze_test_net.c
+src/tests/eeze/eeze_test_udev.c
+src/tests/eeze/eeze_test_init.c
+src/tests/eeze/eeze_suite.c
+src/tests/eeze/eeze_test_sensor.c
+src/tests/ector/suite/ector_test_init.c
+src/tests/ector/suite/ector_suite.c
+src/tests/eolian_cxx/simple.c
+src/tests/eolian_cxx/generic.c
+src/tests/eolian_cxx/name1_name2_type_generation.c
+src/tests/eolian_cxx/c.c
+src/tests/eolian_cxx/a.c
+src/tests/eolian_cxx/complex.c
+src/tests/eolian_cxx/b.c
+src/tests/eolian_cxx/name_name.c
+src/tests/elua/elua_suite.c
+src/tests/elua/elua_lib.c
+src/tests/eina/eina_test_barrier.c
+src/tests/eina/eina_test_tiler.c
+src/tests/eina/eina_test_debug.c
+src/tests/eina/eina_test_accessor.c
+src/tests/eina/eina_test_log.c
+src/tests/eina/eina_test_error.c
+src/tests/eina/eina_test_array.c
+src/tests/eina/eina_test_freeq.c
+src/tests/eina/eina_test_slice.c
+src/tests/eina/eina_suite.c
+src/tests/eina/eina_test_cow.c
+src/tests/eina/eina_test_sched.c
+src/tests/eina/eina_test_benchmark.c
+src/tests/eina/eina_test_crc.c
+src/tests/eina/eina_test_binshare.c
+src/tests/eina/eina_test_inlist.c
+src/tests/eina/eina_test_simple_xml_parser.c
+src/tests/eina/eina_test_vector.c
+src/tests/eina/eina_test_module_dummy.c
+src/tests/eina/eina_test_util.c
+src/tests/eina/eina_test_convert.c
+src/tests/eina/eina_test_clist.c
+src/tests/eina/eina_test_counter.c
+src/tests/eina/eina_test_vpath.c
+src/tests/eina/eina_test_rectangle.c
+src/tests/eina/eina_test_value.c
+src/tests/eina/eina_test_fp.c
+src/tests/eina/eina_test_magic.c
+src/tests/eina/eina_test_hash.c
+src/tests/eina/eina_test_abi.c
+src/tests/eina/eina_test_xattr.c
+src/tests/eina/eina_test_rbtree.c
+src/tests/eina/eina_test_safepointer.c
+src/tests/eina/eina_test_matrix.c
+src/tests/eina/eina_test_binbuf.c
+src/tests/eina/eina_test_ustr.c
+src/tests/eina/eina_test_range.c
+src/tests/eina/eina_test_list.c
+src/tests/eina/eina_test_stringshare.c
+src/tests/eina/eina_test_abstract_content.c
+src/tests/eina/eina_test_ustringshare.c
+src/tests/eina/eina_test_inarray.c
+src/tests/eina/eina_test_matrixsparse.c
+src/tests/eina/eina_test_quaternion.c
+src/tests/eina/eina_test_strbuf.c
+src/tests/eina/eina_test_lalloc.c
+src/tests/eina/eina_test_bezier.c
+src/tests/eina/eina_test_file.c
+src/tests/eina/eina_test_tmpstr.c
+src/tests/eina/eina_test_slstr.c
+src/tests/eina/eina_test_str.c
+src/tests/eina/eina_test_iterator.c
+src/tests/eina/eina_test_trash.c
+src/tests/eina/eina_test_main.c
+src/tests/eina/eina_test_quadtree.c
+src/tests/eina/eina_test_module.c
+src/tests/eina/eina_test_lock.c
+src/tests/eina/eina_test_mempool.c
+src/tests/eina/eina_test_quad.c
+src/tests/evil/evil_test_main.c
+src/tests/evil/evil_test_stdio.c
+src/tests/evil/evil_suite.c
+src/tests/evil/evil_test_unistd.c
+src/tests/evil/evil_test_stdlib.c
+src/tests/evil/evil_test_dlfcn.c
+src/tests/efl/efl_test_container_model.c
+src/tests/efl/efl_suite.c
+src/tests/efl/efl_test_composite_model.c
+src/tests/eio/eio_test_manager.c
+src/tests/eio/eio_test_monitor.c
+src/tests/eio/eio_test_manager_xattr.c
+src/tests/eio/eio_test_file.c
+src/tests/eio/eio_test_common.c
+src/tests/eio/efl_io_model_test_monitor_add.c
+src/tests/eio/eio_test_eet.c
+src/tests/eio/eio_test_sentry.c
+src/tests/eio/eio_test_xattr.c
+src/tests/eio/eio_suite.c
+src/tests/eio/eio_test_map.c
+src/tests/eio/efl_io_model_test_file.c
+src/tests/timeout.c
+src/tests/emile/emile_test_base.c
+src/tests/emile/emile_test_base64.c
+src/tests/emile/emile_suite.c
+src/tests/ecore_wl2/ecore_wl2_test_output.c
+src/tests/ecore_wl2/ecore_wl2_test_display.c
+src/tests/ecore_wl2/ecore_wl2_test_input.c
+src/tests/ecore_wl2/ecore_wl2_test_window.c
+src/tests/ecore_wl2/ecore_wl2_test_ecore_wl2.c
+src/tests/ecore_wl2/ecore_wl2_suite.c
+src/tests/eldbus/eldbus_test_eldbus_pending_cancel.c
+src/tests/eldbus/eldbus_test_eldbus_model_object.c
+src/tests/eldbus/eldbus_test_eldbus_object.c
+src/tests/eldbus/eldbus_test_eldbus_init.c
+src/tests/eldbus/eldbus_test_eldbus_proxy.c
+src/tests/eldbus/eldbus_test_eldbus_model.c
+src/tests/eldbus/eldbus_test_eldbus_pending_data.c
+src/tests/eldbus/eldbus_test_eldbus_model_signal.c
+src/tests/eldbus/eldbus_test_eldbus_model_method.c
+src/tests/eldbus/eldbus_suite.c
+src/tests/eldbus/eldbus_test_eldbus_signal_handler.c
+src/tests/eldbus/eldbus_test_eldbus_message.c
+src/tests/eldbus/eldbus_test_eldbus_model_connection.c
+src/tests/eldbus/eldbus_test_fake_server_eldbus_model_proxy.c
+src/tests/eldbus/eldbus_test_eldbus_model_proxy.c
+src/tests/eldbus/eldbus_fake_server.c
+src/modules/ecore/system/systemd/ecore_system_systemd.c
+src/modules/ecore/system/tizen/ecore_system_tizen.c
+src/modules/ecore/system/upower/ecore_system_upower.c
+src/modules/evas/image_loaders/xpm/evas_image_load_xpm.c
+src/modules/evas/image_loaders/bmp/evas_image_load_bmp.c
+src/modules/evas/image_loaders/dds/evas_image_load_dds.c
+src/modules/evas/image_loaders/dds/s3tc_decoder.c
+src/modules/evas/image_loaders/tga/evas_image_load_tga.c
+src/modules/evas/image_loaders/jpeg/evas_image_load_jpeg.c
+src/modules/evas/image_loaders/psd/evas_image_load_psd.c
+src/modules/evas/image_loaders/png/evas_image_load_png.c
+src/modules/evas/image_loaders/tiff/evas_image_load_tiff.c
+src/modules/evas/image_loaders/eet/evas_image_load_eet.c
+src/modules/evas/image_loaders/wbmp/evas_image_load_wbmp.c
+src/modules/evas/image_loaders/jp2k/evas_image_load_jp2k.c
+src/modules/evas/image_loaders/webp/evas_image_load_webp.c
+src/modules/evas/image_loaders/ico/evas_image_load_ico.c
+src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c
+src/modules/evas/image_loaders/generic/evas_image_load_generic.c
+src/modules/evas/image_loaders/gif/evas_image_load_gif.c
+src/modules/evas/image_loaders/tgv/evas_image_load_tgv.c
+src/modules/evas/image_loaders/avif/evas_image_load_avif.c
+src/modules/evas/image_savers/jpeg/evas_image_save_jpeg.c
+src/modules/evas/image_savers/png/evas_image_save_png.c
+src/modules/evas/image_savers/tiff/evas_image_save_tiff.c
+src/modules/evas/image_savers/eet/evas_image_save_eet.c
+src/modules/evas/image_savers/webp/evas_image_save_webp.c
+src/modules/evas/image_savers/tgv/evas_image_save_tgv.c
+src/modules/evas/image_savers/avif/evas_image_save_avif.c
+src/modules/evas/vg_loaders/json/evas_vg_load_json.c
+src/modules/evas/vg_loaders/eet/evas_vg_load_eet.c
+src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
+src/modules/evas/engines/eglfs/evas_outbuf.c
+src/modules/evas/engines/eglfs/evas_engine.c
+src/modules/evas/engines/gl_x11/evas_x_main.c
+src/modules/evas/engines/gl_x11/evas_engine.c
+src/modules/evas/engines/software_x11/evas_x_egl.c
+src/modules/evas/engines/software_x11/evas_xlib_color.c
+src/modules/evas/engines/software_x11/evas_xlib_swapper.c
+src/modules/evas/engines/software_x11/evas_xlib_buffer.c
+src/modules/evas/engines/software_x11/evas_xlib_outbuf.c
+src/modules/evas/engines/software_x11/evas_xlib_main.c
+src/modules/evas/engines/software_x11/evas_xlib_dri_image.c
+src/modules/evas/engines/software_x11/evas_xlib_image.c
+src/modules/evas/engines/software_x11/evas_xlib_swapbuf.c
+src/modules/evas/engines/software_x11/evas_engine.c
+src/modules/evas/engines/gl_common/evas_gl_api_gles1.c
+src/modules/evas/engines/gl_common/evas_gl_file_cache.c
+src/modules/evas/engines/gl_common/evas_gl_api_ext.c
+src/modules/evas/engines/gl_common/evas_gl_rectangle.c
+src/modules/evas/engines/gl_common/evas_gl_image.c
+src/modules/evas/engines/gl_common/evas_gl_context.c
+src/modules/evas/engines/gl_common/evas_gl_texture.c
+src/modules/evas/engines/gl_common/evas_gl_core.c
+src/modules/evas/engines/gl_common/evas_gl_preload.c
+src/modules/evas/engines/gl_common/evas_gl_line.c
+src/modules/evas/engines/gl_common/evas_gl_polygon.c
+src/modules/evas/engines/gl_common/evas_gl_api.c
+src/modules/evas/engines/gl_common/evas_gl_shader.c
+src/modules/evas/engines/gl_common/evas_gl_font.c
+src/modules/evas/engines/gl_sdl/evas_engine.c
+src/modules/evas/engines/wayland_shm/evas_outbuf.c
+src/modules/evas/engines/wayland_shm/evas_engine.c
+src/modules/evas/engines/software_gdi/evas_gdi_buffer.c
+src/modules/evas/engines/software_gdi/evas_gdi_main.c
+src/modules/evas/engines/software_gdi/evas_outbuf.c
+src/modules/evas/engines/software_gdi/evas_engine.c
+src/modules/evas/engines/drm/evas_outbuf.c
+src/modules/evas/engines/drm/evas_engine.c
+src/modules/evas/engines/wayland_egl/evas_engine.c
+src/modules/evas/engines/wayland_egl/evas_wl_main.c
+src/modules/evas/engines/gl_drm/evas_outbuf.c
+src/modules/evas/engines/gl_drm/evas_engine.c
+src/modules/evas/engines/software_ddraw/evas_outbuf.c
+src/modules/evas/engines/software_ddraw/evas_engine.c
+src/modules/evas/engines/software_ddraw/evas_ddraw_buffer.c
+src/modules/evas/engines/buffer/evas_outbuf.c
+src/modules/evas/engines/buffer/evas_engine.c
+src/modules/evas/engines/gl_cocoa/evas_engine.c
+src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_blend.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_curve.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_grayscale.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_displace.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_fill.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_mask.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_blur.c
+src/modules/evas/engines/gl_generic/filters/gl_filter_inverse_color.c
+src/modules/evas/engines/gl_generic/evas_engine.c
+src/modules/evas/engines/gl_generic/evas_ector_gl_image_buffer.c
+src/modules/evas/engines/fb/evas_outbuf.c
+src/modules/evas/engines/fb/evas_engine.c
+src/modules/evas/engines/fb/evas_fb_main.c
+src/modules/evas/engines/software_generic/evas_native_tbm.c
+src/modules/evas/engines/software_generic/evas_ector_software_buffer.c
+src/modules/evas/engines/software_generic/evas_native_dmabuf.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_sse3.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_i386.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_neon.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_sse3.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_i386.c
+src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_rgba_.c
+src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_alpha_.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_neon.c
+src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_.c
+src/modules/evas/engines/software_generic/filters/evas_filter_mask.c
+src/modules/evas/engines/software_generic/filters/evas_filter_blend.c
+src/modules/evas/engines/software_generic/filters/evas_filter_inverse_color.c
+src/modules/evas/engines/software_generic/filters/evas_filter_fill.c
+src/modules/evas/engines/software_generic/filters/evas_filter_curve.c
+src/modules/evas/engines/software_generic/filters/evas_filter_blur.c
+src/modules/evas/engines/software_generic/filters/evas_filter_displace.c
+src/modules/evas/engines/software_generic/filters/evas_filter_bump.c
+src/modules/evas/engines/software_generic/filters/evas_filter_grayscale.c
+src/modules/evas/engines/software_generic/filters/evas_filter_transform.c
+src/modules/evas/engines/software_generic/evas_engine.c
+src/modules/evas/vg_savers/eet/evas_vg_save_eet.c
+src/modules/evas/vg_savers/svg/evas_vg_save_svg.c
+src/modules/emotion/gstreamer1/emotion_convert.c
+src/modules/emotion/gstreamer1/emotion_alloc.c
+src/modules/emotion/gstreamer1/emotion_gstreamer.c
+src/modules/emotion/gstreamer1/emotion_sink.c
+src/modules/elementary/prefs/elm_button.c
+src/modules/elementary/prefs/elm_slider.c
+src/modules/elementary/prefs/elm_swallow.c
+src/modules/elementary/prefs/elm_check.c
+src/modules/elementary/prefs/elm_horizontal_frame.c
+src/modules/elementary/prefs/elm_entry.c
+src/modules/elementary/prefs/elm_spinner.c
+src/modules/elementary/prefs/elm_horizontal_box.c
+src/modules/elementary/prefs/elm_datetime.c
+src/modules/elementary/prefs/prefs_iface.c
+src/modules/elementary/prefs/elm_vertical_box.c
+src/modules/elementary/prefs/elm_vertical_frame.c
+src/modules/elementary/prefs/elm_label.c
+src/modules/elementary/prefs/elm_separator.c
+src/modules/elementary/test_map/mod.c
+src/modules/elementary/test_entry/mod.c
+src/modules/elementary/access_output/mod.c
+src/modules/elementary/web/none/elm_web_none.c
+src/modules/elementary/web/none/elm_web_none_eo.c
+src/modules/ecore_buffer/x11_dri2/ecore_buffer_x11_dri2.c
+src/modules/ecore_buffer/x11_dri3/ecore_buffer_x11_dri3.c
+src/modules/ecore_buffer/shm/ecore_buffer_shm.c
+src/modules/eeze/sensor/fake/fake.c
+src/modules/eeze/sensor/udev/udev.c
+src/modules/ethumb/emotion/emotion.c
+src/modules/eina/mp/pass_through/eina_pass_through.c
+src/modules/eina/mp/one_big/eina_one_big.c
+src/modules/eina/mp/chained_pool/eina_chained_mempool.c
+src/modules/ecore_imf/ibus/ibus_imcontext.c
+src/modules/ecore_imf/ibus/ibus_module.c
+src/modules/ecore_imf/wayland/wayland_module.c
+src/modules/ecore_imf/wayland/wayland_imcontext.c
+src/modules/ecore_imf/xim/ecore_imf_xim.c
+src/modules/ecore_wl2/engines/dmabuf/ecore_wl2_surface_module_dmabuf.c
+src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server_fb_keymap.c
+src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server.c
+src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
+src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
+src/modules/ecore_evas/engines/x/ecore_evas_x.c
+src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
+src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
+src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
+src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
+src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
+src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
+src/modules/ecore_evas/engines/extn/ecore_evas_extn_buf.c
+src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
+src/static_libs/lz4/xxhash.c
+src/static_libs/lz4/lz4frame.c
+src/static_libs/lz4/lz4hc.c
+src/static_libs/lz4/lz4.c
+src/static_libs/freetype/sw_ft_stroker.c
+src/static_libs/freetype/sw_ft_math.c
+src/static_libs/freetype/sw_ft_raster.c
+src/static_libs/vg_common/vg_common_json.c
+src/static_libs/vg_common/vg_common_svg.c
+src/static_libs/http-parser/test.c
+src/static_libs/http-parser/contrib/parsertrace.c
+src/static_libs/http-parser/contrib/url_parser.c
+src/static_libs/http-parser/http_parser.c
+src/static_libs/libunibreak/linebreakdata.c
+src/static_libs/libunibreak/linebreakdef.c
+src/static_libs/libunibreak/graphemebreak.c
+src/static_libs/libunibreak/unibreakbase.c
+src/static_libs/libunibreak/graphemebreakdata.c
+src/static_libs/libunibreak/unibreakdef.c
+src/static_libs/libunibreak/linebreak.c
+src/static_libs/libunibreak/wordbreak.c
+src/static_libs/libunibreak/wordbreakdata.c
+src/static_libs/rg_etc/etc2_encoder.c
+src/static_libs/rg_etc/rg_etc1.c
+src/static_libs/rg_etc/rg_etc2.c
+src/static_libs/buildsystem/buildsystem_autotools.c
+src/static_libs/buildsystem/buildsystem_meson.c
+src/static_libs/draw/draw_convert.c
+src/static_libs/draw/draw_main_sse2.c
+src/static_libs/draw/draw_alpha_main.c
+src/static_libs/draw/draw_main_neon.c
+src/static_libs/draw/draw_main.c
+src/static_libs/triangulator/triangulator_stroker.c
+src/static_libs/triangulator/triangulator_simple.c
+src/lib/ecore_sdl/ecore_sdl.c
+src/lib/efl_mono/efl_mono_model_internal.c
+src/lib/efl_mono/efl_custom_exports_mono.c
+src/lib/efl_mono/efl_mono_accessors.c
+src/lib/elput/elput_logind.c
+src/lib/elput/elput_manager.c
+src/lib/elput/elput.c
+src/lib/elput/elput_evdev.c
+src/lib/elput/elput_touch.c
+src/lib/elput/elput_input.c
+src/lib/ecore_con/ecore_con_local_win32.c
+src/lib/ecore_con/ecore_con_eet_client_obj_eo.c
+src/lib/ecore_con/efl_net_dialer_tcp.c
+src/lib/ecore_con/ecore_con_local.c
+src/lib/ecore_con/efl_net_server_tcp.c
+src/lib/ecore_con/ecore_con_socks.c
+src/lib/ecore_con/efl_net_socket.c
+src/lib/ecore_con/ecore_con_eet_server_obj_eo.c
+src/lib/ecore_con/efl_net_session-none.c
+src/lib/ecore_con/efl_net_session-connman.c
+src/lib/ecore_con/efl_net_ssl_context.c
+src/lib/ecore_con/efl_net_dialer_http.c
+src/lib/ecore_con/efl_net_socket_udp.c
+src/lib/ecore_con/efl_net_ssl_ctx-none.c
+src/lib/ecore_con/efl_net_server_ssl.c
+src/lib/ecore_con/efl_net_socket_fd.c
+src/lib/ecore_con/ecore_con_eet_base_eo.c
+src/lib/ecore_con/efl_net_control_technology-connman.c
+src/lib/ecore_con/efl_net_dialer_unix.c
+src/lib/ecore_con/efl_net_control-none.c
+src/lib/ecore_con/ecore_con_alloc.c
+src/lib/ecore_con/efl_net_dialer_websocket.c
+src/lib/ecore_con/efl_net_dialer_simple.c
+src/lib/ecore_con/ecore_con_legacy.c
+src/lib/ecore_con/efl_net_ssl_conn-gnutls.c
+src/lib/ecore_con/efl_net_server_ip.c
+src/lib/ecore_con/efl_net_control-connman.c
+src/lib/ecore_con/efl_net_socket_unix.c
+src/lib/ecore_con/efl_net_socket_windows.c
+src/lib/ecore_con/efl_net_ssl_ctx-openssl.c
+src/lib/ecore_con/ecore_con_url.c
+src/lib/ecore_con/efl_net_socket_simple.c
+src/lib/ecore_con/ecore_con_url_curl.c
+src/lib/ecore_con/efl_net_ssl_ctx-gnutls.c
+src/lib/ecore_con/efl_net_ssl_conn-none.c
+src/lib/ecore_con/efl_net_socket_ssl.c
+src/lib/ecore_con/efl_net_control_technology-none.c
+src/lib/ecore_con/efl_net_server.c
+src/lib/ecore_con/ecore_con_eet_base_eo.legacy.c
+src/lib/ecore_con/ecore_con_eet.c
+src/lib/ecore_con/efl_net_server_windows.c
+src/lib/ecore_con/efl_net_dialer_ssl.c
+src/lib/ecore_con/efl_net_control_access_point-connman.c
+src/lib/ecore_con/efl_net_server_simple.c
+src/lib/ecore_con/efl_net_ssl_conn-openssl.c
+src/lib/ecore_con/efl_net_control_access_point-none.c
+src/lib/ecore_con/efl_net_dialer_windows.c
+src/lib/ecore_con/efl_net_socket_tcp.c
+src/lib/ecore_con/efl_net_dialer.c
+src/lib/ecore_con/efl_net_dialer_udp.c
+src/lib/ecore_con/efl_net_server_udp.c
+src/lib/ecore_con/ecore_con_proxy_helper.c
+src/lib/ecore_con/ecore_con.c
+src/lib/ecore_con/efl_net_server_unix.c
+src/lib/ecore_con/efl_net_server_udp_client.c
+src/lib/ecore_con/efl_net_server_fd.c
+src/lib/ecore_con/efl_net_ip_address.c
+src/lib/ecore_con/efl_net-connman.c
+src/lib/edje/edje_calc.c
+src/lib/edje/edje_part_external.c
+src/lib/edje/edje_cache.c
+src/lib/edje/edje_lua.c
+src/lib/edje/edje_legacy.c
+src/lib/edje/edje_lua2.c
+src/lib/edje/edje_part_text.c
+src/lib/edje/edje_var.c
+src/lib/edje/edje_textblock.c
+src/lib/edje/edje_embryo.c
+src/lib/edje/edje_signal.c
+src/lib/edje/edje_module.c
+src/lib/edje/efl_layout_group_eo.legacy.c
+src/lib/edje/edje_part.c
+src/lib/edje/edje_match.c
+src/lib/edje/efl_canvas_layout_eo.legacy.c
+src/lib/edje/edje_edit.c
+src/lib/edje/edje_smart.c
+src/lib/edje/edje_part_swallow.c
+src/lib/edje/edje_box_layout.c
+src/lib/edje/edje_program.c
+src/lib/edje/edje_main.c
+src/lib/edje/edje_external.c
+src/lib/edje/edje_part_box.c
+src/lib/edje/edje_textblock_styles.c
+src/lib/edje/edje_lua_script_only.c
+src/lib/edje/edje_multisense.c
+src/lib/edje/edje_data.c
+src/lib/edje/edje_load.c
+src/lib/edje/edje_util.c
+src/lib/edje/edje_misc.c
+src/lib/edje/edje_message_queue.c
+src/lib/edje/edje_entry.c
+src/lib/edje/edje_edit_eo.c
+src/lib/edje/edje_convert.c
+src/lib/edje/edje_callbacks.c
+src/lib/edje/edje_text.c
+src/lib/edje/edje_part_invalid.c
+src/lib/edje/edje_part_table.c
+src/lib/ecore_avahi/ecore_avahi.c
+src/lib/eolian/database_implement_api.c
+src/lib/eolian/database_var.c
+src/lib/eolian/database_expr_api.c
+src/lib/eolian/eolian_database.c
+src/lib/eolian/database_function_parameter_api.c
+src/lib/eolian/eo_parser.c
+src/lib/eolian/database_class.c
+src/lib/eolian/database_function_api.c
+src/lib/eolian/database_function.c
+src/lib/eolian/database_type_api.c
+src/lib/eolian/database_type.c
+src/lib/eolian/database_function_parameter.c
+src/lib/eolian/database_event_api.c
+src/lib/eolian/database_validate.c
+src/lib/eolian/eo_lexer.c
+src/lib/eolian/database_constructor_api.c
+src/lib/eolian/database_part_api.c
+src/lib/eolian/database_constructor.c
+src/lib/eolian/database_class_api.c
+src/lib/eolian/database_event.c
+src/lib/eolian/database_expr.c
+src/lib/eolian/database_var_api.c
+src/lib/eolian/eolian_aux.c
+src/lib/eolian/database_implement.c
+src/lib/eolian/eolian.c
+src/lib/eolian/database_check.c
+src/lib/eolian/database_part.c
+src/lib/ecore/efl_composite_model.c
+src/lib/ecore/efl_loop_consumer.c
+src/lib/ecore/efl_core_proc_env.c
+src/lib/ecore/efl_io_stdout.c
+src/lib/ecore/efl_loop_message_future.c
+src/lib/ecore/efl_loop.c
+src/lib/ecore/ecore_anim.c
+src/lib/ecore/efl_filter_model.c
+src/lib/ecore/efl_io_writer_fd.c
+src/lib/ecore/ecore_throttle.c
+src/lib/ecore/efl_boolean_model.c
+src/lib/ecore/ecore_idler.c
+src/lib/ecore/ecore_timer.c
+src/lib/ecore/efl_io_copier.c
+src/lib/ecore/efl_io_sizer_fd.c
+src/lib/ecore/ecore_thread.c
+src/lib/ecore/efl_loop_fd.c
+src/lib/ecore/efl_cubic_bezier_interpolator.c
+src/lib/ecore/efl_loop_handler.c
+src/lib/ecore/efl_divisor_interpolator.c
+src/lib/ecore/efl_decelerate_interpolator.c
+src/lib/ecore/ecore_app.c
+src/lib/ecore/efl_loop_timer_eo.legacy.c
+src/lib/ecore/efl_loop_message_future_handler.c
+src/lib/ecore/ecore_alloc.c
+src/lib/ecore/efl_loop_model.c
+src/lib/ecore/efl_loop_message.c
+src/lib/ecore/ecore_exe_posix.c
+src/lib/ecore/efl_thread.c
+src/lib/ecore/efl_spring_interpolator.c
+src/lib/ecore/ecore_poller.c
+src/lib/ecore/ecore_exe_win32.c
+src/lib/ecore/efl_app.c
+src/lib/ecore/efl_exe.c
+src/lib/ecore/ecore_signal.c
+src/lib/ecore/ecore_events.c
+src/lib/ecore/efl_io_positioner_fd.c
+src/lib/ecore/ecore.c
+src/lib/ecore/efl_bounce_interpolator.c
+src/lib/ecore/ecore_main.c
+src/lib/ecore/efl_generic_model.c
+src/lib/ecore/ecore_exe_eo.c
+src/lib/ecore/efl_threadio.c
+src/lib/ecore/efl_io_stderr.c
+src/lib/ecore/ecore_time.c
+src/lib/ecore/ecore_event_message_handler.c
+src/lib/ecore/efl_io_stdin.c
+src/lib/ecore/efl_io_closer_fd.c
+src/lib/ecore/ecore_getopt.c
+src/lib/ecore/efl_loop_message_handler.c
+src/lib/ecore/ecore_job.c
+src/lib/ecore/ecore_main_timechanges.c
+src/lib/ecore/ecore_idle_exiter.c
+src/lib/ecore/efl_io_buffered_stream.c
+src/lib/ecore/ecore_glib.c
+src/lib/ecore/efl_task.c
+src/lib/ecore/ecore_idle_enterer.c
+src/lib/ecore/efl_sinusoidal_interpolator.c
+src/lib/ecore/efl_core_env.c
+src/lib/ecore/efl_linear_interpolator.c
+src/lib/ecore/efl_accelerate_interpolator.c
+src/lib/ecore/efl_core_command_line.c
+src/lib/ecore/efl_io_reader_fd.c
+src/lib/ecore/ecore_event_message.c
+src/lib/ecore/efl_container_model.c
+src/lib/ecore/efl_io_file.c
+src/lib/ecore/ecore_pipe.c
+src/lib/ecore/efl_appthread.c
+src/lib/ecore/ecore_exe.c
+src/lib/eo/eo_class_class.c
+src/lib/eo/eo_ptr_indirection.c
+src/lib/eo/eo_add_fallback.c
+src/lib/eo/eo.c
+src/lib/eo/eo_base_class.c
+src/lib/eet/eet_connection.c
+src/lib/eet/eet_cipher.c
+src/lib/eet/eet_dictionary.c
+src/lib/eet/eet_lib.c
+src/lib/eet/eet_data.c
+src/lib/eet/eet_alloc.c
+src/lib/eet/eet_utils.c
+src/lib/eet/eet_image.c
+src/lib/eet/eet_node.c
+src/lib/efreet/efreet_cache.c
+src/lib/efreet/efreet_ini.c
+src/lib/efreet/efreet_utils.c
+src/lib/efreet/efreet_uri.c
+src/lib/efreet/efreet_mime.c
+src/lib/efreet/efreet_icon.c
+src/lib/efreet/efreet_menu.c
+src/lib/efreet/efreet_base.c
+src/lib/efreet/efreet_xml.c
+src/lib/efreet/efreet_trash.c
+src/lib/efreet/efreet.c
+src/lib/efreet/efreet_desktop_command.c
+src/lib/efreet/efreet_desktop.c
+src/lib/ecore_audio/ecore_audio_obj_out.c
+src/lib/ecore_audio/ecore_audio_obj.c
+src/lib/ecore_audio/ecore_audio_obj_out_wasapi.c
+src/lib/ecore_audio/ecore_audio_obj_in.c
+src/lib/ecore_audio/ecore_audio_obj_in_tone.c
+src/lib/ecore_audio/ecore_audio_custom.c
+src/lib/ecore_audio/ecore_audio_alsa.c
+src/lib/ecore_audio/ecore_audio_obj_out_pulse.c
+src/lib/ecore_audio/ecore_audio.c
+src/lib/ecore_audio/ecore_audio_sndfile_vio.c
+src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c
+src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c
+src/lib/ecore_audio/ecore_audio_pulse_ml.c
+src/lib/ecore_audio/ecore_audio_pulse.c
+src/lib/ecore_ipc/ecore_ipc.c
+src/lib/evas/cache/evas_cache_image.c
+src/lib/evas/cache/evas_cache_engine_image.c
+src/lib/evas/cache/evas_preload.c
+src/lib/evas/common/evas_image_save.c
+src/lib/evas/common/evas_convert_gry_1.c
+src/lib/evas/common/evas_op_blend/op_blend_color_neon.c
+src/lib/evas/common/evas_op_blend/op_blend_master_sse3.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_color_sse3.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_mask_i386.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_color_i386.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_.c
+src/lib/evas/common/evas_op_blend/op_blend_mask_color_.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_mask_sse3.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_sse3.c
+src/lib/evas/common/evas_op_blend/op_blend_color_sse3.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_mask_.c
+src/lib/evas/common/evas_op_blend/op_blend_color_i386.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_mask_neon.c
+src/lib/evas/common/evas_op_blend/op_blend_mask_color_i386.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_color_neon.c
+src/lib/evas/common/evas_op_blend/op_blend_mask_color_neon.c
+src/lib/evas/common/evas_op_blend/op_blend_color_.c
+src/lib/evas/common/evas_op_blend/op_blend_mask_color_sse3.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_i386.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_neon.c
+src/lib/evas/common/evas_op_blend/op_blend_pixel_color_.c
+src/lib/evas/common/evas_image_scalecache.c
+src/lib/evas/common/evas_op_mul/op_mul_pixel_color_.c
+src/lib/evas/common/evas_op_mul/op_mul_mask_color_.c
+src/lib/evas/common/evas_op_mul/op_mul_pixel_.c
+src/lib/evas/common/evas_op_mul/op_mul_color_.c
+src/lib/evas/common/evas_op_mul/op_mul_color_i386.c
+src/lib/evas/common/evas_op_mul/op_mul_pixel_i386.c
+src/lib/evas/common/evas_op_mul/op_mul_pixel_mask_.c
+src/lib/evas/common/evas_op_mul/op_mul_pixel_color_i386.c
+src/lib/evas/common/evas_op_mul/op_mul_pixel_mask_i386.c
+src/lib/evas/common/evas_op_mul/op_mul_mask_color_i386.c
+src/lib/evas/common/evas_font_draw.c
+src/lib/evas/common/evas_scale_smooth_scaler_downx.c
+src/lib/evas/common/evas_image_load.c
+src/lib/evas/common/evas_map_image.c
+src/lib/evas/common/evas_polygon_main.c
+src/lib/evas/common/evas_scale_smooth_scaler_down.c
+src/lib/evas/common/evas_op_sub_main_.c
+src/lib/evas/common/evas_op_mul_main_.c
+src/lib/evas/common/evas_op_add/op_add_pixel_mask_i386.c
+src/lib/evas/common/evas_op_add/op_add_pixel_.c
+src/lib/evas/common/evas_op_add/op_add_mask_color_i386.c
+src/lib/evas/common/evas_op_add/op_add_pixel_mask_.c
+src/lib/evas/common/evas_op_add/op_add_pixel_i386.c
+src/lib/evas/common/evas_op_add/op_add_color_.c
+src/lib/evas/common/evas_op_add/op_add_mask_color_.c
+src/lib/evas/common/evas_op_add/op_add_pixel_color_.c
+src/lib/evas/common/evas_op_add/op_add_pixel_color_i386.c
+src/lib/evas/common/evas_op_add/op_add_color_i386.c
+src/lib/evas/common/evas_map_image_internal.c
+src/lib/evas/common/evas_image_data.c
+src/lib/evas/common/evas_map_image_internal_high.c
+src/lib/evas/common/evas_map_image_core.c
+src/lib/evas/common/evas_scale_smooth_scaler_downx_downy.c
+src/lib/evas/common/evas_convert_colorspace.c
+src/lib/evas/common/evas_map_image_loop.c
+src/lib/evas/common/evas_scale_smooth_scaler.c
+src/lib/evas/common/evas_scale_smooth_scaler_noscale.c
+src/lib/evas/common/evas_scale_smooth.c
+src/lib/evas/common/evas_convert_rgb_8.c
+src/lib/evas/common/evas_rectangle_main.c
+src/lib/evas/common/evas_convert_rgb_16.c
+src/lib/evas/common/evas_blend_main.c
+src/lib/evas/common/evas_convert_color.c
+src/lib/evas/common/evas_font_query.c
+src/lib/evas/common/evas_scale_main.c
+src/lib/evas/common/evas_op_mask_main_.c
+src/lib/evas/common/evas_draw_main.c
+src/lib/evas/common/evas_op_add_main_.c
+src/lib/evas/common/evas_convert_main.c
+src/lib/evas/common/evas_op_copy_main_.c
+src/lib/evas/common/evas_font_compress_draw.c
+src/lib/evas/common/evas_op_blend_main_.c
+src/lib/evas/common/evas_common_generic_cache.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_color_neon.c
+src/lib/evas/common/evas_op_copy/op_copy_mask_color_.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_i386.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_neon.c
+src/lib/evas/common/evas_op_copy/op_copy_color_i386.c
+src/lib/evas/common/evas_op_copy/op_copy_color_neon.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_i386.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_neon.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_color_.c
+src/lib/evas/common/evas_op_copy/op_copy_mask_color_neon.c
+src/lib/evas/common/evas_op_copy/op_copy_color_.c
+src/lib/evas/common/evas_op_copy/op_copy_mask_color_i386.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_.c
+src/lib/evas/common/evas_op_copy/op_copy_pixel_color_i386.c
+src/lib/evas/common/evas_convert_rgb_24.c
+src/lib/evas/common/evas_op_mask/op_mask_pixel_mask_i386.c
+src/lib/evas/common/evas_op_mask/op_mask_pixel_color_i386.c
+src/lib/evas/common/evas_op_mask/op_mask_pixel_mask_.c
+src/lib/evas/common/evas_op_mask/op_mask_mask_color_i386.c
+src/lib/evas/common/evas_op_mask/op_mask_mask_color_.c
+src/lib/evas/common/evas_op_mask/op_mask_pixel_.c
+src/lib/evas/common/evas_op_mask/op_mask_pixel_color_.c
+src/lib/evas/common/evas_op_mask/op_mask_pixel_i386.c
+src/lib/evas/common/evas_op_mask/op_mask_color_.c
+src/lib/evas/common/evas_op_mask/op_mask_color_i386.c
+src/lib/evas/common/evas_cpu.c
+src/lib/evas/common/evas_font_load.c
+src/lib/evas/common/evas_op_sub/op_sub_pixel_color_i386.c
+src/lib/evas/common/evas_op_sub/op_sub_pixel_i386.c
+src/lib/evas/common/evas_op_sub/op_sub_color_.c
+src/lib/evas/common/evas_op_sub/op_sub_mask_color_i386.c
+src/lib/evas/common/evas_op_sub/op_sub_pixel_mask_i386.c
+src/lib/evas/common/evas_op_sub/op_sub_pixel_color_.c
+src/lib/evas/common/evas_op_sub/op_sub_mask_color_.c
+src/lib/evas/common/evas_op_sub/op_sub_color_i386.c
+src/lib/evas/common/evas_op_sub/op_sub_pixel_mask_.c
+src/lib/evas/common/evas_op_sub/op_sub_pixel_.c
+src/lib/evas/common/evas_text_utils.c
+src/lib/evas/common/evas_font_compress.c
+src/lib/evas/common/region.c
+src/lib/evas/common/evas_scale_smooth_scaler_up.c
+src/lib/evas/common/evas_blit_main.c
+src/lib/evas/common/evas_thread_render.c
+src/lib/evas/common/evas_convert_gry_8.c
+src/lib/evas/common/evas_scale_sample.c
+src/lib/evas/common/language/evas_bidi_utils.c
+src/lib/evas/common/language/evas_language_utils.c
+src/lib/evas/common/evas_scale_span.c
+src/lib/evas/common/evas_image_main.c
+src/lib/evas/common/evas_scale_smooth_scaler_downy.c
+src/lib/evas/common/evas_convert_yuv.c
+src/lib/evas/common/evas_font_ot.c
+src/lib/evas/common/evas_font_main.c
+src/lib/evas/common/evas_convert_grypal_6.c
+src/lib/evas/common/evas_tiler.c
+src/lib/evas/common/evas_line_main.c
+src/lib/evas/common/evas_convert_rgb_32.c
+src/lib/evas/common/evas_pipe.c
+src/lib/evas/main.c
+src/lib/evas/canvas/evas_rectangle.c
+src/lib/evas/canvas/efl_canvas_surface_x11.c
+src/lib/evas/canvas/evas_filter_mixin.c
+src/lib/evas/canvas/evas_stats.c
+src/lib/evas/canvas/evas_key.c
+src/lib/evas/canvas/evas_table_eo.c
+src/lib/evas/canvas/evas_object_intercept.c
+src/lib/evas/canvas/efl_canvas_vg_gradient.c
+src/lib/evas/canvas/evas_grid_eo.c
+src/lib/evas/canvas/efl_canvas_rotate_animation.c
+src/lib/evas/canvas/evas_map.c
+src/lib/evas/canvas/efl_canvas_translate_animation.c
+src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.c
+src/lib/evas/canvas/efl_canvas_object_eo.legacy.c
+src/lib/evas/canvas/efl_canvas_alpha_animation.c
+src/lib/evas/canvas/evas_object_table.c
+src/lib/evas/canvas/evas_out.c
+src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c
+src/lib/evas/canvas/efl_canvas_event_grabber.c
+src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.c
+src/lib/evas/canvas/evas_object_text.c
+src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.c
+src/lib/evas/canvas/evas_object_inform.c
+src/lib/evas/canvas/efl_canvas_vg_object.c
+src/lib/evas/canvas/evas_object_image.c
+src/lib/evas/canvas/evas_image_eo.c
+src/lib/evas/canvas/evas_image_legacy.c
+src/lib/evas/canvas/efl_canvas_proxy.c
+src/lib/evas/canvas/evas_name.c
+src/lib/evas/canvas/efl_canvas_surface_wayland.c
+src/lib/evas/canvas/efl_canvas_group_eo.legacy.c
+src/lib/evas/canvas/efl_input_event.c
+src/lib/evas/canvas/evas_object_rectangle.c
+src/lib/evas/canvas/efl_gfx_vg_value_provider.c
+src/lib/evas/canvas/evas_object_main.c
+src/lib/evas/canvas/efl_text_formatter.c
+src/lib/evas/canvas/evas_callbacks.c
+src/lib/evas/canvas/evas_font_dir.c
+src/lib/evas/canvas/efl_canvas_vg_shape.c
+src/lib/evas/canvas/evas_grid_eo.legacy.c
+src/lib/evas/canvas/evas_line_eo.c
+src/lib/evas/canvas/evas_object_smart.c
+src/lib/evas/canvas/evas_render.c
+src/lib/evas/canvas/efl_canvas_object_animation.c
+src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.c
+src/lib/evas/canvas/evas_object_line.c
+src/lib/evas/canvas/evas_box_eo.legacy.c
+src/lib/evas/canvas/evas_clip.c
+src/lib/evas/canvas/evas_key_grab.c
+src/lib/evas/canvas/efl_canvas_animation.c
+src/lib/evas/canvas/evas_events.c
+src/lib/evas/canvas/efl_canvas_group_animation.c
+src/lib/evas/canvas/evas_object_textblock.c
+src/lib/evas/canvas/evas_device.c
+src/lib/evas/canvas/efl_input_hold.c
+src/lib/evas/canvas/efl_canvas_vg_image.c
+src/lib/evas/canvas/evas_events_legacy.c
+src/lib/evas/canvas/evas_data.c
+src/lib/evas/canvas/evas_text_eo.legacy.c
+src/lib/evas/canvas/efl_input_device.c
+src/lib/evas/canvas/efl_canvas_scale_animation.c
+src/lib/evas/canvas/efl_canvas_parallel_group_animation.c
+src/lib/evas/canvas/efl_input_key.c
+src/lib/evas/canvas/efl_canvas_vg_node.c
+src/lib/evas/canvas/efl_canvas_surface_tbm.c
+src/lib/evas/canvas/efl_gfx_mapping.c
+src/lib/evas/canvas/efl_input_focus.c
+src/lib/evas/canvas/evas_object_textgrid.c
+src/lib/evas/canvas/evas_canvas_eo.c
+src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.c
+src/lib/evas/canvas/evas_layer.c
+src/lib/evas/canvas/evas_box_eo.c
+src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.c
+src/lib/evas/canvas/evas_line_eo.legacy.c
+src/lib/evas/canvas/evas_focus.c
+src/lib/evas/canvas/evas_touch_point.c
+src/lib/evas/canvas/evas_gl.c
+src/lib/evas/canvas/evas_text_eo.c
+src/lib/evas/canvas/evas_main.c
+src/lib/evas/canvas/evas_object_box.c
+src/lib/evas/canvas/efl_input_pointer.c
+src/lib/evas/canvas/efl_canvas_surface.c
+src/lib/evas/canvas/evas_smart.c
+src/lib/evas/canvas/evas_table_eo.legacy.c
+src/lib/evas/canvas/evas_textgrid_eo.c
+src/lib/evas/canvas/efl_canvas_image.c
+src/lib/evas/canvas/efl_canvas_snapshot.c
+src/lib/evas/canvas/evas_object_polygon.c
+src/lib/evas/canvas/evas_textgrid_eo.legacy.c
+src/lib/evas/canvas/efl_text_cursor_object.c
+src/lib/evas/canvas/efl_canvas_vg_container.c
+src/lib/evas/canvas/evas_object_grid.c
+src/lib/evas/canvas/efl_canvas_vg_utils.c
+src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c
+src/lib/evas/canvas/efl_canvas_sequential_group_animation.c
+src/lib/evas/canvas/evas_object_smart_clipped.c
+src/lib/evas/canvas/efl_input_clickable.c
+src/lib/evas/canvas/evas_canvas_eo.legacy.c
+src/lib/evas/canvas/evas_async_events.c
+src/lib/evas/vg/evas_vg_cache.c
+src/lib/evas/gesture/efl_canvas_gesture_triple_tap.c
+src/lib/evas/gesture/efl_canvas_gesture_long_press.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c
+src/lib/evas/gesture/efl_canvas_gesture_double_tap.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c
+src/lib/evas/gesture/efl_canvas_gesture_flick.c
+src/lib/evas/gesture/efl_canvas_gesture_touch.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c
+src/lib/evas/gesture/efl_canvas_gesture.c
+src/lib/evas/gesture/efl_canvas_gesture_momentum.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c
+src/lib/evas/gesture/efl_canvas_gesture_rotate.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c
+src/lib/evas/gesture/efl_canvas_gesture_custom.c
+src/lib/evas/gesture/efl_canvas_gesture_tap.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c
+src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.c
+src/lib/evas/gesture/efl_canvas_gesture_manager.c
+src/lib/evas/gesture/efl_canvas_gesture_zoom.c
+src/lib/evas/filters/evas_filter_parser.c
+src/lib/evas/filters/evas_filter.c
+src/lib/evas/filters/evas_filter_utils.c
+src/lib/evas/file/evas_module.c
+src/lib/evas/file/evas_path.c
+src/lib/ecore_file/ecore_file_download.c
+src/lib/ecore_file/ecore_file_monitor_win32.c
+src/lib/ecore_file/ecore_file_path.c
+src/lib/ecore_file/ecore_file_monitor_inotify.c
+src/lib/ecore_file/ecore_file_monitor_poll.c
+src/lib/ecore_file/ecore_file_monitor.c
+src/lib/ecore_file/ecore_file.c
+src/lib/ecore_drm/ecore_drm_fb.c
+src/lib/ecore_drm/ecore_drm_tty.c
+src/lib/ecore_drm/ecore_drm_evdev.c
+src/lib/ecore_drm/ecore_drm_logind.c
+src/lib/ecore_drm/ecore_drm_device.c
+src/lib/ecore_drm/ecore_drm.c
+src/lib/ecore_drm/ecore_drm_dbus.c
+src/lib/ecore_drm/ecore_drm_sprites.c
+src/lib/ecore_drm/ecore_drm_output.c
+src/lib/ecore_drm/ecore_drm_launcher.c
+src/lib/ecore_drm/ecore_drm_inputs.c
+src/lib/emotion/efl_canvas_video_eo.legacy.c
+src/lib/emotion/emotion_webcam.c
+src/lib/emotion/emotion_main.c
+src/lib/emotion/emotion_smart.c
+src/lib/emotion/emotion_modules.c
+src/lib/elementary/efl_ui_radio_box.c
+src/lib/elementary/efl_ui_frame.c
+src/lib/elementary/elm_slideshow.c
+src/lib/elementary/elm_access.c
+src/lib/elementary/efl_ui_win.c
+src/lib/elementary/efl_ui_panes.c
+src/lib/elementary/elm_dayselector_item_eo.c
+src/lib/elementary/efl_ui_focus_manager_root_focus.c
+src/lib/elementary/elm_code_widget_text.c
+src/lib/elementary/elm_util.c
+src/lib/elementary/elm_code_widget_eo.legacy.c
+src/lib/elementary/elm_prefs.c
+src/lib/elementary/elm_calendar_item_eo.c
+src/lib/elementary/elm_view_form_eo.c
+src/lib/elementary/elm_fileselector_button_eo.c
+src/lib/elementary/elm_pan_eo.legacy.c
+src/lib/elementary/efl_ui_tab_pager.c
+src/lib/elementary/efl_ui_separator.c
+src/lib/elementary/elm_web_eo.legacy.c
+src/lib/elementary/efl_ui_view_model.c
+src/lib/elementary/elm_fileselector_eo.legacy.c
+src/lib/elementary/elm_main.c
+src/lib/elementary/elm_code_widget_legacy_eo.c
+src/lib/elementary/elm_grid_eo.legacy.c
+src/lib/elementary/elm_gesture_layer.c
+src/lib/elementary/elm_sys_notify_eo.legacy.c
+src/lib/elementary/elm_player_eo.c
src/lib/elementary/elc_hoversel.c
-src/lib/elementary/elc_multibuttonentry.c
-src/lib/elementary/elc_naviframe.c
+src/lib/elementary/efl_ui_scroll_manager.c
+src/lib/elementary/efl_ui_bg_legacy_eo.c
+src/lib/elementary/elm_diskselector_eo.legacy.c
+src/lib/elementary/efl_ui_widget_common.c
+src/lib/elementary/elm_sys_notify_interface_eo.c
+src/lib/elementary/efl_ui_frame_legacy_eo.c
+src/lib/elementary/elm_code_indent.c
+src/lib/elementary/efl_ui_widget.c
+src/lib/elementary/efl_ui_layout_legacy_eo.c
+src/lib/elementary/elm_atspi_bridge.c
+src/lib/elementary/elm_list_eo.legacy.c
+src/lib/elementary/efl_ui_win_inlined_legacy_eo.c
+src/lib/elementary/efl_ui_image_zoomable_eo.legacy.c
+src/lib/elementary/elm_flipselector_eo.legacy.c
+src/lib/elementary/elm_entry_eo.legacy.c
+src/lib/elementary/elm_slider.c
+src/lib/elementary/elm_naviframe_item_eo.legacy.c
+src/lib/elementary/elm_map_eo.legacy.c
+src/lib/elementary/elm_cnp.c
src/lib/elementary/elc_player.c
+src/lib/elementary/efl_ui_spotlight_plain_manager.c
+src/lib/elementary/elm_plug.c
+src/lib/elementary/efl_ui_slider.c
+src/lib/elementary/elm_code.c
+src/lib/elementary/elm_menu_item_eo.legacy.c
+src/lib/elementary/elm_slider_eo.c
+src/lib/elementary/efl_access_text.c
+src/lib/elementary/efl_ui_spotlight_animation_manager.c
+src/lib/elementary/els_cursor.c
+src/lib/elementary/elm_toolbar_item_eo.legacy.c
+src/lib/elementary/efl_ui_vg_animation.c
+src/lib/elementary/elm_notify_eo.c
+src/lib/elementary/efl_access_value.c
+src/lib/elementary/efl_ui_panes_eo.legacy.c
+src/lib/elementary/elm_sys_notify.c
+src/lib/elementary/elm_pan_eo.c
+src/lib/elementary/elm_code_line.c
+src/lib/elementary/efl_ui_datepicker.c
+src/lib/elementary/efl_ui_win_inlined.c
+src/lib/elementary/elm_helper.c
+src/lib/elementary/elm_sys_notify_interface.c
+src/lib/elementary/efl_ui_slider_interval.c
+src/lib/elementary/efl_ui_box_layout.c
+src/lib/elementary/elm_diskselector_eo.c
+src/lib/elementary/elm_clock_eo.legacy.c
+src/lib/elementary/efl_ui_spin.c
+src/lib/elementary/elm_spinner_eo.c
+src/lib/elementary/efl_ui_spotlight_fade_manager.c
+src/lib/elementary/elm_menu_item_eo.c
+src/lib/elementary/efl_ui_textbox.c
+src/lib/elementary/elm_list_eo.c
+src/lib/elementary/efl_ui_table.c
+src/lib/elementary/efl_ui_focus_object.c
+src/lib/elementary/efl_ui_flip.c
+src/lib/elementary/elm_segment_control_item_eo.c
+src/lib/elementary/elm_factory.c
+src/lib/elementary/elm_widget_item_eo.legacy.c
+src/lib/elementary/elm_calendar_eo.c
+src/lib/elementary/efl_ui_list_view.c
+src/lib/elementary/elu_ews_wm.c
+src/lib/elementary/elm_plug_eo.legacy.c
+src/lib/elementary/efl_ui_focus_manager_calc.c
+src/lib/elementary/elm_code_syntax.c
+src/lib/elementary/efl_ui_scroll_util.c
+src/lib/elementary/elm_atspi_bridge_eo.c
+src/lib/elementary/elm_icon.c
+src/lib/elementary/elm_separator_eo.c
+src/lib/elementary/efl_ui_box_stack.c
+src/lib/elementary/elm_toolbar.c
+src/lib/elementary/efl_ui_focus_util.c
+src/lib/elementary/efl_ui_list.c
+src/lib/elementary/efl_ui_exact_model.c
+src/lib/elementary/elm_view_list.c
+src/lib/elementary/efl_ui_radio_eo.legacy.c
+src/lib/elementary/elm_interface_scrollable.c
+src/lib/elementary/elm_box_eo.c
+src/lib/elementary/elm_dayselector_eo.legacy.c
+src/lib/elementary/elm_table_eo.c
+src/lib/elementary/efl_ui_video_legacy_eo.c
+src/lib/elementary/elm_map_eo.c
+src/lib/elementary/efl_ui_internal_text_interactive.c
+src/lib/elementary/efl_ui_collection_view.c
+src/lib/elementary/efl_ui_focus_parent_provider_gen_eo.c
+src/lib/elementary/elm_bubble_eo.c
+src/lib/elementary/efl_ui_spin_button.c
+src/lib/elementary/efl_ui_homogeneous_model.c
+src/lib/elementary/elm_colorselector_eo.legacy.c
+src/lib/elementary/efl_ui_textpath.c
+src/lib/elementary/efl_ui_tab_bar.c
+src/lib/elementary/elm_fileselector_entry_eo.c
+src/lib/elementary/efl_ui_win_socket_legacy_eo.c
+src/lib/elementary/efl_ui_action_connector.c
+src/lib/elementary/efl_ui_select_model.c
+src/lib/elementary/elm_code_file.c
+src/lib/elementary/elm_atspi_app_object_eo.c
+src/lib/elementary/efl_ui_dnd.c
+src/lib/elementary/efl_ui_layout.c
+src/lib/elementary/elm_scroller_eo.legacy.c
+src/lib/elementary/elm_multibuttonentry_item_eo.c
+src/lib/elementary/efl_ui_textpath_legacy_eo.c
+src/lib/elementary/elc_multibuttonentry.c
+src/lib/elementary/elm_actionslider.c
+src/lib/elementary/elm_systray.c
+src/lib/elementary/efl_access_editable_text.c
+src/lib/elementary/elm_thumb.c
+src/lib/elementary/efl_ui_button_legacy_eo.c
+src/lib/elementary/elm_sys_notify_dbus_eo.c
+src/lib/elementary/elm_genlist_item_eo.c
+src/lib/elementary/elm_clock_eo.c
src/lib/elementary/elc_popup.c
+src/lib/elementary/elm_list_item_eo.legacy.c
+src/lib/elementary/efl_ui_grid_view.c
+src/lib/elementary/elm_label_eo.legacy.c
+src/lib/elementary/elm_gengrid_item_eo.c
+src/lib/elementary/efl_ui_focus_parent_provider_gen.c
+src/lib/elementary/elc_fileselector_button.c
+src/lib/elementary/elm_index_eo.c
+src/lib/elementary/elm_web_eo.c
+src/lib/elementary/elm_sys_notify_eo.c
src/lib/elementary/elc_scrolled_entry.c
-src/lib/elementary/elm_access.c
-src/lib/elementary/elm_actionslider.c
-src/lib/elementary/efl_ui_bg.c
-src/lib/elementary/elm_box.c
-src/lib/elementary/elm_bubble.c
-src/lib/elementary/efl_ui_button.c
-src/lib/elementary/elm_calendar.c
-src/lib/elementary/efl_ui_calendar.c
-src/lib/elementary/efl_ui_check.c
-src/lib/elementary/elm_clock.c
src/lib/elementary/elm_colorselector.c
-src/lib/elementary/elm_config.c
-src/lib/elementary/elm_conform.c
-src/lib/elementary/elm_datetime.c
+src/lib/elementary/elm_menu_eo.legacy.c
+src/lib/elementary/elm_ctxpopup_eo.legacy.c
+src/lib/elementary/efl_ui_panel.c
+src/lib/elementary/efl_ui_textpath_eo.legacy.c
+src/lib/elementary/elm_clock.c
+src/lib/elementary/efl_ui_image_zoomable_legacy_eo.c
+src/lib/elementary/elm_menu_eo.c
+src/lib/elementary/elm_photo.c
src/lib/elementary/elm_dayselector.c
-src/lib/elementary/elm_dbus_menu.c
-src/lib/elementary/elm_diskselector.c
+src/lib/elementary/efl_ui_focus_manager.c
+src/lib/elementary/elm_theme.c
+src/lib/elementary/efl_ui_default_item.c
+src/lib/elementary/elm_calendar_eo.legacy.c
+src/lib/elementary/elm_color_item_eo.legacy.c
+src/lib/elementary/efl_ui_clock.c
+src/lib/elementary/elm_scroller.c
+src/lib/elementary/elm_naviframe_eo.legacy.c
+src/lib/elementary/elm_multibuttonentry_eo.c
+src/lib/elementary/efl_ui_position_manager_list.c
+src/lib/elementary/efl_ui_popup.c
+src/lib/elementary/elm_transit.c
+src/lib/elementary/elm_ctxpopup_eo.c
src/lib/elementary/elm_entry.c
-src/lib/elementary/elm_factory.c
-src/lib/elementary/efl_ui_flip.c
-src/lib/elementary/elm_flipselector.c
-src/lib/elementary/elm_font.c
-src/lib/elementary/efl_ui_frame.c
-src/lib/elementary/elm_gengrid.c
-src/lib/elementary/elm_genlist.c
-src/lib/elementary/elm_gesture_layer.c
-src/lib/elementary/elm_glview.c
+src/lib/elementary/efl_ui_table_static.c
+src/lib/elementary/efl_ui_widget_scrollable_content.c
+src/lib/elementary/efl_ui_image_factory.c
src/lib/elementary/elm_grid.c
src/lib/elementary/elm_hover.c
-src/lib/elementary/elm_icon.c
-src/lib/elementary/efl_ui_image.c
-src/lib/elementary/elm_index.c
-src/lib/elementary/elm_interface_scrollable.c
-src/lib/elementary/elm_inwin.c
-src/lib/elementary/elm_label.c
-src/lib/elementary/efl_ui_layout.c
-src/lib/elementary/elm_list.c
-src/lib/elementary/elm_main.c
-src/lib/elementary/elm_map.c
-src/lib/elementary/elm_mapbuf.c
-src/lib/elementary/elm_menu.c
-src/lib/elementary/elm_module.c
-src/lib/elementary/elm_notify.c
-src/lib/elementary/elm_panel.c
-src/lib/elementary/efl_ui_panes.c
-src/lib/elementary/elm_photo.c
-src/lib/elementary/efl_ui_image_zoomable.c
-src/lib/elementary/elm_plug.c
-src/lib/elementary/elm_prefs.c
-src/lib/elementary/elm_prefs_data.c
-src/lib/elementary/efl_ui_progressbar.c
-src/lib/elementary/efl_ui_radio.c
-src/lib/elementary/elm_route.c
-src/lib/elementary/elm_scroller.c
-src/lib/elementary/elm_segment_control.c
-src/lib/elementary/elm_separator.c
-src/lib/elementary/efl_ui_slider.c
-src/lib/elementary/efl_ui_slider_interval.c
-src/lib/elementary/elm_slideshow.c
+src/lib/elementary/efl_access_window.c
+src/lib/elementary/efl_datetime_manager.c
+src/lib/elementary/elm_code_widget.c
+src/lib/elementary/elm_genlist.c
+src/lib/elementary/elm_gengrid.c
+src/lib/elementary/efl_ui_win_socket.c
+src/lib/elementary/elm_slideshow_item_eo.legacy.c
+src/lib/elementary/elm_table_eo.legacy.c
+src/lib/elementary/elm_dayselector_eo.c
+src/lib/elementary/elm_gesture_layer_eo.c
+src/lib/elementary/elc_naviframe.c
src/lib/elementary/elm_spinner.c
+src/lib/elementary/elm_panel_eo.c
+src/lib/elementary/efl_access_action.c
+src/lib/elementary/elm_code_widget_selection.c
+src/lib/elementary/efl_ui_focus_composition.c
+src/lib/elementary/elm_calendar.c
+src/lib/elementary/elm_mapbuf_eo.legacy.c
+src/lib/elementary/efl_ui_text_factory_fallback.c
+src/lib/elementary/elm_naviframe_eo.c
+src/lib/elementary/efl_ui_layout_pack.c
+src/lib/elementary/efl_ui_text_factory_images.c
+src/lib/elementary/elm_popup_eo.c
+src/lib/elementary/elm_segment_control.c
+src/lib/elementary/elm_entry_eo.c
+src/lib/elementary/efl_ui_progressbar.c
+src/lib/elementary/efl_ui_text_factory_emoticons.c
+src/lib/elementary/elm_glview_eo.c
+src/lib/elementary/elc_fileselector_entry.c
+src/lib/elementary/efl_ui_internal_text_scroller.c
+src/lib/elementary/elm_hoversel_item_eo.legacy.c
+src/lib/elementary/elm_sys_notify_interface_eo.legacy.c
+src/lib/elementary/elm_plug_eo.c
+src/lib/elementary/elm_genlist_item_eo.legacy.c
+src/lib/elementary/elm_code_diff_widget.c
+src/lib/elementary/elm_interface_fileselector.c
+src/lib/elementary/efl_ui_widget_factory.c
+src/lib/elementary/efl_ui_focus_parent_provider_standard.c
+src/lib/elementary/elm_scroller_eo.c
+src/lib/elementary/efl_ui_image_zoomable.c
+src/lib/elementary/elm_bubble_eo.legacy.c
+src/lib/elementary/efl_ui_vg_animation_eo.legacy.c
+src/lib/elementary/elm_module.c
+src/lib/elementary/efl_ui_scroller.c
+src/lib/elementary/elm_toolbar_eo.c
+src/lib/elementary/efl_ui_focus_manager_sub.c
+src/lib/elementary/efl_ui_layout_factory.c
+src/lib/elementary/efl_ui_group_item.c
+src/lib/elementary/elm_widget_item_eo.c
+src/lib/elementary/efl_ui_panes_legacy_eo.c
src/lib/elementary/elm_store.c
-src/lib/elementary/elm_sys_notify.c
-src/lib/elementary/elm_systray.c
+src/lib/elementary/efl_ui_radio.c
+src/lib/elementary/elm_gengrid_eo.legacy.c
+src/lib/elementary/elm_gengrid_pan_eo.c
+src/lib/elementary/efl_ui_position_manager_entity.c
+src/lib/elementary/elm_index_item_eo.c
+src/lib/elementary/efl_ui_list_default_item.c
+src/lib/elementary/efl_ui_calendar.c
+src/lib/elementary/elm_genlist_pan_eo.c
+src/lib/elementary/elm_slideshow_eo.c
+src/lib/elementary/elm_multibuttonentry_eo.legacy.c
+src/lib/elementary/elm_prefs_eo.c
src/lib/elementary/elm_systray_watcher.c
+src/lib/elementary/elm_notify.c
+src/lib/elementary/elm_view_list_eo.c
+src/lib/elementary/elm_mapbuf_eo.c
+src/lib/elementary/efl_ui_focus_layer.c
+src/lib/elementary/efl_ui_item.c
+src/lib/elementary/efl_ui_image.c
+src/lib/elementary/efl_ui_stack.c
+src/lib/elementary/elm_flipselector_eo.c
+src/lib/elementary/efl_ui_widget_focus_manager.c
+src/lib/elementary/elm_slider_part_indicator_eo.c
+src/lib/elementary/elm_flipselector.c
+src/lib/elementary/efl_ui_widget_eo.legacy.c
+src/lib/elementary/elm_index_item_eo.legacy.c
+src/lib/elementary/elm_interface_fileselector_eo.c
+src/lib/elementary/efl_ui_selection.c
+src/lib/elementary/elm_prefs_data.c
+src/lib/elementary/elm_diskselector_item_eo.legacy.c
+src/lib/elementary/efl_access_component.c
+src/lib/elementary/elm_gengrid_eo.c
+src/lib/elementary/elm_atspi_bridge_eo.legacy.c
+src/lib/elementary/efl_ui_box_flow.c
+src/lib/elementary/efl_ui_collection.c
+src/lib/elementary/efl_ui_video_eo.legacy.c
+src/lib/elementary/efl_ui_list_placeholder_item.c
+src/lib/elementary/elm_inwin_eo.legacy.c
src/lib/elementary/elm_table.c
-src/lib/elementary/elm_theme.c
-src/lib/elementary/elm_thumb.c
-src/lib/elementary/elm_toolbar.c
-src/lib/elementary/elm_transit.c
-src/lib/elementary/elm_util.c
+src/lib/elementary/efl_ui_caching_factory.c
+src/lib/elementary/elm_colorselector_eo.c
+src/lib/elementary/elm_grid_eo.c
+src/lib/elementary/efl_ui_container_layout.c
+src/lib/elementary/efl_ui_spotlight_manager.c
+src/lib/elementary/elm_fileselector_eo.c
+src/lib/elementary/elm_hover_eo.legacy.c
+src/lib/elementary/efl_ui_tags.c
+src/lib/elementary/efl_ui_table_layout.c
+src/lib/elementary/elm_box.c
+src/lib/elementary/elm_actionslider_eo.c
+src/lib/elementary/elm_systray_eo.c
+src/lib/elementary/elm_code_text.c
+src/lib/elementary/elm_prefs_eo.legacy.c
+src/lib/elementary/efl_ui_spotlight_container.c
+src/lib/elementary/efl_ui_relative_container.c
+src/lib/elementary/elm_glview_eo.legacy.c
+src/lib/elementary/elm_datetime.c
+src/lib/elementary/elm_slideshow_eo.legacy.c
+src/lib/elementary/efl_ui_focus_graph.c
+src/lib/elementary/efl_ui_pan.c
+src/lib/elementary/efl_ui_spotlight_util.c
+src/lib/elementary/efl_ui_image_legacy_eo.c
+src/lib/elementary/elm_atspi_app_object.c
+src/lib/elementary/efl_ui_tab_page.c
+src/lib/elementary/efl_ui_legacy.c
+src/lib/elementary/elm_ctxpopup_item_eo.c
+src/lib/elementary/efl_ui_radio_legacy_eo.c
+src/lib/elementary/elm_inwin_eo.c
+src/lib/elementary/elm_gengrid_item_eo.legacy.c
+src/lib/elementary/elm_panel.c
+src/lib/elementary/efl_ui_check_eo.legacy.c
+src/lib/elementary/elm_bubble.c
+src/lib/elementary/elm_widget_item_static_focus.c
+src/lib/elementary/elm_route_eo.c
+src/lib/elementary/elc_ctxpopup.c
+src/lib/elementary/elm_gesture_layer_eo.legacy.c
+src/lib/elementary/elm_icon_eo.c
+src/lib/elementary/elm_genlist_eo.c
+src/lib/elementary/elm_toolbar_eo.legacy.c
+src/lib/elementary/elm_list_item_eo.c
+src/lib/elementary/els_tooltip.c
+src/lib/elementary/elm_conform.c
+src/lib/elementary/elm_popup_item_eo.c
+src/lib/elementary/elm_hoversel_eo.legacy.c
+src/lib/elementary/efl_ui_timepicker.c
+src/lib/elementary/elm_segment_control_item_eo.legacy.c
+src/lib/elementary/elm_glview.c
+src/lib/elementary/elm_focus_legacy.c
+src/lib/elementary/elc_combobox.c
+src/lib/elementary/elm_box_eo.legacy.c
+src/lib/elementary/elc_fileselector.c
+src/lib/elementary/elm_color_item_eo.c
+src/lib/elementary/efl_ui_radio_group_impl.c
+src/lib/elementary/elm_route_eo.legacy.c
+src/lib/elementary/efl_ui_grid.c
+src/lib/elementary/efl_ui_focus_parent_provider.c
+src/lib/elementary/elm_dbus_menu.c
+src/lib/elementary/efl_ui_navigation_bar.c
+src/lib/elementary/elm_dnd.c
+src/lib/elementary/elm_index_eo.legacy.c
+src/lib/elementary/efl_ui_tab_bar_default_item.c
+src/lib/elementary/elm_color_class.c
+src/lib/elementary/elm_config.c
+src/lib/elementary/elm_slideshow_item_eo.c
+src/lib/elementary/efl_ui_spotlight_icon_indicator.c
+src/lib/elementary/elm_segment_control_eo.legacy.c
+src/lib/elementary/elm_inwin.c
src/lib/elementary/efl_ui_video.c
+src/lib/elementary/elm_toolbar_item_eo.c
+src/lib/elementary/elm_segment_control_eo.c
+src/lib/elementary/efl_ui_grid_default_item.c
+src/lib/elementary/elm_flipselector_item_eo.c
+src/lib/elementary/efl_ui_check.c
+src/lib/elementary/elm_diskselector.c
+src/lib/elementary/efl_ui_bg.c
+src/lib/elementary/elm_spinner_eo.legacy.c
+src/lib/elementary/elm_mapbuf.c
+src/lib/elementary/efl_access_widget_action.c
+src/lib/elementary/elm_font.c
+src/lib/elementary/elm_label.c
+src/lib/elementary/elm_menu.c
+src/lib/elementary/efl_ui_box.c
+src/lib/elementary/elm_map_pan_eo.c
+src/lib/elementary/efl_ui_pager.c
+src/lib/elementary/efl_ui_frame_eo.legacy.c
+src/lib/elementary/efl_ui_position_manager_grid.c
+src/lib/elementary/elm_genlist_eo.legacy.c
+src/lib/elementary/elm_naviframe_item_eo.c
+src/lib/elementary/elm_label_eo.c
+src/lib/elementary/efl_access_selection.c
+src/lib/elementary/efl_ui_progressbar_legacy_eo.c
+src/lib/elementary/efl_ui_size_model.c
src/lib/elementary/elm_web2.c
-src/lib/elementary/efl_ui_widget.c
-src/lib/elementary/efl_ui_win.c
+src/lib/elementary/elm_map.c
+src/lib/elementary/elm_actionslider_eo.legacy.c
+src/lib/elementary/elm_thumb_eo.c
+src/lib/elementary/elm_code_parse.c
+src/lib/elementary/elm_panel_eo.legacy.c
+src/lib/elementary/elm_gesture_layer_extra_gestures.c
+src/lib/elementary/elm_index.c
+src/lib/elementary/efl_ui_button.c
+src/lib/elementary/elm_diskselector_item_eo.c
+src/lib/elementary/elm_flipselector_item_eo.legacy.c
+src/lib/elementary/elm_sys_notify_dbus.c
+src/lib/elementary/efl_ui_average_model.c
+src/lib/elementary/elm_separator.c
+src/lib/elementary/elm_hoversel_item_eo.c
+src/lib/elementary/elm_view_form.c
+src/lib/elementary/elm_code_widget_undo.c
+src/lib/elementary/efl_ui_alert_popup.c
+src/lib/elementary/elm_systray_eo.legacy.c
+src/lib/elementary/efl_ui_spotlight_indicator.c
+src/lib/elementary/elm_notify_eo.legacy.c
+src/lib/elementary/efl_access_object.c
+src/lib/elementary/efl_ui_check_legacy_eo.c
+src/lib/elementary/efl_ui_flip_legacy_eo.c
src/lib/elementary/els_box.c
-src/lib/elementary/els_cursor.c
-src/lib/elementary/els_tooltip.c
-src/lib/elementary/elu_ews_wm.c
-src/modules/elementary/test_entry/mod.c
-src/modules/elementary/test_map/mod.c
+src/lib/elementary/elm_list.c
+src/lib/elementary/elm_widget_item_container_eo.c
+src/lib/elementary/elm_conformant_eo.c
+src/lib/elementary/efl_ui_flip_eo.legacy.c
+src/lib/elementary/elm_multibuttonentry_item_eo.legacy.c
+src/lib/elementary/elm_widget_item_static_focus_eo.c
+src/lib/elementary/efl_ui_format.c
+src/lib/elementary/elm_hover_eo.c
+src/lib/elementary/elm_popup_eo.legacy.c
+src/lib/elementary/elm_route.c
+src/lib/elementary/elm_ctxpopup_item_eo.legacy.c
+src/lib/elementary/efl_ui_win_legacy_eo.c
+src/lib/elementary/elm_hoversel_eo.c
+src/lib/elementary/efl_ui_spotlight_scroll_manager.c
+src/lib/elementary/elm_access_eo.c
+src/lib/elementary/efl_ui_navigation_layout.c
+src/lib/elementary/elm_separator_eo.legacy.c
+src/lib/elementary/elm_photo_eo.c
+src/lib/ecore_drm2/ecore_drm2_fb.c
+src/lib/ecore_drm2/ecore_drm2.c
+src/lib/ecore_drm2/ecore_drm2_plane.c
+src/lib/ecore_drm2/ecore_drm2_outputs.c
+src/lib/ecore_drm2/ecore_drm2_device.c
+src/lib/ecore_imf_evas/ecore_imf_evas.c
+src/lib/ecore_buffer/shared_buffer.c
+src/lib/ecore_buffer/ecore_buffer.c
+src/lib/ecore_buffer/ecore_buffer_consumer.c
+src/lib/ecore_buffer/buffer_queue.c
+src/lib/ecore_buffer/ecore_buffer_con.c
+src/lib/ecore_buffer/ecore_buffer_provider.c
+src/lib/ecore_buffer/bq_mgr_protocol.c
+src/lib/ecore_buffer/ecore_buffer_queue_main.c
+src/lib/eeze/eeze_disk_udev.c
+src/lib/eeze/eeze_disk_libmount_new.c
+src/lib/eeze/eeze_sensor.c
+src/lib/eeze/eeze_net.c
+src/lib/eeze/eeze_udev_find.c
+src/lib/eeze/eeze_disk_libmount.c
+src/lib/eeze/eeze_udev_walk.c
+src/lib/eeze/eeze_disk_mount.c
+src/lib/eeze/eeze_disk_libmount_old.c
+src/lib/eeze/eeze_udev_private.c
+src/lib/eeze/eeze_udev_syspath.c
+src/lib/eeze/eeze_disk_dummy.c
+src/lib/eeze/eeze_main.c
+src/lib/eeze/eeze_disk.c
+src/lib/eeze/eeze_udev_watch.c
+src/lib/ector/ector_main.c
+src/lib/ector/ector_renderer_gradient_radial.c
+src/lib/ector/ector_renderer_shape.c
+src/lib/ector/gl/ector_gl_surface.c
+src/lib/ector/gl/ector_gl_shader.c
+src/lib/ector/gl/ector_gl_buffer.c
+src/lib/ector/gl/ector_renderer_gl_shape.c
+src/lib/ector/gl/ector_renderer_gl.c
+src/lib/ector/gl/ector_renderer_gl_gradient_radial.c
+src/lib/ector/gl/ector_renderer_gl_gradient_linear.c
+src/lib/ector/ector_renderer.c
+src/lib/ector/ector_buffer.c
+src/lib/ector/ector_renderer_gradient.c
+src/lib/ector/software/ector_software_gradient_sse3.c
+src/lib/ector/software/ector_renderer_software_gradient_radial.c
+src/lib/ector/software/ector_software_rasterizer.c
+src/lib/ector/software/ector_software_buffer.c
+src/lib/ector/software/ector_software_surface.c
+src/lib/ector/software/ector_software_gradient.c
+src/lib/ector/software/ector_renderer_software_image.c
+src/lib/ector/software/ector_renderer_software_gradient_linear.c
+src/lib/ector/software/ector_renderer_software_shape.c
+src/lib/ector/ector_renderer_gradient_linear.c
+src/lib/ector/ector_renderer_image.c
+src/lib/ethumb_client/ethumb_client.c
+src/lib/ecore_fb/ecore_fb.c
+src/lib/ecore_fb/ecore_fb_ts.c
+src/lib/ecore_fb/ecore_fb_vt.c
+src/lib/ecore_fb/ecore_fb_li.c
+src/lib/elua/io.c
+src/lib/elua/elua.c
+src/lib/elua/cache.c
+src/lib/ethumb/ethumb.c
+src/lib/ethumb/md5.c
+src/lib/ecore_input_evas/ecore_input_evas.c
+src/lib/eina/eina_abi.c
+src/lib/eina/eina_safepointer.c
+src/lib/eina/eina_mmap.c
+src/lib/eina/eina_bezier.c
+src/lib/eina/eina_binbuf.c
+src/lib/eina/eina_vpath_xdg.c
+src/lib/eina/eina_tmpstr.c
+src/lib/eina/eina_hamster.c
+src/lib/eina/eina_quaternion.c
+src/lib/eina/eina_unicode.c
+src/lib/eina/eina_value.c
+src/lib/eina/eina_matrix.c
+src/lib/eina/eina_thread_queue.c
+src/lib/eina/eina_debug_cpu.c
+src/lib/eina/eina_file_common.c
+src/lib/eina/eina_hash.c
+src/lib/eina/eina_freeq.c
+src/lib/eina/eina_debug_chunk.c
+src/lib/eina/eina_crc.c
+src/lib/eina/eina_strbuf.c
+src/lib/eina/eina_cpu.c
+src/lib/eina/eina_quad.c
+src/lib/eina/eina_tiler.c
+src/lib/eina/eina_debug_thread.c
+src/lib/eina/eina_debug_bt_file.c
+src/lib/eina/eina_inlist.c
+src/lib/eina/eina_evlog.c
+src/lib/eina/eina_strbuf_common.c
+src/lib/eina/eina_safety_checks.c
+src/lib/eina/eina_cow.c
+src/lib/eina/eina_error.c
+src/lib/eina/eina_debug_bt.c
+src/lib/eina/eina_ustrbuf.c
+src/lib/eina/eina_debug_timer.c
+src/lib/eina/eina_benchmark.c
+src/lib/eina/eina_accessor.c
+src/lib/eina/eina_magic.c
+src/lib/eina/eina_sched.c
+src/lib/eina/eina_vpath.c
+src/lib/eina/eina_fp.c
+src/lib/eina/eina_convert.c
+src/lib/eina/eina_str.c
+src/lib/eina/eina_iterator.c
+src/lib/eina/eina_list.c
+src/lib/eina/eina_matrixsparse.c
+src/lib/eina/eina_rbtree.c
+src/lib/eina/eina_counter.c
+src/lib/eina/eina_main.c
+src/lib/eina/eina_module.c
+src/lib/eina/eina_binshare.c
+src/lib/eina/eina_debug.c
+src/lib/eina/eina_value_util.c
+src/lib/eina/eina_inarray.c
+src/lib/eina/eina_thread.c
+src/lib/eina/eina_mempool.c
+src/lib/eina/eina_slstr.c
+src/lib/eina/eina_promise.c
+src/lib/eina/eina_lock.c
+src/lib/eina/eina_xattr.c
+src/lib/eina/eina_simple_xml_parser.c
+src/lib/eina/eina_array.c
+src/lib/eina/eina_lalloc.c
+src/lib/eina/eina_file.c
+src/lib/eina/eina_rectangle.c
+src/lib/eina/eina_util.c
+src/lib/eina/eina_file_win32.c
+src/lib/eina/eina_share_common.c
+src/lib/eina/eina_prefix.c
+src/lib/eina/eina_log.c
+src/lib/eina/eina_ustringshare.c
+src/lib/eina/eina_quadtree.c
+src/lib/eina/eina_stringshare.c
+src/lib/eina/eina_abstract_content.c
+src/lib/efl_canvas_wl/dmabuf.c
+src/lib/efl_canvas_wl/efl_canvas_wl.c
+src/lib/evil/evil_dlfcn.c
+src/lib/evil/evil_locale.c
+src/lib/evil/evil_unistd.c
+src/lib/evil/evil_time.c
+src/lib/evil/evil_langinfo.c
+src/lib/evil/evil_string.c
+src/lib/evil/evil_fcntl.c
+src/lib/evil/evil_main.c
+src/lib/evil/evil_util.c
+src/lib/evil/evil_mman.c
+src/lib/evil/evil_stdlib.c
+src/lib/evil/evil_stdio.c
+src/lib/efl/interfaces/efl_model_provider.c
+src/lib/efl/interfaces/efl_io_sizer.c
+src/lib/efl/interfaces/efl_io_closer.c
+src/lib/efl/interfaces/efl_text_markup_util.c
+src/lib/efl/interfaces/efl_gfx_color.c
+src/lib/efl/interfaces/efl_io_writer.c
+src/lib/efl/interfaces/efl_io_buffer.c
+src/lib/efl/interfaces/efl_mvvm_common.c
+src/lib/efl/interfaces/efl_io_queue.c
+src/lib/efl/interfaces/efl_file.c
+src/lib/efl/interfaces/efl_interfaces_main.c
+src/lib/efl/interfaces/efl_ui_layout_orientable_readonly.c
+src/lib/efl/interfaces/efl_io_reader.c
+src/lib/efl/interfaces/efl_gfx_shape.c
+src/lib/efl/interfaces/efl_io_positioner.c
+src/lib/efl/interfaces/efl_observer.c
+src/lib/efl/interfaces/efl_gfx_path.c
+src/lib/eio/eio_monitor.c
+src/lib/eio/efl_io_model.c
+src/lib/eio/eio_file.c
+src/lib/eio/eio_main.c
+src/lib/eio/eio_monitor_win32.c
+src/lib/eio/efl_io_manager.c
+src/lib/eio/eio_eet.c
+src/lib/eio/eio_dir.c
+src/lib/eio/eio_single.c
+src/lib/eio/eio_monitor_poll.c
+src/lib/eio/eio_sentry.c
+src/lib/eio/eio_monitor_inotify.c
+src/lib/eio/eio_monitor_cocoa.c
+src/lib/eio/eio_map.c
+src/lib/eio/eio_xattr.c
+src/lib/eio/eio_monitor_kevent.c
+src/lib/ecore_imf/ecore_imf_module.c
+src/lib/ecore_imf/ecore_imf.c
+src/lib/ecore_imf/ecore_imf_context.c
+src/lib/embryo/embryo_float.c
+src/lib/embryo/embryo_str.c
+src/lib/embryo/embryo_rand.c
+src/lib/embryo/embryo_main.c
+src/lib/embryo/embryo_amx.c
+src/lib/embryo/embryo_time.c
+src/lib/embryo/embryo_args.c
+src/lib/ecore_input/ecore_input_compose.c
+src/lib/ecore_input/ecore_input_joystick.c
+src/lib/ecore_input/ecore_input.c
+src/lib/emile/emile_main.c
+src/lib/emile/emile_base64.c
+src/lib/emile/emile_cipher.c
+src/lib/emile/emile_compress.c
+src/lib/emile/emile_cipher_openssl.c
+src/lib/emile/emile_image.c
+src/lib/emile/emile_cipher_gnutls.c
+src/lib/ecore_x/ecore_x_dnd.c
+src/lib/ecore_x/ecore_x_dpms.c
+src/lib/ecore_x/ecore_x_e.c
+src/lib/ecore_x/ecore_x.c
+src/lib/ecore_x/ecore_x_xinerama.c
+src/lib/ecore_x/ecore_x_sync.c
+src/lib/ecore_x/ecore_x_xi2.c
+src/lib/ecore_x/ecore_x_mwm.c
+src/lib/ecore_x/ecore_x_image.c
+src/lib/ecore_x/ecore_x_selection.c
+src/lib/ecore_x/ecore_x_test.c
+src/lib/ecore_x/ecore_x_events.c
+src/lib/ecore_x/ecore_x_composite.c
+src/lib/ecore_x/ecore_x_randr.c
+src/lib/ecore_x/ecore_x_region.c
+src/lib/ecore_x/ecore_x_error.c
+src/lib/ecore_x/ecore_x_fixes.c
+src/lib/ecore_x/ecore_x_gesture.c
+src/lib/ecore_x/ecore_x_atoms.c
+src/lib/ecore_x/ecore_x_keygrab.c
+src/lib/ecore_x/ecore_x_damage.c
+src/lib/ecore_x/ecore_x_gc.c
+src/lib/ecore_x/ecore_x_cursor.c
+src/lib/ecore_x/ecore_x_drawable.c
+src/lib/ecore_x/ecore_x_window.c
+src/lib/ecore_x/ecore_x_vsync.c
+src/lib/ecore_x/ecore_x_icccm.c
+src/lib/ecore_x/ecore_x_screensaver.c
+src/lib/ecore_x/ecore_x_pixmap.c
+src/lib/ecore_x/ecore_x_present.c
+src/lib/ecore_x/ecore_x_window_shape.c
+src/lib/ecore_x/ecore_x_window_prop.c
+src/lib/ecore_x/ecore_x_netwm.c
+src/lib/ecore_win32/ecore_win32_cursor.c
+src/lib/ecore_win32/ecore_win32_monitor.c
+src/lib/ecore_win32/ecore_win32_window.c
+src/lib/ecore_win32/ecore_win32.c
+src/lib/ecore_win32/ecore_win32_dnd.c
+src/lib/ecore_win32/ecore_win32_event.c
+src/lib/ecore_win32/ecore_win32_clipboard.c
+src/lib/ecore_wl2/ecore_wl2_dnd.c
+src/lib/ecore_wl2/ecore_wl2_window.c
+src/lib/ecore_wl2/ecore_wl2.c
+src/lib/ecore_wl2/ecore_wl2_output.c
+src/lib/ecore_wl2/ecore_wl2_surface.c
+src/lib/ecore_wl2/ecore_wl2_display.c
+src/lib/ecore_wl2/ecore_wl2_buffer.c
+src/lib/ecore_wl2/ecore_wl2_input.c
+src/lib/ecore_wl2/ecore_wl2_subsurf.c
+src/lib/ecore_wayland/xdg-shell-protocol.c
+src/lib/ecore_wayland/ecore_wl_input.c
+src/lib/ecore_wayland/ecore_wl_window.c
+src/lib/ecore_wayland/subsurface-protocol.c
+src/lib/ecore_wayland/ecore_wl_dnd.c
+src/lib/ecore_wayland/ecore_wl_output.c
+src/lib/ecore_wayland/session-recovery-protocol.c
+src/lib/ecore_wayland/ecore_wl.c
+src/lib/ecore_wayland/ecore_wl_subsurf.c
+src/lib/ecore_wayland/ivi-application-protocol.c
+src/lib/eldbus/eldbus_model_object.c
+src/lib/eldbus/eldbus_freedesktop.c
+src/lib/eldbus/eldbus_model_connection.c
+src/lib/eldbus/eldbus_introspection.c
+src/lib/eldbus/eldbus_model_signal.c
+src/lib/eldbus/eldbus_model_proxy.c
+src/lib/eldbus/eldbus_signal_handler.c
+src/lib/eldbus/eldbus_message.c
+src/lib/eldbus/eldbus_message_from_eina_value.c
+src/lib/eldbus/eldbus_core.c
+src/lib/eldbus/eldbus_model_method.c
+src/lib/eldbus/eldbus_message_to_eina_value.c
+src/lib/eldbus/eldbus_object.c
+src/lib/eldbus/eldbus_message_helper.c
+src/lib/eldbus/eldbus_pending.c
+src/lib/eldbus/eldbus_model.c
+src/lib/eldbus/eldbus_proxy.c
+src/lib/eldbus/eldbus_model_arguments.c
+src/lib/eldbus/eldbus_service.c
+src/lib/ecore_evas/ecore_evas_ews.c
+src/lib/ecore_evas/ecore_evas_util.c
+src/lib/ecore_evas/ecore_evas_buffer.c
+src/lib/ecore_evas/ecore_evas.c
+src/lib/ecore_evas/ecore_evas_deprecated.c
+src/lib/ecore_evas/ecore_evas_extn.c
+src/lib/ecore_evas/ecore_evas_module.c
+src/lib/ecore_evas/ecore_evas_fallback_selection.c
+src/generic/evas/common/shmfile.c
+src/generic/evas/common/timeout.c
+src/generic/evas/rsvg/main.c
+src/generic/evas/gst/main.c
+src/generic/evas/raw/main.c
+src/generic/evas/xcf/main.c
+src/generic/evas/xcf/pixelfuncs.c
+src/generic/evas/ps/main.c
+src/bin/exactness/exactness.c
+src/bin/exactness/common.c
+src/bin/exactness/recorder.c
+src/bin/exactness/injector.c
+src/bin/exactness/inspect.c
+src/bin/exactness/player.c
+src/bin/ecore_con/efl_net_proxy_helper.c
+src/bin/edje/edje_data_convert.c
+src/bin/edje/edje_cc_handlers.c
+src/bin/edje/edje_cc_parse.c
+src/bin/edje/edje_inspector.c
+src/bin/edje/edje_cc_script.c
+src/bin/edje/edje_player.c
+src/bin/edje/edje_multisense_convert.c
+src/bin/edje/edje_decc.c
+src/bin/edje/edje_codegen.c
+src/bin/edje/edje_external_inspector.c
+src/bin/edje/edje_cc.c
+src/bin/edje/edje_pick.c
+src/bin/edje/edje_convert_main.c
+src/bin/edje/edje_watch.c
+src/bin/edje/edje_cc_out.c
+src/bin/edje/edje_convert.c
+src/bin/edje/epp/cpperror.c
+src/bin/edje/epp/cpphash.c
+src/bin/edje/epp/cppalloc.c
+src/bin/edje/epp/cppmain.c
+src/bin/edje/epp/cppexp.c
+src/bin/edje/epp/cpplib.c
+src/bin/edje/edje_cc_sources.c
+src/bin/edje/edje_cc_mem.c
+src/bin/eolian/main.c
+src/bin/eolian/sources.c
+src/bin/eolian/docs.c
+src/bin/eolian/headers.c
+src/bin/eolian/types.c
+src/bin/eet/eet_main.c
+src/bin/efreet/efreet_mime_cache_create.c
+src/bin/efreet/efreet_icon_cache_create.c
+src/bin/efreet/efreetd_ipc.c
+src/bin/efreet/efreet_desktop_cache_create.c
+src/bin/efreet/efreetd_cache.c
+src/bin/efreet/efreetd.c
+src/bin/elementary/test_win_wm_rotation.c
+src/bin/elementary/test_calendar.c
+src/bin/elementary/test_efl_anim_group_sequential.c
+src/bin/elementary/test_efl_anim_start_delay.c
+src/bin/elementary/test_ctxpopup.c
+src/bin/elementary/test_genlist.c
+src/bin/elementary/test_part_bg.c
+src/bin/elementary/test_image.c
+src/bin/elementary/test_conform.c
+src/bin/elementary/test_ui_stack.c
+src/bin/elementary/test_efl_anim_translate.c
+src/bin/elementary/test_events.c
+src/bin/elementary/perf_test_02.c
+src/bin/elementary/test_glview.c
+src/bin/elementary/test_flip.c
+src/bin/elementary/test_ui_slider_interval.c
+src/bin/elementary/test_fileselector_button.c
+src/bin/elementary/test_scaling.c
+src/bin/elementary/test_fileselector.c
+src/bin/elementary/test_win_socket.c
+src/bin/elementary/test_access.c
+src/bin/elementary/test_dnd.c
+src/bin/elementary/test_ui_collection_view.c
+src/bin/elementary/test_config.c
+src/bin/elementary/test_focus_policy.c
+src/bin/elementary/test_ui_scroller.c
+src/bin/elementary/test_ui_datepicker.c
+src/bin/elementary/test_separator.c
+src/bin/elementary/test_ui_collection.c
+src/bin/elementary/test_gfx_filters.c
+src/bin/elementary/test_evas_map.c
+src/bin/elementary/elm_prefs_cc_out.c
+src/bin/elementary/test_win_modal.c
+src/bin/elementary/test_focus_style.c
+src/bin/elementary/test_ui_panel.c
+src/bin/elementary/test_efl_anim_rotate.c
+src/bin/elementary/test_multibuttonentry.c
+src/bin/elementary/test_entry_anchor.c
+src/bin/elementary/test_efl_gfx_mapping.c
+src/bin/elementary/test_efl_anim_repeat.c
+src/bin/elementary/test_icon_animated.c
+src/bin/elementary/test_3d.c
+src/bin/elementary/test_evas_snapshot.c
+src/bin/elementary/test_diskselector.c
+src/bin/elementary/test_ui_pager.c
+src/bin/elementary/test_button.c
+src/bin/elementary/test_efl_anim_interpolator.c
+src/bin/elementary/config.c
+src/bin/elementary/test_eio.c
+src/bin/elementary/test_weather.c
+src/bin/elementary/test_ui_clock.c
+src/bin/elementary/test_notify.c
+src/bin/elementary/test_ui_panes.c
+src/bin/elementary/test_ui_textpath.c
+src/bin/elementary/test_transit_bezier.c
+src/bin/elementary/test_segment_control.c
+src/bin/elementary/test_entry_anchor2.c
+src/bin/elementary/test_photo.c
+src/bin/elementary/perf_test_05.c
+src/bin/elementary/test_spinner.c
+src/bin/elementary/test_web.c
+src/bin/elementary/test_disable.c
+src/bin/elementary/test_prefs.c
+src/bin/elementary/test_ui_tab_pager.c
+src/bin/elementary/test_canvas_textblock.c
+src/bin/elementary/test_anim.c
+src/bin/elementary/test_ui_table.c
+src/bin/elementary/test_ui_spotlight.c
+src/bin/elementary/test_efl_anim_alpha.c
+src/bin/elementary/test_map.c
+src/bin/elementary/test_efl_ui_vg_animation.c
+src/bin/elementary/test_flipselector.c
+src/bin/elementary/test_icon_desktops.c
+src/bin/elementary/perf_test_06.c
+src/bin/elementary/test_ui_image.c
+src/bin/elementary/test_actionslider.c
+src/bin/elementary/test_win_plug.c
+src/bin/elementary/test_ui_table_static.c
+src/bin/elementary/test_win_dialog.c
+src/bin/elementary/test_panes.c
+src/bin/elementary/test_bubble.c
+src/bin/elementary/test_cnp.c
+src/bin/elementary/test_ui_tags.c
+src/bin/elementary/test_gengrid.c
+src/bin/elementary/test_box.c
+src/bin/elementary/test_evas_mask.c
+src/bin/elementary/test_win_indicator.c
+src/bin/elementary/test_ui_progressbar.c
+src/bin/elementary/test_sys_notify.c
+src/bin/elementary/elementary_codegen.c
+src/bin/elementary/test_ui_frame.c
+src/bin/elementary/test_transit.c
+src/bin/elementary/test_hoversel.c
+src/bin/elementary/test_gesture_framework.c
+src/bin/elementary/test_tooltip.c
+src/bin/elementary/perf_test_04.c
+src/bin/elementary/test_explode.c
+src/bin/elementary/test_toolbar.c
+src/bin/elementary/test_bg.c
+src/bin/elementary/test_ui_relative_container.c
+src/bin/elementary/test_clock.c
+src/bin/elementary/test_entry.c
+src/bin/elementary/test_ui_separator.c
+src/bin/elementary/test_efl_anim_pause.c
+src/bin/elementary/perf_test_03.c
+src/bin/elementary/test_flip_page.c
+src/bin/elementary/test_win_state.c
+src/bin/elementary/test_systray.c
+src/bin/elementary/quicklaunch.c
+src/bin/elementary/test_dayselector.c
+src/bin/elementary/test.c
+src/bin/elementary/test_factory.c
+src/bin/elementary/perf_test_01.c
+src/bin/elementary/test_gesture_layer2.c
+src/bin/elementary/test_cursor.c
+src/bin/elementary/test_progressbar.c
+src/bin/elementary/test_efl_anim_group_parallel.c
+src/bin/elementary/test_index.c
+src/bin/elementary/test_ui_popup.c
+src/bin/elementary/test_photocam.c
+src/bin/elementary/elm_prefs_cc_mem.c
+src/bin/elementary/test_naviframe.c
+src/bin/elementary/test_grid.c
+src/bin/elementary/test_main_menu.c
+src/bin/elementary/perf_rnd.c
+src/bin/elementary/test_check.c
+src/bin/elementary/test_popup.c
+src/bin/elementary/test_ui_spin.c
+src/bin/elementary/test_inwin.c
+src/bin/elementary/test_ui_slider.c
+src/bin/elementary/test_flip_page_eo.c
+src/bin/elementary/test_slideshow.c
+src/bin/elementary/test_ui_spin_button.c
+src/bin/elementary/test_label.c
+src/bin/elementary/test_colorclass.c
+src/bin/elementary/test_table.c
+src/bin/elementary/test_focus_custom_chain.c
+src/bin/elementary/test_code.c
+src/bin/elementary/test_datetime.c
+src/bin/elementary/test_glview_manygears.c
+src/bin/elementary/test_glview_simple.c
+src/bin/elementary/test_ui_timepicker.c
+src/bin/elementary/test_icon.c
+src/bin/elementary/test_conform_indicator.c
+src/bin/elementary/test_win_stack.c
+src/bin/elementary/test_colorselector.c
+src/bin/elementary/test_panel.c
+src/bin/elementary/elm_prefs_cc_handlers.c
+src/bin/elementary/test_launcher.c
+src/bin/elementary/test_thumb.c
+src/bin/elementary/test_list.c
+src/bin/elementary/test_efl_anim_scale.c
+src/bin/elementary/test_ui_pager_scroll.c
+src/bin/elementary/test_win_inline.c
+src/bin/elementary/test_radio.c
+src/bin/elementary/test_part_shadow.c
+src/bin/elementary/test_floating.c
+src/bin/elementary/test_ui_items.c
+src/bin/elementary/test_hover.c
+src/bin/elementary/test_gesture_layer3.c
+src/bin/elementary/test_fileselector_entry.c
+src/bin/elementary/elm_prefs_cc_parse.c
+src/bin/elementary/test_store.c
+src/bin/elementary/test_multi.c
+src/bin/elementary/test_naviframe_complex.c
+src/bin/elementary/run.c
+src/bin/elementary/test_scroller.c
+src/bin/elementary/test_focus.c
+src/bin/elementary/test_gesture_layer.c
+src/bin/elementary/test_win_keygrab.c
+src/bin/elementary/test_slider.c
+src/bin/elementary/test_layout.c
+src/bin/elementary/perf.c
+src/bin/elementary/test_menu.c
+src/bin/elementary/test_ui_radio.c
+src/bin/elementary/test_ui_button.c
+src/bin/elementary/elm_prefs_cc.c
+src/bin/elementary/test_efl_gfx_vg_value_provider.c
+src/bin/elementary/test_combobox.c
+src/bin/elementary/test_ui_box.c
+src/bin/elementary/test_external.c
+src/bin/elementary/perf_list.c
+src/bin/elementary/test_video.c
+src/bin/elementary/test_ui_box_stack.c
+src/bin/elementary/test_efl_ui_text.c
+src/bin/ecore_buffer/bq_mgr.c
+src/bin/ecore_buffer/bq_mgr_protocol.c
+src/bin/eeze/eeze_sensor_test/eeze_sensor_test.c
+src/bin/eeze/eeze_umount/eeze_umount.c
+src/bin/eeze/eeze_udev_test/eeze_udev_test.c
+src/bin/eeze/eeze_mount/eeze_mount.c
+src/bin/eeze/eeze_scanner/eeze_scanner.c
+src/bin/eeze/eeze_scanner_monitor/eeze_scanner_monitor.c
+src/bin/eeze/eeze_disk_ls/eeze_disk_ls.c
+src/bin/ethumb_client/ethumbd_slave.c
+src/bin/ethumb_client/ethumbd_client.c
+src/bin/ethumb_client/ethumbd.c
+src/bin/elua/main.c
+src/bin/ethumb/ethumb.c
+src/bin/eina/eina_btlog/eina_btlog.c
+src/bin/eina/eina_modinfo/eina_modinfo.c
+src/bin/efl_canvas_wl/efl_canvas_wl_test.c
+src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c
+src/bin/efl/efl_debugd.c
+src/bin/efl/efl_debug.c
+src/bin/embryo/embryo_cc_sclist.c
+src/bin/embryo/embryo_cc_sc6.c
+src/bin/embryo/embryo_cc_sc3.c
+src/bin/embryo/embryo_cc_sc1.c
+src/bin/embryo/embryo_cc_scexpand.c
+src/bin/embryo/embryo_cc_sc5.c
+src/bin/embryo/embryo_cc_sc2.c
+src/bin/embryo/embryo_cc_sc7.c
+src/bin/embryo/embryo_cc_sc4.c
+src/bin/embryo/embryo_cc_prefix.c
+src/bin/embryo/embryo_cc_scvars.c
+src/bin/eldbus/dbus.c
+src/bin/eldbus/source_client.c
+src/bin/eldbus/parser.c
+src/bin/eldbus/utils.c
+src/bin/eldbus/client.c
+src/bin/ecore_evas/eetpack.c
+src/bin/ecore_evas/ecore_evas_convert.c
+src/benchmarks/eo/eo_bench_callbacks.c
+src/benchmarks/eo/eo_bench_eo_do.c
+src/benchmarks/eo/eo_bench.c
+src/benchmarks/eo/eo_bench_eo_add.c
+src/benchmarks/eo/class_simple.c
+src/benchmarks/evas/evas_bench.c
+src/benchmarks/evas/evas_bench_saver.c
+src/benchmarks/evas/evas_bench_loader.c
+src/benchmarks/elementary/collection.c
+src/benchmarks/elementary/focus_widget_tree.c
+src/benchmarks/eina/eina_bench_convert.c
+src/benchmarks/eina/eina_bench_mempool.c
+src/benchmarks/eina/eina_bench_stringshare.c
+src/benchmarks/eina/eina_bench_crc_hash.c
+src/benchmarks/eina/evas_object_list.c
+src/benchmarks/eina/eina_bench.c
+src/benchmarks/eina/evas_hash.c
+src/benchmarks/eina/eina_bench_rectangle_pool.c
+src/benchmarks/eina/eina_bench_quad.c
+src/benchmarks/eina/evas_mempool.c
+src/benchmarks/eina/eina_bench_array.c
+src/benchmarks/eina/eina_bench_sort.c
+src/benchmarks/eina/ecore_list.c
+src/benchmarks/eina/evas_stringshare.c
+src/benchmarks/eina/ecore_sheap.c
+src/benchmarks/eina/evas_list.c
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
new file mode 100644
index 0000000000..05a170ad75
--- /dev/null
+++ b/po/POTFILES.skip
@@ -0,0 +1,11 @@
+./data/elementary/desktop
+./data/elementary/desktop/elementary_test.desktop
+./data/elementary/desktop/elementary_perf.desktop
+./data/elementary/desktop/elementary_config.desktop
+./data/elementary/config/mobile/profile.desktop
+./data/elementary/config/standard/profile.desktop
+./data/elementary/config/default/profile.desktop
+./src/tests/efreet/data/test_type.desktop
+./src/tests/efreet/data/sub/test.desktop
+./src/tests/efreet/data/test.desktop
+./src/bin/efl_js/efljslaunch.desktop
diff --git a/po/ar.po b/po/ar.po
index 9cb5e6bf9c..a636695c92 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -2,12 +2,12 @@
# This file is distributed under the same license as the Elementary package.
# FIRST AUTHOR <tom.hacohen@samsung.com>, 2010.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
-"#-#-#-#-# ar.po (Efl) #-#-#-#-#\n"
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2010-12-26 10:05+0200\n"
"Last-Translator: Tom Hacohen <tom.hacohen@samsung.com>\n"
"Language-Team: General\n"
@@ -15,338 +15,263 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"#-#-#-#-# ar.po (Efl) #-#-#-#-#\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
msgstr ""
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
msgstr ""
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
msgstr ""
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
-msgstr ""
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:RTL"
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
msgstr ""
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
msgstr ""
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
+#: 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 ""
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
+#, c-format
+msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:RTL"
-
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
msgstr ""
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
msgstr ""
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
msgstr ""
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-msgid "State: Unselected"
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
msgstr ""
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:RTL"
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/az_IR.po b/po/az_IR.po
index 8677d70f1b..8a207615d6 100644
--- a/po/az_IR.po
+++ b/po/az_IR.po
@@ -2,11 +2,12 @@
# This file is distributed under the same license as the Elementary package.
# FIRST AUTHOR <tom.hacohen@samsung.com>, 2010.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2010-12-26 10:05+0200\n"
"Last-Translator: Tom Hacohen <tom.hacohen@samsung.com>\n"
"Language-Team: General\n"
@@ -16,335 +17,259 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
msgstr ""
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
msgstr ""
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
msgstr ""
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
-msgstr ""
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:RTL"
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
msgstr ""
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
msgstr ""
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
+#: 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 ""
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
+#, c-format
+msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:RTL"
-
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
msgstr ""
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-msgid "State: Unselected"
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
msgstr ""
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:RTL"
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/ca.po b/po/ca.po
index d74907342f..460e0f2bee 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -4,12 +4,12 @@
# Marc Furtià i Puig <marc.furtia@gmail.com>, 2013.
# Joan Coll <jcoll2@gmail.com>, 2013.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2015-02-10 09:34+0000\n"
"Last-Translator: JoanColl <Unknown>\n"
"Language-Team: Catalan\n"
@@ -20,556 +20,460 @@ msgstr ""
"X-Launchpad-Export-Date: 2015-03-11 05:18+0000\n"
"X-Generator: Launchpad (build 17389)\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versió:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Ús:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [opcions]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Llicència:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tipus: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Per defecte: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Eleccions: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "No hi ha categories disponibles."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Categories: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opcions:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Arguments posicionals:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ERROR: categoria desconeguda '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ERROR: opció desconeguda --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ERROR: opció desconeguda -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ERROR: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "no s'ha definit el valor.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "valor booleà desconegut %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "format numèric invàlid %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "elecció invàlida \"%s\". Els valors vàlids són: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "falta paràmetre per afegir.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "impossible analitzar el valor.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "manca paràmetre.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "manca funció d'invocació!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "no s'ha definit la versió.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "no s'ha definit el copyright.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "no s'ha definit la llicència.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ERROR: opció desconeguda --%s, s'ha ignorat.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ERROR: l'opció --%s requereix un argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ERROR: opció desconeguda -%c, s'ha ignorat.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ERROR: L'opció -%c requereix un argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "ERROR: es requereix argument posicional %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "ERROR: acció no permesa %d per argument posicional %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ERROR: no s'ha proporcionat cap analitzador.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ERROR: no s'ha proporcionat cap valor.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ERROR: no s'ha proporcionat cap argument.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ERROR: s'han trobat opcions no vàlides."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Miri --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Miri -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "ERROR: arguments posicionals no vàlids."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ERROR: valor geomètric incorrecte '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ERROR: tamany incorrecte '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Escriptori"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Descàrregues"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Plantilles"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Públic"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Documents"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Música"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Imatges"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Vídeos"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Títol"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Títol"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Enrere"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Amunt"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Carpeta personal"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "Cerca"
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "Accepta"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Cancel·la"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Estat: desactivat"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Estat: desactivat"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "etiqueta d'entrada múltiple"
+#~ msgid "multi button entry label"
+#~ msgstr "etiqueta d'entrada múltiple"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "element entrada múltiple"
+#~ msgid "multi button entry item"
+#~ msgstr "element entrada múltiple"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "entrada múltiple"
+#~ msgid "multi button entry"
+#~ msgstr "entrada múltiple"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Títol"
+#~ msgid "Next"
+#~ msgstr "Següent"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Títol"
+#~ msgid "Popup Title"
+#~ msgstr "Títol finestra emergent"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Enrere"
+#~ msgid "Popup Body Text"
+#~ msgstr "Text de la finestra emergent"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Següent"
+#~ msgid "Bubble"
+#~ msgstr "Bombolla"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Títol finestra emergent"
+#~ msgid "Clicked"
+#~ msgstr "Clicat"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Text de la finestra emergent"
+#~ msgid "Button"
+#~ msgstr "Botó"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Bombolla"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Clicat"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Botó"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "element de calendari"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "botó decrement de mes"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "botó decrement d'any"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "botó increment de mes"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "botó increment d'any"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "mes del calendari"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "any del calendari"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Estat: activat"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Estat: desactivat"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Estat"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Comprova"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "botó increment de rellotge per am,pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "botó decrement de rellotge per am,pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Estat: Editable"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Rellotge"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr "Trieu un color"
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr "R:"
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr "G:"
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr "B:"
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr "A:"
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "paleta de selecció de color"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "%B"
+#~ msgstr "%B"
+
+#~ msgid "%Y"
+#~ msgstr "%Y"
+
+#~ msgid "calendar item"
+#~ msgstr "element de calendari"
+
+#~ msgid "calendar decrement month button"
+#~ msgstr "botó decrement de mes"
+
+#~ msgid "calendar decrement year button"
+#~ msgstr "botó decrement d'any"
+
+#~ msgid "calendar increment month button"
+#~ msgstr "botó increment de mes"
+
+#~ msgid "calendar increment year button"
+#~ msgstr "botó increment d'any"
+
+#~ msgid "calendar month"
+#~ msgstr "mes del calendari"
+
+#~ msgid "calendar year"
+#~ msgstr "any del calendari"
+
+#~ msgid "State: On"
+#~ msgstr "Estat: activat"
+
+#~ msgid "State: Off"
+#~ msgstr "Estat: desactivat"
+
+#~ msgid "State"
+#~ msgstr "Estat"
+
+#~ msgid "Check"
+#~ msgstr "Comprova"
+
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "botó increment de rellotge per am,pm"
+
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "botó decrement de rellotge per am,pm"
+
+#~ msgid "State: Editable"
+#~ msgstr "Estat: Editable"
+
+#~ msgid "Clock"
+#~ msgstr "Rellotge"
+
+#~ msgid "Pick a color"
+#~ msgstr "Trieu un color"
+
+#~ msgid "R:"
+#~ msgstr "R:"
+
+#~ msgid "G:"
+#~ msgstr "G:"
+
+#~ msgid "B:"
+#~ msgstr "B:"
+
+#~ msgid "A:"
+#~ msgstr "A:"
+
+#~ msgid "color selector palette item"
+#~ msgstr "paleta de selecció de color"
+
+#~ msgid "day selector item"
+#~ msgstr "selector de dia"
+
+#~ msgid "diskselector item"
+#~ msgstr "selector de disc"
+
+#~ msgid "Cut"
+#~ msgstr "Retalla"
+
+#~ msgid "Copy"
+#~ msgstr "Copia"
+
+#~ msgid "Paste"
+#~ msgstr "Enganxa"
+
+#~ msgid "Select"
+#~ msgstr "Selecciona"
+
+#~ msgid "Entry"
+#~ msgstr "Entrada"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "selector de dia"
+#~ msgid "Index"
+#~ msgstr "Índex"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "selector de disc"
+#~ msgid "Index Item"
+#~ msgstr "Element d'índex"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Retalla"
+#~ msgid "Label"
+#~ msgstr "Etiqueta"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Copia"
+#~ msgid "state: opened"
+#~ msgstr "estat: obert"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Enganxa"
+#~ msgid "state: closed"
+#~ msgstr "estat: tancat"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Selecciona"
+#~ msgid "A panel is open"
+#~ msgstr "Hi ha un tauler obert"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Entrada"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Feu doble clic per tancar el menú del tauler"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Índex"
+#~ msgid "panel button"
+#~ msgstr "botó del tauler"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Element d'índex"
+#~ msgid "progressbar"
+#~ msgstr "barra de progrés"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etiqueta"
+#~ msgid "Radio"
+#~ msgstr "Opció"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "estat: obert"
+#~ msgid "State: Selected"
+#~ msgstr "Estat: Seleccionat"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "estat: tancat"
+#~ msgid "State: Unselected"
+#~ msgstr "Estat: No seleccionat"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Hi ha un tauler obert"
+#~ msgid "Segment Control Item"
+#~ msgstr "Element de control del segment"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Feu doble clic per tancar el menú del tauler"
+#~ msgid "slider"
+#~ msgstr "control lliscant"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "botó del tauler"
+#~ msgid "incremented"
+#~ msgstr "incrementat"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "barra de progrés"
+#~ msgid "decremented"
+#~ msgstr "decrementat"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Opció"
+#~ msgid "spinner"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Estat: Seleccionat"
+#~ msgid "spinner increment button"
+#~ msgstr "botó d'increment del spinner"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Estat: No seleccionat"
+#~ msgid "spinner decrement button"
+#~ msgstr "botó de decrement del spinner"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Element de control del segment"
+#~ msgid "spinner text"
+#~ msgstr "text rotatiu"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "control lliscant"
+#~ msgid "Selected"
+#~ msgstr "Seleccionat"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr "incrementat"
+#~ msgid "Separator"
+#~ msgstr "Separador"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr "decrementat"
+#~ msgid "Has menu"
+#~ msgstr "Té menú"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "spinner"
+#~ msgid "Unselected"
+#~ msgstr "No seleccionat"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "botó d'increment del spinner"
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "botó de decrement del spinner"
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr "text rotatiu"
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Seleccionat"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Separador"
-
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Té menú"
-
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "No seleccionat"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Element de barra d'eines"
+#~ msgid "Toolbar Item"
+#~ msgstr "Element de barra d'eines"
#~ msgid "Gengrid Item"
#~ msgstr "Quadrícula genèrica"
diff --git a/po/cs.po b/po/cs.po
index d84b91170d..f5bdea95fb 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -5,12 +5,12 @@
# quaker66@gmail.com
# Vít Pelčák <vit@pelcak.org>, 2011.
# Tomáš Čech <sleep_walker@suse.cz>, 2012.
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2014-05-22 22:44+0200\n"
"Last-Translator: Tomáš Čech <sleep_walker@suse.cz>\n"
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
@@ -21,559 +21,436 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Lokalize 1.4\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Verze:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Použití:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [volby]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licence:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Typ: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Výchozí: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Možnosti: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "Možnosti: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Volby:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "CHYBA: neznámá volba --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "CHYBA: neznámá volba --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "CHYBA: neznámá volba -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "CHYBA: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "hodnota nemá nastaven pointer.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "neznámá boolean hodnota %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "neznámý číselný formát %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "neznámá volba \"%s\". Možné hodnoty jsou: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "chybí parametr k připojení.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "nemohu analyzovat hodnotu.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "chybí parametr.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "chybí callback funkce!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "nebyla definována verze.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "nebyl definován copyright.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "nebyla definována licence.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "CHYBA: neznámá volba --%s, ignoruji.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "CHYBA: volba --%s vyžaduje argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "CHYBA: neznámá volba -%c, ignoruji.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "CHYBA: volba -%c vyžaduje argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "CHYBA: volba -%c vyžaduje argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "CHYBA: nebyl poskytnut parser.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "CHYBA: nebyly poskytnuty hodnoty.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "CHYBA: nebyly poskytnuty argumenty.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "CHYBA: nalezeny neplatné volby."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Viz --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Viz -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "CHYBA: nalezeny neplatné volby."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "CHYBA: neplatná hodnota geometrie '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "CHYBA: neplatná hodnota velikosti '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Plocha"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Stažené"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Šablony"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Veřejné"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Dokumenty"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Hudba"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Obrázky"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videa"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Název"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Název"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Zpět"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Nahoru"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Domů"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "OK"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Zrušit"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Stav: Zakázáno"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Stav: Zakázáno"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "popisek vícetlačítkového vstupu"
+#~ msgid "multi button entry label"
+#~ msgstr "popisek vícetlačítkového vstupu"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "položka vícetlačítkového vstupu"
+#~ msgid "multi button entry item"
+#~ msgstr "položka vícetlačítkového vstupu"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "vícetlačítkový vstup"
+#~ msgid "multi button entry"
+#~ msgstr "vícetlačítkový vstup"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Název"
+#~ msgid "Next"
+#~ msgstr "Další"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Název"
+#~ msgid "Popup Title"
+#~ msgstr "Titulek vyskakujícího okna"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Zpět"
+#~ msgid "Popup Body Text"
+#~ msgstr "Text vyskakovacího okna"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Další"
+#~ msgid "Bubble"
+#~ msgstr "Bublina"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Titulek vyskakujícího okna"
+#~ msgid "Clicked"
+#~ msgstr "Kliknuto"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Text vyskakovacího okna"
+#~ msgid "Button"
+#~ msgstr "Tlačítko"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Bublina"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Kliknuto"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Tlačítko"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "položka kalendáře"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "odečítací tlačítko pro měsíc"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "odečítací tlačítko pro rok"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "přičítací tlačítko pro měsíc"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "přičítací tlačítko pro rok"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "kalendářní měsíc"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "kalendářní rok"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Stav: Zapnuto"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Stav: Vypnuto"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Stav"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Ověřit"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "přičítací tlačítko hodin pro am,pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "odečítací tlačítko hodin pro am,pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Stav: Upravitelný"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Hodiny"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "položka kalendáře"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "calendar decrement month button"
+#~ msgstr "odečítací tlačítko pro měsíc"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "calendar decrement year button"
+#~ msgstr "odečítací tlačítko pro rok"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "položka výběru barvy z palety"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "calendar increment month button"
+#~ msgstr "přičítací tlačítko pro měsíc"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "položka výběru dne"
+#~ msgid "calendar increment year button"
+#~ msgstr "přičítací tlačítko pro rok"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "položka výběru disků"
+#~ msgid "calendar month"
+#~ msgstr "kalendářní měsíc"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Vyjmout"
+#~ msgid "calendar year"
+#~ msgstr "kalendářní rok"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopírovat"
+#~ msgid "State: On"
+#~ msgstr "Stav: Zapnuto"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Vložit"
+#~ msgid "State: Off"
+#~ msgstr "Stav: Vypnuto"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Vybrat"
+#~ msgid "State"
+#~ msgstr "Stav"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Vstup"
+#~ msgid "Check"
+#~ msgstr "Ověřit"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Index"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "přičítací tlačítko hodin pro am,pm"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Položka indexu"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "odečítací tlačítko hodin pro am,pm"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Popisek"
+#~ msgid "State: Editable"
+#~ msgstr "Stav: Upravitelný"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "stav: otevřeno"
+#~ msgid "Clock"
+#~ msgstr "Hodiny"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "stav: zavřeno"
+#~ msgid "color selector palette item"
+#~ msgstr "položka výběru barvy z palety"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "day selector item"
+#~ msgstr "položka výběru dne"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "diskselector item"
+#~ msgstr "položka výběru disků"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "tlačítko panelu"
+#~ msgid "Cut"
+#~ msgstr "Vyjmout"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "ukazatel průběhu"
+#~ msgid "Copy"
+#~ msgstr "Kopírovat"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Přepínač"
+#~ msgid "Paste"
+#~ msgstr "Vložit"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Stav: Vybráno"
+#~ msgid "Select"
+#~ msgstr "Vybrat"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Stav: Nevybráno"
+#~ msgid "Entry"
+#~ msgstr "Vstup"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "položka ovládání segmentu"
+#~ msgid "Index"
+#~ msgstr "Index"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "šoupátko"
+#~ msgid "Index Item"
+#~ msgstr "Položka indexu"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Label"
+#~ msgstr "Popisek"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "state: opened"
+#~ msgstr "stav: otevřeno"
+
+#~ msgid "state: closed"
+#~ msgstr "stav: zavřeno"
+
+#~ msgid "panel button"
+#~ msgstr "tlačítko panelu"
+
+#~ msgid "progressbar"
+#~ msgstr "ukazatel průběhu"
+
+#~ msgid "Radio"
+#~ msgstr "Přepínač"
+
+#~ msgid "State: Selected"
+#~ msgstr "Stav: Vybráno"
+
+#~ msgid "State: Unselected"
+#~ msgstr "Stav: Nevybráno"
+
+#~ msgid "Segment Control Item"
+#~ msgstr "položka ovládání segmentu"
+
+#~ msgid "slider"
+#~ msgstr "šoupátko"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "spinner"
+#~ msgid "spinner"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "přičítací tlačítko spinneru"
+#~ msgid "spinner increment button"
+#~ msgstr "přičítací tlačítko spinneru"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "odečítací tlačítko spinneru"
+#~ msgid "spinner decrement button"
+#~ msgstr "odečítací tlačítko spinneru"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "spinner"
+#~ msgid "spinner text"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Vybrané"
+#~ msgid "Selected"
+#~ msgstr "Vybrané"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Oddělovač"
+#~ msgid "Separator"
+#~ msgstr "Oddělovač"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Má nabídku"
+#~ msgid "Has menu"
+#~ msgstr "Má nabídku"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Nevybrané"
+#~ msgid "Unselected"
+#~ msgstr "Nevybrané"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Položka panelu nástrojů"
+#~ msgid "Toolbar Item"
+#~ msgstr "Položka panelu nástrojů"
#~ msgid "Gengrid Item"
#~ msgstr "Položka mřížky"
diff --git a/po/da.po b/po/da.po
index 25bbc265b3..6e41ab188f 100644
--- a/po/da.po
+++ b/po/da.po
@@ -2,12 +2,12 @@
# Copyright (C) 2017 Enlightenment development team
# This file is distributed under the same license as the efl package.
# scootergrisen, 2017-2018.
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: efl 1.21\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2018-08-09 18:38+0200\n"
"Last-Translator: scootergrisen\n"
"Language-Team: Danish\n"
@@ -17,555 +17,465 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Version:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Anvendelse:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [tilvalg]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Ophavsret:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licens:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Type: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Standard: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Valg: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Ingen kategorier tilgængelige."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Kategorier: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Tilvalg:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Positionelle argumenter:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "FEJL: ukendt kategori '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "FEJL: ukendt tilvalg --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "FEJL: ukendt tilvalg -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "FEJL: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "værdi har ingen peger sat.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "ukendt boolesk værdi %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "ugyldigt nummerformat %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "ugyldigt valg \"%s\". Gyldige værdier er: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "manglende parameter at tilføje til slutningen.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "kunne ikke fortolke værdi.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "manglende parameter.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "manglende callback-funktion!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "ingen version blev angivet.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "ingen ophavsret blev angivet.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "ingen licens blev angivet.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "FEJL: ukendt tilvalg --%s, ignoreret.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "FEJL: tilvalget --%s kræver et argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "FEJL: ukendt tilvalg -%c, ignoreret.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "FEJL: tilvalget -%c krævet et argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "FEJL: manglende påkrævet positionelt argument %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "FEJL: ikke-understøttet handlingstype %d for positionelt argument %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "FEJL: ingen fortolker angivet.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "FEJL: ingen værdier angivet.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "FEJL: ingen argumenter angivet.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "FEJL: ugyldige tilvalg fundet."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Se --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Se -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "FEJL: ugyldige positionelle argumenter fundet."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "FEJL: ukorrekt geometriværdi '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "FEJL: ukorrekt størrelsesværdi '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Skrivebord"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Downloads"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Skabeloner"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Offentlig"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Dokumenter"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Musik"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Billeder"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videoer"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Titel"
+
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
+msgstr "Undertitel"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Tilbage"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Op"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Hjem"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "Søg"
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "OK"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Annuller"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Tilstand: Deaktiveret"
+#~ msgid "State: Disabled"
+#~ msgstr "Tilstand: Deaktiveret"
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr "Svævemarkering"
+#~ msgid "Hoversel"
+#~ msgstr "Svævemarkering"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "indtastningsetiket til multiknap"
+#~ msgid "multi button entry label"
+#~ msgstr "indtastningsetiket til multiknap"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "indtastningselement til multiknap"
+#~ msgid "multi button entry item"
+#~ msgstr "indtastningselement til multiknap"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "indtastning til multiknap"
+#~ msgid "multi button entry"
+#~ msgstr "indtastning til multiknap"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Titel"
+#~ msgid "Next"
+#~ msgstr "Næste"
-#: src/lib/elementary/elc_naviframe.c:415
-msgid "Subtitle"
-msgstr "Undertitel"
+#~ msgid "Popup Title"
+#~ msgstr "Titel til pop op"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Tilbage"
+#~ msgid "Popup Body Text"
+#~ msgstr "Brødtekst til pop op"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Næste"
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Titel til pop op"
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Brødtekst til pop op"
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr "Besked"
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Bobbel"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Klikket"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Knap"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "kalender-element"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "formindsk-knap til kalender måned"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "formindsk-knap til kalender år"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "forøg-knap til kalender måned"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "forøg-knap til kalender år"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "kalender måned"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "kalender år"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Tilstand: Til"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Tilstand: Fra"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Tilstand"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Tilvælg"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "forøg-knap til ur am,pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "formindsk-knap til ur am,pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Tilstand: Redigerbar"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Ur"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr "Vælg en farve"
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr "R:"
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr "G:"
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr "B:"
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr "A:"
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "palet-element til farvevælger"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "Alert"
+#~ msgstr "Besked"
+
+#~ msgid "Bubble"
+#~ msgstr "Bobbel"
+
+#~ msgid "Clicked"
+#~ msgstr "Klikket"
+
+#~ msgid "Button"
+#~ msgstr "Knap"
+
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
+
+#~ msgid "%B"
+#~ msgstr "%B"
+
+#~ msgid "%Y"
+#~ msgstr "%Y"
+
+#~ msgid "calendar item"
+#~ msgstr "kalender-element"
+
+#~ msgid "calendar decrement month button"
+#~ msgstr "formindsk-knap til kalender måned"
+
+#~ msgid "calendar decrement year button"
+#~ msgstr "formindsk-knap til kalender år"
+
+#~ msgid "calendar increment month button"
+#~ msgstr "forøg-knap til kalender måned"
+
+#~ msgid "calendar increment year button"
+#~ msgstr "forøg-knap til kalender år"
+
+#~ msgid "calendar month"
+#~ msgstr "kalender måned"
+
+#~ msgid "calendar year"
+#~ msgstr "kalender år"
+
+#~ msgid "State: On"
+#~ msgstr "Tilstand: Til"
+
+#~ msgid "State: Off"
+#~ msgstr "Tilstand: Fra"
+
+#~ msgid "State"
+#~ msgstr "Tilstand"
+
+#~ msgid "Check"
+#~ msgstr "Tilvælg"
+
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "forøg-knap til ur am,pm"
+
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "formindsk-knap til ur am,pm"
+
+#~ msgid "State: Editable"
+#~ msgstr "Tilstand: Redigerbar"
+
+#~ msgid "Clock"
+#~ msgstr "Ur"
+
+#~ msgid "Pick a color"
+#~ msgstr "Vælg en farve"
+
+#~ msgid "R:"
+#~ msgstr "R:"
+
+#~ msgid "G:"
+#~ msgstr "G:"
+
+#~ msgid "B:"
+#~ msgstr "B:"
+
+#~ msgid "A:"
+#~ msgstr "A:"
+
+#~ msgid "color selector palette item"
+#~ msgstr "palet-element til farvevælger"
+
+#~ msgid "day selector item"
+#~ msgstr "dagvælger-element"
+
+#~ msgid "diskselector item"
+#~ msgstr "diskvælger-element"
+
+#~ msgid "Cut"
+#~ msgstr "Klip"
+
+#~ msgid "Copy"
+#~ msgstr "Kopiér"
+
+#~ msgid "Paste"
+#~ msgstr "Indsæt"
+
+#~ msgid "Select"
+#~ msgstr "Vælg"
+
+#~ msgid "Entry"
+#~ msgstr "Indtastning"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "dagvælger-element"
+#~ msgid "Index"
+#~ msgstr "Indeks"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "diskvælger-element"
+#~ msgid "Index Item"
+#~ msgstr "Indeks-element"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Klip"
+#~ msgid "Label"
+#~ msgstr "Etiket"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopiér"
+#~ msgid "state: opened"
+#~ msgstr "tilstand: åbnet"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Indsæt"
+#~ msgid "state: closed"
+#~ msgstr "tilstand: lukket"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Vælg"
+#~ msgid "A panel is open"
+#~ msgstr "Et panel er åbent"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Indtastning"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Dobbelttryk for at lukke panelmenu"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Indeks"
+#~ msgid "panel button"
+#~ msgstr "panelknap"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Indeks-element"
+#~ msgid "progressbar"
+#~ msgstr "forløbslinje"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etiket"
+#~ msgid "Radio"
+#~ msgstr "Radio"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "tilstand: åbnet"
+#~ msgid "State: Selected"
+#~ msgstr "Tilstand: Valgt"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "tilstand: lukket"
+#~ msgid "State: Unselected"
+#~ msgstr "Tilstand: Fravalgt"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Et panel er åbent"
+#~ msgid "Segment Control Item"
+#~ msgstr "Segmentkontrol-element"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Dobbelttryk for at lukke panelmenu"
+#~ msgid "slider"
+#~ msgstr "skyder"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "panelknap"
+#~ msgid "incremented"
+#~ msgstr "forøget"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "forløbslinje"
+#~ msgid "decremented"
+#~ msgstr "formindsket"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Radio"
+#~ msgid "spinner"
+#~ msgstr "ruller"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Tilstand: Valgt"
+#~ msgid "spinner increment button"
+#~ msgstr "forøg-knap til ruller"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Tilstand: Fravalgt"
+#~ msgid "spinner decrement button"
+#~ msgstr "formindsk-knap til ruller"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Segmentkontrol-element"
+#~ msgid "spinner text"
+#~ msgstr "rullertekst"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "skyder"
+#~ msgid "Selected"
+#~ msgstr "Valgt"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr "forøget"
+#~ msgid "Separator"
+#~ msgstr "Separator"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr "formindsket"
+#~ msgid "Has menu"
+#~ msgstr "Har menu"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "ruller"
+#~ msgid "Unselected"
+#~ msgstr "Fravalgt"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "forøg-knap til ruller"
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "formindsk-knap til ruller"
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr "rullertekst"
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Valgt"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Separator"
-
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Har menu"
-
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Fravalgt"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Værktøjslinje-element"
+#~ msgid "Toolbar Item"
+#~ msgstr "Værktøjslinje-element"
#~ msgid "Gengrid Item"
#~ msgstr "Gengitter-element"
diff --git a/po/de.po b/po/de.po
index 9a21732685..379274e00a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -4,12 +4,12 @@
# Chris Leick <c.leick@vollbio.de>, 2009.
# Fabian Nowak <timystery@arcor.de>, 2010.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary 0.7.0.57309\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2011-02-25 20:22+0100\n"
"Last-Translator: Fabian Nowak <timystery@arcor.de>\n"
"Language-Team: German\n"
@@ -19,276 +19,233 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Version:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Aufruf:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [Optionen]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Lizenz:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Typ: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Standard: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Auswahlmöglichkeiten: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "Auswahlmöglichkeiten: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Optionen:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "FEHLER: Unbekannte Option --%s\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "FEHLER: Unbekannte Option --%s\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "FEHLER: Unbekannte Option -%c\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "FEHLER: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "kein Zeiger auf Wert gesetzt\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "unbekannter boolescher Wert %s\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "ungültiges Zahlenformat %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "ungültige Auswahl \"%s\". Gültige Werte sind: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "fehlender Parameter zum Anhängen.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "Wert kann nicht ausgewertet werden.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "fehlender Parameter.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "fehlende Rückruffunktion!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "es wurde keine Version angegeben.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "es wurde kein Copyright angegeben.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "es wurde keine Lizenz angegeben.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "FEHLER: Unbekannte Option --%s, ignoriert\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "FEHLER: Option --%s benötigt ein Argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "FEHLER: Unbekannte Option -%c, ignoriert\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "FEHLER: Option -%c benötigt ein Argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "FEHLER: Option -%c benötigt ein Argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "FEHLER: Kein Parser bereitgestellt.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "FEHLER: Keine Werte bereitgestellt.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "FEHLER: Keine Argumente bereitgestellt.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "FEHLER: Ungültige Optionen gefunden."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Siehe --%s\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Siehe -%c\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "FEHLER: Ungültige Optionen gefunden."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "FEHLER: Falscher Geometriewert \"%s\"\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "FEHLER: Falscher Größenwert \"%s\"\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Arbeitsfläche"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr ""
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr ""
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr ""
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr ""
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr ""
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr ""
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "Aufwärts"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "Persönlicher Ordner"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "OK"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr ""
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr ""
@@ -296,280 +253,50 @@ msgstr ""
msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr ""
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
-
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr ""
-
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Ausschneiden"
-
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopieren"
-
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Einfügen"
-
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Auswählen"
-
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr ""
-
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "Aufwärts"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "Persönlicher Ordner"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "OK"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Abbrechen"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr ""
+#~ msgid "Cut"
+#~ msgstr "Ausschneiden"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr ""
+#~ msgid "Copy"
+#~ msgstr "Kopieren"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr ""
+#~ msgid "Paste"
+#~ msgstr "Einfügen"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr ""
+#~ msgid "Select"
+#~ msgstr "Auswählen"
-#: src/lib/elementary/elm_segment_control.c:530
#, fuzzy
-msgid "State: Unselected"
-msgstr "Auswählen"
-
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr ""
+#~ msgid "State: Unselected"
+#~ msgstr "Auswählen"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr ""
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
#, fuzzy
-msgid "Selected"
-msgstr "Auswählen"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr ""
+#~ msgid "Selected"
+#~ msgstr "Auswählen"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr ""
-
-#: src/lib/elementary/elm_toolbar.c:2350
#, fuzzy
-msgid "Unselected"
-msgstr "Auswählen"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr ""
+#~ msgid "Unselected"
+#~ msgstr "Auswählen"
diff --git a/po/el.po b/po/el.po
index d70548b9d6..0735dcc353 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,12 +6,12 @@
# Alex-P. Natsios <drakevr@linuxteam.teilar.gr> 2012
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2012-12-19 15:58+0200\n"
"Last-Translator: Efstathios Iosifidis <iosifidis@opensuse.org>\n"
"Language-Team: Ελληνικά, Σύγχρονα <opensuse-translation-el@opensuse.org>\n"
@@ -22,276 +22,233 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Gtranslator 2.91.5\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Έκδοση:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Χρήση:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [επιλογές]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Πνευματικά δικαιώματα:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Άδεια:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Τύπος: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Προκαθορισμένο: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Επιλογές:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "Επιλογές:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Επιλογές:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ΣΦΑΛΜΑ: άγνωστη επιλογή --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ΣΦΑΛΜΑ: άγνωστη επιλογή --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ΣΦΑΛΜΑ: άγνωστη επιλογή -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ΣΦΑΛΜΑ: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "άγνωστη τιμή boolean %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "μη έγκυρη επιλογή \"%s\". Οι έγκυρες τιμές είναι: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "απούσα παράμετρος για προσάρτηση.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "αδυναμία ανάλυσης τιμών.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "απούσα παράμετρος.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "απούσα λειτουργία επανάκλησης!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "δεν έχει οριστεί έκδοση.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "δεν έχουν οριστεί πνευματικά δικαιώματα.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "δεν έχει οριστεί άδεια.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ΣΦΑΛΜΑ: άγνωστη επιλογή --%s, αγνοήθηκε.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ΣΦΑΛΜΑ: η επιλογή --%s απαιτεί μια παράμετρο!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ΣΦΑΛΜΑ: άγνωστη επιλογή -%c, αγνοήθηκε.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ΣΦAΛΜΑ: η επιλογή -%c απαιτεί μία παράμετρο!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "ΣΦAΛΜΑ: η επιλογή -%c απαιτεί μία παράμετρο!\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ΣΦΑΛΜΑ: δεν παρέχεται αναλυτής.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ΣΦΑΛΜΑ: δεν έχουν δοθεί τιμές.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ΣΦΑΛΜΑ:δεν έχουν δοθεί παράμετροι.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ΣΦΑΛΜΑ: βρέθηκαν μη έγκυρες επιλογές."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Δείτε --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Δείτε -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "ΣΦΑΛΜΑ: βρέθηκαν μη έγκυρες επιλογές."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ΣΦΑΛΜΑ: μη έγκυρη γεωμετρική τιμή '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ΣΦΑΛΜΑ: μη έγκυρη τιμή μεγέθους '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Επιφάνεια εργασίας"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Λήψεις"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Πρότυπα"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Δημόσια"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Λήψεις"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Μουσική"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Εικόνες"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Βίντεο"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "Πάνω"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "Αρχική"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "Εντάξει"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Άκυρο"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Κατάσταση: Απενεργοποιημένο"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr ""
@@ -299,294 +256,187 @@ msgstr ""
msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "Πάνω"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "Αρχική"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "Εντάξει"
-#: src/lib/elementary/elm_bubble.c:163
-#, fuzzy
-msgid "Bubble"
-msgstr "Πλαίσιο"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Άκυρο"
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Επιλεγμένο"
+#~ msgid "State: Disabled"
+#~ msgstr "Κατάσταση: Απενεργοποιημένο"
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Κουμπί"
+#, fuzzy
+#~ msgid "Bubble"
+#~ msgstr "Πλαίσιο"
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
+#~ msgid "Clicked"
+#~ msgstr "Επιλεγμένο"
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr ""
+#~ msgid "Button"
+#~ msgstr "Κουμπί"
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "αντικείμενο ημερολογίου"
+#~ msgid "calendar item"
+#~ msgstr "αντικείμενο ημερολογίου"
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
#, fuzzy
-msgid "calendar decrement month button"
-msgstr "Προηγούμενο Ημερολόγιο"
+#~ msgid "calendar decrement month button"
+#~ msgstr "Προηγούμενο Ημερολόγιο"
-#: src/lib/elementary/elm_calendar.c:397
#, fuzzy
-msgid "calendar decrement year button"
-msgstr "Προηγούμενο Ημερολόγιο"
+#~ msgid "calendar decrement year button"
+#~ msgstr "Προηγούμενο Ημερολόγιο"
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
#, fuzzy
-msgid "calendar increment month button"
-msgstr "Επόμενο Ημερολόγιο"
+#~ msgid "calendar increment month button"
+#~ msgstr "Επόμενο Ημερολόγιο"
-#: src/lib/elementary/elm_calendar.c:409
#, fuzzy
-msgid "calendar increment year button"
-msgstr "Επόμενο Ημερολόγιο"
+#~ msgid "calendar increment year button"
+#~ msgstr "Επόμενο Ημερολόγιο"
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "Μηνας Ημερολογίου"
+#~ msgid "calendar month"
+#~ msgstr "Μηνας Ημερολογίου"
-#: src/lib/elementary/elm_calendar.c:419
#, fuzzy
-msgid "calendar year"
-msgstr "αντικείμενο ημερολογίου"
+#~ msgid "calendar year"
+#~ msgstr "αντικείμενο ημερολογίου"
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Κατάσταση: Ενεργό"
+#~ msgid "State: On"
+#~ msgstr "Κατάσταση: Ενεργό"
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Κατάσταση: Ανενεργό"
+#~ msgid "State: Off"
+#~ msgstr "Κατάσταση: Ανενεργό"
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Κατάσταση"
+#~ msgid "State"
+#~ msgstr "Κατάσταση"
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Επιλογή"
+#~ msgid "Check"
+#~ msgstr "Επιλογή"
-#: src/lib/elementary/elm_clock.c:309
#, fuzzy
-msgid "clock increment button for am,pm"
-msgstr "επόμενο κουμπί ρολογιού για πμ,μμ"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "επόμενο κουμπί ρολογιού για πμ,μμ"
-#: src/lib/elementary/elm_clock.c:317
#, fuzzy
-msgid "clock decrement button for am,pm"
-msgstr "προηγούμενο κουμπί ρολογιού για πμ,μμ"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Κατάσταση: Επεξεργάσιμο"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Ρολοι"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "προηγούμενο κουμπί ρολογιού για πμ,μμ"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "State: Editable"
+#~ msgstr "Κατάσταση: Επεξεργάσιμο"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "Clock"
+#~ msgstr "Ρολοι"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "color selector palette item"
+#~ msgstr "παλέτα επιλογής χρώματος"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "παλέτα επιλογής χρώματος"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
-
-#: src/lib/elementary/elm_dayselector.c:437
#, fuzzy
-msgid "day selector item"
-msgstr "επιλογή δίσκου"
-
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "επιλογή δίσκου"
+#~ msgid "day selector item"
+#~ msgstr "επιλογή δίσκου"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Αποκοπή"
+#~ msgid "diskselector item"
+#~ msgstr "επιλογή δίσκου"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Αντιγραφή"
+#~ msgid "Cut"
+#~ msgstr "Αποκοπή"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Επικόλληση"
+#~ msgid "Copy"
+#~ msgstr "Αντιγραφή"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Επιλογή"
+#~ msgid "Paste"
+#~ msgstr "Επικόλληση"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Καταχώριση"
+#~ msgid "Select"
+#~ msgstr "Επιλογή"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Κατάλογος"
+#~ msgid "Entry"
+#~ msgstr "Καταχώριση"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Αντικείμενο Καταλόγου"
+#~ msgid "Index"
+#~ msgstr "Κατάλογος"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Ετικέτα"
+#~ msgid "Index Item"
+#~ msgstr "Αντικείμενο Καταλόγου"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "Κατάσταση: Ανοικτό"
+#~ msgid "Label"
+#~ msgstr "Ετικέτα"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "Κατάσταση: Κλειστό"
+#~ msgid "state: opened"
+#~ msgstr "Κατάσταση: Ανοικτό"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "state: closed"
+#~ msgstr "Κατάσταση: Κλειστό"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "panel button"
+#~ msgstr "κουμπί πινακα"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "κουμπί πινακα"
+#~ msgid "progressbar"
+#~ msgstr "Μπάρα Προόδου"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "Μπάρα Προόδου"
+#~ msgid "Radio"
+#~ msgstr "Επιλογή"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Επιλογή"
+#~ msgid "State: Selected"
+#~ msgstr "Κατάσταση: Επιλεγμένο"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Κατάσταση: Επιλεγμένο"
-
-#: src/lib/elementary/elm_segment_control.c:530
#, fuzzy
-msgid "State: Unselected"
-msgstr "Κατάσταση: Επιλεγμένο"
-
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "μπάρα κύλισης"
+#~ msgid "State: Unselected"
+#~ msgstr "Κατάσταση: Επιλεγμένο"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "slider"
+#~ msgstr "μπάρα κύλισης"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
#, fuzzy
-msgid "spinner"
-msgstr "spinner"
+#~ msgid "spinner"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
#, fuzzy
-msgid "spinner increment button"
-msgstr "κουμπί spinner επόμενο"
+#~ msgid "spinner increment button"
+#~ msgstr "κουμπί spinner επόμενο"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
#, fuzzy
-msgid "spinner decrement button"
-msgstr "κουμπί spinner προηγούμενο"
+#~ msgid "spinner decrement button"
+#~ msgstr "κουμπί spinner προηγούμενο"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "spinner"
+#~ msgid "spinner text"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Επιλεγμένο"
+#~ msgid "Selected"
+#~ msgstr "Επιλεγμένο"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Διαχωριστικό"
+#~ msgid "Separator"
+#~ msgstr "Διαχωριστικό"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Έχει μενού"
+#~ msgid "Has menu"
+#~ msgstr "Έχει μενού"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Μη Επιλεγμένο"
+#~ msgid "Unselected"
+#~ msgstr "Μη Επιλεγμένο"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Αντικείμενο μπάρας εργαλείων"
+#~ msgid "Toolbar Item"
+#~ msgstr "Αντικείμενο μπάρας εργαλείων"
#~ msgid "Gengrid Item"
#~ msgstr "Αντικείμενο Gengrid"
diff --git a/po/eo.po b/po/eo.po
index 6f19cab7bd..7469390845 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -3,12 +3,12 @@
# This file is distributed under the same license as the enlightenment package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: enlightenment\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2013-11-05 18:59+0000\n"
"Last-Translator: Eliovir <Unknown>\n"
"Language-Team: Esperanto <eo@li.org>\n"
@@ -19,557 +19,419 @@ msgstr ""
"X-Launchpad-Export-Date: 2014-02-14 06:59+0000\n"
"X-Generator: Launchpad (build 16916)\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versio:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Uzado:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [opcioj]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Kopirajto:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Permesilo:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Speco: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Apriore: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Elektoj: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Neniu kategorio disponebla"
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Kategorioj: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opcioj:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Poziciaj argumentoj:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ERARO: nekonata kategorio \"%s\".\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ERARO: nekonata opcio --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ERARO: nekonata opcio -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ERARO: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "valoro ne havas agorditan referencon.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "nekonata bulea valoro %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "nevalida numeraranĝo %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "nevalida elekto \"%s\". Validaj valoroj estas: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "postaldonenda parametro mankas.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "valoro ne sintakse analizeblas.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "parametro mankas.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "funkcio vokita per referenco mankas!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "neniu versio estas difinita.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "neniu kopirajto estas difinita.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "neniu permesilo estas difinita.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ERARO: nekonata opcio --%s. Ignorita.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ERARO: opcio --%s postulas argumenton!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ERARO: nekonata opcio -%c. Ignorata.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ERARO: opcio -%c postulas argumenton!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "ERARO: nepra poziciaj argumento %s mankas.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "ERARO: neeltena tipo de agado %d por pozicia argumento %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ERARO: neniu sintaksa analizilo provizita.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ERARO: neniu valoro provizita.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ERARO: neniu argumento provizita.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ERARO: nevalidaj opcioj trovitaj."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Vidu --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Vidu -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "ERARO: nevalida poziciaj argumentoj trovitaj."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ERARO: nekorekta geometria valoro '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ERARO: nekorekta valoro de grando '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Labortablo"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Elŝutujo"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Ŝablonujo"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Publikujo"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Dokumentujo"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Muzikujo"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Bildujo"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videujo"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Titolo"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Titolo"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Reen"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Supren"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Hejmo"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "Bone"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Nuligi"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Stato: malŝaltita"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Stato: malŝaltita"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
+#~ msgid "Next"
+#~ msgstr "Antaŭen"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
+#~ msgid "Popup Title"
+#~ msgstr "Titolo de spruĉfenestro"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#~ msgid "Popup Body Text"
+#~ msgstr "Enhava teksto de spruĉfenestro"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Titolo"
+#~ msgid "Bubble"
+#~ msgstr "Veziko"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Titolo"
+#~ msgid "Clicked"
+#~ msgstr "Alklakita"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Reen"
+#~ msgid "Button"
+#~ msgstr "Butono"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Antaŭen"
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Titolo de spruĉfenestro"
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Enhava teksto de spruĉfenestro"
+#~ msgid "%Y"
+#~ msgstr "%V"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "kalendarero"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Veziko"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Alklakita"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Butono"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%V"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "kalendarero"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "Dekrementa butono de monata kalendaro"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "Dekrementa butono de jara kalendaro"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "Alkrementa butono de monata kalendaro"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "Alkrementa butono de jara kalendaro"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "monato de kalendaro"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "jara kalendaro"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Stato: enŝaltita"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Stato: malŝaltita"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Stato"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Kontroli"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "Alkrementa butono de ĥorloĝo por m,ptm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "Dekrementa butono de ĥorloĝo por m,ptm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Stato: redaktebla"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Horloĝo"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "calendar decrement month button"
+#~ msgstr "Dekrementa butono de monata kalendaro"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "calendar decrement year button"
+#~ msgstr "Dekrementa butono de jara kalendaro"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "calendar increment month button"
+#~ msgstr "Alkrementa butono de monata kalendaro"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "calendar increment year button"
+#~ msgstr "Alkrementa butono de jara kalendaro"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "calendar month"
+#~ msgstr "monato de kalendaro"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "ero de elektilo de kolorpaletro"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "calendar year"
+#~ msgstr "jara kalendaro"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr ""
+#~ msgid "State: On"
+#~ msgstr "Stato: enŝaltita"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "ero de diskelektilo"
+#~ msgid "State: Off"
+#~ msgstr "Stato: malŝaltita"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Eltondi"
+#~ msgid "State"
+#~ msgstr "Stato"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopii"
+#~ msgid "Check"
+#~ msgstr "Kontroli"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Alglui"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "Alkrementa butono de ĥorloĝo por m,ptm"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Elekti"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "Dekrementa butono de ĥorloĝo por m,ptm"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Ero"
+#~ msgid "State: Editable"
+#~ msgstr "Stato: redaktebla"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Indekso"
+#~ msgid "Clock"
+#~ msgstr "Horloĝo"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Indeksero"
+#~ msgid "color selector palette item"
+#~ msgstr "ero de elektilo de kolorpaletro"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etikedo"
+#~ msgid "diskselector item"
+#~ msgstr "ero de diskelektilo"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "stato: malfermita"
+#~ msgid "Cut"
+#~ msgstr "Eltondi"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "stato: fermita"
+#~ msgid "Copy"
+#~ msgstr "Kopii"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "Paste"
+#~ msgstr "Alglui"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "Select"
+#~ msgstr "Elekti"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "butono de panelo"
+#~ msgid "Entry"
+#~ msgstr "Ero"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "progresbreto"
+#~ msgid "Index"
+#~ msgstr "Indekso"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Radiobutono"
+#~ msgid "Index Item"
+#~ msgstr "Indeksero"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Stato: elektita"
+#~ msgid "Label"
+#~ msgstr "Etikedo"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Stato: ne elektita"
+#~ msgid "state: opened"
+#~ msgstr "stato: malfermita"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
+#~ msgid "state: closed"
+#~ msgstr "stato: fermita"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "ŝovilo"
+#~ msgid "panel button"
+#~ msgstr "butono de panelo"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "progressbar"
+#~ msgstr "progresbreto"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "Radio"
+#~ msgstr "Radiobutono"
+
+#~ msgid "State: Selected"
+#~ msgstr "Stato: elektita"
+
+#~ msgid "State: Unselected"
+#~ msgstr "Stato: ne elektita"
+
+#~ msgid "slider"
+#~ msgstr "ŝovilo"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "sago-butono"
+#~ msgid "spinner"
+#~ msgstr "sago-butono"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "alkrementa sago-butono"
+#~ msgid "spinner increment button"
+#~ msgstr "alkrementa sago-butono"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "dekrementa sago-butono"
+#~ msgid "spinner decrement button"
+#~ msgstr "dekrementa sago-butono"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "sago-butono"
+#~ msgid "spinner text"
+#~ msgstr "sago-butono"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Elektita"
+#~ msgid "Selected"
+#~ msgstr "Elektita"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Disigilo"
+#~ msgid "Separator"
+#~ msgstr "Disigilo"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Ĝi havas menuo"
+#~ msgid "Has menu"
+#~ msgstr "Ĝi havas menuo"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Malelektita"
+#~ msgid "Unselected"
+#~ msgstr "Malelektita"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Ilobretero"
+#~ msgid "Toolbar Item"
+#~ msgstr "Ilobretero"
#~ msgid "Gengrid Item"
#~ msgstr "Ero de komuna krado"
diff --git a/po/es.po b/po/es.po
index 03ce508816..ee3a5c7bb7 100644
--- a/po/es.po
+++ b/po/es.po
@@ -4,11 +4,12 @@
# Aníbal Garrido <khany@member.trisquel.info>, 2012.
# Adrián Arévalo <adri58@gmail.com>, 2015.
# Roy W. Reese <waterbearer54@gmx.com>, 2019.
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2019-07-09 10:28+0200\n"
"Last-Translator: Roy W. Reese <waterbearer54@gmx.com>\n"
"Language-Team: Enlightenment Team\n"
@@ -18,561 +19,471 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.2\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versión:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Uso:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [opciones]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licencia:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tipo:"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Predeterminado"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Elecciones:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "No hay categorías disponibles."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Categorías:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opciones:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Argumentos posicionales:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ERROR: categoría desconocida '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ERROR: opción desconocida --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ERROR: opción desconocida -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ERROR: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "valor sin puntero establecido.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "valor booleano desconocido %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "formato numérico inválido %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "elección inválida \"%s\". Los valores válidos son:"
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "falta parámetro a anexionar.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "incapaz de analizar el valor.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "parámetro faltante.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "función de invocación faltante!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "no se definió la versión.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "no se definió el copyright.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "no se definió la licencia.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ERROR: opción desconocida --%s, ignorada.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ERROR: La opción --%s requiere un argumento!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ERROR: opción desconocida -%c, ignorada.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ERROR: La opción -%c requiere un argumento!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "ERROR: Falta un argumento posicional requerido %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "ERROR: tipo de acción %d no permitido para argumento posicional %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ERROR: no se proporcionó ningún parser.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ERROR: no se proporcionó ningún valor.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ERROR: no se proporcionó ningún argumento.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ERROR: opciones inválidas."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Vea --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Vea -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "ERROR: argumentos posicionales inválidos encontrados."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ERROR: valor geométrico incorrecto '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ERROR: tamaño incorrecto '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Escritorio"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Descargas"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Plantillas"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Público"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Documentos"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Música"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Imágenes"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Vídeos"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Título"
+
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
+msgstr "Subtítulo"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Atrás"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Arriba"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Carpeta personal"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "Buscar"
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "Aceptar"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Cancelar"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Estado: Desactivado"
+#~ msgid "State: Disabled"
+#~ msgstr "Estado: Desactivado"
-#: src/lib/elementary/elc_hoversel.c:652
#, fuzzy
-msgid "Hoversel"
-msgstr "Hoversel"
+#~ msgid "Hoversel"
+#~ msgstr "Hoversel"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "etiqueta de entrada multi-botón"
+#~ msgid "multi button entry label"
+#~ msgstr "etiqueta de entrada multi-botón"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "elemento de entrada multi-botón"
+#~ msgid "multi button entry item"
+#~ msgstr "elemento de entrada multi-botón"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "entrada multi-botón"
+#~ msgid "multi button entry"
+#~ msgstr "entrada multi-botón"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Título"
+#~ msgid "Next"
+#~ msgstr "Siguiente"
-#: src/lib/elementary/elc_naviframe.c:415
-msgid "Subtitle"
-msgstr "Subtítulo"
+#~ msgid "Popup Title"
+#~ msgstr "Título del cuadro emergente"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Atrás"
+#~ msgid "Popup Body Text"
+#~ msgstr "Texto del cuadro emergente"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Siguiente"
+#~ msgid "Alert"
+#~ msgstr "Alerta"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Título del cuadro emergente"
+#~ msgid "Bubble"
+#~ msgstr "Burbuja"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Texto del cuadro emergente"
+# Antiguemente: "Clickado"
+#~ msgid "Clicked"
+#~ msgstr "Seleccionado"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr "Alerta"
+#~ msgid "Button"
+#~ msgstr "Botón"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Burbuja"
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-# Antiguemente: "Clickado"
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Seleccionado"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Botón"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "elemento de calendario"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "Botón de decremento del mes"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "Botón de decremento del año"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "Botón de incremento del mes"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "Botón de incremento del año"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "mes del calendario"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "año del calendario"
+#~ msgid "%B"
+#~ msgstr "%B"
+
+#~ msgid "%Y"
+#~ msgstr "%Y"
+
+#~ msgid "calendar item"
+#~ msgstr "elemento de calendario"
+
+#~ msgid "calendar decrement month button"
+#~ msgstr "Botón de decremento del mes"
+
+#~ msgid "calendar decrement year button"
+#~ msgstr "Botón de decremento del año"
+
+#~ msgid "calendar increment month button"
+#~ msgstr "Botón de incremento del mes"
+
+#~ msgid "calendar increment year button"
+#~ msgstr "Botón de incremento del año"
+
+#~ msgid "calendar month"
+#~ msgstr "mes del calendario"
+
+#~ msgid "calendar year"
+#~ msgstr "año del calendario"
# RR: antiguamente "conectado"
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Estado: Habilitado"
+#~ msgid "State: On"
+#~ msgstr "Estado: Habilitado"
# RR: antinguamente "desconectado"
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Estado: Deshabilitado"
+#~ msgid "State: Off"
+#~ msgstr "Estado: Deshabilitado"
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Estado"
+#~ msgid "State"
+#~ msgstr "Estado"
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Comprobar"
+#~ msgid "Check"
+#~ msgstr "Comprobar"
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "Botón de aumento del reloj para am,pm"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "Botón de aumento del reloj para am,pm"
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "Botón de decremento del reloj para am,pm"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "Botón de decremento del reloj para am,pm"
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Estado: Editable"
+#~ msgid "State: Editable"
+#~ msgstr "Estado: Editable"
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Reloj"
+#~ msgid "Clock"
+#~ msgstr "Reloj"
# RR: Siguentes colores usan las letras initiales del inglés
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr "Elija un color"
+#~ msgid "Pick a color"
+#~ msgstr "Elija un color"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr "R:"
+#~ msgid "R:"
+#~ msgstr "R:"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr "G:"
+#~ msgid "G:"
+#~ msgstr "G:"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr "B:"
+#~ msgid "B:"
+#~ msgstr "B:"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr "A:"
+#~ msgid "A:"
+#~ msgstr "A:"
# RR: Antiguamente - "Paleta de selección de color", pero creo que refiere a un selector como en las cadenas más abajo.
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "selector de color de paleta"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "color selector palette item"
+#~ msgstr "selector de color de paleta"
+
+#~ msgid "day selector item"
+#~ msgstr "selector de día"
+
+#~ msgid "diskselector item"
+#~ msgstr "selector de disco"
+
+#~ msgid "Cut"
+#~ msgstr "Cortar"
+
+#~ msgid "Copy"
+#~ msgstr "Copiar"
+
+#~ msgid "Paste"
+#~ msgstr "Pegar"
+
+#~ msgid "Select"
+#~ msgstr "Seleccionar"
+
+#~ msgid "Entry"
+#~ msgstr "Entrada"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "selector de día"
+#~ msgid "Index"
+#~ msgstr "Índice"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "selector de disco"
+#~ msgid "Index Item"
+#~ msgstr "Elemento del índice"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Cortar"
+#~ msgid "Label"
+#~ msgstr "Etiqueta"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Copiar"
+#~ msgid "state: opened"
+#~ msgstr "estado: abierto"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Pegar"
+#~ msgid "state: closed"
+#~ msgstr "estado: cerrado"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Seleccionar"
+#~ msgid "A panel is open"
+#~ msgstr "Ya hay un panel abierto"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Entrada"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Doble click para cerrar el menú de panel"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Índice"
+#~ msgid "panel button"
+#~ msgstr "botón del panel"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Elemento del índice"
+#~ msgid "progressbar"
+#~ msgstr "barra de progreso"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etiqueta"
+#~ msgid "Radio"
+#~ msgstr "Radio"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "estado: abierto"
+#~ msgid "State: Selected"
+#~ msgstr "Estado: Seleccionado"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "estado: cerrado"
+#~ msgid "State: Unselected"
+#~ msgstr "Estado: No seleccionado"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Ya hay un panel abierto"
+#~ msgid "Segment Control Item"
+#~ msgstr "Elemento del control del segmento"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Doble click para cerrar el menú de panel"
+#~ msgid "slider"
+#~ msgstr "deslizador"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "botón del panel"
+#~ msgid "incremented"
+#~ msgstr "incrementado"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "barra de progreso"
+#~ msgid "decremented"
+#~ msgstr "decrementado"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Radio"
+#~ msgid "spinner"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Estado: Seleccionado"
+#~ msgid "spinner increment button"
+#~ msgstr "botón de incremento del spinner"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Estado: No seleccionado"
+#~ msgid "spinner decrement button"
+#~ msgstr "botón de decremento del spinner"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Elemento del control del segmento"
+#~ msgid "spinner text"
+#~ msgstr "text del spinner"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "deslizador"
+#~ msgid "Selected"
+#~ msgstr "Seleccionado"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr "incrementado"
+#~ msgid "Separator"
+#~ msgstr "Separador"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr "decrementado"
+#~ msgid "Has menu"
+#~ msgstr "Tiene menú"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "spinner"
+#~ msgid "Unselected"
+#~ msgstr "Sin seleccionar"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "botón de incremento del spinner"
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "botón de decremento del spinner"
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr "text del spinner"
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Seleccionado"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Separador"
-
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Tiene menú"
-
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Sin seleccionar"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Elemento de la barra de herramientas"
+#~ msgid "Toolbar Item"
+#~ msgstr "Elemento de la barra de herramientas"
#~ msgid "Gengrid Item"
#~ msgstr "Cuadrícula genérica"
diff --git a/po/fa.po b/po/fa.po
index b3193c5d9c..aae10912d8 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -2,11 +2,12 @@
# This file is distributed under the same license as the Elementary package.
# FIRST AUTHOR <tom.hacohen@samsung.com>, 2010.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2010-12-26 10:05+0200\n"
"Last-Translator: Tom Hacohen <tom.hacohen@samsung.com>\n"
"Language-Team: General\n"
@@ -16,335 +17,259 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
msgstr ""
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
msgstr ""
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
msgstr ""
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
-msgstr ""
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:RTL"
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
msgstr ""
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
msgstr ""
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
+#: 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 ""
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
+#, c-format
+msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:RTL"
-
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
msgstr ""
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-msgid "State: Unselected"
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
msgstr ""
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:RTL"
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/fi.po b/po/fi.po
index 950af55d7c..5e6ee8bd0e 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -3,12 +3,12 @@
# This file is distributed under the same license as the enlightenment package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: enlightenment\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2014-08-31 15:13+0000\n"
"Last-Translator: Kai Huuhko <kai.huuhko@gmail.com>\n"
"Language-Team: Finnish <fi@li.org>\n"
@@ -19,274 +19,231 @@ msgstr ""
"X-Launchpad-Export-Date: 2014-09-01 07:00+0000\n"
"X-Generator: Launchpad (build 17176)\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versio:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Käyttö:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [optiot]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Tekijänoikeudet:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Lisenssi:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tyyppi: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Oletus: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Valinnat: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Yhtään luokkaa ei ole käytettävissä."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Luokat: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Vaihtoehdot:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Sija-argumentit:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "VIRHE: tuntematon luokka '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "VIRHE: tuntematon optio --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "VIRHE: tuntematon optio -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "VIRHE: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "arvolle ei ole asetettu osoitinta.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "tuntematon boolean-arvo %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "virheellinen numeroformaatti: %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "virheellinen valinta \"%s\". Tuetut arvot ovat: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "puuttuva parametri lisäykselle.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "arvoa ei voitu jäsentää.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "puuttuva parametri.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "puuttuva takaisinkutsufunktio!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "versiota ei määritelty.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "tekijänoikeuksia ei määritelty.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "lisenssiä ei määritelty.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "VIRHE: tuntematon optio --%s, jätetty huomioimatta.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "VIRHE: optio --%s tarvitsee argumentin!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "VIRHE: tuntematon optio -%c, jätetty huomioimatta.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "VIRHE: optio -%c tarvitsee argumentin\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "VIRHE: puuttuva pakollinen sija-argumentti %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "VIRHE: toimintotyyppi %d ei ole tuettu sija-argumentille %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "VIRHE: jäsennintä ei annettu.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "VIRHE: yhtään arvoa ei annettu.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "VIRHE: yhtään argumenttia ei annettu.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "VIRHE: virheellisiä optioita löydetty."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Katso --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Katso -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "VIRHE: virheellisiä sija-argumentteja löydetty."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "VIRHE: virheellinen geometrinen arvo '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "VIRHE: virheellinen koon arvo '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Työpöytä"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Lataukset"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Mallipohjat"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Julkinen"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Asiakirjat"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Musiikki"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Kuvat"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videot"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "Ylös"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "Koti"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "OK"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Peruuta"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Tila: Pois käytöstä"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "moninappisyöttökentän nimiö"
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "moninappisyöttökentän kohta"
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "moninappisyöttökenttä"
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr "Otsikko"
@@ -295,281 +252,186 @@ msgstr "Otsikko"
msgid "Subtitle"
msgstr "Otsikko"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr "Takaisin"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Seuraava"
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Ponnahdusikkunan otsikko"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "Ylös"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Ponnahdusikkunan leipäteksti"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "Koti"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Kupla"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Napsautettu"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Painike"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "OK"
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "kalenterin kohta"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Peruuta"
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Tila: Pois käytöstä"
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr ""
+#~ msgid "multi button entry label"
+#~ msgstr "moninappisyöttökentän nimiö"
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr ""
+#~ msgid "multi button entry item"
+#~ msgstr "moninappisyöttökentän kohta"
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr ""
+#~ msgid "multi button entry"
+#~ msgstr "moninappisyöttökenttä"
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "kalenterikuukausi"
+#~ msgid "Next"
+#~ msgstr "Seuraava"
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "kalenterivuosi"
+#~ msgid "Popup Title"
+#~ msgstr "Ponnahdusikkunan otsikko"
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Tila: päällä"
+#~ msgid "Popup Body Text"
+#~ msgstr "Ponnahdusikkunan leipäteksti"
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Tila: pois päältä"
+#~ msgid "Bubble"
+#~ msgstr "Kupla"
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Tila"
+#~ msgid "Clicked"
+#~ msgstr "Napsautettu"
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Valinta"
+#~ msgid "Button"
+#~ msgstr "Painike"
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr ""
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Tila: muokattavissa"
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Kello"
+#~ msgid "calendar item"
+#~ msgstr "kalenterin kohta"
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "calendar month"
+#~ msgstr "kalenterikuukausi"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "calendar year"
+#~ msgstr "kalenterivuosi"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "State: On"
+#~ msgstr "Tila: päällä"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "State: Off"
+#~ msgstr "Tila: pois päältä"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "State"
+#~ msgstr "Tila"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "värivalitsimen palettikohta"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "Check"
+#~ msgstr "Valinta"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "päivyrin kohta"
+#~ msgid "State: Editable"
+#~ msgstr "Tila: muokattavissa"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "kiekkovalitsimen kohta"
+#~ msgid "Clock"
+#~ msgstr "Kello"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Leikkaa"
+#~ msgid "color selector palette item"
+#~ msgstr "värivalitsimen palettikohta"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopioi"
+#~ msgid "day selector item"
+#~ msgstr "päivyrin kohta"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Liitä"
+#~ msgid "diskselector item"
+#~ msgstr "kiekkovalitsimen kohta"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Valitse"
+#~ msgid "Cut"
+#~ msgstr "Leikkaa"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Syöttökenttä"
+#~ msgid "Copy"
+#~ msgstr "Kopioi"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Indeksi"
+#~ msgid "Paste"
+#~ msgstr "Liitä"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Indeksin kohta"
+#~ msgid "Select"
+#~ msgstr "Valitse"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Nimiö"
+#~ msgid "Entry"
+#~ msgstr "Syöttökenttä"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "tila: avattu"
+#~ msgid "Index"
+#~ msgstr "Indeksi"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "tila: suljettu"
+#~ msgid "Index Item"
+#~ msgstr "Indeksin kohta"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Paneeli on auki"
+#~ msgid "Label"
+#~ msgstr "Nimiö"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Kaksoisnäpäytä sulkeaksesi paneelivalikon"
+#~ msgid "state: opened"
+#~ msgstr "tila: avattu"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "Paneelinappi"
+#~ msgid "state: closed"
+#~ msgstr "tila: suljettu"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "Tilanneilmaisin"
+#~ msgid "A panel is open"
+#~ msgstr "Paneeli on auki"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Vaihtoehto"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Kaksoisnäpäytä sulkeaksesi paneelivalikon"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Tila: valittu"
+#~ msgid "panel button"
+#~ msgstr "Paneelinappi"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Tila: valitsematon"
+#~ msgid "progressbar"
+#~ msgstr "Tilanneilmaisin"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
+#~ msgid "Radio"
+#~ msgstr "Vaihtoehto"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "liukusäädin"
+#~ msgid "State: Selected"
+#~ msgstr "Tila: valittu"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "State: Unselected"
+#~ msgstr "Tila: valitsematon"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "slider"
+#~ msgstr "liukusäädin"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "pyörövalitsin"
+#~ msgid "spinner"
+#~ msgstr "pyörövalitsin"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "Pyörövalitsimen lisää-nappi"
+#~ msgid "spinner increment button"
+#~ msgstr "Pyörövalitsimen lisää-nappi"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "Pyörövalitsimen vähennä-nappi"
+#~ msgid "spinner decrement button"
+#~ msgstr "Pyörövalitsimen vähennä-nappi"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "pyörövalitsin"
+#~ msgid "spinner text"
+#~ msgstr "pyörövalitsin"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Valittu"
+#~ msgid "Selected"
+#~ msgstr "Valittu"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Erotin"
+#~ msgid "Separator"
+#~ msgstr "Erotin"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Valikollinen"
+#~ msgid "Has menu"
+#~ msgstr "Valikollinen"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Valitsematon"
+#~ msgid "Unselected"
+#~ msgstr "Valitsematon"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Työkalupalkin kohta"
+#~ msgid "Toolbar Item"
+#~ msgstr "Työkalupalkin kohta"
#~ msgid "Gengrid Item"
#~ msgstr "Gengridin kohta"
diff --git a/po/fr.po b/po/fr.po
index 9929b11a34..f091c542b3 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,11 +7,12 @@
# Chidambar Zinnoury <illogict@online.fr>, 2013.
# similar <similar@orange.fr>, 2019.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2019-06-27 11:57+0200\n"
"Last-Translator: Philippe Jean Guillaumie <similar@orange.fr>\n"
"Language-Team: French>\n"
@@ -23,552 +24,464 @@ msgstr ""
"X-Generator: Poedit 2.0.6\n"
"X-Poedit-SourceCharset: utf-8\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Version :"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Usage :"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [options]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright :"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licence :"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Type : "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Par défaut : "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Choix : "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Pas de catégorie disponible."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Catégories : "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Options :\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Paramètres positionnels :\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ERREUR : catégorie inconnue « %s ».\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ERREUR : option inconnue --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ERREUR : option inconnue -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ERREUR : "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "la valeur n’a aucun pointeur défini.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "valeur booléenne inconnue %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "format du nombre non valide %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "choix non valide « %s ». Les valeurs valides sont : "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "paramètre manquant à ajouter.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "analyse de la valeur impossible.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "paramètre manquant.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "fonction de rappel manquante !\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "aucune version n’est définie.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "aucun copyright n’est défini.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "aucune licence n’est définie.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ERREUR : option inconnue --%s, non prise en compte.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ERREUR : l’option --%s requiert un argument !\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ERREUR : option inconnue -%c, non prise en compte.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ERREUR : l’option -%c requiert un argument !\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "ERREUR : paramètre positionnel requis manquant %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
-msgstr "ERREUR : type d'action non pris en charge %d pour le paramètre positionnel %s\n"
+msgstr ""
+"ERREUR : type d'action non pris en charge %d pour le paramètre positionnel "
+"%s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ERREUR : aucun analyseur n’est fourni.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ERREUR : aucune valeur n’est fournie.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ERREUR : aucun argument n’est fourni.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ERREUR : options non valides détectées."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Voir --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Voir -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "ERREUR : paramètres positionnels non valides détectées."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ERREUR : valeur géométrique incorrecte « %s »\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ERREUR : valeur de taille incorrecte « %s »\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Bureau"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Téléchargements"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Modèles"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Public"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Documents"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Musique"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Images"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Vidéos"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "par défaut : LTR (de gauche à droite)"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Titre"
+
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
+msgstr "Sous-titre"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Retour"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Monter"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Home"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "Rechercher"
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "OK"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Annuler"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "État : désactivé"
+#~ msgid "State: Disabled"
+#~ msgstr "État : désactivé"
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr "Hoversel"
+#~ msgid "Hoversel"
+#~ msgstr "Hoversel"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "étiquette d'entrée à plusieurs boutons"
+#~ msgid "multi button entry label"
+#~ msgstr "étiquette d'entrée à plusieurs boutons"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "élément d'entrée à plusieurs boutons"
+#~ msgid "multi button entry item"
+#~ msgstr "élément d'entrée à plusieurs boutons"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "entrée à plusieurs boutons"
+#~ msgid "multi button entry"
+#~ msgstr "entrée à plusieurs boutons"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Titre"
+#~ msgid "Next"
+#~ msgstr "Suivant"
-#: src/lib/elementary/elc_naviframe.c:415
-msgid "Subtitle"
-msgstr "Sous-titre"
+#~ msgid "Popup Title"
+#~ msgstr "Titre du pop-up"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Retour"
+#~ msgid "Popup Body Text"
+#~ msgstr "Corps du texte du pop-up"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Suivant"
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Titre du pop-up"
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Corps du texte du pop-up"
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr "Alerte"
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Bulle"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Cliqué"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Bouton"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "élément du calendrier"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "bouton de passage au mois précédent"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "bouton de passage à l'année précédente"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "bouton de passage au mois suivant"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "bouton de passage à l'année suivante"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "mois du calendrier"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "année du calendrier"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "État : activé"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "État : désactivé"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "État"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "À cocher"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "bouton d'incrémentation pour matin (am), après-midi (pm)"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "bouton de décrémentation pour matin (am), après-midi (pm)"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "État : éditable"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Horloge"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr "Choisir une couleur"
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr "R (rouge) :"
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr "G (vert) :"
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr "B (bleu) :"
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr "A (alpha)"
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "élément du sélecteur de couleur"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "par défaut : LTR (de gauche à droite)"
+#~ msgid "Alert"
+#~ msgstr "Alerte"
+
+#~ msgid "Bubble"
+#~ msgstr "Bulle"
+
+#~ msgid "Clicked"
+#~ msgstr "Cliqué"
+
+#~ msgid "Button"
+#~ msgstr "Bouton"
+
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
+
+#~ msgid "%B"
+#~ msgstr "%B"
+
+#~ msgid "%Y"
+#~ msgstr "%Y"
+
+#~ msgid "calendar item"
+#~ msgstr "élément du calendrier"
+
+#~ msgid "calendar decrement month button"
+#~ msgstr "bouton de passage au mois précédent"
+
+#~ msgid "calendar decrement year button"
+#~ msgstr "bouton de passage à l'année précédente"
+
+#~ msgid "calendar increment month button"
+#~ msgstr "bouton de passage au mois suivant"
+
+#~ msgid "calendar increment year button"
+#~ msgstr "bouton de passage à l'année suivante"
+
+#~ msgid "calendar month"
+#~ msgstr "mois du calendrier"
+
+#~ msgid "calendar year"
+#~ msgstr "année du calendrier"
+
+#~ msgid "State: On"
+#~ msgstr "État : activé"
+
+#~ msgid "State: Off"
+#~ msgstr "État : désactivé"
+
+#~ msgid "State"
+#~ msgstr "État"
+
+#~ msgid "Check"
+#~ msgstr "À cocher"
+
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "bouton d'incrémentation pour matin (am), après-midi (pm)"
+
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "bouton de décrémentation pour matin (am), après-midi (pm)"
+
+#~ msgid "State: Editable"
+#~ msgstr "État : éditable"
+
+#~ msgid "Clock"
+#~ msgstr "Horloge"
+
+#~ msgid "Pick a color"
+#~ msgstr "Choisir une couleur"
+
+#~ msgid "R:"
+#~ msgstr "R (rouge) :"
+
+#~ msgid "G:"
+#~ msgstr "G (vert) :"
+
+#~ msgid "B:"
+#~ msgstr "B (bleu) :"
+
+#~ msgid "A:"
+#~ msgstr "A (alpha)"
+
+#~ msgid "color selector palette item"
+#~ msgstr "élément du sélecteur de couleur"
+
+#~ msgid "day selector item"
+#~ msgstr "élément du sélecteur du jour"
+
+#~ msgid "diskselector item"
+#~ msgstr "élément du sélecteur de disque"
+
+#~ msgid "Cut"
+#~ msgstr "Couper"
+
+#~ msgid "Copy"
+#~ msgstr "Copier"
+
+#~ msgid "Paste"
+#~ msgstr "Coller"
+
+#~ msgid "Select"
+#~ msgstr "Sélectionner"
+
+#~ msgid "Entry"
+#~ msgstr "Entrée"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "élément du sélecteur du jour"
+#~ msgid "Index"
+#~ msgstr "Index"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "élément du sélecteur de disque"
+#~ msgid "Index Item"
+#~ msgstr "Élément de l'index"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Couper"
+#~ msgid "Label"
+#~ msgstr "Étiquette"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Copier"
+#~ msgid "state: opened"
+#~ msgstr "état : ouvert"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Coller"
+#~ msgid "state: closed"
+#~ msgstr "état : fermé"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Sélectionner"
+#~ msgid "A panel is open"
+#~ msgstr "Un panneau est ouvert"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Entrée"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Appuyer deux fois pour fermer le menu du panneau"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Index"
+#~ msgid "panel button"
+#~ msgstr "bouton de panneau"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Élément de l'index"
+#~ msgid "progressbar"
+#~ msgstr "barre de progression"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Étiquette"
+#~ msgid "Radio"
+#~ msgstr "Radio"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "état : ouvert"
+#~ msgid "State: Selected"
+#~ msgstr "État : sélectionné"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "état : fermé"
+#~ msgid "State: Unselected"
+#~ msgstr "État : désélectionné"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Un panneau est ouvert"
+#~ msgid "Segment Control Item"
+#~ msgstr "Élément de contrôle de segment"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Appuyer deux fois pour fermer le menu du panneau"
+#~ msgid "slider"
+#~ msgstr "curseur"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "bouton de panneau"
+#~ msgid "incremented"
+#~ msgstr "augmenté"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "barre de progression"
+#~ msgid "decremented"
+#~ msgstr "diminué"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Radio"
+#~ msgid "spinner"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "État : sélectionné"
+#~ msgid "spinner increment button"
+#~ msgstr "bouton d'incrémentation du spinner"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "État : désélectionné"
+#~ msgid "spinner decrement button"
+#~ msgstr "bouton de décrémentation du spinner"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Élément de contrôle de segment"
+#~ msgid "spinner text"
+#~ msgstr "texte du spinner"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "curseur"
+#~ msgid "Selected"
+#~ msgstr "Sélectionné"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr "augmenté"
+#~ msgid "Separator"
+#~ msgstr "Séparateur"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr "diminué"
+#~ msgid "Has menu"
+#~ msgstr "Possède un menu"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "spinner"
+#~ msgid "Unselected"
+#~ msgstr "Non sélectionné"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "bouton d'incrémentation du spinner"
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "bouton de décrémentation du spinner"
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr "texte du spinner"
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Sélectionné"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Séparateur"
-
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Possède un menu"
-
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Non sélectionné"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Élément de barre d'outils"
+#~ msgid "Toolbar Item"
+#~ msgstr "Élément de barre d'outils"
diff --git a/po/gl.po b/po/gl.po
index da1df63d5a..e577c76b9a 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -2,12 +2,12 @@
# This file is put in the public domain.
# Aníbal Garrido <khany@member.trisquel.info>, 2012.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2014-05-24 08:39+0000\n"
"Last-Translator: Kaptan <khanyux@gmail.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
@@ -18,557 +18,434 @@ msgstr ""
"X-Launchpad-Export-Date: 2014-01-22 05:30+0000\n"
"X-Generator: Launchpad (build 16901)\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versión:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Uso:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Dereitos de autor:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licenza"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tipo: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Predeterminado: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Eleccións: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opcións:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ERRO: opción descoñecida --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ERRO: opción descoñecida -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ERRO: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "non se definiu o valor.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "valor booleano descoñecido %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "formato numérico inválido %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "Elección inválida \"%s\". Os valores válidos son: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "faltan os parámetros a anexar.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "incapaz de procesar o valor.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "parámetro ausente.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "Función de invocación desaparecida!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "non se definiu a versión.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "non se definiron os dereitos de autor.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "non se definiu a licenza.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ERRO: opción descoñecida --%s, ignorada.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ERRO: opción --%s require un argumento!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ERRO: opción descoñecida -%c, ignorada.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ERRO: opción -%c require un argumento!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ERRO: non se forneceu ningún procesador.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ERRO: non se forneceu ningún valor.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ERRO: non se forneceu ningún argumento.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ERRO: atopadas opcións inválidas."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Consulte --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Consulte -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ERRO: valor xeométrico incorrecto '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ERRO: valor do tamaño incorrecto '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Escritorio"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Descargas"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Modelos"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Público"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Documentos"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Música"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Imaxes"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Vídeos"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Título"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "subtítulo"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Atrás"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Arriba"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Cartafol persoal"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "Aceptar"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Cancelar"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Estado: Desactivado"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Estado: Desactivado"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "etiqueta de entrada de botón múltiplo"
+#~ msgid "multi button entry label"
+#~ msgstr "etiqueta de entrada de botón múltiplo"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "elemento de entrada de botón múltiplo"
+#~ msgid "multi button entry item"
+#~ msgstr "elemento de entrada de botón múltiplo"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "entrada de botón múltiplo"
+#~ msgid "multi button entry"
+#~ msgstr "entrada de botón múltiplo"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Título"
+#~ msgid "Next"
+#~ msgstr "Seguinte"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "subtítulo"
+#~ msgid "Popup Title"
+#~ msgstr "Título da emerxente"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Atrás"
+#~ msgid "Popup Body Text"
+#~ msgstr "Corpo de texto emerxente"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Seguinte"
+#~ msgid "Bubble"
+#~ msgstr "Burbulla"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Título da emerxente"
+#~ msgid "Clicked"
+#~ msgstr "Premido"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Corpo de texto emerxente"
+#~ msgid "Button"
+#~ msgstr "Botón"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Burbulla"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Premido"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Botón"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "calendario"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "Botón de diminución de mes do calendario"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "Botón de diminución de ano do calendario"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "Botón de aumento de mes do calendario"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "Botón de aumento de ano do calendario"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "mes do calendario"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "ano do calendario"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Estado: Conectado"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Estado: Desconectado"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Estado"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Comprobar"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "Botón de aumento do reloxo para am,pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "Botón de diminución do reloxo para am,pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Estado: Editable"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Reloxo"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "calendario"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "calendar decrement month button"
+#~ msgstr "Botón de diminución de mes do calendario"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "calendar decrement year button"
+#~ msgstr "Botón de diminución de ano do calendario"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "Paleta de selección de cor"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "calendar increment month button"
+#~ msgstr "Botón de aumento de mes do calendario"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "selector de día"
+#~ msgid "calendar increment year button"
+#~ msgstr "Botón de aumento de ano do calendario"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "Selector de disco"
+#~ msgid "calendar month"
+#~ msgstr "mes do calendario"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Cortar"
+#~ msgid "calendar year"
+#~ msgstr "ano do calendario"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Copiar"
+#~ msgid "State: On"
+#~ msgstr "Estado: Conectado"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Pegar"
+#~ msgid "State: Off"
+#~ msgstr "Estado: Desconectado"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Seleccionar"
+#~ msgid "State"
+#~ msgstr "Estado"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Entrada"
+#~ msgid "Check"
+#~ msgstr "Comprobar"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Índice"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "Botón de aumento do reloxo para am,pm"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Elemento do índice"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "Botón de diminución do reloxo para am,pm"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etiqueta"
+#~ msgid "State: Editable"
+#~ msgstr "Estado: Editable"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "Estado: aberto"
+#~ msgid "Clock"
+#~ msgstr "Reloxo"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "Estado: pechado"
+#~ msgid "color selector palette item"
+#~ msgstr "Paleta de selección de cor"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "day selector item"
+#~ msgstr "selector de día"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "diskselector item"
+#~ msgstr "Selector de disco"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "botón do panel"
+#~ msgid "Cut"
+#~ msgstr "Cortar"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "barra de progreso"
+#~ msgid "Copy"
+#~ msgstr "Copiar"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Radio"
+#~ msgid "Paste"
+#~ msgstr "Pegar"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Estado: Seleccionado"
+#~ msgid "Select"
+#~ msgstr "Seleccionar"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Estado: Sen seleccionar"
+#~ msgid "Entry"
+#~ msgstr "Entrada"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Segmento de control"
+#~ msgid "Index"
+#~ msgstr "Índice"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "Barra de desprazamento"
+#~ msgid "Index Item"
+#~ msgstr "Elemento do índice"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Label"
+#~ msgstr "Etiqueta"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "state: opened"
+#~ msgstr "Estado: aberto"
+
+#~ msgid "state: closed"
+#~ msgstr "Estado: pechado"
+
+#~ msgid "panel button"
+#~ msgstr "botón do panel"
+
+#~ msgid "progressbar"
+#~ msgstr "barra de progreso"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "State: Selected"
+#~ msgstr "Estado: Seleccionado"
+
+#~ msgid "State: Unselected"
+#~ msgstr "Estado: Sen seleccionar"
+
+#~ msgid "Segment Control Item"
+#~ msgstr "Segmento de control"
+
+#~ msgid "slider"
+#~ msgstr "Barra de desprazamento"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "botón de spinner"
+#~ msgid "spinner"
+#~ msgstr "botón de spinner"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "botón de aumento"
+#~ msgid "spinner increment button"
+#~ msgstr "botón de aumento"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "botón de disminución"
+#~ msgid "spinner decrement button"
+#~ msgstr "botón de disminución"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "botón de spinner"
+#~ msgid "spinner text"
+#~ msgstr "botón de spinner"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Seleccionado"
+#~ msgid "Selected"
+#~ msgstr "Seleccionado"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Separador"
+#~ msgid "Separator"
+#~ msgstr "Separador"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Ten menú"
+#~ msgid "Has menu"
+#~ msgstr "Ten menú"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Non seleccionado"
+#~ msgid "Unselected"
+#~ msgstr "Non seleccionado"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Elemento da barra de ferramentas"
+#~ msgid "Toolbar Item"
+#~ msgstr "Elemento da barra de ferramentas"
#~ msgid "Gengrid Item"
#~ msgstr "Grella xenérica"
diff --git a/po/he.po b/po/he.po
index 52e30b9819..e6ceefa9a7 100644
--- a/po/he.po
+++ b/po/he.po
@@ -2,11 +2,12 @@
# This file is distributed under the same license as the Elementary package.
# FIRST AUTHOR <a.hillel@samsung.com>, 2010.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2010-12-26 10:05+0200\n"
"Last-Translator: Aharon Hillel <a.hillel@samsung.com>\n"
"Language-Team: General\n"
@@ -16,338 +17,283 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
-msgid "Home"
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
-msgid "Search"
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
-msgid "Cancel"
-msgstr "בטל"
-
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr "אשר"
-
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
msgstr ""
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
msgstr ""
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr ""
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:RTL"
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
msgstr ""
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
msgstr ""
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
msgstr ""
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
msgstr ""
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
+#: 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 ""
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
+#, c-format
+msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:RTL"
-
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
-msgstr "העתק"
-
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
-msgstr "גזור"
-
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
-msgstr "הדבק"
-
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
-msgstr "התחל בחירה"
-
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
msgstr ""
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
msgstr ""
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
msgstr ""
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
msgstr ""
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
msgstr ""
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
msgstr ""
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
msgstr ""
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
msgstr ""
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:RTL"
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-#, fuzzy
-msgid "State: Unselected"
-msgstr "התחל בחירה"
-
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
msgstr ""
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "אשר"
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "בטל"
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
-msgstr ""
+#~ msgid "Copy"
+#~ msgstr "העתק"
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
-msgstr ""
+#~ msgid "Cut"
+#~ msgstr "גזור"
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-#, fuzzy
-msgid "Selected"
-msgstr "התחל בחירה"
+#~ msgid "Paste"
+#~ msgstr "הדבק"
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
-msgstr ""
+#~ msgid "Select"
+#~ msgstr "התחל בחירה"
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
-msgstr ""
+#, fuzzy
+#~ msgid "State: Unselected"
+#~ msgstr "התחל בחירה"
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
#, fuzzy
-msgid "Unselected"
-msgstr "התחל בחירה"
+#~ msgid "Selected"
+#~ msgstr "התחל בחירה"
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
-msgstr ""
+#, fuzzy
+#~ msgid "Unselected"
+#~ msgstr "התחל בחירה"
diff --git a/po/hu.po b/po/hu.po
index 2f4f4163a0..2884ba84eb 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -3,12 +3,12 @@
# This file is put in the public domain.
# Páder Rezső <rezso@rezso.net>, 2014.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary 1.8.2\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2014-01-29 15:27+0100\n"
"Last-Translator: rezso <rezso@rezso.net>\n"
"Language-Team: General\n"
@@ -18,276 +18,233 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.7\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Verzió:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Használat:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [opciók]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licenc:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Típus: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Alapértelmezett: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Lehetőségek:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "Lehetőségek:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opciók:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "HIBA: ismeretlen opció --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "HIBA: ismeretlen opció --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "HIBA: ismeretlen opció -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "HIBA: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "érték nem határoz meg mutatót.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "ismeretlen logikai érték: %s\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "érvénytelen számformátum: %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "érvénytelen érték: \"%s\", az érvényes értékek:"
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "hiányzó hozzáadandó paraméter.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "nem sikerült feldolgozni az értéket.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "hiányzó paraméter.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "hiányzó callback funkció!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "Nincs definiált verzió.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "Nincs definiált copyright.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "Nincs definiált licenc.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "HIBA: ismeretlen opció: --%s, figyelmen kívül hagyva.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "HIBA: --%s opció argumentumot igényel.\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "HIBA: ismeretlen opció: -%c, figyelmen kívül hagyva.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "HIBA: -%c opció argumentumot igényel.\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "HIBA: -%c opció argumentumot igényel.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "HIBA: hiányzó parser.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "HIBA: hiányzó értékek.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "HIBA: hiányzó argumentumok.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "HIBA: érvénytelen opciók találhatók."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Lásd --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Lásd -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "HIBA: érvénytelen opciók találhatók."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "HIBA: helytelen geometria érték: '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "HIBA: helytelen méret érték: '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Asztal"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Letöltések"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Sablonok"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Publikus"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Dokumentumok"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Zene"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Képek"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videók"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "Fel"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "Kezdőlap"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "OK"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Mégsem"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Állapot: letiltva"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr "Cím"
@@ -296,277 +253,146 @@ msgstr "Cím"
msgid "Subtitle"
msgstr "Cím"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr "Vissza"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Következő"
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Popup címsora"
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Popup szövege"
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Buborék"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "Fel"
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "Kezdőlap"
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Gomb"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%Y. %B"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "naptárelem"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "naptár: hónap csökkentése gomb"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "naptár: év csökkentése gomb"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "naptár: hónap növelése gomb"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "naptár: év növelése gomb"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "naptár hónapja"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "naptár éve"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Állapot: be"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Állapot: ki"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Állapot"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Ellenőrzés"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "OK"
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Állapot: szerkeszthető"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Mégsem"
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Óra"
+#~ msgid "State: Disabled"
+#~ msgstr "Állapot: letiltva"
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "Next"
+#~ msgstr "Következő"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "Popup Title"
+#~ msgstr "Popup címsora"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "Popup Body Text"
+#~ msgstr "Popup szövege"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "Bubble"
+#~ msgstr "Buborék"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "Button"
+#~ msgstr "Gomb"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%Y. %B"
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr ""
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "naptárelem"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Kivágás"
+#~ msgid "calendar decrement month button"
+#~ msgstr "naptár: hónap csökkentése gomb"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Másolás"
+#~ msgid "calendar decrement year button"
+#~ msgstr "naptár: év csökkentése gomb"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Beillesztés"
+#~ msgid "calendar increment month button"
+#~ msgstr "naptár: hónap növelése gomb"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Kiválaszt"
+#~ msgid "calendar increment year button"
+#~ msgstr "naptár: év növelése gomb"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Bejegyzés"
+#~ msgid "calendar month"
+#~ msgstr "naptár hónapja"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr ""
+#~ msgid "calendar year"
+#~ msgstr "naptár éve"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr ""
+#~ msgid "State: On"
+#~ msgstr "Állapot: be"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Címke"
+#~ msgid "State: Off"
+#~ msgstr "Állapot: ki"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "állapot: nyitott"
+#~ msgid "State"
+#~ msgstr "Állapot"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "állapot: zárt"
+#~ msgid "Check"
+#~ msgstr "Ellenőrzés"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "State: Editable"
+#~ msgstr "Állapot: szerkeszthető"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "Clock"
+#~ msgstr "Óra"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "panelgomb"
+#~ msgid "Cut"
+#~ msgstr "Kivágás"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "folyamatjelző"
+#~ msgid "Copy"
+#~ msgstr "Másolás"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Rádió"
+#~ msgid "Paste"
+#~ msgstr "Beillesztés"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Állapot: kijelölve"
+#~ msgid "Select"
+#~ msgstr "Kiválaszt"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Állapot: nincs kijelölve"
+#~ msgid "Entry"
+#~ msgstr "Bejegyzés"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
+#~ msgid "Label"
+#~ msgstr "Címke"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "csúszka"
+#~ msgid "state: opened"
+#~ msgstr "állapot: nyitott"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "state: closed"
+#~ msgstr "állapot: zárt"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "panel button"
+#~ msgstr "panelgomb"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr ""
+#~ msgid "progressbar"
+#~ msgstr "folyamatjelző"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr ""
+#~ msgid "Radio"
+#~ msgstr "Rádió"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr ""
+#~ msgid "State: Selected"
+#~ msgstr "Állapot: kijelölve"
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr ""
+#~ msgid "State: Unselected"
+#~ msgstr "Állapot: nincs kijelölve"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Kiválasztva"
+#~ msgid "slider"
+#~ msgstr "csúszka"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Elválasztó"
+#~ msgid "Selected"
+#~ msgstr "Kiválasztva"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr ""
+#~ msgid "Separator"
+#~ msgstr "Elválasztó"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Nincs kijelölve"
+#~ msgid "Unselected"
+#~ msgstr "Nincs kijelölve"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Eszköztár elem"
+#~ msgid "Toolbar Item"
+#~ msgstr "Eszköztár elem"
diff --git a/po/it.po b/po/it.po
index f861007734..8bae324561 100644
--- a/po/it.po
+++ b/po/it.po
@@ -3,13 +3,13 @@
# This file is put in the public domain.
# Massimo Maiurana <maiurana@gmail.com>, 2013
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
-"PO-Revision-Date: 2018-04-01 19:01+0200\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
+"PO-Revision-Date: 2020-04-18 17:04+0200\n"
"Last-Translator: Massimo Maiurana <maiurana@gmail.com>\n"
"Language-Team: General\n"
"Language: it\n"
@@ -17,275 +17,232 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versione:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Uso:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [opzioni]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licenza:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tipo: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Predefinito:"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Scelte:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Nessuna categoria disponibile."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Categorie:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opzioni:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Argomenti posizionali:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ERRORE: categoria sconosciuta '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ERRORE: opzione sconosciuta --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ERRORE: opzione sconosciuta -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ERRORE:"
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "il valore non ha puntatori impostati.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "valore booleano sconosciuto %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "formato numero non valido %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "scelta non valida \"%s\". I valori ammessi sono: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "parametro da appendere mancante.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "impossibile il parsing del valore.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "parametro mancante.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "funzione callback mancante!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "nessuna versione definita.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "nessun copyright definito.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "nessuna licenza definita.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ERRORE: opzione sconosciuta --%s, ignorata.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ERRORE: l'opzione --%s richiede un argomento!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ERRORE: opzione sconosciuta -%c, ignorata.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ERRORE: l'opzione -%c richiede un argomento!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "ERRORE: manca l'argomento posizionale %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
"ERRORE: azione di tipo %d non supportata per argomento posizionale %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ERRORE: nessun parser fornito.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ERRORE: nessun valore fornito.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ERRORE: nessun argomento fornito.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ERRORE: trovate opzioni non valide."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Vedere --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Vedere -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "ERRORE: trovati argomenti posizionali non validi."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ERRORE: valore geometrico non corretto '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ERRORE: valore dimensione non corretto '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Scrivania"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Scaricati"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Modelli"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Pubblici"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Documenti"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Musica"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Immagini"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Video"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "Su"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "Home"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr "Cerca"
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "OK"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Annulla"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Stato: disabilitato"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr "Lista per bottone (hoversel)"
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "etichetta voce multibottone"
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "oggetto voce multibottone"
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "voce multibottone"
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr "Titolo"
@@ -293,280 +250,26 @@ msgstr "Titolo"
msgid "Subtitle"
msgstr "Sottotitolo"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr "Indietro"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Avanti"
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Titolo popup"
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Testo corpo popup"
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr "Allarme"
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Bolla"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Cliccato"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Bottone"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "oggetto calendario"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "bottone diminuzione mese calendario"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "bottone diminuzione anno calendario"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "bottone aumento mese calendario"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "bottone aumento anno calendario"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "mese del calendario"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "anno del calendario"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Stato: attivo"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Stato: inattivo"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Stato"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Controllo"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "bottone aumento orologio am/pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "bottone diminuzione orologio am/pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Stato: modificabile"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Orologio"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr "Seleziona un colore"
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr "R:"
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr "G:"
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr "B:"
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr "A:"
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "oggetto palette selezione colore"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
-
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "oggetto selettore giorno"
-
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "selettore disco"
-
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Taglia"
-
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Copia"
-
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Incolla"
-
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Seleziona"
-
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Voce"
-
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Indice"
-
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "oggetto indice"
-
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etichetta"
-
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "Stato: aperto"
-
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "Stato: chiuso"
-
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "C'è un pannello aperto"
-
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Doppio tap per chiudere il menù del pannello"
-
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "bottone del pannello"
-
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "barra avanzamento"
-
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Opzione"
-
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Stato: selezionato"
-
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Stato: non selezionato"
-
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Oggetto controllo segmento"
-
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "cursore"
-
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr "incrementato"
-
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr "decrementato"
-
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "spinner"
-
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "bottone aumento spinner"
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "bottone diminuzione spinner"
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr "testo spinner"
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Selezionato"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Separatore"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "Su"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Include menù"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "Home"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Non selezionato"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
+msgstr "Cerca"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Oggetto della barra strumenti"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "OK"
-#~ msgid "Gengrid Item"
-#~ msgstr "oggetto griglia generica"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Annulla"
diff --git a/po/ja.po b/po/ja.po
index 87e3e040b3..1a3f783fc6 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -2,12 +2,12 @@
# Copyright (C) 2012 Enlightenment development team
# This file is put in the public domain.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2012-06-24 17:10+0900\n"
"Last-Translator: Daichi Fukui<when.a.cat.sits.beside.you@gmail.com>\n"
"Language-Team: Enlightenment Team\n"
@@ -16,276 +16,234 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "バージョン"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "使用法"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [オプション]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "License:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Type:"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Default:"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Choices: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "Choices: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "オプション\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "エラー: 不明なオプション --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "エラー: 不明なオプション --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "エラー: 不明なオプション -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "エラー: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "不明なboolean値 %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "不正な選択 \"%s\". 有効な数字: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "付加すべきパラメータがありません\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "値を探索できません.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "パラメータがありません.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "コールバック関数がありません\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "バージョンが定義されていません.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "コピーライトが定義されていません.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "ライセンスが定義されていません.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "エラー: 不明なオプション --%s, 無視.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "エラー: オプション --%s には引数が必要です.\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "エラー: 不明なオプション -%c, 無視.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "エラー: オプション -%c には引数が必要です.\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "エラー: オプション -%c には引数が必要です.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "エラー: パーサーがありません.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "エラー: 値がありません.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "エラー: 引数がありません.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "エラー: 不正なオプションです."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr "--%s を参照.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr "-%c を参照.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "エラー: 不正なオプションです."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "エラー: 不正なジオメトリ値 '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "エラー: 不正なsize値です '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Desktop"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Downloads"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Templates"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Public"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Documents"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Music"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Pictures"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videos"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr ""
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+#, fuzzy
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr ""
@@ -293,278 +251,26 @@ msgstr ""
msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr ""
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-#, fuzzy
-msgid "default:LTR"
-msgstr "default:LTR"
-
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr ""
-
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr ""
-
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr ""
-
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr ""
-
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr ""
-
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr ""
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/ko.po b/po/ko.po
index 027a3c5665..cb2c4872de 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -5,12 +5,12 @@
# Daniel Juyung Seo <seojuyung2@gmail.com>, 2011-2013
# Seong-ho Cho <darkcircle.0426@gmail.com>, 2012-2013
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2014-11-10 01:01+0900\n"
"Last-Translator: Daniel Juyung Seo <seojuyung2@gmail.com>\n"
"Language-Team: Enlightenment Team\n"
@@ -22,274 +22,232 @@ msgstr ""
"Plural-Forms: nplurals=1;plural=0;\n"
"X-Poedit-SourceCharset: UTF-8\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "버전:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "사용법:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s <옵션>"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "저작권 정보:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "라이선스:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "형식: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "기본값: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "선택: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "사용 가능한 분류 없음"
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "분류: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "옵션:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "위치 인자:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "오류: 알 수 없는 분류 --%s 입니다.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "오류: 알 수 없는 옵션 --%s 입니다.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "오류: 알 수 없는 옵션 -%c 입니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "오류: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "\"%s\" 선택이 잘못되었습니다. 유효한 값은 다음과 같습니다: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "추가할 매개 변수가 빠졌습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "값을 해석할 수 없습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "매개 변수가 빠졌습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "콜백 함수가 빠졌습니다!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "정의한 버전이 없습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "정의한 저작권 정보가 없습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "정의한 라이선스가 없습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "오류: 알 수 없는 --%s 옵션을 무시합니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "오류: --%s 옵션에 인자가 필요합니다!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "오류: 알 수 없는 -%c 옵션을 무시합니다.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "오류: -%c 옵션에 인자가 필요합니다!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "오류: %s 옵션에 위치 인자가 필요합니다!\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: 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:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "오류: 해석 프로그램이 존재하지 않습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "오류: 값이 존재하지 않습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "인자가 존재하지 않습니다.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "오류: 잘못된 옵션이 있습니다."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " --%s 옵션을 참조하십시오.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " -%c 옵션을 참조하십시오.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "오류: 잘못된 위치 인자가 있습니다."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "오류: '%s' 값의 좌표가 올바르지 않습니다\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "오류: '%s' 값의 크기가 올바르지 않습니다\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "데스크톱"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "다운로드"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "서식"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "공개"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "문서"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "음악"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "사진"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "영상"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr ""
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+#, fuzzy
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr ""
@@ -297,278 +255,26 @@ msgstr ""
msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr ""
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-#, fuzzy
-msgid "default:LTR"
-msgstr "default:LTR"
-
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr ""
-
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr ""
-
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr ""
-
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr ""
-
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr ""
-
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr ""
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/ko_KR.po b/po/ko_KR.po
index ed3d058224..e00ff5cc16 100644
--- a/po/ko_KR.po
+++ b/po/ko_KR.po
@@ -3,11 +3,12 @@
# Daniel Juyung Seo <seojuyung2@gmail.com>, 2011.
# Seong-ho Cho <darkcircle.0426@gmail.com>, 2013.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2015-05-27 01:50+0900\n"
"Last-Translator: Daniel Juyung Seo <seojuyung2@gmail.com>\n"
"Language-Team: General\n"
@@ -19,335 +20,461 @@ msgstr ""
"X-Generator: Poedit 1.5.4\n"
"X-Poedit-SourceCharset: UTF-8\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:LTR"
+
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
+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 ""
+
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %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 ""
+
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
+msgstr ""
+
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
+msgstr ""
+
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
+msgstr ""
+
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "제목"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "제목"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "뒤로"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "위로"
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "홈"
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "검색"
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "확인"
+
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "취소"
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr "확인"
+#~ msgid "multi button entry label"
+#~ msgstr "다중 버튼 엔트리 레이블"
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
-msgstr "다중 버튼 엔트리 레이블"
+#~ msgid "multi button entry item"
+#~ msgstr "다중 버튼 엔트리 항목"
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
-msgstr "다중 버튼 엔트리 항목"
+#~ msgid "multi button entry"
+#~ msgstr "다중 버튼 엔트리"
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
-msgstr "다중 버튼 엔트리"
+#~ msgid "Next"
+#~ msgstr "다음"
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
-msgstr "제목"
+#~ msgid "Popup Title"
+#~ msgstr "팝업 제목"
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr "뒤로"
+#~ msgid "Popup Body Text"
+#~ msgstr "팝업 본문 텍스트"
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
-msgstr "다음"
-
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
-msgstr "팝업 제목"
-
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
-msgstr "팝업 본문 텍스트"
-
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
-msgstr "버블"
-
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
-msgstr "클릭함"
-
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
-msgstr "상태 : 비활성화"
-
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
-msgstr "버튼"
-
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
-msgstr "%Y년 %B"
-
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
-msgstr "달력 항목"
-
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
-msgstr "달력 월 감소 버튼"
-
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
-msgstr "달력 연 감소 버튼"
-
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
-msgstr "달력 월 증가 버튼"
-
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
-msgstr "달력 연 증가 버튼"
-
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
-msgstr "달력 월"
-
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
-msgstr "달력 연"
-
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
-msgstr "상태: 켬"
-
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
-msgstr "상태: 끔"
-
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
-msgstr "상태"
-
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
-msgstr "체크"
-
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
-msgstr "시계 am,pm 증가 버튼"
-
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
-msgstr "시계 am,pm 감소 버튼"
-
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
-msgstr "상태: 편집 가능"
-
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
-msgstr "시계"
-
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
-msgstr "색상 선택"
-
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
-msgstr "빨:"
-
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
-msgstr "녹:"
-
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
-msgstr "파:"
-
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
-msgstr "투명:"
-
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
-msgstr "색상 선택기 팔레트 항목"
-
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "Bubble"
+#~ msgstr "버블"
+
+#~ msgid "Clicked"
+#~ msgstr "클릭함"
+
+#~ msgid "State: Disabled"
+#~ msgstr "상태 : 비활성화"
+
+#~ msgid "Button"
+#~ msgstr "버튼"
+
+#~ msgid "%B %Y"
+#~ msgstr "%Y년 %B"
+
+#~ msgid "%B"
+#~ msgstr "%B"
+
+#~ msgid "%Y"
+#~ msgstr "%Y"
+
+#~ msgid "calendar item"
+#~ msgstr "달력 항목"
+
+#~ msgid "calendar decrement month button"
+#~ msgstr "달력 월 감소 버튼"
+
+#~ msgid "calendar decrement year button"
+#~ msgstr "달력 연 감소 버튼"
+
+#~ msgid "calendar increment month button"
+#~ msgstr "달력 월 증가 버튼"
+
+#~ msgid "calendar increment year button"
+#~ msgstr "달력 연 증가 버튼"
+
+#~ msgid "calendar month"
+#~ msgstr "달력 월"
+
+#~ msgid "calendar year"
+#~ msgstr "달력 연"
+
+#~ msgid "State: On"
+#~ msgstr "상태: 켬"
+
+#~ msgid "State: Off"
+#~ msgstr "상태: 끔"
+
+#~ msgid "State"
+#~ msgstr "상태"
+
+#~ msgid "Check"
+#~ msgstr "체크"
+
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "시계 am,pm 증가 버튼"
+
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "시계 am,pm 감소 버튼"
+
+#~ msgid "State: Editable"
+#~ msgstr "상태: 편집 가능"
+
+#~ msgid "Clock"
+#~ msgstr "시계"
+
+#~ msgid "Pick a color"
+#~ msgstr "색상 선택"
+
+#~ msgid "R:"
+#~ msgstr "빨:"
+
+#~ msgid "G:"
+#~ msgstr "녹:"
+
+#~ msgid "B:"
+#~ msgstr "파:"
+
+#~ msgid "A:"
+#~ msgstr "투명:"
+
+#~ msgid "color selector palette item"
+#~ msgstr "색상 선택기 팔레트 항목"
+
+#~ msgid "day selector item"
+#~ msgstr "날짜 셀렉터 항목"
+
+#~ msgid "diskselector item"
+#~ msgstr "디스크셀렉터 항목"
+
+#~ msgid "Copy"
+#~ msgstr "복사"
+
+#~ msgid "Cut"
+#~ msgstr "잘라내기"
+
+#~ msgid "Paste"
+#~ msgstr "붙여넣기"
+
+#~ msgid "Select"
+#~ msgstr "선택"
+
+#~ msgid "Entry"
+#~ msgstr "엔트리"
+
+#~ msgid "Gengrid Item"
+#~ msgstr "젠그리드 항목"
+
+#~ msgid "Index"
+#~ msgstr "인덱스"
+
+#~ msgid "Index Item"
+#~ msgstr "인덱스 항목"
+
+#~ msgid "Label"
+#~ msgstr "레이블"
+
+#~ msgid "state: opened"
+#~ msgstr "상태: 열림"
+
+#~ msgid "state: closed"
+#~ msgstr "상태: 닫힘"
+
+#~ msgid "A panel is open"
+#~ msgstr "패널 열림"
+
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "더블탭으로 패널 메뉴 닫기"
+
+#~ msgid "panel button"
+#~ msgstr "패널 버튼"
+
+#~ msgid "progressbar"
+#~ msgstr "프로그레스바"
+
+#~ msgid "Radio"
+#~ msgstr "라디오 버튼"
+
+#~ msgid "State: Selected"
+#~ msgstr "상태: 선택함"
+
+#~ msgid "State: Unselected"
+#~ msgstr "상태: 선택 안함"
+
+#~ msgid "Segment Control Item"
+#~ msgstr "세그먼트 컨트롤 항목"
+
+#~ msgid "slider"
+#~ msgstr "슬라이더"
+
+#~ msgid "incremented"
+#~ msgstr "증가"
+
+#~ msgid "decremented"
+#~ msgstr "감소"
+
+#~ msgid "spinner"
+#~ msgstr "스피너"
+
+#~ msgid "spinner increment button"
+#~ msgstr "스피너 증가 버튼"
+
+#~ msgid "spinner decrement button"
+#~ msgstr "스피너 감소 버튼"
+
+#~ msgid "spinner text"
+#~ msgstr "스피너 텍스트"
+
+#~ msgid "Selected"
+#~ msgstr "선택"
+
+#~ msgid "Separator"
+#~ msgstr "구분선"
+
+#~ msgid "Has menu"
+#~ msgstr "메뉴 있음"
+
+#~ msgid "Unselected"
+#~ msgstr "선택 해제"
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
-msgstr "날짜 셀렉터 항목"
-
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
-msgstr "디스크셀렉터 항목"
-
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
-msgstr "복사"
-
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
-msgstr "잘라내기"
-
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
-msgstr "붙여넣기"
-
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
-msgstr "선택"
-
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
-msgstr "엔트리"
-
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
-msgstr "젠그리드 항목"
-
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
-msgstr "인덱스"
-
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
-msgstr "인덱스 항목"
-
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
-msgstr "레이블"
-
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
-msgstr "상태: 열림"
-
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
-msgstr "상태: 닫힘"
-
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
-msgstr "패널 열림"
-
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
-msgstr "더블탭으로 패널 메뉴 닫기"
-
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
-msgstr "패널 버튼"
-
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
-msgstr "프로그레스바"
-
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
-msgstr "라디오 버튼"
-
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
-msgstr "상태: 선택함"
-
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-msgid "State: Unselected"
-msgstr "상태: 선택 안함"
-
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
-msgstr "세그먼트 컨트롤 항목"
-
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
-msgstr "슬라이더"
-
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
-msgstr "증가"
-
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
-msgstr "감소"
-
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr "스피너"
-
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
-msgstr "스피너 증가 버튼"
-
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
-msgstr "스피너 감소 버튼"
-
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
-msgstr "스피너 텍스트"
-
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-msgid "Selected"
-msgstr "선택"
-
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
-msgstr "구분선"
-
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
-msgstr "메뉴 있음"
-
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
-msgid "Unselected"
-msgstr "선택 해제"
-
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
-msgstr "툴바 항목"
+#~ msgid "Toolbar Item"
+#~ msgstr "툴바 항목"
diff --git a/po/lt.po b/po/lt.po
index 7eb730f400..033ec9c452 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -3,12 +3,12 @@
# This file is distributed under the same license as the enlightenment package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: enlightenment\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2014-02-21 22:38+0000\n"
"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
"Language-Team: Lithuanian <lt@li.org>\n"
@@ -19,274 +19,231 @@ msgstr ""
"X-Launchpad-Export-Date: 2014-05-11 06:43+0000\n"
"X-Generator: Launchpad (build 16996)\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versija:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Naudojimas:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [parametrai]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Autorių teisės:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licencija:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tipas: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Numatytasis: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Kategorijos: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Parametrai:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "KLAIDA: nežinoma kategorija „%s“.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "KLAIDA: nežinomas parametras --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "KLAIDA: nežinomas parametras -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "KLAIDA: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 ""
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "netinkamas skaičiaus formatas %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "trūksta parametro.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "KLAIDA: nežinomas parametras --%s, nepaisomas.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "KLAIDA: nežinomas parametras -%c, nepaisomas.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "KLAIDA: aptikti netinkami parametrai."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Darbastalis"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Atsiuntimai"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Šablonai"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Vieša"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Dokumentai"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Muzika"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Paveikslėliai"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Video"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "Gerai"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Atsisakyti"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr ""
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr ""
@@ -294,277 +251,65 @@ msgstr ""
msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr "Atgal"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Mygtukas"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Būsena"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Laikrodis"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr ""
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
-
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr ""
-
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Iškirpti"
-
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopijuoti"
-
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Įdėti"
-
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Pasirinkti"
-
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr ""
-
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etiketė"
-
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "skydelio mygtukas"
-
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "Gerai"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Atsisakyti"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
+#~ msgid "Button"
+#~ msgstr "Mygtukas"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "šliaužiklis"
+#~ msgid "State"
+#~ msgstr "Būsena"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Clock"
+#~ msgstr "Laikrodis"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "Cut"
+#~ msgstr "Iškirpti"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr ""
+#~ msgid "Copy"
+#~ msgstr "Kopijuoti"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr ""
+#~ msgid "Paste"
+#~ msgstr "Įdėti"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr ""
+#~ msgid "Select"
+#~ msgstr "Pasirinkti"
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr ""
+#~ msgid "Label"
+#~ msgstr "Etiketė"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr ""
+#~ msgid "panel button"
+#~ msgstr "skydelio mygtukas"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Skirtukas"
+#~ msgid "slider"
+#~ msgstr "šliaužiklis"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Turi meniu"
+#~ msgid "Separator"
+#~ msgstr "Skirtukas"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Nepasirinkta(s)"
+#~ msgid "Has menu"
+#~ msgstr "Turi meniu"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr ""
+#~ msgid "Unselected"
+#~ msgstr "Nepasirinkta(s)"
diff --git a/po/nl.po b/po/nl.po
index 75e00ad89f..d2f468544f 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -3,12 +3,12 @@
# This file is put in the public domain.
# Fabian Nowak <timystery@arcor.de>, 2011.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary 0.7.0.57309\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2011-06-19 16:41+0100\n"
"Last-Translator: Heimen Stoffels <vistausss@gmail.com>\n"
"Language-Team: Dutch <vistausss@gmail.com>\n"
@@ -20,276 +20,233 @@ msgstr ""
"X-Poedit-Language: Dutch\n"
"X-Poedit-Country: NETHERLANDS\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versie:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Gebruik:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [opties]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Copyright:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licentie:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Type:"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Standaard:"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Keuzes:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "Keuzes:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opties:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "FOUT: onbekende optie --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "FOUT: onbekende optie --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "FOUT: onbekende optie -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "FOUT:"
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "waarde heeft geen pointer ingsteld.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "onbekende boolean-waarde %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "ongeldig nummerformaat %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "ongeldige keuze \"%s\". Geldige waardes zijn:"
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "parameter om toe te wijzen ontbreekt.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "kon waarde niet doorvoeren.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "paramater ontbreekt.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "ontbrekende terugroep-functie!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "geen versie was gedefinieerd.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "geen copyright was gedefinieerd.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "geen licentie was gedefinieerd.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "FOUT: onbekende optie --%s, genegeerd.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "FOUT: optie --%s vereist een argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "FOUT: onbekende opties -%c, genegeerd.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "FOUT: optie -%c vereist een argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "FOUT: optie -%c vereist een argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "FOUT: geen doorvoerder beschikbaar gesteld.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "FOUT: geen waarden beschikbaar gesteld.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "FOUT: geen argumenten beschibaar gesteld.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "FOUT: ongeldige opties gevonden."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr "Zie --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr "Zie -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "FOUT: ongeldige opties gevonden."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "Fout: foutieve wiskundige waarde '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "FOUT: foutieve grootte-waarden '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Bureaublad"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr ""
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr ""
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr ""
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr ""
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr ""
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr ""
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "Omhoog"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "Persoonlijke map"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "OK"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Annuleren"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr ""
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr ""
@@ -297,280 +254,50 @@ msgstr ""
msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr ""
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr ""
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
-
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr ""
-
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr ""
-
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Knippen"
-
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopiëren"
-
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Plakken"
-
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Selecteren"
-
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr ""
-
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr ""
-
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "Omhoog"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "Persoonlijke map"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "OK"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Annuleren"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr ""
+#~ msgid "Cut"
+#~ msgstr "Knippen"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr ""
+#~ msgid "Copy"
+#~ msgstr "Kopiëren"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr ""
+#~ msgid "Paste"
+#~ msgstr "Plakken"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr ""
+#~ msgid "Select"
+#~ msgstr "Selecteren"
-#: src/lib/elementary/elm_segment_control.c:530
#, fuzzy
-msgid "State: Unselected"
-msgstr "Selecteren"
-
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
-
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr ""
+#~ msgid "State: Unselected"
+#~ msgstr "Selecteren"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr ""
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
#, fuzzy
-msgid "Selected"
-msgstr "Selecteren"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr ""
+#~ msgid "Selected"
+#~ msgstr "Selecteren"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr ""
-
-#: src/lib/elementary/elm_toolbar.c:2350
#, fuzzy
-msgid "Unselected"
-msgstr "Selecteren"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr ""
+#~ msgid "Unselected"
+#~ msgstr "Selecteren"
diff --git a/po/pl.po b/po/pl.po
index 1cacce7e14..00e4563b22 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -3,12 +3,12 @@
# This file is put in the public domain.
# Konrad Makowski <poczta@konradmakowski.pl>, 2013
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2013-11-23 14:48+0100\n"
"Last-Translator: Konrad Makowski <poczta@konradmakowski.pl>\n"
"Language-Team: General\n"
@@ -19,556 +19,430 @@ msgstr ""
"X-Poedit-Language: Polish\n"
"X-Poedit-Country: Poland\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Wersja:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Użycie:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [opcje]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Prawa autorskie:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licencja:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Typ:"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Domyślnie:"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Wybór:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "Wybór:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opcje:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "BŁĄD: nieznana opcja --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "BŁĄD: nieznana opcja --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "BŁĄD: nieznana opcja -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "BŁĄD: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "zmienna nie ma ustawionego wskaźnika.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "nieznana wartość boolean %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "nieprawidłowy format liczbowy %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "nieprawidłowy wybór \"%s\". Prawidłowe wartości to:"
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "brak parametru.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "niemożliwe przetworzenie wartości.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "brak parametru.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "brak funkcji zwrotnej!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "wersja nie została zdefiniowana.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "nie zdefiniowano praw autorskich.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "nie zdefiniowano licencji.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "BŁĄD: nieznana opcja --%s, zignorowano.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "BŁĄD: opcja --%s wymaga argumentu!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "BŁĄD: nieznana opcja --%c, zignorowano.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "BŁĄD: opcja --%c wymaga argumentu!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "BŁĄD: opcja --%c wymaga argumentu!\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "BŁĄD: nie dostarczono parsera.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "BŁĄD: nie podano wartości.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "BŁĄD: nie podano argumentów.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "BŁĄD: wykryto błędne funkcje."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr "Zobacz --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr "Zobacz -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "BŁĄD: wykryto błędne funkcje."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "BŁĄD: nieprawidłowa wartość geometryczna \"%s\"\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "BŁĄD: nieprawdiłowy rozmiar wartości \"%s\"\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Pulpit"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Pobrane"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Szablony"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Publiczne"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Dokumenty"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Muzyka"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Obrazy"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Wideo"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Tytuł"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Tytuł"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Cofnij"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Do góry"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Początek"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "OK"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Anuluj"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Statuj: wyłączony"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Statuj: wyłączony"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "etykietka przycisku wyboru"
+#~ msgid "multi button entry label"
+#~ msgstr "etykietka przycisku wyboru"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "wartość pozycji przycisku wyboru"
+#~ msgid "multi button entry item"
+#~ msgstr "wartość pozycji przycisku wyboru"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "przycisk wyboru"
+#~ msgid "multi button entry"
+#~ msgstr "przycisk wyboru"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Tytuł"
+#~ msgid "Next"
+#~ msgstr "Następny"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Tytuł"
+#~ msgid "Popup Title"
+#~ msgstr "Tytuł okienka"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Cofnij"
+#~ msgid "Popup Body Text"
+#~ msgstr "Treść główna okienka"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Następny"
+#~ msgid "Bubble"
+#~ msgstr "Bąbelek"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Tytuł okienka"
+#~ msgid "Clicked"
+#~ msgstr "Kliknięty"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Treść główna okienka"
+#~ msgid "Button"
+#~ msgstr "Przycisk"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Bąbelek"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Kliknięty"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Przycisk"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "pozycja w kalendarzu"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "przycisk cofający o miesiąc w kalendarzu"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "przycisk cofający o rok w kalendarzu"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "przycisk przesuwający o miesiąc do przodu w kalendarzu"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "przycisk przesuwający o rok do przodu w kalendarzu"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "kalendarz z miesiącami"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "kalendarz roczny"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Stan: włączony"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Stan: wyłączony"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Stan"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Sprawdzony"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "przycisk poganiający czas am,pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "przycik cofający czas am,pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Stan: edytowalny"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Zegar"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "pozycja w kalendarzu"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "calendar decrement month button"
+#~ msgstr "przycisk cofający o miesiąc w kalendarzu"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "calendar decrement year button"
+#~ msgstr "przycisk cofający o rok w kalendarzu"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "paleta wyboru kolorów"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "calendar increment month button"
+#~ msgstr "przycisk przesuwający o miesiąc do przodu w kalendarzu"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "wybór dni"
+#~ msgid "calendar increment year button"
+#~ msgstr "przycisk przesuwający o rok do przodu w kalendarzu"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "wybór dysków"
+#~ msgid "calendar month"
+#~ msgstr "kalendarz z miesiącami"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Wytnij"
+#~ msgid "calendar year"
+#~ msgstr "kalendarz roczny"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopiuj"
+#~ msgid "State: On"
+#~ msgstr "Stan: włączony"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Wklej"
+#~ msgid "State: Off"
+#~ msgstr "Stan: wyłączony"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Wybór"
+#~ msgid "State"
+#~ msgstr "Stan"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Pozycja"
+#~ msgid "Check"
+#~ msgstr "Sprawdzony"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Indeks"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "przycisk poganiający czas am,pm"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Indeks"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "przycik cofający czas am,pm"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etykieta"
+#~ msgid "State: Editable"
+#~ msgstr "Stan: edytowalny"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "stan: otwarty"
+#~ msgid "Clock"
+#~ msgstr "Zegar"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "stan: zamknięty"
+#~ msgid "color selector palette item"
+#~ msgstr "paleta wyboru kolorów"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "day selector item"
+#~ msgstr "wybór dni"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "diskselector item"
+#~ msgstr "wybór dysków"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "panel przycisków"
+#~ msgid "Cut"
+#~ msgstr "Wytnij"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "pasek postępu"
+#~ msgid "Copy"
+#~ msgstr "Kopiuj"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr ""
+#~ msgid "Paste"
+#~ msgstr "Wklej"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Stan: wybrany"
+#~ msgid "Select"
+#~ msgstr "Wybór"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Stan: nie wybrany"
+#~ msgid "Entry"
+#~ msgstr "Pozycja"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Kontrola Segmentami"
+#~ msgid "Index"
+#~ msgstr "Indeks"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "slajder"
+#~ msgid "Index Item"
+#~ msgstr "Indeks"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Label"
+#~ msgstr "Etykieta"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "state: opened"
+#~ msgstr "stan: otwarty"
+
+#~ msgid "state: closed"
+#~ msgstr "stan: zamknięty"
+
+#~ msgid "panel button"
+#~ msgstr "panel przycisków"
+
+#~ msgid "progressbar"
+#~ msgstr "pasek postępu"
+
+#~ msgid "State: Selected"
+#~ msgstr "Stan: wybrany"
+
+#~ msgid "State: Unselected"
+#~ msgstr "Stan: nie wybrany"
+
+#~ msgid "Segment Control Item"
+#~ msgstr "Kontrola Segmentami"
+
+#~ msgid "slider"
+#~ msgstr "slajder"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "spinner"
+#~ msgid "spinner"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "przycisk zwiększający typu spinner"
+#~ msgid "spinner increment button"
+#~ msgstr "przycisk zwiększający typu spinner"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "przycisk zmniejszający typu spinner"
+#~ msgid "spinner decrement button"
+#~ msgstr "przycisk zmniejszający typu spinner"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "spinner"
+#~ msgid "spinner text"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Wybrany"
+#~ msgid "Selected"
+#~ msgstr "Wybrany"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Separator"
+#~ msgid "Separator"
+#~ msgstr "Separator"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Posiada menu"
+#~ msgid "Has menu"
+#~ msgstr "Posiada menu"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Nie wybrany"
+#~ msgid "Unselected"
+#~ msgstr "Nie wybrany"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Pasek narzędzi"
+#~ msgid "Toolbar Item"
+#~ msgstr "Pasek narzędzi"
diff --git a/po/ps.po b/po/ps.po
index 25a6a7e732..f07c7cf148 100644
--- a/po/ps.po
+++ b/po/ps.po
@@ -2,11 +2,12 @@
# This file is distributed under the same license as the Elementary package.
# FIRST AUTHOR <tom.hacohen@samsung.com>, 2010.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2010-12-26 10:05+0200\n"
"Last-Translator: Tom Hacohen <tom.hacohen@samsung.com>\n"
"Language-Team: General\n"
@@ -15,335 +16,259 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
msgstr ""
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
msgstr ""
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
msgstr ""
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
-msgstr ""
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:RTL"
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
msgstr ""
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
msgstr ""
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
+#: 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 ""
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
+#, c-format
+msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:RTL"
-
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
msgstr ""
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-msgid "State: Unselected"
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
msgstr ""
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:RTL"
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/pt.po b/po/pt.po
index 57711831a9..7560b5925b 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -3,12 +3,12 @@
# This file is public domain.
# Sérgio Marques <smarquespt@gmail.com>, 2010-2014
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2013-11-05 14:11-0000\n"
"Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n"
"Language-Team: General\n"
@@ -19,557 +19,434 @@ msgstr ""
"X-Generator: Poedit 1.6.4\n"
"X-Launchpad-Export-Date: 2012-12-07 16:20+0000\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Versão:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Utilização:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [opções]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Direitos de autor:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licença:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tipo:"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Padrão:"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Escolhas:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Nenhuma categoria disponível."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Categorias:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Opções:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Argumentos de posição:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ERRO: categoria desconhecida '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ERRO: opção desconhecida --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ERRO: opção desconhecida -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ERRO: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "o valor não está definido.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "valor booleano desconhecido %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "formato numérico inválido %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "escolha inválida \"%s\". O valores possíveis são:"
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "faltam os parâmetros a anexar.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "incapaz de processar o valor.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "parâmetro em falta.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "função de invocação em falta!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "nenhuma versão definida.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "direitos de autor não definidos.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "licença não definida.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ERRO: opção desconhecida --%s, ignorada.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ERRO: a opção --%s requer um argumento!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ERRO: opção desconhecida --%c, ignorada.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ERRO: a opção --%c requer um argumento!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "ERRO: falta o argumento de posição necessário %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "ERRO: tipo de ação não suportado %d para o argumento de posição %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ERRO: nenhum processador fornecido.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ERRO: nenhum valor fornecido.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ERRO: nenhum argumento fornecido.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ERRO: encontradas opções inválidas."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr "Consulte --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr "Consulte -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "ERRO: encontrados argumentos de posição inválidos."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ERRO: valor geométrico incorreto \"%s\"\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ERRO: tamanho incorreto \"%s\"\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Área de trabalho"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Transferências"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Modelos"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Público"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Documentos"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Música"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Imagens"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Vídeos"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Título"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Título"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Recuar"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Para cima"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Pasta pessoal"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "Aceitar"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Cancelar"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Estado: inativo"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Estado: inativo"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "texto da entrada de botão múltiplo"
+#~ msgid "multi button entry label"
+#~ msgstr "texto da entrada de botão múltiplo"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "item da entrada de botão múltiplo"
+#~ msgid "multi button entry item"
+#~ msgstr "item da entrada de botão múltiplo"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "entrada do botão múltiplo"
+#~ msgid "multi button entry"
+#~ msgstr "entrada do botão múltiplo"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Título"
+#~ msgid "Next"
+#~ msgstr "Avançar"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Título"
+#~ msgid "Popup Title"
+#~ msgstr "Título do alerta"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Recuar"
+#~ msgid "Popup Body Text"
+#~ msgstr "Texto do alerta"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Avançar"
+#~ msgid "Bubble"
+#~ msgstr "Balão"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Título do alerta"
+#~ msgid "Clicked"
+#~ msgstr "Clicado"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Texto do alerta"
+#~ msgid "Button"
+#~ msgstr "Botão"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Balão"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Clicado"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Botão"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "item do calendário"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "botão de redução do mês de calendário"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "botão de redução do ano de calendário"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "botão de aumento do mês de calendário"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "botão de aumento do ano de calendário"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "mês do calendário"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "ano do calendário"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Estado: ligado"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Estado: desligado"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Estado"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Seleção"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "botão de aumento do relógio para am, pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "botão de redução do relógio para am, pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Estado: editável"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Relógio"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "item do calendário"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "calendar decrement month button"
+#~ msgstr "botão de redução do mês de calendário"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "calendar decrement year button"
+#~ msgstr "botão de redução do ano de calendário"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "item do seletor de cor"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "calendar increment month button"
+#~ msgstr "botão de aumento do mês de calendário"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "item do seletor de dia"
+#~ msgid "calendar increment year button"
+#~ msgstr "botão de aumento do ano de calendário"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "item do seletor de disco"
+#~ msgid "calendar month"
+#~ msgstr "mês do calendário"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Cortar"
+#~ msgid "calendar year"
+#~ msgstr "ano do calendário"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Copiar"
+#~ msgid "State: On"
+#~ msgstr "Estado: ligado"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Colar"
+#~ msgid "State: Off"
+#~ msgstr "Estado: desligado"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Selecionar"
+#~ msgid "State"
+#~ msgstr "Estado"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Entrada"
+#~ msgid "Check"
+#~ msgstr "Seleção"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Índice"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "botão de aumento do relógio para am, pm"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Item do índice"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "botão de redução do relógio para am, pm"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Texto"
+#~ msgid "State: Editable"
+#~ msgstr "Estado: editável"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "estado: aberto"
+#~ msgid "Clock"
+#~ msgstr "Relógio"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "estado: fechado"
+#~ msgid "color selector palette item"
+#~ msgstr "item do seletor de cor"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "day selector item"
+#~ msgstr "item do seletor de dia"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "diskselector item"
+#~ msgstr "item do seletor de disco"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "botão do painel"
+#~ msgid "Cut"
+#~ msgstr "Cortar"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "barra de progresso"
+#~ msgid "Copy"
+#~ msgstr "Copiar"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Opção"
+#~ msgid "Paste"
+#~ msgstr "Colar"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Estado: selecionado"
+#~ msgid "Select"
+#~ msgstr "Selecionar"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Estado: não selecionado"
+#~ msgid "Entry"
+#~ msgstr "Entrada"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Item do controlo de segmento"
+#~ msgid "Index"
+#~ msgstr "Índice"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "barra deslizante"
+#~ msgid "Index Item"
+#~ msgstr "Item do índice"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Label"
+#~ msgstr "Texto"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "state: opened"
+#~ msgstr "estado: aberto"
+
+#~ msgid "state: closed"
+#~ msgstr "estado: fechado"
+
+#~ msgid "panel button"
+#~ msgstr "botão do painel"
+
+#~ msgid "progressbar"
+#~ msgstr "barra de progresso"
+
+#~ msgid "Radio"
+#~ msgstr "Opção"
+
+#~ msgid "State: Selected"
+#~ msgstr "Estado: selecionado"
+
+#~ msgid "State: Unselected"
+#~ msgstr "Estado: não selecionado"
+
+#~ msgid "Segment Control Item"
+#~ msgstr "Item do controlo de segmento"
+
+#~ msgid "slider"
+#~ msgstr "barra deslizante"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "spinner"
+#~ msgid "spinner"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "botão de aumento do spinner"
+#~ msgid "spinner increment button"
+#~ msgstr "botão de aumento do spinner"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "botão de diminuição do spinner"
+#~ msgid "spinner decrement button"
+#~ msgstr "botão de diminuição do spinner"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "spinner"
+#~ msgid "spinner text"
+#~ msgstr "spinner"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Selecionado"
+#~ msgid "Selected"
+#~ msgstr "Selecionado"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Separador"
+#~ msgid "Separator"
+#~ msgstr "Separador"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Tem menu"
+#~ msgid "Has menu"
+#~ msgstr "Tem menu"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Não selecionado"
+#~ msgid "Unselected"
+#~ msgstr "Não selecionado"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Item da barra de ferramentas"
+#~ msgid "Toolbar Item"
+#~ msgstr "Item da barra de ferramentas"
#~ msgid "Gengrid Item"
#~ msgstr "Item da grelha genérica"
diff --git a/po/ru.po b/po/ru.po
index e2de39c7f1..b6af578c71 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -4,12 +4,12 @@
# Danny Moshnakov <dm@agent.co.il>, 2012.
# Igor Murzov <garik@efl.so>, 2015.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary 1.11\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\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"
@@ -20,274 +20,231 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 ""
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Рабочий стол"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Загрузки"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Шаблоны"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Общий каталог"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Документы"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Музыка"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Изображения"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Видео"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "Вверх"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "Дом"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr "Поиск"
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "ОК"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "Отмена"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Состояние: Отключено"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "метка многокопочного элемента"
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "кнопка многокопочного элемента"
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "многокнопочный элемент"
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr "Заголовок"
@@ -296,281 +253,207 @@ msgstr "Заголовок"
msgid "Subtitle"
msgstr "Заголовок"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr "Назад"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Вперёд"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "Вверх"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Заголовок всплывающего окна"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "Дом"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Текст всплывающего окна"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
+msgstr "Поиск"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "ОК"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Облачко"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "Отмена"
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Нажато"
+#~ msgid "State: Disabled"
+#~ msgstr "Состояние: Отключено"
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Кнопка"
+#~ msgid "multi button entry label"
+#~ msgstr "метка многокопочного элемента"
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
+#~ msgid "multi button entry item"
+#~ msgstr "кнопка многокопочного элемента"
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
+#~ msgid "multi button entry"
+#~ msgstr "многокнопочный элемент"
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
+#~ msgid "Next"
+#~ msgstr "Вперёд"
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "элемент календаря"
+#~ msgid "Popup Title"
+#~ msgstr "Заголовок всплывающего окна"
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "кнопка календаря для уменьшения месяца"
+#~ msgid "Popup Body Text"
+#~ msgstr "Текст всплывающего окна"
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "кнопка календаря для уменьшения года"
+#~ msgid "Bubble"
+#~ msgstr "Облачко"
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "кнопка календаря для увеличения месяца"
+#~ msgid "Clicked"
+#~ msgstr "Нажато"
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "кнопка календаря для увеличения года"
+#~ msgid "Button"
+#~ msgstr "Кнопка"
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "месяц календаря"
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "год календаря"
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Состояния: Включено"
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Состояние: Выключено"
+#~ msgid "calendar item"
+#~ msgstr "элемент календаря"
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Состояние"
+#~ msgid "calendar decrement month button"
+#~ msgstr "кнопка календаря для уменьшения месяца"
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Флажок"
+#~ msgid "calendar decrement year button"
+#~ msgstr "кнопка календаря для уменьшения года"
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "кнопка часов для увеличения am,pm"
+#~ msgid "calendar increment month button"
+#~ msgstr "кнопка календаря для увеличения месяца"
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "кнопка часов для уменьшения am,pm"
+#~ msgid "calendar increment year button"
+#~ msgstr "кнопка календаря для увеличения года"
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Состояние: Редактируемо"
+#~ msgid "calendar month"
+#~ msgstr "месяц календаря"
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Часы"
+#~ msgid "calendar year"
+#~ msgstr "год календаря"
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "State: On"
+#~ msgstr "Состояния: Включено"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "State: Off"
+#~ msgstr "Состояние: Выключено"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "State"
+#~ msgstr "Состояние"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "Check"
+#~ msgstr "Флажок"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "кнопка часов для увеличения am,pm"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "элемент выбора цвета палитры"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "кнопка часов для уменьшения am,pm"
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "State: Editable"
+#~ msgstr "Состояние: Редактируемо"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "элемент выбора дня"
+#~ msgid "Clock"
+#~ msgstr "Часы"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "элемент диска выбора"
+#~ msgid "color selector palette item"
+#~ msgstr "элемент выбора цвета палитры"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Вырезать"
+#~ msgid "day selector item"
+#~ msgstr "элемент выбора дня"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Копировать"
+#~ msgid "diskselector item"
+#~ msgstr "элемент диска выбора"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Вставить"
+#~ msgid "Cut"
+#~ msgstr "Вырезать"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Выбрать"
+#~ msgid "Copy"
+#~ msgstr "Копировать"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Запись"
+#~ msgid "Paste"
+#~ msgstr "Вставить"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Алфавитный указатель"
+#~ msgid "Select"
+#~ msgstr "Выбрать"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Элемент алфавитного указателя"
+#~ msgid "Entry"
+#~ msgstr "Запись"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Метка"
+#~ msgid "Index"
+#~ msgstr "Алфавитный указатель"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "состояние: открыто"
+#~ msgid "Index Item"
+#~ msgstr "Элемент алфавитного указателя"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "состояние: закрыто"
+#~ msgid "Label"
+#~ msgstr "Метка"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Панель открыта"
+#~ msgid "state: opened"
+#~ msgstr "состояние: открыто"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Двойной щелчок, чтобы закрыть меню панели"
+#~ msgid "state: closed"
+#~ msgstr "состояние: закрыто"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "кнопка панели"
+#~ msgid "A panel is open"
+#~ msgstr "Панель открыта"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "индикатор выполнения"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Двойной щелчок, чтобы закрыть меню панели"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Радио флажок"
+#~ msgid "panel button"
+#~ msgstr "кнопка панели"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Состояние: Выбрано"
+#~ msgid "progressbar"
+#~ msgstr "индикатор выполнения"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Состояние: Невыбрано"
+#~ msgid "Radio"
+#~ msgstr "Радио флажок"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Элемент сегментного элемента управления"
+#~ msgid "State: Selected"
+#~ msgstr "Состояние: Выбрано"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "бегунок"
+#~ msgid "State: Unselected"
+#~ msgstr "Состояние: Невыбрано"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Segment Control Item"
+#~ msgstr "Элемент сегментного элемента управления"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "slider"
+#~ msgstr "бегунок"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "счётчик"
+#~ msgid "spinner"
+#~ msgstr "счётчик"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "кнопка увеличения счётчика"
+#~ msgid "spinner increment button"
+#~ msgstr "кнопка увеличения счётчика"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "кнопка уменьшения счётчика"
+#~ msgid "spinner decrement button"
+#~ msgstr "кнопка уменьшения счётчика"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "счётчик"
+#~ msgid "spinner text"
+#~ msgstr "счётчик"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Выбрано"
+#~ msgid "Selected"
+#~ msgstr "Выбрано"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Разделитель"
+#~ msgid "Separator"
+#~ msgstr "Разделитель"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "С меню"
+#~ msgid "Has menu"
+#~ msgstr "С меню"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Невыбрано"
+#~ msgid "Unselected"
+#~ msgstr "Невыбрано"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Элемент панели инструментов"
+#~ msgid "Toolbar Item"
+#~ msgstr "Элемент панели инструментов"
#~ msgid "Gengrid Item"
#~ msgstr "Элемент сетки"
diff --git a/po/sl.po b/po/sl.po
index cd379dcaf0..76ba03cc08 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -3,12 +3,12 @@
# This file is put in the public domain.
# r1to <renato.rener@gmail.com>, 2011.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2016-09-21 17:00+0200\n"
"Last-Translator: Renato Rener <renato.rener@gmail.com>\n"
"Language-Team: Enlightenment Team\n"
@@ -18,556 +18,460 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.9\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Različica"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Uporaba:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [možnosti]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Avtorstvo:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Licenca:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Vrsta:·"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Privzeto:·"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Izbire:·"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Na voljo ni nobene kategorije"
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Kategorije: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Možnosti:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Argumenti nahajališča\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "NAPAKA: neznana kategorija '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "NAPAKA:·Neznana možnost --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "NAPAKA:·neznana možnost-%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "NAPAKA:"
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "vrednost nima nastavljenega kazalnika.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "neznana Boolova vrednost·%s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "napačen·format števila·%s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "napačna izbira·\"%s\".·Pravilne izbire so:·"
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "manjka·parameter·za dodajo.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "vrednosti ni bilo možno razčleniti.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "manjkajoči·parameter.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "manjkajoča povratno-zasilna funkcija !\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "definirana ni bila nobena različica.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "definirano ni bilo nobeno avtorstvo.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "definirana ni bila nobena licenca.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "NAPAKA:·neznana možnost·--%s,·prezrto.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "NAPAKA:·možnost·--%s·zahteva argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "NAPAKA:·neznana možnost·-%c,·prezrto.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "NAPAKA:·možnost·-%c zahteva argument!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "NAPAKA: manjka zahtevani argument nahajališča %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "NAPAKA: nepodprto dejanje vrste %d za argumente nahajališča %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "NAPAKA:·ni podan razčlenjevalnik.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "NAPAKA::·ni podanih vrednosti.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "NAPAKA::·ni podanih argumentov.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "NAPAKA::·najdene nepravilne možnosti"
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr "·Glej·--%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr "·Glej·-%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "NAPAKA: nepravilni argumenti nahajališča najdeni."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "NAPAKA::·nepravilna geometrijska vrednost·'%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "NAPAKA::·nepravilna vrednost velikosti·'%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Namizje"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Prejemi"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Predloge"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Javno"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Dokumenti"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Glasba"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Slike"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videi"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Naslov"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Naslov"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Nazaj"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Gor"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Dom"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "Poišči"
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "V redu"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Prekliči"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Stanje: onemogočeno"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Stanje: onemogočeno"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "oznaka vnosa večkratnih gumbov"
+#~ msgid "multi button entry label"
+#~ msgstr "oznaka vnosa večkratnih gumbov"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "predmet vnosa večkratnih gumbov"
+#~ msgid "multi button entry item"
+#~ msgstr "predmet vnosa večkratnih gumbov"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "vnos večkratnih gumbov"
+#~ msgid "multi button entry"
+#~ msgstr "vnos večkratnih gumbov"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Naslov"
+#~ msgid "Next"
+#~ msgstr "Naslednje"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Naslov"
+#~ msgid "Popup Title"
+#~ msgstr "Naslov pojavnika"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Nazaj"
+#~ msgid "Popup Body Text"
+#~ msgstr "Besedilo telesa pojavnika"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Naslednje"
+#~ msgid "Bubble"
+#~ msgstr "Mehurček"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Naslov pojavnika"
+#~ msgid "Clicked"
+#~ msgstr "Kliknjeno"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Besedilo telesa pojavnika"
+#~ msgid "Button"
+#~ msgstr "Gumb"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Mehurček"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Kliknjeno"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Gumb"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "predmet koledarja"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "koledarski gumb za mesec nazaj"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "koledarski gumb za leto nazaj"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "koledarski gumb za mesec naprej"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "koledarski gumb za leto naprej"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "mesečni koledar"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "letni koledar"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Stanje: Vključeno"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Stanje: Izključeno"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Stanje"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Preveri"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "gumb zviševanja ure za am,pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "gumb zniževanja ure za am,pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Stanje: Urejanje možno"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Ura"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr "Izberi barvo"
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr "R:"
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr "G:"
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr "B:"
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr "A:"
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "izbirnik s paleto barve"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "%B"
+#~ msgstr "%B"
+
+#~ msgid "%Y"
+#~ msgstr "%Y"
+
+#~ msgid "calendar item"
+#~ msgstr "predmet koledarja"
+
+#~ msgid "calendar decrement month button"
+#~ msgstr "koledarski gumb za mesec nazaj"
+
+#~ msgid "calendar decrement year button"
+#~ msgstr "koledarski gumb za leto nazaj"
+
+#~ msgid "calendar increment month button"
+#~ msgstr "koledarski gumb za mesec naprej"
+
+#~ msgid "calendar increment year button"
+#~ msgstr "koledarski gumb za leto naprej"
+
+#~ msgid "calendar month"
+#~ msgstr "mesečni koledar"
+
+#~ msgid "calendar year"
+#~ msgstr "letni koledar"
+
+#~ msgid "State: On"
+#~ msgstr "Stanje: Vključeno"
+
+#~ msgid "State: Off"
+#~ msgstr "Stanje: Izključeno"
+
+#~ msgid "State"
+#~ msgstr "Stanje"
+
+#~ msgid "Check"
+#~ msgstr "Preveri"
+
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "gumb zviševanja ure za am,pm"
+
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "gumb zniževanja ure za am,pm"
+
+#~ msgid "State: Editable"
+#~ msgstr "Stanje: Urejanje možno"
+
+#~ msgid "Clock"
+#~ msgstr "Ura"
+
+#~ msgid "Pick a color"
+#~ msgstr "Izberi barvo"
+
+#~ msgid "R:"
+#~ msgstr "R:"
+
+#~ msgid "G:"
+#~ msgstr "G:"
+
+#~ msgid "B:"
+#~ msgstr "B:"
+
+#~ msgid "A:"
+#~ msgstr "A:"
+
+#~ msgid "color selector palette item"
+#~ msgstr "izbirnik s paleto barve"
+
+#~ msgid "day selector item"
+#~ msgstr "izbirnik dneva"
+
+#~ msgid "diskselector item"
+#~ msgstr "izbirnik diska"
+
+#~ msgid "Cut"
+#~ msgstr "Izreži"
+
+#~ msgid "Copy"
+#~ msgstr "Kopiraj"
+
+#~ msgid "Paste"
+#~ msgstr "Prilepi"
+
+#~ msgid "Select"
+#~ msgstr "Izberi"
+
+#~ msgid "Entry"
+#~ msgstr "Vnos"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "izbirnik dneva"
+#~ msgid "Index"
+#~ msgstr "Kazalo"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "izbirnik diska"
+#~ msgid "Index Item"
+#~ msgstr "Predmet kazala"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Izreži"
+#~ msgid "Label"
+#~ msgstr "Oznaka"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopiraj"
+#~ msgid "state: opened"
+#~ msgstr "stanje: odprto"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Prilepi"
+#~ msgid "state: closed"
+#~ msgstr "stanje: zaprto"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Izberi"
+#~ msgid "A panel is open"
+#~ msgstr "Vrstica je odprta"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Vnos"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Dvoklik za zaprtje menija vrstice"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Kazalo"
+#~ msgid "panel button"
+#~ msgstr "gumb vrstice"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Predmet kazala"
+#~ msgid "progressbar"
+#~ msgstr "vrstica poteka"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Oznaka"
+#~ msgid "Radio"
+#~ msgstr "Radio"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "stanje: odprto"
+#~ msgid "State: Selected"
+#~ msgstr "Stanje: Izbrano"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "stanje: zaprto"
+#~ msgid "State: Unselected"
+#~ msgstr "Stanje: Neizbrano"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Vrstica je odprta"
+#~ msgid "Segment Control Item"
+#~ msgstr "Nadzornik segmenta"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Dvoklik za zaprtje menija vrstice"
+#~ msgid "slider"
+#~ msgstr "drsnik"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "gumb vrstice"
+#~ msgid "incremented"
+#~ msgstr "povečevano"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "vrstica poteka"
+#~ msgid "decremented"
+#~ msgstr "zniževano"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Radio"
+#~ msgid "spinner"
+#~ msgstr "vrtilnik"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Stanje: Izbrano"
+#~ msgid "spinner increment button"
+#~ msgstr "gumb za povečevanje vrtilnika"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Stanje: Neizbrano"
+#~ msgid "spinner decrement button"
+#~ msgstr "gumb za zniževanje vrtilnika"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Nadzornik segmenta"
+#~ msgid "spinner text"
+#~ msgstr "besedilo vrtilnika"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "drsnik"
+#~ msgid "Selected"
+#~ msgstr "Izbrano"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr "povečevano"
+#~ msgid "Separator"
+#~ msgstr "Ločilnik"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr "zniževano"
+#~ msgid "Has menu"
+#~ msgstr "Ima meni"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "vrtilnik"
+#~ msgid "Unselected"
+#~ msgstr "Neizbrano"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "gumb za povečevanje vrtilnika"
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "gumb za zniževanje vrtilnika"
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr "besedilo vrtilnika"
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Izbrano"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Ločilnik"
-
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Ima meni"
-
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Neizbrano"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Predmet orodne vrstice"
+#~ msgid "Toolbar Item"
+#~ msgstr "Predmet orodne vrstice"
#~ msgid "Gengrid Item"
#~ msgstr "Generator mreže"
diff --git a/po/sr.po b/po/sr.po
index 3f9e78f084..9c5f835e3a 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -4,575 +4,479 @@
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
# Саша Петровић <salepetronije@gmail.com>, 2013, 2015.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: а\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
-"PO-Revision-Date: 2015-01-31 14:06+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
+"PO-Revision-Date: 2020-03-08 19:04+0100\n"
"Last-Translator: Саша Петровић <salepetronije@gmail.com>\n"
"Language-Team: српски <xfce4@xfce4.org>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-06-14 05:42+0000\n"
-"X-Generator: Gtranslator 2.91.6\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Launchpad-Export-Date: 2017-09-03 05:32+0000\n"
+"X-Generator: Poedit 2.2.1\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Издање:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Употреба:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [могућности]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Права умножавања:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Дозвола:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Врста: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Задато: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Избор: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Нема доступних врста."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Врсте: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Могућности:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Одреднице положаја:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "ГРЕШКА: Непозната врста „%s“.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "ГРЕШКА: непозната могућност --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "ГРЕШКА: непозната могућност -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "ГРЕШКА: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "неисправан избор „%s“. Исправне вредности су: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "недостаје одредница за наставак.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "нисам успео да расчланим вредност\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "недостаје одредница.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "недостаје функција узвратног позива!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "није одређено издање.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "нису одређена права умножавања.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "није одређена дозвола.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "ГРЕШКА: непозната могућност --%s, занемарујем.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "ГРЕШКА: могућност --%s захтева одредницу!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "ГРЕШКА: непозната могућност -%c, занемарујем.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "ГРЕШКА: могућност -%c захтева одредницу!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "Грешка: недостаје потребна одредница положаја %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: 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:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "ГРЕШКА: није обезбеђен рашчлањивач.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "ГРЕШКА: нема обезбеђених вредности.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "ГРЕШКА: није обезбеђена одредница.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "ГРЕШКА: нађена је неисправна могућност."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Погледајте --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Погледајте -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "Грешка: нађена је неисправна одредница положаја."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "ГРЕШКА: неисправна геометријска вредност „%s“\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "ГРЕШКА: неисправна вредност величине „%s“\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Радна површ"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Преузимања"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Обрасци"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Јавно"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Документа"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Музика"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Слике"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Видео снимци"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "задато:слева на десно"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Наслов"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Наслов"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Назад"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Горе"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Лична фасцикла"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "Тражи"
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "У реду"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Откажи"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Стање: онемогућено"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Стање: онемогућено"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "ознака улаза са више дугмади"
+#~ msgid "Hoversel"
+#~ msgstr "Лебедна ћелија"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "ставка улаза са више дугмади"
+#~ msgid "multi button entry label"
+#~ msgstr "ознака улаза са више дугмади"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "улаз са више дугмади"
+#~ msgid "multi button entry item"
+#~ msgstr "ставка улаза са више дугмади"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Наслов"
+#~ msgid "multi button entry"
+#~ msgstr "улаз са више дугмади"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Наслов"
+#~ msgid "Next"
+#~ msgstr "Следеће"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Назад"
+#~ msgid "Popup Title"
+#~ msgstr "Искачући наслов"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Следеће"
+#~ msgid "Popup Body Text"
+#~ msgstr "Тело искачућег текста"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Искачући наслов"
+#~ msgid "Bubble"
+#~ msgstr "Мехур"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Тело искачућег текста"
+#~ msgid "Clicked"
+#~ msgstr "Кликнуто"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "Button"
+#~ msgstr "Дугме"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Мехур"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Кликнуто"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Дугме"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "ставка календара"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "дугме померања месеца календара уназад"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "дугме померања година календара уназад"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "дугме померања месеца календара унапред"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "дугме померања година календара унапред"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "месец календара"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "година календара"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Стање : укључен"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Стање: искључен"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Стање"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Провера"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "дугме за увећање часовника са am,pm"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "дугме за смањивање часовника са am,pm"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Стање: уредиво"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Сат"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "ставка календара"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "calendar decrement month button"
+#~ msgstr "дугме померања месеца календара уназад"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "ставка избирача палете боја"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "calendar decrement year button"
+#~ msgstr "дугме померања година календара уназад"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "ставка одабирач дана"
+#~ msgid "calendar increment month button"
+#~ msgstr "дугме померања месеца календара унапред"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "ставка одабира диска"
+#~ msgid "calendar increment year button"
+#~ msgstr "дугме померања година календара унапред"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Исеци"
+#~ msgid "calendar month"
+#~ msgstr "месец календара"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Умножи"
+#~ msgid "calendar year"
+#~ msgstr "година календара"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Прилепи"
+#~ msgid "State: On"
+#~ msgstr "Стање : укључен"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Изаберите"
+#~ msgid "State: Off"
+#~ msgstr "Стање: искључен"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Улаз"
+#~ msgid "State"
+#~ msgstr "Стање"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Садржина"
+#~ msgid "Check"
+#~ msgstr "Провера"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Ставка садржине"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "дугме за увећање часовника са am,pm"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Натпис"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "дугме за смањивање часовника са am,pm"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "стање: отворено"
+#~ msgid "State: Editable"
+#~ msgstr "Стање: уредиво"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "стање: затворено"
+#~ msgid "Clock"
+#~ msgstr "Сат"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Полица је отворена"
+#~ msgid "Pick a color"
+#~ msgstr "Изаберите боју"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Двапут додирните за затварање изборника полице"
+#~ msgid "R:"
+#~ msgstr "Ц:"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "дугме полице"
+#~ msgid "G:"
+#~ msgstr "З:"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "трака напретка"
+#~ msgid "B:"
+#~ msgstr "М:"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Искључујуће дугме"
+#~ msgid "A:"
+#~ msgstr "П:"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Стање: означено"
+#~ msgid "color selector palette item"
+#~ msgstr "ставка избирача палете боја"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Стање: неозначено"
+#~ msgid "day selector item"
+#~ msgstr "ставка одабирач дана"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Ставка провере дела"
+#~ msgid "diskselector item"
+#~ msgstr "ставка одабира диска"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "клизач"
+#~ msgid "Cut"
+#~ msgstr "Исеци"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Copy"
+#~ msgstr "Умножи"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "Paste"
+#~ msgstr "Прилепи"
+
+#~ msgid "Select"
+#~ msgstr "Изаберите"
+
+#~ msgid "Entry"
+#~ msgstr "Улаз"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "избирач са стрелицама"
+#~ msgid "Gengrid Item"
+#~ msgstr "Ставка родне мреже"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "стрелица избирача увећaња"
+#~ msgid "Index"
+#~ msgstr "Садржина"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "стрелица избирача смањења"
+#~ msgid "Index Item"
+#~ msgstr "Ставка садржине"
-#: src/lib/elementary/elm_spinner.c:1124
-#, fuzzy
-msgid "spinner text"
-msgstr "избирач са стрелицама"
+#~ msgid "Label"
+#~ msgstr "Натпис"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Изабрано"
+#~ msgid "state: opened"
+#~ msgstr "стање: отворено"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Одвајач"
+#~ msgid "state: closed"
+#~ msgstr "стање: затворено"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Има изборник"
+#~ msgid "A panel is open"
+#~ msgstr "Полица је отворена"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Неозначено"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Двапут додирните за затварање изборника полице"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Ставка траке алата"
+#~ msgid "panel button"
+#~ msgstr "дугме полице"
-#~ msgid "Gengrid Item"
-#~ msgstr "Ставка родне мреже"
+#~ msgid "progressbar"
+#~ msgstr "трака напретка"
+
+#~ msgid "Radio"
+#~ msgstr "Искључујуће дугме"
+
+#~ msgid "State: Selected"
+#~ msgstr "Стање: означено"
+
+#~ msgid "State: Unselected"
+#~ msgstr "Стање: неозначено"
+
+#~ msgid "Segment Control Item"
+#~ msgstr "Ставка провере дела"
+
+#~ msgid "slider"
+#~ msgstr "клизач"
+
+#~ msgid "incremented"
+#~ msgstr "растуће"
+
+#~ msgid "decremented"
+#~ msgstr "опадајуће"
+
+#~ msgid "spinner"
+#~ msgstr "избирач са стрелицама"
+
+#~ msgid "spinner increment button"
+#~ msgstr "стрелица избирача увећaња"
+
+#~ msgid "spinner decrement button"
+#~ msgstr "стрелица избирача смањења"
+
+#~ msgid "spinner text"
+#~ msgstr "листајуће дугме"
+
+#~ msgid "Selected"
+#~ msgstr "Изабрано"
+
+#~ msgid "Separator"
+#~ msgstr "Одвајач"
+
+#~ msgid "Has menu"
+#~ msgstr "Има изборник"
+
+#~ msgid "Unselected"
+#~ msgstr "Неозначено"
+
+#~ msgid "Toolbar Item"
+#~ msgstr "Ставка траке алата"
diff --git a/po/tr.po b/po/tr.po
index 362df2c208..50287b1d7d 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -3,12 +3,12 @@
# This file is distributed under the same license as the enlightenment package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: enlightenment\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2014-04-18 13:35+0000\n"
"Last-Translator: Ali E.İMREK <alierkanimrek@gmail.com>\n"
"Language-Team: Turkish <tr@li.org>\n"
@@ -19,557 +19,434 @@ msgstr ""
"X-Launchpad-Export-Date: 2014-04-17 05:56+0000\n"
"X-Generator: Launchpad (build 16985)\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Sürüm:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Kullanım:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [seçenekler]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Telif Hakkı:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Lisans:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Tür: "
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Varsayılan: "
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Seçimler: "
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Kullanılabilir kategori yok"
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Kategoriler: "
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Seçenekler:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Konumsal argümanlar:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "HATA: Bilinmeyen kategori '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "HATA: bilinmeyen seçenek --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "HATA: bilinmeyen seçenek -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "HATA: "
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "değer belirlenmemiş.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "bilinmeyen boolean değeri %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "geçersiz sayı biçimi %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "geçersiz seçim \"%s\". Geçerli değerler: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "geçersiz veri eklenmiş.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "değer ayrıştırılamadı.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "eksik parametre.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "eksik geri çağırma işlevi!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "sürüm tanımlanmadı.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "telif hakkı tanımlanmadı.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "lisans tanımlanmadı.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "HATA: bilinmeyen seçenek --%s, yoksayıldı.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "HATA: seçenek --%s bağımsız bir değişken gerektirir!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "HATA: bilinmeyen seçenek --%c, yoksayıldı.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "HATA: seçenek --%c bağımsız bir değişken gerektirir!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "HATA: konumsal argüman kayıp %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "HATA: %d desteklenmeyen eylem türü %s konumsal argümanı için.\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "HATA: ayrıştırıcı sağlanmadı.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "HATA: değerler sağlanmadı.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "HATA: bağımsız değişkenler sağlanmadı.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "HATA: geçersiz seçenekler bulundu."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " Bakın --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " Bakın -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "HATA: geçersiz konumsal argümanlar bulundu."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "HATA: yanlış geometri değeri '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "HATA: yanlış boyut değeri '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Masaüstü"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "İndirilenler"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Şablonlar"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Genel"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Belgeler"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Müzik"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Resimler"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Videolar"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Başlık"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Başlık"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Geri"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Yukarı"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Ev"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "Tamam"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "İptal"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Durum: Kapalı"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Durum: Kapalı"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "çoklu düğme giriş etiketi"
+#~ msgid "multi button entry label"
+#~ msgstr "çoklu düğme giriş etiketi"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "çoklu düğme giriş öğesi"
+#~ msgid "multi button entry item"
+#~ msgstr "çoklu düğme giriş öğesi"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "çoklu düğme girişi"
+#~ msgid "multi button entry"
+#~ msgstr "çoklu düğme girişi"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Başlık"
+#~ msgid "Next"
+#~ msgstr "Sonraki"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Başlık"
+#~ msgid "Popup Title"
+#~ msgstr "Pencere başlığı"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Geri"
+#~ msgid "Popup Body Text"
+#~ msgstr "Pencere gövde metni"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Sonraki"
+#~ msgid "Bubble"
+#~ msgstr "Balon"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Pencere başlığı"
+#~ msgid "Clicked"
+#~ msgstr "Tıklanmış"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Pencere gövde metni"
+#~ msgid "Button"
+#~ msgstr "Düğme"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Balon"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Tıklanmış"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Düğme"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "takvim nesnesi"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "takvim ayı azaltma düğmesi"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "takvim yılı azaltma düğmesi"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "takvim ayı arttırma düğmesi"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "takvim yılı arttırma düğmesi"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "takvim ayı"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "takvim yılı"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Durum: Açık"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Durum: Kapalı"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Durum"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Kontrol et"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "öö,ös için saat arttırma düğmesi"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "öö,ös için saat azaltma düğmesi"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Durum: Düzenlenebilir"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Saat"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "%B"
+#~ msgstr "%B"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "%Y"
+#~ msgstr "%Y"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "calendar item"
+#~ msgstr "takvim nesnesi"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "calendar decrement month button"
+#~ msgstr "takvim ayı azaltma düğmesi"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "calendar decrement year button"
+#~ msgstr "takvim yılı azaltma düğmesi"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "renk seçici paleti öğesi"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "calendar increment month button"
+#~ msgstr "takvim ayı arttırma düğmesi"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "gün seçici ögesi"
+#~ msgid "calendar increment year button"
+#~ msgstr "takvim yılı arttırma düğmesi"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "disk seçici öğesi"
+#~ msgid "calendar month"
+#~ msgstr "takvim ayı"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Kes"
+#~ msgid "calendar year"
+#~ msgstr "takvim yılı"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Kopyala"
+#~ msgid "State: On"
+#~ msgstr "Durum: Açık"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Yapıştır"
+#~ msgid "State: Off"
+#~ msgstr "Durum: Kapalı"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Seç"
+#~ msgid "State"
+#~ msgstr "Durum"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Girdi"
+#~ msgid "Check"
+#~ msgstr "Kontrol et"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Dizin"
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "öö,ös için saat arttırma düğmesi"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "fihrist öğesi"
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "öö,ös için saat azaltma düğmesi"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Etiket"
+#~ msgid "State: Editable"
+#~ msgstr "Durum: Düzenlenebilir"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "durum: açık"
+#~ msgid "Clock"
+#~ msgstr "Saat"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "durum: kapalı"
+#~ msgid "color selector palette item"
+#~ msgstr "renk seçici paleti öğesi"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "day selector item"
+#~ msgstr "gün seçici ögesi"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
+#~ msgid "diskselector item"
+#~ msgstr "disk seçici öğesi"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "panel düğmesi"
+#~ msgid "Cut"
+#~ msgstr "Kes"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "ilerleme çubuğu"
+#~ msgid "Copy"
+#~ msgstr "Kopyala"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Radyo"
+#~ msgid "Paste"
+#~ msgstr "Yapıştır"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Durum: Seçili"
+#~ msgid "Select"
+#~ msgstr "Seç"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Bölge: Seçilmedi"
+#~ msgid "Entry"
+#~ msgstr "Girdi"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Bölüm Kontrol Öğesi"
+#~ msgid "Index"
+#~ msgstr "Dizin"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "kaydırıcı"
+#~ msgid "Index Item"
+#~ msgstr "fihrist öğesi"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
+#~ msgid "Label"
+#~ msgstr "Etiket"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
+#~ msgid "state: opened"
+#~ msgstr "durum: açık"
+
+#~ msgid "state: closed"
+#~ msgstr "durum: kapalı"
+
+#~ msgid "panel button"
+#~ msgstr "panel düğmesi"
+
+#~ msgid "progressbar"
+#~ msgstr "ilerleme çubuğu"
+
+#~ msgid "Radio"
+#~ msgstr "Radyo"
+
+#~ msgid "State: Selected"
+#~ msgstr "Durum: Seçili"
+
+#~ msgid "State: Unselected"
+#~ msgstr "Bölge: Seçilmedi"
+
+#~ msgid "Segment Control Item"
+#~ msgstr "Bölüm Kontrol Öğesi"
+
+#~ msgid "slider"
+#~ msgstr "kaydırıcı"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "değiştirici"
+#~ msgid "spinner"
+#~ msgstr "değiştirici"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "değiştirici arttırma düğmesi"
+#~ msgid "spinner increment button"
+#~ msgstr "değiştirici arttırma düğmesi"
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "değiştirici azaltma düğmesi"
+#~ msgid "spinner decrement button"
+#~ msgstr "değiştirici azaltma düğmesi"
-#: src/lib/elementary/elm_spinner.c:1124
#, fuzzy
-msgid "spinner text"
-msgstr "değiştirici"
+#~ msgid "spinner text"
+#~ msgstr "değiştirici"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Seçili"
+#~ msgid "Selected"
+#~ msgstr "Seçili"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Ayraç"
+#~ msgid "Separator"
+#~ msgstr "Ayraç"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "menü"
+#~ msgid "Has menu"
+#~ msgstr "menü"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Seçili değil"
+#~ msgid "Unselected"
+#~ msgstr "Seçili değil"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Araç Çubuğu Öğesi"
+#~ msgid "Toolbar Item"
+#~ msgstr "Araç Çubuğu Öğesi"
#~ msgid "Gengrid Item"
#~ msgstr "Izgara öğesi"
diff --git a/po/ur.po b/po/ur.po
index aec6c10705..d74f1f965d 100644
--- a/po/ur.po
+++ b/po/ur.po
@@ -2,11 +2,12 @@
# This file is distributed under the same license as the Elementary package.
# FIRST AUTHOR <tom.hacohen@samsung.com>, 2010.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2010-12-26 10:05+0200\n"
"Last-Translator: Tom Hacohen <tom.hacohen@samsung.com>\n"
"Language-Team: General\n"
@@ -15,335 +16,259 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
msgstr ""
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
msgstr ""
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
msgstr ""
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
-msgstr ""
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:RTL"
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
msgstr ""
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
msgstr ""
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
+#: 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 ""
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
+#, c-format
+msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:RTL"
-
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
msgstr ""
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-msgid "State: Unselected"
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
msgstr ""
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:RTL"
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/vi.po b/po/vi.po
index 8660a5ac09..8f75516c0b 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -3,12 +3,12 @@
# This file is put in the public domain.
# Thiep Ha <thiepha@gmail.com>, 2015.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2015-09-29 18:06+0900\n"
"Last-Translator: Thiep Ha <thiepha@gmail.com>\n"
"Language-Team: General\n"
@@ -20,556 +20,460 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Poedit-SourceCharset: UTF-8\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "Phiên Bản:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "Sử Dụng:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, c-format
msgid "%s [options]"
msgstr "%s [Lựa Chọn]"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "Bản Quyền:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "Giấy Phép:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "Kiểu:"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "Mặc Định:"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "Lựa Chọn:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr "Không có loại nào có sẵn."
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
msgid "Categories: "
msgstr "Loại:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "Tùy Chọn:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr "Tham số vị trí:\n"
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "LỖI: không rõ phân loại '%s'.\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "LỖI: không rõ tùy chọn --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "LỖI: không rõ tùy chọn -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "LỖI:"
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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 "giá trị không có trong tập con trỏ.\n"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
#, c-format
msgid "unknown boolean value %s.\n"
msgstr "không biết giá trị kiểu luận lý %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
#, c-format
msgid "invalid number format %s\n"
msgstr "định dạng kiểu số không hợp lệ %s\n"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "lựa chọn không hợp lệ \"%s\". Các giá trị hợp lệ là: "
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "thiếu tham số để thêm vào.\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "không thể phân tích giá trị.\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "thiếu tham số.\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "thiếu con trỏ gọi hàm!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "không định nghĩa phiên bản.\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "không định nghĩa bản quyền.\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "không định nghĩa giấy phép.\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "LỖI: không rõ lựa chọn --%s, bỏ qua.\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "LỖI: lựa chọn --%s đòi hỏi một tham số!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "LỖI: không rõ lựa chọn -%c, bỏ qua.\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "LỖI: lựa chọn -%c đòi hỏi một tham số!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "LỖI: thiếu tham số vị trí được yêu cầu %s.\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr "LỖI: kiểu hoạt động không được hỗ trợ %d cho tham số vị trí %s\n"
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "LỖI: không cung cấp bộ phân tích.\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "LỖI: không cung cấp giá trị.\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "LỖI: không cung cấp đối số.\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "LỖI: phát hiện các tùy chọn không hợp lệ."
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr "Xem --%s.\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr "Xem -%c.\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
msgid "ERROR: invalid positional arguments found."
msgstr "LỖI: phát hiện các đối số vị trí không hợp lệ."
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "LỖI: giá trị hình học không đúng '%s'\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "LỖI: giá trị kích thước không đúng '%s'\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "Màn Hình Nền"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "Tải Về"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "Mẫu"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "Công Cộng"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "Tài Liệu"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "Âm Nhạc"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "Hình Ảnh"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "Video"
-#: src/lib/elementary/elc_fileselector.c:1705
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
+msgstr "Đề Mục"
+
+#: src/lib/elementary/elc_naviframe.c:415
+#, fuzzy
+msgid "Subtitle"
+msgstr "Đề Mục"
+
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
+msgstr "Quay Lại"
+
+#: src/lib/elementary/elc_fileselector.c:1755
msgid "Up"
msgstr "Trên"
-#: src/lib/elementary/elc_fileselector.c:1719
+#: src/lib/elementary/elc_fileselector.c:1769
msgid "Home"
msgstr "Trang Chủ"
-#: src/lib/elementary/elc_fileselector.c:1738
+#: src/lib/elementary/elc_fileselector.c:1787
msgid "Search"
msgstr "Tìm Kiếm"
-#: src/lib/elementary/elc_fileselector.c:2012
+#: src/lib/elementary/elc_fileselector.c:2061
msgid "OK"
msgstr "Đồng Ý"
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
+#: src/lib/elementary/elc_fileselector.c:2070
msgid "Cancel"
msgstr "Hủy"
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "Trạng Thái: Không Khả Dụng"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
+#~ msgid "State: Disabled"
+#~ msgstr "Trạng Thái: Không Khả Dụng"
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr "Nhãn Của Bộ Nhập Nhiều Nút"
+#~ msgid "multi button entry label"
+#~ msgstr "Nhãn Của Bộ Nhập Nhiều Nút"
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr "Mục Của Bộ Nhập Nhiều Nút"
+#~ msgid "multi button entry item"
+#~ msgstr "Mục Của Bộ Nhập Nhiều Nút"
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr "Bộ Nhập Nhiều Nút"
+#~ msgid "multi button entry"
+#~ msgstr "Bộ Nhập Nhiều Nút"
-#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
-msgid "Title"
-msgstr "Đề Mục"
+#~ msgid "Next"
+#~ msgstr "Tiếp"
-#: src/lib/elementary/elc_naviframe.c:415
-#, fuzzy
-msgid "Subtitle"
-msgstr "Đề Mục"
+#~ msgid "Popup Title"
+#~ msgstr "Tiêu Đề Hộp Thoại"
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
-msgid "Back"
-msgstr "Quay Lại"
+#~ msgid "Popup Body Text"
+#~ msgstr "Văn Bản Thân Hộp Thoại"
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr "Tiếp"
+#~ msgid "Bubble"
+#~ msgstr "Bubble"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr "Tiêu Đề Hộp Thoại"
+#~ msgid "Clicked"
+#~ msgstr "Đã Nhấp"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
-msgstr "Văn Bản Thân Hộp Thoại"
+#~ msgid "Button"
+#~ msgstr "Nút"
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "Bubble"
-
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "Đã Nhấp"
-
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "Nút"
-
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
-
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr "%B"
-
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr "%Y"
-
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "Mục Của Lịch"
-
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
-msgid "calendar decrement month button"
-msgstr "Nút Giảm Tháng"
-
-#: src/lib/elementary/elm_calendar.c:397
-msgid "calendar decrement year button"
-msgstr "Nút Giảm Năm"
-
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
-msgid "calendar increment month button"
-msgstr "Nút Tăng Tháng"
-
-#: src/lib/elementary/elm_calendar.c:409
-msgid "calendar increment year button"
-msgstr "Nút Tăng Năm"
-
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "Lịch Tháng"
-
-#: src/lib/elementary/elm_calendar.c:419
-msgid "calendar year"
-msgstr "Lịch Năm"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "Trạng Thái: Bật"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "Trạng Thái: Tắt"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "Trạng Thái"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "Chọn"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "Nút Tăng Cho SA,CH Của Đồng Hồ"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "Nút Giảm Cho SA,CH Của Đồng Hồ"
-
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "Trạng Thái: Có Thể Chỉnh Sửa"
-
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "Đồng Hồ"
-
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr "Chọn Một Màu"
-
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr "Đỏ:"
-
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr "Xanh Lá Cây:"
-
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr "Xanh Da Trời:"
-
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr "Độ Mờ:"
-
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "Mục Của Bảng Chọn Màu"
-
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "%B"
+#~ msgstr "%B"
+
+#~ msgid "%Y"
+#~ msgstr "%Y"
+
+#~ msgid "calendar item"
+#~ msgstr "Mục Của Lịch"
+
+#~ msgid "calendar decrement month button"
+#~ msgstr "Nút Giảm Tháng"
+
+#~ msgid "calendar decrement year button"
+#~ msgstr "Nút Giảm Năm"
+
+#~ msgid "calendar increment month button"
+#~ msgstr "Nút Tăng Tháng"
+
+#~ msgid "calendar increment year button"
+#~ msgstr "Nút Tăng Năm"
+
+#~ msgid "calendar month"
+#~ msgstr "Lịch Tháng"
+
+#~ msgid "calendar year"
+#~ msgstr "Lịch Năm"
+
+#~ msgid "State: On"
+#~ msgstr "Trạng Thái: Bật"
+
+#~ msgid "State: Off"
+#~ msgstr "Trạng Thái: Tắt"
+
+#~ msgid "State"
+#~ msgstr "Trạng Thái"
+
+#~ msgid "Check"
+#~ msgstr "Chọn"
+
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "Nút Tăng Cho SA,CH Của Đồng Hồ"
+
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "Nút Giảm Cho SA,CH Của Đồng Hồ"
+
+#~ msgid "State: Editable"
+#~ msgstr "Trạng Thái: Có Thể Chỉnh Sửa"
+
+#~ msgid "Clock"
+#~ msgstr "Đồng Hồ"
+
+#~ msgid "Pick a color"
+#~ msgstr "Chọn Một Màu"
+
+#~ msgid "R:"
+#~ msgstr "Đỏ:"
+
+#~ msgid "G:"
+#~ msgstr "Xanh Lá Cây:"
+
+#~ msgid "B:"
+#~ msgstr "Xanh Da Trời:"
+
+#~ msgid "A:"
+#~ msgstr "Độ Mờ:"
+
+#~ msgid "color selector palette item"
+#~ msgstr "Mục Của Bảng Chọn Màu"
+
+#~ msgid "day selector item"
+#~ msgstr "Mục Của Bảng Chọn Ngày"
+
+#~ msgid "diskselector item"
+#~ msgstr "Mục Của Bộ Chọn Đĩa"
+
+#~ msgid "Cut"
+#~ msgstr "Cắt"
+
+#~ msgid "Copy"
+#~ msgstr "Sao Chép"
+
+#~ msgid "Paste"
+#~ msgstr "Dán"
+
+#~ msgid "Select"
+#~ msgstr "Chọn"
+
+#~ msgid "Entry"
+#~ msgstr "Bộ Nhập"
-#: src/lib/elementary/elm_dayselector.c:437
-msgid "day selector item"
-msgstr "Mục Của Bảng Chọn Ngày"
+#~ msgid "Index"
+#~ msgstr "Chỉ Mục"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "Mục Của Bộ Chọn Đĩa"
+#~ msgid "Index Item"
+#~ msgstr "Mục Của Bộ Chỉ Mục"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "Cắt"
+#~ msgid "Label"
+#~ msgstr "Nhãn"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "Sao Chép"
+#~ msgid "state: opened"
+#~ msgstr "Trạng Thái: Mở"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "Dán"
+#~ msgid "state: closed"
+#~ msgstr "Trạng Thái: Đóng"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "Chọn"
+#~ msgid "A panel is open"
+#~ msgstr "Một Bảng Đang Mở"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "Bộ Nhập"
+#~ msgid "Double tap to close panel menu"
+#~ msgstr "Nhấn kép để đóng bảng chọn"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "Chỉ Mục"
+#~ msgid "panel button"
+#~ msgstr "Nút Bảng"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "Mục Của Bộ Chỉ Mục"
+#~ msgid "progressbar"
+#~ msgstr "Thanh Trạng Thái"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "Nhãn"
+#~ msgid "Radio"
+#~ msgstr "Đài"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "Trạng Thái: Mở"
+#~ msgid "State: Selected"
+#~ msgstr "Trạng Thái: Đã Chọn"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "Trạng Thái: Đóng"
+#~ msgid "State: Unselected"
+#~ msgstr "Trạng Thái: Chưa Chọn"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr "Một Bảng Đang Mở"
+#~ msgid "Segment Control Item"
+#~ msgstr "Mục Điều Khiển Đoạn"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr "Nhấn kép để đóng bảng chọn"
+#~ msgid "slider"
+#~ msgstr "Thanh Trượt"
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "Nút Bảng"
+#~ msgid "incremented"
+#~ msgstr "Đã Tăng"
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "Thanh Trạng Thái"
+#~ msgid "decremented"
+#~ msgstr "Đã Giảm"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "Đài"
+#~ msgid "spinner"
+#~ msgstr "Bộ Xoay"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "Trạng Thái: Đã Chọn"
+#~ msgid "spinner increment button"
+#~ msgstr "Bút Tăng Bộ Xoay"
-#: src/lib/elementary/elm_segment_control.c:530
-msgid "State: Unselected"
-msgstr "Trạng Thái: Chưa Chọn"
+#~ msgid "spinner decrement button"
+#~ msgstr "Nút Giảm Bộ Xoay"
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr "Mục Điều Khiển Đoạn"
+#~ msgid "spinner text"
+#~ msgstr "Văn Bản Bộ Xoay"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "Thanh Trượt"
+#~ msgid "Selected"
+#~ msgstr "Đã Chọn"
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr "Đã Tăng"
+#~ msgid "Separator"
+#~ msgstr "Bộ Tách"
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr "Đã Giảm"
+#~ msgid "Has menu"
+#~ msgstr "Có Bảng Chọn"
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr "Bộ Xoay"
+#~ msgid "Unselected"
+#~ msgstr "Không Chọn"
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr "Bút Tăng Bộ Xoay"
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr "Nút Giảm Bộ Xoay"
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr "Văn Bản Bộ Xoay"
-
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "Đã Chọn"
-
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "Bộ Tách"
-
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "Có Bảng Chọn"
-
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "Không Chọn"
-
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "Mục Của Thanh Công Cụ"
+#~ msgid "Toolbar Item"
+#~ msgstr "Mục Của Thanh Công Cụ"
#~ msgid "Gengrid Item"
#~ msgstr "Mục Của Gengrid"
diff --git a/po/yi.po b/po/yi.po
index e34dc83451..0a7e20c0a8 100644
--- a/po/yi.po
+++ b/po/yi.po
@@ -2,11 +2,12 @@
# This file is distributed under the same license as the Elementary package.
# FIRST AUTHOR <tom.hacohen@samsung.com>, 2010.
#
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: Efl\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2015-11-09 11:01+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2010-12-26 10:05+0200\n"
"Last-Translator: Tom Hacohen <tom.hacohen@samsung.com>\n"
"Language-Team: General\n"
@@ -15,335 +16,259 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/elementary/elc_fileselector.c:1505 src/lib/elc_fileselector.c:1505
-msgid "Up"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1521 src/lib/elc_fileselector.c:1521
-msgid "Home"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1588 src/lib/elc_fileselector.c:1588
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1757
-#: src/lib/elementary/elm_entry.c:1588 src/lib/elementary/elm_entry.c:1613
-#: src/lib/elc_fileselector.c:1757 src/lib/elm_entry.c:1588
-#: src/lib/elm_entry.c:1613
-msgid "Cancel"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:1767 src/lib/elc_fileselector.c:1767
-msgid "OK"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:670
-#: src/lib/elc_multibuttonentry.c:670
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:692
-#: src/lib/elc_multibuttonentry.c:692
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1565
-#: src/lib/elc_multibuttonentry.c:1565
-msgid "multi button entry"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:432 src/lib/elc_naviframe.c:432
-msgid "Title"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:978
-#: src/lib/elementary/elc_naviframe.c:1183 src/lib/elc_naviframe.c:978
-#: src/lib/elc_naviframe.c:1183
-msgid "Back"
-msgstr ""
-
-#: src/lib/elementary/elc_naviframe.c:1279 src/lib/elc_naviframe.c:1279
-msgid "Next"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:275 src/lib/elementary/elc_popup.c:941
-#: src/lib/elc_popup.c:275 src/lib/elc_popup.c:941
-msgid "Popup Title"
-msgstr ""
-
-#: src/lib/elementary/elc_popup.c:285 src/lib/elementary/elc_popup.c:1017
-#: src/lib/elc_popup.c:285 src/lib/elc_popup.c:1017
-msgid "Popup Body Text"
-msgstr ""
-
-#: src/lib/elementary/elm_bubble.c:194 src/lib/elm_bubble.c:194
-msgid "Bubble"
+#: src/lib/ecore/ecore_getopt.c:85
+msgid "Version:"
msgstr ""
-#: src/lib/elementary/elm_button.c:66 src/lib/elm_button.c:66
-msgid "Clicked"
+#: src/lib/ecore/ecore_getopt.c:94
+msgid "Usage:"
msgstr ""
-#: src/lib/elementary/elm_button.c:275 src/lib/elementary/elm_check.c:244
-#: src/lib/elementary/elm_gengrid.c:1257 src/lib/elementary/elm_genlist.c:1659
-#: src/lib/elementary/elm_list.c:2193 src/lib/elementary/elm_radio.c:268
-#: src/lib/elementary/elm_segment_control.c:524
-#: src/lib/elementary/elm_spinner.c:902 src/lib/elementary/elm_toolbar.c:2250
-#: src/lib/elm_button.c:275 src/lib/elm_check.c:244 src/lib/elm_gengrid.c:1257
-#: src/lib/elm_genlist.c:1659 src/lib/elm_list.c:2193 src/lib/elm_radio.c:268
-#: src/lib/elm_segment_control.c:524 src/lib/elm_spinner.c:902
-#: src/lib/elm_toolbar.c:2250
-msgid "State: Disabled"
+#: src/lib/ecore/ecore_getopt.c:101
+#, c-format
+msgid "%s [options]"
msgstr ""
-#: src/lib/elementary/elm_button.c:300 src/lib/elm_button.c:300
-msgid "Button"
+#: src/lib/ecore/ecore_getopt.c:301
+msgid "Copyright:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:219 src/lib/elm_calendar.c:219
-msgid "%B %Y"
+#: src/lib/ecore/ecore_getopt.c:313
+msgid "License:"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:225 src/lib/elm_calendar.c:225
-msgid "%B"
+#: src/lib/ecore/ecore_getopt.c:499
+msgid "Type: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:231 src/lib/elm_calendar.c:231
-msgid "%Y"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:345 src/lib/elm_calendar.c:345
-msgid "calendar item"
-msgstr ""
-
-#: src/lib/elementary/elm_calendar.c:371 src/lib/elm_calendar.c:371
-msgid "calendar decrement month button"
-msgstr ""
+#: src/lib/ecore/ecore_getopt.c:575
+#, fuzzy
+msgid "Default: "
+msgstr "default:RTL"
-#: src/lib/elementary/elm_calendar.c:376 src/lib/elm_calendar.c:376
-msgid "calendar decrement year button"
+#: src/lib/ecore/ecore_getopt.c:602
+msgid "Choices: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:381 src/lib/elm_calendar.c:381
-msgid "calendar increment month button"
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
+msgid "No categories available."
msgstr ""
-#: src/lib/elementary/elm_calendar.c:386 src/lib/elm_calendar.c:386
-msgid "calendar increment year button"
+#: src/lib/ecore/ecore_getopt.c:645
+msgid "Categories: "
msgstr ""
-#: src/lib/elementary/elm_calendar.c:391 src/lib/elm_calendar.c:391
-msgid "calendar month"
+#: src/lib/ecore/ecore_getopt.c:767
+msgid "Options:\n"
msgstr ""
-#: src/lib/elementary/elm_calendar.c:396 src/lib/elm_calendar.c:396
-msgid "calendar year"
+#: src/lib/ecore/ecore_getopt.c:776
+msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:67 src/lib/elementary/elm_check.c:257
-#: src/lib/elementary/elm_radio.c:125 src/lib/elementary/elm_radio.c:269
-#: src/lib/elm_check.c:67 src/lib/elm_check.c:257 src/lib/elm_radio.c:125
-#: src/lib/elm_radio.c:269
-msgid "State: On"
+#: src/lib/ecore/ecore_getopt.c:843
+#, c-format
+msgid "ERROR: unknown category '%s'.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:78 src/lib/elementary/elm_check.c:269
-#: src/lib/elementary/elm_radio.c:271 src/lib/elm_check.c:78
-#: src/lib/elm_check.c:269 src/lib/elm_radio.c:271
-msgid "State: Off"
+#: src/lib/ecore/ecore_getopt.c:947
+#, c-format
+msgid "ERROR: unknown option --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:253 src/lib/elementary/elm_check.c:266
-#: src/lib/elm_check.c:253 src/lib/elm_check.c:266
-msgid "State"
+#: src/lib/ecore/ecore_getopt.c:949
+#, c-format
+msgid "ERROR: unknown option -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_check.c:344 src/lib/elm_check.c:344
-msgid "Check"
+#: src/lib/ecore/ecore_getopt.c:1012
+msgid "ERROR: "
msgstr ""
-#: src/lib/elementary/elm_clock.c:303 src/lib/elm_clock.c:303
-msgid "clock increment button for am,pm"
+#: 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 ""
-#: src/lib/elementary/elm_clock.c:311 src/lib/elm_clock.c:311
-msgid "clock decrement button for am,pm"
+#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
+#, c-format
+msgid "unknown boolean value %s.\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:647 src/lib/elm_clock.c:647
-msgid "State: Editable"
+#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
+#, c-format
+msgid "invalid number format %s\n"
msgstr ""
-#: src/lib/elementary/elm_clock.c:682 src/lib/elm_clock.c:682
-msgid "Clock"
+#: src/lib/ecore/ecore_getopt.c:1309
+#, c-format
+msgid "invalid choice \"%s\". Valid values are: "
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:731 src/lib/elm_colorselector.c:731
-msgid "Pick a color"
+#: src/lib/ecore/ecore_getopt.c:1337
+msgid "missing parameter to append.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:769 src/lib/elm_colorselector.c:769
-msgid "R:"
+#: src/lib/ecore/ecore_getopt.c:1441
+msgid "could not parse value.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:771 src/lib/elm_colorselector.c:771
-msgid "G:"
+#: src/lib/ecore/ecore_getopt.c:1498
+msgid "missing parameter.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:773 src/lib/elm_colorselector.c:773
-msgid "B:"
+#: src/lib/ecore/ecore_getopt.c:1511
+msgid "missing callback function!\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:775 src/lib/elm_colorselector.c:775
-msgid "A:"
+#: src/lib/ecore/ecore_getopt.c:1542
+msgid "no version was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_colorselector.c:1498 src/lib/elm_colorselector.c:1498
-msgid "color selector palette item"
+#: src/lib/ecore/ecore_getopt.c:1559
+msgid "no copyright was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_config.c:3287 src/lib/elm_config.c:3287
-msgid "default:LTR"
-msgstr "default:RTL"
-
-#: src/lib/elementary/elm_dayselector.c:409 src/lib/elm_dayselector.c:409
-msgid "day selector item"
+#: src/lib/ecore/ecore_getopt.c:1576
+msgid "no license was defined.\n"
msgstr ""
-#: src/lib/elementary/elm_diskselector.c:700 src/lib/elm_diskselector.c:700
-msgid "diskselector item"
+#: src/lib/ecore/ecore_getopt.c:1666
+#, c-format
+msgid "ERROR: unknown option --%s, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1575 src/lib/elm_entry.c:1575
-msgid "Copy"
+#: src/lib/ecore/ecore_getopt.c:1706
+#, c-format
+msgid "ERROR: option --%s requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1580 src/lib/elm_entry.c:1580
-msgid "Cut"
+#: src/lib/ecore/ecore_getopt.c:1748
+#, c-format
+msgid "ERROR: unknown option -%c, ignored.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1584 src/lib/elementary/elm_entry.c:1607
-#: src/lib/elm_entry.c:1584 src/lib/elm_entry.c:1607
-msgid "Paste"
+#: src/lib/ecore/ecore_getopt.c:1793
+#, c-format
+msgid "ERROR: option -%c requires an argument!\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:1600 src/lib/elm_entry.c:1600
-msgid "Select"
+#: src/lib/ecore/ecore_getopt.c:1888
+#, c-format
+msgid "ERROR: missing required positional argument %s.\n"
msgstr ""
-#: src/lib/elementary/elm_entry.c:3539 src/lib/elm_entry.c:3539
-msgid "Entry"
+#: src/lib/ecore/ecore_getopt.c:1920
+#, c-format
+msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/elementary/elm_gengrid.c:1287 src/lib/elm_gengrid.c:1287
-msgid "Gengrid Item"
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
+msgid "ERROR: no parser provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:93 src/lib/elm_index.c:93
-msgid "Index"
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
+msgid "ERROR: no values provided.\n"
msgstr ""
-#: src/lib/elementary/elm_index.c:121 src/lib/elm_index.c:121
-msgid "Index Item"
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
+msgid "ERROR: no arguments provided.\n"
msgstr ""
-#: src/lib/elementary/elm_label.c:392 src/lib/elm_label.c:392
-msgid "Label"
+#: src/lib/ecore/ecore_getopt.c:2081
+msgid "ERROR: invalid options found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:71 src/lib/elm_panel.c:71
-msgid "state: opened"
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
+#, c-format
+msgid " See --%s.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:72 src/lib/elm_panel.c:72
-msgid "state: closed"
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
+#, c-format
+msgid " See -%c.\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:112 src/lib/elm_panel.c:112
-msgid "A panel is open"
+#: src/lib/ecore/ecore_getopt.c:2148
+msgid "ERROR: invalid positional arguments found."
msgstr ""
-#: src/lib/elementary/elm_panel.c:114 src/lib/elm_panel.c:114
-msgid "Double tap to close panel menu"
+#: src/lib/ecore/ecore_getopt.c:2183
+#, c-format
+msgid "ERROR: incorrect geometry value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_panel.c:166 src/lib/elm_panel.c:166
-msgid "panel button"
+#: src/lib/ecore/ecore_getopt.c:2201
+#, c-format
+msgid "ERROR: incorrect size value '%s'\n"
msgstr ""
-#: src/lib/elementary/elm_progressbar.c:286 src/lib/elm_progressbar.c:286
-msgid "progressbar"
+#: src/lib/efreet/efreet_base.c:127
+msgid "Desktop"
msgstr ""
-#: src/lib/elementary/elm_radio.c:297 src/lib/elm_radio.c:297
-msgid "Radio"
+#: src/lib/efreet/efreet_base.c:135
+msgid "Downloads"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:527
-#: src/lib/elementary/elm_toolbar.c:2252 src/lib/elm_segment_control.c:527
-#: src/lib/elm_toolbar.c:2252
-msgid "State: Selected"
+#: src/lib/efreet/efreet_base.c:144
+msgid "Templates"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:529
-#: src/lib/elm_segment_control.c:529
-msgid "State: Unselected"
+#: src/lib/efreet/efreet_base.c:153
+msgid "Public"
msgstr ""
-#: src/lib/elementary/elm_segment_control.c:543
-#: src/lib/elm_segment_control.c:543
-msgid "Segment Control Item"
+#: src/lib/efreet/efreet_base.c:162
+msgid "Documents"
msgstr ""
-#: src/lib/elementary/elm_slider.c:893 src/lib/elm_slider.c:893
-msgid "slider"
+#: src/lib/efreet/efreet_base.c:170
+msgid "Music"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:932 src/lib/elm_spinner.c:932
-msgid "incremented"
+#: src/lib/efreet/efreet_base.c:178
+msgid "Pictures"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:938 src/lib/elm_spinner.c:938
-msgid "decremented"
+#: src/lib/efreet/efreet_base.c:186
+msgid "Videos"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:971 src/lib/elementary/elm_spinner.c:1038
-#: src/lib/elm_spinner.c:971 src/lib/elm_spinner.c:1038
-msgid "spinner"
-msgstr ""
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:RTL"
-#: src/lib/elementary/elm_spinner.c:980 src/lib/elementary/elm_spinner.c:1021
-#: src/lib/elm_spinner.c:980 src/lib/elm_spinner.c:1021
-msgid "spinner increment button"
+#: src/lib/elementary/elc_naviframe.c:408
+msgid "Title"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:983 src/lib/elementary/elm_spinner.c:1030
-#: src/lib/elm_spinner.c:983 src/lib/elm_spinner.c:1030
-msgid "spinner decrement button"
+#: src/lib/elementary/elc_naviframe.c:415
+msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elm_spinner.c:985 src/lib/elm_spinner.c:985
-msgid "spinner text"
+#: src/lib/elementary/elc_naviframe.c:966
+msgid "Back"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:1710 src/lib/elementary/elm_toolbar.c:2309
-#: src/lib/elm_toolbar.c:1710 src/lib/elm_toolbar.c:2309
-msgid "Selected"
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2248 src/lib/elm_toolbar.c:2248
-msgid "Separator"
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2254 src/lib/elm_toolbar.c:2254
-msgid "Has menu"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2304 src/lib/elm_toolbar.c:2304
-msgid "Unselected"
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
msgstr ""
-#: src/lib/elementary/elm_toolbar.c:2321 src/lib/elm_toolbar.c:2321
-msgid "Toolbar Item"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index a7c568a692..6ee7a06e46 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -4,12 +4,12 @@
# This file is distributed under the same license as the Efl package.
# Aron Xu <happyaron.xu@gmail.com>, 2012.
#
-#: src/lib/elementary/elm_config.c:4135
+#: src/lib/elementary/elm_config.c:4267
msgid ""
msgstr ""
"Project-Id-Version: elementary\n"
-"Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2019-04-15 12:03+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-04-19 16:13+0200\n"
"PO-Revision-Date: 2012-12-22 03:55+0800\n"
"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
"Language-Team: Chinese (simplified)\n"
@@ -18,276 +18,234 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/ecore/ecore_getopt.c:89
+#: src/lib/ecore/ecore_getopt.c:85
msgid "Version:"
msgstr "版本:"
-#: src/lib/ecore/ecore_getopt.c:98
+#: src/lib/ecore/ecore_getopt.c:94
msgid "Usage:"
msgstr "用法:"
-#: src/lib/ecore/ecore_getopt.c:105
+#: src/lib/ecore/ecore_getopt.c:101
#, fuzzy, c-format
msgid "%s [options]"
msgstr "%s [选项]\n"
-#: src/lib/ecore/ecore_getopt.c:305
+#: src/lib/ecore/ecore_getopt.c:301
msgid "Copyright:"
msgstr "版权信息:"
-#: src/lib/ecore/ecore_getopt.c:317
+#: src/lib/ecore/ecore_getopt.c:313
msgid "License:"
msgstr "许可证:"
-#: src/lib/ecore/ecore_getopt.c:503
+#: src/lib/ecore/ecore_getopt.c:499
msgid "Type: "
msgstr "类型:"
-#: src/lib/ecore/ecore_getopt.c:579
+#: src/lib/ecore/ecore_getopt.c:575
msgid "Default: "
msgstr "默认:"
-#: src/lib/ecore/ecore_getopt.c:606
+#: src/lib/ecore/ecore_getopt.c:602
msgid "Choices: "
msgstr "可选项:"
-#: src/lib/ecore/ecore_getopt.c:644 src/lib/ecore/ecore_getopt.c:645
+#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
msgid "No categories available."
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:649
+#: src/lib/ecore/ecore_getopt.c:645
#, fuzzy
msgid "Categories: "
msgstr "可选项:"
-#: src/lib/ecore/ecore_getopt.c:771
+#: src/lib/ecore/ecore_getopt.c:767
msgid "Options:\n"
msgstr "选项:\n"
-#: src/lib/ecore/ecore_getopt.c:780
+#: src/lib/ecore/ecore_getopt.c:776
msgid "Positional arguments:\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:847
+#: src/lib/ecore/ecore_getopt.c:843
#, fuzzy, c-format
msgid "ERROR: unknown category '%s'.\n"
msgstr "错误:未知选项 --%s。\n"
-#: src/lib/ecore/ecore_getopt.c:951
+#: src/lib/ecore/ecore_getopt.c:947
#, c-format
msgid "ERROR: unknown option --%s.\n"
msgstr "错误:未知选项 --%s。\n"
-#: src/lib/ecore/ecore_getopt.c:953
+#: src/lib/ecore/ecore_getopt.c:949
#, c-format
msgid "ERROR: unknown option -%c.\n"
msgstr "错误:未知选项 -%c。\n"
-#: src/lib/ecore/ecore_getopt.c:1016
+#: src/lib/ecore/ecore_getopt.c:1012
msgid "ERROR: "
msgstr "错误:"
-#: src/lib/ecore/ecore_getopt.c:1112 src/lib/ecore/ecore_getopt.c:1249
-#: src/lib/ecore/ecore_getopt.c:1265 src/lib/ecore/ecore_getopt.c:1280
-#: src/lib/ecore/ecore_getopt.c:1300 src/lib/ecore/ecore_getopt.c:1347
-#: src/lib/ecore/ecore_getopt.c:1467 src/lib/ecore/ecore_getopt.c:1508
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1144 src/lib/ecore/ecore_getopt.c:1367
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1195 src/lib/ecore/ecore_getopt.c:1455
+#: 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"
-#: src/lib/ecore/ecore_getopt.c:1313
+#: src/lib/ecore/ecore_getopt.c:1309
#, c-format
msgid "invalid choice \"%s\". Valid values are: "
msgstr "无效选项 %s。有效的值有:"
-#: src/lib/ecore/ecore_getopt.c:1341
+#: src/lib/ecore/ecore_getopt.c:1337
msgid "missing parameter to append.\n"
msgstr "缺少要附加的参数。\n"
-#: src/lib/ecore/ecore_getopt.c:1445
+#: src/lib/ecore/ecore_getopt.c:1441
msgid "could not parse value.\n"
msgstr "无法解析值。\n"
-#: src/lib/ecore/ecore_getopt.c:1502
+#: src/lib/ecore/ecore_getopt.c:1498
msgid "missing parameter.\n"
msgstr "缺少参数。\n"
-#: src/lib/ecore/ecore_getopt.c:1515
+#: src/lib/ecore/ecore_getopt.c:1511
msgid "missing callback function!\n"
msgstr "缺少 callback 功能!\n"
-#: src/lib/ecore/ecore_getopt.c:1546
+#: src/lib/ecore/ecore_getopt.c:1542
msgid "no version was defined.\n"
msgstr "未指定版本。\n"
-#: src/lib/ecore/ecore_getopt.c:1563
+#: src/lib/ecore/ecore_getopt.c:1559
msgid "no copyright was defined.\n"
msgstr "未定义版权信息。\n"
-#: src/lib/ecore/ecore_getopt.c:1580
+#: src/lib/ecore/ecore_getopt.c:1576
msgid "no license was defined.\n"
msgstr "未定义许可证。\n"
-#: src/lib/ecore/ecore_getopt.c:1670
+#: src/lib/ecore/ecore_getopt.c:1666
#, c-format
msgid "ERROR: unknown option --%s, ignored.\n"
msgstr "错误:未知选项 --%s,忽略。\n"
-#: src/lib/ecore/ecore_getopt.c:1710
+#: src/lib/ecore/ecore_getopt.c:1706
#, c-format
msgid "ERROR: option --%s requires an argument!\n"
msgstr "错误:选项 --%s 需要一个参数!\n"
-#: src/lib/ecore/ecore_getopt.c:1752
+#: src/lib/ecore/ecore_getopt.c:1748
#, c-format
msgid "ERROR: unknown option -%c, ignored.\n"
msgstr "错误:未知选项 -%c,忽略。\n"
-#: src/lib/ecore/ecore_getopt.c:1797
+#: src/lib/ecore/ecore_getopt.c:1793
#, c-format
msgid "ERROR: option -%c requires an argument!\n"
msgstr "错误:选项 -%c 需要一个参数!\n"
-#: src/lib/ecore/ecore_getopt.c:1892
+#: src/lib/ecore/ecore_getopt.c:1888
#, fuzzy, c-format
msgid "ERROR: missing required positional argument %s.\n"
msgstr "错误:选项 -%c 需要一个参数!\n"
-#: src/lib/ecore/ecore_getopt.c:1924
+#: src/lib/ecore/ecore_getopt.c:1920
#, c-format
msgid "ERROR: unsupported action type %d for positional argument %s\n"
msgstr ""
-#: src/lib/ecore/ecore_getopt.c:2045 src/lib/ecore/ecore_getopt.c:2111
+#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
msgid "ERROR: no parser provided.\n"
msgstr "错误:未提供解析器。\n"
-#: src/lib/ecore/ecore_getopt.c:2050 src/lib/ecore/ecore_getopt.c:2116
+#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
msgid "ERROR: no values provided.\n"
msgstr "错误:未提供值。\n"
-#: src/lib/ecore/ecore_getopt.c:2059 src/lib/ecore/ecore_getopt.c:2125
+#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
msgid "ERROR: no arguments provided.\n"
msgstr "错误:未提供参数。\n"
-#: src/lib/ecore/ecore_getopt.c:2085
+#: src/lib/ecore/ecore_getopt.c:2081
msgid "ERROR: invalid options found."
msgstr "错误:无效的选项。"
-#: src/lib/ecore/ecore_getopt.c:2091 src/lib/ecore/ecore_getopt.c:2157
+#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
#, c-format
msgid " See --%s.\n"
msgstr " 参看 --%s\n"
-#: src/lib/ecore/ecore_getopt.c:2093 src/lib/ecore/ecore_getopt.c:2159
+#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
#, c-format
msgid " See -%c.\n"
msgstr " 参看 -%c\n"
-#: src/lib/ecore/ecore_getopt.c:2151
+#: src/lib/ecore/ecore_getopt.c:2148
#, fuzzy
msgid "ERROR: invalid positional arguments found."
msgstr "错误:无效的选项。"
-#: src/lib/ecore/ecore_getopt.c:2186
+#: src/lib/ecore/ecore_getopt.c:2183
#, c-format
msgid "ERROR: incorrect geometry value '%s'\n"
msgstr "错误:不正确的形状 %s\n"
-#: src/lib/ecore/ecore_getopt.c:2204
+#: src/lib/ecore/ecore_getopt.c:2201
#, c-format
msgid "ERROR: incorrect size value '%s'\n"
msgstr "错误:不正确的大小 %s\n"
-#: src/lib/efreet/efreet_base.c:126
+#: src/lib/efreet/efreet_base.c:127
msgid "Desktop"
msgstr "桌面"
-#: src/lib/efreet/efreet_base.c:134
+#: src/lib/efreet/efreet_base.c:135
msgid "Downloads"
msgstr "下载"
-#: src/lib/efreet/efreet_base.c:143
+#: src/lib/efreet/efreet_base.c:144
msgid "Templates"
msgstr "模板"
-#: src/lib/efreet/efreet_base.c:152
+#: src/lib/efreet/efreet_base.c:153
msgid "Public"
msgstr "公共"
-#: src/lib/efreet/efreet_base.c:161
+#: src/lib/efreet/efreet_base.c:162
msgid "Documents"
msgstr "文档"
-#: src/lib/efreet/efreet_base.c:169
+#: src/lib/efreet/efreet_base.c:170
msgid "Music"
msgstr "音乐"
-#: src/lib/efreet/efreet_base.c:177
+#: src/lib/efreet/efreet_base.c:178
msgid "Pictures"
msgstr "图片"
-#: src/lib/efreet/efreet_base.c:185
+#: src/lib/efreet/efreet_base.c:186
msgid "Videos"
msgstr "视频"
-#: src/lib/elementary/elc_fileselector.c:1705
-msgid "Up"
-msgstr "向上"
-
-#: src/lib/elementary/elc_fileselector.c:1719
-msgid "Home"
-msgstr "主目录"
-
-#: src/lib/elementary/elc_fileselector.c:1738
-msgid "Search"
-msgstr ""
-
-#: src/lib/elementary/elc_fileselector.c:2012
-msgid "OK"
-msgstr "确定"
-
-#: src/lib/elementary/elc_fileselector.c:2022
-#: src/lib/elementary/elm_entry.c:1759 src/lib/elementary/elm_entry.c:1784
-msgid "Cancel"
-msgstr "取消"
-
-#: src/lib/elementary/elc_hoversel.c:439 src/lib/elementary/efl_ui_button.c:208
-#: src/lib/elementary/efl_ui_check.c:187 src/lib/elementary/elm_gengrid.c:1532
-#: src/lib/elementary/elm_genlist.c:1769 src/lib/elementary/elm_list.c:2185
-#: src/lib/elementary/efl_ui_radio.c:201
-#: src/lib/elementary/elm_segment_control.c:525
-#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2294
-msgid "State: Disabled"
-msgstr "状态:已禁用"
-
-#: src/lib/elementary/elc_hoversel.c:652
-msgid "Hoversel"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:682
-msgid "multi button entry label"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:704
-msgid "multi button entry item"
-msgstr ""
-
-#: src/lib/elementary/elc_multibuttonentry.c:1586
-msgid "multi button entry"
-msgstr ""
+# Don't change it!
+#: src/lib/evas/common/language/evas_language_utils.c:205
+msgid "default:LTR"
+msgstr "default:LTR"
#: src/lib/elementary/elc_naviframe.c:408
-#: src/lib/elementary/elc_naviframe.c:436
msgid "Title"
msgstr ""
@@ -295,288 +253,168 @@ msgstr ""
msgid "Subtitle"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:968
-#: src/lib/elementary/elc_naviframe.c:1186
+#: src/lib/elementary/elc_naviframe.c:966
msgid "Back"
msgstr ""
-#: src/lib/elementary/elc_naviframe.c:1358
-msgid "Next"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1755
+msgid "Up"
+msgstr "向上"
-#: src/lib/elementary/elc_popup.c:320 src/lib/elementary/elc_popup.c:984
-msgid "Popup Title"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:1769
+msgid "Home"
+msgstr "主目录"
-#: src/lib/elementary/elc_popup.c:330 src/lib/elementary/elc_popup.c:1060
-msgid "Popup Body Text"
+#: src/lib/elementary/elc_fileselector.c:1787
+msgid "Search"
msgstr ""
-#: src/lib/elementary/elc_popup.c:1836
-msgid "Alert"
-msgstr ""
+#: src/lib/elementary/elc_fileselector.c:2061
+msgid "OK"
+msgstr "确定"
-#: src/lib/elementary/elm_bubble.c:163
-msgid "Bubble"
-msgstr "气泡"
+#: src/lib/elementary/elc_fileselector.c:2070
+msgid "Cancel"
+msgstr "取消"
-#: src/lib/elementary/efl_ui_button.c:71
-msgid "Clicked"
-msgstr "点击"
+#~ msgid "State: Disabled"
+#~ msgstr "状态:已禁用"
-#: src/lib/elementary/efl_ui_button.c:250
-msgid "Button"
-msgstr "按钮"
+#~ msgid "Bubble"
+#~ msgstr "气泡"
-#: src/lib/elementary/elm_calendar.c:225
-#: src/lib/elementary/efl_ui_calendar.c:193
-msgid "%B %Y"
-msgstr "%B %Y"
+#~ msgid "Clicked"
+#~ msgstr "点击"
-#: src/lib/elementary/elm_calendar.c:231
-msgid "%B"
-msgstr ""
+#~ msgid "Button"
+#~ msgstr "按钮"
-#: src/lib/elementary/elm_calendar.c:237
-msgid "%Y"
-msgstr ""
+#~ msgid "%B %Y"
+#~ msgstr "%B %Y"
-#: src/lib/elementary/elm_calendar.c:363
-#: src/lib/elementary/efl_ui_calendar.c:240
-msgid "calendar item"
-msgstr "日历条目"
+#~ msgid "calendar item"
+#~ msgstr "日历条目"
-#: src/lib/elementary/elm_calendar.c:391
-#: src/lib/elementary/efl_ui_calendar.c:267
#, fuzzy
-msgid "calendar decrement month button"
-msgstr "日历减量按钮"
+#~ msgid "calendar decrement month button"
+#~ msgstr "日历减量按钮"
-#: src/lib/elementary/elm_calendar.c:397
#, fuzzy
-msgid "calendar decrement year button"
-msgstr "日历减量按钮"
+#~ msgid "calendar decrement year button"
+#~ msgstr "日历减量按钮"
-#: src/lib/elementary/elm_calendar.c:403
-#: src/lib/elementary/efl_ui_calendar.c:273
#, fuzzy
-msgid "calendar increment month button"
-msgstr "日历增量按钮"
+#~ msgid "calendar increment month button"
+#~ msgstr "日历增量按钮"
-#: src/lib/elementary/elm_calendar.c:409
#, fuzzy
-msgid "calendar increment year button"
-msgstr "日历增量按钮"
+#~ msgid "calendar increment year button"
+#~ msgstr "日历增量按钮"
-#: src/lib/elementary/elm_calendar.c:414
-#: src/lib/elementary/efl_ui_calendar.c:278
-msgid "calendar month"
-msgstr "日历月"
+#~ msgid "calendar month"
+#~ msgstr "日历月"
-#: src/lib/elementary/elm_calendar.c:419
#, fuzzy
-msgid "calendar year"
-msgstr "日历条目"
-
-#: src/lib/elementary/efl_ui_check.c:76 src/lib/elementary/efl_ui_check.c:200
-#: src/lib/elementary/efl_ui_radio.c:136 src/lib/elementary/efl_ui_radio.c:202
-msgid "State: On"
-msgstr "状态:开启"
-
-#: src/lib/elementary/efl_ui_check.c:96 src/lib/elementary/efl_ui_check.c:212
-#: src/lib/elementary/efl_ui_radio.c:204
-msgid "State: Off"
-msgstr "状态:关闭"
-
-#: src/lib/elementary/efl_ui_check.c:196 src/lib/elementary/efl_ui_check.c:209
-msgid "State"
-msgstr "状态"
-
-#: src/lib/elementary/efl_ui_check.c:348
-msgid "Check"
-msgstr "检查"
-
-#: src/lib/elementary/elm_clock.c:309
-msgid "clock increment button for am,pm"
-msgstr "上下午的时钟增量按钮"
-
-#: src/lib/elementary/elm_clock.c:317
-msgid "clock decrement button for am,pm"
-msgstr "上下午的时钟减量按钮"
+#~ msgid "calendar year"
+#~ msgstr "日历条目"
-#: src/lib/elementary/elm_clock.c:714
-msgid "State: Editable"
-msgstr "状态:可编辑"
+#~ msgid "State: On"
+#~ msgstr "状态:开启"
-#: src/lib/elementary/elm_clock.c:749
-msgid "Clock"
-msgstr "时钟"
+#~ msgid "State: Off"
+#~ msgstr "状态:关闭"
-#: src/lib/elementary/elm_colorselector.c:939
-msgid "Pick a color"
-msgstr ""
+#~ msgid "State"
+#~ msgstr "状态"
-#: src/lib/elementary/elm_colorselector.c:977
-msgid "R:"
-msgstr ""
+#~ msgid "Check"
+#~ msgstr "检查"
-#: src/lib/elementary/elm_colorselector.c:979
-msgid "G:"
-msgstr ""
+#~ msgid "clock increment button for am,pm"
+#~ msgstr "上下午的时钟增量按钮"
-#: src/lib/elementary/elm_colorselector.c:981
-msgid "B:"
-msgstr ""
+#~ msgid "clock decrement button for am,pm"
+#~ msgstr "上下午的时钟减量按钮"
-#: src/lib/elementary/elm_colorselector.c:983
-msgid "A:"
-msgstr ""
+#~ msgid "State: Editable"
+#~ msgstr "状态:可编辑"
-#: src/lib/elementary/elm_colorselector.c:1707
-msgid "color selector palette item"
-msgstr "色彩选择器项目"
+#~ msgid "Clock"
+#~ msgstr "时钟"
-# Don't change it!
-#. TRANSLATORS: This string is special and defines if the language
-#. by default is a Left To Right or Right To Left language. Most
-#. languages are LTR and thus the default string is "default:LTR"
-#. but if this is a right-to-left language like arabic, Farsi,
-#. Hebrew, etc. then change this string to be "default:RTL"
-#.
-#: src/lib/elementary/elm_config.c:4158
-msgid "default:LTR"
-msgstr "default:LTR"
+#~ msgid "color selector palette item"
+#~ msgstr "色彩选择器项目"
-#: src/lib/elementary/elm_dayselector.c:437
#, fuzzy
-msgid "day selector item"
-msgstr "磁盘选择器项目"
+#~ msgid "day selector item"
+#~ msgstr "磁盘选择器项目"
-#: src/lib/elementary/elm_diskselector.c:701
-msgid "diskselector item"
-msgstr "磁盘选择器项目"
+#~ msgid "diskselector item"
+#~ msgstr "磁盘选择器项目"
-#: src/lib/elementary/elm_entry.c:1749
-msgid "Cut"
-msgstr "粘贴"
+#~ msgid "Cut"
+#~ msgstr "粘贴"
-#: src/lib/elementary/elm_entry.c:1752
-msgid "Copy"
-msgstr "复制"
+#~ msgid "Copy"
+#~ msgstr "复制"
-#: src/lib/elementary/elm_entry.c:1756 src/lib/elementary/elm_entry.c:1778
-msgid "Paste"
-msgstr "粘贴"
+#~ msgid "Paste"
+#~ msgstr "粘贴"
-#: src/lib/elementary/elm_entry.c:1771
-msgid "Select"
-msgstr "选择"
+#~ msgid "Select"
+#~ msgstr "选择"
-#: src/lib/elementary/elm_entry.c:3937
-msgid "Entry"
-msgstr "条目"
+#~ msgid "Entry"
+#~ msgstr "条目"
-#: src/lib/elementary/elm_index.c:95
-msgid "Index"
-msgstr "索引"
+#~ msgid "Index"
+#~ msgstr "索引"
-#: src/lib/elementary/elm_index.c:123
-msgid "Index Item"
-msgstr "索引条目"
+#~ msgid "Index Item"
+#~ msgstr "索引条目"
-#: src/lib/elementary/elm_label.c:403
-msgid "Label"
-msgstr "标签"
+#~ msgid "Label"
+#~ msgstr "标签"
-#: src/lib/elementary/elm_panel.c:84
-msgid "state: opened"
-msgstr "状态:已打开"
+#~ msgid "state: opened"
+#~ msgstr "状态:已打开"
-#: src/lib/elementary/elm_panel.c:85
-msgid "state: closed"
-msgstr "状态:已关闭"
+#~ msgid "state: closed"
+#~ msgstr "状态:已关闭"
-#: src/lib/elementary/elm_panel.c:127
-msgid "A panel is open"
-msgstr ""
+#~ msgid "panel button"
+#~ msgstr "面板按钮"
-#: src/lib/elementary/elm_panel.c:129
-msgid "Double tap to close panel menu"
-msgstr ""
-
-#: src/lib/elementary/elm_panel.c:181
-msgid "panel button"
-msgstr "面板按钮"
-
-#: src/lib/elementary/efl_ui_progressbar.c:397
-msgid "progressbar"
-msgstr "进度条"
+#~ msgid "progressbar"
+#~ msgstr "进度条"
-#: src/lib/elementary/efl_ui_radio.c:231
-msgid "Radio"
-msgstr "无线电"
+#~ msgid "Radio"
+#~ msgstr "无线电"
-#: src/lib/elementary/elm_segment_control.c:528
-#: src/lib/elementary/elm_toolbar.c:2296
-msgid "State: Selected"
-msgstr "状态:已选择"
+#~ msgid "State: Selected"
+#~ msgstr "状态:已选择"
-#: src/lib/elementary/elm_segment_control.c:530
#, fuzzy
-msgid "State: Unselected"
-msgstr "状态:已选择"
-
-#: src/lib/elementary/elm_segment_control.c:544
-msgid "Segment Control Item"
-msgstr ""
+#~ msgid "State: Unselected"
+#~ msgstr "状态:已选择"
-#: src/lib/elementary/efl_ui_slider.c:704
-msgid "slider"
-msgstr "滑块"
-
-#: src/lib/elementary/elm_spinner.c:1071
-msgid "incremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1077
-msgid "decremented"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1110 src/lib/elementary/elm_spinner.c:1177
-msgid "spinner"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1119 src/lib/elementary/elm_spinner.c:1160
-msgid "spinner increment button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1122 src/lib/elementary/elm_spinner.c:1169
-msgid "spinner decrement button"
-msgstr ""
-
-#: src/lib/elementary/elm_spinner.c:1124
-msgid "spinner text"
-msgstr ""
+#~ msgid "slider"
+#~ msgstr "滑块"
-#: src/lib/elementary/elm_toolbar.c:1753 src/lib/elementary/elm_toolbar.c:2355
-msgid "Selected"
-msgstr "已选择"
+#~ msgid "Selected"
+#~ msgstr "已选择"
-#: src/lib/elementary/elm_toolbar.c:2292
-msgid "Separator"
-msgstr "分隔符"
+#~ msgid "Separator"
+#~ msgstr "分隔符"
-#: src/lib/elementary/elm_toolbar.c:2298
-msgid "Has menu"
-msgstr "有菜单"
+#~ msgid "Has menu"
+#~ msgstr "有菜单"
-#: src/lib/elementary/elm_toolbar.c:2350
-msgid "Unselected"
-msgstr "未选择"
+#~ msgid "Unselected"
+#~ msgstr "未选择"
-#: src/lib/elementary/elm_toolbar.c:2367
-msgid "Toolbar Item"
-msgstr "工具栏项目"
+#~ msgid "Toolbar Item"
+#~ msgstr "工具栏项目"
#~ msgid "List Item"
#~ msgstr "列表条目"
diff --git a/scripts/test-efl-one.py b/scripts/test-efl-one.py
new file mode 100755
index 0000000000..ba3e34e63d
--- /dev/null
+++ b/scripts/test-efl-one.py
@@ -0,0 +1,52 @@
+#!/bin/env python3
+import os
+import subprocess
+import argparse
+import json
+from elftools.elf.elffile import ELFFile
+
+
+#meson changed behaviour from 0.49 to 0.50 so we need this:
+def meson_fetch_filename(filename_object):
+ if isinstance(filename_object, str):
+ return filename_object
+ else:
+ return filename_object[0]
+
+
+def needed_libs(filename):
+ print('Processing file:', filename)
+ result = []
+ with open(filename, 'rb') as f:
+ elffile = ELFFile(f)
+ for section in elffile.iter_sections():
+ if section.name.startswith('.dynamic'):
+ for tag in section.iter_tags():
+ if tag.entry.d_tag == 'DT_NEEDED':
+ result.append(getattr(tag, tag.entry.d_tag[3:].lower()))
+ return result
+
+
+parser = argparse.ArgumentParser(description='Check that when build with efl-one that no module nor efl-one lib does drag in libeina or the likes')
+parser.add_argument('builddir', metavar='build', help='the path where to find the meson build directory')
+
+G = parser.parse_args()
+
+#Run meson to fetch all examples
+meson_introspect = subprocess.Popen(["meson", "introspect", G.builddir, "--targets"],
+ stdout = subprocess.PIPE,
+ stderr = subprocess.PIPE,
+)
+meson_introspect.poll()
+build_targets = json.loads(meson_introspect.stdout.read())
+build_modules = [meson_fetch_filename(b["filename"]) for b in build_targets if "modules" in meson_fetch_filename(b["filename"]) and meson_fetch_filename(b["filename"]).endswith('.so')]
+
+for build_modules in build_modules:
+ libs = needed_libs(build_modules)
+ lib_es = [lib for lib in libs if lib.startswith("libe") and lib != "libefl-one.so.1"]
+ if len(lib_es) != 0:
+ print("Error, {} requies lib {}".format(build_modules, lib_es[0]))
+ exit(-1)
+
+print("Nothing wrong found!")
+
diff --git a/src/benchmarks/eina/Ecore_Data.h b/src/benchmarks/eina/Ecore_Data.h
index 6641eff267..e959eb59fc 100644
--- a/src/benchmarks/eina/Ecore_Data.h
+++ b/src/benchmarks/eina/Ecore_Data.h
@@ -69,7 +69,7 @@ extern "C" {
"\t%s();\n\n" \
"\tWith the parameter:\n\n" \
"\t%s\n\n" \
- "\tbeing NULL. Please fix your program.", __FUNCTION__, sparam); \
+ "\tbeing NULL. Please fix your program.", __func__, sparam); \
if (getenv("ECORE_ERROR_ABORT")) { abort(); } \
return ret; \
}
@@ -83,14 +83,14 @@ extern "C" {
"\t%s();\n\n" \
"\tWith the parameter:\n\n" \
"\t%s\n\n" \
- "\tbeing NULL. Please fix your program.", __FUNCTION__, sparam); \
+ "\tbeing NULL. Please fix your program.", __func__, sparam); \
if (getenv("ECORE_ERROR_ABORT")) { abort(); } \
return; \
}
# ifdef __sgi
-# define __FUNCTION__ "unknown"
+# define __func__ "unknown"
# ifndef __cplusplus
# define inline
# endif
@@ -299,76 +299,6 @@ EAPI int ecore_dlist_free_cb_set(Ecore_DList *dlist,
Ecore_Free_Cb free_func);
-
-/*
- * Hash Table Implementation:
- *
- * Traditional hash table implementation. I had tried a list of tables
- * approach to save on the realloc's but it ended up being much slower than
- * the traditional approach.
- */
-
-typedef struct _ecore_hash_node Ecore_Hash_Node;
-# define ECORE_HASH_NODE(hash) ((Ecore_Hash_Node *)hash)
-
-struct _ecore_hash_node
-{
- Ecore_Hash_Node *next; /* Pointer to the next node in the bucket list */
- void *key; /* The key for the data node */
- void *value; /* The value associated with this node */
-};
-
-typedef struct _ecore_hash Ecore_Hash;
-# define ECORE_HASH(hash) ((Ecore_Hash *)hash)
-
-struct _ecore_hash
-{
- Ecore_Hash_Node **buckets;
- int size; /* An index into the table of primes to
- determine size */
- int nodes; /* The number of nodes currently in the hash */
-
- int index; /* The current index into the bucket table */
-
- Ecore_Compare_Cb compare; /* The function used to compare node values */
- Ecore_Hash_Cb hash_func; /* The callback function to determine hash */
-
- Ecore_Free_Cb free_key; /* The callback function to free key */
- Ecore_Free_Cb free_value; /* The callback function to free value */
-};
-
-/* Create and initialize a hash */
-EAPI Ecore_Hash *ecore_hash_new(Ecore_Hash_Cb hash_func,
- Ecore_Compare_Cb compare);
-EAPI int ecore_hash_init(Ecore_Hash *hash,
- Ecore_Hash_Cb hash_func,
- Ecore_Compare_Cb compare);
-
-/* Functions related to freeing the data in the hash table */
-EAPI int ecore_hash_free_key_cb_set(Ecore_Hash *hash,
- Ecore_Free_Cb function);
-EAPI int ecore_hash_free_value_cb_set(Ecore_Hash *hash,
- Ecore_Free_Cb function);
-EAPI void ecore_hash_destroy(Ecore_Hash *hash);
-
-EAPI int ecore_hash_count(Ecore_Hash *hash);
-EAPI int ecore_hash_for_each_node(Ecore_Hash *hash,
- Ecore_For_Each for_each_func,
- void *user_data);
-EAPI Ecore_List *ecore_hash_keys(Ecore_Hash *hash);
-
-/* Retrieve and store data into the hash */
-EAPI void * ecore_hash_get(Ecore_Hash *hash, const void *key);
-EAPI int ecore_hash_set(Ecore_Hash *hash, void *key, void *value);
-EAPI int ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set);
-EAPI void * ecore_hash_remove(Ecore_Hash *hash, const void *key);
-EAPI void * ecore_hash_find(Ecore_Hash *hash,
- Ecore_Compare_Cb compare,
- const void *value);
-EAPI void ecore_hash_dump_graph(Ecore_Hash *hash);
-EAPI void ecore_hash_dump_stats(Ecore_Hash *hash);
-
-
typedef struct _ecore_heap Ecore_Sheap;
# define ECORE_HEAP(heap) ((Ecore_Sheap *)heap)
@@ -415,11 +345,6 @@ struct _ecore_string
int references;
};
-EAPI int ecore_string_init();
-EAPI int ecore_string_shutdown();
-EAPI const char *ecore_string_instance(const char *string);
-EAPI void ecore_string_release(const char *string);
-
typedef struct _Ecore_Tree_Node Ecore_Tree_Node;
# define ECORE_TREE_NODE(object) ((Ecore_Tree_Node *)object)
struct _Ecore_Tree_Node
diff --git a/src/benchmarks/eina/city.h b/src/benchmarks/eina/city.h
index 90849a1dc6..3a2b06e26a 100644
--- a/src/benchmarks/eina/city.h
+++ b/src/benchmarks/eina/city.h
@@ -53,6 +53,13 @@ typedef uint32_t uint32;
typedef uint64_t uint64;
typedef std::pair<uint64, uint64> uint128;
+// Hash function for a byte array.
+uint128 CityHash128(const char *s, size_t len);
+
+// Hash function for a byte array. For convenience, a 128-bit seed is also
+// hashed into the result.
+uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed);
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -71,13 +78,6 @@ uint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed);
uint64 CityHash64WithSeeds(const char *buf, size_t len,
uint64 seed0, uint64 seed1);
-// Hash function for a byte array.
-uint128 CityHash128(const char *s, size_t len);
-
-// Hash function for a byte array. For convenience, a 128-bit seed is also
-// hashed into the result.
-uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed);
-
// Hash 128 input bits down to 64 bits of output.
// This is intended to be a reasonably good hash function.
inline uint64 Hash128to64(const uint128& x) {
diff --git a/src/benchmarks/eina/ecore_hash.c b/src/benchmarks/eina/ecore_hash.c
deleted file mode 100644
index ae9befa6b5..0000000000
--- a/src/benchmarks/eina/ecore_hash.c
+++ /dev/null
@@ -1,949 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "Ecore_Data.h"
-
-#define PRIME_TABLE_MAX 21
-#define PRIME_MIN 17
-#define PRIME_MAX 16777213
-
-#define ECORE_HASH_CHAIN_MAX 3
-
-#define ECORE_COMPUTE_HASH(hash, key) hash->hash_func(key) % \
- ecore_prime_table[hash->size];
-
-#define ECORE_HASH_INCREASE(hash) ((hash && ecore_prime_table[hash->size] < \
- PRIME_MAX) ? \
- (hash->nodes / \
- ecore_prime_table[hash->size]) > \
- ECORE_HASH_CHAIN_MAX : FALSE)
-#define ECORE_HASH_REDUCE(hash) ((hash && ecore_prime_table[hash->size] > \
- PRIME_MIN) ? \
- (double)hash->nodes / \
- (double)ecore_prime_table[hash->size - 1] \
- < ((double)ECORE_HASH_CHAIN_MAX * \
- 0.375) : FALSE)
-
-
-static const unsigned int ecore_prime_table[] =
-{
- 17, 31, 61, 127, 257, 509, 1021,
- 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573,
- 2097143, 4194301, 8388617, 16777213
-};
-
-
-/* Private hash manipulation functions */
-static int _ecore_hash_node_add(Ecore_Hash *hash,
- Ecore_Hash_Node *node);
-static Ecore_Hash_Node * _ecore_hash_node_get(Ecore_Hash *hash,
- const void *key);
-static int _ecore_hash_increase(Ecore_Hash *hash);
-static int _ecore_hash_decrease(Ecore_Hash *hash);
-static inline int _ecore_hash_rehash(Ecore_Hash *hash,
- Ecore_Hash_Node **old_table,
- int old_size);
-static int _ecore_hash_bucket_destroy(Ecore_Hash_Node *list,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued);
-static inline Ecore_Hash_Node *_ecore_hash_bucket_get(Ecore_Hash *hash,
- Ecore_Hash_Node *bucket,
- const void *key);
-
-static Ecore_Hash_Node * _ecore_hash_node_new(void *key, void *value);
-static int _ecore_hash_node_init(Ecore_Hash_Node *node,
- void *key,
- void *value);
-static int _ecore_hash_node_destroy(Ecore_Hash_Node *node,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued);
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Creation_Group Hash Creation Functions
- *
- * Functions that create hash tables.
- */
-
-/**
- * Creates and initializes a new hash
- * @param hash_func The function for determining hash position.
- * @param compare The function for comparing node keys.
- * @return @c NULL on error, a new hash on success.
- * @ingroup Ecore_Data_Hash_ADT_Creation_Group
- */
-EAPI Ecore_Hash *
-ecore_hash_new(Ecore_Hash_Cb hash_func, Ecore_Compare_Cb compare)
-{
- Ecore_Hash *new_hash = (Ecore_Hash *)malloc(sizeof(Ecore_Hash));
- if (!new_hash)
- return NULL;
-
- if (!ecore_hash_init(new_hash, hash_func, compare))
- {
- FREE(new_hash);
- return NULL;
- }
-
- return new_hash;
-}
-
-/**
- * Initializes the given hash.
- * @param hash The given hash.
- * @param hash_func The function used for hashing node keys.
- * @param compare The function used for comparing node keys.
- * @return @c TRUE on success, @c FALSE on an error.
- * @ingroup Ecore_Data_Hash_ADT_Creation_Group
- */
-EAPI int
-ecore_hash_init(Ecore_Hash *hash,
- Ecore_Hash_Cb hash_func,
- Ecore_Compare_Cb compare)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- memset(hash, 0, sizeof(Ecore_Hash));
-
- hash->hash_func = hash_func;
- hash->compare = compare;
-
- hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[0],
- sizeof(Ecore_Hash_Node *));
-
- return TRUE;
-}
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Destruction_Group Hash Destruction Functions
- *
- * Functions that destroy hash tables and their contents.
- */
-
-/**
- * Sets the function to destroy the keys of the given hash.
- * @param hash The given hash.
- * @param function The function used to free the node keys. NULL is a
- * valid value and means that no function will be called.
- * @return @c TRUE on success, @c FALSE on error.
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI int
-ecore_hash_free_key_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- hash->free_key = function;
-
- return TRUE;
-}
-
-/**
- * Sets the function to destroy the values in the given hash.
- * @param hash The given hash.
- * @param function The function that will free the node values. NULL is a
- * valid value and means that no function will be called.
- * @return @c TRUE on success, @c FALSE on error
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI int
-ecore_hash_free_value_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- hash->free_value = function;
-
- return TRUE;
-}
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Data_Group Hash Data Functions
- *
- * Functions that set, access and delete values from the hash tables.
- */
-
-/**
- * Sets a key-value pair in the given hash table.
- * @param hash The given hash table.
- * @param key The key.
- * @param value The value.
- * @return @c TRUE if successful, @c FALSE if not.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI int
-ecore_hash_set(Ecore_Hash *hash, void *key, void *value)
-{
- int ret = FALSE;
- Ecore_Hash_Node *node;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- node = _ecore_hash_node_get(hash, key);
- if (node)
- {
- if (hash->free_key)
- hash->free_key(key);
-
- if (node->value && hash->free_value)
- hash->free_value(node->value);
-
- node->value = value;
- ret = TRUE;
- }
- else
- {
- node = _ecore_hash_node_new(key, value);
- if (node)
- ret = _ecore_hash_node_add(hash, node);
- }
-
- return ret;
-}
-
-/**
- * Sets all key-value pairs from set in the given hash table.
- * @param hash The given hash table.
- * @param set The hash table to import.
- * @return @c TRUE if successful, @c FALSE if not.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI int
-ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set)
-{
- unsigned int i;
- Ecore_Hash_Node *node, *old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("set", set, FALSE);
-
- for (i = 0; i < ecore_prime_table[set->size]; i++)
- {
- /* Hash into a new list to avoid loops of rehashing the same nodes */
- while ((old = set->buckets[i]))
- {
- set->buckets[i] = old->next;
- old->next = NULL;
- node = _ecore_hash_node_get(hash, old->key);
- if (node)
- {
- /* This key already exists. Delete the old and add the new
- * value */
- if (hash->free_key)
- hash->free_key(node->key);
-
- if (hash->free_value)
- hash->free_value(node->value);
-
- node->key = old->key;
- node->value = old->value;
- free(old);
- }
- else
- _ecore_hash_node_add(hash, old);
- }
- }
- FREE(set->buckets);
- ecore_hash_init(set, set->hash_func, set->compare);
- return TRUE;
-}
-
-/**
- * @brief Frees the hash table and the data contained inside it.
- * @param hash: The hash table to destroy.
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI void
-ecore_hash_destroy(Ecore_Hash *hash)
-{
- unsigned int i = 0;
-
- CHECK_PARAM_POINTER("hash", hash);
-
- if (hash->buckets)
- {
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *bucket;
-
- /*
- * Remove the bucket list to avoid possible recursion
- * on the free callbacks.
- */
- bucket = hash->buckets[i];
- hash->buckets[i] = NULL;
- _ecore_hash_bucket_destroy(bucket,
- hash->free_key,
- hash->free_value);
- }
-
- i++;
- }
-
- FREE(hash->buckets);
- }
-
- FREE(hash);
-
- return;
-}
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Traverse_Group Hash Traverse Functions
- *
- * Functions that iterate through hash tables.
- */
-
-/**
- * Counts the number of nodes in a hash table.
- * @param hash The hash table to count current nodes.
- * @return The number of nodes in the hash.
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI int
-ecore_hash_count(Ecore_Hash *hash)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, 0);
-
- return hash->nodes;
-}
-
-/**
- * Runs the @p for_each_func function on each entry in the given hash.
- * @param hash The given hash.
- * @param for_each_func The function that each entry is passed to.
- * @param user_data a pointer passed to calls of for_each_func
- * @return TRUE on success, FALSE otherwise.
- * @ingroup Ecore_Data_Hash_ADT_Traverse_Group
- */
-EAPI int
-ecore_hash_for_each_node(Ecore_Hash *hash,
- Ecore_For_Each for_each_func,
- void *user_data)
-{
- unsigned int i = 0;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("for_each_func", for_each_func, FALSE);
-
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *node;
-
- for (node = hash->buckets[i]; node; node = node->next)
- {
- for_each_func(node, user_data);
- }
- }
-
- i++;
- }
-
- return TRUE;
-}
-
-/**
- * Retrieves an ecore_list of all keys in the given hash.
- * @param hash The given hash.
- * @return new ecore_list on success, NULL otherwise
- * @ingroup Ecore_Data_Hash_ADT_Traverse_Group
- */
-EAPI Ecore_List *
-ecore_hash_keys(Ecore_Hash *hash)
-{
- unsigned int i = 0;
- Ecore_List *keys;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- keys = ecore_list_new();
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *node;
-
- for (node = hash->buckets[i]; node; node = node->next)
- {
- ecore_list_append(keys, node->key);
- }
- }
-
- i++;
- }
- ecore_list_first_goto(keys);
-
- return keys;
-}
-
-/**
- * Prints the distribution of the given hash table for graphing.
- * @param hash The given hash table.
- */
-EAPI void
-ecore_hash_dump_graph(Ecore_Hash *hash)
-{
- unsigned int i;
-
- for (i = 0; i < ecore_prime_table[hash->size]; i++)
- if (hash->buckets[i])
- {
- unsigned int n = 0;
- Ecore_Hash_Node *node;
- for (node = hash->buckets[i]; node; node = node->next)
- n++;
- printf("%u\t%u", i, n);
- }
- else
- printf("%u\t0", i);
-
-}
-
-/**
- * Prints the distribution of the given hash table for graphing.
- * @param hash The given hash table.
- */
-EAPI void
-ecore_hash_dump_stats(Ecore_Hash *hash)
-{
- unsigned int i;
- double variance, sum_n_2 = 0, sum_n = 0;
-
- if (!hash->size) return;
- for (i = 0; i < ecore_prime_table[hash->size]; i++)
- {
- if (hash->buckets[i])
- {
- int n = 0;
- Ecore_Hash_Node *node;
- for (node = hash->buckets[i]; node; node = node->next)
- n++;
- sum_n_2 += ((double)n * (double)n);
- sum_n += (double)n;
- }
- }
- variance = (sum_n_2 - ((sum_n * sum_n) / (double)i)) / (double)i;
- printf("Average length: %f\n\tvariance^2: %f", (sum_n / (double)i),
- variance);
-}
-
-static int
-_ecore_hash_bucket_destroy(Ecore_Hash_Node *list,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued)
-{
- Ecore_Hash_Node *node;
-
- CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
-
- for (node = list; node; node = list)
- {
- list = list->next;
- _ecore_hash_node_destroy(node, keyd, valued);
- }
-
- return TRUE;
-}
-
-/*
- * @brief Add the node to the hash table
- * @param hash: the hash table to add the key
- * @param node: the node to add to the hash table
- * @return Returns FALSE on error, TRUE on success
- */
-static int
-_ecore_hash_node_add(Ecore_Hash *hash, Ecore_Hash_Node *node)
-{
- size_t hash_val;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
-
- /* Check to see if the hash needs to be resized */
- if (ECORE_HASH_INCREASE(hash))
- _ecore_hash_increase(hash);
-
- /* Compute the position in the table */
- if (!hash->hash_func)
- hash_val = (size_t)node->key % ecore_prime_table[hash->size];
- else
- hash_val = ECORE_COMPUTE_HASH(hash, node->key);
-
- /* Prepend the node to the list at the index position */
- node->next = hash->buckets[hash_val];
- hash->buckets[hash_val] = node;
- hash->nodes++;
-
- return TRUE;
-}
-
-/**
- * Retrieves the value associated with the given key from the given hash
- * table.
- * @param hash The given hash table.
- * @param key The key to search for.
- * @return The value corresponding to key on success, @c NULL otherwise.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI void *
-ecore_hash_get(Ecore_Hash *hash, const void *key)
-{
- void *data;
- Ecore_Hash_Node *node;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- node = _ecore_hash_node_get(hash, key);
- if (!node)
- return NULL;
-
- data = node->value;
-
- return data;
-}
-
-/**
- * Removes the value associated with the given key in the given hash
- * table.
- * @param hash The given hash table.
- * @param key The key to search for.
- * @return The value corresponding to the key on success. @c NULL is
- * returned if there is an error.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI void *
-ecore_hash_remove(Ecore_Hash *hash, const void *key)
-{
- Ecore_Hash_Node *node = NULL;
- Ecore_Hash_Node *list;
- size_t hash_val;
- void *ret = NULL;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- /* Compute the position in the table */
- if (!hash->hash_func)
- hash_val = (size_t)key % ecore_prime_table[hash->size];
- else
- hash_val = ECORE_COMPUTE_HASH(hash, key);
-
- /*
- * If their is a list that could possibly hold the key/value pair
- * traverse it and remove the hash node.
- */
- if (hash->buckets[hash_val])
- {
- list = hash->buckets[hash_val];
-
- /*
- * Traverse the list to find the specified key
- */
- node = list;
- if (hash->compare)
- while ((node) && (hash->compare(node->key, key) != 0))
- {
- list = node;
- node = node->next;
- }
- else
- while ((node) && (node->key != key))
- {
- list = node;
- node = node->next;
- }
-
- /*
- * Remove the node with the matching key and free it's memory
- */
- if (node)
- {
- if (list == node)
- hash->buckets[hash_val] = node->next;
- else
- list->next = node->next;
-
- ret = node->value;
- node->value = NULL;
- _ecore_hash_node_destroy(node, hash->free_key, NULL);
- hash->nodes--;
- }
- }
-
- if (ECORE_HASH_REDUCE(hash))
- _ecore_hash_decrease(hash);
-
- return ret;
-}
-
-/**
- * Retrieves the first value that matches
- * table.
- * @param hash The given hash table.
- * @param key The key to search for.
- * @return The value corresponding to key on success, @c NULL otherwise.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI void *
-ecore_hash_find(Ecore_Hash *hash, Ecore_Compare_Cb compare, const void *value)
-{
- unsigned int i = 0;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
- CHECK_PARAM_POINTER_RETURN("compare", compare, NULL);
- CHECK_PARAM_POINTER_RETURN("value", value, NULL);
-
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *node;
-
- for (node = hash->buckets[i]; node; node = node->next)
- {
- if (!compare(node->value, value))
- return node->value;
- }
- }
-
- i++;
- }
-
- return NULL;
-}
-
-/*
- * @brief Retrieve the node associated with key
- * @param hash: the hash table to search for the key
- * @param key: the key to search for in the hash table
- * @return Returns NULL on error, node corresponding to key on success
- */
-static Ecore_Hash_Node *
-_ecore_hash_node_get(Ecore_Hash *hash, const void *key)
-{
- size_t hash_val;
- Ecore_Hash_Node *node = NULL;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- if (!hash->buckets)
- return NULL;
-
- /* Compute the position in the table */
- if (!hash->hash_func)
- hash_val = (size_t)key % ecore_prime_table[hash->size];
- else
- hash_val = ECORE_COMPUTE_HASH(hash, key);
-
- /* Grab the bucket at the specified position */
- if (hash->buckets[hash_val])
- {
- node = _ecore_hash_bucket_get(hash, hash->buckets[hash_val], key);
- /*
- * Move matched node to the front of the list as it's likely
- * to be searched for again soon.
- */
- if (node && node != hash->buckets[hash_val])
- {
- node->next = hash->buckets[hash_val];
- hash->buckets[hash_val] = node;
- }
- }
-
- return node;
-}
-
-/*
- * @brief Search the hash bucket for a specified key
- * @param hash: the hash table to retrieve the comparison function
- * @param bucket: the list to search for the key
- * @param key: the key to search for in the list
- * @return Returns NULL on error or not found, the found node on success
- */
-static inline Ecore_Hash_Node *
-_ecore_hash_bucket_get(Ecore_Hash *hash,
- Ecore_Hash_Node *bucket,
- const void *key)
-{
- Ecore_Hash_Node *prev = NULL;
- Ecore_Hash_Node *node = NULL;
-
- /*
- * Traverse the list to find the desired node, if the node is in the
- * list, then return the node.
- */
- if (hash->compare)
- for (node = bucket; node; node = node->next)
- {
- if (hash->compare(node->key, key) == 0)
- break;
-
- prev = node;
- }
- else
- for (node = bucket; node; node = node->next)
- {
- if (node->key == key)
- break;
-
- prev = node;
- }
-
- /*
- * Remove node from the list to replace it at the beginning.
- */
- if (node && prev)
- {
- prev->next = node->next;
- node->next = NULL;
- }
-
- return node;
-}
-
-/*
- * @brief Increase the size of the hash table by approx. 2 * current size
- * @param hash: the hash table to increase the size of
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_increase(Ecore_Hash *hash)
-{
- void *old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- /* Max size reached so return FALSE */
- if ((ecore_prime_table[hash->size] == PRIME_MAX) ||
- (hash->size == PRIME_TABLE_MAX))
- return FALSE;
-
- /*
- * Increase the size of the hash and save a pointer to the old data
- */
- hash->size++;
- old = hash->buckets;
-
- /*
- * Allocate a new bucket area, of the new larger size
- */
- hash->buckets =
- calloc(ecore_prime_table[hash->size], sizeof(Ecore_Hash_Node *));
-
- /*
- * Make sure the allocation succeeded, if not replace the old data and
- * return a failure.
- */
- if (!hash->buckets)
- {
- hash->buckets = old;
- hash->size--;
- return FALSE;
- }
-
- hash->nodes = 0;
-
- /*
- * Now move all of the old data into the new bucket area
- */
- if (_ecore_hash_rehash(hash, old, hash->size - 1))
- {
- FREE(old);
- return TRUE;
- }
-
- /*
- * Free the old buckets regardless of success.
- */
- FREE(old);
-
- return FALSE;
-}
-
-/*
- * @brief Decrease the size of the hash table by < 1/2 * current size
- * @param hash: the hash table to decrease the size of
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_decrease(Ecore_Hash *hash)
-{
- Ecore_Hash_Node **old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- if (ecore_prime_table[hash->size] == PRIME_MIN)
- return FALSE;
-
- /*
- * Decrease the hash size and store a pointer to the old data
- */
- hash->size--;
- old = hash->buckets;
-
- /*
- * Allocate a new area to store the data
- */
- hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[hash->size],
- sizeof(Ecore_Hash_Node *));
-
- /*
- * Make sure allocation succeeded otherwise rreturn to the previous
- * state
- */
- if (!hash->buckets)
- {
- hash->buckets = old;
- hash->size++;
- return FALSE;
- }
-
- hash->nodes = 0;
-
- if (_ecore_hash_rehash(hash, old, hash->size + 1))
- {
- FREE(old);
- return TRUE;
- }
-
- return FALSE;
-}
-
-/*
- * @brief Rehash the nodes of a table into the hash table
- * @param hash: the hash to place the nodes of the table
- * @param table: the table to remove the nodes from and place in hash
- * @return Returns TRUE on success, FALSE on error
- */
-static inline int
-_ecore_hash_rehash(Ecore_Hash *hash, Ecore_Hash_Node **old_table, int old_size)
-{
- unsigned int i;
- Ecore_Hash_Node *old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("old_table", old_table, FALSE);
-
- for (i = 0; i < ecore_prime_table[old_size]; i++)
- {
- /* Hash into a new list to avoid loops of rehashing the same nodes */
- while ((old = old_table[i]))
- {
- old_table[i] = old->next;
- old->next = NULL;
- _ecore_hash_node_add(hash, old);
- }
- }
-
- return TRUE;
-}
-
-/*
- * @brief Create a new hash node for key and value storage
- * @param key: the key for this node
- * @param value: the value that the key references
- * @return Returns NULL on error, a new hash node on success
- */
-static Ecore_Hash_Node *
-_ecore_hash_node_new(void *key, void *value)
-{
- Ecore_Hash_Node *node;
-
- node = (Ecore_Hash_Node *)malloc(sizeof(Ecore_Hash_Node));
- if (!node)
- return NULL;
-
- if (!_ecore_hash_node_init(node, key, value))
- {
- FREE(node);
- return NULL;
- }
-
- return node;
-}
-
-/*
- * @brief Initialize a hash node to some sane default values
- * @param node: the node to set the values
- * @param key: the key to reference this node
- * @param value: the value that key refers to
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_node_init(Ecore_Hash_Node *node, void *key, void *value)
-{
- CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
-
- node->key = key;
- node->value = value;
-
- return TRUE;
-}
-
-/*
- * @brief Destroy a node and call the specified callbacks to free data
- * @param node: the node to be destroyed
- * @param keyd: the function to free the key
- * @param valued: the function to free the value
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_node_destroy(Ecore_Hash_Node *node,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued)
-{
- CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
-
- if (keyd)
- keyd(node->key);
-
- if (valued)
- valued(node->value);
-
- FREE(node);
-
- return TRUE;
-}
-
-int
-ecore_str_compare(const void *key1, const void *key2)
-{
- const char *k1, *k2;
-
- if (!key1 || !key2)
- return ecore_direct_compare(key1, key2);
- else if (key1 == key2)
- return 0;
-
- k1 = key1;
- k2 = key2;
-
- return strcmp(k1, k2);
-}
-
-unsigned int
-ecore_str_hash(const void *key)
-{
- int i;
- unsigned int mask;
- unsigned int value = 0;
- const char *k = key;
-
- if (!k)
- return 0;
-
- mask = (sizeof(unsigned int) * 8) - 1;
-
- for (i = 0; k[i] != '\0'; i++)
- {
- value ^= ((unsigned int)k[i] << ((i * 5) & mask));
- }
-
- return value;
-}
diff --git a/src/benchmarks/eina/ecore_strings.c b/src/benchmarks/eina/ecore_strings.c
deleted file mode 100644
index e56235226c..0000000000
--- a/src/benchmarks/eina/ecore_strings.c
+++ /dev/null
@@ -1,164 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-
-#include "Ecore_Data.h"
-
-static void ecore_string_free_cb(void *data);
-
-static Ecore_Hash *ecore_strings = NULL;
-static int ecore_string_init_count = 0;
-
-/**
- * @defgroup Ecore_String_Group String Instance Functions
- *
- * These functions allow you to store one copy of a string, and use it
- * throughout your program.
- *
- * This is a method to reduce the number of duplicated strings kept in
- * memory. It's pretty common for the same strings to be dynamically
- * allocated repeatedly between applications and libraries, especially in
- * circumstances where you could have multiple copies of a structure that
- * allocates the string. So rather than duplicating and freeing these
- * strings, you request a read-only pointer to an existing string and
- * only incur the overhead of a hash lookup.
- *
- * It sounds like micro-optimizing, but profiling has shown this can have
- * a significant impact as you scale the number of copies up. It improves
- * string creation/destruction speed, reduces memory use and decreases
- * memory fragmentation, so a win all-around.
- */
-
-/**
- * Initialize the ecore string internal structure.
- * @return Zero on failure, non-zero on successful initialization.
- */
-EAPI int
-ecore_string_init(void)
-{
- /*
- * No strings have been loaded at this point, so create the hash
- * table for storing string info for later.
- */
- if (!ecore_string_init_count)
- {
- ecore_strings = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- if (!ecore_strings)
- return 0;
-
- ecore_hash_free_value_cb_set(ecore_strings, ecore_string_free_cb);
- }
-
- ecore_string_init_count++;
-
- return 1;
-}
-
-/**
- * Retrieves an instance of a string for use in an ecore program.
- * @param string The string to retrieve an instance of.
- * @return A pointer to an instance of the string on success.
- * @c NULL on failure.
- * @ingroup Ecore_String_Group
- */
-EAPI const char *
-ecore_string_instance(const char *string)
-{
- Ecore_String *str;
-
- CHECK_PARAM_POINTER_RETURN("string", string, NULL);
-
- /*
- * Check for a previous instance of the string, if not found, create
- * it.
- */
- str = ecore_hash_get(ecore_strings, string);
- if (!str)
- {
- int length;
-
- /*
- * Allocate and initialize a new string reference.
- */
- length = strlen(string) + 1;
-
- str =
- (Ecore_String *)malloc(sizeof(Ecore_String) + length * sizeof(char));
- if (!str) return NULL;
-
- str->string = (char *)(str + 1);
- str->references = 0;
-
- memcpy(str->string, string, length);
-
- ecore_hash_set(ecore_strings, str->string, str);
- }
-
- str->references++;
-
- return str->string;
-}
-
-/**
- * Notes that the given string has lost an instance.
- *
- * It will free the string if no other instances are left.
- *
- * @param string The given string.
- * @ingroup Ecore_String_Group
- */
-EAPI void
-ecore_string_release(const char *string)
-{
- Ecore_String *str;
-
- CHECK_PARAM_POINTER("string", string);
-
- str = ecore_hash_get(ecore_strings, (char *)string);
- if (!str)
- return;
-
- str->references--;
- if (str->references < 1)
- {
- ecore_hash_remove(ecore_strings, (char *)string);
- FREE(str);
- }
-}
-
-EAPI void
-ecore_string_hash_dump_graph(void)
-{
- ecore_hash_dump_graph(ecore_strings);
-}
-
-EAPI void
-ecore_string_hash_dump_stats(void)
-{
- ecore_hash_dump_stats(ecore_strings);
-}
-
-/**
- * Shutdown the ecore string internal structures
- * @return 0 when the module is completely shut down, 1 or
- * greater otherwise.
- */
-EAPI int
-ecore_string_shutdown(void)
-{
- --ecore_string_init_count;
- if (!ecore_string_init_count)
- {
- ecore_hash_destroy(ecore_strings);
- ecore_strings = NULL;
- }
- return ecore_string_init_count;
-}
-
-static void
-ecore_string_free_cb(void *data)
-{
- Ecore_String *str;
-
- str = data;
- FREE(str);
-}
diff --git a/src/benchmarks/eina/eina_bench.c b/src/benchmarks/eina/eina_bench.c
index 1ca7e51c18..5d758485f6 100644
--- a/src/benchmarks/eina/eina_bench.c
+++ b/src/benchmarks/eina/eina_bench.c
@@ -36,7 +36,6 @@ struct _Eina_Benchmark_Case
};
static const Eina_Benchmark_Case etc[] = {
- { "Hash", eina_bench_hash, EINA_TRUE },
{ "Hash_Short_Key", eina_bench_crc_hash_short, EINA_TRUE },
{ "Hash_Medium_Key", eina_bench_crc_hash_medium, EINA_TRUE },
{ "Hash_Large_key", eina_bench_crc_hash_large, EINA_TRUE },
@@ -129,8 +128,6 @@ main(int argc, char **argv)
break;
}
- eina_bench_e17();
-
eina_shutdown();
_mempool_shutdown();
diff --git a/src/benchmarks/eina/eina_bench.h b/src/benchmarks/eina/eina_bench.h
index a38d70433e..053bbba793 100644
--- a/src/benchmarks/eina/eina_bench.h
+++ b/src/benchmarks/eina/eina_bench.h
@@ -21,7 +21,7 @@
#include "eina_benchmark.h"
-int key_size;
+extern int key_size;
void eina_bench_hash(Eina_Benchmark *bench);
void eina_bench_crc_hash_short(Eina_Benchmark *bench);
@@ -36,7 +36,4 @@ void eina_bench_rectangle_pool(Eina_Benchmark *bench);
void eina_bench_quadtree(Eina_Benchmark *bench);
void eina_bench_promise(Eina_Benchmark *bench);
-/* Specific benchmark. */
-void eina_bench_e17(void);
-
#endif
diff --git a/src/benchmarks/eina/eina_bench_array.c b/src/benchmarks/eina/eina_bench_array.c
index dc04eaf0b2..28e2a37da8 100644
--- a/src/benchmarks/eina/eina_bench_array.c
+++ b/src/benchmarks/eina/eina_bench_array.c
@@ -67,8 +67,6 @@ eina_bench_array_4evas_render_inline(int request)
unsigned int i;
unsigned int j;
- srand(time(NULL));
-
eina_init();
array = eina_array_new(64);
@@ -133,8 +131,6 @@ eina_bench_array_4evas_render_iterator(int request)
unsigned int i;
unsigned int j;
- srand(time(NULL));
-
eina_init();
array = eina_array_new(64);
diff --git a/src/benchmarks/eina/eina_bench_convert.c b/src/benchmarks/eina/eina_bench_convert.c
index aafe9ea3ba..820bbcc3fe 100644
--- a/src/benchmarks/eina/eina_bench_convert.c
+++ b/src/benchmarks/eina/eina_bench_convert.c
@@ -38,8 +38,6 @@ eina_bench_convert_itoa_10(int request)
char tmp[128];
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
eina_convert_itoa(rand(), tmp);
@@ -52,8 +50,6 @@ eina_bench_convert_itoa_16(int request)
char tmp[128];
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
eina_convert_xtoa(rand(), tmp);
@@ -66,8 +62,6 @@ eina_bench_convert_snprintf_10(int request)
char tmp[128];
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
snprintf(tmp, 128, "%i", rand());
@@ -80,8 +74,6 @@ eina_bench_convert_snprintf_x(int request)
char tmp[128];
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
snprintf(tmp, 128, "%x", rand());
@@ -95,8 +87,6 @@ eina_bench_convert_snprintf_a(int request)
double r;
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
r = 10000 * (rand() / ((double)RAND_MAX + 1));
@@ -109,13 +99,11 @@ static void
eina_bench_convert_dtoa(int request)
{
char tmp[128];
- long long m;
- long e;
+ long long m = 0;
+ long e = 0;
double r;
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
r = 10000 * (rand() / ((double)RAND_MAX + 1));
@@ -133,8 +121,6 @@ eina_bench_convert_gstrtod(int request)
double r;
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
r = 10000 * (rand() / ((double)RAND_MAX + 1));
diff --git a/src/benchmarks/eina/eina_bench_crc_hash.c b/src/benchmarks/eina/eina_bench_crc_hash.c
index b6734489a3..7750233ed4 100644
--- a/src/benchmarks/eina/eina_bench_crc_hash.c
+++ b/src/benchmarks/eina/eina_bench_crc_hash.c
@@ -26,6 +26,7 @@
uint64_t CityHash64(const char *buf, size_t len);
#endif
+int key_size;
char *key_str=NULL;
void repchar(int n)
diff --git a/src/benchmarks/eina/eina_bench_hash.c b/src/benchmarks/eina/eina_bench_hash.c
deleted file mode 100644
index 96748183e0..0000000000
--- a/src/benchmarks/eina/eina_bench_hash.c
+++ /dev/null
@@ -1,551 +0,0 @@
-/* EINA - EFL data type library
- * Copyright (C) 2008 Cedric Bail
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library;
- * if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-#ifdef EINA_BENCH_HAVE_GLIB
-# include <glib.h>
-#endif
-
-#include "Evas_Data.h"
-#include "Ecore_Data.h"
-
-#include "eina_hash.h"
-#include "eina_array.h"
-#include "eina_bench.h"
-#include "eina_rbtree.h"
-#include "eina_convert.h"
-
-#ifdef CITYHASH_BENCH
-// Hash function for a byte array.
-uint64_t CityHash64(const char *buf, size_t len);
-
-static int
-city_hash(const char *buf, int len)
-{
- return (int)CityHash64(buf, len);
-}
-
-static unsigned int
-_eina_string_key_length(const char *key)
-{
- if (!key)
- return 0;
-
- return (int)strlen(key) + 1;
-}
-
-static int
-_eina_string_key_cmp(const char *key1, EINA_UNUSED int key1_length,
- const char *key2, EINA_UNUSED int key2_length)
-{
- return strcmp(key1, key2);
-}
-#endif
-
-
-typedef struct _Eina_Bench_Rbtree Eina_Bench_Rbtree;
-struct _Eina_Bench_Rbtree
-{
- Eina_Rbtree node;
- char key[10];
- int value;
-};
-
-static Eina_Rbtree_Direction
-_eina_bench_rbtree_cmp(const Eina_Bench_Rbtree *left,
- const Eina_Bench_Rbtree *right,
- EINA_UNUSED void *data)
-{
- if (!left)
- return EINA_RBTREE_RIGHT;
-
- if (!right)
- return EINA_RBTREE_LEFT;
-
- return strcmp(left->key,
- right->key) < 0 ? EINA_RBTREE_LEFT : EINA_RBTREE_RIGHT;
-}
-
-static inline int
-_eina_bench_rbtree_key(const Eina_Bench_Rbtree *node,
- const char *key,
- int length,
- EINA_UNUSED void *data)
-{
- return strncmp(node->key, key, length);
-}
-
-static void
-_eina_bench_rbtree_free(Eina_Rbtree *node, EINA_UNUSED void *data)
-{
- free(node);
-}
-
-static void
-eina_bench_lookup_rbtree(int request)
-{
- Eina_Rbtree *root = NULL;
- int i;
- int j;
-
- for (i = 0; i < request; ++i)
- {
- Eina_Bench_Rbtree *tmp;
-
- tmp = malloc(sizeof (Eina_Bench_Rbtree));
- if (!tmp)
- continue;
-
- tmp->value = i;
- eina_convert_itoa(i, tmp->key);
-
- root = eina_rbtree_inline_insert(root,
- &tmp->node,
- EINA_RBTREE_CMP_NODE_CB(
- _eina_bench_rbtree_cmp),
- NULL);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < request; ++i)
- {
- Eina_Rbtree *tmp;
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- tmp = eina_rbtree_inline_lookup(root,
- tmp_key,
- 10,
- EINA_RBTREE_CMP_KEY_CB(
- _eina_bench_rbtree_key),
- NULL);
- /* Suppress warnings as we really don't want to do anything. */
- (void) tmp;
- }
-
- eina_rbtree_delete(root, EINA_RBTREE_FREE_CB(_eina_bench_rbtree_free), NULL);
-}
-
-static void
-eina_bench_lookup_murmur(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
- EINA_KEY_CMP(_eina_string_key_cmp),
- EINA_KEY_HASH(eina_hash_murmur3),
- free,
- 8);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-
-#ifdef CITYHASH_BENCH
-static void
-eina_bench_lookup_cityhash(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
- EINA_KEY_CMP(_eina_string_key_cmp),
- EINA_KEY_HASH(city_hash),
- free,
- 8);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-#endif
-
-static void
-eina_bench_lookup_superfast(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_string_superfast_new(free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-
-static void
-eina_bench_lookup_djb2(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_string_djb2_new(free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-
-typedef struct _Eina_Bench_DJB2 Eina_Bench_DJB2;
-struct _Eina_Bench_DJB2
-{
- char *key;
- int value;
-};
-
-static void
-eina_bench_lookup_djb2_inline(int request)
-{
- Eina_Hash *hash = NULL;
- Eina_Bench_DJB2 *elm;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_string_djb2_new(free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- int length;
-
- elm = malloc(sizeof (Eina_Bench_DJB2) + 10);
- if (!elm)
- continue;
-
- elm->key = (char *)(elm + 1);
-
- length = eina_convert_itoa(i, elm->key) + 1;
- elm->value = i;
-
- eina_hash_direct_add_by_hash(hash, elm->key, length,
- eina_hash_djb2(elm->key, length), elm);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
- int length = eina_convert_itoa(rand() % request, tmp_key) + 1;
-
- elm =
- eina_hash_find_by_hash(hash, tmp_key, length,
- eina_hash_djb2(tmp_key, length));
- }
-
- eina_hash_free(hash);
-}
-
-#ifdef EINA_BENCH_HAVE_GLIB
-typedef struct _Eina_Bench_Glib Eina_Bench_Glib;
-struct _Eina_Bench_Glib
-{
- char *key;
- int value;
-};
-
-static void
-eina_bench_lookup_ghash(int request)
-{
- Eina_Bench_Glib *elm;
- GHashTable *hash;
- unsigned int i;
- unsigned int j;
-
- hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- elm = malloc(sizeof (Eina_Bench_Glib) + 10);
- if (!elm)
- continue;
-
- elm->key = (char *)(elm + 1);
-
- eina_convert_itoa(i, elm->key);
- elm->value = i;
-
- g_hash_table_insert(hash, elm->key, elm);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- elm = g_hash_table_lookup(hash, tmp_key);
- }
-
- g_hash_table_destroy(hash);
-}
-#endif
-
-static void
-eina_bench_lookup_evas(int request)
-{
- Evas_Hash *hash = NULL;
- Eina_Array *array = NULL;
- int *tmp_val;
- Eina_Array_Iterator it;
- unsigned int i;
- unsigned int j;
-
- array = eina_array_new(10000);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- hash = evas_hash_add(hash, tmp_key, tmp_val);
-
- eina_array_push(array, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- tmp_val = evas_hash_find(hash, tmp_key);
- }
-
- evas_hash_free(hash);
-
- EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
- free(tmp_val);
-
- eina_array_free(array);
-}
-
-typedef struct _Eina_Bench_Ecore Eina_Bench_Ecore;
-struct _Eina_Bench_Ecore
-{
- char *key;
- int value;
-};
-
-static void
-eina_bench_lookup_ecore(int request)
-{
- Ecore_Hash *hash = NULL;
- Eina_Bench_Ecore *elm;
- unsigned int i;
- unsigned int j;
-
- hash = ecore_hash_new(ecore_str_hash, ecore_str_compare);
-
- ecore_hash_free_key_cb_set(hash, NULL);
- ecore_hash_free_value_cb_set(hash, free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- elm = malloc(sizeof (Eina_Bench_Ecore) + 10);
- if (!elm)
- continue;
-
- elm->key = (char *)(elm + 1);
- eina_convert_itoa(i, elm->key);
- elm->value = i;
-
- ecore_hash_set(hash, elm->key, elm);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- elm = ecore_hash_get(hash, tmp_key);
- }
-
- ecore_hash_destroy(hash);
-}
-
-void eina_bench_hash(Eina_Benchmark *bench)
-{
- eina_benchmark_register(bench, "superfast-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_superfast), 10, 10000, 10);
- eina_benchmark_register(bench, "djb2-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_djb2), 10, 10000, 10);
- eina_benchmark_register(bench, "djb2-lookup-inline",
- EINA_BENCHMARK(
- eina_bench_lookup_djb2_inline), 10, 10000, 10);
- eina_benchmark_register(bench, "murmur",
- EINA_BENCHMARK(
- eina_bench_lookup_murmur), 10, 10000, 10);
-#ifdef CITYHASH_BENCH
- eina_benchmark_register(bench, "cityhash",
- EINA_BENCHMARK(
- eina_bench_lookup_cityhash), 10, 10000, 10);
-#endif
- eina_benchmark_register(bench, "rbtree",
- EINA_BENCHMARK(
- eina_bench_lookup_rbtree), 10, 10000, 10);
-#ifdef EINA_BENCH_HAVE_GLIB
- eina_benchmark_register(bench, "ghash-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_ghash), 10, 10000, 10);
-#endif
- eina_benchmark_register(bench, "evas-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_evas), 10, 10000, 10);
- eina_benchmark_register(bench, "ecore-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_ecore), 10, 10000, 10);
-
-}
diff --git a/src/benchmarks/eina/eina_bench_sort.c b/src/benchmarks/eina/eina_bench_sort.c
index fc2b343466..9c0a1f9102 100644
--- a/src/benchmarks/eina/eina_bench_sort.c
+++ b/src/benchmarks/eina/eina_bench_sort.c
@@ -50,8 +50,6 @@ eina_bench_sort_eina(int request)
eina_init();
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
char buffer[10];
@@ -78,8 +76,6 @@ eina_bench_sort_evas(int request)
Evas_List *list = NULL;
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
char buffer[10];
@@ -105,8 +101,6 @@ eina_bench_sort_glist(int request)
GList *list = NULL;
int i;
- srand(time(NULL));
-
for (i = 0; i < request; ++i)
{
char buffer[10];
diff --git a/src/benchmarks/eina/eina_bench_stringshare.c b/src/benchmarks/eina/eina_bench_stringshare.c
index 22d18fa485..d906f4d2a7 100644
--- a/src/benchmarks/eina/eina_bench_stringshare.c
+++ b/src/benchmarks/eina/eina_bench_stringshare.c
@@ -53,8 +53,6 @@ eina_bench_stringshare_job(int request)
tmp = eina_stringshare_add(build);
}
- srand(time(NULL));
-
for (j = 0; j < 200; ++j)
for (i = 0; i < request; ++i)
{
@@ -87,8 +85,6 @@ eina_bench_stringchunk_job(int request)
g_string_chunk_insert_const(chunk, build);
}
- srand(time(NULL));
-
for (j = 0; j < 200; ++j)
for (i = 0; i < request; ++i)
{
@@ -117,8 +113,6 @@ eina_bench_evas_job(int request)
tmp = evas_stringshare_add(build);
}
- srand(time(NULL));
-
for (j = 0; j < 200; ++j)
for (i = 0; i < request; ++i)
{
@@ -139,31 +133,29 @@ eina_bench_ecore_job(int request)
unsigned int j;
int i;
- ecore_string_init();
+ //ecore_string_init();
for (i = 0; i < request; ++i)
{
char build[64] = "string_";
eina_convert_xtoa(i, build + 7);
- tmp = ecore_string_instance(build);
+ //tmp = ecore_string_instance(build);
}
- srand(time(NULL));
-
for (j = 0; j < 200; ++j)
for (i = 0; i < request; ++i)
{
char build[64] = "string_";
eina_convert_xtoa(rand() % request, build + 7);
- tmp = ecore_string_instance(build);
+ //tmp = ecore_string_instance(build);
}
/* Suppress warnings as we really don't want to do anything. */
(void) tmp;
- ecore_string_shutdown();
+ //ecore_string_shutdown();
}
void eina_bench_stringshare(Eina_Benchmark *bench)
diff --git a/src/benchmarks/eina/eina_bench_stringshare_e17.c b/src/benchmarks/eina/eina_bench_stringshare_e17.c
deleted file mode 100644
index 2b2b45cb34..0000000000
--- a/src/benchmarks/eina/eina_bench_stringshare_e17.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* EINA - EFL data type library
- * Copyright (C) 2008 Cedric Bail
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library;
- * if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-
-#ifdef EINA_BENCH_HAVE_GLIB
-# include <glib.h>
-#endif
-
-#include "Evas_Data.h"
-#include "Ecore_Data.h"
-
-#include "Eina.h"
-
-#if EINA_ENABLE_BENCH_E17
-
-typedef struct _Eina_Stringshare_Test Eina_Stringshare_Test;
-struct _Eina_Stringshare_Test
-{
- const char *name;
-
- int (*init)(void);
- const char *(*add)(const char *str);
- void (*del)(const char *str);
- int (*shutdown)(void);
-};
-
-static Eina_Stringshare_Test eina_str = {
- "eina",
- eina_init,
- eina_stringshare_add,
- eina_stringshare_del,
- eina_shutdown
-};
-
-static Eina_Stringshare_Test evas_str = {
- "evas",
- NULL,
- evas_stringshare_add,
- evas_stringshare_del,
- NULL
-};
-
-static Eina_Stringshare_Test ecore_str = {
- "ecore",
- ecore_string_init,
- ecore_string_instance,
- ecore_string_release,
- ecore_string_shutdown
-};
-
-static Eina_Stringshare_Test *tests[] = {
- &eina_str,
- &evas_str,
- &ecore_str,
- NULL
-};
-
-static void
-eina_bench_e17_stringshare(Eina_Stringshare_Test *str)
-{
- Eina_Counter *cnt;
- char *result;
-
- cnt = eina_counter_new(str->name);
-
- eina_counter_start(cnt);
-
- if (str->init)
- str->init();
-
-//#include "strlog"
-
- if (str->shutdown)
- str->shutdown();
-
- eina_counter_stop(cnt, 1);
-
- result = eina_counter_dump(cnt);
- fprintf(stderr, "For `%s`:\n%s\n", str->name, result);
- free(result);
-
- eina_counter_free(cnt);
-}
-#endif
-
-void
-eina_bench_e17(void)
-{
-#if EINA_ENABLE_BENCH_E17
- int i;
-
- eina_init();
-
- for (i = 0; tests[i]; ++i)
- eina_bench_e17_stringshare(tests[i]);
-
- eina_shutdown();
-#endif
-}
diff --git a/src/benchmarks/eina/meson.build b/src/benchmarks/eina/meson.build
index 9b924dd1b9..8243511d6e 100644
--- a/src/benchmarks/eina/meson.build
+++ b/src/benchmarks/eina/meson.build
@@ -1,17 +1,13 @@
eina_bench_src = files(
'eina_bench.c',
'eina_bench_sort.c',
-'eina_bench_hash.c',
'eina_bench_crc_hash.c',
'eina_bench_stringshare.c',
'eina_bench_convert.c',
'eina_bench_mempool.c',
-'eina_bench_stringshare_e17.c',
'eina_bench_array.c',
'eina_bench_rectangle_pool.c',
'ecore_list.c',
-'ecore_strings.c',
-'ecore_hash.c',
'ecore_sheap.c',
'evas_hash.c',
'evas_list.c',
@@ -25,15 +21,15 @@ eina_bench_src = files(
'evas_mempool.h')
city = shared_library('city',
- sources : ['city.cc','city.h'],
+ sources : ['city.cc','city.h'],
)
eina_bench = executable('eina_bench',
- sources : eina_bench_src,
- dependencies : eina,
- c_args : ['-fPIC','-DCITYHASH_BENCH', '-DEINA_ENABLE_BENCH_E17'],
- include_directories : config_dir,
- link_with : city,
+ sources : eina_bench_src,
+ dependencies : eina,
+ c_args : ['-fPIC','-DCITYHASH_BENCH', '-DEINA_ENABLE_BENCH_E17', '-DEFL_BUILD'],
+ include_directories : config_dir,
+ link_with : city,
)
benchmark('eina_bench', eina_bench,
diff --git a/src/benchmarks/elementary/meson.build b/src/benchmarks/elementary/meson.build
index 8cb1b99057..d174a93433 100644
--- a/src/benchmarks/elementary/meson.build
+++ b/src/benchmarks/elementary/meson.build
@@ -10,6 +10,7 @@ benchmark('focus_widget_tree', focus_widget_tree_bench,
item_container = executable('collection',
'collection.c',
+ c_args: ['-DEFL_BUILD'],
dependencies: [elementary, ecore_input_evas, eio],
)
diff --git a/src/benchmarks/eo/class_simple.c b/src/benchmarks/eo/class_simple.c
index 63378d6033..aa3cec94a5 100644
--- a/src/benchmarks/eo/class_simple.c
+++ b/src/benchmarks/eo/class_simple.c
@@ -7,8 +7,8 @@
#define MY_CLASS SIMPLE_CLASS
-EOAPI const Efl_Event_Description _SIMPLE_FOO = EFL_EVENT_DESCRIPTION("foo");
-EOAPI const Efl_Event_Description _SIMPLE_BAR = EFL_EVENT_DESCRIPTION("bar");
+const Efl_Event_Description _SIMPLE_FOO = EFL_EVENT_DESCRIPTION("foo");
+const Efl_Event_Description _SIMPLE_BAR = EFL_EVENT_DESCRIPTION("bar");
static void
_other_call(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, Eo *other, int times)
@@ -19,7 +19,7 @@ _other_call(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, Eo *other, int ti
}
}
-EAPI EFL_VOID_FUNC_BODYV(simple_other_call, EFL_FUNC_CALL(other, times), Eo *other, int times);
+EFL_VOID_FUNC_BODYV(simple_other_call, EFL_FUNC_CALL(other, times), Eo *other, int times);
static void
_a_set(Eo *obj EINA_UNUSED, void *class_data, int a)
@@ -28,7 +28,7 @@ _a_set(Eo *obj EINA_UNUSED, void *class_data, int a)
pd->a = a;
}
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/benchmarks/eo/class_simple.h b/src/benchmarks/eo/class_simple.h
index 8445116963..56c92c0aba 100644
--- a/src/benchmarks/eo/class_simple.h
+++ b/src/benchmarks/eo/class_simple.h
@@ -6,16 +6,16 @@ typedef struct
int a;
} Simple_Public_Data;
-EAPI void simple_a_set(Eo *self, int a);
+void simple_a_set(Eo *self, int a);
/* Calls simple_other_call(other, obj) and then simple_other_call(obj, other)
* for 'times' times in order to grow the call stack on other objects. */
-EAPI void simple_other_call(Eo*self, Eo *other, int times);
+void simple_other_call(Eo*self, Eo *other, int times);
#define SIMPLE_CLASS simple_class_get()
const Efl_Class *simple_class_get(void);
-EOAPI extern const Efl_Event_Description _SIMPLE_FOO;
-EOAPI extern const Efl_Event_Description _SIMPLE_BAR;
+extern const Efl_Event_Description _SIMPLE_FOO;
+extern const Efl_Event_Description _SIMPLE_BAR;
#define SIMPLE_FOO (&(_SIMPLE_FOO))
#define SIMPLE_BAR (&(_SIMPLE_BAR))
diff --git a/src/bin/ecore_buffer/meson.build b/src/bin/ecore_buffer/meson.build
index 5e1a9d9381..b2df51b4f7 100644
--- a/src/bin/ecore_buffer/meson.build
+++ b/src/bin/ecore_buffer/meson.build
@@ -1,6 +1,6 @@
executable('bqmgr',
['bq_mgr_protocol.c', 'bq_mgr.c'],
- dependencies: [ecore, ecore_buffer, ecore_buffer_deps],
+ dependencies: [ecore, ecore_buffer, ecore_buffer_deps, ecore_buffer_ext_deps],
install: true,
install_dir: join_paths(dir_lib, 'ecore_buffer', 'bin')
)
diff --git a/src/bin/ecore_evas/ecore_evas_convert.c b/src/bin/ecore_evas/ecore_evas_convert.c
index 8b4f19ab2f..cefc16cc84 100644
--- a/src/bin/ecore_evas/ecore_evas_convert.c
+++ b/src/bin/ecore_evas/ecore_evas_convert.c
@@ -128,7 +128,6 @@ main(int argc, char *argv[])
eina_init();
_log_dom = eina_log_domain_register(argv[0], EINA_COLOR_CYAN);
- ecore_init();
ecore_evas_init();
arg_index = ecore_getopt_parse(&optdesc, values, argc, argv);
@@ -211,7 +210,8 @@ main(int argc, char *argv[])
end:
if (flags) eina_strbuf_free(flags);
ecore_evas_shutdown();
- ecore_shutdown();
+ eina_log_domain_unregister(_log_dom);
+ eina_shutdown();
return r;
}
diff --git a/src/bin/ecore_evas/eetpack.c b/src/bin/ecore_evas/eetpack.c
index 6e7616d189..9be4c2f77a 100644
--- a/src/bin/ecore_evas/eetpack.c
+++ b/src/bin/ecore_evas/eetpack.c
@@ -274,9 +274,7 @@ main(int argc, char **argv)
return -1;
}
- eina_init();
eet_init();
- evas_init();
ecore_evas_init();
scratch_canvas_init();
@@ -285,8 +283,6 @@ main(int argc, char **argv)
if (ef) eet_close(ef);
ecore_evas_shutdown();
- evas_shutdown();
eet_shutdown();
- eina_shutdown();
return 0;
}
diff --git a/src/bin/edje/edje_cc.c b/src/bin/edje/edje_cc.c
index 1963dae341..dff3fd7a3e 100644
--- a/src/bin/edje/edje_cc.c
+++ b/src/bin/edje/edje_cc.c
@@ -25,7 +25,6 @@ Eina_List *snd_dirs = NULL;
Eina_List *mo_dirs = NULL;
Eina_List *vibration_dirs = NULL;
Eina_List *img_dirs = NULL;
-Eina_List *model_dirs = NULL;
Eina_List *fnt_dirs = NULL;
Eina_List *data_dirs = NULL;
Eina_List *defines = NULL;
@@ -174,8 +173,6 @@ main(int argc, char **argv)
img_dirs = eina_list_append(img_dirs, ".");
- model_dirs = eina_list_append(model_dirs, ".");
-
/* add defines to epp so edc files can detect edje_cc version */
defines = eina_list_append(defines, mem_strdup("-DEDJE_VERSION_12=12"));
@@ -224,11 +221,6 @@ main(int argc, char **argv)
i++;
img_dirs = eina_list_append(img_dirs, argv[i]);
}
- else if ((!strcmp(argv[i], "-mod") || !strcmp(argv[i], "--model_dir")) && (i < (argc - 1)))
- {
- i++;
- model_dirs = eina_list_append(model_dirs, argv[i]);
- }
else if ((!strcmp(argv[i], "-fd") || !strcmp(argv[i], "--font_dir")) && (i < (argc - 1)))
{
i++;
@@ -458,6 +450,7 @@ main(int argc, char **argv)
eina_prefix_free(pfx);
pfx = NULL;
+ ecore_evas_shutdown();
edje_shutdown();
eina_log_domain_unregister(_edje_cc_log_dom);
eina_shutdown();
diff --git a/src/bin/edje/edje_cc.h b/src/bin/edje/edje_cc.h
index afb7a99c03..580c44fe6d 100644
--- a/src/bin/edje/edje_cc.h
+++ b/src/bin/edje/edje_cc.h
@@ -230,13 +230,8 @@ void copied_program_anonymous_lookup_delete(Edje_Part_Collection *pc, int *de
void data_queue_anonymous_lookup(Edje_Part_Collection *pc, Edje_Program *ep, int *dest);
void data_queue_copied_anonymous_lookup(Edje_Part_Collection *pc, int *src, int *dest);
void data_queue_image_lookup(char *name, int *dest, Eina_Bool *set);
-void data_queue_model_lookup(char *name, int *dest, Eina_Bool *set);
void data_queue_copied_image_lookup(int *src, int *dest, Eina_Bool *set);
void data_queue_image_remove(int *dest, Eina_Bool *set);
-void data_queue_copied_model_lookup(int *src, int *dest, Eina_Bool *set);
-void data_queue_model_remove(int *dest, Eina_Bool *set);
-void data_queue_spectrum_lookup(char *name, int *dest);
-void data_queue_spectrum_slave_lookup(int *master, int *slave);
void data_process_lookups(void);
void data_process_scripts(void);
void data_process_script_lookups(void);
@@ -308,7 +303,6 @@ void script_rewrite(Code *code);
/* global vars */
extern Eina_List *ext_dirs;
extern Eina_List *img_dirs;
-extern Eina_List *model_dirs;
extern Eina_List *fnt_dirs;
extern Eina_List *snd_dirs;
extern Eina_List *mo_dirs;
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 8353d260a3..0ced3e3308 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -220,8 +220,6 @@ static void st_images_set_image_size(void);
static void st_images_set_image_border(void);
static void st_images_set_image_border_scale_by(void);
-static void st_models_model(void);
-
static void st_fonts_font(void);
static void st_data_item(void);
@@ -272,7 +270,6 @@ static void st_collections_group_script_recursion(void);
static void st_collections_group_alias(void);
static void st_collections_group_min(void);
static void st_collections_group_max(void);
-static void st_collections_group_scene_size(void);
static void st_collections_group_broadcast_signal(void);
static void st_collections_group_data_item(void);
static void st_collections_group_orientation(void);
@@ -437,34 +434,7 @@ static void st_collections_group_parts_part_description_table_padding(void
static void st_collections_group_parts_part_description_table_min(void);
static void st_collections_group_parts_part_description_proxy_source_visible(void);
static void st_collections_group_parts_part_description_proxy_source_clip(void);
-static void st_collections_group_parts_part_description_position_point(void);
-static void st_collections_group_parts_part_description_position_space(void);
-static void st_collections_group_parts_part_description_camera_properties(void);
-static void st_collections_group_parts_part_description_properties_ambient(void);
-static void st_collections_group_parts_part_description_properties_diffuse(void);
-static void st_collections_group_parts_part_description_properties_specular(void);
-static void st_collections_group_parts_part_description_properties_material(void);
-static void st_collections_group_parts_part_description_properties_normal(void);
-static void st_collections_group_parts_part_description_properties_shininess(void);
-static void st_collections_group_parts_part_description_properties_shade(void);
-static void st_collections_group_parts_part_description_orientation_angle_axis(void);
-static void st_collections_group_parts_part_description_orientation_look1(void);
-static void st_collections_group_parts_part_description_orientation_look2(void);
-static void st_collections_group_parts_part_description_orientation_look_to(void);
-static void st_collections_group_parts_part_description_orientation_angle_axis(void);
-static void st_collections_group_parts_part_description_orientation_quaternion(void);
-static void st_collections_group_parts_part_description_scale(void);
static void st_collections_group_parts_part_description_offset_scale(void);
-static void st_collections_group_parts_part_description_mesh_primitive(void);
-static void ob_collections_group_parts_part_description_texture(void);
-static void st_collections_group_parts_part_description_texture_image(void);
-static void st_collections_group_parts_part_description_texture_wrap1(void);
-static void st_collections_group_parts_part_description_texture_wrap2(void);
-static void st_collections_group_parts_part_description_texture_filter1(void);
-static void st_collections_group_parts_part_description_texture_filter2(void);
-static void st_collections_group_parts_part_description_mesh_assembly(void);
-static void st_collections_group_parts_part_description_mesh_geometry(void);
-static void st_collections_group_parts_part_description_mesh_frame(void);
static void st_collections_group_parts_part_description_filter_code(void);
static void st_collections_group_parts_part_description_filter_source(void);
static void st_collections_group_parts_part_description_filter_data(void);
@@ -516,6 +486,9 @@ static void st_collections_group_parts_part_description_params_bool(void);
static void st_collections_group_parts_part_description_params_choice(void);
static void st_collections_group_parts_part_description_params_smart(void);
+/* vector part parameter */
+static void st_collections_group_parts_part_description_vector_frame(void);
+
static void ob_collections_group_programs_program(void);
static void st_collections_group_programs_program_name(void);
static void st_collections_group_programs_program_signal(void);
@@ -641,70 +614,6 @@ static void _handle_vector_image(void);
PROGRAM_BASE(PREFIX) \
PROGRAM_BASE(PREFIX ".programs")
-#define SET_LOOK1(Type, type_node) \
- Edje_Part_Description_##Type * ed; \
- ed = (Edje_Part_Description_##Type *)current_desc; \
- \
- if (ed->type_node.orientation.type <= EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_AT) \
- { \
- ed->type_node.orientation.data[0] = FROM_DOUBLE(parse_float(0)); \
- ed->type_node.orientation.data[1] = FROM_DOUBLE(parse_float(1)); \
- ed->type_node.orientation.data[2] = FROM_DOUBLE(parse_float(2)); \
- ed->type_node.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_AT; \
- }
-
-#define SET_LOOK2(Type, type_node) \
- Edje_Part_Description_##Type * ed; \
- ed = (Edje_Part_Description_##Type *)current_desc; \
- \
- if (ed->type_node.orientation.type <= EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_AT) \
- { \
- ed->type_node.orientation.data[3] = FROM_DOUBLE(parse_float(0)); \
- ed->type_node.orientation.data[4] = FROM_DOUBLE(parse_float(1)); \
- ed->type_node.orientation.data[5] = FROM_DOUBLE(parse_float(2)); \
- ed->type_node.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_AT; \
- }
-
-#define SET_LOOK_TO(list, Type, type_node) \
- Edje_Part_Description_##Type * ed; \
- char *name; \
- \
- ed = (Edje_Part_Description_##Type *)current_desc; \
- \
- if (ed->type_node.orientation.type <= EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_TO) \
- { \
- name = parse_str(0); \
- data_queue_part_lookup(list, name, &(ed->type_node.orientation.look_to)); \
- free(name); \
- ed->type_node.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_TO; \
- }
-
-#define SET_ANGLE_AXIS(Type, type_node) \
- Edje_Part_Description_##Type * ed; \
- ed = (Edje_Part_Description_##Type *)current_desc; \
- \
- if (ed->type_node.orientation.type <= EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_ANGLE_AXIS) \
- { \
- ed->type_node.orientation.data[0] = FROM_DOUBLE(parse_float(0)); \
- ed->type_node.orientation.data[1] = FROM_DOUBLE(parse_float(1)); \
- ed->type_node.orientation.data[2] = FROM_DOUBLE(parse_float(2)); \
- ed->type_node.orientation.data[3] = FROM_DOUBLE(parse_float(3)); \
- ed->type_node.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_ANGLE_AXIS; \
- }
-
-#define SET_QUATERNION(Type, type_node) \
- Edje_Part_Description_##Type * ed; \
- ed = (Edje_Part_Description_##Type *)current_desc; \
- \
- if (ed->type_node.orientation.type <= EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_QUATERNION) \
- { \
- ed->type_node.orientation.data[1] = FROM_DOUBLE(parse_float(0)); \
- ed->type_node.orientation.data[2] = FROM_DOUBLE(parse_float(1)); \
- ed->type_node.orientation.data[3] = FROM_DOUBLE(parse_float(2)); \
- ed->type_node.orientation.data[0] = FROM_DOUBLE(parse_float(3)); \
- ed->type_node.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_QUATERNION; \
- }
-
#define FILTERS_STATEMENTS(PREFIX) \
{PREFIX "filters.filter.file", st_filters_filter_file}, \
{PREFIX "filters.filter.name", st_filters_filter_name},
@@ -770,7 +679,6 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.alias", st_collections_group_alias},
{"collections.group.min", st_collections_group_min},
{"collections.group.max", st_collections_group_max},
- {"collections.group.scene_size", st_collections_group_scene_size},
{"collections.group.broadcast_signal", st_collections_group_broadcast_signal},
{"collections.group.orientation", st_collections_group_orientation},
{"collections.group.mouse_events", st_collections_group_mouse_events},
@@ -782,9 +690,6 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.programs.target_group", st_collections_group_target_group}, /* dup */
IMAGE_SET_STATEMENTS("collections.group")
IMAGE_STATEMENTS("collections.group.")
- {
- "collections.group.models.model", st_models_model
- },
{"collections.group.font", st_fonts_font}, /* dup */
FONT_STYLE_CC_STATEMENTS("collections.group.")
TEXT_CLASS_STATEMENTS("collections.group.")
@@ -976,31 +881,6 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.parts.part.description.table.min", st_collections_group_parts_part_description_table_min},
{"collections.group.parts.part.description.proxy.source_visible", st_collections_group_parts_part_description_proxy_source_visible},
{"collections.group.parts.part.description.proxy.source_clip", st_collections_group_parts_part_description_proxy_source_clip},
- {"collections.group.parts.part.description.position.point", st_collections_group_parts_part_description_position_point},
- {"collections.group.parts.part.description.position.space", st_collections_group_parts_part_description_position_space},
- {"collections.group.parts.part.description.properties.perspective", st_collections_group_parts_part_description_camera_properties},
- {"collections.group.parts.part.description.properties.ambient", st_collections_group_parts_part_description_properties_ambient},
- {"collections.group.parts.part.description.properties.diffuse", st_collections_group_parts_part_description_properties_diffuse},
- {"collections.group.parts.part.description.properties.specular", st_collections_group_parts_part_description_properties_specular},
- {"collections.group.parts.part.description.properties.material", st_collections_group_parts_part_description_properties_material},
- {"collections.group.parts.part.description.properties.normal", st_collections_group_parts_part_description_properties_normal},
- {"collections.group.parts.part.description.properties.shininess", st_collections_group_parts_part_description_properties_shininess},
- {"collections.group.parts.part.description.properties.shade", st_collections_group_parts_part_description_properties_shade},
- {"collections.group.parts.part.description.mesh.primitive", st_collections_group_parts_part_description_mesh_primitive},
- {"collections.group.parts.part.description.orientation.look1", st_collections_group_parts_part_description_orientation_look1},
- {"collections.group.parts.part.description.orientation.look2", st_collections_group_parts_part_description_orientation_look2},
- {"collections.group.parts.part.description.orientation.look_to", st_collections_group_parts_part_description_orientation_look_to},
- {"collections.group.parts.part.description.orientation.angle_axis", st_collections_group_parts_part_description_orientation_angle_axis},
- {"collections.group.parts.part.description.orientation.quaternion", st_collections_group_parts_part_description_orientation_quaternion},
- {"collections.group.parts.part.description.scale", st_collections_group_parts_part_description_scale},
- {"collections.group.parts.part.description.texture.image", st_collections_group_parts_part_description_texture_image},
- {"collections.group.parts.part.description.texture.wrap1", st_collections_group_parts_part_description_texture_wrap1},
- {"collections.group.parts.part.description.texture.wrap2", st_collections_group_parts_part_description_texture_wrap2},
- {"collections.group.parts.part.description.texture.filter1", st_collections_group_parts_part_description_texture_filter1},
- {"collections.group.parts.part.description.texture.filter2", st_collections_group_parts_part_description_texture_filter2},
- {"collections.group.parts.part.description.mesh.assembly", st_collections_group_parts_part_description_mesh_assembly},
- {"collections.group.parts.part.description.mesh.geometry", st_collections_group_parts_part_description_mesh_geometry},
- {"collections.group.parts.part.description.mesh.frame", st_collections_group_parts_part_description_mesh_frame},
{"collections.group.parts.part.description.filter.code", st_collections_group_parts_part_description_filter_code},
{"collections.group.parts.part.description.filter.source", st_collections_group_parts_part_description_filter_source},
{"collections.group.parts.part.description.filter.data", st_collections_group_parts_part_description_filter_data},
@@ -1047,6 +927,7 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.parts.part.description.params.bool", st_collections_group_parts_part_description_params_bool},
{"collections.group.parts.part.description.params.choice", st_collections_group_parts_part_description_params_choice},
{"collections.group.parts.part.description.params.*", st_collections_group_parts_part_description_params_smart},
+ {"collections.group.parts.part.description.vector.frame", st_collections_group_parts_part_description_vector_frame},
IMAGE_STATEMENTS("collections.group.parts.part.description.")
{
"collections.group.parts.part.description.font", st_fonts_font
@@ -1495,7 +1376,6 @@ New_Object_Handler object_handlers[] =
{"collections.group.set", ob_images_set}, /* dup */
{"collections.group.set.image", ob_images_set_image}, /* dup */
{"collections.group.images", NULL}, /* dup */
- {"collections.group.models", NULL}, /* dup */
{"collections.group.images.set", ob_images_set}, /* dup */
{"collections.group.images.set.image", ob_images_set_image}, /* dup */
{"collections.group.fonts", NULL}, /* dup */
@@ -1572,11 +1452,6 @@ New_Object_Handler object_handlers[] =
{"collections.group.parts.part.description.styles.style", ob_styles_style}, /* dup */
{"collections.group.parts.part.description.box", NULL},
{"collections.group.parts.part.description.table", NULL},
- {"collections.group.parts.part.description.position", NULL},
- {"collections.group.parts.part.description.properties", NULL},
- {"collections.group.parts.part.description.orientation", NULL},
- {"collections.group.parts.part.description.texture", ob_collections_group_parts_part_description_texture},
- {"collections.group.parts.part.description.mesh", NULL},
{"collections.group.parts.part.description.filter", NULL},
{"collections.group.parts.part.description.proxy", NULL},
#ifdef HAVE_EPHYSICS
@@ -1590,6 +1465,7 @@ New_Object_Handler object_handlers[] =
{"collections.group.parts.part.description.map.zoom", NULL},
{"collections.group.parts.part.description.perspective", NULL},
{"collections.group.parts.part.description.params", NULL},
+ {"collections.group.parts.part.description.vector", NULL},
{"collections.group.parts.part.description.color_classes", NULL}, /* dup */
{"collections.group.parts.part.description.color_classes.color_class", ob_color_class}, /* dup */
{"collections.group.parts.part.description.text_classes", NULL}, /* dup */
@@ -1888,160 +1764,6 @@ _edje_part_description_alloc(unsigned char type, const char *collection, const c
break;
}
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = mem_alloc(SZ(Edje_Part_Description_Mesh_Node));
-
- ed->mesh_node.mesh.id = -1;
- ed->mesh_node.mesh.primitive = 0;
- ed->mesh_node.mesh.assembly = 1;
- ed->mesh_node.mesh.frame = 0;
-
- ed->mesh_node.texture.id = -1;
- ed->mesh_node.texture.wrap1 = 0;
- ed->mesh_node.texture.wrap2 = 0;
- ed->mesh_node.texture.filter1 = 0;
- ed->mesh_node.texture.filter2 = 0;
-
- ed->mesh_node.properties.shade = EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR;
- ed->mesh_node.properties.ambient.r = 50;
- ed->mesh_node.properties.ambient.g = 50;
- ed->mesh_node.properties.ambient.b = 50;
- ed->mesh_node.properties.ambient.a = 255;
- ed->mesh_node.properties.diffuse.r = 255;
- ed->mesh_node.properties.diffuse.g = 255;
- ed->mesh_node.properties.diffuse.b = 255;
- ed->mesh_node.properties.diffuse.a = 255;
- ed->mesh_node.properties.specular.r = 255;
- ed->mesh_node.properties.specular.g = 255;
- ed->mesh_node.properties.specular.b = 255;
- ed->mesh_node.properties.specular.a = 255;
-
- ed->mesh_node.properties.material_attrib = 1;
- ed->mesh_node.properties.normal = 1;
- ed->mesh_node.properties.shininess = 50;
-
- ed->mesh_node.aabb1.relative.x = -1.0;
- ed->mesh_node.aabb1.relative.y = -1.0;
- ed->mesh_node.aabb1.relative.z = -1.0;
- ed->mesh_node.aabb1.offset.x = 0;
- ed->mesh_node.aabb1.offset.y = 0;
- ed->mesh_node.aabb1.offset.z = 0;
- ed->mesh_node.aabb1.rel_to = -1;
- ed->mesh_node.aabb2.relative.x = 1.0;
- ed->mesh_node.aabb2.relative.y = 1.0;
- ed->mesh_node.aabb2.relative.z = 1.0;
- ed->mesh_node.aabb2.offset.x = 0;
- ed->mesh_node.aabb2.offset.y = 0;
- ed->mesh_node.aabb2.offset.z = 0;
- ed->mesh_node.aabb2.rel_to = -1;
-
- ed->mesh_node.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_NONE;
- /* x1 is angle for angle_axis and cosine of half angle for quternion,
- x2, x3, x4 define axis for angle_axis and quaternion,
- x1, x2, x3 are coordinates of point to look at for look_at,
- x4, x5, x6 define a vector that indicates the angle at which
- the subject is looking at the target for look_at and look_to */
- ed->mesh_node.orientation.data[0] = 1.0;
- ed->mesh_node.orientation.data[1] = 0.0;
- ed->mesh_node.orientation.data[2] = 0.0;
- ed->mesh_node.orientation.data[3] = 0.0;
- ed->mesh_node.orientation.data[4] = 1.0;
- ed->mesh_node.orientation.data[5] = 0.0;
- ed->mesh_node.orientation.look_to = -1;
-
- ed->mesh_node.scale_3d.x = 1.0;
- ed->mesh_node.scale_3d.y = 1.0;
- ed->mesh_node.scale_3d.z = 1.0;
-
- ed->mesh_node.position.point.x = 0.0;
- ed->mesh_node.position.point.y = 0.0;
- ed->mesh_node.position.point.z = 0.0;
- ed->mesh_node.position.space = EVAS_CANVAS3D_SPACE_PARENT;
-
- result = &ed->common;
- break;
- }
-
- case EDJE_PART_TYPE_LIGHT:
- {
- Edje_Part_Description_Light *ed;
-
- ed = mem_alloc(SZ(Edje_Part_Description_Light));
-
- ed->light.properties.ambient.r = 50;
- ed->light.properties.ambient.g = 50;
- ed->light.properties.ambient.b = 50;
- ed->light.properties.ambient.a = 255;
- ed->light.properties.diffuse.r = 255;
- ed->light.properties.diffuse.g = 255;
- ed->light.properties.diffuse.b = 255;
- ed->light.properties.diffuse.a = 255;
- ed->light.properties.specular.r = 255;
- ed->light.properties.specular.g = 255;
- ed->light.properties.specular.b = 255;
- ed->light.properties.specular.a = 255;
-
- ed->light.position.point.x = 0.0;
- ed->light.position.point.y = 0.0;
- ed->light.position.point.z = 1.0;
- ed->light.position.space = EVAS_CANVAS3D_SPACE_PARENT;
-
- ed->light.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_NONE;
- /* x1 is angle for angle_axis and cosine of half angle for quternion,
- x2, x3, x4 define axis for angle_axis and quaternion,
- x1, x2, x3 are coordinates of point to look at for look_at,
- x4, x5, x6 define a vector that indicates the angle at which
- the subject is looking at the target for look_at and look_to */
- ed->light.orientation.data[0] = 1.0;
- ed->light.orientation.data[1] = 0.0;
- ed->light.orientation.data[2] = 0.0;
- ed->light.orientation.data[3] = 0.0;
- ed->light.orientation.data[4] = 1.0;
- ed->light.orientation.data[5] = 0.0;
- ed->light.orientation.look_to = -1;
-
- result = &ed->common;
- break;
- }
-
- case EDJE_PART_TYPE_CAMERA:
- {
- Edje_Part_Description_Camera *ed;
-
- ed = mem_alloc(SZ(Edje_Part_Description_Camera));
-
- ed->camera.camera.fovy = 60.0;
- ed->camera.camera.aspect = 1.0;
- ed->camera.camera.frustum_near = 2.0;
- ed->camera.camera.frustum_far = 50.0;
-
- ed->camera.position.point.x = 0.0;
- ed->camera.position.point.y = 0.0;
- ed->camera.position.point.z = 5.0;
-
- ed->camera.position.space = EVAS_CANVAS3D_SPACE_PARENT;
-
- ed->camera.orientation.type = EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_NONE;
- /* x1 is angle for angle_axis and cosine of half angle for quternion,
- x2, x3, x4 define axis for angle_axis and quaternion,
- x1, x2, x3 are coordinates of point to look at for look_at,
- x4, x5, x6 define a vector that indicates the angle at which
- the subject is looking at the target for look_at and look_to */
- ed->camera.orientation.data[0] = 1.0;
- ed->camera.orientation.data[1] = 0.0;
- ed->camera.orientation.data[2] = 0.0;
- ed->camera.orientation.data[3] = 0.0;
- ed->camera.orientation.data[4] = 1.0;
- ed->camera.orientation.data[5] = 0.0;
- ed->camera.orientation.look_to = -1;
-
- result = &ed->common;
- break;
- }
-
case EDJE_PART_TYPE_VECTOR:
{
Edje_Part_Description_Vector *ed;
@@ -2545,6 +2267,7 @@ _handle_vector_image(void)
{
ed->vg.set = EINA_TRUE;
ed->vg.id = edje_file->image_dir->vectors[i].id;
+ ed->vg.type = edje_file->image_dir->vectors[i].type;
break;
}
}
@@ -2555,7 +2278,7 @@ _handle_vector_image(void)
free(name);
}
-/** @edcsubsection{toplevel_images,
+/** @edcsubsection{toplevel_images2,
* Images} */
/**
@@ -2587,6 +2310,7 @@ st_images_vector(void)
Edje_Vector_Directory_Entry *vector;
const char *tmp;
unsigned int i;
+ size_t entry_len;
check_min_arg_count(1);
@@ -2618,74 +2342,16 @@ st_images_vector(void)
vector->entry = tmp;
vector->id = edje_file->image_dir->vectors_count - 1;
-}
-
-/**
- @edcsubsection{toplevel_models,model}
- */
-
-/**
- @page edcref
-
- @block
- models
- @context
- models {
- model: "filename1.ext";
- model: "filename2.ext";
- model: "filename2.ext" 50;
- ..
- }
- @description
- The "models" block is used to list each model file that will be used in
- the theme.
- @endblock
-
- @property
- model
- @parameters
- [model file]
- @effect
- Used to include each model file.
- @endproperty
- */
-static void
-st_models_model(void)
-{
- Edje_Model_Directory_Entry *mdl;
- const char *tmp;
- unsigned int i;
-
- check_min_arg_count(1);
-
- if (!edje_file->model_dir)
- edje_file->model_dir = mem_alloc(SZ(Edje_Model_Directory));
-
- tmp = parse_str(0);
- for (i = 0; i < edje_file->model_dir->entries_count; ++i)
- if (!strcmp(edje_file->model_dir->entries[i].entry, tmp))
- {
- free((char *)tmp);
- return;
- }
-
- edje_file->model_dir->entries_count++;
- mdl = realloc(edje_file->model_dir->entries,
- sizeof (Edje_Model_Directory_Entry) * edje_file->model_dir->entries_count);
- if (!mdl)
+ entry_len = strlen(vector->entry);
+ if ((entry_len > 5) && !strncmp(vector->entry + entry_len - 5, ".json", 5))
{
- ERR("No enough memory.");
- exit(-1);
+ vector->type = EDJE_VECTOR_FILE_TYPE_LOTTIE;
+ }
+ else
+ {
+ vector->type = EDJE_VECTOR_FILE_TYPE_SVG;
}
- edje_file->model_dir->entries = mdl;
- memset(edje_file->model_dir->entries + edje_file->model_dir->entries_count - 1,
- 0, sizeof (Edje_Model_Directory_Entry));
-
- mdl = edje_file->model_dir->entries + edje_file->model_dir->entries_count - 1;
-
- mdl->entry = tmp;
- mdl->id = edje_file->model_dir->entries_count - 1;
}
/** @edcsubsection{toplevel_images_set,
@@ -3831,7 +3497,7 @@ st_size_class_max(void)
/** @edcsection{collections,Collections Blocks} */
-/** @edcsubsection{collections,
+/** @edcsubsection{sub_collections,
* Collections} */
/**
@@ -3888,7 +3554,7 @@ st_collections_base_scale(void)
check_min_arg_count(1);
edje_file->base_scale = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
- if (edje_file->base_scale == ZERO)
+ if (EQ(edje_file->base_scale, ZERO))
{
ERR("The base_scale is 0.0. The value should be bigger than 0.0.");
exit(-1);
@@ -4349,12 +4015,12 @@ _link_combine(void)
EINA_LIST_FOREACH_SAFE(tup->data, l, ll, ell)
{
if (ell->pr->tween.mode != el->pr->tween.mode) continue;
- if (fabs(ell->pr->tween.time - el->pr->tween.time) > DBL_EPSILON) continue;
- if (fabs(ell->pr->tween.v1 - el->pr->tween.v1) > DBL_EPSILON) continue;
- if (fabs(ell->pr->tween.v2 - el->pr->tween.v2) > DBL_EPSILON) continue;
- if (fabs(ell->pr->tween.v3 - el->pr->tween.v3) > DBL_EPSILON) continue;
- if (fabs(ell->pr->tween.v4 - el->pr->tween.v4) > DBL_EPSILON) continue;
- if (fabs(ell->ed->state.value - el->ed->state.value) > DBL_EPSILON) continue;
+ if (!EQ(ell->pr->tween.time, el->pr->tween.time)) continue;
+ if (!EQ(ell->pr->tween.v1, el->pr->tween.v1)) continue;
+ if (!EQ(ell->pr->tween.v2, el->pr->tween.v2)) continue;
+ if (!EQ(ell->pr->tween.v3, el->pr->tween.v3)) continue;
+ if (!EQ(ell->pr->tween.v4, el->pr->tween.v4)) continue;
+ if (!EQ(ell->ed->state.value, el->ed->state.value)) continue;
if ((!!ell->ed->state.name) != (!!el->ed->state.name))
{
if (((!!ell->ed->state.name) && strcmp(ell->ed->state.name, "default")) ||
@@ -4458,9 +4124,6 @@ ob_collections_group(void)
pcp->default_mouse_events = 1;
pcp->inherit_script = EINA_FALSE;
- pc->scene_size.width = 0;
- pc->scene_size.height = 0;
-
#ifdef HAVE_EPHYSICS
pc->physics.world.gravity.x = 0;
pc->physics.world.gravity.y = 294;
@@ -4545,7 +4208,7 @@ st_collections_group_name(void)
This property can be inherited.
Defaults: 0
- @warning Your edc file should always wrap this keyword with #ifdef HAVE_SKIP_NAMESPACE_VALIDATION
+ @warning Your edc file should always wrap this keyword with <tt>\#ifdef HAVE_SKIP_NAMESPACE_VALIDATION</tt>
@since 1.21
@endproperty
*/
@@ -4649,18 +4312,6 @@ _parts_count_update(unsigned int type, int inc)
current_de->count.PROXY += inc;
break;
- case EDJE_PART_TYPE_MESH_NODE:
- current_de->count.MESH_NODE += inc;
- break;
-
- case EDJE_PART_TYPE_LIGHT:
- current_de->count.LIGHT += inc;
- break;
-
- case EDJE_PART_TYPE_CAMERA:
- current_de->count.CAMERA += inc;
- break;
-
case EDJE_PART_TYPE_SPACER:
current_de->count.SPACER += inc;
break;
@@ -5515,30 +5166,6 @@ st_collections_group_max(void)
}
/**
- @page edcref
- @property
- scene_size
- @parameters
- [width] [height]
- @effect
- Size of scene.
-
- Defaults: 0.0 0.0
- @endproperty
- */
-static void
-st_collections_group_scene_size(void)
-{
- Edje_Part_Collection *pc;
-
- check_arg_count(2);
-
- pc = eina_list_data_get(eina_list_last(edje_collections));
- pc->scene_size.width = parse_float(0);
- pc->scene_size.height = parse_float(1);
-}
-
-/**
@page edcref
@property
broadcast_signal
@@ -6856,9 +6483,6 @@ st_collections_group_parts_part_name(void)
@li BOX
@li TABLE
@li EXTERNAL
- @li MESH_NODE
- @li CAMERA
- @li LIGHT
@li PROXY
@li SPACER
@li SNAPSHOT
@@ -6870,9 +6494,6 @@ static void
st_collections_group_parts_part_type(void)
{
unsigned int type;
- unsigned int i = 0;
-
- Edje_Part_Collection *pc;
check_arg_count(1);
@@ -6888,29 +6509,11 @@ st_collections_group_parts_part_type(void)
"TABLE", EDJE_PART_TYPE_TABLE,
"EXTERNAL", EDJE_PART_TYPE_EXTERNAL,
"PROXY", EDJE_PART_TYPE_PROXY,
- "MESH_NODE", EDJE_PART_TYPE_MESH_NODE,
- "LIGHT", EDJE_PART_TYPE_LIGHT,
- "CAMERA", EDJE_PART_TYPE_CAMERA,
"SPACER", EDJE_PART_TYPE_SPACER,
"SNAPSHOT", EDJE_PART_TYPE_SNAPSHOT,
"VECTOR", EDJE_PART_TYPE_VECTOR,
NULL);
- pc = eina_list_data_get(eina_list_last(edje_collections));
-
- if (type == EDJE_PART_TYPE_CAMERA)
- {
- for (i = 0; i < (pc->parts_count - 1); i++)
- {
- if (pc->parts[i]->type == EDJE_PART_TYPE_CAMERA)
- {
- WRN("parse error %s:%i. more then one part of type CAMERA in scene.",
- file_in, line - 1);
- exit(-1);
- }
- }
- }
-
_part_type_set(type);
}
@@ -8628,9 +8231,6 @@ ob_collections_group_parts_part_description(void)
ed->minmul.have = 1;
ed->minmul.w = FROM_DOUBLE(1.0);
ed->minmul.h = FROM_DOUBLE(1.0);
- ed->align_3d.x = FROM_DOUBLE(0.5);
- ed->align_3d.y = FROM_DOUBLE(0.5);
- ed->align_3d.z = FROM_DOUBLE(0.5);
}
static void
@@ -8704,7 +8304,7 @@ st_collections_group_parts_part_description_inherit(void)
exit(-1);
}
- if (!strcmp(parent_name, "default") && parent_val == 0.0)
+ if (!strcmp(parent_name, "default") && EINA_DBL_EQ(parent_val, 0.0))
parent = ep->default_desc;
else
{
@@ -8735,7 +8335,7 @@ st_collections_group_parts_part_description_inherit(void)
}
}
- if (min_dst)
+ if (EINA_DBL_NONZERO(min_dst))
{
WRN("%s:%i: couldn't find an exact match in part '%s' when looking for '%s' %lf. Falling back to nearest one '%s' %lf.",
file_in, line - 1, ep->name, parent_name, parent_val, parent ? parent->state.name : NULL, parent ? parent->state.value : 0);
@@ -8912,54 +8512,14 @@ st_collections_group_parts_part_description_inherit(void)
break;
}
- case EDJE_PART_TYPE_CAMERA:
- {
- Edje_Part_Description_Camera *ced = (Edje_Part_Description_Camera *)ed;
- Edje_Part_Description_Camera *cparent = (Edje_Part_Description_Camera *)parent;
-
- ced->camera = cparent->camera;
-
- data_queue_copied_part_lookup(pc, &(cparent->camera.orientation.look_to), &(ced->camera.orientation.look_to));
-
- break;
- }
-
- case EDJE_PART_TYPE_LIGHT:
- {
- Edje_Part_Description_Light *led = (Edje_Part_Description_Light *)ed;
- Edje_Part_Description_Light *lparent = (Edje_Part_Description_Light *)parent;
-
- led->light = lparent->light;
-
- data_queue_copied_part_lookup(pc, &(lparent->light.orientation.look_to), &(led->light.orientation.look_to));
-
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Part_Description_Mesh_Node *med = (Edje_Part_Description_Mesh_Node *)ed;
- Edje_Part_Description_Mesh_Node *mparent = (Edje_Part_Description_Mesh_Node *)parent;
-
- med->mesh_node = mparent->mesh_node;
-
- data_queue_model_remove(&med->mesh_node.mesh.id, &med->mesh_node.mesh.set);
- data_queue_copied_model_lookup(&mparent->mesh_node.mesh.id, &med->mesh_node.mesh.id, &med->mesh_node.mesh.set);
-
- data_queue_image_remove(&med->mesh_node.texture.id, &med->mesh_node.texture.set);
- data_queue_copied_model_lookup(&mparent->mesh_node.texture.id, &med->mesh_node.texture.id, &med->mesh_node.texture.set);
-
- data_queue_copied_part_lookup(pc, &(mparent->mesh_node.orientation.look_to), &(med->mesh_node.orientation.look_to));
-
- break;
- }
-
case EDJE_PART_TYPE_VECTOR:
{
Edje_Part_Description_Vector *ied = (Edje_Part_Description_Vector *)ed;
Edje_Part_Description_Vector *iparent = (Edje_Part_Description_Vector *)parent;
ied->vg.set = iparent->vg.set;
ied->vg.id = iparent->vg.id;
+ ied->vg.type = iparent->vg.type;
+ ied->vg.frame = iparent->vg.frame;
break;
}
}
@@ -9009,8 +8569,8 @@ _part_description_state_update(Edje_Part_Description_Common *ed)
Edje_Part *ep = current_part;
if (ed == ep->default_desc) return;
- if ((ep->default_desc->state.name && !strcmp(ed->state.name, ep->default_desc->state.name) && ed->state.value == ep->default_desc->state.value) ||
- (!ep->default_desc->state.name && !strcmp(ed->state.name, "default") && ed->state.value == ep->default_desc->state.value))
+ if ((ep->default_desc->state.name && !strcmp(ed->state.name, ep->default_desc->state.name) && EINA_DBL_EQ(ed->state.value, ep->default_desc->state.value)) ||
+ (!ep->default_desc->state.name && !strcmp(ed->state.name, "default") && EINA_DBL_EQ(ed->state.value, ep->default_desc->state.value)))
{
if (ep->type == EDJE_PART_TYPE_IMAGE)
_edje_part_description_image_remove((Edje_Part_Description_Image *)ed);
@@ -9026,7 +8586,7 @@ _part_description_state_update(Edje_Part_Description_Common *ed)
unsigned int i;
for (i = 0; i < ep->other.desc_count - 1; ++i)
{
- if (!strcmp(ed->state.name, ep->other.desc[i]->state.name) && ed->state.value == ep->other.desc[i]->state.value)
+ if (!strcmp(ed->state.name, ep->other.desc[i]->state.name) && EINA_DBL_EQ(ed->state.value, ep->other.desc[i]->state.value))
{
if (ep->type == EDJE_PART_TYPE_IMAGE)
_edje_part_description_image_remove((Edje_Part_Description_Image *)ed);
@@ -9085,7 +8645,7 @@ st_collections_group_parts_part_description_state(void)
val = parse_float_range(1, 0.0, 1.0);
/* if only default desc exists and current desc is not default, commence paddling */
- if ((!ep->other.desc_count) && (val || (!eina_streq(s, "default"))))
+ if ((!ep->other.desc_count) && (EINA_DBL_NONZERO(val) || (!eina_streq(s, "default"))))
{
ERR("parse error %s:%i. invalid state name: '%s'. \"default\" state must always be first.",
file_in, line - 1, s);
@@ -9238,7 +8798,7 @@ st_collections_group_parts_part_description_limit(void)
@property
align
@parameters
- [X axis] [Y axis] ([Z axis])
+ [X axis] [Y axis]
@effect
When the displayed object's size is smaller (or bigger) than
its container, this property moves it relatively along both
@@ -9246,27 +8806,18 @@ st_collections_group_parts_part_description_limit(void)
the object touching container's respective ones, while @c
"1.0" stands for right/bottom edges of the object (on
horizontal/vertical axis, respectively).
- There is one more parameter for Z axis in case of MESH_NODE.
- Defaults: 0.5 0.5 (0.5)
+ Defaults: 0.5 0.5
@endproperty
*/
static void
st_collections_group_parts_part_description_align(void)
{
check_has_anchors();
+ check_arg_count(2);
- if (get_arg_count() == 2)
- {
- current_desc->align.x = FROM_DOUBLE(parse_float_range(0, 0.0, 1.0));
- current_desc->align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
- }
- else if (get_arg_count() == 3)
- {
- current_desc->align_3d.x = FROM_DOUBLE(parse_float_range(0, 0.0, 1.0));
- current_desc->align_3d.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
- current_desc->align_3d.z = FROM_DOUBLE(parse_float_range(2, 0.0, 1.0));
- }
+ current_desc->align.x = FROM_DOUBLE(parse_float_range(0, 0.0, 1.0));
+ current_desc->align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
}
/**
@@ -9279,8 +8830,8 @@ st_collections_group_parts_part_description_align(void)
This affects the minimum size calculation. See
edje_object_size_min_calc() and edje_object_size_min_restricted_calc().
This tells the min size calculation routine that this part does not
- change size in width or height (1 for it doesn't, 0 for it does), so
- the routine should not try and expand or contract the part.
+ change group size in width or height (1 for it doesn't, 0 for it does),
+ so the routine should not try and expand or contract the group.
Defaults: 0 0
@endproperty
@@ -9293,6 +8844,8 @@ st_collections_group_parts_part_description_fixed(void)
current_desc->fixed.w = parse_bool(0);
current_desc->fixed.h = parse_bool(1);
+
+ current_desc->user_set.fixed = EINA_TRUE;
}
/**
@@ -10926,7 +10479,7 @@ st_collections_group_parts_part_description_image_scale_hint(void)
The fill method is an optional block that defines the way an IMAGE or
PROXY part is going to be displayed inside its container.
It can be used for tiling (repeating the image) or displaying only
- part of an image. See @ref evas_object_image_fill_set() documentation
+ part of an image. See evas_object_image_fill_set() documentation
for more details.
@endblock
@@ -11730,7 +11283,7 @@ st_collections_group_parts_part_description_text_fit_size_array(void)
for (n = 0, argc = get_arg_count(); n < argc; n++)
{
unsigned int *value = malloc(sizeof(unsigned int));
- *value = (unsigned int) parse_int(n);
+ if (value) *value = (unsigned int) parse_int(n);
ed->text.fit_size_array = eina_list_append(ed->text.fit_size_array, value);
}
}
@@ -12379,1302 +11932,6 @@ st_collections_group_parts_part_description_proxy_source_visible(void)
ed->proxy.source_visible = parse_bool(0);
}
-/**
- @edcsubsection{collections_group_parts_description_position,
- Group.Parts.Part.Description.Position}
- */
-
-/**
- @page edcref
-
- @block
- position
- @context
- part {
- description {
- ..
- position {
- point: x y z;
- space: LOCAL/PARENT/WORLD;
- }
- ..
- }
- }
- @description
- A position block defines position of CAMERA,
- LIGHT or MESH_NODE at the scene.
- @endblock
-
- @property
- point
- @parameters
- [x] [y] [z]
- @effect
- Sets the point of CAMERA, LIGHT or MESH_NODE centre.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_position_point(void)
-{
- check_arg_count(3);
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_CAMERA:
- {
- Edje_Part_Description_Camera *ed;
-
- ed = (Edje_Part_Description_Camera *)current_desc;
-
- ed->camera.position.point.x = FROM_DOUBLE(parse_float(0));
- ed->camera.position.point.y = FROM_DOUBLE(parse_float(1));
- ed->camera.position.point.z = FROM_DOUBLE(parse_float(2));
- break;
- }
-
- case EDJE_PART_TYPE_LIGHT:
- {
- Edje_Part_Description_Light *ed;
-
- ed = (Edje_Part_Description_Light *)current_desc;
-
- ed->light.position.point.x = FROM_DOUBLE(parse_float(0));
- ed->light.position.point.y = FROM_DOUBLE(parse_float(1));
- ed->light.position.point.z = FROM_DOUBLE(parse_float(2));
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.position.point.x = FROM_DOUBLE(parse_float(0));
- ed->mesh_node.position.point.y = FROM_DOUBLE(parse_float(1));
- ed->mesh_node.position.point.z = FROM_DOUBLE(parse_float(2));
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. camera and light attributes in non-CAMERA, non-LIGHT, and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @page edcref
-
- @property
- space
- @parameters
- [SPACE]
- @effect
- Explains in which relative coordinates the location of LIGHT
- or CAMERA considers. Valid space types:
- @li LOCAL
- @li PARENT
- @li WORLD
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_position_space(void)
-{
- unsigned int space;
-
- check_arg_count(1);
-
- space = parse_enum(0,
- "LOCAL", EVAS_CANVAS3D_SPACE_LOCAL,
- "PARENT", EVAS_CANVAS3D_SPACE_PARENT,
- "WORLD", EVAS_CANVAS3D_SPACE_WORLD,
- NULL);
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_CAMERA:
- {
- Edje_Part_Description_Camera *ed;
-
- ed = (Edje_Part_Description_Camera *)current_desc;
-
- ed->camera.position.space = space;
- break;
- }
-
- case EDJE_PART_TYPE_LIGHT:
- {
- Edje_Part_Description_Light *ed;
-
- ed = (Edje_Part_Description_Light *)current_desc;
-
- ed->light.position.space = space;
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.position.space = space;
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. camera and light attributes in non-CAMERA, non-LIGHT, and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @edcsubsection{collections_group_parts_description_camera,
- Group.Parts.Part.Description.Properties}
- */
-
-/**
- @page edcref
-
- @block
- properties
- @context
- part { type: CAMERA;
- description {
- ..
- properties {
- perspective: fovy aspect near far;
- }
- ..
- }
- }
- @description
- @endblock
-
- @property
- properties
- @parameters
- [fovy] [aspect] [near] [far]
- @effect
- Specifies the basic attributes of the camera.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_camera_properties(void)
-{
- check_arg_count(4);
-
- if (current_part->type == EDJE_PART_TYPE_CAMERA)
- {
- Edje_Part_Description_Camera *ed;
-
- ed = (Edje_Part_Description_Camera *)current_desc;
-
- ed->camera.camera.fovy = FROM_DOUBLE(parse_float(0));
- ed->camera.camera.aspect = FROM_DOUBLE(parse_float(1));
- ed->camera.camera.frustum_near = FROM_DOUBLE(parse_float(2));
- ed->camera.camera.frustum_far = FROM_DOUBLE(parse_float(3));
- }
- else if (current_part->type == EDJE_PART_TYPE_LIGHT)
- {
- Edje_Part_Description_Light *ed;
-
- ed = (Edje_Part_Description_Light *)current_desc;
-
- ed->light.light.fovy = FROM_DOUBLE(parse_float(0));
- ed->light.light.aspect = FROM_DOUBLE(parse_float(1));
- ed->light.light.frustum_near = FROM_DOUBLE(parse_float(2));
- ed->light.light.frustum_far = FROM_DOUBLE(parse_float(3));
- }
- else
- {
- ERR("parse error %s:%i. camera attributes in non-CAMERA and non-LIGHT part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @edcsubsection{collections_group_parts_description_properties,
- Group.Parts.Part.Description.Properties}
- */
-
-/**
- @page edcref
-
- @block
- properties
- @context
- part { type: [LIGHT or MESH_NODE];
- description {
- ..
- properties {
- ambient: red green blue alpha;
- diffuse: red green blue alpha;
- specular: red green blue alpha;
- shade: PHONG;
- material: AMBIENT;
- normal: 1;
- shininess: 50.0;
- }
- ..
- }
- }
- @description
- A properties block defines main lighting attributes of LIGHT and MESH_NODE.
- @endblock
-
- @property
- ambient
- @parameters
- [red] [green] [blue] [alpha] or "#[RR][GG][BB](AA)" or "#[R][G][B](A)"
- @effect
- Sets the components of the ambient color.
-
- Format:
- @li [red] [green] [blue] [alpha]: one integer [0-255] for each
- RGBA channel, i.e. 255 0 0 255
- @li "#[RR][GG][BB](AA)": string with two hex values per RGBA channel,
- i.e "#FF0000FF" or "#FF0000"
- @li "#[R][G][B](A)": string with one hex value per RGBA channel,
- i.e "#F00F" or "#F00".\n
- In string format you can omit alpha channel and it will be set to FF.
-
- Defaults: 50 50 50 255
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_properties_ambient(void)
-{
- check_arg_count(4);
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_LIGHT:
- {
- Edje_Part_Description_Light *ed;
-
- ed = (Edje_Part_Description_Light *)current_desc;
-
- parse_color(0, &(ed->light.properties.ambient));
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- parse_color(0, &(ed->mesh_node.properties.ambient));
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. light and mesh_node attributes in non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @page edcref
- @property
- diffuse
- @parameters
- [red] [green] [blue] [alpha] or "#[RR][GG][BB](AA)" or "#[R][G][B](A)"
- @effect
- Sets the components of the diffuse color.
-
- Format:
- @li [red] [green] [blue] [alpha]: one integer [0-255] for each
- RGBA channel, i.e. 255 0 0 255
- @li "#[RR][GG][BB](AA)": string with two hex values per RGBA channel,
- i.e "#FF0000FF" or "#FF0000"
- @li "#[R][G][B](A)": string with one hex value per RGBA channel,
- i.e "#F00F" or "#F00".\n
- In string format you can omit alpha channel and it will be set to FF.
-
- Defaults: 255 255 255 255
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_properties_diffuse(void)
-{
- check_arg_count(4);
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_LIGHT:
- {
- Edje_Part_Description_Light *ed;
-
- ed = (Edje_Part_Description_Light *)current_desc;
-
- parse_color(0, &(ed->light.properties.diffuse));
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- parse_color(0, &(ed->mesh_node.properties.diffuse));
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. light and mesh_node attributes in non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @page edcref
- @property
- specular
- @parameters
- [red] [green] [blue] [alpha] or "#[RR][GG][BB](AA)" or "#[R][G][B](A)"
- @effect
- Sets the components of the specular color.
-
- Format:
- @li [red] [green] [blue] [alpha]: one integer [0-255] for each
- RGBA channel, i.e. 255 0 0 255
- @li "#[RR][GG][BB](AA)": string with two hex values per RGBA channel,
- i.e "#FF0000FF" or "#FF0000"
- @li "#[R][G][B](A)": string with one hex value per RGBA channel,
- i.e "#F00F" or "#F00".\n
- In string format you can omit alpha channel and it will be set to FF.
-
- Defaults: 255 255 255 255
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_properties_specular(void)
-{
- check_arg_count(4);
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_LIGHT:
- {
- Edje_Part_Description_Light *ed;
-
- ed = (Edje_Part_Description_Light *)current_desc;
-
- parse_color(0, &(ed->light.properties.specular));
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- parse_color(0, &(ed->mesh_node.properties.specular));
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. light and mesh_node attributes in non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @page edcref
- @property
- material
- @parameters
- [MATERIAL]
- @effect
- Sets the color mode for the lighting. Valid color modes:
- @li AMBIENT
- @li DIFFUSE
- @li SPECULAR
- @li EMISSION
- @li NORMAL
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_properties_material(void)
-{
- unsigned int material_attrib;
-
- check_arg_count(1);
-
- material_attrib = parse_enum(0,
- "AMBIENT", EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT,
- "DIFFUSE", EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE,
- "SPECULAR", EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR,
- "EMISSION", EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION,
- "NORMAL", EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.properties.material_attrib = material_attrib;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- normal
- @parameters
- [0 or 1]
- @effect
- Sets the material attribute enable flag of the given material.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_properties_normal(void)
-{
- check_arg_count(1);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.properties.normal = parse_bool(0);
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- shininess
- @parameters
- [shininess]
- @effect
- Sets the shininess of the given material.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_properties_shininess(void)
-{
- check_arg_count(1);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.properties.shininess = FROM_DOUBLE(parse_float(0));
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- shade
- @parameters
- [SHADE]
- @effect
- Sets the shade mode for MESH_NODE. Valid shade modes:
- @li COLOR
- @li DIFFUSE
- @li FLAT
- @li PHONG
- @li MAP
- @li RENDER
- @endproperty
- */
-
-static void
-st_collections_group_parts_part_description_properties_shade(void)
-{
- unsigned int shade;
-
- check_arg_count(1);
-
- shade = parse_enum(0,
- "VERTEX_COLOR", EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR,
- "PARENT", EVAS_CANVAS3D_SHADER_MODE_DIFFUSE,
- "WORLD", EVAS_CANVAS3D_SHADER_MODE_FLAT,
- "PHONG", EVAS_CANVAS3D_SHADER_MODE_PHONG,
- "NORMAL_MAP", EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP,
- "RENDER", EVAS_CANVAS3D_SHADER_MODE_SHADOW_MAP_RENDER,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.properties.shade = shade;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @edcsubsection{collections_group_parts_description_orientation,
- Group.Parts.Part.Description.Orientation}
- */
-
-/**
- @page edcref
-
- @block
- orientation
- @context
- part { type: [CAMERA or MESH_NODE or LIGHT];
- description {
- ..
- orientation {
- look1: [x] [y] [z];
- look2: [x] [y] [z];
- look_to: [another part's name];
- angle_axis: [w] [x] [y] [z];
- quaternion: [x] [y] [z] [w];
- }
- ..
- }
- }
- @description
- The orientation block defines an orientation of CAMERA, LIGHT or MESH_NODE in the scene.
- @endblock
-
- @property
- look1
- @parameters
- [x] [y] [z]
- @effect
- Indicates a target point for CAMERA and MESH_NODE or for LIGHT to see or
- to illuminate.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_orientation_look1(void)
-{
- check_arg_count(3);
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_CAMERA:
- {
- SET_LOOK1(Camera, camera);
- break;
- }
-
- case EDJE_PART_TYPE_LIGHT:
- {
- SET_LOOK1(Light, light);
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- SET_LOOK1(Mesh_Node, mesh_node);
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. camera, light and mesh_node attributes in non-CAMERA, non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @page edcref
- @property
- look2
- @parameters
- [x] [y] [z]
- @effect
- Specifies the angle at which the target point will be caught.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_orientation_look2(void)
-{
- check_arg_count(3);
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_CAMERA:
- {
- SET_LOOK2(Camera, camera);
- break;
- }
-
- case EDJE_PART_TYPE_LIGHT:
- {
- SET_LOOK2(Light, light);
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- SET_LOOK2(Mesh_Node, mesh_node);
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. camera, light and mesh_node attributes in non-CAMERA, non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @page edcref
- @property
- look_to
- @parameters
- [another part's name]
- @effect
- Indicates another part to make target of CAMERA, LIGHT or MESH_NODE
- or LIGHT.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_orientation_look_to(void)
-{
- Edje_Part_Collection *pc;
-
- check_arg_count(1);
-
- pc = eina_list_data_get(eina_list_last(edje_collections));
-
- switch (current_part->type)
- {
- case EDJE_PART_TYPE_CAMERA:
- {
- SET_LOOK_TO(pc, Camera, camera);
- break;
- }
-
- case EDJE_PART_TYPE_LIGHT:
- {
- SET_LOOK_TO(pc, Light, light);
- break;
- }
-
- case EDJE_PART_TYPE_MESH_NODE:
- {
- SET_LOOK_TO(pc, Mesh_Node, mesh_node);
- break;
- }
-
- default:
- {
- ERR("parse error %s:%i. camera, light and mesh_node attributes in non-CAMERA, non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
- }
-}
-
-/**
- @page edcref
- @property
- angle_axis
- @parameters
- [x] [y] [z] [w]
- @effect
- Specifies the angle and indicates what proportions the MESH_NODE rotates in.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_orientation_angle_axis(void)
-{
- check_arg_count(4);
-
- if (current_part->type == EDJE_PART_TYPE_CAMERA)
- {
- SET_ANGLE_AXIS(Camera, camera)
- }
- else if (current_part->type == EDJE_PART_TYPE_LIGHT)
- {
- SET_ANGLE_AXIS(Light, light)
- }
- else if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- SET_ANGLE_AXIS(Mesh_Node, mesh_node)
- }
- else
- {
- ERR("parse error %s:%i. camera, light and mesh_node attributes in non-CAMERA, non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- quaternion
- @parameters
- [x] [y] [z] [w]
- @effect
- Specifies the axis and arccosinus of half angle to rotate on the MESH_NODE, CAMERA or LIGHT.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_orientation_quaternion(void)
-{
- check_arg_count(4);
-
- if (current_part->type == EDJE_PART_TYPE_CAMERA)
- {
- SET_QUATERNION(Camera, camera)
- }
- else if (current_part->type == EDJE_PART_TYPE_LIGHT)
- {
- SET_QUATERNION(Light, light)
- }
- else if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- SET_QUATERNION(Mesh_Node, mesh_node)
- }
- else
- {
- ERR("parse error %s:%i. camera, light and mesh_node attributes in non-CAMERA, non-LIGHT and non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- scale
- @parameters
- [scale_x] [scale_y] [scale_z]
- @effect
- Specifies the scale parameter for MESH_NODE.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_scale(void)
-{
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.scale_3d.x = FROM_DOUBLE(parse_float_range(0, 0.0, 1000.0));
- ed->mesh_node.scale_3d.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1000.0));
- ed->mesh_node.scale_3d.z = FROM_DOUBLE(parse_float_range(2, 0.0, 1000.0));
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @edcsubsection{collections_group_parts_description_texture,
- Group.Parts.Part.Description.Texture}
- */
-
-/**
- @page edcref
-
- @block
- texture
- @context
- part {
- description {
- ..
- texture {
- image: "file_name";
- wrap1: REPEAT;
- wrap2: REPEAT;
- filter1: NEAREST;
- filter2: NEAREST;
- }
- ..
- }
- }
- @description
- A texture block is used to set texture, this texture will be imposed on
- MESH_NODE model.
- @endblock
- */
-
-static void
-ob_collections_group_parts_part_description_texture(void)
-{
- Edje_Part_Description_Mesh_Node *ed;
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.texture.need_texture = EINA_TRUE;
- }
- else
- {
- ERR("parse error %s:%i. "
- "mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- shade
- image
- @parameters
- [SHADE]
- [texture's filename]
- @effect
- Sets the shade mode for MESH_NODE. Valid shade modes:
- @li COLOR
- @li DIFFUSE
- @li FLAT
- @li PHONG
- @li MAP
- @li RENDER
- Name of image to be used as previously declared in the image block.
- It's required in any mesh_node part.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_texture_image(void)
-{
- Edje_Part_Description_Mesh_Node *ed;
-
- check_arg_count(1);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- char *name;
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.texture.textured = EINA_TRUE;
-
- name = parse_str(0);
- data_queue_image_remove(&(ed->mesh_node.texture.id), &(ed->mesh_node.texture.set));
- data_queue_image_lookup(name, &(ed->mesh_node.texture.id), &(ed->mesh_node.texture.set));
- free(name);
- }
- else
- {
- ERR("parse error %s:%i. "
- "mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- wrap1
- @parameters
- [WRAP]
- @effect
- Sets the wrap mode for S-axis. Valid wrap modes:
- @li CLAMP
- @li REPEAT
- @li REFLECT
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_texture_wrap1(void)
-{
- unsigned int wrap1;
-
- check_arg_count(1);
-
- wrap1 = parse_enum(0,
- "CLAMP", EVAS_CANVAS3D_WRAP_MODE_CLAMP,
- "REPEAT", EVAS_CANVAS3D_WRAP_MODE_REPEAT,
- "REFLECT", EVAS_CANVAS3D_WRAP_MODE_REFLECT,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.texture.wrap1 = wrap1;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- wrap2
- @parameters
- [SHADE]
- @effect
- Sets the wrap mode for T-axis. Valid wrap modes:
- @li CLAMP
- @li REPEAT
- @li REFLECT
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_texture_wrap2(void)
-{
- unsigned int wrap2;
-
- check_arg_count(1);
-
- wrap2 = parse_enum(0,
- "CLAMP", EVAS_CANVAS3D_WRAP_MODE_CLAMP,
- "REPEAT", EVAS_CANVAS3D_WRAP_MODE_REPEAT,
- "REFLECT", EVAS_CANVAS3D_WRAP_MODE_REFLECT,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.texture.wrap2 = wrap2;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- filter1
- @parameters
- [FILTER]
- @effect
- Sets the minification filter used when down-scrolling. Valid filter types:
- @li NEAREST
- @li LINEAR
- @li NEAREST_MIPMAP_NEAREST
- @li LINEAR_MIPMAP_NEAREST
- @li NEAREST_MIPMAP_LINEAR
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_texture_filter1(void)
-{
- unsigned int filter1;
-
- check_arg_count(1);
-
- filter1 = parse_enum(0,
- "NEAREST", EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST,
- "LINEAR", EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR,
- "NEAREST_NEAREST", EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST,
- "LINEAR_NEAREST", EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST,
- "NEAREST_LINEAR", EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR,
- "LINEAR_LINEAR", EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.texture.filter1 = filter1;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- filter2
- @parameters
- [FILTER]
- @effect
- Sets the magnification filter used when down-scrolling. Valid filter types:
- @li NEAREST
- @li LINEAR
- @li NEAREST_MIPMAP_NEAREST
- @li LINEAR_MIPMAP_NEAREST
- @li NEAREST_MIPMAP_LINEAR
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_texture_filter2(void)
-{
- unsigned int filter2;
-
- check_arg_count(1);
-
- filter2 = parse_enum(0,
- "NEAREST", EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST,
- "LINEAR", EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR,
- "NEAREST_NEAREST", EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST,
- "LINEAR_NEAREST", EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST,
- "NEAREST_LINEAR", EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR,
- "LINEAR_LINEAR", EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.texture.filter2 = filter2;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @edcsubsection{collections_group_parts_description_mesh,Mesh}
- */
-
-/**
- @page edcref
-
- @block
- mesh
- @context
- part {
- description {
- ..
- mesh {
- geometry: "file_name";
- primitive: CUBE;
- assembly: LINEAR;
- }
- ..
- }
- }
- @description
- @endblock
-
- @property
- primitive
- @parameters
- [PRIMITIVE]
- @effect
- Specifies the type of primitive model to be used.
- Valid primitives:
- @li NONE
- @li CUBE
- @li SPHERE
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_mesh_primitive(void)
-{
- unsigned int primitive;
-
- check_arg_count(1);
-
- primitive = parse_enum(0,
- "NONE", EVAS_CANVAS3D_MESH_PRIMITIVE_NONE,
- "CUBE", EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE,
- "SPHERE", EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.mesh.primitive = primitive;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- assembly
- @parameters
- [ASSEMBLY]
- @effect
- Sets the vertex assembly of the mesh. Valid assemblies:
- @li POINTS
- @li LINES
- @li LINE_STRIP
- @li LINE_LOOP
- @li TRIANGLES
- @li TRIANGLE_STRIP
- @li TRIANGLE_FAN
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_mesh_assembly(void)
-{
- unsigned int assembly;
-
- check_arg_count(1);
-
- assembly = parse_enum(0,
- "POINTS", EVAS_CANVAS3D_VERTEX_ASSEMBLY_POINTS,
- "LINES", EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES,
- "LINE_STRIP", EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINE_STRIP,
- "LINE_LOOP", EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINE_LOOP,
- "TRIANGLES", EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES,
- "TRIANGLE_STRIP", EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_STRIP,
- "TRIANGLE_FAN", EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_FAN,
- NULL);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.mesh.assembly = assembly;
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-/**
- @page edcref
- @property
- geometry
- @parameters
- [model's filename]
- @effect
- Name of model to be used as previously declared in the model block.
- It's required in any mesh_node part.
- @endproperty
- */
-static void
-st_collections_group_parts_part_description_mesh_geometry(void)
-{
- Edje_Part_Description_Mesh_Node *ed;
-
- check_arg_count(1);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- char *name;
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- name = parse_str(0);
- if (!ecore_file_exists(name))
- {
- ERR("Unable to load model \"%s\". Check if path to file is correct (both directory and file name).",
- name);
- exit(-1);
- }
- data_queue_model_remove(&(ed->mesh_node.mesh.id), &(ed->mesh_node.mesh.set));
- data_queue_model_lookup(name, &(ed->mesh_node.mesh.id), &(ed->mesh_node.mesh.set));
- free(name);
- }
- else
- {
- ERR("parse error %s:%i. "
- "image attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
-
-static void
-st_collections_group_parts_part_description_mesh_frame(void)
-{
- check_arg_count(1);
-
- if (current_part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- Edje_Part_Description_Mesh_Node *ed;
-
- ed = (Edje_Part_Description_Mesh_Node *)current_desc;
-
- ed->mesh_node.mesh.frame = parse_int(0);
- }
- else
- {
- ERR("parse error %s:%i. mesh_node attributes in non-MESH_NODE part.",
- file_in, line - 1);
- exit(-1);
- }
-}
/** @edcsubsection{collections_group_parts_description_physics,
* Group.Parts.Part.Description.Physics} */
@@ -15235,6 +13492,25 @@ st_collections_group_parts_part_description_params_choice(void)
_st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_CHOICE);
}
+static void
+st_collections_group_parts_part_description_vector_frame(void)
+{
+ Edje_Part_Description_Vector *ed;
+
+ check_arg_count(1);
+
+ if (current_part->type != EDJE_PART_TYPE_VECTOR)
+ {
+ ERR("parse error %s:%i. vector attributes in non-VECTOR part.",
+ file_in, line - 1);
+ exit(-1);
+ }
+
+ ed = (Edje_Part_Description_Vector *)current_desc;
+
+ ed->vg.frame = parse_float_range(0, 0.0, 1.0);
+}
+
/** @edcsubsection{collections_group_parts_description_links,
* Group.Parts.Part.Description.Links} */
@@ -15475,7 +13751,6 @@ ob_collections_group_programs_program(void)
ep = mem_alloc(SZ(Edje_Program_Parser));
ep->id = -1;
- ep->source_3d_id = -1;
ep->tween.mode = EDJE_TWEEN_MODE_LINEAR;
ep->tween.use_duration_factor = EINA_FALSE;
ep->after = NULL;
@@ -15747,6 +14022,12 @@ st_collections_group_programs_program_action(void)
"PHYSICS_STOP", EDJE_ACTION_TYPE_PHYSICS_STOP,
"PHYSICS_ROT_SET", EDJE_ACTION_TYPE_PHYSICS_ROT_SET,
"PLAY_VIBRATION", EDJE_ACTION_TYPE_VIBRATION_SAMPLE,
+ "VG_ANIM_STOP", EDJE_ACTION_TYPE_VG_ANIM_STOP,
+ "VG_ANIM_PAUSE", EDJE_ACTION_TYPE_VG_ANIM_PAUSE,
+ "VG_ANIM_RESUME", EDJE_ACTION_TYPE_VG_ANIM_RESUME,
+ "VG_ANIM_PLAY", EDJE_ACTION_TYPE_VG_ANIM_PLAY,
+ "VG_ANIM_REWIND", EDJE_ACTION_TYPE_VG_ANIM_REWIND,
+ "VG_ANIM_LOOP", EDJE_ACTION_TYPE_VG_ANIM_LOOP,
NULL);
if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
{
@@ -15908,6 +14189,12 @@ st_collections_group_programs_program_action(void)
case EDJE_ACTION_TYPE_ACTION_STOP:
case EDJE_ACTION_TYPE_PHYSICS_FORCES_CLEAR:
case EDJE_ACTION_TYPE_PHYSICS_STOP:
+ case EDJE_ACTION_TYPE_VG_ANIM_STOP:
+ case EDJE_ACTION_TYPE_VG_ANIM_PAUSE:
+ case EDJE_ACTION_TYPE_VG_ANIM_RESUME:
+ case EDJE_ACTION_TYPE_VG_ANIM_PLAY:
+ case EDJE_ACTION_TYPE_VG_ANIM_REWIND:
+ case EDJE_ACTION_TYPE_VG_ANIM_LOOP:
check_arg_count(1);
break;
@@ -16187,6 +14474,12 @@ _program_target_add(char *name)
case EDJE_ACTION_TYPE_PHYSICS_STOP:
case EDJE_ACTION_TYPE_PHYSICS_ROT_SET:
#endif
+ case EDJE_ACTION_TYPE_VG_ANIM_STOP:
+ case EDJE_ACTION_TYPE_VG_ANIM_PAUSE:
+ case EDJE_ACTION_TYPE_VG_ANIM_RESUME:
+ case EDJE_ACTION_TYPE_VG_ANIM_PLAY:
+ case EDJE_ACTION_TYPE_VG_ANIM_REWIND:
+ case EDJE_ACTION_TYPE_VG_ANIM_LOOP:
data_queue_part_lookup(pc, name, &(et->id));
break;
@@ -16842,7 +15135,7 @@ edje_cc_handlers_wildcard(void)
if (((!!ed->state.name) != (!!current_desc->state.name)) ||
(ed->state.name && strcmp(ed->state.name, current_desc->state.name)) ||
- (fabs(ed->state.value - st) > DBL_EPSILON)) continue;
+ (!EINA_DBL_EQ(ed->state.value, st))) continue;
current_desc = ed;
break;
}
diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c
index f932eac9e9..57cb438c07 100644
--- a/src/bin/edje/edje_cc_out.c
+++ b/src/bin/edje/edje_cc_out.c
@@ -232,7 +232,6 @@ static Eina_List *program_lookups = NULL;
static Eina_List *group_lookups = NULL;
static Eina_List *face_group_lookups = NULL;
static Eina_List *image_lookups = NULL;
-static Eina_List *model_lookups = NULL;
static Eina_Hash *part_dest_lookup = NULL;
static Eina_Hash *part_pc_dest_lookup = NULL;
@@ -716,13 +715,6 @@ check_program(Edje_Part_Collection *pc, Edje_Program *ep, Eet_File *ef)
Edje_Program_Target *et;
Eina_List *l;
unsigned int i = 0;
- int camera_id = -1;
-
- for (i = 0; (i < pc->parts_count) && (camera_id < 0); i++)
- {
- if (pc->parts[i]->type == EDJE_PART_TYPE_CAMERA)
- camera_id = i;
- }
if ((!ep->targets) && (ep->action == EDJE_ACTION_TYPE_SIGNAL_EMIT))
{
@@ -744,7 +736,8 @@ check_program(Edje_Part_Collection *pc, Edje_Program *ep, Eet_File *ef)
if (et->id >= (int) pc->parts_count)
{
- ERR("Target id '%d' greater than possible index '%d'.", et->id, (int) pc->parts_count - 1);
+ ERR("In group '%s' program '%s', target id '%d' greater than possible index '%d'.",
+ pc->part ? pc->part : "", ep->name ? ep->name : "", et->id, (int) pc->parts_count - 1);
exit(-1);
}
@@ -774,19 +767,6 @@ check_program(Edje_Part_Collection *pc, Edje_Program *ep, Eet_File *ef)
}
}
}
- if (((ep->action == EDJE_ACTION_TYPE_STATE_SET) ||
- (ep->action == EDJE_ACTION_TYPE_SIGNAL_EMIT)) &&
- (et->id < (int)pc->parts_count) &&
- (part->type == EDJE_PART_TYPE_MESH_NODE) &&
- (strstr(ep->signal, "mouse")))
- {
- for (i = 0; (i < pc->parts_count) && (ep->source_3d_id < 0); i++)
- {
- if (!strcmp(pc->parts[i]->name, ep->source))
- ep->source_3d_id = i;
- }
- ep->source = mem_strdup(pc->parts[camera_id]->name);
- }
}
}
@@ -806,9 +786,6 @@ _alias_clean(Edje_Part_Collection_Directory_Entry *ce)
ce->count.TABLE = 0;
ce->count.EXTERNAL = 0;
ce->count.PROXY = 0;
- ce->count.MESH_NODE = 0;
- ce->count.LIGHT = 0;
- ce->count.CAMERA = 0;
ce->count.SPACER = 0;
ce->count.VECTOR = 0;
ce->count.part = 0;
@@ -1416,31 +1393,54 @@ data_write_vectors(Eet_File *ef, int *vector_num)
buf = eina_strbuf_new();
for (i = 0; i < edje_file->image_dir->vectors_count; i++)
{
- if (!beta)
- error_and_abort(ef, "Vector part are currently a beta feature, please enable them by running edje_cc with -beta.");
-
vector = &edje_file->image_dir->vectors[i];
EINA_LIST_FOREACH(img_dirs, ll, s)
{
eina_strbuf_reset(buf);
eina_strbuf_append_printf(buf, "%s" EINA_PATH_SEP_S "%s", s, vector->entry);
- f = eina_file_open(eina_strbuf_string_get(buf), EINA_FALSE);
- if (!f) continue;
- eina_file_close(f);
- if (efl_file_set(vg, eina_strbuf_string_get(buf)))
- error_and_abort(ef, "Failed to parse svg : %s", vector->entry);
- if (efl_file_load(vg))
- error_and_abort(ef, "Failed to parse svg : %s", vector->entry);
+ if (vector->type == EDJE_VECTOR_FILE_TYPE_LOTTIE)
+ {
+ char *lottie_data = NULL;
+ int lottie_data_len = 0;
- eina_strbuf_reset(buf);
- eina_strbuf_append_printf(buf, "edje/vectors/%i", vector->id);
- if (!efl_file_save(vg, eet_file_get(ef), eina_strbuf_string_get(buf), NULL))
- error_and_abort(ef, "Failed to write data in Eet for svg :%s", vector->entry);
+ f = eina_file_open(eina_strbuf_string_get(buf), EINA_FALSE);
+ if (!f) continue;
- *vector_num += 1;
- found = EINA_TRUE;
- break;
+ lottie_data_len = (int) eina_file_size_get(f);
+ lottie_data = eina_file_map_all(f, EINA_FILE_POPULATE);
+
+ eina_strbuf_reset(buf);
+ eina_strbuf_append_printf(buf, "edje/vectors/%i", vector->id);
+ eet_write(ef, eina_strbuf_string_get(buf), lottie_data, lottie_data_len, EET_COMPRESSION_NONE);
+
+ eina_file_map_free(f, lottie_data);
+ eina_file_close(f);
+
+ *vector_num += 1;
+ found = EINA_TRUE;
+ break;
+ }
+ else
+ {
+ f = eina_file_open(eina_strbuf_string_get(buf), EINA_FALSE);
+ if (!f) continue;
+ eina_file_close(f);
+
+ if (efl_file_set(vg, eina_strbuf_string_get(buf)))
+ error_and_abort(ef, "Failed to parse svg : %s", vector->entry);
+ if (efl_file_load(vg))
+ error_and_abort(ef, "Failed to parse svg : %s", vector->entry);
+
+ eina_strbuf_reset(buf);
+ eina_strbuf_append_printf(buf, "edje/vectors/%i", vector->id);
+ if (!efl_file_save(vg, eet_file_get(ef), eina_strbuf_string_get(buf), NULL))
+ error_and_abort(ef, "Failed to write data in Eet for svg :%s", vector->entry);
+
+ *vector_num += 1;
+ found = EINA_TRUE;
+ break;
+ }
}
if (!found)
error_and_abort(ef, "Unable to find the svg :%s", vector->entry);
@@ -1588,39 +1588,6 @@ data_write_images(void)
}
static void
-data_check_models(Eet_File *ef EINA_UNUSED, int *model_num EINA_UNUSED)
-{
- int i;
-
- if (!((edje_file) && (edje_file->model_dir))) return;
-
- for (i = 0; i < (int)edje_file->model_dir->entries_count; i++)
- {
- Edje_Model_Directory_Entry *model;
- Eina_List *ll;
- char *s;
- Eina_Bool file_exist = EINA_FALSE;
-
- model = &edje_file->model_dir->entries[i];
-
- EINA_LIST_FOREACH(model_dirs, ll, s)
- {
- char buf[PATH_MAX];
-
- snprintf(buf, sizeof(buf), "%s/%s", s, model->entry);
-
- file_exist = file_exist || ecore_file_exists(buf);
- }
- if (!file_exist)
- {
- ERR("Unable to load model \"%s\". Check if path to file is correct (both directory and file name).",
- model->entry);
- exit(-1);
- }
- }
-}
-
-static void
data_thread_sounds(void *data, Ecore_Thread *thread EINA_UNUSED)
{
Sound_Write *sw = data;
@@ -1747,7 +1714,7 @@ data_thread_mo(void *data, Ecore_Thread *thread EINA_UNUSED)
Eina_List *ll;
char *dir_path = NULL;
- char mo_path[PATH_MAX];
+ char mo_path[PATH_MAX] = {0};
char moid_str[50];
Eina_File *f = NULL;
void *m = NULL;
@@ -2806,7 +2773,6 @@ data_write(void)
{
Eet_File *ef;
Eet_Error err;
- int model_num = 0;
int sound_num = 0;
int mo_num = 0;
int vibration_num = 0;
@@ -2893,8 +2859,6 @@ data_write(void)
INF("fontmap: %3.5f", ecore_time_get() - t); t = ecore_time_get();
data_write_vectors(ef, &vector_num);
INF("vectors: %3.5f", ecore_time_get() - t); t = ecore_time_get();
- data_check_models(ef, &model_num);
- INF("models: %3.5f", ecore_time_get() - t); t = ecore_time_get();
data_write_fonts(ef, &font_num);
INF("fonts: %3.5f", ecore_time_get() - t); t = ecore_time_get();
data_write_sounds(ef, &sound_num);
@@ -3486,49 +3450,6 @@ data_queue_image_remove(int *dest, Eina_Bool *set)
}
void
-data_queue_model_lookup(char *name, int *dest, Eina_Bool *set)
-{
- Image_Lookup *il;
-
- il = mem_alloc(SZ(Image_Lookup));
- model_lookups = eina_list_append(model_lookups, il);
- il->name = mem_strdup(name);
- il->dest = dest;
- il->set = set;
-}
-
-void
-data_queue_model_remove(int *dest, Eina_Bool *set)
-{
- Eina_List *l;
- Image_Lookup *il;
-
- EINA_LIST_FOREACH(model_lookups, l, il)
- {
- if (il->dest == dest && il->set == set)
- {
- model_lookups = eina_list_remove_list(model_lookups, l);
- free(il->name);
- free(il);
- return;
- }
- }
-}
-
-void
-data_queue_copied_model_lookup(int *src, int *dest, Eina_Bool *set)
-{
- Eina_List *l;
- Image_Lookup *il;
-
- EINA_LIST_FOREACH(model_lookups, l, il)
- {
- if (il->dest == src)
- data_queue_model_lookup(il->name, dest, set);
- }
-}
-
-void
data_queue_copied_image_lookup(int *src, int *dest, Eina_Bool *set)
{
Eina_List *l;
@@ -3582,7 +3503,7 @@ _data_image_h_size_compare_cb(const void *data1, const void *data2)
}
static void
-_data_image_sets_size_set()
+_data_image_sets_size_set(void)
{
Evas *evas;
Edje_Image_Directory_Set *set;
@@ -3689,7 +3610,6 @@ _data_image_id_update(Eina_List *images_unused_list)
Edje_Part_Collection *pc;
Edje_Part *part;
Edje_Part_Description_Image *part_desc_image;
- Edje_Part_Description_Mesh_Node *part_desc_mesh_node;
Edje_Part_Image_Id *tween_id;
unsigned int i, j, desc_it;
Eina_List *l, *l2, *l3;
@@ -3716,15 +3636,6 @@ _data_image_id_update(Eina_List *images_unused_list)
} \
}
-#define PART_DESC_PROXY_ID_UPDATE \
- EINA_LIST_FOREACH(images_unused_list, l3, iui) \
- { \
- if ((iui) && (part_desc_mesh_node->mesh_node.texture.id == iui->old_id)) \
- { \
- part_desc_mesh_node->mesh_node.texture.id = iui->new_id; \
- break; \
- } \
- }
EINA_LIST_FOREACH_SAFE(edje_collections, l, l2, pc)
{
for (i = 0; i < pc->parts_count; i++)
@@ -3741,17 +3652,6 @@ _data_image_id_update(Eina_List *images_unused_list)
PART_DESC_IMAGE_ID_UPDATE
}
}
- else if (part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- part_desc_mesh_node = (Edje_Part_Description_Mesh_Node *)part->default_desc;
- if (!part_desc_mesh_node) continue;
- PART_DESC_PROXY_ID_UPDATE
- for (j = 0; j < part->other.desc_count; j++)
- {
- part_desc_mesh_node = (Edje_Part_Description_Mesh_Node *)part->other.desc[j];
- PART_DESC_PROXY_ID_UPDATE
- }
- }
}
}
for (i = 0; i < edje_file->image_dir->sets_count; i++)
@@ -3774,46 +3674,6 @@ _data_image_id_update(Eina_List *images_unused_list)
}
}
-static void
-_data_model_id_update(Eina_List *models_unused_list)
-{
- Image_Unused_Ids *iui;
- Edje_Part_Collection *pc;
- Edje_Part *part;
- Edje_Part_Description_Mesh_Node *part_desc_mesh_node;
- unsigned int i, j;
- Eina_List *l, *l2, *l3;
-
-#define PART_DESC_MODEL_ID_UPDATE \
- EINA_LIST_FOREACH(models_unused_list, l3, iui) \
- { \
- if ((iui) && (part_desc_mesh_node->mesh_node.mesh.id == iui->old_id)) \
- { \
- part_desc_mesh_node->mesh_node.mesh.id = iui->new_id; \
- break; \
- } \
- } \
-
- EINA_LIST_FOREACH_SAFE(edje_collections, l, l2, pc)
- {
- for (i = 0; i < pc->parts_count; i++)
- {
- part = pc->parts[i];
- if (part->type == EDJE_PART_TYPE_MESH_NODE)
- {
- part_desc_mesh_node = (Edje_Part_Description_Mesh_Node *)part->default_desc;
- if (!part_desc_mesh_node) continue;
- PART_DESC_MODEL_ID_UPDATE
- for (j = 0; j < part->other.desc_count; j++)
- {
- part_desc_mesh_node = (Edje_Part_Description_Mesh_Node *)part->other.desc[j];
- PART_DESC_MODEL_ID_UPDATE
- }
- }
- }
- }
-}
-
void
data_process_lookups(void)
{
@@ -3823,11 +3683,9 @@ data_process_lookups(void)
Program_Lookup *program;
Group_Lookup *group;
Image_Lookup *image;
- Image_Lookup *model;
Eina_List *l2;
Eina_List *l;
Eina_Hash *images_in_use;
- Eina_Hash *models_in_use;
char *group_name;
Eina_Bool is_lua = EINA_FALSE;
Image_Unused_Ids *iui;
@@ -4153,7 +4011,7 @@ free_group:
if (edje_file->image_dir && !is_lua)
{
Edje_Image_Directory_Entry *de, *de_last, *img;
- Edje_Image_Directory_Set *set, *set_last, *set_realloc;
+ Edje_Image_Directory_Set *set;
Edje_Image_Directory_Set_Entry *set_e;
Eina_List *images_unused_list = NULL;
unsigned int i;
@@ -4165,11 +4023,12 @@ free_group:
if (de->entry && eina_hash_find(images_in_use, de->entry))
continue;
+ printf("Warning: Image '%s' not used\n", de->entry);
INF("Image '%s' in resource 'edje/image/%i' will not be included as it is unused.",
de->entry, de->id);
- /* so as not to write the unused images, moved last image in the
- list to unused image position and check it */
+ // so as not to write the unused images, moved last image in the
+ // list to unused image position and check it
free((void *)de->entry);
de->entry = NULL;
de_last = edje_file->image_dir->entries + edje_file->image_dir->entries_count - 1;
@@ -4178,8 +4037,8 @@ free_group:
images_unused_list = eina_list_append(images_unused_list, iui);
iui->new_id = i;
de_last->id = i;
- memcpy(de, de_last, sizeof (Edje_Image_Directory_Entry));
- --i; /* need to check a moved image on this index */
+ memcpy(de, de_last, sizeof(Edje_Image_Directory_Entry));
+ --i; // need to check a moved image on this index
edje_file->image_dir->entries_count--;
img = realloc(edje_file->image_dir->entries,
sizeof (Edje_Image_Directory_Entry) * edje_file->image_dir->entries_count);
@@ -4193,6 +4052,17 @@ free_group:
if (set->name && eina_hash_find(images_in_use, set->name))
continue;
+ printf("Warning: Image set '%s' not used\n", set->name);
+ EINA_LIST_FOREACH(set->entries, l, set_e)
+ {
+ printf(" Contains '%s' size %ix%i -> %ix%i\n",
+ set_e->name,
+ set_e->size.min.w, set_e->size.min.h,
+ set_e->size.max.w, set_e->size.max.h);
+ }
+/* No need to redo id's - we will warn of unused images - fix in src
+ * Also .. this is broken and messes up id's ... so easyer - complain
+ * to develoepr to clean up the theme...
INF("Set '%s' will not be included as it is unused.", set->name);
free((void *)set->name);
@@ -4214,6 +4084,7 @@ free_group:
set_realloc = realloc(edje_file->image_dir->sets,
sizeof(Edje_Image_Directory_Set) * edje_file->image_dir->sets_count);
edje_file->image_dir->sets = set_realloc;
+ */
}
/* update image id in parts */
@@ -4225,86 +4096,6 @@ free_group:
}
eina_hash_free(images_in_use);
-
- models_in_use = eina_hash_string_superfast_new(NULL);
-
- EINA_LIST_FREE(model_lookups, model)
- {
- Eina_Bool find = EINA_FALSE;
-
- if (edje_file->model_dir)
- {
- Edje_Model_Directory_Entry *de;
- unsigned int i;
-
- for (i = 0; i < edje_file->model_dir->entries_count; ++i)
- {
- de = edje_file->model_dir->entries + i;
-
- if ((de->entry) && (!strcmp(de->entry, model->name)))
- {
- *(model->dest) = de->id;
- *(model->set) = EINA_FALSE;
- find = EINA_TRUE;
-
- if (!eina_hash_find(models_in_use, model->name))
- eina_hash_direct_add(models_in_use, de->entry, de);
- break;
- }
- }
- }
-
- if (!find)
- {
- ERR("Unable to find model name \"%s\".", model->name);
- exit(-1);
- }
-
- free(model->name);
- free(model);
- }
-
- if (edje_file->model_dir && !is_lua)
- {
- Edje_Model_Directory_Entry *de, *de_last, *mdl;
- Eina_List *models_unused_list = NULL;
- unsigned int i;
-
- for (i = 0; i < edje_file->model_dir->entries_count; ++i)
- {
- de = edje_file->model_dir->entries + i;
-
- if (de->entry && eina_hash_find(models_in_use, de->entry))
- continue;
-
- INF("Model '%s' in resource 'edje/model/%i' will not be included as it is unused.",
- de->entry, de->id);
-
- /* so as not to write the unused models, moved last model in the
- list to unused model position and check it */
- free((void *)de->entry);
- de->entry = NULL;
- de_last = edje_file->model_dir->entries + edje_file->model_dir->entries_count - 1;
- iui = mem_alloc(SZ(Image_Unused_Ids));
- iui->old_id = de_last->id;
- models_unused_list = eina_list_append(models_unused_list, iui);
- iui->new_id = i;
- de_last->id = i;
- memcpy(de, de_last, sizeof (Edje_Model_Directory_Entry));
- --i; /* need to check a moved model on this index */
- edje_file->model_dir->entries_count--;
- mdl = realloc(edje_file->model_dir->entries,
- sizeof (Edje_Model_Directory_Entry) * edje_file->model_dir->entries_count);
- edje_file->model_dir->entries = mdl;
- }
-
- /* update model id in parts */
- if (models_unused_list) _data_model_id_update(models_unused_list);
- EINA_LIST_FREE(models_unused_list, iui)
- free(iui);
- }
-
- eina_hash_free(models_in_use);
}
static void
diff --git a/src/bin/edje/edje_cc_parse.c b/src/bin/edje/edje_cc_parse.c
index ad1a2c95ac..32d06350e3 100644
--- a/src/bin/edje/edje_cc_parse.c
+++ b/src/bin/edje/edje_cc_parse.c
@@ -30,6 +30,9 @@
#define EDJE_1_21_SUPPORTED " -DEFL_VERSION_1_21=1 "
#define EDJE_1_22_SUPPORTED " -DEFL_VERSION_1_22=1 "
#define EDJE_1_23_SUPPORTED " -DEFL_VERSION_1_23=1 "
+#define EDJE_1_24_SUPPORTED " -DEFL_VERSION_1_24=1 "
+#define EDJE_1_25_SUPPORTED " -DEFL_VERSION_1_25=1 "
+#define EDJE_1_26_SUPPORTED " -DEFL_VERSION_1_26=1 "
#define EDJE_CC_EFL_VERSION_SUPPORTED \
EDJE_1_18_SUPPORTED \
@@ -37,7 +40,10 @@
EDJE_1_20_SUPPORTED \
EDJE_1_21_SUPPORTED \
EDJE_1_22_SUPPORTED \
- EDJE_1_23_SUPPORTED
+ EDJE_1_23_SUPPORTED \
+ EDJE_1_24_SUPPORTED \
+ EDJE_1_25_SUPPORTED \
+ EDJE_1_26_SUPPORTED
static void new_object(void);
static void new_statement(void);
@@ -1944,7 +1950,7 @@ _calcf(char op, double a, double b)
return a;
case '/':
- if (b != 0) a /= b;
+ if (EINA_DBL_NONZERO(b)) a /= b;
else
ERR("%s:%i divide by zero", file_in, line - 1);
return a;
@@ -1954,7 +1960,7 @@ _calcf(char op, double a, double b)
return a;
case '%':
- if (0 != b) a = (double)((int)a % (int)b);
+ if (EINA_DBL_NONZERO(b)) a = (double)((int)a % (int)b);
else
ERR("%s:%i modula by zero", file_in, line - 1);
return a;
diff --git a/src/bin/edje/edje_external_inspector.c b/src/bin/edje/edje_external_inspector.c
index 3a4f937b06..718c02fc74 100644
--- a/src/bin/edje/edje_external_inspector.c
+++ b/src/bin/edje/edje_external_inspector.c
@@ -614,9 +614,7 @@ main(int argc, char **argv)
ecore_app_no_system_modules();
- ecore_init();
eina_init();
- edje_init();
_log_dom = eina_log_domain_register
("edje_external_inspector", EINA_COLOR_YELLOW);
@@ -628,6 +626,8 @@ main(int argc, char **argv)
goto error_log;
}
+ edje_init();
+
arg_index = ecore_getopt_parse(&optdesc, values, argc, argv);
if (arg_index < 0)
{
@@ -670,10 +670,9 @@ main(int argc, char **argv)
free(module_patterns_str);
error_getopt:
+ edje_shutdown();
eina_log_domain_unregister(_log_dom);
error_log:
- edje_shutdown();
- ecore_shutdown();
eina_shutdown();
return ret;
diff --git a/src/bin/edje/edje_multisense_convert.c b/src/bin/edje/edje_multisense_convert.c
index 50576efab2..3c8046037b 100644
--- a/src/bin/edje/edje_multisense_convert.c
+++ b/src/bin/edje/edje_multisense_convert.c
@@ -256,7 +256,6 @@ _edje_multisense_encode_to_ogg_vorbis(char *snd_path, double quality, SF_INFO sf
vorbis_analysis_init(&vd, &vi);
vorbis_block_init(&vd, &vb);
- srand(time(NULL));
ogg_stream_init(&os, rand());
ogg_packet header;
diff --git a/src/bin/edje/edje_player.c b/src/bin/edje/edje_player.c
index cacfdf2974..7d79ec0d7a 100644
--- a/src/bin/edje/edje_player.c
+++ b/src/bin/edje/edje_player.c
@@ -31,12 +31,16 @@ struct opts
Eina_Bool print;
Eina_Bool slave_mode;
double scale;
+ int pad;
char *title;
};
static Eina_Bool _edje_load_or_show_error(Evas_Object *edje, const char *file, const char *group);
static Ecore_Evas *win;
+static Evas *evas;
+static Evas_Object *bg, *bg2 = NULL, *edje;
+static struct opts opts;
static void
_win_title_set(const char *group, const char *file)
@@ -754,71 +758,37 @@ _print_message(void *data EINA_UNUSED, Evas_Object *edje EINA_UNUSED, Edje_Messa
}
static void
-_reset_size_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *stack, void *event_info EINA_UNUSED)
-{
- Evas_Coord minw, minh;
- Evas_Object *edje = data;
-
- edje_object_size_min_get(edje, &minw, &minh);
- if ((minw <= 0) && (minh <= 0))
- edje_object_size_min_calc(edje, &minw, &minh);
-
- evas_object_size_hint_min_set(stack, minw, minh);
-}
-
-static void
-_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *stack EINA_UNUSED, void *event_info)
+_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Key_Down *ev = event_info;
- struct opts *opts = data;
if ((!strcmp(ev->keyname, "equal")) ||
(!strcmp(ev->keyname, "plus")))
- opts->scale += 0.1;
+ opts.scale += 0.1;
else if ((!strcmp(ev->keyname, "minus")) ||
(!strcmp(ev->keyname, "underscore")))
- opts->scale -= 0.1;
+ opts.scale -= 0.1;
else if ((!strcmp(ev->keyname, "0")))
- opts->scale = 1.0;
- if (opts->scale < 0.1) opts->scale = 0.1;
- else if (opts->scale > 10.0)
- opts->scale = 1.0;
- edje_scale_set(opts->scale);
-}
-
-static Evas_Object *
-_create_stack(Evas *evas, const struct opts *opts)
-{
- Evas_Object *stack = evas_object_box_add(evas);
- if (!stack)
- {
- fputs("ERROR: could not create object stack (box).\n", stderr);
- return NULL;
- }
- evas_object_box_layout_set(stack, evas_object_box_layout_stack, NULL, NULL);
- evas_object_resize(stack, opts->size.w, opts->size.h);
- evas_object_size_hint_weight_set(stack, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(stack, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(stack);
- return stack;
+ opts.scale = 1.0;
+ if (opts.scale < 0.1) opts.scale = 0.1;
+ else if (opts.scale > 10.0)
+ opts.scale = 10.0;
+ edje_scale_set(opts.scale);
}
static Evas_Object *
-_create_bg(Evas *evas, const struct opts *opts)
+_create_bg(void)
{
- const unsigned char *color = opts->color;
- Evas_Object *bg = evas_object_rectangle_add(evas);
- if (!bg)
+ const unsigned char *color = opts.color;
+ Evas_Object *o = evas_object_rectangle_add(evas);
+ if (!o)
{
fputs("ERROR: could not create background.\n", stderr);
return NULL;
}
- evas_object_resize(bg, opts->size.w, opts->size.h);
- evas_object_color_set(bg, color[0], color[1], color[2], 255);
- evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(bg);
- return bg;
+ evas_object_color_set(o, color[0], color[1], color[2], 255);
+ evas_object_show(o);
+ return o;
}
static void
@@ -827,7 +797,6 @@ _edje_reload(void *data EINA_UNUSED, Evas_Object *obj, const char *emission EINA
const char *file;
const char *group;
edje_object_signal_callback_del(obj, "edje,change,file", "edje", _edje_reload);
-
edje_object_file_get(obj, &file, &group);
_edje_load_or_show_error(obj, file, group);
}
@@ -862,32 +831,14 @@ _edje_load_or_show_error(Evas_Object *edje, const char *file, const char *group)
Eina_File *f = NULL;
const char *errmsg;
int err;
- Evas_Canvas3D_Scene *scene = NULL;
- Evas_Canvas3D_Node *root_node = NULL;
f = eina_file_open(file, EINA_FALSE);
- if (!(edje_mmap_3d_has(f, group)))
+ if (edje_object_file_set(edje, file, group))
{
- if (edje_object_file_set(edje, file, group))
- {
- edje_object_signal_callback_add(edje, "edje,change,file", "edje", _edje_reload, NULL);
- evas_object_focus_set(edje, EINA_TRUE);
- eina_file_close(f);
- return EINA_TRUE;
- }
- }
- else
- {
- if (edje_object_file_set(edje, file, group))
- {
- if (edje_3d_object_add(edje, &root_node, scene))
- {
- edje_object_signal_callback_add(edje, "edje,change,file", "edje", _edje_reload, NULL);
- evas_object_focus_set(edje, EINA_TRUE);
- eina_file_close(f);
- return EINA_TRUE;
- }
- }
+ edje_object_signal_callback_add(edje, "edje,change,file", "edje", _edje_reload, NULL);
+ evas_object_focus_set(edje, EINA_TRUE);
+ eina_file_close(f);
+ return EINA_TRUE;
}
err = edje_object_load_error_get(edje);
@@ -899,73 +850,73 @@ _edje_load_or_show_error(Evas_Object *edje, const char *file, const char *group)
}
static Evas_Object *
-_create_edje(Evas *evas, const struct opts *opts)
+_create_edje(void)
{
Evas_Coord minw, minh, maxw, maxh;
- Evas_Object *edje = edje_object_add(evas);
- if (!edje)
+ Evas_Object *o = edje_object_add(evas);
+ if (!o)
{
fputs("ERROR: could not create edje.\n", stderr);
return NULL;
}
- if (opts->group)
+ if (opts.group)
{
- if (!_edje_load_or_show_error(edje, opts->file, opts->group))
+ if (!_edje_load_or_show_error(o, opts.file, opts.group))
{
evas_object_del(edje);
return NULL;
}
- if (!opts->title) _win_title_set(opts->group, opts->file);
+ if (!opts.title) _win_title_set(opts.group, opts.file);
}
else
{
- if (edje_file_group_exists(opts->file, "main"))
+ if (edje_file_group_exists(opts.file, "main"))
{
- if (!_edje_load_or_show_error(edje, opts->file, "main"))
+ if (!_edje_load_or_show_error(o, opts.file, "main"))
{
evas_object_del(edje);
return NULL;
}
- if (!opts->title) _win_title_set("main", opts->file);
+ if (!opts.title) _win_title_set("main", opts.file);
}
else
{
- Eina_List *groups = edje_file_collection_list(opts->file);
+ Eina_List *groups = edje_file_collection_list(opts.file);
const char *group;
if (!groups)
{
fprintf(stderr, "ERROR: file '%s' has no groups!\n",
- opts->file);
+ opts.file);
evas_object_del(edje);
return NULL;
}
group = groups->data;
- if (!_edje_load_or_show_error(edje, opts->file, group))
+ if (!_edje_load_or_show_error(o, opts.file, group))
{
edje_file_collection_list_free(groups);
evas_object_del(edje);
return NULL;
}
- if (!opts->title) _win_title_set(group, opts->file);
+ if (!opts.title) _win_title_set(group, opts.file);
edje_file_collection_list_free(groups);
}
}
- evas_object_smart_callback_add(edje, "circular,dependency", _edje_circul, opts->group);
+ evas_object_smart_callback_add(o, "circular,dependency", _edje_circul, opts.group);
- edje_object_size_max_get(edje, &maxw, &maxh);
- edje_object_size_min_get(edje, &minw, &minh);
+ edje_object_size_max_get(o, &maxw, &maxh);
+ edje_object_size_min_get(o, &minw, &minh);
if ((minw <= 0) && (minh <= 0))
- edje_object_size_min_calc(edje, &minw, &minh);
+ edje_object_size_min_calc(o, &minw, &minh);
- evas_object_size_hint_max_set(edje, maxw, maxh);
- evas_object_size_hint_min_set(edje, minw, minh);
+ ecore_evas_size_max_set(win,
+ maxw > 0 ? (maxw + opts.pad * 2) : 0,
+ maxh > 0 ? (maxh + opts.pad * 2) : 0);
+ ecore_evas_size_min_set(win, (minw + opts.pad * 2), (minh + opts.pad * 2));
- evas_object_size_hint_weight_set(edje, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(edje, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(edje);
+ evas_object_show(o);
- return edje;
+ return o;
}
static unsigned char
@@ -988,6 +939,18 @@ _cb_delete(EINA_UNUSED Ecore_Evas *ee)
ecore_main_loop_quit();
}
+static void
+_cb_resize(Ecore_Evas *ee)
+{
+ int w, h;
+ ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
+ evas_object_move(edje, opts.pad, opts.pad);
+ evas_object_resize(edje, w - (opts.pad * 2), h - (opts.pad * 2));
+ evas_object_move(bg, opts.pad, opts.pad);
+ evas_object_resize(bg, w - (opts.pad * 2), h - (opts.pad * 2));
+ if (bg2) evas_object_resize(bg2, w, h);
+}
+
const Ecore_Getopt optdesc = {
"edje_player",
"%prog [options] <filename.edj>",
@@ -1010,8 +973,8 @@ const Ecore_Getopt optdesc = {
('Z', "size", "size to use in wxh form.", "WxH",
ecore_getopt_callback_size_parse, NULL),
ECORE_GETOPT_CALLBACK_ARGS
- ('c', "bg-color", "Color of the background (if not shaped or alpha)",
- "RRGGBB", _parse_color, NULL),
+ ('c', "bg-color", "Color of the background (if not shaped or alpha) e.g. 255,150,50",
+ "R,G,B", _parse_color, NULL),
ECORE_GETOPT_STORE_TRUE
('b', "borderless", "Display window without border."),
ECORE_GETOPT_STORE_TRUE
@@ -1029,6 +992,8 @@ const Ecore_Getopt optdesc = {
('S', "slave-mode", "Listen for commands on stdin"),
ECORE_GETOPT_STORE_DOUBLE
('z', "scale", "Set scale factor"),
+ ECORE_GETOPT_STORE_INT
+ ('P', "pad", "Set pixel padding around object"),
ECORE_GETOPT_LICENSE('L', "license"),
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
ECORE_GETOPT_VERSION('V', "version"),
@@ -1040,13 +1005,9 @@ const Ecore_Getopt optdesc = {
int
main(int argc, char **argv)
{
- Evas *evas;
- Evas_Object *stack, *edje;
- struct opts opts;
Eina_Bool quit_option = EINA_FALSE;
int args;
Eina_List *groups;
- Eina_File *f = NULL;
const char *group;
Ecore_Getopt_Value values[] = {
ECORE_GETOPT_VALUE_STR(opts.group),
@@ -1063,6 +1024,7 @@ main(int argc, char **argv)
ECORE_GETOPT_VALUE_BOOL(opts.print),
ECORE_GETOPT_VALUE_BOOL(opts.slave_mode),
ECORE_GETOPT_VALUE_DOUBLE(opts.scale),
+ ECORE_GETOPT_VALUE_INT(opts.pad),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
@@ -1119,33 +1081,6 @@ main(int argc, char **argv)
goto end;
}
- group = eina_list_data_get(eina_list_last(groups));
-
- f = eina_file_open(opts.file, EINA_FALSE);
- if (edje_mmap_3d_has(f, group))
- {
- Eina_List *engine_list, *n;
- Eina_Bool opengl_x11_has = EINA_FALSE, wayland_egl_has = EINA_FALSE;
- const char *engine;
- engine_list = ecore_evas_engines_get();
- EINA_LIST_FOREACH(engine_list, n, engine)
- {
- if (!strcmp(engine, "wayland_egl"))
- {
- wayland_egl_has = EINA_TRUE;
- break;
- }
- else if (!strcmp(engine, "opengl_x11"))
- opengl_x11_has = EINA_TRUE;
- }
- if (wayland_egl_has)
- opts.engine = "wayland_egl";
- else if (opengl_x11_has)
- opts.engine = "opengl_x11";
- }
- eina_file_close(f);
- edje_file_collection_list_free(groups);
-
if (opts.size.w <= 0) opts.size.w = 320;
if (opts.size.h <= 0) opts.size.h = 240;
win = ecore_evas_new(opts.engine, 0, 0, opts.size.w, opts.size.h, NULL);
@@ -1160,37 +1095,32 @@ main(int argc, char **argv)
ecore_evas_callback_delete_request_set(win, _cb_delete);
evas = ecore_evas_get(win);
- stack = _create_stack(evas, &opts);
- if (!stack)
- {
- goto free_ecore_evas;
- }
-
- ecore_evas_object_associate(win, stack, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
if (opts.alpha)
ecore_evas_alpha_set(win, EINA_TRUE);
else if (opts.shaped)
ecore_evas_shaped_set(win, EINA_TRUE);
- else
- {
- Evas_Object *bg = _create_bg(evas, &opts);
- if (bg) evas_object_box_append(stack, bg);
- }
- edje = _create_edje(evas, &opts);
- if (edje)
- evas_object_box_append(stack, edje);
- else
+ if (opts.pad > 0)
{
- goto free_ecore_evas;
+ bg2 = evas_object_rectangle_add(evas);
+ evas_object_resize(bg2, opts.size.w, opts.size.h);
+ if (opts.alpha)
+ evas_object_color_set(bg2, 0, 0, 0, 64);
+ else
+ evas_object_color_set(bg2, 64, 64, 64, 255);
+ evas_object_show(bg2);
}
+ bg = _create_bg();
+
+ edje = _create_edje();
+ if (!edje) goto free_ecore_evas;
- evas_object_focus_set(stack, EINA_TRUE);
- evas_object_event_callback_add(stack, EVAS_CALLBACK_KEY_DOWN,
+ ecore_evas_callback_resize_set(win, _cb_resize);
+ _cb_resize(win);
+ evas_object_focus_set(bg, EINA_TRUE);
+ evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN,
_key_down, &opts);
- evas_object_event_callback_add(stack, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _reset_size_hints, edje);
if (opts.print)
{
diff --git a/src/bin/edje/meson.build b/src/bin/edje/meson.build
index 0fff2cd6dc..e715571852 100644
--- a/src/bin/edje/meson.build
+++ b/src/bin/edje/meson.build
@@ -6,7 +6,8 @@ edje_bin_deps = [
ecore_file, ecore_input,
ecore_imf, ecore_imf_evas,
embryo, efreet, eio,
- edje, ecore_evas
+ edje, ecore_evas,
+ intl,
]
edje_cc_src = [
@@ -30,6 +31,11 @@ edje_cc = executable('edje_cc',
link_args : bin_linker_args
)
+asan_option =[]
+if get_option('b_sanitize') == 'address'
+ asan_option= 'ASAN_OPTIONS=detect_leaks=0'
+endif
+
if meson.is_cross_build()
_edje_cc = find_program('edje_cc', native: true)
edje_cc_path = _edje_cc.path()
@@ -39,8 +45,7 @@ else
if sys_windows == true
edje_cc_exe = [edje_cc.full_path()]
else
- env = find_program('env', native: true)
- edje_cc_exe = [env, 'EFL_RUN_IN_TREE=1', edje_cc.full_path()]
+ edje_cc_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', edje_cc.full_path()]
endif
edje_depends = [edje_cc, epp, evas_engine_buffer_mod, embryo_cc]
endif
@@ -92,8 +97,7 @@ if meson.is_cross_build()
edje_codegen_path = _edje_codegen.path()
edje_codegen_exe = [_edje_codegen]
else
- env = find_program('env', native: true)
- edje_codegen_exe = [env, 'EFL_RUN_IN_TREE=1', edje_codegen.full_path()]
+ edje_codegen_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', edje_codegen.full_path()]
endif
edje_pick = executable('edje_pick',
diff --git a/src/bin/eet/eet_main.c b/src/bin/eet/eet_main.c
index 7da5cfd4d3..8061dd956e 100644
--- a/src/bin/eet/eet_main.c
+++ b/src/bin/eet/eet_main.c
@@ -440,17 +440,6 @@ int
main(int argc,
char **argv)
{
- if (!eet_init())
- return -1;
-
- _eet_main_log_dom = eina_log_domain_register("eet_main", EINA_COLOR_CYAN);
- if(_eet_main_log_dom < -1)
- {
- EINA_LOG_ERR("Impossible to create a log domain for eet_main.");
- eet_shutdown();
- return -1;
- }
-
if (argc < 2)
{
help:
@@ -468,6 +457,17 @@ help:
" eet -h print out this help message\n"
" eet -V [--version] show program version\n"
);
+
+ return -1;
+ }
+
+ if (!eet_init())
+ return -1;
+
+ _eet_main_log_dom = eina_log_domain_register("eet_main", EINA_COLOR_CYAN);
+ if(_eet_main_log_dom < -1)
+ {
+ EINA_LOG_ERR("Impossible to create a log domain for eet_main.");
eet_shutdown();
return -1;
}
diff --git a/src/bin/eeze/eeze_mount/eeze_mount.c b/src/bin/eeze/eeze_mount/eeze_mount.c
index 04c644f4ef..9e9dd16cdd 100644
--- a/src/bin/eeze/eeze_mount/eeze_mount.c
+++ b/src/bin/eeze/eeze_mount/eeze_mount.c
@@ -109,7 +109,7 @@ main(int argc, char *argv[])
if (argc - args > 1)
{
eeze_disk_mount_point_set(disk, mount_point);
- if (eina_str_has_extension(dev, "iso"))
+ if (eina_str_has_extension(dev, ".iso"))
{
int f;
f = eeze_disk_mountopts_get(disk);
diff --git a/src/bin/efl/efl_debug.c b/src/bin/efl/efl_debug.c
index f7829c6545..7cf9768115 100644
--- a/src/bin/efl/efl_debug.c
+++ b/src/bin/efl/efl_debug.c
@@ -254,7 +254,6 @@ EINA_DEBUG_OPCODES_ARRAY_DEFINE(ops,
int
main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
- eina_init();
ecore_init();
my_argc = argc;
@@ -271,7 +270,6 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
ecore_main_loop_begin();
ecore_shutdown();
- eina_shutdown();
return 0;
}
diff --git a/src/bin/efl/efl_debugd.c b/src/bin/efl/efl_debugd.c
index b23db7544c..84f789254b 100644
--- a/src/bin/efl/efl_debugd.c
+++ b/src/bin/efl/efl_debugd.c
@@ -663,11 +663,11 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
ecore_app_no_system_modules();
eina_init();
+ _log_dom = eina_log_domain_register("efl_debugd", EINA_COLOR_CYAN);
ecore_init();
ecore_con_init();
_retval = EXIT_SUCCESS;
- _log_dom = eina_log_domain_register("efl_debugd", EINA_COLOR_CYAN);
_string_to_opcode_hash = eina_hash_string_superfast_new(NULL);
_opcode_register("Daemon/opcode_register", EINA_DEBUG_OPCODE_REGISTER, _opcode_register_cb);
@@ -683,6 +683,7 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
ecore_con_shutdown();
ecore_shutdown();
+ eina_log_domain_unregister(_log_dom);
eina_shutdown();
return _retval;
diff --git a/src/bin/efl_wl/efl_wl_test.c b/src/bin/efl_canvas_wl/efl_canvas_wl_test.c
index bf5b2ad4d1..6bedb9ce47 100644
--- a/src/bin/efl_wl/efl_wl_test.c
+++ b/src/bin/efl_canvas_wl/efl_canvas_wl_test.c
@@ -1,18 +1,17 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include "Efl_Wl.h"
+#include "Efl_Canvas_Wl.h"
#include "Elementary.h"
static Evas_Object *win;
static Eina_Strbuf *buf;
-static Ecore_Exe *exe;
+static Eo *exe;
-static Eina_Bool
-del_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Exe_Event_Del *ev)
+static void
+del_handler(void *d EINA_UNUSED, const Efl_Event *ev)
{
- if (ev->exe == exe) ecore_main_loop_quit();
- return ECORE_CALLBACK_RENEW;
+ if (ev->object == exe) ecore_main_loop_quit();
}
static void
@@ -24,8 +23,8 @@ focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev
static Eina_Bool
dostuff(void *data)
{
- exe = efl_wl_run(data, eina_strbuf_string_get(buf));
- ecore_event_handler_add(ECORE_EXE_EVENT_DEL, (Ecore_Event_Handler_Cb)del_handler, NULL);
+ exe = efl_canvas_wl_run(data, eina_strbuf_string_get(buf));
+ efl_event_callback_add(exe, EFL_TASK_EVENT_EXIT, del_handler, NULL);
evas_object_focus_set(data, 1);
return EINA_FALSE;
}
@@ -63,9 +62,9 @@ main(int argc, char *argv[])
elm_win_autodel_set(win, 1);
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
- o = efl_wl_add(evas_object_evas_get(win));
- efl_wl_aspect_set(o, 1);
- efl_wl_minmax_set(o, 1);
+ o = efl_add(EFL_CANVAS_WL_CLASS, win);
+ efl_canvas_wl_aspect_propagate_set(o, 1);
+ efl_canvas_wl_minmax_propagate_set(o, 1);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_event_callback_add(o, EVAS_CALLBACK_CHANGED_SIZE_HINTS, hints_changed, win);
diff --git a/src/bin/efl_wl/efl_wl_test_stack.c b/src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c
index 51cd598984..49849e07e8 100644
--- a/src/bin/efl_wl/efl_wl_test_stack.c
+++ b/src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c
@@ -1,7 +1,7 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include "Efl_Wl.h"
+#include "Efl_Canvas_Wl.h"
#include "Elementary.h"
static Evas_Object *win;
@@ -18,7 +18,7 @@ static unsigned int n;
static Eina_Bool
dostuff(void *data)
{
- efl_wl_run(data, cmds[n++]);
+ efl_canvas_wl_run(data, cmds[n++]);
evas_object_focus_set(data, 1);
return n != num_cmds;
}
@@ -26,13 +26,13 @@ dostuff(void *data)
static void
prev_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
- efl_wl_prev(data);
+ efl_canvas_wl_surface_prev(data);
}
static void
next_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
- efl_wl_next(data);
+ efl_canvas_wl_surface_next(data);
}
int
@@ -69,7 +69,7 @@ main(int argc, char *argv[])
evas_object_show(next);
elm_table_pack(o, next, 1, 0, 1, 1);
- comp = efl_wl_add(evas_object_evas_get(win));
+ comp = efl_add(EFL_CANVAS_WL_CLASS, win);
evas_object_size_hint_min_set(comp, 640, 480);
elm_table_pack(o, comp, 0, 1, 2, 1);
evas_object_size_hint_align_set(comp, EVAS_HINT_FILL, EVAS_HINT_FILL);
diff --git a/src/bin/efl_canvas_wl/meson.build b/src/bin/efl_canvas_wl/meson.build
new file mode 100644
index 0000000000..278a2c58db
--- /dev/null
+++ b/src/bin/efl_canvas_wl/meson.build
@@ -0,0 +1,13 @@
+executable('efl_canvas_wl_test',
+ 'efl_canvas_wl_test.c',
+ include_directories : config_dir,
+ dependencies: [efl_canvas_wl, efl_canvas_wl_deps, efl_canvas_wl_pub_deps, elementary],
+ install: true,
+)
+
+executable('efl_canvas_wl_test_stack',
+ 'efl_canvas_wl_test_stack.c',
+ include_directories : config_dir,
+ dependencies: [efl_canvas_wl, efl_canvas_wl_deps, efl_canvas_wl_pub_deps, elementary],
+ install: true,
+)
diff --git a/src/bin/efl_wl/meson.build b/src/bin/efl_wl/meson.build
deleted file mode 100644
index c95cd0e767..0000000000
--- a/src/bin/efl_wl/meson.build
+++ /dev/null
@@ -1,13 +0,0 @@
-executable('efl_wl_test',
- 'efl_wl_test.c',
- include_directories : config_dir,
- dependencies: [efl_wl, elementary],
- install: true,
-)
-
-executable('efl_wl_test_stack',
- 'efl_wl_test_stack.c',
- include_directories : config_dir,
- dependencies: [efl_wl, elementary],
- install: true,
-)
diff --git a/src/bin/efreet/efreet_icon_cache_create.c b/src/bin/efreet/efreet_icon_cache_create.c
index 9f3141b8f9..44d6097b1b 100644
--- a/src/bin/efreet/efreet_icon_cache_create.c
+++ b/src/bin/efreet/efreet_icon_cache_create.c
@@ -38,38 +38,36 @@ static Eina_Hash *icon_themes = NULL;
static Eina_Bool
cache_directory_modified(Eina_Hash *dirs, const char *dir)
{
- Efreet_Cache_Directory *dcache;
- long long time;
-
- if (!dirs) return EINA_TRUE;
-
- time = ecore_file_mod_time(dir);
- if (!time)
- return EINA_FALSE;
- dcache = eina_hash_find(dirs, dir);
- if (!dcache)
- {
+ Efreet_Cache_Directory *dcache;
+ Efreet_Cache_Check check;
+
+ if (!dirs) return EINA_TRUE;
+ if (!efreet_file_cache_fill(dir, &check)) return EINA_FALSE;
+ dcache = eina_hash_find(dirs, dir);
+ if (!dcache)
+ {
dcache = malloc(sizeof (Efreet_Cache_Directory));
if (!dcache) return EINA_TRUE;
-
- dcache->modified_time = time;
+ dcache->check = check;
eina_hash_add(dirs, dir, dcache);
- }
- else if (dcache->modified_time == time) return EINA_FALSE;
- dcache->modified_time = time;
-
- return EINA_TRUE;
+ }
+ else if (efreet_file_cache_check(&check, &dcache->check))
+ return EINA_FALSE;
+ else
+ dcache->check = check;
+ return EINA_TRUE;
}
static Eina_Bool
cache_extension_lookup(const char *ext)
{
- unsigned int i;
+ unsigned int i;
- for (i = 0; i < exts->count; ++i)
- if (!strcmp(exts->data[i], ext))
- return EINA_TRUE;
- return EINA_FALSE;
+ for (i = 0; i < exts->count; ++i)
+ {
+ if (!strcmp(exts->data[i], ext)) return EINA_TRUE;
+ }
+ return EINA_FALSE;
}
static Eina_Bool
@@ -164,6 +162,7 @@ cache_fallback_scan(Eina_Hash *icons, Eina_Hash *dirs)
}
#endif
+ cache_fallback_scan_dir(icons, dirs, "/usr/local/share/pixmaps");
cache_fallback_scan_dir(icons, dirs, "/usr/share/pixmaps");
return EINA_TRUE;
@@ -217,10 +216,42 @@ check_fallback_changed(Efreet_Cache_Icon_Theme *theme)
}
#endif
+ if (cache_directory_modified(theme->dirs, "/usr/local/share/pixmaps")) return EINA_TRUE;
if (cache_directory_modified(theme->dirs, "/usr/share/pixmaps")) return EINA_TRUE;
return EINA_FALSE;
}
+typedef struct
+{
+ char *path;
+ int name_start;
+} Scanned_Entry;
+
+static Eina_Hash *already_scanned_path = NULL;
+
+static void
+cache_theme_change_verify(Efreet_Cache_Icon_Theme *theme)
+{
+ Eina_Bool changed = EINA_FALSE;
+ Eina_List *l;
+ Efreet_Icon_Theme_Directory *d;
+ char buf[PATH_MAX], *tdir, *sep;
+
+ tdir = strdup(theme->path);
+ sep = strrchr(tdir, '/');
+ if (sep) *sep = 0;
+ EINA_LIST_FOREACH(theme->theme.directories, l, d)
+ {
+ snprintf(buf, sizeof(buf), "%s/%s", tdir, d->name);
+ if (cache_directory_modified(theme->dirs, buf))
+ {
+ changed = EINA_TRUE;
+ }
+ }
+ free(tdir);
+ if (changed) theme->changed = changed;
+}
+
static Eina_Bool
cache_scan_path_dir(Efreet_Icon_Theme *theme,
const char *path,
@@ -230,29 +261,64 @@ cache_scan_path_dir(Efreet_Icon_Theme *theme,
Eina_Iterator *it;
char buf[PATH_MAX];
Eina_File_Direct_Info *entry;
+ Eina_List *dirs = NULL;
+ Eina_List *l;
+ char *ext;
+ Scanned_Entry *scentry;
snprintf(buf, sizeof(buf), "%s/%s", path, dir->name);
+ // we wont ever free this - no point
+ if (!already_scanned_path)
+ already_scanned_path = eina_hash_string_superfast_new(NULL);
+ dirs = eina_hash_find(already_scanned_path, buf);
+ if ((intptr_t)dirs == (intptr_t)(-1L)) return EINA_TRUE;
+ else if (!dirs)
+ {
+ it = eina_file_stat_ls(buf);
+ if (!it)
+ {
+ eina_hash_add(already_scanned_path, buf, (void *)(intptr_t)(-1L));
+ return EINA_TRUE;
+ }
+
+ EINA_ITERATOR_FOREACH(it, entry)
+ {
+ if (entry->type == EINA_FILE_DIR) continue;
+ ext = strrchr(entry->path + entry->name_start, '.');
+ if (!ext || !cache_extension_lookup(ext)) continue;
+ scentry = malloc(sizeof(Scanned_Entry));
+ if (!scentry)
+ {
+ ERR("Out of memory");
+ exit(1);
+ }
+ scentry->name_start = entry->name_start;
+ scentry->path = strdup(entry->path);
+ if (!scentry->path)
+ {
+ ERR("Out of memory");
+ exit(1);
+ }
+ dirs = eina_list_append(dirs, scentry);
+ }
+ eina_iterator_free(it);
+ if (dirs)
+ eina_hash_add(already_scanned_path, buf, dirs);
+ else
+ eina_hash_add(already_scanned_path, buf, (void *)(intptr_t)(-1L));
+ }
- it = eina_file_stat_ls(buf);
- if (!it) return EINA_TRUE;
-
- EINA_ITERATOR_FOREACH(it, entry)
+ EINA_LIST_FOREACH(dirs, l, scentry)
{
Efreet_Cache_Icon *icon;
char *name;
- char *ext;
const char **tmp;
unsigned int i;
- if (entry->type == EINA_FILE_DIR)
- continue;
-
- ext = strrchr(entry->path + entry->name_start, '.');
- if (!ext || !cache_extension_lookup(ext))
- continue;
-
+ ext = strrchr(scentry->path + scentry->name_start, '.');
+ if (!ext) continue;
/* icon with known extension */
- name = entry->path + entry->name_start;
+ name = scentry->path + scentry->name_start;
*ext = '\0';
icon = eina_hash_find(icons, name);
@@ -282,7 +348,7 @@ cache_scan_path_dir(Efreet_Icon_Theme *theme,
/* check if the path already exist */
for (j = 0; j < icon->icons[i]->paths_count; ++j)
- if (!strcmp(icon->icons[i]->paths[j], entry->path))
+ if (!strcmp(icon->icons[i]->paths[j], scentry->path))
break;
if (j != icon->icons[i]->paths_count)
@@ -346,12 +412,9 @@ cache_scan_path_dir(Efreet_Icon_Theme *theme,
exit(1);
}
icon->icons[i]->paths = tmp;
- icon->icons[i]->paths[icon->icons[i]->paths_count] = eina_stringshare_add(entry->path);
+ icon->icons[i]->paths[icon->icons[i]->paths_count] = eina_stringshare_add(scentry->path);
eina_array_push(strs, icon->icons[i]->paths[icon->icons[i]->paths_count++]);
}
-
- eina_iterator_free(it);
-
return EINA_TRUE;
}
@@ -362,7 +425,9 @@ cache_scan_path(Efreet_Icon_Theme *theme, Eina_Hash *icons, const char *path)
Efreet_Icon_Theme_Directory *dir;
EINA_LIST_FOREACH(theme->directories, l, dir)
+ {
if (!cache_scan_path_dir(theme, path, dir, icons)) return EINA_FALSE;
+ }
return EINA_TRUE;
}
@@ -509,13 +574,13 @@ icon_theme_index_read(Efreet_Cache_Icon_Theme *theme, const char *path)
Efreet_Ini *ini;
Efreet_Icon_Theme_Directory *dir;
const char *tmp;
- long long time;
+ Efreet_Cache_Check check;
if (!theme || !path) return EINA_FALSE;
- time = ecore_file_mod_time(path);
- if (!time) return EINA_FALSE;
- if (theme->path && !strcmp(theme->path, path) && theme->last_cache_check >= time)
+ if (!efreet_file_cache_fill(path, &check)) return EINA_FALSE;
+ if (theme->path && !strcmp(theme->path, path) &&
+ efreet_file_cache_check(&check, &(theme->check)))
{
/* no change */
theme->valid = 1;
@@ -526,8 +591,7 @@ icon_theme_index_read(Efreet_Cache_Icon_Theme *theme, const char *path)
theme->path = eina_stringshare_add(path);
eina_array_push(strs, theme->path);
}
- if (time > theme->last_cache_check)
- theme->last_cache_check = time;
+ theme->check = check;
theme->changed = 1;
ini = efreet_ini_new(path);
@@ -642,10 +706,10 @@ cache_theme_scan(const char *dir)
Efreet_Cache_Icon_Theme *theme;
const char *name;
const char *path;
- long long time;
+ Efreet_Cache_Check check;
+ Efreet_Cache_Directory *d;
- time = ecore_file_mod_time(entry->path);
- if (!time) continue;
+ if (!efreet_file_cache_fill(entry->path, &check)) continue;
if ((entry->type != EINA_FILE_DIR) &&
(entry->type != EINA_FILE_LNK))
@@ -667,10 +731,26 @@ cache_theme_scan(const char *dir)
(void *)theme->theme.name.internal, theme);
theme->changed = 1;
}
- if (time > theme->last_cache_check)
- {
- theme->last_cache_check = time;
+
+ d = NULL;
+ if (theme->dirs)
+ d = eina_hash_find(theme->dirs, entry->path);
+ if (!d)
+ {
+ if (!theme->dirs)
+ theme->dirs = eina_hash_string_superfast_new(NULL);
theme->changed = 1;
+ d = NEW(Efreet_Cache_Directory, 1);
+ d->check = check;
+ eina_hash_add(theme->dirs, entry->path, d);
+ }
+ else
+ {
+ if (!efreet_file_cache_check(&check, &(d->check)))
+ {
+ d->check = check;
+ theme->changed = 1;
+ }
}
/* TODO: We need to handle change in order of included paths */
@@ -730,8 +810,7 @@ icon_theme_free(Efreet_Cache_Icon_Theme *theme)
eina_list_free(theme->theme.paths);
eina_list_free(theme->theme.inherits);
- EINA_LIST_FREE(theme->theme.directories, data)
- free(data);
+ EINA_LIST_FREE(theme->theme.directories, data) free(data);
if (theme->dirs) efreet_hash_free(theme->dirs, free);
free(theme);
}
@@ -912,6 +991,7 @@ main(int argc, char **argv)
}
#endif
+ cache_theme_scan("/usr/local/share/pixmaps");
cache_theme_scan("/usr/share/pixmaps");
/* scan icons */
@@ -923,7 +1003,7 @@ main(int argc, char **argv)
if (!theme->theme.name.name) continue;
#endif
INF("scan theme %s", theme->theme.name.name);
-
+ cache_theme_change_verify(theme);
theme->changed = check_changed(theme);
if (flush)
theme->changed = EINA_TRUE;
@@ -978,18 +1058,18 @@ main(int argc, char **argv)
icons_it = eina_hash_iterator_tuple_new(icons);
EINA_ITERATOR_FOREACH(icons_it, tuple)
- eet_data_write(icon_ef, icon_edd, tuple->key, tuple->data, 1);
+ eet_data_write(icon_ef, icon_edd, tuple->key, tuple->data, EET_COMPRESSION_SUPERFAST);
eina_iterator_free(icons_it);
- INF("theme change: %s %lld", theme->theme.name.internal, theme->last_cache_check);
- eet_data_write(theme_ef, theme_edd, theme->theme.name.internal, theme, 1);
+ INF("theme change: %s %lld", theme->theme.name.internal, theme->check.mtime);
+ eet_data_write(theme_ef, theme_edd, theme->theme.name.internal, theme, EET_COMPRESSION_SUPERFAST);
}
eina_hash_free(themes);
eina_hash_free(icons);
changed = EINA_TRUE;
}
- eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, 1);
+ eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, EET_COMPRESSION_SUPERFAST);
eet_close(icon_ef);
efreet_setowner(efreet_icon_cache_file(theme->theme.name.internal));
free(icon_version);
@@ -1061,17 +1141,17 @@ main(int argc, char **argv)
icons_it = eina_hash_iterator_tuple_new(icons);
EINA_ITERATOR_FOREACH(icons_it, tuple)
- eet_data_write(icon_ef, fallback_edd, tuple->key, tuple->data, 1);
+ eet_data_write(icon_ef, fallback_edd, tuple->key, tuple->data, EET_COMPRESSION_SUPERFAST);
eina_iterator_free(icons_it);
}
eina_hash_free(icons);
- eet_data_write(theme_ef, theme_edd, EFREET_CACHE_ICON_FALLBACK, theme, 1);
+ eet_data_write(theme_ef, theme_edd, EFREET_CACHE_ICON_FALLBACK, theme, EET_COMPRESSION_SUPERFAST);
}
icon_theme_free(theme);
- eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, 1);
+ eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, EET_COMPRESSION_SUPERFAST);
eet_close(icon_ef);
efreet_setowner(efreet_icon_cache_file(EFREET_CACHE_ICON_FALLBACK));
free(icon_version);
@@ -1079,7 +1159,7 @@ main(int argc, char **argv)
eina_hash_free(icon_themes);
/* save data */
- eet_data_write(theme_ef, efreet_version_edd(), EFREET_CACHE_VERSION, theme_version, 1);
+ eet_data_write(theme_ef, efreet_version_edd(), EFREET_CACHE_VERSION, theme_version, EET_COMPRESSION_SUPERFAST);
eet_close(theme_ef);
theme_ef = NULL;
diff --git a/src/bin/efreet/efreetd.c b/src/bin/efreet/efreetd.c
index 1ef7d339c2..fbff09b58f 100644
--- a/src/bin/efreet/efreetd.c
+++ b/src/bin/efreet/efreetd.c
@@ -21,6 +21,7 @@
int efreetd_log_dom = -1;
Eina_Mempool *efreetd_mp_stat = NULL;
+FILE *efreetd_log_file = NULL;
void
quit(void)
@@ -32,7 +33,7 @@ int
main(int argc, char *argv[])
{
char path[PATH_MAX + 128], buf[PATH_MAX];
- FILE *log;
+ FILE *logf;
int fd;
const char *log_file_dir = NULL;
const char *hostname_str = NULL;
@@ -69,9 +70,10 @@ main(int argc, char *argv[])
ERR("Can't create log file '%s'\b", path);
goto tmp_error;
}
- log = fdopen(fd, "wb");
- if (!log) goto tmp_error;
- eina_log_print_cb_set(eina_log_print_cb_file, log);
+ logf = fdopen(fd, "wb");
+ if (!logf) goto tmp_error;
+ eina_log_print_cb_set(eina_log_print_cb_file, logf);
+ efreetd_log_file = logf;
efreetd_log_dom = eina_log_domain_register("efreetd", EFREETD_DEFAULT_LOG_COLOR);
if (efreetd_log_dom < 0)
{
diff --git a/src/bin/efreet/efreetd_cache.c b/src/bin/efreet/efreetd_cache.c
index 4b801a8fc0..d7a7f2539f 100644
--- a/src/bin/efreet/efreetd_cache.c
+++ b/src/bin/efreet/efreetd_cache.c
@@ -19,6 +19,8 @@
#include <sys/stat.h>
#include <unistd.h>
+extern FILE *efreetd_log_file;
+
static Eina_Hash *icon_change_monitors = NULL;
static Eina_Hash *icon_change_monitors_mon = NULL;
static Eina_Hash *desktop_change_monitors = NULL;
@@ -376,10 +378,13 @@ icon_cache_update_cache_cb(void *data EINA_UNUSED)
if (icon_flush)
eina_strbuf_append(file, " -f");
icon_flush = EINA_FALSE;
- icon_cache_exe =
- ecore_exe_pipe_run(eina_strbuf_string_get(file), ECORE_EXE_PIPE_READ |
- ECORE_EXE_PIPE_READ_LINE_BUFFERED,
- NULL);
+ fprintf(efreetd_log_file, "[%09.3f] Run:\n %s\n", ecore_time_get(),
+ eina_strbuf_string_get(file));
+ fflush(efreetd_log_file);
+ icon_cache_exe = ecore_exe_pipe_run
+ (eina_strbuf_string_get(file),
+ ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED,
+ NULL);
eina_strbuf_free(file);
@@ -424,10 +429,13 @@ desktop_cache_update_cache_cb(void *data EINA_UNUSED)
}
}
INF("Run desktop cache creation: %s", eina_strbuf_string_get(file));
+ fprintf(efreetd_log_file, "[%09.3f] Run:\n %s\n", ecore_time_get(),
+ eina_strbuf_string_get(file));
+ fflush(efreetd_log_file);
desktop_cache_exe = ecore_exe_pipe_run
- (eina_strbuf_string_get(file), ECORE_EXE_PIPE_READ |
- ECORE_EXE_PIPE_READ_LINE_BUFFERED,
- NULL);
+ (eina_strbuf_string_get(file),
+ ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED,
+ NULL);
eina_strbuf_free(file);
@@ -698,6 +706,7 @@ icon_changes_listen(void)
}
#endif
eina_inarray_flush(stack);
+ icon_changes_listen_recursive(stack, "/usr/local/share/pixmaps", EINA_TRUE);
icon_changes_listen_recursive(stack, "/usr/share/pixmaps", EINA_TRUE);
eina_inarray_free(stack);
eina_strbuf_free(buf);
@@ -801,6 +810,8 @@ cache_exe_data_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
Eina_Bool update = EINA_FALSE;
+ fprintf(efreetd_log_file, "[%09.3f] Data desktop_cache_create\n", ecore_time_get());
+ fflush(efreetd_log_file);
if ((ev->lines) && (*ev->lines->line == 'c')) update = EINA_TRUE;
if (!desktop_exists)
send_signal_desktop_cache_build();
@@ -811,11 +822,15 @@ cache_exe_data_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
Eina_Bool update = EINA_FALSE;
+ fprintf(efreetd_log_file, "[%09.3f] Data icon_cache_create\n", ecore_time_get());
+ fflush(efreetd_log_file);
if ((ev->lines) && (*ev->lines->line == 'c')) update = EINA_TRUE;
send_signal_icon_cache_update(update);
}
else if (ev->exe == mime_cache_exe)
{
+ fprintf(efreetd_log_file, "[%09.3f] Data mime_cache_create\n", ecore_time_get());
+ fflush(efreetd_log_file);
// XXX: ZZZ: handle stdout here from cache updater... if needed
}
return ECORE_CALLBACK_RENEW;
@@ -828,16 +843,22 @@ cache_exe_del_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
if (ev->exe == desktop_cache_exe)
{
+ fprintf(efreetd_log_file, "[%09.3f] Exit desktop_cache_create\n", ecore_time_get());
+ fflush(efreetd_log_file);
desktop_cache_exe = NULL;
if (desktop_queue) cache_desktop_update();
}
else if (ev->exe == icon_cache_exe)
{
+ fprintf(efreetd_log_file, "[%09.3f] Exit icon_cache_create\n", ecore_time_get());
+ fflush(efreetd_log_file);
icon_cache_exe = NULL;
if (icon_queue) cache_icon_update(EINA_FALSE);
}
else if (ev->exe == mime_cache_exe)
{
+ fprintf(efreetd_log_file, "[%09.3f] Exit mime_cache_create\n", ecore_time_get());
+ fflush(efreetd_log_file);
mime_cache_exe = NULL;
send_signal_mime_cache_build();
}
diff --git a/src/bin/efreet/efreetd_ipc.c b/src/bin/efreet/efreetd_ipc.c
index 933abfca9c..129f886f34 100644
--- a/src/bin/efreet/efreetd_ipc.c
+++ b/src/bin/efreet/efreetd_ipc.c
@@ -12,12 +12,15 @@
#include "efreetd.h"
#include "efreetd_cache.h"
+extern FILE *efreetd_log_file;
+
static int init = 0;
static Ecore_Ipc_Server *ipc = NULL;
static Ecore_Event_Handler *hnd_add = NULL;
static Ecore_Event_Handler *hnd_del = NULL;
static Ecore_Event_Handler *hnd_data = NULL;
static int clients = 0;
+static Ecore_Timer *quit_timer_start = NULL;
static Ecore_Timer *quit_timer = NULL;
static Eina_Bool
@@ -28,6 +31,15 @@ _cb_quit_timer(void *data EINA_UNUSED)
return EINA_FALSE;
}
+static Eina_Bool
+_cb_quit_timer_start(void *data EINA_UNUSED)
+{
+ quit_timer_start = NULL;
+ if (quit_timer) ecore_timer_del(quit_timer);
+ quit_timer = ecore_timer_add(10.0, _cb_quit_timer, NULL);
+ return EINA_FALSE;
+}
+
static void
_broadcast(Ecore_Ipc_Server *svr, int major, int minor, void *data, int size)
{
@@ -37,6 +49,8 @@ _broadcast(Ecore_Ipc_Server *svr, int major, int minor, void *data, int size)
EINA_LIST_FOREACH(ipc_clients, l, cl)
{
+ fprintf(efreetd_log_file, "[%09.3f] Client broadcast %i.%i\n", ecore_time_get(), major, minor);
+ fflush(efreetd_log_file);
ecore_ipc_client_send(cl, major, minor, 0, 0, 0, data, size);
}
}
@@ -101,7 +115,15 @@ _cb_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
ecore_timer_del(quit_timer);
quit_timer = NULL;
}
+ if (quit_timer_start)
+ {
+ ecore_timer_del(quit_timer_start);
+ quit_timer_start = NULL;
+ }
clients++;
+ fprintf(efreetd_log_file, "[%09.3f] Add client (count=%i)\n", ecore_time_get(),
+ clients);
+ fflush(efreetd_log_file);
return ECORE_CALLBACK_DONE;
}
@@ -110,6 +132,9 @@ _cb_client_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
IPC_HEAD(Del);
clients--;
+ fprintf(efreetd_log_file, "[%09.3f] Del client (count=%i)\n", ecore_time_get(),
+ clients);
+ fflush(efreetd_log_file);
if (clients == 0)
{
if (quit_timer) ecore_timer_del(quit_timer);
@@ -126,6 +151,8 @@ _cb_client_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
IPC_HEAD(Data);
if (e->major == 1) // register lang
{ // input: str -> lang
+ fprintf(efreetd_log_file, "[%09.3f] Client register lang\n", ecore_time_get());
+ fflush(efreetd_log_file);
if ((s = _parse_str(e->data, e->size)))
{
setenv("LANG", s, 1);
@@ -137,6 +164,8 @@ _cb_client_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
}
else if (e->major == 2) // add desktop dirs
{ // input: array of str -> dirs
+ fprintf(efreetd_log_file, "[%09.3f] Client add desktop dirs\n", ecore_time_get());
+ fflush(efreetd_log_file);
strs = _parse_strs(e->data, e->size);
EINA_LIST_FREE(strs, s)
{
@@ -146,6 +175,8 @@ _cb_client_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
}
else if (e->major == 3) // build desktop cache
{ // input: str -> lang
+ fprintf(efreetd_log_file, "[%09.3f] Client update desktop cache\n", ecore_time_get());
+ fflush(efreetd_log_file);
if ((s = _parse_str(e->data, e->size)))
{
setenv("LANG", s, 1);
@@ -155,6 +186,8 @@ _cb_client_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
}
else if (e->major == 4) // add icon dirs
{ // input: array of str -> dirs
+ fprintf(efreetd_log_file, "[%09.3f] Client add icon dirs\n", ecore_time_get());
+ fflush(efreetd_log_file);
strs = _parse_strs(e->data, e->size);
EINA_LIST_FREE(strs, s)
{
@@ -164,6 +197,8 @@ _cb_client_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
}
else if (e->major == 5) // add icon exts
{ // input: array of str -> exts
+ fprintf(efreetd_log_file, "[%09.3f] Client add icon exts\n", ecore_time_get());
+ fflush(efreetd_log_file);
strs = _parse_strs(e->data, e->size);
EINA_LIST_FREE(strs, s)
{
@@ -211,7 +246,7 @@ ipc_init(void)
ecore_ipc_shutdown();
return EINA_FALSE;
}
- quit_timer = ecore_timer_add(2.0, _cb_quit_timer, NULL);
+ quit_timer_start = ecore_timer_add(10.0, _cb_quit_timer_start, NULL);
hnd_add = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD,
_cb_client_add, NULL);
hnd_del = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL,
@@ -228,6 +263,10 @@ ipc_shutdown(void)
if (init <= 0) return EINA_TRUE;
init--;
if (init > 0) return EINA_TRUE;
+ if (quit_timer) ecore_timer_del(quit_timer);
+ if (quit_timer_start) ecore_timer_del(quit_timer_start);
+ quit_timer = NULL;
+ quit_timer_start = NULL;
ecore_ipc_server_del(ipc);
ecore_event_handler_del(hnd_add);
ecore_event_handler_del(hnd_del);
diff --git a/src/bin/efreet/meson.build b/src/bin/efreet/meson.build
index 27f0e396e6..baf945d5de 100644
--- a/src/bin/efreet/meson.build
+++ b/src/bin/efreet/meson.build
@@ -7,7 +7,8 @@ efreetd_src = [
'efreetd_cache.c'
]
-config_h.set('STRICT_SPEC', '1')
+# disable strict as this causes efreet to be less functional for people
+#config_h.set('STRICT_SPEC', '1')
efreetd = executable('efreetd',
efreetd_src,
diff --git a/src/bin/elementary/config.c b/src/bin/elementary/config.c
index 71309ecf2a..1131437849 100644
--- a/src/bin/elementary/config.c
+++ b/src/bin/elementary/config.c
@@ -213,7 +213,7 @@ bf_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -224,7 +224,7 @@ bf_change(void *data EINA_UNUSED,
double bf = elm_config_scroll_bounce_friction_get();
double val = elm_slider_value_get(obj);
- if (bf == val) return;
+ if (EINA_DBL_EQ(bf, val)) return;
elm_config_scroll_bounce_friction_set(val);
elm_config_all_flush();
}
@@ -238,7 +238,7 @@ ps_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -249,7 +249,7 @@ ps_change(void *data EINA_UNUSED,
double ps = elm_config_scroll_page_scroll_friction_get();
double val = elm_slider_value_get(obj);
- if (ps == val) return;
+ if (EINA_DBL_EQ(ps, val)) return;
elm_config_scroll_page_scroll_friction_set(val);
elm_config_all_flush();
}
@@ -263,7 +263,7 @@ bis_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -274,7 +274,7 @@ bis_change(void *data EINA_UNUSED,
double bis = elm_config_scroll_bring_in_scroll_friction_get();
double val = elm_slider_value_get(obj);
- if (bis == val) return;
+ if (EINA_DBL_EQ(bis, val)) return;
elm_config_scroll_bring_in_scroll_friction_set(val);
elm_config_all_flush();
}
@@ -288,7 +288,7 @@ zf_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -299,7 +299,7 @@ zf_change(void *data EINA_UNUSED,
double zf = elm_config_scroll_zoom_friction_get();
double val = elm_slider_value_get(obj);
- if (zf == val) return;
+ if (EINA_DBL_EQ(zf, val)) return;
elm_config_scroll_zoom_friction_set(val);
elm_config_all_flush();
}
@@ -313,7 +313,7 @@ smooth_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 100.0))) / 100.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -324,7 +324,7 @@ smooth_change(void *data EINA_UNUSED,
double zf = elm_config_scroll_thumbscroll_smooth_amount_get();
double val = elm_slider_value_get(obj);
- if (zf == val) return;
+ if (EINA_DBL_EQ(zf, val)) return;
elm_config_scroll_thumbscroll_smooth_amount_set(val);
elm_config_all_flush();
}
@@ -338,7 +338,7 @@ smooth_win_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 100.0))) / 100.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -349,7 +349,7 @@ smooth_win_change(void *data EINA_UNUSED,
double zf = elm_config_scroll_thumbscroll_smooth_time_window_get();
double val = elm_slider_value_get(obj);
- if (zf == val) return;
+ if (EINA_DBL_EQ(zf, val)) return;
elm_config_scroll_thumbscroll_smooth_time_window_set(val);
elm_config_all_flush();
}
@@ -378,7 +378,7 @@ tst_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -389,7 +389,7 @@ tst_change(void *data EINA_UNUSED,
double tst = elm_config_scroll_thumbscroll_threshold_get();
double val = elm_slider_value_get(obj);
- if (tst == val) return;
+ if (EINA_DBL_EQ(tst, val)) return;
elm_config_scroll_thumbscroll_threshold_set(val);
elm_config_all_flush();
}
@@ -403,7 +403,7 @@ tsht_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -414,7 +414,7 @@ tsht_change(void *data EINA_UNUSED,
double tst = elm_config_scroll_thumbscroll_hold_threshold_get();
double val = elm_slider_value_get(obj);
- if (tst == val) return;
+ if (EINA_DBL_EQ(tst, val)) return;
elm_config_scroll_thumbscroll_hold_threshold_set(val);
elm_config_all_flush();
}
@@ -428,7 +428,7 @@ tsmt_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -439,7 +439,7 @@ tsmt_change(void *data EINA_UNUSED,
double tsmt = elm_config_scroll_thumbscroll_momentum_threshold_get();
double val = elm_slider_value_get(obj);
- if (tsmt == val) return;
+ if (EINA_DBL_EQ(tsmt, val)) return;
elm_config_scroll_thumbscroll_momentum_threshold_set(val);
elm_config_all_flush();
}
@@ -453,7 +453,7 @@ tsfdt_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -464,7 +464,7 @@ tsfdt_change(void *data EINA_UNUSED,
double tsfdt = elm_config_scroll_thumbscroll_flick_distance_tolerance_get();
double val = elm_slider_value_get(obj);
- if (tsfdt == val) return;
+ if (EINA_DBL_EQ(tsfdt, val)) return;
elm_config_scroll_thumbscroll_flick_distance_tolerance_set(val);
elm_config_all_flush();
}
@@ -478,7 +478,7 @@ tsf_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -489,7 +489,7 @@ tsf_change(void *data EINA_UNUSED,
double tsf = elm_config_scroll_thumbscroll_friction_get();
double val = elm_slider_value_get(obj);
- if (tsf == val) return;
+ if (EINA_DBL_EQ(tsf, val)) return;
elm_config_scroll_thumbscroll_friction_set(val);
elm_config_all_flush();
}
@@ -503,7 +503,7 @@ tsmf_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -514,7 +514,7 @@ tsmf_change(void *data EINA_UNUSED,
double tsmf = elm_config_scroll_thumbscroll_min_friction_get();
double val = elm_slider_value_get(obj);
- if (tsmf == val) return;
+ if (EINA_DBL_EQ(tsmf, val)) return;
elm_config_scroll_thumbscroll_min_friction_set(val);
elm_config_all_flush();
}
@@ -528,7 +528,7 @@ tsfs_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -539,7 +539,7 @@ tsfs_change(void *data EINA_UNUSED,
double tsfs = elm_config_scroll_thumbscroll_friction_standard_get();
double val = elm_slider_value_get(obj);
- if (tsfs == val) return;
+ if (EINA_DBL_EQ(tsfs, val)) return;
elm_config_scroll_thumbscroll_friction_standard_set(val);
elm_config_all_flush();
}
@@ -553,7 +553,7 @@ tsbf_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -564,7 +564,7 @@ tsbf_change(void *data EINA_UNUSED,
double tsbf = elm_config_scroll_thumbscroll_border_friction_get();
double val = elm_slider_value_get(obj);
- if (tsbf == val) return;
+ if (EINA_DBL_EQ(tsbf, val)) return;
elm_config_scroll_thumbscroll_border_friction_set(val);
elm_config_all_flush();
}
@@ -578,7 +578,7 @@ tssf_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 20.0))) / 20.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -589,7 +589,7 @@ tssf_change(void *data EINA_UNUSED,
double tssf = elm_config_scroll_thumbscroll_sensitivity_friction_get();
double val = elm_slider_value_get(obj);
- if (tssf == val) return;
+ if (EINA_DBL_EQ(tssf, val)) return;
elm_config_scroll_thumbscroll_sensitivity_friction_set(val);
elm_config_all_flush();
}
@@ -603,7 +603,7 @@ tsat_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -614,7 +614,7 @@ tsat_change(void *data EINA_UNUSED,
double tsat = elm_config_scroll_thumbscroll_acceleration_threshold_get();
double val = elm_slider_value_get(obj);
- if (tsat == val) return;
+ if (EINA_DBL_EQ(tsat, val)) return;
elm_config_scroll_thumbscroll_acceleration_threshold_set(val);
elm_config_all_flush();
}
@@ -628,7 +628,7 @@ tsatl_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -639,7 +639,7 @@ tsatl_change(void *data EINA_UNUSED,
double tsatl = elm_config_scroll_thumbscroll_acceleration_time_limit_get();
double val = elm_slider_value_get(obj);
- if (tsatl == val) return;
+ if (EINA_DBL_EQ(tsatl, val)) return;
elm_config_scroll_thumbscroll_acceleration_time_limit_set(val);
elm_config_all_flush();
}
@@ -653,7 +653,7 @@ tsaw_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -664,7 +664,7 @@ tsaw_change(void *data EINA_UNUSED,
double tsaw = elm_config_scroll_thumbscroll_acceleration_weight_get();
double val = elm_slider_value_get(obj);
- if (tsaw == val) return;
+ if (EINA_DBL_EQ(tsaw, val)) return;
elm_config_scroll_thumbscroll_acceleration_weight_set(val);
elm_config_all_flush();
}
@@ -692,7 +692,7 @@ cf_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 5.0))) / 5.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -703,7 +703,7 @@ cf_change(void *data EINA_UNUSED,
double cf = elm_config_cache_flush_interval_get();
double val = elm_slider_value_get(obj);
- if (cf == val) return;
+ if (EINA_DBL_EQ(cf, val)) return;
elm_config_cache_flush_interval_set(val);
elm_config_all_flush();
}
@@ -717,7 +717,7 @@ fc_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -728,7 +728,7 @@ fc_change(void *data EINA_UNUSED,
double font_cache = elm_config_cache_font_cache_size_get();
double val = elm_slider_value_get(obj);
- if (font_cache == val) return;
+ if (EINA_DBL_EQ(font_cache, val)) return;
elm_config_cache_font_cache_size_set(val * 1024);
elm_config_all_flush();
}
@@ -742,7 +742,7 @@ ic_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -753,7 +753,7 @@ ic_change(void *data EINA_UNUSED,
double image_cache = elm_config_cache_image_cache_size_get();
double val = elm_slider_value_get(obj);
- if (image_cache == val) return;
+ if (EINA_DBL_EQ(image_cache, val)) return;
elm_config_cache_image_cache_size_set(val * 1024);
elm_config_all_flush();
}
@@ -767,7 +767,7 @@ sc_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 10.0))) / 10.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -778,7 +778,7 @@ sc_change(void *data EINA_UNUSED,
double scale = elm_config_scale_get();
double val = elm_slider_value_get(obj);
- if (scale == val) return;
+ if (EINA_DBL_EQ(scale, val)) return;
elm_config_scale_set(val);
elm_config_all_flush();
}
@@ -792,7 +792,7 @@ fs_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 5.0))) / 5.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -803,7 +803,7 @@ fs_change(void *data EINA_UNUSED,
double fs = elm_config_finger_size_get();
double val = elm_slider_value_get(obj);
- if (fs == val) return;
+ if (EINA_DBL_EQ(fs, val)) return;
elm_config_finger_size_set(val);
elm_config_all_flush();
}
@@ -817,7 +817,7 @@ efc_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 5.0))) / 5.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -828,7 +828,7 @@ efc_change(void *data EINA_UNUSED,
double efc = elm_config_cache_edje_file_cache_size_get();
double val = elm_slider_value_get(obj);
- if (efc == val) return;
+ if (EINA_DBL_EQ(efc, val)) return;
elm_config_cache_edje_file_cache_size_set(val);
elm_config_all_flush();
}
@@ -842,7 +842,7 @@ ecc_round(void *data EINA_UNUSED,
double v;
v = ((double)((int)(val * 5.0))) / 5.0;
- if (v != val) elm_slider_value_set(obj, v);
+ if (!EINA_DBL_EQ(v, val)) elm_slider_value_set(obj, v);
}
static void
@@ -853,7 +853,7 @@ ecc_change(void *data EINA_UNUSED,
double ecc = elm_config_cache_edje_collection_cache_size_get();
double val = elm_slider_value_get(obj);
- if (ecc == val) return;
+ if (EINA_DBL_EQ(ecc, val)) return;
elm_config_cache_edje_collection_cache_size_set(val);
elm_config_all_flush();
}
@@ -942,14 +942,28 @@ transition_duration_change(void *data EINA_UNUSED,
void *event_info EINA_UNUSED)
{
double val = elm_slider_value_get(obj);
- Eina_Bool scale = elm_config_transition_duration_factor_get();
+ double scale = elm_config_transition_duration_factor_get();
- if (scale == val) return;
+ if (EINA_DBL_EQ(scale, val)) return;
elm_config_transition_duration_factor_set(val);
elm_config_all_flush();
}
static void
+tooltip_delay_change(void *data EINA_UNUSED,
+ Evas_Object *obj,
+ void *event_info EINA_UNUSED)
+{
+ double val = elm_slider_value_get(obj);
+ double delay = elm_config_tooltip_delay_get();
+
+ if (EINA_DBL_EQ(delay, val)) return;
+ elm_config_tooltip_delay_set(val);
+ elm_config_all_flush();
+}
+
+
+static void
_status_basic(Evas_Object *win,
Evas_Object *bx0)
{
@@ -1307,7 +1321,7 @@ _config_display_update(Evas_Object *win)
ts_sensitivity_friction, ts_acceleration_threshold,
ts_acceleration_time_limit, ts_acceleration_weight, page_friction,
bring_in_friction, zoom_friction, transition_duration,
- smooth_amount, smooth_time_window;
+ smooth_amount, smooth_time_window, tooltip_delay;
const char *curr_theme;
Eina_Bool s_bounce, ts, smooth_start;
Elm_Theme *th;
@@ -1319,6 +1333,7 @@ _config_display_update(Evas_Object *win)
font_c = elm_config_cache_font_cache_size_get();
image_c = elm_config_cache_image_cache_size_get();
transition_duration = elm_config_transition_duration_factor_get();
+ tooltip_delay = elm_config_tooltip_delay_get();
edje_file_c = elm_config_cache_edje_file_cache_size_get();
edje_col_c = elm_config_cache_edje_collection_cache_size_get();
@@ -1423,6 +1438,7 @@ _config_display_update(Evas_Object *win)
elm_object_theme_set(evas_object_data_get(win, "theme_preview"), th);
elm_theme_free(th);
elm_config_transition_duration_factor_set(transition_duration);
+ elm_config_tooltip_delay_set(tooltip_delay);
eina_stringshare_del(curr_theme);
}
@@ -1575,7 +1591,9 @@ _icon_preview_icon_add(const char *icon, const char *theme)
elm_box_pack_end(icon_preview_frame, ic);
evas_object_show(ic);
- if (strcmp(theme, ELM_CONFIG_ICON_THEME_ELEMENTARY))
+ if (!strcmp(theme, ELM_CONFIG_ICON_THEME_ELEMENTARY))
+ elm_icon_standard_set(ic, icon);
+ else
elm_image_file_set(ic, efreet_icon_path_find(theme, icon, 48), NULL);
}
@@ -1586,9 +1604,9 @@ _icon_preview_update(Evas_Object *win)
const char **example_icon, *example_icons[] =
{
"folder",
- "user-home",
- "text-x-generic",
- "system-run",
+ "video-display",
+ "mail-unread",
+ "start-here",
"preferences-system",
NULL,
};
@@ -2023,6 +2041,32 @@ _status_config_etc(Evas_Object *win,
CHECK_ADD("Enable ATSPI support", "Set atspi mode", atspi_change, NULL);
elm_check_state_set(ck, elm_config_atspi_mode_get());
+ // tooltip delay
+ fr = elm_frame_add(bx);
+ elm_object_text_set(fr, "Tooltip delay");
+ evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0.5);
+ elm_box_pack_end(bx, fr);
+ evas_object_show(fr);
+
+ bx2 = elm_box_add(fr);
+ elm_object_content_set(fr, bx2);
+ evas_object_show(bx2);
+
+ sl = elm_slider_add(bx2);
+ evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+ elm_slider_span_size_set(sl, 120);
+ elm_slider_unit_format_set(sl, "%1.1f");
+ elm_slider_indicator_format_set(sl, "%1.1f");
+ elm_slider_min_max_set(sl, 0, 20.0);
+ elm_slider_value_set(sl, elm_config_tooltip_delay_get());
+ elm_box_pack_end(bx2, sl);
+ evas_object_show(sl);
+ evas_object_smart_callback_add(sl, "changed", sc_round, NULL);
+ evas_object_smart_callback_add(sl, "delay,changed", tooltip_delay_change, NULL);
+
+
// transition duration in edje
fr = elm_frame_add(bx);
elm_object_text_set(fr, "Edje Transition Duration Factor");
@@ -4372,25 +4416,25 @@ efl_main(void *data EINA_UNUSED, const Efl_Event *ev)
else if ((!strcmp(arg, "-t")) && (i < eina_array_count(arge->argv)))
{
i++;
- theme_set = arg;
+ theme_set = eina_array_data_get(arge->argv, i);
interactive = 0;
}
else if ((!strcmp(arg, "-f")) && (i < eina_array_count(arge->argv)))
{
i++;
- finger_size_set = arg;
+ finger_size_set = eina_array_data_get(arge->argv, i);
interactive = 0;
}
else if ((!strcmp(arg, "-s")) && (i < eina_array_count(arge->argv)))
{
i++;
- scale_set = arg;
+ scale_set = eina_array_data_get(arge->argv, i);
interactive = 0;
}
else if ((!strcmp(arg, "-w")) && (i < eina_array_count(arge->argv)))
{
i++;
- web_backend = arg;
+ web_backend = eina_array_data_get(arge->argv, i);
interactive = 0;
}
}
diff --git a/src/bin/elementary/elm_prefs_cc_parse.c b/src/bin/elementary/elm_prefs_cc_parse.c
index 11415e1d86..fa960ac326 100644
--- a/src/bin/elementary/elm_prefs_cc_parse.c
+++ b/src/bin/elementary/elm_prefs_cc_parse.c
@@ -1345,7 +1345,7 @@ _calcf(char op, double a, double b)
return a;
case '/':
- if (b != 0) a /= b;
+ if (EINA_DBL_NONZERO(b)) a /= b;
else
ERR("%s:%i divide by zero", file_in, line - 1);
return a;
@@ -1355,7 +1355,7 @@ _calcf(char op, double a, double b)
return a;
case '%':
- if (0 != b) a = (double)((int)a % (int)b);
+ if (EINA_DBL_NONZERO(b)) a = (double)((int)a % (int)b);
else
ERR("%s:%i modula by zero", file_in, line - 1);
return a;
diff --git a/src/bin/elementary/meson.build b/src/bin/elementary/meson.build
index 27dabe6d3d..1d7aa75057 100644
--- a/src/bin/elementary/meson.build
+++ b/src/bin/elementary/meson.build
@@ -161,20 +161,24 @@ elementary_test_src = [
'test_ui_collection_view.c',
'test_ui_items.c',
'test_ui_frame.c',
- 'test_efl_ui_animation_view.c',
+ 'test_ui_separator.c',
+ 'test_efl_ui_vg_animation.c',
'test_efl_gfx_vg_value_provider.c',
'test.h'
]
+link_args = []
if sys_windows == false
- link_args = ['-rdynamic', '-fPIC', '-pie']
+ link_args += ['-rdynamic', '-fPIC']
package_c_args = package_c_args + ['-fPIC']
-else
- link_args = []
endif
+if sys_windows == false and sys_sun == false
+ link_args += ['-pie']
+endif
+
elementary_test = executable('elementary_test',
elementary_test_src,
- dependencies: [elementary] + elementary_deps + elementary_pub_deps,
+ dependencies: [elementary, intl] + elementary_deps + elementary_pub_deps,
install: true,
c_args : package_c_args + [
'-Delementary_test_BIN_DIR="'+dir_bin+'"',
@@ -190,7 +194,7 @@ elementary_config_src = [
elementary_config = executable('elementary_config',
elementary_config_src,
- dependencies: [elementary] + elementary_deps + elementary_pub_deps,
+ dependencies: [elementary, intl] + elementary_deps + elementary_pub_deps,
install: true,
c_args : package_c_args,
link_args: link_args
@@ -203,7 +207,7 @@ if sys_windows == false
elementary_quicklaunch = executable('elementary_quicklaunch',
elementary_quicklaunch_src,
- dependencies: [elementary] + elementary_deps + elementary_pub_deps,
+ dependencies: [elementary, intl] + elementary_deps + elementary_pub_deps,
install: true,
c_args : package_c_args,
link_args: link_args
@@ -216,17 +220,21 @@ elementary_codegen_src = [
elementary_codegen = executable('elementary_codegen',
elementary_codegen_src,
- dependencies: [elementary] + elementary_deps + elementary_pub_deps,
+ dependencies: [elementary, intl] + elementary_deps + elementary_pub_deps,
install: true,
c_args : package_c_args,
link_args: link_args
)
+asan_option =[]
+if get_option('b_sanitize') == 'address'
+ asan_option= 'ASAN_OPTIONS=detect_leaks=0'
+endif
+
if meson.is_cross_build()
elementary_codegen_exe = [find_program('elementary_codegen', native: true)]
else
- env = find_program('env', native: true)
- elementary_codegen_exe = [env, 'EFL_RUN_IN_TREE=1', elementary_codegen.full_path()]
+ elementary_codegen_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', elementary_codegen.full_path()]
endif
elm_prefs_cc_src = [
@@ -240,7 +248,7 @@ elm_prefs_cc_src = [
elm_prefs_cc = executable('elm_prefs_cc',
elm_prefs_cc_src,
- dependencies: [elementary] + elementary_deps + elementary_pub_deps,
+ dependencies: [elementary, intl] + elementary_deps + elementary_pub_deps,
install: true,
c_args : package_c_args,
link_args: link_args
@@ -251,8 +259,7 @@ if meson.is_cross_build()
elm_prefs_cc_path = _elm_prefs_cc.path()
elm_prefs_cc_exe = [_elm_prefs_cc]
else
- env = find_program('env', native: true)
- elm_prefs_cc_exe = [env, 'EFL_RUN_IN_TREE=1', elm_prefs_cc.full_path()]
+ elm_prefs_cc_exe = [env, asan_option, 'EFL_RUN_IN_TREE=1', elm_prefs_cc.full_path()]
endif
if sys_windows == false
@@ -262,7 +269,7 @@ if sys_windows == false
elementary_run = executable('elementary_run',
elementary_run_src,
- dependencies: [elementary] + elementary_deps + elementary_pub_deps,
+ dependencies: [elementary, intl] + elementary_deps + elementary_pub_deps,
install: true,
c_args : package_c_args,
link_args: link_args
@@ -282,7 +289,7 @@ elementary_perf_src = [
elementary_perf = executable('elementary_perf',
elementary_perf_src,
- dependencies: [elementary] + elementary_deps + elementary_pub_deps,
+ dependencies: [elementary, intl] + elementary_deps + elementary_pub_deps,
install: true,
c_args : package_c_args + [
'-Delementary_test_BIN_DIR="'+dir_bin+'"',
diff --git a/src/bin/elementary/perf_test_01.c b/src/bin/elementary/perf_test_01.c
index d29f84813b..ef7f32d112 100644
--- a/src/bin/elementary/perf_test_01.c
+++ b/src/bin/elementary/perf_test_01.c
@@ -36,9 +36,9 @@ TST(01, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h
w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2);
h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2);
x = (win_w / 2) - (w / 2);
- x += (Evas_Coord)(sin((double)((f * 50.0) + (i * 13))) * (w0 / 2));
+ x += (Evas_Coord)(sin((double)((f * 50.0) + (i * 13))) * (w0 / 2.0));
y = (win_h / 2) - (h / 2);
- y += (Evas_Coord)(cos((double)((f * 45.0) + (i * 28))) * (h0 / 2));
+ y += (Evas_Coord)(cos((double)((f * 45.0) + (i * 28))) * (h0 / 2.0));
evas_object_geometry_set(o, x, y, w, h);
}
}
diff --git a/src/bin/elementary/perf_test_02.c b/src/bin/elementary/perf_test_02.c
index ac381c732a..e5f10f1549 100644
--- a/src/bin/elementary/perf_test_02.c
+++ b/src/bin/elementary/perf_test_02.c
@@ -36,9 +36,9 @@ TST(02, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h
w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2);
h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2);
x = (win_w / 2) - (w / 2);
- x += (Evas_Coord)(sin((double)((f * 50.0) + (i * 13))) * (w0 / 2));
+ x += (Evas_Coord)(sin((double)((f * 50.0) + (i * 13))) * (w0 / 2.0));
y = (win_h / 2) - (h / 2);
- y += (Evas_Coord)(cos((double)((f * 45.0) + (i * 28))) * (h0 / 2));
+ y += (Evas_Coord)(cos((double)((f * 45.0) + (i * 28))) * (h0 / 2.0));
evas_object_geometry_set(o, x, y, w, h);
}
}
diff --git a/src/bin/elementary/perf_test_03.c b/src/bin/elementary/perf_test_03.c
index 6737bedac5..ab35044538 100644
--- a/src/bin/elementary/perf_test_03.c
+++ b/src/bin/elementary/perf_test_03.c
@@ -36,9 +36,9 @@ TST(03, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h
w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2);
h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2);
x = (win_w / 2) - (w / 2);
- x += (Evas_Coord)(sin((double)((f * 50.0) + (i * 13))) * (w0 / 2));
+ x += (Evas_Coord)(sin((double)((f * 50.0) + (i * 13))) * (w0 / 2.0));
y = (win_h / 2) - (h / 2);
- y += (Evas_Coord)(cos((double)((f * 45.0) + (i * 28))) * (h0 / 2));
+ y += (Evas_Coord)(cos((double)((f * 45.0) + (i * 28))) * (h0 / 2.0));
evas_object_geometry_set(o, x, y, w, h);
}
}
diff --git a/src/bin/elementary/perf_test_04.c b/src/bin/elementary/perf_test_04.c
index 17aae98342..d593096f32 100644
--- a/src/bin/elementary/perf_test_04.c
+++ b/src/bin/elementary/perf_test_04.c
@@ -36,9 +36,9 @@ TST(04, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h
w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2);
h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2);
x = (win_w / 2) - (w / 2);
- x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2);
+ x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2.0);
y = (win_h / 2) - (h / 2);
- y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2);
+ y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2.0);
evas_object_geometry_set(o, x, y, w, h);
}
}
diff --git a/src/bin/elementary/perf_test_05.c b/src/bin/elementary/perf_test_05.c
index 64618ae608..1016952875 100644
--- a/src/bin/elementary/perf_test_05.c
+++ b/src/bin/elementary/perf_test_05.c
@@ -36,9 +36,9 @@ TST(05, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h
w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2);
h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2);
x = (win_w / 2) - (w / 2);
- x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2);
+ x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2.0);
y = (win_h / 2) - (h / 2);
- y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2);
+ y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2.0);
evas_object_geometry_set(o, x, y, w, h);
}
}
diff --git a/src/bin/elementary/perf_test_06.c b/src/bin/elementary/perf_test_06.c
index 952a4bced2..d227d65557 100644
--- a/src/bin/elementary/perf_test_06.c
+++ b/src/bin/elementary/perf_test_06.c
@@ -36,9 +36,9 @@ TST(06, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h
w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2);
h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2);
x = (win_w / 2) - (w / 2);
- x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2);
+ x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2.0);
y = (win_h / 2) - (h / 2);
- y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2);
+ y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2.0);
evas_object_geometry_set(o, x, y, w, h);
}
}
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index 4150ab20ea..d0d374ece4 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -241,6 +241,7 @@ void test_label(void *data, Evas_Object *obj, void *event_info);
void test_label_slide(void *data, Evas_Object *obj, void *event_info);
void test_label_wrap(void *data, Evas_Object *obj, void *event_info);
void test_textblock_fit(void *data, Evas_Object *obj, void *event_info);
+void test_text_memory(void *data, Evas_Object *obj, void *event_info);
void test_label_ellipsis(void *data, Evas_Object *obj, void *event_info);
void test_label_colors(void *data, Evas_Object *obj, void *event_info);
void test_label_emoji(void *data, Evas_Object *obj, void *event_info);
@@ -398,7 +399,7 @@ void test_ui_tab_pager(void *data, Evas_Object *obj, void *event_info);
void test_ui_spotlight_stack(void *data, Evas_Object *obj, void *event_info);
void test_ui_spotlight_plain(void *data, Evas_Object *obj, void *event_info);
void test_ui_spotlight_scroll(void *data, Evas_Object *obj, void *event_info);
-
+void test_ui_spotlight_animation(void *data, Evas_Object *obj, void *event_info);
void test_ui_relative_container(void *data, Evas_Object *obj, void *event_info);
void test_efl_ui_radio(void *data, Evas_Object *obj, void *event_info);
void test_efl_ui_collection_list(void *data, Evas_Object *obj, void *event_info);
@@ -407,8 +408,9 @@ void test_efl_ui_collection_view(void *data, Evas_Object *obj, void *event_info)
void test_efl_ui_item(void *data, Evas_Object *obj, void *event_info);
void test_ui_frame(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
-void test_efl_ui_animation_view(void *data, Evas_Object *obj, void *event_info);
+void test_efl_ui_vg_animation(void *data, Evas_Object *obj, void *event_info);
void test_efl_gfx_vg_value_provider(void *data, Evas_Object *obj, void *event_info);
+void test_ui_separator(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _list_udpate(void);
@@ -680,14 +682,23 @@ _my_win_key_up(void *d EINA_UNUSED, int type EINA_UNUSED, Ecore_Event_Key *ev)
return ECORE_CALLBACK_RENEW;
}
+static Eina_Bool
+_auto_close(void *data EINA_UNUSED)
+{
+ elm_exit();
+ return EINA_FALSE;
+}
+
static void
-my_win_main(const char *autorun, Eina_Bool test_win_only)
+my_win_main(const char *autorun, Eina_Bool test_win_only, Eina_Bool autoclose)
{
Evas_Object *bg = NULL, *bx0 = NULL, *bx1 = NULL, *lb = NULL, *chk = NULL;
Evas_Object *fr = NULL, *tg = NULL, *sc = NULL, *en = NULL;
Eina_List *l = NULL;
struct elm_test *t = NULL;
+ if (autoclose) ecore_timer_add(2, _auto_close, win);
+
if (test_win_only) goto add_tests;
/* Create an elm window - It returns an evas object. This is a little
* special as the object lives in the canvas that is inside the window
@@ -1151,7 +1162,7 @@ add_tests:
// FIXME: add frame test
ADD_TEST(NULL, "Boundaries", "Bubble", test_bubble);
ADD_TEST(NULL, "Boundaries", "Separator", test_separator);
-
+ ADD_TEST_EO(NULL, "Boundaries", "Separator", test_ui_separator);
//------------------------------//
ADD_TEST(NULL, "Range Values", "Spinner", test_spinner);
ADD_TEST_EO(NULL, "Range Values", "Efl.Ui.Spin", test_ui_spin);
@@ -1172,6 +1183,7 @@ add_tests:
ADD_TEST_EO(NULL, "Spotlight", "Efl.Ui.Spotlight Plain", test_ui_spotlight_plain);
ADD_TEST_EO(NULL, "Spotlight", "Efl.Ui.Spotlight Scroll", test_ui_spotlight_scroll);
ADD_TEST_EO(NULL, "Spotlight", "Efl.Ui.Spotlight Stack", test_ui_spotlight_stack);
+ ADD_TEST_EO(NULL, "Spotlight", "Efl.Ui.Spotlight Custom animation", test_ui_spotlight_animation);
ADD_TEST_EO(NULL, "Spotlight", "Navigation stack", test_ui_stack);
//------------------------------//
ADD_TEST(NULL, "Popups", "Ctxpopup", test_ctxpopup);
@@ -1209,10 +1221,11 @@ add_tests:
ADD_TEST(NULL, "Text", "Label Slide", test_label_slide);
ADD_TEST(NULL, "Text", "Label Wrap", test_label_wrap);
ADD_TEST(NULL, "Text", "Textblock Fit", test_textblock_fit);
+ ADD_TEST(NULL, "Text", "Text Memory", test_text_memory);
ADD_TEST(NULL, "Text", "Label Ellipsis", test_label_ellipsis);
ADD_TEST(NULL, "Text", "Label Colors", test_label_colors);
ADD_TEST(NULL, "Text", "Label Emoji", test_label_emoji);
- ADD_TEST(NULL, "Text", "Label Variation Sequnece", test_label_variation_sequence);
+ ADD_TEST(NULL, "Text", "Label Variation Sequence", test_label_variation_sequence);
ADD_TEST_EO(NULL, "Text", "Efl.Ui.Textpath", test_ui_textpath);
ADD_TEST_EO(NULL, "Text", "Efl.Canvas.Textblock style", test_canvas_textblock);
@@ -1305,7 +1318,7 @@ add_tests:
ADD_TEST_EO(NULL, "Widgets Part", "Part Shadow", test_part_shadow);
//------------------------------//
- ADD_TEST_EO(NULL, "Vector Animation", "Animation View", test_efl_ui_animation_view);
+ ADD_TEST_EO(NULL, "Vector Animation", "Vector Graphics Animation", test_efl_ui_vg_animation);
ADD_TEST_EO(NULL, "Vector Animation", "Value Provider", test_efl_gfx_vg_value_provider);
#undef ADD_TEST
@@ -1361,7 +1374,7 @@ add_tests:
}
/* set an initial window size */
- evas_object_resize(win, 480 * elm_config_scale_get(), 480 * elm_config_scale_get());
+ evas_object_resize(win, 480 * elm_config_scale_get(), 490 * elm_config_scale_get());
evas_object_show(win);
}
@@ -1412,6 +1425,7 @@ efl_main(void *data EINA_UNUSED,
{
Efl_Loop_Arguments *arge = ev->info;
Eina_Bool test_win_only = EINA_FALSE;
+ Eina_Bool autoclose = EINA_FALSE;
char *autorun = NULL;
if (arge->initialization)
@@ -1452,6 +1466,7 @@ efl_main(void *data EINA_UNUSED,
"$ elementary_test\n"
"$ elementary_test --test-win-only [TEST_NAME]\n"
"$ elementary_test -to [TEST_NAME]\n\n"
+ "$ elementary_test --autoclose\n\n"
"Examples:\n"
"$ elementary_test -to Button\n\n"));
return ;
@@ -1465,6 +1480,8 @@ efl_main(void *data EINA_UNUSED,
}
else if (eina_streq(arg, "--all") || eina_streq(arg, "-a"))
all_tests = EINA_TRUE;
+ else if (eina_streq(arg, "--autoclose"))
+ autoclose = EINA_TRUE;
else if ((i == eina_array_count(arge->argv) - 1) && (arg[0] != '-'))
autorun = arg;
@@ -1474,7 +1491,7 @@ efl_main(void *data EINA_UNUSED,
{
}
- my_win_main(autorun, test_win_only); /* create main window */
+ my_win_main(autorun, test_win_only, autoclose); /* create main window */
/* FIXME: Hum, no exit code anywhere anymore ? */
}
diff --git a/src/bin/elementary/test_combobox.c b/src/bin/elementary/test_combobox.c
index ee68a3bdaf..62d21d0913 100644
--- a/src/bin/elementary/test_combobox.c
+++ b/src/bin/elementary/test_combobox.c
@@ -111,7 +111,7 @@ void
test_combobox(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
- Evas_Object *win, *bx, *combobox;
+ Evas_Object *win, *bx, *combobox, *fr;
Elm_Genlist_Item_Class *itc;
win = elm_win_util_standard_add("combobox", "Combobox");
elm_win_autodel_set(win, EINA_TRUE);
@@ -129,6 +129,26 @@ test_combobox(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
itc->func.filter_get = gl_filter_get;
itc->func.del = NULL;
+ fr = elm_frame_add(win);
+ elm_object_style_set(fr, "pad_huge");
+ evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0);
+ elm_box_pack_end(bx, fr);
+ evas_object_show(fr);
+
+ combobox = elm_combobox_add(win);
+ evas_object_size_hint_weight_set(combobox, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(combobox, EVAS_HINT_FILL, 0);
+ elm_object_part_text_set(combobox, "guide", "Short List");
+ evas_object_smart_callback_add(combobox, "expanded",
+ _combobox_expanded_cb, NULL);
+ for (int i = 0; i < 5; i++)
+ elm_genlist_item_append(combobox, itc, (void *)(uintptr_t)i,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL,
+ (void*)(uintptr_t)(i * 10));
+ elm_object_content_set(fr, combobox);
+ evas_object_show(combobox);
+
combobox = elm_combobox_add(win);
evas_object_size_hint_weight_set(combobox, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(combobox, EVAS_HINT_FILL, 0);
@@ -178,6 +198,24 @@ test_combobox(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
elm_box_pack_end(bx, combobox);
evas_object_show(combobox);
+ fr = elm_frame_add(win);
+ elm_object_style_set(fr, "pad_huge");
+ evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0);
+ elm_box_pack_end(bx, fr);
+ evas_object_show(fr);
+
+ combobox = elm_combobox_add(win);
+ evas_object_size_hint_weight_set(combobox, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(combobox, EVAS_HINT_FILL, 0);
+ elm_object_part_text_set(combobox, "guide", "Short List");
+ for (int i = 0; i < 5; i++)
+ elm_genlist_item_append(combobox, itc, (void *)(uintptr_t)i,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL,
+ (void*)(uintptr_t)(i * 10));
+ elm_object_content_set(fr, combobox);
+ evas_object_show(combobox);
+
evas_object_resize(win, 320, 500);
evas_object_show(win);
diff --git a/src/bin/elementary/test_dnd.c b/src/bin/elementary/test_dnd.c
index be0738e122..604f73f33f 100644
--- a/src/bin/elementary/test_dnd.c
+++ b/src/bin/elementary/test_dnd.c
@@ -635,7 +635,7 @@ _gl_dnd_default_anim_data_getcb(Evas_Object *obj, /* The genlist object */
/* Now, collect data to send for drop from ALL selected items */
/* Save list pointer to remove items after drop and free list on done */
info->data = _gl_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);
- printf("%s - data = %s\n", __FUNCTION__, info->data);
+ printf("%s - data = %s\n", __func__, info->data);
info->acceptdata = info->donecbdata;
if (info->data)
@@ -740,7 +740,7 @@ _grid_data_getcb(Evas_Object *obj, /* The genlist object */
/* Now, collect data to send for drop from ALL selected items */
/* Save list pointer to remove items after drop and free list on done */
info->data = _grid_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);
- printf("%s %d- data = %s\n", __FUNCTION__, __LINE__, info->data);
+ printf("%s %d- data = %s\n", __func__, __LINE__, info->data);
info->acceptdata = info->donecbdata;
if (info->data)
@@ -1005,7 +1005,7 @@ static Eina_Bool _drop_box_button_new_cb(void *data, Evas_Object *obj, Elm_Selec
void _enter_but_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
{
- printf("Entered %s - drop it here and I will never print this line anymore.\n", __FUNCTION__);
+ printf("Entered %s - drop it here and I will never print this line anymore.\n", __func__);
}
static Eina_Bool _drop_but_icon_change_cb(void *data, Evas_Object *obj, Elm_Selection_Data *ev)
diff --git a/src/bin/elementary/test_efl_anim_alpha.c b/src/bin/elementary/test_efl_anim_alpha.c
index b364319279..3c5f62ca64 100644
--- a/src/bin/elementary/test_efl_anim_alpha.c
+++ b/src/bin/elementary/test_efl_anim_alpha.c
@@ -90,13 +90,13 @@ test_efl_anim_alpha(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Show Animation
- Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 1.0);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_group_parallel.c b/src/bin/elementary/test_efl_anim_group_parallel.c
index 728c54ea4e..d560023f2c 100644
--- a/src/bin/elementary/test_efl_anim_group_parallel.c
+++ b/src/bin/elementary/test_efl_anim_group_parallel.c
@@ -88,19 +88,19 @@ test_efl_anim_group_parallel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Hide Animation
- Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
//Rotate from 0 to 45 degrees Animation
- Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, NULL, EINA_VECTOR2(0.5, 0.5));
//Scale Animation to zoom in
- Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_set(scale_double_anim, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(2.0, 2.0), NULL, EINA_VECTOR2(0.5, 0.5));
//Hide Parallel Group Animation
- Efl_Canvas_Animation *parallel_hide_anim = efl_add(EFL_CANVAS_ANIMATION_GROUP_PARALLEL_CLASS, win);
+ Efl_Canvas_Animation *parallel_hide_anim = efl_add(EFL_CANVAS_PARALLEL_GROUP_ANIMATION_CLASS, win);
efl_animation_duration_set(parallel_hide_anim, 1.0);
efl_animation_final_state_keep_set(parallel_hide_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_group_sequential.c b/src/bin/elementary/test_efl_anim_group_sequential.c
index 60b3a836a1..62b00a669e 100644
--- a/src/bin/elementary/test_efl_anim_group_sequential.c
+++ b/src/bin/elementary/test_efl_anim_group_sequential.c
@@ -89,19 +89,19 @@ test_efl_anim_group_sequential(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
/* Animations to hide button */
//Rotate from 0 to 45 degrees Animation
- Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, NULL, EINA_VECTOR2(0.5, 0.5));
//Scale Animation to zoom in
- Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_set(scale_double_anim, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(2.0, 2.0), NULL, EINA_VECTOR2(0.5, 0.5));
//Hide Animation
- Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
//Hide Sequential Group Animation
- Efl_Canvas_Animation *sequential_hide_anim = efl_add(EFL_CANVAS_ANIMATION_GROUP_SEQUENTIAL_CLASS, win);
+ Efl_Canvas_Animation *sequential_hide_anim = efl_add(EFL_CANVAS_SEQUENTIAL_GROUP_ANIMATION_CLASS, win);
efl_animation_duration_set(sequential_hide_anim, 1.0);
efl_animation_final_state_keep_set(sequential_hide_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_interpolator.c b/src/bin/elementary/test_efl_anim_interpolator.c
index c5a828ff22..e6c42b711c 100644
--- a/src/bin/elementary/test_efl_anim_interpolator.c
+++ b/src/bin/elementary/test_efl_anim_interpolator.c
@@ -202,7 +202,7 @@ test_efl_anim_interpolator(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
ad->btn[i] = btn;
Efl_Canvas_Animation *anim =
- efl_add(EFL_CANVAS_ANIMATION_TRANSLATE_CLASS, win);
+ efl_add(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS, win);
efl_animation_translate_set(anim, EINA_POSITION2D(0, 0), EINA_POSITION2D((WIN_W - BTN_W), 0));
efl_animation_duration_set(anim, 2.0);
efl_animation_final_state_keep_set(anim, EINA_FALSE);
diff --git a/src/bin/elementary/test_efl_anim_pause.c b/src/bin/elementary/test_efl_anim_pause.c
index 92d4b3e308..8585b38fac 100644
--- a/src/bin/elementary/test_efl_anim_pause.c
+++ b/src/bin/elementary/test_efl_anim_pause.c
@@ -115,13 +115,13 @@ test_efl_anim_pause(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Show Animation
- Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 2.0);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 2.0);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_repeat.c b/src/bin/elementary/test_efl_anim_repeat.c
index b3dddcd0e3..26e3d3f00f 100644
--- a/src/bin/elementary/test_efl_anim_repeat.c
+++ b/src/bin/elementary/test_efl_anim_repeat.c
@@ -137,13 +137,13 @@ test_efl_anim_repeat(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Show Animation
- Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 1.0);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_rotate.c b/src/bin/elementary/test_efl_anim_rotate.c
index 437d015d75..4e3434cf41 100644
--- a/src/bin/elementary/test_efl_anim_rotate.c
+++ b/src/bin/elementary/test_efl_anim_rotate.c
@@ -88,13 +88,13 @@ test_efl_anim_rotate(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Rotate from 0 to 45 degrees Animation
- Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, NULL, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(cw_45_degrees_anim, 1.0);
efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
//Rotate from 45 to 0 degrees Animation
- Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, NULL, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
@@ -147,13 +147,13 @@ test_efl_anim_rotate_relative(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUS
evas_object_show(pivot);
//Rotate from 0 to 45 degrees Animation
- Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, pivot, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(cw_45_degrees_anim, 1.0);
efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
//Rotate from 45 to 0 degrees Animation
- Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, pivot, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
@@ -206,13 +206,13 @@ test_efl_anim_rotate_absolute(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUS
evas_object_show(abs_center);
//Rotate from 0 to 45 degrees Animation
- Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_absolute_set(cw_45_degrees_anim, 0.0, 45.0, EINA_POSITION2D(0, 0));
efl_animation_duration_set(cw_45_degrees_anim, 1.0);
efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
//Rotate from 45 to 0 degrees Animation
- Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ANIMATION_ROTATE_CLASS, win);
+ Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
efl_animation_rotate_absolute_set(ccw_45_degrees_anim, 45.0, 0.0, EINA_POSITION2D(0, 0));
efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_scale.c b/src/bin/elementary/test_efl_anim_scale.c
index 93ac1f7270..6653772299 100644
--- a/src/bin/elementary/test_efl_anim_scale.c
+++ b/src/bin/elementary/test_efl_anim_scale.c
@@ -88,13 +88,13 @@ test_efl_anim_scale(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Scale Animation to zoom in
- Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_set(scale_double_anim, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(2.0, 2.0), NULL, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(scale_double_anim, 1.0);
efl_animation_final_state_keep_set(scale_double_anim, EINA_TRUE);
//Scale Animation to zoom out
- Efl_Canvas_Animation *scale_half_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_half_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_set(scale_half_anim, EINA_VECTOR2(2.0, 2.0), EINA_VECTOR2(1.0, 1.0), NULL, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(scale_half_anim, 1.0);
efl_animation_final_state_keep_set(scale_half_anim, EINA_TRUE);
@@ -147,13 +147,13 @@ test_efl_anim_scale_relative(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
evas_object_show(pivot);
//Scale Animation to zoom in
- Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_set(scale_double_anim, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(2.0, 2.0), pivot, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(scale_double_anim, 1.0);
efl_animation_final_state_keep_set(scale_double_anim, EINA_TRUE);
//Scale Animation to zoom out
- Efl_Canvas_Animation *scale_half_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_half_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_set(scale_half_anim, EINA_VECTOR2(2.0, 2.0), EINA_VECTOR2(1.0, 1.0), pivot, EINA_VECTOR2(0.5, 0.5));
efl_animation_duration_set(scale_half_anim, 1.0);
efl_animation_final_state_keep_set(scale_half_anim, EINA_TRUE);
@@ -206,13 +206,13 @@ test_efl_anim_scale_absolute(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
evas_object_show(abs_center);
//Scale Animation to zoom in
- Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_double_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_absolute_set(scale_double_anim, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(2.0, 2.0), EINA_POSITION2D(0, 0));
efl_animation_duration_set(scale_double_anim, 1.0);
efl_animation_final_state_keep_set(scale_double_anim, EINA_TRUE);
//Scale Animation to zoom out
- Efl_Canvas_Animation *scale_half_anim = efl_add(EFL_CANVAS_ANIMATION_SCALE_CLASS, win);
+ Efl_Canvas_Animation *scale_half_anim = efl_add(EFL_CANVAS_SCALE_ANIMATION_CLASS, win);
efl_animation_scale_absolute_set(scale_half_anim, EINA_VECTOR2(2.0, 2.0), EINA_VECTOR2(1.0, 1.0), EINA_POSITION2D(0, 0));
efl_animation_duration_set(scale_half_anim, 1.0);
efl_animation_final_state_keep_set(scale_half_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_start_delay.c b/src/bin/elementary/test_efl_anim_start_delay.c
index 6ef663b33a..ae41fc7f30 100644
--- a/src/bin/elementary/test_efl_anim_start_delay.c
+++ b/src/bin/elementary/test_efl_anim_start_delay.c
@@ -102,13 +102,13 @@ test_efl_anim_start_delay(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Show Animation
- Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
+ Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 1.0);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_anim_translate.c b/src/bin/elementary/test_efl_anim_translate.c
index 7617be87d1..c1a3165d45 100644
--- a/src/bin/elementary/test_efl_anim_translate.c
+++ b/src/bin/elementary/test_efl_anim_translate.c
@@ -88,13 +88,13 @@ test_efl_anim_translate(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo
efl_event_callback_array_add(btn, animation_stats_cb(), ad);
//Translate Animation to right bottom relatively
- Efl_Canvas_Animation *translate_rb_anim = efl_add(EFL_CANVAS_ANIMATION_TRANSLATE_CLASS, win);
+ Efl_Canvas_Animation *translate_rb_anim = efl_add(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS, win);
efl_animation_translate_set(translate_rb_anim, EINA_POSITION2D(0, 0), EINA_POSITION2D(100, 100));
efl_animation_duration_set(translate_rb_anim, 1.0);
efl_animation_final_state_keep_set(translate_rb_anim, EINA_TRUE);
//Translate Animation to left top relatively
- Efl_Canvas_Animation *translate_lt_anim = efl_add(EFL_CANVAS_ANIMATION_TRANSLATE_CLASS, win);
+ Efl_Canvas_Animation *translate_lt_anim = efl_add(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS, win);
efl_animation_translate_set(translate_lt_anim, EINA_POSITION2D(100, 100), EINA_POSITION2D(0, 0));
efl_animation_duration_set(translate_lt_anim, 1.0);
efl_animation_final_state_keep_set(translate_lt_anim, EINA_TRUE);
@@ -147,13 +147,13 @@ test_efl_anim_translate_absolute(void *data EINA_UNUSED, Evas_Object *obj EINA_U
evas_object_show(abs_center);
//Translate Animation to right bottom absolutely
- Efl_Canvas_Animation *translate_rb_anim = efl_add(EFL_CANVAS_ANIMATION_TRANSLATE_CLASS, win);
+ Efl_Canvas_Animation *translate_rb_anim = efl_add(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS, win);
efl_animation_translate_absolute_set(translate_rb_anim, EINA_POSITION2D(0, 0), EINA_POSITION2D(100, 100));
efl_animation_duration_set(translate_rb_anim, 1.0);
efl_animation_final_state_keep_set(translate_rb_anim, EINA_TRUE);
//Translate Animation to left top absolutely
- Efl_Canvas_Animation *translate_lt_anim = efl_add(EFL_CANVAS_ANIMATION_TRANSLATE_CLASS, win);
+ Efl_Canvas_Animation *translate_lt_anim = efl_add(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS, win);
efl_animation_translate_absolute_set(translate_lt_anim, EINA_POSITION2D(100, 100), EINA_POSITION2D(0, 0));
efl_animation_duration_set(translate_lt_anim, 1.0);
efl_animation_final_state_keep_set(translate_lt_anim, EINA_TRUE);
diff --git a/src/bin/elementary/test_efl_gfx_vg_value_provider.c b/src/bin/elementary/test_efl_gfx_vg_value_provider.c
index 9982652464..991c5c4e9d 100644
--- a/src/bin/elementary/test_efl_gfx_vg_value_provider.c
+++ b/src/bin/elementary/test_efl_gfx_vg_value_provider.c
@@ -15,6 +15,12 @@
#ifdef BUILD_VG_LOADER_JSON
+typedef struct _App_Data
+{
+ Eo *label;
+ Eo *slider;
+} App_Data;
+
Evas_Object *values[4], *anim_view;
Evas_Object *path_entry, *type_hoversel;
@@ -49,9 +55,7 @@ add_value_provider(char* new_path, char* new_type, char* new_values)
efl_gfx_vg_value_provider_stroke_color_set(vp, color[0], color[1], color[2], color[3]);
sprintf(new_type, "StrokeColor");
}
-
-
- efl_ui_animation_view_value_provider_override(anim_view, vp);
+ efl_ui_vg_animation_value_provider_override(anim_view, vp);
}
if (!strcmp(type, "StrokeWidth"))
{
@@ -61,12 +65,54 @@ add_value_provider(char* new_path, char* new_type, char* new_values)
char* v = (char*)efl_text_get(values[0]);
if (v) width = strtod(v, NULL);
efl_gfx_vg_value_provider_stroke_width_set(vp, width);
- efl_ui_animation_view_value_provider_override(anim_view, vp);
- evas_object_show(anim_view);
+ efl_ui_vg_animation_value_provider_override(anim_view, vp);
sprintf(new_path, "%s", path);
sprintf(new_type, "StrokeWidth");
sprintf(new_values, "%f", width);
}
+ if (strstr(type, "Tr"))
+ {
+ double value[2], value_cnt;
+ Eina_Matrix4 m;
+ Eo *vp = efl_add(EFL_GFX_VG_VALUE_PROVIDER_CLASS, anim_view);
+
+ efl_gfx_vg_value_provider_keypath_set(vp, (char*)path);
+
+ value_cnt = strstr(type, "Rotation") ? 1 : 2;
+ for( int i = 0; i < value_cnt; i++)
+ {
+ char* v = (char*)efl_text_get(values[i]);
+ if (v) value[i] = atof(v);
+ }
+
+ eina_matrix4_identity(&m);
+ if (!strcmp(type, "TrPosition"))
+ {
+ // Z projection
+ eina_matrix4_translate(&m, value[0], value[1], 0);
+ sprintf(new_type, "TrPosition");
+ sprintf(new_values, "%f %f",value[0], value[1]);
+
+ }
+ else if (!strcmp(type, "TrScale"))
+ {
+ // Z projection
+ eina_matrix4_scale(&m, value[0], value[1], 1);
+ sprintf(new_type, "TrScale");
+ sprintf(new_values, "%f %f",value[0], value[1]);
+ }
+ else if (!strcmp(type, "TrRotation"))
+ {
+ // Z projection
+ eina_matrix4_rotate(&m, value[0] * (M_PI / 180), EINA_MATRIX_AXIS_Z); //degree to radian
+ sprintf(new_values, "%f",value[0]);
+ sprintf(new_type, "TrRotation");
+ }
+
+ sprintf(new_path, "%s", path);
+ efl_gfx_vg_value_provider_transform_set(vp, &m);
+ efl_ui_vg_animation_value_provider_override(anim_view, vp);
+ }
return EINA_TRUE;
}
@@ -78,15 +124,23 @@ btn_clicked_cb(void *data , const Efl_Event *ev )
if (!text) return;
if (!strcmp("Play", text))
- efl_ui_animation_view_play((Evas_Object*)data);
+ {
+ double speed = efl_player_playback_speed_get(anim_view);
+ efl_player_playback_speed_set(anim_view, speed < 0 ? speed * -1 : speed);
+ efl_player_playing_set(anim_view, EINA_TRUE);
+ }
else if (!strcmp("Pause", text))
- efl_ui_animation_view_pause((Evas_Object*)data);
+ efl_player_paused_set((Evas_Object*)data, EINA_TRUE);
else if (!strcmp("Resume", text))
- efl_ui_animation_view_resume((Evas_Object*)data);
- else if (!strcmp("Play Back", text))
- efl_ui_animation_view_play_back((Evas_Object*)data);
+ efl_player_paused_set((Evas_Object*)data, EINA_FALSE);
+ else if (!strcmp("Play Backwards", text))
+ {
+ double speed = efl_player_playback_speed_get(anim_view);
+ efl_player_playback_speed_set(anim_view, speed > 0 ? speed * -1 : speed);
+ efl_player_playing_set(anim_view, EINA_TRUE);
+ }
else if (!strcmp("Stop", text))
- efl_ui_animation_view_stop((Evas_Object*)data);
+ efl_player_playing_set((Evas_Object*)data, EINA_FALSE);
else if (!strcmp("ADD", text))
{
Evas_Object *list = (Evas_Object*)data;
@@ -94,9 +148,9 @@ btn_clicked_cb(void *data , const Efl_Event *ev )
char new_path[255], new_type[255], new_values[255];
if (add_value_provider(new_path, new_type, new_values))
{
- char buf[255];
+ char buf[765];
//TODO: Even if there is the same path as the existing item, it is added without updating.
- // In efl_ui_animation_view, duplicate paths are managed.
+ // In efl_ui_vg_animation, duplicate paths are managed.
// However, animator (lottie) does not have an implementation that manages overridden values.
/*Eina_List *items = (Eina_List*)elm_list_items_get(list);
Eina_List *l;
@@ -115,7 +169,7 @@ btn_clicked_cb(void *data , const Efl_Event *ev )
}
}
}*/
- sprintf(buf, "%s/%s/%s", new_path, new_type, new_values);
+ snprintf(buf, sizeof(buf), "%s/%s/%s", new_path, new_type, new_values);
list_it = elm_list_item_append(list, buf, NULL, NULL, NULL, NULL);
elm_list_item_bring_in(list_it);
elm_list_go(list);
@@ -145,7 +199,7 @@ static void
check_changed_cb(void *data, const Efl_Event *event)
{
Evas_Object *anim_view = data;
- efl_ui_animation_view_auto_repeat_set(anim_view, efl_ui_selectable_selected_get(event->object));
+ efl_player_playback_loop_set(anim_view, efl_ui_selectable_selected_get(event->object));
}
static void
@@ -154,92 +208,34 @@ speed_changed_cb(void *data, const Efl_Event *event)
Evas_Object *anim_view = data;
double speed = 1;
if (efl_ui_selectable_selected_get(event->object)) speed = 0.25;
- efl_ui_animation_view_speed_set(anim_view, speed);
+ efl_player_playback_speed_set(anim_view, speed);
}
static void
limit_frame_cb(void *data, const Efl_Event *event)
{
Evas_Object *anim_view = data;
- int frame_count = efl_ui_animation_view_frame_count_get(anim_view);
+ int frame_count = efl_ui_vg_animation_frame_count_get(anim_view);
printf("Total Frame Count : %d\n", frame_count);
if (efl_ui_selectable_selected_get(event->object))
{
- efl_ui_animation_view_min_frame_set(anim_view, 5);
- efl_ui_animation_view_max_frame_set(anim_view, 10);
+ efl_ui_vg_animation_min_frame_set(anim_view, 5);
+ efl_ui_vg_animation_max_frame_set(anim_view, 10);
printf("Frames to show 5-10 only\n");
}
else
{
- efl_ui_animation_view_min_frame_set(anim_view, 0);
- efl_ui_animation_view_max_frame_set(anim_view, frame_count);
+ efl_ui_vg_animation_min_frame_set(anim_view, 0);
+ efl_ui_vg_animation_max_frame_set(anim_view, frame_count);
printf("Showing all frames now\n");
}
}
static void
-update_anim_view_state(Evas_Object *anim_view, Evas_Object *label)
-{
- Efl_Ui_Animation_View_State state = efl_ui_animation_view_state_get(anim_view);
-
- switch (state)
- {
- case EFL_UI_ANIMATION_VIEW_STATE_NOT_READY:
- efl_text_set(label, "State = Not Ready");
- break;
- case EFL_UI_ANIMATION_VIEW_STATE_PLAY:
- efl_text_set(label, "State = Playing");
- break;
- case EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK:
- efl_text_set(label, "State = Playing Back");
- break;
- case EFL_UI_ANIMATION_VIEW_STATE_PAUSE:
- efl_text_set(label, "State = Paused");
- break;
- case EFL_UI_ANIMATION_VIEW_STATE_STOP:
- efl_text_set(label, "State = Stopped");
- break;
- }
-}
-
-static void
-_play_updated(void *data, Evas_Object *obj, void *ev EINA_UNUSED)
-{
- Evas_Object *slider = data;
- efl_ui_range_value_set(slider, efl_ui_animation_view_progress_get(obj));
-}
-
-static void
-_state_update(void *data, Evas_Object *obj, void *ev EINA_UNUSED)
-{
- Evas_Object *label = data;
- update_anim_view_state(obj, label);
-}
-
-static void
-_play_done(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
-{
- printf("done!\n");
-}
-
-static void
-_play_repeated(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
-{
- printf("repeated!\n");
-}
-
-static void
_slider_changed_cb(void *data, const Efl_Event *ev)
{
Evas_Object *anim_view = data;
- efl_ui_animation_view_progress_set(anim_view, efl_ui_range_value_get(ev->object));
-}
-
-static void
-_slider_reset(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
-{
- Evas_Object *slider = data;
- efl_ui_range_value_set(slider, 0);
+ efl_player_playback_progress_set(anim_view, efl_ui_range_value_get(ev->object));
}
void values_input(Eo* box, const char* type)
@@ -279,6 +275,37 @@ void values_input(Eo* box, const char* type)
efl_gfx_hint_size_min_set(values[0], EINA_SIZE2D(50, 10));
efl_text_set(efl_part(values[0], "efl.text_guide"), "Width(double type)");
}
+ else if (strstr(type, "Tr"))
+ {
+ char text[2][2];
+ if (!strcmp(type, "TrPosition"))
+ {
+ snprintf(text[0], sizeof(text[0]), "X");
+ snprintf(text[1], sizeof(text[1]), "Y");
+ }
+ else if (!strcmp(type, "TrScale"))
+ {
+ snprintf(text[0], sizeof(text[0]), "W");
+ snprintf(text[1], sizeof(text[1]), "H");
+ }
+ else if (!strcmp(type, "TrRotation"))
+ {
+ snprintf(text[0], sizeof(text[0]), "R");
+ }
+
+ int value_cnt = strstr(type, "Rotation") ? 1 : 2;
+ for( int i = 0; i < value_cnt; i++)
+ {
+ values[i] = efl_add(EFL_UI_TEXTBOX_CLASS, box,
+ efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, 0),
+ efl_gfx_hint_fill_set(efl_added, EINA_FALSE, EINA_FALSE),
+ efl_gfx_hint_align_set(efl_added, EVAS_HINT_FILL, EVAS_HINT_FILL),
+ efl_text_interactive_editable_set(efl_added, EINA_TRUE),
+ efl_pack(box, efl_added));
+ efl_gfx_hint_size_min_set(values[i], EINA_SIZE2D(50, 10));
+ efl_text_set(efl_part(values[i], "efl.text_guide"), text[i]);
+ }
+ }
}
static void
@@ -291,18 +318,102 @@ _hover_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
values_input(box, selected);
}
+static void
+update_anim_view_state(Evas_Object *anim_view, Evas_Object *label)
+{
+ Efl_Ui_Vg_Animation_State state = efl_ui_vg_animation_state_get(anim_view);
+
+ switch (state)
+ {
+ case EFL_UI_VG_ANIMATION_STATE_NOT_READY:
+ efl_text_set(label, "State = Not Ready");
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_PLAYING:
+ efl_text_set(label, "State = Playing");
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS:
+ efl_text_set(label, "State = Playing Backwards");
+
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_PAUSED:
+ efl_text_set(label, "State = Paused");
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_STOPPED:
+ efl_text_set(label, "State = Stopped");
+ break;
+ }
+}
+
+static void
+_animation_playing_changed_cb(void *data, const Efl_Event *event)
+{
+ Eina_Bool playing = *(Eina_Bool*)event->info;
+ App_Data *ad = data;
+ update_anim_view_state(event->object, ad->label);
+ //Stopped
+ if (!playing)
+ efl_ui_range_value_set(ad->slider, 0);
+}
+
+static void
+_animation_paused_changed_cb(void *data, const Efl_Event *event)
+{
+ App_Data *ad = data;
+ update_anim_view_state(event->object, ad->label);
+}
+
+static void
+_animation_playback_progress_changed_cb(void *data, const Efl_Event *event)
+{
+ double progress = *(double*)event->info;
+ App_Data *ad = data;
+ efl_ui_range_value_set(ad->slider, progress);
+}
+
+static void
+_animation_playback_repeated_changed_cb(void *data EINA_UNUSED, const Efl_Event *event)
+{
+ int repeated_times = *(int*)event->info;
+ printf("repeated! (times: %d)\n", repeated_times);
+}
+
+static void
+_animation_playback_finished_changed_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
+{
+ printf("done!\n");
+}
+
+EFL_CALLBACKS_ARRAY_DEFINE(animation_stats_cb,
+ {EFL_PLAYER_EVENT_PLAYING_CHANGED, _animation_playing_changed_cb },
+ {EFL_PLAYER_EVENT_PAUSED_CHANGED, _animation_paused_changed_cb },
+ {EFL_PLAYER_EVENT_PLAYBACK_PROGRESS_CHANGED, _animation_playback_progress_changed_cb },
+ {EFL_PLAYER_EVENT_PLAYBACK_REPEATED, _animation_playback_repeated_changed_cb },
+ {EFL_PLAYER_EVENT_PLAYBACK_FINISHED, _animation_playback_finished_changed_cb },
+)
+
+static void
+_win_del_cb(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+ App_Data *ad = data;
+ free(ad);
+}
+
void
test_efl_gfx_vg_value_provider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eo *win, *box, *box_sub, *label, *check, *slider, *list;
char buf[255];
+ App_Data *ad = calloc(1, sizeof(App_Data));
+ if (!ad) return;
+
// This line must to need.
setenv("ELM_ACCEL", "gl", 1);
win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_BASIC),
- efl_text_set(efl_added, "Efl_Ui_Animation_View demo"),
- efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+ efl_text_set(efl_added, "Efl_Ui_Vg_Animation demo"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE),
+ efl_event_callback_add(efl_added, EFL_EVENT_DEL, _win_del_cb, ad));
// Create a box in Canvas
box = efl_add(EFL_UI_BOX_CLASS, win,
@@ -317,7 +428,7 @@ test_efl_gfx_vg_value_provider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
//Create Animation View to play animation directly from JSON file
snprintf(buf, sizeof(buf), "%s/images/three_box.json", elm_app_data_dir_get());
- anim_view = efl_add(EFL_UI_ANIMATION_VIEW_CLASS, win,
+ anim_view = efl_add(EFL_UI_VG_ANIMATION_CLASS, win,
efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND),
efl_gfx_hint_align_set(efl_added, EVAS_HINT_FILL, EVAS_HINT_FILL),
efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(600, 600)),
@@ -394,6 +505,9 @@ test_efl_gfx_vg_value_provider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
elm_hoversel_item_add(type_hoversel, "FillColor", NULL, ELM_ICON_NONE, _hover_item_selected_cb, box_sub);
elm_hoversel_item_add(type_hoversel, "StrokeColor", NULL, ELM_ICON_NONE, _hover_item_selected_cb, box_sub);
elm_hoversel_item_add(type_hoversel, "StrokeWidth", NULL, ELM_ICON_NONE, _hover_item_selected_cb, box_sub);
+ elm_hoversel_item_add(type_hoversel, "TrPosition", NULL, ELM_ICON_NONE, _hover_item_selected_cb, box_sub);
+ elm_hoversel_item_add(type_hoversel, "TrScale", NULL, ELM_ICON_NONE, _hover_item_selected_cb, box_sub);
+ elm_hoversel_item_add(type_hoversel, "TrRotation", NULL, ELM_ICON_NONE, _hover_item_selected_cb, box_sub);
evas_object_show(type_hoversel);
elm_object_focus_set(type_hoversel, EINA_TRUE);
efl_pack(box_sub, type_hoversel);
@@ -478,7 +592,7 @@ test_efl_gfx_vg_value_provider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
//Duration Text
- snprintf(buf, sizeof(buf), "Duration: %1.2fs", efl_ui_animation_view_duration_time_get(anim_view));
+ snprintf(buf, sizeof(buf), "Duration(Length): %1.2fs", efl_playable_length_get(anim_view));
efl_add(EFL_UI_TEXTBOX_CLASS, box_sub,
efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, 0),
efl_gfx_hint_fill_set(efl_added, EINA_FALSE, EINA_FALSE),
@@ -514,7 +628,7 @@ test_efl_gfx_vg_value_provider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
efl_add(EFL_UI_BUTTON_CLASS, box_sub,
efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, 0),
efl_gfx_hint_align_set(efl_added, EVAS_HINT_FILL, EVAS_HINT_FILL),
- efl_text_set(efl_added, "Play Back"),
+ efl_text_set(efl_added, "Play Backwards"),
efl_pack(box_sub, efl_added),
efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, btn_clicked_cb, anim_view));
@@ -549,16 +663,10 @@ test_efl_gfx_vg_value_provider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
efl_pack(box_sub, efl_added),
efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, btn_clicked_cb, anim_view));
- evas_object_smart_callback_add(anim_view, "play,start", _state_update, label);
- evas_object_smart_callback_add(anim_view, "play,stop", _state_update, label);
- evas_object_smart_callback_add(anim_view, "play,pause", _state_update, label);
- evas_object_smart_callback_add(anim_view, "play,resume", _state_update, label);
-
- evas_object_smart_callback_add(anim_view, "play,repeat", _play_repeated, label);
- evas_object_smart_callback_add(anim_view, "play,done", _play_done, label);
+ efl_event_callback_array_add(anim_view, animation_stats_cb(), ad);
- evas_object_smart_callback_add(anim_view, "play,update", _play_updated, slider);
- evas_object_smart_callback_add(anim_view, "play,stop", _slider_reset, slider);
+ ad->label = label;
+ ad->slider = slider;
update_anim_view_state(anim_view, label);
@@ -575,7 +683,7 @@ test_efl_gfx_vg_value_provider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_BASIC),
- efl_text_set(efl_added, "Efl_Ui_Animation_View demo"),
+ efl_text_set(efl_added, "Efl_Ui_Vg_Animation demo"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
// Create a box
diff --git a/src/bin/elementary/test_efl_ui_text.c b/src/bin/elementary/test_efl_ui_text.c
index dc1748bd07..49cfff589f 100644
--- a/src/bin/elementary/test_efl_ui_text.c
+++ b/src/bin/elementary/test_efl_ui_text.c
@@ -8,13 +8,13 @@
static void
_apply_style(Eo *obj, size_t start_pos, size_t end_pos, const char *style)
{
- Efl_Text_Cursor *start, *end;
+ Efl_Text_Cursor_Object *start, *end;
start = efl_ui_textbox_cursor_create(obj);
end = efl_ui_textbox_cursor_create(obj);
- efl_text_cursor_position_set(start, start_pos);
- efl_text_cursor_position_set(end, end_pos);
+ efl_text_cursor_object_position_set(start, start_pos);
+ efl_text_cursor_object_position_set(end, end_pos);
efl_text_formatter_attribute_insert(start, end, style);
@@ -101,15 +101,15 @@ typedef struct
static void
_on_bt3_clicked(void *data, const Efl_Event *event EINA_UNUSED)
{
- Efl_Text_Cursor *sel_start, *sel_end;
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
Eo *en = data;
efl_text_interactive_selection_cursors_get(en, &sel_start, &sel_end);
- const char *s = efl_text_cursor_range_text_get(sel_start, sel_end);
+ const char *s = efl_text_cursor_object_range_text_get(sel_start, sel_end);
printf("SELECTION REGION: %d - %d\n",
- efl_text_cursor_position_get( sel_start),
- efl_text_cursor_position_get(sel_end));
+ efl_text_cursor_object_position_get( sel_start),
+ efl_text_cursor_object_position_get(sel_end));
printf("SELECTION:\n");
if (s) printf("%s\n", s);
}
@@ -234,7 +234,6 @@ test_efl_ui_text_inputfield(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED
efl_text_multiline_set(en, EINA_TRUE);
efl_ui_textbox_scrollable_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.5);
- efl_pack(bx, en);
efl_gfx_entity_size_set(win, EINA_SIZE2D(300, 200));
diff --git a/src/bin/elementary/test_efl_ui_animation_view.c b/src/bin/elementary/test_efl_ui_vg_animation.c
index f5a73df745..a54a816bf1 100644
--- a/src/bin/elementary/test_efl_ui_animation_view.c
+++ b/src/bin/elementary/test_efl_ui_vg_animation.c
@@ -14,6 +14,12 @@
#ifdef BUILD_VG_LOADER_JSON
+typedef struct _App_Data
+{
+ Eo *label;
+ Eo *slider;
+} App_Data;
+
static void
btn_clicked_cb(void *data , const Efl_Event *ev )
{
@@ -23,22 +29,30 @@ btn_clicked_cb(void *data , const Efl_Event *ev )
if (!text) return;
if (!strcmp("Play", text))
- efl_ui_animation_view_play(anim_view);
+ {
+ double speed = efl_player_playback_speed_get(anim_view);
+ efl_player_playback_speed_set(anim_view, speed < 0 ? speed * -1 : speed);
+ efl_player_playing_set(anim_view, EINA_TRUE);
+ }
else if (!strcmp("Pause", text))
- efl_ui_animation_view_pause(anim_view);
+ efl_player_paused_set(anim_view, EINA_TRUE);
else if (!strcmp("Resume", text))
- efl_ui_animation_view_resume(anim_view);
- else if (!strcmp("Play Back", text))
- efl_ui_animation_view_play_back(anim_view);
+ efl_player_paused_set(anim_view, EINA_FALSE);
+ else if (!strcmp("Play Backwards", text))
+ {
+ double speed = efl_player_playback_speed_get(anim_view);
+ efl_player_playback_speed_set(anim_view, speed > 0 ? speed * -1 : speed);
+ efl_player_playing_set(anim_view, EINA_TRUE);
+ }
else if (!strcmp("Stop", text))
- efl_ui_animation_view_stop(anim_view);
+ efl_player_playing_set(anim_view, EINA_FALSE);
}
static void
check_changed_cb(void *data, const Efl_Event *event)
{
Evas_Object *anim_view = data;
- efl_ui_animation_view_auto_repeat_set(anim_view, efl_ui_selectable_selected_get(event->object));
+ efl_player_playback_loop_set(anim_view, efl_ui_selectable_selected_get(event->object));
}
static void
@@ -47,103 +61,127 @@ speed_changed_cb(void *data, const Efl_Event *event)
Evas_Object *anim_view = data;
double speed = 1;
if (efl_ui_selectable_selected_get(event->object)) speed = 0.25;
- efl_ui_animation_view_speed_set(anim_view, speed);
+ efl_player_playback_speed_set(anim_view, speed);
}
static void
limit_frame_cb(void *data, const Efl_Event *event)
{
Evas_Object *anim_view = data;
- int frame_count = efl_ui_animation_view_frame_count_get(anim_view);
+ int frame_count = efl_ui_vg_animation_frame_count_get(anim_view);
printf("Total Frame Count : %d\n", frame_count);
if (efl_ui_selectable_selected_get(event->object))
{
- efl_ui_animation_view_min_frame_set(anim_view, 5);
- efl_ui_animation_view_max_frame_set(anim_view, 10);
+ efl_ui_vg_animation_min_frame_set(anim_view, 5);
+ efl_ui_vg_animation_max_frame_set(anim_view, 10);
printf("Frames to show 5-10 only\n");
}
else
{
- efl_ui_animation_view_min_frame_set(anim_view, 0);
- efl_ui_animation_view_max_frame_set(anim_view, frame_count);
+ efl_ui_vg_animation_min_frame_set(anim_view, 0);
+ efl_ui_vg_animation_max_frame_set(anim_view, frame_count);
printf("Showing all frames now\n");
}
}
static void
+_slider_changed_cb(void *data, const Efl_Event *ev)
+{
+ Evas_Object *anim_view = data;
+ efl_player_playback_progress_set(anim_view, efl_ui_range_value_get(ev->object));
+}
+
+static void
update_anim_view_state(Evas_Object *anim_view, Evas_Object *label)
{
- Efl_Ui_Animation_View_State state = efl_ui_animation_view_state_get(anim_view);
+ Efl_Ui_Vg_Animation_State state = efl_ui_vg_animation_state_get(anim_view);
switch (state)
{
- case EFL_UI_ANIMATION_VIEW_STATE_NOT_READY:
+ case EFL_UI_VG_ANIMATION_STATE_NOT_READY:
efl_text_set(label, "State = Not Ready");
break;
- case EFL_UI_ANIMATION_VIEW_STATE_PLAY:
+ case EFL_UI_VG_ANIMATION_STATE_PLAYING:
efl_text_set(label, "State = Playing");
break;
- case EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK:
- efl_text_set(label, "State = Playing Back");
+ case EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS:
+ efl_text_set(label, "State = Playing Backwards");
break;
- case EFL_UI_ANIMATION_VIEW_STATE_PAUSE:
+ case EFL_UI_VG_ANIMATION_STATE_PAUSED:
efl_text_set(label, "State = Paused");
break;
- case EFL_UI_ANIMATION_VIEW_STATE_STOP:
+ case EFL_UI_VG_ANIMATION_STATE_STOPPED:
efl_text_set(label, "State = Stopped");
break;
}
}
static void
-_play_updated(void *data, Evas_Object *obj, void *ev EINA_UNUSED)
+_animation_playing_changed_cb(void *data, const Efl_Event *event)
{
- Evas_Object *slider = data;
- efl_ui_range_value_set(slider, efl_ui_animation_view_progress_get(obj));
+ Eina_Bool playing = *(Eina_Bool*)event->info;
+ App_Data *ad = data;
+ update_anim_view_state(event->object, ad->label);
+ //Stopped
+ if (!playing)
+ efl_ui_range_value_set(ad->slider, 0);
}
static void
-_state_update(void *data, Evas_Object *obj, void *ev EINA_UNUSED)
+_animation_paused_changed_cb(void *data, const Efl_Event *event)
{
- Evas_Object *label = data;
- update_anim_view_state(obj, label);
+ App_Data *ad = data;
+ update_anim_view_state(event->object, ad->label);
}
static void
-_play_done(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
+_animation_playback_progress_changed_cb(void *data, const Efl_Event *event)
{
- printf("done!\n");
+ double progress = *(double*)event->info;
+ App_Data *ad = data;
+ efl_ui_range_value_set(ad->slider, progress);
}
static void
-_play_repeated(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
+_animation_playback_repeated_changed_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- printf("repeated!\n");
+ int repeated_times = *(int*)event->info;
+ printf("repeated! (times: %d)\n", repeated_times);
}
static void
-_slider_changed_cb(void *data, const Efl_Event *ev)
+_animation_playback_finished_changed_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- Evas_Object *anim_view = data;
- efl_ui_animation_view_progress_set(anim_view, efl_ui_range_value_get(ev->object));
+ printf("done!\n");
}
+EFL_CALLBACKS_ARRAY_DEFINE(animation_stats_cb,
+ {EFL_PLAYER_EVENT_PLAYING_CHANGED, _animation_playing_changed_cb },
+ {EFL_PLAYER_EVENT_PAUSED_CHANGED, _animation_paused_changed_cb },
+ {EFL_PLAYER_EVENT_PLAYBACK_PROGRESS_CHANGED, _animation_playback_progress_changed_cb },
+ {EFL_PLAYER_EVENT_PLAYBACK_REPEATED, _animation_playback_repeated_changed_cb },
+ {EFL_PLAYER_EVENT_PLAYBACK_FINISHED, _animation_playback_finished_changed_cb },
+)
+
static void
-_slider_reset(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
+_win_del_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
- Evas_Object *slider = data;
- efl_ui_range_value_set(slider, 0);
+ App_Data *ad = data;
+ free(ad);
}
void
-test_efl_ui_animation_view(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+test_efl_ui_vg_animation(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eo *win, *box, *box2, *box3, *box4, *label, *anim_view, *check, *slider;
char buf[255];
+ App_Data *ad = calloc(1, sizeof(App_Data));
+ if (!ad) return;
win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
- efl_text_set(efl_added, "Efl_Ui_Animation_View demo"),
- efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+ efl_text_set(efl_added, "Efl_Ui_Vg_Animation demo"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE),
+ efl_event_callback_add(efl_added, EFL_EVENT_DEL, _win_del_cb, ad));
// Create a box in Canvas
box = efl_add(EFL_UI_BOX_CLASS, win,
@@ -158,7 +196,7 @@ test_efl_ui_animation_view(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
//Create Animation View to play animation directly from JSON file
snprintf(buf, sizeof(buf), "%s/images/emoji_wink.json", elm_app_data_dir_get());
- anim_view = efl_add(EFL_UI_ANIMATION_VIEW_CLASS, win,
+ anim_view = efl_add(EFL_UI_VG_ANIMATION_CLASS, win,
efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND),
efl_gfx_hint_align_set(efl_added, EVAS_HINT_FILL, EVAS_HINT_FILL),
efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(600, 600)),
@@ -200,7 +238,7 @@ test_efl_ui_animation_view(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
//Duration Text
- snprintf(buf, sizeof(buf), "Duration: %1.2fs", efl_ui_animation_view_duration_time_get(anim_view));
+ snprintf(buf, sizeof(buf), "Duration(Length): %1.2fs", efl_playable_length_get(anim_view));
efl_add(EFL_UI_TEXTBOX_CLASS, box2,
efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, 0),
efl_gfx_hint_fill_set(efl_added, EINA_FALSE, EINA_FALSE),
@@ -236,7 +274,7 @@ test_efl_ui_animation_view(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
efl_add(EFL_UI_BUTTON_CLASS, box3,
efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, 0),
efl_gfx_hint_align_set(efl_added, EVAS_HINT_FILL, EVAS_HINT_FILL),
- efl_text_set(efl_added, "Play Back"),
+ efl_text_set(efl_added, "Play Backwards"),
efl_pack(box3, efl_added),
efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, btn_clicked_cb, anim_view));
@@ -271,32 +309,26 @@ test_efl_ui_animation_view(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
efl_pack(box4, efl_added),
efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, btn_clicked_cb, anim_view));
- evas_object_smart_callback_add(anim_view, "play,start", _state_update, label);
- evas_object_smart_callback_add(anim_view, "play,stop", _state_update, label);
- evas_object_smart_callback_add(anim_view, "play,pause", _state_update, label);
- evas_object_smart_callback_add(anim_view, "play,resume", _state_update, label);
-
- evas_object_smart_callback_add(anim_view, "play,repeat", _play_repeated, label);
- evas_object_smart_callback_add(anim_view, "play,done", _play_done, label);
-
- evas_object_smart_callback_add(anim_view, "play,update", _play_updated, slider);
- evas_object_smart_callback_add(anim_view, "play,stop", _slider_reset, slider);
+ efl_event_callback_array_add(anim_view, animation_stats_cb(), ad);
update_anim_view_state(anim_view, label);
+ ad->label = label;
+ ad->slider = slider;
+
efl_gfx_entity_size_set(win, EINA_SIZE2D(600, 730));
}
#else
void
-test_efl_ui_animation_view(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+test_efl_ui_vg_animation(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eo *win, *box;
char buf[255];
win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
- efl_text_set(efl_added, "Efl_Ui_Animation_View demo"),
+ efl_text_set(efl_added, "Efl_Ui_Vg_Animation demo"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
// Create a box
diff --git a/src/bin/elementary/test_factory.c b/src/bin/elementary/test_factory.c
index daae81b63d..71ca204023 100644
--- a/src/bin/elementary/test_factory.c
+++ b/src/bin/elementary/test_factory.c
@@ -5,7 +5,7 @@
// 16 ^ 4 = 65k
#define BLOK 16
-// homogenous layout
+// homogeneous layout
//#define HOMOG 1
// aligned to top of box
#define ZEROALIGN 1
diff --git a/src/bin/elementary/test_gengrid.c b/src/bin/elementary/test_gengrid.c
index e2009e0db6..83f2dd9262 100644
--- a/src/bin/elementary/test_gengrid.c
+++ b/src/bin/elementary/test_gengrid.c
@@ -2160,6 +2160,7 @@ test_gengrid_update(void *data EINA_UNUSED,
win = elm_win_util_standard_add("gengrid-update", "Gengrid Update");
elm_win_autodel_set(win, EINA_TRUE);
+ evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
api->box = bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
diff --git a/src/bin/elementary/test_genlist.c b/src/bin/elementary/test_genlist.c
index 749d04fe63..41ff4a3903 100644
--- a/src/bin/elementary/test_genlist.c
+++ b/src/bin/elementary/test_genlist.c
@@ -292,6 +292,24 @@ _gl_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_i
}
static void
+_gl_unselected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+ printf("unselected: %p\n", event_info);
+}
+
+static void
+_gl_highlighted(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+ printf("highlighted: %p\n", event_info);
+}
+
+static void
+_gl_unhighlighted(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+ printf("unhighlighted: %p\n", event_info);
+}
+
+static void
_gl_double_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
printf("double clicked: %p\n", event_info);
@@ -445,6 +463,9 @@ test_genlist(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_i
gl = elm_genlist_add(win);
evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
+ evas_object_smart_callback_add(gl, "unselected", _gl_unselected, NULL);
+ evas_object_smart_callback_add(gl, "highlighted", _gl_highlighted, NULL);
+ evas_object_smart_callback_add(gl, "unhighlighted", _gl_unhighlighted, NULL);
evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL);
evas_object_smart_callback_add(gl, "clicked,right", _gl_right_clicked, NULL);
evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
@@ -5528,20 +5549,21 @@ test_genlist_show_item(void *data,
api->itc1->func.state_get = NULL;
api->itc1->func.del = NULL;
- g_data->gl = gl;
- g_data->itc1 = api->itc1;
-
- max = g_data->max_items;
- for (i = 0; i <= max; i++)
- elm_genlist_item_append(gl, api->itc1, (void*)(uintptr_t)i, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-
if (g_data)
- gli = elm_genlist_nth_item_get(gl, g_data->show_item);
- if (!gli) gli = elm_genlist_last_item_get(gl);
- elm_genlist_item_show(gli, g_data->type);
-
- //prepends item while queue processing is happening
- ecore_timer_add(0.1, _late_item_prepender, g_data);
+ {
+ g_data->gl = gl;
+ g_data->itc1 = api->itc1;
+
+ max = g_data->max_items;
+ for (i = 0; i <= max; i++)
+ elm_genlist_item_append(gl, api->itc1, (void*)(uintptr_t)i, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ gli = elm_genlist_nth_item_get(gl, g_data->show_item);
+ if (!gli) gli = elm_genlist_last_item_get(gl);
+ elm_genlist_item_show(gli, g_data->type);
+ //prepends item while queue processing is happening
+ ecore_timer_add(0.1, _late_item_prepender, g_data);
+ }
evas_object_resize(win, 480, 400);
explode_win_enable(win);
diff --git a/src/bin/elementary/test_gesture_framework.c b/src/bin/elementary/test_gesture_framework.c
index 5e2e935e49..4675604fa3 100644
--- a/src/bin/elementary/test_gesture_framework.c
+++ b/src/bin/elementary/test_gesture_framework.c
@@ -6,7 +6,7 @@
#define TAP_NAME "tap"
#define DOUBLE_TAP_NAME "double_tap"
#define TRIPLE_TAP_NAME "triple_tap"
-#define LONG_TAP_NAME "long_tap"
+#define LONG_PRESS_NAME "long_press"
#define FLICK_NAME "flick"
#define LINE_NAME "line"
#define MOMENTUM_NAME "momentum"
@@ -17,7 +17,7 @@
#define MAX_DOUBLE_TAP 5
#define MAX_FLICK 5
#define MAX_LINE 5
-#define MAX_LONG_TAP 5
+#define MAX_LONG_PRESS 5
#define MAX_MOMENTUM 5
#define MAX_ROTATE 1
#define MAX_TAP 5
@@ -59,7 +59,7 @@ struct _infra_data
icon_properties *icons;
Ecore_Timer *colortimer;
char buf[1024];
- int long_tap_count;
+ int long_press_count;
};
typedef struct _infra_data infra_data;
@@ -224,6 +224,60 @@ finger_flick_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
}
static void
+finger_rotate_start(void *data , Efl_Canvas_Gesture *tap)
+{
+ Eina_Position2D pos = efl_gesture_hotspot_get(tap);
+
+ _color_and_icon_set(data, ROTATE_NAME, 1, MAX_TAP, START_COLOR);
+ printf("Rotate Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
+}
+
+static void
+finger_rotate_end(void *data , Efl_Canvas_Gesture *tap)
+{
+ Eina_Position2D pos = efl_gesture_hotspot_get(tap);
+ double angle = efl_gesture_rotate_angle_get(tap);
+ double radius = efl_gesture_rotate_radius_get(tap);
+
+ _color_and_icon_set(data, ROTATE_NAME, 1, MAX_TAP, END_COLOR);
+ printf("Rotate Gesture ended x,y=<%d,%d> angle=<%g> radius=<%f>\n", pos.x, pos.y, angle, radius);
+}
+
+static void
+finger_rotate_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
+{
+ _color_and_icon_set(data, ROTATE_NAME, 1, MAX_TAP, ABORT_COLOR);
+ printf("Rotate Aborted\n");
+}
+
+static void
+finger_zoom_start(void *data , Efl_Canvas_Gesture *tap)
+{
+ Eina_Position2D pos = efl_gesture_hotspot_get(tap);
+
+ _color_and_icon_set(data, ZOOM_NAME, 1, MAX_TAP, START_COLOR);
+ printf("Zoom Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
+}
+
+static void
+finger_zoom_end(void *data , Efl_Canvas_Gesture *tap)
+{
+ Eina_Position2D pos = efl_gesture_hotspot_get(tap);
+ double zoom = efl_gesture_zoom_get(tap);
+ double radius = efl_gesture_zoom_radius_get(tap);
+
+ _color_and_icon_set(data, ZOOM_NAME, 1, MAX_TAP, END_COLOR);
+ printf("Zoom Gesture ended x,y=<%d,%d> zoom=<%g> radius=<%f>\n", pos.x, pos.y, zoom, radius);
+}
+
+static void
+finger_zoom_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
+{
+ _color_and_icon_set(data, ZOOM_NAME, 1, MAX_TAP, ABORT_COLOR);
+ printf("Zoom Aborted\n");
+}
+
+static void
finger_momentum_start(void *data , Efl_Canvas_Gesture *tap)
{
Eina_Position2D pos = efl_gesture_hotspot_get(tap);
@@ -333,34 +387,34 @@ finger_double_tap_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
}
static void
-finger_long_tap_start(void *data , Efl_Canvas_Gesture *tap)
+finger_long_press_start(void *data , Efl_Canvas_Gesture *tap)
{
Eina_Position2D pos = efl_gesture_hotspot_get(tap);
- _color_and_icon_set(data, LONG_TAP_NAME, 1, MAX_TAP, START_COLOR);
+ _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, START_COLOR);
printf("Long Tap Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
}
static void
-finger_long_tap_update(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
+finger_long_press_update(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
{
- _color_and_icon_set(data, LONG_TAP_NAME, 1, MAX_TAP, UPDATE_COLOR);
+ _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, UPDATE_COLOR);
printf("Long Tap Gesture updated\n");
}
static void
-finger_long_tap_end(void *data , Efl_Canvas_Gesture *tap)
+finger_long_press_end(void *data , Efl_Canvas_Gesture *tap)
{
Eina_Position2D pos = efl_gesture_hotspot_get(tap);
- _color_and_icon_set(data, LONG_TAP_NAME, 1, MAX_TAP, END_COLOR);
+ _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, END_COLOR);
printf("Long Tap Gesture ended x,y=<%d,%d> \n",pos.x, pos.y);
}
static void
-finger_long_tap_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
+finger_long_press_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
{
- _color_and_icon_set(data, LONG_TAP_NAME, 1, MAX_TAP, ABORT_COLOR);
+ _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, ABORT_COLOR);
printf("Long Tap Aborted\n");
}
@@ -370,13 +424,13 @@ tap_gesture_cb(void *data , const Efl_Event *ev)
Efl_Canvas_Gesture *g = ev->info;
switch(efl_gesture_state_get(g))
{
- case EFL_GESTURE_STARTED:
+ case EFL_GESTURE_STATE_STARTED:
finger_tap_start(data, g);
break;
- case EFL_GESTURE_CANCELED:
+ case EFL_GESTURE_STATE_CANCELED:
finger_tap_abort(data, g);
break;
- case EFL_GESTURE_FINISHED:
+ case EFL_GESTURE_STATE_FINISHED:
finger_tap_end(data, g);
break;
default:
@@ -390,13 +444,13 @@ flick_gesture_cb(void *data , const Efl_Event *ev)
Efl_Canvas_Gesture *g = ev->info;
switch(efl_gesture_state_get(g))
{
- case EFL_GESTURE_STARTED:
+ case EFL_GESTURE_STATE_STARTED:
finger_flick_start(data, g);
break;
- case EFL_GESTURE_CANCELED:
+ case EFL_GESTURE_STATE_CANCELED:
finger_flick_abort(data, g);
break;
- case EFL_GESTURE_FINISHED:
+ case EFL_GESTURE_STATE_FINISHED:
finger_flick_end(data, g);
break;
default:
@@ -405,21 +459,61 @@ flick_gesture_cb(void *data , const Efl_Event *ev)
}
static void
+rotate_gesture_cb(void *data , const Efl_Event *ev)
+{
+ Efl_Canvas_Gesture *g = ev->info;
+ switch(efl_gesture_state_get(g))
+ {
+ case EFL_GESTURE_STATE_STARTED:
+ finger_rotate_start(data, g);
+ break;
+ case EFL_GESTURE_STATE_CANCELED:
+ finger_rotate_abort(data, g);
+ break;
+ case EFL_GESTURE_STATE_FINISHED:
+ finger_rotate_end(data, g);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+zoom_gesture_cb(void *data , const Efl_Event *ev)
+{
+ Efl_Canvas_Gesture *g = ev->info;
+ switch(efl_gesture_state_get(g))
+ {
+ case EFL_GESTURE_STATE_STARTED:
+ finger_zoom_start(data, g);
+ break;
+ case EFL_GESTURE_STATE_CANCELED:
+ finger_zoom_abort(data, g);
+ break;
+ case EFL_GESTURE_STATE_FINISHED:
+ finger_zoom_end(data, g);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
momentum_gesture_cb(void *data , const Efl_Event *ev)
{
Efl_Canvas_Gesture *g = ev->info;
switch(efl_gesture_state_get(g))
{
- case EFL_GESTURE_STARTED:
+ case EFL_GESTURE_STATE_STARTED:
finger_momentum_start(data, g);
break;
- case EFL_GESTURE_UPDATED:
+ case EFL_GESTURE_STATE_UPDATED:
finger_momentum_update(data, g);
break;
- case EFL_GESTURE_CANCELED:
+ case EFL_GESTURE_STATE_CANCELED:
finger_momentum_abort(data, g);
break;
- case EFL_GESTURE_FINISHED:
+ case EFL_GESTURE_STATE_FINISHED:
finger_momentum_end(data, g);
break;
default:
@@ -433,16 +527,16 @@ triple_tap_gesture_cb(void *data , const Efl_Event *ev)
Efl_Canvas_Gesture *g = ev->info;
switch(efl_gesture_state_get(g))
{
- case EFL_GESTURE_STARTED:
+ case EFL_GESTURE_STATE_STARTED:
finger_triple_tap_start(data, g);
break;
- case EFL_GESTURE_UPDATED:
+ case EFL_GESTURE_STATE_UPDATED:
finger_triple_tap_update(data, g);
break;
- case EFL_GESTURE_CANCELED:
+ case EFL_GESTURE_STATE_CANCELED:
finger_triple_tap_abort(data, g);
break;
- case EFL_GESTURE_FINISHED:
+ case EFL_GESTURE_STATE_FINISHED:
finger_triple_tap_end(data, g);
break;
default:
@@ -456,16 +550,16 @@ double_tap_gesture_cb(void *data , const Efl_Event *ev)
Efl_Canvas_Gesture *g = ev->info;
switch(efl_gesture_state_get(g))
{
- case EFL_GESTURE_STARTED:
+ case EFL_GESTURE_STATE_STARTED:
finger_double_tap_start(data, g);
break;
- case EFL_GESTURE_UPDATED:
+ case EFL_GESTURE_STATE_UPDATED:
finger_double_tap_update(data, g);
break;
- case EFL_GESTURE_CANCELED:
+ case EFL_GESTURE_STATE_CANCELED:
finger_double_tap_abort(data, g);
break;
- case EFL_GESTURE_FINISHED:
+ case EFL_GESTURE_STATE_FINISHED:
finger_double_tap_end(data, g);
break;
default:
@@ -474,22 +568,22 @@ double_tap_gesture_cb(void *data , const Efl_Event *ev)
}
static void
-long_tap_gesture_cb(void *data , const Efl_Event *ev)
+long_press_gesture_cb(void *data , const Efl_Event *ev)
{
Efl_Canvas_Gesture *g = ev->info;
switch(efl_gesture_state_get(g))
{
- case EFL_GESTURE_STARTED:
- finger_long_tap_start(data, g);
+ case EFL_GESTURE_STATE_STARTED:
+ finger_long_press_start(data, g);
break;
- case EFL_GESTURE_UPDATED:
- finger_long_tap_update(data, g);
+ case EFL_GESTURE_STATE_UPDATED:
+ finger_long_press_update(data, g);
break;
- case EFL_GESTURE_CANCELED:
- finger_long_tap_abort(data, g);
+ case EFL_GESTURE_STATE_CANCELED:
+ finger_long_press_abort(data, g);
break;
- case EFL_GESTURE_FINISHED:
- finger_long_tap_end(data, g);
+ case EFL_GESTURE_STATE_FINISHED:
+ finger_long_press_end(data, g);
break;
default:
break;
@@ -578,7 +672,7 @@ test_gesture_framework(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
elm_table_pack(tb, bx, 2, 0, 1, 1);
/* Box of Long Tap icon and label */
- bx = create_gesture_box(win, infra->icons, 3, LONG_TAP_NAME, "Long Tap");
+ bx = create_gesture_box(win, infra->icons, 3, LONG_PRESS_NAME, "Long Tap");
elm_table_pack(tb, bx, 3, 0, 1, 1);
/* Box of Momentum icon and label */
@@ -689,11 +783,13 @@ test_gesture_framework(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
// LISTEN FOR GESTURES
efl_event_callback_add(target, EFL_EVENT_GESTURE_TAP, tap_gesture_cb, infra);
- efl_event_callback_add(target, EFL_EVENT_GESTURE_LONG_TAP, long_tap_gesture_cb, infra);
+ efl_event_callback_add(target, EFL_EVENT_GESTURE_LONG_PRESS, long_press_gesture_cb, infra);
efl_event_callback_add(target, EFL_EVENT_GESTURE_DOUBLE_TAP, double_tap_gesture_cb, infra);
efl_event_callback_add(target, EFL_EVENT_GESTURE_TRIPLE_TAP, triple_tap_gesture_cb, infra);
efl_event_callback_add(target, EFL_EVENT_GESTURE_MOMENTUM, momentum_gesture_cb, infra);
efl_event_callback_add(target, EFL_EVENT_GESTURE_FLICK, flick_gesture_cb, infra);
+ efl_event_callback_add(target, EFL_EVENT_GESTURE_ROTATE, rotate_gesture_cb, infra);
+ efl_event_callback_add(target, EFL_EVENT_GESTURE_ZOOM, zoom_gesture_cb, infra);
/* Update color state 20 times a second */
infra->colortimer = ecore_timer_add(0.05, _icon_color_set_cb, infra->icons);
diff --git a/src/bin/elementary/test_gesture_layer3.c b/src/bin/elementary/test_gesture_layer3.c
index 1029087d44..7e5007aed1 100644
--- a/src/bin/elementary/test_gesture_layer3.c
+++ b/src/bin/elementary/test_gesture_layer3.c
@@ -272,7 +272,7 @@ rotate_end(void *_po, void *event_info)
po->rot_tot_time = fabs(r_info->momentum) / ROTATE_MOMENTUM_FRICTION;
po->rot_momentum = r_info->momentum;
po->rot_progress = 0.0;
- if (po->rot_momentum)
+ if (EINA_DBL_NONZERO(po->rot_momentum))
{
po->rot_timer = ecore_animator_add(rotate_momentum_animation_operation, po);
}
@@ -334,7 +334,7 @@ zoom_end(void *_po, void *event_info)
po->zoom_mom_time = tot_time;
po->zoom_mom = p->momentum;
po->base_zoom = po->zoom;
- if (po->zoom_mom)
+ if (EINA_DBL_NONZERO(po->zoom_mom))
{
po->zoom_momentum = elm_transit_add();
elm_transit_duration_set(po->zoom_momentum,
@@ -425,7 +425,7 @@ momentum_end(void *_po, void *event_info)
po->mom_tot_time = sqrt((p->mx * p->mx) + (p->my * p->my))
/ MOMENTUM_FRICTION;
- if (po->mom_tot_time)
+ if (EINA_DBL_NONZERO(po->mom_tot_time))
{ /* Compute acceleration for both compenents, and launch timer */
po->mom_x_acc = (p->mx) / po->mom_tot_time; /* a = (v-v0) / t */
po->mom_y_acc = (p->my) / po->mom_tot_time; /* a = (v-v0) / t */
diff --git a/src/bin/elementary/test_glview_manygears.c b/src/bin/elementary/test_glview_manygears.c
index 31084b78ec..fbf404bf4f 100644
--- a/src/bin/elementary/test_glview_manygears.c
+++ b/src/bin/elementary/test_glview_manygears.c
@@ -405,7 +405,7 @@ perspective(GLfloat *m, GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFa
sine = sin(radians);
cosine = cos(radians);
- if ((deltaZ == 0) || (sine == 0) || (aspect == 0))
+ if (EINA_DBL_EQ(deltaZ, 0) || EINA_DBL_EQ(sine, 0) || EINA_DBL_EQ(aspect, 0))
return;
cotangent = cosine / sine;
diff --git a/src/bin/elementary/test_icon_animated.c b/src/bin/elementary/test_icon_animated.c
index 3ecfa26950..301f9a9385 100644
--- a/src/bin/elementary/test_icon_animated.c
+++ b/src/bin/elementary/test_icon_animated.c
@@ -22,8 +22,7 @@ test_icon_animated(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
- win = elm_win_add(NULL, "icon-animated-gif", ELM_WIN_BASIC);
- elm_win_title_set(win, "Icon Animated Gif");
+ win = elm_win_util_standard_add("icon-animated-gif", "Icon Animated Gif");
elm_win_autodel_set(win, EINA_TRUE);
bx = elm_box_add(win);
diff --git a/src/bin/elementary/test_label.c b/src/bin/elementary/test_label.c
index 5b3e5e8265..de7c2bcf32 100644
--- a/src/bin/elementary/test_label.c
+++ b/src/bin/elementary/test_label.c
@@ -492,6 +492,8 @@ test_textblock_fit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e
evas_textblock_style_set(style,styles[0]);
evas_object_textblock_style_set(app->txtblock,style);
evas_object_textblock_text_markup_set(app->txtblock,contents[0]);
+ evas_textblock_style_free(style);
+ style = NULL;
elm_box_horizontal_set(app->boxHor, EINA_TRUE);
elm_box_horizontal_set(app->boxHor2, EINA_TRUE);
@@ -541,6 +543,124 @@ test_textblock_fit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e
evas_object_show(app->win);
}
+/*** Text Memory Configuration **************************************************************/
+enum BUTTON_MEM{
+ BUTTON_MEM_SET_TEXT = 0,
+ BUTTON_MEM_APPLY_MEM = 1,
+ BUTTON_MEM_APPLY_FONT_SIZE = 2,
+ BUTTON_MEM_ALL = BUTTON_MEM_APPLY_FONT_SIZE+1,
+};
+
+char* BUTTON_MEM_STR[BUTTON_MEM_ALL] ={
+ "Load Emojis Text",
+ "Memory Limit(MB)",
+ "Font Size"
+};
+
+char *content = "<align=center>😀😁😂🤣😃😄😅😆😉😊😋😎😍😘😗😙😚☺🙂🤗🤔😐😑😶🙄😏😣😥😮🤐😯😪😫😴😌🤓😛😜😝🤤😒😓😔😕🙃🤑😲☹🙁😖😞😟😤😢😭😦😧😨😩😬😰😱😳😵😡😠😇🤠🤡🤥😷🤒🤕🤢🤧☻😈👿👹👺💀☠👻👽👾🤖💩😺😸😹😻😼😽🙀😿😾🙈🙉🙊👦👧👨👩👵👶👼👨‍⚕️👩‍⚕️👨‍🎓👩‍🎓👨‍🏫👩‍🏫👨‍⚖👩‍⚖👨‍🌾👩‍🌾👨‍🍳👩‍🍳👨‍🔧👩‍🔧👨‍🏭👩‍🏭👨‍💼👩‍💼👨‍🔬👩‍🔬👨‍💻👩‍💻👨‍🎤👩‍🎤👨‍🎨👩‍🎨👨‍✈️👩‍✈️👨‍🚀👩‍🚀👨‍🚒👩‍🚒👮‍♂️👮‍♀️🕵️‍♂️🕵️‍♀️💂‍♂️💂‍♀️👷‍♂️👷‍♀️👳‍♂️👳‍♀️👱‍♂️👱‍♀️🎅🤶👸🤴👰🤵🤰👲🙍‍♂️🙍‍♀️🙎‍♂️🙎‍♀️🙅‍♂️🙅‍♀️🙆‍♂️🙆‍♀️💁‍♂️💁‍♀️🙋‍♂️🙋‍♀️🙇‍♂️🙇‍♀️🤦‍♂️🤦‍♀️🤷‍♂️🤷‍♀️💆‍♂️💆‍♀️💇‍♂️💇‍♀️🚶‍♂️🚶‍♀️🏃‍♂️🏃‍♀️💃🕺👯‍♂️👯‍♀️🕴🗣👤👥👫👬👭💏💑👪👨‍👩‍👧👨‍👩‍👧‍👦👨‍👩‍👦‍👦👨‍👩‍👧‍👧👨‍👦👨‍👦‍👦👨‍👧👨‍👧‍👦👨‍👧‍👧👩‍👦👩‍👦‍👦👩‍👧👩‍👧‍👦👩‍👧‍👧💪🤳👈👉☝️👆🖕👇✌🤞🖖🤘👊🖐✋👌👍👎✊👊🤛🤜🤚👋👏✍👐🙌🙏🤝💅👂👃👣👀👁👅👄💋💘❤💓💔💕💖💗💙💚💛💜🖤💝💞💟❣💌💤💢💣💥💦💨💫💬🗨🗯💭🕳👓🕶👔👕👖👗👘👙👚👛👜👝🛍🎒👞👟👠👡👢👑👒🎩🎓⛑📿💄💍💎🐵🐒🦍🐶🐕🐩🐺🦊🐱🐈🦁🐯🐅🐆🐴🐎🦌🦄🐮🐂🐃🐄🐷🐖🐗🐽🐏🐑🐐🐪🐫🐘🦏🐭🐁🐀🐹🐰🐇🐿🦇🐻🐨🐼🐾🦃🐔🐓🐣🐤🐥🐦🐧🕊🦅🦆🦉🐸🐊🐢🦎🐍🐲🐉🐳🐋🐬🐟🐠🐡🦈🐙🐚🦀🦐🦑🦋🐌🐛🐜🐝🐞🕷🕸🦂💐🌸💮🏵🌹🥀🌺🌻🌼🌷⚘🌱🌲🌳🌴🌵🌾🌿☘🍀🍁🍂🍃🍇🍈🍉🍊🍋🍌🍍🍎🍏🍐🍑🍒🍓🍅🥝🥑🍆🥔🥕🌽🌶🥒🍄🥜🌰🍞🥐🥖🥞🧀🍖🍗🥓🍔🍟🍕🌭🌮🌯🥙🥚🍳🥘🍲🥗🍿🍱🍘🍙🍚🍛🍜🍝🍠🍢🍣🍤🍥🍡🍦🍧🍨🍩🍪🎂🍰🍫🍬🍭🍮🍯🍼🥛☕🍵🍶🍾🍷🍸🍹🍺🍻🥂🍽🍴🥄🔪🏺🎃🎄🎆🎇✨🎈🎉🎊🎋🎍🎎🎏🎐🎑🎀🎁🎗🎟🎫🎖🏆🏅🥇🥈🥉⚽️⚾️🏀🏐🏈🏉🎾🎱🎳🏏🏑🏒🏓🏸🥊🥋🥅🎯⛳🏌️‍♂️🏌️‍♀️⛸🎣🎽🎿⛷🏂🏄‍♂️🏄‍♀️🏇🏊‍♂️🏊‍♀️⛹️‍♂️⛹️‍♀️🏋️‍♂️🏋️‍♀️🚴‍♂️🚴‍♀️🚵‍♂️🚵‍♀️🏎🏍🤸‍♂️🤸‍♀️🤼‍♂️🤼‍♀️🤽‍♂️🤽‍♀️🤾‍♂️🤾‍♀️🤺🤹‍♂️🤹‍♀️🎮🕹🎲♠️♥️♦️♣️🃏🀄🎴🌍🌎🌏🌐🗺🏔⛰🌋🗻🏕🏖🏜🏝🏞🏟🏛🏗🏘🏙🏚🏠🏡🏢🏣🏤🏥🏦🏨🏩🏪🏫🏬🏭🏯🏰💒🗼🗽⛪🕌🕍⛩🕋⛲⛺🌁🌃🌄🌅🌆🌇🌉⛼♨️🌌🎠🎡🎢💈🎪🎭🖼🎨🎰🚂🚃🚄🚅🚆🚇🚈🚉🚊🚝🚞🚋🚌🚍🚎🚐🚑🚒🚓🚔🚕🚖🚗🚘🚙🚚🚛⛟🚜🚲🛴🛵🚏🛣🛤⛽🚨🚥🚦🚧🛑⚓⛵🚣‍♂️🚣‍♀️🛶🚤🛳⛴🛥🚢✈🛩🛫🛬💺🚁🚟🚠🚡🚀🛰🛎🚪🛌🛏🛋🚽🚿🛀🛁⌛⏳⌚⏰⏱⏲🕰🕛🕧🕐🕜🕑🕝🕒🕞🕓🕟🕔🕠🕕🕡🕖🕢🕗🕣🕘🕤🕙🕥🕚🕦🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜🌡☀️🌝🌞⭐🌟🌠☁️⛅⛈🌤🌥🌦🌧🌨🌩🌪🌫🌬🌀🌈🌂☂️☔⛱⚡❄☃️⛄☄🔥💧🌊🔇🔈🔉🔊📢📣📯🔔🔕🎼🎵🎶🎙🎚🎛🎤🎧📻🎷🎸🎹🎺🎻🥁📱📲☎️📞📟📠🔋🔌💻🖥🖨⌨🖱🖲💽💾💿📀🎥🎞📽🎬📺📷📸📹📼🔍🔎🔬🔭📡🕯💡🔦🏮📔📕📖📗📘📙📚📓📒📃📜📄📰🗞📑🔖🏷💰💴💵💶💷💸💳💱💲✉📧📨📩📤📥📦📫📪📬📭📮🗳✏✒🖋🖊🖌🖍📝💼📁📂🗂📅📆🗒🗓📇📈📉📊📋📌📍📎🖇📏📐✂️🗃🗄🗑🔒🔓🔏🔐🔑🗝🔨⛏⚒🛠🗡⚔🔫🏹🛡🔧🔩⚙🗜⚗⚖🔗⛓💉💊🚬⚰⚱🗿🛢🔮🔮🏧🚮🚰♿🚹🚺🚻🚼🚾🛂🛃🛄🛅⚠️🚸⛔🚫🚳🚭🚯🚱🚷📵🔞☢☣⬆️↗️➡️↘️⬇️↙️⬅️↖️↕️↔️↩↪⤴️⤵️🔃🔄🔙🔚🔛🔜🔝🛐⚛🕉✡☸☯️☦☮🕎🔯♈♉♊♋♌♍♎♏♐♑♒♓⛎🔀🔁🔂▶️⏩⏭⏯◀️⏪⏮🔼⏫🔽⏬⏸⏹⏺⏏🎦🔅🔆📶📳📴♻️📛⚜🔰🔱⭕✅☑✔✖❌❎➕♀️♂️⚕➖➗➰➿〽✳✴❇⁉️❓❔❕❗〰🔟💯🔠🔡🔢🔣🔤🅰️🆎️🅱️🆑️🆒️🆓️ℹ🆔️Ⓜ️🆕️🆖️🅾️🆗️🅿️🆘️🆙️🆚️🈁🈂🈷🈶🈯🉐🈹🈚🈲🉑🈸🈴🈳㊗㊙🈺🈵▫️◻◼◽◾⬛⬜🔶️🔷️🔸️🔹️🔺️🔻💠🔘🔲🔳⚪⚫🔴🔵🏁🚩🏴🏳🏳️‍🌈⚀⚁⚂⚃⚄⚅⛾♾🇦🇨🇦🇩🇦🇪🇦🇫🇦🇬🇦🇮🇦🇱🇦🇲🇦🇴🇦🇶🇦🇷🇦🇸🇦🇹🇦🇺🇦🇼🇦🇽🇦🇿🇧🇦🇧🇧🇧🇩🇧🇪🇧🇫🇧🇬🇧🇭🇧🇮🇧🇯🇧🇱🇧🇲🇧🇳🇧🇴🇧🇶🇧🇷🇧🇸🇧🇹🇧🇼🇧🇾🇧🇿🇨🇦🇨🇨🇨🇩🇨🇫🇨🇬🇨🇭🇨🇮🇨🇰🇨🇱🇨🇲🇨🇳🇨🇴🇨🇷🇨🇺🇨🇻🇨🇼🇨🇽🇨🇾🇨🇿🇩🇪🇩🇯🇩🇰🇩🇲🇩🇴🇩🇿🇪🇨🇪🇪🇪🇬🇪🇭🇪🇷🇪🇸🇪🇹🇪🇺🇫🇮🇫🇯🇫🇰🇫🇲🇫🇴🇫🇷🇬🇦🇬🇧🇬🇩🇬🇪🇬🇫🇬🇬🇬🇭🇬🇮🇬🇱🇬🇲🇬🇳🇬🇵🇬🇶🇬🇷🇬🇸🇬🇹🇬🇺🇬🇼🇬🇾🇭🇰🇭🇲🇭🇳🇭🇷🇭🇹🇭🇺🇮🇨🇮🇩🇮🇪🇮🇱🇮🇲🇮🇳🇮🇴🇮🇶🇮🇷🇮🇸🇮🇹🇯🇪🇯🇲🇯🇴🇯🇵🇰🇪🇰🇬🇰🇭🇰🇮🇰🇲🇰🇳🇰🇵🇰🇷🇰🇼🇰🇾🇰🇿🇱🇦🇱🇧🇱🇨🇱🇮🇱🇰🇱🇷🇱🇸🇱🇹🇱🇺🇱🇻🇱🇾🇲🇦🇲🇨🇲🇩🇲🇪🇲🇬🇲🇭🇲🇰🇲🇱🇲🇲🇲🇳🇲🇴🇲🇵🇲🇶🇲🇷🇲🇸🇲🇹🇲🇺🇲🇻🇲🇼🇲🇽🇲🇾🇲🇿🇳🇦🇳🇨🇳🇪🇳🇫🇳🇬🇳🇮🇳🇱🇳🇴🇳🇵🇳🇷🇳🇺🇳🇿🇴🇲🇵🇦🇵🇪🇵🇫🇵🇬🇵🇭🇵🇰🇵🇱🇵🇲🇵🇳🇵🇷🇵🇸🇵🇹🇵🇼🇵🇾🇶🇦🇷🇪🇷🇴🇷🇸🇷🇺🇷🇼🇸🇦🇸🇧🇸🇨🇸🇩🇸🇪🇸🇬🇸🇭🇸🇮🇸🇰🇸🇱🇸🇲🇸🇳🇸🇴🇸🇷🇸🇸🇸🇹🇸🇻🇸🇽🇸🇾🇸🇿🇹🇦🇹🇨🇹🇩🇹🇫🇹🇬🇹🇭🇹🇯🇹🇰🇹🇱🇹🇲🇹🇳🇹🇴🇹🇷🇹🇹🇹🇻🇹🇼🇹🇿🇺🇦🇺🇬🇺🇳🇺🇸🇺🇾🇺🇿🇻🇦🇻🇨🇻🇪🇻🇬🇻🇮🇻🇳🇻🇺🇼🇫🇼🇸🇽🇰🇾🇪🇾🇹🇿🇦🇿🇲🇿🇼</align>";
+
+typedef struct _APP_MEM
+{
+ Evas_Object *win, *box, *main_entry;
+ Eo *btn[BUTTON_MEM_ALL];
+ Eo *entry[BUTTON_MEM_ALL];
+} APP_MEM;
+APP_MEM *app_mem;
+
+static void _btn_clicked_mem(void *data EINA_UNUSED, Eo *obj, void *eventInfo EINA_UNUSED){
+ if (obj == app_mem->btn[BUTTON_MEM_SET_TEXT])
+ {
+ elm_object_text_set(app_mem->main_entry, content);
+ }
+ else if (obj == app_mem->btn[BUTTON_MEM_APPLY_MEM])
+ {
+ int size = atoi(elm_object_text_get(app_mem->entry[BUTTON_MEM_APPLY_MEM]));
+ if (size > 0 && size < 4000)
+ {
+ evas_font_data_cache_set(EVAS_FONT_DATA_CACHE_TEXTURE, size * 1024 * 1024);
+ }
+ else
+ {
+ elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_MEM], "NAN");
+ }
+ }
+ else if (obj == app_mem->btn[BUTTON_MEM_APPLY_FONT_SIZE])
+ {
+ int font_size = atoi(elm_object_text_get(app_mem->entry[BUTTON_MEM_APPLY_FONT_SIZE]));
+ if (font_size > 0 && font_size < 1000)
+ {
+ char sfont_size[256] = {0};
+ sprintf(sfont_size,"DEFAULT='font_size=%i'", font_size);
+ elm_entry_text_style_user_push(app_mem->main_entry, sfont_size);
+ }
+ else
+ {
+ elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_FONT_SIZE], "NAN");
+ }
+ }
+}
+
+void
+test_text_memory(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ app_mem = calloc(sizeof(APP_MEM), 1);
+
+ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+ app_mem->win = elm_win_util_standard_add("Main", "App");
+ elm_win_autodel_set(app_mem->win, EINA_TRUE);
+
+ app_mem->box = elm_box_add(app_mem->win);
+ app_mem->main_entry = elm_entry_add(app_mem->box);
+
+ evas_object_size_hint_weight_set(app_mem->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(app_mem->box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ app_mem->btn[BUTTON_MEM_SET_TEXT] = elm_button_add(app_mem->box);
+ evas_object_smart_callback_add(app_mem->btn[BUTTON_MEM_SET_TEXT], "clicked", _btn_clicked_mem, NULL);
+ elm_object_text_set(app_mem->btn[BUTTON_MEM_SET_TEXT], BUTTON_MEM_STR[BUTTON_MEM_SET_TEXT]);
+ evas_object_size_hint_align_set(app_mem->btn[BUTTON_MEM_SET_TEXT], EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_pack_end(app_mem->box, app_mem->btn[BUTTON_MEM_SET_TEXT]);
+ evas_object_show(app_mem->btn[BUTTON_MEM_SET_TEXT]);
+
+ elm_entry_scrollable_set(app_mem->main_entry, EINA_TRUE);
+ evas_object_show(app_mem->main_entry);
+ evas_object_show(app_mem->box);
+
+ elm_box_pack_end(app_mem->box, app_mem->main_entry);
+ evas_object_smart_callback_add(app_mem->btn[BUTTON_MEM_SET_TEXT], "clicked", _btn_clicked_mem, NULL);
+ evas_object_show(app_mem->btn[BUTTON_MEM_SET_TEXT]);
+
+ elm_win_resize_object_add(app_mem->win, app_mem->box);
+ evas_object_resize(app_mem->win, 320, 320);
+
+ elm_entry_text_style_user_push(app_mem->main_entry, "DEFAULT='font_size=20'");
+
+ for(int i = BUTTON_MEM_APPLY_MEM ; i < BUTTON_MEM_ALL ; i++)
+ {
+ app_mem->btn[i] = elm_button_add(app_mem->box);
+ app_mem->entry[i] = elm_entry_add(app_mem->box);
+ evas_object_smart_callback_add(app_mem->btn[i], "clicked", _btn_clicked_mem, NULL);
+ elm_object_text_set(app_mem->btn[i], BUTTON_MEM_STR[i]);
+ elm_box_pack_end(app_mem->box, app_mem->btn[i]);
+ elm_box_pack_end(app_mem->box, app_mem->entry[i]);
+
+ evas_object_size_hint_align_set(app_mem->btn[i], EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_align_set(app_mem->entry[i], EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ evas_object_show(app_mem->btn[i]);
+ evas_object_show(app_mem->entry[i]);
+ }
+
+ elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_MEM],"Texture limit in MB");
+ elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_FONT_SIZE],"20");
+
+ evas_object_size_hint_weight_set(app_mem->main_entry, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(app_mem->main_entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ evas_object_show(app_mem->win);
+}
+
/*** Label Wrap **************************************************************/
void
test_label_wrap(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
diff --git a/src/bin/elementary/test_map.c b/src/bin/elementary/test_map.c
index 3fe55b9be7..b87f3d6521 100644
--- a/src/bin/elementary/test_map.c
+++ b/src/bin/elementary/test_map.c
@@ -448,7 +448,7 @@ _map_name_loaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA
if (addr)
{
printf("name of [lon = %lf, lat = %lf] is %s\n", lon, lat, addr);
- if ((lon != 0.0) && (lat !=0.0))
+ if (EINA_DBL_NONZERO(lon) && EINA_DBL_NONZERO(lat))
{
Eina_Bool b = elm_map_paused_get(data);
elm_map_paused_set(data, EINA_TRUE);
@@ -1096,8 +1096,6 @@ test_map(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info
evas_object_event_callback_add(map, EVAS_CALLBACK_DEL, _del_map, NULL);
- srand(time(NULL));
-
tile_srcs = elm_map_sources_get(map, ELM_MAP_SOURCE_TYPE_TILE);
route_srcs = elm_map_sources_get(map, ELM_MAP_SOURCE_TYPE_ROUTE);
name_srcs = elm_map_sources_get(map, ELM_MAP_SOURCE_TYPE_NAME);
diff --git a/src/bin/elementary/test_naviframe.c b/src/bin/elementary/test_naviframe.c
index 81696148ba..36e4bdb332 100644
--- a/src/bin/elementary/test_naviframe.c
+++ b/src/bin/elementary/test_naviframe.c
@@ -65,6 +65,43 @@ _promote(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
elm_naviframe_item_promote(data);
}
+Eina_Bool
+_pop_cb(void *data EINA_UNUSED, Elm_Object_Item *it)
+{
+ elm_object_item_del(it);
+
+ /* If EINA_TRUE is returned, pop transition effect happens and then the item
+ * is automatically deleted.
+ * If EINA_FALSE is returned, pop transition effect does not happen and the
+ * item is not automatically deleted.
+ */
+ return EINA_FALSE;
+}
+
+void
+_page9(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *bt, *bt2, *nf = data;
+ Elm_Object_Item *it;
+
+ bt = elm_button_add(nf);
+ evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ BUTTON_TEXT_SET(bt, "Page 8");
+
+ bt2 = elm_button_add(nf);
+ evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ BUTTON_TEXT_SET(bt2, "Page 1");
+ evas_object_smart_callback_add(bt2, "clicked", _promote,
+ evas_object_data_get(nf, "page1"));
+
+ it = elm_naviframe_item_push(nf, "Page 9", bt, bt2, NULL, NULL);
+ elm_object_item_part_text_set(it, "subtitle", "Callback for naviframe item pop is set");
+
+ elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+
+ evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
+}
+
void
_page8(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
@@ -78,9 +115,9 @@ _page8(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
bt2 = elm_button_add(nf);
evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
- BUTTON_TEXT_SET(bt2, "Page 1");
- evas_object_smart_callback_add(bt2, "clicked", _promote,
- evas_object_data_get(nf, "page1"));
+ BUTTON_TEXT_SET(bt2, "Page 9");
+ evas_object_smart_callback_add(bt2, "clicked", _page9, nf);
+
content = _content_new(nf, img6);
it = elm_naviframe_item_push(nf, "Page 8", bt, bt2, content, NULL);
elm_object_item_part_text_set(it, "subtitle", "Overlap style!");
diff --git a/src/bin/elementary/test_part_shadow.c b/src/bin/elementary/test_part_shadow.c
index c8e0f18591..12b202c86e 100644
--- a/src/bin/elementary/test_part_shadow.c
+++ b/src/bin/elementary/test_part_shadow.c
@@ -37,11 +37,11 @@ pulse_start(void *data, const Efl_Event *ev EINA_UNUSED)
{
Test_Data *td = data;
- efl_ui_progressbar_pulse_set(td->pb1, EINA_TRUE);
- efl_ui_progressbar_pulse_set(td->pb2, EINA_TRUE);
- efl_ui_progressbar_pulse_set(td->pb3, EINA_TRUE);
- efl_ui_progressbar_pulse_set(td->pb4, EINA_TRUE);
- efl_ui_progressbar_pulse_set(td->pb5, EINA_TRUE);
+ efl_ui_progressbar_infinite_mode_set(td->pb1, EINA_TRUE);
+ efl_ui_progressbar_infinite_mode_set(td->pb2, EINA_TRUE);
+ efl_ui_progressbar_infinite_mode_set(td->pb3, EINA_TRUE);
+ efl_ui_progressbar_infinite_mode_set(td->pb4, EINA_TRUE);
+ efl_ui_progressbar_infinite_mode_set(td->pb5, EINA_TRUE);
efl_ui_widget_disabled_set(td->btn_start, EINA_TRUE);
efl_ui_widget_disabled_set(td->btn_stop, EINA_FALSE);
@@ -54,11 +54,11 @@ pulse_stop(void *data, const Efl_Event *ev EINA_UNUSED)
{
Test_Data *td = data;
- efl_ui_progressbar_pulse_set(td->pb1, EINA_FALSE);
- efl_ui_progressbar_pulse_set(td->pb2, EINA_FALSE);
- efl_ui_progressbar_pulse_set(td->pb3, EINA_FALSE);
- efl_ui_progressbar_pulse_set(td->pb4, EINA_FALSE);
- efl_ui_progressbar_pulse_set(td->pb5, EINA_FALSE);
+ efl_ui_progressbar_infinite_mode_set(td->pb1, EINA_FALSE);
+ efl_ui_progressbar_infinite_mode_set(td->pb2, EINA_FALSE);
+ efl_ui_progressbar_infinite_mode_set(td->pb3, EINA_FALSE);
+ efl_ui_progressbar_infinite_mode_set(td->pb4, EINA_FALSE);
+ efl_ui_progressbar_infinite_mode_set(td->pb5, EINA_FALSE);
efl_ui_widget_disabled_set(td->btn_start, EINA_FALSE);
efl_ui_widget_disabled_set(td->btn_stop, EINA_TRUE);
@@ -96,7 +96,6 @@ test_part_shadow(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);
efl_gfx_hint_weight_set(pb, EFL_GFX_HINT_EXPAND, 0);
- efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
efl_pack(bx, pb);
td->pb1 = pb;
@@ -122,7 +121,6 @@ test_part_shadow(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
efl_unref(shadow);
pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);
- efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
efl_gfx_hint_weight_set(pb, EFL_GFX_HINT_EXPAND, 0);
efl_pack(bx, pb);
td->pb4 = pb;
@@ -150,7 +148,6 @@ test_part_shadow(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
// FIXME: Needs wheel progressbar class
pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,
efl_ui_widget_style_set(efl_added, "wheel"));
- efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
efl_pack(hbx, pb);
td->pb2 = pb;
@@ -163,7 +160,6 @@ test_part_shadow(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,
efl_ui_widget_style_set(efl_added, "wheel"));
- efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
efl_pack(hbx, pb);
td->pb3 = pb;
diff --git a/src/bin/elementary/test_photocam.c b/src/bin/elementary/test_photocam.c
index de7b827a84..687033b0f1 100644
--- a/src/bin/elementary/test_photocam.c
+++ b/src/bin/elementary/test_photocam.c
@@ -150,10 +150,6 @@ my_bt_open(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
eina_list_free(grps);
}
-
- if (file && eina_str_has_extension(file, ".gif")
- && efl_playable_get(ph))
- efl_player_playing_set(ph, EINA_TRUE);
}
static void
@@ -179,7 +175,7 @@ my_bt_zoom_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UN
zoom -= 0.5;
else if ((zoom > 1.0) && (zoom <= 1.5))
zoom = 1.0;
- else if (zoom == 1.0)
+ else if (EINA_DBL_EQ(zoom, 1.0))
zoom = 0.8;
else
zoom = zoom * zoom;
@@ -834,7 +830,8 @@ test_image_zoomable_animated(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
if (efl_playable_get(zoomable))
{
printf("animation is available for this image.\n");
- efl_player_playing_set(zoomable, EINA_TRUE);
+ efl_player_autoplay_set(zoomable, EINA_TRUE);
+ efl_player_playback_loop_set(zoomable, EINA_TRUE);
}
rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, win,
diff --git a/src/bin/elementary/test_tooltip.c b/src/bin/elementary/test_tooltip.c
index eb4ce890c1..3615886478 100644
--- a/src/bin/elementary/test_tooltip.c
+++ b/src/bin/elementary/test_tooltip.c
@@ -157,7 +157,7 @@ _tt_item_icon3(void *data EINA_UNUSED,
sc = ((float)sw * 0.8) / (float)w;
else if ((float)h / (float)sh >= 0.8)
sc = ((float)sh * 0.8) / (float)h;
- if (sc) elm_object_scale_set(ic, sc);
+ if (EINA_FLT_NONZERO(sc)) elm_object_scale_set(ic, sc);
}
return ic;
}
diff --git a/src/bin/elementary/test_ui_clock.c b/src/bin/elementary/test_ui_clock.c
index 79e9074ead..9973b25cd3 100644
--- a/src/bin/elementary/test_ui_clock.c
+++ b/src/bin/elementary/test_ui_clock.c
@@ -6,7 +6,7 @@
/* A simple test, just displaying clock in its default format */
-Evas_Object *dt1, *dt2, *dt3, *dt4;
+Evas_Object *uicdt1, *uicdt2, *uicdt3, *uicdt4;
static void
_changed_cb(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
@@ -28,19 +28,19 @@ _bt_clicked(void *data EINA_UNUSED, const Efl_Event *ev)
new_time.tm_mday = 26;
new_time.tm_hour = 9;
new_time.tm_min = 0;
- efl_ui_clock_field_visible_set(dt1, EFL_UI_CLOCK_TYPE_HOUR, EINA_TRUE);
- efl_ui_clock_field_visible_set(dt1, EFL_UI_CLOCK_TYPE_MINUTE, EINA_TRUE);
- efl_ui_clock_field_visible_set(dt1, EFL_UI_CLOCK_TYPE_AMPM, EINA_TRUE);
- efl_ui_clock_field_visible_set(dt1, EFL_UI_CLOCK_TYPE_SECOND, EINA_TRUE);
- efl_ui_clock_field_visible_set(dt1, EFL_UI_CLOCK_TYPE_DAY, EINA_TRUE);
- efl_ui_clock_time_set(dt1, new_time);
-
- elm_object_disabled_set(dt1, EINA_TRUE);
+ efl_ui_clock_field_visible_set(uicdt1, EFL_UI_CLOCK_TYPE_HOUR, EINA_TRUE);
+ efl_ui_clock_field_visible_set(uicdt1, EFL_UI_CLOCK_TYPE_MINUTE, EINA_TRUE);
+ efl_ui_clock_field_visible_set(uicdt1, EFL_UI_CLOCK_TYPE_AMPM, EINA_TRUE);
+ efl_ui_clock_field_visible_set(uicdt1, EFL_UI_CLOCK_TYPE_SECOND, EINA_TRUE);
+ efl_ui_clock_field_visible_set(uicdt1, EFL_UI_CLOCK_TYPE_DAY, EINA_TRUE);
+ efl_ui_clock_time_set(uicdt1, new_time);
+
+ elm_object_disabled_set(uicdt1, EINA_TRUE);
elm_object_disabled_set(ev->object, EINA_TRUE);
- efl_del(dt2);
- efl_del(dt3);
- dt2 = dt3 = NULL;
+ efl_del(uicdt2);
+ efl_del(uicdt3);
+ uicdt2 = uicdt3 = NULL;
}
void
@@ -56,33 +56,33 @@ test_ui_clock(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
efl_content_set(win, efl_added),
efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(360, 240)));
- dt1 = efl_add(EFL_UI_CLOCK_CLASS, bx,
- efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
- efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_HOUR, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_MINUTE, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_AMPM, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_SECOND, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_DAY, EINA_FALSE),
- efl_ui_clock_pause_set(efl_added, EINA_TRUE),
- efl_event_callback_add(efl_added, EFL_UI_CLOCK_EVENT_CHANGED, _changed_cb, NULL),
- efl_pack(bx, efl_added));
-
- dt2 = efl_add(EFL_UI_CLOCK_CLASS, bx,
- efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
- efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_YEAR, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_MONTH, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_DATE, EINA_FALSE),
- efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_SECOND, EINA_FALSE),
- efl_ui_clock_pause_set(efl_added, EINA_TRUE),
- efl_pack(bx, efl_added));
- elm_object_disabled_set(dt2, EINA_TRUE);
-
- dt3 = efl_add(EFL_UI_CLOCK_CLASS, bx,
- efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
- efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
- efl_pack(bx, efl_added));
+ uicdt1 = efl_add(EFL_UI_CLOCK_CLASS, bx,
+ efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
+ efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_HOUR, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_MINUTE, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_AMPM, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_SECOND, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_DAY, EINA_FALSE),
+ efl_ui_clock_pause_set(efl_added, EINA_TRUE),
+ efl_event_callback_add(efl_added, EFL_UI_CLOCK_EVENT_CHANGED, _changed_cb, NULL),
+ efl_pack(bx, efl_added));
+
+ uicdt2 = efl_add(EFL_UI_CLOCK_CLASS, bx,
+ efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
+ efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_YEAR, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_MONTH, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_DATE, EINA_FALSE),
+ efl_ui_clock_field_visible_set(efl_added, EFL_UI_CLOCK_TYPE_SECOND, EINA_FALSE),
+ efl_ui_clock_pause_set(efl_added, EINA_TRUE),
+ efl_pack(bx, efl_added));
+ elm_object_disabled_set(uicdt2, EINA_TRUE);
+
+ uicdt3 = efl_add(EFL_UI_CLOCK_CLASS, bx,
+ efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
+ efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
+ efl_pack(bx, efl_added));
efl_add(EFL_UI_TEXTBOX_CLASS, bx,
efl_text_set(efl_added, "Editable Clock:"),
@@ -92,12 +92,12 @@ test_ui_clock(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(100, 25)),
efl_pack(bx, efl_added));
- dt4 = efl_add(EFL_UI_CLOCK_CLASS, bx,
- efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
- efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
- efl_ui_clock_edit_mode_set(efl_added, EINA_TRUE),
- efl_ui_clock_pause_set(efl_added, EINA_TRUE),
- efl_pack(bx, efl_added));
+ uicdt4 = efl_add(EFL_UI_CLOCK_CLASS, bx,
+ efl_gfx_hint_weight_set(efl_added, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
+ efl_gfx_hint_fill_set(efl_added, EINA_TRUE, EINA_FALSE),
+ efl_ui_clock_edit_mode_set(efl_added, EINA_TRUE),
+ efl_ui_clock_pause_set(efl_added, EINA_TRUE),
+ efl_pack(bx, efl_added));
efl_add(EFL_UI_BUTTON_CLASS, win,
efl_text_set(efl_added, "Back to the future..."),
diff --git a/src/bin/elementary/test_ui_pager.c b/src/bin/elementary/test_ui_pager.c
index 34792f3832..c9ec2d6222 100644
--- a/src/bin/elementary/test_ui_pager.c
+++ b/src/bin/elementary/test_ui_pager.c
@@ -316,7 +316,7 @@ static void indicator_icon_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
Params *params = data;
- params->indicator = efl_add(EFL_PAGE_INDICATOR_ICON_CLASS, params->pager);
+ params->indicator = efl_add(EFL_PAGE_ICON_INDICATOR_CLASS, params->pager);
efl_ui_pager_indicator_set(params->pager, params->indicator);
}
diff --git a/src/bin/elementary/test_ui_pager_scroll.c b/src/bin/elementary/test_ui_pager_scroll.c
index c60ac486b2..7c1211e31b 100644
--- a/src/bin/elementary/test_ui_pager_scroll.c
+++ b/src/bin/elementary/test_ui_pager_scroll.c
@@ -369,7 +369,7 @@ static void indicator_icon_btn_cb(void *data,
{
Params *params = data;
- params->indicator = efl_add(EFL_PAGE_INDICATOR_ICON_CLASS, params->pager);
+ params->indicator = efl_add(EFL_PAGE_ICON_INDICATOR_CLASS, params->pager);
efl_ui_pager_indicator_set(params->pager, params->indicator);
}
diff --git a/src/bin/elementary/test_ui_progressbar.c b/src/bin/elementary/test_ui_progressbar.c
index a9ca9a86f8..faea211629 100644
--- a/src/bin/elementary/test_ui_progressbar.c
+++ b/src/bin/elementary/test_ui_progressbar.c
@@ -179,7 +179,7 @@ test_ui_progressbar(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_inf
pd->pb2 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
efl_pack(bx, efl_added),
efl_text_set(efl_added, "10-100"),
- efl_ui_progressbar_pulse_set(efl_added, EINA_TRUE),
+ efl_ui_progressbar_infinite_mode_set(efl_added, EINA_TRUE),
efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20)),
efl_ui_range_limits_set(efl_added, 10, 100),
efl_ui_range_value_set(efl_added, 10)
diff --git a/src/bin/elementary/test_ui_separator.c b/src/bin/elementary/test_ui_separator.c
new file mode 100644
index 0000000000..d30afd3a12
--- /dev/null
+++ b/src/bin/elementary/test_ui_separator.c
@@ -0,0 +1,26 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+#include <Efl_Ui.h>
+
+void
+test_ui_separator(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Eo *win, *table, *sep;
+
+ win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
+ efl_text_set(efl_added, "Efl.Ui.Separator"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+
+ table = efl_add(EFL_UI_TABLE_CLASS, win);
+ efl_content_set(win, table);
+
+ sep = efl_add(EFL_UI_SEPARATOR_CLASS, win);
+ efl_pack_table(table, sep, 0, 0, 2, 1);
+
+ sep = efl_add(EFL_UI_SEPARATOR_CLASS, win,
+ efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_VERTICAL));
+ efl_pack_table(table, sep, 0, 0, 2, 1);
+
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 120));
+}
diff --git a/src/bin/elementary/test_ui_spotlight.c b/src/bin/elementary/test_ui_spotlight.c
index f38dfca754..a5c8d141e3 100644
--- a/src/bin/elementary/test_ui_spotlight.c
+++ b/src/bin/elementary/test_ui_spotlight.c
@@ -396,7 +396,7 @@ indicator_icon_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
Params *params = data;
- params->indicator = efl_new(EFL_UI_SPOTLIGHT_INDICATOR_ICON_CLASS);
+ params->indicator = efl_new(EFL_UI_SPOTLIGHT_ICON_INDICATOR_CLASS);
efl_ui_spotlight_indicator_set(params->spotlight, params->indicator);
}
@@ -849,7 +849,7 @@ test_ui_spotlight_stack(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
- Eo *win, *panes, *navi, *list, *layout, *spotlight, *view;
+ Eo *win, *panes, *navi, *list, *layout, *spotlight, *view = NULL;
Params *params = NULL;
char buf[PATH_MAX];
int i;
@@ -945,7 +945,7 @@ test_ui_spotlight_plain(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
- Eo *win, *panes, *navi, *list, *layout, *spotlight, *view;
+ Eo *win, *panes, *navi, *list, *layout, *spotlight, *view = NULL;
Params *params = NULL;
char buf[PATH_MAX];
int i;
@@ -1039,7 +1039,7 @@ test_ui_spotlight_scroll(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
- Eo *win, *panes, *navi, *list, *layout, *spotlight, *view;
+ Eo *win, *panes, *navi, *list, *layout, *spotlight, *view = NULL;
Params *params = NULL;
char buf[PATH_MAX];
int i;
@@ -1129,3 +1129,118 @@ test_ui_spotlight_scroll(void *data EINA_UNUSED,
efl_gfx_entity_size_set(win, EINA_SIZE2D(580, 320));
}
+
+void
+test_ui_spotlight_animation(void *data EINA_UNUSED,
+ Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ Eo *win, *panes, *navi, *list, *layout, *spotlight, *view, *custom_animation_manager;
+ Efl_Canvas_Animation *jump_animation, *push_animation, *pop_animation;
+ Params *params = NULL;
+ char buf[PATH_MAX];
+ int i;
+
+ win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
+ efl_text_set(efl_added, "Efl.Ui.Spotlight Scroll"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+
+ panes = efl_add(EFL_UI_PANES_CLASS, win,
+ efl_gfx_hint_weight_set(efl_added, 1, 1),
+ efl_ui_panes_split_ratio_set(efl_added, 0.3),
+ efl_content_set(win, efl_added));
+
+ navi = elm_naviframe_add(panes);
+ evas_object_show(navi);
+ efl_content_set(efl_part(panes, "first"), navi);
+
+ list = elm_list_add(navi);
+ elm_list_horizontal_set(list, EINA_FALSE);
+ elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ elm_naviframe_item_push(navi, "Properties", NULL, NULL, list, NULL);
+ evas_object_show(list);
+
+ snprintf(buf, sizeof(buf), "%s/objects/test_pager.edj",
+ elm_app_data_dir_get());
+ layout = efl_add(EFL_UI_LAYOUT_CLASS, panes,
+ efl_file_set(efl_added, buf),
+ efl_file_key_set(efl_added, "pager"),
+ efl_file_load(efl_added),
+ efl_content_set(efl_part(panes, "second"), efl_added));
+
+
+ jump_animation = efl_new(EFL_CANVAS_ALPHA_ANIMATION_CLASS);
+ efl_animation_alpha_set(jump_animation, 0.0, 1.0);
+ efl_animation_duration_set(jump_animation, 0.5);
+
+ push_animation = efl_new(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS);
+ efl_animation_translate_set(push_animation, EINA_POSITION2D(0, 100), EINA_POSITION2D(0, 0));
+ efl_animation_duration_set(push_animation, 0.5);
+
+ pop_animation = efl_new(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS);
+ efl_animation_translate_set(pop_animation, EINA_POSITION2D(0, -100), EINA_POSITION2D(0, 0));
+ efl_animation_duration_set(pop_animation, 0.5);
+
+ custom_animation_manager = efl_new(EFL_UI_SPOTLIGHT_ANIMATION_MANAGER_CLASS,
+ efl_ui_spotlight_manager_animation_push_setup_set(efl_added, push_animation, jump_animation),
+ efl_ui_spotlight_manager_animation_pop_setup_set(efl_added, jump_animation, pop_animation),
+ efl_ui_spotlight_manager_animation_jump_setup_set(efl_added, jump_animation, jump_animation));
+
+ spotlight = efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, layout,
+ efl_ui_spotlight_manager_set(efl_added, custom_animation_manager),
+ efl_content_set(efl_part(layout, "pager"), efl_added),
+ efl_ui_spotlight_size_set(efl_added, EINA_SIZE2D(200, 300)));
+
+ efl_add(EFL_UI_BUTTON_CLASS, layout,
+ efl_text_set(efl_added, "Pop"),
+ efl_event_callback_add(efl_added,
+ EFL_INPUT_EVENT_CLICKED, pop_btn_cb, spotlight),
+ efl_content_set(efl_part(layout, "prev_btn"), efl_added));
+
+ efl_add(EFL_UI_BUTTON_CLASS, layout,
+ efl_text_set(efl_added, "Push"),
+ efl_event_callback_add(efl_added,
+ EFL_INPUT_EVENT_CLICKED, push_btn_cb, spotlight),
+ efl_content_set(efl_part(layout, "next_btn"), efl_added));
+
+ params = calloc(1, sizeof(Params));
+ if (!params) return;
+
+ params->navi = navi;
+ params->spotlight = spotlight;
+ params->indicator = NULL;
+ params->w = 200;
+ params->h = 300;
+ params->wfill = EINA_FALSE;
+ params->hfill = EINA_FALSE;
+
+ elm_list_item_append(list, "View Size", NULL, NULL, spotlight_size, params);
+ elm_list_item_append(list, "Pack / Unpack", NULL, NULL, pack_cb, params);
+ elm_list_item_append(list, "Active Index", NULL, NULL, active_index_cb, params);
+ elm_list_item_append(list, "Indicator", NULL, NULL, indicator_cb, params);
+ elm_list_item_append(list, "Animation", NULL, NULL, view_animation_cb, params);
+ elm_list_item_append(list, "Scroll Block", NULL, NULL, scroll_block_cb, params);
+ elm_list_go(list);
+
+ efl_event_callback_add(list, EFL_EVENT_DEL, list_del_cb, params);
+
+ for (i = 0; i < PAGE_NUM; i++) {
+ switch (i % 3)
+ {
+ case 0:
+ view = view_add(LAYOUT, spotlight);
+ break;
+
+ case 1:
+ view = view_add(LIST, spotlight);
+ break;
+
+ case 2:
+ view = view_add(BUTTON, spotlight);
+ break;
+ }
+ efl_pack_end(spotlight, view);
+ }
+
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(580, 320));
+}
diff --git a/src/bin/elementary/test_ui_tab_pager.c b/src/bin/elementary/test_ui_tab_pager.c
index 62e4e7df09..2c948dcaac 100644
--- a/src/bin/elementary/test_ui_tab_pager.c
+++ b/src/bin/elementary/test_ui_tab_pager.c
@@ -139,7 +139,7 @@ test_ui_tab_pager(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev
page = tab_page_add(tp);
efl_pack_end(tp, page);
if (i == 0)
- efl_ui_spotlight_active_element_set(tp, page);
+ efl_ui_selectable_selected_set(efl_ui_tab_page_tab_bar_item_get(page), EINA_TRUE);
}
ad = (App_Data*)calloc(1, sizeof(App_Data));
@@ -174,7 +174,9 @@ static void
_tab_set_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
Tab_Set_Data *tsd = data;
- efl_ui_spotlight_active_element_set(tsd->tab_pager, efl_pack_content_get(tsd->tab_pager, elm_spinner_value_get(tsd->spinner)));
+ Efl_Ui_Tab_Page *page = efl_pack_content_get(tsd->tab_pager, elm_spinner_value_get(tsd->spinner));
+
+ efl_ui_selectable_selected_set(efl_ui_tab_page_tab_bar_item_get(page), EINA_TRUE);
}
static void
@@ -246,7 +248,7 @@ _pack_before_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
Eo *tab_pager = data;
Eo *tab_page, *cur_tab_page;
- cur_tab_page = efl_ui_spotlight_active_element_get(tab_pager);
+ cur_tab_page = efl_ui_selectable_last_selected_get(tab_pager);
tab_page = tab_page_add(tab_pager);
@@ -259,7 +261,7 @@ _pack_after_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
Eo *tab_pager = data;
Eo *tab_page, *cur_tab_page;
- cur_tab_page = efl_ui_spotlight_active_element_get(tab_pager);
+ cur_tab_page = efl_ui_selectable_last_selected_get(tab_pager);
tab_page = tab_page_add(tab_pager);
@@ -361,7 +363,7 @@ _unpack_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
Eo *tab_pager = data;
- Eo *tab_page = efl_ui_spotlight_active_element_get(tab_pager);
+ Eo *tab_page = efl_ui_selectable_last_selected_get(tab_pager);
efl_pack_unpack(tab_pager, tab_page);
efl_del(tab_page);
@@ -460,7 +462,7 @@ _change_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
char *label = NULL;
char *icon = NULL;
- tab_page = efl_ui_spotlight_active_element_get(tcd->tab_pager);
+ tab_page = efl_ui_selectable_last_selected_get(tcd->tab_pager);
if (efl_ui_selectable_selected_get(tcd->label_check))
{
@@ -527,21 +529,21 @@ _tab_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
static void
_tran_set_btn_scroll_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
- Efl_Ui_Spotlight_Manager_Scroll *scroll = efl_new(EFL_UI_SPOTLIGHT_MANAGER_SCROLL_CLASS);
- efl_ui_spotlight_manager_set(data, scroll);
+ Efl_Ui_Spotlight_Scroll_Manager *scroll = efl_new(EFL_UI_SPOTLIGHT_SCROLL_MANAGER_CLASS);
+ efl_ui_tab_pager_spotlight_manager_set(data, scroll);
}
static void
_tran_set_btn_stack_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
- Efl_Ui_Spotlight_Manager_Scroll *stack = efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS);
- efl_ui_spotlight_manager_set(data, stack);
+ Efl_Ui_Spotlight_Scroll_Manager *stack = efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS);
+ efl_ui_tab_pager_spotlight_manager_set(data, stack);
}
static void
_tran_unset_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
- efl_ui_spotlight_manager_set(data, NULL);
+ efl_ui_tab_pager_spotlight_manager_set(data, NULL);
}
static void
diff --git a/src/bin/elementary/test_ui_textpath.c b/src/bin/elementary/test_ui_textpath.c
index 40317a9627..41783386b1 100644
--- a/src/bin/elementary/test_ui_textpath.c
+++ b/src/bin/elementary/test_ui_textpath.c
@@ -56,6 +56,20 @@ _short_text_changed_cb(void *data, const Efl_Event *event)
efl_text_set(txtpath, TEST_UI_TEXTPATH_LONG_TEXT);
}
+static char *user_style = "DEFAULT='font_size=16 color=#F00 underline=on underline_color=#00ffff'";
+
+static void
+_user_style_changed_cb(void *data, const Efl_Event *event)
+{
+ Evas_Object *txtpath = data;
+ Eina_Bool val = elm_check_selected_get(event->object);
+
+ if (val)
+ elm_textpath_text_user_style_set(txtpath, user_style);
+ else
+ elm_textpath_text_user_style_set(txtpath, NULL);
+}
+
static void
_change_shape_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
@@ -138,6 +152,12 @@ test_ui_textpath(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
elm_box_pack_end(hbox, chk);
efl_gfx_entity_visible_set(chk, EINA_TRUE);
+ chk = efl_add(EFL_UI_CHECK_CLASS, win);
+ efl_text_set(chk, "User style");
+ efl_event_callback_add(chk, EFL_UI_EVENT_SELECTED_CHANGED, _user_style_changed_cb, txtpath);
+ elm_box_pack_end(hbox, chk);
+ efl_gfx_entity_visible_set(chk, EINA_TRUE);
+
hbox = elm_box_add(win);
elm_box_horizontal_set(hbox, EINA_TRUE);
efl_gfx_hint_weight_set(hbox, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND);
diff --git a/src/bin/elementary/test_ui_timepicker.c b/src/bin/elementary/test_ui_timepicker.c
index 3249699bc8..f7b5d7d676 100644
--- a/src/bin/elementary/test_ui_timepicker.c
+++ b/src/bin/elementary/test_ui_timepicker.c
@@ -32,5 +32,11 @@ test_ui_timepicker(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e
efl_event_callback_add(efl_added, EFL_UI_TIMEPICKER_EVENT_TIME_CHANGED,_time_changed_cb, NULL),
efl_pack(bx, efl_added));
+ efl_add(EFL_UI_TIMEPICKER_CLASS, bx,
+ efl_ui_timepicker_time_set(efl_added, 11, 35),
+ efl_ui_timepicker_is_24hour_set(efl_added, EINA_TRUE),
+ efl_event_callback_add(efl_added, EFL_UI_TIMEPICKER_EVENT_TIME_CHANGED,_time_changed_cb, NULL),
+ efl_pack(bx, efl_added));
+
efl_gfx_entity_size_set(win, EINA_SIZE2D(150, 170));
}
diff --git a/src/bin/elementary/test_win_state.c b/src/bin/elementary/test_win_state.c
index f1b9af34cc..1b75d3d835 100644
--- a/src/bin/elementary/test_win_state.c
+++ b/src/bin/elementary/test_win_state.c
@@ -227,6 +227,22 @@ _bt_win_center_cb(void *data, Evas_Object *obj EINA_UNUSED,
}
static void
+_bt_win_maximize(void *data, Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ printf("Maximize\n");
+ elm_win_maximized_set(data, EINA_TRUE);
+}
+
+static void
+_bt_win_unmaximize(void *data, Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ printf("Unmaximize\n");
+ elm_win_maximized_set(data, EINA_FALSE);
+}
+
+static void
_win_state_print_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
printf("WIN: %s\n", (char *)data);
@@ -414,7 +430,7 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
evas_object_show(bt);
bt = elm_button_add(win);
- elm_object_text_set(bt, "Iconify and Activate");
+ elm_object_text_set(bt, "Iconify + Act");
evas_object_smart_callback_add(bt, "clicked",
_bt_win_iconify_and_activate, win);
evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -423,7 +439,7 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
evas_object_show(bt);
bt = elm_button_add(bx2);
- elm_object_text_set(bt, "Iconify and Deiconify");
+ elm_object_text_set(bt, "Iconify + De");
evas_object_smart_callback_add(bt, "clicked",
_bt_win_iconify_and_deiconify, win);
evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -431,6 +447,24 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
+ bt = elm_button_add(bx2);
+ elm_object_text_set(bt, "Maximize");
+ evas_object_smart_callback_add(bt, "clicked",
+ _bt_win_maximize, win);
+ evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
+ elm_box_pack_end(bx2, bt);
+ evas_object_show(bt);
+
+ bt = elm_button_add(bx2);
+ elm_object_text_set(bt, "Unmaximize");
+ evas_object_smart_callback_add(bt, "clicked",
+ _bt_win_unmaximize, win);
+ evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
+ elm_box_pack_end(bx2, bt);
+ evas_object_show(bt);
+
bt = elm_button_add(win);
elm_object_text_set(bt, "Center");
evas_object_smart_callback_add(bt, "clicked",
diff --git a/src/bin/elua/main.c b/src/bin/elua/main.c
index ed1b4074a4..0c228b68f0 100644
--- a/src/bin/elua/main.c
+++ b/src/bin/elua/main.c
@@ -138,6 +138,13 @@ elua_bin_shutdown(Elua_State *es, int c)
exit(c);
}
+#if LUA_VERSION_NUM < 502
+# define elua_cpcall(L, f, u) lua_cpcall(L, f, u)
+#else
+# define elua_cpcall(L, f, u) \
+ (lua_pushcfunction(L, f), lua_pushlightuserdata(L, u), lua_pcall(L, 1, 0, 0))
+#endif
+
int
main(int argc, char **argv)
{
@@ -175,7 +182,7 @@ main(int argc, char **argv)
m.argv = argv;
m.status = 0;
- elua_bin_shutdown(es, !!(lua_cpcall(elua_state_lua_state_get(es), elua_main, &m) || m.status));
+ elua_bin_shutdown(es, !!(elua_cpcall(elua_state_lua_state_get(es), elua_main, &m) || m.status));
return 0; /* never gets here */
}
diff --git a/src/bin/embryo/embryo_cc_sc1.c b/src/bin/embryo/embryo_cc_sc1.c
index bb9486de6b..8f25be75b5 100644
--- a/src/bin/embryo/embryo_cc_sc1.c
+++ b/src/bin/embryo/embryo_cc_sc1.c
@@ -266,7 +266,7 @@ sc_compile(int argc, char *argv[])
void *inpfmark;
char lcl_ctrlchar;
int lcl_packstr, lcl_needsemicolon, lcl_tabsize;
- Eina_Tmpstr *outfname;
+ Eina_Tmpstr *outfname = NULL;
/* set global variables to their initial value */
binf = NULL;
@@ -398,8 +398,11 @@ sc_compile(int argc, char *argv[])
} /* if */
if (outf)
sc_closeasm(outf);
- unlink(outfname);
- eina_tmpstr_del(outfname);
+ if (outfname)
+ {
+ unlink(outfname);
+ eina_tmpstr_del(outfname);
+ }
if (binf)
sc_closebin(binf, errnum != 0);
@@ -1203,10 +1206,8 @@ declloc(int fstatic)
if (numdim > 0 && dim[numdim - 1] == 0)
error(52); /* only last dimension may be variable length */
size = needsub(&idxtag[numdim]); /* get size; size==0 for "var[]" */
-#if INT_MAX < CELL_MAX
- if (size > INT_MAX)
+ if ((unsigned long long)size * sizeof(cell) > MIN(INT_MAX, CELL_MAX))
error(105); /* overflow, exceeding capacity */
-#endif
dim[numdim++] = (int)size;
} /* while */
if (ident == iARRAY || fstatic)
@@ -1237,6 +1238,9 @@ declloc(int fstatic)
}
else
{
+ if (((unsigned long long)declared + (unsigned long long)size) * sizeof(cell) >
+ MIN(INT_MAX, CELL_MAX))
+ error(105);
declared += (int)size; /* variables are put on stack,
* adjust "declared" */
sym =
@@ -3491,11 +3495,11 @@ static void
doif(void)
{
int flab1, flab2;
-#if 0
+#if 0
int ifindent;
ifindent = stmtindent; /* save the indent of the "if" instruction */
-#endif
+#endif
flab1 = getlabel(); /* get label number for false branch */
test(flab1, TRUE, FALSE); /*get expression, branch to flab1 if false */
statement(NULL, FALSE); /* if true, do a statement */
diff --git a/src/bin/embryo/embryo_cc_sc2.c b/src/bin/embryo/embryo_cc_sc2.c
index 2bd34b8f71..7a7f5ebd14 100644
--- a/src/bin/embryo/embryo_cc_sc2.c
+++ b/src/bin/embryo/embryo_cc_sc2.c
@@ -101,7 +101,7 @@ plungequalifiedfile(char *name)
} /* if */
ext_idx++;
}
- while ((!fp) &&
+ while ((!fp) &&
(ext_idx < (int)(sizeof extensions / sizeof extensions[0])));
if (!fp)
{
@@ -1004,8 +1004,8 @@ command(void)
{
int i;
- for (i = 0;
- (i < (int)(sizeof(name)) - 1) &&
+ for (i = 0;
+ (i < (int)(sizeof(name)) - 1) &&
(alphanum(*lptr));
i++, lptr++)
name[i] = *lptr;
@@ -1041,7 +1041,7 @@ command(void)
/* first gather all information, start with the tag name */
while ((*lptr <= ' ') && (*lptr != '\0'))
lptr++;
- for (i = 0;
+ for (i = 0;
(i < (int)(sizeof(name)) - 1) &&
(alphanum(*lptr));
i++, lptr++)
@@ -1105,8 +1105,8 @@ command(void)
/* get the name */
while ((*lptr <= ' ') && (*lptr != '\0'))
lptr++;
- for (i = 0;
- (i < (int)(sizeof(name)) - 1) &&
+ for (i = 0;
+ (i < (int)(sizeof(name)) - 1) &&
(sc_isalpha(*lptr));
i++, lptr++)
name[i] = *lptr;
diff --git a/src/bin/eolian/docs.c b/src/bin/eolian/docs.c
index c01508dab6..2f27a107b2 100644
--- a/src/bin/eolian/docs.c
+++ b/src/bin/eolian/docs.c
@@ -462,7 +462,7 @@ eo_gen_docs_func_gen(const Eolian_State *state, const Eolian_Function *fid,
int curl = 0;
- const char *group = eolian_class_name_get(eolian_function_class_get(fid));
+ const char *group = eolian_class_c_name_get(eolian_function_class_get(fid));
const Eolian_Implement *fimp = eolian_function_implement_get(fid);
if (ftype == EOLIAN_METHOD)
diff --git a/src/bin/eolian/headers.c b/src/bin/eolian/headers.c
index ead40d8f75..ebca0c9b75 100644
--- a/src/bin/eolian/headers.c
+++ b/src/bin/eolian/headers.c
@@ -1,6 +1,8 @@
#include "main.h"
#include "docs.h"
+extern char* _eolian_api_symbol;
+
static const char *
_get_add_star(Eolian_Function_Type ftype, Eolian_Parameter_Direction pdir)
{
@@ -118,7 +120,7 @@ _gen_func(const Eolian_State *state, const Eolian_Function *fid,
eina_strbuf_append_char(buf, '\n');
eina_strbuf_free(dbuf);
}
- eina_strbuf_append(buf, "EOAPI ");
+ eina_strbuf_append_printf(buf, "%s %s_WEAK ", _eolian_api_symbol, _eolian_api_symbol);
if (rtp)
{
if (!rtps)
@@ -211,7 +213,7 @@ eo_gen_header_gen(const Eolian_State *state, const Eolian_Class *cl,
if (doc)
{
Eina_Strbuf *cdoc = eo_gen_docs_full_gen(state, doc,
- eolian_class_name_get(cl), 0);
+ eolian_class_c_name_get(cl), 0);
if (cdoc)
{
eina_strbuf_append(buf, eina_strbuf_string_get(cdoc));
@@ -225,7 +227,8 @@ eo_gen_header_gen(const Eolian_State *state, const Eolian_Class *cl,
eina_strbuf_append_printf(buf, "#define %s %s()\n\n", mname, gname);
eina_stringshare_del(mname);
- eina_strbuf_append_printf(buf, "EWAPI const Efl_Class *%s(void);\n", gname);
+ eina_strbuf_append_printf(buf, "%s %s_WEAK const Efl_Class *%s(void) EINA_CONST;\n",
+ _eolian_api_symbol, _eolian_api_symbol, gname);
eina_stringshare_del(gname);
/* method section */
@@ -283,11 +286,12 @@ events:
if (!eolian_event_is_beta(ev) && evs == EOLIAN_SCOPE_PUBLIC)
eina_strbuf_append_char(buf, '\n');
- eina_strbuf_append_printf(buf, "EWAPI extern const "
- "Efl_Event_Description _%s;\n\n", evn);
+ eina_strbuf_append_printf(buf, "%s %s_WEAK extern const "
+ "Efl_Event_Description _%s;\n\n",
+ _eolian_api_symbol, _eolian_api_symbol, evn);
Eina_Strbuf *evdbuf = eo_gen_docs_event_gen(state, ev,
- eolian_class_name_get(cl));
+ eolian_class_c_name_get(cl));
eina_strbuf_append(buf, eina_strbuf_string_get(evdbuf));
eina_strbuf_append_char(buf, '\n');
eina_strbuf_free(evdbuf);
diff --git a/src/bin/eolian/main.c b/src/bin/eolian/main.c
index 114f989ac4..b2167ef62d 100644
--- a/src/bin/eolian/main.c
+++ b/src/bin/eolian/main.c
@@ -7,6 +7,7 @@
#include "sources.h"
int _eolian_gen_log_dom = -1;
+char* _eolian_api_symbol;
enum
{
@@ -44,6 +45,7 @@ _print_usage(const char *progn, FILE *outf)
" -o type:name specify a particular output filename\n"
" -h print this message and exit\n"
" -v print version and exit\n"
+ " -e api symbol string to be used for import/export symbol"
"\n"
"Available types:\n"
" h: C header file (.eo.h/.eot.h)\n"
@@ -288,7 +290,7 @@ void eo_gen_class_names_get(const Eolian_Class *cl, char **cname,
char **cnameu, char **cnamel)
{
char *cn = NULL, *cnu = NULL, *cnl = NULL;
- cn = eo_gen_c_full_name_get(eolian_class_name_get(cl));
+ cn = eo_gen_c_full_name_get(eolian_class_c_name_get(cl));
if (!cn)
abort();
if (cname)
@@ -494,6 +496,7 @@ main(int argc, char **argv)
NULL, NULL, NULL, NULL, NULL, NULL
};
char *basen = NULL;
+ _eolian_api_symbol = strdup("EAPI");
Eina_List *includes = NULL;
eina_init();
@@ -514,7 +517,7 @@ main(int argc, char **argv)
int gen_what = 0;
Eina_Bool scan_system = EINA_TRUE;
- for (int opt; (opt = getopt(argc, argv, "SI:g:o:hv")) != -1;)
+ for (int opt; (opt = getopt(argc, argv, "SI:g:o:hve:")) != -1;)
switch (opt)
{
case 0:
@@ -526,6 +529,10 @@ main(int argc, char **argv)
/* just a pointer to argv contents, so it persists */
includes = eina_list_append(includes, optarg);
break;
+ case 'e':
+ free(_eolian_api_symbol);
+ _eolian_api_symbol = strdup(optarg);
+ break;
case 'g':
for (const char *wstr = optarg; *wstr; ++wstr)
switch (*wstr)
@@ -665,6 +672,8 @@ end:
free(outs[i]);
free(basen);
+ free(_eolian_api_symbol);
+
eolian_state_free(eos);
eolian_shutdown();
eina_shutdown();
diff --git a/src/bin/eolian/sources.c b/src/bin/eolian/sources.c
index 26e031f4c7..543d7c8f51 100644
--- a/src/bin/eolian/sources.c
+++ b/src/bin/eolian/sources.c
@@ -7,6 +7,7 @@
*/
static Eina_Hash *_funcs_params_init_get = NULL;
static Eina_Hash *_funcs_params_init_set = NULL;
+extern char* _eolian_api_symbol;
static const char *
_get_add_star(Eolian_Function_Type ftype, Eolian_Parameter_Direction pdir)
@@ -320,6 +321,13 @@ _gen_function_param_fallback(Eina_Iterator *itr, Eina_Strbuf *fallback_free_owne
if (!eolian_parameter_is_move(pr) || eolian_parameter_direction_get(pr) == EOLIAN_PARAMETER_OUT)
{
eina_strbuf_append_printf(fallback_free_ownership, " (void)%s;\n", eolian_parameter_name_get(pr));
+ /* FIXME: quick hack to avoid warnings, but should be rewritten properly */
+ if (eolian_type_typedecl_get(type) &&
+ eolian_typedecl_type_get(eolian_type_typedecl_get(type)) == EOLIAN_TYPEDECL_FUNCTION_POINTER)
+ {
+ eina_strbuf_append_printf(fallback_free_ownership, " (void)%s_data;\n", eolian_parameter_name_get(pr));
+ eina_strbuf_append_printf(fallback_free_ownership, " (void)%s_free_cb;\n", eolian_parameter_name_get(pr));
+ }
continue;
}
@@ -465,10 +473,11 @@ _gen_reflect_set(Eina_Strbuf *buf, const char *cnamel,
}
static void
-_emit_class_function(Eina_Strbuf *buf, const Eolian_Function *fid, const char *rtpn, Eina_Strbuf *params_full,
+_emit_class_function(Eina_Strbuf *buf, const Eolian_Function *fid, const Eolian_Function_Type ftype, const Eolian_Type *rtp, const char *rtpn, Eina_Strbuf *params_full,
const char *ocnamel, const char *func_suffix, Eina_Strbuf *params, const char *function_name)
{
- eina_strbuf_append(buf, "EOAPI ");
+ eina_strbuf_append_printf(buf, "%s %s_WEAK", _eolian_api_symbol, _eolian_api_symbol);
+ eina_strbuf_append(buf, " ");
eina_strbuf_append(buf, rtpn);
eina_strbuf_append(buf, " ");
eina_strbuf_append(buf, function_name);
@@ -479,11 +488,22 @@ _emit_class_function(Eina_Strbuf *buf, const Eolian_Function *fid, const char *r
eina_strbuf_append_buffer(buf, params_full);
eina_strbuf_append(buf, ")\n");
eina_strbuf_append(buf, "{\n");
- eina_strbuf_append_printf(buf, " %s();\n", eolian_class_c_get_function_name_get(eolian_function_class_get(fid)));
- if (strcmp(rtpn, "void"))
- eina_strbuf_append(buf, " return ");
+ eina_strbuf_append_printf(buf, " const Efl_Class *klass = %s();\n", eolian_class_c_get_function_name_get(eolian_function_class_get(fid)));
+ if (!!strcmp(rtpn, "void") && rtp)
+ {
+ const Eolian_Expression *default_value_expression = eolian_function_return_default_value_get(fid, ftype);
+
+ eina_strbuf_append_printf(buf, " EINA_SAFETY_ON_NULL_RETURN_VAL(klass,");
+ _append_defval(buf, default_value_expression, rtp, rtpn);
+ eina_strbuf_append_printf(buf, ");\n");
+
+ eina_strbuf_append(buf, " return ");
+ }
else
- eina_strbuf_append(buf, " ");
+ {
+ eina_strbuf_append(buf, " EINA_SAFETY_ON_NULL_RETURN(klass);\n");
+ eina_strbuf_append(buf, " ");
+ }
eina_strbuf_append_printf(buf, "_%s", ocnamel);
eina_strbuf_append_char(buf, '_');
eina_strbuf_append(buf, eolian_function_name_get(fid));
@@ -675,7 +695,7 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid,
eina_strbuf_append_char(params_full_imp, ' ');
eina_strbuf_append(params_full_imp, add_star);
eina_strbuf_append(params_full_imp, prn);
- if (!dfv && is_empty)
+ if ((!dfv || ftype == EOLIAN_PROP_SET) && is_empty)
eina_strbuf_append(params_full_imp, " EINA_UNUSED");
eina_strbuf_append(params, prn);
@@ -876,7 +896,8 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid,
eina_strbuf_append_printf(buf, "}\n\n");
}
- eina_strbuf_append(buf, "EOAPI EFL_");
+ eina_strbuf_append_printf(buf, "%s %s_WEAK", _eolian_api_symbol, _eolian_api_symbol);
+ eina_strbuf_append(buf, " EFL_");
if (!strcmp(rtpn, "void"))
eina_strbuf_append(buf, "VOID_");
eina_strbuf_append(buf, "FUNC_BODY");
@@ -918,7 +939,7 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid,
eina_stringshare_del(eofn);
}
if (impl_same_class && eolian_function_is_static(fid))
- _emit_class_function(buf, fid, rtpn, params_full, ocnamel, func_suffix, params, eolian_function_full_c_name_get(fid, ftype));
+ _emit_class_function(buf, fid, ftype, rtp, rtpn, params_full, ocnamel, func_suffix, params, eolian_function_full_c_name_get(fid, ftype));
free(cname);
free(cnamel);
@@ -1107,7 +1128,8 @@ eo_gen_source_gen(const Eolian_Class *cl, Eina_Strbuf *buf)
EINA_ITERATOR_FOREACH(itr, ev)
{
Eina_Stringshare *evn = eolian_event_c_macro_get(ev);
- eina_strbuf_append(buf, "EWAPI const Efl_Event_Description _");
+ eina_strbuf_append_printf(buf, "%s %s_WEAK", _eolian_api_symbol, _eolian_api_symbol);
+ eina_strbuf_append(buf, " const Efl_Event_Description _");
eina_strbuf_append(buf, evn);
eina_strbuf_append(buf, " =\n EFL_EVENT_DESCRIPTION");
if (eolian_event_is_hot(ev))
diff --git a/src/bin/eolian/types.c b/src/bin/eolian/types.c
index 96232833cd..897da96e36 100644
--- a/src/bin/eolian/types.c
+++ b/src/bin/eolian/types.c
@@ -4,11 +4,13 @@
#include "headers.h"
#include "docs.h"
+extern char* _eolian_api_symbol;
+
static Eina_Strbuf *
_type_generate(const Eolian_State *state, const Eolian_Typedecl *tp,
Eina_Bool full)
{
- char *grp = strdup(eolian_typedecl_name_get(tp));
+ char *grp = strdup(eolian_typedecl_c_name_get(tp));
char *p = strrchr(grp, '.');
if (p) *p = '\0';
Eina_Strbuf *buf = eo_gen_docs_full_gen(state, eolian_typedecl_documentation_get(tp),
@@ -30,7 +32,7 @@ _type_generate(const Eolian_State *state, const Eolian_Typedecl *tp,
case EOLIAN_TYPEDECL_STRUCT_OPAQUE:
{
const Eolian_Struct_Type_Field *memb;
- char *fn = eo_gen_c_full_name_get(eolian_typedecl_name_get(tp));
+ char *fn = eo_gen_c_full_name_get(eolian_typedecl_c_name_get(tp));
if (tpt == EOLIAN_TYPEDECL_STRUCT_OPAQUE || !full)
{
eina_strbuf_append_printf(buf, "typedef struct _%s %s", fn, fn);
@@ -119,7 +121,7 @@ _type_generate(const Eolian_State *state, const Eolian_Typedecl *tp,
eina_strbuf_append(buf, "\n");
}
eina_iterator_free(membs);
- char *fn = eo_gen_c_full_name_get(eolian_typedecl_name_get(tp));
+ char *fn = eo_gen_c_full_name_get(eolian_typedecl_c_name_get(tp));
eina_strbuf_append_printf(buf, "} %s", fn);
free(fn);
break;
@@ -142,7 +144,7 @@ _type_generate(const Eolian_State *state, const Eolian_Typedecl *tp,
}
/* Function name */
- char *fn = eo_gen_c_full_name_get(eolian_typedecl_name_get(tp));
+ char *fn = eo_gen_c_full_name_get(eolian_typedecl_c_name_get(tp));
eina_strbuf_append_printf(buf, "(*%s)", fn);
free(fn);
@@ -170,7 +172,7 @@ _type_generate(const Eolian_State *state, const Eolian_Typedecl *tp,
static Eina_Strbuf *
_const_generate(const Eolian_State *state, const Eolian_Constant *vr)
{
- char *fn = strdup(eolian_constant_name_get(vr));
+ char *fn = strdup(eolian_constant_c_name_get(vr));
char *p = strrchr(fn, '.');
if (p) *p = '\0';
Eina_Strbuf *buf = eo_gen_docs_full_gen(state, eolian_constant_documentation_get(vr),
@@ -211,7 +213,7 @@ _const_generate(const Eolian_State *state, const Eolian_Constant *vr)
static Eina_Strbuf *
_err_generate(const Eolian_State *state, const Eolian_Error *err)
{
- char *fn = strdup(eolian_error_name_get(err));
+ char *fn = strdup(eolian_error_c_name_get(err));
char *p = strrchr(fn, '.');
if (p) *p = '\0';
Eina_Strbuf *buf = eo_gen_docs_full_gen(state, eolian_error_documentation_get(err),
@@ -226,7 +228,8 @@ _err_generate(const Eolian_State *state, const Eolian_Error *err)
if (!buf) buf = eina_strbuf_new();
else eina_strbuf_append_char(buf, '\n');
- eina_strbuf_prepend_printf(buf, "EWAPI Eina_Error %s_get(void);\n\n", fn);
+ eina_strbuf_prepend_printf(buf, "%s %s_WEAK Eina_Error %s_get(void);\n\n",
+ _eolian_api_symbol, _eolian_api_symbol, fn);
char *ufn = strdup(fn);
eina_str_toupper(&ufn);
@@ -319,12 +322,13 @@ _source_gen_error(Eina_Strbuf *buf, const Eolian_Error *err)
if (eolian_error_is_extern(err))
return;
- char *fn = strdup(eolian_error_name_get(err));
+ char *fn = strdup(eolian_error_c_name_get(err));
for (char *p = strchr(fn, '.'); p; p = strchr(p, '.'))
*p = '_';
eina_str_tolower(&fn);
- eina_strbuf_append_printf(buf, "EWAPI Eina_Error %s_get(void)\n{\n", fn);
+ eina_strbuf_append_printf(buf, "%s %s_WEAK Eina_Error %s_get(void)\n{\n",
+ _eolian_api_symbol, _eolian_api_symbol, fn);
free(fn);
const char *msg = eolian_error_message_get(err);
@@ -385,7 +389,7 @@ Eina_Strbuf *eo_gen_class_typedef_gen(const Eolian_State *eos, const char *eof)
const Eolian_Class *cl = eolian_state_class_by_file_get(eos, eof);
if (!cl)
return NULL;
- char *clfn = eo_gen_c_full_name_get(eolian_class_name_get(cl));
+ char *clfn = eo_gen_c_full_name_get(eolian_class_c_name_get(cl));
if (!clfn)
return NULL;
Eina_Strbuf *ret = eina_strbuf_new();
diff --git a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh
index bf00ddadba..3fddb03780 100644
--- a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh
@@ -36,6 +36,7 @@
#include "using_decl.hh"
#include "generation_contexts.hh"
#include "blacklist.hh"
+#include "documentation.hh"
namespace eolian_mono {
@@ -71,31 +72,33 @@ struct async_function_declaration_generator
if(f.scope != attributes::member_scope::scope_public)
return true;
+ auto ref = documentation_generator::function_conversion (f, context);
+
if (!as_generator(
- scope_tab << "/// <summary>Async wrapper for <see cref=\"" << name_helpers::managed_method_name(f) << "\" />.\n"
+ scope_tab(2) << "/// <summary>Async wrapper for <see cref=\"" << ref << "\" />.\n"
).generate(sink, attributes::unused, context))
return false;
if (!f.documentation.since.empty())
if (!as_generator
- (scope_tab << "/// <para>Since EFL " + f.documentation.since + ".</para>\n")
+ (scope_tab(2) << "/// <para>Since EFL " + f.documentation.since + ".</para>\n")
.generate (sink, attributes::unused, context))
return false;
if (!as_generator(
- scope_tab << "/// </summary>\n"
+ scope_tab(2) << "/// </summary>\n"
).generate(sink, attributes::unused, context))
return false;
// generate_parameter is not a proper as_generator-compatible generator, so we had to do an old fashioned loop
for (auto&& param : f.parameters)
- if (!documentation(1).generate_parameter(sink, param, context))
+ if (!documentation(2).generate_parameter(sink, param, context))
return false;
if (!as_generator(
- scope_tab << "/// <param name=\"token\">Token to notify the async operation of external request to cancel.</param>\n"
- << scope_tab << "/// <returns>An async task wrapping the result of the operation.</returns>\n"
- << scope_tab << "System.Threading.Tasks.Task<Eina.Value> " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ", ") <<
+ scope_tab(2) << "/// <param name=\"token\">Token to notify the async operation of external request to cancel.</param>\n"
+ << scope_tab(2) << "/// <returns>An async task wrapping the result of the operation.</returns>\n"
+ << scope_tab(2) << "System.Threading.Tasks.Task<Eina.Value> " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ", ") <<
" System.Threading.CancellationToken token = default(System.Threading.CancellationToken));\n\n"
).generate(sink, f.parameters, context))
return false;
@@ -130,18 +133,18 @@ struct async_function_definition_generator
std::transform(f.parameters.begin(), f.parameters.end(), std::back_inserter(param_forwarding), parameter_forwarding);
if (!as_generator(
- scope_tab << "/// <summary>Async wrapper for <see cref=\"" << name_helpers::managed_method_name(f) << "\" />.\n"
+ scope_tab(2) << "/// <summary>Async wrapper for <see cref=\"" << name_helpers::managed_method_name(f) << "\" />.\n"
).generate(sink, attributes::unused, context))
return false;
if (!f.documentation.since.empty())
if (!as_generator
- (scope_tab << "/// <para>Since EFL " + f.documentation.since + ".</para>\n")
+ (scope_tab(2) << "/// <para>Since EFL " + f.documentation.since + ".</para>\n")
.generate (sink, attributes::unused, context))
return false;
if (!as_generator(
- scope_tab << "/// </summary>\n"
+ scope_tab(2) << "/// </summary>\n"
).generate(sink, attributes::unused, context))
return false;
@@ -151,13 +154,13 @@ struct async_function_definition_generator
return false;
if(!as_generator(
- scope_tab << "/// <param name=\"token\">Token to notify the async operation of external request to cancel.</param>\n"
- << scope_tab << "/// <returns>An async task wrapping the result of the operation.</returns>\n"
- << scope_tab << "public System.Threading.Tasks.Task<Eina.Value> " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ", ") << " System.Threading.CancellationToken token = default(System.Threading.CancellationToken))\n"
- << scope_tab << "{\n"
- << scope_tab << scope_tab << "Eina.Future future = " << name_helpers::managed_method_name(f) << "(" << (string % ", ") << ");\n"
- << scope_tab << scope_tab << "return Efl.Eo.Globals.WrapAsync(future, token);\n"
- << scope_tab << "}\n\n"
+ scope_tab(2) << "/// <param name=\"token\">Token to notify the async operation of external request to cancel.</param>\n"
+ << scope_tab(2) << "/// <returns>An async task wrapping the result of the operation.</returns>\n"
+ << scope_tab(2) << "public System.Threading.Tasks.Task<Eina.Value> " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ", ") << " System.Threading.CancellationToken token = default(System.Threading.CancellationToken))\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << scope_tab << "Eina.Future future = " << name_helpers::managed_method_name(f) << "(" << (string % ", ") << ");\n"
+ << scope_tab(2) << scope_tab << "return Efl.Eo.Globals.WrapAsync(future, token);\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, std::make_tuple(f.parameters, param_forwarding), context))
return false;
return true;
diff --git a/src/bin/eolian_mono/eolian/mono/blacklist.hh b/src/bin/eolian_mono/eolian/mono/blacklist.hh
index 70bc34a038..683095f1dd 100644
--- a/src/bin/eolian_mono/eolian/mono/blacklist.hh
+++ b/src/bin/eolian_mono/eolian/mono/blacklist.hh
@@ -32,7 +32,6 @@ inline bool is_function_blacklisted(std::string const& c_name)
return
c_name == "efl_event_callback_array_priority_add"
|| c_name == "efl_constructor"
- || c_name == "efl_player_playback_position_get"
|| c_name == "efl_ui_widget_focus_set"
|| c_name == "efl_ui_widget_focus_get"
|| c_name == "efl_ui_text_password_get"
@@ -70,6 +69,8 @@ inline bool is_function_blacklisted(std::string const& c_name)
|| c_name == "efl_access_object_event_handler_add"
|| c_name == "efl_access_object_event_handler_del"
|| c_name == "efl_access_object_event_emit"
+ || c_name == "efl_access_widget_action_elm_actions_get"
+ || c_name == "efl_access_action_actions_get"
;
}
@@ -150,34 +151,9 @@ inline bool is_alias_blacklisted(attributes::alias_def const& alias, Context con
return name_helpers::alias_full_eolian_name(alias) == "Eina.Error";
}
-inline bool is_property_blacklisted(std::string const& name)
+inline bool is_property_blacklisted(std::string const&)
{
- auto properties = std::vector<std::string>{
- // These properties encode (void* arr, int len) arrays
- "Efl.Gfx.IGradient.Stop"
- , "Efl.Gfx.GradientConcrete.Stop"
- , "Efl.Gfx.IShape.StrokeDash"
- , "Efl.Gfx.ShapeConcrete.StrokeDash"
- , "Efl.Gfx.Vg.ValueProvider.Transform"
- , "Efl.Canvas.Vg.Node.Transformation"
- // Will be bound manually
- , "Efl.Core.Env.Env"
- // Setter returns a future
- , "Efl.IModel.Property"
- // Protected
- , "Efl.Access.IAction.ActionName"
- , "Efl.Access.IAction.ActionLocalizedName"
- , "Efl.Access.IComponent.Extents"
- , "Efl.Access.IText.AccessSelection"
- , "Efl.Access.IText.AccessText"
- , "Efl.Access.IText.BoundedRanges"
- , "Efl.Access.IText.Character"
- , "Efl.Access.IText.OffsetAtPoint"
- , "Efl.Access.IText.String"
- , "Efl.Access.IText.TextAttributes"
- };
-
- return std::find(std::begin(properties), std::end(properties), name) != std::end(properties);
+ return false;
}
template<typename Context>
diff --git a/src/bin/eolian_mono/eolian/mono/documentation.hh b/src/bin/eolian_mono/eolian/mono/documentation.hh
index db00ba8a0f..eac5e1a179 100644
--- a/src/bin/eolian_mono/eolian/mono/documentation.hh
+++ b/src/bin/eolian_mono/eolian/mono/documentation.hh
@@ -21,9 +21,9 @@
#include "grammar/html_escaped_string.hpp"
#include "using_decl.hh"
#include "name_helpers.hh"
-#include "helpers.hh"
#include "generation_contexts.hh"
#include "blacklist.hh"
+#include "property_definition.hh"
#include <Eina.h>
@@ -77,11 +77,8 @@ struct documentation_generator
// The name_tail parameter is the last 4 chars of the original string, which
// could be ".set" or ".get" and in this case they are ignored by Eolian.
// We want them to know what the documentation intended to reference.
- template<typename Context>
- static std::string function_conversion(const ::Eolian_Object *klass
- , const ::Eolian_Function *function
- , std::string name_tail
- , Context const& context)
+ template <typename Context>
+ static std::string function_conversion(const ::Eolian_Object *klass, const ::Eolian_Function *function, std::string name_tail, Context const& context)
{
::Eolian_Function_Type ftype = ::eolian_function_type_get(function);
const char* eo_name = ::eolian_function_name_get(function);
@@ -118,40 +115,65 @@ struct documentation_generator
name += name_helpers::managed_method_name({function, ftype, NULL, eolian_object_unit_get(EOLIAN_OBJECT(function))});
break;
case ::EOLIAN_PROP_SET:
- name += ".Set";
- name += name_helpers::property_managed_name(klass_d, eo_name);
- break;
case ::EOLIAN_PROP_GET:
- name += ".Get";
- name += name_helpers::property_managed_name(klass_d, eo_name);
- break;
case ::EOLIAN_PROPERTY:
- {
- std::string short_name = name_helpers::property_managed_name(klass_d, eo_name);
+ {
+ efl::eina::optional<attributes::function_def> getter_func;
+ efl::eina::optional<attributes::function_def> setter_func;
+ auto unit = (const Eolian_Unit*) context_find_tag<eolian_state_context>(context).state;
+ if (ftype == ::EOLIAN_PROPERTY || ftype == ::EOLIAN_PROP_GET)
+ getter_func = attributes::function_def{function, ::EOLIAN_PROP_GET, nullptr, unit};
+ if (ftype == ::EOLIAN_PROPERTY || ftype == ::EOLIAN_PROP_SET)
+ setter_func = attributes::function_def{function, ::EOLIAN_PROP_SET, nullptr, unit};
+ attributes::property_def property{function, getter_func, setter_func, unit};
+
+ std::string short_name = name_helpers::property_managed_name(klass_d, eo_name);
+ class_context::wrapper_kind klass_kind;
+ if (helpers::is_managed_interface(klass_d))
+ klass_kind = class_context::interface;
+ else
+ klass_kind = class_context::inherit;
+ auto my_context = grammar::context_replace_tag(class_context{klass_kind}, context);
- // We need to replace the current class context with the context
- // from the class that originated this property.
- class_context::wrapper_kind klass_kind;
- if (helpers::is_managed_interface(klass_d))
- klass_kind = class_context::interface;
+ if (name_tail == ".get")
+ {
+ if (property_generate_wrapper_getter (property, my_context))
+ {
+ name += "." + short_name;
+ }
else
- klass_kind = class_context::inherit;
-
- auto my_context = grammar::context_replace_tag(class_context{klass_kind}, context);
-
- auto unit = eolian_object_unit_get((const Eolian_Object*)function);
- attributes::function_def getter_func{function, ::EOLIAN_PROP_GET, nullptr, unit};
- attributes::function_def setter_func{function, ::EOLIAN_PROP_SET, nullptr, unit};
- attributes::property_def prop{function, getter_func, setter_func, unit};
-
- auto has_wrapper = helpers::has_property_wrapper(prop, &klass_d, my_context);
-
- if (has_wrapper == helpers::has_property_wrapper_bit::has_none)
+ {
name += ".Get" + short_name;
- else if (name_tail == ".get") name += ".Get" + short_name;
- else if (name_tail == ".set") name += ".Set" + short_name;
- else name += "." + short_name;
+ }
}
+ else if (name_tail == ".set")
+ {
+ if (property_generate_wrapper_setter (property, my_context))
+ {
+ name += "." + short_name;
+ }
+ else
+ {
+ name += ".Set" + short_name;
+ }
+ }
+ else
+ {
+ switch (ftype)
+ {
+ case ::EOLIAN_PROPERTY:
+ case ::EOLIAN_PROP_GET:
+ if (property_generate_wrapper_getter (property, my_context))
+ name += "." + short_name;
+ else
+ name += ".Get" + short_name;
+ break;
+ default:
+ name += ".Set" + short_name;
+ break;
+ }
+ }
+ }
break;
default:
break;
@@ -159,38 +181,90 @@ struct documentation_generator
return name;
}
- static std::string function_conversion(attributes::function_def const& func)
+ template <typename Context>
+ static std::string function_conversion(attributes::function_def const& func, Context const& context)
{
// This function is called only from the constructor reference conversion, so it does not
// need to check whether this function non-public in a interface returning an empty reference (yet).
std::string name = name_helpers::klass_full_concrete_or_interface_name(func.klass);
switch (func.type)
{
- // managed_method_name takes care of reordering the function name so the get/set goes first
- // for properties
- case attributes::function_type::method:
- case attributes::function_type::prop_set:
- case attributes::function_type::prop_get:
- if (blacklist::is_function_blacklisted(func.c_name))return "";
- if (!name.empty()) name += ".";
- name += name_helpers::managed_method_name(func);
- break;
- default:
- // No need to deal with property as function_defs are converted to get/set when building a given klass_def.
- break;
+ // managed_method_name takes care of reordering the function name so the get/set goes first
+ // for properties
+ case attributes::function_type::method:
+ if (blacklist::is_function_blacklisted(func.c_name))return "";
+ if (!name.empty()) name += ".";
+ name += name_helpers::managed_method_name(func);
+ break;
+ case attributes::function_type::prop_set:
+ case attributes::function_type::prop_get:
+ case attributes::function_type::property:
+ {
+ auto unit = (const Eolian_Unit*) context_find_tag<eolian_state_context>(context).state;
+ auto klass = get_klass(func.klass, unit);
+ attributes::klass_def klass_d(klass, unit);
+
+ auto eo_name = func.name;
+ auto prop_name = eo_name;
+ if (prop_name.size () > 4
+ &&
+ ( prop_name.substr(prop_name.size() - 4) == "_set"
+ || prop_name.substr(prop_name.size() - 4) == "_get"))
+ {
+ prop_name = prop_name.substr(0, prop_name.size() - 4);
+ }
+ std::string short_name = name_helpers::property_managed_name(klass_d, prop_name);
+ assert (prop_name.size() <= 4 ||
+ (prop_name.substr(prop_name.size() - 4) != "_set"
+ && prop_name.substr(prop_name.size() - 4) != "_get"));
+ assert (short_name.size() <= 3 ||
+ (short_name.substr(short_name.size() - 3) != "Set"
+ && short_name.substr(short_name.size() - 3) != "Get"));
+
+ // We need to replace the current class context with the context
+ // from the class that originated this property.
+ class_context::wrapper_kind klass_kind;
+ if (helpers::is_managed_interface(klass_d))
+ klass_kind = class_context::interface;
+ else
+ klass_kind = class_context::inherit;
+
+ auto my_context = grammar::context_replace_tag(class_context{klass_kind}, context);
+
+ auto function = eolian_class_function_by_name_get (klass, prop_name.c_str(), EOLIAN_PROPERTY);
+ attributes::function_def getter_func{function, ::EOLIAN_PROP_GET, nullptr, unit};
+ attributes::function_def setter_func{function, ::EOLIAN_PROP_SET, nullptr, unit};
+ attributes::property_def prop{function, getter_func, setter_func, unit};
+
+ if (func.type == attributes::function_type::prop_get || func.type == attributes::function_type::property)
+ {
+ if (property_generate_wrapper_getter (prop, my_context))
+ name += "." + short_name;
+ else
+ name += ".Get" + short_name;
+ }
+ else if (func.type == attributes::function_type::prop_set)
+ {
+ if (property_generate_wrapper_setter (prop, my_context))
+ name += "." + short_name;
+ else
+ name += ".Set" + short_name;
+ }
+ }
+ break;
+ default:
+ // No need to deal with property as function_defs are converted to get/set when building a given klass_def.
+ break;
}
return name;
}
// Turns an Eolian reference like @Efl.Input.Pointer.tool into a <see> tag
- template<typename Context>
- static std::string ref_conversion(const ::Eolian_Doc_Token *token
- , const Eolian_State *state
- , std::string name_tail
- , Context const& context)
+ template <typename Context>
+ static std::string ref_conversion(const ::Eolian_Doc_Token *token, const Eolian_State *state, std::string name_tail,
+ bool want_beta, Context const& context)
{
- bool want_beta = context_want_beta(context);
const Eolian_Object *data, *data2;
::Eolian_Object_Type type =
::eolian_doc_token_ref_resolve(token, state, &data, &data2);
@@ -249,9 +323,9 @@ struct documentation_generator
return ref;
}
- // Turns EO documentation syntax into C# triple-slash XML comment syntax
- template<typename Context>
- static std::string syntax_conversion(std::string text, const Eolian_State *state, Context const& context)
+ // Turns EO documentation syntax into C# triple-slash XML comment syntax
+ template <typename Context>
+ static std::string syntax_conversion(std::string text, const Eolian_State *state, bool want_beta, Context const& context)
{
std::string new_text, ref;
::Eolian_Doc_Token_Type previous_token_type = ::EOLIAN_DOC_TOKEN_UNKNOWN;
@@ -290,7 +364,7 @@ struct documentation_generator
new_text += token_text;
break;
case ::EOLIAN_DOC_TOKEN_REF:
- ref = ref_conversion(&token, state, name_tail, context);
+ ref = ref_conversion(&token, state, name_tail, want_beta, context);
if (ref != "")
{
if (utils::ends_with(ref, BETA_REF_SUFFIX))
@@ -339,7 +413,9 @@ struct documentation_generator
template<typename OutputIterator, typename Context>
bool generate_opening_tag(OutputIterator sink, std::string const& tag, Context const& context, std::string tag_params = "") const
{
- return as_generator("<" << tag << tag_params << ">").generate(sink, attributes::unused, context);
+ auto tag_separator = tag_params.empty() ? "" : " ";
+
+ return as_generator("<" << tag << tag_separator << tag_params << ">").generate(sink, attributes::unused, context);
}
template<typename OutputIterator, typename Context>
@@ -355,7 +431,7 @@ struct documentation_generator
if (!as_generator(html_escaped_string).generate(std::back_inserter(new_text), text, context))
return false;
auto options = context_find_tag<options_context>(context);
- new_text = syntax_conversion( new_text, context_find_tag<eolian_state_context>(context).state, context);
+ new_text = syntax_conversion( new_text, context_find_tag<eolian_state_context>(context).state, options.want_beta, context);
std::string tabs;
as_generator(scope_tab(scope_size) << "/// ").generate (std::back_inserter(tabs), attributes::unused, context);
@@ -485,6 +561,69 @@ struct documentation_generator
return generate_tag_example(sink, klass_name, context);
}
+ /*! Generates documentation for tuple-value properties.
+ *
+ * Example:
+ *
+ * A tuple containing the following information:
+ * <list type="bullet">
+ * <item><description><c>a</c>: Parameter a.</description></item>
+ * <item><description><c>b</c>: Parameter b.</description></item>
+ * </list>
+ *
+ * \param index_names If true, tuple items are referenced by their index. If
+ * false, they are referenced by their names instead.
+ */
+ template<typename OutputIterator, typename Context>
+ bool generate_tuple_parameters_doc(OutputIterator sink,
+ std::vector<attributes::parameter_def> const& parameters,
+ Context const& context,
+ bool numbered_refs = false) const
+ {
+ if (!(as_generator(scope_tab(scope_size) << "/// ")
+ .generate(sink, attributes::unused, context)
+ && as_generator(
+ "A tuple containing the following information:\n"
+ << scope_tab(scope_size) << "/// "
+ ).generate(sink, attributes::unused, context)
+ && generate_opening_tag(sink, "list", context, "type=\"bullet\"")
+ && as_generator("\n" << scope_tab(scope_size) << "/// ")
+ .generate(sink, attributes::unused, context)))
+ return false;
+
+ auto i = 0u;
+ for (auto const& param: parameters)
+ {
+ auto name = param.param_name;
+ if (!(generate_opening_tag(sink, "item", context)
+ && generate_opening_tag(sink, "description", context)
+ && generate_opening_tag(sink, "c", context)
+ && as_generator(name).generate(sink, attributes::unused, context)
+ && generate_closing_tag(sink, "c", context)))
+ return false;
+
+ if (numbered_refs && !(
+ as_generator(" (").generate(sink, attributes::unused, context)
+ && generate_opening_tag(sink, "c", context)
+ && as_generator("Item" + std::to_string(i)).generate(sink, attributes::unused, context)
+ && generate_closing_tag(sink, "c", context)
+ && as_generator(")").generate(sink, attributes::unused, context)))
+ return false;
+
+ if (!(generate_escaped_content(sink, ": " + param.documentation.full_text, context)
+ && generate_closing_tag(sink, "description", context)
+ && generate_closing_tag(sink, "item", context)
+ && as_generator("\n" << scope_tab(scope_size) << "/// ")
+ .generate(sink, attributes::unused, context)))
+ return false;
+ ++i;
+ }
+
+ return generate_closing_tag(sink, "list", context)
+ && as_generator("\n")
+ .generate(sink, attributes::unused, context);
+ }
+
template<typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::property_def const& prop, Context const& context) const
{
@@ -507,12 +646,35 @@ struct documentation_generator
text = "";
if (prop.setter.is_engaged())
- text = prop.setter->parameters[0].documentation.full_text;
+ {
+ if (prop.setter.is_engaged() && prop.setter->values.size() > 1u)
+ {
+ if (!(
+ as_generator(scope_tab(scope_size) << "/// ")
+ .generate(sink, attributes::unused, context)
+ && generate_opening_tag(sink, "value", context)
+ && as_generator("\n")
+ .generate(sink, attributes::unused, context)
+ && generate_tuple_parameters_doc(sink, prop.setter->parameters, context, true)
+ && as_generator(scope_tab(scope_size) << "/// ")
+ .generate(sink, attributes::unused, context)
+ && generate_closing_tag(sink, "value", context)
+ && as_generator("\n")
+ .generate(sink, attributes::unused, context)
+ ))
+ return false;
+ }
+ else
+ text = prop.setter->parameters[0].documentation.full_text;
+ }
else if (prop.getter.is_engaged())
text = prop.getter->return_documentation.full_text;
// If there are no docs at all, do not generate <value> tag
if (!text.empty())
- if (!generate_tag_value(sink, text, context)) return false;
+ if (!generate_tag_value(
+ sink,
+ text,
+ context)) return false;
return generate_all_tag_examples(sink,
name_helpers::klass_full_concrete_or_interface_name(prop.klass),
@@ -634,7 +796,7 @@ struct documentation_generator
for (auto &&param : ctor.function.parameters)
{
- auto ref = function_conversion(func);
+ auto ref = function_conversion(func, context);
if (!context_find_tag<options_context>(context).want_beta && func.is_beta)
{
@@ -677,7 +839,7 @@ struct documentation_string_generator
auto options = context_find_tag<options_context>(context);
auto state = context_find_tag<eolian_state_context>(context).state;
- if (!as_generator(string).generate(sink, documentation_generator::syntax_conversion(escaped, state, context), context))
+ if (!as_generator(string).generate(sink, documentation_generator::syntax_conversion(escaped, state, options.want_beta, context), context))
return false;
return true;
diff --git a/src/bin/eolian_mono/eolian/mono/enum_definition.hh b/src/bin/eolian_mono/eolian/mono/enum_definition.hh
index 2c304fcd0f..4b07652275 100644
--- a/src/bin/eolian_mono/eolian/mono/enum_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/enum_definition.hh
@@ -49,10 +49,11 @@ struct enum_definition_generator
if(!as_generator
(
- documentation
- << flags_attribute
- << "[Efl.Eo.BindingEntity]\n"
- "public enum " << enum_name << "\n{\n"
+ documentation(1)
+ << scope_tab << flags_attribute << "\n"
+ << scope_tab << "[Efl.Eo.BindingEntity]\n"
+ << scope_tab << "public enum " << enum_name << "\n"
+ << scope_tab << "{\n"
)
.generate(sink, enum_, context))
return false;
@@ -65,13 +66,14 @@ struct enum_definition_generator
auto literal = (*first).value.literal;
if (!as_generator
(
- documentation << string << " = " << string << ",\n"
+ documentation(2)
+ << scope_tab(2) << string << " = " << string << ",\n"
)
.generate(sink, std::make_tuple(*first, name, literal), context))
return false;
}
- if(!as_generator("}\n").generate(sink, attributes::unused, context)) return false;
+ if(!as_generator(scope_tab << "}\n").generate(sink, attributes::unused, context)) return false;
if(!name_helpers::close_namespaces(sink, enum_.namespaces, context))
return false;
diff --git a/src/bin/eolian_mono/eolian/mono/events.hh b/src/bin/eolian_mono/eolian/mono/events.hh
index a77f6d7d9c..2040a2ef04 100644
--- a/src/bin/eolian_mono/eolian/mono/events.hh
+++ b/src/bin/eolian_mono/eolian/mono/events.hh
@@ -131,7 +131,7 @@ struct unpack_event_args_visitor
}
bool operator()(grammar::attributes::klass_name const& cls) const
{
- return as_generator("(Efl.Eo.Globals.CreateWrapperFor(info) as " + name_helpers::klass_full_concrete_name(cls) + ")").generate(sink, attributes::unused, *context);
+ return as_generator("(Efl.Eo.Globals.CreateWrapperFor(info) as " + name_helpers::klass_full_interface_name(cls) + ")").generate(sink, attributes::unused, *context);
}
bool operator()(attributes::complex_type_def const& types) const
{
@@ -139,6 +139,10 @@ struct unpack_event_args_visitor
return as_generator("Efl.Eo.Globals.IteratorTo" << eolian_mono::type << "(info)").generate(sink, type, *context);
else if (types.outer.base_type == "accessor")
return as_generator("Efl.Eo.Globals.AccessorTo" << eolian_mono::type << "(info)").generate(sink, type, *context);
+ else if (types.outer.base_type == "array")
+ return as_generator("Efl.Eo.Globals.NativeArrayTo" << eolian_mono::type << "(info)").generate(sink, type, *context);
+ else if (types.outer.base_type == "list")
+ return as_generator("Efl.Eo.Globals.NativeListTo" << eolian_mono::type << "(info)").generate(sink, type, *context);
else
return as_generator("new " << eolian_mono::type << "(info, false, false)").generate(sink, type, *context);
}
@@ -165,8 +169,9 @@ struct pack_event_info_and_call_visitor
if (regular.is_struct())
{
return as_generator(
- indent << "IntPtr info = Marshal.AllocHGlobal(Marshal.SizeOf(e.arg));\n"
- << indent << "CallNativeEventCallback(" + library_name + ", \"_" + evt_c_name + "\", info, " << "(p) => Marshal.FreeHGlobal(p));\n"
+ indent.inc() << "Contract.Requires(e != null, nameof(e));\n"
+ << indent.inc() << "IntPtr info = Marshal.AllocHGlobal(Marshal.SizeOf(e.Arg));\n"
+ << indent.inc() << "CallNativeEventCallback(" + library_name + ", \"_" + evt_c_name + "\", info, " << "(p) => Marshal.FreeHGlobal(p));\n"
).generate(sink, attributes::unused, *context);
}
@@ -185,15 +190,16 @@ struct pack_event_info_and_call_visitor
match const str_table[] =
{
- {"string", [] { return "e.arg"; }}
- , {"stringshare", [] { return "e.arg"; }}
+ {"string", [] { return "e.Arg"; }}
+ , {"stringshare", [] { return "e.Arg"; }}
};
auto str_accept_func = [&](std::string const& conversion)
{
return as_generator(
- indent << "IntPtr info = Eina.StringConversion.ManagedStringToNativeUtf8Alloc(" << conversion << ");\n"
- << indent << "CallNativeEventCallback(" + library_name + ", \"_" + evt_c_name + "\", info, " << "(p) => Eina.MemoryNative.Free(p));\n"
+ indent.inc() << "Contract.Requires(e != null, nameof(e));\n"
+ << indent.inc() << "IntPtr info = Eina.StringConversion.ManagedStringToNativeUtf8Alloc(" << conversion << ");\n"
+ << indent.inc() << "CallNativeEventCallback(" + library_name + ", \"_" + evt_c_name + "\", info, " << "(p) => Eina.MemoryNative.Free(p));\n"
).generate(sink, attributes::unused, *context);
};
@@ -202,39 +208,53 @@ struct pack_event_info_and_call_visitor
match const value_table [] =
{
- {"bool", [] { return "e.arg ? (byte) 1 : (byte) 0"; }}
- , {"Eina.Error", [] { return "(int)e.arg"; }}
- , {nullptr, [] { return "e.arg"; }}
+ {"bool", [] { return "e.Arg ? (byte) 1 : (byte) 0"; }}
+ , {"Eina.Error", [] { return "(int)e.Arg"; }}
+ , {nullptr, [] { return "e.Arg"; }}
};
auto value_accept_func = [&](std::string const& conversion)
{
return as_generator(
- indent << "IntPtr info = Eina.PrimitiveConversion.ManagedToPointerAlloc(" << conversion << ");\n"
- << indent << "CallNativeEventCallback(" + library_name + ", \"_" + evt_c_name + "\", info, " << "(p) => Marshal.FreeHGlobal(p));\n"
+ indent.inc() << "Contract.Requires(e != null, nameof(e));\n"
+ << indent.inc() << "IntPtr info = Eina.PrimitiveConversion.ManagedToPointerAlloc(" << conversion << ");\n"
+ << indent.inc() << "CallNativeEventCallback(" + library_name + ", \"_" + evt_c_name + "\", info, " << "(p) => Marshal.FreeHGlobal(p));\n"
).generate(sink, attributes::unused, *context);
};
if (eina::optional<bool> b = type_match::get_match(value_table, filter_func, value_accept_func))
return *b;
- return value_accept_func("e.args");
+ return value_accept_func("e.Args");
}
bool operator()(grammar::attributes::klass_name const&) const
{
auto const& indent = current_indentation(*context);
- return as_generator(indent << "IntPtr info = e.arg.NativeHandle;\n"
- << "CallNativeEventCallback(" << library_name << ", \"_" << evt_c_name << "\", IntPtr.Zero, null);\n"
+ return as_generator(
+ indent.inc() << "Contract.Requires(e != null, nameof(e));\n"
+ << indent.inc() << "IntPtr info = e.Arg.NativeHandle;\n"
+ << indent.inc() << "CallNativeEventCallback(" << library_name << ", \"_" << evt_c_name << "\", info, null);\n"
).generate(sink, attributes::unused, *context);
}
bool operator()(attributes::complex_type_def const& type) const
{
auto const& indent = current_indentation(*context);
- if ((type.outer.base_type == "iterator") || (type.outer.base_type == "accessor"))
- return true;
-
- return as_generator(indent << "IntPtr info = e.arg.Handle;\n"
- << "CallNativeEventCallback(" << library_name << ", \"_" << evt_c_name << "\", IntPtr.Zero, null);\n"
+ bool is_own = type.outer.base_qualifier & attributes::qualifier_info::is_own;
+ std::string info_variable;
+
+ if (type.outer.base_type == "iterator")
+ info_variable = std::string("IntPtr info = Efl.Eo.Globals.IEnumerableToIterator(e.Arg, ") + (is_own ? "true" : "false") + ");\n";
+ else if (type.outer.base_type == "accessor")
+ info_variable = std::string("IntPtr info = Efl.Eo.Globals.IEnumerableToAccessor(e.Arg, ") + (is_own ? "true" : "false") + ");\n";
+ else if (type.outer.base_type == "array")
+ info_variable = std::string("IntPtr info = Efl.Eo.Globals.IListToNativeArray(e.Arg, ") + (is_own ? "true" : "false") + ");\n";
+ else if (type.outer.base_type == "list")
+ info_variable = std::string("IntPtr info = Efl.Eo.Globals.IListToNativeList(e.Arg, ") + (is_own ? "true" : "false") + ");\n";
+ else
+ info_variable = "IntPtr info = e.Arg.Handle;\n";
+ return as_generator(indent.inc() << "Contract.Requires(e != null, nameof(e));\n"
+ << indent.inc() << info_variable
+ << indent.inc() << "CallNativeEventCallback(" << library_name << ", \"_" << evt_c_name << "\", info, null);\n"
).generate(sink, attributes::unused, *context);
}
};
@@ -256,7 +276,7 @@ struct event_argument_wrapper_generator
std::string evt_name = name_helpers::managed_event_name(evt.name);
- if (!as_generator("/// <summary>Event argument wrapper for event <see cref=\""
+ if (!as_generator(scope_tab << "/// <summary>Event argument wrapper for event <see cref=\""
<< join_namespaces(evt.klass.namespaces, '.', managed_namespace)
<< klass_interface_name(evt.klass) << "." << evt_name << "\"/>.\n"
).generate(sink, nullptr, context))
@@ -279,7 +299,7 @@ struct event_argument_wrapper_generator
{
if (!as_generator(
- lit("/// <para>Since EFL ") << evt.documentation.since << ".</para>\n"
+ scope_tab << lit("/// <para>Since EFL ") << evt.documentation.since << ".</para>\n"
).generate(sink, nullptr, context))
return false;
}
@@ -291,23 +311,23 @@ struct event_argument_wrapper_generator
}
}
- if (!as_generator(lit("/// </summary>\n")
- << "[Efl.Eo.BindingEntity]\n"
- << "public class " << name_helpers::managed_event_args_short_name(evt) << " : EventArgs {\n"
- << scope_tab << "/// <summary>Actual event payload.\n"
+ if (!as_generator(scope_tab << lit("/// </summary>\n")
+ << scope_tab << "[Efl.Eo.BindingEntity]\n"
+ << scope_tab << "public class " << name_helpers::managed_event_args_short_name(evt) << " : EventArgs {\n"
+ << scope_tab(2) << "/// <summary>Actual event payload.\n"
).generate(sink, nullptr, context))
return false;
if (since != "")
{
- if (!as_generator(scope_tab << "/// <para>Since EFL " << since << ".</para>\n").generate(sink, nullptr, context))
+ if (!as_generator(scope_tab(2) << "/// <para>Since EFL " << since << ".</para>\n").generate(sink, nullptr, context))
return false;
}
- if (!as_generator(scope_tab << "/// </summary>\n"
- << scope_tab << "/// <value>" << documentation_string << "</value>\n"
- << scope_tab << "public " << type << " arg { get; set; }\n"
- << "}\n\n"
+ if (!as_generator(scope_tab(2) << "/// </summary>\n"
+ << scope_tab(2) << "/// <value>" << documentation_string << "</value>\n"
+ << scope_tab(2) << "public " << type << " Arg { get; set; }\n"
+ << scope_tab << "}\n\n"
).generate(sink, std::make_tuple(evt.documentation.summary, *etype), context))
return false;
@@ -334,14 +354,14 @@ struct event_declaration_generator
if (evt.type.is_engaged())
wrapper_args_type = "<" + name_helpers::managed_event_args_name(evt) + ">";
- if (!as_generator(documentation(1))
+ if (!as_generator(documentation(2))
.generate(sink, evt, context)) return false;
if (evt.type.is_engaged())
if (!as_generator(
- scope_tab << "/// <value><see cref=\"" << name_helpers::managed_event_args_name(evt) << "\"/></value>\n"
+ scope_tab(2) << "/// <value><see cref=\"" << name_helpers::managed_event_args_name(evt) << "\"/></value>\n"
).generate(sink, evt, context)) return false;
if (!as_generator(
- scope_tab << "event EventHandler" << wrapper_args_type << " " << evt_name << ";\n"
+ scope_tab(2) << "event EventHandler" << wrapper_args_type << " " << evt_name << ";\n"
).generate(sink, evt, context))
return false;
@@ -391,7 +411,7 @@ struct event_definition_generator
if (!etype.is_engaged())
{
auto event_call_site_sink = std::back_inserter(event_native_call);
- if (!as_generator(indent.inc().inc() << "CallNativeEventCallback(" << library_name << ", \"_" << utils::to_uppercase(evt.c_name) << "\", IntPtr.Zero, null);\n")
+ if (!as_generator(indent.inc().inc().inc() << "CallNativeEventCallback(" << library_name << ", \"_" << utils::to_uppercase(evt.c_name) << "\", IntPtr.Zero, null);\n")
.generate(event_call_site_sink, attributes::unused, context))
return false;
}
@@ -407,7 +427,7 @@ struct event_definition_generator
auto sub_context = change_indentation(indent.inc().inc(), context);
if (!as_generator(", info => new " << wrapper_args_type << "{ "
- << "arg = ").generate(arg_initializer_sink, attributes::unused, context))
+ << "Arg = ").generate(arg_initializer_sink, attributes::unused, context))
return false;
if (!(*etype).original_type.visit(unpack_event_args_visitor<decltype(arg_initializer_sink), decltype(sub_context)>{arg_initializer_sink, &sub_context, *etype}))
return false;
@@ -420,11 +440,11 @@ struct event_definition_generator
event_args = arg_initializer;
}
- if(!as_generator(documentation(1)).generate(sink, evt, context))
+ if(!as_generator(documentation(2)).generate(sink, evt, context))
return false;
if (etype.is_engaged())
if (!as_generator(
- scope_tab << "/// <value><see cref=\"" << wrapper_args_type << "\"/></value>\n"
+ scope_tab(2) << "/// <value><see cref=\"" << wrapper_args_type << "\"/></value>\n"
).generate(sink, evt, context)) return false;
// Visible event declaration. Either a regular class member or an explicit interface implementation.
@@ -432,7 +452,7 @@ struct event_definition_generator
{
// Public event implementation.
if (!as_generator(
- scope_tab << (!use_explicit_impl ? "public " : " ") << "event EventHandler" << wrapper_args_template << " " << (use_explicit_impl ? (klass_name + ".") : "") << managed_evt_name << "\n"
+ scope_tab(2) << (!use_explicit_impl ? "public " : " ") << "event EventHandler" << wrapper_args_template << " " << (use_explicit_impl ? (klass_name + ".") : "") << managed_evt_name << "\n"
).generate(sink, attributes::unused, context))
return false;
}
@@ -445,7 +465,7 @@ struct event_definition_generator
visibility += "new ";
if (!as_generator(
- scope_tab << visibility << "event EventHandler" << wrapper_args_template << " " << wrapper_evt_name << "\n"
+ scope_tab(2) << visibility << "event EventHandler" << wrapper_args_template << " " << wrapper_evt_name << "\n"
).generate(sink, attributes::unused, context))
return false;
}
@@ -472,7 +492,7 @@ struct event_definition_generator
bool is_concrete = context_find_tag<class_context>(context).current_wrapper_kind == class_context::concrete;
if (!as_generator(
- scope_tab << "/// <summary>Method to raise event "<< event_name << ".\n"
+ scope_tab(2) << "/// <summary>Method to raise event "<< event_name << ".\n"
).generate(sink, nullptr, context))
return false;
@@ -491,7 +511,7 @@ struct event_definition_generator
{
if (!as_generator(
- scope_tab << "/// <para>Since EFL " << evt.documentation.since << ".</para>\n"
+ scope_tab(2) << "/// <para>Since EFL " << evt.documentation.since << ".</para>\n"
).generate(sink, nullptr, context))
return false;
}
@@ -504,21 +524,21 @@ struct event_definition_generator
}
// Close summary
- if (!as_generator(scope_tab << "/// </summary>\n").generate(sink, nullptr, context))
+ if (!as_generator(scope_tab(2) << "/// </summary>\n").generate(sink, nullptr, context))
return false;
if (evt.type.is_engaged())
{
- if (!as_generator(scope_tab << "/// <param name=\"e\">Event to raise.</param>\n"
+ if (!as_generator(scope_tab(2) << "/// <param name=\"e\">Event to raise.</param>\n"
).generate(sink, nullptr, context))
return false;
}
if (!as_generator(
- scope_tab << (is_concrete ? "public" : "protected virtual") << " void On" << event_name << "(" << (!evt.type.is_engaged() ? "" : event_args_type + " e") << ")\n"
- << scope_tab << "{\n"
+ scope_tab(2) << (is_concrete ? "public" : "protected virtual") << " void On" << event_name << "(" << (!evt.type.is_engaged() ? "" : event_args_type + " e") << ")\n"
+ << scope_tab(2) << "{\n"
<< event_native_call
- << scope_tab << "}\n\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, nullptr, context))
return false;
@@ -536,20 +556,20 @@ struct event_definition_generator
attributes::klass_def klass(get_klass(evt.klass, unit), unit);
auto library_name = context_find_tag<library_context>(context).actual_library_name(klass.filename);
return as_generator(
- scope_tab << "{\n"
- << scope_tab << scope_tab << "add\n"
- << scope_tab << scope_tab << "{\n"//evt.type.is_engaged()
- << scope_tab << scope_tab << scope_tab << "Efl.EventCb callerCb = GetInternalEventCallback(value"
+ scope_tab(2) << "{\n"
+ << scope_tab(2) << scope_tab << "add\n"
+ << scope_tab(2) << scope_tab << "{\n"//evt.type.is_engaged()
+ << scope_tab(2) << scope_tab << scope_tab << "Efl.EventCb callerCb = GetInternalEventCallback(value"
<< (evt.type.is_engaged() ? event_args : "") << ");\n"
- << scope_tab << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n"
- << scope_tab << scope_tab << scope_tab << "AddNativeEventHandler(" << library_name << ", key, callerCb, value);\n"
- << scope_tab << scope_tab << "}\n\n"
- << scope_tab << scope_tab << "remove\n"
- << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n"
- << scope_tab << scope_tab << scope_tab << "RemoveNativeEventHandler(" << library_name << ", key, value);\n"
- << scope_tab << scope_tab << "}\n"
- << scope_tab << "}\n\n"
+ << scope_tab(2) << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n"
+ << scope_tab(2) << scope_tab << scope_tab << "AddNativeEventHandler(" << library_name << ", key, callerCb, value);\n"
+ << scope_tab(2) << scope_tab << "}\n\n"
+ << scope_tab(2) << scope_tab << "remove\n"
+ << scope_tab(2) << scope_tab << "{\n"
+ << scope_tab(2) << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n"
+ << scope_tab(2) << scope_tab << scope_tab << "RemoveNativeEventHandler(" << library_name << ", key, value);\n"
+ << scope_tab(2) << scope_tab << "}\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, attributes::unused, context);
}
};
diff --git a/src/bin/eolian_mono/eolian/mono/function_declaration.hh b/src/bin/eolian_mono/eolian/mono/function_declaration.hh
index b71ffb121c..d209f06da1 100644
--- a/src/bin/eolian_mono/eolian/mono/function_declaration.hh
+++ b/src/bin/eolian_mono/eolian/mono/function_declaration.hh
@@ -42,11 +42,11 @@ struct function_declaration_generator
if(f.scope != attributes::member_scope::scope_public)
return true;
- if(!as_generator(documentation(1)).generate(sink, f, context))
+ if(!as_generator(documentation(2)).generate(sink, f, context))
return false;
return as_generator
- (scope_tab << eolian_mono::type(true) << " " << string << "(" << (parameter % ", ") << ");\n\n")
+ (scope_tab(2) << eolian_mono::type(true) << " " << string << "(" << (parameter % ", ") << ");\n\n")
.generate(sink, std::make_tuple(f.return_type, name_helpers::managed_method_name(f), f.parameters), context);
}
};
diff --git a/src/bin/eolian_mono/eolian/mono/function_definition.hh b/src/bin/eolian_mono/eolian/mono/function_definition.hh
index 86eb2db192..975335f4eb 100644
--- a/src/bin/eolian_mono/eolian/mono/function_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/function_definition.hh
@@ -26,8 +26,8 @@
#include "grammar/list.hpp"
#include "grammar/alternative.hpp"
#include "grammar/attribute_reorder.hpp"
-#include "grammar/eps.hpp"
#include "grammar/counter.hpp"
+#include "property_definition.hh"
#include "logging.hh"
#include "type.hh"
#include "name_helpers.hh"
@@ -39,12 +39,14 @@
#include "using_decl.hh"
#include "generation_contexts.hh"
#include "blacklist.hh"
+#include "grammar/eps.hpp"
namespace eolian_mono {
struct native_function_definition_generator
{
attributes::klass_def const* klass;
+ std::vector<attributes::property_def> properties;
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::function_def const& f, Context const& context) const
@@ -53,6 +55,24 @@ struct native_function_definition_generator
if(blacklist::is_function_blacklisted(f, context))
return true;
+ auto it = std::find_if (properties.begin(), properties.end()
+ , [&] (attributes::property_def const& prop)
+ {
+ return (prop.getter && *prop.getter == f)
+ || (prop.setter && *prop.setter == f);
+ });
+ if (it != properties.end())
+ {
+ if (it->getter && *it->getter == f)
+ {
+ if (property_generate_wrapper_getter (*it, context))
+ return true;
+ }
+ else
+ if (property_generate_wrapper_setter (*it, context))
+ return true;
+ }
+
auto const& indent = current_indentation(context);
// Delegate for the C# method we will export to EO as a method implementation.
@@ -70,7 +90,9 @@ struct native_function_definition_generator
(marshall_annotation << " " << marshall_parameter)
) % ", ")
<< ");\n\n")
- .generate(sink, std::make_tuple(f.return_type, f.return_type, f.c_name, f.parameters), context))
+ .generate(sink,
+ std::make_tuple(f.return_type, f.return_type, f.c_name, f.parameters),
+ context_add_tag(direction_context{direction_context::native_to_managed}, context)))
return false;
// API delegate is the wrapper for the Eo methods exported from C that we will use from C#.
@@ -166,7 +188,7 @@ struct native_function_definition_generator
, f.c_name
, f.parameters
)
- , context))
+ , context_add_tag(direction_context{direction_context::native_to_managed}, context)))
return false;
// Static functions do not need to be called from C
@@ -176,7 +198,9 @@ struct native_function_definition_generator
// This is the delegate that will be passed to Eo to be called from C.
if(!as_generator(
indent << "private static " << f.c_name << "_delegate " << f.c_name << "_static_delegate;\n\n"
- ).generate(sink, attributes::unused, context))
+ ).generate(sink,
+ attributes::unused,
+ context_add_tag(direction_context{direction_context::native_to_managed}, context)))
return false;
return true;
@@ -185,10 +209,6 @@ struct native_function_definition_generator
struct function_definition_generator
{
- function_definition_generator(bool do_super = false)
- : do_super(do_super)
- {}
-
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::function_def const& f, Context const& context) const
{
@@ -198,6 +218,25 @@ struct function_definition_generator
if(blacklist::is_function_blacklisted(f, context))
return true;
+ auto function_scope = eolian_mono::function_scope_get(f);
+ auto it = std::find_if (properties.begin(), properties.end()
+ , [&] (attributes::property_def const& prop)
+ {
+ return (prop.getter && *prop.getter == f)
+ || (prop.setter && *prop.setter == f);
+ });
+ if (it != properties.end())
+ {
+ if (it->getter && *it->getter == f)
+ {
+ if (property_generate_wrapper_getter (*it, context))
+ function_scope = "internal ";
+ }
+ else
+ if (property_generate_wrapper_setter (*it, context))
+ function_scope = "internal ";
+ }
+
// Do not generate static function for concrete class
if (is_concrete && f.is_static)
return true;
@@ -207,7 +246,7 @@ struct function_definition_generator
return false;
if(!as_generator
- (documentation(1)).generate(sink, f, context))
+ (documentation(2)).generate(sink, f, context))
return false;
std::string self = "this.NativeHandle";
@@ -220,15 +259,15 @@ struct function_definition_generator
self = "";
if(!as_generator
- (scope_tab << eolian_mono::function_scope_get(f) << ((do_super && !f.is_static) ? "virtual " : "") << (f.is_static ? "static " : "") << return_type << " " << string << "(" << (parameter % ", ")
+ (scope_tab(2) << function_scope << ((do_super && !f.is_static) ? "virtual " : "") << (f.is_static ? "static " : "") << return_type << " " << string << "(" << (parameter % ", ")
<< ") {\n"
- << scope_tab(2) << eolian_mono::function_definition_preamble()
+ << scope_tab(3) << eolian_mono::function_definition_preamble()
<< klass_full_native_inherit_name(f.klass) << "." << string << "_ptr.Value.Delegate("
<< self
<< ((!f.is_static && (f.parameters.size() > 0)) ? ", " : "")
<< (argument_invocation % ", ") << ");\n"
- << scope_tab(2) << eolian_mono::function_definition_epilogue()
- << scope_tab(1) << "}\n\n")
+ << scope_tab(3) << eolian_mono::function_definition_epilogue()
+ << scope_tab(2) << "}\n\n")
.generate(sink, std::make_tuple(name_helpers::managed_method_name(f), f.parameters, f, f.c_name, f.parameters, f), context))
return false;
@@ -236,24 +275,29 @@ struct function_definition_generator
}
bool do_super;
+ std::vector<attributes::property_def> properties;
};
struct function_definition_parameterized
{
- function_definition_generator operator()(bool do_super) const
+ function_definition_generator operator()(bool do_super, std::vector<attributes::property_def> properties) const
{
- return {do_super};
+ return {do_super, properties};
+ }
+ function_definition_generator operator()(std::vector<attributes::property_def> properties) const
+ {
+ return {false, properties};
}
} const function_definition;
-function_definition_generator as_generator(function_definition_parameterized)
-{
- return {};
-}
+// function_definition_generator as_generator(function_definition_parameterized)
+// {
+// return {};
+// }
struct native_function_definition_parameterized
{
- native_function_definition_generator operator()(attributes::klass_def const& klass) const
+ native_function_definition_generator operator()(attributes::klass_def const& klass, std::vector<attributes::property_def> properties) const
{
- return {&klass};
+ return {&klass, properties};
}
} const native_function_definition;
@@ -285,11 +329,11 @@ struct property_extension_method_definition_generator
if (property.setter.is_engaged())
{
attributes::type_def prop_type = property.setter->parameters[0].type;
- if (!as_generator(scope_tab << "public static Efl.BindableProperty<" << type(true) << "> " << managed_name << "<T>(this Efl.Ui.ItemFactory<T> fac, Efl.Csharp.ExtensionTag<"
+ if (!as_generator(scope_tab(2) << "public static Efl.BindableProperty<" << type(true) << "> " << managed_name << "<T>(this Efl.Ui.ItemFactory<T> fac, Efl.Csharp.ExtensionTag<"
<< name_helpers::klass_full_concrete_or_interface_name(cls)
<< ", T>magic = null) where T : " << name_helpers::klass_full_concrete_or_interface_name(cls) << " {\n"
- << scope_tab << scope_tab << "return new Efl.BindableProperty<" << type(true) << ">(\"" << property.name << "\", fac);\n"
- << scope_tab << "}\n\n"
+ << scope_tab(2) << scope_tab << "return new Efl.BindableProperty<" << type(true) << ">(\"" << property.name << "\", fac);\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, std::make_tuple(prop_type, prop_type), context))
return false;
}
@@ -302,11 +346,12 @@ struct property_extension_method_definition_generator
if (property.setter.is_engaged())
{
attributes::type_def prop_type = property.setter->parameters[0].type;
- if (!as_generator(scope_tab << "public static Efl.BindableProperty<" << type(true) << "> " << managed_name << "<T>(this Efl.BindablePart<T> part, Efl.Csharp.ExtensionTag<"
+ if (!as_generator(scope_tab(2) << "public static Efl.BindableProperty<" << type(true) << "> " << managed_name << "<T>(this Efl.BindablePart<T> part, Efl.Csharp.ExtensionTag<"
<< name_helpers::klass_full_concrete_or_interface_name(cls)
<< ", T>magic = null) where T : " << name_helpers::klass_full_concrete_or_interface_name(cls) << " {\n"
- << scope_tab << scope_tab << "return new Efl.BindableProperty<" << type(true) << ">(part.PartName, \"" << property.name << "\", part.Binder);\n"
- << scope_tab << "}\n\n"
+ << scope_tab(2) << scope_tab << "Contract.Requires(part != null, nameof(part));\n"
+ << scope_tab(2) << scope_tab << "return new Efl.BindableProperty<" << type(true) << ">(part.PartName, \"" << property.name << "\", part.Binder);\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, std::make_tuple(prop_type, prop_type), context))
return false;
}
@@ -324,328 +369,109 @@ property_extension_method_definition_generator property_extension_method_definit
struct property_wrapper_definition_generator
{
- template <typename OutputIterator, typename Context>
- bool generate_get_indexer(OutputIterator sink, attributes::property_def const& property, Context const& context
- , std::string get_scope
- , bool is_interface) const
- {
- if (is_interface)
- {
- if (!as_generator(scope_tab << scope_tab << get_scope << "get;\n"
- ).generate(sink, attributes::unused, context))
- return false;
- }
- else
- {
- if (!as_generator(scope_tab << scope_tab << get_scope << "get\n"
- << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab(2) << "var i = new "
- << name_helpers::property_concrete_indexer_name(property) << "();\n"
- << scope_tab << scope_tab(2) << "i.Self = this;\n"
- << scope_tab << scope_tab(2) << "return i;\n"
- << scope_tab << scope_tab << "}\n"
- ).generate(sink, attributes::unused, context))
- return false;
- }
-
- return true;
- }
-
- template <typename OutputIterator, typename Context, typename C1, typename C2>
- bool generate_indexer(OutputIterator sink
- , attributes::property_def const& property
- , Context const& context
- , std::string scope, std::string get_scope, std::string set_scope
- , std::string class_name
- , C1 keys, C2 values
- , bool is_interface
- , bool is_concrete_for_interface
- , bool has_setter) const
- {
- if (is_interface)
- return true;
-
- auto size_not_one = [] (std::vector<attributes::parameter_def> k) { return k.size() != 1; };
- auto type_or_tuple
- =
- (
- (
- attribute_conditional(size_not_one)["("]
- << (type(false) % ", ")
- << ")"
- )
- | *type(false)
- )
- ;
-
- std::string parentship = "\n";
-
- bool is_self_property = *implementing_klass == *klass_from_property;
-
- if (!(is_self_property && !is_concrete_for_interface))
- parentship = " : " + name_helpers::property_interface_indexer_name(property, *klass_from_property) + "\n";
-
- if (!as_generator
- (
- scope_tab << scope << "class " << name_helpers::property_concrete_indexer_name(property) << parentship
- << scope_tab << "{\n"
- << scope_tab(2) << "public " << class_name << " Self {get; set;}\n"
- << scope_tab(2) << "public "
- << type_or_tuple << " this[" << type_or_tuple <<" i]\n"
- << scope_tab(2) << "{\n"
- ).generate(sink, make_tuple(values, values, keys, keys), context))
- return false;
-
- assert (!keys.empty());
- std::vector<std::string> get_keys;
- if(keys.size() != 1)
- {
- unsigned int i = 0;
- for (auto&& key : keys)
- {
- static_cast<void>(key);
- ++i;
- get_keys.push_back("i.Item" + std::to_string(i));
- }
- }
- else
- {
- get_keys.push_back ("i");
- }
- assert (!get_keys.empty());
-
- generate_get(sink, property, context, get_scope, get_keys, values, is_interface, "Self.");
- if (has_setter)
- generate_set(sink, property, context, set_scope, get_keys, values, is_interface, "Self.");
-
- if (!as_generator
- (
- scope_tab(2) << "}\n"
- << scope_tab << "};\n"
- ).generate(sink, attributes::unused, context))
- return false;
- return true;
- }
- template <typename OutputIterator, typename Context, typename CK, typename CV>
- bool generate_set(OutputIterator sink, attributes::property_def const& property, Context const& context
- , std::string set_scope
- , CK keys, CV values
- , bool is_interface
- , std::string name_prefix = "") const
- {
- using efl::eolian::grammar::counter;
- if (is_interface)
- {
- if (!as_generator(scope_tab << scope_tab << set_scope << "set;\n"
- ).generate(sink, attributes::unused, context))
- return false;
- }
- else if (values.size() == 1)
- {
- if (!as_generator(scope_tab << scope_tab << set_scope << "set " << "{ " << name_prefix << name_helpers::managed_method_name(*property.setter) + "(" << *(string << ",") << "value); }\n"
- ).generate(sink, keys, context))
- return false;
- }
- else if (values.size() > 1)
- {
- if (!as_generator(
- scope_tab << scope_tab << set_scope << "set "
- << ("{ " << name_prefix << name_helpers::managed_method_name(*property.setter) + "(")
- << *(string << ",") << ((" value.Item" << counter(1)) % ", ")
- << "); }\n"
- ).generate(sink, std::make_tuple(keys, values), context))
- return false;
- }
- return true;
- }
- template <typename OutputIterator, typename Context, typename CK, typename CV>
- bool generate_get(OutputIterator sink, attributes::property_def const& property, Context const& context
- , std::string get_scope
- , CK keys, CV values
- , bool is_interface
- , std::string name_prefix = "") const
- {
- using efl::eolian::grammar::attribute_reorder;
- using efl::eolian::grammar::attributes::parameter_direction;
- using efl::eolian::grammar::attributes::parameter_def;
-
- if (is_interface) // only declaration
- {
- if (!as_generator(scope_tab << scope_tab << get_scope << "get;\n"
- ).generate(sink, attributes::unused, context))
- return false;
- }
- else
- if (/*has_getter && */values.size() == 1)
- {
- if (!as_generator
- (scope_tab << scope_tab << get_scope
- << "get " << "{ return " << name_prefix << name_helpers::managed_method_name(*property.getter)
- << "(" << (string % ",") << "); }\n"
- ).generate(sink, keys, context))
- return false;
- }
- else if (/*has_getter && */values.size() > 1)
- {
- if (!as_generator
- (scope_tab << scope_tab << get_scope << "get "
- << "{\n"
- << *attribute_reorder<1, -1, 1>
- (scope_tab(3) << type(true) << " _out_"
- << argument(false) << " = default(" << type(true) << ");\n"
- )
- << scope_tab(3) << name_prefix << name_helpers::managed_method_name(*property.getter)
- << "(" << *(string << ",") << (("out _out_" << argument(false)) % ", ") << ");\n"
- << scope_tab(3) << "return (" << (("_out_"<< argument(false)) % ", ") << ");\n"
- << scope_tab(2) << "}" << "\n"
- ).generate(sink, std::make_tuple(values, keys, values, values), context))
- return false;
- }
- // else if (values.size() == 1)
- // {
- // if (!as_generator
- // (scope_tab << scope_tab << get_scope << "get "
- // << "{\n"
- // << *attribute_reorder<1, -1, 1>(scope_tab(3) << type(true) << " _out_" << argument(false) << " = default(" << type(true) << ");\n")
- // << scope_tab(3) << name_prefix << name_helpers::managed_method_name(*property.getter)
- // << "(" << *(string << ",") << (("out _out_" << argument(false)) % ",") << ");\n"
- // << scope_tab(3) << "return " << (("_out_"<< argument(false)) % ",") << ";\n"
- // << scope_tab(2) << "}" << "\n"
- // ).generate(sink, std::make_tuple(values, keys, values, values), context))
- // return false;
- // }
- return true;
- }
-
template<typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::property_def const& property, Context const& context) const
{
using efl::eolian::grammar::attribute_reorder;
using efl::eolian::grammar::counter;
+ using efl::eolian::grammar::eps;
using efl::eolian::grammar::attributes::parameter_direction;
using efl::eolian::grammar::attributes::parameter_def;
- /// C(k) = keys count, C(v) = values count
- /// /------------\ /------\.
- /// |blacklisted?|---yes-----| skip |--------------\.
- /// \------------/ \------/ |
- /// | | |
- /// no yes |
- /// | | |
- /// /---------\ /------------\ |
- /// |is-static|----yes-----|is-interface| |
- /// \---------/ \------------/ |
- /// | | |
- /// no no |
- /// | | |
- /// /--------\ /-----------\ |
- /// |has-get?|---no-conc---|is-concrete|-----yes---/
- /// \--------/ \-----------/
- /// / \.
- /// no yes
- /// / \.
- /// /----\ /--------------------------------------\.
- /// |skip|-yes-|explicit return != Eina.Error or void |
- /// \----/ \--------------------------------------/
- /// |
- /// no
- /// |
- /// /--------\.
- /// |has-set?|
- /// \--------/
- /// / \.
- /// no yes
- /// / \.
- /// /------\ /--------------------------------------\.
- /// /------------------|no-set| |explicit return != Eina.Error or void |---- yes --\.
- /// | \------/ \--------------------------------------/ |
- /// | \------------|----------------------------------------------/
- /// | no
- /// | |
- /// | /--------\.
- /// | |has-both|
- /// | \--------/
- /// | |
- /// | /-------------------\.
- /// | |set-keys = get-keys|
- /// | \-------------------/
- /// | / |
- /// | no |
- /// | / |
- /// | /----\ /-----------------------\.
- /// | |skip|--no---|set-values = get-values|
- /// | \----/ \-----------------------/
- /// | /
- /// | yes
- /// | /
- /// | /--------\.
- /// \-------------------------| keys |
- /// \--------/
- /// / \.
- /// 0 >0
- /// / \.
- /// /----------\ /----------\.
- /// |no-indexer| | keys > 1 |
- /// \----------/ \----------/
- /// | / |
- /// | no yes
- /// | / |
- /// | / |
- /// | /---------\ /-------------------\.
- /// | | indexer | | indexer tuple key |
- /// | \---------/ \-------------------/
- /// | / |
- /// /--------\ |
- /// | values |----------/
- /// \--------/
- /// / \.
- /// 1 >1
- /// / \.
- /// /----------------\ /-------------\.
- /// | no tuple value | | tuple value |
- /// \----------------/ \-------------/
- ///
-
- auto has_wrapper = helpers::has_property_wrapper (property, implementing_klass, context);
- bool has_getter = has_wrapper & helpers::has_property_wrapper_bit::has_getter;
- if (!has_getter) return true;
- bool has_setter = has_wrapper & helpers::has_property_wrapper_bit::has_setter;
- bool has_indexer = has_wrapper & helpers::has_property_wrapper_bit::has_indexer;
+ if (blacklist::is_property_blacklisted(property, *implementing_klass, context))
+ return true;
bool is_interface = context_find_tag<class_context>(context).current_wrapper_kind == class_context::interface;
bool is_static = (property.getter.is_engaged() && property.getter->is_static)
|| (property.setter.is_engaged() && property.setter->is_static);
bool is_concrete = context_find_tag<class_context>(context).current_wrapper_kind == class_context::concrete;
- bool is_concrete_for_interface = is_concrete
- && (implementing_klass->type == attributes::class_type::interface_
- || implementing_klass->type == attributes::class_type::mixin);
- //if (name_helpers::klass_concrete_or_interface_name (*implementing_klass) == "IMapping")
- if (false)
+
+ if ((is_concrete || is_interface) && is_static)
+ return true;
+
+ auto get_params = property.getter.is_engaged() ? property.getter->parameters.size() : 0;
+ //auto set_params = property.setter.is_engaged() ? property.setter->parameters.size() : 0;
+
+ // C# properties must have a single value.
+ //
+ // Single values in getters are automatically converted to return_type,
+ // meaning they should have 0 parameters.
+ //
+ // For setters, we ignore the return type - usually boolean.
+ // if (get_params > 0 || set_params > 1)
+ // return true;
+
+ if (property.getter && !property.getter->keys.empty())
+ return true;
+ if (property.setter && !property.setter->keys.empty())
+ return true;
+
+ if (property.getter && property.setter)
{
- if (!as_generator(grammar::lit("/// is interface ") << (int)is_interface
- << " is static " << (int)is_static
- << " is concrete " << (int)is_concrete
- << " is concrete_for_interface " << (int)is_concrete_for_interface
- << " klass_from_property->type " << (int)klass_from_property->type
- << " has_setter " << (int)has_setter
- << " property.setter->explicit_return_type != attributes::void_ " << (property.setter && property.setter->explicit_return_type != attributes::void_)
- << " property.setter->keys != property.getter->keys " << (property.setter && property.setter->keys != property.getter->keys)
- << " property.setter->values != property.getter->values " << (property.setter && property.setter->values != property.getter->values)
- << " has_setter && property.setter->scope != attributes::member_scope::scope_public " << (property.setter && property.setter->scope != attributes::member_scope::scope_public)
- << "\n")
- .generate (sink, attributes::unused, context))
- return false;
+ if (property.setter->values.size() != property.getter->values.size())
+ {
+ if (!std::equal(property.setter->values.begin(), property.setter->values.end()
+ , property.getter->values.begin()))
+ return true;
+ }
}
- if (blacklist::is_property_blacklisted(property, context))
- return true;
+ std::vector<attributes::parameter_def> parameters;
+
+ if (property.setter.is_engaged())
+ {
+ std::transform (property.setter->parameters.begin(), property.setter->parameters.end()
+ , std::back_inserter(parameters)
+ , [] (parameter_def p) -> parameter_def
+ {
+ //p.direction = efl::eolian::attributes::parameter_direction::in;
+ return p;
+ });
+ }
+ else if (property.getter.is_engaged())
+ {
+ // if getter has parameters, then we ignore return type, otherwise
+ // we use the return type.
+ if (get_params == 0)
+ parameters.push_back({parameter_direction::in
+ , property.getter->return_type, "propertyResult", {}
+ , property.getter->unit});
+ else
+ std::transform (property.getter->parameters.begin(), property.getter->parameters.end()
+ , std::back_inserter(parameters)
+ , [] (parameter_def p) -> parameter_def
+ {
+ p.direction = parameter_direction::in;
+ return p;
+ });
+ }
+ else
+ {
+ EINA_CXX_DOM_LOG_ERR(eolian_mono::domain) << "Property must have either a getter or a setter." << std::endl;
+ return false;
+ }
+
+ std::string dir_mod;
+ if (property.setter.is_engaged())
+ dir_mod = direction_modifier(property.setter->parameters[0]);
std::string managed_name = name_helpers::property_managed_name(property);
std::string scope = "public ";
- std::string get_scope = eolian_mono::function_scope_get(*property.getter);
- std::string set_scope = has_setter ? eolian_mono::function_scope_get(*property.setter) : "";
+ std::string get_scope = property.getter.is_engaged() ? eolian_mono::function_scope_get(*property.getter) : "";
+ bool is_get_public = get_scope == "public ";
+ std::string set_scope = property.setter.is_engaged() ? eolian_mono::function_scope_get(*property.setter) : "";
+ bool is_set_public = set_scope == "public ";
+ bool get_has_return_error = false, set_has_return_error = false;
+
+ // No need to generate this wrapper as no accessor is public.
+ if (is_interface && (!is_get_public && !is_set_public))
+ return true;
+
+ // Do not generate set-only proeprty
+ if (property.setter.is_engaged() && !property.getter.is_engaged())
+ return true;
// C# interface members are declared automatically as public
if (is_interface)
@@ -660,104 +486,146 @@ struct property_wrapper_definition_generator
get_scope = "";
set_scope = "";
}
- else if (!has_setter || (get_scope == scope))
+ else if (!property.setter.is_engaged() || (get_scope == scope))
{
scope = get_scope;
get_scope = "";
}
-
- std::string virtual_mod = (is_static || is_interface || is_concrete) ? "" : "virtual ";
-
- auto keys = property.getter->keys;
- auto values = property.getter->values;
- auto generated_values = values;
- auto klass_name = name_helpers::klass_concrete_or_interface_name (*implementing_klass);
-
- if (has_indexer)
- {
- assert (!!implementing_klass);
- generate_indexer (sink, property, context, scope, get_scope, set_scope
- , klass_name, keys, values
- , is_interface, is_concrete_for_interface, has_setter);
-
- generated_values.clear();
- if (!is_interface && *implementing_klass == *klass_from_property
- && !is_concrete_for_interface)
- {
- generated_values.push_back
- (attributes::parameter_def
- {parameter_direction::in
- , attributes::type_def
- {
- attributes::regular_type_def{name_helpers::property_concrete_indexer_name(property), {attributes::qualifier_info::is_none, ""}, {}}
- , name_helpers::property_concrete_indexer_name(property)
- , false, false, false, ""
- }
- , "indexer", {}, nullptr
- });
- }
- else
+ else if (!property.getter.is_engaged() || (set_scope == scope))
{
- generated_values.push_back
- (attributes::parameter_def
- {parameter_direction::in
- , attributes::type_def
- {
- attributes::regular_type_def{name_helpers::klass_full_concrete_or_interface_name (*klass_from_property) + managed_name + "Indexer", {attributes::qualifier_info::is_none, ""}, {}}
- , name_helpers::property_interface_indexer_name(property, *klass_from_property)
- , false, false, false, ""
- }
- , "indexer", {}, nullptr
- });
+ scope = set_scope;
+ set_scope = "";
}
- }
- if (generated_values.size() == 1)
+ if (property.getter && property.getter->explicit_return_type.c_type == "Eina_Success_Flag")
+ get_has_return_error = true;
+
+ if (property.setter && property.setter->explicit_return_type.c_type == "Eina_Success_Flag")
+ set_has_return_error = true;
+
+ if (parameters.size() == 1)
{
if (!as_generator(
- documentation(1)
- << scope_tab << scope << (is_static ? "static " : virtual_mod) << type(true) << " " << managed_name << " {\n"
- ).generate(sink, std::make_tuple(property, generated_values[0].type), context))
+ documentation(2)
+ << scope_tab(2) << scope << (is_static ? "static " : "") << type(true) << " " << managed_name << " {\n"
+ ).generate(sink, std::make_tuple(property, parameters[0].type), context))
return false;
}
else
{
if (!as_generator
(
- documentation(1)
- << scope_tab << scope << (is_static ? "static (" : "(")
+ documentation(2)
+ << scope_tab(2) << scope << (is_static ? "static (" : "(")
<< (attribute_reorder<1, -1>(type(true) /*<< " " << argument*/) % ", ") << ") "
<< managed_name << " {\n"
- ).generate(sink, std::make_tuple(property, generated_values), context))
+ ).generate(sink, std::make_tuple(property, parameters), context))
return false;
}
- if (has_indexer)
+ if (property.getter)
{
- generate_get_indexer (sink, property, context, get_scope, is_interface);
+ auto managed_getter_name = name_helpers::managed_method_name(*property.getter);
+ if (is_interface)
+ {
+ if (is_get_public)
+ {
+ if (!as_generator(scope_tab(2) << scope_tab << set_scope << "get;\n"
+ ).generate(sink, attributes::unused, context))
+ return false;
+ }
+ }
+ else if (get_params == 0)
+ {
+ if (!as_generator
+ (scope_tab(2) << scope_tab << get_scope
+ << "get " << "{ return " + managed_getter_name + "(); }\n"
+ ).generate(sink, attributes::unused, context))
+ return false;
+ }
+ else if (parameters.size() >= 1)
+ {
+ if (!as_generator
+ (scope_tab(2) << scope_tab << get_scope << "get "
+ << "{\n"
+ << *attribute_reorder<1, -1, 1>
+ (scope_tab(4) << type(true) << " _out_"
+ << argument(false) << " = default(" << type(true) << ");\n"
+ )
+ << scope_tab(4) << (get_has_return_error ? "var s = " : "")
+ << name_helpers::managed_method_name(*property.getter)
+ << "(" << (("out _out_" << argument(false)) % ", ") << ");\n"
+ << ((eps(get_has_return_error) << scope_tab(4)
+ << "if (s == '\\0') throw new Efl.EflException("
+ << "\"Call of native function for " << managed_getter_name << " returned an error.\""
+ << ");\n")
+ | eps)
+ << scope_tab(4) << "return (" << (("_out_"<< argument(false)) % ", ") << ");\n"
+ << scope_tab(3) << "}" << "\n"
+ ).generate(sink, std::make_tuple(parameters, parameters, parameters), context))
+ return false;
+ }
}
- else
- {
- std::vector<std::string> empty_keys;
- generate_get(sink, property, context, get_scope, empty_keys, values, is_interface);
- if (has_setter)
- generate_set (sink, property, context, set_scope, empty_keys, values, is_interface);
+ if (property.setter)
+ {
+ auto managed_setter_name = name_helpers::managed_method_name(*property.setter);
+ if (is_interface)
+ {
+ if (is_set_public)
+ {
+ if (!as_generator(scope_tab(2) << scope_tab << set_scope << "set;\n"
+ ).generate(sink, attributes::unused, context))
+ return false;
+ }
+ }
+ else if (parameters.size() == 1)
+ {
+ if (!as_generator(scope_tab(2) << scope_tab << set_scope << "set "
+ << "{ "
+ << ((eps (set_has_return_error) << "\n" << scope_tab(4) << "var s = ") | eps)
+ << managed_setter_name
+ << "(" << dir_mod << "value);"
+ << ((eps(set_has_return_error) << "\n" << scope_tab(4)
+ << "if (s == '\\0') throw new Efl.EflException("
+ << "\"Call of native function for " << managed_setter_name << " returned an error.\""
+ << ");\n" << scope_tab(3))
+ | eps)
+ << " }\n"
+ ).generate(sink, attributes::unused, context))
+ return false;
+ }
+ else if (parameters.size() > 1)
+ {
+ if (!as_generator(scope_tab(2) << scope_tab
+ << set_scope << "set "
+ << "{ "
+ << ((eps (set_has_return_error) << "\n" << scope_tab(4) << "var s = ") | eps)
+ << name_helpers::managed_method_name(*property.setter)
+ << "(" << dir_mod << ((" value.Item" << counter(1)) % ", ") << ");"
+ << ((eps(set_has_return_error) << "\n" << scope_tab(4)
+ << "if (s == '\\0') throw new Efl.EflException("
+ << "\"Call of native function for " << managed_setter_name << " returned an error.\""
+ << ");\n" << scope_tab(3))
+ | eps)
+ << " }" << "\n"
+ ).generate(sink, parameters, context))
+ return false;
+ }
}
- if (!as_generator(scope_tab << "}\n\n").generate(sink, attributes::unused, context))
+ if (!as_generator(scope_tab(2) << "}\n\n").generate(sink, attributes::unused, context))
return false;
return true;
}
- attributes::klass_def const* implementing_klass, *klass_from_property;
+ attributes::klass_def const* implementing_klass;
};
struct property_wrapper_definition_parameterized
{
- property_wrapper_definition_generator operator()(attributes::klass_def const& klass
- , attributes::klass_def const& prop_from_klass) const
+ property_wrapper_definition_generator operator()(attributes::klass_def const& klass) const
{
- return {&klass, &prop_from_klass};
+ return {&klass};
}
} const property_wrapper_definition;
property_wrapper_definition_generator as_generator(property_wrapper_definition_parameterized)
@@ -765,45 +633,6 @@ property_wrapper_definition_generator as_generator(property_wrapper_definition_p
return {};
}
-struct interface_property_indexer_definition_generator
-{
- template<typename OutputIterator, typename Context>
- bool generate(OutputIterator sink, attributes::property_def const& property, Context const& context) const
- {
- using efl::eolian::grammar::attribute_reorder;
- using efl::eolian::grammar::counter;
- using efl::eolian::grammar::attributes::parameter_direction;
- using efl::eolian::grammar::attributes::parameter_def;
-
- bool is_interface = context_find_tag<class_context>(context).current_wrapper_kind == class_context::interface;
-
- assert (is_interface);
- auto klass_name = name_helpers::klass_concrete_or_interface_name (*implementing_klass);
- std::string managed_name = name_helpers::property_managed_name(property);
-
- if (!as_generator
- ("public interface " << name_helpers::property_interface_indexer_short_name(property, *implementing_klass) << "\n"
- << "{\n"
- << "}\n"
- ).generate (sink, attributes::unused, context))
- return false;
-
- return true;
- }
- attributes::klass_def const* implementing_klass;
-};
-struct interface_property_indexer_definition_parameterized
-{
- interface_property_indexer_definition_generator operator()(attributes::klass_def const& klass) const
- {
- return {&klass};
- }
-} const interface_property_indexer_definition;
-interface_property_indexer_definition_generator as_generator(interface_property_indexer_definition_parameterized)
-{
- return {};
-}
-
}
namespace efl { namespace eolian { namespace grammar {
@@ -819,10 +648,6 @@ struct is_eager_generator< ::eolian_mono::property_wrapper_definition_generator>
template <>
struct is_eager_generator< ::eolian_mono::property_wrapper_definition_parameterized> : std::true_type {};
template <>
-struct is_eager_generator< ::eolian_mono::interface_property_indexer_definition_parameterized> : std::true_type {};
-template <>
-struct is_eager_generator< ::eolian_mono::interface_property_indexer_definition_generator> : std::true_type {};
-template <>
struct is_generator< ::eolian_mono::function_definition_generator> : std::true_type {};
template <>
struct is_generator< ::eolian_mono::native_function_definition_generator> : std::true_type {};
@@ -834,10 +659,6 @@ template <>
struct is_generator< ::eolian_mono::property_wrapper_definition_generator> : std::true_type {};
template <>
struct is_generator< ::eolian_mono::property_wrapper_definition_parameterized> : std::true_type {};
-template <>
-struct is_generator< ::eolian_mono::interface_property_indexer_definition_parameterized> : std::true_type {};
-template <>
-struct is_generator< ::eolian_mono::interface_property_indexer_definition_generator> : std::true_type {};
namespace type_traits {
template <>
@@ -856,11 +677,6 @@ template <>
struct attributes_needed< ::eolian_mono::property_wrapper_definition_generator> : std::integral_constant<int, 1> {};
template <>
struct attributes_needed< ::eolian_mono::property_wrapper_definition_parameterized> : std::integral_constant<int, 1> {};
-
-template <>
-struct attributes_needed< ::eolian_mono::interface_property_indexer_definition_parameterized> : std::integral_constant<int, 1> {};
-template <>
-struct attributes_needed< ::eolian_mono::interface_property_indexer_definition_generator> : std::integral_constant<int, 1> {};
}
} } }
diff --git a/src/bin/eolian_mono/eolian/mono/function_helpers.hh b/src/bin/eolian_mono/eolian/mono/function_helpers.hh
index 4b9447f324..a70df9683a 100644
--- a/src/bin/eolian_mono/eolian/mono/function_helpers.hh
+++ b/src/bin/eolian_mono/eolian/mono/function_helpers.hh
@@ -117,7 +117,7 @@ struct function_definition_epilogue_generator
"Eina.Error.RaiseIfUnhandledException();\n"
<< *(convert_out_assign)
<< *(convert_in_ptr_assign)
- << scope_tab(2) << convert_return << "\n"
+ << scope_tab(3) << convert_return << "\n"
).generate(sink, std::make_tuple(f.parameters, f.parameters, f.return_type), context))
return false;
diff --git a/src/bin/eolian_mono/eolian/mono/generation_contexts.hh b/src/bin/eolian_mono/eolian/mono/generation_contexts.hh
index 2ac16b0f61..6cbdb19a36 100644
--- a/src/bin/eolian_mono/eolian/mono/generation_contexts.hh
+++ b/src/bin/eolian_mono/eolian/mono/generation_contexts.hh
@@ -26,7 +26,6 @@ namespace eolian_mono {
struct class_context
{
enum wrapper_kind {
- none,
interface,
concrete,
inherit,
@@ -51,6 +50,19 @@ struct class_context
{}
};
+struct direction_context
+{
+ enum direction {
+ native_to_managed,
+ managed_to_native,
+ };
+ direction current_direction;
+
+ direction_context(direction current_direction)
+ : current_direction(current_direction)
+ {}
+};
+
struct indentation_context
{
constexpr indentation_context(indentation_context const& other) = default;
@@ -110,12 +122,6 @@ struct options_context {
std::string examples_dir;
};
-template<typename Context>
-bool context_want_beta(Context const& context)
-{
- return efl::eolian::grammar::context_find_tag<options_context>(context).want_beta;
-}
-
}
#endif
diff --git a/src/bin/eolian_mono/eolian/mono/helpers.hh b/src/bin/eolian_mono/eolian/mono/helpers.hh
index 049f263d80..a13c26a1e8 100644
--- a/src/bin/eolian_mono/eolian/mono/helpers.hh
+++ b/src/bin/eolian_mono/eolian/mono/helpers.hh
@@ -17,7 +17,6 @@
#define EOLIAN_MONO_HELPERS_HH
#include "grammar/klass_def.hpp"
-#include "grammar/context.hpp"
#include "blacklist.hh"
#include "generation_contexts.hh"
#include "name_helpers.hh"
@@ -249,6 +248,67 @@ std::vector<attributes::function_def> get_all_implementable_methods(attributes::
return ret;
}
+/*
+ * Gets all properties that this class should implement (i.e. that come from an unimplemented interface/mixin and the class itself)
+ */
+template<typename Context>
+std::vector<attributes::property_def> get_all_implementable_properties(attributes::klass_def const& cls, Context const& context)
+{
+ bool want_beta = efl::eolian::grammar::context_find_tag<options_context>(context).want_beta;
+ std::vector<attributes::property_def> ret;
+ auto filter_beta = [&want_beta](attributes::property_def const& prop) {
+ if (!want_beta)
+ return prop.getter && !prop.setter ? !prop.getter->is_beta
+ : prop.getter && prop.setter ? !prop.getter->is_beta || !prop.setter->is_beta
+ : true
+ ;
+ else
+ return true;
+ };
+
+ std::copy_if(cls.properties.begin(), cls.properties.end(), std::back_inserter(ret), filter_beta);
+
+ // Non implemented interfaces
+ std::set<attributes::klass_name, attributes::compare_klass_name_by_name> implemented_interfaces;
+ std::set<attributes::klass_name, attributes::compare_klass_name_by_name> interfaces;
+ std::function<void(attributes::klass_name const&, bool)> inherit_algo =
+ [&] (attributes::klass_name const &klass, bool is_implemented)
+ {
+ attributes::klass_def c(get_klass(klass, cls.unit), cls.unit);
+ for (auto&& inherit: c.immediate_inherits)
+ {
+ switch(inherit.type)
+ {
+ case attributes::class_type::mixin:
+ case attributes::class_type::interface_:
+ interfaces.insert(inherit);
+ if (is_implemented)
+ implemented_interfaces.insert(inherit);
+ inherit_algo(inherit, is_implemented);
+ break;
+ case attributes::class_type::abstract_:
+ case attributes::class_type::regular:
+ inherit_algo(inherit, true);
+ default:
+ break;
+ }
+ }
+ };
+
+ inherit_algo(attributes::get_klass_name(cls), false);
+
+ for (auto&& inherit : implemented_interfaces)
+ interfaces.erase(inherit);
+
+ for (auto&& inherit : interfaces)
+ {
+ attributes::klass_def klass(get_klass(inherit, cls.unit), cls.unit);
+ std::copy_if(klass.properties.cbegin(), klass.properties.cend(), std::back_inserter(ret), filter_beta);
+ }
+
+ return ret;
+}
+
template<typename Klass>
inline bool is_managed_interface(Klass const& klass)
{
@@ -285,6 +345,51 @@ std::vector<attributes::function_def> get_all_registerable_methods(attributes::k
return ret;
}
+bool is_function_registerable (attributes::function_def func, attributes::klass_def const& cls)
+{
+ if (cls == func.klass)
+ return true;
+
+ if (is_managed_interface(func.klass) && func.is_static)
+ return true;
+
+ if (!is_managed_interface(func.klass) || func.scope != attributes::member_scope::scope_public)
+ return true;
+ return false;
+}
+
+// /*
+// * Gets all methods that this class should register (i.e. that comes from it and non-public interface methods
+// * that this class is the first one implementing)
+// */
+// template<typename Context>
+// std::vector<attributes::property_def> get_all_registerable_properties(attributes::klass_def const& cls, Context const& context)
+// {
+// std::vector<attributes::property_def> ret;
+
+// auto implementable_properties = get_all_implementable_properties(cls, context);
+
+// std::copy_if(implementable_properties.cbegin(), implementable_properties.cend(), std::back_inserter(ret)
+// , [&cls](attributes::property_def const & property) {
+// auto klass = property.getter ? property.getter->klass
+// : property.setter->klass;
+
+// if (cls == klass)
+// return true;
+
+// if (is_managed_interface(klass) && ((property.getter && property.getter->is_static)
+// || (property.setter && property.setter->is_static)))
+// return true;
+
+// if (!is_managed_interface(klass) || ((property.getter && property.getter->scope != attributes::member_scope::scope_public)
+// || (property.setter && property.setter->scope != attributes::member_scope::scope_public)))
+// return true;
+// return false;
+// });
+
+// return ret;
+// }
+
/*
* Checks whether the given is unique going up the inheritance tree from leaf_klass
*/
@@ -302,110 +407,18 @@ inline bool is_unique_event(attributes::event_def const& evt
inline std::vector<attributes::constructor_def> reorder_constructors(std::vector<attributes::constructor_def> constructors)
{
auto is_required = [](attributes::constructor_def const& ctr) { return !ctr.is_optional; };
+ auto is_object_parent = [](attributes::constructor_def const& ctr)
+ {
+ return (ctr.klass.namespaces.size() == 1
+ && ctr.klass.namespaces[0] == "Efl"
+ && ctr.klass.eolian_name == "Object"
+ && ctr.name == "Efl.Object.parent");
+ };
std::stable_partition(constructors.begin(), constructors.end(), is_required);
+ constructors.erase (std::remove_if (constructors.begin(), constructors.end(), is_object_parent), constructors.end());
return constructors;
}
-enum class has_property_wrapper_bit
-{
- has_none = 0
- , has_getter = 1 << 0
- , has_setter = 1 << 1
- , has_indexer = 1 << 2
- , has_key_tuple = 1 << 3
- , has_value_tuple = 1 << 4
- , has_set_error_check = 1 << 5
- , has_get_error_check = 1 << 6
-};
-
-has_property_wrapper_bit& operator|=(has_property_wrapper_bit& self, has_property_wrapper_bit bit)
-{
- self = static_cast<has_property_wrapper_bit>(static_cast<int>(self) | static_cast<int>(bit));
- return self;
-}
-
-bool operator&(has_property_wrapper_bit self, has_property_wrapper_bit bit)
-{
- return static_cast<int>(self) & static_cast<int>(bit);
-}
-
-template <typename Context>
-has_property_wrapper_bit has_property_wrapper(attributes::property_def const& property, attributes::klass_def const* implementing_klass
- , Context const& context)
-{
- using efl::eolian::grammar::context_find_tag;
- has_property_wrapper_bit r = has_property_wrapper_bit::has_none;
-
- if (blacklist::is_property_blacklisted(property, *implementing_klass, context))
- return r;
-
- bool has_getter = property.getter.is_engaged();
- bool has_setter = property.setter.is_engaged();
-
- bool is_interface = context_find_tag<class_context>(context).current_wrapper_kind == class_context::interface;
- bool is_static = (property.getter.is_engaged() && property.getter->is_static)
- || (has_setter && property.setter->is_static);
- bool is_concrete = context_find_tag<class_context>(context).current_wrapper_kind == class_context::concrete;
-
- if (is_static)
- {
- if (is_interface) return r;
- else if (is_concrete) return r;
- }
-
- // EINA_LOG_ERR("Generating property %s", name_helpers::property_managed_name(property).c_str());
- // C# interface can have only
- if (is_interface)
- {
- has_getter = has_getter && property.getter->scope == attributes::member_scope:: scope_public;
- }
-
- if (!has_getter)
- {
- return r;
- }
-
- if (property.getter->explicit_return_type != attributes::void_)
- {
- return r;
- }
- else if (has_setter)
- {
- if (property.setter->explicit_return_type != attributes::void_)
- has_setter = false; // do not generate setter
- else if (property.setter->keys != property.getter->keys)
- has_setter = false;
- else if (property.setter->values != property.getter->values)
- has_setter = false;
- }
-
- if (is_interface)
- {
- if (property.getter->scope != attributes::member_scope::scope_public)
- return r;
- else if (has_setter && property.setter->scope != attributes::member_scope::scope_public)
- has_setter = false;
- }
-
- if (has_getter)
- r |= has_property_wrapper_bit::has_getter;
- if (has_setter)
- r |= has_property_wrapper_bit::has_setter;
-
- if (property.getter->keys.size() == 1)
- r |= has_property_wrapper_bit::has_indexer;
- else if (property.getter->keys.size() > 1)
- {
- r |= has_property_wrapper_bit::has_indexer;
- r |= has_property_wrapper_bit::has_key_tuple;
- }
-
- if (property.getter->values.size() > 1)
- r |= has_property_wrapper_bit::has_value_tuple;
-
- return r;
-}
-
} // namespace helpers
} // namespace eolian_mono
diff --git a/src/bin/eolian_mono/eolian/mono/klass.hh b/src/bin/eolian_mono/eolian/mono/klass.hh
index 478c6a9c80..9a494ef4c2 100644
--- a/src/bin/eolian_mono/eolian/mono/klass.hh
+++ b/src/bin/eolian_mono/eolian/mono/klass.hh
@@ -29,6 +29,7 @@
#include "name_helpers.hh"
#include "async_function_definition.hh"
#include "function_definition.hh"
+#include "property_definition.hh"
#include "function_registration.hh"
#include "function_declaration.hh"
#include "documentation.hh"
@@ -106,25 +107,21 @@ struct klass
name_helpers::klass_full_concrete_or_interface_name(cls)},
context);
- // Property wrappers
- if (!as_generator(*(interface_property_indexer_definition(cls))).generate(sink, cls.properties, iface_cxt))
- return false;
-
- if(!as_generator(documentation).generate(sink, cls, iface_cxt))
+ if(!as_generator(documentation(1)).generate(sink, cls, iface_cxt))
return false;
// Mark the interface with the proper native Efl_Class* getter
- if(!as_generator(lit("[") << name_helpers::klass_full_native_inherit_name(cls) << "]\n")
+ if(!as_generator(scope_tab << lit("[") << name_helpers::klass_full_native_inherit_name(cls) << "]\n")
.generate(sink, attributes::unused, iface_cxt))
return false;
- if(!as_generator("[Efl.Eo.BindingEntity]\n").generate(sink, attributes::unused, iface_cxt))
+ if(!as_generator(scope_tab << "[Efl.Eo.BindingEntity]\n").generate(sink, attributes::unused, iface_cxt))
return false;
using efl::eolian::grammar::lit;
if(!as_generator
(
- lit("public ") << (is_partial ? "partial ":"")
+ scope_tab << lit("public ") << (is_partial ? "partial ":"")
/*<< class_type*/ << "interface" /*<<*/ " " << string << " : "
)
.generate(sink, name_helpers::klass_interface_name(cls), iface_cxt))
@@ -140,13 +137,33 @@ struct klass
return false;
}
- if(!as_generator("\n" << scope_tab << "Efl.Eo.IWrapper, IDisposable").generate(sink, attributes::unused, iface_cxt))
+ if(!as_generator("\n" << scope_tab(2) << "Efl.Eo.IWrapper, IDisposable").generate(sink, attributes::unused, iface_cxt))
return false;
- if(!as_generator("\n{\n").generate(sink, attributes::unused, iface_cxt))
+ if(!as_generator("\n" << scope_tab << "{\n").generate(sink, attributes::unused, iface_cxt))
return false;
- if(!as_generator(*(function_declaration)).generate(sink, cls.functions, iface_cxt))
+ auto properties = cls.properties;
+ auto functions = cls.functions;
+ functions.erase (std::remove_if (functions.begin(), functions.end()
+ , [&] (attributes::function_def const& f)
+ {
+ auto it = std::find_if (properties.begin(), properties.end()
+ , [&f] (attributes::property_def const& prop)
+ {
+ return (prop.getter && *prop.getter == f)
+ || (prop.setter && *prop.setter == f);
+ });
+ if (it != properties.end())
+ {
+ if (it->getter && *it->getter == f)
+ return property_generate_wrapper_getter (*it, iface_cxt);
+ else if (it->setter && *it->setter == f)
+ return property_generate_wrapper_setter (*it, iface_cxt);
+ }
+ return false;
+ }), functions.end());
+ if(!as_generator(*(function_declaration)).generate(sink, functions, iface_cxt))
return false;
if(!as_generator(*(async_function_declaration)).generate(sink, cls.functions, iface_cxt))
@@ -157,16 +174,19 @@ struct klass
for (auto &&p : cls.parts)
if (!as_generator(
- documentation(1)
+ documentation(2)
<< name_helpers::klass_full_concrete_or_interface_name(p.klass) << " " << utils::capitalize(p.name) << "{ get;}\n"
).generate(sink, p, iface_cxt))
return false;
- if (!as_generator(*(property_wrapper_definition(cls, cls))).generate(sink, cls.properties, iface_cxt))
+ properties.erase(std::remove_if (properties.begin(), properties.end()
+ , [&] (attributes::property_def const& prop)
+ { return !property_generate_wrapper_getter (prop, iface_cxt); }), properties.end());
+ if (!as_generator(*(property_wrapper_definition(cls))).generate(sink, properties, iface_cxt))
return false;
// End of interface declaration
- if(!as_generator("}\n\n").generate(sink, attributes::unused, iface_cxt)) return false;
+ if(!as_generator(scope_tab << "}\n\n").generate(sink, attributes::unused, iface_cxt)) return false;
}
// Events arguments go in the top namespace to avoid the Concrete suffix clutter in interface events.
@@ -197,98 +217,9 @@ struct klass
auto concrete_cxt = context_add_tag(class_context{class_context::concrete,
name_helpers::klass_full_concrete_or_interface_name(cls)},
context);
- auto concrete_name = name_helpers::klass_concrete_name(cls);
- auto interface_name = name_helpers::klass_interface_name(cls);
-
- // We can't make these internal yet as they have methods that are used by
- // other classes that implement the interface.
- if(!as_generator
- (
- documentation
- << "public sealed " << (is_partial ? "partial ":"") << "class " << concrete_name << " :\n"
- << scope_tab << (root ? "Efl.Eo.EoWrapper" : "") << (klass_full_concrete_or_interface_name % "")
- << ",\n" << scope_tab << interface_name
- << *(",\n" << scope_tab << name_helpers::klass_full_concrete_or_interface_name) << "\n"
- << "{\n"
- ).generate(sink, std::make_tuple(cls, inherit_classes, inherit_interfaces), concrete_cxt))
- return false;
-
- if (!generate_fields(sink, cls, concrete_cxt))
- return false;
-
- if (!as_generator
- (
- scope_tab << "/// <summary>Subclasses should override this constructor if they are expected to be instantiated from native code.\n"
- << scope_tab << "/// Do not call this constructor directly.</summary>\n"
- << scope_tab << "/// <param name=\"ch\">Tag struct storing the native handle of the object being constructed.</param>\n"
- << scope_tab << "private " << concrete_name << "(ConstructingHandle ch) : base(ch)\n"
- << scope_tab << "{\n"
- << scope_tab << "}\n\n"
- )
- .generate(sink, attributes::unused, concrete_cxt))
- return false;
-
- if (!as_generator
- (
- scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(concrete_cxt).actual_library_name(cls.filename)
- << ")] internal static extern System.IntPtr\n"
- << scope_tab << scope_tab << name_helpers::klass_get_name(cls) << "();\n\n"
- << scope_tab << "/// <summary>Initializes a new instance of the <see cref=\"" << interface_name << "\"/> class.\n"
- << scope_tab << "/// Internal usage: This is used when interacting with C code and should not be used directly.</summary>\n"
- << scope_tab << "/// <param name=\"wh\">The native pointer to be wrapped.</param>\n"
- << scope_tab << "private " << concrete_name << "(Efl.Eo.WrappingHandle wh) : base(wh)\n"
- << scope_tab << "{\n"
- << scope_tab << "}\n\n"
- )
- .generate(sink, attributes::unused, concrete_cxt))
- return false;
- if (!generate_events(sink, cls, concrete_cxt))
- return false;
-
- if (!as_generator(lit("#pragma warning disable CS0628\n")).generate(sink, attributes::unused, concrete_cxt))
- return false;
-
- // Parts
- if(!as_generator(*(part_definition))
- .generate(sink, cls.parts, concrete_cxt)) return false;
-
- // Concrete function definitions
- auto implemented_methods = helpers::get_all_implementable_methods(cls, concrete_cxt);
- if(!as_generator(*(function_definition))
- .generate(sink, implemented_methods, concrete_cxt)) return false;
-
- // Async wrappers
- if(!as_generator(*(async_function_definition)).generate(sink, implemented_methods, concrete_cxt))
- return false;
-
- // Property wrappers
- if (!as_generator(*(property_wrapper_definition(cls, cls))).generate(sink, cls.properties, concrete_cxt))
- return false;
-
- for (auto&& klass : helpers::non_implemented_interfaces(cls, concrete_cxt))
- {
- attributes::klass_def c(get_klass(klass, cls.unit), cls.unit);
- if (!as_generator(*(property_wrapper_definition(cls, c))).generate(sink, c.properties, concrete_cxt))
- return false;
- }
-
- if (!as_generator(lit("#pragma warning restore CS0628\n")).generate(sink, attributes::unused, concrete_cxt))
- return false;
-
- // Copied from nativeinherit class, used when setting up providers.
- if(!as_generator(
- scope_tab << "private static IntPtr GetEflClassStatic()\n"
- << scope_tab << "{\n"
- << scope_tab << scope_tab << "return " << name_helpers::klass_get_full_name(cls) << "();\n"
- << scope_tab << "}\n\n"
- ).generate(sink, attributes::unused, concrete_cxt))
- return false;
-
- if(!generate_native_inherit_class(sink, cls, change_indentation(indent.inc(), concrete_cxt)))
+ if(!generate_native_inherit_class(sink, cls, change_indentation(indent, concrete_cxt)))
return true;
-
- if(!as_generator("}\n").generate(sink, attributes::unused, concrete_cxt)) return false;
}
// Inheritable class
@@ -301,11 +232,11 @@ struct klass
// Class header
if(!as_generator
(
- documentation
- << "[" << name_helpers::klass_full_native_inherit_name(cls) << "]\n"
- << "[Efl.Eo.BindingEntity]\n"
- << "[SuppressMessage(\"Microsoft.Naming\", \"CA1724:TypeNamesShouldNotMatchNamespaces\")]\n"
- << "public "
+ documentation(1)
+ << scope_tab << "[" << name_helpers::klass_full_native_inherit_name(cls) << "]\n"
+ << scope_tab << "[Efl.Eo.BindingEntity]\n"
+ << scope_tab << "[SuppressMessage(\"Microsoft.Naming\", \"CA1724:TypeNamesShouldNotMatchNamespaces\")]\n"
+ << scope_tab<< "public "
<< (is_partial
? class_type == "class"
? "partial class"
@@ -317,7 +248,7 @@ struct klass
<< (root ? "Efl.Eo.EoWrapper" : "") // ... or root
<< (inherit_interfaces.empty() ? "" : ", ")
<< (klass_full_concrete_or_interface_name % ", ") // interfaces
- << "\n{\n"
+ << "\n" << scope_tab << "{\n"
)
.generate(sink, std::make_tuple(cls, inherit_classes, inherit_interfaces), inherit_cxt))
return false;
@@ -339,7 +270,7 @@ struct klass
// Inherit function definitions
auto implemented_methods = helpers::get_all_implementable_methods(cls, inherit_cxt);
- if(!as_generator(*(function_definition(true)))
+ if(!as_generator(*(function_definition(true, helpers::get_all_implementable_properties(cls, inherit_cxt))))
.generate(sink, implemented_methods, inherit_cxt)) return false;
// Async wrappers
@@ -347,29 +278,29 @@ struct klass
return false;
// Property wrappers
- if (!as_generator(*(property_wrapper_definition(cls, cls))).generate(sink, cls.properties, inherit_cxt))
+ if (!as_generator(*(property_wrapper_definition(cls))).generate(sink, cls.properties, inherit_cxt))
return false;
for (auto&& klass : helpers::non_implemented_interfaces(cls, inherit_cxt))
{
attributes::klass_def c(get_klass(klass, cls.unit), cls.unit);
- if (!as_generator(*(property_wrapper_definition(cls, c))).generate(sink, c.properties, inherit_cxt))
+ if (!as_generator(*(property_wrapper_definition(cls))).generate(sink, c.properties, inherit_cxt))
return false;
}
// Copied from nativeinherit class, used when setting up providers.
if(!as_generator(
- scope_tab << "private static IntPtr GetEflClassStatic()\n"
- << scope_tab << "{\n"
- << scope_tab << scope_tab << "return " << name_helpers::klass_get_full_name(cls) << "();\n"
- << scope_tab << "}\n\n"
+ scope_tab(2) << "private static IntPtr GetEflClassStatic()\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << scope_tab << "return " << name_helpers::klass_get_full_name(cls) << "();\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, attributes::unused, inherit_cxt))
return false;
if(!generate_native_inherit_class(sink, cls, change_indentation(indent.inc(), inherit_cxt)))
return true;
- if(!as_generator("}\n").generate(sink, attributes::unused, inherit_cxt)) return false;
+ if(!as_generator(scope_tab << "}\n").generate(sink, attributes::unused, inherit_cxt)) return false;
}
@@ -397,18 +328,24 @@ struct klass
if (extension_method_stream.tellp() <= 0)
return true;
+ if (!name_helpers::open_namespaces(sink, cls.namespaces, context))
+ return false;
+
if(!as_generator
(lit("#if EFL_BETA\n")
<< "#pragma warning disable CS1591\n" // Disabling warnings as DocFx will hide these classes
- <<"public static class " << (string % "_") << name_helpers::klass_inherit_name(cls)
- << "_ExtensionMethods {\n"
+ << scope_tab << "public static class " << name_helpers::klass_concrete_name(cls)
+ << "Extensions {\n"
<< extension_method_stream.str()
- << "}\n"
+ << scope_tab << "}\n"
<< "#pragma warning restore CS1591\n"
<< "#endif\n")
.generate(sink, cls.namespaces, context))
return false;
+ if (!name_helpers::close_namespaces(sink, cls.namespaces, context))
+ return false;
+
return true;
}
@@ -424,8 +361,10 @@ struct klass
auto native_inherit_name = name_helpers::klass_native_inherit_name(cls);
auto inherit_name = name_helpers::klass_inherit_name(cls);
auto implementable_methods = helpers::get_all_registerable_methods(cls, context);
+ auto implementable_properties = helpers::get_all_implementable_properties(cls, context);
bool root = !helpers::has_regular_ancestor(cls);
- auto const& indent = current_indentation(inative_cxt);
+ bool is_concrete = context_find_tag<class_context>(context).current_wrapper_kind == class_context::concrete;
+ auto const& indent = current_indentation(inative_cxt).inc();
std::string klass_since;
if (!documentation_helpers::generate_since_tag_line(std::back_inserter(klass_since), cls.documentation, indent, context))
@@ -445,16 +384,29 @@ struct klass
<< klass_since
<< indent << "/// </summary>\n"
<< indent << "[EditorBrowsable(EditorBrowsableState.Never)]\n"
- << indent << "internal new class " << native_inherit_name << " : " << (root ? "Efl.Eo.EoWrapper.NativeMethods" : base_name) << "\n"
+ << indent << "internal " << (is_concrete ? "" : "new ") << "class " << native_inherit_name << " : " << (root ? "Efl.Eo.EoWrapper.NativeMethods" : base_name) << "\n"
<< indent << "{\n"
).generate(sink, attributes::unused, inative_cxt))
return false;
- if(implementable_methods.size() >= 1)
+ if(is_concrete)
+ {
+ if (!as_generator
+ (
+ scope_tab(2) << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(context).actual_library_name(cls.filename)
+ << ")] internal static extern System.IntPtr\n"
+ << scope_tab(2) << scope_tab << name_helpers::klass_get_name(cls) << "();\n"
+ )
+ .generate(sink, attributes::unused, inative_cxt))
+ return false;
+ }
+
+ if(!implementable_methods.empty())
{
if(!as_generator(
indent << scope_tab << "private static Efl.Eo.NativeModule Module = new Efl.Eo.NativeModule("
- << context_find_tag<library_context>(context).actual_library_name(cls.filename) << ");\n\n"
+ << context_find_tag<library_context>(context).actual_library_name(cls.filename) << "); // " << implementable_methods.size()
+ << " " << implementable_properties.size() << "\n\n"
).generate(sink, attributes::unused, inative_cxt))
return false;
}
@@ -500,7 +452,7 @@ struct klass
).generate(sink, attributes::unused, inative_cxt))
return false;
- if (!root || context_find_tag<class_context>(context).current_wrapper_kind != class_context::concrete)
+ if (!root || !is_concrete)
if(!as_generator(indent << scope_tab << scope_tab << "descs.AddRange(base.GetEoOps(type, false));\n").generate(sink, attributes::unused, inative_cxt))
return false;
@@ -511,7 +463,7 @@ struct klass
return false;
if (!klass_since.empty())
- klass_since = static_cast<std::string>(scope_tab) + klass_since;
+ klass_since = static_cast<std::string>(scope_tab(2)) + klass_since;
// Attribute getter of the native 'Efl_Class *' handle (for proper inheritance from additional explicit interfaces)
if(!as_generator(
@@ -529,11 +481,18 @@ struct klass
// Native method definitions
if(!as_generator(
indent << scope_tab << "#pragma warning disable CA1707, CS1591, SA1300, SA1600\n\n"
- << *(native_function_definition(cls))
+ << *(native_function_definition(cls, implementable_properties))
<< indent << scope_tab << "#pragma warning restore CA1707, CS1591, SA1300, SA1600\n\n")
.generate(sink, implementable_methods, change_indentation(indent.inc(), inative_cxt))) return false;
- if(!as_generator("}\n").generate(sink, attributes::unused, inative_cxt)) return false;
+ if(!as_generator(
+ indent << scope_tab << "#pragma warning disable CA1707, CS1591, SA1300, SA1600\n\n"
+ << *(native_property_function_definition(cls, cls))
+ << indent << scope_tab << "#pragma warning restore CA1707, CS1591, SA1300, SA1600\n\n")
+ .generate(sink, implementable_properties
+ , change_indentation(indent.inc(), inative_cxt))) return false;
+
+ if(!as_generator(indent << "}\n").generate(sink, attributes::unused, inative_cxt)) return false;
}
return true;
}
@@ -548,21 +507,21 @@ struct klass
auto inherit_name = name_helpers::klass_concrete_name(cls);
if(!as_generator(
- scope_tab << "/// <summary>Pointer to the native class description.</summary>\n"
- << scope_tab << "public override System.IntPtr NativeClass\n"
- << scope_tab << "{\n"
- << scope_tab << scope_tab << "get\n"
- << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab << scope_tab << "if (((object)this).GetType() == typeof(" << inherit_name << "))\n"
- << scope_tab << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab << scope_tab << scope_tab << "return GetEflClassStatic();\n"
- << scope_tab << scope_tab << scope_tab << "}\n"
- << scope_tab << scope_tab << scope_tab << "else\n"
- << scope_tab << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab << scope_tab << scope_tab << "return Efl.Eo.ClassRegister.klassFromType[((object)this).GetType()];\n"
- << scope_tab << scope_tab << scope_tab << "}\n"
- << scope_tab << scope_tab << "}\n"
- << scope_tab << "}\n\n"
+ scope_tab(2) << "/// <summary>Pointer to the native class description.</summary>\n"
+ << scope_tab(2) << "public override System.IntPtr NativeClass\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << scope_tab << "get\n"
+ << scope_tab(2) << scope_tab << "{\n"
+ << scope_tab(2) << scope_tab << scope_tab << "if (((object)this).GetType() == typeof(" << inherit_name << "))\n"
+ << scope_tab(2) << scope_tab << scope_tab << "{\n"
+ << scope_tab(2) << scope_tab << scope_tab << scope_tab << "return GetEflClassStatic();\n"
+ << scope_tab(2) << scope_tab << scope_tab << "}\n"
+ << scope_tab(2) << scope_tab << scope_tab << "else\n"
+ << scope_tab(2) << scope_tab << scope_tab << "{\n"
+ << scope_tab(2) << scope_tab << scope_tab << scope_tab << "return Efl.Eo.ClassRegister.klassFromType[((object)this).GetType()];\n"
+ << scope_tab(2) << scope_tab << scope_tab << "}\n"
+ << scope_tab(2) << scope_tab << "}\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, attributes::unused, context))
return false;
@@ -575,9 +534,9 @@ struct klass
auto inherit_name = name_helpers::klass_concrete_name(cls);
if(!as_generator(
- scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(context).actual_library_name(cls.filename)
+ scope_tab(2) << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(context).actual_library_name(cls.filename)
<< ")] internal static extern System.IntPtr\n"
- << scope_tab << scope_tab << name_helpers::klass_get_name(cls) << "();\n\n"
+ << scope_tab(2) << scope_tab << name_helpers::klass_get_name(cls) << "();\n\n"
).generate(sink, attributes::unused, context))
return false;
@@ -589,40 +548,40 @@ struct klass
});
std::string klass_since;
- if (!documentation_helpers::generate_since_tag_line(std::back_inserter(klass_since), cls.documentation, scope_tab, context))
+ if (!documentation_helpers::generate_since_tag_line(std::back_inserter(klass_since), cls.documentation, scope_tab(2), context))
return false;
// Public (API) constructors
if (!as_generator(
- scope_tab << "/// <summary>Initializes a new instance of the <see cref=\"" << inherit_name << "\"/> class.\n"
+ scope_tab(2) << "/// <summary>Initializes a new instance of the <see cref=\"" << inherit_name << "\"/> class.\n"
<< klass_since
- << scope_tab << "/// </summary>\n"
- << scope_tab << "/// <param name=\"parent\">Parent instance.</param>\n"
- << *(documentation)
+ << scope_tab(2) << "/// </summary>\n"
+ << scope_tab(2) << "/// <param name=\"parent\">Parent instance.</param>\n"
+ << *(documentation(1))
// For constructors with arguments, the parent is also required, as optional parameters can't come before non-optional paramenters.
- << scope_tab << "public " << inherit_name << "(Efl.Object parent" << ((constructors.size() > 0) ? "" : "= null")
+ << scope_tab(2) << "public " << inherit_name << "(Efl.Object parent" << ((constructors.size() > 0) ? "" : "= null")
<< *(", " << constructor_param ) << ") : "
<< "base(" << name_helpers::klass_get_name(cls) << "(), parent)\n"
- << scope_tab << "{\n"
+ << scope_tab(2) << "{\n"
<< (*(scope_tab << scope_tab << constructor_invocation << "\n"))
- << scope_tab << scope_tab << "FinishInstantiation();\n"
- << scope_tab << "}\n\n"
- << scope_tab << "/// <summary>Subclasses should override this constructor if they are expected to be instantiated from native code.\n"
- << scope_tab << "/// Do not call this constructor directly.\n"
+ << scope_tab(2) << scope_tab << "FinishInstantiation();\n"
+ << scope_tab(2) << "}\n\n"
+ << scope_tab(2) << "/// <summary>Subclasses should override this constructor if they are expected to be instantiated from native code.\n"
+ << scope_tab(2) << "/// Do not call this constructor directly.\n"
<< klass_since
- << scope_tab << "/// </summary>\n"
- << scope_tab << "/// <param name=\"ch\">Tag struct storing the native handle of the object being constructed.</param>\n"
- << scope_tab << "protected " << inherit_name << "(ConstructingHandle ch) : base(ch)\n"
- << scope_tab << "{\n"
- << scope_tab << "}\n\n"
- << scope_tab << "/// <summary>Initializes a new instance of the <see cref=\"" << inherit_name << "\"/> class.\n"
- << scope_tab << "/// Internal usage: Constructs an instance from a native pointer. This is used when interacting with C code and should not be used directly.\n"
+ << scope_tab(2) << "/// </summary>\n"
+ << scope_tab(2) << "/// <param name=\"ch\">Tag struct storing the native handle of the object being constructed.</param>\n"
+ << scope_tab(2) << "protected " << inherit_name << "(ConstructingHandle ch) : base(ch)\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << "}\n\n"
+ << scope_tab(2) << "/// <summary>Initializes a new instance of the <see cref=\"" << inherit_name << "\"/> class.\n"
+ << scope_tab(2) << "/// Internal usage: Constructs an instance from a native pointer. This is used when interacting with C code and should not be used directly.\n"
<< klass_since
- << scope_tab << "/// </summary>\n"
- << scope_tab << "/// <param name=\"wh\">The native pointer to be wrapped.</param>\n"
- << scope_tab << "internal " << inherit_name << "(Efl.Eo.WrappingHandle wh) : base(wh)\n"
- << scope_tab << "{\n"
- << scope_tab << "}\n\n"
+ << scope_tab(2) << "/// </summary>\n"
+ << scope_tab(2) << "/// <param name=\"wh\">The native pointer to be wrapped.</param>\n"
+ << scope_tab(2) << "internal " << inherit_name << "(Efl.Eo.WrappingHandle wh) : base(wh)\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, std::make_tuple(constructors, constructors, constructors), context))
return false;
@@ -632,27 +591,27 @@ struct klass
if (cls.type == attributes::class_type::abstract_)
{
if (!as_generator(
- scope_tab << "[Efl.Eo.PrivateNativeClass]\n"
- << scope_tab << "private class " << inherit_name << "Realized : " << inherit_name << "\n"
- << scope_tab << "{\n"
- << scope_tab << scope_tab << "private " << inherit_name << "Realized(Efl.Eo.WrappingHandle wh) : base(wh)\n"
- << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab << "}\n"
- << scope_tab << "}\n"
+ scope_tab(2) << "[Efl.Eo.PrivateNativeClass]\n"
+ << scope_tab(2) << "private class " << inherit_name << "Realized : " << inherit_name << "\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << scope_tab << "private " << inherit_name << "Realized(Efl.Eo.WrappingHandle wh) : base(wh)\n"
+ << scope_tab(2) << scope_tab << "{\n"
+ << scope_tab(2) << scope_tab << "}\n"
+ << scope_tab(2) << "}\n"
).generate(sink, attributes::unused, context))
return false;
}
return as_generator(
- scope_tab << "/// <summary>Initializes a new instance of the <see cref=\"" << inherit_name << "\"/> class.\n"
- << scope_tab << "/// Internal usage: Constructor to forward the wrapper initialization to the root class that interfaces with native code. Should not be used directly.\n"
+ scope_tab(2) << "/// <summary>Initializes a new instance of the <see cref=\"" << inherit_name << "\"/> class.\n"
+ << scope_tab(2) << "/// Internal usage: Constructor to forward the wrapper initialization to the root class that interfaces with native code. Should not be used directly.\n"
<< klass_since
- << scope_tab << "/// </summary>\n"
- << scope_tab << "/// <param name=\"baseKlass\">The pointer to the base native Eo class.</param>\n"
- << scope_tab << "/// <param name=\"parent\">The Efl.Object parent of this instance.</param>\n"
- << scope_tab << "protected " << inherit_name << "(IntPtr baseKlass, Efl.Object parent) : base(baseKlass, parent)\n"
- << scope_tab << "{\n"
- << scope_tab << "}\n\n"
+ << scope_tab(2) << "/// </summary>\n"
+ << scope_tab(2) << "/// <param name=\"baseKlass\">The pointer to the base native Eo class.</param>\n"
+ << scope_tab(2) << "/// <param name=\"parent\">The Efl.Object parent of this instance.</param>\n"
+ << scope_tab(2) << "protected " << inherit_name << "(IntPtr baseKlass, Efl.Object parent) : base(baseKlass, parent)\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, attributes::unused, context);
}
diff --git a/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh b/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh
index a9fc45d7da..527771959f 100644
--- a/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh
+++ b/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh
@@ -28,8 +28,9 @@ namespace eolian_mono {
namespace eina = efl::eina;
namespace detail {
-
+
template <typename OutputIterator, typename Context>
+
struct marshall_annotation_visitor_generate
{
mutable OutputIterator sink;
@@ -41,7 +42,7 @@ struct marshall_annotation_visitor_generate
typedef marshall_type_visitor_generate<OutputIterator, Context> visitor_type;
typedef bool result_type;
-
+
bool operator()(attributes::regular_type_def const& regular) const
{
using attributes::regular_type_def;
@@ -60,7 +61,13 @@ struct marshall_annotation_visitor_generate
{"string", true, [] {
return "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))";
}},
- {"string", false, [] {
+ {"string", false, [this] {
+ auto is_native_to_managed = false;
+ if constexpr (efl::eolian::grammar::tag_check<direction_context, Context>::value)
+ is_native_to_managed = context_find_tag<direction_context>(*context).current_direction == direction_context::native_to_managed;
+
+ if((is_out || is_return) && is_native_to_managed)
+ return "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringOutMarshaler))";
return "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringKeepOwnershipMarshaler))";
}},
{"mstring", true, [] {
@@ -98,7 +105,13 @@ struct marshall_annotation_visitor_generate
{"string", true, [] {
return "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))";
}},
- {"string", false, [] {
+ {"string", false, [this] {
+ auto is_native_to_managed = false;
+ if constexpr (efl::eolian::grammar::tag_check<direction_context, Context>::value)
+ is_native_to_managed = context_find_tag<direction_context>(*context).current_direction == direction_context::native_to_managed;
+
+ if((is_out || is_return) && is_native_to_managed)
+ return "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringOutMarshaler))";
return "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringKeepOwnershipMarshaler))";
}},
{"mstring", true, [] {
diff --git a/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh b/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh
index 4d1e188997..60b495ea39 100644
--- a/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh
+++ b/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh
@@ -129,7 +129,7 @@ struct marshall_type_visitor_generate
, {"event", nullptr, [&]
{
regular_type_def r = regular;
- r.base_type = "Efl.Event.NativeStruct";
+ r.base_type = "Efl.Event";
r.namespaces.clear();
return r;
}}
@@ -190,7 +190,7 @@ struct marshall_type_visitor_generate
{
if ((is_out || is_return) && is_ptr)
return as_generator("System.IntPtr").generate(sink, attributes::unused, *context);
- return as_generator(string << ".NativeStruct")
+ return as_generator(string)
.generate(sink, name_helpers::type_full_managed_name(regular), *context);
}
else if (eina::optional<bool> b = type_match::get_match
diff --git a/src/bin/eolian_mono/eolian/mono/name_helpers.hh b/src/bin/eolian_mono/eolian/mono/name_helpers.hh
index bf0abb7863..bc3f278c91 100644
--- a/src/bin/eolian_mono/eolian/mono/name_helpers.hh
+++ b/src/bin/eolian_mono/eolian/mono/name_helpers.hh
@@ -71,6 +71,7 @@ inline std::string escape_keyword(std::string const& name)
|| is_equal(name, "lock")
|| is_equal(name, "event")
|| is_equal(name, "in")
+ || is_equal(name, "out")
|| is_equal(name, "object")
|| is_equal(name, "interface")
|| is_equal(name, "string")
@@ -229,6 +230,12 @@ inline std::string managed_namespace(std::string const& ns)
return escape_keyword(utils::remove_all(ns, '_'));
}
+inline std::string managed_name(std::string const& name, char separator='_')
+{
+ auto tokens = utils::split(name, separator);
+ return utils::to_pascal_case(tokens);
+}
+
inline std::string managed_method_name(attributes::function_def const& f)
{
std::vector<std::string> names = utils::split(f.name, '_');
@@ -244,18 +251,12 @@ inline std::string managed_method_name(attributes::function_def const& f)
// Avoid clashing with System.Object.GetType
if (candidate == "GetType" || candidate == "SetType")
{
- candidate.insert(3, f.klass.eolian_name);
+ candidate.insert(3, managed_name(f.klass.eolian_name));
}
return candidate;
}
-inline std::string managed_name(std::string const& name, char separator='_')
-{
- auto tokens = utils::split(name, separator);
- return utils::to_pascal_case(tokens);
-}
-
inline std::string full_managed_name(std::string const& name)
{
std::stringstream ss;
@@ -331,7 +332,30 @@ inline std::string enum_field_managed_name(std::string name)
inline std::string to_field_name(std::string const& in)
{
- return utils::capitalize(in);
+ std::vector<std::string> names = utils::split(in, '_');
+ return utils::to_camel_case(names);
+}
+
+
+
+template<typename T>
+inline std::string property_managed_name(T const& klass, std::string const& name)
+{
+ auto names = utils::split(name, '_');
+ // No need to escape keyword here as it will be capitalized and already
+ // namespaced inside the owner class.
+ auto managed_name = utils::to_pascal_case(names);
+ auto managed_klass_name = klass_concrete_or_interface_name(klass);
+
+ if (managed_name == "Type")
+ managed_name = managed_klass_name + managed_name;
+
+ return managed_name;
+}
+
+inline std::string property_managed_name(attributes::property_def const& property)
+{
+ return property_managed_name(property.klass, property.name);
}
inline std::string managed_part_name(attributes::part_def const& part)
@@ -377,9 +401,7 @@ struct klass_full_interface_name_generator
template<typename T>
inline std::string klass_concrete_name(T const& klass)
{
- return utils::remove_all(klass.eolian_name, '_') + ((klass.type == attributes::class_type::mixin
- || klass.type == attributes::class_type::interface_)
- ? "Concrete" : "");
+ return utils::remove_all(klass.eolian_name, '_');
}
template<typename T>
@@ -445,14 +467,19 @@ inline std::string klass_inherit_name(T const& klass)
}
template<typename T>
-inline std::string klass_native_inherit_name(EINA_UNUSED T const& klass)
+inline std::string klass_native_inherit_name(T const& klass)
{
- return "NativeMethods";
+ return ((klass.type == attributes::class_type::mixin
+ || klass.type == attributes::class_type::interface_) ? klass_interface_name(klass) : "") + "NativeMethods";
}
template<typename T>
inline std::string klass_full_native_inherit_name(T const& klass)
{
+ if(klass.type == attributes::class_type::mixin
+ || klass.type == attributes::class_type::interface_)
+ return join_namespaces(klass.namespaces, '.', managed_namespace) + klass_native_inherit_name(klass);
+
return klass_full_concrete_name(klass) + "." + klass_native_inherit_name(klass);
}
@@ -465,6 +492,10 @@ inline std::string klass_get_name(T const& clsname)
template<typename T>
inline std::string klass_get_full_name(T const& clsname)
{
+ if(clsname.type == attributes::class_type::mixin
+ || clsname.type == attributes::class_type::interface_)
+ return klass_get_name(clsname);
+
return klass_full_concrete_name(clsname) + "." + klass_get_name(clsname);
}
@@ -490,45 +521,6 @@ inline std::string translate_inherited_event_name(const attributes::event_def &e
return join_namespaces(klass.namespaces, '_') + klass_interface_name(klass) + "_" + managed_event_name(evt.name);
}
-// Properties
-
-template<typename T>
-inline std::string property_managed_name(T const& klass, std::string const& name)
-{
- auto names = utils::split(name, '_');
- // No need to escape keyword here as it will be capitalized and already
- // namespaced inside the owner class.
- auto managed_name = utils::to_pascal_case(names);
- auto managed_klass_name = klass_concrete_or_interface_name(klass);
-
- if (managed_name == "Type")
- managed_name = managed_klass_name + managed_name;
-
- return managed_name;
-}
-
-inline std::string property_managed_name(attributes::property_def const& property)
-{
- return property_managed_name(property.klass, property.name);
-}
-
-inline std::string property_concrete_indexer_name(attributes::property_def const& property)
-{
- return property_managed_name(property) + "Indexer";
-}
-
-template<typename T>
-inline std::string property_interface_indexer_name(attributes::property_def const& property, T const& current_klass)
-{
- return name_helpers::klass_full_interface_name(current_klass) + property_concrete_indexer_name(property);
-}
-
-template<typename T>
-inline std::string property_interface_indexer_short_name(attributes::property_def const& property, T const& current_klass)
-{
- return name_helpers::klass_interface_name(current_klass) + property_concrete_indexer_name(property);
-}
-
// Open/close namespaces
template<typename OutputIterator, typename Context>
bool open_namespaces(OutputIterator sink, std::vector<std::string> namespaces, Context const& context)
@@ -593,6 +585,16 @@ struct struct_field_name_generator
}
} const struct_field_name {};
+// Property names //
+struct struct_property_name_generator
+{
+ template <typename OutputIterator, typename Context>
+ bool generate(OutputIterator sink, attributes::struct_field_def const& field, Context const& context) const
+ {
+ return as_generator(string).generate(sink, name_helpers::managed_name(field.name), context);
+ }
+} const struct_property_name {};
+
} // namespace name_helpers
} // namespace eolian_mono
@@ -625,12 +627,19 @@ struct is_eager_generator<eolian_mono::name_helpers::struct_field_name_generator
template <>
struct is_generator< ::eolian_mono::name_helpers::struct_field_name_generator> : std::true_type {};
+template <>
+struct is_eager_generator<eolian_mono::name_helpers::struct_property_name_generator> : std::true_type {};
+template <>
+struct is_generator< ::eolian_mono::name_helpers::struct_property_name_generator> : std::true_type {};
+
namespace type_traits {
template <>
struct attributes_needed<struct ::eolian_mono::name_helpers::klass_full_concrete_or_interface_name_generator> : std::integral_constant<int, 1> {};
template <>
struct attributes_needed< ::eolian_mono::name_helpers::struct_field_name_generator> : std::integral_constant<int, 1> {};
+template <>
+struct attributes_needed< ::eolian_mono::name_helpers::struct_property_name_generator> : std::integral_constant<int, 1> {};
}
diff --git a/src/bin/eolian_mono/eolian/mono/parameter.hh b/src/bin/eolian_mono/eolian/mono/parameter.hh
index 4af5fe2aef..59faa0d493 100644
--- a/src/bin/eolian_mono/eolian/mono/parameter.hh
+++ b/src/bin/eolian_mono/eolian/mono/parameter.hh
@@ -34,6 +34,7 @@ namespace eolian_mono {
struct argument_generator;
struct argument_invocation_generator;
struct native_argument_invocation_generator;
+ struct native_tuple_argument_invocation_generator;
struct native_convert_in_variable_generator;
struct convert_in_variable_generator;
struct native_convert_out_variable_generator;
@@ -65,7 +66,7 @@ struct is_generator< ::eolian_mono::parameter_generator> : std::true_type {};
namespace type_traits {
template <>
-struct attributes_needed< ::eolian_mono::parameter_generator> : std::integral_constant<int, 1> {};
+struct attributes_needed< ::eolian_mono::parameter_generator> : std::integral_constant<int, 1> {};
}
template <>
@@ -75,9 +76,9 @@ struct is_generator< ::eolian_mono::marshall_parameter_generator> : std::true_ty
namespace type_traits {
template <>
-struct attributes_needed< ::eolian_mono::marshall_parameter_generator> : std::integral_constant<int, 1> {};
+struct attributes_needed< ::eolian_mono::marshall_parameter_generator> : std::integral_constant<int, 1> {};
}
-
+
template <>
struct is_eager_generator< ::eolian_mono::argument_generator> : std::true_type {};
template <>
@@ -85,9 +86,9 @@ struct is_generator< ::eolian_mono::argument_generator> : std::true_type {};
namespace type_traits {
template <>
-struct attributes_needed< ::eolian_mono::argument_generator> : std::integral_constant<int, 1> {};
+struct attributes_needed< ::eolian_mono::argument_generator> : std::integral_constant<int, 1> {};
}
-
+
template <>
struct is_eager_generator< ::eolian_mono::argument_invocation_generator> : std::true_type {};
template <>
@@ -109,6 +110,16 @@ struct attributes_needed< ::eolian_mono::native_argument_invocation_generator> :
}
template <>
+struct is_eager_generator< ::eolian_mono::native_tuple_argument_invocation_generator> : std::true_type {};
+template <>
+struct is_generator< ::eolian_mono::native_tuple_argument_invocation_generator> : std::true_type {};
+
+namespace type_traits {
+template <>
+struct attributes_needed< ::eolian_mono::native_tuple_argument_invocation_generator> : std::integral_constant<int, 1> {};
+}
+
+template <>
struct is_eager_generator< ::eolian_mono::native_convert_in_variable_generator> : std::true_type {};
template <>
struct is_generator< ::eolian_mono::native_convert_in_variable_generator> : std::true_type {};
@@ -552,6 +563,28 @@ struct native_argument_invocation_generator
}
} const native_argument_invocation {};
+struct native_tuple_argument_invocation_generator
+{
+ template <typename OutputIterator, typename Context>
+ bool generate(OutputIterator sink, attributes::parameter_def const& param, Context const& context) const
+ {
+ std::string arg;// = direction_modifier(param);
+
+ if (param_should_use_out_var(param, true))
+ arg += out_variable_name(param.param_name);
+ else if (param_should_use_in_var(param, true))
+ arg += in_variable_name(param.param_name);
+ else if (param.type.original_type.visit(is_fp_visitor{}))
+ {
+ arg += escape_keyword(param.param_name) + "_wrapper.ManagedCb";
+ }
+ else // FIXME Wrap data and C function pointers into some kind of structure.
+ arg += escape_keyword(param.param_name);
+
+ return as_generator(arg).generate(sink, attributes::unused, context);
+ }
+} const native_tuple_argument_invocation {};
+
// Generates the correct parameter name when invoking a function
struct argument_invocation_generator
{
@@ -625,20 +658,27 @@ struct native_convert_in_variable_generator
<< ");\n"
).generate(sink, std::make_tuple(in_variable_name(param.param_name), param.type), context);
}
- else if (param.type.c_type == "Eina_Array *" || param.type.c_type == "const Eina_Array *"
- || param.type.c_type == "Eina_List *" || param.type.c_type == "const Eina_List *"
- )
+ else if (param.type.c_type == "Eina_List *" || param.type.c_type == "const Eina_List *")
{
attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
if (!complex)
return false;
return as_generator(
- "var " << string << " = new " << type << "(" << escape_keyword(param.param_name)
- << ", " << (param.type.has_own ? "true" : "false")
- << ", " << (complex->subtypes.front().is_value_type || complex->subtypes.front().has_own ? "true" : "false")
+ "var " << string << " = Efl.Eo.Globals.NativeListTo" << type << "(" << escape_keyword(param.param_name)
<< ");\n"
).generate(sink, std::make_tuple(in_variable_name(param.param_name), param.type), context);
}
+ else if (param.type.c_type == "Eina_Array *" || param.type.c_type == "const Eina_Array *")
+ {
+ attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
+ if (!complex)
+ return false;
+ return as_generator(
+ "var " << string << " = Efl.Eo.Globals.NativeArrayTo" << type << "(" << escape_keyword(param.param_name)
+ << ");\n"
+ ).generate(sink, std::make_tuple(in_variable_name(param.param_name), param.type), context);
+ }
+
else if (param.type.c_type == "Eina_Iterator *" || param.type.c_type == "const Eina_Iterator *")
{
attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
@@ -693,10 +733,10 @@ struct convert_in_variable_generator
}
else if (param.type.c_type == "Eina_Binbuf *" || param.type.c_type == "const Eina_Binbuf *")
{
- auto var_name = in_variable_name(param.param_name);
if (!as_generator(
- "var " << string << " = " << escape_keyword(param.param_name) << ".Handle;\n"
- ).generate(sink, var_name, context))
+ "Contract.Requires(" << string << " != null, nameof(" << string << "));\n"
+ << scope_tab(2) << "var " << string << " = " << string << ".Handle;\n"
+ ).generate(sink, std::make_tuple(escape_keyword(param.param_name), escape_keyword(param.param_name), in_variable_name(param.param_name), escape_keyword(param.param_name)), context))
return false;
if (param.type.has_own)
{
@@ -710,10 +750,10 @@ struct convert_in_variable_generator
attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
if (!complex || complex->subtypes.size() != 2)
return false;
- auto var_name = in_variable_name(param.param_name);
if (!as_generator(
- "var " << string << " = " << escape_keyword(param.param_name) << ".Handle;\n"
- ).generate(sink, var_name, context))
+ "Contract.Requires(" << string << " != null, nameof(" << string << "));\n"
+ << scope_tab(2) << "var " << string << " = " << string << ".Handle;\n"
+ ).generate(sink, std::make_tuple(escape_keyword(param.param_name), escape_keyword(param.param_name), in_variable_name(param.param_name), escape_keyword(param.param_name)), context))
return false;
if (param.type.has_own && !as_generator(
escape_keyword(param.param_name) << ".SetOwn(false);\n"
@@ -729,27 +769,25 @@ struct convert_in_variable_generator
).generate(sink, attributes::unused, context))
return false;
}
- else if (param.type.c_type == "Eina_Array *" || param.type.c_type == "const Eina_Array *"
- || param.type.c_type == "Eina_List *" || param.type.c_type == "const Eina_List *"
- )
+ else if (param.type.c_type == "Eina_Array *" || param.type.c_type == "const Eina_Array *")
{
attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
if (!complex)
return false;
- auto var_name = in_variable_name(param.param_name);
if (!as_generator(
- "var " << string << " = " << escape_keyword(param.param_name) << ".Handle;\n"
- ).generate(sink, var_name, context))
+ "var " << string << " = " << "Efl.Eo.Globals.IListToNativeArray(" << escape_keyword(param.param_name) << ", " << (param.type.has_own ? "true" : "false") << ");\n"
+ ).generate(sink, in_variable_name(param.param_name), context))
return false;
- if (param.type.has_own && !as_generator(
- escape_keyword(param.param_name) << ".Own = false;\n"
- ).generate(sink, attributes::unused, context))
+ }
+ else if (param.type.c_type == "Eina_List *" || param.type.c_type == "const Eina_List *")
+ {
+ attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
+ if (!complex)
return false;
-
- if ((param.type.has_own && (complex->subtypes.front().is_value_type || complex->subtypes.front().has_own))
- && !as_generator(
- escape_keyword(param.param_name) << ".OwnContent = false;\n"
- ).generate(sink, attributes::unused, context))
+ auto var_name = in_variable_name(param.param_name);
+ if (!as_generator(
+ "var " << string << " = " << "Efl.Eo.Globals.IListToNativeList(" << escape_keyword(param.param_name) << ", " << (param.type.has_own ? "true" : "false") << ");\n"
+ ).generate(sink, var_name, context))
return false;
}
else if (param.type.c_type == "Eina_Iterator *" || param.type.c_type == "const Eina_Iterator *")
@@ -777,8 +815,9 @@ struct convert_in_variable_generator
else if (param.type.c_type == "Eina_Value")
{
return as_generator(
- "var " << string << " = " << string << ".GetNative();\n"
- ).generate(sink, std::make_tuple(in_variable_name(param.param_name), param.param_name), context);
+ "Contract.Requires(" << string << " != null, nameof(" << string << "));\n"
+ "var " << string << " = " << string << ".GetNative();\n"
+ ).generate(sink, std::make_tuple(param.param_name, param.param_name, in_variable_name(param.param_name), param.param_name), context);
}
return true;
}
@@ -996,7 +1035,17 @@ struct convert_out_assign_generator
|| param_is_acceptable(param, "Eina_Array *", !WANT_OWN, WANT_OUT)
|| param_is_acceptable(param, "const Eina_Array *", WANT_OWN, WANT_OUT)
|| param_is_acceptable(param, "const Eina_Array *", !WANT_OWN, WANT_OUT)
- || param_is_acceptable(param, "Eina_List *", WANT_OWN, WANT_OUT)
+ )
+ {
+ attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
+ if (!complex)
+ return false;
+ return as_generator(
+ string << " = Efl.Eo.Globals.NativeArrayTo" << type << "(" << string
+ << ");\n"
+ ).generate(sink, std::make_tuple(escape_keyword(param.param_name), param.type, out_variable_name(param.param_name)), context);
+ }
+ else if (param_is_acceptable(param, "Eina_List *", WANT_OWN, WANT_OUT)
|| param_is_acceptable(param, "Eina_List *", !WANT_OWN, WANT_OUT)
|| param_is_acceptable(param, "const Eina_List *", WANT_OWN, WANT_OUT)
|| param_is_acceptable(param, "const Eina_List *", !WANT_OWN, WANT_OUT)
@@ -1006,9 +1055,7 @@ struct convert_out_assign_generator
if (!complex)
return false;
return as_generator(
- string << " = new " << type << "(" << string
- << ", " << (param.type.has_own ? "true" : "false")
- << ", " << (param.type.has_own && (complex->subtypes.front().is_value_type || complex->subtypes.front().has_own) ? "true" : "false")
+ string << " = Efl.Eo.Globals.NativeListTo" << type << "(" << string
<< ");\n"
).generate(sink, std::make_tuple(escape_keyword(param.param_name), param.type, out_variable_name(param.param_name)), context);
}
@@ -1081,6 +1128,17 @@ struct convert_in_ptr_assign_generator
string << " = " << in_variable_name(param.param_name) << ";\n"
).generate(sink, escape_keyword(param.param_name), context);
}
+ else if (param_is_acceptable(param, "Eina_Array *", WANT_OWN, !WANT_OUT)
+ || param_is_acceptable(param, "Eina_Array *", !WANT_OWN, !WANT_OUT)
+ || param_is_acceptable(param, "const Eina_Array *", WANT_OWN, !WANT_OUT)
+ || param_is_acceptable(param, "const Eina_Array *", !WANT_OWN, !WANT_OUT)
+ )
+ {
+ return as_generator(
+ scope_tab(2) << lit("Efl.Eo.Globals.UpdateListFromNativeArray(") << escape_keyword(param.param_name) << ", " << in_variable_name(param.param_name) << ");\n"
+ ).generate(sink, attributes::unused, context);
+ }
+
return true;
}
@@ -1138,17 +1196,23 @@ struct convert_return_generator
.generate(sink, ret_type, context))
return false;
}
- else if (ret_type.c_type == "Eina_Array *" || ret_type.c_type == "const Eina_Array *"
- || ret_type.c_type == "Eina_List *" || ret_type.c_type == "const Eina_List *"
- )
+ else if (ret_type.c_type == "Eina_Array *" || ret_type.c_type == "const Eina_Array *")
{
attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&ret_type.original_type);
if (!complex)
return false;
- if (!as_generator("return new " << type << "(_ret_var, " << std::string{ret_type.has_own ? "true" : "false"}
- << ", " << (ret_type.has_own && (complex->subtypes.front().is_value_type || complex->subtypes.front().has_own) ? "true" : "false")
- << ");\n")
- .generate(sink, ret_type, context))
+
+ if (!as_generator("return Efl.Eo.Globals.NativeArrayTo" << type << "(_ret_var);")
+ .generate(sink, ret_type, context))
+ return false;
+ }
+ else if (ret_type.c_type == "Eina_List *" || ret_type.c_type == "const Eina_List *")
+ {
+ attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&ret_type.original_type);
+ if (!complex)
+ return false;
+ if (!as_generator("return Efl.Eo.Globals.NativeListTo" << type << "(_ret_var);")
+ .generate(sink, ret_type, context))
return false;
}
else if (ret_type.c_type == "Eina_Accessor *" || ret_type.c_type == "const Eina_Accessor *")
@@ -1271,30 +1335,30 @@ struct native_convert_out_assign_generator
else if (param_is_acceptable(param, "Eina_Array *", WANT_OWN, WANT_OUT)
|| param_is_acceptable(param, "Eina_Array *", !WANT_OWN, WANT_OUT)
|| param_is_acceptable(param, "const Eina_Array *", WANT_OWN, WANT_OUT)
- || param_is_acceptable(param, "const Eina_Array *", !WANT_OWN, WANT_OUT)
- || param_is_acceptable(param, "Eina_List *", WANT_OWN, WANT_OUT)
- || param_is_acceptable(param, "Eina_List *", !WANT_OWN, WANT_OUT)
- || param_is_acceptable(param, "const Eina_List *", WANT_OWN, WANT_OUT)
- || param_is_acceptable(param, "const Eina_List *", !WANT_OWN, WANT_OUT)
- )
+ || param_is_acceptable(param, "const Eina_Array *", !WANT_OWN, WANT_OUT))
{
attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
if (!complex)
return false;
auto outvar = out_variable_name(param.param_name);
if (!as_generator(
- string << " = " << string << ".Handle;\n"
+ string << " = Efl.Eo.Globals.IListToNativeArray(" << string << ", " << (param.type.has_own ? "true" : "false")<< ");\n"
).generate(sink, std::make_tuple(escape_keyword(param.param_name), outvar), context))
return false;
- if (param.type.has_own && !as_generator(
- string << ".Own = false;\n"
- ).generate(sink, outvar, context))
+ }
+ else if (param_is_acceptable(param, "Eina_List *", WANT_OWN, WANT_OUT)
+ || param_is_acceptable(param, "Eina_List *", !WANT_OWN, WANT_OUT)
+ || param_is_acceptable(param, "const Eina_List *", WANT_OWN, WANT_OUT)
+ || param_is_acceptable(param, "const Eina_List *", !WANT_OWN, WANT_OUT))
+ {
+ attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&param.type.original_type);
+ if (!complex)
return false;
- if ((param.type.has_own && (complex->subtypes.front().is_value_type && complex->subtypes.front().has_own))
- && !as_generator(
- string << ".OwnContent = false;\n"
- ).generate(sink, outvar, context))
+ auto outvar = out_variable_name(param.param_name);
+ if (!as_generator(
+ string << " = Efl.Eo.Globals.IListToNativeList(" << string << ", " << (param.type.has_own ? "true" : "false")<<");\n"
+ ).generate(sink, std::make_tuple(escape_keyword(param.param_name), outvar), context))
return false;
}
else if (param_is_acceptable(param, "Eina_Accessor *", WANT_OWN, WANT_OUT)
@@ -1436,18 +1500,22 @@ struct native_convert_return_generator
return as_generator("return _ret_var.Handle;")
.generate(sink, attributes::unused, context);
}
- else if (ret_type.c_type == "Eina_Array *" || ret_type.c_type == "const Eina_Array *"
- || ret_type.c_type == "Eina_List *" || ret_type.c_type == "const Eina_List *"
- )
+ else if (ret_type.c_type == "Eina_Array *" || ret_type.c_type == "const Eina_Array *")
{
attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&ret_type.original_type);
if (!complex)
return false;
- if (ret_type.has_own && !as_generator("_ret_var.Own = false; ")
- .generate(sink, attributes::unused, context))
+
+ return as_generator(lit("return Efl.Eo.Globals.IListToNativeArray(_ret_var, ") << (ret_type.has_own ? "true" : "false") << ");")
+ .generate(sink, attributes::unused, context);
+ }
+ else if (ret_type.c_type == "Eina_List *" || ret_type.c_type == "const Eina_List *")
+ {
+ attributes::complex_type_def const* complex = efl::eina::get<attributes::complex_type_def>(&ret_type.original_type);
+ if (!complex)
return false;
- return as_generator("return _ret_var.Handle;")
+ return as_generator(lit("return Efl.Eo.Globals.IListToNativeList(_ret_var, ") << (ret_type.has_own ? "true" : "false") << ");")
.generate(sink, attributes::unused, context);
}
else if (ret_type.c_type == "Eina_Accessor *" || ret_type.c_type == "const Eina_Accessor *")
@@ -1553,7 +1621,7 @@ struct native_convert_function_pointer_generator
struct constructor_parameter_name_generator
{
-
+
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::parameter_def const& param, Context const& context) const
{
@@ -1609,11 +1677,11 @@ struct constructor_invocation_generator
{
auto params = ctor.function.parameters;
if (!as_generator(
- "if (" <<
+ scope_tab << "if (" <<
(efl::eolian::grammar::attribute_reorder<-1>
("Efl.Eo.Globals.ParamHelperCheck(" << constructor_parameter_name(ctor) << ")") % " || ") << ")\n"
- << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab << scope_tab << name_helpers::managed_method_name(ctor.function) << "("
+ << scope_tab(2) << scope_tab << "{\n"
+ << scope_tab(2) << scope_tab << scope_tab << name_helpers::managed_method_name(ctor.function) << "("
).generate(sink, params, context))
return false;
@@ -1630,7 +1698,7 @@ struct constructor_invocation_generator
if (!as_generator(
");\n"
- << scope_tab << scope_tab << "}\n").generate(sink, attributes::unused, context))
+ << scope_tab(2) << scope_tab << "}\n").generate(sink, attributes::unused, context))
return false;
return true;
}
diff --git a/src/bin/eolian_mono/eolian/mono/part_definition.hh b/src/bin/eolian_mono/eolian/mono/part_definition.hh
index 0b8dece50c..4facf27209 100644
--- a/src/bin/eolian_mono/eolian/mono/part_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/part_definition.hh
@@ -37,14 +37,14 @@ struct part_definition_generator
return true;
auto part_klass_name = name_helpers::klass_full_concrete_or_interface_name(part.klass);
- return as_generator(documentation(1)
- << scope_tab << "public " << part_klass_name << " " << name_helpers::managed_part_name(part) << "\n"
- << scope_tab << "{\n"
- << scope_tab << scope_tab << "get\n"
- << scope_tab << scope_tab << "{\n"
- << scope_tab << scope_tab << scope_tab << "return GetPart(\"" << part.name << "\") as " << part_klass_name << ";\n"
- << scope_tab << scope_tab << "}\n"
- << scope_tab << "}\n"
+ return as_generator(documentation(2)
+ << scope_tab(2) << "public " << part_klass_name << " " << name_helpers::managed_part_name(part) << "\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << scope_tab << "get\n"
+ << scope_tab(2) << scope_tab << "{\n"
+ << scope_tab(2) << scope_tab << scope_tab << "return GetPart(\"" << part.name << "\") as " << part_klass_name << ";\n"
+ << scope_tab(2) << scope_tab << "}\n"
+ << scope_tab(2) << "}\n"
).generate(sink, part.documentation, context);
}
@@ -70,12 +70,12 @@ struct part_extension_method_definition_generator
bindableClass = "Efl.BindableFactoryPart";
if (!as_generator(
- scope_tab << "public static " << bindableClass << "<" << part_klass_name << "> " << name_helpers::managed_part_name(part) << "<T>(this Efl.Ui.ItemFactory<T> fac, Efl.Csharp.ExtensionTag<"
+ scope_tab(2) << "public static " << bindableClass << "<" << part_klass_name << "> " << name_helpers::managed_part_name(part) << "<T>(this Efl.Ui.ItemFactory<T> fac, Efl.Csharp.ExtensionTag<"
<< name_helpers::klass_full_concrete_or_interface_name(cls)
<< ", T> x=null) where T : " << name_helpers::klass_full_concrete_or_interface_name(cls) << "\n"
- << scope_tab << "{\n"
- << scope_tab << scope_tab << "return new " << bindableClass << "<" << part_klass_name << ">(\"" << part.name << "\", fac);\n"
- << scope_tab << "}\n\n"
+ << scope_tab(2) << "{\n"
+ << scope_tab(2) << scope_tab << "return new " << bindableClass << "<" << part_klass_name << ">(\"" << part.name << "\", fac);\n"
+ << scope_tab(2) << "}\n\n"
).generate(sink, attributes::unused, context))
return false;
diff --git a/src/bin/eolian_mono/eolian/mono/property_definition.hh b/src/bin/eolian_mono/eolian/mono/property_definition.hh
new file mode 100644
index 0000000000..827454fd10
--- /dev/null
+++ b/src/bin/eolian_mono/eolian/mono/property_definition.hh
@@ -0,0 +1,390 @@
+/*
+ * Copyright 2019 by its authors. See AUTHORS.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef EOLIAN_MONO_PROPERTY_DEFINITION_HH
+#define EOLIAN_MONO_PROPERTY_DEFINITION_HH
+
+#include "grammar/generator.hpp"
+#include "grammar/klass_def.hpp"
+
+#include "grammar/indentation.hpp"
+#include "grammar/list.hpp"
+#include "grammar/alternative.hpp"
+#include "type.hh"
+#include "parameter.hh"
+#include "name_helpers.hh"
+#include "using_decl.hh"
+#include "blacklist.hh"
+
+#include <eina_variant.hh>
+
+namespace eolian_mono {
+
+struct compare_get_and_set_value_type
+{
+ inline bool operator () (attributes::parameter_def const& get, attributes::parameter_def const& set) const;
+ inline bool operator () (attributes::type_def const& get, attributes::type_def const& set) const;
+};
+
+struct compare_get_and_set_value_type_overload
+{
+ template <typename T, typename U>
+ bool operator()(T const& /*left*/, U const& /*right*/) const
+ {
+ return false;
+ }
+ bool operator()(attributes::regular_type_def const& left, attributes::regular_type_def const& right) const
+ {
+ return left.base_type == right.base_type
+ && left.namespaces == right.namespaces;
+ }
+ bool operator()(attributes::complex_type_def const& left, attributes::complex_type_def const& right) const
+ {
+ return (*this)(left.outer, right.outer)
+ && std::equal (left.subtypes.begin(), left.subtypes.end(), right.subtypes.begin()
+ , compare_get_and_set_value_type{});
+ }
+ bool operator()(attributes::klass_name const& left, attributes::klass_name const& right) const
+ {
+ return left.namespaces == right.namespaces
+ && left.eolian_name == right.eolian_name;
+ }
+
+ typedef bool result_type;
+};
+
+inline bool compare_get_and_set_value_type::operator () (attributes::parameter_def const& get, attributes::parameter_def const& set) const
+{
+ return efl::eina::visit(compare_get_and_set_value_type_overload{}, get.type.original_type, set.type.original_type);
+}
+inline bool compare_get_and_set_value_type::operator () (attributes::type_def const& get, attributes::type_def const& set) const
+{
+ return efl::eina::visit(compare_get_and_set_value_type_overload{}, get.original_type, set.original_type);
+}
+
+template <typename Context>
+bool property_generate_wrapper_both_check(attributes::property_def const& property, Context const& context)
+{
+ if (blacklist::is_property_blacklisted(property, context))
+ return false;
+
+ bool is_interface = context_find_tag<class_context>(context).current_wrapper_kind == class_context::interface;
+ bool is_static = (property.getter.is_engaged() && property.getter->is_static)
+ || (property.setter.is_engaged() && property.setter->is_static);
+ bool is_concrete = context_find_tag<class_context>(context).current_wrapper_kind == class_context::concrete;
+
+ if ((is_concrete || is_interface) && is_static)
+ return false;
+
+ if (!property.getter)
+ return false;
+
+ if (property.setter)
+ {
+ if (property.getter->values.size() == property.setter->values.size())
+ {
+ if (!std::equal (property.getter->values.begin(), property.getter->values.end(), property.setter->values.begin()
+ , compare_get_and_set_value_type{}))
+ return false;
+ }
+ else
+ return false;
+ }
+
+ return true;
+}
+
+template <typename Context>
+bool property_generate_wrapper_getter(attributes::property_def const& property, Context const& context)
+{
+ if (!property_generate_wrapper_both_check (property, context))
+ return false;
+
+ if (!property.getter->keys.empty())
+ return false;
+
+ if (property.getter->explicit_return_type != attributes::void_
+ && property.getter->explicit_return_type.c_type != "Eina_Success_Flag")
+ {
+ return false;
+ }
+
+ assert (!!property.getter.is_engaged());
+
+ bool is_interface = context_find_tag<class_context>(context).current_wrapper_kind == class_context::interface;
+ if (is_interface)
+ {
+ std::string get_scope = property.getter.is_engaged() ? eolian_mono::function_scope_get(*property.getter) : "";
+ bool is_get_public = get_scope == "public ";
+ if (!is_get_public)
+ return false;
+ }
+ return true;
+}
+
+template <typename Context>
+bool property_generate_wrapper_setter (attributes::property_def const& property, Context const& context)
+{
+ if (!property_generate_wrapper_both_check (property, context))
+ return false;
+ if (!property.setter)
+ return false;
+
+ if (property.setter->explicit_return_type != attributes::void_)
+ return false;
+
+ if (!property.setter->keys.empty())
+ return false;
+
+ bool is_interface = context_find_tag<class_context>(context).current_wrapper_kind == class_context::interface;
+ if (property.setter.is_engaged() && is_interface)
+ {
+ std::string set_scope = property.setter.is_engaged() ? eolian_mono::function_scope_get(*property.setter) : "";
+ bool is_set_public = set_scope == "public ";
+ if (!is_set_public)
+ return false;
+ }
+
+ return true;
+}
+
+struct native_property_function_definition_generator
+{
+ template <typename OutputIterator, typename Context>
+ bool generate(OutputIterator sink, attributes::property_def const& property, Context const& context) const
+ {
+ EINA_CXX_DOM_LOG_DBG(eolian_mono::domain) << "native_property_function_definition_generator: " << property.name << std::endl;
+
+ if(blacklist::is_property_blacklisted(property, context))
+ return true;
+
+ auto const& indent = current_indentation(context);
+
+ bool has_wrapper_getter = property_generate_wrapper_getter (property, context);
+ bool has_wrapper_setter = property_generate_wrapper_setter (property, context);
+
+ auto gen = [&] (attributes::function_def const& f, bool is_set)
+ {
+ // Delegate for the C# method we will export to EO as a method implementation.
+ if(!as_generator
+ (
+ indent << eolian_mono::marshall_annotation(true) << "\n"
+ << indent << "private delegate "
+ << eolian_mono::marshall_type(true)
+ << " "
+ << string
+ << "_delegate(" << (f.is_static ? "" : "System.IntPtr obj, System.IntPtr pd")
+ << ((!f.is_static && f.parameters.size() > 0) ? ", " : "")
+ << (grammar::attribute_reorder<-1, -1>
+ (
+ (marshall_annotation << " " << marshall_parameter)
+ ) % ", ")
+ << ");\n\n")
+ .generate(sink,
+ std::make_tuple(f.return_type, f.return_type, f.c_name, f.parameters),
+ context_add_tag(direction_context{direction_context::native_to_managed}, context)))
+ return false;
+
+ // API delegate is the wrapper for the Eo methods exported from C that we will use from C#.
+ if(!as_generator
+ (
+ indent << eolian_mono::marshall_annotation(true) << "\n"
+ << indent << "internal delegate "
+ << eolian_mono::marshall_type(true)
+ << " "
+ << string << "_api_delegate(" << (f.is_static ? "" : "System.IntPtr obj")
+ << ((!f.is_static && f.parameters.size() > 0) ? ", " : "")
+ << (grammar::attribute_reorder<-1, -1>
+ (
+ (marshall_annotation << " " << marshall_parameter)
+ ) % ", ")
+ << ");\n\n")
+ .generate(sink, std::make_tuple(f.return_type, f.return_type, f.c_name, f.parameters), context))
+ return false;
+
+ // Delegate holder (so it can't be collected).
+ if(!as_generator
+ (indent << "internal static readonly Efl.Eo.FunctionWrapper<" << string << "_api_delegate> " << string << "_ptr = new Efl.Eo.FunctionWrapper<"
+ << string << "_api_delegate>(Module, \"" << string << "\");\n\n")
+ .generate(sink, std::make_tuple(f.c_name, f.c_name, f.c_name, f.c_name), context))
+ return false;
+
+ // We do not generate the wrapper to be called from C for non public interface member directly.
+ if (blacklist::is_non_public_interface_member(f, *implementing_klass))
+ return true;
+
+ // Do not generate static method in interface
+ if (((implementing_klass->type == attributes::class_type::interface_) ||
+ (implementing_klass->type == attributes::class_type::mixin)) && f.is_static)
+ return true;
+
+ // Actual method implementation to be called from C.
+ std::string return_type;
+ if(!as_generator(eolian_mono::type(true)).generate(std::back_inserter(return_type), f.return_type, context))
+ return false;
+
+ std::string klass_cast_name;
+ if ((implementing_klass->type == attributes::class_type::interface_) ||
+ ((implementing_klass->type == attributes::class_type::mixin) && !f.is_static))
+ klass_cast_name = name_helpers::klass_interface_name(*implementing_klass);
+ else
+ klass_cast_name = name_helpers::klass_inherit_name(*implementing_klass);
+
+ std::string self = "Efl.Eo.Globals.Super(obj, Efl.Eo.Globals.GetClass(obj))";
+
+ if (f.is_static)
+ self = "";
+
+ if(!as_generator
+ (indent << "[SuppressMessage(\"Microsoft.Reliability\", \"CA2000:DisposeObjectsBeforeLosingScope\", Justification = \"The instantiated objects can be stored in the called Managed API method.\")]\n"
+ << indent << "private static "
+ << eolian_mono::marshall_type(true) << " "
+ << string
+ << "(System.IntPtr obj, System.IntPtr pd"
+ << *(", " << marshall_parameter)
+ << ")\n"
+ << indent << "{\n"
+ << indent << scope_tab << "Eina.Log.Debug(\"function " << string << " was called\");\n"
+ << indent << scope_tab << "var ws = Efl.Eo.Globals.GetWrapperSupervisor(obj);\n"
+ << indent << scope_tab << "if (ws != null)\n"
+ << indent << scope_tab << "{\n"
+ << indent << scope_tab << scope_tab << eolian_mono::native_function_definition_preamble() << "\n"
+ << indent << scope_tab << scope_tab << "try\n"
+ << indent << scope_tab << scope_tab << "{\n"
+ )
+ .generate(sink, std::make_tuple(f.return_type, escape_keyword(f.name), f.parameters
+ , /***/f.c_name/***/
+ , f
+ ), context))
+ return false;
+ if (is_set/* && has_wrapper_setter*/)
+ {
+ if(!as_generator
+ (
+ indent << scope_tab << scope_tab << scope_tab << (return_type != "void" ? "_ret_var = " : "")
+ << (f.is_static ? "" : "((") << klass_cast_name << (f.is_static ? "." : ")ws.Target).") << string
+ )
+ .generate(sink, std::make_tuple(name_helpers::property_managed_name(property), f.parameters), context))
+ return false;
+
+ if(!f.keys.empty() && !as_generator(lit("[(") << (native_argument_invocation % ", ") << ")]").generate (sink, f.keys, context))
+ return false;
+
+ if(!as_generator
+ (" = ("
+ << (native_tuple_argument_invocation % ", ") << ");\n"
+ )
+ .generate(sink, f.values, context))
+ return false;
+ }
+ else if (!is_set/* && has_wrapper_getter*/)
+ {
+ if(!as_generator
+ (
+ indent << scope_tab << scope_tab << scope_tab << "var ret = "
+ << (f.is_static ? "" : "((") << klass_cast_name << (f.is_static ? "." : ")ws.Target).")
+ << string
+
+ )
+ .generate(sink, std::make_tuple(name_helpers::property_managed_name(property)), context))
+ return false;
+
+ if(!f.keys.empty() && !as_generator(lit("[(") << (native_argument_invocation % ", ") << ")]").generate (sink, f.keys, context))
+ return false;
+
+ if (!as_generator(";\n").generate (sink, attributes::unused, context))
+ return false;
+
+ }
+ // else if (!as_generator
+ // (indent << scope_tab << scope_tab << scope_tab << (return_type != "void" ? "_ret_var = " : "")
+ // << (f.is_static ? "" : "((") << klass_cast_name << (f.is_static ? "." : ")ws.Target).") << string
+ // << "(" << (native_argument_invocation % ", ") << ");\n"
+ // ).generate(sink, std::make_tuple(name_helpers::managed_method_name(f), f.parameters), context))
+ // return false;
+
+ if(!as_generator
+ (
+ indent << scope_tab << scope_tab << "}\n"
+ << indent << scope_tab << scope_tab << "catch (Exception e)\n"
+ << indent << scope_tab << scope_tab << "{\n"
+ << indent << scope_tab << scope_tab << scope_tab << "Eina.Log.Warning($\"Callback error: {e.ToString()}\");\n"
+ << indent << scope_tab << scope_tab << scope_tab << "Eina.Error.Set(Eina.Error.UNHANDLED_EXCEPTION);\n"
+ << indent << scope_tab << scope_tab << "}\n\n"
+ << indent << eolian_mono::native_function_definition_epilogue(*implementing_klass) << "\n"
+ << indent << scope_tab << "}\n"
+ << indent << scope_tab << "else\n"
+ << indent << scope_tab << "{\n"
+ << indent << scope_tab << scope_tab << (return_type != "void" ? "return " : "") << string
+ << "_ptr.Value.Delegate(" << self << ((!f.is_static && f.parameters.size() > 0) ? ", " : "") << (argument % ", ") << ");\n"
+ << indent << scope_tab << "}\n"
+ << indent << "}\n\n"
+ )
+ .generate(sink, std::make_tuple(f, f.c_name, f.parameters), context))
+ return false;
+
+ // Static functions do not need to be called from C
+ if (f.is_static)
+ return true;
+
+ // This is the delegate that will be passed to Eo to be called from C.
+ if(!as_generator(
+ indent << "private static " << f.c_name << "_delegate " << f.c_name << "_static_delegate;\n\n"
+ ).generate(sink,
+ attributes::unused,
+ context_add_tag(direction_context{direction_context::native_to_managed}, context)))
+ return false;
+ return true;
+ };
+
+ bool r = true;
+ if(r && property.getter && has_wrapper_getter
+ && helpers::is_function_registerable (*property.getter, *implementing_klass))
+ r &= gen (*property.getter, false);
+ if(r && property.setter && has_wrapper_setter
+ && helpers::is_function_registerable (*property.setter, *implementing_klass))
+ r &= gen (*property.setter, true);
+ return r;
+ }
+
+ attributes::klass_def const* implementing_klass, *klass_from_property;
+};
+
+struct native_property_function_definition_parameterized
+{
+ native_property_function_definition_generator operator()(attributes::klass_def const& klass
+ , attributes::klass_def const& prop_from_klass) const
+ {
+ return {&klass, &prop_from_klass};
+ }
+} const native_property_function_definition;
+
+}
+
+namespace efl { namespace eolian { namespace grammar {
+
+template <>
+struct is_eager_generator< ::eolian_mono::native_property_function_definition_generator> : std::true_type {};
+template <>
+struct is_generator< ::eolian_mono::native_property_function_definition_generator> : std::true_type {};
+
+namespace type_traits {
+
+template <>
+struct attributes_needed< ::eolian_mono::native_property_function_definition_generator> : std::integral_constant<int, 1> {};
+
+} } } }
+
+#endif
diff --git a/src/bin/eolian_mono/eolian/mono/struct_definition.hh b/src/bin/eolian_mono/eolian/mono/struct_definition.hh
index 7a3019ec45..038ab1d0fd 100644
--- a/src/bin/eolian_mono/eolian/mono/struct_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/struct_definition.hh
@@ -69,6 +69,20 @@ struct to_internal_field_convert_generator
.generate(sink, std::make_tuple(field_name, field_name), context))
return false;
}
+ else if ((complex && (complex->outer.base_type == "array")))
+ {
+ if (!as_generator(
+ indent << scope_tab << scope_tab << "_internal_struct." << string << " = Efl.Eo.Globals.IListToNativeArray(_external_struct." << string << ", " << (field.type.has_own ? "true" : "false") << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if ((complex && (complex->outer.base_type == "list")))
+ {
+ if (!as_generator(
+ indent << scope_tab << scope_tab << "_internal_struct." << string << " = Efl.Eo.Globals.IListToNativeList(_external_struct." << string << ", " << (field.type.has_own ? "true" : "false") << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
else if ((complex && (complex->outer.base_type == "iterator")))
{
if (!as_generator(
@@ -76,9 +90,14 @@ struct to_internal_field_convert_generator
.generate(sink, std::make_tuple(field_name, field_name), context))
return false;
}
- else if ((complex && (complex->outer.base_type == "array"
- || complex->outer.base_type == "list"
- || complex->outer.base_type == "hash"))
+ else if ((complex && (complex->outer.base_type == "accessor")))
+ {
+ if (!as_generator(
+ indent << scope_tab << scope_tab << "_internal_struct." << string << " = Efl.Eo.Globals.IEnumerableToAccessor(_external_struct." << string << ", " << (field.type.has_own ? "true" : "false") << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if ((complex && (complex->outer.base_type == "hash"))
|| field.type.c_type == "Eina_Binbuf *" || field.type.c_type == "const Eina_Binbuf *")
{
// Always assumes pointer
@@ -160,6 +179,7 @@ struct to_internal_field_convert_generator
.generate(sink, std::make_tuple(field_name, field_name), context))
return false;
}
+
return true;
}
} const to_internal_field_convert {};
@@ -169,7 +189,6 @@ struct to_external_field_convert_generator
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::struct_field_def const& field, Context const& context) const
{
- auto const& indent = current_indentation(context);
auto field_name = name_helpers::to_field_name(field.name);
auto regular = efl::eina::get<attributes::regular_type_def>(&field.type.original_type);
auto klass = efl::eina::get<attributes::klass_name>(&field.type.original_type);
@@ -178,108 +197,116 @@ struct to_external_field_convert_generator
if (klass)
{
auto interface_name = name_helpers::klass_full_interface_name(*klass);
- auto concrete_name = name_helpers::klass_full_concrete_name(*klass);
if (!as_generator(
- "\n"
- << indent << scope_tab << scope_tab << "_external_struct." << string
- << " = (" << concrete_name << ") Efl.Eo.Globals.CreateWrapperFor(_internal_struct." << string << ");\n"
+ "(" << interface_name << ") Efl.Eo.Globals.CreateWrapperFor(" << string << ");"
).generate(sink, std::make_tuple(field_name, field_name), context))
return false;
}
else if (field.type.c_type == "Eina_Binbuf *" || field.type.c_type == "const Eina_Binbuf *")
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = new " << type << "(_internal_struct." << string << ", false);\n")
- .generate(sink, std::make_tuple(field_name, field.type, field_name), context))
+ "new " << type << "(" << string << ", false);")
+ .generate(sink, std::make_tuple(field.type, field_name), context))
return false;
}
- else if (complex && (complex->outer.base_type == "array"
- || complex->outer.base_type == "list"))
+ else if (complex && (complex->outer.base_type == "array"))
{
// Always assumes pointer
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = new " << type << "(_internal_struct." << string << ", false, false);\n")
- .generate(sink, std::make_tuple(field_name, field.type, field_name), context))
+ "Efl.Eo.Globals.NativeArrayTo" << type << "(" << string << ");")
+ .generate(sink, std::make_tuple(field.type, field_name), context))
+ return false;
+ }
+ else if (complex && (complex->outer.base_type == "list"))
+ {
+ // Always assumes pointer
+ if (!as_generator(
+ "Efl.Eo.Globals.NativeListTo" << type << "(" << string << ");")
+ .generate(sink, std::make_tuple(field.type, field_name), context))
return false;
}
else if (complex && complex->outer.base_type == "hash")
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = new " << type << "(_internal_struct." << string << ", false, false, false);\n")
- .generate(sink, std::make_tuple(field_name, field.type, field_name), context))
+ "new " << type << "(" << string << ", false, false, false);")
+ .generate(sink, std::make_tuple(field.type, field_name), context))
return false;
}
else if (complex && complex->outer.base_type == "iterator")
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = Efl.Eo.Globals.IteratorTo" << type << "(_internal_struct." << string << ");\n")
- .generate(sink, std::make_tuple(field_name, field.type, field_name), context))
+ "Efl.Eo.Globals.IteratorTo" << type << "(" << string << ");")
+ .generate(sink, std::make_tuple(field.type, field_name), context))
+ return false;
+ }
+ else if (complex && complex->outer.base_type == "accessor")
+ {
+ if (!as_generator(
+ "Efl.Eo.Globals.AccessorTo" << type << "(" << string << ");")
+ .generate(sink, std::make_tuple(field.type, field_name), context))
return false;
}
else if (field.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion(regular))
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = Eina.PrimitiveConversion.PointerToManaged<" << type << ">(_internal_struct." << string << ");\n")
- .generate(sink, std::make_tuple(field_name, field.type, field_name), context))
+ "Eina.PrimitiveConversion.PointerToManaged<" << type << ">(" << string << ");")
+ .generate(sink, std::make_tuple(field.type, field_name), context))
return false;
}
else if (helpers::need_struct_conversion(regular))
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = _internal_struct." << string << ";\n")
- .generate(sink, std::make_tuple(field_name, field_name), context))
+ string << ";")
+ .generate(sink, field_name, context))
return false;
}
else if (regular && (regular->base_type == "string" || regular->base_type == "mstring" || regular->base_type == "stringshare"))
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = Eina.StringConversion.NativeUtf8ToManagedString(_internal_struct." << string << ");\n")
+ "Eina.StringConversion.NativeUtf8ToManagedString(" << string << ");")
.generate(sink, std::make_tuple(field_name, field_name), context))
return false;
}
else if (field.type.c_type == "Eina_Slice" || field.type.c_type == "const Eina_Slice"
|| field.type.c_type == "Eina_Rw_Slice" || field.type.c_type == "const Eina_Rw_Slice")
{
- if (!as_generator(
- "\n" <<
- indent << scope_tab << scope_tab << "_external_struct." << field_name << ".Len = _internal_struct." << field_name << ".Len;\n" <<
- indent << scope_tab << scope_tab << "_external_struct." << field_name << ".Mem = _internal_struct." << field_name << ".Mem;\n")
+ if (!as_generator(field_name << ";")
.generate(sink, attributes::unused, context))
return false;
}
else if (field.type.c_type == "Eina_Value" || field.type.c_type == "const Eina_Value")
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = new Eina.Value(_internal_struct." << string << ");\n"
- ).generate(sink, std::make_tuple(field_name, field_name), context))
+ "new Eina.Value(" << string << ");"
+ ).generate(sink, std::make_tuple(field_name), context))
return false;
}
else if (field.type.c_type == "Eina_Value *" || field.type.c_type == "const Eina_Value *")
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = new Eina.Value(_internal_struct." << string << ", Eina.Ownership.Unmanaged);\n"
- ).generate(sink, std::make_tuple(field_name, field_name), context))
+ "new Eina.Value(" << string << ", Eina.Ownership.Unmanaged);"
+ ).generate(sink, std::make_tuple(field_name), context))
return false;
}
else if (!field.type.is_ptr && regular && regular->base_type == "bool")
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = _internal_struct." << string << " != 0;\n"
- ).generate(sink, std::make_tuple(field_name, field_name), context))
+ string << " != 0;"
+ ).generate(sink, std::make_tuple(field_name), context))
return false;
}
else if (!field.type.is_ptr && regular && regular->base_type == "char")
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = (char)_internal_struct." << string << ";\n"
- ).generate(sink, std::make_tuple(field_name, field_name), context))
+ "(char)" << string << ";"
+ ).generate(sink, std::make_tuple(field_name), context))
return false;
}
else // primitives and enums
{
if (!as_generator(
- indent << scope_tab << scope_tab << "_external_struct." << string << " = _internal_struct." << string << ";\n")
- .generate(sink, std::make_tuple(field_name, field_name), context))
+ field_name << ";"
+ ).generate(sink, attributes::unused, context))
return false;
}
return true;
@@ -288,22 +315,12 @@ struct to_external_field_convert_generator
// Internal Struct //
-struct struct_internal_definition_generator
+struct struct_private_property_generator
{
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::struct_def const& struct_, Context const& context) const
{
auto const& indent = current_indentation(context);
- if (!as_generator
- (
- indent << "#pragma warning disable CS1591\n\n"
- << indent << "/// <summary>Internal wrapper for struct " << string << ".</summary>\n"
- << indent << "[StructLayout(LayoutKind.Sequential)]\n"
- << indent << "internal struct " << string << "\n"
- << indent << "{\n"
- )
- .generate(sink, std::make_tuple<>(binding_struct_name(struct_), struct_internal_decl_name()), context))
- return false;
// iterate struct fields
for (auto const& field : struct_.fields)
@@ -319,7 +336,7 @@ struct struct_internal_definition_generator
|| regular->base_type == "any_value_ref")))
{
if (!as_generator(indent << scope_tab << "/// <summary>Internal wrapper for field " << field_name << "</summary>\n"
- << indent << scope_tab << "public System.IntPtr " << field_name << ";\n")
+ << indent << scope_tab << "private System.IntPtr " << field_name << ";\n")
.generate(sink, nullptr, context))
return false;
}
@@ -327,7 +344,7 @@ struct struct_internal_definition_generator
&& regular->base_type == "bool")
{
if (!as_generator(indent << scope_tab << "/// <summary>Internal wrapper for field " << field_name << "</summary>\n"
- << indent << scope_tab << "public System.Byte " << field_name << ";\n")
+ << indent << scope_tab << "private System.Byte " << field_name << ";\n")
.generate(sink, nullptr, context))
return false;
}
@@ -335,12 +352,12 @@ struct struct_internal_definition_generator
&& regular->base_type == "char")
{
if (!as_generator(indent << scope_tab << "/// <summary>Internal wrapper for field " << field_name << "</summary>\n"
- << indent << scope_tab << "public System.Byte " << field_name << ";\n")
+ << indent << scope_tab << "private System.Byte " << field_name << ";\n")
.generate(sink, nullptr, context))
return false;
}
else if (!as_generator(indent << scope_tab << eolian_mono::marshall_annotation(false) << "\n"
- << indent << scope_tab << "public " << eolian_mono::marshall_type(false) << " " << string << ";\n")
+ << indent << scope_tab << "private " << eolian_mono::marshall_type(false) << " " << string << ";\n")
.generate(sink, std::make_tuple(field.type, field.type, field_name), context))
return false;
}
@@ -351,59 +368,18 @@ struct struct_internal_definition_generator
// those 'mini-amd64.c condition fields not met' crashes.
if (struct_.fields.size() == 0)
{
- if (!as_generator(indent << scope_tab << "internal IntPtr field;\n").generate(sink, nullptr, context))
+ if (!as_generator(indent << scope_tab << "/// <summary>Placeholder field</summary>\n"
+ << indent << scope_tab << "private IntPtr field;\n").generate(sink, nullptr, context))
return false;
}
- auto external_name = binding_struct_name(struct_);
- auto internal_name = binding_struct_internal_name(struct_);
-
- // to internal
- if (!as_generator(
- indent << scope_tab << "/// <summary>Implicit conversion to the internal/marshalling representation.</summary>\n"
- << indent << scope_tab << "public static implicit operator " << string << "(" << string << " _external_struct)\n"
- << indent << scope_tab << "{\n"
- << indent << scope_tab << scope_tab << "var _internal_struct = new " << string << "();\n"
- ).generate(sink, std::make_tuple(internal_name, external_name, internal_name), context))
- return false;
-
- for (auto const& field : struct_.fields)
- {
- if (!to_internal_field_convert.generate(sink, field, context))
- return false;
- }
-
- if (!as_generator(indent << scope_tab << scope_tab << "return _internal_struct;\n"
- << indent << scope_tab << "}\n\n").generate(sink, nullptr, context))
- return false;
-
- // to managed
- if (!as_generator(
- indent << scope_tab << "/// <summary>Implicit conversion to the managed representation.</summary>\n"
- << indent << scope_tab << "public static implicit operator " << string << "(" << string << " _internal_struct)\n"
- << indent << scope_tab << "{\n"
- << indent << scope_tab << scope_tab << "var _external_struct = new " << string << "();\n"
- ).generate(sink, std::make_tuple(external_name, internal_name, external_name), context))
- return false;
-
- for (auto const& field : struct_.fields)
- {
- if (!to_external_field_convert.generate(sink, field, context))
- return false;
- }
-
- if (!as_generator(indent << scope_tab << scope_tab << "return _external_struct;\n"
- << indent << scope_tab << "}\n").generate(sink, nullptr, context))
+ if(!as_generator("\n")
+ .generate(sink, attributes::unused, context))
return false;
- // close internal class
- if(!as_generator(indent << "}\n"
- << indent << "#pragma warning restore CS1591\n"
- ).generate(sink, attributes::unused, context)) return false;
-
return true;
}
-} const struct_internal_definition {};
+} const struct_private_property {};
// Managed Struct //
@@ -426,7 +402,7 @@ struct struct_definition_generator
return true;
auto struct_name = binding_struct_name(struct_);
- auto const& indent = current_indentation(context);
+ auto const& indent = current_indentation(context).inc();
if (!as_generator(
indent << scope_tab << "/// <summary>Packs tuple into " << struct_name << " object.\n"
@@ -436,34 +412,22 @@ struct struct_definition_generator
return false;
if (!as_generator(
- indent << scope_tab << "public static implicit operator " << struct_name << "(\n"
- << indent << scope_tab << scope_tab << "(\n"
- << ((indent << scope_tab << scope_tab << " " << field_argument_decl) % ",\n") << "\n"
- << indent << scope_tab << scope_tab << ") tuple)\n"
- << indent << scope_tab << "{\n"
+ indent << scope_tab << "public static implicit operator " << struct_name << "(("
+ << (field_argument_decl % ", ")
+ << ") tuple)\n"
).generate(sink, struct_.fields, context))
return false;
// object constructor
if (!as_generator(
- indent << scope_tab << scope_tab << "return new " << struct_name << "{\n"
+ indent << scope_tab << scope_tab << "=> new " << struct_name << "("
).generate(sink, attributes::unused, context))
return false;
- for (const auto& field: struct_.fields)
- {
- auto field_name = name_helpers::to_field_name(field.name);
-
- if (!as_generator(
- indent << scope_tab << scope_tab << scope_tab << field_name << " = tuple." << field_name << ",\n"
- ).generate(sink, attributes::unused, context))
- return false;
- }
-
if (!as_generator(
- indent << scope_tab << scope_tab << "};\n"
- << indent << scope_tab << "}\n"
- ).generate(sink, attributes::unused, context))
+ (("tuple." << struct_field_name) % ", ")
+ << ");\n\n"
+ ).generate(sink, struct_.fields, context))
return false;
return true;
@@ -472,7 +436,7 @@ struct struct_definition_generator
template <typename OutputIterator, typename Context>
bool generate_deconstruct_method(OutputIterator sink, attributes::struct_def const& struct_, Context const& context) const
{
- auto const& indent = current_indentation(context);
+ auto const& indent = current_indentation(context).inc();
auto struct_name = binding_struct_name(struct_);
if (!as_generator(
@@ -510,10 +474,11 @@ struct struct_definition_generator
// assigments
for (auto const& field : struct_.fields)
{
- auto field_name = name_helpers::to_field_name(field.name);
+ auto field_name = name_helpers::managed_name(field.name);
+ auto param_name = name_helpers::to_field_name(field.name);
if (!as_generator(
- indent << scope_tab << scope_tab << field_name << " = this." << field_name << ";\n"
+ indent << scope_tab << scope_tab << param_name << " = this." << field_name << ";\n"
).generate(sink, attributes::unused, context))
return false;
}
@@ -528,50 +493,44 @@ struct struct_definition_generator
bool generate(OutputIterator sink, attributes::struct_def const& struct_, Context const& context) const
{
EINA_CXX_DOM_LOG_DBG(eolian_mono::domain) << "struct_definition_generator: " << struct_.cxx_name << std::endl;
- auto const& indent = current_indentation(context);
- if(!as_generator(documentation).generate(sink, struct_, context))
+ auto const& indent = current_indentation(context).inc();
+ if(!as_generator(documentation(1)).generate(sink, struct_, context))
return false;
auto struct_managed_name = binding_struct_name(struct_);
if(!as_generator
(
indent << "[StructLayout(LayoutKind.Sequential)]\n"
<< indent << "[Efl.Eo.BindingEntity]\n"
- << "[SuppressMessage(\"Microsoft.Naming\", \"CA1724:TypeNamesShouldNotMatchNamespaces\")]\n"
+ << indent << "[SuppressMessage(\"Microsoft.Naming\", \"CA1724:TypeNamesShouldNotMatchNamespaces\")]\n"
<< indent << "public struct " << struct_managed_name << " : IEquatable<" << struct_managed_name << ">\n"
<< indent << "{\n"
)
.generate(sink, attributes::unused, context))
return false;
+ if (!struct_private_property.generate(sink, struct_, change_indentation(indent, context)))
+ return false;
+
// iterate struct fields
for (auto const& field : struct_.fields)
{
- if (!as_generator(documentation(indent.n + 1)).generate(sink, field, context))
+ auto docs = documentation(indent.n + 1);
+ if (!as_generator(docs).generate(sink, field, context))
return false;
if (!field.type.doc_summary.empty())
{
- if (!as_generator(indent << scope_tab << "/// <value>" << field.type.doc_summary << "</value>\n").generate(sink, attributes::unused, context))
+ if (!docs.generate_tag_value(sink, field.type.doc_summary, context))
return false;
}
- if (!as_generator(indent << scope_tab << "public " << type << " " << name_helpers::to_field_name(field.name) << ";\n").generate(sink, field.type, context))
+ if (!as_generator(indent << scope_tab << "public " << type << " " << name_helpers::managed_name(field.name) << " { get => " << to_external_field_convert << " }\n").generate(sink, std::make_tuple(field.type, field), context))
return false;
}
auto struct_name = binding_struct_name(struct_);
- // Check whether this is an extern struct without declared fields in .eo file and generate a
- // placeholder field if positive.
- // Mono's JIT is picky when generating function pointer for delegates with empty structs, leading to
- // those 'mini-amd64.c condition fields not met' crashes.
- if (struct_.fields.size() == 0)
- {
- if (!as_generator(indent << scope_tab << "/// <summary>Placeholder field</summary>\n"
- << indent << scope_tab << "public IntPtr field;\n").generate(sink, nullptr, context))
- return false;
- }
- else
+ if (struct_.fields.size() != 0)
{
// Constructor with default parameters for easy struct initialization
if(!as_generator(
@@ -589,9 +548,9 @@ struct struct_definition_generator
<< *(indent << scope_tab << field_argument_docs << "\n")
<< indent << scope_tab << "public " << string << "(\n"
<< ((indent << scope_tab << scope_tab << field_argument_default) % ",\n")
- << indent << scope_tab << ")\n"
+ << ")\n"
<< indent << scope_tab << "{\n"
- << *(indent << scope_tab << scope_tab << field_argument_assignment << ";\n")
+ << *(indent << scope_tab << scope_tab << field_argument_assignment)
<< indent << scope_tab << "}\n\n")
.generate(sink, std::make_tuple(struct_.fields, struct_name, struct_.fields, struct_.fields), context))
return false;
@@ -619,7 +578,14 @@ struct struct_definition_generator
).generate(sink, attributes::unused, context))
return false;
- if (struct_.fields.size() != 0 )
+ if (struct_.fields.size() == 1 )
+ {
+ if (!as_generator(
+ indent << scope_tab << scope_tab << "return " << name_helpers::managed_name(struct_.fields[0].name) << ".GetHashCode();\n"
+ ).generate(sink, attributes::unused, context))
+ return false;
+ }
+ else if (struct_.fields.size() != 0 )
{
// int hash = 17;
// hash = 23 * fieldA.GetHashCode();
@@ -628,7 +594,7 @@ struct struct_definition_generator
// return hash
if (!as_generator(
indent << scope_tab << scope_tab << "int hash = 17;\n"
- << *(grammar::attribute_reorder<-1, -1>(indent << scope_tab << scope_tab << "hash = hash * 23 + " << name_helpers::struct_field_name << ".GetHashCode(" << culture_info << ");\n"))
+ << *(grammar::attribute_reorder<-1, -1>(indent << scope_tab << scope_tab << "hash = hash * 23 + " << name_helpers::struct_property_name << ".GetHashCode(" << culture_info << ");\n"))
<< indent << scope_tab << scope_tab << "return hash;\n"
).generate(sink, struct_.fields, context))
return false;
@@ -637,7 +603,7 @@ struct struct_definition_generator
{
// Just compare the place holder pointers
if (!as_generator(
- "return field.GetHashCode();\n"
+ indent << scope_tab << scope_tab << "return field.GetHashCode();\n"
).generate(sink, attributes::unused, context))
return false;
}
@@ -661,7 +627,7 @@ struct struct_definition_generator
if (struct_.fields.size() != 0 )
{
if (!as_generator(
- grammar::attribute_reorder<-1, -1>((name_helpers::struct_field_name << " == other." << name_helpers::struct_field_name)) % " && "
+ grammar::attribute_reorder<-1, -1>((name_helpers::struct_property_name << " == other." << name_helpers::struct_property_name)) % " && "
).generate(sink, struct_.fields, context))
return false;
}
@@ -676,7 +642,7 @@ struct struct_definition_generator
if (!as_generator(
- indent << scope_tab << scope_tab << ";\n"
+ ";\n"
<< indent << scope_tab << "}\n"
).generate(sink, attributes::unused, context))
return false;
@@ -726,8 +692,7 @@ struct struct_definition_generator
<< indent << scope_tab << "/// <param name=\"ptr\">Native pointer to be converted.</param>\n"
<< indent << scope_tab << "public static implicit operator " << struct_name << "(IntPtr ptr)\n"
<< indent << scope_tab << "{\n"
- << indent << scope_tab << scope_tab << "var tmp = (" << struct_name << ".NativeStruct)Marshal.PtrToStructure(ptr, typeof(" << struct_name << ".NativeStruct));\n"
- << indent << scope_tab << scope_tab << "return tmp;\n"
+ << indent << scope_tab << scope_tab << "return (" << struct_name << ")Marshal.PtrToStructure(ptr, typeof(" << struct_name << "));\n"
<< indent << scope_tab << "}\n\n"
).generate(sink, attributes::unused, context))
return false;
@@ -752,9 +717,6 @@ struct struct_definition_generator
).generate(sink, attributes::unused, context))
return false;
- if (!struct_internal_definition.generate(sink, struct_, change_indentation(indent.inc(), context)))
- return false;
-
if(!as_generator(indent << "}\n\n").generate(sink, attributes::unused, context)) return false;
return true;
@@ -790,9 +752,9 @@ template <>
struct is_generator< ::eolian_mono::struct_definition_generator> : std::true_type {};
template <>
-struct is_eager_generator< ::eolian_mono::struct_internal_definition_generator> : std::true_type {};
+struct is_eager_generator< ::eolian_mono::struct_private_property_generator> : std::true_type {};
template <>
-struct is_generator< ::eolian_mono::struct_internal_definition_generator> : std::true_type {};
+struct is_generator< ::eolian_mono::struct_private_property_generator> : std::true_type {};
template <>
struct is_eager_generator< ::eolian_mono::to_internal_field_convert_generator> : std::true_type {};
@@ -814,7 +776,7 @@ template <>
struct attributes_needed< ::eolian_mono::struct_definition_generator> : std::integral_constant<int, 1> {};
template <>
-struct attributes_needed< ::eolian_mono::struct_internal_definition_generator> : std::integral_constant<int, 1> {};
+struct attributes_needed< ::eolian_mono::struct_private_property_generator> : std::integral_constant<int, 1> {};
template <>
struct attributes_needed< ::eolian_mono::to_internal_field_convert_generator> : std::integral_constant<int, 1> {};
diff --git a/src/bin/eolian_mono/eolian/mono/struct_fields.hh b/src/bin/eolian_mono/eolian/mono/struct_fields.hh
index 76e0f64138..9d861a0b65 100644
--- a/src/bin/eolian_mono/eolian/mono/struct_fields.hh
+++ b/src/bin/eolian_mono/eolian/mono/struct_fields.hh
@@ -69,11 +69,128 @@ struct field_argument_assignment_generator
template<typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::struct_field_def const& field, Context const& context) const
{
- auto field_name = name_helpers::to_field_name(field.name);
- if (!as_generator("this." << field_name << " = " << field_name)
- .generate(sink, attributes::unused, context))
- return false;
- return true;
+ auto field_name = to_field_name(field.name);
+ // FIXME Replace need_struct_conversion(regular) with need_struct_conversion(type)
+ auto regular = efl::eina::get<attributes::regular_type_def>(&field.type.original_type);
+ auto klass = efl::eina::get<attributes::klass_name>(&field.type.original_type);
+ auto complex = efl::eina::get<attributes::complex_type_def>(&field.type.original_type);
+
+ if (klass)
+ {
+ if (!as_generator(
+ "this." << string << " = " << string << "?.NativeHandle ?? System.IntPtr.Zero;\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if ((complex && (complex->outer.base_type == "array")))
+ {
+ if (!as_generator(
+ "this." << string << " = Efl.Eo.Globals.IListToNativeArray(" << string << ", " << (field.type.has_own ? "true" : "false") << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if ((complex && (complex->outer.base_type == "list")))
+ {
+ if (!as_generator(
+ "this." << string << " = Efl.Eo.Globals.IListToNativeList(" << string << ", " << (field.type.has_own ? "true" : "false") << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if ((complex && (complex->outer.base_type == "iterator")))
+ {
+ if (!as_generator(
+ "this." << string << " = Efl.Eo.Globals.IEnumerableToIterator(" << string << ", " << (field.type.has_own ? "true" : "false") << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if ((complex && (complex->outer.base_type == "accessor")))
+ {
+ if (!as_generator(
+ "this." << string << " = Efl.Eo.Globals.IEnumerableToAccessor(" << string << ", " << (field.type.has_own ? "true" : "false") << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if ((complex && (complex->outer.base_type == "hash"))
+ || field.type.c_type == "Eina_Binbuf *" || field.type.c_type == "const Eina_Binbuf *")
+ {
+ // Always assumes pointer
+ if (!as_generator(
+ "this." << string << " = " << string << ".Handle;\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (field.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion(regular))
+ {
+ if (!as_generator(
+ "this." << string << " = Eina.PrimitiveConversion.ManagedToPointerAlloc(" << string << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (helpers::need_struct_conversion(regular))
+ {
+ if (!as_generator(
+ "this." << string << " = " << string << ";\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (regular && (regular->base_type == "string" || regular->base_type == "mstring"))
+ {
+ if (!as_generator(
+ "this." << string << " = Eina.MemoryNative.StrDup(" << string << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (regular && regular->base_type == "stringshare")
+ {
+ if (!as_generator(
+ "this." << string << " = Eina.MemoryNative.AddStringshare(" << string << ");\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (field.type.c_type == "Eina_Slice" || field.type.c_type == "const Eina_Slice"
+ || field.type.c_type == "Eina_Rw_Slice" || field.type.c_type == "const Eina_Rw_Slice")
+ {
+ if (!as_generator(
+ "this." << string << " = " << string << ";\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (field.type.c_type == "Eina_Value" || field.type.c_type == "const Eina_Value")
+ {
+ if (!as_generator(
+ "this." << string << " = " << string << ".GetNative();\n"
+ ).generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (field.type.c_type == "Eina_Value *" || field.type.c_type == "const Eina_Value *")
+ {
+ if (!as_generator(
+ "this." << string << " = " << string << "?.NativeHandle ?? System.IntPtr.Zero;\n"
+ ).generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (!field.type.is_ptr && regular && regular->base_type == "bool")
+ {
+ if (!as_generator(
+ "this." << string << " = " << string << " ? (byte)1 : (byte)0;\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else if (!field.type.is_ptr && regular && regular->base_type == "char")
+ {
+ if (!as_generator(
+ "this." << string << " = (byte)" << string << ";\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ else // primitives and enums
+ {
+ if (!as_generator(
+ "this." << string << " = " << string << ";\n")
+ .generate(sink, std::make_tuple(field_name, field_name), context))
+ return false;
+ }
+ return true;
}
} const field_argument_assignment {};
diff --git a/src/bin/eolian_mono/eolian/mono/type_impl.hh b/src/bin/eolian_mono/eolian/mono/type_impl.hh
index f365a0d5a8..4475844e2d 100644
--- a/src/bin/eolian_mono/eolian/mono/type_impl.hh
+++ b/src/bin/eolian_mono/eolian/mono/type_impl.hh
@@ -368,13 +368,13 @@ struct visitor_generate
{"list", nullptr, nullptr, [&]
{
complex_type_def c = complex;
- c.outer.base_type = "Eina.List";
+ c.outer.base_type = "IList";
return c;
}}
, {"array", nullptr, nullptr, [&]
{
complex_type_def c = complex;
- c.outer.base_type = "Eina.Array";
+ c.outer.base_type = "IList";
return c;
}}
, {"hash", nullptr, nullptr
diff --git a/src/bin/eolian_mono/eolian/mono/utils.hh b/src/bin/eolian_mono/eolian/mono/utils.hh
index d942903aba..7905790b4c 100644
--- a/src/bin/eolian_mono/eolian/mono/utils.hh
+++ b/src/bin/eolian_mono/eolian/mono/utils.hh
@@ -90,6 +90,28 @@ namespace eolian_mono { namespace utils {
return ret;
}
+ std::string to_camel_case(const std::vector<std::string> &names, std::string const& delim="")
+ {
+ std::vector<std::string> outv(names.size());
+ std::stringstream osstream;
+
+ std::transform(names.begin(), names.end(), outv.begin(),
+ [](std::string name) {
+ name[0] = std::toupper(name[0]);
+ return name;
+ });
+
+ std::copy(outv.begin(), outv.end(), std::ostream_iterator<std::string>(osstream, delim.c_str()));
+
+ std::string ret = osstream.str();
+
+ if (delim != "")
+ ret.pop_back(); // We could implement an infix_iterator but this pop is enough for now.
+
+ ret[0] = std::tolower(ret[0]);
+ return ret;
+ }
+
inline std::string remove_all(std::string name, char target)
{
name.erase(std::remove(name.begin(), name.end(), target), name.end());
diff --git a/src/bin/eolian_mono/eolian_mono.cc b/src/bin/eolian_mono/eolian_mono.cc
index b6d2b6f1a0..1a96aaa826 100644
--- a/src/bin/eolian_mono/eolian_mono.cc
+++ b/src/bin/eolian_mono/eolian_mono.cc
@@ -172,7 +172,8 @@ run(options_type const& opts)
"using System.Linq;\n"
"using System.Threading;\n"
"using System.ComponentModel;\n"
- "using System.Diagnostics.CodeAnalysis;\n")
+ "using System.Diagnostics.CodeAnalysis;\n"
+ "using System.Diagnostics.Contracts;\n")
.generate(iterator, efl::eolian::grammar::attributes::unused, efl::eolian::grammar::context_null()))
{
throw std::runtime_error("Failed to generate file preamble");
@@ -182,14 +183,13 @@ run(options_type const& opts)
auto context = context_add_tag(eolian_mono::indentation_context{0},
context_add_tag(eolian_mono::eolian_state_context{opts.state},
- context_add_tag(eolian_mono::class_context{eolian_mono::class_context::none},
context_add_tag(eolian_mono::options_context{opts.want_beta,
opts.examples_dir},
context_add_tag(eolian_mono::library_context{opts.dllimport,
opts.v_major,
opts.v_minor,
opts.references_map},
- efl::eolian::grammar::context_null())))));
+ efl::eolian::grammar::context_null()))));
EINA_ITERATOR_FOREACH(aliases, tp)
{
diff --git a/src/bin/ethumb_client/ethumbd.c b/src/bin/ethumb_client/ethumbd.c
index 476ecd4b52..a1790c7be3 100644
--- a/src/bin/ethumb_client/ethumbd.c
+++ b/src/bin/ethumb_client/ethumbd.c
@@ -249,7 +249,7 @@ static Eina_Bool
_ethumbd_timeout_cb(void *data)
{
Ethumbd *ed = data;
-
+
ecore_main_loop_quit();
ed->timeout_timer = NULL;
return EINA_FALSE;
@@ -282,7 +282,7 @@ static Eina_Bool
_ethumbd_hang_cb(void *data)
{
Ethumbd *ed = data;
-
+
ed->hang_timer = NULL;
if (ed->processing)
{
@@ -296,7 +296,7 @@ static void
_ethumbd_hang_start(Ethumbd *ed)
{
double tim = ed->timeout;
-
+
if (tim < 0) tim = 10.0;
else
{
@@ -1752,11 +1752,9 @@ main(int argc, char *argv[])
#elif _WIN32
SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
#endif
-
+
memset(&ed, 0, sizeof(ed));
ecore_init();
- eina_init();
-
ethumb_init();
if (_log_domain < 0)
@@ -1861,7 +1859,6 @@ main(int argc, char *argv[])
if (_pfx) eina_prefix_free(_pfx);
ethumb_shutdown();
- eina_shutdown();
ecore_shutdown();
return exit_value;
}
diff --git a/src/bin/ethumb_client/ethumbd_client.c b/src/bin/ethumb_client/ethumbd_client.c
index e81fc2e9a7..d833296f8c 100644
--- a/src/bin/ethumb_client/ethumbd_client.c
+++ b/src/bin/ethumb_client/ethumbd_client.c
@@ -246,7 +246,6 @@ main(int argc, char *argv[])
int i, ret = 0;
ethumb_client_init();
- ecore_init();
Ecore_Getopt_Value values[] = {
ECORE_GETOPT_VALUE_PTR_CAST(opts.geometry),
@@ -323,7 +322,6 @@ main(int argc, char *argv[])
eina_stringshare_del(opts.frame.group);
eina_stringshare_del(opts.frame.swallow);
}
- ecore_shutdown();
ethumb_client_shutdown();
return ret;
diff --git a/src/bin/ethumb_client/ethumbd_slave.c b/src/bin/ethumb_client/ethumbd_slave.c
index d7b7ff6680..1b805a4bd3 100644
--- a/src/bin/ethumb_client/ethumbd_slave.c
+++ b/src/bin/ethumb_client/ethumbd_slave.c
@@ -119,6 +119,11 @@ _ec_pipe_str_read(struct _Ethumbd_Child *ec EINA_UNUSED, char **str)
*str = NULL;
return 0;
}
+ if ((size < 0) || (size >= PATH_MAX))
+ {
+ *str = NULL;
+ return 0;
+ }
if (!size)
{
@@ -178,6 +183,8 @@ _ec_op_new(struct _Ethumbd_Child *ec)
r = _ec_read_safe(stdin, &idx, sizeof(idx));
if (!r)
return 0;
+ if ((idx < 0) || (idx >= NETHUMBS))
+ return 0;
DBG("ethumbd new(). idx = %d", idx);
@@ -194,6 +201,8 @@ _ec_op_del(struct _Ethumbd_Child *ec)
r = _ec_read_safe(stdin, &idx, sizeof(idx));
if (!r)
return 0;
+ if ((idx < 0) || (idx >= NETHUMBS))
+ return 0;
DBG("ethumbd del(). idx = %d", idx);
@@ -245,6 +254,8 @@ _ec_op_generate(struct _Ethumbd_Child *ec)
r = _ec_read_safe(stdin, &idx, sizeof(idx));
if (!r)
return 0;
+ if ((idx < 0) || (idx >= NETHUMBS))
+ return 0;
r = _ec_pipe_str_read(ec, &path);
if (!r)
@@ -667,6 +678,8 @@ _ec_op_setup(struct _Ethumbd_Child *ec)
r = _ec_read_safe(stdin, &idx, sizeof(idx));
if (!r)
return 0;
+ if ((idx < 0) || (idx >= NETHUMBS))
+ return 0;
r = _ec_read_safe(stdin, &type, sizeof(type));
if (!r)
diff --git a/src/bin/exactness/.gitignore b/src/bin/exactness/.gitignore
new file mode 100644
index 0000000000..2760101039
--- /dev/null
+++ b/src/bin/exactness/.gitignore
@@ -0,0 +1,5 @@
+/exactness
+/exactness_inject
+/exactness_inspect
+/exactness_play
+/exactness_record
diff --git a/src/bin/exactness/common.c b/src/bin/exactness/common.c
new file mode 100644
index 0000000000..d62d8fd519
--- /dev/null
+++ b/src/bin/exactness/common.c
@@ -0,0 +1,436 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "common.h"
+
+Eina_Bool
+ex_is_original_app(void)
+{
+ const char *original_pid_env = getenv("EXACTNESS_ORIGINAL_PID");
+ if (original_pid_env)
+ {
+ pid_t original_pid = atoi(original_pid_env);
+ if (original_pid == getpid())
+ return EINA_TRUE;
+ }
+ return EINA_FALSE;
+}
+
+void
+ex_set_original_envvar(void)
+{
+ const char *original_pid_env = getenv("EXACTNESS_ORIGINAL_PID");
+ if (!original_pid_env)
+ {
+ char pid[30];
+ snprintf(pid, sizeof(pid), "%d", getpid());
+ setenv("EXACTNESS_ORIGINAL_PID", pid, 0);
+ }
+}
+
+void
+ex_prepare_elm_overlay(void)
+{
+ elm_theme_overlay_add(NULL, DATA_DIR"/exactness_play.edj");
+}
+
+typedef struct _Dummy
+{
+} _Dummy;
+
+static Eet_Data_Descriptor *
+_mouse_wheel_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ Eet_Data_Descriptor *_d;
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action_Mouse_Wheel);
+ _d = eet_data_descriptor_stream_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Mouse_Wheel, "direction", direction, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Mouse_Wheel, "z", z, EET_T_INT);
+
+ return _d;
+}
+
+static Eet_Data_Descriptor *
+_key_down_up_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ Eet_Data_Descriptor *_d;
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action_Key_Down_Up);
+ _d = eet_data_descriptor_stream_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Key_Down_Up, "keyname", keyname, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Key_Down_Up, "key", key, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Key_Down_Up, "string", string, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Key_Down_Up, "compose", compose, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Key_Down_Up, "keycode", keycode, EET_T_INT);
+
+ return _d;
+}
+
+static Eet_Data_Descriptor *
+_multi_event_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ Eet_Data_Descriptor *_d;
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action_Multi_Event);
+ _d = eet_data_descriptor_stream_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "d", d, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "b", b, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "x", x, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "y", y, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "rad", rad, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "radx", radx, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "rady", rady, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "pres", pres, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "ang", ang, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "fx", fx, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "fy", fy, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Event, "flags", flags, EET_T_INT);
+
+ return _d;
+}
+
+static Eet_Data_Descriptor *
+_multi_move_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ Eet_Data_Descriptor *_d;
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action_Multi_Move);
+ _d = eet_data_descriptor_stream_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "d", d, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "x", x, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "y", y, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "rad", rad, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "radx", radx, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "rady", rady, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "pres", pres, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "ang", ang, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "fx", fx, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Multi_Move, "fy", fy, EET_T_DOUBLE);
+
+ return _d;
+}
+
+static Eet_Data_Descriptor *
+_efl_event_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ Eet_Data_Descriptor *_d;
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action_Efl_Event);
+ _d = eet_data_descriptor_stream_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Efl_Event, "wdg_name", wdg_name, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Efl_Event, "event_name", event_name, EET_T_STRING);
+
+ return _d;
+}
+
+static Eet_Data_Descriptor *
+_click_on_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ Eet_Data_Descriptor *_d;
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action_Click_On);
+ _d = eet_data_descriptor_stream_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_d, Exactness_Action_Click_On, "wdg_name", wdg_name, EET_T_STRING);
+
+ return _d;
+}
+
+static Eet_Data_Descriptor *
+_dummy_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ Eet_Data_Descriptor *_d;
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, _Dummy);
+ _d = eet_data_descriptor_stream_new(&eddc);
+
+ return _d;
+}
+
+/* !!! SAME ORDER AS Exactness_Action_Type */
+static const char *_mapping[] =
+{
+ "",
+ "exactness_action_mouse_in",
+ "exactness_action_mouse_out",
+ "exactness_action_mouse_wheel",
+ "exactness_action_multi_down",
+ "exactness_action_multi_up",
+ "exactness_action_multi_move",
+ "exactness_action_key_down",
+ "exactness_action_key_up",
+ "exactness_action_take_shot",
+ "exactness_action_efl_event",
+ "exactness_action_click_on",
+ "exactness_action_stabilize"
+};
+
+const char *
+_exactness_action_type_to_string_get(Exactness_Action_Type type)
+{
+ if (type <= EXACTNESS_ACTION_LAST) return _mapping[type];
+ return NULL;
+}
+
+static const char *
+_variant_type_get(const void *data, Eina_Bool *unknow)
+{
+ const Exactness_Action *act = data;
+
+ if (unknow) *unknow = EINA_FALSE;
+ if (act->type <= EXACTNESS_ACTION_LAST) return _mapping[act->type];
+
+ return NULL;
+}
+
+static Eina_Bool
+_variant_type_set(const char *type,
+ void *data,
+ Eina_Bool unknow EINA_UNUSED)
+{
+ int i;
+ Exactness_Action *act = data;
+ for (i = 0; i <= EXACTNESS_ACTION_LAST; i++)
+ {
+ if (!strcmp(_mapping[i], type)) act->type = i;
+ }
+ return EINA_TRUE;
+}
+
+static Eet_Data_Descriptor *
+_unit_desc_make(void)
+{
+ Eet_Data_Descriptor_Class eddc;
+ static Eet_Data_Descriptor *unit_d = NULL;
+ static Eet_Data_Descriptor *action_d = NULL, *action_variant_d = NULL;
+ static Eet_Data_Descriptor *objs_d = NULL;
+ static Eet_Data_Descriptor *obj_d = NULL;
+ if (!obj_d)
+ {
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Object);
+ obj_d = eet_data_descriptor_stream_new(&eddc);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(obj_d, Exactness_Object, "kl_name", kl_name, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(obj_d, Exactness_Object, "id", id, EET_T_ULONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(obj_d, Exactness_Object, "parent_id", parent_id, EET_T_ULONG_LONG);
+ /* Evas stuff */
+ EET_DATA_DESCRIPTOR_ADD_BASIC(obj_d, Exactness_Object, "x", x, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(obj_d, Exactness_Object, "y", y, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(obj_d, Exactness_Object, "w", w, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(obj_d, Exactness_Object, "h", h, EET_T_INT);
+
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Objects);
+ objs_d = eet_data_descriptor_stream_new(&eddc);
+ EET_DATA_DESCRIPTOR_ADD_LIST(objs_d, Exactness_Objects, "objs", objs, obj_d);
+ }
+ if (!unit_d)
+ {
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action);
+ action_d = eet_data_descriptor_stream_new(&eddc);
+
+ eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
+ eddc.func.type_get = _variant_type_get;
+ eddc.func.type_set = _variant_type_set;
+ action_variant_d = eet_data_descriptor_stream_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_MOUSE_IN], _dummy_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_MOUSE_OUT], _dummy_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_MOUSE_WHEEL], _mouse_wheel_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_MULTI_DOWN], _multi_event_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_MULTI_UP], _multi_event_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_MULTI_MOVE], _multi_move_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_KEY_DOWN], _key_down_up_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_KEY_UP], _key_down_up_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_TAKE_SHOT], _dummy_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_EFL_EVENT], _efl_event_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_CLICK_ON], _click_on_desc_make());
+ EET_DATA_DESCRIPTOR_ADD_MAPPING(action_variant_d,
+ _mapping[EXACTNESS_ACTION_STABILIZE], _dummy_desc_make());
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(action_d, Exactness_Action, "n_evas", n_evas, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(action_d, Exactness_Action, "delay_ms", delay_ms, EET_T_UINT);
+ EET_DATA_DESCRIPTOR_ADD_VARIANT(action_d, Exactness_Action, "data", data, type, action_variant_d);
+
+ /* Exactness_Unit */
+ EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Unit);
+ unit_d = eet_data_descriptor_stream_new(&eddc);
+ EET_DATA_DESCRIPTOR_ADD_LIST(unit_d, Exactness_Unit, "actions", actions, action_d);
+ EET_DATA_DESCRIPTOR_ADD_LIST(unit_d, Exactness_Unit, "objs", objs, objs_d);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(unit_d, Exactness_Unit, "fonts_path", fonts_path, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(unit_d, Exactness_Unit, "nb_shots", nb_shots, EET_T_UINT);
+ }
+
+ return unit_d;
+}
+/* END Event struct descriptors */
+
+Exactness_Unit *
+exactness_unit_file_read(const char *filename)
+{
+ int i;
+ Eina_List *itr, *itr2;
+ Exactness_Objects *e_objs;
+ Exactness_Object *e_obj, *e_parent;
+ Exactness_Unit *unit = NULL;
+ Eet_File *file;
+ eet_init();
+ file = eet_open(filename, EET_FILE_MODE_READ);
+ if (!file)
+ {
+ fprintf(stderr, "Impossible to extract EET from %s\n", filename);
+ return NULL;
+ }
+ unit = eet_data_read(file, _unit_desc_make(), "cache");
+ for (i = 0; i < unit->nb_shots; i++)
+ {
+ char entry[32];
+ Exactness_Image *ex_img = malloc(sizeof(*ex_img));
+ sprintf(entry, "images/%d", i + 1);
+ ex_img->pixels = eet_data_image_read(file, entry,
+ &ex_img->w, &ex_img->h, NULL,
+ NULL, NULL, NULL);
+ unit->imgs = eina_list_append(unit->imgs, ex_img);
+ }
+ EINA_LIST_FOREACH(unit->objs, itr, e_objs)
+ {
+ Eina_Hash *hash = eina_hash_pointer_new(NULL);
+ EINA_LIST_FOREACH(e_objs->objs, itr2, e_obj)
+ {
+ eina_hash_set(hash, &(e_obj->id), e_obj);
+ }
+ EINA_LIST_FOREACH(e_objs->objs, itr2, e_obj)
+ {
+ if (!e_obj->parent_id)
+ e_objs->main_objs = eina_list_append(e_objs->main_objs, e_obj);
+ else
+ {
+ e_parent = eina_hash_find(hash, &(e_obj->parent_id));
+ if (e_parent) e_parent->children = eina_list_append(e_parent->children, e_obj);
+ }
+ }
+ eina_hash_free(hash);
+ }
+ eet_close(file);
+ eet_shutdown();
+ return unit;
+}
+
+Eina_Bool
+exactness_unit_file_write(Exactness_Unit *unit, const char *filename)
+{
+ Eina_List *itr;
+ Exactness_Image *ex_img;
+ Eet_File *file;
+ int i = 1;
+ int bytes;
+ Eina_Bool ret = EINA_TRUE;
+
+ eet_init();
+ file = eet_open(filename, EET_FILE_MODE_WRITE);
+ eet_data_write(file, _unit_desc_make(), "cache", unit, EINA_TRUE);
+ EINA_LIST_FOREACH(unit->imgs, itr, ex_img)
+ {
+ char entry[32];
+ sprintf(entry, "images/%d", i++);
+ bytes = eet_data_image_write(file, entry, ex_img->pixels, ex_img->w, ex_img->h, 0xFF,
+ 0, 100, EET_IMAGE_LOSSLESS);
+ if (bytes == 0)
+ {
+ ret = EINA_FALSE;
+ break;
+ }
+ }
+ eet_close(file);
+ eet_shutdown();
+ return ret;
+}
+
+Eina_Bool
+exactness_image_compare(Exactness_Image *img1, Exactness_Image *img2, Exactness_Image **imgO)
+{
+ unsigned int w, h;
+ int *pxs1, *pxs2, *pxsO = NULL;
+ unsigned int w1 = img1 ? img1->w : 0, h1 = img1 ? img1->h : 0;
+ unsigned int w2 = img2 ? img2->w : 0, h2 = img2 ? img2->h : 0;
+ unsigned int wO = MAX(w1, w2);
+ unsigned int hO = MAX(h1, h2);
+ Eina_Bool ret = EINA_FALSE;
+ if (imgO) *imgO = NULL;
+ if (!wO || !hO) return EINA_FALSE;
+
+ pxs1 = img1 ? img1->pixels : NULL;
+ pxs2 = img2 ? img2->pixels : NULL;
+ if (imgO) pxsO = malloc(wO * hO * 4);
+
+ for (w = 0; w < wO; w++)
+ {
+ for (h = 0; h < hO; h++)
+ {
+ Eina_Bool valid1 = img1 ? w < w1 && h < h1 : EINA_FALSE;
+ Eina_Bool valid2 = img2 ? w < w2 && h < h2 : EINA_FALSE;
+ int px1 = valid1 ? pxs1[h * w1 + w] : 0;
+ int px2 = valid2 ? pxs2[h * w2 + w] : 0;
+ int r1 = (px1 & 0x00FF0000) >> 16;
+ int r2 = (px2 & 0x00FF0000) >> 16;
+ int g1 = (px1 & 0x0000FF00) >> 8;
+ int g2 = (px2 & 0x0000FF00) >> 8;
+ int b1 = (px1 & 0x000000FF);
+ int b2 = (px2 & 0x000000FF);
+ int new_r, new_g, new_b;
+ if (valid1 || valid2)
+ {
+ if (px1 != px2)
+ {
+ new_r = 0xFF;
+ new_g = ((g1 + g2) >> 1) >> 2;
+ new_b = ((b1 + b2) >> 1) >> 2;
+ ret = EINA_TRUE;
+ }
+ else
+ {
+ new_r = (((r1 + r2) >> 1) >> 2) + 0xC0;
+ new_g = (((g1 + g2) >> 1) >> 2) + 0xC0;
+ new_b = (((b1 + b2) >> 1) >> 2) + 0xC0;
+ }
+ }
+ else
+ {
+ new_r = new_g = new_b = 0x0;
+ }
+ if (pxsO) pxsO[h * wO + w] = 0xFF000000 | new_r << 16 | new_g << 8 | new_b;
+ }
+ }
+ if (imgO)
+ {
+ Exactness_Image *imgR = calloc(1, sizeof(Exactness_Image));
+ *imgO = imgR;
+ imgR->w = wO;
+ imgR->h = hO;
+ imgR->pixels = pxsO;
+ }
+ return ret;
+}
+
+void exactness_image_free(Exactness_Image *img)
+{
+ if (!img) return;
+ free(img->pixels);
+ free(img);
+}
diff --git a/src/bin/exactness/common.h b/src/bin/exactness/common.h
new file mode 100644
index 0000000000..8654fb9449
--- /dev/null
+++ b/src/bin/exactness/common.h
@@ -0,0 +1,269 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Eet.h>
+#include <Evas.h>
+#include <Elementary.h>
+
+typedef struct
+{
+ Eina_Debug_Session *session;
+ int srcid;
+ void *buffer;
+ unsigned int size;
+} _Main_Loop_Info;
+
+#define WRAPPER_TO_XFER_MAIN_LOOP(foo) \
+static void \
+_intern_main_loop ## foo(void *data) \
+{ \
+ _Main_Loop_Info *info = data; \
+ _main_loop ## foo(info->session, info->srcid, info->buffer, info->size); \
+ free(info->buffer); \
+ free(info); \
+} \
+static Eina_Bool \
+foo(Eina_Debug_Session *session, int srcid, void *buffer, int size) \
+{ \
+ _Main_Loop_Info *info = calloc(1, sizeof(*info)); \
+ info->session = session; \
+ info->srcid = srcid; \
+ info->size = size; \
+ if (info->size) \
+ { \
+ info->buffer = malloc(info->size); \
+ memcpy(info->buffer, buffer, info->size); \
+ } \
+ ecore_main_loop_thread_safe_call_async(_intern_main_loop ## foo, info); \
+ return EINA_TRUE; \
+}
+
+#ifndef WORDS_BIGENDIAN
+#define SWAP_64(x) x
+#define SWAP_32(x) x
+#define SWAP_16(x) x
+#define SWAP_DBL(x) x
+#else
+#define SWAP_64(x) eina_swap64(x)
+#define SWAP_32(x) eina_swap32(x)
+#define SWAP_16(x) eina_swap16(x)
+#define SWAP_DBL(x) SWAP_64(x)
+#endif
+
+#define EXTRACT_INT(_buf) \
+({ \
+ int __i; \
+ memcpy(&__i, _buf, sizeof(int)); \
+ _buf += sizeof(int); \
+ SWAP_32(__i); \
+})
+
+#define EXTRACT_DOUBLE(_buf) \
+({ \
+ double __d; \
+ memcpy(&__d, _buf, sizeof(double)); \
+ _buf += sizeof(double); \
+ SWAP_DBL(__d); \
+})
+
+#define EXTRACT_STRING(_buf) \
+({ \
+ char *__s = _buf ? strdup(_buf) : NULL; \
+ int __len = (__s ? strlen(__s) : 0) + 1; \
+ _buf += __len; \
+ __s; \
+})
+
+#define STORE_INT(_buf, __i) \
+({ \
+ int __si = SWAP_32(__i); \
+ memcpy(_buf, &__si, sizeof(int)); \
+ _buf += sizeof(int); \
+})
+
+#define STORE_DOUBLE(_buf, __d) \
+{ \
+ double __d2 = SWAP_DBL(__d); \
+ memcpy(_buf, &__d2, sizeof(double)); \
+ _buf += sizeof(double); \
+}
+
+#define STORE_STRING(_buf, __s) \
+{ \
+ int __len = (__s ? strlen(__s) : 0) + 1; \
+ if (__s) memcpy(_buf, __s, __len); \
+ else *_buf = '\0'; \
+ _buf += __len; \
+}
+
+#define SHOT_DELIMITER '+'
+
+/**
+ * The type values for an Exactness action.
+ */
+typedef enum
+{
+ EXACTNESS_ACTION_UNKNOWN = 0,
+ EXACTNESS_ACTION_MOUSE_IN,
+ EXACTNESS_ACTION_MOUSE_OUT,
+ EXACTNESS_ACTION_MOUSE_WHEEL,
+ EXACTNESS_ACTION_MULTI_DOWN,
+ EXACTNESS_ACTION_MULTI_UP,
+ EXACTNESS_ACTION_MULTI_MOVE,
+ EXACTNESS_ACTION_KEY_DOWN,
+ EXACTNESS_ACTION_KEY_UP,
+ EXACTNESS_ACTION_TAKE_SHOT,
+ EXACTNESS_ACTION_EFL_EVENT,
+ EXACTNESS_ACTION_CLICK_ON,
+ EXACTNESS_ACTION_STABILIZE,
+ EXACTNESS_ACTION_LAST = EXACTNESS_ACTION_STABILIZE
+ /* Add any supported actions here and update _LAST */
+} Exactness_Action_Type;
+
+/**
+ * The type for the Exactness Mouse Wheel action.
+ */
+typedef struct
+{
+ int direction;
+ int z;
+} Exactness_Action_Mouse_Wheel;
+
+/**
+ * The type for the Exactness Key Down Up action.
+ */
+typedef struct
+{
+ const char *keyname;
+ const char *key;
+ const char *string;
+ const char *compose;
+ unsigned int keycode;
+} Exactness_Action_Key_Down_Up;
+
+/**
+ * The type for the Exactness Multi Event action.
+ */
+typedef struct
+{
+ int d;
+ int b; /* In case of simple mouse down/up, corresponds to the button */
+ int x;
+ int y;
+ double rad;
+ double radx;
+ double rady;
+ double pres;
+ double ang;
+ double fx;
+ double fy;
+ Evas_Button_Flags flags;
+} Exactness_Action_Multi_Event;
+
+/**
+ * The type for the Exactness Multi Move action.
+ */
+typedef struct
+{
+ int d;
+ int x;
+ int y;
+ double rad;
+ double radx;
+ double rady;
+ double pres;
+ double ang;
+ double fx;
+ double fy;
+} Exactness_Action_Multi_Move;
+
+/**
+ * The type for the Exactness EFL Event action.
+ */
+typedef struct
+{
+ char *wdg_name; /**< Name of the widget */
+ char *event_name; /**< Name of the event */
+} Exactness_Action_Efl_Event;
+
+/**
+ * The type for the Exactness Click on (widget) action.
+ */
+typedef struct
+{
+ char *wdg_name; /**< Name of the widget */
+} Exactness_Action_Click_On;
+
+/**
+ * The type for the Exactness action.
+ */
+typedef struct
+{
+ Exactness_Action_Type type; /**< The action type */
+ unsigned int n_evas; /**< The evas number on which the action has to be applied */
+ unsigned int delay_ms; /**< The delay (in ms) to wait for this action */
+ void *data; /**< The specific action data */
+} Exactness_Action;
+
+/**
+ * The type for the Exactness object.
+ */
+typedef struct
+{
+ long long id; /**< The Eo pointer */
+ long long parent_id; /**< The Eo parent pointer */
+ const char *kl_name; /**< The class name */
+
+ Eina_List *children; /* NOT EET */
+
+ /* Evas stuff */
+ int x; /**< The X coordinate */
+ int y; /**< The Y coordinate */
+ int w; /**< The object width */
+ int h; /**< The object height */
+} Exactness_Object;
+
+/**
+ * The type for the Exactness objects list.
+ */
+typedef struct
+{
+ Eina_List *objs; /**< List of all the objects */
+ /* main_objs not in EET */
+ Eina_List *main_objs; /**< List of the main objects */
+} Exactness_Objects;
+
+/**
+ * The type for the Exactness Image.
+ */
+typedef struct
+{
+ unsigned int w; /**< Width of the image */
+ unsigned int h; /**< Height of the image */
+ void *pixels; /**< Pixels of the image */
+} Exactness_Image;
+
+/**
+ * An Exactness test unit, including the list of tested actions and produced images.
+ */
+typedef struct
+{
+ Eina_List *actions; /**< List of Exactness_Action */
+ /* imgs not in EET */
+ Eina_List *imgs; /**< List of Exactness_Image */
+ Eina_List *objs; /**< List of Exactness_Objects */
+ const char *fonts_path; /**< Path to the fonts to use, relative to the fonts dir given in parameter to the player/recorder */
+ int nb_shots; /**< The number of shots present in the unit */
+} Exactness_Unit;
+
+const char *_exactness_action_type_to_string_get(Exactness_Action_Type type);
+
+Eina_Bool ex_is_original_app(void);
+void ex_set_original_envvar(void);
+Eina_Bool exactness_image_compare(Exactness_Image *img1, Exactness_Image *img2, Exactness_Image **diff_img);
+Exactness_Unit *exactness_unit_file_read(const char *filename);
+Eina_Bool exactness_unit_file_write(Exactness_Unit *unit, const char *filename);
+void exactness_image_free(Exactness_Image *img);
+
+void ex_prepare_elm_overlay(void);
diff --git a/src/bin/exactness/exactness.c b/src/bin/exactness/exactness.c
new file mode 100644
index 0000000000..ee62cbd33f
--- /dev/null
+++ b/src/bin/exactness/exactness.c
@@ -0,0 +1,707 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Ecore.h>
+#include <Ecore_Getopt.h>
+#include <Ecore_Evas.h>
+#include <Ecore_File.h>
+
+#include "common.h"
+
+#ifdef _WIN32
+# include <evil_private.h> /* mkdir */
+#endif
+
+#define SCHEDULER_CMD_SIZE 1024
+
+#define ORIG_SUBDIR "orig"
+#define CURRENT_SUBDIR "current"
+
+#define BUF_SIZE 1024
+
+#define DBG(...) EINA_LOG_DOM_DBG(_log_domain, __VA_ARGS__)
+#define INF(...) EINA_LOG_DOM_INFO(_log_domain, __VA_ARGS__)
+#define ERR(...) EINA_LOG_DOM_ERR(_log_domain, __VA_ARGS__)
+#define CRI(...) EINA_LOG_DOM_CRIT(_log_domain, __VA_ARGS__)
+
+static int _log_domain = -1;
+
+typedef struct
+{
+ EINA_INLIST;
+ char *name;
+ const char *command;
+ double start_time;
+} List_Entry;
+
+typedef enum
+{
+ RUN_SIMULATION,
+ RUN_PLAY,
+ RUN_INIT
+} Run_Mode;
+
+static unsigned short _running_jobs = 0, _max_jobs = 1;
+static Eina_List *_base_dirs = NULL;
+static char *_dest_dir;
+static char *_wrap_command = NULL, *_fonts_dir = NULL;
+static int _verbose = 0;
+static Eina_Bool _scan_objs = EINA_FALSE, _disable_screenshots = EINA_FALSE, _stabilize_shots = EINA_FALSE;
+
+static Run_Mode _mode;
+static List_Entry *_next_test_to_run = NULL;
+static unsigned int _tests_executed = 0;
+
+static Eina_List *_errors;
+static Eina_List *_compare_errors;
+
+static Eina_Bool _job_consume();
+
+static Exactness_Image *
+_image_load(const char *filename)
+{
+ int w, h;
+ Evas_Load_Error err;
+ Ecore_Evas *ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL);
+ Eo *e = ecore_evas_get(ee);
+
+ Eo *img = evas_object_image_add(e);
+ evas_object_image_file_set(img, filename, NULL);
+ err = evas_object_image_load_error_get(img);
+ if (err != EVAS_LOAD_ERROR_NONE)
+ {
+ CRI("Failed to load image");
+ return NULL;
+ }
+
+ Exactness_Image *ex_img = malloc(sizeof(*ex_img));
+ int len;
+ evas_object_image_size_get(img, &w, &h);
+ ex_img->w = w;
+ ex_img->h = h;
+ len = w * h * 4;
+ ex_img->pixels = malloc(len);
+ memcpy(ex_img->pixels, evas_object_image_data_get(img, EINA_FALSE), len);
+
+ ecore_evas_free(ee);
+ return ex_img;
+}
+
+static Eina_Bool
+_image_save(Exactness_Image *ex_img, const char *output)
+{
+ Ecore_Evas *ee;
+ Eo *e, *img;
+ Eina_Bool ret = EINA_TRUE;
+ ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL);
+ e = ecore_evas_get(ee);
+ img = evas_object_image_add(e);
+ evas_object_image_size_set(img, ex_img->w, ex_img->h);
+ evas_object_image_data_set(img, ex_img->pixels);
+ if (!evas_object_image_save(img, output, NULL, NULL))
+ ret = EINA_FALSE;
+ ecore_evas_free(ee);
+ return ret;
+}
+
+static Eina_Bool
+_file_compare(const char *orig_dir, const char *ent_name)
+{
+ Eina_Bool result = EINA_FALSE;
+ Exactness_Image *img1, *img2, *imgO = NULL;
+ char *filename1 = alloca(strlen(orig_dir) + strlen(ent_name) + 20);
+ char *filename2 = alloca(strlen(_dest_dir) + strlen(ent_name) + 20);
+ sprintf(filename1, "%s/%s", orig_dir, ent_name);
+ sprintf(filename2, "%s/%s/%s", _dest_dir, CURRENT_SUBDIR, ent_name);
+
+ img1 = _image_load(filename1);
+ img2 = _image_load(filename2);
+
+ if (exactness_image_compare(img1, img2, &imgO))
+ {
+ char *buf = alloca(strlen(_dest_dir) + strlen(ent_name));
+ sprintf(buf, "%s/%s/comp_%s", _dest_dir, CURRENT_SUBDIR, ent_name);
+ if (!_image_save(imgO, buf))
+ goto cleanup;
+ _compare_errors = eina_list_append(_compare_errors, strdup(ent_name));
+ result = EINA_TRUE;
+ }
+cleanup:
+ exactness_image_free(img1);
+ exactness_image_free(img2);
+ exactness_image_free(imgO);
+ return result;
+}
+
+static void
+_exu_imgs_unpack(const char *exu_path, const char *dir, const char *ent_name)
+{
+ Exactness_Unit *unit = exactness_unit_file_read(exu_path);
+ Exactness_Image *img;
+ Eina_List *itr;
+ Ecore_Evas *ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL);
+ Eo *e = ecore_evas_get(ee);
+ int n = 1;
+ if (!unit) return;
+ EINA_LIST_FOREACH(unit->imgs, itr, img)
+ {
+ Eo *o = evas_object_image_add(e);
+ char *filename = alloca(strlen(dir) + strlen(ent_name) + 20);
+ snprintf(filename, PATH_MAX, "%s/%s%c%.3d.png",
+ dir, ent_name, SHOT_DELIMITER, n++);
+ evas_object_image_size_set(o, img->w, img->h);
+ evas_object_image_data_set(o, img->pixels);
+ if (!evas_object_image_save(o, filename, NULL, NULL))
+ {
+ printf("Cannot save widget to <%s>\n", filename);
+ }
+ efl_del(o);
+ }
+ ecore_evas_free(ee);
+}
+
+static void
+_run_test_compare(const List_Entry *ent)
+{
+ char *path = alloca(PATH_MAX);
+ char *origdir = alloca(strlen(_dest_dir) + 20);
+ const char *base_dir;
+ Eina_List *itr;
+ int n = 1, nb_fails = 0;
+ printf("STATUS %s: COMPARE\n", ent->name);
+ EINA_LIST_FOREACH(_base_dirs, itr, base_dir)
+ {
+ sprintf(path, "%s/%s.exu", base_dir, ent->name);
+ if (ecore_file_exists(path))
+ {
+ char *currentdir;
+ sprintf(origdir, "%s/%s/%s", _dest_dir, CURRENT_SUBDIR, ORIG_SUBDIR);
+ if (!ecore_file_exists(origdir))
+ {
+ if (mkdir(origdir, 0744) < 0)
+ {
+ CRI("Failed to create dir %s\n", origdir);
+ return;
+ }
+ }
+ _exu_imgs_unpack(path, origdir, ent->name);
+ sprintf(path, "%s/%s/%s.exu", _dest_dir, CURRENT_SUBDIR, ent->name);
+ currentdir = alloca(strlen(_dest_dir) + 20);
+ sprintf(currentdir, "%s/%s", _dest_dir, CURRENT_SUBDIR);
+ _exu_imgs_unpack(path, currentdir, ent->name);
+ goto found;
+ }
+ }
+found:
+ do
+ {
+ sprintf(path, "%s/%s%c%.3d.png", origdir, ent->name, SHOT_DELIMITER, n);
+ if (ecore_file_exists(path))
+ {
+ sprintf(path, "%s%c%.3d.png", ent->name, SHOT_DELIMITER, n);
+ if (_file_compare(origdir, path)) nb_fails++;
+ }
+ else break;
+ n++;
+ } while (EINA_TRUE);
+ if (!nb_fails)
+ {
+ double runtime = ecore_time_get() - ent->start_time;
+ printf("STATUS %s: END - SUCCESS (time: %.2fs)\n", ent->name, runtime);
+ }
+ else
+ printf("STATUS %s: END - FAIL (%d/%d)\n", ent->name, nb_fails, n - 1);
+}
+
+#define CONFIG "ELM_SCALE=1 ELM_FINGER_SIZE=10 "
+static Eina_Bool
+_run_command_prepare(List_Entry *ent, char *buf)
+{
+ char scn_path[PATH_MAX];
+ Eina_Strbuf *sbuf;
+ const char *base_dir;
+ Eina_List *itr;
+ EINA_LIST_FOREACH(_base_dirs, itr, base_dir)
+ {
+ sprintf(scn_path, "%s/%s.exu", base_dir, ent->name);
+ if (ecore_file_exists(scn_path)) goto ok;
+ }
+ CRI("Test %s not found in the provided base directories\n", ent->name);
+ return EINA_FALSE;
+ok:
+ sbuf = eina_strbuf_new();
+ printf("STATUS %s: START\n", ent->name);
+ ent->start_time = ecore_time_get();
+ eina_strbuf_append_printf(sbuf,
+ "%s exactness_play %s %s%s %s%.*s %s%s%s-t '%s' ",
+ _wrap_command ? _wrap_command : "",
+ _mode == RUN_SIMULATION ? "-s" : "",
+ _fonts_dir ? "-f " : "", _fonts_dir ? _fonts_dir : "",
+ _verbose ? "-" : "", _verbose, "vvvvvvvvvv",
+ _scan_objs ? "--scan-objects " : "",
+ _disable_screenshots ? "--disable-screenshots " : "",
+ _stabilize_shots ? "--stabilize-shots " : "",
+ scn_path
+ );
+
+ if (_mode == RUN_PLAY)
+ eina_strbuf_append_printf(sbuf, "-o '%s/%s/%s.exu' ", _dest_dir, CURRENT_SUBDIR, ent->name);
+ if (_mode == RUN_INIT)
+ eina_strbuf_append_printf(sbuf, "-o '%s' ", scn_path);
+
+ if (ent->command)
+ {
+ eina_strbuf_append(sbuf, "-- ");
+ eina_strbuf_append(sbuf, CONFIG);
+ eina_strbuf_append(sbuf, ent->command);
+ }
+ strncpy(buf, eina_strbuf_string_get(sbuf), SCHEDULER_CMD_SIZE-1);
+ eina_strbuf_free(sbuf);
+ printf("Command: %s\n", buf);
+ return EINA_TRUE;
+}
+
+static void
+_job_compare(void *data)
+{
+ _run_test_compare(data);
+
+ _running_jobs--;
+ _job_consume();
+ /* If all jobs are done. */
+ if (!_running_jobs) ecore_main_loop_quit();
+}
+
+static Eina_Bool
+_job_deleted_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_Exe_Event_Del *msg = (Ecore_Exe_Event_Del *) event;
+ List_Entry *ent = ecore_exe_data_get(msg->exe);
+
+ if ((msg->exit_code != 0) || (msg->exit_signal != 0))
+ {
+ _errors = eina_list_append(_errors, ent);
+ }
+
+ if (_mode == RUN_PLAY)
+ {
+ ecore_job_add(_job_compare, ent);
+ }
+ else
+ {
+ _running_jobs--;
+ _job_consume();
+ if (!_running_jobs) ecore_main_loop_quit();
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool
+_job_consume()
+{
+ static Ecore_Event_Handler *job_del_callback_handler = NULL;
+ char buf[SCHEDULER_CMD_SIZE];
+ List_Entry *ent = _next_test_to_run;
+
+ if (_running_jobs == _max_jobs) return EINA_FALSE;
+ if (!ent) return EINA_FALSE;
+
+ if (_run_command_prepare(ent, buf))
+ {
+ _running_jobs++;
+ _tests_executed++;
+
+ if (!job_del_callback_handler)
+ {
+ job_del_callback_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
+ _job_deleted_cb, NULL);
+ }
+
+ if (!ecore_exe_pipe_run(buf, ECORE_EXE_TERM_WITH_PARENT, ent))
+ {
+ CRI("Failed executing test '%s'\n", ent->name);
+ }
+ }
+ _next_test_to_run = EINA_INLIST_CONTAINER_GET(
+ EINA_INLIST_GET(ent)->next, List_Entry);
+
+
+ return EINA_TRUE;
+}
+
+static void
+_scheduler_run()
+{
+ while (_job_consume());
+}
+
+static List_Entry *
+_list_file_load(const char *filename)
+{
+ List_Entry *ret = NULL;
+ char buf[BUF_SIZE] = "";
+ FILE *file;
+ file = fopen(filename, "r");
+ if (!file)
+ {
+ perror("Failed opening list file");
+ return NULL;
+ }
+
+ while (fgets(buf, BUF_SIZE, file))
+ {
+ /* Skip comment/empty lines. */
+ if ((*buf == '#') || (*buf == '\n') || (!*buf))
+ continue;
+
+ char *tmp;
+ List_Entry *cur = calloc(1, sizeof(*cur));
+ cur->name = strdup(buf);
+
+ /* Set the command to the second half and put a \0 in between. */
+ tmp = strchr(cur->name, ' ');
+ if (tmp)
+ {
+ *tmp = '\0';
+ cur->command = tmp + 1;
+ }
+ else
+ {
+ /* FIXME: error. */
+ cur->command = "";
+ }
+
+ /* Replace the newline char with a \0. */
+ tmp = strchr(cur->command, '\n');
+ if (tmp)
+ {
+ *tmp = '\0';
+ }
+
+ ret = EINA_INLIST_CONTAINER_GET(
+ eina_inlist_append(EINA_INLIST_GET(ret), EINA_INLIST_GET(cur)),
+ List_Entry);
+ }
+
+ fclose(file);
+ return ret;
+}
+
+static void
+_list_file_free(List_Entry *list)
+{
+ while (list)
+ {
+ List_Entry *ent = list;
+ list = EINA_INLIST_CONTAINER_GET(EINA_INLIST_GET(list)->next,
+ List_Entry);
+
+ free(ent->name);
+ free(ent);
+ /* we don't free ent->command because it's allocated together. */
+ }
+}
+
+static int
+_errors_sort_cb(List_Entry *a, List_Entry *b)
+{
+ return strcmp(a->name, b->name);
+}
+
+static const Ecore_Getopt optdesc = {
+ "exactness",
+ "%prog [options] <-p|-i|-s> <test list file>",
+ PACKAGE_VERSION,
+ "(C) 2013-2020 Enlightenment",
+ "BSD",
+ "A pixel-perfect test suite for EFL-based applications.\n"
+ "\n"
+ "This binary allows running the individual tools `exactness_record` and\n"
+ "`exactness_play` in batch for a set of tests specified in a test list file.\n"
+ "\n"
+ "To obtain the reference templates (the \"golden\" files):\n"
+ "1.For each tested application, run `exactness_record` to launch the\n"
+ " application and record actions like keystrokes and mouse clicks.\n"
+ " This produces a test file with `.exu` extension.\n"
+ "2.Run `exactness` in init mode (-i) to execute the stored actions in all\n"
+ " the tests in the test list file and obtain screenshots.\n"
+ " The screenshots are embedded into the test `.exu` file.\n"
+ "\n"
+ "To check if the application currently matches the reference templates:\n"
+ "1.Run `exactness` in play mode (-p) to execute the stored actions in all\n"
+ " the tests in the test list file and compare the obtained screenshots\n"
+ " with the stored versions (the reference templates).\n"
+ " If mismatches are detected an error report is produced, including\n"
+ " a graphical diff of the screenshots.\n"
+ "\n"
+ "The test list file contains one line per test. Each line starts with the\n"
+ "test file name (without the `.exu` extension), a space and then the command\n"
+ "to execute, including parameters if any. # indicates a comment.\n"
+ "Example:\n"
+ "separator elementary_test -to Separator",
+ 0,
+ {
+ ECORE_GETOPT_APPEND('b', "base-dir", "The location of the exu files. Defaults to `./recordings/`.",
+ ECORE_GETOPT_TYPE_STR),
+ ECORE_GETOPT_STORE_STR('o', "output", "The location of the images. Defaults to `./`."),
+ ECORE_GETOPT_STORE_STR('w', "wrap", "Use a custom command to launch the tests (e.g valgrind)."),
+ ECORE_GETOPT_STORE_USHORT('j', "jobs", "The number of jobs to run in parallel. Defaults to 1."),
+ ECORE_GETOPT_STORE_TRUE('p', "play", "Run in play mode. Actions are executed and obtained "
+ "screenshots are compared to the stored version (golden templates)."),
+ ECORE_GETOPT_STORE_TRUE('i', "init", "Run in init mode. Actions are executed and obtained "
+ "screenshots are stored to be used as golden templates in the future."),
+ ECORE_GETOPT_STORE_TRUE('s', "simulation", "Run in simulation mode. Actions are executed and "
+ "displayed but no screenshot is obtained. Useful for debugging."),
+ ECORE_GETOPT_STORE_TRUE(0, "scan-objects", "Extract information of all the objects at every shot (UNUSED)."),
+ ECORE_GETOPT_STORE_TRUE(0, "disable-screenshots", "Disable screenshots. Only checks that actions "
+ "can be performed and the application does not crash."),
+ ECORE_GETOPT_STORE_STR('f', "fonts-dir", "Specify a directory of the fonts that should be used."),
+ ECORE_GETOPT_STORE_TRUE(0, "stabilize-shots", "Wait for the frames to be stable before taking the shots."),
+ ECORE_GETOPT_COUNT('v', "verbose", "Turn verbose messages on."),
+
+ ECORE_GETOPT_LICENSE('L', "license"),
+ ECORE_GETOPT_COPYRIGHT('C', "copyright"),
+ ECORE_GETOPT_VERSION('V', "version"),
+ ECORE_GETOPT_HELP('h', "help"),
+ ECORE_GETOPT_SENTINEL
+ }
+};
+
+int
+main(int argc, char *argv[])
+{
+ int ret = 0;
+ List_Entry *test_list;
+ int args = 0;
+ const char *list_file;
+ Eina_List *itr;
+ const char *base_dir;
+ char tmp[PATH_MAX];
+ Eina_Bool mode_play = EINA_FALSE, mode_init = EINA_FALSE, mode_simulation = EINA_FALSE;
+ Eina_Bool want_quit = EINA_FALSE, scan_objs = EINA_FALSE;
+ Ecore_Getopt_Value values[] = {
+ ECORE_GETOPT_VALUE_LIST(_base_dirs),
+ ECORE_GETOPT_VALUE_STR(_dest_dir),
+ ECORE_GETOPT_VALUE_STR(_wrap_command),
+ ECORE_GETOPT_VALUE_USHORT(_max_jobs),
+ ECORE_GETOPT_VALUE_BOOL(mode_play),
+ ECORE_GETOPT_VALUE_BOOL(mode_init),
+ ECORE_GETOPT_VALUE_BOOL(mode_simulation),
+ ECORE_GETOPT_VALUE_BOOL(scan_objs),
+ ECORE_GETOPT_VALUE_BOOL(_disable_screenshots),
+ ECORE_GETOPT_VALUE_STR(_fonts_dir),
+ ECORE_GETOPT_VALUE_BOOL(_stabilize_shots),
+ ECORE_GETOPT_VALUE_INT(_verbose),
+
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_NONE
+ };
+
+ if (!ecore_evas_init())
+ return EXIT_FAILURE;
+
+ _log_domain = eina_log_domain_register("exactness", "red");
+ _dest_dir = "./";
+ _scan_objs = scan_objs;
+
+ eina_log_abort_on_critical_set(EINA_TRUE);
+ eina_log_abort_on_critical_level_set(EINA_LOG_LEVEL_ERR);
+
+ args = ecore_getopt_parse(&optdesc, values, argc, argv);
+ if (args < 0)
+ {
+ fprintf(stderr, "Failed parsing arguments.\n");
+ ret = 1;
+ goto end;
+ }
+ else if (want_quit)
+ {
+ ret = 1;
+ goto end;
+ }
+ else if (args == argc)
+ {
+ fprintf(stderr, "Expected test list file as the last argument..\n");
+ ecore_getopt_help(stderr, &optdesc);
+ ret = 1;
+ goto end;
+ }
+ else if (mode_play + mode_init + mode_simulation != 1)
+ {
+ fprintf(stderr, "Exactly one running mode must be set.\n");
+ ecore_getopt_help(stderr, &optdesc);
+ ret = 1;
+ goto end;
+ }
+
+ if (!_base_dirs) _base_dirs = eina_list_append(NULL, "./recordings");
+
+ list_file = argv[args];
+
+ /* Load the list file and start iterating over the records. */
+ test_list = _list_file_load(list_file);
+ _next_test_to_run = test_list;
+
+ if (!test_list)
+ {
+ fprintf(stderr, "No matching tests found in list file '%s'\n", list_file);
+ ret = 1;
+ goto end;
+ }
+
+ /* Pre-run summary */
+ fprintf(stderr, "Running with settings:\n");
+ fprintf(stderr, "\tConcurrent jobs: %d\n", _max_jobs);
+ fprintf(stderr, "\tTest list file: %s\n", list_file);
+ fprintf(stderr, "\tBase dirs:\n");
+ EINA_LIST_FOREACH(_base_dirs, itr, base_dir)
+ fprintf(stderr, "\t\t%s\n", base_dir);
+ fprintf(stderr, "\tDest dir: %s\n", _dest_dir);
+
+ if (mode_play)
+ {
+ _mode = RUN_PLAY;
+ if (snprintf(tmp, PATH_MAX, "%s/%s", _dest_dir, CURRENT_SUBDIR)
+ >= PATH_MAX)
+ {
+ fprintf(stderr, "Path too long: %s", tmp);
+ ret = 1;
+ goto end;
+ }
+ if (!ecore_file_exists(tmp))
+ {
+ if (mkdir(tmp, 0744) < 0)
+ {
+ fprintf(stderr, "Failed to create dir %s", tmp);
+ ret = 1;
+ goto end;
+ }
+ }
+ }
+ else if (mode_init)
+ {
+ _mode = RUN_INIT;
+ if (snprintf(tmp, PATH_MAX, "%s/%s", _dest_dir, ORIG_SUBDIR)
+ >= PATH_MAX)
+ {
+ fprintf(stderr, "Path too long: %s", tmp);
+ ret = 1;
+ goto end;
+ }
+ if (!ecore_file_exists(tmp))
+ {
+ if (mkdir(tmp, 0744) < 0)
+ {
+ fprintf(stderr, "Failed to create dir %s", tmp);
+ ret = 1;
+ goto end;
+ }
+ }
+ }
+ else if (mode_simulation)
+ {
+ _mode = RUN_SIMULATION;
+ }
+ _scheduler_run();
+
+
+ ecore_main_loop_begin();
+
+ /* Results */
+ printf("*******************************************************\n");
+ if (mode_play && EINA_FALSE)
+ {
+ List_Entry *list_itr;
+
+ EINA_INLIST_FOREACH(test_list, list_itr)
+ {
+ _run_test_compare(list_itr);
+ }
+ }
+
+ printf("Finished executing %u out of %u tests.\n",
+ _tests_executed,
+ eina_inlist_count(EINA_INLIST_GET(test_list)));
+ printf("%u tests executed\n", _tests_executed);
+ printf("%u tests had execution errors\n", eina_list_count(_errors));
+ printf("%u screenshots failed comparison\n", eina_list_count(_compare_errors));
+
+ /* Sort the errors and the compare_errors. */
+ _errors = eina_list_sort(_errors, 0, (Eina_Compare_Cb) _errors_sort_cb);
+ _compare_errors = eina_list_sort(_compare_errors, 0, (Eina_Compare_Cb) strcmp);
+
+ if (_errors || _compare_errors)
+ {
+ FILE *report_file;
+ char report_filename[PATH_MAX] = "";
+ /* Generate the filename. */
+ snprintf(report_filename, PATH_MAX,
+ "%s/%s/errors.html",
+ _dest_dir, mode_init ? ORIG_SUBDIR : CURRENT_SUBDIR);
+ report_file = fopen(report_filename, "w+");
+ if (report_file)
+ {
+ fprintf(report_file,
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
+ "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Exactness report</title></head><body>");
+
+ if (_errors)
+ {
+ fprintf(report_file,
+ "<h1>Tests that failed execution:</h1><ul>");
+ List_Entry *ent;
+ printf("List of tests that failed execution:\n");
+ EINA_LIST_FOREACH(_errors, itr, ent)
+ {
+ printf("\t* %s\n", ent->name);
+
+ fprintf(report_file, "<li>%s</li>", ent->name);
+ }
+ fprintf(report_file, "</ul>");
+ }
+
+ if (_compare_errors)
+ {
+ fprintf(report_file,
+ "<h1>Images that failed comparison: (Original, Current, Diff)</h1><ul>");
+ char *test_name;
+ printf("List of images that failed comparison:\n");
+ EINA_LIST_FREE(_compare_errors, test_name)
+ {
+ Eina_Bool is_from_exu;
+ char origpath[PATH_MAX];
+ snprintf(origpath, PATH_MAX, "%s/%s/orig/%s",
+ _dest_dir, CURRENT_SUBDIR, test_name);
+ is_from_exu = ecore_file_exists(origpath);
+ printf("\t* %s\n", test_name);
+
+ fprintf(report_file, "<li><h2>%s</h2> <img src='%sorig/%s' alt='Original' /> <img src='%s' alt='Current' /> <img src='comp_%s' alt='Diff' /></li>",
+ test_name, is_from_exu ? "" : "../",
+ test_name, test_name, test_name);
+ free(test_name);
+ }
+ fprintf(report_file, "</ul>");
+ }
+ fprintf(report_file,
+ "</body></html>");
+
+ printf("Report html: %s\n", report_filename);
+ ret = 1;
+ }
+ else
+ {
+ perror("Failed opening report file");
+ }
+ }
+
+ _list_file_free(test_list);
+end:
+ ecore_evas_shutdown();
+
+ return ret;
+}
diff --git a/src/bin/exactness/exactness_play.in b/src/bin/exactness/exactness_play.in
new file mode 100644
index 0000000000..38200d9ba1
--- /dev/null
+++ b/src/bin/exactness/exactness_play.in
@@ -0,0 +1,101 @@
+#!/usr/bin/env python3
+
+import argparse
+import subprocess
+import os
+
+parser = argparse.ArgumentParser(description='A recorded scenario player for EFL-based applications.\n\n'
+ 'Actions recorded with `exactness_record` can be played back with this\n'
+ 'application and screenshots obtained. It is typically more convenient to\n'
+ 'use the `exactness` wrapper in "play" mode to process files in batches.',
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ epilog='Example:\n'
+ 'exactness_play -s -t my_app.exu -- my_app --app --arguments')
+parser.add_argument('app', metavar='app', help='The app to run. You can also pass environment variables here. '
+ 'Use a -- if you need to provide arguments to the app.',
+ type=str, nargs='*')
+parser.add_argument('-o', '--output', metavar='output', help="Destination for the shots. "
+ "If a `.exu` file is given, the shots are stored in the file. "
+ "Otherwise the given path is considered as a directory "
+ "where shots will be stored. "
+ "If omitted, the output type (exu or dir) is determined "
+ "by the given test extension (resp. exu or rec).", type=str)
+parser.add_argument('-t', '--tests', metavar='tests', help='Name of the file where to store the test.', type=str)
+parser.add_argument('-s', '--show-on-screen', help='Show on screen', action='store_true', default=False)
+parser.add_argument('--scan-objects', help='Extract information of all the objects at every shot.', action='store_true')
+parser.add_argument('--external-injection', help='Expect events injection via Eina debug channel.', action='store_true')
+parser.add_argument('--disable-screenshots', help='Disable screenshots.', action='store_true')
+parser.add_argument('-f', '--fontsdir', metavar='fontsdir', help='Specify a directory of the fonts that should be used.', type=str)
+parser.add_argument('--stabilize-shots', help='Wait for the frames to be stable before taking the shots.', action='store_true')
+parser.add_argument('--speed', metavar='speed', help='Set the speed used to play the given test (default 1.0).', type=float, default=1.0)
+parser.add_argument('-v', '--verbose', help='Turn verbose messages on', action='store_true')
+parser.add_argument('-L', '--license', help='Print license information and exit.', action='store_true')
+parser.add_argument('-C', '--copyright', help='Print copyright information and exit.', action='store_true')
+parser.add_argument('-V', '--version', help='Print version information and exit.', action='store_true')
+
+G = parser.parse_args()
+
+if G.license:
+ print("BSD.")
+ exit(0)
+
+if G.copyright:
+ print("(C) 2017-2020 Enlightenment.")
+ exit(0)
+
+if G.version:
+ print(@VERSION@)
+ exit(0)
+
+spawn_env = os.environ.copy()
+spawn_env["LD_PRELOAD"] = @EXACTNESS_PLAY_PRELOAD_PATH@
+
+if G.tests == None and G.external_injection == True:
+ print("no test file specified")
+ exit(-1)
+if G.tests != None and G.external_injection == True:
+ print("Cannot inject events from a source file and from outside simultaneously")
+ exit(-1)
+if G.scan_objects == True and G.tests.endswith(".exu"):
+ printf("Scan objects options is available only if the destination is a EXU file")
+ exit(-1)
+
+if G.output != None:
+ spawn_env["EXACTNESS_DEST"] = G.output;
+if G.external_injection:
+ spawn_env["EXACTNESS_EXTERNAL_INJECTION"] = "Yes"
+if G.tests != None:
+ spawn_env["EXACTNESS_SRC"] = G.tests
+if G.fontsdir != None:
+ spawn_env["EXACTNESS_FONTS_DIR"] = G.fontsdir
+if G.speed != 1.0:
+ spawn_env["EXACTNESS_SPEED"] = G.speed
+if G.scan_objects:
+ spawn_env["EXACTNESS_SCAN_OBJECTS"] = "Yes"
+if G.disable_screenshots:
+ spawn_env["EXACTNESS_DISABLE_SHOTS"] = "Yes"
+if G.stabilize_shots:
+ spawn_env["EXACTNESS_STABILIZE_SHOTS"] = "Yes"
+if G.verbose:
+ spawn_env["EXACTNESS_VERBOSE"] = "Yes"
+if G.show_on_screen == False:
+ spawn_env["ELM_DISPLAY"] = "buffer"
+
+passed_all_the_env_vars = False
+app = []
+
+for argument in G.app:
+ if '=' not in argument:
+ passed_all_the_env_vars = True
+ else:
+ if passed_all_the_env_vars:
+ print("Error, env vars can only be specified at the beginning of the app call line")
+ exit(-1)
+ split_env_var = argument.split('=')
+ spawn_env[split_env_var[0]] = split_env_var[1]
+
+ if passed_all_the_env_vars:
+ app.append(argument)
+
+recorder = subprocess.Popen(app, env=spawn_env)
+recorder.wait()
diff --git a/src/bin/exactness/exactness_record.in b/src/bin/exactness/exactness_record.in
new file mode 100644
index 0000000000..377d465199
--- /dev/null
+++ b/src/bin/exactness/exactness_record.in
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+
+import argparse
+import subprocess
+import os
+
+parser = argparse.ArgumentParser(description='A scenario recorder for EFL-based applications.\n\n'
+ 'This records all actions the user performs on an EFL application (like keystrokes\n'
+ 'and mouse clicks) and stores them on a file.\n'
+ 'Later on, the `exactness` or `exactness_play` commands can be used to play\n'
+ 'back these actions and obtain screenshots.\n'
+ '\n'
+ 'While running this application, use the following keys to control the process:\n'
+ '\tF1 - Request stabilization.\n'
+ '\tF2 - Request screenshot.\n'
+ '\tF3 - Request to save the scenario.\n'
+ '\n'
+ 'Note: If you don\'t press F3 at least once, no output file will be generated.',
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ epilog='Example:\n'
+ 'exactness_record -t my_app.exu -- my_app --app --arguments')
+parser.add_argument('app', metavar='app', help='The app to run. You can also pass environment variables here. '
+ 'Use a -- if you need to provide arguments to the app.',
+ type=str, nargs='*')
+parser.add_argument('-t', '--tests', metavar='tests', help='Name of the file where to store the test. '
+ 'It is recommended to use the `.exu` extension.', type=str)
+parser.add_argument('-f', '--fontsdir', metavar='fontsdir', help='Directory of the fonts that should be used.',
+ type=str)
+parser.add_argument('-L', '--license', help='Print license information and exit.', action='store_true')
+parser.add_argument('-C', '--copyright', help='Print copyright information and exit.', action='store_true')
+parser.add_argument('-V', '--version', help='Print version information and exit.', action='store_true')
+
+G = parser.parse_args()
+
+if G.license:
+ print("BSD.")
+ exit(0)
+
+if G.copyright:
+ print("(C) 2017-2020 Enlightenment.")
+ exit(0)
+
+if G.version:
+ print(@VERSION@)
+ exit(0)
+
+spawn_env = os.environ.copy()
+spawn_env["LD_PRELOAD"] = @EXACTNESS_RECORD_PRELOAD_PATH@
+
+if G.tests != None:
+ spawn_env["EXACTNESS_DEST"] = G.tests
+else:
+ print("Tests dir must be passed!")
+ exit(-1)
+
+if G.fontsdir != None:
+ spawn_env["EXACTNESS_FONTS_DIR"] = G.fontsdir
+
+passed_all_the_env_vars = False
+app = []
+
+for argument in G.app:
+ if '=' not in argument:
+ passed_all_the_env_vars = True
+ else:
+ if passed_all_the_env_vars:
+ print("Error, env vars can only be specified at the beginning of the app call line")
+ exit(-1)
+ split_env_var = argument.split('=')
+ spawn_env[split_env_var[0]] = split_env_var[1]
+
+ if passed_all_the_env_vars:
+ app.append(argument)
+
+recorder = subprocess.Popen(app, env=spawn_env)
+recorder.wait()
diff --git a/src/bin/exactness/injector.c b/src/bin/exactness/injector.c
new file mode 100644
index 0000000000..183a5112eb
--- /dev/null
+++ b/src/bin/exactness/injector.c
@@ -0,0 +1,393 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <unistd.h>
+
+#include <Eina.h>
+#include <Eet.h>
+#include <Ecore.h>
+#include <Ecore_Getopt.h>
+#include <Elementary.h>
+
+#include "common.h"
+
+#define DBG(...) EINA_LOG_DOM_DBG(_log_domain, __VA_ARGS__)
+#define INF(...) EINA_LOG_DOM_INFO(_log_domain, __VA_ARGS__)
+
+static int _log_domain = -1;
+
+static Eina_Stringshare *_src_filename = NULL;
+static Exactness_Unit *_src_unit = NULL;
+static int _verbose = 0;
+
+static Eina_Debug_Session *_session = NULL;
+static int _cid = -1, _pid = -1;
+static Eina_List *_cur_event_list = NULL;
+
+static int _all_apps_get_op = EINA_DEBUG_OPCODE_INVALID;
+static int _mouse_in_op = EINA_DEBUG_OPCODE_INVALID;
+static int _mouse_out_op = EINA_DEBUG_OPCODE_INVALID;
+static int _mouse_wheel_op = EINA_DEBUG_OPCODE_INVALID;
+static int _multi_down_op = EINA_DEBUG_OPCODE_INVALID;
+static int _multi_up_op = EINA_DEBUG_OPCODE_INVALID;
+static int _multi_move_op = EINA_DEBUG_OPCODE_INVALID;
+static int _key_down_op = EINA_DEBUG_OPCODE_INVALID;
+static int _key_up_op = EINA_DEBUG_OPCODE_INVALID;
+static int _take_shot_op = EINA_DEBUG_OPCODE_INVALID;
+static int _efl_event_op = EINA_DEBUG_OPCODE_INVALID;
+static int _click_on_op = EINA_DEBUG_OPCODE_INVALID;
+static int _stabilize_op = EINA_DEBUG_OPCODE_INVALID;
+static int _finish_op = EINA_DEBUG_OPCODE_INVALID;
+
+static Eina_Bool _all_apps_get_cb(Eina_Debug_Session *, int , void *, int);
+
+EINA_DEBUG_OPCODES_ARRAY_DEFINE(_debug_ops,
+ {"Daemon/Client/register_observer", &_all_apps_get_op, NULL},
+ {"Daemon/Client/added", NULL, &_all_apps_get_cb},
+ {"Exactness/Actions/Mouse In", &_mouse_in_op, NULL},
+ {"Exactness/Actions/Mouse Out", &_mouse_out_op, NULL},
+ {"Exactness/Actions/Mouse Wheel", &_mouse_wheel_op, NULL},
+ {"Exactness/Actions/Multi Down", &_multi_down_op, NULL},
+ {"Exactness/Actions/Multi Up", &_multi_up_op, NULL},
+ {"Exactness/Actions/Multi Move", &_multi_move_op, NULL},
+ {"Exactness/Actions/Key Down", &_key_down_op, NULL},
+ {"Exactness/Actions/Key Up", &_key_up_op, NULL},
+ {"Exactness/Actions/Take Shot", &_take_shot_op, NULL},
+ {"Exactness/Actions/EFL Event", &_efl_event_op, NULL},
+ {"Exactness/Actions/Click On", &_click_on_op, NULL},
+ {"Exactness/Actions/Stabilize", &_stabilize_op, NULL},
+ {"Exactness/Actions/Finish", &_finish_op, NULL},
+ {NULL, NULL, NULL}
+ );
+
+static void
+_feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
+{
+ switch (type)
+ {
+ case EXACTNESS_ACTION_MOUSE_IN:
+ {
+ INF("Mouse in\n");
+ DBG("%s evas_event_feed_mouse_in n_evas=<%d>\n", __func__, n_evas);
+ eina_debug_session_send(_session, _cid, _mouse_in_op, &n_evas, sizeof(int));
+ break;
+ }
+ case EXACTNESS_ACTION_MOUSE_OUT:
+ {
+ INF("Mouse out\n");
+ DBG("%s evas_event_feed_mouse_out n_evas=<%d>\n", __func__, n_evas);
+ eina_debug_session_send(_session, _cid, _mouse_out_op, &n_evas, sizeof(int));
+ break;
+ }
+ case EXACTNESS_ACTION_MOUSE_WHEEL:
+ {
+ Exactness_Action_Mouse_Wheel *t = data;
+ int len = 3*sizeof(int);
+ char *buf = malloc(len), *tmp = buf;
+ INF("Mouse wheel\n");
+ DBG("%s evas_event_feed_mouse_wheel n_evas=<%d>\n", __func__, n_evas);
+ STORE_INT(tmp, n_evas);
+ STORE_INT(tmp, t->direction);
+ STORE_INT(tmp, t->z);
+ eina_debug_session_send(_session, _cid, _mouse_wheel_op, buf, len);
+ free(buf);
+ break;
+ }
+ case EXACTNESS_ACTION_MULTI_DOWN:
+ case EXACTNESS_ACTION_MULTI_UP:
+ {
+ Exactness_Action_Multi_Event *t = data;
+ int len = 5*sizeof(int)+7*sizeof(double)+sizeof(int);
+ char *buf = malloc(len), *tmp = buf;
+ DBG("%s %s n_evas=<%d>\n", __func__,
+ type == EXACTNESS_ACTION_MULTI_DOWN ? "evas_event_feed_multi_down" :
+ "evas_event_feed_multi_up", n_evas);
+ STORE_INT(tmp, n_evas);
+ STORE_INT(tmp, t->d);
+ STORE_INT(tmp, t->b);
+ STORE_INT(tmp, t->x);
+ STORE_INT(tmp, t->y);
+ STORE_DOUBLE(tmp, t->rad);
+ STORE_DOUBLE(tmp, t->radx);
+ STORE_DOUBLE(tmp, t->rady);
+ STORE_DOUBLE(tmp, t->pres);
+ STORE_DOUBLE(tmp, t->ang);
+ STORE_DOUBLE(tmp, t->fx);
+ STORE_DOUBLE(tmp, t->fy);
+ STORE_INT(tmp, t->flags);
+ eina_debug_session_send(_session, _cid,
+ type == EXACTNESS_ACTION_MULTI_DOWN ? _multi_down_op : _multi_up_op,
+ buf, len);
+ free(buf);
+ break;
+ }
+ case EXACTNESS_ACTION_MULTI_MOVE:
+ {
+ Exactness_Action_Multi_Move *t = data;
+ int len = 4*sizeof(int)+7*sizeof(double);
+ char *buf = malloc(len), *tmp = buf;
+ DBG("%s evas_event_feed_multi_move n_evas=<%d>\n", __func__, n_evas);
+ STORE_INT(tmp, n_evas);
+ STORE_INT(tmp, t->d);
+ STORE_INT(tmp, t->x);
+ STORE_INT(tmp, t->y);
+ STORE_DOUBLE(tmp, t->rad);
+ STORE_DOUBLE(tmp, t->radx);
+ STORE_DOUBLE(tmp, t->rady);
+ STORE_DOUBLE(tmp, t->pres);
+ STORE_DOUBLE(tmp, t->ang);
+ STORE_DOUBLE(tmp, t->fx);
+ STORE_DOUBLE(tmp, t->fy);
+ eina_debug_session_send(_session, _cid, _multi_move_op, buf, len);
+ free(buf);
+ break;
+ }
+ case EXACTNESS_ACTION_KEY_DOWN:
+ case EXACTNESS_ACTION_KEY_UP:
+ {
+ Exactness_Action_Key_Down_Up *t = data;
+ int len = 2*sizeof(int) + 4 + 1;
+ len += t->keyname ? strlen(t->keyname) : 0;
+ len += t->key ? strlen(t->key) : 0;
+ len += t->string ? strlen(t->string) : 0;
+ len += t->compose ? strlen(t->compose) : 0;
+ char *buf = malloc(len), *tmp = buf;
+ DBG("%s %s n_evas=<%d>\n", __func__,
+ type == EXACTNESS_ACTION_KEY_DOWN ? "evas_event_feed_key_down " :
+ "evas_event_feed_key_up", n_evas);
+ STORE_INT(tmp, n_evas);
+ STORE_STRING(tmp, t->keyname);
+ STORE_STRING(tmp, t->key);
+ STORE_STRING(tmp, t->string);
+ STORE_STRING(tmp, t->compose);
+ STORE_INT(tmp, t->keycode);
+ eina_debug_session_send(_session, _cid,
+ type == EXACTNESS_ACTION_KEY_DOWN ? _key_down_op : _key_up_op,
+ buf, len);
+ free(buf);
+ break;
+ }
+ case EXACTNESS_ACTION_TAKE_SHOT:
+ {
+ DBG("%s take shot n_evas=<%d>\n", __func__, n_evas);
+ eina_debug_session_send(_session, _cid, _take_shot_op, &n_evas, sizeof(int));
+ break;
+ }
+ case EXACTNESS_ACTION_EFL_EVENT:
+ {
+ Exactness_Action_Efl_Event *t = data;
+ int len = 2;
+ len += t->wdg_name ? strlen(t->wdg_name) : 0;
+ len += t->event_name ? strlen(t->event_name) : 0;
+ char *buf = malloc(len), *tmp = buf;
+ DBG("%s %s\n", __func__, "EFL event");
+ STORE_STRING(tmp, t->wdg_name);
+ STORE_STRING(tmp, t->event_name);
+ eina_debug_session_send(_session, _cid, _efl_event_op, buf, len);
+ free(buf);
+ break;
+ }
+ case EXACTNESS_ACTION_CLICK_ON:
+ {
+ Exactness_Action_Click_On *t = data;
+ int len = 1;
+ len += t->wdg_name ? strlen(t->wdg_name) : 0;
+ char *buf = malloc(len), *tmp = buf;
+ DBG("%s %s\n", __func__, "Click On");
+ STORE_STRING(tmp, t->wdg_name);
+ eina_debug_session_send(_session, _cid, _click_on_op, buf, len);
+ free(buf);
+ break;
+ }
+ case EXACTNESS_ACTION_STABILIZE:
+ {
+ DBG("%s stabilize\n", __func__);
+ eina_debug_session_send(_session, _cid, _stabilize_op, NULL, 0);
+ break;
+ }
+ default: /* All non-input events are not handeled */
+ break;
+ }
+}
+
+static Eina_Bool
+_feed_event_timer_cb(void *data EINA_UNUSED)
+{
+ Exactness_Action *act = eina_list_data_get(_cur_event_list);
+ _feed_event(act->type, act->n_evas, act->data);
+
+ _cur_event_list = eina_list_next(_cur_event_list);
+
+ if (!_cur_event_list)
+ { /* Finished reading all events */
+ eina_debug_session_send(_session, _cid, _finish_op, NULL, 0);
+ ecore_main_loop_quit();
+ }
+ else
+ {
+ Exactness_Action *cur_act = eina_list_data_get(_cur_event_list);
+ ecore_timer_add(cur_act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
+ }
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool
+_src_open()
+{
+ double diff_time = 0; /* Time to wait before feeding the first event */
+
+ DBG("<%s> Source file is <%s>\n", __func__, _src_filename);
+ if (!strcmp(_src_filename + strlen(_src_filename) - 4,".exu"))
+ {
+ _src_unit = exactness_unit_file_read(_src_filename);
+ }
+ if (!_src_unit) return EINA_FALSE;
+ _cur_event_list = _src_unit->actions;
+ Exactness_Action *act = eina_list_data_get(_cur_event_list);
+
+ if (act->delay_ms)
+ {
+ DBG(" Waiting <%f>\n", diff_time);
+ ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
+ }
+ else
+ {
+ _feed_event_timer_cb(NULL);
+ }
+ return EINA_TRUE;
+}
+
+static void
+_main_loop_all_apps_get_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ int chosen_cid = -1;
+ if (_cid != -1) return;
+ while (size > 0)
+ {
+ int cid, pid, len;
+ cid = EXTRACT_INT(buf);
+ pid = EXTRACT_INT(buf);
+ if (_pid != -1)
+ {
+ if (_pid == pid)
+ {
+ _cid = cid;
+ _src_open();
+ return;
+ }
+ }
+ else
+ {
+ if (!strcmp(buf, "exactness_play"))
+ {
+ if (chosen_cid != -1)
+ {
+ fprintf(stderr, "Need to specify a PID - too much choice\n");
+ return;
+ }
+ chosen_cid = cid;
+ }
+ }
+ len = strlen(buf) + 1;
+ buf += len;
+ size -= (2 * sizeof(int) + len);
+ }
+ if (chosen_cid != -1)
+ {
+ _cid = chosen_cid;
+ _src_open();
+ }
+}
+
+WRAPPER_TO_XFER_MAIN_LOOP(_all_apps_get_cb)
+
+static void
+_ops_ready_cb(void *data EINA_UNUSED, Eina_Bool status)
+{
+ if (status)
+ eina_debug_session_send(_session, 0, _all_apps_get_op, NULL, 0);
+}
+
+static const Ecore_Getopt optdesc = {
+ "exactness_inject",
+ "%prog [options] <-v|-p|-t|-h> command",
+ PACKAGE_VERSION,
+ "(C) 2018 Enlightenment",
+ "BSD",
+ "A scenario events injector for EFL based applications.",
+ 1,
+ {
+ ECORE_GETOPT_STORE_STR('t', "test", "Test to run on the given application"),
+ ECORE_GETOPT_STORE_INT('p', "pid", "PID of the application to connect to"),
+ ECORE_GETOPT_STORE_INT('r', "remote-port", "Port to connect remotely to the daemon. Local connection if not specified"),
+ ECORE_GETOPT_COUNT('v', "verbose", "Turn verbose messages on."),
+
+ ECORE_GETOPT_LICENSE('L', "license"),
+ ECORE_GETOPT_COPYRIGHT('C', "copyright"),
+ ECORE_GETOPT_VERSION('V', "version"),
+ ECORE_GETOPT_HELP('h', "help"),
+ ECORE_GETOPT_SENTINEL
+ }
+};
+
+int main(int argc, char **argv)
+{
+ int opt_args = 0, real__ = 1, port = -1;
+ char *src = NULL;
+ Eina_Value *ret__;
+ Eina_Bool want_quit = EINA_FALSE;
+
+ Ecore_Getopt_Value values[] = {
+ ECORE_GETOPT_VALUE_STR(src),
+ ECORE_GETOPT_VALUE_INT(_pid),
+ ECORE_GETOPT_VALUE_INT(port),
+ ECORE_GETOPT_VALUE_INT(_verbose),
+
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_NONE
+ };
+
+ _log_domain = eina_log_domain_register("exactness_injector", NULL);
+
+ if (!ecore_evas_init())
+ return EXIT_FAILURE;
+
+ opt_args = ecore_getopt_parse(&optdesc, values, argc, argv);
+ if (opt_args < 0)
+ {
+ fprintf(stderr, "Failed parsing arguments.\n");
+ goto end;
+ }
+ if (want_quit) goto end;
+
+ if (!src)
+ {
+ fprintf(stderr, "no test file specified\n");
+ goto end;
+ }
+ _src_filename = eina_stringshare_add(src);
+
+ if (port == -1)
+ _session = eina_debug_local_connect(EINA_TRUE);
+ else
+ _session = eina_debug_remote_connect(port);
+ eina_debug_opcodes_register(_session, _debug_ops(), _ops_ready_cb, NULL);
+
+ elm_init(argc, argv);
+ ret__ = efl_loop_begin(efl_main_loop_get());
+ real__ = efl_loop_exit_code_process(ret__);
+ elm_shutdown();
+end:
+ ecore_evas_shutdown();
+ eina_log_domain_unregister(_log_domain);
+ _log_domain = -1;
+ return real__;
+}
diff --git a/src/bin/exactness/inspect.c b/src/bin/exactness/inspect.c
new file mode 100644
index 0000000000..4e2e301536
--- /dev/null
+++ b/src/bin/exactness/inspect.c
@@ -0,0 +1,1615 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Ecore.h>
+#include <Ecore_Getopt.h>
+#include <Ecore_Evas.h>
+#include <Elementary.h>
+#include <Efl_Ui.h>
+
+#include "common.h"
+
+#define LDIFF(x) "<b><color=#F0F>"#x"</color></b>"
+#define RDIFF(x) "<b><color=#0FF>"#x"</color></b>"
+
+typedef enum
+{
+ EX_FONTS_DIR,
+ EX_SCENARIO,
+ EX_IMAGE,
+ EX_OBJ_INFO
+} _Data_Type;
+
+typedef struct
+{
+ void *p1;
+ void *p2;
+ _Data_Type dt;
+} _Compare_Item_Data;
+
+typedef struct
+{
+ void *ex_parent;
+ Eo *gl_item;
+} _Item_Info;
+
+static Eo *_main_box = NULL;
+static Eina_List *_gls = NULL;
+static Eina_List *_units = NULL;
+static Eo *_comp_selected_item = NULL;
+
+static Elm_Genlist_Item_Class *_grp_itc = NULL, *_scn_itc = NULL, *_img_itc = NULL;
+static Elm_Genlist_Item_Class *_objs_itc = NULL, *_obj_itc = NULL;
+
+static Eina_Hash *_item_infos_hash = NULL;
+
+static Eina_Bool _show_only_diffs = EINA_FALSE;
+static Eina_List *_comp_vvs = NULL;
+
+static Eina_List *_modified_units = NULL;
+
+static const char *
+_action_name_get(Exactness_Action *act)
+{
+ if (!act) return NULL;
+ switch(act->type)
+ {
+ case EXACTNESS_ACTION_MOUSE_IN: return "Mouse In";
+ case EXACTNESS_ACTION_MOUSE_OUT: return "Mouse Out";
+ case EXACTNESS_ACTION_MOUSE_WHEEL: return "Mouse Wheel";
+ case EXACTNESS_ACTION_MULTI_DOWN: return "Multi Down";
+ case EXACTNESS_ACTION_MULTI_UP: return "Multi Up";
+ case EXACTNESS_ACTION_MULTI_MOVE: return "Multi Move";
+ case EXACTNESS_ACTION_KEY_DOWN: return "Key Down";
+ case EXACTNESS_ACTION_KEY_UP: return "Key Up";
+ case EXACTNESS_ACTION_TAKE_SHOT: return "Take shot";
+ case EXACTNESS_ACTION_EFL_EVENT: return "EFL Event";
+ case EXACTNESS_ACTION_CLICK_ON: return "Click On";
+ case EXACTNESS_ACTION_STABILIZE: return "Stabilize";
+ default: return NULL;
+ }
+}
+
+static int
+_event_struct_len_get(Exactness_Action_Type type)
+{
+ switch(type)
+ {
+ case EXACTNESS_ACTION_MOUSE_WHEEL:
+ return sizeof(Exactness_Action_Mouse_Wheel);
+ case EXACTNESS_ACTION_MULTI_DOWN:
+ case EXACTNESS_ACTION_MULTI_UP:
+ return sizeof(Exactness_Action_Multi_Event);
+ case EXACTNESS_ACTION_MULTI_MOVE:
+ return sizeof(Exactness_Action_Multi_Move);
+ case EXACTNESS_ACTION_KEY_DOWN:
+ case EXACTNESS_ACTION_KEY_UP:
+ return sizeof(Exactness_Action_Key_Down_Up);
+ case EXACTNESS_ACTION_EFL_EVENT:
+ return sizeof(Exactness_Action_Efl_Event);
+ case EXACTNESS_ACTION_CLICK_ON:
+ return sizeof(Exactness_Action_Click_On);
+ default: return 0;
+ }
+}
+
+static void
+_action_specific_info_get(const Exactness_Action *act, char output[1024])
+{
+ switch(act->type)
+ {
+ case EXACTNESS_ACTION_MOUSE_WHEEL:
+ {
+ Exactness_Action_Mouse_Wheel *t = act->data;
+ sprintf(output, "Direction %d Z %d", t->direction, t->z);
+ break;
+ }
+ case EXACTNESS_ACTION_MULTI_UP:
+ case EXACTNESS_ACTION_MULTI_DOWN:
+ {
+ Exactness_Action_Multi_Event *t = act->data;
+ if (!t->d)
+ sprintf(output, "Button %d Flags %d", t->b, t->flags);
+ else
+ sprintf(output, "D %d X %d Y %d Rad %f RadX %f RadY %f Pres %f Ang %f FX %f FY %f Flags %d",
+ t->d, t->x, t->y, t->rad, t->radx, t->rady, t->pres, t->ang, t->fx, t->fy, t->flags);
+ break;
+ }
+ case EXACTNESS_ACTION_MULTI_MOVE:
+ {
+ Exactness_Action_Multi_Move *t = act->data;
+ if (!t->d)
+ sprintf(output, "X %d Y %d", t->x, t->y);
+ else
+ sprintf(output, "D %d X %d Y %d Rad %f RadX %f RadY %f Pres %f Ang %f FX %f FY %f",
+ t->d, t->x, t->y, t->rad, t->radx, t->rady, t->pres, t->ang, t->fx, t->fy);
+ break;
+ }
+ case EXACTNESS_ACTION_KEY_UP:
+ case EXACTNESS_ACTION_KEY_DOWN:
+ {
+ Exactness_Action_Key_Down_Up *t = act->data;
+ sprintf(output, "Keyname %s Key %s String %s Compose %s Keycode %d",
+ t->keyname, t->key, t->string, t->compose, t->keycode);
+ break;
+ }
+ case EXACTNESS_ACTION_EFL_EVENT:
+ {
+ Exactness_Action_Efl_Event *t = act->data;
+ sprintf(output, "Widget %s Event %s", t->wdg_name, t->event_name);
+ break;
+ }
+ case EXACTNESS_ACTION_CLICK_ON:
+ {
+ Exactness_Action_Click_On *t = act->data;
+ sprintf(output, "Widget %s", t->wdg_name);
+ break;
+ }
+ default:
+ {
+ output[0] = '\0';
+ break;
+ }
+ }
+}
+
+static Eina_Bool
+_is_hook_duplicate(const Exactness_Action *cur_act, const Exactness_Action *prev_act)
+{
+ if (!prev_act) return EINA_FALSE;
+ if (cur_act->type == prev_act->type)
+ {
+ int len = _event_struct_len_get(cur_act->type);
+ return (!len || !memcmp(cur_act->data, prev_act->data, len));
+ }
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_are_scenario_entries_different(Exactness_Action *act1, Exactness_Action *act2)
+{
+ if (!act1 || !act2) return EINA_TRUE;
+ if (act1->type != act2->type) return EINA_TRUE;
+ switch(act1->type)
+ {
+ case EXACTNESS_ACTION_MOUSE_WHEEL:
+ return !!memcmp(act1->data, act2->data, sizeof(Exactness_Action_Mouse_Wheel));
+ case EXACTNESS_ACTION_MULTI_DOWN:
+ case EXACTNESS_ACTION_MULTI_UP:
+ return !!memcmp(act1->data, act2->data, sizeof(Exactness_Action_Multi_Event));
+ case EXACTNESS_ACTION_MULTI_MOVE:
+ return !!memcmp(act1->data, act2->data, sizeof(Exactness_Action_Multi_Move));
+ case EXACTNESS_ACTION_KEY_UP:
+ case EXACTNESS_ACTION_KEY_DOWN:
+ return !!memcmp(act1->data, act2->data, sizeof(Exactness_Action_Key_Down_Up));
+ case EXACTNESS_ACTION_EFL_EVENT:
+ {
+ Exactness_Action_Efl_Event *e1 = act1->data;
+ Exactness_Action_Efl_Event *e2 = act2->data;
+ return (!!strcmp(e1->wdg_name, e2->wdg_name) ||
+ !!strcmp(e1->event_name, e2->event_name));
+ }
+ case EXACTNESS_ACTION_CLICK_ON:
+ {
+ Exactness_Action_Click_On *e1 = act1->data;
+ Exactness_Action_Click_On *e2 = act2->data;
+ return (!!strcmp(e1->wdg_name, e2->wdg_name));
+ }
+ default:
+ return EINA_FALSE;
+ }
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_are_images_different(Exactness_Image *e_img1, Exactness_Image *e_img2)
+{
+ unsigned int w, h;
+ int *pxs1 = NULL;
+ int *pxs2 = NULL;
+ if (!e_img1 || !e_img2) return EINA_TRUE;
+ if (e_img1->w != e_img2->w) return EINA_TRUE;
+ if (e_img1->h != e_img2->h) return EINA_TRUE;
+ pxs1 = e_img1->pixels;
+ pxs2 = e_img2->pixels;
+ for (w = 0; w < e_img1->w; w++)
+ {
+ for (h = 0; h < e_img1->h; h++)
+ {
+ if (pxs1[h * e_img1->w + w] != pxs2[h * e_img1->w + w])
+ return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_are_objs_different(Exactness_Object *e_obj1, Exactness_Object *e_obj2, Eina_Bool check_objs)
+{
+ if (!e_obj1 || !e_obj2) return EINA_TRUE;
+ Eina_List *itr1 = e_obj1->children;
+ Eina_List *itr2 = e_obj2->children;
+ if (check_objs &&
+ (strcmp(e_obj1->kl_name, e_obj2->kl_name) ||
+ e_obj1->x != e_obj2->x || e_obj1->y != e_obj2->y ||
+ e_obj1->w != e_obj2->w || e_obj1->h != e_obj2->h)) return EINA_TRUE;
+ while (itr1 || itr2)
+ {
+ if ((!itr1) ^ (!itr2)) return EINA_TRUE;
+ e_obj1 = eina_list_data_get(itr1);
+ e_obj2 = eina_list_data_get(itr2);
+
+ if (_are_objs_different(e_obj1, e_obj2, EINA_TRUE)) return EINA_TRUE;
+
+ itr1 = eina_list_next(itr1);
+ itr2 = eina_list_next(itr2);
+ }
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_are_objs_trees_different(Exactness_Objects *e_objs1, Exactness_Objects *e_objs2)
+{
+ if (!e_objs1 || !e_objs2) return EINA_TRUE;
+ Eina_List *itr1 = e_objs1->objs;
+ Eina_List *itr2 = e_objs2->objs;
+ Exactness_Object *e_obj1, *e_obj2;
+ while (itr1 || itr2)
+ {
+ if ((!itr1) ^ (!itr2)) return EINA_TRUE;
+ e_obj1 = eina_list_data_get(itr1);
+ e_obj2 = eina_list_data_get(itr2);
+
+ if (_are_objs_different(e_obj1, e_obj2, EINA_TRUE)) return EINA_TRUE;
+
+ itr1 = eina_list_next(itr1);
+ itr2 = eina_list_next(itr2);
+ }
+ return EINA_FALSE;
+}
+
+static void
+_win_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ efl_exit(0); /* exit the program's main loop that runs in elm_run() */
+}
+
+static void
+_gui_win_create()
+{
+ Eo *win, *bg;
+
+ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+ win = elm_win_add(NULL, "Window", ELM_WIN_BASIC);
+ evas_object_smart_callback_add(win, "delete,request", _win_del, NULL);
+ elm_win_maximized_set(win, EINA_TRUE);
+ elm_win_autodel_set(win, EINA_TRUE);
+ elm_win_title_set(win, "Exactness Inspector");
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(1000, 800));
+
+ bg = elm_bg_add(win);
+ evas_object_size_hint_weight_set(bg, 1.000000, 1.000000);
+ efl_gfx_entity_visible_set(bg, EINA_TRUE);
+ elm_win_resize_object_add(win, bg);
+
+ _main_box = elm_box_add(win);
+ elm_box_horizontal_set(_main_box, EINA_TRUE);
+ elm_box_homogeneous_set(_main_box, EINA_TRUE);
+ evas_object_size_hint_weight_set(_main_box, 1.000000, 1.000000);
+ efl_gfx_entity_visible_set(_main_box, EINA_TRUE);
+ elm_win_resize_object_add(win, _main_box);
+
+ efl_gfx_entity_visible_set(win, EINA_TRUE);
+}
+
+static char *
+_grp_text_get(void *data, Evas_Object *gl, const char *part EINA_UNUSED)
+{
+ char buf[256];
+ const char *str = NULL;
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ _Data_Type dt = (_Data_Type) data;
+ switch (dt)
+ {
+ case EX_FONTS_DIR:
+ {
+ char buf2[256];
+ if (!compare)
+ {
+ Exactness_Unit *unit = efl_key_data_get(gl, "unit");
+ snprintf(buf2, sizeof(buf2), "Fonts directory: %s", unit->fonts_path ? unit->fonts_path : "None");
+ }
+ else
+ {
+ Eo *gl1 = eina_list_nth(_gls, 0);
+ Eo *gl2 = eina_list_nth(_gls, 1);
+ Exactness_Unit *unit1 = efl_key_data_get(gl1, "unit");
+ Exactness_Unit *unit2 = efl_key_data_get(gl2, "unit");
+ snprintf(buf2, sizeof(buf2), "Fonts directory comparison: "LDIFF(%s)"/"RDIFF(%s),
+ unit1 ? unit1->fonts_path : "(NULL)", unit2 ? unit2->fonts_path : "(NULL)");
+ }
+ return strdup(buf2);
+ }
+ case EX_SCENARIO: { str = "Scenario"; break; }
+ case EX_IMAGE: { str = "Images"; break; }
+ case EX_OBJ_INFO: { str = "Objects"; break; }
+ default: { str = "Unknown"; break; }
+ }
+ sprintf(buf, "%s%s", str, compare ? " comparison" : "");
+ return strdup(buf);
+}
+
+static char *
+_scn_text_get(void *data, Evas_Object *gl, const char *part EINA_UNUSED)
+{
+ Eina_Strbuf *buf = eina_strbuf_new();
+ char *ret = NULL;
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (compare)
+ {
+ _Compare_Item_Data *vv = data;
+ Exactness_Action *a1 = vv->p1;
+ Exactness_Action *a2 = vv->p2;
+
+ if (!a1 || !a2)
+ {
+ eina_strbuf_free(buf);
+ return strdup("XXXXX");
+ }
+
+ if (a1->delay_ms != a2->delay_ms) eina_strbuf_append_printf(buf, "[+"LDIFF(%.3f)"/+"RDIFF(%.3f)"]: ", a1->delay_ms/1000.0, a2->delay_ms/1000.0);
+ else eina_strbuf_append_printf(buf, "+%.3f: ", a1->delay_ms / 1000.0);
+
+ if (a1->type != a2->type)
+ eina_strbuf_append_printf(buf, "["LDIFF(%s)"/"RDIFF(%s)"] - XXXXXX", _action_name_get(a1), _action_name_get(a2));
+ else
+ {
+ char params1[1024];
+ char params2[2024];
+ _action_specific_info_get(a1, params1);
+ _action_specific_info_get(a2, params2);
+
+ eina_strbuf_append_printf(buf, "%s", _action_name_get(a1));
+ if (*params1 || *params2)
+ {
+ if (strcmp(params1, params2))
+ eina_strbuf_append_printf(buf, " - ["LDIFF(%s)"/"RDIFF(%s)"]", params1, params2);
+ else
+ eina_strbuf_append_printf(buf, " - %s", params1);
+ }
+ }
+ }
+ else
+ {
+ Exactness_Action *act = data;
+ char specific_output[1024];
+ if (act)
+ {
+ eina_strbuf_append_printf(buf, "+%.3f: ", act->delay_ms / 1000.0);
+ eina_strbuf_append_printf(buf, "%s", _action_name_get(act));
+ _action_specific_info_get(act, specific_output);
+ if (*specific_output) eina_strbuf_append_printf(buf, " - %s", specific_output);
+ }
+ else
+ eina_strbuf_append(buf, "XXXXX");
+ }
+
+ ret = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+ return ret;
+}
+
+static int
+_unit_shot_no_get(Exactness_Unit *unit, Exactness_Action *act_ref)
+{
+ Eina_List *itr;
+ Exactness_Action *act;
+ int ret = 0;
+ if (!unit) return -1;
+ EINA_LIST_FOREACH(unit->actions, itr, act)
+ {
+ if (act->type == EXACTNESS_ACTION_TAKE_SHOT)
+ {
+ if (act == act_ref) return ret;
+ ret++;
+ }
+ }
+ return -1;
+}
+
+static void
+_goto_shot(void *data EINA_UNUSED, Evas_Object *bt, void *event_info EINA_UNUSED)
+{
+ Eo *gl = efl_key_data_get(bt, "gl");
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (compare)
+ {
+ _Compare_Item_Data *vv;
+ Eina_List *itr;
+ Eo *gl1 = eina_list_nth(_gls, 0);
+ Eo *gl2 = eina_list_nth(_gls, 1);
+ Exactness_Unit *unit1 = efl_key_data_get(gl1, "unit");
+ Exactness_Unit *unit2 = efl_key_data_get(gl2, "unit");
+ int shot1_no = (intptr_t)efl_key_data_get(bt, "shot1_no");
+ int shot2_no = (intptr_t)efl_key_data_get(bt, "shot2_no");
+ Exactness_Image *ex_img1 = shot1_no != -1 ? eina_list_nth(unit1->imgs, shot1_no) : NULL;
+ Exactness_Image *ex_img2 = shot2_no != -1 ? eina_list_nth(unit2->imgs, shot2_no) : NULL;
+ EINA_LIST_FOREACH(_comp_vvs, itr, vv)
+ {
+ if (vv->p1 == ex_img1 && vv->p2 == ex_img2)
+ {
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &vv);
+ if (ii && ii->gl_item)
+ elm_genlist_item_show(ii->gl_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+ }
+ }
+ }
+ else
+ {
+ Exactness_Unit *unit = efl_key_data_get(gl, "unit");
+ int shot_no = (intptr_t)efl_key_data_get(bt, "shot_no");
+ Exactness_Image *ex_img = shot_no != -1 ? eina_list_nth(unit->imgs, shot_no) : NULL;
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &ex_img);
+ if (ii && ii->gl_item)
+ elm_genlist_item_show(ii->gl_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+ }
+}
+
+static Evas_Object *
+_scn_content_get(void *data, Evas_Object *gl, const char *part)
+{
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (compare)
+ {
+ if (!strcmp(part, "elm.swallow.end"))
+ {
+ _Compare_Item_Data *vv = data;
+ Exactness_Action *v1 = vv->p1;
+ Exactness_Action *v2 = vv->p2;
+ if (v1 && v2 && v1->type == EXACTNESS_ACTION_TAKE_SHOT &&
+ v2->type == EXACTNESS_ACTION_TAKE_SHOT)
+ {
+ Eo *gl1 = eina_list_nth(_gls, 0);
+ Eo *gl2 = eina_list_nth(_gls, 1);
+ Exactness_Unit *unit1 = efl_key_data_get(gl1, "unit");
+ Exactness_Unit *unit2 = efl_key_data_get(gl2, "unit");
+ int shot1_no = _unit_shot_no_get(unit1, v1);
+ int shot2_no = _unit_shot_no_get(unit2, v2);
+ Exactness_Image *ex_img1 = shot1_no != -1 ? eina_list_nth(unit1->imgs, shot1_no) : NULL;
+ Exactness_Image *ex_img2 = shot2_no != -1 ? eina_list_nth(unit2->imgs, shot2_no) : NULL;
+ Exactness_Image *ex_imgO = NULL;
+ exactness_image_compare(ex_img1, ex_img2, &ex_imgO);
+
+ if (ex_imgO)
+ {
+ Eo *bt, *ic, *evas_img;
+
+ bt = elm_button_add(gl);
+ evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(bt);
+ efl_key_data_set(bt, "gl", gl);
+ efl_key_data_set(bt, "shot1_no", (void *)(intptr_t)shot1_no);
+ efl_key_data_set(bt, "shot2_no", (void *)(intptr_t)shot2_no);
+ evas_object_smart_callback_add(bt, "clicked", _goto_shot, NULL);
+
+ ic = elm_icon_add(bt);
+ evas_img = elm_image_object_get(ic);
+ evas_object_image_size_set(evas_img, ex_imgO->w, ex_imgO->h);
+ evas_object_image_data_set(evas_img, ex_imgO->pixels);
+ evas_object_show(ic);
+ elm_object_part_content_set(bt, "icon", ic);
+ exactness_image_free(ex_imgO);
+ return bt;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (!strcmp(part, "elm.swallow.end"))
+ {
+ Exactness_Action *v = data;
+ Exactness_Unit *unit = efl_key_data_get(gl, "unit");
+ int shot_no = _unit_shot_no_get(unit, v);
+ Exactness_Image *ex_img = shot_no != -1 ? eina_list_nth(unit->imgs, shot_no) : NULL;
+
+ if (ex_img)
+ {
+ Eo *bt, *ic, *evas_img;
+
+ bt = elm_button_add(gl);
+ evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(bt);
+ efl_key_data_set(bt, "gl", gl);
+ efl_key_data_set(bt, "shot_no", (void *)(intptr_t)shot_no);
+ evas_object_smart_callback_add(bt, "clicked", _goto_shot, NULL);
+
+ ic = elm_icon_add(bt);
+ evas_img = elm_image_object_get(ic);
+ evas_object_image_size_set(evas_img, ex_img->w, ex_img->h);
+ evas_object_image_data_set(evas_img, ex_img->pixels);
+ evas_object_show(ic);
+ elm_object_part_content_set(bt, "icon", ic);
+
+ return bt;
+ }
+ }
+ }
+ return NULL;
+}
+
+static Evas_Object *
+_img_content_get(void *data, Evas_Object *gl, const char *part)
+{
+ if (strcmp(part, "elm.swallow.content")) return NULL;
+ Eo *img = elm_image_add(gl);
+ Eo *evas_img = elm_image_object_get(img);
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (compare)
+ {
+ _Compare_Item_Data *vv = data;
+ Exactness_Image *ex_img1 = vv->p1;
+ Exactness_Image *ex_img2 = vv->p2;
+ Exactness_Image *ex_imgO = NULL;
+ exactness_image_compare(ex_img1, ex_img2, &ex_imgO);
+
+ evas_object_image_size_set(evas_img, ex_imgO->w, ex_imgO->h);
+ evas_object_image_data_set(evas_img, ex_imgO->pixels);
+ evas_object_size_hint_min_set(img, ELM_SCALE_SIZE(300), ELM_SCALE_SIZE(300));
+ exactness_image_free(ex_imgO);
+ }
+ else
+ {
+ if (!data)
+ {
+ efl_del(img);
+ return NULL;
+ }
+ Exactness_Image *ex_img = data;
+ evas_object_image_size_set(evas_img, ex_img->w, ex_img->h);
+ evas_object_image_data_set(evas_img, ex_img->pixels);
+ evas_object_size_hint_min_set(img, ELM_SCALE_SIZE(300), ELM_SCALE_SIZE(300));
+ }
+ return img;
+}
+
+static char *
+_objs_text_get(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
+{
+ return strdup("Shot");
+}
+
+#define SAFE_PRINT(field, format, fallback) \
+ eina_strbuf_append_printf(buf, LDIFF(format)"/"RDIFF(format), \
+ e_obj1 ? e_obj1->field : fallback, \
+ e_obj2 ? e_obj2->field : fallback); \
+
+
+static char *
+_obj_text_get(void *data, Evas_Object *gl, const char *part EINA_UNUSED)
+{
+ Eina_Strbuf *buf = eina_strbuf_new();
+ char *ret = NULL;
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (compare)
+ {
+ _Compare_Item_Data *vv = data;
+ Exactness_Object *e_obj1 = vv->p1;
+ Exactness_Object *e_obj2 = vv->p2;
+ eina_strbuf_append(buf, "(");
+ SAFE_PRINT(kl_name, %s, "(NULL)")
+ eina_strbuf_append(buf, ")");
+
+ eina_strbuf_append(buf, " x = ");
+ SAFE_PRINT(x, %d, -1)
+
+ eina_strbuf_append(buf, " y = ");
+ SAFE_PRINT(y, %d, -1)
+
+ eina_strbuf_append(buf, " w = ");
+ SAFE_PRINT(w, %d, -1)
+
+ eina_strbuf_append(buf, " h = ");
+ SAFE_PRINT(h, %d, -1)
+
+ if (e_obj1 && e_obj2 && _are_objs_different(e_obj1, e_obj2, EINA_FALSE))
+ eina_strbuf_append(buf, " - DIFF INSIDE");
+ }
+ else
+ {
+ Exactness_Object *e_obj = data;
+ eina_strbuf_append_printf(buf,
+ "%s: x = %d y = %d w = %d h = %d",
+ e_obj->kl_name,
+ e_obj->x, e_obj->y, e_obj->w, e_obj->h);
+ }
+
+ ret = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+ return ret;
+}
+
+static void
+_itc_init()
+{
+ if (!_grp_itc)
+ {
+ _grp_itc = elm_genlist_item_class_new();
+ _grp_itc->item_style = "group_index";
+ _grp_itc->func.text_get = _grp_text_get;
+ }
+
+ if (!_scn_itc)
+ {
+ _scn_itc = elm_genlist_item_class_new();
+ _scn_itc->item_style = "default_style";
+ _scn_itc->func.text_get = _scn_text_get;
+ _scn_itc->func.content_get = _scn_content_get;
+ }
+
+ if (!_img_itc)
+ {
+ _img_itc = elm_genlist_item_class_new();
+ _img_itc->item_style = "full";
+ _img_itc->func.content_get = _img_content_get;
+ }
+
+ if (!_objs_itc)
+ {
+ _objs_itc = elm_genlist_item_class_new();
+ _objs_itc->item_style = "default_style";
+ _objs_itc->func.text_get = _objs_text_get;
+ }
+
+ if (!_obj_itc)
+ {
+ _obj_itc = elm_genlist_item_class_new();
+ _obj_itc->item_style = "default_style";
+ _obj_itc->func.text_get = _obj_text_get;
+ }
+}
+
+static void
+_comp_gl_dragged_cb(Evas_Object *obj, void *data EINA_UNUSED)
+{
+ int x = 0, y = 0;
+ Eo *gl;
+ Eina_List *itr;
+ elm_interface_scrollable_content_pos_get(obj, &x, &y);
+ EINA_LIST_FOREACH(_gls, itr, gl)
+ {
+ if (gl != obj)
+ elm_interface_scrollable_content_pos_set(gl, x, y, EINA_FALSE);
+ }
+}
+
+static void
+_obj_item_realize(Exactness_Object *ex_obj)
+{
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &ex_obj);
+ if (!ii) return;
+ if (ii->gl_item) return;
+ _obj_item_realize(ii->ex_parent);
+ _Item_Info *iip = eina_hash_find(_item_infos_hash, &(ii->ex_parent));
+ if (iip->gl_item) elm_genlist_item_expanded_set(iip->gl_item, EINA_TRUE);
+}
+
+static void
+_gl_expand_request_cb(void *data EINA_UNUSED, Evas_Object *gl, void *event_info)
+{
+ Elm_Object_Item *glit = event_info;
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (compare)
+ {
+ const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(glit);
+ if (itc == _objs_itc)
+ {
+ _Compare_Item_Data *vv = elm_object_item_data_get(glit);
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &(vv->p1));
+ if (ii) elm_genlist_item_expanded_set(ii->gl_item, EINA_TRUE);
+ ii = eina_hash_find(_item_infos_hash, &(vv->p2));
+ if (ii) elm_genlist_item_expanded_set(ii->gl_item, EINA_TRUE);
+ }
+ else if (itc == _obj_itc)
+ {
+ _Compare_Item_Data *vv = elm_object_item_data_get(glit);
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &(vv->p1));
+ if (!ii || !ii->gl_item) _obj_item_realize(vv->p1);
+ if (!ii) ii = eina_hash_find(_item_infos_hash, &(vv->p1));
+ if (ii && ii->gl_item) elm_genlist_item_expanded_set(ii->gl_item, EINA_TRUE);
+
+ ii = eina_hash_find(_item_infos_hash, &(vv->p2));
+ if (!ii || !ii->gl_item) _obj_item_realize(vv->p2);
+ if (!ii) ii = eina_hash_find(_item_infos_hash, &(vv->p2));
+ if (ii && ii->gl_item) elm_genlist_item_expanded_set(ii->gl_item, EINA_TRUE);
+ }
+ }
+ elm_genlist_item_expanded_set(glit, EINA_TRUE);
+}
+
+static void
+_gl_contract_request_cb(void *data EINA_UNUSED, Evas_Object *gl EINA_UNUSED, void *event_info)
+{
+ Elm_Object_Item *glit = event_info;
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (compare)
+ {
+ const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(glit);
+ if (itc == _objs_itc)
+ {
+ _Compare_Item_Data *vv = elm_object_item_data_get(glit);
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &(vv->p1));
+ if (ii) elm_genlist_item_expanded_set(ii->gl_item, EINA_FALSE);
+ ii = eina_hash_find(_item_infos_hash, &(vv->p2));
+ if (ii) elm_genlist_item_expanded_set(ii->gl_item, EINA_FALSE);
+ }
+ else if (itc == _obj_itc)
+ {
+ _Compare_Item_Data *vv = elm_object_item_data_get(glit);
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &(vv->p1));
+ if (ii && ii->gl_item) elm_genlist_item_expanded_set(ii->gl_item, EINA_FALSE);
+
+ ii = eina_hash_find(_item_infos_hash, &(vv->p2));
+ if (ii && ii->gl_item) elm_genlist_item_expanded_set(ii->gl_item, EINA_FALSE);
+ }
+ }
+ elm_genlist_item_expanded_set(glit, EINA_FALSE);
+}
+
+static void
+_gl_expanded_cb(void *_data EINA_UNUSED, Evas_Object *gl EINA_UNUSED, void *event_info)
+{
+ Elm_Object_Item *glit = event_info;
+ const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(glit);
+ Eina_Bool compare = !!efl_key_data_get(gl, "_exactness_gl_compare");
+ if (itc == _objs_itc)
+ {
+ if (compare)
+ {
+ _Compare_Item_Data *vv = elm_object_item_data_get(glit);
+ Exactness_Objects *e_objs1 = vv->p1;
+ Exactness_Objects *e_objs2 = vv->p2;
+ Eina_List *itr1 = e_objs1->main_objs, *itr2 = e_objs2->main_objs;
+
+ while (itr1 || itr2)
+ {
+ Exactness_Object *e_obj1 = eina_list_data_get(itr1);
+ Exactness_Object *e_obj2 = eina_list_data_get(itr2);
+ vv = calloc(1, sizeof(*vv));
+ vv->p1 = e_obj1;
+ vv->p2 = e_obj2;
+ vv->dt = EX_OBJ_INFO;
+ elm_genlist_item_append(gl, _obj_itc, vv, glit,
+ e_obj1->children || e_obj2->children ? ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ itr1 = eina_list_next(itr1);
+ itr2 = eina_list_next(itr2);
+ }
+ }
+ else
+ {
+ Exactness_Objects *e_objs = elm_object_item_data_get(glit);
+ Eina_List *itr;
+ Exactness_Object *e_obj;
+ EINA_LIST_FOREACH(e_objs->main_objs, itr, e_obj)
+ {
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &e_obj);
+ if (!ii)
+ {
+ ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &e_obj, ii);
+ }
+ ii->ex_parent = e_objs;
+ ii->gl_item = elm_genlist_item_append(gl, _obj_itc, e_obj, glit,
+ e_obj->children ? ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ efl_wref_add(ii->gl_item, &(ii->gl_item));
+ }
+ }
+ }
+ else if (itc == _obj_itc)
+ {
+ if (compare)
+ {
+ _Compare_Item_Data *vv = elm_object_item_data_get(glit);
+ Exactness_Object *e_obj1 = vv->p1;
+ Exactness_Object *e_obj2 = vv->p2;
+ Eina_List *itr1 = e_obj1->children, *itr2 = e_obj2->children;
+
+ while (itr1 || itr2)
+ {
+ e_obj1 = eina_list_data_get(itr1);
+ e_obj2 = eina_list_data_get(itr2);
+ vv = calloc(1, sizeof(*vv));
+ vv->p1 = e_obj1;
+ vv->p2 = e_obj2;
+ vv->dt = EX_OBJ_INFO;
+ elm_genlist_item_append(gl, _obj_itc, vv, glit,
+ (e_obj1 && e_obj1->children) || (e_obj2 && e_obj2->children) ?
+ ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ itr1 = eina_list_next(itr1);
+ itr2 = eina_list_next(itr2);
+ }
+ }
+ else
+ {
+ Exactness_Object *e_obj = elm_object_item_data_get(glit), *e_obj2;
+ Eina_List *itr;
+
+ EINA_LIST_FOREACH(e_obj->children, itr, e_obj2)
+ {
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &e_obj2);
+ if (!ii)
+ {
+ ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &e_obj2, ii);
+ }
+ ii->ex_parent = e_obj;
+ ii->gl_item = elm_genlist_item_append(gl, _obj_itc, e_obj2, glit,
+ e_obj2->children ? ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ efl_wref_add(ii->gl_item, &(ii->gl_item));
+ }
+ }
+ }
+}
+
+static void
+_gl_contracted_cb(void *data EINA_UNUSED, Evas_Object *gl EINA_UNUSED, void *event_info)
+{
+ Elm_Object_Item *glit = event_info;
+ elm_genlist_item_subitems_clear(glit);
+}
+
+static void
+_comp_gl_selected_cb(void *data EINA_UNUSED, Evas_Object *gl EINA_UNUSED, void *event_info)
+{
+ _comp_selected_item = event_info;
+ _Compare_Item_Data *vv = elm_object_item_data_get(_comp_selected_item);
+ if (vv->p1)
+ {
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &(vv->p1));
+ if (!ii || !ii->gl_item)
+ _obj_item_realize(vv->p1);
+ else
+ elm_genlist_item_selected_set(ii->gl_item, EINA_TRUE);
+ }
+
+ if (vv->p2)
+ {
+ _Item_Info *ii = eina_hash_find(_item_infos_hash, &(vv->p2));
+ if (!ii || !ii->gl_item)
+ _obj_item_realize(vv->p2);
+ else
+ elm_genlist_item_selected_set(ii->gl_item, EINA_TRUE);
+ }
+}
+
+static void
+_scn_item_remove(void *data, Evas_Object *menu EINA_UNUSED, void *item EINA_UNUSED)
+{
+ Eo *glit = data;
+ Exactness_Unit *unit = efl_key_data_get(efl_parent_get(glit), "unit");
+ Exactness_Action *act = elm_object_item_data_get(glit);
+ unit->actions = eina_list_remove(unit->actions, act);
+ if (!eina_list_data_find(_modified_units, unit))
+ _modified_units = eina_list_append(_modified_units, unit);
+ efl_del(glit);
+}
+
+static void
+_gl_clicked_right_cb(void *data, Evas_Object *gl, void *event_info)
+{
+ int x = 0, y = 0;
+ Eo *win = data, *menu;
+ Elm_Object_Item *glit = event_info;
+
+ if (elm_genlist_item_item_class_get(glit) == _scn_itc)
+ {
+ elm_genlist_item_selected_set(glit, EINA_TRUE);
+ evas_pointer_canvas_xy_get(evas_object_evas_get(gl), &x, &y);
+
+ menu = elm_menu_add(win);
+ elm_menu_move(menu, x, y);
+ elm_menu_item_add(menu, NULL, NULL, "Remove", _scn_item_remove, glit);
+ efl_gfx_entity_visible_set(menu, EINA_TRUE);
+ }
+}
+
+static void
+_gl_img_show(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+ static Eo *_img_win = NULL;
+ Exactness_Image *ex_img = data;
+ if (_img_win) efl_del(_img_win);
+ _img_win = efl_add(EFL_UI_WIN_CLASS, elm_win_get(obj),
+ efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_DIALOG_BASIC),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+ efl_wref_add(_img_win, &_img_win);
+
+ Evas_Object *image = elm_image_add(_img_win);
+ Eo *evas_img = elm_image_object_get(image);
+ evas_object_image_size_set(evas_img, ex_img->w, ex_img->h);
+ evas_object_image_data_set(evas_img, ex_img->pixels);
+ efl_content_set(_img_win, image);
+
+ efl_gfx_entity_size_set(_img_win, EINA_SIZE2D(550, 500));
+}
+
+static void
+_gui_unit_display(Exactness_Unit *unit1, Exactness_Unit *unit2)
+{
+ Eina_List *itr1, *itr2;
+ Eo *gl1, *gl2 = NULL, *glc = NULL;
+
+ gl1 = elm_genlist_add(_main_box);
+ elm_genlist_homogeneous_set(gl1, EINA_TRUE);
+ evas_object_size_hint_weight_set(gl1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(gl1, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ efl_gfx_entity_visible_set(gl1, EINA_TRUE);
+ _gls = eina_list_append(_gls, gl1);
+ elm_box_pack_end(_main_box, gl1);
+
+ efl_key_data_set(gl1, "unit", unit1);
+ evas_object_smart_callback_add(gl1, "expand,request", _gl_expand_request_cb, NULL);
+ evas_object_smart_callback_add(gl1, "contract,request", _gl_contract_request_cb, NULL);
+ evas_object_smart_callback_add(gl1, "expanded", _gl_expanded_cb, NULL);
+ evas_object_smart_callback_add(gl1, "contracted", _gl_contracted_cb, NULL);
+ if (!unit2)
+ evas_object_smart_callback_add(gl1, "clicked,right", _gl_clicked_right_cb, elm_win_get(_main_box));
+
+ if (unit2)
+ {
+ glc = elm_genlist_add(_main_box);
+ elm_genlist_homogeneous_set(glc, EINA_TRUE);
+ evas_object_size_hint_weight_set(glc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(glc, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ efl_gfx_entity_visible_set(glc, EINA_TRUE);
+ elm_box_pack_end(_main_box, glc);
+
+ evas_object_smart_callback_add(glc, "expand,request", _gl_expand_request_cb, NULL);
+ evas_object_smart_callback_add(glc, "contract,request", _gl_contract_request_cb, NULL);
+ evas_object_smart_callback_add(glc, "expanded", _gl_expanded_cb, NULL);
+ evas_object_smart_callback_add(glc, "contracted", _gl_contracted_cb, NULL);
+
+ efl_key_data_set(glc, "_exactness_gl_compare", glc);
+ elm_interface_scrollable_scroll_down_cb_set(glc, _comp_gl_dragged_cb);
+ elm_interface_scrollable_scroll_up_cb_set(glc, _comp_gl_dragged_cb);
+ evas_object_smart_callback_add(glc, "selected", _comp_gl_selected_cb, NULL);
+
+ gl2 = elm_genlist_add(_main_box);
+ elm_genlist_homogeneous_set(gl2, EINA_TRUE);
+ evas_object_size_hint_weight_set(gl2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(gl2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ efl_gfx_entity_visible_set(gl2, EINA_TRUE);
+ _gls = eina_list_append(_gls, gl2);
+ elm_box_pack_end(_main_box, gl2);
+
+ efl_key_data_set(gl2, "unit", unit2);
+ evas_object_smart_callback_add(gl2, "expand,request", _gl_expand_request_cb, NULL);
+ evas_object_smart_callback_add(gl2, "contract,request", _gl_contract_request_cb, NULL);
+ evas_object_smart_callback_add(gl2, "expanded", _gl_expanded_cb, NULL);
+ evas_object_smart_callback_add(gl2, "contracted", _gl_contracted_cb, NULL);
+ }
+ _itc_init();
+
+ if ((unit1->fonts_path) || (unit2 && unit2->fonts_path))
+ {
+ if (!_show_only_diffs || !unit2 ||
+ !unit1->fonts_path || !unit2->fonts_path ||
+ strcmp(unit1->fonts_path, unit2->fonts_path))
+ {
+ elm_genlist_item_append(gl1, _grp_itc, (void *)EX_FONTS_DIR, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(gl2, _grp_itc, (void *)EX_FONTS_DIR, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(glc, _grp_itc, (void *)EX_FONTS_DIR, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ }
+ }
+ itr1 = unit1->actions;
+ itr2 = unit2 ? unit2->actions : NULL;
+
+ if (itr1 || itr2)
+ {
+ elm_genlist_item_append(gl1, _grp_itc, (void *)EX_SCENARIO, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(gl2, _grp_itc, (void *)EX_SCENARIO, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(glc, _grp_itc, (void *)EX_SCENARIO, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ }
+ while (itr1 || itr2)
+ {
+ Exactness_Action *v1 = itr1 ? eina_list_data_get(itr1) : NULL;
+ Exactness_Action *v2 = itr2 ? eina_list_data_get(itr2) : NULL;
+ if (!_show_only_diffs || _are_scenario_entries_different(v1, v2))
+ {
+ _Item_Info *ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &v1, ii);
+ ii->gl_item = elm_genlist_item_append(gl1, _scn_itc, v1, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ if (unit2)
+ {
+ _Compare_Item_Data *vv = calloc(1, sizeof(*vv));
+ vv->p1 = v1;
+ vv->p2 = v2;
+ vv->dt = EX_SCENARIO;
+ ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &v2, ii);
+ ii->gl_item = elm_genlist_item_append(gl2, _scn_itc, v2, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_append(glc, _scn_itc, vv, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ }
+ }
+ if (itr1) itr1 = eina_list_next(itr1);
+ if (itr2) itr2 = eina_list_next(itr2);
+ }
+
+ itr1 = unit1->imgs;
+ itr2 = unit2 ? unit2->imgs : NULL;
+
+ if (itr1 || itr2)
+ {
+ elm_genlist_item_append(gl1, _grp_itc, (void *)EX_IMAGE, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(gl2, _grp_itc, (void *)EX_IMAGE, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(glc, _grp_itc, (void *)EX_IMAGE, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ }
+ while (itr1 || itr2)
+ {
+ Exactness_Image *img1 = itr1 ? eina_list_data_get(itr1) : NULL;
+ Exactness_Image *img2 = itr2 ? eina_list_data_get(itr2) : NULL;
+ if (!_show_only_diffs || _are_images_different(img1, img2))
+ {
+ _Item_Info *ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &img1, ii);
+ ii->gl_item = elm_genlist_item_append(gl1, _img_itc, img1, NULL, ELM_GENLIST_ITEM_NONE, _gl_img_show, img1);
+ if (unit2)
+ {
+ _Compare_Item_Data *vv = calloc(1, sizeof(*vv));
+ vv->p1 = img1;
+ vv->p2 = img2;
+ vv->dt = EX_IMAGE;
+ ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &img2, ii);
+ ii->gl_item = elm_genlist_item_append(gl2, _img_itc, img2, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ /* This item info is needed to go to images from scenario shot entry */
+ ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &vv, ii);
+ ii->gl_item = elm_genlist_item_append(glc, _img_itc, vv, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ _comp_vvs = eina_list_append(_comp_vvs, vv);
+ }
+ }
+ if (itr1) itr1 = eina_list_next(itr1);
+ if (itr2) itr2 = eina_list_next(itr2);
+ }
+
+ itr1 = unit1->objs;
+ itr2 = unit2 ? unit2->objs : NULL;
+
+ if (itr1 || itr2)
+ {
+ elm_genlist_item_append(gl1, _grp_itc, (void *)EX_OBJ_INFO, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(gl2, _grp_itc, (void *)EX_OBJ_INFO, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_append(glc, _grp_itc, (void *)EX_OBJ_INFO, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ }
+ while (itr1 || itr2)
+ {
+ Exactness_Objects *objs1 = itr1 ? eina_list_data_get(itr1) : NULL;
+ Exactness_Objects *objs2 = itr2 ? eina_list_data_get(itr2) : NULL;
+ if (!_show_only_diffs || _are_objs_trees_different(objs1, objs2))
+ {
+ _Item_Info *ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &objs1, ii);
+ ii->gl_item = elm_genlist_item_append(gl1, _objs_itc, objs1, NULL,
+ ELM_GENLIST_ITEM_TREE, NULL, NULL);
+ efl_wref_add(ii->gl_item, &(ii->gl_item));
+ if (unit2)
+ {
+ _Compare_Item_Data *vv = calloc(1, sizeof(*vv));
+ vv->p1 = objs1;
+ vv->p2 = objs2;
+ vv->dt = EX_OBJ_INFO;
+ ii = calloc(1, sizeof(*ii));
+ eina_hash_set(_item_infos_hash, &objs2, ii);
+ ii->gl_item = elm_genlist_item_append(gl2, _objs_itc, objs2, NULL,
+ ELM_GENLIST_ITEM_TREE, NULL, NULL);
+ efl_wref_add(ii->gl_item, &(ii->gl_item));
+ elm_genlist_item_append(glc, _objs_itc, vv, NULL, ELM_GENLIST_ITEM_TREE, NULL, NULL);
+ }
+ }
+ if (itr1) itr1 = eina_list_next(itr1);
+ if (itr2) itr2 = eina_list_next(itr2);
+ }
+}
+
+static void
+_diff_result_print(Exactness_Unit *unit1, Exactness_Unit *unit2)
+{
+ Eina_List *itr1, *itr2;
+
+ int nb_scenario = 0, nb_diff_scenario = 0;
+ int nb_image = 0, nb_diff_image = 0;
+ int nb_objtree= 0, nb_diff_objtree = 0;
+
+ itr1 = unit1 ? unit1->actions : NULL;
+ itr2 = unit2 ? unit2->actions : NULL;
+
+ while (itr1 || itr2)
+ {
+ Exactness_Action *v1 = itr1 ? eina_list_data_get(itr1) : NULL;
+ Exactness_Action *v2 = itr2 ? eina_list_data_get(itr2) : NULL;
+
+ nb_scenario++;
+ if (_are_scenario_entries_different(v1, v2))
+ nb_diff_scenario++;
+
+ if (itr1) itr1 = eina_list_next(itr1);
+ if (itr2) itr2 = eina_list_next(itr2);
+ }
+
+ itr1 = unit1 ? unit1->imgs : NULL;
+ itr2 = unit2 ? unit2->imgs : NULL;
+
+ while (itr1 || itr2)
+ {
+ Exactness_Image *img1 = itr1 ? eina_list_data_get(itr1) : NULL;
+ Exactness_Image *img2 = itr2 ? eina_list_data_get(itr2) : NULL;
+
+ nb_image++;
+ if (_are_images_different(img1, img2))
+ nb_diff_image++;
+
+ if (itr1) itr1 = eina_list_next(itr1);
+ if (itr2) itr2 = eina_list_next(itr2);
+ }
+
+ itr1 = unit1 ? unit1->objs : NULL;
+ itr2 = unit2 ? unit2->objs : NULL;
+
+ while (itr1 || itr2)
+ {
+ Exactness_Objects *objs1 = itr1 ? eina_list_data_get(itr1) : NULL;
+ Exactness_Objects *objs2 = itr2 ? eina_list_data_get(itr2) : NULL;
+
+ nb_objtree++;
+ if (_are_objs_trees_different(objs1, objs2))
+ nb_diff_objtree++;
+
+ if (itr1) itr1 = eina_list_next(itr1);
+ if (itr2) itr2 = eina_list_next(itr2);
+ }
+
+ printf("%s\nscenario (%d/%d)\nimage (%d/%d)\nobjs_tree (%d/%d)\n",
+ nb_diff_scenario || nb_diff_image || nb_diff_objtree ?
+ "Failure" : "Success",
+ nb_scenario - nb_diff_scenario, nb_scenario,
+ nb_image - nb_diff_image, nb_image,
+ nb_objtree - nb_diff_objtree, nb_objtree);
+}
+
+static Exactness_Image *
+_image_read(const char *filename)
+{
+ int w, h;
+ Evas_Load_Error err;
+ Ecore_Evas *ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL);
+
+ /* the canvas pointer, de facto */
+ Eo *e = ecore_evas_get(ee);
+
+ Eo *img = evas_object_image_add(e);
+ evas_object_image_file_set(img, filename, NULL);
+ err = evas_object_image_load_error_get(img);
+ if (err != EVAS_LOAD_ERROR_NONE)
+ {
+ fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n",
+ filename, evas_load_error_str(err));
+ return NULL;
+ }
+
+ Exactness_Image *ex_img = malloc(sizeof(*ex_img));
+ int len;
+ evas_object_image_size_get(img, &w, &h);
+ ex_img->w = w;
+ ex_img->h = h;
+ len = w * h * 4;
+ ex_img->pixels = malloc(len);
+ memcpy(ex_img->pixels, evas_object_image_data_get(img, EINA_FALSE), len);
+
+ ecore_evas_free(ee);
+ return ex_img;
+}
+
+static const Ecore_Getopt optdesc = {
+ "exactness_inspect",
+ "%prog [options] [<exu file> | <file1 file2>]",
+ NULL,
+ "(C) 2016-2020 Enlightenment",
+ "BSD",
+ "Inspector for Exactness\n"
+ "\n"
+ "Dumps the contents of `.exu` files obtained with `exactness_record` or"
+ "`exactness -i` in an easy-to-examine way.",
+ 0,
+ {
+ ECORE_GETOPT_STORE_USHORT('d', "delay", "Delay the given recording by a given time (in milliseconds)."),
+ ECORE_GETOPT_STORE_TRUE('c', "clean", "Clean the given recording from wrong actions."),
+ ECORE_GETOPT_STORE_TRUE('l', "list", "List the actions of the given recording."),
+ ECORE_GETOPT_STORE_TRUE('C', "compare", "Compare given files (images files or objects eet files)."),
+ ECORE_GETOPT_STORE_TRUE(0, "show-only-diffs", "Show only differences during comparison."),
+ ECORE_GETOPT_STORE_TRUE(0, "stabilize", "Stabilize after the given shot number in --shot."),
+ ECORE_GETOPT_STORE_TRUE(0, "pack", "Pack the given input files (scenario and images) into the given output."),
+ ECORE_GETOPT_STORE_STR('o', "output", "Output."),
+ ECORE_GETOPT_STORE_USHORT('s', "shot", "Select a specific shot (1 = 1st shot...)."),
+
+ ECORE_GETOPT_LICENSE('L', "license"),
+ ECORE_GETOPT_COPYRIGHT('C', "copyright"),
+ ECORE_GETOPT_VERSION('V', "version"),
+ ECORE_GETOPT_HELP('h', "help"),
+ ECORE_GETOPT_SENTINEL
+ }
+};
+
+int
+main(int argc, char *argv[])
+{
+ Eina_List *units_filenames = NULL;
+ const char *ext = NULL;
+ char *output = NULL;
+ Exactness_Unit *unit = NULL;
+ int ret = 1, args = 0;
+ unsigned short delay = 0, shot = 0;
+ Eina_Bool write_file = EINA_FALSE;
+ Eina_Bool want_quit, clean = EINA_FALSE, list_get = EINA_FALSE, compare_files = EINA_FALSE;
+ Eina_Bool stabilize = EINA_FALSE, show_only_diffs = EINA_FALSE, gui_needed = EINA_TRUE;
+ Eina_Bool pack = EINA_FALSE;
+
+ Ecore_Getopt_Value values[] = {
+ ECORE_GETOPT_VALUE_USHORT(delay),
+ ECORE_GETOPT_VALUE_BOOL(clean),
+ ECORE_GETOPT_VALUE_BOOL(list_get),
+ ECORE_GETOPT_VALUE_BOOL(compare_files),
+ ECORE_GETOPT_VALUE_BOOL(show_only_diffs),
+ ECORE_GETOPT_VALUE_BOOL(stabilize),
+ ECORE_GETOPT_VALUE_BOOL(pack),
+ ECORE_GETOPT_VALUE_STR(output),
+ ECORE_GETOPT_VALUE_USHORT(shot),
+
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_BOOL(want_quit),
+ ECORE_GETOPT_VALUE_NONE
+ };
+
+ elm_init(0, NULL);
+ want_quit = EINA_FALSE;
+
+ args = ecore_getopt_parse(&optdesc, values, argc, argv);
+ if (args < 0)
+ {
+ fprintf(stderr, "Failed parsing arguments.\n");
+ goto end;
+ }
+ if (want_quit)
+ {
+ goto end;
+ }
+ if ((clean || delay || shot || list_get || stabilize || pack) && args == argc)
+ {
+ fprintf(stderr, "Expected scenario (.exu) as the last argument.\n");
+ ecore_getopt_help(stderr, &optdesc);
+ goto end;
+ }
+ if (shot && (!delay && !stabilize))
+ {
+ fprintf(stderr, "shot option can only be used with delay or stabilize option.\n");
+ goto end;
+ }
+ if (delay && !shot)
+ {
+ fprintf(stderr, "delay option can only be used with shot option.\n");
+ goto end;
+ }
+ if (stabilize && !shot)
+ {
+ fprintf(stderr, "stabilize option can only be used with shot option.\n");
+ goto end;
+ }
+ if (compare_files && argc - args < 2)
+ {
+ fprintf(stderr, "Expected at least two files to compare as last arguments.\n");
+ ecore_getopt_help(stderr, &optdesc);
+ goto end;
+ }
+ if (show_only_diffs && !compare_files)
+ {
+ fprintf(stderr, "--show-only-diffs is available with --compare only\n");
+ goto end;
+ }
+ if (show_only_diffs && output)
+ {
+ fprintf(stderr, "--show-only-diffs works in GUI only\n");
+ goto end;
+ }
+ _show_only_diffs = show_only_diffs;
+
+ if (clean || delay || list_get || stabilize || pack)
+ {
+ int arg;
+ Eina_List *images = NULL;
+ gui_needed = EINA_FALSE;
+ for (arg = args; arg < argc; arg++)
+ {
+ const char *src_file = argv[arg];
+ ext = strrchr(src_file, '.');
+ if (!ext)
+ {
+ fprintf(stderr, "Extension required\n");
+ goto end;
+ }
+ if (!strcmp(ext, ".exu"))
+ {
+ if (!unit) unit = exactness_unit_file_read(src_file);
+ else
+ {
+ fprintf(stderr, "%s - scenario already provided\n", src_file);
+ goto end;
+ }
+ }
+ else if (!strcmp(ext, ".png"))
+ {
+ Exactness_Image *ex_img = _image_read(src_file);
+ if (!ex_img)
+ {
+ fprintf(stderr, "Issue while reading %s\n", src_file);
+ goto end;
+ }
+ images = eina_list_append(images, ex_img);
+ }
+ else
+ {
+ fprintf(stderr, "Correct extension (.exu/.png) required\n");
+ goto end;
+ }
+ }
+ if (unit)
+ {
+ Exactness_Image *ex_img;
+ EINA_LIST_FREE(images, ex_img)
+ {
+ unit->imgs = eina_list_append(unit->imgs, ex_img);
+ unit->nb_shots++;
+ }
+ }
+ }
+ else
+ {
+ int arg;
+ if (output) gui_needed = EINA_FALSE;
+ for (arg = args; arg < argc; arg++)
+ {
+ ext = strrchr(argv[arg], '.');
+ if (!ext)
+ {
+ fprintf(stderr, "Extension required\n");
+ goto end;
+ }
+ if (!strcmp(ext, ".exu"))
+ {
+ Exactness_Unit *ex_unit = exactness_unit_file_read(argv[arg]);
+ units_filenames = eina_list_append(units_filenames, argv[arg]);
+ _units = eina_list_append(_units, ex_unit);
+ }
+ else if (!strcmp(ext, ".png"))
+ {
+ Exactness_Unit *ex_unit = calloc(1, sizeof(*ex_unit));
+ Exactness_Image *ex_img = _image_read(argv[arg]);
+ if (!ex_img)
+ {
+ fprintf(stderr, "Issue while reading %s\n", argv[arg]);
+ goto end;
+ }
+ ex_unit->imgs = eina_list_append(ex_unit->imgs, ex_img);
+ ex_unit->nb_shots++;
+ _units = eina_list_append(_units, ex_unit);
+ }
+ }
+ }
+
+ if (clean)
+ {
+ Exactness_Action *act;
+ Eina_List *itr, *itr2;
+ EINA_LIST_FOREACH_SAFE(unit->actions, itr, itr2, act)
+ {
+ Exactness_Action *prev_act = eina_list_data_get(eina_list_prev(itr));
+ if (_is_hook_duplicate(act, prev_act))
+ {
+ prev_act->delay_ms += act->delay_ms;
+ unit->actions = eina_list_remove_list(unit->actions, itr);
+ }
+ }
+ EINA_LIST_REVERSE_FOREACH_SAFE(unit->actions, itr, itr2, act)
+ {
+ if (act->type == EXACTNESS_ACTION_TAKE_SHOT) break;
+ unit->actions = eina_list_remove(unit->actions, act);
+ }
+ write_file = EINA_TRUE;
+ }
+
+ if (delay || stabilize)
+ {
+ Exactness_Action *act;
+ Eina_List *itr;
+ unsigned int cur_shot = 0;
+ EINA_LIST_FOREACH(unit->actions, itr, act)
+ {
+ if (act->type == EXACTNESS_ACTION_TAKE_SHOT)
+ {
+ cur_shot++;
+ if (cur_shot == shot)
+ {
+ if (delay) act->delay_ms = delay;
+ if (stabilize)
+ {
+ Exactness_Action *s_act = malloc(sizeof(*s_act));
+ s_act->type = EXACTNESS_ACTION_STABILIZE;
+ s_act->delay_ms = act->delay_ms;
+ s_act->n_evas = act->n_evas;
+ s_act->data = NULL;
+ act->delay_ms = 0; /* Shot right after stabilization */
+ unit->actions = eina_list_prepend_relative(unit->actions, s_act, act);
+ }
+ write_file = EINA_TRUE;
+ break;
+ }
+ }
+ }
+ }
+
+ if (pack) write_file = EINA_TRUE;
+
+ if (list_get)
+ {
+ Exactness_Action *act;
+ Eina_List *itr;
+ if (unit->fonts_path) printf("Fonts dir: %s\n", unit->fonts_path);
+ EINA_LIST_FOREACH(unit->actions, itr, act)
+ {
+ char specific_output[1024];
+ printf("+%.3f: %s", act->delay_ms / 1000.0, _action_name_get(act));
+ _action_specific_info_get(act, specific_output);
+ if (*specific_output) printf(" - %s", specific_output);
+ printf("\n");
+ }
+ }
+
+ if (compare_files && output)
+ {
+ const char *out_ext = strrchr(output, '.');
+ Exactness_Unit *unit1 = NULL, *unit2 = NULL, *unitO = NULL;
+ int nb_diffs = 0;
+ Eina_List *itr1, *itr2;
+ EINA_LIST_FOREACH(_units, itr1, unit)
+ {
+ if (!unit1) unit1 = unit;
+ else if (!unit2) unit2 = unit;
+ else
+ {
+ fprintf(stderr, "Too much files to compare (only 2).\n");
+ goto end;
+ }
+ }
+
+ if (!strcmp(out_ext, ".png"))
+ {
+ if (unit1->nb_shots != 1 || unit2->nb_shots != 1)
+ {
+ fprintf(stderr, "Comparison output can be png only if the number of shots to compare is 1.\n");
+ goto end;
+ }
+ }
+
+ itr1 = unit1 ? unit1->imgs : NULL;
+ itr2 = unit2 ? unit2->imgs : NULL;
+
+ while (itr1 || itr2)
+ {
+ Exactness_Image *ex_img1 = itr1 ? eina_list_data_get(itr1) : NULL;
+ Exactness_Image *ex_img2 = itr2 ? eina_list_data_get(itr2) : NULL;
+ Exactness_Image *ex_imgO = NULL;
+ Eina_Bool has_diff = exactness_image_compare(ex_img1, ex_img2, &ex_imgO);
+ if (has_diff || !strcmp(out_ext, ".exu"))
+ {
+ if (has_diff) nb_diffs++;
+ if (!unitO) unitO = calloc(1, sizeof(*unitO));
+ unitO->imgs = eina_list_append(unitO->imgs, ex_imgO);
+ unitO->nb_shots++;
+ }
+ itr1 = eina_list_next(itr1);
+ itr2 = eina_list_next(itr2);
+ }
+ if (!strcmp(out_ext, ".png"))
+ {
+ Ecore_Evas *ee;
+ Eo *e, *img;
+ if (unitO->nb_shots == 1)
+ {
+ Exactness_Image *ex_imgO = eina_list_data_get(unitO->imgs);
+ ee = ecore_evas_new(NULL, 0, 0, 100, 100, NULL);
+ e = ecore_evas_get(ee);
+ img = evas_object_image_add(e);
+ evas_object_image_size_set(img, ex_imgO->w, ex_imgO->h);
+ evas_object_image_data_set(img, ex_imgO->pixels);
+ evas_object_image_save(img, output, NULL, NULL);
+ ecore_evas_free(ee);
+ goto end;
+ }
+ ret = 0;
+ }
+ else if (!strcmp(out_ext, ".exu"))
+ {
+ _diff_result_print(unit1, unit2);
+ if (nb_diffs) exactness_unit_file_write(unitO, output);
+ else ret = 0;
+ }
+ else
+ {
+ fprintf(stderr, "Correct output extension (.exu/.png) required\n");
+ }
+ goto end;
+ }
+
+ ret = 0;
+ if (write_file)
+ {
+ if (!output)
+ {
+ fprintf(stderr, "An output file is required to write the modifications.\n");
+ }
+ else
+ {
+ const char *out_ext = strrchr(output, '.');
+ if (!out_ext || strcmp(out_ext, ".exu"))
+ {
+ fprintf(stderr, "Only exu extension is supported as output.\n");
+ goto end;
+ }
+ exactness_unit_file_write(unit, output);
+ }
+ goto end;
+ }
+
+ if (gui_needed)
+ {
+ Eina_List *itr;
+ Exactness_Unit *unit1 = NULL, *unit2 = NULL;
+ Eina_Bool need_compare = compare_files && eina_list_count(_units) == 2;
+ _item_infos_hash = eina_hash_pointer_new(NULL);
+ _gui_win_create();
+ EINA_LIST_FOREACH(_units, itr, unit)
+ {
+ if (need_compare)
+ {
+ if (!unit1) unit1 = unit;
+ else unit2 = unit;
+ }
+ else _gui_unit_display(unit, NULL);
+ }
+ if (need_compare) _gui_unit_display(unit1, unit2);
+ elm_run();
+ EINA_LIST_FREE(_modified_units, unit)
+ {
+ int i = 0;
+ EINA_LIST_FOREACH(_units, itr, unit2)
+ {
+ if (unit2 == unit) break;
+ i++;
+ }
+ exactness_unit_file_write(unit, eina_list_nth(units_filenames, i));
+ }
+ }
+
+end:
+ elm_shutdown();
+
+ return ret;
+}
diff --git a/src/bin/exactness/meson.build b/src/bin/exactness/meson.build
new file mode 100644
index 0000000000..4d048f18c9
--- /dev/null
+++ b/src/bin/exactness/meson.build
@@ -0,0 +1,66 @@
+exactness_bin = executable('exactness',
+ [ 'exactness.c', 'common.c', 'common.h' ],
+ dependencies: [ ecore, ecore_evas, ecore_file, elementary],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
+ install: true,
+ )
+
+exactness_inject_bin = executable('exactness_inject',
+ [ 'injector.c', 'common.c', 'common.h' ],
+ dependencies: [ elementary ],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
+ install: true,
+ )
+
+exactness_inspect_bin = executable('exactness_inspect',
+ [ 'inspect.c', 'common.c', 'common.h' ],
+ dependencies: [ elementary ],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
+ install: true,
+ )
+
+edjs = custom_target('player_entry',
+ input : 'player_entry.edc',
+ output : 'player_entry.edj',
+ install : true,
+ install_dir : 'share/exactness',
+ command : edje_cc_exe + [
+ '-id', join_paths(meson.source_root(), 'data', 'elementary', 'themes', 'img'),
+ '-sd', join_paths(meson.source_root(), 'data', 'elementary', 'themes', 'snd'),
+ '@INPUT@', '@OUTPUT@'],
+ depends : edje_depends)
+
+exactness_play_bin = library('exactness_play',
+ [ 'player.c', 'common.c', 'common.h', edjs ],
+ dependencies: [ elementary, dl],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
+ install: true,
+ version : meson.project_version()
+)
+
+exactness_record_bin = library('exactness_record',
+ [ 'recorder.c', 'common.c', 'common.h' ],
+ dependencies: [ elementary, dl],
+ c_args: '-DDATA_DIR="'+join_paths(dir_data, 'exactness')+'"',
+ install: true,
+ version : meson.project_version()
+)
+
+exactness_env = configuration_data()
+exactness_env.set_quoted('EXACTNESS_PLAY_PRELOAD_PATH', exactness_play_bin.full_path())
+exactness_env.set_quoted('EXACTNESS_RECORD_PRELOAD_PATH', exactness_record_bin.full_path())
+exactness_env.set_quoted('VERSION', meson.project_version())
+
+configure_file(
+ input: 'exactness_record.in',
+ output: 'exactness_record',
+ configuration: exactness_env,
+ install_dir: get_option('bindir'),
+ install_mode: 'rwxr-xr-x')
+
+configure_file(
+ input: 'exactness_play.in',
+ output: 'exactness_play',
+ configuration: exactness_env,
+ install_dir: get_option('bindir'),
+ install_mode: 'rwxr-xr-x')
diff --git a/src/bin/exactness/player.c b/src/bin/exactness/player.c
new file mode 100644
index 0000000000..44b3f36303
--- /dev/null
+++ b/src/bin/exactness/player.c
@@ -0,0 +1,1149 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <unistd.h>
+
+#ifdef HAVE_DLSYM
+# include <dlfcn.h>
+#endif
+
+#ifdef HAVE_FORK
+# ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+# endif
+# ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+# ifdef HAVE_SYS_SYSINFO_H
+# include <sys/sysinfo.h>
+# endif
+#endif
+
+#include <Eina.h>
+#include <Eo.h>
+#include <Evas.h>
+#include <Ecore.h>
+#include <Ecore_Getopt.h>
+#include <Ecore_File.h>
+#include <Ecore_Con.h>
+#include <Elementary.h>
+
+#include "common.h"
+
+#define CMD_LINE_MAX 256
+#define IMAGE_FILENAME_EXT ".png"
+#define PAUSE_KEY_STR "F2"
+
+#define DBG(...) EINA_LOG_DOM_DBG(_log_domain, __VA_ARGS__)
+#define INF(...) EINA_LOG_DOM_INFO(_log_domain, __VA_ARGS__)
+
+static int _log_domain = -1;
+
+typedef enum
+{
+ FTYPE_UNKNOWN,
+ FTYPE_DIR,
+ FTYPE_REC = FTYPE_DIR,
+ FTYPE_EXU,
+ FTYPE_REMOTE
+} File_Type;
+
+static File_Type _dest_type = FTYPE_UNKNOWN;
+static Eina_Stringshare *_dest = NULL;
+static Exactness_Unit *_dest_unit = NULL;
+
+static File_Type _src_type = FTYPE_UNKNOWN;
+static Eina_Stringshare *_src_filename = NULL;
+static Exactness_Unit *_src_unit = NULL;
+
+static const char *_test_name = NULL;
+static int _verbose = 0;
+
+static Eina_List *_evas_list = NULL;
+
+static Eina_List *_cur_event_list = NULL;
+
+static int _cur_shot_id = 0;
+static Eina_Bool _shot_needed = EINA_FALSE;
+static Eina_Bool _scan_objects = EINA_FALSE, _disable_shots = EINA_FALSE, _stabilize_shots = EINA_FALSE;
+
+static Eina_Debug_Session *_last_debug_session = NULL;
+static int _last_debug_src_cid = 0;
+static int _take_shot_op = EINA_DEBUG_OPCODE_INVALID;
+
+static Eina_Bool _stabilization_timer_cb(void *);
+static double _speed = 1.0;
+
+static Eina_Bool _exit_required = EINA_FALSE;
+static Eina_Bool _pause_request = EINA_FALSE;
+static Eina_Bool _playing_status = EINA_FALSE;
+static Eina_Bool _ready_to_write = EINA_FALSE;
+
+static Exactness_Image *
+_snapshot_shot_get(Evas *e)
+{
+ Exactness_Image *ex_img;
+ Evas_Object *snapshot;
+ void *pixels;
+ int w, h, nb_bytes;
+
+ if (!e) return NULL;
+
+ evas_output_size_get(e, &w, &h);
+ if ((w < 1) || (h < 1)) return NULL;
+
+ snapshot = efl_key_data_get(e, "_snapshot");
+ if (!snapshot)
+ {
+ snapshot = evas_object_image_filled_add(e);
+ if (snapshot)
+ {
+ evas_object_image_snapshot_set(snapshot, EINA_TRUE);
+ evas_object_geometry_set(snapshot, 0, 0, w, h);
+ efl_gfx_entity_visible_set(snapshot, EINA_TRUE);
+ efl_key_data_set(e, "_snapshot", snapshot);
+ }
+ return NULL;
+ }
+
+ pixels = evas_object_image_data_get(snapshot, EINA_FALSE);
+ if (!pixels) return NULL;
+
+ ex_img = malloc(sizeof(*ex_img));
+ nb_bytes = w * h * 4;
+ ex_img->w = w;
+ ex_img->h = h;
+ ex_img->pixels = malloc(nb_bytes);
+ memcpy(ex_img->pixels, pixels, nb_bytes);
+ return ex_img;
+}
+
+static void
+_evas_render_post_cb(void *data EINA_UNUSED, const Efl_Event *event)
+{
+ if (_shot_needed)
+ {
+ Evas_Event_Render_Post *post = event->info;
+ void *e_data = efl_key_data_get(event->object, "_shot");
+
+ // Nothing was updated, so let's not bother sending nothingness
+ if (post && !post->updated_area) return;
+ Exactness_Image *ex_shot = efl_key_data_get(event->object, "_last_shot");
+ if (!ex_shot) ex_shot = _snapshot_shot_get(event->object);
+ if (!ex_shot) return;
+
+ efl_key_data_set(event->object, "_last_shot", NULL);
+
+ if (e_data)
+ {
+ if (_dest_type == FTYPE_DIR)
+ {
+ char *filename = e_data;
+ Eo *o = evas_object_image_add(event->object);
+ evas_object_image_size_set(o, ex_shot->w, ex_shot->h);
+ evas_object_image_data_set(o, ex_shot->pixels);
+ INF("Shot taken (%s).\n", filename);
+ if (!evas_object_image_save(o, filename, NULL, NULL))
+ {
+ printf("Cannot save widget to <%s>\n", filename);
+ }
+ free(filename);
+ }
+ else if (_dest_type == FTYPE_EXU)
+ {
+ Exactness_Image *ex_img = e_data;
+ memcpy(ex_img, ex_shot, sizeof(Exactness_Image));
+ ex_shot->pixels = NULL;
+ INF("Shot taken (in %s).\n", _dest);
+ }
+ else if (_dest_type == FTYPE_REMOTE)
+ {
+ int len = sizeof(int) + sizeof(int) + ex_shot->w * ex_shot->h * 4;
+ char *buf = alloca(len);
+ char *tmp = buf;
+ STORE_INT(tmp, ex_shot->w);
+ STORE_INT(tmp, ex_shot->h);
+ memcpy(tmp, ex_shot->pixels, ex_shot->w * ex_shot->h * 4);
+ eina_debug_session_send(_last_debug_session, _last_debug_src_cid, _take_shot_op, buf, len);
+ }
+ }
+ exactness_image_free(ex_shot);
+ efl_key_data_set(event->object, "_shot", NULL);
+ evas_object_del(efl_key_data_get(event->object, "_snapshot"));
+ efl_key_data_set(event->object, "_snapshot", NULL);
+ /* This part is needed when the shot is needed at the end of the scenario.
+ * As it is async, we need to wait for the shot termination. */
+ _shot_needed = EINA_FALSE;
+ if (_exit_required) ecore_main_loop_quit();
+ }
+}
+
+static void
+_shot_do(Evas *e)
+{
+ void *e_data = NULL;
+ if (!e) return;
+
+ if (!_disable_shots)
+ {
+ if (_dest_type == FTYPE_DIR)
+ {
+ int dir_name_len;
+ char *filename;
+
+ dir_name_len = strlen(_dest) + 1; /* includes space of a '/' */
+ filename = malloc(strlen(_test_name) + strlen(IMAGE_FILENAME_EXT) +
+ dir_name_len + 8); /* also space for serial */
+
+ sprintf(filename, "%s/%s%c%03d%s", _dest, _test_name,
+ SHOT_DELIMITER, _cur_shot_id, IMAGE_FILENAME_EXT);
+ e_data = filename;
+ }
+ else if (_dest_type == FTYPE_EXU)
+ {
+ Exactness_Image *ex_img = malloc(sizeof(*ex_img));
+ _dest_unit->imgs = eina_list_append(_dest_unit->imgs, ex_img);
+ _dest_unit->nb_shots++;
+ e_data = ex_img;
+ }
+ else if (_dest_type == FTYPE_REMOTE)
+ {
+ e_data = e;
+ }
+ }
+ efl_key_data_set(e, "_shot", e_data);
+ _shot_needed = EINA_TRUE;
+ Efl_Event ev;
+ ev.info = NULL;
+ ev.object = e;
+ _evas_render_post_cb(NULL, &ev);
+
+ if (_scan_objects && _dest_type == FTYPE_EXU)
+ {
+ Eina_Iterator *iter;
+ Eo *obj;
+ Exactness_Objects *e_objs = calloc(1, sizeof(*e_objs));
+ iter = eo_objects_iterator_new();
+ EINA_ITERATOR_FOREACH(iter, obj)
+ {
+ if (!efl_isa(obj, EFL_CANVAS_OBJECT_CLASS) &&
+ !efl_isa(obj, EFL_CANVAS_SCENE_INTERFACE)) continue;
+ Exactness_Object *e_obj = calloc(1, sizeof(*e_obj));
+ Eo *parent = efl_parent_get(obj);
+ e_obj->id = (long long) obj;
+ if (efl_isa(parent, EFL_CANVAS_OBJECT_CLASS) ||
+ efl_isa(parent, EFL_CANVAS_SCENE_INTERFACE))
+ {
+ e_obj->parent_id = (long long) efl_parent_get(obj);
+ }
+ else
+ {
+ e_obj->parent_id = 0;
+ }
+ e_obj->kl_name = eina_stringshare_add(efl_class_name_get(obj));
+ if (efl_isa(obj, EFL_CANVAS_OBJECT_CLASS))
+ {
+ Eina_Size2D sz = efl_gfx_entity_size_get(obj);
+ e_obj->w = sz.w;
+ e_obj->h = sz.h;
+ Eina_Position2D pos = efl_gfx_entity_position_get(obj);
+ e_obj->x = pos.x;
+ e_obj->y = pos.y;
+ }
+ e_objs->objs = eina_list_append(e_objs->objs, e_obj);
+ }
+ eina_iterator_free(iter);
+ _dest_unit->objs = eina_list_append(_dest_unit->objs, e_objs);
+ }
+}
+
+static void
+_feed_event(Exactness_Action_Type type, unsigned int n_evas, void *data)
+{
+ static Evas_Object *rect = NULL;
+ static unsigned int rect_evas;
+
+ Eo *e = eina_list_nth(_evas_list, n_evas);
+
+ if (rect && rect_evas != n_evas)
+ {
+ efl_del(rect);
+ rect = NULL;
+ }
+ if (_verbose && !rect)
+ {
+ rect = evas_object_rectangle_add(e);
+ evas_object_repeat_events_set(rect, EINA_TRUE);
+ evas_object_color_set(rect, 255, 0, 0, 255);
+ evas_object_resize(rect, 15, 15);
+ evas_object_layer_set(rect, 100);
+ evas_object_show(rect);
+ rect_evas = n_evas;
+ }
+
+ switch (type)
+ {
+ case EXACTNESS_ACTION_MOUSE_IN:
+ {
+ INF("Mouse in\n");
+ DBG("%s evas_event_feed_mouse_in n_evas=<%d>\n", __func__, n_evas);
+ if (e) evas_event_feed_mouse_in(e, time(NULL), NULL);
+ break;
+ }
+ case EXACTNESS_ACTION_MOUSE_OUT:
+ {
+ INF("Mouse out\n");
+ DBG("%s evas_event_feed_mouse_out n_evas=<%d>\n", __func__, n_evas);
+ if (e) evas_event_feed_mouse_out(e, time(NULL), NULL);
+ break;
+ }
+ case EXACTNESS_ACTION_MOUSE_WHEEL:
+ {
+ Exactness_Action_Mouse_Wheel *t = data;
+ INF("Mouse wheel\n");
+ DBG("%s evas_event_feed_mouse_wheel n_evas=<%d>\n", __func__, n_evas);
+ if (e) evas_event_feed_mouse_wheel(e, t->direction, t->z, time(NULL), NULL);
+
+ break;
+ }
+ case EXACTNESS_ACTION_MULTI_DOWN:
+ {
+ Exactness_Action_Multi_Event *t = data;
+ DBG("%s evas_event_feed_multi_down n_evas=<%d>\n", __func__, n_evas);
+ if (!t->d)
+ {
+ if (e) evas_event_feed_mouse_down(e, t->b, t->flags, time(NULL), NULL);
+ if (rect) evas_object_color_set(rect, 255, 255, 0, 255);
+ }
+ else
+ {
+ if (e) evas_event_feed_multi_down(e,
+ t->d, t->x, t->y, t->rad,
+ t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
+ t->flags, time(NULL), NULL);
+ }
+
+ break;
+ }
+ case EXACTNESS_ACTION_MULTI_UP:
+ {
+ Exactness_Action_Multi_Event *t = data;
+ DBG("%s evas_event_feed_multi_up n_evas=<%d>\n", __func__, n_evas);
+ if (!t->d)
+ {
+ if (e) evas_event_feed_mouse_up(e, t->b, t->flags, time(NULL), NULL);
+ if (rect) evas_object_color_set(rect, 255, 0, 0, 255);
+ }
+ else
+ {
+ if (e) evas_event_feed_multi_up(e,
+ t->d, t->x, t->y, t->rad,
+ t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
+ t->flags, time(NULL), NULL);
+ }
+
+ break;
+ }
+ case EXACTNESS_ACTION_MULTI_MOVE:
+ {
+ Exactness_Action_Multi_Move *t = data;
+ DBG("%s evas_event_feed_multi_move n_evas=<%d>\n", __func__, n_evas);
+ if (!t->d)
+ {
+ if (e) evas_event_feed_mouse_move(e, t->x, t->y, time(NULL), NULL);
+ if (rect)
+ {
+ evas_object_move(rect, t->x, t->y);
+ evas_object_color_set(rect, 255, 0, 0, 255);
+ }
+ }
+ else
+ {
+ if (e) evas_event_feed_multi_move(e,
+ t->d, t->x, t->y, t->rad,
+ t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
+ time(NULL), NULL);
+ }
+
+ break;
+ }
+ case EXACTNESS_ACTION_KEY_DOWN:
+ {
+ Exactness_Action_Key_Down_Up *t = data;
+ DBG("%s evas_event_feed_key_down n_evas=<%d>\n", __func__, n_evas);
+ if (e)
+ evas_event_feed_key_down_with_keycode(e,
+ t->keyname, t->key, t->string,
+ t->compose, time(NULL), NULL, t->keycode);
+ break;
+ }
+ case EXACTNESS_ACTION_KEY_UP:
+ {
+ Exactness_Action_Key_Down_Up *t = data;
+ DBG("%s evas_event_feed_key_up n_evas=<%d>\n", __func__, n_evas);
+ if (e) evas_event_feed_key_up_with_keycode(e,
+ t->keyname, t->key, t->string,
+ t->compose, time(NULL), NULL, t->keycode);
+
+ break;
+ }
+ case EXACTNESS_ACTION_TAKE_SHOT:
+ {
+ DBG("%s take shot n_evas=<%d>\n", __func__, n_evas);
+ if (rect) evas_object_color_set(rect, 0, 0, 255, 255);
+ _cur_shot_id++;
+ if (_dest_type != FTYPE_UNKNOWN && e) _shot_do(e);
+ break;
+ }
+ case EXACTNESS_ACTION_EFL_EVENT:
+ {
+ Exactness_Action_Efl_Event *t = data;
+ Eina_Bool found = EINA_FALSE;
+ Eina_List *itr;
+ EINA_LIST_FOREACH(_evas_list, itr, e)
+ {
+ Eo *o = efl_name_find(e, t->wdg_name);
+ if (o)
+ {
+ DBG("%s EFL event invoke %s on %s\n",
+ __func__, t->event_name, t->wdg_name);
+ Efl_Event_Description d;
+ found = EINA_TRUE;
+ memset(&d, 0, sizeof(d));
+ d.name = t->event_name;
+ d.legacy_is = EINA_TRUE;
+ efl_event_callback_legacy_call(o, &d, NULL);
+ }
+ }
+ if (!found) fprintf(stderr, "Failed finding %s.\n", t->wdg_name);
+ break;
+ }
+ case EXACTNESS_ACTION_CLICK_ON:
+ {
+ Exactness_Action_Click_On *t = data;
+ Eina_List *itr;
+ Eo *o;
+ n_evas = 0;
+ EINA_LIST_FOREACH(_evas_list, itr, e)
+ {
+ o = efl_name_find(e, t->wdg_name);
+ if (o) goto wdg_found;
+ n_evas++;
+ }
+ o = NULL;
+wdg_found:
+ if (o)
+ {
+ Eina_Size2D sz = efl_gfx_entity_size_get(o);
+ Eina_Position2D pos = efl_gfx_entity_position_get(o);
+ int x = pos.x + (sz.w / 2);
+ int y = pos.y + (sz.h / 2);
+ Exactness_Action_Multi_Move *d_move = calloc(1, sizeof(*d_move));
+ Exactness_Action_Multi_Event *d_event = calloc(1, sizeof(*d_event));
+ Exactness_Action *act, *prev_act = eina_list_data_get(_cur_event_list);
+
+ DBG("%s click on %s\n", __func__, t->wdg_name);
+ act = calloc(1, sizeof(*act));
+ act->type = EXACTNESS_ACTION_MULTI_MOVE;
+ act->delay_ms = 100;
+ act->n_evas = n_evas;
+ act->data = d_move;
+ d_move->x = x;
+ d_move->y = y;
+ _cur_event_list = eina_list_append_relative(_cur_event_list,
+ act, prev_act);
+ prev_act = act;
+
+ act = calloc(1, sizeof(*act));
+ act->type = EXACTNESS_ACTION_MULTI_DOWN;
+ act->delay_ms = 100;
+ act->n_evas = n_evas;
+ act->data = d_event;
+ d_event->b = 1;
+ _cur_event_list = eina_list_append_relative(_cur_event_list,
+ act, prev_act);
+ prev_act = act;
+
+ act = calloc(1, sizeof(*act));
+ act->type = EXACTNESS_ACTION_MULTI_UP;
+ act->delay_ms = 100;
+ act->n_evas = n_evas;
+ d_event = calloc(1, sizeof(*d_event));
+ act->data = d_event;
+ d_event->b = 1;
+ _cur_event_list = eina_list_append_relative(_cur_event_list,
+ act, prev_act);
+ }
+ else fprintf(stderr, "Failed finding %s.\n", t->wdg_name);
+ break;
+ }
+ case EXACTNESS_ACTION_STABILIZE:
+ {
+ DBG("%s stabilize\n", __func__);
+ if (rect) evas_object_color_set(rect, 255, 165, 0, 255);
+ ecore_timer_add(0.1, _stabilization_timer_cb, NULL);
+ break;
+ }
+ default: /* All non-input events are not handeled */
+ break;
+ }
+}
+
+static Eina_Bool
+_feed_event_timer_cb(void *data EINA_UNUSED)
+{
+ if (_pause_request) return ECORE_CALLBACK_CANCEL;
+ Exactness_Action *act = eina_list_data_get(_cur_event_list);
+ if (act) _feed_event(act->type, act->n_evas, act->data);
+
+ _cur_event_list = eina_list_next(_cur_event_list);
+ if (!_cur_event_list)
+ { /* Finished reading all events */
+ _exit_required = EINA_TRUE;
+ if (!_shot_needed) ecore_main_loop_quit();
+ }
+ else
+ {
+ if (act && act->type != EXACTNESS_ACTION_STABILIZE)
+ {
+ act = eina_list_data_get(_cur_event_list);
+ if (act)
+ {
+ DBG(" %s timer_time=<%f>\n", __func__, act->delay_ms / 1000.0);
+ ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
+ }
+ }
+ }
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool
+_stabilization_timer_cb(void *data EINA_UNUSED)
+{
+ Eina_List *itr;
+ Evas *e;
+#define STAB_MAX 5
+ static int need_more = STAB_MAX;
+ DBG("Not stable yet!\n");
+ EINA_LIST_FOREACH(_evas_list, itr, e)
+ {
+ if (!e) continue;
+ Exactness_Image *last_img = efl_key_data_get(e, "_last_stab_shot");
+ Exactness_Image *cur_img = _snapshot_shot_get(e);
+ if (!last_img || exactness_image_compare(last_img, cur_img, NULL)) need_more = STAB_MAX;
+ exactness_image_free(last_img);
+ efl_key_data_set(e, "_last_stab_shot", cur_img);
+ }
+ EINA_LIST_FOREACH(_evas_list, itr, e)
+ {
+ if (!need_more)
+ {
+ evas_object_del(efl_key_data_get(e, "_snapshot"));
+ efl_key_data_set(e, "_snapshot", NULL);
+ }
+ }
+ if (!need_more)
+ {
+ _playing_status = EINA_FALSE;
+ if (_src_type != FTYPE_REMOTE && !_pause_request)
+ {
+ Exactness_Action *act = eina_list_data_get(_cur_event_list);
+ if (act)
+ {
+ DBG(" %s timer_time=<%f>\n", __func__, act->delay_ms / 1000.0);
+ ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
+ }
+ }
+ need_more = STAB_MAX;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ need_more--;
+ return ECORE_CALLBACK_RENEW;
+}
+
+static void
+_main_loop_mouse_in_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ int n_evas = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_MOUSE_IN, n_evas, NULL);
+}
+
+static void
+_main_loop_mouse_out_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ int n_evas = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_MOUSE_OUT, n_evas, NULL);
+}
+
+static void
+_main_loop_mouse_wheel_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Mouse_Wheel t;
+ int n_evas = EXTRACT_INT(buf);
+ t.direction = EXTRACT_INT(buf);
+ t.z = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_MOUSE_WHEEL, n_evas, &t);
+}
+
+static void
+_main_loop_multi_down_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Multi_Event t;
+ int n_evas = EXTRACT_INT(buf);
+ t.d = EXTRACT_INT(buf);
+ t.b = EXTRACT_INT(buf);
+ t.x = EXTRACT_INT(buf);
+ t.y = EXTRACT_INT(buf);
+ t.rad = EXTRACT_DOUBLE(buf);
+ t.radx = EXTRACT_DOUBLE(buf);
+ t.rady = EXTRACT_DOUBLE(buf);
+ t.pres = EXTRACT_DOUBLE(buf);
+ t.ang = EXTRACT_DOUBLE(buf);
+ t.fx = EXTRACT_DOUBLE(buf);
+ t.fy = EXTRACT_DOUBLE(buf);
+ t.flags = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_MULTI_DOWN, n_evas, &t);
+}
+
+static void
+_main_loop_multi_up_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Multi_Event t;
+ int n_evas = EXTRACT_INT(buf);
+ t.d = EXTRACT_INT(buf);
+ t.b = EXTRACT_INT(buf);
+ t.x = EXTRACT_INT(buf);
+ t.y = EXTRACT_INT(buf);
+ t.rad = EXTRACT_DOUBLE(buf);
+ t.radx = EXTRACT_DOUBLE(buf);
+ t.rady = EXTRACT_DOUBLE(buf);
+ t.pres = EXTRACT_DOUBLE(buf);
+ t.ang = EXTRACT_DOUBLE(buf);
+ t.fx = EXTRACT_DOUBLE(buf);
+ t.fy = EXTRACT_DOUBLE(buf);
+ t.flags = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_MULTI_UP, n_evas, &t);
+}
+
+static void
+_main_loop_multi_move_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Multi_Move t;
+ int n_evas = EXTRACT_INT(buf);
+ t.d = EXTRACT_INT(buf);
+ t.x = EXTRACT_INT(buf);
+ t.y = EXTRACT_INT(buf);
+ t.rad = EXTRACT_DOUBLE(buf);
+ t.radx = EXTRACT_DOUBLE(buf);
+ t.rady = EXTRACT_DOUBLE(buf);
+ t.pres = EXTRACT_DOUBLE(buf);
+ t.ang = EXTRACT_DOUBLE(buf);
+ t.fx = EXTRACT_DOUBLE(buf);
+ t.fy = EXTRACT_DOUBLE(buf);
+ _feed_event(EXACTNESS_ACTION_MULTI_MOVE, n_evas, &t);
+}
+
+static void
+_main_loop_key_down_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Key_Down_Up t;
+ int n_evas = EXTRACT_INT(buf);
+ t.keyname = EXTRACT_STRING(buf);
+ t.key = EXTRACT_STRING(buf);
+ t.string = EXTRACT_STRING(buf);
+ t.compose = EXTRACT_STRING(buf);
+ t.keycode = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_KEY_DOWN, n_evas, &t);
+}
+
+static void
+_main_loop_key_up_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Key_Down_Up t;
+ int n_evas = EXTRACT_INT(buf);
+ t.keyname = EXTRACT_STRING(buf);
+ t.key = EXTRACT_STRING(buf);
+ t.string = EXTRACT_STRING(buf);
+ t.compose = EXTRACT_STRING(buf);
+ t.keycode = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_KEY_UP, n_evas, &t);
+}
+
+static void
+_main_loop_take_shot_cb(Eina_Debug_Session *session, int srcid, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ int n_evas = EXTRACT_INT(buf);
+ _feed_event(EXACTNESS_ACTION_TAKE_SHOT, n_evas, NULL);
+ _last_debug_session = session;
+ _last_debug_src_cid = srcid;
+}
+
+static void
+_main_loop_efl_event_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Efl_Event t;
+ t.wdg_name = EXTRACT_STRING(buf);
+ t.event_name = EXTRACT_STRING(buf);
+ _feed_event(EXACTNESS_ACTION_EFL_EVENT, 0, &t);
+}
+
+static void
+_main_loop_click_on_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer, int size EINA_UNUSED)
+{
+ char *buf = buffer;
+ Exactness_Action_Click_On t;
+ t.wdg_name = EXTRACT_STRING(buf);
+ _feed_event(EXACTNESS_ACTION_CLICK_ON, 0, &t);
+}
+
+static void
+_main_loop_stabilize_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer EINA_UNUSED, int size EINA_UNUSED)
+{
+ _feed_event(EXACTNESS_ACTION_STABILIZE, 0, NULL);
+}
+
+static void
+_main_loop_finish_cb(Eina_Debug_Session *session EINA_UNUSED, int srcid EINA_UNUSED, void *buffer EINA_UNUSED, int size EINA_UNUSED)
+{
+ ecore_main_loop_quit();
+}
+
+WRAPPER_TO_XFER_MAIN_LOOP(_mouse_in_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_mouse_out_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_mouse_wheel_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_multi_down_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_multi_up_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_multi_move_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_key_down_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_key_up_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_take_shot_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_efl_event_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_click_on_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_stabilize_cb)
+WRAPPER_TO_XFER_MAIN_LOOP(_finish_cb)
+
+EINA_DEBUG_OPCODES_ARRAY_DEFINE(_debug_ops,
+ {"Exactness/Actions/Mouse In", NULL, &_mouse_in_cb},
+ {"Exactness/Actions/Mouse Out", NULL, &_mouse_out_cb},
+ {"Exactness/Actions/Mouse Wheel", NULL, &_mouse_wheel_cb},
+ {"Exactness/Actions/Multi Down", NULL, &_multi_down_cb},
+ {"Exactness/Actions/Multi Up", NULL, &_multi_up_cb},
+ {"Exactness/Actions/Multi Move", NULL, &_multi_move_cb},
+ {"Exactness/Actions/Key Down", NULL, &_key_down_cb},
+ {"Exactness/Actions/Key Up", NULL, &_key_up_cb},
+ {"Exactness/Actions/Take Shot", &_take_shot_op, &_take_shot_cb},
+ {"Exactness/Actions/EFL Event", NULL, &_efl_event_cb},
+ {"Exactness/Actions/Click On", NULL, &_click_on_cb},
+ {"Exactness/Actions/Stabilize", NULL, &_stabilize_cb},
+ {"Exactness/Actions/Finish", NULL, &_finish_cb},
+ {NULL, NULL, NULL}
+);
+
+static Eina_Bool
+_src_feed(void *data EINA_UNUSED)
+{
+ if (!_evas_list) return EINA_TRUE;
+ _cur_event_list = _src_unit->actions;
+ Exactness_Action *act = eina_list_data_get(_cur_event_list);
+
+ if (act && act->delay_ms)
+ {
+ DBG(" Waiting <%f>\n", act->delay_ms / 1000.0);
+ ecore_timer_add(act->delay_ms / 1000.0, _feed_event_timer_cb, NULL);
+ }
+ else
+ {
+ _feed_event_timer_cb(NULL);
+ }
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_src_open()
+{
+ if (_src_type != FTYPE_REMOTE)
+ {
+ Eina_List *itr, *itr2;
+ Exactness_Action *act;
+ DBG("<%s> Source file is <%s>\n", __func__, _src_filename);
+ if (_src_type == FTYPE_EXU)
+ {
+ _src_unit = exactness_unit_file_read(_src_filename);
+ _ready_to_write = EINA_TRUE;
+ }
+ if (!_src_unit) return EINA_FALSE;
+ if (_stabilize_shots)
+ {
+ Exactness_Action_Type last_action_type = EXACTNESS_ACTION_UNKNOWN;
+ EINA_LIST_FOREACH_SAFE(_src_unit->actions, itr, itr2, act)
+ {
+ if (act->type == EXACTNESS_ACTION_TAKE_SHOT &&
+ last_action_type != EXACTNESS_ACTION_STABILIZE)
+ {
+ Exactness_Action *act2 = calloc(1, sizeof(*act2));
+ act2->type = EXACTNESS_ACTION_STABILIZE;
+ _src_unit->actions = eina_list_prepend_relative(_src_unit->actions, act2, act);
+ }
+ last_action_type = act->type;
+ }
+ }
+ if (EINA_DBL_NONZERO(_speed) && (!EINA_DBL_EQ(_speed, 1)))
+ {
+ EINA_LIST_FOREACH(_src_unit->actions, itr, act)
+ act->delay_ms /= _speed;
+ }
+ }
+ else
+ {
+ eina_debug_opcodes_register(NULL, _debug_ops(), NULL, NULL);
+ }
+ return EINA_TRUE;
+}
+
+static void
+_old_shots_rm_cb(const char *name, const char *path, void *data)
+{
+ const char *prefix = data;
+ unsigned int len = strlen(prefix);
+ if (!strncmp(name, prefix, len) && (strlen(name) > len) && (name[len] == SHOT_DELIMITER))
+ {
+ unsigned int length = strlen(path) + strlen(name) + 2;
+ char *buf = alloca(length);
+ snprintf(buf, length, "%s/%s", path, name);
+ if (unlink(buf))
+ {
+ printf("Failed deleting '%s/%s': ", path, name);
+ perror("");
+ }
+ }
+}
+
+static void
+_evas_del_cb(void *data EINA_UNUSED, const Efl_Event *event)
+{
+ Eina_List *p = eina_list_data_find_list(_evas_list, event->object);
+ eina_list_data_set(p, NULL);
+}
+
+static void
+_event_key_cb(void *data EINA_UNUSED, const Efl_Event *event)
+{
+ Efl_Input_Key *evk = event->info;
+ if (!evk) return;
+ const char *key = efl_input_key_name_get(evk);
+
+ if (!strcmp(key, PAUSE_KEY_STR) && efl_input_key_pressed_get(evk))
+ {
+ _pause_request = !_pause_request;
+ if (_pause_request) INF("Pausing scenario\n");
+ else
+ {
+ INF("Playing scenario\n");
+ if (!_playing_status)
+ _feed_event_timer_cb(NULL);
+ }
+ }
+}
+
+EFL_CALLBACKS_ARRAY_DEFINE(_evas_callbacks,
+ { EFL_EVENT_DEL, _evas_del_cb },
+ { EFL_CANVAS_SCENE_EVENT_RENDER_POST, _evas_render_post_cb },
+ { EFL_EVENT_KEY_DOWN, _event_key_cb },
+ { EFL_EVENT_KEY_UP, _event_key_cb }
+ )
+
+static Evas *
+_my_evas_new(int w EINA_UNUSED, int h EINA_UNUSED)
+{
+ Evas *e;
+ e = evas_new();
+ if (e)
+ {
+ INF("New Evas\n");
+ _evas_list = eina_list_append(_evas_list, e);
+ efl_event_callback_array_add(e, _evas_callbacks(), NULL);
+ }
+ return e;
+}
+
+static Eina_Bool
+_setup_dest_type(const char *dest, Eina_Bool external_injection)
+{
+ if (dest)
+ {
+ _dest = eina_stringshare_add(dest);
+ if (!strcmp(_dest + strlen(_dest) - 4,".exu"))
+ {
+ _dest_type = FTYPE_EXU;
+ char *path = ecore_file_dir_get(dest);
+
+ if (!ecore_file_mkpath(path))
+ {
+ fprintf(stderr, "Path for %s cannot be created\n", _dest);
+ free(path);
+ return EINA_FALSE;
+ }
+ free(path);
+ }
+ else
+ {
+ _dest_type = FTYPE_DIR;
+ if (!ecore_file_mkpath(_dest))
+ {
+ fprintf(stderr, "Directory %s cannot be created\n", _dest);
+ return EINA_FALSE;
+ }
+ }
+ }
+ if (external_injection)
+ {
+ _src_type = FTYPE_REMOTE;
+ if (_dest_type == FTYPE_UNKNOWN) _dest_type = FTYPE_REMOTE;
+ }
+ return EINA_TRUE;
+}
+
+static void
+_setup_names(const char *src)
+{
+ if (src)
+ {
+ _src_filename = eina_stringshare_add(src);
+ if (!strcmp(_src_filename + strlen(_src_filename) - 4,".exu"))
+ {
+ _src_type = FTYPE_EXU;
+ if (_dest_type == FTYPE_UNKNOWN)
+ {
+ _dest_type = FTYPE_EXU;
+ _dest = "./output.exu";
+ }
+ }
+ char *slash = strrchr(_src_filename, '/');
+ if (slash) _test_name = strdup(slash + 1);
+ else _test_name = strdup(_src_filename);
+ char *dot = strrchr(_test_name, '.');
+ if (dot) *dot = '\0';
+ }
+}
+
+static void
+_setup_dest_unit(void)
+{
+ if (_dest_type == FTYPE_EXU) _dest_unit = calloc(1, sizeof(*_dest_unit));
+
+}
+
+static void
+_remove_old_shots(void)
+{
+ if (_dest_type == FTYPE_DIR && _test_name)
+ eina_file_dir_list(_dest, 0, _old_shots_rm_cb, (void *)_test_name);
+}
+
+static Eina_Bool
+_setup_font_settings(const char *fonts_dir)
+{
+ const char *chosen_fonts = NULL;
+ if (_src_unit && _src_unit->fonts_path)
+ {
+ char buf[PATH_MAX];
+ if (!fonts_dir) fonts_dir = "./fonts";
+ snprintf(buf, PATH_MAX, "%s/%s", fonts_dir, _src_unit->fonts_path);
+ if (!ecore_file_exists(buf))
+ {
+ fprintf(stderr, "Unable to use the fonts path '%s' provided in %s\n",
+ _src_unit->fonts_path, _src_filename);
+ return EINA_FALSE;
+ }
+ chosen_fonts = _src_unit->fonts_path;
+ }
+ if (fonts_dir)
+ {
+ Eina_Tmpstr *fonts_conf_name = NULL;
+ if (!ecore_file_exists(fonts_dir))
+ {
+ fprintf(stderr, "Unable to find fonts directory %s\n", fonts_dir);
+ return EINA_FALSE;
+ }
+ if (!chosen_fonts)
+ {
+ Eina_List *dated_fonts = ecore_file_ls(fonts_dir);
+ char *date_dir;
+ chosen_fonts = eina_stringshare_add(eina_list_last_data_get(dated_fonts));
+ EINA_LIST_FREE(dated_fonts, date_dir) free(date_dir);
+ }
+ if (chosen_fonts)
+ {
+ int tmp_fd = eina_file_mkstemp("/tmp/fonts_XXXXXX.conf", &fonts_conf_name);
+ if (tmp_fd < 0) return EINA_FALSE;
+ FILE *tmp_f = fdopen(tmp_fd, "wb");
+ fprintf(tmp_f,
+ "<?xml version=\"1.0\"?>\n<!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">\n<fontconfig>\n"
+ "<dir prefix=\"default\">%s/%s</dir>\n</fontconfig>\n",
+ fonts_dir, chosen_fonts);
+ fclose(tmp_f);
+ close(tmp_fd);
+
+ setenv("FONTCONFIG_FILE", fonts_conf_name, 1);
+ }
+ }
+ return EINA_TRUE;
+}
+
+static void
+_setup_ee_creation(void)
+{
+ ecore_evas_callback_new_set(_my_evas_new);
+ if (_src_type != FTYPE_REMOTE)
+ ecore_idler_add(_src_feed, NULL);
+}
+
+static void
+_write_unit_file(void)
+{
+ if (_dest && _dest_unit && _ready_to_write)
+ {
+ Exactness_Unit *tmp = NULL;
+
+ EINA_SAFETY_ON_NULL_RETURN(_src_unit);
+ if (_src_type == FTYPE_EXU)
+ {
+ tmp = exactness_unit_file_read(_src_filename);
+ _dest_unit->actions = tmp->actions;
+ }
+ exactness_unit_file_write(_dest_unit, _dest);
+ }
+}
+#ifdef HAVE_DLSYM
+# define ORIGINAL_CALL_T(t, name, ...) \
+ t (*_original_init_cb)(); \
+ _original_init_cb = dlsym(RTLD_NEXT, name); \
+ original_return = _original_init_cb(__VA_ARGS__);
+#else
+# define ORIGINAL_CALL_T(t, name, ...) \
+ printf("THIS IS NOT SUPPORTED ON WINDOWS\n"); \
+ abort();
+#endif
+
+#define ORIGINAL_CALL(name, ...) \
+ ORIGINAL_CALL_T(int, name, __VA_ARGS__)
+
+EAPI int
+eina_init(void)
+{
+ int original_return;
+
+ ORIGINAL_CALL("eina_init");
+
+ ex_set_original_envvar();
+
+ if (original_return == 1)
+ {
+ const char *dest = getenv("EXACTNESS_DEST");
+ const char *external_injection = getenv("EXACTNESS_EXTERNAL_INJECTION");
+ const char *src = getenv("EXACTNESS_SRC");
+ const char *fonts_dir = getenv("EXACTNESS_FONTS_DIR");
+ const char *speed = getenv("EXACTNESS_SPEED");
+
+ _scan_objects = !!getenv("EXACTNESS_SCAN_OBJECTS");
+ _disable_shots = !!getenv("EXACTNESS_DISABLE_SHOTS");
+ _stabilize_shots = !!getenv("EXACTNESS_STABILIZE_SHOTS");
+ _verbose = !!getenv("EXACTNESS_VERBOSE");
+ if (speed)
+ _speed = atof(speed);
+
+ _log_domain = eina_log_domain_register("exactness_player", NULL);
+ if (!_setup_dest_type(dest, !!external_injection))
+ return 0;
+ _setup_names(src);
+ _setup_dest_unit();
+ _remove_old_shots();
+
+ if (!_src_open())
+ {
+ fprintf(stderr, "Unable to read source file\n");
+ return 0;
+ }
+ if (!_setup_font_settings(fonts_dir))
+ return 0;
+ }
+
+ return original_return;
+}
+
+EAPI int
+ecore_evas_init(void)
+{
+ int original_return;
+
+ ORIGINAL_CALL("ecore_evas_init")
+
+ if (ex_is_original_app() && original_return == 1)
+ {
+ _setup_ee_creation();
+ }
+
+ return original_return;
+}
+
+//hook, to hook in our theme
+EAPI int
+elm_init(int argc, char **argv)
+{
+ int original_return;
+ ORIGINAL_CALL("elm_init", argc, argv)
+
+ if (ex_is_original_app() && original_return == 1)
+ ex_prepare_elm_overlay();
+
+ return original_return;
+}
+
+EAPI void
+ecore_main_loop_begin(void)
+{
+ int original_return;
+ ORIGINAL_CALL("ecore_main_loop_begin")
+ if (ex_is_original_app())
+ _write_unit_file();
+ (void)original_return;
+}
+
+EAPI Eina_Value*
+efl_loop_begin(Eo *obj)
+{
+ Eina_Value *original_return;
+ ORIGINAL_CALL_T(Eina_Value*, "efl_loop_begin", obj);
+ if (ex_is_original_app())
+ _write_unit_file();
+ return original_return;
+}
+
+EAPI int
+eina_shutdown(void)
+{
+ int original_return;
+ static Eina_Bool output_written = EINA_FALSE;
+ ORIGINAL_CALL("eina_shutdown")
+ if (ex_is_original_app() &&original_return == 1 && !output_written)
+ {
+ output_written = EINA_TRUE;
+ _write_unit_file();
+ }
+
+ return original_return;
+}
diff --git a/src/bin/exactness/player_entry.edc b/src/bin/exactness/player_entry.edc
new file mode 100644
index 0000000000..0c1b907c10
--- /dev/null
+++ b/src/bin/exactness/player_entry.edc
@@ -0,0 +1,932 @@
+collections {
+ #include "../../../data/elementary/themes/fonts.edc"
+ group { name: "elm/entry/cursor/default";
+ min: 1 0;
+ images.image: "white_bar_vert_glow.png" COMP;
+ parts {
+ part { name: "cursor"; mouse_events: 0;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ rel1.offset: -4 -4;
+ rel2.offset: 3 3;
+ image.normal: "white_bar_vert_glow.png";
+ image.border: 4 4 4 4;
+ fill.smooth: 0;
+ color: 255 255 255 0;
+ color_class: "entry_cursor";
+ min: 9 10;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "clipper"; type: RECT;
+ description { state: "default" 0.0;
+ rel1.to: "cursor";
+ rel2.to: "cursor";
+ fixed: 1 1;
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "selection,changed"; source: "elm.text";
+ action: STATE_SET "hidden" 0.0;
+ target: "clipper";
+ }
+ program {
+ signal: "selection,cleared"; source: "elm.text";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ }
+ program {
+ signal: "selection,reset"; source: "elm.text";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ }
+ program {
+ signal: "elm,action,focus"; source: "elm";
+ action: ACTION_STOP;
+ target: "cursor_show";
+ target: "cursor_hide";
+ target: "cursor_show_timer";
+ target: "cursor_hide_timer";
+ after: "cursor_show";
+ }
+ program {
+ signal: "elm,action,unfocus"; source: "elm";
+ action: ACTION_STOP;
+ target: "cursor_show";
+ target: "cursor_hide";
+ target: "cursor_show_timer";
+ target: "cursor_hide_timer";
+ after: "cursor_hide_stop";
+ }
+ program {
+ signal: "elm,action,show,cursor"; source: "elm";
+ action: ACTION_STOP;
+ target: "cursor_show";
+ target: "cursor_hide";
+ target: "cursor_show_timer";
+ target: "cursor_hide_timer";
+ after: "cursor_show";
+ }
+ program { name: "cursor_hide_stop";
+ action: STATE_SET "default" 0.0;
+ target: "cursor";
+ }
+ program { name: "cursor_show";
+ action: STATE_SET "default" 0.0;
+ target: "cursor";
+ after: "cursor_show_timer";
+ }
+ program { name: "cursor_hide";
+ action: STATE_SET "default" 0.0;
+ target: "cursor";
+ transition: SINUSOIDAL 0.2;
+ after: "cursor_hide_timer";
+ }
+ program { name: "cursor_show_timer";
+ in: 0.5 0.0;
+ after: "cursor_hide";
+ }
+ program { name: "cursor_hide_timer";
+ in: 0.2 0.0;
+ after: "cursor_show";
+ }
+ }
+ }
+
+ group { name: "elm/entry/selection/default";
+ parts {
+ part { name: "base"; type: RECT;
+ description { state: "default" 0.0;
+ color: 51 153 255 255;
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/anchor/default";
+ images.image: "horizontal_separated_bar_small_glow.png" COMP;
+ parts {
+ part { name: "bar";
+ description { state: "default" 0.0;
+ image.normal: "horizontal_separated_bar_small_glow.png";
+ image.border: 4 4 4 4;
+ fill.smooth: 0;
+ fixed: 0 1;
+ rel1.relative: 0.0 1.0;
+ rel1.offset: -3 -5;
+ rel2.offset: 2 4;
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base/default";
+ sounds {
+ sample { name: "key-tap1" LOSSY 64;
+ source: "kbd-tap.wav";
+ }
+ sample { name: "key-tap2" LOSSY 64;
+ source: "kbd-tap2.wav";
+ }
+ sample { name: "key-tap3" LOSSY 64;
+ source: "kbd-tap3.wav";
+ }
+ sample { name: "key-tap4" LOSSY 64;
+ source: "kbd-tap4.wav";
+ }
+ sample { name: "key-tap5" LOSSY 64;
+ source: "kbd-tap5.wav";
+ }
+ }
+
+ styles {
+ style { name: "entry_style";
+ base: "font="FN" font_size=10 color=#ffffff style=shadow,bottom shadow_color=#00000080 wrap=word text_class=entry_text color_class=entry_text left_margin=2 right_margin=2";
+ ENABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_nowrap_style";
+ base: "font="FN" font_size=10 color=#ffffff style=shadow,bottom shadow_color=#00000080 text_class=entry_text color_class=entry_text left_margin=2 right_margin=2";
+ ENABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_disabled_style";
+ base: "font="FN" font_size=10 color=#151515 style=shadow,bottom shadow_color=#ffffff19 wrap=word text_class=entry_text_disabled color_class=entry_text_disabled left_margin=2 right_margin=2";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_nowrap_disabled_style";
+ base: "font="FN" font_size=10 color=#151515 style=shadow,bottom shadow_color=#ffffff19 text_class=entry_text_disabled color_class=entry_text_disabled left_margin=2 right_margin=2";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_guide_style";
+ base: "font="FN" font_size=10 color=#000000 style=shadow,bottom shadow_color=#ffffff19 wrap=word text_class=entry_guide_text color_class=entry_guide_text left_margin=2 right_margin=2 ellipsis=0.0";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ }
+ // data.item: "context_menu_orientation" "horizontal";
+ parts {
+ part { name: "elm.swallow.background"; type: SWALLOW;
+ description { state: "default" 0.0;
+ rel1.offset: 1 1;
+ rel2.offset: -2 -2;
+ }
+ }
+ part { name: "elm.guide"; type: TEXTBLOCK; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.text";
+ rel2.to: "elm.text";
+ text { style: "entry_guide_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text"; type: TEXTBLOCK;
+ scale: 1;
+ entry_mode: EDITABLE;
+ select_mode: DEFAULT;
+ // select_mode: EXPLICIT;
+ cursor_mode: BEFORE;
+ multiline: 1;
+ source: "elm/entry/selection/default"; // selection under
+ // source2: "X"; // selection over
+ // source3: "X"; // cursor under
+ source4: "elm/entry/cursor/default"; // cursorover
+ // source5: "elm/entry/anchor/default"; // anchor under
+ source6: "elm/entry/anchor/default"; // anchor over
+ description { state: "default" 0.0;
+ /* we gotta use 0 0 here, because of scrolled entries */
+ fixed: 0 0;
+ rel1.offset: 2 2;
+ rel2.offset: -3 -3;
+ text { style: "entry_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_disabled_style";
+ min: 0 1;
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "load"; source: "";
+ action: FOCUS_SET;
+ target: "elm.text";
+ }
+ program {
+ signal: "elm,state,disabled"; source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "elm.text";
+ }
+ program {
+ signal: "elm,state,enabled"; source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ program {
+ signal: "elm,guide,disabled"; source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "elm.guide";
+ }
+ program {
+ signal: "elm,guide,enabled"; source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.guide";
+ }
+ program { name: "key-down";
+ signal: "entry,keydown"; source: "elm.text";
+ script {
+ new buf[32];
+ snprintf(buf, 31, "key-down%i", (rand() % 5) + 1);
+ run_program(get_program_id(buf));
+ }
+ }
+ program { name: "key-down1";
+ action: PLAY_SAMPLE "key-tap1" 1.0 INPUT;
+ }
+ program { name: "key-down2";
+ action: PLAY_SAMPLE "key-tap2" 1.0 INPUT;
+ }
+ program { name: "key-down3";
+ action: PLAY_SAMPLE "key-tap3" 1.0 INPUT;
+ }
+ program { name: "key-down4";
+ action: PLAY_SAMPLE "key-tap4" 1.0 INPUT;
+ }
+ program { name: "key-down5";
+ action: PLAY_SAMPLE "key-tap5" 1.0 INPUT;
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-mixedwrap/default";
+ inherit: "elm/entry/base/default";
+ styles {
+ style { name: "entry_style_mixedwrap";
+ base: "font="FN" font_size=10 color=#ffffff style=shadow,bottom shadow_color=#00000080 wrap=mixed text_class=entry_text color_class=entry_text left_margin=2 right_margin=2";
+ ENABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_disabled_style_mixedwrap";
+ base: "font="FN" font_size=10 color=#151515 style=shadow,bottom shadow_color=#ffffff19 wrap=mixed text_class=entry_text_disabled color_class=entry_text_disabled left_margin=2 right_margin=2";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_guide_style_mixedwrap";
+ base: "font="FN" font_size=10 color=#000000 style=shadow,bottom shadow_color=#ffffff19 wrap=mixed text_class=entry_guide_text color_class=entry_guide_text left_margin=2 right_margin=2 ellipsis=0.0";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ }
+ parts {
+ part { name: "elm.guide"; type: TEXTBLOCK; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.text";
+ rel2.to: "elm.text";
+ text { style: "entry_guide_style_mixedwrap";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ text { style: "entry_style_mixedwrap";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_disabled_style_mixedwrap";
+ min: 0 1;
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-charwrap/default";
+ inherit: "elm/entry/base/default";
+ styles {
+ style { name: "entry_style_charwrap";
+ base: "font="FN" font_size=10 color=#ffffff style=shadow,bottom shadow_color=#00000080 wrap=char text_class=entry_text color_class=entry_text left_margin=2 right_margin=2";
+ ENABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_disabled_style_charwrap";
+ base: "font="FN" font_size=10 color=#151515 style=shadow,bottom shadow_color=#ffffff19 wrap=char text_class=entry_text_disabled color_class=entry_text_disabled left_margin=2 right_margin=2";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_guide_style_charwrap";
+ base: "font="FN" font_size=10 color=#000000 style=shadow,bottom shadow_color=#ffffff19 wrap=char text_class=entry_guide_text color_class=entry_guide_text left_margin=2 right_margin=2 ellipsis=0.0";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ }
+ parts {
+ part { name: "elm.guide"; type: TEXTBLOCK; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.text";
+ rel2.to: "elm.text";
+ text { style: "entry_guide_style_charwrap";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ text { style: "entry_style_charwrap";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_disabled_style_charwrap";
+ min: 0 1;
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-nowrap/default";
+ inherit: "elm/entry/base/default";
+ parts {
+ part { name: "elm.guide"; type: TEXTBLOCK; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.text";
+ rel2.to: "elm.text";
+ text { style: "entry_guide_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ description { state: "default" 0.0;
+ text { style: "entry_nowrap_style";
+ min: 1 1;
+ ellipsis: -1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_nowrap_disabled_style";
+ min: 0 1;
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-single/default";
+ inherit: "elm/entry/base/default";
+ styles {
+ style { name: "entry_single_style";
+ base: "font="FN" font_size=10 color=#ffffff style=shadow,bottom shadow_color=#00000080 wrap=none text_class=entry_text color_class=entry_text left_margin=2 right_margin=2";
+ ENABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_single_disabled_style";
+ base: "font="FN" font_size=10 color=#151515 style=shadow,bottom shadow_color=#ffffff19 wrap=none text_class=entry_text_disabled color_class=entry_text_disabled left_margin=2 right_margin=2";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ style { name: "entry_single_guide_style";
+ base: "font="FN" font_size=10 color=#000000 style=shadow,bottom shadow_color=#ffffff19 wrap=none text_class=entry_guide_text color_class=entry_guide_text left_margin=2 right_margin=2 ellipsis=0.0";
+ DISABLED_TEXTBLOCK_TAGS
+ }
+ }
+ parts {
+ part { name: "elm.guide"; type: TEXTBLOCK; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.text";
+ rel2.to: "elm.text";
+ text { style: "entry_single_guide_style";
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ multiline: 0;
+ description { state: "default" 0.0;
+ text { style: "entry_single_style";
+ min: 1 1;
+ ellipsis: -1;
+ max: 0 0;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_single_disabled_style";
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-single/spinner/default";
+ alias: "elm/entry/base-single/spinner/vertical";
+ inherit: "elm/entry/base-single/default";
+ styles {
+ style { name: "entry_single_spinner_style";
+ base: "font="FN" font_size=10 color=#ffffff style=shadow,bottom shadow_color=#00000080 align=center wrap=none text_class=entry_text color_class=entry_text left_margin=2 right_margin=2";
+ ENABLED_TEXTBLOCK_TAGS
+ }
+ }
+ parts {
+ part { name: "elm.text";
+ description { state: "default" 0.0;
+ text.style: "entry_single_spinner_style";
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-single-noedit/default";
+ inherit: "elm/entry/base/default";
+ parts {
+ part { name: "elm.text";
+ entry_mode: PLAIN;
+ multiline: 0;
+ source: "elm/entry/selection/default"; // selection under
+ source4: ""; // cursorover
+ source6: "elm/entry/anchor/default"; // anchor over
+ description { state: "default" 0.0;
+ text { style: "entry_single_style";
+ min: 1 1;
+ ellipsis: -1;
+ max: 0 0;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_single_disabled_style";
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-noedit/default";
+ inherit: "elm/entry/base/default";
+ parts {
+ part { name: "elm.text";
+ entry_mode: PLAIN;
+ source: "elm/entry/selection/default"; // selection under
+ source4: ""; // cursorover
+ source6: "elm/entry/anchor/default"; // anchor over
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ text { style: "entry_style";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_disabled_style";
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-noedit-mixedwrap/default";
+ inherit: "elm/entry/base/default";
+ parts {
+ part { name: "elm.text";
+ entry_mode: PLAIN;
+ source: "elm/entry/selection/default"; // selection under
+ source4: ""; // cursorover
+ source6: "elm/entry/anchor/default"; // anchor over
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ text { style: "entry_style_mixedwrap";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_disabled_style_mixedwrap";
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-noedit-charwrap/default";
+ inherit: "elm/entry/base/default";
+ parts {
+ part { name: "elm.text";
+ entry_mode: PLAIN;
+ source: "elm/entry/selection/default"; // selection under
+ source4: ""; // cursorover
+ source6: "elm/entry/anchor/default"; // anchor under
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ text { style: "entry_style_charwrap";
+ min: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_disabled_style_charwrap";
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-nowrap-noedit/default";
+ inherit: "elm/entry/base/default";
+ parts {
+ part { name: "elm.text";
+ entry_mode: PLAIN;
+ source: "elm/entry/selection/default"; // selection under
+ source4: ""; // cursorover
+ source6: "elm/entry/anchor/default"; // anchor under
+ description { state: "default" 0.0;
+ text { style: "entry_style";
+ min: 1 1;
+ ellipsis: -1;
+ align: 0.0 0.0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_disabled_style";
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/base-password/default";
+ inherit: "elm/entry/base/default";
+ parts {
+ part { name: "elm.guide"; type: TEXTBLOCK; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.text";
+ rel2.to: "elm.text";
+ text { style: "entry_single_guide_style";
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text";
+ entry_mode: PASSWORD;
+ multiline: 0;
+ source: "elm/entry/selection/default"; // selection under
+ source4: "elm/entry/cursor/default"; // cursorover
+ source6: "elm/entry/anchor/default"; // anchor under
+ description { state: "default" 0.0;
+ text { style: "entry_single_style";
+ repch: "*";
+ min: 1 1;
+ ellipsis: -1;
+ max: 0 0;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text { style: "entry_single_disabled_style";
+ }
+ }
+ }
+ }
+ }
+
+ group { name: "elm/entry/magnifier/default";
+ images.image: "frame_rounded.png" COMP;
+ parts {
+ part { name: "bg"; type: RECT; mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.offset: 10 10;
+ rel1.to: "over";
+ rel2.offset: -11 -11;
+ rel2.to: "over";
+ color: 48 48 48 255;
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.swallow.content"; type: SWALLOW; mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.offset: 10 10;
+ rel1.to: "over";
+ rel2.offset: -11 -11;
+ rel2.to: "over";
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "over"; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 128 64;
+ align: 0 0;
+ image.normal: "frame_rounded.png";
+ image.border: 14 14 14 14;
+ image.middle: 0;
+ fill.smooth: 0;
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ }
+ programs {
+ program { name: "magnifier_show";
+ signal: "elm,action,show,magnifier"; source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ target: "bg";
+ target: "over";
+ }
+ program { name: "magnifier_hide";
+ signal: "elm,action,hide,magnifier"; source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "elm.swallow.content";
+ target: "bg";
+ target: "over";
+ }
+ }
+ }
+
+ group { name: "elm/entry/handler/start/default";
+ images.image: "handle_pick_up_left.png" COMP;
+ parts {
+ part { name: "base"; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 21 27; // 42 54
+ image.normal: "handle_pick_up_left.png";
+ align: (29/42) (11/54);
+ color_class: "entry_selection_handler";
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "event"; type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ rel1.to: "base";
+ rel2.to: "base";
+ min: 32 32;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "elm,handler,show"; source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "base";
+ target: "event";
+ }
+ program {
+ signal: "elm,handler,hide"; source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "base";
+ target: "event";
+ }
+ }
+ }
+
+ group { name: "elm/entry/handler/end/default";
+ images.image: "handle_pick_up_right.png" COMP;
+ parts {
+ part { name: "base"; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 21 27; // 42 54
+ image.normal: "handle_pick_up_right.png";
+ align: (12/42) (11/54);
+ color_class: "entry_selection_handler";
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "event"; type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ rel1.to: "base";
+ rel2.to: "base";
+ min: 32 32;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "elm,handler,show"; source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "base";
+ target: "event";
+ }
+ program {
+ signal: "elm,handler,hide"; source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "base";
+ target: "event";
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // emoticon images from:
+ // Tanya - Latvia
+ // http://lazycrazy.deviantart.com/
+ // http://lazycrazy.deviantart.com/art/Very-Emotional-Emoticons-144461621
+ group { name: "elm/entry/emoticon/angry/default"; images.image:
+ "emo-angry.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-angry.png"; } } } }
+ group { name: "elm/entry/emoticon/angry-shout/default"; images.image:
+ "emo-angry-shout.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-angry-shout.png"; } } } }
+ group { name: "elm/entry/emoticon/crazy-laugh/default"; images.image:
+ "emo-crazy-laugh.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-crazy-laugh.png"; } } } }
+ group { name: "elm/entry/emoticon/evil-laugh/default"; images.image:
+ "emo-evil-laugh.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-evil-laugh.png"; } } } }
+ group { name: "elm/entry/emoticon/evil/default"; images.image:
+ "emo-evil.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-evil.png"; } } } }
+ group { name: "elm/entry/emoticon/goggle-smile/default"; images.image:
+ "emo-goggle-smile.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-goggle-smile.png"; } } } }
+ group { name: "elm/entry/emoticon/grumpy/default"; images.image:
+ "emo-grumpy.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-grumpy.png"; } } } }
+ group { name: "elm/entry/emoticon/grumpy-smile/default"; images.image:
+ "emo-grumpy-smile.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-grumpy-smile.png"; } } } }
+ group { name: "elm/entry/emoticon/guilty/default"; images.image:
+ "emo-guilty.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-guilty.png"; } } } }
+ group { name: "elm/entry/emoticon/guilty-smile/default"; images.image:
+ "emo-guilty-smile.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-guilty-smile.png"; } } } }
+ group { name: "elm/entry/emoticon/haha/default"; images.image:
+ "emo-haha.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-haha.png"; } } } }
+ group { name: "elm/entry/emoticon/half-smile/default"; images.image:
+ "emo-half-smile.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-half-smile.png"; } } } }
+ group { name: "elm/entry/emoticon/happy-panting/default"; images.image:
+ "emo-happy-panting.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-happy-panting.png"; } } } }
+ group { name: "elm/entry/emoticon/happy/default"; images.image:
+ "emo-happy.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-happy.png"; } } } }
+ group { name: "elm/entry/emoticon/indifferent/default"; images.image:
+ "emo-indifferent.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-indifferent.png"; } } } }
+ group { name: "elm/entry/emoticon/kiss/default"; images.image:
+ "emo-kiss.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-kiss.png"; } } } }
+ group { name: "elm/entry/emoticon/knowing-grin/default"; images.image:
+ "emo-knowing-grin.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-knowing-grin.png"; } } } }
+ group { name: "elm/entry/emoticon/laugh/default"; images.image:
+ "emo-laugh.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-laugh.png"; } } } }
+ group { name: "elm/entry/emoticon/little-bit-sorry/default"; images.image:
+ "emo-little-bit-sorry.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-little-bit-sorry.png"; } } } }
+ group { name: "elm/entry/emoticon/love-lots/default"; images.image:
+ "emo-love-lots.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-love-lots.png"; } } } }
+ group { name: "elm/entry/emoticon/love/default"; images.image:
+ "emo-love.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-love.png"; } } } }
+ group { name: "elm/entry/emoticon/minimal-smile/default"; images.image:
+ "emo-minimal-smile.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-minimal-smile.png"; } } } }
+ group { name: "elm/entry/emoticon/not-happy/default"; images.image:
+ "emo-not-happy.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-not-happy.png"; } } } }
+ group { name: "elm/entry/emoticon/not-impressed/default"; images.image:
+ "emo-not-impressed.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-not-impressed.png"; } } } }
+ group { name: "elm/entry/emoticon/omg/default"; images.image:
+ "emo-omg.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-omg.png"; } } } }
+ group { name: "elm/entry/emoticon/opensmile/default"; images.image:
+ "emo-opensmile.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-opensmile.png"; } } } }
+ group { name: "elm/entry/emoticon/smile/default"; images.image:
+ "emo-smile.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-smile.png"; } } } }
+ group { name: "elm/entry/emoticon/sorry/default"; images.image:
+ "emo-sorry.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-sorry.png"; } } } }
+ group { name: "elm/entry/emoticon/squint-laugh/default"; images.image:
+ "emo-squint-laugh.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-squint-laugh.png"; } } } }
+ group { name: "elm/entry/emoticon/surprised/default"; images.image:
+ "emo-surprised.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-surprised.png"; } } } }
+ group { name: "elm/entry/emoticon/suspicious/default"; images.image:
+ "emo-suspicious.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-suspicious.png"; } } } }
+ group { name: "elm/entry/emoticon/tongue-dangling/default"; images.image:
+ "emo-tongue-dangling.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-tongue-dangling.png"; } } } }
+ group { name: "elm/entry/emoticon/tongue-poke/default"; images.image:
+ "emo-tongue-poke.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-tongue-poke.png"; } } } }
+ group { name: "elm/entry/emoticon/uh/default"; images.image:
+ "emo-uh.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-uh.png"; } } } }
+ group { name: "elm/entry/emoticon/unhappy/default"; images.image:
+ "emo-unhappy.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-unhappy.png"; } } } }
+ group { name: "elm/entry/emoticon/very-sorry/default"; images.image:
+ "emo-very-sorry.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-very-sorry.png"; } } } }
+ group { name: "elm/entry/emoticon/what/default"; images.image:
+ "emo-what.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-what.png"; } } } }
+ group { name: "elm/entry/emoticon/wink/default"; images.image:
+ "emo-wink.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-wink.png"; } } } }
+ group { name: "elm/entry/emoticon/worried/default"; images.image:
+ "emo-worried.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-worried.png"; } } } }
+ group { name: "elm/entry/emoticon/wtf/default"; images.image:
+ "emo-wtf.png" COMP; parts { part { name: "icon"; mouse_events: 0; description { state: "default" 0.0; max: 64 64; image.normal:
+ "emo-wtf.png"; } } } }
+ //------------------------------------------------------------
+}
diff --git a/src/bin/exactness/recorder.c b/src/bin/exactness/recorder.c
new file mode 100644
index 0000000000..6936521d7a
--- /dev/null
+++ b/src/bin/exactness/recorder.c
@@ -0,0 +1,397 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <unistd.h>
+
+#ifdef HAVE_DLSYM
+# include <dlfcn.h>
+#endif
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_SYSINFO_H
+# include <sys/sysinfo.h>
+#endif
+
+#include <Eina.h>
+#include <Eo.h>
+#include <Evas.h>
+#include <Ecore.h>
+#include <Ecore_File.h>
+#include <Ecore_Getopt.h>
+#include <Ecore_Con.h>
+#include <Elementary.h>
+
+#include "common.h"
+
+#define STABILIZE_KEY_STR "F1"
+#define SHOT_KEY_STR "F2"
+#define SAVE_KEY_STR "F3"
+
+#define DBG(...) EINA_LOG_DOM_DBG(_log_domain, __VA_ARGS__)
+#define INF(...) EINA_LOG_DOM_INFO(_log_domain, __VA_ARGS__)
+
+static int _log_domain = -1;
+
+static const char *_out_filename = NULL;
+
+static Eina_List *_evas_list = NULL;
+static unsigned int _last_evas_id = 0;
+
+static Exactness_Unit *_unit = NULL;
+
+static char *_shot_key = NULL;
+static unsigned int _last_timestamp = 0.0;
+
+static Exactness_Action_Type
+_event_pointer_type_get(Efl_Pointer_Action t)
+{
+ switch(t)
+ {
+ case EFL_POINTER_ACTION_IN: return EXACTNESS_ACTION_MOUSE_IN;
+ case EFL_POINTER_ACTION_OUT: return EXACTNESS_ACTION_MOUSE_OUT;
+ case EFL_POINTER_ACTION_DOWN: return EXACTNESS_ACTION_MULTI_DOWN;
+ case EFL_POINTER_ACTION_UP: return EXACTNESS_ACTION_MULTI_UP;
+ case EFL_POINTER_ACTION_MOVE: return EXACTNESS_ACTION_MULTI_MOVE;
+ case EFL_POINTER_ACTION_WHEEL: return EXACTNESS_ACTION_MOUSE_WHEEL;
+ default: return EXACTNESS_ACTION_UNKNOWN;
+ }
+}
+
+static void
+_output_write()
+{
+ if (_unit) exactness_unit_file_write(_unit, _out_filename);
+}
+
+static void
+_add_to_list(Exactness_Action_Type type, unsigned int n_evas, unsigned int timestamp, void *data, int len)
+{
+ if (_unit)
+ {
+ const Exactness_Action *prev_v = eina_list_last_data_get(_unit->actions);
+ if (prev_v)
+ {
+ if (prev_v->type == type &&
+ timestamp == _last_timestamp &&
+ prev_v->n_evas == n_evas &&
+ (!len || !memcmp(prev_v->data, data, len))) return;
+ }
+ INF("Recording %s\n", _exactness_action_type_to_string_get(type));
+ Exactness_Action *act = malloc(sizeof(*act));
+ act->type = type;
+ act->n_evas = n_evas;
+ act->delay_ms = timestamp - _last_timestamp;
+ _last_timestamp = timestamp;
+ if (len)
+ {
+ act->data = malloc(len);
+ memcpy(act->data, data, len);
+ }
+ _unit->actions = eina_list_append(_unit->actions, act);
+ }
+}
+
+static int
+_evas_id_get(Evas *e)
+{
+ return (intptr_t)efl_key_data_get(e, "__evas_id");
+}
+
+static void
+_event_pointer_cb(void *data, const Efl_Event *event)
+{
+ Eo *eo_e = data;
+ Eo *evp = event->info;
+ if (!evp) return;
+
+ int timestamp = efl_input_timestamp_get(evp);
+ int n_evas = _evas_id_get(eo_e);
+ Efl_Pointer_Action action = efl_input_pointer_action_get(evp);
+ Exactness_Action_Type evt = _event_pointer_type_get(action);
+
+ if (!timestamp) return;
+
+ DBG("Calling \"%s\" timestamp=<%u>\n", _exactness_action_type_to_string_get(evt), timestamp);
+
+ switch (action)
+ {
+ case EFL_POINTER_ACTION_MOVE:
+ {
+ double rad = 0, radx = 0, rady = 0, pres = 0, ang = 0, fx = 0, fy = 0;
+ int tool = efl_input_pointer_touch_id_get(evp);
+ Eina_Position2D pos = efl_input_pointer_position_get(evp);
+ Exactness_Action_Multi_Move t = { tool, pos.x, pos.y, rad, radx, rady, pres, ang, fx, fy };
+ if (n_evas >= 0) _add_to_list(evt, n_evas, timestamp, &t, sizeof(t));
+ break;
+ }
+ case EFL_POINTER_ACTION_DOWN:
+ case EFL_POINTER_ACTION_UP:
+ {
+ double rad = 0, radx = 0, rady = 0, pres = 0, ang = 0, fx = 0, fy = 0;
+ int b = efl_input_pointer_button_get(evp);
+ int tool = efl_input_pointer_touch_id_get(evp);
+ Eina_Position2D pos = efl_input_pointer_position_get(evp);
+ Efl_Pointer_Flags flags = efl_input_pointer_button_flags_get(evp);
+ Exactness_Action_Multi_Event t = { tool, b, pos.x, pos.y, rad, radx, rady, pres, ang,
+ fx, fy, (Evas_Button_Flags)flags };
+ if (n_evas >= 0) _add_to_list(evt, n_evas, timestamp, &t, sizeof(t));
+ break;
+ }
+ case EFL_POINTER_ACTION_IN:
+ case EFL_POINTER_ACTION_OUT:
+ {
+ if (n_evas >= 0) _add_to_list(evt, n_evas, timestamp, NULL, 0);
+ break;
+ }
+ case EFL_POINTER_ACTION_WHEEL:
+ {
+ Eina_Bool horiz = efl_input_pointer_wheel_horizontal_get(evp);
+ int z = efl_input_pointer_wheel_delta_get(evp);
+ Exactness_Action_Mouse_Wheel t = { horiz, z };
+ if (n_evas >= 0) _add_to_list(evt, n_evas, timestamp, &t, sizeof(t));
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+static void
+_event_key_cb(void *data, const Efl_Event *event)
+{
+ Efl_Input_Key *evk = event->info;
+ Eo *eo_e = data;
+ if (!evk) return;
+ const char *key = efl_input_key_name_get(evk);
+ int timestamp = efl_input_timestamp_get(evk);
+ unsigned int n_evas = _evas_id_get(eo_e);
+ Exactness_Action_Type evt = EXACTNESS_ACTION_KEY_UP;
+
+ if (efl_input_key_pressed_get(evk))
+ {
+ if (!strcmp(key, _shot_key))
+ {
+ DBG("Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp);
+ _add_to_list(EXACTNESS_ACTION_TAKE_SHOT, n_evas, timestamp, NULL, 0);
+ return;
+ }
+ if (!strcmp(key, STABILIZE_KEY_STR))
+ {
+ DBG("Stabilize: %s timestamp=<%u>\n", __func__, timestamp);
+ _add_to_list(EXACTNESS_ACTION_STABILIZE, n_evas, timestamp, NULL, 0);
+ return;
+ }
+ if (!strcmp(key, SAVE_KEY_STR))
+ {
+ _output_write();
+ DBG("Save events: %s timestamp=<%u>\n", __func__, timestamp);
+ return;
+ }
+ evt = EXACTNESS_ACTION_KEY_DOWN;
+ }
+ else
+ {
+ if (!strcmp(key, _shot_key) || !strcmp(key, SAVE_KEY_STR) || !strcmp(key, STABILIZE_KEY_STR)) return;
+ }
+ if (_unit)
+ { /* Construct duplicate strings, free them when list if freed */
+ Exactness_Action_Key_Down_Up t;
+ t.keyname = eina_stringshare_add(key);
+ t.key = eina_stringshare_add(efl_input_key_sym_get(evk));
+ t.string = eina_stringshare_add(efl_input_key_string_get(evk));
+ t.compose = eina_stringshare_add(efl_input_key_compose_string_get(evk));
+ t.keycode = efl_input_key_code_get(evk);
+ _add_to_list(evt, n_evas, timestamp, &t, sizeof(t));
+ }
+}
+
+// note: "hold" event comes from above (elm), not below (ecore)
+EFL_CALLBACKS_ARRAY_DEFINE(_event_pointer_callbacks,
+ { EFL_EVENT_POINTER_MOVE, _event_pointer_cb },
+ { EFL_EVENT_POINTER_DOWN, _event_pointer_cb },
+ { EFL_EVENT_POINTER_UP, _event_pointer_cb },
+ { EFL_EVENT_POINTER_IN, _event_pointer_cb },
+ { EFL_EVENT_POINTER_OUT, _event_pointer_cb },
+ { EFL_EVENT_POINTER_WHEEL, _event_pointer_cb },
+ { EFL_EVENT_FINGER_MOVE, _event_pointer_cb },
+ { EFL_EVENT_FINGER_DOWN, _event_pointer_cb },
+ { EFL_EVENT_FINGER_UP, _event_pointer_cb },
+ { EFL_EVENT_KEY_DOWN, _event_key_cb },
+ { EFL_EVENT_KEY_UP, _event_key_cb }
+ )
+
+static Evas *
+_my_evas_new(int w EINA_UNUSED, int h EINA_UNUSED)
+{
+ Evas *e;
+ e = evas_new();
+ if (e)
+ {
+ INF("New Evas\n");
+ _evas_list = eina_list_append(_evas_list, e);
+ efl_key_data_set(e, "__evas_id", (void *)(intptr_t)_last_evas_id++);
+ efl_event_callback_array_add(e, _event_pointer_callbacks(), e);
+ }
+ return e;
+}
+
+static void
+_setup_unit(void)
+{
+ if (_unit) return;
+
+ _unit = calloc(1, sizeof(*_unit));
+}
+
+static Eina_Bool
+_setup_fonts_dir(const char *fonts_dir)
+{
+ if (fonts_dir)
+ {
+ Eina_Tmpstr *fonts_conf_name = NULL;
+ if (!ecore_file_exists(fonts_dir))
+ {
+ fprintf(stderr, "Unable to find fonts directory %s\n", fonts_dir);
+ return EINA_FALSE;
+ }
+ Eina_List *dated_fonts = ecore_file_ls(fonts_dir);
+ char *date_dir;
+ _unit->fonts_path = strdup(eina_list_last_data_get(dated_fonts));
+ EINA_LIST_FREE(dated_fonts, date_dir) free(date_dir);
+ if (_unit->fonts_path)
+ {
+ int tmp_fd = eina_file_mkstemp("/tmp/fonts_XXXXXX.conf", &fonts_conf_name);
+ if (tmp_fd < 0) return EINA_FALSE;
+ FILE *tmp_f = fdopen(tmp_fd, "wb");
+ fprintf(tmp_f,
+ "<?xml version=\"1.0\"?>\n<!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">\n<fontconfig>\n"
+ "<dir prefix=\"default\">%s/%s</dir>\n</fontconfig>\n",
+ fonts_dir, _unit->fonts_path);
+ fclose(tmp_f);
+ close(tmp_fd);
+
+ setenv("FONTCONFIG_FILE", fonts_conf_name, 1);
+ }
+ }
+ return EINA_TRUE;
+}
+
+static void
+_setup_shot_key(void)
+{
+ if (!_shot_key) _shot_key = getenv("SHOT_KEY");
+ if (!_shot_key) _shot_key = SHOT_KEY_STR;
+}
+
+static void
+_setup_ee_creation(void)
+{
+ ecore_evas_callback_new_set(_my_evas_new);
+ _last_timestamp = ecore_time_get() * 1000;
+}
+
+#ifdef HAVE_DLSYM
+# define ORIGINAL_CALL_T(t, name, ...) \
+ t (*_original_init_cb)(); \
+ _original_init_cb = dlsym(RTLD_NEXT, name); \
+ original_return = _original_init_cb(__VA_ARGS__);
+#else
+# define ORIGINAL_CALL_T(t, name, ...) \
+ printf("THIS IS NOT SUPPORTED ON WINDOWS\n"); \
+ abort();
+#endif
+
+#define ORIGINAL_CALL(name, ...) \
+ ORIGINAL_CALL_T(int, name, __VA_ARGS__)
+
+EAPI int
+eina_init(void)
+{
+ int original_return;
+
+ ORIGINAL_CALL("eina_init");
+
+ ex_set_original_envvar();
+
+ if (ex_is_original_app() && original_return == 1)
+ {
+ _log_domain = eina_log_domain_register("exactness_recorder", NULL);
+
+ _out_filename = getenv("EXACTNESS_DEST");
+ _setup_unit();
+ if (!_setup_fonts_dir(getenv("EXACTNESS_FONTS_DIR")))
+ return -1;
+
+ _setup_shot_key();
+ }
+
+ return original_return;
+}
+
+EAPI int
+ecore_evas_init(void)
+{
+ int original_return;
+
+ ORIGINAL_CALL("ecore_evas_init")
+
+ if (ex_is_original_app() && original_return == 1)
+ {
+ _setup_ee_creation();
+
+ }
+
+ return original_return;
+}
+
+//hook, to hook in our theme
+EAPI int
+elm_init(int argc, char **argv)
+{
+ int original_return;
+ ORIGINAL_CALL("elm_init", argc, argv)
+
+ if (ex_is_original_app() && original_return == 1)
+ ex_prepare_elm_overlay();
+
+ return original_return;
+}
+
+EAPI void
+ecore_main_loop_begin(void)
+{
+ int original_return;
+ ORIGINAL_CALL("ecore_main_loop_begin")
+ if (ex_is_original_app())
+ _output_write();
+ (void)original_return;
+}
+
+EAPI Eina_Value*
+efl_loop_begin(Eo *obj)
+{
+ Eina_Value *original_return;
+ ORIGINAL_CALL_T(Eina_Value*, "efl_loop_begin", obj);
+ if (ex_is_original_app())
+ _output_write();
+ return original_return;
+}
+
+EAPI int
+eina_shutdown(void)
+{
+ int original_return;
+ static Eina_Bool output_written = EINA_FALSE;
+ ORIGINAL_CALL("eina_shutdown")
+ if (ex_is_original_app() && original_return == 1 && !output_written)
+ {
+ output_written = EINA_TRUE;
+ _output_write();
+ }
+
+ return original_return;
+}
diff --git a/src/bindings/cxx/eina_cxx/eina_log.hh b/src/bindings/cxx/eina_cxx/eina_log.hh
index c287b7bd2d..d59af25e59 100644
--- a/src/bindings/cxx/eina_cxx/eina_log.hh
+++ b/src/bindings/cxx/eina_cxx/eina_log.hh
@@ -210,7 +210,7 @@ inline void _log(std::stringstream const& stream, int domain, ::Eina_Log_Level l
for( bool run = ::eina_log_domain_level_check((DOMAIN), LEVEL); run;) \
for(std::stringstream stream; run ; \
::efl::eina::_log(std::move(stream), (DOMAIN), LEVEL \
- , __FILE__, __FUNCTION__, __LINE__), run = false) \
+ , __FILE__, __func__, __LINE__), run = false) \
stream
/**
diff --git a/src/bindings/cxx/eina_cxx/eina_ptrlist.hh b/src/bindings/cxx/eina_cxx/eina_ptrlist.hh
index 2c2416c06e..f0ba2454f9 100644
--- a/src/bindings/cxx/eina_cxx/eina_ptrlist.hh
+++ b/src/bindings/cxx/eina_cxx/eina_ptrlist.hh
@@ -53,7 +53,7 @@ struct _ptr_list_iterator_base
typedef std::ptrdiff_t difference_type;
typedef std::bidirectional_iterator_tag iterator_category;
- _ptr_list_iterator_base() : _list(0) {}
+ _ptr_list_iterator_base() : _list(nullptr), _node(nullptr) {}
_ptr_list_iterator_base(Eina_List* list, Eina_List* node)
: _list(list), _node(node)
{}
diff --git a/src/bindings/cxx/eina_cxx/eina_variant.hh b/src/bindings/cxx/eina_cxx/eina_variant.hh
index a337f2e211..112549020f 100644
--- a/src/bindings/cxx/eina_cxx/eina_variant.hh
+++ b/src/bindings/cxx/eina_cxx/eina_variant.hh
@@ -24,9 +24,21 @@
#include <iosfwd>
#include <eina_aligned_union.hh>
+#include <eina_tuple.hh>
namespace efl { namespace eina {
+template <typename... Args>
+struct variant;
+
+template <typename...Args>
+struct variant_size : std::tuple_size<std::tuple<Args...>>::type
+{
+};
+
+template <typename V>
+struct variant_as_tuple;
+
namespace _impl {
template <typename T, typename U, typename...Others>
@@ -51,7 +63,57 @@ template <typename T, typename U, typename...Args>
struct find : find_impl<0u, T, U, Args...>
{};
+template <std::size_t NT, std::size_t NV, typename TupleVariant, typename TypesFound>
+struct visit_impl_meta_args
+{
+ typedef std::integral_constant<std::size_t, NT> current_type_index;
+ typedef std::integral_constant<std::size_t, NV> current_variant_index;
+ typedef TupleVariant variants;
+ // typedef typename std::tuple_element<NV, variants>::type current_variant;
+ // typedef typename variant_as_tuple<current_variant>::type current_variant_types;
+ // typedef typename std::tuple_element<NT, current_variant_types>::type current_type;
+ typedef TypesFound types_found;
+};
+
+template <typename T> struct current_variant_types
+{
+ typedef typename std::tuple_element<T::current_variant_index::value, typename T::variants>::type current_variant;
+ typedef typename variant_as_tuple<current_variant>::type type;
+};
}
+
+// template <typename FoundTypes, std::size_t N, typename...Tuples>
+// struct call_n_visitor;
+
+// template <typename FoundTypes, std::size_t N, typename Tuple, typename...Tuples>
+// struct call_n_visitor<FoundTypes, N, Tuple, Tuples...>
+// {
+
+ /*
+ template <typename F>
+ static typename F::result_type call(int type, void* buffer, F f)
+ {
+ if(type == N)
+ {
+ using std::tuple_element;
+ typedef typename tuple_element<N, Tuple>::type type;
+ type* o = static_cast<type*>(buffer);
+ return f(*o);
+ }
+ else
+ return call_visitor<N+1, L, Tuple>::call(type, buffer, f);
+ }
+ */
+
+// template <typename FoundTypes, std::size_t L, typename Tuple>
+// struct call_n_visitor<FoundTypes, L, L, Tuple>
+// {
+// template <typename F, typename...Variants>
+// static typename F::result_type call(int, void const*, F, Variants&&... variants)
+// {
+// std::abort();
+// }
+// };
template <std::size_t N, std::size_t L, typename Tuple>
struct call_visitor
@@ -306,6 +368,11 @@ struct variant
{
return call_visitor<0u, sizeof...(Args), std::tuple<Args...>>::call(type, static_cast<void*>(&buffer), f);
}
+
+ constexpr std::size_t index() const
+ {
+ return type;
+ }
private:
template <typename T>
@@ -332,6 +399,103 @@ private:
* Member variable for holding the contained value.
*/
buffer_type buffer;
+
+ template <typename V>
+ friend struct variant_as_tuple;
+
+ // template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant, std::size_t...I>
+ // friend typename F::result_type visit_impl2
+ // (std::false_type, std::false_type
+ // , _impl::visit_impl_meta_args<NT, NV, Tuple, Types>, F&& f, TupleVariant&& variants, index_sequence<I...>);
+
+ // template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant, std::size_t...I>
+ // friend typename F::result_type visit_impl2
+ // (std::true_type, std::false_type
+ // , _impl::visit_impl_meta_args<NT, NV, Tuple, Types>, F&& f, TupleVariant&& variants, index_sequence<I...>);
+ // template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant, std::size_t...I>
+ // friend typename F::result_type visit_impl2
+ // (std::false_type, std::true_type
+ // , _impl::visit_impl_meta_args<NT, NV, Tuple, Types>, F&& f, TupleVariant&& variants, index_sequence<I...>);
+
+ // // template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant>
+ // // friend typename F::result_type visit_impl2
+ // // (std::true_type, std::false_type
+ // // , _impl::visit_impl_meta_args<NT, NV, Tuple, Types>, F&& f, TupleVariant&& variants)
+ // // {
+ // // }
+
+ // // template <typename F, typename...AllVariants, typename...Variants>
+ // // friend typename F::result_type call
+ // // (std::true_type, int, F &&, Variants&&... variants)
+ // // {
+ // // std::abort();
+ // // }
+
+ // // template <typename F, typename Variant, typename...Variants>
+ // // friend typename F::result_type call (F&&f, Variant&& variant, Variants&&... variants)
+ // // {
+ // // return call (std::integral_constant<bool, (N == variant_size<Variant>::value)>{}
+ // // , variant.type, std::forward<F>(f), std::forward<Variant>(variant), std::forward<Variants>(variants)...);
+ // // }
+
+ // // template <typename F, typename Variant, typename...Variants>
+ // // friend typename F::result_type call (F&&f, Variant&& variant, Variants&&... variants)
+ // // {
+ // // return call (std::integral_constant<bool, (N == variant_size<Variant>::value)>{}
+ // // , variant.type, std::forward<F>(f), std::forward<Variant>(variant), std::forward<Variants>(variants)...);
+ // // }
+
+ // template <typename F, typename...Variants>
+ // friend typename F::result_type visit_impl (F&& f, Variants&&... variants);
+};
+
+
+template <typename...VArgs>
+struct variant_as_tuple<variant<VArgs...>>
+{
+ typedef std::tuple<VArgs...> type;
+};
+
+template <typename...VArgs>
+struct variant_as_tuple<const variant<VArgs...>>
+{
+ typedef std::tuple<VArgs...> type;
+};
+
+template <typename...VArgs>
+struct variant_as_tuple<volatile variant<VArgs...>>
+{
+ typedef std::tuple<VArgs...> type;
+};
+
+template <typename...VArgs>
+struct variant_as_tuple<const volatile variant<VArgs...>>
+{
+ typedef std::tuple<VArgs...> type;
+};
+
+template <typename...VArgs>
+struct variant_as_tuple<variant<VArgs...>&>
+{
+ typedef std::tuple<VArgs...> type;
+};
+
+template <typename...VArgs>
+struct variant_as_tuple<const variant<VArgs...>&>
+{
+ typedef std::tuple<VArgs...> type;
+};
+
+template <typename...VArgs>
+struct variant_as_tuple<volatile variant<VArgs...>&>
+{
+ typedef std::tuple<VArgs...> type;
+};
+
+template <typename...VArgs>
+struct variant_as_tuple<const volatile variant<VArgs...>&>
+{
+ typedef std::tuple<VArgs...> type;
};
template <typename...Args>
@@ -372,7 +536,80 @@ T const& get(variant<Args...>const& variant, typename std::enable_if<_impl::is_o
else
throw std::logic_error("");
}
-
+
+template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant, std::size_t...I>
+ typename F::result_type visit_impl2
+ (std::false_type, std::true_type
+ , _impl::visit_impl_meta_args<NT, NV, Tuple, Types>, F&& f, TupleVariant&& variants
+ , eina::index_sequence<I...>)
+ {
+ return f (eina::get<typename std::tuple_element<I, Types>::type>(std::get<I>(variants))...);
+ }
+
+ template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant, std::size_t...I>
+ typename F::result_type visit_impl2
+ (std::true_type, std::false_type
+ , _impl::visit_impl_meta_args<NT, NV, Tuple, Types>, F&&, TupleVariant&&, eina::index_sequence<I...>)
+ {
+ std::abort();
+ }
+
+
+ template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant
+ , std::size_t...I>
+ typename F::result_type visit_impl2 (std::false_type, std::false_type
+ , _impl::visit_impl_meta_args<NT, NV, Tuple, Types>, F&& f, TupleVariant&& variants
+ , index_sequence<I...>)
+ {
+ using std::tuple_element;
+ typedef _impl::visit_impl_meta_args<NT, NV, Tuple, Types> meta_args;
+ if(std::get<NV>(variants).index() == NT)
+ {
+ typedef typename _impl::current_variant_types<meta_args>::type variant_types;
+ typedef typename tuple_element<NT, variant_types>::type type;
+ std::integral_constant<bool, (std::tuple_size<Tuple>::value == NV+1)> is_true {};
+ return visit_impl2( std::false_type{}
+ , is_true
+ , _impl::visit_impl_meta_args<0u, NV+1, Tuple, typename _mpl::push_back<Types, type>::type>{}
+ , std::forward<F>(f), std::forward<TupleVariant>(variants)
+ , make_index_sequence<std::tuple_size<TupleVariant>::value>{});
+ }
+ else
+ {
+ typedef typename _impl::current_variant_types<meta_args>::type variant_types;
+ return visit_impl2 (std::integral_constant<bool, (std::tuple_size<variant_types>::value == NT+1)>{}
+ , std::false_type{}
+ , _impl::visit_impl_meta_args<NT+1, NV, Tuple, Types>{}, std::forward<F>(f), std::forward<TupleVariant>(variants)
+ , make_index_sequence<std::tuple_size<TupleVariant>::value>{});
+ }
+ }
+
+ template <std::size_t NT, std::size_t NV, typename F, typename Tuple, typename Types, typename TupleVariant>
+ typename F::result_type visit_impl_aux (std::false_type fals, std::false_type
+ , _impl::visit_impl_meta_args<NT, NV, Tuple, Types> args, F&& f, TupleVariant&& variants)
+ {
+ return visit_impl2 (fals, fals, args, std::forward<F>(f), std::forward<TupleVariant>(variants)
+ , make_index_sequence<std::tuple_size<TupleVariant>::value>{});
+ }
+
+ template <typename F, typename...Variants>
+ typename F::result_type visit_impl (F&& f, Variants&&... variants)
+ {
+ return visit_impl_aux
+ (std::false_type{}
+ , std::false_type{}
+ , _impl::visit_impl_meta_args
+ <0u, 0u
+ , std::tuple<typename std::remove_cv<Variants>::type...>, std::tuple<>>{}, std::forward<F>(f), std::forward_as_tuple(std::forward<Variants>(variants)...));
+ }
+
+template <typename F, typename...Variants>
+auto visit (F&& function, Variants&& ... variants) -> typename F::result_type
+{
+ return visit_impl (std::forward<F>(function), std::forward<Variants>(variants)...);
+}
+
} }
#endif
+
diff --git a/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh b/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh
index 633d377b0b..3f4521fe66 100644
--- a/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh
+++ b/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh
@@ -53,6 +53,10 @@ template <>
struct in_traits<efl::eina::strbuf> { typedef efl::eina::strbuf type; };
template <>
struct in_traits<efl::eina::strbuf const> { typedef efl::eina::strbuf const type; };
+template <>
+struct in_traits<efl::eina::strbuf_view> { typedef efl::eina::strbuf_view type; };
+template <>
+struct in_traits<efl::eina::strbuf_view const> { typedef efl::eina::strbuf_view const type; };
template <typename T>
struct in_traits<T&> { typedef T& type; };
template <typename T>
@@ -550,10 +554,22 @@ inline const char* convert_to_c_impl(efl::eina::stringshare x, tag<const char*,
{
return eina_stringshare_ref(x.c_str());
}
+inline Eina_Strbuf const* convert_to_c_impl(efl::eina::strbuf& x, tag<Eina_Strbuf const*, efl::eina::strbuf, false>)
+{
+ return x.native_handle();
+}
inline Eina_Strbuf* convert_to_c_impl(efl::eina::strbuf& x, tag<Eina_Strbuf*, efl::eina::strbuf, false>)
{
return x.native_handle();
}
+inline Eina_Strbuf const* convert_to_c_impl(efl::eina::strbuf_view const& x, tag<Eina_Strbuf const*, efl::eina::strbuf_view, false>)
+{
+ return x.native_handle();
+}
+inline Eina_Strbuf* convert_to_c_impl(efl::eina::strbuf_view const& x, tag<Eina_Strbuf*, efl::eina::strbuf_view, false>)
+{
+ return const_cast<Eina_Strbuf*>(x.native_handle());
+}
template <typename T, typename U, typename Deleter>
T* convert_to_c_impl(std::unique_ptr<U, Deleter>& v, tag<T*, std::unique_ptr<U, Deleter>>)
{
@@ -732,6 +748,19 @@ T convert_to_return(U* value, tag<T, U*>, typename std::enable_if<is_range<T>::v
// const should be to the type if value is const
return T{const_cast<typename std::remove_const<U>::type*>(value)};
}
+inline eina::strbuf convert_to_return(Eina_Strbuf* value, tag<Eina_Strbuf*, efl::eina::strbuf>)
+{
+ eina::strbuf_wrapper t{value};
+ return t;
+}
+inline eina::strbuf_view convert_to_return(Eina_Strbuf* value, tag<Eina_Strbuf*, efl::eina::strbuf_view>)
+{
+ return {value};
+}
+inline eina::strbuf_view convert_to_return(Eina_Strbuf const* value, tag<Eina_Strbuf const*, efl::eina::strbuf_view>)
+{
+ return {value};
+}
inline eina::stringshare convert_to_return(const Eina_Stringshare* value, tag<const char*, efl::eina::stringshare>)
{
return efl::eina::stringshare(value);
diff --git a/src/bindings/luajit/.gitignore b/src/bindings/lua/.gitignore
index 31b688b99b..31b688b99b 100644
--- a/src/bindings/luajit/.gitignore
+++ b/src/bindings/lua/.gitignore
diff --git a/src/bindings/luajit/eina/accessor.lua b/src/bindings/lua/eina/accessor.lua
index 55afa62427..d2068fc8b5 100644
--- a/src/bindings/luajit/eina/accessor.lua
+++ b/src/bindings/lua/eina/accessor.lua
@@ -46,12 +46,12 @@ ffi.metatype("Eina_Accessor", {
unlock = function(self) return eina.eina_accessor_unlock(self) ~= 0 end,
clone = function(self)
local v = eina.eina_accessor_clone(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
container_get = function(self)
local v = eina.eina_accessor_container_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end
}
@@ -64,7 +64,7 @@ local dgetmt = debug.getmetatable
M.Accessor = util.Readonly_Object:clone {
__ctor = function(self, selfmt, acc)
-- prevent null stuff
- if acc == nil then acc = nil end
+ if acc == ffi.nullptr then acc = nil end
if acc then ffi.gc(acc, acc.free) end
selfmt.__eq = function(self, other)
return selfmt.__accessor == dgetmt(other).__accessor
diff --git a/src/bindings/luajit/eina/counter.lua b/src/bindings/lua/eina/counter.lua
index b0b9829ad4..6a9ba33284 100644
--- a/src/bindings/luajit/eina/counter.lua
+++ b/src/bindings/lua/eina/counter.lua
@@ -51,7 +51,7 @@ M.Counter = ffi.metatype("Eina_Counter", {
dump = function(self)
local v = eina.eina_counter_dump(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
local r = ffi.string(v)
C.free(v)
return r
diff --git a/src/bindings/luajit/eina/file.lua b/src/bindings/lua/eina/file.lua
index 675b810a17..f9fcf2350c 100644
--- a/src/bindings/luajit/eina/file.lua
+++ b/src/bindings/lua/eina/file.lua
@@ -4,6 +4,8 @@
local ffi = require("ffi")
local C = ffi.C
+local tonum = ffi.tonumber or tonumber
+
local iterator = require("eina.iterator")
require("eina.xattr")
@@ -210,8 +212,8 @@ local direct_info_iterator_next = function(self)
if not v then return nil end
local s = ffi.cast("Eina_File_Direct_Info*", v)
local path = ffi.string(s.path, s.path_length)
- local ns = tonumber(s.name_start)
- local nl = tonumber(s.name_length)
+ local ns = tonum(s.name_start)
+ local nl = tonum(s.name_length)
local tp = file_type_map[s.type]
return Direct_Info(path, ns, nl, tp), self:container_get()
end
@@ -236,7 +238,7 @@ M.direct_ls = function(dir) return Direct_Ls_Iterator(dir) end
M.path_sanitize = function(path)
local v = eina.eina_file_path_sanitize(path)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
local r = ffi.string(v)
C.free(v)
return r
@@ -301,7 +303,7 @@ local Line_Iterator = Iterator:clone {
local v = Iterator.next(self)
if not v then return nil end
v = ffi.cast(v, "Eina_File_Line*")
- return ffi.string(v.start, v.length), tonumber(v.index)
+ return ffi.string(v.start, v.length), tonum(v.index)
end
}
@@ -342,11 +344,11 @@ M.File = ffi.metatype("Eina_File", {
end,
size_get = function(self)
- return tonumber(eina.eina_file_size_get(self))
+ return tonum(eina.eina_file_size_get(self))
end,
mtime_get = function(self)
- return tonumber(eina.eina_file_mtime_get(self))
+ return tonum(eina.eina_file_mtime_get(self))
end,
filename_get = function(self)
@@ -358,7 +360,7 @@ M.File = ffi.metatype("Eina_File", {
map_all = function(self, rule, raw)
local v = ffi.cast("char*", eina.eina_file_map_all(self, rule or 0))
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
if not raw then
local r = ffi.string(v)
self:map_free(v)
@@ -370,7 +372,7 @@ M.File = ffi.metatype("Eina_File", {
map_new = function(self, rule, offset, length, raw)
local v = ffi.cast("char*", eina.eina_file_map_new(self, rule or 0,
offset or 0, length))
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
if not raw then
local r = ffi.string(v, length)
self:map_free(v)
diff --git a/src/bindings/luajit/eina/hamster.lua b/src/bindings/lua/eina/hamster.lua
index e8f5e7434f..2e93086e82 100644
--- a/src/bindings/luajit/eina/hamster.lua
+++ b/src/bindings/lua/eina/hamster.lua
@@ -3,6 +3,8 @@
local ffi = require("ffi")
+local tonum = ffi.tonumber or tonumber
+
ffi.cdef [[
int eina_hamster_count(void);
]]
@@ -25,7 +27,7 @@ end
cutil.init_module(init, shutdown)
M.count = function()
- return tonumber(eina.eina_hamster_count())
+ return tonum(eina.eina_hamster_count())
end
return M
diff --git a/src/bindings/luajit/eina/iterator.lua b/src/bindings/lua/eina/iterator.lua
index dc5d0da8b2..196a968500 100644
--- a/src/bindings/luajit/eina/iterator.lua
+++ b/src/bindings/lua/eina/iterator.lua
@@ -43,7 +43,7 @@ ffi.metatype("Eina_Iterator", {
unlock = function(self) return eina.eina_iterator_unlock(self) ~= 0 end,
container_get = function(self)
local v = eina.eina_iterator_container_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end
}
@@ -56,7 +56,7 @@ local dgetmt = debug.getmetatable
M.Iterator = util.Readonly_Object:clone {
__ctor = function(self, selfmt, iter)
-- prevent null stuff
- if iter == nil then iter = nil end
+ if iter == ffi.nullptr then iter = nil end
if iter then ffi.gc(iter, iter.free) end
selfmt.__eq = function(self, other)
return selfmt.__iterator == dgetmt(other).__iterator
diff --git a/src/bindings/luajit/eina/list.lua b/src/bindings/lua/eina/list.lua
index aebfa348c1..4c0bc6bd17 100644
--- a/src/bindings/luajit/eina/list.lua
+++ b/src/bindings/lua/eina/list.lua
@@ -83,7 +83,9 @@ local dgetmt = debug.getmetatable
local List_Iterator = Iterator:clone {
__ctor = function(self, selfmt, list)
- if list == nil then return Iterator.__ctor(self, selfmt, nil) end
+ if not list or list == ffi.nullptr then
+ return Iterator.__ctor(self, selfmt, nil)
+ end
selfmt.__list = list
return Iterator.__ctor(self, selfmt,
eina.eina_list_iterator_new(dgetmt(list).__list))
@@ -98,7 +100,9 @@ local List_Iterator = Iterator:clone {
local List_Reverse_Iterator = Iterator:clone {
__ctor = function(self, selfmt, list)
- if list == nil then return Iterator.__ctor(self, selfmt, nil) end
+ if not list or list == ffi.nullptr then
+ return Iterator.__ctor(self, selfmt, nil)
+ end
selfmt.__list = list
return Iterator.__ctor(self, selfmt,
eina.eina_list_iterator_reversed_new(dgetmt(list).__list))
@@ -115,7 +119,9 @@ local Accessor = accessor.Accessor
local List_Accessor = Accessor:clone {
__ctor = function(self, selfmt, list)
- if list == nil then return Accessor.__ctor(self, selfmt, nil) end
+ if not list or list == ffi.nullptr then
+ return Accessor.__ctor(self, selfmt, nil)
+ end
selfmt.__list = list
return Accessor.__ctor(self, selfmt,
eina.eina_list_accessor_new(dgetmt(list).__list))
@@ -141,37 +147,37 @@ local List = ffi.metatype("Eina_List", {
data_get = function(self, ptr)
if ptr ~= nil then return ptr end
local v = get_list_t(self).data
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
nth = function(self, n)
local v = eina.eina_list_nth(self, n - 1)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return self:data_get(v)
end,
nth_list = function(self, n)
local v = eina.eina_list_nth_list(self, n - 1)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
last = function(self)
local v = get_list_t(self).accounting.last
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
next = function(self)
local v = get_list_t(self).next
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
prev = function(self)
local v = get_list_t(self).prev
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end
}
@@ -183,7 +189,7 @@ local List_Base = util.Readonly_Object:clone {
list = ffi.gc(list, freefunc)
selfmt.__free = freefunc
end
- if list == nil then return end
+ if not list or list == ffi.nullptr then return end
selfmt.__eq = function(self, other)
return selfmt.__list == dgetmt(other).__list
end
@@ -194,62 +200,62 @@ local List_Base = util.Readonly_Object:clone {
free = function(self)
self = dgetmt(self)
local ffunc, l = self.__free, self.__list
- if not ffunc or l == nil then return end
+ if not ffunc or not l or l == ffi.nullptr then return end
ffunc(ffi.gc(self.__list, nil))
end,
count = function(self)
self = dgetmt(self)
local l = self.__list
- if l == nil then return 0 end
+ if not l or l == ffi.nullptr then return 0 end
return #l
end,
nth = function(self, n)
self = dgetmt(self)
local l = self.__list
- if l == nil then return nil end
+ if not l or l == ffi.nullptr then return nil end
return l:nth()
end,
nth_list = function(self, n)
self = dgetmt(self)
local l = self.__list
- if l == nil then return nil end
+ if not l or l == ffi.nullptr then return nil end
return self.__index(l:nth_list())
end,
last = function(self, n)
self = dgetmt(self)
local l = self.__list
- if l == nil then return nil end
+ if not l or l == ffi.nullptr then return nil end
return self.__index(l:last())
end,
next = function(self, n)
self = dgetmt(self)
local l = self.__list
- if l == nil then return nil end
+ if not l or l == ffi.nullptr then return nil end
return self.__index(l:next())
end,
prev = function(self, n)
self = dgetmt(self)
local l = self.__list
- if l == nil then return nil end
+ if not l or l == ffi.nullptr then return nil end
return self.__index(l:prev())
end,
data_get = function(self, ptr)
self = dgetmt(self)
local l = self.__list
- if l == nil then return nil end
+ if not l or l == ffi.nullptr then return nil end
return l:data_get(ptr)
end,
to_array = function(self)
local l = dgetmt(self).__list
- if l == nil then return {}, 0 end
+ if not l or l == ffi.nullptr then return {}, 0 end
local n = 0
local r = {}
while l ~= nil do
@@ -293,7 +299,7 @@ M.Ptr_List = List_Base:clone {
M.String_List = List_Base:clone {
data_get = function(self, ptr)
ptr = List_Base.data_get(self, ptr)
- if ptr == nil then return nil end
+ if not ptr or ptr == ffi.nullptr then return nil end
return ffi.string(ptr)
end
}
diff --git a/src/bindings/luajit/eina/log.lua b/src/bindings/lua/eina/log.lua
index d2b1180b96..d2b1180b96 100644
--- a/src/bindings/luajit/eina/log.lua
+++ b/src/bindings/lua/eina/log.lua
diff --git a/src/bindings/luajit/eina/rectangle.lua b/src/bindings/lua/eina/rectangle.lua
index d9988b7f2b..d9988b7f2b 100644
--- a/src/bindings/luajit/eina/rectangle.lua
+++ b/src/bindings/lua/eina/rectangle.lua
diff --git a/src/bindings/luajit/eina/tiler.lua b/src/bindings/lua/eina/tiler.lua
index 15f4a10771..15f4a10771 100644
--- a/src/bindings/luajit/eina/tiler.lua
+++ b/src/bindings/lua/eina/tiler.lua
diff --git a/src/bindings/luajit/eina/xattr.lua b/src/bindings/lua/eina/xattr.lua
index 192d39b85f..bac2d85bd8 100644
--- a/src/bindings/luajit/eina/xattr.lua
+++ b/src/bindings/lua/eina/xattr.lua
@@ -4,6 +4,8 @@
local ffi = require("ffi")
local C = ffi.C
+local tonum = ffi.tonumber or tonumber
+
local iterator = require("eina.iterator")
ffi.cdef [[
@@ -98,7 +100,7 @@ end
M.get = function(file, attribute)
local size = ffi.new("size_t[1]")
local v = eina.eina_xattr_get(file, attribute, size)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
local r = ffi.string(v, size[0])
C.free(v)
return r
@@ -126,7 +128,7 @@ end
M.string_get = function(file, attribute)
local v = eina.eina_xattr_string_get(file, attribute)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
local r = ffi.string(v)
C.free(v)
return r
@@ -140,7 +142,7 @@ M.double_get = function(file, attribute)
local v = ffi.new("double[1]")
local r = eina.eina_xattr_double_get(file, attribute, v)
if r == 0 then return false end
- return true, tonumber(v[0])
+ return true, tonum(v[0])
end
M.int_set = function(file, attribute, value, flags)
@@ -151,7 +153,7 @@ M.int_get = function(file, attribute)
local v = ffi.new("int[1]")
local r = eina.eina_xattr_int_get(file, attribute, v)
if r == 0 then return false end
- return true, tonumber(v[0])
+ return true, tonum(v[0])
end
return M
diff --git a/src/bindings/luajit/eo.lua b/src/bindings/lua/eo.lua
index bebe733853..ff19afc595 100644
--- a/src/bindings/luajit/eo.lua
+++ b/src/bindings/lua/eo.lua
@@ -109,11 +109,13 @@ ffi.cdef [[
extern const Eo_Event_Description _EO_BASE_EVENT_DEL;
]]
+local tonum = ffi.tonumber or tonumber
+
local addr_d = ffi.typeof("union { double d; const Eo *p; }")
local eo_obj_addr_get = function(x)
local v = addr_d()
v.p = x
- return tonumber(v.d)
+ return tonum(v.d)
end
local cutil = require("cutil")
@@ -143,7 +145,7 @@ local eo_event_cb_fun = function(data, obj, desc, einfo)
local addr = eo_obj_addr_get(obj)
local cbs = eo_callbacks[addr]
assert(cbs)
- local cidx = tonumber(ffi.cast("intptr_t", data))
+ local cidx = tonum(ffi.cast("intptr_t", data))
local fun = cbs[cidx]
assert(fun)
return fun() ~= false
@@ -337,7 +339,7 @@ end
local get_obj_mt = function(obj)
local cl = eo.eo_class_get(obj)
- if cl == nil then return nil end
+ if cl == ffi.nullptr then return nil end
return classes[eo_obj_addr_get(cl)]
end
@@ -416,7 +418,7 @@ ffi.metatype("Eo", {
-- handles property getting with no keys and also properties with keys
__index = function(self, key)
local mt = get_obj_mt(self)
- if mt == nil then return nil end
+ if not mt then return nil end
local pt = mt.__properties
local pp = pt[key]
if not pp then
@@ -444,7 +446,7 @@ ffi.metatype("Eo", {
-- handles property setting with no keys
__newindex = function(self, key, val)
local mt = get_obj_mt(self)
- if mt == nil then return nil end
+ if not mt then return nil end
local pt = mt.__properties
local pp = pt[key]
if not pp then
diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/lua/eolian.lua
index 93499df6a5..687d824243 100644
--- a/src/bindings/luajit/eolian.lua
+++ b/src/bindings/lua/eolian.lua
@@ -2,7 +2,6 @@
-- For use with Elua
local ffi = require("ffi")
-local bit = require("bit")
ffi.cdef [[
void eina_stringshare_del(const char *str);
@@ -275,9 +274,13 @@ ffi.cdef [[
typedef struct _Eolian_Doc_Token {
Eolian_Doc_Token_Type type;
- const char *text, *text_end;
+ const char *text;
+ const char *text_end;
} Eolian_Doc_Token;
+ void *malloc(size_t sz);
+ void free(void *ptr);
+
int eolian_init(void);
int eolian_shutdown(void);
unsigned short eolian_file_format_version_get(void);
@@ -443,7 +446,7 @@ ffi.cdef [[
const Eolian_Function *eolian_typedecl_function_pointer_get(const Eolian_Typedecl *tp);
- Eolian_Value_t eolian_expression_eval(const Eolian_Expression *expr, Eolian_Expression_Mask m);
+ Eina_Bool eolian_expression_eval_fill(const Eolian_Expression *expr, Eolian_Expression_Mask m, Eolian_Value_t *val);
const char *eolian_expression_value_to_literal(const Eolian_Value *v);
const char *eolian_expression_serialize(const Eolian_Expression *expr);
Eolian_Expression_Type eolian_expression_type_get(const Eolian_Expression *expr);
@@ -452,7 +455,7 @@ ffi.cdef [[
const Eolian_Expression *eolian_expression_binary_rhs_get(const Eolian_Expression *expr);
Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Expression *expr);
const Eolian_Expression *eolian_expression_unary_expression_get(const Eolian_Expression *expr);
- Eolian_Value_t eolian_expression_value_get(const Eolian_Expression *expr);
+ Eina_Bool eolian_expression_value_get_fill(const Eolian_Expression *expr, Eolian_Value_t *val);
const Eolian_Documentation *eolian_constant_documentation_get(const Eolian_Constant *var);
const Eolian_Type *eolian_constant_type_get(const Eolian_Constant *var);
const Eolian_Expression *eolian_constant_value_get(const Eolian_Constant *var);
@@ -475,6 +478,8 @@ ffi.cdef [[
local cutil = require("cutil")
local util = require("util")
+local tonum = ffi.tonumber or tonumber
+
local iterator = require("eina.iterator")
local Ptr_Iterator = iterator.Ptr_Iterator
@@ -551,28 +556,28 @@ local object_idx, wrap_object = gen_wrap {
end,
type_get = function(self)
- return tonumber(eolian.eolian_object_type_get(cast_obj(self)))
+ return tonum(eolian.eolian_object_type_get(cast_obj(self)))
end,
unit_get = function(self)
local v = eolian.eolian_object_unit_get(cast_obj(self))
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return v
end,
line_get = function(self)
- return tonumber(eolian.eolian_object_line_get(cast_obj(self)))
+ return tonum(eolian.eolian_object_line_get(cast_obj(self)))
end,
column_get = function(self)
- return tonumber(eolian.eolian_object_column_get(cast_obj(self)))
+ return tonum(eolian.eolian_object_column_get(cast_obj(self)))
end,
file_get = function(self)
local v = eolian.eolian_object_file_get(cast_obj(self))
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return ffi.string(v)
@@ -580,7 +585,7 @@ local object_idx, wrap_object = gen_wrap {
name_get = function(self)
local v = eolian.eolian_object_name_get(cast_obj(self))
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return ffi.string(v)
@@ -588,7 +593,7 @@ local object_idx, wrap_object = gen_wrap {
c_name_get = function(self)
local v = eolian.eolian_object_c_name_get(cast_obj(self))
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return ffi.string(v)
@@ -596,7 +601,7 @@ local object_idx, wrap_object = gen_wrap {
short_name_get = function(self)
local v = eolian.eolian_object_short_name_get(cast_obj(self))
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return ffi.string(v)
@@ -617,7 +622,7 @@ ffi.metatype("Eolian_Object", { __index = object_idx })
local unit_idx, wrap_unit = gen_wrap {
state_get = function(self)
local v = eolian.eolian_unit_state_get(cast_unit(self))
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -628,23 +633,23 @@ local unit_idx, wrap_unit = gen_wrap {
file_get = function(self)
local v = eolian.eolian_unit_file_get(cast_unit(self))
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
file_path_get = function(self)
local v = eolian.eolian_unit_file_path_get(cast_unit(self))
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
version_get = function(self)
- return tonumber(eolian.eolian_unit_version_get(cast_unit(self)))
+ return tonum(eolian.eolian_unit_version_get(cast_unit(self)))
end,
object_by_name_get = function(self, name)
local v = eolian.eolian_unit_object_by_name_get(cast_unit(self), name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -655,7 +660,7 @@ local unit_idx, wrap_unit = gen_wrap {
class_by_name_get = function(self, cname)
local v = eolian.eolian_unit_class_by_name_get(cast_unit(self), cname)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -666,13 +671,13 @@ local unit_idx, wrap_unit = gen_wrap {
constant_by_name_get = function(self, name)
local v = eolian.eolian_unit_constant_by_name_get(cast_unit(self), name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
error_by_name_get = function(self, name)
local v = eolian.eolian_unit_error_by_name_get(cast_unit(self), name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -688,19 +693,19 @@ local unit_idx, wrap_unit = gen_wrap {
alias_by_name_get = function(self, name)
local v = eolian.eolian_unit_alias_by_name_get(cast_unit(self), name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
struct_by_name_get = function(self, name)
local v = eolian.eolian_unit_struct_by_name_get(cast_unit(self), name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
enum_by_name_get = function(self, name)
local v = eolian.eolian_unit_enum_by_name_get(cast_unit(self), name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -726,7 +731,7 @@ local panic_cbs = {}
local error_cbs = {}
local obj_to_idx = function(obj)
- return tonumber(ffi.cast("size_t", obj))
+ return tonum(ffi.cast("size_t", obj))
end
local panic_cb, err_cb
@@ -769,7 +774,7 @@ ffi.metatype("Eolian_State", {
file_parse = function(self, fname)
local v = eolian.eolian_state_file_parse(self, fname)
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return v
@@ -777,7 +782,7 @@ ffi.metatype("Eolian_State", {
file_path_parse = function(self, fpath)
local v = eolian.eolian_state_file_path_parse(self, fpath)
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return v
@@ -817,7 +822,7 @@ ffi.metatype("Eolian_State", {
unit_by_file_get = function(self, fname)
local v = eolian.eolian_state_unit_by_file_get(state, fname)
- if v == nil then
+ if v == ffi.nullptr then
return nil
end
return v
@@ -835,7 +840,7 @@ ffi.metatype("Eolian_State", {
class_by_file_get = function(self, fname)
local v = eolian.eolian_state_class_by_file_get(self, fname)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -961,13 +966,13 @@ ffi.metatype("Eolian_Struct_Type_Field", {
__index = wrap_object {
documentation_get = function(self)
local v = eolian.eolian_typedecl_struct_field_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
type_get = function(self)
local v = eolian.eolian_typedecl_struct_field_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -985,19 +990,19 @@ ffi.metatype("Eolian_Enum_Type_Field", {
__index = wrap_object {
c_name_get = function(self)
local v = eolian.eolian_typedecl_enum_field_c_constant_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end,
documentation_get = function(self)
local v = eolian.eolian_typedecl_enum_field_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
value_get = function(self, force)
local v = eolian.eolian_typedecl_enum_field_value_get(self, force and 1 or 0)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end
}
@@ -1006,7 +1011,7 @@ ffi.metatype("Eolian_Enum_Type_Field", {
M.Typedecl = ffi.metatype("Eolian_Typedecl", {
__index = wrap_object {
type_get = function(self)
- return tonumber(eolian.eolian_typedecl_type_get(self))
+ return tonum(eolian.eolian_typedecl_type_get(self))
end,
struct_fields_get = function(self)
@@ -1016,7 +1021,7 @@ M.Typedecl = ffi.metatype("Eolian_Typedecl", {
struct_field_get = function(self, name)
local v = eolian.eolian_typedecl_struct_field_get(self, name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1027,31 +1032,31 @@ M.Typedecl = ffi.metatype("Eolian_Typedecl", {
enum_field_get = function(self, field)
local v = eolian.eolian_typedecl_enum_field_get(self, field)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
enum_legacy_prefix_get = function(self)
local v = eolian.eolian_typedecl_enum_legacy_prefix_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
documentation_get = function(self, name)
local v = eolian.eolian_typedecl_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
base_type_get = function(self)
local v = eolian.eolian_typedecl_base_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
aliased_base_get = function(self)
local v = eolian.eolian_typedecl_aliased_byse_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1061,19 +1066,19 @@ M.Typedecl = ffi.metatype("Eolian_Typedecl", {
c_type_get = function(self)
local v = eolian.eolian_typedecl_c_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end,
free_func_get = function(self)
local v = eolian.eolian_typedecl_free_func_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
function_pointer_get = function(self)
local v = eolian.eolian_typedecl_function_pointer_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end
}
@@ -1082,46 +1087,46 @@ M.Typedecl = ffi.metatype("Eolian_Typedecl", {
M.Type = ffi.metatype("Eolian_Type", {
__index = wrap_object {
type_get = function(self)
- return tonumber(eolian.eolian_type_type_get(self))
+ return tonum(eolian.eolian_type_type_get(self))
end,
builtin_type_get = function(self)
- return tonumber(eolian.eolian_type_builtin_type_get(self))
+ return tonum(eolian.eolian_type_builtin_type_get(self))
end,
base_type_get = function(self)
local v = eolian.eolian_type_base_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
next_type_get = function(self)
local v = eolian.eolian_type_next_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
typedecl_get = function(self)
local v = eolian.eolian_type_typedecl_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
aliased_base_get = function(self)
local v = eolian.eolian_type_aliased_byse_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
class_get = function(self)
local v = eolian.eolian_type_class_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
error_get = function(self)
local v = eolian.eolian_type_error_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1139,7 +1144,7 @@ M.Type = ffi.metatype("Eolian_Type", {
c_type_get = function(self)
local v = eolian.eolian_type_c_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end
}
@@ -1157,22 +1162,22 @@ M.function_type = {
M.Function = ffi.metatype("Eolian_Function", {
__index = wrap_object {
type_get = function(self)
- return tonumber(eolian.eolian_function_type_get(self))
+ return tonum(eolian.eolian_function_type_get(self))
end,
scope_get = function(self, ftype)
- return tonumber(eolian.eolian_function_scope_get(self, ftype))
+ return tonum(eolian.eolian_function_scope_get(self, ftype))
end,
full_c_name_get = function(self, ftype)
local v = eolian.eolian_function_full_c_name_get(self, ftype)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end,
implement_get = function(self)
local v = eolian.eolian_function_implement_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1205,19 +1210,19 @@ M.Function = ffi.metatype("Eolian_Function", {
return_type_get = function(self, ftype)
local v = eolian.eolian_function_return_type_get(self, ftype)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
return_default_value_get = function(self, ftype)
local v = eolian.eolian_function_return_default_value_get(self, ftype)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
return_documentation_get = function(self, ftype)
local v = eolian.eolian_function_return_documentation_get(self, ftype)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1240,7 +1245,7 @@ M.Function = ffi.metatype("Eolian_Function", {
class_get = function(self)
local v = eolian.eolian_function_class_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end
}
@@ -1256,24 +1261,24 @@ M.parameter_dir = {
ffi.metatype("Eolian_Function_Parameter", {
__index = wrap_object {
direction_get = function(self)
- return tonumber(eolian.eolian_parameter_direction_get(self))
+ return tonum(eolian.eolian_parameter_direction_get(self))
end,
type_get = function(self)
local v = eolian.eolian_parameter_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
default_value_get = function(self)
local v = eolian.eolian_parameter_default_value_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
documentation_get = function(self)
local v = eolian.eolian_parameter_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1295,26 +1300,26 @@ ffi.metatype("Eolian_Implement", {
__index = wrap_object {
class_get = function(self)
local v = eolian.eolian_implement_class_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
implementing_class_get = function(self)
local v = eolian.eolian_implement_implementing_class_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
function_get = function(self)
local tp = ffi.new("Eolian_Function_Type[1]")
local v = eolian.eolian_implement_function_get(self, tp)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v, tp[0]
end,
documentation_get = function(self, ftype)
local v = eolian.eolian_implement_documentation_get(self, ftype)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1344,13 +1349,13 @@ ffi.metatype("Eolian_Constructor", {
__index = wrap_object {
class_get = function(self)
local v = eolian.eolian_constructor_class_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
function_get = function(self)
local v = eolian.eolian_constructor_function_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1364,29 +1369,29 @@ ffi.metatype("Eolian_Event", {
__index = wrap_object {
type_get = function(self)
local v = eolian.eolian_event_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
class_get = function(self)
local v = eolian.eolian_event_class_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
documentation_get = function(self)
local v = eolian.eolian_event_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
scope_get = function(self)
- return tonumber(eolian.eolian_event_scope_get(self))
+ return tonum(eolian.eolian_event_scope_get(self))
end,
c_macro_get = function(self)
local v = eolian.eolian_event_c_macro_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end,
@@ -1404,13 +1409,13 @@ ffi.metatype("Eolian_Part", {
__index = wrap_object {
class_get = function(self)
local v = eolian.eolian_part_class_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
documentation_get = function(self)
local v = eolian.eolian_part_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end
}
@@ -1427,18 +1432,18 @@ M.class_type = {
M.Class = ffi.metatype("Eolian_Class", {
__index = wrap_object {
type_get = function(self)
- return tonumber(eolian.eolian_class_type_get(self))
+ return tonum(eolian.eolian_class_type_get(self))
end,
documentation_get = function(self)
local v = eolian.eolian_class_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
c_prefix_get = function(self)
local v = eolian.eolian_class_c_prefix_get(self)
- if v == nil then
+ if v == ffi.nullptr then
local buf = self:namespaces_get()
buf[#buf + 1] = self:short_name_get()
return table.concat(buf, "_"):lower()
@@ -1448,7 +1453,7 @@ M.Class = ffi.metatype("Eolian_Class", {
event_c_prefix_get = function(self)
local v = eolian.eolian_class_event_c_prefix_get(self)
- if v == nil then
+ if v == ffi.nullptr then
return self:c_prefix_get()
end
return ffi.string(v)
@@ -1456,13 +1461,13 @@ M.Class = ffi.metatype("Eolian_Class", {
data_type_get = function(self)
local v = eolian.eolian_class_data_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
parent_get = function(self)
local v = eolian.eolian_class_parent_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1484,7 +1489,7 @@ M.Class = ffi.metatype("Eolian_Class", {
function_by_name_get = function(self, fname, ftype)
local v = eolian.eolian_class_function_by_name_get(self, fname,
ftype)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1505,7 +1510,7 @@ M.Class = ffi.metatype("Eolian_Class", {
event_by_name_get = function(self, name)
local v = eolian.eolian_class_event_by_name_get(self, name)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1524,19 +1529,19 @@ M.Class = ffi.metatype("Eolian_Class", {
c_get_function_name_get = function(self)
local v = eolian.eolian_class_c_get_function_name_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end,
c_macro_get = function(self)
local v = eolian.eolian_class_c_macro_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end,
c_data_type_get = function(self)
local v = eolian.eolian_class_c_data_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end
}
@@ -1564,32 +1569,31 @@ M.expression_type = {
local etype = M.expression_type
M.expression_mask = {
- SINT = bit.lshift(1, 0),
- UINT = bit.lshift(1, 1),
- FLOAT = bit.lshift(1, 2),
- BOOL = bit.lshift(1, 3),
- STRING = bit.lshift(1, 4),
- CHAR = bit.lshift(1, 5),
- NULL = bit.lshift(1, 6)
+ SINT = 2 ^ 0,
+ UINT = 2 ^ 1,
+ FLOAT = 2 ^ 2,
+ BOOL = 2 ^ 3,
+ STRING = 2 ^ 4,
+ CHAR = 2 ^ 5,
+ NULL = 2 ^ 6
}
local emask = M.expression_mask
-emask.INT = bit.bor(emask.SINT , emask.UINT )
-emask.SIGNED = bit.bor(emask.SINT , emask.FLOAT)
-emask.NUMBER = bit.bor(emask.INT , emask.FLOAT)
-emask.ALL = bit.bor(emask.NUMBER, emask.BOOL,
- emask.STRING, emask.CHAR, emask.NULL)
+emask.INT = emask.SINT + emask.UINT
+emask.SIGNED = emask.SINT + emask.FLOAT
+emask.NUMBER = emask.INT + emask.FLOAT
+emask.ALL = emask.NUMBER + emask.BOOL + emask.STRING + emask.CHAR + emask.NULL
local value_con = {
- [etype.INT ] = function(v) return tonumber(v.value.i ) end,
- [etype.UINT ] = function(v) return tonumber(v.value.u ) end,
+ [etype.INT ] = function(v) return tonum(v.value.i ) end,
+ [etype.UINT ] = function(v) return tonum(v.value.u ) end,
[etype.LONG ] = function(v) return v.value.l end,
[etype.ULONG ] = function(v) return v.value.ul end,
[etype.LLONG ] = function(v) return v.value.ll end,
[etype.ULLONG] = function(v) return v.value.ull end,
- [etype.FLOAT ] = function(v) return tonumber(v.value.f ) end,
- [etype.DOUBLE] = function(v) return tonumber(v.value.d ) end,
+ [etype.FLOAT ] = function(v) return tonum(v.value.f ) end,
+ [etype.DOUBLE] = function(v) return tonum(v.value.d ) end,
[etype.STRING] = function(v) return ffi.string(v.value.s ) end,
[etype.CHAR ] = function(v) return string.char(v.value.c) end,
[etype.NULL ] = function(v) return nil end,
@@ -1599,19 +1603,19 @@ local value_con = {
M.Value = ffi.metatype("Eolian_Value", {
__index = {
get_type = function(self)
- return tonumber(ffi.cast("Eolian_Value_t*", self).type)
+ return tonum(ffi.cast("Eolian_Value_t*", self).type)
end,
get_value = function(self)
local tp = self:get_type()
- local fun = value_con[tonumber(tp)]
+ local fun = value_con[tonum(tp)]
if not fun then return nil end
return fun()
end,
to_literal = function(self)
local v = eolian.eolian_expression_value_to_literal(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end
}
@@ -1657,51 +1661,63 @@ M.Expression = ffi.metatype("Eolian_Expression", {
__index = wrap_object {
eval = function(self, mask)
mask = mask or emask.ALL
- local v = eolian.eolian_expression_eval(self, mask)
- if v == nil then return nil end
- return ffi.cast("Eolian_Value*", v)
+ local vsz = ffi.sizeof("Eolian_Value_t")
+ local p = ffi.cast("Eolian_Value_t *", ffi.C.malloc(vsz))
+ if p == ffi.nullptr then return nil end
+ local v = eolian.eolian_expression_eval_fill(self, mask, p)
+ if v == 0 then
+ ffi.C.free(p)
+ return nil
+ end
+ return ffi.gc(ffi.cast("Eolian_Value *", p), ffi.C.free)
end,
serialize = function(self)
local v = eolian.eolian_expression_serialize(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi_stringshare(v)
end,
type_get = function(self)
- return tonumber(eolian.eolian_expression_type_get(self))
+ return tonum(eolian.eolian_expression_type_get(self))
end,
binary_operator_get = function(self)
- return tonumber(eolian.eolian_expression_binary_operator_get(self))
+ return tonum(eolian.eolian_expression_binary_operator_get(self))
end,
binary_lhs_get = function(self)
local v = eolian.eolian_expression_binary_lhs_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
binary_rhs_get = function(self)
local v = eolian.eolian_expression_binary_rhs_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
unary_operator_get = function(self)
- return tonumber(eolian.eolian_expression_unary_operator_get(self))
+ return tonum(eolian.eolian_expression_unary_operator_get(self))
end,
unary_expression_get = function(self)
local v = eolian.eolian_expression_unary_expression_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
value_get = function(self)
- local v = eolian.eolian_expression_value_get(self)
- if v == nil then return nil end
- return ffi.cast("Eolian_Value*", v)
+ local vsz = ffi.sizeof("Eolian_Value_t")
+ local p = ffi.cast("Eolian_Value_t *", ffi.C.malloc(vsz))
+ if p == ffi.nullptr then return nil end
+ local v = eolian.eolian_expression_value_get_fill(self, p)
+ if v == 0 then
+ ffi.C.free(p)
+ return nil
+ end
+ return ffi.gc(ffi.cast("Eolian_Value *", p), ffi.C.free)
end
}
})
@@ -1710,19 +1726,19 @@ M.Constant = ffi.metatype("Eolian_Constant", {
__index = wrap_object {
documentation_get = function(self)
local v = eolian.eolian_constant_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
type_get = function(self)
local v = eolian.eolian_constant_type_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
value_get = function(self)
local v = eolian.eolian_constant_value_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
@@ -1736,13 +1752,13 @@ M.Error = ffi.metatype("Eolian_Error", {
__index = wrap_object {
documentation_get = function(self)
local v = eolian.eolian_error_documentation_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return v
end,
message_get = function(self)
local v = eolian.eolian_error_message_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
@@ -1756,19 +1772,19 @@ M.Documentation = ffi.metatype("Eolian_Documentation", {
__index = wrap_object {
summary_get = function(self)
local v = eolian.eolian_documentation_summary_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
description_get = function(self)
local v = eolian.eolian_documentation_description_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end,
since_get = function(self)
local v = eolian.eolian_documentation_since_get(self)
- if v == nil then return nil end
+ if v == ffi.nullptr then return nil end
return ffi.string(v)
end
}
@@ -1807,7 +1823,7 @@ end
M.documentation_tokenize = function(doc, ret)
local ret = eolian.eolian_documentation_tokenize(doc, ret)
- if ret == nil then
+ if ret == ffi.nullptr then
return nil
end
return ffi.string(ret)
@@ -1822,12 +1838,12 @@ end
M.Eolian_Doc_Token = ffi.metatype("Eolian_Doc_Token", {
__index = {
type_get = function(self)
- return tonumber(eolian.eolian_doc_token_type_get(self))
+ return tonum(eolian.eolian_doc_token_type_get(self))
end,
text_get = function(self)
local str = eolian.eolian_doc_token_text_get(self)
- if str == nil then
+ if str == ffi.nullptr then
return nil
end
local ret = ffi.string(str)
@@ -1837,7 +1853,7 @@ M.Eolian_Doc_Token = ffi.metatype("Eolian_Doc_Token", {
ref_resolve = function(self, state)
local stor = ffi.new("const Eolian_Object *[2]")
- local tp = tonumber(eolian.eolian_doc_token_ref_resolve(self, state, stor, stor + 1))
+ local tp = tonum(eolian.eolian_doc_token_ref_resolve(self, state, stor, stor + 1))
local reft = M.object_type
if tp == reft.CLASS then
return tp, ffi.cast("const Eolian_Class *", stor[0])
diff --git a/src/bindings/luajit/meson.build b/src/bindings/lua/meson.build
index a1dd6463ea..a1dd6463ea 100644
--- a/src/bindings/luajit/meson.build
+++ b/src/bindings/lua/meson.build
diff --git a/src/bindings/meson.build b/src/bindings/meson.build
index b59e084d8a..d7d7cba8be 100644
--- a/src/bindings/meson.build
+++ b/src/bindings/meson.build
@@ -1,6 +1,6 @@
bindings = get_option('bindings')
-bindings_order = ['luajit', 'cxx', 'mono']
+bindings_order = ['lua', 'cxx', 'mono']
if (get_option('dotnet') and not bindings.contains('mono'))
message('dotnet support requires the C# bindings')
@@ -18,6 +18,10 @@ if (bindings.contains('cxx') == false and bindings.contains('mono'))
)
endif
+if bindings.contains('lua') and not have_elua
+ error('Elua is necessary for Lua bindings')
+endif
+
foreach binding : bindings_order
if bindings.contains(binding)
subdir(join_paths( binding))
diff --git a/src/bindings/mono/ca.ruleset.in b/src/bindings/mono/ca.ruleset.in
new file mode 100644
index 0000000000..0f5be8816c
--- /dev/null
+++ b/src/bindings/mono/ca.ruleset.in
@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RuleSet Name="CustomRulset" Description="Custom Rulset" ToolsVersion="14.0">
+ <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
+ <!-- Do not declare static members on Generic Types -->
+ @CA1000@
+ <!-- Consider making Raise an event -->
+ @CA1030@
+ <!-- Catch generic exception -->
+ @CA1031@
+ <!-- Add extra exception constructors -->
+ @CA1032@
+ <!-- Do not nest NativeTypes -->
+ @CA1034@
+ <!-- IComparable must implement other comparison operators -->
+ @CA1036@
+ <!-- Avoid empty interface -->
+ @CA1040@
+ <!-- Use Integral Or String Argument For Indexers -->
+ @CA1043@
+ <!-- Consider making property with getter -->
+ @CA1044@
+ <!-- Visible instance fields -->
+ @CA1051@
+ <!-- Static holder can be static -->
+ @CA1052@
+ <!-- Using parameters before checking for null -->
+ @CA1062@
+ <!-- Remove IDisposable as Object already has it -->
+ @CA1063@
+ <!-- Exceptions must be public -->
+ @CA1064@
+ <!-- Do not raise exception in unexpected locations -->
+ @CA1065@
+ <!-- String localization -->
+ @CA1303@
+ <!-- Specify IFormatProvider -->
+ @CA1305@
+ <!-- Specify Stringcomparison -->
+ @CA1307@
+ <!-- PInvoke should not be visible -->
+ @CA1401@
+ <!-- Use nameof -->
+ @CA1507@
+ <!-- Parameter underscore -->
+ @CA1707@
+ <!-- Attribute classes must have the Attribute Suffix -->
+ @CA1710@
+ <!-- Replace generic parameter with T -->
+ @CA1715@
+ <!-- Parameter End conflicts with VB -->
+ @CA1716@
+ <!-- Enum field must be plural -->
+ @CA1717@
+ <!-- Variable has type name -->
+ @CA1720@
+ <!-- Property with same name as getter -->
+ @CA1721@
+ <!-- Type name must not match namespace -->
+ @CA1724@
+ <!-- Unused parameter. Lots of warnings regarding Dispose(disposing) -->
+ @CA1801@
+ <!-- Do not ignore function result -->
+ @CA1806@
+ <!-- Remove static constructors -->
+ @CA1810@
+ <!-- Realized classes are never instantiated -->
+ @CA1812@
+ <!-- Override equal and operator equal on Value Types-->
+ @CA1815@
+ <!-- Dispose must call SuppressFinalizers -->
+ @CA1816@
+ <!-- Member can be static -->
+ @CA1822@
+ <!-- Consider zero length array allocation -->
+ @CA1825@
+ <!-- Count() is used where Any() could be used instead to improve performance -->
+ @CA1827@
+ <!-- Use Count instead of Count() -->
+ @CA1829@
+ <!-- Call dispose before going out of scope -->
+ @CA2000@
+ <!-- Call ConfigureWait-->
+ @CA2007@
+ <!-- PInvoke should specify string marshalling -->
+ @CA2101@
+ <!-- Rethrow loses stack info -->
+ @CA2200@
+ <!-- Declare static fields when they are declared and remove static constructor -->
+ @CA2207@
+ <!-- Instantiate exception params correctly -->
+ @CA2208@
+ <!-- Dot not call overrideable methods in constructors -->
+ @CA2214@
+ <!-- Replace implicit operator -->
+ @CA2225@
+ <!-- Change 'XXXXX' to be read-only by removing the property setter -->
+ @CA2227@
+
+
+
+ </Rules>
+ <Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
+ <!-- Ignore docs -->
+ @SA0001@
+
+ <!-- 10** Spacing rules -->
+ @SA1000@
+ @SA1001@
+ @SA1002@
+ @SA1003@
+ <!-- Documentation must start with single space -->
+ @SA1004@
+ @SA1005@
+ @SA1006@
+ @SA1007@
+ @SA1008@
+ @SA1009@
+ @SA1010@
+ @SA1011@
+ @SA1012@
+ @SA1013@
+ @SA1014@
+ @SA1015@
+ @SA1016@
+ @SA1017@
+ @SA1018@
+ @SA1019@
+ @SA1020@
+ @SA1021@
+ @SA1022@
+ @SA1023@
+ @SA1024@
+ @SA1025@
+ @SA1026@
+ @SA1027@
+ @SA1028@
+
+ <!-- Readability -->
+ @SA1100@
+ @SA1101@
+ @SA1102@
+ @SA1103@
+ @SA1104@
+ @SA1105@
+ @SA1106@
+ @SA1107@
+ @SA1108@
+ @SA1109@
+ @SA1110@
+ @SA1111@
+ @SA1112@
+ @SA1113@
+ @SA1114@
+ @SA1115@
+ @SA1116@
+ @SA1117@
+ @SA1118@
+ @SA1119@
+ @SA1120@
+ @SA1121@
+ @SA1122@
+ @SA1123@
+ @SA1124@
+ @SA1125@
+ @SA1126@
+ @SA1127@
+ @SA1128@
+ @SA1129@
+ @SA1130@
+ @SA1131@
+ @SA1132@
+ @SA1133@
+ @SA1134@
+ @SA1135@
+ @SA1136@
+ @SA1137@
+ @SA1138@
+ @SA1139@
+
+ <!-- 12** Ordering -->
+ <!-- FIXME Check if this somehow affects docfx output -->
+ @SA1200@
+ @SA1201@
+ @SA1202@
+ @SA1203@
+ @SA1204@
+ @SA1205@
+ @SA1206@
+ @SA1207@
+ @SA1208@
+ @SA1209@
+ @SA1210@
+ @SA1211@
+ @SA1212@
+ @SA1213@
+ @SA1214@
+ @SA1215@
+ @SA1216@
+ @SA1217@
+
+ <!-- 13** Naming Rules -->
+ <!-- Element start with upper case -->
+ @SA1300@
+ @SA1301@
+ <!-- Interface start with I -->
+ @SA1302@
+ <!-- Upper/lower score rules -->
+ @SA1303@
+ @SA1304@
+ @SA1305@
+ @SA1306@
+ @SA1307@
+ <!-- Variable field prefixes -->
+ @SA1308@
+ @SA1309@
+ @SA1310@
+ @SA1311@
+ @SA1312@
+ @SA1313@
+ @SA1314@
+
+ <!-- 14** Maintainability -->
+ <!-- Access modifier -->
+ @SA1400@
+ <!-- Field must be private -->
+ @SA1401@
+ <!-- File Must contain single class or namespace -->
+ @SA1402@
+ @SA1403@
+ <!-- CodeAnalysis suppress does not have justification -->
+ @SA1404@
+ <!-- Debug.Assert/Fail must provide a message -->
+ @SA1405@
+ @SA1406@
+ <!-- Arithmetic/Conditional expression must declare precedence -->
+ @SA1407@
+ @SA1408@
+ <!-- Remove unecessary code -->
+ @SA1409@
+ <!-- Delegate/Attribute parentheses -->
+ @SA1410@
+ @SA1411@
+ <!-- Utf8 file -->
+ @SA1412@
+ <!-- Trailing commas multiline initializer -->
+ @SA1413@
+
+ <!-- 15** Layout Rules -->
+ @SA1500@
+ @SA1501@
+ @SA1502@
+ @SA1503@
+ @SA1504@
+ @SA1505@
+ @SA1506@
+ @SA1507@
+ @SA1508@
+ @SA1509@
+ @SA1510@
+ @SA1511@
+ @SA1512@
+ @SA1513@
+ @SA1514@
+ @SA1515@
+ @SA1516@
+ @SA1517@
+ @SA1518@
+ @SA1519@
+ @SA1520@
+
+ <!-- 16** Documentation rules -->
+ <!-- Things must be documented -->
+ @SA1600@
+ @SA1601@
+ @SA1602@
+ <!-- Valid xml in docs -->
+ @SA1603@
+ @SA1604@
+ @SA1605@
+ @SA1606@
+ @SA1607@
+ @SA1608@
+ @SA1609@
+ @SA1610@
+ @SA1611@
+ @SA1612@
+ @SA1613@
+ @SA1614@
+ @SA1615@
+ @SA1616@
+ @SA1617@
+ @SA1618@
+ @SA1619@
+ @SA1620@
+ @SA1621@
+ @SA1622@
+ @SA1623@
+ @SA1624@
+ @SA1625@
+ @SA1626@
+ @SA1627@
+ @SA1628@
+ @SA1629@
+ @SA1630@
+ @SA1631@
+ @SA1632@
+ <!-- File headers -->
+ @SA1633@
+ @SA1634@
+ @SA1635@
+ @SA1636@
+ @SA1637@
+ @SA1638@
+ @SA1639@
+ @SA1640@
+ @SA1641@
+ <!-- Constructor/Destructor -->
+ @SA1642@
+ @SA1643@
+ <!-- File header -->
+ @SA1644@
+ <!-- Miscellaneous doc -->
+ @SA1645@
+ @SA1646@
+ @SA1647@
+ @SA1648@
+ <!-- Filename must match file type -->
+ @SA1649@
+ <!-- Spelling -->
+ @SA1650@
+ <!-- Placeholder -->
+ @SA1651@
+ </Rules>
+</RuleSet>
diff --git a/src/bindings/mono/efl_mono.dll.config.in b/src/bindings/mono/efl_mono.dll.config.in
index 25d216b1a0..2800c971d5 100644
--- a/src/bindings/mono/efl_mono.dll.config.in
+++ b/src/bindings/mono/efl_mono.dll.config.in
@@ -23,4 +23,5 @@
<dllmap dll="evas" target="@EVAS@"/>
<dllmap dll="eldbus" target="@ELDBUS@"/>
<dllmap dll="elementary" target="@ELEMENTARY@"/>
+ <dllmap dll="eflcustomexportsmono" target="@EFLCUSTOMEXPORTSMONO@"/>
</configuration>
diff --git a/src/bindings/mono/efl_mono/GenericModel.cs b/src/bindings/mono/efl_mono/GenericModel.cs
index faa2a2f099..c23eeb64ab 100644
--- a/src/bindings/mono/efl_mono/GenericModel.cs
+++ b/src/bindings/mono/efl_mono/GenericModel.cs
@@ -33,26 +33,19 @@ public class GenericModel<T> : Efl.Object, Efl.IModel
/// <summary>The list of properties available in the wrapped model.</summary>
public IEnumerable<System.String> Properties
{
- get { return GetProperties(); }
+ get { return model.Properties; }
}
/// <summary>The number of children in the wrapped model.</summary>
public uint ChildrenCount
{
- get { return GetChildrenCount(); }
- }
-
- /// <summary>The list of properties available in the wrapped model.</summary>
- /// <returns>The list of properties in the model.</returns>
- public IEnumerable<System.String> GetProperties()
- {
- return model.GetProperties();
+ get { return model.ChildrenCount; }
}
/// <summary>Gets the value of the given property in the wrapped model.</summary>
/// <param name="property">The property of the model.</param>
/// <returns>The value of the property.</returns>
- public Eina.Value GetProperty(System.String property)
+ public Eina.Value GetProperty( System.String property)
{
return model.GetProperty(property);
}
@@ -62,22 +55,15 @@ public class GenericModel<T> : Efl.Object, Efl.IModel
/// <param name="value">The value of the property.</param>
/// <returns>An <see cref="Eina.Future" /> that resolves when the property has
/// been set or reports an error if it could not be set.</returns>
- public Eina.Future SetProperty(System.String property, Eina.Value value)
+ public Eina.Future SetProperty( System.String property, Eina.Value value)
{
return model.SetProperty(property, value);
}
- /// <summary>Returns the number of children in the wrapped model.</summary>
- /// <returns>The number of children.</returns>
- public uint GetChildrenCount()
- {
- return model.GetChildrenCount();
- }
-
/// <summary>Returns an <see cref="Eina.Future" /> that will resolve when the property is ready to be read.</summary>
/// <param name="property">The property of the model.</param>
/// <returns>An <see cref="Eina.Future" /> that resolves when the property is ready.</returns>
- public Eina.Future GetPropertyReady(System.String property)
+ public Eina.Future GetPropertyReady( System.String property)
{
return model.GetPropertyReady(property);
}
@@ -87,7 +73,7 @@ public class GenericModel<T> : Efl.Object, Efl.IModel
/// <param name="count">The size of the range.</param>
/// <returns>An <see cref="Eina.Future" /> that resolves to an
/// <see cref="Eina.Array&lt;T&gt;" /> of children models.</returns>
- public Eina.Future GetChildrenSlice(uint start, uint count)
+ public Eina.Future GetChildrenSlice( uint start, uint count)
{
return model.GetChildrenSlice(start, count);
}
@@ -141,7 +127,7 @@ public class GenericModel<T> : Efl.Object, Efl.IModel
/// <param name="token">The token for the task's cancellation.</param>
/// <returns>Task that resolves when the property has been set or could not
/// be set.</returns>
- public System.Threading.Tasks.Task<Eina.Value> SetPropertyAsync(System.String property, Eina.Value value, System.Threading.CancellationToken token=default(System.Threading.CancellationToken))
+ public System.Threading.Tasks.Task<Eina.Value> SetPropertyAsync( System.String property, Eina.Value value, System.Threading.CancellationToken token=default(System.Threading.CancellationToken))
{
return model.SetPropertyAsync(property, value, token);
}
@@ -151,7 +137,7 @@ public class GenericModel<T> : Efl.Object, Efl.IModel
/// <param name="token">The token for the task's cancellation.</param>
/// <returns>Task that resolves when the given property is ready to be
/// read.</returns>
- public System.Threading.Tasks.Task<Eina.Value> GetPropertyReadyAsync(System.String property, System.Threading.CancellationToken token=default(System.Threading.CancellationToken))
+ public System.Threading.Tasks.Task<Eina.Value> GetPropertyReadyAsync( System.String property, System.Threading.CancellationToken token=default(System.Threading.CancellationToken))
{
return model.GetPropertyReadyAsync(property, token);
}
@@ -162,11 +148,33 @@ public class GenericModel<T> : Efl.Object, Efl.IModel
/// <param name="token">Token to notify the async operation of external request to cancel.</param>
/// <returns>Task that resolves when the desired <see cref="Eina.Array&lt;T&gt;" /> of
/// children models is ready.</returns>
- public System.Threading.Tasks.Task<Eina.Value> GetChildrenSliceAsync(uint start, uint count, System.Threading.CancellationToken token=default(System.Threading.CancellationToken))
+ public System.Threading.Tasks.Task<Eina.Value> GetChildrenSliceAsync( uint start, uint count, System.Threading.CancellationToken token=default(System.Threading.CancellationToken))
{
return model.GetChildrenSliceAsync(start, count, token);
}
+ /// <summary>Get children as specified by iterator.
+ ///
+ /// Provided index have to be between 0 and <see cref="Efl.IModel.ChildrenCount"/>.
+ ///
+ /// This function might rely on <see cref="Efl.IModel.GetChildrenSlice"/> as a fallback.<br/>Since EFL 1.23.</summary>
+ /// <param name="indices">Indices of the requested children.</param>
+ /// <returns>Array of children</returns>
+ public Eina.Future GetChildrenIndex(IEnumerable<uint> indices)
+ {
+ return model.GetChildrenIndex(indices);
+ }
+
+ /// <summary>Async wrapper for <see cref="GetChildrenIndex" />.
+ /// </summary>
+ /// <param name="indices">Indices of the requested children.</param>
+ /// <param name="token">Token to notify the async operation of external request to cancel.</param>
+ /// <returns>An async task wrapping the result of the operation.</returns>
+ public System.Threading.Tasks.Task<Eina.Value> GetChildrenIndexAsync(IEnumerable<uint> indices, System.Threading.CancellationToken token = default(System.Threading.CancellationToken))
+ {
+ return model.GetChildrenIndexAsync(indices, token);
+ }
+
/// <summary>Event triggered when properties on the wrapped model changes.</summary>
public event EventHandler<Efl.ModelPropertiesChangedEventArgs> PropertiesChangedEvent
{
diff --git a/src/bindings/mono/efl_mono/efl_csharp_application.cs b/src/bindings/mono/efl_mono/efl_csharp_application.cs
index 8493abd6ab..1cf5d0d07b 100644
--- a/src/bindings/mono/efl_mono/efl_csharp_application.cs
+++ b/src/bindings/mono/efl_mono/efl_csharp_application.cs
@@ -198,17 +198,17 @@ public abstract class Application
{
Init(components);
Efl.App app = Efl.App.AppMain;
- var command_line = new Eina.Array<Eina.Stringshare>();
+#if EFL_BETA
+ var command_line = new List<Eina.Stringshare>();
//command_line.Add(List.ConvertAll(Environment.GetCommandLineArgs(), s => (Eina.Stringshare)s));
//command_line.AddRange(Environment.GetCommandLineArgs());
-#if EFL_BETA
app.SetCommandArray(command_line);
#endif
app.ArgumentsEvent += (object sender, LoopArgumentsEventArgs evt) =>
{
- if (evt.arg.Initialization)
+ if (evt.Arg.Initialization)
{
- var evtArgv = evt.arg.Argv;
+ var evtArgv = evt.Arg.Argv;
int n = evtArgv.Count;
var argv = new string[n];
for (int i = 0; i < n; ++i)
@@ -219,7 +219,7 @@ public abstract class Application
OnInitialize(argv);
}
- OnArguments(evt.arg);
+ OnArguments(evt.Arg);
};
app.PauseEvent += (object sender, EventArgs e) =>
{
@@ -234,7 +234,6 @@ public abstract class Application
OnTerminate();
};
app.Begin();
- command_line.Dispose();
Shutdown();
}
}
diff --git a/src/bindings/mono/efl_mono/efl_libs.cs.in b/src/bindings/mono/efl_mono/efl_libs.cs.in
index fcf5b18183..af811d494a 100644
--- a/src/bindings/mono/efl_mono/efl_libs.cs.in
+++ b/src/bindings/mono/efl_mono/efl_libs.cs.in
@@ -33,7 +33,7 @@ internal class Libs {
internal const string CustomExports = "@CUSTOM_EXPORTS_MONO_DL_MONO@";
- internal const string Libdl = "libdl.so";
+ internal const string Libdl = "@LIBDL_DL_MONO@";
internal const string Kernel32 = "kernel32.dll";
internal static readonly Efl.Eo.NativeModule EflModule = new Efl.Eo.NativeModule(Efl);
diff --git a/src/bindings/mono/efl_mono/meson.build b/src/bindings/mono/efl_mono/meson.build
index 165b6d55bd..5ca6f116d6 100644
--- a/src/bindings/mono/efl_mono/meson.build
+++ b/src/bindings/mono/efl_mono/meson.build
@@ -16,6 +16,11 @@ efl_libs = configuration_data()
efl_libs.set('EFL_MONO_LIBRARY_MAP', map)
efl_libs.set('CUSTOM_EXPORTS_MONO_DL_MONO', 'eflcustomexportsmono')
efl_libs.set('EVIL_DL_MONO', 'dl')
+if sys_osx
+ efl_libs.set('LIBDL_DL_MONO', 'dl.dylib')
+else
+ efl_libs.set('LIBDL_DL_MONO', 'libdl.so')
+endif
foreach mono_libs : mono_sublibs
key = mono_libs[0].to_upper()+'_DL_MONO'
diff --git a/src/bindings/mono/efl_sharp.csproj.in b/src/bindings/mono/efl_sharp.csproj.in
index ce6a9e463c..e03be33950 100644
--- a/src/bindings/mono/efl_sharp.csproj.in
+++ b/src/bindings/mono/efl_sharp.csproj.in
@@ -12,11 +12,6 @@
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
</PropertyGroup>
- <PropertyGroup>
- <DocumentationFile>$(AssemblyName).xml</DocumentationFile>
- <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
- </PropertyGroup>
-
<!-- <PropertyGroup Condition="'$(BuildType)'=='Beta'"> -->
<!-- <DefineConstants>EFL_BETA</DefineConstants> -->
<!-- </PropertyGroup> -->
@@ -41,4 +36,13 @@
<Compile Include="./*.cs" />
</ItemGroup>
+ <!-- Code style configuration -->
+ <ItemGroup>
+ <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.6" />
+ <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
+ </ItemGroup>
+ <PropertyGroup>
+ <CodeAnalysisRuleSet>@CA_RULESET@</CodeAnalysisRuleSet>
+ </PropertyGroup>
+
</Project>
diff --git a/src/bindings/mono/eina_mono/eina_common.cs b/src/bindings/mono/eina_mono/eina_common.cs
index a4f2ff4c5f..014e77d020 100644
--- a/src/bindings/mono/eina_mono/eina_common.cs
+++ b/src/bindings/mono/eina_mono/eina_common.cs
@@ -55,6 +55,9 @@ internal static partial class NativeCustomExportFunctions
efl_mono_native_free_addr_get();
[DllImport(efl.Libs.CustomExports)] public static extern IntPtr
efl_mono_native_efl_unref_addr_get();
+
+ [DllImport(efl.Libs.Eina)] public static extern IntPtr
+ eina_slstr_copy_new(string str);
}
/// <summary>Wrapper around native memory DllImport'd functions.
@@ -94,6 +97,11 @@ public static class MemoryNative
return NativeCustomExportFunctions.efl_mono_native_strdup(str);
}
+ public static IntPtr SlstrCopyNew(string str)
+ {
+ return NativeCustomExportFunctions.eina_slstr_copy_new(str);
+ }
+
/// <summary>
/// Retrieves an instance of a string for use in program.
/// <para>Since EFL 1.23.</para>
diff --git a/src/bindings/mono/eina_mono/eina_container_common.cs b/src/bindings/mono/eina_mono/eina_container_common.cs
index 192469a033..a07153e51a 100644
--- a/src/bindings/mono/eina_mono/eina_container_common.cs
+++ b/src/bindings/mono/eina_mono/eina_container_common.cs
@@ -1003,22 +1003,6 @@ internal static class TraitFunctions
private static IDictionary<System.Type, object> register = new Dictionary<System.Type, object>();
- private static System.Type AsEflInstantiableType(System.Type type)
- {
- if (!IsEflObject(type))
- {
- return null;
- }
-
- if (type.IsInterface)
- {
- string fullName = type.FullName + "Concrete";
- return type.Assembly.GetType(fullName); // That was our best guess...
- }
-
- return type; // Not interface, so it should be a concrete.
- }
-
public static object RegisterTypeTraits<T>()
{
Eina.Log.Debug($"Finding TypeTraits for {typeof(T).Name}");
@@ -1026,14 +1010,6 @@ internal static class TraitFunctions
var type = typeof(T);
if (IsEflObject(type))
{
- System.Type concrete = AsEflInstantiableType(type);
- if (concrete == null || !type.IsAssignableFrom(concrete))
- {
- throw new Exception("Failed to get a suitable concrete class for this type.");
- }
-
- // No need to pass concrete as the traits class will use reflection to get the actually most
- // derived type returned.
traits = new EflObjectElementTraits<T>();
}
else if (IsString(type))
diff --git a/src/bindings/mono/eina_mono/eina_error.cs b/src/bindings/mono/eina_mono/eina_error.cs
index 1300e796ab..004792fdb7 100644
--- a/src/bindings/mono/eina_mono/eina_error.cs
+++ b/src/bindings/mono/eina_mono/eina_error.cs
@@ -59,11 +59,27 @@ public struct Error : IComparable<Error>, IEquatable<Error>
/// <para>Since EFL 1.23.</para>
/// </summary>
public static readonly Error ENOENT = new Error(2);
+
+ /// <summary>
+ /// Return architecture independent ECANCELED error code.
+ /// Returns 125 for Linux, 89 for OSX and 105 for Windows.
+ /// <para>Since EFL 1.25.</para>
+ /// </summary>
+ private static int IndependentECANCELED()
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ return new Error(125);
+ else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+ return new Error(89);
+ else // Windows
+ return new Error(105);
+ }
+
/// <summary>
/// Cancelled error identifier.
/// <para>Since EFL 1.23.</para>
/// </summary>
- public static readonly Error ECANCELED = new Error(125);
+ public static readonly Error ECANCELED = IndependentECANCELED();
/// <summary>
/// Constructor.
diff --git a/src/bindings/mono/eina_mono/eina_slice.cs b/src/bindings/mono/eina_mono/eina_slice.cs
index 912ddea3bd..0b9311e48c 100644
--- a/src/bindings/mono/eina_mono/eina_slice.cs
+++ b/src/bindings/mono/eina_mono/eina_slice.cs
@@ -232,7 +232,9 @@ public struct RwSlice : ISliceBase, IEquatable<RwSlice>
}
-public static class Eina_SliceUtils
+namespace Eina
+{
+public static class SliceExtensions
{
public static byte[] GetBytes(this Eina.ISliceBase slc)
{
@@ -243,3 +245,4 @@ public static class Eina_SliceUtils
return mArray;
}
}
+}
diff --git a/src/bindings/mono/eina_mono/eina_stringshare.cs b/src/bindings/mono/eina_mono/eina_stringshare.cs
index 58656fe8ca..741817294d 100644
--- a/src/bindings/mono/eina_mono/eina_stringshare.cs
+++ b/src/bindings/mono/eina_mono/eina_stringshare.cs
@@ -69,7 +69,7 @@ public class Stringshare : IEquatable<Stringshare>, IEquatable<string>
/// <summary>
/// Main constructor. Wrap the given string.
/// Have private acess to avoid wrapping a null reference,
- /// use convertion or the factory method to create a new instance.
+ /// use conversion or the factory method to create a new instance.
/// <para>Since EFL 1.23.</para>
/// <see cref="Create(string)"/>
/// <see cref="implicit operator Stringshare(string)"/>
@@ -108,7 +108,7 @@ public class Stringshare : IEquatable<Stringshare>, IEquatable<string>
}
/// <summary>
- /// Implicit convertion to string.
+ /// Implicit conversion to string.
/// </summary>
public static implicit operator string(Stringshare ss)
{
@@ -121,12 +121,12 @@ public class Stringshare : IEquatable<Stringshare>, IEquatable<string>
}
/// <summary>
- /// Implicit convertion from string to Stringshare.
+ /// Implicit conversion from string to Stringshare.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <remarks>
/// Note that this method can be used to create an instance of this class,
- /// either via an explicit cast or an implicit convertion.
+ /// either via an explicit cast or an implicit conversion.
/// <seealso cref="Create(string)"/>
/// </remarks>
public static implicit operator Stringshare(string s)
@@ -145,7 +145,7 @@ public class Stringshare : IEquatable<Stringshare>, IEquatable<string>
/// </summary>
/// <remarks>
/// Note that this method can be used to create an instance of this class,
- /// either via an explicit cast or an implicit convertion.
+ /// either via an explicit cast or an implicit conversion.
/// <seealso cref="Create(string)"/>
/// </remarks>
public static Stringshare FromString(string s) => s;
diff --git a/src/bindings/mono/eina_mono/eina_value.cs b/src/bindings/mono/eina_mono/eina_value.cs
index 46d1ff02b5..538374f3f8 100644
--- a/src/bindings/mono/eina_mono/eina_value.cs
+++ b/src/bindings/mono/eina_mono/eina_value.cs
@@ -260,6 +260,58 @@ static internal class UnsafeNativeMethods
[DllImport(efl.Libs.CustomExports)]
[return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_string(IntPtr handle, uint p, string data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_ptr(IntPtr handle, uint p, IntPtr data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_char(IntPtr handle, uint p, sbyte data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_uchar(IntPtr handle, uint p, byte data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_short(IntPtr handle, uint p, short data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_ushort(IntPtr handle, uint p, ushort data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_int(IntPtr handle, uint p, int data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_uint(IntPtr handle, uint p, uint data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_long(IntPtr handle, uint p, long data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_ulong(IntPtr handle, uint p, ulong data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_float(IntPtr handle, uint p, float data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_container_insert_wrapper_double(IntPtr handle, uint p, double data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
+ internal static extern bool eina_value_list_insert_wrapper(IntPtr handle, uint p, IntPtr data);
+
+ [DllImport(efl.Libs.CustomExports)]
+ [return: MarshalAsAttribute(UnmanagedType.U1)]
internal static extern bool eina_value_container_get_wrapper(IntPtr handle, int index, out IntPtr output);
[DllImport(efl.Libs.CustomExports)]
@@ -3425,6 +3477,98 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value>
return false;
}
+ /// <summary>Insert new values to this container at a given position.
+ ///
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="o">The new value to be inserted.</param>
+ /// <param name="p">The position to insert the new value.</param>
+ /// <returns><c>true</c> if the value was successfully insert.</returns>
+ public bool Insert(object o, uint p)
+ {
+ Contract.Requires(o != null, nameof(o));
+ ContainerSanityChecks();
+
+ switch (GetValueSubType())
+ {
+ case ValueType.SByte:
+ {
+ sbyte b = Convert.ToSByte(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_char(this.Handle, p, b);
+ }
+
+ case ValueType.Byte:
+ {
+ byte b = Convert.ToByte(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_uchar(this.Handle, p, b);
+ }
+
+ case ValueType.Short:
+ {
+ short b = Convert.ToInt16(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_short(this.Handle, p, b);
+ }
+
+ case ValueType.UShort:
+ {
+ ushort b = Convert.ToUInt16(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_ushort(this.Handle, p, b);
+ }
+
+ case ValueType.Int32:
+ {
+ int x = Convert.ToInt32(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_int(this.Handle, p, x);
+ }
+
+ case ValueType.UInt32:
+ {
+ uint x = Convert.ToUInt32(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_uint(this.Handle, p, x);
+ }
+
+ case ValueType.Long:
+ case ValueType.Int64:
+ {
+ long x = Convert.ToInt64(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_long(this.Handle, p, x);
+ }
+
+ case ValueType.ULong:
+ case ValueType.UInt64:
+ {
+ ulong x = Convert.ToUInt64(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_ulong(this.Handle, p, x);
+ }
+
+ case ValueType.Float:
+ {
+ float x = Convert.ToSingle(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_float(this.Handle, p, x);
+ }
+
+ case ValueType.Double:
+ {
+ double x = Convert.ToDouble(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_double(this.Handle, p, x);
+ }
+
+ case ValueType.String:
+ {
+ string x = Convert.ToString(o, CultureInfo.CurrentCulture);
+ return eina_value_container_insert_wrapper_string(this.Handle, p, x);
+ }
+ case ValueType.Object:
+ {
+ var x = (Efl.Object) o;
+ return eina_value_container_insert_wrapper_ptr(this.Handle, p, x.NativeHandle);
+ }
+ }
+
+ return false;
+ }
+
+
/// <summary>Indexer for this container.
///
/// <para>Since EFL 1.23.</para>
diff --git a/src/bindings/mono/eo_mono/EoWrapper.cs b/src/bindings/mono/eo_mono/EoWrapper.cs
index 99e60b1d2b..e4ff8669e6 100644
--- a/src/bindings/mono/eo_mono/EoWrapper.cs
+++ b/src/bindings/mono/eo_mono/EoWrapper.cs
@@ -227,7 +227,7 @@ public abstract class EoWrapper : IWrapper, IDisposable
public void Del()
{
// FIXME Implement this
- ((Efl.Object)this).SetParent(null);
+ ((Efl.Object)this).Parent = null;
Dispose();
}
@@ -328,7 +328,7 @@ public abstract class EoWrapper : IWrapper, IDisposable
internal Efl.EventCb GetInternalEventCallback<T>(EventHandler<T> handler, Func<IntPtr, T> createArgsInstance) where T:EventArgs
{
- return (IntPtr data, ref Efl.Event.NativeStruct evt) =>
+ return (IntPtr data, ref Efl.Event evt) =>
{
var obj = Efl.Eo.Globals.WrapperSupervisorPtrToManaged(data).Target;
if (obj != null)
@@ -348,7 +348,7 @@ public abstract class EoWrapper : IWrapper, IDisposable
internal Efl.EventCb GetInternalEventCallback(EventHandler handler)
{
- return (IntPtr data, ref Efl.Event.NativeStruct evt) =>
+ return (IntPtr data, ref Efl.Event evt) =>
{
var obj = Efl.Eo.Globals.WrapperSupervisorPtrToManaged(data).Target;
if (obj != null)
@@ -383,13 +383,13 @@ public abstract class EoWrapper : IWrapper, IDisposable
}
}
- private static void OwnershipUniqueCallback(IntPtr data, ref Efl.Event.NativeStruct evt)
+ private static void OwnershipUniqueCallback(IntPtr data, ref Efl.Event evt)
{
var ws = Efl.Eo.Globals.WrapperSupervisorPtrToManaged(data);
ws.MakeUnique();
}
- private static void OwnershipSharedCallback(IntPtr data, ref Efl.Event.NativeStruct evt)
+ private static void OwnershipSharedCallback(IntPtr data, ref Efl.Event evt)
{
var ws = Efl.Eo.Globals.WrapperSupervisorPtrToManaged(data);
ws.MakeShared();
diff --git a/src/bindings/mono/eo_mono/NativeModule_Unix.cs b/src/bindings/mono/eo_mono/NativeModule_Unix.cs
index 67409e02d1..b4dfeb8aea 100644
--- a/src/bindings/mono/eo_mono/NativeModule_Unix.cs
+++ b/src/bindings/mono/eo_mono/NativeModule_Unix.cs
@@ -56,6 +56,12 @@ internal partial class NativeModule
///<item>
///<description><c>libfilename.so</c></description>
///</item>
+ ///<item>
+ ///<description><c>filename.dylib</c></description>
+ ///</item>
+ ///<item>
+ ///<description><c>libfilename.dylib</c></description>
+ ///</item>
///</list>
///</summary>
///<param name="filename">The name to search for.</param>
@@ -73,6 +79,16 @@ internal partial class NativeModule
if (r == IntPtr.Zero)
{
r = dlopen("lib" + filename + ".so", RTLD_NOW | RTLD_GLOBAL);
+ if (r == IntPtr.Zero)
+ {
+ r = dlopen(filename + ".dylib", RTLD_NOW | RTLD_GLOBAL);
+ if (r == IntPtr.Zero)
+ {
+ r = dlopen("lib" + filename + ".dylib", RTLD_NOW | RTLD_GLOBAL);
+ }
+ }
+
+
}
}
}
diff --git a/src/bindings/mono/eo_mono/iwrapper.cs b/src/bindings/mono/eo_mono/iwrapper.cs
index 2a8ebf0620..626777f7d5 100644
--- a/src/bindings/mono/eo_mono/iwrapper.cs
+++ b/src/bindings/mono/eo_mono/iwrapper.cs
@@ -875,33 +875,107 @@ internal static class Globals
return ret;
}
- internal static IEnumerable<T> ListToIEnumerable<T>(IntPtr list)
+ internal static IList<T> NativeListToIList<T>(IntPtr nativeList)
{
- if (list == IntPtr.Zero)
- throw new ArgumentException("list is null", nameof(list));
+ if (nativeList == IntPtr.Zero)
+ throw new ArgumentException("nativeList is null", nameof(nativeList));
IntPtr l;
-
- for (l = list; l != IntPtr.Zero; l = Eina.ListNativeFunctions.eina_list_next_custom_export_mono(l))
+ List<T> list = new List<T>();
+ for (l = nativeList; l != IntPtr.Zero; l = Eina.ListNativeFunctions.eina_list_next_custom_export_mono(l))
{
- yield return Eina.TraitFunctions.NativeToManaged<T>(Eina.ListNativeFunctions.eina_list_data_get_custom_export_mono(l));
+ list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ListNativeFunctions.eina_list_data_get_custom_export_mono(l)));
}
+ return list;
}
- internal static IntPtr IEnumerableToList<T>(IEnumerable<T> enumerable)
+ internal static IntPtr IListToNativeList<T>(IList<T> list, bool isMoved)
{
- if (enumerable == null)
- throw new ArgumentException("enumerable is null", nameof(enumerable));
+ if (list == null)
+ throw new ArgumentException("list is null", nameof(list));
- IntPtr list = IntPtr.Zero;
- foreach (T data in enumerable)
+ // If we are a wrapper around an existing Eina.List, we can just forward
+ // it and avoid unnecessary copying in non-owning transfers.
+ var wrappedList = list as Eina.List<T>;
+
+ if (wrappedList != null && !isMoved)
+ {
+ return wrappedList.Handle;
+ }
+
+ IntPtr nativeList = IntPtr.Zero;
+ foreach (T data in list)
+ {
+ nativeList = Eina.ListNativeFunctions.eina_list_append(nativeList, Eina.TraitFunctions.ManagedToNativeAlloc(data)); //FIXME: need to free
+ }
+
+ if (!isMoved)
{
- list = Eina.ListNativeFunctions.eina_list_append(list, Eina.TraitFunctions.ManagedToNativeAlloc(data));
+ // FIXME Need to free ret and unpin pinnedArray in the future.
}
+
+ return nativeList;
+ }
+
+ internal static IList<T> NativeArrayToIList<T>(IntPtr nativeArray)
+ {
+ if (nativeArray == IntPtr.Zero)
+ throw new ArgumentException("nativeArray is null", nameof(nativeArray));
+
+ List<T> list = new List<T>();
+ UpdateListFromNativeArray(list, nativeArray);
+
// FIXME need to free `list` if the returned list is not @moved
return list;
}
+ internal static IntPtr IListToNativeArray<T>(IList<T> list, bool isMoved)
+ {
+ if (list == null)
+ throw new ArgumentException("list is null", nameof(list));
+
+ // If we are a wrapper around an existing Eina.Array, we can just forward
+ // it and avoid unnecessary copying in non-owning transfers.
+ var wrappedArray = list as Eina.Array<T>;
+
+ if (wrappedArray != null && !isMoved)
+ {
+ return wrappedArray.Handle;
+ }
+
+ IntPtr nativeArray = Eina.ArrayNativeFunctions.eina_array_new(4);
+ foreach (T data in list)
+ {
+ Eina.ArrayNativeFunctions.eina_array_push_custom_export_mono(nativeArray, Eina.TraitFunctions.ManagedToNativeAlloc(data)); //FIXME: need to free
+ }
+
+ if (!isMoved)
+ {
+ // FIXME Need to free ret and unpin pinnedArray in the future.
+ }
+
+ return nativeArray;
+ }
+
+ internal static void UpdateListFromNativeArray<T>(IList<T> list, IntPtr nativeArray)
+ {
+ // Do not update if list Handle is same to nativeArray. They already updated in native code.
+ var wrappedArray = list as Eina.Array<T>;
+ if (wrappedArray != null && wrappedArray.Handle == nativeArray)
+ return;
+
+ list.Clear();
+ if (nativeArray == IntPtr.Zero)
+ {
+ return;
+ }
+
+ uint count = Eina.ArrayNativeFunctions.eina_array_count_custom_export_mono(nativeArray);
+ for (uint i = 0; i < count; i++)
+ {
+ list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ArrayNativeFunctions.eina_array_data_get_custom_export_mono(nativeArray, i)));
+ }
+ }
} // Globals
@@ -1147,14 +1221,12 @@ internal static class ClassRegister
if (objectType.IsInterface)
{
- // Try to get the *Concrete class
- var assembly = objectType.Assembly;
- objectType = assembly.GetType(objectType.FullName + "Concrete");
-
- if (objectType == null)
- {
+ // Try to get the *NativeMethods class
+ var nativeMethods = (Efl.Eo.NativeClass)System.Attribute.GetCustomAttributes(objectType)?.FirstOrDefault(attr => attr is Efl.Eo.NativeClass);
+ if (nativeMethods == null)
return IntPtr.Zero;
- }
+
+ return nativeMethods.GetEflClass();
}
var method = objectType.GetMethod("GetEflClassStatic",
@@ -1436,6 +1508,45 @@ class StringPassOwnershipMarshaler : ICustomMarshaler
static private StringPassOwnershipMarshaler marshaler;
}
+
+class StringOutMarshaler: ICustomMarshaler
+{
+ public object MarshalNativeToManaged(IntPtr pNativeData)
+ {
+ return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
+ }
+
+ public IntPtr MarshalManagedToNative(object managedObj)
+ {
+ return Eina.MemoryNative.SlstrCopyNew((string)managedObj);
+ }
+
+ public void CleanUpNativeData(IntPtr pNativeData)
+ {
+ }
+
+ public void CleanUpManagedData(object managedObj)
+ {
+ }
+
+ public int GetNativeDataSize()
+ {
+ return -1;
+ }
+
+ internal static ICustomMarshaler GetInstance(string cookie)
+ {
+ if (marshaler == null)
+ {
+ marshaler = new StringOutMarshaler();
+ }
+
+ return marshaler;
+ }
+
+ static private StringOutMarshaler marshaler;
+}
+
class StringKeepOwnershipMarshaler: ICustomMarshaler
{
public object MarshalNativeToManaged(IntPtr pNativeData)
diff --git a/src/bindings/mono/eo_mono/workaround.cs b/src/bindings/mono/eo_mono/workaround.cs
index 0afe95807b..81aa32499e 100644
--- a/src/bindings/mono/eo_mono/workaround.cs
+++ b/src/bindings/mono/eo_mono/workaround.cs
@@ -173,17 +173,24 @@ internal struct EventDescription
[Efl.Eo.BindingEntity]
internal struct Event
{
+ /// <summary>Internal wrapper for field Object</summary>
+ private System.IntPtr obj;
+ /// <summary>Internal wrapper for field Desc</summary>
+ private System.IntPtr desc;
+ /// <summary>Internal wrapper for field Info</summary>
+ private System.IntPtr info;
+
/// <summary>
/// The object the callback was called on.
/// <para>Since EFL 1.22.</para>
/// </summary>
- public Efl.Object Object;
+ public Efl.Object Object { get => (Efl.Object) Efl.Eo.Globals.CreateWrapperFor(obj); }
/// <summary>
/// The event description.
/// <para>Since EFL 1.22.</para>
/// </summary>
- public Efl.EventDescription Desc;
+ public Efl.EventDescription Desc { get => Eina.PrimitiveConversion.PointerToManaged<Efl.EventDescription>(desc); }
/// <summary>
/// Extra event information passed by the event caller.
@@ -192,7 +199,7 @@ internal struct Event
/// 2) Structs, built-in types and containers are passed as const pointers, with one level of indirection.
/// <para>Since EFL 1.22.</para>
/// </summary>
- public System.IntPtr Info;
+ public System.IntPtr Info { get => info; }
/// <summary>Constructor for Event.</summary>
public Event(
@@ -200,123 +207,21 @@ internal struct Event
Efl.EventDescription desc = default(Efl.EventDescription),
System.IntPtr info = default(System.IntPtr))
{
- this.Object = obj;
- this.Desc = desc;
- this.Info = info;
+ this.obj = obj?.NativeHandle ?? System.IntPtr.Zero;
+ this.desc = Eina.PrimitiveConversion.ManagedToPointerAlloc(desc);
+ this.info = info;
}
/// <summary>Implicit conversion to the managed representation from a native pointer.</summary>
/// <param name="ptr">Native pointer to be converted.</param>
public static implicit operator Event(IntPtr ptr)
{
- var tmp = (Event.NativeStruct) Marshal.PtrToStructure(ptr, typeof(Event.NativeStruct));
+ var tmp = (Event) Marshal.PtrToStructure(ptr, typeof(Event));
return tmp;
}
-
- /// <summary>Internal wrapper for struct Event.</summary>
- [StructLayout(LayoutKind.Sequential)]
- public struct NativeStruct
- {
- /// <summary>Internal wrapper for field Object</summary>
- public System.IntPtr Object;
-
- /// <summary>Internal wrapper for field Desc</summary>
- public System.IntPtr Desc;
-
- /// <summary>Internal wrapper for field Info</summary>
- public System.IntPtr Info;
-
- /// <summary>Implicit conversion to the internal/marshalling representation.</summary>
- /// <param name="externalStruct">Managed struct to be converted.</param>
- /// <returns>Native representation of the managed struct.</returns>
- public static implicit operator Event.NativeStruct(Event externalStruct)
- {
- var internalStruct = new Event.NativeStruct();
- internalStruct.Object = externalStruct.Object?.NativeHandle ?? System.IntPtr.Zero;
- internalStruct.Desc = Eina.PrimitiveConversion.ManagedToPointerAlloc(externalStruct.Desc);
- internalStruct.Info = externalStruct.Info;
- return internalStruct;
- }
-
- /// <summary>Implicit conversion to the managed representation.</summary>
- /// <param name="internalStruct">Native struct to be converted.</param>
- /// <returns>Managed representation of the native struct.</returns>
- public static implicit operator Event(Event.NativeStruct internalStruct)
- {
- var externalStruct = new Event();
- externalStruct.Object = (Efl.Object) Efl.Eo.Globals.CreateWrapperFor(internalStruct.Object);
- externalStruct.Desc = Eina.PrimitiveConversion.PointerToManaged<Efl.EventDescription>(internalStruct.Desc);
- externalStruct.Info = internalStruct.Info;
- return externalStruct;
- }
- }
}
-internal delegate void EventCb(System.IntPtr data, ref Event.NativeStruct evt);
+internal delegate void EventCb(System.IntPtr data, ref Event evt);
internal delegate void FreeWrapperSupervisorCb(System.IntPtr obj);
-namespace Access
-{
-
-public struct ActionData : IEquatable<ActionData>
-{
- public IntPtr name;
- public IntPtr action;
- public IntPtr param;
- public IntPtr func;
-
-
- /// <summary>
- /// Gets a hash for <see cref="ActionData" />.
- /// <para>Since EFL 1.24.</para>
- /// </summary>
- /// <returns>A hash code.</returns>
- public override int GetHashCode()
- => name.GetHashCode() ^ action.GetHashCode()
- ^ param.GetHashCode() ^ func.GetHashCode();
-
- /// <summary>Returns whether this <see cref="ActionData" />
- /// is equal to the given <see cref="object" />.
- /// <para>Since EFL 1.24.</para>
- /// </summary>
- /// <param name="other">The <see cref="object" /> to be compared to.</param>
- /// <returns><c>true</c> if is equal to <c>other</c>.</returns>
- public override bool Equals(object other)
- => (!(other is ActionData)) ? false
- : Equals((ActionData)other);
-
-
- /// <summary>Returns whether this <see cref="ActionData" /> is equal
- /// to the given <see cref="ActionData" />.
- /// <para>Since EFL 1.24.</para>
- /// </summary>
- /// <param name="other">The <see cref="ActionData" /> to be compared to.</param>
- /// <returns><c>true</c> if is equal to <c>other</c>.</returns>
- public bool Equals(ActionData other)
- => (name == other.name) && (action == other.action)
- && (param == other.param) && (func == other.func);
-
- /// <summary>Returns whether <c>lhs</c> is equal to <c>rhs</c>.
- /// <para>Since EFL 1.24.</para>
- /// </summary>
- /// <param name="lhs">The left hand side of the operator.</param>
- /// <param name="rhs">The right hand side of the operator.</param>
- /// <returns><c>true</c> if <c>lhs</c> is equal
- /// to <c>rhs</c>.</returns>
- public static bool operator==(ActionData lhs, ActionData rhs)
- => lhs.Equals(rhs);
-
- /// <summary>Returns whether <c>lhs</c> is not equal to <c>rhs</c>.
- /// <para>Since EFL 1.24.</para>
- /// </summary>
- /// <param name="lhs">The left hand side of the operator.</param>
- /// <param name="rhs">The right hand side of the operator.</param>
- /// <returns><c>true</c> if <c>lhs</c> is not equal
- /// to <c>rhs</c>.</returns>
- public static bool operator!=(ActionData lhs, ActionData rhs)
- => !(lhs == rhs);
-}
-
-} // namespace Access
-
} // namespace Efl
diff --git a/src/bindings/mono/meson.build b/src/bindings/mono/meson.build
index f98aa5eeae..74f2d06de7 100644
--- a/src/bindings/mono/meson.build
+++ b/src/bindings/mono/meson.build
@@ -122,10 +122,12 @@ efl_mono_conf_data.set('EO', eo_lib.full_path())
efl_mono_conf_data.set('EVAS', evas_lib.full_path())
efl_mono_conf_data.set('ELDBUS', eldbus_lib.full_path())
efl_mono_conf_data.set('ELEMENTARY', elementary_lib.full_path())
+efl_mono_conf_data.set('EFLCUSTOMEXPORTSMONO', efl_mono_lib.full_path())
efl_mono_dll_config = configure_file(input : 'efl_mono.dll.config.in',
- output : 'efl_mono.dll.config',
- configuration : efl_mono_conf_data)
+ output : 'efl_mono.dll.config',
+ configuration : efl_mono_conf_data)
+
extra_cs_args = runtime_assemblies
@@ -137,8 +139,69 @@ efl_mono_install_dir = join_paths(dir_lib, 'efl-mono-'+version_major)
efl_mono_xml_doc = join_paths(meson.current_build_dir(), 'efl_mono.xml')
if (get_option('dotnet'))
+ styles = ['CA1000', 'CA1030', 'CA1031', 'CA1032', 'CA1034', 'CA1036', 'CA1040',
+ 'CA1043', 'CA1044', 'CA1051', 'CA1052', 'CA1062', 'CA1063', 'CA1064',
+ 'CA1065', 'CA1303', 'CA1305', 'CA1307', 'CA1401', 'CA1507', 'CA1707',
+ 'CA1710', 'CA1715', 'CA1716', 'CA1717', 'CA1720', 'CA1721', 'CA1724',
+ 'CA1801', 'CA1806', 'CA1810', 'CA1812', 'CA1815', 'CA1816', 'CA1822',
+ 'CA1825', 'CA1827', 'CA1829', 'CA2000', 'CA2007', 'CA2101', 'CA2200',
+ 'CA2207', 'CA2208', 'CA2214', 'CA2225', 'CA2227', 'SA0001', 'SA1000',
+ 'SA1001', 'SA1002', 'SA1003', 'SA1004', 'SA1005',
+ 'SA1006', 'SA1007', 'SA1008', 'SA1009', 'SA1010', 'SA1011', 'SA1012',
+ 'SA1013', 'SA1014', 'SA1015', 'SA1016', 'SA1017', 'SA1018', 'SA1019',
+ 'SA1020', 'SA1021', 'SA1022', 'SA1023', 'SA1024', 'SA1025', 'SA1026',
+ 'SA1027', 'SA1028', 'SA1100', 'SA1101', 'SA1102', 'SA1103', 'SA1104',
+ 'SA1105', 'SA1106', 'SA1107', 'SA1108', 'SA1109', 'SA1110', 'SA1111',
+ 'SA1112', 'SA1113', 'SA1114', 'SA1115', 'SA1116', 'SA1117', 'SA1118',
+ 'SA1119', 'SA1120', 'SA1121', 'SA1122', 'SA1123', 'SA1124', 'SA1125',
+ 'SA1126', 'SA1127', 'SA1128', 'SA1129', 'SA1130', 'SA1131', 'SA1132',
+ 'SA1133', 'SA1134', 'SA1135', 'SA1136', 'SA1137', 'SA1138', 'SA1139',
+ 'SA1200', 'SA1201', 'SA1202', 'SA1203', 'SA1204', 'SA1205', 'SA1206',
+ 'SA1207', 'SA1208', 'SA1209', 'SA1210', 'SA1211', 'SA1212', 'SA1213',
+ 'SA1214', 'SA1215', 'SA1216', 'SA1217', 'SA1300', 'SA1301', 'SA1302',
+ 'SA1303', 'SA1304', 'SA1305', 'SA1306', 'SA1307', 'SA1308', 'SA1309',
+ 'SA1310', 'SA1311', 'SA1312', 'SA1313', 'SA1314', 'SA1400', 'SA1401',
+ 'SA1402', 'SA1403', 'SA1404', 'SA1405', 'SA1406', 'SA1407', 'SA1408',
+ 'SA1409', 'SA1410', 'SA1411', 'SA1412', 'SA1413', 'SA1500', 'SA1501',
+ 'SA1502', 'SA1503', 'SA1504', 'SA1505', 'SA1506', 'SA1507', 'SA1508',
+ 'SA1509', 'SA1510', 'SA1511', 'SA1512', 'SA1513', 'SA1514', 'SA1515',
+ 'SA1516', 'SA1517', 'SA1518', 'SA1519', 'SA1520', 'SA1600', 'SA1601',
+ 'SA1602', 'SA1603', 'SA1604', 'SA1605', 'SA1606', 'SA1607', 'SA1608',
+ 'SA1609', 'SA1610', 'SA1611', 'SA1612', 'SA1613', 'SA1614', 'SA1615',
+ 'SA1616', 'SA1617', 'SA1618', 'SA1619', 'SA1620', 'SA1621', 'SA1622',
+ 'SA1623', 'SA1624', 'SA1625', 'SA1626', 'SA1627', 'SA1628', 'SA1629',
+ 'SA1630', 'SA1631', 'SA1632', 'SA1633', 'SA1634', 'SA1635', 'SA1636',
+ 'SA1637', 'SA1638', 'SA1639', 'SA1640', 'SA1641', 'SA1642', 'SA1643',
+ 'SA1644', 'SA1645', 'SA1646', 'SA1647', 'SA1648', 'SA1649', 'SA1650',
+ 'SA1651']
+
+ efl_stylecop_data = configuration_data()
+ watched_styles = []
+ severity_styles = get_option('dotnet-stylecop-severity')
+ if get_option('dotnet-stylecop') == '*'
+ watched_styles = styles
+ elif get_option('dotnet-stylecop') != ''
+ s = get_option('dotnet-stylecop').to_upper().split(',')
+ foreach cc : s
+ if cc.startswith('CA') or cc.startswith('SA')
+ watched_styles += cc
+ endif
+ endforeach
+ endif
+
+ foreach s : styles
+ if s in watched_styles
+ efl_stylecop_data.set('@0@'.format(s), '<Rule Id="@0@" Action="@1@"/>'.format(s, severity_styles))
+ else
+ efl_stylecop_data.set('@0@'.format(s), '<Rule Id="@0@" Action="None"/>'.format(s))
+ endif
+ endforeach
+
+ ca_ruleset = configure_file(input : 'ca.ruleset.in',
+ output : 'ca.ruleset',
+ configuration : efl_stylecop_data)
+
dotnet = find_program('dotnet')
- warning('Dotnet support is still experimental.')
lib_csproj_conf_data = configuration_data()
@@ -160,6 +223,7 @@ if (get_option('dotnet'))
lib_csproj_conf_data.set('NETSTANDARD_VERSION', dotnet_standard_version)
lib_csproj_conf_data.set('BINDING_SRC', meson.current_source_dir())
+ lib_csproj_conf_data.set('CA_RULESET', join_paths(meson.build_root(), '@0@'.format(ca_ruleset)))
lib_csproj_conf_data.set('EFL_VERSION', meson.project_version())
if get_option('mono-beta')
@@ -173,7 +237,7 @@ if (get_option('dotnet'))
configuration: lib_csproj_conf_data)
efl_mono = custom_target('efl_mono',
- input: mono_generator_target + mono_files + [efl_src] + [lib_csproj],
+ input: mono_generator_target + mono_files + [efl_src] + [lib_csproj] + [ca_ruleset],
output: 'efl_sharp.dll',
build_by_default: true,
command: [dotnet,
diff --git a/src/edje_external/elementary/elm_notify.c b/src/edje_external/elementary/elm_notify.c
index 801bfe473f..7f0cd1d9f6 100644
--- a/src/edje_external/elementary/elm_notify.c
+++ b/src/edje_external/elementary/elm_notify.c
@@ -39,23 +39,23 @@ _elm_notify_orient_get(const Evas_Object *obj)
elm_notify_align_get(obj, &horizontal, &vertical);
- if ((horizontal == 0.5) && (vertical == 0.0))
+ if (EINA_DBL_EQ(horizontal, 0.5) && EINA_DBL_EQ(vertical, 0.0))
orient = ELM_NOTIFY_ORIENT_TOP;
- else if ((horizontal == 0.5) && (vertical == 0.5))
+ else if (EINA_DBL_EQ(horizontal, 0.5) && EINA_DBL_EQ(vertical, 0.5))
orient = ELM_NOTIFY_ORIENT_CENTER;
- else if ((horizontal == 0.5) && (vertical == 1.0))
+ else if (EINA_DBL_EQ(horizontal, 0.5) && EINA_DBL_EQ(vertical, 1.0))
orient = ELM_NOTIFY_ORIENT_BOTTOM;
- else if ((horizontal == 0.0) && (vertical == 0.5))
+ else if (EINA_DBL_EQ(horizontal, 0.0) && EINA_DBL_EQ(vertical, 0.5))
orient = ELM_NOTIFY_ORIENT_LEFT;
- else if ((horizontal == 1.0) && (vertical == 0.5))
+ else if (EINA_DBL_EQ(horizontal, 1.0) && EINA_DBL_EQ(vertical, 0.5))
orient = ELM_NOTIFY_ORIENT_RIGHT;
- else if ((horizontal == 0.0) && (vertical == 0.0))
+ else if (EINA_DBL_EQ(horizontal, 0.0) && EINA_DBL_EQ(vertical, 0.0))
orient = ELM_NOTIFY_ORIENT_TOP_LEFT;
- else if ((horizontal == 1.0) && (vertical == 0.0))
+ else if (EINA_DBL_EQ(horizontal, 1.0) && EINA_DBL_EQ(vertical, 0.0))
orient = ELM_NOTIFY_ORIENT_TOP_RIGHT;
- else if ((horizontal == 0.0) && (vertical == 1.0))
+ else if (EINA_DBL_EQ(horizontal, 0.0) && EINA_DBL_EQ(vertical, 1.0))
orient = ELM_NOTIFY_ORIENT_BOTTOM_LEFT;
- else if ((horizontal == 1.0) && (vertical == 1.0))
+ else if (EINA_DBL_EQ(horizontal, 1.0) && EINA_DBL_EQ(vertical, 1.0))
orient = ELM_NOTIFY_ORIENT_BOTTOM_RIGHT;
else
orient = ELM_NOTIFY_ORIENT_TOP;
diff --git a/src/edje_external/elementary/meson.build b/src/edje_external/elementary/meson.build
index 383ab77d8b..033b54eab8 100644
--- a/src/edje_external/elementary/meson.build
+++ b/src/edje_external/elementary/meson.build
@@ -46,5 +46,6 @@ ecore_systemd_mod = shared_module('elementary',
install: true,
install_dir: mod_install_dir,
c_args : elm_package_c_args,
+ name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libelementary.' + sys_mod_extension)
diff --git a/src/edje_external/emotion/emotion.c b/src/edje_external/emotion/emotion.c
index 77ed0a71ee..243e055302 100644
--- a/src/edje_external/emotion/emotion.c
+++ b/src/edje_external/emotion/emotion.c
@@ -51,25 +51,15 @@ static int _log_dom = -1;
#define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__)
static const char *_external_emotion_engines[] = {
-#ifdef EMOTION_BUILD_XINE
- "xine",
-#endif
-#ifdef EMOTION_BUILD_GSTREAMER
- "gstreamer",
-#endif
-#ifdef EMOTION_BUILD_GENERIC
- "generic",
+#if EMOTION_BUILD_GSTREAMER1
+ "gstreamer1",
#endif
NULL,
};
static const char _external_emotion_engine_def[] =
-#if defined(EMOTION_BUILD_XINE)
- "xine";
-#elif defined(EMOTION_BUILD_GSTREAMER)
- "gstreamer";
-#elif defined(EMOTION_BUILD_GENERIC)
- "generic";
+#if defined(EMOTION_BUILD_GSTREAMER1)
+ "gstreamer1";
#else
"impossible";
#endif
diff --git a/src/edje_external/emotion/meson.build b/src/edje_external/emotion/meson.build
index 63e6ff82a0..5d869d8b7a 100644
--- a/src/edje_external/emotion/meson.build
+++ b/src/edje_external/emotion/meson.build
@@ -3,6 +3,7 @@ ecore_systemd_mod = shared_module('emotion',
dependencies: [edje, emotion],
install: true,
install_dir: mod_install_dir,
- c_args : emotion_package_c_args
+ c_args : emotion_package_c_args,
+ name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libemotion.' + sys_mod_extension)
diff --git a/src/examples/ecore/ecore_compose_get_example.c b/src/examples/ecore/ecore_compose_get_example.c
index b36fd01803..09a567dd5f 100644
--- a/src/examples/ecore/ecore_compose_get_example.c
+++ b/src/examples/ecore/ecore_compose_get_example.c
@@ -21,7 +21,7 @@ static void
_data_reset(Data *d)
{
char *str;
-
+
EINA_LIST_FREE(d->seq, str) eina_stringshare_del(str);
d->composing = EINA_FALSE;
}
diff --git a/src/examples/ecore/ecore_evas_buffer_example_02.c b/src/examples/ecore/ecore_evas_buffer_example_02.c
index 7f3b8e44ef..f908f30ac9 100644
--- a/src/examples/ecore/ecore_evas_buffer_example_02.c
+++ b/src/examples/ecore/ecore_evas_buffer_example_02.c
@@ -95,7 +95,7 @@ main(void)
evas_object_move(r0, 0, 0);
evas_object_resize(r0, ((2 * WIDTH) / 3) - 6, ((2 * HEIGHT) / 3) - 6);
evas_object_show(r0);
-
+
r1 = evas_object_rectangle_add(sub_canvas);
evas_object_color_set(r1, 255, 0, 0, 255); /* 100% opaque red */
evas_object_move(r1, 10, 10);
diff --git a/src/examples/ecore/ecore_evas_cursor_example.c b/src/examples/ecore/ecore_evas_cursor_example.c
index cbf7dfc32d..953a5cfd78 100644
--- a/src/examples/ecore/ecore_evas_cursor_example.c
+++ b/src/examples/ecore/ecore_evas_cursor_example.c
@@ -154,7 +154,6 @@ main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED)
Ecore_Timer *t;
const char *driver;
- srand(time(NULL));
if (!ecore_evas_init())
{
fprintf(stderr, "Could not init the Ecore Evas\n");
diff --git a/src/examples/ecore/ecore_evas_extn_plug_example.c b/src/examples/ecore/ecore_evas_extn_plug_example.c
index 1a88e02a96..a002698b88 100644
--- a/src/examples/ecore/ecore_evas_extn_plug_example.c
+++ b/src/examples/ecore/ecore_evas_extn_plug_example.c
@@ -76,7 +76,7 @@ _button_1_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
color->b = b;
color->a = a;
- ecore_evas_msg_parent_send(ee, MSG_DOMAIN_CONTROL_OBJECT, MSG_ID_BG_COLOR, color, sizeof(Msg_Color));
+ ecore_evas_msg_parent_send(ee, MSG_DOMAIN_CONTROL_OBJECT, MSG_ID_BG_COLOR, color, sizeof(Msg_Color));
}
static void
diff --git a/src/examples/ecore/ecore_evas_extn_socket_example.c b/src/examples/ecore/ecore_evas_extn_socket_example.c
index aff4975b88..21255485d0 100644
--- a/src/examples/ecore/ecore_evas_extn_socket_example.c
+++ b/src/examples/ecore/ecore_evas_extn_socket_example.c
@@ -20,7 +20,7 @@
#include <Ecore_Evas.h>
#include <unistd.h>
-// procotol version - change this as needed
+// protocol version - change this as needed
#define MSG_DOMAIN_CONTROL_OBJECT 0x1004
#define MSG_ID_BG_COLOR 0x1005
#define MSG_ID_TEXT 0x1006
diff --git a/src/examples/ecore/ecore_fd_handler_gnutls_example.c b/src/examples/ecore/ecore_fd_handler_gnutls_example.c
index 30fd6bcce2..de30f02365 100644
--- a/src/examples/ecore/ecore_fd_handler_gnutls_example.c
+++ b/src/examples/ecore/ecore_fd_handler_gnutls_example.c
@@ -18,6 +18,7 @@
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
+#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <gnutls/gnutls.h>
@@ -100,16 +101,17 @@ tcp_connect(void)
/* sets some fd options such as nonblock */
sd = socket(AF_INET, SOCK_STREAM, 0);
- fcntl(sd, F_SETFL, O_NONBLOCK);
+ if (sd < 0) abort();
+ if (fcntl(sd, F_SETFL, O_NONBLOCK) < 0) perror("fcntl");
eina_file_close_on_exec(sd, EINA_TRUE);
- setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&curstate, sizeof(curstate));
+ if (setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&curstate, sizeof(curstate)) < 0) perror("setsockopt");
- setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int));
+ if (setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) < 0) perror("setsockopt");
memset(&sa, '\0', sizeof (sa));
sa.sin_family = AF_INET;
sa.sin_port = eina_htons(atoi(PORT));
- inet_pton(AF_INET, SERVER, &sa.sin_addr);
+ if (inet_pton(AF_INET, SERVER, &sa.sin_addr)) perror("inet_pton");
/* connects to server
*/
diff --git a/src/examples/ecore/efl_net_control_example.c b/src/examples/ecore/efl_net_control_example.c
index 408ea8e6c9..f634953467 100644
--- a/src/examples/ecore/efl_net_control_example.c
+++ b/src/examples/ecore/efl_net_control_example.c
@@ -466,7 +466,6 @@ _ctl_agent_request_input(void *data EINA_UNUSED, const Efl_Event *event)
char buf[100];
Eo *ctl = event->object;
Efl_Net_Control_Agent_Request_Input *ri = event->info;
- Eina_List *n;
Efl_Net_Control_Agent_Request_Input_Information *info;
char *name = NULL;
char *username = NULL;
@@ -475,10 +474,11 @@ _ctl_agent_request_input(void *data EINA_UNUSED, const Efl_Event *event)
char *wps = NULL;
Eina_Slice ssid_slice = { };
size_t len;
+ unsigned int n;
printf("INFO: Needs agent input!\n");
- EINA_LIST_FOREACH(ri->informational, n, info)
+ EINA_ACCESSOR_FOREACH(ri->informational, n, info)
printf("INFO: - %s: %s\n", info->name, info->value);
diff --git a/src/examples/edje/edje-basic.c b/src/examples/edje/edje-basic.c
index 4d56680dcb..55df12ad05 100644
--- a/src/examples/edje/edje-basic.c
+++ b/src/examples/edje/edje-basic.c
@@ -60,7 +60,7 @@ _on_keydown(void *data,
printf("got scale %f\n", scale);
- if (scale != 1.0) scale = 1.0;
+ if (!EINA_DBL_EQ(scale, 1.0)) scale = 1.0;
else scale = 2.0;
edje_scale_set(scale);
@@ -75,8 +75,8 @@ _on_keydown(void *data,
printf("got scale %f\n", scale);
- if (!scale) scale = 1.0;
- else if (scale == 1.0) scale = 2.0;
+ if (EINA_DBL_EQ(scale, 0)) scale = 1.0;
+ else if (EINA_DBL_EQ(scale, 1.0)) scale = 2.0;
else scale = 0.0;
edje_object_scale_set(edje_obj, scale);
diff --git a/src/examples/edje/edje-text.c b/src/examples/edje/edje-text.c
index 45fb340feb..6a58d87273 100644
--- a/src/examples/edje/edje-text.c
+++ b/src/examples/edje/edje-text.c
@@ -44,7 +44,9 @@ _on_delete(Ecore_Evas *ee EINA_UNUSED)
static void
_on_text_change(void *data EINA_UNUSED, Evas_Object *obj, const char *part)
{
- printf("text: %s\n", edje_object_part_text_unescaped_get(obj, part));
+ char *str = edje_object_part_text_unescaped_get(obj, part);
+ printf("text: %s\n", str);
+ free(str);
}
static void
diff --git a/src/examples/eet/eet-data-cipher_decipher.c b/src/examples/eet/eet-data-cipher_decipher.c
index 4ff94d5782..fb6574064b 100644
--- a/src/examples/eet/eet-data-cipher_decipher.c
+++ b/src/examples/eet/eet-data-cipher_decipher.c
@@ -17,46 +17,46 @@ main(void)
const char *key = "This is a crypto key";
const char *key_bad = "This is another crypto key";
- char *file = strdup("/tmp/eet_cipher_example_XXXXXX");
Eet_File *ef;
char *test;
int size;
int tmpfd;
+ Eina_Tmpstr *tmpf = NULL;
eet_init();
- if (-1 == (tmpfd = mkstemp(file)) || !!close(tmpfd))
+ if (-1 == (tmpfd = eina_file_mkstemp("eet_cipher_example_XXXXXX", &tmpf)) || !!close(tmpfd))
{
fprintf(
stderr, "ERROR: could not create temporary file (%s) : %s\n",
- file, strerror(errno));
+ tmpf, strerror(errno));
goto panic;
}
/* Crypt an eet file. */
- ef = eet_open(file, EET_FILE_MODE_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
if (!ef)
{
fprintf(
- stderr, "ERROR: could not access file (%s).\n", file);
+ stderr, "ERROR: could not access file (%s).\n", tmpf);
goto error;
}
if (!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0, key))
{
fprintf(
- stderr, "ERROR: could not access file (%s).\n", file);
+ stderr, "ERROR: could not access file (%s).\n", tmpf);
goto error;
}
eet_close(ef);
/* Decrypt an eet file. */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
if (!ef)
{
fprintf(
- stderr, "ERROR: could not access file (%s).\n", file);
+ stderr, "ERROR: could not access file (%s).\n", tmpf);
goto error;
}
@@ -65,7 +65,7 @@ main(void)
{
fprintf(
stderr, "ERROR: could decript contents on file %s, with key %s.\n",
- file, key);
+ tmpf, key);
goto error;
}
@@ -86,11 +86,11 @@ main(void)
eet_close(ef);
/* Decrypt an eet file, now using our BAD key!! */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
if (!ef)
{
fprintf(
- stderr, "ERROR: could not access file (%s).\n", file);
+ stderr, "ERROR: could not access file (%s).\n", tmpf);
goto error;
}
@@ -102,18 +102,19 @@ main(void)
fprintf(
stderr, "ERROR: something is wrong with the contents of %s, as"
" we accessed it with a different key and it decripted our"
- " information right.\n", file);
+ " information right.\n", tmpf);
goto error;
}
eet_close(ef);
error:
- if (unlink(file) != 0)
+ if (unlink(tmpf) != 0)
{
fprintf(
- stderr, "ERROR: could not unlink file (%s).\n", file);
+ stderr, "ERROR: could not unlink file (%s)%d.\n", tmpf, errno);
}
+ eina_tmpstr_del(tmpf);
panic:
eet_shutdown();
diff --git a/src/examples/eina/eina_log_03.c b/src/examples/eina/eina_log_03.c
index 4918872e44..02fe04c322 100644
--- a/src/examples/eina/eina_log_03.c
+++ b/src/examples/eina/eina_log_03.c
@@ -7,7 +7,7 @@
#include <Eina.h>
#define log(fmt, ...) \
- eina_log_print(EINA_LOG_LEVEL_ERR, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
+ eina_log_print(EINA_LOG_LEVEL_ERR, __FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__)
typedef struct _Data Data;
diff --git a/src/examples/eina/eina_simple_xml_parser_01.c b/src/examples/eina/eina_simple_xml_parser_01.c
index 824537c3b2..35aa0416ea 100644
--- a/src/examples/eina/eina_simple_xml_parser_01.c
+++ b/src/examples/eina/eina_simple_xml_parser_01.c
@@ -47,7 +47,7 @@ main(void)
_xml_tag_cb, array);
eina_array_foreach(array, _print, NULL);
-
+
eina_array_free(array);
free(buffer);
}
diff --git a/src/examples/eina/eina_str_01.c b/src/examples/eina/eina_str_01.c
index fbe2cf0815..55b91316df 100644
--- a/src/examples/eina/eina_str_01.c
+++ b/src/examples/eina/eina_str_01.c
@@ -26,7 +26,7 @@ int main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
free(arr[0]);
free(arr);
-
+
str = malloc(sizeof(char) * 4);
strcpy(str, "bsd");
diff --git a/src/examples/eina/eina_value_02.c b/src/examples/eina/eina_value_02.c
index a8119bdc87..cb28bf4914 100644
--- a/src/examples/eina/eina_value_02.c
+++ b/src/examples/eina/eina_value_02.c
@@ -85,7 +85,6 @@ int main(int argc, char **argv)
eina_init();
value_init();
- srand(time(NULL));
v1 = eina_value_struct_new(V1_DESC);
v2 = eina_value_struct_new(V2_DESC);
diff --git a/src/examples/eio/efl_io_manager_ls.c b/src/examples/eio/efl_io_manager_ls.c
index 636883d91c..e77877b0b1 100644
--- a/src/examples/eio/efl_io_manager_ls.c
+++ b/src/examples/eio/efl_io_manager_ls.c
@@ -29,7 +29,7 @@ done_cb(void *data EINA_UNUSED,
eina_value_get(&file, &value);
- printf("%s done listing files %"PRIu64".\n", __FUNCTION__, value);
+ printf("%s done listing files %"PRIu64".\n", __func__, value);
}
ecore_main_loop_quit();
@@ -46,7 +46,7 @@ progress_cb(void *data EINA_UNUSED, Eina_Array *array)
unsigned int count;
EINA_ARRAY_ITER_NEXT(array, count, filename, it)
- printf("%s listing filename: %s\n", __FUNCTION__, filename);
+ printf("%s listing filename: %s\n", __func__, filename);
}
void list_files(void *data)
diff --git a/src/examples/eio/efl_io_manager_open.c b/src/examples/eio/efl_io_manager_open.c
index 5c731c1186..f03f454847 100644
--- a/src/examples/eio/efl_io_manager_open.c
+++ b/src/examples/eio/efl_io_manager_open.c
@@ -23,7 +23,7 @@ _closing_cb(void* data EINA_UNUSED,
}
else
{
- printf("%s closed file.\n", __FUNCTION__);
+ printf("%s closed file.\n", __func__);
}
ecore_main_loop_quit();
@@ -54,7 +54,7 @@ _open_cb(void *data,
eina_value_get(&file, &f);
- printf("%s opened file %s\n", __FUNCTION__, eina_file_filename_get(f));
+ printf("%s opened file %s\n", __func__, eina_file_filename_get(f));
return eina_future_as_value(efl_io_manager_close(job, f));
}
diff --git a/src/examples/eio/efl_io_manager_open_multi.c b/src/examples/eio/efl_io_manager_open_multi.c
index bcee8ca125..8256f659eb 100644
--- a/src/examples/eio/efl_io_manager_open_multi.c
+++ b/src/examples/eio/efl_io_manager_open_multi.c
@@ -12,7 +12,7 @@
Eina_Value
_close_cb(void *data EINA_UNUSED, const Eina_Value array, const Eina_Future *dead EINA_UNUSED)
{
- printf("%s closed all files.\n", __FUNCTION__);
+ printf("%s closed all files.\n", __func__);
ecore_main_loop_quit();
diff --git a/src/examples/eldbus/client.c b/src/examples/eldbus/client.c
index fe8391f579..9bf71f433c 100644
--- a/src/examples/eldbus/client.c
+++ b/src/examples/eldbus/client.c
@@ -219,7 +219,7 @@ _on_send_double(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pendin
return;
}
- if (d != expected.d)
+ if (!EINA_DBL_EQ(d, expected.d))
{
ERR("Double value doesn't match expected value");
return;
diff --git a/src/examples/eldbus/dbusmodel.c b/src/examples/eldbus/dbusmodel.c
index cc09d79ae3..1bca10b972 100644
--- a/src/examples/eldbus/dbusmodel.c
+++ b/src/examples/eldbus/dbusmodel.c
@@ -234,7 +234,7 @@ main(int argc, char **argv EINA_UNUSED)
if (efl_model_children_count_get(root))
eina_future_then(efl_model_children_slice_get(root, 0, efl_model_children_count_get(root)),
- _slice, (uintptr_t) 0);
+ _slice, NULL);
ecore_main_loop_begin();
efl_del(root);
diff --git a/src/examples/elementary/.gitignore b/src/examples/elementary/.gitignore
index 89ec3ec650..84d951ef90 100644
--- a/src/examples/elementary/.gitignore
+++ b/src/examples/elementary/.gitignore
@@ -171,3 +171,4 @@
/efl_ui_theme_example_02
/efl_ui_relative_container_example_01
/efl_ui_relative_container_example_02
+/efl_canvas_textblock_obstacles_example
diff --git a/src/examples/elementary/bg_example_03.c b/src/examples/elementary/bg_example_03.c
index 5337d3426a..32ba3ed6f5 100644
--- a/src/examples/elementary/bg_example_03.c
+++ b/src/examples/elementary/bg_example_03.c
@@ -39,13 +39,13 @@ _cb_color_changed(void *data, Evas_Object *obj, void *event EINA_UNUSED)
double val = 0.0;
val = elm_spinner_value_get(obj);
- if (val == 1.0)
+ if (EINA_DBL_EQ(val, 1.0))
elm_bg_color_set(o_bg, 255, 255, 255);
- else if (val == 2.0)
+ else if (EINA_DBL_EQ(val, 2.0))
elm_bg_color_set(o_bg, 255, 0, 0);
- else if (val == 3.0)
+ else if (EINA_DBL_EQ(val, 3.0))
elm_bg_color_set(o_bg, 0, 0, 255);
- else if (val == 4.0)
+ else if (EINA_DBL_EQ(val, 4.0))
elm_bg_color_set(o_bg, 0, 255, 0);
}
diff --git a/src/examples/elementary/calendar_cxx_example_04.cc b/src/examples/elementary/calendar_cxx_example_04.cc
index 7bf9d94c0c..ed61912821 100644
--- a/src/examples/elementary/calendar_cxx_example_04.cc
+++ b/src/examples/elementary/calendar_cxx_example_04.cc
@@ -15,8 +15,6 @@
*/
#include <Efl_Ui.hh>
-#warning This example can not be implemented with EO APIs... FIXME
-
using efl::eo::instantiate;
#define SECS_DAY 86400
diff --git a/src/examples/elementary/calendar_cxx_example_05.cc b/src/examples/elementary/calendar_cxx_example_05.cc
index 6fc857dff8..2447854c46 100644
--- a/src/examples/elementary/calendar_cxx_example_05.cc
+++ b/src/examples/elementary/calendar_cxx_example_05.cc
@@ -15,8 +15,6 @@
*/
#include <Efl_Ui.hh>
-#warning This example can not be implemented with EO APIs... FIXME
-
EAPI_MAIN int
elm_main (int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
diff --git a/src/examples/elementary/efl_canvas_textblock_obstacles_example.c b/src/examples/elementary/efl_canvas_textblock_obstacles_example.c
new file mode 100644
index 0000000000..b2aca7ee2b
--- /dev/null
+++ b/src/examples/elementary/efl_canvas_textblock_obstacles_example.c
@@ -0,0 +1,273 @@
+#define EFL_BETA_API_SUPPORT 1
+
+#include <Efl_Ui.h>
+
+ /**
+ * Example of canvas textblock obstacles.
+ *
+ * You start with two registered obstacle objects. They are not visible
+ * at first, so the canvas textblock simply shows the text that has been set to it.
+ * Once the obstacle is visible (show/hide keys in the example), the text will
+ * wrap around it.
+ * This example allows you to test two obstacles registered to the same
+ * canvas textblock object. Also, you can play with size and position for each.
+ * Use the 'h' key to show the provided options for this test.
+ *
+ * @verbatim
+ * gcc -g efl_canvas_textblock_obstacles_example.c -o efl_canvas_textblock_obstacles_example `pkg-config --cflags --libs elementary`
+ * @endverbatim
+ */
+
+#define WIDTH (360)
+#define HEIGHT (240)
+
+#define POINTER_CYCLE(_ptr, _array) \
+ do \
+ { \
+ if ((unsigned int)(((unsigned char *)(_ptr)) - ((unsigned char *)(_array))) >= \
+ sizeof(_array)) \
+ _ptr = _array; \
+ } \
+ while(0)
+
+static const char *commands = \
+ "commands are:\n"
+ "\tt - change currently controlled obstacle\n"
+ "\tv - show/hide current obstacle\n"
+ "\ts - cycle current obstacle's size\n"
+ "\tp - change current obstacle's position (random)\n"
+ "\tw - cycle text wrapping modes (none/word/char/mixed)\n"
+ "\th - print help\n";
+
+struct text_preset_data
+{
+ const char **font_ptr;
+ const char *font[3];
+
+ const char **wrap_ptr;
+ const char *wrap[4];
+
+ int *obs_size_ptr;
+ int obs_size[3];
+
+ Eo **obs_ptr; /* pointer to the currently controlled obstacle object */
+ Eo *obs[2];
+};
+
+struct test_data
+{
+ Eo *win, *box, *bg, *text;
+ struct text_preset_data t_data;
+ Eina_Size2D size;
+};
+
+static struct test_data d = {0};
+
+static unsigned int
+_getrand(unsigned int low, unsigned int high)
+{
+ return (rand() % (high - low)) + low;
+}
+
+static void
+_style_set(const char *wrap)
+{
+ char buf[2000];
+ snprintf(buf,
+ 2000,
+ "font=Sans font_size=16 color=#000 wrap=%s",
+ wrap);
+
+ efl_canvas_textblock_style_apply(d.text, buf);
+}
+
+static void
+_key_down(void *data EINA_UNUSED, const Efl_Event *ev)
+{
+ const char *key = efl_input_key_string_get(ev->info);
+ if (!key)
+ return;
+
+ if (strcmp(key, "h") == 0) /* print help */
+ {
+ printf("%s\n", commands);
+ return;
+ }
+
+ if (strcmp(key, "t") == 0) /* change obstacle type */
+ {
+ (d.t_data.obs_ptr)++;
+ POINTER_CYCLE(d.t_data.obs_ptr, d.t_data.obs);
+
+ printf("Now controlling obstacle: %p\n", *d.t_data.obs_ptr);
+
+ return;
+ }
+
+ if (strcmp(key, "v") == 0) /* change obstacle visibility */
+ {
+ Eo *obj = *d.t_data.obs_ptr;
+ if (efl_gfx_entity_visible_get(obj))
+ efl_gfx_entity_visible_set(obj, EINA_FALSE);
+ else
+ efl_gfx_entity_visible_set(obj, EINA_TRUE);
+
+ printf("Show/hide toggle for obstacle %p\n",
+ *d.t_data.obs_ptr);
+
+ efl_canvas_textblock_obstacles_update(d.text);
+
+ return;
+ }
+
+ if (strcmp(key, "s") == 0) /* change obstacle size */
+ {
+ (d.t_data.obs_size_ptr)++;
+ POINTER_CYCLE(d.t_data.obs_size_ptr, d.t_data.obs_size);
+
+ efl_gfx_entity_size_set(*d.t_data.obs_ptr, EINA_SIZE2D(*d.t_data.obs_size_ptr, *d.t_data.obs_size_ptr));
+
+ efl_canvas_textblock_obstacles_update(d.text);
+
+ printf("Changing obstacle size to: %d,%d\n",
+ *d.t_data.obs_size_ptr, *d.t_data.obs_size_ptr);
+
+ return;
+ }
+
+ if (strcmp(key, "p") == 0) /* change obstacle position */
+ {
+ int x, y;
+ x = _getrand(0, d.size.w);
+ y = _getrand(0, d.size.h);
+
+ efl_gfx_entity_position_set(*d.t_data.obs_ptr, EINA_POSITION2D(x, y));
+ efl_canvas_textblock_obstacles_update(d.text);
+
+ printf("Changing obstacles position\n");
+ efl_gfx_entity_position_set(*d.t_data.obs_ptr, EINA_POSITION2D(x, y));
+
+ Eina_Position2D r_rec = efl_gfx_entity_position_get(d.t_data.obs[0]);
+ Eina_Position2D g_rec = efl_gfx_entity_position_get(d.t_data.obs[1]);
+
+ printf("Obstacle #1 (red) : [%d,%d]\n", r_rec.x, r_rec.y);
+ printf("Obstacle #2 (green): [%d,%d]\n", g_rec.x, g_rec.y);
+
+ return;
+ }
+
+ if (strcmp(key, "w") == 0) /* change obstacle position */
+ {
+ (d.t_data.wrap_ptr)++;
+ POINTER_CYCLE(d.t_data.wrap_ptr, d.t_data.wrap);
+ printf("Changing wrap mode to: %s\n",
+ *d.t_data.wrap_ptr);
+ _style_set(*d.t_data.wrap_ptr);
+ efl_canvas_textblock_obstacles_update(d.text);
+
+ return;
+ }
+}
+
+static void
+_win_resize(void *data EINA_UNUSED, const Efl_Event *ev)
+{
+ Eina_Size2D sz;
+
+ sz = efl_gfx_entity_size_get(ev->object);
+ efl_gfx_entity_size_set(d.bg, sz);
+ efl_gfx_entity_size_set(d.text, sz);
+
+ d.size = sz;
+}
+
+static void
+_text_init()
+{
+ _style_set("word");
+
+ efl_text_markup_set(d.text,
+ "This example text demonstrates the textblock object"
+ " with obstacle objects support."
+ " Any evas object <item size=72x16></item>can register itself as an obstacle to the textblock"
+ " object. Upon regi<color=#0ff>stering, it aff</color>ects the layout of the text in"
+ " certain situations. Usually, when the obstacle shows above the text"
+ " area, it will cause the layout of the text to split and move"
+ " parts of it, so that all text area is apparent."
+ );
+}
+
+static void
+_gui_quit_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
+{
+ efl_exit(0);
+}
+
+static void
+_gui_setup()
+{
+ /* init values one is going to cycle through while running this
+ * example */
+ struct text_preset_data init_data =
+ {
+ .font = {"DejaVu", "Courier", "Utopia"},
+ .wrap = {"word", "char", "mixed", "none"},
+ .obs_size = {50, 70, 100},
+ .obs = {NULL, NULL},
+ };
+
+ d.t_data = init_data;
+ d.t_data.font_ptr = d.t_data.font;
+ d.t_data.obs_size_ptr = d.t_data.obs_size;
+ d.t_data.obs_ptr = d.t_data.obs;
+
+ d.win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
+ efl_text_set(efl_added, "Obstacles Example"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+
+ efl_gfx_entity_size_set(d.win, EINA_SIZE2D(WIDTH, HEIGHT));
+ printf("Window size set to [%d,%d]\n", WIDTH, HEIGHT);
+
+ efl_event_callback_add(d.win, EFL_UI_WIN_EVENT_DELETE_REQUEST, _gui_quit_cb, NULL);
+ efl_event_callback_add(d.win, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _win_resize, NULL);
+ efl_event_callback_add(d.win, EFL_EVENT_KEY_DOWN, _key_down, NULL);
+
+ d.bg = efl_add(EFL_CANVAS_RECTANGLE_CLASS, d.win,
+ efl_gfx_color_set(efl_added, 255, 255, 255, 255));
+
+ efl_gfx_entity_size_set(d.bg, EINA_SIZE2D(WIDTH, HEIGHT));
+ efl_gfx_entity_position_set(d.bg, EINA_POSITION2D(0, 0));
+
+ d.text = efl_add(EFL_CANVAS_TEXTBLOCK_CLASS, d.win,
+ efl_text_multiline_set(efl_added, EINA_TRUE));
+
+ _text_init();
+ efl_gfx_entity_size_set(d.text, EINA_SIZE2D(WIDTH, HEIGHT));
+ efl_gfx_entity_position_set(d.text, EINA_POSITION2D(0, 0));
+
+ d.size.w = WIDTH;
+ d.size.h = HEIGHT;
+
+ /* init obstacles */
+ d.t_data.obs[0] = efl_add(EFL_CANVAS_RECTANGLE_CLASS, d.win,
+ efl_gfx_color_set(efl_added, 255, 0, 0, 255));
+
+ efl_gfx_entity_size_set(d.t_data.obs[0], EINA_SIZE2D(50,50));
+
+ d.t_data.obs[1] = efl_add(EFL_CANVAS_RECTANGLE_CLASS, d.win,
+ efl_gfx_color_set(efl_added, 0, 255, 0, 255));
+
+ efl_gfx_entity_size_set(d.t_data.obs[1], EINA_SIZE2D(50,50));
+
+ efl_canvas_textblock_obstacle_add(d.text, d.t_data.obs[0]);
+ efl_canvas_textblock_obstacle_add(d.text, d.t_data.obs[1]);
+
+ printf("%s\n", commands);
+}
+
+EAPI_MAIN void
+efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
+{
+ _gui_setup();
+}
+EFL_MAIN()
diff --git a/src/examples/elementary/efl_ui_slideshow_example.c b/src/examples/elementary/efl_ui_slideshow_example.c
index 6292f4390f..4be9865bd3 100644
--- a/src/examples/elementary/efl_ui_slideshow_example.c
+++ b/src/examples/elementary/efl_ui_slideshow_example.c
@@ -93,8 +93,8 @@ efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
container = efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, win,
efl_event_callback_add(efl_added, EFL_UI_SPOTLIGHT_EVENT_TRANSITION_END, _container_end, NULL),
efl_pack_table(table, efl_added, 0, 0, 1, 1));
- efl_ui_spotlight_indicator_set(container, efl_new(EFL_UI_SPOTLIGHT_INDICATOR_ICON_CLASS));
- efl_ui_spotlight_manager_set(container, efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS));
+ efl_ui_spotlight_indicator_set(container, efl_new(EFL_UI_SPOTLIGHT_ICON_INDICATOR_CLASS));
+ efl_ui_spotlight_manager_set(container, efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS));
for (int i = 0; i < IMG_NUM; i++)
{
diff --git a/src/examples/elementary/evas3d_map_example.c b/src/examples/elementary/evas3d_map_example.c
deleted file mode 100644
index f0859e30ac..0000000000
--- a/src/examples/elementary/evas3d_map_example.c
+++ /dev/null
@@ -1,1211 +0,0 @@
-#ifndef EFL_BETA_API_SUPPORT
-# define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Elementary.h>
-
-#define WIDTH 1024
-#define HEIGHT 1024
-#define IMG_SIZE 1024
-#define SKYBOX_IMG_WIDTH 4096
-#define SKYBOX_IMG_HEIGHT 3072
-
-#define MIN_3D_ZOOM_FACTOR 1.0
-#define MAX_3D_ZOOM_FACTOR 4.9
-#define MIN_2D_ZOOM_FACTOR 5.0
-#define MAX_2D_ZOOM_FACTOR 16.0
-
-#define MAX_CAMERA_DISTANCE 10.0
-
-#define ROUND(a) ((a < 0) ? ((int)((a - 0.05) * 10) * 0.1) : ((int)((a + 0.05) * 10) * 0.1))
-
-typedef struct _mat3
-{
- float m[9];
-} mat3;
-
-typedef struct _vec4
-{
- float x;
- float y;
- float z;
- float w;
-} vec4;
-
-typedef struct _vec2
-{
- float x;
- float y;
-} vec2;
-
-typedef struct _vec3
-{
- float x;
- float y;
- float z;
-} vec3;
-
-typedef struct _vertex
-{
- vec3 position;
- vec3 normal;
- vec3 tangent;
- vec4 color;
- vec3 texcoord;
-} vertex;
-
-typedef enum _Map_Dimension_State
-{
- MAP_DIMENSION_STATE_2D = 0,
- MAP_DIMENSION_STATE_3D
-} Map_Dimension_State;
-
-static Evas *evas = NULL;
-static Evas_Object *win = NULL;
-static Evas_Object *bg = NULL;
-static Evas_Object *image = NULL;
-static Evas_Object *map = NULL;
-static Evas_Object *normal_map = NULL;
-static Evas_Object *control_layout = NULL;
-static Evas_Object *hoversel = NULL;
-static Evas_Object *rotation_toggle = NULL;
-static Evas_Object *light_toggle = NULL;
-static Evas_Object *zoom_slider = NULL;
-static Evas_Object *menu = NULL;
-static Elm_Object_Item *menu_it = NULL;
-static Ecore_Animator *animator = NULL;
-
-static Evas_Canvas3D_Scene *scene = NULL;
-static Evas_Canvas3D_Node *root_node = NULL;
-static Evas_Canvas3D_Node *camera_node = NULL;
-static Evas_Canvas3D_Camera *camera = NULL;
-static Evas_Canvas3D_Node *light_node = NULL;
-static Evas_Canvas3D_Light *light = NULL;
-static Evas_Canvas3D_Node *mesh_node = NULL;
-static Evas_Canvas3D_Mesh *mesh = NULL;
-static Evas_Canvas3D_Material *material = NULL;
-static Evas_Canvas3D_Texture *texture_diffuse = NULL;
-static Evas_Canvas3D_Texture *texture_normal = NULL;
-
-static int vertex_count = 0;
-static int index_count = 0;
-static vertex *vertices = NULL;
-static unsigned short *indices = NULL;
-
-static vec2 mouse_down_pos;
-static vec3 camera_pos;
-static vec3 camera_up_vec;
-static vec3 camera_right_vec;
-static double zoom_factor = MIN_3D_ZOOM_FACTOR;
-static Eina_Bool is_mouse_pressed = EINA_FALSE;
-static Map_Dimension_State map_dimension_state = MAP_DIMENSION_STATE_3D;
-
-static const float skybox_vertices[] =
-{
- /* Front */
- -40.0, 40.0, 40.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 0.99, 0.334,
- 40.0, 40.0, 40.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 0.75, 0.334,
- -40.0, -40.0, 40.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 0.99, 0.666,
- 40.0, -40.0, 40.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 0.75, 0.666,
-
- /* Back */
- 40.0, 40.0, -40.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.50, 0.334,
- -40.0, 40.0, -40.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.25, 0.334,
- 40.0, -40.0, -40.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.50, 0.666,
- -40.0, -40.0, -40.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.25, 0.666,
-
- /* Left */
- -40.0, 40.0, -40.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.25, 0.334,
- -40.0, 40.0, 40.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.01, 0.334,
- -40.0, -40.0, -40.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.25, 0.666,
- -40.0, -40.0, 40.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.01, 0.666,
-
- /* Right */
- 40.0, 40.0, 40.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.75, 0.334,
- 40.0, 40.0, -40.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.50, 0.334,
- 40.0, -40.0, 40.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.75, 0.666,
- 40.0, -40.0, -40.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.50, 0.666,
-
- /* Top */
- -40.0, 40.0, -40.0, 0.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.25, 0.334,
- 40.0, 40.0, -40.0, 0.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.50, 0.334,
- -40.0, 40.0, 40.0, 0.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.25, 0.01,
- 40.0, 40.0, 40.0, 0.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.50, 0.01,
-
- /* Bottom */
- 40.0, -40.0, -40.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.50, 0.666,
- -40.0, -40.0, -40.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.25, 0.666,
- 40.0, -40.0, 40.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.50, 0.99,
- -40.0, -40.0, 40.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.25, 0.99,
-};
-
-static const unsigned short skybox_indices[] =
-{
- /* Front */
- 0, 1, 2, 2, 1, 3,
-
- /* Back */
- 4, 5, 6, 6, 5, 7,
-
- /* Left */
- 8, 9, 10, 10, 9, 11,
-
- /* Right */
- 12, 13, 14, 14, 13, 15,
-
- /* Top */
- 16, 17, 18, 18, 17, 19,
-
- /* Bottom */
- 20, 21, 22, 22, 21, 23
-};
-
-static void zoom_factor_set(double new_zoom_factor);
-
-static inline void
-vec3_scale(vec3 *out,
- const vec3 *v,
- const double scale)
-{
- out->x = scale * v->x;
- out->y = scale * v->y;
- out->z = scale * v->z;
-}
-
-static inline void
-vec3_normalize(vec3 *out,
- const vec3 *vec)
-{
- double length = sqrt(vec->x * vec->x + vec->y * vec->y + vec->z * vec->z);
-
- out->x = vec->x / length;
- out->y = vec->y / length;
- out->z = vec->z / length;
-}
-
-static inline void
-mat3_multiply_vec3(vec3 *out,
- const mat3 *mat,
- const vec3 *vec)
-{
- out->x = mat->m[0] * vec->x + mat->m[1] * vec->y + mat->m[2] * vec->z;
- out->y = mat->m[3] * vec->x + mat->m[4] * vec->y + mat->m[5] * vec->z;
- out->z = mat->m[6] * vec->x + mat->m[7] * vec->y + mat->m[8] * vec->z;
-}
-
-static inline void
-vec3_rotate_angle_axis(vec3 *out,
- const vec3 *vec,
- const double radian,
- const vec3 *axis)
-{
- mat3 mat;
- double cos_r = cos(radian);
- double sin_r = sin(radian);
- double one_minus_cos_r = 1.0 - cos_r;
-
- mat.m[0] = cos_r + one_minus_cos_r * (axis->x * axis->x);
- mat.m[1] = (-axis->z * sin_r) + one_minus_cos_r * (axis->x * axis->y);
- mat.m[2] = (axis->y * sin_r) + one_minus_cos_r * (axis->x * axis->z);
-
- mat.m[3] = (axis->z * sin_r) + one_minus_cos_r * (axis->x * axis->y);
- mat.m[4] = cos_r + one_minus_cos_r * (axis->y * axis->y);
- mat.m[5] = (-axis->x * sin_r) + one_minus_cos_r * (axis->y * axis->z);
-
- mat.m[6] = (-axis->y * sin_r) + one_minus_cos_r * (axis->x * axis->z);
- mat.m[7] = (axis->x * sin_r) + one_minus_cos_r * (axis->y * axis->z);
- mat.m[8] = cos_r + one_minus_cos_r * (axis->z * axis->z);
-
- mat3_multiply_vec3(out, &mat, vec);
-}
-
-static Eina_Bool
-animate_scene(void *data)
-{
- static float angle = 0.0f;
-
- angle += 0.05;
-
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, angle, 0.0, 1.0, 0.0);
-
- /* Rotate */
- if (angle > 360.0)
- angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-sphere_init(int precision)
-{
- int i, j;
- vertex *v;
- unsigned short *idx;
-
- vertex_count = (precision + 1) * (precision + 1);
- index_count = precision * precision * 6;
-
- /* Allocate buffer. */
- vertices = malloc(sizeof(vertex) * vertex_count);
- indices = malloc(sizeof(unsigned short) * index_count);
-
- for (i = 0; i <= precision; i++)
- {
- double lati = M_PI * ((double)i / (double)precision);
- double y = cos(lati);
- double r = fabs(sin(lati));
-
- for (j = 0; j <= precision; j++)
- {
- double longi = (M_PI * 2.0) * ((double)j / (double)precision);
- v = &vertices[i * (precision + 1) + j];
-
- if (j == 0 || j == precision) v->position.x = 0.0;
- else v->position.x = r * sin(longi);
-
- v->position.y = y;
-
- if (j == 0 || j == precision) v->position.z = r;
- else v->position.z = r * cos(longi);
-
- v->normal = v->position;
-
- if (v->position.x > 0.0)
- {
- v->tangent.x = -v->normal.y;
- v->tangent.y = v->normal.x;
- v->tangent.z = v->normal.z;
- }
- else
- {
- v->tangent.x = v->normal.y;
- v->tangent.y = -v->normal.x;
- v->tangent.z = v->normal.z;
- }
-
- v->color.x = 1.0;
- v->color.y = 1.0;
- v->color.z = 1.0;
- v->color.w = 1.0;
-
- if (j == precision) v->texcoord.x = 1.0;
- else if (j == 0) v->texcoord.x = 0.0;
- else v->texcoord.x = (double)j / (double)precision;
-
- if (i == precision) v->texcoord.y = 1.0;
- else if (i == 0) v->texcoord.y = 0.0;
- else v->texcoord.y = (double)i / (double)precision;
- }
- }
-
- idx = &indices[0];
-
- for (i = 0; i < precision; i++)
- {
- for (j = 0; j < precision; j++)
- {
- *idx++ = i * (precision + 1) + j;
- *idx++ = i * (precision + 1) + j + 1;
- *idx++ = (i + 1) * (precision + 1) + j;
-
- *idx++ = (i + 1) * (precision + 1) + j;
- *idx++ = i * (precision + 1) + j + 1;
- *idx++ = (i + 1) * (precision + 1) + j + 1;
- }
- }
-
- for (i = 0; i < index_count; i += 3)
- {
- vertex *v0 = &vertices[indices[i + 0]];
- vertex *v1 = &vertices[indices[i + 1]];
- vertex *v2 = &vertices[indices[i + 2]];
-
- vec3 e1, e2;
- float du1, du2, dv1, dv2, f;
- vec3 tangent;
-
- e1.x = v1->position.x - v0->position.x;
- e1.y = v1->position.y - v0->position.y;
- e1.z = v1->position.z - v0->position.z;
-
- e2.x = v2->position.x - v0->position.x;
- e2.y = v2->position.y - v0->position.y;
- e2.z = v2->position.z - v0->position.z;
-
- du1 = v1->texcoord.x - v0->texcoord.x;
- dv1 = v1->texcoord.y - v0->texcoord.y;
-
- du2 = v2->texcoord.x - v0->texcoord.x;
- dv2 = v2->texcoord.y - v0->texcoord.y;
-
- f = 1.0 / (du1 * dv2 - du2 * dv1);
-
- tangent.x = f * (dv2 * e1.x - dv1 * e2.x);
- tangent.y = f * (dv2 * e1.y - dv1 * e2.y);
- tangent.z = f * (dv2 * e1.z - dv1 * e2.z);
-
- v0->tangent = tangent;
- }
-
- for (i = 0; i <= precision; i++)
- {
- for (j = 0; j <= precision; j++)
- {
- if (j == precision)
- {
- v = &vertices[i * (precision + 1) + j];
- v->tangent = vertices[i * (precision + 1)].tangent;
- }
- }
- }
-}
-
-static void
-sphere_fini(void)
-{
- if (vertices)
- free(vertices);
-
- if (indices)
- free(indices);
-}
-
-static void
-change_to_2d_map(void)
-{
- if (map_dimension_state == MAP_DIMENSION_STATE_2D) return;
- map_dimension_state = MAP_DIMENSION_STATE_2D;
-
- elm_object_style_set(map, "default");
- elm_scroller_policy_set
- (map, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO);
- elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
- elm_map_paused_set(map, EINA_TRUE);
-
- evas_canvas3d_texture_source_visible_set(texture_diffuse, EINA_TRUE);
-
- evas_object_hide(image);
-
- elm_slider_unit_format_set(zoom_slider, "X%1.0f");
- elm_slider_indicator_format_set(zoom_slider, "%1.0f");
- elm_slider_min_max_set(zoom_slider, MIN_2D_ZOOM_FACTOR, MAX_2D_ZOOM_FACTOR);
-}
-
-static void
-change_to_3d_map(void)
-{
- if (map_dimension_state == MAP_DIMENSION_STATE_3D) return;
- map_dimension_state = MAP_DIMENSION_STATE_3D;
-
- elm_object_style_set(map, "evas3d");
- elm_scroller_policy_set
- (map, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
- elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
-
- evas_object_show(image);
-
- elm_slider_unit_format_set(zoom_slider, "X%1.1f");
- elm_slider_indicator_format_set(zoom_slider, "%1.1f");
- elm_slider_min_max_set(zoom_slider, MIN_3D_ZOOM_FACTOR, MAX_3D_ZOOM_FACTOR);
-}
-
-static void
-zoom_factor_set(double new_zoom_factor)
-{
- double cur_zoom_factor;
- double s, t;
- double lon, lat;
- vec3 camera_pos_unit_vec;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Evas_Coord src_x, src_y;
- Evas_Coord src_size;
-
- cur_zoom_factor = zoom_factor;
- zoom_factor = ROUND(new_zoom_factor);
-
- if (cur_zoom_factor == zoom_factor) return;
-
- /* 2D Zoom */
- if (zoom_factor >= MIN_2D_ZOOM_FACTOR)
- {
- /* Transition from 3D to 2D */
- if (cur_zoom_factor < MIN_2D_ZOOM_FACTOR)
- {
- zoom_factor = MIN_2D_ZOOM_FACTOR;
- evas_canvas3d_scene_pick(scene, IMG_SIZE / 2, IMG_SIZE / 2, &n, &m, &s, &t);
- src_size = IMG_SIZE * cur_zoom_factor;
- src_x = (Evas_Coord)(src_size * s);
- src_y = (Evas_Coord)(src_size * t);
- elm_map_canvas_to_region_convert(map, src_x, src_y, &lon, &lat);
-
- change_to_2d_map();
- evas_object_resize(map, IMG_SIZE, IMG_SIZE);
- elm_map_zoom_set(map, (int)zoom_factor);
- elm_map_region_show(map, lon, lat);
- }
- else
- elm_map_zoom_set(map, (int)zoom_factor);
- }
- /* 3D Zoom */
- else
- {
- if (zoom_factor < MIN_3D_ZOOM_FACTOR)
- zoom_factor = MIN_3D_ZOOM_FACTOR;
-
- /* Transition from 2D to 3D */
- if (cur_zoom_factor >= MIN_2D_ZOOM_FACTOR)
- {
- change_to_3d_map();
- }
-
- /* Update texture source. */
- src_size = IMG_SIZE * zoom_factor;
- evas_object_resize(map, src_size, src_size);
-
- /* Apply updated texture source. */
- texture_diffuse = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- evas_canvas3d_texture_source_set(texture_diffuse, map);
- evas_canvas3d_texture_source_visible_set(texture_diffuse, EINA_FALSE);
-
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture_diffuse);
-
- /* Update camera position. */
- vec3_normalize(&camera_pos_unit_vec, &camera_pos);
- camera_pos.x = (camera_pos_unit_vec.x * MAX_CAMERA_DISTANCE) / zoom_factor;
- camera_pos.y = (camera_pos_unit_vec.y * MAX_CAMERA_DISTANCE) / zoom_factor;
- camera_pos.z = (camera_pos_unit_vec.z * MAX_CAMERA_DISTANCE) / zoom_factor;
-
- evas_canvas3d_node_position_set(camera_node, camera_pos.x, camera_pos.y, camera_pos.z);
- }
-
- /* Update zoom slider. */
- elm_slider_value_set(zoom_slider, zoom_factor);
-}
-
-static void
-zoom_in_cb(void *data EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- zoom_factor_set(zoom_factor + 1);
-}
-
-static void
-zoom_out_cb(void *data EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- zoom_factor_set(zoom_factor - 1);
-}
-
-static void
-zoom_to_2d_map_cb(void *data EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- double s, t;
- double lon, lat;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Evas_Coord src_x, src_y;
- Evas_Coord src_size;
-
- if (map_dimension_state == MAP_DIMENSION_STATE_2D) return;
-
- evas_canvas3d_scene_pick(scene, mouse_down_pos.x, mouse_down_pos.y, &n, &m, &s, &t);
- src_size = (Evas_Coord)(IMG_SIZE * zoom_factor);
- src_x = (Evas_Coord)(src_size * s);
- src_y = (Evas_Coord)(src_size * t);
- elm_map_canvas_to_region_convert(map, src_x, src_y, &lon, &lat);
-
- zoom_factor_set(MIN_2D_ZOOM_FACTOR);
-
- elm_map_region_show(map, lon, lat);
-}
-
-static void
-zoom_to_3d_map_cb(void *data EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- if (map_dimension_state == MAP_DIMENSION_STATE_3D) return;
-
- zoom_factor_set(MAX_3D_ZOOM_FACTOR);
-}
-
-static void
-submenu_zoom_add(Elm_Object_Item *parent)
-{
- if (!parent) return;
-
- elm_menu_item_add(menu, parent, NULL, "Zoom in", zoom_in_cb, NULL);
- elm_menu_item_add(menu, parent, NULL, "Zoom out", zoom_out_cb, NULL);
- elm_menu_item_add(menu, parent, NULL, "Zoom to 2D map", zoom_to_2d_map_cb, NULL);
- elm_menu_item_add(menu, parent, NULL, "Zoom to 3D map", zoom_to_3d_map_cb, NULL);
-}
-
-static void
-submenu_info_add(Elm_Object_Item *parent)
-{
- char buf[50];
- double s, t;
- double lon, lat;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Evas_Coord src_x, src_y;
- Evas_Coord src_size;
-
- if (!parent) return;
-
- if (map_dimension_state == MAP_DIMENSION_STATE_3D)
- {
- evas_canvas3d_scene_pick(scene, mouse_down_pos.x, mouse_down_pos.y, &n, &m, &s, &t);
- src_size = (Evas_Coord) (IMG_SIZE * zoom_factor);
- src_x = (Evas_Coord)(src_size * s);
- src_y = (Evas_Coord)(src_size * t);
- elm_map_canvas_to_region_convert(map, src_x, src_y, &lon, &lat);
- }
- else
- {
- elm_map_canvas_to_region_convert(map, mouse_down_pos.x, mouse_down_pos.y, &lon, &lat);
- }
-
- snprintf(buf, sizeof(buf), "Longitude : %f", lon);
- elm_menu_item_add(menu, parent, NULL, buf, NULL, NULL);
-
- snprintf(buf, sizeof(buf), "Latitude : %f", lat);
- elm_menu_item_add(menu, parent, NULL, buf, NULL, NULL);
-}
-
-static void
-map_zoom_change_cb(void *data EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- int cur_zoom_factor;
-
- if (map_dimension_state == MAP_DIMENSION_STATE_3D) return;
-
- cur_zoom_factor = elm_map_zoom_get(map);
-
- if (elm_map_paused_get(map))
- elm_map_paused_set(map, EINA_FALSE);
-
- zoom_factor_set(cur_zoom_factor);
-}
-
-static void
-map_mouse_down_cb(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *o,
- void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Coord x, y, w, h;
- Evas_Coord obj_x, obj_y;
- int scene_w, scene_h;
- double scene_x, scene_y;
- double s, t;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Eina_Bool pick;
-
- mouse_down_pos.x = ev->canvas.x;
- mouse_down_pos.y = ev->canvas.y;
-
- evas_object_geometry_get(o, &x, &y, &w, &h);
-
- obj_x = ev->canvas.x - x;
- obj_y = ev->canvas.y - y;
-
- evas_canvas3d_scene_size_get(scene, &scene_w, &scene_h);
-
- scene_x = obj_x * scene_w / (double)w;
- scene_y = obj_y * scene_h / (double)h;
-
- pick = evas_canvas3d_scene_pick(scene, scene_x, scene_y, &n, &m, &s, &t);
- if (pick)
- printf("Picked : ");
- else
- printf("Not picked : ");
-
- printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) "
- "node(%p) mesh(%p)\n",
- ev->output.x, ev->output.y,
- ev->canvas.x, ev->canvas.y,
- obj_x, obj_y,
- scene_x, scene_y,
- s, t, n, m);
-
- if (ev->button == 3)
- {
- if (!menu)
- {
- menu = elm_menu_add(o);
- elm_menu_parent_set(menu, o);
- menu_it = elm_menu_item_add(menu, NULL, "", "Zoom", NULL, NULL);
- submenu_zoom_add(menu_it);
- menu_it = elm_menu_item_add(menu, NULL, "", "Info", NULL, NULL);
- }
-
- elm_menu_item_subitems_clear(menu_it);
- submenu_info_add(menu_it);
-
- elm_menu_move(menu, ev->canvas.x, ev->canvas.y);
- evas_object_show(menu);
- }
-
-}
-
-static void
-mouse_down_cb(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *o,
- void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Coord x, y, w, h;
- Evas_Coord obj_x, obj_y;
- int scene_w, scene_h;
- double scene_x, scene_y;
- double s, t;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Eina_Bool pick;
-
- mouse_down_pos.x = ev->canvas.x;
- mouse_down_pos.y = ev->canvas.y;
-
- /* Stop rotating earth. */
- if (animator)
- {
- ecore_animator_del(animator);
- animator = NULL;
- }
-
- evas_object_geometry_get(o, &x, &y, &w, &h);
-
- obj_x = ev->canvas.x - x;
- obj_y = ev->canvas.y - y;
-
- evas_canvas3d_scene_size_get(scene, &scene_w, &scene_h);
-
- scene_x = obj_x * scene_w / (double)w;
- scene_y = obj_y * scene_h / (double)h;
-
- pick = evas_canvas3d_scene_pick(scene, scene_x, scene_y, &n, &m, &s, &t);
- if (pick)
- printf("Picked : ");
- else
- printf("Not picked : ");
-
- printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) "
- "node(%p) mesh(%p)\n",
- ev->output.x, ev->output.y,
- ev->canvas.x, ev->canvas.y,
- obj_x, obj_y,
- scene_x, scene_y,
- s, t, n, m);
-
- if (ev->button == 1)
- is_mouse_pressed = EINA_TRUE;
- else if (ev->button == 3)
- {
- elm_check_state_set(rotation_toggle, EINA_FALSE);
- if (!menu)
- {
- menu = elm_menu_add(o);
- elm_menu_parent_set(menu, o);
- menu_it = elm_menu_item_add(menu, NULL, "", "Zoom", NULL, NULL);
- submenu_zoom_add(menu_it);
- menu_it = elm_menu_item_add(menu, NULL, "", "Info", NULL, NULL);
- }
-
- elm_menu_item_subitems_clear(menu_it);
- submenu_info_add(menu_it);
-
- elm_menu_move(menu, ev->canvas.x, ev->canvas.y);
- evas_object_show(menu);
- }
-}
-
-static void
-mouse_move_cb(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *o EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Mouse_Move *ev = event_info;
- double distance_to_origin;
- double radian_camera_up_axis, radian_camera_right_axis;
- vec3 camera_pos_unit_vec;
-
- if ((ev->buttons == 1) && is_mouse_pressed)
- {
- radian_camera_up_axis = (ev->prev.canvas.x - ev->cur.canvas.x) * 0.01;
- radian_camera_right_axis = (ev->prev.canvas.y - ev->cur.canvas.y) * 0.01;
-
- distance_to_origin = sqrt(pow(camera_pos.x, 2) + pow(camera_pos.y, 2) + pow(camera_pos.z, 2));
-
- /* Update camera position, up vector and right vector. */
- vec3_rotate_angle_axis(&camera_pos, &camera_pos, radian_camera_up_axis, &camera_up_vec);
- vec3_rotate_angle_axis(&camera_right_vec, &camera_right_vec, radian_camera_up_axis, &camera_up_vec);
- vec3_normalize(&camera_right_vec, &camera_right_vec);
-
- vec3_rotate_angle_axis(&camera_pos, &camera_pos, radian_camera_right_axis, &camera_right_vec);
- vec3_rotate_angle_axis(&camera_up_vec, &camera_up_vec, radian_camera_right_axis, &camera_right_vec);
- vec3_normalize(&camera_up_vec, &camera_up_vec);
- vec3_normalize(&camera_pos_unit_vec, &camera_pos);
- vec3_scale(&camera_pos, &camera_pos_unit_vec, distance_to_origin);
-
- evas_canvas3d_node_position_set(camera_node, camera_pos.x, camera_pos.y, camera_pos.z);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, camera_up_vec.x, camera_up_vec.y, camera_up_vec.z);
-
- if (elm_check_state_get(light_toggle))
- {
- /* Update light position as the same as camera position. */
- evas_canvas3d_node_position_set(light_node, camera_pos.x, camera_pos.y, camera_pos.z);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, camera_up_vec.x, camera_up_vec.y, camera_up_vec.z);
- }
- }
-}
-
-static void
-mouse_up_cb(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *o,
- void *event_info)
-{
- Evas_Event_Mouse_Up *ev = event_info;
- Evas_Coord x, y, w, h;
- Evas_Coord obj_x, obj_y;
- int scene_w, scene_h;
- double scene_x, scene_y;
- double s, t;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Eina_Bool pick;
-
- evas_object_geometry_get(o, &x, &y, &w, &h);
-
- obj_x = ev->canvas.x - x;
- obj_y = ev->canvas.y - y;
-
- evas_canvas3d_scene_size_get(scene, &scene_w, &scene_h);
-
- scene_x = obj_x * scene_w / (double)w;
- scene_y = obj_y * scene_h / (double)h;
-
- pick = evas_canvas3d_scene_pick(scene, scene_x, scene_y, &n, &m, &s, &t);
- if (pick)
- printf("Picked : ");
- else
- printf("Not picked : ");
-
- printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) "
- "node(%p) mesh(%p)\n",
- ev->output.x, ev->output.y,
- ev->canvas.x, ev->canvas.y,
- obj_x, obj_y,
- scene_x, scene_y,
- s, t, n, m);
-
- /* Move camera position. */
- if (ev->button == 1)
- is_mouse_pressed = EINA_FALSE;
-
- if (elm_check_state_get(rotation_toggle))
- {
- /* Restart rotating earth. */
- animator = ecore_animator_add(animate_scene, mesh_node);
- }
-}
-
-static void
-mouse_wheel_cb(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *o EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Mouse_Wheel *ev = event_info;
- double new_zoom_factor;
-
- if (map_dimension_state == MAP_DIMENSION_STATE_2D) return;
-
- new_zoom_factor = zoom_factor - (ev->z * 0.1);
- zoom_factor_set(new_zoom_factor);
-}
-
-static void
-skybox_setup(void)
-{
- Evas_Canvas3D_Node *skybox_mesh_node;
- Evas_Canvas3D_Mesh *skybox_mesh;
- Evas_Canvas3D_Material *skybox_material;
- Evas_Canvas3D_Texture *skybox_texture_diffuse;
- Evas_Object *skybox_image;
- char buf[PATH_MAX];
-
- skybox_mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_vertex_count_set(skybox_mesh, 24);
- evas_canvas3d_mesh_frame_add(skybox_mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(skybox_mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 12 * sizeof(float), &skybox_vertices[0]);
- evas_canvas3d_mesh_frame_vertex_data_set(skybox_mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 12 * sizeof(float), &skybox_vertices[3]);
- evas_canvas3d_mesh_frame_vertex_data_set(skybox_mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 12 * sizeof(float), &skybox_vertices[6]);
- evas_canvas3d_mesh_frame_vertex_data_set(skybox_mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 12 * sizeof(float), &skybox_vertices[10]);
- evas_canvas3d_mesh_index_data_set(skybox_mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &skybox_indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(skybox_mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
-
- /* Set skybox texture source image. */
- skybox_image = elm_image_add(win);
- snprintf(buf, sizeof(buf), "%s/images/space.png", elm_app_data_dir_get());
- elm_image_file_set(skybox_image, buf, NULL);
- evas_object_resize(skybox_image, SKYBOX_IMG_WIDTH, SKYBOX_IMG_HEIGHT);
- evas_object_show(skybox_image);
-
- /* Set skybox texture material. */
- skybox_material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_mesh_frame_material_set(skybox_mesh, 0, skybox_material);
-
- skybox_texture_diffuse = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
-
- evas_canvas3d_texture_source_set(skybox_texture_diffuse, skybox_image);
- evas_canvas3d_texture_source_visible_set(skybox_texture_diffuse, EINA_FALSE);
-
- evas_canvas3d_material_texture_set(skybox_material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, skybox_texture_diffuse);
- evas_canvas3d_material_enable_set(skybox_material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(skybox_material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(skybox_material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(skybox_material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.1, 0.1, 0.1, 1.0);
- evas_canvas3d_material_color_set(skybox_material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(skybox_material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 0.1, 0.1, 0.1, 1.0);
- evas_canvas3d_material_shininess_set(skybox_material, 50.0);
-
- skybox_mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(root_node, skybox_mesh_node);
- evas_canvas3d_node_mesh_add(skybox_mesh_node, skybox_mesh);
- evas_canvas3d_mesh_shader_mode_set(skybox_mesh, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
-}
-
-static void
-texture_source_setup(void)
-{
- char buf[PATH_MAX];
-
- snprintf(buf, sizeof(buf), "%s/examples/evas3d_map_example.edj", elm_app_data_dir_get());
- elm_theme_extension_add(NULL, buf);
-
- /* Add a map object for the use of the texture source. */
- map = elm_map_add(win);
- elm_object_style_set(map, "evas3d");
- elm_map_source_set(map, ELM_MAP_SOURCE_TYPE_TILE, "MapQuest");
- elm_scroller_policy_set
- (map, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
- elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
- evas_object_resize(map, IMG_SIZE, IMG_SIZE);
- evas_object_show(map);
-
- evas_object_smart_callback_add(map, "zoom,change",
- map_zoom_change_cb, NULL);
- evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_DOWN,
- map_mouse_down_cb, map);
-
- /* Add a normal map object for the use of the normal texture source. */
- normal_map = elm_image_add(win);
- snprintf(buf, sizeof(buf), "%s/images/earth_normal.png", elm_app_data_dir_get());
- elm_image_file_set(normal_map, buf, NULL);
- evas_object_resize(normal_map, IMG_SIZE, IMG_SIZE);
- evas_object_show(normal_map);
-}
-
-static void
-camera_setup(void)
-{
- /* Add the camera. */
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 60.0, 1.0, 1.0, 100.0);
-
- /* Set camera position. */
- camera_pos.x = 0.0;
- camera_pos.y = 0.0;
- camera_pos.z = MAX_CAMERA_DISTANCE;
-
- /* Set camera up vector. */
- camera_up_vec.x = 0.0;
- camera_up_vec.y = 1.0;
- camera_up_vec.z = 0.0;
-
- /* Set camera right vector. */
- camera_right_vec.x = 1.0;
- camera_right_vec.y = 0.0;
- camera_right_vec.z = 0.0;
-
- camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_position_set(camera_node, camera_pos.x, camera_pos.y, camera_pos.z);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, camera_up_vec.x, camera_up_vec.y, camera_up_vec.z);
- evas_canvas3d_node_member_add(root_node, camera_node);
-}
-
-static void
-light_setup(void)
-{
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(light, 0.2, 0.2, 0.2, 1.0);
-
- light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(light_node, light);
- evas_canvas3d_node_position_set(light_node, 0.0, 0.0, MAX_CAMERA_DISTANCE);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, light_node);
-}
-
-static void
-mesh_setup(void)
-{
- /* Create a sphere mesh. */
- sphere_init(50);
-
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_vertex_count_set(mesh, vertex_count);
- evas_canvas3d_mesh_frame_add(mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, sizeof(vertex), &vertices[0].position);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, sizeof(vertex), &vertices[0].normal);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT, sizeof(vertex), &vertices[0].tangent);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, sizeof(vertex), &vertices[0].color);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, sizeof(vertex), &vertices[0].texcoord);
- evas_canvas3d_mesh_index_data_set(mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
-
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
-
- texture_diffuse = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- evas_canvas3d_texture_source_set(texture_diffuse, map);
- evas_canvas3d_texture_source_visible_set(texture_diffuse, EINA_FALSE);
-
- texture_normal = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- evas_canvas3d_texture_source_set(texture_normal, normal_map);
- evas_canvas3d_texture_source_visible_set(texture_normal, EINA_FALSE);
-
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture_diffuse);
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, texture_normal);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.1, 0.1, 0.1, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 0.1, 0.1, 0.1, 1.0);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(root_node, mesh_node);
- evas_canvas3d_node_mesh_add(mesh_node, mesh);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP);
-}
-
-static void
-hoversel_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- elm_map_source_set(map, ELM_MAP_SOURCE_TYPE_TILE, (char *)data);
- zoom_factor_set(zoom_factor);
-}
-
-static void
-hoversel_setup(Evas_Object *parent)
-{
- hoversel = elm_hoversel_add(parent);
-
- elm_hoversel_hover_parent_set(hoversel, parent);
- elm_object_text_set(hoversel, "Map Sources");
- elm_hoversel_item_add(hoversel, "Mapnik", NULL, ELM_ICON_NONE, hoversel_cb, "Mapnik");
- elm_hoversel_item_add(hoversel, "CycleMap", NULL, ELM_ICON_NONE, hoversel_cb, "CycleMap");
- elm_hoversel_item_add(hoversel, "MapQuest", NULL, ELM_ICON_NONE, hoversel_cb, "MapQuest");
-
- elm_object_part_content_set(parent, "elm.swallow.hoversel", hoversel);
- evas_object_show(hoversel);
-}
-
-static void
-rotation_toggle_changed_cb(void *data EINA_UNUSED,
- Evas_Object *obj,
- void *event_info EINA_UNUSED)
-{
- /* Stop rotating earth. */
- if (animator)
- {
- ecore_animator_del(animator);
- animator = NULL;
- }
- if (elm_check_state_get(obj))
- {
- /* Restart rotating earth. */
- animator = ecore_animator_add(animate_scene, mesh_node);
- }
-}
-
-static void
-rotation_toggle_setup(Evas_Object *parent)
-{
- rotation_toggle = elm_check_add(parent);
-
- elm_object_style_set(rotation_toggle, "toggle");
- elm_object_text_set(rotation_toggle, "Earth Rotation");
- elm_object_part_text_set(rotation_toggle, "on", "ON");
- elm_object_part_text_set(rotation_toggle, "off", "OFF");
- elm_check_state_set(rotation_toggle, EINA_TRUE);
-
- elm_object_part_content_set(parent, "elm.swallow.rotation_toggle", rotation_toggle);
- evas_object_show(rotation_toggle);
-
- evas_object_smart_callback_add(rotation_toggle, "changed", rotation_toggle_changed_cb, NULL);
-}
-
-static void
-light_toggle_changed_cb(void *data EINA_UNUSED,
- Evas_Object *obj,
- void *event_info EINA_UNUSED)
-{
- if (elm_check_state_get(obj))
- {
- /* Set light position as the same as camera position. */
- evas_canvas3d_node_position_set(light_node, camera_pos.x, camera_pos.y, camera_pos.z);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, camera_up_vec.x, camera_up_vec.y, camera_up_vec.z);
- }
- else
- {
- /* Set light position to default position. */
- evas_canvas3d_node_position_set(light_node, 0.0, 0.0, MAX_CAMERA_DISTANCE);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- }
-}
-
-static void
-light_toggle_setup(Evas_Object *parent)
-{
- light_toggle = elm_check_add(parent);
-
- elm_object_style_set(light_toggle, "toggle");
- elm_object_text_set(light_toggle, "Light on Camera");
- elm_object_part_text_set(light_toggle, "on", "ON");
- elm_object_part_text_set(light_toggle, "off", "OFF");
- elm_check_state_set(light_toggle, EINA_FALSE);
-
- elm_object_part_content_set(parent, "elm.swallow.light_toggle", light_toggle);
- evas_object_show(light_toggle);
-
- evas_object_smart_callback_add(light_toggle, "changed", light_toggle_changed_cb, NULL);
-}
-
-
-static void
-slider_changed_cb(void *data EINA_UNUSED,
- Evas_Object *obj,
- void *event_info EINA_UNUSED)
-{
- double new_zoom_factor = ROUND(elm_slider_value_get(obj));
-
- if (new_zoom_factor == zoom_factor) return;
-
- zoom_factor_set(new_zoom_factor);
-}
-
-static void
-zoom_slider_setup(Evas_Object *parent)
-{
- zoom_slider = elm_slider_add(parent);
-
- elm_object_text_set(zoom_slider, "Zoom Factor");
- elm_slider_unit_format_set(zoom_slider, "X%1.1f");
- elm_slider_indicator_format_set(zoom_slider, "%1.1f");
- elm_slider_span_size_set(zoom_slider, 100);
- elm_slider_min_max_set(zoom_slider, MIN_3D_ZOOM_FACTOR, MAX_3D_ZOOM_FACTOR);
-
- elm_object_part_content_set(parent, "elm.swallow.zoom_slider", zoom_slider);
- evas_object_show(zoom_slider);
-
- evas_object_smart_callback_add(zoom_slider, "changed", slider_changed_cb, NULL);
-}
-
-EAPI_MAIN int
-elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
-{
- char buf[PATH_MAX];
-
- elm_app_info_set(elm_main, "elementary", "examples/evas3d_map_example.edj");
-
- elm_config_accel_preference_set("3d");
-
- elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
-
- /* Add a window. */
- win = elm_win_util_standard_add("elm_map_evas3d", "Elm_Map_Evas3d");
- elm_win_autodel_set(win, EINA_TRUE);
-
- evas = evas_object_evas_get(win);
-
- /* Add a background. */
- bg = evas_object_rectangle_add(evas);
- evas_object_color_set(bg, 0, 0, 0, 255);
- evas_object_resize(bg, WIDTH, HEIGHT);
- evas_object_show(bg);
-
- /* Add an image which shows a scene. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- evas_object_resize(image, WIDTH, HEIGHT);
- evas_object_show(image);
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, mouse_down_cb, NULL);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_MOVE, mouse_move_cb, NULL);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_UP, mouse_up_cb, NULL);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_WHEEL, mouse_wheel_cb, NULL);
-
- /* Add a scene object. */
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add a root node for the scene. */
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- skybox_setup();
- texture_source_setup();
- camera_setup();
- light_setup();
- mesh_setup();
-
- /* Set up scene. */
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
- efl_canvas_scene3d_set(image, scene);
-
- /* Add a layout for controlers. */
- control_layout = elm_layout_add(win);
- snprintf(buf, sizeof(buf), "%s/examples/evas3d_map_example.edj", elm_app_data_dir_get());
- elm_layout_file_set(control_layout, buf, "control_layout");
- evas_object_resize(control_layout, WIDTH, HEIGHT);
- evas_object_show(control_layout);
-
- /* Set up controlers. */
- hoversel_setup(control_layout);
- rotation_toggle_setup(control_layout);
- light_toggle_setup(control_layout);
- zoom_slider_setup(control_layout);
-
- /* Start rotating earth */
- animator = ecore_animator_add(animate_scene, mesh_node);
-
- evas_object_resize(win, WIDTH, HEIGHT);
- evas_object_show(win);
-
- elm_run();
- sphere_fini();
-
- return 0;
-}
-ELM_MAIN();
diff --git a/src/examples/elementary/evas3d_map_example.edc b/src/examples/elementary/evas3d_map_example.edc
deleted file mode 100644
index 2d4573a788..0000000000
--- a/src/examples/elementary/evas3d_map_example.edc
+++ /dev/null
@@ -1,964 +0,0 @@
-#define FIXED_SIZE(_WIDTH, _HEIGHT) \
- min: _WIDTH _HEIGHT; max: _WIDTH _HEIGHT; fixed: 1 1;
-
-collections {
-group { name: "control_layout";
- parts {
- part { name: "base"; type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- }
- }
- part { name: "control_bg"; type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- min: 220 150;
- max: 220 150;
- fixed: 1 1;
- align: 1.0 1.0;
- rel1 { to: "base"; relative: 1.0 1.0; }
- rel2 { to: "base"; relative: 1.0 1.0; }
- }
- }
- part { name: "elm.swallow.hoversel"; type: SWALLOW;
- scale: 1;
- description { state: "default" 0.0;
- min: 200 20;
- max: 200 20;
- fixed: 1 1;
- align: 0.0 0.0;
- rel1 { to: "control_bg"; relative: 0.0 0.0; }
- rel2 { to: "control_bg"; relative: 1.0 0.0; }
- }
- }
- part { name: "hoversel_bottom_padding"; type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- min: 200 10;
- max: 200 10;
- fixed: 1 1;
- align: 0.0 0.0;
- rel1 { to_x: "control_bg"; to_y: "elm.swallow.hoversel"; relative: 0.0 1.0; }
- rel2 { to_x: "control_bg"; to_y: "elm.swallow.hoversel"; relative: 1.0 1.0; }
- }
- }
- part { name: "elm.swallow.rotation_toggle"; type: SWALLOW;
- scale: 1;
- description { state: "default" 0.0;
- min: 200 30;
- max: 200 30;
- fixed: 1 1;
- align: 0.0 0.0;
- rel1 { to_x: "control_bg"; to_y: "hoversel_bottom_padding"; relative: 0.0 1.0; }
- rel2 { to_x: "control_bg"; to_y: "hoversel_bottom_padding"; relative: 1.0 1.0; }
- }
- }
- part { name: "elm.swallow.light_toggle"; type: SWALLOW;
- scale: 1;
- description { state: "default" 0.0;
- min: 200 30;
- max: 200 30;
- fixed: 1 1;
- align: 0.0 0.0;
- rel1 { to_x: "control_bg"; to_y: "elm.swallow.rotation_toggle"; relative: 0.0 1.0; }
- rel2 { to_x: "control_bg"; to_y: "elm.swallow.rotation_toggle"; relative: 1.0 1.0; }
- }
- }
- part { name: "elm.swallow.zoom_slider"; type: SWALLOW;
- scale: 1;
- description { state: "default" 0.0;
- min: 200 30;
- max: 200 30;
- fixed: 1 1;
- align: 0.0 0.0;
- rel1 { to_x: "control_bg"; to_y: "elm.swallow.light_toggle"; relative: 0.0 1.0; }
- rel2 { to_x: "control_bg"; to_y: "elm.swallow.light_toggle"; relative: 1.0 1.0; }
- }
- }
- }
-}
-
-group { name: "elm/scroller/base/evas3d";
- data.item: "focus_highlight" "on";
-
- parts {
- program {
- signal: "load"; source: "";
- script {
- emit("reload", "elm");
- }
- }
-// vert bar ////////////////////////////////////////////////////////////////
- part { name: "sb_vbar_show"; type: RECT;
- description { state: "default" 0.0;
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
- part { name: "sb_vbar"; type: RECT;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 15 1;
- align: 1.0 0.0;
- rel1.relative: 1.0 0.0;
- //rel1.offset: -1 0;
- rel2.relative: 1.0 0.0;
- rel2.to_y: "sb_hbar";
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- max: 0 99999;
- }
- }
- part { name: "sb_vbar_base"; type: RECT;
- clip_to: "sb_vbar";
- description { state: "default" 0.0;
- color: 0 0 0 0;
- rel1.relative: 0.0 1.0;
- rel1.to: "sb_vbar_a1";
- rel2.relative: 1.0 0.0;
- rel2.to: "sb_vbar_a2";
- fixed: 1 1;
- }
- }
- part { name: "sb_vbar_p1"; type: RECT;
- clip_to: "sb_vbar";
- description { state: "default" 0.0;
- color: 0 0 0 0;
- rel1.relative: 0.0 1.0;
- rel1.to: "sb_vbar_a1";
- rel2.relative: 1.0 0.0;
- rel2.to: "elm.dragable.vbar";
- fixed: 1 1;
- }
- }
- part { name: "sb_vbar_p2"; type: RECT;
- clip_to: "sb_vbar";
- description { state: "default" 0.0;
- color: 0 0 0 0;
- rel1.relative: 0.0 1.0;
- rel1.to: "elm.dragable.vbar";
- rel2.relative: 1.0 0.0;
- rel2.to: "sb_vbar_a2";
- fixed: 1 1;
- }
- }
- part { name: "elm.dragable.vbar"; type: RECT;
- clip_to: "sb_vbar";
- scale: 1;
- dragable.x: 0 0 0;
- dragable.y: 1 1 0;
- dragable.confine: "sb_vbar_base";
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 15 13;
- rel1.relative: 0.5 0.5;
- rel1.to: "sb_vbar_base";
- rel2.relative: 0.5 0.5;
- rel2.to: "sb_vbar_base";
- color: 0 0 0 0;
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "sb_vbar_a1"; type: RECT;
- clip_to: "sb_vbar";
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 15 15;
- align: 0.5 0.0;
- aspect: 1.0 1.0; aspect_preference: HORIZONTAL;
- color: 0 0 0 0;
- rel1.to: "sb_vbar";
- rel2.to: "sb_vbar";
- rel2.relative: 1.0 0.0;
- //rel2.offset: -1 0;
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- }
- }
- part { name: "sb_vbar_a2"; type: RECT;
- clip_to: "sb_vbar";
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 15 15;
- align: 0.5 1.0;
- aspect: 1.0 1.0; aspect_preference: HORIZONTAL;
- color: 0 0 0 0;
- rel1.to: "sb_vbar";
- //rel1.offset: 0 -1;
- rel1.relative: 0.0 1.0;
- rel2.to: "sb_vbar";
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- }
- }
- program {
- signal: "elm,action,show,vbar"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "sb_vbar";
- target: "sb_vbar_show";
- target: "elm.dragable.vbar";
- target: "sb_vbar_a1";
- target: "sb_vbar_a2";
- }
- program {
- signal: "elm,action,hide,vbar"; source: "elm";
- action: STATE_SET "hidden" 0.0;
- target: "sb_vbar";
- target: "sb_vbar_show";
- target: "elm.dragable.vbar";
- target: "sb_vbar_a1";
- target: "sb_vbar_a2";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_vbar_a1";
- action: STATE_SET "clicked" 0.0;
- target: "arrow1_vbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_vbar_a1";
- action: DRAG_VAL_STEP 0.0 -1.0;
- target: "elm.dragable.vbar";
- }
- program {
- signal: "mouse,up,1"; source: "sb_vbar_a1";
- action: STATE_SET "default" 0.0;
- target: "arrow1_vbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_vbar_a2";
- action: STATE_SET "clicked" 0.0;
- target: "arrow2_vbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_vbar_a2";
- action: DRAG_VAL_STEP 0.0 1.0;
- target: "elm.dragable.vbar";
- }
- program {
- signal: "mouse,up,1"; source: "sb_vbar_a2";
- action: STATE_SET "default" 0.0;
- target: "arrow2_vbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_vbar_p1";
- action: DRAG_VAL_PAGE 0.0 -1.0;
- target: "elm.dragable.vbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_vbar_p2";
- action: DRAG_VAL_PAGE 0.0 1.0;
- target: "elm.dragable.vbar";
- }
-
-// horiz bar /////////////////////////////////////////////////////////////
- part { name: "sb_hbar_show"; type: RECT;
- description { state: "default" 0.0;
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
- part { name: "sb_hbar"; type: RECT; mouse_events: 0;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 1 15;
- align: 0.0 1.0;
- rel1.relative: 0.0 1.0;
- //rel1.offset: 0 -1;
- rel2.relative: 0.0 1.0;
- rel2.to_x: "sb_vbar";
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- max: 99999 0;
- }
- }
- part { name: "sb_hbar_base"; type: RECT;
- clip_to: "sb_hbar";
- description { state: "default" 0.0;
- color: 0 0 0 0;
- rel1.relative: 1.0 0.0;
- rel1.to: "sb_hbar_a1";
- rel2.relative: 0.0 1.0;
- rel2.to: "sb_hbar_a2";
- fixed: 1 1;
- }
- }
- part { name: "sb_hbar_p1"; type: RECT;
- clip_to: "sb_hbar";
- description { state: "default" 0.0;
- color: 0 0 0 0;
- rel1.relative: 1.0 0.0;
- rel1.to: "sb_hbar_a1";
- rel2.relative: 0.0 1.0;
- rel2.to: "elm.dragable.hbar";
- fixed: 1 1;
- }
- }
- part { name: "sb_hbar_p2"; type: RECT;
- clip_to: "sb_hbar";
- description { state: "default" 0.0;
- color: 0 0 0 0;
- rel1.relative: 1.0 0.0;
- rel1.to: "elm.dragable.hbar";
- rel2.relative: 0.0 1.0;
- rel2.to: "sb_hbar_a2";
- fixed: 1 1;
- }
- }
- part { name: "elm.dragable.hbar"; type: RECT;
- clip_to: "sb_hbar";
- scale: 1;
- dragable.x: 1 1 0;
- dragable.y: 0 0 0;
- dragable.confine: "sb_hbar_base";
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 13 15;
- rel1.relative: 0.5 0.5;
- rel1.to: "sb_hbar_base";
- rel2.relative: 0.5 0.5;
- rel2.to: "sb_hbar_base";
- color: 0 0 0 0;
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "sb_hbar_a1"; type: RECT;
- clip_to: "sb_hbar";
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 15 15;
- align: 0.0 0.5;
- aspect: 1.0 1.0; aspect_preference: VERTICAL;
- color: 0 0 0 0;
- rel1.to: "sb_hbar";
- rel2.to: "sb_hbar";
- rel2.relative: 0.0 1.0;
- //rel2.offset: 0 -1;
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- }
- }
- part { name: "sb_hbar_a2"; type: RECT;
- clip_to: "sb_hbar";
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 15 15;
- align: 1.0 0.5;
- aspect: 1.0 1.0; aspect_preference: VERTICAL;
- color: 0 0 0 0;
- rel1.to: "sb_hbar";
- //rel1.offset: -1 0;
- rel1.relative: 1.0 0.0;
- rel2.to: "sb_hbar";
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- min: 0 0;
- }
- }
- program {
- signal: "elm,action,show,hbar"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "sb_hbar";
- target: "sb_hbar_show";
- target: "elm.dragable.hbar";
- target: "sb_hbar_a1";
- target: "sb_hbar_a2";
- }
- program {
- signal: "elm,action,hide,hbar"; source: "elm";
- action: STATE_SET "hidden" 0.0;
- target: "sb_hbar";
- target: "sb_hbar_show";
- target: "elm.dragable.hbar";
- target: "sb_hbar_a1";
- target: "sb_hbar_a2";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_hbar_a1";
- action: STATE_SET "clicked" 0.0;
- target: "arrow1_hbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_hbar_a1";
- action: DRAG_VAL_STEP -1.0 0.0;
- target: "elm.dragable.hbar";
- }
- program {
- signal: "mouse,up,1"; source: "sb_hbar_a1";
- action: STATE_SET "default" 0.0;
- target: "arrow1_hbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_hbar_a2";
- action: STATE_SET "clicked" 0.0;
- target: "arrow2_hbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_hbar_a2";
- action: DRAG_VAL_STEP 1.0 0.0;
- target: "elm.dragable.hbar";
- }
- program {
- signal: "mouse,up,1"; source: "sb_hbar_a2";
- action: STATE_SET "default" 0.0;
- target: "arrow2_hbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_hbar_p1";
- action: DRAG_VAL_PAGE -1.0 0.0;
- target: "elm.dragable.hbar";
- }
- program {
- signal: "mouse,down,1*"; source: "sb_hbar_p2";
- action: DRAG_VAL_PAGE 1.0 0.0;
- target: "elm.dragable.hbar";
- }
-
- part { name: "bg"; type: RECT;
- description { state: "default" 0.0;
- rel1.to: "elm.swallow.background";
- rel2.to: "elm.swallow.background";
-// color: 64 64 64 200;
- color: 0 0 0 0;
- color_class: "scroller_bg";
- }
- }
- part { name: "clipper"; type: RECT;
- description { state: "default" 0.0;
- rel1.to: "elm.swallow.background";
- rel2.to: "elm.swallow.background";
- }
- }
- part { name: "elm.swallow.background"; type: SWALLOW;
- clip_to: "clipper";
- description { state: "default" 0.0;
- //rel1.offset: 1 1;
- rel2.relative: 0.0 0.0;
- //rel2.offset: -2 -2;
- rel2.to_x: "sb_vbar";
- rel2.to_y: "sb_hbar";
- }
- }
- part { name: "elm.swallow.content"; type: SWALLOW;
- clip_to: "clipper";
- description { state: "default" 0.0;
- //rel1.offset: 1 1;
- rel2.relative: 0.0 0.0;
- //rel2.offset: -2 -2;
- rel2.to_x: "sb_vbar";
- rel2.to_y: "sb_hbar";
- }
- }
- part { name: "inset"; type: SPACER;
- description { state: "default" 0.0;
- rel1.to: "bg";
- //rel1.offset: -1 -1;
- rel2.to: "bg";
- //rel2.offset: 0 0;
- }
- }
- part { name: "shadow"; type: SPACER;
- description { state: "default" 0.0;
- rel1.to: "bg";
- rel2.to: "bg";
- }
- }
- part { name: "elm.swallow.overlay"; type: SWALLOW;
- clip_to: "clipper";
- description { state: "default" 0.0;
- rel1.to: "elm.swallow.content";
- rel2.to: "elm.swallow.content";
- }
- }
- part { name: "runner_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- rel1.to: "sb_vbar_base";
- rel2.to: "sb_vbar_base";
- min: 3 4;
- max: 3 99999;
- fixed: 1 1;
- }
- }
- part { name: "runner_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- rel1.to: "sb_hbar_base";
- rel2.to: "sb_hbar_base";
- min: 4 3;
- max: 99999 3;
- fixed: 1 1;
- }
- }
- part { name: "runner_vbar_clip"; type: RECT;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- min: 1 1;
- max: 1 99999;
- rel1.to: "runner_vbar";
- //rel1.offset: 0 1;
- rel2.to: "runner_vbar";
- //rel2.offset: -1 -2;
- fixed: 1 1;
- }
- }
- part { name: "runner_hbar_clip"; type: RECT;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- min: 1 1;
- max: 99999 1;
- rel1.to: "runner_hbar";
- //rel1.offset: 1 0;
- rel2.to: "runner_hbar";
- //rel2.offset: -2 -1;
- fixed: 1 1;
- }
- }
-
- part { name: "arrow1_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- rel1.to: "sb_vbar_a1";
- rel2.to: "sb_vbar_a1";
- FIXED_SIZE(15, 15)
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "arrow2_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- rel1.to: "sb_vbar_a2";
- rel2.to: "sb_vbar_a2";
- FIXED_SIZE(15, 15)
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "shadow_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- //rel1.offset: -3 -2;
- rel1.to: "base_vbar";
- //rel2.offset: 2 4;
- rel2.to: "base_vbar";
- fixed: 1 1;
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- //rel1.offset: -2 -2;
- //rel2.offset: 1 1;
- }
- }
- part { name: "glow_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- //rel1.offset: -3 -3;
- rel1.to: "base_vbar";
- //rel2.offset: 2 2;
- rel2.to: "base_vbar";
- fixed: 1 1;
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "runner_glow_vbar"; type: SPACER;
- clip_to: "runner_vbar_clip";
- description { state: "default" 0.0;
- rel1.offset: 0 -30;
- rel1.to_x: "runner_vbar_clip";
- rel1.to_y: "base_vbar";
- rel2.offset: -1 29;
- rel2.to_x: "runner_vbar_clip";
- rel2.to_y: "base_vbar";
- fixed: 1 1;
- }
- }
- part { name: "base_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- fixed: 1 1;
- //rel1.offset: 2 0;
- rel1.to: "elm.dragable.vbar";
- //rel2.offset: -3 -1;
- rel2.to: "elm.dragable.vbar";
- min: 3 13;
- fixed: 1 1;
- }
- }
- part { name: "bevel_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- rel1.to: "base_vbar";
- rel2.to: "base_vbar";
- min: 3 3;
- fixed: 1 1;
- }
- }
- part { name: "center_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- rel1.to: "base_vbar";
- rel2.to: "base_vbar";
- FIXED_SIZE(3, 11)
- }
- }
- part { name: "center_glow_vbar"; type: SPACER;
- clip_to: "sb_vbar_show";
- description { state: "default" 0.0;
- rel1.to: "center_vbar";
- rel2.to: "center_vbar";
- FIXED_SIZE(11, 17)
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
-
- part { name: "arrow1_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- rel1.to: "sb_hbar_a1";
- rel2.to: "sb_hbar_a1";
- FIXED_SIZE(15, 15)
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "arrow2_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- rel1.to: "sb_hbar_a2";
- rel2.to: "sb_hbar_a2";
- FIXED_SIZE(15, 15)
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "shadow_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- //rel1.offset: -3 -2;
- rel1.to: "base_hbar";
- //rel2.offset: 2 4;
- rel2.to: "base_hbar";
- fixed: 1 1;
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- //rel1.offset: -2 -2;
- //rel2.offset: 1 1;
- }
- }
- part { name: "glow_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- //rel1.offset: -3 -3;
- rel1.to: "base_hbar";
- //rel2.offset: 2 2;
- rel2.to: "base_hbar";
- fixed: 1 1;
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "runner_glow_hbar"; type: SPACER;
- clip_to: "runner_hbar_clip";
- description { state: "default" 0.0;
- rel1.offset: -30 0;
- rel1.to_x: "base_hbar";
- rel1.to_y: "runner_hbar_clip";
- rel2.offset: 29 -1;
- rel2.to_x: "base_hbar";
- rel2.to_y: "runner_hbar_clip";
- fixed: 1 1;
- }
- }
- part { name: "base_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- fixed: 1 1;
- //rel1.offset: 0 2;
- rel1.to: "elm.dragable.hbar";
- //rel2.offset: -1 -3;
- rel2.to: "elm.dragable.hbar";
- min: 13 3;
- }
- }
- part { name: "bevel_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- rel1.to: "base_hbar";
- rel2.to: "base_hbar";
- min: 3 3;
- fixed: 1 1;
- }
- }
- part { name: "center_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- rel1.to: "base_hbar";
- rel2.to: "base_hbar";
- FIXED_SIZE(11, 3)
- fixed: 1 1;
- }
- }
- part { name: "center_glow_hbar"; type: SPACER;
- clip_to: "sb_hbar_show";
- description { state: "default" 0.0;
- rel1.to: "center_hbar";
- rel2.to: "center_hbar";
- FIXED_SIZE(17, 11)
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "dim_effect"; type: RECT; mouse_events: 0;
- description { state: "default" 0.0;
- color: 0 0 0 0;
- }
- description { state: "effect" 0.0;
- color: 50 50 50 255;
- }
- }
- }
- programs {
- program {
- signal: "mouse,down,1*"; source: "elm.dragable.vbar";
- action: STATE_SET "clicked" 0.0;
- target: "elm.dragable.vbar";
- target: "shadow_vbar";
- target: "glow_vbar";
- target: "center_glow_vbar";
- }
- program {
- signal: "mouse,up,1"; source: "elm.dragable.vbar";
- action: STATE_SET "default" 0.0;
- target: "elm.dragable.vbar";
- target: "shadow_vbar";
- target: "glow_vbar";
- target: "center_glow_vbar";
- }
- program {
- signal: "mouse,down,1*"; source: "elm.dragable.hbar";
- action: STATE_SET "clicked" 0.0;
- target: "elm.dragable.hbar";
- target: "shadow_hbar";
- target: "glow_hbar";
- target: "center_glow_hbar";
- }
- program {
- signal: "mouse,up,1"; source: "elm.dragable.hbar";
- action: STATE_SET "default" 0.0;
- target: "elm.dragable.hbar";
- target: "shadow_hbar";
- target: "glow_hbar";
- target: "center_glow_hbar";
- }
- program {
- signal: "elm,action,looping,left"; source: "elm";
- action: STATE_SET "effect" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- after: "looping,left,done";
- }
- program { name: "looping,left,done";
- action: SIGNAL_EMIT "elm,looping,left,done" "elm";
- }
- program {
- signal: "elm,action,looping,left,end"; source: "elm";
- action: STATE_SET "default" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- }
- program {
- signal: "elm,action,looping,right"; source: "elm";
- action: STATE_SET "effect" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- after: "looping,right,done";
- }
- program { name: "looping,right,done";
- action: SIGNAL_EMIT "elm,looping,right,done" "elm";
- }
- program {
- signal: "elm,action,looping,right,end"; source: "elm";
- action: STATE_SET "default" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- }
- program {
- signal: "elm,action,looping,up"; source: "elm";
- action: STATE_SET "effect" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- after: "looping,up,done";
- }
- program { name: "looping,up,done";
- action: SIGNAL_EMIT "elm,looping,up,done" "elm";
- }
- program {
- signal: "elm,action,looping,up,end"; source: "elm";
- action: STATE_SET "default" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- }
- program {
- signal: "elm,action,looping,down"; source: "elm";
- action: STATE_SET "effect" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- after: "looping,down,done";
- }
- program { name: "looping,down,done";
- action: SIGNAL_EMIT "elm,looping,down,done" "elm";
- }
- program {
- signal: "elm,action,looping,down,end"; source: "elm";
- action: STATE_SET "default" 0.0;
- transition: LINEAR 0.3;
- target: "dim_effect";
- }
- }
-}
-
-group { name: "elm/photocam/base/evas3d";
- inherit: "elm/scroller/base/evas3d";
- parts {
- part { name: "busy_clip"; type: RECT;
- description { state: "default" 0.0;
- visible: 0;
- color: 255 255 255 0;
- }
- description { state: "active" 0.0;
- visible: 1;
- color: 255 255 255 255;
- }
- }
- part { name: "knob"; type: RECT;
- mouse_events: 0;
- clip_to: "busy_clip";
- scale: 1;
- description { state: "default" 0.0;
- min: 40 40;
- max: 40 40;
- align: 0.0 0.0;
- rel1.offset: 3 3;
- rel2.offset: 3 3;
- fixed: 1 1;
- visible: 0;
- }
- }
- part { name: "knob_spinner"; type: RECT;
- mouse_events: 0;
- clip_to: "busy_clip";
- description { state: "default" 0.0;
- fixed: 1 1;
- rel1.to: "knob";
- rel2.to: "knob";
- map.on: 1;
- map.smooth: 1;
- map.rotation.center: "knob";
- visible: 0;
- }
- description { state: "spin" 0.0;
- inherit: "default" 0.0;
- map.rotation.z: 360;
- }
- }
- }
- programs {
- program { name: "spin";
- signal: "elm,state,busy,start"; source: "elm";
- action: ACTION_STOP;
- target: "spin";
- target: "spin0";
- target: "spin1";
- target: "spin2";
- target: "spin3";
- target: "spin4";
- after: "spin0";
- }
- program { name: "spin0";
- action: STATE_SET "default" 0.0;
- target: "knob_spinner";
- after: "spin1";
- }
- program { name: "spin1";
- action: STATE_SET "spin" 0.0;
- transition: LINEAR 1.0;
- target: "knob_spinner";
- after: "spin2";
- }
- program { name: "spin2";
- action: STATE_SET "default" 0.0;
- target: "knob_spinner";
- after: "spin1";
- }
-
- program {
- signal: "elm,state,busy,start"; source: "elm";
- action: STATE_SET "active" 0.0;
- transition: SINUSOIDAL 0.25;
- target: "busy_clip";
- }
-
- program {
- signal: "elm,state,busy,stop"; source: "elm";
- action: STATE_SET "default" 0.0;
- transition: SINUSOIDAL 1.0;
- target: "busy_clip";
- after: "spin3";
- }
- program { name: "spin3";
- action: ACTION_STOP;
- target: "spin";
- target: "spin2";
- after: "spin4";
- }
- program { name: "spin4";
- action: STATE_SET "default" 0.0;
- target: "knob_spinner";
- }
- }
-}
-
-group { name: "elm/map/base/evas3d";
- inherit: "elm/photocam/base/evas3d";
-}
-}
diff --git a/src/examples/elementary/evas3d_object_on_button_example.c b/src/examples/elementary/evas3d_object_on_button_example.c
deleted file mode 100644
index fe458eb454..0000000000
--- a/src/examples/elementary/evas3d_object_on_button_example.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * This example shows the mechanism of elementary widget adding (button) to the 3d scene object (cube) and
- * illustrates the work of callback of event from mouse.
- *
- * Compile with:
- * gcc -o evas3d_object_on_button_example evas3d_object_on_button_example.c -g `pkg-config --libs --cflags evas ecore eo elementary`
- */
-#ifndef EFL_BETA_API_SUPPORT
-# define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Elementary.h>
-
-#define WIDTH 400
-#define HEIGHT 400
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
-
- Eo *camera;
- Eo *light;
- Eo *mesh;
- Eo *material;
- Eo *texture;
-} Scene_Data;
-
-Evas_Object *win = NULL;
-static Evas *evas = NULL;
-static Eo *image = NULL;
-static Eo *btn = NULL;
-static float d_angle = 0.5;
-
-static const float cube_vertices[] =
-{
- /* Front */
- -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Back */
- 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Left */
- -1.0, 1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Right */
- 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Top */
- -1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Bottom */
- 1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0,
-};
-
-static const unsigned short cube_indices[] =
-{
- /* Front */
- 0, 1, 2, 2, 1, 3,
-
- /* Back */
- 4, 5, 6, 6, 5, 7,
-
- /* Left */
- 8, 9, 10, 10, 9, 11,
-
- /* Right */
- 12, 13, 14, 14, 13, 15,
-
- /* Top */
- 16, 17, 18, 18, 17, 19,
-
- /* Bottom */
- 20, 21, 22, 22, 21, 23
-};
-
-static void
-_stop_scene(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Evas_Real s, t;
- Scene_Data *d = (Scene_Data *)data;
-
- if (ev->button == 1)
- {
- Eina_Bool ret;
-
- evas_canvas3d_scene_color_pick_enable_set(d->scene, EINA_TRUE);
- ret = evas_canvas3d_scene_pick(d->scene, ev->canvas.x, ev->canvas.y, &n, &m, &s, &t);
- if (ret)
- {
- d_angle = 0.0;
- elm_object_signal_emit(btn, "mouse,down,1", "event");
- evas_canvas3d_node_position_set(d->mesh_node, 0.0, 0.0, -0.2);
- }
- }
-}
-
-static void
-_play_scene(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- Scene_Data *d = (Scene_Data *)data;
-
- d_angle = 0.5;
- elm_object_signal_emit(btn, "mouse,up,1", "event");
- evas_canvas3d_node_position_set(d->mesh_node, 0.0, 0.0, 0.0);
-}
-
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += d_angle;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 20.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 15.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, -1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-static void
-_mesh_setup(Scene_Data *data)
-{
- /* Setup material and texture as widget button. */
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- data->texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
-
- evas_canvas3d_texture_source_set(data->texture, btn);
- evas_canvas3d_texture_source_visible_set(data->texture, EINA_FALSE);
-
- evas_canvas3d_material_texture_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- /* Setup mesh. */
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_vertex_count_set(data->mesh, 24);
- evas_canvas3d_mesh_frame_add(data->mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 12 * sizeof(float), &cube_vertices[ 0]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 12 * sizeof(float), &cube_vertices[ 3]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 12 * sizeof(float), &cube_vertices[ 6]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 12 * sizeof(float), &cube_vertices[10]);
- evas_canvas3d_mesh_index_data_set(data->mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &cube_indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 0, data->material);
- evas_canvas3d_mesh_color_pick_enable_set(data->mesh, EINA_TRUE);
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
-{
- Scene_Data data;
-
- elm_config_accel_preference_set("3d");
- elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
-
- win = elm_win_util_standard_add("evas3d-object-button", "A button on the 3d object");
- elm_win_autodel_set(win, EINA_TRUE);
-
- evas = evas_object_evas_get(win);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- btn = elm_button_add(win);
- evas_object_resize(btn, (WIDTH * 2) / 3, (HEIGHT * 2) / 3);
- elm_object_text_set(btn, "3D Button");
- elm_object_scale_set(btn, 3.0);
- evas_object_show(btn);
-
- /* Set the image object as render target for 3D scene. */
- _scene_setup(&data);
- evas_object_focus_set(image, EINA_TRUE);
- efl_canvas_scene3d_set(image, data.scene);
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _stop_scene, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_UP, _play_scene, &data);
-
- /* Add animation timer callback. */
- ecore_timer_add(0.016, _animate_scene, &data);
-
- evas_object_resize(win, WIDTH, HEIGHT);
- evas_object_show(win);
-
- /* Enter main loop. */
- elm_run();
-
- return 0;
-}
-ELM_MAIN()
diff --git a/src/examples/elementary/evas3d_scene_on_button_example.c b/src/examples/elementary/evas3d_scene_on_button_example.c
deleted file mode 100644
index 267e45b7e9..0000000000
--- a/src/examples/elementary/evas3d_scene_on_button_example.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
-* This example shows the mechanism of scene object adding (3D cube) to the widget button and
-* illustrates the work of callback of event from mouse.
-*
-* Compile with:
-* gcc -o evas3d_scene_on_button_example evas3d_scene_on_button_example.c -g `pkg-config --libs --cflags evas ecore eo elementary`
-*/
-#ifndef EFL_BETA_API_SUPPORT
-# define EFL_BETA_API_SUPPORT
-#endif
-
-#define WIDTH 500
-#define HEIGHT 500
-#define d_w 100
-#define d_h 100
-
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Elementary.h>
-#include <stdio.h>
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
-
- Eo *camera;
- Eo *light;
- Eo *mesh;
- Eo *material;
-} Scene_Data;
-
-Evas_Object *win = NULL;
-Evas_Object *btn = NULL;
-float d_angle = 0.5;
-static Evas *evas = NULL;
-static Eo *image = NULL;
-
-static const float cube_vertices[] =
-{
- /* Front */
- -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Back */
- 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Left */
- -1.0, 1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Right */
- 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Top */
- -1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Bottom */
- 1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0,
-};
-
-static const unsigned short cube_indices[] =
-{
- /* Front */
- 0, 1, 2, 2, 1, 3,
-
- /* Back */
- 4, 5, 6, 6, 5, 7,
-
- /* Left */
- 8, 9, 10, 10, 9, 11,
-
- /* Right */
- 12, 13, 14, 14, 13, 15,
-
- /* Top */
- 16, 17, 18, 18, 17, 19,
-
- /* Bottom */
- 20, 21, 22, 22, 21, 23
-};
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += d_angle;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 60.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-static void
-_mesh_setup(Scene_Data *data)
-{
- /* Setup material. */
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- /* Setup mesh. */
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_vertex_count_set(data->mesh, 24);
- evas_canvas3d_mesh_frame_add(data->mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 12 * sizeof(float), &cube_vertices[ 0]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 12 * sizeof(float), &cube_vertices[ 3]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 12 * sizeof(float), &cube_vertices[ 6]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 12 * sizeof(float), &cube_vertices[10]);
- evas_canvas3d_mesh_index_data_set(data->mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &cube_indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 0, data->material);
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH - d_w, HEIGHT - d_h);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-static void
-_stop_scene(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Scene_Data *d = (Scene_Data *)data;
-
- evas_canvas3d_node_scale_set(d->mesh_node, 0.97, 0.97, 0.97);
-
- if (ev->button == 1)
- {
- if (evas_canvas3d_scene_exist(d->scene, (ev->canvas.x - (d_w / 2)), (ev->canvas.y - (d_h / 2)), d->mesh_node))
- {
- d_angle = 0;
- }
- }
-}
-
-static void
-_play_scene(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- Scene_Data *d = (Scene_Data *)data;
-
- d_angle = 0.5;
-
- evas_canvas3d_node_scale_set(d->mesh_node, 1.0, 1.0, 1.0);
-}
-
-EAPI_MAIN int
-elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
-{
- Scene_Data data;
-
- elm_config_accel_preference_set("3d");
- elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
-
- win = elm_win_util_standard_add("evas3d-scene-button", "3d object on the button");
- if (!win) return 0;
- elm_win_autodel_set(win, EINA_TRUE);
-
- evas = evas_object_evas_get(win);
- if (!evas) return 0;
-
- _scene_setup(&data);
-
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Setup scene to the widget button. */
- btn = elm_button_add(win);
- elm_object_content_set(btn, image);
- evas_object_resize(btn, (WIDTH - d_w), (HEIGHT - d_h));
- evas_object_move(btn, (d_w / 2), (d_h / 2));
- evas_object_show(btn);
-
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_DOWN, _stop_scene,
- &data);
- evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_UP, _play_scene,
- &data);
-
- /* Add animation timer callback. */
- ecore_timer_add(0.016, _animate_scene, &data);
-
- evas_object_resize(win, WIDTH, HEIGHT);
- evas_object_show(win);
-
- /* Enter main loop. */
- elm_run();
-
- return 0;
-}
-ELM_MAIN()
diff --git a/src/examples/elementary/filter_example.c b/src/examples/elementary/filter_example.c
index cc05b7d36f..29b86f0e5f 100644
--- a/src/examples/elementary/filter_example.c
+++ b/src/examples/elementary/filter_example.c
@@ -1,7 +1,7 @@
/**
* gcc -g filter_example.c -o filter_example `pkg-config --cflags --libs elementary`
*/
-#define EFL_BETA_API_SUPPORT 1
+#define EFL_BETA_API_SUPPORT 1
#include <Elementary.h>
typedef struct _Filter
diff --git a/src/examples/elementary/gengrid_example.c b/src/examples/elementary/gengrid_example.c
index b342f6c60e..37f2805ee5 100644
--- a/src/examples/elementary/gengrid_example.c
+++ b/src/examples/elementary/gengrid_example.c
@@ -418,8 +418,6 @@ elm_main(int argc EINA_UNUSED,
Eina_Bool bounce;
double h, v;
- srand(time(NULL));
-
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_app_info_set(elm_main, "elementary", "images");
diff --git a/src/examples/elementary/image_webp_example_01.c b/src/examples/elementary/image_webp_example_01.c
new file mode 100644
index 0000000000..24bc79ae72
--- /dev/null
+++ b/src/examples/elementary/image_webp_example_01.c
@@ -0,0 +1,38 @@
+//Compile with:
+//gcc -g image_webp_example_01.c -o image_webp_example_01 `pkg-config --cflags --libs elementary`
+
+#include <Elementary.h>
+
+int
+elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
+{
+ Evas_Object *win, *image;
+ char buf[PATH_MAX];
+
+ elm_app_info_set(elm_main, "elementary", "images/static_webp_image.webp");
+ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+ win = elm_win_util_standard_add("WebP Image", "WebP Image");
+ elm_win_autodel_set(win, EINA_TRUE);
+
+ snprintf(buf, sizeof(buf), "%s/images/static_webp_image.webp", elm_app_data_dir_get());
+
+ image = elm_image_add(win);
+ if (!elm_image_file_set(image, buf, NULL))
+ {
+ printf("error: could not load image \"%s\"\n", buf);
+ return -1;
+ }
+
+ evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, image);
+ evas_object_show(image);
+
+ evas_object_resize(win, 320, 320);
+ evas_object_show(win);
+
+ elm_run();
+
+ return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/elementary/image_webp_example_02.c b/src/examples/elementary/image_webp_example_02.c
new file mode 100644
index 0000000000..3bfaf4a71c
--- /dev/null
+++ b/src/examples/elementary/image_webp_example_02.c
@@ -0,0 +1,41 @@
+//Compile with:
+//gcc -g image_webp_example_02.c -o image_webp_example_02 `pkg-config --cflags --libs elementary`
+
+#include <Elementary.h>
+
+int
+elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
+{
+ Evas_Object *win, *image;
+ char buf[PATH_MAX];
+
+ elm_app_info_set(elm_main, "elementary", "images/animated_webp_image.webp");
+ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+ win = elm_win_util_standard_add("WebP Image", "WebP Image");
+ elm_win_autodel_set(win, EINA_TRUE);
+
+ snprintf(buf, sizeof(buf), "%s/images/animated_webp_image.webp", elm_app_data_dir_get());
+
+ image = elm_image_add(win);
+ if (!elm_image_file_set(image, buf, NULL))
+ {
+ printf("error: could not load image \"%s\"\n", buf);
+ return -1;
+ }
+
+ elm_image_animated_set(image, EINA_TRUE);
+ elm_image_animated_play_set(image, EINA_TRUE);
+
+ evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, image);
+ evas_object_show(image);
+
+ evas_object_resize(win, 320, 320);
+ evas_object_show(win);
+
+ elm_run();
+
+ return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/elementary/menu_cxx_example_01.cc b/src/examples/elementary/menu_cxx_example_01.cc
index dfc717ec81..f209f2f5a4 100644
--- a/src/examples/elementary/menu_cxx_example_01.cc
+++ b/src/examples/elementary/menu_cxx_example_01.cc
@@ -15,8 +15,6 @@
*/
#include <Efl_Ui.hh>
-#warning This example can not be implemented with EO APIs... FIXME
-
EAPI_MAIN int
elm_main (int argc EINA_UNUSED, char *argv[] EINA_UNUSED)
{
diff --git a/src/examples/elementary/meson.build b/src/examples/elementary/meson.build
index e88ddfe567..7abffa8a2f 100644
--- a/src/examples/elementary/meson.build
+++ b/src/examples/elementary/meson.build
@@ -46,6 +46,8 @@ examples = [
'hoversel_example_01',
'icon_example_01',
'image_example_01',
+ 'image_webp_example_01',
+ 'image_webp_example_02',
'index_example_01',
'index_example_02',
'inwin_example',
@@ -100,9 +102,6 @@ examples = [
'web_example_02',
'win_example',
'track_example_01',
- 'evas3d_object_on_button_example',
- 'evas3d_scene_on_button_example',
- 'evas3d_map_example',
'efl_thread_1',
'efl_thread_2',
'efl_thread_3',
@@ -120,11 +119,12 @@ examples = [
'efl_ui_slideshow_example',
'efl_ui_radio_example_01',
'efl_ui_grid_example_1',
- 'efl_ui_grid_view_example_1'
+ 'efl_ui_grid_view_example_1',
+ 'efl_canvas_textblock_obstacles_example'
]
foreach example : examples
- executable(example, example + '.c', dependencies: [elementary, ecore, eio])
+ executable(example, example + '.c', dependencies: [elementary, ecore, eio, m])
endforeach
if get_option('bindings').contains('cxx')
cxx_examples = [
@@ -193,6 +193,3 @@ executable('codegen_example',
dependencies: [elementary],
include_directories : include_directories('..')
)
-
-subdir('sphere_hunter')
-subdir('performance')
diff --git a/src/examples/elementary/performance/HowTo b/src/examples/elementary/performance/HowTo
deleted file mode 100644
index 8417fa0f34..0000000000
--- a/src/examples/elementary/performance/HowTo
+++ /dev/null
@@ -1,13 +0,0 @@
-It is application for quick checking changes in Evas 3D.
-
-Dependences (tested on):
- efl >= 1.13.0 elementary >= 1.13.0
- xserver-xorg-video-nouveau driver
- OpenGL rendering acceleration for elemenatry
-Main features:
- effects shadow, fog, colorpick
- fps (Be careful, don't use changing speed animation and stop animation during measuring).
- load 3D models
- navigation panel (by right click)
-
-Warnings: Until 3D destructor work properly, you can have lags after set a lot of 3D models or spheres with precision >=50
diff --git a/src/examples/elementary/performance/Tools.h b/src/examples/elementary/performance/Tools.h
deleted file mode 100644
index c3cf8ca3a7..0000000000
--- a/src/examples/elementary/performance/Tools.h
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*initialization navigation panel*/
-Evas_Object *
-init_panel_camera_light(Evas_Object *win, Eo* camera_node, Eo* light_node, double posX, double posY);
-/*free resources*/
-void
-panel_camera_light_fini(Evas_Object *navigation);
-/*initialization graphical objects*/
-Evas_Object *
-init_graphical_window(Evas_Object *image);
-/*Set step of range*/
-Eina_Bool
-panel_camera_coord_step_set(Evas_Object *navigation, int step);
-Eina_Bool
-panel_camera_angle_step_set(Evas_Object *navigation, int step);
-Eina_Bool
-panel_light_coord_step_set(Evas_Object *navigation, int step);
-Eina_Bool
-panel_light_angle_step_set(Evas_Object *navigation, int step);
diff --git a/src/examples/elementary/performance/background.png b/src/examples/elementary/performance/background.png
deleted file mode 100644
index 190a74f631..0000000000
--- a/src/examples/elementary/performance/background.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/elementary/performance/camera_light.c b/src/examples/elementary/performance/camera_light.c
deleted file mode 100644
index 98be8c24ef..0000000000
--- a/src/examples/elementary/performance/camera_light.c
+++ /dev/null
@@ -1,354 +0,0 @@
-#include "tools_private.h"
-
-Eina_Bool _alloc_memory(Axis_Key **ckey, Panel_Struct **pobj, Axis_Key **lkey)
-{
- *ckey = calloc(1, sizeof(Axis_Key));
- *pobj = calloc(1, sizeof(Panel_Struct));
- *lkey = calloc(1, sizeof(Axis_Key));
-
- if (!(*ckey) || !(*pobj) || !(*lkey))
- {
- printf("Not enough memory - at %s line %d\n", __FILE__, __LINE__);
- free(*ckey);
- free(*pobj);
- free(*lkey);
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-Evas_Object *
-init_panel_camera_light(Evas_Object *win, Eo *camera_node, Eo *light_node, double posX, double posY)
-{
- Evas_Object *nnavig = NULL, *bx_navigall = NULL;
- Evas_Object *bx_navigcamup = NULL, *bx_navigcamlow = NULL, *bx_navigligthup = NULL, *bx_navigligthlow = NULL;
- Evas_Object *spX = NULL, *spY = NULL, *spZ = NULL;
- Evas_Object *spangle = NULL, *spaX = NULL, *spaY = NULL, *spaZ = NULL;
- Evas_Object *splX = NULL, *splY = NULL, *splZ = NULL;
- Evas_Object *splangle = NULL, *splaX = NULL, *splaY = NULL, *splaZ = NULL;
- Evas_Object *separator = NULL;
- Axis_Key *camera_xyz = NULL, *light_xyz = NULL;
- Panel_Struct *pobject = NULL;
- Evas_Real px = 0, py = 0, pz = 0;
-
- if (ELM_WIN_UNKNOWN == elm_win_type_get(win))
- {
- printf("Not appropriate parent object - at %s line %d\n", __FILE__, __LINE__);
- return NULL;
- }
-
- if (!_alloc_memory(&camera_xyz, &pobject, &light_xyz)) return NULL;
-
- /*Navigation panel layout*/
- bx_navigall = elm_box_add(win);
- elm_box_homogeneous_set(bx_navigall, EINA_TRUE);
- evas_object_show(bx_navigall);
-
- bx_navigcamup = elm_box_add(win);
- elm_box_horizontal_set(bx_navigcamup, EINA_TRUE);
- elm_box_homogeneous_set(bx_navigcamup, EINA_TRUE);
- elm_box_pack_end(bx_navigall, bx_navigcamup);
- evas_object_show(bx_navigcamup);
- bx_navigcamlow = elm_box_add(win);
- elm_box_horizontal_set(bx_navigcamlow, EINA_TRUE);
- elm_box_homogeneous_set(bx_navigcamlow, EINA_TRUE);
- elm_box_pack_end(bx_navigall, bx_navigcamlow);
- evas_object_show(bx_navigcamlow);
-
- separator = elm_separator_add(win);
- elm_separator_horizontal_set(separator, EINA_TRUE);
- elm_box_pack_end(bx_navigall, separator);
- evas_object_show(separator);
-
- bx_navigligthup = elm_box_add(win);
- elm_box_horizontal_set(bx_navigligthup, EINA_TRUE);
- elm_box_homogeneous_set(bx_navigligthup, EINA_TRUE);
- elm_box_pack_end(bx_navigall, bx_navigligthup);
- evas_object_show(bx_navigligthup);
- bx_navigligthlow = elm_box_add(win);
- elm_box_horizontal_set(bx_navigligthlow, EINA_TRUE);
- elm_box_homogeneous_set(bx_navigligthlow, EINA_TRUE);
- elm_box_pack_end(bx_navigall, bx_navigligthlow);
- evas_object_show(bx_navigligthlow);
-
- /*Set UI panel for changing camera and light*/
- /*Init sp camera by default*/
- spX = elm_spinner_add(win);
- elm_spinner_editable_set(spX, EINA_TRUE);
- elm_spinner_min_max_set(spX, -COORDRANGE, COORDRANGE);
- elm_spinner_label_format_set(spX, "camera X: %1.0f");
- elm_spinner_step_set(spX, 1.0);
- pobject->cspX = spX;
- elm_box_pack_end(bx_navigcamup, spX);
- evas_object_show(spX);
- evas_object_smart_callback_add(spX, "changed", _camera_light_changeX_cb, camera_node);
-
- spY = elm_spinner_add(win);
- elm_spinner_editable_set(spY, EINA_TRUE);
- elm_spinner_min_max_set(spY, -COORDRANGE, COORDRANGE);
- elm_spinner_label_format_set(spY, "camera Y: %1.0f");
- elm_spinner_step_set(spY, 1.0);
- pobject->cspY = spY;
- elm_box_pack_end(bx_navigcamup, spY);
- evas_object_show(spY);
- evas_object_smart_callback_add(spY, "changed", _camera_light_changeY_cb, camera_node);
-
- spZ = elm_spinner_add(win);
- elm_spinner_editable_set(spZ, EINA_TRUE);
- elm_spinner_min_max_set(spZ, -COORDRANGE, COORDRANGE);
- elm_spinner_label_format_set(spZ, "camera Z: %1.0f");
- elm_spinner_step_set(spY, 1.0);
- pobject->cspZ = spZ;
- elm_box_pack_end(bx_navigcamup, spZ);
- evas_object_show(spZ);
- evas_object_smart_callback_add(spZ, "changed", _camera_light_changeZ_cb, camera_node);
-
- evas_canvas3d_node_position_get(camera_node, EVAS_CANVAS3D_SPACE_PARENT, &px, &py, &pz);
- elm_spinner_value_set(spX, px);
- elm_spinner_value_set(spY, py);
- elm_spinner_value_set(spZ, pz);
-
- spangle = elm_spinner_add(win);
- elm_spinner_editable_set(spangle, EINA_TRUE);
- elm_spinner_min_max_set(spangle, 0.0, ANGLERANGE);
- elm_spinner_label_format_set(spangle, "angle: %1.0f");
- elm_spinner_step_set(spangle, 1.0);
- pobject->cspangle = spangle;
- evas_object_data_set(spangle, axiskeys, camera_xyz);
- elm_box_pack_end(bx_navigcamlow, spangle);
- elm_spinner_value_set(spangle, 0.0);
- evas_object_show(spangle);
- evas_object_smart_callback_add(spangle, "changed", _camera_light_angle_change_cb, camera_node);
-
- spaX = elm_spinner_add(win);
- elm_spinner_min_max_set(spaX, 0.0, 1.0);
- elm_spinner_label_format_set(spaX, "axisX: %1.0f");
- elm_spinner_step_set(spaX, 1.0);
- elm_box_pack_end(bx_navigcamlow, spaX);
- evas_object_show(spaX);
- evas_object_smart_callback_add(spaX, "changed", _camera_light_axisX_change_cb, spangle);
-
- spaY = elm_spinner_add(win);
- elm_spinner_min_max_set(spaY, 0.0, 1.0);
- elm_spinner_label_format_set(spaY, "axisY: %1.0f");
- elm_spinner_step_set(spaY, 1.0);
- elm_box_pack_end(bx_navigcamlow, spaY);
- evas_object_show(spaY);
- evas_object_smart_callback_add(spaY, "changed", _camera_light_axisY_change_cb, spangle);
-
- spaZ = elm_spinner_add(win);
- elm_spinner_min_max_set(spaZ, 0.0, 1.0);
- elm_spinner_label_format_set(spaZ, "axisZ: %1.0f");
- elm_spinner_step_set(spaZ, 1.0);
- elm_box_pack_end(bx_navigcamlow, spaZ);
- evas_object_show(spaZ);
- evas_object_smart_callback_add(spaZ, "changed", _camera_light_axisZ_change_cb, spangle);
-
- /*Init spl light by default*/
- splX = elm_spinner_add(win);
- elm_spinner_editable_set(splX, EINA_TRUE);
- elm_spinner_min_max_set(splX, -COORDRANGE, COORDRANGE);
- elm_spinner_label_format_set(splX, "light X: %1.0f");
- elm_spinner_step_set(splX, 1.0);
- pobject->lspX = splX;
- elm_box_pack_end(bx_navigligthup, splX);
- evas_object_show(splX);
- evas_object_smart_callback_add(splX, "changed", _camera_light_changeX_cb, light_node);
-
- splY = elm_spinner_add(win);
- elm_spinner_editable_set(splY, EINA_TRUE);
- elm_spinner_min_max_set(splY, -COORDRANGE, COORDRANGE);
- elm_spinner_label_format_set(splY, "light Y: %1.0f");
- elm_spinner_step_set(splY, 1.0);
- pobject->lspY = splY;
- elm_box_pack_end(bx_navigligthup, splY);
- evas_object_show(splY);
- evas_object_smart_callback_add(splY, "changed", _camera_light_changeY_cb, light_node);
-
- splZ = elm_spinner_add(win);
- elm_spinner_editable_set(splZ, EINA_TRUE);
- elm_spinner_min_max_set(splZ, -COORDRANGE, COORDRANGE);
- elm_spinner_label_format_set(splZ, "light Z: %1.0f");
- elm_spinner_step_set(splY, 1.0);
- pobject->lspZ = splZ;
- elm_box_pack_end(bx_navigligthup, splZ);
- evas_object_show(splZ);
- evas_object_smart_callback_add(splZ, "changed", _camera_light_changeZ_cb, light_node);
-
- evas_canvas3d_node_position_get(light_node, EVAS_CANVAS3D_SPACE_PARENT, &px, &py, &pz);
- elm_spinner_value_set(splX, px);
- elm_spinner_value_set(splY, py);
- elm_spinner_value_set(splZ, pz);
-
- splangle = elm_spinner_add(win);
- elm_spinner_editable_set(splangle, EINA_TRUE);
- elm_spinner_min_max_set(splangle, 0.0, ANGLERANGE);
- elm_spinner_label_format_set(splangle, "angle: %1.0f");
- elm_spinner_step_set(splangle, 1.0);
- pobject->lspangle = splangle;
- evas_object_data_set(splangle, axiskeys, light_xyz);
- elm_box_pack_end(bx_navigligthlow, splangle);
- elm_spinner_value_set(splangle, 0.0);
- evas_object_show(splangle);
- evas_object_smart_callback_add(splangle, "changed", _camera_light_angle_change_cb, light_node);
-
- splaX = elm_spinner_add(win);
- elm_spinner_min_max_set(splaX, 0.0, 1.0);
- elm_spinner_label_format_set(splaX, "axisX: %1.0f");
- elm_spinner_step_set(splaX, 1.0);
- elm_box_pack_end(bx_navigligthlow, splaX);
- evas_object_show(splaX);
- evas_object_smart_callback_add(splaX, "changed", _camera_light_axisX_change_cb, splangle);
-
- splaY = elm_spinner_add(win);
- elm_spinner_min_max_set(splaY, 0.0, 1.0);
- elm_spinner_label_format_set(splaY, "axisY: %1.0f");
- elm_spinner_step_set(splaY, 1.0);
- elm_box_pack_end(bx_navigligthlow, splaY);
- evas_object_show(splaY);
- evas_object_smart_callback_add(splaY, "changed", _camera_light_axisY_change_cb, splangle);
-
- splaZ = elm_spinner_add(win);
- elm_spinner_min_max_set(splaZ, 0.0, 1.0);
- elm_spinner_label_format_set(splaZ, "axisZ: %1.0f");
- elm_spinner_step_set(splaZ, 1.0);
- elm_box_pack_end(bx_navigligthlow, splaZ);
- evas_object_show(splaZ);
- evas_object_smart_callback_add(spaZ, "changed", _camera_light_axisZ_change_cb, splangle);
-
- nnavig = elm_notify_add(win);
- elm_object_content_set(nnavig, bx_navigall);
- elm_notify_align_set(nnavig, posX, posY);
- evas_object_data_set(nnavig, pb, pobject);
-
- return nnavig;
-}
-
-static void
-_camera_light_changeX_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Evas_Real x, y, z;
-
- if ((Eo*)data)
- {
- evas_canvas3d_node_position_get((Eo*)data, EVAS_CANVAS3D_SPACE_PARENT, NULL, &y, &z);
- x = elm_spinner_value_get(obj);
- evas_canvas3d_node_position_set((Eo*)data, x, y, z);
- }
-}
-static void
-_camera_light_changeY_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Evas_Real x, y, z;
-
- if ((Eo*)data)
- {
- evas_canvas3d_node_position_get((Eo*)data, EVAS_CANVAS3D_SPACE_PARENT, &x, NULL, &z);
- y = elm_spinner_value_get(obj);
- evas_canvas3d_node_position_set((Eo*)data, x, y, z);
- }
-}
-static void
-_camera_light_changeZ_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Evas_Real x, y, z;
-
- if ((Eo*)data)
- {
- evas_canvas3d_node_position_get((Eo*)data, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, NULL);
- z = elm_spinner_value_get(obj);
- evas_canvas3d_node_position_set((Eo*)data, x, y, z);
- }
-}
-static void
-_camera_light_angle_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Axis_Key *key = evas_object_data_get(obj, axiskeys);
- Evas_Real aw = 0;
- if ((Eo*)data)
- {
- aw = elm_spinner_value_get(obj);
- aw = cos(aw * M_PI / 360.0);
- evas_canvas3d_node_orientation_set(((Eo*)data), key->x, key->y, key->z, aw);
- }
-}
-static void
-_camera_light_axisX_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Evas_Object *fsa = (Evas_Object*)data;
- Axis_Key *key = evas_object_data_get(fsa, axiskeys);
- if (key)
- key->x = elm_spinner_value_get(obj);
-}
-static void
-_camera_light_axisY_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Evas_Object *fsa = (Evas_Object*)data;
- Axis_Key *key = evas_object_data_get(fsa, axiskeys);
- if (key)
- key->y = elm_spinner_value_get(obj);
-}
-static void
-_camera_light_axisZ_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Evas_Object *fsa = (Evas_Object*)data;
- Axis_Key *key = evas_object_data_get(fsa, axiskeys);
- if (key)
- key->z = elm_spinner_value_get(obj);
-}
-
-Eina_Bool
-panel_camera_coord_step_set(Evas_Object *navigation, int step)
-{
- Panel_Struct *pobject = NULL;
-
- pobject = evas_object_data_get(navigation, pb);
- elm_spinner_step_set(pobject->cspX, step);
- elm_spinner_step_set(pobject->cspY, step);
- elm_spinner_step_set(pobject->cspZ, step);
- return EINA_TRUE;
-}
-
-Eina_Bool
-panel_camera_angle_step_set(Evas_Object *navigation, int step)
-{
- Panel_Struct *pobject = NULL;
-
- pobject = evas_object_data_get(navigation, pb);
- elm_spinner_step_set(pobject->cspangle, step);
- return EINA_TRUE;
-}
-
-Eina_Bool
-panel_light_coord_step_set(Evas_Object *navigation, int step)
-{
- Panel_Struct *pobject = NULL;
-
- pobject = evas_object_data_get(navigation, pb);
- elm_spinner_step_set(pobject->lspX, step);
- elm_spinner_step_set(pobject->lspY, step);
- elm_spinner_step_set(pobject->lspZ, step);
- return EINA_TRUE;
-}
-
-Eina_Bool
-panel_light_angle_step_set(Evas_Object *navigation, int step)
-{
- Panel_Struct *pobject = NULL;
-
- pobject = evas_object_data_get(navigation, pb);
- elm_spinner_step_set(pobject->lspangle, step);
- return EINA_TRUE;
-}
-
-void panel_camera_light_fini(Evas_Object *navigation)
-{
- Panel_Struct *pobject = evas_object_data_get(navigation, pb);
- Axis_Key *ckey = evas_object_data_get(pobject->cspangle, axiskeys);
- Axis_Key *lkey = evas_object_data_get(pobject->lspangle, axiskeys);
- free(pobject);
- free(ckey);
- free(lkey);
-}
-
diff --git a/src/examples/elementary/performance/graphical.c b/src/examples/elementary/performance/graphical.c
deleted file mode 100644
index d68d865a80..0000000000
--- a/src/examples/elementary/performance/graphical.c
+++ /dev/null
@@ -1,622 +0,0 @@
-#ifndef EFL_BETA_API_SUPPORT
-# define EFL_BETA_API_SUPPORT
-#endif
-
-#include <math.h>
-#include <stdlib.h>
-#include <time.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Eina.h>
-
-#include "graphical_struct.h"
-
-#define FOG_COLOR 0.5, 0.5, 0.5
-#define FOG_FACTOR 0.1
-
-static inline vec3
-_normalize(const vec3 *v)
-{
- double l = sqrt(v->x * v->x + v->y * v->y + v->z * v->z);
- vec3 vec;
-
- vec.x = v->x / l;
- vec.y = v->y / l;
- vec.z = v->z / l;
-
- return vec;
-}
-static void
-_sphere_count(int prec, float type_init)
-{
- int i, j;
-
- globalGraphical.vertex_count = (prec + 1) * (prec + 1);
-
- /* Allocate buffer. */
- if (globalGraphical.places) free(globalGraphical.places);
- globalGraphical.places = malloc(sizeof(place) * globalGraphical.vertex_count);
-
- for (i = 0; i <= prec; i++)
- {
- double lati = M_PI * (type_init + (double)i * (1 - 2 * type_init) / (double)prec);
- double y = cos(lati);
- double r = fabs(sin(lati));
-
- for (j = 0; j <= prec; j++)
- {
- double longi = (M_PI * 2.0 * j) / (prec + 1);
- place *v = &globalGraphical.places[i * (prec + 1) + j];
- v->position.x = r * sin(longi);
- v->position.y = y;
- v->position.z = r * cos(longi);
- }
- }
-}
-static void
-_sphere_init(int prec)
-{
- int i, j;
- unsigned short *index;
-
- globalGraphical.vertex_count = (prec + 1) * (prec + 1);
- globalGraphical.index_count = prec * prec * 6;
-
- /* Allocate buffer. */
- if (globalGraphical.vertices) free(globalGraphical.vertices);
- if (globalGraphical.indices) free(globalGraphical.indices);
-
- globalGraphical.vertices = malloc(sizeof(vertex) * globalGraphical.vertex_count);
- globalGraphical.indices = malloc(sizeof(unsigned short) * globalGraphical.index_count);
-
- for (i = 0; i <= prec; i++)
- {
- double lati = (M_PI * (double)i) / (double)prec;
- double y = cos(lati);
- double r = fabs(sin(lati));
-
- for (j = 0; j <= prec; j++)
- {
- double longi = (M_PI * 2.0 * j) / prec;
- vertex *v = &globalGraphical.vertices[i * (prec + 1) + j];
-
- if (j == 0 || j == prec) v->position.x = 0.0;
- else v->position.x = r * sin(longi);
-
- v->position.y = y;
-
- if (j == 0 || j == prec) v->position.z = r;
- else v->position.z = r * cos(longi);
-
- v->normal = v->position;
-
- if (v->position.x > 0.0)
- {
- v->tangent.x = -v->normal.y;
- v->tangent.y = v->normal.x;
- v->tangent.z = v->normal.z;
- }
- else
- {
- v->tangent.x = v->normal.y;
- v->tangent.y = -v->normal.x;
- v->tangent.z = v->normal.z;
- }
-
- v->color.x = v->position.x;
- v->color.y = v->position.y;
- v->color.z = v->position.z;
- v->color.w = 1.0;
-
- if (j == prec) v->texcoord.x = 1.0;
- else if (j == 0) v->texcoord.x = 0.0;
- else v->texcoord.x = (double)j / (double)prec;
-
- if (i == prec) v->texcoord.y = 1.0;
- else if (i == 0) v->texcoord.y = 0.0;
- else v->texcoord.y = 1.0 - (double)i / (double)prec;
- }
- }
-
- index = &globalGraphical.indices[0];
-
- for (i = 0; i < prec; i++)
- {
- for (j = 0; j < prec; j++)
- {
- *index++ = i * (prec + 1) + j;
- *index++ = i * (prec + 1) + j + 1;
- *index++ = (i + 1) * (prec + 1) + j;
-
- *index++ = (i + 1) * (prec + 1) + j;
- *index++ = i * (prec + 1) + j + 1;
- *index++ = (i + 1) * (prec + 1) + j + 1;
- }
- }
-
- for (i = 0; i < globalGraphical.index_count; i += 3)
- {
- vertex *v0 = &globalGraphical.vertices[globalGraphical.indices[i + 0]];
- vertex *v1 = &globalGraphical.vertices[globalGraphical.indices[i + 1]];
- vertex *v2 = &globalGraphical.vertices[globalGraphical.indices[i + 2]];
-
- vec3 e1, e2;
- float du1, du2, dv1, dv2, f;
- vec3 tangent;
-
- e1.x = v1->position.x - v0->position.x;
- e1.y = v1->position.y - v0->position.y;
- e1.z = v1->position.z - v0->position.z;
-
- e2.x = v2->position.x - v0->position.x;
- e2.y = v2->position.y - v0->position.y;
- e2.z = v2->position.z - v0->position.z;
-
- du1 = v1->texcoord.x - v0->texcoord.x;
- dv1 = v1->texcoord.y - v0->texcoord.y;
-
- du2 = v2->texcoord.x - v0->texcoord.x;
- dv2 = v2->texcoord.y - v0->texcoord.y;
-
- f = 1.0 / (du1 * dv2 - du2 * dv1);
-
- tangent.x = f * (dv2 * e1.x - dv1 * e2.x);
- tangent.y = f * (dv2 * e1.y - dv1 * e2.y);
- tangent.z = f * (dv2 * e1.z - dv1 * e2.z);
-
- v0->tangent = tangent;
- }
-
- for (i = 0; i <= prec; i++)
- {
- for (j = 0; j <= prec; j++)
- {
- if (j == prec)
- {
- vertex *v = &globalGraphical.vertices[i * (prec + 1) + j];
- v->tangent = globalGraphical.vertices[i * (prec + 1)].tangent;
- }
- }
- }
-}
-/*FIXME Need to be from bounding of root_node*/
-void _init_bounding()
-{
-
- float cube_vertices[] =
- {
- /* Front */
- -50.0, 1.0, 50.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0,
- 50.0, 1.0, 50.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0,
- -50.0, -1.0, 50.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- 50.0, -1.0, 50.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Back */
- 50.0, 1.0, -50.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- -50.0, 1.0, -50.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- 50.0, -1.0, -50.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- -50.0, -1.0, -50.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Left */
- -50.0, 1.0, -50.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- -50.0, 1.0, 50.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- -50.0, -1.0, -50.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- -50.0, -1.0, 50.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Right */
- 50.0, 1.0, 50.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- 50.0, 1.0, -50.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- 50.0, -1.0, 50.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- 50.0, -1.0, -50.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Top */
- -50.0, 1.0, -50.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- 50.0, 1.0, -50.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- -50.0, 1.0, 50.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- 50.0, 1.0, 50.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Bottom */
- 50.0, -1.0, -50.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0,
- -50.0, -1.0, -50.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 50.0, -1.0, 50.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- -50.0, -1.0, 50.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0,
- };
-
- unsigned short cube_indices[] =
- {
- /* Front */
- 0, 1, 2, 2, 1, 3,
-
- /* Back */
- 4, 5, 6, 6, 5, 7,
-
- /* Left */
- 8, 9, 10, 10, 9, 11,
-
- /* Right */
- 12, 13, 14, 14, 13, 15,
-
- /* Top */
- 16, 17, 18, 18, 17, 19,
-
- /* Bottom */
- 20, 21, 22, 22, 21, 23
- };
-
- globalGraphical.material_box = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, globalGraphical.evas);
-
- evas_canvas3d_material_enable_set(globalGraphical.material_box, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(globalGraphical.material_box, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(globalGraphical.material_box, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(globalGraphical.material_box, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(globalGraphical.material_box, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(globalGraphical.material_box, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(globalGraphical.material_box, 100.0);
-
- /* Setup mesh. */
- globalGraphical.mesh_box = efl_add(EVAS_CANVAS3D_MESH_CLASS, globalGraphical.evas);
- evas_canvas3d_mesh_vertex_count_set(globalGraphical.mesh_box, 24);
- evas_canvas3d_mesh_frame_add(globalGraphical.mesh_box, 0);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh_box, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 12 * sizeof(float), &cube_vertices[ 0]);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh_box, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 12 * sizeof(float), &cube_vertices[ 3]);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh_box, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 12 * sizeof(float), &cube_vertices[ 6]);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh_box, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 12 * sizeof(float), &cube_vertices[10]);
- evas_canvas3d_mesh_index_data_copy_set(globalGraphical.mesh_box, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &cube_indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(globalGraphical.mesh_box, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(globalGraphical.mesh_box, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(globalGraphical.mesh_box, 0, globalGraphical.material_box);
-
- globalGraphical.mesh_nodebox =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, globalGraphical.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH), evas_canvas3d_node_position_set(efl_added, 0, -30.0, 0.0));
- evas_canvas3d_node_member_add(globalGraphical.root_node, globalGraphical.mesh_nodebox);
- evas_canvas3d_node_mesh_add(globalGraphical.mesh_nodebox, globalGraphical.mesh_box);
-}
-static void
-_change_scene_setup()
-{
- Eo *node = NULL, *m = NULL;
- Eina_List *l = NULL;
- int i = 0;
- int quantity = (globalGraphical.count + 1) * (globalGraphical.count + 1);
- evas_canvas3d_camera_projection_perspective_set(globalGraphical.camera, globalGraphical.angle, 1.0, 2.0, 1000);
-
- EINA_LIST_FOREACH (globalGraphical.list_nodes, l, node)
- {
- evas_canvas3d_node_member_del(globalGraphical.root_node, node);
- globalGraphical.list_nodes = eina_list_remove(globalGraphical.list_nodes, node);
- /*efl_del(node);Unless evas_canvas3d_destructors work properly*/
- }
- eina_list_free(globalGraphical.list_nodes);
- eina_list_free(l);
-
-
- EINA_LIST_FOREACH (globalGraphical.list_meshes, l, m)
- {
- globalGraphical.list_meshes = eina_list_remove(globalGraphical.list_meshes, m);
- /*efl_del(m); Unless evas_canvas3d_destructors work properly*/
- }
- eina_list_free(globalGraphical.list_meshes);
- eina_list_free(l);
-
- /* Add the mesh with target precision */
- _sphere_init(globalGraphical.precision);
- for (i = 0; i < quantity; i++)
- {
- globalGraphical.mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, globalGraphical.evas);
- if (!globalGraphical.model_path)
- {
- evas_canvas3d_mesh_vertex_count_set(globalGraphical.mesh, globalGraphical.vertex_count);
- evas_canvas3d_mesh_frame_add(globalGraphical.mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, sizeof(vertex), &globalGraphical.vertices[0].position);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, sizeof(vertex), &globalGraphical.vertices[0].normal);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT, sizeof(vertex), &globalGraphical.vertices[0].tangent);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, sizeof(vertex), &globalGraphical.vertices[0].color);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, sizeof(vertex), &globalGraphical.vertices[0].texcoord);
- evas_canvas3d_mesh_index_data_copy_set(globalGraphical.mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, globalGraphical.index_count, &globalGraphical.indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(globalGraphical.mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(globalGraphical.mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- else
- {
- efl_file_simple_load(globalGraphical.mesh, globalGraphical.model_path, NULL);
- evas_canvas3d_mesh_frame_material_set(globalGraphical.mesh, 0, globalGraphical.material);
- evas_canvas3d_mesh_shader_mode_set(globalGraphical.mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
-
- if (globalGraphical.flags.fog_enable)
- {
- evas_canvas3d_mesh_fog_enable_set(globalGraphical.mesh, EINA_TRUE);
- evas_canvas3d_mesh_fog_color_set(globalGraphical.mesh, FOG_COLOR, FOG_FACTOR);
- }
- else
- {
- evas_canvas3d_mesh_fog_enable_set(globalGraphical.mesh, EINA_FALSE);
- }
- if (globalGraphical.flags.colorpick_enable)
- evas_canvas3d_mesh_color_pick_enable_set(globalGraphical.mesh, EINA_TRUE);
- else
- evas_canvas3d_mesh_color_pick_enable_set(globalGraphical.mesh, EINA_FALSE);
-
- if (globalGraphical.flags.blend_enable)
- {
- evas_canvas3d_mesh_blending_enable_set(globalGraphical.mesh, EINA_TRUE);
- evas_canvas3d_mesh_blending_func_set(globalGraphical.mesh, EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA, EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_ALPHA);
- }
- else
- evas_canvas3d_mesh_blending_enable_set(globalGraphical.mesh, EINA_FALSE);
-
- evas_canvas3d_mesh_frame_material_set(globalGraphical.mesh, 0, globalGraphical.material);
- globalGraphical.list_meshes = eina_list_append(globalGraphical.list_meshes, globalGraphical.mesh);
- }
-
- /*Add target count nodes*/
- _sphere_count(globalGraphical.count, 0.2);
- for (i = 0; i < quantity; i++)
- {
- globalGraphical.mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, globalGraphical.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH), evas_canvas3d_node_position_set(efl_added, globalGraphical.places[i].position.x * 20, globalGraphical.places[i].position.y * 20, globalGraphical.places[i].position.z * 20));
- if (globalGraphical.model_path)
- evas_canvas3d_node_scale_set(globalGraphical.mesh_node, 0.2, 0.2, 0.2);
- evas_canvas3d_node_member_add(globalGraphical.root_node, globalGraphical.mesh_node);
- evas_canvas3d_node_mesh_add(globalGraphical.mesh_node, (Eo*)eina_list_nth(globalGraphical.list_meshes, i));
- globalGraphical.list_nodes = eina_list_append(globalGraphical.list_nodes, globalGraphical.mesh_node);
- }
-
-
- if (!globalGraphical.flags.fps_enable)
- ecore_animator_frametime_set(1.0 / (globalGraphical.speed));
- else
- ecore_animator_frametime_set(0.0001);
-
- if (globalGraphical.flags.shadow_enable)
- evas_canvas3d_scene_shadows_enable_set(globalGraphical.scene, EINA_TRUE);
- else
- evas_canvas3d_scene_shadows_enable_set(globalGraphical.scene, EINA_FALSE);
-
- if (globalGraphical.flags.colorpick_enable)
- {
- evas_canvas3d_scene_color_pick_enable_set(globalGraphical.scene, EINA_TRUE);
- }
- else
- evas_canvas3d_scene_color_pick_enable_set(globalGraphical.scene, EINA_FALSE);
-}
-
-static void
-_init_scene(Evas_Object *img)
-{
- int i, x, y, w, h;
- int quantity = (globalGraphical.count + 1) * (globalGraphical.count + 1);
- /*Allocate memory - eina_mempool*/
-
- /* Add a scene object .*/
- globalGraphical.scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, globalGraphical.evas);
-
- /* Add the root node for the scene. */
- globalGraphical.root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, globalGraphical.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- /* Add the camera. */
- globalGraphical.camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, globalGraphical.evas);
- evas_canvas3d_camera_projection_perspective_set(globalGraphical.camera, globalGraphical.angle, 1.0, 2.0, 1000.0);
-
- globalGraphical.camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, globalGraphical.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(globalGraphical.camera_node, globalGraphical.camera);
- evas_canvas3d_node_position_set(globalGraphical.camera_node, 0.0, 0.0, 25.0);
- evas_canvas3d_node_look_at_set(globalGraphical.camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(globalGraphical.root_node, globalGraphical.camera_node);
-
- globalGraphical.light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, globalGraphical.evas);
- evas_canvas3d_light_ambient_set(globalGraphical.light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(globalGraphical.light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(globalGraphical.light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_projection_perspective_set(globalGraphical.light, globalGraphical.angle / 5, 1.0, 1.0, 1000.0);
- evas_canvas3d_light_spot_cutoff_set(globalGraphical.light, globalGraphical.angle / 15);
-
- globalGraphical.light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, globalGraphical.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(globalGraphical.light_node, globalGraphical.light);
- evas_canvas3d_node_position_set(globalGraphical.light_node, 0.0, 100.0, 1.0);
- evas_canvas3d_node_look_at_set(globalGraphical.light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(globalGraphical.root_node, globalGraphical.light_node);
-
-
- globalGraphical.material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, globalGraphical.evas);
- globalGraphical.texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, globalGraphical.evas);
- efl_file_simple_load(globalGraphical.texture, "target_texture.png", NULL);
- evas_canvas3d_texture_filter_set(globalGraphical.texture, EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR, EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR);
- evas_canvas3d_texture_wrap_set(globalGraphical.texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- evas_canvas3d_material_texture_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, globalGraphical.texture);
- evas_canvas3d_material_texture_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, globalGraphical.texture);
- evas_canvas3d_material_enable_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 1.0, 0.2, 0.2, 0.2);
- evas_canvas3d_material_color_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 0.0, 0.0, 0.2);
- evas_canvas3d_material_color_set(globalGraphical.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 0.2);
- /* Add the mesh with target precision */
- _sphere_init(globalGraphical.precision);
-
- for (i = 0; i < quantity; i++)
- {
- globalGraphical.mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, globalGraphical.evas);
- if (!globalGraphical.model_path)
- {
- evas_canvas3d_mesh_vertex_count_set(globalGraphical.mesh, globalGraphical.vertex_count);
- evas_canvas3d_mesh_frame_add(globalGraphical.mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, sizeof(vertex), &globalGraphical.vertices[0].position);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, sizeof(vertex), &globalGraphical.vertices[0].normal);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT, sizeof(vertex), &globalGraphical.vertices[0].tangent);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, sizeof(vertex), &globalGraphical.vertices[0].color);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(globalGraphical.mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, sizeof(vertex), &globalGraphical.vertices[0].texcoord);
- evas_canvas3d_mesh_index_data_copy_set(globalGraphical.mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, globalGraphical.index_count, &globalGraphical.indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(globalGraphical.mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(globalGraphical.mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- else
- {
- efl_file_simple_load(globalGraphical.mesh, globalGraphical.model_path, NULL);
- evas_canvas3d_mesh_frame_material_set(globalGraphical.mesh, 0, globalGraphical.material);
- evas_canvas3d_mesh_shader_mode_set(globalGraphical.mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- evas_canvas3d_mesh_frame_material_set(globalGraphical.mesh, 0, globalGraphical.material);
- globalGraphical.list_meshes = eina_list_append(globalGraphical.list_meshes, globalGraphical.mesh);
- }
-
- /*Add target count meshes*/
- _sphere_count(globalGraphical.count, 0.2);
-
- for (i = 0; i < quantity; i++)
- {
- globalGraphical.mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, globalGraphical.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH), evas_canvas3d_node_position_set(efl_added, globalGraphical.places[i].position.x * 20, globalGraphical.places[i].position.y * 20, globalGraphical.places[i].position.z * 20));
- if (globalGraphical.model_path)
- evas_canvas3d_node_scale_set(globalGraphical.mesh_node, 0.2, 0.2, 0.2);
- evas_canvas3d_node_member_add(globalGraphical.root_node, globalGraphical.mesh_node);
- evas_canvas3d_node_mesh_add(globalGraphical.mesh_node, (Eo*)eina_list_nth(globalGraphical.list_meshes, i));
- globalGraphical.list_nodes = eina_list_append(globalGraphical.list_nodes, globalGraphical.mesh_node);
- }
-
- _init_bounding();
- evas_object_geometry_get(img, &x, &y, &w, &h);
- evas_canvas3d_scene_root_node_set(globalGraphical.scene, globalGraphical.root_node);
- evas_canvas3d_scene_camera_node_set(globalGraphical.scene, globalGraphical.camera_node);
- evas_canvas3d_scene_size_set(globalGraphical.scene, w, h);
-
- ecore_animator_frametime_set(1.0 / (globalGraphical.speed));
-}
-
-static Eina_Bool
-_xml_attr_data(void *data EINA_UNUSED, const char *key, const char *value)
-{
- char *format = NULL, *tmp = NULL, *a = NULL;
- int i;
-
- if (!strcmp("path", key))
- {
- if (!strcmp("none", value))
- {
- globalGraphical.model_path = NULL;
- }
- else
- {
- globalGraphical.model_path = strdup(value);/*Don't forget update UI*/
- tmp = strdup(globalGraphical.model_path);
- a = strrchr(tmp,'.');
- if (!a)
- {
- free(tmp);
- return EINA_FALSE;
- }
- format = malloc(sizeof (char) * (strlen(a) - 1));
- for (i = 0; i <= (int)strlen(a) - 1; i++)
- format[i] = a[i + 1];
- if (strcmp(format, "md2") && strcmp(format, "obj") && strcmp(format, "ply"))
- {
- printf("\nUnsupported fromat file\n");
- globalGraphical.model_path = NULL;
- }
- free(format);
- free(tmp);
- }
- }
- else if (!strcmp("count", key))
- globalGraphical.count = atoi(value);
- else if (!strcmp("speed", key))
- globalGraphical.speed = atoi(value);
- else if (!strcmp("precision", key))
- globalGraphical.precision = atoi(value);
- else if (!strcmp("angle", key))
- globalGraphical.angle = atoi(value);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_xml_get_data(void *data EINA_UNUSED, Eina_Simple_XML_Type type, const char *content,
- unsigned offset EINA_UNUSED, unsigned length)
-{
- char str[512];
- switch (type)
- {
- case EINA_SIMPLE_XML_OPEN:
- {
- if (!strncmp("modelpath", content, strlen("modelpath")))
- {
- const char *tags = eina_simple_xml_tag_attributes_find(content, length);
- eina_simple_xml_attributes_parse(tags, length - (tags - content), _xml_attr_data, str);
- }
- else if (!strncmp("modelcount", content, strlen("modelcount")))
- {
- const char *tags = eina_simple_xml_tag_attributes_find(content, length);
- eina_simple_xml_attributes_parse(tags, length - (tags - content), _xml_attr_data, str);
- }
- else if (!strncmp("animspeed", content, strlen("animspeed")))
- {
- const char *tags = eina_simple_xml_tag_attributes_find(content, length);
- eina_simple_xml_attributes_parse(tags, length - (tags - content), _xml_attr_data, str);
- }
- else if (!strncmp("sphereprecision", content, strlen("sphereprecision")))
- {
- const char *tags = eina_simple_xml_tag_attributes_find(content, length);
- eina_simple_xml_attributes_parse(tags, length - (tags - content), _xml_attr_data, str);
- }
- else if (!strncmp("perspective", content, strlen("perspective")))
- {
- const char *tags = eina_simple_xml_tag_attributes_find(content, length);
- eina_simple_xml_attributes_parse(tags, length - (tags - content), _xml_attr_data, str);
- }
- }
- default:
- break;
- }
-
- return EINA_TRUE;
-}
-
-static void _init_graphical()
-{
- Eina_File *config = NULL;
- char *buffer = NULL;
- config = eina_file_open("initial_config.xml", EINA_FALSE);
- /*Set default values*/
- globalGraphical.count = 1;
- globalGraphical.speed = 10;
- globalGraphical.precision = 100;
- globalGraphical.angle = 120;
- globalGraphical.img = NULL;
- globalGraphical.init_scene = _init_scene;
- globalGraphical.change_scene_setup = _change_scene_setup;
- globalGraphical.flags.shadow_enable = EINA_FALSE;
- globalGraphical.flags.fog_enable = EINA_FALSE;
- globalGraphical.flags.colorpick_enable = EINA_FALSE;
- globalGraphical.flags.blend_enable = EINA_FALSE;
- globalGraphical.flags.fps_enable = EINA_FALSE;
- globalGraphical.model_path = NULL;
-
- if (!config)
- printf("Could not open initial_config.xml, count=4, speed=10, precision=100, perspective=120");
- else
- {
- buffer = (char*)(eina_file_map_all(config, EINA_FILE_RANDOM));
- eina_simple_xml_parse(buffer, eina_file_size_get(config), EINA_TRUE, _xml_get_data, NULL);
- eina_file_close(config);
- }
-}
-Evas_Object *
-init_graphical_window(Evas_Object *img)
-{
- _init_graphical();
- globalGraphical.evas = evas_object_evas_get(img);
- _init_scene(img);
- efl_canvas_scene3d_set(img, globalGraphical.scene);
-
- return img;
-}
-
diff --git a/src/examples/elementary/performance/graphical_struct.h b/src/examples/elementary/performance/graphical_struct.h
deleted file mode 100644
index a38806d94f..0000000000
--- a/src/examples/elementary/performance/graphical_struct.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef GRAPHICAL_STRUCT_H
-#define GRAPHICAL_STRUCT_H
-
-typedef struct _vec4
-{
- float x;
- float y;
- float z;
- float w;
-} vec4;
-
-typedef struct _vec3
-{
- float x;
- float y;
- float z;
-} vec3;
-
-typedef struct _vec2
-{
- float x;
- float y;
-} vec2;
-typedef struct _vertex
-{
- vec3 position;
- vec3 normal;
- vec3 tangent;
- vec4 color;
- vec3 texcoord;
-} vertex;
-
-typedef struct _place
-{
- vec3 position;
-} place;
-
-typedef struct _Flags_Change
-{
- Eina_Bool fog_enable;
- Eina_Bool shadow_enable;
- Eina_Bool colorpick_enable;
- Eina_Bool blend_enable;
- Eina_Bool fps_enable;
-} Changes;
-
-typedef struct _Graphical
-{
- Evas *evas;
- Evas_Object *img;
- Eo *scene;
- Eo *root_node;
- Eo *light_node;
- Eo *light;
- Eo *camera_node;
- Eo *camera;
- Eo *mesh_node;
- Eo *mesh;
- Eo *material;
- Eo *material_box;
- Eo *texture;
- Eo *mesh_box;
- Eo *mesh_nodebox;
- Eo *texture_box;
-
- Eina_List *list_nodes;
- Eina_List *list_meshes;
-
- const char *model_path;
-
- void (*init_scene)();
- void (*change_scene_setup)();
-
- vertex *vertices;
- place *places;
- unsigned short *indices;
- int index_count;
- int vertex_count;
-
- int count;
- int speed;
- int precision;
- int angle;
-
- Changes flags;
-
-} Graphical;
-
-extern Graphical globalGraphical;
-#endif
diff --git a/src/examples/elementary/performance/initial_config.xml b/src/examples/elementary/performance/initial_config.xml
deleted file mode 100644
index b058b60aa8..0000000000
--- a/src/examples/elementary/performance/initial_config.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--Use it for initial loading -->
-<?xml version="1.0" encoding="UTF-8"?>
-<approot>
- <defvalues>
- <modelpath path="none"></modelpath>
- <modelcount count="2"></modelcount>
- <animspeed speed="100"></animspeed>
- <sphereprecision precision="10"></sphereprecision>
- <perspective angle="120"></perspective>
- </defvalues>
-</approot>
diff --git a/src/examples/elementary/performance/layout.edc b/src/examples/elementary/performance/layout.edc
deleted file mode 100644
index 52430d4018..0000000000
--- a/src/examples/elementary/performance/layout.edc
+++ /dev/null
@@ -1,170 +0,0 @@
-collections {
- group { name: "new/layout/0";
- broadcast_signal: 0;
- parts {
- part { name: "area.bg";
- type: SPACER;
- description { state: "default" 0;
- align: 0.0 0.0;
- min: 1000 600;
- }
- }
- part { name: "area.controls";
- type: SPACER;
- description { state: "default" 0;
- align: 0.0 0.0;
- min: 800 110;
- max: -1 110;
- rel1 {
- to: "area.bg";
- }
- rel2 {
- to: "area.bg";
- }
- }
- }
- part { name: "area.content";
- type: SPACER;
- description { state: "default" 0;
- align: 0.0 0.0;
- rel1 {
- to: "area.bg";
- }
- rel2 {
- to: "area.bg";
- }
- }
- }
- part { name: "padding.controls.rel1";
- type: SPACER;
- description { state: "default" 0;
- align: 0 0;
- max: 5 5;
- rel1 {
- to: "area.controls";
- }
- rel2 {
- to: "area.controls";
- }
- }
- }
- part { name: "padding.controls.rel2";
- type: SPACER;
- description { state: "default" 0;
- align: 1 1;
- min: 5 5;
- max: 5 5;
- fixed: 1 1;
- rel1 {
- to: "area.controls";
- }
- rel2 {
- relative: 1 0;
- to: "area.content";
- }
- }
- }
- part { name: "swallow.content";
- type: SWALLOW;
- description { state: "default" 0;
- align: 0 0;
- min: 800 600;
- rel1 {
- to: "area.content";
- }
- rel2 {
- to: "area.content";
- }
- }
- }
- part { name: "swallow.btn.startexit";
- type: SWALLOW;
- description { state: "default" 0;
- align: 0 0;
- min: 800 50;
- max: -1 50;
- fixed: 1 1;
- rel1 {
- relative: 1 1;
- to: "padding.controls.rel1";
- }
- rel2 {
- relative: 0 0;
- offset: 0 0;
- to: "padding.controls.rel2";
- }
- }
- }
- part { name: "swallow.controls.btn";
- type: SWALLOW;
- description { state: "default" 0;
- align: 0 0;
- min: 800 20;
- max: -1 20;
- fixed: 1 1;
- rel1 {
- relative: 0 1;
- to: "padding1";
- }
- rel2 {
- relative: 0 0;
- to: "padding.controls.rel2";
- }
- }
- }
- part { name: "new_features";
- type: SWALLOW;
- description { state: "default" 0;
- align: 0 0;
- min: 800 20;
- max: -1 20;
- fixed: 1 1;
- rel1 {
- relative: 0 1;
- offset: -1 -1;
- to: "padding5";
- }
- rel2 {
- relative: 0 0;
- to: "padding.controls.rel2";
- }
- }
- }
- part { name: "padding1";
- type: SPACER;
- description { state: "default" 0;
- align: 0 0;
- min: 0 5;
- max: -1 5;
- fixed: 1 1;
- rel1 {
- relative: 1 1;
- to_x: "padding.controls.rel1";
- to_y: "swallow.btn.startexit";
- }
- rel2 {
- relative: 0 0;
- to: "padding.controls.rel2";
- }
- }
- }
- part { name: "padding5";
- type: SPACER;
- description { state: "default" 0;
- align: 0 0;
- min: 0 5;
- max: -1 5;
- fixed: 1 1;
- rel1 {
- relative: 0 1;
- to: "swallow.controls.btn";
- }
- rel2 {
- relative: 0 1;
- to: "padding.controls.rel2";
- }
- }
- }
- }
- }
-}
diff --git a/src/examples/elementary/performance/meson.build b/src/examples/elementary/performance/meson.build
deleted file mode 100644
index cd209955a8..0000000000
--- a/src/examples/elementary/performance/meson.build
+++ /dev/null
@@ -1,31 +0,0 @@
-examples = [
- 'performance.c',
- 'camera_light.c',
- 'graphical.c',
-]
-
-edc_files = [
- 'layout.edc'
-]
-
-themes = []
-
-foreach edc_file : edc_files
- themes += custom_target('edje_cc_' + edc_file,
- depends : edje_depends,
- input : edc_file,
- output : '@BASENAME@.edj',
- command : edje_cc_exe + ['-beta',
- '-id', meson.current_source_dir(),
- '-fd', meson.current_source_dir(),
- '-sd', meson.current_source_dir(),
- '-vd', meson.current_source_dir(),
- '-dd', meson.current_source_dir(),
- '-md', meson.current_source_dir(),
- '-td', meson.current_source_dir(),
- '@INPUT@', '@OUTPUT@'],
- )
-endforeach
-
-executable(example, [examples] + themes, dependencies: [elementary, ecore])
-
diff --git a/src/examples/elementary/performance/performance.c b/src/examples/elementary/performance/performance.c
deleted file mode 100644
index 75f330ccc4..0000000000
--- a/src/examples/elementary/performance/performance.c
+++ /dev/null
@@ -1,953 +0,0 @@
-/**
- * Example for testing performance of Evas 3D library
- *
- * Program should be runned with 4 parameters:
- * 1 - count parameter (NP)
- * 2 - speed parameter (SP)
- * 3 - precision parameter (PP)
- * 4 - camera parameter (CP)
- *
- * NP sets number of spheres. Count of spheres is (NP+1)^2.
- * SP sets speed of rotation. One revolution of root node takes 1200/SP seconds. It is count of calculation of position per second.
- * PP sets number of sphere's vertices. Count of vertices is (NP+1)^2.
- * CP sets camera's perspective angle in degrees.
- *
- * Right click of mouse show/hide navigation panel
- *
- * @verbatim
- * Just use script ./run with key -a: enable automation testing, -l: change which only in local repository, -p: disable navigation panel
- * @endverbatim
- */
-
-/*enable automation test*/
-#ifdef ENABLE_ATPORT
- #include "at_port.h"
-#endif
-
-#include <math.h>
-#include <stdlib.h>
-#include <time.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifndef EFL_BETA_API_SUPPORT
-# define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Elementary.h>
-
-#include "Tools.h"
-
-#include "graphical_struct.h"
-
-#define WIDTH 1000
-#define HEIGHT 600
-
-Graphical globalGraphical;
-
-/*Variable for fps*/
-int fps_frames = 0;
-
-Eina_Slstr * _value_int_to_char(int value, const char *description)
-{
- if (description)
- return eina_slstr_printf("%s %d", description, value);
- return eina_slstr_printf("%d", value);
-}
-
-static Eina_Bool
-_timer_update(void *data EINA_UNUSED)
-{
- printf(" frame rate = %f fps\n", fps_frames / 10.0);
- fps_frames = 0;
- return EINA_TRUE;
-}
-static Eina_Bool
-_animate_scene(void *data)
-{
- Eina_List *l;
- Evas_Canvas3D_Node *node;
-
- static float angle = 0.0f;
- angle += 0.03;
-
- evas_canvas3d_node_look_at_set((Evas_Canvas3D_Node *)data, EVAS_CANVAS3D_SPACE_PARENT, 8 * sin(angle), 0.0, 8 * cos(angle), EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- EINA_LIST_FOREACH (globalGraphical.list_nodes, l, node)
- {
- evas_canvas3d_node_orientation_angle_axis_set(node, 10 * angle, 1.0, 1.0, 0.0);
- }
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- fps_frames++;
-
- return EINA_TRUE;
-}
-
-
-static void
-_on_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
- void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Coord x, y, w, h;
- Evas_Coord obj_x, obj_y;
- int scene_w, scene_h;
- Evas_Real scene_x, scene_y;
- Evas_Real s, t;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Eina_Bool pick;
- clock_t time;
- float diff_sec;
- if (ev->button == 3)
- {
- if (evas_object_visible_get((Evas_Object*)data))
- evas_object_hide((Evas_Object*)data);
- else
- evas_object_show((Evas_Object*)data);
- }
- else
- {
- evas_object_geometry_get(obj, &x, &y, &w, &h);
-
- obj_x = ev->canvas.x - x;
- obj_y = ev->canvas.y - y;
-
- evas_canvas3d_scene_size_get(globalGraphical.scene, &scene_w, &scene_h);
-
- scene_x = obj_x * scene_w / (Evas_Real)w;
- scene_y = obj_y * scene_h / (Evas_Real)h;
-
- time = clock();
- if (globalGraphical.flags.colorpick_enable)
- {
- pick = evas_canvas3d_scene_color_pick_enable_set(globalGraphical.scene, EINA_TRUE);
- pick = evas_canvas3d_scene_pick(globalGraphical.scene, ev->canvas.x, ev->canvas.y, &n, &m, NULL, NULL);
- time = clock() - time;
- diff_sec = ((float)time) / CLOCKS_PER_SEC / 10;
- if (pick)
- {
- printf("Boom! Color pick time expended for pick: %2.7f \n", diff_sec);
- if (n != globalGraphical.mesh_nodebox)
- evas_canvas3d_node_scale_set(n, 0.5, 0.5, 0.5);
- }
- }
- else
- {
- pick = evas_canvas3d_scene_color_pick_enable_set(globalGraphical.scene, EINA_FALSE);
- pick = evas_canvas3d_scene_pick(globalGraphical.scene, scene_x, scene_y, &n, &m, &s, &t);
- time = clock() - time;
- diff_sec = ((float)time) / CLOCKS_PER_SEC / 10;
- if (pick)
- {
- printf("Boom! Geometry pick time expended for pick: %2.7f, TexCoord (%f, %f)\n", diff_sec, s, t);
- if (n != globalGraphical.mesh_nodebox)
- evas_canvas3d_node_scale_set(n, 0.5, 0.5, 0.5);
- }
- }
- }
-}
-static void
-_btnstart_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- globalGraphical.change_scene_setup();
-}
-
-static void
-_btnexit_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- elm_exit();
-}
-
-static void
-_btnstop_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- const char *status = NULL;
- status = elm_object_text_get(obj);
- if (status != NULL && !strcmp(status, "Stop"))
- {
- elm_object_text_set(obj, "Start");
- ecore_animator_freeze((Ecore_Animator *)data);
- }
- else
- {
- elm_object_text_set(obj, "Stop");
- ecore_animator_thaw((Ecore_Animator *)data);
- }
-}
-static void
-_node_orientation_change_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Elm_Object_Item *it;
- Eina_List *l;
- Evas_Canvas3D_Node *node;
- it = elm_flipselector_selected_item_get((Evas_Object*)data);
- const char *str = elm_object_item_text_get(it);
- if (str && !strcmp(str, "root node"))
- evas_canvas3d_node_orientation_angle_axis_set(globalGraphical.root_node, 15, 1.0, 1.0, 1.0);
- else
- {
- EINA_LIST_FOREACH (globalGraphical.list_nodes, l, node)
- {
- evas_canvas3d_node_orientation_angle_axis_set((Eo*)node, 15, 1.0, 1.0, 1.0);
- }
- }
-}
-static void
-_node_position_change_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Elm_Object_Item *it;
- Eina_List *l;
- Evas_Canvas3D_Node *node;
- it = elm_flipselector_selected_item_get((Evas_Object*)data);
- const char *str = elm_object_item_text_get(it);
- if (str && !strcmp(str, "root node"))
- evas_canvas3d_node_position_set(globalGraphical.root_node, 10.0, 1.0, 1.0);
- else
- {
- EINA_LIST_FOREACH (globalGraphical.list_nodes, l, node)
- {
- evas_canvas3d_node_position_set((Eo*)node, 1.0, 1.0, 1.0);
- }
- }
-}
-static void
-_node_scale_change_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Elm_Object_Item *it;
- Eina_List *l;
- Evas_Canvas3D_Node *node;
- it = elm_flipselector_selected_item_get((Evas_Object*)data);
- const char *str = elm_object_item_text_get(it);
- if (str && !strcmp(str, "root node"))
- evas_canvas3d_node_scale_set(globalGraphical.root_node, 1.0, 1.0, 1.0);
- else
- {
- EINA_LIST_FOREACH (globalGraphical.list_nodes, l, node)
- {
- evas_canvas3d_node_scale_set((Eo*)node, 1.0, 1.0, 1.0);
- }
- }
-}
-static void
-_countdec10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
- int tmp;
-
- globalGraphical.count -= 10;
- if (globalGraphical.count < 0) tmp = globalGraphical.count = 0;
- else
- tmp = ((globalGraphical.count + 1) * (globalGraphical.count + 1));
-
- buf = _value_int_to_char(((tmp <= 1) ? 0 : tmp), "quantity:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_countdec_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
- int tmp;
-
- globalGraphical.count--;
- if (globalGraphical.count < 0) tmp = globalGraphical.count = 0;
- else
- tmp = ((globalGraphical.count + 1) * (globalGraphical.count + 1));
- buf = _value_int_to_char(((tmp <= 1) ? 0 : tmp), "quantity:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_countinc_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.count++;
-
- buf = _value_int_to_char(((globalGraphical.count + 1) * (globalGraphical.count + 1)), "quantity:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_countinc10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.count += 10;
-
- buf = _value_int_to_char(((globalGraphical.count + 1) * (globalGraphical.count + 1)), "quantity:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_speeddec10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.speed -= 10;
- if (globalGraphical.speed <= 0) globalGraphical.speed = 10;
-
- buf = _value_int_to_char(globalGraphical.speed, "speed:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_speeddec_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.speed--;
- if (globalGraphical.speed <= 0) globalGraphical.speed = 10;
-
- buf = _value_int_to_char(globalGraphical.speed, "speed:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_speedinc_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.speed++;
-
- buf = _value_int_to_char(globalGraphical.speed, "speed:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_speedinc10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.speed += 10;
-
- buf = _value_int_to_char(globalGraphical.speed, "speed:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_precisiondec10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.precision -= 10;
- if (globalGraphical.precision <= 0) globalGraphical.precision = 10;
-
- buf = _value_int_to_char(globalGraphical.precision, "precision:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_precisiondec_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.precision--;
- if (globalGraphical.precision <= 0) globalGraphical.precision = 10;
-
- buf = _value_int_to_char(globalGraphical.precision, "precision:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_precisioninc_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.precision++;
-
- buf = _value_int_to_char(globalGraphical.precision, "precision:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_precisioninc10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.precision += 10;
-
- buf = _value_int_to_char(globalGraphical.precision, "precision:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_angledec10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.angle -= 10;
- if (globalGraphical.angle <= 0) globalGraphical.angle = 10;
-
- buf = _value_int_to_char(globalGraphical.angle, "angle:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_angledec_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.angle--;
- if (globalGraphical.angle <= 0) globalGraphical.angle = 10;
-
- buf = _value_int_to_char(globalGraphical.angle, "angle:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_angleinc_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.angle++;
- if (globalGraphical.angle >= 180) globalGraphical.angle = 180;
-
- buf = _value_int_to_char(globalGraphical.angle, "angle:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_angleinc10_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Eina_Slstr *buf;
-
- globalGraphical.angle += 10;
- if (globalGraphical.angle >= 180) globalGraphical.angle = 180;
-
- buf = _value_int_to_char(globalGraphical.angle, "angle:");
- elm_object_text_set((Evas_Object*)data, buf);
-}
-
-static void
-_shadow_enable(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- if (elm_check_state_get(obj))
- globalGraphical.flags.shadow_enable = EINA_TRUE;
- else
- globalGraphical.flags.shadow_enable = EINA_FALSE;
-}
-
-static void
-_colorpick_enable(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- if (elm_check_state_get(obj))
- globalGraphical.flags.colorpick_enable = EINA_TRUE;
- else
- globalGraphical.flags.colorpick_enable = EINA_FALSE;
-}
-
-static void
-_fog_enable(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- if (elm_check_state_get(obj))
- globalGraphical.flags.fog_enable = EINA_TRUE;
- else
- globalGraphical.flags.fog_enable = EINA_FALSE;
-}
-
-static void
-_blend_enable(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- if (elm_check_state_get(obj))
- globalGraphical.flags.blend_enable = EINA_TRUE;
- else
- globalGraphical.flags.blend_enable = EINA_FALSE;
-}
-
-static void
-_cb_fps_enable(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- if (elm_check_state_get(obj))
- {
- globalGraphical.flags.fps_enable = EINA_TRUE;
- ecore_timer_thaw((Ecore_Timer *)data);
- fps_frames = 0;
- }
- else
- {
- globalGraphical.flags.fps_enable = EINA_FALSE;
- ecore_timer_freeze((Ecore_Timer *)data);
- fps_frames = 0;
- }
-}
-
-static void
-_load_mesh(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)
-{
- char *format = NULL, *a = NULL;
- char name[FILENAME_MAX];
- int i = 0, j = 0;
- if (event_info)
- {
- char *tmp = NULL;
- tmp = strdup(event_info);
- /*Get filename in backward*/
- for (i = strlen(tmp) - 1; i >= 0; i--, j++)
- {
- if (tmp[i] != '/')
- name[j] = tmp[i];
- else
- {
- name[j] = '\0';
- break;
- }
- }
- free(tmp);
- tmp = NULL;
- j = 0;
- /*Reverse filename*/
- tmp = strdup(name);
- for (i = strlen(tmp) - 1; i >= 0 ; i--, j++)
- name[j] = tmp[i];
-
- free(tmp);
- free(a);
- tmp = NULL;
- a = NULL;
- /*Get extension of file*/
- tmp = strdup(event_info);
- a = strrchr(tmp,'.');
- if (!a)
- {
- free(tmp);
- return;
- }
- format = malloc(sizeof (char) * (strlen(a) - 1));
- for (i = 0; i <= (int)strlen(a) - 1; i++)
- format[i] = a[i + 1];
- if (!strcmp(format, "md2"))
- {
- globalGraphical.model_path = event_info;
- elm_object_text_set(obj, name);
- }
- else if (!strcmp(format, "obj"))
- {
- globalGraphical.model_path = event_info;
- elm_object_text_set(obj, name);
- }
- else if (!strcmp(format, "ply"))
- {
- globalGraphical.model_path = event_info;
- elm_object_text_set(obj, name);
- }
- else
- {
- printf("\nUnsupported fromat file\n");
- globalGraphical.model_path = NULL;
- elm_object_text_set(obj, "load");
- }
- free(format);
- free(tmp);
- }
- else
- {
- globalGraphical.model_path = NULL;
- elm_object_text_set(obj, "load");
- }
-}
-
-EAPI_MAIN
- int elm_main(int argc, char **argv)
-{
- Evas *evas = NULL;
- Evas_Object *win = NULL, *bg = NULL, *image = NULL;
- Ecore_Animator *timer = NULL;
- Evas_Object *layout = NULL;
- Evas_Object *btnstart = NULL, *btnexit = NULL, *btnstop = NULL;
- Evas_Object *startexitbox = NULL,*testbox = NULL, *controlbox = NULL, *newfeaturesbox = NULL;
- Evas_Object *countdec10 = NULL, *countinc = NULL, *countdec = NULL, *countinc10 = NULL;
- Evas_Object *speeddec10 = NULL, *speedinc = NULL, *speeddec = NULL, *speedinc10 = NULL;
- Evas_Object *precisiondec10 = NULL, *precisioninc = NULL, *precisiondec = NULL, *precisioninc10 = NULL;
- Evas_Object *vcount = NULL, *vspeed = NULL, *vprecision = NULL, *vangle = NULL;
- Evas_Object *angledec10 = NULL, *angleinc = NULL, *angledec = NULL, *angleinc10 = NULL;
- Evas_Object *cb_shadow = NULL, *cb_colorpick = NULL, *cb_fog = NULL, *cb_blend = NULL, *cb_fps = NULL;
- Evas_Object *fs_bt = NULL;
- Evas_Object *navigation = NULL;
- Evas_Object *fs_node = NULL, *bt_orientation = NULL, *bt_position = NULL, *bt_scale = NULL;
- Ecore_Timer *fps_timer = NULL;
- Eina_Slstr *buf;
-
-#ifdef ENABLE_ATPORT
- at_port_h mf_at_port = NULL;
-#endif
-
- if (!elm_init(argc, argv)) return 1;
-
- elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
- win = elm_win_add(NULL, "3D Performance", ELM_WIN_BASIC);
- evas_object_resize(win, WIDTH, HEIGHT);
- elm_win_autodel_set(win, EINA_TRUE);
- evas_object_show(win);
-
-#ifdef ENABLE_ATPORT
- at_port_create(&(mf_at_port), win);
- if(mf_at_port != NULL)
- {
- at_port_enable(mf_at_port);
- }
-#endif
-
- bg = elm_bg_add(win);
- evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_bg_file_set(bg, "background.png", NULL);
- elm_win_resize_object_add(win, bg);
- evas_object_show(bg);
-
- layout = elm_layout_add(win);
- evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_win_resize_object_add(win, layout);
- elm_layout_file_set(layout, "layout.edj", "new/layout/0");
- evas_object_show(layout);
-
- startexitbox = elm_box_add(win);
- elm_box_horizontal_set(startexitbox, EINA_TRUE);
- elm_object_part_content_set(layout, "swallow.btn.startexit", startexitbox);
- evas_object_size_hint_weight_set(startexitbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(startexitbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_box_homogeneous_set(startexitbox, EINA_TRUE);
- evas_object_show(startexitbox);
-
- evas = evas_object_evas_get(win);
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
-
- btnstart = elm_button_add(win);
- elm_object_text_set(btnstart, "Apply");
- evas_object_size_hint_weight_set(btnstart, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(btnstart, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_box_pack_end(startexitbox, btnstart);
- evas_object_show(btnstart);
- evas_object_smart_callback_add(btnstart, "clicked", _btnstart_cb, image);
-
- testbox = elm_box_add(win);
- elm_box_horizontal_set(testbox, EINA_TRUE);
- elm_box_homogeneous_set(testbox, EINA_TRUE);
- elm_box_pack_end(startexitbox, testbox);
- evas_object_show(testbox);
-
- btnstop = elm_button_add(win);
- elm_object_text_set( btnstop, "Stop");
- elm_box_pack_end(testbox, btnstop);
- evas_object_size_hint_weight_set(btnstop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(btnstop, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(btnstop);
-
- fs_node = elm_flipselector_add(win);
- elm_box_pack_end(testbox, fs_node);
- elm_flipselector_item_append(fs_node, "root node", NULL, NULL);
- elm_flipselector_item_append(fs_node, "mesh node", NULL, NULL);
- evas_object_size_hint_weight_set(btnstop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(btnstop, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(fs_node);
-
- bt_orientation = elm_button_add(win);
- elm_object_text_set(bt_orientation, "Orientation");
- elm_box_pack_end(testbox, bt_orientation);
- evas_object_size_hint_weight_set(bt_orientation, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bt_orientation, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(bt_orientation);
- evas_object_smart_callback_add(bt_orientation, "clicked", _node_orientation_change_cb, fs_node);
-
- bt_position = elm_button_add(win);
- elm_object_text_set(bt_position, "Position");
- elm_box_pack_end(testbox, bt_position);
- evas_object_size_hint_weight_set(bt_position, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bt_position, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(bt_position);
- evas_object_smart_callback_add(bt_position, "clicked", _node_position_change_cb, fs_node);
-
- bt_scale = elm_button_add(win);
- elm_object_text_set(bt_scale, "Scale");
- elm_box_pack_end(testbox, bt_scale);
- evas_object_size_hint_weight_set(bt_scale, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bt_scale, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(bt_scale);
- evas_object_smart_callback_add(bt_scale, "clicked", _node_scale_change_cb, fs_node);
-
- btnexit = elm_button_add(win);
- elm_object_text_set(btnexit, "Exit");
- elm_box_pack_end(startexitbox, btnexit);
- evas_object_size_hint_weight_set(btnexit, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(btnexit, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(btnexit);
- evas_object_smart_callback_add(btnexit, "clicked", _btnexit_cb, NULL);
-
- controlbox = elm_box_add(win);
- elm_box_horizontal_set(controlbox, EINA_TRUE);
- elm_object_part_content_set(layout, "swallow.controls.btn", controlbox);
- evas_object_size_hint_weight_set(controlbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(controlbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(controlbox);
-
- vcount = elm_label_add(win);
- buf = _value_int_to_char(121, "quantity:");
- elm_object_text_set(vcount, buf);
-
- countdec10 = elm_button_add(win);
- elm_object_text_set(countdec10, "<<");
- elm_box_pack_end(controlbox, countdec10);
- evas_object_size_hint_weight_set(countdec10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(countdec10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(countdec10);
- evas_object_smart_callback_add(countdec10, "clicked", _countdec10_cb, vcount);
-
- countdec = elm_button_add(win);
- elm_object_text_set(countdec, "<");
- elm_box_pack_end(controlbox, countdec);
- evas_object_size_hint_weight_set(countdec, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(countdec, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(countdec);
- evas_object_smart_callback_add(countdec, "clicked", _countdec_cb, vcount);
-
- elm_box_pack_end(controlbox, vcount);
- evas_object_show(vcount);
-
- countinc = elm_button_add(win);
- elm_object_text_set(countinc, ">");
- elm_box_pack_end(controlbox, countinc);
- evas_object_size_hint_weight_set(countinc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(countinc, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(countinc);
- evas_object_smart_callback_add(countinc, "clicked", _countinc_cb, vcount);
-
- countinc10 = elm_button_add(win);
- elm_object_text_set(countinc10, ">>");
- elm_box_pack_end(controlbox, countinc10);
- evas_object_size_hint_weight_set(countinc10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(countinc10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(countinc10);
- evas_object_smart_callback_add(countinc10, "clicked", _countinc10_cb, vcount);
-
- vspeed = elm_label_add(win);
- buf = _value_int_to_char(30, "speed:");
- elm_object_text_set(vspeed, buf);
-
- speeddec10 = elm_button_add(win);
- elm_object_text_set(speeddec10, "<<");
- elm_box_pack_end(controlbox, speeddec10);
- evas_object_size_hint_weight_set(speeddec10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(speeddec10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(speeddec10);
- evas_object_smart_callback_add(speeddec10, "clicked", _speeddec10_cb, vspeed);
-
- speeddec = elm_button_add(win);
- elm_object_text_set(speeddec, "<");
- elm_box_pack_end(controlbox, speeddec);
- evas_object_size_hint_weight_set(speeddec, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(speeddec, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(speeddec);
- evas_object_smart_callback_add(speeddec, "clicked", _speeddec_cb, vspeed);
-
- elm_box_pack_end(controlbox, vspeed);
- evas_object_show(vspeed);
-
- speedinc = elm_button_add(win);
- elm_object_text_set(speedinc, ">");
- elm_box_pack_end(controlbox, speedinc);
- evas_object_size_hint_weight_set(speedinc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(speedinc, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(speedinc);
- evas_object_smart_callback_add(speedinc, "clicked", _speedinc_cb, vspeed);
-
- speedinc10 = elm_button_add(win);
- elm_object_text_set(speedinc10, ">>");
- elm_box_pack_end(controlbox, speedinc10);
- evas_object_size_hint_weight_set(speedinc10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(speedinc10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(speedinc10);
- evas_object_smart_callback_add(speedinc10, "clicked", _speedinc10_cb, vspeed);
-
- vprecision = elm_label_add(win);
- buf = _value_int_to_char(100, "precision:");
- elm_object_text_set(vprecision, buf);
-
- precisiondec10 = elm_button_add(win);
- elm_object_text_set(precisiondec10, "<<");
- elm_box_pack_end(controlbox, precisiondec10);
- evas_object_size_hint_weight_set(precisiondec10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(precisiondec10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(precisiondec10);
- evas_object_smart_callback_add(precisiondec10, "clicked", _precisiondec10_cb, vprecision);
-
- precisiondec = elm_button_add(win);
- elm_object_text_set(precisiondec, "<");
- elm_box_pack_end(controlbox, precisiondec);
- evas_object_size_hint_weight_set(precisiondec, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(precisiondec, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(precisiondec);
- evas_object_smart_callback_add(precisiondec, "clicked", _precisiondec_cb, vprecision);
-
- elm_box_pack_end(controlbox, vprecision);
- evas_object_show(vprecision);
-
- precisioninc = elm_button_add(win);
- elm_object_text_set(precisioninc, ">");
- elm_box_pack_end(controlbox, precisioninc);
- evas_object_size_hint_weight_set(precisioninc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(precisioninc, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(precisioninc);
- evas_object_smart_callback_add(precisioninc, "clicked", _precisioninc_cb, vprecision);
-
- precisioninc10 = elm_button_add(win);
- elm_object_text_set(precisioninc10, ">>");
- elm_box_pack_end(controlbox, precisioninc10);
- evas_object_size_hint_weight_set(precisioninc10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(precisioninc10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(precisioninc10);
- evas_object_smart_callback_add(precisioninc10, "clicked", _precisioninc10_cb, vprecision);
-
- vangle = elm_label_add(win);
- buf = _value_int_to_char(120, "angle:");
- elm_object_text_set(vangle, buf);
-
- angledec10 = elm_button_add(win);
- elm_object_text_set(angledec10, "<<");
- elm_box_pack_end(controlbox, angledec10);
- evas_object_size_hint_weight_set(angledec10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(angledec10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(angledec10);
- evas_object_smart_callback_add(angledec10, "clicked", _angledec10_cb, vangle);
-
- angledec = elm_button_add(win);
- elm_object_text_set(angledec, "<");
- elm_box_pack_end(controlbox, angledec);
- evas_object_size_hint_weight_set(angledec, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(angledec, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(angledec);
- evas_object_smart_callback_add(angledec, "clicked", _angledec_cb, vangle);
-
- elm_box_pack_end(controlbox, vangle);
- evas_object_show(vangle);
-
- angleinc = elm_button_add(win);
- elm_object_text_set(angleinc, ">");
- elm_box_pack_end(controlbox, angleinc);
- evas_object_size_hint_weight_set(angleinc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(angleinc, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(angleinc);
- evas_object_smart_callback_add(angleinc, "clicked", _angleinc_cb, vangle);
-
- angleinc10 = elm_button_add(win);
- elm_object_text_set(angleinc10, ">>");
- elm_box_pack_end(controlbox, angleinc10);
- evas_object_size_hint_weight_set(angleinc10, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(angleinc10, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(angleinc10);
- evas_object_smart_callback_add(angleinc10, "clicked", _angleinc10_cb, vangle);
-
- newfeaturesbox = elm_box_add(win);
- elm_box_horizontal_set(newfeaturesbox, EINA_TRUE);
- elm_object_part_content_set(layout, "new_features", newfeaturesbox);
- evas_object_size_hint_align_set(newfeaturesbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(newfeaturesbox);
-
- cb_shadow = elm_check_add(win);
- elm_object_text_set(cb_shadow, "shadow");
- elm_check_state_set(cb_shadow, EINA_FALSE);
- evas_object_size_hint_align_set(cb_shadow, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(cb_shadow, "changed", _shadow_enable, NULL);
- elm_box_pack_end(newfeaturesbox, cb_shadow);
- evas_object_show(cb_shadow);
-
- cb_fog = elm_check_add(win);
- elm_object_text_set(cb_fog, "fog");
- elm_check_state_set(cb_fog, EINA_FALSE);
- evas_object_size_hint_align_set(cb_fog, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(cb_fog, "changed", _fog_enable, NULL);
- elm_box_pack_end(newfeaturesbox, cb_fog);
- evas_object_show(cb_fog);
-
- cb_colorpick = elm_check_add(win);
- elm_object_text_set(cb_colorpick, "colorpick");
- elm_check_state_set(cb_colorpick, EINA_FALSE);
- evas_object_size_hint_align_set(cb_colorpick, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(cb_colorpick, "changed", _colorpick_enable, NULL);
- elm_box_pack_end(newfeaturesbox, cb_colorpick);
- evas_object_show(cb_colorpick);
-
- cb_blend = elm_check_add(win);
- elm_object_text_set(cb_blend, "blend");
- elm_check_state_set(cb_blend, EINA_FALSE);
- evas_object_size_hint_align_set(cb_blend, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(cb_blend, "changed", _blend_enable, NULL);
- elm_box_pack_end(newfeaturesbox, cb_blend);
-#ifndef LOCAL_REPOSITORY
- elm_object_disabled_set(cb_blend, EINA_TRUE);
-#endif
- evas_object_show(cb_blend);
-
- cb_fps = elm_check_add(win);
- elm_object_text_set(cb_fps, "fps");
- elm_check_state_set(cb_fps, EINA_FALSE);
- evas_object_size_hint_align_set(cb_fps, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_box_pack_end(newfeaturesbox, cb_fps);
- evas_object_show(cb_fps);
-
- /*Select model file*/
- fs_bt = elm_fileselector_button_add(win);
- elm_fileselector_path_set(fs_bt, ".");
- elm_object_text_set(fs_bt, "load");
- elm_fileselector_button_inwin_mode_set(fs_bt, EINA_TRUE);
- evas_object_size_hint_align_set(fs_bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_box_pack_end(newfeaturesbox, fs_bt);
- evas_object_show(fs_bt);
- evas_object_smart_callback_add(fs_bt, "file,chosen", _load_mesh, NULL);
-
- elm_object_part_content_set(layout, "swallow.content", image);
- evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(image);
- evas_render(evas); //make edje do recalculation
- image = init_graphical_window(image);
-
- /*Update data for count, speed, precision, angle*/
- buf = _value_int_to_char((globalGraphical.count + 1) * (globalGraphical.count + 1), "quantity:");
- elm_object_text_set(vcount, buf);
- buf = _value_int_to_char(globalGraphical.speed, "speed:");
- elm_object_text_set(vspeed, buf);
- buf = _value_int_to_char(globalGraphical.precision, "precision:");
- elm_object_text_set(vprecision, buf);
- buf = _value_int_to_char(globalGraphical.angle, "angle:");
- elm_object_text_set(vangle, buf);
- if (globalGraphical.model_path)
- evas_object_smart_callback_call(fs_bt, "file,chosen", (void *)globalGraphical.model_path);
-
- /*Create navigation panel*/
-#ifndef DISABLE_NAVIGATION_PANEL
- navigation = init_panel_camera_light(win, globalGraphical.camera_node, globalGraphical.light_node, 1.0, 0.5);
- panel_camera_coord_step_set(navigation, 5);
- panel_camera_angle_step_set(navigation, 5);
- panel_light_coord_step_set(navigation, 5);
- panel_light_angle_step_set(navigation, 5);
-#endif
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN,
- _on_mouse_down, navigation);
-
- ecore_animator_frametime_set(1.0 / (globalGraphical.speed));
- timer = ecore_animator_add(_animate_scene, globalGraphical.light_node);
- fps_timer = ecore_timer_add(10, _timer_update, NULL);
- ecore_timer_freeze(fps_timer);
- evas_object_smart_callback_add(cb_fps, "changed", _cb_fps_enable, (void *)fps_timer);
-
- evas_object_smart_callback_add(btnstop, "clicked", _btnstop_cb, timer);
-
- elm_run();
- elm_shutdown();
-
-#ifndef DISABLE_NAVIGATION_PANEL
- panel_camera_light_fini(navigation);
-#endif
- return 0;
-}
-ELM_MAIN()
-
diff --git a/src/examples/elementary/performance/target_texture.png b/src/examples/elementary/performance/target_texture.png
deleted file mode 100644
index 3bcf58b3fe..0000000000
--- a/src/examples/elementary/performance/target_texture.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/elementary/performance/tools_private.h b/src/examples/elementary/performance/tools_private.h
deleted file mode 100644
index 40d6f12afc..0000000000
--- a/src/examples/elementary/performance/tools_private.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef EFL_BETA_API_SUPPORT
-# define EFL_BETA_API_SUPPORT
-#endif
-
-#include <math.h>
-#include <stdlib.h>
-#include <time.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Elementary.h>
-
-#define COORDRANGE 1000
-#define ANGLERANGE 360
-#define axiskeys "xyz"
-#define pb "panel_struct"
-
-typedef struct _Panel_Struct
-{
- Evas_Object *cspX, *cspY, *cspZ;
- Evas_Object *cspangle;
- Evas_Object *lspX, *lspY, *lspZ;
- Evas_Object *lspangle;
-} Panel_Struct;
-
-typedef struct _Axis_Key
-{
- float x;
- float y;
- float z;
-} Axis_Key;
-
-/*callbacks*/
-static void
-_camera_light_changeX_cb(void *data, Evas_Object *obj, void *event_info);
-static void
-_camera_light_changeY_cb(void *data, Evas_Object *obj, void *event_info);
-static void
-_camera_light_changeZ_cb(void *data, Evas_Object *obj, void *event_info);
-static void
-_camera_light_angle_change_cb(void *data, Evas_Object *obj, void *event_info);
-static void
-_camera_light_axisX_change_cb(void *data, Evas_Object *obj, void *event_info);
-static void
-_camera_light_axisY_change_cb(void *data, Evas_Object *obj, void *event_info);
-static void
-_camera_light_axisZ_change_cb(void *data, Evas_Object *obj, void *event_info);
diff --git a/src/examples/elementary/progressbar_example.c b/src/examples/elementary/progressbar_example.c
index f6d2538dc0..c33b049959 100644
--- a/src/examples/elementary/progressbar_example.c
+++ b/src/examples/elementary/progressbar_example.c
@@ -117,7 +117,7 @@ _on_changed(void *data,
Evas_Object *label = (Evas_Object *)data;
val = elm_progressbar_value_get(obj);
- if (val == 0)
+ if (EINA_DBL_EQ(val, 0))
{
tstart = 0;
elm_object_text_set(label, "ETA: N/A");
diff --git a/src/examples/elementary/sphere_hunter/EFL_defeat.png b/src/examples/elementary/sphere_hunter/EFL_defeat.png
deleted file mode 100644
index 0839bce226..0000000000
--- a/src/examples/elementary/sphere_hunter/EFL_defeat.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/elementary/sphere_hunter/EFL_victory.png b/src/examples/elementary/sphere_hunter/EFL_victory.png
deleted file mode 100644
index c5dc2ca831..0000000000
--- a/src/examples/elementary/sphere_hunter/EFL_victory.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/elementary/sphere_hunter/evas_3d_sphere_hunter.c b/src/examples/elementary/sphere_hunter/evas_3d_sphere_hunter.c
deleted file mode 100644
index 5120154715..0000000000
--- a/src/examples/elementary/sphere_hunter/evas_3d_sphere_hunter.c
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
-* Catch all the cubes to score 10 points and win.
-* w - up
-* s - down
-* a - left
-* d - right
-* space - jump
-* key Up - scale +
-* key Down - scale -
-* n - normal scale
-* TODO: add more levels.
-*
-* Compile with:
-* edje_cc sphere_hunter.edc
-* gcc -o evas_3d_sphere_hunter evas_3d_sphere_hunter.c -g `pkg-config --libs --cflags evas ecore elementary eina eo` -lm
-*/
-#ifndef EFL_BETA_API_SUPPORT
-# define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Elementary.h>
-#include <Ecore.h>
-#include <Evas.h>
-#include <Eina.h>
-#include <stdio.h>
-#include <math.h>
-#include <Eo.h>
-
-#define WIDTH 700
-#define HEIGHT 800
-#define ANGLE_IT 0.006
-#define GE -0.1
-#define KE 1
-
-typedef struct _Scene_Data
-{
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node_ball;
-
- Eina_List *items;
-
- Eo *scene;
- Eo *camera;
- Eo *light;
- Eo *mesh_cube;
- Eo *material_cube;
- Eo *mesh_ball;
- Eo *material_ball;
-} Scene_Data;
-
-typedef struct _vec4
-{
- float x;
- float y;
- float z;
- float w;
-} vec4;
-
-typedef struct _vec3
-{
- float x;
- float y;
- float z;
-} vec3;
-
-typedef struct _vec2
-{
- float x;
- float y;
-} vec2;
-
-typedef struct _vertex
-{
- vec3 position;
- vec3 normal;
- vec3 tangent;
- vec4 color;
- vec3 texcoord;
-} vertex;
-
-Evas_Object *win = NULL;
-Evas_Object *layout = NULL;
-Evas_Object *text = NULL;
-Evas_Object *btn_restart = NULL;
-Evas_Object *btn_quit = NULL;
-Eina_List *nodes = NULL;
-
-Ecore_Animator *anim_cube = NULL;
-Ecore_Animator *anim_camera = NULL;
-Ecore_Animator *anim_ball = NULL;
-Evas *evas = NULL;
-Eo *image = NULL;
-
-
-Evas_Real ball_position_x = 0.0;
-Evas_Real ball_position_y = -1.0;
-Evas_Real ball_position_z = 0.0;
-Evas_Real ball_vel_x = 0.0;
-Evas_Real ball_vel_y = 0.0;
-Evas_Real ball_vel_z = 0.0;
-Evas_Real ball_ac_x = 0.0;
-Evas_Real ball_ac_y = GE;
-Evas_Real ball_ac_z = 0.0;
-Evas_Real plane_alpha_x = 0.0;
-Evas_Real plane_alpha_z = 0.0;
-Eina_Bool reload = EINA_TRUE;
-Eina_Bool jump = EINA_FALSE;
-Eina_Bool game = EINA_TRUE;
-
-vertex *vertices = NULL;
-int score = 0;
-int vertex_count = 0;
-int index_count = 0;
-unsigned short *indices = NULL;
-float camera_y = 40.0;
-float camera_z = 70.0;
-int hight = 1;
-
-
-static const float cube_vertices[] =
-{
- /* Front */
- -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Back */
- 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Left */
- -1.0, 1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Right */
- 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Top */
- -1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Bottom */
- 1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0,
-};
-
-static const unsigned short cube_indices[] =
-{
- /* Front */
- 0, 1, 2, 2, 1, 3,
-
- /* Back */
- 4, 5, 6, 6, 5, 7,
-
- /* Left */
- 8, 9, 10, 10, 9, 11,
-
- /* Right */
- 12, 13, 14, 14, 13, 15,
-
- /* Top */
- 16, 17, 18, 18, 17, 19,
-
- /* Bottom */
- 20, 21, 22, 22, 21, 23
-};
-
-static void
-_sphere_fini()
-{
- free(vertices);
- free(indices);
-}
-
-static void
-_sphere_init(int precision)
-{
- int i, j;
- unsigned short *idx;
-
- vertex_count = (precision + 1) * (precision + 1);
- index_count = precision * precision * 6;
-
- /* Allocate buffer. */
- vertices = malloc(sizeof(vertex) * vertex_count);
- indices = malloc(sizeof(unsigned short) * index_count);
-
- /* Calculate vertices position of the sphere mesh by using
- splitting of sphere by latitude and longitude. */
- for (i = 0; i <= precision; i++)
- {
- double lati, y, r;
-
- lati = (M_PI * (double)i) / (double)precision;
- y = cos(lati);
- r = fabs(sin(lati));
-
- for (j = 0; j <= precision; j++)
- {
- double longi;
- vertex *v;
-
- longi = (M_PI * 2.0 * j) / precision;
- v = &vertices[(i * (precision + 1)) + j];
-
- if ((j == 0) || (j == precision)) v->position.x = 0.0;
- else v->position.x = r * sin(longi);
-
- v->position.y = y;
-
- if ((j == 0) || (j == precision)) v->position.z = r;
- else v->position.z = r * cos(longi);
-
- v->normal = v->position;
-
- if (v->position.x > 0.0)
- {
- v->tangent.x = -v->normal.y;
- v->tangent.y = v->normal.x;
- v->tangent.z = v->normal.z;
- }
- else
- {
- v->tangent.x = v->normal.y;
- v->tangent.y = -v->normal.x;
- v->tangent.z = v->normal.z;
- }
-
- v->color.x = v->position.x;
- v->color.y = v->position.y;
- v->color.z = v->position.z;
- v->color.w = 1.0;
-
- if (j == precision) v->texcoord.x = 1.0;
- else if (j == 0) v->texcoord.x = 0.0;
- else v->texcoord.x = (double)j / (double)precision;
-
- if (i == precision) v->texcoord.y = 1.0;
- else if (i == 0) v->texcoord.y = 0.0;
-
- else v->texcoord.y = 1.0 - ((double)i / (double)precision);
- }
- }
-
- idx = &indices[0];
-
- /* Calculate and fill in the buffer of indices,
- prepare stage for gl triangulation. */
- for (i = 0; i < precision; i++)
- {
- for (j = 0; j < precision; j++)
- {
- *idx++ = (i * (precision + 1)) + j;
- *idx++ = (i * (precision + 1)) + j + 1;
- *idx++ = ((i + 1) * (precision + 1)) + j;
-
- *idx++ = ((i + 1) * (precision + 1)) + j;
- *idx++ = (i * (precision + 1)) + j + 1;
- *idx++ = ((i + 1) * (precision + 1)) + j + 1;
- }
- }
-
- /* Triangulation of sphere mesh in appliance with buffer of indices. */
- for (i = 0; i < index_count; i += 3)
- {
- vec3 e1, e2;
- float du1, du2, dv1, dv2, f;
- vec3 tangent;
-
- vertex *v0 = &vertices[indices[i + 0]];
- vertex *v1 = &vertices[indices[i + 1]];
- vertex *v2 = &vertices[indices[i + 2]];
-
- e1.x = v1->position.x - v0->position.x;
- e1.y = v1->position.y - v0->position.y;
- e1.z = v1->position.z - v0->position.z;
-
- e2.x = v2->position.x - v0->position.x;
- e2.y = v2->position.y - v0->position.y;
- e2.z = v2->position.z - v0->position.z;
-
- du1 = v1->texcoord.x - v0->texcoord.x;
- dv1 = v1->texcoord.y - v0->texcoord.y;
-
- du2 = v2->texcoord.x - v0->texcoord.x;
- dv2 = v2->texcoord.y - v0->texcoord.y;
-
- f = 1.0 / ((du1 * dv2) - (du2 * dv1));
-
- tangent.x = f * ((dv2 * e1.x) - (dv1 * e2.x));
- tangent.y = f * ((dv2 * e1.y) - (dv1 * e2.y));
- tangent.z = f * ((dv2 * e1.z) - (dv1 * e2.z));
-
- v0->tangent = tangent;
- }
-
- /* Coupling between vertices by calculation of tangent parametr correct value. */
- for (i = 0; i <= precision; i++)
- {
- for (j = 0; j <= precision; j++)
- {
- if (j == precision)
- {
- vertex *v;
- v = &vertices[(i * (precision + 1)) + j];
- v->tangent = vertices[i * (precision + 1)].tangent;
- }
- }
- }
-}
-
-static void
-_restart_level(void *data, Evas_Object *btn EINA_UNUSED, void *ev EINA_UNUSED)
-{
- Eina_List *l = NULL;
- Eo *item = NULL;
- Scene_Data *scene = (Scene_Data *)data;
-
- EINA_LIST_FOREACH(scene->items, l, item)
- {
- evas_canvas3d_node_member_del(scene->root_node, item);
- scene->items = eina_list_remove_list(scene->items, l);
- }
-
- EINA_LIST_FOREACH(nodes, l, item)
- scene->items = eina_list_append(scene->items, item);
-
- EINA_LIST_FOREACH(scene->items, l, item)
- evas_canvas3d_node_member_add(scene->root_node, item);
-
- ball_position_x = 0.0;
- ball_position_y = -1.0;
- ball_position_z = 0.0;
- ball_vel_x = 0.0;
- ball_vel_y = 0.0;
- ball_vel_z = 0.0;
- ball_ac_x = 0.0;
- ball_ac_y = GE;
- ball_ac_z = 0.0;
- plane_alpha_x = 0.0;
- plane_alpha_z = 0.0;
- score = 0;
-
- reload = EINA_TRUE;
- game = EINA_TRUE;
-}
-
-static void
-_key_down(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Key_Down *ev = event_info;
- Scene_Data *scene = (Scene_Data *)data;
-
- if (reload)
- {
- if (!strcmp(ev->key, "w"))
- {
- plane_alpha_z -= ANGLE_IT;
- ball_ac_z = sin(plane_alpha_z);
- }
- if (!strcmp(ev->key, "s"))
- {
- plane_alpha_z += ANGLE_IT;
- ball_ac_z = sin(plane_alpha_z);
- }
- if (!strcmp(ev->key, "d"))
- {
- plane_alpha_x += ANGLE_IT;
- ball_ac_x = sin(plane_alpha_x);
- }
- if (!strcmp(ev->key, "a"))
- {
- plane_alpha_x -= ANGLE_IT;
- ball_ac_x = sin(plane_alpha_x);
- }
- if (!strcmp(ev->key, "space"))
- {
- ball_vel_y += KE;
- ball_position_y += 0.1;
- jump = EINA_TRUE;
- ++hight;
- }
- if (!strcmp(ev->key, "Up"))
- {
- if (camera_y > 26.5)
- {
- camera_y -= 0.5;
- camera_z -= 0.5 * (7.0 / 4.0);
- }
- }
- if (!strcmp(ev->key, "Down"))
- {
- if (camera_y < 100.0)
- {
- camera_y += 0.5;
- camera_z += 0.5 * (7.0 / 4.0);
- }
- }
- if (!strcmp(ev->key, "n"))
- {
- camera_y = 40.0;
- camera_z = 70.0;
- }
- if (!strcmp(ev->key, "Return"))
- {
- elm_layout_signal_emit(btn_restart, "elm,anim,activate", "elm");
- _restart_level(scene, NULL, NULL);
- }
- }
-}
-
-static void
-_quit_game(void *data EINA_UNUSED, Evas_Object *btn EINA_UNUSED, void *ev EINA_UNUSED)
-{
- elm_exit();
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(data->camera, 50.0, 1.0, 1.0, 1000.0);
-
- data->camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 40, 70);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static Eina_Bool
-_animate_camera(void *data)
-{
- Scene_Data *scene = (Scene_Data *)data;
-
- evas_canvas3d_node_position_set(scene->camera_node, 0.0, camera_y, camera_z);
-
- return EINA_TRUE;
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
-
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_projection_perspective_set(data->light, 100.0, 1.0, 1.0, 1000.0);
-
- data->light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.1, 25.0, 0.1);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_mesh_cube_setup(Scene_Data *data)
-{
- data->mesh_cube = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- data->material_cube = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_material_enable_set(data->material_cube, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_cube, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_cube, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material_cube, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material_cube, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material_cube, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material_cube, 50.0);
-
- evas_canvas3d_mesh_vertex_count_set(data->mesh_cube, 24);
- evas_canvas3d_mesh_frame_add(data->mesh_cube, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_cube, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 12 * sizeof(float), &cube_vertices[ 0]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_cube, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 12 * sizeof(float), &cube_vertices[ 3]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_cube, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 12 * sizeof(float), &cube_vertices[ 6]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_cube, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 12 * sizeof(float), &cube_vertices[10]);
- evas_canvas3d_mesh_index_data_set(data->mesh_cube, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &cube_indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_cube, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_cube, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh_cube, 0, data->material_cube);
-
-}
-static void
-_create_bondar(Scene_Data *data, Evas_Real scale_x, Evas_Real scale_y, Evas_Real scale_z, Evas_Real x, Evas_Real y, Evas_Real z, Eina_Bool color)
-{
- Eo *mesh = NULL;
- Eo *node = NULL;
- Eo *material = NULL;
-
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- if (color)
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.0, 0.7, 1.0, 1.0);
- else
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.0, 1.0, 1.0, 1.0);
-
- evas_canvas3d_mesh_vertex_count_set(mesh, 24);
- evas_canvas3d_mesh_frame_add(mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 12 * sizeof(float), &cube_vertices[ 0]);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 12 * sizeof(float), &cube_vertices[ 3]);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 12 * sizeof(float), &cube_vertices[ 6]);
- evas_canvas3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 12 * sizeof(float), &cube_vertices[10]);
- evas_canvas3d_mesh_index_data_set(mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &cube_indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
-
- evas_canvas3d_node_member_add(data->root_node, node);
-
- evas_canvas3d_node_mesh_add(node, mesh);
- evas_canvas3d_node_position_set(node, x, y, z);
- evas_canvas3d_node_scale_set(node, scale_x, scale_y, scale_z);
-
-}
-static void
-_create_cubes(Scene_Data *data, Evas_Real r, int count)
-{
- int i;
- Evas_Real alpha;
- Evas_Real d_alpha;
-
- data->items = NULL;
- d_alpha = 360 / (double)count;
-
- for (i = 0; i < count; i++)
- {
- Eo *node = NULL;
-
- alpha = d_alpha * i * M_PI / 180;
- node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_mesh_add(node, data->mesh_cube);
- evas_canvas3d_node_position_set(node, r * sin(alpha), 2.0 + (r / 4 * sin(alpha)), r * cos(alpha));
- evas_canvas3d_node_scale_set(node, 1.0, 1.0, 1.0);
-
- evas_canvas3d_node_member_add(data->root_node, node);
-
- data->items = eina_list_append(data->items, node);
- }
-}
-
-static void
-_mesh_ball_setup(Scene_Data *data)
-{
- _sphere_init(100);
-
- data->mesh_ball = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- data->material_ball = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- data->mesh_node_ball = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- /* Setup material for ball. */
- evas_canvas3d_material_enable_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material_ball, 50.0);
-
- /* Setup mesh for ball. */
- evas_canvas3d_mesh_vertex_count_set(data->mesh_ball, vertex_count);
- evas_canvas3d_mesh_frame_add(data->mesh_ball, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_ball, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, sizeof(vertex), &vertices[0].position);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_ball, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, sizeof(vertex), &vertices[0].normal);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_ball, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT, sizeof(vertex), &vertices[0].tangent);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_ball, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, sizeof(vertex), &vertices[0].color);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_ball, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, sizeof(vertex), &vertices[0].texcoord);
- evas_canvas3d_mesh_index_data_set(data->mesh_ball, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_ball, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_ball, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh_ball, 0, data->material_ball);
-
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_ball);
-
- evas_canvas3d_node_mesh_add(data->mesh_node_ball, data->mesh_ball);
-}
-
-static void
-_scene_setup(Scene_Data *data, Evas_Real r, int count)
-{
- Eina_List *l = NULL;
- Eo *item = NULL;
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add the root node for the scene. */
- data->root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_shadows_enable_set(data->scene, EINA_TRUE);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_ball_setup(data);
- _mesh_cube_setup(data);
-
- _create_cubes(data, r, count);
- _create_bondar(data, 20.0, 0.001, 20.0, 0.0, -2.0, 0.0, 1);
- _create_bondar(data, 0.5, 0.5, 20.5, -20.0, -1.5, 0.0, 0);
- _create_bondar(data, 0.5, 0.5, 20.5, 20.0, -1.5, 0.0, 0);
- _create_bondar(data, 20.5, 0.5, 0.5, 0.0, -1.5, -20.0, 0);
- _create_bondar(data, 20.5, 0.5, 0.5, 0.0, -1.5, 20.0, 0);
-
- EINA_LIST_FOREACH(data->items, l, item)
- nodes = eina_list_append(nodes, item);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-char score_buffer[32];
-
-static char *
-_score_get(int sc)
-{
- if (sc >= 0 && sc <= 10)
- {
- eina_convert_itoa(sc, score_buffer);
- return score_buffer;
- }
- return "0";
-}
-
-static Eina_Bool
-_animate_ball(void *data)
-{
- Scene_Data *scene = (Scene_Data *)data;
- Eina_List *l = NULL;
- Eo *node = NULL;
- Evas_Real x, y, z;
- Evas_Real xx, yy, zz;
- Evas_Real d_x, d_y, d_z;
- int i = 9;
-
- if (scene->items && game)
- {
- ball_vel_x = ball_ac_x;
- ball_vel_z = ball_ac_z;
- ball_position_x += ball_vel_x;
- ball_position_z += ball_vel_z;
- }
-
- if (reload == EINA_TRUE)
- elm_object_signal_emit(layout, "play", "efl_game");
-
- evas_canvas3d_node_position_set(scene->mesh_node_ball, ball_position_x, ball_position_y, ball_position_z);
-
- if ((ball_position_x < -21.0) || (ball_position_x > 21.0) || (ball_position_z < -21.0) || (ball_position_z > 21.0))
- {
- ball_position_y -= 2.0;
- ball_vel_x = 0;
- ball_vel_z = 0;
- game = EINA_FALSE;
-
- if (ball_position_y <= -200.0)
- {
- ball_position_x = 0.0;
- ball_position_y = -1.0;
- ball_position_z = 0.0;
-
- elm_object_signal_emit(layout, "defeat", "efl_game");
- reload = EINA_FALSE;
- }
- }
- else if ((ball_position_x >= 18.5) && (ball_position_x <= 21.5))
- {
- ball_position_y = 0.0;
- }
- else if ((ball_position_z >= 18.5) && (ball_position_z <= 21.5))
- {
- ball_position_y = 0.0;
- }
- else if ((ball_position_x <= -18.5) && (ball_position_x >= -21.5))
- {
- ball_position_y = 0.0;
- }
- else if ((ball_position_z <= -18.5) && (ball_position_z >= -21.5))
- {
- ball_position_y = 0.0;
- }
- else if (ball_position_y > -1.0)
- {
- ball_vel_y += ball_ac_y;
- ball_position_y += ball_vel_y;
- }
- else
- {
- ball_vel_y = 0;
- ball_position_y = -1.0;
- if (jump)
- {
- ball_position_y = -0.9;
- ball_vel_y += (1.0 / 5 * hight);
- jump = EINA_FALSE;
- hight = 1;
- }
- }
-
- evas_canvas3d_node_position_get(scene->mesh_node_ball, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
-
- EINA_LIST_FOREACH(scene->items, l, node)
- {
- evas_canvas3d_node_position_get(node, EVAS_CANVAS3D_SPACE_PARENT, &xx, &yy, &zz);
-
- d_x = xx - x;
- d_y = yy - y;
- d_z = zz - z;
-
- if (d_x < 2.0 && d_x > -2.0 && d_y < 2.0 && d_y > -2.0 && d_z < 2.0 && d_z > -2.0)
- {
- evas_canvas3d_node_member_del(scene->root_node, node);
- scene->items = eina_list_remove_list(scene->items, l);
-
- i--;
- score++;
- }
- }
- if (!scene->items)
- {
- elm_object_signal_emit(layout, "victory", "efl_game");
- ball_vel_x = 0;
- ball_vel_z = 0;
- reload = EINA_FALSE;
- }
-
- evas_object_text_text_set(text, _score_get(score));
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_animate_cubes(void *data)
-{
- static float angle = 0.0f;
- Eina_List *l = NULL;
- Eo *cube = NULL;
-
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += 0.5;
-
- EINA_LIST_FOREACH(scene->items, l, cube)
- evas_canvas3d_node_orientation_angle_axis_set(cube, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0)
- angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-EAPI_MAIN int
-elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
-{
- Scene_Data data;
- Eina_Bool r = EINA_TRUE;
-
- elm_config_accel_preference_set("3d");
- elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
-
- win = elm_win_util_standard_add("__WIN__", "Sphere Hunter");
- elm_win_autodel_set(win, EINA_TRUE);
-
- layout = elm_layout_add(win);
- elm_layout_file_set(layout, "sphere_hunter.edj", "game");
- evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(win, layout);
-
- text = evas_object_text_add(win);
- evas_object_text_font_set(text, "Sans", 75);
- elm_layout_content_set(layout, "swallow.score_text", text);
- evas_object_show(text);
-
- btn_restart = elm_button_add(win);
- elm_layout_content_set(layout, "swallow.reload", btn_restart);
- elm_object_text_set(btn_restart, "R E S T A R T L E V E L");
- evas_object_show(btn_restart);
-
- btn_quit = elm_button_add(win);
- elm_layout_content_set(layout, "swallow.exit", btn_quit);
- elm_object_text_set(btn_quit, "E X I T");
- evas_object_show(btn_quit);
-
- evas = evas_object_evas_get(win);
-
- _scene_setup(&data, 10.0, 10);
-
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_visible_set(image, EINA_TRUE);
- efl_canvas_scene3d_set(image, data.scene);
-
- evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- elm_layout_content_set(layout, "swallow.scene", image);
- evas_object_show(layout);
-
- r &= evas_object_key_grab(win, "w", 0, 0, EINA_TRUE);
- r &= evas_object_key_grab(win, "s", 0, 0, EINA_TRUE);
- r &= evas_object_key_grab(win, "d", 0, 0, EINA_TRUE);
- r &= evas_object_key_grab(win, "a", 0, 0, EINA_TRUE);
- r &= evas_object_key_grab(win, "n", 0, 0, EINA_TRUE);
- r &= evas_object_key_grab(win, "Up", 0, 0, EINA_TRUE);
- r &= evas_object_key_grab(win, "Down", 0, 0, EINA_TRUE);
- r &= evas_object_key_grab(win, "space", 0, 0, EINA_TRUE);
-
- elm_object_focus_set(layout, EINA_TRUE);
- evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN, _key_down, &data);
- evas_object_smart_callback_add(btn_restart, "clicked", _restart_level, &data);
- evas_object_smart_callback_add(btn_quit, "clicked", _quit_game, NULL);
-
- ecore_animator_frametime_set(0.008);
- anim_cube = ecore_animator_add(_animate_cubes, &data);
- anim_camera = ecore_animator_add(_animate_camera, &data);
- anim_ball = ecore_animator_add(_animate_ball, &data);
-
- evas_object_show(win);
-
- elm_run();
-
- ecore_animator_del(anim_cube);
- ecore_animator_del(anim_camera);
- ecore_animator_del(anim_ball);
-
- _sphere_fini();
-
- return 0;
-}
-ELM_MAIN()
diff --git a/src/examples/elementary/sphere_hunter/meson.build b/src/examples/elementary/sphere_hunter/meson.build
deleted file mode 100644
index 4ef08822ea..0000000000
--- a/src/examples/elementary/sphere_hunter/meson.build
+++ /dev/null
@@ -1,31 +0,0 @@
-examples = [
- 'evas_3d_sphere_hunter'
-]
-
-edc_files = [
- 'sphere_hunter.edc'
-]
-
-themes = []
-
-foreach edc_file : edc_files
- themes += custom_target('edje_cc_' + edc_file,
- depends : edje_depends,
- input : edc_file,
- output : '@BASENAME@.edj',
- command : edje_cc_exe + ['-beta',
- '-id', elementary_img_data,
- '-id', meson.current_source_dir(),
- '-fd', meson.current_source_dir(),
- '-sd', meson.current_source_dir(),
- '-vd', meson.current_source_dir(),
- '-dd', meson.current_source_dir(),
- '-md', meson.current_source_dir(),
- '-td', meson.current_source_dir(),
- '@INPUT@', '@OUTPUT@'],
- )
-endforeach
-
-foreach example : examples
- executable(example, [example + '.c'] + themes, dependencies: [elementary, ecore])
-endforeach
diff --git a/src/examples/elementary/sphere_hunter/score.jpg b/src/examples/elementary/sphere_hunter/score.jpg
deleted file mode 100644
index 49039a42c8..0000000000
--- a/src/examples/elementary/sphere_hunter/score.jpg
+++ /dev/null
Binary files differ
diff --git a/src/examples/elementary/sphere_hunter/sphere_hunter.edc b/src/examples/elementary/sphere_hunter/sphere_hunter.edc
deleted file mode 100644
index b0e20b4d22..0000000000
--- a/src/examples/elementary/sphere_hunter/sphere_hunter.edc
+++ /dev/null
@@ -1,251 +0,0 @@
-collections {
- group {
- name: "game";
- min: 704 800;
- images {
- image: "score.jpg" COMP;
- image: "img/bg_glow_in.png" COMP;
- image: "img/vgrad_med.png" COMP;
- image: "EFL_victory.png" COMP;
- image: "EFL_defeat.png" COMP;
- image: "img/screen_circular_shadow.png" COMP;
- }
- parts {
- part {
- name: "bg";
- type: SPACER;
- description {
- state: "default" 0.0;
- min: 704 800;
- }
- }
- part {
- name: "sp_left";
- type: SPACER;
- description {
- state: "default" 0.0;
- min: 2 50;
- max: 2 50;
- align: 0.0 0.0;
- }
- }
- part {
- name: "sp_right";
- type: SPACER;
- description {
- state: "default" 0.0;
- min: 2 50;
- max: 2 50;
- align: 1.0 1.0;
- }
- }
- part {
- name: "swallow.reload";
- type: SWALLOW;
- description {
- state: "default" 0.0;
- align: 0.5 0.0;
- min: 704 50;
- max: 9999 50;
- }
- }
- part {
- name: "swallow.exit";
- type: SWALLOW;
- description {
- state: "default" 0.0;
- align: 0.5 1.0;
- min: 704 50;
- max: 9999 50;
- }
- }
- part {
- name: "scene_bg";
- type: RECT;
- description {
- state: "default" 0.0;
- color: 0 200 200 255;
- rel1.to: "sp_left";
- rel1.relative: 1.0 1.0;
- rel2.to: "sp_right";
- rel2.relative: 0.0 0.0;
- }
- }
- part {
- name: "swallow.scene";
- type: SWALLOW;
- description {
- state: "default" 0.0;
- min: 700 700;
- max: 1024 1024;
- rel1.to: "scene_bg";
- rel2.to: "scene_bg";
- }
- }
- part {
- name: "score_bg";
- type: SPACER;
- description {
- state: "default" 0.0;
- min: 150 200;
- max: 150 200;
- align: 0.0 0.0;
- rel1.to: "scene_bg";
- rel2.to: "scene_bg";
- }
- }
- part {
- name: "score_img";
- type: IMAGE;
- description {
- state: "default" 0.0;
- min: 150 75;
- max: 150 75;
- align: 0.5 0.0;
- image.normal: "score.jpg";
- rel1.to: "score_bg";
- rel2.to: "score_bg";
- }
- }
- part {
- name: "score_border";
- type: IMAGE;
- description {
- state: "default" 0.0;
- align: 0.5 0.0;
- min: 150 75;
- max: 150 75;
- image.normal: "img/bg_glow_in.png";
- rel1.to: "score_bg";
- rel2.to: "score_bg";
- }
- }
- part {
- name: "score";
- type: RECT;
- description {
- state: "default" 0.0;
- min: 150 125;
- max: 150 125;
- align: 0.0 1.0;
- color: 0 200 200 255;
- rel1.to: "score_bg";
- rel2.to: "score_bg";
- }
- }
- part {
- name: "swallow.score_text";
- type: SWALLOW;
- description {
- state: "default" 0.0;
- min: 90 125;
- max: 90 125;
- rel1.to: "score";
- rel2.to: "score";
- }
- }
- part {
- name: "score_text_border";
- type: IMAGE;
- description {
- state: "default" 0.0;
- min: 150 125;
- max: 150 125;
- image.normal: "img/bg_glow_in.png";
- rel1.to: "score";
- rel2.to: "score";
- }
- }
- part {
- name: "score_vgrad";
- type: IMAGE;
- description {
- state: "default" 0.0;
- min: 150 5;
- max: 150 5;
- align: 1.0 1.0;
- image.normal: "img/vgrad_med.png";
- rel1.to: "score_img";
- rel2.to: "score_img";
- }
- }
- part {
- name: "scene_border";
- type: IMAGE;
- description {
- state: "default" 0.0;
- min: 700 700;
- max: 700 700;
- visible: 0;
- image.normal: "img/screen_circular_shadow.png";
- rel1.to: "scene_bg";
- rel2.to: "scene_bg";
- }
- description {
- state: "play" 0.0;
- inherit: "default";
- visible: 1;
- }
- }
- part {
- name: "image";
- type: IMAGE;
- description {
- state: "default" 0.0;
- min: 600 250;
- max: 600 250;
- align: 0.5 0.45;
- visible: 0;
- }
- description {
- state: "victory" 0.0;
- inherit: "default";
- visible: 1;
- image.normal: "EFL_victory.png";
- }
- description {
- state: "defeat" 0.0;
- inherit: "default";
- visible: 1;
- image.normal: "EFL_defeat.png";
- }
- }
- }
- programs {
- program {
- name: "victory";
- signal: "victory";
- source: "efl_game";
- action: STATE_SET "victory" 0.0;
- target: "image";
- after: "shadow_off";
- }
- program {
- name: "defeat";
- signal: "defeat";
- source: "efl_game";
- action: STATE_SET "defeat" 0.0;
- target: "image";
- after: "shadow_off";
- }
- program {
- name: "game";
- signal: "play";
- source: "efl_game";
- action: STATE_SET "default" 0.0;
- target: "image";
- after: "shadow_on";
- }
- program {
- name: "shadow_on";
- action: STATE_SET "default" 0.0;
- target: "scene_border";
- }
- program {
- name: "shadow_off";
- action: STATE_SET "play" 0.0;
- target: "scene_border";
- }
- }
- }
-}
diff --git a/src/examples/elementary/toolbar_cxx_example_01.cc b/src/examples/elementary/toolbar_cxx_example_01.cc
index d6ecc44e79..87fdb1c4ec 100644
--- a/src/examples/elementary/toolbar_cxx_example_01.cc
+++ b/src/examples/elementary/toolbar_cxx_example_01.cc
@@ -20,8 +20,6 @@
#include "config.h"
#endif
-#warning This example requires yet unfinished EO APIs
-
#ifndef EFL_BETA_API_SUPPORT
#define EFL_BETA_API_SUPPORT
#endif
diff --git a/src/examples/elementary/transit_example_03.c b/src/examples/elementary/transit_example_03.c
index a183201350..cea2d5b624 100644
--- a/src/examples/elementary/transit_example_03.c
+++ b/src/examples/elementary/transit_example_03.c
@@ -152,13 +152,13 @@ _cb_tween_changed(void *data, Evas_Object *obj, void *event EINA_UNUSED)
double val = 0.0;
val = elm_spinner_value_get(obj);
- if (val == 1.0)
+ if (EINA_DBL_EQ(val, 1.0))
*mode = ELM_TRANSIT_TWEEN_MODE_LINEAR;
- else if (val == 2.0)
+ else if (EINA_DBL_EQ(val, 2.0))
*mode = ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL;
- else if (val == 3.0)
+ else if (EINA_DBL_EQ(val, 3.0))
*mode = ELM_TRANSIT_TWEEN_MODE_DECELERATE;
- else if (val == 4.0)
+ else if (EINA_DBL_EQ(val, 4.0))
*mode = ELM_TRANSIT_TWEEN_MODE_ACCELERATE;
}
diff --git a/src/examples/evas/README b/src/examples/evas/README
index 6933808678..87aa4fe38a 100644
--- a/src/examples/evas/README
+++ b/src/examples/evas/README
@@ -71,35 +71,3 @@ evas-map-aa-eo.c - Eo API
evas-vg-simple.c - Introduction to vector graphics
evas-vg-batman.c - Animated vector graphics
evas-vg-json.c - Play Lottie files
-
-
-== 3D Graphics - Basics ==
-
- evas-gl.c - Introduction to GL in Evas
- evas-3d-cube.c - Introduction to meshes for 3D objects
- evas-3d-cube-rotate.c - Introduction to events for 3D objects
- evas-3d-proxy.c - Introduction to textures for 3D objects
- evas-3d-shadows.c - Introduction to lighting and anti-aliasing
-
-
-== 3D Graphics - File formats ==
-
- evas-3d-eet.c - eet file format
- evas-3d-md2.c - md2 file format
- evas-3d-obj.c - obj file format
- evas-3d-ply.c - ply file format
- evas-3d-mmap-set.c - Import meshes from various file formats
-
-
-== 3D Graphics - Advanced Topics ==
-
- evas-3d-aabb.c - Axis aligned bounding boxes
- evas-3d-blending.c - Blending modes
- evas-3d-pick.c - Picking nodes and meshes by screen coordinates
- evas-3d-colorpick.c - Picking nodes and meshes by color
- evas-3d-cube2.c - Animation
- evas-3d-fog.c - Fog effect
- evas-3d-static-lod.c - Static LOD techniques
- evas-3d-frustum.c - Frustrum culling
- evas-3d-hull.c - Convex hull models and comparison with Blender
- evas-3d-parallax-occlusion.c - Parallax occlusion shading and texture animation
diff --git a/src/examples/evas/efl-canvas-animation.c b/src/examples/evas/efl-canvas-animation.c
index cc24550dea..a9058c50d6 100644
--- a/src/examples/evas/efl-canvas-animation.c
+++ b/src/examples/evas/efl-canvas-animation.c
@@ -114,7 +114,7 @@ main(void)
Evas_Object *scale_rect = _new_rectangle_add(d.evas);
efl_gfx_entity_geometry_set(scale_rect, EINA_RECT(50, 50, 50, 50));
efl_canvas_object_animation_start(scale_rect,
- efl_new(EFL_CANVAS_ANIMATION_SCALE_CLASS,
+ efl_new(EFL_CANVAS_SCALE_ANIMATION_CLASS,
efl_animation_scale_set(efl_added, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(3.0, 3.0), scale_rect, EINA_VECTOR2(0.5, 0.5)),
efl_animation_start_delay_set(efl_added, 5.0),
efl_animation_duration_set(efl_added, 2.0),
@@ -125,7 +125,7 @@ main(void)
Evas_Object *scale_rect2 = _new_rectangle_add(d.evas);
efl_gfx_entity_geometry_set(scale_rect2, EINA_RECT(50, 200, 50, 50));
efl_canvas_object_animation_start(scale_rect2,
- efl_new(EFL_CANVAS_ANIMATION_SCALE_CLASS,
+ efl_new(EFL_CANVAS_SCALE_ANIMATION_CLASS,
efl_animation_scale_set(efl_added, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(3.0, 3.0), scale_rect2, EINA_VECTOR2(0.5, 0.5)),
efl_animation_duration_set(efl_added, 2.0),
efl_animation_play_count_set(efl_added, 0),
@@ -136,7 +136,7 @@ main(void)
Evas_Object *scale_rect3 = _new_rectangle_add(d.evas);
efl_gfx_entity_geometry_set(scale_rect3, EINA_RECT(50, 350, 50, 50));
efl_canvas_object_animation_start(scale_rect3,
- efl_new(EFL_CANVAS_ANIMATION_SCALE_CLASS,
+ efl_new(EFL_CANVAS_SCALE_ANIMATION_CLASS,
efl_animation_scale_set(efl_added, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(3.0, 3.0), scale_rect3, EINA_VECTOR2(0.5, 0.5)),
efl_animation_duration_set(efl_added, 2.0),
efl_animation_play_count_set(efl_added, 4),
@@ -147,7 +147,7 @@ main(void)
Evas_Object *scale_rect4 = _new_rectangle_add(d.evas);
efl_gfx_entity_geometry_set(scale_rect4, EINA_RECT(200, 50, 50, 50));
efl_canvas_object_animation_start(scale_rect4,
- efl_new(EFL_CANVAS_ANIMATION_SCALE_CLASS,
+ efl_new(EFL_CANVAS_SCALE_ANIMATION_CLASS,
efl_animation_scale_set(efl_added, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(3.0, 3.0), scale_rect4, EINA_VECTOR2(0.5, 0.5)),
efl_animation_duration_set(efl_added, 2.0),
efl_animation_final_state_keep_set(efl_added, EINA_TRUE)
@@ -159,7 +159,7 @@ main(void)
efl_gfx_color_set(scale_rect5, 255, 0, 0, 255);
efl_gfx_entity_geometry_set(scale_rect5, EINA_RECT(200, 200, 50, 50));
efl_canvas_object_animation_start(scale_rect5,
- efl_new(EFL_CANVAS_ANIMATION_SCALE_CLASS,
+ efl_new(EFL_CANVAS_SCALE_ANIMATION_CLASS,
efl_animation_scale_set(efl_added, EINA_VECTOR2(1.0, 1.0), EINA_VECTOR2(5.0, 5.0), scale_rect5, EINA_VECTOR2(0.5, 0.5)),
efl_animation_duration_set(efl_added, 5.0),
efl_animation_play_count_set(efl_added, 0)
diff --git a/src/examples/evas/efl-canvas-vg-simple.c b/src/examples/evas/efl-canvas-vg-simple.c
index 79a9645890..15d74aea86 100644
--- a/src/examples/evas/efl-canvas-vg-simple.c
+++ b/src/examples/evas/efl-canvas-vg-simple.c
@@ -411,7 +411,7 @@ _interpolation_keyframe(void *data EINA_UNUSED, double pos)
eina_list_nth(d.shape_list, next),
ecore_animator_pos_map(pos, ECORE_POS_MAP_SINUSOIDAL, 0.0, 0.0));
- if (pos == 1.0)
+ if (EINA_DBL_EQ(pos, 1.0))
{
anim_index = (anim_index == 1) ? 0 : 1;
animator = ecore_animator_timeline_add(1, _interpolation_keyframe, NULL);
diff --git a/src/examples/evas/evas-3d-aabb.c b/src/examples/evas/evas-3d-aabb.c
deleted file mode 100644
index 99e3b98cce..0000000000
--- a/src/examples/evas/evas-3d-aabb.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- * Example of getting and drawing an axis-aligned bounding box in Evas-3D.
- *
- * @see _redraw_aabb();
- * Rotate axes (keys 1-4) for model and bounding box view from another angle.
- *
- * @verbatim
- * gcc -o evas-3d-aabb evas-3d-aabb.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#define WIDTH 400
-#define HEIGHT 400
-
-static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2";
-static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sonic.png";
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-Eo *cube = NULL;
-Eo *scene = NULL;
-Eo *root_node = NULL;
-Eo *camera_node = NULL;
-Eo *light_node = NULL;
-Eo *camera = NULL;
-Eo *mesh_node = NULL;
-Eo *mesh_box_node = NULL;
-Eo *mesh = NULL;
-Eo *mesh_box = NULL;
-Eo *material_box = NULL;
-Eo *material = NULL;
-Eo *texture = NULL;
-Eo *light = NULL;
-
-static Eina_Bool
-_redraw_aabb();
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static int frame = 0;
-
- evas_canvas3d_node_mesh_frame_set((Evas_Canvas3D_Node *)data, mesh, frame);
-
- _redraw_aabb();
-
- frame += 32;
-
- if (frame > 256 * 50) frame = 0;
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Evas_Event_Key_Down *ev = event_info;
- Evas_Canvas3D_Node *node = (Evas_Canvas3D_Node *)data;
-
- switch(atoi(ev->key))
- {
- case 1:
- {
- evas_canvas3d_node_orientation_angle_axis_set(node, 90, 1.0, 0.0, 0.0);
- break;
- }
- case 2:
- {
- evas_canvas3d_node_orientation_angle_axis_set(node, 90, 0.0, 1.0, 0.0);
- break;
- }
- case 3:
- {
- evas_canvas3d_node_orientation_angle_axis_set(node, 90, 0.0, 0.0, 1.0);
- break;
- }
- case 4:
- {
- evas_canvas3d_node_orientation_angle_axis_set(node, 90, 1.0, 1.0, 0.0);
- break;
- }
- }
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_redraw_aabb()
-{
- Evas_Real x0, y0, z0, x1, y1, z1;
-
- evas_canvas3d_node_bounding_box_get(mesh_node, &x0, &y0, &z0, &x1, &y1, &z1);
- evas_canvas3d_node_position_set(mesh_box_node, (x0 + x1)/2, (y0 + y1)/2, (z0 + z1)/2);
- evas_canvas3d_node_scale_set(mesh_box_node, x1 - x0, y1 - y0, z1 - z0);
-
- return EINA_TRUE;
-}
-
-int
-main(void)
-{
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new("opengl_x11", 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 60.0, 1.0, 1.0, 500.0);
-
- camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_member_add(root_node, camera_node);
- evas_canvas3d_node_position_set(camera_node, 100.0, 50.0, 20.0);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_directional_set(light, EINA_TRUE);
-
- light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(light_node, light);
- evas_canvas3d_node_position_set(light_node, 1000.0, 0.0, 1000.0);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, light_node);
-
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- efl_file_simple_load(mesh, model_path, NULL);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-
- texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(texture, image_path, NULL);
- evas_canvas3d_texture_filter_set(texture, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.01, 0.01, 0.01, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- mesh_box_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- material_box = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_material_enable_set(material_box, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
-
- cube = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(cube, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
-
- mesh_box = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(mesh_box, 0, cube);
- evas_canvas3d_mesh_vertex_assembly_set(mesh_box, EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES);
- evas_canvas3d_mesh_shader_mode_set(mesh_box, EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR);
- evas_canvas3d_mesh_frame_material_set(mesh_box, 0, material_box);
- _redraw_aabb();
-
- evas_canvas3d_node_member_add(root_node, mesh_box_node);
- evas_canvas3d_node_mesh_add(mesh_box_node, mesh_box);
-
- evas_canvas3d_node_member_add(root_node, mesh_node);
- evas_canvas3d_node_mesh_add(mesh_node, mesh);
-
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
-
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
- evas_object_focus_set(image, EINA_TRUE);
- efl_canvas_scene3d_set(image, scene);
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, mesh_node);
-
- ecore_timer_add(0.01, _animate_scene, mesh_node);
-
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-blending.c b/src/examples/evas/evas-3d-blending.c
deleted file mode 100644
index 066961af72..0000000000
--- a/src/examples/evas/evas-3d-blending.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/**
- * Example of different blending modes in Evas-3D.
- *
- * Press "Up" or "Down" key for change source blending factor.
- * Press "Left" or "Right" for change destination blending factors.
- * For more details see https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml
- *
- * @verbatim
- * gcc -o evas-3d-blending evas-3d-blending.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-
-#define WIDTH 1024
-#define HEIGHT 1024
-
-static const char *blend_func_names[] =
-{
- /**< The scale factors for color components is (0, 0, 0, 0)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ZERO",
- /**< The scale factors for color components is (1, 1, 1, 1)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ONE",
- /**< The scale factors for color components is (Rs/kR, Gs/kG, Bs/kB, As/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_SRC_COLOR",
- /**< The scale factors for color components is (1, 1, 1, 1) - (Rs/kR, Gs/kG, Bs/kB, As/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_COLOR",
- /**< The scale factors for color components is (Rd/kR, Gd/kG, Bd/kB, Ad/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_DST_COLOR",
- /**< The scale factors for color components is (1, 1, 1, 1) - (Rd/kR, Gd/kG, Bd/kB, Ad/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_DST_COLOR",
- /**< The scale factors for color components is (As/kA, As/kA, As/kA, As/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA",
- /**< The scale factors for color components is (1, 1, 1, 1) - (As/kA, As/kA, As/kA, As/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_ALPHA",
- /**< The scale factors for color components is (Ad/kA, Ad/kA, Ad/kA, Ad/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_DST_ALPHA",
- /**< The scale factors for color components is (1, 1, 1, 1) - (Ad/kA, Ad/kA, Ad/kA, Ad/kA)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_DST_ALPHA",
- /**< The scale factors for color components is (Rc, Gc, Bc, Ac)*/
- "EVAS_CANVAS3D_BLEND_FUNC_CONSTANT_COLOR",
- /**< The scale factors for color components is (1, 1, 1, 1) - (Rc, Gc, Bc, Ac)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_CONSTANT_COLOR",
- /**< The scale factors for color components is (Ac, Ac, Ac, Ac)*/
- "EVAS_CANVAS3D_BLEND_FUNC_CONSTANT_ALPHA",
- /**< The scale factors for color components is (1, 1, 1, 1) - (Ac, Ac, Ac, Ac)*/
- "EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_CONSTANT_ALPHA",
- /**< The scale factors for color components is (i, i, i, 1) where i = min(As, kA, Ad)/kA*/
- "EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA_SATURATE",
-};
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
- Eo *mesh_node1;
-
- Eo *camera;
- Eo *light;
- Eo *mesh;
- Eo *mesh1;
- Eo *sphere;
- Eo *material;
- Eo *material1;
-} Scene_Data;
-
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-
-int func1 = EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA;
-int func2 = EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_ALPHA;
-
-static void
-_on_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Scene_Data *scene = (Scene_Data *)data;
- Evas_Event_Key_Down *ev = event_info;
-
- if (!strcmp("Up", ev->key))
- func1++;
- if (!strcmp("Down", ev->key))
- func1--;
- if (!strcmp("Left", ev->key))
- func2++;
- if (!strcmp("Right", ev->key))
- func2--;
-
- if(func1 < EVAS_CANVAS3D_BLEND_FUNC_ZERO)
- func1 = EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA_SATURATE;
- if(func1 > EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA_SATURATE)
- func1 = EVAS_CANVAS3D_BLEND_FUNC_ZERO;
-
- if(func2 < EVAS_CANVAS3D_BLEND_FUNC_ZERO)
- func2 = EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA_SATURATE;
- if(func2 > EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA_SATURATE)
- func2 = EVAS_CANVAS3D_BLEND_FUNC_ZERO;
- evas_canvas3d_mesh_blending_func_set(scene->mesh1, func1, func2);
- printf("sfactor = %s, dfactor = %s\n", blend_func_names[func1], blend_func_names[func2]);
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
-
- evas_object_resize(background, w, h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += 0.02;
-
- evas_canvas3d_node_position_set(scene->mesh_node, 3 * sin(angle), 0.0, 3 * cos(angle));
-
- if (angle > 2 * M_PI) angle = 0;
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 60.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
-
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_set_ball(Eo *mesh, Eo *sphere, Evas_Canvas3D_Material *material)
-{
- evas_canvas3d_mesh_from_primitive_set(mesh, 0, sphere);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 1.0, 0.2, 0.2, 0.2);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 0.0, 0.0, 0.2);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 0.2);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- data->material1 = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.0, 0.2, 0.2, 0.2);
- evas_canvas3d_material_color_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.0, 0.0, 1.0, 0.2);
- evas_canvas3d_material_color_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 0.2);
- evas_canvas3d_material_shininess_set(data->material1, 100.0);
-
- data->sphere = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->sphere, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(data->sphere, 50);
-
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- data->mesh1 = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
-
- _set_ball(data->mesh, data->sphere, data->material);
- _set_ball(data->mesh1, data->sphere, data->material1);
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
-
- data->mesh_node1 =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node1);
- evas_canvas3d_node_mesh_add(data->mesh_node1, data->mesh1);
-
- evas_canvas3d_mesh_blending_enable_set(data->mesh1, EINA_TRUE);
- evas_canvas3d_mesh_blending_func_set(data->mesh1, func1, func2);
-
- evas_canvas3d_node_scale_set(data->mesh_node, 2.0, 2.0, 2.0);
-
- evas_canvas3d_node_scale_set(data->mesh_node1, 5.0, 5.0, 5.0);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.5, 0.5, 0.5, 1);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- Scene_Data data;
- Ecore_Animator *anim;
- Ecore_Evas *ecore_evas = NULL;
-
- if (!ecore_evas_init()) return 0;
-
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
- ecore_evas = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = evas_object_rectangle_add(evas);
- evas_object_color_set(background, 0, 0, 0, 255);
- evas_object_move(background, 0, 0);
- evas_object_resize(background, WIDTH, HEIGHT);
- evas_object_show(background);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- evas_object_move(image, 0, 0);
- evas_object_resize(image, WIDTH, HEIGHT);
- evas_object_show(image);
- evas_object_focus_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Add animation timer callback. */
- ecore_animator_frametime_set(0.008);
- anim = ecore_animator_add(_animate_scene, &data);
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, &data);
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
- ecore_animator_del(anim);
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-colorpick.c b/src/examples/evas/evas-3d-colorpick.c
deleted file mode 100644
index 138ceb089a..0000000000
--- a/src/examples/evas/evas-3d-colorpick.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/**
- * Example of finding nodes by color or geometry in an Evas-3D scene.
- *
- * Enable color pick mode of meshes and scene objects.
- * Click (left for color pick, right for geometry pick) on 3D object and see
- * in terminal time response of the found node.
- * Use key UP/DOWN for changing z coordinate of camera
- * Use key LEFT/RIGHT for scale each node
- * Use shortcut parameters of commandline: r - rows of objects, c - columns of objects,
- * p - precision of the spheres, t - path for a texture.
- *
- * @verbatim
- * gcc -o evas-3d-colorpick evas-3d-colorpick.c `pkg-config --libs --cflags evas ecore ecore-evas eo eina efl` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Ecore_Getopt.h>
-#include <math.h>
-#include "evas-common.h"
-
-#define WIDTH 800
-#define HEIGHT 600
-
-#define INIT_SCALE 7.5
-#define BIG_SCALE 10.0
-#define SMALL_SCALE 5.0
-#define SCALE_UNIT 0.5
-#define VEC_3(value) value, value, value
-
-static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/wood.jpg";
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Evas_Object *image = NULL, *bg = NULL;
-
-static const
-Ecore_Getopt optdesc = {
- "",
- NULL,
- "0.0",
- "",
- "",
- "Example mesh color pick mechanism",
- 0,
- {
- ECORE_GETOPT_STORE_INT('r', "row", "Rows of spheres"),
- ECORE_GETOPT_STORE_INT('c', "column", "Columns of spheres"),
- ECORE_GETOPT_STORE_INT('p', "precision", "Precision of spheres"),
- ECORE_GETOPT_STORE_STR('t', "texture", "Name of texture"),
- ECORE_GETOPT_HELP('h', "help"),
- ECORE_GETOPT_SENTINEL
- }
-};
-
-typedef struct _Object
-{
- Eo *primitive;
- Eo *node;
- Eo *mesh;
- Eo *material;
- Eo *texture;
-
- Evas_Real speed;
- Ecore_Timer *animate;
- Eina_Bool (*sphere_init)(void *sphere, const char *texture);
- Eina_Bool (*sphere_animate)(void *data);
-
-} Test_object;
-
-typedef struct _Scene
-{
- Eo *camera;
- Eo *light;
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
-
- int row;
- int col;
- int precision;
-
- Eina_List *spheres;
-
- Eina_Bool (*scene_init)(const char *texture);
-
-} Scene_Data;
-
-Scene_Data globalscene;
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- Eina_List *l;
- Test_object * item;
- EINA_LIST_FOREACH(globalscene.spheres, l, item)
- {
- free(item);
- }
- eina_list_free(globalscene.spheres);
-
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(bg, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_sphere(void *data)
-{
- static int angle = 0.0;
- Eo *n = (Eo*)(((Test_object *)data)->node);
- Evas_Real s = ((Test_object *)data)->speed;
-
- evas_canvas3d_node_orientation_angle_axis_set(n, angle, s, s - 1, s + 1);
- angle++;
- if (angle > 360) angle = 0.0;
-
- return EINA_TRUE;
-}
-
-void _recalculate_position()
-{
- int i = 0, j = 0, count = 0;
- Evas_Real x1, y1, shiftx = 0, shifty = 0;
- Test_object *m;
-
- evas_canvas3d_object_update(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node);
- evas_canvas3d_node_bounding_box_get(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node, NULL, NULL, NULL, &x1, &y1, NULL);
-
- for (i = 0; i < globalscene.row; ++i)
- {
- shiftx = (i * 2 - globalscene.row) * x1;
- for(j = 0; j < globalscene.col; ++j)
- {
- shifty = (j * 2 - globalscene.col) * y1;
- m = (Test_object *)eina_list_nth(globalscene.spheres, count);
- evas_canvas3d_node_position_set(m->node, shifty, 0.0, shiftx);
- count++;
- }
- }
-}
-
-static void
-_on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Evas_Event_Key_Down *ev = event_info;
- Evas_Real x, y, z;
- Eina_List *l;
- Test_object * item;
-
- if (!strcmp(ev->key, "Down"))
- {
- evas_canvas3d_node_position_get(globalscene.camera_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(globalscene.camera_node, x, y, (z - 5));
- }
- else if (!strcmp(ev->key, "Up"))
- {
- evas_canvas3d_node_position_get(globalscene.camera_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(globalscene.camera_node, x, y, (z + 5));
- }
- else if (!strcmp(ev->key, "Left"))
- {
- evas_canvas3d_node_scale_get(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- EINA_LIST_FOREACH(globalscene.spheres, l, item)
- {
- evas_canvas3d_node_scale_set(item->node, (x - SCALE_UNIT), (y - SCALE_UNIT), (z - SCALE_UNIT));
- }
- _recalculate_position();
- }
- else if (!strcmp(ev->key, "Right"))
- {
- evas_canvas3d_node_scale_get(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- EINA_LIST_FOREACH(globalscene.spheres, l, item)
- {
- evas_canvas3d_node_scale_set(item->node, (x + SCALE_UNIT), (y + SCALE_UNIT), (z + SCALE_UNIT));
- }
- _recalculate_position();
- }
- else
- printf("Down, Up for position of camera; Left, Right for scale of each node");
-}
-
-static void
-_on_mouse_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Evas_Real s, t;
- clock_t time;
- float diff_sec;
-
- time = clock();
- Eina_Bool flag;
- if (ev->button == 1)
- {
- evas_canvas3d_scene_color_pick_enable_set(globalscene.scene, EINA_TRUE);
- flag = evas_canvas3d_scene_pick(globalscene.scene, ev->canvas.x, ev->canvas.y, &n, &m, NULL, NULL);
- time = clock() - time;
- diff_sec = ((float)time) / CLOCKS_PER_SEC / 10;
- if (flag)
- {
- printf("Boom! Time expended for color pick: %2.7f .\n", diff_sec);
- evas_canvas3d_node_scale_set(n, VEC_3(SMALL_SCALE));
- }
- }
- else
- {
- evas_canvas3d_scene_color_pick_enable_set(globalscene.scene, EINA_FALSE);
- flag = evas_canvas3d_scene_pick(globalscene.scene, ev->canvas.x, ev->canvas.y, &n, &m, &s, &t);
- time = clock() - time;
- diff_sec = ((float)time) / CLOCKS_PER_SEC / 10;
- if (flag)
- {
- printf("Boom! Time expended for geometry pick: %2.7f .\n", diff_sec);
- evas_canvas3d_node_scale_set(n, VEC_3(BIG_SCALE));
- }
- }
-}
-
-Eina_Bool
-_init_sphere(void *this, const char *texture)
-{
- Test_object *sphere = (Test_object *)this;
-
- sphere->primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- sphere->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- sphere->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_primitive_form_set(sphere->primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(sphere->primitive, 50);
- evas_canvas3d_mesh_from_primitive_set(sphere->mesh, 0, sphere->primitive);
- evas_canvas3d_mesh_frame_material_set(sphere->mesh, 0, sphere->material);
- evas_canvas3d_mesh_shader_mode_set(sphere->mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-
- evas_canvas3d_mesh_color_pick_enable_set(sphere->mesh, EINA_TRUE);
-
- sphere->texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(sphere->texture, texture, NULL);
- evas_canvas3d_texture_filter_set(sphere->texture, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(sphere->texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- evas_canvas3d_material_texture_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, sphere->texture);
- evas_canvas3d_material_enable_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.01, 0.01, 0.01, 1.0);
- evas_canvas3d_material_color_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(sphere->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(sphere->material, 50.0);
-
- return EINA_TRUE;
-}
-
-Eina_Bool
-_init_scene(const char *texture)
-{
- int i = 0;
- Evas_Real tmp;
- Test_object *m;
-
- globalscene.scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- globalscene.root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- globalscene.camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(globalscene.camera, 30.0, 1.0, 1.0, 1000.0);
-
- globalscene.camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(globalscene.camera_node, globalscene.camera);
- evas_canvas3d_node_member_add(globalscene.root_node, globalscene.camera_node);
- evas_canvas3d_node_position_set(globalscene.camera_node, 0.0, 30.0, 800.0);
- evas_canvas3d_node_look_at_set(globalscene.camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, -1000.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- globalscene.light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(globalscene.light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(globalscene.light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(globalscene.light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_directional_set(globalscene.light, EINA_TRUE);
-
- globalscene.light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(globalscene.light_node, globalscene.light);
- evas_canvas3d_node_position_set(globalscene.light_node, 100.0, 50.0, 300.0);
- evas_canvas3d_node_look_at_set(globalscene.light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 1.0, 1.0, 1.0);
- evas_canvas3d_node_member_add(globalscene.root_node, globalscene.light_node);
-
- tmp = 0.01;
- for (i = 0; i < globalscene.col * globalscene.row; i++)
- {
- Test_object *spheretmp;
-
- m = malloc(sizeof(Test_object));
- m->sphere_init = _init_sphere;
- if (!i)
- m->sphere_init(m, texture);
- else
- {
- spheretmp = (Test_object *)eina_list_nth(globalscene.spheres, 0);
- m->mesh = spheretmp->mesh;
- m->material = spheretmp->material;
- m->texture = spheretmp->texture;
- }
- m->node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- m->speed = tmp;
- m->sphere_animate = _animate_sphere;
- m->animate = ecore_timer_add(m->speed, m->sphere_animate, m);
- evas_canvas3d_node_member_add(globalscene.root_node, m->node);
- evas_canvas3d_node_mesh_add(m->node, m->mesh);
- evas_canvas3d_node_scale_set(m->node, VEC_3(INIT_SCALE));
- globalscene.spheres = eina_list_append(globalscene.spheres, m);
- tmp += 0.01;
- }
-
- _recalculate_position();
-
- evas_canvas3d_scene_root_node_set(globalscene.scene, globalscene.root_node);
- evas_canvas3d_scene_camera_node_set(globalscene.scene, globalscene.camera_node);
- evas_canvas3d_scene_size_set(globalscene.scene, WIDTH, HEIGHT);
-
- return EINA_TRUE;
-}
-
-int main(int argc, char **argv)
-{
- int row = 0, col = 0, precision = 0;
- char *texture = NULL;
- Eina_Bool r;
-
- Ecore_Getopt_Value values[] = {
- ECORE_GETOPT_VALUE_INT(row),
- ECORE_GETOPT_VALUE_INT(col),
- ECORE_GETOPT_VALUE_INT(precision),
- ECORE_GETOPT_VALUE_STR(texture),
- ECORE_GETOPT_VALUE_NONE
- };
-
- if (!ecore_evas_init()) return 0;
- if (!ecore_init()) return 0;
-
- ecore_getopt_parse(&optdesc, values, argc, argv);
-
- if (!row) row = 2;
- if (!col) col = 5;
- if (!precision) precision = 30;
- if (!texture) texture = (char *)image_path;
-
- printf("row - %d, col - %d, precision of spheres - %d, texture - %s\n",
- row, col, precision, texture);
-
- ecore_evas = ecore_evas_new("opengl_x11", 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- bg = evas_object_rectangle_add(evas);
- evas_object_color_set(bg, 100, 100, 100, 255);
- evas_object_move(bg, 0, 0);
- evas_object_resize(bg, WIDTH, HEIGHT);
- evas_object_show(bg);
-
- globalscene.scene_init = _init_scene;
- globalscene.row = row;
- globalscene.col = col;
- globalscene.precision = precision;
- globalscene.scene_init(texture);
-
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
-
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
- evas_object_focus_set(image, EINA_TRUE);
- efl_canvas_scene3d_set(image, globalscene.scene);
-
- r = evas_object_key_grab(image, "Down", 0, 0, EINA_TRUE);
- r = evas_object_key_grab(image, "Up", 0, 0, EINA_TRUE);
- r = evas_object_key_grab(image, "Left", 0, 0, EINA_TRUE);
- r = evas_object_key_grab(image, "Right", 0, 0, EINA_TRUE);
-
- (void) r;
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, NULL);
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, NULL);
-
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-cube-rotate.c b/src/examples/evas/evas-3d-cube-rotate.c
deleted file mode 100644
index d5b89b3037..0000000000
--- a/src/examples/evas/evas-3d-cube-rotate.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/**
- * Example of using mouse callback events for node rotation in Evas-3D.
- *
- * After clicking the mouse on cube callbacks began to emit automatically,
- * depending on mouse's position change the cube rotates with a certain
- * speed while mouse is still on the cube, also rotation slows down when
- * leaving the boundaries of the cube, all this goes on while the mouse
- * is pressed. Note, that rotation is taking place around one axis only.
- *
- * @verbatim
- * gcc -o evas-3d-cube-rotate evas-3d-cube-rotate.c -g `pkg-config --libs --cflags evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Evas.h>
-#include <Eo.h>
-
-#define WIDTH 400
-#define HEIGHT 400
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
-
- Eo *camera;
- Eo *light;
- Eo *cube;
- Eo *mesh;
- Eo *material;
- float angle;
- Evas_Coord mouse_old_x;
- int mouse_diff_x;
- int mouse_indicator;
-} Scene_Data;
-
-Eo *scene = NULL;
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-static float angle = 0.0f;
-float d_angle = 0.5;
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
-
- evas_object_resize(background, w, h);
- evas_object_resize(image, w, h);
- evas_object_move(image, 0, 0);
-}
-
-static Eina_Bool
-_continue_scene(void *data)
-{
- Scene_Data *d = (Scene_Data *)data;
-
- if (d->mouse_indicator == 1)
- {
- evas_event_feed_mouse_down(evas, 1, EVAS_BUTTON_NONE, 0, &data);
- }
-
- return EINA_TRUE;
-}
-
-static void
-_rotate_x_reload(Evas_Canvas3D_Scene *eo_scene, Evas_Event_Mouse_Down *ev, Evas_Canvas3D_Node *node, Evas_Canvas3D_Mesh *mesh,
- float *angle_diff, Evas_Coord *mouse_coord)
-{
- Evas_Canvas3D_Node *n = NULL;
- Evas_Canvas3D_Mesh *m = NULL;
- Evas_Real s, t;
- int mouse_diff;
-
- evas_canvas3d_scene_pick(eo_scene, ev->canvas.x, ev->canvas.y, &n, &m, &s, &t);
-
- if ((n == node) && (m == mesh))
- {
- mouse_diff = ev->canvas.x - (*mouse_coord);
- *mouse_coord = ev->canvas.x;
- *angle_diff = (mouse_diff)/4;
- }
- else
- {
- if (*angle_diff > 2)
- (*angle_diff)-=1;
- else if (*angle_diff >0)
- (*angle_diff)-=0.25;
- else if(*angle_diff < -2)
- (*angle_diff)+=1;
- else if (*angle_diff <0)
- (*angle_diff)+=0.25;
- }
-}
-
-static void
-_play_scene(void *data, Evas *_evas EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Scene_Data *d = (Scene_Data *)data;
-
- _rotate_x_reload(scene, ev, d->mesh_node, d->mesh, &d->angle, &d->mouse_old_x);
-
- /* Run this cycle only once to avoid the callback tree. */
- if (d->mouse_indicator == 0)
- ecore_timer_add(0.016, _continue_scene, data);
-
- d->mouse_indicator = 1;
-}
-
-static void
-_stop_scene(void *data, Evas *_evas EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Scene_Data *d = (Scene_Data *)data;
-
- d->angle = 0.0;
- d->mouse_indicator = 2;
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- Scene_Data *sc = (Scene_Data *)data;
-
- angle += sc->angle;
-
- evas_canvas3d_node_orientation_angle_axis_set(sc->mesh_node, angle, 0, 1.0, 0.0);
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(data->camera, 20.0, 1.0, 2.0, 50.0);
-
- data->camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 3.0, 3.0, 10.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
-
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
-
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 5.0, 5.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- /* Setup material. */
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- /* Setup primitive */
- data->cube = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->cube, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
-
- /* Setup mesh. */
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->mesh, 0, data->cube);
- evas_canvas3d_mesh_shader_mode_set(data->mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 0, data->material);
-
- data->mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- data->root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(scene, 0.0, 0.0, 0.0, 0.0);
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(scene, data->camera_node);
-
- data->mouse_old_x = 0;
- data->mouse_diff_x = 0;
- data->mouse_indicator = 0;
-}
-
-int
-main(void)
-{
- Scene_Data data;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new("opengl_x11", 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- memset(&data, 0, sizeof(Scene_Data));
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = evas_object_rectangle_add(evas);
- evas_object_color_set(background, 0, 0, 0, 255);
- evas_object_move(background, 0, 0);
- evas_object_resize(background, WIDTH, HEIGHT);
- evas_object_show(background);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_geometry_set(image, EINA_RECT(0, 0, WIDTH, HEIGHT));
- evas_object_show(image);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, scene);
-
- evas_object_focus_set(image, EINA_TRUE);
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _play_scene, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_UP, _stop_scene, &data);
-
- /* Add animation timer callback. */
- ecore_timer_add(0.016, _animate_scene, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-cube.c b/src/examples/evas/evas-3d-cube.c
deleted file mode 100644
index 50c3034342..0000000000
--- a/src/examples/evas/evas-3d-cube.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/**
- * Example of creating simple meshes in Evas-3D.
- *
- * This example is the best to start introduction to usage of Evas-3D.
- *
- * @verbatim
- * gcc -o evas-3d-cube evas-3d-cube.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo`
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-
-#define WIDTH 400
-#define HEIGHT 400
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
-
- Eo *camera;
- Eo *light;
- Eo *mesh;
- Eo *material;
-} Scene_Data;
-
-static Ecore_Evas *ecore_evas = NULL;
-static Evas *evas = NULL;
-static Eo *background = NULL;
-static Eo *image = NULL;
-
-static const float cube_vertices[] =
-{
- /* Front */
- -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Back */
- 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Left */
- -1.0, 1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Right */
- 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0,
-
- /* Top */
- -1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0,
- 1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0,
- -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0,
-
- /* Bottom */
- 1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0,
- -1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0,
- 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0,
-};
-
-static const unsigned short cube_indices[] =
-{
- /* Front */
- 0, 1, 2, 2, 1, 3,
-
- /* Back */
- 4, 5, 6, 6, 5, 7,
-
- /* Left */
- 8, 9, 10, 10, 9, 11,
-
- /* Right */
- 12, 13, 14, 14, 13, 15,
-
- /* Top */
- 16, 17, 18, 18, 17, 19,
-
- /* Bottom */
- 20, 21, 22, 22, 21, 23
-};
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += 0.5;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 60.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-static void
-_mesh_setup(Scene_Data *data)
-{
- /* Setup material. */
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- /* Setup mesh. */
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_vertex_count_set(data->mesh, 24);
- evas_canvas3d_mesh_frame_add(data->mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 12 * sizeof(float), &cube_vertices[ 0]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 12 * sizeof(float), &cube_vertices[ 3]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 12 * sizeof(float), &cube_vertices[ 6]);
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 12 * sizeof(float), &cube_vertices[10]);
- evas_canvas3d_mesh_index_data_set(data->mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &cube_indices[0]);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 0, data->material);
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- Scene_Data data;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Add animation timer callback. */
- ecore_timer_add(0.016, _animate_scene, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-cube2.c b/src/examples/evas/evas-3d-cube2.c
deleted file mode 100644
index 026b90a5a0..0000000000
--- a/src/examples/evas/evas-3d-cube2.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/**
- * Example of frame interpolation animation with normal mapping in Evas 3D.
- *
- * @verbatim
- * gcc -o evas-3d-cube2 evas-3d-cube2.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#define WIDTH 400
-#define HEIGHT 400
-
-static const char *normal_map_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/normal_lego.png";
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
-
- Eo *camera;
- Eo *light;
- Eo *cube;
- Eo *mesh;
- Eo *material0;
- Eo *material1;
-
- Eo *texture0;
- Eo *texture1;
- Eo *texture_normal;
-} Scene_Data;
-
-static Ecore_Evas *ecore_evas = NULL;
-static Evas *evas = NULL;
-static Eo *background = NULL;
-static Eo *image = NULL;
-
-static const unsigned int pixels0[] =
-{
- 0xff0000ff, 0xff0000ff, 0xffff0000, 0xffff0000,
- 0xff0000ff, 0xff0000ff, 0xffff0000, 0xffff0000,
- 0xff00ff00, 0xff00ff00, 0xff000000, 0xff000000,
- 0xff00ff00, 0xff00ff00, 0xff000000, 0xff000000,
-};
-
-static const unsigned int pixels1[] =
-{
- 0xffff0000, 0xffff0000, 0xff00ff00, 0xff00ff00,
- 0xffff0000, 0xffff0000, 0xff00ff00, 0xff00ff00,
- 0xff0000ff, 0xff0000ff, 0xffffffff, 0xffffffff,
- 0xff0000ff, 0xff0000ff, 0xffffffff, 0xffffffff,
-};
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- static int frame = 0;
- static int inc = 1;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += 0.2;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- frame += inc;
-
- if (frame >= 20) inc = -1;
- else if (frame <= 0) inc = 1;
-
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node, scene->mesh, frame);
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(data->camera, 60.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 3.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- /* Setup material. */
- data->material0 = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- data->material1 = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material0, 100.0);
-
- evas_canvas3d_material_enable_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material1, 100.0);
-
- data->texture0 = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- data->texture1 = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- data->texture_normal = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
-
- evas_canvas3d_texture_data_set(data->texture0, EVAS_COLORSPACE_ARGB8888, 4, 4, &pixels0[0]);
- evas_canvas3d_texture_data_set(data->texture1, EVAS_COLORSPACE_ARGB8888, 4, 4, &pixels1[0]);
- efl_file_simple_load(data->texture_normal, normal_map_path, NULL);
-
- evas_canvas3d_material_texture_set(data->material0, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture0);
- evas_canvas3d_material_texture_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture1);
- evas_canvas3d_material_texture_set(data->material1, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, data->texture_normal);
-
- /* Set data of primitive */
- data->cube = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->cube, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
-
- /* Setup mesh. */
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->mesh, 0, data->cube);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 0, data->material0);
- evas_canvas3d_mesh_frame_add(data->mesh, 20);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 20, data->material1);
- evas_canvas3d_mesh_shader_mode_set(data->mesh, EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP);
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- Scene_Data data;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Add animation timer callback. */
- ecore_timer_add(0.01, _animate_scene, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-eet.c b/src/examples/evas/evas-3d-eet.c
deleted file mode 100644
index 0272de7db2..0000000000
--- a/src/examples/evas/evas-3d-eet.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/**
- * Example of .eet file format import/export in Evas-3D.
- *
- * Take mesh from md2.
- * Set material to it.
- * Show it in left side.
- * Save the first frame of this mesh to eet. (static only)
- * Take result to another mesh from eet.
- * Show it in right side.
- *
- * @verbatim
- * gcc -o evas-3d-eet evas-3d-eet.c `pkg-config --libs --cflags efl eina evas ecore ecore-evas ecore-file eo`
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Ecore_File.h>
-#include "evas-common.h"
-
-#define WIDTH 1024
-#define HEIGHT 1024
-
-static const char *input_model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2";
-static const char *output_model_path = PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES "/saved_Sonic_EET.eet";
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-Eo *scene = NULL;
-Eo *root_node = NULL;
-Eo *camera_node = NULL;
-Eo *light_node = NULL;
-Eo *camera = NULL;
-Eo *mesh_node = NULL;
-Eo *mesh = NULL;
-Eo *mesh_node2 = NULL;
-Eo *mesh2 = NULL;
-Eo *material = NULL;
-Eo *light = NULL;
-
-static float angle = 0;
-
-static Eina_Bool
-_animate_eet(void *data)
-{
- angle += 0.5;
-
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_animate_md2(void *data)
-{
- static int frame = 0;
-
- evas_canvas3d_node_mesh_frame_set((Evas_Canvas3D_Node *)data, mesh, frame);
-
- frame += 32;
-
- if (frame > 256 * 50) frame = 0;
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a scene object .*/
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add the root node for the scene. */
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- /* Add the camera. */
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 60.0, 1.0, 1.0, 500.0);
-
- camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_member_add(root_node, camera_node);
- evas_canvas3d_node_position_set(camera_node, 200.0, 0.0, 40.0);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
- /* Add the light. */
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_directional_set(light, EINA_TRUE);
-
- light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(light_node, light);
- evas_canvas3d_node_position_set(light_node, 1000.0, 0.0, 1000.0);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, light_node);
-
- /* Add the meshes. */
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- mesh2 = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- efl_file_simple_load(mesh, input_model_path, NULL);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.50, 0.50, 0.00, 0.30);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.00, 0.50, 0.50, 0.30);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 0.50, 0.00, 0.50, 0.30);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- if (!ecore_file_mkpath(PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES))
- fprintf(stderr, "Failed to create folder %s\n\n",
- PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES);
-
- efl_file_save(mesh, output_model_path, NULL, NULL);
-
- efl_file_simple_load(mesh2, output_model_path, NULL);
- evas_canvas3d_mesh_shader_mode_set(mesh2, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-
- mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(root_node, mesh_node);
- evas_canvas3d_node_mesh_add(mesh_node, mesh);
- evas_canvas3d_node_position_set(mesh_node, 0.0, -40.0, 0.0);
-
- mesh_node2 = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(root_node, mesh_node2);
- evas_canvas3d_node_mesh_add(mesh_node2, mesh2);
- evas_canvas3d_node_position_set(mesh_node2, 0.0, 40.0, 0.0);
-
- /* Set up scene. */
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, scene);
-
- ecore_timer_add(0.01, _animate_md2, mesh_node);
- ecore_timer_add(0.01, _animate_eet, mesh_node2);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-fog.c b/src/examples/evas/evas-3d-fog.c
deleted file mode 100644
index ec27d632c2..0000000000
--- a/src/examples/evas/evas-3d-fog.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/**
- * Example of applying a fog effect in Evas-3D.
- *
- * @verbatim
- * gcc -o evas-3d-fog evas-3d-fog.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <math.h>
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-
-#define WIDTH 1024
-#define HEIGHT 1024
-#define FOG_COLOR 0.5, 0.5, 0.5
-#define FOG_FACTOR 0.2
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
- Eo *mesh_node1;
- Eo *animation_node;
- Eo *sphere;
-
- Eo *camera;
- Eo *light;
- Eo *mesh;
- Eo *mesh1;
- Eo *material;
-} Scene_Data;
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
-
- evas_object_resize(background, w, h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += 0.5;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->animation_node, angle, 0.0, 1.0, 0.0);
-
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 60.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
-
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 7.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_set_ball(Eo *mesh, Eo *sphere, Evas_Canvas3D_Material *material)
-{
- evas_canvas3d_mesh_from_primitive_set(mesh, 0, sphere);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- data->sphere = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->sphere, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(data->sphere, 50);
-
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- data->mesh1 = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
-
- _set_ball(data->mesh, data->sphere, data->material);
- _set_ball(data->mesh1, data->sphere, data->material);
-
- data->animation_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(data->animation_node, data->mesh_node);
- evas_canvas3d_node_member_add(data->root_node, data->animation_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
- evas_canvas3d_node_position_set(data->mesh_node, 0.0, 0.0, 3.0);
-
- data->mesh_node1 =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node1);
- evas_canvas3d_node_mesh_add(data->mesh_node1, data->mesh1);
- evas_canvas3d_node_scale_set(data->mesh_node1, 3, 3, 3);
-
- evas_canvas3d_mesh_fog_enable_set(data->mesh, EINA_TRUE);
- evas_canvas3d_mesh_fog_color_set(data->mesh, FOG_COLOR, FOG_FACTOR);
- evas_canvas3d_mesh_fog_enable_set(data->mesh1, EINA_TRUE);
- evas_canvas3d_mesh_fog_color_set(data->mesh1, FOG_COLOR, FOG_FACTOR);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, FOG_COLOR, 1);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
- Scene_Data data;
- Ecore_Animator *anim;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new("opengl_x11", 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
-
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Add animation timer callback. */
- ecore_animator_frametime_set(0.008);
- anim = ecore_animator_add(_animate_scene, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
- ecore_animator_del(anim);
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-frustum.c b/src/examples/evas/evas-3d-frustum.c
deleted file mode 100644
index 2d693fc83a..0000000000
--- a/src/examples/evas/evas-3d-frustum.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/**
- * Example of frustum culling in Evas-3D.
- *
- * Use 'w'/'s' key to move far frustum plane from/to the camera.
- * Use 't'/'g' key to move near frustum plane from/to the camera.
- * Use '1'/'2' key to set camera to the first/second position.
- * Use '3'/'4'/'5' key to set bounding sphere/aabb/central point mode.
- * Use 'i', 'k', 'j', 'l', 'u' and 'o' keys to move mesh node (model) in 3D.
- * Use 'z', 'x', 'c', 'Z', 'X' and 'C' keys to change scaling constants of mesh (model).
- * See in terminal output value distance to far plane of frustum and value of visibility of node
- * @see evas_canvas3d_camera_node_visible_get.
- *
- * @verbatim
- * gcc -o evas-3d-frustum evas-3d-frustum.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Evas.h>
-#include <Eo.h>
-#include <math.h>
-#include "evas-common.h"
-
-#define WIDTH 800
-#define HEIGHT 600
-
-static const char *texture_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sweet_home_reversed.png";
-static const char *mesh_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sweet_home.obj";
-
-typedef struct _Scene_Data
-{
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node_model;
- Eo *mesh_node;
- Eo *scene;
- Eo *camera;
- Eo *light;
- Eo *mesh_model;
- Eo *sphere;
- Eo *cube;
- Eo *mesh_sphere;
- Eo *mesh_aabb;
- Eo *material_model;
- Eo *material;
- Eo *texture_model;
-} Scene_Data;
-
-Evas *evas;
-Evas_Object *background,*image;
-Evas_Real obj_x = 0.0, obj_y = 0.0, obj_z = 0.0, obj_sc_x = 10.0, obj_sc_y = 10.0, obj_sc_z = 10.0;
-Evas_Real fleft = -5, fright = 5, fbottom = -5, fup = 5, fnear = 20, ffar = 1000;
-Evas_Real radius = 0;
-Evas_Canvas3D_Frustum_Mode key = EVAS_CANVAS3D_FRUSTUM_MODE_AABB;
-
-static void
-_show_help()
-{
- printf("Press 'w'/'s' key to move far frustum plane from/to the camera\n");
- printf("Press 't'/'g' key to move near frustum plane from/to the camera\n");
- printf("Press '1'/'2' key to set camera to the first/second position\n");
- printf("Press '3'/'4'/'5' key to set bounding sphere/aabb/central point mode\n");
- printf("Press 'i', 'k', 'j', 'l', 'u' and 'o' keys to move mesh node in 3D\n");
- printf("Press 'z', 'x', 'c', 'Z', 'X' and 'C' keys to change scaling constants of mesh\n");
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
-
- evas_object_resize(background, w, h);
- evas_object_resize(image, w, h);
- evas_object_move(image, 0, 0);
-}
-
-static Eina_Bool
-_redraw_bounding_object(void *data)
-{
- Evas_Real px, py, pz, sx, sy, sz;
- Evas_Real x0, y0, z0, x1, y1, z1, rad;
- Scene_Data *scene = (Scene_Data *)data;
- Eo *current_mesh;
- Eina_List *meshes = NULL, *l;
-
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(scene->mesh_node);
- EINA_LIST_FOREACH(meshes, l, current_mesh)
- {
- evas_canvas3d_node_mesh_del(scene->mesh_node, current_mesh);
- }
-
- switch (key)
- {
- case EVAS_CANVAS3D_FRUSTUM_MODE_BSPHERE:
- {
- evas_canvas3d_node_bounding_sphere_get(scene->mesh_node_model, &x0, &y0, &z0, &rad);
- current_mesh = scene->mesh_sphere;
- px = x0;
- py = y0;
- pz = z0;
- sx = sy = sz = 2.0 * rad;
- break;
- }
- case EVAS_CANVAS3D_FRUSTUM_MODE_AABB:
- {
- evas_canvas3d_node_bounding_box_get(scene->mesh_node_model, &x0, &y0, &z0, &x1, &y1, &z1);
- current_mesh = scene->mesh_aabb;
- px = (x1 + x0) / 2;
- py = (y1 + y0) / 2;
- pz = (z1 + z0) / 2;
- sx = x1 - x0;
- sy = y1 - y0;
- sz = z1 - z0;
- break;
- }
- case EVAS_CANVAS3D_FRUSTUM_MODE_CENTRAL_POINT:
- {
- evas_canvas3d_node_bounding_sphere_get(scene->mesh_node_model, &x0, &y0, &z0, &rad);
- current_mesh = scene->mesh_sphere;
- px = x0;
- py = y0;
- pz = z0;
- sx = sy = sz = 0.1 * rad;
- break;
- }
- default:
- return ECORE_CALLBACK_RENEW;
- }
-
- evas_canvas3d_node_mesh_add(scene->mesh_node, current_mesh);
- evas_canvas3d_node_position_set(scene->mesh_node, px, py, pz);
- evas_canvas3d_node_scale_set(scene->mesh_node, sx, sy, sz);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-static void
-_on_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Scene_Data *scene = (Scene_Data *)data;
- Evas_Event_Key_Down *ev = event_info;
- Eina_Bool frustum;
-
- if (!strcmp("w", ev->key))
- {
- ffar += 20;
- evas_canvas3d_camera_projection_frustum_set(scene->camera, fleft, fright, fbottom, fup, fnear, ffar);
- }
- else if(!strcmp("s", ev->key))
- {
- ffar -= 20;
- evas_canvas3d_camera_projection_frustum_set(scene->camera, fleft, fright, fbottom, fup, fnear, ffar);
- }
- else if(!strcmp("t", ev->key))
- {
- fnear += 2;
- evas_canvas3d_camera_projection_frustum_set(scene->camera, fleft, fright, fbottom, fup, fnear, ffar);
- }
- else if(!strcmp("g", ev->key))
- {
- fnear -= 2;
- evas_canvas3d_camera_projection_frustum_set(scene->camera, fleft, fright, fbottom, fup, fnear, ffar);
- }
- else if(!strcmp("i", ev->key))
- {
- obj_y++;
- evas_canvas3d_node_position_set(scene->mesh_node_model, obj_x, obj_y, obj_z);
- }
- else if(!strcmp("k", ev->key))
- {
- obj_y--;
- evas_canvas3d_node_position_set(scene->mesh_node_model, obj_x, obj_y, obj_z);
- }
- else if(!strcmp("o", ev->key))
- {
- obj_z++;
- evas_canvas3d_node_position_set(scene->mesh_node_model, obj_x, obj_y, obj_z);
- }
- else if(!strcmp("u", ev->key))
- {
- obj_z--;
- evas_canvas3d_node_position_set(scene->mesh_node_model, obj_x, obj_y, obj_z);
- }
- else if(!strcmp("l", ev->key))
- {
- obj_x++;
- evas_canvas3d_node_position_set(scene->mesh_node_model, obj_x, obj_y, obj_z);
- }
- else if(!strcmp("j", ev->key))
- {
- obj_x--;
- evas_canvas3d_node_position_set(scene->mesh_node_model, obj_x, obj_y, obj_z);
- }
- else if(!strcmp("z", ev->key))
- {
- obj_sc_y+=0.02;
- evas_canvas3d_node_scale_set(scene->mesh_node_model, obj_sc_x, obj_sc_y, obj_sc_z);
- }
- else if(!strcmp("Z", ev->key))
- {
- obj_sc_y-=0.02;
- evas_canvas3d_node_scale_set(scene->mesh_node_model, obj_sc_x, obj_sc_y, obj_sc_z);
- }
- else if(!strcmp("x", ev->key))
- {
- obj_sc_z+=0.02;
- evas_canvas3d_node_scale_set(scene->mesh_node_model, obj_sc_x, obj_sc_y, obj_sc_z);
- }
- else if(!strcmp("X", ev->key))
- {
- obj_sc_z-=0.02;
- evas_canvas3d_node_scale_set(scene->mesh_node_model, obj_sc_x, obj_sc_y, obj_sc_z);
- }
- else if(!strcmp("c", ev->key))
- {
- obj_sc_x+=0.02;
- evas_canvas3d_node_scale_set(scene->mesh_node_model, obj_sc_x, obj_sc_y, obj_sc_z);
- }
- else if(!strcmp("C", ev->key))
- {
- obj_sc_x-=0.02;
- evas_canvas3d_node_scale_set(scene->mesh_node_model, obj_sc_x, obj_sc_y, obj_sc_z);
- }
- else if(!strcmp("Return", ev->key))
- {
- evas_canvas3d_camera_projection_frustum_set(scene->camera, fleft, fright, fbottom, fup, fnear, ffar);
- }
- else if (!strcmp("1", ev->key))
- {
- evas_canvas3d_node_position_set(scene->camera_node, 0.0, 0.0, 300.0);
- evas_canvas3d_node_look_at_set(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- printf("Changed position and view of camera\n");
- }
- else if (!strcmp("2", ev->key))
- {
- evas_canvas3d_node_position_set(scene->camera_node, 300.0, 300.0, 300.0);
- evas_canvas3d_node_look_at_set(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- printf("Changed position and view of camera\n");
- }
- else if (!strcmp("3", ev->key))
- {
- key = EVAS_CANVAS3D_FRUSTUM_MODE_BSPHERE;
- }
- else if (!strcmp("4", ev->key))
- {
- key = EVAS_CANVAS3D_FRUSTUM_MODE_AABB;
- }
- else if (!strcmp("5", ev->key))
- {
- key = EVAS_CANVAS3D_FRUSTUM_MODE_CENTRAL_POINT;
- }
- else
- {
- _show_help();
- }
-
- _redraw_bounding_object(data);
- frustum = evas_canvas3d_camera_node_visible_get(scene->camera, scene->camera_node, scene->mesh_node_model, key);
- printf("far - %f frustum - %d radius - %f\n", ffar, frustum, radius);
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- data->camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 300.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-
- evas_canvas3d_camera_projection_frustum_set(data->camera, fleft, fright, fbottom, fup, fnear, ffar);
-
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 200.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- data->cube = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->cube, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
-
- data->sphere = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->sphere, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(data->sphere, 20);
-
- data->mesh_aabb = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->mesh_aabb, 0, data->cube);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_aabb, EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_aabb, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- evas_canvas3d_mesh_frame_material_set(data->mesh_aabb, 0, data->material);
-
- data->mesh_sphere = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->mesh_sphere, 0, data->sphere);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_sphere, EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_sphere, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- evas_canvas3d_mesh_frame_material_set(data->mesh_sphere, 0, data->material);
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh_aabb);
-}
-
-static void
-_mesh_setup_model(Scene_Data *data)
-{
- data->mesh_model = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- data->material_model = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- data->texture_model = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
-
- efl_file_simple_load(data->texture_model, texture_path, NULL);
- evas_canvas3d_texture_filter_set(data->texture_model, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(data->texture_model, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
-
- evas_canvas3d_material_enable_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.01, 0.01, 0.01, 1.0);
- evas_canvas3d_material_color_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_texture_set(data->material_model, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture_model);
- evas_canvas3d_material_shininess_set(data->material_model, 100.0);
-
- efl_file_simple_load(data->mesh_model, mesh_path, NULL);
- evas_canvas3d_mesh_frame_material_set(data->mesh_model, 0, data->material_model);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_model, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- data->root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _light_setup(data);
- _mesh_setup_model(data);
- _camera_setup(data);
-
- data->mesh_node_model = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_position_set(data->mesh_node_model, obj_x, obj_y, obj_z);
- evas_canvas3d_node_orientation_angle_axis_set(data->mesh_node_model, -90, 1.0, 0.0, 0.0);
- evas_canvas3d_node_scale_set(data->mesh_node_model, obj_sc_x, obj_sc_y, obj_sc_z);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_model);
- evas_canvas3d_node_mesh_add(data->mesh_node_model, data->mesh_model);
-
- _mesh_setup(data);
-
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.5, 0.5, 0.5, 0.0);
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- Scene_Data data;
- Ecore_Evas *ecore_evas = NULL;
-
- if (!ecore_evas_init()) return 0;
-
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
- ecore_evas = ecore_evas_new("opengl_x11", 0, 0, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- background = evas_object_rectangle_add(evas);
-
- evas_object_color_set(background, 0, 0, 0, 255);
- evas_object_move(background, 0, 0);
- evas_object_resize(background, WIDTH, HEIGHT);
- evas_object_show(background);
-
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- evas_object_move(image, 0, 0);
- evas_object_resize(image, WIDTH, HEIGHT);
- evas_object_show(image);
-
- evas_object_focus_set(image, EINA_TRUE);
- efl_canvas_scene3d_set(image, data.scene);
-
- _redraw_bounding_object(&data);
- _show_help();
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, &data);
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-hull.c b/src/examples/evas/evas-3d-hull.c
deleted file mode 100644
index a5c39752d2..0000000000
--- a/src/examples/evas/evas-3d-hull.c
+++ /dev/null
@@ -1,465 +0,0 @@
-/**
- * Example to test convex hull models made in Evas-3D vs. Blender.
- *
- * The first model (from the right side) is the original model, the
- * second one is a convex hull made in Evas-3D, and the third one is a
- * convex hull made in Blender.
- *
- * Press "Right" or "Left" to switch models, the result of test (vertex count)
- * will be printed in console window.
- *
- * @verbatim
- * gcc -o evas-3d-hull evas-3d-hull.c -g `pkg-config --libs --cflags efl evas ecore ecore-evas eo eina` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#define WIDTH 1024
-#define HEIGHT 1024
-#define TESTS_COUNT 8
-#define SCALE_SPHERE 2.0
-#define SCALE_TORUS 2.7
-#define SCALE_HOME 0.7
-#define SCALE_SONIC 0.08
-#define SCALE_EAGLE 0.06
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
- Eo *mesh_node_convex_hull;
- Eo *mesh_node_blender;
-
- Eo *camera;
- Eo *light;
- Eo *mesh_sphere;
- Eo *mesh_torus;
- Eo *mesh_cube;
- Eo *mesh_plain;
- Eo *mesh_column;
- Eo *mesh_home;
- Eo *mesh_sonic;
- Eo *mesh_eagle;
- Eo *mesh_sphere_ch;
- Eo *mesh_torus_ch;
- Eo *mesh_cube_ch;
- Eo *mesh_plain_ch;
- Eo *mesh_column_ch;
- Eo *mesh_home_ch;
- Eo *mesh_sonic_ch;
- Eo *mesh_eagle_ch;
- Eo *mesh_blender_sphere;
- Eo *mesh_blender_torus;
- Eo *mesh_blender_cube;
- Eo *mesh_blender_plain;
- Eo *mesh_blender_column;
- Eo *mesh_blender_home;
- Eo *mesh_blender_sonic;
- Eo *mesh_blender_eagle;
- Eo *mesh_blender_test_sphere;
- Eo *mesh_blender_test_torus;
- Eo *mesh_blender_test_cube;
- Eo *mesh_blender_test_plain;
- Eo *mesh_blender_test_column;
- Eo *mesh_blender_test_home;
- Eo *mesh_blender_test_sonic;
- Eo *mesh_blender_test_eagle;
- Eo *material;
-} Scene_Data;
-
-int rr;
-
-#define MODEL_MESH_INIT(name, model, shade) \
- data->mesh_##name = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas); \
- efl_file_simple_load(data->mesh_##name, model, NULL); \
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_##name, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES); \
- evas_canvas3d_mesh_shader_mode_set(data->mesh_##name, EVAS_CANVAS3D_SHADER_MODE_##shade); \
- evas_canvas3d_mesh_frame_material_set(data->mesh_##name, 0, data->material);
-
-#define CONVEX_HULL_MESH_INIT(name) \
- vert = eina_inarray_new(sizeof(float), 1); \
- ind = eina_inarray_new(sizeof(unsigned short int), 1);\
- evas_canvas3d_mesh_convex_hull_data_get(data->mesh_##name, 0, vert, ind); \
- vertex = (float*) vert->members;\
- index = ind->members;\
- data->mesh_##name##_ch = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas); \
- evas_canvas3d_mesh_vertex_count_set(data->mesh_##name##_ch, (vert->len / 10)); \
- evas_canvas3d_mesh_frame_add(data->mesh_##name##_ch, 0); \
- evas_canvas3d_mesh_frame_vertex_data_copy_set(data->mesh_##name##_ch, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, \
- 10 * sizeof(float), &vertex[ 0]); \
- evas_canvas3d_mesh_frame_vertex_data_copy_set(data->mesh_##name##_ch, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, \
- 10 * sizeof(float), &vertex[ 3]); \
- evas_canvas3d_mesh_frame_vertex_data_copy_set(data->mesh_##name##_ch, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, \
- 10 * sizeof(float), &vertex[ 6]); \
- evas_canvas3d_mesh_index_data_copy_set(data->mesh_##name##_ch, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, \
- ind->len, &index[0]); \
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_##name##_ch, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES); \
- evas_canvas3d_mesh_shader_mode_set(data->mesh_##name##_ch, EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR); \
- evas_canvas3d_mesh_frame_material_set(data->mesh_##name##_ch, 0, data->material); \
- free(vert); \
- free(ind);
-
-#define SWITCH_MESH(index, name, scale) \
- case index: \
- { \
- list = evas_canvas3d_node_mesh_list_get(scene->mesh_node); \
- mesh = eina_list_nth(list, 0); \
- evas_canvas3d_node_mesh_del(scene->mesh_node, mesh); \
- evas_canvas3d_node_mesh_add(scene->mesh_node, scene->mesh_##name); \
- evas_canvas3d_node_scale_set(scene->mesh_node, scale, scale, scale); \
- list = evas_canvas3d_node_mesh_list_get(scene->mesh_node_convex_hull); \
- mesh = eina_list_nth(list, 0); \
- evas_canvas3d_node_mesh_del(scene->mesh_node_convex_hull, mesh); \
- evas_canvas3d_node_mesh_add(scene->mesh_node_convex_hull, scene->mesh_##name##_ch); \
- evas_canvas3d_node_scale_set(scene->mesh_node_convex_hull, scale, scale, scale); \
- list = evas_canvas3d_node_mesh_list_get(scene->mesh_node_blender); \
- mesh = eina_list_nth(list, 0); \
- evas_canvas3d_node_mesh_del(scene->mesh_node_blender, mesh); \
- evas_canvas3d_node_mesh_add(scene->mesh_node_blender, scene->mesh_blender_##name); \
- evas_canvas3d_node_scale_set(scene->mesh_node_blender, scale, scale, scale); \
- _print_result(scene->mesh_##name##_ch, scene->mesh_blender_test_##name); \
- break; \
- }
-
-static const char *home = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sweet_home_without_tex_coords.obj";
-static const char *sonic = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2";
-static const char *eagle = PACKAGE_EXAMPLES_DIR "/shooter/assets/models/eagle.md2";
-
-static const char *column = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/column.ply";
-static const char *plain = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/plain.ply";
-static const char *plain_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/plain_blender_ch.ply";
-static const char *sphere_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/sphere_blender_ch.ply";
-static const char *torus_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/torus_blender_ch.ply";
-static const char *cube_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/cube_blender_ch.ply";
-static const char *column_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/column_blender_ch.ply";
-static const char *home_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/home_blender_ch.obj";
-static const char *sonic_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/sonic_blender_ch.ply";
-static const char *eagle_ch = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/eagle_blender_ch.ply";
-static const char *plain_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/plain_blender_ch_test.ply";
-static const char *sphere_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/sphere_blender_ch_test.ply";
-static const char *torus_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/torus_blender_ch_test.ply";
-static const char *cube_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/cube_blender_ch_test.ply";
-static const char *column_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/column_blender_ch_test.ply";
-static const char *home_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/home_blender_ch_test.ply";
-static const char *sonic_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/sonic_blender_ch_test.ply";
-static const char *eagle_test = PACKAGE_EXAMPLES_DIR EVAS_CONVEX_HULL_FOLDER "/eagle_blender_ch_test.ply";
-
-static Ecore_Evas *ecore_evas = NULL;
-static Evas *evas = NULL;
-static Eo *background = NULL;
-static Eo *image = NULL;
-static int next_model = 0;
-
-static void
-_print_result(Evas_Canvas3D_Mesh *mesh, Evas_Canvas3D_Mesh *convex_mesh)
-{
- int v_count = 0;
- v_count = evas_canvas3d_mesh_vertex_count_get(mesh);
-
- printf("Vertex count is %d for convex hull\n",
- v_count);
-
- v_count = evas_canvas3d_mesh_vertex_count_get(convex_mesh);
-
- printf("Vertex count is %d for blender convex hull\n\n",
- v_count);
-
- return;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += 0.5;
- if (angle >= 360.0)
- angle = 0.0;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 1.0, 1.0, 1.0);
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node_convex_hull, angle, 1.0, 1.0, 1.0);
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node_blender, angle, 1.0, 1.0, 1.0);
-
- return EINA_TRUE;
-}
-
-static void
-_key_down(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- const Eina_List *list = NULL;
- Eo *mesh = NULL;
- Evas_Event_Key_Down *ev = event_info;
- Scene_Data *scene = (Scene_Data *)data;
-
- if (!strcmp(ev->key, "Right"))
- next_model++;
- else if (!strcmp(ev->key, "Left"))
- next_model--;
-
- if (next_model == -1)
- next_model = TESTS_COUNT - 1;
- else if (next_model == TESTS_COUNT)
- next_model = 0;
-
- switch (next_model)
- {
- SWITCH_MESH(0, sphere, SCALE_SPHERE)
- SWITCH_MESH(1, torus, SCALE_TORUS)
- SWITCH_MESH(2, cube, 1.0)
- SWITCH_MESH(3, plain, 1.0)
- SWITCH_MESH(4, column, 1.0)
- SWITCH_MESH(5, home, SCALE_HOME)
- SWITCH_MESH(6, sonic, SCALE_SONIC)
- SWITCH_MESH(7, eagle, SCALE_EAGLE)
- default:
- break;
- }
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 60.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- Eina_Inarray *vert, *ind;
- float *vertex;
- unsigned short int *index;
- Eo *primitive = NULL;
- /* Setup material. */
-
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- /* Setup mesh sphere */
- primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(primitive, 10);
- data->mesh_sphere = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->mesh_sphere, 0, primitive);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_sphere, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_sphere, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh_sphere, 0, data->material);
-
- /* Setup mesh torus */
- data->mesh_torus = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_primitive_form_set(primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_TORUS);
- evas_canvas3d_primitive_precision_set(primitive, 50);
- evas_canvas3d_mesh_from_primitive_set(data->mesh_torus, 0, primitive);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_torus, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_torus, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh_torus, 0, data->material);
-
- /* Setup mesh cube */
- data->mesh_cube = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_primitive_form_set(primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
- evas_canvas3d_primitive_precision_set(primitive, 50);
- evas_canvas3d_mesh_from_primitive_set(data->mesh_cube, 0, primitive);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_cube, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_cube, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh_cube, 0, data->material);
-
- MODEL_MESH_INIT(plain, plain, PHONG)
- MODEL_MESH_INIT(column, column, PHONG)
- MODEL_MESH_INIT(home, home, PHONG)
- MODEL_MESH_INIT(sonic, sonic, PHONG)
- MODEL_MESH_INIT(eagle, eagle, PHONG)
-
- MODEL_MESH_INIT(blender_sphere, sphere_ch, PHONG)
- MODEL_MESH_INIT(blender_torus, torus_ch, PHONG)
- MODEL_MESH_INIT(blender_cube, cube_ch, PHONG)
- MODEL_MESH_INIT(blender_plain, plain_ch, PHONG)
- MODEL_MESH_INIT(blender_column, column_ch, PHONG)
- MODEL_MESH_INIT(blender_home, home_ch, PHONG)
- MODEL_MESH_INIT(blender_eagle, eagle_ch, PHONG)
- MODEL_MESH_INIT(blender_sonic, sonic_ch, PHONG)
-
- MODEL_MESH_INIT(blender_test_sphere, sphere_test, DIFFUSE)
- MODEL_MESH_INIT(blender_test_torus, torus_test, DIFFUSE)
- MODEL_MESH_INIT(blender_test_cube, cube_test, DIFFUSE)
- MODEL_MESH_INIT(blender_test_plain, plain_test, DIFFUSE)
- MODEL_MESH_INIT(blender_test_column, column_test, DIFFUSE)
- MODEL_MESH_INIT(blender_test_home, home_test, DIFFUSE)
- MODEL_MESH_INIT(blender_test_eagle, eagle_test, DIFFUSE)
- MODEL_MESH_INIT(blender_test_sonic, sonic_test, DIFFUSE)
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh_sphere);
- evas_canvas3d_node_scale_set(data->mesh_node, SCALE_SPHERE, SCALE_SPHERE, SCALE_SPHERE);
- evas_canvas3d_node_position_set(data->mesh_node, 3.0, 0.0, 0.0);
-
- CONVEX_HULL_MESH_INIT(sphere)
- CONVEX_HULL_MESH_INIT(torus)
- CONVEX_HULL_MESH_INIT(cube)
- CONVEX_HULL_MESH_INIT(plain)
- CONVEX_HULL_MESH_INIT(column)
- CONVEX_HULL_MESH_INIT(home)
- CONVEX_HULL_MESH_INIT(sonic)
- CONVEX_HULL_MESH_INIT(eagle)
-
- _print_result(data->mesh_sphere_ch, data->mesh_blender_test_sphere);
-
- data->mesh_node_convex_hull =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_convex_hull);
- evas_canvas3d_node_position_set(data->mesh_node_convex_hull, 0.0, 0.0, 0.0);
- evas_canvas3d_node_scale_set(data->mesh_node_convex_hull, SCALE_SPHERE, SCALE_SPHERE, SCALE_SPHERE);
- evas_canvas3d_node_mesh_add(data->mesh_node_convex_hull, data->mesh_sphere_ch);
-
- data->mesh_node_blender =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_blender);
- evas_canvas3d_node_position_set(data->mesh_node_blender, -3.0, 0.0, 0.0);
- evas_canvas3d_node_scale_set(data->mesh_node_blender, SCALE_SPHERE, SCALE_SPHERE, SCALE_SPHERE);
- evas_canvas3d_node_mesh_add(data->mesh_node_blender, data->mesh_blender_sphere);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- Ecore_Animator *anim;
- Scene_Data data;
-
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- if (!ecore_evas_init()) return 0;
-
- printf("Loading 3d meshes. Press Left or Right to switch between models.\n");
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- evas_object_show(image),
- evas_object_focus_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _key_down, &data);
-
- /* Add animator. */
- ecore_animator_frametime_set(0.008);
- anim = ecore_animator_add(_animate_scene, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
- ecore_animator_del(anim);
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
-
-
diff --git a/src/examples/evas/evas-3d-md2.c b/src/examples/evas/evas-3d-md2.c
deleted file mode 100644
index a4edb28833..0000000000
--- a/src/examples/evas/evas-3d-md2.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Example of .md2 file format import in Evas-3D.
- *
- * @verbatim
- * gcc -o evas-3d-md2 evas-3d-md2.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo`
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#define WIDTH 400
-#define HEIGHT 400
-
-static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2";
-static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sonic.png";
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-
-Eo *scene = NULL;
-Eo *root_node = NULL;
-Eo *camera_node = NULL;
-Eo *light_node = NULL;
-Eo *camera = NULL;
-Eo *mesh_node = NULL;
-Eo *mesh = NULL;
-Eo *material = NULL;
-Eo *texture = NULL;
-Eo *light = NULL;
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static int frame = 0;
-
- evas_canvas3d_node_mesh_frame_set((Evas_Canvas3D_Node *)data, mesh, frame);
-
- frame += 32;
-
- if (frame > 256 * 50) frame = 0;
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a scene object .*/
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add the root node for the scene. */
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- /* Add the camera. */
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 60.0, 1.0, 1.0, 500.0);
-
- camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_member_add(root_node, camera_node);
- evas_canvas3d_node_position_set(camera_node, 100.0, 0.0, 20.0);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
- /* Add the light. */
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_directional_set(light, EINA_TRUE);
-
- light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(light_node, light);
- evas_canvas3d_node_position_set(light_node, 1000.0, 0.0, 1000.0);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, light_node);
-
- /* Add the mesh. */
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- efl_file_simple_load(mesh, model_path, NULL);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-
- texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(texture, image_path, NULL);
- evas_canvas3d_texture_filter_set(texture, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.01, 0.01, 0.01, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(root_node, mesh_node);
- evas_canvas3d_node_mesh_add(mesh_node, mesh);
-
- /* Set up scene. */
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, scene);
-
- ecore_timer_add(0.01, _animate_scene, mesh_node);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-mmap-set.c b/src/examples/evas/evas-3d-mmap-set.c
deleted file mode 100644
index 7da515aa61..0000000000
--- a/src/examples/evas/evas-3d-mmap-set.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/**
- * Example of mmap import in Evas-3D.
- *
- * Open files to Eina_Files.
- * Read meshes from Eina_Files.
- * Show the results.
- *
- * @verbatim
- * gcc -o evas-3d-mmap-set evas-3d-mmap-set.c `pkg-config --libs --cflags efl evas ecore ecore-evas eina eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#include <math.h>
-
-#define WIDTH 1000
-#define HEIGHT 1000
-
-#define LOAD_AND_ADD_MESH(extention, number) \
- snprintf(buffer, PATH_MAX, "%s%s", template_path, #extention); \
- extention##_file = eina_file_open(buffer , 0); \
- mesh_##extention = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas); \
- efl_file_simple_mmap_load(mesh_##extention, extention##_file, NULL); \
- evas_canvas3d_mesh_frame_material_set(mesh_##extention, 0, material); \
- evas_canvas3d_mesh_shader_mode_set(mesh_##extention, EVAS_CANVAS3D_SHADER_MODE_PHONG); \
- node_##extention = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH)); \
- evas_canvas3d_node_member_add(root_node, node_##extention); \
- evas_canvas3d_node_mesh_add(node_##extention, mesh_##extention); \
- evas_canvas3d_node_position_set(node_##extention, initial_node_data[number * 10], \
- initial_node_data[number * 10 + 1], \
- initial_node_data[number * 10 + 2]); \
- evas_canvas3d_node_scale_set(node_##extention, initial_node_data[number * 10 + 3], \
- initial_node_data[number * 10 + 4], \
- initial_node_data[number * 10 + 5]); \
- evas_canvas3d_node_orientation_angle_axis_set(node_##extention, initial_node_data[number * 10 + 6], \
- initial_node_data[number * 10 + 7], \
- initial_node_data[number * 10 + 8], \
- initial_node_data[number * 10 + 9]);\
- ecore_timer_add(0.01, _animate_##extention, node_##extention);
-
-static const char *template_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/mesh_for_mmap.";
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-
-Eo *scene = NULL;
-Eo *root_node = NULL;
-Eo *camera_node = NULL;
-Eo *light_node = NULL;
-Eo *camera = NULL;
-Eo *material = NULL;
-Eo *light = NULL;
-
-Eo *node_obj = NULL, *node_ply = NULL, *node_eet = NULL, *node_md2 = NULL;
-Eo *mesh_obj = NULL, *mesh_ply = NULL, *mesh_eet = NULL, *mesh_md2 = NULL;
-
-static float obj_animation_parameter = 1.0;
-static float ply_animation_parameter = 180.0;
-static float eet_animation_parameter = 0.0;
-static float md2_animation_parameter = 0.0;
-
-static float obj_animation_velocity = 1.0;
-static float ply_animation_velocity = 1.0;
-static float eet_animation_velocity = 1.0;
-static float md2_animation_velocity = 1.0;
-
-static const float initial_node_data[] =
- /*position scale rotation*/
-{
- /*obj*/
- 3.0, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- /*ply*/
- -3.0, 3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- /*eet*/
- 3.0, -3.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- /*md2*/
- -3.0, -3.0, 0.0, 0.001, 0.001, 0.001, 180.0, 0.0, 1.0, 0.0
-};
-
-static Eina_Bool
-_animate_obj(void *data)
-{
- obj_animation_parameter += obj_animation_velocity;
- float oap = obj_animation_parameter/200;
-
- evas_canvas3d_node_scale_set((Evas_Canvas3D_Node *)data, oap, oap, oap);
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, obj_animation_parameter, 0.0, 1.0, 0.0);
-
- if (obj_animation_parameter >= 360.0 || obj_animation_parameter <= 0.0)
- obj_animation_velocity *= -1.0;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_animate_eet(void *data)
-{
- eet_animation_parameter += eet_animation_velocity;
-
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, eet_animation_parameter, 1.0, 0.0, 0.0);
- eet_animation_velocity = sin(eet_animation_parameter / 180 * M_PI) + 1.1;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_animate_ply(void *data)
-{
- ply_animation_parameter += ply_animation_velocity;
-
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, ply_animation_parameter, 1.0, 0.0, 0.0);
-
- if (ply_animation_parameter > 360.0) ply_animation_parameter -= 180.0f;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_animate_md2(void *data)
-{
- md2_animation_parameter += md2_animation_velocity;
-
- evas_canvas3d_node_mesh_frame_set((Evas_Canvas3D_Node *)data, mesh_md2, md2_animation_parameter);
-
- if (md2_animation_parameter >= 360.0 || md2_animation_parameter <= 0.0)
- md2_animation_velocity *= -1.0;
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-int
-main(void)
-{
- char buffer[PATH_MAX];
- Eina_File *obj_file, *ply_file, *eet_file, *md2_file;
-
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a scene object .*/
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add the root node for the scene. */
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- /* Add the camera. */
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 10.0, 1.0, 1.0, 500.0);
-
- camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_member_add(root_node, camera_node);
- evas_canvas3d_node_position_set(camera_node, 0.0, 0.0, 100.0);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- /* Add the light. */
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_directional_set(light, EINA_TRUE);
-
- light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(light_node, light);
- evas_canvas3d_node_position_set(light_node, 1.0, 0.0, 100.0);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, light_node);
-
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.01, 0.01, 0.01, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 0.0, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 0.5, 0.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- /* Add the meshes */
- LOAD_AND_ADD_MESH(obj, 0);
- LOAD_AND_ADD_MESH(eet, 1);
- LOAD_AND_ADD_MESH(ply, 2);
- LOAD_AND_ADD_MESH(md2, 3);
-
- /* Set up scene. */
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 20, 20, 200, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, scene);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- eina_file_close(obj_file);
- eina_file_close(ply_file);
- eina_file_close(eet_file);
- eina_file_close(md2_file);
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-obj.c b/src/examples/evas/evas-3d-obj.c
deleted file mode 100644
index 1034b6befc..0000000000
--- a/src/examples/evas/evas-3d-obj.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Example of .obj file format import in Evas-3D.
- *
- * Example demonstrates possibility to load and save mesh without tex_coords or/and normals.
- *
- * Read mesh from "sweet_home(parameters).obj".
- * After that change some properties of material.
- * After that save material to "saved_files/saved_home(parameters).mtl"
- * and geometry to "saved_files/saved_home(parameters).obj".
- * If material was not set it will be not saved.
- *
- * @verbatim
- * gcc -o evas-3d-obj evas-3d-obj.c `pkg-config --libs --cflags efl evas ecore ecore-evas ecore-file eo`
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Ecore_File.h>
-#include "evas-common.h"
-
-#define WIDTH 1900
-#define HEIGHT 1080
-
-#define COL_LITTLE 0.2
-#define COL_BIG 1.0
-
-#define COL_RED COL_BIG, COL_LITTLE, COL_LITTLE
-#define COL_GREEN COL_LITTLE, COL_BIG, COL_LITTLE
-#define COL_BLUE COL_LITTLE, COL_LITTLE, COL_BIG
-
-#define ANIM_SPEED 0.02
-#define COPY_OFFSET 5
-#define GRID_SIZE 6
-#define NUMBER_OF_MESHES 8
-
-#define ADD_OBJ_MESH(path, Y, Z, num, shade_mode, name_of_material) \
- mesh[num] = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas); \
- snprintf(full_file_path, sizeof(full_file_path), "%s.obj", path); \
- efl_file_simple_load(mesh[num], full_file_path, NULL); \
- evas_canvas3d_mesh_frame_material_set(mesh[num], 0, name_of_material); \
- evas_canvas3d_mesh_shader_mode_set(mesh[num], shade_mode); \
- mesh_node[num] = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH)); \
- evas_canvas3d_node_member_add(root_node, mesh_node[num]); \
- evas_canvas3d_node_mesh_add(mesh_node[num], mesh[num]); \
- evas_canvas3d_node_position_set(mesh_node[num], 0, Y, Z); \
-
-#define ADD_OBJ_MESH_AND_SAVED_COPY(path, Y, Z, num, shade_mode, name_of_material)\
- snprintf(buffer, sizeof(buffer), "%s%s", input_template, #path); \
- ADD_OBJ_MESH(buffer, Y, Z, num, shade_mode, name_of_material) \
- snprintf(buffer, sizeof(buffer), "%s%s.obj", output_template, #path); \
- efl_file_save(mesh[num], buffer, NULL, NULL); \
- snprintf(buffer, PATH_MAX, "%s%s", output_template, #path); \
- ADD_OBJ_MESH(buffer, Y + COPY_OFFSET, Z, num + 4, shade_mode, name_of_material)
-
-#define ADD_TEXTURE(name, path) \
- name = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); \
- efl_file_simple_load(name, path, NULL); \
- evas_canvas3d_texture_filter_set(name, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, \
- EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST); \
- evas_canvas3d_texture_wrap_set(name, EVAS_CANVAS3D_WRAP_MODE_REPEAT, \
- EVAS_CANVAS3D_WRAP_MODE_REPEAT);
-
-#define ADD_MATERIAL(name) \
- name = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas); \
- evas_canvas3d_material_enable_set(name, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE); \
- evas_canvas3d_material_enable_set(name, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE); \
- evas_canvas3d_material_enable_set(name, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE); \
- evas_canvas3d_material_enable_set(name, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE); \
- evas_canvas3d_material_color_set(name, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, \
- COL_RED, 0.5); \
- evas_canvas3d_material_color_set(name, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, \
- COL_GREEN, 0.5); \
- evas_canvas3d_material_color_set(name, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, \
- COL_BLUE, 0.5); \
- evas_canvas3d_material_shininess_set(name, 100.0);
-
-static const char *texture_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sweet_home_reversed.png";
-static const char *output_template = PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES "/saved_";
-static const char *input_template = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sweet_";
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-
-Eo *scene = NULL;
-Eo *root_node = NULL;
-Eo *camera_node = NULL;
-Eo *light_node = NULL;
-Eo *camera = NULL;
-Eo *mesh[NUMBER_OF_MESHES];
-Eo *mesh_node[NUMBER_OF_MESHES];
-Eo *material_with_tex = NULL;
-Eo *material = NULL;
-Eo *texture = NULL;
-Eo *light = NULL;
-
-static float angle = 0;
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- angle += 0.2;
-
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, angle, 1.0, 1.0, -1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-int
-main(void)
-{
- int i;
- char buffer[PATH_MAX], full_file_path[PATH_MAX + 4];
-
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a scene object .*/
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add the root node for the scene. */
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- /* Add the camera. */
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 20.0, 1.0, 1.0, 500.0);
-
- camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_member_add(root_node, camera_node);
- evas_canvas3d_node_position_set(camera_node, 100.0, 0.0, 0.0);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
- /* Add the light. */
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_directional_set(light, EINA_TRUE);
-
- light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(light_node, light);
- evas_canvas3d_node_position_set(light_node, 10.0, 0.0, 0.0);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, light_node);
-
- ADD_TEXTURE(texture, texture_path)
-
- ADD_MATERIAL(material)
-
- ADD_MATERIAL(material_with_tex)
- evas_canvas3d_material_texture_set(material_with_tex, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture);
-
- if (!ecore_file_mkpath(PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES))
- fprintf(stderr, "Failed to create folder %s\n\n",
- PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES);
-
- ADD_OBJ_MESH_AND_SAVED_COPY(home, -GRID_SIZE, -GRID_SIZE, 0,
- EVAS_CANVAS3D_SHADER_MODE_PHONG, material_with_tex)
- ADD_OBJ_MESH_AND_SAVED_COPY(home_without_normals, -GRID_SIZE, GRID_SIZE, 1,
- EVAS_CANVAS3D_SHADER_MODE_DIFFUSE, material_with_tex)
- ADD_OBJ_MESH_AND_SAVED_COPY(home_without_tex_coords, GRID_SIZE, -GRID_SIZE, 2,
- EVAS_CANVAS3D_SHADER_MODE_PHONG, material)
- ADD_OBJ_MESH_AND_SAVED_COPY(home_only_vertex_coords, GRID_SIZE, GRID_SIZE, 3,
- EVAS_CANVAS3D_SHADER_MODE_SHADOW_MAP_RENDER, NULL)
-
- /* Set up scene. */
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
-
- /* Add a background rectangle MESHES. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, scene);
-
- for (i = 0; i < NUMBER_OF_MESHES; i++)
- ecore_timer_add(ANIM_SPEED, _animate_scene, mesh_node[i]);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-parallax-occlusion.c b/src/examples/evas/evas-3d-parallax-occlusion.c
deleted file mode 100644
index e3a69a606b..0000000000
--- a/src/examples/evas/evas-3d-parallax-occlusion.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/**
- * Example of parallax occlusion shading and texture animation in Evas-3D.
- *
- * Press "n" for use normal mapping shading. Pres "p" for use parallax occlusion mapping shading.
- *
- * @verbatim
- * gcc -o evas-3d-parallax-occlusion evas-3d-parallax-occlusion.c `pkg-config --libs --cflags evas ecore ecore-evas eo efl` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#define WIDTH 400
-#define HEIGHT 400
-
-static const char *rock_diffuse = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/rocks.jpg";
-static const char *rock_n_and_height_map = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/rocks_NM_height.tga";
-static const char *wood_diffuse = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/wood.jpg";
-static const char *wood_n_and_height_map = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/four_NM_height.tga";
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
-
- Eo *camera;
- Eo *light;
- Eo *mesh;
- Eo *cube;
- Eo *material_rocks;
- Eo *material_wood;
- Eo *texture_rocks;
- Eo *texture_rocks_n;
- Eo *texture_wood;
- Eo *texture_four_n;
-} Scene_Data;
-
-static Ecore_Evas *ecore_evas = NULL;
-static Evas *evas = NULL;
-static Eo *background = NULL;
-static Eo *image = NULL;
-
-static void
-_on_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Scene_Data *scene = (Scene_Data *)data;
- Evas_Event_Key_Down *ev = event_info;
-
- if (!strcmp("n", ev->key))
- evas_canvas3d_mesh_shader_mode_set(scene->mesh, EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP);
-
- if (!strcmp("p", ev->key))
- evas_canvas3d_mesh_shader_mode_set(scene->mesh, EVAS_CANVAS3D_SHADER_MODE_PARALLAX_OCCLUSION);
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
-
- angle += 0.5;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 0.0, 1.0, 0.0);
-
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node, scene->mesh, 50 * (1 + sin(angle / 180.0 * M_PI)));
- /* Rotate */
- if (angle > 360.0) angle = 0.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 30.0, 1.0, 2.0, 50.0);
-
- data->camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, -20.0, 20.0, 50.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- /* Setup material. */
- data->material_rocks = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- data->texture_rocks = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- data->texture_rocks_n = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(data->texture_rocks, rock_diffuse, NULL);
- evas_canvas3d_texture_wrap_set(data->texture_rocks, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- efl_file_simple_load(data->texture_rocks_n, rock_n_and_height_map, NULL);
- evas_canvas3d_texture_wrap_set(data->texture_rocks_n, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
-
- evas_canvas3d_material_texture_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, data->texture_rocks_n);
- evas_canvas3d_material_texture_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture_rocks);
- evas_canvas3d_material_texture_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, data->texture_rocks);
- evas_canvas3d_material_texture_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, data->texture_rocks);
- evas_canvas3d_material_enable_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.1, 0.1, 0.1, 1.0);
- evas_canvas3d_material_color_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(data->material_rocks, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material_rocks, 100.0);
-
- data->material_wood = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- data->texture_wood = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- data->texture_four_n = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(data->texture_wood, wood_diffuse, NULL);
- evas_canvas3d_texture_wrap_set(data->texture_wood, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- efl_file_simple_load(data->texture_four_n, wood_n_and_height_map, NULL);
- evas_canvas3d_texture_wrap_set(data->texture_four_n, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
-
- evas_canvas3d_material_texture_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, data->texture_four_n);
- evas_canvas3d_material_texture_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture_wood);
- evas_canvas3d_material_texture_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, data->texture_wood);
- evas_canvas3d_material_texture_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, data->texture_wood);
- evas_canvas3d_material_enable_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.1, 0.1, 0.1, 1.0);
- evas_canvas3d_material_color_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(data->material_wood, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material_wood, 100.0);
-
- /* Set data of primitive */
- data->cube = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->cube, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
-
- /* Setup mesh. */
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->mesh, 0, data->cube);
- evas_canvas3d_mesh_from_primitive_set(data->mesh, 100, data->cube);
- evas_canvas3d_mesh_shader_mode_set(data->mesh, EVAS_CANVAS3D_SHADER_MODE_PARALLAX_OCCLUSION);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 0, data->material_rocks);
-
- evas_canvas3d_mesh_frame_material_set(data->mesh, 100, data->material_wood);
-
- data->mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
- evas_canvas3d_node_scale_set(data->mesh_node, 3, 3, 3);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- Scene_Data data;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
- evas_object_focus_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Add animation timer callback. */
- ecore_timer_add(0.01, _animate_scene, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-pick.c b/src/examples/evas/evas-3d-pick.c
deleted file mode 100644
index 600220f955..0000000000
--- a/src/examples/evas/evas-3d-pick.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * Example of picking nodes and meshes by screen coordinates using Evas-3D.
- *
- * Here shown which transformation should be applied to event_info of
- * _on_mouse_down to make them usable in evas_canvas3d_scene_pick()
- * and parameters which can be got from this function.
- *
- * @verbatim
- * gcc -o evas-3d-pick evas-3d-pick.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <math.h>
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#define WIDTH 400
-#define HEIGHT 400
-
-static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/wood.jpg";
-
-static Ecore_Evas *ecore_evas = NULL;
-static Evas *evas = NULL;
-static Eo *background = NULL;
-static Eo *image = NULL;
-static Eo *scene = NULL;
-static Eo *root_node = NULL;
-static Eo *camera_node = NULL;
-static Eo *camera = NULL;
-static Eo *mesh_node = NULL;
-static Eo *mesh = NULL;
-static Eo *material = NULL;
-static Eo *texture_diffuse = NULL;
-static Eo *sphere = NULL;
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
-
- angle += 0.3;
-
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, angle, 0.0, 1.0, 0.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- evas_object_resize(background, w, h);
- evas_object_resize(image, w, h);
- evas_object_move(image, 0, 0);
-}
-
-static void
-_on_mouse_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Real s, t;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Eina_Bool pick;
-
- pick = evas_canvas3d_scene_pick(scene, ev->canvas.x, ev->canvas.y, &n, &m, &s, &t);
-
- if (pick) printf("Picked : ");
- else printf("Not picked : ");
-
- printf("output(%d, %d) canvas(%d, %d) texcoord(%f, %f) "
- "node(%p) mesh(%p)\n",
- ev->output.x, ev->output.y,
- ev->canvas.x, ev->canvas.y,
- s, t, n, m);
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a scene object .*/
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add the root node for the scene. */
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- /* Add the camera. */
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 30.0, 1.0, 1.0, 100.0);
-
- camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_position_set(camera_node, 0.0, 0.0, 2.5);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, camera_node);
-
- sphere = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(sphere, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(sphere, 50);
-
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(mesh, 0, sphere);
-
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- texture_diffuse = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(texture_diffuse, image_path, NULL);
- evas_canvas3d_texture_filter_set(texture_diffuse, EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR, EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR);
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture_diffuse);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.01, 0.01, 0.01, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- mesh_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(root_node, mesh_node);
- evas_canvas3d_node_mesh_add(mesh_node, mesh);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
-
- /* Set up scene. */
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
-
- /* Add evas objects. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_canvas_scene3d_set(image, scene);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN,
- _on_mouse_down, NULL);
-
- ecore_timer_add(0.01, _animate_scene, mesh_node);
-
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-ply.c b/src/examples/evas/evas-3d-ply.c
deleted file mode 100644
index 3d8693e90a..0000000000
--- a/src/examples/evas/evas-3d-ply.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- * Example of .ply file format import/export in Evas-3D.
- *
- * Read meshes from "tested_man_all_with_mods.ply", "tested_man_only_geometry.ply" and "tested_man_without_UVs.ply".
- * After that change some properties of material.
- * After that save material to "saved_man.mtl"
- * and geometry to "saved_man_all_with_mods.ply", "saved_man_only_geometry.ply" and "saved_man_without_UVs.ply".
- *
- * @verbatim
- * gcc -o evas-3d-ply evas-3d-ply.c `pkg-config --libs --cflags efl evas ecore ecore-evas ecore-file eo`
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Ecore_File.h>
-#include "evas-common.h"
-
-#define WIDTH 1024
-#define HEIGHT 1024
-
-#define NUMBER_OF_MESHES 32
-
-static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/star.jpg";
-static const char *input_template = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/";
-static const char *output_template = PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES "/";
-static const char *file_name[8] = {"Normal_UVs_Colors.ply",
- "Normal_UVs_NoColors.ply",
- "Normal_NoUVs_Colors.ply",
- "Normal_NoUVs_NoColors.ply",
- "NoNormal_UVs_Colors.ply",
- "NoNormal_UVs_NoColors.ply",
- "NoNormal_NoUVs_Colors.ply",
- "NoNormal_NoUVs_NoColors.ply"};
-
-int draw_mode[8] = {EVAS_CANVAS3D_SHADER_MODE_PHONG,
- EVAS_CANVAS3D_SHADER_MODE_PHONG,
- EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR,
- EVAS_CANVAS3D_SHADER_MODE_SHADOW_MAP_RENDER,
- EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR,
- EVAS_CANVAS3D_SHADER_MODE_SHADOW_MAP_RENDER,
- EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR,
- EVAS_CANVAS3D_SHADER_MODE_SHADOW_MAP_RENDER};
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-
-Eo *scene = NULL;
-Eo *root_node = NULL;
-Eo *camera_node = NULL;
-Eo *light_node = NULL;
-Eo *camera = NULL;
-
-Eo *mesh_node[NUMBER_OF_MESHES];
-Eo *mesh[NUMBER_OF_MESHES];
-
-Eo *material = NULL;
-Eo *texture = NULL;
-Eo *light = NULL;
-Ecore_Animator *anim = NULL;
-
-static float angle = 0;
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- angle += 0.2;
-
- evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-int
-main(void)
-{
- char buffer[PATH_MAX];
- int i;
-
- for (i = 0; i < NUMBER_OF_MESHES; i++)
- {
- mesh_node[i] = NULL;
- mesh[i] = NULL;
- }
-
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a scene object .*/
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- /* Add the root node for the scene. */
- root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- /* Add the camera. */
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(camera, 60.0, 1.0, 1.0, 500.0);
-
- camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(camera_node, camera);
- evas_canvas3d_node_member_add(root_node, camera_node);
- evas_canvas3d_node_position_set(camera_node, 15.0, 0.0, 0.0);
- evas_canvas3d_node_look_at_set(camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
- /* Add the light. */
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_diffuse_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_directional_set(light, EINA_TRUE);
-
- light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(light_node, light);
- evas_canvas3d_node_position_set(light_node, 1000.0, 0.0, 1000.0);
- evas_canvas3d_node_look_at_set(light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(root_node, light_node);
-
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(texture, image_path, NULL);
- evas_canvas3d_texture_filter_set(texture, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.01, 0.01, 0.01, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(material, 50.0);
-
- if (!ecore_file_mkpath(PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES))
- fprintf(stderr, "Failed to create folder %s\n\n",
- PACKAGE_EXAMPLES_DIR EVAS_SAVED_FILES);
-
- /* Add the meshes. */
- for (i = 0; i < NUMBER_OF_MESHES; i++)
- {
- mesh[i] = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
-
- snprintf(buffer, PATH_MAX, "%s%s", input_template, file_name[i % 8]);
- efl_file_simple_load(mesh[i], buffer, NULL);
- evas_canvas3d_mesh_frame_material_set(mesh[i], 0, material);
- evas_canvas3d_mesh_shader_mode_set(mesh[i], draw_mode[(i % 8)]);
-
- snprintf(buffer, PATH_MAX, "%s%s", output_template, file_name[i % 8]);
- efl_file_save(mesh[i], buffer, NULL, NULL);
-
- if (i > 15)
- {
- efl_file_simple_load(mesh[i], buffer, NULL);
- evas_canvas3d_mesh_frame_material_set(mesh[i], 0, material);
- evas_canvas3d_mesh_shader_mode_set(mesh[i], draw_mode[(i % 8)]);
- }
-
- mesh_node[i] = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_member_add(root_node, mesh_node[i]);
- evas_canvas3d_node_mesh_add(mesh_node[i], mesh[i]);
- evas_canvas3d_node_position_set(mesh_node[i], 0, ((i % 4) * 4) + ((i / 16) * 1) - 6.5, (((i % 16) / 4) * 4) - 6);
- }
-
- /* Set up scene. */
- evas_canvas3d_scene_root_node_set(scene, root_node);
- evas_canvas3d_scene_camera_node_set(scene, camera_node);
- evas_canvas3d_scene_size_set(scene, WIDTH, HEIGHT);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 100, 100, 100, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, scene);
-
- ecore_animator_frametime_set(0.03);
- for (i = 0; i < NUMBER_OF_MESHES; i++)
- anim = ecore_animator_add(_animate_scene, mesh_node[i]);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_animator_del(anim);
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-proxy.c b/src/examples/evas/evas-3d-proxy.c
deleted file mode 100644
index 8c88143a47..0000000000
--- a/src/examples/evas/evas-3d-proxy.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/**
- * Example of setting the texture source of an object in Evas-3D.
- *
- * Data which will be used as texture can be generated directly in application.
- *
- * @verbatim
- * gcc -o evas-3d-proxy evas-3d-proxy.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <math.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Evas.h>
-
-#define WIDTH 400
-#define HEIGHT 400
-
-#define IMG_WIDTH 256
-#define IMG_HEIGHT 256
-
-// undef this to test the legacy API for images
-#define USE_EO_IMAGE
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *mesh_node;
-
- Eo *camera;
- Eo *light;
- Eo *cube;
- Eo *mesh;
- Eo *material;
- Eo *texture;
-} Scene_Data;
-
-static Ecore_Evas *ecore_evas = NULL;
-static Evas *evas = NULL;
-static Eo *background = NULL;
-static Eo *image = NULL;
-static Eo *source = NULL;
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Scene_Data *scene = (Scene_Data *)data;
- unsigned int *pixels;
- int i, j, stride;
-
- angle += 0.5;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 1.0, 1.0, 1.0);
-
- /* Rotate */
- if (angle > 360.0) angle -= 360.0f;
-
-#ifdef USE_EO_IMAGE
- Eina_Rw_Slice slice;
- slice = efl_gfx_buffer_map(source, EFL_GFX_BUFFER_ACCESS_MODE_WRITE, NULL,
- EFL_GFX_COLORSPACE_ARGB8888, 0, &stride);
- pixels = slice.mem;
- if (!pixels) return EINA_TRUE;
-#else
- pixels = evas_object_image_data_get(source, EINA_TRUE);
- stride = evas_object_image_stride_get(source);
-#endif
-
- for (i = 0; i < IMG_HEIGHT; i++)
- {
- unsigned int *row = (unsigned int *)((char *)pixels + stride * i);
-
- for (j = 0; j < IMG_WIDTH; j++)
- {
- *row++ = rand() | 0xff000000;
- }
- }
-
-#ifdef USE_EO_IMAGE
- efl_gfx_buffer_unmap(source, slice);
- efl_gfx_buffer_update_add(source, NULL);
-#else
- evas_object_image_data_set(source, pixels);
- evas_object_image_data_update_add(source, 0, 0, IMG_WIDTH, IMG_HEIGHT);
-#endif
-
- return EINA_TRUE;
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(data->camera, 30.0, 1.0, 2.0, 50.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 5.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 10.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_mesh_setup(Scene_Data *data)
-{
- /* Setup material. */
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- data->texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
-
- evas_canvas3d_texture_source_set(data->texture, source);
- evas_canvas3d_texture_source_visible_set(data->texture, EINA_TRUE);
-
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
- evas_canvas3d_material_texture_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture);
-
- /* Set data of primitive */
- data->cube = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->cube, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
-
- /* Setup mesh. */
- data->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->mesh, 0, data->cube);
- evas_canvas3d_mesh_shader_mode_set(data->mesh, EVAS_CANVAS3D_SHADER_MODE_FLAT);
- evas_canvas3d_mesh_frame_material_set(data->mesh, 0, data->material);
-
- data->mesh_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node);
- evas_canvas3d_node_mesh_add(data->mesh_node, data->mesh);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- Scene_Data data;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add a background image. */
-#ifdef USE_EO_IMAGE
- source = efl_add(EFL_CANVAS_IMAGE_CLASS, evas);
- efl_gfx_buffer_copy_set(source, NULL, EINA_SIZE2D(IMG_WIDTH, IMG_HEIGHT), 0, EFL_GFX_COLORSPACE_ARGB8888, 0);
- efl_gfx_entity_position_set(source, EINA_POSITION2D((WIDTH / 2), (HEIGHT / 2)));
- efl_gfx_entity_size_set(source, EINA_SIZE2D((WIDTH / 2), (HEIGHT / 2)));
- efl_gfx_entity_visible_set(source, EINA_TRUE);
-#else
- source = evas_object_image_filled_add(evas);
- evas_object_image_size_set(source, IMG_WIDTH, IMG_HEIGHT);
- evas_object_move(source, (WIDTH / 2), (HEIGHT / 2));
- evas_object_resize(source, (WIDTH / 2), (HEIGHT / 2));
- evas_object_show(source);
-#endif
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D((WIDTH / 2), (HEIGHT / 2)));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
-
- /* Setup scene */
- _scene_setup(&data);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Add animation timer callback. */
- ecore_timer_add(0.016, _animate_scene, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-shadows.c b/src/examples/evas/evas-3d-shadows.c
deleted file mode 100644
index 315fda70cd..0000000000
--- a/src/examples/evas/evas-3d-shadows.c
+++ /dev/null
@@ -1,689 +0,0 @@
-/**
- * Example of setting up an animated Evas-3D scene with lighting and anti-aliasing.
- *
- * This example illustrates use of shadows, callbacks(clicked, collision),
- * technic of the billboard and post proccesing render with anti-aliasing.
- *
- * Model and cube are clickable. Model detects collision with sphere.
- * Cube detects collision with sphere, model and cone. Model and cude are moveable.
- * @see evas_canvas3d_scene_shadows_enable_set(Eina_Bool _shadows_enabled)
- * @see evas_canvas3d_object_callback_register
- * @see evas_canvas3d_billboard_set/get
- * @see evas_object_anti_alias_set/get
- *
- * Control keys and description:
- * 'w'/'s' key to move up/down object;
- * 'a'/'d' key to move left/right object;
- * 'q'/'e' key to move near/far object;
- * '1'/'2' key to change kind of node - billboard/normal model\n");
- * '3'/'4' key to enable/disable post proccesing render;
- * '5'/'6' key to enable/disable shadow effect;
- * Up/Down key to change position of camera;
- * 'i' key to return initial view of scene;
-
- * @verbatim
- * gcc -o evas-3d-shadows evas-3d-shadows.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo eina` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Eina.h>
-#include <math.h>
-#include "evas-common.h"
-
-#define WIDTH 1024
-#define HEIGHT 1024
-
-#define STEP 0.1
-#define BG_COLOR 0.2, 0.2, 0.2
-#define AMBIENT_LIGHT 0.2, 0.2, 0.2
-#define DIFFUSE_LIGHT 1.0, 1.0, 1.0
-#define SPECULAR_LIGHT 1.0, 1.0, 1.0
-
-static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2";
-static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sonic.png";
-static const char *b_image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/billboard.png";
-
-Ecore_Evas *ecore_evas = NULL;
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-Evas_Canvas3D_Node *choosed_node = NULL;
-
-typedef struct _Body_3D
-{
- Eo *primitive;
- Eo *material;
- Eo *mesh;
- Eo *node;
- Eo *texture;
-} Body_3D;
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *camera_node;
- Eo *camera;
- Eo *light_node;
- Eo *light;
- Eo *mediator;
-
- Body_3D sphere;
- Body_3D cube;
- Body_3D square;
- Body_3D cylinder;
- Body_3D model;
- Body_3D cone;
- Body_3D fence;
- Body_3D billboard;
-
- Eina_Bool init;
-} Scene_Data;
-
-void
-_cb_clicked(void *data EINA_UNUSED, const Efl_Event *event)
-{
- Eina_List *meshes = NULL, *l;
- Evas_Canvas3D_Mesh *m;
- Evas_Canvas3D_Node *billboard = NULL;
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get((Evas_Canvas3D_Node *)event->info);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- }
- if (choosed_node != (Evas_Canvas3D_Node *)event->info)
- {
- billboard = evas_canvas3d_node_billboard_target_get(choosed_node);
- if (!billboard)
- {
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(choosed_node);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- }
- choosed_node = (Evas_Canvas3D_Node *)event->info;
- }
-}
-
-void
-_cb_collision(void *data EINA_UNUSED, const Efl_Event *event)
-{
- Eina_List *meshes = NULL, *l;
- Evas_Canvas3D_Mesh *m;
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get((Evas_Canvas3D_Node *)event->info);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- }
-}
-
-static void
-_show_help()
-{
- printf("Press 'w'/'s' key to move up/down object\n");
- printf("Press 'a'/'d' key to move left/right object\n");
- printf("Press 'q'/'e' key to move near/far object\n");
- printf("Cude and model can be moved.\n");
- printf("Cube detects intersection with model, sphere, cone\n");
- printf("Model detects intersection with sphere\n");
- printf("Press '1'/'2' key to change kind of node - billboard/normal model\n");
- printf("Press '3'/'4' key to enable/disable post render with anti-aliasing\n");
- printf("Press '5'/'6' key to enable/disable shadow effect\n");
- printf("Press Up/Down key to change position of camera\n");
- printf("Press 'i' key to return initial view of scene\n");
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0;
- Evas_Real x, y, z;
- Scene_Data *scene = (Scene_Data *)data;
- if (scene->init)
- {
- evas_canvas3d_node_position_get(scene->mediator, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(scene->mediator, sin(angle) * 20, y, cos(angle) * 20);
- evas_canvas3d_node_look_at_set(scene->mediator, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 3.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 5.0, 0.0);
- angle += 0.005;
- if (angle > 360) angle = 0.0;
- }
- else
- {
- evas_canvas3d_node_position_set(scene->mediator, 0.0, 6.0, 12.0);
- evas_canvas3d_node_look_at_set(scene->mediator, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 3.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 5.0, 0.0);
- }
-
- return EINA_TRUE;
-}
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static void
-_body_material_set(Body_3D *body, float r, float g, float b)
-{
- body->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(body->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(body->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(body->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(body->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, r, g, b, 1.0);
- evas_canvas3d_material_color_set(body->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, r, g, b, 1.0);
- evas_canvas3d_material_color_set(body->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(body->material, 100.0);
-
- evas_canvas3d_mesh_shader_mode_set(body->mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(body->mesh, 0, body->material);
-}
-
-static void
-_sphere_setup(Body_3D *sphere)
-{
- sphere->primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(sphere->primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(sphere->primitive, 50);
-
- sphere->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(sphere->mesh, 0, sphere->primitive);
-
- _body_material_set(sphere, 1, 0.0, 0.0);
-
- sphere->node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH), evas_canvas3d_node_position_set(efl_added, 3.0, 3.0, 0.0));
- evas_canvas3d_node_mesh_add(sphere->node, sphere->mesh);
-}
-
-static void
-_cone_setup(Body_3D *cone)
-{
- cone->primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(cone->primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_CONE);
- evas_canvas3d_primitive_precision_set(cone->primitive, 50);
-
- cone->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(cone->mesh, 0, cone->primitive);
-
- _body_material_set(cone, 0.8, 0.5, 0.5);
-
- cone->node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_mesh_add(cone->node, cone->mesh);
- evas_canvas3d_node_orientation_angle_axis_set(cone->node, -90.0, 1.0, 0.0, 0.0);
- evas_canvas3d_node_position_set(cone->node, -4.0, 0.0, -3.0);
-}
-
-static void
-_cylinder_setup(Body_3D *cylinder)
-{
- cylinder->primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(cylinder->primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_CYLINDER);
- evas_canvas3d_primitive_precision_set(cylinder->primitive, 50);
-
- cylinder->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(cylinder->mesh, 0, cylinder->primitive);
-
- _body_material_set(cylinder, 0.0, 0.0, 1.0);
-
- cylinder->node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_mesh_add(cylinder->node, cylinder->mesh);
- evas_canvas3d_node_orientation_angle_axis_set(cylinder->node, -90.0, 1.0, 0.0, 0.0);
- evas_canvas3d_node_position_set(cylinder->node, -2.0, 3.0, 1.0);
-}
-
-static void
-_fence_setup(Body_3D *fence)
-{
-
- Eo *texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- evas_canvas3d_texture_atlas_enable_set(texture, EINA_FALSE);
- efl_file_simple_load(texture, PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/grid.png", NULL);
- evas_canvas3d_texture_filter_set(texture, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- Eo *texture1 = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- evas_canvas3d_texture_atlas_enable_set(texture1, EINA_FALSE);
- efl_file_simple_load(texture1, PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/grid_n.png", NULL);
- evas_canvas3d_texture_filter_set(texture1, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(texture1, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- fence->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_texture_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture);
- evas_canvas3d_material_texture_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, texture);
- evas_canvas3d_material_enable_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_texture_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, texture1);
- evas_canvas3d_material_color_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(fence->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(fence->material, 100.0);
-
- fence->primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(fence->primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_CYLINDER);
- evas_canvas3d_primitive_mode_set(fence->primitive, EVAS_CANVAS3D_PRIMITIVE_MODE_WITHOUT_BASE);
- evas_canvas3d_primitive_tex_scale_set(fence->primitive, 160.0, 12.0);
- evas_canvas3d_primitive_precision_set(fence->primitive, 50);
-
- fence->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(fence->mesh, 0, fence->primitive);
-
- evas_canvas3d_mesh_frame_material_set(fence->mesh, 0, fence->material);
- evas_canvas3d_mesh_alpha_func_set(fence->mesh, EVAS_CANVAS3D_COMPARISON_GREATER, 0);
- evas_canvas3d_mesh_alpha_test_enable_set(fence->mesh, EINA_TRUE);
- evas_canvas3d_mesh_shader_mode_set(fence->mesh, EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP);
- fence->node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_mesh_add(fence->node, fence->mesh);
- evas_canvas3d_node_orientation_angle_axis_set(fence->node, -90.0, 1.0, 0.0, 0.0);
- evas_canvas3d_node_scale_set(fence->node, 10.0, 10.0, 5.0);
- evas_canvas3d_node_position_set(fence->node, 0.0, -1.0, -2.0);
-}
-
-static void
-_square_setup(Body_3D *square)
-{
- square->primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(square->primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_SQUARE);
-
- square->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(square->mesh, 0, square->primitive);
-
- _body_material_set(square, 0.4, 0.4, 0.4);
-
- square->node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_mesh_add(square->node, square->mesh);
- evas_canvas3d_node_position_set(square->node, 0.0, -1.0, 0.0);
- evas_canvas3d_node_scale_set(square->node, 30.0, 30.0, 30.0);
- evas_canvas3d_node_orientation_angle_axis_set(square->node, 90.0, 1.0, 0.0, 0.0);
-}
-
-static void
-_box_setup(Body_3D *box)
-{
- box->primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(box->primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
-
- box->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(box->mesh, 0, box->primitive);
-
- _body_material_set(box, 0, 1, 0);
-
- box->node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_mesh_add(box->node, box->mesh);
- evas_canvas3d_node_position_set(box->node, 3.0, 0.0, -3.0);
-}
-
-static void
-_model_setup(Body_3D *model)
-{
- model->texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(model->texture, image_path, NULL);
- evas_canvas3d_texture_filter_set(model->texture, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(model->texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
- model->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_texture_set(model->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, model->texture);
- evas_canvas3d_material_texture_set(model->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, model->texture);
- evas_canvas3d_material_enable_set(model->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(model->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(model->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_shininess_set(model->material, 100.0);
-
-
- model->mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- efl_file_simple_load(model->mesh, model_path, NULL);
- evas_canvas3d_mesh_frame_material_set(model->mesh, 0, model->material);
- evas_canvas3d_mesh_shader_mode_set(model->mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-
- model->node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_mesh_add(model->node, model->mesh);
- evas_canvas3d_node_scale_set(model->node, 0.1, 0.1, 0.1);
- evas_canvas3d_node_orientation_angle_axis_set(model->node, 120.0, -0.577, -0.577, -0.577);
-}
-
-static void
-_billboard_setup(Scene_Data *data)
-{
- data->billboard.texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
- efl_file_simple_load(data->billboard.texture, b_image_path, NULL);
- evas_canvas3d_texture_filter_set(data->billboard.texture, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(data->billboard.texture, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
-
- data->billboard.primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->billboard.primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_SQUARE);
-
- data->billboard.mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- evas_canvas3d_mesh_from_primitive_set(data->billboard.mesh, 0, data->billboard.primitive);
-
- _body_material_set(&(data->billboard), 1.0, 1.0, 1.0);
-
- evas_canvas3d_material_texture_set(data->billboard.material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->billboard.texture);
-
- evas_canvas3d_mesh_frame_material_set(data->billboard.mesh, 0, data->billboard.material);
- evas_canvas3d_mesh_alpha_func_set(data->billboard.mesh, EVAS_CANVAS3D_COMPARISON_GREATER, 0);
- evas_canvas3d_mesh_alpha_test_enable_set(data->billboard.mesh, EINA_TRUE);
- evas_canvas3d_mesh_shader_mode_set(data->billboard.mesh, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- evas_canvas3d_mesh_blending_enable_set(data->billboard.mesh, EINA_TRUE);
- evas_canvas3d_mesh_blending_func_set(data->billboard.mesh, EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA, EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_ALPHA);
-
- data->billboard.node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_mesh_add(data->billboard.node, data->billboard.mesh);
- evas_canvas3d_node_position_set(data->billboard.node, 0.0, 2.0, 0.0);
- evas_canvas3d_node_scale_set(data->billboard.node, 2.2, 4.6, 4.0);
-
- evas_canvas3d_node_billboard_target_set(data->billboard.node, data->mediator);
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- data->mediator = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, 50.0, 1.0, 2.0, 100.0);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
-
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
-
-
- evas_canvas3d_node_position_set(data->mediator, 0.0, 6.0, 12.0);
- evas_canvas3d_node_look_at_set(data->mediator, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 3.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 5.0, 0.0);
-
- evas_canvas3d_node_member_add(data->mediator, data->camera_node);
- evas_canvas3d_node_member_add(data->root_node, data->mediator);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, AMBIENT_LIGHT, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, DIFFUSE_LIGHT, 1.0);
- evas_canvas3d_light_specular_set(data->light, SPECULAR_LIGHT, 1.0);
- evas_canvas3d_light_spot_cutoff_set(data->light, 20);
- evas_canvas3d_light_projection_perspective_set(data->light, 40.0, 1.0, 2.0, 1000.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 50.0, 50.0, 70.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 15.0, 0.0, -5.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->init = EINA_FALSE;
-
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, BG_COLOR, 1);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
-
- _camera_setup(data);
- _light_setup(data);
-
- _box_setup(&data->cube);
- _sphere_setup(&data->sphere);
- _cylinder_setup(&data->cylinder);
- _square_setup(&data->square);
- _model_setup(&data->model);
- _cone_setup(&data->cone);
- _fence_setup(&data->fence);
- _billboard_setup(data);
-
- evas_canvas3d_node_member_add(data->root_node, data->sphere.node);
- evas_canvas3d_node_member_add(data->root_node, data->cube.node);
- evas_canvas3d_node_member_add(data->root_node, data->cylinder.node);
- evas_canvas3d_node_member_add(data->root_node, data->square.node);
- evas_canvas3d_node_member_add(data->root_node, data->model.node);
- evas_canvas3d_node_member_add(data->root_node, data->cone.node);
- evas_canvas3d_node_member_add(data->root_node, data->fence.node);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
- evas_canvas3d_scene_shadows_enable_set(data->scene, EINA_TRUE);
-}
-
-static void
-_on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Evas_Event_Key_Down *ev = event_info;
- Scene_Data *scene = (Scene_Data *)data;
- if (!strcmp("w", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(choosed_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(choosed_node, x, y + STEP, z);
- }
- else if(!strcmp("s", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(choosed_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(choosed_node, x, y - STEP, z);
- }
- else if(!strcmp("a", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(choosed_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(choosed_node, x - STEP, y, z);
- }
- else if(!strcmp("d", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(choosed_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(choosed_node, x + STEP, y, z);
- }
- else if(!strcmp("q", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(choosed_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(choosed_node, x, y, z - STEP);
- }
- else if(!strcmp("e", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(choosed_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(choosed_node, x, y, z + STEP);
- }
- else if(!strcmp("1", ev->key))
- {
- evas_canvas3d_node_member_del(scene->root_node, scene->model.node);
- evas_canvas3d_node_member_add(scene->root_node, scene->billboard.node);
- }
- else if(!strcmp("2", ev->key))
- {
- evas_canvas3d_node_member_add(scene->root_node, scene->model.node);
- evas_canvas3d_node_member_del(scene->root_node, scene->billboard.node);
- }
- else if(!strcmp("3", ev->key))
- {
- evas_object_anti_alias_set(image, EINA_TRUE);
- }
- else if(!strcmp("4", ev->key))
- {
- evas_object_anti_alias_set(image, EINA_FALSE);
- }
- else if(!strcmp("5", ev->key))
- {
- evas_canvas3d_scene_shadows_enable_set(scene->scene, EINA_TRUE);
- }
- else if(!strcmp("6", ev->key))
- {
- evas_canvas3d_scene_shadows_enable_set(scene->scene, EINA_FALSE);
- }
- else if(!strcmp("Up", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(scene->camera_node, x, y, z + STEP);
- }
- else if(!strcmp("Down", ev->key))
- {
- Evas_Real x, y, z;
- evas_canvas3d_node_position_get(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set(scene->camera_node, x, y, z - STEP);
- }
- else if (!strcmp("i", ev->key))
- {
- scene->init = !scene->init;
- evas_canvas3d_node_position_set(scene->model.node, 0.0, 0.0, 0.0);
- evas_canvas3d_node_position_set(scene->billboard.node, 0.0, 2.0, 0.0);
- }
- else
- {
- _show_help();
- }
-}
-
-static void _init(Scene_Data *data)
-{
- Eina_List *meshes = NULL, *l;
- Evas_Canvas3D_Mesh *m;
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(data->sphere.node);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(data->cube.node);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(data->cylinder.node);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(data->model.node);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
- meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(data->cone.node);
- EINA_LIST_FOREACH(meshes, l, m)
- {
- evas_canvas3d_mesh_shader_mode_set(m, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- }
-}
-
-static void
-_on_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Scene_Data *d = (Scene_Data *)data;
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Canvas3D_Node *n = NULL;
- Evas_Canvas3D_Mesh *m = NULL;
- Evas_Real s, t;
- if (ev->button == 3)
- {
- _init(d);
- return;
- }
- evas_canvas3d_scene_pick(d->scene, ev->canvas.x, ev->canvas.y, &n, &m, &s, &t);
-
-}
-
-int
-main(void)
-{
- Scene_Data data;
- Ecore_Animator *anim;
- Eina_List *nodes1 = NULL, *nodes2 = NULL;
-
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
- evas_object_anti_alias_set(image, EINA_TRUE);
- evas_object_focus_set(image, EINA_TRUE);
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- nodes1 = eina_list_append(nodes1, data.sphere.node);
- nodes2 = eina_list_append(nodes2, data.sphere.node);
- nodes2 = eina_list_append(nodes2, data.model.node);
- nodes2 = eina_list_append(nodes2, data.cone.node);
-
- /*Set callbacks*/
- efl_event_callback_add(data.cube.node, EVAS_CANVAS3D_OBJECT_EVENT_CLICKED, _cb_clicked, NULL);
- efl_event_callback_add(data.cube.node, EVAS_CANVAS3D_OBJECT_EVENT_COLLISION, _cb_collision, nodes2);
-
- efl_event_callback_add(data.model.node, EVAS_CANVAS3D_OBJECT_EVENT_CLICKED, _cb_clicked, NULL);
- efl_event_callback_add(data.model.node, EVAS_CANVAS3D_OBJECT_EVENT_COLLISION, _cb_collision, nodes1);
-
- efl_event_callback_add(data.billboard.node, EVAS_CANVAS3D_OBJECT_EVENT_CLICKED, _cb_clicked, NULL);
- efl_event_callback_add(data.billboard.node, EVAS_CANVAS3D_OBJECT_EVENT_COLLISION, _cb_collision, nodes1);
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, &data);
-
- /* Add animator. */
- ecore_animator_frametime_set(0.008);
- anim = ecore_animator_add(_animate_scene, &data);
-
- /* Enter main loop. */
- ecore_main_loop_begin();
- ecore_animator_del(anim);
- eina_list_free(nodes1);
- eina_list_free(nodes2);
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/evas-3d-static-lod.c b/src/examples/evas/evas-3d-static-lod.c
deleted file mode 100644
index f4477289c7..0000000000
--- a/src/examples/evas/evas-3d-static-lod.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/**
- * Example of static LOD techniques in Evas-3D.
- *
- * Main idea using several meshes with different quantity of polygons,
- * render mesh depends on distance to the camera node.
- * Use key up/down to change animtion style:
- * Up (default) object motion
- * Down camera motion
- * @verbatim
- * gcc -o evas-3d-static-lod evas-3d-static-lod.c `pkg-config --libs --cflags efl evas ecore ecore-evas eina eo` -lm
- * @endverbatim
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include "evas-common.h"
-
-#define WIDTH 600
-#define HEIGHT 600
-#define NUMBER_MESHS 2
-#define DNEAR 90.0
-#define DFAR 1000.0
-
-static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/lod/iso_sphere";
-
-typedef struct _Scene_Data
-{
- Eo *scene;
- Eo *root_node;
- Eo *complex_node;
- Eo *camera_node;
- Eo *light_node;
- Eo *lod_mesh_node1;
- Eo *lod_mesh_node2;
-
- Eo *camera;
- Eo *light;
- Eo *material;
-} Scene_Data;
-
-static Ecore_Evas *ecore_evas = NULL;
-static Evas *evas = NULL;
-static Eo *background = NULL;
-static Eo *image = NULL;
-Eina_Bool animation_type = EINA_FALSE;
-
-static void
-_on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-static void
-_on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(w, h));
- efl_gfx_entity_size_set(image, EINA_SIZE2D(w, h));
-}
-
-static Eina_Bool
-_animate_scene(void *data)
-{
- static float angle = 0.0f;
- Evas_Real x, y, z;
- Scene_Data *scene = (Scene_Data *)data;
- static Eina_Bool pass = EINA_TRUE;
- if (animation_type) //Camera motion
- {
- evas_canvas3d_node_position_set(scene->complex_node, -20.0, 0.0, 50.0);
- evas_canvas3d_node_position_get(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- if (pass)
- z -= 4.0;
- else
- z += 4.0;
-
- if (z == DNEAR * 2.0) pass = EINA_FALSE;
- if (z == DFAR / 2.0) pass = EINA_TRUE;
-
- evas_canvas3d_node_position_set(scene->camera_node, x , y , z);
- evas_canvas3d_node_look_at_set(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0,
- EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- }
- else //Object motion
- {
- evas_canvas3d_node_position_set(scene->camera_node, 0.0, 0.0, 300.0);
- evas_canvas3d_node_look_at_set(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0,
- EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_position_get(scene->complex_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- evas_canvas3d_node_position_set( scene->complex_node, sin(angle) * 100 - 20 , y , cos(angle) * 200);
-
- angle += 0.02f;
- if (angle > 360.0) angle -= 360.0f;
- }
- return EINA_TRUE;
-
-}
-
-static void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
-
- evas_canvas3d_camera_projection_perspective_set(data->camera, DNEAR, 1.0, 2.0, DFAR);
-
- data->camera_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas,
- evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 0.0, 0.0, 300.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0,
- EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->camera_node);
-}
-
-static void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
-
- data->light_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas,
- evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, 0.0, 0.0, 300.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0,
- EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-static void
-_mesh_setup(Scene_Data *data)
-{
- int i = 0;
- Evas_Real distances[NUMBER_MESHS + 2] = {DNEAR, 150.0, 300.0, 500.0};
- Evas_Real m_distances[NUMBER_MESHS + 2] = {DNEAR, 200.0, 500.0, 500.0};
-
- /* Setup material. */
- data->material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(data->material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material, 100.0);
-
- data->lod_mesh_node1 =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas,
- evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
- evas_canvas3d_node_position_set(data->lod_mesh_node1, 2.0, 0.0, 0.0);
-
- data->lod_mesh_node2 =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas,
- evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- data->complex_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas,
- evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
- evas_canvas3d_node_scale_set(data->complex_node, 30.0, 30.0, 30.0);
-
- /* Setup mesh. One model, two meshes object with different lod distances.*/
- for (i = 0; i <= NUMBER_MESHS; i++)
- {
- Eo *mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- Eina_Stringshare *str = eina_stringshare_printf("%s%d%s", model_path,
- i, ".obj");
- efl_file_simple_load(mesh, str, NULL);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, data->material);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_lod_boundary_set(mesh, distances[i], distances[i + 1]);
- evas_canvas3d_node_mesh_add(data->lod_mesh_node1, mesh);
-
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
- efl_file_simple_load(mesh, str, NULL);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, data->material);
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_lod_boundary_set(mesh, m_distances[i], m_distances[i + 1]);
-
- evas_canvas3d_node_mesh_add(data->lod_mesh_node2, mesh);
- eina_stringshare_del(str);
- }
- evas_canvas3d_node_lod_enable_set(data->lod_mesh_node1, EINA_TRUE);
- evas_canvas3d_node_lod_enable_set(data->lod_mesh_node2, EINA_TRUE);
- evas_canvas3d_node_member_add(data->complex_node, data->lod_mesh_node1);
- evas_canvas3d_node_member_add(data->complex_node, data->lod_mesh_node2);
- evas_canvas3d_node_member_add(data->root_node, data->complex_node);
-}
-
-static void
-_scene_setup(Scene_Data *data)
-{
- data->scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
- evas_canvas3d_scene_size_set(data->scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
-
- data->root_node =
- efl_add(EVAS_CANVAS3D_NODE_CLASS, evas,
- evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup(data);
-
- evas_canvas3d_scene_root_node_set(data->scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(data->scene, data->camera_node);
-}
-
-static void
-_on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Key_Down *ev = event_info;
-
- if(!strcmp("Up", ev->key))
- animation_type = EINA_FALSE;
- else if(!strcmp("Down", ev->key))
- animation_type = EINA_TRUE;
-}
-
-int
-main(void)
-{
- // Unless Evas 3D supports Software renderer, we force use of the gl backend.
- putenv("ECORE_EVAS_ENGINE=opengl_x11");
-
- Scene_Data data;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- _scene_setup(&data);
-
- /* Add a background rectangle object. */
- background = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
- efl_gfx_color_set(background, 0, 0, 0, 255);
- efl_gfx_entity_size_set(background, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(background, EINA_TRUE);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- efl_gfx_entity_size_set(image, EINA_SIZE2D(WIDTH, HEIGHT));
- efl_gfx_entity_visible_set(image, EINA_TRUE);
- evas_object_focus_set(image, EINA_TRUE);
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, data.scene);
-
- /* Add animation timer callback. */
- ecore_animator_add(_animate_scene, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, &data);
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
-
diff --git a/src/examples/evas/evas-box.c b/src/examples/evas/evas-box.c
index 82d5483924..d42456f984 100644
--- a/src/examples/evas/evas-box.c
+++ b/src/examples/evas/evas-box.c
@@ -22,10 +22,12 @@
#include <stdio.h>
#include <string.h>
+#include "evas-common.h"
+
#define WIDTH (640)
#define HEIGHT (480)
-static const char *border_img_path = PACKAGE_EXAMPLES_DIR "/red.png";
+static const char *border_img_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/red.png";
static const char *commands = \
"commands are:\n"
@@ -150,13 +152,13 @@ list_free:
evas_object_box_align_get(d.box, &h, &v);
- if (h == 0.5)
+ if (EINA_DBL_EQ(h, 0.5))
h = v = 1.0;
- else if (h == 1.0)
+ else if (EINA_DBL_EQ(h, 1.0))
h = v = -1.0;
- else if (h == -1.0)
+ else if (EINA_DBL_EQ(h, -1.0))
h = v = 0.0;
- else if (h == 0.0)
+ else if (EINA_DBL_EQ(h, 0.0))
h = v = 0.5;
evas_object_box_align_set(d.box, h, v);
@@ -315,8 +317,6 @@ main(void)
Evas_Object *last, *o;
int i;
- srand(time(NULL));
-
if (!ecore_evas_init())
return EXIT_FAILURE;
diff --git a/src/examples/evas/evas-gl.c b/src/examples/evas/evas-gl.c
index 3694d3c9bc..0d90665647 100644
--- a/src/examples/evas/evas-gl.c
+++ b/src/examples/evas/evas-gl.c
@@ -199,7 +199,7 @@ view_set_ortho(float result[16], const float left, const float right,
const float bottom, const float top, const float near_,
const float far_)
{
- if ((right - left) == 0.0f || (top - bottom) == 0.0f || (far_ - near_) == 0.0f)
+ if (EINA_FLT_EQ((right - left), 0.0f) || EINA_FLT_EQ((top - bottom), 0.0f) || EINA_FLT_EQ((far_ - near_), 0.0f))
return 0;
result[0] = 2.0f / (right - left);
diff --git a/src/examples/evas/evas-images2.c b/src/examples/evas/evas-images2.c
index 74ac3f0e8d..30477ba02d 100644
--- a/src/examples/evas/evas-images2.c
+++ b/src/examples/evas/evas-images2.c
@@ -226,8 +226,6 @@ main(void)
unsigned int pixels[(WIDTH / 4) * (HEIGHT / 4)];
Evas_Textblock_Style *st;
- srand(time(NULL));
-
if (!ecore_evas_init())
return EXIT_FAILURE;
diff --git a/src/examples/evas/evas-object-manipulation-eo.c b/src/examples/evas/evas-object-manipulation-eo.c
index 6fba6e02bf..eb213d04bb 100644
--- a/src/examples/evas/evas-object-manipulation-eo.c
+++ b/src/examples/evas/evas-object-manipulation-eo.c
@@ -193,7 +193,7 @@ main(void)
* will be deleted automatically by parent.*/
if (efl_file_set(d.img, img_path)) goto panic;
-
+
err = efl_file_load(d.img);
if (err != EVAS_LOAD_ERROR_NONE)
diff --git a/src/examples/evas/evas-smart-interface.c b/src/examples/evas/evas-smart-interface.c
index 2d42952598..f3019e4110 100644
--- a/src/examples/evas/evas-smart-interface.c
+++ b/src/examples/evas/evas-smart-interface.c
@@ -678,8 +678,6 @@ main(void)
unsigned int count;
Eina_Bool ret;
- srand(time(NULL));
-
if (!ecore_evas_init())
return EXIT_FAILURE;
diff --git a/src/examples/evas/evas-smart-object.c b/src/examples/evas/evas-smart-object.c
index c0988e5029..7809f4f4b6 100644
--- a/src/examples/evas/evas-smart-object.c
+++ b/src/examples/evas/evas-smart-object.c
@@ -648,8 +648,6 @@ main(void)
unsigned int count;
Eina_Bool ret;
- srand(time(NULL));
-
if (!ecore_evas_init())
return EXIT_FAILURE;
diff --git a/src/examples/evas/evas-vg-batman.c b/src/examples/evas/evas-vg-batman.c
index 72bdd6c4fe..c0a14ddb77 100644
--- a/src/examples/evas/evas-vg-batman.c
+++ b/src/examples/evas/evas-vg-batman.c
@@ -18,10 +18,6 @@
#define WIDTH 800
#define HEIGHT 600
-#ifndef EFL_BETA_API_SUPPORT
-#define EFL_BETA_API_SUPPORT
-#endif
-
#include <Eo.h>
#include <Efl.h>
#include <Evas.h>
@@ -84,7 +80,7 @@ _animator(void *data EINA_UNUSED, double pos)
batmans_vg[next],
ecore_animator_pos_map(pos, ECORE_POS_MAP_SINUSOIDAL, 0.0, 0.0));
- if (pos == 1.0)
+ if (EINA_DBL_EQ(pos, 1.0))
{
animation_position = next;
animation = ecore_animator_timeline_add(1, _animator, NULL);
@@ -136,14 +132,14 @@ main(void)
evas_vg_node_color_set(batmans_vg[i], 120, 120, 120, 255);
evas_vg_shape_stroke_color_set(batmans_vg[i], 10, 10,128, 128);
evas_vg_shape_stroke_width_set(batmans_vg[i], 2.0);
- evas_vg_shape_stroke_join_set(batmans_vg[i], EFL_GFX_JOIN_ROUND);
+ evas_vg_shape_stroke_join_set(batmans_vg[i], EVAS_VG_JOIN_ROUND);
}
else
{
evas_vg_node_color_set(batmans_vg[i], 0, 0, 0, 255);
evas_vg_shape_stroke_color_set(batmans_vg[i], 128, 10,10, 128);
evas_vg_shape_stroke_width_set(batmans_vg[i], 4.0);
- evas_vg_shape_stroke_join_set(batmans_vg[i], EFL_GFX_JOIN_MITER);
+ evas_vg_shape_stroke_join_set(batmans_vg[i], EVAS_VG_JOIN_MITER);
}
evas_vg_shape_append_svg_path(batmans_vg[i], batmans_path[i]);
diff --git a/src/examples/evas/evas-vg-simple.c b/src/examples/evas/evas-vg-simple.c
index ef128d511e..6feac3d321 100644
--- a/src/examples/evas/evas-vg-simple.c
+++ b/src/examples/evas/evas-vg-simple.c
@@ -39,10 +39,6 @@
#define WIDTH 600
#define HEIGHT 600
-#ifndef EFL_BETA_API_SUPPORT
-#define EFL_BETA_API_SUPPORT
-#endif
-
#include <Eo.h>
#include <Efl.h>
#include <Evas.h>
@@ -314,7 +310,7 @@ _1_basic_shape_test()
evas_vg_shape_stroke_color_set(shape, 255, 0, 0, 255);
evas_vg_shape_stroke_width_set(shape, 5);
evas_vg_node_origin_set(shape, 50, 50);
- evas_vg_shape_stroke_cap_set(shape, EFL_GFX_CAP_ROUND);
+ evas_vg_shape_stroke_cap_set(shape, EVAS_VG_CAP_ROUND);
d.shape_list = eina_list_append(d.shape_list, shape);
new_shape = evas_vg_shape_add(container);
@@ -322,7 +318,7 @@ _1_basic_shape_test()
evas_vg_shape_stroke_color_set(new_shape, 0, 100, 0, 100);
evas_vg_shape_append_line_to(new_shape, 100, 50);
evas_vg_node_origin_set(new_shape, 200, 50);
- evas_vg_shape_stroke_cap_set(new_shape, EFL_GFX_CAP_SQUARE);
+ evas_vg_shape_stroke_cap_set(new_shape, EVAS_VG_CAP_SQUARE);
d.shape_list = eina_list_append(d.shape_list, new_shape);
new_shape = evas_vg_shape_add(container);
@@ -330,8 +326,8 @@ _1_basic_shape_test()
evas_vg_shape_stroke_color_set(new_shape, 0, 0, 255, 255);
evas_vg_shape_append_line_to(new_shape, 50, 50);
evas_vg_node_origin_set(new_shape, 350, 50);
- evas_vg_shape_stroke_cap_set(new_shape, EFL_GFX_CAP_ROUND);
- evas_vg_shape_stroke_join_set(new_shape, EFL_GFX_JOIN_ROUND);
+ evas_vg_shape_stroke_cap_set(new_shape, EVAS_VG_CAP_ROUND);
+ evas_vg_shape_stroke_join_set(new_shape, EVAS_VG_JOIN_ROUND);
d.shape_list = eina_list_append(d.shape_list, new_shape);
// Rect
@@ -382,7 +378,7 @@ _1_basic_shape_test()
shape = evas_vg_shape_add(container);
evas_vg_shape_append_arc(shape, 0, 0, 100, 100, 45, -200);
evas_vg_shape_append_line_to(shape, 50, 50);
- evas_vg_shape_stroke_cap_set(shape, EFL_GFX_CAP_ROUND);
+ evas_vg_shape_stroke_cap_set(shape, EVAS_VG_CAP_ROUND);
evas_vg_shape_stroke_color_set(shape, 255, 0, 0, 255);
evas_vg_shape_stroke_width_set(shape, 5);
evas_vg_node_origin_set(shape, 50, 450);
@@ -451,7 +447,7 @@ _interpolation_keyframe(void *data EINA_UNUSED, double pos)
eina_list_nth(d.shape_list, next),
ecore_animator_pos_map(pos, ECORE_POS_MAP_SINUSOIDAL, 0.0, 0.0));
- if (pos == 1.0)
+ if (EINA_DBL_EQ(pos, 1.0))
{
anim_index = (anim_index == 1) ? 0 : 1;
animator = ecore_animator_timeline_add(1, _interpolation_keyframe, NULL);
diff --git a/src/examples/evas/meson.build b/src/examples/evas/meson.build
index 279e8830c9..820b5a5a54 100644
--- a/src/examples/evas/meson.build
+++ b/src/examples/evas/meson.build
@@ -1,23 +1,4 @@
examples = [
- 'evas-3d-aabb',
- 'evas-3d-blending',
- 'evas-3d-colorpick',
- 'evas-3d-cube2',
- 'evas-3d-cube',
- 'evas-3d-cube-rotate',
- 'evas-3d-eet',
- 'evas-3d-fog',
- 'evas-3d-frustum',
- 'evas-3d-hull',
- 'evas-3d-md2',
- 'evas-3d-mmap-set',
- 'evas-3d-obj',
- 'evas-3d-parallax-occlusion',
- 'evas-3d-pick',
- 'evas-3d-ply',
- 'evas-3d-proxy',
- 'evas-3d-shadows',
- 'evas-3d-static-lod',
#'evas-aspect-hints',
'evas-box',
'evas-buffer-simple',
@@ -59,5 +40,3 @@ foreach example : examples
dependencies: [eina, ecore_evas, ecore_file, m],
c_args : ['-DPACKAGE_EXAMPLES_DIR="'+meson.current_source_dir()+'"'])
endforeach
-
-subdir('shooter')
diff --git a/src/examples/evas/resources/models/NoNormal_NoUVs_Colors.ply b/src/examples/evas/resources/models/NoNormal_NoUVs_Colors.ply
deleted file mode 100644
index 1c7583348d..0000000000
--- a/src/examples/evas/resources/models/NoNormal_NoUVs_Colors.ply
+++ /dev/null
@@ -1,67 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 22
-property float x
-property float y
-property float z
-property uchar red
-property uchar green
-property uchar blue
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650 128 128 128
--0.183650 0.000000 0.183650 130 130 130
--0.183650 -0.183650 0.000000 128 128 128
-0.183650 -0.183649 0.000000 128 128 128
-0.183650 0.000000 0.183650 128 128 128
-0.183650 0.183650 0.000000 128 128 128
--0.000000 0.183650 0.183650 128 128 128
--0.183650 0.183650 0.000000 128 128 128
--0.183650 0.000000 0.183650 129 129 129
-0.000000 0.183650 -0.183650 128 128 128
-0.183650 -0.000000 -0.183649 128 128 128
-0.000000 -0.183649 -0.183650 128 128 128
--0.183650 -0.000000 -0.183650 154 154 154
--0.183650 -0.000000 -0.183650 128 128 128
-0.000000 -1.000000 -0.000000 128 255 128
-1.000000 0.000001 0.000000 128 128 0
-0.183650 0.000000 0.183650 149 149 148
-0.000000 1.000000 0.000000 151 46 151
-0.000000 -0.000000 -1.000000 255 128 128
--0.000000 0.000000 1.000000 0 128 128
-0.000000 -0.000000 -1.000000 255 123 123
--1.000000 0.000000 0.000000 128 128 255
-3 0 1 2
-3 0 3 4
-3 5 6 4
-3 6 7 8
-3 9 5 10
-3 3 11 10
-3 2 12 11
-3 9 13 7
-3 0 2 14
-3 14 2 11
-3 14 11 3
-3 0 14 3
-3 15 16 3
-3 3 10 15
-3 15 10 5
-3 5 4 15
-3 17 6 5
-3 9 17 5
-3 18 9 10
-3 6 19 4
-3 19 6 1
-3 6 17 7
-3 7 17 9
-3 18 13 9
-3 12 20 11
-3 18 10 11
-3 2 1 21
-3 7 21 8
-3 21 7 13
-3 21 12 2
-3 19 1 0
-3 4 19 0
diff --git a/src/examples/evas/resources/models/NoNormal_NoUVs_NoColors.ply b/src/examples/evas/resources/models/NoNormal_NoUVs_NoColors.ply
deleted file mode 100644
index afc2937273..0000000000
--- a/src/examples/evas/resources/models/NoNormal_NoUVs_NoColors.ply
+++ /dev/null
@@ -1,60 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 18
-property float x
-property float y
-property float z
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650
--0.183650 0.000000 0.183650
--0.183650 -0.183650 0.000000
-0.183650 -0.183649 0.000000
-0.183650 0.000000 0.183650
-0.183650 0.183650 0.000000
--0.000000 0.183650 0.183650
--0.183650 0.183650 0.000000
-0.000000 0.183650 -0.183650
-0.183650 -0.000000 -0.183649
-0.000000 -0.183649 -0.183650
--0.183650 -0.000000 -0.183650
-0.000000 -1.000000 -0.000000
-1.000000 0.000001 0.000000
-0.000000 1.000000 0.000000
-0.000000 -0.000000 -1.000000
--0.000000 0.000000 1.000000
--1.000000 0.000000 0.000000
-3 0 1 2
-3 0 3 4
-3 5 6 4
-3 6 7 1
-3 8 5 9
-3 3 10 9
-3 2 11 10
-3 8 11 7
-3 0 2 12
-3 12 2 10
-3 12 10 3
-3 0 12 3
-3 13 4 3
-3 3 9 13
-3 13 9 5
-3 5 4 13
-3 14 6 5
-3 8 14 5
-3 15 8 9
-3 6 16 4
-3 16 6 1
-3 6 14 7
-3 7 14 8
-3 15 11 8
-3 11 15 10
-3 15 9 10
-3 2 1 17
-3 7 17 1
-3 17 7 11
-3 17 11 2
-3 16 1 0
-3 4 16 0
diff --git a/src/examples/evas/resources/models/NoNormal_UVs_Colors.ply b/src/examples/evas/resources/models/NoNormal_UVs_Colors.ply
deleted file mode 100644
index 81538da26b..0000000000
--- a/src/examples/evas/resources/models/NoNormal_UVs_Colors.ply
+++ /dev/null
@@ -1,143 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 96
-property float x
-property float y
-property float z
-property float s
-property float t
-property uchar red
-property uchar green
-property uchar blue
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650 0.050297 0.982954 128 128 128
--0.183650 0.000000 0.183650 0.974921 0.982954 130 130 130
--0.183650 -0.183650 0.000000 0.974921 0.058330 128 128 128
--0.000000 -0.183650 0.183650 0.973896 0.987342 128 128 128
-0.183650 -0.183649 0.000000 0.973896 0.062718 128 128 128
-0.183650 0.000000 0.183650 0.049272 0.987342 128 128 128
-0.183650 0.183650 0.000000 0.045665 0.987342 128 128 128
--0.000000 0.183650 0.183650 0.970289 0.987342 128 128 128
-0.183650 0.000000 0.183650 0.970289 0.062718 128 128 128
--0.000000 0.183650 0.183650 0.020228 0.028261 128 128 128
--0.183650 0.183650 0.000000 0.944852 0.028261 128 128 128
--0.183650 0.000000 0.183650 0.020228 0.952885 129 129 129
-0.000000 0.183650 -0.183650 0.943828 0.032650 128 128 128
-0.183650 0.183650 0.000000 0.019203 0.032650 128 128 128
-0.183650 -0.000000 -0.183649 0.019203 0.957274 128 128 128
-0.183650 -0.183649 0.000000 0.046157 0.987627 128 128 128
-0.000000 -0.183649 -0.183650 0.970781 0.063003 128 128 128
-0.183650 -0.000000 -0.183649 0.970781 0.987627 128 128 128
--0.183650 -0.183650 0.000000 0.940712 0.032934 128 128 128
--0.183650 -0.000000 -0.183650 0.016088 0.032934 154 154 154
-0.000000 -0.183649 -0.183650 0.016088 0.957558 128 128 128
-0.000000 0.183650 -0.183650 0.940220 0.032650 128 128 128
--0.183650 -0.000000 -0.183650 0.015596 0.957274 128 128 128
--0.183650 0.183650 0.000000 0.015596 0.032650 128 128 128
--0.000000 -0.183650 0.183650 0.050297 0.982670 128 128 128
--0.183650 -0.183650 0.000000 0.974921 0.982670 128 128 128
-0.000000 -1.000000 -0.000000 0.974921 0.058046 128 255 128
-0.000000 -1.000000 -0.000000 0.020228 0.952601 128 255 128
--0.183650 -0.183650 0.000000 0.020228 0.027977 128 128 128
-0.000000 -0.183649 -0.183650 0.944852 0.027977 128 128 128
-0.000000 -1.000000 -0.000000 0.974388 0.062718 128 255 128
-0.000000 -0.183649 -0.183650 0.974388 0.987342 128 128 128
-0.183650 -0.183649 0.000000 0.049764 0.987342 128 128 128
--0.000000 -0.183650 0.183650 0.019695 0.032650 128 128 128
-0.000000 -1.000000 -0.000000 0.019695 0.957274 128 255 128
-0.183650 -0.183649 0.000000 0.944319 0.032650 128 128 128
-1.000000 0.000001 0.000000 0.970781 0.062718 128 128 0
-0.183650 0.000000 0.183650 0.046157 0.987342 149 149 148
-0.183650 -0.183649 0.000000 0.970781 0.987342 128 128 128
-0.183650 -0.183649 0.000000 0.053904 0.982954 128 128 128
-0.183650 -0.000000 -0.183649 0.978528 0.982954 128 128 128
-1.000000 0.000001 0.000000 0.978528 0.058330 128 128 0
-1.000000 0.000001 0.000000 0.978036 0.058046 128 128 0
-0.183650 -0.000000 -0.183649 0.978036 0.982670 128 128 128
-0.183650 0.183650 0.000000 0.053412 0.982670 128 128 128
-0.183650 0.183650 0.000000 0.016088 0.032650 128 128 128
-0.183650 0.000000 0.183650 0.940712 0.032650 128 128 128
-1.000000 0.000001 0.000000 0.016088 0.957274 128 128 0
-0.000000 1.000000 0.000000 0.974388 0.063003 151 46 151
--0.000000 0.183650 0.183650 0.049764 0.987627 128 128 128
-0.183650 0.183650 0.000000 0.974388 0.987627 128 128 128
-0.000000 0.183650 -0.183650 0.023835 0.028261 128 128 128
-0.000000 1.000000 0.000000 0.023835 0.952885 151 46 151
-0.183650 0.183650 0.000000 0.948459 0.028261 128 128 128
-0.000000 -0.000000 -1.000000 0.974429 0.058046 255 128 128
-0.000000 0.183650 -0.183650 0.049805 0.982670 128 128 128
-0.183650 -0.000000 -0.183649 0.974429 0.982670 128 128 128
--0.000000 0.183650 0.183650 0.053412 0.982954 128 128 128
--0.000000 0.000000 1.000000 0.978036 0.058330 0 128 128
-0.183650 0.000000 0.183650 0.978036 0.982954 128 128 128
--0.000000 0.000000 1.000000 0.974429 0.058330 0 128 128
--0.000000 0.183650 0.183650 0.049805 0.982954 128 128 128
--0.183650 0.000000 0.183650 0.974429 0.982954 130 130 130
--0.000000 0.183650 0.183650 0.023343 0.027977 128 128 128
-0.000000 1.000000 0.000000 0.023343 0.952601 151 46 151
--0.183650 0.183650 0.000000 0.947968 0.027977 128 128 128
--0.183650 0.183650 0.000000 0.944319 0.032934 128 128 128
-0.000000 1.000000 0.000000 0.019695 0.957558 151 46 151
-0.000000 0.183650 -0.183650 0.019695 0.032934 128 128 128
-0.000000 -0.000000 -1.000000 0.019736 0.952601 255 128 128
--0.183650 -0.000000 -0.183650 0.019736 0.027977 128 128 128
-0.000000 0.183650 -0.183650 0.944360 0.027977 128 128 128
--0.183650 -0.000000 -0.183650 0.053904 0.982670 154 154 154
-0.000000 -0.000000 -1.000000 0.978528 0.058046 255 123 123
-0.000000 -0.183649 -0.183650 0.978528 0.982670 128 128 128
-0.000000 -0.000000 -1.000000 0.023835 0.952601 255 128 128
-0.183650 -0.000000 -0.183649 0.948459 0.027977 128 128 128
-0.000000 -0.183649 -0.183650 0.023835 0.027977 128 128 128
--0.183650 -0.183650 0.000000 0.973896 0.987627 128 128 128
--0.183650 0.000000 0.183650 0.049272 0.987627 130 130 130
--1.000000 0.000000 0.000000 0.973896 0.063003 128 128 255
--0.183650 0.183650 0.000000 0.019736 0.028261 128 128 128
--1.000000 0.000000 0.000000 0.019736 0.952885 128 128 255
--0.183650 0.000000 0.183650 0.944360 0.028261 129 129 129
--1.000000 0.000000 0.000000 0.970289 0.063003 128 128 255
--0.183650 0.183650 0.000000 0.045665 0.987627 128 128 128
--0.183650 -0.000000 -0.183650 0.970289 0.987627 128 128 128
--1.000000 0.000000 0.000000 0.019203 0.957558 128 128 255
--0.183650 -0.000000 -0.183650 0.019203 0.032934 154 154 154
--0.183650 -0.183650 0.000000 0.943828 0.032934 128 128 128
--0.000000 0.000000 1.000000 0.015596 0.957558 0 128 128
--0.183650 0.000000 0.183650 0.015596 0.032934 130 130 130
--0.000000 -0.183650 0.183650 0.940220 0.032934 128 128 128
-0.183650 0.000000 0.183650 0.023343 0.028261 128 128 128
--0.000000 0.000000 1.000000 0.023343 0.952885 0 128 128
--0.000000 -0.183650 0.183650 0.947968 0.028261 128 128 128
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-3 66 67 68
-3 69 70 71
-3 72 73 74
-3 75 76 77
-3 78 79 80
-3 81 82 83
-3 84 85 86
-3 87 88 89
-3 90 91 92
-3 93 94 95
diff --git a/src/examples/evas/resources/models/NoNormal_UVs_NoColors.ply b/src/examples/evas/resources/models/NoNormal_UVs_NoColors.ply
deleted file mode 100644
index 2cd9176d27..0000000000
--- a/src/examples/evas/resources/models/NoNormal_UVs_NoColors.ply
+++ /dev/null
@@ -1,140 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 96
-property float x
-property float y
-property float z
-property float s
-property float t
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650 0.050297 0.982954
--0.183650 0.000000 0.183650 0.974921 0.982954
--0.183650 -0.183650 0.000000 0.974921 0.058330
--0.000000 -0.183650 0.183650 0.973896 0.987342
-0.183650 -0.183649 0.000000 0.973896 0.062718
-0.183650 0.000000 0.183650 0.049272 0.987342
-0.183650 0.183650 0.000000 0.045665 0.987342
--0.000000 0.183650 0.183650 0.970289 0.987342
-0.183650 0.000000 0.183650 0.970289 0.062718
--0.000000 0.183650 0.183650 0.020228 0.028261
--0.183650 0.183650 0.000000 0.944852 0.028261
--0.183650 0.000000 0.183650 0.020228 0.952885
-0.000000 0.183650 -0.183650 0.943828 0.032650
-0.183650 0.183650 0.000000 0.019203 0.032650
-0.183650 -0.000000 -0.183649 0.019203 0.957274
-0.183650 -0.183649 0.000000 0.046157 0.987627
-0.000000 -0.183649 -0.183650 0.970781 0.063003
-0.183650 -0.000000 -0.183649 0.970781 0.987627
--0.183650 -0.183650 0.000000 0.940712 0.032934
--0.183650 -0.000000 -0.183650 0.016088 0.032934
-0.000000 -0.183649 -0.183650 0.016088 0.957558
-0.000000 0.183650 -0.183650 0.940220 0.032650
--0.183650 -0.000000 -0.183650 0.015596 0.957274
--0.183650 0.183650 0.000000 0.015596 0.032650
--0.000000 -0.183650 0.183650 0.050297 0.982670
--0.183650 -0.183650 0.000000 0.974921 0.982670
-0.000000 -1.000000 -0.000000 0.974921 0.058046
-0.000000 -1.000000 -0.000000 0.020228 0.952601
--0.183650 -0.183650 0.000000 0.020228 0.027977
-0.000000 -0.183649 -0.183650 0.944852 0.027977
-0.000000 -1.000000 -0.000000 0.974388 0.062718
-0.000000 -0.183649 -0.183650 0.974388 0.987342
-0.183650 -0.183649 0.000000 0.049764 0.987342
--0.000000 -0.183650 0.183650 0.019695 0.032650
-0.000000 -1.000000 -0.000000 0.019695 0.957274
-0.183650 -0.183649 0.000000 0.944319 0.032650
-1.000000 0.000001 0.000000 0.970781 0.062718
-0.183650 0.000000 0.183650 0.046157 0.987342
-0.183650 -0.183649 0.000000 0.970781 0.987342
-0.183650 -0.183649 0.000000 0.053904 0.982954
-0.183650 -0.000000 -0.183649 0.978528 0.982954
-1.000000 0.000001 0.000000 0.978528 0.058330
-1.000000 0.000001 0.000000 0.978036 0.058046
-0.183650 -0.000000 -0.183649 0.978036 0.982670
-0.183650 0.183650 0.000000 0.053412 0.982670
-0.183650 0.183650 0.000000 0.016088 0.032650
-0.183650 0.000000 0.183650 0.940712 0.032650
-1.000000 0.000001 0.000000 0.016088 0.957274
-0.000000 1.000000 0.000000 0.974388 0.063003
--0.000000 0.183650 0.183650 0.049764 0.987627
-0.183650 0.183650 0.000000 0.974388 0.987627
-0.000000 0.183650 -0.183650 0.023835 0.028261
-0.000000 1.000000 0.000000 0.023835 0.952885
-0.183650 0.183650 0.000000 0.948459 0.028261
-0.000000 -0.000000 -1.000000 0.974429 0.058046
-0.000000 0.183650 -0.183650 0.049805 0.982670
-0.183650 -0.000000 -0.183649 0.974429 0.982670
--0.000000 0.183650 0.183650 0.053412 0.982954
--0.000000 0.000000 1.000000 0.978036 0.058330
-0.183650 0.000000 0.183650 0.978036 0.982954
--0.000000 0.000000 1.000000 0.974429 0.058330
--0.000000 0.183650 0.183650 0.049805 0.982954
--0.183650 0.000000 0.183650 0.974429 0.982954
--0.000000 0.183650 0.183650 0.023343 0.027977
-0.000000 1.000000 0.000000 0.023343 0.952601
--0.183650 0.183650 0.000000 0.947968 0.027977
--0.183650 0.183650 0.000000 0.944319 0.032934
-0.000000 1.000000 0.000000 0.019695 0.957558
-0.000000 0.183650 -0.183650 0.019695 0.032934
-0.000000 -0.000000 -1.000000 0.019736 0.952601
--0.183650 -0.000000 -0.183650 0.019736 0.027977
-0.000000 0.183650 -0.183650 0.944360 0.027977
--0.183650 -0.000000 -0.183650 0.053904 0.982670
-0.000000 -0.000000 -1.000000 0.978528 0.058046
-0.000000 -0.183649 -0.183650 0.978528 0.982670
-0.000000 -0.000000 -1.000000 0.023835 0.952601
-0.183650 -0.000000 -0.183649 0.948459 0.027977
-0.000000 -0.183649 -0.183650 0.023835 0.027977
--0.183650 -0.183650 0.000000 0.973896 0.987627
--0.183650 0.000000 0.183650 0.049272 0.987627
--1.000000 0.000000 0.000000 0.973896 0.063003
--0.183650 0.183650 0.000000 0.019736 0.028261
--1.000000 0.000000 0.000000 0.019736 0.952885
--0.183650 0.000000 0.183650 0.944360 0.028261
--1.000000 0.000000 0.000000 0.970289 0.063003
--0.183650 0.183650 0.000000 0.045665 0.987627
--0.183650 -0.000000 -0.183650 0.970289 0.987627
--1.000000 0.000000 0.000000 0.019203 0.957558
--0.183650 -0.000000 -0.183650 0.019203 0.032934
--0.183650 -0.183650 0.000000 0.943828 0.032934
--0.000000 0.000000 1.000000 0.015596 0.957558
--0.183650 0.000000 0.183650 0.015596 0.032934
--0.000000 -0.183650 0.183650 0.940220 0.032934
-0.183650 0.000000 0.183650 0.023343 0.028261
--0.000000 0.000000 1.000000 0.023343 0.952885
--0.000000 -0.183650 0.183650 0.947968 0.028261
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-3 66 67 68
-3 69 70 71
-3 72 73 74
-3 75 76 77
-3 78 79 80
-3 81 82 83
-3 84 85 86
-3 87 88 89
-3 90 91 92
-3 93 94 95
diff --git a/src/examples/evas/resources/models/Normal_NoUVs_Colors.ply b/src/examples/evas/resources/models/Normal_NoUVs_Colors.ply
deleted file mode 100644
index 6119421ac5..0000000000
--- a/src/examples/evas/resources/models/Normal_NoUVs_Colors.ply
+++ /dev/null
@@ -1,144 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 96
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-property uchar red
-property uchar green
-property uchar blue
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650 -0.577350 -0.577351 0.577350 128 128 128
--0.183650 0.000000 0.183650 -0.577350 -0.577351 0.577350 130 130 130
--0.183650 -0.183650 0.000000 -0.577350 -0.577351 0.577350 128 128 128
--0.000000 -0.183650 0.183650 0.577350 -0.577351 0.577350 128 128 128
-0.183650 -0.183649 0.000000 0.577350 -0.577351 0.577350 128 128 128
-0.183650 0.000000 0.183650 0.577350 -0.577351 0.577350 128 128 128
-0.183650 0.183650 0.000000 0.577350 0.577350 0.577350 128 128 128
--0.000000 0.183650 0.183650 0.577350 0.577350 0.577350 128 128 128
-0.183650 0.000000 0.183650 0.577350 0.577350 0.577350 128 128 128
--0.000000 0.183650 0.183650 -0.577350 0.577350 0.577350 128 128 128
--0.183650 0.183650 0.000000 -0.577350 0.577350 0.577350 128 128 128
--0.183650 0.000000 0.183650 -0.577350 0.577350 0.577350 129 129 129
-0.000000 0.183650 -0.183650 0.577351 0.577349 -0.577351 128 128 128
-0.183650 0.183650 0.000000 0.577351 0.577349 -0.577351 128 128 128
-0.183650 -0.000000 -0.183649 0.577351 0.577349 -0.577351 128 128 128
-0.183650 -0.183649 0.000000 0.577350 -0.577350 -0.577350 128 128 128
-0.000000 -0.183649 -0.183650 0.577350 -0.577350 -0.577350 128 128 128
-0.183650 -0.000000 -0.183649 0.577350 -0.577350 -0.577350 128 128 128
--0.183650 -0.183650 0.000000 -0.577350 -0.577350 -0.577350 128 128 128
--0.183650 -0.000000 -0.183650 -0.577350 -0.577350 -0.577350 154 154 154
-0.000000 -0.183649 -0.183650 -0.577350 -0.577350 -0.577350 128 128 128
-0.000000 0.183650 -0.183650 -0.577350 0.577349 -0.577351 128 128 128
--0.183650 -0.000000 -0.183650 -0.577350 0.577349 -0.577351 128 128 128
--0.183650 0.183650 0.000000 -0.577350 0.577349 -0.577351 128 128 128
--0.000000 -0.183650 0.183650 -0.698327 -0.157099 0.698327 128 128 128
--0.183650 -0.183650 0.000000 -0.698327 -0.157099 0.698327 128 128 128
-0.000000 -1.000000 -0.000000 -0.698327 -0.157099 0.698327 128 255 128
-0.000000 -1.000000 -0.000000 -0.698327 -0.157098 -0.698327 128 255 128
--0.183650 -0.183650 0.000000 -0.698327 -0.157098 -0.698327 128 128 128
-0.000000 -0.183649 -0.183650 -0.698327 -0.157098 -0.698327 128 128 128
-0.000000 -1.000000 -0.000000 0.698327 -0.157098 -0.698327 128 255 128
-0.000000 -0.183649 -0.183650 0.698327 -0.157098 -0.698327 128 128 128
-0.183650 -0.183649 0.000000 0.698327 -0.157098 -0.698327 128 128 128
--0.000000 -0.183650 0.183650 0.698326 -0.157099 0.698327 128 128 128
-0.000000 -1.000000 -0.000000 0.698326 -0.157099 0.698327 128 255 128
-0.183650 -0.183649 0.000000 0.698326 -0.157099 0.698327 128 128 128
-1.000000 0.000001 0.000000 0.157100 -0.698328 0.698325 128 128 0
-0.183650 0.000000 0.183650 0.157100 -0.698328 0.698325 149 149 148
-0.183650 -0.183649 0.000000 0.157100 -0.698328 0.698325 128 128 128
-0.183650 -0.183649 0.000000 0.157099 -0.698327 -0.698327 128 128 128
-0.183650 -0.000000 -0.183649 0.157099 -0.698327 -0.698327 128 128 128
-1.000000 0.000001 0.000000 0.157099 -0.698327 -0.698327 128 128 0
-1.000000 0.000001 0.000000 0.157098 0.698325 -0.698328 128 128 0
-0.183650 -0.000000 -0.183649 0.157098 0.698325 -0.698328 128 128 128
-0.183650 0.183650 0.000000 0.157098 0.698325 -0.698328 128 128 128
-0.183650 0.183650 0.000000 0.157098 0.698327 0.698327 128 128 128
-0.183650 0.000000 0.183650 0.157098 0.698327 0.698327 128 128 128
-1.000000 0.000001 0.000000 0.157098 0.698327 0.698327 128 128 0
-0.000000 1.000000 0.000000 0.698327 0.157099 0.698326 151 46 151
--0.000000 0.183650 0.183650 0.698327 0.157099 0.698326 128 128 128
-0.183650 0.183650 0.000000 0.698327 0.157099 0.698326 128 128 128
-0.000000 0.183650 -0.183650 0.698327 0.157099 -0.698327 128 128 128
-0.000000 1.000000 0.000000 0.698327 0.157099 -0.698327 151 46 151
-0.183650 0.183650 0.000000 0.698327 0.157099 -0.698327 128 128 128
-0.000000 -0.000000 -1.000000 0.698327 0.698326 -0.157099 255 128 128
-0.000000 0.183650 -0.183650 0.698327 0.698326 -0.157099 128 128 128
-0.183650 -0.000000 -0.183649 0.698327 0.698326 -0.157099 128 128 128
--0.000000 0.183650 0.183650 0.698327 0.698326 0.157099 128 128 128
--0.000000 0.000000 1.000000 0.698327 0.698326 0.157099 0 128 128
-0.183650 0.000000 0.183650 0.698327 0.698326 0.157099 128 128 128
--0.000000 0.000000 1.000000 -0.698327 0.698326 0.157099 0 128 128
--0.000000 0.183650 0.183650 -0.698327 0.698326 0.157099 128 128 128
--0.183650 0.000000 0.183650 -0.698327 0.698326 0.157099 130 130 130
--0.000000 0.183650 0.183650 -0.698327 0.157099 0.698327 128 128 128
-0.000000 1.000000 0.000000 -0.698327 0.157099 0.698327 151 46 151
--0.183650 0.183650 0.000000 -0.698327 0.157099 0.698327 128 128 128
--0.183650 0.183650 0.000000 -0.698326 0.157099 -0.698327 128 128 128
-0.000000 1.000000 0.000000 -0.698326 0.157099 -0.698327 151 46 151
-0.000000 0.183650 -0.183650 -0.698326 0.157099 -0.698327 128 128 128
-0.000000 -0.000000 -1.000000 -0.698327 0.698326 -0.157099 255 128 128
--0.183650 -0.000000 -0.183650 -0.698327 0.698326 -0.157099 128 128 128
-0.000000 0.183650 -0.183650 -0.698327 0.698326 -0.157099 128 128 128
--0.183650 -0.000000 -0.183650 -0.698326 -0.698327 -0.157099 154 154 154
-0.000000 -0.000000 -1.000000 -0.698326 -0.698327 -0.157099 255 123 123
-0.000000 -0.183649 -0.183650 -0.698326 -0.698327 -0.157099 128 128 128
-0.000000 -0.000000 -1.000000 0.698326 -0.698327 -0.157098 255 128 128
-0.183650 -0.000000 -0.183649 0.698326 -0.698327 -0.157098 128 128 128
-0.000000 -0.183649 -0.183650 0.698326 -0.698327 -0.157098 128 128 128
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 0.698326 128 128 128
--0.183650 0.000000 0.183650 -0.157099 -0.698327 0.698326 130 130 130
--1.000000 0.000000 0.000000 -0.157099 -0.698327 0.698326 128 128 255
--0.183650 0.183650 0.000000 -0.157099 0.698327 0.698326 128 128 128
--1.000000 0.000000 0.000000 -0.157099 0.698327 0.698326 128 128 255
--0.183650 0.000000 0.183650 -0.157099 0.698327 0.698326 129 129 129
--1.000000 0.000000 0.000000 -0.157099 0.698326 -0.698327 128 128 255
--0.183650 0.183650 0.000000 -0.157099 0.698326 -0.698327 128 128 128
--0.183650 -0.000000 -0.183650 -0.157099 0.698326 -0.698327 128 128 128
--1.000000 0.000000 0.000000 -0.157099 -0.698327 -0.698327 128 128 255
--0.183650 -0.000000 -0.183650 -0.157099 -0.698327 -0.698327 154 154 154
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 -0.698327 128 128 128
--0.000000 0.000000 1.000000 -0.698326 -0.698327 0.157099 0 128 128
--0.183650 0.000000 0.183650 -0.698326 -0.698327 0.157099 130 130 130
--0.000000 -0.183650 0.183650 -0.698326 -0.698327 0.157099 128 128 128
-0.183650 0.000000 0.183650 0.698327 -0.698327 0.157099 128 128 128
--0.000000 0.000000 1.000000 0.698327 -0.698327 0.157099 0 128 128
--0.000000 -0.183650 0.183650 0.698327 -0.698327 0.157099 128 128 128
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-3 66 67 68
-3 69 70 71
-3 72 73 74
-3 75 76 77
-3 78 79 80
-3 81 82 83
-3 84 85 86
-3 87 88 89
-3 90 91 92
-3 93 94 95
diff --git a/src/examples/evas/resources/models/Normal_NoUVs_NoColors.ply b/src/examples/evas/resources/models/Normal_NoUVs_NoColors.ply
deleted file mode 100644
index 778ae2d279..0000000000
--- a/src/examples/evas/resources/models/Normal_NoUVs_NoColors.ply
+++ /dev/null
@@ -1,141 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 96
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650 -0.577350 -0.577351 0.577350
--0.183650 0.000000 0.183650 -0.577350 -0.577351 0.577350
--0.183650 -0.183650 0.000000 -0.577350 -0.577351 0.577350
--0.000000 -0.183650 0.183650 0.577350 -0.577351 0.577350
-0.183650 -0.183649 0.000000 0.577350 -0.577351 0.577350
-0.183650 0.000000 0.183650 0.577350 -0.577351 0.577350
-0.183650 0.183650 0.000000 0.577350 0.577350 0.577350
--0.000000 0.183650 0.183650 0.577350 0.577350 0.577350
-0.183650 0.000000 0.183650 0.577350 0.577350 0.577350
--0.000000 0.183650 0.183650 -0.577350 0.577350 0.577350
--0.183650 0.183650 0.000000 -0.577350 0.577350 0.577350
--0.183650 0.000000 0.183650 -0.577350 0.577350 0.577350
-0.000000 0.183650 -0.183650 0.577351 0.577349 -0.577351
-0.183650 0.183650 0.000000 0.577351 0.577349 -0.577351
-0.183650 -0.000000 -0.183649 0.577351 0.577349 -0.577351
-0.183650 -0.183649 0.000000 0.577350 -0.577350 -0.577350
-0.000000 -0.183649 -0.183650 0.577350 -0.577350 -0.577350
-0.183650 -0.000000 -0.183649 0.577350 -0.577350 -0.577350
--0.183650 -0.183650 0.000000 -0.577350 -0.577350 -0.577350
--0.183650 -0.000000 -0.183650 -0.577350 -0.577350 -0.577350
-0.000000 -0.183649 -0.183650 -0.577350 -0.577350 -0.577350
-0.000000 0.183650 -0.183650 -0.577350 0.577349 -0.577351
--0.183650 -0.000000 -0.183650 -0.577350 0.577349 -0.577351
--0.183650 0.183650 0.000000 -0.577350 0.577349 -0.577351
--0.000000 -0.183650 0.183650 -0.698327 -0.157099 0.698327
--0.183650 -0.183650 0.000000 -0.698327 -0.157099 0.698327
-0.000000 -1.000000 -0.000000 -0.698327 -0.157099 0.698327
-0.000000 -1.000000 -0.000000 -0.698327 -0.157098 -0.698327
--0.183650 -0.183650 0.000000 -0.698327 -0.157098 -0.698327
-0.000000 -0.183649 -0.183650 -0.698327 -0.157098 -0.698327
-0.000000 -1.000000 -0.000000 0.698327 -0.157098 -0.698327
-0.000000 -0.183649 -0.183650 0.698327 -0.157098 -0.698327
-0.183650 -0.183649 0.000000 0.698327 -0.157098 -0.698327
--0.000000 -0.183650 0.183650 0.698326 -0.157099 0.698327
-0.000000 -1.000000 -0.000000 0.698326 -0.157099 0.698327
-0.183650 -0.183649 0.000000 0.698326 -0.157099 0.698327
-1.000000 0.000001 0.000000 0.157100 -0.698328 0.698325
-0.183650 0.000000 0.183650 0.157100 -0.698328 0.698325
-0.183650 -0.183649 0.000000 0.157100 -0.698328 0.698325
-0.183650 -0.183649 0.000000 0.157099 -0.698327 -0.698327
-0.183650 -0.000000 -0.183649 0.157099 -0.698327 -0.698327
-1.000000 0.000001 0.000000 0.157099 -0.698327 -0.698327
-1.000000 0.000001 0.000000 0.157098 0.698325 -0.698328
-0.183650 -0.000000 -0.183649 0.157098 0.698325 -0.698328
-0.183650 0.183650 0.000000 0.157098 0.698325 -0.698328
-0.183650 0.183650 0.000000 0.157098 0.698327 0.698327
-0.183650 0.000000 0.183650 0.157098 0.698327 0.698327
-1.000000 0.000001 0.000000 0.157098 0.698327 0.698327
-0.000000 1.000000 0.000000 0.698327 0.157099 0.698326
--0.000000 0.183650 0.183650 0.698327 0.157099 0.698326
-0.183650 0.183650 0.000000 0.698327 0.157099 0.698326
-0.000000 0.183650 -0.183650 0.698327 0.157099 -0.698327
-0.000000 1.000000 0.000000 0.698327 0.157099 -0.698327
-0.183650 0.183650 0.000000 0.698327 0.157099 -0.698327
-0.000000 -0.000000 -1.000000 0.698327 0.698326 -0.157099
-0.000000 0.183650 -0.183650 0.698327 0.698326 -0.157099
-0.183650 -0.000000 -0.183649 0.698327 0.698326 -0.157099
--0.000000 0.183650 0.183650 0.698327 0.698326 0.157099
--0.000000 0.000000 1.000000 0.698327 0.698326 0.157099
-0.183650 0.000000 0.183650 0.698327 0.698326 0.157099
--0.000000 0.000000 1.000000 -0.698327 0.698326 0.157099
--0.000000 0.183650 0.183650 -0.698327 0.698326 0.157099
--0.183650 0.000000 0.183650 -0.698327 0.698326 0.157099
--0.000000 0.183650 0.183650 -0.698327 0.157099 0.698327
-0.000000 1.000000 0.000000 -0.698327 0.157099 0.698327
--0.183650 0.183650 0.000000 -0.698327 0.157099 0.698327
--0.183650 0.183650 0.000000 -0.698326 0.157099 -0.698327
-0.000000 1.000000 0.000000 -0.698326 0.157099 -0.698327
-0.000000 0.183650 -0.183650 -0.698326 0.157099 -0.698327
-0.000000 -0.000000 -1.000000 -0.698327 0.698326 -0.157099
--0.183650 -0.000000 -0.183650 -0.698327 0.698326 -0.157099
-0.000000 0.183650 -0.183650 -0.698327 0.698326 -0.157099
--0.183650 -0.000000 -0.183650 -0.698326 -0.698327 -0.157099
-0.000000 -0.000000 -1.000000 -0.698326 -0.698327 -0.157099
-0.000000 -0.183649 -0.183650 -0.698326 -0.698327 -0.157099
-0.000000 -0.000000 -1.000000 0.698326 -0.698327 -0.157098
-0.183650 -0.000000 -0.183649 0.698326 -0.698327 -0.157098
-0.000000 -0.183649 -0.183650 0.698326 -0.698327 -0.157098
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 0.698326
--0.183650 0.000000 0.183650 -0.157099 -0.698327 0.698326
--1.000000 0.000000 0.000000 -0.157099 -0.698327 0.698326
--0.183650 0.183650 0.000000 -0.157099 0.698327 0.698326
--1.000000 0.000000 0.000000 -0.157099 0.698327 0.698326
--0.183650 0.000000 0.183650 -0.157099 0.698327 0.698326
--1.000000 0.000000 0.000000 -0.157099 0.698326 -0.698327
--0.183650 0.183650 0.000000 -0.157099 0.698326 -0.698327
--0.183650 -0.000000 -0.183650 -0.157099 0.698326 -0.698327
--1.000000 0.000000 0.000000 -0.157099 -0.698327 -0.698327
--0.183650 -0.000000 -0.183650 -0.157099 -0.698327 -0.698327
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 -0.698327
--0.000000 0.000000 1.000000 -0.698326 -0.698327 0.157099
--0.183650 0.000000 0.183650 -0.698326 -0.698327 0.157099
--0.000000 -0.183650 0.183650 -0.698326 -0.698327 0.157099
-0.183650 0.000000 0.183650 0.698327 -0.698327 0.157099
--0.000000 0.000000 1.000000 0.698327 -0.698327 0.157099
--0.000000 -0.183650 0.183650 0.698327 -0.698327 0.157099
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-3 66 67 68
-3 69 70 71
-3 72 73 74
-3 75 76 77
-3 78 79 80
-3 81 82 83
-3 84 85 86
-3 87 88 89
-3 90 91 92
-3 93 94 95
diff --git a/src/examples/evas/resources/models/Normal_UVs_Colors.ply b/src/examples/evas/resources/models/Normal_UVs_Colors.ply
deleted file mode 100644
index 8633f9e6a7..0000000000
--- a/src/examples/evas/resources/models/Normal_UVs_Colors.ply
+++ /dev/null
@@ -1,146 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 96
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-property float s
-property float t
-property uchar red
-property uchar green
-property uchar blue
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650 -0.577350 -0.577351 0.577350 0.050297 0.982954 128 128 128
--0.183650 0.000000 0.183650 -0.577350 -0.577351 0.577350 0.974921 0.982954 130 130 130
--0.183650 -0.183650 0.000000 -0.577350 -0.577351 0.577350 0.974921 0.058330 128 128 128
--0.000000 -0.183650 0.183650 0.577350 -0.577351 0.577350 0.973896 0.987342 128 128 128
-0.183650 -0.183649 0.000000 0.577350 -0.577351 0.577350 0.973896 0.062718 128 128 128
-0.183650 0.000000 0.183650 0.577350 -0.577351 0.577350 0.049272 0.987342 128 128 128
-0.183650 0.183650 0.000000 0.577350 0.577350 0.577350 0.045665 0.987342 128 128 128
--0.000000 0.183650 0.183650 0.577350 0.577350 0.577350 0.970289 0.987342 128 128 128
-0.183650 0.000000 0.183650 0.577350 0.577350 0.577350 0.970289 0.062718 128 128 128
--0.000000 0.183650 0.183650 -0.577350 0.577350 0.577350 0.020228 0.028261 128 128 128
--0.183650 0.183650 0.000000 -0.577350 0.577350 0.577350 0.944852 0.028261 128 128 128
--0.183650 0.000000 0.183650 -0.577350 0.577350 0.577350 0.020228 0.952885 129 129 129
-0.000000 0.183650 -0.183650 0.577351 0.577349 -0.577351 0.943828 0.032650 128 128 128
-0.183650 0.183650 0.000000 0.577351 0.577349 -0.577351 0.019203 0.032650 128 128 128
-0.183650 -0.000000 -0.183649 0.577351 0.577349 -0.577351 0.019203 0.957274 128 128 128
-0.183650 -0.183649 0.000000 0.577350 -0.577350 -0.577350 0.046157 0.987627 128 128 128
-0.000000 -0.183649 -0.183650 0.577350 -0.577350 -0.577350 0.970781 0.063003 128 128 128
-0.183650 -0.000000 -0.183649 0.577350 -0.577350 -0.577350 0.970781 0.987627 128 128 128
--0.183650 -0.183650 0.000000 -0.577350 -0.577350 -0.577350 0.940712 0.032934 128 128 128
--0.183650 -0.000000 -0.183650 -0.577350 -0.577350 -0.577350 0.016088 0.032934 154 154 154
-0.000000 -0.183649 -0.183650 -0.577350 -0.577350 -0.577350 0.016088 0.957558 128 128 128
-0.000000 0.183650 -0.183650 -0.577350 0.577349 -0.577351 0.940220 0.032650 128 128 128
--0.183650 -0.000000 -0.183650 -0.577350 0.577349 -0.577351 0.015596 0.957274 128 128 128
--0.183650 0.183650 0.000000 -0.577350 0.577349 -0.577351 0.015596 0.032650 128 128 128
--0.000000 -0.183650 0.183650 -0.698327 -0.157099 0.698327 0.050297 0.982670 128 128 128
--0.183650 -0.183650 0.000000 -0.698327 -0.157099 0.698327 0.974921 0.982670 128 128 128
-0.000000 -1.000000 -0.000000 -0.698327 -0.157099 0.698327 0.974921 0.058046 128 255 128
-0.000000 -1.000000 -0.000000 -0.698327 -0.157098 -0.698327 0.020228 0.952601 128 255 128
--0.183650 -0.183650 0.000000 -0.698327 -0.157098 -0.698327 0.020228 0.027977 128 128 128
-0.000000 -0.183649 -0.183650 -0.698327 -0.157098 -0.698327 0.944852 0.027977 128 128 128
-0.000000 -1.000000 -0.000000 0.698327 -0.157098 -0.698327 0.974388 0.062718 128 255 128
-0.000000 -0.183649 -0.183650 0.698327 -0.157098 -0.698327 0.974388 0.987342 128 128 128
-0.183650 -0.183649 0.000000 0.698327 -0.157098 -0.698327 0.049764 0.987342 128 128 128
--0.000000 -0.183650 0.183650 0.698326 -0.157099 0.698327 0.019695 0.032650 128 128 128
-0.000000 -1.000000 -0.000000 0.698326 -0.157099 0.698327 0.019695 0.957274 128 255 128
-0.183650 -0.183649 0.000000 0.698326 -0.157099 0.698327 0.944319 0.032650 128 128 128
-1.000000 0.000001 0.000000 0.157100 -0.698328 0.698325 0.970781 0.062718 128 128 0
-0.183650 0.000000 0.183650 0.157100 -0.698328 0.698325 0.046157 0.987342 149 149 148
-0.183650 -0.183649 0.000000 0.157100 -0.698328 0.698325 0.970781 0.987342 128 128 128
-0.183650 -0.183649 0.000000 0.157099 -0.698327 -0.698327 0.053904 0.982954 128 128 128
-0.183650 -0.000000 -0.183649 0.157099 -0.698327 -0.698327 0.978528 0.982954 128 128 128
-1.000000 0.000001 0.000000 0.157099 -0.698327 -0.698327 0.978528 0.058330 128 128 0
-1.000000 0.000001 0.000000 0.157098 0.698325 -0.698328 0.978036 0.058046 128 128 0
-0.183650 -0.000000 -0.183649 0.157098 0.698325 -0.698328 0.978036 0.982670 128 128 128
-0.183650 0.183650 0.000000 0.157098 0.698325 -0.698328 0.053412 0.982670 128 128 128
-0.183650 0.183650 0.000000 0.157098 0.698327 0.698327 0.016088 0.032650 128 128 128
-0.183650 0.000000 0.183650 0.157098 0.698327 0.698327 0.940712 0.032650 128 128 128
-1.000000 0.000001 0.000000 0.157098 0.698327 0.698327 0.016088 0.957274 128 128 0
-0.000000 1.000000 0.000000 0.698327 0.157099 0.698326 0.974388 0.063003 151 46 151
--0.000000 0.183650 0.183650 0.698327 0.157099 0.698326 0.049764 0.987627 128 128 128
-0.183650 0.183650 0.000000 0.698327 0.157099 0.698326 0.974388 0.987627 128 128 128
-0.000000 0.183650 -0.183650 0.698327 0.157099 -0.698327 0.023835 0.028261 128 128 128
-0.000000 1.000000 0.000000 0.698327 0.157099 -0.698327 0.023835 0.952885 151 46 151
-0.183650 0.183650 0.000000 0.698327 0.157099 -0.698327 0.948459 0.028261 128 128 128
-0.000000 -0.000000 -1.000000 0.698327 0.698326 -0.157099 0.974429 0.058046 255 128 128
-0.000000 0.183650 -0.183650 0.698327 0.698326 -0.157099 0.049805 0.982670 128 128 128
-0.183650 -0.000000 -0.183649 0.698327 0.698326 -0.157099 0.974429 0.982670 128 128 128
--0.000000 0.183650 0.183650 0.698327 0.698326 0.157099 0.053412 0.982954 128 128 128
--0.000000 0.000000 1.000000 0.698327 0.698326 0.157099 0.978036 0.058330 0 128 128
-0.183650 0.000000 0.183650 0.698327 0.698326 0.157099 0.978036 0.982954 128 128 128
--0.000000 0.000000 1.000000 -0.698327 0.698326 0.157099 0.974429 0.058330 0 128 128
--0.000000 0.183650 0.183650 -0.698327 0.698326 0.157099 0.049805 0.982954 128 128 128
--0.183650 0.000000 0.183650 -0.698327 0.698326 0.157099 0.974429 0.982954 130 130 130
--0.000000 0.183650 0.183650 -0.698327 0.157099 0.698327 0.023343 0.027977 128 128 128
-0.000000 1.000000 0.000000 -0.698327 0.157099 0.698327 0.023343 0.952601 151 46 151
--0.183650 0.183650 0.000000 -0.698327 0.157099 0.698327 0.947968 0.027977 128 128 128
--0.183650 0.183650 0.000000 -0.698326 0.157099 -0.698327 0.944319 0.032934 128 128 128
-0.000000 1.000000 0.000000 -0.698326 0.157099 -0.698327 0.019695 0.957558 151 46 151
-0.000000 0.183650 -0.183650 -0.698326 0.157099 -0.698327 0.019695 0.032934 128 128 128
-0.000000 -0.000000 -1.000000 -0.698327 0.698326 -0.157099 0.019736 0.952601 255 128 128
--0.183650 -0.000000 -0.183650 -0.698327 0.698326 -0.157099 0.019736 0.027977 128 128 128
-0.000000 0.183650 -0.183650 -0.698327 0.698326 -0.157099 0.944360 0.027977 128 128 128
--0.183650 -0.000000 -0.183650 -0.698326 -0.698327 -0.157099 0.053904 0.982670 154 154 154
-0.000000 -0.000000 -1.000000 -0.698326 -0.698327 -0.157099 0.978528 0.058046 255 123 123
-0.000000 -0.183649 -0.183650 -0.698326 -0.698327 -0.157099 0.978528 0.982670 128 128 128
-0.000000 -0.000000 -1.000000 0.698326 -0.698327 -0.157098 0.023835 0.952601 255 128 128
-0.183650 -0.000000 -0.183649 0.698326 -0.698327 -0.157098 0.948459 0.027977 128 128 128
-0.000000 -0.183649 -0.183650 0.698326 -0.698327 -0.157098 0.023835 0.027977 128 128 128
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 0.698326 0.973896 0.987627 128 128 128
--0.183650 0.000000 0.183650 -0.157099 -0.698327 0.698326 0.049272 0.987627 130 130 130
--1.000000 0.000000 0.000000 -0.157099 -0.698327 0.698326 0.973896 0.063003 128 128 255
--0.183650 0.183650 0.000000 -0.157099 0.698327 0.698326 0.019736 0.028261 128 128 128
--1.000000 0.000000 0.000000 -0.157099 0.698327 0.698326 0.019736 0.952885 128 128 255
--0.183650 0.000000 0.183650 -0.157099 0.698327 0.698326 0.944360 0.028261 129 129 129
--1.000000 0.000000 0.000000 -0.157099 0.698326 -0.698327 0.970289 0.063003 128 128 255
--0.183650 0.183650 0.000000 -0.157099 0.698326 -0.698327 0.045665 0.987627 128 128 128
--0.183650 -0.000000 -0.183650 -0.157099 0.698326 -0.698327 0.970289 0.987627 128 128 128
--1.000000 0.000000 0.000000 -0.157099 -0.698327 -0.698327 0.019203 0.957558 128 128 255
--0.183650 -0.000000 -0.183650 -0.157099 -0.698327 -0.698327 0.019203 0.032934 154 154 154
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 -0.698327 0.943828 0.032934 128 128 128
--0.000000 0.000000 1.000000 -0.698326 -0.698327 0.157099 0.015596 0.957558 0 128 128
--0.183650 0.000000 0.183650 -0.698326 -0.698327 0.157099 0.015596 0.032934 130 130 130
--0.000000 -0.183650 0.183650 -0.698326 -0.698327 0.157099 0.940220 0.032934 128 128 128
-0.183650 0.000000 0.183650 0.698327 -0.698327 0.157099 0.023343 0.028261 128 128 128
--0.000000 0.000000 1.000000 0.698327 -0.698327 0.157099 0.023343 0.952885 0 128 128
--0.000000 -0.183650 0.183650 0.698327 -0.698327 0.157099 0.947968 0.028261 128 128 128
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-3 66 67 68
-3 69 70 71
-3 72 73 74
-3 75 76 77
-3 78 79 80
-3 81 82 83
-3 84 85 86
-3 87 88 89
-3 90 91 92
-3 93 94 95
diff --git a/src/examples/evas/resources/models/Normal_UVs_NoColors.ply b/src/examples/evas/resources/models/Normal_UVs_NoColors.ply
deleted file mode 100644
index 9efb01ea4f..0000000000
--- a/src/examples/evas/resources/models/Normal_UVs_NoColors.ply
+++ /dev/null
@@ -1,143 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: 'star.blend'
-element vertex 96
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-property float s
-property float t
-element face 32
-property list uchar uint vertex_indices
-end_header
--0.000000 -0.183650 0.183650 -0.577350 -0.577351 0.577350 0.050297 0.982954
--0.183650 0.000000 0.183650 -0.577350 -0.577351 0.577350 0.974921 0.982954
--0.183650 -0.183650 0.000000 -0.577350 -0.577351 0.577350 0.974921 0.058330
--0.000000 -0.183650 0.183650 0.577350 -0.577351 0.577350 0.973896 0.987342
-0.183650 -0.183649 0.000000 0.577350 -0.577351 0.577350 0.973896 0.062718
-0.183650 0.000000 0.183650 0.577350 -0.577351 0.577350 0.049272 0.987342
-0.183650 0.183650 0.000000 0.577350 0.577350 0.577350 0.045665 0.987342
--0.000000 0.183650 0.183650 0.577350 0.577350 0.577350 0.970289 0.987342
-0.183650 0.000000 0.183650 0.577350 0.577350 0.577350 0.970289 0.062718
--0.000000 0.183650 0.183650 -0.577350 0.577350 0.577350 0.020228 0.028261
--0.183650 0.183650 0.000000 -0.577350 0.577350 0.577350 0.944852 0.028261
--0.183650 0.000000 0.183650 -0.577350 0.577350 0.577350 0.020228 0.952885
-0.000000 0.183650 -0.183650 0.577351 0.577349 -0.577351 0.943828 0.032650
-0.183650 0.183650 0.000000 0.577351 0.577349 -0.577351 0.019203 0.032650
-0.183650 -0.000000 -0.183649 0.577351 0.577349 -0.577351 0.019203 0.957274
-0.183650 -0.183649 0.000000 0.577350 -0.577350 -0.577350 0.046157 0.987627
-0.000000 -0.183649 -0.183650 0.577350 -0.577350 -0.577350 0.970781 0.063003
-0.183650 -0.000000 -0.183649 0.577350 -0.577350 -0.577350 0.970781 0.987627
--0.183650 -0.183650 0.000000 -0.577350 -0.577350 -0.577350 0.940712 0.032934
--0.183650 -0.000000 -0.183650 -0.577350 -0.577350 -0.577350 0.016088 0.032934
-0.000000 -0.183649 -0.183650 -0.577350 -0.577350 -0.577350 0.016088 0.957558
-0.000000 0.183650 -0.183650 -0.577350 0.577349 -0.577351 0.940220 0.032650
--0.183650 -0.000000 -0.183650 -0.577350 0.577349 -0.577351 0.015596 0.957274
--0.183650 0.183650 0.000000 -0.577350 0.577349 -0.577351 0.015596 0.032650
--0.000000 -0.183650 0.183650 -0.698327 -0.157099 0.698327 0.050297 0.982670
--0.183650 -0.183650 0.000000 -0.698327 -0.157099 0.698327 0.974921 0.982670
-0.000000 -1.000000 -0.000000 -0.698327 -0.157099 0.698327 0.974921 0.058046
-0.000000 -1.000000 -0.000000 -0.698327 -0.157098 -0.698327 0.020228 0.952601
--0.183650 -0.183650 0.000000 -0.698327 -0.157098 -0.698327 0.020228 0.027977
-0.000000 -0.183649 -0.183650 -0.698327 -0.157098 -0.698327 0.944852 0.027977
-0.000000 -1.000000 -0.000000 0.698327 -0.157098 -0.698327 0.974388 0.062718
-0.000000 -0.183649 -0.183650 0.698327 -0.157098 -0.698327 0.974388 0.987342
-0.183650 -0.183649 0.000000 0.698327 -0.157098 -0.698327 0.049764 0.987342
--0.000000 -0.183650 0.183650 0.698326 -0.157099 0.698327 0.019695 0.032650
-0.000000 -1.000000 -0.000000 0.698326 -0.157099 0.698327 0.019695 0.957274
-0.183650 -0.183649 0.000000 0.698326 -0.157099 0.698327 0.944319 0.032650
-1.000000 0.000001 0.000000 0.157100 -0.698328 0.698325 0.970781 0.062718
-0.183650 0.000000 0.183650 0.157100 -0.698328 0.698325 0.046157 0.987342
-0.183650 -0.183649 0.000000 0.157100 -0.698328 0.698325 0.970781 0.987342
-0.183650 -0.183649 0.000000 0.157099 -0.698327 -0.698327 0.053904 0.982954
-0.183650 -0.000000 -0.183649 0.157099 -0.698327 -0.698327 0.978528 0.982954
-1.000000 0.000001 0.000000 0.157099 -0.698327 -0.698327 0.978528 0.058330
-1.000000 0.000001 0.000000 0.157098 0.698325 -0.698328 0.978036 0.058046
-0.183650 -0.000000 -0.183649 0.157098 0.698325 -0.698328 0.978036 0.982670
-0.183650 0.183650 0.000000 0.157098 0.698325 -0.698328 0.053412 0.982670
-0.183650 0.183650 0.000000 0.157098 0.698327 0.698327 0.016088 0.032650
-0.183650 0.000000 0.183650 0.157098 0.698327 0.698327 0.940712 0.032650
-1.000000 0.000001 0.000000 0.157098 0.698327 0.698327 0.016088 0.957274
-0.000000 1.000000 0.000000 0.698327 0.157099 0.698326 0.974388 0.063003
--0.000000 0.183650 0.183650 0.698327 0.157099 0.698326 0.049764 0.987627
-0.183650 0.183650 0.000000 0.698327 0.157099 0.698326 0.974388 0.987627
-0.000000 0.183650 -0.183650 0.698327 0.157099 -0.698327 0.023835 0.028261
-0.000000 1.000000 0.000000 0.698327 0.157099 -0.698327 0.023835 0.952885
-0.183650 0.183650 0.000000 0.698327 0.157099 -0.698327 0.948459 0.028261
-0.000000 -0.000000 -1.000000 0.698327 0.698326 -0.157099 0.974429 0.058046
-0.000000 0.183650 -0.183650 0.698327 0.698326 -0.157099 0.049805 0.982670
-0.183650 -0.000000 -0.183649 0.698327 0.698326 -0.157099 0.974429 0.982670
--0.000000 0.183650 0.183650 0.698327 0.698326 0.157099 0.053412 0.982954
--0.000000 0.000000 1.000000 0.698327 0.698326 0.157099 0.978036 0.058330
-0.183650 0.000000 0.183650 0.698327 0.698326 0.157099 0.978036 0.982954
--0.000000 0.000000 1.000000 -0.698327 0.698326 0.157099 0.974429 0.058330
--0.000000 0.183650 0.183650 -0.698327 0.698326 0.157099 0.049805 0.982954
--0.183650 0.000000 0.183650 -0.698327 0.698326 0.157099 0.974429 0.982954
--0.000000 0.183650 0.183650 -0.698327 0.157099 0.698327 0.023343 0.027977
-0.000000 1.000000 0.000000 -0.698327 0.157099 0.698327 0.023343 0.952601
--0.183650 0.183650 0.000000 -0.698327 0.157099 0.698327 0.947968 0.027977
--0.183650 0.183650 0.000000 -0.698326 0.157099 -0.698327 0.944319 0.032934
-0.000000 1.000000 0.000000 -0.698326 0.157099 -0.698327 0.019695 0.957558
-0.000000 0.183650 -0.183650 -0.698326 0.157099 -0.698327 0.019695 0.032934
-0.000000 -0.000000 -1.000000 -0.698327 0.698326 -0.157099 0.019736 0.952601
--0.183650 -0.000000 -0.183650 -0.698327 0.698326 -0.157099 0.019736 0.027977
-0.000000 0.183650 -0.183650 -0.698327 0.698326 -0.157099 0.944360 0.027977
--0.183650 -0.000000 -0.183650 -0.698326 -0.698327 -0.157099 0.053904 0.982670
-0.000000 -0.000000 -1.000000 -0.698326 -0.698327 -0.157099 0.978528 0.058046
-0.000000 -0.183649 -0.183650 -0.698326 -0.698327 -0.157099 0.978528 0.982670
-0.000000 -0.000000 -1.000000 0.698326 -0.698327 -0.157098 0.023835 0.952601
-0.183650 -0.000000 -0.183649 0.698326 -0.698327 -0.157098 0.948459 0.027977
-0.000000 -0.183649 -0.183650 0.698326 -0.698327 -0.157098 0.023835 0.027977
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 0.698326 0.973896 0.987627
--0.183650 0.000000 0.183650 -0.157099 -0.698327 0.698326 0.049272 0.987627
--1.000000 0.000000 0.000000 -0.157099 -0.698327 0.698326 0.973896 0.063003
--0.183650 0.183650 0.000000 -0.157099 0.698327 0.698326 0.019736 0.028261
--1.000000 0.000000 0.000000 -0.157099 0.698327 0.698326 0.019736 0.952885
--0.183650 0.000000 0.183650 -0.157099 0.698327 0.698326 0.944360 0.028261
--1.000000 0.000000 0.000000 -0.157099 0.698326 -0.698327 0.970289 0.063003
--0.183650 0.183650 0.000000 -0.157099 0.698326 -0.698327 0.045665 0.987627
--0.183650 -0.000000 -0.183650 -0.157099 0.698326 -0.698327 0.970289 0.987627
--1.000000 0.000000 0.000000 -0.157099 -0.698327 -0.698327 0.019203 0.957558
--0.183650 -0.000000 -0.183650 -0.157099 -0.698327 -0.698327 0.019203 0.032934
--0.183650 -0.183650 0.000000 -0.157099 -0.698327 -0.698327 0.943828 0.032934
--0.000000 0.000000 1.000000 -0.698326 -0.698327 0.157099 0.015596 0.957558
--0.183650 0.000000 0.183650 -0.698326 -0.698327 0.157099 0.015596 0.032934
--0.000000 -0.183650 0.183650 -0.698326 -0.698327 0.157099 0.940220 0.032934
-0.183650 0.000000 0.183650 0.698327 -0.698327 0.157099 0.023343 0.028261
--0.000000 0.000000 1.000000 0.698327 -0.698327 0.157099 0.023343 0.952885
--0.000000 -0.183650 0.183650 0.698327 -0.698327 0.157099 0.947968 0.028261
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-3 66 67 68
-3 69 70 71
-3 72 73 74
-3 75 76 77
-3 78 79 80
-3 81 82 83
-3 84 85 86
-3 87 88 89
-3 90 91 92
-3 93 94 95
diff --git a/src/examples/evas/resources/models/convex_hull/column.ply b/src/examples/evas/resources/models/convex_hull/column.ply
deleted file mode 100644
index 5a42be1b45..0000000000
--- a/src/examples/evas/resources/models/convex_hull/column.ply
+++ /dev/null
@@ -1,521 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 352
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 156
-property list uchar uint vertex_indices
-end_header
-0.000000 1.000000 -1.000000 0.081467 0.827145 0.556053
--0.011899 0.336573 -0.011390 0.081467 0.827145 0.556053
-0.053763 0.330106 -0.011390 0.081467 0.827145 0.556053
-0.195090 0.980785 -1.000000 0.081467 0.827145 0.556053
-0.195090 0.980785 -1.000000 0.241011 0.794507 0.557379
-0.053763 0.330106 -0.011390 0.241011 0.794507 0.557379
-0.116902 0.310953 -0.011390 0.241011 0.794507 0.557379
-0.382683 0.923880 -1.000000 0.241011 0.794507 0.557379
-0.382683 0.923880 -1.000000 0.390986 0.731483 0.558625
-0.116902 0.310953 -0.011390 0.390986 0.731483 0.558625
-0.175091 0.279850 -0.011390 0.390986 0.731483 0.558625
-0.555570 0.831470 -1.000000 0.390986 0.731483 0.558625
-0.555570 0.831470 -1.000000 0.525701 0.640568 0.559743
-0.175091 0.279850 -0.011390 0.525701 0.640568 0.559743
-0.226094 0.237993 -0.011390 0.525701 0.640568 0.559743
-0.707107 0.707107 -1.000000 0.525701 0.640568 0.559743
-0.707107 0.707107 -1.000000 0.640072 0.525294 0.560691
-0.226094 0.237993 -0.011390 0.640072 0.525294 0.560691
-0.267951 0.186990 -0.011390 0.640072 0.525294 0.560691
-0.831470 0.555570 -1.000000 0.640072 0.525294 0.560691
-0.831470 0.555570 -1.000000 0.729808 0.390091 0.561435
-0.267951 0.186990 -0.011390 0.729808 0.390091 0.561435
-0.299054 0.128801 -0.011390 0.729808 0.390091 0.561435
-0.923880 0.382683 -1.000000 0.729808 0.390091 0.561435
-0.923880 0.382683 -1.000000 0.791556 0.240116 0.561946
-0.299054 0.128801 -0.011390 0.791556 0.240116 0.561946
-0.318207 0.065662 -0.011390 0.791556 0.240116 0.561946
-0.980785 0.195090 -1.000000 0.791556 0.240116 0.561946
-0.980785 0.195090 -1.000000 0.823015 0.081060 0.562207
-0.318207 0.065662 -0.011390 0.823015 0.081060 0.562207
-0.324674 0.000000 -0.011390 0.823015 0.081060 0.562207
-1.000000 0.000000 -1.000000 0.823015 0.081060 0.562207
-1.000000 0.000000 -1.000000 0.823015 -0.081060 0.562207
-0.324674 0.000000 -0.011390 0.823015 -0.081060 0.562207
-0.318207 -0.065662 -0.011390 0.823015 -0.081060 0.562207
-0.980785 -0.195090 -1.000000 0.823015 -0.081060 0.562207
-0.980785 -0.195090 -1.000000 0.791556 -0.240116 0.561946
-0.318207 -0.065662 -0.011390 0.791556 -0.240116 0.561946
-0.299054 -0.128800 -0.011390 0.791556 -0.240116 0.561946
-0.923880 -0.382683 -1.000000 0.791556 -0.240116 0.561946
-0.923880 -0.382683 -1.000000 0.729809 -0.390090 0.561435
-0.299054 -0.128800 -0.011390 0.729809 -0.390090 0.561435
-0.267951 -0.186989 -0.011390 0.729809 -0.390090 0.561435
-0.831470 -0.555570 -1.000000 0.729809 -0.390090 0.561435
-0.831470 -0.555570 -1.000000 0.640072 -0.525293 0.560691
-0.267951 -0.186989 -0.011390 0.640072 -0.525293 0.560691
-0.226094 -0.237993 -0.011390 0.640072 -0.525293 0.560691
-0.707107 -0.707107 -1.000000 0.640072 -0.525293 0.560691
-0.707107 -0.707107 -1.000000 0.525700 -0.640568 0.559743
-0.226094 -0.237993 -0.011390 0.525700 -0.640568 0.559743
-0.175091 -0.279850 -0.011390 0.525700 -0.640568 0.559743
-0.555570 -0.831470 -1.000000 0.525700 -0.640568 0.559743
-0.555570 -0.831470 -1.000000 0.390986 -0.731483 0.558625
-0.175091 -0.279850 -0.011390 0.390986 -0.731483 0.558625
-0.116902 -0.310952 -0.011390 0.390986 -0.731483 0.558625
-0.382683 -0.923880 -1.000000 0.390986 -0.731483 0.558625
-0.382683 -0.923880 -1.000000 0.241011 -0.794507 0.557380
-0.116902 -0.310952 -0.011390 0.241011 -0.794507 0.557380
-0.053763 -0.330105 -0.011390 0.241011 -0.794507 0.557380
-0.195090 -0.980785 -1.000000 0.241011 -0.794507 0.557380
-0.195090 -0.980785 -1.000000 0.081466 -0.827145 0.556053
-0.053763 -0.330105 -0.011390 0.081466 -0.827145 0.556053
--0.011899 -0.336572 -0.011390 0.081466 -0.827145 0.556053
--0.000000 -1.000000 -1.000000 0.081466 -0.827145 0.556053
--0.000000 -1.000000 -1.000000 -0.081556 -0.828046 0.554696
--0.011899 -0.336572 -0.011390 -0.081556 -0.828046 0.554696
--0.077561 -0.330105 -0.011390 -0.081556 -0.828046 0.554696
--0.195091 -0.980785 -1.000000 -0.081556 -0.828046 0.554696
--0.195091 -0.980785 -1.000000 -0.241791 -0.797075 0.553361
--0.077561 -0.330105 -0.011390 -0.241791 -0.797075 0.553361
--0.140700 -0.310952 -0.011390 -0.241791 -0.797075 0.553361
--0.382684 -0.923879 -1.000000 -0.241791 -0.797075 0.553361
--0.382684 -0.923879 -1.000000 -0.393041 -0.735327 0.552099
--0.140700 -0.310952 -0.011390 -0.393041 -0.735327 0.552099
--0.198889 -0.279850 -0.011390 -0.393041 -0.735327 0.552099
--0.555571 -0.831469 -1.000000 -0.393041 -0.735327 0.552099
--0.555571 -0.831469 -1.000000 -0.529421 -0.645101 0.550961
--0.198889 -0.279850 -0.011390 -0.529421 -0.645101 0.550961
--0.249892 -0.237992 -0.011390 -0.529421 -0.645101 0.550961
--0.707107 -0.707106 -1.000000 -0.529421 -0.645101 0.550961
--0.707107 -0.707106 -1.000000 -0.645597 -0.529826 0.549990
--0.249892 -0.237992 -0.011390 -0.645597 -0.529826 0.549990
--0.291749 -0.186989 -0.011390 -0.645597 -0.529826 0.549990
--0.831470 -0.555570 -1.000000 -0.645597 -0.529826 0.549990
--0.831470 -0.555570 -1.000000 -0.736999 -0.393934 0.549226
--0.291749 -0.186989 -0.011390 -0.736999 -0.393934 0.549226
--0.322851 -0.128800 -0.011390 -0.736999 -0.393934 0.549226
--0.923880 -0.382683 -1.000000 -0.736999 -0.393934 0.549226
--0.923880 -0.382683 -1.000000 -0.800022 -0.242683 0.548698
--0.322851 -0.128800 -0.011390 -0.800022 -0.242683 0.548698
--0.342004 -0.065661 -0.011390 -0.800022 -0.242683 0.548698
--0.980785 -0.195089 -1.000000 -0.800022 -0.242683 0.548698
--0.980785 -0.195089 -1.000000 -0.832170 -0.081961 0.548429
--0.342004 -0.065661 -0.011390 -0.832170 -0.081961 0.548429
--0.348471 0.000001 -0.011390 -0.832170 -0.081961 0.548429
--1.000000 0.000001 -1.000000 -0.832170 -0.081961 0.548429
--1.000000 0.000001 -1.000000 -0.832170 0.081963 0.548429
--0.348471 0.000001 -0.011390 -0.832170 0.081963 0.548429
--0.342004 0.065663 -0.011390 -0.832170 0.081963 0.548429
--0.980785 0.195091 -1.000000 -0.832170 0.081963 0.548429
--0.980785 0.195091 -1.000000 -0.800021 0.242685 0.548698
--0.342004 0.065663 -0.011390 -0.800021 0.242685 0.548698
--0.322851 0.128801 -0.011390 -0.800021 0.242685 0.548698
--0.923879 0.382684 -1.000000 -0.800021 0.242685 0.548698
--0.923879 0.382684 -1.000000 -0.736998 0.393935 0.549226
--0.322851 0.128801 -0.011390 -0.736998 0.393935 0.549226
--0.291748 0.186990 -0.011390 -0.736998 0.393935 0.549226
--0.831469 0.555571 -1.000000 -0.736998 0.393935 0.549226
--0.831469 0.555571 -1.000000 -0.645595 0.529828 0.549990
--0.291748 0.186990 -0.011390 -0.645595 0.529828 0.549990
--0.249891 0.237994 -0.011390 -0.645595 0.529828 0.549990
--0.707106 0.707108 -1.000000 -0.645595 0.529828 0.549990
--0.707106 0.707108 -1.000000 -0.529420 0.645102 0.550961
--0.249891 0.237994 -0.011390 -0.529420 0.645102 0.550961
--0.198888 0.279851 -0.011390 -0.529420 0.645102 0.550961
--0.555569 0.831470 -1.000000 -0.529420 0.645102 0.550961
--0.555569 0.831470 -1.000000 -0.393040 0.735327 0.552099
--0.198888 0.279851 -0.011390 -0.393040 0.735327 0.552099
--0.140699 0.310953 -0.011390 -0.393040 0.735327 0.552099
--0.382682 0.923880 -1.000000 -0.393040 0.735327 0.552099
--0.011899 0.336573 -0.011390 -0.095975 0.974455 -0.203045
--0.077560 0.330106 -0.011390 -0.095975 0.974455 -0.203045
--0.117223 0.529503 0.964306 -0.095975 0.974455 -0.203045
--0.011899 0.539877 0.964306 -0.095975 0.974455 -0.203045
--0.011899 0.336573 -0.011390 -0.081555 0.828047 0.554696
-0.000000 1.000000 -1.000000 -0.081555 0.828047 0.554696
--0.195089 0.980786 -1.000000 -0.081555 0.828047 0.554696
--0.077560 0.330106 -0.011390 -0.081555 0.828047 0.554696
--0.382682 0.923880 -1.000000 -0.241789 0.797076 0.553361
--0.140699 0.310953 -0.011390 -0.241789 0.797076 0.553361
--0.077560 0.330106 -0.011390 -0.241789 0.797076 0.553361
--0.195089 0.980786 -1.000000 -0.241789 0.797076 0.553361
-0.000000 1.000000 -1.000000 0.000000 0.000000 -1.000000
-0.195090 0.980785 -1.000000 0.000000 0.000000 -1.000000
--0.195089 0.980786 -1.000000 0.000000 0.000000 -1.000000
--0.382682 0.923880 -1.000000 0.000000 -0.000000 -1.000000
-0.382683 0.923880 -1.000000 0.000000 0.000000 -1.000000
--0.555569 0.831470 -1.000000 0.000000 -0.000000 -1.000000
-0.555570 0.831470 -1.000000 0.000000 0.000000 -1.000000
--0.707106 0.707108 -1.000000 0.000000 -0.000000 -1.000000
-0.707107 0.707107 -1.000000 0.000000 0.000000 -1.000000
--0.831469 0.555571 -1.000000 0.000000 -0.000000 -1.000000
-0.831470 0.555570 -1.000000 0.000000 0.000000 -1.000000
--0.923879 0.382684 -1.000000 0.000000 -0.000000 -1.000000
-0.923880 0.382683 -1.000000 0.000000 0.000000 -1.000000
--0.980785 0.195091 -1.000000 0.000000 -0.000000 -1.000000
-0.980785 0.195090 -1.000000 0.000000 0.000000 -1.000000
--1.000000 0.000001 -1.000000 0.000000 -0.000000 -1.000000
-1.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000
--0.980785 -0.195089 -1.000000 0.000000 0.000000 -1.000000
-0.980785 -0.195090 -1.000000 0.000000 0.000000 -1.000000
--0.923880 -0.382683 -1.000000 0.000000 0.000000 -1.000000
-0.923880 -0.382683 -1.000000 0.000000 0.000000 -1.000000
--0.831470 -0.555570 -1.000000 0.000000 0.000000 -1.000000
-0.831470 -0.555570 -1.000000 0.000000 0.000000 -1.000000
--0.707107 -0.707106 -1.000000 0.000000 0.000000 -1.000000
-0.707107 -0.707107 -1.000000 0.000000 0.000000 -1.000000
--0.555571 -0.831469 -1.000000 0.000000 0.000000 -1.000000
-0.555570 -0.831470 -1.000000 0.000000 0.000000 -1.000000
--0.382684 -0.923879 -1.000000 0.000000 0.000000 -1.000000
-0.382683 -0.923880 -1.000000 0.000000 0.000000 -1.000000
--0.195091 -0.980785 -1.000000 0.000000 0.000000 -1.000000
-0.195090 -0.980785 -1.000000 0.000000 0.000000 -1.000000
--0.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000
--0.510679 -0.206601 0.964306 -0.000000 -0.000000 1.000000
--0.460790 -0.299939 0.964306 -0.000000 -0.000000 1.000000
--0.195072 -0.122392 0.964306 -0.000000 -0.000000 1.000000
--0.215430 -0.084305 0.964306 -0.000000 -0.000000 1.000000
--0.291749 -0.186989 -0.011390 -0.756909 -0.621178 -0.203045
--0.249892 -0.237992 -0.011390 -0.756909 -0.621178 -0.203045
--0.393649 -0.381750 0.964306 -0.756909 -0.621178 -0.203045
--0.460790 -0.299939 0.964306 -0.756909 -0.621178 -0.203045
-0.299054 -0.128800 -0.011390 0.937006 -0.284239 -0.203045
-0.318207 -0.065662 -0.011390 0.937006 -0.284239 -0.203045
-0.517604 -0.105324 0.964306 0.937006 -0.284239 -0.203045
-0.486882 -0.206601 0.964306 0.937006 -0.284239 -0.203045
--0.348471 0.000001 -0.011390 -0.974455 -0.095975 -0.203045
--0.342004 -0.065661 -0.011390 -0.974455 -0.095975 -0.203045
--0.541401 -0.105324 0.964306 -0.974455 -0.095975 -0.203045
--0.551775 0.000001 0.964306 -0.974455 -0.095975 -0.203045
-0.116902 0.310953 -0.011390 0.284238 0.937007 -0.203045
-0.053763 0.330106 -0.011390 0.284238 0.937007 -0.203045
-0.093426 0.529503 0.964306 0.284238 0.937007 -0.203045
-0.194703 0.498781 0.964306 0.284238 0.937007 -0.203045
-0.175091 -0.279850 -0.011390 0.621179 -0.756908 -0.203045
-0.226094 -0.237993 -0.011390 0.621179 -0.756908 -0.203045
-0.369851 -0.381750 0.964306 0.621179 -0.756908 -0.203045
-0.288040 -0.448890 0.964306 0.621179 -0.756908 -0.203045
--0.291748 0.186990 -0.011390 -0.863550 0.461578 -0.203045
--0.322851 0.128801 -0.011390 -0.863550 0.461578 -0.203045
--0.510679 0.206603 0.964306 -0.863550 0.461578 -0.203045
--0.460789 0.299940 0.964306 -0.863550 0.461578 -0.203045
-0.267951 0.186990 -0.011390 0.756908 0.621179 -0.203045
-0.226094 0.237993 -0.011390 0.756908 0.621179 -0.203045
-0.369851 0.381750 0.964306 0.756908 0.621179 -0.203045
-0.436992 0.299939 0.964306 0.756908 0.621179 -0.203045
--0.011899 -0.336572 -0.011390 0.095975 -0.974455 -0.203045
-0.053763 -0.330105 -0.011390 0.095975 -0.974455 -0.203045
-0.093426 -0.529502 0.964306 0.095975 -0.974455 -0.203045
--0.011899 -0.539876 0.964306 0.095975 -0.974455 -0.203045
--0.140699 0.310953 -0.011390 -0.461577 0.863551 -0.203045
--0.198888 0.279851 -0.011390 -0.461577 0.863551 -0.203045
--0.311837 0.448891 0.964306 -0.461577 0.863551 -0.203045
--0.218500 0.498781 0.964306 -0.461577 0.863551 -0.203045
--0.198889 -0.279850 -0.011390 -0.461578 -0.863550 -0.203045
--0.140700 -0.310952 -0.011390 -0.461578 -0.863550 -0.203045
--0.218501 -0.498780 0.964306 -0.461578 -0.863550 -0.203045
--0.311838 -0.448890 0.964306 -0.461578 -0.863550 -0.203045
-0.053763 0.330106 -0.011390 0.095976 0.974454 -0.203045
--0.011899 0.336573 -0.011390 0.095976 0.974454 -0.203045
--0.011899 0.539877 0.964306 0.095976 0.974454 -0.203045
-0.093426 0.529503 0.964306 0.095976 0.974454 -0.203045
-0.324674 0.000000 -0.011390 0.974454 0.095976 -0.203045
-0.318207 0.065662 -0.011390 0.974454 0.095976 -0.203045
-0.517604 0.105325 0.964306 0.974454 0.095976 -0.203045
-0.527978 0.000000 0.964306 0.974454 0.095976 -0.203045
--0.322851 -0.128800 -0.011390 -0.863551 -0.461577 -0.203045
--0.291749 -0.186989 -0.011390 -0.863551 -0.461577 -0.203045
--0.460790 -0.299939 0.964306 -0.863551 -0.461577 -0.203045
--0.510679 -0.206601 0.964306 -0.863551 -0.461577 -0.203045
-0.267951 -0.186989 -0.011390 0.863551 -0.461576 -0.203045
-0.299054 -0.128800 -0.011390 0.863551 -0.461576 -0.203045
-0.486882 -0.206601 0.964306 0.863551 -0.461576 -0.203045
-0.436992 -0.299939 0.964306 0.863551 -0.461576 -0.203045
--0.342004 0.065663 -0.011390 -0.974454 0.095977 -0.203045
--0.348471 0.000001 -0.011390 -0.974454 0.095977 -0.203045
--0.551775 0.000001 0.964306 -0.974454 0.095977 -0.203045
--0.541401 0.105325 0.964306 -0.974454 0.095977 -0.203045
-0.175091 0.279850 -0.011390 0.461577 0.863550 -0.203045
-0.116902 0.310953 -0.011390 0.461577 0.863550 -0.203045
-0.194703 0.498781 0.964306 0.461577 0.863550 -0.203045
-0.288041 0.448891 0.964306 0.461577 0.863550 -0.203045
-0.116902 -0.310952 -0.011390 0.461577 -0.863550 -0.203045
-0.175091 -0.279850 -0.011390 0.461577 -0.863550 -0.203045
-0.288040 -0.448890 0.964306 0.461577 -0.863550 -0.203045
-0.194703 -0.498780 0.964306 0.461577 -0.863550 -0.203045
--0.249891 0.237994 -0.011390 -0.756907 0.621180 -0.203045
--0.291748 0.186990 -0.011390 -0.756907 0.621180 -0.203045
--0.460789 0.299940 0.964306 -0.756907 0.621180 -0.203045
--0.393648 0.381751 0.964306 -0.756907 0.621180 -0.203045
--0.077561 -0.330105 -0.011390 -0.095976 -0.974454 -0.203045
--0.011899 -0.336572 -0.011390 -0.095976 -0.974454 -0.203045
--0.011899 -0.539876 0.964306 -0.095976 -0.974454 -0.203045
--0.117224 -0.529502 0.964306 -0.095976 -0.974454 -0.203045
-0.299054 0.128801 -0.011390 0.863550 0.461577 -0.203045
-0.267951 0.186990 -0.011390 0.863550 0.461577 -0.203045
-0.436992 0.299939 0.964306 0.863550 0.461577 -0.203045
-0.486882 0.206602 0.964306 0.863550 0.461577 -0.203045
--0.077560 0.330106 -0.011390 -0.284236 0.937007 -0.203045
--0.140699 0.310953 -0.011390 -0.284236 0.937007 -0.203045
--0.218500 0.498781 0.964306 -0.284236 0.937007 -0.203045
--0.117223 0.529503 0.964306 -0.284236 0.937007 -0.203045
--0.249892 -0.237992 -0.011390 -0.621179 -0.756908 -0.203045
--0.198889 -0.279850 -0.011390 -0.621179 -0.756908 -0.203045
--0.311838 -0.448890 0.964306 -0.621179 -0.756908 -0.203045
--0.393649 -0.381750 0.964306 -0.621179 -0.756908 -0.203045
-0.318207 -0.065662 -0.011390 0.974454 -0.095975 -0.203045
-0.324674 0.000000 -0.011390 0.974454 -0.095975 -0.203045
-0.527978 0.000000 0.964306 0.974454 -0.095975 -0.203045
-0.517604 -0.105324 0.964306 0.974454 -0.095975 -0.203045
--0.342004 -0.065661 -0.011390 -0.937007 -0.284237 -0.203045
--0.322851 -0.128800 -0.011390 -0.937007 -0.284237 -0.203045
--0.510679 -0.206601 0.964306 -0.937007 -0.284237 -0.203045
--0.541401 -0.105324 0.964306 -0.937007 -0.284237 -0.203045
-0.226094 -0.237993 -0.011390 0.756908 -0.621179 -0.203045
-0.267951 -0.186989 -0.011390 0.756908 -0.621179 -0.203045
-0.436992 -0.299939 0.964306 0.756908 -0.621179 -0.203045
-0.369851 -0.381750 0.964306 0.756908 -0.621179 -0.203045
--0.322851 0.128801 -0.011390 -0.937006 0.284240 -0.203045
--0.342004 0.065663 -0.011390 -0.937006 0.284240 -0.203045
--0.541401 0.105325 0.964306 -0.937006 0.284240 -0.203045
--0.510679 0.206603 0.964306 -0.937006 0.284240 -0.203045
-0.226094 0.237993 -0.011390 0.621179 0.756908 -0.203045
-0.175091 0.279850 -0.011390 0.621179 0.756908 -0.203045
-0.288041 0.448891 0.964306 0.621179 0.756908 -0.203045
-0.369851 0.381750 0.964306 0.621179 0.756908 -0.203045
-0.053763 -0.330105 -0.011390 0.284238 -0.937007 -0.203045
-0.116902 -0.310952 -0.011390 0.284238 -0.937007 -0.203045
-0.194703 -0.498780 0.964306 0.284238 -0.937007 -0.203045
-0.093426 -0.529502 0.964306 0.284238 -0.937007 -0.203045
--0.198888 0.279851 -0.011390 -0.621177 0.756909 -0.203045
--0.249891 0.237994 -0.011390 -0.621177 0.756909 -0.203045
--0.393648 0.381751 0.964306 -0.621177 0.756909 -0.203045
--0.311837 0.448891 0.964306 -0.621177 0.756909 -0.203045
--0.140700 -0.310952 -0.011390 -0.284238 -0.937007 -0.203045
--0.077561 -0.330105 -0.011390 -0.284238 -0.937007 -0.203045
--0.117224 -0.529502 0.964306 -0.284238 -0.937007 -0.203045
--0.218501 -0.498780 0.964306 -0.284238 -0.937007 -0.203045
-0.318207 0.065662 -0.011390 0.937007 0.284237 -0.203045
-0.299054 0.128801 -0.011390 0.937007 0.284237 -0.203045
-0.486882 0.206602 0.964306 0.937007 0.284237 -0.203045
-0.517604 0.105325 0.964306 0.937007 0.284237 -0.203045
-0.031080 0.216068 0.964306 -0.000000 0.000000 1.000000
--0.011899 0.220301 0.964306 -0.000000 0.000000 1.000000
--0.054877 0.216068 0.964306 -0.000000 0.000000 1.000000
--0.096204 0.203532 0.964306 -0.000000 0.000000 1.000000
-0.072407 0.203531 0.964306 0.000000 -0.000000 1.000000
--0.134291 0.183174 0.964306 0.000000 -0.000000 1.000000
-0.110494 0.183173 0.964306 0.000000 0.000000 1.000000
--0.167674 0.155776 0.964306 0.000000 -0.000000 1.000000
-0.143877 0.155776 0.964306 0.000000 0.000000 1.000000
--0.195072 0.122393 0.964306 0.000000 -0.000000 1.000000
-0.171274 0.122393 0.964306 0.000000 0.000000 1.000000
--0.215429 0.084306 0.964306 0.000000 -0.000000 1.000000
-0.191632 0.084306 0.964306 0.000000 0.000000 1.000000
--0.227966 0.042979 0.964306 0.000000 -0.000000 1.000000
-0.204169 0.042979 0.964306 0.000000 0.000000 1.000000
--0.232199 0.000001 0.964306 0.000000 -0.000000 1.000000
-0.208402 0.000000 0.964306 0.000000 0.000000 1.000000
--0.227966 -0.042978 0.964306 0.000000 0.000000 1.000000
-0.204169 -0.042978 0.964306 0.000000 0.000000 1.000000
-0.191632 -0.084305 0.964306 0.000000 0.000000 1.000000
-0.171274 -0.122392 0.964306 0.000000 0.000000 1.000000
--0.167675 -0.155775 0.964306 0.000000 0.000000 1.000000
-0.143877 -0.155776 0.964306 0.000000 0.000000 1.000000
--0.134291 -0.183173 0.964306 0.000000 0.000000 1.000000
-0.110494 -0.183173 0.964306 0.000000 0.000000 1.000000
--0.096204 -0.203531 0.964306 0.000000 0.000000 1.000000
-0.072407 -0.203531 0.964306 0.000000 0.000000 1.000000
--0.054877 -0.216067 0.964306 0.000000 0.000000 1.000000
-0.031080 -0.216067 0.964306 0.000000 0.000000 1.000000
--0.011899 -0.220300 0.964306 0.000000 0.000000 1.000000
-0.436992 -0.299939 0.964306 0.000000 -0.000000 1.000000
-0.486882 -0.206601 0.964306 0.000000 -0.000000 1.000000
--0.117223 0.529503 0.964306 -0.000000 0.000000 1.000000
--0.218500 0.498781 0.964306 -0.000000 0.000000 1.000000
--0.393649 -0.381750 0.964306 -0.000000 -0.000000 1.000000
--0.311838 -0.448890 0.964306 -0.000000 -0.000000 1.000000
-0.517604 -0.105324 0.964306 0.000000 -0.000000 1.000000
-0.527978 0.000000 0.964306 0.000000 -0.000000 1.000000
--0.311837 0.448891 0.964306 -0.000000 0.000000 1.000000
--0.393648 0.381751 0.964306 -0.000000 0.000000 1.000000
--0.218501 -0.498780 0.964306 -0.000000 -0.000000 1.000000
--0.117224 -0.529502 0.964306 -0.000000 -0.000000 1.000000
-0.517604 0.105325 0.964306 0.000000 0.000000 1.000000
-0.486882 0.206602 0.964306 0.000000 0.000000 1.000000
--0.460789 0.299940 0.964306 -0.000000 0.000000 1.000000
--0.510679 0.206603 0.964306 -0.000000 0.000000 1.000000
-0.436992 0.299939 0.964306 0.000000 0.000000 1.000000
-0.369851 0.381750 0.964306 0.000000 0.000000 1.000000
--0.011899 -0.539876 0.964306 0.000000 -0.000000 1.000000
-0.093426 -0.529502 0.964306 0.000000 -0.000000 1.000000
--0.541401 0.105325 0.964306 -0.000000 0.000000 1.000000
--0.551775 0.000001 0.964306 -0.000000 0.000000 1.000000
-0.288041 0.448891 0.964306 0.000000 0.000000 1.000000
-0.194703 0.498781 0.964306 0.000000 0.000000 1.000000
-0.194703 -0.498780 0.964306 0.000000 -0.000000 1.000000
-0.288040 -0.448890 0.964306 0.000000 -0.000000 1.000000
--0.541401 -0.105324 0.964306 -0.000000 -0.000000 1.000000
-0.093426 0.529503 0.964306 0.000000 0.000000 1.000000
--0.011899 0.539877 0.964306 0.000000 0.000000 1.000000
-0.369851 -0.381750 0.964306 0.000000 -0.000000 1.000000
-4 0 1 2 3
-4 4 5 6 7
-4 8 9 10 11
-4 12 13 14 15
-4 16 17 18 19
-4 20 21 22 23
-4 24 25 26 27
-4 28 29 30 31
-4 32 33 34 35
-4 36 37 38 39
-4 40 41 42 43
-4 44 45 46 47
-4 48 49 50 51
-4 52 53 54 55
-4 56 57 58 59
-4 60 61 62 63
-4 64 65 66 67
-4 68 69 70 71
-4 72 73 74 75
-4 76 77 78 79
-4 80 81 82 83
-4 84 85 86 87
-4 88 89 90 91
-4 92 93 94 95
-4 96 97 98 99
-4 100 101 102 103
-4 104 105 106 107
-4 108 109 110 111
-4 112 113 114 115
-4 116 117 118 119
-4 120 121 122 123
-4 124 125 126 127
-4 128 129 130 131
-3 132 133 134
-3 133 135 134
-3 133 136 135
-3 136 137 135
-3 136 138 137
-3 138 139 137
-3 138 140 139
-3 140 141 139
-3 140 142 141
-3 142 143 141
-3 142 144 143
-3 144 145 143
-3 144 146 145
-3 146 147 145
-3 146 148 147
-3 148 149 147
-3 148 150 149
-3 150 151 149
-3 150 152 151
-3 152 153 151
-3 152 154 153
-3 154 155 153
-3 154 156 155
-3 156 157 155
-3 156 158 157
-3 158 159 157
-3 158 160 159
-3 160 161 159
-3 160 162 161
-3 162 163 161
-4 164 165 166 167
-4 168 169 170 171
-4 172 173 174 175
-4 176 177 178 179
-4 180 181 182 183
-4 184 185 186 187
-4 188 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-4 208 209 210 211
-4 212 213 214 215
-4 216 217 218 219
-4 220 221 222 223
-4 224 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-4 236 237 238 239
-4 240 241 242 243
-4 244 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-4 284 285 286 287
-4 288 289 290 291
-3 292 293 294
-3 292 294 295
-3 292 295 296
-3 295 297 296
-3 297 298 296
-3 297 299 298
-3 299 300 298
-3 299 301 300
-3 301 302 300
-3 301 303 302
-3 303 304 302
-3 303 305 304
-3 305 306 304
-3 305 307 306
-3 307 308 306
-3 307 309 308
-3 309 310 308
-3 309 167 310
-3 167 311 310
-3 167 166 311
-3 166 312 311
-3 166 313 312
-3 313 314 312
-3 313 315 314
-3 315 316 314
-3 315 317 316
-3 317 318 316
-3 317 319 318
-3 319 320 318
-3 319 321 320
-4 322 323 311 312
-4 324 325 295 294
-4 326 327 315 313
-4 328 329 308 310
-4 330 331 299 297
-4 332 333 319 317
-4 334 335 304 306
-4 336 337 303 301
-4 338 339 300 302
-4 340 341 320 321
-4 342 343 307 305
-4 344 345 296 298
-4 346 347 316 318
-4 348 164 167 309
-4 349 350 293 292
-4 351 322 312 314
-4 350 324 294 293
-4 165 326 313 166
-4 323 328 310 311
-4 325 330 297 295
-4 327 332 317 315
-4 329 334 306 308
-4 331 336 301 299
-4 333 340 321 319
-4 335 338 302 304
-4 337 342 305 303
-4 339 344 298 300
-4 341 346 318 320
-4 343 348 309 307
-4 345 349 292 296
-4 347 351 314 316
diff --git a/src/examples/evas/resources/models/convex_hull/column_blender_ch.ply b/src/examples/evas/resources/models/convex_hull/column_blender_ch.ply
deleted file mode 100644
index 22cf8d330c..0000000000
--- a/src/examples/evas/resources/models/convex_hull/column_blender_ch.ply
+++ /dev/null
@@ -1,295 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 192
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 90
-property list uchar uint vertex_indices
-end_header
--0.117223 0.529503 0.964306 0.000000 0.000000 1.000000
--0.011899 -0.539876 0.964306 0.000000 0.000000 1.000000
-0.093426 -0.529502 0.964306 0.000000 0.000000 1.000000
-0.194703 -0.498780 0.964306 0.000000 0.000000 1.000000
-0.436992 0.299939 0.964306 0.752039 0.617184 0.231346
-0.831470 0.555570 -1.000000 0.752039 0.617184 0.231346
-0.707107 0.707107 -1.000000 0.752039 0.617184 0.231346
-0.369851 0.381750 0.964306 0.752039 0.617184 0.231346
--0.510679 -0.206601 0.964306 -0.859899 -0.459622 0.222084
--0.923880 -0.382683 -1.000000 -0.859899 -0.459622 0.222084
--0.831470 -0.555570 -1.000000 -0.859899 -0.459622 0.222084
--0.460790 -0.299939 0.964306 -0.859899 -0.459622 0.222084
-0.707107 -0.707107 -1.000000 0.752039 -0.617184 0.231346
-0.831470 -0.555570 -1.000000 0.752039 -0.617184 0.231346
-0.436992 -0.299939 0.964306 0.752039 -0.617184 0.231346
-0.369851 -0.381750 0.964306 0.752039 -0.617184 0.231346
-0.195090 0.980785 -1.000000 0.000000 0.000000 -1.000000
--0.980785 -0.195089 -1.000000 0.000000 0.000000 -1.000000
--1.000000 0.000001 -1.000000 0.000000 0.000000 -1.000000
-0.288040 -0.448890 0.964306 0.000000 0.000000 1.000000
--0.460789 0.299940 0.964306 -0.753598 0.618463 0.222696
--0.393648 0.381751 0.964306 -0.753598 0.618463 0.222696
--0.707106 0.707108 -1.000000 -0.753598 0.618463 0.222696
--0.831469 0.555571 -1.000000 -0.753598 0.618463 0.222696
--0.980785 0.195091 -1.000000 0.000000 -0.000000 -1.000000
-0.369851 -0.381750 0.964306 0.000000 0.000000 1.000000
--0.707107 -0.707106 -1.000000 -0.753597 -0.618465 0.222695
--0.393649 -0.381750 0.964306 -0.753597 -0.618465 0.222695
--0.460790 -0.299939 0.964306 -0.753597 -0.618465 0.222695
--0.831470 -0.555570 -1.000000 -0.753597 -0.618465 0.222695
-0.436992 -0.299939 0.964306 0.000000 0.000000 1.000000
--0.923879 0.382684 -1.000000 0.000000 -0.000000 -1.000000
-0.923880 0.382683 -1.000000 0.857868 0.458541 0.231953
-0.831470 0.555570 -1.000000 0.857868 0.458541 0.231953
-0.436992 0.299939 0.964306 0.857868 0.458541 0.231953
-0.486882 0.206602 0.964306 0.857868 0.458541 0.231953
--0.831469 0.555571 -1.000000 0.000000 -0.000000 -1.000000
-0.486882 -0.206601 0.964306 0.000000 0.000000 1.000000
-0.000000 1.000000 -1.000000 0.095447 0.969071 0.227575
--0.011899 0.539877 0.964306 0.095447 0.969071 0.227575
-0.093426 0.529503 0.964306 0.095447 0.969071 0.227575
-0.195090 0.980785 -1.000000 0.095447 0.969071 0.227575
-0.288040 -0.448890 0.964306 0.617298 -0.752183 0.230573
-0.555570 -0.831470 -1.000000 0.617298 -0.752183 0.230573
-0.707107 -0.707107 -1.000000 0.617298 -0.752183 0.230573
-0.369851 -0.381750 0.964306 0.617298 -0.752183 0.230573
-0.517604 -0.105324 0.964306 0.000000 0.000000 1.000000
--0.707106 0.707108 -1.000000 0.000000 -0.000000 -1.000000
--0.510679 0.206603 0.964306 -0.859897 0.459626 0.222084
--0.460789 0.299940 0.964306 -0.859897 0.459626 0.222084
--0.831469 0.555571 -1.000000 -0.859897 0.459626 0.222084
--0.923879 0.382684 -1.000000 -0.859897 0.459626 0.222084
--0.555569 0.831470 -1.000000 0.000000 -0.000000 -1.000000
--0.555571 -0.831469 -1.000000 -0.618350 -0.753461 0.223473
--0.311838 -0.448890 0.964306 -0.618350 -0.753461 0.223473
--0.393649 -0.381750 0.964306 -0.618350 -0.753461 0.223473
--0.707107 -0.707106 -1.000000 -0.618350 -0.753461 0.223473
-0.527978 0.000000 0.964306 0.000000 0.000000 1.000000
-0.382683 0.923880 -1.000000 0.000000 0.000000 -1.000000
-0.555570 0.831470 -1.000000 0.000000 0.000000 -1.000000
--0.382682 0.923880 -1.000000 0.000000 -0.000000 -1.000000
-0.517604 0.105325 0.964306 0.000000 0.000000 1.000000
-0.517604 0.105325 0.964306 0.930747 0.282337 0.232371
-0.980785 0.195090 -1.000000 0.930747 0.282337 0.232371
-0.923880 0.382683 -1.000000 0.930747 0.282337 0.232371
-0.486882 0.206602 0.964306 0.930747 0.282337 0.232371
-0.707107 0.707107 -1.000000 0.000000 0.000000 -1.000000
--0.195089 0.980786 -1.000000 0.000000 -0.000000 -1.000000
-0.194703 -0.498780 0.964306 0.458797 -0.858347 0.229663
-0.382683 -0.923880 -1.000000 0.458797 -0.858347 0.229663
-0.555570 -0.831470 -1.000000 0.458797 -0.858347 0.229663
-0.288040 -0.448890 0.964306 0.458797 -0.858347 0.229663
-0.486882 0.206602 0.964306 0.000000 0.000000 1.000000
-0.831470 0.555570 -1.000000 0.000000 0.000000 -1.000000
-0.000000 1.000000 -1.000000 -0.000000 0.000000 -1.000000
-0.436992 0.299939 0.964306 0.000000 0.000000 1.000000
-0.000000 1.000000 -1.000000 -0.095470 0.969326 0.226479
--0.195089 0.980786 -1.000000 -0.095470 0.969326 0.226479
--0.117223 0.529503 0.964306 -0.095470 0.969326 0.226479
--0.011899 0.539877 0.964306 -0.095470 0.969326 0.226479
-0.923880 0.382683 -1.000000 0.000000 0.000000 -1.000000
--0.541401 0.105325 0.964306 -0.933135 0.283063 0.221663
--0.510679 0.206603 0.964306 -0.933135 0.283063 0.221663
--0.923879 0.382684 -1.000000 -0.933135 0.283063 0.221663
--0.980785 0.195091 -1.000000 -0.933135 0.283063 0.221663
-0.369851 0.381750 0.964306 0.000000 0.000000 1.000000
--0.218501 -0.498780 0.964306 -0.459377 -0.859432 0.224387
--0.311838 -0.448890 0.964306 -0.459377 -0.859432 0.224387
--0.555571 -0.831469 -1.000000 -0.459377 -0.859432 0.224387
--0.382684 -0.923879 -1.000000 -0.459377 -0.859432 0.224387
-0.980785 0.195090 -1.000000 0.000000 0.000000 -1.000000
-0.288041 0.448891 0.964306 0.000000 0.000000 1.000000
-1.000000 0.000000 -1.000000 0.967893 0.095331 0.232584
-0.980785 0.195090 -1.000000 0.967893 0.095331 0.232584
-0.517604 0.105325 0.964306 0.967893 0.095331 0.232584
-0.527978 0.000000 0.964306 0.967893 0.095331 0.232584
-1.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000
--0.218500 0.498781 0.964306 0.000000 0.000000 1.000000
--0.311837 0.448891 0.964306 0.000000 0.000000 1.000000
-0.194703 0.498781 0.964306 0.000000 0.000000 1.000000
-0.093426 -0.529502 0.964306 0.282592 -0.931590 0.228651
-0.195090 -0.980785 -1.000000 0.282592 -0.931590 0.228651
-0.382683 -0.923880 -1.000000 0.282592 -0.931590 0.228651
-0.194703 -0.498780 0.964306 0.282592 -0.931590 0.228651
-0.980785 -0.195090 -1.000000 0.000000 0.000000 -1.000000
--0.393648 0.381751 0.964306 0.000000 0.000000 1.000000
-0.093426 0.529503 0.964306 0.000000 0.000000 1.000000
--1.000000 0.000001 -1.000000 -0.970476 0.095586 0.221448
--0.551775 0.000001 0.964306 -0.970476 0.095586 0.221448
--0.541401 0.105325 0.964306 -0.970476 0.095586 0.221448
--0.980785 0.195091 -1.000000 -0.970476 0.095586 0.221448
-0.923880 -0.382683 -1.000000 0.000000 0.000000 -1.000000
--0.460789 0.299940 0.964306 0.000000 0.000000 1.000000
--0.011899 0.539877 0.964306 0.000000 0.000000 1.000000
-0.382683 0.923880 -1.000000 0.282592 0.931590 0.228651
-0.195090 0.980785 -1.000000 0.282592 0.931590 0.228651
-0.093426 0.529503 0.964306 0.282592 0.931590 0.228651
-0.194703 0.498781 0.964306 0.282592 0.931590 0.228651
-0.831470 -0.555570 -1.000000 0.000000 0.000000 -1.000000
--0.510679 0.206603 0.964306 0.000000 0.000000 1.000000
--0.117224 -0.529502 0.964306 -0.282815 -0.932314 0.225402
--0.218501 -0.498780 0.964306 -0.282815 -0.932314 0.225402
--0.382684 -0.923879 -1.000000 -0.282815 -0.932314 0.225402
--0.195091 -0.980785 -1.000000 -0.282815 -0.932314 0.225402
-0.517604 -0.105324 0.964306 0.967893 -0.095332 0.232584
-0.980785 -0.195090 -1.000000 0.967893 -0.095332 0.232584
-1.000000 0.000000 -1.000000 0.967893 -0.095332 0.232584
-0.527978 0.000000 0.964306 0.967893 -0.095332 0.232584
--0.541401 0.105325 0.964306 0.000000 0.000000 1.000000
-0.707107 -0.707107 -1.000000 0.000000 0.000000 -1.000000
--0.382682 0.923880 -1.000000 -0.282815 0.932314 0.225402
--0.218500 0.498781 0.964306 -0.282815 0.932314 0.225402
--0.117223 0.529503 0.964306 -0.282815 0.932314 0.225402
--0.195089 0.980786 -1.000000 -0.282815 0.932314 0.225402
-0.555570 -0.831470 -1.000000 0.000000 0.000000 -1.000000
--0.551775 0.000001 0.964306 0.000000 0.000000 1.000000
--0.011899 -0.539876 0.964306 0.095447 -0.969071 0.227576
-0.000000 -1.000000 -1.000000 0.095447 -0.969071 0.227576
-0.195090 -0.980785 -1.000000 0.095447 -0.969071 0.227576
-0.093426 -0.529502 0.964306 0.095447 -0.969071 0.227576
--0.541401 -0.105324 0.964306 -0.970476 -0.095586 0.221448
--0.551775 0.000001 0.964306 -0.970476 -0.095586 0.221448
--1.000000 0.000001 -1.000000 -0.970476 -0.095586 0.221448
--0.980785 -0.195089 -1.000000 -0.970476 -0.095586 0.221448
-0.382683 -0.923880 -1.000000 0.000000 0.000000 -1.000000
--0.541401 -0.105324 0.964306 0.000000 -0.000000 1.000000
-0.555570 0.831470 -1.000000 0.458796 0.858348 0.229662
-0.382683 0.923880 -1.000000 0.458796 0.858348 0.229662
-0.194703 0.498781 0.964306 0.458796 0.858348 0.229662
-0.288041 0.448891 0.964306 0.458796 0.858348 0.229662
-0.195090 -0.980785 -1.000000 0.000000 0.000000 -1.000000
-0.000000 -1.000000 -1.000000 -0.095472 -0.969326 0.226479
--0.011899 -0.539876 0.964306 -0.095472 -0.969326 0.226479
--0.117224 -0.529502 0.964306 -0.095472 -0.969326 0.226479
--0.195091 -0.980785 -1.000000 -0.095472 -0.969326 0.226479
--0.510679 -0.206601 0.964306 0.000000 -0.000000 1.000000
-0.486882 -0.206601 0.964306 0.930747 -0.282337 0.232371
-0.923880 -0.382683 -1.000000 0.930747 -0.282337 0.232371
-0.980785 -0.195090 -1.000000 0.930747 -0.282337 0.232371
-0.517604 -0.105324 0.964306 0.930747 -0.282337 0.232371
-0.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000
--0.460790 -0.299939 0.964306 0.000000 -0.000000 1.000000
--0.195091 -0.980785 -1.000000 -0.000000 0.000000 -1.000000
--0.382684 -0.923879 -1.000000 -0.000000 0.000000 -1.000000
--0.555569 0.831470 -1.000000 -0.459377 0.859432 0.224387
--0.311837 0.448891 0.964306 -0.459377 0.859432 0.224387
--0.218500 0.498781 0.964306 -0.459377 0.859432 0.224387
--0.382682 0.923880 -1.000000 -0.459377 0.859432 0.224387
--0.393649 -0.381750 0.964306 0.000000 -0.000000 1.000000
--0.923880 -0.382683 -1.000000 -0.933136 -0.283060 0.221663
--0.510679 -0.206601 0.964306 -0.933136 -0.283060 0.221663
--0.541401 -0.105324 0.964306 -0.933136 -0.283060 0.221663
--0.980785 -0.195089 -1.000000 -0.933136 -0.283060 0.221663
--0.311838 -0.448890 0.964306 0.000000 -0.000000 1.000000
-0.369851 0.381750 0.964306 0.617302 0.752180 0.230573
-0.707107 0.707107 -1.000000 0.617302 0.752180 0.230573
-0.555570 0.831470 -1.000000 0.617302 0.752180 0.230573
-0.288041 0.448891 0.964306 0.617302 0.752180 0.230573
--0.555571 -0.831469 -1.000000 0.000000 0.000000 -1.000000
--0.218501 -0.498780 0.964306 0.000000 -0.000000 1.000000
-0.436992 -0.299939 0.964306 0.857869 -0.458540 0.231953
-0.831470 -0.555570 -1.000000 0.857869 -0.458540 0.231953
-0.923880 -0.382683 -1.000000 0.857869 -0.458540 0.231953
-0.486882 -0.206601 0.964306 0.857869 -0.458540 0.231953
--0.707107 -0.707106 -1.000000 0.000000 0.000000 -1.000000
--0.117224 -0.529502 0.964306 0.000000 -0.000000 1.000000
--0.393648 0.381751 0.964306 -0.618346 0.753464 0.223473
--0.311837 0.448891 0.964306 -0.618346 0.753464 0.223473
--0.555569 0.831470 -1.000000 -0.618346 0.753464 0.223473
--0.707106 0.707108 -1.000000 -0.618346 0.753464 0.223473
--0.831470 -0.555570 -1.000000 0.000000 0.000000 -1.000000
--0.923880 -0.382683 -1.000000 0.000000 0.000000 -1.000000
-4 0 1 2 3
-4 4 5 6 7
-4 8 9 10 11
-4 12 13 14 15
-3 16 17 18
-3 0 3 19
-4 20 21 22 23
-3 16 18 24
-3 0 19 25
-4 26 27 28 29
-3 0 25 30
-3 16 24 31
-4 32 33 34 35
-3 16 31 36
-3 0 30 37
-4 38 39 40 41
-4 42 43 44 45
-3 0 37 46
-3 16 36 47
-4 48 49 50 51
-3 16 47 52
-4 53 54 55 56
-3 0 46 57
-3 16 58 59
-3 16 52 60
-3 0 57 61
-4 62 63 64 65
-3 16 59 66
-3 16 60 67
-4 68 69 70 71
-3 0 61 72
-3 16 66 73
-3 67 74 16
-3 0 72 75
-4 76 77 78 79
-3 16 73 80
-4 81 82 83 84
-3 0 75 85
-4 86 87 88 89
-3 16 80 90
-3 0 85 91
-4 92 93 94 95
-3 16 90 96
-3 0 97 98
-3 0 91 99
-4 100 101 102 103
-3 16 96 104
-3 0 98 105
-3 0 99 106
-4 107 108 109 110
-3 16 104 111
-3 0 105 112
-3 0 106 113
-4 114 115 116 117
-3 16 111 118
-3 0 112 119
-4 120 121 122 123
-4 124 125 126 127
-3 0 119 128
-3 16 118 129
-4 130 131 132 133
-3 16 129 134
-3 0 128 135
-4 136 137 138 139
-4 140 141 142 143
-3 16 134 144
-3 0 135 145
-4 146 147 148 149
-3 16 144 150
-4 151 152 153 154
-3 0 145 155
-4 156 157 158 159
-3 16 150 160
-3 0 155 161
-4 162 163 16 160
-4 164 165 166 167
-3 0 161 168
-4 169 170 171 172
-3 0 168 173
-4 174 175 176 177
-3 16 163 178
-3 0 173 179
-4 180 181 182 183
-3 16 178 184
-3 0 179 185
-4 186 187 188 189
-3 16 184 190
-3 0 185 1
-3 16 190 191
-3 16 191 17
diff --git a/src/examples/evas/resources/models/convex_hull/column_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/column_blender_ch_test.ply
deleted file mode 100644
index 4300b29167..0000000000
--- a/src/examples/evas/resources/models/convex_hull/column_blender_ch_test.ply
+++ /dev/null
@@ -1,164 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 64
-property float x
-property float y
-property float z
-element face 90
-property list uchar uint vertex_indices
-end_header
--0.117223 0.529503 0.964306
--0.011899 -0.539876 0.964306
-0.093426 -0.529502 0.964306
-0.194703 -0.498780 0.964306
-0.436992 0.299939 0.964306
-0.831470 0.555570 -1.000000
-0.707107 0.707107 -1.000000
-0.369851 0.381750 0.964306
--0.510679 -0.206601 0.964306
--0.923880 -0.382683 -1.000000
--0.831470 -0.555570 -1.000000
--0.460790 -0.299939 0.964306
-0.707107 -0.707107 -1.000000
-0.831470 -0.555570 -1.000000
-0.436992 -0.299939 0.964306
-0.369851 -0.381750 0.964306
-0.195090 0.980785 -1.000000
--0.980785 -0.195089 -1.000000
--1.000000 0.000001 -1.000000
-0.288040 -0.448890 0.964306
--0.460789 0.299940 0.964306
--0.393648 0.381751 0.964306
--0.707106 0.707108 -1.000000
--0.831469 0.555571 -1.000000
--0.980785 0.195091 -1.000000
--0.923879 0.382684 -1.000000
-0.486882 -0.206601 0.964306
-0.517604 -0.105324 0.964306
-0.527978 0.000000 0.964306
-0.382683 0.923880 -1.000000
-0.555570 0.831470 -1.000000
--0.555569 0.831470 -1.000000
--0.382682 0.923880 -1.000000
-0.517604 0.105325 0.964306
--0.195089 0.980786 -1.000000
--0.218500 0.498781 0.964306
--0.311837 0.448891 0.964306
-0.288041 0.448891 0.964306
-0.194703 0.498781 0.964306
-0.980785 -0.195090 -1.000000
-0.923880 -0.382683 -1.000000
--0.707107 -0.707106 -1.000000
--0.393649 -0.381750 0.964306
-0.923880 0.382683 -1.000000
-0.486882 0.206602 0.964306
-0.000000 1.000000 -1.000000
--0.011899 0.539877 0.964306
-0.093426 0.529503 0.964306
-0.555570 -0.831470 -1.000000
--0.510679 0.206603 0.964306
--0.555571 -0.831469 -1.000000
--0.311838 -0.448890 0.964306
-0.980785 0.195090 -1.000000
-0.382683 -0.923880 -1.000000
--0.541401 0.105325 0.964306
--0.218501 -0.498780 0.964306
--0.382684 -0.923879 -1.000000
-1.000000 0.000000 -1.000000
-0.195090 -0.980785 -1.000000
--0.551775 0.000001 0.964306
--0.117224 -0.529502 0.964306
--0.195091 -0.980785 -1.000000
-0.000000 -1.000000 -1.000000
--0.541401 -0.105324 0.964306
-4 0 1 2 3
-4 4 5 6 7
-4 8 9 10 11
-4 12 13 14 15
-3 16 17 18
-3 0 3 19
-4 20 21 22 23
-3 16 18 24
-3 16 24 25
-3 0 26 27
-3 0 27 28
-3 16 29 30
-3 16 31 32
-3 0 28 33
-3 16 32 34
-3 0 35 36
-3 0 37 38
-3 16 39 40
-3 0 19 15
-4 41 42 11 10
-3 0 15 14
-4 43 5 4 44
-3 16 25 23
-3 0 14 26
-4 45 46 47 16
-4 19 48 12 15
-3 16 23 22
-4 49 20 23 25
-3 16 22 31
-4 50 51 42 41
-4 33 52 43 44
-3 16 30 6
-4 3 53 48 19
-3 0 33 44
-3 16 6 5
-3 34 45 16
-3 0 44 4
-4 0 46 45 34
-3 16 5 43
-4 54 49 25 24
-3 0 4 7
-4 55 51 50 56
-3 16 43 52
-3 0 7 37
-4 57 52 33 28
-3 16 52 57
-4 2 58 53 3
-3 16 57 39
-3 0 36 21
-3 0 38 47
-4 18 59 54 24
-3 0 21 20
-3 0 47 46
-4 29 16 47 38
-3 16 40 13
-3 0 20 49
-4 60 55 56 61
-4 27 39 57 28
-3 0 49 54
-3 16 13 12
-4 0 34 32 35
-3 16 12 48
-3 0 54 59
-4 1 62 58 2
-4 63 59 18 17
-3 16 48 53
-3 0 59 63
-4 30 29 38 37
-3 16 53 58
-4 62 1 60 61
-3 0 63 8
-4 26 40 39 27
-3 16 58 62
-3 0 8 11
-4 61 56 16 62
-4 31 36 35 32
-3 0 11 42
-4 9 8 63 17
-3 0 42 51
-4 7 6 30 37
-3 16 56 50
-3 0 51 55
-4 14 13 40 26
-3 16 50 41
-3 0 55 60
-4 21 36 31 22
-3 16 41 10
-3 0 60 1
-3 16 10 9
-3 16 9 17
diff --git a/src/examples/evas/resources/models/convex_hull/cube_blender_ch.ply b/src/examples/evas/resources/models/convex_hull/cube_blender_ch.ply
deleted file mode 100644
index 37ef471e0e..0000000000
--- a/src/examples/evas/resources/models/convex_hull/cube_blender_ch.ply
+++ /dev/null
@@ -1,43 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 24
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 6
-property list uchar uint vertex_indices
-end_header
--0.500000 -0.500000 0.500000 -0.000000 -1.000000 0.000000
--0.500000 -0.500000 -0.500000 -0.000000 -1.000000 0.000000
-0.500000 -0.500000 -0.500000 -0.000000 -1.000000 0.000000
-0.500000 -0.500000 0.500000 -0.000000 -1.000000 0.000000
--0.500000 -0.500000 0.500000 -1.000000 0.000000 0.000000
--0.500000 0.500000 0.500000 -1.000000 0.000000 0.000000
--0.500000 0.500000 -0.500000 -1.000000 0.000000 0.000000
--0.500000 -0.500000 -0.500000 -1.000000 0.000000 0.000000
-0.500000 -0.500000 -0.500000 0.000000 -0.000000 -1.000000
--0.500000 -0.500000 -0.500000 0.000000 -0.000000 -1.000000
--0.500000 0.500000 -0.500000 0.000000 -0.000000 -1.000000
-0.500000 0.500000 -0.500000 0.000000 -0.000000 -1.000000
-0.500000 -0.500000 0.500000 1.000000 0.000000 0.000000
-0.500000 -0.500000 -0.500000 1.000000 0.000000 0.000000
-0.500000 0.500000 -0.500000 1.000000 0.000000 0.000000
-0.500000 0.500000 0.500000 1.000000 0.000000 0.000000
--0.500000 0.500000 0.500000 0.000000 0.000000 1.000000
--0.500000 -0.500000 0.500000 0.000000 0.000000 1.000000
-0.500000 -0.500000 0.500000 0.000000 0.000000 1.000000
-0.500000 0.500000 0.500000 0.000000 0.000000 1.000000
-0.500000 0.500000 -0.500000 0.000000 1.000000 0.000000
--0.500000 0.500000 -0.500000 0.000000 1.000000 0.000000
--0.500000 0.500000 0.500000 0.000000 1.000000 0.000000
-0.500000 0.500000 0.500000 0.000000 1.000000 0.000000
-4 0 1 2 3
-4 4 5 6 7
-4 8 9 10 11
-4 12 13 14 15
-4 16 17 18 19
-4 20 21 22 23
diff --git a/src/examples/evas/resources/models/convex_hull/cube_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/cube_blender_ch_test.ply
deleted file mode 100644
index 8dbaaaf641..0000000000
--- a/src/examples/evas/resources/models/convex_hull/cube_blender_ch_test.ply
+++ /dev/null
@@ -1,24 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 8
-property float x
-property float y
-property float z
-element face 6
-property list uchar uint vertex_indices
-end_header
--1.000000 1.000000 -1.000000
--1.000000 -1.000000 -1.000000
--1.000000 -1.000000 1.000000
--1.000000 1.000000 1.000000
-1.000000 1.000000 1.000000
-1.000000 1.000000 -1.000000
-1.000000 -1.000000 1.000000
-1.000000 -1.000000 -1.000000
-4 0 1 2 3
-4 3 4 5 0
-4 4 6 7 5
-4 1 7 6 2
-4 1 0 5 7
-4 6 4 3 2
diff --git a/src/examples/evas/resources/models/convex_hull/eagle_blender_ch.ply b/src/examples/evas/resources/models/convex_hull/eagle_blender_ch.ply
deleted file mode 100644
index 1caabd2f6b..0000000000
--- a/src/examples/evas/resources/models/convex_hull/eagle_blender_ch.ply
+++ /dev/null
@@ -1,306 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 224
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 69
-property list uchar uint vertex_indices
-end_header
-5.286846 -12.507089 -2.892074 0.468882 -0.758475 0.452620
-5.286847 -11.926323 -1.918860 0.468882 -0.758475 0.452620
-5.051982 -11.998919 -1.797208 0.468882 -0.758475 0.452620
--28.298796 3.100986 -3.378680 -0.534151 0.681200 0.500648
--28.533657 2.738008 -3.135377 -0.534151 0.681200 0.500648
--22.427179 3.681757 2.095648 -0.534151 0.681200 0.500648
--18.434486 4.770696 -11.407694 -0.127021 0.990658 -0.049629
--29.473116 3.318773 -12.137604 -0.127021 0.990658 -0.049629
--17.025297 5.061080 -9.217964 -0.127021 0.990658 -0.049629
--29.473116 3.318773 -12.137604 -0.794323 0.595264 0.121297
--28.533657 2.738008 -3.135377 -0.794323 0.595264 0.121297
--28.298796 3.100986 -3.378680 -0.794323 0.595264 0.121297
-29.008156 3.972170 -3.378680 0.713765 0.687846 0.131938
-29.243021 3.681786 -3.135377 0.713765 0.687846 0.131938
-30.417343 4.189959 -12.137604 0.713765 0.687846 0.131938
-29.008156 3.972170 -3.378680 0.108600 0.993022 0.045980
-18.204386 5.424080 -9.217964 0.108600 0.993022 0.045980
-23.371405 4.335146 2.095648 0.108600 0.993022 0.045980
-29.008156 3.972170 -3.378680 0.478766 0.758155 0.442701
-23.371405 4.335146 2.095648 0.478766 0.758155 0.442701
-29.243021 3.681786 -3.135377 0.478766 0.758155 0.442701
--28.533657 2.738008 -3.135377 -0.647569 0.294437 0.702824
--22.427179 3.100990 2.338951 -0.647569 0.294437 0.702824
--22.427179 3.681757 2.095648 -0.647569 0.294437 0.702824
--29.473116 3.318773 -12.137604 -0.148710 0.987879 0.044501
--28.298796 3.100986 -3.378680 -0.148710 0.987879 0.044501
--17.025297 5.061080 -9.217964 -0.148710 0.987879 0.044501
-23.371405 4.335146 2.095648 0.618731 0.459662 0.637089
-23.606272 3.681784 2.338951 0.618731 0.459662 0.637089
-29.243021 3.681786 -3.135377 0.618731 0.459662 0.637089
-7.635484 1.503901 13.530909 0.226175 0.000000 0.974087
-7.635484 1.721687 13.530909 0.226175 0.000000 0.974087
-0.824412 1.140917 15.112381 0.226175 0.000000 0.974087
--2.463683 -12.361902 -0.459039 0.167346 -0.757782 0.630683
-5.051982 -11.998919 -1.797208 0.167346 -0.757782 0.630683
-10.453859 -0.093205 10.854572 0.167346 -0.757782 0.630683
-0.824412 1.140917 15.112381 0.167346 -0.757782 0.630683
-26.424646 3.826977 -13.354122 0.053188 0.870507 -0.489273
-18.674114 4.915909 -12.259256 0.053188 0.870507 -0.489273
-19.378708 5.351484 -11.407694 0.053188 0.870507 -0.489273
-5.286847 -11.926323 -1.918860 0.497627 -0.727377 0.472535
-29.243021 3.681786 -3.135377 0.497627 -0.727377 0.472535
-10.453859 -0.093205 10.854572 0.497627 -0.727377 0.472535
-5.051982 -11.998919 -1.797208 0.497627 -0.727377 0.472535
--25.480419 2.955797 -13.354122 -0.250558 -0.705273 -0.663183
-0.354687 -4.303767 -15.300550 -0.250558 -0.705273 -0.663183
--2.463684 -11.055178 -7.149884 -0.250558 -0.705273 -0.663183
--29.473116 3.318773 -12.137604 -0.250558 -0.705273 -0.663183
--9.039898 -0.093217 10.854572 -0.559352 -0.379198 0.737112
--8.335305 0.995720 11.949438 -0.559352 -0.379198 0.737112
--22.427179 3.100990 2.338951 -0.559352 -0.379198 0.737112
-18.674114 4.915909 -12.259256 -0.010626 0.670365 -0.741956
-26.424646 3.826977 -13.354122 -0.010626 0.670365 -0.741956
--17.964754 4.335121 -12.259256 -0.010626 0.670365 -0.741956
-18.204386 5.424080 -9.217964 0.065155 0.996623 0.049972
-14.916283 5.351483 -7.149884 0.065155 0.996623 0.049972
-15.620876 4.915908 4.285378 0.065155 0.996623 0.049972
-23.371405 4.335146 2.095648 0.065155 0.996623 0.049972
-10.453859 -0.093205 10.854572 0.188690 -0.743030 0.642108
-7.635484 1.503901 13.530909 0.188690 -0.743030 0.642108
-0.824412 1.140917 15.112381 0.188690 -0.743030 0.642108
-5.051982 -11.998919 -1.797208 0.143285 -0.849861 0.507155
--2.463683 -12.361902 -0.459039 0.143285 -0.849861 0.507155
--2.698548 -13.087861 -1.432253 0.143285 -0.849861 0.507155
-5.286846 -12.507089 -2.892074 0.143285 -0.849861 0.507155
--13.972055 5.061082 -7.149884 -0.011030 0.999089 0.041227
--14.676649 4.552910 4.285378 -0.011030 0.999089 0.041227
-15.620876 4.915908 4.285378 -0.011030 0.999089 0.041227
-14.916283 5.351483 -7.149884 -0.011030 0.999089 0.041227
--2.463684 -11.055178 -7.149884 -0.337502 -0.804040 -0.489502
--4.577465 -10.982584 -5.811715 -0.337502 -0.804040 -0.489502
--29.473116 3.318773 -12.137604 -0.337502 -0.804040 -0.489502
-26.424646 3.826977 -13.354122 -0.011042 0.657897 -0.753027
--25.480419 2.955797 -13.354122 -0.011042 0.657897 -0.753027
--17.964754 4.335121 -12.259256 -0.011042 0.657897 -0.753027
-29.243021 3.681786 -3.135377 0.541611 -0.629008 0.557680
-23.606272 3.681784 2.338951 0.541611 -0.629008 0.557680
-10.453859 -0.093205 10.854572 0.541611 -0.629008 0.557680
-26.424646 3.826977 -13.354122 -0.006546 0.390014 -0.920786
-0.824414 -2.634064 -15.908808 -0.006546 0.390014 -0.920786
--25.480419 2.955797 -13.354122 -0.006546 0.390014 -0.920786
-7.635484 1.721687 13.530909 -0.000001 0.938705 0.344722
--6.456389 1.721679 13.530909 -0.000001 0.938705 0.344722
-0.824412 1.140917 15.112381 -0.000001 0.938705 0.344722
--2.698548 -13.087861 -1.432253 -0.468257 -0.716896 0.516523
--2.463683 -12.361902 -0.459039 -0.468257 -0.716896 0.516523
--9.039898 -0.093217 10.854572 -0.468257 -0.716896 0.516523
--28.533657 2.738008 -3.135377 -0.468257 -0.716896 0.516523
-23.606272 3.681784 2.338951 0.576812 -0.272548 0.770068
-7.635484 1.503901 13.530909 0.576812 -0.272548 0.770068
-10.453859 -0.093205 10.854572 0.576812 -0.272548 0.770068
-0.354687 -4.303767 -15.300550 -0.099616 -0.749090 -0.654936
-0.824415 -3.940788 -15.787157 -0.099616 -0.749090 -0.654936
--2.463684 -11.055178 -7.149884 -0.099616 -0.749090 -0.654936
-0.824414 -2.634064 -15.908808 -0.096664 -0.000000 -0.995317
-0.824415 -3.360022 -15.908808 -0.096664 -0.000000 -0.995317
--25.480419 2.955797 -13.354122 -0.096664 -0.000000 -0.995317
--14.676649 4.552910 4.285378 -0.227390 0.855990 0.464301
--22.427179 3.681757 2.095648 -0.227390 0.855990 0.464301
--6.456389 1.721679 13.530909 -0.227390 0.855990 0.464301
-14.916283 5.351483 -7.149884 -0.010050 0.999767 0.019116
-18.204386 5.424080 -9.217964 -0.010050 0.999767 0.019116
--13.972055 5.061082 -7.149884 -0.010050 0.999767 0.019116
--22.427179 3.100990 2.338951 -0.542139 0.244904 0.803808
--6.456389 1.503891 13.530909 -0.542139 0.244904 0.803808
--6.456389 1.721679 13.530909 -0.542139 0.244904 0.803808
--22.427179 3.681757 2.095648 -0.542139 0.244904 0.803808
-0.824415 -3.360022 -15.908808 -0.142802 -0.202915 -0.968727
-0.824415 -3.940788 -15.787157 -0.142802 -0.202915 -0.968727
--25.480419 2.955797 -13.354122 -0.142802 -0.202915 -0.968727
-0.824415 -3.940788 -15.787157 -0.023710 -0.767206 -0.640962
-0.824416 -4.448958 -15.178898 -0.023710 -0.767206 -0.640962
--2.463684 -11.055178 -7.149884 -0.023710 -0.767206 -0.640962
-23.606272 3.681784 2.338951 0.506624 0.355909 0.785278
-23.371405 4.335146 2.095648 0.506624 0.355909 0.785278
-7.635484 1.721687 13.530909 0.506624 0.355909 0.785278
-7.635484 1.503901 13.530909 0.506624 0.355909 0.785278
--29.473116 3.318773 -12.137604 -0.501529 -0.862504 -0.067497
--4.577465 -10.982584 -5.811715 -0.501529 -0.862504 -0.067497
--2.698548 -13.087861 -1.432253 -0.501529 -0.862504 -0.067497
--28.533657 2.738008 -3.135377 -0.501529 -0.862504 -0.067497
-0.824415 -3.940788 -15.787157 0.274141 -0.703423 -0.655776
-26.424646 3.826977 -13.354122 0.274141 -0.703423 -0.655776
-30.417343 4.189959 -12.137604 0.274141 -0.703423 -0.655776
-3.173064 -10.111429 -8.123098 0.274141 -0.703423 -0.655776
-0.824416 -4.448958 -15.178898 0.021191 -0.776276 -0.630037
-3.173064 -10.111429 -8.123098 0.021191 -0.776276 -0.630037
--2.463684 -11.055178 -7.149884 0.021191 -0.776276 -0.630037
-18.204386 5.424080 -9.217964 -0.010302 0.999831 0.015209
--17.025297 5.061080 -9.217964 -0.010302 0.999831 0.015209
--13.972055 5.061082 -7.149884 -0.010302 0.999831 0.015209
-0.824415 -3.940788 -15.787157 -0.237945 -0.654339 -0.717790
-0.354687 -4.303767 -15.300550 -0.237945 -0.654339 -0.717790
--25.480419 2.955797 -13.354122 -0.237945 -0.654339 -0.717790
-0.824415 -3.360022 -15.908808 0.153391 -0.202591 -0.967175
-26.424646 3.826977 -13.354122 0.153391 -0.202591 -0.967175
-0.824415 -3.940788 -15.787157 0.153391 -0.202591 -0.967175
-0.824416 -4.448958 -15.178898 0.075685 -0.765221 -0.639303
-0.824415 -3.940788 -15.787157 0.075685 -0.765221 -0.639303
-3.173064 -10.111429 -8.123098 0.075685 -0.765221 -0.639303
-7.635484 1.721687 13.530909 -0.000001 0.945181 0.326548
-15.620876 4.915908 4.285378 -0.000001 0.945181 0.326548
--6.456389 1.721679 13.530909 -0.000001 0.945181 0.326548
--4.577465 -10.982584 -5.811715 -0.242600 -0.910892 -0.333798
--2.463684 -11.055178 -7.149884 -0.242600 -0.910892 -0.333798
--2.698548 -13.087861 -1.432253 -0.242600 -0.910892 -0.333798
-23.371405 4.335146 2.095648 0.196687 0.861774 0.467612
-15.620876 4.915908 4.285378 0.196687 0.861774 0.467612
-7.635484 1.721687 13.530909 0.196687 0.861774 0.467612
--17.025297 5.061080 -9.217964 -0.101802 0.993278 0.055086
--22.427179 3.681757 2.095648 -0.101802 0.993278 0.055086
--14.676649 4.552910 4.285378 -0.101802 0.993278 0.055086
--13.972055 5.061082 -7.149884 -0.101802 0.993278 0.055086
-0.824415 -3.360022 -15.908808 0.099298 0.000000 -0.995058
-0.824414 -2.634064 -15.908808 0.099298 0.000000 -0.995058
-26.424646 3.826977 -13.354122 0.099298 0.000000 -0.995058
-19.378708 5.351484 -11.407694 -0.012877 0.996557 -0.081906
--18.434486 4.770696 -11.407694 -0.012877 0.996557 -0.081906
--17.025297 5.061080 -9.217964 -0.012877 0.996557 -0.081906
-18.204386 5.424080 -9.217964 -0.012877 0.996557 -0.081906
-15.620876 4.915908 4.285378 -0.011421 0.953222 0.302056
--14.676649 4.552910 4.285378 -0.011421 0.953222 0.302056
--6.456389 1.721679 13.530909 -0.011421 0.953222 0.302056
--2.463684 -11.055178 -7.149884 0.035581 -0.924318 -0.379960
-3.173064 -10.111429 -8.123098 0.035581 -0.924318 -0.379960
-5.286846 -12.507089 -2.892074 0.035581 -0.924318 -0.379960
--2.698548 -13.087861 -1.432253 0.035581 -0.924318 -0.379960
-29.243021 3.681786 -3.135377 0.558771 -0.825701 0.077410
-5.286847 -11.926323 -1.918860 0.558771 -0.825701 0.077410
-5.286846 -12.507089 -2.892074 0.558771 -0.825701 0.077410
-29.947615 3.826977 -11.894300 0.558771 -0.825701 0.077410
-30.417343 4.189959 -12.137604 0.305918 -0.748082 -0.588886
-5.756574 -9.821045 -7.149884 0.305918 -0.748082 -0.588886
-3.173064 -10.111429 -8.123098 0.305918 -0.748082 -0.588886
--22.427179 3.100990 2.338951 -0.568229 -0.292554 0.769108
--8.335305 0.995720 11.949438 -0.568229 -0.292554 0.769108
--6.456389 1.503891 13.530909 -0.568229 -0.292554 0.769108
-3.173064 -10.111429 -8.123098 0.277614 -0.826047 -0.490486
-5.756574 -9.821045 -7.149884 0.277614 -0.826047 -0.490486
-5.286846 -12.507089 -2.892074 0.277614 -0.826047 -0.490486
-30.417343 4.189959 -12.137604 0.344358 -0.787863 -0.510578
-29.947615 3.826977 -11.894300 0.344358 -0.787863 -0.510578
-5.756574 -9.821045 -7.149884 0.344358 -0.787863 -0.510578
--8.335305 0.995720 11.949438 -0.516342 -0.417624 0.747651
--9.039898 -0.093217 10.854572 -0.516342 -0.417624 0.747651
--6.456389 1.503891 13.530909 -0.516342 -0.417624 0.747651
-5.756574 -9.821045 -7.149884 0.362723 -0.805705 -0.468264
-29.947615 3.826977 -11.894300 0.362723 -0.805705 -0.468264
-5.286846 -12.507089 -2.892074 0.362723 -0.805705 -0.468264
-26.424646 3.826977 -13.354122 0.061978 0.882262 -0.466662
-19.378708 5.351484 -11.407694 0.061978 0.882262 -0.466662
-30.417343 4.189959 -12.137604 0.061978 0.882262 -0.466662
--9.039898 -0.093217 10.854572 -0.228069 -0.723297 0.651787
--2.463683 -12.361902 -0.459039 -0.228069 -0.723297 0.651787
--6.456389 1.503891 13.530909 -0.228069 -0.723297 0.651787
-30.417343 4.189959 -12.137604 0.109700 0.993197 0.039056
-19.378708 5.351484 -11.407694 0.109700 0.993197 0.039056
-18.204386 5.424080 -9.217964 0.109700 0.993197 0.039056
-29.008156 3.972170 -3.378680 0.109700 0.993197 0.039056
--17.025297 5.061080 -9.217964 -0.145342 0.988063 0.051066
--28.298796 3.100986 -3.378680 -0.145342 0.988063 0.051066
--22.427179 3.681757 2.095648 -0.145342 0.988063 0.051066
-18.674114 4.915909 -12.259256 -0.013901 0.890984 -0.453822
--17.964754 4.335121 -12.259256 -0.013901 0.890984 -0.453822
--18.434486 4.770696 -11.407694 -0.013901 0.890984 -0.453822
-19.378708 5.351484 -11.407694 -0.013901 0.890984 -0.453822
--6.456389 1.721679 13.530909 -0.212262 0.000000 0.977213
--6.456389 1.503891 13.530909 -0.212262 0.000000 0.977213
-0.824412 1.140917 15.112381 -0.212262 0.000000 0.977213
--6.456389 1.503891 13.530909 -0.180719 -0.723860 0.665859
--2.463683 -12.361902 -0.459039 -0.180719 -0.723860 0.665859
-0.824412 1.140917 15.112381 -0.180719 -0.723860 0.665859
--18.434486 4.770696 -11.407694 -0.081853 0.868279 -0.489277
--17.964754 4.335121 -12.259256 -0.081853 0.868279 -0.489277
--29.473116 3.318773 -12.137604 -0.081853 0.868279 -0.489277
--28.533657 2.738008 -3.135377 -0.536667 -0.555152 0.635449
--9.039898 -0.093217 10.854572 -0.536667 -0.555152 0.635449
--22.427179 3.100990 2.338951 -0.536667 -0.555152 0.635449
--17.964754 4.335121 -12.259256 -0.080652 0.851162 -0.518670
--25.480419 2.955797 -13.354122 -0.080652 0.851162 -0.518670
--29.473116 3.318773 -12.137604 -0.080652 0.851162 -0.518670
-29.947615 3.826977 -11.894300 0.623018 -0.781324 0.037166
-30.417343 4.189959 -12.137604 0.623018 -0.781324 0.037166
-29.243021 3.681786 -3.135377 0.623018 -0.781324 0.037166
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-4 33 34 35 36
-3 37 38 39
-4 40 41 42 43
-4 44 45 46 47
-3 48 49 50
-3 51 52 53
-4 54 55 56 57
-3 58 59 60
-4 61 62 63 64
-4 65 66 67 68
-3 69 70 71
-3 72 73 74
-3 75 76 77
-3 78 79 80
-3 81 82 83
-4 84 85 86 87
-3 88 89 90
-3 91 92 93
-3 94 95 96
-3 97 98 99
-3 100 101 102
-4 103 104 105 106
-3 107 108 109
-3 110 111 112
-4 113 114 115 116
-4 117 118 119 120
-4 121 122 123 124
-3 125 126 127
-3 128 129 130
-3 131 132 133
-3 134 135 136
-3 137 138 139
-3 140 141 142
-3 143 144 145
-3 146 147 148
-4 149 150 151 152
-3 153 154 155
-4 156 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-3 171 172 173
-3 174 175 176
-3 177 178 179
-3 180 181 182
-3 183 184 185
-3 186 187 188
-3 189 190 191
-3 192 193 194
-4 195 196 197 198
-3 199 200 201
-4 202 203 204 205
-3 206 207 208
-3 209 210 211
-3 212 213 214
-3 215 216 217
-3 218 219 220
-3 221 222 223
diff --git a/src/examples/evas/resources/models/convex_hull/eagle_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/eagle_blender_ch_test.ply
deleted file mode 100644
index b1a2eec818..0000000000
--- a/src/examples/evas/resources/models/convex_hull/eagle_blender_ch_test.ply
+++ /dev/null
@@ -1,124 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 45
-property float x
-property float y
-property float z
-element face 69
-property list uchar uint vertex_indices
-end_header
-5.286846 -12.507089 -2.892074
-5.286847 -11.926323 -1.918860
-5.051982 -11.998919 -1.797208
--28.298796 3.100986 -3.378680
--28.533657 2.738008 -3.135377
--22.427179 3.681757 2.095648
--18.434486 4.770696 -11.407694
--29.473116 3.318773 -12.137604
--17.025297 5.061080 -9.217964
-29.008156 3.972170 -3.378680
-29.243021 3.681786 -3.135377
-30.417343 4.189959 -12.137604
-7.635484 1.503901 13.530909
-7.635484 1.721687 13.530909
-0.824412 1.140917 15.112381
-26.424646 3.826977 -13.354122
-18.674114 4.915909 -12.259256
-19.378708 5.351484 -11.407694
-18.204386 5.424080 -9.217964
-23.371405 4.335146 2.095648
--22.427179 3.100990 2.338951
-23.606272 3.681784 2.338951
--2.463683 -12.361902 -0.459039
-10.453859 -0.093205 10.854572
--25.480419 2.955797 -13.354122
-0.354687 -4.303767 -15.300550
--2.463684 -11.055178 -7.149884
--9.039898 -0.093217 10.854572
--8.335305 0.995720 11.949438
--17.964754 4.335121 -12.259256
-14.916283 5.351483 -7.149884
-15.620876 4.915908 4.285378
--2.698548 -13.087861 -1.432253
--13.972055 5.061082 -7.149884
--14.676649 4.552910 4.285378
--4.577465 -10.982584 -5.811715
-0.824414 -2.634064 -15.908808
--6.456389 1.721679 13.530909
-0.824415 -3.940788 -15.787157
-0.824415 -3.360022 -15.908808
--6.456389 1.503891 13.530909
-0.824416 -4.448958 -15.178898
-3.173064 -10.111429 -8.123098
-29.947615 3.826977 -11.894300
-5.756574 -9.821045 -7.149884
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 7 4 3
-3 9 18 19
-3 9 19 10
-3 4 20 5
-3 7 3 8
-3 19 21 10
-4 22 2 23 14
-4 1 10 23 2
-4 24 25 26 7
-3 27 28 20
-3 16 15 29
-4 18 30 31 19
-3 23 12 14
-4 32 0 2 22
-4 33 34 31 30
-3 26 35 7
-3 15 24 29
-3 10 21 23
-3 15 36 24
-3 13 37 14
-4 32 22 27 4
-3 21 12 23
-3 25 38 26
-3 36 39 24
-3 34 5 37
-3 30 18 33
-4 20 40 37 5
-3 39 38 24
-3 38 41 26
-4 21 19 13 12
-4 7 35 32 4
-4 38 15 11 42
-3 41 42 26
-3 18 8 33
-3 38 25 24
-3 39 15 38
-3 41 38 42
-3 13 31 37
-3 35 26 32
-3 19 31 13
-4 8 5 34 33
-3 39 36 15
-4 17 6 8 18
-3 31 34 37
-4 0 32 26 42
-4 0 43 10 1
-3 11 44 42
-3 20 28 40
-3 44 0 42
-3 11 43 44
-3 28 27 40
-3 43 0 44
-3 15 17 11
-3 27 22 40
-4 11 17 18 9
-3 8 3 5
-4 16 29 6 17
-3 37 40 14
-3 40 22 14
-3 6 29 7
-3 4 27 20
-3 29 24 7
-3 43 11 10
diff --git a/src/examples/evas/resources/models/convex_hull/home_blender_ch.obj b/src/examples/evas/resources/models/convex_hull/home_blender_ch.obj
deleted file mode 100644
index db2dadf85b..0000000000
--- a/src/examples/evas/resources/models/convex_hull/home_blender_ch.obj
+++ /dev/null
@@ -1,40 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: ''
-# www.blender.org
-mtllib home_blender_ch.mtl
-o home_blender_ch
-v -0.999998 -1.000002 2.000002
-v 0.000002 -1.000000 3.075149
-v -0.000002 1.000000 3.075149
-v -1.000002 0.999998 2.000002
-v 0.999998 1.000002 0.000002
-v 0.999997 1.000003 2.000002
-v 1.000002 -0.999998 2.000002
-v 1.000003 -0.999997 0.000002
-v 0.662209 -0.629904 2.991038
-v 0.662208 -0.307612 2.991038
-v -0.999997 -1.000003 0.000002
-v -1.000002 0.999998 0.000002
-vn -0.732233 -0.000002 0.681054
-vn 1.000000 0.000002 0.000000
-vn 0.000000 0.000000 -1.000000
-vn -1.000000 -0.000002 -0.000000
-vn 0.946528 0.000002 0.322622
-vn 0.000002 -1.000000 -0.000000
-vn -0.000002 1.000000 0.000000
-vn 0.126003 0.000000 0.992030
-vn 0.695965 0.310817 0.647321
-vn 0.479195 -0.756123 0.445701
-vn 0.126008 0.000000 0.992029
-usemtl None
-s off
-f 1//1 2//1 3//1 4//1
-f 5//2 6//2 7//2 8//2
-f 11//3 12//3 5//3 8//3
-f 1//4 4//4 12//4 11//4
-f 9//5 7//5 6//5 10//5
-f 8//6 7//6 2//6 1//6 11//6
-f 12//7 4//7 3//7 6//7 5//7
-f 9//8 3//8 2//8
-f 3//9 10//9 6//9
-f 9//10 2//10 7//10
-f 9//11 10//11 3//11
diff --git a/src/examples/evas/resources/models/convex_hull/home_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/home_blender_ch_test.ply
deleted file mode 100644
index 101f6d776e..0000000000
--- a/src/examples/evas/resources/models/convex_hull/home_blender_ch_test.ply
+++ /dev/null
@@ -1,35 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 12
-property float x
-property float y
-property float z
-element face 13
-property list uchar uint vertex_indices
-end_header
--0.000002 3.075149 -1.000000
-0.000002 3.075149 1.000000
-1.000002 2.000002 0.999998
-0.999998 2.000002 -1.000002
-0.999997 0.000002 -1.000003
--1.000002 2.000002 -0.999998
--0.662208 2.991038 -0.307612
--0.999997 2.000002 1.000003
-1.000002 0.000002 0.999998
--0.999998 0.000002 1.000002
--0.662209 2.991038 -0.629904
--1.000003 0.000002 -0.999997
-4 0 1 2 3
-4 4 5 0 3
-3 1 6 7
-4 8 2 7 9
-4 5 7 6 10
-4 4 3 2 8
-3 10 0 5
-3 0 10 6
-4 9 11 4 8
-4 11 9 7 5
-3 2 1 7
-3 6 1 0
-3 4 11 5
diff --git a/src/examples/evas/resources/models/convex_hull/plain.ply b/src/examples/evas/resources/models/convex_hull/plain.ply
deleted file mode 100644
index 6883352be1..0000000000
--- a/src/examples/evas/resources/models/convex_hull/plain.ply
+++ /dev/null
@@ -1,846 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 437
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 396
-property list uchar uint vertex_indices
-end_header
-0.898889 0.909091 0.000000 0.000000 0.000000 1.000000
-1.010000 0.909091 0.000000 0.000000 0.000000 1.000000
-1.010000 1.000000 0.000000 0.000000 0.000000 1.000000
-0.898889 1.000000 0.000000 0.000000 0.000000 1.000000
-0.898889 -1.000000 0.000000 0.000000 0.000000 1.000000
-1.010000 -1.000000 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.909091 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.818182 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.727273 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.636364 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.545455 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.454545 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.363636 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.272727 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.181818 0.000000 0.000000 0.000000 1.000000
-1.010000 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.898889 -0.090909 0.000000 0.000000 0.000000 1.000000
-1.010000 0.000000 0.000000 0.000000 0.000000 1.000000
-0.898889 0.000000 0.000000 0.000000 0.000000 1.000000
-1.010000 0.090909 0.000000 0.000000 0.000000 1.000000
-0.898889 0.090909 0.000000 0.000000 0.000000 1.000000
-1.010000 0.181818 0.000000 0.000000 0.000000 1.000000
-0.898889 0.181818 0.000000 0.000000 0.000000 1.000000
-1.010000 0.272727 0.000000 0.000000 0.000000 1.000000
-0.898889 0.272727 0.000000 0.000000 0.000000 1.000000
-1.010000 0.363636 0.000000 0.000000 0.000000 1.000000
-0.898889 0.363636 0.000000 0.000000 0.000000 1.000000
-1.010000 0.454545 0.000000 0.000000 0.000000 1.000000
-0.898889 0.454545 0.000000 0.000000 0.000000 1.000000
-1.010000 0.545455 0.000000 0.000000 0.000000 1.000000
-0.898889 0.545455 0.000000 0.000000 0.000000 1.000000
-1.010000 0.636364 0.000000 0.000000 0.000000 1.000000
-0.898889 0.636364 0.000000 0.000000 0.000000 1.000000
-1.010000 0.727273 0.000000 0.000000 0.000000 1.000000
-0.898889 0.727273 0.000000 0.000000 0.000000 1.000000
-1.010000 0.818182 0.000000 0.000000 0.000000 1.000000
-0.898889 0.818182 0.000000 0.000000 0.000000 1.000000
--0.990000 0.909091 0.000000 0.000000 0.000000 1.000000
--0.878889 0.909091 0.000000 0.000000 0.000000 1.000000
--0.878889 1.000000 0.000000 0.000000 0.000000 1.000000
--0.990000 1.000000 0.000000 0.000000 0.000000 1.000000
--0.767778 0.909091 0.000000 0.000000 0.000000 1.000000
--0.767778 1.000000 0.000000 0.000000 0.000000 1.000000
--0.656667 0.909091 0.000000 0.000000 0.000000 1.000000
--0.656667 1.000000 0.000000 0.000000 0.000000 1.000000
--0.545556 0.909091 0.000000 0.000000 0.000000 1.000000
--0.545556 1.000000 0.000000 0.000000 0.000000 1.000000
--0.434444 0.909091 0.000000 0.000000 0.000000 1.000000
--0.434444 1.000000 0.000000 0.000000 0.000000 1.000000
--0.323333 0.909091 0.000000 0.000000 0.000000 1.000000
--0.323333 1.000000 0.000000 0.000000 0.000000 1.000000
--0.212222 0.909091 0.000000 0.000000 0.000000 1.000000
--0.212222 1.000000 0.000000 0.000000 0.000000 1.000000
--0.101111 0.909091 0.000000 0.000000 0.000000 1.000000
--0.101111 1.000000 0.000000 0.000000 0.000000 1.000000
-0.010000 0.909091 0.000000 0.000000 0.000000 1.000000
-0.010000 1.000000 0.000000 0.000000 0.000000 1.000000
-0.121111 0.909091 0.000000 0.000000 0.000000 1.000000
-0.121111 1.000000 0.000000 0.000000 0.000000 1.000000
-0.232222 0.909091 0.000000 0.000000 0.000000 1.000000
-0.232222 1.000000 0.000000 0.000000 0.000000 1.000000
-0.343333 0.909091 0.000000 0.000000 0.000000 1.000000
-0.343333 1.000000 0.000000 0.000000 0.000000 1.000000
-0.454444 0.909091 0.000000 0.000000 0.000000 1.000000
-0.454444 1.000000 0.000000 0.000000 0.000000 1.000000
-0.565556 0.909091 0.000000 0.000000 0.000000 1.000000
-0.565556 1.000000 0.000000 0.000000 0.000000 1.000000
-0.676667 0.909091 0.000000 0.000000 0.000000 1.000000
-0.676667 1.000000 0.000000 0.000000 0.000000 1.000000
-0.787778 0.909091 0.000000 0.000000 0.000000 1.000000
-0.787778 1.000000 0.000000 0.000000 0.000000 1.000000
--0.990000 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.878889 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.767778 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.656667 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.545556 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.434444 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.323333 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.212222 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.101111 -1.000000 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.010000 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.121111 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.232222 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.343333 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.454444 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.565556 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.676667 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.909091 0.000000 0.000000 0.000000 1.000000
-0.787778 -1.000000 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.909091 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.818182 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.818182 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.727273 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.727273 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.636364 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.636364 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.545455 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.545455 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.454545 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.454545 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.363636 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.363636 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.272727 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.272727 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.181818 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.181818 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.010000 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.121111 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.232222 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.343333 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.454444 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.565556 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.676667 -0.090909 0.000000 0.000000 0.000000 1.000000
-0.787778 -0.090909 0.000000 0.000000 0.000000 1.000000
--0.878889 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.990000 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.767778 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.656667 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.545556 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.434444 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.323333 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.212222 -0.000000 0.000000 0.000000 0.000000 1.000000
--0.101111 -0.000000 0.000000 0.000000 0.000000 1.000000
-0.010000 0.000000 0.000000 0.000000 0.000000 1.000000
-0.121111 0.000000 0.000000 0.000000 0.000000 1.000000
-0.232222 0.000000 0.000000 0.000000 0.000000 1.000000
-0.343333 0.000000 0.000000 0.000000 0.000000 1.000000
-0.454444 0.000000 0.000000 0.000000 0.000000 1.000000
-0.565556 0.000000 0.000000 0.000000 0.000000 1.000000
-0.676667 0.000000 0.000000 0.000000 0.000000 1.000000
-0.787778 0.000000 0.000000 0.000000 0.000000 1.000000
--0.878889 0.090909 0.000000 0.000000 0.000000 1.000000
--0.990000 0.090909 0.000000 0.000000 0.000000 1.000000
--0.767778 0.090909 0.000000 0.000000 0.000000 1.000000
--0.656667 0.090909 0.000000 0.000000 0.000000 1.000000
--0.545556 0.090909 0.000000 0.000000 0.000000 1.000000
--0.434444 0.090909 0.000000 0.000000 0.000000 1.000000
--0.323333 0.090909 0.000000 0.000000 0.000000 1.000000
--0.212222 0.090909 0.000000 0.000000 0.000000 1.000000
--0.101111 0.090909 0.000000 0.000000 0.000000 1.000000
-0.010000 0.090909 0.000000 0.000000 0.000000 1.000000
-0.121111 0.090909 0.000000 0.000000 0.000000 1.000000
-0.232222 0.090909 0.000000 0.000000 0.000000 1.000000
-0.343333 0.090909 0.000000 0.000000 0.000000 1.000000
-0.454444 0.090909 0.000000 0.000000 0.000000 1.000000
-0.565556 0.090909 0.000000 0.000000 0.000000 1.000000
-0.676667 0.090909 0.000000 0.000000 0.000000 1.000000
-0.787778 0.090909 0.000000 0.000000 0.000000 1.000000
--0.878889 0.181818 0.000000 0.000000 0.000000 1.000000
--0.990000 0.181818 0.000000 0.000000 0.000000 1.000000
--0.767778 0.181818 0.000000 0.000000 0.000000 1.000000
--0.656667 0.181818 0.000000 0.000000 0.000000 1.000000
--0.545556 0.181818 0.000000 0.000000 0.000000 1.000000
--0.434444 0.181818 0.000000 0.000000 0.000000 1.000000
--0.323333 0.181818 0.000000 0.000000 0.000000 1.000000
--0.212222 0.181818 0.000000 0.000000 0.000000 1.000000
--0.101111 0.181818 0.000000 0.000000 0.000000 1.000000
-0.010000 0.181818 0.000000 0.000000 0.000000 1.000000
-0.121111 0.181818 0.000000 0.000000 0.000000 1.000000
-0.232222 0.181818 0.000000 0.000000 0.000000 1.000000
-0.343333 0.181818 0.000000 0.000000 0.000000 1.000000
-0.454444 0.181818 0.000000 0.000000 0.000000 1.000000
-0.565556 0.181818 0.000000 0.000000 0.000000 1.000000
-0.676667 0.181818 0.000000 0.000000 0.000000 1.000000
-0.787778 0.181818 0.000000 0.000000 0.000000 1.000000
--0.878889 0.272727 0.000000 0.000000 0.000000 1.000000
--0.990000 0.272727 0.000000 0.000000 0.000000 1.000000
--0.767778 0.272727 0.000000 0.000000 0.000000 1.000000
--0.656667 0.272727 0.000000 0.000000 0.000000 1.000000
--0.545556 0.272727 0.000000 0.000000 0.000000 1.000000
--0.434444 0.272727 0.000000 0.000000 0.000000 1.000000
--0.323333 0.272727 0.000000 0.000000 0.000000 1.000000
--0.212222 0.272727 0.000000 0.000000 0.000000 1.000000
--0.101111 0.272727 0.000000 0.000000 0.000000 1.000000
-0.010000 0.272727 0.000000 0.000000 0.000000 1.000000
-0.121111 0.272727 0.000000 0.000000 0.000000 1.000000
-0.232222 0.272727 0.000000 0.000000 0.000000 1.000000
-0.343333 0.272727 0.000000 0.000000 0.000000 1.000000
-0.454444 0.272727 0.000000 0.000000 0.000000 1.000000
-0.565556 0.272727 0.000000 0.000000 0.000000 1.000000
-0.676667 0.272727 0.000000 0.000000 0.000000 1.000000
-0.787778 0.272727 0.000000 0.000000 0.000000 1.000000
--0.878889 0.363636 0.000000 0.000000 0.000000 1.000000
--0.990000 0.363636 0.000000 0.000000 0.000000 1.000000
--0.767778 0.363636 0.000000 0.000000 0.000000 1.000000
--0.656667 0.363636 0.000000 0.000000 0.000000 1.000000
--0.545556 0.363636 0.000000 0.000000 0.000000 1.000000
--0.434444 0.363636 0.000000 0.000000 0.000000 1.000000
--0.323333 0.363636 0.000000 0.000000 0.000000 1.000000
--0.212222 0.363636 0.000000 0.000000 0.000000 1.000000
--0.101111 0.363636 0.000000 0.000000 0.000000 1.000000
-0.010000 0.363636 0.000000 0.000000 0.000000 1.000000
-0.121111 0.363636 0.000000 0.000000 0.000000 1.000000
-0.232222 0.363636 0.000000 0.000000 0.000000 1.000000
-0.343333 0.363636 0.000000 0.000000 0.000000 1.000000
-0.454444 0.363636 0.000000 0.000000 0.000000 1.000000
-0.565556 0.363636 0.000000 0.000000 0.000000 1.000000
-0.676667 0.363636 0.000000 0.000000 0.000000 1.000000
-0.787778 0.363636 0.000000 0.000000 0.000000 1.000000
--0.878889 0.454545 0.000000 0.000000 0.000000 1.000000
--0.990000 0.454545 0.000000 0.000000 0.000000 1.000000
--0.767778 0.454545 0.000000 0.000000 0.000000 1.000000
--0.656667 0.454545 0.000000 0.000000 0.000000 1.000000
--0.545556 0.454545 0.000000 0.000000 0.000000 1.000000
--0.434444 0.454545 0.000000 0.000000 0.000000 1.000000
--0.323333 0.454545 0.000000 0.000000 0.000000 1.000000
--0.212222 0.454545 0.000000 0.000000 0.000000 1.000000
--0.101111 0.454545 0.000000 0.000000 0.000000 1.000000
-0.010000 0.454545 0.000000 0.000000 0.000000 1.000000
-0.121111 0.454545 0.000000 0.000000 0.000000 1.000000
-0.232222 0.454545 0.000000 0.000000 0.000000 1.000000
-0.343333 0.454545 0.000000 0.000000 0.000000 1.000000
-0.454444 0.454545 0.000000 0.000000 0.000000 1.000000
-0.565556 0.454545 0.000000 0.000000 0.000000 1.000000
-0.676667 0.454545 0.000000 0.000000 0.000000 1.000000
-0.787778 0.454545 0.000000 0.000000 0.000000 1.000000
--0.878889 0.545455 0.000000 0.000000 0.000000 1.000000
--0.990000 0.545455 0.000000 0.000000 0.000000 1.000000
--0.767778 0.545455 0.000000 0.000000 0.000000 1.000000
--0.656667 0.545455 0.000000 0.000000 0.000000 1.000000
--0.545556 0.545455 0.000000 0.000000 0.000000 1.000000
--0.434444 0.545455 0.000000 0.000000 0.000000 1.000000
--0.323333 0.545455 0.000000 0.000000 0.000000 1.000000
--0.212222 0.545455 0.000000 0.000000 0.000000 1.000000
--0.101111 0.545455 0.000000 0.000000 0.000000 1.000000
-0.010000 0.545455 0.000000 0.000000 0.000000 1.000000
-0.121111 0.545455 0.000000 0.000000 0.000000 1.000000
-0.232222 0.545455 0.000000 0.000000 0.000000 1.000000
-0.343333 0.545455 0.000000 0.000000 0.000000 1.000000
-0.454444 0.545455 0.000000 0.000000 0.000000 1.000000
-0.565556 0.545455 0.000000 0.000000 0.000000 1.000000
-0.676667 0.545455 0.000000 0.000000 0.000000 1.000000
-0.787778 0.545455 0.000000 0.000000 0.000000 1.000000
--0.878889 0.636364 0.000000 0.000000 0.000000 1.000000
--0.990000 0.636364 0.000000 0.000000 0.000000 1.000000
--0.767778 0.636364 0.000000 0.000000 0.000000 1.000000
--0.656667 0.636364 0.000000 0.000000 0.000000 1.000000
--0.545556 0.636364 0.000000 0.000000 0.000000 1.000000
--0.434444 0.636364 0.000000 0.000000 0.000000 1.000000
--0.323333 0.636364 0.000000 0.000000 0.000000 1.000000
--0.212222 0.636364 0.000000 0.000000 0.000000 1.000000
--0.101111 0.636364 0.000000 0.000000 0.000000 1.000000
-0.010000 0.636364 0.000000 0.000000 0.000000 1.000000
-0.121111 0.636364 0.000000 0.000000 0.000000 1.000000
-0.232222 0.636364 0.000000 0.000000 0.000000 1.000000
-0.343333 0.636364 0.000000 0.000000 0.000000 1.000000
-0.454444 0.636364 0.000000 0.000000 0.000000 1.000000
-0.565556 0.636364 0.000000 0.000000 0.000000 1.000000
-0.676667 0.636364 0.000000 0.000000 0.000000 1.000000
-0.787778 0.636364 0.000000 0.000000 0.000000 1.000000
--0.878889 0.727273 0.000000 0.000000 0.000000 1.000000
--0.990000 0.727273 0.000000 0.000000 0.000000 1.000000
--0.767778 0.727273 0.000000 0.000000 0.000000 1.000000
--0.656667 0.727273 0.000000 0.000000 0.000000 1.000000
--0.545556 0.727273 0.000000 0.000000 0.000000 1.000000
--0.434444 0.727273 0.000000 0.000000 0.000000 1.000000
--0.323333 0.727273 0.000000 0.000000 0.000000 1.000000
--0.212222 0.727273 0.000000 0.000000 0.000000 1.000000
--0.101111 0.727273 0.000000 0.000000 0.000000 1.000000
-0.010000 0.727273 0.000000 0.000000 0.000000 1.000000
-0.121111 0.727273 0.000000 0.000000 0.000000 1.000000
-0.232222 0.727273 0.000000 0.000000 0.000000 1.000000
-0.343333 0.727273 0.000000 0.000000 0.000000 1.000000
-0.454444 0.727273 0.000000 0.000000 0.000000 1.000000
-0.565556 0.727273 0.000000 0.000000 0.000000 1.000000
-0.676667 0.727273 0.000000 0.000000 0.000000 1.000000
-0.787778 0.727273 0.000000 0.000000 0.000000 1.000000
--0.878889 0.818182 0.000000 0.000000 0.000000 1.000000
--0.990000 0.818182 0.000000 0.000000 0.000000 1.000000
--0.767778 0.818182 0.000000 0.000000 0.000000 1.000000
--0.656667 0.818182 0.000000 0.000000 0.000000 1.000000
--0.545556 0.818182 0.000000 0.000000 0.000000 1.000000
--0.434444 0.818182 0.000000 0.000000 0.000000 1.000000
--0.323333 0.818182 0.000000 0.000000 0.000000 1.000000
--0.212222 0.818182 0.000000 0.000000 0.000000 1.000000
--0.101111 0.818182 0.000000 0.000000 0.000000 1.000000
-0.010000 0.818182 0.000000 0.000000 0.000000 1.000000
-0.121111 0.818182 0.000000 0.000000 0.000000 1.000000
-0.232222 0.818182 0.000000 0.000000 0.000000 1.000000
-0.343333 0.818182 0.000000 0.000000 0.000000 1.000000
-0.454444 0.818182 0.000000 0.000000 0.000000 1.000000
-0.565556 0.818182 0.000000 0.000000 0.000000 1.000000
-0.676667 0.818182 0.000000 0.000000 0.000000 1.000000
-0.787778 0.818182 0.000000 0.000000 0.000000 1.000000
-4 0 1 2 3
-4 4 5 6 7
-4 7 6 8 9
-4 9 8 10 11
-4 11 10 12 13
-4 13 12 14 15
-4 15 14 16 17
-4 17 16 18 19
-4 19 18 20 21
-4 21 20 22 23
-4 23 22 24 25
-4 25 24 26 27
-4 27 26 28 29
-4 29 28 30 31
-4 31 30 32 33
-4 33 32 34 35
-4 35 34 36 37
-4 37 36 38 39
-4 39 38 40 41
-4 41 40 42 43
-4 43 42 44 45
-4 45 44 1 0
-4 46 47 48 49
-4 47 50 51 48
-4 50 52 53 51
-4 52 54 55 53
-4 54 56 57 55
-4 56 58 59 57
-4 58 60 61 59
-4 60 62 63 61
-4 62 64 65 63
-4 64 66 67 65
-4 66 68 69 67
-4 68 70 71 69
-4 70 72 73 71
-4 72 74 75 73
-4 74 76 77 75
-4 76 78 79 77
-4 78 0 3 79
-4 80 81 82 83
-4 81 84 85 82
-4 84 86 87 85
-4 86 88 89 87
-4 88 90 91 89
-4 90 92 93 91
-4 92 94 95 93
-4 94 96 97 95
-4 96 98 99 97
-4 98 100 101 99
-4 100 102 103 101
-4 102 104 105 103
-4 104 106 107 105
-4 106 108 109 107
-4 108 110 111 109
-4 110 112 113 111
-4 112 4 7 113
-4 83 82 114 115
-4 82 85 116 114
-4 85 87 117 116
-4 87 89 118 117
-4 89 91 119 118
-4 91 93 120 119
-4 93 95 121 120
-4 95 97 122 121
-4 97 99 123 122
-4 99 101 124 123
-4 101 103 125 124
-4 103 105 126 125
-4 105 107 127 126
-4 107 109 128 127
-4 109 111 129 128
-4 111 113 130 129
-4 113 7 9 130
-4 115 114 131 132
-4 114 116 133 131
-4 116 117 134 133
-4 117 118 135 134
-4 118 119 136 135
-4 119 120 137 136
-4 120 121 138 137
-4 121 122 139 138
-4 122 123 140 139
-4 123 124 141 140
-4 124 125 142 141
-4 125 126 143 142
-4 126 127 144 143
-4 127 128 145 144
-4 128 129 146 145
-4 129 130 147 146
-4 130 9 11 147
-4 132 131 148 149
-4 131 133 150 148
-4 133 134 151 150
-4 134 135 152 151
-4 135 136 153 152
-4 136 137 154 153
-4 137 138 155 154
-4 138 139 156 155
-4 139 140 157 156
-4 140 141 158 157
-4 141 142 159 158
-4 142 143 160 159
-4 143 144 161 160
-4 144 145 162 161
-4 145 146 163 162
-4 146 147 164 163
-4 147 11 13 164
-4 149 148 165 166
-4 148 150 167 165
-4 150 151 168 167
-4 151 152 169 168
-4 152 153 170 169
-4 153 154 171 170
-4 154 155 172 171
-4 155 156 173 172
-4 156 157 174 173
-4 157 158 175 174
-4 158 159 176 175
-4 159 160 177 176
-4 160 161 178 177
-4 161 162 179 178
-4 162 163 180 179
-4 163 164 181 180
-4 164 13 15 181
-4 166 165 182 183
-4 165 167 184 182
-4 167 168 185 184
-4 168 169 186 185
-4 169 170 187 186
-4 170 171 188 187
-4 171 172 189 188
-4 172 173 190 189
-4 173 174 191 190
-4 174 175 192 191
-4 175 176 193 192
-4 176 177 194 193
-4 177 178 195 194
-4 178 179 196 195
-4 179 180 197 196
-4 180 181 198 197
-4 181 15 17 198
-4 183 182 199 200
-4 182 184 201 199
-4 184 185 202 201
-4 185 186 203 202
-4 186 187 204 203
-4 187 188 205 204
-4 188 189 206 205
-4 189 190 207 206
-4 190 191 208 207
-4 191 192 209 208
-4 192 193 210 209
-4 193 194 211 210
-4 194 195 212 211
-4 195 196 213 212
-4 196 197 214 213
-4 197 198 215 214
-4 198 17 19 215
-4 200 199 216 217
-4 199 201 218 216
-4 201 202 219 218
-4 202 203 220 219
-4 203 204 221 220
-4 204 205 222 221
-4 205 206 223 222
-4 206 207 224 223
-4 207 208 225 224
-4 208 209 226 225
-4 209 210 227 226
-4 210 211 228 227
-4 211 212 229 228
-4 212 213 230 229
-4 213 214 231 230
-4 214 215 232 231
-4 215 19 21 232
-4 217 216 233 234
-4 216 218 235 233
-4 218 219 236 235
-4 219 220 237 236
-4 220 221 238 237
-4 221 222 239 238
-4 222 223 240 239
-4 223 224 241 240
-4 224 225 242 241
-4 225 226 243 242
-4 226 227 244 243
-4 227 228 245 244
-4 228 229 246 245
-4 229 230 247 246
-4 230 231 248 247
-4 231 232 249 248
-4 232 21 23 249
-4 234 233 250 251
-4 233 235 252 250
-4 235 236 253 252
-4 236 237 254 253
-4 237 238 255 254
-4 238 239 256 255
-4 239 240 257 256
-4 240 241 258 257
-4 241 242 259 258
-4 242 243 260 259
-4 243 244 261 260
-4 244 245 262 261
-4 245 246 263 262
-4 246 247 264 263
-4 247 248 265 264
-4 248 249 266 265
-4 249 23 25 266
-4 251 250 267 268
-4 250 252 269 267
-4 252 253 270 269
-4 253 254 271 270
-4 254 255 272 271
-4 255 256 273 272
-4 256 257 274 273
-4 257 258 275 274
-4 258 259 276 275
-4 259 260 277 276
-4 260 261 278 277
-4 261 262 279 278
-4 262 263 280 279
-4 263 264 281 280
-4 264 265 282 281
-4 265 266 283 282
-4 266 25 27 283
-4 268 267 284 285
-4 267 269 286 284
-4 269 270 287 286
-4 270 271 288 287
-4 271 272 289 288
-4 272 273 290 289
-4 273 274 291 290
-4 274 275 292 291
-4 275 276 293 292
-4 276 277 294 293
-4 277 278 295 294
-4 278 279 296 295
-4 279 280 297 296
-4 280 281 298 297
-4 281 282 299 298
-4 282 283 300 299
-4 283 27 29 300
-4 285 284 301 302
-4 284 286 303 301
-4 286 287 304 303
-4 287 288 305 304
-4 288 289 306 305
-4 289 290 307 306
-4 290 291 308 307
-4 291 292 309 308
-4 292 293 310 309
-4 293 294 311 310
-4 294 295 312 311
-4 295 296 313 312
-4 296 297 314 313
-4 297 298 315 314
-4 298 299 316 315
-4 299 300 317 316
-4 300 29 31 317
-4 302 301 318 319
-4 301 303 320 318
-4 303 304 321 320
-4 304 305 322 321
-4 305 306 323 322
-4 306 307 324 323
-4 307 308 325 324
-4 308 309 326 325
-4 309 310 327 326
-4 310 311 328 327
-4 311 312 329 328
-4 312 313 330 329
-4 313 314 331 330
-4 314 315 332 331
-4 315 316 333 332
-4 316 317 334 333
-4 317 31 33 334
-4 319 318 335 336
-4 318 320 337 335
-4 320 321 338 337
-4 321 322 339 338
-4 322 323 340 339
-4 323 324 341 340
-4 324 325 342 341
-4 325 326 343 342
-4 326 327 344 343
-4 327 328 345 344
-4 328 329 346 345
-4 329 330 347 346
-4 330 331 348 347
-4 331 332 349 348
-4 332 333 350 349
-4 333 334 351 350
-4 334 33 35 351
-4 336 335 352 353
-4 335 337 354 352
-4 337 338 355 354
-4 338 339 356 355
-4 339 340 357 356
-4 340 341 358 357
-4 341 342 359 358
-4 342 343 360 359
-4 343 344 361 360
-4 344 345 362 361
-4 345 346 363 362
-4 346 347 364 363
-4 347 348 365 364
-4 348 349 366 365
-4 349 350 367 366
-4 350 351 368 367
-4 351 35 37 368
-4 353 352 369 370
-4 352 354 371 369
-4 354 355 372 371
-4 355 356 373 372
-4 356 357 374 373
-4 357 358 375 374
-4 358 359 376 375
-4 359 360 377 376
-4 360 361 378 377
-4 361 362 379 378
-4 362 363 380 379
-4 363 364 381 380
-4 364 365 382 381
-4 365 366 383 382
-4 366 367 384 383
-4 367 368 385 384
-4 368 37 39 385
-4 370 369 386 387
-4 369 371 388 386
-4 371 372 389 388
-4 372 373 390 389
-4 373 374 391 390
-4 374 375 392 391
-4 375 376 393 392
-4 376 377 394 393
-4 377 378 395 394
-4 378 379 396 395
-4 379 380 397 396
-4 380 381 398 397
-4 381 382 399 398
-4 382 383 400 399
-4 383 384 401 400
-4 384 385 402 401
-4 385 39 41 402
-4 387 386 403 404
-4 386 388 405 403
-4 388 389 406 405
-4 389 390 407 406
-4 390 391 408 407
-4 391 392 409 408
-4 392 393 410 409
-4 393 394 411 410
-4 394 395 412 411
-4 395 396 413 412
-4 396 397 414 413
-4 397 398 415 414
-4 398 399 416 415
-4 399 400 417 416
-4 400 401 418 417
-4 401 402 419 418
-4 402 41 43 419
-4 404 403 420 421
-4 403 405 422 420
-4 405 406 423 422
-4 406 407 424 423
-4 407 408 425 424
-4 408 409 426 425
-4 409 410 427 426
-4 410 411 428 427
-4 411 412 429 428
-4 412 413 430 429
-4 413 414 431 430
-4 414 415 432 431
-4 415 416 433 432
-4 416 417 434 433
-4 417 418 435 434
-4 418 419 436 435
-4 419 43 45 436
-4 421 420 47 46
-4 420 422 50 47
-4 422 423 52 50
-4 423 424 54 52
-4 424 425 56 54
-4 425 426 58 56
-4 426 427 60 58
-4 427 428 62 60
-4 428 429 64 62
-4 429 430 66 64
-4 430 431 68 66
-4 431 432 70 68
-4 432 433 72 70
-4 433 434 74 72
-4 434 435 76 74
-4 435 436 78 76
-4 436 45 0 78
diff --git a/src/examples/evas/resources/models/convex_hull/plain_blender_ch.ply b/src/examples/evas/resources/models/convex_hull/plain_blender_ch.ply
deleted file mode 100644
index 5baf0b5191..0000000000
--- a/src/examples/evas/resources/models/convex_hull/plain_blender_ch.ply
+++ /dev/null
@@ -1,18 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 4
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 1
-property list uchar uint vertex_indices
-end_header
-1.010000 -1.000000 0.000000 -0.000000 0.000000 1.000000
-1.010000 1.000000 0.000000 -0.000000 0.000000 1.000000
--0.990000 1.000000 0.000000 -0.000000 0.000000 1.000000
--0.990000 -1.000000 0.000000 -0.000000 0.000000 1.000000
-4 0 1 2 3
diff --git a/src/examples/evas/resources/models/convex_hull/plain_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/plain_blender_ch_test.ply
deleted file mode 100644
index 998d622ddf..0000000000
--- a/src/examples/evas/resources/models/convex_hull/plain_blender_ch_test.ply
+++ /dev/null
@@ -1,15 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 4
-property float x
-property float y
-property float z
-element face 1
-property list uchar uint vertex_indices
-end_header
-1.010000 -1.000000 0.000000
-1.010000 1.000000 0.000000
--0.990000 1.000000 0.000000
--0.990000 -1.000000 0.000000
-4 0 1 2 3
diff --git a/src/examples/evas/resources/models/convex_hull/sonic_blender_ch.ply b/src/examples/evas/resources/models/convex_hull/sonic_blender_ch.ply
deleted file mode 100644
index aede0473ea..0000000000
--- a/src/examples/evas/resources/models/convex_hull/sonic_blender_ch.ply
+++ /dev/null
@@ -1,659 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 493
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 153
-property list uchar uint vertex_indices
-end_header
--7.648584 -5.354379 40.099701 -0.057946 -0.137793 0.988764
--4.763044 -5.435272 40.257534 -0.057946 -0.137793 0.988764
--7.648587 -4.221783 40.257538 -0.057946 -0.137793 0.988764
--4.763049 -3.170080 40.257534 -0.063522 0.174286 0.982644
--7.648588 -3.331884 40.099701 -0.063522 0.174286 0.982644
--7.648587 -4.221783 40.257538 -0.063522 0.174286 0.982644
--12.727139 -3.655493 38.837002 -0.322410 0.292719 0.900204
--12.727139 -4.140892 38.994839 -0.322410 0.292719 0.900204
--10.303285 -3.412790 39.626190 -0.322410 0.292719 0.900204
--10.303285 -3.412790 39.626190 -0.298863 0.182739 0.936636
--12.727139 -4.140892 38.994839 -0.298863 0.182739 0.936636
--10.303284 -4.221786 39.784027 -0.298863 0.182739 0.936636
--10.303284 -4.221786 39.784027 -0.309595 -0.000001 0.950868
--12.727139 -4.140892 38.994839 -0.309595 -0.000001 0.950868
--12.727138 -4.707191 38.994839 -0.309595 -0.000001 0.950868
--12.727139 -4.140892 38.994839 -0.524088 -0.000002 0.851664
--15.035570 -4.221796 37.574303 -0.524088 -0.000002 0.851664
--12.727138 -4.707191 38.994839 -0.524088 -0.000002 0.851664
--12.727138 -4.707191 38.994839 -0.545123 -0.259248 0.797265
--15.035570 -4.221796 37.574303 -0.545123 -0.259248 0.797265
--12.727137 -5.192589 38.837002 -0.545123 -0.259248 0.797265
--15.035570 -4.221796 37.574303 -0.511996 0.265626 0.816886
--12.727139 -4.140892 38.994839 -0.511996 0.265626 0.816886
--12.727139 -3.655493 38.837002 -0.511996 0.265626 0.816886
--10.303284 -4.221786 39.784027 -0.280529 -0.142457 0.949215
--12.727138 -4.707191 38.994839 -0.280529 -0.142457 0.949215
--10.303282 -5.273483 39.626190 -0.280529 -0.142457 0.949215
--10.303282 -5.273483 39.626190 -0.304736 -0.294525 0.905754
--12.727138 -4.707191 38.994839 -0.304736 -0.294525 0.905754
--12.727137 -5.192589 38.837002 -0.304736 -0.294525 0.905754
--6.378932 -13.444347 33.786201 -0.043490 -0.992833 0.111317
--7.994836 -13.444351 33.154854 -0.043490 -0.992833 0.111317
--7.533150 -13.606150 31.892155 -0.043490 -0.992833 0.111317
--7.533150 -13.606150 31.892155 -0.047754 -0.992811 0.109755
--7.994836 -13.444351 33.154854 -0.047754 -0.992811 0.109755
--10.072424 -13.606153 30.787292 -0.047754 -0.992811 0.109755
--7.994836 -13.444351 33.154854 -0.071092 -0.988966 0.129972
--10.303267 -13.444355 31.892155 -0.071092 -0.988966 0.129972
--10.072424 -13.606153 30.787292 -0.071092 -0.988966 0.129972
--10.072424 -13.606153 30.787292 -0.078937 -0.988592 0.128278
--10.303267 -13.444355 31.892155 -0.078937 -0.988592 0.128278
--12.611699 -13.444359 30.471617 -0.078937 -0.988592 0.128278
--8.571943 -13.201653 33.944042 -0.103926 -0.630162 0.769477
--6.840620 -12.716251 34.575394 -0.103926 -0.630162 0.769477
--7.071465 -11.907255 35.206741 -0.103926 -0.630162 0.769477
--12.611733 4.434479 30.471617 -0.131789 0.990257 0.044973
--10.303303 4.677183 31.892155 -0.131789 0.990257 0.044973
--10.072460 4.758083 30.787292 -0.131789 0.990257 0.044973
--10.303303 4.677183 31.892155 -0.035845 0.997207 0.065528
--7.994871 4.677187 33.154854 -0.035845 0.997207 0.065528
--10.072460 4.758083 30.787292 -0.035845 0.997207 0.065528
--10.072460 4.758083 30.787292 -0.024009 0.998188 0.055175
--7.994871 4.677187 33.154854 -0.024009 0.998188 0.055175
--7.533185 4.758088 31.892155 -0.024009 0.998188 0.055175
-10.588003 3.868225 0.166830 0.080722 0.013353 -0.996647
-11.511386 -1.713855 0.166830 0.080722 0.013353 -0.996647
-8.625835 3.949121 0.008991 0.080722 0.013353 -0.996647
-11.511386 -1.713855 0.166830 0.079594 0.012776 -0.996746
-9.664642 -2.522855 0.008991 0.079594 0.012776 -0.996746
-8.625835 3.949121 0.008991 0.079594 0.012776 -0.996746
-11.511396 -6.972337 0.166830 0.080722 -0.013353 -0.996647
-10.588035 -12.554419 0.166830 0.080722 -0.013353 -0.996647
-8.625867 -12.635324 0.008991 0.080722 -0.013353 -0.996647
-9.664649 -6.163343 0.008991 0.079594 -0.012775 -0.996746
-11.511396 -6.972337 0.166830 0.079594 -0.012775 -0.996746
-8.625867 -12.635324 0.008991 0.079594 -0.012775 -0.996746
--7.648588 -3.331884 40.099701 -0.175915 0.316304 0.932205
--7.648590 -2.280189 39.626190 -0.175915 0.316304 0.932205
--10.303285 -3.412790 39.626190 -0.175915 0.316304 0.932205
--10.303284 -4.221786 39.784027 -0.175915 0.316304 0.932205
-3.431894 -11.745436 0.008993 -0.000000 -0.000000 -1.000000
-3.431867 3.059213 0.008993 -0.000000 -0.000000 -1.000000
-9.664649 -6.163343 0.008991 -0.000000 -0.000000 -1.000000
-5.624905 -12.311729 0.008993 -0.000000 -0.000000 -1.000000
-12.896457 -7.700430 0.482506 0.222217 0.000000 -0.974997
-11.511396 -6.972337 0.166830 0.222217 0.000000 -0.974997
-11.511386 -1.713855 0.166830 0.222217 0.000000 -0.974997
-12.896444 -0.985754 0.482506 0.222217 0.000000 -0.974997
--4.763049 -3.170080 40.257534 0.108994 0.200787 0.973553
--1.415820 -4.221771 40.099697 0.108994 0.200787 0.973553
-6.548257 2.169322 37.889973 0.108994 0.200787 0.973553
-3.201058 -14.657825 12.162475 0.158308 -0.986005 -0.052280
-4.816958 -14.172424 7.900866 0.158308 -0.986005 -0.052280
-4.816960 -14.415123 12.478149 0.158308 -0.986005 -0.052280
-8.395024 -13.201622 1.113853 0.205240 -0.965507 -0.160225
-10.588035 -12.554419 0.166830 0.205240 -0.965507 -0.160225
-12.088513 -12.311718 0.482506 0.205240 -0.965507 -0.160225
-12.088514 -12.392616 1.113853 0.205240 -0.965507 -0.160225
--10.303267 -13.444355 31.892155 -0.116556 -0.970056 0.213087
--7.994836 -13.444351 33.154854 -0.116556 -0.970056 0.213087
--8.571943 -13.201653 33.944042 -0.116556 -0.970056 0.213087
--7.533150 -13.606150 31.892155 0.074316 -0.993285 0.088665
-3.201058 -14.657825 12.162475 0.074316 -0.993285 0.088665
-4.816960 -14.415123 12.478149 0.074316 -0.993285 0.088665
--6.378932 -13.444347 33.786201 0.074316 -0.993285 0.088665
--1.415820 -4.221771 40.099697 0.263805 0.004766 0.964564
-0.315503 -4.221767 39.626186 0.263805 0.004766 0.964564
-6.548257 2.169322 37.889973 0.263805 0.004766 0.964564
-10.588003 3.868225 0.166830 0.207936 0.035318 -0.977505
-12.088484 3.625528 0.482506 0.207936 0.035318 -0.977505
-12.896444 -0.985754 0.482506 0.207936 0.035318 -0.977505
-11.511386 -1.713855 0.166830 0.207936 0.035318 -0.977505
--7.994836 -13.444351 33.154854 -0.090515 -0.968573 0.231674
--6.378932 -13.444347 33.786201 -0.090515 -0.968573 0.231674
--8.571943 -13.201653 33.944042 -0.090515 -0.968573 0.231674
-6.548281 -10.855533 37.889973 0.276655 0.000001 0.960969
-6.894546 -10.855532 37.732136 0.276655 0.000001 0.960969
-6.548257 2.169322 37.889973 0.276655 0.000001 0.960969
-0.315503 -4.221767 39.626186 0.276655 0.000001 0.960969
-12.896457 -7.700430 0.482506 0.207936 -0.035317 -0.977505
-12.088513 -12.311718 0.482506 0.207936 -0.035317 -0.977505
-10.588035 -12.554419 0.166830 0.207936 -0.035317 -0.977505
-11.511396 -6.972337 0.166830 0.207936 -0.035317 -0.977505
-5.624876 3.625515 0.008993 -0.000000 0.000000 -1.000000
-2.623950 -14.415127 10.584101 -0.142545 -0.968515 -0.204105
-5.740328 -12.878027 1.113855 -0.142545 -0.968515 -0.204105
-4.816958 -14.172424 7.900866 -0.142545 -0.968515 -0.204105
-8.394991 4.515418 1.113853 0.205236 0.965508 -0.160226
-12.088484 3.706429 1.113853 0.205236 0.965508 -0.160226
-12.088484 3.625528 0.482506 0.205236 0.965508 -0.160226
-10.588003 3.868225 0.166830 0.205236 0.965508 -0.160226
--8.571977 4.191788 33.944042 -0.055540 0.786025 0.615695
--4.878484 3.463697 35.206738 -0.055540 0.786025 0.615695
-6.548257 2.169322 37.889973 -0.055540 0.786025 0.615695
-3.201058 -14.657825 12.162475 -0.052972 -0.989724 -0.132816
-2.623950 -14.415127 10.584101 -0.052972 -0.989724 -0.132816
-4.816958 -14.172424 7.900866 -0.052972 -0.989724 -0.132816
-9.664649 -6.163343 0.008991 -0.000001 -0.000000 -1.000000
-5.624876 3.625515 0.008993 -0.000001 -0.000000 -1.000000
-8.625835 3.949121 0.008991 -0.000001 -0.000000 -1.000000
--15.035570 -4.221796 37.574303 -0.660353 -0.559399 0.501005
--14.343026 -12.473566 28.577570 -0.660353 -0.559399 0.501005
--12.611699 -13.444359 30.471617 -0.660353 -0.559399 0.501005
--12.727137 -5.192589 38.837002 -0.660353 -0.559399 0.501005
-9.664652 -5.273447 32.523502 0.939532 -0.226871 0.256534
-6.894546 -10.855532 37.732136 0.939532 -0.226871 0.256534
-11.395974 -4.707145 26.683516 0.939532 -0.226871 0.256534
-2.046834 -11.179140 0.166830 -0.185351 -0.000000 -0.982672
-0.084644 0.713115 0.640345 -0.185351 -0.000000 -0.982672
-2.046808 2.492913 0.166830 -0.185351 -0.000000 -0.982672
-3.431894 -11.745436 0.008993 -0.185351 -0.000000 -0.982672
--4.878484 3.463697 35.206738 -0.057613 0.780868 0.622034
--7.071494 3.301892 35.206741 -0.057613 0.780868 0.622034
-6.548257 2.169322 37.889973 -0.057613 0.780868 0.622034
-8.625835 3.949121 0.008991 -0.000000 -0.000000 -1.000000
-9.664642 -2.522855 0.008991 -0.000000 -0.000000 -1.000000
-3.431894 -11.745436 0.008993 -0.226265 -0.876228 -0.425474
-5.624905 -12.311729 0.008993 -0.226265 -0.876228 -0.425474
-5.740328 -12.878027 1.113855 -0.226265 -0.876228 -0.425474
--12.611699 -13.444359 30.471617 -0.550752 -0.598009 0.582287
--10.995797 -12.473559 32.997017 -0.550752 -0.598009 0.582287
--12.727137 -5.192589 38.837002 -0.550752 -0.598009 0.582287
--7.648590 -2.280189 39.626190 -0.088030 0.593141 0.800271
--4.763049 -3.170080 40.257534 -0.088030 0.593141 0.800271
-6.548257 2.169322 37.889973 -0.088030 0.593141 0.800271
--7.071494 3.301892 35.206741 -0.088030 0.593141 0.800271
-9.664652 -5.273447 32.523502 0.907359 -0.062386 0.415701
-9.664650 -4.221749 32.681339 0.907359 -0.062386 0.415701
-6.894546 -10.855532 37.732136 0.907359 -0.062386 0.415701
-12.088484 3.706429 1.113853 0.521057 0.849607 -0.081652
-13.819809 2.654735 1.429529 0.521057 0.849607 -0.081652
-13.935230 2.573835 1.113853 0.521057 0.849607 -0.081652
-12.088484 3.625528 0.482506 0.521057 0.849607 -0.081652
-2.623950 -14.415127 10.584101 -0.324929 -0.910781 -0.254752
-3.431894 -11.745436 0.008993 -0.324929 -0.910781 -0.254752
-5.740328 -12.878027 1.113855 -0.324929 -0.910781 -0.254752
-3.431867 3.059213 0.008993 -0.226269 0.876227 -0.425475
-5.740296 4.191814 1.113855 -0.226269 0.876227 -0.425475
-5.624876 3.625515 0.008993 -0.226269 0.876227 -0.425475
-3.431894 -11.745436 0.008993 -0.113224 -0.000000 -0.993569
-2.046808 2.492913 0.166830 -0.113224 -0.000000 -0.993569
-3.431867 3.059213 0.008993 -0.113224 -0.000000 -0.993569
--6.378967 4.434491 33.786201 0.105548 0.973329 0.203693
-6.548257 2.169322 37.889973 0.105548 0.973329 0.203693
-6.894521 2.169323 37.732136 0.105548 0.973329 0.203693
--5.917280 4.677190 32.365665 0.105548 0.973329 0.203693
-9.664650 -4.221749 32.681339 0.876789 0.000001 0.480875
-8.972122 -4.221751 33.944038 0.876789 0.000001 0.480875
-6.894546 -10.855532 37.732136 0.876789 0.000001 0.480875
--12.611699 -13.444359 30.471617 -0.479524 -0.671479 0.564954
--10.534111 -13.201656 32.523506 -0.479524 -0.671479 0.564954
--10.995797 -12.473559 32.997017 -0.479524 -0.671479 0.564954
-4.816921 5.486207 7.900866 0.158304 0.986005 -0.052281
-3.201020 5.971603 12.162475 0.158304 0.986005 -0.052281
-4.816922 5.728907 12.478149 0.158304 0.986005 -0.052281
-3.431867 3.059213 0.008993 -0.324933 0.910780 -0.254752
-2.623912 5.728904 10.584101 -0.324933 0.910780 -0.254752
-5.740296 4.191814 1.113855 -0.324933 0.910780 -0.254752
-2.046808 2.492913 0.166830 -0.390638 0.881422 -0.265512
--14.343058 3.787279 28.577570 -0.390638 0.881422 -0.265512
-3.431867 3.059213 0.008993 -0.390638 0.881422 -0.265512
-6.548281 -10.855533 37.889973 0.243288 -0.809907 0.533724
-6.432859 -11.098231 37.574299 0.243288 -0.809907 0.533724
-6.894546 -10.855532 37.732136 0.243288 -0.809907 0.533724
-4.816960 -14.415123 12.478149 0.213817 -0.976176 -0.036917
-8.395024 -13.201622 1.113853 0.213817 -0.976176 -0.036917
-12.088514 -12.392616 1.113853 0.213817 -0.976176 -0.036917
-2.623912 5.728904 10.584101 -0.142547 0.968515 -0.204105
-4.816921 5.486207 7.900866 -0.142547 0.968515 -0.204105
-5.740296 4.191814 1.113855 -0.142547 0.968515 -0.204105
--14.343058 3.787279 28.577570 -0.371399 0.893101 -0.253839
-2.623912 5.728904 10.584101 -0.371399 0.893101 -0.253839
-3.431867 3.059213 0.008993 -0.371399 0.893101 -0.253839
-6.432859 -11.098231 37.574299 0.418352 -0.895311 0.152967
-6.548282 -11.098231 37.258625 0.418352 -0.895311 0.152967
-6.894546 -10.855532 37.732136 0.418352 -0.895311 0.152967
-13.819809 2.654735 1.429529 0.827512 0.536644 0.165036
-6.894521 2.169323 37.732136 0.827512 0.536644 0.165036
-13.935230 2.573835 1.113853 0.827512 0.536644 0.165036
-6.548282 -11.098231 37.258625 0.400461 -0.911477 0.094023
-4.816960 -14.415123 12.478149 0.400461 -0.911477 0.094023
-12.088514 -12.392616 1.113853 0.400461 -0.911477 0.094023
-2.623912 5.728904 10.584101 -0.052974 0.989724 -0.132816
-3.201020 5.971603 12.162475 -0.052974 0.989724 -0.132816
-4.816921 5.486207 7.900866 -0.052974 0.989724 -0.132816
--12.611733 4.434479 30.471617 -0.217949 0.970424 -0.103806
-3.201020 5.971603 12.162475 -0.217949 0.970424 -0.103806
-2.623912 5.728904 10.584101 -0.217949 0.970424 -0.103806
--14.343058 3.787279 28.577570 -0.217949 0.970424 -0.103806
-12.088514 -12.392616 1.113853 0.496311 -0.861580 0.106563
-13.819837 -11.340918 1.429529 0.496311 -0.861580 0.106563
-6.894546 -10.855532 37.732136 0.496311 -0.861580 0.106563
-6.548282 -11.098231 37.258625 0.496311 -0.861580 0.106563
-9.664642 -2.522855 0.008991 0.085158 0.000000 -0.996367
-11.511386 -1.713855 0.166830 0.085158 0.000000 -0.996367
-11.511396 -6.972337 0.166830 0.085158 0.000000 -0.996367
-9.664649 -6.163343 0.008991 0.085158 0.000000 -0.996367
-3.201020 5.971603 12.162475 0.014328 0.997504 0.069149
--7.533185 4.758088 31.892155 0.014328 0.997504 0.069149
--7.994871 4.677187 33.154854 0.014328 0.997504 0.069149
-8.395024 -13.201622 1.113853 0.072474 -0.893640 -0.442894
-8.625867 -12.635324 0.008991 0.072474 -0.893640 -0.442894
-10.588035 -12.554419 0.166830 0.072474 -0.893640 -0.442894
-2.046834 -11.179140 0.166830 -0.234588 -0.000000 -0.972095
-0.084663 -9.399349 0.640345 -0.234588 -0.000000 -0.972095
-0.084644 0.713115 0.640345 -0.234588 -0.000000 -0.972095
--12.611733 4.434479 30.471617 -0.357250 0.824004 0.439761
--10.995829 3.787284 32.997017 -0.357250 0.824004 0.439761
--10.303303 4.677183 31.892155 -0.357250 0.824004 0.439761
-4.816958 -14.172424 7.900866 -0.118517 -0.972281 -0.201554
-5.740328 -12.878027 1.113855 -0.118517 -0.972281 -0.201554
-8.395024 -13.201622 1.113853 -0.118517 -0.972281 -0.201554
-5.624905 -12.311729 0.008993 -0.101067 -0.883205 -0.457967
-8.625867 -12.635324 0.008991 -0.101067 -0.883205 -0.457967
-8.395024 -13.201622 1.113853 -0.101067 -0.883205 -0.457967
-5.740328 -12.878027 1.113855 -0.101067 -0.883205 -0.457967
--14.343058 3.787279 28.577570 -0.697451 0.561088 0.445806
--15.035570 -4.221796 37.574303 -0.697451 0.561088 0.445806
--12.611733 4.434479 30.471617 -0.697451 0.561088 0.445806
-6.548257 2.169322 37.889973 0.414770 0.000001 0.909926
-6.894546 -10.855532 37.732136 0.414770 0.000001 0.909926
-6.894521 2.169323 37.732136 0.414770 0.000001 0.909926
--10.303303 4.677183 31.892155 -0.276846 0.856232 0.436146
--10.995829 3.787284 32.997017 -0.276846 0.856232 0.436146
--8.571977 4.191788 33.944042 -0.276846 0.856232 0.436146
--7.994871 4.677187 33.154854 -0.276846 0.856232 0.436146
--15.035570 -4.221796 37.574303 -0.545950 0.606009 0.578526
--12.727139 -3.655493 38.837002 -0.545950 0.606009 0.578526
--10.995829 3.787284 32.997017 -0.545950 0.606009 0.578526
--12.611733 4.434479 30.471617 -0.545950 0.606009 0.578526
-6.894546 -10.855532 37.732136 0.876789 0.000002 0.480876
-8.972122 -4.221751 33.944038 0.876789 0.000002 0.480876
-6.894521 2.169323 37.732136 0.876789 0.000002 0.480876
-0.084644 0.713115 0.640345 -0.395651 0.197571 -0.896898
-1.008015 1.845713 0.482508 -0.395651 0.197571 -0.896898
-2.046808 2.492913 0.166830 -0.395651 0.197571 -0.896898
--14.343026 -12.473566 28.577570 -0.995174 -0.000002 -0.098122
--15.035570 -4.221796 37.574303 -0.995174 -0.000002 -0.098122
--14.343058 3.787279 28.577570 -0.995174 -0.000002 -0.098122
--13.650513 -4.221793 23.526773 -0.995174 -0.000002 -0.098122
-14.396943 -10.370119 1.113853 0.387830 0.000001 -0.921731
-12.896457 -7.700430 0.482506 0.387830 0.000001 -0.921731
-12.896444 -0.985754 0.482506 0.387830 0.000001 -0.921731
-8.972122 -4.221751 33.944038 0.876789 0.000002 0.480875
-9.664650 -4.221749 32.681339 0.876789 0.000002 0.480875
-6.894521 2.169323 37.732136 0.876789 0.000002 0.480875
-1.008015 1.845713 0.482508 -0.569700 0.737704 -0.362263
--14.343058 3.787279 28.577570 -0.569700 0.737704 -0.362263
-2.046808 2.492913 0.166830 -0.569700 0.737704 -0.362263
--12.611733 4.434479 30.471617 -0.123520 0.992066 -0.023391
--10.072460 4.758083 30.787292 -0.123520 0.992066 -0.023391
-3.201020 5.971603 12.162475 -0.123520 0.992066 -0.023391
-4.816960 -14.415123 12.478149 0.168080 -0.984391 -0.052195
-4.816958 -14.172424 7.900866 0.168080 -0.984391 -0.052195
-8.395024 -13.201622 1.113853 0.168080 -0.984391 -0.052195
-14.396943 -10.370119 1.113853 0.387831 0.000001 -0.921731
-12.896444 -0.985754 0.482506 0.387831 0.000001 -0.921731
-14.396918 1.683939 1.113853 0.387831 0.000001 -0.921731
-9.664650 -4.221749 32.681339 0.912550 0.078314 0.401396
-9.664649 -3.412752 32.523502 0.912550 0.078314 0.401396
-6.894521 2.169323 37.732136 0.912550 0.078314 0.401396
-5.624876 3.625515 0.008993 -0.101071 0.883205 -0.457967
-5.740296 4.191814 1.113855 -0.101071 0.883205 -0.457967
-8.394991 4.515418 1.113853 -0.101071 0.883205 -0.457967
-8.625835 3.949121 0.008991 -0.101071 0.883205 -0.457967
-8.625835 3.949121 0.008991 0.072470 0.893640 -0.442894
-8.394991 4.515418 1.113853 0.072470 0.893640 -0.442894
-10.588003 3.868225 0.166830 0.072470 0.893640 -0.442894
--10.072460 4.758083 30.787292 -0.021610 0.998532 0.049660
--7.533185 4.758088 31.892155 -0.021610 0.998532 0.049660
-3.201020 5.971603 12.162475 -0.021610 0.998532 0.049660
-12.896444 -0.985754 0.482506 0.305002 0.053441 -0.950851
-12.088484 3.625528 0.482506 0.305002 0.053441 -0.950851
-14.396918 1.683939 1.113853 0.305002 0.053441 -0.950851
-9.664649 -3.412752 32.523502 0.939786 0.233575 0.249489
-11.395973 -4.140847 26.683516 0.939786 0.233575 0.249489
-6.894521 2.169323 37.732136 0.939786 0.233575 0.249489
--10.995829 3.787284 32.997017 -0.336593 0.620090 0.708656
--12.727139 -3.655493 38.837002 -0.336593 0.620090 0.708656
--10.303285 -3.412790 39.626190 -0.336593 0.620090 0.708656
--8.571977 4.191788 33.944042 -0.336593 0.620090 0.708656
-0.315503 -4.221767 39.626186 0.263805 -0.004590 0.964565
--1.415820 -4.221771 40.099697 0.263805 -0.004590 0.964565
-6.548281 -10.855533 37.889973 0.263805 -0.004590 0.964565
-6.894521 2.169323 37.732136 0.918092 0.351363 0.183442
-11.395973 -4.140847 26.683516 0.918092 0.351363 0.183442
-14.396918 1.683939 1.113853 0.918092 0.351363 0.183442
-13.935230 2.573835 1.113853 0.918092 0.351363 0.183442
-12.088484 3.625528 0.482506 0.425771 0.220895 -0.877453
-13.935230 2.573835 1.113853 0.425771 0.220895 -0.877453
-14.396918 1.683939 1.113853 0.425771 0.220895 -0.877453
-13.819809 2.654735 1.429529 0.501826 0.858299 0.107208
-12.088484 3.706429 1.113853 0.501826 0.858299 0.107208
-6.894521 2.169323 37.732136 0.501826 0.858299 0.107208
-1.008015 1.845713 0.482508 -0.726946 0.532177 -0.433979
-0.084644 0.713115 0.640345 -0.726946 0.532177 -0.433979
--14.343058 3.787279 28.577570 -0.726946 0.532177 -0.433979
--7.648584 -5.354379 40.099701 -0.175925 -0.140804 0.974282
--7.648587 -4.221783 40.257538 -0.175925 -0.140804 0.974282
--10.303284 -4.221786 39.784027 -0.175925 -0.140804 0.974282
--10.303282 -5.273483 39.626190 -0.175925 -0.140804 0.974282
--1.415820 -4.221771 40.099697 0.114133 -0.187930 0.975528
--4.763044 -5.435272 40.257534 0.114133 -0.187930 0.975528
-6.548281 -10.855533 37.889973 0.114133 -0.187930 0.975528
--7.648590 -2.280189 39.626190 -0.261873 0.615372 0.743465
--7.071494 3.301892 35.206741 -0.261873 0.615372 0.743465
--8.571977 4.191788 33.944042 -0.261873 0.615372 0.743465
--10.303285 -3.412790 39.626190 -0.261873 0.615372 0.743465
-0.084663 -9.399349 0.640345 -0.862526 0.105001 -0.494999
--13.650513 -4.221793 23.526773 -0.862526 0.105001 -0.494999
--14.343058 3.787279 28.577570 -0.862526 0.105001 -0.494999
-0.084644 0.713115 0.640345 -0.862526 0.105001 -0.494999
--7.648584 -5.354379 40.099701 -0.061341 -0.468853 0.881144
--7.648582 -6.244276 39.626190 -0.061341 -0.468853 0.881144
--4.763044 -5.435272 40.257534 -0.061341 -0.468853 0.881144
-12.088484 3.706429 1.113853 0.402156 0.910601 0.095266
-4.816922 5.728907 12.478149 0.402156 0.910601 0.095266
-6.894521 2.169323 37.732136 0.402156 0.910601 0.095266
-5.740296 4.191814 1.113855 -0.118520 0.972280 -0.201554
-4.816921 5.486207 7.900866 -0.118520 0.972280 -0.201554
-8.394991 4.515418 1.113853 -0.118520 0.972280 -0.201554
--7.648582 -6.244276 39.626190 -0.094154 -0.591411 0.800854
--7.071465 -11.907255 35.206741 -0.094154 -0.591411 0.800854
-6.548281 -10.855533 37.889973 -0.094154 -0.591411 0.800854
--4.763044 -5.435272 40.257534 -0.094154 -0.591411 0.800854
-4.816922 5.728907 12.478149 0.137585 0.982416 0.126214
-3.201020 5.971603 12.162475 0.137585 0.982416 0.126214
--5.917280 4.677190 32.365665 0.137585 0.982416 0.126214
-6.894521 2.169323 37.732136 0.137585 0.982416 0.126214
--7.648584 -5.354379 40.099701 -0.169298 -0.462957 0.870062
--10.303282 -5.273483 39.626190 -0.169298 -0.462957 0.870062
--7.648582 -6.244276 39.626190 -0.169298 -0.462957 0.870062
-11.395974 -4.464446 26.841352 0.993224 0.001484 0.116208
-14.396943 -10.370119 1.113853 0.993224 0.001484 0.116208
-14.396918 1.683939 1.113853 0.993224 0.001484 0.116208
-11.395973 -4.140847 26.683516 0.993224 0.001484 0.116208
--10.303284 -4.221786 39.784027 -0.172979 0.172006 0.969790
--7.648587 -4.221783 40.257538 -0.172979 0.172006 0.969790
--7.648588 -3.331884 40.099701 -0.172979 0.172006 0.969790
-4.816921 5.486207 7.900866 0.168076 0.984391 -0.052195
-4.816922 5.728907 12.478149 0.168076 0.984391 -0.052195
-8.394991 4.515418 1.113853 0.168076 0.984391 -0.052195
--7.071494 3.301892 35.206741 -0.057729 0.782447 0.620036
--4.878484 3.463697 35.206738 -0.057729 0.782447 0.620036
--8.571977 4.191788 33.944042 -0.057729 0.782447 0.620036
--8.571943 -13.201653 33.944042 -0.187632 -0.606262 0.772814
--7.071465 -11.907255 35.206741 -0.187632 -0.606262 0.772814
--7.648582 -6.244276 39.626190 -0.187632 -0.606262 0.772814
--10.303282 -5.273483 39.626190 -0.187632 -0.606262 0.772814
-9.664649 -3.412752 32.523502 0.957617 0.077337 0.277468
-9.664650 -4.221749 32.681339 0.957617 0.077337 0.277468
-11.395974 -4.464446 26.841352 0.957617 0.077337 0.277468
-11.395973 -4.140847 26.683516 0.957617 0.077337 0.277468
--12.611699 -13.444359 30.471617 -0.110796 -0.993395 -0.029850
-2.623950 -14.415127 10.584101 -0.110796 -0.993395 -0.029850
-3.201058 -14.657825 12.162475 -0.110796 -0.993395 -0.029850
--10.072424 -13.606153 30.787292 -0.110796 -0.993395 -0.029850
-4.816922 5.728907 12.478149 0.213813 0.976177 -0.036918
-12.088484 3.706429 1.113853 0.213813 0.976177 -0.036918
-8.394991 4.515418 1.113853 0.213813 0.976177 -0.036918
--7.071465 -11.907255 35.206741 -0.102983 -0.630058 0.769689
--6.840620 -12.716251 34.575394 -0.102983 -0.630058 0.769689
-6.548281 -10.855533 37.889973 -0.102983 -0.630058 0.769689
--13.650513 -4.221793 23.526773 -0.858212 -0.213648 -0.466719
-0.084663 -9.399349 0.640345 -0.858212 -0.213648 -0.466719
--14.343026 -12.473566 28.577570 -0.858212 -0.213648 -0.466719
--7.533150 -13.606150 31.892155 -0.018732 -0.998897 0.043054
--10.072424 -13.606153 30.787292 -0.018732 -0.998897 0.043054
-3.201058 -14.657825 12.162475 -0.018732 -0.998897 0.043054
--7.994871 4.677187 33.154854 0.072479 0.978948 0.190810
--6.378967 4.434491 33.786201 0.072479 0.978948 0.190810
--5.917280 4.677190 32.365665 0.072479 0.978948 0.190810
--6.840620 -12.716251 34.575394 -0.101487 -0.634567 0.766176
--8.571943 -13.201653 33.944042 -0.101487 -0.634567 0.766176
-6.548281 -10.855533 37.889973 -0.101487 -0.634567 0.766176
-13.935257 -11.260017 1.113853 0.425772 -0.220894 -0.877453
-12.088513 -12.311718 0.482506 0.425772 -0.220894 -0.877453
-14.396943 -10.370119 1.113853 0.425772 -0.220894 -0.877453
-9.664652 -5.273447 32.523502 0.957006 -0.068726 0.281810
-11.395974 -4.707145 26.683516 0.957006 -0.068726 0.281810
-11.395974 -4.464446 26.841352 0.957006 -0.068726 0.281810
-9.664650 -4.221749 32.681339 0.957006 -0.068726 0.281810
--12.727137 -5.192589 38.837002 -0.354890 -0.614547 0.704546
--10.995797 -12.473559 32.997017 -0.354890 -0.614547 0.704546
--8.571943 -13.201653 33.944042 -0.354890 -0.614547 0.704546
--10.303282 -5.273483 39.626190 -0.354890 -0.614547 0.704546
-0.084663 -9.399349 0.640345 -0.726944 -0.532180 -0.433979
-1.008038 -10.531944 0.482508 -0.726944 -0.532180 -0.433979
--14.343026 -12.473566 28.577570 -0.726944 -0.532180 -0.433979
--8.571943 -13.201653 33.944042 -0.041539 -0.780794 0.623406
--6.378932 -13.444347 33.786201 -0.041539 -0.780794 0.623406
-6.548281 -10.855533 37.889973 -0.041539 -0.780794 0.623406
-6.894546 -10.855532 37.732136 0.915431 -0.358565 0.182801
-13.935257 -11.260017 1.113853 0.915431 -0.358565 0.182801
-14.396943 -10.370119 1.113853 0.915431 -0.358565 0.182801
-11.395974 -4.707145 26.683516 0.915431 -0.358565 0.182801
-12.088513 -12.311718 0.482506 0.305002 -0.053439 -0.950851
-12.896457 -7.700430 0.482506 0.305002 -0.053439 -0.950851
-14.396943 -10.370119 1.113853 0.305002 -0.053439 -0.950851
-1.008038 -10.531944 0.482508 -0.569697 -0.737706 -0.362263
-2.046834 -11.179140 0.166830 -0.569697 -0.737706 -0.362263
--14.343026 -12.473566 28.577570 -0.569697 -0.737706 -0.362263
-3.201020 5.971603 12.162475 0.029271 0.996597 0.077063
--7.994871 4.677187 33.154854 0.029271 0.996597 0.077063
--5.917280 4.677190 32.365665 0.029271 0.996597 0.077063
--6.378932 -13.444347 33.786201 -0.038915 -0.785252 0.617952
-6.432859 -11.098231 37.574299 -0.038915 -0.785252 0.617952
-6.548281 -10.855533 37.889973 -0.038915 -0.785252 0.617952
--4.763049 -3.170080 40.257534 -0.072704 0.409457 0.909428
--7.648590 -2.280189 39.626190 -0.072704 0.409457 0.909428
--7.648588 -3.331884 40.099701 -0.072704 0.409457 0.909428
-11.395974 -4.464446 26.841352 0.986887 -0.088001 0.135315
-11.395974 -4.707145 26.683516 0.986887 -0.088001 0.135315
-14.396943 -10.370119 1.113853 0.986887 -0.088001 0.135315
--12.611699 -13.444359 30.471617 -0.310945 -0.930671 -0.192783
--14.343026 -12.473566 28.577570 -0.310945 -0.930671 -0.192783
-2.623950 -14.415127 10.584101 -0.310945 -0.930671 -0.192783
--8.571977 4.191788 33.944042 -0.046567 0.805218 0.591148
-6.548257 2.169322 37.889973 -0.046567 0.805218 0.591148
--6.378967 4.434491 33.786201 -0.046567 0.805218 0.591148
-6.894546 -10.855532 37.732136 0.827516 -0.536637 0.165037
-13.819837 -11.340918 1.429529 0.827516 -0.536637 0.165037
-13.935257 -11.260017 1.113853 0.827516 -0.536637 0.165037
-1.008038 -10.531944 0.482508 -0.395649 -0.197572 -0.896899
-0.084663 -9.399349 0.640345 -0.395649 -0.197572 -0.896899
-2.046834 -11.179140 0.166830 -0.395649 -0.197572 -0.896899
--6.378932 -13.444347 33.786201 0.144222 -0.982178 0.120526
-4.816960 -14.415123 12.478149 0.144222 -0.982178 0.120526
-6.432859 -11.098231 37.574299 0.144222 -0.982178 0.120526
--10.995797 -12.473559 32.997017 -0.436177 -0.668401 0.602487
--10.534111 -13.201656 32.523506 -0.436177 -0.668401 0.602487
--8.571943 -13.201653 33.944042 -0.436177 -0.668401 0.602487
-12.088514 -12.392616 1.113853 0.521060 -0.849606 -0.081650
-12.088513 -12.311718 0.482506 0.521060 -0.849606 -0.081650
-13.935257 -11.260017 1.113853 0.521060 -0.849606 -0.081650
-13.819837 -11.340918 1.429529 0.521060 -0.849606 -0.081650
--14.343026 -12.473566 28.577570 -0.371395 -0.893102 -0.253839
-3.431894 -11.745436 0.008993 -0.371395 -0.893102 -0.253839
-2.623950 -14.415127 10.584101 -0.371395 -0.893102 -0.253839
--7.994871 4.677187 33.154854 -0.060943 0.869470 0.490212
--8.571977 4.191788 33.944042 -0.060943 0.869470 0.490212
--6.378967 4.434491 33.786201 -0.060943 0.869470 0.490212
-4.816960 -14.415123 12.478149 0.292102 -0.950405 0.106804
-6.548282 -11.098231 37.258625 0.292102 -0.950405 0.106804
-6.432859 -11.098231 37.574299 0.292102 -0.950405 0.106804
--7.648587 -4.221783 40.257538 0.000001 0.000000 1.000000
--4.763044 -5.435272 40.257534 0.000001 0.000000 1.000000
--4.763049 -3.170080 40.257534 0.000001 0.000000 1.000000
--14.343026 -12.473566 28.577570 -0.390636 -0.881423 -0.265512
-2.046834 -11.179140 0.166830 -0.390636 -0.881423 -0.265512
-3.431894 -11.745436 0.008993 -0.390636 -0.881423 -0.265512
--10.534111 -13.201656 32.523506 -0.281404 -0.877338 0.388702
--12.611699 -13.444359 30.471617 -0.281404 -0.877338 0.388702
--8.571943 -13.201653 33.944042 -0.281404 -0.877338 0.388702
--4.763044 -5.435272 40.257534 0.047102 0.000000 0.998890
--1.415820 -4.221771 40.099697 0.047102 0.000000 0.998890
--4.763049 -3.170080 40.257534 0.047102 0.000000 0.998890
-9.664649 -6.163343 0.008991 -0.000001 0.000000 -1.000000
-8.625867 -12.635324 0.008991 -0.000001 0.000000 -1.000000
-5.624905 -12.311729 0.008993 -0.000001 0.000000 -1.000000
--12.611699 -13.444359 30.471617 -0.145447 -0.960718 0.236360
--10.303267 -13.444355 31.892155 -0.145447 -0.960718 0.236360
--8.571943 -13.201653 33.944042 -0.145447 -0.960718 0.236360
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-3 81 82 83
-4 84 85 86 87
-3 88 89 90
-4 91 92 93 94
-3 95 96 97
-4 98 99 100 101
-3 102 103 104
-4 105 106 107 108
-4 109 110 111 112
-3 72 71 113
-3 114 115 116
-4 117 118 119 120
-3 121 122 123
-3 124 125 126
-3 127 128 129
-4 130 131 132 133
-3 134 135 136
-4 137 138 139 140
-3 141 142 143
-3 72 144 145
-3 146 147 148
-3 149 150 151
-4 152 153 154 155
-3 156 157 158
-4 159 160 161 162
-3 163 164 165
-3 166 167 168
-3 169 170 171
-4 172 173 174 175
-3 176 177 178
-3 179 180 181
-3 182 183 184
-3 185 186 187
-3 188 189 190
-3 191 192 193
-3 194 195 196
-3 197 198 199
-3 200 201 202
-3 203 204 205
-3 206 207 208
-3 209 210 211
-3 212 213 214
-4 215 216 217 218
-4 219 220 221 222
-4 223 224 225 226
-3 227 228 229
-3 230 231 232
-3 233 234 235
-3 236 237 238
-3 239 240 241
-4 242 243 244 245
-3 246 247 248
-3 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-3 260 261 262
-3 263 264 265
-4 266 267 268 269
-3 270 271 272
-3 273 274 275
-3 276 277 278
-3 279 280 281
-3 282 283 284
-3 285 286 287
-3 288 289 290
-4 291 292 293 294
-3 295 296 297
-3 298 299 300
-3 301 302 303
-3 304 305 306
-4 307 308 309 310
-3 311 312 313
-4 314 315 316 317
-3 318 319 320
-3 321 322 323
-3 324 325 326
-4 327 328 329 330
-3 331 332 333
-4 334 335 336 337
-4 338 339 340 341
-3 342 343 344
-3 345 346 347
-3 348 349 350
-4 351 352 353 354
-4 355 356 357 358
-3 359 360 361
-4 362 363 364 365
-3 366 367 368
-3 369 370 371
-3 372 373 374
-4 375 376 377 378
-4 379 380 381 382
-4 383 384 385 386
-3 387 388 389
-3 390 391 392
-3 393 394 395
-3 396 397 398
-3 399 400 401
-3 402 403 404
-3 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-4 422 423 424 425
-3 426 427 428
-3 429 430 431
-3 432 433 434
-3 435 436 437
-3 438 439 440
-3 441 442 443
-3 444 445 446
-3 447 448 449
-3 450 451 452
-3 453 454 455
-3 456 457 458
-3 459 460 461
-4 462 463 464 465
-3 466 467 468
-3 469 470 471
-3 472 473 474
-3 475 476 477
-3 478 479 480
-3 481 482 483
-3 484 485 486
-3 487 488 489
-3 490 491 492
diff --git a/src/examples/evas/resources/models/convex_hull/sonic_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/sonic_blender_ch_test.ply
deleted file mode 100644
index f8f20fb0fe..0000000000
--- a/src/examples/evas/resources/models/convex_hull/sonic_blender_ch_test.ply
+++ /dev/null
@@ -1,260 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 97
-property float x
-property float y
-property float z
-element face 153
-property list uchar uint vertex_indices
-end_header
--7.648584 -5.354379 40.099701
--4.763044 -5.435272 40.257534
--7.648587 -4.221783 40.257538
--12.727139 -3.655493 38.837002
--12.727139 -4.140892 38.994839
--10.303285 -3.412790 39.626190
--6.378932 -13.444347 33.786201
--7.994836 -13.444351 33.154854
--7.533150 -13.606150 31.892155
--8.571943 -13.201653 33.944042
--6.840620 -12.716251 34.575394
--7.071465 -11.907255 35.206741
--12.611733 4.434479 30.471617
--10.303303 4.677183 31.892155
--10.072460 4.758083 30.787292
-10.588003 3.868225 0.166830
-11.511386 -1.713855 0.166830
-8.625835 3.949121 0.008991
-11.511396 -6.972337 0.166830
-10.588035 -12.554419 0.166830
-8.625867 -12.635324 0.008991
-3.201058 -14.657825 12.162475
-4.816958 -14.172424 7.900866
-4.816960 -14.415123 12.478149
-4.816921 5.486207 7.900866
-3.201020 5.971603 12.162475
-4.816922 5.728907 12.478149
--4.763049 -3.170080 40.257534
--7.648588 -3.331884 40.099701
--10.303284 -4.221786 39.784027
--12.727138 -4.707191 38.994839
--15.035570 -4.221796 37.574303
--12.727137 -5.192589 38.837002
--10.303282 -5.273483 39.626190
--10.072424 -13.606153 30.787292
--10.303267 -13.444355 31.892155
--12.611699 -13.444359 30.471617
--7.994871 4.677187 33.154854
--7.533185 4.758088 31.892155
-9.664642 -2.522855 0.008991
-9.664649 -6.163343 0.008991
--7.648590 -2.280189 39.626190
-3.431894 -11.745436 0.008993
-3.431867 3.059213 0.008993
-5.624905 -12.311729 0.008993
-12.896457 -7.700430 0.482506
-12.896444 -0.985754 0.482506
--1.415820 -4.221771 40.099697
-6.548257 2.169322 37.889973
-8.395024 -13.201622 1.113853
-12.088513 -12.311718 0.482506
-12.088514 -12.392616 1.113853
-0.315503 -4.221767 39.626186
-12.088484 3.625528 0.482506
-6.548281 -10.855533 37.889973
-6.894546 -10.855532 37.732136
-5.624876 3.625515 0.008993
-2.623950 -14.415127 10.584101
-5.740328 -12.878027 1.113855
-8.394991 4.515418 1.113853
-12.088484 3.706429 1.113853
--8.571977 4.191788 33.944042
--4.878484 3.463697 35.206738
--14.343026 -12.473566 28.577570
-9.664652 -5.273447 32.523502
-11.395974 -4.707145 26.683516
-2.046834 -11.179140 0.166830
-0.084644 0.713115 0.640345
-2.046808 2.492913 0.166830
--7.071494 3.301892 35.206741
--10.995797 -12.473559 32.997017
-9.664650 -4.221749 32.681339
-13.819809 2.654735 1.429529
-13.935230 2.573835 1.113853
-5.740296 4.191814 1.113855
--6.378967 4.434491 33.786201
-6.894521 2.169323 37.732136
--5.917280 4.677190 32.365665
-8.972122 -4.221751 33.944038
--10.534111 -13.201656 32.523506
-2.623912 5.728904 10.584101
--14.343058 3.787279 28.577570
-6.432859 -11.098231 37.574299
-6.548282 -11.098231 37.258625
-13.819837 -11.340918 1.429529
-0.084663 -9.399349 0.640345
--10.995829 3.787284 32.997017
-1.008015 1.845713 0.482508
--13.650513 -4.221793 23.526773
-14.396943 -10.370119 1.113853
-14.396918 1.683939 1.113853
-9.664649 -3.412752 32.523502
-11.395973 -4.140847 26.683516
--7.648582 -6.244276 39.626190
-11.395974 -4.464446 26.841352
-13.935257 -11.260017 1.113853
-1.008038 -10.531944 0.482508
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 2
-3 5 4 29
-3 29 4 30
-3 4 31 30
-3 30 31 32
-3 31 4 3
-3 29 30 33
-3 33 30 32
-3 8 7 34
-3 7 35 34
-3 34 35 36
-3 13 37 14
-3 14 37 38
-3 16 39 17
-3 40 18 20
-4 28 41 5 29
-4 42 43 40 44
-4 45 18 16 46
-3 27 47 48
-4 49 19 50 51
-3 35 7 9
-4 8 21 23 6
-3 47 52 48
-4 15 53 46 16
-3 7 6 9
-4 54 55 48 52
-4 45 50 19 18
-3 40 43 56
-3 57 58 22
-4 59 60 53 15
-3 61 62 48
-3 21 57 22
-3 40 56 17
-4 31 63 36 32
-3 64 55 65
-4 66 67 68 42
-3 62 69 48
-3 40 17 39
-3 42 44 58
-3 36 70 32
-4 41 27 48 69
-3 64 71 55
-4 60 72 73 53
-3 57 42 58
-3 43 74 56
-3 42 68 43
-4 75 48 76 77
-3 71 78 55
-3 36 79 70
-3 43 80 74
-3 68 81 43
-3 54 82 55
-3 23 49 51
-3 80 24 74
-3 81 80 43
-3 82 83 55
-3 72 76 73
-3 83 23 51
-3 80 25 24
-4 12 25 80 81
-4 51 84 55 83
-4 39 16 18 40
-3 25 38 37
-3 49 20 19
-3 66 85 67
-3 12 86 13
-3 22 58 49
-4 44 20 49 58
-3 81 31 12
-3 48 55 76
-4 13 86 61 37
-4 31 3 86 12
-3 55 78 76
-3 67 87 68
-4 63 31 81 88
-3 89 45 46
-3 78 71 76
-3 87 81 68
-3 12 14 25
-3 23 22 49
-3 89 46 90
-3 71 91 76
-4 56 74 59 17
-3 17 59 15
-3 14 38 25
-3 46 53 90
-3 91 92 76
-4 86 3 5 61
-3 52 47 54
-4 76 92 90 73
-3 53 73 90
-3 72 60 76
-3 87 67 81
-4 0 2 29 33
-3 47 1 54
-4 41 69 61 5
-4 85 88 81 67
-3 0 93 1
-3 60 26 76
-3 74 24 59
-4 93 11 54 1
-4 26 25 77 76
-3 0 33 93
-4 94 89 90 92
-3 29 2 28
-3 24 26 59
-3 69 62 61
-4 9 11 93 33
-4 91 71 94 92
-4 36 57 21 34
-3 26 60 59
-3 11 10 54
-3 88 85 63
-3 8 34 21
-3 37 75 77
-3 10 9 54
-3 95 50 89
-4 64 65 94 71
-4 32 70 9 33
-3 85 96 63
-3 9 6 54
-4 55 95 89 65
-3 50 45 89
-3 96 66 63
-3 25 37 77
-3 6 82 54
-3 27 41 28
-3 94 65 89
-3 36 63 57
-3 61 48 75
-3 55 84 95
-3 96 85 66
-3 6 23 82
-3 70 79 9
-4 51 50 95 84
-3 63 42 57
-3 37 61 75
-3 23 83 82
-3 2 1 27
-3 63 66 42
-3 79 36 9
-3 1 47 27
-3 40 20 44
-3 36 35 9
diff --git a/src/examples/evas/resources/models/convex_hull/sphere_blender_ch.ply b/src/examples/evas/resources/models/convex_hull/sphere_blender_ch.ply
deleted file mode 100644
index d0f3bea948..0000000000
--- a/src/examples/evas/resources/models/convex_hull/sphere_blender_ch.ply
+++ /dev/null
@@ -1,469 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 364
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 92
-property list uchar uint vertex_indices
-end_header
-0.155145 -0.475683 0.000000 0.000000 -0.988844 0.148952
-0.147583 -0.452409 0.154509 0.000000 -0.988844 0.148952
--0.146310 -0.452409 0.154509 0.000000 -0.988844 0.148952
--0.153872 -0.475683 0.000000 0.000000 -0.988844 0.148952
-0.048383 -0.147101 -0.475529 0.048340 -0.148773 -0.987689
--0.047109 -0.147101 -0.475529 0.048340 -0.148773 -0.987689
-0.000637 -0.000154 -0.500000 0.048340 -0.148773 -0.987689
-0.125637 -0.090972 -0.475529 0.048340 -0.148773 -0.987689
--0.326617 0.237610 -0.293893 -0.425919 0.586229 -0.689151
--0.124363 0.384556 -0.293893 -0.425919 0.586229 -0.689151
--0.090181 0.279354 -0.404509 -0.425919 0.586229 -0.689151
--0.237127 0.172592 -0.404509 -0.425919 0.586229 -0.689151
-0.327891 -0.237919 0.293893 0.689151 -0.223920 0.689152
-0.405146 -0.000154 0.293893 0.689151 -0.223920 0.689152
-0.294530 -0.000154 0.404509 0.689151 -0.223920 0.689152
-0.238401 -0.172900 0.404509 0.689151 -0.223920 0.689152
-0.476165 -0.000154 -0.154509 0.855863 -0.278087 -0.436081
-0.385347 -0.279663 -0.154509 0.855863 -0.278087 -0.436081
-0.327891 -0.237919 -0.293893 0.855863 -0.278087 -0.436081
-0.405146 -0.000154 -0.293893 0.855863 -0.278087 -0.436081
--0.124363 0.090664 0.475529 -0.126554 0.091947 0.987689
--0.153872 -0.000154 0.475529 -0.126554 0.091947 0.987689
-0.000637 -0.000154 0.500000 -0.126554 0.091947 0.987689
--0.047109 0.146792 0.475529 -0.126554 0.091947 0.987689
--0.326617 0.237610 0.293893 -0.528951 0.728040 0.436084
--0.124363 0.384556 0.293893 -0.528951 0.728040 0.436084
--0.146309 0.452100 0.154509 -0.528951 0.728040 0.436084
--0.384074 0.279354 0.154509 -0.528951 0.728040 0.436084
-0.405146 -0.000154 -0.293893 0.855862 0.278087 -0.436083
-0.327891 0.237610 -0.293893 0.855862 0.278087 -0.436083
-0.385348 0.279354 -0.154509 0.855862 0.278087 -0.436083
-0.476165 -0.000154 -0.154509 0.855862 0.278087 -0.436083
-0.091455 0.279354 -0.404509 0.000000 0.724617 -0.689152
--0.090181 0.279354 -0.404509 0.000000 0.724617 -0.689152
--0.124363 0.384556 -0.293893 0.000000 0.724617 -0.689152
-0.125637 0.384556 -0.293893 0.000000 0.724617 -0.689152
-0.000637 -0.000154 0.500000 0.048339 0.148774 0.987689
-0.125637 0.090664 0.475529 0.048339 0.148774 0.987689
-0.048383 0.146792 0.475529 0.048339 0.148774 0.987689
--0.047109 0.146792 0.475529 0.048339 0.148774 0.987689
-0.091455 -0.279663 0.404509 0.425919 -0.586227 0.689152
-0.125637 -0.384865 0.293893 0.425919 -0.586227 0.689152
-0.327891 -0.237919 0.293893 0.425919 -0.586227 0.689152
-0.238401 -0.172900 0.404509 0.425919 -0.586227 0.689152
-0.147583 0.452100 0.154509 0.000000 0.899906 0.436085
--0.146309 0.452100 0.154509 0.000000 0.899906 0.436085
--0.124363 0.384556 0.293893 0.000000 0.899906 0.436085
-0.125637 0.384556 0.293893 0.000000 0.899906 0.436085
--0.124363 -0.090972 -0.475529 -0.277580 -0.382053 -0.881467
--0.047109 -0.147101 -0.475529 -0.277580 -0.382053 -0.881467
--0.090181 -0.279663 -0.404509 -0.277580 -0.382053 -0.881467
--0.237127 -0.172900 -0.404509 -0.277580 -0.382053 -0.881467
--0.384074 -0.279663 0.154509 -0.940448 -0.305569 0.148949
--0.474892 -0.000154 0.154509 -0.940448 -0.305569 0.148949
--0.499363 -0.000154 0.000000 -0.940448 -0.305569 0.148949
--0.403872 -0.294047 0.000000 -0.940448 -0.305569 0.148949
--0.293256 -0.000154 -0.404509 -0.449131 -0.145933 -0.881467
--0.153872 -0.000154 -0.475529 -0.449131 -0.145933 -0.881467
--0.124363 -0.090972 -0.475529 -0.449131 -0.145933 -0.881467
--0.237127 -0.172900 -0.404509 -0.449131 -0.145933 -0.881467
-0.147583 -0.452409 -0.154509 0.528952 -0.728040 -0.436082
-0.125637 -0.384865 -0.293893 0.528952 -0.728040 -0.436082
-0.327891 -0.237919 -0.293893 0.528952 -0.728040 -0.436082
-0.385347 -0.279663 -0.154509 0.528952 -0.728040 -0.436082
--0.124363 -0.090972 0.475529 -0.277580 -0.382053 0.881467
--0.237127 -0.172900 0.404509 -0.277580 -0.382053 0.881467
--0.090181 -0.279663 0.404509 -0.277580 -0.382053 0.881467
--0.047109 -0.147101 0.475529 -0.277580 -0.382053 0.881467
-0.000637 -0.000154 0.500000 0.156228 0.050762 0.986416
-0.155146 -0.000154 0.475529 0.156228 0.050762 0.986416
-0.125637 0.090664 0.475529 0.156228 0.050762 0.986416
-0.125637 0.384556 0.293893 0.528951 0.728040 0.436084
-0.327891 0.237610 0.293893 0.528951 0.728040 0.436084
-0.385348 0.279354 0.154509 0.528951 0.728040 0.436084
-0.147583 0.452100 0.154509 0.528951 0.728040 0.436084
-0.125637 0.384556 -0.293893 0.425919 0.586229 -0.689151
-0.327891 0.237610 -0.293893 0.425919 0.586229 -0.689151
-0.238401 0.172592 -0.404509 0.425919 0.586229 -0.689151
-0.091455 0.279354 -0.404509 0.425919 0.586229 -0.689151
--0.384074 0.279354 0.154509 -0.940447 0.305570 0.148949
--0.403872 0.293738 0.000000 -0.940447 0.305570 0.148949
--0.499363 -0.000154 0.000000 -0.940447 0.305570 0.148949
--0.474892 -0.000154 0.154509 -0.940447 0.305570 0.148949
-0.000637 -0.000154 0.500000 0.126555 -0.091947 0.987689
-0.048383 -0.147101 0.475529 0.126555 -0.091947 0.987689
-0.125637 -0.090972 0.475529 0.126555 -0.091947 0.987689
-0.155146 -0.000154 0.475529 0.126555 -0.091947 0.987689
-0.327891 0.237610 0.293893 0.855862 0.278087 0.436083
-0.405146 -0.000154 0.293893 0.855862 0.278087 0.436083
-0.476165 -0.000154 0.154509 0.855862 0.278087 0.436083
-0.385348 0.279354 0.154509 0.855862 0.278087 0.436083
--0.293256 -0.000154 -0.404509 -0.449131 0.145933 -0.881467
--0.237127 0.172592 -0.404509 -0.449131 0.145933 -0.881467
--0.124363 0.090664 -0.475529 -0.449131 0.145933 -0.881467
--0.153872 -0.000154 -0.475529 -0.449131 0.145933 -0.881467
-0.327891 0.237610 -0.293893 0.689152 0.223921 -0.689151
-0.405146 -0.000154 -0.293893 0.689152 0.223921 -0.689151
-0.294530 -0.000154 -0.404509 0.689152 0.223921 -0.689151
-0.238401 0.172592 -0.404509 0.689152 0.223921 -0.689151
--0.153872 -0.475683 0.000000 -0.581229 -0.799991 -0.148951
--0.403872 -0.294047 0.000000 -0.581229 -0.799991 -0.148951
--0.384074 -0.279663 -0.154509 -0.581229 -0.799991 -0.148951
--0.146310 -0.452409 -0.154509 -0.581229 -0.799991 -0.148951
--0.047109 -0.147101 0.475529 0.000000 -0.472245 0.881467
--0.090181 -0.279663 0.404509 0.000000 -0.472245 0.881467
-0.091455 -0.279663 0.404509 0.000000 -0.472245 0.881467
-0.048383 -0.147101 0.475529 0.000000 -0.472245 0.881467
--0.237127 0.172592 -0.404509 -0.277578 0.382055 -0.881467
--0.090181 0.279354 -0.404509 -0.277578 0.382055 -0.881467
--0.047109 0.146792 -0.475529 -0.277578 0.382055 -0.881467
--0.124363 0.090664 -0.475529 -0.277578 0.382055 -0.881467
--0.153872 -0.475683 0.000000 0.000000 -0.988844 -0.148952
--0.146310 -0.452409 -0.154509 0.000000 -0.988844 -0.148952
-0.147583 -0.452409 -0.154509 0.000000 -0.988844 -0.148952
-0.155145 -0.475683 0.000000 0.000000 -0.988844 -0.148952
--0.384074 0.279354 0.154509 -0.581228 0.799992 0.148953
--0.146309 0.452100 0.154509 -0.581228 0.799992 0.148953
--0.153872 0.475374 0.000000 -0.581228 0.799992 0.148953
--0.403872 0.293738 0.000000 -0.581228 0.799992 0.148953
-0.385348 -0.279663 0.154509 0.855862 -0.278086 0.436083
-0.476165 -0.000154 0.154509 0.855862 -0.278086 0.436083
-0.405146 -0.000154 0.293893 0.855862 -0.278086 0.436083
-0.327891 -0.237919 0.293893 0.855862 -0.278086 0.436083
--0.124363 -0.090972 0.475529 -0.449131 -0.145933 0.881467
--0.153872 -0.000154 0.475529 -0.449131 -0.145933 0.881467
--0.293256 -0.000154 0.404509 -0.449131 -0.145933 0.881467
--0.237127 -0.172900 0.404509 -0.449131 -0.145933 0.881467
-0.327891 -0.237919 -0.293893 0.689151 -0.223920 -0.689152
-0.238401 -0.172900 -0.404509 0.689151 -0.223920 -0.689152
-0.294530 -0.000154 -0.404509 0.689151 -0.223920 -0.689152
-0.405146 -0.000154 -0.293893 0.689151 -0.223920 -0.689152
-0.327891 -0.237919 0.293893 0.528951 -0.728040 0.436084
-0.125637 -0.384865 0.293893 0.528951 -0.728040 0.436084
-0.147583 -0.452409 0.154509 0.528951 -0.728040 0.436084
-0.385348 -0.279663 0.154509 0.528951 -0.728040 0.436084
--0.499363 -0.000154 0.000000 -0.940448 -0.305567 -0.148952
--0.474891 -0.000154 -0.154509 -0.940448 -0.305567 -0.148952
--0.384074 -0.279663 -0.154509 -0.940448 -0.305567 -0.148952
--0.403872 -0.294047 0.000000 -0.940448 -0.305567 -0.148952
-0.155146 0.475374 0.000000 0.000000 0.988844 0.148952
--0.153872 0.475374 0.000000 0.000000 0.988844 0.148952
--0.146309 0.452100 0.154509 0.000000 0.988844 0.148952
-0.147583 0.452100 0.154509 0.000000 0.988844 0.148952
-0.048383 0.146792 -0.475529 0.000000 0.472245 -0.881467
--0.047109 0.146792 -0.475529 0.000000 0.472245 -0.881467
--0.090181 0.279354 -0.404509 0.000000 0.472245 -0.881467
-0.091455 0.279354 -0.404509 0.000000 0.472245 -0.881467
--0.124363 0.090664 0.475529 -0.449131 0.145933 0.881467
--0.237127 0.172592 0.404509 -0.449131 0.145933 0.881467
--0.293256 -0.000154 0.404509 -0.449131 0.145933 0.881467
--0.153872 -0.000154 0.475529 -0.449131 0.145933 0.881467
-0.327891 -0.237919 -0.293893 0.425919 -0.586227 -0.689152
-0.125637 -0.384865 -0.293893 0.425919 -0.586227 -0.689152
-0.091455 -0.279663 -0.404509 0.425919 -0.586227 -0.689152
-0.238401 -0.172900 -0.404509 0.425919 -0.586227 -0.689152
--0.090181 -0.279663 0.404509 0.000000 -0.724617 0.689152
--0.124363 -0.384865 0.293893 0.000000 -0.724617 0.689152
-0.125637 -0.384865 0.293893 0.000000 -0.724617 0.689152
-0.091455 -0.279663 0.404509 0.000000 -0.724617 0.689152
-0.385348 0.279354 0.154509 0.581228 0.799992 0.148953
-0.405146 0.293738 0.000000 0.581228 0.799992 0.148953
-0.155146 0.475374 0.000000 0.581228 0.799992 0.148953
-0.147583 0.452100 0.154509 0.581228 0.799992 0.148953
-0.238401 0.172592 -0.404509 0.277578 0.382055 -0.881467
-0.125637 0.090664 -0.475529 0.277578 0.382055 -0.881467
-0.048383 0.146792 -0.475529 0.277578 0.382055 -0.881467
-0.091455 0.279354 -0.404509 0.277578 0.382055 -0.881467
--0.499363 -0.000154 0.000000 -0.940447 0.305568 -0.148952
--0.403872 0.293738 0.000000 -0.940447 0.305568 -0.148952
--0.384074 0.279354 -0.154509 -0.940447 0.305568 -0.148952
--0.474891 -0.000154 -0.154509 -0.940447 0.305568 -0.148952
--0.124363 0.090664 0.475529 -0.277578 0.382055 0.881467
--0.047109 0.146792 0.475529 -0.277578 0.382055 0.881467
--0.090181 0.279354 0.404509 -0.277578 0.382055 0.881467
--0.237127 0.172592 0.404509 -0.277578 0.382055 0.881467
--0.146310 -0.452409 -0.154509 0.000000 -0.899906 -0.436085
--0.124363 -0.384865 -0.293893 0.000000 -0.899906 -0.436085
-0.125637 -0.384865 -0.293893 0.000000 -0.899906 -0.436085
-0.147583 -0.452409 -0.154509 0.000000 -0.899906 -0.436085
--0.237127 -0.172900 0.404509 -0.425920 -0.586227 0.689152
--0.326618 -0.237918 0.293893 -0.425920 -0.586227 0.689152
--0.124363 -0.384865 0.293893 -0.425920 -0.586227 0.689152
--0.090181 -0.279663 0.404509 -0.425920 -0.586227 0.689152
-0.385348 0.279354 0.154509 0.940447 0.305568 0.148952
-0.476165 -0.000154 0.154509 0.940447 0.305568 0.148952
-0.500637 -0.000154 0.000000 0.940447 0.305568 0.148952
-0.405146 0.293738 0.000000 0.940447 0.305568 0.148952
-0.238401 0.172592 -0.404509 0.449131 0.145931 -0.881468
-0.294530 -0.000154 -0.404509 0.449131 0.145931 -0.881468
-0.155145 -0.000154 -0.475529 0.449131 0.145931 -0.881468
-0.125637 0.090664 -0.475529 0.449131 0.145931 -0.881468
--0.153872 0.475374 0.000000 -0.581228 0.799992 -0.148953
--0.146309 0.452100 -0.154509 -0.581228 0.799992 -0.148953
--0.384074 0.279354 -0.154509 -0.581228 0.799992 -0.148953
--0.403872 0.293738 0.000000 -0.581228 0.799992 -0.148953
-0.091455 0.279354 0.404509 0.000000 0.472245 0.881467
--0.090181 0.279354 0.404509 0.000000 0.472245 0.881467
--0.047109 0.146792 0.475529 0.000000 0.472245 0.881467
-0.048383 0.146792 0.475529 0.000000 0.472245 0.881467
-0.385348 -0.279663 0.154509 0.940448 -0.305567 0.148952
-0.405146 -0.294047 0.000000 0.940448 -0.305567 0.148952
-0.500637 -0.000154 0.000000 0.940448 -0.305567 0.148952
-0.476165 -0.000154 0.154509 0.940448 -0.305567 0.148952
--0.384074 -0.279663 -0.154509 -0.528951 -0.728038 -0.436086
--0.326618 -0.237918 -0.293893 -0.528951 -0.728038 -0.436086
--0.124363 -0.384865 -0.293893 -0.528951 -0.728038 -0.436086
--0.146310 -0.452409 -0.154509 -0.528951 -0.728038 -0.436086
--0.237127 -0.172900 0.404509 -0.689151 -0.223919 0.689153
--0.293256 -0.000154 0.404509 -0.689151 -0.223919 0.689153
--0.403872 -0.000154 0.293893 -0.689151 -0.223919 0.689153
--0.326618 -0.237918 0.293893 -0.689151 -0.223919 0.689153
-0.238401 -0.172900 -0.404509 0.449131 -0.145931 -0.881468
-0.125637 -0.090972 -0.475529 0.449131 -0.145931 -0.881468
-0.155145 -0.000154 -0.475529 0.449131 -0.145931 -0.881468
-0.294530 -0.000154 -0.404509 0.449131 -0.145931 -0.881468
--0.293256 -0.000154 0.404509 -0.689152 0.223921 0.689151
--0.237127 0.172592 0.404509 -0.689152 0.223921 0.689151
--0.326617 0.237610 0.293893 -0.689152 0.223921 0.689151
--0.403872 -0.000154 0.293893 -0.689152 0.223921 0.689151
-0.147583 0.452100 -0.154509 0.000000 0.988844 -0.148952
--0.146309 0.452100 -0.154509 0.000000 0.988844 -0.148952
--0.153872 0.475374 0.000000 0.000000 0.988844 -0.148952
-0.155146 0.475374 0.000000 0.000000 0.988844 -0.148952
-0.125637 0.090664 0.475529 0.277578 0.382055 0.881467
-0.238401 0.172592 0.404509 0.277578 0.382055 0.881467
-0.091455 0.279354 0.404509 0.277578 0.382055 0.881467
-0.048383 0.146792 0.475529 0.277578 0.382055 0.881467
--0.124363 -0.090972 -0.475529 -0.126554 -0.091947 -0.987689
--0.153872 -0.000154 -0.475529 -0.126554 -0.091947 -0.987689
-0.000637 -0.000154 -0.500000 -0.126554 -0.091947 -0.987689
--0.047109 -0.147101 -0.475529 -0.126554 -0.091947 -0.987689
--0.403872 -0.000154 -0.293893 -0.855863 -0.278085 -0.436082
--0.326618 -0.237918 -0.293893 -0.855863 -0.278085 -0.436082
--0.384074 -0.279663 -0.154509 -0.855863 -0.278085 -0.436082
--0.474891 -0.000154 -0.154509 -0.855863 -0.278085 -0.436082
-0.385348 -0.279663 0.154509 0.581227 -0.799993 0.148951
-0.147583 -0.452409 0.154509 0.581227 -0.799993 0.148951
-0.155145 -0.475683 0.000000 0.581227 -0.799993 0.148951
-0.405146 -0.294047 0.000000 0.581227 -0.799993 0.148951
-0.238401 -0.172900 -0.404509 0.277580 -0.382053 -0.881467
-0.091455 -0.279663 -0.404509 0.277580 -0.382053 -0.881467
-0.048383 -0.147101 -0.475529 0.277580 -0.382053 -0.881467
-0.125637 -0.090972 -0.475529 0.277580 -0.382053 -0.881467
--0.326617 0.237610 -0.293893 -0.855862 0.278087 -0.436083
--0.403872 -0.000154 -0.293893 -0.855862 0.278087 -0.436083
--0.474891 -0.000154 -0.154509 -0.855862 0.278087 -0.436083
--0.384074 0.279354 -0.154509 -0.855862 0.278087 -0.436083
-0.155146 0.475374 0.000000 0.581228 0.799992 -0.148953
-0.405146 0.293738 0.000000 0.581228 0.799992 -0.148953
-0.385348 0.279354 -0.154509 0.581228 0.799992 -0.148953
-0.147583 0.452100 -0.154509 0.581228 0.799992 -0.148953
-0.125637 0.090664 0.475529 0.449131 0.145933 0.881467
-0.155146 -0.000154 0.475529 0.449131 0.145933 0.881467
-0.294530 -0.000154 0.404509 0.449131 0.145933 0.881467
-0.238401 0.172592 0.404509 0.449131 0.145933 0.881467
--0.124363 0.090664 -0.475529 -0.126554 0.091947 -0.987689
--0.047109 0.146792 -0.475529 -0.126554 0.091947 -0.987689
-0.000637 -0.000154 -0.500000 -0.126554 0.091947 -0.987689
--0.153872 -0.000154 -0.475529 -0.126554 0.091947 -0.987689
--0.384074 0.279354 -0.154509 -0.528951 0.728040 -0.436084
--0.146309 0.452100 -0.154509 -0.528951 0.728040 -0.436084
--0.124363 0.384556 -0.293893 -0.528951 0.728040 -0.436084
--0.326617 0.237610 -0.293893 -0.528951 0.728040 -0.436084
-0.125637 -0.090972 0.475529 0.449131 -0.145933 0.881467
-0.238401 -0.172900 0.404509 0.449131 -0.145933 0.881467
-0.294530 -0.000154 0.404509 0.449131 -0.145933 0.881467
-0.155146 -0.000154 0.475529 0.449131 -0.145933 0.881467
--0.237127 0.172592 0.404509 -0.425919 0.586229 0.689151
--0.090181 0.279354 0.404509 -0.425919 0.586229 0.689151
--0.124363 0.384556 0.293893 -0.425919 0.586229 0.689151
--0.326617 0.237610 0.293893 -0.425919 0.586229 0.689151
--0.124363 -0.384865 0.293893 -0.528951 -0.728038 0.436086
--0.326618 -0.237918 0.293893 -0.528951 -0.728038 0.436086
--0.384074 -0.279663 0.154509 -0.528951 -0.728038 0.436086
--0.146310 -0.452409 0.154509 -0.528951 -0.728038 0.436086
-0.500637 -0.000154 0.000000 0.940447 0.305568 -0.148952
-0.476165 -0.000154 -0.154509 0.940447 0.305568 -0.148952
-0.385348 0.279354 -0.154509 0.940447 0.305568 -0.148952
-0.405146 0.293738 0.000000 0.940447 0.305568 -0.148952
--0.124363 -0.384865 -0.293893 -0.425920 -0.586227 -0.689152
--0.326618 -0.237918 -0.293893 -0.425920 -0.586227 -0.689152
--0.237127 -0.172900 -0.404509 -0.425920 -0.586227 -0.689152
--0.090181 -0.279663 -0.404509 -0.425920 -0.586227 -0.689152
-0.125637 0.384556 0.293893 0.000000 0.724617 0.689152
--0.124363 0.384556 0.293893 0.000000 0.724617 0.689152
--0.090181 0.279354 0.404509 0.000000 0.724617 0.689152
-0.091455 0.279354 0.404509 0.000000 0.724617 0.689152
-0.048383 0.146792 -0.475529 0.048339 0.148774 -0.987689
-0.125637 0.090664 -0.475529 0.048339 0.148774 -0.987689
-0.000637 -0.000154 -0.500000 0.048339 0.148774 -0.987689
--0.047109 0.146792 -0.475529 0.048339 0.148774 -0.987689
--0.124363 -0.384865 0.293893 0.000000 -0.899906 0.436085
--0.146310 -0.452409 0.154509 0.000000 -0.899906 0.436085
-0.147583 -0.452409 0.154509 0.000000 -0.899906 0.436085
-0.125637 -0.384865 0.293893 0.000000 -0.899906 0.436085
--0.124363 -0.384865 -0.293893 0.000000 -0.724617 -0.689152
--0.090181 -0.279663 -0.404509 0.000000 -0.724617 -0.689152
-0.091455 -0.279663 -0.404509 0.000000 -0.724617 -0.689152
-0.125637 -0.384865 -0.293893 0.000000 -0.724617 -0.689152
-0.125637 0.384556 -0.293893 0.000000 0.899906 -0.436085
--0.124363 0.384556 -0.293893 0.000000 0.899906 -0.436085
--0.146309 0.452100 -0.154509 0.000000 0.899906 -0.436085
-0.147583 0.452100 -0.154509 0.000000 0.899906 -0.436085
-0.500637 -0.000154 0.000000 0.940447 -0.305569 -0.148955
-0.405146 -0.294047 0.000000 0.940447 -0.305569 -0.148955
-0.385347 -0.279663 -0.154509 0.940447 -0.305569 -0.148955
-0.476165 -0.000154 -0.154509 0.940447 -0.305569 -0.148955
-0.125637 -0.090972 0.475529 0.277580 -0.382053 0.881467
-0.048383 -0.147101 0.475529 0.277580 -0.382053 0.881467
-0.091455 -0.279663 0.404509 0.277580 -0.382053 0.881467
-0.238401 -0.172900 0.404509 0.277580 -0.382053 0.881467
--0.326618 -0.237918 0.293893 -0.855861 -0.278086 0.436084
--0.403872 -0.000154 0.293893 -0.855861 -0.278086 0.436084
--0.474892 -0.000154 0.154509 -0.855861 -0.278086 0.436084
--0.384074 -0.279663 0.154509 -0.855861 -0.278086 0.436084
--0.326618 -0.237918 -0.293893 -0.689151 -0.223919 -0.689153
--0.403872 -0.000154 -0.293893 -0.689151 -0.223919 -0.689153
--0.293256 -0.000154 -0.404509 -0.689151 -0.223919 -0.689153
--0.237127 -0.172900 -0.404509 -0.689151 -0.223919 -0.689153
-0.125637 0.090664 -0.475529 0.156229 0.050761 -0.986416
-0.155145 -0.000154 -0.475529 0.156229 0.050761 -0.986416
-0.000637 -0.000154 -0.500000 0.156229 0.050761 -0.986416
-0.238401 0.172592 0.404509 0.425919 0.586229 0.689151
-0.327891 0.237610 0.293893 0.425919 0.586229 0.689151
-0.125637 0.384556 0.293893 0.425919 0.586229 0.689151
-0.091455 0.279354 0.404509 0.425919 0.586229 0.689151
-0.155145 -0.475683 0.000000 0.581228 -0.799992 -0.148953
-0.147583 -0.452409 -0.154509 0.581228 -0.799992 -0.148953
-0.385347 -0.279663 -0.154509 0.581228 -0.799992 -0.148953
-0.405146 -0.294047 0.000000 0.581228 -0.799992 -0.148953
-0.155145 -0.000154 -0.475529 0.156229 -0.050761 -0.986416
-0.125637 -0.090972 -0.475529 0.156229 -0.050761 -0.986416
-0.000637 -0.000154 -0.500000 0.156229 -0.050761 -0.986416
--0.403872 -0.000154 -0.293893 -0.689152 0.223921 -0.689151
--0.326617 0.237610 -0.293893 -0.689152 0.223921 -0.689151
--0.237127 0.172592 -0.404509 -0.689152 0.223921 -0.689151
--0.293256 -0.000154 -0.404509 -0.689152 0.223921 -0.689151
-0.048383 -0.147101 0.475529 0.000000 -0.164267 0.986416
-0.000637 -0.000154 0.500000 0.000000 -0.164267 0.986416
--0.047109 -0.147101 0.475529 0.000000 -0.164267 0.986416
--0.090181 -0.279663 -0.404509 0.000000 -0.472245 -0.881467
--0.047109 -0.147101 -0.475529 0.000000 -0.472245 -0.881467
-0.048383 -0.147101 -0.475529 0.000000 -0.472245 -0.881467
-0.091455 -0.279663 -0.404509 0.000000 -0.472245 -0.881467
-0.385348 0.279354 -0.154509 0.528951 0.728040 -0.436084
-0.327891 0.237610 -0.293893 0.528951 0.728040 -0.436084
-0.125637 0.384556 -0.293893 0.528951 0.728040 -0.436084
-0.147583 0.452100 -0.154509 0.528951 0.728040 -0.436084
-0.000637 -0.000154 0.500000 -0.126554 -0.091947 0.987689
--0.153872 -0.000154 0.475529 -0.126554 -0.091947 0.987689
--0.124363 -0.090972 0.475529 -0.126554 -0.091947 0.987689
--0.047109 -0.147101 0.475529 -0.126554 -0.091947 0.987689
-0.238401 0.172592 0.404509 0.689152 0.223921 0.689151
-0.294530 -0.000154 0.404509 0.689152 0.223921 0.689151
-0.405146 -0.000154 0.293893 0.689152 0.223921 0.689151
-0.327891 0.237610 0.293893 0.689152 0.223921 0.689151
--0.403872 -0.000154 0.293893 -0.855860 0.278088 0.436086
--0.326617 0.237610 0.293893 -0.855860 0.278088 0.436086
--0.384074 0.279354 0.154509 -0.855860 0.278088 0.436086
--0.474892 -0.000154 0.154509 -0.855860 0.278088 0.436086
--0.384074 -0.279663 0.154509 -0.581229 -0.799991 0.148951
--0.403872 -0.294047 0.000000 -0.581229 -0.799991 0.148951
--0.153872 -0.475683 0.000000 -0.581229 -0.799991 0.148951
--0.146310 -0.452409 0.154509 -0.581229 -0.799991 0.148951
-4 0 1 2 3
-4 4 5 6 7
-4 8 9 10 11
-4 12 13 14 15
-4 16 17 18 19
-4 20 21 22 23
-4 24 25 26 27
-4 28 29 30 31
-4 32 33 34 35
-4 36 37 38 39
-4 40 41 42 43
-4 44 45 46 47
-4 48 49 50 51
-4 52 53 54 55
-4 56 57 58 59
-4 60 61 62 63
-4 64 65 66 67
-3 68 69 70
-4 71 72 73 74
-4 75 76 77 78
-4 79 80 81 82
-4 83 84 85 86
-4 87 88 89 90
-4 91 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-4 139 140 141 142
-4 143 144 145 146
-4 147 148 149 150
-4 151 152 153 154
-4 155 156 157 158
-4 159 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-4 175 176 177 178
-4 179 180 181 182
-4 183 184 185 186
-4 187 188 189 190
-4 191 192 193 194
-4 195 196 197 198
-4 199 200 201 202
-4 203 204 205 206
-4 207 208 209 210
-4 211 212 213 214
-4 215 216 217 218
-4 219 220 221 222
-4 223 224 225 226
-4 227 228 229 230
-4 231 232 233 234
-4 235 236 237 238
-4 239 240 241 242
-4 243 244 245 246
-4 247 248 249 250
-4 251 252 253 254
-4 255 256 257 258
-4 259 260 261 262
-4 263 264 265 266
-4 267 268 269 270
-4 271 272 273 274
-4 275 276 277 278
-4 279 280 281 282
-4 283 284 285 286
-4 287 288 289 290
-4 291 292 293 294
-4 295 296 297 298
-4 299 300 301 302
-4 303 304 305 306
-4 307 308 309 310
-4 311 312 313 314
-4 315 316 317 318
-3 319 320 321
-4 322 323 324 325
-4 326 327 328 329
-3 330 331 332
-4 333 334 335 336
-3 337 338 339
-4 340 341 342 343
-4 344 345 346 347
-4 348 349 350 351
-4 352 353 354 355
-4 356 357 358 359
-4 360 361 362 363
diff --git a/src/examples/evas/resources/models/convex_hull/sphere_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/sphere_blender_ch_test.ply
deleted file mode 100644
index 0c9abc0b19..0000000000
--- a/src/examples/evas/resources/models/convex_hull/sphere_blender_ch_test.ply
+++ /dev/null
@@ -1,194 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 92
-property float x
-property float y
-property float z
-element face 92
-property list uchar uint vertex_indices
-end_header
-0.155145 -0.475683 0.000000
-0.147583 -0.452409 0.154509
--0.146310 -0.452409 0.154509
--0.153872 -0.475683 0.000000
-0.048383 -0.147101 -0.475529
--0.047109 -0.147101 -0.475529
-0.000637 -0.000154 -0.500000
-0.125637 -0.090972 -0.475529
--0.326617 0.237610 -0.293893
--0.124363 0.384556 -0.293893
--0.090181 0.279354 -0.404509
--0.237127 0.172592 -0.404509
-0.327891 -0.237919 0.293893
-0.405146 -0.000154 0.293893
-0.294530 -0.000154 0.404509
-0.238401 -0.172900 0.404509
-0.476165 -0.000154 -0.154509
-0.385347 -0.279663 -0.154509
-0.327891 -0.237919 -0.293893
-0.405146 -0.000154 -0.293893
--0.124363 0.090664 0.475529
--0.153872 -0.000154 0.475529
-0.000637 -0.000154 0.500000
--0.047109 0.146792 0.475529
--0.326617 0.237610 0.293893
--0.124363 0.384556 0.293893
--0.146309 0.452100 0.154509
--0.384074 0.279354 0.154509
--0.384074 -0.279663 0.154509
--0.474892 -0.000154 0.154509
--0.499363 -0.000154 0.000000
--0.403872 -0.294047 0.000000
--0.124363 -0.090972 0.475529
--0.237127 -0.172900 0.404509
--0.090181 -0.279663 0.404509
--0.047109 -0.147101 0.475529
-0.327891 0.237610 -0.293893
-0.385348 0.279354 -0.154509
-0.091455 0.279354 -0.404509
-0.125637 0.384556 -0.293893
-0.125637 0.090664 0.475529
-0.048383 0.146792 0.475529
-0.091455 -0.279663 0.404509
-0.125637 -0.384865 0.293893
-0.147583 0.452100 0.154509
-0.125637 0.384556 0.293893
--0.124363 -0.090972 -0.475529
--0.090181 -0.279663 -0.404509
--0.237127 -0.172900 -0.404509
--0.293256 -0.000154 -0.404509
--0.153872 -0.000154 -0.475529
-0.147583 -0.452409 -0.154509
-0.125637 -0.384865 -0.293893
-0.155146 -0.000154 0.475529
-0.327891 0.237610 0.293893
-0.385348 0.279354 0.154509
-0.238401 0.172592 -0.404509
--0.403872 0.293738 0.000000
-0.048383 -0.147101 0.475529
-0.125637 -0.090972 0.475529
-0.476165 -0.000154 0.154509
--0.124363 0.090664 -0.475529
-0.294530 -0.000154 -0.404509
--0.384074 -0.279663 -0.154509
--0.146310 -0.452409 -0.154509
--0.047109 0.146792 -0.475529
--0.153872 0.475374 0.000000
-0.385348 -0.279663 0.154509
--0.293256 -0.000154 0.404509
-0.238401 -0.172900 -0.404509
--0.474891 -0.000154 -0.154509
-0.155146 0.475374 0.000000
-0.048383 0.146792 -0.475529
--0.237127 0.172592 0.404509
-0.091455 -0.279663 -0.404509
--0.124363 -0.384865 0.293893
-0.405146 0.293738 0.000000
-0.125637 0.090664 -0.475529
--0.384074 0.279354 -0.154509
--0.090181 0.279354 0.404509
--0.124363 -0.384865 -0.293893
--0.326618 -0.237918 0.293893
-0.500637 -0.000154 0.000000
-0.155145 -0.000154 -0.475529
--0.146309 0.452100 -0.154509
-0.091455 0.279354 0.404509
-0.405146 -0.294047 0.000000
--0.326618 -0.237918 -0.293893
--0.403872 -0.000154 0.293893
-0.147583 0.452100 -0.154509
-0.238401 0.172592 0.404509
--0.403872 -0.000154 -0.293893
-4 0 1 2 3
-4 4 5 6 7
-4 8 9 10 11
-4 12 13 14 15
-4 16 17 18 19
-4 20 21 22 23
-4 24 25 26 27
-4 28 29 30 31
-4 32 33 34 35
-4 19 36 37 16
-4 38 10 9 39
-4 22 40 41 23
-4 42 43 12 15
-4 44 26 25 45
-4 46 5 47 48
-4 49 50 46 48
-4 51 52 18 17
-3 22 53 40
-4 45 54 55 44
-4 39 36 56 38
-4 27 57 30 29
-4 22 58 59 53
-4 54 13 60 55
-4 49 11 61 50
-4 36 19 62 56
-4 3 31 63 64
-4 35 34 42 58
-4 11 10 65 61
-4 51 0 3 64
-4 27 26 66 57
-4 67 60 13 12
-4 32 21 68 33
-4 18 69 62 19
-4 12 43 1 67
-4 30 70 63 31
-4 71 66 26 44
-4 72 65 10 38
-4 20 73 68 21
-4 18 52 74 69
-4 34 75 43 42
-4 55 76 71 44
-4 56 77 72 38
-4 30 57 78 70
-4 20 23 79 73
-4 64 80 52 51
-4 33 81 75 34
-4 55 60 82 76
-4 56 62 83 77
-4 66 84 78 57
-4 85 79 23 41
-4 67 86 82 60
-4 63 87 80 64
-4 33 68 88 81
-4 69 7 83 62
-4 68 73 24 88
-4 89 84 66 71
-4 40 90 85 41
-4 46 50 6 5
-4 91 87 63 70
-4 0 86 67 1
-4 69 74 4 7
-4 8 91 70 78
-4 71 76 37 89
-4 40 53 14 90
-4 61 65 6 50
-4 78 84 9 8
-4 59 15 14 53
-4 73 79 25 24
-4 75 81 28 2
-4 82 16 37 76
-4 80 87 48 47
-4 45 25 79 85
-4 72 77 6 65
-4 75 2 1 43
-4 80 47 74 52
-4 39 9 84 89
-4 82 86 17 16
-4 59 58 42 15
-4 81 88 29 28
-4 87 91 49 48
-3 77 83 6
-4 90 54 45 85
-4 0 51 17 86
-3 83 7 6
-4 91 8 11 49
-3 58 22 35
-4 47 5 4 74
-4 37 36 39 89
-4 22 21 32 35
-4 90 14 13 54
-4 88 24 27 29
-4 28 31 3 2
diff --git a/src/examples/evas/resources/models/convex_hull/torus_blender_ch.ply b/src/examples/evas/resources/models/convex_hull/torus_blender_ch.ply
deleted file mode 100644
index 4f0d3c2d6b..0000000000
--- a/src/examples/evas/resources/models/convex_hull/torus_blender_ch.ply
+++ /dev/null
@@ -1,12313 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 9800
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 2500
-property list uchar uint vertex_indices
-end_header
-0.512862 0.000000 0.000000 0.996065 0.062667 0.062666
-0.508818 0.064279 0.000000 0.996065 0.062667 0.062666
-0.507481 0.064110 0.021426 0.996065 0.062667 0.062666
-0.511514 0.000000 0.021426 0.996065 0.062667 0.062666
-0.511514 0.000000 0.021426 0.980417 0.061683 0.187026
-0.507481 0.064110 0.021426 0.980417 0.061683 0.187026
-0.503490 0.063606 0.042515 0.980417 0.061683 0.187026
-0.507491 0.000000 0.042515 0.980417 0.061683 0.187026
-0.507491 0.000000 0.042515 0.949359 0.059728 0.308465
-0.503490 0.063606 0.042515 0.949359 0.059728 0.308465
-0.496908 0.062774 0.062932 0.949359 0.059728 0.308465
-0.500857 0.000000 0.062932 0.949359 0.059728 0.308465
-0.500857 0.000000 0.062932 0.903365 0.056835 0.425091
-0.496908 0.062774 0.062932 0.903365 0.056835 0.425091
-0.487839 0.061628 0.082358 0.903365 0.056835 0.425091
-0.491716 0.000000 0.082358 0.903365 0.056835 0.425091
-0.491716 0.000000 0.082358 0.843139 0.053046 0.535073
-0.487839 0.061628 0.082358 0.843139 0.053046 0.535073
-0.476426 0.060187 0.100484 0.843139 0.053046 0.535073
-0.480213 0.000000 0.100484 0.843139 0.053046 0.535073
-0.480213 0.000000 0.100484 0.769610 0.048420 0.636676
-0.476426 0.060187 0.100484 0.769610 0.048420 0.636676
-0.462850 0.058472 0.117026 0.769610 0.048420 0.636676
-0.466528 0.000000 0.117026 0.769610 0.048420 0.636676
-0.466528 0.000000 0.117026 0.683913 0.043028 0.728293
-0.462850 0.058472 0.117026 0.683913 0.043028 0.728293
-0.447323 0.056510 0.131722 0.683913 0.043028 0.728293
-0.450878 0.000000 0.131722 0.683913 0.043028 0.728293
-0.450878 0.000000 0.131722 0.587384 0.036955 0.808464
-0.447323 0.056510 0.131722 0.587384 0.036955 0.808464
-0.430092 0.054333 0.144341 0.587384 0.036955 0.808464
-0.433510 0.000000 0.144341 0.587384 0.036955 0.808464
-0.433510 0.000000 0.144341 0.481533 0.030295 0.875904
-0.430092 0.054333 0.144341 0.481533 0.030295 0.875904
-0.411427 0.051975 0.154684 0.481533 0.030295 0.875904
-0.414697 0.000000 0.154684 0.481533 0.030295 0.875904
-0.414697 0.000000 0.154684 0.368025 0.023154 0.929527
-0.411427 0.051975 0.154684 0.368025 0.023154 0.929527
-0.391623 0.049474 0.162587 0.368025 0.023154 0.929527
-0.394736 0.000000 0.162587 0.368025 0.023154 0.929527
-0.394736 0.000000 0.162587 0.248660 0.015644 0.968465
-0.391623 0.049474 0.162587 0.248660 0.015644 0.968465
-0.370993 0.046867 0.167926 0.248660 0.015644 0.968465
-0.373942 0.000000 0.167926 0.248660 0.015644 0.968465
-0.373942 0.000000 0.167926 0.125330 0.007885 0.992084
-0.370993 0.046867 0.167926 0.125330 0.007885 0.992084
-0.349862 0.044198 0.170617 0.125330 0.007885 0.992084
-0.352643 0.000000 0.170617 0.125330 0.007885 0.992084
-0.352643 0.000000 0.170617 -0.000000 0.000000 1.000000
-0.349862 0.044198 0.170617 -0.000000 0.000000 1.000000
-0.328563 0.041507 0.170617 -0.000000 0.000000 1.000000
-0.331174 0.000000 0.170617 -0.000000 0.000000 1.000000
-0.331174 0.000000 0.170617 -0.125330 -0.007885 0.992084
-0.328563 0.041507 0.170617 -0.125330 -0.007885 0.992084
-0.307431 0.038838 0.167926 -0.125330 -0.007885 0.992084
-0.309875 0.000000 0.167926 -0.125330 -0.007885 0.992084
-0.309875 0.000000 0.167926 -0.248659 -0.015644 0.968465
-0.307431 0.038838 0.167926 -0.248659 -0.015644 0.968465
-0.286801 0.036231 0.162587 -0.248659 -0.015644 0.968465
-0.289081 0.000000 0.162587 -0.248659 -0.015644 0.968465
-0.289081 0.000000 0.162587 -0.368026 -0.023154 0.929527
-0.286801 0.036231 0.162587 -0.368026 -0.023154 0.929527
-0.266997 0.033730 0.154684 -0.368026 -0.023154 0.929527
-0.269120 0.000000 0.154684 -0.368026 -0.023154 0.929527
-0.269120 0.000000 0.154684 -0.481532 -0.030296 0.875905
-0.266997 0.033730 0.154684 -0.481532 -0.030296 0.875905
-0.248333 0.031372 0.144341 -0.481532 -0.030296 0.875905
-0.250306 0.000000 0.144341 -0.481532 -0.030296 0.875905
-0.250306 0.000000 0.144341 -0.587384 -0.036955 0.808464
-0.248333 0.031372 0.144341 -0.587384 -0.036955 0.808464
-0.231101 0.029195 0.131722 -0.587384 -0.036955 0.808464
-0.232938 0.000000 0.131722 -0.587384 -0.036955 0.808464
-0.232938 0.000000 0.131722 -0.683913 -0.043028 0.728293
-0.231101 0.029195 0.131722 -0.683913 -0.043028 0.728293
-0.215575 0.027233 0.117026 -0.683913 -0.043028 0.728293
-0.217288 0.000000 0.117026 -0.683913 -0.043028 0.728293
-0.217288 0.000000 0.117026 -0.769610 -0.048419 0.636676
-0.215575 0.027233 0.117026 -0.769610 -0.048419 0.636676
-0.201998 0.025518 0.100484 -0.769610 -0.048419 0.636676
-0.203603 0.000000 0.100484 -0.769610 -0.048419 0.636676
-0.203603 0.000000 0.100484 -0.843139 -0.053045 0.535073
-0.201998 0.025518 0.100484 -0.843139 -0.053045 0.535073
-0.190585 0.024077 0.082358 -0.843139 -0.053045 0.535073
-0.192100 0.000000 0.082358 -0.843139 -0.053045 0.535073
-0.192100 0.000000 0.082358 -0.903365 -0.056834 0.425091
-0.190585 0.024077 0.082358 -0.903365 -0.056834 0.425091
-0.181516 0.022931 0.062932 -0.903365 -0.056834 0.425091
-0.182959 0.000000 0.062932 -0.903365 -0.056834 0.425091
-0.182959 0.000000 0.062932 -0.949359 -0.059728 0.308465
-0.181516 0.022931 0.062932 -0.949359 -0.059728 0.308465
-0.174935 0.022099 0.042515 -0.949359 -0.059728 0.308465
-0.176325 0.000000 0.042515 -0.949359 -0.059728 0.308465
-0.176325 0.000000 0.042515 -0.980417 -0.061682 0.187025
-0.174935 0.022099 0.042515 -0.980417 -0.061682 0.187025
-0.170943 0.021595 0.021426 -0.980417 -0.061682 0.187025
-0.172302 0.000000 0.021426 -0.980417 -0.061682 0.187025
-0.172302 0.000000 0.021426 -0.996065 -0.062668 0.062667
-0.170943 0.021595 0.021426 -0.996065 -0.062668 0.062667
-0.169606 0.021426 0.000000 -0.996065 -0.062668 0.062667
-0.170954 0.000000 0.000000 -0.996065 -0.062668 0.062667
-0.170954 0.000000 0.000000 -0.996065 -0.062668 -0.062667
-0.169606 0.021426 0.000000 -0.996065 -0.062668 -0.062667
-0.170943 0.021595 -0.021426 -0.996065 -0.062668 -0.062667
-0.172302 0.000000 -0.021426 -0.996065 -0.062668 -0.062667
-0.172302 0.000000 -0.021426 -0.980417 -0.061682 -0.187025
-0.170943 0.021595 -0.021426 -0.980417 -0.061682 -0.187025
-0.174935 0.022099 -0.042515 -0.980417 -0.061682 -0.187025
-0.176325 0.000000 -0.042515 -0.980417 -0.061682 -0.187025
-0.176325 0.000000 -0.042515 -0.949359 -0.059728 -0.308465
-0.174935 0.022099 -0.042515 -0.949359 -0.059728 -0.308465
-0.181516 0.022931 -0.062932 -0.949359 -0.059728 -0.308465
-0.182959 0.000000 -0.062932 -0.949359 -0.059728 -0.308465
-0.182959 0.000000 -0.062932 -0.903365 -0.056834 -0.425091
-0.181516 0.022931 -0.062932 -0.903365 -0.056834 -0.425091
-0.190585 0.024077 -0.082358 -0.903365 -0.056834 -0.425091
-0.192100 0.000000 -0.082358 -0.903365 -0.056834 -0.425091
-0.192100 0.000000 -0.082358 -0.843139 -0.053045 -0.535073
-0.190585 0.024077 -0.082358 -0.843139 -0.053045 -0.535073
-0.201998 0.025518 -0.100484 -0.843139 -0.053045 -0.535073
-0.203603 0.000000 -0.100484 -0.843139 -0.053045 -0.535073
-0.203603 0.000000 -0.100484 -0.769610 -0.048419 -0.636676
-0.201998 0.025518 -0.100484 -0.769610 -0.048419 -0.636676
-0.215575 0.027233 -0.117026 -0.769610 -0.048419 -0.636676
-0.217288 0.000000 -0.117026 -0.769610 -0.048419 -0.636676
-0.217288 0.000000 -0.117026 -0.683913 -0.043028 -0.728293
-0.215575 0.027233 -0.117026 -0.683913 -0.043028 -0.728293
-0.231101 0.029195 -0.131722 -0.683913 -0.043028 -0.728293
-0.232938 0.000000 -0.131722 -0.683913 -0.043028 -0.728293
-0.232938 0.000000 -0.131722 -0.587384 -0.036955 -0.808464
-0.231101 0.029195 -0.131722 -0.587384 -0.036955 -0.808464
-0.248333 0.031372 -0.144341 -0.587384 -0.036955 -0.808464
-0.250306 0.000000 -0.144341 -0.587384 -0.036955 -0.808464
-0.250306 0.000000 -0.144341 -0.481532 -0.030296 -0.875905
-0.248333 0.031372 -0.144341 -0.481532 -0.030296 -0.875905
-0.266997 0.033730 -0.154684 -0.481532 -0.030296 -0.875905
-0.269120 0.000000 -0.154684 -0.481532 -0.030296 -0.875905
-0.269120 0.000000 -0.154684 -0.368026 -0.023154 -0.929527
-0.266997 0.033730 -0.154684 -0.368026 -0.023154 -0.929527
-0.286801 0.036231 -0.162587 -0.368026 -0.023154 -0.929527
-0.289081 0.000000 -0.162587 -0.368026 -0.023154 -0.929527
-0.289081 0.000000 -0.162587 -0.248659 -0.015644 -0.968465
-0.286801 0.036231 -0.162587 -0.248659 -0.015644 -0.968465
-0.307431 0.038838 -0.167926 -0.248659 -0.015644 -0.968465
-0.309875 0.000000 -0.167926 -0.248659 -0.015644 -0.968465
-0.309875 0.000000 -0.167926 -0.125330 -0.007885 -0.992084
-0.307431 0.038838 -0.167926 -0.125330 -0.007885 -0.992084
-0.328563 0.041507 -0.170617 -0.125330 -0.007885 -0.992084
-0.331174 0.000000 -0.170617 -0.125330 -0.007885 -0.992084
-0.331174 0.000000 -0.170617 -0.000000 0.000000 -1.000000
-0.328563 0.041507 -0.170617 -0.000000 0.000000 -1.000000
-0.349862 0.044198 -0.170617 -0.000000 0.000000 -1.000000
-0.352643 0.000000 -0.170617 -0.000000 0.000000 -1.000000
-0.352643 0.000000 -0.170617 0.125330 0.007885 -0.992084
-0.349862 0.044198 -0.170617 0.125330 0.007885 -0.992084
-0.370993 0.046867 -0.167926 0.125330 0.007885 -0.992084
-0.373942 0.000000 -0.167926 0.125330 0.007885 -0.992084
-0.373942 0.000000 -0.167926 0.248660 0.015644 -0.968465
-0.370993 0.046867 -0.167926 0.248660 0.015644 -0.968465
-0.391623 0.049474 -0.162587 0.248660 0.015644 -0.968465
-0.394736 0.000000 -0.162587 0.248660 0.015644 -0.968465
-0.394736 0.000000 -0.162587 0.368025 0.023154 -0.929527
-0.391623 0.049474 -0.162587 0.368025 0.023154 -0.929527
-0.411427 0.051975 -0.154684 0.368025 0.023154 -0.929527
-0.414697 0.000000 -0.154684 0.368025 0.023154 -0.929527
-0.414697 0.000000 -0.154684 0.481533 0.030295 -0.875904
-0.411427 0.051975 -0.154684 0.481533 0.030295 -0.875904
-0.430092 0.054333 -0.144341 0.481533 0.030295 -0.875904
-0.433510 0.000000 -0.144341 0.481533 0.030295 -0.875904
-0.433510 0.000000 -0.144341 0.587384 0.036955 -0.808464
-0.430092 0.054333 -0.144341 0.587384 0.036955 -0.808464
-0.447323 0.056510 -0.131722 0.587384 0.036955 -0.808464
-0.450878 0.000000 -0.131722 0.587384 0.036955 -0.808464
-0.450878 0.000000 -0.131722 0.683913 0.043028 -0.728293
-0.447323 0.056510 -0.131722 0.683913 0.043028 -0.728293
-0.462850 0.058472 -0.117026 0.683913 0.043028 -0.728293
-0.466528 0.000000 -0.117026 0.683913 0.043028 -0.728293
-0.466528 0.000000 -0.117026 0.769610 0.048420 -0.636676
-0.462850 0.058472 -0.117026 0.769610 0.048420 -0.636676
-0.476426 0.060187 -0.100484 0.769610 0.048420 -0.636676
-0.480213 0.000000 -0.100484 0.769610 0.048420 -0.636676
-0.480213 0.000000 -0.100484 0.843139 0.053046 -0.535073
-0.476426 0.060187 -0.100484 0.843139 0.053046 -0.535073
-0.487839 0.061628 -0.082358 0.843139 0.053046 -0.535073
-0.491716 0.000000 -0.082358 0.843139 0.053046 -0.535073
-0.491716 0.000000 -0.082358 0.903365 0.056835 -0.425091
-0.487839 0.061628 -0.082358 0.903365 0.056835 -0.425091
-0.496908 0.062774 -0.062932 0.903365 0.056835 -0.425091
-0.500857 0.000000 -0.062932 0.903365 0.056835 -0.425091
-0.500857 0.000000 -0.062932 0.949359 0.059728 -0.308465
-0.496908 0.062774 -0.062932 0.949359 0.059728 -0.308465
-0.503490 0.063606 -0.042515 0.949359 0.059728 -0.308465
-0.507491 0.000000 -0.042515 0.949359 0.059728 -0.308465
-0.507491 0.000000 -0.042515 0.980417 0.061683 -0.187026
-0.503490 0.063606 -0.042515 0.980417 0.061683 -0.187026
-0.507481 0.064110 -0.021426 0.980417 0.061683 -0.187026
-0.511514 0.000000 -0.021426 0.980417 0.061683 -0.187026
-0.512862 0.000000 0.000000 0.996065 0.062667 -0.062666
-0.511514 0.000000 -0.021426 0.996065 0.062667 -0.062666
-0.507481 0.064110 -0.021426 0.996065 0.062667 -0.062666
-0.508818 0.064279 0.000000 0.996065 0.062667 -0.062666
-0.508818 0.064279 0.000000 0.980357 0.187013 0.062666
-0.496750 0.127544 0.000000 0.980357 0.187013 0.062666
-0.495444 0.127208 0.021426 0.980357 0.187013 0.062666
-0.507481 0.064110 0.021426 0.980357 0.187013 0.062666
-0.507481 0.064110 0.021426 0.964955 0.184075 0.187026
-0.495444 0.127208 0.021426 0.964955 0.184075 0.187026
-0.491548 0.126208 0.042515 0.964955 0.184075 0.187026
-0.503490 0.063606 0.042515 0.964955 0.184075 0.187026
-0.503490 0.063606 0.042515 0.934387 0.178244 0.308463
-0.491548 0.126208 0.042515 0.934387 0.178244 0.308463
-0.485122 0.124558 0.062932 0.934387 0.178244 0.308463
-0.496908 0.062774 0.062932 0.934387 0.178244 0.308463
-0.496908 0.062774 0.062932 0.889118 0.169608 0.425091
-0.485122 0.124558 0.062932 0.889118 0.169608 0.425091
-0.476268 0.122285 0.082358 0.889118 0.169608 0.425091
-0.487839 0.061628 0.082358 0.889118 0.169608 0.425091
-0.487839 0.061628 0.082358 0.829842 0.158300 0.535073
-0.476268 0.122285 0.082358 0.829842 0.158300 0.535073
-0.465126 0.119424 0.100484 0.829842 0.158300 0.535073
-0.476426 0.060187 0.100484 0.829842 0.158300 0.535073
-0.476426 0.060187 0.100484 0.757473 0.144495 0.636676
-0.465126 0.119424 0.100484 0.757473 0.144495 0.636676
-0.451872 0.116021 0.117026 0.757473 0.144495 0.636676
-0.462850 0.058472 0.117026 0.757473 0.144495 0.636676
-0.462850 0.058472 0.117026 0.673128 0.128406 0.728293
-0.451872 0.116021 0.117026 0.673128 0.128406 0.728293
-0.436713 0.112129 0.131722 0.673128 0.128406 0.728293
-0.447323 0.056510 0.131722 0.673128 0.128406 0.728293
-0.447323 0.056510 0.131722 0.578120 0.110282 0.808465
-0.436713 0.112129 0.131722 0.578120 0.110282 0.808465
-0.419890 0.107810 0.144341 0.578120 0.110282 0.808465
-0.430092 0.054333 0.144341 0.578120 0.110282 0.808465
-0.430092 0.054333 0.144341 0.473939 0.090409 0.875904
-0.419890 0.107810 0.144341 0.473939 0.090409 0.875904
-0.401668 0.103131 0.154684 0.473939 0.090409 0.875904
-0.411427 0.051975 0.154684 0.473939 0.090409 0.875904
-0.411427 0.051975 0.154684 0.362221 0.069097 0.929528
-0.401668 0.103131 0.154684 0.362221 0.069097 0.929528
-0.382335 0.098167 0.162587 0.362221 0.069097 0.929528
-0.391623 0.049474 0.162587 0.362221 0.069097 0.929528
-0.391623 0.049474 0.162587 0.244738 0.046686 0.968465
-0.382335 0.098167 0.162587 0.244738 0.046686 0.968465
-0.362194 0.092996 0.167926 0.244738 0.046686 0.968465
-0.370993 0.046867 0.167926 0.244738 0.046686 0.968465
-0.370993 0.046867 0.167926 0.123353 0.023531 0.992084
-0.362194 0.092996 0.167926 0.123353 0.023531 0.992084
-0.341564 0.087699 0.170617 0.123353 0.023531 0.992084
-0.349862 0.044198 0.170617 0.123353 0.023531 0.992084
-0.341564 0.087699 0.170617 -0.000000 0.000000 1.000000
-0.320769 0.082360 0.170617 -0.000000 0.000000 1.000000
-0.328563 0.041507 0.170617 -0.123353 -0.023531 0.992084
-0.320769 0.082360 0.170617 -0.123353 -0.023531 0.992084
-0.300139 0.077063 0.167926 -0.123353 -0.023531 0.992084
-0.307431 0.038838 0.167926 -0.123353 -0.023531 0.992084
-0.307431 0.038838 0.167926 -0.244737 -0.046686 0.968465
-0.300139 0.077063 0.167926 -0.244737 -0.046686 0.968465
-0.279999 0.071891 0.162587 -0.244737 -0.046686 0.968465
-0.286801 0.036231 0.162587 -0.244737 -0.046686 0.968465
-0.286801 0.036231 0.162587 -0.362222 -0.069098 0.929527
-0.279999 0.071891 0.162587 -0.362222 -0.069098 0.929527
-0.260665 0.066927 0.154684 -0.362222 -0.069098 0.929527
-0.266997 0.033730 0.154684 -0.362222 -0.069098 0.929527
-0.266997 0.033730 0.154684 -0.473939 -0.090409 0.875904
-0.260665 0.066927 0.154684 -0.473939 -0.090409 0.875904
-0.242443 0.062249 0.144341 -0.473939 -0.090409 0.875904
-0.248333 0.031372 0.144341 -0.473939 -0.090409 0.875904
-0.248333 0.031372 0.144341 -0.578121 -0.110282 0.808464
-0.242443 0.062249 0.144341 -0.578121 -0.110282 0.808464
-0.225620 0.057929 0.131722 -0.578121 -0.110282 0.808464
-0.231101 0.029195 0.131722 -0.578121 -0.110282 0.808464
-0.231101 0.029195 0.131722 -0.673128 -0.128406 0.728293
-0.225620 0.057929 0.131722 -0.673128 -0.128406 0.728293
-0.210462 0.054037 0.117026 -0.673128 -0.128406 0.728293
-0.215575 0.027233 0.117026 -0.673128 -0.128406 0.728293
-0.215575 0.027233 0.117026 -0.757472 -0.144495 0.636676
-0.210462 0.054037 0.117026 -0.757472 -0.144495 0.636676
-0.197207 0.050634 0.100484 -0.757472 -0.144495 0.636676
-0.201998 0.025518 0.100484 -0.757472 -0.144495 0.636676
-0.201998 0.025518 0.100484 -0.829842 -0.158301 0.535072
-0.197207 0.050634 0.100484 -0.829842 -0.158301 0.535072
-0.186065 0.047773 0.082358 -0.829842 -0.158301 0.535072
-0.190585 0.024077 0.082358 -0.829842 -0.158301 0.535072
-0.190585 0.024077 0.082358 -0.889118 -0.169608 0.425091
-0.186065 0.047773 0.082358 -0.889118 -0.169608 0.425091
-0.177211 0.045500 0.062932 -0.889118 -0.169608 0.425091
-0.181516 0.022931 0.062932 -0.889118 -0.169608 0.425091
-0.181516 0.022931 0.062932 -0.934386 -0.178244 0.308466
-0.177211 0.045500 0.062932 -0.934386 -0.178244 0.308466
-0.170785 0.043850 0.042515 -0.934386 -0.178244 0.308466
-0.174935 0.022099 0.042515 -0.934386 -0.178244 0.308466
-0.174935 0.022099 0.042515 -0.964955 -0.184075 0.187025
-0.170785 0.043850 0.042515 -0.964955 -0.184075 0.187025
-0.166889 0.042850 0.021426 -0.964955 -0.184075 0.187025
-0.170943 0.021595 0.021426 -0.964955 -0.184075 0.187025
-0.170943 0.021595 0.021426 -0.980357 -0.187012 0.062667
-0.166889 0.042850 0.021426 -0.980357 -0.187012 0.062667
-0.165583 0.042515 0.000000 -0.980357 -0.187012 0.062667
-0.169606 0.021426 0.000000 -0.980357 -0.187012 0.062667
-0.169606 0.021426 0.000000 -0.980357 -0.187012 -0.062667
-0.165583 0.042515 0.000000 -0.980357 -0.187012 -0.062667
-0.166889 0.042850 -0.021426 -0.980357 -0.187012 -0.062667
-0.170943 0.021595 -0.021426 -0.980357 -0.187012 -0.062667
-0.170943 0.021595 -0.021426 -0.964955 -0.184075 -0.187025
-0.166889 0.042850 -0.021426 -0.964955 -0.184075 -0.187025
-0.170785 0.043850 -0.042515 -0.964955 -0.184075 -0.187025
-0.174935 0.022099 -0.042515 -0.964955 -0.184075 -0.187025
-0.174935 0.022099 -0.042515 -0.934386 -0.178244 -0.308466
-0.170785 0.043850 -0.042515 -0.934386 -0.178244 -0.308466
-0.177211 0.045500 -0.062932 -0.934386 -0.178244 -0.308466
-0.181516 0.022931 -0.062932 -0.934386 -0.178244 -0.308466
-0.181516 0.022931 -0.062932 -0.889118 -0.169608 -0.425091
-0.177211 0.045500 -0.062932 -0.889118 -0.169608 -0.425091
-0.186065 0.047773 -0.082358 -0.889118 -0.169608 -0.425091
-0.190585 0.024077 -0.082358 -0.889118 -0.169608 -0.425091
-0.190585 0.024077 -0.082358 -0.829842 -0.158301 -0.535072
-0.186065 0.047773 -0.082358 -0.829842 -0.158301 -0.535072
-0.197207 0.050634 -0.100484 -0.829842 -0.158301 -0.535072
-0.201998 0.025518 -0.100484 -0.829842 -0.158301 -0.535072
-0.201998 0.025518 -0.100484 -0.757472 -0.144495 -0.636676
-0.197207 0.050634 -0.100484 -0.757472 -0.144495 -0.636676
-0.210462 0.054037 -0.117026 -0.757472 -0.144495 -0.636676
-0.215575 0.027233 -0.117026 -0.757472 -0.144495 -0.636676
-0.215575 0.027233 -0.117026 -0.673128 -0.128406 -0.728293
-0.210462 0.054037 -0.117026 -0.673128 -0.128406 -0.728293
-0.225620 0.057929 -0.131722 -0.673128 -0.128406 -0.728293
-0.231101 0.029195 -0.131722 -0.673128 -0.128406 -0.728293
-0.231101 0.029195 -0.131722 -0.578121 -0.110282 -0.808464
-0.225620 0.057929 -0.131722 -0.578121 -0.110282 -0.808464
-0.242443 0.062249 -0.144341 -0.578121 -0.110282 -0.808464
-0.248333 0.031372 -0.144341 -0.578121 -0.110282 -0.808464
-0.248333 0.031372 -0.144341 -0.473939 -0.090409 -0.875904
-0.242443 0.062249 -0.144341 -0.473939 -0.090409 -0.875904
-0.260665 0.066927 -0.154684 -0.473939 -0.090409 -0.875904
-0.266997 0.033730 -0.154684 -0.473939 -0.090409 -0.875904
-0.266997 0.033730 -0.154684 -0.362222 -0.069098 -0.929527
-0.260665 0.066927 -0.154684 -0.362222 -0.069098 -0.929527
-0.279999 0.071891 -0.162587 -0.362222 -0.069098 -0.929527
-0.286801 0.036231 -0.162587 -0.362222 -0.069098 -0.929527
-0.286801 0.036231 -0.162587 -0.244737 -0.046686 -0.968465
-0.279999 0.071891 -0.162587 -0.244737 -0.046686 -0.968465
-0.300139 0.077063 -0.167926 -0.244737 -0.046686 -0.968465
-0.307431 0.038838 -0.167926 -0.244737 -0.046686 -0.968465
-0.307431 0.038838 -0.167926 -0.123353 -0.023531 -0.992084
-0.300139 0.077063 -0.167926 -0.123353 -0.023531 -0.992084
-0.320769 0.082360 -0.170617 -0.123353 -0.023531 -0.992084
-0.328563 0.041507 -0.170617 -0.123353 -0.023531 -0.992084
-0.320769 0.082360 -0.170617 -0.000000 0.000000 -1.000000
-0.341564 0.087699 -0.170617 -0.000000 0.000000 -1.000000
-0.349862 0.044198 -0.170617 0.123353 0.023531 -0.992084
-0.341564 0.087699 -0.170617 0.123353 0.023531 -0.992084
-0.362194 0.092996 -0.167926 0.123353 0.023531 -0.992084
-0.370993 0.046867 -0.167926 0.123353 0.023531 -0.992084
-0.370993 0.046867 -0.167926 0.244738 0.046686 -0.968465
-0.362194 0.092996 -0.167926 0.244738 0.046686 -0.968465
-0.382335 0.098167 -0.162587 0.244738 0.046686 -0.968465
-0.391623 0.049474 -0.162587 0.244738 0.046686 -0.968465
-0.391623 0.049474 -0.162587 0.362221 0.069097 -0.929528
-0.382335 0.098167 -0.162587 0.362221 0.069097 -0.929528
-0.401668 0.103131 -0.154684 0.362221 0.069097 -0.929528
-0.411427 0.051975 -0.154684 0.362221 0.069097 -0.929528
-0.411427 0.051975 -0.154684 0.473939 0.090409 -0.875904
-0.401668 0.103131 -0.154684 0.473939 0.090409 -0.875904
-0.419890 0.107810 -0.144341 0.473939 0.090409 -0.875904
-0.430092 0.054333 -0.144341 0.473939 0.090409 -0.875904
-0.430092 0.054333 -0.144341 0.578120 0.110282 -0.808465
-0.419890 0.107810 -0.144341 0.578120 0.110282 -0.808465
-0.436713 0.112129 -0.131722 0.578120 0.110282 -0.808465
-0.447323 0.056510 -0.131722 0.578120 0.110282 -0.808465
-0.447323 0.056510 -0.131722 0.673128 0.128406 -0.728293
-0.436713 0.112129 -0.131722 0.673128 0.128406 -0.728293
-0.451872 0.116021 -0.117026 0.673128 0.128406 -0.728293
-0.462850 0.058472 -0.117026 0.673128 0.128406 -0.728293
-0.462850 0.058472 -0.117026 0.757473 0.144495 -0.636676
-0.451872 0.116021 -0.117026 0.757473 0.144495 -0.636676
-0.465126 0.119424 -0.100484 0.757473 0.144495 -0.636676
-0.476426 0.060187 -0.100484 0.757473 0.144495 -0.636676
-0.476426 0.060187 -0.100484 0.829842 0.158300 -0.535073
-0.465126 0.119424 -0.100484 0.829842 0.158300 -0.535073
-0.476268 0.122285 -0.082358 0.829842 0.158300 -0.535073
-0.487839 0.061628 -0.082358 0.829842 0.158300 -0.535073
-0.487839 0.061628 -0.082358 0.889118 0.169608 -0.425091
-0.476268 0.122285 -0.082358 0.889118 0.169608 -0.425091
-0.485122 0.124558 -0.062932 0.889118 0.169608 -0.425091
-0.496908 0.062774 -0.062932 0.889118 0.169608 -0.425091
-0.496908 0.062774 -0.062932 0.934387 0.178244 -0.308463
-0.485122 0.124558 -0.062932 0.934387 0.178244 -0.308463
-0.491548 0.126208 -0.042515 0.934387 0.178244 -0.308463
-0.503490 0.063606 -0.042515 0.934387 0.178244 -0.308463
-0.503490 0.063606 -0.042515 0.964955 0.184075 -0.187026
-0.491548 0.126208 -0.042515 0.964955 0.184075 -0.187026
-0.495444 0.127208 -0.021426 0.964955 0.184075 -0.187026
-0.507481 0.064110 -0.021426 0.964955 0.184075 -0.187026
-0.507481 0.064110 -0.021426 0.980357 0.187013 -0.062666
-0.495444 0.127208 -0.021426 0.980357 0.187013 -0.062666
-0.496750 0.127544 0.000000 0.980357 0.187013 -0.062666
-0.508818 0.064279 0.000000 0.980357 0.187013 -0.062666
-0.496750 0.127544 0.000000 0.949187 0.308410 0.062666
-0.476847 0.188797 0.000000 0.949187 0.308410 0.062666
-0.475594 0.188301 0.021426 0.949187 0.308410 0.062666
-0.495444 0.127208 0.021426 0.949187 0.308410 0.062666
-0.495444 0.127208 0.021426 0.934275 0.303564 0.187025
-0.475594 0.188301 0.021426 0.934275 0.303564 0.187025
-0.471854 0.186820 0.042515 0.934275 0.303564 0.187025
-0.491548 0.126208 0.042515 0.934275 0.303564 0.187025
-0.491548 0.126208 0.042515 0.904679 0.293948 0.308464
-0.471854 0.186820 0.042515 0.904679 0.293948 0.308464
-0.465685 0.184378 0.062932 0.904679 0.293948 0.308464
-0.485122 0.124558 0.062932 0.904679 0.293948 0.308464
-0.485122 0.124558 0.062932 0.860849 0.279707 0.425091
-0.465685 0.184378 0.062932 0.860849 0.279707 0.425091
-0.457186 0.181013 0.082358 0.860849 0.279707 0.425091
-0.476268 0.122285 0.082358 0.860849 0.279707 0.425091
-0.476268 0.122285 0.082358 0.803458 0.261059 0.535073
-0.457186 0.181013 0.082358 0.803458 0.261059 0.535073
-0.446491 0.176778 0.100484 0.803458 0.261059 0.535073
-0.465126 0.119424 0.100484 0.803458 0.261059 0.535073
-0.465126 0.119424 0.100484 0.733389 0.238292 0.636677
-0.446491 0.176778 0.100484 0.733389 0.238292 0.636677
-0.433767 0.171741 0.117026 0.733389 0.238292 0.636677
-0.451872 0.116021 0.117026 0.733389 0.238292 0.636677
-0.451872 0.116021 0.117026 0.651727 0.211759 0.728293
-0.433767 0.171741 0.117026 0.651727 0.211759 0.728293
-0.419216 0.165979 0.131722 0.651727 0.211759 0.728293
-0.436713 0.112129 0.131722 0.651727 0.211759 0.728293
-0.436713 0.112129 0.131722 0.559739 0.181870 0.808465
-0.419216 0.165979 0.131722 0.559739 0.181870 0.808465
-0.403067 0.159586 0.144341 0.559739 0.181870 0.808465
-0.419890 0.107810 0.144341 0.559739 0.181870 0.808465
-0.419890 0.107810 0.144341 0.458871 0.149096 0.875904
-0.403067 0.159586 0.144341 0.458871 0.149096 0.875904
-0.385576 0.152660 0.154684 0.458871 0.149096 0.875904
-0.401668 0.103131 0.154684 0.458871 0.149096 0.875904
-0.401668 0.103131 0.154684 0.350705 0.113951 0.929527
-0.385576 0.152660 0.154684 0.350705 0.113951 0.929527
-0.367016 0.145312 0.162587 0.350705 0.113951 0.929527
-0.382335 0.098167 0.162587 0.350705 0.113951 0.929527
-0.382335 0.098167 0.162587 0.236956 0.076992 0.968465
-0.367016 0.145312 0.162587 0.236956 0.076992 0.968465
-0.347682 0.137657 0.167926 0.236956 0.076992 0.968465
-0.362194 0.092996 0.167926 0.236956 0.076992 0.968465
-0.362194 0.092996 0.167926 0.119431 0.038806 0.992084
-0.347682 0.137657 0.167926 0.119431 0.038806 0.992084
-0.327879 0.129816 0.170617 0.119431 0.038806 0.992084
-0.341564 0.087699 0.170617 0.119431 0.038806 0.992084
-0.327879 0.129816 0.170617 -0.000000 0.000000 1.000000
-0.307918 0.121913 0.170617 -0.000000 0.000000 1.000000
-0.320769 0.082360 0.170617 -0.119431 -0.038806 0.992084
-0.307918 0.121913 0.170617 -0.119431 -0.038806 0.992084
-0.288114 0.114072 0.167926 -0.119431 -0.038806 0.992084
-0.300139 0.077063 0.167926 -0.119431 -0.038806 0.992084
-0.300139 0.077063 0.167926 -0.236956 -0.076992 0.968465
-0.288114 0.114072 0.167926 -0.236956 -0.076992 0.968465
-0.268780 0.106418 0.162587 -0.236956 -0.076992 0.968465
-0.279999 0.071891 0.162587 -0.236956 -0.076992 0.968465
-0.279999 0.071891 0.162587 -0.350705 -0.113951 0.929527
-0.268780 0.106418 0.162587 -0.350705 -0.113951 0.929527
-0.250221 0.099069 0.154684 -0.350705 -0.113951 0.929527
-0.260665 0.066927 0.154684 -0.350705 -0.113951 0.929527
-0.260665 0.066927 0.154684 -0.458870 -0.149096 0.875904
-0.250221 0.099069 0.154684 -0.458870 -0.149096 0.875904
-0.232729 0.092144 0.144341 -0.458870 -0.149096 0.875904
-0.242443 0.062249 0.144341 -0.458870 -0.149096 0.875904
-0.242443 0.062249 0.144341 -0.559740 -0.181871 0.808464
-0.232729 0.092144 0.144341 -0.559740 -0.181871 0.808464
-0.216580 0.085750 0.131722 -0.559740 -0.181871 0.808464
-0.225620 0.057929 0.131722 -0.559740 -0.181871 0.808464
-0.225620 0.057929 0.131722 -0.651726 -0.211759 0.728293
-0.216580 0.085750 0.131722 -0.651726 -0.211759 0.728293
-0.202029 0.079989 0.117026 -0.651726 -0.211759 0.728293
-0.210462 0.054037 0.117026 -0.651726 -0.211759 0.728293
-0.210462 0.054037 0.117026 -0.733389 -0.238293 0.636676
-0.202029 0.079989 0.117026 -0.733389 -0.238293 0.636676
-0.189306 0.074951 0.100484 -0.733389 -0.238293 0.636676
-0.197207 0.050634 0.100484 -0.733389 -0.238293 0.636676
-0.197207 0.050634 0.100484 -0.803458 -0.261060 0.535073
-0.189306 0.074951 0.100484 -0.803458 -0.261060 0.535073
-0.178610 0.070717 0.082358 -0.803458 -0.261060 0.535073
-0.186065 0.047773 0.082358 -0.803458 -0.261060 0.535073
-0.186065 0.047773 0.082358 -0.860849 -0.279708 0.425091
-0.178610 0.070717 0.082358 -0.860849 -0.279708 0.425091
-0.170111 0.067352 0.062932 -0.860849 -0.279708 0.425091
-0.177211 0.045500 0.062932 -0.860849 -0.279708 0.425091
-0.177211 0.045500 0.062932 -0.904679 -0.293948 0.308465
-0.170111 0.067352 0.062932 -0.904679 -0.293948 0.308465
-0.163943 0.064910 0.042515 -0.904679 -0.293948 0.308465
-0.170785 0.043850 0.042515 -0.904679 -0.293948 0.308465
-0.170785 0.043850 0.042515 -0.934276 -0.303564 0.187024
-0.163943 0.064910 0.042515 -0.934276 -0.303564 0.187024
-0.160203 0.063429 0.021426 -0.934276 -0.303564 0.187024
-0.166889 0.042850 0.021426 -0.934276 -0.303564 0.187024
-0.166889 0.042850 0.021426 -0.949187 -0.308409 0.062667
-0.160203 0.063429 0.021426 -0.949187 -0.308409 0.062667
-0.158949 0.062932 0.000000 -0.949187 -0.308409 0.062667
-0.165583 0.042515 0.000000 -0.949187 -0.308409 0.062667
-0.165583 0.042515 0.000000 -0.949187 -0.308409 -0.062667
-0.158949 0.062932 0.000000 -0.949187 -0.308409 -0.062667
-0.160203 0.063429 -0.021426 -0.949187 -0.308409 -0.062667
-0.166889 0.042850 -0.021426 -0.949187 -0.308409 -0.062667
-0.166889 0.042850 -0.021426 -0.934276 -0.303564 -0.187024
-0.160203 0.063429 -0.021426 -0.934276 -0.303564 -0.187024
-0.163943 0.064910 -0.042515 -0.934276 -0.303564 -0.187024
-0.170785 0.043850 -0.042515 -0.934276 -0.303564 -0.187024
-0.170785 0.043850 -0.042515 -0.904679 -0.293948 -0.308465
-0.163943 0.064910 -0.042515 -0.904679 -0.293948 -0.308465
-0.170111 0.067352 -0.062932 -0.904679 -0.293948 -0.308465
-0.177211 0.045500 -0.062932 -0.904679 -0.293948 -0.308465
-0.177211 0.045500 -0.062932 -0.860849 -0.279708 -0.425091
-0.170111 0.067352 -0.062932 -0.860849 -0.279708 -0.425091
-0.178610 0.070717 -0.082358 -0.860849 -0.279708 -0.425091
-0.186065 0.047773 -0.082358 -0.860849 -0.279708 -0.425091
-0.186065 0.047773 -0.082358 -0.803458 -0.261060 -0.535073
-0.178610 0.070717 -0.082358 -0.803458 -0.261060 -0.535073
-0.189306 0.074951 -0.100484 -0.803458 -0.261060 -0.535073
-0.197207 0.050634 -0.100484 -0.803458 -0.261060 -0.535073
-0.197207 0.050634 -0.100484 -0.733389 -0.238293 -0.636676
-0.189306 0.074951 -0.100484 -0.733389 -0.238293 -0.636676
-0.202029 0.079989 -0.117026 -0.733389 -0.238293 -0.636676
-0.210462 0.054037 -0.117026 -0.733389 -0.238293 -0.636676
-0.210462 0.054037 -0.117026 -0.651726 -0.211759 -0.728293
-0.202029 0.079989 -0.117026 -0.651726 -0.211759 -0.728293
-0.216580 0.085750 -0.131722 -0.651726 -0.211759 -0.728293
-0.225620 0.057929 -0.131722 -0.651726 -0.211759 -0.728293
-0.225620 0.057929 -0.131722 -0.559740 -0.181871 -0.808464
-0.216580 0.085750 -0.131722 -0.559740 -0.181871 -0.808464
-0.232729 0.092144 -0.144341 -0.559740 -0.181871 -0.808464
-0.242443 0.062249 -0.144341 -0.559740 -0.181871 -0.808464
-0.242443 0.062249 -0.144341 -0.458870 -0.149096 -0.875904
-0.232729 0.092144 -0.144341 -0.458870 -0.149096 -0.875904
-0.250221 0.099069 -0.154684 -0.458870 -0.149096 -0.875904
-0.260665 0.066927 -0.154684 -0.458870 -0.149096 -0.875904
-0.260665 0.066927 -0.154684 -0.350705 -0.113951 -0.929527
-0.250221 0.099069 -0.154684 -0.350705 -0.113951 -0.929527
-0.268780 0.106418 -0.162587 -0.350705 -0.113951 -0.929527
-0.279999 0.071891 -0.162587 -0.350705 -0.113951 -0.929527
-0.279999 0.071891 -0.162587 -0.236956 -0.076992 -0.968465
-0.268780 0.106418 -0.162587 -0.236956 -0.076992 -0.968465
-0.288114 0.114072 -0.167926 -0.236956 -0.076992 -0.968465
-0.300139 0.077063 -0.167926 -0.236956 -0.076992 -0.968465
-0.300139 0.077063 -0.167926 -0.119431 -0.038806 -0.992084
-0.288114 0.114072 -0.167926 -0.119431 -0.038806 -0.992084
-0.307918 0.121913 -0.170617 -0.119431 -0.038806 -0.992084
-0.320769 0.082360 -0.170617 -0.119431 -0.038806 -0.992084
-0.307918 0.121913 -0.170617 -0.000000 0.000000 -1.000000
-0.327879 0.129816 -0.170617 -0.000000 0.000000 -1.000000
-0.341564 0.087699 -0.170617 0.119431 0.038806 -0.992084
-0.327879 0.129816 -0.170617 0.119431 0.038806 -0.992084
-0.347682 0.137657 -0.167926 0.119431 0.038806 -0.992084
-0.362194 0.092996 -0.167926 0.119431 0.038806 -0.992084
-0.362194 0.092996 -0.167926 0.236956 0.076992 -0.968465
-0.347682 0.137657 -0.167926 0.236956 0.076992 -0.968465
-0.367016 0.145312 -0.162587 0.236956 0.076992 -0.968465
-0.382335 0.098167 -0.162587 0.236956 0.076992 -0.968465
-0.382335 0.098167 -0.162587 0.350705 0.113951 -0.929527
-0.367016 0.145312 -0.162587 0.350705 0.113951 -0.929527
-0.385576 0.152660 -0.154684 0.350705 0.113951 -0.929527
-0.401668 0.103131 -0.154684 0.350705 0.113951 -0.929527
-0.401668 0.103131 -0.154684 0.458871 0.149096 -0.875904
-0.385576 0.152660 -0.154684 0.458871 0.149096 -0.875904
-0.403067 0.159586 -0.144341 0.458871 0.149096 -0.875904
-0.419890 0.107810 -0.144341 0.458871 0.149096 -0.875904
-0.419890 0.107810 -0.144341 0.559739 0.181870 -0.808465
-0.403067 0.159586 -0.144341 0.559739 0.181870 -0.808465
-0.419216 0.165979 -0.131722 0.559739 0.181870 -0.808465
-0.436713 0.112129 -0.131722 0.559739 0.181870 -0.808465
-0.436713 0.112129 -0.131722 0.651727 0.211759 -0.728293
-0.419216 0.165979 -0.131722 0.651727 0.211759 -0.728293
-0.433767 0.171741 -0.117026 0.651727 0.211759 -0.728293
-0.451872 0.116021 -0.117026 0.651727 0.211759 -0.728293
-0.451872 0.116021 -0.117026 0.733389 0.238292 -0.636677
-0.433767 0.171741 -0.117026 0.733389 0.238292 -0.636677
-0.446491 0.176778 -0.100484 0.733389 0.238292 -0.636677
-0.465126 0.119424 -0.100484 0.733389 0.238292 -0.636677
-0.465126 0.119424 -0.100484 0.803458 0.261059 -0.535073
-0.446491 0.176778 -0.100484 0.803458 0.261059 -0.535073
-0.457186 0.181013 -0.082358 0.803458 0.261059 -0.535073
-0.476268 0.122285 -0.082358 0.803458 0.261059 -0.535073
-0.476268 0.122285 -0.082358 0.860849 0.279707 -0.425091
-0.457186 0.181013 -0.082358 0.860849 0.279707 -0.425091
-0.465685 0.184378 -0.062932 0.860849 0.279707 -0.425091
-0.485122 0.124558 -0.062932 0.860849 0.279707 -0.425091
-0.485122 0.124558 -0.062932 0.904679 0.293948 -0.308464
-0.465685 0.184378 -0.062932 0.904679 0.293948 -0.308464
-0.471854 0.186820 -0.042515 0.904679 0.293948 -0.308464
-0.491548 0.126208 -0.042515 0.904679 0.293948 -0.308464
-0.491548 0.126208 -0.042515 0.934275 0.303564 -0.187025
-0.471854 0.186820 -0.042515 0.934275 0.303564 -0.187025
-0.475594 0.188301 -0.021426 0.934275 0.303564 -0.187025
-0.495444 0.127208 -0.021426 0.934275 0.303564 -0.187025
-0.495444 0.127208 -0.021426 0.949187 0.308410 -0.062666
-0.475594 0.188301 -0.021426 0.949187 0.308410 -0.062666
-0.476847 0.188797 0.000000 0.949187 0.308410 -0.062666
-0.496750 0.127544 0.000000 0.949187 0.308410 -0.062666
-0.476847 0.188797 0.000000 0.903049 0.424943 0.062666
-0.449425 0.247073 0.000000 0.903049 0.424943 0.062666
-0.448243 0.246424 0.021426 0.903049 0.424943 0.062666
-0.475594 0.188301 0.021426 0.903049 0.424943 0.062666
-0.475594 0.188301 0.021426 0.888862 0.418267 0.187024
-0.448243 0.246424 0.021426 0.888862 0.418267 0.187024
-0.444718 0.244486 0.042515 0.888862 0.418267 0.187024
-0.471854 0.186820 0.042515 0.888862 0.418267 0.187024
-0.471854 0.186820 0.042515 0.860703 0.405017 0.308466
-0.444718 0.244486 0.042515 0.860703 0.405017 0.308466
-0.438905 0.241290 0.062932 0.860703 0.405017 0.308466
-0.465685 0.184378 0.062932 0.860703 0.405017 0.308466
-0.465685 0.184378 0.062932 0.819005 0.385395 0.425091
-0.438905 0.241290 0.062932 0.819005 0.385395 0.425091
-0.430894 0.236886 0.082358 0.819005 0.385395 0.425091
-0.457186 0.181013 0.082358 0.819005 0.385395 0.425091
-0.457186 0.181013 0.082358 0.764404 0.359701 0.535072
-0.430894 0.236886 0.082358 0.764404 0.359701 0.535072
-0.420814 0.231344 0.100484 0.764404 0.359701 0.535072
-0.446491 0.176778 0.100484 0.764404 0.359701 0.535072
-0.446491 0.176778 0.100484 0.697740 0.328332 0.636676
-0.420814 0.231344 0.100484 0.697740 0.328332 0.636676
-0.408822 0.224752 0.117026 0.697740 0.328332 0.636676
-0.433767 0.171741 0.117026 0.697740 0.328332 0.636676
-0.433767 0.171741 0.117026 0.620047 0.291772 0.728293
-0.408822 0.224752 0.117026 0.620047 0.291772 0.728293
-0.395108 0.217212 0.131722 0.620047 0.291772 0.728293
-0.419216 0.165979 0.131722 0.620047 0.291772 0.728293
-0.419216 0.165979 0.131722 0.532531 0.250590 0.808465
-0.395108 0.217212 0.131722 0.532531 0.250590 0.808465
-0.379888 0.208845 0.144341 0.532531 0.250590 0.808465
-0.403067 0.159586 0.144341 0.532531 0.250590 0.808465
-0.403067 0.159586 0.144341 0.436565 0.205432 0.875904
-0.379888 0.208845 0.144341 0.436565 0.205432 0.875904
-0.363402 0.199782 0.154684 0.436565 0.205432 0.875904
-0.385576 0.152660 0.154684 0.436565 0.205432 0.875904
-0.385576 0.152660 0.154684 0.333658 0.157008 0.929527
-0.363402 0.199782 0.154684 0.333658 0.157008 0.929527
-0.345910 0.190165 0.162587 0.333658 0.157008 0.929527
-0.367016 0.145312 0.162587 0.333658 0.157008 0.929527
-0.367016 0.145312 0.162587 0.225438 0.106083 0.968465
-0.345910 0.190165 0.162587 0.225438 0.106083 0.968465
-0.327688 0.180148 0.167926 0.225438 0.106083 0.968465
-0.347682 0.137657 0.167926 0.225438 0.106083 0.968465
-0.347682 0.137657 0.167926 0.113626 0.053468 0.992084
-0.327688 0.180148 0.167926 0.113626 0.053468 0.992084
-0.309023 0.169887 0.170617 0.113626 0.053468 0.992084
-0.327879 0.129816 0.170617 0.113626 0.053468 0.992084
-0.309023 0.169887 0.170617 -0.000000 0.000000 1.000000
-0.290210 0.159544 0.170617 -0.000000 0.000000 1.000000
-0.307918 0.121913 0.170617 -0.113626 -0.053468 0.992084
-0.290210 0.159544 0.170617 -0.113626 -0.053468 0.992084
-0.271545 0.149283 0.167926 -0.113626 -0.053468 0.992084
-0.288114 0.114072 0.167926 -0.113626 -0.053468 0.992084
-0.288114 0.114072 0.167926 -0.225438 -0.106083 0.968465
-0.271545 0.149283 0.167926 -0.225438 -0.106083 0.968465
-0.253323 0.139266 0.162587 -0.225438 -0.106083 0.968465
-0.268780 0.106418 0.162587 -0.225438 -0.106083 0.968465
-0.268780 0.106418 0.162587 -0.333658 -0.157007 0.929527
-0.253323 0.139266 0.162587 -0.333658 -0.157007 0.929527
-0.235831 0.129649 0.154684 -0.333658 -0.157007 0.929527
-0.250221 0.099069 0.154684 -0.333658 -0.157007 0.929527
-0.250221 0.099069 0.154684 -0.436566 -0.205432 0.875904
-0.235831 0.129649 0.154684 -0.436566 -0.205432 0.875904
-0.219345 0.120586 0.144341 -0.436566 -0.205432 0.875904
-0.232729 0.092144 0.144341 -0.436566 -0.205432 0.875904
-0.232729 0.092144 0.144341 -0.532532 -0.250590 0.808464
-0.219345 0.120586 0.144341 -0.532532 -0.250590 0.808464
-0.204125 0.112219 0.131722 -0.532532 -0.250590 0.808464
-0.216580 0.085750 0.131722 -0.532532 -0.250590 0.808464
-0.216580 0.085750 0.131722 -0.620047 -0.291772 0.728294
-0.204125 0.112219 0.131722 -0.620047 -0.291772 0.728294
-0.190411 0.104679 0.117026 -0.620047 -0.291772 0.728294
-0.202029 0.079989 0.117026 -0.620047 -0.291772 0.728294
-0.202029 0.079989 0.117026 -0.697740 -0.328332 0.636676
-0.190411 0.104679 0.117026 -0.697740 -0.328332 0.636676
-0.178419 0.098087 0.100484 -0.697740 -0.328332 0.636676
-0.189306 0.074951 0.100484 -0.697740 -0.328332 0.636676
-0.189306 0.074951 0.100484 -0.764403 -0.359701 0.535073
-0.178419 0.098087 0.100484 -0.764403 -0.359701 0.535073
-0.168339 0.092545 0.082358 -0.764403 -0.359701 0.535073
-0.178610 0.070717 0.082358 -0.764403 -0.359701 0.535073
-0.178610 0.070717 0.082358 -0.819005 -0.385394 0.425091
-0.168339 0.092545 0.082358 -0.819005 -0.385394 0.425091
-0.160328 0.088141 0.062932 -0.819005 -0.385394 0.425091
-0.170111 0.067352 0.062932 -0.819005 -0.385394 0.425091
-0.170111 0.067352 0.062932 -0.860704 -0.405016 0.308465
-0.160328 0.088141 0.062932 -0.860704 -0.405016 0.308465
-0.154515 0.084945 0.042515 -0.860704 -0.405016 0.308465
-0.163943 0.064910 0.042515 -0.860704 -0.405016 0.308465
-0.163943 0.064910 0.042515 -0.888861 -0.418267 0.187025
-0.154515 0.084945 0.042515 -0.888861 -0.418267 0.187025
-0.150990 0.083007 0.021426 -0.888861 -0.418267 0.187025
-0.160203 0.063429 0.021426 -0.888861 -0.418267 0.187025
-0.160203 0.063429 0.021426 -0.903048 -0.424943 0.062667
-0.150990 0.083007 0.021426 -0.903048 -0.424943 0.062667
-0.149808 0.082358 0.000000 -0.903048 -0.424943 0.062667
-0.158949 0.062932 0.000000 -0.903048 -0.424943 0.062667
-0.158949 0.062932 0.000000 -0.903048 -0.424943 -0.062667
-0.149808 0.082358 0.000000 -0.903048 -0.424943 -0.062667
-0.150990 0.083007 -0.021426 -0.903048 -0.424943 -0.062667
-0.160203 0.063429 -0.021426 -0.903048 -0.424943 -0.062667
-0.160203 0.063429 -0.021426 -0.888861 -0.418267 -0.187025
-0.150990 0.083007 -0.021426 -0.888861 -0.418267 -0.187025
-0.154515 0.084945 -0.042515 -0.888861 -0.418267 -0.187025
-0.163943 0.064910 -0.042515 -0.888861 -0.418267 -0.187025
-0.163943 0.064910 -0.042515 -0.860704 -0.405016 -0.308465
-0.154515 0.084945 -0.042515 -0.860704 -0.405016 -0.308465
-0.160328 0.088141 -0.062932 -0.860704 -0.405016 -0.308465
-0.170111 0.067352 -0.062932 -0.860704 -0.405016 -0.308465
-0.170111 0.067352 -0.062932 -0.819005 -0.385394 -0.425091
-0.160328 0.088141 -0.062932 -0.819005 -0.385394 -0.425091
-0.168339 0.092545 -0.082358 -0.819005 -0.385394 -0.425091
-0.178610 0.070717 -0.082358 -0.819005 -0.385394 -0.425091
-0.178610 0.070717 -0.082358 -0.764403 -0.359701 -0.535073
-0.168339 0.092545 -0.082358 -0.764403 -0.359701 -0.535073
-0.178419 0.098087 -0.100484 -0.764403 -0.359701 -0.535073
-0.189306 0.074951 -0.100484 -0.764403 -0.359701 -0.535073
-0.189306 0.074951 -0.100484 -0.697740 -0.328332 -0.636676
-0.178419 0.098087 -0.100484 -0.697740 -0.328332 -0.636676
-0.190411 0.104679 -0.117026 -0.697740 -0.328332 -0.636676
-0.202029 0.079989 -0.117026 -0.697740 -0.328332 -0.636676
-0.202029 0.079989 -0.117026 -0.620047 -0.291772 -0.728294
-0.190411 0.104679 -0.117026 -0.620047 -0.291772 -0.728294
-0.204125 0.112219 -0.131722 -0.620047 -0.291772 -0.728294
-0.216580 0.085750 -0.131722 -0.620047 -0.291772 -0.728294
-0.216580 0.085750 -0.131722 -0.532532 -0.250590 -0.808464
-0.204125 0.112219 -0.131722 -0.532532 -0.250590 -0.808464
-0.219345 0.120586 -0.144341 -0.532532 -0.250590 -0.808464
-0.232729 0.092144 -0.144341 -0.532532 -0.250590 -0.808464
-0.232729 0.092144 -0.144341 -0.436566 -0.205432 -0.875904
-0.219345 0.120586 -0.144341 -0.436566 -0.205432 -0.875904
-0.235831 0.129649 -0.154684 -0.436566 -0.205432 -0.875904
-0.250221 0.099069 -0.154684 -0.436566 -0.205432 -0.875904
-0.250221 0.099069 -0.154684 -0.333658 -0.157007 -0.929527
-0.235831 0.129649 -0.154684 -0.333658 -0.157007 -0.929527
-0.253323 0.139266 -0.162587 -0.333658 -0.157007 -0.929527
-0.268780 0.106418 -0.162587 -0.333658 -0.157007 -0.929527
-0.268780 0.106418 -0.162587 -0.225438 -0.106083 -0.968465
-0.253323 0.139266 -0.162587 -0.225438 -0.106083 -0.968465
-0.271545 0.149283 -0.167926 -0.225438 -0.106083 -0.968465
-0.288114 0.114072 -0.167926 -0.225438 -0.106083 -0.968465
-0.288114 0.114072 -0.167926 -0.113626 -0.053468 -0.992084
-0.271545 0.149283 -0.167926 -0.113626 -0.053468 -0.992084
-0.290210 0.159544 -0.170617 -0.113626 -0.053468 -0.992084
-0.307918 0.121913 -0.170617 -0.113626 -0.053468 -0.992084
-0.290210 0.159544 -0.170617 -0.000000 0.000000 -1.000000
-0.309023 0.169887 -0.170617 -0.000000 0.000000 -1.000000
-0.327879 0.129816 -0.170617 0.113626 0.053468 -0.992084
-0.309023 0.169887 -0.170617 0.113626 0.053468 -0.992084
-0.327688 0.180148 -0.167926 0.113626 0.053468 -0.992084
-0.347682 0.137657 -0.167926 0.113626 0.053468 -0.992084
-0.347682 0.137657 -0.167926 0.225438 0.106083 -0.968465
-0.327688 0.180148 -0.167926 0.225438 0.106083 -0.968465
-0.345910 0.190165 -0.162587 0.225438 0.106083 -0.968465
-0.367016 0.145312 -0.162587 0.225438 0.106083 -0.968465
-0.367016 0.145312 -0.162587 0.333658 0.157008 -0.929527
-0.345910 0.190165 -0.162587 0.333658 0.157008 -0.929527
-0.363402 0.199782 -0.154684 0.333658 0.157008 -0.929527
-0.385576 0.152660 -0.154684 0.333658 0.157008 -0.929527
-0.385576 0.152660 -0.154684 0.436565 0.205432 -0.875904
-0.363402 0.199782 -0.154684 0.436565 0.205432 -0.875904
-0.379888 0.208845 -0.144341 0.436565 0.205432 -0.875904
-0.403067 0.159586 -0.144341 0.436565 0.205432 -0.875904
-0.403067 0.159586 -0.144341 0.532531 0.250590 -0.808465
-0.379888 0.208845 -0.144341 0.532531 0.250590 -0.808465
-0.395108 0.217212 -0.131722 0.532531 0.250590 -0.808465
-0.419216 0.165979 -0.131722 0.532531 0.250590 -0.808465
-0.419216 0.165979 -0.131722 0.620047 0.291772 -0.728293
-0.395108 0.217212 -0.131722 0.620047 0.291772 -0.728293
-0.408822 0.224752 -0.117026 0.620047 0.291772 -0.728293
-0.433767 0.171741 -0.117026 0.620047 0.291772 -0.728293
-0.433767 0.171741 -0.117026 0.697740 0.328332 -0.636676
-0.408822 0.224752 -0.117026 0.697740 0.328332 -0.636676
-0.420814 0.231344 -0.100484 0.697740 0.328332 -0.636676
-0.446491 0.176778 -0.100484 0.697740 0.328332 -0.636676
-0.446491 0.176778 -0.100484 0.764404 0.359701 -0.535072
-0.420814 0.231344 -0.100484 0.764404 0.359701 -0.535072
-0.430894 0.236886 -0.082358 0.764404 0.359701 -0.535072
-0.457186 0.181013 -0.082358 0.764404 0.359701 -0.535072
-0.457186 0.181013 -0.082358 0.819005 0.385395 -0.425091
-0.430894 0.236886 -0.082358 0.819005 0.385395 -0.425091
-0.438905 0.241290 -0.062932 0.819005 0.385395 -0.425091
-0.465685 0.184378 -0.062932 0.819005 0.385395 -0.425091
-0.465685 0.184378 -0.062932 0.860703 0.405017 -0.308466
-0.438905 0.241290 -0.062932 0.860703 0.405017 -0.308466
-0.444718 0.244486 -0.042515 0.860703 0.405017 -0.308466
-0.471854 0.186820 -0.042515 0.860703 0.405017 -0.308466
-0.471854 0.186820 -0.042515 0.888862 0.418267 -0.187024
-0.444718 0.244486 -0.042515 0.888862 0.418267 -0.187024
-0.448243 0.246424 -0.021426 0.888862 0.418267 -0.187024
-0.475594 0.188301 -0.021426 0.888862 0.418267 -0.187024
-0.475594 0.188301 -0.021426 0.903049 0.424943 -0.062666
-0.448243 0.246424 -0.021426 0.903049 0.424943 -0.062666
-0.449425 0.247073 0.000000 0.903049 0.424943 -0.062666
-0.476847 0.188797 0.000000 0.903049 0.424943 -0.062666
-0.449425 0.247073 0.000000 0.842669 0.534773 0.062667
-0.414914 0.301453 0.000000 0.842669 0.534773 0.062667
-0.413824 0.300661 0.021426 0.842669 0.534773 0.062667
-0.448243 0.246424 0.021426 0.842669 0.534773 0.062667
-0.448243 0.246424 0.021426 0.829430 0.526372 0.187025
-0.413824 0.300661 0.021426 0.829430 0.526372 0.187025
-0.410569 0.298296 0.042515 0.829430 0.526372 0.187025
-0.444718 0.244486 0.042515 0.829430 0.526372 0.187025
-0.444718 0.244486 0.042515 0.803155 0.509697 0.308465
-0.410569 0.298296 0.042515 0.803155 0.509697 0.308465
-0.405202 0.294397 0.062932 0.803155 0.509697 0.308465
-0.438905 0.241290 0.062932 0.803155 0.509697 0.308465
-0.438905 0.241290 0.062932 0.764244 0.485003 0.425091
-0.405202 0.294397 0.062932 0.764244 0.485003 0.425091
-0.397807 0.289024 0.082358 0.764244 0.485003 0.425091
-0.430894 0.236886 0.082358 0.764244 0.485003 0.425091
-0.430894 0.236886 0.082358 0.713293 0.452670 0.535072
-0.397807 0.289024 0.082358 0.713293 0.452670 0.535072
-0.388500 0.282262 0.100484 0.713293 0.452670 0.535072
-0.420814 0.231344 0.100484 0.713293 0.452670 0.535072
-0.420814 0.231344 0.100484 0.651087 0.413193 0.636676
-0.388500 0.282262 0.100484 0.651087 0.413193 0.636676
-0.377429 0.274219 0.117026 0.651087 0.413193 0.636676
-0.408822 0.224752 0.117026 0.651087 0.413193 0.636676
-0.408822 0.224752 0.117026 0.578589 0.367184 0.728293
-0.377429 0.274219 0.117026 0.578589 0.367184 0.728293
-0.364768 0.265020 0.131722 0.578589 0.367184 0.728293
-0.395108 0.217212 0.131722 0.578589 0.367184 0.728293
-0.395108 0.217212 0.131722 0.496924 0.315358 0.808465
-0.364768 0.265020 0.131722 0.496924 0.315358 0.808465
-0.350717 0.254811 0.144341 0.496924 0.315358 0.808465
-0.379888 0.208845 0.144341 0.496924 0.315358 0.808465
-0.379888 0.208845 0.144341 0.407375 0.258528 0.875904
-0.350717 0.254811 0.144341 0.407375 0.258528 0.875904
-0.335497 0.243753 0.154684 0.407375 0.258528 0.875904
-0.363402 0.199782 0.154684 0.407375 0.258528 0.875904
-0.363402 0.199782 0.154684 0.311349 0.197588 0.929527
-0.335497 0.243753 0.154684 0.311349 0.197588 0.929527
-0.319348 0.232020 0.162587 0.311349 0.197588 0.929527
-0.345910 0.190165 0.162587 0.311349 0.197588 0.929527
-0.345910 0.190165 0.162587 0.210365 0.133502 0.968465
-0.319348 0.232020 0.162587 0.210365 0.133502 0.968465
-0.302525 0.219798 0.167926 0.210365 0.133502 0.968465
-0.327688 0.180148 0.167926 0.210365 0.133502 0.968465
-0.327688 0.180148 0.167926 0.106029 0.067288 0.992084
-0.302525 0.219798 0.167926 0.106029 0.067288 0.992084
-0.285294 0.207278 0.170617 0.106029 0.067288 0.992084
-0.309023 0.169887 0.170617 0.106029 0.067288 0.992084
-0.285294 0.207278 0.170617 -0.000000 -0.000000 1.000000
-0.267925 0.194659 0.170617 -0.000000 -0.000000 1.000000
-0.290210 0.159544 0.170617 -0.106028 -0.067288 0.992084
-0.267925 0.194659 0.170617 -0.106028 -0.067288 0.992084
-0.250694 0.182140 0.167926 -0.106028 -0.067288 0.992084
-0.271545 0.149283 0.167926 -0.106028 -0.067288 0.992084
-0.271545 0.149283 0.167926 -0.210366 -0.133502 0.968465
-0.250694 0.182140 0.167926 -0.210366 -0.133502 0.968465
-0.233871 0.169917 0.162587 -0.210366 -0.133502 0.968465
-0.253323 0.139266 0.162587 -0.210366 -0.133502 0.968465
-0.253323 0.139266 0.162587 -0.311348 -0.197588 0.929528
-0.233871 0.169917 0.162587 -0.311348 -0.197588 0.929528
-0.217722 0.158184 0.154684 -0.311348 -0.197588 0.929528
-0.235831 0.129649 0.154684 -0.311348 -0.197588 0.929528
-0.235831 0.129649 0.154684 -0.407375 -0.258529 0.875904
-0.217722 0.158184 0.154684 -0.407375 -0.258529 0.875904
-0.202502 0.147126 0.144341 -0.407375 -0.258529 0.875904
-0.219345 0.120586 0.144341 -0.407375 -0.258529 0.875904
-0.219345 0.120586 0.144341 -0.496925 -0.315359 0.808464
-0.202502 0.147126 0.144341 -0.496925 -0.315359 0.808464
-0.188451 0.136918 0.131722 -0.496925 -0.315359 0.808464
-0.204125 0.112219 0.131722 -0.496925 -0.315359 0.808464
-0.204125 0.112219 0.131722 -0.578589 -0.367184 0.728293
-0.188451 0.136918 0.131722 -0.578589 -0.367184 0.728293
-0.175790 0.127719 0.117026 -0.578589 -0.367184 0.728293
-0.190411 0.104679 0.117026 -0.578589 -0.367184 0.728293
-0.190411 0.104679 0.117026 -0.651087 -0.413192 0.636677
-0.175790 0.127719 0.117026 -0.651087 -0.413192 0.636677
-0.164719 0.119675 0.100484 -0.651087 -0.413192 0.636677
-0.178419 0.098087 0.100484 -0.651087 -0.413192 0.636677
-0.178419 0.098087 0.100484 -0.713294 -0.452670 0.535072
-0.164719 0.119675 0.100484 -0.713294 -0.452670 0.535072
-0.155412 0.112914 0.082358 -0.713294 -0.452670 0.535072
-0.168339 0.092545 0.082358 -0.713294 -0.452670 0.535072
-0.168339 0.092545 0.082358 -0.764244 -0.485004 0.425090
-0.155412 0.112914 0.082358 -0.764244 -0.485004 0.425090
-0.148017 0.107541 0.062932 -0.764244 -0.485004 0.425090
-0.160328 0.088141 0.062932 -0.764244 -0.485004 0.425090
-0.160328 0.088141 0.062932 -0.803155 -0.509697 0.308466
-0.148017 0.107541 0.062932 -0.803155 -0.509697 0.308466
-0.142650 0.103641 0.042515 -0.803155 -0.509697 0.308466
-0.154515 0.084945 0.042515 -0.803155 -0.509697 0.308466
-0.154515 0.084945 0.042515 -0.829430 -0.526372 0.187025
-0.142650 0.103641 0.042515 -0.829430 -0.526372 0.187025
-0.139395 0.101277 0.021426 -0.829430 -0.526372 0.187025
-0.150990 0.083007 0.021426 -0.829430 -0.526372 0.187025
-0.150990 0.083007 0.021426 -0.842669 -0.534773 0.062667
-0.139395 0.101277 0.021426 -0.842669 -0.534773 0.062667
-0.138305 0.100484 0.000000 -0.842669 -0.534773 0.062667
-0.149808 0.082358 0.000000 -0.842669 -0.534773 0.062667
-0.149808 0.082358 0.000000 -0.842669 -0.534773 -0.062667
-0.138305 0.100484 0.000000 -0.842669 -0.534773 -0.062667
-0.139395 0.101277 -0.021426 -0.842669 -0.534773 -0.062667
-0.150990 0.083007 -0.021426 -0.842669 -0.534773 -0.062667
-0.150990 0.083007 -0.021426 -0.829430 -0.526372 -0.187025
-0.139395 0.101277 -0.021426 -0.829430 -0.526372 -0.187025
-0.142650 0.103641 -0.042515 -0.829430 -0.526372 -0.187025
-0.154515 0.084945 -0.042515 -0.829430 -0.526372 -0.187025
-0.154515 0.084945 -0.042515 -0.803155 -0.509697 -0.308466
-0.142650 0.103641 -0.042515 -0.803155 -0.509697 -0.308466
-0.148017 0.107541 -0.062932 -0.803155 -0.509697 -0.308466
-0.160328 0.088141 -0.062932 -0.803155 -0.509697 -0.308466
-0.160328 0.088141 -0.062932 -0.764244 -0.485004 -0.425090
-0.148017 0.107541 -0.062932 -0.764244 -0.485004 -0.425090
-0.155412 0.112914 -0.082358 -0.764244 -0.485004 -0.425090
-0.168339 0.092545 -0.082358 -0.764244 -0.485004 -0.425090
-0.168339 0.092545 -0.082358 -0.713294 -0.452670 -0.535072
-0.155412 0.112914 -0.082358 -0.713294 -0.452670 -0.535072
-0.164719 0.119675 -0.100484 -0.713294 -0.452670 -0.535072
-0.178419 0.098087 -0.100484 -0.713294 -0.452670 -0.535072
-0.178419 0.098087 -0.100484 -0.651087 -0.413192 -0.636677
-0.164719 0.119675 -0.100484 -0.651087 -0.413192 -0.636677
-0.175790 0.127719 -0.117026 -0.651087 -0.413192 -0.636677
-0.190411 0.104679 -0.117026 -0.651087 -0.413192 -0.636677
-0.190411 0.104679 -0.117026 -0.578589 -0.367184 -0.728293
-0.175790 0.127719 -0.117026 -0.578589 -0.367184 -0.728293
-0.188451 0.136918 -0.131722 -0.578589 -0.367184 -0.728293
-0.204125 0.112219 -0.131722 -0.578589 -0.367184 -0.728293
-0.204125 0.112219 -0.131722 -0.496925 -0.315359 -0.808464
-0.188451 0.136918 -0.131722 -0.496925 -0.315359 -0.808464
-0.202502 0.147126 -0.144341 -0.496925 -0.315359 -0.808464
-0.219345 0.120586 -0.144341 -0.496925 -0.315359 -0.808464
-0.219345 0.120586 -0.144341 -0.407375 -0.258529 -0.875904
-0.202502 0.147126 -0.144341 -0.407375 -0.258529 -0.875904
-0.217722 0.158184 -0.154684 -0.407375 -0.258529 -0.875904
-0.235831 0.129649 -0.154684 -0.407375 -0.258529 -0.875904
-0.235831 0.129649 -0.154684 -0.311348 -0.197588 -0.929528
-0.217722 0.158184 -0.154684 -0.311348 -0.197588 -0.929528
-0.233871 0.169917 -0.162587 -0.311348 -0.197588 -0.929528
-0.253323 0.139266 -0.162587 -0.311348 -0.197588 -0.929528
-0.253323 0.139266 -0.162587 -0.210366 -0.133502 -0.968465
-0.233871 0.169917 -0.162587 -0.210366 -0.133502 -0.968465
-0.250694 0.182140 -0.167926 -0.210366 -0.133502 -0.968465
-0.271545 0.149283 -0.167926 -0.210366 -0.133502 -0.968465
-0.271545 0.149283 -0.167926 -0.106028 -0.067288 -0.992084
-0.250694 0.182140 -0.167926 -0.106028 -0.067288 -0.992084
-0.267925 0.194659 -0.170617 -0.106028 -0.067288 -0.992084
-0.290210 0.159544 -0.170617 -0.106028 -0.067288 -0.992084
-0.267925 0.194659 -0.170617 -0.000000 -0.000000 -1.000000
-0.285294 0.207278 -0.170617 -0.000000 -0.000000 -1.000000
-0.309023 0.169887 -0.170617 0.106029 0.067288 -0.992084
-0.285294 0.207278 -0.170617 0.106029 0.067288 -0.992084
-0.302525 0.219798 -0.167926 0.106029 0.067288 -0.992084
-0.327688 0.180148 -0.167926 0.106029 0.067288 -0.992084
-0.327688 0.180148 -0.167926 0.210365 0.133502 -0.968465
-0.302525 0.219798 -0.167926 0.210365 0.133502 -0.968465
-0.319348 0.232020 -0.162587 0.210365 0.133502 -0.968465
-0.345910 0.190165 -0.162587 0.210365 0.133502 -0.968465
-0.345910 0.190165 -0.162587 0.311349 0.197588 -0.929527
-0.319348 0.232020 -0.162587 0.311349 0.197588 -0.929527
-0.335497 0.243753 -0.154684 0.311349 0.197588 -0.929527
-0.363402 0.199782 -0.154684 0.311349 0.197588 -0.929527
-0.363402 0.199782 -0.154684 0.407375 0.258528 -0.875904
-0.335497 0.243753 -0.154684 0.407375 0.258528 -0.875904
-0.350717 0.254811 -0.144341 0.407375 0.258528 -0.875904
-0.379888 0.208845 -0.144341 0.407375 0.258528 -0.875904
-0.379888 0.208845 -0.144341 0.496924 0.315358 -0.808465
-0.350717 0.254811 -0.144341 0.496924 0.315358 -0.808465
-0.364768 0.265020 -0.131722 0.496924 0.315358 -0.808465
-0.395108 0.217212 -0.131722 0.496924 0.315358 -0.808465
-0.395108 0.217212 -0.131722 0.578589 0.367184 -0.728293
-0.364768 0.265020 -0.131722 0.578589 0.367184 -0.728293
-0.377429 0.274219 -0.117026 0.578589 0.367184 -0.728293
-0.408822 0.224752 -0.117026 0.578589 0.367184 -0.728293
-0.408822 0.224752 -0.117026 0.651087 0.413193 -0.636676
-0.377429 0.274219 -0.117026 0.651087 0.413193 -0.636676
-0.388500 0.282262 -0.100484 0.651087 0.413193 -0.636676
-0.420814 0.231344 -0.100484 0.651087 0.413193 -0.636676
-0.420814 0.231344 -0.100484 0.713293 0.452670 -0.535072
-0.388500 0.282262 -0.100484 0.713293 0.452670 -0.535072
-0.397807 0.289024 -0.082358 0.713293 0.452670 -0.535072
-0.430894 0.236886 -0.082358 0.713293 0.452670 -0.535072
-0.430894 0.236886 -0.082358 0.764244 0.485003 -0.425091
-0.397807 0.289024 -0.082358 0.764244 0.485003 -0.425091
-0.405202 0.294397 -0.062932 0.764244 0.485003 -0.425091
-0.438905 0.241290 -0.062932 0.764244 0.485003 -0.425091
-0.438905 0.241290 -0.062932 0.803155 0.509697 -0.308465
-0.405202 0.294397 -0.062932 0.803155 0.509697 -0.308465
-0.410569 0.298296 -0.042515 0.803155 0.509697 -0.308465
-0.444718 0.244486 -0.042515 0.803155 0.509697 -0.308465
-0.444718 0.244486 -0.042515 0.829430 0.526372 -0.187025
-0.410569 0.298296 -0.042515 0.829430 0.526372 -0.187025
-0.413824 0.300661 -0.021426 0.829430 0.526372 -0.187025
-0.448243 0.246424 -0.021426 0.829430 0.526372 -0.187025
-0.448243 0.246424 -0.021426 0.842669 0.534773 -0.062667
-0.413824 0.300661 -0.021426 0.842669 0.534773 -0.062667
-0.414914 0.301453 0.000000 0.842669 0.534773 -0.062667
-0.449425 0.247073 0.000000 0.842669 0.534773 -0.062667
-0.414914 0.301453 0.000000 0.768998 0.636172 0.062667
-0.373861 0.351078 0.000000 0.768998 0.636172 0.062667
-0.372878 0.350156 0.021426 0.768998 0.636172 0.062667
-0.413824 0.300661 0.021426 0.768998 0.636172 0.062667
-0.413824 0.300661 0.021426 0.756917 0.626177 0.187026
-0.372878 0.350156 0.021426 0.756917 0.626177 0.187026
-0.369945 0.347402 0.042515 0.756917 0.626177 0.187026
-0.410569 0.298296 0.042515 0.756917 0.626177 0.187026
-0.410569 0.298296 0.042515 0.732939 0.606341 0.308464
-0.369945 0.347402 0.042515 0.732939 0.606341 0.308464
-0.365109 0.342860 0.062932 0.732939 0.606341 0.308464
-0.405202 0.294397 0.062932 0.732939 0.606341 0.308464
-0.405202 0.294397 0.062932 0.697430 0.576965 0.425092
-0.365109 0.342860 0.062932 0.697430 0.576965 0.425092
-0.358446 0.336603 0.082358 0.697430 0.576965 0.425092
-0.397807 0.289024 0.082358 0.697430 0.576965 0.425092
-0.397807 0.289024 0.082358 0.650935 0.538500 0.535072
-0.358446 0.336603 0.082358 0.650935 0.538500 0.535072
-0.350060 0.328728 0.100484 0.650935 0.538500 0.535072
-0.388500 0.282262 0.100484 0.650935 0.538500 0.535072
-0.388500 0.282262 0.100484 0.594167 0.491537 0.636677
-0.350060 0.328728 0.100484 0.594167 0.491537 0.636677
-0.340085 0.319361 0.117026 0.594167 0.491537 0.636677
-0.377429 0.274219 0.117026 0.594167 0.491537 0.636677
-0.377429 0.274219 0.117026 0.528007 0.436805 0.728293
-0.340085 0.319361 0.117026 0.528007 0.436805 0.728293
-0.328676 0.308648 0.131722 0.528007 0.436805 0.728293
-0.364768 0.265020 0.131722 0.528007 0.436805 0.728293
-0.364768 0.265020 0.131722 0.453481 0.375152 0.808465
-0.328676 0.308648 0.131722 0.453481 0.375152 0.808465
-0.316015 0.296758 0.144341 0.453481 0.375152 0.808465
-0.350717 0.254811 0.144341 0.453481 0.375152 0.808465
-0.350717 0.254811 0.144341 0.371761 0.307547 0.875904
-0.316015 0.296758 0.144341 0.371761 0.307547 0.875904
-0.302301 0.283880 0.154684 0.371761 0.307547 0.875904
-0.335497 0.243753 0.154684 0.371761 0.307547 0.875904
-0.335497 0.243753 0.154684 0.284129 0.235052 0.929527
-0.302301 0.283880 0.154684 0.284129 0.235052 0.929527
-0.287750 0.270215 0.162587 0.284129 0.235052 0.929527
-0.319348 0.232020 0.162587 0.284129 0.235052 0.929527
-0.319348 0.232020 0.162587 0.191974 0.158815 0.968465
-0.287750 0.270215 0.162587 0.191974 0.158815 0.968465
-0.272592 0.255981 0.167926 0.191974 0.158815 0.968465
-0.302525 0.219798 0.167926 0.191974 0.158815 0.968465
-0.302525 0.219798 0.167926 0.096759 0.080046 0.992084
-0.272592 0.255981 0.167926 0.096759 0.080046 0.992084
-0.257065 0.241400 0.170617 0.096759 0.080046 0.992084
-0.285294 0.207278 0.170617 0.096759 0.080046 0.992084
-0.257065 0.241400 0.170617 -0.000000 -0.000000 1.000000
-0.241415 0.226704 0.170617 -0.000000 -0.000000 1.000000
-0.267925 0.194659 0.170617 -0.096759 -0.080046 0.992084
-0.241415 0.226704 0.170617 -0.096759 -0.080046 0.992084
-0.225889 0.212124 0.167926 -0.096759 -0.080046 0.992084
-0.250694 0.182140 0.167926 -0.096759 -0.080046 0.992084
-0.250694 0.182140 0.167926 -0.191974 -0.158815 0.968465
-0.225889 0.212124 0.167926 -0.191974 -0.158815 0.968465
-0.210731 0.197889 0.162587 -0.191974 -0.158815 0.968465
-0.233871 0.169917 0.162587 -0.191974 -0.158815 0.968465
-0.233871 0.169917 0.162587 -0.284129 -0.235052 0.929527
-0.210731 0.197889 0.162587 -0.284129 -0.235052 0.929527
-0.196180 0.184225 0.154684 -0.284129 -0.235052 0.929527
-0.217722 0.158184 0.154684 -0.284129 -0.235052 0.929527
-0.217722 0.158184 0.154684 -0.371761 -0.307547 0.875904
-0.196180 0.184225 0.154684 -0.371761 -0.307547 0.875904
-0.182466 0.171347 0.144341 -0.371761 -0.307547 0.875904
-0.202502 0.147126 0.144341 -0.371761 -0.307547 0.875904
-0.202502 0.147126 0.144341 -0.453482 -0.375153 0.808464
-0.182466 0.171347 0.144341 -0.453482 -0.375153 0.808464
-0.169804 0.159457 0.131722 -0.453482 -0.375153 0.808464
-0.188451 0.136918 0.131722 -0.453482 -0.375153 0.808464
-0.188451 0.136918 0.131722 -0.528006 -0.436805 0.728293
-0.169804 0.159457 0.131722 -0.528006 -0.436805 0.728293
-0.158396 0.148744 0.117026 -0.528006 -0.436805 0.728293
-0.175790 0.127719 0.117026 -0.528006 -0.436805 0.728293
-0.175790 0.127719 0.117026 -0.594167 -0.491537 0.636677
-0.158396 0.148744 0.117026 -0.594167 -0.491537 0.636677
-0.148421 0.139376 0.100484 -0.594167 -0.491537 0.636677
-0.164719 0.119675 0.100484 -0.594167 -0.491537 0.636677
-0.164719 0.119675 0.100484 -0.650934 -0.538500 0.535072
-0.148421 0.139376 0.100484 -0.650934 -0.538500 0.535072
-0.140035 0.131501 0.082358 -0.650934 -0.538500 0.535072
-0.155412 0.112914 0.082358 -0.650934 -0.538500 0.535072
-0.155412 0.112914 0.082358 -0.697431 -0.576965 0.425091
-0.140035 0.131501 0.082358 -0.697431 -0.576965 0.425091
-0.133371 0.125244 0.062932 -0.697431 -0.576965 0.425091
-0.148017 0.107541 0.062932 -0.697431 -0.576965 0.425091
-0.148017 0.107541 0.062932 -0.732939 -0.606340 0.308466
-0.133371 0.125244 0.062932 -0.732939 -0.606340 0.308466
-0.128535 0.120703 0.042515 -0.732939 -0.606340 0.308466
-0.142650 0.103641 0.042515 -0.732939 -0.606340 0.308466
-0.142650 0.103641 0.042515 -0.756918 -0.626177 0.187025
-0.128535 0.120703 0.042515 -0.756918 -0.626177 0.187025
-0.125603 0.117949 0.021426 -0.756918 -0.626177 0.187025
-0.139395 0.101277 0.021426 -0.756918 -0.626177 0.187025
-0.139395 0.101277 0.021426 -0.768999 -0.636171 0.062667
-0.125603 0.117949 0.021426 -0.768999 -0.636171 0.062667
-0.124620 0.117026 0.000000 -0.768999 -0.636171 0.062667
-0.138305 0.100484 0.000000 -0.768999 -0.636171 0.062667
-0.138305 0.100484 0.000000 -0.768999 -0.636171 -0.062667
-0.124620 0.117026 0.000000 -0.768999 -0.636171 -0.062667
-0.125603 0.117949 -0.021426 -0.768999 -0.636171 -0.062667
-0.139395 0.101277 -0.021426 -0.768999 -0.636171 -0.062667
-0.139395 0.101277 -0.021426 -0.756918 -0.626177 -0.187025
-0.125603 0.117949 -0.021426 -0.756918 -0.626177 -0.187025
-0.128535 0.120703 -0.042515 -0.756918 -0.626177 -0.187025
-0.142650 0.103641 -0.042515 -0.756918 -0.626177 -0.187025
-0.142650 0.103641 -0.042515 -0.732939 -0.606340 -0.308466
-0.128535 0.120703 -0.042515 -0.732939 -0.606340 -0.308466
-0.133371 0.125244 -0.062932 -0.732939 -0.606340 -0.308466
-0.148017 0.107541 -0.062932 -0.732939 -0.606340 -0.308466
-0.148017 0.107541 -0.062932 -0.697431 -0.576965 -0.425091
-0.133371 0.125244 -0.062932 -0.697431 -0.576965 -0.425091
-0.140035 0.131501 -0.082358 -0.697431 -0.576965 -0.425091
-0.155412 0.112914 -0.082358 -0.697431 -0.576965 -0.425091
-0.155412 0.112914 -0.082358 -0.650934 -0.538500 -0.535072
-0.140035 0.131501 -0.082358 -0.650934 -0.538500 -0.535072
-0.148421 0.139376 -0.100484 -0.650934 -0.538500 -0.535072
-0.164719 0.119675 -0.100484 -0.650934 -0.538500 -0.535072
-0.164719 0.119675 -0.100484 -0.594167 -0.491537 -0.636677
-0.148421 0.139376 -0.100484 -0.594167 -0.491537 -0.636677
-0.158396 0.148744 -0.117026 -0.594167 -0.491537 -0.636677
-0.175790 0.127719 -0.117026 -0.594167 -0.491537 -0.636677
-0.175790 0.127719 -0.117026 -0.528006 -0.436805 -0.728293
-0.158396 0.148744 -0.117026 -0.528006 -0.436805 -0.728293
-0.169804 0.159457 -0.131722 -0.528006 -0.436805 -0.728293
-0.188451 0.136918 -0.131722 -0.528006 -0.436805 -0.728293
-0.188451 0.136918 -0.131722 -0.453482 -0.375153 -0.808464
-0.169804 0.159457 -0.131722 -0.453482 -0.375153 -0.808464
-0.182466 0.171347 -0.144341 -0.453482 -0.375153 -0.808464
-0.202502 0.147126 -0.144341 -0.453482 -0.375153 -0.808464
-0.202502 0.147126 -0.144341 -0.371761 -0.307547 -0.875904
-0.182466 0.171347 -0.144341 -0.371761 -0.307547 -0.875904
-0.196180 0.184225 -0.154684 -0.371761 -0.307547 -0.875904
-0.217722 0.158184 -0.154684 -0.371761 -0.307547 -0.875904
-0.217722 0.158184 -0.154684 -0.284129 -0.235052 -0.929527
-0.196180 0.184225 -0.154684 -0.284129 -0.235052 -0.929527
-0.210731 0.197889 -0.162587 -0.284129 -0.235052 -0.929527
-0.233871 0.169917 -0.162587 -0.284129 -0.235052 -0.929527
-0.233871 0.169917 -0.162587 -0.191974 -0.158815 -0.968465
-0.210731 0.197889 -0.162587 -0.191974 -0.158815 -0.968465
-0.225889 0.212124 -0.167926 -0.191974 -0.158815 -0.968465
-0.250694 0.182140 -0.167926 -0.191974 -0.158815 -0.968465
-0.250694 0.182140 -0.167926 -0.096759 -0.080046 -0.992084
-0.225889 0.212124 -0.167926 -0.096759 -0.080046 -0.992084
-0.241415 0.226704 -0.170617 -0.096759 -0.080046 -0.992084
-0.267925 0.194659 -0.170617 -0.096759 -0.080046 -0.992084
-0.241415 0.226704 -0.170617 -0.000000 -0.000000 -1.000000
-0.257065 0.241400 -0.170617 -0.000000 -0.000000 -1.000000
-0.285294 0.207278 -0.170617 0.096759 0.080046 -0.992084
-0.257065 0.241400 -0.170617 0.096759 0.080046 -0.992084
-0.272592 0.255981 -0.167926 0.096759 0.080046 -0.992084
-0.302525 0.219798 -0.167926 0.096759 0.080046 -0.992084
-0.302525 0.219798 -0.167926 0.191974 0.158815 -0.968465
-0.272592 0.255981 -0.167926 0.191974 0.158815 -0.968465
-0.287750 0.270215 -0.162587 0.191974 0.158815 -0.968465
-0.319348 0.232020 -0.162587 0.191974 0.158815 -0.968465
-0.319348 0.232020 -0.162587 0.284129 0.235052 -0.929527
-0.287750 0.270215 -0.162587 0.284129 0.235052 -0.929527
-0.302301 0.283880 -0.154684 0.284129 0.235052 -0.929527
-0.335497 0.243753 -0.154684 0.284129 0.235052 -0.929527
-0.335497 0.243753 -0.154684 0.371761 0.307547 -0.875904
-0.302301 0.283880 -0.154684 0.371761 0.307547 -0.875904
-0.316015 0.296758 -0.144341 0.371761 0.307547 -0.875904
-0.350717 0.254811 -0.144341 0.371761 0.307547 -0.875904
-0.350717 0.254811 -0.144341 0.453481 0.375152 -0.808465
-0.316015 0.296758 -0.144341 0.453481 0.375152 -0.808465
-0.328676 0.308648 -0.131722 0.453481 0.375152 -0.808465
-0.364768 0.265020 -0.131722 0.453481 0.375152 -0.808465
-0.364768 0.265020 -0.131722 0.528007 0.436805 -0.728293
-0.328676 0.308648 -0.131722 0.528007 0.436805 -0.728293
-0.340085 0.319361 -0.117026 0.528007 0.436805 -0.728293
-0.377429 0.274219 -0.117026 0.528007 0.436805 -0.728293
-0.377429 0.274219 -0.117026 0.594167 0.491537 -0.636677
-0.340085 0.319361 -0.117026 0.594167 0.491537 -0.636677
-0.350060 0.328728 -0.100484 0.594167 0.491537 -0.636677
-0.388500 0.282262 -0.100484 0.594167 0.491537 -0.636677
-0.388500 0.282262 -0.100484 0.650935 0.538500 -0.535072
-0.350060 0.328728 -0.100484 0.650935 0.538500 -0.535072
-0.358446 0.336603 -0.082358 0.650935 0.538500 -0.535072
-0.397807 0.289024 -0.082358 0.650935 0.538500 -0.535072
-0.397807 0.289024 -0.082358 0.697430 0.576965 -0.425092
-0.358446 0.336603 -0.082358 0.697430 0.576965 -0.425092
-0.365109 0.342860 -0.062932 0.697430 0.576965 -0.425092
-0.405202 0.294397 -0.062932 0.697430 0.576965 -0.425092
-0.405202 0.294397 -0.062932 0.732939 0.606341 -0.308464
-0.365109 0.342860 -0.062932 0.732939 0.606341 -0.308464
-0.369945 0.347402 -0.042515 0.732939 0.606341 -0.308464
-0.410569 0.298296 -0.042515 0.732939 0.606341 -0.308464
-0.410569 0.298296 -0.042515 0.756917 0.626177 -0.187026
-0.369945 0.347402 -0.042515 0.756917 0.626177 -0.187026
-0.372878 0.350156 -0.021426 0.756917 0.626177 -0.187026
-0.413824 0.300661 -0.021426 0.756917 0.626177 -0.187026
-0.413824 0.300661 -0.021426 0.768998 0.636172 -0.062667
-0.372878 0.350156 -0.021426 0.768998 0.636172 -0.062667
-0.373861 0.351078 0.000000 0.768998 0.636172 -0.062667
-0.414914 0.301453 0.000000 0.768998 0.636172 -0.062667
-0.373861 0.351078 0.000000 0.683201 0.727537 0.062665
-0.326911 0.395167 0.000000 0.683201 0.727537 0.062665
-0.326051 0.394129 0.021426 0.683201 0.727537 0.062665
-0.372878 0.350156 0.021426 0.683201 0.727537 0.062665
-0.372878 0.350156 0.021426 0.672468 0.716106 0.187026
-0.326051 0.394129 0.021426 0.672468 0.716106 0.187026
-0.323487 0.391029 0.042515 0.672468 0.716106 0.187026
-0.369945 0.347402 0.042515 0.672468 0.716106 0.187026
-0.369945 0.347402 0.042515 0.651165 0.693421 0.308465
-0.323487 0.391029 0.042515 0.651165 0.693421 0.308465
-0.319258 0.385917 0.062932 0.651165 0.693421 0.308465
-0.365109 0.342860 0.062932 0.651165 0.693421 0.308465
-0.365109 0.342860 0.062932 0.619618 0.659827 0.425090
-0.319258 0.385917 0.062932 0.619618 0.659827 0.425090
-0.313432 0.378874 0.082358 0.619618 0.659827 0.425090
-0.358446 0.336603 0.082358 0.619618 0.659827 0.425090
-0.358446 0.336603 0.082358 0.578309 0.615838 0.535072
-0.313432 0.378874 0.082358 0.578309 0.615838 0.535072
-0.306099 0.370010 0.100484 0.578309 0.615838 0.535072
-0.350060 0.328728 0.100484 0.578309 0.615838 0.535072
-0.350060 0.328728 0.100484 0.527875 0.562131 0.636677
-0.306099 0.370010 0.100484 0.527875 0.562131 0.636677
-0.297376 0.359466 0.117026 0.527875 0.562131 0.636677
-0.340085 0.319361 0.117026 0.527875 0.562131 0.636677
-0.340085 0.319361 0.117026 0.469096 0.499537 0.728294
-0.297376 0.359466 0.117026 0.469096 0.499537 0.728294
-0.287401 0.347408 0.131722 0.469096 0.499537 0.728294
-0.328676 0.308648 0.131722 0.469096 0.499537 0.728294
-0.328676 0.308648 0.131722 0.402886 0.429032 0.808464
-0.287401 0.347408 0.131722 0.402886 0.429032 0.808464
-0.276330 0.334025 0.144341 0.402886 0.429032 0.808464
-0.316015 0.296758 0.144341 0.402886 0.429032 0.808464
-0.316015 0.296758 0.144341 0.330283 0.351717 0.875905
-0.276330 0.334025 0.144341 0.330283 0.351717 0.875905
-0.264338 0.319529 0.154684 0.330283 0.351717 0.875905
-0.302301 0.283880 0.154684 0.330283 0.351717 0.875905
-0.302301 0.283880 0.154684 0.252429 0.268811 0.929527
-0.264338 0.319529 0.154684 0.252429 0.268811 0.929527
-0.251614 0.304149 0.162587 0.252429 0.268811 0.929527
-0.287750 0.270215 0.162587 0.252429 0.268811 0.929527
-0.287750 0.270215 0.162587 0.170555 0.181623 0.968465
-0.251614 0.304149 0.162587 0.170555 0.181623 0.968465
-0.238359 0.288127 0.167926 0.170555 0.181623 0.968465
-0.272592 0.255981 0.167926 0.170555 0.181623 0.968465
-0.272592 0.255981 0.167926 0.085963 0.091542 0.992084
-0.238359 0.288127 0.167926 0.085963 0.091542 0.992084
-0.224783 0.271716 0.170617 0.085963 0.091542 0.992084
-0.257065 0.241400 0.170617 0.085963 0.091542 0.992084
-0.224783 0.271716 0.170617 -0.000000 0.000000 1.000000
-0.211098 0.255174 0.170617 -0.000000 0.000000 1.000000
-0.241415 0.226704 0.170617 -0.085964 -0.091542 0.992084
-0.211098 0.255174 0.170617 -0.085964 -0.091542 0.992084
-0.197521 0.238762 0.167926 -0.085964 -0.091542 0.992084
-0.225889 0.212124 0.167926 -0.085964 -0.091542 0.992084
-0.225889 0.212124 0.167926 -0.170556 -0.181623 0.968465
-0.197521 0.238762 0.167926 -0.170556 -0.181623 0.968465
-0.184267 0.222740 0.162587 -0.170556 -0.181623 0.968465
-0.210731 0.197889 0.162587 -0.170556 -0.181623 0.968465
-0.210731 0.197889 0.162587 -0.252429 -0.268810 0.929527
-0.184267 0.222740 0.162587 -0.252429 -0.268810 0.929527
-0.171543 0.207360 0.154684 -0.252429 -0.268810 0.929527
-0.196180 0.184225 0.154684 -0.252429 -0.268810 0.929527
-0.196180 0.184225 0.154684 -0.330283 -0.351716 0.875904
-0.171543 0.207360 0.154684 -0.330283 -0.351716 0.875904
-0.159551 0.192864 0.144341 -0.330283 -0.351716 0.875904
-0.182466 0.171347 0.144341 -0.330283 -0.351716 0.875904
-0.182466 0.171347 0.144341 -0.402887 -0.429031 0.808464
-0.159551 0.192864 0.144341 -0.402887 -0.429031 0.808464
-0.148480 0.179482 0.131722 -0.402887 -0.429031 0.808464
-0.169804 0.159457 0.131722 -0.402887 -0.429031 0.808464
-0.169804 0.159457 0.131722 -0.469096 -0.499537 0.728294
-0.148480 0.179482 0.131722 -0.469096 -0.499537 0.728294
-0.138505 0.167423 0.117026 -0.469096 -0.499537 0.728294
-0.158396 0.148744 0.117026 -0.469096 -0.499537 0.728294
-0.158396 0.148744 0.117026 -0.527875 -0.562131 0.636676
-0.138505 0.167423 0.117026 -0.527875 -0.562131 0.636676
-0.129782 0.156879 0.100484 -0.527875 -0.562131 0.636676
-0.148421 0.139376 0.100484 -0.527875 -0.562131 0.636676
-0.148421 0.139376 0.100484 -0.578309 -0.615838 0.535072
-0.129782 0.156879 0.100484 -0.578309 -0.615838 0.535072
-0.122449 0.148016 0.082358 -0.578309 -0.615838 0.535072
-0.140035 0.131501 0.082358 -0.578309 -0.615838 0.535072
-0.140035 0.131501 0.082358 -0.619618 -0.659827 0.425091
-0.122449 0.148016 0.082358 -0.619618 -0.659827 0.425091
-0.116623 0.140972 0.062932 -0.619618 -0.659827 0.425091
-0.133371 0.125244 0.062932 -0.619618 -0.659827 0.425091
-0.133371 0.125244 0.062932 -0.651165 -0.693421 0.308465
-0.116623 0.140972 0.062932 -0.651165 -0.693421 0.308465
-0.112394 0.135861 0.042515 -0.651165 -0.693421 0.308465
-0.128535 0.120703 0.042515 -0.651165 -0.693421 0.308465
-0.128535 0.120703 0.042515 -0.672468 -0.716107 0.187024
-0.112394 0.135861 0.042515 -0.672468 -0.716107 0.187024
-0.109829 0.132761 0.021426 -0.672468 -0.716107 0.187024
-0.125603 0.117949 0.021426 -0.672468 -0.716107 0.187024
-0.125603 0.117949 0.021426 -0.683201 -0.727536 0.062668
-0.109829 0.132761 0.021426 -0.683201 -0.727536 0.062668
-0.108970 0.131722 0.000000 -0.683201 -0.727536 0.062668
-0.124620 0.117026 0.000000 -0.683201 -0.727536 0.062668
-0.124620 0.117026 0.000000 -0.683201 -0.727536 -0.062668
-0.108970 0.131722 0.000000 -0.683201 -0.727536 -0.062668
-0.109829 0.132761 -0.021426 -0.683201 -0.727536 -0.062668
-0.125603 0.117949 -0.021426 -0.683201 -0.727536 -0.062668
-0.125603 0.117949 -0.021426 -0.672468 -0.716107 -0.187024
-0.109829 0.132761 -0.021426 -0.672468 -0.716107 -0.187024
-0.112394 0.135861 -0.042515 -0.672468 -0.716107 -0.187024
-0.128535 0.120703 -0.042515 -0.672468 -0.716107 -0.187024
-0.128535 0.120703 -0.042515 -0.651165 -0.693421 -0.308465
-0.112394 0.135861 -0.042515 -0.651165 -0.693421 -0.308465
-0.116623 0.140972 -0.062932 -0.651165 -0.693421 -0.308465
-0.133371 0.125244 -0.062932 -0.651165 -0.693421 -0.308465
-0.133371 0.125244 -0.062932 -0.619618 -0.659827 -0.425091
-0.116623 0.140972 -0.062932 -0.619618 -0.659827 -0.425091
-0.122449 0.148016 -0.082358 -0.619618 -0.659827 -0.425091
-0.140035 0.131501 -0.082358 -0.619618 -0.659827 -0.425091
-0.140035 0.131501 -0.082358 -0.578309 -0.615838 -0.535072
-0.122449 0.148016 -0.082358 -0.578309 -0.615838 -0.535072
-0.129782 0.156879 -0.100484 -0.578309 -0.615838 -0.535072
-0.148421 0.139376 -0.100484 -0.578309 -0.615838 -0.535072
-0.148421 0.139376 -0.100484 -0.527875 -0.562131 -0.636676
-0.129782 0.156879 -0.100484 -0.527875 -0.562131 -0.636676
-0.138505 0.167423 -0.117026 -0.527875 -0.562131 -0.636676
-0.158396 0.148744 -0.117026 -0.527875 -0.562131 -0.636676
-0.158396 0.148744 -0.117026 -0.469096 -0.499537 -0.728294
-0.138505 0.167423 -0.117026 -0.469096 -0.499537 -0.728294
-0.148480 0.179482 -0.131722 -0.469096 -0.499537 -0.728294
-0.169804 0.159457 -0.131722 -0.469096 -0.499537 -0.728294
-0.169804 0.159457 -0.131722 -0.402887 -0.429031 -0.808464
-0.148480 0.179482 -0.131722 -0.402887 -0.429031 -0.808464
-0.159551 0.192864 -0.144341 -0.402887 -0.429031 -0.808464
-0.182466 0.171347 -0.144341 -0.402887 -0.429031 -0.808464
-0.182466 0.171347 -0.144341 -0.330283 -0.351716 -0.875904
-0.159551 0.192864 -0.144341 -0.330283 -0.351716 -0.875904
-0.171543 0.207360 -0.154684 -0.330283 -0.351716 -0.875904
-0.196180 0.184225 -0.154684 -0.330283 -0.351716 -0.875904
-0.196180 0.184225 -0.154684 -0.252429 -0.268810 -0.929527
-0.171543 0.207360 -0.154684 -0.252429 -0.268810 -0.929527
-0.184267 0.222740 -0.162587 -0.252429 -0.268810 -0.929527
-0.210731 0.197889 -0.162587 -0.252429 -0.268810 -0.929527
-0.210731 0.197889 -0.162587 -0.170556 -0.181623 -0.968465
-0.184267 0.222740 -0.162587 -0.170556 -0.181623 -0.968465
-0.197521 0.238762 -0.167926 -0.170556 -0.181623 -0.968465
-0.225889 0.212124 -0.167926 -0.170556 -0.181623 -0.968465
-0.225889 0.212124 -0.167926 -0.085964 -0.091542 -0.992084
-0.197521 0.238762 -0.167926 -0.085964 -0.091542 -0.992084
-0.211098 0.255174 -0.170617 -0.085964 -0.091542 -0.992084
-0.241415 0.226704 -0.170617 -0.085964 -0.091542 -0.992084
-0.211098 0.255174 -0.170617 -0.000000 0.000000 -1.000000
-0.224783 0.271716 -0.170617 -0.000000 0.000000 -1.000000
-0.257065 0.241400 -0.170617 0.085963 0.091542 -0.992084
-0.224783 0.271716 -0.170617 0.085963 0.091542 -0.992084
-0.238359 0.288127 -0.167926 0.085963 0.091542 -0.992084
-0.272592 0.255981 -0.167926 0.085963 0.091542 -0.992084
-0.272592 0.255981 -0.167926 0.170555 0.181623 -0.968465
-0.238359 0.288127 -0.167926 0.170555 0.181623 -0.968465
-0.251614 0.304149 -0.162587 0.170555 0.181623 -0.968465
-0.287750 0.270215 -0.162587 0.170555 0.181623 -0.968465
-0.287750 0.270215 -0.162587 0.252429 0.268811 -0.929527
-0.251614 0.304149 -0.162587 0.252429 0.268811 -0.929527
-0.264338 0.319529 -0.154684 0.252429 0.268811 -0.929527
-0.302301 0.283880 -0.154684 0.252429 0.268811 -0.929527
-0.302301 0.283880 -0.154684 0.330283 0.351717 -0.875905
-0.264338 0.319529 -0.154684 0.330283 0.351717 -0.875905
-0.276330 0.334025 -0.144341 0.330283 0.351717 -0.875905
-0.316015 0.296758 -0.144341 0.330283 0.351717 -0.875905
-0.316015 0.296758 -0.144341 0.402886 0.429032 -0.808464
-0.276330 0.334025 -0.144341 0.402886 0.429032 -0.808464
-0.287401 0.347408 -0.131722 0.402886 0.429032 -0.808464
-0.328676 0.308648 -0.131722 0.402886 0.429032 -0.808464
-0.328676 0.308648 -0.131722 0.469096 0.499537 -0.728294
-0.287401 0.347408 -0.131722 0.469096 0.499537 -0.728294
-0.297376 0.359466 -0.117026 0.469096 0.499537 -0.728294
-0.340085 0.319361 -0.117026 0.469096 0.499537 -0.728294
-0.340085 0.319361 -0.117026 0.527875 0.562131 -0.636677
-0.297376 0.359466 -0.117026 0.527875 0.562131 -0.636677
-0.306099 0.370010 -0.100484 0.527875 0.562131 -0.636677
-0.350060 0.328728 -0.100484 0.527875 0.562131 -0.636677
-0.350060 0.328728 -0.100484 0.578309 0.615838 -0.535072
-0.306099 0.370010 -0.100484 0.578309 0.615838 -0.535072
-0.313432 0.378874 -0.082358 0.578309 0.615838 -0.535072
-0.358446 0.336603 -0.082358 0.578309 0.615838 -0.535072
-0.358446 0.336603 -0.082358 0.619618 0.659827 -0.425090
-0.313432 0.378874 -0.082358 0.619618 0.659827 -0.425090
-0.319258 0.385917 -0.062932 0.619618 0.659827 -0.425090
-0.365109 0.342860 -0.062932 0.619618 0.659827 -0.425090
-0.365109 0.342860 -0.062932 0.651165 0.693421 -0.308465
-0.319258 0.385917 -0.062932 0.651165 0.693421 -0.308465
-0.323487 0.391029 -0.042515 0.651165 0.693421 -0.308465
-0.369945 0.347402 -0.042515 0.651165 0.693421 -0.308465
-0.369945 0.347402 -0.042515 0.672468 0.716106 -0.187026
-0.323487 0.391029 -0.042515 0.672468 0.716106 -0.187026
-0.326051 0.394129 -0.021426 0.672468 0.716106 -0.187026
-0.372878 0.350156 -0.021426 0.672468 0.716106 -0.187026
-0.372878 0.350156 -0.021426 0.683201 0.727537 -0.062665
-0.326051 0.394129 -0.021426 0.683201 0.727537 -0.062665
-0.326911 0.395167 0.000000 0.683201 0.727537 -0.062665
-0.373861 0.351078 0.000000 0.683201 0.727537 -0.062665
-0.326911 0.395167 0.000000 0.586631 0.807426 0.062667
-0.274805 0.433024 0.000000 0.586631 0.807426 0.062667
-0.274083 0.431886 0.021426 0.586631 0.807426 0.062667
-0.326051 0.394129 0.021426 0.586631 0.807426 0.062667
-0.326051 0.394129 0.021426 0.577414 0.794742 0.187025
-0.274083 0.431886 0.021426 0.577414 0.794742 0.187025
-0.271928 0.428489 0.042515 0.577414 0.794742 0.187025
-0.323487 0.391029 0.042515 0.577414 0.794742 0.187025
-0.323487 0.391029 0.042515 0.559123 0.769565 0.308466
-0.271928 0.428489 0.042515 0.559123 0.769565 0.308466
-0.268373 0.422888 0.062932 0.559123 0.769565 0.308466
-0.319258 0.385917 0.062932 0.559123 0.769565 0.308466
-0.319258 0.385917 0.062932 0.532035 0.732283 0.425090
-0.268373 0.422888 0.062932 0.532035 0.732283 0.425090
-0.263475 0.415170 0.082358 0.532035 0.732283 0.425090
-0.313432 0.378874 0.082358 0.532035 0.732283 0.425090
-0.313432 0.378874 0.082358 0.496565 0.683462 0.535073
-0.263475 0.415170 0.082358 0.496565 0.683462 0.535073
-0.257311 0.405457 0.100484 0.496565 0.683462 0.535073
-0.306099 0.370010 0.100484 0.496565 0.683462 0.535073
-0.306099 0.370010 0.100484 0.453260 0.623858 0.636676
-0.257311 0.405457 0.100484 0.453260 0.623858 0.636676
-0.249978 0.393903 0.117026 0.453260 0.623858 0.636676
-0.297376 0.359466 0.117026 0.453260 0.623858 0.636676
-0.297376 0.359466 0.117026 0.402789 0.554391 0.728294
-0.249978 0.393903 0.117026 0.402789 0.554391 0.728294
-0.241593 0.380689 0.131722 0.402789 0.554391 0.728294
-0.287401 0.347408 0.131722 0.402789 0.554391 0.728294
-0.287401 0.347408 0.131722 0.345938 0.476142 0.808465
-0.241593 0.380689 0.131722 0.345938 0.476142 0.808465
-0.232286 0.366025 0.144341 0.345938 0.476142 0.808465
-0.276330 0.334025 0.144341 0.345938 0.476142 0.808465
-0.276330 0.334025 0.144341 0.283598 0.390338 0.875904
-0.232286 0.366025 0.144341 0.283598 0.390338 0.875904
-0.222206 0.350140 0.154684 0.283598 0.390338 0.875904
-0.264338 0.319529 0.154684 0.283598 0.390338 0.875904
-0.264338 0.319529 0.154684 0.216749 0.298328 0.929527
-0.222206 0.350140 0.154684 0.216749 0.298328 0.929527
-0.211510 0.333287 0.162587 0.216749 0.298328 0.929527
-0.251614 0.304149 0.162587 0.216749 0.298328 0.929527
-0.251614 0.304149 0.162587 0.146447 0.201567 0.968465
-0.211510 0.333287 0.162587 0.146447 0.201567 0.968465
-0.200368 0.315730 0.167926 0.146447 0.201567 0.968465
-0.238359 0.288127 0.167926 0.146447 0.201567 0.968465
-0.238359 0.288127 0.167926 0.073813 0.101594 0.992084
-0.200368 0.315730 0.167926 0.073813 0.101594 0.992084
-0.188955 0.297746 0.170617 0.073813 0.101594 0.992084
-0.224783 0.271716 0.170617 0.073813 0.101594 0.992084
-0.188955 0.297746 0.170617 0.000000 -0.000000 1.000000
-0.177452 0.279619 0.170617 0.000000 -0.000000 1.000000
-0.211098 0.255174 0.170617 -0.073812 -0.101594 0.992084
-0.177452 0.279619 0.170617 -0.073812 -0.101594 0.992084
-0.166039 0.261636 0.167926 -0.073812 -0.101594 0.992084
-0.197521 0.238762 0.167926 -0.073812 -0.101594 0.992084
-0.197521 0.238762 0.167926 -0.146447 -0.201567 0.968465
-0.166039 0.261636 0.167926 -0.146447 -0.201567 0.968465
-0.154897 0.244079 0.162587 -0.146447 -0.201567 0.968465
-0.184267 0.222740 0.162587 -0.146447 -0.201567 0.968465
-0.184267 0.222740 0.162587 -0.216747 -0.298328 0.929528
-0.154897 0.244079 0.162587 -0.216747 -0.298328 0.929528
-0.144201 0.227225 0.154684 -0.216747 -0.298328 0.929528
-0.171543 0.207360 0.154684 -0.216747 -0.298328 0.929528
-0.171543 0.207360 0.154684 -0.283597 -0.390339 0.875904
-0.144201 0.227225 0.154684 -0.283597 -0.390339 0.875904
-0.134121 0.211341 0.144341 -0.283597 -0.390339 0.875904
-0.159551 0.192864 0.144341 -0.283597 -0.390339 0.875904
-0.159551 0.192864 0.144341 -0.345938 -0.476143 0.808464
-0.134121 0.211341 0.144341 -0.345938 -0.476143 0.808464
-0.124814 0.196676 0.131722 -0.345938 -0.476143 0.808464
-0.148480 0.179482 0.131722 -0.345938 -0.476143 0.808464
-0.148480 0.179482 0.131722 -0.402789 -0.554391 0.728294
-0.124814 0.196676 0.131722 -0.402789 -0.554391 0.728294
-0.116429 0.183462 0.117026 -0.402789 -0.554391 0.728294
-0.138505 0.167423 0.117026 -0.402789 -0.554391 0.728294
-0.138505 0.167423 0.117026 -0.453260 -0.623858 0.636676
-0.116429 0.183462 0.117026 -0.453260 -0.623858 0.636676
-0.109096 0.171908 0.100484 -0.453260 -0.623858 0.636676
-0.129782 0.156879 0.100484 -0.453260 -0.623858 0.636676
-0.129782 0.156879 0.100484 -0.496565 -0.683463 0.535072
-0.109096 0.171908 0.100484 -0.496565 -0.683463 0.535072
-0.102932 0.162195 0.082358 -0.496565 -0.683463 0.535072
-0.122449 0.148016 0.082358 -0.496565 -0.683463 0.535072
-0.122449 0.148016 0.082358 -0.532034 -0.732282 0.425091
-0.102932 0.162195 0.082358 -0.532034 -0.732282 0.425091
-0.098034 0.154478 0.062932 -0.532034 -0.732282 0.425091
-0.116623 0.140972 0.062932 -0.532034 -0.732282 0.425091
-0.116623 0.140972 0.062932 -0.559123 -0.769566 0.308465
-0.098034 0.154478 0.062932 -0.559123 -0.769566 0.308465
-0.094480 0.148876 0.042515 -0.559123 -0.769566 0.308465
-0.112394 0.135861 0.042515 -0.559123 -0.769566 0.308465
-0.112394 0.135861 0.042515 -0.577414 -0.794742 0.187024
-0.094480 0.148876 0.042515 -0.577414 -0.794742 0.187024
-0.092324 0.145480 0.021426 -0.577414 -0.794742 0.187024
-0.109829 0.132761 0.021426 -0.577414 -0.794742 0.187024
-0.109829 0.132761 0.021426 -0.586630 -0.807427 0.062668
-0.092324 0.145480 0.021426 -0.586630 -0.807427 0.062668
-0.091602 0.144341 0.000000 -0.586630 -0.807427 0.062668
-0.108970 0.131722 0.000000 -0.586630 -0.807427 0.062668
-0.108970 0.131722 0.000000 -0.586630 -0.807427 -0.062668
-0.091602 0.144341 0.000000 -0.586630 -0.807427 -0.062668
-0.092324 0.145480 -0.021426 -0.586630 -0.807427 -0.062668
-0.109829 0.132761 -0.021426 -0.586630 -0.807427 -0.062668
-0.109829 0.132761 -0.021426 -0.577414 -0.794742 -0.187024
-0.092324 0.145480 -0.021426 -0.577414 -0.794742 -0.187024
-0.094480 0.148876 -0.042515 -0.577414 -0.794742 -0.187024
-0.112394 0.135861 -0.042515 -0.577414 -0.794742 -0.187024
-0.112394 0.135861 -0.042515 -0.559123 -0.769566 -0.308465
-0.094480 0.148876 -0.042515 -0.559123 -0.769566 -0.308465
-0.098034 0.154478 -0.062932 -0.559123 -0.769566 -0.308465
-0.116623 0.140972 -0.062932 -0.559123 -0.769566 -0.308465
-0.116623 0.140972 -0.062932 -0.532034 -0.732282 -0.425091
-0.098034 0.154478 -0.062932 -0.532034 -0.732282 -0.425091
-0.102932 0.162195 -0.082358 -0.532034 -0.732282 -0.425091
-0.122449 0.148016 -0.082358 -0.532034 -0.732282 -0.425091
-0.122449 0.148016 -0.082358 -0.496565 -0.683463 -0.535072
-0.102932 0.162195 -0.082358 -0.496565 -0.683463 -0.535072
-0.109096 0.171908 -0.100484 -0.496565 -0.683463 -0.535072
-0.129782 0.156879 -0.100484 -0.496565 -0.683463 -0.535072
-0.129782 0.156879 -0.100484 -0.453260 -0.623858 -0.636676
-0.109096 0.171908 -0.100484 -0.453260 -0.623858 -0.636676
-0.116429 0.183462 -0.117026 -0.453260 -0.623858 -0.636676
-0.138505 0.167423 -0.117026 -0.453260 -0.623858 -0.636676
-0.138505 0.167423 -0.117026 -0.402789 -0.554391 -0.728294
-0.116429 0.183462 -0.117026 -0.402789 -0.554391 -0.728294
-0.124814 0.196676 -0.131722 -0.402789 -0.554391 -0.728294
-0.148480 0.179482 -0.131722 -0.402789 -0.554391 -0.728294
-0.148480 0.179482 -0.131722 -0.345938 -0.476143 -0.808464
-0.124814 0.196676 -0.131722 -0.345938 -0.476143 -0.808464
-0.134121 0.211341 -0.144341 -0.345938 -0.476143 -0.808464
-0.159551 0.192864 -0.144341 -0.345938 -0.476143 -0.808464
-0.159551 0.192864 -0.144341 -0.283597 -0.390339 -0.875904
-0.134121 0.211341 -0.144341 -0.283597 -0.390339 -0.875904
-0.144201 0.227225 -0.154684 -0.283597 -0.390339 -0.875904
-0.171543 0.207360 -0.154684 -0.283597 -0.390339 -0.875904
-0.171543 0.207360 -0.154684 -0.216747 -0.298328 -0.929528
-0.144201 0.227225 -0.154684 -0.216747 -0.298328 -0.929528
-0.154897 0.244079 -0.162587 -0.216747 -0.298328 -0.929528
-0.184267 0.222740 -0.162587 -0.216747 -0.298328 -0.929528
-0.184267 0.222740 -0.162587 -0.146447 -0.201567 -0.968465
-0.154897 0.244079 -0.162587 -0.146447 -0.201567 -0.968465
-0.166039 0.261636 -0.167926 -0.146447 -0.201567 -0.968465
-0.197521 0.238762 -0.167926 -0.146447 -0.201567 -0.968465
-0.197521 0.238762 -0.167926 -0.073812 -0.101594 -0.992084
-0.166039 0.261636 -0.167926 -0.073812 -0.101594 -0.992084
-0.177452 0.279619 -0.170617 -0.073812 -0.101594 -0.992084
-0.211098 0.255174 -0.170617 -0.073812 -0.101594 -0.992084
-0.177452 0.279619 -0.170617 0.000000 -0.000000 -1.000000
-0.188955 0.297746 -0.170617 0.000000 -0.000000 -1.000000
-0.224783 0.271716 -0.170617 0.073813 0.101594 -0.992084
-0.188955 0.297746 -0.170617 0.073813 0.101594 -0.992084
-0.200368 0.315730 -0.167926 0.073813 0.101594 -0.992084
-0.238359 0.288127 -0.167926 0.073813 0.101594 -0.992084
-0.238359 0.288127 -0.167926 0.146447 0.201567 -0.968465
-0.200368 0.315730 -0.167926 0.146447 0.201567 -0.968465
-0.211510 0.333287 -0.162587 0.146447 0.201567 -0.968465
-0.251614 0.304149 -0.162587 0.146447 0.201567 -0.968465
-0.251614 0.304149 -0.162587 0.216749 0.298328 -0.929527
-0.211510 0.333287 -0.162587 0.216749 0.298328 -0.929527
-0.222206 0.350140 -0.154684 0.216749 0.298328 -0.929527
-0.264338 0.319529 -0.154684 0.216749 0.298328 -0.929527
-0.264338 0.319529 -0.154684 0.283598 0.390338 -0.875904
-0.222206 0.350140 -0.154684 0.283598 0.390338 -0.875904
-0.232286 0.366025 -0.144341 0.283598 0.390338 -0.875904
-0.276330 0.334025 -0.144341 0.283598 0.390338 -0.875904
-0.276330 0.334025 -0.144341 0.345938 0.476142 -0.808465
-0.232286 0.366025 -0.144341 0.345938 0.476142 -0.808465
-0.241593 0.380689 -0.131722 0.345938 0.476142 -0.808465
-0.287401 0.347408 -0.131722 0.345938 0.476142 -0.808465
-0.287401 0.347408 -0.131722 0.402789 0.554391 -0.728294
-0.241593 0.380689 -0.131722 0.402789 0.554391 -0.728294
-0.249978 0.393903 -0.117026 0.402789 0.554391 -0.728294
-0.297376 0.359466 -0.117026 0.402789 0.554391 -0.728294
-0.297376 0.359466 -0.117026 0.453260 0.623858 -0.636676
-0.249978 0.393903 -0.117026 0.453260 0.623858 -0.636676
-0.257311 0.405457 -0.100484 0.453260 0.623858 -0.636676
-0.306099 0.370010 -0.100484 0.453260 0.623858 -0.636676
-0.306099 0.370010 -0.100484 0.496565 0.683462 -0.535073
-0.257311 0.405457 -0.100484 0.496565 0.683462 -0.535073
-0.263475 0.415170 -0.082358 0.496565 0.683462 -0.535073
-0.313432 0.378874 -0.082358 0.496565 0.683462 -0.535073
-0.313432 0.378874 -0.082358 0.532035 0.732283 -0.425090
-0.263475 0.415170 -0.082358 0.532035 0.732283 -0.425090
-0.268373 0.422888 -0.062932 0.532035 0.732283 -0.425090
-0.319258 0.385917 -0.062932 0.532035 0.732283 -0.425090
-0.319258 0.385917 -0.062932 0.559123 0.769565 -0.308466
-0.268373 0.422888 -0.062932 0.559123 0.769565 -0.308466
-0.271928 0.428489 -0.042515 0.559123 0.769565 -0.308466
-0.323487 0.391029 -0.042515 0.559123 0.769565 -0.308466
-0.323487 0.391029 -0.042515 0.577414 0.794742 -0.187025
-0.271928 0.428489 -0.042515 0.577414 0.794742 -0.187025
-0.274083 0.431886 -0.021426 0.577414 0.794742 -0.187025
-0.326051 0.394129 -0.021426 0.577414 0.794742 -0.187025
-0.326051 0.394129 -0.021426 0.586631 0.807426 -0.062667
-0.274083 0.431886 -0.021426 0.586631 0.807426 -0.062667
-0.274805 0.433024 0.000000 0.586631 0.807426 -0.062667
-0.326911 0.395167 0.000000 0.586631 0.807426 -0.062667
-0.274805 0.433024 0.000000 0.480806 0.874584 0.062669
-0.218366 0.464052 0.000000 0.480806 0.874584 0.062669
-0.217792 0.462832 0.021426 0.480806 0.874584 0.062669
-0.274083 0.431886 0.021426 0.480806 0.874584 0.062669
-0.274083 0.431886 0.021426 0.473253 0.860845 0.187024
-0.217792 0.462832 0.021426 0.473253 0.860845 0.187024
-0.216079 0.459192 0.042515 0.473253 0.860845 0.187024
-0.271928 0.428489 0.042515 0.473253 0.860845 0.187024
-0.271928 0.428489 0.042515 0.458261 0.833574 0.308466
-0.216079 0.459192 0.042515 0.458261 0.833574 0.308466
-0.213255 0.453189 0.062932 0.458261 0.833574 0.308466
-0.268373 0.422888 0.062932 0.458261 0.833574 0.308466
-0.268373 0.422888 0.062932 0.436060 0.793190 0.425090
-0.213255 0.453189 0.062932 0.436060 0.793190 0.425090
-0.209363 0.444918 0.082358 0.436060 0.793190 0.425090
-0.263475 0.415170 0.082358 0.436060 0.793190 0.425090
-0.263475 0.415170 0.082358 0.406988 0.740309 0.535073
-0.209363 0.444918 0.082358 0.406988 0.740309 0.535073
-0.204465 0.434510 0.100484 0.406988 0.740309 0.535073
-0.257311 0.405457 0.100484 0.406988 0.740309 0.535073
-0.257311 0.405457 0.100484 0.371495 0.675748 0.636676
-0.204465 0.434510 0.100484 0.371495 0.675748 0.636676
-0.198638 0.422127 0.117026 0.371495 0.675748 0.636676
-0.249978 0.393903 0.117026 0.371495 0.675748 0.636676
-0.249978 0.393903 0.117026 0.330129 0.600503 0.728293
-0.198638 0.422127 0.117026 0.330129 0.600503 0.728293
-0.191975 0.407967 0.131722 0.330129 0.600503 0.728293
-0.241593 0.380689 0.131722 0.330129 0.600503 0.728293
-0.241593 0.380689 0.131722 0.283533 0.515745 0.808465
-0.191975 0.407967 0.131722 0.283533 0.515745 0.808465
-0.184580 0.392251 0.144341 0.283533 0.515745 0.808465
-0.232286 0.366025 0.144341 0.283533 0.515745 0.808465
-0.232286 0.366025 0.144341 0.232439 0.422806 0.875904
-0.184580 0.392251 0.144341 0.232439 0.422806 0.875904
-0.176569 0.375229 0.154684 0.232439 0.422806 0.875904
-0.222206 0.350140 0.154684 0.232439 0.422806 0.875904
-0.222206 0.350140 0.154684 0.177648 0.323141 0.929527
-0.176569 0.375229 0.154684 0.177648 0.323141 0.929527
-0.168070 0.357168 0.162587 0.177648 0.323141 0.929527
-0.211510 0.333287 0.162587 0.177648 0.323141 0.929527
-0.211510 0.333287 0.162587 0.120029 0.218332 0.968465
-0.168070 0.357168 0.162587 0.120029 0.218332 0.968465
-0.159217 0.338353 0.167926 0.120029 0.218332 0.968465
-0.200368 0.315730 0.167926 0.120029 0.218332 0.968465
-0.200368 0.315730 0.167926 0.060497 0.110045 0.992084
-0.159217 0.338353 0.167926 0.060497 0.110045 0.992084
-0.150148 0.319080 0.170617 0.060497 0.110045 0.992084
-0.188955 0.297746 0.170617 0.060497 0.110045 0.992084
-0.150148 0.319080 0.170617 -0.000000 -0.000000 1.000000
-0.141007 0.299655 0.170617 -0.000000 -0.000000 1.000000
-0.177452 0.279619 0.170617 -0.060498 -0.110045 0.992084
-0.141007 0.299655 0.170617 -0.060498 -0.110045 0.992084
-0.131938 0.280383 0.167926 -0.060498 -0.110045 0.992084
-0.166039 0.261636 0.167926 -0.060498 -0.110045 0.992084
-0.166039 0.261636 0.167926 -0.120029 -0.218332 0.968465
-0.131938 0.280383 0.167926 -0.120029 -0.218332 0.968465
-0.123085 0.261568 0.162587 -0.120029 -0.218332 0.968465
-0.154897 0.244079 0.162587 -0.120029 -0.218332 0.968465
-0.154897 0.244079 0.162587 -0.177648 -0.323141 0.929527
-0.123085 0.261568 0.162587 -0.177648 -0.323141 0.929527
-0.114586 0.243507 0.154684 -0.177648 -0.323141 0.929527
-0.144201 0.227225 0.154684 -0.177648 -0.323141 0.929527
-0.144201 0.227225 0.154684 -0.232439 -0.422805 0.875904
-0.114586 0.243507 0.154684 -0.232439 -0.422805 0.875904
-0.106575 0.226484 0.144341 -0.232439 -0.422805 0.875904
-0.134121 0.211341 0.144341 -0.232439 -0.422805 0.875904
-0.134121 0.211341 0.144341 -0.283534 -0.515746 0.808464
-0.106575 0.226484 0.144341 -0.283534 -0.515746 0.808464
-0.099180 0.210769 0.131722 -0.283534 -0.515746 0.808464
-0.124814 0.196676 0.131722 -0.283534 -0.515746 0.808464
-0.124814 0.196676 0.131722 -0.330129 -0.600502 0.728294
-0.099180 0.210769 0.131722 -0.330129 -0.600502 0.728294
-0.092517 0.196608 0.117026 -0.330129 -0.600502 0.728294
-0.116429 0.183462 0.117026 -0.330129 -0.600502 0.728294
-0.116429 0.183462 0.117026 -0.371495 -0.675747 0.636676
-0.092517 0.196608 0.117026 -0.371495 -0.675747 0.636676
-0.086690 0.184226 0.100484 -0.371495 -0.675747 0.636676
-0.109096 0.171908 0.100484 -0.371495 -0.675747 0.636676
-0.109096 0.171908 0.100484 -0.406989 -0.740309 0.535072
-0.086690 0.184226 0.100484 -0.406989 -0.740309 0.535072
-0.081792 0.173817 0.082358 -0.406989 -0.740309 0.535072
-0.102932 0.162195 0.082358 -0.406989 -0.740309 0.535072
-0.102932 0.162195 0.082358 -0.436060 -0.793190 0.425091
-0.081792 0.173817 0.082358 -0.436060 -0.793190 0.425091
-0.077900 0.165546 0.062932 -0.436060 -0.793190 0.425091
-0.098034 0.154478 0.062932 -0.436060 -0.793190 0.425091
-0.098034 0.154478 0.062932 -0.458261 -0.833574 0.308466
-0.077900 0.165546 0.062932 -0.458261 -0.833574 0.308466
-0.075076 0.159544 0.042515 -0.458261 -0.833574 0.308466
-0.094480 0.148876 0.042515 -0.458261 -0.833574 0.308466
-0.094480 0.148876 0.042515 -0.473253 -0.860845 0.187024
-0.075076 0.159544 0.042515 -0.473253 -0.860845 0.187024
-0.073363 0.155904 0.021426 -0.473253 -0.860845 0.187024
-0.092324 0.145480 0.021426 -0.473253 -0.860845 0.187024
-0.092324 0.145480 0.021426 -0.480807 -0.874584 0.062668
-0.073363 0.155904 0.021426 -0.480807 -0.874584 0.062668
-0.072789 0.154684 0.000000 -0.480807 -0.874584 0.062668
-0.091602 0.144341 0.000000 -0.480807 -0.874584 0.062668
-0.091602 0.144341 0.000000 -0.480807 -0.874584 -0.062668
-0.072789 0.154684 0.000000 -0.480807 -0.874584 -0.062668
-0.073363 0.155904 -0.021426 -0.480807 -0.874584 -0.062668
-0.092324 0.145480 -0.021426 -0.480807 -0.874584 -0.062668
-0.092324 0.145480 -0.021426 -0.473253 -0.860845 -0.187024
-0.073363 0.155904 -0.021426 -0.473253 -0.860845 -0.187024
-0.075076 0.159544 -0.042515 -0.473253 -0.860845 -0.187024
-0.094480 0.148876 -0.042515 -0.473253 -0.860845 -0.187024
-0.094480 0.148876 -0.042515 -0.458261 -0.833574 -0.308466
-0.075076 0.159544 -0.042515 -0.458261 -0.833574 -0.308466
-0.077900 0.165546 -0.062932 -0.458261 -0.833574 -0.308466
-0.098034 0.154478 -0.062932 -0.458261 -0.833574 -0.308466
-0.098034 0.154478 -0.062932 -0.436060 -0.793190 -0.425091
-0.077900 0.165546 -0.062932 -0.436060 -0.793190 -0.425091
-0.081792 0.173817 -0.082358 -0.436060 -0.793190 -0.425091
-0.102932 0.162195 -0.082358 -0.436060 -0.793190 -0.425091
-0.102932 0.162195 -0.082358 -0.406989 -0.740309 -0.535072
-0.081792 0.173817 -0.082358 -0.406989 -0.740309 -0.535072
-0.086690 0.184226 -0.100484 -0.406989 -0.740309 -0.535072
-0.109096 0.171908 -0.100484 -0.406989 -0.740309 -0.535072
-0.109096 0.171908 -0.100484 -0.371495 -0.675747 -0.636676
-0.086690 0.184226 -0.100484 -0.371495 -0.675747 -0.636676
-0.092517 0.196608 -0.117026 -0.371495 -0.675747 -0.636676
-0.116429 0.183462 -0.117026 -0.371495 -0.675747 -0.636676
-0.116429 0.183462 -0.117026 -0.330129 -0.600502 -0.728294
-0.092517 0.196608 -0.117026 -0.330129 -0.600502 -0.728294
-0.099180 0.210769 -0.131722 -0.330129 -0.600502 -0.728294
-0.124814 0.196676 -0.131722 -0.330129 -0.600502 -0.728294
-0.124814 0.196676 -0.131722 -0.283534 -0.515746 -0.808464
-0.099180 0.210769 -0.131722 -0.283534 -0.515746 -0.808464
-0.106575 0.226484 -0.144341 -0.283534 -0.515746 -0.808464
-0.134121 0.211341 -0.144341 -0.283534 -0.515746 -0.808464
-0.134121 0.211341 -0.144341 -0.232439 -0.422805 -0.875904
-0.106575 0.226484 -0.144341 -0.232439 -0.422805 -0.875904
-0.114586 0.243507 -0.154684 -0.232439 -0.422805 -0.875904
-0.144201 0.227225 -0.154684 -0.232439 -0.422805 -0.875904
-0.144201 0.227225 -0.154684 -0.177648 -0.323141 -0.929527
-0.114586 0.243507 -0.154684 -0.177648 -0.323141 -0.929527
-0.123085 0.261568 -0.162587 -0.177648 -0.323141 -0.929527
-0.154897 0.244079 -0.162587 -0.177648 -0.323141 -0.929527
-0.154897 0.244079 -0.162587 -0.120029 -0.218332 -0.968465
-0.123085 0.261568 -0.162587 -0.120029 -0.218332 -0.968465
-0.131938 0.280383 -0.167926 -0.120029 -0.218332 -0.968465
-0.166039 0.261636 -0.167926 -0.120029 -0.218332 -0.968465
-0.166039 0.261636 -0.167926 -0.060498 -0.110045 -0.992084
-0.131938 0.280383 -0.167926 -0.060498 -0.110045 -0.992084
-0.141007 0.299655 -0.170617 -0.060498 -0.110045 -0.992084
-0.177452 0.279619 -0.170617 -0.060498 -0.110045 -0.992084
-0.141007 0.299655 -0.170617 -0.000000 -0.000000 -1.000000
-0.150148 0.319080 -0.170617 -0.000000 -0.000000 -1.000000
-0.188955 0.297746 -0.170617 0.060497 0.110045 -0.992084
-0.150148 0.319080 -0.170617 0.060497 0.110045 -0.992084
-0.159217 0.338353 -0.167926 0.060497 0.110045 -0.992084
-0.200368 0.315730 -0.167926 0.060497 0.110045 -0.992084
-0.200368 0.315730 -0.167926 0.120029 0.218332 -0.968465
-0.159217 0.338353 -0.167926 0.120029 0.218332 -0.968465
-0.168070 0.357168 -0.162587 0.120029 0.218332 -0.968465
-0.211510 0.333287 -0.162587 0.120029 0.218332 -0.968465
-0.211510 0.333287 -0.162587 0.177648 0.323141 -0.929527
-0.168070 0.357168 -0.162587 0.177648 0.323141 -0.929527
-0.176569 0.375229 -0.154684 0.177648 0.323141 -0.929527
-0.222206 0.350140 -0.154684 0.177648 0.323141 -0.929527
-0.222206 0.350140 -0.154684 0.232439 0.422806 -0.875904
-0.176569 0.375229 -0.154684 0.232439 0.422806 -0.875904
-0.184580 0.392251 -0.144341 0.232439 0.422806 -0.875904
-0.232286 0.366025 -0.144341 0.232439 0.422806 -0.875904
-0.232286 0.366025 -0.144341 0.283533 0.515745 -0.808465
-0.184580 0.392251 -0.144341 0.283533 0.515745 -0.808465
-0.191975 0.407967 -0.131722 0.283533 0.515745 -0.808465
-0.241593 0.380689 -0.131722 0.283533 0.515745 -0.808465
-0.241593 0.380689 -0.131722 0.330129 0.600503 -0.728293
-0.191975 0.407967 -0.131722 0.330129 0.600503 -0.728293
-0.198638 0.422127 -0.117026 0.330129 0.600503 -0.728293
-0.249978 0.393903 -0.117026 0.330129 0.600503 -0.728293
-0.249978 0.393903 -0.117026 0.371495 0.675748 -0.636676
-0.198638 0.422127 -0.117026 0.371495 0.675748 -0.636676
-0.204465 0.434510 -0.100484 0.371495 0.675748 -0.636676
-0.257311 0.405457 -0.100484 0.371495 0.675748 -0.636676
-0.257311 0.405457 -0.100484 0.406988 0.740309 -0.535073
-0.204465 0.434510 -0.100484 0.406988 0.740309 -0.535073
-0.209363 0.444918 -0.082358 0.406988 0.740309 -0.535073
-0.263475 0.415170 -0.082358 0.406988 0.740309 -0.535073
-0.263475 0.415170 -0.082358 0.436060 0.793190 -0.425090
-0.209363 0.444918 -0.082358 0.436060 0.793190 -0.425090
-0.213255 0.453189 -0.062932 0.436060 0.793190 -0.425090
-0.268373 0.422888 -0.062932 0.436060 0.793190 -0.425090
-0.268373 0.422888 -0.062932 0.458261 0.833574 -0.308466
-0.213255 0.453189 -0.062932 0.458261 0.833574 -0.308466
-0.216079 0.459192 -0.042515 0.458261 0.833574 -0.308466
-0.271928 0.428489 -0.042515 0.458261 0.833574 -0.308466
-0.271928 0.428489 -0.042515 0.473253 0.860845 -0.187024
-0.216079 0.459192 -0.042515 0.473253 0.860845 -0.187024
-0.217792 0.462832 -0.021426 0.473253 0.860845 -0.187024
-0.274083 0.431886 -0.021426 0.473253 0.860845 -0.187024
-0.274083 0.431886 -0.021426 0.480806 0.874584 -0.062669
-0.217792 0.462832 -0.021426 0.480806 0.874584 -0.062669
-0.218366 0.464052 0.000000 0.480806 0.874584 -0.062669
-0.274805 0.433024 0.000000 0.480806 0.874584 -0.062669
-0.218366 0.464052 0.000000 0.367402 0.927949 0.062667
-0.158483 0.487761 0.000000 0.367402 0.927949 0.062667
-0.158067 0.486479 0.021426 0.367402 0.927949 0.062667
-0.217792 0.462832 0.021426 0.367402 0.927949 0.062667
-0.217792 0.462832 0.021426 0.361630 0.913371 0.187024
-0.158067 0.486479 0.021426 0.361630 0.913371 0.187024
-0.156824 0.482653 0.042515 0.361630 0.913371 0.187024
-0.216079 0.459192 0.042515 0.361630 0.913371 0.187024
-0.216079 0.459192 0.042515 0.350173 0.884436 0.308467
-0.156824 0.482653 0.042515 0.350173 0.884436 0.308467
-0.154774 0.476344 0.062932 0.350173 0.884436 0.308467
-0.213255 0.453189 0.062932 0.350173 0.884436 0.308467
-0.213255 0.453189 0.062932 0.333209 0.841588 0.425089
-0.154774 0.476344 0.062932 0.333209 0.841588 0.425089
-0.151949 0.467650 0.082358 0.333209 0.841588 0.425089
-0.209363 0.444918 0.082358 0.333209 0.841588 0.425089
-0.209363 0.444918 0.082358 0.310994 0.785480 0.535074
-0.151949 0.467650 0.082358 0.310994 0.785480 0.535074
-0.148394 0.456710 0.100484 0.310994 0.785480 0.535074
-0.204465 0.434510 0.100484 0.310994 0.785480 0.535074
-0.204465 0.434510 0.100484 0.283873 0.716980 0.636676
-0.148394 0.456710 0.100484 0.283873 0.716980 0.636676
-0.144165 0.443695 0.117026 0.283873 0.716980 0.636676
-0.198638 0.422127 0.117026 0.283873 0.716980 0.636676
-0.198638 0.422127 0.117026 0.252264 0.637144 0.728292
-0.144165 0.443695 0.117026 0.252264 0.637144 0.728292
-0.139329 0.428811 0.131722 0.252264 0.637144 0.728292
-0.191975 0.407967 0.131722 0.252264 0.637144 0.728292
-0.191975 0.407967 0.131722 0.216658 0.547214 0.808466
-0.139329 0.428811 0.131722 0.216658 0.547214 0.808466
-0.133962 0.412292 0.144341 0.216658 0.547214 0.808466
-0.184580 0.392251 0.144341 0.216658 0.547214 0.808466
-0.184580 0.392251 0.144341 0.177615 0.448604 0.875904
-0.133962 0.412292 0.144341 0.177615 0.448604 0.875904
-0.128148 0.394400 0.154684 0.177615 0.448604 0.875904
-0.176569 0.375229 0.154684 0.177615 0.448604 0.875904
-0.176569 0.375229 0.154684 0.135748 0.342858 0.929527
-0.128148 0.394400 0.154684 0.135748 0.342858 0.929527
-0.121980 0.375416 0.162587 0.135748 0.342858 0.929527
-0.168070 0.357168 0.162587 0.135748 0.342858 0.929527
-0.168070 0.357168 0.162587 0.091719 0.231654 0.968465
-0.121980 0.375416 0.162587 0.091719 0.231654 0.968465
-0.115554 0.355640 0.167926 0.091719 0.231654 0.968465
-0.159217 0.338353 0.167926 0.091719 0.231654 0.968465
-0.159217 0.338353 0.167926 0.046228 0.116759 0.992084
-0.115554 0.355640 0.167926 0.046228 0.116759 0.992084
-0.108973 0.335383 0.170617 0.046228 0.116759 0.992084
-0.150148 0.319080 0.170617 0.046228 0.116759 0.992084
-0.108973 0.335383 0.170617 0.000000 -0.000000 1.000000
-0.102338 0.314965 0.170617 0.000000 -0.000000 1.000000
-0.141007 0.299655 0.170617 -0.046228 -0.116759 0.992084
-0.102338 0.314965 0.170617 -0.046228 -0.116759 0.992084
-0.095757 0.294708 0.167926 -0.046228 -0.116759 0.992084
-0.131938 0.280383 0.167926 -0.046228 -0.116759 0.992084
-0.131938 0.280383 0.167926 -0.091718 -0.231654 0.968465
-0.095757 0.294708 0.167926 -0.091718 -0.231654 0.968465
-0.089331 0.274932 0.162587 -0.091718 -0.231654 0.968465
-0.123085 0.261568 0.162587 -0.091718 -0.231654 0.968465
-0.123085 0.261568 0.162587 -0.135747 -0.342858 0.929527
-0.089331 0.274932 0.162587 -0.135747 -0.342858 0.929527
-0.083163 0.255948 0.154684 -0.135747 -0.342858 0.929527
-0.114586 0.243507 0.154684 -0.135747 -0.342858 0.929527
-0.114586 0.243507 0.154684 -0.177614 -0.448603 0.875904
-0.083163 0.255948 0.154684 -0.177614 -0.448603 0.875904
-0.077349 0.238056 0.144341 -0.177614 -0.448603 0.875904
-0.106575 0.226484 0.144341 -0.177614 -0.448603 0.875904
-0.106575 0.226484 0.144341 -0.216658 -0.547216 0.808464
-0.077349 0.238056 0.144341 -0.216658 -0.547216 0.808464
-0.071982 0.221537 0.131722 -0.216658 -0.547216 0.808464
-0.099180 0.210769 0.131722 -0.216658 -0.547216 0.808464
-0.099180 0.210769 0.131722 -0.252263 -0.637144 0.728293
-0.071982 0.221537 0.131722 -0.252263 -0.637144 0.728293
-0.067146 0.206653 0.117026 -0.252263 -0.637144 0.728293
-0.092517 0.196608 0.117026 -0.252263 -0.637144 0.728293
-0.092517 0.196608 0.117026 -0.283873 -0.716980 0.636676
-0.067146 0.206653 0.117026 -0.283873 -0.716980 0.636676
-0.062917 0.193638 0.100484 -0.283873 -0.716980 0.636676
-0.086690 0.184226 0.100484 -0.283873 -0.716980 0.636676
-0.086690 0.184226 0.100484 -0.310994 -0.785481 0.535072
-0.062917 0.193638 0.100484 -0.310994 -0.785481 0.535072
-0.059362 0.182698 0.082358 -0.310994 -0.785481 0.535072
-0.081792 0.173817 0.082358 -0.310994 -0.785481 0.535072
-0.081792 0.173817 0.082358 -0.333208 -0.841588 0.425091
-0.059362 0.182698 0.082358 -0.333208 -0.841588 0.425091
-0.056538 0.174004 0.062932 -0.333208 -0.841588 0.425091
-0.077900 0.165546 0.062932 -0.333208 -0.841588 0.425091
-0.077900 0.165546 0.062932 -0.350174 -0.884436 0.308465
-0.056538 0.174004 0.062932 -0.350174 -0.884436 0.308465
-0.054487 0.167695 0.042515 -0.350174 -0.884436 0.308465
-0.075076 0.159544 0.042515 -0.350174 -0.884436 0.308465
-0.075076 0.159544 0.042515 -0.361629 -0.913371 0.187024
-0.054487 0.167695 0.042515 -0.361629 -0.913371 0.187024
-0.053244 0.163869 0.021426 -0.361629 -0.913371 0.187024
-0.073363 0.155904 0.021426 -0.361629 -0.913371 0.187024
-0.073363 0.155904 0.021426 -0.367401 -0.927949 0.062667
-0.053244 0.163869 0.021426 -0.367401 -0.927949 0.062667
-0.052828 0.162587 0.000000 -0.367401 -0.927949 0.062667
-0.072789 0.154684 0.000000 -0.367401 -0.927949 0.062667
-0.072789 0.154684 0.000000 -0.367401 -0.927949 -0.062667
-0.052828 0.162587 0.000000 -0.367401 -0.927949 -0.062667
-0.053244 0.163869 -0.021426 -0.367401 -0.927949 -0.062667
-0.073363 0.155904 -0.021426 -0.367401 -0.927949 -0.062667
-0.073363 0.155904 -0.021426 -0.361629 -0.913371 -0.187024
-0.053244 0.163869 -0.021426 -0.361629 -0.913371 -0.187024
-0.054487 0.167695 -0.042515 -0.361629 -0.913371 -0.187024
-0.075076 0.159544 -0.042515 -0.361629 -0.913371 -0.187024
-0.075076 0.159544 -0.042515 -0.350174 -0.884436 -0.308465
-0.054487 0.167695 -0.042515 -0.350174 -0.884436 -0.308465
-0.056538 0.174004 -0.062932 -0.350174 -0.884436 -0.308465
-0.077900 0.165546 -0.062932 -0.350174 -0.884436 -0.308465
-0.077900 0.165546 -0.062932 -0.333208 -0.841588 -0.425091
-0.056538 0.174004 -0.062932 -0.333208 -0.841588 -0.425091
-0.059362 0.182698 -0.082358 -0.333208 -0.841588 -0.425091
-0.081792 0.173817 -0.082358 -0.333208 -0.841588 -0.425091
-0.081792 0.173817 -0.082358 -0.310994 -0.785481 -0.535072
-0.059362 0.182698 -0.082358 -0.310994 -0.785481 -0.535072
-0.062917 0.193638 -0.100484 -0.310994 -0.785481 -0.535072
-0.086690 0.184226 -0.100484 -0.310994 -0.785481 -0.535072
-0.086690 0.184226 -0.100484 -0.283873 -0.716980 -0.636676
-0.062917 0.193638 -0.100484 -0.283873 -0.716980 -0.636676
-0.067146 0.206653 -0.117026 -0.283873 -0.716980 -0.636676
-0.092517 0.196608 -0.117026 -0.283873 -0.716980 -0.636676
-0.092517 0.196608 -0.117026 -0.252263 -0.637144 -0.728293
-0.067146 0.206653 -0.117026 -0.252263 -0.637144 -0.728293
-0.071982 0.221537 -0.131722 -0.252263 -0.637144 -0.728293
-0.099180 0.210769 -0.131722 -0.252263 -0.637144 -0.728293
-0.099180 0.210769 -0.131722 -0.216658 -0.547216 -0.808464
-0.071982 0.221537 -0.131722 -0.216658 -0.547216 -0.808464
-0.077349 0.238056 -0.144341 -0.216658 -0.547216 -0.808464
-0.106575 0.226484 -0.144341 -0.216658 -0.547216 -0.808464
-0.106575 0.226484 -0.144341 -0.177614 -0.448603 -0.875904
-0.077349 0.238056 -0.144341 -0.177614 -0.448603 -0.875904
-0.083163 0.255948 -0.154684 -0.177614 -0.448603 -0.875904
-0.114586 0.243507 -0.154684 -0.177614 -0.448603 -0.875904
-0.114586 0.243507 -0.154684 -0.135747 -0.342858 -0.929527
-0.083163 0.255948 -0.154684 -0.135747 -0.342858 -0.929527
-0.089331 0.274932 -0.162587 -0.135747 -0.342858 -0.929527
-0.123085 0.261568 -0.162587 -0.135747 -0.342858 -0.929527
-0.123085 0.261568 -0.162587 -0.091718 -0.231654 -0.968465
-0.089331 0.274932 -0.162587 -0.091718 -0.231654 -0.968465
-0.095757 0.294708 -0.167926 -0.091718 -0.231654 -0.968465
-0.131938 0.280383 -0.167926 -0.091718 -0.231654 -0.968465
-0.131938 0.280383 -0.167926 -0.046228 -0.116759 -0.992084
-0.095757 0.294708 -0.167926 -0.046228 -0.116759 -0.992084
-0.102338 0.314965 -0.170617 -0.046228 -0.116759 -0.992084
-0.141007 0.299655 -0.170617 -0.046228 -0.116759 -0.992084
-0.102338 0.314965 -0.170617 0.000000 -0.000000 -1.000000
-0.108973 0.335383 -0.170617 0.000000 -0.000000 -1.000000
-0.150148 0.319080 -0.170617 0.046228 0.116759 -0.992084
-0.108973 0.335383 -0.170617 0.046228 0.116759 -0.992084
-0.115554 0.355640 -0.167926 0.046228 0.116759 -0.992084
-0.159217 0.338353 -0.167926 0.046228 0.116759 -0.992084
-0.159217 0.338353 -0.167926 0.091719 0.231654 -0.968465
-0.115554 0.355640 -0.167926 0.091719 0.231654 -0.968465
-0.121980 0.375416 -0.162587 0.091719 0.231654 -0.968465
-0.168070 0.357168 -0.162587 0.091719 0.231654 -0.968465
-0.168070 0.357168 -0.162587 0.135748 0.342858 -0.929527
-0.121980 0.375416 -0.162587 0.135748 0.342858 -0.929527
-0.128148 0.394400 -0.154684 0.135748 0.342858 -0.929527
-0.176569 0.375229 -0.154684 0.135748 0.342858 -0.929527
-0.176569 0.375229 -0.154684 0.177615 0.448604 -0.875904
-0.128148 0.394400 -0.154684 0.177615 0.448604 -0.875904
-0.133962 0.412292 -0.144341 0.177615 0.448604 -0.875904
-0.184580 0.392251 -0.144341 0.177615 0.448604 -0.875904
-0.184580 0.392251 -0.144341 0.216658 0.547214 -0.808466
-0.133962 0.412292 -0.144341 0.216658 0.547214 -0.808466
-0.139329 0.428811 -0.131722 0.216658 0.547214 -0.808466
-0.191975 0.407967 -0.131722 0.216658 0.547214 -0.808466
-0.191975 0.407967 -0.131722 0.252264 0.637144 -0.728292
-0.139329 0.428811 -0.131722 0.252264 0.637144 -0.728292
-0.144165 0.443695 -0.117026 0.252264 0.637144 -0.728292
-0.198638 0.422127 -0.117026 0.252264 0.637144 -0.728292
-0.198638 0.422127 -0.117026 0.283873 0.716980 -0.636676
-0.144165 0.443695 -0.117026 0.283873 0.716980 -0.636676
-0.148394 0.456710 -0.100484 0.283873 0.716980 -0.636676
-0.204465 0.434510 -0.100484 0.283873 0.716980 -0.636676
-0.204465 0.434510 -0.100484 0.310994 0.785480 -0.535074
-0.148394 0.456710 -0.100484 0.310994 0.785480 -0.535074
-0.151949 0.467650 -0.082358 0.310994 0.785480 -0.535074
-0.209363 0.444918 -0.082358 0.310994 0.785480 -0.535074
-0.209363 0.444918 -0.082358 0.333209 0.841588 -0.425089
-0.151949 0.467650 -0.082358 0.333209 0.841588 -0.425089
-0.154774 0.476344 -0.062932 0.333209 0.841588 -0.425089
-0.213255 0.453189 -0.062932 0.333209 0.841588 -0.425089
-0.213255 0.453189 -0.062932 0.350173 0.884436 -0.308467
-0.154774 0.476344 -0.062932 0.350173 0.884436 -0.308467
-0.156824 0.482653 -0.042515 0.350173 0.884436 -0.308467
-0.216079 0.459192 -0.042515 0.350173 0.884436 -0.308467
-0.216079 0.459192 -0.042515 0.361630 0.913371 -0.187024
-0.156824 0.482653 -0.042515 0.361630 0.913371 -0.187024
-0.158067 0.486479 -0.021426 0.361630 0.913371 -0.187024
-0.217792 0.462832 -0.021426 0.361630 0.913371 -0.187024
-0.217792 0.462832 -0.021426 0.367402 0.927949 -0.062667
-0.158067 0.486479 -0.021426 0.367402 0.927949 -0.062667
-0.158483 0.487761 0.000000 0.367402 0.927949 -0.062667
-0.218366 0.464052 0.000000 0.367402 0.927949 -0.062667
-0.158483 0.487761 0.000000 0.248201 0.966680 0.062666
-0.096101 0.503778 0.000000 0.248201 0.966680 0.062666
-0.095848 0.502454 0.021426 0.248201 0.966680 0.062666
-0.158067 0.486479 0.021426 0.248201 0.966680 0.062666
-0.158067 0.486479 0.021426 0.244302 0.951493 0.187025
-0.095848 0.502454 0.021426 0.244302 0.951493 0.187025
-0.095095 0.498502 0.042515 0.244302 0.951493 0.187025
-0.156824 0.482653 0.042515 0.244302 0.951493 0.187025
-0.156824 0.482653 0.042515 0.236563 0.921350 0.308467
-0.095095 0.498502 0.042515 0.236563 0.921350 0.308467
-0.093851 0.491986 0.062932 0.236563 0.921350 0.308467
-0.154774 0.476344 0.062932 0.236563 0.921350 0.308467
-0.154774 0.476344 0.062932 0.225102 0.876714 0.425090
-0.093851 0.491986 0.062932 0.225102 0.876714 0.425090
-0.092139 0.483007 0.082358 0.225102 0.876714 0.425090
-0.151949 0.467650 0.082358 0.225102 0.876714 0.425090
-0.151949 0.467650 0.082358 0.210094 0.818265 0.535073
-0.092139 0.483007 0.082358 0.210094 0.818265 0.535073
-0.089983 0.471707 0.100484 0.210094 0.818265 0.535073
-0.148394 0.456710 0.100484 0.210094 0.818265 0.535073
-0.148394 0.456710 0.100484 0.191773 0.746905 0.636676
-0.089983 0.471707 0.100484 0.191773 0.746905 0.636676
-0.087419 0.458265 0.117026 0.191773 0.746905 0.636676
-0.144165 0.443695 0.117026 0.191773 0.746905 0.636676
-0.144165 0.443695 0.117026 0.170419 0.663737 0.728293
-0.087419 0.458265 0.117026 0.170419 0.663737 0.728293
-0.084486 0.442892 0.131722 0.170419 0.663737 0.728293
-0.139329 0.428811 0.131722 0.170419 0.663737 0.728293
-0.139329 0.428811 0.131722 0.146365 0.570054 0.808465
-0.084486 0.442892 0.131722 0.146365 0.570054 0.808465
-0.081232 0.425831 0.144341 0.146365 0.570054 0.808465
-0.133962 0.412292 0.144341 0.146365 0.570054 0.808465
-0.133962 0.412292 0.144341 0.119989 0.467327 0.875904
-0.081232 0.425831 0.144341 0.119989 0.467327 0.875904
-0.077707 0.407351 0.154684 0.119989 0.467327 0.875904
-0.128148 0.394400 0.154684 0.119989 0.467327 0.875904
-0.128148 0.394400 0.154684 0.091705 0.357169 0.929527
-0.077707 0.407351 0.154684 0.091705 0.357169 0.929527
-0.073966 0.387744 0.162587 0.091705 0.357169 0.929527
-0.121980 0.375416 0.162587 0.091705 0.357169 0.929527
-0.121980 0.375416 0.162587 0.061961 0.241323 0.968465
-0.073966 0.387744 0.162587 0.061961 0.241323 0.968465
-0.070070 0.367318 0.167926 0.061961 0.241323 0.968465
-0.115554 0.355640 0.167926 0.061961 0.241323 0.968465
-0.115554 0.355640 0.167926 0.031230 0.121632 0.992084
-0.070070 0.367318 0.167926 0.031230 0.121632 0.992084
-0.066079 0.346396 0.170617 0.031230 0.121632 0.992084
-0.108973 0.335383 0.170617 0.031230 0.121632 0.992084
-0.066079 0.346396 0.170617 0.000000 -0.000000 1.000000
-0.062056 0.325308 0.170617 0.000000 -0.000000 1.000000
-0.102338 0.314965 0.170617 -0.031230 -0.121632 0.992084
-0.062056 0.325308 0.170617 -0.031230 -0.121632 0.992084
-0.058065 0.304386 0.167926 -0.031230 -0.121632 0.992084
-0.095757 0.294708 0.167926 -0.031230 -0.121632 0.992084
-0.095757 0.294708 0.167926 -0.061961 -0.241323 0.968465
-0.058065 0.304386 0.167926 -0.061961 -0.241323 0.968465
-0.054168 0.283960 0.162587 -0.061961 -0.241323 0.968465
-0.089331 0.274932 0.162587 -0.061961 -0.241323 0.968465
-0.089331 0.274932 0.162587 -0.091705 -0.357168 0.929527
-0.054168 0.283960 0.162587 -0.091705 -0.357168 0.929527
-0.050428 0.264353 0.154684 -0.091705 -0.357168 0.929527
-0.083163 0.255948 0.154684 -0.091705 -0.357168 0.929527
-0.083163 0.255948 0.154684 -0.119989 -0.467327 0.875904
-0.050428 0.264353 0.154684 -0.119989 -0.467327 0.875904
-0.046903 0.245873 0.144341 -0.119989 -0.467327 0.875904
-0.077349 0.238056 0.144341 -0.119989 -0.467327 0.875904
-0.077349 0.238056 0.144341 -0.146365 -0.570055 0.808464
-0.046903 0.245873 0.144341 -0.146365 -0.570055 0.808464
-0.043648 0.228812 0.131722 -0.146365 -0.570055 0.808464
-0.071982 0.221537 0.131722 -0.146365 -0.570055 0.808464
-0.071982 0.221537 0.131722 -0.170419 -0.663737 0.728293
-0.043648 0.228812 0.131722 -0.170419 -0.663737 0.728293
-0.040716 0.213439 0.117026 -0.170419 -0.663737 0.728293
-0.067146 0.206653 0.117026 -0.170419 -0.663737 0.728293
-0.067146 0.206653 0.117026 -0.191773 -0.746904 0.636677
-0.040716 0.213439 0.117026 -0.191773 -0.746904 0.636677
-0.038152 0.199997 0.100484 -0.191773 -0.746904 0.636677
-0.062917 0.193638 0.100484 -0.191773 -0.746904 0.636677
-0.062917 0.193638 0.100484 -0.210095 -0.818265 0.535073
-0.038152 0.199997 0.100484 -0.210095 -0.818265 0.535073
-0.035996 0.188697 0.082358 -0.210095 -0.818265 0.535073
-0.059362 0.182698 0.082358 -0.210095 -0.818265 0.535073
-0.059362 0.182698 0.082358 -0.225102 -0.876714 0.425091
-0.035996 0.188697 0.082358 -0.225102 -0.876714 0.425091
-0.034283 0.179718 0.062932 -0.225102 -0.876714 0.425091
-0.056538 0.174004 0.062932 -0.225102 -0.876714 0.425091
-0.056538 0.174004 0.062932 -0.236562 -0.921351 0.308465
-0.034283 0.179718 0.062932 -0.236562 -0.921351 0.308465
-0.033040 0.173202 0.042515 -0.236562 -0.921351 0.308465
-0.054487 0.167695 0.042515 -0.236562 -0.921351 0.308465
-0.054487 0.167695 0.042515 -0.244302 -0.951493 0.187024
-0.033040 0.173202 0.042515 -0.244302 -0.951493 0.187024
-0.032286 0.169250 0.021426 -0.244302 -0.951493 0.187024
-0.053244 0.163869 0.021426 -0.244302 -0.951493 0.187024
-0.053244 0.163869 0.021426 -0.248201 -0.966679 0.062667
-0.032286 0.169250 0.021426 -0.248201 -0.966679 0.062667
-0.032034 0.167926 0.000000 -0.248201 -0.966679 0.062667
-0.052828 0.162587 0.000000 -0.248201 -0.966679 0.062667
-0.052828 0.162587 0.000000 -0.248201 -0.966679 -0.062667
-0.032034 0.167926 0.000000 -0.248201 -0.966679 -0.062667
-0.032286 0.169250 -0.021426 -0.248201 -0.966679 -0.062667
-0.053244 0.163869 -0.021426 -0.248201 -0.966679 -0.062667
-0.053244 0.163869 -0.021426 -0.244302 -0.951493 -0.187024
-0.032286 0.169250 -0.021426 -0.244302 -0.951493 -0.187024
-0.033040 0.173202 -0.042515 -0.244302 -0.951493 -0.187024
-0.054487 0.167695 -0.042515 -0.244302 -0.951493 -0.187024
-0.054487 0.167695 -0.042515 -0.236562 -0.921351 -0.308465
-0.033040 0.173202 -0.042515 -0.236562 -0.921351 -0.308465
-0.034283 0.179718 -0.062932 -0.236562 -0.921351 -0.308465
-0.056538 0.174004 -0.062932 -0.236562 -0.921351 -0.308465
-0.056538 0.174004 -0.062932 -0.225102 -0.876714 -0.425091
-0.034283 0.179718 -0.062932 -0.225102 -0.876714 -0.425091
-0.035996 0.188697 -0.082358 -0.225102 -0.876714 -0.425091
-0.059362 0.182698 -0.082358 -0.225102 -0.876714 -0.425091
-0.059362 0.182698 -0.082358 -0.210095 -0.818265 -0.535073
-0.035996 0.188697 -0.082358 -0.210095 -0.818265 -0.535073
-0.038152 0.199997 -0.100484 -0.210095 -0.818265 -0.535073
-0.062917 0.193638 -0.100484 -0.210095 -0.818265 -0.535073
-0.062917 0.193638 -0.100484 -0.191773 -0.746904 -0.636677
-0.038152 0.199997 -0.100484 -0.191773 -0.746904 -0.636677
-0.040716 0.213439 -0.117026 -0.191773 -0.746904 -0.636677
-0.067146 0.206653 -0.117026 -0.191773 -0.746904 -0.636677
-0.067146 0.206653 -0.117026 -0.170419 -0.663737 -0.728293
-0.040716 0.213439 -0.117026 -0.170419 -0.663737 -0.728293
-0.043648 0.228812 -0.131722 -0.170419 -0.663737 -0.728293
-0.071982 0.221537 -0.131722 -0.170419 -0.663737 -0.728293
-0.071982 0.221537 -0.131722 -0.146365 -0.570055 -0.808464
-0.043648 0.228812 -0.131722 -0.146365 -0.570055 -0.808464
-0.046903 0.245873 -0.144341 -0.146365 -0.570055 -0.808464
-0.077349 0.238056 -0.144341 -0.146365 -0.570055 -0.808464
-0.077349 0.238056 -0.144341 -0.119989 -0.467327 -0.875904
-0.046903 0.245873 -0.144341 -0.119989 -0.467327 -0.875904
-0.050428 0.264353 -0.154684 -0.119989 -0.467327 -0.875904
-0.083163 0.255948 -0.154684 -0.119989 -0.467327 -0.875904
-0.083163 0.255948 -0.154684 -0.091705 -0.357168 -0.929527
-0.050428 0.264353 -0.154684 -0.091705 -0.357168 -0.929527
-0.054168 0.283960 -0.162587 -0.091705 -0.357168 -0.929527
-0.089331 0.274932 -0.162587 -0.091705 -0.357168 -0.929527
-0.089331 0.274932 -0.162587 -0.061961 -0.241323 -0.968465
-0.054168 0.283960 -0.162587 -0.061961 -0.241323 -0.968465
-0.058065 0.304386 -0.167926 -0.061961 -0.241323 -0.968465
-0.095757 0.294708 -0.167926 -0.061961 -0.241323 -0.968465
-0.095757 0.294708 -0.167926 -0.031230 -0.121632 -0.992084
-0.058065 0.304386 -0.167926 -0.031230 -0.121632 -0.992084
-0.062056 0.325308 -0.170617 -0.031230 -0.121632 -0.992084
-0.102338 0.314965 -0.170617 -0.031230 -0.121632 -0.992084
-0.062056 0.325308 -0.170617 0.000000 -0.000000 -1.000000
-0.066079 0.346396 -0.170617 0.000000 -0.000000 -1.000000
-0.108973 0.335383 -0.170617 0.031230 0.121632 -0.992084
-0.066079 0.346396 -0.170617 0.031230 0.121632 -0.992084
-0.070070 0.367318 -0.167926 0.031230 0.121632 -0.992084
-0.115554 0.355640 -0.167926 0.031230 0.121632 -0.992084
-0.115554 0.355640 -0.167926 0.061961 0.241323 -0.968465
-0.070070 0.367318 -0.167926 0.061961 0.241323 -0.968465
-0.073966 0.387744 -0.162587 0.061961 0.241323 -0.968465
-0.121980 0.375416 -0.162587 0.061961 0.241323 -0.968465
-0.121980 0.375416 -0.162587 0.091705 0.357169 -0.929527
-0.073966 0.387744 -0.162587 0.091705 0.357169 -0.929527
-0.077707 0.407351 -0.154684 0.091705 0.357169 -0.929527
-0.128148 0.394400 -0.154684 0.091705 0.357169 -0.929527
-0.128148 0.394400 -0.154684 0.119989 0.467327 -0.875904
-0.077707 0.407351 -0.154684 0.119989 0.467327 -0.875904
-0.081232 0.425831 -0.144341 0.119989 0.467327 -0.875904
-0.133962 0.412292 -0.144341 0.119989 0.467327 -0.875904
-0.133962 0.412292 -0.144341 0.146365 0.570054 -0.808465
-0.081232 0.425831 -0.144341 0.146365 0.570054 -0.808465
-0.084486 0.442892 -0.131722 0.146365 0.570054 -0.808465
-0.139329 0.428811 -0.131722 0.146365 0.570054 -0.808465
-0.139329 0.428811 -0.131722 0.170419 0.663737 -0.728293
-0.084486 0.442892 -0.131722 0.170419 0.663737 -0.728293
-0.087419 0.458265 -0.117026 0.170419 0.663737 -0.728293
-0.144165 0.443695 -0.117026 0.170419 0.663737 -0.728293
-0.144165 0.443695 -0.117026 0.191773 0.746905 -0.636676
-0.087419 0.458265 -0.117026 0.191773 0.746905 -0.636676
-0.089983 0.471707 -0.100484 0.191773 0.746905 -0.636676
-0.148394 0.456710 -0.100484 0.191773 0.746905 -0.636676
-0.148394 0.456710 -0.100484 0.210094 0.818265 -0.535073
-0.089983 0.471707 -0.100484 0.210094 0.818265 -0.535073
-0.092139 0.483007 -0.082358 0.210094 0.818265 -0.535073
-0.151949 0.467650 -0.082358 0.210094 0.818265 -0.535073
-0.151949 0.467650 -0.082358 0.225102 0.876714 -0.425090
-0.092139 0.483007 -0.082358 0.225102 0.876714 -0.425090
-0.093851 0.491986 -0.062932 0.225102 0.876714 -0.425090
-0.154774 0.476344 -0.062932 0.225102 0.876714 -0.425090
-0.154774 0.476344 -0.062932 0.236563 0.921350 -0.308467
-0.093851 0.491986 -0.062932 0.236563 0.921350 -0.308467
-0.095095 0.498502 -0.042515 0.236563 0.921350 -0.308467
-0.156824 0.482653 -0.042515 0.236563 0.921350 -0.308467
-0.156824 0.482653 -0.042515 0.244302 0.951493 -0.187025
-0.095095 0.498502 -0.042515 0.244302 0.951493 -0.187025
-0.095848 0.502454 -0.021426 0.244302 0.951493 -0.187025
-0.158067 0.486479 -0.021426 0.244302 0.951493 -0.187025
-0.158067 0.486479 -0.021426 0.248201 0.966680 -0.062666
-0.095848 0.502454 -0.021426 0.248201 0.966680 -0.062666
-0.096101 0.503778 0.000000 0.248201 0.966680 -0.062666
-0.158483 0.487761 0.000000 0.248201 0.966680 -0.062666
-0.096101 0.503778 0.000000 0.125087 0.990165 0.062667
-0.032203 0.511850 0.000000 0.125087 0.990165 0.062667
-0.032118 0.510505 0.021426 0.125087 0.990165 0.062667
-0.095848 0.502454 0.021426 0.125087 0.990165 0.062667
-0.095848 0.502454 0.021426 0.123122 0.974609 0.187026
-0.032118 0.510505 0.021426 0.123122 0.974609 0.187026
-0.031866 0.506490 0.042515 0.123122 0.974609 0.187026
-0.095095 0.498502 0.042515 0.123122 0.974609 0.187026
-0.095095 0.498502 0.042515 0.119221 0.943735 0.308466
-0.031866 0.506490 0.042515 0.119221 0.943735 0.308466
-0.031449 0.499869 0.062932 0.119221 0.943735 0.308466
-0.093851 0.491986 0.062932 0.119221 0.943735 0.308466
-0.093851 0.491986 0.062932 0.113446 0.898014 0.425090
-0.031449 0.499869 0.062932 0.113446 0.898014 0.425090
-0.030875 0.490746 0.082358 0.113446 0.898014 0.425090
-0.092139 0.483007 0.082358 0.113446 0.898014 0.425090
-0.092139 0.483007 0.082358 0.105883 0.838144 0.535074
-0.030875 0.490746 0.082358 0.105883 0.838144 0.535074
-0.030153 0.479265 0.100484 0.105883 0.838144 0.535074
-0.089983 0.471707 0.100484 0.105883 0.838144 0.535074
-0.089983 0.471707 0.100484 0.096649 0.765051 0.636675
-0.030153 0.479265 0.100484 0.096649 0.765051 0.636675
-0.029294 0.465608 0.117026 0.096649 0.765051 0.636675
-0.087419 0.458265 0.117026 0.096649 0.765051 0.636675
-0.087419 0.458265 0.117026 0.085887 0.679862 0.728293
-0.029294 0.465608 0.117026 0.085887 0.679862 0.728293
-0.028311 0.449989 0.131722 0.085887 0.679862 0.728293
-0.084486 0.442892 0.131722 0.085887 0.679862 0.728293
-0.084486 0.442892 0.131722 0.073765 0.583904 0.808465
-0.028311 0.449989 0.131722 0.073765 0.583904 0.808465
-0.027220 0.432655 0.144341 0.073765 0.583904 0.808465
-0.081232 0.425831 0.144341 0.073765 0.583904 0.808465
-0.081232 0.425831 0.144341 0.060472 0.478681 0.875904
-0.027220 0.432655 0.144341 0.060472 0.478681 0.875904
-0.026039 0.413879 0.154684 0.060472 0.478681 0.875904
-0.077707 0.407351 0.154684 0.060472 0.478681 0.875904
-0.077707 0.407351 0.154684 0.046217 0.365845 0.929527
-0.026039 0.413879 0.154684 0.046217 0.365845 0.929527
-0.024786 0.393957 0.162587 0.046217 0.365845 0.929527
-0.073966 0.387744 0.162587 0.046217 0.365845 0.929527
-0.073966 0.387744 0.162587 0.031227 0.247186 0.968465
-0.024786 0.393957 0.162587 0.031227 0.247186 0.968465
-0.023480 0.373204 0.167926 0.031227 0.247186 0.968465
-0.070070 0.367318 0.167926 0.031227 0.247186 0.968465
-0.070070 0.367318 0.167926 0.015739 0.124587 0.992084
-0.023480 0.373204 0.167926 0.015739 0.124587 0.992084
-0.022143 0.351947 0.170617 0.015739 0.124587 0.992084
-0.066079 0.346396 0.170617 0.015739 0.124587 0.992084
-0.022143 0.351947 0.170617 0.000000 -0.000000 1.000000
-0.020795 0.330520 0.170617 0.000000 -0.000000 1.000000
-0.062056 0.325308 0.170617 -0.015739 -0.124587 0.992084
-0.020795 0.330520 0.170617 -0.015739 -0.124587 0.992084
-0.019457 0.309263 0.167926 -0.015739 -0.124587 0.992084
-0.058065 0.304386 0.167926 -0.015739 -0.124587 0.992084
-0.058065 0.304386 0.167926 -0.031227 -0.247186 0.968465
-0.019457 0.309263 0.167926 -0.031227 -0.247186 0.968465
-0.018152 0.288510 0.162587 -0.031227 -0.247186 0.968465
-0.054168 0.283960 0.162587 -0.031227 -0.247186 0.968465
-0.054168 0.283960 0.162587 -0.046217 -0.365845 0.929527
-0.018152 0.288510 0.162587 -0.046217 -0.365845 0.929527
-0.016898 0.268588 0.154684 -0.046217 -0.365845 0.929527
-0.050428 0.264353 0.154684 -0.046217 -0.365845 0.929527
-0.050428 0.264353 0.154684 -0.060472 -0.478680 0.875904
-0.016898 0.268588 0.154684 -0.060472 -0.478680 0.875904
-0.015717 0.249813 0.144341 -0.060472 -0.478680 0.875904
-0.046903 0.245873 0.144341 -0.060472 -0.478680 0.875904
-0.046903 0.245873 0.144341 -0.073765 -0.583904 0.808464
-0.015717 0.249813 0.144341 -0.073765 -0.583904 0.808464
-0.014626 0.232478 0.131722 -0.073765 -0.583904 0.808464
-0.043648 0.228812 0.131722 -0.073765 -0.583904 0.808464
-0.043648 0.228812 0.131722 -0.085886 -0.679862 0.728293
-0.014626 0.232478 0.131722 -0.085886 -0.679862 0.728293
-0.013644 0.216859 0.117026 -0.085886 -0.679862 0.728293
-0.040716 0.213439 0.117026 -0.085886 -0.679862 0.728293
-0.040716 0.213439 0.117026 -0.096648 -0.765050 0.636677
-0.013644 0.216859 0.117026 -0.096648 -0.765050 0.636677
-0.012784 0.203202 0.100484 -0.096648 -0.765050 0.636677
-0.038152 0.199997 0.100484 -0.096648 -0.765050 0.636677
-0.038152 0.199997 0.100484 -0.105882 -0.838145 0.535073
-0.012784 0.203202 0.100484 -0.105882 -0.838145 0.535073
-0.012062 0.191721 0.082358 -0.105882 -0.838145 0.535073
-0.035996 0.188697 0.082358 -0.105882 -0.838145 0.535073
-0.035996 0.188697 0.082358 -0.113446 -0.898013 0.425091
-0.012062 0.191721 0.082358 -0.113446 -0.898013 0.425091
-0.011488 0.182598 0.062932 -0.113446 -0.898013 0.425091
-0.034283 0.179718 0.062932 -0.113446 -0.898013 0.425091
-0.034283 0.179718 0.062932 -0.119222 -0.943735 0.308466
-0.011488 0.182598 0.062932 -0.119222 -0.943735 0.308466
-0.011072 0.175977 0.042515 -0.119222 -0.943735 0.308466
-0.033040 0.173202 0.042515 -0.119222 -0.943735 0.308466
-0.033040 0.173202 0.042515 -0.123122 -0.974609 0.187025
-0.011072 0.175977 0.042515 -0.123122 -0.974609 0.187025
-0.010819 0.171962 0.021426 -0.123122 -0.974609 0.187025
-0.032286 0.169250 0.021426 -0.123122 -0.974609 0.187025
-0.032286 0.169250 0.021426 -0.125087 -0.990165 0.062667
-0.010819 0.171962 0.021426 -0.125087 -0.990165 0.062667
-0.010734 0.170617 0.000000 -0.125087 -0.990165 0.062667
-0.032034 0.167926 0.000000 -0.125087 -0.990165 0.062667
-0.032034 0.167926 0.000000 -0.125087 -0.990165 -0.062667
-0.010734 0.170617 0.000000 -0.125087 -0.990165 -0.062667
-0.010819 0.171962 -0.021426 -0.125087 -0.990165 -0.062667
-0.032286 0.169250 -0.021426 -0.125087 -0.990165 -0.062667
-0.032286 0.169250 -0.021426 -0.123122 -0.974609 -0.187025
-0.010819 0.171962 -0.021426 -0.123122 -0.974609 -0.187025
-0.011072 0.175977 -0.042515 -0.123122 -0.974609 -0.187025
-0.033040 0.173202 -0.042515 -0.123122 -0.974609 -0.187025
-0.033040 0.173202 -0.042515 -0.119222 -0.943735 -0.308466
-0.011072 0.175977 -0.042515 -0.119222 -0.943735 -0.308466
-0.011488 0.182598 -0.062932 -0.119222 -0.943735 -0.308466
-0.034283 0.179718 -0.062932 -0.119222 -0.943735 -0.308466
-0.034283 0.179718 -0.062932 -0.113446 -0.898013 -0.425091
-0.011488 0.182598 -0.062932 -0.113446 -0.898013 -0.425091
-0.012062 0.191721 -0.082358 -0.113446 -0.898013 -0.425091
-0.035996 0.188697 -0.082358 -0.113446 -0.898013 -0.425091
-0.035996 0.188697 -0.082358 -0.105882 -0.838145 -0.535073
-0.012062 0.191721 -0.082358 -0.105882 -0.838145 -0.535073
-0.012784 0.203202 -0.100484 -0.105882 -0.838145 -0.535073
-0.038152 0.199997 -0.100484 -0.105882 -0.838145 -0.535073
-0.038152 0.199997 -0.100484 -0.096648 -0.765050 -0.636677
-0.012784 0.203202 -0.100484 -0.096648 -0.765050 -0.636677
-0.013644 0.216859 -0.117026 -0.096648 -0.765050 -0.636677
-0.040716 0.213439 -0.117026 -0.096648 -0.765050 -0.636677
-0.040716 0.213439 -0.117026 -0.085886 -0.679862 -0.728293
-0.013644 0.216859 -0.117026 -0.085886 -0.679862 -0.728293
-0.014626 0.232478 -0.131722 -0.085886 -0.679862 -0.728293
-0.043648 0.228812 -0.131722 -0.085886 -0.679862 -0.728293
-0.043648 0.228812 -0.131722 -0.073765 -0.583904 -0.808464
-0.014626 0.232478 -0.131722 -0.073765 -0.583904 -0.808464
-0.015717 0.249813 -0.144341 -0.073765 -0.583904 -0.808464
-0.046903 0.245873 -0.144341 -0.073765 -0.583904 -0.808464
-0.046903 0.245873 -0.144341 -0.060472 -0.478680 -0.875904
-0.015717 0.249813 -0.144341 -0.060472 -0.478680 -0.875904
-0.016898 0.268588 -0.154684 -0.060472 -0.478680 -0.875904
-0.050428 0.264353 -0.154684 -0.060472 -0.478680 -0.875904
-0.050428 0.264353 -0.154684 -0.046217 -0.365845 -0.929527
-0.016898 0.268588 -0.154684 -0.046217 -0.365845 -0.929527
-0.018152 0.288510 -0.162587 -0.046217 -0.365845 -0.929527
-0.054168 0.283960 -0.162587 -0.046217 -0.365845 -0.929527
-0.054168 0.283960 -0.162587 -0.031227 -0.247186 -0.968465
-0.018152 0.288510 -0.162587 -0.031227 -0.247186 -0.968465
-0.019457 0.309263 -0.167926 -0.031227 -0.247186 -0.968465
-0.058065 0.304386 -0.167926 -0.031227 -0.247186 -0.968465
-0.058065 0.304386 -0.167926 -0.015739 -0.124587 -0.992084
-0.019457 0.309263 -0.167926 -0.015739 -0.124587 -0.992084
-0.020795 0.330520 -0.170617 -0.015739 -0.124587 -0.992084
-0.062056 0.325308 -0.170617 -0.015739 -0.124587 -0.992084
-0.020795 0.330520 -0.170617 0.000000 -0.000000 -1.000000
-0.022143 0.351947 -0.170617 0.000000 -0.000000 -1.000000
-0.066079 0.346396 -0.170617 0.015739 0.124587 -0.992084
-0.022143 0.351947 -0.170617 0.015739 0.124587 -0.992084
-0.023480 0.373204 -0.167926 0.015739 0.124587 -0.992084
-0.070070 0.367318 -0.167926 0.015739 0.124587 -0.992084
-0.070070 0.367318 -0.167926 0.031227 0.247186 -0.968465
-0.023480 0.373204 -0.167926 0.031227 0.247186 -0.968465
-0.024786 0.393957 -0.162587 0.031227 0.247186 -0.968465
-0.073966 0.387744 -0.162587 0.031227 0.247186 -0.968465
-0.073966 0.387744 -0.162587 0.046217 0.365845 -0.929527
-0.024786 0.393957 -0.162587 0.046217 0.365845 -0.929527
-0.026039 0.413879 -0.154684 0.046217 0.365845 -0.929527
-0.077707 0.407351 -0.154684 0.046217 0.365845 -0.929527
-0.077707 0.407351 -0.154684 0.060472 0.478681 -0.875904
-0.026039 0.413879 -0.154684 0.060472 0.478681 -0.875904
-0.027220 0.432655 -0.144341 0.060472 0.478681 -0.875904
-0.081232 0.425831 -0.144341 0.060472 0.478681 -0.875904
-0.081232 0.425831 -0.144341 0.073765 0.583904 -0.808465
-0.027220 0.432655 -0.144341 0.073765 0.583904 -0.808465
-0.028311 0.449989 -0.131722 0.073765 0.583904 -0.808465
-0.084486 0.442892 -0.131722 0.073765 0.583904 -0.808465
-0.084486 0.442892 -0.131722 0.085887 0.679862 -0.728293
-0.028311 0.449989 -0.131722 0.085887 0.679862 -0.728293
-0.029294 0.465608 -0.117026 0.085887 0.679862 -0.728293
-0.087419 0.458265 -0.117026 0.085887 0.679862 -0.728293
-0.087419 0.458265 -0.117026 0.096649 0.765051 -0.636675
-0.029294 0.465608 -0.117026 0.096649 0.765051 -0.636675
-0.030153 0.479265 -0.100484 0.096649 0.765051 -0.636675
-0.089983 0.471707 -0.100484 0.096649 0.765051 -0.636675
-0.089983 0.471707 -0.100484 0.105883 0.838144 -0.535074
-0.030153 0.479265 -0.100484 0.105883 0.838144 -0.535074
-0.030875 0.490746 -0.082358 0.105883 0.838144 -0.535074
-0.092139 0.483007 -0.082358 0.105883 0.838144 -0.535074
-0.092139 0.483007 -0.082358 0.113446 0.898014 -0.425090
-0.030875 0.490746 -0.082358 0.113446 0.898014 -0.425090
-0.031449 0.499869 -0.062932 0.113446 0.898014 -0.425090
-0.093851 0.491986 -0.062932 0.113446 0.898014 -0.425090
-0.093851 0.491986 -0.062932 0.119221 0.943735 -0.308466
-0.031449 0.499869 -0.062932 0.119221 0.943735 -0.308466
-0.031866 0.506490 -0.042515 0.119221 0.943735 -0.308466
-0.095095 0.498502 -0.042515 0.119221 0.943735 -0.308466
-0.095095 0.498502 -0.042515 0.123122 0.974609 -0.187026
-0.031866 0.506490 -0.042515 0.123122 0.974609 -0.187026
-0.032118 0.510505 -0.021426 0.123122 0.974609 -0.187026
-0.095848 0.502454 -0.021426 0.123122 0.974609 -0.187026
-0.095848 0.502454 -0.021426 0.125087 0.990165 -0.062667
-0.032118 0.510505 -0.021426 0.125087 0.990165 -0.062667
-0.032203 0.511850 0.000000 0.125087 0.990165 -0.062667
-0.096101 0.503778 0.000000 0.125087 0.990165 -0.062667
-0.032203 0.511850 0.000000 -0.000000 0.998035 0.062667
--0.032203 0.511850 0.000000 -0.000000 0.998035 0.062667
--0.032118 0.510505 0.021426 -0.000000 0.998035 0.062667
-0.032118 0.510505 0.021426 -0.000000 0.998035 0.062667
-0.032118 0.510505 0.021426 0.000000 0.982355 0.187026
--0.032118 0.510505 0.021426 0.000000 0.982355 0.187026
--0.031866 0.506490 0.042515 0.000000 0.982355 0.187026
-0.031866 0.506490 0.042515 0.000000 0.982355 0.187026
-0.031866 0.506490 0.042515 -0.000000 0.951235 0.308466
--0.031866 0.506490 0.042515 -0.000000 0.951235 0.308466
--0.031449 0.499869 0.062932 -0.000000 0.951235 0.308466
-0.031449 0.499869 0.062932 -0.000000 0.951235 0.308466
-0.031449 0.499869 0.062932 -0.000000 0.905152 0.425088
--0.031449 0.499869 0.062932 -0.000000 0.905152 0.425088
--0.030875 0.490746 0.082358 -0.000000 0.905152 0.425088
-0.030875 0.490746 0.082358 -0.000000 0.905152 0.425088
-0.030875 0.490746 0.082358 0.000000 0.844805 0.535074
--0.030875 0.490746 0.082358 0.000000 0.844805 0.535074
--0.030153 0.479265 0.100484 0.000000 0.844805 0.535074
-0.030153 0.479265 0.100484 0.000000 0.844805 0.535074
-0.030153 0.479265 0.100484 0.000000 0.771132 0.636676
--0.030153 0.479265 0.100484 0.000000 0.771132 0.636676
--0.029294 0.465608 0.117026 0.000000 0.771132 0.636676
-0.029294 0.465608 0.117026 0.000000 0.771132 0.636676
-0.029294 0.465608 0.117026 0.000000 0.685266 0.728293
--0.029294 0.465608 0.117026 0.000000 0.685266 0.728293
--0.028311 0.449989 0.131722 0.000000 0.685266 0.728293
-0.028311 0.449989 0.131722 0.000000 0.685266 0.728293
-0.028311 0.449989 0.131722 -0.000000 0.588544 0.808465
--0.028311 0.449989 0.131722 -0.000000 0.588544 0.808465
--0.027220 0.432655 0.144341 -0.000000 0.588544 0.808465
-0.027220 0.432655 0.144341 -0.000000 0.588544 0.808465
-0.027220 0.432655 0.144341 -0.000001 0.482485 0.875904
--0.027220 0.432655 0.144341 -0.000001 0.482485 0.875904
--0.026039 0.413879 0.154684 -0.000001 0.482485 0.875904
-0.026039 0.413879 0.154684 -0.000001 0.482485 0.875904
-0.026039 0.413879 0.154684 -0.000001 0.368753 0.929528
--0.026039 0.413879 0.154684 -0.000001 0.368753 0.929528
--0.024786 0.393957 0.162587 -0.000001 0.368753 0.929528
-0.024786 0.393957 0.162587 -0.000001 0.368753 0.929528
-0.024786 0.393957 0.162587 -0.000000 0.249151 0.968465
--0.024786 0.393957 0.162587 -0.000000 0.249151 0.968465
--0.023480 0.373204 0.167926 -0.000000 0.249151 0.968465
-0.023480 0.373204 0.167926 -0.000000 0.249151 0.968465
-0.023480 0.373204 0.167926 -0.000000 0.125578 0.992084
--0.023480 0.373204 0.167926 -0.000000 0.125578 0.992084
--0.022143 0.351947 0.170617 -0.000000 0.125578 0.992084
-0.022143 0.351947 0.170617 -0.000000 0.125578 0.992084
--0.022143 0.351947 0.170617 0.000000 -0.000000 1.000000
--0.020795 0.330520 0.170617 0.000000 -0.000000 1.000000
-0.020795 0.330520 0.170617 -0.000000 -0.125577 0.992084
--0.020795 0.330520 0.170617 -0.000000 -0.125577 0.992084
--0.019457 0.309263 0.167926 -0.000000 -0.125577 0.992084
-0.019457 0.309263 0.167926 -0.000000 -0.125577 0.992084
-0.019457 0.309263 0.167926 -0.000000 -0.249151 0.968465
--0.019457 0.309263 0.167926 -0.000000 -0.249151 0.968465
--0.018152 0.288510 0.162587 -0.000000 -0.249151 0.968465
-0.018152 0.288510 0.162587 -0.000000 -0.249151 0.968465
-0.018152 0.288510 0.162587 -0.000000 -0.368753 0.929527
--0.018152 0.288510 0.162587 -0.000000 -0.368753 0.929527
--0.016898 0.268588 0.154684 -0.000000 -0.368753 0.929527
-0.016898 0.268588 0.154684 -0.000000 -0.368753 0.929527
-0.016898 0.268588 0.154684 -0.000000 -0.482485 0.875904
--0.016898 0.268588 0.154684 -0.000000 -0.482485 0.875904
--0.015717 0.249813 0.144341 -0.000000 -0.482485 0.875904
-0.015717 0.249813 0.144341 -0.000000 -0.482485 0.875904
-0.015717 0.249813 0.144341 0.000000 -0.588545 0.808464
--0.015717 0.249813 0.144341 0.000000 -0.588545 0.808464
--0.014626 0.232478 0.131722 0.000000 -0.588545 0.808464
-0.014626 0.232478 0.131722 0.000000 -0.588545 0.808464
-0.014626 0.232478 0.131722 0.000000 -0.685266 0.728293
--0.014626 0.232478 0.131722 0.000000 -0.685266 0.728293
--0.013644 0.216859 0.117026 0.000000 -0.685266 0.728293
-0.013644 0.216859 0.117026 0.000000 -0.685266 0.728293
-0.013644 0.216859 0.117026 0.000000 -0.771131 0.636676
--0.013644 0.216859 0.117026 0.000000 -0.771131 0.636676
--0.012784 0.203202 0.100484 0.000000 -0.771131 0.636676
-0.012784 0.203202 0.100484 0.000000 -0.771131 0.636676
-0.012784 0.203202 0.100484 0.000000 -0.844806 0.535072
--0.012784 0.203202 0.100484 0.000000 -0.844806 0.535072
--0.012062 0.191721 0.082358 0.000000 -0.844806 0.535072
-0.012062 0.191721 0.082358 0.000000 -0.844806 0.535072
-0.012062 0.191721 0.082358 0.000000 -0.905151 0.425091
--0.012062 0.191721 0.082358 0.000000 -0.905151 0.425091
--0.011488 0.182598 0.062932 0.000000 -0.905151 0.425091
-0.011488 0.182598 0.062932 0.000000 -0.905151 0.425091
-0.011488 0.182598 0.062932 0.000000 -0.951235 0.308466
--0.011488 0.182598 0.062932 0.000000 -0.951235 0.308466
--0.011072 0.175977 0.042515 0.000000 -0.951235 0.308466
-0.011072 0.175977 0.042515 0.000000 -0.951235 0.308466
-0.011072 0.175977 0.042515 -0.000001 -0.982355 0.187025
--0.011072 0.175977 0.042515 -0.000001 -0.982355 0.187025
--0.010819 0.171962 0.021426 -0.000001 -0.982355 0.187025
-0.010819 0.171962 0.021426 -0.000001 -0.982355 0.187025
-0.010819 0.171962 0.021426 -0.000001 -0.998034 0.062667
--0.010819 0.171962 0.021426 -0.000001 -0.998034 0.062667
--0.010734 0.170617 0.000000 -0.000001 -0.998034 0.062667
-0.010734 0.170617 0.000000 -0.000001 -0.998034 0.062667
-0.010734 0.170617 0.000000 -0.000001 -0.998034 -0.062667
--0.010734 0.170617 0.000000 -0.000001 -0.998034 -0.062667
--0.010819 0.171962 -0.021426 -0.000001 -0.998034 -0.062667
-0.010819 0.171962 -0.021426 -0.000001 -0.998034 -0.062667
-0.010819 0.171962 -0.021426 -0.000001 -0.982355 -0.187025
--0.010819 0.171962 -0.021426 -0.000001 -0.982355 -0.187025
--0.011072 0.175977 -0.042515 -0.000001 -0.982355 -0.187025
-0.011072 0.175977 -0.042515 -0.000001 -0.982355 -0.187025
-0.011072 0.175977 -0.042515 0.000000 -0.951235 -0.308466
--0.011072 0.175977 -0.042515 0.000000 -0.951235 -0.308466
--0.011488 0.182598 -0.062932 0.000000 -0.951235 -0.308466
-0.011488 0.182598 -0.062932 0.000000 -0.951235 -0.308466
-0.011488 0.182598 -0.062932 0.000000 -0.905151 -0.425091
--0.011488 0.182598 -0.062932 0.000000 -0.905151 -0.425091
--0.012062 0.191721 -0.082358 0.000000 -0.905151 -0.425091
-0.012062 0.191721 -0.082358 0.000000 -0.905151 -0.425091
-0.012062 0.191721 -0.082358 0.000000 -0.844806 -0.535072
--0.012062 0.191721 -0.082358 0.000000 -0.844806 -0.535072
--0.012784 0.203202 -0.100484 0.000000 -0.844806 -0.535072
-0.012784 0.203202 -0.100484 0.000000 -0.844806 -0.535072
-0.012784 0.203202 -0.100484 0.000000 -0.771131 -0.636676
--0.012784 0.203202 -0.100484 0.000000 -0.771131 -0.636676
--0.013644 0.216859 -0.117026 0.000000 -0.771131 -0.636676
-0.013644 0.216859 -0.117026 0.000000 -0.771131 -0.636676
-0.013644 0.216859 -0.117026 0.000000 -0.685266 -0.728293
--0.013644 0.216859 -0.117026 0.000000 -0.685266 -0.728293
--0.014626 0.232478 -0.131722 0.000000 -0.685266 -0.728293
-0.014626 0.232478 -0.131722 0.000000 -0.685266 -0.728293
-0.014626 0.232478 -0.131722 0.000000 -0.588545 -0.808464
--0.014626 0.232478 -0.131722 0.000000 -0.588545 -0.808464
--0.015717 0.249813 -0.144341 0.000000 -0.588545 -0.808464
-0.015717 0.249813 -0.144341 0.000000 -0.588545 -0.808464
-0.015717 0.249813 -0.144341 -0.000000 -0.482485 -0.875904
--0.015717 0.249813 -0.144341 -0.000000 -0.482485 -0.875904
--0.016898 0.268588 -0.154684 -0.000000 -0.482485 -0.875904
-0.016898 0.268588 -0.154684 -0.000000 -0.482485 -0.875904
-0.016898 0.268588 -0.154684 -0.000000 -0.368753 -0.929527
--0.016898 0.268588 -0.154684 -0.000000 -0.368753 -0.929527
--0.018152 0.288510 -0.162587 -0.000000 -0.368753 -0.929527
-0.018152 0.288510 -0.162587 -0.000000 -0.368753 -0.929527
-0.018152 0.288510 -0.162587 -0.000000 -0.249151 -0.968465
--0.018152 0.288510 -0.162587 -0.000000 -0.249151 -0.968465
--0.019457 0.309263 -0.167926 -0.000000 -0.249151 -0.968465
-0.019457 0.309263 -0.167926 -0.000000 -0.249151 -0.968465
-0.019457 0.309263 -0.167926 -0.000000 -0.125577 -0.992084
--0.019457 0.309263 -0.167926 -0.000000 -0.125577 -0.992084
--0.020795 0.330520 -0.170617 -0.000000 -0.125577 -0.992084
-0.020795 0.330520 -0.170617 -0.000000 -0.125577 -0.992084
--0.020795 0.330520 -0.170617 0.000000 -0.000000 -1.000000
--0.022143 0.351947 -0.170617 0.000000 -0.000000 -1.000000
-0.022143 0.351947 -0.170617 -0.000000 0.125578 -0.992084
--0.022143 0.351947 -0.170617 -0.000000 0.125578 -0.992084
--0.023480 0.373204 -0.167926 -0.000000 0.125578 -0.992084
-0.023480 0.373204 -0.167926 -0.000000 0.125578 -0.992084
-0.023480 0.373204 -0.167926 -0.000000 0.249151 -0.968465
--0.023480 0.373204 -0.167926 -0.000000 0.249151 -0.968465
--0.024786 0.393957 -0.162587 -0.000000 0.249151 -0.968465
-0.024786 0.393957 -0.162587 -0.000000 0.249151 -0.968465
-0.024786 0.393957 -0.162587 -0.000001 0.368753 -0.929528
--0.024786 0.393957 -0.162587 -0.000001 0.368753 -0.929528
--0.026039 0.413879 -0.154684 -0.000001 0.368753 -0.929528
-0.026039 0.413879 -0.154684 -0.000001 0.368753 -0.929528
-0.026039 0.413879 -0.154684 -0.000001 0.482485 -0.875904
--0.026039 0.413879 -0.154684 -0.000001 0.482485 -0.875904
--0.027220 0.432655 -0.144341 -0.000001 0.482485 -0.875904
-0.027220 0.432655 -0.144341 -0.000001 0.482485 -0.875904
-0.027220 0.432655 -0.144341 -0.000000 0.588544 -0.808465
--0.027220 0.432655 -0.144341 -0.000000 0.588544 -0.808465
--0.028311 0.449989 -0.131722 -0.000000 0.588544 -0.808465
-0.028311 0.449989 -0.131722 -0.000000 0.588544 -0.808465
-0.028311 0.449989 -0.131722 0.000000 0.685266 -0.728293
--0.028311 0.449989 -0.131722 0.000000 0.685266 -0.728293
--0.029294 0.465608 -0.117026 0.000000 0.685266 -0.728293
-0.029294 0.465608 -0.117026 0.000000 0.685266 -0.728293
-0.029294 0.465608 -0.117026 0.000000 0.771132 -0.636676
--0.029294 0.465608 -0.117026 0.000000 0.771132 -0.636676
--0.030153 0.479265 -0.100484 0.000000 0.771132 -0.636676
-0.030153 0.479265 -0.100484 0.000000 0.771132 -0.636676
-0.030153 0.479265 -0.100484 0.000000 0.844805 -0.535074
--0.030153 0.479265 -0.100484 0.000000 0.844805 -0.535074
--0.030875 0.490746 -0.082358 0.000000 0.844805 -0.535074
-0.030875 0.490746 -0.082358 0.000000 0.844805 -0.535074
-0.030875 0.490746 -0.082358 -0.000000 0.905152 -0.425088
--0.030875 0.490746 -0.082358 -0.000000 0.905152 -0.425088
--0.031449 0.499869 -0.062932 -0.000000 0.905152 -0.425088
-0.031449 0.499869 -0.062932 -0.000000 0.905152 -0.425088
-0.031449 0.499869 -0.062932 -0.000000 0.951235 -0.308466
--0.031449 0.499869 -0.062932 -0.000000 0.951235 -0.308466
--0.031866 0.506490 -0.042515 -0.000000 0.951235 -0.308466
-0.031866 0.506490 -0.042515 -0.000000 0.951235 -0.308466
-0.031866 0.506490 -0.042515 0.000000 0.982355 -0.187026
--0.031866 0.506490 -0.042515 0.000000 0.982355 -0.187026
--0.032118 0.510505 -0.021426 0.000000 0.982355 -0.187026
-0.032118 0.510505 -0.021426 0.000000 0.982355 -0.187026
-0.032118 0.510505 -0.021426 -0.000000 0.998035 -0.062667
--0.032118 0.510505 -0.021426 -0.000000 0.998035 -0.062667
--0.032203 0.511850 0.000000 -0.000000 0.998035 -0.062667
-0.032203 0.511850 0.000000 -0.000000 0.998035 -0.062667
--0.032203 0.511850 0.000000 -0.125087 0.990165 0.062666
--0.096101 0.503778 0.000000 -0.125087 0.990165 0.062666
--0.095848 0.502454 0.021426 -0.125087 0.990165 0.062666
--0.032118 0.510505 0.021426 -0.125087 0.990165 0.062666
--0.032118 0.510505 0.021426 -0.123122 0.974609 0.187026
--0.095848 0.502454 0.021426 -0.123122 0.974609 0.187026
--0.095094 0.498502 0.042515 -0.123122 0.974609 0.187026
--0.031866 0.506490 0.042515 -0.123122 0.974609 0.187026
--0.031866 0.506490 0.042515 -0.119221 0.943735 0.308466
--0.095094 0.498502 0.042515 -0.119221 0.943735 0.308466
--0.093851 0.491986 0.062932 -0.119221 0.943735 0.308466
--0.031449 0.499869 0.062932 -0.119221 0.943735 0.308466
--0.031449 0.499869 0.062932 -0.113446 0.898015 0.425088
--0.093851 0.491986 0.062932 -0.113446 0.898015 0.425088
--0.092138 0.483007 0.082358 -0.113446 0.898015 0.425088
--0.030875 0.490746 0.082358 -0.113446 0.898015 0.425088
--0.030875 0.490746 0.082358 -0.105882 0.838144 0.535074
--0.092138 0.483007 0.082358 -0.105882 0.838144 0.535074
--0.089983 0.471707 0.100484 -0.105882 0.838144 0.535074
--0.030153 0.479265 0.100484 -0.105882 0.838144 0.535074
--0.030153 0.479265 0.100484 -0.096648 0.765051 0.636676
--0.089983 0.471707 0.100484 -0.096648 0.765051 0.636676
--0.087419 0.458265 0.117026 -0.096648 0.765051 0.636676
--0.029294 0.465608 0.117026 -0.096648 0.765051 0.636676
--0.029294 0.465608 0.117026 -0.085887 0.679861 0.728294
--0.087419 0.458265 0.117026 -0.085887 0.679861 0.728294
--0.084486 0.442892 0.131722 -0.085887 0.679861 0.728294
--0.028311 0.449989 0.131722 -0.085887 0.679861 0.728294
--0.028311 0.449989 0.131722 -0.073765 0.583904 0.808465
--0.084486 0.442892 0.131722 -0.073765 0.583904 0.808465
--0.081232 0.425831 0.144341 -0.073765 0.583904 0.808465
--0.027220 0.432655 0.144341 -0.073765 0.583904 0.808465
--0.027220 0.432655 0.144341 -0.060471 0.478680 0.875905
--0.081232 0.425831 0.144341 -0.060471 0.478680 0.875905
--0.077706 0.407351 0.154684 -0.060471 0.478680 0.875905
--0.026039 0.413879 0.154684 -0.060471 0.478680 0.875905
--0.026039 0.413879 0.154684 -0.046217 0.365846 0.929527
--0.077706 0.407351 0.154684 -0.046217 0.365846 0.929527
--0.073966 0.387744 0.162587 -0.046217 0.365846 0.929527
--0.024786 0.393957 0.162587 -0.046217 0.365846 0.929527
--0.024786 0.393957 0.162587 -0.031227 0.247187 0.968465
--0.073966 0.387744 0.162587 -0.031227 0.247187 0.968465
--0.070070 0.367318 0.167926 -0.031227 0.247187 0.968465
--0.023480 0.373204 0.167926 -0.031227 0.247187 0.968465
--0.023480 0.373204 0.167926 -0.015739 0.124587 0.992084
--0.070070 0.367318 0.167926 -0.015739 0.124587 0.992084
--0.066079 0.346396 0.170617 -0.015739 0.124587 0.992084
--0.022143 0.351947 0.170617 -0.015739 0.124587 0.992084
--0.066079 0.346396 0.170617 -0.000000 -0.000000 1.000000
--0.062056 0.325308 0.170617 -0.000000 -0.000000 1.000000
--0.020795 0.330520 0.170617 0.015739 -0.124587 0.992084
--0.062056 0.325308 0.170617 0.015739 -0.124587 0.992084
--0.058065 0.304386 0.167926 0.015739 -0.124587 0.992084
--0.019457 0.309263 0.167926 0.015739 -0.124587 0.992084
--0.019457 0.309263 0.167926 0.031227 -0.247187 0.968465
--0.058065 0.304386 0.167926 0.031227 -0.247187 0.968465
--0.054168 0.283960 0.162587 0.031227 -0.247187 0.968465
--0.018152 0.288510 0.162587 0.031227 -0.247187 0.968465
--0.018152 0.288510 0.162587 0.046217 -0.365845 0.929527
--0.054168 0.283960 0.162587 0.046217 -0.365845 0.929527
--0.050428 0.264353 0.154684 0.046217 -0.365845 0.929527
--0.016898 0.268588 0.154684 0.046217 -0.365845 0.929527
--0.016898 0.268588 0.154684 0.060472 -0.478680 0.875905
--0.050428 0.264353 0.154684 0.060472 -0.478680 0.875905
--0.046903 0.245873 0.144341 0.060472 -0.478680 0.875905
--0.015717 0.249813 0.144341 0.060472 -0.478680 0.875905
--0.015717 0.249813 0.144341 0.073764 -0.583905 0.808464
--0.046903 0.245873 0.144341 0.073764 -0.583905 0.808464
--0.043648 0.228812 0.131722 0.073764 -0.583905 0.808464
--0.014626 0.232478 0.131722 0.073764 -0.583905 0.808464
--0.014626 0.232478 0.131722 0.085886 -0.679862 0.728294
--0.043648 0.228812 0.131722 0.085886 -0.679862 0.728294
--0.040716 0.213439 0.117026 0.085886 -0.679862 0.728294
--0.013644 0.216859 0.117026 0.085886 -0.679862 0.728294
--0.013644 0.216859 0.117026 0.096648 -0.765051 0.636676
--0.040716 0.213439 0.117026 0.096648 -0.765051 0.636676
--0.038151 0.199997 0.100484 0.096648 -0.765051 0.636676
--0.012784 0.203202 0.100484 0.096648 -0.765051 0.636676
--0.012784 0.203202 0.100484 0.105882 -0.838144 0.535073
--0.038151 0.199997 0.100484 0.105882 -0.838144 0.535073
--0.035996 0.188697 0.082358 0.105882 -0.838144 0.535073
--0.012062 0.191721 0.082358 0.105882 -0.838144 0.535073
--0.012062 0.191721 0.082358 0.113446 -0.898013 0.425090
--0.035996 0.188697 0.082358 0.113446 -0.898013 0.425090
--0.034283 0.179718 0.062932 0.113446 -0.898013 0.425090
--0.011488 0.182598 0.062932 0.113446 -0.898013 0.425090
--0.011488 0.182598 0.062932 0.119222 -0.943735 0.308466
--0.034283 0.179718 0.062932 0.119222 -0.943735 0.308466
--0.033040 0.173202 0.042515 0.119222 -0.943735 0.308466
--0.011072 0.175977 0.042515 0.119222 -0.943735 0.308466
--0.011072 0.175977 0.042515 0.123123 -0.974609 0.187024
--0.033040 0.173202 0.042515 0.123123 -0.974609 0.187024
--0.032286 0.169250 0.021426 0.123123 -0.974609 0.187024
--0.010819 0.171962 0.021426 0.123123 -0.974609 0.187024
--0.010819 0.171962 0.021426 0.125087 -0.990165 0.062668
--0.032286 0.169250 0.021426 0.125087 -0.990165 0.062668
--0.032034 0.167926 0.000000 0.125087 -0.990165 0.062668
--0.010734 0.170617 0.000000 0.125087 -0.990165 0.062668
--0.010734 0.170617 0.000000 0.125087 -0.990165 -0.062668
--0.032034 0.167926 0.000000 0.125087 -0.990165 -0.062668
--0.032286 0.169250 -0.021426 0.125087 -0.990165 -0.062668
--0.010819 0.171962 -0.021426 0.125087 -0.990165 -0.062668
--0.010819 0.171962 -0.021426 0.123123 -0.974609 -0.187024
--0.032286 0.169250 -0.021426 0.123123 -0.974609 -0.187024
--0.033040 0.173202 -0.042515 0.123123 -0.974609 -0.187024
--0.011072 0.175977 -0.042515 0.123123 -0.974609 -0.187024
--0.011072 0.175977 -0.042515 0.119222 -0.943735 -0.308466
--0.033040 0.173202 -0.042515 0.119222 -0.943735 -0.308466
--0.034283 0.179718 -0.062932 0.119222 -0.943735 -0.308466
--0.011488 0.182598 -0.062932 0.119222 -0.943735 -0.308466
--0.011488 0.182598 -0.062932 0.113446 -0.898013 -0.425090
--0.034283 0.179718 -0.062932 0.113446 -0.898013 -0.425090
--0.035996 0.188697 -0.082358 0.113446 -0.898013 -0.425090
--0.012062 0.191721 -0.082358 0.113446 -0.898013 -0.425090
--0.012062 0.191721 -0.082358 0.105882 -0.838144 -0.535073
--0.035996 0.188697 -0.082358 0.105882 -0.838144 -0.535073
--0.038151 0.199997 -0.100484 0.105882 -0.838144 -0.535073
--0.012784 0.203202 -0.100484 0.105882 -0.838144 -0.535073
--0.012784 0.203202 -0.100484 0.096648 -0.765051 -0.636676
--0.038151 0.199997 -0.100484 0.096648 -0.765051 -0.636676
--0.040716 0.213439 -0.117026 0.096648 -0.765051 -0.636676
--0.013644 0.216859 -0.117026 0.096648 -0.765051 -0.636676
--0.013644 0.216859 -0.117026 0.085886 -0.679862 -0.728294
--0.040716 0.213439 -0.117026 0.085886 -0.679862 -0.728294
--0.043648 0.228812 -0.131722 0.085886 -0.679862 -0.728294
--0.014626 0.232478 -0.131722 0.085886 -0.679862 -0.728294
--0.014626 0.232478 -0.131722 0.073764 -0.583905 -0.808464
--0.043648 0.228812 -0.131722 0.073764 -0.583905 -0.808464
--0.046903 0.245873 -0.144341 0.073764 -0.583905 -0.808464
--0.015717 0.249813 -0.144341 0.073764 -0.583905 -0.808464
--0.015717 0.249813 -0.144341 0.060472 -0.478680 -0.875905
--0.046903 0.245873 -0.144341 0.060472 -0.478680 -0.875905
--0.050428 0.264353 -0.154684 0.060472 -0.478680 -0.875905
--0.016898 0.268588 -0.154684 0.060472 -0.478680 -0.875905
--0.016898 0.268588 -0.154684 0.046217 -0.365845 -0.929527
--0.050428 0.264353 -0.154684 0.046217 -0.365845 -0.929527
--0.054168 0.283960 -0.162587 0.046217 -0.365845 -0.929527
--0.018152 0.288510 -0.162587 0.046217 -0.365845 -0.929527
--0.018152 0.288510 -0.162587 0.031227 -0.247187 -0.968465
--0.054168 0.283960 -0.162587 0.031227 -0.247187 -0.968465
--0.058065 0.304386 -0.167926 0.031227 -0.247187 -0.968465
--0.019457 0.309263 -0.167926 0.031227 -0.247187 -0.968465
--0.019457 0.309263 -0.167926 0.015739 -0.124587 -0.992084
--0.058065 0.304386 -0.167926 0.015739 -0.124587 -0.992084
--0.062056 0.325308 -0.170617 0.015739 -0.124587 -0.992084
--0.020795 0.330520 -0.170617 0.015739 -0.124587 -0.992084
--0.062056 0.325308 -0.170617 -0.000000 -0.000000 -1.000000
--0.066079 0.346396 -0.170617 -0.000000 -0.000000 -1.000000
--0.022143 0.351947 -0.170617 -0.015739 0.124587 -0.992084
--0.066079 0.346396 -0.170617 -0.015739 0.124587 -0.992084
--0.070070 0.367318 -0.167926 -0.015739 0.124587 -0.992084
--0.023480 0.373204 -0.167926 -0.015739 0.124587 -0.992084
--0.023480 0.373204 -0.167926 -0.031227 0.247187 -0.968465
--0.070070 0.367318 -0.167926 -0.031227 0.247187 -0.968465
--0.073966 0.387744 -0.162587 -0.031227 0.247187 -0.968465
--0.024786 0.393957 -0.162587 -0.031227 0.247187 -0.968465
--0.024786 0.393957 -0.162587 -0.046217 0.365846 -0.929527
--0.073966 0.387744 -0.162587 -0.046217 0.365846 -0.929527
--0.077706 0.407351 -0.154684 -0.046217 0.365846 -0.929527
--0.026039 0.413879 -0.154684 -0.046217 0.365846 -0.929527
--0.026039 0.413879 -0.154684 -0.060471 0.478680 -0.875905
--0.077706 0.407351 -0.154684 -0.060471 0.478680 -0.875905
--0.081232 0.425831 -0.144341 -0.060471 0.478680 -0.875905
--0.027220 0.432655 -0.144341 -0.060471 0.478680 -0.875905
--0.027220 0.432655 -0.144341 -0.073765 0.583904 -0.808465
--0.081232 0.425831 -0.144341 -0.073765 0.583904 -0.808465
--0.084486 0.442892 -0.131722 -0.073765 0.583904 -0.808465
--0.028311 0.449989 -0.131722 -0.073765 0.583904 -0.808465
--0.028311 0.449989 -0.131722 -0.085887 0.679861 -0.728294
--0.084486 0.442892 -0.131722 -0.085887 0.679861 -0.728294
--0.087419 0.458265 -0.117026 -0.085887 0.679861 -0.728294
--0.029294 0.465608 -0.117026 -0.085887 0.679861 -0.728294
--0.029294 0.465608 -0.117026 -0.096648 0.765051 -0.636676
--0.087419 0.458265 -0.117026 -0.096648 0.765051 -0.636676
--0.089983 0.471707 -0.100484 -0.096648 0.765051 -0.636676
--0.030153 0.479265 -0.100484 -0.096648 0.765051 -0.636676
--0.030153 0.479265 -0.100484 -0.105882 0.838144 -0.535074
--0.089983 0.471707 -0.100484 -0.105882 0.838144 -0.535074
--0.092138 0.483007 -0.082358 -0.105882 0.838144 -0.535074
--0.030875 0.490746 -0.082358 -0.105882 0.838144 -0.535074
--0.030875 0.490746 -0.082358 -0.113446 0.898015 -0.425088
--0.092138 0.483007 -0.082358 -0.113446 0.898015 -0.425088
--0.093851 0.491986 -0.062932 -0.113446 0.898015 -0.425088
--0.031449 0.499869 -0.062932 -0.113446 0.898015 -0.425088
--0.031449 0.499869 -0.062932 -0.119221 0.943735 -0.308466
--0.093851 0.491986 -0.062932 -0.119221 0.943735 -0.308466
--0.095094 0.498502 -0.042515 -0.119221 0.943735 -0.308466
--0.031866 0.506490 -0.042515 -0.119221 0.943735 -0.308466
--0.031866 0.506490 -0.042515 -0.123122 0.974609 -0.187026
--0.095094 0.498502 -0.042515 -0.123122 0.974609 -0.187026
--0.095848 0.502454 -0.021426 -0.123122 0.974609 -0.187026
--0.032118 0.510505 -0.021426 -0.123122 0.974609 -0.187026
--0.032118 0.510505 -0.021426 -0.125087 0.990165 -0.062666
--0.095848 0.502454 -0.021426 -0.125087 0.990165 -0.062666
--0.096101 0.503778 0.000000 -0.125087 0.990165 -0.062666
--0.032203 0.511850 0.000000 -0.125087 0.990165 -0.062666
--0.096101 0.503778 0.000000 -0.248201 0.966680 0.062666
--0.158483 0.487761 0.000000 -0.248201 0.966680 0.062666
--0.158067 0.486479 0.021426 -0.248201 0.966680 0.062666
--0.095848 0.502454 0.021426 -0.248201 0.966680 0.062666
--0.095848 0.502454 0.021426 -0.244302 0.951493 0.187025
--0.158067 0.486479 0.021426 -0.244302 0.951493 0.187025
--0.156824 0.482653 0.042515 -0.244302 0.951493 0.187025
--0.095094 0.498502 0.042515 -0.244302 0.951493 0.187025
--0.095094 0.498502 0.042515 -0.236562 0.921351 0.308465
--0.156824 0.482653 0.042515 -0.236562 0.921351 0.308465
--0.154773 0.476344 0.062932 -0.236562 0.921351 0.308465
--0.093851 0.491986 0.062932 -0.236562 0.921351 0.308465
--0.093851 0.491986 0.062932 -0.225102 0.876714 0.425090
--0.154773 0.476344 0.062932 -0.225102 0.876714 0.425090
--0.151949 0.467650 0.082358 -0.225102 0.876714 0.425090
--0.092138 0.483007 0.082358 -0.225102 0.876714 0.425090
--0.092138 0.483007 0.082358 -0.210095 0.818264 0.535073
--0.151949 0.467650 0.082358 -0.210095 0.818264 0.535073
--0.148394 0.456710 0.100484 -0.210095 0.818264 0.535073
--0.089983 0.471707 0.100484 -0.210095 0.818264 0.535073
--0.089983 0.471707 0.100484 -0.191773 0.746905 0.636676
--0.148394 0.456710 0.100484 -0.191773 0.746905 0.636676
--0.144165 0.443695 0.117026 -0.191773 0.746905 0.636676
--0.087419 0.458265 0.117026 -0.191773 0.746905 0.636676
--0.087419 0.458265 0.117026 -0.170418 0.663736 0.728294
--0.144165 0.443695 0.117026 -0.170418 0.663736 0.728294
--0.139329 0.428811 0.131722 -0.170418 0.663736 0.728294
--0.084486 0.442892 0.131722 -0.170418 0.663736 0.728294
--0.084486 0.442892 0.131722 -0.146365 0.570055 0.808464
--0.139329 0.428811 0.131722 -0.146365 0.570055 0.808464
--0.133962 0.412293 0.144341 -0.146365 0.570055 0.808464
--0.081232 0.425831 0.144341 -0.146365 0.570055 0.808464
--0.081232 0.425831 0.144341 -0.119989 0.467326 0.875905
--0.133962 0.412293 0.144341 -0.119989 0.467326 0.875905
--0.128148 0.394400 0.154684 -0.119989 0.467326 0.875905
--0.077706 0.407351 0.154684 -0.119989 0.467326 0.875905
--0.077706 0.407351 0.154684 -0.091705 0.357169 0.929527
--0.128148 0.394400 0.154684 -0.091705 0.357169 0.929527
--0.121980 0.375416 0.162587 -0.091705 0.357169 0.929527
--0.073966 0.387744 0.162587 -0.091705 0.357169 0.929527
--0.073966 0.387744 0.162587 -0.061961 0.241324 0.968465
--0.121980 0.375416 0.162587 -0.061961 0.241324 0.968465
--0.115554 0.355640 0.167926 -0.061961 0.241324 0.968465
--0.070070 0.367318 0.167926 -0.061961 0.241324 0.968465
--0.070070 0.367318 0.167926 -0.031230 0.121632 0.992084
--0.115554 0.355640 0.167926 -0.031230 0.121632 0.992084
--0.108973 0.335383 0.170617 -0.031230 0.121632 0.992084
--0.066079 0.346396 0.170617 -0.031230 0.121632 0.992084
--0.108973 0.335383 0.170617 0.000000 0.000000 1.000000
--0.102338 0.314965 0.170617 0.000000 0.000000 1.000000
--0.062056 0.325308 0.170617 0.031230 -0.121632 0.992084
--0.102338 0.314965 0.170617 0.031230 -0.121632 0.992084
--0.095757 0.294708 0.167926 0.031230 -0.121632 0.992084
--0.058065 0.304386 0.167926 0.031230 -0.121632 0.992084
--0.058065 0.304386 0.167926 0.061962 -0.241323 0.968465
--0.095757 0.294708 0.167926 0.061962 -0.241323 0.968465
--0.089331 0.274932 0.162587 0.061962 -0.241323 0.968465
--0.054168 0.283960 0.162587 0.061962 -0.241323 0.968465
--0.054168 0.283960 0.162587 0.091706 -0.357168 0.929527
--0.089331 0.274932 0.162587 0.091706 -0.357168 0.929527
--0.083162 0.255948 0.154684 0.091706 -0.357168 0.929527
--0.050428 0.264353 0.154684 0.091706 -0.357168 0.929527
--0.050428 0.264353 0.154684 0.119989 -0.467326 0.875905
--0.083162 0.255948 0.154684 0.119989 -0.467326 0.875905
--0.077349 0.238056 0.144341 0.119989 -0.467326 0.875905
--0.046903 0.245873 0.144341 0.119989 -0.467326 0.875905
--0.046903 0.245873 0.144341 0.146366 -0.570056 0.808464
--0.077349 0.238056 0.144341 0.146366 -0.570056 0.808464
--0.071982 0.221537 0.131722 0.146366 -0.570056 0.808464
--0.043648 0.228812 0.131722 0.146366 -0.570056 0.808464
--0.043648 0.228812 0.131722 0.170419 -0.663736 0.728294
--0.071982 0.221537 0.131722 0.170419 -0.663736 0.728294
--0.067146 0.206653 0.117026 0.170419 -0.663736 0.728294
--0.040716 0.213439 0.117026 0.170419 -0.663736 0.728294
--0.040716 0.213439 0.117026 0.191773 -0.746905 0.636676
--0.067146 0.206653 0.117026 0.191773 -0.746905 0.636676
--0.062917 0.193638 0.100484 0.191773 -0.746905 0.636676
--0.038151 0.199997 0.100484 0.191773 -0.746905 0.636676
--0.038151 0.199997 0.100484 0.210095 -0.818265 0.535073
--0.062917 0.193638 0.100484 0.210095 -0.818265 0.535073
--0.059362 0.182698 0.082358 0.210095 -0.818265 0.535073
--0.035996 0.188697 0.082358 0.210095 -0.818265 0.535073
--0.035996 0.188697 0.082358 0.225102 -0.876714 0.425090
--0.059362 0.182698 0.082358 0.225102 -0.876714 0.425090
--0.056537 0.174004 0.062932 0.225102 -0.876714 0.425090
--0.034283 0.179718 0.062932 0.225102 -0.876714 0.425090
--0.034283 0.179718 0.062932 0.236562 -0.921351 0.308466
--0.056537 0.174004 0.062932 0.236562 -0.921351 0.308466
--0.054487 0.167695 0.042515 0.236562 -0.921351 0.308466
--0.033040 0.173202 0.042515 0.236562 -0.921351 0.308466
--0.033040 0.173202 0.042515 0.244301 -0.951493 0.187024
--0.054487 0.167695 0.042515 0.244301 -0.951493 0.187024
--0.053244 0.163869 0.021426 0.244301 -0.951493 0.187024
--0.032286 0.169250 0.021426 0.244301 -0.951493 0.187024
--0.032286 0.169250 0.021426 0.248201 -0.966679 0.062667
--0.053244 0.163869 0.021426 0.248201 -0.966679 0.062667
--0.052828 0.162587 0.000000 0.248201 -0.966679 0.062667
--0.032034 0.167926 0.000000 0.248201 -0.966679 0.062667
--0.032034 0.167926 0.000000 0.248201 -0.966679 -0.062667
--0.052828 0.162587 0.000000 0.248201 -0.966679 -0.062667
--0.053244 0.163869 -0.021426 0.248201 -0.966679 -0.062667
--0.032286 0.169250 -0.021426 0.248201 -0.966679 -0.062667
--0.032286 0.169250 -0.021426 0.244301 -0.951493 -0.187024
--0.053244 0.163869 -0.021426 0.244301 -0.951493 -0.187024
--0.054487 0.167695 -0.042515 0.244301 -0.951493 -0.187024
--0.033040 0.173202 -0.042515 0.244301 -0.951493 -0.187024
--0.033040 0.173202 -0.042515 0.236562 -0.921351 -0.308466
--0.054487 0.167695 -0.042515 0.236562 -0.921351 -0.308466
--0.056537 0.174004 -0.062932 0.236562 -0.921351 -0.308466
--0.034283 0.179718 -0.062932 0.236562 -0.921351 -0.308466
--0.034283 0.179718 -0.062932 0.225102 -0.876714 -0.425090
--0.056537 0.174004 -0.062932 0.225102 -0.876714 -0.425090
--0.059362 0.182698 -0.082358 0.225102 -0.876714 -0.425090
--0.035996 0.188697 -0.082358 0.225102 -0.876714 -0.425090
--0.035996 0.188697 -0.082358 0.210095 -0.818265 -0.535073
--0.059362 0.182698 -0.082358 0.210095 -0.818265 -0.535073
--0.062917 0.193638 -0.100484 0.210095 -0.818265 -0.535073
--0.038151 0.199997 -0.100484 0.210095 -0.818265 -0.535073
--0.038151 0.199997 -0.100484 0.191773 -0.746905 -0.636676
--0.062917 0.193638 -0.100484 0.191773 -0.746905 -0.636676
--0.067146 0.206653 -0.117026 0.191773 -0.746905 -0.636676
--0.040716 0.213439 -0.117026 0.191773 -0.746905 -0.636676
--0.040716 0.213439 -0.117026 0.170419 -0.663736 -0.728294
--0.067146 0.206653 -0.117026 0.170419 -0.663736 -0.728294
--0.071982 0.221537 -0.131722 0.170419 -0.663736 -0.728294
--0.043648 0.228812 -0.131722 0.170419 -0.663736 -0.728294
--0.043648 0.228812 -0.131722 0.146366 -0.570056 -0.808464
--0.071982 0.221537 -0.131722 0.146366 -0.570056 -0.808464
--0.077349 0.238056 -0.144341 0.146366 -0.570056 -0.808464
--0.046903 0.245873 -0.144341 0.146366 -0.570056 -0.808464
--0.046903 0.245873 -0.144341 0.119989 -0.467326 -0.875905
--0.077349 0.238056 -0.144341 0.119989 -0.467326 -0.875905
--0.083162 0.255948 -0.154684 0.119989 -0.467326 -0.875905
--0.050428 0.264353 -0.154684 0.119989 -0.467326 -0.875905
--0.050428 0.264353 -0.154684 0.091706 -0.357168 -0.929527
--0.083162 0.255948 -0.154684 0.091706 -0.357168 -0.929527
--0.089331 0.274932 -0.162587 0.091706 -0.357168 -0.929527
--0.054168 0.283960 -0.162587 0.091706 -0.357168 -0.929527
--0.054168 0.283960 -0.162587 0.061962 -0.241323 -0.968465
--0.089331 0.274932 -0.162587 0.061962 -0.241323 -0.968465
--0.095757 0.294708 -0.167926 0.061962 -0.241323 -0.968465
--0.058065 0.304386 -0.167926 0.061962 -0.241323 -0.968465
--0.058065 0.304386 -0.167926 0.031230 -0.121632 -0.992084
--0.095757 0.294708 -0.167926 0.031230 -0.121632 -0.992084
--0.102338 0.314965 -0.170617 0.031230 -0.121632 -0.992084
--0.062056 0.325308 -0.170617 0.031230 -0.121632 -0.992084
--0.102338 0.314965 -0.170617 0.000000 0.000000 -1.000000
--0.108973 0.335383 -0.170617 0.000000 0.000000 -1.000000
--0.066079 0.346396 -0.170617 -0.031230 0.121632 -0.992084
--0.108973 0.335383 -0.170617 -0.031230 0.121632 -0.992084
--0.115554 0.355640 -0.167926 -0.031230 0.121632 -0.992084
--0.070070 0.367318 -0.167926 -0.031230 0.121632 -0.992084
--0.070070 0.367318 -0.167926 -0.061961 0.241324 -0.968465
--0.115554 0.355640 -0.167926 -0.061961 0.241324 -0.968465
--0.121980 0.375416 -0.162587 -0.061961 0.241324 -0.968465
--0.073966 0.387744 -0.162587 -0.061961 0.241324 -0.968465
--0.073966 0.387744 -0.162587 -0.091705 0.357169 -0.929527
--0.121980 0.375416 -0.162587 -0.091705 0.357169 -0.929527
--0.128148 0.394400 -0.154684 -0.091705 0.357169 -0.929527
--0.077706 0.407351 -0.154684 -0.091705 0.357169 -0.929527
--0.077706 0.407351 -0.154684 -0.119989 0.467326 -0.875905
--0.128148 0.394400 -0.154684 -0.119989 0.467326 -0.875905
--0.133962 0.412293 -0.144341 -0.119989 0.467326 -0.875905
--0.081232 0.425831 -0.144341 -0.119989 0.467326 -0.875905
--0.081232 0.425831 -0.144341 -0.146365 0.570055 -0.808464
--0.133962 0.412293 -0.144341 -0.146365 0.570055 -0.808464
--0.139329 0.428811 -0.131722 -0.146365 0.570055 -0.808464
--0.084486 0.442892 -0.131722 -0.146365 0.570055 -0.808464
--0.084486 0.442892 -0.131722 -0.170418 0.663736 -0.728294
--0.139329 0.428811 -0.131722 -0.170418 0.663736 -0.728294
--0.144165 0.443695 -0.117026 -0.170418 0.663736 -0.728294
--0.087419 0.458265 -0.117026 -0.170418 0.663736 -0.728294
--0.087419 0.458265 -0.117026 -0.191773 0.746905 -0.636676
--0.144165 0.443695 -0.117026 -0.191773 0.746905 -0.636676
--0.148394 0.456710 -0.100484 -0.191773 0.746905 -0.636676
--0.089983 0.471707 -0.100484 -0.191773 0.746905 -0.636676
--0.089983 0.471707 -0.100484 -0.210095 0.818264 -0.535073
--0.148394 0.456710 -0.100484 -0.210095 0.818264 -0.535073
--0.151949 0.467650 -0.082358 -0.210095 0.818264 -0.535073
--0.092138 0.483007 -0.082358 -0.210095 0.818264 -0.535073
--0.092138 0.483007 -0.082358 -0.225102 0.876714 -0.425090
--0.151949 0.467650 -0.082358 -0.225102 0.876714 -0.425090
--0.154773 0.476344 -0.062932 -0.225102 0.876714 -0.425090
--0.093851 0.491986 -0.062932 -0.225102 0.876714 -0.425090
--0.093851 0.491986 -0.062932 -0.236562 0.921351 -0.308465
--0.154773 0.476344 -0.062932 -0.236562 0.921351 -0.308465
--0.156824 0.482653 -0.042515 -0.236562 0.921351 -0.308465
--0.095094 0.498502 -0.042515 -0.236562 0.921351 -0.308465
--0.095094 0.498502 -0.042515 -0.244302 0.951493 -0.187025
--0.156824 0.482653 -0.042515 -0.244302 0.951493 -0.187025
--0.158067 0.486479 -0.021426 -0.244302 0.951493 -0.187025
--0.095848 0.502454 -0.021426 -0.244302 0.951493 -0.187025
--0.095848 0.502454 -0.021426 -0.248201 0.966680 -0.062666
--0.158067 0.486479 -0.021426 -0.248201 0.966680 -0.062666
--0.158483 0.487761 0.000000 -0.248201 0.966680 -0.062666
--0.096101 0.503778 0.000000 -0.248201 0.966680 -0.062666
--0.158483 0.487761 0.000000 -0.367401 0.927949 0.062666
--0.218366 0.464052 0.000000 -0.367401 0.927949 0.062666
--0.217792 0.462832 0.021426 -0.367401 0.927949 0.062666
--0.158067 0.486479 0.021426 -0.367401 0.927949 0.062666
--0.158067 0.486479 0.021426 -0.361629 0.913371 0.187025
--0.217792 0.462832 0.021426 -0.361629 0.913371 0.187025
--0.216079 0.459192 0.042515 -0.361629 0.913371 0.187025
--0.156824 0.482653 0.042515 -0.361629 0.913371 0.187025
--0.156824 0.482653 0.042515 -0.350174 0.884436 0.308466
--0.216079 0.459192 0.042515 -0.350174 0.884436 0.308466
--0.213255 0.453189 0.062932 -0.350174 0.884436 0.308466
--0.154773 0.476344 0.062932 -0.350174 0.884436 0.308466
--0.154773 0.476344 0.062932 -0.333209 0.841588 0.425090
--0.213255 0.453189 0.062932 -0.333209 0.841588 0.425090
--0.209363 0.444918 0.082358 -0.333209 0.841588 0.425090
--0.151949 0.467650 0.082358 -0.333209 0.841588 0.425090
--0.151949 0.467650 0.082358 -0.310994 0.785480 0.535074
--0.209363 0.444918 0.082358 -0.310994 0.785480 0.535074
--0.204465 0.434510 0.100484 -0.310994 0.785480 0.535074
--0.148394 0.456710 0.100484 -0.310994 0.785480 0.535074
--0.148394 0.456710 0.100484 -0.283873 0.716980 0.636676
--0.204465 0.434510 0.100484 -0.283873 0.716980 0.636676
--0.198638 0.422127 0.117026 -0.283873 0.716980 0.636676
--0.144165 0.443695 0.117026 -0.283873 0.716980 0.636676
--0.144165 0.443695 0.117026 -0.252263 0.637144 0.728293
--0.198638 0.422127 0.117026 -0.252263 0.637144 0.728293
--0.191975 0.407967 0.131722 -0.252263 0.637144 0.728293
--0.139329 0.428811 0.131722 -0.252263 0.637144 0.728293
--0.139329 0.428811 0.131722 -0.216658 0.547215 0.808465
--0.191975 0.407967 0.131722 -0.216658 0.547215 0.808465
--0.184580 0.392251 0.144341 -0.216658 0.547215 0.808465
--0.133962 0.412293 0.144341 -0.216658 0.547215 0.808465
--0.133962 0.412293 0.144341 -0.177615 0.448603 0.875904
--0.184580 0.392251 0.144341 -0.177615 0.448603 0.875904
--0.176569 0.375229 0.154684 -0.177615 0.448603 0.875904
--0.128148 0.394400 0.154684 -0.177615 0.448603 0.875904
--0.128148 0.394400 0.154684 -0.135748 0.342858 0.929527
--0.176569 0.375229 0.154684 -0.135748 0.342858 0.929527
--0.168070 0.357168 0.162587 -0.135748 0.342858 0.929527
--0.121980 0.375416 0.162587 -0.135748 0.342858 0.929527
--0.121980 0.375416 0.162587 -0.091719 0.231654 0.968465
--0.168070 0.357168 0.162587 -0.091719 0.231654 0.968465
--0.159217 0.338353 0.167926 -0.091719 0.231654 0.968465
--0.115554 0.355640 0.167926 -0.091719 0.231654 0.968465
--0.115554 0.355640 0.167926 -0.046228 0.116759 0.992084
--0.159217 0.338353 0.167926 -0.046228 0.116759 0.992084
--0.150148 0.319080 0.170617 -0.046228 0.116759 0.992084
--0.108973 0.335383 0.170617 -0.046228 0.116759 0.992084
--0.150148 0.319080 0.170617 0.000000 -0.000000 1.000000
--0.141007 0.299655 0.170617 0.000000 -0.000000 1.000000
--0.102338 0.314965 0.170617 0.046228 -0.116759 0.992084
--0.141007 0.299655 0.170617 0.046228 -0.116759 0.992084
--0.131938 0.280383 0.167926 0.046228 -0.116759 0.992084
--0.095757 0.294708 0.167926 0.046228 -0.116759 0.992084
--0.095757 0.294708 0.167926 0.091718 -0.231655 0.968465
--0.131938 0.280383 0.167926 0.091718 -0.231655 0.968465
--0.123085 0.261568 0.162587 0.091718 -0.231655 0.968465
--0.089331 0.274932 0.162587 0.091718 -0.231655 0.968465
--0.089331 0.274932 0.162587 0.135747 -0.342858 0.929527
--0.123085 0.261568 0.162587 0.135747 -0.342858 0.929527
--0.114586 0.243507 0.154684 0.135747 -0.342858 0.929527
--0.083162 0.255948 0.154684 0.135747 -0.342858 0.929527
--0.083162 0.255948 0.154684 0.177614 -0.448603 0.875905
--0.114586 0.243507 0.154684 0.177614 -0.448603 0.875905
--0.106575 0.226484 0.144341 0.177614 -0.448603 0.875905
--0.077349 0.238056 0.144341 0.177614 -0.448603 0.875905
--0.077349 0.238056 0.144341 0.216658 -0.547216 0.808464
--0.106575 0.226484 0.144341 0.216658 -0.547216 0.808464
--0.099180 0.210769 0.131722 0.216658 -0.547216 0.808464
--0.071982 0.221537 0.131722 0.216658 -0.547216 0.808464
--0.071982 0.221537 0.131722 0.252263 -0.637144 0.728293
--0.099180 0.210769 0.131722 0.252263 -0.637144 0.728293
--0.092517 0.196608 0.117026 0.252263 -0.637144 0.728293
--0.067146 0.206653 0.117026 0.252263 -0.637144 0.728293
--0.067146 0.206653 0.117026 0.283873 -0.716979 0.636676
--0.092517 0.196608 0.117026 0.283873 -0.716979 0.636676
--0.086690 0.184226 0.100484 0.283873 -0.716979 0.636676
--0.062917 0.193638 0.100484 0.283873 -0.716979 0.636676
--0.062917 0.193638 0.100484 0.310994 -0.785481 0.535072
--0.086690 0.184226 0.100484 0.310994 -0.785481 0.535072
--0.081792 0.173817 0.082358 0.310994 -0.785481 0.535072
--0.059362 0.182698 0.082358 0.310994 -0.785481 0.535072
--0.059362 0.182698 0.082358 0.333209 -0.841587 0.425091
--0.081792 0.173817 0.082358 0.333209 -0.841587 0.425091
--0.077900 0.165546 0.062932 0.333209 -0.841587 0.425091
--0.056537 0.174004 0.062932 0.333209 -0.841587 0.425091
--0.056537 0.174004 0.062932 0.350174 -0.884436 0.308465
--0.077900 0.165546 0.062932 0.350174 -0.884436 0.308465
--0.075076 0.159544 0.042515 0.350174 -0.884436 0.308465
--0.054487 0.167695 0.042515 0.350174 -0.884436 0.308465
--0.054487 0.167695 0.042515 0.361630 -0.913371 0.187025
--0.075076 0.159544 0.042515 0.361630 -0.913371 0.187025
--0.073363 0.155904 0.021426 0.361630 -0.913371 0.187025
--0.053244 0.163869 0.021426 0.361630 -0.913371 0.187025
--0.053244 0.163869 0.021426 0.367401 -0.927949 0.062667
--0.073363 0.155904 0.021426 0.367401 -0.927949 0.062667
--0.072789 0.154684 0.000000 0.367401 -0.927949 0.062667
--0.052828 0.162587 0.000000 0.367401 -0.927949 0.062667
--0.052828 0.162587 0.000000 0.367401 -0.927949 -0.062667
--0.072789 0.154684 0.000000 0.367401 -0.927949 -0.062667
--0.073363 0.155904 -0.021426 0.367401 -0.927949 -0.062667
--0.053244 0.163869 -0.021426 0.367401 -0.927949 -0.062667
--0.053244 0.163869 -0.021426 0.361630 -0.913371 -0.187025
--0.073363 0.155904 -0.021426 0.361630 -0.913371 -0.187025
--0.075076 0.159544 -0.042515 0.361630 -0.913371 -0.187025
--0.054487 0.167695 -0.042515 0.361630 -0.913371 -0.187025
--0.054487 0.167695 -0.042515 0.350174 -0.884436 -0.308465
--0.075076 0.159544 -0.042515 0.350174 -0.884436 -0.308465
--0.077900 0.165546 -0.062932 0.350174 -0.884436 -0.308465
--0.056537 0.174004 -0.062932 0.350174 -0.884436 -0.308465
--0.056537 0.174004 -0.062932 0.333209 -0.841587 -0.425091
--0.077900 0.165546 -0.062932 0.333209 -0.841587 -0.425091
--0.081792 0.173817 -0.082358 0.333209 -0.841587 -0.425091
--0.059362 0.182698 -0.082358 0.333209 -0.841587 -0.425091
--0.059362 0.182698 -0.082358 0.310994 -0.785481 -0.535072
--0.081792 0.173817 -0.082358 0.310994 -0.785481 -0.535072
--0.086690 0.184226 -0.100484 0.310994 -0.785481 -0.535072
--0.062917 0.193638 -0.100484 0.310994 -0.785481 -0.535072
--0.062917 0.193638 -0.100484 0.283873 -0.716979 -0.636676
--0.086690 0.184226 -0.100484 0.283873 -0.716979 -0.636676
--0.092517 0.196608 -0.117026 0.283873 -0.716979 -0.636676
--0.067146 0.206653 -0.117026 0.283873 -0.716979 -0.636676
--0.067146 0.206653 -0.117026 0.252263 -0.637144 -0.728293
--0.092517 0.196608 -0.117026 0.252263 -0.637144 -0.728293
--0.099180 0.210769 -0.131722 0.252263 -0.637144 -0.728293
--0.071982 0.221537 -0.131722 0.252263 -0.637144 -0.728293
--0.071982 0.221537 -0.131722 0.216658 -0.547216 -0.808464
--0.099180 0.210769 -0.131722 0.216658 -0.547216 -0.808464
--0.106575 0.226484 -0.144341 0.216658 -0.547216 -0.808464
--0.077349 0.238056 -0.144341 0.216658 -0.547216 -0.808464
--0.077349 0.238056 -0.144341 0.177614 -0.448603 -0.875905
--0.106575 0.226484 -0.144341 0.177614 -0.448603 -0.875905
--0.114586 0.243507 -0.154684 0.177614 -0.448603 -0.875905
--0.083162 0.255948 -0.154684 0.177614 -0.448603 -0.875905
--0.083162 0.255948 -0.154684 0.135747 -0.342858 -0.929527
--0.114586 0.243507 -0.154684 0.135747 -0.342858 -0.929527
--0.123085 0.261568 -0.162587 0.135747 -0.342858 -0.929527
--0.089331 0.274932 -0.162587 0.135747 -0.342858 -0.929527
--0.089331 0.274932 -0.162587 0.091718 -0.231655 -0.968465
--0.123085 0.261568 -0.162587 0.091718 -0.231655 -0.968465
--0.131938 0.280383 -0.167926 0.091718 -0.231655 -0.968465
--0.095757 0.294708 -0.167926 0.091718 -0.231655 -0.968465
--0.095757 0.294708 -0.167926 0.046228 -0.116759 -0.992084
--0.131938 0.280383 -0.167926 0.046228 -0.116759 -0.992084
--0.141007 0.299655 -0.170617 0.046228 -0.116759 -0.992084
--0.102338 0.314965 -0.170617 0.046228 -0.116759 -0.992084
--0.141007 0.299655 -0.170617 0.000000 -0.000000 -1.000000
--0.150148 0.319080 -0.170617 0.000000 -0.000000 -1.000000
--0.108973 0.335383 -0.170617 -0.046228 0.116759 -0.992084
--0.150148 0.319080 -0.170617 -0.046228 0.116759 -0.992084
--0.159217 0.338353 -0.167926 -0.046228 0.116759 -0.992084
--0.115554 0.355640 -0.167926 -0.046228 0.116759 -0.992084
--0.115554 0.355640 -0.167926 -0.091719 0.231654 -0.968465
--0.159217 0.338353 -0.167926 -0.091719 0.231654 -0.968465
--0.168070 0.357168 -0.162587 -0.091719 0.231654 -0.968465
--0.121980 0.375416 -0.162587 -0.091719 0.231654 -0.968465
--0.121980 0.375416 -0.162587 -0.135748 0.342858 -0.929527
--0.168070 0.357168 -0.162587 -0.135748 0.342858 -0.929527
--0.176569 0.375229 -0.154684 -0.135748 0.342858 -0.929527
--0.128148 0.394400 -0.154684 -0.135748 0.342858 -0.929527
--0.128148 0.394400 -0.154684 -0.177615 0.448603 -0.875904
--0.176569 0.375229 -0.154684 -0.177615 0.448603 -0.875904
--0.184580 0.392251 -0.144341 -0.177615 0.448603 -0.875904
--0.133962 0.412293 -0.144341 -0.177615 0.448603 -0.875904
--0.133962 0.412293 -0.144341 -0.216658 0.547215 -0.808465
--0.184580 0.392251 -0.144341 -0.216658 0.547215 -0.808465
--0.191975 0.407967 -0.131722 -0.216658 0.547215 -0.808465
--0.139329 0.428811 -0.131722 -0.216658 0.547215 -0.808465
--0.139329 0.428811 -0.131722 -0.252263 0.637144 -0.728293
--0.191975 0.407967 -0.131722 -0.252263 0.637144 -0.728293
--0.198638 0.422127 -0.117026 -0.252263 0.637144 -0.728293
--0.144165 0.443695 -0.117026 -0.252263 0.637144 -0.728293
--0.144165 0.443695 -0.117026 -0.283873 0.716980 -0.636676
--0.198638 0.422127 -0.117026 -0.283873 0.716980 -0.636676
--0.204465 0.434510 -0.100484 -0.283873 0.716980 -0.636676
--0.148394 0.456710 -0.100484 -0.283873 0.716980 -0.636676
--0.148394 0.456710 -0.100484 -0.310994 0.785480 -0.535074
--0.204465 0.434510 -0.100484 -0.310994 0.785480 -0.535074
--0.209363 0.444918 -0.082358 -0.310994 0.785480 -0.535074
--0.151949 0.467650 -0.082358 -0.310994 0.785480 -0.535074
--0.151949 0.467650 -0.082358 -0.333209 0.841588 -0.425090
--0.209363 0.444918 -0.082358 -0.333209 0.841588 -0.425090
--0.213255 0.453189 -0.062932 -0.333209 0.841588 -0.425090
--0.154773 0.476344 -0.062932 -0.333209 0.841588 -0.425090
--0.154773 0.476344 -0.062932 -0.350174 0.884436 -0.308466
--0.213255 0.453189 -0.062932 -0.350174 0.884436 -0.308466
--0.216079 0.459192 -0.042515 -0.350174 0.884436 -0.308466
--0.156824 0.482653 -0.042515 -0.350174 0.884436 -0.308466
--0.156824 0.482653 -0.042515 -0.361629 0.913371 -0.187025
--0.216079 0.459192 -0.042515 -0.361629 0.913371 -0.187025
--0.217792 0.462832 -0.021426 -0.361629 0.913371 -0.187025
--0.158067 0.486479 -0.021426 -0.361629 0.913371 -0.187025
--0.158067 0.486479 -0.021426 -0.367401 0.927949 -0.062666
--0.217792 0.462832 -0.021426 -0.367401 0.927949 -0.062666
--0.218366 0.464052 0.000000 -0.367401 0.927949 -0.062666
--0.158483 0.487761 0.000000 -0.367401 0.927949 -0.062666
--0.218366 0.464052 0.000000 -0.480807 0.874584 0.062665
--0.274805 0.433024 0.000000 -0.480807 0.874584 0.062665
--0.274083 0.431886 0.021426 -0.480807 0.874584 0.062665
--0.217792 0.462832 0.021426 -0.480807 0.874584 0.062665
--0.217792 0.462832 0.021426 -0.473253 0.860844 0.187026
--0.274083 0.431886 0.021426 -0.473253 0.860844 0.187026
--0.271928 0.428489 0.042515 -0.473253 0.860844 0.187026
--0.216079 0.459192 0.042515 -0.473253 0.860844 0.187026
--0.216079 0.459192 0.042515 -0.458261 0.833574 0.308466
--0.271928 0.428489 0.042515 -0.458261 0.833574 0.308466
--0.268373 0.422888 0.062932 -0.458261 0.833574 0.308466
--0.213255 0.453189 0.062932 -0.458261 0.833574 0.308466
--0.213255 0.453189 0.062932 -0.436060 0.793190 0.425090
--0.268373 0.422888 0.062932 -0.436060 0.793190 0.425090
--0.263475 0.415170 0.082358 -0.436060 0.793190 0.425090
--0.209363 0.444918 0.082358 -0.436060 0.793190 0.425090
--0.209363 0.444918 0.082358 -0.406988 0.740309 0.535074
--0.263475 0.415170 0.082358 -0.406988 0.740309 0.535074
--0.257311 0.405457 0.100484 -0.406988 0.740309 0.535074
--0.204465 0.434510 0.100484 -0.406988 0.740309 0.535074
--0.204465 0.434510 0.100484 -0.371495 0.675748 0.636676
--0.257311 0.405457 0.100484 -0.371495 0.675748 0.636676
--0.249978 0.393903 0.117026 -0.371495 0.675748 0.636676
--0.198638 0.422127 0.117026 -0.371495 0.675748 0.636676
--0.198638 0.422127 0.117026 -0.330129 0.600503 0.728293
--0.249978 0.393903 0.117026 -0.330129 0.600503 0.728293
--0.241593 0.380689 0.131722 -0.330129 0.600503 0.728293
--0.191975 0.407967 0.131722 -0.330129 0.600503 0.728293
--0.191975 0.407967 0.131722 -0.283533 0.515746 0.808465
--0.241593 0.380689 0.131722 -0.283533 0.515746 0.808465
--0.232286 0.366025 0.144341 -0.283533 0.515746 0.808465
--0.184580 0.392251 0.144341 -0.283533 0.515746 0.808465
--0.184580 0.392251 0.144341 -0.232438 0.422805 0.875904
--0.232286 0.366025 0.144341 -0.232438 0.422805 0.875904
--0.222206 0.350140 0.154684 -0.232438 0.422805 0.875904
--0.176569 0.375229 0.154684 -0.232438 0.422805 0.875904
--0.176569 0.375229 0.154684 -0.177648 0.323141 0.929527
--0.222206 0.350140 0.154684 -0.177648 0.323141 0.929527
--0.211510 0.333287 0.162587 -0.177648 0.323141 0.929527
--0.168070 0.357168 0.162587 -0.177648 0.323141 0.929527
--0.168070 0.357168 0.162587 -0.120029 0.218333 0.968465
--0.211510 0.333287 0.162587 -0.120029 0.218333 0.968465
--0.200368 0.315729 0.167926 -0.120029 0.218333 0.968465
--0.159217 0.338353 0.167926 -0.120029 0.218333 0.968465
--0.159217 0.338353 0.167926 -0.060497 0.110045 0.992084
--0.200368 0.315729 0.167926 -0.060497 0.110045 0.992084
--0.188955 0.297746 0.170617 -0.060497 0.110045 0.992084
--0.150148 0.319080 0.170617 -0.060497 0.110045 0.992084
--0.188955 0.297746 0.170617 0.000000 -0.000000 1.000000
--0.177452 0.279619 0.170617 0.000000 -0.000000 1.000000
--0.141007 0.299655 0.170617 0.060498 -0.110045 0.992084
--0.177452 0.279619 0.170617 0.060498 -0.110045 0.992084
--0.166039 0.261636 0.167926 0.060498 -0.110045 0.992084
--0.131938 0.280383 0.167926 0.060498 -0.110045 0.992084
--0.131938 0.280383 0.167926 0.120030 -0.218333 0.968465
--0.166039 0.261636 0.167926 0.120030 -0.218333 0.968465
--0.154897 0.244079 0.162587 0.120030 -0.218333 0.968465
--0.123085 0.261568 0.162587 0.120030 -0.218333 0.968465
--0.123085 0.261568 0.162587 0.177648 -0.323141 0.929527
--0.154897 0.244079 0.162587 0.177648 -0.323141 0.929527
--0.144201 0.227225 0.154684 0.177648 -0.323141 0.929527
--0.114586 0.243507 0.154684 0.177648 -0.323141 0.929527
--0.114586 0.243507 0.154684 0.232439 -0.422804 0.875905
--0.144201 0.227225 0.154684 0.232439 -0.422804 0.875905
--0.134121 0.211341 0.144341 0.232439 -0.422804 0.875905
--0.106575 0.226484 0.144341 0.232439 -0.422804 0.875905
--0.106575 0.226484 0.144341 0.283534 -0.515746 0.808465
--0.134121 0.211341 0.144341 0.283534 -0.515746 0.808465
--0.124814 0.196676 0.131722 0.283534 -0.515746 0.808465
--0.099180 0.210769 0.131722 0.283534 -0.515746 0.808465
--0.099180 0.210769 0.131722 0.330130 -0.600503 0.728293
--0.124814 0.196676 0.131722 0.330130 -0.600503 0.728293
--0.116429 0.183462 0.117026 0.330130 -0.600503 0.728293
--0.092517 0.196608 0.117026 0.330130 -0.600503 0.728293
--0.092517 0.196608 0.117026 0.371496 -0.675748 0.636676
--0.116429 0.183462 0.117026 0.371496 -0.675748 0.636676
--0.109096 0.171908 0.100484 0.371496 -0.675748 0.636676
--0.086690 0.184226 0.100484 0.371496 -0.675748 0.636676
--0.086690 0.184226 0.100484 0.406988 -0.740309 0.535073
--0.109096 0.171908 0.100484 0.406988 -0.740309 0.535073
--0.102932 0.162195 0.082358 0.406988 -0.740309 0.535073
--0.081792 0.173817 0.082358 0.406988 -0.740309 0.535073
--0.081792 0.173817 0.082358 0.436059 -0.793190 0.425091
--0.102932 0.162195 0.082358 0.436059 -0.793190 0.425091
--0.098034 0.154477 0.062932 0.436059 -0.793190 0.425091
--0.077900 0.165546 0.062932 0.436059 -0.793190 0.425091
--0.077900 0.165546 0.062932 0.458261 -0.833574 0.308465
--0.098034 0.154477 0.062932 0.458261 -0.833574 0.308465
--0.094480 0.148876 0.042515 0.458261 -0.833574 0.308465
--0.075076 0.159544 0.042515 0.458261 -0.833574 0.308465
--0.075076 0.159544 0.042515 0.473253 -0.860844 0.187025
--0.094480 0.148876 0.042515 0.473253 -0.860844 0.187025
--0.092324 0.145479 0.021426 0.473253 -0.860844 0.187025
--0.073363 0.155904 0.021426 0.473253 -0.860844 0.187025
--0.073363 0.155904 0.021426 0.480807 -0.874584 0.062667
--0.092324 0.145479 0.021426 0.480807 -0.874584 0.062667
--0.091602 0.144341 0.000000 0.480807 -0.874584 0.062667
--0.072789 0.154684 0.000000 0.480807 -0.874584 0.062667
--0.072789 0.154684 0.000000 0.480807 -0.874584 -0.062667
--0.091602 0.144341 0.000000 0.480807 -0.874584 -0.062667
--0.092324 0.145479 -0.021426 0.480807 -0.874584 -0.062667
--0.073363 0.155904 -0.021426 0.480807 -0.874584 -0.062667
--0.073363 0.155904 -0.021426 0.473253 -0.860844 -0.187025
--0.092324 0.145479 -0.021426 0.473253 -0.860844 -0.187025
--0.094480 0.148876 -0.042515 0.473253 -0.860844 -0.187025
--0.075076 0.159544 -0.042515 0.473253 -0.860844 -0.187025
--0.075076 0.159544 -0.042515 0.458261 -0.833574 -0.308465
--0.094480 0.148876 -0.042515 0.458261 -0.833574 -0.308465
--0.098034 0.154477 -0.062932 0.458261 -0.833574 -0.308465
--0.077900 0.165546 -0.062932 0.458261 -0.833574 -0.308465
--0.077900 0.165546 -0.062932 0.436059 -0.793190 -0.425091
--0.098034 0.154477 -0.062932 0.436059 -0.793190 -0.425091
--0.102932 0.162195 -0.082358 0.436059 -0.793190 -0.425091
--0.081792 0.173817 -0.082358 0.436059 -0.793190 -0.425091
--0.081792 0.173817 -0.082358 0.406988 -0.740309 -0.535073
--0.102932 0.162195 -0.082358 0.406988 -0.740309 -0.535073
--0.109096 0.171908 -0.100484 0.406988 -0.740309 -0.535073
--0.086690 0.184226 -0.100484 0.406988 -0.740309 -0.535073
--0.086690 0.184226 -0.100484 0.371496 -0.675748 -0.636676
--0.109096 0.171908 -0.100484 0.371496 -0.675748 -0.636676
--0.116429 0.183462 -0.117026 0.371496 -0.675748 -0.636676
--0.092517 0.196608 -0.117026 0.371496 -0.675748 -0.636676
--0.092517 0.196608 -0.117026 0.330130 -0.600503 -0.728293
--0.116429 0.183462 -0.117026 0.330130 -0.600503 -0.728293
--0.124814 0.196676 -0.131722 0.330130 -0.600503 -0.728293
--0.099180 0.210769 -0.131722 0.330130 -0.600503 -0.728293
--0.099180 0.210769 -0.131722 0.283534 -0.515746 -0.808465
--0.124814 0.196676 -0.131722 0.283534 -0.515746 -0.808465
--0.134121 0.211341 -0.144341 0.283534 -0.515746 -0.808465
--0.106575 0.226484 -0.144341 0.283534 -0.515746 -0.808465
--0.106575 0.226484 -0.144341 0.232439 -0.422804 -0.875905
--0.134121 0.211341 -0.144341 0.232439 -0.422804 -0.875905
--0.144201 0.227225 -0.154684 0.232439 -0.422804 -0.875905
--0.114586 0.243507 -0.154684 0.232439 -0.422804 -0.875905
--0.114586 0.243507 -0.154684 0.177648 -0.323141 -0.929527
--0.144201 0.227225 -0.154684 0.177648 -0.323141 -0.929527
--0.154897 0.244079 -0.162587 0.177648 -0.323141 -0.929527
--0.123085 0.261568 -0.162587 0.177648 -0.323141 -0.929527
--0.123085 0.261568 -0.162587 0.120030 -0.218333 -0.968465
--0.154897 0.244079 -0.162587 0.120030 -0.218333 -0.968465
--0.166039 0.261636 -0.167926 0.120030 -0.218333 -0.968465
--0.131938 0.280383 -0.167926 0.120030 -0.218333 -0.968465
--0.131938 0.280383 -0.167926 0.060498 -0.110045 -0.992084
--0.166039 0.261636 -0.167926 0.060498 -0.110045 -0.992084
--0.177452 0.279619 -0.170617 0.060498 -0.110045 -0.992084
--0.141007 0.299655 -0.170617 0.060498 -0.110045 -0.992084
--0.177452 0.279619 -0.170617 0.000000 -0.000000 -1.000000
--0.188955 0.297746 -0.170617 0.000000 -0.000000 -1.000000
--0.150148 0.319080 -0.170617 -0.060497 0.110045 -0.992084
--0.188955 0.297746 -0.170617 -0.060497 0.110045 -0.992084
--0.200368 0.315729 -0.167926 -0.060497 0.110045 -0.992084
--0.159217 0.338353 -0.167926 -0.060497 0.110045 -0.992084
--0.159217 0.338353 -0.167926 -0.120029 0.218333 -0.968465
--0.200368 0.315729 -0.167926 -0.120029 0.218333 -0.968465
--0.211510 0.333287 -0.162587 -0.120029 0.218333 -0.968465
--0.168070 0.357168 -0.162587 -0.120029 0.218333 -0.968465
--0.168070 0.357168 -0.162587 -0.177648 0.323141 -0.929527
--0.211510 0.333287 -0.162587 -0.177648 0.323141 -0.929527
--0.222206 0.350140 -0.154684 -0.177648 0.323141 -0.929527
--0.176569 0.375229 -0.154684 -0.177648 0.323141 -0.929527
--0.176569 0.375229 -0.154684 -0.232438 0.422805 -0.875904
--0.222206 0.350140 -0.154684 -0.232438 0.422805 -0.875904
--0.232286 0.366025 -0.144341 -0.232438 0.422805 -0.875904
--0.184580 0.392251 -0.144341 -0.232438 0.422805 -0.875904
--0.184580 0.392251 -0.144341 -0.283533 0.515746 -0.808465
--0.232286 0.366025 -0.144341 -0.283533 0.515746 -0.808465
--0.241593 0.380689 -0.131722 -0.283533 0.515746 -0.808465
--0.191975 0.407967 -0.131722 -0.283533 0.515746 -0.808465
--0.191975 0.407967 -0.131722 -0.330129 0.600503 -0.728293
--0.241593 0.380689 -0.131722 -0.330129 0.600503 -0.728293
--0.249978 0.393903 -0.117026 -0.330129 0.600503 -0.728293
--0.198638 0.422127 -0.117026 -0.330129 0.600503 -0.728293
--0.198638 0.422127 -0.117026 -0.371495 0.675748 -0.636676
--0.249978 0.393903 -0.117026 -0.371495 0.675748 -0.636676
--0.257311 0.405457 -0.100484 -0.371495 0.675748 -0.636676
--0.204465 0.434510 -0.100484 -0.371495 0.675748 -0.636676
--0.204465 0.434510 -0.100484 -0.406988 0.740309 -0.535074
--0.257311 0.405457 -0.100484 -0.406988 0.740309 -0.535074
--0.263475 0.415170 -0.082358 -0.406988 0.740309 -0.535074
--0.209363 0.444918 -0.082358 -0.406988 0.740309 -0.535074
--0.209363 0.444918 -0.082358 -0.436060 0.793190 -0.425090
--0.263475 0.415170 -0.082358 -0.436060 0.793190 -0.425090
--0.268373 0.422888 -0.062932 -0.436060 0.793190 -0.425090
--0.213255 0.453189 -0.062932 -0.436060 0.793190 -0.425090
--0.213255 0.453189 -0.062932 -0.458261 0.833574 -0.308466
--0.268373 0.422888 -0.062932 -0.458261 0.833574 -0.308466
--0.271928 0.428489 -0.042515 -0.458261 0.833574 -0.308466
--0.216079 0.459192 -0.042515 -0.458261 0.833574 -0.308466
--0.216079 0.459192 -0.042515 -0.473253 0.860844 -0.187026
--0.271928 0.428489 -0.042515 -0.473253 0.860844 -0.187026
--0.274083 0.431886 -0.021426 -0.473253 0.860844 -0.187026
--0.217792 0.462832 -0.021426 -0.473253 0.860844 -0.187026
--0.217792 0.462832 -0.021426 -0.480807 0.874584 -0.062665
--0.274083 0.431886 -0.021426 -0.480807 0.874584 -0.062665
--0.274805 0.433024 0.000000 -0.480807 0.874584 -0.062665
--0.218366 0.464052 0.000000 -0.480807 0.874584 -0.062665
--0.274805 0.433024 0.000000 -0.586630 0.807427 0.062665
--0.326911 0.395167 0.000000 -0.586630 0.807427 0.062665
--0.326052 0.394129 0.021426 -0.586630 0.807427 0.062665
--0.274083 0.431886 0.021426 -0.586630 0.807427 0.062665
--0.274083 0.431886 0.021426 -0.577413 0.794742 0.187027
--0.326052 0.394129 0.021426 -0.577413 0.794742 0.187027
--0.323487 0.391029 0.042515 -0.577413 0.794742 0.187027
--0.271928 0.428489 0.042515 -0.577413 0.794742 0.187027
--0.271928 0.428489 0.042515 -0.559122 0.769566 0.308464
--0.323487 0.391029 0.042515 -0.559122 0.769566 0.308464
--0.319259 0.385917 0.062932 -0.559122 0.769566 0.308464
--0.268373 0.422888 0.062932 -0.559122 0.769566 0.308464
--0.268373 0.422888 0.062932 -0.532034 0.732282 0.425091
--0.319259 0.385917 0.062932 -0.532034 0.732282 0.425091
--0.313432 0.378874 0.082358 -0.532034 0.732282 0.425091
--0.263475 0.415170 0.082358 -0.532034 0.732282 0.425091
--0.263475 0.415170 0.082358 -0.496564 0.683462 0.535073
--0.313432 0.378874 0.082358 -0.496564 0.683462 0.535073
--0.306099 0.370010 0.100484 -0.496564 0.683462 0.535073
--0.257311 0.405457 0.100484 -0.496564 0.683462 0.535073
--0.257311 0.405457 0.100484 -0.453259 0.623858 0.636676
--0.306099 0.370010 0.100484 -0.453259 0.623858 0.636676
--0.297376 0.359466 0.117026 -0.453259 0.623858 0.636676
--0.249978 0.393903 0.117026 -0.453259 0.623858 0.636676
--0.249978 0.393903 0.117026 -0.402789 0.554392 0.728293
--0.297376 0.359466 0.117026 -0.402789 0.554392 0.728293
--0.287401 0.347408 0.131722 -0.402789 0.554392 0.728293
--0.241593 0.380689 0.131722 -0.402789 0.554392 0.728293
--0.241593 0.380689 0.131722 -0.345938 0.476143 0.808465
--0.287401 0.347408 0.131722 -0.345938 0.476143 0.808465
--0.276330 0.334025 0.144341 -0.345938 0.476143 0.808465
--0.232286 0.366025 0.144341 -0.345938 0.476143 0.808465
--0.232286 0.366025 0.144341 -0.283597 0.390339 0.875904
--0.276330 0.334025 0.144341 -0.283597 0.390339 0.875904
--0.264338 0.319529 0.154684 -0.283597 0.390339 0.875904
--0.222206 0.350140 0.154684 -0.283597 0.390339 0.875904
--0.222206 0.350140 0.154684 -0.216747 0.298328 0.929527
--0.264338 0.319529 0.154684 -0.216747 0.298328 0.929527
--0.251614 0.304149 0.162587 -0.216747 0.298328 0.929527
--0.211510 0.333287 0.162587 -0.216747 0.298328 0.929527
--0.211510 0.333287 0.162587 -0.146447 0.201567 0.968465
--0.251614 0.304149 0.162587 -0.146447 0.201567 0.968465
--0.238360 0.288127 0.167926 -0.146447 0.201567 0.968465
--0.200368 0.315729 0.167926 -0.146447 0.201567 0.968465
--0.200368 0.315729 0.167926 -0.073813 0.101594 0.992084
--0.238360 0.288127 0.167926 -0.073813 0.101594 0.992084
--0.224783 0.271716 0.170617 -0.073813 0.101594 0.992084
--0.188955 0.297746 0.170617 -0.073813 0.101594 0.992084
--0.224783 0.271716 0.170617 0.000000 -0.000000 1.000000
--0.211098 0.255174 0.170617 0.000000 -0.000000 1.000000
--0.177452 0.279619 0.170617 0.073813 -0.101594 0.992084
--0.211098 0.255174 0.170617 0.073813 -0.101594 0.992084
--0.197522 0.238762 0.167926 0.073813 -0.101594 0.992084
--0.166039 0.261636 0.167926 0.073813 -0.101594 0.992084
--0.166039 0.261636 0.167926 0.146447 -0.201567 0.968465
--0.197522 0.238762 0.167926 0.146447 -0.201567 0.968465
--0.184267 0.222740 0.162587 0.146447 -0.201567 0.968465
--0.154897 0.244079 0.162587 0.146447 -0.201567 0.968465
--0.154897 0.244079 0.162587 0.216748 -0.298328 0.929527
--0.184267 0.222740 0.162587 0.216748 -0.298328 0.929527
--0.171543 0.207360 0.154684 0.216748 -0.298328 0.929527
--0.144201 0.227225 0.154684 0.216748 -0.298328 0.929527
--0.144201 0.227225 0.154684 0.283598 -0.390338 0.875904
--0.171543 0.207360 0.154684 0.283598 -0.390338 0.875904
--0.159551 0.192864 0.144341 0.283598 -0.390338 0.875904
--0.134121 0.211341 0.144341 0.283598 -0.390338 0.875904
--0.134121 0.211341 0.144341 0.345938 -0.476143 0.808465
--0.159551 0.192864 0.144341 0.345938 -0.476143 0.808465
--0.148480 0.179482 0.131722 0.345938 -0.476143 0.808465
--0.124814 0.196676 0.131722 0.345938 -0.476143 0.808465
--0.124814 0.196676 0.131722 0.402789 -0.554392 0.728294
--0.148480 0.179482 0.131722 0.402789 -0.554392 0.728294
--0.138505 0.167423 0.117026 0.402789 -0.554392 0.728294
--0.116429 0.183462 0.117026 0.402789 -0.554392 0.728294
--0.116429 0.183462 0.117026 0.453260 -0.623859 0.636676
--0.138505 0.167423 0.117026 0.453260 -0.623859 0.636676
--0.129782 0.156879 0.100484 0.453260 -0.623859 0.636676
--0.109096 0.171908 0.100484 0.453260 -0.623859 0.636676
--0.109096 0.171908 0.100484 0.496565 -0.683462 0.535073
--0.129782 0.156879 0.100484 0.496565 -0.683462 0.535073
--0.122449 0.148016 0.082358 0.496565 -0.683462 0.535073
--0.102932 0.162195 0.082358 0.496565 -0.683462 0.535073
--0.102932 0.162195 0.082358 0.532034 -0.732282 0.425091
--0.122449 0.148016 0.082358 0.532034 -0.732282 0.425091
--0.116623 0.140972 0.062932 0.532034 -0.732282 0.425091
--0.098034 0.154477 0.062932 0.532034 -0.732282 0.425091
--0.098034 0.154477 0.062932 0.559122 -0.769566 0.308465
--0.116623 0.140972 0.062932 0.559122 -0.769566 0.308465
--0.112394 0.135861 0.042515 0.559122 -0.769566 0.308465
--0.094480 0.148876 0.042515 0.559122 -0.769566 0.308465
--0.094480 0.148876 0.042515 0.577413 -0.794742 0.187025
--0.112394 0.135861 0.042515 0.577413 -0.794742 0.187025
--0.109830 0.132761 0.021426 0.577413 -0.794742 0.187025
--0.092324 0.145479 0.021426 0.577413 -0.794742 0.187025
--0.092324 0.145479 0.021426 0.586630 -0.807427 0.062667
--0.109830 0.132761 0.021426 0.586630 -0.807427 0.062667
--0.108970 0.131722 0.000000 0.586630 -0.807427 0.062667
--0.091602 0.144341 0.000000 0.586630 -0.807427 0.062667
--0.091602 0.144341 0.000000 0.586630 -0.807427 -0.062667
--0.108970 0.131722 0.000000 0.586630 -0.807427 -0.062667
--0.109830 0.132761 -0.021426 0.586630 -0.807427 -0.062667
--0.092324 0.145479 -0.021426 0.586630 -0.807427 -0.062667
--0.092324 0.145479 -0.021426 0.577413 -0.794742 -0.187025
--0.109830 0.132761 -0.021426 0.577413 -0.794742 -0.187025
--0.112394 0.135861 -0.042515 0.577413 -0.794742 -0.187025
--0.094480 0.148876 -0.042515 0.577413 -0.794742 -0.187025
--0.094480 0.148876 -0.042515 0.559122 -0.769566 -0.308465
--0.112394 0.135861 -0.042515 0.559122 -0.769566 -0.308465
--0.116623 0.140972 -0.062932 0.559122 -0.769566 -0.308465
--0.098034 0.154477 -0.062932 0.559122 -0.769566 -0.308465
--0.098034 0.154477 -0.062932 0.532034 -0.732282 -0.425091
--0.116623 0.140972 -0.062932 0.532034 -0.732282 -0.425091
--0.122449 0.148016 -0.082358 0.532034 -0.732282 -0.425091
--0.102932 0.162195 -0.082358 0.532034 -0.732282 -0.425091
--0.102932 0.162195 -0.082358 0.496565 -0.683462 -0.535073
--0.122449 0.148016 -0.082358 0.496565 -0.683462 -0.535073
--0.129782 0.156879 -0.100484 0.496565 -0.683462 -0.535073
--0.109096 0.171908 -0.100484 0.496565 -0.683462 -0.535073
--0.109096 0.171908 -0.100484 0.453260 -0.623859 -0.636676
--0.129782 0.156879 -0.100484 0.453260 -0.623859 -0.636676
--0.138505 0.167423 -0.117026 0.453260 -0.623859 -0.636676
--0.116429 0.183462 -0.117026 0.453260 -0.623859 -0.636676
--0.116429 0.183462 -0.117026 0.402789 -0.554392 -0.728294
--0.138505 0.167423 -0.117026 0.402789 -0.554392 -0.728294
--0.148480 0.179482 -0.131722 0.402789 -0.554392 -0.728294
--0.124814 0.196676 -0.131722 0.402789 -0.554392 -0.728294
--0.124814 0.196676 -0.131722 0.345938 -0.476143 -0.808465
--0.148480 0.179482 -0.131722 0.345938 -0.476143 -0.808465
--0.159551 0.192864 -0.144341 0.345938 -0.476143 -0.808465
--0.134121 0.211341 -0.144341 0.345938 -0.476143 -0.808465
--0.134121 0.211341 -0.144341 0.283598 -0.390338 -0.875904
--0.159551 0.192864 -0.144341 0.283598 -0.390338 -0.875904
--0.171543 0.207360 -0.154684 0.283598 -0.390338 -0.875904
--0.144201 0.227225 -0.154684 0.283598 -0.390338 -0.875904
--0.144201 0.227225 -0.154684 0.216748 -0.298328 -0.929527
--0.171543 0.207360 -0.154684 0.216748 -0.298328 -0.929527
--0.184267 0.222740 -0.162587 0.216748 -0.298328 -0.929527
--0.154897 0.244079 -0.162587 0.216748 -0.298328 -0.929527
--0.154897 0.244079 -0.162587 0.146447 -0.201567 -0.968465
--0.184267 0.222740 -0.162587 0.146447 -0.201567 -0.968465
--0.197522 0.238762 -0.167926 0.146447 -0.201567 -0.968465
--0.166039 0.261636 -0.167926 0.146447 -0.201567 -0.968465
--0.166039 0.261636 -0.167926 0.073813 -0.101594 -0.992084
--0.197522 0.238762 -0.167926 0.073813 -0.101594 -0.992084
--0.211098 0.255174 -0.170617 0.073813 -0.101594 -0.992084
--0.177452 0.279619 -0.170617 0.073813 -0.101594 -0.992084
--0.211098 0.255174 -0.170617 0.000000 -0.000000 -1.000000
--0.224783 0.271716 -0.170617 0.000000 -0.000000 -1.000000
--0.188955 0.297746 -0.170617 -0.073813 0.101594 -0.992084
--0.224783 0.271716 -0.170617 -0.073813 0.101594 -0.992084
--0.238360 0.288127 -0.167926 -0.073813 0.101594 -0.992084
--0.200368 0.315729 -0.167926 -0.073813 0.101594 -0.992084
--0.200368 0.315729 -0.167926 -0.146447 0.201567 -0.968465
--0.238360 0.288127 -0.167926 -0.146447 0.201567 -0.968465
--0.251614 0.304149 -0.162587 -0.146447 0.201567 -0.968465
--0.211510 0.333287 -0.162587 -0.146447 0.201567 -0.968465
--0.211510 0.333287 -0.162587 -0.216747 0.298328 -0.929527
--0.251614 0.304149 -0.162587 -0.216747 0.298328 -0.929527
--0.264338 0.319529 -0.154684 -0.216747 0.298328 -0.929527
--0.222206 0.350140 -0.154684 -0.216747 0.298328 -0.929527
--0.222206 0.350140 -0.154684 -0.283597 0.390339 -0.875904
--0.264338 0.319529 -0.154684 -0.283597 0.390339 -0.875904
--0.276330 0.334025 -0.144341 -0.283597 0.390339 -0.875904
--0.232286 0.366025 -0.144341 -0.283597 0.390339 -0.875904
--0.232286 0.366025 -0.144341 -0.345938 0.476143 -0.808465
--0.276330 0.334025 -0.144341 -0.345938 0.476143 -0.808465
--0.287401 0.347408 -0.131722 -0.345938 0.476143 -0.808465
--0.241593 0.380689 -0.131722 -0.345938 0.476143 -0.808465
--0.241593 0.380689 -0.131722 -0.402789 0.554392 -0.728293
--0.287401 0.347408 -0.131722 -0.402789 0.554392 -0.728293
--0.297376 0.359466 -0.117026 -0.402789 0.554392 -0.728293
--0.249978 0.393903 -0.117026 -0.402789 0.554392 -0.728293
--0.249978 0.393903 -0.117026 -0.453259 0.623858 -0.636676
--0.297376 0.359466 -0.117026 -0.453259 0.623858 -0.636676
--0.306099 0.370010 -0.100484 -0.453259 0.623858 -0.636676
--0.257311 0.405457 -0.100484 -0.453259 0.623858 -0.636676
--0.257311 0.405457 -0.100484 -0.496564 0.683462 -0.535073
--0.306099 0.370010 -0.100484 -0.496564 0.683462 -0.535073
--0.313432 0.378874 -0.082358 -0.496564 0.683462 -0.535073
--0.263475 0.415170 -0.082358 -0.496564 0.683462 -0.535073
--0.263475 0.415170 -0.082358 -0.532034 0.732282 -0.425091
--0.313432 0.378874 -0.082358 -0.532034 0.732282 -0.425091
--0.319259 0.385917 -0.062932 -0.532034 0.732282 -0.425091
--0.268373 0.422888 -0.062932 -0.532034 0.732282 -0.425091
--0.268373 0.422888 -0.062932 -0.559122 0.769566 -0.308464
--0.319259 0.385917 -0.062932 -0.559122 0.769566 -0.308464
--0.323487 0.391029 -0.042515 -0.559122 0.769566 -0.308464
--0.271928 0.428489 -0.042515 -0.559122 0.769566 -0.308464
--0.271928 0.428489 -0.042515 -0.577413 0.794742 -0.187027
--0.323487 0.391029 -0.042515 -0.577413 0.794742 -0.187027
--0.326052 0.394129 -0.021426 -0.577413 0.794742 -0.187027
--0.274083 0.431886 -0.021426 -0.577413 0.794742 -0.187027
--0.274083 0.431886 -0.021426 -0.586630 0.807427 -0.062665
--0.326052 0.394129 -0.021426 -0.586630 0.807427 -0.062665
--0.326911 0.395167 0.000000 -0.586630 0.807427 -0.062665
--0.274805 0.433024 0.000000 -0.586630 0.807427 -0.062665
--0.326911 0.395167 0.000000 -0.683202 0.727535 0.062664
--0.373861 0.351078 0.000000 -0.683202 0.727535 0.062664
--0.372878 0.350156 0.021426 -0.683202 0.727535 0.062664
--0.326052 0.394129 0.021426 -0.683202 0.727535 0.062664
--0.326052 0.394129 0.021426 -0.672469 0.716105 0.187026
--0.372878 0.350156 0.021426 -0.672469 0.716105 0.187026
--0.369945 0.347402 0.042515 -0.672469 0.716105 0.187026
--0.323487 0.391029 0.042515 -0.672469 0.716105 0.187026
--0.323487 0.391029 0.042515 -0.651166 0.693421 0.308465
--0.369945 0.347402 0.042515 -0.651166 0.693421 0.308465
--0.365109 0.342860 0.062932 -0.651166 0.693421 0.308465
--0.319259 0.385917 0.062932 -0.651166 0.693421 0.308465
--0.319259 0.385917 0.062932 -0.619619 0.659826 0.425090
--0.365109 0.342860 0.062932 -0.619619 0.659826 0.425090
--0.358446 0.336603 0.082358 -0.619619 0.659826 0.425090
--0.313432 0.378874 0.082358 -0.619619 0.659826 0.425090
--0.313432 0.378874 0.082358 -0.578309 0.615836 0.535074
--0.358446 0.336603 0.082358 -0.578309 0.615836 0.535074
--0.350060 0.328728 0.100484 -0.578309 0.615836 0.535074
--0.306099 0.370010 0.100484 -0.578309 0.615836 0.535074
--0.306099 0.370010 0.100484 -0.527876 0.562130 0.636676
--0.350060 0.328728 0.100484 -0.527876 0.562130 0.636676
--0.340085 0.319361 0.117026 -0.527876 0.562130 0.636676
--0.297376 0.359466 0.117026 -0.527876 0.562130 0.636676
--0.297376 0.359466 0.117026 -0.469097 0.499537 0.728293
--0.340085 0.319361 0.117026 -0.469097 0.499537 0.728293
--0.328676 0.308647 0.131722 -0.469097 0.499537 0.728293
--0.287401 0.347408 0.131722 -0.469097 0.499537 0.728293
--0.287401 0.347408 0.131722 -0.402887 0.429030 0.808465
--0.328676 0.308647 0.131722 -0.402887 0.429030 0.808465
--0.316015 0.296758 0.144341 -0.402887 0.429030 0.808465
--0.276330 0.334025 0.144341 -0.402887 0.429030 0.808465
--0.276330 0.334025 0.144341 -0.330285 0.351717 0.875904
--0.316015 0.296758 0.144341 -0.330285 0.351717 0.875904
--0.302301 0.283880 0.154684 -0.330285 0.351717 0.875904
--0.264338 0.319529 0.154684 -0.330285 0.351717 0.875904
--0.264338 0.319529 0.154684 -0.252429 0.268809 0.929527
--0.302301 0.283880 0.154684 -0.252429 0.268809 0.929527
--0.287750 0.270215 0.162587 -0.252429 0.268809 0.929527
--0.251614 0.304149 0.162587 -0.252429 0.268809 0.929527
--0.251614 0.304149 0.162587 -0.170555 0.181623 0.968465
--0.287750 0.270215 0.162587 -0.170555 0.181623 0.968465
--0.272592 0.255981 0.167926 -0.170555 0.181623 0.968465
--0.238360 0.288127 0.167926 -0.170555 0.181623 0.968465
--0.238360 0.288127 0.167926 -0.085964 0.091542 0.992084
--0.272592 0.255981 0.167926 -0.085964 0.091542 0.992084
--0.257065 0.241400 0.170617 -0.085964 0.091542 0.992084
--0.224783 0.271716 0.170617 -0.085964 0.091542 0.992084
--0.257065 0.241400 0.170617 0.000000 -0.000000 1.000000
--0.241415 0.226704 0.170617 0.000000 -0.000000 1.000000
--0.211098 0.255174 0.170617 0.085964 -0.091542 0.992084
--0.241415 0.226704 0.170617 0.085964 -0.091542 0.992084
--0.225889 0.212124 0.167926 0.085964 -0.091542 0.992084
--0.197522 0.238762 0.167926 0.085964 -0.091542 0.992084
--0.197522 0.238762 0.167926 0.170555 -0.181623 0.968465
--0.225889 0.212124 0.167926 0.170555 -0.181623 0.968465
--0.210731 0.197889 0.162587 0.170555 -0.181623 0.968465
--0.184267 0.222740 0.162587 0.170555 -0.181623 0.968465
--0.184267 0.222740 0.162587 0.252429 -0.268810 0.929527
--0.210731 0.197889 0.162587 0.252429 -0.268810 0.929527
--0.196180 0.184225 0.154684 0.252429 -0.268810 0.929527
--0.171543 0.207360 0.154684 0.252429 -0.268810 0.929527
--0.171543 0.207360 0.154684 0.330283 -0.351716 0.875905
--0.196180 0.184225 0.154684 0.330283 -0.351716 0.875905
--0.182466 0.171346 0.144341 0.330283 -0.351716 0.875905
--0.159551 0.192864 0.144341 0.330283 -0.351716 0.875905
--0.159551 0.192864 0.144341 0.402887 -0.429031 0.808464
--0.182466 0.171346 0.144341 0.402887 -0.429031 0.808464
--0.169805 0.159457 0.131722 0.402887 -0.429031 0.808464
--0.148480 0.179482 0.131722 0.402887 -0.429031 0.808464
--0.148480 0.179482 0.131722 0.469096 -0.499537 0.728294
--0.169805 0.159457 0.131722 0.469096 -0.499537 0.728294
--0.158396 0.148744 0.117026 0.469096 -0.499537 0.728294
--0.138505 0.167423 0.117026 0.469096 -0.499537 0.728294
--0.138505 0.167423 0.117026 0.527876 -0.562131 0.636676
--0.158396 0.148744 0.117026 0.527876 -0.562131 0.636676
--0.148421 0.139376 0.100484 0.527876 -0.562131 0.636676
--0.129782 0.156879 0.100484 0.527876 -0.562131 0.636676
--0.129782 0.156879 0.100484 0.578310 -0.615837 0.535072
--0.148421 0.139376 0.100484 0.578310 -0.615837 0.535072
--0.140035 0.131501 0.082358 0.578310 -0.615837 0.535072
--0.122449 0.148016 0.082358 0.578310 -0.615837 0.535072
--0.122449 0.148016 0.082358 0.619618 -0.659827 0.425091
--0.140035 0.131501 0.082358 0.619618 -0.659827 0.425091
--0.133372 0.125244 0.062932 0.619618 -0.659827 0.425091
--0.116623 0.140972 0.062932 0.619618 -0.659827 0.425091
--0.116623 0.140972 0.062932 0.651166 -0.693421 0.308466
--0.133372 0.125244 0.062932 0.651166 -0.693421 0.308466
--0.128535 0.120703 0.042515 0.651166 -0.693421 0.308466
--0.112394 0.135861 0.042515 0.651166 -0.693421 0.308466
--0.112394 0.135861 0.042515 0.672469 -0.716106 0.187025
--0.128535 0.120703 0.042515 0.672469 -0.716106 0.187025
--0.125603 0.117949 0.021426 0.672469 -0.716106 0.187025
--0.109830 0.132761 0.021426 0.672469 -0.716106 0.187025
--0.109830 0.132761 0.021426 0.683202 -0.727536 0.062667
--0.125603 0.117949 0.021426 0.683202 -0.727536 0.062667
--0.124620 0.117026 0.000000 0.683202 -0.727536 0.062667
--0.108970 0.131722 0.000000 0.683202 -0.727536 0.062667
--0.108970 0.131722 0.000000 0.683202 -0.727536 -0.062667
--0.124620 0.117026 0.000000 0.683202 -0.727536 -0.062667
--0.125603 0.117949 -0.021426 0.683202 -0.727536 -0.062667
--0.109830 0.132761 -0.021426 0.683202 -0.727536 -0.062667
--0.109830 0.132761 -0.021426 0.672469 -0.716106 -0.187025
--0.125603 0.117949 -0.021426 0.672469 -0.716106 -0.187025
--0.128535 0.120703 -0.042515 0.672469 -0.716106 -0.187025
--0.112394 0.135861 -0.042515 0.672469 -0.716106 -0.187025
--0.112394 0.135861 -0.042515 0.651166 -0.693421 -0.308466
--0.128535 0.120703 -0.042515 0.651166 -0.693421 -0.308466
--0.133372 0.125244 -0.062932 0.651166 -0.693421 -0.308466
--0.116623 0.140972 -0.062932 0.651166 -0.693421 -0.308466
--0.116623 0.140972 -0.062932 0.619618 -0.659827 -0.425091
--0.133372 0.125244 -0.062932 0.619618 -0.659827 -0.425091
--0.140035 0.131501 -0.082358 0.619618 -0.659827 -0.425091
--0.122449 0.148016 -0.082358 0.619618 -0.659827 -0.425091
--0.122449 0.148016 -0.082358 0.578310 -0.615837 -0.535072
--0.140035 0.131501 -0.082358 0.578310 -0.615837 -0.535072
--0.148421 0.139376 -0.100484 0.578310 -0.615837 -0.535072
--0.129782 0.156879 -0.100484 0.578310 -0.615837 -0.535072
--0.129782 0.156879 -0.100484 0.527876 -0.562131 -0.636676
--0.148421 0.139376 -0.100484 0.527876 -0.562131 -0.636676
--0.158396 0.148744 -0.117026 0.527876 -0.562131 -0.636676
--0.138505 0.167423 -0.117026 0.527876 -0.562131 -0.636676
--0.138505 0.167423 -0.117026 0.469096 -0.499537 -0.728294
--0.158396 0.148744 -0.117026 0.469096 -0.499537 -0.728294
--0.169805 0.159457 -0.131722 0.469096 -0.499537 -0.728294
--0.148480 0.179482 -0.131722 0.469096 -0.499537 -0.728294
--0.148480 0.179482 -0.131722 0.402887 -0.429031 -0.808464
--0.169805 0.159457 -0.131722 0.402887 -0.429031 -0.808464
--0.182466 0.171346 -0.144341 0.402887 -0.429031 -0.808464
--0.159551 0.192864 -0.144341 0.402887 -0.429031 -0.808464
--0.159551 0.192864 -0.144341 0.330283 -0.351716 -0.875905
--0.182466 0.171346 -0.144341 0.330283 -0.351716 -0.875905
--0.196180 0.184225 -0.154684 0.330283 -0.351716 -0.875905
--0.171543 0.207360 -0.154684 0.330283 -0.351716 -0.875905
--0.171543 0.207360 -0.154684 0.252429 -0.268810 -0.929527
--0.196180 0.184225 -0.154684 0.252429 -0.268810 -0.929527
--0.210731 0.197889 -0.162587 0.252429 -0.268810 -0.929527
--0.184267 0.222740 -0.162587 0.252429 -0.268810 -0.929527
--0.184267 0.222740 -0.162587 0.170555 -0.181623 -0.968465
--0.210731 0.197889 -0.162587 0.170555 -0.181623 -0.968465
--0.225889 0.212124 -0.167926 0.170555 -0.181623 -0.968465
--0.197522 0.238762 -0.167926 0.170555 -0.181623 -0.968465
--0.197522 0.238762 -0.167926 0.085964 -0.091542 -0.992084
--0.225889 0.212124 -0.167926 0.085964 -0.091542 -0.992084
--0.241415 0.226704 -0.170617 0.085964 -0.091542 -0.992084
--0.211098 0.255174 -0.170617 0.085964 -0.091542 -0.992084
--0.241415 0.226704 -0.170617 0.000000 -0.000000 -1.000000
--0.257065 0.241400 -0.170617 0.000000 -0.000000 -1.000000
--0.224783 0.271716 -0.170617 -0.085964 0.091542 -0.992084
--0.257065 0.241400 -0.170617 -0.085964 0.091542 -0.992084
--0.272592 0.255981 -0.167926 -0.085964 0.091542 -0.992084
--0.238360 0.288127 -0.167926 -0.085964 0.091542 -0.992084
--0.238360 0.288127 -0.167926 -0.170555 0.181623 -0.968465
--0.272592 0.255981 -0.167926 -0.170555 0.181623 -0.968465
--0.287750 0.270215 -0.162587 -0.170555 0.181623 -0.968465
--0.251614 0.304149 -0.162587 -0.170555 0.181623 -0.968465
--0.251614 0.304149 -0.162587 -0.252429 0.268809 -0.929527
--0.287750 0.270215 -0.162587 -0.252429 0.268809 -0.929527
--0.302301 0.283880 -0.154684 -0.252429 0.268809 -0.929527
--0.264338 0.319529 -0.154684 -0.252429 0.268809 -0.929527
--0.264338 0.319529 -0.154684 -0.330285 0.351717 -0.875904
--0.302301 0.283880 -0.154684 -0.330285 0.351717 -0.875904
--0.316015 0.296758 -0.144341 -0.330285 0.351717 -0.875904
--0.276330 0.334025 -0.144341 -0.330285 0.351717 -0.875904
--0.276330 0.334025 -0.144341 -0.402887 0.429030 -0.808465
--0.316015 0.296758 -0.144341 -0.402887 0.429030 -0.808465
--0.328676 0.308647 -0.131722 -0.402887 0.429030 -0.808465
--0.287401 0.347408 -0.131722 -0.402887 0.429030 -0.808465
--0.287401 0.347408 -0.131722 -0.469097 0.499537 -0.728293
--0.328676 0.308647 -0.131722 -0.469097 0.499537 -0.728293
--0.340085 0.319361 -0.117026 -0.469097 0.499537 -0.728293
--0.297376 0.359466 -0.117026 -0.469097 0.499537 -0.728293
--0.297376 0.359466 -0.117026 -0.527876 0.562130 -0.636676
--0.340085 0.319361 -0.117026 -0.527876 0.562130 -0.636676
--0.350060 0.328728 -0.100484 -0.527876 0.562130 -0.636676
--0.306099 0.370010 -0.100484 -0.527876 0.562130 -0.636676
--0.306099 0.370010 -0.100484 -0.578309 0.615836 -0.535074
--0.350060 0.328728 -0.100484 -0.578309 0.615836 -0.535074
--0.358446 0.336603 -0.082358 -0.578309 0.615836 -0.535074
--0.313432 0.378874 -0.082358 -0.578309 0.615836 -0.535074
--0.313432 0.378874 -0.082358 -0.619619 0.659826 -0.425090
--0.358446 0.336603 -0.082358 -0.619619 0.659826 -0.425090
--0.365109 0.342860 -0.062932 -0.619619 0.659826 -0.425090
--0.319259 0.385917 -0.062932 -0.619619 0.659826 -0.425090
--0.319259 0.385917 -0.062932 -0.651166 0.693421 -0.308465
--0.365109 0.342860 -0.062932 -0.651166 0.693421 -0.308465
--0.369945 0.347402 -0.042515 -0.651166 0.693421 -0.308465
--0.323487 0.391029 -0.042515 -0.651166 0.693421 -0.308465
--0.323487 0.391029 -0.042515 -0.672469 0.716105 -0.187026
--0.369945 0.347402 -0.042515 -0.672469 0.716105 -0.187026
--0.372878 0.350156 -0.021426 -0.672469 0.716105 -0.187026
--0.326052 0.394129 -0.021426 -0.672469 0.716105 -0.187026
--0.326052 0.394129 -0.021426 -0.683202 0.727535 -0.062664
--0.372878 0.350156 -0.021426 -0.683202 0.727535 -0.062664
--0.373861 0.351078 0.000000 -0.683202 0.727535 -0.062664
--0.326911 0.395167 0.000000 -0.683202 0.727535 -0.062664
--0.373861 0.351078 0.000000 -0.768999 0.636171 0.062667
--0.414914 0.301453 0.000000 -0.768999 0.636171 0.062667
--0.413824 0.300660 0.021426 -0.768999 0.636171 0.062667
--0.372878 0.350156 0.021426 -0.768999 0.636171 0.062667
--0.372878 0.350156 0.021426 -0.756918 0.626176 0.187025
--0.413824 0.300660 0.021426 -0.756918 0.626176 0.187025
--0.410569 0.298296 0.042515 -0.756918 0.626176 0.187025
--0.369945 0.347402 0.042515 -0.756918 0.626176 0.187025
--0.369945 0.347402 0.042515 -0.732940 0.606340 0.308464
--0.410569 0.298296 0.042515 -0.732940 0.606340 0.308464
--0.405202 0.294396 0.062932 -0.732940 0.606340 0.308464
--0.365109 0.342860 0.062932 -0.732940 0.606340 0.308464
--0.365109 0.342860 0.062932 -0.697431 0.576964 0.425090
--0.405202 0.294396 0.062932 -0.697431 0.576964 0.425090
--0.397807 0.289024 0.082358 -0.697431 0.576964 0.425090
--0.358446 0.336603 0.082358 -0.697431 0.576964 0.425090
--0.358446 0.336603 0.082358 -0.650934 0.538499 0.535074
--0.397807 0.289024 0.082358 -0.650934 0.538499 0.535074
--0.388501 0.282262 0.100484 -0.650934 0.538499 0.535074
--0.350060 0.328728 0.100484 -0.650934 0.538499 0.535074
--0.350060 0.328728 0.100484 -0.594167 0.491537 0.636677
--0.388501 0.282262 0.100484 -0.594167 0.491537 0.636677
--0.377429 0.274218 0.117026 -0.594167 0.491537 0.636677
--0.340085 0.319361 0.117026 -0.594167 0.491537 0.636677
--0.340085 0.319361 0.117026 -0.528007 0.436805 0.728293
--0.377429 0.274218 0.117026 -0.528007 0.436805 0.728293
--0.364768 0.265020 0.131722 -0.528007 0.436805 0.728293
--0.328676 0.308647 0.131722 -0.528007 0.436805 0.728293
--0.328676 0.308647 0.131722 -0.453481 0.375152 0.808465
--0.364768 0.265020 0.131722 -0.453481 0.375152 0.808465
--0.350717 0.254811 0.144341 -0.453481 0.375152 0.808465
--0.316015 0.296758 0.144341 -0.453481 0.375152 0.808465
--0.316015 0.296758 0.144341 -0.371762 0.307547 0.875904
--0.350717 0.254811 0.144341 -0.371762 0.307547 0.875904
--0.335497 0.243753 0.154684 -0.371762 0.307547 0.875904
--0.302301 0.283880 0.154684 -0.371762 0.307547 0.875904
--0.302301 0.283880 0.154684 -0.284130 0.235052 0.929527
--0.335497 0.243753 0.154684 -0.284130 0.235052 0.929527
--0.319348 0.232020 0.162587 -0.284130 0.235052 0.929527
--0.287750 0.270215 0.162587 -0.284130 0.235052 0.929527
--0.287750 0.270215 0.162587 -0.191974 0.158814 0.968465
--0.319348 0.232020 0.162587 -0.191974 0.158814 0.968465
--0.302525 0.219797 0.167926 -0.191974 0.158814 0.968465
--0.272592 0.255981 0.167926 -0.191974 0.158814 0.968465
--0.272592 0.255981 0.167926 -0.096759 0.080046 0.992084
--0.302525 0.219797 0.167926 -0.096759 0.080046 0.992084
--0.285294 0.207278 0.170617 -0.096759 0.080046 0.992084
--0.257065 0.241400 0.170617 -0.096759 0.080046 0.992084
--0.285294 0.207278 0.170617 -0.000000 -0.000000 1.000000
--0.267925 0.194659 0.170617 -0.000000 -0.000000 1.000000
--0.241415 0.226704 0.170617 0.096759 -0.080046 0.992084
--0.267925 0.194659 0.170617 0.096759 -0.080046 0.992084
--0.250694 0.182140 0.167926 0.096759 -0.080046 0.992084
--0.225889 0.212124 0.167926 0.096759 -0.080046 0.992084
--0.225889 0.212124 0.167926 0.191974 -0.158815 0.968465
--0.250694 0.182140 0.167926 0.191974 -0.158815 0.968465
--0.233871 0.169917 0.162587 0.191974 -0.158815 0.968465
--0.210731 0.197889 0.162587 0.191974 -0.158815 0.968465
--0.210731 0.197889 0.162587 0.284130 -0.235052 0.929527
--0.233871 0.169917 0.162587 0.284130 -0.235052 0.929527
--0.217722 0.158184 0.154684 0.284130 -0.235052 0.929527
--0.196180 0.184225 0.154684 0.284130 -0.235052 0.929527
--0.196180 0.184225 0.154684 0.371761 -0.307547 0.875905
--0.217722 0.158184 0.154684 0.371761 -0.307547 0.875905
--0.202502 0.147126 0.144341 0.371761 -0.307547 0.875905
--0.182466 0.171346 0.144341 0.371761 -0.307547 0.875905
--0.182466 0.171346 0.144341 0.453482 -0.375153 0.808464
--0.202502 0.147126 0.144341 0.453482 -0.375153 0.808464
--0.188451 0.136917 0.131722 0.453482 -0.375153 0.808464
--0.169805 0.159457 0.131722 0.453482 -0.375153 0.808464
--0.169805 0.159457 0.131722 0.528006 -0.436804 0.728293
--0.188451 0.136917 0.131722 0.528006 -0.436804 0.728293
--0.175790 0.127719 0.117026 0.528006 -0.436804 0.728293
--0.158396 0.148744 0.117026 0.528006 -0.436804 0.728293
--0.158396 0.148744 0.117026 0.594167 -0.491537 0.636677
--0.175790 0.127719 0.117026 0.594167 -0.491537 0.636677
--0.164719 0.119675 0.100484 0.594167 -0.491537 0.636677
--0.148421 0.139376 0.100484 0.594167 -0.491537 0.636677
--0.148421 0.139376 0.100484 0.650935 -0.538499 0.535072
--0.164719 0.119675 0.100484 0.650935 -0.538499 0.535072
--0.155412 0.112913 0.082358 0.650935 -0.538499 0.535072
--0.140035 0.131501 0.082358 0.650935 -0.538499 0.535072
--0.140035 0.131501 0.082358 0.697431 -0.576964 0.425091
--0.155412 0.112913 0.082358 0.697431 -0.576964 0.425091
--0.148017 0.107541 0.062932 0.697431 -0.576964 0.425091
--0.133372 0.125244 0.062932 0.697431 -0.576964 0.425091
--0.133372 0.125244 0.062932 0.732940 -0.606339 0.308466
--0.148017 0.107541 0.062932 0.732940 -0.606339 0.308466
--0.142650 0.103641 0.042515 0.732940 -0.606339 0.308466
--0.128535 0.120703 0.042515 0.732940 -0.606339 0.308466
--0.128535 0.120703 0.042515 0.756918 -0.626176 0.187024
--0.142650 0.103641 0.042515 0.756918 -0.626176 0.187024
--0.139395 0.101277 0.021426 0.756918 -0.626176 0.187024
--0.125603 0.117949 0.021426 0.756918 -0.626176 0.187024
--0.125603 0.117949 0.021426 0.768999 -0.636171 0.062667
--0.139395 0.101277 0.021426 0.768999 -0.636171 0.062667
--0.138305 0.100484 0.000000 0.768999 -0.636171 0.062667
--0.124620 0.117026 0.000000 0.768999 -0.636171 0.062667
--0.124620 0.117026 0.000000 0.768999 -0.636171 -0.062667
--0.138305 0.100484 0.000000 0.768999 -0.636171 -0.062667
--0.139395 0.101277 -0.021426 0.768999 -0.636171 -0.062667
--0.125603 0.117949 -0.021426 0.768999 -0.636171 -0.062667
--0.125603 0.117949 -0.021426 0.756918 -0.626176 -0.187024
--0.139395 0.101277 -0.021426 0.756918 -0.626176 -0.187024
--0.142650 0.103641 -0.042515 0.756918 -0.626176 -0.187024
--0.128535 0.120703 -0.042515 0.756918 -0.626176 -0.187024
--0.128535 0.120703 -0.042515 0.732940 -0.606339 -0.308466
--0.142650 0.103641 -0.042515 0.732940 -0.606339 -0.308466
--0.148017 0.107541 -0.062932 0.732940 -0.606339 -0.308466
--0.133372 0.125244 -0.062932 0.732940 -0.606339 -0.308466
--0.133372 0.125244 -0.062932 0.697431 -0.576964 -0.425091
--0.148017 0.107541 -0.062932 0.697431 -0.576964 -0.425091
--0.155412 0.112913 -0.082358 0.697431 -0.576964 -0.425091
--0.140035 0.131501 -0.082358 0.697431 -0.576964 -0.425091
--0.140035 0.131501 -0.082358 0.650935 -0.538499 -0.535072
--0.155412 0.112913 -0.082358 0.650935 -0.538499 -0.535072
--0.164719 0.119675 -0.100484 0.650935 -0.538499 -0.535072
--0.148421 0.139376 -0.100484 0.650935 -0.538499 -0.535072
--0.148421 0.139376 -0.100484 0.594167 -0.491537 -0.636677
--0.164719 0.119675 -0.100484 0.594167 -0.491537 -0.636677
--0.175790 0.127719 -0.117026 0.594167 -0.491537 -0.636677
--0.158396 0.148744 -0.117026 0.594167 -0.491537 -0.636677
--0.158396 0.148744 -0.117026 0.528006 -0.436804 -0.728293
--0.175790 0.127719 -0.117026 0.528006 -0.436804 -0.728293
--0.188451 0.136917 -0.131722 0.528006 -0.436804 -0.728293
--0.169805 0.159457 -0.131722 0.528006 -0.436804 -0.728293
--0.169805 0.159457 -0.131722 0.453482 -0.375153 -0.808464
--0.188451 0.136917 -0.131722 0.453482 -0.375153 -0.808464
--0.202502 0.147126 -0.144341 0.453482 -0.375153 -0.808464
--0.182466 0.171346 -0.144341 0.453482 -0.375153 -0.808464
--0.182466 0.171346 -0.144341 0.371761 -0.307547 -0.875905
--0.202502 0.147126 -0.144341 0.371761 -0.307547 -0.875905
--0.217722 0.158184 -0.154684 0.371761 -0.307547 -0.875905
--0.196180 0.184225 -0.154684 0.371761 -0.307547 -0.875905
--0.196180 0.184225 -0.154684 0.284130 -0.235052 -0.929527
--0.217722 0.158184 -0.154684 0.284130 -0.235052 -0.929527
--0.233871 0.169917 -0.162587 0.284130 -0.235052 -0.929527
--0.210731 0.197889 -0.162587 0.284130 -0.235052 -0.929527
--0.210731 0.197889 -0.162587 0.191974 -0.158815 -0.968465
--0.233871 0.169917 -0.162587 0.191974 -0.158815 -0.968465
--0.250694 0.182140 -0.167926 0.191974 -0.158815 -0.968465
--0.225889 0.212124 -0.167926 0.191974 -0.158815 -0.968465
--0.225889 0.212124 -0.167926 0.096759 -0.080046 -0.992084
--0.250694 0.182140 -0.167926 0.096759 -0.080046 -0.992084
--0.267925 0.194659 -0.170617 0.096759 -0.080046 -0.992084
--0.241415 0.226704 -0.170617 0.096759 -0.080046 -0.992084
--0.267925 0.194659 -0.170617 -0.000000 -0.000000 -1.000000
--0.285294 0.207278 -0.170617 -0.000000 -0.000000 -1.000000
--0.257065 0.241400 -0.170617 -0.096759 0.080046 -0.992084
--0.285294 0.207278 -0.170617 -0.096759 0.080046 -0.992084
--0.302525 0.219797 -0.167926 -0.096759 0.080046 -0.992084
--0.272592 0.255981 -0.167926 -0.096759 0.080046 -0.992084
--0.272592 0.255981 -0.167926 -0.191974 0.158814 -0.968465
--0.302525 0.219797 -0.167926 -0.191974 0.158814 -0.968465
--0.319348 0.232020 -0.162587 -0.191974 0.158814 -0.968465
--0.287750 0.270215 -0.162587 -0.191974 0.158814 -0.968465
--0.287750 0.270215 -0.162587 -0.284130 0.235052 -0.929527
--0.319348 0.232020 -0.162587 -0.284130 0.235052 -0.929527
--0.335497 0.243753 -0.154684 -0.284130 0.235052 -0.929527
--0.302301 0.283880 -0.154684 -0.284130 0.235052 -0.929527
--0.302301 0.283880 -0.154684 -0.371762 0.307547 -0.875904
--0.335497 0.243753 -0.154684 -0.371762 0.307547 -0.875904
--0.350717 0.254811 -0.144341 -0.371762 0.307547 -0.875904
--0.316015 0.296758 -0.144341 -0.371762 0.307547 -0.875904
--0.316015 0.296758 -0.144341 -0.453481 0.375152 -0.808465
--0.350717 0.254811 -0.144341 -0.453481 0.375152 -0.808465
--0.364768 0.265020 -0.131722 -0.453481 0.375152 -0.808465
--0.328676 0.308647 -0.131722 -0.453481 0.375152 -0.808465
--0.328676 0.308647 -0.131722 -0.528007 0.436805 -0.728293
--0.364768 0.265020 -0.131722 -0.528007 0.436805 -0.728293
--0.377429 0.274218 -0.117026 -0.528007 0.436805 -0.728293
--0.340085 0.319361 -0.117026 -0.528007 0.436805 -0.728293
--0.340085 0.319361 -0.117026 -0.594167 0.491537 -0.636677
--0.377429 0.274218 -0.117026 -0.594167 0.491537 -0.636677
--0.388501 0.282262 -0.100484 -0.594167 0.491537 -0.636677
--0.350060 0.328728 -0.100484 -0.594167 0.491537 -0.636677
--0.350060 0.328728 -0.100484 -0.650934 0.538499 -0.535074
--0.388501 0.282262 -0.100484 -0.650934 0.538499 -0.535074
--0.397807 0.289024 -0.082358 -0.650934 0.538499 -0.535074
--0.358446 0.336603 -0.082358 -0.650934 0.538499 -0.535074
--0.358446 0.336603 -0.082358 -0.697431 0.576964 -0.425090
--0.397807 0.289024 -0.082358 -0.697431 0.576964 -0.425090
--0.405202 0.294396 -0.062932 -0.697431 0.576964 -0.425090
--0.365109 0.342860 -0.062932 -0.697431 0.576964 -0.425090
--0.365109 0.342860 -0.062932 -0.732940 0.606340 -0.308464
--0.405202 0.294396 -0.062932 -0.732940 0.606340 -0.308464
--0.410569 0.298296 -0.042515 -0.732940 0.606340 -0.308464
--0.369945 0.347402 -0.042515 -0.732940 0.606340 -0.308464
--0.369945 0.347402 -0.042515 -0.756918 0.626176 -0.187025
--0.410569 0.298296 -0.042515 -0.756918 0.626176 -0.187025
--0.413824 0.300660 -0.021426 -0.756918 0.626176 -0.187025
--0.372878 0.350156 -0.021426 -0.756918 0.626176 -0.187025
--0.372878 0.350156 -0.021426 -0.768999 0.636171 -0.062667
--0.413824 0.300660 -0.021426 -0.768999 0.636171 -0.062667
--0.414914 0.301453 0.000000 -0.768999 0.636171 -0.062667
--0.373861 0.351078 0.000000 -0.768999 0.636171 -0.062667
--0.414914 0.301453 0.000000 -0.842668 0.534774 0.062668
--0.449425 0.247073 0.000000 -0.842668 0.534774 0.062668
--0.448243 0.246424 0.021426 -0.842668 0.534774 0.062668
--0.413824 0.300660 0.021426 -0.842668 0.534774 0.062668
--0.413824 0.300660 0.021426 -0.829429 0.526373 0.187026
--0.448243 0.246424 0.021426 -0.829429 0.526373 0.187026
--0.444718 0.244486 0.042515 -0.829429 0.526373 0.187026
--0.410569 0.298296 0.042515 -0.829429 0.526373 0.187026
--0.410569 0.298296 0.042515 -0.803155 0.509698 0.308464
--0.444718 0.244486 0.042515 -0.803155 0.509698 0.308464
--0.438905 0.241290 0.062932 -0.803155 0.509698 0.308464
--0.405202 0.294396 0.062932 -0.803155 0.509698 0.308464
--0.405202 0.294396 0.062932 -0.764244 0.485005 0.425090
--0.438905 0.241290 0.062932 -0.764244 0.485005 0.425090
--0.430894 0.236886 0.082358 -0.764244 0.485005 0.425090
--0.397807 0.289024 0.082358 -0.764244 0.485005 0.425090
--0.397807 0.289024 0.082358 -0.713293 0.452670 0.535074
--0.430894 0.236886 0.082358 -0.713293 0.452670 0.535074
--0.420814 0.231344 0.100484 -0.713293 0.452670 0.535074
--0.388501 0.282262 0.100484 -0.713293 0.452670 0.535074
--0.388501 0.282262 0.100484 -0.651087 0.413193 0.636676
--0.420814 0.231344 0.100484 -0.651087 0.413193 0.636676
--0.408822 0.224752 0.117026 -0.651087 0.413193 0.636676
--0.377429 0.274218 0.117026 -0.651087 0.413193 0.636676
--0.377429 0.274218 0.117026 -0.578589 0.367184 0.728293
--0.408822 0.224752 0.117026 -0.578589 0.367184 0.728293
--0.395108 0.217212 0.131722 -0.578589 0.367184 0.728293
--0.364768 0.265020 0.131722 -0.578589 0.367184 0.728293
--0.364768 0.265020 0.131722 -0.496925 0.315358 0.808464
--0.395108 0.217212 0.131722 -0.496925 0.315358 0.808464
--0.379888 0.208845 0.144341 -0.496925 0.315358 0.808464
--0.350717 0.254811 0.144341 -0.496925 0.315358 0.808464
--0.350717 0.254811 0.144341 -0.407375 0.258529 0.875905
--0.379888 0.208845 0.144341 -0.407375 0.258529 0.875905
--0.363402 0.199782 0.154684 -0.407375 0.258529 0.875905
--0.335497 0.243753 0.154684 -0.407375 0.258529 0.875905
--0.335497 0.243753 0.154684 -0.311349 0.197588 0.929527
--0.363402 0.199782 0.154684 -0.311349 0.197588 0.929527
--0.345910 0.190166 0.162587 -0.311349 0.197588 0.929527
--0.319348 0.232020 0.162587 -0.311349 0.197588 0.929527
--0.319348 0.232020 0.162587 -0.210365 0.133502 0.968465
--0.345910 0.190166 0.162587 -0.210365 0.133502 0.968465
--0.327688 0.180148 0.167926 -0.210365 0.133502 0.968465
--0.302525 0.219797 0.167926 -0.210365 0.133502 0.968465
--0.302525 0.219797 0.167926 -0.106028 0.067288 0.992084
--0.327688 0.180148 0.167926 -0.106028 0.067288 0.992084
--0.309023 0.169887 0.170617 -0.106028 0.067288 0.992084
--0.285294 0.207278 0.170617 -0.106028 0.067288 0.992084
--0.309023 0.169887 0.170617 0.000000 0.000000 1.000000
--0.290210 0.159544 0.170617 0.000000 0.000000 1.000000
--0.267925 0.194659 0.170617 0.106028 -0.067287 0.992084
--0.290210 0.159544 0.170617 0.106028 -0.067287 0.992084
--0.271545 0.149283 0.167926 0.106028 -0.067287 0.992084
--0.250694 0.182140 0.167926 0.106028 -0.067287 0.992084
--0.250694 0.182140 0.167926 0.210365 -0.133502 0.968465
--0.271545 0.149283 0.167926 0.210365 -0.133502 0.968465
--0.253323 0.139266 0.162587 0.210365 -0.133502 0.968465
--0.233871 0.169917 0.162587 0.210365 -0.133502 0.968465
--0.233871 0.169917 0.162587 0.311348 -0.197588 0.929527
--0.253323 0.139266 0.162587 0.311348 -0.197588 0.929527
--0.235831 0.129649 0.154684 0.311348 -0.197588 0.929527
--0.217722 0.158184 0.154684 0.311348 -0.197588 0.929527
--0.217722 0.158184 0.154684 0.407376 -0.258529 0.875904
--0.235831 0.129649 0.154684 0.407376 -0.258529 0.875904
--0.219345 0.120586 0.144341 0.407376 -0.258529 0.875904
--0.202502 0.147126 0.144341 0.407376 -0.258529 0.875904
--0.202502 0.147126 0.144341 0.496925 -0.315359 0.808464
--0.219345 0.120586 0.144341 0.496925 -0.315359 0.808464
--0.204125 0.112219 0.131722 0.496925 -0.315359 0.808464
--0.188451 0.136917 0.131722 0.496925 -0.315359 0.808464
--0.188451 0.136917 0.131722 0.578589 -0.367183 0.728293
--0.204125 0.112219 0.131722 0.578589 -0.367183 0.728293
--0.190411 0.104679 0.117026 0.578589 -0.367183 0.728293
--0.175790 0.127719 0.117026 0.578589 -0.367183 0.728293
--0.175790 0.127719 0.117026 0.651088 -0.413193 0.636676
--0.190411 0.104679 0.117026 0.651088 -0.413193 0.636676
--0.178419 0.098087 0.100484 0.651088 -0.413193 0.636676
--0.164719 0.119675 0.100484 0.651088 -0.413193 0.636676
--0.164719 0.119675 0.100484 0.713293 -0.452670 0.535072
--0.178419 0.098087 0.100484 0.713293 -0.452670 0.535072
--0.168339 0.092545 0.082358 0.713293 -0.452670 0.535072
--0.155412 0.112913 0.082358 0.713293 -0.452670 0.535072
--0.155412 0.112913 0.082358 0.764243 -0.485005 0.425091
--0.168339 0.092545 0.082358 0.764243 -0.485005 0.425091
--0.160328 0.088141 0.062932 0.764243 -0.485005 0.425091
--0.148017 0.107541 0.062932 0.764243 -0.485005 0.425091
--0.148017 0.107541 0.062932 0.803154 -0.509698 0.308466
--0.160328 0.088141 0.062932 0.803154 -0.509698 0.308466
--0.154515 0.084945 0.042515 0.803154 -0.509698 0.308466
--0.142650 0.103641 0.042515 0.803154 -0.509698 0.308466
--0.142650 0.103641 0.042515 0.829430 -0.526373 0.187024
--0.154515 0.084945 0.042515 0.829430 -0.526373 0.187024
--0.150990 0.083007 0.021426 0.829430 -0.526373 0.187024
--0.139395 0.101277 0.021426 0.829430 -0.526373 0.187024
--0.139395 0.101277 0.021426 0.842668 -0.534774 0.062668
--0.150990 0.083007 0.021426 0.842668 -0.534774 0.062668
--0.149808 0.082358 0.000000 0.842668 -0.534774 0.062668
--0.138305 0.100484 0.000000 0.842668 -0.534774 0.062668
--0.138305 0.100484 0.000000 0.842668 -0.534774 -0.062668
--0.149808 0.082358 0.000000 0.842668 -0.534774 -0.062668
--0.150990 0.083007 -0.021426 0.842668 -0.534774 -0.062668
--0.139395 0.101277 -0.021426 0.842668 -0.534774 -0.062668
--0.139395 0.101277 -0.021426 0.829430 -0.526373 -0.187024
--0.150990 0.083007 -0.021426 0.829430 -0.526373 -0.187024
--0.154515 0.084945 -0.042515 0.829430 -0.526373 -0.187024
--0.142650 0.103641 -0.042515 0.829430 -0.526373 -0.187024
--0.142650 0.103641 -0.042515 0.803154 -0.509698 -0.308466
--0.154515 0.084945 -0.042515 0.803154 -0.509698 -0.308466
--0.160328 0.088141 -0.062932 0.803154 -0.509698 -0.308466
--0.148017 0.107541 -0.062932 0.803154 -0.509698 -0.308466
--0.148017 0.107541 -0.062932 0.764243 -0.485005 -0.425091
--0.160328 0.088141 -0.062932 0.764243 -0.485005 -0.425091
--0.168339 0.092545 -0.082358 0.764243 -0.485005 -0.425091
--0.155412 0.112913 -0.082358 0.764243 -0.485005 -0.425091
--0.155412 0.112913 -0.082358 0.713293 -0.452670 -0.535072
--0.168339 0.092545 -0.082358 0.713293 -0.452670 -0.535072
--0.178419 0.098087 -0.100484 0.713293 -0.452670 -0.535072
--0.164719 0.119675 -0.100484 0.713293 -0.452670 -0.535072
--0.164719 0.119675 -0.100484 0.651088 -0.413193 -0.636676
--0.178419 0.098087 -0.100484 0.651088 -0.413193 -0.636676
--0.190411 0.104679 -0.117026 0.651088 -0.413193 -0.636676
--0.175790 0.127719 -0.117026 0.651088 -0.413193 -0.636676
--0.175790 0.127719 -0.117026 0.578589 -0.367183 -0.728293
--0.190411 0.104679 -0.117026 0.578589 -0.367183 -0.728293
--0.204125 0.112219 -0.131722 0.578589 -0.367183 -0.728293
--0.188451 0.136917 -0.131722 0.578589 -0.367183 -0.728293
--0.188451 0.136917 -0.131722 0.496925 -0.315359 -0.808464
--0.204125 0.112219 -0.131722 0.496925 -0.315359 -0.808464
--0.219345 0.120586 -0.144341 0.496925 -0.315359 -0.808464
--0.202502 0.147126 -0.144341 0.496925 -0.315359 -0.808464
--0.202502 0.147126 -0.144341 0.407376 -0.258529 -0.875904
--0.219345 0.120586 -0.144341 0.407376 -0.258529 -0.875904
--0.235831 0.129649 -0.154684 0.407376 -0.258529 -0.875904
--0.217722 0.158184 -0.154684 0.407376 -0.258529 -0.875904
--0.217722 0.158184 -0.154684 0.311348 -0.197588 -0.929527
--0.235831 0.129649 -0.154684 0.311348 -0.197588 -0.929527
--0.253323 0.139266 -0.162587 0.311348 -0.197588 -0.929527
--0.233871 0.169917 -0.162587 0.311348 -0.197588 -0.929527
--0.233871 0.169917 -0.162587 0.210365 -0.133502 -0.968465
--0.253323 0.139266 -0.162587 0.210365 -0.133502 -0.968465
--0.271545 0.149283 -0.167926 0.210365 -0.133502 -0.968465
--0.250694 0.182140 -0.167926 0.210365 -0.133502 -0.968465
--0.250694 0.182140 -0.167926 0.106028 -0.067287 -0.992084
--0.271545 0.149283 -0.167926 0.106028 -0.067287 -0.992084
--0.290210 0.159544 -0.170617 0.106028 -0.067287 -0.992084
--0.267925 0.194659 -0.170617 0.106028 -0.067287 -0.992084
--0.290210 0.159544 -0.170617 0.000000 0.000000 -1.000000
--0.309023 0.169887 -0.170617 0.000000 0.000000 -1.000000
--0.285294 0.207278 -0.170617 -0.106028 0.067288 -0.992084
--0.309023 0.169887 -0.170617 -0.106028 0.067288 -0.992084
--0.327688 0.180148 -0.167926 -0.106028 0.067288 -0.992084
--0.302525 0.219797 -0.167926 -0.106028 0.067288 -0.992084
--0.302525 0.219797 -0.167926 -0.210365 0.133502 -0.968465
--0.327688 0.180148 -0.167926 -0.210365 0.133502 -0.968465
--0.345910 0.190166 -0.162587 -0.210365 0.133502 -0.968465
--0.319348 0.232020 -0.162587 -0.210365 0.133502 -0.968465
--0.319348 0.232020 -0.162587 -0.311349 0.197588 -0.929527
--0.345910 0.190166 -0.162587 -0.311349 0.197588 -0.929527
--0.363402 0.199782 -0.154684 -0.311349 0.197588 -0.929527
--0.335497 0.243753 -0.154684 -0.311349 0.197588 -0.929527
--0.335497 0.243753 -0.154684 -0.407375 0.258529 -0.875905
--0.363402 0.199782 -0.154684 -0.407375 0.258529 -0.875905
--0.379888 0.208845 -0.144341 -0.407375 0.258529 -0.875905
--0.350717 0.254811 -0.144341 -0.407375 0.258529 -0.875905
--0.350717 0.254811 -0.144341 -0.496925 0.315358 -0.808464
--0.379888 0.208845 -0.144341 -0.496925 0.315358 -0.808464
--0.395108 0.217212 -0.131722 -0.496925 0.315358 -0.808464
--0.364768 0.265020 -0.131722 -0.496925 0.315358 -0.808464
--0.364768 0.265020 -0.131722 -0.578589 0.367184 -0.728293
--0.395108 0.217212 -0.131722 -0.578589 0.367184 -0.728293
--0.408822 0.224752 -0.117026 -0.578589 0.367184 -0.728293
--0.377429 0.274218 -0.117026 -0.578589 0.367184 -0.728293
--0.377429 0.274218 -0.117026 -0.651087 0.413193 -0.636676
--0.408822 0.224752 -0.117026 -0.651087 0.413193 -0.636676
--0.420814 0.231344 -0.100484 -0.651087 0.413193 -0.636676
--0.388501 0.282262 -0.100484 -0.651087 0.413193 -0.636676
--0.388501 0.282262 -0.100484 -0.713293 0.452670 -0.535074
--0.420814 0.231344 -0.100484 -0.713293 0.452670 -0.535074
--0.430894 0.236886 -0.082358 -0.713293 0.452670 -0.535074
--0.397807 0.289024 -0.082358 -0.713293 0.452670 -0.535074
--0.397807 0.289024 -0.082358 -0.764244 0.485005 -0.425090
--0.430894 0.236886 -0.082358 -0.764244 0.485005 -0.425090
--0.438905 0.241290 -0.062932 -0.764244 0.485005 -0.425090
--0.405202 0.294396 -0.062932 -0.764244 0.485005 -0.425090
--0.405202 0.294396 -0.062932 -0.803155 0.509698 -0.308464
--0.438905 0.241290 -0.062932 -0.803155 0.509698 -0.308464
--0.444718 0.244486 -0.042515 -0.803155 0.509698 -0.308464
--0.410569 0.298296 -0.042515 -0.803155 0.509698 -0.308464
--0.410569 0.298296 -0.042515 -0.829429 0.526373 -0.187026
--0.444718 0.244486 -0.042515 -0.829429 0.526373 -0.187026
--0.448243 0.246424 -0.021426 -0.829429 0.526373 -0.187026
--0.413824 0.300660 -0.021426 -0.829429 0.526373 -0.187026
--0.413824 0.300660 -0.021426 -0.842668 0.534774 -0.062668
--0.448243 0.246424 -0.021426 -0.842668 0.534774 -0.062668
--0.449425 0.247073 0.000000 -0.842668 0.534774 -0.062668
--0.414914 0.301453 0.000000 -0.842668 0.534774 -0.062668
--0.449425 0.247073 0.000000 -0.903049 0.424942 0.062667
--0.476847 0.188797 0.000000 -0.903049 0.424942 0.062667
--0.475594 0.188301 0.021426 -0.903049 0.424942 0.062667
--0.448243 0.246424 0.021426 -0.903049 0.424942 0.062667
--0.448243 0.246424 0.021426 -0.888861 0.418266 0.187027
--0.475594 0.188301 0.021426 -0.888861 0.418266 0.187027
--0.471854 0.186820 0.042515 -0.888861 0.418266 0.187027
--0.444718 0.244486 0.042515 -0.888861 0.418266 0.187027
--0.444718 0.244486 0.042515 -0.860704 0.405016 0.308465
--0.471854 0.186820 0.042515 -0.860704 0.405016 0.308465
--0.465685 0.184378 0.062932 -0.860704 0.405016 0.308465
--0.438905 0.241290 0.062932 -0.860704 0.405016 0.308465
--0.438905 0.241290 0.062932 -0.819005 0.385394 0.425090
--0.465685 0.184378 0.062932 -0.819005 0.385394 0.425090
--0.457186 0.181013 0.082358 -0.819005 0.385394 0.425090
--0.430894 0.236886 0.082358 -0.819005 0.385394 0.425090
--0.430894 0.236886 0.082358 -0.764403 0.359700 0.535074
--0.457186 0.181013 0.082358 -0.764403 0.359700 0.535074
--0.446491 0.176778 0.100484 -0.764403 0.359700 0.535074
--0.420814 0.231344 0.100484 -0.764403 0.359700 0.535074
--0.420814 0.231344 0.100484 -0.697741 0.328331 0.636676
--0.446491 0.176778 0.100484 -0.697741 0.328331 0.636676
--0.433767 0.171741 0.117026 -0.697741 0.328331 0.636676
--0.408822 0.224752 0.117026 -0.697741 0.328331 0.636676
--0.408822 0.224752 0.117026 -0.620047 0.291772 0.728293
--0.433767 0.171741 0.117026 -0.620047 0.291772 0.728293
--0.419216 0.165979 0.131722 -0.620047 0.291772 0.728293
--0.395108 0.217212 0.131722 -0.620047 0.291772 0.728293
--0.395108 0.217212 0.131722 -0.532531 0.250589 0.808465
--0.419216 0.165979 0.131722 -0.532531 0.250589 0.808465
--0.403067 0.159586 0.144341 -0.532531 0.250589 0.808465
--0.379888 0.208845 0.144341 -0.532531 0.250589 0.808465
--0.379888 0.208845 0.144341 -0.436566 0.205431 0.875904
--0.403067 0.159586 0.144341 -0.436566 0.205431 0.875904
--0.385575 0.152660 0.154684 -0.436566 0.205431 0.875904
--0.363402 0.199782 0.154684 -0.436566 0.205431 0.875904
--0.363402 0.199782 0.154684 -0.333658 0.157007 0.929527
--0.385575 0.152660 0.154684 -0.333658 0.157007 0.929527
--0.367016 0.145312 0.162587 -0.333658 0.157007 0.929527
--0.345910 0.190166 0.162587 -0.333658 0.157007 0.929527
--0.345910 0.190166 0.162587 -0.225439 0.106083 0.968465
--0.367016 0.145312 0.162587 -0.225439 0.106083 0.968465
--0.347682 0.137657 0.167926 -0.225439 0.106083 0.968465
--0.327688 0.180148 0.167926 -0.225439 0.106083 0.968465
--0.327688 0.180148 0.167926 -0.113626 0.053468 0.992084
--0.347682 0.137657 0.167926 -0.113626 0.053468 0.992084
--0.327879 0.129816 0.170617 -0.113626 0.053468 0.992084
--0.309023 0.169887 0.170617 -0.113626 0.053468 0.992084
--0.327879 0.129816 0.170617 -0.000000 -0.000000 1.000000
--0.307918 0.121913 0.170617 -0.000000 -0.000000 1.000000
--0.290210 0.159544 0.170617 0.113626 -0.053468 0.992084
--0.307918 0.121913 0.170617 0.113626 -0.053468 0.992084
--0.288114 0.114072 0.167926 0.113626 -0.053468 0.992084
--0.271545 0.149283 0.167926 0.113626 -0.053468 0.992084
--0.271545 0.149283 0.167926 0.225439 -0.106083 0.968465
--0.288114 0.114072 0.167926 0.225439 -0.106083 0.968465
--0.268780 0.106418 0.162587 0.225439 -0.106083 0.968465
--0.253323 0.139266 0.162587 0.225439 -0.106083 0.968465
--0.253323 0.139266 0.162587 0.333658 -0.157008 0.929527
--0.268780 0.106418 0.162587 0.333658 -0.157008 0.929527
--0.250221 0.099070 0.154684 0.333658 -0.157008 0.929527
--0.235831 0.129649 0.154684 0.333658 -0.157008 0.929527
--0.235831 0.129649 0.154684 0.436565 -0.205432 0.875905
--0.250221 0.099070 0.154684 0.436565 -0.205432 0.875905
--0.232729 0.092144 0.144341 0.436565 -0.205432 0.875905
--0.219345 0.120586 0.144341 0.436565 -0.205432 0.875905
--0.219345 0.120586 0.144341 0.532532 -0.250590 0.808464
--0.232729 0.092144 0.144341 0.532532 -0.250590 0.808464
--0.216580 0.085750 0.131722 0.532532 -0.250590 0.808464
--0.204125 0.112219 0.131722 0.532532 -0.250590 0.808464
--0.204125 0.112219 0.131722 0.620047 -0.291772 0.728293
--0.216580 0.085750 0.131722 0.620047 -0.291772 0.728293
--0.202029 0.079989 0.117026 0.620047 -0.291772 0.728293
--0.190411 0.104679 0.117026 0.620047 -0.291772 0.728293
--0.190411 0.104679 0.117026 0.697741 -0.328332 0.636676
--0.202029 0.079989 0.117026 0.697741 -0.328332 0.636676
--0.189306 0.074951 0.100484 0.697741 -0.328332 0.636676
--0.178419 0.098087 0.100484 0.697741 -0.328332 0.636676
--0.178419 0.098087 0.100484 0.764404 -0.359700 0.535073
--0.189306 0.074951 0.100484 0.764404 -0.359700 0.535073
--0.178610 0.070717 0.082358 0.764404 -0.359700 0.535073
--0.168339 0.092545 0.082358 0.764404 -0.359700 0.535073
--0.168339 0.092545 0.082358 0.819005 -0.385393 0.425091
--0.178610 0.070717 0.082358 0.819005 -0.385393 0.425091
--0.170111 0.067352 0.062932 0.819005 -0.385393 0.425091
--0.160328 0.088141 0.062932 0.819005 -0.385393 0.425091
--0.160328 0.088141 0.062932 0.860704 -0.405015 0.308466
--0.170111 0.067352 0.062932 0.860704 -0.405015 0.308466
--0.163943 0.064910 0.042515 0.860704 -0.405015 0.308466
--0.154515 0.084945 0.042515 0.860704 -0.405015 0.308466
--0.154515 0.084945 0.042515 0.888862 -0.418266 0.187024
--0.163943 0.064910 0.042515 0.888862 -0.418266 0.187024
--0.160202 0.063429 0.021426 0.888862 -0.418266 0.187024
--0.150990 0.083007 0.021426 0.888862 -0.418266 0.187024
--0.150990 0.083007 0.021426 0.903049 -0.424942 0.062667
--0.160202 0.063429 0.021426 0.903049 -0.424942 0.062667
--0.158949 0.062932 0.000000 0.903049 -0.424942 0.062667
--0.149808 0.082358 0.000000 0.903049 -0.424942 0.062667
--0.149808 0.082358 0.000000 0.903049 -0.424942 -0.062667
--0.158949 0.062932 0.000000 0.903049 -0.424942 -0.062667
--0.160202 0.063429 -0.021426 0.903049 -0.424942 -0.062667
--0.150990 0.083007 -0.021426 0.903049 -0.424942 -0.062667
--0.150990 0.083007 -0.021426 0.888862 -0.418266 -0.187024
--0.160202 0.063429 -0.021426 0.888862 -0.418266 -0.187024
--0.163943 0.064910 -0.042515 0.888862 -0.418266 -0.187024
--0.154515 0.084945 -0.042515 0.888862 -0.418266 -0.187024
--0.154515 0.084945 -0.042515 0.860704 -0.405015 -0.308466
--0.163943 0.064910 -0.042515 0.860704 -0.405015 -0.308466
--0.170111 0.067352 -0.062932 0.860704 -0.405015 -0.308466
--0.160328 0.088141 -0.062932 0.860704 -0.405015 -0.308466
--0.160328 0.088141 -0.062932 0.819005 -0.385393 -0.425091
--0.170111 0.067352 -0.062932 0.819005 -0.385393 -0.425091
--0.178610 0.070717 -0.082358 0.819005 -0.385393 -0.425091
--0.168339 0.092545 -0.082358 0.819005 -0.385393 -0.425091
--0.168339 0.092545 -0.082358 0.764404 -0.359700 -0.535073
--0.178610 0.070717 -0.082358 0.764404 -0.359700 -0.535073
--0.189306 0.074951 -0.100484 0.764404 -0.359700 -0.535073
--0.178419 0.098087 -0.100484 0.764404 -0.359700 -0.535073
--0.178419 0.098087 -0.100484 0.697741 -0.328332 -0.636676
--0.189306 0.074951 -0.100484 0.697741 -0.328332 -0.636676
--0.202029 0.079989 -0.117026 0.697741 -0.328332 -0.636676
--0.190411 0.104679 -0.117026 0.697741 -0.328332 -0.636676
--0.190411 0.104679 -0.117026 0.620047 -0.291772 -0.728293
--0.202029 0.079989 -0.117026 0.620047 -0.291772 -0.728293
--0.216580 0.085750 -0.131722 0.620047 -0.291772 -0.728293
--0.204125 0.112219 -0.131722 0.620047 -0.291772 -0.728293
--0.204125 0.112219 -0.131722 0.532532 -0.250590 -0.808464
--0.216580 0.085750 -0.131722 0.532532 -0.250590 -0.808464
--0.232729 0.092144 -0.144341 0.532532 -0.250590 -0.808464
--0.219345 0.120586 -0.144341 0.532532 -0.250590 -0.808464
--0.219345 0.120586 -0.144341 0.436565 -0.205432 -0.875905
--0.232729 0.092144 -0.144341 0.436565 -0.205432 -0.875905
--0.250221 0.099070 -0.154684 0.436565 -0.205432 -0.875905
--0.235831 0.129649 -0.154684 0.436565 -0.205432 -0.875905
--0.235831 0.129649 -0.154684 0.333658 -0.157008 -0.929527
--0.250221 0.099070 -0.154684 0.333658 -0.157008 -0.929527
--0.268780 0.106418 -0.162587 0.333658 -0.157008 -0.929527
--0.253323 0.139266 -0.162587 0.333658 -0.157008 -0.929527
--0.253323 0.139266 -0.162587 0.225439 -0.106083 -0.968465
--0.268780 0.106418 -0.162587 0.225439 -0.106083 -0.968465
--0.288114 0.114072 -0.167926 0.225439 -0.106083 -0.968465
--0.271545 0.149283 -0.167926 0.225439 -0.106083 -0.968465
--0.271545 0.149283 -0.167926 0.113626 -0.053468 -0.992084
--0.288114 0.114072 -0.167926 0.113626 -0.053468 -0.992084
--0.307918 0.121913 -0.170617 0.113626 -0.053468 -0.992084
--0.290210 0.159544 -0.170617 0.113626 -0.053468 -0.992084
--0.307918 0.121913 -0.170617 -0.000000 -0.000000 -1.000000
--0.327879 0.129816 -0.170617 -0.000000 -0.000000 -1.000000
--0.309023 0.169887 -0.170617 -0.113626 0.053468 -0.992084
--0.327879 0.129816 -0.170617 -0.113626 0.053468 -0.992084
--0.347682 0.137657 -0.167926 -0.113626 0.053468 -0.992084
--0.327688 0.180148 -0.167926 -0.113626 0.053468 -0.992084
--0.327688 0.180148 -0.167926 -0.225439 0.106083 -0.968465
--0.347682 0.137657 -0.167926 -0.225439 0.106083 -0.968465
--0.367016 0.145312 -0.162587 -0.225439 0.106083 -0.968465
--0.345910 0.190166 -0.162587 -0.225439 0.106083 -0.968465
--0.345910 0.190166 -0.162587 -0.333658 0.157007 -0.929527
--0.367016 0.145312 -0.162587 -0.333658 0.157007 -0.929527
--0.385575 0.152660 -0.154684 -0.333658 0.157007 -0.929527
--0.363402 0.199782 -0.154684 -0.333658 0.157007 -0.929527
--0.363402 0.199782 -0.154684 -0.436566 0.205431 -0.875904
--0.385575 0.152660 -0.154684 -0.436566 0.205431 -0.875904
--0.403067 0.159586 -0.144341 -0.436566 0.205431 -0.875904
--0.379888 0.208845 -0.144341 -0.436566 0.205431 -0.875904
--0.379888 0.208845 -0.144341 -0.532531 0.250589 -0.808465
--0.403067 0.159586 -0.144341 -0.532531 0.250589 -0.808465
--0.419216 0.165979 -0.131722 -0.532531 0.250589 -0.808465
--0.395108 0.217212 -0.131722 -0.532531 0.250589 -0.808465
--0.395108 0.217212 -0.131722 -0.620047 0.291772 -0.728293
--0.419216 0.165979 -0.131722 -0.620047 0.291772 -0.728293
--0.433767 0.171741 -0.117026 -0.620047 0.291772 -0.728293
--0.408822 0.224752 -0.117026 -0.620047 0.291772 -0.728293
--0.408822 0.224752 -0.117026 -0.697741 0.328331 -0.636676
--0.433767 0.171741 -0.117026 -0.697741 0.328331 -0.636676
--0.446491 0.176778 -0.100484 -0.697741 0.328331 -0.636676
--0.420814 0.231344 -0.100484 -0.697741 0.328331 -0.636676
--0.420814 0.231344 -0.100484 -0.764403 0.359700 -0.535074
--0.446491 0.176778 -0.100484 -0.764403 0.359700 -0.535074
--0.457186 0.181013 -0.082358 -0.764403 0.359700 -0.535074
--0.430894 0.236886 -0.082358 -0.764403 0.359700 -0.535074
--0.430894 0.236886 -0.082358 -0.819005 0.385394 -0.425090
--0.457186 0.181013 -0.082358 -0.819005 0.385394 -0.425090
--0.465685 0.184378 -0.062932 -0.819005 0.385394 -0.425090
--0.438905 0.241290 -0.062932 -0.819005 0.385394 -0.425090
--0.438905 0.241290 -0.062932 -0.860704 0.405016 -0.308465
--0.465685 0.184378 -0.062932 -0.860704 0.405016 -0.308465
--0.471854 0.186820 -0.042515 -0.860704 0.405016 -0.308465
--0.444718 0.244486 -0.042515 -0.860704 0.405016 -0.308465
--0.444718 0.244486 -0.042515 -0.888861 0.418266 -0.187027
--0.471854 0.186820 -0.042515 -0.888861 0.418266 -0.187027
--0.475594 0.188301 -0.021426 -0.888861 0.418266 -0.187027
--0.448243 0.246424 -0.021426 -0.888861 0.418266 -0.187027
--0.448243 0.246424 -0.021426 -0.903049 0.424942 -0.062667
--0.475594 0.188301 -0.021426 -0.903049 0.424942 -0.062667
--0.476847 0.188797 0.000000 -0.903049 0.424942 -0.062667
--0.449425 0.247073 0.000000 -0.903049 0.424942 -0.062667
--0.476847 0.188797 0.000000 -0.949187 0.308409 0.062667
--0.496750 0.127544 0.000000 -0.949187 0.308409 0.062667
--0.495444 0.127208 0.021426 -0.949187 0.308409 0.062667
--0.475594 0.188301 0.021426 -0.949187 0.308409 0.062667
--0.475594 0.188301 0.021426 -0.934275 0.303564 0.187027
--0.495444 0.127208 0.021426 -0.934275 0.303564 0.187027
--0.491548 0.126208 0.042515 -0.934275 0.303564 0.187027
--0.471854 0.186820 0.042515 -0.934275 0.303564 0.187027
--0.471854 0.186820 0.042515 -0.904679 0.293949 0.308464
--0.491548 0.126208 0.042515 -0.904679 0.293949 0.308464
--0.485122 0.124558 0.062932 -0.904679 0.293949 0.308464
--0.465685 0.184378 0.062932 -0.904679 0.293949 0.308464
--0.465685 0.184378 0.062932 -0.860849 0.279708 0.425091
--0.485122 0.124558 0.062932 -0.860849 0.279708 0.425091
--0.476268 0.122285 0.082358 -0.860849 0.279708 0.425091
--0.457186 0.181013 0.082358 -0.860849 0.279708 0.425091
--0.457186 0.181013 0.082358 -0.803458 0.261060 0.535073
--0.476268 0.122285 0.082358 -0.803458 0.261060 0.535073
--0.465126 0.119424 0.100484 -0.803458 0.261060 0.535073
--0.446491 0.176778 0.100484 -0.803458 0.261060 0.535073
--0.446491 0.176778 0.100484 -0.733389 0.238293 0.636676
--0.465126 0.119424 0.100484 -0.733389 0.238293 0.636676
--0.451872 0.116021 0.117026 -0.733389 0.238293 0.636676
--0.433767 0.171741 0.117026 -0.733389 0.238293 0.636676
--0.433767 0.171741 0.117026 -0.651727 0.211760 0.728292
--0.451872 0.116021 0.117026 -0.651727 0.211760 0.728292
--0.436713 0.112129 0.131722 -0.651727 0.211760 0.728292
--0.419216 0.165979 0.131722 -0.651727 0.211760 0.728292
--0.419216 0.165979 0.131722 -0.559738 0.181871 0.808465
--0.436713 0.112129 0.131722 -0.559738 0.181871 0.808465
--0.419890 0.107810 0.144341 -0.559738 0.181871 0.808465
--0.403067 0.159586 0.144341 -0.559738 0.181871 0.808465
--0.403067 0.159586 0.144341 -0.458871 0.149097 0.875904
--0.419890 0.107810 0.144341 -0.458871 0.149097 0.875904
--0.401668 0.103131 0.154684 -0.458871 0.149097 0.875904
--0.385575 0.152660 0.154684 -0.458871 0.149097 0.875904
--0.385575 0.152660 0.154684 -0.350705 0.113952 0.929527
--0.401668 0.103131 0.154684 -0.350705 0.113952 0.929527
--0.382335 0.098167 0.162587 -0.350705 0.113952 0.929527
--0.367016 0.145312 0.162587 -0.350705 0.113952 0.929527
--0.367016 0.145312 0.162587 -0.236957 0.076992 0.968465
--0.382335 0.098167 0.162587 -0.236957 0.076992 0.968465
--0.362194 0.092996 0.167926 -0.236957 0.076992 0.968465
--0.347682 0.137657 0.167926 -0.236957 0.076992 0.968465
--0.347682 0.137657 0.167926 -0.119431 0.038806 0.992084
--0.362194 0.092996 0.167926 -0.119431 0.038806 0.992084
--0.341564 0.087699 0.170617 -0.119431 0.038806 0.992084
--0.327879 0.129816 0.170617 -0.119431 0.038806 0.992084
--0.341564 0.087699 0.170617 0.000000 0.000000 1.000000
--0.320769 0.082360 0.170617 0.000000 0.000000 1.000000
--0.307918 0.121913 0.170617 0.119431 -0.038805 0.992084
--0.320769 0.082360 0.170617 0.119431 -0.038805 0.992084
--0.300139 0.077063 0.167926 0.119431 -0.038805 0.992084
--0.288114 0.114072 0.167926 0.119431 -0.038805 0.992084
--0.288114 0.114072 0.167926 0.236956 -0.076992 0.968465
--0.300139 0.077063 0.167926 0.236956 -0.076992 0.968465
--0.279999 0.071891 0.162587 0.236956 -0.076992 0.968465
--0.268780 0.106418 0.162587 0.236956 -0.076992 0.968465
--0.268780 0.106418 0.162587 0.350706 -0.113951 0.929527
--0.279999 0.071891 0.162587 0.350706 -0.113951 0.929527
--0.260665 0.066927 0.154684 0.350706 -0.113951 0.929527
--0.250221 0.099070 0.154684 0.350706 -0.113951 0.929527
--0.250221 0.099070 0.154684 0.458870 -0.149095 0.875905
--0.260665 0.066927 0.154684 0.458870 -0.149095 0.875905
--0.242443 0.062249 0.144341 0.458870 -0.149095 0.875905
--0.232729 0.092144 0.144341 0.458870 -0.149095 0.875905
--0.232729 0.092144 0.144341 0.559740 -0.181871 0.808464
--0.242443 0.062249 0.144341 0.559740 -0.181871 0.808464
--0.225620 0.057929 0.131722 0.559740 -0.181871 0.808464
--0.216580 0.085750 0.131722 0.559740 -0.181871 0.808464
--0.216580 0.085750 0.131722 0.651726 -0.211759 0.728293
--0.225620 0.057929 0.131722 0.651726 -0.211759 0.728293
--0.210462 0.054037 0.117026 0.651726 -0.211759 0.728293
--0.202029 0.079989 0.117026 0.651726 -0.211759 0.728293
--0.202029 0.079989 0.117026 0.733389 -0.238293 0.636676
--0.210462 0.054037 0.117026 0.733389 -0.238293 0.636676
--0.197207 0.050634 0.100484 0.733389 -0.238293 0.636676
--0.189306 0.074951 0.100484 0.733389 -0.238293 0.636676
--0.189306 0.074951 0.100484 0.803458 -0.261060 0.535073
--0.197207 0.050634 0.100484 0.803458 -0.261060 0.535073
--0.186065 0.047773 0.082358 0.803458 -0.261060 0.535073
--0.178610 0.070717 0.082358 0.803458 -0.261060 0.535073
--0.178610 0.070717 0.082358 0.860849 -0.279708 0.425091
--0.186065 0.047773 0.082358 0.860849 -0.279708 0.425091
--0.177211 0.045500 0.062932 0.860849 -0.279708 0.425091
--0.170111 0.067352 0.062932 0.860849 -0.279708 0.425091
--0.170111 0.067352 0.062932 0.904679 -0.293949 0.308465
--0.177211 0.045500 0.062932 0.904679 -0.293949 0.308465
--0.170785 0.043850 0.042515 0.904679 -0.293949 0.308465
--0.163943 0.064910 0.042515 0.904679 -0.293949 0.308465
--0.163943 0.064910 0.042515 0.934275 -0.303565 0.187024
--0.170785 0.043850 0.042515 0.934275 -0.303565 0.187024
--0.166889 0.042850 0.021426 0.934275 -0.303565 0.187024
--0.160202 0.063429 0.021426 0.934275 -0.303565 0.187024
--0.160202 0.063429 0.021426 0.949187 -0.308410 0.062667
--0.166889 0.042850 0.021426 0.949187 -0.308410 0.062667
--0.165583 0.042515 0.000000 0.949187 -0.308410 0.062667
--0.158949 0.062932 0.000000 0.949187 -0.308410 0.062667
--0.158949 0.062932 0.000000 0.949187 -0.308410 -0.062667
--0.165583 0.042515 0.000000 0.949187 -0.308410 -0.062667
--0.166889 0.042850 -0.021426 0.949187 -0.308410 -0.062667
--0.160202 0.063429 -0.021426 0.949187 -0.308410 -0.062667
--0.160202 0.063429 -0.021426 0.934275 -0.303565 -0.187024
--0.166889 0.042850 -0.021426 0.934275 -0.303565 -0.187024
--0.170785 0.043850 -0.042515 0.934275 -0.303565 -0.187024
--0.163943 0.064910 -0.042515 0.934275 -0.303565 -0.187024
--0.163943 0.064910 -0.042515 0.904679 -0.293949 -0.308465
--0.170785 0.043850 -0.042515 0.904679 -0.293949 -0.308465
--0.177211 0.045500 -0.062932 0.904679 -0.293949 -0.308465
--0.170111 0.067352 -0.062932 0.904679 -0.293949 -0.308465
--0.170111 0.067352 -0.062932 0.860849 -0.279708 -0.425091
--0.177211 0.045500 -0.062932 0.860849 -0.279708 -0.425091
--0.186065 0.047773 -0.082358 0.860849 -0.279708 -0.425091
--0.178610 0.070717 -0.082358 0.860849 -0.279708 -0.425091
--0.178610 0.070717 -0.082358 0.803458 -0.261060 -0.535073
--0.186065 0.047773 -0.082358 0.803458 -0.261060 -0.535073
--0.197207 0.050634 -0.100484 0.803458 -0.261060 -0.535073
--0.189306 0.074951 -0.100484 0.803458 -0.261060 -0.535073
--0.189306 0.074951 -0.100484 0.733389 -0.238293 -0.636676
--0.197207 0.050634 -0.100484 0.733389 -0.238293 -0.636676
--0.210462 0.054037 -0.117026 0.733389 -0.238293 -0.636676
--0.202029 0.079989 -0.117026 0.733389 -0.238293 -0.636676
--0.202029 0.079989 -0.117026 0.651726 -0.211759 -0.728293
--0.210462 0.054037 -0.117026 0.651726 -0.211759 -0.728293
--0.225620 0.057929 -0.131722 0.651726 -0.211759 -0.728293
--0.216580 0.085750 -0.131722 0.651726 -0.211759 -0.728293
--0.216580 0.085750 -0.131722 0.559740 -0.181871 -0.808464
--0.225620 0.057929 -0.131722 0.559740 -0.181871 -0.808464
--0.242443 0.062249 -0.144341 0.559740 -0.181871 -0.808464
--0.232729 0.092144 -0.144341 0.559740 -0.181871 -0.808464
--0.232729 0.092144 -0.144341 0.458870 -0.149095 -0.875905
--0.242443 0.062249 -0.144341 0.458870 -0.149095 -0.875905
--0.260665 0.066927 -0.154684 0.458870 -0.149095 -0.875905
--0.250221 0.099070 -0.154684 0.458870 -0.149095 -0.875905
--0.250221 0.099070 -0.154684 0.350706 -0.113951 -0.929527
--0.260665 0.066927 -0.154684 0.350706 -0.113951 -0.929527
--0.279999 0.071891 -0.162587 0.350706 -0.113951 -0.929527
--0.268780 0.106418 -0.162587 0.350706 -0.113951 -0.929527
--0.268780 0.106418 -0.162587 0.236956 -0.076992 -0.968465
--0.279999 0.071891 -0.162587 0.236956 -0.076992 -0.968465
--0.300139 0.077063 -0.167926 0.236956 -0.076992 -0.968465
--0.288114 0.114072 -0.167926 0.236956 -0.076992 -0.968465
--0.288114 0.114072 -0.167926 0.119431 -0.038805 -0.992084
--0.300139 0.077063 -0.167926 0.119431 -0.038805 -0.992084
--0.320769 0.082360 -0.170617 0.119431 -0.038805 -0.992084
--0.307918 0.121913 -0.170617 0.119431 -0.038805 -0.992084
--0.320769 0.082360 -0.170617 0.000000 0.000000 -1.000000
--0.341564 0.087699 -0.170617 0.000000 0.000000 -1.000000
--0.327879 0.129816 -0.170617 -0.119431 0.038806 -0.992084
--0.341564 0.087699 -0.170617 -0.119431 0.038806 -0.992084
--0.362194 0.092996 -0.167926 -0.119431 0.038806 -0.992084
--0.347682 0.137657 -0.167926 -0.119431 0.038806 -0.992084
--0.347682 0.137657 -0.167926 -0.236957 0.076992 -0.968465
--0.362194 0.092996 -0.167926 -0.236957 0.076992 -0.968465
--0.382335 0.098167 -0.162587 -0.236957 0.076992 -0.968465
--0.367016 0.145312 -0.162587 -0.236957 0.076992 -0.968465
--0.367016 0.145312 -0.162587 -0.350705 0.113952 -0.929527
--0.382335 0.098167 -0.162587 -0.350705 0.113952 -0.929527
--0.401668 0.103131 -0.154684 -0.350705 0.113952 -0.929527
--0.385575 0.152660 -0.154684 -0.350705 0.113952 -0.929527
--0.385575 0.152660 -0.154684 -0.458871 0.149097 -0.875904
--0.401668 0.103131 -0.154684 -0.458871 0.149097 -0.875904
--0.419890 0.107810 -0.144341 -0.458871 0.149097 -0.875904
--0.403067 0.159586 -0.144341 -0.458871 0.149097 -0.875904
--0.403067 0.159586 -0.144341 -0.559738 0.181871 -0.808465
--0.419890 0.107810 -0.144341 -0.559738 0.181871 -0.808465
--0.436713 0.112129 -0.131722 -0.559738 0.181871 -0.808465
--0.419216 0.165979 -0.131722 -0.559738 0.181871 -0.808465
--0.419216 0.165979 -0.131722 -0.651727 0.211760 -0.728292
--0.436713 0.112129 -0.131722 -0.651727 0.211760 -0.728292
--0.451872 0.116021 -0.117026 -0.651727 0.211760 -0.728292
--0.433767 0.171741 -0.117026 -0.651727 0.211760 -0.728292
--0.433767 0.171741 -0.117026 -0.733389 0.238293 -0.636676
--0.451872 0.116021 -0.117026 -0.733389 0.238293 -0.636676
--0.465126 0.119424 -0.100484 -0.733389 0.238293 -0.636676
--0.446491 0.176778 -0.100484 -0.733389 0.238293 -0.636676
--0.446491 0.176778 -0.100484 -0.803458 0.261060 -0.535073
--0.465126 0.119424 -0.100484 -0.803458 0.261060 -0.535073
--0.476268 0.122285 -0.082358 -0.803458 0.261060 -0.535073
--0.457186 0.181013 -0.082358 -0.803458 0.261060 -0.535073
--0.457186 0.181013 -0.082358 -0.860849 0.279708 -0.425091
--0.476268 0.122285 -0.082358 -0.860849 0.279708 -0.425091
--0.485122 0.124558 -0.062932 -0.860849 0.279708 -0.425091
--0.465685 0.184378 -0.062932 -0.860849 0.279708 -0.425091
--0.465685 0.184378 -0.062932 -0.904679 0.293949 -0.308464
--0.485122 0.124558 -0.062932 -0.904679 0.293949 -0.308464
--0.491548 0.126208 -0.042515 -0.904679 0.293949 -0.308464
--0.471854 0.186820 -0.042515 -0.904679 0.293949 -0.308464
--0.471854 0.186820 -0.042515 -0.934275 0.303564 -0.187027
--0.491548 0.126208 -0.042515 -0.934275 0.303564 -0.187027
--0.495444 0.127208 -0.021426 -0.934275 0.303564 -0.187027
--0.475594 0.188301 -0.021426 -0.934275 0.303564 -0.187027
--0.475594 0.188301 -0.021426 -0.949187 0.308409 -0.062667
--0.495444 0.127208 -0.021426 -0.949187 0.308409 -0.062667
--0.496750 0.127544 0.000000 -0.949187 0.308409 -0.062667
--0.476847 0.188797 0.000000 -0.949187 0.308409 -0.062667
--0.496750 0.127544 0.000000 -0.980357 0.187013 0.062666
--0.508818 0.064279 0.000000 -0.980357 0.187013 0.062666
--0.507481 0.064110 0.021426 -0.980357 0.187013 0.062666
--0.495444 0.127208 0.021426 -0.980357 0.187013 0.062666
--0.495444 0.127208 0.021426 -0.964955 0.184075 0.187025
--0.507481 0.064110 0.021426 -0.964955 0.184075 0.187025
--0.503490 0.063606 0.042515 -0.964955 0.184075 0.187025
--0.491548 0.126208 0.042515 -0.964955 0.184075 0.187025
--0.491548 0.126208 0.042515 -0.934387 0.178244 0.308465
--0.503490 0.063606 0.042515 -0.934387 0.178244 0.308465
--0.496908 0.062774 0.062932 -0.934387 0.178244 0.308465
--0.485122 0.124558 0.062932 -0.934387 0.178244 0.308465
--0.485122 0.124558 0.062932 -0.889118 0.169608 0.425091
--0.496908 0.062774 0.062932 -0.889118 0.169608 0.425091
--0.487839 0.061628 0.082358 -0.889118 0.169608 0.425091
--0.476268 0.122285 0.082358 -0.889118 0.169608 0.425091
--0.476268 0.122285 0.082358 -0.829842 0.158300 0.535073
--0.487839 0.061628 0.082358 -0.829842 0.158300 0.535073
--0.476426 0.060187 0.100484 -0.829842 0.158300 0.535073
--0.465126 0.119424 0.100484 -0.829842 0.158300 0.535073
--0.465126 0.119424 0.100484 -0.757473 0.144495 0.636676
--0.476426 0.060187 0.100484 -0.757473 0.144495 0.636676
--0.462850 0.058471 0.117026 -0.757473 0.144495 0.636676
--0.451872 0.116021 0.117026 -0.757473 0.144495 0.636676
--0.451872 0.116021 0.117026 -0.673128 0.128406 0.728293
--0.462850 0.058471 0.117026 -0.673128 0.128406 0.728293
--0.447323 0.056510 0.131722 -0.673128 0.128406 0.728293
--0.436713 0.112129 0.131722 -0.673128 0.128406 0.728293
--0.436713 0.112129 0.131722 -0.578120 0.110282 0.808465
--0.447323 0.056510 0.131722 -0.578120 0.110282 0.808465
--0.430092 0.054333 0.144341 -0.578120 0.110282 0.808465
--0.419890 0.107810 0.144341 -0.578120 0.110282 0.808465
--0.419890 0.107810 0.144341 -0.473939 0.090409 0.875904
--0.430092 0.054333 0.144341 -0.473939 0.090409 0.875904
--0.411427 0.051975 0.154684 -0.473939 0.090409 0.875904
--0.401668 0.103131 0.154684 -0.473939 0.090409 0.875904
--0.401668 0.103131 0.154684 -0.362221 0.069097 0.929528
--0.411427 0.051975 0.154684 -0.362221 0.069097 0.929528
--0.391623 0.049474 0.162587 -0.362221 0.069097 0.929528
--0.382335 0.098167 0.162587 -0.362221 0.069097 0.929528
--0.382335 0.098167 0.162587 -0.244738 0.046686 0.968465
--0.391623 0.049474 0.162587 -0.244738 0.046686 0.968465
--0.370993 0.046867 0.167926 -0.244738 0.046686 0.968465
--0.362194 0.092996 0.167926 -0.244738 0.046686 0.968465
--0.362194 0.092996 0.167926 -0.123353 0.023531 0.992084
--0.370993 0.046867 0.167926 -0.123353 0.023531 0.992084
--0.349862 0.044198 0.170617 -0.123353 0.023531 0.992084
--0.341564 0.087699 0.170617 -0.123353 0.023531 0.992084
--0.349862 0.044198 0.170617 0.000000 0.000000 1.000000
--0.328563 0.041507 0.170617 0.000000 0.000000 1.000000
--0.320769 0.082360 0.170617 0.123353 -0.023531 0.992084
--0.328563 0.041507 0.170617 0.123353 -0.023531 0.992084
--0.307431 0.038838 0.167926 0.123353 -0.023531 0.992084
--0.300139 0.077063 0.167926 0.123353 -0.023531 0.992084
--0.300139 0.077063 0.167926 0.244737 -0.046686 0.968465
--0.307431 0.038838 0.167926 0.244737 -0.046686 0.968465
--0.286801 0.036231 0.162587 0.244737 -0.046686 0.968465
--0.279999 0.071891 0.162587 0.244737 -0.046686 0.968465
--0.279999 0.071891 0.162587 0.362221 -0.069098 0.929527
--0.286801 0.036231 0.162587 0.362221 -0.069098 0.929527
--0.266997 0.033730 0.154684 0.362221 -0.069098 0.929527
--0.260665 0.066927 0.154684 0.362221 -0.069098 0.929527
--0.260665 0.066927 0.154684 0.473939 -0.090409 0.875904
--0.266997 0.033730 0.154684 0.473939 -0.090409 0.875904
--0.248333 0.031372 0.144341 0.473939 -0.090409 0.875904
--0.242443 0.062249 0.144341 0.473939 -0.090409 0.875904
--0.242443 0.062249 0.144341 0.578121 -0.110282 0.808464
--0.248333 0.031372 0.144341 0.578121 -0.110282 0.808464
--0.231101 0.029195 0.131722 0.578121 -0.110282 0.808464
--0.225620 0.057929 0.131722 0.578121 -0.110282 0.808464
--0.225620 0.057929 0.131722 0.673128 -0.128406 0.728293
--0.231101 0.029195 0.131722 0.673128 -0.128406 0.728293
--0.215575 0.027233 0.117026 0.673128 -0.128406 0.728293
--0.210462 0.054037 0.117026 0.673128 -0.128406 0.728293
--0.210462 0.054037 0.117026 0.757472 -0.144495 0.636676
--0.215575 0.027233 0.117026 0.757472 -0.144495 0.636676
--0.201998 0.025518 0.100484 0.757472 -0.144495 0.636676
--0.197207 0.050634 0.100484 0.757472 -0.144495 0.636676
--0.197207 0.050634 0.100484 0.829842 -0.158301 0.535072
--0.201998 0.025518 0.100484 0.829842 -0.158301 0.535072
--0.190585 0.024077 0.082358 0.829842 -0.158301 0.535072
--0.186065 0.047773 0.082358 0.829842 -0.158301 0.535072
--0.186065 0.047773 0.082358 0.889118 -0.169608 0.425091
--0.190585 0.024077 0.082358 0.889118 -0.169608 0.425091
--0.181516 0.022931 0.062932 0.889118 -0.169608 0.425091
--0.177211 0.045500 0.062932 0.889118 -0.169608 0.425091
--0.177211 0.045500 0.062932 0.934387 -0.178244 0.308466
--0.181516 0.022931 0.062932 0.934387 -0.178244 0.308466
--0.174935 0.022099 0.042515 0.934387 -0.178244 0.308466
--0.170785 0.043850 0.042515 0.934387 -0.178244 0.308466
--0.170785 0.043850 0.042515 0.964955 -0.184075 0.187025
--0.174935 0.022099 0.042515 0.964955 -0.184075 0.187025
--0.170943 0.021595 0.021426 0.964955 -0.184075 0.187025
--0.166889 0.042850 0.021426 0.964955 -0.184075 0.187025
--0.166889 0.042850 0.021426 0.980357 -0.187012 0.062667
--0.170943 0.021595 0.021426 0.980357 -0.187012 0.062667
--0.169606 0.021426 0.000000 0.980357 -0.187012 0.062667
--0.165583 0.042515 0.000000 0.980357 -0.187012 0.062667
--0.165583 0.042515 0.000000 0.980357 -0.187012 -0.062667
--0.169606 0.021426 0.000000 0.980357 -0.187012 -0.062667
--0.170943 0.021595 -0.021426 0.980357 -0.187012 -0.062667
--0.166889 0.042850 -0.021426 0.980357 -0.187012 -0.062667
--0.166889 0.042850 -0.021426 0.964955 -0.184075 -0.187025
--0.170943 0.021595 -0.021426 0.964955 -0.184075 -0.187025
--0.174935 0.022099 -0.042515 0.964955 -0.184075 -0.187025
--0.170785 0.043850 -0.042515 0.964955 -0.184075 -0.187025
--0.170785 0.043850 -0.042515 0.934387 -0.178244 -0.308466
--0.174935 0.022099 -0.042515 0.934387 -0.178244 -0.308466
--0.181516 0.022931 -0.062932 0.934387 -0.178244 -0.308466
--0.177211 0.045500 -0.062932 0.934387 -0.178244 -0.308466
--0.177211 0.045500 -0.062932 0.889118 -0.169608 -0.425091
--0.181516 0.022931 -0.062932 0.889118 -0.169608 -0.425091
--0.190585 0.024077 -0.082358 0.889118 -0.169608 -0.425091
--0.186065 0.047773 -0.082358 0.889118 -0.169608 -0.425091
--0.186065 0.047773 -0.082358 0.829842 -0.158301 -0.535072
--0.190585 0.024077 -0.082358 0.829842 -0.158301 -0.535072
--0.201998 0.025518 -0.100484 0.829842 -0.158301 -0.535072
--0.197207 0.050634 -0.100484 0.829842 -0.158301 -0.535072
--0.197207 0.050634 -0.100484 0.757472 -0.144495 -0.636676
--0.201998 0.025518 -0.100484 0.757472 -0.144495 -0.636676
--0.215575 0.027233 -0.117026 0.757472 -0.144495 -0.636676
--0.210462 0.054037 -0.117026 0.757472 -0.144495 -0.636676
--0.210462 0.054037 -0.117026 0.673128 -0.128406 -0.728293
--0.215575 0.027233 -0.117026 0.673128 -0.128406 -0.728293
--0.231101 0.029195 -0.131722 0.673128 -0.128406 -0.728293
--0.225620 0.057929 -0.131722 0.673128 -0.128406 -0.728293
--0.225620 0.057929 -0.131722 0.578121 -0.110282 -0.808464
--0.231101 0.029195 -0.131722 0.578121 -0.110282 -0.808464
--0.248333 0.031372 -0.144341 0.578121 -0.110282 -0.808464
--0.242443 0.062249 -0.144341 0.578121 -0.110282 -0.808464
--0.242443 0.062249 -0.144341 0.473939 -0.090409 -0.875904
--0.248333 0.031372 -0.144341 0.473939 -0.090409 -0.875904
--0.266997 0.033730 -0.154684 0.473939 -0.090409 -0.875904
--0.260665 0.066927 -0.154684 0.473939 -0.090409 -0.875904
--0.260665 0.066927 -0.154684 0.362221 -0.069098 -0.929527
--0.266997 0.033730 -0.154684 0.362221 -0.069098 -0.929527
--0.286801 0.036231 -0.162587 0.362221 -0.069098 -0.929527
--0.279999 0.071891 -0.162587 0.362221 -0.069098 -0.929527
--0.279999 0.071891 -0.162587 0.244737 -0.046686 -0.968465
--0.286801 0.036231 -0.162587 0.244737 -0.046686 -0.968465
--0.307431 0.038838 -0.167926 0.244737 -0.046686 -0.968465
--0.300139 0.077063 -0.167926 0.244737 -0.046686 -0.968465
--0.300139 0.077063 -0.167926 0.123353 -0.023531 -0.992084
--0.307431 0.038838 -0.167926 0.123353 -0.023531 -0.992084
--0.328563 0.041507 -0.170617 0.123353 -0.023531 -0.992084
--0.320769 0.082360 -0.170617 0.123353 -0.023531 -0.992084
--0.328563 0.041507 -0.170617 0.000000 0.000000 -1.000000
--0.349862 0.044198 -0.170617 0.000000 0.000000 -1.000000
--0.341564 0.087699 -0.170617 -0.123353 0.023531 -0.992084
--0.349862 0.044198 -0.170617 -0.123353 0.023531 -0.992084
--0.370993 0.046867 -0.167926 -0.123353 0.023531 -0.992084
--0.362194 0.092996 -0.167926 -0.123353 0.023531 -0.992084
--0.362194 0.092996 -0.167926 -0.244738 0.046686 -0.968465
--0.370993 0.046867 -0.167926 -0.244738 0.046686 -0.968465
--0.391623 0.049474 -0.162587 -0.244738 0.046686 -0.968465
--0.382335 0.098167 -0.162587 -0.244738 0.046686 -0.968465
--0.382335 0.098167 -0.162587 -0.362221 0.069097 -0.929528
--0.391623 0.049474 -0.162587 -0.362221 0.069097 -0.929528
--0.411427 0.051975 -0.154684 -0.362221 0.069097 -0.929528
--0.401668 0.103131 -0.154684 -0.362221 0.069097 -0.929528
--0.401668 0.103131 -0.154684 -0.473939 0.090409 -0.875904
--0.411427 0.051975 -0.154684 -0.473939 0.090409 -0.875904
--0.430092 0.054333 -0.144341 -0.473939 0.090409 -0.875904
--0.419890 0.107810 -0.144341 -0.473939 0.090409 -0.875904
--0.419890 0.107810 -0.144341 -0.578120 0.110282 -0.808465
--0.430092 0.054333 -0.144341 -0.578120 0.110282 -0.808465
--0.447323 0.056510 -0.131722 -0.578120 0.110282 -0.808465
--0.436713 0.112129 -0.131722 -0.578120 0.110282 -0.808465
--0.436713 0.112129 -0.131722 -0.673128 0.128406 -0.728293
--0.447323 0.056510 -0.131722 -0.673128 0.128406 -0.728293
--0.462850 0.058471 -0.117026 -0.673128 0.128406 -0.728293
--0.451872 0.116021 -0.117026 -0.673128 0.128406 -0.728293
--0.451872 0.116021 -0.117026 -0.757473 0.144495 -0.636676
--0.462850 0.058471 -0.117026 -0.757473 0.144495 -0.636676
--0.476426 0.060187 -0.100484 -0.757473 0.144495 -0.636676
--0.465126 0.119424 -0.100484 -0.757473 0.144495 -0.636676
--0.465126 0.119424 -0.100484 -0.829842 0.158300 -0.535073
--0.476426 0.060187 -0.100484 -0.829842 0.158300 -0.535073
--0.487839 0.061628 -0.082358 -0.829842 0.158300 -0.535073
--0.476268 0.122285 -0.082358 -0.829842 0.158300 -0.535073
--0.476268 0.122285 -0.082358 -0.889118 0.169608 -0.425091
--0.487839 0.061628 -0.082358 -0.889118 0.169608 -0.425091
--0.496908 0.062774 -0.062932 -0.889118 0.169608 -0.425091
--0.485122 0.124558 -0.062932 -0.889118 0.169608 -0.425091
--0.485122 0.124558 -0.062932 -0.934387 0.178244 -0.308465
--0.496908 0.062774 -0.062932 -0.934387 0.178244 -0.308465
--0.503490 0.063606 -0.042515 -0.934387 0.178244 -0.308465
--0.491548 0.126208 -0.042515 -0.934387 0.178244 -0.308465
--0.491548 0.126208 -0.042515 -0.964955 0.184075 -0.187025
--0.503490 0.063606 -0.042515 -0.964955 0.184075 -0.187025
--0.507481 0.064110 -0.021426 -0.964955 0.184075 -0.187025
--0.495444 0.127208 -0.021426 -0.964955 0.184075 -0.187025
--0.495444 0.127208 -0.021426 -0.980357 0.187013 -0.062666
--0.507481 0.064110 -0.021426 -0.980357 0.187013 -0.062666
--0.508818 0.064279 0.000000 -0.980357 0.187013 -0.062666
--0.496750 0.127544 0.000000 -0.980357 0.187013 -0.062666
--0.508818 0.064279 0.000000 -0.996065 0.062668 0.062666
--0.512862 0.000000 0.000000 -0.996065 0.062668 0.062666
--0.511514 0.000000 0.021426 -0.996065 0.062668 0.062666
--0.507481 0.064110 0.021426 -0.996065 0.062668 0.062666
--0.507481 0.064110 0.021426 -0.980417 0.061682 0.187024
--0.511514 0.000000 0.021426 -0.980417 0.061682 0.187024
--0.507491 0.000000 0.042515 -0.980417 0.061682 0.187024
--0.503490 0.063606 0.042515 -0.980417 0.061682 0.187024
--0.503490 0.063606 0.042515 -0.949358 0.059728 0.308466
--0.507491 0.000000 0.042515 -0.949358 0.059728 0.308466
--0.500857 0.000000 0.062932 -0.949358 0.059728 0.308466
--0.496908 0.062774 0.062932 -0.949358 0.059728 0.308466
--0.496908 0.062774 0.062932 -0.903365 0.056835 0.425091
--0.500857 0.000000 0.062932 -0.903365 0.056835 0.425091
--0.491716 0.000000 0.082358 -0.903365 0.056835 0.425091
--0.487839 0.061628 0.082358 -0.903365 0.056835 0.425091
--0.487839 0.061628 0.082358 -0.843139 0.053046 0.535073
--0.491716 0.000000 0.082358 -0.843139 0.053046 0.535073
--0.480213 0.000000 0.100484 -0.843139 0.053046 0.535073
--0.476426 0.060187 0.100484 -0.843139 0.053046 0.535073
--0.476426 0.060187 0.100484 -0.769610 0.048420 0.636676
--0.480213 0.000000 0.100484 -0.769610 0.048420 0.636676
--0.466528 0.000000 0.117026 -0.769610 0.048420 0.636676
--0.462850 0.058471 0.117026 -0.769610 0.048420 0.636676
--0.462850 0.058471 0.117026 -0.683913 0.043028 0.728293
--0.466528 0.000000 0.117026 -0.683913 0.043028 0.728293
--0.450878 0.000000 0.131722 -0.683913 0.043028 0.728293
--0.447323 0.056510 0.131722 -0.683913 0.043028 0.728293
--0.447323 0.056510 0.131722 -0.587384 0.036955 0.808465
--0.450878 0.000000 0.131722 -0.587384 0.036955 0.808465
--0.433510 0.000000 0.144341 -0.587384 0.036955 0.808465
--0.430092 0.054333 0.144341 -0.587384 0.036955 0.808465
--0.430092 0.054333 0.144341 -0.481533 0.030295 0.875904
--0.433510 0.000000 0.144341 -0.481533 0.030295 0.875904
--0.414697 0.000000 0.154684 -0.481533 0.030295 0.875904
--0.411427 0.051975 0.154684 -0.481533 0.030295 0.875904
--0.411427 0.051975 0.154684 -0.368025 0.023154 0.929527
--0.414697 0.000000 0.154684 -0.368025 0.023154 0.929527
--0.394736 0.000000 0.162587 -0.368025 0.023154 0.929527
--0.391623 0.049474 0.162587 -0.368025 0.023154 0.929527
--0.391623 0.049474 0.162587 -0.248660 0.015644 0.968464
--0.394736 0.000000 0.162587 -0.248660 0.015644 0.968464
--0.373942 0.000000 0.167926 -0.248660 0.015644 0.968464
--0.370993 0.046867 0.167926 -0.248660 0.015644 0.968464
--0.370993 0.046867 0.167926 -0.125330 0.007885 0.992084
--0.373942 0.000000 0.167926 -0.125330 0.007885 0.992084
--0.352643 0.000000 0.170617 -0.125330 0.007885 0.992084
--0.349862 0.044198 0.170617 -0.125330 0.007885 0.992084
--0.352643 0.000000 0.170617 0.000000 0.000000 1.000000
--0.331174 0.000000 0.170617 0.000000 0.000000 1.000000
--0.328563 0.041507 0.170617 0.125330 -0.007885 0.992084
--0.331174 0.000000 0.170617 0.125330 -0.007885 0.992084
--0.309875 0.000000 0.167926 0.125330 -0.007885 0.992084
--0.307431 0.038838 0.167926 0.125330 -0.007885 0.992084
--0.307431 0.038838 0.167926 0.248659 -0.015644 0.968465
--0.309875 0.000000 0.167926 0.248659 -0.015644 0.968465
--0.289081 0.000000 0.162587 0.248659 -0.015644 0.968465
--0.286801 0.036231 0.162587 0.248659 -0.015644 0.968465
--0.286801 0.036231 0.162587 0.368026 -0.023154 0.929527
--0.289081 0.000000 0.162587 0.368026 -0.023154 0.929527
--0.269120 0.000000 0.154684 0.368026 -0.023154 0.929527
--0.266997 0.033730 0.154684 0.368026 -0.023154 0.929527
--0.266997 0.033730 0.154684 0.481532 -0.030296 0.875905
--0.269120 0.000000 0.154684 0.481532 -0.030296 0.875905
--0.250306 0.000000 0.144341 0.481532 -0.030296 0.875905
--0.248333 0.031372 0.144341 0.481532 -0.030296 0.875905
--0.248333 0.031372 0.144341 0.587384 -0.036955 0.808464
--0.250306 0.000000 0.144341 0.587384 -0.036955 0.808464
--0.232938 0.000000 0.131722 0.587384 -0.036955 0.808464
--0.231101 0.029195 0.131722 0.587384 -0.036955 0.808464
--0.231101 0.029195 0.131722 0.683913 -0.043028 0.728293
--0.232938 0.000000 0.131722 0.683913 -0.043028 0.728293
--0.217288 0.000000 0.117026 0.683913 -0.043028 0.728293
--0.215575 0.027233 0.117026 0.683913 -0.043028 0.728293
--0.215575 0.027233 0.117026 0.769610 -0.048419 0.636676
--0.217288 0.000000 0.117026 0.769610 -0.048419 0.636676
--0.203603 0.000000 0.100484 0.769610 -0.048419 0.636676
--0.201998 0.025518 0.100484 0.769610 -0.048419 0.636676
--0.201998 0.025518 0.100484 0.843139 -0.053045 0.535073
--0.203603 0.000000 0.100484 0.843139 -0.053045 0.535073
--0.192100 0.000000 0.082358 0.843139 -0.053045 0.535073
--0.190585 0.024077 0.082358 0.843139 -0.053045 0.535073
--0.190585 0.024077 0.082358 0.903365 -0.056834 0.425091
--0.192100 0.000000 0.082358 0.903365 -0.056834 0.425091
--0.182959 0.000000 0.062932 0.903365 -0.056834 0.425091
--0.181516 0.022931 0.062932 0.903365 -0.056834 0.425091
--0.181516 0.022931 0.062932 0.949359 -0.059728 0.308465
--0.182959 0.000000 0.062932 0.949359 -0.059728 0.308465
--0.176325 0.000000 0.042515 0.949359 -0.059728 0.308465
--0.174935 0.022099 0.042515 0.949359 -0.059728 0.308465
--0.174935 0.022099 0.042515 0.980417 -0.061683 0.187025
--0.176325 0.000000 0.042515 0.980417 -0.061683 0.187025
--0.172302 0.000000 0.021426 0.980417 -0.061683 0.187025
--0.170943 0.021595 0.021426 0.980417 -0.061683 0.187025
--0.170943 0.021595 0.021426 0.996065 -0.062668 0.062667
--0.172302 0.000000 0.021426 0.996065 -0.062668 0.062667
--0.170954 0.000000 0.000000 0.996065 -0.062668 0.062667
--0.169606 0.021426 0.000000 0.996065 -0.062668 0.062667
--0.169606 0.021426 0.000000 0.996065 -0.062668 -0.062667
--0.170954 0.000000 0.000000 0.996065 -0.062668 -0.062667
--0.172302 0.000000 -0.021426 0.996065 -0.062668 -0.062667
--0.170943 0.021595 -0.021426 0.996065 -0.062668 -0.062667
--0.170943 0.021595 -0.021426 0.980417 -0.061683 -0.187025
--0.172302 0.000000 -0.021426 0.980417 -0.061683 -0.187025
--0.176325 0.000000 -0.042515 0.980417 -0.061683 -0.187025
--0.174935 0.022099 -0.042515 0.980417 -0.061683 -0.187025
--0.174935 0.022099 -0.042515 0.949359 -0.059728 -0.308465
--0.176325 0.000000 -0.042515 0.949359 -0.059728 -0.308465
--0.182959 0.000000 -0.062932 0.949359 -0.059728 -0.308465
--0.181516 0.022931 -0.062932 0.949359 -0.059728 -0.308465
--0.181516 0.022931 -0.062932 0.903365 -0.056834 -0.425091
--0.182959 0.000000 -0.062932 0.903365 -0.056834 -0.425091
--0.192100 0.000000 -0.082358 0.903365 -0.056834 -0.425091
--0.190585 0.024077 -0.082358 0.903365 -0.056834 -0.425091
--0.190585 0.024077 -0.082358 0.843139 -0.053045 -0.535073
--0.192100 0.000000 -0.082358 0.843139 -0.053045 -0.535073
--0.203603 0.000000 -0.100484 0.843139 -0.053045 -0.535073
--0.201998 0.025518 -0.100484 0.843139 -0.053045 -0.535073
--0.201998 0.025518 -0.100484 0.769610 -0.048419 -0.636676
--0.203603 0.000000 -0.100484 0.769610 -0.048419 -0.636676
--0.217288 0.000000 -0.117026 0.769610 -0.048419 -0.636676
--0.215575 0.027233 -0.117026 0.769610 -0.048419 -0.636676
--0.215575 0.027233 -0.117026 0.683913 -0.043028 -0.728293
--0.217288 0.000000 -0.117026 0.683913 -0.043028 -0.728293
--0.232938 0.000000 -0.131722 0.683913 -0.043028 -0.728293
--0.231101 0.029195 -0.131722 0.683913 -0.043028 -0.728293
--0.231101 0.029195 -0.131722 0.587384 -0.036955 -0.808464
--0.232938 0.000000 -0.131722 0.587384 -0.036955 -0.808464
--0.250306 0.000000 -0.144341 0.587384 -0.036955 -0.808464
--0.248333 0.031372 -0.144341 0.587384 -0.036955 -0.808464
--0.248333 0.031372 -0.144341 0.481532 -0.030296 -0.875905
--0.250306 0.000000 -0.144341 0.481532 -0.030296 -0.875905
--0.269120 0.000000 -0.154684 0.481532 -0.030296 -0.875905
--0.266997 0.033730 -0.154684 0.481532 -0.030296 -0.875905
--0.266997 0.033730 -0.154684 0.368026 -0.023154 -0.929527
--0.269120 0.000000 -0.154684 0.368026 -0.023154 -0.929527
--0.289081 0.000000 -0.162587 0.368026 -0.023154 -0.929527
--0.286801 0.036231 -0.162587 0.368026 -0.023154 -0.929527
--0.286801 0.036231 -0.162587 0.248659 -0.015644 -0.968465
--0.289081 0.000000 -0.162587 0.248659 -0.015644 -0.968465
--0.309875 0.000000 -0.167926 0.248659 -0.015644 -0.968465
--0.307431 0.038838 -0.167926 0.248659 -0.015644 -0.968465
--0.307431 0.038838 -0.167926 0.125330 -0.007885 -0.992084
--0.309875 0.000000 -0.167926 0.125330 -0.007885 -0.992084
--0.331174 0.000000 -0.170617 0.125330 -0.007885 -0.992084
--0.328563 0.041507 -0.170617 0.125330 -0.007885 -0.992084
--0.331174 0.000000 -0.170617 0.000000 0.000000 -1.000000
--0.352643 0.000000 -0.170617 0.000000 0.000000 -1.000000
--0.349862 0.044198 -0.170617 -0.125330 0.007885 -0.992084
--0.352643 0.000000 -0.170617 -0.125330 0.007885 -0.992084
--0.373942 0.000000 -0.167926 -0.125330 0.007885 -0.992084
--0.370993 0.046867 -0.167926 -0.125330 0.007885 -0.992084
--0.370993 0.046867 -0.167926 -0.248660 0.015644 -0.968464
--0.373942 0.000000 -0.167926 -0.248660 0.015644 -0.968464
--0.394736 0.000000 -0.162587 -0.248660 0.015644 -0.968464
--0.391623 0.049474 -0.162587 -0.248660 0.015644 -0.968464
--0.391623 0.049474 -0.162587 -0.368025 0.023154 -0.929527
--0.394736 0.000000 -0.162587 -0.368025 0.023154 -0.929527
--0.414697 0.000000 -0.154684 -0.368025 0.023154 -0.929527
--0.411427 0.051975 -0.154684 -0.368025 0.023154 -0.929527
--0.411427 0.051975 -0.154684 -0.481533 0.030295 -0.875904
--0.414697 0.000000 -0.154684 -0.481533 0.030295 -0.875904
--0.433510 0.000000 -0.144341 -0.481533 0.030295 -0.875904
--0.430092 0.054333 -0.144341 -0.481533 0.030295 -0.875904
--0.430092 0.054333 -0.144341 -0.587384 0.036955 -0.808465
--0.433510 0.000000 -0.144341 -0.587384 0.036955 -0.808465
--0.450878 0.000000 -0.131722 -0.587384 0.036955 -0.808465
--0.447323 0.056510 -0.131722 -0.587384 0.036955 -0.808465
--0.447323 0.056510 -0.131722 -0.683913 0.043028 -0.728293
--0.450878 0.000000 -0.131722 -0.683913 0.043028 -0.728293
--0.466528 0.000000 -0.117026 -0.683913 0.043028 -0.728293
--0.462850 0.058471 -0.117026 -0.683913 0.043028 -0.728293
--0.462850 0.058471 -0.117026 -0.769610 0.048420 -0.636676
--0.466528 0.000000 -0.117026 -0.769610 0.048420 -0.636676
--0.480213 0.000000 -0.100484 -0.769610 0.048420 -0.636676
--0.476426 0.060187 -0.100484 -0.769610 0.048420 -0.636676
--0.476426 0.060187 -0.100484 -0.843139 0.053046 -0.535073
--0.480213 0.000000 -0.100484 -0.843139 0.053046 -0.535073
--0.491716 0.000000 -0.082358 -0.843139 0.053046 -0.535073
--0.487839 0.061628 -0.082358 -0.843139 0.053046 -0.535073
--0.487839 0.061628 -0.082358 -0.903365 0.056835 -0.425091
--0.491716 0.000000 -0.082358 -0.903365 0.056835 -0.425091
--0.500857 0.000000 -0.062932 -0.903365 0.056835 -0.425091
--0.496908 0.062774 -0.062932 -0.903365 0.056835 -0.425091
--0.496908 0.062774 -0.062932 -0.949358 0.059728 -0.308466
--0.500857 0.000000 -0.062932 -0.949358 0.059728 -0.308466
--0.507491 0.000000 -0.042515 -0.949358 0.059728 -0.308466
--0.503490 0.063606 -0.042515 -0.949358 0.059728 -0.308466
--0.503490 0.063606 -0.042515 -0.980417 0.061682 -0.187024
--0.507491 0.000000 -0.042515 -0.980417 0.061682 -0.187024
--0.511514 0.000000 -0.021426 -0.980417 0.061682 -0.187024
--0.507481 0.064110 -0.021426 -0.980417 0.061682 -0.187024
--0.507481 0.064110 -0.021426 -0.996065 0.062668 -0.062666
--0.511514 0.000000 -0.021426 -0.996065 0.062668 -0.062666
--0.512862 0.000000 0.000000 -0.996065 0.062668 -0.062666
--0.508818 0.064279 0.000000 -0.996065 0.062668 -0.062666
--0.512862 0.000000 0.000000 -0.996065 -0.062667 0.062665
--0.508818 -0.064278 0.000000 -0.996065 -0.062667 0.062665
--0.507481 -0.064109 0.021426 -0.996065 -0.062667 0.062665
--0.511514 0.000000 0.021426 -0.996065 -0.062667 0.062665
--0.511514 0.000000 0.021426 -0.980417 -0.061682 0.187026
--0.507481 -0.064109 0.021426 -0.980417 -0.061682 0.187026
--0.503490 -0.063605 0.042515 -0.980417 -0.061682 0.187026
--0.507491 0.000000 0.042515 -0.980417 -0.061682 0.187026
--0.507491 0.000000 0.042515 -0.949359 -0.059728 0.308465
--0.503490 -0.063605 0.042515 -0.949359 -0.059728 0.308465
--0.496908 -0.062774 0.062932 -0.949359 -0.059728 0.308465
--0.500857 0.000000 0.062932 -0.949359 -0.059728 0.308465
--0.500857 0.000000 0.062932 -0.903364 -0.056834 0.425091
--0.496908 -0.062774 0.062932 -0.903364 -0.056834 0.425091
--0.487839 -0.061628 0.082358 -0.903364 -0.056834 0.425091
--0.491716 0.000000 0.082358 -0.903364 -0.056834 0.425091
--0.491716 0.000000 0.082358 -0.843139 -0.053046 0.535072
--0.487839 -0.061628 0.082358 -0.843139 -0.053046 0.535072
--0.476426 -0.060186 0.100484 -0.843139 -0.053046 0.535072
--0.480213 0.000000 0.100484 -0.843139 -0.053046 0.535072
--0.480213 0.000000 0.100484 -0.769609 -0.048420 0.636677
--0.476426 -0.060186 0.100484 -0.769609 -0.048420 0.636677
--0.462850 -0.058471 0.117026 -0.769609 -0.048420 0.636677
--0.466528 0.000000 0.117026 -0.769609 -0.048420 0.636677
--0.466528 0.000000 0.117026 -0.683913 -0.043029 0.728293
--0.462850 -0.058471 0.117026 -0.683913 -0.043029 0.728293
--0.447323 -0.056510 0.131722 -0.683913 -0.043029 0.728293
--0.450878 0.000000 0.131722 -0.683913 -0.043029 0.728293
--0.450878 0.000000 0.131722 -0.587384 -0.036955 0.808464
--0.447323 -0.056510 0.131722 -0.587384 -0.036955 0.808464
--0.430092 -0.054333 0.144341 -0.587384 -0.036955 0.808464
--0.433510 0.000000 0.144341 -0.587384 -0.036955 0.808464
--0.433510 0.000000 0.144341 -0.481533 -0.030295 0.875904
--0.430092 -0.054333 0.144341 -0.481533 -0.030295 0.875904
--0.411427 -0.051975 0.154684 -0.481533 -0.030295 0.875904
--0.414697 0.000000 0.154684 -0.481533 -0.030295 0.875904
--0.414697 0.000000 0.154684 -0.368025 -0.023154 0.929527
--0.411427 -0.051975 0.154684 -0.368025 -0.023154 0.929527
--0.391623 -0.049473 0.162587 -0.368025 -0.023154 0.929527
--0.394736 0.000000 0.162587 -0.368025 -0.023154 0.929527
--0.394736 0.000000 0.162587 -0.248660 -0.015644 0.968465
--0.391623 -0.049473 0.162587 -0.248660 -0.015644 0.968465
--0.370993 -0.046867 0.167926 -0.248660 -0.015644 0.968465
--0.373942 0.000000 0.167926 -0.248660 -0.015644 0.968465
--0.373942 0.000000 0.167926 -0.125330 -0.007885 0.992084
--0.370993 -0.046867 0.167926 -0.125330 -0.007885 0.992084
--0.349862 -0.044198 0.170617 -0.125330 -0.007885 0.992084
--0.352643 0.000000 0.170617 -0.125330 -0.007885 0.992084
--0.349862 -0.044198 0.170617 0.000000 0.000000 1.000000
--0.328563 -0.041507 0.170617 0.000000 0.000000 1.000000
--0.331174 0.000000 0.170617 0.125330 0.007885 0.992084
--0.328563 -0.041507 0.170617 0.125330 0.007885 0.992084
--0.307431 -0.038837 0.167926 0.125330 0.007885 0.992084
--0.309875 0.000000 0.167926 0.125330 0.007885 0.992084
--0.309875 0.000000 0.167926 0.248659 0.015644 0.968465
--0.307431 -0.038837 0.167926 0.248659 0.015644 0.968465
--0.286801 -0.036231 0.162587 0.248659 0.015644 0.968465
--0.289081 0.000000 0.162587 0.248659 0.015644 0.968465
--0.289081 0.000000 0.162587 0.368026 0.023154 0.929527
--0.286801 -0.036231 0.162587 0.368026 0.023154 0.929527
--0.266997 -0.033729 0.154684 0.368026 0.023154 0.929527
--0.269120 0.000000 0.154684 0.368026 0.023154 0.929527
--0.269120 0.000000 0.154684 0.481532 0.030296 0.875905
--0.266997 -0.033729 0.154684 0.481532 0.030296 0.875905
--0.248333 -0.031372 0.144341 0.481532 0.030296 0.875905
--0.250306 0.000000 0.144341 0.481532 0.030296 0.875905
--0.250306 0.000000 0.144341 0.587384 0.036955 0.808464
--0.248333 -0.031372 0.144341 0.587384 0.036955 0.808464
--0.231101 -0.029195 0.131722 0.587384 0.036955 0.808464
--0.232938 0.000000 0.131722 0.587384 0.036955 0.808464
--0.232938 0.000000 0.131722 0.683913 0.043028 0.728293
--0.231101 -0.029195 0.131722 0.683913 0.043028 0.728293
--0.215575 -0.027233 0.117026 0.683913 0.043028 0.728293
--0.217288 0.000000 0.117026 0.683913 0.043028 0.728293
--0.217288 0.000000 0.117026 0.769610 0.048419 0.636676
--0.215575 -0.027233 0.117026 0.769610 0.048419 0.636676
--0.201998 -0.025518 0.100484 0.769610 0.048419 0.636676
--0.203603 0.000000 0.100484 0.769610 0.048419 0.636676
--0.203603 0.000000 0.100484 0.843139 0.053045 0.535073
--0.201998 -0.025518 0.100484 0.843139 0.053045 0.535073
--0.190585 -0.024076 0.082358 0.843139 0.053045 0.535073
--0.192100 0.000000 0.082358 0.843139 0.053045 0.535073
--0.192100 0.000000 0.082358 0.903365 0.056834 0.425091
--0.190585 -0.024076 0.082358 0.903365 0.056834 0.425091
--0.181516 -0.022931 0.062932 0.903365 0.056834 0.425091
--0.182959 0.000000 0.062932 0.903365 0.056834 0.425091
--0.182959 0.000000 0.062932 0.949359 0.059728 0.308465
--0.181516 -0.022931 0.062932 0.949359 0.059728 0.308465
--0.174935 -0.022099 0.042515 0.949359 0.059728 0.308465
--0.176325 0.000000 0.042515 0.949359 0.059728 0.308465
--0.176325 0.000000 0.042515 0.980417 0.061683 0.187025
--0.174935 -0.022099 0.042515 0.980417 0.061683 0.187025
--0.170943 -0.021595 0.021426 0.980417 0.061683 0.187025
--0.172302 0.000000 0.021426 0.980417 0.061683 0.187025
--0.172302 0.000000 0.021426 0.996065 0.062668 0.062667
--0.170943 -0.021595 0.021426 0.996065 0.062668 0.062667
--0.169606 -0.021426 0.000000 0.996065 0.062668 0.062667
--0.170954 0.000000 0.000000 0.996065 0.062668 0.062667
--0.170954 0.000000 0.000000 0.996065 0.062668 -0.062667
--0.169606 -0.021426 0.000000 0.996065 0.062668 -0.062667
--0.170943 -0.021595 -0.021426 0.996065 0.062668 -0.062667
--0.172302 0.000000 -0.021426 0.996065 0.062668 -0.062667
--0.172302 0.000000 -0.021426 0.980417 0.061683 -0.187025
--0.170943 -0.021595 -0.021426 0.980417 0.061683 -0.187025
--0.174935 -0.022099 -0.042515 0.980417 0.061683 -0.187025
--0.176325 0.000000 -0.042515 0.980417 0.061683 -0.187025
--0.176325 0.000000 -0.042515 0.949359 0.059728 -0.308465
--0.174935 -0.022099 -0.042515 0.949359 0.059728 -0.308465
--0.181516 -0.022931 -0.062932 0.949359 0.059728 -0.308465
--0.182959 0.000000 -0.062932 0.949359 0.059728 -0.308465
--0.182959 0.000000 -0.062932 0.903365 0.056834 -0.425091
--0.181516 -0.022931 -0.062932 0.903365 0.056834 -0.425091
--0.190585 -0.024076 -0.082358 0.903365 0.056834 -0.425091
--0.192100 0.000000 -0.082358 0.903365 0.056834 -0.425091
--0.192100 0.000000 -0.082358 0.843139 0.053045 -0.535073
--0.190585 -0.024076 -0.082358 0.843139 0.053045 -0.535073
--0.201998 -0.025518 -0.100484 0.843139 0.053045 -0.535073
--0.203603 0.000000 -0.100484 0.843139 0.053045 -0.535073
--0.203603 0.000000 -0.100484 0.769610 0.048419 -0.636676
--0.201998 -0.025518 -0.100484 0.769610 0.048419 -0.636676
--0.215575 -0.027233 -0.117026 0.769610 0.048419 -0.636676
--0.217288 0.000000 -0.117026 0.769610 0.048419 -0.636676
--0.217288 0.000000 -0.117026 0.683913 0.043028 -0.728293
--0.215575 -0.027233 -0.117026 0.683913 0.043028 -0.728293
--0.231101 -0.029195 -0.131722 0.683913 0.043028 -0.728293
--0.232938 0.000000 -0.131722 0.683913 0.043028 -0.728293
--0.232938 0.000000 -0.131722 0.587384 0.036955 -0.808464
--0.231101 -0.029195 -0.131722 0.587384 0.036955 -0.808464
--0.248333 -0.031372 -0.144341 0.587384 0.036955 -0.808464
--0.250306 0.000000 -0.144341 0.587384 0.036955 -0.808464
--0.250306 0.000000 -0.144341 0.481532 0.030296 -0.875905
--0.248333 -0.031372 -0.144341 0.481532 0.030296 -0.875905
--0.266997 -0.033729 -0.154684 0.481532 0.030296 -0.875905
--0.269120 0.000000 -0.154684 0.481532 0.030296 -0.875905
--0.269120 0.000000 -0.154684 0.368026 0.023154 -0.929527
--0.266997 -0.033729 -0.154684 0.368026 0.023154 -0.929527
--0.286801 -0.036231 -0.162587 0.368026 0.023154 -0.929527
--0.289081 0.000000 -0.162587 0.368026 0.023154 -0.929527
--0.289081 0.000000 -0.162587 0.248659 0.015644 -0.968465
--0.286801 -0.036231 -0.162587 0.248659 0.015644 -0.968465
--0.307431 -0.038837 -0.167926 0.248659 0.015644 -0.968465
--0.309875 0.000000 -0.167926 0.248659 0.015644 -0.968465
--0.309875 0.000000 -0.167926 0.125330 0.007885 -0.992084
--0.307431 -0.038837 -0.167926 0.125330 0.007885 -0.992084
--0.328563 -0.041507 -0.170617 0.125330 0.007885 -0.992084
--0.331174 0.000000 -0.170617 0.125330 0.007885 -0.992084
--0.328563 -0.041507 -0.170617 0.000000 0.000000 -1.000000
--0.349862 -0.044198 -0.170617 0.000000 0.000000 -1.000000
--0.352643 0.000000 -0.170617 -0.125330 -0.007885 -0.992084
--0.349862 -0.044198 -0.170617 -0.125330 -0.007885 -0.992084
--0.370993 -0.046867 -0.167926 -0.125330 -0.007885 -0.992084
--0.373942 0.000000 -0.167926 -0.125330 -0.007885 -0.992084
--0.373942 0.000000 -0.167926 -0.248660 -0.015644 -0.968465
--0.370993 -0.046867 -0.167926 -0.248660 -0.015644 -0.968465
--0.391623 -0.049473 -0.162587 -0.248660 -0.015644 -0.968465
--0.394736 0.000000 -0.162587 -0.248660 -0.015644 -0.968465
--0.394736 0.000000 -0.162587 -0.368025 -0.023154 -0.929527
--0.391623 -0.049473 -0.162587 -0.368025 -0.023154 -0.929527
--0.411427 -0.051975 -0.154684 -0.368025 -0.023154 -0.929527
--0.414697 0.000000 -0.154684 -0.368025 -0.023154 -0.929527
--0.414697 0.000000 -0.154684 -0.481533 -0.030295 -0.875904
--0.411427 -0.051975 -0.154684 -0.481533 -0.030295 -0.875904
--0.430092 -0.054333 -0.144341 -0.481533 -0.030295 -0.875904
--0.433510 0.000000 -0.144341 -0.481533 -0.030295 -0.875904
--0.433510 0.000000 -0.144341 -0.587384 -0.036955 -0.808464
--0.430092 -0.054333 -0.144341 -0.587384 -0.036955 -0.808464
--0.447323 -0.056510 -0.131722 -0.587384 -0.036955 -0.808464
--0.450878 0.000000 -0.131722 -0.587384 -0.036955 -0.808464
--0.450878 0.000000 -0.131722 -0.683913 -0.043029 -0.728293
--0.447323 -0.056510 -0.131722 -0.683913 -0.043029 -0.728293
--0.462850 -0.058471 -0.117026 -0.683913 -0.043029 -0.728293
--0.466528 0.000000 -0.117026 -0.683913 -0.043029 -0.728293
--0.466528 0.000000 -0.117026 -0.769609 -0.048420 -0.636677
--0.462850 -0.058471 -0.117026 -0.769609 -0.048420 -0.636677
--0.476426 -0.060186 -0.100484 -0.769609 -0.048420 -0.636677
--0.480213 0.000000 -0.100484 -0.769609 -0.048420 -0.636677
--0.480213 0.000000 -0.100484 -0.843139 -0.053046 -0.535072
--0.476426 -0.060186 -0.100484 -0.843139 -0.053046 -0.535072
--0.487839 -0.061628 -0.082358 -0.843139 -0.053046 -0.535072
--0.491716 0.000000 -0.082358 -0.843139 -0.053046 -0.535072
--0.491716 0.000000 -0.082358 -0.903364 -0.056834 -0.425091
--0.487839 -0.061628 -0.082358 -0.903364 -0.056834 -0.425091
--0.496908 -0.062774 -0.062932 -0.903364 -0.056834 -0.425091
--0.500857 0.000000 -0.062932 -0.903364 -0.056834 -0.425091
--0.500857 0.000000 -0.062932 -0.949359 -0.059728 -0.308465
--0.496908 -0.062774 -0.062932 -0.949359 -0.059728 -0.308465
--0.503490 -0.063605 -0.042515 -0.949359 -0.059728 -0.308465
--0.507491 0.000000 -0.042515 -0.949359 -0.059728 -0.308465
--0.507491 0.000000 -0.042515 -0.980417 -0.061682 -0.187026
--0.503490 -0.063605 -0.042515 -0.980417 -0.061682 -0.187026
--0.507481 -0.064109 -0.021426 -0.980417 -0.061682 -0.187026
--0.511514 0.000000 -0.021426 -0.980417 -0.061682 -0.187026
--0.511514 0.000000 -0.021426 -0.996065 -0.062667 -0.062665
--0.507481 -0.064109 -0.021426 -0.996065 -0.062667 -0.062665
--0.508818 -0.064278 0.000000 -0.996065 -0.062667 -0.062665
--0.512862 0.000000 0.000000 -0.996065 -0.062667 -0.062665
--0.508818 -0.064278 0.000000 -0.980357 -0.187012 0.062665
--0.496750 -0.127543 0.000000 -0.980357 -0.187012 0.062665
--0.495444 -0.127208 0.021426 -0.980357 -0.187012 0.062665
--0.507481 -0.064109 0.021426 -0.980357 -0.187012 0.062665
--0.507481 -0.064109 0.021426 -0.964955 -0.184075 0.187027
--0.495444 -0.127208 0.021426 -0.964955 -0.184075 0.187027
--0.491548 -0.126208 0.042515 -0.964955 -0.184075 0.187027
--0.503490 -0.063605 0.042515 -0.964955 -0.184075 0.187027
--0.503490 -0.063605 0.042515 -0.934387 -0.178244 0.308463
--0.491548 -0.126208 0.042515 -0.934387 -0.178244 0.308463
--0.485122 -0.124558 0.062932 -0.934387 -0.178244 0.308463
--0.496908 -0.062774 0.062932 -0.934387 -0.178244 0.308463
--0.496908 -0.062774 0.062932 -0.889118 -0.169608 0.425092
--0.485122 -0.124558 0.062932 -0.889118 -0.169608 0.425092
--0.476268 -0.122285 0.082358 -0.889118 -0.169608 0.425092
--0.487839 -0.061628 0.082358 -0.889118 -0.169608 0.425092
--0.487839 -0.061628 0.082358 -0.829842 -0.158301 0.535073
--0.476268 -0.122285 0.082358 -0.829842 -0.158301 0.535073
--0.465126 -0.119424 0.100484 -0.829842 -0.158301 0.535073
--0.476426 -0.060186 0.100484 -0.829842 -0.158301 0.535073
--0.476426 -0.060186 0.100484 -0.757472 -0.144495 0.636676
--0.465126 -0.119424 0.100484 -0.757472 -0.144495 0.636676
--0.451872 -0.116021 0.117026 -0.757472 -0.144495 0.636676
--0.462850 -0.058471 0.117026 -0.757472 -0.144495 0.636676
--0.462850 -0.058471 0.117026 -0.673128 -0.128405 0.728293
--0.451872 -0.116021 0.117026 -0.673128 -0.128405 0.728293
--0.436713 -0.112129 0.131722 -0.673128 -0.128405 0.728293
--0.447323 -0.056510 0.131722 -0.673128 -0.128405 0.728293
--0.447323 -0.056510 0.131722 -0.578120 -0.110282 0.808465
--0.436713 -0.112129 0.131722 -0.578120 -0.110282 0.808465
--0.419890 -0.107809 0.144341 -0.578120 -0.110282 0.808465
--0.430092 -0.054333 0.144341 -0.578120 -0.110282 0.808465
--0.430092 -0.054333 0.144341 -0.473939 -0.090409 0.875904
--0.419890 -0.107809 0.144341 -0.473939 -0.090409 0.875904
--0.401669 -0.103131 0.154684 -0.473939 -0.090409 0.875904
--0.411427 -0.051975 0.154684 -0.473939 -0.090409 0.875904
--0.411427 -0.051975 0.154684 -0.362221 -0.069097 0.929528
--0.401669 -0.103131 0.154684 -0.362221 -0.069097 0.929528
--0.382335 -0.098167 0.162587 -0.362221 -0.069097 0.929528
--0.391623 -0.049473 0.162587 -0.362221 -0.069097 0.929528
--0.391623 -0.049473 0.162587 -0.244738 -0.046686 0.968464
--0.382335 -0.098167 0.162587 -0.244738 -0.046686 0.968464
--0.362194 -0.092995 0.167926 -0.244738 -0.046686 0.968464
--0.370993 -0.046867 0.167926 -0.244738 -0.046686 0.968464
--0.370993 -0.046867 0.167926 -0.123353 -0.023531 0.992084
--0.362194 -0.092995 0.167926 -0.123353 -0.023531 0.992084
--0.341564 -0.087698 0.170617 -0.123353 -0.023531 0.992084
--0.349862 -0.044198 0.170617 -0.123353 -0.023531 0.992084
--0.341564 -0.087698 0.170617 0.000000 0.000000 1.000000
--0.320770 -0.082359 0.170617 0.000000 0.000000 1.000000
--0.328563 -0.041507 0.170617 0.123353 0.023531 0.992084
--0.320770 -0.082359 0.170617 0.123353 0.023531 0.992084
--0.300139 -0.077063 0.167926 0.123353 0.023531 0.992084
--0.307431 -0.038837 0.167926 0.123353 0.023531 0.992084
--0.307431 -0.038837 0.167926 0.244738 0.046686 0.968465
--0.300139 -0.077063 0.167926 0.244738 0.046686 0.968465
--0.279999 -0.071891 0.162587 0.244738 0.046686 0.968465
--0.286801 -0.036231 0.162587 0.244738 0.046686 0.968465
--0.286801 -0.036231 0.162587 0.362222 0.069097 0.929527
--0.279999 -0.071891 0.162587 0.362222 0.069097 0.929527
--0.260665 -0.066927 0.154684 0.362222 0.069097 0.929527
--0.266997 -0.033729 0.154684 0.362222 0.069097 0.929527
--0.266997 -0.033729 0.154684 0.473939 0.090408 0.875904
--0.260665 -0.066927 0.154684 0.473939 0.090408 0.875904
--0.242443 -0.062249 0.144341 0.473939 0.090408 0.875904
--0.248333 -0.031372 0.144341 0.473939 0.090408 0.875904
--0.248333 -0.031372 0.144341 0.578121 0.110282 0.808464
--0.242443 -0.062249 0.144341 0.578121 0.110282 0.808464
--0.225620 -0.057929 0.131722 0.578121 0.110282 0.808464
--0.231101 -0.029195 0.131722 0.578121 0.110282 0.808464
--0.231101 -0.029195 0.131722 0.673128 0.128405 0.728293
--0.225620 -0.057929 0.131722 0.673128 0.128405 0.728293
--0.210462 -0.054037 0.117026 0.673128 0.128405 0.728293
--0.215575 -0.027233 0.117026 0.673128 0.128405 0.728293
--0.215575 -0.027233 0.117026 0.757473 0.144495 0.636676
--0.210462 -0.054037 0.117026 0.757473 0.144495 0.636676
--0.197207 -0.050634 0.100484 0.757473 0.144495 0.636676
--0.201998 -0.025518 0.100484 0.757473 0.144495 0.636676
--0.201998 -0.025518 0.100484 0.829842 0.158300 0.535074
--0.197207 -0.050634 0.100484 0.829842 0.158300 0.535074
--0.186065 -0.047773 0.082358 0.829842 0.158300 0.535074
--0.190585 -0.024076 0.082358 0.829842 0.158300 0.535074
--0.190585 -0.024076 0.082358 0.889118 0.169608 0.425091
--0.186065 -0.047773 0.082358 0.889118 0.169608 0.425091
--0.177211 -0.045500 0.062932 0.889118 0.169608 0.425091
--0.181516 -0.022931 0.062932 0.889118 0.169608 0.425091
--0.181516 -0.022931 0.062932 0.934387 0.178244 0.308466
--0.177211 -0.045500 0.062932 0.934387 0.178244 0.308466
--0.170785 -0.043850 0.042515 0.934387 0.178244 0.308466
--0.174935 -0.022099 0.042515 0.934387 0.178244 0.308466
--0.174935 -0.022099 0.042515 0.964955 0.184075 0.187025
--0.170785 -0.043850 0.042515 0.964955 0.184075 0.187025
--0.166889 -0.042850 0.021426 0.964955 0.184075 0.187025
--0.170943 -0.021595 0.021426 0.964955 0.184075 0.187025
--0.170943 -0.021595 0.021426 0.980357 0.187012 0.062667
--0.166889 -0.042850 0.021426 0.980357 0.187012 0.062667
--0.165583 -0.042514 0.000000 0.980357 0.187012 0.062667
--0.169606 -0.021426 0.000000 0.980357 0.187012 0.062667
--0.169606 -0.021426 0.000000 0.980357 0.187012 -0.062667
--0.165583 -0.042514 0.000000 0.980357 0.187012 -0.062667
--0.166889 -0.042850 -0.021426 0.980357 0.187012 -0.062667
--0.170943 -0.021595 -0.021426 0.980357 0.187012 -0.062667
--0.170943 -0.021595 -0.021426 0.964955 0.184075 -0.187025
--0.166889 -0.042850 -0.021426 0.964955 0.184075 -0.187025
--0.170785 -0.043850 -0.042515 0.964955 0.184075 -0.187025
--0.174935 -0.022099 -0.042515 0.964955 0.184075 -0.187025
--0.174935 -0.022099 -0.042515 0.934387 0.178244 -0.308466
--0.170785 -0.043850 -0.042515 0.934387 0.178244 -0.308466
--0.177211 -0.045500 -0.062932 0.934387 0.178244 -0.308466
--0.181516 -0.022931 -0.062932 0.934387 0.178244 -0.308466
--0.181516 -0.022931 -0.062932 0.889118 0.169608 -0.425091
--0.177211 -0.045500 -0.062932 0.889118 0.169608 -0.425091
--0.186065 -0.047773 -0.082358 0.889118 0.169608 -0.425091
--0.190585 -0.024076 -0.082358 0.889118 0.169608 -0.425091
--0.190585 -0.024076 -0.082358 0.829842 0.158300 -0.535074
--0.186065 -0.047773 -0.082358 0.829842 0.158300 -0.535074
--0.197207 -0.050634 -0.100484 0.829842 0.158300 -0.535074
--0.201998 -0.025518 -0.100484 0.829842 0.158300 -0.535074
--0.201998 -0.025518 -0.100484 0.757473 0.144495 -0.636676
--0.197207 -0.050634 -0.100484 0.757473 0.144495 -0.636676
--0.210462 -0.054037 -0.117026 0.757473 0.144495 -0.636676
--0.215575 -0.027233 -0.117026 0.757473 0.144495 -0.636676
--0.215575 -0.027233 -0.117026 0.673128 0.128405 -0.728293
--0.210462 -0.054037 -0.117026 0.673128 0.128405 -0.728293
--0.225620 -0.057929 -0.131722 0.673128 0.128405 -0.728293
--0.231101 -0.029195 -0.131722 0.673128 0.128405 -0.728293
--0.231101 -0.029195 -0.131722 0.578121 0.110282 -0.808464
--0.225620 -0.057929 -0.131722 0.578121 0.110282 -0.808464
--0.242443 -0.062249 -0.144341 0.578121 0.110282 -0.808464
--0.248333 -0.031372 -0.144341 0.578121 0.110282 -0.808464
--0.248333 -0.031372 -0.144341 0.473939 0.090408 -0.875904
--0.242443 -0.062249 -0.144341 0.473939 0.090408 -0.875904
--0.260665 -0.066927 -0.154684 0.473939 0.090408 -0.875904
--0.266997 -0.033729 -0.154684 0.473939 0.090408 -0.875904
--0.266997 -0.033729 -0.154684 0.362222 0.069097 -0.929527
--0.260665 -0.066927 -0.154684 0.362222 0.069097 -0.929527
--0.279999 -0.071891 -0.162587 0.362222 0.069097 -0.929527
--0.286801 -0.036231 -0.162587 0.362222 0.069097 -0.929527
--0.286801 -0.036231 -0.162587 0.244738 0.046686 -0.968465
--0.279999 -0.071891 -0.162587 0.244738 0.046686 -0.968465
--0.300139 -0.077063 -0.167926 0.244738 0.046686 -0.968465
--0.307431 -0.038837 -0.167926 0.244738 0.046686 -0.968465
--0.307431 -0.038837 -0.167926 0.123353 0.023531 -0.992084
--0.300139 -0.077063 -0.167926 0.123353 0.023531 -0.992084
--0.320770 -0.082359 -0.170617 0.123353 0.023531 -0.992084
--0.328563 -0.041507 -0.170617 0.123353 0.023531 -0.992084
--0.320770 -0.082359 -0.170617 0.000000 0.000000 -1.000000
--0.341564 -0.087698 -0.170617 0.000000 0.000000 -1.000000
--0.349862 -0.044198 -0.170617 -0.123353 -0.023531 -0.992084
--0.341564 -0.087698 -0.170617 -0.123353 -0.023531 -0.992084
--0.362194 -0.092995 -0.167926 -0.123353 -0.023531 -0.992084
--0.370993 -0.046867 -0.167926 -0.123353 -0.023531 -0.992084
--0.370993 -0.046867 -0.167926 -0.244738 -0.046686 -0.968464
--0.362194 -0.092995 -0.167926 -0.244738 -0.046686 -0.968464
--0.382335 -0.098167 -0.162587 -0.244738 -0.046686 -0.968464
--0.391623 -0.049473 -0.162587 -0.244738 -0.046686 -0.968464
--0.391623 -0.049473 -0.162587 -0.362221 -0.069097 -0.929528
--0.382335 -0.098167 -0.162587 -0.362221 -0.069097 -0.929528
--0.401669 -0.103131 -0.154684 -0.362221 -0.069097 -0.929528
--0.411427 -0.051975 -0.154684 -0.362221 -0.069097 -0.929528
--0.411427 -0.051975 -0.154684 -0.473939 -0.090409 -0.875904
--0.401669 -0.103131 -0.154684 -0.473939 -0.090409 -0.875904
--0.419890 -0.107809 -0.144341 -0.473939 -0.090409 -0.875904
--0.430092 -0.054333 -0.144341 -0.473939 -0.090409 -0.875904
--0.430092 -0.054333 -0.144341 -0.578120 -0.110282 -0.808465
--0.419890 -0.107809 -0.144341 -0.578120 -0.110282 -0.808465
--0.436713 -0.112129 -0.131722 -0.578120 -0.110282 -0.808465
--0.447323 -0.056510 -0.131722 -0.578120 -0.110282 -0.808465
--0.447323 -0.056510 -0.131722 -0.673128 -0.128405 -0.728293
--0.436713 -0.112129 -0.131722 -0.673128 -0.128405 -0.728293
--0.451872 -0.116021 -0.117026 -0.673128 -0.128405 -0.728293
--0.462850 -0.058471 -0.117026 -0.673128 -0.128405 -0.728293
--0.462850 -0.058471 -0.117026 -0.757472 -0.144495 -0.636676
--0.451872 -0.116021 -0.117026 -0.757472 -0.144495 -0.636676
--0.465126 -0.119424 -0.100484 -0.757472 -0.144495 -0.636676
--0.476426 -0.060186 -0.100484 -0.757472 -0.144495 -0.636676
--0.476426 -0.060186 -0.100484 -0.829842 -0.158301 -0.535073
--0.465126 -0.119424 -0.100484 -0.829842 -0.158301 -0.535073
--0.476268 -0.122285 -0.082358 -0.829842 -0.158301 -0.535073
--0.487839 -0.061628 -0.082358 -0.829842 -0.158301 -0.535073
--0.487839 -0.061628 -0.082358 -0.889118 -0.169608 -0.425092
--0.476268 -0.122285 -0.082358 -0.889118 -0.169608 -0.425092
--0.485122 -0.124558 -0.062932 -0.889118 -0.169608 -0.425092
--0.496908 -0.062774 -0.062932 -0.889118 -0.169608 -0.425092
--0.496908 -0.062774 -0.062932 -0.934387 -0.178244 -0.308463
--0.485122 -0.124558 -0.062932 -0.934387 -0.178244 -0.308463
--0.491548 -0.126208 -0.042515 -0.934387 -0.178244 -0.308463
--0.503490 -0.063605 -0.042515 -0.934387 -0.178244 -0.308463
--0.503490 -0.063605 -0.042515 -0.964955 -0.184075 -0.187027
--0.491548 -0.126208 -0.042515 -0.964955 -0.184075 -0.187027
--0.495444 -0.127208 -0.021426 -0.964955 -0.184075 -0.187027
--0.507481 -0.064109 -0.021426 -0.964955 -0.184075 -0.187027
--0.507481 -0.064109 -0.021426 -0.980357 -0.187012 -0.062665
--0.495444 -0.127208 -0.021426 -0.980357 -0.187012 -0.062665
--0.496750 -0.127543 0.000000 -0.980357 -0.187012 -0.062665
--0.508818 -0.064278 0.000000 -0.980357 -0.187012 -0.062665
--0.496750 -0.127543 0.000000 -0.949187 -0.308410 0.062666
--0.476847 -0.188797 0.000000 -0.949187 -0.308410 0.062666
--0.475594 -0.188301 0.021426 -0.949187 -0.308410 0.062666
--0.495444 -0.127208 0.021426 -0.949187 -0.308410 0.062666
--0.495444 -0.127208 0.021426 -0.934276 -0.303563 0.187025
--0.475594 -0.188301 0.021426 -0.934276 -0.303563 0.187025
--0.471854 -0.186820 0.042515 -0.934276 -0.303563 0.187025
--0.491548 -0.126208 0.042515 -0.934276 -0.303563 0.187025
--0.491548 -0.126208 0.042515 -0.904679 -0.293947 0.308465
--0.471854 -0.186820 0.042515 -0.904679 -0.293947 0.308465
--0.465685 -0.184378 0.062932 -0.904679 -0.293947 0.308465
--0.485122 -0.124558 0.062932 -0.904679 -0.293947 0.308465
--0.485122 -0.124558 0.062932 -0.860850 -0.279706 0.425091
--0.465685 -0.184378 0.062932 -0.860850 -0.279706 0.425091
--0.457186 -0.181013 0.082358 -0.860850 -0.279706 0.425091
--0.476268 -0.122285 0.082358 -0.860850 -0.279706 0.425091
--0.476268 -0.122285 0.082358 -0.803458 -0.261058 0.535073
--0.457186 -0.181013 0.082358 -0.803458 -0.261058 0.535073
--0.446491 -0.176778 0.100484 -0.803458 -0.261058 0.535073
--0.465126 -0.119424 0.100484 -0.803458 -0.261058 0.535073
--0.465126 -0.119424 0.100484 -0.733389 -0.238292 0.636677
--0.446491 -0.176778 0.100484 -0.733389 -0.238292 0.636677
--0.433767 -0.171740 0.117026 -0.733389 -0.238292 0.636677
--0.451872 -0.116021 0.117026 -0.733389 -0.238292 0.636677
--0.451872 -0.116021 0.117026 -0.651727 -0.211759 0.728293
--0.433767 -0.171740 0.117026 -0.651727 -0.211759 0.728293
--0.419216 -0.165979 0.131722 -0.651727 -0.211759 0.728293
--0.436713 -0.112129 0.131722 -0.651727 -0.211759 0.728293
--0.436713 -0.112129 0.131722 -0.559739 -0.181870 0.808465
--0.419216 -0.165979 0.131722 -0.559739 -0.181870 0.808465
--0.403067 -0.159586 0.144341 -0.559739 -0.181870 0.808465
--0.419890 -0.107809 0.144341 -0.559739 -0.181870 0.808465
--0.419890 -0.107809 0.144341 -0.458872 -0.149096 0.875904
--0.403067 -0.159586 0.144341 -0.458872 -0.149096 0.875904
--0.385576 -0.152660 0.154684 -0.458872 -0.149096 0.875904
--0.401669 -0.103131 0.154684 -0.458872 -0.149096 0.875904
--0.401669 -0.103131 0.154684 -0.350705 -0.113950 0.929528
--0.385576 -0.152660 0.154684 -0.350705 -0.113950 0.929528
--0.367016 -0.145312 0.162587 -0.350705 -0.113950 0.929528
--0.382335 -0.098167 0.162587 -0.350705 -0.113950 0.929528
--0.382335 -0.098167 0.162587 -0.236957 -0.076992 0.968465
--0.367016 -0.145312 0.162587 -0.236957 -0.076992 0.968465
--0.347682 -0.137657 0.167926 -0.236957 -0.076992 0.968465
--0.362194 -0.092995 0.167926 -0.236957 -0.076992 0.968465
--0.362194 -0.092995 0.167926 -0.119431 -0.038806 0.992084
--0.347682 -0.137657 0.167926 -0.119431 -0.038806 0.992084
--0.327879 -0.129816 0.170617 -0.119431 -0.038806 0.992084
--0.341564 -0.087698 0.170617 -0.119431 -0.038806 0.992084
--0.327879 -0.129816 0.170617 0.000000 0.000000 1.000000
--0.307918 -0.121913 0.170617 0.000000 0.000000 1.000000
--0.320770 -0.082359 0.170617 0.119431 0.038805 0.992084
--0.307918 -0.121913 0.170617 0.119431 0.038805 0.992084
--0.288114 -0.114072 0.167926 0.119431 0.038805 0.992084
--0.300139 -0.077063 0.167926 0.119431 0.038805 0.992084
--0.300139 -0.077063 0.167926 0.236956 0.076992 0.968465
--0.288114 -0.114072 0.167926 0.236956 0.076992 0.968465
--0.268780 -0.106418 0.162587 0.236956 0.076992 0.968465
--0.279999 -0.071891 0.162587 0.236956 0.076992 0.968465
--0.279999 -0.071891 0.162587 0.350706 0.113951 0.929527
--0.268780 -0.106418 0.162587 0.350706 0.113951 0.929527
--0.250221 -0.099069 0.154684 0.350706 0.113951 0.929527
--0.260665 -0.066927 0.154684 0.350706 0.113951 0.929527
--0.260665 -0.066927 0.154684 0.458870 0.149096 0.875904
--0.250221 -0.099069 0.154684 0.458870 0.149096 0.875904
--0.232729 -0.092144 0.144341 0.458870 0.149096 0.875904
--0.242443 -0.062249 0.144341 0.458870 0.149096 0.875904
--0.242443 -0.062249 0.144341 0.559740 0.181870 0.808464
--0.232729 -0.092144 0.144341 0.559740 0.181870 0.808464
--0.216580 -0.085750 0.131722 0.559740 0.181870 0.808464
--0.225620 -0.057929 0.131722 0.559740 0.181870 0.808464
--0.225620 -0.057929 0.131722 0.651726 0.211758 0.728293
--0.216580 -0.085750 0.131722 0.651726 0.211758 0.728293
--0.202029 -0.079989 0.117026 0.651726 0.211758 0.728293
--0.210462 -0.054037 0.117026 0.651726 0.211758 0.728293
--0.210462 -0.054037 0.117026 0.733389 0.238293 0.636676
--0.202029 -0.079989 0.117026 0.733389 0.238293 0.636676
--0.189306 -0.074951 0.100484 0.733389 0.238293 0.636676
--0.197207 -0.050634 0.100484 0.733389 0.238293 0.636676
--0.197207 -0.050634 0.100484 0.803458 0.261060 0.535073
--0.189306 -0.074951 0.100484 0.803458 0.261060 0.535073
--0.178610 -0.070717 0.082358 0.803458 0.261060 0.535073
--0.186065 -0.047773 0.082358 0.803458 0.261060 0.535073
--0.186065 -0.047773 0.082358 0.860850 0.279707 0.425091
--0.178610 -0.070717 0.082358 0.860850 0.279707 0.425091
--0.170111 -0.067352 0.062932 0.860850 0.279707 0.425091
--0.177211 -0.045500 0.062932 0.860850 0.279707 0.425091
--0.177211 -0.045500 0.062932 0.904679 0.293947 0.308465
--0.170111 -0.067352 0.062932 0.904679 0.293947 0.308465
--0.163943 -0.064909 0.042515 0.904679 0.293947 0.308465
--0.170785 -0.043850 0.042515 0.904679 0.293947 0.308465
--0.170785 -0.043850 0.042515 0.934276 0.303564 0.187024
--0.163943 -0.064909 0.042515 0.934276 0.303564 0.187024
--0.160203 -0.063429 0.021426 0.934276 0.303564 0.187024
--0.166889 -0.042850 0.021426 0.934276 0.303564 0.187024
--0.166889 -0.042850 0.021426 0.949187 0.308409 0.062667
--0.160203 -0.063429 0.021426 0.949187 0.308409 0.062667
--0.158949 -0.062932 0.000000 0.949187 0.308409 0.062667
--0.165583 -0.042514 0.000000 0.949187 0.308409 0.062667
--0.165583 -0.042514 0.000000 0.949187 0.308409 -0.062667
--0.158949 -0.062932 0.000000 0.949187 0.308409 -0.062667
--0.160203 -0.063429 -0.021426 0.949187 0.308409 -0.062667
--0.166889 -0.042850 -0.021426 0.949187 0.308409 -0.062667
--0.166889 -0.042850 -0.021426 0.934276 0.303564 -0.187024
--0.160203 -0.063429 -0.021426 0.934276 0.303564 -0.187024
--0.163943 -0.064909 -0.042515 0.934276 0.303564 -0.187024
--0.170785 -0.043850 -0.042515 0.934276 0.303564 -0.187024
--0.170785 -0.043850 -0.042515 0.904679 0.293947 -0.308465
--0.163943 -0.064909 -0.042515 0.904679 0.293947 -0.308465
--0.170111 -0.067352 -0.062932 0.904679 0.293947 -0.308465
--0.177211 -0.045500 -0.062932 0.904679 0.293947 -0.308465
--0.177211 -0.045500 -0.062932 0.860850 0.279707 -0.425091
--0.170111 -0.067352 -0.062932 0.860850 0.279707 -0.425091
--0.178610 -0.070717 -0.082358 0.860850 0.279707 -0.425091
--0.186065 -0.047773 -0.082358 0.860850 0.279707 -0.425091
--0.186065 -0.047773 -0.082358 0.803458 0.261060 -0.535073
--0.178610 -0.070717 -0.082358 0.803458 0.261060 -0.535073
--0.189306 -0.074951 -0.100484 0.803458 0.261060 -0.535073
--0.197207 -0.050634 -0.100484 0.803458 0.261060 -0.535073
--0.197207 -0.050634 -0.100484 0.733389 0.238293 -0.636676
--0.189306 -0.074951 -0.100484 0.733389 0.238293 -0.636676
--0.202029 -0.079989 -0.117026 0.733389 0.238293 -0.636676
--0.210462 -0.054037 -0.117026 0.733389 0.238293 -0.636676
--0.210462 -0.054037 -0.117026 0.651726 0.211758 -0.728293
--0.202029 -0.079989 -0.117026 0.651726 0.211758 -0.728293
--0.216580 -0.085750 -0.131722 0.651726 0.211758 -0.728293
--0.225620 -0.057929 -0.131722 0.651726 0.211758 -0.728293
--0.225620 -0.057929 -0.131722 0.559740 0.181870 -0.808464
--0.216580 -0.085750 -0.131722 0.559740 0.181870 -0.808464
--0.232729 -0.092144 -0.144341 0.559740 0.181870 -0.808464
--0.242443 -0.062249 -0.144341 0.559740 0.181870 -0.808464
--0.242443 -0.062249 -0.144341 0.458870 0.149096 -0.875904
--0.232729 -0.092144 -0.144341 0.458870 0.149096 -0.875904
--0.250221 -0.099069 -0.154684 0.458870 0.149096 -0.875904
--0.260665 -0.066927 -0.154684 0.458870 0.149096 -0.875904
--0.260665 -0.066927 -0.154684 0.350706 0.113951 -0.929527
--0.250221 -0.099069 -0.154684 0.350706 0.113951 -0.929527
--0.268780 -0.106418 -0.162587 0.350706 0.113951 -0.929527
--0.279999 -0.071891 -0.162587 0.350706 0.113951 -0.929527
--0.279999 -0.071891 -0.162587 0.236956 0.076992 -0.968465
--0.268780 -0.106418 -0.162587 0.236956 0.076992 -0.968465
--0.288114 -0.114072 -0.167926 0.236956 0.076992 -0.968465
--0.300139 -0.077063 -0.167926 0.236956 0.076992 -0.968465
--0.300139 -0.077063 -0.167926 0.119431 0.038805 -0.992084
--0.288114 -0.114072 -0.167926 0.119431 0.038805 -0.992084
--0.307918 -0.121913 -0.170617 0.119431 0.038805 -0.992084
--0.320770 -0.082359 -0.170617 0.119431 0.038805 -0.992084
--0.307918 -0.121913 -0.170617 0.000000 0.000000 -1.000000
--0.327879 -0.129816 -0.170617 0.000000 0.000000 -1.000000
--0.341564 -0.087698 -0.170617 -0.119431 -0.038806 -0.992084
--0.327879 -0.129816 -0.170617 -0.119431 -0.038806 -0.992084
--0.347682 -0.137657 -0.167926 -0.119431 -0.038806 -0.992084
--0.362194 -0.092995 -0.167926 -0.119431 -0.038806 -0.992084
--0.362194 -0.092995 -0.167926 -0.236957 -0.076992 -0.968465
--0.347682 -0.137657 -0.167926 -0.236957 -0.076992 -0.968465
--0.367016 -0.145312 -0.162587 -0.236957 -0.076992 -0.968465
--0.382335 -0.098167 -0.162587 -0.236957 -0.076992 -0.968465
--0.382335 -0.098167 -0.162587 -0.350705 -0.113950 -0.929528
--0.367016 -0.145312 -0.162587 -0.350705 -0.113950 -0.929528
--0.385576 -0.152660 -0.154684 -0.350705 -0.113950 -0.929528
--0.401669 -0.103131 -0.154684 -0.350705 -0.113950 -0.929528
--0.401669 -0.103131 -0.154684 -0.458872 -0.149096 -0.875904
--0.385576 -0.152660 -0.154684 -0.458872 -0.149096 -0.875904
--0.403067 -0.159586 -0.144341 -0.458872 -0.149096 -0.875904
--0.419890 -0.107809 -0.144341 -0.458872 -0.149096 -0.875904
--0.419890 -0.107809 -0.144341 -0.559739 -0.181870 -0.808465
--0.403067 -0.159586 -0.144341 -0.559739 -0.181870 -0.808465
--0.419216 -0.165979 -0.131722 -0.559739 -0.181870 -0.808465
--0.436713 -0.112129 -0.131722 -0.559739 -0.181870 -0.808465
--0.436713 -0.112129 -0.131722 -0.651727 -0.211759 -0.728293
--0.419216 -0.165979 -0.131722 -0.651727 -0.211759 -0.728293
--0.433767 -0.171740 -0.117026 -0.651727 -0.211759 -0.728293
--0.451872 -0.116021 -0.117026 -0.651727 -0.211759 -0.728293
--0.451872 -0.116021 -0.117026 -0.733389 -0.238292 -0.636677
--0.433767 -0.171740 -0.117026 -0.733389 -0.238292 -0.636677
--0.446491 -0.176778 -0.100484 -0.733389 -0.238292 -0.636677
--0.465126 -0.119424 -0.100484 -0.733389 -0.238292 -0.636677
--0.465126 -0.119424 -0.100484 -0.803458 -0.261058 -0.535073
--0.446491 -0.176778 -0.100484 -0.803458 -0.261058 -0.535073
--0.457186 -0.181013 -0.082358 -0.803458 -0.261058 -0.535073
--0.476268 -0.122285 -0.082358 -0.803458 -0.261058 -0.535073
--0.476268 -0.122285 -0.082358 -0.860850 -0.279706 -0.425091
--0.457186 -0.181013 -0.082358 -0.860850 -0.279706 -0.425091
--0.465685 -0.184378 -0.062932 -0.860850 -0.279706 -0.425091
--0.485122 -0.124558 -0.062932 -0.860850 -0.279706 -0.425091
--0.485122 -0.124558 -0.062932 -0.904679 -0.293947 -0.308465
--0.465685 -0.184378 -0.062932 -0.904679 -0.293947 -0.308465
--0.471854 -0.186820 -0.042515 -0.904679 -0.293947 -0.308465
--0.491548 -0.126208 -0.042515 -0.904679 -0.293947 -0.308465
--0.491548 -0.126208 -0.042515 -0.934276 -0.303563 -0.187025
--0.471854 -0.186820 -0.042515 -0.934276 -0.303563 -0.187025
--0.475594 -0.188301 -0.021426 -0.934276 -0.303563 -0.187025
--0.495444 -0.127208 -0.021426 -0.934276 -0.303563 -0.187025
--0.495444 -0.127208 -0.021426 -0.949187 -0.308410 -0.062666
--0.475594 -0.188301 -0.021426 -0.949187 -0.308410 -0.062666
--0.476847 -0.188797 0.000000 -0.949187 -0.308410 -0.062666
--0.496750 -0.127543 0.000000 -0.949187 -0.308410 -0.062666
--0.476847 -0.188797 0.000000 -0.903049 -0.424942 0.062667
--0.449425 -0.247073 0.000000 -0.903049 -0.424942 0.062667
--0.448243 -0.246424 0.021426 -0.903049 -0.424942 0.062667
--0.475594 -0.188301 0.021426 -0.903049 -0.424942 0.062667
--0.475594 -0.188301 0.021426 -0.888862 -0.418266 0.187023
--0.448243 -0.246424 0.021426 -0.888862 -0.418266 0.187023
--0.444718 -0.244486 0.042515 -0.888862 -0.418266 0.187023
--0.471854 -0.186820 0.042515 -0.888862 -0.418266 0.187023
--0.471854 -0.186820 0.042515 -0.860704 -0.405016 0.308466
--0.444718 -0.244486 0.042515 -0.860704 -0.405016 0.308466
--0.438905 -0.241290 0.062932 -0.860704 -0.405016 0.308466
--0.465685 -0.184378 0.062932 -0.860704 -0.405016 0.308466
--0.465685 -0.184378 0.062932 -0.819005 -0.385394 0.425091
--0.438905 -0.241290 0.062932 -0.819005 -0.385394 0.425091
--0.430894 -0.236886 0.082358 -0.819005 -0.385394 0.425091
--0.457186 -0.181013 0.082358 -0.819005 -0.385394 0.425091
--0.457186 -0.181013 0.082358 -0.764404 -0.359701 0.535072
--0.430894 -0.236886 0.082358 -0.764404 -0.359701 0.535072
--0.420814 -0.231344 0.100484 -0.764404 -0.359701 0.535072
--0.446491 -0.176778 0.100484 -0.764404 -0.359701 0.535072
--0.446491 -0.176778 0.100484 -0.697740 -0.328331 0.636678
--0.420814 -0.231344 0.100484 -0.697740 -0.328331 0.636678
--0.408822 -0.224752 0.117026 -0.697740 -0.328331 0.636678
--0.433767 -0.171740 0.117026 -0.697740 -0.328331 0.636678
--0.433767 -0.171740 0.117026 -0.620047 -0.291772 0.728293
--0.408822 -0.224752 0.117026 -0.620047 -0.291772 0.728293
--0.395108 -0.217212 0.131722 -0.620047 -0.291772 0.728293
--0.419216 -0.165979 0.131722 -0.620047 -0.291772 0.728293
--0.419216 -0.165979 0.131722 -0.532531 -0.250590 0.808465
--0.395108 -0.217212 0.131722 -0.532531 -0.250590 0.808465
--0.379888 -0.208845 0.144341 -0.532531 -0.250590 0.808465
--0.403067 -0.159586 0.144341 -0.532531 -0.250590 0.808465
--0.403067 -0.159586 0.144341 -0.436567 -0.205432 0.875904
--0.379888 -0.208845 0.144341 -0.436567 -0.205432 0.875904
--0.363402 -0.199782 0.154684 -0.436567 -0.205432 0.875904
--0.385576 -0.152660 0.154684 -0.436567 -0.205432 0.875904
--0.385576 -0.152660 0.154684 -0.333657 -0.157007 0.929528
--0.363402 -0.199782 0.154684 -0.333657 -0.157007 0.929528
--0.345910 -0.190165 0.162587 -0.333657 -0.157007 0.929528
--0.367016 -0.145312 0.162587 -0.333657 -0.157007 0.929528
--0.367016 -0.145312 0.162587 -0.225439 -0.106083 0.968465
--0.345910 -0.190165 0.162587 -0.225439 -0.106083 0.968465
--0.327688 -0.180148 0.167926 -0.225439 -0.106083 0.968465
--0.347682 -0.137657 0.167926 -0.225439 -0.106083 0.968465
--0.347682 -0.137657 0.167926 -0.113626 -0.053468 0.992084
--0.327688 -0.180148 0.167926 -0.113626 -0.053468 0.992084
--0.309023 -0.169887 0.170617 -0.113626 -0.053468 0.992084
--0.327879 -0.129816 0.170617 -0.113626 -0.053468 0.992084
--0.309023 -0.169887 0.170617 0.000000 0.000000 1.000000
--0.290210 -0.159544 0.170617 0.000000 0.000000 1.000000
--0.307918 -0.121913 0.170617 0.113626 0.053468 0.992084
--0.290210 -0.159544 0.170617 0.113626 0.053468 0.992084
--0.271545 -0.149283 0.167926 0.113626 0.053468 0.992084
--0.288114 -0.114072 0.167926 0.113626 0.053468 0.992084
--0.288114 -0.114072 0.167926 0.225439 0.106083 0.968465
--0.271545 -0.149283 0.167926 0.225439 0.106083 0.968465
--0.253323 -0.139266 0.162587 0.225439 0.106083 0.968465
--0.268780 -0.106418 0.162587 0.225439 0.106083 0.968465
--0.268780 -0.106418 0.162587 0.333658 0.157007 0.929527
--0.253323 -0.139266 0.162587 0.333658 0.157007 0.929527
--0.235831 -0.129649 0.154684 0.333658 0.157007 0.929527
--0.250221 -0.099069 0.154684 0.333658 0.157007 0.929527
--0.250221 -0.099069 0.154684 0.436565 0.205432 0.875904
--0.235831 -0.129649 0.154684 0.436565 0.205432 0.875904
--0.219345 -0.120586 0.144341 0.436565 0.205432 0.875904
--0.232729 -0.092144 0.144341 0.436565 0.205432 0.875904
--0.232729 -0.092144 0.144341 0.532532 0.250590 0.808464
--0.219345 -0.120586 0.144341 0.532532 0.250590 0.808464
--0.204125 -0.112219 0.131722 0.532532 0.250590 0.808464
--0.216580 -0.085750 0.131722 0.532532 0.250590 0.808464
--0.216580 -0.085750 0.131722 0.620047 0.291772 0.728293
--0.204125 -0.112219 0.131722 0.620047 0.291772 0.728293
--0.190411 -0.104679 0.117026 0.620047 0.291772 0.728293
--0.202029 -0.079989 0.117026 0.620047 0.291772 0.728293
--0.202029 -0.079989 0.117026 0.697740 0.328331 0.636676
--0.190411 -0.104679 0.117026 0.697740 0.328331 0.636676
--0.178419 -0.098087 0.100484 0.697740 0.328331 0.636676
--0.189306 -0.074951 0.100484 0.697740 0.328331 0.636676
--0.189306 -0.074951 0.100484 0.764404 0.359700 0.535073
--0.178419 -0.098087 0.100484 0.764404 0.359700 0.535073
--0.168339 -0.092545 0.082358 0.764404 0.359700 0.535073
--0.178610 -0.070717 0.082358 0.764404 0.359700 0.535073
--0.178610 -0.070717 0.082358 0.819005 0.385394 0.425090
--0.168339 -0.092545 0.082358 0.819005 0.385394 0.425090
--0.160328 -0.088141 0.062932 0.819005 0.385394 0.425090
--0.170111 -0.067352 0.062932 0.819005 0.385394 0.425090
--0.170111 -0.067352 0.062932 0.860704 0.405016 0.308465
--0.160328 -0.088141 0.062932 0.860704 0.405016 0.308465
--0.154515 -0.084945 0.042515 0.860704 0.405016 0.308465
--0.163943 -0.064909 0.042515 0.860704 0.405016 0.308465
--0.163943 -0.064909 0.042515 0.888862 0.418266 0.187025
--0.154515 -0.084945 0.042515 0.888862 0.418266 0.187025
--0.150990 -0.083007 0.021426 0.888862 0.418266 0.187025
--0.160203 -0.063429 0.021426 0.888862 0.418266 0.187025
--0.160203 -0.063429 0.021426 0.903049 0.424942 0.062668
--0.150990 -0.083007 0.021426 0.903049 0.424942 0.062668
--0.149808 -0.082358 0.000000 0.903049 0.424942 0.062668
--0.158949 -0.062932 0.000000 0.903049 0.424942 0.062668
--0.158949 -0.062932 0.000000 0.903049 0.424942 -0.062668
--0.149808 -0.082358 0.000000 0.903049 0.424942 -0.062668
--0.150990 -0.083007 -0.021426 0.903049 0.424942 -0.062668
--0.160203 -0.063429 -0.021426 0.903049 0.424942 -0.062668
--0.160203 -0.063429 -0.021426 0.888862 0.418266 -0.187025
--0.150990 -0.083007 -0.021426 0.888862 0.418266 -0.187025
--0.154515 -0.084945 -0.042515 0.888862 0.418266 -0.187025
--0.163943 -0.064909 -0.042515 0.888862 0.418266 -0.187025
--0.163943 -0.064909 -0.042515 0.860704 0.405016 -0.308465
--0.154515 -0.084945 -0.042515 0.860704 0.405016 -0.308465
--0.160328 -0.088141 -0.062932 0.860704 0.405016 -0.308465
--0.170111 -0.067352 -0.062932 0.860704 0.405016 -0.308465
--0.170111 -0.067352 -0.062932 0.819005 0.385394 -0.425090
--0.160328 -0.088141 -0.062932 0.819005 0.385394 -0.425090
--0.168339 -0.092545 -0.082358 0.819005 0.385394 -0.425090
--0.178610 -0.070717 -0.082358 0.819005 0.385394 -0.425090
--0.178610 -0.070717 -0.082358 0.764404 0.359700 -0.535073
--0.168339 -0.092545 -0.082358 0.764404 0.359700 -0.535073
--0.178419 -0.098087 -0.100484 0.764404 0.359700 -0.535073
--0.189306 -0.074951 -0.100484 0.764404 0.359700 -0.535073
--0.189306 -0.074951 -0.100484 0.697740 0.328331 -0.636676
--0.178419 -0.098087 -0.100484 0.697740 0.328331 -0.636676
--0.190411 -0.104679 -0.117026 0.697740 0.328331 -0.636676
--0.202029 -0.079989 -0.117026 0.697740 0.328331 -0.636676
--0.202029 -0.079989 -0.117026 0.620047 0.291772 -0.728293
--0.190411 -0.104679 -0.117026 0.620047 0.291772 -0.728293
--0.204125 -0.112219 -0.131722 0.620047 0.291772 -0.728293
--0.216580 -0.085750 -0.131722 0.620047 0.291772 -0.728293
--0.216580 -0.085750 -0.131722 0.532532 0.250590 -0.808464
--0.204125 -0.112219 -0.131722 0.532532 0.250590 -0.808464
--0.219345 -0.120586 -0.144341 0.532532 0.250590 -0.808464
--0.232729 -0.092144 -0.144341 0.532532 0.250590 -0.808464
--0.232729 -0.092144 -0.144341 0.436565 0.205432 -0.875904
--0.219345 -0.120586 -0.144341 0.436565 0.205432 -0.875904
--0.235831 -0.129649 -0.154684 0.436565 0.205432 -0.875904
--0.250221 -0.099069 -0.154684 0.436565 0.205432 -0.875904
--0.250221 -0.099069 -0.154684 0.333658 0.157007 -0.929527
--0.235831 -0.129649 -0.154684 0.333658 0.157007 -0.929527
--0.253323 -0.139266 -0.162587 0.333658 0.157007 -0.929527
--0.268780 -0.106418 -0.162587 0.333658 0.157007 -0.929527
--0.268780 -0.106418 -0.162587 0.225439 0.106083 -0.968465
--0.253323 -0.139266 -0.162587 0.225439 0.106083 -0.968465
--0.271545 -0.149283 -0.167926 0.225439 0.106083 -0.968465
--0.288114 -0.114072 -0.167926 0.225439 0.106083 -0.968465
--0.288114 -0.114072 -0.167926 0.113626 0.053468 -0.992084
--0.271545 -0.149283 -0.167926 0.113626 0.053468 -0.992084
--0.290210 -0.159544 -0.170617 0.113626 0.053468 -0.992084
--0.307918 -0.121913 -0.170617 0.113626 0.053468 -0.992084
--0.290210 -0.159544 -0.170617 0.000000 0.000000 -1.000000
--0.309023 -0.169887 -0.170617 0.000000 0.000000 -1.000000
--0.327879 -0.129816 -0.170617 -0.113626 -0.053468 -0.992084
--0.309023 -0.169887 -0.170617 -0.113626 -0.053468 -0.992084
--0.327688 -0.180148 -0.167926 -0.113626 -0.053468 -0.992084
--0.347682 -0.137657 -0.167926 -0.113626 -0.053468 -0.992084
--0.347682 -0.137657 -0.167926 -0.225439 -0.106083 -0.968465
--0.327688 -0.180148 -0.167926 -0.225439 -0.106083 -0.968465
--0.345910 -0.190165 -0.162587 -0.225439 -0.106083 -0.968465
--0.367016 -0.145312 -0.162587 -0.225439 -0.106083 -0.968465
--0.367016 -0.145312 -0.162587 -0.333657 -0.157007 -0.929528
--0.345910 -0.190165 -0.162587 -0.333657 -0.157007 -0.929528
--0.363402 -0.199782 -0.154684 -0.333657 -0.157007 -0.929528
--0.385576 -0.152660 -0.154684 -0.333657 -0.157007 -0.929528
--0.385576 -0.152660 -0.154684 -0.436567 -0.205432 -0.875904
--0.363402 -0.199782 -0.154684 -0.436567 -0.205432 -0.875904
--0.379888 -0.208845 -0.144341 -0.436567 -0.205432 -0.875904
--0.403067 -0.159586 -0.144341 -0.436567 -0.205432 -0.875904
--0.403067 -0.159586 -0.144341 -0.532531 -0.250590 -0.808465
--0.379888 -0.208845 -0.144341 -0.532531 -0.250590 -0.808465
--0.395108 -0.217212 -0.131722 -0.532531 -0.250590 -0.808465
--0.419216 -0.165979 -0.131722 -0.532531 -0.250590 -0.808465
--0.419216 -0.165979 -0.131722 -0.620047 -0.291772 -0.728293
--0.395108 -0.217212 -0.131722 -0.620047 -0.291772 -0.728293
--0.408822 -0.224752 -0.117026 -0.620047 -0.291772 -0.728293
--0.433767 -0.171740 -0.117026 -0.620047 -0.291772 -0.728293
--0.433767 -0.171740 -0.117026 -0.697740 -0.328331 -0.636678
--0.408822 -0.224752 -0.117026 -0.697740 -0.328331 -0.636678
--0.420814 -0.231344 -0.100484 -0.697740 -0.328331 -0.636678
--0.446491 -0.176778 -0.100484 -0.697740 -0.328331 -0.636678
--0.446491 -0.176778 -0.100484 -0.764404 -0.359701 -0.535072
--0.420814 -0.231344 -0.100484 -0.764404 -0.359701 -0.535072
--0.430894 -0.236886 -0.082358 -0.764404 -0.359701 -0.535072
--0.457186 -0.181013 -0.082358 -0.764404 -0.359701 -0.535072
--0.457186 -0.181013 -0.082358 -0.819005 -0.385394 -0.425091
--0.430894 -0.236886 -0.082358 -0.819005 -0.385394 -0.425091
--0.438905 -0.241290 -0.062932 -0.819005 -0.385394 -0.425091
--0.465685 -0.184378 -0.062932 -0.819005 -0.385394 -0.425091
--0.465685 -0.184378 -0.062932 -0.860704 -0.405016 -0.308466
--0.438905 -0.241290 -0.062932 -0.860704 -0.405016 -0.308466
--0.444718 -0.244486 -0.042515 -0.860704 -0.405016 -0.308466
--0.471854 -0.186820 -0.042515 -0.860704 -0.405016 -0.308466
--0.471854 -0.186820 -0.042515 -0.888862 -0.418266 -0.187023
--0.444718 -0.244486 -0.042515 -0.888862 -0.418266 -0.187023
--0.448243 -0.246424 -0.021426 -0.888862 -0.418266 -0.187023
--0.475594 -0.188301 -0.021426 -0.888862 -0.418266 -0.187023
--0.475594 -0.188301 -0.021426 -0.903049 -0.424942 -0.062667
--0.448243 -0.246424 -0.021426 -0.903049 -0.424942 -0.062667
--0.449425 -0.247073 0.000000 -0.903049 -0.424942 -0.062667
--0.476847 -0.188797 0.000000 -0.903049 -0.424942 -0.062667
--0.449425 -0.247073 0.000000 -0.842668 -0.534774 0.062668
--0.414914 -0.301453 0.000000 -0.842668 -0.534774 0.062668
--0.413824 -0.300660 0.021426 -0.842668 -0.534774 0.062668
--0.448243 -0.246424 0.021426 -0.842668 -0.534774 0.062668
--0.448243 -0.246424 0.021426 -0.829430 -0.526373 0.187024
--0.413824 -0.300660 0.021426 -0.829430 -0.526373 0.187024
--0.410569 -0.298296 0.042515 -0.829430 -0.526373 0.187024
--0.444718 -0.244486 0.042515 -0.829430 -0.526373 0.187024
--0.444718 -0.244486 0.042515 -0.803155 -0.509698 0.308465
--0.410569 -0.298296 0.042515 -0.803155 -0.509698 0.308465
--0.405202 -0.294396 0.062932 -0.803155 -0.509698 0.308465
--0.438905 -0.241290 0.062932 -0.803155 -0.509698 0.308465
--0.438905 -0.241290 0.062932 -0.764244 -0.485004 0.425091
--0.405202 -0.294396 0.062932 -0.764244 -0.485004 0.425091
--0.397807 -0.289024 0.082358 -0.764244 -0.485004 0.425091
--0.430894 -0.236886 0.082358 -0.764244 -0.485004 0.425091
--0.430894 -0.236886 0.082358 -0.713293 -0.452670 0.535073
--0.397807 -0.289024 0.082358 -0.713293 -0.452670 0.535073
--0.388501 -0.282262 0.100484 -0.713293 -0.452670 0.535073
--0.420814 -0.231344 0.100484 -0.713293 -0.452670 0.535073
--0.420814 -0.231344 0.100484 -0.651087 -0.413193 0.636677
--0.388501 -0.282262 0.100484 -0.651087 -0.413193 0.636677
--0.377429 -0.274218 0.117026 -0.651087 -0.413193 0.636677
--0.408822 -0.224752 0.117026 -0.651087 -0.413193 0.636677
--0.408822 -0.224752 0.117026 -0.578589 -0.367184 0.728293
--0.377429 -0.274218 0.117026 -0.578589 -0.367184 0.728293
--0.364768 -0.265020 0.131722 -0.578589 -0.367184 0.728293
--0.395108 -0.217212 0.131722 -0.578589 -0.367184 0.728293
--0.395108 -0.217212 0.131722 -0.496925 -0.315358 0.808465
--0.364768 -0.265020 0.131722 -0.496925 -0.315358 0.808465
--0.350717 -0.254811 0.144341 -0.496925 -0.315358 0.808465
--0.379888 -0.208845 0.144341 -0.496925 -0.315358 0.808465
--0.379888 -0.208845 0.144341 -0.407376 -0.258529 0.875904
--0.350717 -0.254811 0.144341 -0.407376 -0.258529 0.875904
--0.335497 -0.243753 0.154684 -0.407376 -0.258529 0.875904
--0.363402 -0.199782 0.154684 -0.407376 -0.258529 0.875904
--0.363402 -0.199782 0.154684 -0.311348 -0.197588 0.929528
--0.335497 -0.243753 0.154684 -0.311348 -0.197588 0.929528
--0.319348 -0.232020 0.162587 -0.311348 -0.197588 0.929528
--0.345910 -0.190165 0.162587 -0.311348 -0.197588 0.929528
--0.345910 -0.190165 0.162587 -0.210366 -0.133502 0.968465
--0.319348 -0.232020 0.162587 -0.210366 -0.133502 0.968465
--0.302525 -0.219797 0.167926 -0.210366 -0.133502 0.968465
--0.327688 -0.180148 0.167926 -0.210366 -0.133502 0.968465
--0.327688 -0.180148 0.167926 -0.106028 -0.067288 0.992084
--0.302525 -0.219797 0.167926 -0.106028 -0.067288 0.992084
--0.285294 -0.207278 0.170617 -0.106028 -0.067288 0.992084
--0.309023 -0.169887 0.170617 -0.106028 -0.067288 0.992084
--0.285294 -0.207278 0.170617 0.000000 -0.000000 1.000000
--0.267925 -0.194659 0.170617 0.000000 -0.000000 1.000000
--0.290210 -0.159544 0.170617 0.106028 0.067287 0.992084
--0.267925 -0.194659 0.170617 0.106028 0.067287 0.992084
--0.250694 -0.182140 0.167926 0.106028 0.067287 0.992084
--0.271545 -0.149283 0.167926 0.106028 0.067287 0.992084
--0.271545 -0.149283 0.167926 0.210365 0.133502 0.968465
--0.250694 -0.182140 0.167926 0.210365 0.133502 0.968465
--0.233871 -0.169917 0.162587 0.210365 0.133502 0.968465
--0.253323 -0.139266 0.162587 0.210365 0.133502 0.968465
--0.253323 -0.139266 0.162587 0.311349 0.197588 0.929527
--0.233871 -0.169917 0.162587 0.311349 0.197588 0.929527
--0.217722 -0.158184 0.154684 0.311349 0.197588 0.929527
--0.235831 -0.129649 0.154684 0.311349 0.197588 0.929527
--0.235831 -0.129649 0.154684 0.407375 0.258528 0.875904
--0.217722 -0.158184 0.154684 0.407375 0.258528 0.875904
--0.202502 -0.147126 0.144341 0.407375 0.258528 0.875904
--0.219345 -0.120586 0.144341 0.407375 0.258528 0.875904
--0.219345 -0.120586 0.144341 0.496925 0.315358 0.808464
--0.202502 -0.147126 0.144341 0.496925 0.315358 0.808464
--0.188451 -0.136917 0.131722 0.496925 0.315358 0.808464
--0.204125 -0.112219 0.131722 0.496925 0.315358 0.808464
--0.204125 -0.112219 0.131722 0.578589 0.367184 0.728293
--0.188451 -0.136917 0.131722 0.578589 0.367184 0.728293
--0.175790 -0.127719 0.117026 0.578589 0.367184 0.728293
--0.190411 -0.104679 0.117026 0.578589 0.367184 0.728293
--0.190411 -0.104679 0.117026 0.651088 0.413193 0.636676
--0.175790 -0.127719 0.117026 0.651088 0.413193 0.636676
--0.164719 -0.119675 0.100484 0.651088 0.413193 0.636676
--0.178419 -0.098087 0.100484 0.651088 0.413193 0.636676
--0.178419 -0.098087 0.100484 0.713293 0.452670 0.535073
--0.164719 -0.119675 0.100484 0.713293 0.452670 0.535073
--0.155412 -0.112913 0.082358 0.713293 0.452670 0.535073
--0.168339 -0.092545 0.082358 0.713293 0.452670 0.535073
--0.168339 -0.092545 0.082358 0.764244 0.485004 0.425091
--0.155412 -0.112913 0.082358 0.764244 0.485004 0.425091
--0.148017 -0.107541 0.062932 0.764244 0.485004 0.425091
--0.160328 -0.088141 0.062932 0.764244 0.485004 0.425091
--0.160328 -0.088141 0.062932 0.803155 0.509698 0.308465
--0.148017 -0.107541 0.062932 0.803155 0.509698 0.308465
--0.142650 -0.103641 0.042515 0.803155 0.509698 0.308465
--0.154515 -0.084945 0.042515 0.803155 0.509698 0.308465
--0.154515 -0.084945 0.042515 0.829430 0.526373 0.187024
--0.142650 -0.103641 0.042515 0.829430 0.526373 0.187024
--0.139395 -0.101277 0.021426 0.829430 0.526373 0.187024
--0.150990 -0.083007 0.021426 0.829430 0.526373 0.187024
--0.150990 -0.083007 0.021426 0.842668 0.534774 0.062668
--0.139395 -0.101277 0.021426 0.842668 0.534774 0.062668
--0.138305 -0.100484 0.000000 0.842668 0.534774 0.062668
--0.149808 -0.082358 0.000000 0.842668 0.534774 0.062668
--0.149808 -0.082358 0.000000 0.842668 0.534774 -0.062668
--0.138305 -0.100484 0.000000 0.842668 0.534774 -0.062668
--0.139395 -0.101277 -0.021426 0.842668 0.534774 -0.062668
--0.150990 -0.083007 -0.021426 0.842668 0.534774 -0.062668
--0.150990 -0.083007 -0.021426 0.829430 0.526373 -0.187024
--0.139395 -0.101277 -0.021426 0.829430 0.526373 -0.187024
--0.142650 -0.103641 -0.042515 0.829430 0.526373 -0.187024
--0.154515 -0.084945 -0.042515 0.829430 0.526373 -0.187024
--0.154515 -0.084945 -0.042515 0.803155 0.509698 -0.308465
--0.142650 -0.103641 -0.042515 0.803155 0.509698 -0.308465
--0.148017 -0.107541 -0.062932 0.803155 0.509698 -0.308465
--0.160328 -0.088141 -0.062932 0.803155 0.509698 -0.308465
--0.160328 -0.088141 -0.062932 0.764244 0.485004 -0.425091
--0.148017 -0.107541 -0.062932 0.764244 0.485004 -0.425091
--0.155412 -0.112913 -0.082358 0.764244 0.485004 -0.425091
--0.168339 -0.092545 -0.082358 0.764244 0.485004 -0.425091
--0.168339 -0.092545 -0.082358 0.713293 0.452670 -0.535073
--0.155412 -0.112913 -0.082358 0.713293 0.452670 -0.535073
--0.164719 -0.119675 -0.100484 0.713293 0.452670 -0.535073
--0.178419 -0.098087 -0.100484 0.713293 0.452670 -0.535073
--0.178419 -0.098087 -0.100484 0.651088 0.413193 -0.636676
--0.164719 -0.119675 -0.100484 0.651088 0.413193 -0.636676
--0.175790 -0.127719 -0.117026 0.651088 0.413193 -0.636676
--0.190411 -0.104679 -0.117026 0.651088 0.413193 -0.636676
--0.190411 -0.104679 -0.117026 0.578589 0.367184 -0.728293
--0.175790 -0.127719 -0.117026 0.578589 0.367184 -0.728293
--0.188451 -0.136917 -0.131722 0.578589 0.367184 -0.728293
--0.204125 -0.112219 -0.131722 0.578589 0.367184 -0.728293
--0.204125 -0.112219 -0.131722 0.496925 0.315358 -0.808464
--0.188451 -0.136917 -0.131722 0.496925 0.315358 -0.808464
--0.202502 -0.147126 -0.144341 0.496925 0.315358 -0.808464
--0.219345 -0.120586 -0.144341 0.496925 0.315358 -0.808464
--0.219345 -0.120586 -0.144341 0.407375 0.258528 -0.875904
--0.202502 -0.147126 -0.144341 0.407375 0.258528 -0.875904
--0.217722 -0.158184 -0.154684 0.407375 0.258528 -0.875904
--0.235831 -0.129649 -0.154684 0.407375 0.258528 -0.875904
--0.235831 -0.129649 -0.154684 0.311349 0.197588 -0.929527
--0.217722 -0.158184 -0.154684 0.311349 0.197588 -0.929527
--0.233871 -0.169917 -0.162587 0.311349 0.197588 -0.929527
--0.253323 -0.139266 -0.162587 0.311349 0.197588 -0.929527
--0.253323 -0.139266 -0.162587 0.210365 0.133502 -0.968465
--0.233871 -0.169917 -0.162587 0.210365 0.133502 -0.968465
--0.250694 -0.182140 -0.167926 0.210365 0.133502 -0.968465
--0.271545 -0.149283 -0.167926 0.210365 0.133502 -0.968465
--0.271545 -0.149283 -0.167926 0.106028 0.067287 -0.992084
--0.250694 -0.182140 -0.167926 0.106028 0.067287 -0.992084
--0.267925 -0.194659 -0.170617 0.106028 0.067287 -0.992084
--0.290210 -0.159544 -0.170617 0.106028 0.067287 -0.992084
--0.267925 -0.194659 -0.170617 0.000000 -0.000000 -1.000000
--0.285294 -0.207278 -0.170617 0.000000 -0.000000 -1.000000
--0.309023 -0.169887 -0.170617 -0.106028 -0.067288 -0.992084
--0.285294 -0.207278 -0.170617 -0.106028 -0.067288 -0.992084
--0.302525 -0.219797 -0.167926 -0.106028 -0.067288 -0.992084
--0.327688 -0.180148 -0.167926 -0.106028 -0.067288 -0.992084
--0.327688 -0.180148 -0.167926 -0.210366 -0.133502 -0.968465
--0.302525 -0.219797 -0.167926 -0.210366 -0.133502 -0.968465
--0.319348 -0.232020 -0.162587 -0.210366 -0.133502 -0.968465
--0.345910 -0.190165 -0.162587 -0.210366 -0.133502 -0.968465
--0.345910 -0.190165 -0.162587 -0.311348 -0.197588 -0.929528
--0.319348 -0.232020 -0.162587 -0.311348 -0.197588 -0.929528
--0.335497 -0.243753 -0.154684 -0.311348 -0.197588 -0.929528
--0.363402 -0.199782 -0.154684 -0.311348 -0.197588 -0.929528
--0.363402 -0.199782 -0.154684 -0.407376 -0.258529 -0.875904
--0.335497 -0.243753 -0.154684 -0.407376 -0.258529 -0.875904
--0.350717 -0.254811 -0.144341 -0.407376 -0.258529 -0.875904
--0.379888 -0.208845 -0.144341 -0.407376 -0.258529 -0.875904
--0.379888 -0.208845 -0.144341 -0.496925 -0.315358 -0.808465
--0.350717 -0.254811 -0.144341 -0.496925 -0.315358 -0.808465
--0.364768 -0.265020 -0.131722 -0.496925 -0.315358 -0.808465
--0.395108 -0.217212 -0.131722 -0.496925 -0.315358 -0.808465
--0.395108 -0.217212 -0.131722 -0.578589 -0.367184 -0.728293
--0.364768 -0.265020 -0.131722 -0.578589 -0.367184 -0.728293
--0.377429 -0.274218 -0.117026 -0.578589 -0.367184 -0.728293
--0.408822 -0.224752 -0.117026 -0.578589 -0.367184 -0.728293
--0.408822 -0.224752 -0.117026 -0.651087 -0.413193 -0.636677
--0.377429 -0.274218 -0.117026 -0.651087 -0.413193 -0.636677
--0.388501 -0.282262 -0.100484 -0.651087 -0.413193 -0.636677
--0.420814 -0.231344 -0.100484 -0.651087 -0.413193 -0.636677
--0.420814 -0.231344 -0.100484 -0.713293 -0.452670 -0.535073
--0.388501 -0.282262 -0.100484 -0.713293 -0.452670 -0.535073
--0.397807 -0.289024 -0.082358 -0.713293 -0.452670 -0.535073
--0.430894 -0.236886 -0.082358 -0.713293 -0.452670 -0.535073
--0.430894 -0.236886 -0.082358 -0.764244 -0.485004 -0.425091
--0.397807 -0.289024 -0.082358 -0.764244 -0.485004 -0.425091
--0.405202 -0.294396 -0.062932 -0.764244 -0.485004 -0.425091
--0.438905 -0.241290 -0.062932 -0.764244 -0.485004 -0.425091
--0.438905 -0.241290 -0.062932 -0.803155 -0.509698 -0.308465
--0.405202 -0.294396 -0.062932 -0.803155 -0.509698 -0.308465
--0.410569 -0.298296 -0.042515 -0.803155 -0.509698 -0.308465
--0.444718 -0.244486 -0.042515 -0.803155 -0.509698 -0.308465
--0.444718 -0.244486 -0.042515 -0.829430 -0.526373 -0.187024
--0.410569 -0.298296 -0.042515 -0.829430 -0.526373 -0.187024
--0.413824 -0.300660 -0.021426 -0.829430 -0.526373 -0.187024
--0.448243 -0.246424 -0.021426 -0.829430 -0.526373 -0.187024
--0.448243 -0.246424 -0.021426 -0.842668 -0.534774 -0.062668
--0.413824 -0.300660 -0.021426 -0.842668 -0.534774 -0.062668
--0.414914 -0.301453 0.000000 -0.842668 -0.534774 -0.062668
--0.449425 -0.247073 0.000000 -0.842668 -0.534774 -0.062668
--0.414914 -0.301453 0.000000 -0.768999 -0.636171 0.062667
--0.373861 -0.351078 0.000000 -0.768999 -0.636171 0.062667
--0.372878 -0.350156 0.021426 -0.768999 -0.636171 0.062667
--0.413824 -0.300660 0.021426 -0.768999 -0.636171 0.062667
--0.413824 -0.300660 0.021426 -0.756918 -0.626176 0.187025
--0.372878 -0.350156 0.021426 -0.756918 -0.626176 0.187025
--0.369945 -0.347402 0.042515 -0.756918 -0.626176 0.187025
--0.410569 -0.298296 0.042515 -0.756918 -0.626176 0.187025
--0.410569 -0.298296 0.042515 -0.732940 -0.606340 0.308464
--0.369945 -0.347402 0.042515 -0.732940 -0.606340 0.308464
--0.365109 -0.342860 0.062932 -0.732940 -0.606340 0.308464
--0.405202 -0.294396 0.062932 -0.732940 -0.606340 0.308464
--0.405202 -0.294396 0.062932 -0.697431 -0.576964 0.425090
--0.365109 -0.342860 0.062932 -0.697431 -0.576964 0.425090
--0.358446 -0.336603 0.082358 -0.697431 -0.576964 0.425090
--0.397807 -0.289024 0.082358 -0.697431 -0.576964 0.425090
--0.397807 -0.289024 0.082358 -0.650934 -0.538499 0.535074
--0.358446 -0.336603 0.082358 -0.650934 -0.538499 0.535074
--0.350060 -0.328728 0.100484 -0.650934 -0.538499 0.535074
--0.388501 -0.282262 0.100484 -0.650934 -0.538499 0.535074
--0.388501 -0.282262 0.100484 -0.594167 -0.491537 0.636677
--0.350060 -0.328728 0.100484 -0.594167 -0.491537 0.636677
--0.340085 -0.319361 0.117026 -0.594167 -0.491537 0.636677
--0.377429 -0.274218 0.117026 -0.594167 -0.491537 0.636677
--0.377429 -0.274218 0.117026 -0.528007 -0.436805 0.728293
--0.340085 -0.319361 0.117026 -0.528007 -0.436805 0.728293
--0.328676 -0.308647 0.131722 -0.528007 -0.436805 0.728293
--0.364768 -0.265020 0.131722 -0.528007 -0.436805 0.728293
--0.364768 -0.265020 0.131722 -0.453481 -0.375152 0.808465
--0.328676 -0.308647 0.131722 -0.453481 -0.375152 0.808465
--0.316015 -0.296758 0.144341 -0.453481 -0.375152 0.808465
--0.350717 -0.254811 0.144341 -0.453481 -0.375152 0.808465
--0.350717 -0.254811 0.144341 -0.371762 -0.307547 0.875904
--0.316015 -0.296758 0.144341 -0.371762 -0.307547 0.875904
--0.302301 -0.283880 0.154684 -0.371762 -0.307547 0.875904
--0.335497 -0.243753 0.154684 -0.371762 -0.307547 0.875904
--0.335497 -0.243753 0.154684 -0.284130 -0.235052 0.929527
--0.302301 -0.283880 0.154684 -0.284130 -0.235052 0.929527
--0.287750 -0.270215 0.162587 -0.284130 -0.235052 0.929527
--0.319348 -0.232020 0.162587 -0.284130 -0.235052 0.929527
--0.319348 -0.232020 0.162587 -0.191974 -0.158814 0.968465
--0.287750 -0.270215 0.162587 -0.191974 -0.158814 0.968465
--0.272592 -0.255981 0.167926 -0.191974 -0.158814 0.968465
--0.302525 -0.219797 0.167926 -0.191974 -0.158814 0.968465
--0.302525 -0.219797 0.167926 -0.096759 -0.080046 0.992084
--0.272592 -0.255981 0.167926 -0.096759 -0.080046 0.992084
--0.257065 -0.241400 0.170617 -0.096759 -0.080046 0.992084
--0.285294 -0.207278 0.170617 -0.096759 -0.080046 0.992084
--0.257065 -0.241400 0.170617 -0.000000 0.000000 1.000000
--0.241415 -0.226704 0.170617 -0.000000 0.000000 1.000000
--0.267925 -0.194659 0.170617 0.096759 0.080046 0.992084
--0.241415 -0.226704 0.170617 0.096759 0.080046 0.992084
--0.225889 -0.212124 0.167926 0.096759 0.080046 0.992084
--0.250694 -0.182140 0.167926 0.096759 0.080046 0.992084
--0.250694 -0.182140 0.167926 0.191974 0.158815 0.968465
--0.225889 -0.212124 0.167926 0.191974 0.158815 0.968465
--0.210731 -0.197889 0.162587 0.191974 0.158815 0.968465
--0.233871 -0.169917 0.162587 0.191974 0.158815 0.968465
--0.233871 -0.169917 0.162587 0.284130 0.235052 0.929527
--0.210731 -0.197889 0.162587 0.284130 0.235052 0.929527
--0.196180 -0.184225 0.154684 0.284130 0.235052 0.929527
--0.217722 -0.158184 0.154684 0.284130 0.235052 0.929527
--0.217722 -0.158184 0.154684 0.371761 0.307547 0.875905
--0.196180 -0.184225 0.154684 0.371761 0.307547 0.875905
--0.182466 -0.171346 0.144341 0.371761 0.307547 0.875905
--0.202502 -0.147126 0.144341 0.371761 0.307547 0.875905
--0.202502 -0.147126 0.144341 0.453482 0.375153 0.808464
--0.182466 -0.171346 0.144341 0.453482 0.375153 0.808464
--0.169805 -0.159457 0.131722 0.453482 0.375153 0.808464
--0.188451 -0.136917 0.131722 0.453482 0.375153 0.808464
--0.188451 -0.136917 0.131722 0.528006 0.436804 0.728293
--0.169805 -0.159457 0.131722 0.528006 0.436804 0.728293
--0.158396 -0.148744 0.117026 0.528006 0.436804 0.728293
--0.175790 -0.127719 0.117026 0.528006 0.436804 0.728293
--0.175790 -0.127719 0.117026 0.594167 0.491537 0.636677
--0.158396 -0.148744 0.117026 0.594167 0.491537 0.636677
--0.148421 -0.139376 0.100484 0.594167 0.491537 0.636677
--0.164719 -0.119675 0.100484 0.594167 0.491537 0.636677
--0.164719 -0.119675 0.100484 0.650935 0.538499 0.535072
--0.148421 -0.139376 0.100484 0.650935 0.538499 0.535072
--0.140035 -0.131501 0.082358 0.650935 0.538499 0.535072
--0.155412 -0.112913 0.082358 0.650935 0.538499 0.535072
--0.155412 -0.112913 0.082358 0.697431 0.576964 0.425091
--0.140035 -0.131501 0.082358 0.697431 0.576964 0.425091
--0.133372 -0.125244 0.062932 0.697431 0.576964 0.425091
--0.148017 -0.107541 0.062932 0.697431 0.576964 0.425091
--0.148017 -0.107541 0.062932 0.732940 0.606339 0.308466
--0.133372 -0.125244 0.062932 0.732940 0.606339 0.308466
--0.128535 -0.120703 0.042515 0.732940 0.606339 0.308466
--0.142650 -0.103641 0.042515 0.732940 0.606339 0.308466
--0.142650 -0.103641 0.042515 0.756918 0.626176 0.187024
--0.128535 -0.120703 0.042515 0.756918 0.626176 0.187024
--0.125603 -0.117949 0.021426 0.756918 0.626176 0.187024
--0.139395 -0.101277 0.021426 0.756918 0.626176 0.187024
--0.139395 -0.101277 0.021426 0.768999 0.636171 0.062667
--0.125603 -0.117949 0.021426 0.768999 0.636171 0.062667
--0.124620 -0.117026 0.000000 0.768999 0.636171 0.062667
--0.138305 -0.100484 0.000000 0.768999 0.636171 0.062667
--0.138305 -0.100484 0.000000 0.768999 0.636171 -0.062667
--0.124620 -0.117026 0.000000 0.768999 0.636171 -0.062667
--0.125603 -0.117949 -0.021426 0.768999 0.636171 -0.062667
--0.139395 -0.101277 -0.021426 0.768999 0.636171 -0.062667
--0.139395 -0.101277 -0.021426 0.756918 0.626176 -0.187024
--0.125603 -0.117949 -0.021426 0.756918 0.626176 -0.187024
--0.128535 -0.120703 -0.042515 0.756918 0.626176 -0.187024
--0.142650 -0.103641 -0.042515 0.756918 0.626176 -0.187024
--0.142650 -0.103641 -0.042515 0.732940 0.606339 -0.308466
--0.128535 -0.120703 -0.042515 0.732940 0.606339 -0.308466
--0.133372 -0.125244 -0.062932 0.732940 0.606339 -0.308466
--0.148017 -0.107541 -0.062932 0.732940 0.606339 -0.308466
--0.148017 -0.107541 -0.062932 0.697431 0.576964 -0.425091
--0.133372 -0.125244 -0.062932 0.697431 0.576964 -0.425091
--0.140035 -0.131501 -0.082358 0.697431 0.576964 -0.425091
--0.155412 -0.112913 -0.082358 0.697431 0.576964 -0.425091
--0.155412 -0.112913 -0.082358 0.650935 0.538499 -0.535072
--0.140035 -0.131501 -0.082358 0.650935 0.538499 -0.535072
--0.148421 -0.139376 -0.100484 0.650935 0.538499 -0.535072
--0.164719 -0.119675 -0.100484 0.650935 0.538499 -0.535072
--0.164719 -0.119675 -0.100484 0.594167 0.491537 -0.636677
--0.148421 -0.139376 -0.100484 0.594167 0.491537 -0.636677
--0.158396 -0.148744 -0.117026 0.594167 0.491537 -0.636677
--0.175790 -0.127719 -0.117026 0.594167 0.491537 -0.636677
--0.175790 -0.127719 -0.117026 0.528006 0.436804 -0.728293
--0.158396 -0.148744 -0.117026 0.528006 0.436804 -0.728293
--0.169805 -0.159457 -0.131722 0.528006 0.436804 -0.728293
--0.188451 -0.136917 -0.131722 0.528006 0.436804 -0.728293
--0.188451 -0.136917 -0.131722 0.453482 0.375153 -0.808464
--0.169805 -0.159457 -0.131722 0.453482 0.375153 -0.808464
--0.182466 -0.171346 -0.144341 0.453482 0.375153 -0.808464
--0.202502 -0.147126 -0.144341 0.453482 0.375153 -0.808464
--0.202502 -0.147126 -0.144341 0.371761 0.307547 -0.875905
--0.182466 -0.171346 -0.144341 0.371761 0.307547 -0.875905
--0.196180 -0.184225 -0.154684 0.371761 0.307547 -0.875905
--0.217722 -0.158184 -0.154684 0.371761 0.307547 -0.875905
--0.217722 -0.158184 -0.154684 0.284130 0.235052 -0.929527
--0.196180 -0.184225 -0.154684 0.284130 0.235052 -0.929527
--0.210731 -0.197889 -0.162587 0.284130 0.235052 -0.929527
--0.233871 -0.169917 -0.162587 0.284130 0.235052 -0.929527
--0.233871 -0.169917 -0.162587 0.191974 0.158815 -0.968465
--0.210731 -0.197889 -0.162587 0.191974 0.158815 -0.968465
--0.225889 -0.212124 -0.167926 0.191974 0.158815 -0.968465
--0.250694 -0.182140 -0.167926 0.191974 0.158815 -0.968465
--0.250694 -0.182140 -0.167926 0.096759 0.080046 -0.992084
--0.225889 -0.212124 -0.167926 0.096759 0.080046 -0.992084
--0.241415 -0.226704 -0.170617 0.096759 0.080046 -0.992084
--0.267925 -0.194659 -0.170617 0.096759 0.080046 -0.992084
--0.241415 -0.226704 -0.170617 -0.000000 0.000000 -1.000000
--0.257065 -0.241400 -0.170617 -0.000000 0.000000 -1.000000
--0.285294 -0.207278 -0.170617 -0.096759 -0.080046 -0.992084
--0.257065 -0.241400 -0.170617 -0.096759 -0.080046 -0.992084
--0.272592 -0.255981 -0.167926 -0.096759 -0.080046 -0.992084
--0.302525 -0.219797 -0.167926 -0.096759 -0.080046 -0.992084
--0.302525 -0.219797 -0.167926 -0.191974 -0.158814 -0.968465
--0.272592 -0.255981 -0.167926 -0.191974 -0.158814 -0.968465
--0.287750 -0.270215 -0.162587 -0.191974 -0.158814 -0.968465
--0.319348 -0.232020 -0.162587 -0.191974 -0.158814 -0.968465
--0.319348 -0.232020 -0.162587 -0.284130 -0.235052 -0.929527
--0.287750 -0.270215 -0.162587 -0.284130 -0.235052 -0.929527
--0.302301 -0.283880 -0.154684 -0.284130 -0.235052 -0.929527
--0.335497 -0.243753 -0.154684 -0.284130 -0.235052 -0.929527
--0.335497 -0.243753 -0.154684 -0.371762 -0.307547 -0.875904
--0.302301 -0.283880 -0.154684 -0.371762 -0.307547 -0.875904
--0.316015 -0.296758 -0.144341 -0.371762 -0.307547 -0.875904
--0.350717 -0.254811 -0.144341 -0.371762 -0.307547 -0.875904
--0.350717 -0.254811 -0.144341 -0.453481 -0.375152 -0.808465
--0.316015 -0.296758 -0.144341 -0.453481 -0.375152 -0.808465
--0.328676 -0.308647 -0.131722 -0.453481 -0.375152 -0.808465
--0.364768 -0.265020 -0.131722 -0.453481 -0.375152 -0.808465
--0.364768 -0.265020 -0.131722 -0.528007 -0.436805 -0.728293
--0.328676 -0.308647 -0.131722 -0.528007 -0.436805 -0.728293
--0.340085 -0.319361 -0.117026 -0.528007 -0.436805 -0.728293
--0.377429 -0.274218 -0.117026 -0.528007 -0.436805 -0.728293
--0.377429 -0.274218 -0.117026 -0.594167 -0.491537 -0.636677
--0.340085 -0.319361 -0.117026 -0.594167 -0.491537 -0.636677
--0.350060 -0.328728 -0.100484 -0.594167 -0.491537 -0.636677
--0.388501 -0.282262 -0.100484 -0.594167 -0.491537 -0.636677
--0.388501 -0.282262 -0.100484 -0.650934 -0.538499 -0.535074
--0.350060 -0.328728 -0.100484 -0.650934 -0.538499 -0.535074
--0.358446 -0.336603 -0.082358 -0.650934 -0.538499 -0.535074
--0.397807 -0.289024 -0.082358 -0.650934 -0.538499 -0.535074
--0.397807 -0.289024 -0.082358 -0.697431 -0.576964 -0.425090
--0.358446 -0.336603 -0.082358 -0.697431 -0.576964 -0.425090
--0.365109 -0.342860 -0.062932 -0.697431 -0.576964 -0.425090
--0.405202 -0.294396 -0.062932 -0.697431 -0.576964 -0.425090
--0.405202 -0.294396 -0.062932 -0.732940 -0.606340 -0.308464
--0.365109 -0.342860 -0.062932 -0.732940 -0.606340 -0.308464
--0.369945 -0.347402 -0.042515 -0.732940 -0.606340 -0.308464
--0.410569 -0.298296 -0.042515 -0.732940 -0.606340 -0.308464
--0.410569 -0.298296 -0.042515 -0.756918 -0.626176 -0.187025
--0.369945 -0.347402 -0.042515 -0.756918 -0.626176 -0.187025
--0.372878 -0.350156 -0.021426 -0.756918 -0.626176 -0.187025
--0.413824 -0.300660 -0.021426 -0.756918 -0.626176 -0.187025
--0.413824 -0.300660 -0.021426 -0.768999 -0.636171 -0.062667
--0.372878 -0.350156 -0.021426 -0.768999 -0.636171 -0.062667
--0.373861 -0.351078 0.000000 -0.768999 -0.636171 -0.062667
--0.414914 -0.301453 0.000000 -0.768999 -0.636171 -0.062667
--0.373861 -0.351078 0.000000 -0.683202 -0.727535 0.062664
--0.326911 -0.395167 0.000000 -0.683202 -0.727535 0.062664
--0.326052 -0.394129 0.021426 -0.683202 -0.727535 0.062664
--0.372878 -0.350156 0.021426 -0.683202 -0.727535 0.062664
--0.372878 -0.350156 0.021426 -0.672469 -0.716105 0.187026
--0.326052 -0.394129 0.021426 -0.672469 -0.716105 0.187026
--0.323487 -0.391029 0.042515 -0.672469 -0.716105 0.187026
--0.369945 -0.347402 0.042515 -0.672469 -0.716105 0.187026
--0.369945 -0.347402 0.042515 -0.651166 -0.693421 0.308465
--0.323487 -0.391029 0.042515 -0.651166 -0.693421 0.308465
--0.319259 -0.385917 0.062932 -0.651166 -0.693421 0.308465
--0.365109 -0.342860 0.062932 -0.651166 -0.693421 0.308465
--0.365109 -0.342860 0.062932 -0.619619 -0.659826 0.425090
--0.319259 -0.385917 0.062932 -0.619619 -0.659826 0.425090
--0.313432 -0.378874 0.082358 -0.619619 -0.659826 0.425090
--0.358446 -0.336603 0.082358 -0.619619 -0.659826 0.425090
--0.358446 -0.336603 0.082358 -0.578309 -0.615836 0.535074
--0.313432 -0.378874 0.082358 -0.578309 -0.615836 0.535074
--0.306099 -0.370010 0.100484 -0.578309 -0.615836 0.535074
--0.350060 -0.328728 0.100484 -0.578309 -0.615836 0.535074
--0.350060 -0.328728 0.100484 -0.527876 -0.562130 0.636676
--0.306099 -0.370010 0.100484 -0.527876 -0.562130 0.636676
--0.297376 -0.359466 0.117026 -0.527876 -0.562130 0.636676
--0.340085 -0.319361 0.117026 -0.527876 -0.562130 0.636676
--0.340085 -0.319361 0.117026 -0.469097 -0.499537 0.728293
--0.297376 -0.359466 0.117026 -0.469097 -0.499537 0.728293
--0.287401 -0.347408 0.131722 -0.469097 -0.499537 0.728293
--0.328676 -0.308647 0.131722 -0.469097 -0.499537 0.728293
--0.328676 -0.308647 0.131722 -0.402887 -0.429030 0.808465
--0.287401 -0.347408 0.131722 -0.402887 -0.429030 0.808465
--0.276330 -0.334025 0.144341 -0.402887 -0.429030 0.808465
--0.316015 -0.296758 0.144341 -0.402887 -0.429030 0.808465
--0.316015 -0.296758 0.144341 -0.330285 -0.351717 0.875904
--0.276330 -0.334025 0.144341 -0.330285 -0.351717 0.875904
--0.264338 -0.319529 0.154684 -0.330285 -0.351717 0.875904
--0.302301 -0.283880 0.154684 -0.330285 -0.351717 0.875904
--0.302301 -0.283880 0.154684 -0.252429 -0.268809 0.929527
--0.264338 -0.319529 0.154684 -0.252429 -0.268809 0.929527
--0.251614 -0.304149 0.162587 -0.252429 -0.268809 0.929527
--0.287750 -0.270215 0.162587 -0.252429 -0.268809 0.929527
--0.287750 -0.270215 0.162587 -0.170555 -0.181623 0.968465
--0.251614 -0.304149 0.162587 -0.170555 -0.181623 0.968465
--0.238360 -0.288127 0.167926 -0.170555 -0.181623 0.968465
--0.272592 -0.255981 0.167926 -0.170555 -0.181623 0.968465
--0.272592 -0.255981 0.167926 -0.085964 -0.091542 0.992084
--0.238360 -0.288127 0.167926 -0.085964 -0.091542 0.992084
--0.224783 -0.271716 0.170617 -0.085964 -0.091542 0.992084
--0.257065 -0.241400 0.170617 -0.085964 -0.091542 0.992084
--0.224783 -0.271716 0.170617 0.000000 0.000000 1.000000
--0.211098 -0.255174 0.170617 0.000000 0.000000 1.000000
--0.241415 -0.226704 0.170617 0.085964 0.091542 0.992084
--0.211098 -0.255174 0.170617 0.085964 0.091542 0.992084
--0.197522 -0.238762 0.167926 0.085964 0.091542 0.992084
--0.225889 -0.212124 0.167926 0.085964 0.091542 0.992084
--0.225889 -0.212124 0.167926 0.170555 0.181623 0.968465
--0.197522 -0.238762 0.167926 0.170555 0.181623 0.968465
--0.184267 -0.222740 0.162587 0.170555 0.181623 0.968465
--0.210731 -0.197889 0.162587 0.170555 0.181623 0.968465
--0.210731 -0.197889 0.162587 0.252429 0.268810 0.929527
--0.184267 -0.222740 0.162587 0.252429 0.268810 0.929527
--0.171543 -0.207360 0.154684 0.252429 0.268810 0.929527
--0.196180 -0.184225 0.154684 0.252429 0.268810 0.929527
--0.196180 -0.184225 0.154684 0.330283 0.351716 0.875905
--0.171543 -0.207360 0.154684 0.330283 0.351716 0.875905
--0.159551 -0.192864 0.144341 0.330283 0.351716 0.875905
--0.182466 -0.171346 0.144341 0.330283 0.351716 0.875905
--0.182466 -0.171346 0.144341 0.402887 0.429031 0.808464
--0.159551 -0.192864 0.144341 0.402887 0.429031 0.808464
--0.148480 -0.179482 0.131722 0.402887 0.429031 0.808464
--0.169805 -0.159457 0.131722 0.402887 0.429031 0.808464
--0.169805 -0.159457 0.131722 0.469096 0.499537 0.728294
--0.148480 -0.179482 0.131722 0.469096 0.499537 0.728294
--0.138505 -0.167423 0.117026 0.469096 0.499537 0.728294
--0.158396 -0.148744 0.117026 0.469096 0.499537 0.728294
--0.158396 -0.148744 0.117026 0.527876 0.562131 0.636676
--0.138505 -0.167423 0.117026 0.527876 0.562131 0.636676
--0.129782 -0.156879 0.100484 0.527876 0.562131 0.636676
--0.148421 -0.139376 0.100484 0.527876 0.562131 0.636676
--0.148421 -0.139376 0.100484 0.578310 0.615837 0.535072
--0.129782 -0.156879 0.100484 0.578310 0.615837 0.535072
--0.122449 -0.148016 0.082358 0.578310 0.615837 0.535072
--0.140035 -0.131501 0.082358 0.578310 0.615837 0.535072
--0.140035 -0.131501 0.082358 0.619618 0.659827 0.425091
--0.122449 -0.148016 0.082358 0.619618 0.659827 0.425091
--0.116623 -0.140972 0.062932 0.619618 0.659827 0.425091
--0.133372 -0.125244 0.062932 0.619618 0.659827 0.425091
--0.133372 -0.125244 0.062932 0.651166 0.693421 0.308466
--0.116623 -0.140972 0.062932 0.651166 0.693421 0.308466
--0.112394 -0.135861 0.042515 0.651166 0.693421 0.308466
--0.128535 -0.120703 0.042515 0.651166 0.693421 0.308466
--0.128535 -0.120703 0.042515 0.672469 0.716106 0.187025
--0.112394 -0.135861 0.042515 0.672469 0.716106 0.187025
--0.109830 -0.132761 0.021426 0.672469 0.716106 0.187025
--0.125603 -0.117949 0.021426 0.672469 0.716106 0.187025
--0.125603 -0.117949 0.021426 0.683202 0.727536 0.062667
--0.109830 -0.132761 0.021426 0.683202 0.727536 0.062667
--0.108970 -0.131722 0.000000 0.683202 0.727536 0.062667
--0.124620 -0.117026 0.000000 0.683202 0.727536 0.062667
--0.124620 -0.117026 0.000000 0.683202 0.727536 -0.062667
--0.108970 -0.131722 0.000000 0.683202 0.727536 -0.062667
--0.109830 -0.132761 -0.021426 0.683202 0.727536 -0.062667
--0.125603 -0.117949 -0.021426 0.683202 0.727536 -0.062667
--0.125603 -0.117949 -0.021426 0.672469 0.716106 -0.187025
--0.109830 -0.132761 -0.021426 0.672469 0.716106 -0.187025
--0.112394 -0.135861 -0.042515 0.672469 0.716106 -0.187025
--0.128535 -0.120703 -0.042515 0.672469 0.716106 -0.187025
--0.128535 -0.120703 -0.042515 0.651166 0.693421 -0.308466
--0.112394 -0.135861 -0.042515 0.651166 0.693421 -0.308466
--0.116623 -0.140972 -0.062932 0.651166 0.693421 -0.308466
--0.133372 -0.125244 -0.062932 0.651166 0.693421 -0.308466
--0.133372 -0.125244 -0.062932 0.619618 0.659827 -0.425091
--0.116623 -0.140972 -0.062932 0.619618 0.659827 -0.425091
--0.122449 -0.148016 -0.082358 0.619618 0.659827 -0.425091
--0.140035 -0.131501 -0.082358 0.619618 0.659827 -0.425091
--0.140035 -0.131501 -0.082358 0.578310 0.615837 -0.535072
--0.122449 -0.148016 -0.082358 0.578310 0.615837 -0.535072
--0.129782 -0.156879 -0.100484 0.578310 0.615837 -0.535072
--0.148421 -0.139376 -0.100484 0.578310 0.615837 -0.535072
--0.148421 -0.139376 -0.100484 0.527876 0.562131 -0.636676
--0.129782 -0.156879 -0.100484 0.527876 0.562131 -0.636676
--0.138505 -0.167423 -0.117026 0.527876 0.562131 -0.636676
--0.158396 -0.148744 -0.117026 0.527876 0.562131 -0.636676
--0.158396 -0.148744 -0.117026 0.469096 0.499537 -0.728294
--0.138505 -0.167423 -0.117026 0.469096 0.499537 -0.728294
--0.148480 -0.179482 -0.131722 0.469096 0.499537 -0.728294
--0.169805 -0.159457 -0.131722 0.469096 0.499537 -0.728294
--0.169805 -0.159457 -0.131722 0.402887 0.429031 -0.808464
--0.148480 -0.179482 -0.131722 0.402887 0.429031 -0.808464
--0.159551 -0.192864 -0.144341 0.402887 0.429031 -0.808464
--0.182466 -0.171346 -0.144341 0.402887 0.429031 -0.808464
--0.182466 -0.171346 -0.144341 0.330283 0.351716 -0.875905
--0.159551 -0.192864 -0.144341 0.330283 0.351716 -0.875905
--0.171543 -0.207360 -0.154684 0.330283 0.351716 -0.875905
--0.196180 -0.184225 -0.154684 0.330283 0.351716 -0.875905
--0.196180 -0.184225 -0.154684 0.252429 0.268810 -0.929527
--0.171543 -0.207360 -0.154684 0.252429 0.268810 -0.929527
--0.184267 -0.222740 -0.162587 0.252429 0.268810 -0.929527
--0.210731 -0.197889 -0.162587 0.252429 0.268810 -0.929527
--0.210731 -0.197889 -0.162587 0.170555 0.181623 -0.968465
--0.184267 -0.222740 -0.162587 0.170555 0.181623 -0.968465
--0.197522 -0.238762 -0.167926 0.170555 0.181623 -0.968465
--0.225889 -0.212124 -0.167926 0.170555 0.181623 -0.968465
--0.225889 -0.212124 -0.167926 0.085964 0.091542 -0.992084
--0.197522 -0.238762 -0.167926 0.085964 0.091542 -0.992084
--0.211098 -0.255174 -0.170617 0.085964 0.091542 -0.992084
--0.241415 -0.226704 -0.170617 0.085964 0.091542 -0.992084
--0.211098 -0.255174 -0.170617 0.000000 0.000000 -1.000000
--0.224783 -0.271716 -0.170617 0.000000 0.000000 -1.000000
--0.257065 -0.241400 -0.170617 -0.085964 -0.091542 -0.992084
--0.224783 -0.271716 -0.170617 -0.085964 -0.091542 -0.992084
--0.238360 -0.288127 -0.167926 -0.085964 -0.091542 -0.992084
--0.272592 -0.255981 -0.167926 -0.085964 -0.091542 -0.992084
--0.272592 -0.255981 -0.167926 -0.170555 -0.181623 -0.968465
--0.238360 -0.288127 -0.167926 -0.170555 -0.181623 -0.968465
--0.251614 -0.304149 -0.162587 -0.170555 -0.181623 -0.968465
--0.287750 -0.270215 -0.162587 -0.170555 -0.181623 -0.968465
--0.287750 -0.270215 -0.162587 -0.252429 -0.268809 -0.929527
--0.251614 -0.304149 -0.162587 -0.252429 -0.268809 -0.929527
--0.264338 -0.319529 -0.154684 -0.252429 -0.268809 -0.929527
--0.302301 -0.283880 -0.154684 -0.252429 -0.268809 -0.929527
--0.302301 -0.283880 -0.154684 -0.330285 -0.351717 -0.875904
--0.264338 -0.319529 -0.154684 -0.330285 -0.351717 -0.875904
--0.276330 -0.334025 -0.144341 -0.330285 -0.351717 -0.875904
--0.316015 -0.296758 -0.144341 -0.330285 -0.351717 -0.875904
--0.316015 -0.296758 -0.144341 -0.402887 -0.429030 -0.808465
--0.276330 -0.334025 -0.144341 -0.402887 -0.429030 -0.808465
--0.287401 -0.347408 -0.131722 -0.402887 -0.429030 -0.808465
--0.328676 -0.308647 -0.131722 -0.402887 -0.429030 -0.808465
--0.328676 -0.308647 -0.131722 -0.469097 -0.499537 -0.728293
--0.287401 -0.347408 -0.131722 -0.469097 -0.499537 -0.728293
--0.297376 -0.359466 -0.117026 -0.469097 -0.499537 -0.728293
--0.340085 -0.319361 -0.117026 -0.469097 -0.499537 -0.728293
--0.340085 -0.319361 -0.117026 -0.527876 -0.562130 -0.636676
--0.297376 -0.359466 -0.117026 -0.527876 -0.562130 -0.636676
--0.306099 -0.370010 -0.100484 -0.527876 -0.562130 -0.636676
--0.350060 -0.328728 -0.100484 -0.527876 -0.562130 -0.636676
--0.350060 -0.328728 -0.100484 -0.578309 -0.615836 -0.535074
--0.306099 -0.370010 -0.100484 -0.578309 -0.615836 -0.535074
--0.313432 -0.378874 -0.082358 -0.578309 -0.615836 -0.535074
--0.358446 -0.336603 -0.082358 -0.578309 -0.615836 -0.535074
--0.358446 -0.336603 -0.082358 -0.619619 -0.659826 -0.425090
--0.313432 -0.378874 -0.082358 -0.619619 -0.659826 -0.425090
--0.319259 -0.385917 -0.062932 -0.619619 -0.659826 -0.425090
--0.365109 -0.342860 -0.062932 -0.619619 -0.659826 -0.425090
--0.365109 -0.342860 -0.062932 -0.651166 -0.693421 -0.308465
--0.319259 -0.385917 -0.062932 -0.651166 -0.693421 -0.308465
--0.323487 -0.391029 -0.042515 -0.651166 -0.693421 -0.308465
--0.369945 -0.347402 -0.042515 -0.651166 -0.693421 -0.308465
--0.369945 -0.347402 -0.042515 -0.672469 -0.716105 -0.187026
--0.323487 -0.391029 -0.042515 -0.672469 -0.716105 -0.187026
--0.326052 -0.394129 -0.021426 -0.672469 -0.716105 -0.187026
--0.372878 -0.350156 -0.021426 -0.672469 -0.716105 -0.187026
--0.372878 -0.350156 -0.021426 -0.683202 -0.727535 -0.062664
--0.326052 -0.394129 -0.021426 -0.683202 -0.727535 -0.062664
--0.326911 -0.395167 0.000000 -0.683202 -0.727535 -0.062664
--0.373861 -0.351078 0.000000 -0.683202 -0.727535 -0.062664
--0.326911 -0.395167 0.000000 -0.586630 -0.807427 0.062665
--0.274805 -0.433024 0.000000 -0.586630 -0.807427 0.062665
--0.274083 -0.431886 0.021426 -0.586630 -0.807427 0.062665
--0.326052 -0.394129 0.021426 -0.586630 -0.807427 0.062665
--0.326052 -0.394129 0.021426 -0.577413 -0.794742 0.187027
--0.274083 -0.431886 0.021426 -0.577413 -0.794742 0.187027
--0.271928 -0.428489 0.042515 -0.577413 -0.794742 0.187027
--0.323487 -0.391029 0.042515 -0.577413 -0.794742 0.187027
--0.323487 -0.391029 0.042515 -0.559122 -0.769566 0.308464
--0.271928 -0.428489 0.042515 -0.559122 -0.769566 0.308464
--0.268373 -0.422888 0.062932 -0.559122 -0.769566 0.308464
--0.319259 -0.385917 0.062932 -0.559122 -0.769566 0.308464
--0.319259 -0.385917 0.062932 -0.532034 -0.732282 0.425091
--0.268373 -0.422888 0.062932 -0.532034 -0.732282 0.425091
--0.263475 -0.415170 0.082358 -0.532034 -0.732282 0.425091
--0.313432 -0.378874 0.082358 -0.532034 -0.732282 0.425091
--0.313432 -0.378874 0.082358 -0.496564 -0.683462 0.535073
--0.263475 -0.415170 0.082358 -0.496564 -0.683462 0.535073
--0.257311 -0.405457 0.100484 -0.496564 -0.683462 0.535073
--0.306099 -0.370010 0.100484 -0.496564 -0.683462 0.535073
--0.306099 -0.370010 0.100484 -0.453259 -0.623858 0.636676
--0.257311 -0.405457 0.100484 -0.453259 -0.623858 0.636676
--0.249978 -0.393903 0.117026 -0.453259 -0.623858 0.636676
--0.297376 -0.359466 0.117026 -0.453259 -0.623858 0.636676
--0.297376 -0.359466 0.117026 -0.402789 -0.554392 0.728293
--0.249978 -0.393903 0.117026 -0.402789 -0.554392 0.728293
--0.241593 -0.380689 0.131722 -0.402789 -0.554392 0.728293
--0.287401 -0.347408 0.131722 -0.402789 -0.554392 0.728293
--0.287401 -0.347408 0.131722 -0.345938 -0.476143 0.808465
--0.241593 -0.380689 0.131722 -0.345938 -0.476143 0.808465
--0.232286 -0.366025 0.144341 -0.345938 -0.476143 0.808465
--0.276330 -0.334025 0.144341 -0.345938 -0.476143 0.808465
--0.276330 -0.334025 0.144341 -0.283597 -0.390339 0.875904
--0.232286 -0.366025 0.144341 -0.283597 -0.390339 0.875904
--0.222206 -0.350140 0.154684 -0.283597 -0.390339 0.875904
--0.264338 -0.319529 0.154684 -0.283597 -0.390339 0.875904
--0.264338 -0.319529 0.154684 -0.216747 -0.298328 0.929527
--0.222206 -0.350140 0.154684 -0.216747 -0.298328 0.929527
--0.211510 -0.333287 0.162587 -0.216747 -0.298328 0.929527
--0.251614 -0.304149 0.162587 -0.216747 -0.298328 0.929527
--0.251614 -0.304149 0.162587 -0.146447 -0.201567 0.968465
--0.211510 -0.333287 0.162587 -0.146447 -0.201567 0.968465
--0.200368 -0.315729 0.167926 -0.146447 -0.201567 0.968465
--0.238360 -0.288127 0.167926 -0.146447 -0.201567 0.968465
--0.238360 -0.288127 0.167926 -0.073813 -0.101594 0.992084
--0.200368 -0.315729 0.167926 -0.073813 -0.101594 0.992084
--0.188955 -0.297746 0.170617 -0.073813 -0.101594 0.992084
--0.224783 -0.271716 0.170617 -0.073813 -0.101594 0.992084
--0.188955 -0.297746 0.170617 0.000000 0.000000 1.000000
--0.177452 -0.279619 0.170617 0.000000 0.000000 1.000000
--0.211098 -0.255174 0.170617 0.073813 0.101594 0.992084
--0.177452 -0.279619 0.170617 0.073813 0.101594 0.992084
--0.166039 -0.261636 0.167926 0.073813 0.101594 0.992084
--0.197522 -0.238762 0.167926 0.073813 0.101594 0.992084
--0.197522 -0.238762 0.167926 0.146447 0.201567 0.968465
--0.166039 -0.261636 0.167926 0.146447 0.201567 0.968465
--0.154897 -0.244079 0.162587 0.146447 0.201567 0.968465
--0.184267 -0.222740 0.162587 0.146447 0.201567 0.968465
--0.184267 -0.222740 0.162587 0.216748 0.298328 0.929527
--0.154897 -0.244079 0.162587 0.216748 0.298328 0.929527
--0.144201 -0.227225 0.154684 0.216748 0.298328 0.929527
--0.171543 -0.207360 0.154684 0.216748 0.298328 0.929527
--0.171543 -0.207360 0.154684 0.283598 0.390338 0.875904
--0.144201 -0.227225 0.154684 0.283598 0.390338 0.875904
--0.134121 -0.211341 0.144341 0.283598 0.390338 0.875904
--0.159551 -0.192864 0.144341 0.283598 0.390338 0.875904
--0.159551 -0.192864 0.144341 0.345938 0.476143 0.808465
--0.134121 -0.211341 0.144341 0.345938 0.476143 0.808465
--0.124814 -0.196676 0.131722 0.345938 0.476143 0.808465
--0.148480 -0.179482 0.131722 0.345938 0.476143 0.808465
--0.148480 -0.179482 0.131722 0.402789 0.554392 0.728294
--0.124814 -0.196676 0.131722 0.402789 0.554392 0.728294
--0.116429 -0.183462 0.117026 0.402789 0.554392 0.728294
--0.138505 -0.167423 0.117026 0.402789 0.554392 0.728294
--0.138505 -0.167423 0.117026 0.453260 0.623859 0.636676
--0.116429 -0.183462 0.117026 0.453260 0.623859 0.636676
--0.109096 -0.171908 0.100484 0.453260 0.623859 0.636676
--0.129782 -0.156879 0.100484 0.453260 0.623859 0.636676
--0.129782 -0.156879 0.100484 0.496565 0.683462 0.535073
--0.109096 -0.171908 0.100484 0.496565 0.683462 0.535073
--0.102932 -0.162195 0.082358 0.496565 0.683462 0.535073
--0.122449 -0.148016 0.082358 0.496565 0.683462 0.535073
--0.122449 -0.148016 0.082358 0.532034 0.732282 0.425091
--0.102932 -0.162195 0.082358 0.532034 0.732282 0.425091
--0.098034 -0.154477 0.062932 0.532034 0.732282 0.425091
--0.116623 -0.140972 0.062932 0.532034 0.732282 0.425091
--0.116623 -0.140972 0.062932 0.559122 0.769566 0.308465
--0.098034 -0.154477 0.062932 0.559122 0.769566 0.308465
--0.094480 -0.148876 0.042515 0.559122 0.769566 0.308465
--0.112394 -0.135861 0.042515 0.559122 0.769566 0.308465
--0.112394 -0.135861 0.042515 0.577413 0.794742 0.187025
--0.094480 -0.148876 0.042515 0.577413 0.794742 0.187025
--0.092324 -0.145479 0.021426 0.577413 0.794742 0.187025
--0.109830 -0.132761 0.021426 0.577413 0.794742 0.187025
--0.109830 -0.132761 0.021426 0.586630 0.807427 0.062667
--0.092324 -0.145479 0.021426 0.586630 0.807427 0.062667
--0.091602 -0.144341 0.000000 0.586630 0.807427 0.062667
--0.108970 -0.131722 0.000000 0.586630 0.807427 0.062667
--0.108970 -0.131722 0.000000 0.586630 0.807427 -0.062667
--0.091602 -0.144341 0.000000 0.586630 0.807427 -0.062667
--0.092324 -0.145479 -0.021426 0.586630 0.807427 -0.062667
--0.109830 -0.132761 -0.021426 0.586630 0.807427 -0.062667
--0.109830 -0.132761 -0.021426 0.577413 0.794742 -0.187025
--0.092324 -0.145479 -0.021426 0.577413 0.794742 -0.187025
--0.094480 -0.148876 -0.042515 0.577413 0.794742 -0.187025
--0.112394 -0.135861 -0.042515 0.577413 0.794742 -0.187025
--0.112394 -0.135861 -0.042515 0.559122 0.769566 -0.308465
--0.094480 -0.148876 -0.042515 0.559122 0.769566 -0.308465
--0.098034 -0.154477 -0.062932 0.559122 0.769566 -0.308465
--0.116623 -0.140972 -0.062932 0.559122 0.769566 -0.308465
--0.116623 -0.140972 -0.062932 0.532034 0.732282 -0.425091
--0.098034 -0.154477 -0.062932 0.532034 0.732282 -0.425091
--0.102932 -0.162195 -0.082358 0.532034 0.732282 -0.425091
--0.122449 -0.148016 -0.082358 0.532034 0.732282 -0.425091
--0.122449 -0.148016 -0.082358 0.496565 0.683462 -0.535073
--0.102932 -0.162195 -0.082358 0.496565 0.683462 -0.535073
--0.109096 -0.171908 -0.100484 0.496565 0.683462 -0.535073
--0.129782 -0.156879 -0.100484 0.496565 0.683462 -0.535073
--0.129782 -0.156879 -0.100484 0.453260 0.623859 -0.636676
--0.109096 -0.171908 -0.100484 0.453260 0.623859 -0.636676
--0.116429 -0.183462 -0.117026 0.453260 0.623859 -0.636676
--0.138505 -0.167423 -0.117026 0.453260 0.623859 -0.636676
--0.138505 -0.167423 -0.117026 0.402789 0.554392 -0.728294
--0.116429 -0.183462 -0.117026 0.402789 0.554392 -0.728294
--0.124814 -0.196676 -0.131722 0.402789 0.554392 -0.728294
--0.148480 -0.179482 -0.131722 0.402789 0.554392 -0.728294
--0.148480 -0.179482 -0.131722 0.345938 0.476143 -0.808465
--0.124814 -0.196676 -0.131722 0.345938 0.476143 -0.808465
--0.134121 -0.211341 -0.144341 0.345938 0.476143 -0.808465
--0.159551 -0.192864 -0.144341 0.345938 0.476143 -0.808465
--0.159551 -0.192864 -0.144341 0.283598 0.390338 -0.875904
--0.134121 -0.211341 -0.144341 0.283598 0.390338 -0.875904
--0.144201 -0.227225 -0.154684 0.283598 0.390338 -0.875904
--0.171543 -0.207360 -0.154684 0.283598 0.390338 -0.875904
--0.171543 -0.207360 -0.154684 0.216748 0.298328 -0.929527
--0.144201 -0.227225 -0.154684 0.216748 0.298328 -0.929527
--0.154897 -0.244079 -0.162587 0.216748 0.298328 -0.929527
--0.184267 -0.222740 -0.162587 0.216748 0.298328 -0.929527
--0.184267 -0.222740 -0.162587 0.146447 0.201567 -0.968465
--0.154897 -0.244079 -0.162587 0.146447 0.201567 -0.968465
--0.166039 -0.261636 -0.167926 0.146447 0.201567 -0.968465
--0.197522 -0.238762 -0.167926 0.146447 0.201567 -0.968465
--0.197522 -0.238762 -0.167926 0.073813 0.101594 -0.992084
--0.166039 -0.261636 -0.167926 0.073813 0.101594 -0.992084
--0.177452 -0.279619 -0.170617 0.073813 0.101594 -0.992084
--0.211098 -0.255174 -0.170617 0.073813 0.101594 -0.992084
--0.177452 -0.279619 -0.170617 0.000000 0.000000 -1.000000
--0.188955 -0.297746 -0.170617 0.000000 0.000000 -1.000000
--0.224783 -0.271716 -0.170617 -0.073813 -0.101594 -0.992084
--0.188955 -0.297746 -0.170617 -0.073813 -0.101594 -0.992084
--0.200368 -0.315729 -0.167926 -0.073813 -0.101594 -0.992084
--0.238360 -0.288127 -0.167926 -0.073813 -0.101594 -0.992084
--0.238360 -0.288127 -0.167926 -0.146447 -0.201567 -0.968465
--0.200368 -0.315729 -0.167926 -0.146447 -0.201567 -0.968465
--0.211510 -0.333287 -0.162587 -0.146447 -0.201567 -0.968465
--0.251614 -0.304149 -0.162587 -0.146447 -0.201567 -0.968465
--0.251614 -0.304149 -0.162587 -0.216747 -0.298328 -0.929527
--0.211510 -0.333287 -0.162587 -0.216747 -0.298328 -0.929527
--0.222206 -0.350140 -0.154684 -0.216747 -0.298328 -0.929527
--0.264338 -0.319529 -0.154684 -0.216747 -0.298328 -0.929527
--0.264338 -0.319529 -0.154684 -0.283597 -0.390339 -0.875904
--0.222206 -0.350140 -0.154684 -0.283597 -0.390339 -0.875904
--0.232286 -0.366025 -0.144341 -0.283597 -0.390339 -0.875904
--0.276330 -0.334025 -0.144341 -0.283597 -0.390339 -0.875904
--0.276330 -0.334025 -0.144341 -0.345938 -0.476143 -0.808465
--0.232286 -0.366025 -0.144341 -0.345938 -0.476143 -0.808465
--0.241593 -0.380689 -0.131722 -0.345938 -0.476143 -0.808465
--0.287401 -0.347408 -0.131722 -0.345938 -0.476143 -0.808465
--0.287401 -0.347408 -0.131722 -0.402789 -0.554392 -0.728293
--0.241593 -0.380689 -0.131722 -0.402789 -0.554392 -0.728293
--0.249978 -0.393903 -0.117026 -0.402789 -0.554392 -0.728293
--0.297376 -0.359466 -0.117026 -0.402789 -0.554392 -0.728293
--0.297376 -0.359466 -0.117026 -0.453259 -0.623858 -0.636676
--0.249978 -0.393903 -0.117026 -0.453259 -0.623858 -0.636676
--0.257311 -0.405457 -0.100484 -0.453259 -0.623858 -0.636676
--0.306099 -0.370010 -0.100484 -0.453259 -0.623858 -0.636676
--0.306099 -0.370010 -0.100484 -0.496564 -0.683462 -0.535073
--0.257311 -0.405457 -0.100484 -0.496564 -0.683462 -0.535073
--0.263475 -0.415170 -0.082358 -0.496564 -0.683462 -0.535073
--0.313432 -0.378874 -0.082358 -0.496564 -0.683462 -0.535073
--0.313432 -0.378874 -0.082358 -0.532034 -0.732282 -0.425091
--0.263475 -0.415170 -0.082358 -0.532034 -0.732282 -0.425091
--0.268373 -0.422888 -0.062932 -0.532034 -0.732282 -0.425091
--0.319259 -0.385917 -0.062932 -0.532034 -0.732282 -0.425091
--0.319259 -0.385917 -0.062932 -0.559122 -0.769566 -0.308464
--0.268373 -0.422888 -0.062932 -0.559122 -0.769566 -0.308464
--0.271928 -0.428489 -0.042515 -0.559122 -0.769566 -0.308464
--0.323487 -0.391029 -0.042515 -0.559122 -0.769566 -0.308464
--0.323487 -0.391029 -0.042515 -0.577413 -0.794742 -0.187027
--0.271928 -0.428489 -0.042515 -0.577413 -0.794742 -0.187027
--0.274083 -0.431886 -0.021426 -0.577413 -0.794742 -0.187027
--0.326052 -0.394129 -0.021426 -0.577413 -0.794742 -0.187027
--0.326052 -0.394129 -0.021426 -0.586630 -0.807427 -0.062665
--0.274083 -0.431886 -0.021426 -0.586630 -0.807427 -0.062665
--0.274805 -0.433024 0.000000 -0.586630 -0.807427 -0.062665
--0.326911 -0.395167 0.000000 -0.586630 -0.807427 -0.062665
--0.274805 -0.433024 0.000000 -0.480807 -0.874584 0.062665
--0.218366 -0.464052 0.000000 -0.480807 -0.874584 0.062665
--0.217792 -0.462832 0.021426 -0.480807 -0.874584 0.062665
--0.274083 -0.431886 0.021426 -0.480807 -0.874584 0.062665
--0.274083 -0.431886 0.021426 -0.473253 -0.860844 0.187026
--0.217792 -0.462832 0.021426 -0.473253 -0.860844 0.187026
--0.216079 -0.459192 0.042515 -0.473253 -0.860844 0.187026
--0.271928 -0.428489 0.042515 -0.473253 -0.860844 0.187026
--0.271928 -0.428489 0.042515 -0.458261 -0.833574 0.308466
--0.216079 -0.459192 0.042515 -0.458261 -0.833574 0.308466
--0.213255 -0.453189 0.062932 -0.458261 -0.833574 0.308466
--0.268373 -0.422888 0.062932 -0.458261 -0.833574 0.308466
--0.268373 -0.422888 0.062932 -0.436060 -0.793190 0.425090
--0.213255 -0.453189 0.062932 -0.436060 -0.793190 0.425090
--0.209363 -0.444918 0.082358 -0.436060 -0.793190 0.425090
--0.263475 -0.415170 0.082358 -0.436060 -0.793190 0.425090
--0.263475 -0.415170 0.082358 -0.406988 -0.740309 0.535074
--0.209363 -0.444918 0.082358 -0.406988 -0.740309 0.535074
--0.204465 -0.434510 0.100484 -0.406988 -0.740309 0.535074
--0.257311 -0.405457 0.100484 -0.406988 -0.740309 0.535074
--0.257311 -0.405457 0.100484 -0.371495 -0.675748 0.636676
--0.204465 -0.434510 0.100484 -0.371495 -0.675748 0.636676
--0.198638 -0.422127 0.117026 -0.371495 -0.675748 0.636676
--0.249978 -0.393903 0.117026 -0.371495 -0.675748 0.636676
--0.249978 -0.393903 0.117026 -0.330129 -0.600503 0.728293
--0.198638 -0.422127 0.117026 -0.330129 -0.600503 0.728293
--0.191975 -0.407967 0.131722 -0.330129 -0.600503 0.728293
--0.241593 -0.380689 0.131722 -0.330129 -0.600503 0.728293
--0.241593 -0.380689 0.131722 -0.283533 -0.515746 0.808465
--0.191975 -0.407967 0.131722 -0.283533 -0.515746 0.808465
--0.184580 -0.392251 0.144341 -0.283533 -0.515746 0.808465
--0.232286 -0.366025 0.144341 -0.283533 -0.515746 0.808465
--0.232286 -0.366025 0.144341 -0.232438 -0.422805 0.875904
--0.184580 -0.392251 0.144341 -0.232438 -0.422805 0.875904
--0.176569 -0.375229 0.154684 -0.232438 -0.422805 0.875904
--0.222206 -0.350140 0.154684 -0.232438 -0.422805 0.875904
--0.222206 -0.350140 0.154684 -0.177648 -0.323141 0.929527
--0.176569 -0.375229 0.154684 -0.177648 -0.323141 0.929527
--0.168070 -0.357168 0.162587 -0.177648 -0.323141 0.929527
--0.211510 -0.333287 0.162587 -0.177648 -0.323141 0.929527
--0.211510 -0.333287 0.162587 -0.120029 -0.218333 0.968465
--0.168070 -0.357168 0.162587 -0.120029 -0.218333 0.968465
--0.159217 -0.338353 0.167926 -0.120029 -0.218333 0.968465
--0.200368 -0.315729 0.167926 -0.120029 -0.218333 0.968465
--0.200368 -0.315729 0.167926 -0.060497 -0.110045 0.992084
--0.159217 -0.338353 0.167926 -0.060497 -0.110045 0.992084
--0.150148 -0.319080 0.170617 -0.060497 -0.110045 0.992084
--0.188955 -0.297746 0.170617 -0.060497 -0.110045 0.992084
--0.150148 -0.319080 0.170617 0.000000 0.000000 1.000000
--0.141007 -0.299655 0.170617 0.000000 0.000000 1.000000
--0.177452 -0.279619 0.170617 0.060498 0.110045 0.992084
--0.141007 -0.299655 0.170617 0.060498 0.110045 0.992084
--0.131938 -0.280383 0.167926 0.060498 0.110045 0.992084
--0.166039 -0.261636 0.167926 0.060498 0.110045 0.992084
--0.166039 -0.261636 0.167926 0.120030 0.218333 0.968465
--0.131938 -0.280383 0.167926 0.120030 0.218333 0.968465
--0.123085 -0.261568 0.162587 0.120030 0.218333 0.968465
--0.154897 -0.244079 0.162587 0.120030 0.218333 0.968465
--0.154897 -0.244079 0.162587 0.177648 0.323141 0.929527
--0.123085 -0.261568 0.162587 0.177648 0.323141 0.929527
--0.114586 -0.243507 0.154684 0.177648 0.323141 0.929527
--0.144201 -0.227225 0.154684 0.177648 0.323141 0.929527
--0.144201 -0.227225 0.154684 0.232439 0.422804 0.875905
--0.114586 -0.243507 0.154684 0.232439 0.422804 0.875905
--0.106575 -0.226484 0.144341 0.232439 0.422804 0.875905
--0.134121 -0.211341 0.144341 0.232439 0.422804 0.875905
--0.134121 -0.211341 0.144341 0.283534 0.515746 0.808465
--0.106575 -0.226484 0.144341 0.283534 0.515746 0.808465
--0.099180 -0.210769 0.131722 0.283534 0.515746 0.808465
--0.124814 -0.196676 0.131722 0.283534 0.515746 0.808465
--0.124814 -0.196676 0.131722 0.330130 0.600503 0.728293
--0.099180 -0.210769 0.131722 0.330130 0.600503 0.728293
--0.092517 -0.196608 0.117026 0.330130 0.600503 0.728293
--0.116429 -0.183462 0.117026 0.330130 0.600503 0.728293
--0.116429 -0.183462 0.117026 0.371496 0.675748 0.636676
--0.092517 -0.196608 0.117026 0.371496 0.675748 0.636676
--0.086690 -0.184226 0.100484 0.371496 0.675748 0.636676
--0.109096 -0.171908 0.100484 0.371496 0.675748 0.636676
--0.109096 -0.171908 0.100484 0.406988 0.740309 0.535073
--0.086690 -0.184226 0.100484 0.406988 0.740309 0.535073
--0.081792 -0.173817 0.082358 0.406988 0.740309 0.535073
--0.102932 -0.162195 0.082358 0.406988 0.740309 0.535073
--0.102932 -0.162195 0.082358 0.436059 0.793190 0.425091
--0.081792 -0.173817 0.082358 0.436059 0.793190 0.425091
--0.077900 -0.165546 0.062932 0.436059 0.793190 0.425091
--0.098034 -0.154477 0.062932 0.436059 0.793190 0.425091
--0.098034 -0.154477 0.062932 0.458261 0.833574 0.308465
--0.077900 -0.165546 0.062932 0.458261 0.833574 0.308465
--0.075076 -0.159544 0.042515 0.458261 0.833574 0.308465
--0.094480 -0.148876 0.042515 0.458261 0.833574 0.308465
--0.094480 -0.148876 0.042515 0.473253 0.860844 0.187025
--0.075076 -0.159544 0.042515 0.473253 0.860844 0.187025
--0.073363 -0.155904 0.021426 0.473253 0.860844 0.187025
--0.092324 -0.145479 0.021426 0.473253 0.860844 0.187025
--0.092324 -0.145479 0.021426 0.480807 0.874584 0.062667
--0.073363 -0.155904 0.021426 0.480807 0.874584 0.062667
--0.072789 -0.154684 0.000000 0.480807 0.874584 0.062667
--0.091602 -0.144341 0.000000 0.480807 0.874584 0.062667
--0.091602 -0.144341 0.000000 0.480807 0.874584 -0.062667
--0.072789 -0.154684 0.000000 0.480807 0.874584 -0.062667
--0.073363 -0.155904 -0.021426 0.480807 0.874584 -0.062667
--0.092324 -0.145479 -0.021426 0.480807 0.874584 -0.062667
--0.092324 -0.145479 -0.021426 0.473253 0.860844 -0.187025
--0.073363 -0.155904 -0.021426 0.473253 0.860844 -0.187025
--0.075076 -0.159544 -0.042515 0.473253 0.860844 -0.187025
--0.094480 -0.148876 -0.042515 0.473253 0.860844 -0.187025
--0.094480 -0.148876 -0.042515 0.458261 0.833574 -0.308465
--0.075076 -0.159544 -0.042515 0.458261 0.833574 -0.308465
--0.077900 -0.165546 -0.062932 0.458261 0.833574 -0.308465
--0.098034 -0.154477 -0.062932 0.458261 0.833574 -0.308465
--0.098034 -0.154477 -0.062932 0.436059 0.793190 -0.425091
--0.077900 -0.165546 -0.062932 0.436059 0.793190 -0.425091
--0.081792 -0.173817 -0.082358 0.436059 0.793190 -0.425091
--0.102932 -0.162195 -0.082358 0.436059 0.793190 -0.425091
--0.102932 -0.162195 -0.082358 0.406988 0.740309 -0.535073
--0.081792 -0.173817 -0.082358 0.406988 0.740309 -0.535073
--0.086690 -0.184226 -0.100484 0.406988 0.740309 -0.535073
--0.109096 -0.171908 -0.100484 0.406988 0.740309 -0.535073
--0.109096 -0.171908 -0.100484 0.371496 0.675748 -0.636676
--0.086690 -0.184226 -0.100484 0.371496 0.675748 -0.636676
--0.092517 -0.196608 -0.117026 0.371496 0.675748 -0.636676
--0.116429 -0.183462 -0.117026 0.371496 0.675748 -0.636676
--0.116429 -0.183462 -0.117026 0.330130 0.600503 -0.728293
--0.092517 -0.196608 -0.117026 0.330130 0.600503 -0.728293
--0.099180 -0.210769 -0.131722 0.330130 0.600503 -0.728293
--0.124814 -0.196676 -0.131722 0.330130 0.600503 -0.728293
--0.124814 -0.196676 -0.131722 0.283534 0.515746 -0.808465
--0.099180 -0.210769 -0.131722 0.283534 0.515746 -0.808465
--0.106575 -0.226484 -0.144341 0.283534 0.515746 -0.808465
--0.134121 -0.211341 -0.144341 0.283534 0.515746 -0.808465
--0.134121 -0.211341 -0.144341 0.232439 0.422804 -0.875905
--0.106575 -0.226484 -0.144341 0.232439 0.422804 -0.875905
--0.114586 -0.243507 -0.154684 0.232439 0.422804 -0.875905
--0.144201 -0.227225 -0.154684 0.232439 0.422804 -0.875905
--0.144201 -0.227225 -0.154684 0.177648 0.323141 -0.929527
--0.114586 -0.243507 -0.154684 0.177648 0.323141 -0.929527
--0.123085 -0.261568 -0.162587 0.177648 0.323141 -0.929527
--0.154897 -0.244079 -0.162587 0.177648 0.323141 -0.929527
--0.154897 -0.244079 -0.162587 0.120030 0.218333 -0.968465
--0.123085 -0.261568 -0.162587 0.120030 0.218333 -0.968465
--0.131938 -0.280383 -0.167926 0.120030 0.218333 -0.968465
--0.166039 -0.261636 -0.167926 0.120030 0.218333 -0.968465
--0.166039 -0.261636 -0.167926 0.060498 0.110045 -0.992084
--0.131938 -0.280383 -0.167926 0.060498 0.110045 -0.992084
--0.141007 -0.299655 -0.170617 0.060498 0.110045 -0.992084
--0.177452 -0.279619 -0.170617 0.060498 0.110045 -0.992084
--0.141007 -0.299655 -0.170617 0.000000 0.000000 -1.000000
--0.150148 -0.319080 -0.170617 0.000000 0.000000 -1.000000
--0.188955 -0.297746 -0.170617 -0.060497 -0.110045 -0.992084
--0.150148 -0.319080 -0.170617 -0.060497 -0.110045 -0.992084
--0.159217 -0.338353 -0.167926 -0.060497 -0.110045 -0.992084
--0.200368 -0.315729 -0.167926 -0.060497 -0.110045 -0.992084
--0.200368 -0.315729 -0.167926 -0.120029 -0.218333 -0.968465
--0.159217 -0.338353 -0.167926 -0.120029 -0.218333 -0.968465
--0.168070 -0.357168 -0.162587 -0.120029 -0.218333 -0.968465
--0.211510 -0.333287 -0.162587 -0.120029 -0.218333 -0.968465
--0.211510 -0.333287 -0.162587 -0.177648 -0.323141 -0.929527
--0.168070 -0.357168 -0.162587 -0.177648 -0.323141 -0.929527
--0.176569 -0.375229 -0.154684 -0.177648 -0.323141 -0.929527
--0.222206 -0.350140 -0.154684 -0.177648 -0.323141 -0.929527
--0.222206 -0.350140 -0.154684 -0.232438 -0.422805 -0.875904
--0.176569 -0.375229 -0.154684 -0.232438 -0.422805 -0.875904
--0.184580 -0.392251 -0.144341 -0.232438 -0.422805 -0.875904
--0.232286 -0.366025 -0.144341 -0.232438 -0.422805 -0.875904
--0.232286 -0.366025 -0.144341 -0.283533 -0.515746 -0.808465
--0.184580 -0.392251 -0.144341 -0.283533 -0.515746 -0.808465
--0.191975 -0.407967 -0.131722 -0.283533 -0.515746 -0.808465
--0.241593 -0.380689 -0.131722 -0.283533 -0.515746 -0.808465
--0.241593 -0.380689 -0.131722 -0.330129 -0.600503 -0.728293
--0.191975 -0.407967 -0.131722 -0.330129 -0.600503 -0.728293
--0.198638 -0.422127 -0.117026 -0.330129 -0.600503 -0.728293
--0.249978 -0.393903 -0.117026 -0.330129 -0.600503 -0.728293
--0.249978 -0.393903 -0.117026 -0.371495 -0.675748 -0.636676
--0.198638 -0.422127 -0.117026 -0.371495 -0.675748 -0.636676
--0.204465 -0.434510 -0.100484 -0.371495 -0.675748 -0.636676
--0.257311 -0.405457 -0.100484 -0.371495 -0.675748 -0.636676
--0.257311 -0.405457 -0.100484 -0.406988 -0.740309 -0.535074
--0.204465 -0.434510 -0.100484 -0.406988 -0.740309 -0.535074
--0.209363 -0.444918 -0.082358 -0.406988 -0.740309 -0.535074
--0.263475 -0.415170 -0.082358 -0.406988 -0.740309 -0.535074
--0.263475 -0.415170 -0.082358 -0.436060 -0.793190 -0.425090
--0.209363 -0.444918 -0.082358 -0.436060 -0.793190 -0.425090
--0.213255 -0.453189 -0.062932 -0.436060 -0.793190 -0.425090
--0.268373 -0.422888 -0.062932 -0.436060 -0.793190 -0.425090
--0.268373 -0.422888 -0.062932 -0.458261 -0.833574 -0.308466
--0.213255 -0.453189 -0.062932 -0.458261 -0.833574 -0.308466
--0.216079 -0.459192 -0.042515 -0.458261 -0.833574 -0.308466
--0.271928 -0.428489 -0.042515 -0.458261 -0.833574 -0.308466
--0.271928 -0.428489 -0.042515 -0.473253 -0.860844 -0.187026
--0.216079 -0.459192 -0.042515 -0.473253 -0.860844 -0.187026
--0.217792 -0.462832 -0.021426 -0.473253 -0.860844 -0.187026
--0.274083 -0.431886 -0.021426 -0.473253 -0.860844 -0.187026
--0.274083 -0.431886 -0.021426 -0.480807 -0.874584 -0.062665
--0.217792 -0.462832 -0.021426 -0.480807 -0.874584 -0.062665
--0.218366 -0.464052 0.000000 -0.480807 -0.874584 -0.062665
--0.274805 -0.433024 0.000000 -0.480807 -0.874584 -0.062665
--0.218366 -0.464052 0.000000 -0.367401 -0.927949 0.062666
--0.158483 -0.487761 0.000000 -0.367401 -0.927949 0.062666
--0.158067 -0.486479 0.021426 -0.367401 -0.927949 0.062666
--0.217792 -0.462832 0.021426 -0.367401 -0.927949 0.062666
--0.217792 -0.462832 0.021426 -0.361629 -0.913371 0.187025
--0.158067 -0.486479 0.021426 -0.361629 -0.913371 0.187025
--0.156824 -0.482653 0.042515 -0.361629 -0.913371 0.187025
--0.216079 -0.459192 0.042515 -0.361629 -0.913371 0.187025
--0.216079 -0.459192 0.042515 -0.350174 -0.884436 0.308466
--0.156824 -0.482653 0.042515 -0.350174 -0.884436 0.308466
--0.154773 -0.476344 0.062932 -0.350174 -0.884436 0.308466
--0.213255 -0.453189 0.062932 -0.350174 -0.884436 0.308466
--0.213255 -0.453189 0.062932 -0.333209 -0.841588 0.425090
--0.154773 -0.476344 0.062932 -0.333209 -0.841588 0.425090
--0.151949 -0.467650 0.082358 -0.333209 -0.841588 0.425090
--0.209363 -0.444918 0.082358 -0.333209 -0.841588 0.425090
--0.209363 -0.444918 0.082358 -0.310994 -0.785480 0.535074
--0.151949 -0.467650 0.082358 -0.310994 -0.785480 0.535074
--0.148394 -0.456710 0.100484 -0.310994 -0.785480 0.535074
--0.204465 -0.434510 0.100484 -0.310994 -0.785480 0.535074
--0.204465 -0.434510 0.100484 -0.283873 -0.716980 0.636676
--0.148394 -0.456710 0.100484 -0.283873 -0.716980 0.636676
--0.144165 -0.443695 0.117026 -0.283873 -0.716980 0.636676
--0.198638 -0.422127 0.117026 -0.283873 -0.716980 0.636676
--0.198638 -0.422127 0.117026 -0.252263 -0.637144 0.728293
--0.144165 -0.443695 0.117026 -0.252263 -0.637144 0.728293
--0.139329 -0.428811 0.131722 -0.252263 -0.637144 0.728293
--0.191975 -0.407967 0.131722 -0.252263 -0.637144 0.728293
--0.191975 -0.407967 0.131722 -0.216658 -0.547215 0.808465
--0.139329 -0.428811 0.131722 -0.216658 -0.547215 0.808465
--0.133962 -0.412293 0.144341 -0.216658 -0.547215 0.808465
--0.184580 -0.392251 0.144341 -0.216658 -0.547215 0.808465
--0.184580 -0.392251 0.144341 -0.177615 -0.448603 0.875904
--0.133962 -0.412293 0.144341 -0.177615 -0.448603 0.875904
--0.128148 -0.394400 0.154684 -0.177615 -0.448603 0.875904
--0.176569 -0.375229 0.154684 -0.177615 -0.448603 0.875904
--0.176569 -0.375229 0.154684 -0.135748 -0.342858 0.929527
--0.128148 -0.394400 0.154684 -0.135748 -0.342858 0.929527
--0.121980 -0.375416 0.162587 -0.135748 -0.342858 0.929527
--0.168070 -0.357168 0.162587 -0.135748 -0.342858 0.929527
--0.168070 -0.357168 0.162587 -0.091719 -0.231654 0.968465
--0.121980 -0.375416 0.162587 -0.091719 -0.231654 0.968465
--0.115554 -0.355640 0.167926 -0.091719 -0.231654 0.968465
--0.159217 -0.338353 0.167926 -0.091719 -0.231654 0.968465
--0.159217 -0.338353 0.167926 -0.046228 -0.116759 0.992084
--0.115554 -0.355640 0.167926 -0.046228 -0.116759 0.992084
--0.108973 -0.335383 0.170617 -0.046228 -0.116759 0.992084
--0.150148 -0.319080 0.170617 -0.046228 -0.116759 0.992084
--0.108973 -0.335383 0.170617 0.000000 0.000000 1.000000
--0.102338 -0.314965 0.170617 0.000000 0.000000 1.000000
--0.141007 -0.299655 0.170617 0.046228 0.116759 0.992084
--0.102338 -0.314965 0.170617 0.046228 0.116759 0.992084
--0.095757 -0.294708 0.167926 0.046228 0.116759 0.992084
--0.131938 -0.280383 0.167926 0.046228 0.116759 0.992084
--0.131938 -0.280383 0.167926 0.091718 0.231655 0.968465
--0.095757 -0.294708 0.167926 0.091718 0.231655 0.968465
--0.089331 -0.274932 0.162587 0.091718 0.231655 0.968465
--0.123085 -0.261568 0.162587 0.091718 0.231655 0.968465
--0.123085 -0.261568 0.162587 0.135747 0.342858 0.929527
--0.089331 -0.274932 0.162587 0.135747 0.342858 0.929527
--0.083162 -0.255948 0.154684 0.135747 0.342858 0.929527
--0.114586 -0.243507 0.154684 0.135747 0.342858 0.929527
--0.114586 -0.243507 0.154684 0.177614 0.448603 0.875905
--0.083162 -0.255948 0.154684 0.177614 0.448603 0.875905
--0.077349 -0.238056 0.144341 0.177614 0.448603 0.875905
--0.106575 -0.226484 0.144341 0.177614 0.448603 0.875905
--0.106575 -0.226484 0.144341 0.216658 0.547216 0.808464
--0.077349 -0.238056 0.144341 0.216658 0.547216 0.808464
--0.071982 -0.221537 0.131722 0.216658 0.547216 0.808464
--0.099180 -0.210769 0.131722 0.216658 0.547216 0.808464
--0.099180 -0.210769 0.131722 0.252263 0.637144 0.728293
--0.071982 -0.221537 0.131722 0.252263 0.637144 0.728293
--0.067146 -0.206653 0.117026 0.252263 0.637144 0.728293
--0.092517 -0.196608 0.117026 0.252263 0.637144 0.728293
--0.092517 -0.196608 0.117026 0.283873 0.716979 0.636676
--0.067146 -0.206653 0.117026 0.283873 0.716979 0.636676
--0.062917 -0.193638 0.100484 0.283873 0.716979 0.636676
--0.086690 -0.184226 0.100484 0.283873 0.716979 0.636676
--0.086690 -0.184226 0.100484 0.310994 0.785481 0.535072
--0.062917 -0.193638 0.100484 0.310994 0.785481 0.535072
--0.059362 -0.182698 0.082358 0.310994 0.785481 0.535072
--0.081792 -0.173817 0.082358 0.310994 0.785481 0.535072
--0.081792 -0.173817 0.082358 0.333209 0.841587 0.425091
--0.059362 -0.182698 0.082358 0.333209 0.841587 0.425091
--0.056537 -0.174004 0.062932 0.333209 0.841587 0.425091
--0.077900 -0.165546 0.062932 0.333209 0.841587 0.425091
--0.077900 -0.165546 0.062932 0.350174 0.884436 0.308465
--0.056537 -0.174004 0.062932 0.350174 0.884436 0.308465
--0.054487 -0.167695 0.042515 0.350174 0.884436 0.308465
--0.075076 -0.159544 0.042515 0.350174 0.884436 0.308465
--0.075076 -0.159544 0.042515 0.361630 0.913371 0.187025
--0.054487 -0.167695 0.042515 0.361630 0.913371 0.187025
--0.053244 -0.163869 0.021426 0.361630 0.913371 0.187025
--0.073363 -0.155904 0.021426 0.361630 0.913371 0.187025
--0.073363 -0.155904 0.021426 0.367401 0.927949 0.062667
--0.053244 -0.163869 0.021426 0.367401 0.927949 0.062667
--0.052828 -0.162587 0.000000 0.367401 0.927949 0.062667
--0.072789 -0.154684 0.000000 0.367401 0.927949 0.062667
--0.072789 -0.154684 0.000000 0.367401 0.927949 -0.062667
--0.052828 -0.162587 0.000000 0.367401 0.927949 -0.062667
--0.053244 -0.163869 -0.021426 0.367401 0.927949 -0.062667
--0.073363 -0.155904 -0.021426 0.367401 0.927949 -0.062667
--0.073363 -0.155904 -0.021426 0.361630 0.913371 -0.187025
--0.053244 -0.163869 -0.021426 0.361630 0.913371 -0.187025
--0.054487 -0.167695 -0.042515 0.361630 0.913371 -0.187025
--0.075076 -0.159544 -0.042515 0.361630 0.913371 -0.187025
--0.075076 -0.159544 -0.042515 0.350174 0.884436 -0.308465
--0.054487 -0.167695 -0.042515 0.350174 0.884436 -0.308465
--0.056537 -0.174004 -0.062932 0.350174 0.884436 -0.308465
--0.077900 -0.165546 -0.062932 0.350174 0.884436 -0.308465
--0.077900 -0.165546 -0.062932 0.333209 0.841587 -0.425091
--0.056537 -0.174004 -0.062932 0.333209 0.841587 -0.425091
--0.059362 -0.182698 -0.082358 0.333209 0.841587 -0.425091
--0.081792 -0.173817 -0.082358 0.333209 0.841587 -0.425091
--0.081792 -0.173817 -0.082358 0.310994 0.785481 -0.535072
--0.059362 -0.182698 -0.082358 0.310994 0.785481 -0.535072
--0.062917 -0.193638 -0.100484 0.310994 0.785481 -0.535072
--0.086690 -0.184226 -0.100484 0.310994 0.785481 -0.535072
--0.086690 -0.184226 -0.100484 0.283873 0.716979 -0.636676
--0.062917 -0.193638 -0.100484 0.283873 0.716979 -0.636676
--0.067146 -0.206653 -0.117026 0.283873 0.716979 -0.636676
--0.092517 -0.196608 -0.117026 0.283873 0.716979 -0.636676
--0.092517 -0.196608 -0.117026 0.252263 0.637144 -0.728293
--0.067146 -0.206653 -0.117026 0.252263 0.637144 -0.728293
--0.071982 -0.221537 -0.131722 0.252263 0.637144 -0.728293
--0.099180 -0.210769 -0.131722 0.252263 0.637144 -0.728293
--0.099180 -0.210769 -0.131722 0.216658 0.547216 -0.808464
--0.071982 -0.221537 -0.131722 0.216658 0.547216 -0.808464
--0.077349 -0.238056 -0.144341 0.216658 0.547216 -0.808464
--0.106575 -0.226484 -0.144341 0.216658 0.547216 -0.808464
--0.106575 -0.226484 -0.144341 0.177614 0.448603 -0.875905
--0.077349 -0.238056 -0.144341 0.177614 0.448603 -0.875905
--0.083162 -0.255948 -0.154684 0.177614 0.448603 -0.875905
--0.114586 -0.243507 -0.154684 0.177614 0.448603 -0.875905
--0.114586 -0.243507 -0.154684 0.135747 0.342858 -0.929527
--0.083162 -0.255948 -0.154684 0.135747 0.342858 -0.929527
--0.089331 -0.274932 -0.162587 0.135747 0.342858 -0.929527
--0.123085 -0.261568 -0.162587 0.135747 0.342858 -0.929527
--0.123085 -0.261568 -0.162587 0.091718 0.231655 -0.968465
--0.089331 -0.274932 -0.162587 0.091718 0.231655 -0.968465
--0.095757 -0.294708 -0.167926 0.091718 0.231655 -0.968465
--0.131938 -0.280383 -0.167926 0.091718 0.231655 -0.968465
--0.131938 -0.280383 -0.167926 0.046228 0.116759 -0.992084
--0.095757 -0.294708 -0.167926 0.046228 0.116759 -0.992084
--0.102338 -0.314965 -0.170617 0.046228 0.116759 -0.992084
--0.141007 -0.299655 -0.170617 0.046228 0.116759 -0.992084
--0.102338 -0.314965 -0.170617 0.000000 0.000000 -1.000000
--0.108973 -0.335383 -0.170617 0.000000 0.000000 -1.000000
--0.150148 -0.319080 -0.170617 -0.046228 -0.116759 -0.992084
--0.108973 -0.335383 -0.170617 -0.046228 -0.116759 -0.992084
--0.115554 -0.355640 -0.167926 -0.046228 -0.116759 -0.992084
--0.159217 -0.338353 -0.167926 -0.046228 -0.116759 -0.992084
--0.159217 -0.338353 -0.167926 -0.091719 -0.231654 -0.968465
--0.115554 -0.355640 -0.167926 -0.091719 -0.231654 -0.968465
--0.121980 -0.375416 -0.162587 -0.091719 -0.231654 -0.968465
--0.168070 -0.357168 -0.162587 -0.091719 -0.231654 -0.968465
--0.168070 -0.357168 -0.162587 -0.135748 -0.342858 -0.929527
--0.121980 -0.375416 -0.162587 -0.135748 -0.342858 -0.929527
--0.128148 -0.394400 -0.154684 -0.135748 -0.342858 -0.929527
--0.176569 -0.375229 -0.154684 -0.135748 -0.342858 -0.929527
--0.176569 -0.375229 -0.154684 -0.177615 -0.448603 -0.875904
--0.128148 -0.394400 -0.154684 -0.177615 -0.448603 -0.875904
--0.133962 -0.412293 -0.144341 -0.177615 -0.448603 -0.875904
--0.184580 -0.392251 -0.144341 -0.177615 -0.448603 -0.875904
--0.184580 -0.392251 -0.144341 -0.216658 -0.547215 -0.808465
--0.133962 -0.412293 -0.144341 -0.216658 -0.547215 -0.808465
--0.139329 -0.428811 -0.131722 -0.216658 -0.547215 -0.808465
--0.191975 -0.407967 -0.131722 -0.216658 -0.547215 -0.808465
--0.191975 -0.407967 -0.131722 -0.252263 -0.637144 -0.728293
--0.139329 -0.428811 -0.131722 -0.252263 -0.637144 -0.728293
--0.144165 -0.443695 -0.117026 -0.252263 -0.637144 -0.728293
--0.198638 -0.422127 -0.117026 -0.252263 -0.637144 -0.728293
--0.198638 -0.422127 -0.117026 -0.283873 -0.716980 -0.636676
--0.144165 -0.443695 -0.117026 -0.283873 -0.716980 -0.636676
--0.148394 -0.456710 -0.100484 -0.283873 -0.716980 -0.636676
--0.204465 -0.434510 -0.100484 -0.283873 -0.716980 -0.636676
--0.204465 -0.434510 -0.100484 -0.310994 -0.785480 -0.535074
--0.148394 -0.456710 -0.100484 -0.310994 -0.785480 -0.535074
--0.151949 -0.467650 -0.082358 -0.310994 -0.785480 -0.535074
--0.209363 -0.444918 -0.082358 -0.310994 -0.785480 -0.535074
--0.209363 -0.444918 -0.082358 -0.333209 -0.841588 -0.425090
--0.151949 -0.467650 -0.082358 -0.333209 -0.841588 -0.425090
--0.154773 -0.476344 -0.062932 -0.333209 -0.841588 -0.425090
--0.213255 -0.453189 -0.062932 -0.333209 -0.841588 -0.425090
--0.213255 -0.453189 -0.062932 -0.350174 -0.884436 -0.308466
--0.154773 -0.476344 -0.062932 -0.350174 -0.884436 -0.308466
--0.156824 -0.482653 -0.042515 -0.350174 -0.884436 -0.308466
--0.216079 -0.459192 -0.042515 -0.350174 -0.884436 -0.308466
--0.216079 -0.459192 -0.042515 -0.361629 -0.913371 -0.187025
--0.156824 -0.482653 -0.042515 -0.361629 -0.913371 -0.187025
--0.158067 -0.486479 -0.021426 -0.361629 -0.913371 -0.187025
--0.217792 -0.462832 -0.021426 -0.361629 -0.913371 -0.187025
--0.217792 -0.462832 -0.021426 -0.367401 -0.927949 -0.062666
--0.158067 -0.486479 -0.021426 -0.367401 -0.927949 -0.062666
--0.158483 -0.487761 0.000000 -0.367401 -0.927949 -0.062666
--0.218366 -0.464052 0.000000 -0.367401 -0.927949 -0.062666
--0.158483 -0.487761 0.000000 -0.248201 -0.966680 0.062666
--0.096101 -0.503778 0.000000 -0.248201 -0.966680 0.062666
--0.095848 -0.502454 0.021426 -0.248201 -0.966680 0.062666
--0.158067 -0.486479 0.021426 -0.248201 -0.966680 0.062666
--0.158067 -0.486479 0.021426 -0.244302 -0.951493 0.187025
--0.095848 -0.502454 0.021426 -0.244302 -0.951493 0.187025
--0.095094 -0.498502 0.042515 -0.244302 -0.951493 0.187025
--0.156824 -0.482653 0.042515 -0.244302 -0.951493 0.187025
--0.156824 -0.482653 0.042515 -0.236562 -0.921351 0.308465
--0.095094 -0.498502 0.042515 -0.236562 -0.921351 0.308465
--0.093851 -0.491986 0.062932 -0.236562 -0.921351 0.308465
--0.154773 -0.476344 0.062932 -0.236562 -0.921351 0.308465
--0.154773 -0.476344 0.062932 -0.225102 -0.876714 0.425090
--0.093851 -0.491986 0.062932 -0.225102 -0.876714 0.425090
--0.092138 -0.483007 0.082358 -0.225102 -0.876714 0.425090
--0.151949 -0.467650 0.082358 -0.225102 -0.876714 0.425090
--0.151949 -0.467650 0.082358 -0.210095 -0.818264 0.535073
--0.092138 -0.483007 0.082358 -0.210095 -0.818264 0.535073
--0.089983 -0.471707 0.100484 -0.210095 -0.818264 0.535073
--0.148394 -0.456710 0.100484 -0.210095 -0.818264 0.535073
--0.148394 -0.456710 0.100484 -0.191773 -0.746905 0.636676
--0.089983 -0.471707 0.100484 -0.191773 -0.746905 0.636676
--0.087419 -0.458265 0.117026 -0.191773 -0.746905 0.636676
--0.144165 -0.443695 0.117026 -0.191773 -0.746905 0.636676
--0.144165 -0.443695 0.117026 -0.170418 -0.663736 0.728294
--0.087419 -0.458265 0.117026 -0.170418 -0.663736 0.728294
--0.084486 -0.442892 0.131722 -0.170418 -0.663736 0.728294
--0.139329 -0.428811 0.131722 -0.170418 -0.663736 0.728294
--0.139329 -0.428811 0.131722 -0.146365 -0.570055 0.808464
--0.084486 -0.442892 0.131722 -0.146365 -0.570055 0.808464
--0.081232 -0.425831 0.144341 -0.146365 -0.570055 0.808464
--0.133962 -0.412293 0.144341 -0.146365 -0.570055 0.808464
--0.133962 -0.412293 0.144341 -0.119989 -0.467326 0.875905
--0.081232 -0.425831 0.144341 -0.119989 -0.467326 0.875905
--0.077706 -0.407351 0.154684 -0.119989 -0.467326 0.875905
--0.128148 -0.394400 0.154684 -0.119989 -0.467326 0.875905
--0.128148 -0.394400 0.154684 -0.091705 -0.357169 0.929527
--0.077706 -0.407351 0.154684 -0.091705 -0.357169 0.929527
--0.073966 -0.387744 0.162587 -0.091705 -0.357169 0.929527
--0.121980 -0.375416 0.162587 -0.091705 -0.357169 0.929527
--0.121980 -0.375416 0.162587 -0.061961 -0.241324 0.968465
--0.073966 -0.387744 0.162587 -0.061961 -0.241324 0.968465
--0.070070 -0.367318 0.167926 -0.061961 -0.241324 0.968465
--0.115554 -0.355640 0.167926 -0.061961 -0.241324 0.968465
--0.115554 -0.355640 0.167926 -0.031230 -0.121632 0.992084
--0.070070 -0.367318 0.167926 -0.031230 -0.121632 0.992084
--0.066079 -0.346396 0.170617 -0.031230 -0.121632 0.992084
--0.108973 -0.335383 0.170617 -0.031230 -0.121632 0.992084
--0.066079 -0.346396 0.170617 0.000000 -0.000000 1.000000
--0.062056 -0.325308 0.170617 0.000000 -0.000000 1.000000
--0.102338 -0.314965 0.170617 0.031230 0.121632 0.992084
--0.062056 -0.325308 0.170617 0.031230 0.121632 0.992084
--0.058065 -0.304386 0.167926 0.031230 0.121632 0.992084
--0.095757 -0.294708 0.167926 0.031230 0.121632 0.992084
--0.095757 -0.294708 0.167926 0.061962 0.241323 0.968465
--0.058065 -0.304386 0.167926 0.061962 0.241323 0.968465
--0.054168 -0.283960 0.162587 0.061962 0.241323 0.968465
--0.089331 -0.274932 0.162587 0.061962 0.241323 0.968465
--0.089331 -0.274932 0.162587 0.091706 0.357168 0.929527
--0.054168 -0.283960 0.162587 0.091706 0.357168 0.929527
--0.050428 -0.264353 0.154684 0.091706 0.357168 0.929527
--0.083162 -0.255948 0.154684 0.091706 0.357168 0.929527
--0.083162 -0.255948 0.154684 0.119989 0.467326 0.875905
--0.050428 -0.264353 0.154684 0.119989 0.467326 0.875905
--0.046903 -0.245873 0.144341 0.119989 0.467326 0.875905
--0.077349 -0.238056 0.144341 0.119989 0.467326 0.875905
--0.077349 -0.238056 0.144341 0.146366 0.570056 0.808464
--0.046903 -0.245873 0.144341 0.146366 0.570056 0.808464
--0.043648 -0.228812 0.131722 0.146366 0.570056 0.808464
--0.071982 -0.221537 0.131722 0.146366 0.570056 0.808464
--0.071982 -0.221537 0.131722 0.170419 0.663736 0.728294
--0.043648 -0.228812 0.131722 0.170419 0.663736 0.728294
--0.040716 -0.213439 0.117026 0.170419 0.663736 0.728294
--0.067146 -0.206653 0.117026 0.170419 0.663736 0.728294
--0.067146 -0.206653 0.117026 0.191773 0.746905 0.636676
--0.040716 -0.213439 0.117026 0.191773 0.746905 0.636676
--0.038151 -0.199997 0.100484 0.191773 0.746905 0.636676
--0.062917 -0.193638 0.100484 0.191773 0.746905 0.636676
--0.062917 -0.193638 0.100484 0.210095 0.818265 0.535073
--0.038151 -0.199997 0.100484 0.210095 0.818265 0.535073
--0.035996 -0.188697 0.082358 0.210095 0.818265 0.535073
--0.059362 -0.182698 0.082358 0.210095 0.818265 0.535073
--0.059362 -0.182698 0.082358 0.225102 0.876714 0.425090
--0.035996 -0.188697 0.082358 0.225102 0.876714 0.425090
--0.034283 -0.179718 0.062932 0.225102 0.876714 0.425090
--0.056537 -0.174004 0.062932 0.225102 0.876714 0.425090
--0.056537 -0.174004 0.062932 0.236562 0.921351 0.308466
--0.034283 -0.179718 0.062932 0.236562 0.921351 0.308466
--0.033040 -0.173202 0.042515 0.236562 0.921351 0.308466
--0.054487 -0.167695 0.042515 0.236562 0.921351 0.308466
--0.054487 -0.167695 0.042515 0.244301 0.951493 0.187024
--0.033040 -0.173202 0.042515 0.244301 0.951493 0.187024
--0.032286 -0.169250 0.021426 0.244301 0.951493 0.187024
--0.053244 -0.163869 0.021426 0.244301 0.951493 0.187024
--0.053244 -0.163869 0.021426 0.248201 0.966679 0.062667
--0.032286 -0.169250 0.021426 0.248201 0.966679 0.062667
--0.032034 -0.167926 0.000000 0.248201 0.966679 0.062667
--0.052828 -0.162587 0.000000 0.248201 0.966679 0.062667
--0.052828 -0.162587 0.000000 0.248201 0.966679 -0.062667
--0.032034 -0.167926 0.000000 0.248201 0.966679 -0.062667
--0.032286 -0.169250 -0.021426 0.248201 0.966679 -0.062667
--0.053244 -0.163869 -0.021426 0.248201 0.966679 -0.062667
--0.053244 -0.163869 -0.021426 0.244301 0.951493 -0.187024
--0.032286 -0.169250 -0.021426 0.244301 0.951493 -0.187024
--0.033040 -0.173202 -0.042515 0.244301 0.951493 -0.187024
--0.054487 -0.167695 -0.042515 0.244301 0.951493 -0.187024
--0.054487 -0.167695 -0.042515 0.236562 0.921351 -0.308466
--0.033040 -0.173202 -0.042515 0.236562 0.921351 -0.308466
--0.034283 -0.179718 -0.062932 0.236562 0.921351 -0.308466
--0.056537 -0.174004 -0.062932 0.236562 0.921351 -0.308466
--0.056537 -0.174004 -0.062932 0.225102 0.876714 -0.425090
--0.034283 -0.179718 -0.062932 0.225102 0.876714 -0.425090
--0.035996 -0.188697 -0.082358 0.225102 0.876714 -0.425090
--0.059362 -0.182698 -0.082358 0.225102 0.876714 -0.425090
--0.059362 -0.182698 -0.082358 0.210095 0.818265 -0.535073
--0.035996 -0.188697 -0.082358 0.210095 0.818265 -0.535073
--0.038151 -0.199997 -0.100484 0.210095 0.818265 -0.535073
--0.062917 -0.193638 -0.100484 0.210095 0.818265 -0.535073
--0.062917 -0.193638 -0.100484 0.191773 0.746905 -0.636676
--0.038151 -0.199997 -0.100484 0.191773 0.746905 -0.636676
--0.040716 -0.213439 -0.117026 0.191773 0.746905 -0.636676
--0.067146 -0.206653 -0.117026 0.191773 0.746905 -0.636676
--0.067146 -0.206653 -0.117026 0.170419 0.663736 -0.728294
--0.040716 -0.213439 -0.117026 0.170419 0.663736 -0.728294
--0.043648 -0.228812 -0.131722 0.170419 0.663736 -0.728294
--0.071982 -0.221537 -0.131722 0.170419 0.663736 -0.728294
--0.071982 -0.221537 -0.131722 0.146366 0.570056 -0.808464
--0.043648 -0.228812 -0.131722 0.146366 0.570056 -0.808464
--0.046903 -0.245873 -0.144341 0.146366 0.570056 -0.808464
--0.077349 -0.238056 -0.144341 0.146366 0.570056 -0.808464
--0.077349 -0.238056 -0.144341 0.119989 0.467326 -0.875905
--0.046903 -0.245873 -0.144341 0.119989 0.467326 -0.875905
--0.050428 -0.264353 -0.154684 0.119989 0.467326 -0.875905
--0.083162 -0.255948 -0.154684 0.119989 0.467326 -0.875905
--0.083162 -0.255948 -0.154684 0.091706 0.357168 -0.929527
--0.050428 -0.264353 -0.154684 0.091706 0.357168 -0.929527
--0.054168 -0.283960 -0.162587 0.091706 0.357168 -0.929527
--0.089331 -0.274932 -0.162587 0.091706 0.357168 -0.929527
--0.089331 -0.274932 -0.162587 0.061962 0.241323 -0.968465
--0.054168 -0.283960 -0.162587 0.061962 0.241323 -0.968465
--0.058065 -0.304386 -0.167926 0.061962 0.241323 -0.968465
--0.095757 -0.294708 -0.167926 0.061962 0.241323 -0.968465
--0.095757 -0.294708 -0.167926 0.031230 0.121632 -0.992084
--0.058065 -0.304386 -0.167926 0.031230 0.121632 -0.992084
--0.062056 -0.325308 -0.170617 0.031230 0.121632 -0.992084
--0.102338 -0.314965 -0.170617 0.031230 0.121632 -0.992084
--0.062056 -0.325308 -0.170617 0.000000 -0.000000 -1.000000
--0.066079 -0.346396 -0.170617 0.000000 -0.000000 -1.000000
--0.108973 -0.335383 -0.170617 -0.031230 -0.121632 -0.992084
--0.066079 -0.346396 -0.170617 -0.031230 -0.121632 -0.992084
--0.070070 -0.367318 -0.167926 -0.031230 -0.121632 -0.992084
--0.115554 -0.355640 -0.167926 -0.031230 -0.121632 -0.992084
--0.115554 -0.355640 -0.167926 -0.061961 -0.241324 -0.968465
--0.070070 -0.367318 -0.167926 -0.061961 -0.241324 -0.968465
--0.073966 -0.387744 -0.162587 -0.061961 -0.241324 -0.968465
--0.121980 -0.375416 -0.162587 -0.061961 -0.241324 -0.968465
--0.121980 -0.375416 -0.162587 -0.091705 -0.357169 -0.929527
--0.073966 -0.387744 -0.162587 -0.091705 -0.357169 -0.929527
--0.077706 -0.407351 -0.154684 -0.091705 -0.357169 -0.929527
--0.128148 -0.394400 -0.154684 -0.091705 -0.357169 -0.929527
--0.128148 -0.394400 -0.154684 -0.119989 -0.467326 -0.875905
--0.077706 -0.407351 -0.154684 -0.119989 -0.467326 -0.875905
--0.081232 -0.425831 -0.144341 -0.119989 -0.467326 -0.875905
--0.133962 -0.412293 -0.144341 -0.119989 -0.467326 -0.875905
--0.133962 -0.412293 -0.144341 -0.146365 -0.570055 -0.808464
--0.081232 -0.425831 -0.144341 -0.146365 -0.570055 -0.808464
--0.084486 -0.442892 -0.131722 -0.146365 -0.570055 -0.808464
--0.139329 -0.428811 -0.131722 -0.146365 -0.570055 -0.808464
--0.139329 -0.428811 -0.131722 -0.170418 -0.663736 -0.728294
--0.084486 -0.442892 -0.131722 -0.170418 -0.663736 -0.728294
--0.087419 -0.458265 -0.117026 -0.170418 -0.663736 -0.728294
--0.144165 -0.443695 -0.117026 -0.170418 -0.663736 -0.728294
--0.144165 -0.443695 -0.117026 -0.191773 -0.746905 -0.636676
--0.087419 -0.458265 -0.117026 -0.191773 -0.746905 -0.636676
--0.089983 -0.471707 -0.100484 -0.191773 -0.746905 -0.636676
--0.148394 -0.456710 -0.100484 -0.191773 -0.746905 -0.636676
--0.148394 -0.456710 -0.100484 -0.210095 -0.818264 -0.535073
--0.089983 -0.471707 -0.100484 -0.210095 -0.818264 -0.535073
--0.092138 -0.483007 -0.082358 -0.210095 -0.818264 -0.535073
--0.151949 -0.467650 -0.082358 -0.210095 -0.818264 -0.535073
--0.151949 -0.467650 -0.082358 -0.225102 -0.876714 -0.425090
--0.092138 -0.483007 -0.082358 -0.225102 -0.876714 -0.425090
--0.093851 -0.491986 -0.062932 -0.225102 -0.876714 -0.425090
--0.154773 -0.476344 -0.062932 -0.225102 -0.876714 -0.425090
--0.154773 -0.476344 -0.062932 -0.236562 -0.921351 -0.308465
--0.093851 -0.491986 -0.062932 -0.236562 -0.921351 -0.308465
--0.095094 -0.498502 -0.042515 -0.236562 -0.921351 -0.308465
--0.156824 -0.482653 -0.042515 -0.236562 -0.921351 -0.308465
--0.156824 -0.482653 -0.042515 -0.244302 -0.951493 -0.187025
--0.095094 -0.498502 -0.042515 -0.244302 -0.951493 -0.187025
--0.095848 -0.502454 -0.021426 -0.244302 -0.951493 -0.187025
--0.158067 -0.486479 -0.021426 -0.244302 -0.951493 -0.187025
--0.158067 -0.486479 -0.021426 -0.248201 -0.966680 -0.062666
--0.095848 -0.502454 -0.021426 -0.248201 -0.966680 -0.062666
--0.096101 -0.503778 0.000000 -0.248201 -0.966680 -0.062666
--0.158483 -0.487761 0.000000 -0.248201 -0.966680 -0.062666
--0.096101 -0.503778 0.000000 -0.125087 -0.990165 0.062666
--0.032203 -0.511850 0.000000 -0.125087 -0.990165 0.062666
--0.032118 -0.510505 0.021426 -0.125087 -0.990165 0.062666
--0.095848 -0.502454 0.021426 -0.125087 -0.990165 0.062666
--0.095848 -0.502454 0.021426 -0.123122 -0.974609 0.187026
--0.032118 -0.510505 0.021426 -0.123122 -0.974609 0.187026
--0.031866 -0.506490 0.042515 -0.123122 -0.974609 0.187026
--0.095094 -0.498502 0.042515 -0.123122 -0.974609 0.187026
--0.095094 -0.498502 0.042515 -0.119221 -0.943735 0.308466
--0.031866 -0.506490 0.042515 -0.119221 -0.943735 0.308466
--0.031449 -0.499869 0.062932 -0.119221 -0.943735 0.308466
--0.093851 -0.491986 0.062932 -0.119221 -0.943735 0.308466
--0.093851 -0.491986 0.062932 -0.113446 -0.898015 0.425088
--0.031449 -0.499869 0.062932 -0.113446 -0.898015 0.425088
--0.030875 -0.490746 0.082358 -0.113446 -0.898015 0.425088
--0.092138 -0.483007 0.082358 -0.113446 -0.898015 0.425088
--0.092138 -0.483007 0.082358 -0.105882 -0.838144 0.535074
--0.030875 -0.490746 0.082358 -0.105882 -0.838144 0.535074
--0.030153 -0.479265 0.100484 -0.105882 -0.838144 0.535074
--0.089983 -0.471707 0.100484 -0.105882 -0.838144 0.535074
--0.089983 -0.471707 0.100484 -0.096648 -0.765051 0.636676
--0.030153 -0.479265 0.100484 -0.096648 -0.765051 0.636676
--0.029294 -0.465608 0.117026 -0.096648 -0.765051 0.636676
--0.087419 -0.458265 0.117026 -0.096648 -0.765051 0.636676
--0.087419 -0.458265 0.117026 -0.085887 -0.679861 0.728294
--0.029294 -0.465608 0.117026 -0.085887 -0.679861 0.728294
--0.028311 -0.449989 0.131722 -0.085887 -0.679861 0.728294
--0.084486 -0.442892 0.131722 -0.085887 -0.679861 0.728294
--0.084486 -0.442892 0.131722 -0.073765 -0.583904 0.808465
--0.028311 -0.449989 0.131722 -0.073765 -0.583904 0.808465
--0.027220 -0.432655 0.144341 -0.073765 -0.583904 0.808465
--0.081232 -0.425831 0.144341 -0.073765 -0.583904 0.808465
--0.081232 -0.425831 0.144341 -0.060471 -0.478680 0.875905
--0.027220 -0.432655 0.144341 -0.060471 -0.478680 0.875905
--0.026039 -0.413879 0.154684 -0.060471 -0.478680 0.875905
--0.077706 -0.407351 0.154684 -0.060471 -0.478680 0.875905
--0.077706 -0.407351 0.154684 -0.046217 -0.365846 0.929527
--0.026039 -0.413879 0.154684 -0.046217 -0.365846 0.929527
--0.024786 -0.393957 0.162587 -0.046217 -0.365846 0.929527
--0.073966 -0.387744 0.162587 -0.046217 -0.365846 0.929527
--0.073966 -0.387744 0.162587 -0.031227 -0.247187 0.968465
--0.024786 -0.393957 0.162587 -0.031227 -0.247187 0.968465
--0.023480 -0.373204 0.167926 -0.031227 -0.247187 0.968465
--0.070070 -0.367318 0.167926 -0.031227 -0.247187 0.968465
--0.070070 -0.367318 0.167926 -0.015739 -0.124587 0.992084
--0.023480 -0.373204 0.167926 -0.015739 -0.124587 0.992084
--0.022143 -0.351947 0.170617 -0.015739 -0.124587 0.992084
--0.066079 -0.346396 0.170617 -0.015739 -0.124587 0.992084
--0.022143 -0.351947 0.170617 -0.000000 0.000000 1.000000
--0.020795 -0.330520 0.170617 -0.000000 0.000000 1.000000
--0.062056 -0.325308 0.170617 0.015739 0.124587 0.992084
--0.020795 -0.330520 0.170617 0.015739 0.124587 0.992084
--0.019457 -0.309263 0.167926 0.015739 0.124587 0.992084
--0.058065 -0.304386 0.167926 0.015739 0.124587 0.992084
--0.058065 -0.304386 0.167926 0.031227 0.247187 0.968465
--0.019457 -0.309263 0.167926 0.031227 0.247187 0.968465
--0.018152 -0.288510 0.162587 0.031227 0.247187 0.968465
--0.054168 -0.283960 0.162587 0.031227 0.247187 0.968465
--0.054168 -0.283960 0.162587 0.046217 0.365845 0.929527
--0.018152 -0.288510 0.162587 0.046217 0.365845 0.929527
--0.016898 -0.268588 0.154684 0.046217 0.365845 0.929527
--0.050428 -0.264353 0.154684 0.046217 0.365845 0.929527
--0.050428 -0.264353 0.154684 0.060472 0.478680 0.875905
--0.016898 -0.268588 0.154684 0.060472 0.478680 0.875905
--0.015717 -0.249813 0.144341 0.060472 0.478680 0.875905
--0.046903 -0.245873 0.144341 0.060472 0.478680 0.875905
--0.046903 -0.245873 0.144341 0.073764 0.583905 0.808464
--0.015717 -0.249813 0.144341 0.073764 0.583905 0.808464
--0.014626 -0.232478 0.131722 0.073764 0.583905 0.808464
--0.043648 -0.228812 0.131722 0.073764 0.583905 0.808464
--0.043648 -0.228812 0.131722 0.085886 0.679862 0.728294
--0.014626 -0.232478 0.131722 0.085886 0.679862 0.728294
--0.013644 -0.216859 0.117026 0.085886 0.679862 0.728294
--0.040716 -0.213439 0.117026 0.085886 0.679862 0.728294
--0.040716 -0.213439 0.117026 0.096648 0.765051 0.636676
--0.013644 -0.216859 0.117026 0.096648 0.765051 0.636676
--0.012784 -0.203202 0.100484 0.096648 0.765051 0.636676
--0.038151 -0.199997 0.100484 0.096648 0.765051 0.636676
--0.038151 -0.199997 0.100484 0.105882 0.838144 0.535073
--0.012784 -0.203202 0.100484 0.105882 0.838144 0.535073
--0.012062 -0.191721 0.082358 0.105882 0.838144 0.535073
--0.035996 -0.188697 0.082358 0.105882 0.838144 0.535073
--0.035996 -0.188697 0.082358 0.113446 0.898013 0.425090
--0.012062 -0.191721 0.082358 0.113446 0.898013 0.425090
--0.011488 -0.182598 0.062932 0.113446 0.898013 0.425090
--0.034283 -0.179718 0.062932 0.113446 0.898013 0.425090
--0.034283 -0.179718 0.062932 0.119222 0.943735 0.308466
--0.011488 -0.182598 0.062932 0.119222 0.943735 0.308466
--0.011072 -0.175977 0.042515 0.119222 0.943735 0.308466
--0.033040 -0.173202 0.042515 0.119222 0.943735 0.308466
--0.033040 -0.173202 0.042515 0.123123 0.974609 0.187024
--0.011072 -0.175977 0.042515 0.123123 0.974609 0.187024
--0.010819 -0.171962 0.021426 0.123123 0.974609 0.187024
--0.032286 -0.169250 0.021426 0.123123 0.974609 0.187024
--0.032286 -0.169250 0.021426 0.125087 0.990165 0.062668
--0.010819 -0.171962 0.021426 0.125087 0.990165 0.062668
--0.010734 -0.170617 0.000000 0.125087 0.990165 0.062668
--0.032034 -0.167926 0.000000 0.125087 0.990165 0.062668
--0.032034 -0.167926 0.000000 0.125087 0.990165 -0.062668
--0.010734 -0.170617 0.000000 0.125087 0.990165 -0.062668
--0.010819 -0.171962 -0.021426 0.125087 0.990165 -0.062668
--0.032286 -0.169250 -0.021426 0.125087 0.990165 -0.062668
--0.032286 -0.169250 -0.021426 0.123123 0.974609 -0.187024
--0.010819 -0.171962 -0.021426 0.123123 0.974609 -0.187024
--0.011072 -0.175977 -0.042515 0.123123 0.974609 -0.187024
--0.033040 -0.173202 -0.042515 0.123123 0.974609 -0.187024
--0.033040 -0.173202 -0.042515 0.119222 0.943735 -0.308466
--0.011072 -0.175977 -0.042515 0.119222 0.943735 -0.308466
--0.011488 -0.182598 -0.062932 0.119222 0.943735 -0.308466
--0.034283 -0.179718 -0.062932 0.119222 0.943735 -0.308466
--0.034283 -0.179718 -0.062932 0.113446 0.898013 -0.425090
--0.011488 -0.182598 -0.062932 0.113446 0.898013 -0.425090
--0.012062 -0.191721 -0.082358 0.113446 0.898013 -0.425090
--0.035996 -0.188697 -0.082358 0.113446 0.898013 -0.425090
--0.035996 -0.188697 -0.082358 0.105882 0.838144 -0.535073
--0.012062 -0.191721 -0.082358 0.105882 0.838144 -0.535073
--0.012784 -0.203202 -0.100484 0.105882 0.838144 -0.535073
--0.038151 -0.199997 -0.100484 0.105882 0.838144 -0.535073
--0.038151 -0.199997 -0.100484 0.096648 0.765051 -0.636676
--0.012784 -0.203202 -0.100484 0.096648 0.765051 -0.636676
--0.013644 -0.216859 -0.117026 0.096648 0.765051 -0.636676
--0.040716 -0.213439 -0.117026 0.096648 0.765051 -0.636676
--0.040716 -0.213439 -0.117026 0.085886 0.679862 -0.728294
--0.013644 -0.216859 -0.117026 0.085886 0.679862 -0.728294
--0.014626 -0.232478 -0.131722 0.085886 0.679862 -0.728294
--0.043648 -0.228812 -0.131722 0.085886 0.679862 -0.728294
--0.043648 -0.228812 -0.131722 0.073764 0.583905 -0.808464
--0.014626 -0.232478 -0.131722 0.073764 0.583905 -0.808464
--0.015717 -0.249813 -0.144341 0.073764 0.583905 -0.808464
--0.046903 -0.245873 -0.144341 0.073764 0.583905 -0.808464
--0.046903 -0.245873 -0.144341 0.060472 0.478680 -0.875905
--0.015717 -0.249813 -0.144341 0.060472 0.478680 -0.875905
--0.016898 -0.268588 -0.154684 0.060472 0.478680 -0.875905
--0.050428 -0.264353 -0.154684 0.060472 0.478680 -0.875905
--0.050428 -0.264353 -0.154684 0.046217 0.365845 -0.929527
--0.016898 -0.268588 -0.154684 0.046217 0.365845 -0.929527
--0.018152 -0.288510 -0.162587 0.046217 0.365845 -0.929527
--0.054168 -0.283960 -0.162587 0.046217 0.365845 -0.929527
--0.054168 -0.283960 -0.162587 0.031227 0.247187 -0.968465
--0.018152 -0.288510 -0.162587 0.031227 0.247187 -0.968465
--0.019457 -0.309263 -0.167926 0.031227 0.247187 -0.968465
--0.058065 -0.304386 -0.167926 0.031227 0.247187 -0.968465
--0.058065 -0.304386 -0.167926 0.015739 0.124587 -0.992084
--0.019457 -0.309263 -0.167926 0.015739 0.124587 -0.992084
--0.020795 -0.330520 -0.170617 0.015739 0.124587 -0.992084
--0.062056 -0.325308 -0.170617 0.015739 0.124587 -0.992084
--0.020795 -0.330520 -0.170617 -0.000000 0.000000 -1.000000
--0.022143 -0.351947 -0.170617 -0.000000 0.000000 -1.000000
--0.066079 -0.346396 -0.170617 -0.015739 -0.124587 -0.992084
--0.022143 -0.351947 -0.170617 -0.015739 -0.124587 -0.992084
--0.023480 -0.373204 -0.167926 -0.015739 -0.124587 -0.992084
--0.070070 -0.367318 -0.167926 -0.015739 -0.124587 -0.992084
--0.070070 -0.367318 -0.167926 -0.031227 -0.247187 -0.968465
--0.023480 -0.373204 -0.167926 -0.031227 -0.247187 -0.968465
--0.024786 -0.393957 -0.162587 -0.031227 -0.247187 -0.968465
--0.073966 -0.387744 -0.162587 -0.031227 -0.247187 -0.968465
--0.073966 -0.387744 -0.162587 -0.046217 -0.365846 -0.929527
--0.024786 -0.393957 -0.162587 -0.046217 -0.365846 -0.929527
--0.026039 -0.413879 -0.154684 -0.046217 -0.365846 -0.929527
--0.077706 -0.407351 -0.154684 -0.046217 -0.365846 -0.929527
--0.077706 -0.407351 -0.154684 -0.060471 -0.478680 -0.875905
--0.026039 -0.413879 -0.154684 -0.060471 -0.478680 -0.875905
--0.027220 -0.432655 -0.144341 -0.060471 -0.478680 -0.875905
--0.081232 -0.425831 -0.144341 -0.060471 -0.478680 -0.875905
--0.081232 -0.425831 -0.144341 -0.073765 -0.583904 -0.808465
--0.027220 -0.432655 -0.144341 -0.073765 -0.583904 -0.808465
--0.028311 -0.449989 -0.131722 -0.073765 -0.583904 -0.808465
--0.084486 -0.442892 -0.131722 -0.073765 -0.583904 -0.808465
--0.084486 -0.442892 -0.131722 -0.085887 -0.679861 -0.728294
--0.028311 -0.449989 -0.131722 -0.085887 -0.679861 -0.728294
--0.029294 -0.465608 -0.117026 -0.085887 -0.679861 -0.728294
--0.087419 -0.458265 -0.117026 -0.085887 -0.679861 -0.728294
--0.087419 -0.458265 -0.117026 -0.096648 -0.765051 -0.636676
--0.029294 -0.465608 -0.117026 -0.096648 -0.765051 -0.636676
--0.030153 -0.479265 -0.100484 -0.096648 -0.765051 -0.636676
--0.089983 -0.471707 -0.100484 -0.096648 -0.765051 -0.636676
--0.089983 -0.471707 -0.100484 -0.105882 -0.838144 -0.535074
--0.030153 -0.479265 -0.100484 -0.105882 -0.838144 -0.535074
--0.030875 -0.490746 -0.082358 -0.105882 -0.838144 -0.535074
--0.092138 -0.483007 -0.082358 -0.105882 -0.838144 -0.535074
--0.092138 -0.483007 -0.082358 -0.113446 -0.898015 -0.425088
--0.030875 -0.490746 -0.082358 -0.113446 -0.898015 -0.425088
--0.031449 -0.499869 -0.062932 -0.113446 -0.898015 -0.425088
--0.093851 -0.491986 -0.062932 -0.113446 -0.898015 -0.425088
--0.093851 -0.491986 -0.062932 -0.119221 -0.943735 -0.308466
--0.031449 -0.499869 -0.062932 -0.119221 -0.943735 -0.308466
--0.031866 -0.506490 -0.042515 -0.119221 -0.943735 -0.308466
--0.095094 -0.498502 -0.042515 -0.119221 -0.943735 -0.308466
--0.095094 -0.498502 -0.042515 -0.123122 -0.974609 -0.187026
--0.031866 -0.506490 -0.042515 -0.123122 -0.974609 -0.187026
--0.032118 -0.510505 -0.021426 -0.123122 -0.974609 -0.187026
--0.095848 -0.502454 -0.021426 -0.123122 -0.974609 -0.187026
--0.095848 -0.502454 -0.021426 -0.125087 -0.990165 -0.062666
--0.032118 -0.510505 -0.021426 -0.125087 -0.990165 -0.062666
--0.032203 -0.511850 0.000000 -0.125087 -0.990165 -0.062666
--0.096101 -0.503778 0.000000 -0.125087 -0.990165 -0.062666
--0.032203 -0.511850 0.000000 -0.000000 -0.998035 0.062667
-0.032203 -0.511850 0.000000 -0.000000 -0.998035 0.062667
-0.032118 -0.510505 0.021426 -0.000000 -0.998035 0.062667
--0.032118 -0.510505 0.021426 -0.000000 -0.998035 0.062667
--0.032118 -0.510505 0.021426 0.000000 -0.982355 0.187026
-0.032118 -0.510505 0.021426 0.000000 -0.982355 0.187026
-0.031866 -0.506490 0.042515 0.000000 -0.982355 0.187026
--0.031866 -0.506490 0.042515 0.000000 -0.982355 0.187026
--0.031866 -0.506490 0.042515 -0.000000 -0.951235 0.308466
-0.031866 -0.506490 0.042515 -0.000000 -0.951235 0.308466
-0.031449 -0.499869 0.062932 -0.000000 -0.951235 0.308466
--0.031449 -0.499869 0.062932 -0.000000 -0.951235 0.308466
--0.031449 -0.499869 0.062932 -0.000000 -0.905152 0.425088
-0.031449 -0.499869 0.062932 -0.000000 -0.905152 0.425088
-0.030875 -0.490746 0.082358 -0.000000 -0.905152 0.425088
--0.030875 -0.490746 0.082358 -0.000000 -0.905152 0.425088
--0.030875 -0.490746 0.082358 0.000000 -0.844805 0.535074
-0.030875 -0.490746 0.082358 0.000000 -0.844805 0.535074
-0.030153 -0.479265 0.100484 0.000000 -0.844805 0.535074
--0.030153 -0.479265 0.100484 0.000000 -0.844805 0.535074
--0.030153 -0.479265 0.100484 0.000000 -0.771132 0.636676
-0.030153 -0.479265 0.100484 0.000000 -0.771132 0.636676
-0.029294 -0.465608 0.117026 0.000000 -0.771132 0.636676
--0.029294 -0.465608 0.117026 0.000000 -0.771132 0.636676
--0.029294 -0.465608 0.117026 0.000000 -0.685266 0.728293
-0.029294 -0.465608 0.117026 0.000000 -0.685266 0.728293
-0.028311 -0.449989 0.131722 0.000000 -0.685266 0.728293
--0.028311 -0.449989 0.131722 0.000000 -0.685266 0.728293
--0.028311 -0.449989 0.131722 -0.000000 -0.588544 0.808465
-0.028311 -0.449989 0.131722 -0.000000 -0.588544 0.808465
-0.027220 -0.432655 0.144341 -0.000000 -0.588544 0.808465
--0.027220 -0.432655 0.144341 -0.000000 -0.588544 0.808465
--0.027220 -0.432655 0.144341 -0.000001 -0.482485 0.875904
-0.027220 -0.432655 0.144341 -0.000001 -0.482485 0.875904
-0.026039 -0.413879 0.154684 -0.000001 -0.482485 0.875904
--0.026039 -0.413879 0.154684 -0.000001 -0.482485 0.875904
--0.026039 -0.413879 0.154684 -0.000001 -0.368753 0.929528
-0.026039 -0.413879 0.154684 -0.000001 -0.368753 0.929528
-0.024786 -0.393957 0.162587 -0.000001 -0.368753 0.929528
--0.024786 -0.393957 0.162587 -0.000001 -0.368753 0.929528
--0.024786 -0.393957 0.162587 -0.000000 -0.249151 0.968465
-0.024786 -0.393957 0.162587 -0.000000 -0.249151 0.968465
-0.023480 -0.373204 0.167926 -0.000000 -0.249151 0.968465
--0.023480 -0.373204 0.167926 -0.000000 -0.249151 0.968465
--0.023480 -0.373204 0.167926 -0.000000 -0.125578 0.992084
-0.023480 -0.373204 0.167926 -0.000000 -0.125578 0.992084
-0.022143 -0.351947 0.170617 -0.000000 -0.125578 0.992084
--0.022143 -0.351947 0.170617 -0.000000 -0.125578 0.992084
-0.022143 -0.351947 0.170617 0.000000 0.000000 1.000000
-0.020795 -0.330520 0.170617 0.000000 0.000000 1.000000
--0.020795 -0.330520 0.170617 -0.000000 0.125577 0.992084
-0.020795 -0.330520 0.170617 -0.000000 0.125577 0.992084
-0.019457 -0.309263 0.167926 -0.000000 0.125577 0.992084
--0.019457 -0.309263 0.167926 -0.000000 0.125577 0.992084
--0.019457 -0.309263 0.167926 -0.000000 0.249151 0.968465
-0.019457 -0.309263 0.167926 -0.000000 0.249151 0.968465
-0.018152 -0.288510 0.162587 -0.000000 0.249151 0.968465
--0.018152 -0.288510 0.162587 -0.000000 0.249151 0.968465
--0.018152 -0.288510 0.162587 -0.000000 0.368753 0.929527
-0.018152 -0.288510 0.162587 -0.000000 0.368753 0.929527
-0.016898 -0.268588 0.154684 -0.000000 0.368753 0.929527
--0.016898 -0.268588 0.154684 -0.000000 0.368753 0.929527
--0.016898 -0.268588 0.154684 -0.000000 0.482485 0.875904
-0.016898 -0.268588 0.154684 -0.000000 0.482485 0.875904
-0.015717 -0.249813 0.144341 -0.000000 0.482485 0.875904
--0.015717 -0.249813 0.144341 -0.000000 0.482485 0.875904
--0.015717 -0.249813 0.144341 0.000000 0.588545 0.808464
-0.015717 -0.249813 0.144341 0.000000 0.588545 0.808464
-0.014626 -0.232478 0.131722 0.000000 0.588545 0.808464
--0.014626 -0.232478 0.131722 0.000000 0.588545 0.808464
--0.014626 -0.232478 0.131722 0.000000 0.685266 0.728293
-0.014626 -0.232478 0.131722 0.000000 0.685266 0.728293
-0.013644 -0.216859 0.117026 0.000000 0.685266 0.728293
--0.013644 -0.216859 0.117026 0.000000 0.685266 0.728293
--0.013644 -0.216859 0.117026 0.000000 0.771131 0.636676
-0.013644 -0.216859 0.117026 0.000000 0.771131 0.636676
-0.012784 -0.203202 0.100484 0.000000 0.771131 0.636676
--0.012784 -0.203202 0.100484 0.000000 0.771131 0.636676
--0.012784 -0.203202 0.100484 0.000000 0.844806 0.535072
-0.012784 -0.203202 0.100484 0.000000 0.844806 0.535072
-0.012062 -0.191721 0.082358 0.000000 0.844806 0.535072
--0.012062 -0.191721 0.082358 0.000000 0.844806 0.535072
--0.012062 -0.191721 0.082358 0.000000 0.905151 0.425091
-0.012062 -0.191721 0.082358 0.000000 0.905151 0.425091
-0.011488 -0.182598 0.062932 0.000000 0.905151 0.425091
--0.011488 -0.182598 0.062932 0.000000 0.905151 0.425091
--0.011488 -0.182598 0.062932 0.000000 0.951235 0.308466
-0.011488 -0.182598 0.062932 0.000000 0.951235 0.308466
-0.011072 -0.175977 0.042515 0.000000 0.951235 0.308466
--0.011072 -0.175977 0.042515 0.000000 0.951235 0.308466
--0.011072 -0.175977 0.042515 -0.000001 0.982355 0.187025
-0.011072 -0.175977 0.042515 -0.000001 0.982355 0.187025
-0.010819 -0.171962 0.021426 -0.000001 0.982355 0.187025
--0.010819 -0.171962 0.021426 -0.000001 0.982355 0.187025
--0.010819 -0.171962 0.021426 -0.000001 0.998034 0.062667
-0.010819 -0.171962 0.021426 -0.000001 0.998034 0.062667
-0.010734 -0.170617 0.000000 -0.000001 0.998034 0.062667
--0.010734 -0.170617 0.000000 -0.000001 0.998034 0.062667
--0.010734 -0.170617 0.000000 -0.000001 0.998034 -0.062667
-0.010734 -0.170617 0.000000 -0.000001 0.998034 -0.062667
-0.010819 -0.171962 -0.021426 -0.000001 0.998034 -0.062667
--0.010819 -0.171962 -0.021426 -0.000001 0.998034 -0.062667
--0.010819 -0.171962 -0.021426 -0.000001 0.982355 -0.187025
-0.010819 -0.171962 -0.021426 -0.000001 0.982355 -0.187025
-0.011072 -0.175977 -0.042515 -0.000001 0.982355 -0.187025
--0.011072 -0.175977 -0.042515 -0.000001 0.982355 -0.187025
--0.011072 -0.175977 -0.042515 0.000000 0.951235 -0.308466
-0.011072 -0.175977 -0.042515 0.000000 0.951235 -0.308466
-0.011488 -0.182598 -0.062932 0.000000 0.951235 -0.308466
--0.011488 -0.182598 -0.062932 0.000000 0.951235 -0.308466
--0.011488 -0.182598 -0.062932 0.000000 0.905151 -0.425091
-0.011488 -0.182598 -0.062932 0.000000 0.905151 -0.425091
-0.012062 -0.191721 -0.082358 0.000000 0.905151 -0.425091
--0.012062 -0.191721 -0.082358 0.000000 0.905151 -0.425091
--0.012062 -0.191721 -0.082358 0.000000 0.844806 -0.535072
-0.012062 -0.191721 -0.082358 0.000000 0.844806 -0.535072
-0.012784 -0.203202 -0.100484 0.000000 0.844806 -0.535072
--0.012784 -0.203202 -0.100484 0.000000 0.844806 -0.535072
--0.012784 -0.203202 -0.100484 0.000000 0.771131 -0.636676
-0.012784 -0.203202 -0.100484 0.000000 0.771131 -0.636676
-0.013644 -0.216859 -0.117026 0.000000 0.771131 -0.636676
--0.013644 -0.216859 -0.117026 0.000000 0.771131 -0.636676
--0.013644 -0.216859 -0.117026 0.000000 0.685266 -0.728293
-0.013644 -0.216859 -0.117026 0.000000 0.685266 -0.728293
-0.014626 -0.232478 -0.131722 0.000000 0.685266 -0.728293
--0.014626 -0.232478 -0.131722 0.000000 0.685266 -0.728293
--0.014626 -0.232478 -0.131722 0.000000 0.588545 -0.808464
-0.014626 -0.232478 -0.131722 0.000000 0.588545 -0.808464
-0.015717 -0.249813 -0.144341 0.000000 0.588545 -0.808464
--0.015717 -0.249813 -0.144341 0.000000 0.588545 -0.808464
--0.015717 -0.249813 -0.144341 -0.000000 0.482485 -0.875904
-0.015717 -0.249813 -0.144341 -0.000000 0.482485 -0.875904
-0.016898 -0.268588 -0.154684 -0.000000 0.482485 -0.875904
--0.016898 -0.268588 -0.154684 -0.000000 0.482485 -0.875904
--0.016898 -0.268588 -0.154684 -0.000000 0.368753 -0.929527
-0.016898 -0.268588 -0.154684 -0.000000 0.368753 -0.929527
-0.018152 -0.288510 -0.162587 -0.000000 0.368753 -0.929527
--0.018152 -0.288510 -0.162587 -0.000000 0.368753 -0.929527
--0.018152 -0.288510 -0.162587 -0.000000 0.249151 -0.968465
-0.018152 -0.288510 -0.162587 -0.000000 0.249151 -0.968465
-0.019457 -0.309263 -0.167926 -0.000000 0.249151 -0.968465
--0.019457 -0.309263 -0.167926 -0.000000 0.249151 -0.968465
--0.019457 -0.309263 -0.167926 -0.000000 0.125577 -0.992084
-0.019457 -0.309263 -0.167926 -0.000000 0.125577 -0.992084
-0.020795 -0.330520 -0.170617 -0.000000 0.125577 -0.992084
--0.020795 -0.330520 -0.170617 -0.000000 0.125577 -0.992084
-0.020795 -0.330520 -0.170617 0.000000 0.000000 -1.000000
-0.022143 -0.351947 -0.170617 0.000000 0.000000 -1.000000
--0.022143 -0.351947 -0.170617 -0.000000 -0.125578 -0.992084
-0.022143 -0.351947 -0.170617 -0.000000 -0.125578 -0.992084
-0.023480 -0.373204 -0.167926 -0.000000 -0.125578 -0.992084
--0.023480 -0.373204 -0.167926 -0.000000 -0.125578 -0.992084
--0.023480 -0.373204 -0.167926 -0.000000 -0.249151 -0.968465
-0.023480 -0.373204 -0.167926 -0.000000 -0.249151 -0.968465
-0.024786 -0.393957 -0.162587 -0.000000 -0.249151 -0.968465
--0.024786 -0.393957 -0.162587 -0.000000 -0.249151 -0.968465
--0.024786 -0.393957 -0.162587 -0.000001 -0.368753 -0.929528
-0.024786 -0.393957 -0.162587 -0.000001 -0.368753 -0.929528
-0.026039 -0.413879 -0.154684 -0.000001 -0.368753 -0.929528
--0.026039 -0.413879 -0.154684 -0.000001 -0.368753 -0.929528
--0.026039 -0.413879 -0.154684 -0.000001 -0.482485 -0.875904
-0.026039 -0.413879 -0.154684 -0.000001 -0.482485 -0.875904
-0.027220 -0.432655 -0.144341 -0.000001 -0.482485 -0.875904
--0.027220 -0.432655 -0.144341 -0.000001 -0.482485 -0.875904
--0.027220 -0.432655 -0.144341 -0.000000 -0.588544 -0.808465
-0.027220 -0.432655 -0.144341 -0.000000 -0.588544 -0.808465
-0.028311 -0.449989 -0.131722 -0.000000 -0.588544 -0.808465
--0.028311 -0.449989 -0.131722 -0.000000 -0.588544 -0.808465
--0.028311 -0.449989 -0.131722 0.000000 -0.685266 -0.728293
-0.028311 -0.449989 -0.131722 0.000000 -0.685266 -0.728293
-0.029294 -0.465608 -0.117026 0.000000 -0.685266 -0.728293
--0.029294 -0.465608 -0.117026 0.000000 -0.685266 -0.728293
--0.029294 -0.465608 -0.117026 0.000000 -0.771132 -0.636676
-0.029294 -0.465608 -0.117026 0.000000 -0.771132 -0.636676
-0.030153 -0.479265 -0.100484 0.000000 -0.771132 -0.636676
--0.030153 -0.479265 -0.100484 0.000000 -0.771132 -0.636676
--0.030153 -0.479265 -0.100484 0.000000 -0.844805 -0.535074
-0.030153 -0.479265 -0.100484 0.000000 -0.844805 -0.535074
-0.030875 -0.490746 -0.082358 0.000000 -0.844805 -0.535074
--0.030875 -0.490746 -0.082358 0.000000 -0.844805 -0.535074
--0.030875 -0.490746 -0.082358 -0.000000 -0.905152 -0.425088
-0.030875 -0.490746 -0.082358 -0.000000 -0.905152 -0.425088
-0.031449 -0.499869 -0.062932 -0.000000 -0.905152 -0.425088
--0.031449 -0.499869 -0.062932 -0.000000 -0.905152 -0.425088
--0.031449 -0.499869 -0.062932 -0.000000 -0.951235 -0.308466
-0.031449 -0.499869 -0.062932 -0.000000 -0.951235 -0.308466
-0.031866 -0.506490 -0.042515 -0.000000 -0.951235 -0.308466
--0.031866 -0.506490 -0.042515 -0.000000 -0.951235 -0.308466
--0.031866 -0.506490 -0.042515 0.000000 -0.982355 -0.187026
-0.031866 -0.506490 -0.042515 0.000000 -0.982355 -0.187026
-0.032118 -0.510505 -0.021426 0.000000 -0.982355 -0.187026
--0.032118 -0.510505 -0.021426 0.000000 -0.982355 -0.187026
--0.032118 -0.510505 -0.021426 -0.000000 -0.998035 -0.062667
-0.032118 -0.510505 -0.021426 -0.000000 -0.998035 -0.062667
-0.032203 -0.511850 0.000000 -0.000000 -0.998035 -0.062667
--0.032203 -0.511850 0.000000 -0.000000 -0.998035 -0.062667
-0.032203 -0.511850 0.000000 0.125087 -0.990165 0.062667
-0.096101 -0.503778 0.000000 0.125087 -0.990165 0.062667
-0.095848 -0.502454 0.021426 0.125087 -0.990165 0.062667
-0.032118 -0.510505 0.021426 0.125087 -0.990165 0.062667
-0.032118 -0.510505 0.021426 0.123122 -0.974609 0.187026
-0.095848 -0.502454 0.021426 0.123122 -0.974609 0.187026
-0.095095 -0.498502 0.042515 0.123122 -0.974609 0.187026
-0.031866 -0.506490 0.042515 0.123122 -0.974609 0.187026
-0.031866 -0.506490 0.042515 0.119221 -0.943735 0.308466
-0.095095 -0.498502 0.042515 0.119221 -0.943735 0.308466
-0.093851 -0.491986 0.062932 0.119221 -0.943735 0.308466
-0.031449 -0.499869 0.062932 0.119221 -0.943735 0.308466
-0.031449 -0.499869 0.062932 0.113446 -0.898014 0.425090
-0.093851 -0.491986 0.062932 0.113446 -0.898014 0.425090
-0.092139 -0.483007 0.082358 0.113446 -0.898014 0.425090
-0.030875 -0.490746 0.082358 0.113446 -0.898014 0.425090
-0.030875 -0.490746 0.082358 0.105883 -0.838144 0.535074
-0.092139 -0.483007 0.082358 0.105883 -0.838144 0.535074
-0.089983 -0.471707 0.100484 0.105883 -0.838144 0.535074
-0.030153 -0.479265 0.100484 0.105883 -0.838144 0.535074
-0.030153 -0.479265 0.100484 0.096649 -0.765051 0.636675
-0.089983 -0.471707 0.100484 0.096649 -0.765051 0.636675
-0.087419 -0.458265 0.117026 0.096649 -0.765051 0.636675
-0.029294 -0.465608 0.117026 0.096649 -0.765051 0.636675
-0.029294 -0.465608 0.117026 0.085887 -0.679862 0.728293
-0.087419 -0.458265 0.117026 0.085887 -0.679862 0.728293
-0.084486 -0.442892 0.131722 0.085887 -0.679862 0.728293
-0.028311 -0.449989 0.131722 0.085887 -0.679862 0.728293
-0.028311 -0.449989 0.131722 0.073765 -0.583904 0.808465
-0.084486 -0.442892 0.131722 0.073765 -0.583904 0.808465
-0.081232 -0.425831 0.144341 0.073765 -0.583904 0.808465
-0.027220 -0.432655 0.144341 0.073765 -0.583904 0.808465
-0.027220 -0.432655 0.144341 0.060472 -0.478681 0.875904
-0.081232 -0.425831 0.144341 0.060472 -0.478681 0.875904
-0.077707 -0.407351 0.154684 0.060472 -0.478681 0.875904
-0.026039 -0.413879 0.154684 0.060472 -0.478681 0.875904
-0.026039 -0.413879 0.154684 0.046217 -0.365845 0.929527
-0.077707 -0.407351 0.154684 0.046217 -0.365845 0.929527
-0.073966 -0.387744 0.162587 0.046217 -0.365845 0.929527
-0.024786 -0.393957 0.162587 0.046217 -0.365845 0.929527
-0.024786 -0.393957 0.162587 0.031227 -0.247186 0.968465
-0.073966 -0.387744 0.162587 0.031227 -0.247186 0.968465
-0.070070 -0.367318 0.167926 0.031227 -0.247186 0.968465
-0.023480 -0.373204 0.167926 0.031227 -0.247186 0.968465
-0.023480 -0.373204 0.167926 0.015739 -0.124587 0.992084
-0.070070 -0.367318 0.167926 0.015739 -0.124587 0.992084
-0.066079 -0.346396 0.170617 0.015739 -0.124587 0.992084
-0.022143 -0.351947 0.170617 0.015739 -0.124587 0.992084
-0.066079 -0.346396 0.170617 0.000000 0.000000 1.000000
-0.062056 -0.325308 0.170617 0.000000 0.000000 1.000000
-0.020795 -0.330520 0.170617 -0.015739 0.124587 0.992084
-0.062056 -0.325308 0.170617 -0.015739 0.124587 0.992084
-0.058065 -0.304386 0.167926 -0.015739 0.124587 0.992084
-0.019457 -0.309263 0.167926 -0.015739 0.124587 0.992084
-0.019457 -0.309263 0.167926 -0.031227 0.247186 0.968465
-0.058065 -0.304386 0.167926 -0.031227 0.247186 0.968465
-0.054168 -0.283960 0.162587 -0.031227 0.247186 0.968465
-0.018152 -0.288510 0.162587 -0.031227 0.247186 0.968465
-0.018152 -0.288510 0.162587 -0.046217 0.365845 0.929527
-0.054168 -0.283960 0.162587 -0.046217 0.365845 0.929527
-0.050428 -0.264353 0.154684 -0.046217 0.365845 0.929527
-0.016898 -0.268588 0.154684 -0.046217 0.365845 0.929527
-0.016898 -0.268588 0.154684 -0.060472 0.478680 0.875904
-0.050428 -0.264353 0.154684 -0.060472 0.478680 0.875904
-0.046903 -0.245873 0.144341 -0.060472 0.478680 0.875904
-0.015717 -0.249813 0.144341 -0.060472 0.478680 0.875904
-0.015717 -0.249813 0.144341 -0.073765 0.583904 0.808464
-0.046903 -0.245873 0.144341 -0.073765 0.583904 0.808464
-0.043648 -0.228812 0.131722 -0.073765 0.583904 0.808464
-0.014626 -0.232478 0.131722 -0.073765 0.583904 0.808464
-0.014626 -0.232478 0.131722 -0.085886 0.679862 0.728293
-0.043648 -0.228812 0.131722 -0.085886 0.679862 0.728293
-0.040716 -0.213439 0.117026 -0.085886 0.679862 0.728293
-0.013644 -0.216859 0.117026 -0.085886 0.679862 0.728293
-0.013644 -0.216859 0.117026 -0.096648 0.765050 0.636677
-0.040716 -0.213439 0.117026 -0.096648 0.765050 0.636677
-0.038152 -0.199997 0.100484 -0.096648 0.765050 0.636677
-0.012784 -0.203202 0.100484 -0.096648 0.765050 0.636677
-0.012784 -0.203202 0.100484 -0.105882 0.838145 0.535073
-0.038152 -0.199997 0.100484 -0.105882 0.838145 0.535073
-0.035996 -0.188697 0.082358 -0.105882 0.838145 0.535073
-0.012062 -0.191721 0.082358 -0.105882 0.838145 0.535073
-0.012062 -0.191721 0.082358 -0.113446 0.898013 0.425091
-0.035996 -0.188697 0.082358 -0.113446 0.898013 0.425091
-0.034283 -0.179718 0.062932 -0.113446 0.898013 0.425091
-0.011488 -0.182598 0.062932 -0.113446 0.898013 0.425091
-0.011488 -0.182598 0.062932 -0.119222 0.943735 0.308466
-0.034283 -0.179718 0.062932 -0.119222 0.943735 0.308466
-0.033040 -0.173202 0.042515 -0.119222 0.943735 0.308466
-0.011072 -0.175977 0.042515 -0.119222 0.943735 0.308466
-0.011072 -0.175977 0.042515 -0.123122 0.974609 0.187025
-0.033040 -0.173202 0.042515 -0.123122 0.974609 0.187025
-0.032286 -0.169250 0.021426 -0.123122 0.974609 0.187025
-0.010819 -0.171962 0.021426 -0.123122 0.974609 0.187025
-0.010819 -0.171962 0.021426 -0.125087 0.990165 0.062667
-0.032286 -0.169250 0.021426 -0.125087 0.990165 0.062667
-0.032034 -0.167926 0.000000 -0.125087 0.990165 0.062667
-0.010734 -0.170617 0.000000 -0.125087 0.990165 0.062667
-0.010734 -0.170617 0.000000 -0.125087 0.990165 -0.062667
-0.032034 -0.167926 0.000000 -0.125087 0.990165 -0.062667
-0.032286 -0.169250 -0.021426 -0.125087 0.990165 -0.062667
-0.010819 -0.171962 -0.021426 -0.125087 0.990165 -0.062667
-0.010819 -0.171962 -0.021426 -0.123122 0.974609 -0.187025
-0.032286 -0.169250 -0.021426 -0.123122 0.974609 -0.187025
-0.033040 -0.173202 -0.042515 -0.123122 0.974609 -0.187025
-0.011072 -0.175977 -0.042515 -0.123122 0.974609 -0.187025
-0.011072 -0.175977 -0.042515 -0.119222 0.943735 -0.308466
-0.033040 -0.173202 -0.042515 -0.119222 0.943735 -0.308466
-0.034283 -0.179718 -0.062932 -0.119222 0.943735 -0.308466
-0.011488 -0.182598 -0.062932 -0.119222 0.943735 -0.308466
-0.011488 -0.182598 -0.062932 -0.113446 0.898013 -0.425091
-0.034283 -0.179718 -0.062932 -0.113446 0.898013 -0.425091
-0.035996 -0.188697 -0.082358 -0.113446 0.898013 -0.425091
-0.012062 -0.191721 -0.082358 -0.113446 0.898013 -0.425091
-0.012062 -0.191721 -0.082358 -0.105882 0.838145 -0.535073
-0.035996 -0.188697 -0.082358 -0.105882 0.838145 -0.535073
-0.038152 -0.199997 -0.100484 -0.105882 0.838145 -0.535073
-0.012784 -0.203202 -0.100484 -0.105882 0.838145 -0.535073
-0.012784 -0.203202 -0.100484 -0.096648 0.765050 -0.636677
-0.038152 -0.199997 -0.100484 -0.096648 0.765050 -0.636677
-0.040716 -0.213439 -0.117026 -0.096648 0.765050 -0.636677
-0.013644 -0.216859 -0.117026 -0.096648 0.765050 -0.636677
-0.013644 -0.216859 -0.117026 -0.085886 0.679862 -0.728293
-0.040716 -0.213439 -0.117026 -0.085886 0.679862 -0.728293
-0.043648 -0.228812 -0.131722 -0.085886 0.679862 -0.728293
-0.014626 -0.232478 -0.131722 -0.085886 0.679862 -0.728293
-0.014626 -0.232478 -0.131722 -0.073765 0.583904 -0.808464
-0.043648 -0.228812 -0.131722 -0.073765 0.583904 -0.808464
-0.046903 -0.245873 -0.144341 -0.073765 0.583904 -0.808464
-0.015717 -0.249813 -0.144341 -0.073765 0.583904 -0.808464
-0.015717 -0.249813 -0.144341 -0.060472 0.478680 -0.875904
-0.046903 -0.245873 -0.144341 -0.060472 0.478680 -0.875904
-0.050428 -0.264353 -0.154684 -0.060472 0.478680 -0.875904
-0.016898 -0.268588 -0.154684 -0.060472 0.478680 -0.875904
-0.016898 -0.268588 -0.154684 -0.046217 0.365845 -0.929527
-0.050428 -0.264353 -0.154684 -0.046217 0.365845 -0.929527
-0.054168 -0.283960 -0.162587 -0.046217 0.365845 -0.929527
-0.018152 -0.288510 -0.162587 -0.046217 0.365845 -0.929527
-0.018152 -0.288510 -0.162587 -0.031227 0.247186 -0.968465
-0.054168 -0.283960 -0.162587 -0.031227 0.247186 -0.968465
-0.058065 -0.304386 -0.167926 -0.031227 0.247186 -0.968465
-0.019457 -0.309263 -0.167926 -0.031227 0.247186 -0.968465
-0.019457 -0.309263 -0.167926 -0.015739 0.124587 -0.992084
-0.058065 -0.304386 -0.167926 -0.015739 0.124587 -0.992084
-0.062056 -0.325308 -0.170617 -0.015739 0.124587 -0.992084
-0.020795 -0.330520 -0.170617 -0.015739 0.124587 -0.992084
-0.062056 -0.325308 -0.170617 0.000000 0.000000 -1.000000
-0.066079 -0.346396 -0.170617 0.000000 0.000000 -1.000000
-0.022143 -0.351947 -0.170617 0.015739 -0.124587 -0.992084
-0.066079 -0.346396 -0.170617 0.015739 -0.124587 -0.992084
-0.070070 -0.367318 -0.167926 0.015739 -0.124587 -0.992084
-0.023480 -0.373204 -0.167926 0.015739 -0.124587 -0.992084
-0.023480 -0.373204 -0.167926 0.031227 -0.247186 -0.968465
-0.070070 -0.367318 -0.167926 0.031227 -0.247186 -0.968465
-0.073966 -0.387744 -0.162587 0.031227 -0.247186 -0.968465
-0.024786 -0.393957 -0.162587 0.031227 -0.247186 -0.968465
-0.024786 -0.393957 -0.162587 0.046217 -0.365845 -0.929527
-0.073966 -0.387744 -0.162587 0.046217 -0.365845 -0.929527
-0.077707 -0.407351 -0.154684 0.046217 -0.365845 -0.929527
-0.026039 -0.413879 -0.154684 0.046217 -0.365845 -0.929527
-0.026039 -0.413879 -0.154684 0.060472 -0.478681 -0.875904
-0.077707 -0.407351 -0.154684 0.060472 -0.478681 -0.875904
-0.081232 -0.425831 -0.144341 0.060472 -0.478681 -0.875904
-0.027220 -0.432655 -0.144341 0.060472 -0.478681 -0.875904
-0.027220 -0.432655 -0.144341 0.073765 -0.583904 -0.808465
-0.081232 -0.425831 -0.144341 0.073765 -0.583904 -0.808465
-0.084486 -0.442892 -0.131722 0.073765 -0.583904 -0.808465
-0.028311 -0.449989 -0.131722 0.073765 -0.583904 -0.808465
-0.028311 -0.449989 -0.131722 0.085887 -0.679862 -0.728293
-0.084486 -0.442892 -0.131722 0.085887 -0.679862 -0.728293
-0.087419 -0.458265 -0.117026 0.085887 -0.679862 -0.728293
-0.029294 -0.465608 -0.117026 0.085887 -0.679862 -0.728293
-0.029294 -0.465608 -0.117026 0.096649 -0.765051 -0.636675
-0.087419 -0.458265 -0.117026 0.096649 -0.765051 -0.636675
-0.089983 -0.471707 -0.100484 0.096649 -0.765051 -0.636675
-0.030153 -0.479265 -0.100484 0.096649 -0.765051 -0.636675
-0.030153 -0.479265 -0.100484 0.105883 -0.838144 -0.535074
-0.089983 -0.471707 -0.100484 0.105883 -0.838144 -0.535074
-0.092139 -0.483007 -0.082358 0.105883 -0.838144 -0.535074
-0.030875 -0.490746 -0.082358 0.105883 -0.838144 -0.535074
-0.030875 -0.490746 -0.082358 0.113446 -0.898014 -0.425090
-0.092139 -0.483007 -0.082358 0.113446 -0.898014 -0.425090
-0.093851 -0.491986 -0.062932 0.113446 -0.898014 -0.425090
-0.031449 -0.499869 -0.062932 0.113446 -0.898014 -0.425090
-0.031449 -0.499869 -0.062932 0.119221 -0.943735 -0.308466
-0.093851 -0.491986 -0.062932 0.119221 -0.943735 -0.308466
-0.095095 -0.498502 -0.042515 0.119221 -0.943735 -0.308466
-0.031866 -0.506490 -0.042515 0.119221 -0.943735 -0.308466
-0.031866 -0.506490 -0.042515 0.123122 -0.974609 -0.187026
-0.095095 -0.498502 -0.042515 0.123122 -0.974609 -0.187026
-0.095848 -0.502454 -0.021426 0.123122 -0.974609 -0.187026
-0.032118 -0.510505 -0.021426 0.123122 -0.974609 -0.187026
-0.032118 -0.510505 -0.021426 0.125087 -0.990165 -0.062667
-0.095848 -0.502454 -0.021426 0.125087 -0.990165 -0.062667
-0.096101 -0.503778 0.000000 0.125087 -0.990165 -0.062667
-0.032203 -0.511850 0.000000 0.125087 -0.990165 -0.062667
-0.096101 -0.503778 0.000000 0.248201 -0.966680 0.062666
-0.158483 -0.487761 0.000000 0.248201 -0.966680 0.062666
-0.158067 -0.486479 0.021426 0.248201 -0.966680 0.062666
-0.095848 -0.502454 0.021426 0.248201 -0.966680 0.062666
-0.095848 -0.502454 0.021426 0.244302 -0.951493 0.187025
-0.158067 -0.486479 0.021426 0.244302 -0.951493 0.187025
-0.156824 -0.482653 0.042515 0.244302 -0.951493 0.187025
-0.095095 -0.498502 0.042515 0.244302 -0.951493 0.187025
-0.095095 -0.498502 0.042515 0.236563 -0.921350 0.308467
-0.156824 -0.482653 0.042515 0.236563 -0.921350 0.308467
-0.154774 -0.476344 0.062932 0.236563 -0.921350 0.308467
-0.093851 -0.491986 0.062932 0.236563 -0.921350 0.308467
-0.093851 -0.491986 0.062932 0.225102 -0.876714 0.425090
-0.154774 -0.476344 0.062932 0.225102 -0.876714 0.425090
-0.151949 -0.467650 0.082358 0.225102 -0.876714 0.425090
-0.092139 -0.483007 0.082358 0.225102 -0.876714 0.425090
-0.092139 -0.483007 0.082358 0.210094 -0.818265 0.535073
-0.151949 -0.467650 0.082358 0.210094 -0.818265 0.535073
-0.148394 -0.456710 0.100484 0.210094 -0.818265 0.535073
-0.089983 -0.471707 0.100484 0.210094 -0.818265 0.535073
-0.089983 -0.471707 0.100484 0.191773 -0.746905 0.636676
-0.148394 -0.456710 0.100484 0.191773 -0.746905 0.636676
-0.144165 -0.443695 0.117026 0.191773 -0.746905 0.636676
-0.087419 -0.458265 0.117026 0.191773 -0.746905 0.636676
-0.087419 -0.458265 0.117026 0.170419 -0.663737 0.728293
-0.144165 -0.443695 0.117026 0.170419 -0.663737 0.728293
-0.139329 -0.428811 0.131722 0.170419 -0.663737 0.728293
-0.084486 -0.442892 0.131722 0.170419 -0.663737 0.728293
-0.084486 -0.442892 0.131722 0.146365 -0.570054 0.808465
-0.139329 -0.428811 0.131722 0.146365 -0.570054 0.808465
-0.133962 -0.412292 0.144341 0.146365 -0.570054 0.808465
-0.081232 -0.425831 0.144341 0.146365 -0.570054 0.808465
-0.081232 -0.425831 0.144341 0.119989 -0.467327 0.875904
-0.133962 -0.412292 0.144341 0.119989 -0.467327 0.875904
-0.128148 -0.394400 0.154684 0.119989 -0.467327 0.875904
-0.077707 -0.407351 0.154684 0.119989 -0.467327 0.875904
-0.077707 -0.407351 0.154684 0.091705 -0.357169 0.929527
-0.128148 -0.394400 0.154684 0.091705 -0.357169 0.929527
-0.121980 -0.375416 0.162587 0.091705 -0.357169 0.929527
-0.073966 -0.387744 0.162587 0.091705 -0.357169 0.929527
-0.073966 -0.387744 0.162587 0.061961 -0.241323 0.968465
-0.121980 -0.375416 0.162587 0.061961 -0.241323 0.968465
-0.115554 -0.355640 0.167926 0.061961 -0.241323 0.968465
-0.070070 -0.367318 0.167926 0.061961 -0.241323 0.968465
-0.070070 -0.367318 0.167926 0.031230 -0.121632 0.992084
-0.115554 -0.355640 0.167926 0.031230 -0.121632 0.992084
-0.108973 -0.335383 0.170617 0.031230 -0.121632 0.992084
-0.066079 -0.346396 0.170617 0.031230 -0.121632 0.992084
-0.108973 -0.335383 0.170617 0.000000 0.000000 1.000000
-0.102338 -0.314965 0.170617 0.000000 0.000000 1.000000
-0.062056 -0.325308 0.170617 -0.031230 0.121632 0.992084
-0.102338 -0.314965 0.170617 -0.031230 0.121632 0.992084
-0.095757 -0.294708 0.167926 -0.031230 0.121632 0.992084
-0.058065 -0.304386 0.167926 -0.031230 0.121632 0.992084
-0.058065 -0.304386 0.167926 -0.061961 0.241323 0.968465
-0.095757 -0.294708 0.167926 -0.061961 0.241323 0.968465
-0.089331 -0.274932 0.162587 -0.061961 0.241323 0.968465
-0.054168 -0.283960 0.162587 -0.061961 0.241323 0.968465
-0.054168 -0.283960 0.162587 -0.091705 0.357168 0.929527
-0.089331 -0.274932 0.162587 -0.091705 0.357168 0.929527
-0.083163 -0.255948 0.154684 -0.091705 0.357168 0.929527
-0.050428 -0.264353 0.154684 -0.091705 0.357168 0.929527
-0.050428 -0.264353 0.154684 -0.119989 0.467327 0.875904
-0.083163 -0.255948 0.154684 -0.119989 0.467327 0.875904
-0.077349 -0.238056 0.144341 -0.119989 0.467327 0.875904
-0.046903 -0.245873 0.144341 -0.119989 0.467327 0.875904
-0.046903 -0.245873 0.144341 -0.146365 0.570055 0.808464
-0.077349 -0.238056 0.144341 -0.146365 0.570055 0.808464
-0.071982 -0.221537 0.131722 -0.146365 0.570055 0.808464
-0.043648 -0.228812 0.131722 -0.146365 0.570055 0.808464
-0.043648 -0.228812 0.131722 -0.170419 0.663737 0.728293
-0.071982 -0.221537 0.131722 -0.170419 0.663737 0.728293
-0.067146 -0.206653 0.117026 -0.170419 0.663737 0.728293
-0.040716 -0.213439 0.117026 -0.170419 0.663737 0.728293
-0.040716 -0.213439 0.117026 -0.191773 0.746904 0.636677
-0.067146 -0.206653 0.117026 -0.191773 0.746904 0.636677
-0.062917 -0.193638 0.100484 -0.191773 0.746904 0.636677
-0.038152 -0.199997 0.100484 -0.191773 0.746904 0.636677
-0.038152 -0.199997 0.100484 -0.210095 0.818265 0.535073
-0.062917 -0.193638 0.100484 -0.210095 0.818265 0.535073
-0.059362 -0.182698 0.082358 -0.210095 0.818265 0.535073
-0.035996 -0.188697 0.082358 -0.210095 0.818265 0.535073
-0.035996 -0.188697 0.082358 -0.225102 0.876714 0.425091
-0.059362 -0.182698 0.082358 -0.225102 0.876714 0.425091
-0.056538 -0.174004 0.062932 -0.225102 0.876714 0.425091
-0.034283 -0.179718 0.062932 -0.225102 0.876714 0.425091
-0.034283 -0.179718 0.062932 -0.236562 0.921351 0.308465
-0.056538 -0.174004 0.062932 -0.236562 0.921351 0.308465
-0.054487 -0.167695 0.042515 -0.236562 0.921351 0.308465
-0.033040 -0.173202 0.042515 -0.236562 0.921351 0.308465
-0.033040 -0.173202 0.042515 -0.244302 0.951493 0.187024
-0.054487 -0.167695 0.042515 -0.244302 0.951493 0.187024
-0.053244 -0.163869 0.021426 -0.244302 0.951493 0.187024
-0.032286 -0.169250 0.021426 -0.244302 0.951493 0.187024
-0.032286 -0.169250 0.021426 -0.248201 0.966679 0.062667
-0.053244 -0.163869 0.021426 -0.248201 0.966679 0.062667
-0.052828 -0.162587 0.000000 -0.248201 0.966679 0.062667
-0.032034 -0.167926 0.000000 -0.248201 0.966679 0.062667
-0.032034 -0.167926 0.000000 -0.248201 0.966679 -0.062667
-0.052828 -0.162587 0.000000 -0.248201 0.966679 -0.062667
-0.053244 -0.163869 -0.021426 -0.248201 0.966679 -0.062667
-0.032286 -0.169250 -0.021426 -0.248201 0.966679 -0.062667
-0.032286 -0.169250 -0.021426 -0.244302 0.951493 -0.187024
-0.053244 -0.163869 -0.021426 -0.244302 0.951493 -0.187024
-0.054487 -0.167695 -0.042515 -0.244302 0.951493 -0.187024
-0.033040 -0.173202 -0.042515 -0.244302 0.951493 -0.187024
-0.033040 -0.173202 -0.042515 -0.236562 0.921351 -0.308465
-0.054487 -0.167695 -0.042515 -0.236562 0.921351 -0.308465
-0.056538 -0.174004 -0.062932 -0.236562 0.921351 -0.308465
-0.034283 -0.179718 -0.062932 -0.236562 0.921351 -0.308465
-0.034283 -0.179718 -0.062932 -0.225102 0.876714 -0.425091
-0.056538 -0.174004 -0.062932 -0.225102 0.876714 -0.425091
-0.059362 -0.182698 -0.082358 -0.225102 0.876714 -0.425091
-0.035996 -0.188697 -0.082358 -0.225102 0.876714 -0.425091
-0.035996 -0.188697 -0.082358 -0.210095 0.818265 -0.535073
-0.059362 -0.182698 -0.082358 -0.210095 0.818265 -0.535073
-0.062917 -0.193638 -0.100484 -0.210095 0.818265 -0.535073
-0.038152 -0.199997 -0.100484 -0.210095 0.818265 -0.535073
-0.038152 -0.199997 -0.100484 -0.191773 0.746904 -0.636677
-0.062917 -0.193638 -0.100484 -0.191773 0.746904 -0.636677
-0.067146 -0.206653 -0.117026 -0.191773 0.746904 -0.636677
-0.040716 -0.213439 -0.117026 -0.191773 0.746904 -0.636677
-0.040716 -0.213439 -0.117026 -0.170419 0.663737 -0.728293
-0.067146 -0.206653 -0.117026 -0.170419 0.663737 -0.728293
-0.071982 -0.221537 -0.131722 -0.170419 0.663737 -0.728293
-0.043648 -0.228812 -0.131722 -0.170419 0.663737 -0.728293
-0.043648 -0.228812 -0.131722 -0.146365 0.570055 -0.808464
-0.071982 -0.221537 -0.131722 -0.146365 0.570055 -0.808464
-0.077349 -0.238056 -0.144341 -0.146365 0.570055 -0.808464
-0.046903 -0.245873 -0.144341 -0.146365 0.570055 -0.808464
-0.046903 -0.245873 -0.144341 -0.119989 0.467327 -0.875904
-0.077349 -0.238056 -0.144341 -0.119989 0.467327 -0.875904
-0.083163 -0.255948 -0.154684 -0.119989 0.467327 -0.875904
-0.050428 -0.264353 -0.154684 -0.119989 0.467327 -0.875904
-0.050428 -0.264353 -0.154684 -0.091705 0.357168 -0.929527
-0.083163 -0.255948 -0.154684 -0.091705 0.357168 -0.929527
-0.089331 -0.274932 -0.162587 -0.091705 0.357168 -0.929527
-0.054168 -0.283960 -0.162587 -0.091705 0.357168 -0.929527
-0.054168 -0.283960 -0.162587 -0.061961 0.241323 -0.968465
-0.089331 -0.274932 -0.162587 -0.061961 0.241323 -0.968465
-0.095757 -0.294708 -0.167926 -0.061961 0.241323 -0.968465
-0.058065 -0.304386 -0.167926 -0.061961 0.241323 -0.968465
-0.058065 -0.304386 -0.167926 -0.031230 0.121632 -0.992084
-0.095757 -0.294708 -0.167926 -0.031230 0.121632 -0.992084
-0.102338 -0.314965 -0.170617 -0.031230 0.121632 -0.992084
-0.062056 -0.325308 -0.170617 -0.031230 0.121632 -0.992084
-0.102338 -0.314965 -0.170617 0.000000 0.000000 -1.000000
-0.108973 -0.335383 -0.170617 0.000000 0.000000 -1.000000
-0.066079 -0.346396 -0.170617 0.031230 -0.121632 -0.992084
-0.108973 -0.335383 -0.170617 0.031230 -0.121632 -0.992084
-0.115554 -0.355640 -0.167926 0.031230 -0.121632 -0.992084
-0.070070 -0.367318 -0.167926 0.031230 -0.121632 -0.992084
-0.070070 -0.367318 -0.167926 0.061961 -0.241323 -0.968465
-0.115554 -0.355640 -0.167926 0.061961 -0.241323 -0.968465
-0.121980 -0.375416 -0.162587 0.061961 -0.241323 -0.968465
-0.073966 -0.387744 -0.162587 0.061961 -0.241323 -0.968465
-0.073966 -0.387744 -0.162587 0.091705 -0.357169 -0.929527
-0.121980 -0.375416 -0.162587 0.091705 -0.357169 -0.929527
-0.128148 -0.394400 -0.154684 0.091705 -0.357169 -0.929527
-0.077707 -0.407351 -0.154684 0.091705 -0.357169 -0.929527
-0.077707 -0.407351 -0.154684 0.119989 -0.467327 -0.875904
-0.128148 -0.394400 -0.154684 0.119989 -0.467327 -0.875904
-0.133962 -0.412292 -0.144341 0.119989 -0.467327 -0.875904
-0.081232 -0.425831 -0.144341 0.119989 -0.467327 -0.875904
-0.081232 -0.425831 -0.144341 0.146365 -0.570054 -0.808465
-0.133962 -0.412292 -0.144341 0.146365 -0.570054 -0.808465
-0.139329 -0.428811 -0.131722 0.146365 -0.570054 -0.808465
-0.084486 -0.442892 -0.131722 0.146365 -0.570054 -0.808465
-0.084486 -0.442892 -0.131722 0.170419 -0.663737 -0.728293
-0.139329 -0.428811 -0.131722 0.170419 -0.663737 -0.728293
-0.144165 -0.443695 -0.117026 0.170419 -0.663737 -0.728293
-0.087419 -0.458265 -0.117026 0.170419 -0.663737 -0.728293
-0.087419 -0.458265 -0.117026 0.191773 -0.746905 -0.636676
-0.144165 -0.443695 -0.117026 0.191773 -0.746905 -0.636676
-0.148394 -0.456710 -0.100484 0.191773 -0.746905 -0.636676
-0.089983 -0.471707 -0.100484 0.191773 -0.746905 -0.636676
-0.089983 -0.471707 -0.100484 0.210094 -0.818265 -0.535073
-0.148394 -0.456710 -0.100484 0.210094 -0.818265 -0.535073
-0.151949 -0.467650 -0.082358 0.210094 -0.818265 -0.535073
-0.092139 -0.483007 -0.082358 0.210094 -0.818265 -0.535073
-0.092139 -0.483007 -0.082358 0.225102 -0.876714 -0.425090
-0.151949 -0.467650 -0.082358 0.225102 -0.876714 -0.425090
-0.154774 -0.476344 -0.062932 0.225102 -0.876714 -0.425090
-0.093851 -0.491986 -0.062932 0.225102 -0.876714 -0.425090
-0.093851 -0.491986 -0.062932 0.236563 -0.921350 -0.308467
-0.154774 -0.476344 -0.062932 0.236563 -0.921350 -0.308467
-0.156824 -0.482653 -0.042515 0.236563 -0.921350 -0.308467
-0.095095 -0.498502 -0.042515 0.236563 -0.921350 -0.308467
-0.095095 -0.498502 -0.042515 0.244302 -0.951493 -0.187025
-0.156824 -0.482653 -0.042515 0.244302 -0.951493 -0.187025
-0.158067 -0.486479 -0.021426 0.244302 -0.951493 -0.187025
-0.095848 -0.502454 -0.021426 0.244302 -0.951493 -0.187025
-0.095848 -0.502454 -0.021426 0.248201 -0.966680 -0.062666
-0.158067 -0.486479 -0.021426 0.248201 -0.966680 -0.062666
-0.158483 -0.487761 0.000000 0.248201 -0.966680 -0.062666
-0.096101 -0.503778 0.000000 0.248201 -0.966680 -0.062666
-0.158483 -0.487761 0.000000 0.367402 -0.927949 0.062667
-0.218366 -0.464052 0.000000 0.367402 -0.927949 0.062667
-0.217792 -0.462832 0.021426 0.367402 -0.927949 0.062667
-0.158067 -0.486479 0.021426 0.367402 -0.927949 0.062667
-0.158067 -0.486479 0.021426 0.361630 -0.913371 0.187024
-0.217792 -0.462832 0.021426 0.361630 -0.913371 0.187024
-0.216079 -0.459192 0.042515 0.361630 -0.913371 0.187024
-0.156824 -0.482653 0.042515 0.361630 -0.913371 0.187024
-0.156824 -0.482653 0.042515 0.350173 -0.884436 0.308467
-0.216079 -0.459192 0.042515 0.350173 -0.884436 0.308467
-0.213255 -0.453189 0.062932 0.350173 -0.884436 0.308467
-0.154774 -0.476344 0.062932 0.350173 -0.884436 0.308467
-0.154774 -0.476344 0.062932 0.333209 -0.841588 0.425089
-0.213255 -0.453189 0.062932 0.333209 -0.841588 0.425089
-0.209363 -0.444918 0.082358 0.333209 -0.841588 0.425089
-0.151949 -0.467650 0.082358 0.333209 -0.841588 0.425089
-0.151949 -0.467650 0.082358 0.310994 -0.785480 0.535074
-0.209363 -0.444918 0.082358 0.310994 -0.785480 0.535074
-0.204465 -0.434510 0.100484 0.310994 -0.785480 0.535074
-0.148394 -0.456710 0.100484 0.310994 -0.785480 0.535074
-0.148394 -0.456710 0.100484 0.283873 -0.716980 0.636676
-0.204465 -0.434510 0.100484 0.283873 -0.716980 0.636676
-0.198638 -0.422127 0.117026 0.283873 -0.716980 0.636676
-0.144165 -0.443695 0.117026 0.283873 -0.716980 0.636676
-0.144165 -0.443695 0.117026 0.252264 -0.637144 0.728292
-0.198638 -0.422127 0.117026 0.252264 -0.637144 0.728292
-0.191975 -0.407967 0.131722 0.252264 -0.637144 0.728292
-0.139329 -0.428811 0.131722 0.252264 -0.637144 0.728292
-0.139329 -0.428811 0.131722 0.216658 -0.547214 0.808466
-0.191975 -0.407967 0.131722 0.216658 -0.547214 0.808466
-0.184580 -0.392251 0.144341 0.216658 -0.547214 0.808466
-0.133962 -0.412292 0.144341 0.216658 -0.547214 0.808466
-0.133962 -0.412292 0.144341 0.177615 -0.448604 0.875904
-0.184580 -0.392251 0.144341 0.177615 -0.448604 0.875904
-0.176569 -0.375229 0.154684 0.177615 -0.448604 0.875904
-0.128148 -0.394400 0.154684 0.177615 -0.448604 0.875904
-0.128148 -0.394400 0.154684 0.135748 -0.342858 0.929527
-0.176569 -0.375229 0.154684 0.135748 -0.342858 0.929527
-0.168070 -0.357168 0.162587 0.135748 -0.342858 0.929527
-0.121980 -0.375416 0.162587 0.135748 -0.342858 0.929527
-0.121980 -0.375416 0.162587 0.091719 -0.231654 0.968465
-0.168070 -0.357168 0.162587 0.091719 -0.231654 0.968465
-0.159217 -0.338353 0.167926 0.091719 -0.231654 0.968465
-0.115554 -0.355640 0.167926 0.091719 -0.231654 0.968465
-0.115554 -0.355640 0.167926 0.046228 -0.116759 0.992084
-0.159217 -0.338353 0.167926 0.046228 -0.116759 0.992084
-0.150148 -0.319080 0.170617 0.046228 -0.116759 0.992084
-0.108973 -0.335383 0.170617 0.046228 -0.116759 0.992084
-0.150148 -0.319080 0.170617 0.000000 0.000000 1.000000
-0.141007 -0.299655 0.170617 0.000000 0.000000 1.000000
-0.102338 -0.314965 0.170617 -0.046228 0.116759 0.992084
-0.141007 -0.299655 0.170617 -0.046228 0.116759 0.992084
-0.131938 -0.280383 0.167926 -0.046228 0.116759 0.992084
-0.095757 -0.294708 0.167926 -0.046228 0.116759 0.992084
-0.095757 -0.294708 0.167926 -0.091718 0.231654 0.968465
-0.131938 -0.280383 0.167926 -0.091718 0.231654 0.968465
-0.123085 -0.261568 0.162587 -0.091718 0.231654 0.968465
-0.089331 -0.274932 0.162587 -0.091718 0.231654 0.968465
-0.089331 -0.274932 0.162587 -0.135747 0.342858 0.929527
-0.123085 -0.261568 0.162587 -0.135747 0.342858 0.929527
-0.114586 -0.243507 0.154684 -0.135747 0.342858 0.929527
-0.083163 -0.255948 0.154684 -0.135747 0.342858 0.929527
-0.083163 -0.255948 0.154684 -0.177614 0.448603 0.875904
-0.114586 -0.243507 0.154684 -0.177614 0.448603 0.875904
-0.106575 -0.226484 0.144341 -0.177614 0.448603 0.875904
-0.077349 -0.238056 0.144341 -0.177614 0.448603 0.875904
-0.077349 -0.238056 0.144341 -0.216658 0.547216 0.808464
-0.106575 -0.226484 0.144341 -0.216658 0.547216 0.808464
-0.099180 -0.210769 0.131722 -0.216658 0.547216 0.808464
-0.071982 -0.221537 0.131722 -0.216658 0.547216 0.808464
-0.071982 -0.221537 0.131722 -0.252263 0.637144 0.728293
-0.099180 -0.210769 0.131722 -0.252263 0.637144 0.728293
-0.092517 -0.196608 0.117026 -0.252263 0.637144 0.728293
-0.067146 -0.206653 0.117026 -0.252263 0.637144 0.728293
-0.067146 -0.206653 0.117026 -0.283873 0.716980 0.636676
-0.092517 -0.196608 0.117026 -0.283873 0.716980 0.636676
-0.086690 -0.184226 0.100484 -0.283873 0.716980 0.636676
-0.062917 -0.193638 0.100484 -0.283873 0.716980 0.636676
-0.062917 -0.193638 0.100484 -0.310994 0.785481 0.535072
-0.086690 -0.184226 0.100484 -0.310994 0.785481 0.535072
-0.081792 -0.173817 0.082358 -0.310994 0.785481 0.535072
-0.059362 -0.182698 0.082358 -0.310994 0.785481 0.535072
-0.059362 -0.182698 0.082358 -0.333208 0.841588 0.425091
-0.081792 -0.173817 0.082358 -0.333208 0.841588 0.425091
-0.077900 -0.165546 0.062932 -0.333208 0.841588 0.425091
-0.056538 -0.174004 0.062932 -0.333208 0.841588 0.425091
-0.056538 -0.174004 0.062932 -0.350174 0.884436 0.308465
-0.077900 -0.165546 0.062932 -0.350174 0.884436 0.308465
-0.075076 -0.159544 0.042515 -0.350174 0.884436 0.308465
-0.054487 -0.167695 0.042515 -0.350174 0.884436 0.308465
-0.054487 -0.167695 0.042515 -0.361629 0.913371 0.187024
-0.075076 -0.159544 0.042515 -0.361629 0.913371 0.187024
-0.073363 -0.155904 0.021426 -0.361629 0.913371 0.187024
-0.053244 -0.163869 0.021426 -0.361629 0.913371 0.187024
-0.053244 -0.163869 0.021426 -0.367401 0.927949 0.062667
-0.073363 -0.155904 0.021426 -0.367401 0.927949 0.062667
-0.072789 -0.154684 0.000000 -0.367401 0.927949 0.062667
-0.052828 -0.162587 0.000000 -0.367401 0.927949 0.062667
-0.052828 -0.162587 0.000000 -0.367401 0.927949 -0.062667
-0.072789 -0.154684 0.000000 -0.367401 0.927949 -0.062667
-0.073363 -0.155904 -0.021426 -0.367401 0.927949 -0.062667
-0.053244 -0.163869 -0.021426 -0.367401 0.927949 -0.062667
-0.053244 -0.163869 -0.021426 -0.361629 0.913371 -0.187024
-0.073363 -0.155904 -0.021426 -0.361629 0.913371 -0.187024
-0.075076 -0.159544 -0.042515 -0.361629 0.913371 -0.187024
-0.054487 -0.167695 -0.042515 -0.361629 0.913371 -0.187024
-0.054487 -0.167695 -0.042515 -0.350174 0.884436 -0.308465
-0.075076 -0.159544 -0.042515 -0.350174 0.884436 -0.308465
-0.077900 -0.165546 -0.062932 -0.350174 0.884436 -0.308465
-0.056538 -0.174004 -0.062932 -0.350174 0.884436 -0.308465
-0.056538 -0.174004 -0.062932 -0.333208 0.841588 -0.425091
-0.077900 -0.165546 -0.062932 -0.333208 0.841588 -0.425091
-0.081792 -0.173817 -0.082358 -0.333208 0.841588 -0.425091
-0.059362 -0.182698 -0.082358 -0.333208 0.841588 -0.425091
-0.059362 -0.182698 -0.082358 -0.310994 0.785481 -0.535072
-0.081792 -0.173817 -0.082358 -0.310994 0.785481 -0.535072
-0.086690 -0.184226 -0.100484 -0.310994 0.785481 -0.535072
-0.062917 -0.193638 -0.100484 -0.310994 0.785481 -0.535072
-0.062917 -0.193638 -0.100484 -0.283873 0.716980 -0.636676
-0.086690 -0.184226 -0.100484 -0.283873 0.716980 -0.636676
-0.092517 -0.196608 -0.117026 -0.283873 0.716980 -0.636676
-0.067146 -0.206653 -0.117026 -0.283873 0.716980 -0.636676
-0.067146 -0.206653 -0.117026 -0.252263 0.637144 -0.728293
-0.092517 -0.196608 -0.117026 -0.252263 0.637144 -0.728293
-0.099180 -0.210769 -0.131722 -0.252263 0.637144 -0.728293
-0.071982 -0.221537 -0.131722 -0.252263 0.637144 -0.728293
-0.071982 -0.221537 -0.131722 -0.216658 0.547216 -0.808464
-0.099180 -0.210769 -0.131722 -0.216658 0.547216 -0.808464
-0.106575 -0.226484 -0.144341 -0.216658 0.547216 -0.808464
-0.077349 -0.238056 -0.144341 -0.216658 0.547216 -0.808464
-0.077349 -0.238056 -0.144341 -0.177614 0.448603 -0.875904
-0.106575 -0.226484 -0.144341 -0.177614 0.448603 -0.875904
-0.114586 -0.243507 -0.154684 -0.177614 0.448603 -0.875904
-0.083163 -0.255948 -0.154684 -0.177614 0.448603 -0.875904
-0.083163 -0.255948 -0.154684 -0.135747 0.342858 -0.929527
-0.114586 -0.243507 -0.154684 -0.135747 0.342858 -0.929527
-0.123085 -0.261568 -0.162587 -0.135747 0.342858 -0.929527
-0.089331 -0.274932 -0.162587 -0.135747 0.342858 -0.929527
-0.089331 -0.274932 -0.162587 -0.091718 0.231654 -0.968465
-0.123085 -0.261568 -0.162587 -0.091718 0.231654 -0.968465
-0.131938 -0.280383 -0.167926 -0.091718 0.231654 -0.968465
-0.095757 -0.294708 -0.167926 -0.091718 0.231654 -0.968465
-0.095757 -0.294708 -0.167926 -0.046228 0.116759 -0.992084
-0.131938 -0.280383 -0.167926 -0.046228 0.116759 -0.992084
-0.141007 -0.299655 -0.170617 -0.046228 0.116759 -0.992084
-0.102338 -0.314965 -0.170617 -0.046228 0.116759 -0.992084
-0.141007 -0.299655 -0.170617 0.000000 0.000000 -1.000000
-0.150148 -0.319080 -0.170617 0.000000 0.000000 -1.000000
-0.108973 -0.335383 -0.170617 0.046228 -0.116759 -0.992084
-0.150148 -0.319080 -0.170617 0.046228 -0.116759 -0.992084
-0.159217 -0.338353 -0.167926 0.046228 -0.116759 -0.992084
-0.115554 -0.355640 -0.167926 0.046228 -0.116759 -0.992084
-0.115554 -0.355640 -0.167926 0.091719 -0.231654 -0.968465
-0.159217 -0.338353 -0.167926 0.091719 -0.231654 -0.968465
-0.168070 -0.357168 -0.162587 0.091719 -0.231654 -0.968465
-0.121980 -0.375416 -0.162587 0.091719 -0.231654 -0.968465
-0.121980 -0.375416 -0.162587 0.135748 -0.342858 -0.929527
-0.168070 -0.357168 -0.162587 0.135748 -0.342858 -0.929527
-0.176569 -0.375229 -0.154684 0.135748 -0.342858 -0.929527
-0.128148 -0.394400 -0.154684 0.135748 -0.342858 -0.929527
-0.128148 -0.394400 -0.154684 0.177615 -0.448604 -0.875904
-0.176569 -0.375229 -0.154684 0.177615 -0.448604 -0.875904
-0.184580 -0.392251 -0.144341 0.177615 -0.448604 -0.875904
-0.133962 -0.412292 -0.144341 0.177615 -0.448604 -0.875904
-0.133962 -0.412292 -0.144341 0.216658 -0.547214 -0.808466
-0.184580 -0.392251 -0.144341 0.216658 -0.547214 -0.808466
-0.191975 -0.407967 -0.131722 0.216658 -0.547214 -0.808466
-0.139329 -0.428811 -0.131722 0.216658 -0.547214 -0.808466
-0.139329 -0.428811 -0.131722 0.252264 -0.637144 -0.728292
-0.191975 -0.407967 -0.131722 0.252264 -0.637144 -0.728292
-0.198638 -0.422127 -0.117026 0.252264 -0.637144 -0.728292
-0.144165 -0.443695 -0.117026 0.252264 -0.637144 -0.728292
-0.144165 -0.443695 -0.117026 0.283873 -0.716980 -0.636676
-0.198638 -0.422127 -0.117026 0.283873 -0.716980 -0.636676
-0.204465 -0.434510 -0.100484 0.283873 -0.716980 -0.636676
-0.148394 -0.456710 -0.100484 0.283873 -0.716980 -0.636676
-0.148394 -0.456710 -0.100484 0.310994 -0.785480 -0.535074
-0.204465 -0.434510 -0.100484 0.310994 -0.785480 -0.535074
-0.209363 -0.444918 -0.082358 0.310994 -0.785480 -0.535074
-0.151949 -0.467650 -0.082358 0.310994 -0.785480 -0.535074
-0.151949 -0.467650 -0.082358 0.333209 -0.841588 -0.425089
-0.209363 -0.444918 -0.082358 0.333209 -0.841588 -0.425089
-0.213255 -0.453189 -0.062932 0.333209 -0.841588 -0.425089
-0.154774 -0.476344 -0.062932 0.333209 -0.841588 -0.425089
-0.154774 -0.476344 -0.062932 0.350173 -0.884436 -0.308467
-0.213255 -0.453189 -0.062932 0.350173 -0.884436 -0.308467
-0.216079 -0.459192 -0.042515 0.350173 -0.884436 -0.308467
-0.156824 -0.482653 -0.042515 0.350173 -0.884436 -0.308467
-0.156824 -0.482653 -0.042515 0.361630 -0.913371 -0.187024
-0.216079 -0.459192 -0.042515 0.361630 -0.913371 -0.187024
-0.217792 -0.462832 -0.021426 0.361630 -0.913371 -0.187024
-0.158067 -0.486479 -0.021426 0.361630 -0.913371 -0.187024
-0.158067 -0.486479 -0.021426 0.367402 -0.927949 -0.062667
-0.217792 -0.462832 -0.021426 0.367402 -0.927949 -0.062667
-0.218366 -0.464052 0.000000 0.367402 -0.927949 -0.062667
-0.158483 -0.487761 0.000000 0.367402 -0.927949 -0.062667
-0.218366 -0.464052 0.000000 0.480807 -0.874584 0.062667
-0.274805 -0.433024 0.000000 0.480807 -0.874584 0.062667
-0.274083 -0.431886 0.021426 0.480807 -0.874584 0.062667
-0.217792 -0.462832 0.021426 0.480807 -0.874584 0.062667
-0.217792 -0.462832 0.021426 0.473253 -0.860845 0.187024
-0.274083 -0.431886 0.021426 0.473253 -0.860845 0.187024
-0.271927 -0.428489 0.042515 0.473253 -0.860845 0.187024
-0.216079 -0.459192 0.042515 0.473253 -0.860845 0.187024
-0.216079 -0.459192 0.042515 0.458261 -0.833574 0.308466
-0.271927 -0.428489 0.042515 0.458261 -0.833574 0.308466
-0.268373 -0.422888 0.062932 0.458261 -0.833574 0.308466
-0.213255 -0.453189 0.062932 0.458261 -0.833574 0.308466
-0.213255 -0.453189 0.062932 0.436060 -0.793190 0.425090
-0.268373 -0.422888 0.062932 0.436060 -0.793190 0.425090
-0.263475 -0.415170 0.082358 0.436060 -0.793190 0.425090
-0.209363 -0.444918 0.082358 0.436060 -0.793190 0.425090
-0.209363 -0.444918 0.082358 0.406988 -0.740309 0.535073
-0.263475 -0.415170 0.082358 0.406988 -0.740309 0.535073
-0.257311 -0.405457 0.100484 0.406988 -0.740309 0.535073
-0.204465 -0.434510 0.100484 0.406988 -0.740309 0.535073
-0.204465 -0.434510 0.100484 0.371495 -0.675748 0.636676
-0.257311 -0.405457 0.100484 0.371495 -0.675748 0.636676
-0.249978 -0.393903 0.117026 0.371495 -0.675748 0.636676
-0.198638 -0.422127 0.117026 0.371495 -0.675748 0.636676
-0.198638 -0.422127 0.117026 0.330129 -0.600502 0.728294
-0.249978 -0.393903 0.117026 0.330129 -0.600502 0.728294
-0.241592 -0.380689 0.131722 0.330129 -0.600502 0.728294
-0.191975 -0.407967 0.131722 0.330129 -0.600502 0.728294
-0.191975 -0.407967 0.131722 0.283534 -0.515746 0.808465
-0.241592 -0.380689 0.131722 0.283534 -0.515746 0.808465
-0.232286 -0.366025 0.144341 0.283534 -0.515746 0.808465
-0.184580 -0.392251 0.144341 0.283534 -0.515746 0.808465
-0.184580 -0.392251 0.144341 0.232439 -0.422805 0.875904
-0.232286 -0.366025 0.144341 0.232439 -0.422805 0.875904
-0.222205 -0.350140 0.154684 0.232439 -0.422805 0.875904
-0.176569 -0.375229 0.154684 0.232439 -0.422805 0.875904
-0.176569 -0.375229 0.154684 0.177648 -0.323141 0.929527
-0.222205 -0.350140 0.154684 0.177648 -0.323141 0.929527
-0.211510 -0.333287 0.162587 0.177648 -0.323141 0.929527
-0.168070 -0.357168 0.162587 0.177648 -0.323141 0.929527
-0.168070 -0.357168 0.162587 0.120029 -0.218333 0.968465
-0.211510 -0.333287 0.162587 0.120029 -0.218333 0.968465
-0.200368 -0.315730 0.167926 0.120029 -0.218333 0.968465
-0.159217 -0.338353 0.167926 0.120029 -0.218333 0.968465
-0.159217 -0.338353 0.167926 0.060497 -0.110045 0.992084
-0.200368 -0.315730 0.167926 0.060497 -0.110045 0.992084
-0.188955 -0.297746 0.170617 0.060497 -0.110045 0.992084
-0.150148 -0.319080 0.170617 0.060497 -0.110045 0.992084
-0.188955 -0.297746 0.170617 -0.000000 0.000000 1.000000
-0.177452 -0.279619 0.170617 -0.000000 0.000000 1.000000
-0.141007 -0.299655 0.170617 -0.060498 0.110045 0.992084
-0.177452 -0.279619 0.170617 -0.060498 0.110045 0.992084
-0.166039 -0.261636 0.167926 -0.060498 0.110045 0.992084
-0.131938 -0.280383 0.167926 -0.060498 0.110045 0.992084
-0.131938 -0.280383 0.167926 -0.120029 0.218332 0.968465
-0.166039 -0.261636 0.167926 -0.120029 0.218332 0.968465
-0.154897 -0.244079 0.162587 -0.120029 0.218332 0.968465
-0.123085 -0.261568 0.162587 -0.120029 0.218332 0.968465
-0.123085 -0.261568 0.162587 -0.177648 0.323141 0.929527
-0.154897 -0.244079 0.162587 -0.177648 0.323141 0.929527
-0.144201 -0.227225 0.154684 -0.177648 0.323141 0.929527
-0.114586 -0.243507 0.154684 -0.177648 0.323141 0.929527
-0.114586 -0.243507 0.154684 -0.232439 0.422804 0.875904
-0.144201 -0.227225 0.154684 -0.232439 0.422804 0.875904
-0.134121 -0.211341 0.144341 -0.232439 0.422804 0.875904
-0.106575 -0.226484 0.144341 -0.232439 0.422804 0.875904
-0.106575 -0.226484 0.144341 -0.283534 0.515746 0.808464
-0.134121 -0.211341 0.144341 -0.283534 0.515746 0.808464
-0.124814 -0.196676 0.131722 -0.283534 0.515746 0.808464
-0.099180 -0.210769 0.131722 -0.283534 0.515746 0.808464
-0.099180 -0.210769 0.131722 -0.330129 0.600503 0.728294
-0.124814 -0.196676 0.131722 -0.330129 0.600503 0.728294
-0.116429 -0.183462 0.117026 -0.330129 0.600503 0.728294
-0.092517 -0.196608 0.117026 -0.330129 0.600503 0.728294
-0.092517 -0.196608 0.117026 -0.371495 0.675748 0.636676
-0.116429 -0.183462 0.117026 -0.371495 0.675748 0.636676
-0.109096 -0.171908 0.100484 -0.371495 0.675748 0.636676
-0.086690 -0.184226 0.100484 -0.371495 0.675748 0.636676
-0.086690 -0.184226 0.100484 -0.406989 0.740309 0.535072
-0.109096 -0.171908 0.100484 -0.406989 0.740309 0.535072
-0.102932 -0.162195 0.082358 -0.406989 0.740309 0.535072
-0.081792 -0.173817 0.082358 -0.406989 0.740309 0.535072
-0.081792 -0.173817 0.082358 -0.436059 0.793190 0.425091
-0.102932 -0.162195 0.082358 -0.436059 0.793190 0.425091
-0.098034 -0.154478 0.062932 -0.436059 0.793190 0.425091
-0.077900 -0.165546 0.062932 -0.436059 0.793190 0.425091
-0.077900 -0.165546 0.062932 -0.458261 0.833574 0.308466
-0.098034 -0.154478 0.062932 -0.458261 0.833574 0.308466
-0.094480 -0.148876 0.042515 -0.458261 0.833574 0.308466
-0.075076 -0.159544 0.042515 -0.458261 0.833574 0.308466
-0.075076 -0.159544 0.042515 -0.473253 0.860845 0.187024
-0.094480 -0.148876 0.042515 -0.473253 0.860845 0.187024
-0.092324 -0.145480 0.021426 -0.473253 0.860845 0.187024
-0.073363 -0.155904 0.021426 -0.473253 0.860845 0.187024
-0.073363 -0.155904 0.021426 -0.480806 0.874584 0.062667
-0.092324 -0.145480 0.021426 -0.480806 0.874584 0.062667
-0.091602 -0.144341 0.000000 -0.480806 0.874584 0.062667
-0.072789 -0.154684 0.000000 -0.480806 0.874584 0.062667
-0.072789 -0.154684 0.000000 -0.480806 0.874584 -0.062667
-0.091602 -0.144341 0.000000 -0.480806 0.874584 -0.062667
-0.092324 -0.145480 -0.021426 -0.480806 0.874584 -0.062667
-0.073363 -0.155904 -0.021426 -0.480806 0.874584 -0.062667
-0.073363 -0.155904 -0.021426 -0.473253 0.860845 -0.187024
-0.092324 -0.145480 -0.021426 -0.473253 0.860845 -0.187024
-0.094480 -0.148876 -0.042515 -0.473253 0.860845 -0.187024
-0.075076 -0.159544 -0.042515 -0.473253 0.860845 -0.187024
-0.075076 -0.159544 -0.042515 -0.458261 0.833574 -0.308466
-0.094480 -0.148876 -0.042515 -0.458261 0.833574 -0.308466
-0.098034 -0.154478 -0.062932 -0.458261 0.833574 -0.308466
-0.077900 -0.165546 -0.062932 -0.458261 0.833574 -0.308466
-0.077900 -0.165546 -0.062932 -0.436059 0.793190 -0.425091
-0.098034 -0.154478 -0.062932 -0.436059 0.793190 -0.425091
-0.102932 -0.162195 -0.082358 -0.436059 0.793190 -0.425091
-0.081792 -0.173817 -0.082358 -0.436059 0.793190 -0.425091
-0.081792 -0.173817 -0.082358 -0.406989 0.740309 -0.535072
-0.102932 -0.162195 -0.082358 -0.406989 0.740309 -0.535072
-0.109096 -0.171908 -0.100484 -0.406989 0.740309 -0.535072
-0.086690 -0.184226 -0.100484 -0.406989 0.740309 -0.535072
-0.086690 -0.184226 -0.100484 -0.371495 0.675748 -0.636676
-0.109096 -0.171908 -0.100484 -0.371495 0.675748 -0.636676
-0.116429 -0.183462 -0.117026 -0.371495 0.675748 -0.636676
-0.092517 -0.196608 -0.117026 -0.371495 0.675748 -0.636676
-0.092517 -0.196608 -0.117026 -0.330129 0.600503 -0.728294
-0.116429 -0.183462 -0.117026 -0.330129 0.600503 -0.728294
-0.124814 -0.196676 -0.131722 -0.330129 0.600503 -0.728294
-0.099180 -0.210769 -0.131722 -0.330129 0.600503 -0.728294
-0.099180 -0.210769 -0.131722 -0.283534 0.515746 -0.808464
-0.124814 -0.196676 -0.131722 -0.283534 0.515746 -0.808464
-0.134121 -0.211341 -0.144341 -0.283534 0.515746 -0.808464
-0.106575 -0.226484 -0.144341 -0.283534 0.515746 -0.808464
-0.106575 -0.226484 -0.144341 -0.232439 0.422804 -0.875904
-0.134121 -0.211341 -0.144341 -0.232439 0.422804 -0.875904
-0.144201 -0.227225 -0.154684 -0.232439 0.422804 -0.875904
-0.114586 -0.243507 -0.154684 -0.232439 0.422804 -0.875904
-0.114586 -0.243507 -0.154684 -0.177648 0.323141 -0.929527
-0.144201 -0.227225 -0.154684 -0.177648 0.323141 -0.929527
-0.154897 -0.244079 -0.162587 -0.177648 0.323141 -0.929527
-0.123085 -0.261568 -0.162587 -0.177648 0.323141 -0.929527
-0.123085 -0.261568 -0.162587 -0.120029 0.218332 -0.968465
-0.154897 -0.244079 -0.162587 -0.120029 0.218332 -0.968465
-0.166039 -0.261636 -0.167926 -0.120029 0.218332 -0.968465
-0.131938 -0.280383 -0.167926 -0.120029 0.218332 -0.968465
-0.131938 -0.280383 -0.167926 -0.060498 0.110045 -0.992084
-0.166039 -0.261636 -0.167926 -0.060498 0.110045 -0.992084
-0.177452 -0.279619 -0.170617 -0.060498 0.110045 -0.992084
-0.141007 -0.299655 -0.170617 -0.060498 0.110045 -0.992084
-0.177452 -0.279619 -0.170617 -0.000000 0.000000 -1.000000
-0.188955 -0.297746 -0.170617 -0.000000 0.000000 -1.000000
-0.150148 -0.319080 -0.170617 0.060497 -0.110045 -0.992084
-0.188955 -0.297746 -0.170617 0.060497 -0.110045 -0.992084
-0.200368 -0.315730 -0.167926 0.060497 -0.110045 -0.992084
-0.159217 -0.338353 -0.167926 0.060497 -0.110045 -0.992084
-0.159217 -0.338353 -0.167926 0.120029 -0.218333 -0.968465
-0.200368 -0.315730 -0.167926 0.120029 -0.218333 -0.968465
-0.211510 -0.333287 -0.162587 0.120029 -0.218333 -0.968465
-0.168070 -0.357168 -0.162587 0.120029 -0.218333 -0.968465
-0.168070 -0.357168 -0.162587 0.177648 -0.323141 -0.929527
-0.211510 -0.333287 -0.162587 0.177648 -0.323141 -0.929527
-0.222205 -0.350140 -0.154684 0.177648 -0.323141 -0.929527
-0.176569 -0.375229 -0.154684 0.177648 -0.323141 -0.929527
-0.176569 -0.375229 -0.154684 0.232439 -0.422805 -0.875904
-0.222205 -0.350140 -0.154684 0.232439 -0.422805 -0.875904
-0.232286 -0.366025 -0.144341 0.232439 -0.422805 -0.875904
-0.184580 -0.392251 -0.144341 0.232439 -0.422805 -0.875904
-0.184580 -0.392251 -0.144341 0.283534 -0.515746 -0.808465
-0.232286 -0.366025 -0.144341 0.283534 -0.515746 -0.808465
-0.241592 -0.380689 -0.131722 0.283534 -0.515746 -0.808465
-0.191975 -0.407967 -0.131722 0.283534 -0.515746 -0.808465
-0.191975 -0.407967 -0.131722 0.330129 -0.600502 -0.728294
-0.241592 -0.380689 -0.131722 0.330129 -0.600502 -0.728294
-0.249978 -0.393903 -0.117026 0.330129 -0.600502 -0.728294
-0.198638 -0.422127 -0.117026 0.330129 -0.600502 -0.728294
-0.198638 -0.422127 -0.117026 0.371495 -0.675748 -0.636676
-0.249978 -0.393903 -0.117026 0.371495 -0.675748 -0.636676
-0.257311 -0.405457 -0.100484 0.371495 -0.675748 -0.636676
-0.204465 -0.434510 -0.100484 0.371495 -0.675748 -0.636676
-0.204465 -0.434510 -0.100484 0.406988 -0.740309 -0.535073
-0.257311 -0.405457 -0.100484 0.406988 -0.740309 -0.535073
-0.263475 -0.415170 -0.082358 0.406988 -0.740309 -0.535073
-0.209363 -0.444918 -0.082358 0.406988 -0.740309 -0.535073
-0.209363 -0.444918 -0.082358 0.436060 -0.793190 -0.425090
-0.263475 -0.415170 -0.082358 0.436060 -0.793190 -0.425090
-0.268373 -0.422888 -0.062932 0.436060 -0.793190 -0.425090
-0.213255 -0.453189 -0.062932 0.436060 -0.793190 -0.425090
-0.213255 -0.453189 -0.062932 0.458261 -0.833574 -0.308466
-0.268373 -0.422888 -0.062932 0.458261 -0.833574 -0.308466
-0.271927 -0.428489 -0.042515 0.458261 -0.833574 -0.308466
-0.216079 -0.459192 -0.042515 0.458261 -0.833574 -0.308466
-0.216079 -0.459192 -0.042515 0.473253 -0.860845 -0.187024
-0.271927 -0.428489 -0.042515 0.473253 -0.860845 -0.187024
-0.274083 -0.431886 -0.021426 0.473253 -0.860845 -0.187024
-0.217792 -0.462832 -0.021426 0.473253 -0.860845 -0.187024
-0.217792 -0.462832 -0.021426 0.480807 -0.874584 -0.062667
-0.274083 -0.431886 -0.021426 0.480807 -0.874584 -0.062667
-0.274805 -0.433024 0.000000 0.480807 -0.874584 -0.062667
-0.218366 -0.464052 0.000000 0.480807 -0.874584 -0.062667
-0.274805 -0.433024 0.000000 0.586629 -0.807427 0.062667
-0.326911 -0.395167 0.000000 0.586629 -0.807427 0.062667
-0.326051 -0.394129 0.021426 0.586629 -0.807427 0.062667
-0.274083 -0.431886 0.021426 0.586629 -0.807427 0.062667
-0.274083 -0.431886 0.021426 0.577413 -0.794742 0.187025
-0.326051 -0.394129 0.021426 0.577413 -0.794742 0.187025
-0.323487 -0.391029 0.042515 0.577413 -0.794742 0.187025
-0.271927 -0.428489 0.042515 0.577413 -0.794742 0.187025
-0.271927 -0.428489 0.042515 0.559122 -0.769566 0.308465
-0.323487 -0.391029 0.042515 0.559122 -0.769566 0.308465
-0.319258 -0.385917 0.062932 0.559122 -0.769566 0.308465
-0.268373 -0.422888 0.062932 0.559122 -0.769566 0.308465
-0.268373 -0.422888 0.062932 0.532034 -0.732283 0.425090
-0.319258 -0.385917 0.062932 0.532034 -0.732283 0.425090
-0.313432 -0.378874 0.082358 0.532034 -0.732283 0.425090
-0.263475 -0.415170 0.082358 0.532034 -0.732283 0.425090
-0.263475 -0.415170 0.082358 0.496564 -0.683463 0.535073
-0.313432 -0.378874 0.082358 0.496564 -0.683463 0.535073
-0.306099 -0.370011 0.100484 0.496564 -0.683463 0.535073
-0.257311 -0.405457 0.100484 0.496564 -0.683463 0.535073
-0.257311 -0.405457 0.100484 0.453259 -0.623858 0.636677
-0.306099 -0.370011 0.100484 0.453259 -0.623858 0.636677
-0.297376 -0.359466 0.117026 0.453259 -0.623858 0.636677
-0.249978 -0.393903 0.117026 0.453259 -0.623858 0.636677
-0.249978 -0.393903 0.117026 0.402788 -0.554392 0.728293
-0.297376 -0.359466 0.117026 0.402788 -0.554392 0.728293
-0.287401 -0.347408 0.131722 0.402788 -0.554392 0.728293
-0.241592 -0.380689 0.131722 0.402788 -0.554392 0.728293
-0.241592 -0.380689 0.131722 0.345937 -0.476143 0.808464
-0.287401 -0.347408 0.131722 0.345937 -0.476143 0.808464
-0.276330 -0.334025 0.144341 0.345937 -0.476143 0.808464
-0.232286 -0.366025 0.144341 0.345937 -0.476143 0.808464
-0.232286 -0.366025 0.144341 0.283597 -0.390339 0.875904
-0.276330 -0.334025 0.144341 0.283597 -0.390339 0.875904
-0.264338 -0.319530 0.154684 0.283597 -0.390339 0.875904
-0.222205 -0.350140 0.154684 0.283597 -0.390339 0.875904
-0.222205 -0.350140 0.154684 0.216748 -0.298329 0.929527
-0.264338 -0.319530 0.154684 0.216748 -0.298329 0.929527
-0.251614 -0.304149 0.162587 0.216748 -0.298329 0.929527
-0.211510 -0.333287 0.162587 0.216748 -0.298329 0.929527
-0.211510 -0.333287 0.162587 0.146447 -0.201568 0.968465
-0.251614 -0.304149 0.162587 0.146447 -0.201568 0.968465
-0.238359 -0.288127 0.167926 0.146447 -0.201568 0.968465
-0.200368 -0.315730 0.167926 0.146447 -0.201568 0.968465
-0.200368 -0.315730 0.167926 0.073812 -0.101594 0.992084
-0.238359 -0.288127 0.167926 0.073812 -0.101594 0.992084
-0.224783 -0.271716 0.170617 0.073812 -0.101594 0.992084
-0.188955 -0.297746 0.170617 0.073812 -0.101594 0.992084
-0.224783 -0.271716 0.170617 -0.000000 0.000000 1.000000
-0.211098 -0.255174 0.170617 -0.000000 0.000000 1.000000
-0.177452 -0.279619 0.170617 -0.073812 0.101594 0.992084
-0.211098 -0.255174 0.170617 -0.073812 0.101594 0.992084
-0.197521 -0.238763 0.167926 -0.073812 0.101594 0.992084
-0.166039 -0.261636 0.167926 -0.073812 0.101594 0.992084
-0.166039 -0.261636 0.167926 -0.146447 0.201567 0.968465
-0.197521 -0.238763 0.167926 -0.146447 0.201567 0.968465
-0.184267 -0.222740 0.162587 -0.146447 0.201567 0.968465
-0.154897 -0.244079 0.162587 -0.146447 0.201567 0.968465
-0.154897 -0.244079 0.162587 -0.216748 0.298328 0.929527
-0.184267 -0.222740 0.162587 -0.216748 0.298328 0.929527
-0.171543 -0.207360 0.154684 -0.216748 0.298328 0.929527
-0.144201 -0.227225 0.154684 -0.216748 0.298328 0.929527
-0.144201 -0.227225 0.154684 -0.283597 0.390338 0.875905
-0.171543 -0.207360 0.154684 -0.283597 0.390338 0.875905
-0.159551 -0.192865 0.144341 -0.283597 0.390338 0.875905
-0.134121 -0.211341 0.144341 -0.283597 0.390338 0.875905
-0.134121 -0.211341 0.144341 -0.345938 0.476144 0.808464
-0.159551 -0.192865 0.144341 -0.345938 0.476144 0.808464
-0.148480 -0.179482 0.131722 -0.345938 0.476144 0.808464
-0.124814 -0.196676 0.131722 -0.345938 0.476144 0.808464
-0.124814 -0.196676 0.131722 -0.402789 0.554391 0.728293
-0.148480 -0.179482 0.131722 -0.402789 0.554391 0.728293
-0.138504 -0.167423 0.117026 -0.402789 0.554391 0.728293
-0.116429 -0.183462 0.117026 -0.402789 0.554391 0.728293
-0.116429 -0.183462 0.117026 -0.453259 0.623858 0.636676
-0.138504 -0.167423 0.117026 -0.453259 0.623858 0.636676
-0.129782 -0.156879 0.100484 -0.453259 0.623858 0.636676
-0.109096 -0.171908 0.100484 -0.453259 0.623858 0.636676
-0.109096 -0.171908 0.100484 -0.496564 0.683463 0.535072
-0.129782 -0.156879 0.100484 -0.496564 0.683463 0.535072
-0.122449 -0.148016 0.082358 -0.496564 0.683463 0.535072
-0.102932 -0.162195 0.082358 -0.496564 0.683463 0.535072
-0.102932 -0.162195 0.082358 -0.532034 0.732282 0.425091
-0.122449 -0.148016 0.082358 -0.532034 0.732282 0.425091
-0.116622 -0.140972 0.062932 -0.532034 0.732282 0.425091
-0.098034 -0.154478 0.062932 -0.532034 0.732282 0.425091
-0.098034 -0.154478 0.062932 -0.559122 0.769566 0.308465
-0.116622 -0.140972 0.062932 -0.559122 0.769566 0.308465
-0.112394 -0.135861 0.042515 -0.559122 0.769566 0.308465
-0.094480 -0.148876 0.042515 -0.559122 0.769566 0.308465
-0.094480 -0.148876 0.042515 -0.577413 0.794743 0.187024
-0.112394 -0.135861 0.042515 -0.577413 0.794743 0.187024
-0.109829 -0.132761 0.021426 -0.577413 0.794743 0.187024
-0.092324 -0.145480 0.021426 -0.577413 0.794743 0.187024
-0.092324 -0.145480 0.021426 -0.586630 0.807427 0.062667
-0.109829 -0.132761 0.021426 -0.586630 0.807427 0.062667
-0.108970 -0.131722 0.000000 -0.586630 0.807427 0.062667
-0.091602 -0.144341 0.000000 -0.586630 0.807427 0.062667
-0.091602 -0.144341 0.000000 -0.586630 0.807427 -0.062667
-0.108970 -0.131722 0.000000 -0.586630 0.807427 -0.062667
-0.109829 -0.132761 -0.021426 -0.586630 0.807427 -0.062667
-0.092324 -0.145480 -0.021426 -0.586630 0.807427 -0.062667
-0.092324 -0.145480 -0.021426 -0.577413 0.794743 -0.187024
-0.109829 -0.132761 -0.021426 -0.577413 0.794743 -0.187024
-0.112394 -0.135861 -0.042515 -0.577413 0.794743 -0.187024
-0.094480 -0.148876 -0.042515 -0.577413 0.794743 -0.187024
-0.094480 -0.148876 -0.042515 -0.559122 0.769566 -0.308465
-0.112394 -0.135861 -0.042515 -0.559122 0.769566 -0.308465
-0.116622 -0.140972 -0.062932 -0.559122 0.769566 -0.308465
-0.098034 -0.154478 -0.062932 -0.559122 0.769566 -0.308465
-0.098034 -0.154478 -0.062932 -0.532034 0.732282 -0.425091
-0.116622 -0.140972 -0.062932 -0.532034 0.732282 -0.425091
-0.122449 -0.148016 -0.082358 -0.532034 0.732282 -0.425091
-0.102932 -0.162195 -0.082358 -0.532034 0.732282 -0.425091
-0.102932 -0.162195 -0.082358 -0.496564 0.683463 -0.535072
-0.122449 -0.148016 -0.082358 -0.496564 0.683463 -0.535072
-0.129782 -0.156879 -0.100484 -0.496564 0.683463 -0.535072
-0.109096 -0.171908 -0.100484 -0.496564 0.683463 -0.535072
-0.109096 -0.171908 -0.100484 -0.453259 0.623858 -0.636676
-0.129782 -0.156879 -0.100484 -0.453259 0.623858 -0.636676
-0.138504 -0.167423 -0.117026 -0.453259 0.623858 -0.636676
-0.116429 -0.183462 -0.117026 -0.453259 0.623858 -0.636676
-0.116429 -0.183462 -0.117026 -0.402789 0.554391 -0.728293
-0.138504 -0.167423 -0.117026 -0.402789 0.554391 -0.728293
-0.148480 -0.179482 -0.131722 -0.402789 0.554391 -0.728293
-0.124814 -0.196676 -0.131722 -0.402789 0.554391 -0.728293
-0.124814 -0.196676 -0.131722 -0.345938 0.476144 -0.808464
-0.148480 -0.179482 -0.131722 -0.345938 0.476144 -0.808464
-0.159551 -0.192865 -0.144341 -0.345938 0.476144 -0.808464
-0.134121 -0.211341 -0.144341 -0.345938 0.476144 -0.808464
-0.134121 -0.211341 -0.144341 -0.283597 0.390338 -0.875905
-0.159551 -0.192865 -0.144341 -0.283597 0.390338 -0.875905
-0.171543 -0.207360 -0.154684 -0.283597 0.390338 -0.875905
-0.144201 -0.227225 -0.154684 -0.283597 0.390338 -0.875905
-0.144201 -0.227225 -0.154684 -0.216748 0.298328 -0.929527
-0.171543 -0.207360 -0.154684 -0.216748 0.298328 -0.929527
-0.184267 -0.222740 -0.162587 -0.216748 0.298328 -0.929527
-0.154897 -0.244079 -0.162587 -0.216748 0.298328 -0.929527
-0.154897 -0.244079 -0.162587 -0.146447 0.201567 -0.968465
-0.184267 -0.222740 -0.162587 -0.146447 0.201567 -0.968465
-0.197521 -0.238763 -0.167926 -0.146447 0.201567 -0.968465
-0.166039 -0.261636 -0.167926 -0.146447 0.201567 -0.968465
-0.166039 -0.261636 -0.167926 -0.073812 0.101594 -0.992084
-0.197521 -0.238763 -0.167926 -0.073812 0.101594 -0.992084
-0.211098 -0.255174 -0.170617 -0.073812 0.101594 -0.992084
-0.177452 -0.279619 -0.170617 -0.073812 0.101594 -0.992084
-0.211098 -0.255174 -0.170617 -0.000000 0.000000 -1.000000
-0.224783 -0.271716 -0.170617 -0.000000 0.000000 -1.000000
-0.188955 -0.297746 -0.170617 0.073812 -0.101594 -0.992084
-0.224783 -0.271716 -0.170617 0.073812 -0.101594 -0.992084
-0.238359 -0.288127 -0.167926 0.073812 -0.101594 -0.992084
-0.200368 -0.315730 -0.167926 0.073812 -0.101594 -0.992084
-0.200368 -0.315730 -0.167926 0.146447 -0.201568 -0.968465
-0.238359 -0.288127 -0.167926 0.146447 -0.201568 -0.968465
-0.251614 -0.304149 -0.162587 0.146447 -0.201568 -0.968465
-0.211510 -0.333287 -0.162587 0.146447 -0.201568 -0.968465
-0.211510 -0.333287 -0.162587 0.216748 -0.298329 -0.929527
-0.251614 -0.304149 -0.162587 0.216748 -0.298329 -0.929527
-0.264338 -0.319530 -0.154684 0.216748 -0.298329 -0.929527
-0.222205 -0.350140 -0.154684 0.216748 -0.298329 -0.929527
-0.222205 -0.350140 -0.154684 0.283597 -0.390339 -0.875904
-0.264338 -0.319530 -0.154684 0.283597 -0.390339 -0.875904
-0.276330 -0.334025 -0.144341 0.283597 -0.390339 -0.875904
-0.232286 -0.366025 -0.144341 0.283597 -0.390339 -0.875904
-0.232286 -0.366025 -0.144341 0.345937 -0.476143 -0.808464
-0.276330 -0.334025 -0.144341 0.345937 -0.476143 -0.808464
-0.287401 -0.347408 -0.131722 0.345937 -0.476143 -0.808464
-0.241592 -0.380689 -0.131722 0.345937 -0.476143 -0.808464
-0.241592 -0.380689 -0.131722 0.402788 -0.554392 -0.728293
-0.287401 -0.347408 -0.131722 0.402788 -0.554392 -0.728293
-0.297376 -0.359466 -0.117026 0.402788 -0.554392 -0.728293
-0.249978 -0.393903 -0.117026 0.402788 -0.554392 -0.728293
-0.249978 -0.393903 -0.117026 0.453259 -0.623858 -0.636677
-0.297376 -0.359466 -0.117026 0.453259 -0.623858 -0.636677
-0.306099 -0.370011 -0.100484 0.453259 -0.623858 -0.636677
-0.257311 -0.405457 -0.100484 0.453259 -0.623858 -0.636677
-0.257311 -0.405457 -0.100484 0.496564 -0.683463 -0.535073
-0.306099 -0.370011 -0.100484 0.496564 -0.683463 -0.535073
-0.313432 -0.378874 -0.082358 0.496564 -0.683463 -0.535073
-0.263475 -0.415170 -0.082358 0.496564 -0.683463 -0.535073
-0.263475 -0.415170 -0.082358 0.532034 -0.732283 -0.425090
-0.313432 -0.378874 -0.082358 0.532034 -0.732283 -0.425090
-0.319258 -0.385917 -0.062932 0.532034 -0.732283 -0.425090
-0.268373 -0.422888 -0.062932 0.532034 -0.732283 -0.425090
-0.268373 -0.422888 -0.062932 0.559122 -0.769566 -0.308465
-0.319258 -0.385917 -0.062932 0.559122 -0.769566 -0.308465
-0.323487 -0.391029 -0.042515 0.559122 -0.769566 -0.308465
-0.271927 -0.428489 -0.042515 0.559122 -0.769566 -0.308465
-0.271927 -0.428489 -0.042515 0.577413 -0.794742 -0.187025
-0.323487 -0.391029 -0.042515 0.577413 -0.794742 -0.187025
-0.326051 -0.394129 -0.021426 0.577413 -0.794742 -0.187025
-0.274083 -0.431886 -0.021426 0.577413 -0.794742 -0.187025
-0.274083 -0.431886 -0.021426 0.586629 -0.807427 -0.062667
-0.326051 -0.394129 -0.021426 0.586629 -0.807427 -0.062667
-0.326911 -0.395167 0.000000 0.586629 -0.807427 -0.062667
-0.274805 -0.433024 0.000000 0.586629 -0.807427 -0.062667
-0.326911 -0.395167 0.000000 0.683201 -0.727536 0.062667
-0.373860 -0.351079 0.000000 0.683201 -0.727536 0.062667
-0.372878 -0.350156 0.021426 0.683201 -0.727536 0.062667
-0.326051 -0.394129 0.021426 0.683201 -0.727536 0.062667
-0.326051 -0.394129 0.021426 0.672468 -0.716107 0.187025
-0.372878 -0.350156 0.021426 0.672468 -0.716107 0.187025
-0.369945 -0.347402 0.042515 0.672468 -0.716107 0.187025
-0.323487 -0.391029 0.042515 0.672468 -0.716107 0.187025
-0.323487 -0.391029 0.042515 0.651165 -0.693421 0.308466
-0.369945 -0.347402 0.042515 0.651165 -0.693421 0.308466
-0.365109 -0.342861 0.062932 0.651165 -0.693421 0.308466
-0.319258 -0.385917 0.062932 0.651165 -0.693421 0.308466
-0.319258 -0.385917 0.062932 0.619619 -0.659827 0.425090
-0.365109 -0.342861 0.062932 0.619619 -0.659827 0.425090
-0.358446 -0.336603 0.082358 0.619619 -0.659827 0.425090
-0.313432 -0.378874 0.082358 0.619619 -0.659827 0.425090
-0.313432 -0.378874 0.082358 0.578309 -0.615837 0.535074
-0.358446 -0.336603 0.082358 0.578309 -0.615837 0.535074
-0.350060 -0.328729 0.100484 0.578309 -0.615837 0.535074
-0.306099 -0.370011 0.100484 0.578309 -0.615837 0.535074
-0.306099 -0.370011 0.100484 0.527875 -0.562131 0.636676
-0.350060 -0.328729 0.100484 0.527875 -0.562131 0.636676
-0.340084 -0.319361 0.117026 0.527875 -0.562131 0.636676
-0.297376 -0.359466 0.117026 0.527875 -0.562131 0.636676
-0.297376 -0.359466 0.117026 0.469097 -0.499537 0.728293
-0.340084 -0.319361 0.117026 0.469097 -0.499537 0.728293
-0.328676 -0.308648 0.131722 0.469097 -0.499537 0.728293
-0.287401 -0.347408 0.131722 0.469097 -0.499537 0.728293
-0.287401 -0.347408 0.131722 0.402887 -0.429031 0.808464
-0.328676 -0.308648 0.131722 0.402887 -0.429031 0.808464
-0.316015 -0.296758 0.144341 0.402887 -0.429031 0.808464
-0.276330 -0.334025 0.144341 0.402887 -0.429031 0.808464
-0.276330 -0.334025 0.144341 0.330283 -0.351716 0.875904
-0.316015 -0.296758 0.144341 0.330283 -0.351716 0.875904
-0.302301 -0.283880 0.154684 0.330283 -0.351716 0.875904
-0.264338 -0.319530 0.154684 0.330283 -0.351716 0.875904
-0.264338 -0.319530 0.154684 0.252429 -0.268810 0.929527
-0.302301 -0.283880 0.154684 0.252429 -0.268810 0.929527
-0.287750 -0.270215 0.162587 0.252429 -0.268810 0.929527
-0.251614 -0.304149 0.162587 0.252429 -0.268810 0.929527
-0.251614 -0.304149 0.162587 0.170556 -0.181623 0.968465
-0.287750 -0.270215 0.162587 0.170556 -0.181623 0.968465
-0.272592 -0.255981 0.167926 0.170556 -0.181623 0.968465
-0.238359 -0.288127 0.167926 0.170556 -0.181623 0.968465
-0.238359 -0.288127 0.167926 0.085964 -0.091542 0.992084
-0.272592 -0.255981 0.167926 0.085964 -0.091542 0.992084
-0.257065 -0.241401 0.170617 0.085964 -0.091542 0.992084
-0.224783 -0.271716 0.170617 0.085964 -0.091542 0.992084
-0.257065 -0.241401 0.170617 -0.000000 0.000000 1.000000
-0.241415 -0.226704 0.170617 -0.000000 0.000000 1.000000
-0.211098 -0.255174 0.170617 -0.085964 0.091542 0.992084
-0.241415 -0.226704 0.170617 -0.085964 0.091542 0.992084
-0.225889 -0.212124 0.167926 -0.085964 0.091542 0.992084
-0.197521 -0.238763 0.167926 -0.085964 0.091542 0.992084
-0.197521 -0.238763 0.167926 -0.170555 0.181623 0.968465
-0.225889 -0.212124 0.167926 -0.170555 0.181623 0.968465
-0.210731 -0.197889 0.162587 -0.170555 0.181623 0.968465
-0.184267 -0.222740 0.162587 -0.170555 0.181623 0.968465
-0.184267 -0.222740 0.162587 -0.252429 0.268810 0.929527
-0.210731 -0.197889 0.162587 -0.252429 0.268810 0.929527
-0.196180 -0.184225 0.154684 -0.252429 0.268810 0.929527
-0.171543 -0.207360 0.154684 -0.252429 0.268810 0.929527
-0.171543 -0.207360 0.154684 -0.330283 0.351716 0.875904
-0.196180 -0.184225 0.154684 -0.330283 0.351716 0.875904
-0.182465 -0.171347 0.144341 -0.330283 0.351716 0.875904
-0.159551 -0.192865 0.144341 -0.330283 0.351716 0.875904
-0.159551 -0.192865 0.144341 -0.402887 0.429032 0.808464
-0.182465 -0.171347 0.144341 -0.402887 0.429032 0.808464
-0.169804 -0.159457 0.131722 -0.402887 0.429032 0.808464
-0.148480 -0.179482 0.131722 -0.402887 0.429032 0.808464
-0.148480 -0.179482 0.131722 -0.469096 0.499537 0.728294
-0.169804 -0.159457 0.131722 -0.469096 0.499537 0.728294
-0.158396 -0.148744 0.117026 -0.469096 0.499537 0.728294
-0.138504 -0.167423 0.117026 -0.469096 0.499537 0.728294
-0.138504 -0.167423 0.117026 -0.527875 0.562131 0.636676
-0.158396 -0.148744 0.117026 -0.527875 0.562131 0.636676
-0.148420 -0.139376 0.100484 -0.527875 0.562131 0.636676
-0.129782 -0.156879 0.100484 -0.527875 0.562131 0.636676
-0.129782 -0.156879 0.100484 -0.578310 0.615837 0.535073
-0.148420 -0.139376 0.100484 -0.578310 0.615837 0.535073
-0.140035 -0.131502 0.082358 -0.578310 0.615837 0.535073
-0.122449 -0.148016 0.082358 -0.578310 0.615837 0.535073
-0.122449 -0.148016 0.082358 -0.619618 0.659826 0.425091
-0.140035 -0.131502 0.082358 -0.619618 0.659826 0.425091
-0.133371 -0.125244 0.062932 -0.619618 0.659826 0.425091
-0.116622 -0.140972 0.062932 -0.619618 0.659826 0.425091
-0.116622 -0.140972 0.062932 -0.651165 0.693421 0.308465
-0.133371 -0.125244 0.062932 -0.651165 0.693421 0.308465
-0.128535 -0.120703 0.042515 -0.651165 0.693421 0.308465
-0.112394 -0.135861 0.042515 -0.651165 0.693421 0.308465
-0.112394 -0.135861 0.042515 -0.672468 0.716106 0.187024
-0.128535 -0.120703 0.042515 -0.672468 0.716106 0.187024
-0.125603 -0.117949 0.021426 -0.672468 0.716106 0.187024
-0.109829 -0.132761 0.021426 -0.672468 0.716106 0.187024
-0.109829 -0.132761 0.021426 -0.683201 0.727536 0.062668
-0.125603 -0.117949 0.021426 -0.683201 0.727536 0.062668
-0.124620 -0.117026 0.000000 -0.683201 0.727536 0.062668
-0.108970 -0.131722 0.000000 -0.683201 0.727536 0.062668
-0.108970 -0.131722 0.000000 -0.683201 0.727536 -0.062668
-0.124620 -0.117026 0.000000 -0.683201 0.727536 -0.062668
-0.125603 -0.117949 -0.021426 -0.683201 0.727536 -0.062668
-0.109829 -0.132761 -0.021426 -0.683201 0.727536 -0.062668
-0.109829 -0.132761 -0.021426 -0.672468 0.716106 -0.187024
-0.125603 -0.117949 -0.021426 -0.672468 0.716106 -0.187024
-0.128535 -0.120703 -0.042515 -0.672468 0.716106 -0.187024
-0.112394 -0.135861 -0.042515 -0.672468 0.716106 -0.187024
-0.112394 -0.135861 -0.042515 -0.651165 0.693421 -0.308465
-0.128535 -0.120703 -0.042515 -0.651165 0.693421 -0.308465
-0.133371 -0.125244 -0.062932 -0.651165 0.693421 -0.308465
-0.116622 -0.140972 -0.062932 -0.651165 0.693421 -0.308465
-0.116622 -0.140972 -0.062932 -0.619618 0.659826 -0.425091
-0.133371 -0.125244 -0.062932 -0.619618 0.659826 -0.425091
-0.140035 -0.131502 -0.082358 -0.619618 0.659826 -0.425091
-0.122449 -0.148016 -0.082358 -0.619618 0.659826 -0.425091
-0.122449 -0.148016 -0.082358 -0.578310 0.615837 -0.535073
-0.140035 -0.131502 -0.082358 -0.578310 0.615837 -0.535073
-0.148420 -0.139376 -0.100484 -0.578310 0.615837 -0.535073
-0.129782 -0.156879 -0.100484 -0.578310 0.615837 -0.535073
-0.129782 -0.156879 -0.100484 -0.527875 0.562131 -0.636676
-0.148420 -0.139376 -0.100484 -0.527875 0.562131 -0.636676
-0.158396 -0.148744 -0.117026 -0.527875 0.562131 -0.636676
-0.138504 -0.167423 -0.117026 -0.527875 0.562131 -0.636676
-0.138504 -0.167423 -0.117026 -0.469096 0.499537 -0.728294
-0.158396 -0.148744 -0.117026 -0.469096 0.499537 -0.728294
-0.169804 -0.159457 -0.131722 -0.469096 0.499537 -0.728294
-0.148480 -0.179482 -0.131722 -0.469096 0.499537 -0.728294
-0.148480 -0.179482 -0.131722 -0.402887 0.429032 -0.808464
-0.169804 -0.159457 -0.131722 -0.402887 0.429032 -0.808464
-0.182465 -0.171347 -0.144341 -0.402887 0.429032 -0.808464
-0.159551 -0.192865 -0.144341 -0.402887 0.429032 -0.808464
-0.159551 -0.192865 -0.144341 -0.330283 0.351716 -0.875904
-0.182465 -0.171347 -0.144341 -0.330283 0.351716 -0.875904
-0.196180 -0.184225 -0.154684 -0.330283 0.351716 -0.875904
-0.171543 -0.207360 -0.154684 -0.330283 0.351716 -0.875904
-0.171543 -0.207360 -0.154684 -0.252429 0.268810 -0.929527
-0.196180 -0.184225 -0.154684 -0.252429 0.268810 -0.929527
-0.210731 -0.197889 -0.162587 -0.252429 0.268810 -0.929527
-0.184267 -0.222740 -0.162587 -0.252429 0.268810 -0.929527
-0.184267 -0.222740 -0.162587 -0.170555 0.181623 -0.968465
-0.210731 -0.197889 -0.162587 -0.170555 0.181623 -0.968465
-0.225889 -0.212124 -0.167926 -0.170555 0.181623 -0.968465
-0.197521 -0.238763 -0.167926 -0.170555 0.181623 -0.968465
-0.197521 -0.238763 -0.167926 -0.085964 0.091542 -0.992084
-0.225889 -0.212124 -0.167926 -0.085964 0.091542 -0.992084
-0.241415 -0.226704 -0.170617 -0.085964 0.091542 -0.992084
-0.211098 -0.255174 -0.170617 -0.085964 0.091542 -0.992084
-0.241415 -0.226704 -0.170617 -0.000000 0.000000 -1.000000
-0.257065 -0.241401 -0.170617 -0.000000 0.000000 -1.000000
-0.224783 -0.271716 -0.170617 0.085964 -0.091542 -0.992084
-0.257065 -0.241401 -0.170617 0.085964 -0.091542 -0.992084
-0.272592 -0.255981 -0.167926 0.085964 -0.091542 -0.992084
-0.238359 -0.288127 -0.167926 0.085964 -0.091542 -0.992084
-0.238359 -0.288127 -0.167926 0.170556 -0.181623 -0.968465
-0.272592 -0.255981 -0.167926 0.170556 -0.181623 -0.968465
-0.287750 -0.270215 -0.162587 0.170556 -0.181623 -0.968465
-0.251614 -0.304149 -0.162587 0.170556 -0.181623 -0.968465
-0.251614 -0.304149 -0.162587 0.252429 -0.268810 -0.929527
-0.287750 -0.270215 -0.162587 0.252429 -0.268810 -0.929527
-0.302301 -0.283880 -0.154684 0.252429 -0.268810 -0.929527
-0.264338 -0.319530 -0.154684 0.252429 -0.268810 -0.929527
-0.264338 -0.319530 -0.154684 0.330283 -0.351716 -0.875904
-0.302301 -0.283880 -0.154684 0.330283 -0.351716 -0.875904
-0.316015 -0.296758 -0.144341 0.330283 -0.351716 -0.875904
-0.276330 -0.334025 -0.144341 0.330283 -0.351716 -0.875904
-0.276330 -0.334025 -0.144341 0.402887 -0.429031 -0.808464
-0.316015 -0.296758 -0.144341 0.402887 -0.429031 -0.808464
-0.328676 -0.308648 -0.131722 0.402887 -0.429031 -0.808464
-0.287401 -0.347408 -0.131722 0.402887 -0.429031 -0.808464
-0.287401 -0.347408 -0.131722 0.469097 -0.499537 -0.728293
-0.328676 -0.308648 -0.131722 0.469097 -0.499537 -0.728293
-0.340084 -0.319361 -0.117026 0.469097 -0.499537 -0.728293
-0.297376 -0.359466 -0.117026 0.469097 -0.499537 -0.728293
-0.297376 -0.359466 -0.117026 0.527875 -0.562131 -0.636676
-0.340084 -0.319361 -0.117026 0.527875 -0.562131 -0.636676
-0.350060 -0.328729 -0.100484 0.527875 -0.562131 -0.636676
-0.306099 -0.370011 -0.100484 0.527875 -0.562131 -0.636676
-0.306099 -0.370011 -0.100484 0.578309 -0.615837 -0.535074
-0.350060 -0.328729 -0.100484 0.578309 -0.615837 -0.535074
-0.358446 -0.336603 -0.082358 0.578309 -0.615837 -0.535074
-0.313432 -0.378874 -0.082358 0.578309 -0.615837 -0.535074
-0.313432 -0.378874 -0.082358 0.619619 -0.659827 -0.425090
-0.358446 -0.336603 -0.082358 0.619619 -0.659827 -0.425090
-0.365109 -0.342861 -0.062932 0.619619 -0.659827 -0.425090
-0.319258 -0.385917 -0.062932 0.619619 -0.659827 -0.425090
-0.319258 -0.385917 -0.062932 0.651165 -0.693421 -0.308466
-0.365109 -0.342861 -0.062932 0.651165 -0.693421 -0.308466
-0.369945 -0.347402 -0.042515 0.651165 -0.693421 -0.308466
-0.323487 -0.391029 -0.042515 0.651165 -0.693421 -0.308466
-0.323487 -0.391029 -0.042515 0.672468 -0.716107 -0.187025
-0.369945 -0.347402 -0.042515 0.672468 -0.716107 -0.187025
-0.372878 -0.350156 -0.021426 0.672468 -0.716107 -0.187025
-0.326051 -0.394129 -0.021426 0.672468 -0.716107 -0.187025
-0.326051 -0.394129 -0.021426 0.683201 -0.727536 -0.062667
-0.372878 -0.350156 -0.021426 0.683201 -0.727536 -0.062667
-0.373860 -0.351079 0.000000 0.683201 -0.727536 -0.062667
-0.326911 -0.395167 0.000000 0.683201 -0.727536 -0.062667
-0.373860 -0.351079 0.000000 0.768999 -0.636171 0.062666
-0.414914 -0.301453 0.000000 0.768999 -0.636171 0.062666
-0.413824 -0.300661 0.021426 0.768999 -0.636171 0.062666
-0.372878 -0.350156 0.021426 0.768999 -0.636171 0.062666
-0.372878 -0.350156 0.021426 0.756918 -0.626177 0.187024
-0.413824 -0.300661 0.021426 0.756918 -0.626177 0.187024
-0.410569 -0.298296 0.042515 0.756918 -0.626177 0.187024
-0.369945 -0.347402 0.042515 0.756918 -0.626177 0.187024
-0.369945 -0.347402 0.042515 0.732939 -0.606341 0.308467
-0.410569 -0.298296 0.042515 0.732939 -0.606341 0.308467
-0.405202 -0.294397 0.062932 0.732939 -0.606341 0.308467
-0.365109 -0.342861 0.062932 0.732939 -0.606341 0.308467
-0.365109 -0.342861 0.062932 0.697431 -0.576966 0.425089
-0.405202 -0.294397 0.062932 0.697431 -0.576966 0.425089
-0.397807 -0.289024 0.082358 0.697431 -0.576966 0.425089
-0.358446 -0.336603 0.082358 0.697431 -0.576966 0.425089
-0.358446 -0.336603 0.082358 0.650933 -0.538500 0.535074
-0.397807 -0.289024 0.082358 0.650933 -0.538500 0.535074
-0.388500 -0.282262 0.100484 0.650933 -0.538500 0.535074
-0.350060 -0.328729 0.100484 0.650933 -0.538500 0.535074
-0.350060 -0.328729 0.100484 0.594167 -0.491539 0.636675
-0.388500 -0.282262 0.100484 0.594167 -0.491539 0.636675
-0.377429 -0.274219 0.117026 0.594167 -0.491539 0.636675
-0.340084 -0.319361 0.117026 0.594167 -0.491539 0.636675
-0.340084 -0.319361 0.117026 0.528005 -0.436804 0.728294
-0.377429 -0.274219 0.117026 0.528005 -0.436804 0.728294
-0.364768 -0.265020 0.131722 0.528005 -0.436804 0.728294
-0.328676 -0.308648 0.131722 0.528005 -0.436804 0.728294
-0.328676 -0.308648 0.131722 0.453482 -0.375153 0.808464
-0.364768 -0.265020 0.131722 0.453482 -0.375153 0.808464
-0.350717 -0.254811 0.144341 0.453482 -0.375153 0.808464
-0.316015 -0.296758 0.144341 0.453482 -0.375153 0.808464
-0.316015 -0.296758 0.144341 0.371761 -0.307547 0.875904
-0.350717 -0.254811 0.144341 0.371761 -0.307547 0.875904
-0.335497 -0.243753 0.154684 0.371761 -0.307547 0.875904
-0.302301 -0.283880 0.154684 0.371761 -0.307547 0.875904
-0.302301 -0.283880 0.154684 0.284129 -0.235052 0.929527
-0.335497 -0.243753 0.154684 0.284129 -0.235052 0.929527
-0.319348 -0.232020 0.162587 0.284129 -0.235052 0.929527
-0.287750 -0.270215 0.162587 0.284129 -0.235052 0.929527
-0.287750 -0.270215 0.162587 0.191974 -0.158815 0.968465
-0.319348 -0.232020 0.162587 0.191974 -0.158815 0.968465
-0.302525 -0.219798 0.167926 0.191974 -0.158815 0.968465
-0.272592 -0.255981 0.167926 0.191974 -0.158815 0.968465
-0.272592 -0.255981 0.167926 0.096759 -0.080046 0.992084
-0.302525 -0.219798 0.167926 0.096759 -0.080046 0.992084
-0.285294 -0.207278 0.170617 0.096759 -0.080046 0.992084
-0.257065 -0.241401 0.170617 0.096759 -0.080046 0.992084
-0.285294 -0.207278 0.170617 0.000000 0.000000 1.000000
-0.267925 -0.194659 0.170617 0.000000 0.000000 1.000000
-0.241415 -0.226704 0.170617 -0.096759 0.080046 0.992084
-0.267925 -0.194659 0.170617 -0.096759 0.080046 0.992084
-0.250694 -0.182140 0.167926 -0.096759 0.080046 0.992084
-0.225889 -0.212124 0.167926 -0.096759 0.080046 0.992084
-0.225889 -0.212124 0.167926 -0.191974 0.158815 0.968465
-0.250694 -0.182140 0.167926 -0.191974 0.158815 0.968465
-0.233871 -0.169917 0.162587 -0.191974 0.158815 0.968465
-0.210731 -0.197889 0.162587 -0.191974 0.158815 0.968465
-0.210731 -0.197889 0.162587 -0.284129 0.235053 0.929527
-0.233871 -0.169917 0.162587 -0.284129 0.235053 0.929527
-0.217722 -0.158185 0.154684 -0.284129 0.235053 0.929527
-0.196180 -0.184225 0.154684 -0.284129 0.235053 0.929527
-0.196180 -0.184225 0.154684 -0.371761 0.307548 0.875904
-0.217722 -0.158185 0.154684 -0.371761 0.307548 0.875904
-0.202502 -0.147127 0.144341 -0.371761 0.307548 0.875904
-0.182465 -0.171347 0.144341 -0.371761 0.307548 0.875904
-0.182465 -0.171347 0.144341 -0.453482 0.375153 0.808464
-0.202502 -0.147127 0.144341 -0.453482 0.375153 0.808464
-0.188451 -0.136918 0.131722 -0.453482 0.375153 0.808464
-0.169804 -0.159457 0.131722 -0.453482 0.375153 0.808464
-0.169804 -0.159457 0.131722 -0.528006 0.436804 0.728294
-0.188451 -0.136918 0.131722 -0.528006 0.436804 0.728294
-0.175790 -0.127719 0.117026 -0.528006 0.436804 0.728294
-0.158396 -0.148744 0.117026 -0.528006 0.436804 0.728294
-0.158396 -0.148744 0.117026 -0.594167 0.491538 0.636676
-0.175790 -0.127719 0.117026 -0.594167 0.491538 0.636676
-0.164719 -0.119675 0.100484 -0.594167 0.491538 0.636676
-0.148420 -0.139376 0.100484 -0.594167 0.491538 0.636676
-0.148420 -0.139376 0.100484 -0.650934 0.538500 0.535073
-0.164719 -0.119675 0.100484 -0.650934 0.538500 0.535073
-0.155412 -0.112914 0.082358 -0.650934 0.538500 0.535073
-0.140035 -0.131502 0.082358 -0.650934 0.538500 0.535073
-0.140035 -0.131502 0.082358 -0.697430 0.576966 0.425091
-0.155412 -0.112914 0.082358 -0.697430 0.576966 0.425091
-0.148017 -0.107541 0.062932 -0.697430 0.576966 0.425091
-0.133371 -0.125244 0.062932 -0.697430 0.576966 0.425091
-0.133371 -0.125244 0.062932 -0.732939 0.606341 0.308466
-0.148017 -0.107541 0.062932 -0.732939 0.606341 0.308466
-0.142650 -0.103641 0.042515 -0.732939 0.606341 0.308466
-0.128535 -0.120703 0.042515 -0.732939 0.606341 0.308466
-0.128535 -0.120703 0.042515 -0.756918 0.626177 0.187024
-0.142650 -0.103641 0.042515 -0.756918 0.626177 0.187024
-0.139395 -0.101277 0.021426 -0.756918 0.626177 0.187024
-0.125603 -0.117949 0.021426 -0.756918 0.626177 0.187024
-0.125603 -0.117949 0.021426 -0.768998 0.636172 0.062668
-0.139395 -0.101277 0.021426 -0.768998 0.636172 0.062668
-0.138305 -0.100484 0.000000 -0.768998 0.636172 0.062668
-0.124620 -0.117026 0.000000 -0.768998 0.636172 0.062668
-0.124620 -0.117026 0.000000 -0.768998 0.636172 -0.062668
-0.138305 -0.100484 0.000000 -0.768998 0.636172 -0.062668
-0.139395 -0.101277 -0.021426 -0.768998 0.636172 -0.062668
-0.125603 -0.117949 -0.021426 -0.768998 0.636172 -0.062668
-0.125603 -0.117949 -0.021426 -0.756918 0.626177 -0.187024
-0.139395 -0.101277 -0.021426 -0.756918 0.626177 -0.187024
-0.142650 -0.103641 -0.042515 -0.756918 0.626177 -0.187024
-0.128535 -0.120703 -0.042515 -0.756918 0.626177 -0.187024
-0.128535 -0.120703 -0.042515 -0.732939 0.606341 -0.308466
-0.142650 -0.103641 -0.042515 -0.732939 0.606341 -0.308466
-0.148017 -0.107541 -0.062932 -0.732939 0.606341 -0.308466
-0.133371 -0.125244 -0.062932 -0.732939 0.606341 -0.308466
-0.133371 -0.125244 -0.062932 -0.697430 0.576966 -0.425091
-0.148017 -0.107541 -0.062932 -0.697430 0.576966 -0.425091
-0.155412 -0.112914 -0.082358 -0.697430 0.576966 -0.425091
-0.140035 -0.131502 -0.082358 -0.697430 0.576966 -0.425091
-0.140035 -0.131502 -0.082358 -0.650934 0.538500 -0.535073
-0.155412 -0.112914 -0.082358 -0.650934 0.538500 -0.535073
-0.164719 -0.119675 -0.100484 -0.650934 0.538500 -0.535073
-0.148420 -0.139376 -0.100484 -0.650934 0.538500 -0.535073
-0.148420 -0.139376 -0.100484 -0.594167 0.491538 -0.636676
-0.164719 -0.119675 -0.100484 -0.594167 0.491538 -0.636676
-0.175790 -0.127719 -0.117026 -0.594167 0.491538 -0.636676
-0.158396 -0.148744 -0.117026 -0.594167 0.491538 -0.636676
-0.158396 -0.148744 -0.117026 -0.528006 0.436804 -0.728294
-0.175790 -0.127719 -0.117026 -0.528006 0.436804 -0.728294
-0.188451 -0.136918 -0.131722 -0.528006 0.436804 -0.728294
-0.169804 -0.159457 -0.131722 -0.528006 0.436804 -0.728294
-0.169804 -0.159457 -0.131722 -0.453482 0.375153 -0.808464
-0.188451 -0.136918 -0.131722 -0.453482 0.375153 -0.808464
-0.202502 -0.147127 -0.144341 -0.453482 0.375153 -0.808464
-0.182465 -0.171347 -0.144341 -0.453482 0.375153 -0.808464
-0.182465 -0.171347 -0.144341 -0.371761 0.307548 -0.875904
-0.202502 -0.147127 -0.144341 -0.371761 0.307548 -0.875904
-0.217722 -0.158185 -0.154684 -0.371761 0.307548 -0.875904
-0.196180 -0.184225 -0.154684 -0.371761 0.307548 -0.875904
-0.196180 -0.184225 -0.154684 -0.284129 0.235053 -0.929527
-0.217722 -0.158185 -0.154684 -0.284129 0.235053 -0.929527
-0.233871 -0.169917 -0.162587 -0.284129 0.235053 -0.929527
-0.210731 -0.197889 -0.162587 -0.284129 0.235053 -0.929527
-0.210731 -0.197889 -0.162587 -0.191974 0.158815 -0.968465
-0.233871 -0.169917 -0.162587 -0.191974 0.158815 -0.968465
-0.250694 -0.182140 -0.167926 -0.191974 0.158815 -0.968465
-0.225889 -0.212124 -0.167926 -0.191974 0.158815 -0.968465
-0.225889 -0.212124 -0.167926 -0.096759 0.080046 -0.992084
-0.250694 -0.182140 -0.167926 -0.096759 0.080046 -0.992084
-0.267925 -0.194659 -0.170617 -0.096759 0.080046 -0.992084
-0.241415 -0.226704 -0.170617 -0.096759 0.080046 -0.992084
-0.267925 -0.194659 -0.170617 0.000000 0.000000 -1.000000
-0.285294 -0.207278 -0.170617 0.000000 0.000000 -1.000000
-0.257065 -0.241401 -0.170617 0.096759 -0.080046 -0.992084
-0.285294 -0.207278 -0.170617 0.096759 -0.080046 -0.992084
-0.302525 -0.219798 -0.167926 0.096759 -0.080046 -0.992084
-0.272592 -0.255981 -0.167926 0.096759 -0.080046 -0.992084
-0.272592 -0.255981 -0.167926 0.191974 -0.158815 -0.968465
-0.302525 -0.219798 -0.167926 0.191974 -0.158815 -0.968465
-0.319348 -0.232020 -0.162587 0.191974 -0.158815 -0.968465
-0.287750 -0.270215 -0.162587 0.191974 -0.158815 -0.968465
-0.287750 -0.270215 -0.162587 0.284129 -0.235052 -0.929527
-0.319348 -0.232020 -0.162587 0.284129 -0.235052 -0.929527
-0.335497 -0.243753 -0.154684 0.284129 -0.235052 -0.929527
-0.302301 -0.283880 -0.154684 0.284129 -0.235052 -0.929527
-0.302301 -0.283880 -0.154684 0.371761 -0.307547 -0.875904
-0.335497 -0.243753 -0.154684 0.371761 -0.307547 -0.875904
-0.350717 -0.254811 -0.144341 0.371761 -0.307547 -0.875904
-0.316015 -0.296758 -0.144341 0.371761 -0.307547 -0.875904
-0.316015 -0.296758 -0.144341 0.453482 -0.375153 -0.808464
-0.350717 -0.254811 -0.144341 0.453482 -0.375153 -0.808464
-0.364768 -0.265020 -0.131722 0.453482 -0.375153 -0.808464
-0.328676 -0.308648 -0.131722 0.453482 -0.375153 -0.808464
-0.328676 -0.308648 -0.131722 0.528005 -0.436804 -0.728294
-0.364768 -0.265020 -0.131722 0.528005 -0.436804 -0.728294
-0.377429 -0.274219 -0.117026 0.528005 -0.436804 -0.728294
-0.340084 -0.319361 -0.117026 0.528005 -0.436804 -0.728294
-0.340084 -0.319361 -0.117026 0.594167 -0.491539 -0.636675
-0.377429 -0.274219 -0.117026 0.594167 -0.491539 -0.636675
-0.388500 -0.282262 -0.100484 0.594167 -0.491539 -0.636675
-0.350060 -0.328729 -0.100484 0.594167 -0.491539 -0.636675
-0.350060 -0.328729 -0.100484 0.650933 -0.538500 -0.535074
-0.388500 -0.282262 -0.100484 0.650933 -0.538500 -0.535074
-0.397807 -0.289024 -0.082358 0.650933 -0.538500 -0.535074
-0.358446 -0.336603 -0.082358 0.650933 -0.538500 -0.535074
-0.358446 -0.336603 -0.082358 0.697431 -0.576966 -0.425089
-0.397807 -0.289024 -0.082358 0.697431 -0.576966 -0.425089
-0.405202 -0.294397 -0.062932 0.697431 -0.576966 -0.425089
-0.365109 -0.342861 -0.062932 0.697431 -0.576966 -0.425089
-0.365109 -0.342861 -0.062932 0.732939 -0.606341 -0.308467
-0.405202 -0.294397 -0.062932 0.732939 -0.606341 -0.308467
-0.410569 -0.298296 -0.042515 0.732939 -0.606341 -0.308467
-0.369945 -0.347402 -0.042515 0.732939 -0.606341 -0.308467
-0.369945 -0.347402 -0.042515 0.756918 -0.626177 -0.187024
-0.410569 -0.298296 -0.042515 0.756918 -0.626177 -0.187024
-0.413824 -0.300661 -0.021426 0.756918 -0.626177 -0.187024
-0.372878 -0.350156 -0.021426 0.756918 -0.626177 -0.187024
-0.372878 -0.350156 -0.021426 0.768999 -0.636171 -0.062666
-0.413824 -0.300661 -0.021426 0.768999 -0.636171 -0.062666
-0.414914 -0.301453 0.000000 0.768999 -0.636171 -0.062666
-0.373860 -0.351079 0.000000 0.768999 -0.636171 -0.062666
-0.414914 -0.301453 0.000000 0.842668 -0.534774 0.062667
-0.449425 -0.247074 0.000000 0.842668 -0.534774 0.062667
-0.448243 -0.246424 0.021426 0.842668 -0.534774 0.062667
-0.413824 -0.300661 0.021426 0.842668 -0.534774 0.062667
-0.413824 -0.300661 0.021426 0.829430 -0.526372 0.187025
-0.448243 -0.246424 0.021426 0.829430 -0.526372 0.187025
-0.444718 -0.244486 0.042515 0.829430 -0.526372 0.187025
-0.410569 -0.298296 0.042515 0.829430 -0.526372 0.187025
-0.410569 -0.298296 0.042515 0.803155 -0.509698 0.308464
-0.444718 -0.244486 0.042515 0.803155 -0.509698 0.308464
-0.438905 -0.241290 0.062932 0.803155 -0.509698 0.308464
-0.405202 -0.294397 0.062932 0.803155 -0.509698 0.308464
-0.405202 -0.294397 0.062932 0.764244 -0.485005 0.425090
-0.438905 -0.241290 0.062932 0.764244 -0.485005 0.425090
-0.430894 -0.236886 0.082358 0.764244 -0.485005 0.425090
-0.397807 -0.289024 0.082358 0.764244 -0.485005 0.425090
-0.397807 -0.289024 0.082358 0.713292 -0.452669 0.535074
-0.430894 -0.236886 0.082358 0.713292 -0.452669 0.535074
-0.420814 -0.231345 0.100484 0.713292 -0.452669 0.535074
-0.388500 -0.282262 0.100484 0.713292 -0.452669 0.535074
-0.388500 -0.282262 0.100484 0.651088 -0.413193 0.636676
-0.420814 -0.231345 0.100484 0.651088 -0.413193 0.636676
-0.408822 -0.224752 0.117026 0.651088 -0.413193 0.636676
-0.377429 -0.274219 0.117026 0.651088 -0.413193 0.636676
-0.377429 -0.274219 0.117026 0.578588 -0.367183 0.728294
-0.408822 -0.224752 0.117026 0.578588 -0.367183 0.728294
-0.395108 -0.217213 0.131722 0.578588 -0.367183 0.728294
-0.364768 -0.265020 0.131722 0.578588 -0.367183 0.728294
-0.364768 -0.265020 0.131722 0.496925 -0.315359 0.808465
-0.395108 -0.217213 0.131722 0.496925 -0.315359 0.808465
-0.379888 -0.208845 0.144341 0.496925 -0.315359 0.808465
-0.350717 -0.254811 0.144341 0.496925 -0.315359 0.808465
-0.350717 -0.254811 0.144341 0.407375 -0.258529 0.875904
-0.379888 -0.208845 0.144341 0.407375 -0.258529 0.875904
-0.363402 -0.199782 0.154684 0.407375 -0.258529 0.875904
-0.335497 -0.243753 0.154684 0.407375 -0.258529 0.875904
-0.335497 -0.243753 0.154684 0.311348 -0.197588 0.929528
-0.363402 -0.199782 0.154684 0.311348 -0.197588 0.929528
-0.345910 -0.190166 0.162587 0.311348 -0.197588 0.929528
-0.319348 -0.232020 0.162587 0.311348 -0.197588 0.929528
-0.319348 -0.232020 0.162587 0.210365 -0.133502 0.968465
-0.345910 -0.190166 0.162587 0.210365 -0.133502 0.968465
-0.327688 -0.180148 0.167926 0.210365 -0.133502 0.968465
-0.302525 -0.219798 0.167926 0.210365 -0.133502 0.968465
-0.302525 -0.219798 0.167926 0.106029 -0.067288 0.992084
-0.327688 -0.180148 0.167926 0.106029 -0.067288 0.992084
-0.309023 -0.169887 0.170617 0.106029 -0.067288 0.992084
-0.285294 -0.207278 0.170617 0.106029 -0.067288 0.992084
-0.309023 -0.169887 0.170617 -0.000000 -0.000000 1.000000
-0.290210 -0.159544 0.170617 -0.000000 -0.000000 1.000000
-0.267925 -0.194659 0.170617 -0.106028 0.067288 0.992084
-0.290210 -0.159544 0.170617 -0.106028 0.067288 0.992084
-0.271545 -0.149283 0.167926 -0.106028 0.067288 0.992084
-0.250694 -0.182140 0.167926 -0.106028 0.067288 0.992084
-0.250694 -0.182140 0.167926 -0.210365 0.133502 0.968465
-0.271545 -0.149283 0.167926 -0.210365 0.133502 0.968465
-0.253323 -0.139266 0.162587 -0.210365 0.133502 0.968465
-0.233871 -0.169917 0.162587 -0.210365 0.133502 0.968465
-0.233871 -0.169917 0.162587 -0.311349 0.197588 0.929527
-0.253323 -0.139266 0.162587 -0.311349 0.197588 0.929527
-0.235831 -0.129649 0.154684 -0.311349 0.197588 0.929527
-0.217722 -0.158185 0.154684 -0.311349 0.197588 0.929527
-0.217722 -0.158185 0.154684 -0.407376 0.258528 0.875904
-0.235831 -0.129649 0.154684 -0.407376 0.258528 0.875904
-0.219345 -0.120586 0.144341 -0.407376 0.258528 0.875904
-0.202502 -0.147127 0.144341 -0.407376 0.258528 0.875904
-0.202502 -0.147127 0.144341 -0.496925 0.315358 0.808465
-0.219345 -0.120586 0.144341 -0.496925 0.315358 0.808465
-0.204125 -0.112219 0.131722 -0.496925 0.315358 0.808465
-0.188451 -0.136918 0.131722 -0.496925 0.315358 0.808465
-0.188451 -0.136918 0.131722 -0.578589 0.367184 0.728293
-0.204125 -0.112219 0.131722 -0.578589 0.367184 0.728293
-0.190411 -0.104679 0.117026 -0.578589 0.367184 0.728293
-0.175790 -0.127719 0.117026 -0.578589 0.367184 0.728293
-0.175790 -0.127719 0.117026 -0.651088 0.413193 0.636676
-0.190411 -0.104679 0.117026 -0.651088 0.413193 0.636676
-0.178419 -0.098087 0.100484 -0.651088 0.413193 0.636676
-0.164719 -0.119675 0.100484 -0.651088 0.413193 0.636676
-0.164719 -0.119675 0.100484 -0.713293 0.452670 0.535073
-0.178419 -0.098087 0.100484 -0.713293 0.452670 0.535073
-0.168338 -0.092545 0.082358 -0.713293 0.452670 0.535073
-0.155412 -0.112914 0.082358 -0.713293 0.452670 0.535073
-0.155412 -0.112914 0.082358 -0.764244 0.485004 0.425091
-0.168338 -0.092545 0.082358 -0.764244 0.485004 0.425091
-0.160328 -0.088141 0.062932 -0.764244 0.485004 0.425091
-0.148017 -0.107541 0.062932 -0.764244 0.485004 0.425091
-0.148017 -0.107541 0.062932 -0.803154 0.509698 0.308465
-0.160328 -0.088141 0.062932 -0.803154 0.509698 0.308465
-0.154515 -0.084945 0.042515 -0.803154 0.509698 0.308465
-0.142650 -0.103641 0.042515 -0.803154 0.509698 0.308465
-0.142650 -0.103641 0.042515 -0.829429 0.526373 0.187024
-0.154515 -0.084945 0.042515 -0.829429 0.526373 0.187024
-0.150989 -0.083007 0.021426 -0.829429 0.526373 0.187024
-0.139395 -0.101277 0.021426 -0.829429 0.526373 0.187024
-0.139395 -0.101277 0.021426 -0.842668 0.534774 0.062668
-0.150989 -0.083007 0.021426 -0.842668 0.534774 0.062668
-0.149808 -0.082358 0.000000 -0.842668 0.534774 0.062668
-0.138305 -0.100484 0.000000 -0.842668 0.534774 0.062668
-0.138305 -0.100484 0.000000 -0.842668 0.534774 -0.062668
-0.149808 -0.082358 0.000000 -0.842668 0.534774 -0.062668
-0.150989 -0.083007 -0.021426 -0.842668 0.534774 -0.062668
-0.139395 -0.101277 -0.021426 -0.842668 0.534774 -0.062668
-0.139395 -0.101277 -0.021426 -0.829429 0.526373 -0.187024
-0.150989 -0.083007 -0.021426 -0.829429 0.526373 -0.187024
-0.154515 -0.084945 -0.042515 -0.829429 0.526373 -0.187024
-0.142650 -0.103641 -0.042515 -0.829429 0.526373 -0.187024
-0.142650 -0.103641 -0.042515 -0.803154 0.509698 -0.308465
-0.154515 -0.084945 -0.042515 -0.803154 0.509698 -0.308465
-0.160328 -0.088141 -0.062932 -0.803154 0.509698 -0.308465
-0.148017 -0.107541 -0.062932 -0.803154 0.509698 -0.308465
-0.148017 -0.107541 -0.062932 -0.764244 0.485004 -0.425091
-0.160328 -0.088141 -0.062932 -0.764244 0.485004 -0.425091
-0.168338 -0.092545 -0.082358 -0.764244 0.485004 -0.425091
-0.155412 -0.112914 -0.082358 -0.764244 0.485004 -0.425091
-0.155412 -0.112914 -0.082358 -0.713293 0.452670 -0.535073
-0.168338 -0.092545 -0.082358 -0.713293 0.452670 -0.535073
-0.178419 -0.098087 -0.100484 -0.713293 0.452670 -0.535073
-0.164719 -0.119675 -0.100484 -0.713293 0.452670 -0.535073
-0.164719 -0.119675 -0.100484 -0.651088 0.413193 -0.636676
-0.178419 -0.098087 -0.100484 -0.651088 0.413193 -0.636676
-0.190411 -0.104679 -0.117026 -0.651088 0.413193 -0.636676
-0.175790 -0.127719 -0.117026 -0.651088 0.413193 -0.636676
-0.175790 -0.127719 -0.117026 -0.578589 0.367184 -0.728293
-0.190411 -0.104679 -0.117026 -0.578589 0.367184 -0.728293
-0.204125 -0.112219 -0.131722 -0.578589 0.367184 -0.728293
-0.188451 -0.136918 -0.131722 -0.578589 0.367184 -0.728293
-0.188451 -0.136918 -0.131722 -0.496925 0.315358 -0.808465
-0.204125 -0.112219 -0.131722 -0.496925 0.315358 -0.808465
-0.219345 -0.120586 -0.144341 -0.496925 0.315358 -0.808465
-0.202502 -0.147127 -0.144341 -0.496925 0.315358 -0.808465
-0.202502 -0.147127 -0.144341 -0.407376 0.258528 -0.875904
-0.219345 -0.120586 -0.144341 -0.407376 0.258528 -0.875904
-0.235831 -0.129649 -0.154684 -0.407376 0.258528 -0.875904
-0.217722 -0.158185 -0.154684 -0.407376 0.258528 -0.875904
-0.217722 -0.158185 -0.154684 -0.311349 0.197588 -0.929527
-0.235831 -0.129649 -0.154684 -0.311349 0.197588 -0.929527
-0.253323 -0.139266 -0.162587 -0.311349 0.197588 -0.929527
-0.233871 -0.169917 -0.162587 -0.311349 0.197588 -0.929527
-0.233871 -0.169917 -0.162587 -0.210365 0.133502 -0.968465
-0.253323 -0.139266 -0.162587 -0.210365 0.133502 -0.968465
-0.271545 -0.149283 -0.167926 -0.210365 0.133502 -0.968465
-0.250694 -0.182140 -0.167926 -0.210365 0.133502 -0.968465
-0.250694 -0.182140 -0.167926 -0.106028 0.067288 -0.992084
-0.271545 -0.149283 -0.167926 -0.106028 0.067288 -0.992084
-0.290210 -0.159544 -0.170617 -0.106028 0.067288 -0.992084
-0.267925 -0.194659 -0.170617 -0.106028 0.067288 -0.992084
-0.290210 -0.159544 -0.170617 -0.000000 -0.000000 -1.000000
-0.309023 -0.169887 -0.170617 -0.000000 -0.000000 -1.000000
-0.285294 -0.207278 -0.170617 0.106029 -0.067288 -0.992084
-0.309023 -0.169887 -0.170617 0.106029 -0.067288 -0.992084
-0.327688 -0.180148 -0.167926 0.106029 -0.067288 -0.992084
-0.302525 -0.219798 -0.167926 0.106029 -0.067288 -0.992084
-0.302525 -0.219798 -0.167926 0.210365 -0.133502 -0.968465
-0.327688 -0.180148 -0.167926 0.210365 -0.133502 -0.968465
-0.345910 -0.190166 -0.162587 0.210365 -0.133502 -0.968465
-0.319348 -0.232020 -0.162587 0.210365 -0.133502 -0.968465
-0.319348 -0.232020 -0.162587 0.311348 -0.197588 -0.929528
-0.345910 -0.190166 -0.162587 0.311348 -0.197588 -0.929528
-0.363402 -0.199782 -0.154684 0.311348 -0.197588 -0.929528
-0.335497 -0.243753 -0.154684 0.311348 -0.197588 -0.929528
-0.335497 -0.243753 -0.154684 0.407375 -0.258529 -0.875904
-0.363402 -0.199782 -0.154684 0.407375 -0.258529 -0.875904
-0.379888 -0.208845 -0.144341 0.407375 -0.258529 -0.875904
-0.350717 -0.254811 -0.144341 0.407375 -0.258529 -0.875904
-0.350717 -0.254811 -0.144341 0.496925 -0.315359 -0.808465
-0.379888 -0.208845 -0.144341 0.496925 -0.315359 -0.808465
-0.395108 -0.217213 -0.131722 0.496925 -0.315359 -0.808465
-0.364768 -0.265020 -0.131722 0.496925 -0.315359 -0.808465
-0.364768 -0.265020 -0.131722 0.578588 -0.367183 -0.728294
-0.395108 -0.217213 -0.131722 0.578588 -0.367183 -0.728294
-0.408822 -0.224752 -0.117026 0.578588 -0.367183 -0.728294
-0.377429 -0.274219 -0.117026 0.578588 -0.367183 -0.728294
-0.377429 -0.274219 -0.117026 0.651088 -0.413193 -0.636676
-0.408822 -0.224752 -0.117026 0.651088 -0.413193 -0.636676
-0.420814 -0.231345 -0.100484 0.651088 -0.413193 -0.636676
-0.388500 -0.282262 -0.100484 0.651088 -0.413193 -0.636676
-0.388500 -0.282262 -0.100484 0.713292 -0.452669 -0.535074
-0.420814 -0.231345 -0.100484 0.713292 -0.452669 -0.535074
-0.430894 -0.236886 -0.082358 0.713292 -0.452669 -0.535074
-0.397807 -0.289024 -0.082358 0.713292 -0.452669 -0.535074
-0.397807 -0.289024 -0.082358 0.764244 -0.485005 -0.425090
-0.430894 -0.236886 -0.082358 0.764244 -0.485005 -0.425090
-0.438905 -0.241290 -0.062932 0.764244 -0.485005 -0.425090
-0.405202 -0.294397 -0.062932 0.764244 -0.485005 -0.425090
-0.405202 -0.294397 -0.062932 0.803155 -0.509698 -0.308464
-0.438905 -0.241290 -0.062932 0.803155 -0.509698 -0.308464
-0.444718 -0.244486 -0.042515 0.803155 -0.509698 -0.308464
-0.410569 -0.298296 -0.042515 0.803155 -0.509698 -0.308464
-0.410569 -0.298296 -0.042515 0.829430 -0.526372 -0.187025
-0.444718 -0.244486 -0.042515 0.829430 -0.526372 -0.187025
-0.448243 -0.246424 -0.021426 0.829430 -0.526372 -0.187025
-0.413824 -0.300661 -0.021426 0.829430 -0.526372 -0.187025
-0.413824 -0.300661 -0.021426 0.842668 -0.534774 -0.062667
-0.448243 -0.246424 -0.021426 0.842668 -0.534774 -0.062667
-0.449425 -0.247074 0.000000 0.842668 -0.534774 -0.062667
-0.414914 -0.301453 0.000000 0.842668 -0.534774 -0.062667
-0.449425 -0.247074 0.000000 0.903048 -0.424943 0.062668
-0.476847 -0.188797 0.000000 0.903048 -0.424943 0.062668
-0.475594 -0.188301 0.021426 0.903048 -0.424943 0.062668
-0.448243 -0.246424 0.021426 0.903048 -0.424943 0.062668
-0.448243 -0.246424 0.021426 0.888861 -0.418267 0.187026
-0.475594 -0.188301 0.021426 0.888861 -0.418267 0.187026
-0.471854 -0.186820 0.042515 0.888861 -0.418267 0.187026
-0.444718 -0.244486 0.042515 0.888861 -0.418267 0.187026
-0.444718 -0.244486 0.042515 0.860704 -0.405017 0.308464
-0.471854 -0.186820 0.042515 0.860704 -0.405017 0.308464
-0.465685 -0.184378 0.062932 0.860704 -0.405017 0.308464
-0.438905 -0.241290 0.062932 0.860704 -0.405017 0.308464
-0.438905 -0.241290 0.062932 0.819005 -0.385395 0.425091
-0.465685 -0.184378 0.062932 0.819005 -0.385395 0.425091
-0.457186 -0.181013 0.082358 0.819005 -0.385395 0.425091
-0.430894 -0.236886 0.082358 0.819005 -0.385395 0.425091
-0.430894 -0.236886 0.082358 0.764403 -0.359701 0.535074
-0.457186 -0.181013 0.082358 0.764403 -0.359701 0.535074
-0.446491 -0.176778 0.100484 0.764403 -0.359701 0.535074
-0.420814 -0.231345 0.100484 0.764403 -0.359701 0.535074
-0.420814 -0.231345 0.100484 0.697740 -0.328333 0.636676
-0.446491 -0.176778 0.100484 0.697740 -0.328333 0.636676
-0.433767 -0.171741 0.117026 0.697740 -0.328333 0.636676
-0.408822 -0.224752 0.117026 0.697740 -0.328333 0.636676
-0.408822 -0.224752 0.117026 0.620046 -0.291773 0.728294
-0.433767 -0.171741 0.117026 0.620046 -0.291773 0.728294
-0.419216 -0.165980 0.131722 0.620046 -0.291773 0.728294
-0.395108 -0.217213 0.131722 0.620046 -0.291773 0.728294
-0.395108 -0.217213 0.131722 0.532531 -0.250591 0.808465
-0.419216 -0.165980 0.131722 0.532531 -0.250591 0.808465
-0.403067 -0.159586 0.144341 0.532531 -0.250591 0.808465
-0.379888 -0.208845 0.144341 0.532531 -0.250591 0.808465
-0.379888 -0.208845 0.144341 0.436566 -0.205432 0.875904
-0.403067 -0.159586 0.144341 0.436566 -0.205432 0.875904
-0.385575 -0.152660 0.154684 0.436566 -0.205432 0.875904
-0.363402 -0.199782 0.154684 0.436566 -0.205432 0.875904
-0.363402 -0.199782 0.154684 0.333658 -0.157008 0.929527
-0.385575 -0.152660 0.154684 0.333658 -0.157008 0.929527
-0.367016 -0.145312 0.162587 0.333658 -0.157008 0.929527
-0.345910 -0.190166 0.162587 0.333658 -0.157008 0.929527
-0.345910 -0.190166 0.162587 0.225438 -0.106084 0.968465
-0.367016 -0.145312 0.162587 0.225438 -0.106084 0.968465
-0.347682 -0.137657 0.167926 0.225438 -0.106084 0.968465
-0.327688 -0.180148 0.167926 0.225438 -0.106084 0.968465
-0.327688 -0.180148 0.167926 0.113626 -0.053469 0.992084
-0.347682 -0.137657 0.167926 0.113626 -0.053469 0.992084
-0.327879 -0.129817 0.170617 0.113626 -0.053469 0.992084
-0.309023 -0.169887 0.170617 0.113626 -0.053469 0.992084
-0.327879 -0.129817 0.170617 -0.000000 0.000000 1.000000
-0.307918 -0.121913 0.170617 -0.000000 0.000000 1.000000
-0.290210 -0.159544 0.170617 -0.113626 0.053468 0.992084
-0.307918 -0.121913 0.170617 -0.113626 0.053468 0.992084
-0.288114 -0.114073 0.167926 -0.113626 0.053468 0.992084
-0.271545 -0.149283 0.167926 -0.113626 0.053468 0.992084
-0.271545 -0.149283 0.167926 -0.225438 0.106083 0.968465
-0.288114 -0.114073 0.167926 -0.225438 0.106083 0.968465
-0.268780 -0.106418 0.162587 -0.225438 0.106083 0.968465
-0.253323 -0.139266 0.162587 -0.225438 0.106083 0.968465
-0.253323 -0.139266 0.162587 -0.333658 0.157008 0.929527
-0.268780 -0.106418 0.162587 -0.333658 0.157008 0.929527
-0.250221 -0.099070 0.154684 -0.333658 0.157008 0.929527
-0.235831 -0.129649 0.154684 -0.333658 0.157008 0.929527
-0.235831 -0.129649 0.154684 -0.436565 0.205432 0.875904
-0.250221 -0.099070 0.154684 -0.436565 0.205432 0.875904
-0.232729 -0.092144 0.144341 -0.436565 0.205432 0.875904
-0.219345 -0.120586 0.144341 -0.436565 0.205432 0.875904
-0.219345 -0.120586 0.144341 -0.532531 0.250591 0.808464
-0.232729 -0.092144 0.144341 -0.532531 0.250591 0.808464
-0.216580 -0.085750 0.131722 -0.532531 0.250591 0.808464
-0.204125 -0.112219 0.131722 -0.532531 0.250591 0.808464
-0.204125 -0.112219 0.131722 -0.620046 0.291772 0.728293
-0.216580 -0.085750 0.131722 -0.620046 0.291772 0.728293
-0.202029 -0.079989 0.117026 -0.620046 0.291772 0.728293
-0.190411 -0.104679 0.117026 -0.620046 0.291772 0.728293
-0.190411 -0.104679 0.117026 -0.697741 0.328332 0.636675
-0.202029 -0.079989 0.117026 -0.697741 0.328332 0.636675
-0.189306 -0.074951 0.100484 -0.697741 0.328332 0.636675
-0.178419 -0.098087 0.100484 -0.697741 0.328332 0.636675
-0.178419 -0.098087 0.100484 -0.764403 0.359701 0.535073
-0.189306 -0.074951 0.100484 -0.764403 0.359701 0.535073
-0.178610 -0.070717 0.082358 -0.764403 0.359701 0.535073
-0.168338 -0.092545 0.082358 -0.764403 0.359701 0.535073
-0.168338 -0.092545 0.082358 -0.819005 0.385395 0.425090
-0.178610 -0.070717 0.082358 -0.819005 0.385395 0.425090
-0.170111 -0.067352 0.062932 -0.819005 0.385395 0.425090
-0.160328 -0.088141 0.062932 -0.819005 0.385395 0.425090
-0.160328 -0.088141 0.062932 -0.860704 0.405017 0.308465
-0.170111 -0.067352 0.062932 -0.860704 0.405017 0.308465
-0.163943 -0.064910 0.042515 -0.860704 0.405017 0.308465
-0.154515 -0.084945 0.042515 -0.860704 0.405017 0.308465
-0.154515 -0.084945 0.042515 -0.888862 0.418267 0.187024
-0.163943 -0.064910 0.042515 -0.888862 0.418267 0.187024
-0.160202 -0.063429 0.021426 -0.888862 0.418267 0.187024
-0.150989 -0.083007 0.021426 -0.888862 0.418267 0.187024
-0.150989 -0.083007 0.021426 -0.903048 0.424943 0.062668
-0.160202 -0.063429 0.021426 -0.903048 0.424943 0.062668
-0.158949 -0.062932 0.000000 -0.903048 0.424943 0.062668
-0.149808 -0.082358 0.000000 -0.903048 0.424943 0.062668
-0.149808 -0.082358 0.000000 -0.903048 0.424943 -0.062668
-0.158949 -0.062932 0.000000 -0.903048 0.424943 -0.062668
-0.160202 -0.063429 -0.021426 -0.903048 0.424943 -0.062668
-0.150989 -0.083007 -0.021426 -0.903048 0.424943 -0.062668
-0.150989 -0.083007 -0.021426 -0.888862 0.418267 -0.187024
-0.160202 -0.063429 -0.021426 -0.888862 0.418267 -0.187024
-0.163943 -0.064910 -0.042515 -0.888862 0.418267 -0.187024
-0.154515 -0.084945 -0.042515 -0.888862 0.418267 -0.187024
-0.154515 -0.084945 -0.042515 -0.860704 0.405017 -0.308465
-0.163943 -0.064910 -0.042515 -0.860704 0.405017 -0.308465
-0.170111 -0.067352 -0.062932 -0.860704 0.405017 -0.308465
-0.160328 -0.088141 -0.062932 -0.860704 0.405017 -0.308465
-0.160328 -0.088141 -0.062932 -0.819005 0.385395 -0.425090
-0.170111 -0.067352 -0.062932 -0.819005 0.385395 -0.425090
-0.178610 -0.070717 -0.082358 -0.819005 0.385395 -0.425090
-0.168338 -0.092545 -0.082358 -0.819005 0.385395 -0.425090
-0.168338 -0.092545 -0.082358 -0.764403 0.359701 -0.535073
-0.178610 -0.070717 -0.082358 -0.764403 0.359701 -0.535073
-0.189306 -0.074951 -0.100484 -0.764403 0.359701 -0.535073
-0.178419 -0.098087 -0.100484 -0.764403 0.359701 -0.535073
-0.178419 -0.098087 -0.100484 -0.697741 0.328332 -0.636675
-0.189306 -0.074951 -0.100484 -0.697741 0.328332 -0.636675
-0.202029 -0.079989 -0.117026 -0.697741 0.328332 -0.636675
-0.190411 -0.104679 -0.117026 -0.697741 0.328332 -0.636675
-0.190411 -0.104679 -0.117026 -0.620046 0.291772 -0.728293
-0.202029 -0.079989 -0.117026 -0.620046 0.291772 -0.728293
-0.216580 -0.085750 -0.131722 -0.620046 0.291772 -0.728293
-0.204125 -0.112219 -0.131722 -0.620046 0.291772 -0.728293
-0.204125 -0.112219 -0.131722 -0.532531 0.250591 -0.808464
-0.216580 -0.085750 -0.131722 -0.532531 0.250591 -0.808464
-0.232729 -0.092144 -0.144341 -0.532531 0.250591 -0.808464
-0.219345 -0.120586 -0.144341 -0.532531 0.250591 -0.808464
-0.219345 -0.120586 -0.144341 -0.436565 0.205432 -0.875904
-0.232729 -0.092144 -0.144341 -0.436565 0.205432 -0.875904
-0.250221 -0.099070 -0.154684 -0.436565 0.205432 -0.875904
-0.235831 -0.129649 -0.154684 -0.436565 0.205432 -0.875904
-0.235831 -0.129649 -0.154684 -0.333658 0.157008 -0.929527
-0.250221 -0.099070 -0.154684 -0.333658 0.157008 -0.929527
-0.268780 -0.106418 -0.162587 -0.333658 0.157008 -0.929527
-0.253323 -0.139266 -0.162587 -0.333658 0.157008 -0.929527
-0.253323 -0.139266 -0.162587 -0.225438 0.106083 -0.968465
-0.268780 -0.106418 -0.162587 -0.225438 0.106083 -0.968465
-0.288114 -0.114073 -0.167926 -0.225438 0.106083 -0.968465
-0.271545 -0.149283 -0.167926 -0.225438 0.106083 -0.968465
-0.271545 -0.149283 -0.167926 -0.113626 0.053468 -0.992084
-0.288114 -0.114073 -0.167926 -0.113626 0.053468 -0.992084
-0.307918 -0.121913 -0.170617 -0.113626 0.053468 -0.992084
-0.290210 -0.159544 -0.170617 -0.113626 0.053468 -0.992084
-0.307918 -0.121913 -0.170617 -0.000000 0.000000 -1.000000
-0.327879 -0.129817 -0.170617 -0.000000 0.000000 -1.000000
-0.309023 -0.169887 -0.170617 0.113626 -0.053469 -0.992084
-0.327879 -0.129817 -0.170617 0.113626 -0.053469 -0.992084
-0.347682 -0.137657 -0.167926 0.113626 -0.053469 -0.992084
-0.327688 -0.180148 -0.167926 0.113626 -0.053469 -0.992084
-0.327688 -0.180148 -0.167926 0.225438 -0.106084 -0.968465
-0.347682 -0.137657 -0.167926 0.225438 -0.106084 -0.968465
-0.367016 -0.145312 -0.162587 0.225438 -0.106084 -0.968465
-0.345910 -0.190166 -0.162587 0.225438 -0.106084 -0.968465
-0.345910 -0.190166 -0.162587 0.333658 -0.157008 -0.929527
-0.367016 -0.145312 -0.162587 0.333658 -0.157008 -0.929527
-0.385575 -0.152660 -0.154684 0.333658 -0.157008 -0.929527
-0.363402 -0.199782 -0.154684 0.333658 -0.157008 -0.929527
-0.363402 -0.199782 -0.154684 0.436566 -0.205432 -0.875904
-0.385575 -0.152660 -0.154684 0.436566 -0.205432 -0.875904
-0.403067 -0.159586 -0.144341 0.436566 -0.205432 -0.875904
-0.379888 -0.208845 -0.144341 0.436566 -0.205432 -0.875904
-0.379888 -0.208845 -0.144341 0.532531 -0.250591 -0.808465
-0.403067 -0.159586 -0.144341 0.532531 -0.250591 -0.808465
-0.419216 -0.165980 -0.131722 0.532531 -0.250591 -0.808465
-0.395108 -0.217213 -0.131722 0.532531 -0.250591 -0.808465
-0.395108 -0.217213 -0.131722 0.620046 -0.291773 -0.728294
-0.419216 -0.165980 -0.131722 0.620046 -0.291773 -0.728294
-0.433767 -0.171741 -0.117026 0.620046 -0.291773 -0.728294
-0.408822 -0.224752 -0.117026 0.620046 -0.291773 -0.728294
-0.408822 -0.224752 -0.117026 0.697740 -0.328333 -0.636676
-0.433767 -0.171741 -0.117026 0.697740 -0.328333 -0.636676
-0.446491 -0.176778 -0.100484 0.697740 -0.328333 -0.636676
-0.420814 -0.231345 -0.100484 0.697740 -0.328333 -0.636676
-0.420814 -0.231345 -0.100484 0.764403 -0.359701 -0.535074
-0.446491 -0.176778 -0.100484 0.764403 -0.359701 -0.535074
-0.457186 -0.181013 -0.082358 0.764403 -0.359701 -0.535074
-0.430894 -0.236886 -0.082358 0.764403 -0.359701 -0.535074
-0.430894 -0.236886 -0.082358 0.819005 -0.385395 -0.425091
-0.457186 -0.181013 -0.082358 0.819005 -0.385395 -0.425091
-0.465685 -0.184378 -0.062932 0.819005 -0.385395 -0.425091
-0.438905 -0.241290 -0.062932 0.819005 -0.385395 -0.425091
-0.438905 -0.241290 -0.062932 0.860704 -0.405017 -0.308464
-0.465685 -0.184378 -0.062932 0.860704 -0.405017 -0.308464
-0.471854 -0.186820 -0.042515 0.860704 -0.405017 -0.308464
-0.444718 -0.244486 -0.042515 0.860704 -0.405017 -0.308464
-0.444718 -0.244486 -0.042515 0.888861 -0.418267 -0.187026
-0.471854 -0.186820 -0.042515 0.888861 -0.418267 -0.187026
-0.475594 -0.188301 -0.021426 0.888861 -0.418267 -0.187026
-0.448243 -0.246424 -0.021426 0.888861 -0.418267 -0.187026
-0.448243 -0.246424 -0.021426 0.903048 -0.424943 -0.062668
-0.475594 -0.188301 -0.021426 0.903048 -0.424943 -0.062668
-0.476847 -0.188797 0.000000 0.903048 -0.424943 -0.062668
-0.449425 -0.247074 0.000000 0.903048 -0.424943 -0.062668
-0.476847 -0.188797 0.000000 0.949187 -0.308410 0.062668
-0.496750 -0.127544 0.000000 0.949187 -0.308410 0.062668
-0.495444 -0.127209 0.021426 0.949187 -0.308410 0.062668
-0.475594 -0.188301 0.021426 0.949187 -0.308410 0.062668
-0.475594 -0.188301 0.021426 0.934275 -0.303565 0.187025
-0.495444 -0.127209 0.021426 0.934275 -0.303565 0.187025
-0.491548 -0.126208 0.042515 0.934275 -0.303565 0.187025
-0.471854 -0.186820 0.042515 0.934275 -0.303565 0.187025
-0.471854 -0.186820 0.042515 0.904679 -0.293948 0.308466
-0.491548 -0.126208 0.042515 0.904679 -0.293948 0.308466
-0.485122 -0.124558 0.062932 0.904679 -0.293948 0.308466
-0.465685 -0.184378 0.062932 0.904679 -0.293948 0.308466
-0.465685 -0.184378 0.062932 0.860849 -0.279707 0.425091
-0.485122 -0.124558 0.062932 0.860849 -0.279707 0.425091
-0.476268 -0.122285 0.082358 0.860849 -0.279707 0.425091
-0.457186 -0.181013 0.082358 0.860849 -0.279707 0.425091
-0.457186 -0.181013 0.082358 0.803459 -0.261060 0.535072
-0.476268 -0.122285 0.082358 0.803459 -0.261060 0.535072
-0.465126 -0.119424 0.100484 0.803459 -0.261060 0.535072
-0.446491 -0.176778 0.100484 0.803459 -0.261060 0.535072
-0.446491 -0.176778 0.100484 0.733389 -0.238292 0.636677
-0.465126 -0.119424 0.100484 0.733389 -0.238292 0.636677
-0.451871 -0.116021 0.117026 0.733389 -0.238292 0.636677
-0.433767 -0.171741 0.117026 0.733389 -0.238292 0.636677
-0.433767 -0.171741 0.117026 0.651727 -0.211759 0.728293
-0.451871 -0.116021 0.117026 0.651727 -0.211759 0.728293
-0.436713 -0.112129 0.131722 0.651727 -0.211759 0.728293
-0.419216 -0.165980 0.131722 0.651727 -0.211759 0.728293
-0.419216 -0.165980 0.131722 0.559739 -0.181870 0.808465
-0.436713 -0.112129 0.131722 0.559739 -0.181870 0.808465
-0.419890 -0.107810 0.144341 0.559739 -0.181870 0.808465
-0.403067 -0.159586 0.144341 0.559739 -0.181870 0.808465
-0.403067 -0.159586 0.144341 0.458871 -0.149096 0.875904
-0.419890 -0.107810 0.144341 0.458871 -0.149096 0.875904
-0.401668 -0.103131 0.154684 0.458871 -0.149096 0.875904
-0.385575 -0.152660 0.154684 0.458871 -0.149096 0.875904
-0.385575 -0.152660 0.154684 0.350706 -0.113951 0.929527
-0.401668 -0.103131 0.154684 0.350706 -0.113951 0.929527
-0.382335 -0.098167 0.162587 0.350706 -0.113951 0.929527
-0.367016 -0.145312 0.162587 0.350706 -0.113951 0.929527
-0.367016 -0.145312 0.162587 0.236956 -0.076992 0.968465
-0.382335 -0.098167 0.162587 0.236956 -0.076992 0.968465
-0.362194 -0.092996 0.167926 0.236956 -0.076992 0.968465
-0.347682 -0.137657 0.167926 0.236956 -0.076992 0.968465
-0.347682 -0.137657 0.167926 0.119431 -0.038805 0.992084
-0.362194 -0.092996 0.167926 0.119431 -0.038805 0.992084
-0.341564 -0.087699 0.170617 0.119431 -0.038805 0.992084
-0.327879 -0.129817 0.170617 0.119431 -0.038805 0.992084
-0.341564 -0.087699 0.170617 0.000000 0.000000 1.000000
-0.320769 -0.082360 0.170617 0.000000 0.000000 1.000000
-0.307918 -0.121913 0.170617 -0.119431 0.038806 0.992084
-0.320769 -0.082360 0.170617 -0.119431 0.038806 0.992084
-0.300139 -0.077063 0.167926 -0.119431 0.038806 0.992084
-0.288114 -0.114073 0.167926 -0.119431 0.038806 0.992084
-0.288114 -0.114073 0.167926 -0.236956 0.076992 0.968465
-0.300139 -0.077063 0.167926 -0.236956 0.076992 0.968465
-0.279999 -0.071891 0.162587 -0.236956 0.076992 0.968465
-0.268780 -0.106418 0.162587 -0.236956 0.076992 0.968465
-0.268780 -0.106418 0.162587 -0.350705 0.113951 0.929527
-0.279999 -0.071891 0.162587 -0.350705 0.113951 0.929527
-0.260665 -0.066927 0.154684 -0.350705 0.113951 0.929527
-0.250221 -0.099070 0.154684 -0.350705 0.113951 0.929527
-0.250221 -0.099070 0.154684 -0.458870 0.149096 0.875905
-0.260665 -0.066927 0.154684 -0.458870 0.149096 0.875905
-0.242443 -0.062249 0.144341 -0.458870 0.149096 0.875905
-0.232729 -0.092144 0.144341 -0.458870 0.149096 0.875905
-0.232729 -0.092144 0.144341 -0.559739 0.181870 0.808465
-0.242443 -0.062249 0.144341 -0.559739 0.181870 0.808465
-0.225620 -0.057929 0.131722 -0.559739 0.181870 0.808465
-0.216580 -0.085750 0.131722 -0.559739 0.181870 0.808465
-0.216580 -0.085750 0.131722 -0.651726 0.211758 0.728294
-0.225620 -0.057929 0.131722 -0.651726 0.211758 0.728294
-0.210461 -0.054037 0.117026 -0.651726 0.211758 0.728294
-0.202029 -0.079989 0.117026 -0.651726 0.211758 0.728294
-0.202029 -0.079989 0.117026 -0.733390 0.238293 0.636676
-0.210461 -0.054037 0.117026 -0.733390 0.238293 0.636676
-0.197207 -0.050634 0.100484 -0.733390 0.238293 0.636676
-0.189306 -0.074951 0.100484 -0.733390 0.238293 0.636676
-0.189306 -0.074951 0.100484 -0.803458 0.261059 0.535073
-0.197207 -0.050634 0.100484 -0.803458 0.261059 0.535073
-0.186065 -0.047773 0.082358 -0.803458 0.261059 0.535073
-0.178610 -0.070717 0.082358 -0.803458 0.261059 0.535073
-0.178610 -0.070717 0.082358 -0.860849 0.279707 0.425091
-0.186065 -0.047773 0.082358 -0.860849 0.279707 0.425091
-0.177211 -0.045500 0.062932 -0.860849 0.279707 0.425091
-0.170111 -0.067352 0.062932 -0.860849 0.279707 0.425091
-0.170111 -0.067352 0.062932 -0.904679 0.293948 0.308465
-0.177211 -0.045500 0.062932 -0.904679 0.293948 0.308465
-0.170785 -0.043850 0.042515 -0.904679 0.293948 0.308465
-0.163943 -0.064910 0.042515 -0.904679 0.293948 0.308465
-0.163943 -0.064910 0.042515 -0.934275 0.303565 0.187024
-0.170785 -0.043850 0.042515 -0.934275 0.303565 0.187024
-0.166889 -0.042850 0.021426 -0.934275 0.303565 0.187024
-0.160202 -0.063429 0.021426 -0.934275 0.303565 0.187024
-0.160202 -0.063429 0.021426 -0.949187 0.308410 0.062667
-0.166889 -0.042850 0.021426 -0.949187 0.308410 0.062667
-0.165583 -0.042515 0.000000 -0.949187 0.308410 0.062667
-0.158949 -0.062932 0.000000 -0.949187 0.308410 0.062667
-0.158949 -0.062932 0.000000 -0.949187 0.308410 -0.062667
-0.165583 -0.042515 0.000000 -0.949187 0.308410 -0.062667
-0.166889 -0.042850 -0.021426 -0.949187 0.308410 -0.062667
-0.160202 -0.063429 -0.021426 -0.949187 0.308410 -0.062667
-0.160202 -0.063429 -0.021426 -0.934275 0.303565 -0.187024
-0.166889 -0.042850 -0.021426 -0.934275 0.303565 -0.187024
-0.170785 -0.043850 -0.042515 -0.934275 0.303565 -0.187024
-0.163943 -0.064910 -0.042515 -0.934275 0.303565 -0.187024
-0.163943 -0.064910 -0.042515 -0.904679 0.293948 -0.308465
-0.170785 -0.043850 -0.042515 -0.904679 0.293948 -0.308465
-0.177211 -0.045500 -0.062932 -0.904679 0.293948 -0.308465
-0.170111 -0.067352 -0.062932 -0.904679 0.293948 -0.308465
-0.170111 -0.067352 -0.062932 -0.860849 0.279707 -0.425091
-0.177211 -0.045500 -0.062932 -0.860849 0.279707 -0.425091
-0.186065 -0.047773 -0.082358 -0.860849 0.279707 -0.425091
-0.178610 -0.070717 -0.082358 -0.860849 0.279707 -0.425091
-0.178610 -0.070717 -0.082358 -0.803458 0.261059 -0.535073
-0.186065 -0.047773 -0.082358 -0.803458 0.261059 -0.535073
-0.197207 -0.050634 -0.100484 -0.803458 0.261059 -0.535073
-0.189306 -0.074951 -0.100484 -0.803458 0.261059 -0.535073
-0.189306 -0.074951 -0.100484 -0.733390 0.238293 -0.636676
-0.197207 -0.050634 -0.100484 -0.733390 0.238293 -0.636676
-0.210461 -0.054037 -0.117026 -0.733390 0.238293 -0.636676
-0.202029 -0.079989 -0.117026 -0.733390 0.238293 -0.636676
-0.202029 -0.079989 -0.117026 -0.651726 0.211758 -0.728294
-0.210461 -0.054037 -0.117026 -0.651726 0.211758 -0.728294
-0.225620 -0.057929 -0.131722 -0.651726 0.211758 -0.728294
-0.216580 -0.085750 -0.131722 -0.651726 0.211758 -0.728294
-0.216580 -0.085750 -0.131722 -0.559739 0.181870 -0.808465
-0.225620 -0.057929 -0.131722 -0.559739 0.181870 -0.808465
-0.242443 -0.062249 -0.144341 -0.559739 0.181870 -0.808465
-0.232729 -0.092144 -0.144341 -0.559739 0.181870 -0.808465
-0.232729 -0.092144 -0.144341 -0.458870 0.149096 -0.875905
-0.242443 -0.062249 -0.144341 -0.458870 0.149096 -0.875905
-0.260665 -0.066927 -0.154684 -0.458870 0.149096 -0.875905
-0.250221 -0.099070 -0.154684 -0.458870 0.149096 -0.875905
-0.250221 -0.099070 -0.154684 -0.350705 0.113951 -0.929527
-0.260665 -0.066927 -0.154684 -0.350705 0.113951 -0.929527
-0.279999 -0.071891 -0.162587 -0.350705 0.113951 -0.929527
-0.268780 -0.106418 -0.162587 -0.350705 0.113951 -0.929527
-0.268780 -0.106418 -0.162587 -0.236956 0.076992 -0.968465
-0.279999 -0.071891 -0.162587 -0.236956 0.076992 -0.968465
-0.300139 -0.077063 -0.167926 -0.236956 0.076992 -0.968465
-0.288114 -0.114073 -0.167926 -0.236956 0.076992 -0.968465
-0.288114 -0.114073 -0.167926 -0.119431 0.038806 -0.992084
-0.300139 -0.077063 -0.167926 -0.119431 0.038806 -0.992084
-0.320769 -0.082360 -0.170617 -0.119431 0.038806 -0.992084
-0.307918 -0.121913 -0.170617 -0.119431 0.038806 -0.992084
-0.320769 -0.082360 -0.170617 0.000000 0.000000 -1.000000
-0.341564 -0.087699 -0.170617 0.000000 0.000000 -1.000000
-0.327879 -0.129817 -0.170617 0.119431 -0.038805 -0.992084
-0.341564 -0.087699 -0.170617 0.119431 -0.038805 -0.992084
-0.362194 -0.092996 -0.167926 0.119431 -0.038805 -0.992084
-0.347682 -0.137657 -0.167926 0.119431 -0.038805 -0.992084
-0.347682 -0.137657 -0.167926 0.236956 -0.076992 -0.968465
-0.362194 -0.092996 -0.167926 0.236956 -0.076992 -0.968465
-0.382335 -0.098167 -0.162587 0.236956 -0.076992 -0.968465
-0.367016 -0.145312 -0.162587 0.236956 -0.076992 -0.968465
-0.367016 -0.145312 -0.162587 0.350706 -0.113951 -0.929527
-0.382335 -0.098167 -0.162587 0.350706 -0.113951 -0.929527
-0.401668 -0.103131 -0.154684 0.350706 -0.113951 -0.929527
-0.385575 -0.152660 -0.154684 0.350706 -0.113951 -0.929527
-0.385575 -0.152660 -0.154684 0.458871 -0.149096 -0.875904
-0.401668 -0.103131 -0.154684 0.458871 -0.149096 -0.875904
-0.419890 -0.107810 -0.144341 0.458871 -0.149096 -0.875904
-0.403067 -0.159586 -0.144341 0.458871 -0.149096 -0.875904
-0.403067 -0.159586 -0.144341 0.559739 -0.181870 -0.808465
-0.419890 -0.107810 -0.144341 0.559739 -0.181870 -0.808465
-0.436713 -0.112129 -0.131722 0.559739 -0.181870 -0.808465
-0.419216 -0.165980 -0.131722 0.559739 -0.181870 -0.808465
-0.419216 -0.165980 -0.131722 0.651727 -0.211759 -0.728293
-0.436713 -0.112129 -0.131722 0.651727 -0.211759 -0.728293
-0.451871 -0.116021 -0.117026 0.651727 -0.211759 -0.728293
-0.433767 -0.171741 -0.117026 0.651727 -0.211759 -0.728293
-0.433767 -0.171741 -0.117026 0.733389 -0.238292 -0.636677
-0.451871 -0.116021 -0.117026 0.733389 -0.238292 -0.636677
-0.465126 -0.119424 -0.100484 0.733389 -0.238292 -0.636677
-0.446491 -0.176778 -0.100484 0.733389 -0.238292 -0.636677
-0.446491 -0.176778 -0.100484 0.803459 -0.261060 -0.535072
-0.465126 -0.119424 -0.100484 0.803459 -0.261060 -0.535072
-0.476268 -0.122285 -0.082358 0.803459 -0.261060 -0.535072
-0.457186 -0.181013 -0.082358 0.803459 -0.261060 -0.535072
-0.457186 -0.181013 -0.082358 0.860849 -0.279707 -0.425091
-0.476268 -0.122285 -0.082358 0.860849 -0.279707 -0.425091
-0.485122 -0.124558 -0.062932 0.860849 -0.279707 -0.425091
-0.465685 -0.184378 -0.062932 0.860849 -0.279707 -0.425091
-0.465685 -0.184378 -0.062932 0.904679 -0.293948 -0.308466
-0.485122 -0.124558 -0.062932 0.904679 -0.293948 -0.308466
-0.491548 -0.126208 -0.042515 0.904679 -0.293948 -0.308466
-0.471854 -0.186820 -0.042515 0.904679 -0.293948 -0.308466
-0.471854 -0.186820 -0.042515 0.934275 -0.303565 -0.187025
-0.491548 -0.126208 -0.042515 0.934275 -0.303565 -0.187025
-0.495444 -0.127209 -0.021426 0.934275 -0.303565 -0.187025
-0.475594 -0.188301 -0.021426 0.934275 -0.303565 -0.187025
-0.475594 -0.188301 -0.021426 0.949187 -0.308410 -0.062668
-0.495444 -0.127209 -0.021426 0.949187 -0.308410 -0.062668
-0.496750 -0.127544 0.000000 0.949187 -0.308410 -0.062668
-0.476847 -0.188797 0.000000 0.949187 -0.308410 -0.062668
-0.496750 -0.127544 0.000000 0.980357 -0.187013 0.062667
-0.508818 -0.064279 0.000000 0.980357 -0.187013 0.062667
-0.507481 -0.064110 0.021426 0.980357 -0.187013 0.062667
-0.495444 -0.127209 0.021426 0.980357 -0.187013 0.062667
-0.495444 -0.127209 0.021426 0.964955 -0.184075 0.187025
-0.507481 -0.064110 0.021426 0.964955 -0.184075 0.187025
-0.503490 -0.063606 0.042515 0.964955 -0.184075 0.187025
-0.491548 -0.126208 0.042515 0.964955 -0.184075 0.187025
-0.491548 -0.126208 0.042515 0.934386 -0.178244 0.308465
-0.503490 -0.063606 0.042515 0.934386 -0.178244 0.308465
-0.496908 -0.062774 0.062932 0.934386 -0.178244 0.308465
-0.485122 -0.124558 0.062932 0.934386 -0.178244 0.308465
-0.485122 -0.124558 0.062932 0.889118 -0.169609 0.425091
-0.496908 -0.062774 0.062932 0.889118 -0.169609 0.425091
-0.487839 -0.061629 0.082358 0.889118 -0.169609 0.425091
-0.476268 -0.122285 0.082358 0.889118 -0.169609 0.425091
-0.476268 -0.122285 0.082358 0.829842 -0.158301 0.535072
-0.487839 -0.061629 0.082358 0.829842 -0.158301 0.535072
-0.476426 -0.060187 0.100484 0.829842 -0.158301 0.535072
-0.465126 -0.119424 0.100484 0.829842 -0.158301 0.535072
-0.465126 -0.119424 0.100484 0.757472 -0.144496 0.636677
-0.476426 -0.060187 0.100484 0.757472 -0.144496 0.636677
-0.462850 -0.058472 0.117026 0.757472 -0.144496 0.636677
-0.451871 -0.116021 0.117026 0.757472 -0.144496 0.636677
-0.451871 -0.116021 0.117026 0.673128 -0.128407 0.728293
-0.462850 -0.058472 0.117026 0.673128 -0.128407 0.728293
-0.447323 -0.056510 0.131722 0.673128 -0.128407 0.728293
-0.436713 -0.112129 0.131722 0.673128 -0.128407 0.728293
-0.436713 -0.112129 0.131722 0.578120 -0.110283 0.808465
-0.447323 -0.056510 0.131722 0.578120 -0.110283 0.808465
-0.430092 -0.054333 0.144341 0.578120 -0.110283 0.808465
-0.419890 -0.107810 0.144341 0.578120 -0.110283 0.808465
-0.419890 -0.107810 0.144341 0.473940 -0.090410 0.875904
-0.430092 -0.054333 0.144341 0.473940 -0.090410 0.875904
-0.411427 -0.051975 0.154684 0.473940 -0.090410 0.875904
-0.401668 -0.103131 0.154684 0.473940 -0.090410 0.875904
-0.401668 -0.103131 0.154684 0.362221 -0.069098 0.929528
-0.411427 -0.051975 0.154684 0.362221 -0.069098 0.929528
-0.391623 -0.049474 0.162587 0.362221 -0.069098 0.929528
-0.382335 -0.098167 0.162587 0.362221 -0.069098 0.929528
-0.382335 -0.098167 0.162587 0.244738 -0.046686 0.968465
-0.391623 -0.049474 0.162587 0.244738 -0.046686 0.968465
-0.370993 -0.046867 0.167926 0.244738 -0.046686 0.968465
-0.362194 -0.092996 0.167926 0.244738 -0.046686 0.968465
-0.362194 -0.092996 0.167926 0.123353 -0.023531 0.992084
-0.370993 -0.046867 0.167926 0.123353 -0.023531 0.992084
-0.349862 -0.044198 0.170617 0.123353 -0.023531 0.992084
-0.341564 -0.087699 0.170617 0.123353 -0.023531 0.992084
-0.349862 -0.044198 0.170617 -0.000000 -0.000000 1.000000
-0.328563 -0.041507 0.170617 -0.000000 -0.000000 1.000000
-0.320769 -0.082360 0.170617 -0.123353 0.023531 0.992084
-0.328563 -0.041507 0.170617 -0.123353 0.023531 0.992084
-0.307431 -0.038838 0.167926 -0.123353 0.023531 0.992084
-0.300139 -0.077063 0.167926 -0.123353 0.023531 0.992084
-0.300139 -0.077063 0.167926 -0.244738 0.046686 0.968465
-0.307431 -0.038838 0.167926 -0.244738 0.046686 0.968465
-0.286801 -0.036231 0.162587 -0.244738 0.046686 0.968465
-0.279999 -0.071891 0.162587 -0.244738 0.046686 0.968465
-0.279999 -0.071891 0.162587 -0.362221 0.069097 0.929528
-0.286801 -0.036231 0.162587 -0.362221 0.069097 0.929528
-0.266997 -0.033730 0.154684 -0.362221 0.069097 0.929528
-0.260665 -0.066927 0.154684 -0.362221 0.069097 0.929528
-0.260665 -0.066927 0.154684 -0.473939 0.090409 0.875904
-0.266997 -0.033730 0.154684 -0.473939 0.090409 0.875904
-0.248333 -0.031372 0.144341 -0.473939 0.090409 0.875904
-0.242443 -0.062249 0.144341 -0.473939 0.090409 0.875904
-0.242443 -0.062249 0.144341 -0.578120 0.110283 0.808464
-0.248333 -0.031372 0.144341 -0.578120 0.110283 0.808464
-0.231101 -0.029195 0.131722 -0.578120 0.110283 0.808464
-0.225620 -0.057929 0.131722 -0.578120 0.110283 0.808464
-0.225620 -0.057929 0.131722 -0.673127 0.128407 0.728293
-0.231101 -0.029195 0.131722 -0.673127 0.128407 0.728293
-0.215575 -0.027233 0.117026 -0.673127 0.128407 0.728293
-0.210461 -0.054037 0.117026 -0.673127 0.128407 0.728293
-0.210461 -0.054037 0.117026 -0.757472 0.144497 0.636676
-0.215575 -0.027233 0.117026 -0.757472 0.144497 0.636676
-0.201998 -0.025518 0.100484 -0.757472 0.144497 0.636676
-0.197207 -0.050634 0.100484 -0.757472 0.144497 0.636676
-0.197207 -0.050634 0.100484 -0.829842 0.158302 0.535072
-0.201998 -0.025518 0.100484 -0.829842 0.158302 0.535072
-0.190585 -0.024077 0.082358 -0.829842 0.158302 0.535072
-0.186065 -0.047773 0.082358 -0.829842 0.158302 0.535072
-0.186065 -0.047773 0.082358 -0.889118 0.169610 0.425091
-0.190585 -0.024077 0.082358 -0.889118 0.169610 0.425091
-0.181516 -0.022931 0.062932 -0.889118 0.169610 0.425091
-0.177211 -0.045500 0.062932 -0.889118 0.169610 0.425091
-0.177211 -0.045500 0.062932 -0.934386 0.178245 0.308465
-0.181516 -0.022931 0.062932 -0.934386 0.178245 0.308465
-0.174935 -0.022099 0.042515 -0.934386 0.178245 0.308465
-0.170785 -0.043850 0.042515 -0.934386 0.178245 0.308465
-0.170785 -0.043850 0.042515 -0.964955 0.184075 0.187025
-0.174935 -0.022099 0.042515 -0.964955 0.184075 0.187025
-0.170943 -0.021595 0.021426 -0.964955 0.184075 0.187025
-0.166889 -0.042850 0.021426 -0.964955 0.184075 0.187025
-0.166889 -0.042850 0.021426 -0.980357 0.187013 0.062667
-0.170943 -0.021595 0.021426 -0.980357 0.187013 0.062667
-0.169606 -0.021426 0.000000 -0.980357 0.187013 0.062667
-0.165583 -0.042515 0.000000 -0.980357 0.187013 0.062667
-0.165583 -0.042515 0.000000 -0.980357 0.187013 -0.062667
-0.169606 -0.021426 0.000000 -0.980357 0.187013 -0.062667
-0.170943 -0.021595 -0.021426 -0.980357 0.187013 -0.062667
-0.166889 -0.042850 -0.021426 -0.980357 0.187013 -0.062667
-0.166889 -0.042850 -0.021426 -0.964955 0.184075 -0.187025
-0.170943 -0.021595 -0.021426 -0.964955 0.184075 -0.187025
-0.174935 -0.022099 -0.042515 -0.964955 0.184075 -0.187025
-0.170785 -0.043850 -0.042515 -0.964955 0.184075 -0.187025
-0.170785 -0.043850 -0.042515 -0.934386 0.178245 -0.308465
-0.174935 -0.022099 -0.042515 -0.934386 0.178245 -0.308465
-0.181516 -0.022931 -0.062932 -0.934386 0.178245 -0.308465
-0.177211 -0.045500 -0.062932 -0.934386 0.178245 -0.308465
-0.177211 -0.045500 -0.062932 -0.889118 0.169610 -0.425091
-0.181516 -0.022931 -0.062932 -0.889118 0.169610 -0.425091
-0.190585 -0.024077 -0.082358 -0.889118 0.169610 -0.425091
-0.186065 -0.047773 -0.082358 -0.889118 0.169610 -0.425091
-0.186065 -0.047773 -0.082358 -0.829842 0.158302 -0.535072
-0.190585 -0.024077 -0.082358 -0.829842 0.158302 -0.535072
-0.201998 -0.025518 -0.100484 -0.829842 0.158302 -0.535072
-0.197207 -0.050634 -0.100484 -0.829842 0.158302 -0.535072
-0.197207 -0.050634 -0.100484 -0.757472 0.144497 -0.636676
-0.201998 -0.025518 -0.100484 -0.757472 0.144497 -0.636676
-0.215575 -0.027233 -0.117026 -0.757472 0.144497 -0.636676
-0.210461 -0.054037 -0.117026 -0.757472 0.144497 -0.636676
-0.210461 -0.054037 -0.117026 -0.673127 0.128407 -0.728293
-0.215575 -0.027233 -0.117026 -0.673127 0.128407 -0.728293
-0.231101 -0.029195 -0.131722 -0.673127 0.128407 -0.728293
-0.225620 -0.057929 -0.131722 -0.673127 0.128407 -0.728293
-0.225620 -0.057929 -0.131722 -0.578120 0.110283 -0.808464
-0.231101 -0.029195 -0.131722 -0.578120 0.110283 -0.808464
-0.248333 -0.031372 -0.144341 -0.578120 0.110283 -0.808464
-0.242443 -0.062249 -0.144341 -0.578120 0.110283 -0.808464
-0.242443 -0.062249 -0.144341 -0.473939 0.090409 -0.875904
-0.248333 -0.031372 -0.144341 -0.473939 0.090409 -0.875904
-0.266997 -0.033730 -0.154684 -0.473939 0.090409 -0.875904
-0.260665 -0.066927 -0.154684 -0.473939 0.090409 -0.875904
-0.260665 -0.066927 -0.154684 -0.362221 0.069097 -0.929528
-0.266997 -0.033730 -0.154684 -0.362221 0.069097 -0.929528
-0.286801 -0.036231 -0.162587 -0.362221 0.069097 -0.929528
-0.279999 -0.071891 -0.162587 -0.362221 0.069097 -0.929528
-0.279999 -0.071891 -0.162587 -0.244738 0.046686 -0.968465
-0.286801 -0.036231 -0.162587 -0.244738 0.046686 -0.968465
-0.307431 -0.038838 -0.167926 -0.244738 0.046686 -0.968465
-0.300139 -0.077063 -0.167926 -0.244738 0.046686 -0.968465
-0.300139 -0.077063 -0.167926 -0.123353 0.023531 -0.992084
-0.307431 -0.038838 -0.167926 -0.123353 0.023531 -0.992084
-0.328563 -0.041507 -0.170617 -0.123353 0.023531 -0.992084
-0.320769 -0.082360 -0.170617 -0.123353 0.023531 -0.992084
-0.328563 -0.041507 -0.170617 -0.000000 -0.000000 -1.000000
-0.349862 -0.044198 -0.170617 -0.000000 -0.000000 -1.000000
-0.341564 -0.087699 -0.170617 0.123353 -0.023531 -0.992084
-0.349862 -0.044198 -0.170617 0.123353 -0.023531 -0.992084
-0.370993 -0.046867 -0.167926 0.123353 -0.023531 -0.992084
-0.362194 -0.092996 -0.167926 0.123353 -0.023531 -0.992084
-0.362194 -0.092996 -0.167926 0.244738 -0.046686 -0.968465
-0.370993 -0.046867 -0.167926 0.244738 -0.046686 -0.968465
-0.391623 -0.049474 -0.162587 0.244738 -0.046686 -0.968465
-0.382335 -0.098167 -0.162587 0.244738 -0.046686 -0.968465
-0.382335 -0.098167 -0.162587 0.362221 -0.069098 -0.929528
-0.391623 -0.049474 -0.162587 0.362221 -0.069098 -0.929528
-0.411427 -0.051975 -0.154684 0.362221 -0.069098 -0.929528
-0.401668 -0.103131 -0.154684 0.362221 -0.069098 -0.929528
-0.401668 -0.103131 -0.154684 0.473940 -0.090410 -0.875904
-0.411427 -0.051975 -0.154684 0.473940 -0.090410 -0.875904
-0.430092 -0.054333 -0.144341 0.473940 -0.090410 -0.875904
-0.419890 -0.107810 -0.144341 0.473940 -0.090410 -0.875904
-0.419890 -0.107810 -0.144341 0.578120 -0.110283 -0.808465
-0.430092 -0.054333 -0.144341 0.578120 -0.110283 -0.808465
-0.447323 -0.056510 -0.131722 0.578120 -0.110283 -0.808465
-0.436713 -0.112129 -0.131722 0.578120 -0.110283 -0.808465
-0.436713 -0.112129 -0.131722 0.673128 -0.128407 -0.728293
-0.447323 -0.056510 -0.131722 0.673128 -0.128407 -0.728293
-0.462850 -0.058472 -0.117026 0.673128 -0.128407 -0.728293
-0.451871 -0.116021 -0.117026 0.673128 -0.128407 -0.728293
-0.451871 -0.116021 -0.117026 0.757472 -0.144496 -0.636677
-0.462850 -0.058472 -0.117026 0.757472 -0.144496 -0.636677
-0.476426 -0.060187 -0.100484 0.757472 -0.144496 -0.636677
-0.465126 -0.119424 -0.100484 0.757472 -0.144496 -0.636677
-0.465126 -0.119424 -0.100484 0.829842 -0.158301 -0.535072
-0.476426 -0.060187 -0.100484 0.829842 -0.158301 -0.535072
-0.487839 -0.061629 -0.082358 0.829842 -0.158301 -0.535072
-0.476268 -0.122285 -0.082358 0.829842 -0.158301 -0.535072
-0.476268 -0.122285 -0.082358 0.889118 -0.169609 -0.425091
-0.487839 -0.061629 -0.082358 0.889118 -0.169609 -0.425091
-0.496908 -0.062774 -0.062932 0.889118 -0.169609 -0.425091
-0.485122 -0.124558 -0.062932 0.889118 -0.169609 -0.425091
-0.485122 -0.124558 -0.062932 0.934386 -0.178244 -0.308465
-0.496908 -0.062774 -0.062932 0.934386 -0.178244 -0.308465
-0.503490 -0.063606 -0.042515 0.934386 -0.178244 -0.308465
-0.491548 -0.126208 -0.042515 0.934386 -0.178244 -0.308465
-0.491548 -0.126208 -0.042515 0.964955 -0.184075 -0.187025
-0.503490 -0.063606 -0.042515 0.964955 -0.184075 -0.187025
-0.507481 -0.064110 -0.021426 0.964955 -0.184075 -0.187025
-0.495444 -0.127209 -0.021426 0.964955 -0.184075 -0.187025
-0.495444 -0.127209 -0.021426 0.980357 -0.187013 -0.062667
-0.507481 -0.064110 -0.021426 0.980357 -0.187013 -0.062667
-0.508818 -0.064279 0.000000 0.980357 -0.187013 -0.062667
-0.496750 -0.127544 0.000000 0.980357 -0.187013 -0.062667
-0.508818 -0.064279 0.000000 0.996065 -0.062667 0.062666
-0.512862 0.000000 0.000000 0.996065 -0.062667 0.062666
-0.511514 0.000000 0.021426 0.996065 -0.062667 0.062666
-0.507481 -0.064110 0.021426 0.996065 -0.062667 0.062666
-0.507481 -0.064110 0.021426 0.980417 -0.061683 0.187026
-0.511514 0.000000 0.021426 0.980417 -0.061683 0.187026
-0.507491 0.000000 0.042515 0.980417 -0.061683 0.187026
-0.503490 -0.063606 0.042515 0.980417 -0.061683 0.187026
-0.503490 -0.063606 0.042515 0.949359 -0.059728 0.308465
-0.507491 0.000000 0.042515 0.949359 -0.059728 0.308465
-0.500857 0.000000 0.062932 0.949359 -0.059728 0.308465
-0.496908 -0.062774 0.062932 0.949359 -0.059728 0.308465
-0.496908 -0.062774 0.062932 0.903365 -0.056835 0.425091
-0.500857 0.000000 0.062932 0.903365 -0.056835 0.425091
-0.491716 0.000000 0.082358 0.903365 -0.056835 0.425091
-0.487839 -0.061629 0.082358 0.903365 -0.056835 0.425091
-0.487839 -0.061629 0.082358 0.843139 -0.053046 0.535073
-0.491716 0.000000 0.082358 0.843139 -0.053046 0.535073
-0.480213 0.000000 0.100484 0.843139 -0.053046 0.535073
-0.476426 -0.060187 0.100484 0.843139 -0.053046 0.535073
-0.476426 -0.060187 0.100484 0.769610 -0.048420 0.636676
-0.480213 0.000000 0.100484 0.769610 -0.048420 0.636676
-0.466528 0.000000 0.117026 0.769610 -0.048420 0.636676
-0.462850 -0.058472 0.117026 0.769610 -0.048420 0.636676
-0.462850 -0.058472 0.117026 0.683913 -0.043028 0.728293
-0.466528 0.000000 0.117026 0.683913 -0.043028 0.728293
-0.450878 0.000000 0.131722 0.683913 -0.043028 0.728293
-0.447323 -0.056510 0.131722 0.683913 -0.043028 0.728293
-0.447323 -0.056510 0.131722 0.587384 -0.036955 0.808464
-0.450878 0.000000 0.131722 0.587384 -0.036955 0.808464
-0.433510 0.000000 0.144341 0.587384 -0.036955 0.808464
-0.430092 -0.054333 0.144341 0.587384 -0.036955 0.808464
-0.430092 -0.054333 0.144341 0.481533 -0.030295 0.875904
-0.433510 0.000000 0.144341 0.481533 -0.030295 0.875904
-0.414697 0.000000 0.154684 0.481533 -0.030295 0.875904
-0.411427 -0.051975 0.154684 0.481533 -0.030295 0.875904
-0.411427 -0.051975 0.154684 0.368025 -0.023154 0.929528
-0.414697 0.000000 0.154684 0.368025 -0.023154 0.929528
-0.394736 0.000000 0.162587 0.368025 -0.023154 0.929528
-0.391623 -0.049474 0.162587 0.368025 -0.023154 0.929528
-0.391623 -0.049474 0.162587 0.248660 -0.015644 0.968465
-0.394736 0.000000 0.162587 0.248660 -0.015644 0.968465
-0.373942 0.000000 0.167926 0.248660 -0.015644 0.968465
-0.370993 -0.046867 0.167926 0.248660 -0.015644 0.968465
-0.370993 -0.046867 0.167926 0.125330 -0.007885 0.992084
-0.373942 0.000000 0.167926 0.125330 -0.007885 0.992084
-0.352643 0.000000 0.170617 0.125330 -0.007885 0.992084
-0.349862 -0.044198 0.170617 0.125330 -0.007885 0.992084
-0.328563 -0.041507 0.170617 -0.125330 0.007885 0.992084
-0.331174 0.000000 0.170617 -0.125330 0.007885 0.992084
-0.309875 0.000000 0.167926 -0.125330 0.007885 0.992084
-0.307431 -0.038838 0.167926 -0.125330 0.007885 0.992084
-0.307431 -0.038838 0.167926 -0.248659 0.015644 0.968465
-0.309875 0.000000 0.167926 -0.248659 0.015644 0.968465
-0.289081 0.000000 0.162587 -0.248659 0.015644 0.968465
-0.286801 -0.036231 0.162587 -0.248659 0.015644 0.968465
-0.286801 -0.036231 0.162587 -0.368025 0.023155 0.929527
-0.289081 0.000000 0.162587 -0.368025 0.023155 0.929527
-0.269120 0.000000 0.154684 -0.368025 0.023155 0.929527
-0.266997 -0.033730 0.154684 -0.368025 0.023155 0.929527
-0.266997 -0.033730 0.154684 -0.481533 0.030296 0.875904
-0.269120 0.000000 0.154684 -0.481533 0.030296 0.875904
-0.250306 0.000000 0.144341 -0.481533 0.030296 0.875904
-0.248333 -0.031372 0.144341 -0.481533 0.030296 0.875904
-0.248333 -0.031372 0.144341 -0.587384 0.036955 0.808464
-0.250306 0.000000 0.144341 -0.587384 0.036955 0.808464
-0.232938 0.000000 0.131722 -0.587384 0.036955 0.808464
-0.231101 -0.029195 0.131722 -0.587384 0.036955 0.808464
-0.231101 -0.029195 0.131722 -0.683913 0.043028 0.728293
-0.232938 0.000000 0.131722 -0.683913 0.043028 0.728293
-0.217288 0.000000 0.117026 -0.683913 0.043028 0.728293
-0.215575 -0.027233 0.117026 -0.683913 0.043028 0.728293
-0.215575 -0.027233 0.117026 -0.769610 0.048419 0.636676
-0.217288 0.000000 0.117026 -0.769610 0.048419 0.636676
-0.203603 0.000000 0.100484 -0.769610 0.048419 0.636676
-0.201998 -0.025518 0.100484 -0.769610 0.048419 0.636676
-0.201998 -0.025518 0.100484 -0.843139 0.053045 0.535073
-0.203603 0.000000 0.100484 -0.843139 0.053045 0.535073
-0.192100 0.000000 0.082358 -0.843139 0.053045 0.535073
-0.190585 -0.024077 0.082358 -0.843139 0.053045 0.535073
-0.190585 -0.024077 0.082358 -0.903365 0.056834 0.425091
-0.192100 0.000000 0.082358 -0.903365 0.056834 0.425091
-0.182959 0.000000 0.062932 -0.903365 0.056834 0.425091
-0.181516 -0.022931 0.062932 -0.903365 0.056834 0.425091
-0.181516 -0.022931 0.062932 -0.949359 0.059728 0.308465
-0.182959 0.000000 0.062932 -0.949359 0.059728 0.308465
-0.176325 0.000000 0.042515 -0.949359 0.059728 0.308465
-0.174935 -0.022099 0.042515 -0.949359 0.059728 0.308465
-0.174935 -0.022099 0.042515 -0.980417 0.061683 0.187025
-0.176325 0.000000 0.042515 -0.980417 0.061683 0.187025
-0.172302 0.000000 0.021426 -0.980417 0.061683 0.187025
-0.170943 -0.021595 0.021426 -0.980417 0.061683 0.187025
-0.170943 -0.021595 0.021426 -0.996065 0.062668 0.062667
-0.172302 0.000000 0.021426 -0.996065 0.062668 0.062667
-0.170954 0.000000 0.000000 -0.996065 0.062668 0.062667
-0.169606 -0.021426 0.000000 -0.996065 0.062668 0.062667
-0.169606 -0.021426 0.000000 -0.996065 0.062668 -0.062667
-0.170954 0.000000 0.000000 -0.996065 0.062668 -0.062667
-0.172302 0.000000 -0.021426 -0.996065 0.062668 -0.062667
-0.170943 -0.021595 -0.021426 -0.996065 0.062668 -0.062667
-0.170943 -0.021595 -0.021426 -0.980417 0.061683 -0.187025
-0.172302 0.000000 -0.021426 -0.980417 0.061683 -0.187025
-0.176325 0.000000 -0.042515 -0.980417 0.061683 -0.187025
-0.174935 -0.022099 -0.042515 -0.980417 0.061683 -0.187025
-0.174935 -0.022099 -0.042515 -0.949359 0.059728 -0.308465
-0.176325 0.000000 -0.042515 -0.949359 0.059728 -0.308465
-0.182959 0.000000 -0.062932 -0.949359 0.059728 -0.308465
-0.181516 -0.022931 -0.062932 -0.949359 0.059728 -0.308465
-0.181516 -0.022931 -0.062932 -0.903365 0.056834 -0.425091
-0.182959 0.000000 -0.062932 -0.903365 0.056834 -0.425091
-0.192100 0.000000 -0.082358 -0.903365 0.056834 -0.425091
-0.190585 -0.024077 -0.082358 -0.903365 0.056834 -0.425091
-0.190585 -0.024077 -0.082358 -0.843139 0.053045 -0.535073
-0.192100 0.000000 -0.082358 -0.843139 0.053045 -0.535073
-0.203603 0.000000 -0.100484 -0.843139 0.053045 -0.535073
-0.201998 -0.025518 -0.100484 -0.843139 0.053045 -0.535073
-0.201998 -0.025518 -0.100484 -0.769610 0.048419 -0.636676
-0.203603 0.000000 -0.100484 -0.769610 0.048419 -0.636676
-0.217288 0.000000 -0.117026 -0.769610 0.048419 -0.636676
-0.215575 -0.027233 -0.117026 -0.769610 0.048419 -0.636676
-0.215575 -0.027233 -0.117026 -0.683913 0.043028 -0.728293
-0.217288 0.000000 -0.117026 -0.683913 0.043028 -0.728293
-0.232938 0.000000 -0.131722 -0.683913 0.043028 -0.728293
-0.231101 -0.029195 -0.131722 -0.683913 0.043028 -0.728293
-0.231101 -0.029195 -0.131722 -0.587384 0.036955 -0.808464
-0.232938 0.000000 -0.131722 -0.587384 0.036955 -0.808464
-0.250306 0.000000 -0.144341 -0.587384 0.036955 -0.808464
-0.248333 -0.031372 -0.144341 -0.587384 0.036955 -0.808464
-0.248333 -0.031372 -0.144341 -0.481533 0.030296 -0.875904
-0.250306 0.000000 -0.144341 -0.481533 0.030296 -0.875904
-0.269120 0.000000 -0.154684 -0.481533 0.030296 -0.875904
-0.266997 -0.033730 -0.154684 -0.481533 0.030296 -0.875904
-0.266997 -0.033730 -0.154684 -0.368025 0.023155 -0.929527
-0.269120 0.000000 -0.154684 -0.368025 0.023155 -0.929527
-0.289081 0.000000 -0.162587 -0.368025 0.023155 -0.929527
-0.286801 -0.036231 -0.162587 -0.368025 0.023155 -0.929527
-0.286801 -0.036231 -0.162587 -0.248659 0.015644 -0.968465
-0.289081 0.000000 -0.162587 -0.248659 0.015644 -0.968465
-0.309875 0.000000 -0.167926 -0.248659 0.015644 -0.968465
-0.307431 -0.038838 -0.167926 -0.248659 0.015644 -0.968465
-0.307431 -0.038838 -0.167926 -0.125330 0.007885 -0.992084
-0.309875 0.000000 -0.167926 -0.125330 0.007885 -0.992084
-0.331174 0.000000 -0.170617 -0.125330 0.007885 -0.992084
-0.328563 -0.041507 -0.170617 -0.125330 0.007885 -0.992084
-0.349862 -0.044198 -0.170617 0.125330 -0.007885 -0.992084
-0.352643 0.000000 -0.170617 0.125330 -0.007885 -0.992084
-0.373942 0.000000 -0.167926 0.125330 -0.007885 -0.992084
-0.370993 -0.046867 -0.167926 0.125330 -0.007885 -0.992084
-0.370993 -0.046867 -0.167926 0.248660 -0.015644 -0.968465
-0.373942 0.000000 -0.167926 0.248660 -0.015644 -0.968465
-0.394736 0.000000 -0.162587 0.248660 -0.015644 -0.968465
-0.391623 -0.049474 -0.162587 0.248660 -0.015644 -0.968465
-0.391623 -0.049474 -0.162587 0.368025 -0.023154 -0.929528
-0.394736 0.000000 -0.162587 0.368025 -0.023154 -0.929528
-0.414697 0.000000 -0.154684 0.368025 -0.023154 -0.929528
-0.411427 -0.051975 -0.154684 0.368025 -0.023154 -0.929528
-0.411427 -0.051975 -0.154684 0.481533 -0.030295 -0.875904
-0.414697 0.000000 -0.154684 0.481533 -0.030295 -0.875904
-0.433510 0.000000 -0.144341 0.481533 -0.030295 -0.875904
-0.430092 -0.054333 -0.144341 0.481533 -0.030295 -0.875904
-0.430092 -0.054333 -0.144341 0.587384 -0.036955 -0.808464
-0.433510 0.000000 -0.144341 0.587384 -0.036955 -0.808464
-0.450878 0.000000 -0.131722 0.587384 -0.036955 -0.808464
-0.447323 -0.056510 -0.131722 0.587384 -0.036955 -0.808464
-0.447323 -0.056510 -0.131722 0.683913 -0.043028 -0.728293
-0.450878 0.000000 -0.131722 0.683913 -0.043028 -0.728293
-0.466528 0.000000 -0.117026 0.683913 -0.043028 -0.728293
-0.462850 -0.058472 -0.117026 0.683913 -0.043028 -0.728293
-0.462850 -0.058472 -0.117026 0.769610 -0.048420 -0.636676
-0.466528 0.000000 -0.117026 0.769610 -0.048420 -0.636676
-0.480213 0.000000 -0.100484 0.769610 -0.048420 -0.636676
-0.476426 -0.060187 -0.100484 0.769610 -0.048420 -0.636676
-0.476426 -0.060187 -0.100484 0.843139 -0.053046 -0.535073
-0.480213 0.000000 -0.100484 0.843139 -0.053046 -0.535073
-0.491716 0.000000 -0.082358 0.843139 -0.053046 -0.535073
-0.487839 -0.061629 -0.082358 0.843139 -0.053046 -0.535073
-0.487839 -0.061629 -0.082358 0.903365 -0.056835 -0.425091
-0.491716 0.000000 -0.082358 0.903365 -0.056835 -0.425091
-0.500857 0.000000 -0.062932 0.903365 -0.056835 -0.425091
-0.496908 -0.062774 -0.062932 0.903365 -0.056835 -0.425091
-0.496908 -0.062774 -0.062932 0.949359 -0.059728 -0.308465
-0.500857 0.000000 -0.062932 0.949359 -0.059728 -0.308465
-0.507491 0.000000 -0.042515 0.949359 -0.059728 -0.308465
-0.503490 -0.063606 -0.042515 0.949359 -0.059728 -0.308465
-0.503490 -0.063606 -0.042515 0.980417 -0.061683 -0.187026
-0.507491 0.000000 -0.042515 0.980417 -0.061683 -0.187026
-0.511514 0.000000 -0.021426 0.980417 -0.061683 -0.187026
-0.507481 -0.064110 -0.021426 0.980417 -0.061683 -0.187026
-0.512862 0.000000 0.000000 0.996065 -0.062667 -0.062666
-0.508818 -0.064279 0.000000 0.996065 -0.062667 -0.062666
-0.507481 -0.064110 -0.021426 0.996065 -0.062667 -0.062666
-0.511514 0.000000 -0.021426 0.996065 -0.062667 -0.062666
-4 0 1 2 3
-4 4 5 6 7
-4 8 9 10 11
-4 12 13 14 15
-4 16 17 18 19
-4 20 21 22 23
-4 24 25 26 27
-4 28 29 30 31
-4 32 33 34 35
-4 36 37 38 39
-4 40 41 42 43
-4 44 45 46 47
-4 48 49 50 51
-4 52 53 54 55
-4 56 57 58 59
-4 60 61 62 63
-4 64 65 66 67
-4 68 69 70 71
-4 72 73 74 75
-4 76 77 78 79
-4 80 81 82 83
-4 84 85 86 87
-4 88 89 90 91
-4 92 93 94 95
-4 96 97 98 99
-4 100 101 102 103
-4 104 105 106 107
-4 108 109 110 111
-4 112 113 114 115
-4 116 117 118 119
-4 120 121 122 123
-4 124 125 126 127
-4 128 129 130 131
-4 132 133 134 135
-4 136 137 138 139
-4 140 141 142 143
-4 144 145 146 147
-4 148 149 150 151
-4 152 153 154 155
-4 156 157 158 159
-4 160 161 162 163
-4 164 165 166 167
-4 168 169 170 171
-4 172 173 174 175
-4 176 177 178 179
-4 180 181 182 183
-4 184 185 186 187
-4 188 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-4 208 209 210 211
-4 212 213 214 215
-4 216 217 218 219
-4 220 221 222 223
-4 224 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-4 236 237 238 239
-4 240 241 242 243
-4 244 245 246 247
-4 49 248 249 50
-4 250 251 252 253
-4 254 255 256 257
-4 258 259 260 261
-4 262 263 264 265
-4 266 267 268 269
-4 270 271 272 273
-4 274 275 276 277
-4 278 279 280 281
-4 282 283 284 285
-4 286 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-4 302 303 304 305
-4 306 307 308 309
-4 310 311 312 313
-4 314 315 316 317
-4 318 319 320 321
-4 322 323 324 325
-4 326 327 328 329
-4 330 331 332 333
-4 334 335 336 337
-4 338 339 340 341
-4 342 343 344 345
-4 149 346 347 150
-4 348 349 350 351
-4 352 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-4 364 365 366 367
-4 368 369 370 371
-4 372 373 374 375
-4 376 377 378 379
-4 380 381 382 383
-4 384 385 386 387
-4 388 389 390 391
-4 392 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-4 416 417 418 419
-4 420 421 422 423
-4 424 425 426 427
-4 428 429 430 431
-4 432 433 434 435
-4 436 437 438 439
-4 440 441 442 443
-4 248 444 445 249
-4 446 447 448 449
-4 450 451 452 453
-4 454 455 456 457
-4 458 459 460 461
-4 462 463 464 465
-4 466 467 468 469
-4 470 471 472 473
-4 474 475 476 477
-4 478 479 480 481
-4 482 483 484 485
-4 486 487 488 489
-4 490 491 492 493
-4 494 495 496 497
-4 498 499 500 501
-4 502 503 504 505
-4 506 507 508 509
-4 510 511 512 513
-4 514 515 516 517
-4 518 519 520 521
-4 522 523 524 525
-4 526 527 528 529
-4 530 531 532 533
-4 534 535 536 537
-4 538 539 540 541
-4 346 542 543 347
-4 544 545 546 547
-4 548 549 550 551
-4 552 553 554 555
-4 556 557 558 559
-4 560 561 562 563
-4 564 565 566 567
-4 568 569 570 571
-4 572 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-4 612 613 614 615
-4 616 617 618 619
-4 620 621 622 623
-4 624 625 626 627
-4 628 629 630 631
-4 632 633 634 635
-4 636 637 638 639
-4 444 640 641 445
-4 642 643 644 645
-4 646 647 648 649
-4 650 651 652 653
-4 654 655 656 657
-4 658 659 660 661
-4 662 663 664 665
-4 666 667 668 669
-4 670 671 672 673
-4 674 675 676 677
-4 678 679 680 681
-4 682 683 684 685
-4 686 687 688 689
-4 690 691 692 693
-4 694 695 696 697
-4 698 699 700 701
-4 702 703 704 705
-4 706 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-4 722 723 724 725
-4 726 727 728 729
-4 730 731 732 733
-4 734 735 736 737
-4 542 738 739 543
-4 740 741 742 743
-4 744 745 746 747
-4 748 749 750 751
-4 752 753 754 755
-4 756 757 758 759
-4 760 761 762 763
-4 764 765 766 767
-4 768 769 770 771
-4 772 773 774 775
-4 776 777 778 779
-4 780 781 782 783
-4 784 785 786 787
-4 788 789 790 791
-4 792 793 794 795
-4 796 797 798 799
-4 800 801 802 803
-4 804 805 806 807
-4 808 809 810 811
-4 812 813 814 815
-4 816 817 818 819
-4 820 821 822 823
-4 824 825 826 827
-4 828 829 830 831
-4 832 833 834 835
-4 640 836 837 641
-4 838 839 840 841
-4 842 843 844 845
-4 846 847 848 849
-4 850 851 852 853
-4 854 855 856 857
-4 858 859 860 861
-4 862 863 864 865
-4 866 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-4 918 919 920 921
-4 922 923 924 925
-4 926 927 928 929
-4 930 931 932 933
-4 738 934 935 739
-4 936 937 938 939
-4 940 941 942 943
-4 944 945 946 947
-4 948 949 950 951
-4 952 953 954 955
-4 956 957 958 959
-4 960 961 962 963
-4 964 965 966 967
-4 968 969 970 971
-4 972 973 974 975
-4 976 977 978 979
-4 980 981 982 983
-4 984 985 986 987
-4 988 989 990 991
-4 992 993 994 995
-4 996 997 998 999
-4 1000 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-4 1012 1013 1014 1015
-4 1016 1017 1018 1019
-4 1020 1021 1022 1023
-4 1024 1025 1026 1027
-4 1028 1029 1030 1031
-4 836 1032 1033 837
-4 1034 1035 1036 1037
-4 1038 1039 1040 1041
-4 1042 1043 1044 1045
-4 1046 1047 1048 1049
-4 1050 1051 1052 1053
-4 1054 1055 1056 1057
-4 1058 1059 1060 1061
-4 1062 1063 1064 1065
-4 1066 1067 1068 1069
-4 1070 1071 1072 1073
-4 1074 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-4 1086 1087 1088 1089
-4 1090 1091 1092 1093
-4 1094 1095 1096 1097
-4 1098 1099 1100 1101
-4 1102 1103 1104 1105
-4 1106 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-4 1126 1127 1128 1129
-4 934 1130 1131 935
-4 1132 1133 1134 1135
-4 1136 1137 1138 1139
-4 1140 1141 1142 1143
-4 1144 1145 1146 1147
-4 1148 1149 1150 1151
-4 1152 1153 1154 1155
-4 1156 1157 1158 1159
-4 1160 1161 1162 1163
-4 1164 1165 1166 1167
-4 1168 1169 1170 1171
-4 1172 1173 1174 1175
-4 1176 1177 1178 1179
-4 1180 1181 1182 1183
-4 1184 1185 1186 1187
-4 1188 1189 1190 1191
-4 1192 1193 1194 1195
-4 1196 1197 1198 1199
-4 1200 1201 1202 1203
-4 1204 1205 1206 1207
-4 1208 1209 1210 1211
-4 1212 1213 1214 1215
-4 1216 1217 1218 1219
-4 1220 1221 1222 1223
-4 1224 1225 1226 1227
-4 1032 1228 1229 1033
-4 1230 1231 1232 1233
-4 1234 1235 1236 1237
-4 1238 1239 1240 1241
-4 1242 1243 1244 1245
-4 1246 1247 1248 1249
-4 1250 1251 1252 1253
-4 1254 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-4 1282 1283 1284 1285
-4 1286 1287 1288 1289
-4 1290 1291 1292 1293
-4 1294 1295 1296 1297
-4 1298 1299 1300 1301
-4 1302 1303 1304 1305
-4 1306 1307 1308 1309
-4 1310 1311 1312 1313
-4 1314 1315 1316 1317
-4 1318 1319 1320 1321
-4 1322 1323 1324 1325
-4 1130 1326 1327 1131
-4 1328 1329 1330 1331
-4 1332 1333 1334 1335
-4 1336 1337 1338 1339
-4 1340 1341 1342 1343
-4 1344 1345 1346 1347
-4 1348 1349 1350 1351
-4 1352 1353 1354 1355
-4 1356 1357 1358 1359
-4 1360 1361 1362 1363
-4 1364 1365 1366 1367
-4 1368 1369 1370 1371
-4 1372 1373 1374 1375
-4 1376 1377 1378 1379
-4 1380 1381 1382 1383
-4 1384 1385 1386 1387
-4 1388 1389 1390 1391
-4 1392 1393 1394 1395
-4 1396 1397 1398 1399
-4 1400 1401 1402 1403
-4 1404 1405 1406 1407
-4 1408 1409 1410 1411
-4 1412 1413 1414 1415
-4 1416 1417 1418 1419
-4 1420 1421 1422 1423
-4 1228 1424 1425 1229
-4 1426 1427 1428 1429
-4 1430 1431 1432 1433
-4 1434 1435 1436 1437
-4 1438 1439 1440 1441
-4 1442 1443 1444 1445
-4 1446 1447 1448 1449
-4 1450 1451 1452 1453
-4 1454 1455 1456 1457
-4 1458 1459 1460 1461
-4 1462 1463 1464 1465
-4 1466 1467 1468 1469
-4 1470 1471 1472 1473
-4 1474 1475 1476 1477
-4 1478 1479 1480 1481
-4 1482 1483 1484 1485
-4 1486 1487 1488 1489
-4 1490 1491 1492 1493
-4 1494 1495 1496 1497
-4 1498 1499 1500 1501
-4 1502 1503 1504 1505
-4 1506 1507 1508 1509
-4 1510 1511 1512 1513
-4 1514 1515 1516 1517
-4 1518 1519 1520 1521
-4 1326 1522 1523 1327
-4 1524 1525 1526 1527
-4 1528 1529 1530 1531
-4 1532 1533 1534 1535
-4 1536 1537 1538 1539
-4 1540 1541 1542 1543
-4 1544 1545 1546 1547
-4 1548 1549 1550 1551
-4 1552 1553 1554 1555
-4 1556 1557 1558 1559
-4 1560 1561 1562 1563
-4 1564 1565 1566 1567
-4 1568 1569 1570 1571
-4 1572 1573 1574 1575
-4 1576 1577 1578 1579
-4 1580 1581 1582 1583
-4 1584 1585 1586 1587
-4 1588 1589 1590 1591
-4 1592 1593 1594 1595
-4 1596 1597 1598 1599
-4 1600 1601 1602 1603
-4 1604 1605 1606 1607
-4 1608 1609 1610 1611
-4 1612 1613 1614 1615
-4 1616 1617 1618 1619
-4 1424 1620 1621 1425
-4 1622 1623 1624 1625
-4 1626 1627 1628 1629
-4 1630 1631 1632 1633
-4 1634 1635 1636 1637
-4 1638 1639 1640 1641
-4 1642 1643 1644 1645
-4 1646 1647 1648 1649
-4 1650 1651 1652 1653
-4 1654 1655 1656 1657
-4 1658 1659 1660 1661
-4 1662 1663 1664 1665
-4 1666 1667 1668 1669
-4 1670 1671 1672 1673
-4 1674 1675 1676 1677
-4 1678 1679 1680 1681
-4 1682 1683 1684 1685
-4 1686 1687 1688 1689
-4 1690 1691 1692 1693
-4 1694 1695 1696 1697
-4 1698 1699 1700 1701
-4 1702 1703 1704 1705
-4 1706 1707 1708 1709
-4 1710 1711 1712 1713
-4 1714 1715 1716 1717
-4 1522 1718 1719 1523
-4 1720 1721 1722 1723
-4 1724 1725 1726 1727
-4 1728 1729 1730 1731
-4 1732 1733 1734 1735
-4 1736 1737 1738 1739
-4 1740 1741 1742 1743
-4 1744 1745 1746 1747
-4 1748 1749 1750 1751
-4 1752 1753 1754 1755
-4 1756 1757 1758 1759
-4 1760 1761 1762 1763
-4 1764 1765 1766 1767
-4 1768 1769 1770 1771
-4 1772 1773 1774 1775
-4 1776 1777 1778 1779
-4 1780 1781 1782 1783
-4 1784 1785 1786 1787
-4 1788 1789 1790 1791
-4 1792 1793 1794 1795
-4 1796 1797 1798 1799
-4 1800 1801 1802 1803
-4 1804 1805 1806 1807
-4 1808 1809 1810 1811
-4 1812 1813 1814 1815
-4 1620 1816 1817 1621
-4 1818 1819 1820 1821
-4 1822 1823 1824 1825
-4 1826 1827 1828 1829
-4 1830 1831 1832 1833
-4 1834 1835 1836 1837
-4 1838 1839 1840 1841
-4 1842 1843 1844 1845
-4 1846 1847 1848 1849
-4 1850 1851 1852 1853
-4 1854 1855 1856 1857
-4 1858 1859 1860 1861
-4 1862 1863 1864 1865
-4 1866 1867 1868 1869
-4 1870 1871 1872 1873
-4 1874 1875 1876 1877
-4 1878 1879 1880 1881
-4 1882 1883 1884 1885
-4 1886 1887 1888 1889
-4 1890 1891 1892 1893
-4 1894 1895 1896 1897
-4 1898 1899 1900 1901
-4 1902 1903 1904 1905
-4 1906 1907 1908 1909
-4 1910 1911 1912 1913
-4 1718 1914 1915 1719
-4 1916 1917 1918 1919
-4 1920 1921 1922 1923
-4 1924 1925 1926 1927
-4 1928 1929 1930 1931
-4 1932 1933 1934 1935
-4 1936 1937 1938 1939
-4 1940 1941 1942 1943
-4 1944 1945 1946 1947
-4 1948 1949 1950 1951
-4 1952 1953 1954 1955
-4 1956 1957 1958 1959
-4 1960 1961 1962 1963
-4 1964 1965 1966 1967
-4 1968 1969 1970 1971
-4 1972 1973 1974 1975
-4 1976 1977 1978 1979
-4 1980 1981 1982 1983
-4 1984 1985 1986 1987
-4 1988 1989 1990 1991
-4 1992 1993 1994 1995
-4 1996 1997 1998 1999
-4 2000 2001 2002 2003
-4 2004 2005 2006 2007
-4 2008 2009 2010 2011
-4 1816 2012 2013 1817
-4 2014 2015 2016 2017
-4 2018 2019 2020 2021
-4 2022 2023 2024 2025
-4 2026 2027 2028 2029
-4 2030 2031 2032 2033
-4 2034 2035 2036 2037
-4 2038 2039 2040 2041
-4 2042 2043 2044 2045
-4 2046 2047 2048 2049
-4 2050 2051 2052 2053
-4 2054 2055 2056 2057
-4 2058 2059 2060 2061
-4 2062 2063 2064 2065
-4 2066 2067 2068 2069
-4 2070 2071 2072 2073
-4 2074 2075 2076 2077
-4 2078 2079 2080 2081
-4 2082 2083 2084 2085
-4 2086 2087 2088 2089
-4 2090 2091 2092 2093
-4 2094 2095 2096 2097
-4 2098 2099 2100 2101
-4 2102 2103 2104 2105
-4 2106 2107 2108 2109
-4 1914 2110 2111 1915
-4 2112 2113 2114 2115
-4 2116 2117 2118 2119
-4 2120 2121 2122 2123
-4 2124 2125 2126 2127
-4 2128 2129 2130 2131
-4 2132 2133 2134 2135
-4 2136 2137 2138 2139
-4 2140 2141 2142 2143
-4 2144 2145 2146 2147
-4 2148 2149 2150 2151
-4 2152 2153 2154 2155
-4 2156 2157 2158 2159
-4 2160 2161 2162 2163
-4 2164 2165 2166 2167
-4 2168 2169 2170 2171
-4 2172 2173 2174 2175
-4 2176 2177 2178 2179
-4 2180 2181 2182 2183
-4 2184 2185 2186 2187
-4 2188 2189 2190 2191
-4 2192 2193 2194 2195
-4 2196 2197 2198 2199
-4 2200 2201 2202 2203
-4 2204 2205 2206 2207
-4 2012 2208 2209 2013
-4 2210 2211 2212 2213
-4 2214 2215 2216 2217
-4 2218 2219 2220 2221
-4 2222 2223 2224 2225
-4 2226 2227 2228 2229
-4 2230 2231 2232 2233
-4 2234 2235 2236 2237
-4 2238 2239 2240 2241
-4 2242 2243 2244 2245
-4 2246 2247 2248 2249
-4 2250 2251 2252 2253
-4 2254 2255 2256 2257
-4 2258 2259 2260 2261
-4 2262 2263 2264 2265
-4 2266 2267 2268 2269
-4 2270 2271 2272 2273
-4 2274 2275 2276 2277
-4 2278 2279 2280 2281
-4 2282 2283 2284 2285
-4 2286 2287 2288 2289
-4 2290 2291 2292 2293
-4 2294 2295 2296 2297
-4 2298 2299 2300 2301
-4 2302 2303 2304 2305
-4 2110 2306 2307 2111
-4 2308 2309 2310 2311
-4 2312 2313 2314 2315
-4 2316 2317 2318 2319
-4 2320 2321 2322 2323
-4 2324 2325 2326 2327
-4 2328 2329 2330 2331
-4 2332 2333 2334 2335
-4 2336 2337 2338 2339
-4 2340 2341 2342 2343
-4 2344 2345 2346 2347
-4 2348 2349 2350 2351
-4 2352 2353 2354 2355
-4 2356 2357 2358 2359
-4 2360 2361 2362 2363
-4 2364 2365 2366 2367
-4 2368 2369 2370 2371
-4 2372 2373 2374 2375
-4 2376 2377 2378 2379
-4 2380 2381 2382 2383
-4 2384 2385 2386 2387
-4 2388 2389 2390 2391
-4 2392 2393 2394 2395
-4 2396 2397 2398 2399
-4 2400 2401 2402 2403
-4 2208 2404 2405 2209
-4 2406 2407 2408 2409
-4 2410 2411 2412 2413
-4 2414 2415 2416 2417
-4 2418 2419 2420 2421
-4 2422 2423 2424 2425
-4 2426 2427 2428 2429
-4 2430 2431 2432 2433
-4 2434 2435 2436 2437
-4 2438 2439 2440 2441
-4 2442 2443 2444 2445
-4 2446 2447 2448 2449
-4 2450 2451 2452 2453
-4 2454 2455 2456 2457
-4 2458 2459 2460 2461
-4 2462 2463 2464 2465
-4 2466 2467 2468 2469
-4 2470 2471 2472 2473
-4 2474 2475 2476 2477
-4 2478 2479 2480 2481
-4 2482 2483 2484 2485
-4 2486 2487 2488 2489
-4 2490 2491 2492 2493
-4 2494 2495 2496 2497
-4 2498 2499 2500 2501
-4 2306 2502 2503 2307
-4 2504 2505 2506 2507
-4 2508 2509 2510 2511
-4 2512 2513 2514 2515
-4 2516 2517 2518 2519
-4 2520 2521 2522 2523
-4 2524 2525 2526 2527
-4 2528 2529 2530 2531
-4 2532 2533 2534 2535
-4 2536 2537 2538 2539
-4 2540 2541 2542 2543
-4 2544 2545 2546 2547
-4 2548 2549 2550 2551
-4 2552 2553 2554 2555
-4 2556 2557 2558 2559
-4 2560 2561 2562 2563
-4 2564 2565 2566 2567
-4 2568 2569 2570 2571
-4 2572 2573 2574 2575
-4 2576 2577 2578 2579
-4 2580 2581 2582 2583
-4 2584 2585 2586 2587
-4 2588 2589 2590 2591
-4 2592 2593 2594 2595
-4 2596 2597 2598 2599
-4 2404 2600 2601 2405
-4 2602 2603 2604 2605
-4 2606 2607 2608 2609
-4 2610 2611 2612 2613
-4 2614 2615 2616 2617
-4 2618 2619 2620 2621
-4 2622 2623 2624 2625
-4 2626 2627 2628 2629
-4 2630 2631 2632 2633
-4 2634 2635 2636 2637
-4 2638 2639 2640 2641
-4 2642 2643 2644 2645
-4 2646 2647 2648 2649
-4 2650 2651 2652 2653
-4 2654 2655 2656 2657
-4 2658 2659 2660 2661
-4 2662 2663 2664 2665
-4 2666 2667 2668 2669
-4 2670 2671 2672 2673
-4 2674 2675 2676 2677
-4 2678 2679 2680 2681
-4 2682 2683 2684 2685
-4 2686 2687 2688 2689
-4 2690 2691 2692 2693
-4 2694 2695 2696 2697
-4 2502 2698 2699 2503
-4 2700 2701 2702 2703
-4 2704 2705 2706 2707
-4 2708 2709 2710 2711
-4 2712 2713 2714 2715
-4 2716 2717 2718 2719
-4 2720 2721 2722 2723
-4 2724 2725 2726 2727
-4 2728 2729 2730 2731
-4 2732 2733 2734 2735
-4 2736 2737 2738 2739
-4 2740 2741 2742 2743
-4 2744 2745 2746 2747
-4 2748 2749 2750 2751
-4 2752 2753 2754 2755
-4 2756 2757 2758 2759
-4 2760 2761 2762 2763
-4 2764 2765 2766 2767
-4 2768 2769 2770 2771
-4 2772 2773 2774 2775
-4 2776 2777 2778 2779
-4 2780 2781 2782 2783
-4 2784 2785 2786 2787
-4 2788 2789 2790 2791
-4 2792 2793 2794 2795
-4 2600 2796 2797 2601
-4 2798 2799 2800 2801
-4 2802 2803 2804 2805
-4 2806 2807 2808 2809
-4 2810 2811 2812 2813
-4 2814 2815 2816 2817
-4 2818 2819 2820 2821
-4 2822 2823 2824 2825
-4 2826 2827 2828 2829
-4 2830 2831 2832 2833
-4 2834 2835 2836 2837
-4 2838 2839 2840 2841
-4 2842 2843 2844 2845
-4 2846 2847 2848 2849
-4 2850 2851 2852 2853
-4 2854 2855 2856 2857
-4 2858 2859 2860 2861
-4 2862 2863 2864 2865
-4 2866 2867 2868 2869
-4 2870 2871 2872 2873
-4 2874 2875 2876 2877
-4 2878 2879 2880 2881
-4 2882 2883 2884 2885
-4 2886 2887 2888 2889
-4 2890 2891 2892 2893
-4 2698 2894 2895 2699
-4 2896 2897 2898 2899
-4 2900 2901 2902 2903
-4 2904 2905 2906 2907
-4 2908 2909 2910 2911
-4 2912 2913 2914 2915
-4 2916 2917 2918 2919
-4 2920 2921 2922 2923
-4 2924 2925 2926 2927
-4 2928 2929 2930 2931
-4 2932 2933 2934 2935
-4 2936 2937 2938 2939
-4 2940 2941 2942 2943
-4 2944 2945 2946 2947
-4 2948 2949 2950 2951
-4 2952 2953 2954 2955
-4 2956 2957 2958 2959
-4 2960 2961 2962 2963
-4 2964 2965 2966 2967
-4 2968 2969 2970 2971
-4 2972 2973 2974 2975
-4 2976 2977 2978 2979
-4 2980 2981 2982 2983
-4 2984 2985 2986 2987
-4 2988 2989 2990 2991
-4 2796 2992 2993 2797
-4 2994 2995 2996 2997
-4 2998 2999 3000 3001
-4 3002 3003 3004 3005
-4 3006 3007 3008 3009
-4 3010 3011 3012 3013
-4 3014 3015 3016 3017
-4 3018 3019 3020 3021
-4 3022 3023 3024 3025
-4 3026 3027 3028 3029
-4 3030 3031 3032 3033
-4 3034 3035 3036 3037
-4 3038 3039 3040 3041
-4 3042 3043 3044 3045
-4 3046 3047 3048 3049
-4 3050 3051 3052 3053
-4 3054 3055 3056 3057
-4 3058 3059 3060 3061
-4 3062 3063 3064 3065
-4 3066 3067 3068 3069
-4 3070 3071 3072 3073
-4 3074 3075 3076 3077
-4 3078 3079 3080 3081
-4 3082 3083 3084 3085
-4 3086 3087 3088 3089
-4 2894 3090 3091 2895
-4 3092 3093 3094 3095
-4 3096 3097 3098 3099
-4 3100 3101 3102 3103
-4 3104 3105 3106 3107
-4 3108 3109 3110 3111
-4 3112 3113 3114 3115
-4 3116 3117 3118 3119
-4 3120 3121 3122 3123
-4 3124 3125 3126 3127
-4 3128 3129 3130 3131
-4 3132 3133 3134 3135
-4 3136 3137 3138 3139
-4 3140 3141 3142 3143
-4 3144 3145 3146 3147
-4 3148 3149 3150 3151
-4 3152 3153 3154 3155
-4 3156 3157 3158 3159
-4 3160 3161 3162 3163
-4 3164 3165 3166 3167
-4 3168 3169 3170 3171
-4 3172 3173 3174 3175
-4 3176 3177 3178 3179
-4 3180 3181 3182 3183
-4 3184 3185 3186 3187
-4 2992 3188 3189 2993
-4 3190 3191 3192 3193
-4 3194 3195 3196 3197
-4 3198 3199 3200 3201
-4 3202 3203 3204 3205
-4 3206 3207 3208 3209
-4 3210 3211 3212 3213
-4 3214 3215 3216 3217
-4 3218 3219 3220 3221
-4 3222 3223 3224 3225
-4 3226 3227 3228 3229
-4 3230 3231 3232 3233
-4 3234 3235 3236 3237
-4 3238 3239 3240 3241
-4 3242 3243 3244 3245
-4 3246 3247 3248 3249
-4 3250 3251 3252 3253
-4 3254 3255 3256 3257
-4 3258 3259 3260 3261
-4 3262 3263 3264 3265
-4 3266 3267 3268 3269
-4 3270 3271 3272 3273
-4 3274 3275 3276 3277
-4 3278 3279 3280 3281
-4 3282 3283 3284 3285
-4 3090 3286 3287 3091
-4 3288 3289 3290 3291
-4 3292 3293 3294 3295
-4 3296 3297 3298 3299
-4 3300 3301 3302 3303
-4 3304 3305 3306 3307
-4 3308 3309 3310 3311
-4 3312 3313 3314 3315
-4 3316 3317 3318 3319
-4 3320 3321 3322 3323
-4 3324 3325 3326 3327
-4 3328 3329 3330 3331
-4 3332 3333 3334 3335
-4 3336 3337 3338 3339
-4 3340 3341 3342 3343
-4 3344 3345 3346 3347
-4 3348 3349 3350 3351
-4 3352 3353 3354 3355
-4 3356 3357 3358 3359
-4 3360 3361 3362 3363
-4 3364 3365 3366 3367
-4 3368 3369 3370 3371
-4 3372 3373 3374 3375
-4 3376 3377 3378 3379
-4 3380 3381 3382 3383
-4 3188 3384 3385 3189
-4 3386 3387 3388 3389
-4 3390 3391 3392 3393
-4 3394 3395 3396 3397
-4 3398 3399 3400 3401
-4 3402 3403 3404 3405
-4 3406 3407 3408 3409
-4 3410 3411 3412 3413
-4 3414 3415 3416 3417
-4 3418 3419 3420 3421
-4 3422 3423 3424 3425
-4 3426 3427 3428 3429
-4 3430 3431 3432 3433
-4 3434 3435 3436 3437
-4 3438 3439 3440 3441
-4 3442 3443 3444 3445
-4 3446 3447 3448 3449
-4 3450 3451 3452 3453
-4 3454 3455 3456 3457
-4 3458 3459 3460 3461
-4 3462 3463 3464 3465
-4 3466 3467 3468 3469
-4 3470 3471 3472 3473
-4 3474 3475 3476 3477
-4 3478 3479 3480 3481
-4 3286 3482 3483 3287
-4 3484 3485 3486 3487
-4 3488 3489 3490 3491
-4 3492 3493 3494 3495
-4 3496 3497 3498 3499
-4 3500 3501 3502 3503
-4 3504 3505 3506 3507
-4 3508 3509 3510 3511
-4 3512 3513 3514 3515
-4 3516 3517 3518 3519
-4 3520 3521 3522 3523
-4 3524 3525 3526 3527
-4 3528 3529 3530 3531
-4 3532 3533 3534 3535
-4 3536 3537 3538 3539
-4 3540 3541 3542 3543
-4 3544 3545 3546 3547
-4 3548 3549 3550 3551
-4 3552 3553 3554 3555
-4 3556 3557 3558 3559
-4 3560 3561 3562 3563
-4 3564 3565 3566 3567
-4 3568 3569 3570 3571
-4 3572 3573 3574 3575
-4 3576 3577 3578 3579
-4 3384 3580 3581 3385
-4 3582 3583 3584 3585
-4 3586 3587 3588 3589
-4 3590 3591 3592 3593
-4 3594 3595 3596 3597
-4 3598 3599 3600 3601
-4 3602 3603 3604 3605
-4 3606 3607 3608 3609
-4 3610 3611 3612 3613
-4 3614 3615 3616 3617
-4 3618 3619 3620 3621
-4 3622 3623 3624 3625
-4 3626 3627 3628 3629
-4 3630 3631 3632 3633
-4 3634 3635 3636 3637
-4 3638 3639 3640 3641
-4 3642 3643 3644 3645
-4 3646 3647 3648 3649
-4 3650 3651 3652 3653
-4 3654 3655 3656 3657
-4 3658 3659 3660 3661
-4 3662 3663 3664 3665
-4 3666 3667 3668 3669
-4 3670 3671 3672 3673
-4 3674 3675 3676 3677
-4 3482 3678 3679 3483
-4 3680 3681 3682 3683
-4 3684 3685 3686 3687
-4 3688 3689 3690 3691
-4 3692 3693 3694 3695
-4 3696 3697 3698 3699
-4 3700 3701 3702 3703
-4 3704 3705 3706 3707
-4 3708 3709 3710 3711
-4 3712 3713 3714 3715
-4 3716 3717 3718 3719
-4 3720 3721 3722 3723
-4 3724 3725 3726 3727
-4 3728 3729 3730 3731
-4 3732 3733 3734 3735
-4 3736 3737 3738 3739
-4 3740 3741 3742 3743
-4 3744 3745 3746 3747
-4 3748 3749 3750 3751
-4 3752 3753 3754 3755
-4 3756 3757 3758 3759
-4 3760 3761 3762 3763
-4 3764 3765 3766 3767
-4 3768 3769 3770 3771
-4 3772 3773 3774 3775
-4 3580 3776 3777 3581
-4 3778 3779 3780 3781
-4 3782 3783 3784 3785
-4 3786 3787 3788 3789
-4 3790 3791 3792 3793
-4 3794 3795 3796 3797
-4 3798 3799 3800 3801
-4 3802 3803 3804 3805
-4 3806 3807 3808 3809
-4 3810 3811 3812 3813
-4 3814 3815 3816 3817
-4 3818 3819 3820 3821
-4 3822 3823 3824 3825
-4 3826 3827 3828 3829
-4 3830 3831 3832 3833
-4 3834 3835 3836 3837
-4 3838 3839 3840 3841
-4 3842 3843 3844 3845
-4 3846 3847 3848 3849
-4 3850 3851 3852 3853
-4 3854 3855 3856 3857
-4 3858 3859 3860 3861
-4 3862 3863 3864 3865
-4 3866 3867 3868 3869
-4 3870 3871 3872 3873
-4 3678 3874 3875 3679
-4 3876 3877 3878 3879
-4 3880 3881 3882 3883
-4 3884 3885 3886 3887
-4 3888 3889 3890 3891
-4 3892 3893 3894 3895
-4 3896 3897 3898 3899
-4 3900 3901 3902 3903
-4 3904 3905 3906 3907
-4 3908 3909 3910 3911
-4 3912 3913 3914 3915
-4 3916 3917 3918 3919
-4 3920 3921 3922 3923
-4 3924 3925 3926 3927
-4 3928 3929 3930 3931
-4 3932 3933 3934 3935
-4 3936 3937 3938 3939
-4 3940 3941 3942 3943
-4 3944 3945 3946 3947
-4 3948 3949 3950 3951
-4 3952 3953 3954 3955
-4 3956 3957 3958 3959
-4 3960 3961 3962 3963
-4 3964 3965 3966 3967
-4 3968 3969 3970 3971
-4 3776 3972 3973 3777
-4 3974 3975 3976 3977
-4 3978 3979 3980 3981
-4 3982 3983 3984 3985
-4 3986 3987 3988 3989
-4 3990 3991 3992 3993
-4 3994 3995 3996 3997
-4 3998 3999 4000 4001
-4 4002 4003 4004 4005
-4 4006 4007 4008 4009
-4 4010 4011 4012 4013
-4 4014 4015 4016 4017
-4 4018 4019 4020 4021
-4 4022 4023 4024 4025
-4 4026 4027 4028 4029
-4 4030 4031 4032 4033
-4 4034 4035 4036 4037
-4 4038 4039 4040 4041
-4 4042 4043 4044 4045
-4 4046 4047 4048 4049
-4 4050 4051 4052 4053
-4 4054 4055 4056 4057
-4 4058 4059 4060 4061
-4 4062 4063 4064 4065
-4 4066 4067 4068 4069
-4 3874 4070 4071 3875
-4 4072 4073 4074 4075
-4 4076 4077 4078 4079
-4 4080 4081 4082 4083
-4 4084 4085 4086 4087
-4 4088 4089 4090 4091
-4 4092 4093 4094 4095
-4 4096 4097 4098 4099
-4 4100 4101 4102 4103
-4 4104 4105 4106 4107
-4 4108 4109 4110 4111
-4 4112 4113 4114 4115
-4 4116 4117 4118 4119
-4 4120 4121 4122 4123
-4 4124 4125 4126 4127
-4 4128 4129 4130 4131
-4 4132 4133 4134 4135
-4 4136 4137 4138 4139
-4 4140 4141 4142 4143
-4 4144 4145 4146 4147
-4 4148 4149 4150 4151
-4 4152 4153 4154 4155
-4 4156 4157 4158 4159
-4 4160 4161 4162 4163
-4 4164 4165 4166 4167
-4 3972 4168 4169 3973
-4 4170 4171 4172 4173
-4 4174 4175 4176 4177
-4 4178 4179 4180 4181
-4 4182 4183 4184 4185
-4 4186 4187 4188 4189
-4 4190 4191 4192 4193
-4 4194 4195 4196 4197
-4 4198 4199 4200 4201
-4 4202 4203 4204 4205
-4 4206 4207 4208 4209
-4 4210 4211 4212 4213
-4 4214 4215 4216 4217
-4 4218 4219 4220 4221
-4 4222 4223 4224 4225
-4 4226 4227 4228 4229
-4 4230 4231 4232 4233
-4 4234 4235 4236 4237
-4 4238 4239 4240 4241
-4 4242 4243 4244 4245
-4 4246 4247 4248 4249
-4 4250 4251 4252 4253
-4 4254 4255 4256 4257
-4 4258 4259 4260 4261
-4 4262 4263 4264 4265
-4 4070 4266 4267 4071
-4 4268 4269 4270 4271
-4 4272 4273 4274 4275
-4 4276 4277 4278 4279
-4 4280 4281 4282 4283
-4 4284 4285 4286 4287
-4 4288 4289 4290 4291
-4 4292 4293 4294 4295
-4 4296 4297 4298 4299
-4 4300 4301 4302 4303
-4 4304 4305 4306 4307
-4 4308 4309 4310 4311
-4 4312 4313 4314 4315
-4 4316 4317 4318 4319
-4 4320 4321 4322 4323
-4 4324 4325 4326 4327
-4 4328 4329 4330 4331
-4 4332 4333 4334 4335
-4 4336 4337 4338 4339
-4 4340 4341 4342 4343
-4 4344 4345 4346 4347
-4 4348 4349 4350 4351
-4 4352 4353 4354 4355
-4 4356 4357 4358 4359
-4 4360 4361 4362 4363
-4 4168 4364 4365 4169
-4 4366 4367 4368 4369
-4 4370 4371 4372 4373
-4 4374 4375 4376 4377
-4 4378 4379 4380 4381
-4 4382 4383 4384 4385
-4 4386 4387 4388 4389
-4 4390 4391 4392 4393
-4 4394 4395 4396 4397
-4 4398 4399 4400 4401
-4 4402 4403 4404 4405
-4 4406 4407 4408 4409
-4 4410 4411 4412 4413
-4 4414 4415 4416 4417
-4 4418 4419 4420 4421
-4 4422 4423 4424 4425
-4 4426 4427 4428 4429
-4 4430 4431 4432 4433
-4 4434 4435 4436 4437
-4 4438 4439 4440 4441
-4 4442 4443 4444 4445
-4 4446 4447 4448 4449
-4 4450 4451 4452 4453
-4 4454 4455 4456 4457
-4 4458 4459 4460 4461
-4 4266 4462 4463 4267
-4 4464 4465 4466 4467
-4 4468 4469 4470 4471
-4 4472 4473 4474 4475
-4 4476 4477 4478 4479
-4 4480 4481 4482 4483
-4 4484 4485 4486 4487
-4 4488 4489 4490 4491
-4 4492 4493 4494 4495
-4 4496 4497 4498 4499
-4 4500 4501 4502 4503
-4 4504 4505 4506 4507
-4 4508 4509 4510 4511
-4 4512 4513 4514 4515
-4 4516 4517 4518 4519
-4 4520 4521 4522 4523
-4 4524 4525 4526 4527
-4 4528 4529 4530 4531
-4 4532 4533 4534 4535
-4 4536 4537 4538 4539
-4 4540 4541 4542 4543
-4 4544 4545 4546 4547
-4 4548 4549 4550 4551
-4 4552 4553 4554 4555
-4 4556 4557 4558 4559
-4 4364 4560 4561 4365
-4 4562 4563 4564 4565
-4 4566 4567 4568 4569
-4 4570 4571 4572 4573
-4 4574 4575 4576 4577
-4 4578 4579 4580 4581
-4 4582 4583 4584 4585
-4 4586 4587 4588 4589
-4 4590 4591 4592 4593
-4 4594 4595 4596 4597
-4 4598 4599 4600 4601
-4 4602 4603 4604 4605
-4 4606 4607 4608 4609
-4 4610 4611 4612 4613
-4 4614 4615 4616 4617
-4 4618 4619 4620 4621
-4 4622 4623 4624 4625
-4 4626 4627 4628 4629
-4 4630 4631 4632 4633
-4 4634 4635 4636 4637
-4 4638 4639 4640 4641
-4 4642 4643 4644 4645
-4 4646 4647 4648 4649
-4 4650 4651 4652 4653
-4 4654 4655 4656 4657
-4 4462 4658 4659 4463
-4 4660 4661 4662 4663
-4 4664 4665 4666 4667
-4 4668 4669 4670 4671
-4 4672 4673 4674 4675
-4 4676 4677 4678 4679
-4 4680 4681 4682 4683
-4 4684 4685 4686 4687
-4 4688 4689 4690 4691
-4 4692 4693 4694 4695
-4 4696 4697 4698 4699
-4 4700 4701 4702 4703
-4 4704 4705 4706 4707
-4 4708 4709 4710 4711
-4 4712 4713 4714 4715
-4 4716 4717 4718 4719
-4 4720 4721 4722 4723
-4 4724 4725 4726 4727
-4 4728 4729 4730 4731
-4 4732 4733 4734 4735
-4 4736 4737 4738 4739
-4 4740 4741 4742 4743
-4 4744 4745 4746 4747
-4 4748 4749 4750 4751
-4 4752 4753 4754 4755
-4 4560 4756 4757 4561
-4 4758 4759 4760 4761
-4 4762 4763 4764 4765
-4 4766 4767 4768 4769
-4 4770 4771 4772 4773
-4 4774 4775 4776 4777
-4 4778 4779 4780 4781
-4 4782 4783 4784 4785
-4 4786 4787 4788 4789
-4 4790 4791 4792 4793
-4 4794 4795 4796 4797
-4 4798 4799 4800 4801
-4 4802 4803 4804 4805
-4 4806 4807 4808 4809
-4 4810 4811 4812 4813
-4 4814 4815 4816 4817
-4 4818 4819 4820 4821
-4 4822 4823 4824 4825
-4 4826 4827 4828 4829
-4 4830 4831 4832 4833
-4 4834 4835 4836 4837
-4 4838 4839 4840 4841
-4 4842 4843 4844 4845
-4 4846 4847 4848 4849
-4 4850 4851 4852 4853
-4 4658 4854 4855 4659
-4 4856 4857 4858 4859
-4 4860 4861 4862 4863
-4 4864 4865 4866 4867
-4 4868 4869 4870 4871
-4 4872 4873 4874 4875
-4 4876 4877 4878 4879
-4 4880 4881 4882 4883
-4 4884 4885 4886 4887
-4 4888 4889 4890 4891
-4 4892 4893 4894 4895
-4 4896 4897 4898 4899
-4 4900 4901 4902 4903
-4 4904 4905 4906 4907
-4 4908 4909 4910 4911
-4 4912 4913 4914 4915
-4 4916 4917 4918 4919
-4 4920 4921 4922 4923
-4 4924 4925 4926 4927
-4 4928 4929 4930 4931
-4 4932 4933 4934 4935
-4 4936 4937 4938 4939
-4 4940 4941 4942 4943
-4 4944 4945 4946 4947
-4 4948 4949 4950 4951
-4 4756 4952 4953 4757
-4 4954 4955 4956 4957
-4 4958 4959 4960 4961
-4 4962 4963 4964 4965
-4 4966 4967 4968 4969
-4 4970 4971 4972 4973
-4 4974 4975 4976 4977
-4 4978 4979 4980 4981
-4 4982 4983 4984 4985
-4 4986 4987 4988 4989
-4 4990 4991 4992 4993
-4 4994 4995 4996 4997
-4 4998 4999 5000 5001
-4 5002 5003 5004 5005
-4 5006 5007 5008 5009
-4 5010 5011 5012 5013
-4 5014 5015 5016 5017
-4 5018 5019 5020 5021
-4 5022 5023 5024 5025
-4 5026 5027 5028 5029
-4 5030 5031 5032 5033
-4 5034 5035 5036 5037
-4 5038 5039 5040 5041
-4 5042 5043 5044 5045
-4 5046 5047 5048 5049
-4 4854 5050 5051 4855
-4 5052 5053 5054 5055
-4 5056 5057 5058 5059
-4 5060 5061 5062 5063
-4 5064 5065 5066 5067
-4 5068 5069 5070 5071
-4 5072 5073 5074 5075
-4 5076 5077 5078 5079
-4 5080 5081 5082 5083
-4 5084 5085 5086 5087
-4 5088 5089 5090 5091
-4 5092 5093 5094 5095
-4 5096 5097 5098 5099
-4 5100 5101 5102 5103
-4 5104 5105 5106 5107
-4 5108 5109 5110 5111
-4 5112 5113 5114 5115
-4 5116 5117 5118 5119
-4 5120 5121 5122 5123
-4 5124 5125 5126 5127
-4 5128 5129 5130 5131
-4 5132 5133 5134 5135
-4 5136 5137 5138 5139
-4 5140 5141 5142 5143
-4 5144 5145 5146 5147
-4 4952 5148 5149 4953
-4 5150 5151 5152 5153
-4 5154 5155 5156 5157
-4 5158 5159 5160 5161
-4 5162 5163 5164 5165
-4 5166 5167 5168 5169
-4 5170 5171 5172 5173
-4 5174 5175 5176 5177
-4 5178 5179 5180 5181
-4 5182 5183 5184 5185
-4 5186 5187 5188 5189
-4 5190 5191 5192 5193
-4 5194 5195 5196 5197
-4 5198 5199 5200 5201
-4 5202 5203 5204 5205
-4 5206 5207 5208 5209
-4 5210 5211 5212 5213
-4 5214 5215 5216 5217
-4 5218 5219 5220 5221
-4 5222 5223 5224 5225
-4 5226 5227 5228 5229
-4 5230 5231 5232 5233
-4 5234 5235 5236 5237
-4 5238 5239 5240 5241
-4 5242 5243 5244 5245
-4 5050 5246 5247 5051
-4 5248 5249 5250 5251
-4 5252 5253 5254 5255
-4 5256 5257 5258 5259
-4 5260 5261 5262 5263
-4 5264 5265 5266 5267
-4 5268 5269 5270 5271
-4 5272 5273 5274 5275
-4 5276 5277 5278 5279
-4 5280 5281 5282 5283
-4 5284 5285 5286 5287
-4 5288 5289 5290 5291
-4 5292 5293 5294 5295
-4 5296 5297 5298 5299
-4 5300 5301 5302 5303
-4 5304 5305 5306 5307
-4 5308 5309 5310 5311
-4 5312 5313 5314 5315
-4 5316 5317 5318 5319
-4 5320 5321 5322 5323
-4 5324 5325 5326 5327
-4 5328 5329 5330 5331
-4 5332 5333 5334 5335
-4 5336 5337 5338 5339
-4 5340 5341 5342 5343
-4 5148 5344 5345 5149
-4 5346 5347 5348 5349
-4 5350 5351 5352 5353
-4 5354 5355 5356 5357
-4 5358 5359 5360 5361
-4 5362 5363 5364 5365
-4 5366 5367 5368 5369
-4 5370 5371 5372 5373
-4 5374 5375 5376 5377
-4 5378 5379 5380 5381
-4 5382 5383 5384 5385
-4 5386 5387 5388 5389
-4 5390 5391 5392 5393
-4 5394 5395 5396 5397
-4 5398 5399 5400 5401
-4 5402 5403 5404 5405
-4 5406 5407 5408 5409
-4 5410 5411 5412 5413
-4 5414 5415 5416 5417
-4 5418 5419 5420 5421
-4 5422 5423 5424 5425
-4 5426 5427 5428 5429
-4 5430 5431 5432 5433
-4 5434 5435 5436 5437
-4 5438 5439 5440 5441
-4 5246 5442 5443 5247
-4 5444 5445 5446 5447
-4 5448 5449 5450 5451
-4 5452 5453 5454 5455
-4 5456 5457 5458 5459
-4 5460 5461 5462 5463
-4 5464 5465 5466 5467
-4 5468 5469 5470 5471
-4 5472 5473 5474 5475
-4 5476 5477 5478 5479
-4 5480 5481 5482 5483
-4 5484 5485 5486 5487
-4 5488 5489 5490 5491
-4 5492 5493 5494 5495
-4 5496 5497 5498 5499
-4 5500 5501 5502 5503
-4 5504 5505 5506 5507
-4 5508 5509 5510 5511
-4 5512 5513 5514 5515
-4 5516 5517 5518 5519
-4 5520 5521 5522 5523
-4 5524 5525 5526 5527
-4 5528 5529 5530 5531
-4 5532 5533 5534 5535
-4 5536 5537 5538 5539
-4 5344 5540 5541 5345
-4 5542 5543 5544 5545
-4 5546 5547 5548 5549
-4 5550 5551 5552 5553
-4 5554 5555 5556 5557
-4 5558 5559 5560 5561
-4 5562 5563 5564 5565
-4 5566 5567 5568 5569
-4 5570 5571 5572 5573
-4 5574 5575 5576 5577
-4 5578 5579 5580 5581
-4 5582 5583 5584 5585
-4 5586 5587 5588 5589
-4 5590 5591 5592 5593
-4 5594 5595 5596 5597
-4 5598 5599 5600 5601
-4 5602 5603 5604 5605
-4 5606 5607 5608 5609
-4 5610 5611 5612 5613
-4 5614 5615 5616 5617
-4 5618 5619 5620 5621
-4 5622 5623 5624 5625
-4 5626 5627 5628 5629
-4 5630 5631 5632 5633
-4 5634 5635 5636 5637
-4 5442 5638 5639 5443
-4 5640 5641 5642 5643
-4 5644 5645 5646 5647
-4 5648 5649 5650 5651
-4 5652 5653 5654 5655
-4 5656 5657 5658 5659
-4 5660 5661 5662 5663
-4 5664 5665 5666 5667
-4 5668 5669 5670 5671
-4 5672 5673 5674 5675
-4 5676 5677 5678 5679
-4 5680 5681 5682 5683
-4 5684 5685 5686 5687
-4 5688 5689 5690 5691
-4 5692 5693 5694 5695
-4 5696 5697 5698 5699
-4 5700 5701 5702 5703
-4 5704 5705 5706 5707
-4 5708 5709 5710 5711
-4 5712 5713 5714 5715
-4 5716 5717 5718 5719
-4 5720 5721 5722 5723
-4 5724 5725 5726 5727
-4 5728 5729 5730 5731
-4 5732 5733 5734 5735
-4 5540 5736 5737 5541
-4 5738 5739 5740 5741
-4 5742 5743 5744 5745
-4 5746 5747 5748 5749
-4 5750 5751 5752 5753
-4 5754 5755 5756 5757
-4 5758 5759 5760 5761
-4 5762 5763 5764 5765
-4 5766 5767 5768 5769
-4 5770 5771 5772 5773
-4 5774 5775 5776 5777
-4 5778 5779 5780 5781
-4 5782 5783 5784 5785
-4 5786 5787 5788 5789
-4 5790 5791 5792 5793
-4 5794 5795 5796 5797
-4 5798 5799 5800 5801
-4 5802 5803 5804 5805
-4 5806 5807 5808 5809
-4 5810 5811 5812 5813
-4 5814 5815 5816 5817
-4 5818 5819 5820 5821
-4 5822 5823 5824 5825
-4 5826 5827 5828 5829
-4 5830 5831 5832 5833
-4 5638 5834 5835 5639
-4 5836 5837 5838 5839
-4 5840 5841 5842 5843
-4 5844 5845 5846 5847
-4 5848 5849 5850 5851
-4 5852 5853 5854 5855
-4 5856 5857 5858 5859
-4 5860 5861 5862 5863
-4 5864 5865 5866 5867
-4 5868 5869 5870 5871
-4 5872 5873 5874 5875
-4 5876 5877 5878 5879
-4 5880 5881 5882 5883
-4 5884 5885 5886 5887
-4 5888 5889 5890 5891
-4 5892 5893 5894 5895
-4 5896 5897 5898 5899
-4 5900 5901 5902 5903
-4 5904 5905 5906 5907
-4 5908 5909 5910 5911
-4 5912 5913 5914 5915
-4 5916 5917 5918 5919
-4 5920 5921 5922 5923
-4 5924 5925 5926 5927
-4 5928 5929 5930 5931
-4 5736 5932 5933 5737
-4 5934 5935 5936 5937
-4 5938 5939 5940 5941
-4 5942 5943 5944 5945
-4 5946 5947 5948 5949
-4 5950 5951 5952 5953
-4 5954 5955 5956 5957
-4 5958 5959 5960 5961
-4 5962 5963 5964 5965
-4 5966 5967 5968 5969
-4 5970 5971 5972 5973
-4 5974 5975 5976 5977
-4 5978 5979 5980 5981
-4 5982 5983 5984 5985
-4 5986 5987 5988 5989
-4 5990 5991 5992 5993
-4 5994 5995 5996 5997
-4 5998 5999 6000 6001
-4 6002 6003 6004 6005
-4 6006 6007 6008 6009
-4 6010 6011 6012 6013
-4 6014 6015 6016 6017
-4 6018 6019 6020 6021
-4 6022 6023 6024 6025
-4 6026 6027 6028 6029
-4 5834 6030 6031 5835
-4 6032 6033 6034 6035
-4 6036 6037 6038 6039
-4 6040 6041 6042 6043
-4 6044 6045 6046 6047
-4 6048 6049 6050 6051
-4 6052 6053 6054 6055
-4 6056 6057 6058 6059
-4 6060 6061 6062 6063
-4 6064 6065 6066 6067
-4 6068 6069 6070 6071
-4 6072 6073 6074 6075
-4 6076 6077 6078 6079
-4 6080 6081 6082 6083
-4 6084 6085 6086 6087
-4 6088 6089 6090 6091
-4 6092 6093 6094 6095
-4 6096 6097 6098 6099
-4 6100 6101 6102 6103
-4 6104 6105 6106 6107
-4 6108 6109 6110 6111
-4 6112 6113 6114 6115
-4 6116 6117 6118 6119
-4 6120 6121 6122 6123
-4 6124 6125 6126 6127
-4 5932 6128 6129 5933
-4 6130 6131 6132 6133
-4 6134 6135 6136 6137
-4 6138 6139 6140 6141
-4 6142 6143 6144 6145
-4 6146 6147 6148 6149
-4 6150 6151 6152 6153
-4 6154 6155 6156 6157
-4 6158 6159 6160 6161
-4 6162 6163 6164 6165
-4 6166 6167 6168 6169
-4 6170 6171 6172 6173
-4 6174 6175 6176 6177
-4 6178 6179 6180 6181
-4 6182 6183 6184 6185
-4 6186 6187 6188 6189
-4 6190 6191 6192 6193
-4 6194 6195 6196 6197
-4 6198 6199 6200 6201
-4 6202 6203 6204 6205
-4 6206 6207 6208 6209
-4 6210 6211 6212 6213
-4 6214 6215 6216 6217
-4 6218 6219 6220 6221
-4 6222 6223 6224 6225
-4 6030 6226 6227 6031
-4 6228 6229 6230 6231
-4 6232 6233 6234 6235
-4 6236 6237 6238 6239
-4 6240 6241 6242 6243
-4 6244 6245 6246 6247
-4 6248 6249 6250 6251
-4 6252 6253 6254 6255
-4 6256 6257 6258 6259
-4 6260 6261 6262 6263
-4 6264 6265 6266 6267
-4 6268 6269 6270 6271
-4 6272 6273 6274 6275
-4 6276 6277 6278 6279
-4 6280 6281 6282 6283
-4 6284 6285 6286 6287
-4 6288 6289 6290 6291
-4 6292 6293 6294 6295
-4 6296 6297 6298 6299
-4 6300 6301 6302 6303
-4 6304 6305 6306 6307
-4 6308 6309 6310 6311
-4 6312 6313 6314 6315
-4 6316 6317 6318 6319
-4 6320 6321 6322 6323
-4 6128 6324 6325 6129
-4 6326 6327 6328 6329
-4 6330 6331 6332 6333
-4 6334 6335 6336 6337
-4 6338 6339 6340 6341
-4 6342 6343 6344 6345
-4 6346 6347 6348 6349
-4 6350 6351 6352 6353
-4 6354 6355 6356 6357
-4 6358 6359 6360 6361
-4 6362 6363 6364 6365
-4 6366 6367 6368 6369
-4 6370 6371 6372 6373
-4 6374 6375 6376 6377
-4 6378 6379 6380 6381
-4 6382 6383 6384 6385
-4 6386 6387 6388 6389
-4 6390 6391 6392 6393
-4 6394 6395 6396 6397
-4 6398 6399 6400 6401
-4 6402 6403 6404 6405
-4 6406 6407 6408 6409
-4 6410 6411 6412 6413
-4 6414 6415 6416 6417
-4 6418 6419 6420 6421
-4 6226 6422 6423 6227
-4 6424 6425 6426 6427
-4 6428 6429 6430 6431
-4 6432 6433 6434 6435
-4 6436 6437 6438 6439
-4 6440 6441 6442 6443
-4 6444 6445 6446 6447
-4 6448 6449 6450 6451
-4 6452 6453 6454 6455
-4 6456 6457 6458 6459
-4 6460 6461 6462 6463
-4 6464 6465 6466 6467
-4 6468 6469 6470 6471
-4 6472 6473 6474 6475
-4 6476 6477 6478 6479
-4 6480 6481 6482 6483
-4 6484 6485 6486 6487
-4 6488 6489 6490 6491
-4 6492 6493 6494 6495
-4 6496 6497 6498 6499
-4 6500 6501 6502 6503
-4 6504 6505 6506 6507
-4 6508 6509 6510 6511
-4 6512 6513 6514 6515
-4 6516 6517 6518 6519
-4 6324 6520 6521 6325
-4 6522 6523 6524 6525
-4 6526 6527 6528 6529
-4 6530 6531 6532 6533
-4 6534 6535 6536 6537
-4 6538 6539 6540 6541
-4 6542 6543 6544 6545
-4 6546 6547 6548 6549
-4 6550 6551 6552 6553
-4 6554 6555 6556 6557
-4 6558 6559 6560 6561
-4 6562 6563 6564 6565
-4 6566 6567 6568 6569
-4 6570 6571 6572 6573
-4 6574 6575 6576 6577
-4 6578 6579 6580 6581
-4 6582 6583 6584 6585
-4 6586 6587 6588 6589
-4 6590 6591 6592 6593
-4 6594 6595 6596 6597
-4 6598 6599 6600 6601
-4 6602 6603 6604 6605
-4 6606 6607 6608 6609
-4 6610 6611 6612 6613
-4 6614 6615 6616 6617
-4 6422 6618 6619 6423
-4 6620 6621 6622 6623
-4 6624 6625 6626 6627
-4 6628 6629 6630 6631
-4 6632 6633 6634 6635
-4 6636 6637 6638 6639
-4 6640 6641 6642 6643
-4 6644 6645 6646 6647
-4 6648 6649 6650 6651
-4 6652 6653 6654 6655
-4 6656 6657 6658 6659
-4 6660 6661 6662 6663
-4 6664 6665 6666 6667
-4 6668 6669 6670 6671
-4 6672 6673 6674 6675
-4 6676 6677 6678 6679
-4 6680 6681 6682 6683
-4 6684 6685 6686 6687
-4 6688 6689 6690 6691
-4 6692 6693 6694 6695
-4 6696 6697 6698 6699
-4 6700 6701 6702 6703
-4 6704 6705 6706 6707
-4 6708 6709 6710 6711
-4 6712 6713 6714 6715
-4 6520 6716 6717 6521
-4 6718 6719 6720 6721
-4 6722 6723 6724 6725
-4 6726 6727 6728 6729
-4 6730 6731 6732 6733
-4 6734 6735 6736 6737
-4 6738 6739 6740 6741
-4 6742 6743 6744 6745
-4 6746 6747 6748 6749
-4 6750 6751 6752 6753
-4 6754 6755 6756 6757
-4 6758 6759 6760 6761
-4 6762 6763 6764 6765
-4 6766 6767 6768 6769
-4 6770 6771 6772 6773
-4 6774 6775 6776 6777
-4 6778 6779 6780 6781
-4 6782 6783 6784 6785
-4 6786 6787 6788 6789
-4 6790 6791 6792 6793
-4 6794 6795 6796 6797
-4 6798 6799 6800 6801
-4 6802 6803 6804 6805
-4 6806 6807 6808 6809
-4 6810 6811 6812 6813
-4 6618 6814 6815 6619
-4 6816 6817 6818 6819
-4 6820 6821 6822 6823
-4 6824 6825 6826 6827
-4 6828 6829 6830 6831
-4 6832 6833 6834 6835
-4 6836 6837 6838 6839
-4 6840 6841 6842 6843
-4 6844 6845 6846 6847
-4 6848 6849 6850 6851
-4 6852 6853 6854 6855
-4 6856 6857 6858 6859
-4 6860 6861 6862 6863
-4 6864 6865 6866 6867
-4 6868 6869 6870 6871
-4 6872 6873 6874 6875
-4 6876 6877 6878 6879
-4 6880 6881 6882 6883
-4 6884 6885 6886 6887
-4 6888 6889 6890 6891
-4 6892 6893 6894 6895
-4 6896 6897 6898 6899
-4 6900 6901 6902 6903
-4 6904 6905 6906 6907
-4 6908 6909 6910 6911
-4 6716 6912 6913 6717
-4 6914 6915 6916 6917
-4 6918 6919 6920 6921
-4 6922 6923 6924 6925
-4 6926 6927 6928 6929
-4 6930 6931 6932 6933
-4 6934 6935 6936 6937
-4 6938 6939 6940 6941
-4 6942 6943 6944 6945
-4 6946 6947 6948 6949
-4 6950 6951 6952 6953
-4 6954 6955 6956 6957
-4 6958 6959 6960 6961
-4 6962 6963 6964 6965
-4 6966 6967 6968 6969
-4 6970 6971 6972 6973
-4 6974 6975 6976 6977
-4 6978 6979 6980 6981
-4 6982 6983 6984 6985
-4 6986 6987 6988 6989
-4 6990 6991 6992 6993
-4 6994 6995 6996 6997
-4 6998 6999 7000 7001
-4 7002 7003 7004 7005
-4 7006 7007 7008 7009
-4 6814 7010 7011 6815
-4 7012 7013 7014 7015
-4 7016 7017 7018 7019
-4 7020 7021 7022 7023
-4 7024 7025 7026 7027
-4 7028 7029 7030 7031
-4 7032 7033 7034 7035
-4 7036 7037 7038 7039
-4 7040 7041 7042 7043
-4 7044 7045 7046 7047
-4 7048 7049 7050 7051
-4 7052 7053 7054 7055
-4 7056 7057 7058 7059
-4 7060 7061 7062 7063
-4 7064 7065 7066 7067
-4 7068 7069 7070 7071
-4 7072 7073 7074 7075
-4 7076 7077 7078 7079
-4 7080 7081 7082 7083
-4 7084 7085 7086 7087
-4 7088 7089 7090 7091
-4 7092 7093 7094 7095
-4 7096 7097 7098 7099
-4 7100 7101 7102 7103
-4 7104 7105 7106 7107
-4 6912 7108 7109 6913
-4 7110 7111 7112 7113
-4 7114 7115 7116 7117
-4 7118 7119 7120 7121
-4 7122 7123 7124 7125
-4 7126 7127 7128 7129
-4 7130 7131 7132 7133
-4 7134 7135 7136 7137
-4 7138 7139 7140 7141
-4 7142 7143 7144 7145
-4 7146 7147 7148 7149
-4 7150 7151 7152 7153
-4 7154 7155 7156 7157
-4 7158 7159 7160 7161
-4 7162 7163 7164 7165
-4 7166 7167 7168 7169
-4 7170 7171 7172 7173
-4 7174 7175 7176 7177
-4 7178 7179 7180 7181
-4 7182 7183 7184 7185
-4 7186 7187 7188 7189
-4 7190 7191 7192 7193
-4 7194 7195 7196 7197
-4 7198 7199 7200 7201
-4 7202 7203 7204 7205
-4 7010 7206 7207 7011
-4 7208 7209 7210 7211
-4 7212 7213 7214 7215
-4 7216 7217 7218 7219
-4 7220 7221 7222 7223
-4 7224 7225 7226 7227
-4 7228 7229 7230 7231
-4 7232 7233 7234 7235
-4 7236 7237 7238 7239
-4 7240 7241 7242 7243
-4 7244 7245 7246 7247
-4 7248 7249 7250 7251
-4 7252 7253 7254 7255
-4 7256 7257 7258 7259
-4 7260 7261 7262 7263
-4 7264 7265 7266 7267
-4 7268 7269 7270 7271
-4 7272 7273 7274 7275
-4 7276 7277 7278 7279
-4 7280 7281 7282 7283
-4 7284 7285 7286 7287
-4 7288 7289 7290 7291
-4 7292 7293 7294 7295
-4 7296 7297 7298 7299
-4 7300 7301 7302 7303
-4 7108 7304 7305 7109
-4 7306 7307 7308 7309
-4 7310 7311 7312 7313
-4 7314 7315 7316 7317
-4 7318 7319 7320 7321
-4 7322 7323 7324 7325
-4 7326 7327 7328 7329
-4 7330 7331 7332 7333
-4 7334 7335 7336 7337
-4 7338 7339 7340 7341
-4 7342 7343 7344 7345
-4 7346 7347 7348 7349
-4 7350 7351 7352 7353
-4 7354 7355 7356 7357
-4 7358 7359 7360 7361
-4 7362 7363 7364 7365
-4 7366 7367 7368 7369
-4 7370 7371 7372 7373
-4 7374 7375 7376 7377
-4 7378 7379 7380 7381
-4 7382 7383 7384 7385
-4 7386 7387 7388 7389
-4 7390 7391 7392 7393
-4 7394 7395 7396 7397
-4 7398 7399 7400 7401
-4 7206 7402 7403 7207
-4 7404 7405 7406 7407
-4 7408 7409 7410 7411
-4 7412 7413 7414 7415
-4 7416 7417 7418 7419
-4 7420 7421 7422 7423
-4 7424 7425 7426 7427
-4 7428 7429 7430 7431
-4 7432 7433 7434 7435
-4 7436 7437 7438 7439
-4 7440 7441 7442 7443
-4 7444 7445 7446 7447
-4 7448 7449 7450 7451
-4 7452 7453 7454 7455
-4 7456 7457 7458 7459
-4 7460 7461 7462 7463
-4 7464 7465 7466 7467
-4 7468 7469 7470 7471
-4 7472 7473 7474 7475
-4 7476 7477 7478 7479
-4 7480 7481 7482 7483
-4 7484 7485 7486 7487
-4 7488 7489 7490 7491
-4 7492 7493 7494 7495
-4 7496 7497 7498 7499
-4 7304 7500 7501 7305
-4 7502 7503 7504 7505
-4 7506 7507 7508 7509
-4 7510 7511 7512 7513
-4 7514 7515 7516 7517
-4 7518 7519 7520 7521
-4 7522 7523 7524 7525
-4 7526 7527 7528 7529
-4 7530 7531 7532 7533
-4 7534 7535 7536 7537
-4 7538 7539 7540 7541
-4 7542 7543 7544 7545
-4 7546 7547 7548 7549
-4 7550 7551 7552 7553
-4 7554 7555 7556 7557
-4 7558 7559 7560 7561
-4 7562 7563 7564 7565
-4 7566 7567 7568 7569
-4 7570 7571 7572 7573
-4 7574 7575 7576 7577
-4 7578 7579 7580 7581
-4 7582 7583 7584 7585
-4 7586 7587 7588 7589
-4 7590 7591 7592 7593
-4 7594 7595 7596 7597
-4 7402 7598 7599 7403
-4 7600 7601 7602 7603
-4 7604 7605 7606 7607
-4 7608 7609 7610 7611
-4 7612 7613 7614 7615
-4 7616 7617 7618 7619
-4 7620 7621 7622 7623
-4 7624 7625 7626 7627
-4 7628 7629 7630 7631
-4 7632 7633 7634 7635
-4 7636 7637 7638 7639
-4 7640 7641 7642 7643
-4 7644 7645 7646 7647
-4 7648 7649 7650 7651
-4 7652 7653 7654 7655
-4 7656 7657 7658 7659
-4 7660 7661 7662 7663
-4 7664 7665 7666 7667
-4 7668 7669 7670 7671
-4 7672 7673 7674 7675
-4 7676 7677 7678 7679
-4 7680 7681 7682 7683
-4 7684 7685 7686 7687
-4 7688 7689 7690 7691
-4 7692 7693 7694 7695
-4 7500 7696 7697 7501
-4 7698 7699 7700 7701
-4 7702 7703 7704 7705
-4 7706 7707 7708 7709
-4 7710 7711 7712 7713
-4 7714 7715 7716 7717
-4 7718 7719 7720 7721
-4 7722 7723 7724 7725
-4 7726 7727 7728 7729
-4 7730 7731 7732 7733
-4 7734 7735 7736 7737
-4 7738 7739 7740 7741
-4 7742 7743 7744 7745
-4 7746 7747 7748 7749
-4 7750 7751 7752 7753
-4 7754 7755 7756 7757
-4 7758 7759 7760 7761
-4 7762 7763 7764 7765
-4 7766 7767 7768 7769
-4 7770 7771 7772 7773
-4 7774 7775 7776 7777
-4 7778 7779 7780 7781
-4 7782 7783 7784 7785
-4 7786 7787 7788 7789
-4 7790 7791 7792 7793
-4 7598 7794 7795 7599
-4 7796 7797 7798 7799
-4 7800 7801 7802 7803
-4 7804 7805 7806 7807
-4 7808 7809 7810 7811
-4 7812 7813 7814 7815
-4 7816 7817 7818 7819
-4 7820 7821 7822 7823
-4 7824 7825 7826 7827
-4 7828 7829 7830 7831
-4 7832 7833 7834 7835
-4 7836 7837 7838 7839
-4 7840 7841 7842 7843
-4 7844 7845 7846 7847
-4 7848 7849 7850 7851
-4 7852 7853 7854 7855
-4 7856 7857 7858 7859
-4 7860 7861 7862 7863
-4 7864 7865 7866 7867
-4 7868 7869 7870 7871
-4 7872 7873 7874 7875
-4 7876 7877 7878 7879
-4 7880 7881 7882 7883
-4 7884 7885 7886 7887
-4 7888 7889 7890 7891
-4 7696 7892 7893 7697
-4 7894 7895 7896 7897
-4 7898 7899 7900 7901
-4 7902 7903 7904 7905
-4 7906 7907 7908 7909
-4 7910 7911 7912 7913
-4 7914 7915 7916 7917
-4 7918 7919 7920 7921
-4 7922 7923 7924 7925
-4 7926 7927 7928 7929
-4 7930 7931 7932 7933
-4 7934 7935 7936 7937
-4 7938 7939 7940 7941
-4 7942 7943 7944 7945
-4 7946 7947 7948 7949
-4 7950 7951 7952 7953
-4 7954 7955 7956 7957
-4 7958 7959 7960 7961
-4 7962 7963 7964 7965
-4 7966 7967 7968 7969
-4 7970 7971 7972 7973
-4 7974 7975 7976 7977
-4 7978 7979 7980 7981
-4 7982 7983 7984 7985
-4 7986 7987 7988 7989
-4 7794 7990 7991 7795
-4 7992 7993 7994 7995
-4 7996 7997 7998 7999
-4 8000 8001 8002 8003
-4 8004 8005 8006 8007
-4 8008 8009 8010 8011
-4 8012 8013 8014 8015
-4 8016 8017 8018 8019
-4 8020 8021 8022 8023
-4 8024 8025 8026 8027
-4 8028 8029 8030 8031
-4 8032 8033 8034 8035
-4 8036 8037 8038 8039
-4 8040 8041 8042 8043
-4 8044 8045 8046 8047
-4 8048 8049 8050 8051
-4 8052 8053 8054 8055
-4 8056 8057 8058 8059
-4 8060 8061 8062 8063
-4 8064 8065 8066 8067
-4 8068 8069 8070 8071
-4 8072 8073 8074 8075
-4 8076 8077 8078 8079
-4 8080 8081 8082 8083
-4 8084 8085 8086 8087
-4 7892 8088 8089 7893
-4 8090 8091 8092 8093
-4 8094 8095 8096 8097
-4 8098 8099 8100 8101
-4 8102 8103 8104 8105
-4 8106 8107 8108 8109
-4 8110 8111 8112 8113
-4 8114 8115 8116 8117
-4 8118 8119 8120 8121
-4 8122 8123 8124 8125
-4 8126 8127 8128 8129
-4 8130 8131 8132 8133
-4 8134 8135 8136 8137
-4 8138 8139 8140 8141
-4 8142 8143 8144 8145
-4 8146 8147 8148 8149
-4 8150 8151 8152 8153
-4 8154 8155 8156 8157
-4 8158 8159 8160 8161
-4 8162 8163 8164 8165
-4 8166 8167 8168 8169
-4 8170 8171 8172 8173
-4 8174 8175 8176 8177
-4 8178 8179 8180 8181
-4 8182 8183 8184 8185
-4 7990 8186 8187 7991
-4 8188 8189 8190 8191
-4 8192 8193 8194 8195
-4 8196 8197 8198 8199
-4 8200 8201 8202 8203
-4 8204 8205 8206 8207
-4 8208 8209 8210 8211
-4 8212 8213 8214 8215
-4 8216 8217 8218 8219
-4 8220 8221 8222 8223
-4 8224 8225 8226 8227
-4 8228 8229 8230 8231
-4 8232 8233 8234 8235
-4 8236 8237 8238 8239
-4 8240 8241 8242 8243
-4 8244 8245 8246 8247
-4 8248 8249 8250 8251
-4 8252 8253 8254 8255
-4 8256 8257 8258 8259
-4 8260 8261 8262 8263
-4 8264 8265 8266 8267
-4 8268 8269 8270 8271
-4 8272 8273 8274 8275
-4 8276 8277 8278 8279
-4 8280 8281 8282 8283
-4 8088 8284 8285 8089
-4 8286 8287 8288 8289
-4 8290 8291 8292 8293
-4 8294 8295 8296 8297
-4 8298 8299 8300 8301
-4 8302 8303 8304 8305
-4 8306 8307 8308 8309
-4 8310 8311 8312 8313
-4 8314 8315 8316 8317
-4 8318 8319 8320 8321
-4 8322 8323 8324 8325
-4 8326 8327 8328 8329
-4 8330 8331 8332 8333
-4 8334 8335 8336 8337
-4 8338 8339 8340 8341
-4 8342 8343 8344 8345
-4 8346 8347 8348 8349
-4 8350 8351 8352 8353
-4 8354 8355 8356 8357
-4 8358 8359 8360 8361
-4 8362 8363 8364 8365
-4 8366 8367 8368 8369
-4 8370 8371 8372 8373
-4 8374 8375 8376 8377
-4 8378 8379 8380 8381
-4 8186 8382 8383 8187
-4 8384 8385 8386 8387
-4 8388 8389 8390 8391
-4 8392 8393 8394 8395
-4 8396 8397 8398 8399
-4 8400 8401 8402 8403
-4 8404 8405 8406 8407
-4 8408 8409 8410 8411
-4 8412 8413 8414 8415
-4 8416 8417 8418 8419
-4 8420 8421 8422 8423
-4 8424 8425 8426 8427
-4 8428 8429 8430 8431
-4 8432 8433 8434 8435
-4 8436 8437 8438 8439
-4 8440 8441 8442 8443
-4 8444 8445 8446 8447
-4 8448 8449 8450 8451
-4 8452 8453 8454 8455
-4 8456 8457 8458 8459
-4 8460 8461 8462 8463
-4 8464 8465 8466 8467
-4 8468 8469 8470 8471
-4 8472 8473 8474 8475
-4 8476 8477 8478 8479
-4 8284 8480 8481 8285
-4 8482 8483 8484 8485
-4 8486 8487 8488 8489
-4 8490 8491 8492 8493
-4 8494 8495 8496 8497
-4 8498 8499 8500 8501
-4 8502 8503 8504 8505
-4 8506 8507 8508 8509
-4 8510 8511 8512 8513
-4 8514 8515 8516 8517
-4 8518 8519 8520 8521
-4 8522 8523 8524 8525
-4 8526 8527 8528 8529
-4 8530 8531 8532 8533
-4 8534 8535 8536 8537
-4 8538 8539 8540 8541
-4 8542 8543 8544 8545
-4 8546 8547 8548 8549
-4 8550 8551 8552 8553
-4 8554 8555 8556 8557
-4 8558 8559 8560 8561
-4 8562 8563 8564 8565
-4 8566 8567 8568 8569
-4 8570 8571 8572 8573
-4 8574 8575 8576 8577
-4 8382 8578 8579 8383
-4 8580 8581 8582 8583
-4 8584 8585 8586 8587
-4 8588 8589 8590 8591
-4 8592 8593 8594 8595
-4 8596 8597 8598 8599
-4 8600 8601 8602 8603
-4 8604 8605 8606 8607
-4 8608 8609 8610 8611
-4 8612 8613 8614 8615
-4 8616 8617 8618 8619
-4 8620 8621 8622 8623
-4 8624 8625 8626 8627
-4 8628 8629 8630 8631
-4 8632 8633 8634 8635
-4 8636 8637 8638 8639
-4 8640 8641 8642 8643
-4 8644 8645 8646 8647
-4 8648 8649 8650 8651
-4 8652 8653 8654 8655
-4 8656 8657 8658 8659
-4 8660 8661 8662 8663
-4 8664 8665 8666 8667
-4 8668 8669 8670 8671
-4 8672 8673 8674 8675
-4 8480 8676 8677 8481
-4 8678 8679 8680 8681
-4 8682 8683 8684 8685
-4 8686 8687 8688 8689
-4 8690 8691 8692 8693
-4 8694 8695 8696 8697
-4 8698 8699 8700 8701
-4 8702 8703 8704 8705
-4 8706 8707 8708 8709
-4 8710 8711 8712 8713
-4 8714 8715 8716 8717
-4 8718 8719 8720 8721
-4 8722 8723 8724 8725
-4 8726 8727 8728 8729
-4 8730 8731 8732 8733
-4 8734 8735 8736 8737
-4 8738 8739 8740 8741
-4 8742 8743 8744 8745
-4 8746 8747 8748 8749
-4 8750 8751 8752 8753
-4 8754 8755 8756 8757
-4 8758 8759 8760 8761
-4 8762 8763 8764 8765
-4 8766 8767 8768 8769
-4 8770 8771 8772 8773
-4 8578 8774 8775 8579
-4 8776 8777 8778 8779
-4 8780 8781 8782 8783
-4 8784 8785 8786 8787
-4 8788 8789 8790 8791
-4 8792 8793 8794 8795
-4 8796 8797 8798 8799
-4 8800 8801 8802 8803
-4 8804 8805 8806 8807
-4 8808 8809 8810 8811
-4 8812 8813 8814 8815
-4 8816 8817 8818 8819
-4 8820 8821 8822 8823
-4 8824 8825 8826 8827
-4 8828 8829 8830 8831
-4 8832 8833 8834 8835
-4 8836 8837 8838 8839
-4 8840 8841 8842 8843
-4 8844 8845 8846 8847
-4 8848 8849 8850 8851
-4 8852 8853 8854 8855
-4 8856 8857 8858 8859
-4 8860 8861 8862 8863
-4 8864 8865 8866 8867
-4 8868 8869 8870 8871
-4 8676 8872 8873 8677
-4 8874 8875 8876 8877
-4 8878 8879 8880 8881
-4 8882 8883 8884 8885
-4 8886 8887 8888 8889
-4 8890 8891 8892 8893
-4 8894 8895 8896 8897
-4 8898 8899 8900 8901
-4 8902 8903 8904 8905
-4 8906 8907 8908 8909
-4 8910 8911 8912 8913
-4 8914 8915 8916 8917
-4 8918 8919 8920 8921
-4 8922 8923 8924 8925
-4 8926 8927 8928 8929
-4 8930 8931 8932 8933
-4 8934 8935 8936 8937
-4 8938 8939 8940 8941
-4 8942 8943 8944 8945
-4 8946 8947 8948 8949
-4 8950 8951 8952 8953
-4 8954 8955 8956 8957
-4 8958 8959 8960 8961
-4 8962 8963 8964 8965
-4 8966 8967 8968 8969
-4 8774 8970 8971 8775
-4 8972 8973 8974 8975
-4 8976 8977 8978 8979
-4 8980 8981 8982 8983
-4 8984 8985 8986 8987
-4 8988 8989 8990 8991
-4 8992 8993 8994 8995
-4 8996 8997 8998 8999
-4 9000 9001 9002 9003
-4 9004 9005 9006 9007
-4 9008 9009 9010 9011
-4 9012 9013 9014 9015
-4 9016 9017 9018 9019
-4 9020 9021 9022 9023
-4 9024 9025 9026 9027
-4 9028 9029 9030 9031
-4 9032 9033 9034 9035
-4 9036 9037 9038 9039
-4 9040 9041 9042 9043
-4 9044 9045 9046 9047
-4 9048 9049 9050 9051
-4 9052 9053 9054 9055
-4 9056 9057 9058 9059
-4 9060 9061 9062 9063
-4 9064 9065 9066 9067
-4 8872 9068 9069 8873
-4 9070 9071 9072 9073
-4 9074 9075 9076 9077
-4 9078 9079 9080 9081
-4 9082 9083 9084 9085
-4 9086 9087 9088 9089
-4 9090 9091 9092 9093
-4 9094 9095 9096 9097
-4 9098 9099 9100 9101
-4 9102 9103 9104 9105
-4 9106 9107 9108 9109
-4 9110 9111 9112 9113
-4 9114 9115 9116 9117
-4 9118 9119 9120 9121
-4 9122 9123 9124 9125
-4 9126 9127 9128 9129
-4 9130 9131 9132 9133
-4 9134 9135 9136 9137
-4 9138 9139 9140 9141
-4 9142 9143 9144 9145
-4 9146 9147 9148 9149
-4 9150 9151 9152 9153
-4 9154 9155 9156 9157
-4 9158 9159 9160 9161
-4 9162 9163 9164 9165
-4 8970 9166 9167 8971
-4 9168 9169 9170 9171
-4 9172 9173 9174 9175
-4 9176 9177 9178 9179
-4 9180 9181 9182 9183
-4 9184 9185 9186 9187
-4 9188 9189 9190 9191
-4 9192 9193 9194 9195
-4 9196 9197 9198 9199
-4 9200 9201 9202 9203
-4 9204 9205 9206 9207
-4 9208 9209 9210 9211
-4 9212 9213 9214 9215
-4 9216 9217 9218 9219
-4 9220 9221 9222 9223
-4 9224 9225 9226 9227
-4 9228 9229 9230 9231
-4 9232 9233 9234 9235
-4 9236 9237 9238 9239
-4 9240 9241 9242 9243
-4 9244 9245 9246 9247
-4 9248 9249 9250 9251
-4 9252 9253 9254 9255
-4 9256 9257 9258 9259
-4 9260 9261 9262 9263
-4 9068 9264 9265 9069
-4 9266 9267 9268 9269
-4 9270 9271 9272 9273
-4 9274 9275 9276 9277
-4 9278 9279 9280 9281
-4 9282 9283 9284 9285
-4 9286 9287 9288 9289
-4 9290 9291 9292 9293
-4 9294 9295 9296 9297
-4 9298 9299 9300 9301
-4 9302 9303 9304 9305
-4 9306 9307 9308 9309
-4 9310 9311 9312 9313
-4 9314 9315 9316 9317
-4 9318 9319 9320 9321
-4 9322 9323 9324 9325
-4 9326 9327 9328 9329
-4 9330 9331 9332 9333
-4 9334 9335 9336 9337
-4 9338 9339 9340 9341
-4 9342 9343 9344 9345
-4 9346 9347 9348 9349
-4 9350 9351 9352 9353
-4 9354 9355 9356 9357
-4 9358 9359 9360 9361
-4 9166 9362 9363 9167
-4 9364 9365 9366 9367
-4 9368 9369 9370 9371
-4 9372 9373 9374 9375
-4 9376 9377 9378 9379
-4 9380 9381 9382 9383
-4 9384 9385 9386 9387
-4 9388 9389 9390 9391
-4 9392 9393 9394 9395
-4 9396 9397 9398 9399
-4 9400 9401 9402 9403
-4 9404 9405 9406 9407
-4 9408 9409 9410 9411
-4 9412 9413 9414 9415
-4 9416 9417 9418 9419
-4 9420 9421 9422 9423
-4 9424 9425 9426 9427
-4 9428 9429 9430 9431
-4 9432 9433 9434 9435
-4 9436 9437 9438 9439
-4 9440 9441 9442 9443
-4 9444 9445 9446 9447
-4 9448 9449 9450 9451
-4 9452 9453 9454 9455
-4 9456 9457 9458 9459
-4 9264 9460 9461 9265
-4 9462 9463 9464 9465
-4 9466 9467 9468 9469
-4 9470 9471 9472 9473
-4 9474 9475 9476 9477
-4 9478 9479 9480 9481
-4 9482 9483 9484 9485
-4 9486 9487 9488 9489
-4 9490 9491 9492 9493
-4 9494 9495 9496 9497
-4 9498 9499 9500 9501
-4 9502 9503 9504 9505
-4 9506 9507 9508 9509
-4 9510 9511 9512 9513
-4 9514 9515 9516 9517
-4 9518 9519 9520 9521
-4 9522 9523 9524 9525
-4 9526 9527 9528 9529
-4 9530 9531 9532 9533
-4 9534 9535 9536 9537
-4 9538 9539 9540 9541
-4 9542 9543 9544 9545
-4 9546 9547 9548 9549
-4 9550 9551 9552 9553
-4 9554 9555 9556 9557
-4 9362 9558 9559 9363
-4 9560 9561 9562 9563
-4 9564 9565 9566 9567
-4 9568 9569 9570 9571
-4 9572 9573 9574 9575
-4 9576 9577 9578 9579
-4 9580 9581 9582 9583
-4 9584 9585 9586 9587
-4 9588 9589 9590 9591
-4 9592 9593 9594 9595
-4 9596 9597 9598 9599
-4 9600 9601 9602 9603
-4 9604 9605 9606 9607
-4 9608 9609 9610 9611
-4 9612 9613 9614 9615
-4 9616 9617 9618 9619
-4 9620 9621 9622 9623
-4 9624 9625 9626 9627
-4 9628 9629 9630 9631
-4 9632 9633 9634 9635
-4 9636 9637 9638 9639
-4 9640 9641 9642 9643
-4 9644 9645 9646 9647
-4 9648 9649 9650 9651
-4 9652 9653 9654 9655
-4 9460 48 51 9461
-4 9656 9657 9658 9659
-4 9660 9661 9662 9663
-4 9664 9665 9666 9667
-4 9668 9669 9670 9671
-4 9672 9673 9674 9675
-4 9676 9677 9678 9679
-4 9680 9681 9682 9683
-4 9684 9685 9686 9687
-4 9688 9689 9690 9691
-4 9692 9693 9694 9695
-4 9696 9697 9698 9699
-4 9700 9701 9702 9703
-4 9704 9705 9706 9707
-4 9708 9709 9710 9711
-4 9712 9713 9714 9715
-4 9716 9717 9718 9719
-4 9720 9721 9722 9723
-4 9724 9725 9726 9727
-4 9728 9729 9730 9731
-4 9732 9733 9734 9735
-4 9736 9737 9738 9739
-4 9740 9741 9742 9743
-4 9744 9745 9746 9747
-4 9748 9749 9750 9751
-4 9558 148 151 9559
-4 9752 9753 9754 9755
-4 9756 9757 9758 9759
-4 9760 9761 9762 9763
-4 9764 9765 9766 9767
-4 9768 9769 9770 9771
-4 9772 9773 9774 9775
-4 9776 9777 9778 9779
-4 9780 9781 9782 9783
-4 9784 9785 9786 9787
-4 9788 9789 9790 9791
-4 9792 9793 9794 9795
-4 9796 9797 9798 9799
diff --git a/src/examples/evas/resources/models/convex_hull/torus_blender_ch_test.ply b/src/examples/evas/resources/models/convex_hull/torus_blender_ch_test.ply
deleted file mode 100644
index 5f62eafda7..0000000000
--- a/src/examples/evas/resources/models/convex_hull/torus_blender_ch_test.ply
+++ /dev/null
@@ -1,2556 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1250
-property float x
-property float y
-property float z
-element face 1296
-property list uchar uint vertex_indices
-end_header
-0.512862 0.000000 0.000000
-0.508818 0.064279 0.000000
-0.507481 0.064110 0.021426
-0.511514 0.000000 0.021426
-0.503490 0.063606 0.042515
-0.507491 0.000000 0.042515
-0.496908 0.062774 0.062932
-0.500857 0.000000 0.062932
-0.487839 0.061628 0.082358
-0.491716 0.000000 0.082358
-0.476426 0.060187 0.100484
-0.480213 0.000000 0.100484
-0.462850 0.058472 0.117026
-0.466528 0.000000 0.117026
-0.447323 0.056510 0.131722
-0.450878 0.000000 0.131722
-0.430092 0.054333 0.144341
-0.433510 0.000000 0.144341
-0.411427 0.051975 0.154684
-0.414697 0.000000 0.154684
-0.391623 0.049474 0.162587
-0.394736 0.000000 0.162587
-0.370993 0.046867 0.167926
-0.373942 0.000000 0.167926
-0.349862 0.044198 0.170617
-0.352643 0.000000 0.170617
-0.352643 0.000000 -0.170617
-0.349862 0.044198 -0.170617
-0.370993 0.046867 -0.167926
-0.373942 0.000000 -0.167926
-0.391623 0.049474 -0.162587
-0.394736 0.000000 -0.162587
-0.411427 0.051975 -0.154684
-0.414697 0.000000 -0.154684
-0.430092 0.054333 -0.144341
-0.433510 0.000000 -0.144341
-0.447323 0.056510 -0.131722
-0.450878 0.000000 -0.131722
-0.462850 0.058472 -0.117026
-0.466528 0.000000 -0.117026
-0.476426 0.060187 -0.100484
-0.480213 0.000000 -0.100484
-0.487839 0.061628 -0.082358
-0.491716 0.000000 -0.082358
-0.496908 0.062774 -0.062932
-0.500857 0.000000 -0.062932
-0.503490 0.063606 -0.042515
-0.507491 0.000000 -0.042515
-0.507481 0.064110 -0.021426
-0.511514 0.000000 -0.021426
-0.496750 0.127544 0.000000
-0.495444 0.127208 0.021426
-0.491548 0.126208 0.042515
-0.485122 0.124558 0.062932
-0.476268 0.122285 0.082358
-0.465126 0.119424 0.100484
-0.451872 0.116021 0.117026
-0.436713 0.112129 0.131722
-0.419890 0.107810 0.144341
-0.401668 0.103131 0.154684
-0.382335 0.098167 0.162587
-0.362194 0.092996 0.167926
-0.341564 0.087699 0.170617
-0.341564 0.087699 -0.170617
-0.362194 0.092996 -0.167926
-0.382335 0.098167 -0.162587
-0.401668 0.103131 -0.154684
-0.419890 0.107810 -0.144341
-0.436713 0.112129 -0.131722
-0.451872 0.116021 -0.117026
-0.465126 0.119424 -0.100484
-0.476268 0.122285 -0.082358
-0.485122 0.124558 -0.062932
-0.491548 0.126208 -0.042515
-0.495444 0.127208 -0.021426
-0.476847 0.188797 0.000000
-0.475594 0.188301 0.021426
-0.471854 0.186820 0.042515
-0.465685 0.184378 0.062932
-0.457186 0.181013 0.082358
-0.446491 0.176778 0.100484
-0.433767 0.171741 0.117026
-0.419216 0.165979 0.131722
-0.403067 0.159586 0.144341
-0.385576 0.152660 0.154684
-0.367016 0.145312 0.162587
-0.347682 0.137657 0.167926
-0.327879 0.129816 0.170617
-0.327879 0.129816 -0.170617
-0.347682 0.137657 -0.167926
-0.367016 0.145312 -0.162587
-0.385576 0.152660 -0.154684
-0.403067 0.159586 -0.144341
-0.419216 0.165979 -0.131722
-0.433767 0.171741 -0.117026
-0.446491 0.176778 -0.100484
-0.457186 0.181013 -0.082358
-0.465685 0.184378 -0.062932
-0.471854 0.186820 -0.042515
-0.475594 0.188301 -0.021426
-0.449425 0.247073 0.000000
-0.448243 0.246424 0.021426
-0.444718 0.244486 0.042515
-0.438905 0.241290 0.062932
-0.430894 0.236886 0.082358
-0.420814 0.231344 0.100484
-0.408822 0.224752 0.117026
-0.395108 0.217212 0.131722
-0.379888 0.208845 0.144341
-0.363402 0.199782 0.154684
-0.345910 0.190165 0.162587
-0.327688 0.180148 0.167926
-0.309023 0.169887 0.170617
-0.309023 0.169887 -0.170617
-0.327688 0.180148 -0.167926
-0.345910 0.190165 -0.162587
-0.363402 0.199782 -0.154684
-0.379888 0.208845 -0.144341
-0.395108 0.217212 -0.131722
-0.408822 0.224752 -0.117026
-0.420814 0.231344 -0.100484
-0.430894 0.236886 -0.082358
-0.438905 0.241290 -0.062932
-0.444718 0.244486 -0.042515
-0.448243 0.246424 -0.021426
-0.414914 0.301453 0.000000
-0.413824 0.300661 0.021426
-0.410569 0.298296 0.042515
-0.405202 0.294397 0.062932
-0.397807 0.289024 0.082358
-0.388500 0.282262 0.100484
-0.377429 0.274219 0.117026
-0.364768 0.265020 0.131722
-0.350717 0.254811 0.144341
-0.335497 0.243753 0.154684
-0.319348 0.232020 0.162587
-0.302525 0.219798 0.167926
-0.285294 0.207278 0.170617
-0.285294 0.207278 -0.170617
-0.302525 0.219798 -0.167926
-0.319348 0.232020 -0.162587
-0.335497 0.243753 -0.154684
-0.350717 0.254811 -0.144341
-0.364768 0.265020 -0.131722
-0.377429 0.274219 -0.117026
-0.388500 0.282262 -0.100484
-0.397807 0.289024 -0.082358
-0.405202 0.294397 -0.062932
-0.410569 0.298296 -0.042515
-0.413824 0.300661 -0.021426
-0.373861 0.351078 0.000000
-0.372878 0.350156 0.021426
-0.369945 0.347402 0.042515
-0.365109 0.342860 0.062932
-0.358446 0.336603 0.082358
-0.350060 0.328728 0.100484
-0.340085 0.319361 0.117026
-0.328676 0.308648 0.131722
-0.316015 0.296758 0.144341
-0.302301 0.283880 0.154684
-0.287750 0.270215 0.162587
-0.272592 0.255981 0.167926
-0.257065 0.241400 0.170617
-0.257065 0.241400 -0.170617
-0.272592 0.255981 -0.167926
-0.287750 0.270215 -0.162587
-0.302301 0.283880 -0.154684
-0.316015 0.296758 -0.144341
-0.328676 0.308648 -0.131722
-0.340085 0.319361 -0.117026
-0.350060 0.328728 -0.100484
-0.358446 0.336603 -0.082358
-0.365109 0.342860 -0.062932
-0.369945 0.347402 -0.042515
-0.372878 0.350156 -0.021426
-0.326911 0.395167 0.000000
-0.326051 0.394129 0.021426
-0.323487 0.391029 0.042515
-0.319258 0.385917 0.062932
-0.313432 0.378874 0.082358
-0.306099 0.370010 0.100484
-0.297376 0.359466 0.117026
-0.287401 0.347408 0.131722
-0.276330 0.334025 0.144341
-0.264338 0.319529 0.154684
-0.251614 0.304149 0.162587
-0.238359 0.288127 0.167926
-0.224783 0.271716 0.170617
-0.224783 0.271716 -0.170617
-0.238359 0.288127 -0.167926
-0.251614 0.304149 -0.162587
-0.264338 0.319529 -0.154684
-0.276330 0.334025 -0.144341
-0.287401 0.347408 -0.131722
-0.297376 0.359466 -0.117026
-0.306099 0.370010 -0.100484
-0.313432 0.378874 -0.082358
-0.319258 0.385917 -0.062932
-0.323487 0.391029 -0.042515
-0.326051 0.394129 -0.021426
-0.274805 0.433024 0.000000
-0.274083 0.431886 0.021426
-0.271928 0.428489 0.042515
-0.268373 0.422888 0.062932
-0.263475 0.415170 0.082358
-0.257311 0.405457 0.100484
-0.249978 0.393903 0.117026
-0.241593 0.380689 0.131722
-0.232286 0.366025 0.144341
-0.222206 0.350140 0.154684
-0.211510 0.333287 0.162587
-0.200368 0.315730 0.167926
-0.188955 0.297746 0.170617
-0.188955 0.297746 -0.170617
-0.200368 0.315730 -0.167926
-0.211510 0.333287 -0.162587
-0.222206 0.350140 -0.154684
-0.232286 0.366025 -0.144341
-0.241593 0.380689 -0.131722
-0.249978 0.393903 -0.117026
-0.257311 0.405457 -0.100484
-0.263475 0.415170 -0.082358
-0.268373 0.422888 -0.062932
-0.271928 0.428489 -0.042515
-0.274083 0.431886 -0.021426
-0.218366 0.464052 0.000000
-0.217792 0.462832 0.021426
-0.216079 0.459192 0.042515
-0.213255 0.453189 0.062932
-0.209363 0.444918 0.082358
-0.204465 0.434510 0.100484
-0.198638 0.422127 0.117026
-0.191975 0.407967 0.131722
-0.184580 0.392251 0.144341
-0.176569 0.375229 0.154684
-0.168070 0.357168 0.162587
-0.159217 0.338353 0.167926
-0.150148 0.319080 0.170617
-0.150148 0.319080 -0.170617
-0.159217 0.338353 -0.167926
-0.168070 0.357168 -0.162587
-0.176569 0.375229 -0.154684
-0.184580 0.392251 -0.144341
-0.191975 0.407967 -0.131722
-0.198638 0.422127 -0.117026
-0.204465 0.434510 -0.100484
-0.209363 0.444918 -0.082358
-0.213255 0.453189 -0.062932
-0.216079 0.459192 -0.042515
-0.217792 0.462832 -0.021426
-0.158483 0.487761 0.000000
-0.158067 0.486479 0.021426
-0.156824 0.482653 0.042515
-0.154774 0.476344 0.062932
-0.151949 0.467650 0.082358
-0.148394 0.456710 0.100484
-0.144165 0.443695 0.117026
-0.139329 0.428811 0.131722
-0.133962 0.412292 0.144341
-0.128148 0.394400 0.154684
-0.121980 0.375416 0.162587
-0.115554 0.355640 0.167926
-0.108973 0.335383 0.170617
-0.108973 0.335383 -0.170617
-0.115554 0.355640 -0.167926
-0.121980 0.375416 -0.162587
-0.128148 0.394400 -0.154684
-0.133962 0.412292 -0.144341
-0.139329 0.428811 -0.131722
-0.144165 0.443695 -0.117026
-0.148394 0.456710 -0.100484
-0.151949 0.467650 -0.082358
-0.154774 0.476344 -0.062932
-0.156824 0.482653 -0.042515
-0.158067 0.486479 -0.021426
-0.096101 0.503778 0.000000
-0.095848 0.502454 0.021426
-0.095095 0.498502 0.042515
-0.093851 0.491986 0.062932
-0.092139 0.483007 0.082358
-0.089983 0.471707 0.100484
-0.087419 0.458265 0.117026
-0.084486 0.442892 0.131722
-0.081232 0.425831 0.144341
-0.077707 0.407351 0.154684
-0.073966 0.387744 0.162587
-0.070070 0.367318 0.167926
-0.066079 0.346396 0.170617
-0.066079 0.346396 -0.170617
-0.070070 0.367318 -0.167926
-0.073966 0.387744 -0.162587
-0.077707 0.407351 -0.154684
-0.081232 0.425831 -0.144341
-0.084486 0.442892 -0.131722
-0.087419 0.458265 -0.117026
-0.089983 0.471707 -0.100484
-0.092139 0.483007 -0.082358
-0.093851 0.491986 -0.062932
-0.095095 0.498502 -0.042515
-0.095848 0.502454 -0.021426
-0.032203 0.511850 0.000000
-0.032118 0.510505 0.021426
-0.031866 0.506490 0.042515
-0.031449 0.499869 0.062932
-0.030875 0.490746 0.082358
-0.030153 0.479265 0.100484
-0.029294 0.465608 0.117026
-0.028311 0.449989 0.131722
-0.027220 0.432655 0.144341
-0.026039 0.413879 0.154684
-0.024786 0.393957 0.162587
-0.023480 0.373204 0.167926
-0.022143 0.351947 0.170617
-0.022143 0.351947 -0.170617
-0.023480 0.373204 -0.167926
-0.024786 0.393957 -0.162587
-0.026039 0.413879 -0.154684
-0.027220 0.432655 -0.144341
-0.028311 0.449989 -0.131722
-0.029294 0.465608 -0.117026
-0.030153 0.479265 -0.100484
-0.030875 0.490746 -0.082358
-0.031449 0.499869 -0.062932
-0.031866 0.506490 -0.042515
-0.032118 0.510505 -0.021426
--0.032203 0.511850 0.000000
--0.032118 0.510505 0.021426
--0.031866 0.506490 0.042515
--0.031449 0.499869 0.062932
--0.030875 0.490746 0.082358
--0.030153 0.479265 0.100484
--0.029294 0.465608 0.117026
--0.028311 0.449989 0.131722
--0.027220 0.432655 0.144341
--0.026039 0.413879 0.154684
--0.024786 0.393957 0.162587
--0.023480 0.373204 0.167926
--0.022143 0.351947 0.170617
--0.022143 0.351947 -0.170617
--0.023480 0.373204 -0.167926
--0.024786 0.393957 -0.162587
--0.026039 0.413879 -0.154684
--0.027220 0.432655 -0.144341
--0.028311 0.449989 -0.131722
--0.029294 0.465608 -0.117026
--0.030153 0.479265 -0.100484
--0.030875 0.490746 -0.082358
--0.031449 0.499869 -0.062932
--0.031866 0.506490 -0.042515
--0.032118 0.510505 -0.021426
--0.096101 0.503778 0.000000
--0.095848 0.502454 0.021426
--0.095094 0.498502 0.042515
--0.093851 0.491986 0.062932
--0.092138 0.483007 0.082358
--0.089983 0.471707 0.100484
--0.087419 0.458265 0.117026
--0.084486 0.442892 0.131722
--0.081232 0.425831 0.144341
--0.077706 0.407351 0.154684
--0.073966 0.387744 0.162587
--0.070070 0.367318 0.167926
--0.066079 0.346396 0.170617
--0.066079 0.346396 -0.170617
--0.070070 0.367318 -0.167926
--0.073966 0.387744 -0.162587
--0.077706 0.407351 -0.154684
--0.081232 0.425831 -0.144341
--0.084486 0.442892 -0.131722
--0.087419 0.458265 -0.117026
--0.089983 0.471707 -0.100484
--0.092138 0.483007 -0.082358
--0.093851 0.491986 -0.062932
--0.095094 0.498502 -0.042515
--0.095848 0.502454 -0.021426
--0.158483 0.487761 0.000000
--0.158067 0.486479 0.021426
--0.156824 0.482653 0.042515
--0.154773 0.476344 0.062932
--0.151949 0.467650 0.082358
--0.148394 0.456710 0.100484
--0.144165 0.443695 0.117026
--0.139329 0.428811 0.131722
--0.133962 0.412293 0.144341
--0.128148 0.394400 0.154684
--0.121980 0.375416 0.162587
--0.115554 0.355640 0.167926
--0.108973 0.335383 0.170617
--0.108973 0.335383 -0.170617
--0.115554 0.355640 -0.167926
--0.121980 0.375416 -0.162587
--0.128148 0.394400 -0.154684
--0.133962 0.412293 -0.144341
--0.139329 0.428811 -0.131722
--0.144165 0.443695 -0.117026
--0.148394 0.456710 -0.100484
--0.151949 0.467650 -0.082358
--0.154773 0.476344 -0.062932
--0.156824 0.482653 -0.042515
--0.158067 0.486479 -0.021426
--0.218366 0.464052 0.000000
--0.217792 0.462832 0.021426
--0.216079 0.459192 0.042515
--0.213255 0.453189 0.062932
--0.209363 0.444918 0.082358
--0.204465 0.434510 0.100484
--0.198638 0.422127 0.117026
--0.191975 0.407967 0.131722
--0.184580 0.392251 0.144341
--0.176569 0.375229 0.154684
--0.168070 0.357168 0.162587
--0.159217 0.338353 0.167926
--0.150148 0.319080 0.170617
--0.150148 0.319080 -0.170617
--0.159217 0.338353 -0.167926
--0.168070 0.357168 -0.162587
--0.176569 0.375229 -0.154684
--0.184580 0.392251 -0.144341
--0.191975 0.407967 -0.131722
--0.198638 0.422127 -0.117026
--0.204465 0.434510 -0.100484
--0.209363 0.444918 -0.082358
--0.213255 0.453189 -0.062932
--0.216079 0.459192 -0.042515
--0.217792 0.462832 -0.021426
--0.274805 0.433024 0.000000
--0.274083 0.431886 0.021426
--0.271928 0.428489 0.042515
--0.268373 0.422888 0.062932
--0.263475 0.415170 0.082358
--0.257311 0.405457 0.100484
--0.249978 0.393903 0.117026
--0.241593 0.380689 0.131722
--0.232286 0.366025 0.144341
--0.222206 0.350140 0.154684
--0.211510 0.333287 0.162587
--0.200368 0.315729 0.167926
--0.188955 0.297746 0.170617
--0.188955 0.297746 -0.170617
--0.200368 0.315729 -0.167926
--0.211510 0.333287 -0.162587
--0.222206 0.350140 -0.154684
--0.232286 0.366025 -0.144341
--0.241593 0.380689 -0.131722
--0.249978 0.393903 -0.117026
--0.257311 0.405457 -0.100484
--0.263475 0.415170 -0.082358
--0.268373 0.422888 -0.062932
--0.271928 0.428489 -0.042515
--0.274083 0.431886 -0.021426
--0.326911 0.395167 0.000000
--0.326052 0.394129 0.021426
--0.323487 0.391029 0.042515
--0.319259 0.385917 0.062932
--0.313432 0.378874 0.082358
--0.306099 0.370010 0.100484
--0.297376 0.359466 0.117026
--0.287401 0.347408 0.131722
--0.276330 0.334025 0.144341
--0.264338 0.319529 0.154684
--0.251614 0.304149 0.162587
--0.238360 0.288127 0.167926
--0.224783 0.271716 0.170617
--0.224783 0.271716 -0.170617
--0.238360 0.288127 -0.167926
--0.251614 0.304149 -0.162587
--0.264338 0.319529 -0.154684
--0.276330 0.334025 -0.144341
--0.287401 0.347408 -0.131722
--0.297376 0.359466 -0.117026
--0.306099 0.370010 -0.100484
--0.313432 0.378874 -0.082358
--0.319259 0.385917 -0.062932
--0.323487 0.391029 -0.042515
--0.326052 0.394129 -0.021426
--0.373861 0.351078 0.000000
--0.372878 0.350156 0.021426
--0.369945 0.347402 0.042515
--0.365109 0.342860 0.062932
--0.358446 0.336603 0.082358
--0.350060 0.328728 0.100484
--0.340085 0.319361 0.117026
--0.328676 0.308647 0.131722
--0.316015 0.296758 0.144341
--0.302301 0.283880 0.154684
--0.287750 0.270215 0.162587
--0.272592 0.255981 0.167926
--0.257065 0.241400 0.170617
--0.257065 0.241400 -0.170617
--0.272592 0.255981 -0.167926
--0.287750 0.270215 -0.162587
--0.302301 0.283880 -0.154684
--0.316015 0.296758 -0.144341
--0.328676 0.308647 -0.131722
--0.340085 0.319361 -0.117026
--0.350060 0.328728 -0.100484
--0.358446 0.336603 -0.082358
--0.365109 0.342860 -0.062932
--0.369945 0.347402 -0.042515
--0.372878 0.350156 -0.021426
--0.414914 0.301453 0.000000
--0.413824 0.300660 0.021426
--0.410569 0.298296 0.042515
--0.405202 0.294396 0.062932
--0.397807 0.289024 0.082358
--0.388501 0.282262 0.100484
--0.377429 0.274218 0.117026
--0.364768 0.265020 0.131722
--0.350717 0.254811 0.144341
--0.335497 0.243753 0.154684
--0.319348 0.232020 0.162587
--0.302525 0.219797 0.167926
--0.285294 0.207278 0.170617
--0.285294 0.207278 -0.170617
--0.302525 0.219797 -0.167926
--0.319348 0.232020 -0.162587
--0.335497 0.243753 -0.154684
--0.350717 0.254811 -0.144341
--0.364768 0.265020 -0.131722
--0.377429 0.274218 -0.117026
--0.388501 0.282262 -0.100484
--0.397807 0.289024 -0.082358
--0.405202 0.294396 -0.062932
--0.410569 0.298296 -0.042515
--0.413824 0.300660 -0.021426
--0.449425 0.247073 0.000000
--0.448243 0.246424 0.021426
--0.444718 0.244486 0.042515
--0.438905 0.241290 0.062932
--0.430894 0.236886 0.082358
--0.420814 0.231344 0.100484
--0.408822 0.224752 0.117026
--0.395108 0.217212 0.131722
--0.379888 0.208845 0.144341
--0.363402 0.199782 0.154684
--0.345910 0.190166 0.162587
--0.327688 0.180148 0.167926
--0.309023 0.169887 0.170617
--0.309023 0.169887 -0.170617
--0.327688 0.180148 -0.167926
--0.345910 0.190166 -0.162587
--0.363402 0.199782 -0.154684
--0.379888 0.208845 -0.144341
--0.395108 0.217212 -0.131722
--0.408822 0.224752 -0.117026
--0.420814 0.231344 -0.100484
--0.430894 0.236886 -0.082358
--0.438905 0.241290 -0.062932
--0.444718 0.244486 -0.042515
--0.448243 0.246424 -0.021426
--0.476847 0.188797 0.000000
--0.475594 0.188301 0.021426
--0.471854 0.186820 0.042515
--0.465685 0.184378 0.062932
--0.457186 0.181013 0.082358
--0.446491 0.176778 0.100484
--0.433767 0.171741 0.117026
--0.419216 0.165979 0.131722
--0.403067 0.159586 0.144341
--0.385575 0.152660 0.154684
--0.367016 0.145312 0.162587
--0.347682 0.137657 0.167926
--0.327879 0.129816 0.170617
--0.327879 0.129816 -0.170617
--0.347682 0.137657 -0.167926
--0.367016 0.145312 -0.162587
--0.385575 0.152660 -0.154684
--0.403067 0.159586 -0.144341
--0.419216 0.165979 -0.131722
--0.433767 0.171741 -0.117026
--0.446491 0.176778 -0.100484
--0.457186 0.181013 -0.082358
--0.465685 0.184378 -0.062932
--0.471854 0.186820 -0.042515
--0.475594 0.188301 -0.021426
--0.496750 0.127544 0.000000
--0.495444 0.127208 0.021426
--0.491548 0.126208 0.042515
--0.485122 0.124558 0.062932
--0.476268 0.122285 0.082358
--0.465126 0.119424 0.100484
--0.451872 0.116021 0.117026
--0.436713 0.112129 0.131722
--0.419890 0.107810 0.144341
--0.401668 0.103131 0.154684
--0.382335 0.098167 0.162587
--0.362194 0.092996 0.167926
--0.341564 0.087699 0.170617
--0.341564 0.087699 -0.170617
--0.362194 0.092996 -0.167926
--0.382335 0.098167 -0.162587
--0.401668 0.103131 -0.154684
--0.419890 0.107810 -0.144341
--0.436713 0.112129 -0.131722
--0.451872 0.116021 -0.117026
--0.465126 0.119424 -0.100484
--0.476268 0.122285 -0.082358
--0.485122 0.124558 -0.062932
--0.491548 0.126208 -0.042515
--0.495444 0.127208 -0.021426
--0.508818 0.064279 0.000000
--0.507481 0.064110 0.021426
--0.503490 0.063606 0.042515
--0.496908 0.062774 0.062932
--0.487839 0.061628 0.082358
--0.476426 0.060187 0.100484
--0.462850 0.058471 0.117026
--0.447323 0.056510 0.131722
--0.430092 0.054333 0.144341
--0.411427 0.051975 0.154684
--0.391623 0.049474 0.162587
--0.370993 0.046867 0.167926
--0.349862 0.044198 0.170617
--0.349862 0.044198 -0.170617
--0.370993 0.046867 -0.167926
--0.391623 0.049474 -0.162587
--0.411427 0.051975 -0.154684
--0.430092 0.054333 -0.144341
--0.447323 0.056510 -0.131722
--0.462850 0.058471 -0.117026
--0.476426 0.060187 -0.100484
--0.487839 0.061628 -0.082358
--0.496908 0.062774 -0.062932
--0.503490 0.063606 -0.042515
--0.507481 0.064110 -0.021426
--0.512862 0.000000 0.000000
--0.511514 0.000000 0.021426
--0.507491 0.000000 0.042515
--0.500857 0.000000 0.062932
--0.491716 0.000000 0.082358
--0.480213 0.000000 0.100484
--0.466528 0.000000 0.117026
--0.450878 0.000000 0.131722
--0.433510 0.000000 0.144341
--0.414697 0.000000 0.154684
--0.394736 0.000000 0.162587
--0.373942 0.000000 0.167926
--0.352643 0.000000 0.170617
--0.352643 0.000000 -0.170617
--0.373942 0.000000 -0.167926
--0.394736 0.000000 -0.162587
--0.414697 0.000000 -0.154684
--0.433510 0.000000 -0.144341
--0.450878 0.000000 -0.131722
--0.466528 0.000000 -0.117026
--0.480213 0.000000 -0.100484
--0.491716 0.000000 -0.082358
--0.500857 0.000000 -0.062932
--0.507491 0.000000 -0.042515
--0.511514 0.000000 -0.021426
--0.508818 -0.064278 0.000000
--0.507481 -0.064109 0.021426
--0.503490 -0.063605 0.042515
--0.496908 -0.062774 0.062932
--0.487839 -0.061628 0.082358
--0.476426 -0.060186 0.100484
--0.462850 -0.058471 0.117026
--0.447323 -0.056510 0.131722
--0.430092 -0.054333 0.144341
--0.411427 -0.051975 0.154684
--0.391623 -0.049473 0.162587
--0.370993 -0.046867 0.167926
--0.349862 -0.044198 0.170617
--0.349862 -0.044198 -0.170617
--0.370993 -0.046867 -0.167926
--0.391623 -0.049473 -0.162587
--0.411427 -0.051975 -0.154684
--0.430092 -0.054333 -0.144341
--0.447323 -0.056510 -0.131722
--0.462850 -0.058471 -0.117026
--0.476426 -0.060186 -0.100484
--0.487839 -0.061628 -0.082358
--0.496908 -0.062774 -0.062932
--0.503490 -0.063605 -0.042515
--0.507481 -0.064109 -0.021426
--0.496750 -0.127543 0.000000
--0.495444 -0.127208 0.021426
--0.491548 -0.126208 0.042515
--0.485122 -0.124558 0.062932
--0.476268 -0.122285 0.082358
--0.465126 -0.119424 0.100484
--0.451872 -0.116021 0.117026
--0.436713 -0.112129 0.131722
--0.419890 -0.107809 0.144341
--0.401669 -0.103131 0.154684
--0.382335 -0.098167 0.162587
--0.362194 -0.092995 0.167926
--0.341564 -0.087698 0.170617
--0.341564 -0.087698 -0.170617
--0.362194 -0.092995 -0.167926
--0.382335 -0.098167 -0.162587
--0.401669 -0.103131 -0.154684
--0.419890 -0.107809 -0.144341
--0.436713 -0.112129 -0.131722
--0.451872 -0.116021 -0.117026
--0.465126 -0.119424 -0.100484
--0.476268 -0.122285 -0.082358
--0.485122 -0.124558 -0.062932
--0.491548 -0.126208 -0.042515
--0.495444 -0.127208 -0.021426
--0.476847 -0.188797 0.000000
--0.475594 -0.188301 0.021426
--0.471854 -0.186820 0.042515
--0.465685 -0.184378 0.062932
--0.457186 -0.181013 0.082358
--0.446491 -0.176778 0.100484
--0.433767 -0.171740 0.117026
--0.419216 -0.165979 0.131722
--0.403067 -0.159586 0.144341
--0.385576 -0.152660 0.154684
--0.367016 -0.145312 0.162587
--0.347682 -0.137657 0.167926
--0.327879 -0.129816 0.170617
--0.327879 -0.129816 -0.170617
--0.347682 -0.137657 -0.167926
--0.367016 -0.145312 -0.162587
--0.385576 -0.152660 -0.154684
--0.403067 -0.159586 -0.144341
--0.419216 -0.165979 -0.131722
--0.433767 -0.171740 -0.117026
--0.446491 -0.176778 -0.100484
--0.457186 -0.181013 -0.082358
--0.465685 -0.184378 -0.062932
--0.471854 -0.186820 -0.042515
--0.475594 -0.188301 -0.021426
--0.449425 -0.247073 0.000000
--0.448243 -0.246424 0.021426
--0.444718 -0.244486 0.042515
--0.438905 -0.241290 0.062932
--0.430894 -0.236886 0.082358
--0.420814 -0.231344 0.100484
--0.408822 -0.224752 0.117026
--0.395108 -0.217212 0.131722
--0.379888 -0.208845 0.144341
--0.363402 -0.199782 0.154684
--0.345910 -0.190165 0.162587
--0.327688 -0.180148 0.167926
--0.309023 -0.169887 0.170617
--0.309023 -0.169887 -0.170617
--0.327688 -0.180148 -0.167926
--0.345910 -0.190165 -0.162587
--0.363402 -0.199782 -0.154684
--0.379888 -0.208845 -0.144341
--0.395108 -0.217212 -0.131722
--0.408822 -0.224752 -0.117026
--0.420814 -0.231344 -0.100484
--0.430894 -0.236886 -0.082358
--0.438905 -0.241290 -0.062932
--0.444718 -0.244486 -0.042515
--0.448243 -0.246424 -0.021426
--0.414914 -0.301453 0.000000
--0.413824 -0.300660 0.021426
--0.410569 -0.298296 0.042515
--0.405202 -0.294396 0.062932
--0.397807 -0.289024 0.082358
--0.388501 -0.282262 0.100484
--0.377429 -0.274218 0.117026
--0.364768 -0.265020 0.131722
--0.350717 -0.254811 0.144341
--0.335497 -0.243753 0.154684
--0.319348 -0.232020 0.162587
--0.302525 -0.219797 0.167926
--0.285294 -0.207278 0.170617
--0.285294 -0.207278 -0.170617
--0.302525 -0.219797 -0.167926
--0.319348 -0.232020 -0.162587
--0.335497 -0.243753 -0.154684
--0.350717 -0.254811 -0.144341
--0.364768 -0.265020 -0.131722
--0.377429 -0.274218 -0.117026
--0.388501 -0.282262 -0.100484
--0.397807 -0.289024 -0.082358
--0.405202 -0.294396 -0.062932
--0.410569 -0.298296 -0.042515
--0.413824 -0.300660 -0.021426
--0.373861 -0.351078 0.000000
--0.372878 -0.350156 0.021426
--0.369945 -0.347402 0.042515
--0.365109 -0.342860 0.062932
--0.358446 -0.336603 0.082358
--0.350060 -0.328728 0.100484
--0.340085 -0.319361 0.117026
--0.328676 -0.308647 0.131722
--0.316015 -0.296758 0.144341
--0.302301 -0.283880 0.154684
--0.287750 -0.270215 0.162587
--0.272592 -0.255981 0.167926
--0.257065 -0.241400 0.170617
--0.257065 -0.241400 -0.170617
--0.272592 -0.255981 -0.167926
--0.287750 -0.270215 -0.162587
--0.302301 -0.283880 -0.154684
--0.316015 -0.296758 -0.144341
--0.328676 -0.308647 -0.131722
--0.340085 -0.319361 -0.117026
--0.350060 -0.328728 -0.100484
--0.358446 -0.336603 -0.082358
--0.365109 -0.342860 -0.062932
--0.369945 -0.347402 -0.042515
--0.372878 -0.350156 -0.021426
--0.326911 -0.395167 0.000000
--0.326052 -0.394129 0.021426
--0.323487 -0.391029 0.042515
--0.319259 -0.385917 0.062932
--0.313432 -0.378874 0.082358
--0.306099 -0.370010 0.100484
--0.297376 -0.359466 0.117026
--0.287401 -0.347408 0.131722
--0.276330 -0.334025 0.144341
--0.264338 -0.319529 0.154684
--0.251614 -0.304149 0.162587
--0.238360 -0.288127 0.167926
--0.224783 -0.271716 0.170617
--0.224783 -0.271716 -0.170617
--0.238360 -0.288127 -0.167926
--0.251614 -0.304149 -0.162587
--0.264338 -0.319529 -0.154684
--0.276330 -0.334025 -0.144341
--0.287401 -0.347408 -0.131722
--0.297376 -0.359466 -0.117026
--0.306099 -0.370010 -0.100484
--0.313432 -0.378874 -0.082358
--0.319259 -0.385917 -0.062932
--0.323487 -0.391029 -0.042515
--0.326052 -0.394129 -0.021426
--0.274805 -0.433024 0.000000
--0.274083 -0.431886 0.021426
--0.271928 -0.428489 0.042515
--0.268373 -0.422888 0.062932
--0.263475 -0.415170 0.082358
--0.257311 -0.405457 0.100484
--0.249978 -0.393903 0.117026
--0.241593 -0.380689 0.131722
--0.232286 -0.366025 0.144341
--0.222206 -0.350140 0.154684
--0.211510 -0.333287 0.162587
--0.200368 -0.315729 0.167926
--0.188955 -0.297746 0.170617
--0.188955 -0.297746 -0.170617
--0.200368 -0.315729 -0.167926
--0.211510 -0.333287 -0.162587
--0.222206 -0.350140 -0.154684
--0.232286 -0.366025 -0.144341
--0.241593 -0.380689 -0.131722
--0.249978 -0.393903 -0.117026
--0.257311 -0.405457 -0.100484
--0.263475 -0.415170 -0.082358
--0.268373 -0.422888 -0.062932
--0.271928 -0.428489 -0.042515
--0.274083 -0.431886 -0.021426
--0.218366 -0.464052 0.000000
--0.217792 -0.462832 0.021426
--0.216079 -0.459192 0.042515
--0.213255 -0.453189 0.062932
--0.209363 -0.444918 0.082358
--0.204465 -0.434510 0.100484
--0.198638 -0.422127 0.117026
--0.191975 -0.407967 0.131722
--0.184580 -0.392251 0.144341
--0.176569 -0.375229 0.154684
--0.168070 -0.357168 0.162587
--0.159217 -0.338353 0.167926
--0.150148 -0.319080 0.170617
--0.150148 -0.319080 -0.170617
--0.159217 -0.338353 -0.167926
--0.168070 -0.357168 -0.162587
--0.176569 -0.375229 -0.154684
--0.184580 -0.392251 -0.144341
--0.191975 -0.407967 -0.131722
--0.198638 -0.422127 -0.117026
--0.204465 -0.434510 -0.100484
--0.209363 -0.444918 -0.082358
--0.213255 -0.453189 -0.062932
--0.216079 -0.459192 -0.042515
--0.217792 -0.462832 -0.021426
--0.158483 -0.487761 0.000000
--0.158067 -0.486479 0.021426
--0.156824 -0.482653 0.042515
--0.154773 -0.476344 0.062932
--0.151949 -0.467650 0.082358
--0.148394 -0.456710 0.100484
--0.144165 -0.443695 0.117026
--0.139329 -0.428811 0.131722
--0.133962 -0.412293 0.144341
--0.128148 -0.394400 0.154684
--0.121980 -0.375416 0.162587
--0.115554 -0.355640 0.167926
--0.108973 -0.335383 0.170617
--0.108973 -0.335383 -0.170617
--0.115554 -0.355640 -0.167926
--0.121980 -0.375416 -0.162587
--0.128148 -0.394400 -0.154684
--0.133962 -0.412293 -0.144341
--0.139329 -0.428811 -0.131722
--0.144165 -0.443695 -0.117026
--0.148394 -0.456710 -0.100484
--0.151949 -0.467650 -0.082358
--0.154773 -0.476344 -0.062932
--0.156824 -0.482653 -0.042515
--0.158067 -0.486479 -0.021426
--0.096101 -0.503778 0.000000
--0.095848 -0.502454 0.021426
--0.095094 -0.498502 0.042515
--0.093851 -0.491986 0.062932
--0.092138 -0.483007 0.082358
--0.089983 -0.471707 0.100484
--0.087419 -0.458265 0.117026
--0.084486 -0.442892 0.131722
--0.081232 -0.425831 0.144341
--0.077706 -0.407351 0.154684
--0.073966 -0.387744 0.162587
--0.070070 -0.367318 0.167926
--0.066079 -0.346396 0.170617
--0.066079 -0.346396 -0.170617
--0.070070 -0.367318 -0.167926
--0.073966 -0.387744 -0.162587
--0.077706 -0.407351 -0.154684
--0.081232 -0.425831 -0.144341
--0.084486 -0.442892 -0.131722
--0.087419 -0.458265 -0.117026
--0.089983 -0.471707 -0.100484
--0.092138 -0.483007 -0.082358
--0.093851 -0.491986 -0.062932
--0.095094 -0.498502 -0.042515
--0.095848 -0.502454 -0.021426
--0.032203 -0.511850 0.000000
--0.032118 -0.510505 0.021426
--0.031866 -0.506490 0.042515
--0.031449 -0.499869 0.062932
--0.030875 -0.490746 0.082358
--0.030153 -0.479265 0.100484
--0.029294 -0.465608 0.117026
--0.028311 -0.449989 0.131722
--0.027220 -0.432655 0.144341
--0.026039 -0.413879 0.154684
--0.024786 -0.393957 0.162587
--0.023480 -0.373204 0.167926
--0.022143 -0.351947 0.170617
--0.022143 -0.351947 -0.170617
--0.023480 -0.373204 -0.167926
--0.024786 -0.393957 -0.162587
--0.026039 -0.413879 -0.154684
--0.027220 -0.432655 -0.144341
--0.028311 -0.449989 -0.131722
--0.029294 -0.465608 -0.117026
--0.030153 -0.479265 -0.100484
--0.030875 -0.490746 -0.082358
--0.031449 -0.499869 -0.062932
--0.031866 -0.506490 -0.042515
--0.032118 -0.510505 -0.021426
-0.032203 -0.511850 0.000000
-0.032118 -0.510505 0.021426
-0.031866 -0.506490 0.042515
-0.031449 -0.499869 0.062932
-0.030875 -0.490746 0.082358
-0.030153 -0.479265 0.100484
-0.029294 -0.465608 0.117026
-0.028311 -0.449989 0.131722
-0.027220 -0.432655 0.144341
-0.026039 -0.413879 0.154684
-0.024786 -0.393957 0.162587
-0.023480 -0.373204 0.167926
-0.022143 -0.351947 0.170617
-0.022143 -0.351947 -0.170617
-0.023480 -0.373204 -0.167926
-0.024786 -0.393957 -0.162587
-0.026039 -0.413879 -0.154684
-0.027220 -0.432655 -0.144341
-0.028311 -0.449989 -0.131722
-0.029294 -0.465608 -0.117026
-0.030153 -0.479265 -0.100484
-0.030875 -0.490746 -0.082358
-0.031449 -0.499869 -0.062932
-0.031866 -0.506490 -0.042515
-0.032118 -0.510505 -0.021426
-0.096101 -0.503778 0.000000
-0.095848 -0.502454 0.021426
-0.095095 -0.498502 0.042515
-0.093851 -0.491986 0.062932
-0.092139 -0.483007 0.082358
-0.089983 -0.471707 0.100484
-0.087419 -0.458265 0.117026
-0.084486 -0.442892 0.131722
-0.081232 -0.425831 0.144341
-0.077707 -0.407351 0.154684
-0.073966 -0.387744 0.162587
-0.070070 -0.367318 0.167926
-0.066079 -0.346396 0.170617
-0.066079 -0.346396 -0.170617
-0.070070 -0.367318 -0.167926
-0.073966 -0.387744 -0.162587
-0.077707 -0.407351 -0.154684
-0.081232 -0.425831 -0.144341
-0.084486 -0.442892 -0.131722
-0.087419 -0.458265 -0.117026
-0.089983 -0.471707 -0.100484
-0.092139 -0.483007 -0.082358
-0.093851 -0.491986 -0.062932
-0.095095 -0.498502 -0.042515
-0.095848 -0.502454 -0.021426
-0.158483 -0.487761 0.000000
-0.158067 -0.486479 0.021426
-0.156824 -0.482653 0.042515
-0.154774 -0.476344 0.062932
-0.151949 -0.467650 0.082358
-0.148394 -0.456710 0.100484
-0.144165 -0.443695 0.117026
-0.139329 -0.428811 0.131722
-0.133962 -0.412292 0.144341
-0.128148 -0.394400 0.154684
-0.121980 -0.375416 0.162587
-0.115554 -0.355640 0.167926
-0.108973 -0.335383 0.170617
-0.108973 -0.335383 -0.170617
-0.115554 -0.355640 -0.167926
-0.121980 -0.375416 -0.162587
-0.128148 -0.394400 -0.154684
-0.133962 -0.412292 -0.144341
-0.139329 -0.428811 -0.131722
-0.144165 -0.443695 -0.117026
-0.148394 -0.456710 -0.100484
-0.151949 -0.467650 -0.082358
-0.154774 -0.476344 -0.062932
-0.156824 -0.482653 -0.042515
-0.158067 -0.486479 -0.021426
-0.218366 -0.464052 0.000000
-0.217792 -0.462832 0.021426
-0.216079 -0.459192 0.042515
-0.213255 -0.453189 0.062932
-0.209363 -0.444918 0.082358
-0.204465 -0.434510 0.100484
-0.198638 -0.422127 0.117026
-0.191975 -0.407967 0.131722
-0.184580 -0.392251 0.144341
-0.176569 -0.375229 0.154684
-0.168070 -0.357168 0.162587
-0.159217 -0.338353 0.167926
-0.150148 -0.319080 0.170617
-0.150148 -0.319080 -0.170617
-0.159217 -0.338353 -0.167926
-0.168070 -0.357168 -0.162587
-0.176569 -0.375229 -0.154684
-0.184580 -0.392251 -0.144341
-0.191975 -0.407967 -0.131722
-0.198638 -0.422127 -0.117026
-0.204465 -0.434510 -0.100484
-0.209363 -0.444918 -0.082358
-0.213255 -0.453189 -0.062932
-0.216079 -0.459192 -0.042515
-0.217792 -0.462832 -0.021426
-0.274805 -0.433024 0.000000
-0.274083 -0.431886 0.021426
-0.271927 -0.428489 0.042515
-0.268373 -0.422888 0.062932
-0.263475 -0.415170 0.082358
-0.257311 -0.405457 0.100484
-0.249978 -0.393903 0.117026
-0.241592 -0.380689 0.131722
-0.232286 -0.366025 0.144341
-0.222205 -0.350140 0.154684
-0.211510 -0.333287 0.162587
-0.200368 -0.315730 0.167926
-0.188955 -0.297746 0.170617
-0.188955 -0.297746 -0.170617
-0.200368 -0.315730 -0.167926
-0.211510 -0.333287 -0.162587
-0.222205 -0.350140 -0.154684
-0.232286 -0.366025 -0.144341
-0.241592 -0.380689 -0.131722
-0.249978 -0.393903 -0.117026
-0.257311 -0.405457 -0.100484
-0.263475 -0.415170 -0.082358
-0.268373 -0.422888 -0.062932
-0.271927 -0.428489 -0.042515
-0.274083 -0.431886 -0.021426
-0.326911 -0.395167 0.000000
-0.326051 -0.394129 0.021426
-0.323487 -0.391029 0.042515
-0.319258 -0.385917 0.062932
-0.313432 -0.378874 0.082358
-0.306099 -0.370011 0.100484
-0.297376 -0.359466 0.117026
-0.287401 -0.347408 0.131722
-0.276330 -0.334025 0.144341
-0.264338 -0.319530 0.154684
-0.251614 -0.304149 0.162587
-0.238359 -0.288127 0.167926
-0.224783 -0.271716 0.170617
-0.224783 -0.271716 -0.170617
-0.238359 -0.288127 -0.167926
-0.251614 -0.304149 -0.162587
-0.264338 -0.319530 -0.154684
-0.276330 -0.334025 -0.144341
-0.287401 -0.347408 -0.131722
-0.297376 -0.359466 -0.117026
-0.306099 -0.370011 -0.100484
-0.313432 -0.378874 -0.082358
-0.319258 -0.385917 -0.062932
-0.323487 -0.391029 -0.042515
-0.326051 -0.394129 -0.021426
-0.373860 -0.351079 0.000000
-0.372878 -0.350156 0.021426
-0.369945 -0.347402 0.042515
-0.365109 -0.342861 0.062932
-0.358446 -0.336603 0.082358
-0.350060 -0.328729 0.100484
-0.340084 -0.319361 0.117026
-0.328676 -0.308648 0.131722
-0.316015 -0.296758 0.144341
-0.302301 -0.283880 0.154684
-0.287750 -0.270215 0.162587
-0.272592 -0.255981 0.167926
-0.257065 -0.241401 0.170617
-0.257065 -0.241401 -0.170617
-0.272592 -0.255981 -0.167926
-0.287750 -0.270215 -0.162587
-0.302301 -0.283880 -0.154684
-0.316015 -0.296758 -0.144341
-0.328676 -0.308648 -0.131722
-0.340084 -0.319361 -0.117026
-0.350060 -0.328729 -0.100484
-0.358446 -0.336603 -0.082358
-0.365109 -0.342861 -0.062932
-0.369945 -0.347402 -0.042515
-0.372878 -0.350156 -0.021426
-0.414914 -0.301453 0.000000
-0.413824 -0.300661 0.021426
-0.410569 -0.298296 0.042515
-0.405202 -0.294397 0.062932
-0.397807 -0.289024 0.082358
-0.388500 -0.282262 0.100484
-0.377429 -0.274219 0.117026
-0.364768 -0.265020 0.131722
-0.350717 -0.254811 0.144341
-0.335497 -0.243753 0.154684
-0.319348 -0.232020 0.162587
-0.302525 -0.219798 0.167926
-0.285294 -0.207278 0.170617
-0.285294 -0.207278 -0.170617
-0.302525 -0.219798 -0.167926
-0.319348 -0.232020 -0.162587
-0.335497 -0.243753 -0.154684
-0.350717 -0.254811 -0.144341
-0.364768 -0.265020 -0.131722
-0.377429 -0.274219 -0.117026
-0.388500 -0.282262 -0.100484
-0.397807 -0.289024 -0.082358
-0.405202 -0.294397 -0.062932
-0.410569 -0.298296 -0.042515
-0.413824 -0.300661 -0.021426
-0.449425 -0.247074 0.000000
-0.448243 -0.246424 0.021426
-0.444718 -0.244486 0.042515
-0.438905 -0.241290 0.062932
-0.430894 -0.236886 0.082358
-0.420814 -0.231345 0.100484
-0.408822 -0.224752 0.117026
-0.395108 -0.217213 0.131722
-0.379888 -0.208845 0.144341
-0.363402 -0.199782 0.154684
-0.345910 -0.190166 0.162587
-0.327688 -0.180148 0.167926
-0.309023 -0.169887 0.170617
-0.309023 -0.169887 -0.170617
-0.327688 -0.180148 -0.167926
-0.345910 -0.190166 -0.162587
-0.363402 -0.199782 -0.154684
-0.379888 -0.208845 -0.144341
-0.395108 -0.217213 -0.131722
-0.408822 -0.224752 -0.117026
-0.420814 -0.231345 -0.100484
-0.430894 -0.236886 -0.082358
-0.438905 -0.241290 -0.062932
-0.444718 -0.244486 -0.042515
-0.448243 -0.246424 -0.021426
-0.476847 -0.188797 0.000000
-0.475594 -0.188301 0.021426
-0.471854 -0.186820 0.042515
-0.465685 -0.184378 0.062932
-0.457186 -0.181013 0.082358
-0.446491 -0.176778 0.100484
-0.433767 -0.171741 0.117026
-0.419216 -0.165980 0.131722
-0.403067 -0.159586 0.144341
-0.385575 -0.152660 0.154684
-0.367016 -0.145312 0.162587
-0.347682 -0.137657 0.167926
-0.327879 -0.129817 0.170617
-0.327879 -0.129817 -0.170617
-0.347682 -0.137657 -0.167926
-0.367016 -0.145312 -0.162587
-0.385575 -0.152660 -0.154684
-0.403067 -0.159586 -0.144341
-0.419216 -0.165980 -0.131722
-0.433767 -0.171741 -0.117026
-0.446491 -0.176778 -0.100484
-0.457186 -0.181013 -0.082358
-0.465685 -0.184378 -0.062932
-0.471854 -0.186820 -0.042515
-0.475594 -0.188301 -0.021426
-0.496750 -0.127544 0.000000
-0.495444 -0.127209 0.021426
-0.491548 -0.126208 0.042515
-0.485122 -0.124558 0.062932
-0.476268 -0.122285 0.082358
-0.465126 -0.119424 0.100484
-0.451871 -0.116021 0.117026
-0.436713 -0.112129 0.131722
-0.419890 -0.107810 0.144341
-0.401668 -0.103131 0.154684
-0.382335 -0.098167 0.162587
-0.362194 -0.092996 0.167926
-0.341564 -0.087699 0.170617
-0.341564 -0.087699 -0.170617
-0.362194 -0.092996 -0.167926
-0.382335 -0.098167 -0.162587
-0.401668 -0.103131 -0.154684
-0.419890 -0.107810 -0.144341
-0.436713 -0.112129 -0.131722
-0.451871 -0.116021 -0.117026
-0.465126 -0.119424 -0.100484
-0.476268 -0.122285 -0.082358
-0.485122 -0.124558 -0.062932
-0.491548 -0.126208 -0.042515
-0.495444 -0.127209 -0.021426
-0.508818 -0.064279 0.000000
-0.507481 -0.064110 0.021426
-0.503490 -0.063606 0.042515
-0.496908 -0.062774 0.062932
-0.487839 -0.061629 0.082358
-0.476426 -0.060187 0.100484
-0.462850 -0.058472 0.117026
-0.447323 -0.056510 0.131722
-0.430092 -0.054333 0.144341
-0.411427 -0.051975 0.154684
-0.391623 -0.049474 0.162587
-0.370993 -0.046867 0.167926
-0.349862 -0.044198 0.170617
-0.349862 -0.044198 -0.170617
-0.370993 -0.046867 -0.167926
-0.391623 -0.049474 -0.162587
-0.411427 -0.051975 -0.154684
-0.430092 -0.054333 -0.144341
-0.447323 -0.056510 -0.131722
-0.462850 -0.058472 -0.117026
-0.476426 -0.060187 -0.100484
-0.487839 -0.061629 -0.082358
-0.496908 -0.062774 -0.062932
-0.503490 -0.063606 -0.042515
-0.507481 -0.064110 -0.021426
-4 0 1 2 3
-4 3 2 4 5
-4 5 4 6 7
-4 7 6 8 9
-4 9 8 10 11
-4 11 10 12 13
-4 13 12 14 15
-4 15 14 16 17
-4 17 16 18 19
-4 19 18 20 21
-4 21 20 22 23
-4 23 22 24 25
-4 26 27 28 29
-4 29 28 30 31
-4 31 30 32 33
-4 33 32 34 35
-4 35 34 36 37
-4 37 36 38 39
-4 39 38 40 41
-4 41 40 42 43
-4 43 42 44 45
-4 45 44 46 47
-4 47 46 48 49
-4 0 49 48 1
-4 1 50 51 2
-4 2 51 52 4
-4 4 52 53 6
-4 6 53 54 8
-4 8 54 55 10
-4 10 55 56 12
-4 12 56 57 14
-4 14 57 58 16
-4 16 58 59 18
-4 18 59 60 20
-4 20 60 61 22
-4 22 61 62 24
-4 27 63 64 28
-4 28 64 65 30
-4 30 65 66 32
-4 32 66 67 34
-4 34 67 68 36
-4 36 68 69 38
-4 38 69 70 40
-4 40 70 71 42
-4 42 71 72 44
-4 44 72 73 46
-4 46 73 74 48
-4 48 74 50 1
-4 50 75 76 51
-4 51 76 77 52
-4 52 77 78 53
-4 53 78 79 54
-4 54 79 80 55
-4 55 80 81 56
-4 56 81 82 57
-4 57 82 83 58
-4 58 83 84 59
-4 59 84 85 60
-4 60 85 86 61
-4 61 86 87 62
-4 63 88 89 64
-4 64 89 90 65
-4 65 90 91 66
-4 66 91 92 67
-4 67 92 93 68
-4 68 93 94 69
-4 69 94 95 70
-4 70 95 96 71
-4 71 96 97 72
-4 72 97 98 73
-4 73 98 99 74
-4 74 99 75 50
-4 75 100 101 76
-4 76 101 102 77
-4 77 102 103 78
-4 78 103 104 79
-4 79 104 105 80
-4 80 105 106 81
-4 81 106 107 82
-4 82 107 108 83
-4 83 108 109 84
-4 84 109 110 85
-4 85 110 111 86
-4 86 111 112 87
-4 88 113 114 89
-4 89 114 115 90
-4 90 115 116 91
-4 91 116 117 92
-4 92 117 118 93
-4 93 118 119 94
-4 94 119 120 95
-4 95 120 121 96
-4 96 121 122 97
-4 97 122 123 98
-4 98 123 124 99
-4 99 124 100 75
-4 100 125 126 101
-4 101 126 127 102
-4 102 127 128 103
-4 103 128 129 104
-4 104 129 130 105
-4 105 130 131 106
-4 106 131 132 107
-4 107 132 133 108
-4 108 133 134 109
-4 109 134 135 110
-4 110 135 136 111
-4 111 136 137 112
-4 113 138 139 114
-4 114 139 140 115
-4 115 140 141 116
-4 116 141 142 117
-4 117 142 143 118
-4 118 143 144 119
-4 119 144 145 120
-4 120 145 146 121
-4 121 146 147 122
-4 122 147 148 123
-4 123 148 149 124
-4 124 149 125 100
-4 125 150 151 126
-4 126 151 152 127
-4 127 152 153 128
-4 128 153 154 129
-4 129 154 155 130
-4 130 155 156 131
-4 131 156 157 132
-4 132 157 158 133
-4 133 158 159 134
-4 134 159 160 135
-4 135 160 161 136
-4 136 161 162 137
-4 138 163 164 139
-4 139 164 165 140
-4 140 165 166 141
-4 141 166 167 142
-4 142 167 168 143
-4 143 168 169 144
-4 144 169 170 145
-4 145 170 171 146
-4 146 171 172 147
-4 147 172 173 148
-4 148 173 174 149
-4 149 174 150 125
-4 150 175 176 151
-4 151 176 177 152
-4 152 177 178 153
-4 153 178 179 154
-4 154 179 180 155
-4 155 180 181 156
-4 156 181 182 157
-4 157 182 183 158
-4 158 183 184 159
-4 159 184 185 160
-4 160 185 186 161
-4 161 186 187 162
-4 163 188 189 164
-4 164 189 190 165
-4 165 190 191 166
-4 166 191 192 167
-4 167 192 193 168
-4 168 193 194 169
-4 169 194 195 170
-4 170 195 196 171
-4 171 196 197 172
-4 172 197 198 173
-4 173 198 199 174
-4 174 199 175 150
-4 175 200 201 176
-4 176 201 202 177
-4 177 202 203 178
-4 178 203 204 179
-4 179 204 205 180
-4 180 205 206 181
-4 181 206 207 182
-4 182 207 208 183
-4 183 208 209 184
-4 184 209 210 185
-4 185 210 211 186
-4 186 211 212 187
-4 188 213 214 189
-4 189 214 215 190
-4 190 215 216 191
-4 191 216 217 192
-4 192 217 218 193
-4 193 218 219 194
-4 194 219 220 195
-4 195 220 221 196
-4 196 221 222 197
-4 197 222 223 198
-4 198 223 224 199
-4 199 224 200 175
-4 200 225 226 201
-4 201 226 227 202
-4 202 227 228 203
-4 203 228 229 204
-4 204 229 230 205
-4 205 230 231 206
-4 206 231 232 207
-4 207 232 233 208
-4 208 233 234 209
-4 209 234 235 210
-4 210 235 236 211
-4 211 236 237 212
-4 213 238 239 214
-4 214 239 240 215
-4 215 240 241 216
-4 216 241 242 217
-4 217 242 243 218
-4 218 243 244 219
-4 219 244 245 220
-4 220 245 246 221
-4 221 246 247 222
-4 222 247 248 223
-4 223 248 249 224
-4 224 249 225 200
-4 225 250 251 226
-4 226 251 252 227
-4 227 252 253 228
-4 228 253 254 229
-4 229 254 255 230
-4 230 255 256 231
-4 231 256 257 232
-4 232 257 258 233
-4 233 258 259 234
-4 234 259 260 235
-4 235 260 261 236
-4 236 261 262 237
-4 238 263 264 239
-4 239 264 265 240
-4 240 265 266 241
-4 241 266 267 242
-4 242 267 268 243
-4 243 268 269 244
-4 244 269 270 245
-4 245 270 271 246
-4 246 271 272 247
-4 247 272 273 248
-4 248 273 274 249
-4 249 274 250 225
-4 250 275 276 251
-4 251 276 277 252
-4 252 277 278 253
-4 253 278 279 254
-4 254 279 280 255
-4 255 280 281 256
-4 256 281 282 257
-4 257 282 283 258
-4 258 283 284 259
-4 259 284 285 260
-4 260 285 286 261
-4 261 286 287 262
-4 263 288 289 264
-4 264 289 290 265
-4 265 290 291 266
-4 266 291 292 267
-4 267 292 293 268
-4 268 293 294 269
-4 269 294 295 270
-4 270 295 296 271
-4 271 296 297 272
-4 272 297 298 273
-4 273 298 299 274
-4 274 299 275 250
-4 275 300 301 276
-4 276 301 302 277
-4 277 302 303 278
-4 278 303 304 279
-4 279 304 305 280
-4 280 305 306 281
-4 281 306 307 282
-4 282 307 308 283
-4 283 308 309 284
-4 284 309 310 285
-4 285 310 311 286
-4 286 311 312 287
-4 288 313 314 289
-4 289 314 315 290
-4 290 315 316 291
-4 291 316 317 292
-4 292 317 318 293
-4 293 318 319 294
-4 294 319 320 295
-4 295 320 321 296
-4 296 321 322 297
-4 297 322 323 298
-4 298 323 324 299
-4 299 324 300 275
-4 300 325 326 301
-4 301 326 327 302
-4 302 327 328 303
-4 303 328 329 304
-4 304 329 330 305
-4 305 330 331 306
-4 306 331 332 307
-4 307 332 333 308
-4 308 333 334 309
-4 309 334 335 310
-4 310 335 336 311
-4 311 336 337 312
-4 313 338 339 314
-4 314 339 340 315
-4 315 340 341 316
-4 316 341 342 317
-4 317 342 343 318
-4 318 343 344 319
-4 319 344 345 320
-4 320 345 346 321
-4 321 346 347 322
-4 322 347 348 323
-4 323 348 349 324
-4 324 349 325 300
-4 325 350 351 326
-4 326 351 352 327
-4 327 352 353 328
-4 328 353 354 329
-4 329 354 355 330
-4 330 355 356 331
-4 331 356 357 332
-4 332 357 358 333
-4 333 358 359 334
-4 334 359 360 335
-4 335 360 361 336
-4 336 361 362 337
-4 338 363 364 339
-4 339 364 365 340
-4 340 365 366 341
-4 341 366 367 342
-4 342 367 368 343
-4 343 368 369 344
-4 344 369 370 345
-4 345 370 371 346
-4 346 371 372 347
-4 347 372 373 348
-4 348 373 374 349
-4 349 374 350 325
-4 350 375 376 351
-4 351 376 377 352
-4 352 377 378 353
-4 353 378 379 354
-4 354 379 380 355
-4 355 380 381 356
-4 356 381 382 357
-4 357 382 383 358
-4 358 383 384 359
-4 359 384 385 360
-4 360 385 386 361
-4 361 386 387 362
-4 363 388 389 364
-4 364 389 390 365
-4 365 390 391 366
-4 366 391 392 367
-4 367 392 393 368
-4 368 393 394 369
-4 369 394 395 370
-4 370 395 396 371
-4 371 396 397 372
-4 372 397 398 373
-4 373 398 399 374
-4 374 399 375 350
-4 375 400 401 376
-4 376 401 402 377
-4 377 402 403 378
-4 378 403 404 379
-4 379 404 405 380
-4 380 405 406 381
-4 381 406 407 382
-4 382 407 408 383
-4 383 408 409 384
-4 384 409 410 385
-4 385 410 411 386
-4 386 411 412 387
-4 388 413 414 389
-4 389 414 415 390
-4 390 415 416 391
-4 391 416 417 392
-4 392 417 418 393
-4 393 418 419 394
-4 394 419 420 395
-4 395 420 421 396
-4 396 421 422 397
-4 397 422 423 398
-4 398 423 424 399
-4 399 424 400 375
-4 400 425 426 401
-4 401 426 427 402
-4 402 427 428 403
-4 403 428 429 404
-4 404 429 430 405
-4 405 430 431 406
-4 406 431 432 407
-4 407 432 433 408
-4 408 433 434 409
-4 409 434 435 410
-4 410 435 436 411
-4 411 436 437 412
-4 413 438 439 414
-4 414 439 440 415
-4 415 440 441 416
-4 416 441 442 417
-4 417 442 443 418
-4 418 443 444 419
-4 419 444 445 420
-4 420 445 446 421
-4 421 446 447 422
-4 422 447 448 423
-4 423 448 449 424
-4 424 449 425 400
-4 425 450 451 426
-4 426 451 452 427
-4 427 452 453 428
-4 428 453 454 429
-4 429 454 455 430
-4 430 455 456 431
-4 431 456 457 432
-4 432 457 458 433
-4 433 458 459 434
-4 434 459 460 435
-4 435 460 461 436
-4 436 461 462 437
-4 438 463 464 439
-4 439 464 465 440
-4 440 465 466 441
-4 441 466 467 442
-4 442 467 468 443
-4 443 468 469 444
-4 444 469 470 445
-4 445 470 471 446
-4 446 471 472 447
-4 447 472 473 448
-4 448 473 474 449
-4 449 474 450 425
-4 450 475 476 451
-4 451 476 477 452
-4 452 477 478 453
-4 453 478 479 454
-4 454 479 480 455
-4 455 480 481 456
-4 456 481 482 457
-4 457 482 483 458
-4 458 483 484 459
-4 459 484 485 460
-4 460 485 486 461
-4 461 486 487 462
-4 463 488 489 464
-4 464 489 490 465
-4 465 490 491 466
-4 466 491 492 467
-4 467 492 493 468
-4 468 493 494 469
-4 469 494 495 470
-4 470 495 496 471
-4 471 496 497 472
-4 472 497 498 473
-4 473 498 499 474
-4 474 499 475 450
-4 475 500 501 476
-4 476 501 502 477
-4 477 502 503 478
-4 478 503 504 479
-4 479 504 505 480
-4 480 505 506 481
-4 481 506 507 482
-4 482 507 508 483
-4 483 508 509 484
-4 484 509 510 485
-4 485 510 511 486
-4 486 511 512 487
-4 488 513 514 489
-4 489 514 515 490
-4 490 515 516 491
-4 491 516 517 492
-4 492 517 518 493
-4 493 518 519 494
-4 494 519 520 495
-4 495 520 521 496
-4 496 521 522 497
-4 497 522 523 498
-4 498 523 524 499
-4 499 524 500 475
-4 500 525 526 501
-4 501 526 527 502
-4 502 527 528 503
-4 503 528 529 504
-4 504 529 530 505
-4 505 530 531 506
-4 506 531 532 507
-4 507 532 533 508
-4 508 533 534 509
-4 509 534 535 510
-4 510 535 536 511
-4 511 536 537 512
-4 513 538 539 514
-4 514 539 540 515
-4 515 540 541 516
-4 516 541 542 517
-4 517 542 543 518
-4 518 543 544 519
-4 519 544 545 520
-4 520 545 546 521
-4 521 546 547 522
-4 522 547 548 523
-4 523 548 549 524
-4 524 549 525 500
-4 525 550 551 526
-4 526 551 552 527
-4 527 552 553 528
-4 528 553 554 529
-4 529 554 555 530
-4 530 555 556 531
-4 531 556 557 532
-4 532 557 558 533
-4 533 558 559 534
-4 534 559 560 535
-4 535 560 561 536
-4 536 561 562 537
-4 538 563 564 539
-4 539 564 565 540
-4 540 565 566 541
-4 541 566 567 542
-4 542 567 568 543
-4 543 568 569 544
-4 544 569 570 545
-4 545 570 571 546
-4 546 571 572 547
-4 547 572 573 548
-4 548 573 574 549
-4 549 574 550 525
-4 550 575 576 551
-4 551 576 577 552
-4 552 577 578 553
-4 553 578 579 554
-4 554 579 580 555
-4 555 580 581 556
-4 556 581 582 557
-4 557 582 583 558
-4 558 583 584 559
-4 559 584 585 560
-4 560 585 586 561
-4 561 586 587 562
-4 563 588 589 564
-4 564 589 590 565
-4 565 590 591 566
-4 566 591 592 567
-4 567 592 593 568
-4 568 593 594 569
-4 569 594 595 570
-4 570 595 596 571
-4 571 596 597 572
-4 572 597 598 573
-4 573 598 599 574
-4 574 599 575 550
-4 575 600 601 576
-4 576 601 602 577
-4 577 602 603 578
-4 578 603 604 579
-4 579 604 605 580
-4 580 605 606 581
-4 581 606 607 582
-4 582 607 608 583
-4 583 608 609 584
-4 584 609 610 585
-4 585 610 611 586
-4 586 611 612 587
-4 588 613 614 589
-4 589 614 615 590
-4 590 615 616 591
-4 591 616 617 592
-4 592 617 618 593
-4 593 618 619 594
-4 594 619 620 595
-4 595 620 621 596
-4 596 621 622 597
-4 597 622 623 598
-4 598 623 624 599
-4 599 624 600 575
-4 600 625 626 601
-4 601 626 627 602
-4 602 627 628 603
-4 603 628 629 604
-4 604 629 630 605
-4 605 630 631 606
-4 606 631 632 607
-4 607 632 633 608
-4 608 633 634 609
-4 609 634 635 610
-4 610 635 636 611
-4 611 636 637 612
-4 613 638 639 614
-4 614 639 640 615
-4 615 640 641 616
-4 616 641 642 617
-4 617 642 643 618
-4 618 643 644 619
-4 619 644 645 620
-4 620 645 646 621
-4 621 646 647 622
-4 622 647 648 623
-4 623 648 649 624
-4 624 649 625 600
-4 625 650 651 626
-4 626 651 652 627
-4 627 652 653 628
-4 628 653 654 629
-4 629 654 655 630
-4 630 655 656 631
-4 631 656 657 632
-4 632 657 658 633
-4 633 658 659 634
-4 634 659 660 635
-4 635 660 661 636
-4 636 661 662 637
-4 638 663 664 639
-4 639 664 665 640
-4 640 665 666 641
-4 641 666 667 642
-4 642 667 668 643
-4 643 668 669 644
-4 644 669 670 645
-4 645 670 671 646
-4 646 671 672 647
-4 647 672 673 648
-4 648 673 674 649
-4 649 674 650 625
-4 650 675 676 651
-4 651 676 677 652
-4 652 677 678 653
-4 653 678 679 654
-4 654 679 680 655
-4 655 680 681 656
-4 656 681 682 657
-4 657 682 683 658
-4 658 683 684 659
-4 659 684 685 660
-4 660 685 686 661
-4 661 686 687 662
-4 663 688 689 664
-4 664 689 690 665
-4 665 690 691 666
-4 666 691 692 667
-4 667 692 693 668
-4 668 693 694 669
-4 669 694 695 670
-4 670 695 696 671
-4 671 696 697 672
-4 672 697 698 673
-4 673 698 699 674
-4 674 699 675 650
-4 675 700 701 676
-4 676 701 702 677
-4 677 702 703 678
-4 678 703 704 679
-4 679 704 705 680
-4 680 705 706 681
-4 681 706 707 682
-4 682 707 708 683
-4 683 708 709 684
-4 684 709 710 685
-4 685 710 711 686
-4 686 711 712 687
-4 688 713 714 689
-4 689 714 715 690
-4 690 715 716 691
-4 691 716 717 692
-4 692 717 718 693
-4 693 718 719 694
-4 694 719 720 695
-4 695 720 721 696
-4 696 721 722 697
-4 697 722 723 698
-4 698 723 724 699
-4 699 724 700 675
-4 700 725 726 701
-4 701 726 727 702
-4 702 727 728 703
-4 703 728 729 704
-4 704 729 730 705
-4 705 730 731 706
-4 706 731 732 707
-4 707 732 733 708
-4 708 733 734 709
-4 709 734 735 710
-4 710 735 736 711
-4 711 736 737 712
-4 713 738 739 714
-4 714 739 740 715
-4 715 740 741 716
-4 716 741 742 717
-4 717 742 743 718
-4 718 743 744 719
-4 719 744 745 720
-4 720 745 746 721
-4 721 746 747 722
-4 722 747 748 723
-4 723 748 749 724
-4 724 749 725 700
-4 725 750 751 726
-4 726 751 752 727
-4 727 752 753 728
-4 728 753 754 729
-4 729 754 755 730
-4 730 755 756 731
-4 731 756 757 732
-4 732 757 758 733
-4 733 758 759 734
-4 734 759 760 735
-4 735 760 761 736
-4 736 761 762 737
-4 738 763 764 739
-4 739 764 765 740
-4 740 765 766 741
-4 741 766 767 742
-4 742 767 768 743
-4 743 768 769 744
-4 744 769 770 745
-4 745 770 771 746
-4 746 771 772 747
-4 747 772 773 748
-4 748 773 774 749
-4 749 774 750 725
-4 750 775 776 751
-4 751 776 777 752
-4 752 777 778 753
-4 753 778 779 754
-4 754 779 780 755
-4 755 780 781 756
-4 756 781 782 757
-4 757 782 783 758
-4 758 783 784 759
-4 759 784 785 760
-4 760 785 786 761
-4 761 786 787 762
-4 763 788 789 764
-4 764 789 790 765
-4 765 790 791 766
-4 766 791 792 767
-4 767 792 793 768
-4 768 793 794 769
-4 769 794 795 770
-4 770 795 796 771
-4 771 796 797 772
-4 772 797 798 773
-4 773 798 799 774
-4 774 799 775 750
-4 775 800 801 776
-4 776 801 802 777
-4 777 802 803 778
-4 778 803 804 779
-4 779 804 805 780
-4 780 805 806 781
-4 781 806 807 782
-4 782 807 808 783
-4 783 808 809 784
-4 784 809 810 785
-4 785 810 811 786
-4 786 811 812 787
-4 788 813 814 789
-4 789 814 815 790
-4 790 815 816 791
-4 791 816 817 792
-4 792 817 818 793
-4 793 818 819 794
-4 794 819 820 795
-4 795 820 821 796
-4 796 821 822 797
-4 797 822 823 798
-4 798 823 824 799
-4 799 824 800 775
-4 800 825 826 801
-4 801 826 827 802
-4 802 827 828 803
-4 803 828 829 804
-4 804 829 830 805
-4 805 830 831 806
-4 806 831 832 807
-4 807 832 833 808
-4 808 833 834 809
-4 809 834 835 810
-4 810 835 836 811
-4 811 836 837 812
-4 813 838 839 814
-4 814 839 840 815
-4 815 840 841 816
-4 816 841 842 817
-4 817 842 843 818
-4 818 843 844 819
-4 819 844 845 820
-4 820 845 846 821
-4 821 846 847 822
-4 822 847 848 823
-4 823 848 849 824
-4 824 849 825 800
-4 825 850 851 826
-4 826 851 852 827
-4 827 852 853 828
-4 828 853 854 829
-4 829 854 855 830
-4 830 855 856 831
-4 831 856 857 832
-4 832 857 858 833
-4 833 858 859 834
-4 834 859 860 835
-4 835 860 861 836
-4 836 861 862 837
-4 838 863 864 839
-4 839 864 865 840
-4 840 865 866 841
-4 841 866 867 842
-4 842 867 868 843
-4 843 868 869 844
-4 844 869 870 845
-4 845 870 871 846
-4 846 871 872 847
-4 847 872 873 848
-4 848 873 874 849
-4 849 874 850 825
-4 850 875 876 851
-4 851 876 877 852
-4 852 877 878 853
-4 853 878 879 854
-4 854 879 880 855
-4 855 880 881 856
-4 856 881 882 857
-4 857 882 883 858
-4 858 883 884 859
-4 859 884 885 860
-4 860 885 886 861
-4 861 886 887 862
-4 863 888 889 864
-4 864 889 890 865
-4 865 890 891 866
-4 866 891 892 867
-4 867 892 893 868
-4 868 893 894 869
-4 869 894 895 870
-4 870 895 896 871
-4 871 896 897 872
-4 872 897 898 873
-4 873 898 899 874
-4 874 899 875 850
-4 875 900 901 876
-4 876 901 902 877
-4 877 902 903 878
-4 878 903 904 879
-4 879 904 905 880
-4 880 905 906 881
-4 881 906 907 882
-4 882 907 908 883
-4 883 908 909 884
-4 884 909 910 885
-4 885 910 911 886
-4 886 911 912 887
-4 888 913 914 889
-4 889 914 915 890
-4 890 915 916 891
-4 891 916 917 892
-4 892 917 918 893
-4 893 918 919 894
-4 894 919 920 895
-4 895 920 921 896
-4 896 921 922 897
-4 897 922 923 898
-4 898 923 924 899
-4 899 924 900 875
-4 900 925 926 901
-4 901 926 927 902
-4 902 927 928 903
-4 903 928 929 904
-4 904 929 930 905
-4 905 930 931 906
-4 906 931 932 907
-4 907 932 933 908
-4 908 933 934 909
-4 909 934 935 910
-4 910 935 936 911
-4 911 936 937 912
-4 913 938 939 914
-4 914 939 940 915
-4 915 940 941 916
-4 916 941 942 917
-4 917 942 943 918
-4 918 943 944 919
-4 919 944 945 920
-4 920 945 946 921
-4 921 946 947 922
-4 922 947 948 923
-4 923 948 949 924
-4 924 949 925 900
-4 925 950 951 926
-4 926 951 952 927
-4 927 952 953 928
-4 928 953 954 929
-4 929 954 955 930
-4 930 955 956 931
-4 931 956 957 932
-4 932 957 958 933
-4 933 958 959 934
-4 934 959 960 935
-4 935 960 961 936
-4 936 961 962 937
-4 938 963 964 939
-4 939 964 965 940
-4 940 965 966 941
-4 941 966 967 942
-4 942 967 968 943
-4 943 968 969 944
-4 944 969 970 945
-4 945 970 971 946
-4 946 971 972 947
-4 947 972 973 948
-4 948 973 974 949
-4 949 974 950 925
-4 950 975 976 951
-4 951 976 977 952
-4 952 977 978 953
-4 953 978 979 954
-4 954 979 980 955
-4 955 980 981 956
-4 956 981 982 957
-4 957 982 983 958
-4 958 983 984 959
-4 959 984 985 960
-4 960 985 986 961
-4 961 986 987 962
-4 963 988 989 964
-4 964 989 990 965
-4 965 990 991 966
-4 966 991 992 967
-4 967 992 993 968
-4 968 993 994 969
-4 969 994 995 970
-4 970 995 996 971
-4 971 996 997 972
-4 972 997 998 973
-4 973 998 999 974
-4 974 999 975 950
-4 975 1000 1001 976
-4 976 1001 1002 977
-4 977 1002 1003 978
-4 978 1003 1004 979
-4 979 1004 1005 980
-4 980 1005 1006 981
-4 981 1006 1007 982
-4 982 1007 1008 983
-4 983 1008 1009 984
-4 984 1009 1010 985
-4 985 1010 1011 986
-4 986 1011 1012 987
-4 988 1013 1014 989
-4 989 1014 1015 990
-4 990 1015 1016 991
-4 991 1016 1017 992
-4 992 1017 1018 993
-4 993 1018 1019 994
-4 994 1019 1020 995
-4 995 1020 1021 996
-4 996 1021 1022 997
-4 997 1022 1023 998
-4 998 1023 1024 999
-4 999 1024 1000 975
-4 1000 1025 1026 1001
-4 1001 1026 1027 1002
-4 1002 1027 1028 1003
-4 1003 1028 1029 1004
-4 1004 1029 1030 1005
-4 1005 1030 1031 1006
-4 1006 1031 1032 1007
-4 1007 1032 1033 1008
-4 1008 1033 1034 1009
-4 1009 1034 1035 1010
-4 1010 1035 1036 1011
-4 1011 1036 1037 1012
-4 1013 1038 1039 1014
-4 1014 1039 1040 1015
-4 1015 1040 1041 1016
-4 1016 1041 1042 1017
-4 1017 1042 1043 1018
-4 1018 1043 1044 1019
-4 1019 1044 1045 1020
-4 1020 1045 1046 1021
-4 1021 1046 1047 1022
-4 1022 1047 1048 1023
-4 1023 1048 1049 1024
-4 1024 1049 1025 1000
-4 1025 1050 1051 1026
-4 1026 1051 1052 1027
-4 1027 1052 1053 1028
-4 1028 1053 1054 1029
-4 1029 1054 1055 1030
-4 1030 1055 1056 1031
-4 1031 1056 1057 1032
-4 1032 1057 1058 1033
-4 1033 1058 1059 1034
-4 1034 1059 1060 1035
-4 1035 1060 1061 1036
-4 1036 1061 1062 1037
-4 1038 1063 1064 1039
-4 1039 1064 1065 1040
-4 1040 1065 1066 1041
-4 1041 1066 1067 1042
-4 1042 1067 1068 1043
-4 1043 1068 1069 1044
-4 1044 1069 1070 1045
-4 1045 1070 1071 1046
-4 1046 1071 1072 1047
-4 1047 1072 1073 1048
-4 1048 1073 1074 1049
-4 1049 1074 1050 1025
-4 1050 1075 1076 1051
-4 1051 1076 1077 1052
-4 1052 1077 1078 1053
-4 1053 1078 1079 1054
-4 1054 1079 1080 1055
-4 1055 1080 1081 1056
-4 1056 1081 1082 1057
-4 1057 1082 1083 1058
-4 1058 1083 1084 1059
-4 1059 1084 1085 1060
-4 1060 1085 1086 1061
-4 1061 1086 1087 1062
-4 1063 1088 1089 1064
-4 1064 1089 1090 1065
-4 1065 1090 1091 1066
-4 1066 1091 1092 1067
-4 1067 1092 1093 1068
-4 1068 1093 1094 1069
-4 1069 1094 1095 1070
-4 1070 1095 1096 1071
-4 1071 1096 1097 1072
-4 1072 1097 1098 1073
-4 1073 1098 1099 1074
-4 1074 1099 1075 1050
-4 1075 1100 1101 1076
-4 1076 1101 1102 1077
-4 1077 1102 1103 1078
-4 1078 1103 1104 1079
-4 1079 1104 1105 1080
-4 1080 1105 1106 1081
-4 1081 1106 1107 1082
-4 1082 1107 1108 1083
-4 1083 1108 1109 1084
-4 1084 1109 1110 1085
-4 1085 1110 1111 1086
-4 1086 1111 1112 1087
-4 1088 1113 1114 1089
-4 1089 1114 1115 1090
-4 1090 1115 1116 1091
-4 1091 1116 1117 1092
-4 1092 1117 1118 1093
-4 1093 1118 1119 1094
-4 1094 1119 1120 1095
-4 1095 1120 1121 1096
-4 1096 1121 1122 1097
-4 1097 1122 1123 1098
-4 1098 1123 1124 1099
-4 1099 1124 1100 1075
-4 1100 1125 1126 1101
-4 1101 1126 1127 1102
-4 1102 1127 1128 1103
-4 1103 1128 1129 1104
-4 1104 1129 1130 1105
-4 1105 1130 1131 1106
-4 1106 1131 1132 1107
-4 1107 1132 1133 1108
-4 1108 1133 1134 1109
-4 1109 1134 1135 1110
-4 1110 1135 1136 1111
-4 1111 1136 1137 1112
-4 1113 1138 1139 1114
-4 1114 1139 1140 1115
-4 1115 1140 1141 1116
-4 1116 1141 1142 1117
-4 1117 1142 1143 1118
-4 1118 1143 1144 1119
-4 1119 1144 1145 1120
-4 1120 1145 1146 1121
-4 1121 1146 1147 1122
-4 1122 1147 1148 1123
-4 1123 1148 1149 1124
-4 1124 1149 1125 1100
-4 1125 1150 1151 1126
-4 1126 1151 1152 1127
-4 1127 1152 1153 1128
-4 1128 1153 1154 1129
-4 1129 1154 1155 1130
-4 1130 1155 1156 1131
-4 1131 1156 1157 1132
-4 1132 1157 1158 1133
-4 1133 1158 1159 1134
-4 1134 1159 1160 1135
-4 1135 1160 1161 1136
-4 1136 1161 1162 1137
-4 1138 1163 1164 1139
-4 1139 1164 1165 1140
-4 1140 1165 1166 1141
-4 1141 1166 1167 1142
-4 1142 1167 1168 1143
-4 1143 1168 1169 1144
-4 1144 1169 1170 1145
-4 1145 1170 1171 1146
-4 1146 1171 1172 1147
-4 1147 1172 1173 1148
-4 1148 1173 1174 1149
-4 1149 1174 1150 1125
-4 1150 1175 1176 1151
-4 1151 1176 1177 1152
-4 1152 1177 1178 1153
-4 1153 1178 1179 1154
-4 1154 1179 1180 1155
-4 1155 1180 1181 1156
-4 1156 1181 1182 1157
-4 1157 1182 1183 1158
-4 1158 1183 1184 1159
-4 1159 1184 1185 1160
-4 1160 1185 1186 1161
-4 1161 1186 1187 1162
-4 1163 1188 1189 1164
-4 1164 1189 1190 1165
-4 1165 1190 1191 1166
-4 1166 1191 1192 1167
-4 1167 1192 1193 1168
-4 1168 1193 1194 1169
-4 1169 1194 1195 1170
-4 1170 1195 1196 1171
-4 1171 1196 1197 1172
-4 1172 1197 1198 1173
-4 1173 1198 1199 1174
-4 1174 1199 1175 1150
-4 1175 1200 1201 1176
-4 1176 1201 1202 1177
-4 1177 1202 1203 1178
-4 1178 1203 1204 1179
-4 1179 1204 1205 1180
-4 1180 1205 1206 1181
-4 1181 1206 1207 1182
-4 1182 1207 1208 1183
-4 1183 1208 1209 1184
-4 1184 1209 1210 1185
-4 1185 1210 1211 1186
-4 1186 1211 1212 1187
-4 1188 1213 1214 1189
-4 1189 1214 1215 1190
-4 1190 1215 1216 1191
-4 1191 1216 1217 1192
-4 1192 1217 1218 1193
-4 1193 1218 1219 1194
-4 1194 1219 1220 1195
-4 1195 1220 1221 1196
-4 1196 1221 1222 1197
-4 1197 1222 1223 1198
-4 1198 1223 1224 1199
-4 1199 1224 1200 1175
-4 1200 1225 1226 1201
-4 1201 1226 1227 1202
-4 1202 1227 1228 1203
-4 1203 1228 1229 1204
-4 1204 1229 1230 1205
-4 1205 1230 1231 1206
-4 1206 1231 1232 1207
-4 1207 1232 1233 1208
-4 1208 1233 1234 1209
-4 1209 1234 1235 1210
-4 1210 1235 1236 1211
-4 1211 1236 1237 1212
-4 1213 1238 1239 1214
-4 1214 1239 1240 1215
-4 1215 1240 1241 1216
-4 1216 1241 1242 1217
-4 1217 1242 1243 1218
-4 1218 1243 1244 1219
-4 1219 1244 1245 1220
-4 1220 1245 1246 1221
-4 1221 1246 1247 1222
-4 1222 1247 1248 1223
-4 1223 1248 1249 1224
-4 1224 1249 1225 1200
-4 1225 0 3 1226
-4 1226 3 5 1227
-4 1227 5 7 1228
-4 1228 7 9 1229
-4 1229 9 11 1230
-4 1230 11 13 1231
-4 1231 13 15 1232
-4 1232 15 17 1233
-4 1233 17 19 1234
-4 1234 19 21 1235
-4 1235 21 23 1236
-4 1236 23 25 1237
-4 1238 26 29 1239
-4 1239 29 31 1240
-4 1240 31 33 1241
-4 1241 33 35 1242
-4 1242 35 37 1243
-4 1243 37 39 1244
-4 1244 39 41 1245
-4 1245 41 43 1246
-4 1246 43 45 1247
-4 1247 45 47 1248
-4 1248 47 49 1249
-4 0 1225 1249 49
-3 337 362 387
-3 337 387 412
-3 337 412 437
-3 337 437 462
-3 337 462 487
-3 337 487 512
-3 337 512 537
-3 337 537 562
-3 337 562 587
-3 337 587 612
-3 337 612 637
-3 337 637 662
-3 337 662 687
-3 337 687 712
-3 337 712 737
-3 337 737 762
-3 337 762 787
-3 337 787 812
-3 337 812 837
-3 337 837 862
-3 337 862 887
-3 337 887 912
-3 337 912 937
-3 337 937 962
-3 337 962 987
-3 337 987 1012
-3 337 1012 1037
-3 337 1037 1062
-3 337 1062 1087
-3 337 1087 1112
-3 337 1112 1137
-3 337 1137 1162
-3 337 1162 1187
-3 337 1187 1212
-3 337 1212 1237
-3 337 1237 25
-3 337 25 24
-3 337 24 62
-3 337 62 87
-3 337 87 112
-3 337 112 137
-3 337 137 162
-3 337 162 187
-3 337 187 212
-3 337 212 237
-3 337 237 262
-3 337 262 287
-3 337 287 312
-3 263 238 213
-3 263 213 188
-3 263 188 163
-3 263 163 138
-3 263 138 113
-3 263 113 88
-3 263 88 63
-3 263 63 27
-3 263 27 26
-3 263 26 1238
-3 263 1238 1213
-3 263 1213 1188
-3 263 1188 1163
-3 263 1163 1138
-3 263 1138 1113
-3 263 1113 1088
-3 263 1088 1063
-3 263 1063 1038
-3 263 1038 1013
-3 263 1013 988
-3 263 988 963
-3 263 963 938
-3 263 938 913
-3 263 913 888
-3 263 888 863
-3 263 863 838
-3 263 838 813
-3 263 813 788
-3 263 788 763
-3 263 763 738
-3 263 738 713
-3 263 713 688
-3 263 688 663
-3 263 663 638
-3 263 638 613
-3 263 613 588
-3 263 588 563
-3 263 563 538
-3 263 538 513
-3 263 513 488
-3 263 488 463
-3 263 463 438
-3 263 438 413
-3 263 413 388
-3 263 388 363
-3 263 363 338
-3 263 338 313
-3 263 313 288
diff --git a/src/examples/evas/resources/models/lod/iso_sphere0.obj b/src/examples/evas/resources/models/lod/iso_sphere0.obj
deleted file mode 100644
index d32af11ecc..0000000000
--- a/src/examples/evas/resources/models/lod/iso_sphere0.obj
+++ /dev/null
@@ -1,3208 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: ''
-# www.blender.org
-mtllib iso_sphere0.mtl
-o Icosphere
-v -0.110249 -1.101356 0.274484
-v -0.062188 -1.099573 0.413765
-v 0.713575 -0.509789 0.769691
-v -0.360931 -0.593521 1.164261
-v -0.298302 -0.490540 1.234436
-v -0.995906 -0.526705 0.382110
-v -0.327480 -0.593582 -0.506348
-v -0.481403 -0.564117 -0.463230
-v 0.629963 -0.587196 -0.161755
-v 0.622494 -0.465332 -0.264839
-v -1.006389 -0.508910 0.279997
-v 0.700981 -0.455406 -0.163376
-v 0.254059 0.297470 1.186279
-v -0.768379 0.411026 0.864990
-v -0.785297 0.362314 -0.220238
-v -0.828674 0.420643 -0.098236
-v 0.171795 0.410027 -0.484646
-v 0.793722 0.361375 0.276359
-v -0.373001 -0.723549 1.068176
-v -0.262447 -0.697418 1.120849
-v -0.306244 -0.829018 0.990028
-v -0.306583 -0.922073 0.870254
-v -0.141777 -0.889206 0.953461
-v -0.185271 -1.020229 0.727409
-v -0.110476 -0.967560 0.838836
-v -0.209089 -1.068228 0.575962
-v -0.026761 -1.060230 0.622360
-v -0.020484 -1.085381 0.509056
-v -0.205889 -0.553978 1.222435
-v -0.120287 -0.630593 1.186432
-v -0.176779 -0.769745 1.075745
-v -0.028080 -0.754944 1.091766
-v 0.043139 -0.681030 1.141708
-v -0.060829 -0.851776 0.998474
-v 0.080528 -0.819870 1.011017
-v 0.159316 -0.759533 1.043966
-v 0.234337 -0.681862 1.083916
-v 0.037882 -0.937988 0.870071
-v 0.100773 -0.881240 0.929724
-v 0.344238 -0.637497 1.059036
-v -0.021605 -1.008732 0.748743
-v 0.229700 -0.846306 0.922211
-v 0.288429 -0.760956 0.984314
-v 0.088085 -1.010735 0.715973
-v 0.149260 -0.949829 0.809234
-v 0.417625 -0.684761 0.967560
-v 0.460426 -0.574257 1.019770
-v 0.295494 -0.917862 0.768791
-v 0.359184 -0.807846 0.884262
-v 0.224998 -0.988682 0.673233
-v 0.492674 -0.707257 0.872453
-v 0.588772 -0.566635 0.904762
-v 0.187465 -1.042172 0.540932
-v 0.459728 -0.821518 0.760506
-v 0.093951 -1.079105 0.444794
-v 0.346260 -0.955908 0.621109
-v 0.608738 -0.669712 0.771591
-v 0.681778 -0.654349 0.018299
-v 0.754297 -0.600799 0.144424
-v 0.678386 -0.727832 0.201374
-v 0.680261 -0.738382 0.294887
-v 0.707605 -0.698383 0.414413
-v 0.732047 -0.636384 0.525429
-v 0.690912 -0.639238 0.653824
-v 0.553036 -0.696861 -0.146721
-v 0.487335 -0.784496 -0.111755
-v 0.562065 -0.775570 -0.010620
-v 0.575041 -0.819118 0.125412
-v 0.444654 -0.878258 -0.001526
-v 0.429572 -0.935489 0.142841
-v 0.295174 -0.952122 -0.026993
-v 0.550172 -0.865261 0.252952
-v 0.317543 -0.990503 0.121216
-v 0.634266 -0.782878 0.416112
-v 0.569694 -0.851722 0.376007
-v 0.456819 -0.937921 0.293888
-v 0.206250 -1.037846 0.144066
-v 0.642717 -0.745890 0.554104
-v 0.293503 -1.025699 0.282368
-v 0.572954 -0.819747 0.536126
-v 0.497512 -0.891752 0.513485
-v 0.436688 -0.947873 0.416355
-v 0.348703 -0.998562 0.413679
-v 0.131047 -1.071144 0.223591
-v -0.028127 -1.093465 0.211979
-v 0.563853 -0.762062 0.696834
-v 0.484867 -0.857910 0.647430
-v 0.405742 -0.945378 0.536107
-v 0.171776 -1.067400 0.373740
-v 0.042841 -1.093524 0.335016
-v -0.945908 -0.624103 0.355219
-v -0.858869 -0.745473 0.368795
-v -0.903824 -0.673476 0.466160
-v -0.740928 -0.864121 0.398935
-v -0.639156 -0.939567 0.396166
-v -0.547230 -0.991271 0.408798
-v -0.395276 -1.051098 0.437698
-v -0.307894 -1.079100 0.355733
-v -0.208023 -1.095540 0.398588
-v -0.957807 -0.567329 0.533081
-v -0.823268 -0.769591 0.483253
-v -0.879177 -0.649956 0.622574
-v -0.799314 -0.742476 0.643272
-v -0.714306 -0.851376 0.570206
-v -0.751450 -0.684044 0.814255
-v -0.606769 -0.932585 0.554512
-v -0.653723 -0.851559 0.689331
-v -0.657996 -0.804268 0.771881
-v -0.732787 -0.597144 0.919775
-v -0.649750 -0.726547 0.881195
-v -0.482666 -0.994825 0.568329
-v -0.543468 -0.911392 0.715256
-v -0.610367 -0.650635 0.991608
-v -0.412376 -0.995258 0.657318
-v -0.486504 -0.894819 0.798101
-v -0.538353 -0.781197 0.920914
-v -0.317027 -1.054211 0.546280
-v -0.372251 -0.965828 0.758621
-v -0.455441 -0.836964 0.910599
-v -0.487686 -0.699661 1.033493
-v -0.483231 -0.588967 1.117889
-v -0.332062 -0.722649 -0.413002
-v -0.472542 -0.674141 -0.393273
-v -0.376434 -0.797584 -0.328896
-v -0.316624 -0.908852 -0.213471
-v -0.223896 -0.973099 -0.140122
-v -0.341522 -0.974487 -0.089211
-v -0.222070 -1.037926 0.004623
-v -0.226347 -1.072008 0.119289
-v -0.292301 -1.080096 0.246002
-v -0.595108 -0.567123 -0.395531
-v -0.693050 -0.620888 -0.276894
-v -0.523994 -0.796150 -0.244682
-v -0.600021 -0.736654 -0.252388
-v -0.434996 -0.887344 -0.183678
-v -0.693727 -0.756016 -0.127770
-v -0.798508 -0.615941 -0.155975
-v -0.562170 -0.864777 -0.112198
-v -0.470093 -0.949173 -0.042923
-v -0.652245 -0.851681 -0.020462
-v -0.784370 -0.735792 -0.015892
-v -0.879726 -0.604909 -0.027535
-v -0.400098 -1.022894 0.087616
-v -0.560900 -0.937889 0.045883
-v -0.654651 -0.894819 0.103363
-v -0.737725 -0.840212 0.130665
-v -0.855693 -0.714440 0.117538
-v -0.952589 -0.567738 0.121376
-v -0.536682 -0.974981 0.137865
-v -0.443676 -1.038859 0.285791
-v -0.565946 -0.978014 0.228447
-v -0.682046 -0.906258 0.248672
-v -0.798652 -0.806204 0.249657
-v -0.900818 -0.685853 0.236559
-v 0.364401 -0.866943 -0.115689
-v 0.138964 -1.019041 0.004616
-v 0.055685 -1.069101 0.124313
-v 0.507913 -0.568112 -0.313654
-v 0.457798 -0.660530 -0.286553
-v 0.399971 -0.775978 -0.216141
-v 0.388908 -0.578682 -0.402161
-v 0.332039 -0.707054 -0.340149
-v 0.276535 -0.641663 -0.422928
-v 0.255951 -0.809502 -0.282639
-v 0.255299 -0.883377 -0.185150
-v 0.197056 -0.758515 -0.360361
-v 0.120502 -0.708565 -0.433006
-v 0.055672 -0.642776 -0.494301
-v 0.150264 -0.950905 -0.136765
-v 0.140052 -0.881240 -0.246931
-v 0.105860 -0.810220 -0.341287
-v 0.038784 -0.937927 -0.200119
-v 0.027908 -0.865150 -0.301453
-v -0.057009 -0.798164 -0.384575
-v -0.087965 -0.703285 -0.465790
-v -0.096155 -0.580330 -0.546017
-v 0.030460 -1.024101 -0.036553
-v -0.083474 -0.992786 -0.123757
-v -0.133723 -0.922691 -0.237885
-v -0.168232 -0.868988 -0.305176
-v -0.212531 -0.658829 -0.487961
-v -0.083644 -1.064487 0.056297
-v -0.218428 -0.775589 -0.394486
-v 0.855019 0.223587 0.350554
-v 0.873192 0.145696 0.438187
-v 0.900377 -0.039114 0.455263
-v 0.856945 -0.012463 0.639221
-v 0.853991 -0.137632 0.660118
-v 0.893110 -0.136417 0.511597
-v 0.805222 -0.252850 0.751053
-v 0.854736 -0.262312 0.617996
-v 0.752464 -0.350973 0.811645
-v 0.802780 -0.386408 0.680313
-v 0.836891 0.243326 0.189449
-v 0.887652 0.094606 0.255270
-v 0.889857 -0.009873 0.157722
-v 0.908469 -0.110742 0.295959
-v 0.848628 -0.049574 -0.006084
-v 0.869652 -0.194567 0.073166
-v 0.901311 -0.216767 0.374639
-v 0.894486 -0.215997 0.210350
-v 0.822922 -0.131565 -0.070412
-v 0.874582 -0.274598 0.517716
-v 0.816315 -0.275309 -0.046936
-v 0.877597 -0.335411 0.416973
-v 0.877422 -0.335286 0.250114
-v 0.855412 -0.343783 0.119755
-v 0.839464 -0.403046 0.544548
-v 0.854538 -0.426583 0.335016
-v 0.793480 -0.396715 -0.029610
-v 0.812097 -0.513183 0.463482
-v 0.823757 -0.469172 0.166038
-v 0.777916 -0.516029 0.604492
-v 0.790512 -0.575120 0.360520
-v 0.790648 -0.568769 0.259697
-v 0.749102 -0.516366 -0.018978
-v 0.109913 0.295746 1.231827
-v 0.048252 0.186767 1.284100
-v 0.204224 0.188354 1.245705
-v 0.003429 0.065201 1.317791
-v 0.138519 0.071731 1.293274
-v 0.002718 -0.071923 1.331673
-v -0.031456 -0.203831 1.329540
-v -0.174870 -0.275437 1.317343
-v -0.248642 -0.393799 1.279480
-v -0.125881 -0.417526 1.284876
-v 0.351662 0.178489 1.188736
-v 0.251495 0.029001 1.266598
-v 0.352798 0.071358 1.214752
-v 0.464966 0.027868 1.157257
-v 0.161621 -0.070526 1.303596
-v 0.339951 -0.075085 1.238045
-v 0.433853 -0.147557 1.185257
-v 0.542770 -0.061008 1.108261
-v 0.136963 -0.195931 1.304958
-v 0.234021 -0.207127 1.273453
-v 0.347084 -0.205954 1.226263
-v 0.555634 -0.189373 1.092773
-v 0.072316 -0.275980 1.305017
-v 0.288574 -0.289734 1.241646
-v 0.442047 -0.275818 1.163857
-v -0.007469 -0.374527 1.295067
-v 0.187122 -0.347423 1.262314
-v 0.548492 -0.319763 1.071991
-v 0.120865 -0.427628 1.257294
-v 0.303848 -0.417084 1.199646
-v 0.464966 -0.431069 1.099502
-v 0.603500 -0.411415 0.985702
-v 0.376450 -0.493225 1.129272
-v 0.027123 -0.525711 1.234840
-v 0.203094 -0.564438 1.172951
-v 0.552449 -0.489899 0.992349
-v -0.797073 0.299019 0.924774
-v -0.931625 0.208864 0.783875
-v -0.895537 0.150712 0.872455
-v -0.982189 0.020672 0.778694
-v -1.039349 -0.012266 0.646988
-v -1.025154 -0.143307 0.697952
-v -1.068476 -0.195739 0.544872
-v -1.038289 -0.332960 0.574764
-v -1.013882 -0.442173 0.529175
-v -0.789558 0.188408 0.992798
-v -0.842621 0.071689 0.974335
-v -0.790909 0.020241 1.043015
-v -0.903503 -0.038874 0.919693
-v -0.966637 -0.108612 0.824249
-v -0.761566 -0.070961 1.079636
-v -0.849716 -0.146908 0.988449
-v -0.631439 -0.147606 1.178345
-v -0.931031 -0.206888 0.868035
-v -0.752151 -0.209297 1.081154
-v -0.994934 -0.239495 0.741297
-v -0.866592 -0.266335 0.948105
-v -0.664734 -0.280304 1.136902
-v -0.969994 -0.340862 0.754692
-v -0.900520 -0.360630 0.867432
-v -0.781990 -0.346770 1.019417
-v -0.537888 -0.274704 1.214447
-v -0.637245 -0.384175 1.126305
-v -0.500526 -0.395867 1.200912
-v -0.964844 -0.471052 0.660278
-v -0.917002 -0.446322 0.783962
-v -0.853729 -0.511726 0.842621
-v -0.791946 -0.475563 0.946289
-v -0.701355 -0.505203 1.018921
-v -0.870159 -0.587330 0.739197
-v -0.579948 -0.533329 1.096115
-v -0.436623 -0.476410 1.197609
-v -0.896107 0.260399 -0.140243
-v -0.863220 0.206413 -0.226212
-v -0.823517 0.110378 -0.316391
-v -0.765594 0.048800 -0.390198
-v -0.756767 -0.073105 -0.413933
-v -0.642075 -0.211197 -0.494270
-v -0.753189 -0.206713 -0.410675
-v -0.528721 -0.297555 -0.545685
-v -0.693680 -0.332359 -0.432587
-v -0.439335 -0.422134 -0.548836
-v -0.551071 -0.454452 -0.481064
-v -0.968349 0.162035 -0.075088
-v -0.920486 0.023830 -0.214058
-v -0.974258 -0.056202 -0.138420
-v -1.018108 0.052495 -0.013062
-v -0.867271 -0.070419 -0.299347
-v -1.042774 -0.057651 0.023773
-v -1.018028 -0.147762 -0.043488
-v -0.848155 -0.171522 -0.314933
-v -0.920235 -0.219563 -0.215729
-v -0.962723 -0.242028 -0.141434
-v -1.062206 -0.189406 0.102959
-v -0.837151 -0.288597 -0.307297
-v -1.011688 -0.277241 -0.022102
-v -0.899345 -0.362726 -0.197342
-v -1.062685 -0.320561 0.209671
-v -0.796089 -0.421057 -0.302750
-v -0.940758 -0.429836 -0.083817
-v -1.017035 -0.357368 0.045101
-v -0.685471 -0.460098 -0.387879
-v -0.755928 -0.497395 -0.302246
-v -0.860481 -0.499496 -0.169525
-v -0.969948 -0.476414 0.032440
-v -1.011921 -0.449012 0.143516
-v 0.151302 0.227646 -0.579250
-v 0.240417 0.167740 -0.569565
-v 0.352859 0.071076 -0.544479
-v 0.457077 0.007443 -0.494370
-v 0.341331 -0.073001 -0.567335
-v 0.440559 -0.178081 -0.509926
-v 0.526474 -0.211632 -0.443977
-v 0.570763 -0.354725 -0.372227
-v 0.063503 0.110535 -0.630537
-v 0.225929 0.049564 -0.602518
-v 0.157833 -0.055206 -0.634080
-v 0.011564 -0.018299 -0.657464
-v 0.056580 -0.166989 -0.653878
-v -0.079742 -0.171490 -0.664258
-v 0.329720 -0.215588 -0.565647
-v 0.234021 -0.207126 -0.603422
-v 0.136955 -0.195656 -0.634924
-v -0.228662 -0.264770 -0.645063
-v 0.436760 -0.339415 -0.481541
-v 0.286485 -0.312054 -0.565305
-v 0.129387 -0.335476 -0.612875
-v -0.023620 -0.347832 -0.634046
-v 0.390961 -0.430982 -0.478951
-v 0.242386 -0.406883 -0.558060
-v -0.214970 -0.378815 -0.618946
-v 0.498581 -0.467758 -0.384659
-v 0.304146 -0.501411 -0.493553
-v 0.158367 -0.448603 -0.568822
-v 0.039962 -0.486011 -0.580813
-v -0.112179 -0.452354 -0.602360
-v -0.365608 -0.348961 -0.597048
-v 0.182381 -0.569523 -0.507286
-v -0.265099 -0.491760 -0.570953
-v 0.634338 -0.254151 1.006775
-v 0.674431 -0.370559 0.921661
-v 0.339609 0.400627 1.086220
-v 0.413074 0.307060 1.096634
-v 0.493668 0.390770 0.978104
-v 0.487900 0.191231 1.097000
-v 0.561234 0.240539 1.013565
-v 0.579407 0.445633 0.836319
-v 0.553312 0.069551 1.077953
-v 0.623489 0.302132 0.907501
-v 0.628494 0.059799 1.010101
-v 0.664124 0.156975 0.937347
-v 0.674873 0.347187 0.796234
-v 0.640411 -0.091018 1.017624
-v 0.710852 0.243538 0.818415
-v 0.684050 0.445297 0.651619
-v 0.703170 -0.067066 0.938428
-v 0.735313 0.015749 0.885666
-v 0.742340 0.130928 0.835831
-v 0.758697 0.321524 0.653553
-v 0.725464 -0.197471 0.905182
-v 0.785252 0.202762 0.709465
-v 0.787262 -0.130692 0.812874
-v 0.798337 -0.033087 0.782379
-v 0.814835 0.066925 0.724731
-v 0.852470 0.140154 0.566891
-v 0.813196 0.292626 0.495865
-v 0.777002 0.392507 0.387556
-v -0.681000 0.162643 1.101608
-v -0.650574 0.011139 1.158310
-v -0.562286 -0.062481 1.218773
-v -0.673737 0.408600 0.971817
-v -0.657486 0.307503 1.053177
-v -0.536240 0.395401 1.081467
-v -0.587906 0.138237 1.171783
-v -0.529190 0.261444 1.159332
-v -0.442047 0.347244 1.158981
-v -0.529311 0.072057 1.216618
-v -0.425186 0.203438 1.228409
-v -0.338699 0.305794 1.216492
-v -0.246124 0.402557 1.185593
-v -0.436615 0.062210 1.260674
-v -0.470261 -0.103348 1.263359
-v -0.317116 0.084984 1.292446
-v -0.252129 0.223144 1.269314
-v -0.091368 0.325561 1.241463
-v -0.068966 0.428268 1.185837
-v -0.435104 -0.253784 1.263191
-v -0.364487 -0.097092 1.299274
-v -0.260727 0.002031 1.314409
-v -0.143267 0.069031 1.320887
-v -0.114067 0.189056 1.292511
-v -0.341660 -0.322411 1.280788
-v -0.243111 -0.155199 1.323806
-v -0.150211 -0.102167 1.334896
-v 0.134029 0.414245 1.162956
-v -1.078450 -0.062447 0.163628
-v -1.050024 -0.390249 0.383626
-v -0.934099 0.326693 0.002350
-v -0.884750 0.412758 0.004959
-v -0.955166 0.390092 0.196289
-v -1.033885 0.130917 0.085121
-v -1.016044 0.226776 0.127899
-v -1.016134 0.274298 0.241207
-v -1.061386 0.035571 0.133251
-v -0.954273 0.405690 0.374010
-v -1.072513 0.085176 0.253056
-v -1.050812 0.177684 0.293993
-v -1.016940 0.276634 0.355390
-v -1.003547 0.297398 0.450367
-v -0.910032 0.450023 0.512432
-v -1.092226 -0.134222 0.278348
-v -1.089182 -0.032168 0.293993
-v -1.085823 0.015471 0.376045
-v -1.062517 0.130813 0.419853
-v -1.081847 -0.261361 0.355970
-v -1.027391 0.194346 0.535500
-v -0.962891 0.311455 0.604797
-v -0.890339 0.417700 0.645454
-v -1.089265 -0.135954 0.395477
-v -1.078131 -0.066642 0.510792
-v -1.055083 0.071821 0.551674
-v -0.991638 0.161807 0.691895
-v -0.887314 0.328934 0.766159
-v 0.043732 0.388165 -0.528538
-v -0.000996 0.216976 -0.610552
-v -0.123041 0.080181 -0.650016
-v -0.185683 0.003176 -0.656970
-v -0.242079 -0.124306 -0.655064
-v -0.082414 0.369663 -0.549873
-v -0.178492 0.203072 -0.615200
-v -0.207886 0.291695 -0.579193
-v -0.215157 0.459065 -0.487068
-v -0.340553 0.301708 -0.547562
-v -0.420105 0.389065 -0.475254
-v -0.317333 0.085037 -0.622410
-v -0.349597 0.177685 -0.589103
-v -0.321801 -0.032400 -0.634987
-v -0.443474 0.210947 -0.546586
-v -0.555183 0.393593 -0.402718
-v -0.415982 0.073709 -0.593839
-v -0.535355 0.231052 -0.499184
-v -0.401253 -0.161071 -0.615940
-v -0.477081 -0.032400 -0.584534
-v -0.511826 0.061714 -0.559296
-v -0.624023 0.271095 -0.426178
-v -0.526871 -0.128527 -0.567047
-v -0.594633 0.137322 -0.495041
-v -0.702545 0.377110 -0.297432
-v -0.630463 -0.067352 -0.509239
-v -0.655045 0.063299 -0.476692
-v -0.720680 0.218437 -0.377766
-v 0.833378 0.148094 0.044758
-v 0.827852 0.074356 -0.019073
-v 0.773605 -0.168636 -0.164246
-v 0.713865 -0.330425 -0.214859
-v 0.764353 0.366566 0.106793
-v 0.780333 0.263691 0.006836
-v 0.694742 0.354485 -0.085243
-v 0.660339 0.453911 -0.020836
-v 0.746094 0.200268 -0.121429
-v 0.673134 0.253269 -0.205711
-v 0.779146 0.072057 -0.121442
-v 0.573076 0.395097 -0.220517
-v 0.759148 -0.008433 -0.182915
-v 0.703064 0.086214 -0.242981
-v 0.571861 0.300612 -0.297661
-v 0.612816 0.153896 -0.327927
-v 0.454704 0.335484 -0.381443
-v 0.387272 0.420063 -0.371040
-v 0.717781 -0.164336 -0.250771
-v 0.662476 -0.010376 -0.316177
-v 0.527071 0.203980 -0.386773
-v 0.631264 -0.127917 -0.356819
-v 0.562897 0.064026 -0.403893
-v 0.447166 0.167927 -0.464920
-v 0.634361 -0.253950 -0.336456
-v 0.545197 -0.067470 -0.436531
-v 0.335762 0.220663 -0.510963
-v 0.275703 0.314098 -0.498272
-v -0.038756 0.894973 0.419268
-v -0.119508 0.899141 0.345684
-v -0.074161 0.879336 0.532913
-v 0.088133 0.850851 0.588669
-v -0.002878 0.826021 0.703499
-v 0.155647 0.772594 0.754822
-v 0.060211 0.728195 0.873123
-v 0.204838 0.709007 0.843132
-v 0.159410 0.599563 1.005615
-v 0.217758 0.459343 1.105126
-v 0.056423 0.887443 0.314535
-v 0.112078 0.872403 0.437428
-v 0.155213 0.866221 0.270343
-v 0.223995 0.846657 0.377333
-v 0.212980 0.830588 0.535095
-v 0.331527 0.804510 0.356182
-v 0.376762 0.771977 0.476635
-v 0.232307 0.771060 0.696566
-v 0.301972 0.772631 0.621040
-v 0.466334 0.728246 0.356355
-v 0.359694 0.706955 0.713745
-v 0.446012 0.690987 0.624397
-v 0.476207 0.703164 0.498782
-v 0.558953 0.656763 0.378056
-v 0.279017 0.632273 0.901537
-v 0.367754 0.642677 0.820542
-v 0.563282 0.636220 0.502197
-v 0.675937 0.541213 0.304753
-v 0.494820 0.615391 0.712158
-v 0.583584 0.576883 0.628525
-v 0.663585 0.548459 0.418644
-v 0.291831 0.519855 1.015487
-v 0.390825 0.573212 0.893829
-v 0.473460 0.581203 0.796553
-v 0.658712 0.524599 0.546349
-v 0.408577 0.494751 0.962509
-v 0.524549 0.505131 0.836426
-v 0.579623 0.527981 0.724210
-v 0.738865 0.438808 0.479281
-v -0.224673 0.878076 0.499848
-v -0.334595 0.857495 0.484955
-v -0.461901 0.807032 0.535881
-v -0.319727 0.823448 0.643623
-v -0.478218 0.769512 0.641663
-v -0.620258 0.667803 0.699181
-v -0.460948 0.718101 0.775681
-v -0.537925 0.655441 0.817185
-v -0.693081 0.541328 0.811478
-v -0.149886 0.850284 0.638062
-v -0.169754 0.806198 0.751068
-v -0.331831 0.770401 0.764832
-v -0.076772 0.762268 0.840943
-v -0.161140 0.738174 0.876648
-v -0.296249 0.704033 0.894196
-v 0.038013 0.678299 0.950470
-v -0.368214 0.661041 0.920624
-v -0.177146 0.642502 0.999024
-v -0.043579 0.633255 1.013748
-v -0.551794 0.577057 0.909622
-v -0.443764 0.597771 0.958298
-v -0.314133 0.596023 1.017761
-v -0.636597 0.510673 0.909302
-v -0.217663 0.534157 1.098526
-v -0.075783 0.539734 1.103966
-v 0.053883 0.486152 1.131989
-v -0.535230 0.489148 1.007144
-v -0.382730 0.471611 1.102661
-v -0.262238 0.880685 0.242918
-v -0.366513 0.834036 0.109947
-v -0.396471 0.844607 0.218975
-v -0.487932 0.787542 0.101570
-v -0.575798 0.709910 0.003189
-v -0.705952 0.569721 -0.085892
-v -0.686345 0.638141 0.021699
-v -0.329729 0.871523 0.354317
-v -0.482970 0.817067 0.412291
-v -0.546059 0.782513 0.211968
-v -0.508573 0.806277 0.315035
-v -0.628845 0.717752 0.126377
-v -0.659877 0.722723 0.290817
-v -0.641754 0.733998 0.375984
-v -0.616232 0.730970 0.522907
-v -0.733090 0.647675 0.157398
-v -0.747708 0.653419 0.399923
-v -0.718433 0.641140 0.574951
-v -0.785944 0.548135 0.019524
-v -0.795806 0.605060 0.273619
-v -0.788129 0.606008 0.470017
-v -0.773590 0.536219 0.698479
-v -0.851126 0.525618 0.145680
-v -0.862637 0.537362 0.371647
-v -0.824188 0.525131 0.606216
-v -0.892513 0.494466 0.256191
-v -0.816345 0.439278 0.763245
-v -0.005277 0.890859 0.226135
-v -0.115999 0.889759 0.189400
-v -0.036691 0.854998 0.040798
-v 0.018555 0.804504 -0.074859
-v 0.039928 0.739204 -0.195091
-v 0.096828 0.633232 -0.317154
-v -0.032133 0.677582 -0.290947
-v 0.213154 0.497711 -0.408485
-v 0.038654 0.539219 -0.423164
-v -0.196263 0.866438 0.102371
-v -0.252596 0.827354 -0.002693
-v -0.124884 0.806828 -0.084915
-v -0.412956 0.774296 -0.029175
-v -0.220573 0.775395 -0.125629
-v -0.142087 0.726547 -0.224792
-v -0.335094 0.745499 -0.139892
-v -0.518505 0.702583 -0.081253
-v -0.296557 0.699032 -0.226279
-v -0.434990 0.682381 -0.184349
-v -0.213228 0.661377 -0.301376
-v -0.578346 0.625999 -0.150223
-v -0.137775 0.594498 -0.383949
-v -0.346087 0.614502 -0.316910
-v -0.443033 0.599181 -0.284548
-v -0.532875 0.568657 -0.264793
-v -0.682381 0.511658 -0.193222
-v -0.061173 0.524887 -0.444717
-v -0.290546 0.535461 -0.411880
-v -0.462570 0.502914 -0.372528
-v -0.615456 0.468956 -0.299286
-v 0.255856 0.827973 0.203234
-v 0.363285 0.785062 0.248234
-v 0.459815 0.721791 0.195068
-v 0.557995 0.653935 0.249024
-v 0.152828 0.841331 0.105068
-v 0.152860 0.810490 0.001740
-v 0.351752 0.771059 0.137865
-v 0.303566 0.771009 0.047424
-v 0.190367 0.763390 -0.081917
-v 0.407558 0.707027 0.022522
-v 0.304792 0.703579 -0.108139
-v 0.196968 0.674366 -0.227127
-v 0.530724 0.646154 0.099144
-v 0.433388 0.632450 -0.098266
-v 0.313503 0.629662 -0.214844
-v 0.638255 0.565768 0.186165
-v 0.512640 0.605060 -0.028727
-v 0.261963 0.552185 -0.335564
-v 0.599043 0.541545 0.001015
-v 0.407047 0.550880 -0.236671
-v 0.700920 0.479652 0.142796
-v 0.560188 0.491066 -0.138596
-v 0.480450 0.483530 -0.240707
-vn -0.030039 -0.999280 0.023159
-vn -0.318381 -0.418505 -0.850580
-vn -0.273241 -0.422663 0.864115
-vn 0.741582 -0.406186 -0.533918
-vn -0.243956 -0.561595 0.790631
-vn -0.150702 -0.780452 0.606782
-vn -0.121768 -0.863291 0.489797
-vn -0.032543 -0.986394 0.161146
-vn -0.180613 -0.520023 0.834839
-vn -0.131259 -0.537960 0.832689
-vn -0.190597 -0.659452 0.727183
-vn -0.177466 -0.663482 0.726841
-vn -0.086035 -0.598582 0.796428
-vn -0.023433 -0.616501 0.787005
-vn 0.040626 -0.585979 0.809307
-vn -0.115469 -0.726850 0.677020
-vn -0.050328 -0.721571 0.690509
-vn -0.008848 -0.692240 0.721613
-vn -0.106804 -0.834178 0.541055
-vn 0.097562 -0.707426 0.700022
-vn 0.159423 -0.653549 0.739904
-vn 0.185674 -0.646525 0.739953
-vn 0.226893 -0.609758 0.759418
-vn 0.240408 -0.545049 0.803197
-vn 0.042928 -0.819291 0.571768
-vn 0.050565 -0.810740 0.583218
-vn 0.119642 -0.779255 0.615181
-vn 0.120755 -0.777578 0.617082
-vn 0.008578 -0.906267 0.422619
-vn 0.074879 -0.876991 0.474637
-vn 0.238304 -0.745659 0.622258
-vn 0.265864 -0.705758 0.656675
-vn 0.298415 -0.687248 0.662299
-vn 0.311050 -0.654756 0.688870
-vn 0.399165 -0.600036 0.693271
-vn -0.036443 -0.950971 0.307124
-vn 0.015956 -0.926179 0.376748
-vn 0.119977 -0.882109 0.455510
-vn 0.160630 -0.871328 0.463665
-vn 0.212447 -0.810003 0.546591
-vn 0.247807 -0.795699 0.552679
-vn 0.441404 -0.602170 0.665247
-vn 0.513907 -0.521031 0.681489
-vn -0.012153 -0.976309 0.216040
-vn 0.094386 -0.923274 0.372366
-vn 0.315806 -0.800788 0.508926
-vn 0.379647 -0.765320 0.519763
-vn 0.384273 -0.701303 0.600423
-vn 0.456283 -0.637072 0.621245
-vn 0.265853 -0.877664 0.398783
-vn 0.302140 -0.858855 0.413618
-vn 0.527457 -0.633526 0.566069
-vn 0.592674 -0.541924 0.595865
-vn 0.586803 -0.520388 0.620370
-vn 0.165543 -0.960789 0.222440
-vn 0.183669 -0.944077 0.273832
-vn 0.243136 -0.921288 0.303501
-vn 0.465987 -0.754624 0.461950
-vn 0.544343 -0.661885 0.515363
-vn 0.109931 -0.988979 0.099178
-vn 0.168666 -0.963858 0.206225
-vn 0.355160 -0.897329 0.262033
-vn 0.382093 -0.854657 0.351521
-vn 0.483803 -0.792854 0.370563
-vn 0.613052 -0.635987 0.468709
-vn 0.639648 -0.558471 0.528168
-vn 0.830626 -0.545800 -0.110282
-vn 0.834464 -0.550043 -0.033518
-vn 0.845911 -0.522745 0.105701
-vn 0.766474 -0.497637 0.406048
-vn 0.717041 -0.559901 -0.415168
-vn 0.699629 -0.597428 -0.391916
-vn 0.640135 -0.645892 -0.415995
-vn 0.793257 -0.570008 -0.214091
-vn 0.716184 -0.641950 -0.273827
-vn 0.593451 -0.711814 -0.375682
-vn 0.735871 -0.632996 -0.240437
-vn 0.616533 -0.730864 -0.292786
-vn 0.827896 -0.555255 -0.079242
-vn 0.587719 -0.771282 -0.244358
-vn 0.463221 -0.839383 -0.284362
-vn 0.829227 -0.558905 -0.002674
-vn 0.710393 -0.697640 -0.092952
-vn 0.704135 -0.700504 -0.116137
-vn 0.604106 -0.779779 -0.164321
-vn 0.466319 -0.836741 -0.287071
-vn 0.754851 -0.654263 0.046252
-vn 0.723101 -0.690425 0.020935
-vn 0.703337 -0.710069 -0.033454
-vn 0.577474 -0.807956 -0.117183
-vn 0.785000 -0.598149 0.161223
-vn 0.750266 -0.648643 0.127917
-vn 0.611462 -0.791211 -0.009952
-vn 0.476514 -0.873458 -0.100025
-vn 0.456603 -0.880947 -0.124283
-vn 0.361441 -0.920708 -0.147163
-vn 0.782221 -0.575828 0.237809
-vn 0.701635 -0.697818 0.144076
-vn 0.684546 -0.717405 0.129328
-vn 0.662974 -0.736624 0.133606
-vn 0.600336 -0.795365 0.083613
-vn 0.591883 -0.805395 0.031848
-vn 0.498897 -0.866584 0.011591
-vn 0.474308 -0.880185 -0.017486
-vn 0.304087 -0.946420 -0.108722
-vn 0.287084 -0.956381 -0.054025
-vn 0.710920 -0.617699 0.336216
-vn 0.712034 -0.623556 0.322777
-vn 0.660716 -0.693826 0.286460
-vn 0.661814 -0.692891 0.286187
-vn 0.629693 -0.736983 0.245647
-vn 0.526478 -0.836222 0.153472
-vn 0.490635 -0.859269 0.144688
-vn 0.353499 -0.934376 0.044498
-vn 0.207692 -0.977672 -0.031957
-vn 0.144371 -0.985973 -0.083751
-vn 0.525548 -0.811742 0.254703
-vn 0.534715 -0.798964 0.275203
-vn 0.424321 -0.885955 0.187178
-vn 0.393028 -0.899757 0.189647
-vn 0.338923 -0.934455 0.109202
-vn 0.186203 -0.981603 0.042241
-vn 0.066320 -0.997046 -0.038737
-vn 0.736428 -0.477065 0.479669
-vn 0.630551 -0.649920 0.424275
-vn 0.619218 -0.696831 0.361932
-vn 0.490662 -0.791727 0.363894
-vn 0.254665 -0.959445 0.120879
-vn 0.114580 -0.990445 0.076751
-vn 0.053298 -0.998563 -0.005607
-vn -0.814279 -0.578178 0.051571
-vn -0.291615 -0.956404 0.015856
-vn -0.875099 -0.474915 0.093048
-vn -0.859008 -0.501569 0.102632
-vn -0.771303 -0.627285 0.107727
-vn -0.811675 -0.545105 0.209868
-vn -0.716817 -0.693004 0.076931
-vn -0.766796 -0.604048 0.217141
-vn -0.762738 -0.610951 0.212058
-vn -0.670362 -0.724985 0.158150
-vn -0.691817 -0.687712 0.220094
-vn -0.744647 -0.562336 0.359553
-vn -0.717395 -0.572780 0.396570
-vn -0.585624 -0.795651 0.154866
-vn -0.581801 -0.799395 0.149921
-vn -0.630841 -0.706970 0.319739
-vn -0.629610 -0.687739 0.361394
-vn -0.648654 -0.646030 0.402359
-vn -0.499943 -0.854677 0.139943
-vn -0.552268 -0.785360 0.279659
-vn -0.592014 -0.635072 0.496188
-vn -0.606217 -0.557966 0.566723
-vn -0.373266 -0.926668 0.044267
-vn -0.385179 -0.912833 0.135547
-vn -0.456782 -0.874069 0.165390
-vn -0.454639 -0.842121 0.290061
-vn -0.508684 -0.804589 0.306394
-vn -0.507706 -0.758627 0.408314
-vn -0.587983 -0.553233 0.590093
-vn -0.407399 -0.856236 0.317625
-vn -0.467139 -0.748347 0.470912
-vn -0.464797 -0.739090 0.487555
-vn -0.518418 -0.677977 0.521142
-vn -0.514222 -0.610045 0.602844
-vn -0.307873 -0.931193 0.195174
-vn -0.300584 -0.924876 0.232922
-vn -0.367309 -0.844058 0.390705
-vn -0.369866 -0.828684 0.420097
-vn -0.438059 -0.744484 0.503832
-vn -0.462995 -0.605742 0.647080
-vn -0.455136 -0.523605 0.720201
-vn -0.463006 -0.525540 0.713746
-vn -0.207535 -0.971933 0.110798
-vn -0.205416 -0.971267 0.120188
-vn -0.323472 -0.800757 0.504136
-vn -0.322808 -0.802471 0.501831
-vn -0.367739 -0.666660 0.648330
-vn -0.167544 -0.974532 0.149053
-vn -0.206765 -0.926515 0.314354
-vn -0.201787 -0.924075 0.324604
-vn -0.207899 -0.914177 0.347933
-vn -0.273962 -0.759089 0.590533
-vn -0.313418 -0.685392 0.657273
-vn -0.339215 -0.670367 0.659955
-vn -0.344502 -0.560381 0.753188
-vn -0.043099 -0.987472 0.151794
-vn -0.179759 -0.875349 0.448834
-vn -0.314928 -0.544977 0.777058
-vn -0.299889 -0.552046 -0.778018
-vn -0.163163 -0.901183 -0.401555
-vn -0.097632 -0.988680 -0.113925
-vn -0.321280 -0.526408 -0.787194
-vn -0.430464 -0.508740 -0.745577
-vn -0.315007 -0.620000 -0.718589
-vn -0.383911 -0.643993 -0.661729
-vn -0.421475 -0.623827 -0.658179
-vn -0.475859 -0.559320 -0.678763
-vn -0.506184 -0.547771 -0.666127
-vn -0.285135 -0.759631 -0.584516
-vn -0.343895 -0.730392 -0.590139
-vn -0.596234 -0.593554 -0.540554
-vn -0.627964 -0.575277 -0.524135
-vn -0.201518 -0.848834 -0.488744
-vn -0.273911 -0.826659 -0.491536
-vn -0.419833 -0.750827 -0.509901
-vn -0.498474 -0.702723 -0.507645
-vn -0.517154 -0.696725 -0.497117
-vn -0.325040 -0.833335 -0.447104
-vn -0.395158 -0.800701 -0.450253
-vn -0.543964 -0.719741 -0.431366
-vn -0.674645 -0.593128 -0.439378
-vn -0.720498 -0.561164 -0.407404
-vn -0.229868 -0.916616 -0.327072
-vn -0.298766 -0.890639 -0.342784
-vn -0.461450 -0.806623 -0.369356
-vn -0.485922 -0.794749 -0.363667
-vn -0.618284 -0.690077 -0.376190
-vn -0.212092 -0.934557 -0.285691
-vn -0.388701 -0.875793 -0.286179
-vn -0.539371 -0.791884 -0.286355
-vn -0.589633 -0.759085 -0.275906
-vn -0.633989 -0.710804 -0.304658
-vn -0.690344 -0.674750 -0.261034
-vn -0.754774 -0.577564 -0.311025
-vn -0.808008 -0.526781 -0.263865
-vn -0.401069 -0.881330 -0.249801
-vn -0.508929 -0.836455 -0.203308
-vn -0.236197 -0.954155 -0.183845
-vn -0.294527 -0.945197 -0.140910
-vn -0.377734 -0.912579 -0.156579
-vn -0.381473 -0.911501 -0.153763
-vn -0.512087 -0.836863 -0.193460
-vn -0.539235 -0.825502 -0.166650
-vn -0.579946 -0.796286 -0.172024
-vn -0.710158 -0.683648 -0.168228
-vn -0.749176 -0.649897 -0.127941
-vn -0.822593 -0.538542 -0.182521
-vn -0.865217 -0.488676 -0.112227
-vn -0.647346 -0.753292 -0.116163
-vn -0.109734 -0.993159 -0.039914
-vn -0.156841 -0.987534 -0.013324
-vn -0.269967 -0.962414 -0.029631
-vn -0.437636 -0.898915 -0.020659
-vn -0.488784 -0.872302 -0.013396
-vn -0.530058 -0.847146 -0.037179
-vn -0.595656 -0.803198 -0.008178
-vn -0.650809 -0.758054 -0.042450
-vn -0.709317 -0.704889 0.000801
-vn -0.758500 -0.649574 -0.052253
-vn -0.812349 -0.583147 -0.005220
-vn -0.864071 -0.498640 -0.068851
-vn -0.888314 -0.459101 0.011193
-vn 0.511546 -0.742093 -0.433150
-vn 0.326710 -0.902884 -0.279394
-vn 0.223319 -0.956207 -0.189199
-vn 0.147082 -0.980301 -0.131823
-vn 0.634905 -0.523288 -0.568388
-vn 0.636125 -0.513757 -0.575673
-vn 0.566460 -0.634495 -0.525870
-vn 0.566608 -0.616940 -0.546205
-vn 0.546544 -0.494545 -0.675806
-vn 0.499914 -0.722638 -0.477368
-vn 0.490414 -0.619491 -0.612964
-vn 0.491217 -0.545604 -0.678986
-vn 0.435982 -0.540675 -0.719437
-vn 0.435208 -0.664344 -0.607652
-vn 0.459788 -0.791975 -0.401710
-vn 0.437960 -0.738065 -0.513275
-vn 0.420766 -0.724377 -0.546108
-vn 0.347053 -0.641698 -0.683942
-vn 0.340512 -0.613231 -0.712740
-vn 0.306032 -0.602730 -0.736927
-vn 0.285498 -0.547337 -0.786711
-vn 0.405498 -0.796529 -0.448456
-vn 0.226116 -0.535374 -0.813785
-vn 0.328741 -0.901035 -0.282957
-vn 0.292703 -0.870328 -0.396047
-vn 0.330149 -0.832421 -0.445059
-vn 0.270493 -0.802160 -0.532328
-vn 0.294590 -0.762591 -0.575909
-vn 0.253037 -0.726693 -0.638662
-vn 0.261282 -0.704331 -0.660037
-vn 0.232242 -0.669802 -0.705286
-vn 0.209667 -0.817509 -0.536395
-vn 0.171735 -0.791338 -0.586763
-vn 0.201480 -0.746117 -0.634599
-vn 0.134652 -0.699810 -0.701523
-vn 0.142664 -0.674288 -0.724557
-vn 0.105569 -0.626547 -0.772201
-vn 0.106612 -0.619523 -0.777705
-vn 0.062237 -0.542482 -0.837759
-vn 0.227175 -0.944578 -0.236989
-vn 0.198035 -0.889097 -0.412660
-vn 0.156002 -0.877145 -0.454180
-vn 0.153521 -0.945106 -0.288454
-vn 0.108962 -0.881734 -0.458990
-vn 0.043030 -0.842767 -0.536556
-vn 0.057016 -0.808001 -0.586416
-vn 0.027150 -0.774481 -0.632015
-vn 0.027183 -0.764595 -0.643938
-vn -0.046949 -0.548041 -0.835132
-vn 0.068254 -0.976162 -0.206034
-vn 0.106760 -0.953057 -0.283346
-vn 0.027788 -0.928696 -0.369800
-vn -0.055270 -0.705407 -0.706644
-vn -0.045918 -0.658201 -0.751440
-vn -0.082545 -0.620292 -0.780015
-vn -0.123695 -0.464965 -0.876645
-vn -0.062389 -0.862473 -0.502244
-vn -0.158952 -0.612119 -0.774625
-vn -0.195967 -0.570091 -0.797868
-vn -0.030059 -0.986007 -0.163969
-vn -0.025057 -0.984376 -0.174289
-vn -0.076224 -0.954984 -0.286696
-vn -0.040115 -0.928285 -0.369699
-vn -0.080212 -0.910084 -0.406587
-vn -0.135778 -0.823991 -0.550094
-vn -0.137678 -0.807381 -0.573743
-vn -0.186774 -0.753864 -0.629925
-vn -0.174035 -0.727813 -0.663325
-vn -0.199878 -0.676831 -0.708484
-vn 0.969218 0.128072 0.210273
-vn 0.966790 0.019721 0.254809
-vn 0.928435 -0.113907 0.353602
-vn 0.886802 -0.228867 0.401501
-vn 0.923271 0.379845 -0.057350
-vn 0.953204 0.293811 -0.071259
-vn 0.971177 0.238137 0.010261
-vn 0.973737 0.158346 0.163595
-vn 0.988200 0.148736 0.036576
-vn 0.994794 0.101792 0.004768
-vn 0.993732 0.086774 -0.070481
-vn 0.973507 0.055696 0.221771
-vn 0.969370 0.006359 -0.245523
-vn 0.996576 -0.029764 0.077134
-vn 0.997905 -0.022311 0.060726
-vn 0.989500 -0.014492 -0.143803
-vn 0.983042 -0.024328 -0.181762
-vn 0.944690 -0.040882 -0.325406
-vn 0.964095 -0.079803 0.253285
-vn 0.970837 -0.121012 0.206956
-vn 0.983114 -0.125944 0.132755
-vn 0.994297 -0.098124 -0.041763
-vn 0.932496 -0.099563 -0.347186
-vn 0.980778 -0.152673 0.121515
-vn 0.980523 -0.196401 -0.001178
-vn 0.987016 -0.155106 -0.041727
-vn 0.970171 -0.189278 -0.151467
-vn 0.967664 -0.154581 -0.199325
-vn 0.938214 -0.181526 -0.294624
-vn 0.912615 -0.204254 0.354140
-vn 0.927358 -0.247219 0.280872
-vn 0.952552 -0.215533 0.214918
-vn 0.959476 -0.227620 0.166118
-vn 0.969728 -0.244184 -0.001203
-vn 0.926440 -0.218045 -0.306864
-vn 0.941545 -0.317292 0.113218
-vn 0.941909 -0.322516 0.093763
-vn 0.942771 -0.320818 -0.090876
-vn 0.946338 -0.290883 -0.140820
-vn 0.908611 -0.325823 -0.261277
-vn 0.853491 -0.318042 0.412799
-vn 0.861069 -0.369505 0.349322
-vn 0.897249 -0.338166 0.283881
-vn 0.901061 -0.379033 0.210768
-vn 0.920099 -0.389490 0.041409
-vn 0.916561 -0.399180 -0.023904
-vn 0.923655 -0.376120 -0.073455
-vn 0.894633 -0.355825 -0.270225
-vn 0.835613 -0.347712 -0.425261
-vn 0.827086 -0.448291 0.339063
-vn 0.883909 -0.440779 -0.156266
-vn 0.873464 -0.420674 -0.245142
-vn 0.834938 -0.486822 0.256676
-vn 0.864499 -0.461022 0.200250
-vn 0.858910 -0.497989 0.119505
-vn 0.832791 -0.480569 -0.274796
-vn 0.774154 -0.486973 -0.404405
-vn 0.786735 -0.429406 -0.443461
-vn 0.223777 0.315682 0.922100
-vn 0.165054 0.206431 0.964439
-vn -0.036906 -0.095523 0.994743
-vn -0.090970 -0.251535 0.963564
-vn 0.277340 0.358736 0.891286
-vn 0.360411 0.313793 0.878429
-vn 0.228723 0.254416 0.939659
-vn 0.299462 0.210837 0.930522
-vn 0.364204 0.226482 0.903361
-vn 0.368589 0.223061 0.902433
-vn 0.172311 0.098329 0.980123
-vn 0.173045 0.099206 0.979905
-vn 0.268625 0.113036 0.956589
-vn 0.417174 0.106950 0.902512
-vn 0.483270 0.096010 0.870191
-vn 0.345609 0.036485 0.937669
-vn 0.515750 0.045085 0.855552
-vn 0.559311 0.033009 0.828300
-vn 0.025575 -0.022785 0.999413
-vn 0.146691 -0.053975 0.987709
-vn 0.174143 -0.023551 0.984439
-vn 0.303221 -0.049288 0.951645
-vn 0.344360 -0.024587 0.938516
-vn 0.384986 -0.061919 0.920843
-vn 0.456668 -0.055048 0.887933
-vn 0.596293 -0.037001 0.801914
-vn 0.148875 -0.119505 0.981608
-vn 0.384138 -0.099737 0.917873
-vn 0.485947 -0.113545 0.866581
-vn 0.580376 -0.097814 0.808453
-vn 0.014466 -0.195985 0.980500
-vn 0.103902 -0.182838 0.977637
-vn 0.236195 -0.190044 0.952940
-vn 0.286363 -0.170583 0.942814
-vn 0.289374 -0.171503 0.941727
-vn 0.457784 -0.159094 0.874713
-vn 0.607173 -0.157388 0.778826
-vn -0.002676 -0.223631 0.974670
-vn 0.180347 -0.242270 0.953300
-vn 0.208946 -0.232073 0.949992
-vn 0.332173 -0.259252 0.906890
-vn 0.456535 -0.228800 0.859782
-vn 0.491126 -0.270701 0.827959
-vn 0.575987 -0.239014 0.781736
-vn 0.302063 -0.306048 0.902825
-vn 0.485286 -0.297261 0.822273
-vn 0.630996 -0.296302 0.716972
-vn -0.129474 -0.363156 0.922688
-vn -0.110199 -0.359422 0.926646
-vn 0.050406 -0.359635 0.931731
-vn 0.133152 -0.340343 0.930826
-vn 0.220056 -0.412659 0.883905
-vn 0.298875 -0.364158 0.882078
-vn 0.377228 -0.408506 0.831157
-vn 0.624250 -0.346773 0.700043
-vn 0.006566 -0.419279 0.907834
-vn 0.000304 -0.419423 0.907791
-vn 0.541065 -0.422166 0.727340
-vn 0.583900 -0.409005 0.701267
-vn 0.679113 -0.389028 0.622466
-vn -0.205586 -0.462629 0.862386
-vn 0.078571 -0.506693 0.858539
-vn 0.191204 -0.490189 0.850385
-vn 0.376784 -0.493925 0.783627
-vn 0.392746 -0.471950 0.789312
-vn 0.500467 -0.466725 0.729178
-vn 0.609539 -0.453582 0.650173
-vn -0.864668 0.219887 0.451663
-vn -0.952335 -0.271164 0.139743
-vn -0.924678 -0.367817 0.098395
-vn -0.779159 0.329092 0.533487
-vn -0.760372 0.301967 0.575021
-vn -0.847339 0.214290 0.485897
-vn -0.763972 0.253451 0.593388
-vn -0.699147 0.209723 0.683527
-vn -0.829006 0.167762 0.533483
-vn -0.812895 0.172746 0.556202
-vn -0.856491 0.076818 0.510414
-vn -0.758006 0.098770 0.644726
-vn -0.920726 0.050738 0.386898
-vn -0.910463 0.035665 0.412050
-vn -0.748944 0.047745 0.660911
-vn -0.733523 0.036519 0.678682
-vn -0.819007 -0.041761 0.572262
-vn -0.818095 -0.042298 0.573526
-vn -0.701574 -0.039938 0.711477
-vn -0.616403 -0.033315 0.786726
-vn -0.936321 -0.151392 0.316833
-vn -0.895142 -0.083941 0.437807
-vn -0.876204 -0.108207 0.469636
-vn -0.805863 -0.084115 0.586096
-vn -0.724596 -0.126468 0.677471
-vn -0.592043 -0.101155 0.799533
-vn -0.937358 -0.136374 0.320566
-vn -0.921982 -0.181659 0.341980
-vn -0.866669 -0.150383 0.475678
-vn -0.851907 -0.171009 0.494985
-vn -0.824748 -0.165798 0.540649
-vn -0.716778 -0.150218 0.680929
-vn -0.635921 -0.197068 0.746169
-vn -0.512338 -0.136261 0.847905
-vn -0.752127 -0.250779 0.609438
-vn -0.616045 -0.239591 0.750390
-vn -0.501984 -0.218231 0.836891
-vn -0.480629 -0.242348 0.842771
-vn -0.909337 -0.316133 0.270492
-vn -0.902709 -0.275421 0.330546
-vn -0.859624 -0.321801 0.396852
-vn -0.836370 -0.291395 0.464301
-vn -0.802302 -0.330118 0.497327
-vn -0.757109 -0.327299 0.565386
-vn -0.742708 -0.286286 0.605331
-vn -0.653677 -0.334815 0.678679
-vn -0.615119 -0.315328 0.722632
-vn -0.824718 -0.400678 0.399121
-vn -0.810602 -0.403894 0.424021
-vn -0.558271 -0.365235 0.744941
-vn -0.472115 -0.345511 0.811005
-vn -0.431433 -0.375937 0.820083
-vn -0.907328 -0.402755 0.120599
-vn -0.887381 -0.389903 0.246029
-vn -0.829297 -0.466686 0.307361
-vn -0.684844 -0.457008 0.567566
-vn -0.643809 -0.448473 0.619986
-vn -0.416056 -0.404529 0.814404
-vn -0.833484 -0.457356 0.310047
-vn -0.716052 -0.504442 0.482501
-vn -0.688123 -0.495669 0.529905
-vn -0.590419 -0.489859 0.641439
-vn -0.548217 -0.472579 0.690019
-vn -0.331185 -0.450185 0.829247
-vn -0.601724 -0.034463 -0.797961
-vn -0.525682 -0.197366 -0.827469
-vn -0.433737 -0.289628 -0.853222
-vn -0.748038 0.394341 -0.533792
-vn -0.824646 0.280160 -0.491396
-vn -0.792238 0.210351 -0.572810
-vn -0.829514 0.226182 -0.510635
-vn -0.875593 0.156342 -0.457048
-vn -0.884470 0.151970 -0.441155
-vn -0.716353 0.083014 -0.692782
-vn -0.733032 0.114188 -0.670541
-vn -0.771697 0.128030 -0.622970
-vn -0.918747 0.076179 -0.387428
-vn -0.830932 0.033411 -0.555370
-vn -0.920661 0.037220 -0.388585
-vn -0.600922 -0.035563 -0.798516
-vn -0.716130 -0.036173 -0.697029
-vn -0.719846 -0.029195 -0.693520
-vn -0.794369 -0.056968 -0.604758
-vn -0.833248 -0.013987 -0.552722
-vn -0.861225 -0.045253 -0.506204
-vn -0.888768 -0.047780 -0.455860
-vn -0.953550 -0.038893 -0.298714
-vn -0.725836 -0.112488 -0.678608
-vn -0.776861 -0.113421 -0.619373
-vn -0.907420 -0.111357 -0.405203
-vn -0.944742 -0.097932 -0.312846
-vn -0.598501 -0.146099 -0.787688
-vn -0.678312 -0.197860 -0.707632
-vn -0.794122 -0.190014 -0.577291
-vn -0.826804 -0.188696 -0.529895
-vn -0.949244 -0.162525 -0.269297
-vn -0.957522 -0.179881 -0.225375
-vn -0.679026 -0.234375 -0.695695
-vn -0.757547 -0.255455 -0.600721
-vn -0.857773 -0.239806 -0.454663
-vn -0.873526 -0.233241 -0.427261
-vn -0.888044 -0.259217 -0.379716
-vn -0.506373 -0.265740 -0.820347
-vn -0.532924 -0.309835 -0.787397
-vn -0.645828 -0.288858 -0.706730
-vn -0.645890 -0.344296 -0.681386
-vn -0.759162 -0.329847 -0.561136
-vn -0.807760 -0.329016 -0.489155
-vn -0.884074 -0.312749 -0.347277
-vn -0.906835 -0.330925 -0.261035
-vn -0.941989 -0.268644 -0.201215
-vn -0.516001 -0.380804 -0.767289
-vn -0.722396 -0.383844 -0.575159
-vn -0.942005 -0.319683 -0.102123
-vn -0.394196 -0.386051 -0.834011
-vn -0.456613 -0.417807 -0.785456
-vn -0.582410 -0.443002 -0.681577
-vn -0.590241 -0.439527 -0.677076
-vn -0.702392 -0.439019 -0.560275
-vn -0.807496 -0.415955 -0.418248
-vn -0.832175 -0.410090 -0.373244
-vn -0.840993 -0.450967 -0.298930
-vn -0.886068 -0.398707 -0.236467
-vn -0.895430 -0.419887 -0.147987
-vn -0.677523 -0.462391 -0.571976
-vn -0.767615 -0.460418 -0.445851
-vn 0.272902 0.418640 -0.866178
-vn 0.347096 0.341736 -0.873350
-vn 0.560189 0.019565 -0.828134
-vn 0.599472 -0.036555 -0.799561
-vn 0.329401 0.348110 -0.877676
-vn 0.406037 0.243746 -0.880751
-vn 0.377972 0.205392 -0.902747
-vn 0.256802 0.230255 -0.938635
-vn 0.247635 0.226844 -0.941923
-vn 0.221336 0.146580 -0.964119
-vn 0.187930 0.127775 -0.973836
-vn 0.480027 0.099851 -0.871553
-vn 0.397334 0.112683 -0.910730
-vn 0.520505 0.025224 -0.853486
-vn 0.346153 0.057115 -0.936438
-vn 0.164189 0.025926 -0.986088
-vn 0.461575 -0.048076 -0.885797
-vn 0.363746 -0.040639 -0.930611
-vn 0.340121 -0.019161 -0.940187
-vn 0.304224 -0.039503 -0.951781
-vn 0.220346 -0.026894 -0.975051
-vn 0.075953 -0.001052 -0.997111
-vn 0.605754 -0.198818 -0.770411
-vn 0.562352 -0.156112 -0.812028
-vn 0.486529 -0.162489 -0.858421
-vn 0.448060 -0.203906 -0.870439
-vn 0.350131 -0.160202 -0.922900
-vn 0.309886 -0.183926 -0.932814
-vn 0.286868 -0.164355 -0.943766
-vn 0.171197 -0.162506 -0.971742
-vn 0.148670 -0.172714 -0.973687
-vn 0.079845 -0.143587 -0.986411
-vn -0.017710 -0.174312 -0.984531
-vn 0.438004 -0.243556 -0.865351
-vn 0.420172 -0.261774 -0.868867
-vn 0.312323 -0.215918 -0.925113
-vn -0.039922 -0.227605 -0.972935
-vn 0.584802 -0.290131 -0.757516
-vn 0.566501 -0.305003 -0.765539
-vn 0.404152 -0.320553 -0.856684
-vn 0.262374 -0.291055 -0.920025
-vn 0.192982 -0.312728 -0.930032
-vn 0.154206 -0.292607 -0.943717
-vn 0.059048 -0.335090 -0.940334
-vn -0.033322 -0.263987 -0.963950
-vn 0.655929 -0.345030 -0.671350
-vn 0.314034 -0.386572 -0.867147
-vn 0.302395 -0.383930 -0.872442
-vn 0.218599 -0.407747 -0.886542
-vn -0.100792 -0.350860 -0.930988
-vn -0.196413 -0.308332 -0.930781
-vn 0.640209 -0.403146 -0.653916
-vn 0.559974 -0.443211 -0.699995
-vn 0.523464 -0.398751 -0.752983
-vn 0.466657 -0.413074 -0.782050
-vn 0.041685 -0.398214 -0.916345
-vn -0.080901 -0.410088 -0.908451
-vn 0.663487 -0.459080 -0.590789
-vn 0.409432 -0.473351 -0.779938
-vn 0.356554 -0.475245 -0.804370
-vn 0.177885 -0.461735 -0.868998
-vn 0.103734 -0.472570 -0.875167
-vn -0.121868 -0.477453 -0.870165
-vn 0.669138 -0.152570 0.727308
-vn 0.693351 -0.227573 0.683722
-vn 0.730906 -0.368800 0.574250
-vn 0.437751 0.375963 0.816717
-vn 0.425471 0.423101 0.799975
-vn 0.522150 0.487835 0.699554
-vn 0.508881 0.208239 0.835270
-vn 0.529209 0.227243 0.817495
-vn 0.505978 0.329379 0.797180
-vn 0.575643 0.374162 0.727075
-vn 0.580316 0.424980 0.694712
-vn 0.628611 0.127344 0.767223
-vn 0.599998 0.201353 0.774247
-vn 0.654595 0.239668 0.716983
-vn 0.641394 0.437270 0.630403
-vn 0.650064 0.488441 0.582102
-vn 0.673726 0.115052 0.729970
-vn 0.667852 0.235001 0.706221
-vn 0.698287 0.246985 0.671859
-vn 0.719548 0.327353 0.612447
-vn 0.709167 0.475892 0.520202
-vn 0.676710 -0.020983 0.735951
-vn 0.692331 0.090414 0.715893
-vn 0.773303 0.328034 0.542582
-vn 0.773048 0.377442 0.509838
-vn 0.731964 0.541358 0.413715
-vn 0.707699 -0.073080 0.702724
-vn 0.766633 0.092271 0.635421
-vn 0.772194 0.100045 0.627461
-vn 0.776650 0.169474 0.606707
-vn 0.800444 0.196226 0.566378
-vn 0.790868 0.303348 0.531515
-vn 0.826777 0.376440 0.418011
-vn 0.790336 0.482545 0.377518
-vn 0.761940 -0.071176 0.643725
-vn 0.786877 -0.022701 0.616693
-vn 0.835840 0.304380 0.456863
-vn 0.823584 0.381678 0.419562
-vn 0.828617 0.503555 0.244595
-vn 0.721700 -0.229044 0.653214
-vn 0.779131 -0.172335 0.602707
-vn 0.830905 0.000195 0.556414
-vn 0.836283 0.024389 0.547756
-vn 0.864176 0.058108 0.499824
-vn 0.872377 0.128024 0.471771
-vn 0.865682 0.153367 0.476522
-vn 0.870458 0.237997 0.430884
-vn 0.816534 -0.188805 0.545549
-vn 0.914833 0.236060 0.327652
-vn 0.900933 0.332649 0.278684
-vn 0.903757 0.348540 0.248481
-vn 0.860972 0.461948 0.212912
-vn 0.877444 0.461147 0.132044
-vn 0.854315 -0.152502 0.496879
-vn 0.863149 -0.121175 0.490195
-vn 0.916530 0.020799 0.399425
-vn 0.922468 0.042293 0.383749
-vn 0.919459 0.071212 0.386683
-vn 0.937546 0.171046 0.302905
-vn 0.934119 0.317032 0.164049
-vn 0.754093 -0.375856 0.538587
-vn 0.796903 -0.328983 0.506670
-vn 0.913028 -0.069200 0.401984
-vn 0.934493 0.339278 0.107767
-vn 0.911363 0.405683 0.069560
-vn 0.909354 0.415523 0.020403
-vn -0.664397 0.218739 0.714654
-vn -0.626888 0.108126 0.771570
-vn -0.592758 0.030125 0.804817
-vn -0.651010 0.480446 0.587671
-vn -0.641045 0.369984 0.672438
-vn -0.626693 0.424944 0.653206
-vn -0.625481 0.336830 0.703789
-vn -0.516308 0.485026 0.705816
-vn -0.620021 0.162735 0.767523
-vn -0.558755 0.189923 0.807293
-vn -0.513475 0.324963 0.794193
-vn -0.521504 0.345490 0.780173
-vn -0.483962 0.420592 0.767387
-vn -0.427467 0.437393 0.791176
-vn -0.365967 0.523107 0.769693
-vn -0.541207 0.040767 0.839901
-vn -0.482690 0.132178 0.865759
-vn -0.488557 0.149768 0.859583
-vn -0.403607 0.240654 0.882716
-vn -0.414905 0.285049 0.864061
-vn -0.361497 0.370653 0.855533
-vn -0.329290 0.378931 0.864858
-vn -0.260183 0.498555 0.826890
-vn -0.248749 0.502406 0.828077
-vn -0.416218 0.116462 0.901775
-vn -0.396792 0.234836 0.887361
-vn -0.448482 -0.077175 0.890454
-vn -0.454418 -0.053151 0.889201
-vn -0.399189 0.095916 0.911838
-vn -0.291386 0.235405 0.927189
-vn -0.250639 0.273383 0.928677
-vn -0.252277 0.319508 0.913384
-vn -0.142818 0.422451 0.895063
-vn -0.113919 0.423240 0.898827
-vn -0.071890 0.487083 0.870392
-vn -0.410313 -0.096900 0.906782
-vn -0.324763 0.081285 0.942296
-vn -0.274512 0.107258 0.955583
-vn -0.381613 -0.218012 0.898244
-vn -0.316629 -0.075050 0.945576
-vn -0.233899 0.097134 0.967397
-vn -0.145062 0.159910 0.976415
-vn -0.137044 0.225941 0.964453
-vn -0.099573 0.251805 0.962642
-vn -0.067666 0.359324 0.930757
-vn -0.345996 -0.238440 0.907432
-vn -0.257928 -0.104930 0.960449
-vn -0.244572 -0.103872 0.964051
-vn -0.180191 0.038553 0.982876
-vn -0.142659 0.043114 0.988832
-vn -0.103298 0.085286 0.990987
-vn 0.053440 0.341965 0.938192
-vn 0.109676 0.454761 0.883835
-vn 0.130919 0.478109 0.868488
-vn -0.319307 -0.290340 0.902079
-vn 0.026405 0.223903 0.974254
-vn 0.053621 0.248283 0.967202
-vn 0.100740 0.383371 0.918084
-vn -0.274146 -0.320659 0.906654
-vn -0.227114 -0.312832 0.922256
-vn -0.151068 -0.214526 0.964965
-vn -0.171299 -0.149565 0.973800
-vn -0.066565 -0.091187 0.993607
-vn 0.004919 0.081362 0.996673
-vn 0.023615 0.100571 0.994650
-vn 0.265205 0.443579 0.856098
-vn -0.755822 0.444173 -0.481086
-vn -0.968907 -0.005765 -0.247360
-vn -0.951247 -0.303926 -0.052522
-vn -0.793274 0.443247 -0.417431
-vn -0.791866 0.466012 -0.394691
-vn -0.845763 0.360793 -0.393082
-vn -0.836631 0.487296 -0.250182
-vn -0.915733 0.229055 -0.330100
-vn -0.900624 0.305541 -0.309063
-vn -0.888733 0.333026 -0.315035
-vn -0.874996 0.424011 -0.233660
-vn -0.897607 0.406238 -0.171092
-vn -0.955318 0.124242 -0.268200
-vn -0.953679 0.140903 -0.265787
-vn -0.965550 0.092751 -0.243125
-vn -0.966397 0.193077 -0.169700
-vn -0.957013 0.246399 -0.153017
-vn -0.953870 0.276019 -0.118088
-vn -0.953364 0.278062 -0.117379
-vn -0.887231 0.461058 -0.015690
-vn -0.897086 0.440534 -0.034153
-vn -0.981543 0.126410 -0.143504
-vn -0.943434 0.331289 -0.013431
-vn -0.900913 0.432787 0.032421
-vn -0.867706 0.481599 0.123078
-vn -0.985100 -0.106365 -0.135143
-vn -0.986917 -0.053611 -0.152052
-vn -0.994790 0.043787 -0.092061
-vn -0.988999 0.103685 -0.105498
-vn -0.991074 0.128843 -0.034234
-vn -0.980550 0.196202 0.005082
-vn -0.973095 0.230357 -0.004709
-vn -0.950714 0.308923 0.026632
-vn -0.944382 0.322839 0.062587
-vn -0.988713 -0.128126 -0.077653
-vn -0.999330 0.025837 0.025910
-vn -0.942889 0.312795 0.114542
-vn -0.903496 0.377190 0.203527
-vn -0.869683 0.456658 0.187392
-vn -0.841917 0.482371 0.241856
-vn -0.997483 -0.066641 0.024226
-vn -0.999333 0.026008 0.025643
-vn -0.996525 0.032496 0.076692
-vn -0.983363 0.124675 0.132113
-vn -0.980775 0.151436 0.123075
-vn -0.958007 0.237692 0.160393
-vn -0.901580 0.333544 0.275504
-vn -0.969074 -0.245210 -0.027702
-vn -0.990690 -0.090613 0.101601
-vn -0.991740 -0.042196 0.121124
-vn -0.932620 0.245673 0.264318
-vn -0.854874 0.373700 0.359916
-vn -0.831787 0.437037 0.342242
-vn -0.966754 0.090281 0.239241
-vn -0.934368 0.176199 0.309694
-vn -0.853409 0.369233 0.367913
-vn -0.928996 -0.368780 0.031110
-vn -0.969272 -0.212857 0.123306
-vn -0.973634 -0.185161 0.133238
-vn -0.962205 -0.000069 0.272327
-vn -0.961978 0.002018 0.273119
-vn -0.919546 0.159361 0.359221
-vn -0.778850 0.362910 0.511555
-vn -0.733516 0.456623 0.503437
-vn 0.174077 0.282599 -0.943311
-vn 0.073976 0.175363 -0.981721
-vn 0.002177 0.043008 -0.999072
-vn -0.079043 -0.078302 -0.993791
-vn -0.268757 -0.393243 -0.879278
-vn 0.226696 0.428278 -0.874750
-vn 0.158692 0.392558 -0.905933
-vn 0.093267 0.410254 -0.907190
-vn 0.065409 0.222283 -0.972786
-vn -0.004414 0.367273 -0.930103
-vn -0.014462 0.372251 -0.928019
-vn -0.092220 0.477074 -0.874012
-vn 0.003710 0.274127 -0.961686
-vn 0.006704 0.084523 -0.996399
-vn -0.171111 0.469379 -0.866259
-vn -0.218084 0.496738 -0.840054
-vn -0.053953 0.008939 -0.998504
-vn -0.133138 0.196035 -0.971517
-vn -0.132139 0.214544 -0.967735
-vn -0.184699 0.274893 -0.943568
-vn -0.188634 0.315309 -0.930052
-vn -0.196165 0.324266 -0.925403
-vn -0.175080 0.062762 -0.982552
-vn -0.186802 0.111640 -0.976034
-vn -0.293196 0.322802 -0.899908
-vn -0.349783 0.387476 -0.852945
-vn -0.288343 0.112806 -0.950859
-vn -0.295030 0.230603 -0.927243
-vn -0.324965 0.249037 -0.912348
-vn -0.354345 0.387343 -0.851120
-vn -0.416963 0.425736 -0.803051
-vn -0.218063 -0.090013 -0.971775
-vn -0.239607 0.004236 -0.970861
-vn -0.308630 0.049963 -0.949869
-vn -0.307644 0.094114 -0.946836
-vn -0.349872 0.119986 -0.929082
-vn -0.355592 0.239804 -0.903354
-vn -0.397998 0.257286 -0.880569
-vn -0.462081 0.410255 -0.786239
-vn -0.186148 -0.240511 -0.952630
-vn -0.247811 -0.143353 -0.958144
-vn -0.359020 0.016197 -0.933189
-vn -0.445720 0.243824 -0.861327
-vn -0.523904 0.296038 -0.798678
-vn -0.552904 0.445565 -0.704109
-vn -0.341528 -0.157951 -0.926504
-vn -0.385414 -0.111546 -0.915977
-vn -0.452830 0.072895 -0.888612
-vn -0.452587 0.071282 -0.888867
-vn -0.494926 0.121226 -0.860437
-vn -0.489140 0.188077 -0.851686
-vn -0.560915 0.263206 -0.784918
-vn -0.548650 0.284209 -0.786263
-vn -0.578885 0.420014 -0.698914
-vn -0.251810 -0.342630 -0.905095
-vn -0.358405 -0.234300 -0.903687
-vn -0.663001 0.397082 -0.634631
-vn -0.476103 -0.105131 -0.873083
-vn -0.508382 -0.048431 -0.859769
-vn -0.602635 0.084299 -0.793552
-vn -0.621324 0.106162 -0.776328
-vn -0.618896 0.219141 -0.754285
-vn -0.664418 0.228074 -0.711710
-vn -0.705053 0.308235 -0.638664
-vn -0.691374 0.369358 -0.620949
-vn 0.959404 0.203024 -0.195769
-vn 0.953355 0.131336 -0.271782
-vn 0.862749 -0.226768 -0.451930
-vn 0.842891 -0.276934 -0.461348
-vn 0.891669 0.430078 -0.141278
-vn 0.952295 0.243790 -0.183578
-vn 0.898367 0.369823 -0.236996
-vn 0.909263 0.337195 -0.244009
-vn 0.830615 0.449018 -0.329335
-vn 0.809219 0.489987 -0.324156
-vn 0.953005 0.154284 -0.260727
-vn 0.885503 0.264389 -0.382076
-vn 0.882979 0.282100 -0.375190
-vn 0.833718 0.373127 -0.407051
-vn 0.804441 0.375812 -0.460044
-vn 0.897049 0.105401 -0.429177
-vn 0.877596 0.226282 -0.422636
-vn 0.724994 0.457750 -0.514635
-vn 0.710096 0.509871 -0.485588
-vn 0.896332 0.063279 -0.438844
-vn 0.896962 0.105111 -0.429430
-vn 0.843295 0.177827 -0.507180
-vn 0.838694 0.216261 -0.499823
-vn 0.805129 0.262863 -0.531668
-vn 0.707465 0.441494 -0.551884
-vn 0.609109 0.496864 -0.618152
-vn 0.897111 -0.111071 -0.427615
-vn 0.880920 0.024421 -0.472635
-vn 0.759272 0.268306 -0.592889
-vn 0.714470 0.327036 -0.618531
-vn 0.598064 0.495104 -0.630231
-vn 0.553547 0.521216 -0.649554
-vn 0.865038 -0.171968 -0.471313
-vn 0.840509 0.012732 -0.541648
-vn 0.808481 0.041009 -0.587091
-vn 0.804214 0.105323 -0.584933
-vn 0.741944 0.178059 -0.646385
-vn 0.656623 0.323811 -0.681171
-vn 0.611009 0.364717 -0.702602
-vn 0.829291 -0.136706 -0.541838
-vn 0.776729 0.011488 -0.629731
-vn 0.719678 0.169401 -0.673326
-vn 0.643568 0.253099 -0.722330
-vn 0.572089 0.344981 -0.744112
-vn 0.781976 -0.149284 -0.605168
-vn 0.757315 -0.085981 -0.647365
-vn 0.700578 0.059831 -0.711063
-vn 0.693364 0.084297 -0.715640
-vn 0.617296 0.249292 -0.746190
-vn 0.498680 0.368445 -0.784580
-vn 0.465045 0.405797 -0.786805
-vn 0.448826 0.452603 -0.770523
-vn 0.766300 -0.310659 -0.562384
-vn 0.610304 0.112480 -0.784141
-vn 0.581217 0.181459 -0.793259
-vn 0.733434 -0.264808 -0.626060
-vn 0.736359 -0.240198 -0.632519
-vn 0.664519 -0.160303 -0.729875
-vn 0.682351 -0.100225 -0.724122
-vn 0.660733 -0.047116 -0.749141
-vn 0.515446 0.185357 -0.836635
-vn 0.466767 0.243822 -0.850105
-vn 0.076410 0.960324 0.268214
-vn 0.150308 0.879586 0.451370
-vn 0.223420 0.788619 0.572856
-vn 0.063937 0.997861 -0.013643
-vn 0.113404 0.978894 0.170018
-vn 0.127266 0.978936 0.159647
-vn 0.141023 0.988359 0.057094
-vn 0.218682 0.975584 0.020360
-vn 0.236967 0.971190 0.025243
-vn 0.229621 0.957810 0.172841
-vn 0.281733 0.952373 0.116675
-vn 0.194538 0.915504 0.352147
-vn 0.372124 0.920428 0.119733
-vn 0.380758 0.918679 0.105132
-vn 0.262685 0.909671 0.321708
-vn 0.277902 0.911630 0.302823
-vn 0.302283 0.905550 0.297663
-vn 0.392440 0.897951 0.199185
-vn 0.491725 0.869306 0.050126
-vn 0.213689 0.845331 0.489646
-vn 0.335979 0.843086 0.419910
-vn 0.362074 0.832093 0.420147
-vn 0.378298 0.849987 0.366624
-vn 0.465022 0.832766 0.300425
-vn 0.474211 0.846565 0.241769
-vn 0.525301 0.825531 0.206296
-vn 0.549353 0.828603 0.107839
-vn 0.593226 0.798856 0.099559
-vn 0.235393 0.774327 0.587374
-vn 0.308520 0.746737 0.589236
-vn 0.383185 0.764725 0.518039
-vn 0.389324 0.801873 0.453240
-vn 0.589591 0.777967 0.217140
-vn 0.603114 0.790074 0.109713
-vn 0.514081 0.751490 0.413501
-vn 0.524263 0.767281 0.369361
-vn 0.603537 0.738536 0.300513
-vn 0.613128 0.748380 0.252985
-vn 0.698414 0.709616 0.093075
-vn 0.712656 0.700751 0.032708
-vn 0.329299 0.633753 0.699942
-vn 0.364032 0.683172 0.633054
-vn 0.399216 0.674735 0.620772
-vn 0.418988 0.721184 0.551672
-vn 0.517756 0.696339 0.497031
-vn 0.524783 0.734447 0.430337
-vn 0.701475 0.681812 0.207520
-vn 0.720138 0.676552 0.153883
-vn 0.425767 0.648592 0.630913
-vn 0.554005 0.615771 0.560272
-vn 0.554204 0.646809 0.523923
-vn 0.634102 0.647446 0.422763
-vn 0.615244 0.656974 0.435729
-vn 0.640677 0.672626 0.370280
-vn 0.776794 0.613028 0.144176
-vn 0.810052 0.584163 0.050689
-vn 0.814037 0.578972 0.046206
-vn 0.390548 0.580419 0.714553
-vn 0.436500 0.581971 0.686132
-vn 0.658250 0.606107 0.446477
-vn 0.724073 0.555210 0.409219
-vn 0.717640 0.607636 0.340251
-vn 0.737338 0.612836 0.284191
-vn 0.794558 0.561289 0.231588
-vn 0.308134 0.480688 0.820971
-vn 0.356220 0.481388 0.800858
-vn 0.512244 0.521521 0.682365
-vn 0.583559 0.565019 0.583277
-vn 0.600834 0.552935 0.577288
-vn -0.044659 0.993439 0.105280
-vn -0.279319 0.933125 0.226404
-vn -0.312850 0.909339 0.274275
-vn -0.436790 0.819629 0.370705
-vn -0.035820 0.991477 0.125264
-vn -0.057978 0.972201 0.226858
-vn 0.030501 0.957583 0.286540
-vn -0.208579 0.952046 0.223836
-vn -0.141771 0.952845 0.268306
-vn -0.135970 0.930825 0.339230
-vn -0.007439 0.932032 0.362298
-vn -0.304991 0.883271 0.356109
-vn -0.168428 0.909086 0.381044
-vn 0.014344 0.904101 0.427078
-vn 0.108969 0.878106 0.465893
-vn -0.320791 0.869757 0.374987
-vn -0.150372 0.864934 0.478829
-vn -0.048004 0.876891 0.478285
-vn -0.443290 0.805314 0.393653
-vn -0.289078 0.817132 0.498727
-vn -0.154695 0.861104 0.484324
-vn 0.021660 0.804259 0.593884
-vn 0.075383 0.827936 0.555734
-vn -0.347002 0.775571 0.527332
-vn -0.296520 0.808670 0.508064
-vn -0.121422 0.789630 0.601448
-vn -0.013182 0.788583 0.614787
-vn 0.019966 0.802171 0.596761
-vn -0.539531 0.711036 0.450926
-vn -0.523722 0.686890 0.503883
-vn -0.392238 0.729777 0.559978
-vn -0.359102 0.755268 0.548285
-vn -0.218969 0.750122 0.623995
-vn -0.169035 0.754068 0.634672
-vn 0.145195 0.707956 0.691170
-vn -0.529037 0.673334 0.516471
-vn -0.282652 0.716953 0.637249
-vn -0.140641 0.697707 0.702442
-vn -0.054784 0.686433 0.725126
-vn -0.030312 0.699349 0.714137
-vn 0.117376 0.668251 0.734618
-vn 0.141093 0.675337 0.723887
-vn 0.224776 0.624407 0.748059
-vn -0.616305 0.576479 0.536508
-vn -0.479643 0.609684 0.631053
-vn -0.414307 0.639907 0.647201
-vn -0.364306 0.619466 0.695373
-vn -0.310801 0.646699 0.696551
-vn -0.219934 0.629698 0.745057
-vn 0.223501 0.584901 0.779704
-vn -0.612296 0.562847 0.555245
-vn -0.500307 0.577272 0.645329
-vn -0.054068 0.588957 0.806354
-vn 0.071890 0.593294 0.801769
-vn -0.490298 0.544689 0.680383
-vn -0.385410 0.575800 0.721050
-vn -0.196072 0.570206 0.797760
-vn -0.082736 0.562266 0.822807
-vn 0.131055 0.511742 0.849085
-vn -0.230253 0.960481 -0.156395
-vn -0.548101 0.747423 -0.375425
-vn -0.665116 0.585869 -0.463010
-vn -0.667773 0.550762 -0.500740
-vn -0.084254 0.994539 -0.061594
-vn -0.130150 0.991491 0.002698
-vn -0.128175 0.990593 0.047920
-vn -0.195901 0.975767 0.097478
-vn -0.247206 0.966411 -0.070284
-vn -0.302865 0.948718 0.090590
-vn -0.319714 0.938456 0.130704
-vn -0.340524 0.922257 -0.182988
-vn -0.372596 0.915043 -0.154496
-vn -0.379325 0.922245 -0.074677
-vn -0.338773 0.940655 -0.020008
-vn -0.339801 0.940380 -0.014875
-vn -0.464806 0.848154 -0.254147
-vn -0.463116 0.862369 -0.204558
-vn -0.479833 0.876923 -0.027672
-vn -0.481715 0.876224 -0.013498
-vn -0.467919 0.883413 0.025175
-vn -0.479245 0.871825 0.101218
-vn -0.447187 0.882134 0.147862
-vn -0.445416 0.863254 0.237481
-vn -0.478368 0.830097 0.286538
-vn -0.527900 0.840056 -0.125012
-vn -0.554884 0.780259 -0.288615
-vn -0.590676 0.764817 -0.257210
-vn -0.579986 0.803573 -0.133739
-vn -0.601970 0.798204 0.022421
-vn -0.584078 0.803073 0.118011
-vn -0.606059 0.779955 0.156089
-vn -0.554720 0.787208 0.269424
-vn -0.628262 0.703261 -0.332733
-vn -0.642013 0.716999 -0.271536
-vn -0.647637 0.758604 -0.071322
-vn -0.650817 0.758050 -0.042404
-vn -0.623791 0.765447 0.158036
-vn -0.615037 0.714913 0.332608
-vn -0.599200 0.696123 0.395438
-vn -0.687861 0.687535 -0.232688
-vn -0.706998 0.695834 -0.126371
-vn -0.710710 0.703484 0.001296
-vn -0.716331 0.695405 0.057294
-vn -0.688574 0.688813 0.226721
-vn -0.669087 0.686603 0.284427
-vn -0.690725 0.601808 -0.400908
-vn -0.742514 0.663619 -0.091010
-vn -0.747635 0.662031 -0.052504
-vn -0.762352 0.632737 0.135884
-vn -0.751124 0.635560 0.178538
-vn -0.667519 0.594195 0.448722
-vn -0.664172 0.578346 0.473700
-vn -0.736154 0.575595 -0.356044
-vn -0.758613 0.584625 -0.287611
-vn -0.779204 0.572759 0.254535
-vn -0.741726 0.579836 0.337094
-vn -0.740042 0.567518 0.360918
-vn -0.811405 0.535055 -0.235240
-vn -0.810149 0.568475 -0.143160
-vn -0.845681 0.531999 -0.042439
-vn -0.820794 0.571225 0.000164
-vn -0.817592 0.570405 0.078619
-vn -0.769446 0.505198 0.390805
-vn -0.732255 0.483620 0.479494
-vn 0.144209 0.779525 -0.609544
-vn 0.218639 0.667417 -0.711865
-vn 0.009892 0.998167 -0.059698
-vn -0.117438 0.980977 -0.154570
-vn -0.022701 0.970707 -0.239190
-vn -0.191695 0.963351 -0.187639
-vn -0.056271 0.945250 -0.321459
-vn -0.191750 0.949012 -0.250217
-vn 0.041791 0.922834 -0.382925
-vn -0.055949 0.944819 -0.322779
-vn -0.252246 0.916836 -0.309489
-vn -0.326586 0.903118 -0.278782
-vn 0.047239 0.881275 -0.470238
-vn -0.120800 0.902688 -0.412991
-vn -0.402581 0.858434 -0.317834
-vn 0.021311 0.865975 -0.499633
-vn -0.077272 0.868786 -0.489121
-vn -0.179366 0.888546 -0.422271
-vn -0.229677 0.890351 -0.393095
-vn -0.403687 0.846400 -0.347338
-vn 0.033420 0.829088 -0.558118
-vn -0.144153 0.837709 -0.526748
-vn -0.154383 0.839746 -0.520570
-vn -0.327291 0.832651 -0.446735
-vn -0.344837 0.828271 -0.441650
-vn -0.033191 0.776164 -0.629657
-vn -0.139645 0.814375 -0.563287
-vn -0.260914 0.796807 -0.544997
-vn -0.417608 0.766183 -0.488433
-vn -0.503997 0.761259 -0.408010
-vn -0.531050 0.747087 -0.399810
-vn 0.105238 0.714648 -0.691522
-vn 0.064733 0.706532 -0.704714
-vn -0.031037 0.762652 -0.646064
-vn -0.200169 0.768665 -0.607526
-vn -0.267199 0.773200 -0.575123
-vn -0.314718 0.742521 -0.591282
-vn -0.373729 0.728127 -0.574593
-vn -0.416511 0.736008 -0.533677
-vn -0.546288 0.680627 -0.488176
-vn 0.056362 0.691073 -0.720584
-vn -0.143173 0.701025 -0.698617
-vn -0.169017 0.706714 -0.687015
-vn -0.512693 0.668895 -0.538261
-vn 0.205135 0.584866 -0.784762
-vn -0.052055 0.623625 -0.779989
-vn -0.108658 0.640759 -0.760014
-vn -0.284236 0.648620 -0.706046
-vn -0.327740 0.672741 -0.663330
-vn -0.368919 0.666721 -0.647597
-vn -0.517496 0.629244 -0.579870
-vn 0.178813 0.566948 -0.804112
-vn 0.093893 0.571726 -0.815054
-vn 0.059114 0.554326 -0.830198
-vn -0.012781 0.562017 -0.827027
-vn -0.284388 0.581603 -0.762143
-vn -0.449923 0.601151 -0.660445
-vn -0.590258 0.547718 -0.592959
-vn -0.625780 0.534077 -0.568473
-vn -0.235222 0.553901 -0.798664
-vn -0.385860 0.534532 -0.751922
-vn -0.454100 0.573083 -0.682179
-vn -0.540177 0.498515 -0.678006
-vn 0.065132 0.997853 -0.006893
-vn 0.358829 0.932768 -0.034435
-vn 0.492369 0.870304 -0.011940
-vn 0.614043 0.788970 -0.021850
-vn 0.695920 0.717815 -0.020899
-vn 0.173574 0.981298 -0.083221
-vn 0.056257 0.978413 -0.198853
-vn 0.189994 0.970430 -0.148887
-vn 0.141338 0.967191 -0.211103
-vn 0.331206 0.942686 -0.040555
-vn 0.263985 0.953204 -0.147360
-vn 0.163834 0.945294 -0.282094
-vn 0.149474 0.930367 -0.334777
-vn 0.388912 0.919845 -0.051301
-vn 0.422472 0.892606 -0.157392
-vn 0.390211 0.896831 -0.208397
-vn 0.337711 0.912652 -0.230256
-vn 0.319951 0.907885 -0.270882
-vn 0.195882 0.889440 -0.412948
-vn 0.191563 0.876364 -0.441916
-vn 0.525902 0.848750 -0.055226
-vn 0.478206 0.863635 -0.159540
-vn 0.334187 0.877419 -0.344172
-vn 0.588330 0.806675 -0.056065
-vn 0.499646 0.837049 -0.222940
-vn 0.463978 0.850519 -0.247673
-vn 0.425990 0.831321 -0.356985
-vn 0.363041 0.855955 -0.368160
-vn 0.314959 0.815463 -0.485614
-vn 0.241736 0.832113 -0.499151
-vn 0.204361 0.784349 -0.585691
-vn 0.617220 0.771894 -0.152376
-vn 0.543742 0.806074 -0.233644
-vn 0.468519 0.792994 -0.389423
-vn 0.354066 0.782062 -0.512851
-vn 0.708167 0.701525 -0.079766
-vn 0.670691 0.724355 -0.159636
-vn 0.573174 0.753057 -0.323074
-vn 0.561969 0.752136 -0.344213
-vn 0.451970 0.750126 -0.482736
-vn 0.339707 0.718919 -0.606428
-vn 0.280298 0.716271 -0.639054
-vn 0.258896 0.682711 -0.683285
-vn 0.697166 0.676880 -0.236206
-vn 0.630164 0.708839 -0.316923
-vn 0.480655 0.712398 -0.511331
-vn 0.422076 0.670287 -0.610383
-vn 0.774026 0.622228 -0.117113
-vn 0.724371 0.647005 -0.238059
-vn 0.627410 0.659988 -0.413245
-vn 0.607840 0.667723 -0.429740
-vn 0.571967 0.654144 -0.494923
-vn 0.572771 0.653864 -0.494364
-vn 0.834108 0.550848 -0.028798
-vn 0.827549 0.555169 -0.083367
-vn 0.752341 0.596138 -0.280363
-vn 0.697587 0.589485 -0.407284
-vn 0.499526 0.582820 -0.640932
-vn 0.452208 0.604888 -0.655453
-vn 0.409540 0.577956 -0.705863
-vn 0.846328 0.516357 -0.130784
-vn 0.795798 0.536057 -0.281689
-vn 0.719173 0.535587 -0.442648
-vn 0.639809 0.546866 -0.539983
-vn 0.391655 0.508426 -0.766882
-vn 0.365040 0.506378 -0.781235
-usemtl None
-s off
-f 1//1 2//1 99//1
-f 7//2 8//2 298//2
-f 4//3 5//3 288//3
-f 9//4 10//4 12//4
-f 19//5 20//5 4//5
-f 22//6 23//6 21//6
-f 24//7 25//7 22//7
-f 2//8 28//8 26//8
-f 20//9 29//9 4//9
-f 20//10 30//10 29//10
-f 19//11 21//11 20//11
-f 21//12 31//12 20//12
-f 31//13 30//13 20//13
-f 31//14 32//14 30//14
-f 32//15 33//15 30//15
-f 21//16 23//16 31//16
-f 23//17 34//17 31//17
-f 34//18 32//18 31//18
-f 22//19 25//19 23//19
-f 34//20 35//20 32//20
-f 32//21 35//21 33//21
-f 35//22 36//22 33//22
-f 36//23 37//23 33//23
-f 33//24 37//24 251//24
-f 25//25 38//25 23//25
-f 23//26 38//26 34//26
-f 38//27 39//27 34//27
-f 34//28 39//28 35//28
-f 24//29 41//29 25//29
-f 41//30 38//30 25//30
-f 39//31 42//31 35//31
-f 35//32 42//32 36//32
-f 42//33 43//33 36//33
-f 36//34 43//34 37//34
-f 43//35 40//35 37//35
-f 26//36 27//36 24//36
-f 27//37 41//37 24//37
-f 41//38 44//38 38//38
-f 44//39 45//39 38//39
-f 38//40 45//40 39//40
-f 45//41 42//41 39//41
-f 43//42 46//42 40//42
-f 46//43 47//43 40//43
-f 26//44 28//44 27//44
-f 27//45 44//45 41//45
-f 45//46 48//46 42//46
-f 48//47 49//47 42//47
-f 42//48 49//48 43//48
-f 43//49 49//49 46//49
-f 44//50 50//50 45//50
-f 50//51 48//51 45//51
-f 49//52 51//52 46//52
-f 51//53 52//53 46//53
-f 46//54 52//54 47//54
-f 28//55 53//55 27//55
-f 27//56 53//56 44//56
-f 53//57 50//57 44//57
-f 48//58 54//58 49//58
-f 49//59 54//59 51//59
-f 2//60 55//60 28//60
-f 28//61 55//61 53//61
-f 53//62 56//62 50//62
-f 50//63 56//63 48//63
-f 56//64 54//64 48//64
-f 54//65 57//65 51//65
-f 51//66 57//66 52//66
-f 215//67 60//67 59//67
-f 214//68 61//68 215//68
-f 63//69 62//69 214//69
-f 3//70 57//70 64//70
-f 58//71 65//71 9//71
-f 58//72 67//72 65//72
-f 65//73 67//73 66//73
-f 59//74 60//74 58//74
-f 58//75 68//75 67//75
-f 67//76 69//76 66//76
-f 60//77 68//77 58//77
-f 68//78 69//78 67//78
-f 215//79 61//79 60//79
-f 68//80 70//80 69//80
-f 70//81 71//81 69//81
-f 214//82 62//82 61//82
-f 61//83 72//83 60//83
-f 60//84 72//84 68//84
-f 72//85 70//85 68//85
-f 70//86 73//86 71//86
-f 62//87 74//87 61//87
-f 74//88 75//88 61//88
-f 61//89 75//89 72//89
-f 72//90 76//90 70//90
-f 63//91 78//91 62//91
-f 78//92 74//92 62//92
-f 75//93 76//93 72//93
-f 76//94 79//94 70//94
-f 70//95 79//95 73//95
-f 79//96 77//96 73//96
-f 64//97 78//97 63//97
-f 78//98 80//98 74//98
-f 74//99 80//99 75//99
-f 80//100 81//100 75//100
-f 81//101 82//101 75//101
-f 75//102 82//102 76//102
-f 82//103 83//103 76//103
-f 76//104 83//104 79//104
-f 79//105 84//105 77//105
-f 79//106 89//106 84//106
-f 57//107 86//107 64//107
-f 64//108 86//108 78//108
-f 78//109 86//109 80//109
-f 86//110 87//110 80//110
-f 80//111 87//111 81//111
-f 81//112 88//112 82//112
-f 88//113 83//113 82//113
-f 83//114 89//114 79//114
-f 89//115 90//115 84//115
-f 84//116 90//116 85//116
-f 87//117 56//117 81//117
-f 81//118 56//118 88//118
-f 88//119 56//119 83//119
-f 56//120 53//120 83//120
-f 83//121 53//121 89//121
-f 55//122 90//122 89//122
-f 90//123 1//123 85//123
-f 3//124 52//124 57//124
-f 57//125 54//125 86//125
-f 86//126 54//126 87//126
-f 54//127 56//127 87//127
-f 53//128 55//128 89//128
-f 55//129 2//129 90//129
-f 90//130 2//130 1//130
-f 92//131 93//131 91//131
-f 98//132 97//132 150//132
-f 91//133 100//133 6//133
-f 91//134 93//134 100//134
-f 92//135 101//135 93//135
-f 93//136 102//136 100//136
-f 94//137 101//137 92//137
-f 101//138 103//138 93//138
-f 93//139 103//139 102//139
-f 94//140 104//140 101//140
-f 104//141 103//141 101//141
-f 102//142 103//142 286//142
-f 103//143 105//143 286//143
-f 95//144 106//144 94//144
-f 94//145 106//145 104//145
-f 104//146 107//146 103//146
-f 107//147 108//147 103//147
-f 108//148 105//148 103//148
-f 96//149 106//149 95//149
-f 106//150 107//150 104//150
-f 108//151 110//151 105//151
-f 105//152 110//152 109//152
-f 150//153 97//153 96//153
-f 97//154 111//154 96//154
-f 96//155 111//155 106//155
-f 111//156 112//156 106//156
-f 106//157 112//157 107//157
-f 112//158 108//158 107//158
-f 110//159 113//159 109//159
-f 111//160 114//160 112//160
-f 112//161 115//161 108//161
-f 115//162 116//162 108//162
-f 108//163 116//163 110//163
-f 110//164 116//164 113//164
-f 97//165 117//165 111//165
-f 117//166 114//166 111//166
-f 114//167 118//167 112//167
-f 118//168 115//168 112//168
-f 115//169 119//169 116//169
-f 116//170 120//170 113//170
-f 113//171 120//171 287//171
-f 120//172 121//172 287//172
-f 98//173 99//173 97//173
-f 99//174 117//174 97//174
-f 118//175 22//175 115//175
-f 115//176 22//176 119//176
-f 119//177 120//177 116//177
-f 99//178 26//178 117//178
-f 117//179 26//179 114//179
-f 26//180 24//180 114//180
-f 114//181 24//181 118//181
-f 22//182 21//182 119//182
-f 21//183 19//183 119//183
-f 119//184 19//184 120//184
-f 120//185 19//185 121//185
-f 2//186 26//186 99//186
-f 24//187 22//187 118//187
-f 19//188 4//188 121//188
-f 122//189 123//189 7//189
-f 128//190 127//190 126//190
-f 1//191 130//191 129//191
-f 7//192 123//192 8//192
-f 123//193 131//193 8//193
-f 122//194 124//194 123//194
-f 124//195 133//195 123//195
-f 133//196 134//196 123//196
-f 123//197 134//197 131//197
-f 131//198 134//198 132//198
-f 125//199 135//199 124//199
-f 135//200 133//200 124//200
-f 134//201 136//201 132//201
-f 136//202 137//202 132//202
-f 126//203 127//203 125//203
-f 125//204 127//204 135//204
-f 135//205 138//205 133//205
-f 133//206 138//206 134//206
-f 138//207 136//207 134//207
-f 127//208 139//208 135//208
-f 135//209 139//209 138//209
-f 138//210 140//210 136//210
-f 136//211 141//211 137//211
-f 141//212 142//212 137//212
-f 128//213 143//213 127//213
-f 127//214 143//214 139//214
-f 139//215 144//215 138//215
-f 144//216 140//216 138//216
-f 140//217 141//217 136//217
-f 128//218 129//218 143//218
-f 143//219 144//219 139//219
-f 144//220 145//220 140//220
-f 145//221 146//221 140//221
-f 140//222 146//222 141//222
-f 146//223 147//223 141//223
-f 141//224 147//224 142//224
-f 147//225 148//225 142//225
-f 143//226 149//226 144//226
-f 149//227 145//227 144//227
-f 129//228 130//228 143//228
-f 130//229 150//229 143//229
-f 143//230 150//230 149//230
-f 150//231 151//231 149//231
-f 149//232 151//232 145//232
-f 151//233 152//233 145//233
-f 145//234 152//234 146//234
-f 146//235 153//235 147//235
-f 153//236 154//236 147//236
-f 147//237 154//237 148//237
-f 154//238 11//238 148//238
-f 152//239 153//239 146//239
-f 1//240 99//240 130//240
-f 99//241 98//241 130//241
-f 98//242 150//242 130//242
-f 150//243 96//243 151//243
-f 96//244 95//244 151//244
-f 151//245 95//245 152//245
-f 95//246 94//246 152//246
-f 152//247 94//247 153//247
-f 94//248 92//248 153//248
-f 153//249 92//249 154//249
-f 92//250 91//250 154//250
-f 154//251 91//251 11//251
-f 91//252 6//252 11//252
-f 69//253 155//253 66//253
-f 77//254 156//254 73//254
-f 84//255 157//255 77//255
-f 85//256 157//256 84//256
-f 65//257 159//257 9//257
-f 9//258 159//258 158//258
-f 66//259 160//259 65//259
-f 65//260 160//260 159//260
-f 159//261 161//261 158//261
-f 155//262 160//262 66//262
-f 160//263 162//263 159//263
-f 159//264 162//264 161//264
-f 162//265 163//265 161//265
-f 160//266 164//266 162//266
-f 69//267 71//267 155//267
-f 155//268 165//268 160//268
-f 165//269 164//269 160//269
-f 164//270 166//270 162//270
-f 162//271 166//271 163//271
-f 166//272 167//272 163//272
-f 167//273 354//273 163//273
-f 71//274 165//274 155//274
-f 167//275 168//275 354//275
-f 73//276 156//276 71//276
-f 156//277 169//277 71//277
-f 71//278 169//278 165//278
-f 169//279 170//279 165//279
-f 165//280 170//280 164//280
-f 170//281 171//281 164//281
-f 164//282 171//282 166//282
-f 166//283 171//283 167//283
-f 169//284 172//284 170//284
-f 172//285 173//285 170//285
-f 170//286 173//286 171//286
-f 173//287 174//287 171//287
-f 171//288 174//288 167//288
-f 174//289 175//289 167//289
-f 167//290 175//290 168//290
-f 175//291 176//291 168//291
-f 77//292 157//292 156//292
-f 156//293 177//293 169//293
-f 177//294 172//294 169//294
-f 157//295 177//295 156//295
-f 177//296 178//296 172//296
-f 178//297 179//297 172//297
-f 172//298 179//298 173//298
-f 179//299 180//299 173//299
-f 173//300 180//300 174//300
-f 175//301 181//301 176//301
-f 85//302 182//302 157//302
-f 157//303 182//303 177//303
-f 182//304 178//304 177//304
-f 180//305 183//305 174//305
-f 174//306 183//306 175//306
-f 183//307 181//307 175//307
-f 181//308 7//308 176//308
-f 178//309 126//309 179//309
-f 183//310 122//310 181//310
-f 122//311 7//311 181//311
-f 1//312 129//312 85//312
-f 85//313 129//313 182//313
-f 129//314 128//314 182//314
-f 182//315 128//315 178//315
-f 128//316 126//316 178//316
-f 126//317 125//317 179//317
-f 179//318 125//318 180//318
-f 125//319 124//319 180//319
-f 180//320 124//320 183//320
-f 124//321 122//321 183//321
-f 187//322 186//322 381//322
-f 188//323 189//323 187//323
-f 190//324 191//324 188//324
-f 192//325 193//325 190//325
-f 184//326 194//326 18//326
-f 184//327 195//327 194//327
-f 185//328 195//328 184//328
-f 381//329 186//329 185//329
-f 186//330 195//330 185//330
-f 186//331 197//331 195//331
-f 197//332 196//332 195//332
-f 187//333 189//333 186//333
-f 196//334 199//334 198//334
-f 189//335 200//335 186//335
-f 186//336 200//336 197//336
-f 197//337 201//337 196//337
-f 201//338 199//338 196//338
-f 199//339 202//339 198//339
-f 188//340 191//340 189//340
-f 191//341 203//341 189//341
-f 203//342 200//342 189//342
-f 200//343 201//343 197//343
-f 199//344 204//344 202//344
-f 203//345 205//345 200//345
-f 205//346 206//346 200//346
-f 200//347 206//347 201//347
-f 206//348 207//348 201//348
-f 201//349 207//349 199//349
-f 207//350 204//350 199//350
-f 190//351 193//351 191//351
-f 193//352 208//352 191//352
-f 191//353 208//353 203//353
-f 203//354 208//354 205//354
-f 205//355 209//355 206//355
-f 207//356 210//356 204//356
-f 208//357 211//357 205//357
-f 211//358 209//358 205//358
-f 209//359 212//359 206//359
-f 206//360 212//360 207//360
-f 212//361 210//361 207//361
-f 192//362 3//362 193//362
-f 3//363 213//363 193//363
-f 193//364 213//364 208//364
-f 213//365 211//365 208//365
-f 211//366 214//366 209//366
-f 214//367 215//367 209//367
-f 209//368 215//368 212//368
-f 212//369 216//369 210//369
-f 210//370 216//370 12//370
-f 3//371 64//371 213//371
-f 215//372 59//372 212//372
-f 59//373 216//373 212//373
-f 64//374 63//374 213//374
-f 213//375 63//375 211//375
-f 63//376 214//376 211//376
-f 59//377 58//377 216//377
-f 58//378 9//378 216//378
-f 216//379 9//379 12//379
-f 218//380 219//380 217//380
-f 220//381 221//381 218//381
-f 224//382 223//382 410//382
-f 225//383 226//383 224//383
-f 217//384 219//384 13//384
-f 219//385 227//385 13//385
-f 218//386 221//386 219//386
-f 221//387 228//387 219//387
-f 219//388 228//388 227//388
-f 228//389 229//389 227//389
-f 222//390 231//390 220//390
-f 220//391 231//391 221//391
-f 221//392 231//392 228//392
-f 228//393 232//393 229//393
-f 229//394 232//394 230//394
-f 231//395 232//395 228//395
-f 232//396 233//396 230//396
-f 233//397 234//397 230//397
-f 410//398 223//398 222//398
-f 223//399 235//399 222//399
-f 222//400 235//400 231//400
-f 235//401 236//401 231//401
-f 231//402 236//402 232//402
-f 236//403 237//403 232//403
-f 237//404 233//404 232//404
-f 233//405 238//405 234//405
-f 223//406 239//406 235//406
-f 236//407 240//407 237//407
-f 237//408 241//408 233//408
-f 233//409 241//409 238//409
-f 224//410 242//410 223//410
-f 223//411 242//411 239//411
-f 239//412 243//412 235//412
-f 235//413 243//413 236//413
-f 243//414 240//414 236//414
-f 240//415 241//415 237//415
-f 241//416 244//416 238//416
-f 224//417 226//417 242//417
-f 242//418 245//418 239//418
-f 239//419 245//419 243//419
-f 243//420 246//420 240//420
-f 240//421 246//421 241//421
-f 246//422 247//422 241//422
-f 241//423 247//423 244//423
-f 245//424 246//424 243//424
-f 246//425 249//425 247//425
-f 247//426 248//426 244//426
-f 5//427 29//427 225//427
-f 225//428 29//428 226//428
-f 226//429 250//429 242//429
-f 242//430 250//430 245//430
-f 250//431 251//431 245//431
-f 245//432 251//432 246//432
-f 251//433 249//433 246//433
-f 247//434 252//434 248//434
-f 29//435 30//435 226//435
-f 226//436 30//436 250//436
-f 249//437 47//437 247//437
-f 247//438 47//438 252//438
-f 252//439 52//439 248//439
-f 4//440 29//440 5//440
-f 30//441 33//441 250//441
-f 250//442 33//442 251//442
-f 37//443 40//443 251//443
-f 251//444 40//444 249//444
-f 249//445 40//445 47//445
-f 47//446 52//446 252//446
-f 438//447 256//447 254//447
-f 413//448 261//448 260//448
-f 6//449 261//449 413//449
-f 254//450 255//450 253//450
-f 255//451 262//451 253//451
-f 254//452 256//452 255//452
-f 255//453 263//453 262//453
-f 263//454 264//454 262//454
-f 256//455 265//455 255//455
-f 255//456 265//456 263//456
-f 266//457 265//457 256//457
-f 265//458 264//458 263//458
-f 257//459 258//459 256//459
-f 258//460 266//460 256//460
-f 265//461 268//461 264//461
-f 268//462 267//462 264//462
-f 266//463 270//463 265//463
-f 270//464 268//464 265//464
-f 268//465 271//465 267//465
-f 267//466 271//466 269//466
-f 259//467 272//467 258//467
-f 258//468 272//468 266//468
-f 272//469 270//469 266//469
-f 270//470 273//470 268//470
-f 273//471 271//471 268//471
-f 271//472 274//472 269//472
-f 259//473 260//473 272//473
-f 260//474 275//474 272//474
-f 272//475 275//475 270//475
-f 275//476 276//476 270//476
-f 270//477 276//477 273//477
-f 273//478 277//478 271//478
-f 277//479 274//479 271//479
-f 274//480 278//480 269//480
-f 276//481 277//481 273//481
-f 277//482 279//482 274//482
-f 274//483 279//483 278//483
-f 279//484 280//484 278//484
-f 261//485 281//485 260//485
-f 260//486 281//486 275//486
-f 281//487 282//487 275//487
-f 275//488 282//488 276//488
-f 282//489 283//489 276//489
-f 283//490 284//490 276//490
-f 276//491 284//491 277//491
-f 284//492 285//492 277//492
-f 277//493 285//493 279//493
-f 281//494 286//494 282//494
-f 286//495 283//495 282//495
-f 285//496 287//496 279//496
-f 279//497 287//497 280//497
-f 287//498 288//498 280//498
-f 6//499 100//499 261//499
-f 261//500 100//500 281//500
-f 100//501 286//501 281//501
-f 283//502 109//502 284//502
-f 284//503 109//503 285//503
-f 287//504 121//504 288//504
-f 100//505 102//505 286//505
-f 286//506 105//506 283//506
-f 283//507 105//507 109//507
-f 109//508 113//508 285//508
-f 285//509 113//509 287//509
-f 121//510 4//510 288//510
-f 294//511 295//511 465//511
-f 296//512 297//512 294//512
-f 298//513 299//513 296//513
-f 15//514 290//514 289//514
-f 290//515 300//515 289//515
-f 291//516 301//516 290//516
-f 301//517 300//517 290//517
-f 301//518 302//518 300//518
-f 302//519 303//519 300//519
-f 293//520 304//520 292//520
-f 292//521 304//521 291//521
-f 291//522 304//522 301//522
-f 302//523 305//523 303//523
-f 304//524 302//524 301//524
-f 302//525 306//525 305//525
-f 465//526 295//526 293//526
-f 295//527 307//527 293//527
-f 293//528 307//528 304//528
-f 307//529 308//529 304//529
-f 304//530 308//530 302//530
-f 308//531 309//531 302//531
-f 309//532 306//532 302//532
-f 306//533 310//533 305//533
-f 295//534 311//534 307//534
-f 311//535 308//535 307//535
-f 309//536 312//536 306//536
-f 306//537 312//537 310//537
-f 294//538 297//538 295//538
-f 297//539 311//539 295//539
-f 311//540 313//540 308//540
-f 313//541 309//541 308//541
-f 312//542 317//542 310//542
-f 317//543 314//543 310//543
-f 297//544 315//544 311//544
-f 315//545 313//545 311//545
-f 313//546 316//546 309//546
-f 309//547 316//547 312//547
-f 316//548 317//548 312//548
-f 296//549 299//549 297//549
-f 299//550 318//550 297//550
-f 297//551 318//551 315//551
-f 318//552 319//552 315//552
-f 315//553 320//553 313//553
-f 320//554 316//554 313//554
-f 316//555 321//555 317//555
-f 321//556 322//556 317//556
-f 317//557 322//557 314//557
-f 299//558 131//558 318//558
-f 319//559 320//559 315//559
-f 322//560 11//560 314//560
-f 298//561 8//561 299//561
-f 8//562 131//562 299//562
-f 131//563 132//563 318//563
-f 318//564 132//564 319//564
-f 319//565 137//565 320//565
-f 320//566 142//566 316//566
-f 316//567 142//567 321//567
-f 142//568 148//568 321//568
-f 321//569 148//569 322//569
-f 148//570 11//570 322//570
-f 319//571 132//571 137//571
-f 320//572 137//572 142//572
-f 495//573 323//573 17//573
-f 494//574 324//574 495//574
-f 493//575 328//575 326//575
-f 329//576 328//576 493//576
-f 495//577 324//577 323//577
-f 494//578 325//578 324//578
-f 325//579 332//579 324//579
-f 324//580 332//580 323//580
-f 332//581 331//581 323//581
-f 332//582 333//582 331//582
-f 333//583 334//583 331//583
-f 326//584 327//584 325//584
-f 325//585 327//585 332//585
-f 326//586 328//586 327//586
-f 327//587 333//587 332//587
-f 333//588 335//588 334//588
-f 328//589 337//589 327//589
-f 337//590 338//590 327//590
-f 327//591 338//591 333//591
-f 338//592 339//592 333//592
-f 333//593 339//593 335//593
-f 335//594 336//594 334//594
-f 330//595 341//595 329//595
-f 329//596 341//596 328//596
-f 328//597 341//597 337//597
-f 341//598 342//598 337//598
-f 337//599 342//599 338//599
-f 342//600 343//600 338//600
-f 338//601 343//601 339//601
-f 339//602 343//602 335//602
-f 343//603 344//603 335//603
-f 335//604 344//604 336//604
-f 344//605 340//605 336//605
-f 341//606 345//606 342//606
-f 345//607 346//607 342//607
-f 342//608 346//608 343//608
-f 344//609 347//609 340//609
-f 330//610 348//610 341//610
-f 348//611 345//611 341//611
-f 345//612 349//612 346//612
-f 346//613 350//613 343//613
-f 350//614 351//614 343//614
-f 343//615 351//615 344//615
-f 351//616 352//616 344//616
-f 344//617 352//617 347//617
-f 10//618 348//618 330//618
-f 349//619 354//619 346//619
-f 346//620 354//620 350//620
-f 354//621 351//621 350//621
-f 352//622 355//622 347//622
-f 347//623 355//623 353//623
-f 10//624 158//624 348//624
-f 158//625 161//625 348//625
-f 348//626 161//626 345//626
-f 345//627 161//627 349//627
-f 351//628 176//628 352//628
-f 352//629 176//629 355//629
-f 9//630 158//630 10//630
-f 161//631 163//631 349//631
-f 349//632 163//632 354//632
-f 354//633 168//633 351//633
-f 351//634 168//634 176//634
-f 176//635 7//635 355//635
-f 244//636 356//636 238//636
-f 248//637 356//637 244//637
-f 52//638 357//638 248//638
-f 227//639 359//639 13//639
-f 13//640 359//640 358//640
-f 359//641 360//641 358//641
-f 229//642 230//642 227//642
-f 230//643 361//643 227//643
-f 227//644 361//644 359//644
-f 361//645 362//645 359//645
-f 359//646 362//646 360//646
-f 234//647 364//647 230//647
-f 230//648 364//648 361//648
-f 364//649 362//649 361//649
-f 362//650 365//650 360//650
-f 360//651 365//651 363//651
-f 234//652 366//652 364//652
-f 364//653 366//653 362//653
-f 366//654 367//654 362//654
-f 367//655 365//655 362//655
-f 365//656 368//656 363//656
-f 238//657 369//657 234//657
-f 234//658 369//658 366//658
-f 367//659 370//659 365//659
-f 370//660 368//660 365//660
-f 368//661 371//661 363//661
-f 356//662 369//662 238//662
-f 369//663 372//663 366//663
-f 372//664 373//664 366//664
-f 366//665 373//665 367//665
-f 373//666 374//666 367//666
-f 367//667 374//667 370//667
-f 370//668 375//668 368//668
-f 368//669 375//669 371//669
-f 356//670 376//670 369//670
-f 376//671 372//671 369//671
-f 374//672 377//672 370//672
-f 370//673 377//673 375//673
-f 375//674 534//674 371//674
-f 248//675 357//675 356//675
-f 357//676 376//676 356//676
-f 376//677 378//677 372//677
-f 372//678 378//678 373//678
-f 378//679 379//679 373//679
-f 379//680 380//680 373//680
-f 373//681 380//681 374//681
-f 374//682 380//682 377//682
-f 357//683 192//683 376//683
-f 380//684 381//684 377//684
-f 377//685 381//685 375//685
-f 381//686 382//686 375//686
-f 375//687 382//687 534//687
-f 382//688 383//688 534//688
-f 192//689 190//689 376//689
-f 376//690 190//690 378//690
-f 378//691 188//691 379//691
-f 188//692 187//692 379//692
-f 379//693 187//693 380//693
-f 187//694 381//694 380//694
-f 381//695 185//695 382//695
-f 52//696 3//696 357//696
-f 3//697 192//697 357//697
-f 190//698 188//698 378//698
-f 185//699 184//699 382//699
-f 382//700 184//700 383//700
-f 184//701 18//701 383//701
-f 264//702 384//702 262//702
-f 267//703 385//703 264//703
-f 269//704 385//704 267//704
-f 253//705 387//705 14//705
-f 262//706 388//706 253//706
-f 253//707 388//707 387//707
-f 262//708 384//708 388//708
-f 388//709 389//709 387//709
-f 264//710 385//710 384//710
-f 385//711 390//711 384//711
-f 390//712 391//712 384//712
-f 384//713 391//713 388//713
-f 388//714 391//714 389//714
-f 391//715 392//715 389//715
-f 392//716 562//716 389//716
-f 269//717 386//717 385//717
-f 386//718 393//718 385//718
-f 385//719 393//719 390//719
-f 393//720 394//720 390//720
-f 390//721 394//721 391//721
-f 391//722 394//722 392//722
-f 394//723 395//723 392//723
-f 392//724 395//724 562//724
-f 395//725 396//725 562//725
-f 386//726 397//726 393//726
-f 393//727 397//727 394//727
-f 278//728 398//728 269//728
-f 269//729 398//729 386//729
-f 386//730 398//730 397//730
-f 397//731 399//731 394//731
-f 399//732 400//732 394//732
-f 394//733 400//733 395//733
-f 395//734 400//734 396//734
-f 400//735 401//735 396//735
-f 401//736 402//736 396//736
-f 278//737 403//737 398//737
-f 398//738 404//738 397//738
-f 404//739 399//739 397//739
-f 280//740 403//740 278//740
-f 403//741 404//741 398//741
-f 404//742 405//742 399//742
-f 405//743 406//743 399//743
-f 399//744 406//744 400//744
-f 406//745 407//745 400//745
-f 400//746 407//746 401//746
-f 280//747 408//747 403//747
-f 403//748 408//748 404//748
-f 408//749 409//749 404//749
-f 404//750 409//750 405//750
-f 409//751 410//751 405//751
-f 410//752 406//752 405//752
-f 407//753 218//753 401//753
-f 401//754 217//754 402//754
-f 217//755 411//755 402//755
-f 288//756 408//756 280//756
-f 406//757 220//757 407//757
-f 220//758 218//758 407//758
-f 218//759 217//759 401//759
-f 288//760 5//760 408//760
-f 5//761 225//761 408//761
-f 225//762 224//762 408//762
-f 408//763 224//763 409//763
-f 224//764 410//764 409//764
-f 410//765 222//765 406//765
-f 222//766 220//766 406//766
-f 217//767 13//767 411//767
-f 289//768 16//768 15//768
-f 310//769 412//769 305//769
-f 11//770 413//770 314//770
-f 289//771 414//771 16//771
-f 414//772 415//772 16//772
-f 300//773 414//773 289//773
-f 414//774 416//774 415//774
-f 303//775 417//775 300//775
-f 417//776 418//776 300//776
-f 300//777 418//777 414//777
-f 418//778 416//778 414//778
-f 418//779 419//779 416//779
-f 305//780 420//780 303//780
-f 303//781 420//781 417//781
-f 305//782 412//782 420//782
-f 420//783 422//783 417//783
-f 417//784 422//784 418//784
-f 422//785 423//785 418//785
-f 418//786 423//786 419//786
-f 419//787 424//787 416//787
-f 424//788 421//788 416//788
-f 412//789 422//789 420//789
-f 423//790 424//790 419//790
-f 424//791 425//791 421//791
-f 425//792 426//792 421//792
-f 314//793 427//793 310//793
-f 310//794 427//794 412//794
-f 427//795 428//795 412//795
-f 412//796 428//796 422//796
-f 428//797 429//797 422//797
-f 429//798 430//798 422//798
-f 422//799 430//799 423//799
-f 423//800 430//800 424//800
-f 430//801 425//801 424//801
-f 314//802 431//802 427//802
-f 427//803 429//803 428//803
-f 430//804 432//804 425//804
-f 432//805 433//805 425//805
-f 425//806 433//806 426//806
-f 433//807 434//807 426//807
-f 431//808 435//808 427//808
-f 427//809 435//809 429//809
-f 435//810 436//810 429//810
-f 436//811 437//811 429//811
-f 429//812 437//812 430//812
-f 430//813 437//813 432//813
-f 432//814 438//814 433//814
-f 314//815 413//815 431//815
-f 431//816 259//816 435//816
-f 259//817 436//817 435//817
-f 437//818 438//818 432//818
-f 438//819 439//819 433//819
-f 433//820 439//820 434//820
-f 436//821 257//821 437//821
-f 257//822 438//822 437//822
-f 438//823 254//823 439//823
-f 11//824 6//824 413//824
-f 413//825 260//825 431//825
-f 431//826 260//826 259//826
-f 259//827 258//827 436//827
-f 436//828 258//828 257//828
-f 257//829 256//829 438//829
-f 254//830 253//830 439//830
-f 253//831 14//831 439//831
-f 331//832 441//832 323//832
-f 334//833 442//833 331//833
-f 336//834 443//834 334//834
-f 340//835 444//835 336//835
-f 7//836 298//836 355//836
-f 323//837 440//837 17//837
-f 323//838 441//838 440//838
-f 441//839 445//839 440//839
-f 331//840 442//840 441//840
-f 441//841 446//841 445//841
-f 446//842 447//842 445//842
-f 447//843 448//843 445//843
-f 442//844 446//844 441//844
-f 334//845 443//845 442//845
-f 447//846 449//846 448//846
-f 449//847 450//847 448//847
-f 336//848 444//848 443//848
-f 443//849 451//849 442//849
-f 442//850 451//850 446//850
-f 451//851 452//851 446//851
-f 446//852 452//852 447//852
-f 452//853 449//853 447//853
-f 444//854 453//854 443//854
-f 453//855 451//855 443//855
-f 452//856 454//856 449//856
-f 454//857 450//857 449//857
-f 453//858 456//858 451//858
-f 451//859 456//859 452//859
-f 456//860 454//860 452//860
-f 454//861 457//861 450//861
-f 457//862 455//862 450//862
-f 340//863 458//863 444//863
-f 444//864 458//864 453//864
-f 458//865 459//865 453//865
-f 453//866 459//866 456//866
-f 459//867 460//867 456//867
-f 456//868 460//868 454//868
-f 460//869 457//869 454//869
-f 457//870 461//870 455//870
-f 347//871 353//871 340//871
-f 353//872 458//872 340//872
-f 458//873 462//873 459//873
-f 460//874 463//874 457//874
-f 463//875 461//875 457//875
-f 461//876 464//876 455//876
-f 353//877 296//877 458//877
-f 296//878 462//878 458//878
-f 462//879 465//879 459//879
-f 459//880 465//880 460//880
-f 465//881 466//881 460//881
-f 460//882 466//882 463//882
-f 466//883 467//883 463//883
-f 463//884 467//884 461//884
-f 461//885 467//885 464//885
-f 355//886 298//886 353//886
-f 298//887 296//887 353//887
-f 467//888 15//888 464//888
-f 296//889 294//889 462//889
-f 462//890 294//890 465//890
-f 465//891 293//891 466//891
-f 293//892 292//892 466//892
-f 466//893 292//893 467//893
-f 292//894 291//894 467//894
-f 291//895 290//895 467//895
-f 467//896 290//896 15//896
-f 196//897 468//897 195//897
-f 198//898 469//898 196//898
-f 210//899 471//899 204//899
-f 12//900 471//900 210//900
-f 194//901 472//901 18//901
-f 195//902 468//902 194//902
-f 194//903 473//903 472//903
-f 468//904 473//904 194//904
-f 473//905 474//905 472//905
-f 474//906 475//906 472//906
-f 196//907 469//907 468//907
-f 469//908 476//908 468//908
-f 468//909 476//909 473//909
-f 473//910 476//910 474//910
-f 476//911 477//911 474//911
-f 198//912 478//912 469//912
-f 469//913 478//913 476//913
-f 477//914 479//914 474//914
-f 474//915 479//915 641//915
-f 202//916 480//916 198//916
-f 198//917 480//917 478//917
-f 480//918 481//918 478//918
-f 478//919 481//919 476//919
-f 481//920 477//920 476//920
-f 477//921 482//921 479//921
-f 482//922 642//922 479//922
-f 204//923 470//923 202//923
-f 202//924 470//924 480//924
-f 481//925 483//925 477//925
-f 483//926 482//926 477//926
-f 482//927 484//927 642//927
-f 484//928 485//928 642//928
-f 204//929 471//929 470//929
-f 470//930 486//930 480//930
-f 486//931 487//931 480//931
-f 480//932 487//932 481//932
-f 487//933 483//933 481//933
-f 483//934 488//934 482//934
-f 488//935 484//935 482//935
-f 471//936 486//936 470//936
-f 486//937 489//937 487//937
-f 487//938 490//938 483//938
-f 490//939 488//939 483//939
-f 488//940 491//940 484//940
-f 471//941 492//941 486//941
-f 492//942 489//942 486//942
-f 489//943 493//943 487//943
-f 487//944 493//944 490//944
-f 490//945 491//945 488//945
-f 491//946 494//946 484//946
-f 494//947 495//947 484//947
-f 484//948 495//948 485//948
-f 12//949 10//949 471//949
-f 493//950 326//950 490//950
-f 326//951 491//951 490//951
-f 10//952 330//952 471//952
-f 471//953 330//953 492//953
-f 330//954 329//954 492//954
-f 492//955 329//955 489//955
-f 489//956 329//956 493//956
-f 326//957 325//957 491//957
-f 325//958 494//958 491//958
-f 500//959 499//959 498//959
-f 502//960 501//960 500//960
-f 550//961 503//961 502//961
-f 496//962 506//962 497//962
-f 498//963 499//963 496//963
-f 499//964 507//964 496//964
-f 496//965 507//965 506//965
-f 507//966 508//966 506//966
-f 507//967 509//967 508//967
-f 499//968 510//968 507//968
-f 507//969 510//969 509//969
-f 500//970 501//970 499//970
-f 510//971 512//971 509//971
-f 512//972 511//972 509//972
-f 501//973 513//973 499//973
-f 499//974 513//974 510//974
-f 513//975 514//975 510//975
-f 514//976 512//976 510//976
-f 512//977 515//977 511//977
-f 502//978 503//978 501//978
-f 501//979 503//979 513//979
-f 503//980 516//980 513//980
-f 513//981 516//981 514//981
-f 516//982 517//982 514//982
-f 514//983 517//983 512//983
-f 517//984 518//984 512//984
-f 512//985 518//985 515//985
-f 518//986 519//986 515//986
-f 550//987 504//987 503//987
-f 504//988 520//988 503//988
-f 520//989 521//989 503//989
-f 503//990 521//990 516//990
-f 517//991 522//991 518//991
-f 518//992 522//992 519//992
-f 521//993 524//993 516//993
-f 516//994 524//994 517//994
-f 524//995 525//995 517//995
-f 517//996 525//996 522//996
-f 522//997 526//997 519//997
-f 519//998 526//998 523//998
-f 505//999 527//999 504//999
-f 504//1000 527//1000 520//1000
-f 527//1001 528//1001 520//1001
-f 520//1002 528//1002 521//1002
-f 528//1003 529//1003 521//1003
-f 521//1004 529//1004 524//1004
-f 525//1005 530//1005 522//1005
-f 530//1006 526//1006 522//1006
-f 527//1007 531//1007 528//1007
-f 531//1008 532//1008 528//1008
-f 528//1009 532//1009 529//1009
-f 529//1010 532//1010 524//1010
-f 532//1011 533//1011 524//1011
-f 524//1012 533//1012 525//1012
-f 530//1013 534//1013 526//1013
-f 526//1014 534//1014 523//1014
-f 534//1015 383//1015 523//1015
-f 505//1016 358//1016 527//1016
-f 358//1017 531//1017 527//1017
-f 532//1018 363//1018 533//1018
-f 363//1019 371//1019 533//1019
-f 533//1020 371//1020 525//1020
-f 525//1021 371//1021 530//1021
-f 371//1022 534//1022 530//1022
-f 411//1023 13//1023 505//1023
-f 13//1024 358//1024 505//1024
-f 358//1025 360//1025 531//1025
-f 531//1026 360//1026 532//1026
-f 360//1027 363//1027 532//1027
-f 535//1028 496//1028 497//1028
-f 537//1029 538//1029 536//1029
-f 539//1030 538//1030 537//1030
-f 540//1031 541//1031 539//1031
-f 535//1032 498//1032 496//1032
-f 535//1033 544//1033 498//1033
-f 544//1034 500//1034 498//1034
-f 536//1035 538//1035 535//1035
-f 538//1036 544//1036 535//1036
-f 538//1037 545//1037 544//1037
-f 544//1038 545//1038 500//1038
-f 539//1039 546//1039 538//1039
-f 546//1040 545//1040 538//1040
-f 545//1041 547//1041 500//1041
-f 547//1042 502//1042 500//1042
-f 539//1043 541//1043 546//1043
-f 546//1044 548//1044 545//1044
-f 548//1045 547//1045 545//1045
-f 540//1046 542//1046 541//1046
-f 541//1047 549//1047 546//1047
-f 546//1048 549//1048 548//1048
-f 548//1049 550//1049 547//1049
-f 547//1050 550//1050 502//1050
-f 542//1051 551//1051 541//1051
-f 541//1052 551//1052 549//1052
-f 549//1053 552//1053 548//1053
-f 552//1054 553//1054 548//1054
-f 548//1055 553//1055 550//1055
-f 540//1056 543//1056 542//1056
-f 543//1057 554//1057 542//1057
-f 554//1058 555//1058 542//1058
-f 542//1059 555//1059 551//1059
-f 551//1060 556//1060 549//1060
-f 556//1061 552//1061 549//1061
-f 553//1062 504//1062 550//1062
-f 543//1063 557//1063 554//1063
-f 555//1064 556//1064 551//1064
-f 556//1065 558//1065 552//1065
-f 558//1066 559//1066 552//1066
-f 552//1067 559//1067 553//1067
-f 559//1068 560//1068 553//1068
-f 553//1069 560//1069 504//1069
-f 560//1070 505//1070 504//1070
-f 14//1071 557//1071 543//1071
-f 557//1072 561//1072 554//1072
-f 554//1073 561//1073 555//1073
-f 561//1074 562//1074 555//1074
-f 555//1075 562//1075 556//1075
-f 562//1076 558//1076 556//1076
-f 560//1077 411//1077 505//1077
-f 14//1078 387//1078 557//1078
-f 387//1079 561//1079 557//1079
-f 558//1080 402//1080 559//1080
-f 559//1081 402//1081 560//1081
-f 387//1082 389//1082 561//1082
-f 561//1083 389//1083 562//1083
-f 562//1084 396//1084 558//1084
-f 558//1085 396//1085 402//1085
-f 402//1086 411//1086 560//1086
-f 564//1087 565//1087 563//1087
-f 568//1088 569//1088 567//1088
-f 615//1089 16//1089 568//1089
-f 15//1090 16//1090 615//1090
-f 591//1091 563//1091 497//1091
-f 563//1092 570//1092 497//1092
-f 497//1093 570//1093 535//1093
-f 570//1094 536//1094 535//1094
-f 565//1095 570//1095 563//1095
-f 570//1096 571//1096 536//1096
-f 571//1097 537//1097 536//1097
-f 564//1098 566//1098 565//1098
-f 566//1099 572//1099 565//1099
-f 572//1100 573//1100 565//1100
-f 565//1101 573//1101 570//1101
-f 573//1102 571//1102 570//1102
-f 567//1103 574//1103 566//1103
-f 566//1104 574//1104 572//1104
-f 572//1105 575//1105 573//1105
-f 575//1106 576//1106 573//1106
-f 573//1107 576//1107 571//1107
-f 576//1108 577//1108 571//1108
-f 571//1109 577//1109 537//1109
-f 537//1110 577//1110 539//1110
-f 577//1111 540//1111 539//1111
-f 574//1112 575//1112 572//1112
-f 567//1113 569//1113 574//1113
-f 569//1114 578//1114 574//1114
-f 574//1115 578//1115 575//1115
-f 575//1116 579//1116 576//1116
-f 576//1117 579//1117 577//1117
-f 579//1118 580//1118 577//1118
-f 577//1119 580//1119 540//1119
-f 568//1120 581//1120 569//1120
-f 581//1121 578//1121 569//1121
-f 578//1122 582//1122 575//1122
-f 582//1123 579//1123 575//1123
-f 579//1124 583//1124 580//1124
-f 580//1125 584//1125 540//1125
-f 584//1126 543//1126 540//1126
-f 581//1127 585//1127 578//1127
-f 578//1128 585//1128 582//1128
-f 582//1129 586//1129 579//1129
-f 579//1130 586//1130 583//1130
-f 583//1131 587//1131 580//1131
-f 580//1132 587//1132 584//1132
-f 16//1133 581//1133 568//1133
-f 585//1134 588//1134 582//1134
-f 588//1135 586//1135 582//1135
-f 586//1136 426//1136 583//1136
-f 426//1137 587//1137 583//1137
-f 584//1138 589//1138 543//1138
-f 589//1139 14//1139 543//1139
-f 16//1140 415//1140 581//1140
-f 415//1141 585//1141 581//1141
-f 426//1142 434//1142 587//1142
-f 587//1143 434//1143 584//1143
-f 434//1144 589//1144 584//1144
-f 415//1145 416//1145 585//1145
-f 585//1146 416//1146 588//1146
-f 416//1147 421//1147 588//1147
-f 588//1148 421//1148 586//1148
-f 586//1149 421//1149 426//1149
-f 434//1150 439//1150 589//1150
-f 589//1151 439//1151 14//1151
-f 595//1152 596//1152 594//1152
-f 597//1153 598//1153 595//1153
-f 590//1154 591//1154 497//1154
-f 591//1155 599//1155 563//1155
-f 592//1156 599//1156 591//1156
-f 599//1157 564//1157 563//1157
-f 592//1158 600//1158 599//1158
-f 600//1159 564//1159 599//1159
-f 593//1160 601//1160 592//1160
-f 592//1161 601//1161 600//1161
-f 600//1162 602//1162 564//1162
-f 602//1163 566//1163 564//1163
-f 594//1164 601//1164 593//1164
-f 601//1165 603//1165 600//1165
-f 602//1166 567//1166 566//1166
-f 594//1167 604//1167 601//1167
-f 604//1168 603//1168 601//1168
-f 603//1169 605//1169 600//1169
-f 600//1170 605//1170 602//1170
-f 602//1171 606//1171 567//1171
-f 596//1172 604//1172 594//1172
-f 604//1173 607//1173 603//1173
-f 603//1174 607//1174 605//1174
-f 605//1175 608//1175 602//1175
-f 608//1176 606//1176 602//1176
-f 596//1177 609//1177 604//1177
-f 604//1178 609//1178 607//1178
-f 607//1179 608//1179 605//1179
-f 608//1180 610//1180 606//1180
-f 606//1181 610//1181 567//1181
-f 610//1182 568//1182 567//1182
-f 595//1183 598//1183 596//1183
-f 598//1184 611//1184 596//1184
-f 596//1185 611//1185 609//1185
-f 609//1186 612//1186 607//1186
-f 607//1187 612//1187 608//1187
-f 612//1188 613//1188 608//1188
-f 613//1189 614//1189 608//1189
-f 608//1190 614//1190 610//1190
-f 610//1191 615//1191 568//1191
-f 598//1192 616//1192 611//1192
-f 611//1193 617//1193 609//1193
-f 609//1194 617//1194 612//1194
-f 614//1195 615//1195 610//1195
-f 597//1196 17//1196 598//1196
-f 616//1197 448//1197 611//1197
-f 448//1198 617//1198 611//1198
-f 617//1199 618//1199 612//1199
-f 612//1200 618//1200 613//1200
-f 613//1201 618//1201 614//1201
-f 614//1202 619//1202 615//1202
-f 17//1203 440//1203 598//1203
-f 598//1204 440//1204 616//1204
-f 440//1205 445//1205 616//1205
-f 445//1206 448//1206 616//1206
-f 617//1207 450//1207 618//1207
-f 618//1208 619//1208 614//1208
-f 619//1209 464//1209 615//1209
-f 464//1210 15//1210 615//1210
-f 448//1211 450//1211 617//1211
-f 450//1212 455//1212 618//1212
-f 618//1213 455//1213 619//1213
-f 455//1214 464//1214 619//1214
-f 506//1215 590//1215 497//1215
-f 511//1216 620//1216 509//1216
-f 515//1217 621//1217 511//1217
-f 519//1218 623//1218 515//1218
-f 523//1219 623//1219 519//1219
-f 508//1220 590//1220 506//1220
-f 590//1221 592//1221 591//1221
-f 508//1222 624//1222 590//1222
-f 624//1223 592//1223 590//1223
-f 509//1224 620//1224 508//1224
-f 620//1225 624//1225 508//1225
-f 624//1226 625//1226 592//1226
-f 625//1227 593//1227 592//1227
-f 511//1228 621//1228 620//1228
-f 621//1229 626//1229 620//1229
-f 626//1230 627//1230 620//1230
-f 620//1231 627//1231 624//1231
-f 627//1232 625//1232 624//1232
-f 625//1233 628//1233 593//1233
-f 628//1234 594//1234 593//1234
-f 515//1235 622//1235 621//1235
-f 622//1236 626//1236 621//1236
-f 627//1237 628//1237 625//1237
-f 515//1238 623//1238 622//1238
-f 622//1239 629//1239 626//1239
-f 626//1240 629//1240 627//1240
-f 629//1241 630//1241 627//1241
-f 627//1242 630//1242 628//1242
-f 630//1243 631//1243 628//1243
-f 628//1244 631//1244 594//1244
-f 631//1245 595//1245 594//1245
-f 623//1246 632//1246 622//1246
-f 622//1247 632//1247 629//1247
-f 629//1248 633//1248 630//1248
-f 630//1249 634//1249 631//1249
-f 523//1250 635//1250 623//1250
-f 635//1251 632//1251 623//1251
-f 632//1252 636//1252 629//1252
-f 636//1253 633//1253 629//1253
-f 633//1254 634//1254 630//1254
-f 634//1255 637//1255 631//1255
-f 631//1256 637//1256 595//1256
-f 637//1257 597//1257 595//1257
-f 635//1258 638//1258 632//1258
-f 632//1259 638//1259 636//1259
-f 633//1260 639//1260 634//1260
-f 639//1261 637//1261 634//1261
-f 523//1262 640//1262 635//1262
-f 635//1263 640//1263 638//1263
-f 638//1264 641//1264 636//1264
-f 636//1265 641//1265 633//1265
-f 641//1266 642//1266 633//1266
-f 633//1267 642//1267 639//1267
-f 383//1268 18//1268 523//1268
-f 18//1269 640//1269 523//1269
-f 640//1270 475//1270 638//1270
-f 475//1271 641//1271 638//1271
-f 642//1272 485//1272 639//1272
-f 639//1273 485//1273 637//1273
-f 637//1274 485//1274 597//1274
-f 18//1275 472//1275 640//1275
-f 640//1276 472//1276 475//1276
-f 475//1277 474//1277 641//1277
-f 641//1278 479//1278 642//1278
-f 485//1279 495//1279 597//1279
-f 597//1280 495//1280 17//1280
diff --git a/src/examples/evas/resources/models/lod/iso_sphere1.obj b/src/examples/evas/resources/models/lod/iso_sphere1.obj
deleted file mode 100644
index 4582ff8a52..0000000000
--- a/src/examples/evas/resources/models/lod/iso_sphere1.obj
+++ /dev/null
@@ -1,1608 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: ''
-# www.blender.org
-mtllib iso_sphere1.mtl
-o Icosphere.002
-v -0.069310 -1.100891 0.248068
-v -0.028887 -1.095094 0.458452
-v -0.208023 -1.095540 0.398588
-v -0.293699 -0.624451 -0.498615
-v -0.552551 -0.536512 -0.445019
-v -0.405472 -0.385265 -0.576459
-v -0.283834 -0.545811 1.215694
-v -0.467323 -0.438046 1.202358
-v 0.654968 -0.510392 -0.199780
-v -0.435829 -0.704453 1.059395
-v -0.212650 -0.735832 1.102814
-v -0.299933 -0.881676 0.935535
-v -0.107737 -0.875687 0.974464
-v -0.159106 -1.004147 0.772873
-v -0.246823 -1.068542 0.559624
-v -0.120287 -0.630593 1.186432
-v 0.012400 -0.709786 1.127441
-v 0.102819 -0.807038 1.019195
-v 0.215908 -0.624214 1.135952
-v 0.089247 -0.941906 0.853393
-v 0.018310 -1.039063 0.679516
-v 0.300138 -0.815399 0.924240
-v 0.395405 -0.613671 1.045494
-v 0.447180 -0.704193 0.925438
-v 0.273882 -0.947760 0.733219
-v 0.588772 -0.566635 0.904762
-v 0.187465 -1.042172 0.540932
-v 0.480358 -0.833977 0.713856
-v 0.110853 -1.084313 0.380026
-v 0.363895 -0.955284 0.596336
-v 0.603695 -0.697851 0.743286
-v 0.792637 -0.574664 0.319945
-v 0.679950 -0.736308 0.244382
-v 0.712452 -0.635018 0.055260
-v 0.723211 -0.668576 0.473472
-v 0.699818 -0.581283 0.729637
-v 0.520725 -0.746635 -0.128170
-v 0.498919 -0.833885 -0.016346
-v 0.570752 -0.837771 0.172390
-v 0.379889 -0.963881 0.127479
-v 0.295174 -0.952122 -0.026993
-v 0.586451 -0.836903 0.386253
-v 0.398818 -0.977616 0.383987
-v 0.631035 -0.762104 0.546497
-v 0.293503 -1.025699 0.282368
-v 0.160162 -1.060316 0.183557
-v 0.497512 -0.891752 0.513485
-v -0.846823 -0.757283 0.426124
-v -0.936641 -0.614958 0.514698
-v -0.990892 -0.550005 0.322880
-v -0.302617 -1.081706 0.286071
-v -0.415815 -1.053943 0.345698
-v -0.828191 -0.710325 0.645595
-v -0.740928 -0.864121 0.398935
-v -0.667297 -0.891622 0.566242
-v -0.873503 -0.540241 0.791042
-v -0.721111 -0.703503 0.833382
-v -0.590925 -0.970122 0.404590
-v -0.653271 -0.829895 0.738327
-v -0.665726 -0.628777 0.964996
-v -0.482666 -0.994825 0.568329
-v -0.518677 -0.914385 0.738998
-v -0.395290 -0.981358 0.711334
-v -0.500692 -0.809422 0.917816
-v -0.529839 -0.563667 1.111137
-v -0.359850 -0.770922 -0.365048
-v -0.472542 -0.674141 -0.393273
-v -0.211685 -1.063345 0.068899
-v -0.291598 -0.977543 -0.112961
-v -0.567087 -0.763540 -0.252342
-v -0.693050 -0.620888 -0.276894
-v -0.372504 -0.903355 -0.200752
-v -0.739403 -0.751215 -0.075745
-v -0.829910 -0.570200 -0.160072
-v -0.615992 -0.857885 -0.067005
-v -0.515071 -0.946041 -0.004608
-v -0.879726 -0.604909 -0.027535
-v -0.400098 -1.022894 0.087616
-v -0.712963 -0.861581 0.127678
-v -0.883431 -0.700233 0.173216
-v -0.981623 -0.507691 0.104828
-v -0.558951 -0.980369 0.213857
-v -0.746705 -0.857286 0.239750
-v 0.293039 -0.882088 -0.161659
-v 0.098636 -1.023926 -0.014095
-v -0.018400 -1.069836 0.076595
-v 0.475891 -0.626984 -0.300896
-v 0.399971 -0.775978 -0.216141
-v 0.343323 -0.642849 -0.390930
-v 0.249000 -0.793369 -0.305607
-v 0.095417 -0.673927 -0.467808
-v 0.234070 -0.547928 -0.502911
-v 0.106019 -0.933437 -0.191548
-v 0.051353 -0.853241 -0.312576
-v -0.073954 -0.758541 -0.423630
-v -0.096958 -0.531521 -0.572599
-v -0.083474 -0.992786 -0.123757
-v -0.154675 -0.895904 -0.275383
-v -0.218428 -0.775589 -0.394486
-v 0.861359 -0.082613 0.644566
-v 0.901598 -0.084706 0.478939
-v 0.848382 0.197119 0.527233
-v 0.783520 -0.309281 0.777656
-v 0.864014 -0.263269 0.587173
-v 0.827661 -0.393738 0.609878
-v 0.868386 0.185566 0.388269
-v 0.836891 0.243326 0.189449
-v 0.790615 0.374135 0.322676
-v 0.896569 0.033023 0.209218
-v 0.907390 -0.156985 0.260015
-v 0.854325 -0.117769 -0.002844
-v 0.893091 -0.278774 0.402652
-v 0.808928 -0.345519 -0.033497
-v 0.868848 -0.386362 0.300394
-v 0.846920 -0.398273 0.139723
-v 0.806796 -0.501695 0.534765
-v 0.749102 -0.516366 -0.018978
-v 0.078203 0.241794 1.262827
-v 0.237408 0.254766 1.214340
-v 0.060432 0.087578 1.308445
-v -0.161757 -0.370487 1.300834
-v -0.023424 -0.141092 1.336118
-v -0.198433 -0.133174 1.332310
-v 0.396729 0.098244 1.191071
-v 0.301659 0.037601 1.246521
-v 0.132133 -0.162282 1.313611
-v 0.383690 -0.113483 1.218491
-v 0.587799 -0.114118 1.074440
-v 0.292099 -0.252253 1.247982
-v 0.442047 -0.275818 1.163857
-v 0.015343 -0.446821 1.273595
-v 0.146210 -0.395130 1.262649
-v 0.596779 -0.279270 1.041771
-v 0.303848 -0.417084 1.199646
-v 0.420685 -0.467846 1.116596
-v 0.623501 -0.410210 0.969643
-v -0.960056 0.171375 0.765186
-v -0.951958 -0.027657 0.851376
-v -1.071848 -0.322966 0.364229
-v -1.030896 -0.380455 0.560368
-v -0.796021 0.249057 0.959980
-v -0.815353 0.049239 1.013908
-v -0.961044 -0.142370 0.833458
-v -1.033564 -0.080474 0.682114
-v -0.858704 -0.195490 0.975487
-v -0.760162 -0.149553 1.082809
-v -0.613098 -0.207066 1.187248
-v -1.076777 -0.141352 0.532288
-v -0.978710 -0.316974 0.750885
-v -0.650627 -0.340468 1.133232
-v -0.900520 -0.360630 0.867432
-v -0.781990 -0.346770 1.019417
-v -0.964844 -0.471052 0.660278
-v -0.753094 -0.485626 0.984680
-v -0.574596 -0.255905 -0.532379
-v -0.757133 -0.138884 -0.415932
-v -0.588737 -0.107976 -0.537361
-v -0.691917 -0.401930 -0.412457
-v -0.810160 0.387055 -0.169868
-v -0.878757 0.238838 -0.187756
-v -0.968349 0.162035 -0.075088
-v -0.800339 0.089186 -0.349430
-v -0.951937 -0.017335 -0.177204
-v -1.034149 -0.011975 0.003769
-v -0.863926 -0.091925 -0.305031
-v -1.047931 -0.169559 0.035078
-v -0.944202 -0.235142 -0.178368
-v -0.837151 -0.288597 -0.307297
-v -1.017939 -0.321849 0.015717
-v -0.918398 -0.406156 -0.148087
-v -1.062685 -0.320561 0.209671
-v -0.779305 -0.455339 -0.304852
-v 0.305264 0.271534 -0.507099
-v 0.190556 0.209658 -0.575659
-v 0.171795 0.410027 -0.484646
-v 0.511551 -0.026012 -0.462767
-v 0.485611 -0.192028 -0.480486
-v 0.341194 -0.003917 -0.565588
-v 0.192158 -0.006494 -0.623211
-v 0.037354 0.175552 -0.621585
-v 0.011564 -0.018299 -0.657464
-v -0.017699 -0.166139 -0.664629
-v 0.315178 -0.241880 -0.569325
-v 0.169563 -0.199926 -0.626419
-v 0.545784 -0.406858 -0.377068
-v 0.419430 -0.387444 -0.479725
-v 0.181303 -0.382612 -0.589036
-v -0.000362 -0.418310 -0.615685
-v -0.232213 -0.305445 -0.638138
-v -0.265099 -0.491760 -0.570953
-v 0.377304 0.360538 1.092026
-v 0.493668 0.390770 0.978104
-v 0.524433 0.220390 1.058681
-v 0.610672 0.057484 1.030212
-v 0.658760 0.326189 0.845902
-v 0.559378 0.471689 0.835518
-v 0.707466 0.142052 0.888622
-v 0.730349 0.376724 0.658611
-v 0.732239 -0.006005 0.895279
-v 0.773045 -0.143404 0.845112
-v 0.801689 0.131070 0.727703
-v 0.699579 0.496501 0.487684
-v -0.623558 0.133493 1.155441
-v -0.650574 0.011139 1.158310
-v -0.667526 0.362619 1.014370
-v -0.792534 0.428478 0.816277
-v -0.539780 0.427292 1.057900
-v -0.478600 0.240410 1.196438
-v -0.390804 0.325622 1.192150
-v -0.382730 0.471611 1.102661
-v -0.459568 -0.086625 1.271816
-v -0.246124 0.402557 1.185593
-v -0.355808 0.047609 1.292945
-v -0.252129 0.223144 1.269314
-v -0.085038 0.379200 1.217154
-v -0.377552 -0.299103 1.276918
-v -0.126800 0.114231 1.314582
-v 0.143173 0.462581 1.132462
-v -1.075738 -0.038942 0.152493
-v -0.914820 0.366733 0.003487
-v -0.955166 0.390092 0.196289
-v -1.025636 0.186831 0.106003
-v -1.027018 0.252643 0.265636
-v -1.085337 0.046477 0.311175
-v -1.007069 0.297562 0.426402
-v -0.935369 0.433915 0.444270
-v -1.093932 -0.151904 0.312578
-v -1.055343 0.135176 0.497713
-v -0.924356 0.375757 0.630913
-v -0.887314 0.328934 0.766159
-v -0.148374 0.046934 -0.656380
-v -0.324457 -0.136029 -0.641977
-v -0.024461 0.374998 -0.546778
-v -0.196157 0.257208 -0.596019
-v -0.246814 0.495504 -0.458252
-v -0.383528 0.352139 -0.512056
-v -0.337763 0.087526 -0.617887
-v -0.383223 0.212319 -0.569508
-v -0.535355 0.231052 -0.499184
-v -0.506199 0.449406 -0.396938
-v -0.492210 0.043004 -0.572596
-v -0.697004 0.238403 -0.390385
-v -0.642525 0.077850 -0.483002
-v -0.669312 0.455082 -0.270363
-v 0.833803 0.115561 0.016867
-v 0.713865 -0.330425 -0.214859
-v 0.776646 0.321740 0.063072
-v 0.694742 0.354485 -0.085243
-v 0.612297 0.506575 -0.042900
-v 0.714150 0.233402 -0.161671
-v 0.760750 0.015718 -0.176723
-v 0.582794 0.322660 -0.272987
-v 0.688461 0.043903 -0.278656
-v 0.449417 0.509144 -0.247112
-v 0.746504 -0.170211 -0.211544
-v 0.589161 0.111167 -0.369831
-v 0.426842 0.374678 -0.379665
-v 0.470085 0.177862 -0.446465
-v 0.642128 -0.186883 -0.342793
-v -0.002878 0.826021 0.703499
-v 0.145674 0.850201 0.548622
-v -0.082945 0.898915 0.437085
-v 0.046944 0.707386 0.911072
-v 0.171530 0.772991 0.745659
-v 0.232824 0.682339 0.868805
-v 0.027522 0.890930 0.255779
-v 0.171641 0.862917 0.407749
-v 0.189064 0.853628 0.200719
-v 0.376762 0.771977 0.476635
-v 0.347613 0.797933 0.297537
-v 0.380789 0.725775 0.652054
-v 0.516993 0.694598 0.357285
-v 0.544768 0.653550 0.500538
-v 0.159410 0.599563 1.005615
-v 0.379215 0.611717 0.857987
-v 0.483145 0.604288 0.749672
-v 0.580601 0.564234 0.665642
-v 0.680249 0.531307 0.217619
-v 0.375151 0.506973 0.978165
-v -0.266456 0.875124 0.489086
-v -0.469816 0.791158 0.592770
-v -0.320759 0.804640 0.701527
-v -0.620258 0.667803 0.699181
-v -0.512159 0.682072 0.800057
-v -0.161287 0.828411 0.704579
-v -0.123759 0.757065 0.852745
-v -0.323435 0.690575 0.903908
-v -0.206272 0.585579 1.058354
-v -0.072594 0.596466 1.055489
-v -0.635540 0.542206 0.880570
-v -0.374634 0.609848 0.983597
-v -0.386653 0.841723 0.164797
-v -0.308312 0.878188 0.295056
-v -0.713469 0.588389 -0.045185
-v -0.547788 0.709566 -0.038128
-v -0.156727 0.883619 0.154959
-v -0.491591 0.815543 0.389826
-v -0.561338 0.765950 0.144190
-v -0.658234 0.726492 0.325549
-v -0.659625 0.696692 0.556439
-v -0.762900 0.629336 0.186653
-v -0.775534 0.627157 0.432118
-v -0.826223 0.539814 0.091679
-v -0.796487 0.536619 0.655277
-v -0.878771 0.520606 0.330098
-v 0.031866 0.659950 -0.307373
-v 0.038499 0.764233 -0.156177
-v 0.238466 0.523546 -0.377594
-v -0.002273 0.529644 -0.438766
-v -0.036691 0.854998 0.040798
-v -0.193844 0.812969 -0.066578
-v -0.412956 0.774296 -0.029175
-v -0.176184 0.695940 -0.267685
-v -0.373239 0.718056 -0.171585
-v -0.542305 0.603710 -0.220535
-v -0.137775 0.594498 -0.383949
-v -0.346087 0.614502 -0.316910
-v 0.520928 0.677044 0.169685
-v 0.165627 0.790863 -0.042862
-v 0.357295 0.746858 0.044407
-v 0.274922 0.681236 -0.176248
-v 0.447472 0.631432 -0.083973
-vn -0.007177 -0.999556 0.028920
-vn -0.319730 -0.425017 -0.846837
-vn -0.233390 -0.559758 0.795110
-vn -0.132819 -0.542504 0.829487
-vn -0.231421 -0.670258 0.705123
-vn -0.015352 -0.613724 0.789371
-vn -0.116701 -0.717635 0.686571
-vn -0.002177 -0.677037 0.735946
-vn -0.085706 -0.830187 0.550858
-vn 0.081138 -0.706776 0.702769
-vn 0.229678 -0.620781 0.749586
-vn 0.040650 -0.847296 0.529563
-vn 0.120839 -0.774895 0.620431
-vn 0.070657 -0.882781 0.464441
-vn 0.255298 -0.760179 0.597454
-vn 0.310748 -0.640636 0.702155
-vn 0.387154 -0.602395 0.698020
-vn -0.029709 -0.953436 0.300130
-vn 0.453470 -0.606631 0.652965
-vn -0.003679 -0.969153 0.246431
-vn 0.308360 -0.801223 0.512791
-vn 0.232511 -0.886350 0.400403
-vn 0.584547 -0.506407 0.633922
-vn 0.155451 -0.964960 0.211394
-vn 0.254869 -0.908387 0.331473
-vn 0.460928 -0.757841 0.461760
-vn 0.518096 -0.690485 0.504784
-vn 0.171563 -0.969980 0.172350
-vn 0.351771 -0.893098 0.280417
-vn 0.476254 -0.803421 0.357346
-vn 0.592429 -0.641993 0.486695
-vn 0.631946 -0.571855 0.523093
-vn 0.841378 -0.523160 -0.135598
-vn 0.724124 -0.541096 -0.427621
-vn 0.698537 -0.623841 -0.350526
-vn 0.702841 -0.653512 -0.280958
-vn 0.737255 -0.640112 -0.216129
-vn 0.573704 -0.784772 -0.234512
-vn 0.486840 -0.809328 -0.328595
-vn 0.816620 -0.576943 0.016370
-vn 0.763417 -0.644244 0.046315
-vn 0.696776 -0.715665 -0.048245
-vn 0.563183 -0.821890 -0.085572
-vn 0.746435 -0.657984 0.099459
-vn 0.599782 -0.799123 -0.040787
-vn 0.478409 -0.874289 -0.082121
-vn 0.360713 -0.917933 -0.165183
-vn 0.781996 -0.564686 0.263839
-vn 0.668532 -0.727638 0.153648
-vn 0.597763 -0.798275 0.073726
-vn 0.282839 -0.958062 -0.046034
-vn 0.753619 -0.586750 0.296281
-vn 0.669163 -0.673970 0.313026
-vn 0.637738 -0.723849 0.263312
-vn 0.508096 -0.843889 0.172308
-vn 0.345172 -0.934723 0.084556
-vn 0.151012 -0.985090 -0.082421
-vn 0.546558 -0.791023 0.274877
-vn 0.395183 -0.904540 0.160117
-vn 0.345339 -0.935023 0.080457
-vn 0.700666 -0.520654 0.487838
-vn 0.083303 -0.996458 0.011450
-vn -0.831134 -0.554043 0.047457
-vn -0.769955 -0.607464 0.195337
-vn -0.675428 -0.715197 0.179693
-vn -0.684766 -0.698570 0.207597
-vn -0.713593 -0.555324 0.427083
-vn -0.575927 -0.808563 0.120556
-vn -0.642275 -0.703335 0.304637
-vn -0.651903 -0.647152 0.395243
-vn -0.394394 -0.910621 0.123380
-vn -0.480778 -0.856299 0.188690
-vn -0.468933 -0.832986 0.293660
-vn -0.503464 -0.799423 0.327790
-vn -0.394776 -0.860416 0.322236
-vn -0.467559 -0.741001 0.481981
-vn -0.523535 -0.673477 0.521861
-vn -0.522650 -0.628056 0.576527
-vn -0.288793 -0.943282 0.163761
-vn -0.279555 -0.924843 0.257904
-vn -0.465000 -0.595832 0.654797
-vn -0.465685 -0.562153 0.683463
-vn -0.209745 -0.976133 0.056319
-vn -0.221733 -0.968992 0.109033
-vn -0.325564 -0.804800 0.496290
-vn -0.331748 -0.798621 0.502143
-vn -0.180236 -0.918657 0.351545
-vn -0.306720 -0.691952 0.653548
-vn -0.048901 -0.986910 0.153679
-vn -0.205118 -0.858969 0.469146
-vn -0.307126 -0.502187 0.808382
-vn -0.295000 -0.567657 -0.768597
-vn -0.101671 -0.986807 -0.125999
-vn -0.334374 -0.495742 -0.801520
-vn -0.384164 -0.641090 -0.664395
-vn -0.496158 -0.543121 -0.677382
-vn -0.486653 -0.546955 -0.681183
-vn -0.353607 -0.714766 -0.603384
-vn -0.587796 -0.610407 -0.530942
-vn -0.647207 -0.563025 -0.513932
-vn -0.415409 -0.761644 -0.497327
-vn -0.550110 -0.676549 -0.489552
-vn -0.322934 -0.848436 -0.419368
-vn -0.402319 -0.789111 -0.464158
-vn -0.720862 -0.554274 -0.416099
-vn -0.229398 -0.915307 -0.331044
-vn -0.299848 -0.882724 -0.361786
-vn -0.528426 -0.802023 -0.278433
-vn -0.607416 -0.728661 -0.316384
-vn -0.699024 -0.662699 -0.268691
-vn -0.735807 -0.606368 -0.301506
-vn -0.820800 -0.509981 -0.257306
-vn -0.412703 -0.883469 -0.221717
-vn -0.509098 -0.828719 -0.232474
-vn -0.223234 -0.959009 -0.174549
-vn -0.301137 -0.944406 -0.131957
-vn -0.353508 -0.925939 -0.132923
-vn -0.556209 -0.819833 -0.136035
-vn -0.701163 -0.688662 -0.184704
-vn -0.863507 -0.486971 -0.131205
-vn -0.089481 -0.994875 -0.047093
-vn -0.438514 -0.898369 -0.025249
-vn -0.552232 -0.832315 -0.047861
-vn -0.576695 -0.816837 -0.014147
-vn -0.710788 -0.703392 -0.004409
-vn -0.744560 -0.666201 -0.042506
-vn -0.818486 -0.574419 -0.011101
-vn 0.501435 -0.726840 -0.469326
-vn 0.328684 -0.905322 -0.268995
-vn 0.134796 -0.981259 -0.137695
-vn 0.651751 -0.533695 -0.538879
-vn 0.559170 -0.606471 -0.565263
-vn 0.505012 -0.738393 -0.446920
-vn 0.495174 -0.606289 -0.622267
-vn 0.446211 -0.636325 -0.629275
-vn 0.473292 -0.778442 -0.412338
-vn 0.417274 -0.711073 -0.565914
-vn 0.303845 -0.606768 -0.734514
-vn 0.309054 -0.555211 -0.772157
-vn 0.318559 -0.915850 -0.244416
-vn 0.285694 -0.858488 -0.425883
-vn 0.302522 -0.843652 -0.443544
-vn 0.301186 -0.767861 -0.565399
-vn 0.249230 -0.751667 -0.610641
-vn 0.227527 -0.668704 -0.707860
-vn 0.142961 -0.667637 -0.730632
-vn 0.053385 -0.544052 -0.837351
-vn 0.191625 -0.952897 -0.235090
-vn 0.117699 -0.886641 -0.447230
-vn 0.059994 -0.828135 -0.557309
-vn 0.066127 -0.817767 -0.571738
-vn 0.032752 -0.741954 -0.669651
-vn -0.052508 -0.551579 -0.832469
-vn 0.069539 -0.923325 -0.377670
-vn -0.055519 -0.717136 -0.694719
-vn -0.090808 -0.595277 -0.798373
-vn -0.089085 -0.857777 -0.506244
-vn -0.179809 -0.617257 -0.765939
-vn -0.025598 -0.982309 -0.185507
-vn -0.017304 -0.935090 -0.353989
-vn -0.087436 -0.915209 -0.393379
-vn -0.159429 -0.821577 -0.547351
-vn -0.188258 -0.757503 -0.625098
-vn -0.161135 -0.736134 -0.657376
-vn 0.962302 0.141952 0.232000
-vn 0.924915 -0.102694 0.366042
-vn 0.928539 0.369089 -0.039867
-vn 0.961132 0.265687 -0.075070
-vn 0.978391 0.162932 0.127298
-vn 0.989978 0.135265 0.040584
-vn 0.998249 0.058727 0.007022
-vn 0.996966 -0.062134 0.046891
-vn 0.980309 0.003043 -0.197446
-vn 0.969756 -0.060840 0.236373
-vn 0.980684 -0.107281 0.163553
-vn 0.983464 -0.174057 -0.050026
-vn 0.975470 -0.184928 -0.119417
-vn 0.967153 -0.135001 -0.215385
-vn 0.953908 -0.155603 -0.256608
-vn 0.919261 -0.196808 0.340920
-vn 0.956457 -0.236808 0.170620
-vn 0.948557 -0.282618 0.142711
-vn 0.946348 -0.307542 0.099215
-vn 0.857000 -0.333129 0.393162
-vn 0.865607 -0.387737 0.316834
-vn 0.927349 -0.368666 0.064105
-vn 0.919031 -0.382039 -0.097102
-vn 0.892526 -0.337923 -0.298672
-vn 0.832958 -0.329461 -0.444563
-vn 0.881724 -0.441422 -0.166460
-vn 0.879044 -0.416576 -0.231834
-vn 0.826801 -0.505063 0.247613
-vn 0.873446 -0.475683 0.104008
-vn 0.763876 -0.495019 -0.414065
-vn -0.027686 -0.135637 0.990372
-vn 0.264072 0.245480 0.932741
-vn 0.285413 0.222582 0.932200
-vn 0.368945 0.242132 0.897358
-vn 0.151413 0.063846 0.986406
-vn 0.266142 0.096204 0.959121
-vn 0.460422 0.086068 0.883518
-vn 0.350792 0.016752 0.936304
-vn 0.575339 0.070105 0.814905
-vn 0.360122 -0.039605 0.932064
-vn 0.470459 -0.124866 0.873543
-vn 0.575153 -0.067611 0.815247
-vn 0.068003 -0.191610 0.979113
-vn 0.116015 -0.184864 0.975892
-vn 0.279815 -0.189088 0.941249
-vn 0.613200 -0.121069 0.780594
-vn 0.160503 -0.201760 0.966194
-vn 0.330458 -0.243822 0.911783
-vn 0.450418 -0.221523 0.864899
-vn 0.482043 -0.259577 0.836812
-vn 0.595641 -0.253824 0.762092
-vn 0.614179 -0.280902 0.737481
-vn 0.237021 -0.413968 0.878892
-vn 0.293643 -0.392674 0.871539
-vn 0.397620 -0.419718 0.815926
-vn -0.048763 -0.408632 0.911396
-vn -0.035058 -0.407037 0.912739
-vn 0.606561 -0.430922 0.668125
-vn 0.097482 -0.484321 0.869443
-vn 0.166019 -0.480478 0.861149
-vn 0.421849 -0.455400 0.783999
-vn 0.599019 -0.416619 0.683816
-vn -0.932453 -0.349301 0.092307
-vn -0.787660 0.230422 0.571399
-vn -0.795275 0.213374 0.567458
-vn -0.901219 0.003701 0.433348
-vn -0.773709 0.037765 0.632414
-vn -0.741915 0.026235 0.669981
-vn -0.815582 -0.025688 0.578071
-vn -0.938788 -0.124317 0.321281
-vn -0.912376 -0.095892 0.397963
-vn -0.609794 -0.144025 0.779364
-vn -0.940997 -0.144635 0.305949
-vn -0.846287 -0.155360 0.509570
-vn -0.827677 -0.145134 0.542113
-vn -0.695841 -0.148828 0.702607
-vn -0.640649 -0.169793 0.748825
-vn -0.761949 -0.208307 0.613223
-vn -0.446421 -0.225087 0.866051
-vn -0.897895 -0.280376 0.339372
-vn -0.847483 -0.323676 0.420720
-vn -0.838509 -0.315172 0.444488
-vn -0.747024 -0.352177 0.563850
-vn -0.737497 -0.304301 0.602909
-vn -0.614164 -0.309426 0.725988
-vn -0.552559 -0.372819 0.745442
-vn -0.485597 -0.342413 0.804331
-vn -0.911820 -0.390937 0.125508
-vn -0.888406 -0.400705 0.223986
-vn -0.817651 -0.480720 0.316789
-vn -0.673235 -0.487357 0.556091
-vn -0.812823 -0.488236 0.317718
-vn -0.673730 -0.484073 0.558356
-vn -0.554087 -0.435708 0.709328
-vn -0.322527 -0.445829 0.834993
-vn -0.572934 -0.082232 -0.815466
-vn -0.447489 -0.297693 -0.843287
-vn -0.793878 0.203175 -0.573130
-vn -0.830630 0.216144 -0.513163
-vn -0.898075 0.152664 -0.412499
-vn -0.702717 0.073230 -0.707691
-vn -0.781749 0.124682 -0.611002
-vn -0.910483 -0.002536 -0.413539
-vn -0.830522 -0.026520 -0.556353
-vn -0.902583 -0.029756 -0.429486
-vn -0.736524 -0.092549 -0.670050
-vn -0.785479 -0.099897 -0.610773
-vn -0.906915 -0.127557 -0.401541
-vn -0.601579 -0.159488 -0.782730
-vn -0.662991 -0.173992 -0.728127
-vn -0.793402 -0.220199 -0.567474
-vn -0.961871 -0.161355 -0.220837
-vn -0.687814 -0.248620 -0.681983
-vn -0.760554 -0.272496 -0.589325
-vn -0.879741 -0.208415 -0.427339
-vn -0.478229 -0.295092 -0.827175
-vn -0.750380 -0.364474 -0.551442
-vn -0.871089 -0.340109 -0.354301
-vn -0.934393 -0.285049 -0.213676
-vn -0.932764 -0.344401 -0.106483
-vn -0.576104 -0.428113 -0.696293
-vn -0.589062 -0.423174 -0.688425
-vn -0.813839 -0.408823 -0.412954
-vn -0.845901 -0.387111 -0.366874
-vn -0.670457 -0.449065 -0.590616
-vn 0.289089 0.418210 -0.861120
-vn 0.399393 0.239979 -0.884814
-vn 0.349989 0.203741 -0.914329
-vn 0.237453 0.210390 -0.948342
-vn 0.174143 0.156766 -0.972162
-vn 0.517700 0.010419 -0.855498
-vn 0.185650 0.010871 -0.982556
-vn 0.470526 -0.037599 -0.881585
-vn 0.358782 -0.024573 -0.933098
-vn 0.360894 -0.026694 -0.932225
-vn 0.198715 -0.006957 -0.980033
-vn 0.597899 -0.205507 -0.774780
-vn 0.494245 -0.170705 -0.852398
-vn 0.316700 -0.170581 -0.933061
-vn 0.163756 -0.187659 -0.968488
-vn 0.176612 -0.175826 -0.968449
-vn 0.002397 -0.190377 -0.981708
-vn 0.398965 -0.256208 -0.880445
-vn 0.389106 -0.324884 -0.862002
-vn -0.059272 -0.310496 -0.948725
-vn 0.209288 -0.398430 -0.893002
-vn -0.085954 -0.324501 -0.941972
-vn -0.192909 -0.302536 -0.933412
-vn 0.638787 -0.424801 -0.641479
-vn 0.543126 -0.423364 -0.725105
-vn 0.534372 -0.415200 -0.736244
-vn 0.454135 -0.410274 -0.790846
-vn 0.178755 -0.441647 -0.879201
-vn 0.141673 -0.455393 -0.878946
-vn -0.116451 -0.455930 -0.882364
-vn 0.457358 0.343594 0.820224
-vn 0.502176 0.337790 0.796064
-vn 0.570620 0.433030 0.697766
-vn 0.611128 0.120182 0.782355
-vn 0.612881 0.190425 0.766887
-vn 0.662087 0.414752 0.624196
-vn 0.653902 0.487907 0.578238
-vn 0.714769 0.265298 0.647088
-vn 0.714403 0.331886 0.616019
-vn 0.733582 0.531307 0.423758
-vn 0.756707 0.066752 0.650338
-vn 0.769291 0.156567 0.619418
-vn 0.769983 -0.083271 0.632607
-vn 0.778013 0.001675 0.628246
-vn 0.825516 0.325349 0.461163
-vn 0.835124 0.359599 0.416240
-vn 0.788466 -0.165424 0.592415
-vn 0.887772 0.099578 0.449383
-vn 0.855965 0.165246 0.489917
-vn 0.800261 -0.181836 0.571418
-vn 0.882151 0.346042 0.319477
-vn 0.874912 0.456294 0.162248
-vn 0.877988 0.455734 0.146434
-vn 0.901718 0.087038 0.423472
-vn 0.948775 0.158626 0.273248
-vn 0.764810 -0.384279 0.517103
-vn 0.802941 -0.334215 0.493544
-vn 0.921356 -0.095090 0.376911
-vn 0.907811 0.408065 0.096759
-vn -0.644354 0.256753 0.720338
-vn -0.645728 0.083779 0.758958
-vn -0.576554 0.009330 0.817006
-vn -0.664211 0.475138 0.577120
-vn -0.601188 0.332131 0.726816
-vn -0.630126 0.156963 0.760463
-vn -0.501259 0.381879 0.776472
-vn -0.475437 0.418148 0.774023
-vn -0.403715 0.455862 0.793224
-vn -0.365045 0.501140 0.784602
-vn -0.499631 0.029006 0.865752
-vn -0.460063 0.122202 0.879436
-vn -0.237735 0.517154 0.822213
-vn -0.405702 0.172312 0.897616
-vn -0.397689 0.195447 0.896462
-vn -0.273801 0.285368 0.918476
-vn -0.267749 0.321565 0.908244
-vn -0.183457 0.420723 0.888446
-vn -0.114718 0.423223 0.898734
-vn -0.397153 -0.131490 0.908284
-vn -0.417281 -0.205442 0.885252
-vn -0.155360 0.221368 0.962735
-vn -0.034302 0.349662 0.936248
-vn -0.236657 -0.068076 0.969205
-vn -0.222499 0.018559 0.974756
-vn -0.124234 0.106659 0.986504
-vn 0.024646 0.341578 0.939530
-vn 0.151468 0.469146 0.870034
-vn 0.070635 0.275453 0.958716
-vn -0.256122 -0.323361 0.910955
-vn -0.204958 -0.308384 0.928920
-vn -0.158992 -0.153919 0.975208
-vn -0.018220 0.076708 0.996887
-vn 0.047218 0.102923 0.993568
-vn 0.227629 0.444556 0.866346
-vn -0.964050 0.031899 -0.263801
-vn -0.943620 -0.325360 -0.061007
-vn -0.797436 0.421213 -0.432060
-vn -0.833080 0.374219 -0.407354
-vn -0.924892 0.204460 -0.320579
-vn -0.876549 0.354282 -0.325801
-vn -0.881673 0.409674 -0.234136
-vn -0.905882 0.388739 -0.168108
-vn -0.957394 0.163433 -0.238090
-vn -0.970464 0.182987 -0.157208
-vn -0.962475 0.247849 -0.110514
-vn -0.889609 0.456402 -0.017134
-vn -0.884389 0.466601 -0.011856
-vn -0.983743 -0.086097 -0.157597
-vn -0.985014 -0.066738 -0.159040
-vn -0.995630 0.042546 -0.083131
-vn -0.960658 0.276792 0.022850
-vn -0.953676 0.298811 0.034847
-vn -0.987438 -0.145836 -0.060811
-vn -0.902652 0.367032 0.224736
-vn -0.879214 0.437656 0.188252
-vn -0.996174 0.043693 0.075682
-vn -0.989094 0.091132 0.115705
-vn -0.900140 0.337863 0.274948
-vn -0.991256 -0.103102 0.082349
-vn -0.845756 0.388211 0.366045
-vn -0.966075 0.104414 0.236213
-vn -0.935260 0.170694 0.310084
-vn -0.973583 -0.168754 0.153813
-vn -0.908358 0.134511 0.395971
-vn -0.779801 0.356846 0.514364
-vn -0.732858 0.433950 0.524030
-vn 0.064054 0.173375 -0.982771
-vn 0.012007 0.046033 -0.998868
-vn -0.079928 -0.066060 -0.994609
-vn -0.279003 -0.412592 -0.867136
-vn 0.204732 0.420628 -0.883831
-vn 0.182233 0.394319 -0.900724
-vn 0.022696 0.357254 -0.933731
-vn -0.083418 0.485413 -0.870296
-vn -0.009511 0.273908 -0.961709
-vn -0.151212 0.470464 -0.869367
-vn -0.074321 -0.006974 -0.997210
-vn -0.142936 0.242941 -0.959453
-vn -0.202004 0.289177 -0.935719
-vn -0.216922 0.370606 -0.903103
-vn -0.178703 0.094893 -0.979316
-vn -0.356024 0.354493 -0.864628
-vn -0.411782 0.430964 -0.802936
-vn -0.302696 0.084284 -0.949353
-vn -0.334733 0.232125 -0.913275
-vn -0.378617 0.259917 -0.888309
-vn -0.492900 0.422089 -0.760849
-vn -0.262651 -0.164556 -0.950755
-vn -0.366434 0.017172 -0.930286
-vn -0.458382 0.229974 -0.858486
-vn -0.526519 0.283663 -0.801445
-vn -0.534007 0.460877 -0.708822
-vn -0.343754 -0.132643 -0.929644
-vn -0.373368 -0.066853 -0.925271
-vn -0.489662 0.111242 -0.864787
-vn -0.652724 0.429219 -0.624277
-vn -0.591389 0.063970 -0.803845
-vn -0.638450 0.101514 -0.762940
-vn -0.620351 0.223234 -0.751885
-vn -0.706180 0.314999 -0.634102
-vn -0.684698 0.391112 -0.614996
-vn 0.957837 0.106778 -0.266734
-vn 0.831014 -0.310625 -0.461440
-vn 0.880678 0.452923 -0.138803
-vn 0.947033 0.249768 -0.201852
-vn 0.918536 0.309704 -0.245714
-vn 0.791615 0.518930 -0.322579
-vn 0.870793 0.324229 -0.369586
-vn 0.843577 0.376757 -0.382665
-vn 0.908700 0.113852 -0.401624
-vn 0.871095 0.216942 -0.440602
-vn 0.735500 0.442008 -0.513487
-vn 0.694387 0.516044 -0.501523
-vn 0.823824 0.212689 -0.525430
-vn 0.893992 -0.120096 -0.431689
-vn 0.886356 0.018727 -0.462626
-vn 0.744621 0.274630 -0.608374
-vn 0.727605 0.303589 -0.615162
-vn 0.594812 0.511472 -0.620157
-vn 0.867476 -0.167026 -0.468601
-vn 0.820594 0.043842 -0.569827
-vn 0.635723 0.337112 -0.694414
-vn 0.605400 0.371856 -0.703714
-vn 0.781556 0.016399 -0.623619
-vn 0.783185 -0.147050 -0.604151
-vn 0.710012 0.052606 -0.702222
-vn 0.703229 0.080692 -0.706370
-vn 0.500187 0.374830 -0.780587
-vn 0.602933 0.184689 -0.776120
-vn 0.729590 -0.290639 -0.619053
-vn 0.727176 -0.217014 -0.651244
-vn 0.653894 -0.171575 -0.736875
-vn 0.660767 -0.023171 -0.750233
-vn 0.525298 0.173452 -0.833052
-vn 0.452895 0.241324 -0.858283
-vn 0.090208 0.967184 0.237523
-vn 0.153807 0.873325 0.462219
-vn 0.152214 0.981439 0.116652
-vn 0.144919 0.988431 0.044763
-vn 0.216638 0.975917 -0.025558
-vn 0.199116 0.921020 0.334776
-vn 0.358440 0.921544 0.149258
-vn 0.384300 0.920485 0.070857
-vn 0.337299 0.890702 0.304762
-vn 0.375168 0.898472 0.228030
-vn 0.509624 0.859391 0.041606
-vn 0.226582 0.834807 0.501755
-vn 0.374814 0.825817 0.421357
-vn 0.544942 0.813818 0.201836
-vn 0.559474 0.819177 0.126249
-vn 0.238497 0.768912 0.593205
-vn 0.415877 0.794198 0.443052
-vn 0.495744 0.758113 0.423677
-vn 0.582552 0.747425 0.319357
-vn 0.591889 0.755693 0.280349
-vn 0.713327 0.698108 0.061728
-vn 0.722449 0.690419 0.037274
-vn 0.352971 0.612843 0.706990
-vn 0.374972 0.690241 0.618840
-vn 0.378940 0.691248 0.615289
-vn 0.704443 0.676945 0.213321
-vn 0.551277 0.619634 0.558701
-vn 0.569091 0.651756 0.501348
-vn 0.634420 0.642742 0.429411
-vn 0.812942 0.582101 0.016836
-vn 0.375371 0.572378 0.729027
-vn 0.724236 0.563483 0.397454
-vn 0.755358 0.592764 0.279401
-vn 0.346950 0.475773 0.808249
-vn 0.519321 0.529313 0.670919
-vn 0.566197 0.577165 0.588474
-vn -0.261774 0.934041 0.242985
-vn -0.434642 0.830531 0.348287
-vn -0.058096 0.969405 0.238494
-vn 0.016337 0.965657 0.259305
-vn -0.146836 0.949445 0.277476
-vn 0.016549 0.902494 0.430384
-vn 0.091137 0.873857 0.477565
-vn -0.353299 0.855682 0.378139
-vn -0.139624 0.877875 0.458084
-vn -0.294192 0.834266 0.466316
-vn -0.162813 0.860455 0.482814
-vn -0.104231 0.783947 0.612015
-vn -0.049805 0.776741 0.627848
-vn 0.017517 0.785896 0.618110
-vn -0.520725 0.721794 0.455915
-vn -0.411941 0.699523 0.583929
-vn -0.338745 0.761009 0.553279
-vn -0.177426 0.746071 0.641792
-vn 0.134565 0.728926 0.671237
-vn 0.149007 0.662291 0.734280
-vn -0.419871 0.641242 0.642275
-vn -0.371830 0.618223 0.692490
-vn -0.231656 0.642609 0.730335
-vn -0.622035 0.536024 0.570746
-vn -0.508619 0.570823 0.644567
-vn -0.031522 0.597825 0.801007
-vn 0.081280 0.591984 0.801841
-vn -0.181588 0.587682 0.788451
-vn -0.074788 0.580151 0.811068
-vn -0.635288 0.603507 -0.481860
-vn -0.068997 0.996967 -0.036007
-vn -0.117047 0.992283 0.040922
-vn -0.286633 0.954948 0.076915
-vn -0.312874 0.938454 0.146335
-vn -0.389392 0.918032 -0.074781
-vn -0.347457 0.936191 -0.053113
-vn -0.455626 0.888762 -0.050065
-vn -0.500597 0.858937 0.107845
-vn -0.463757 0.872372 0.154583
-vn -0.470419 0.830657 0.297851
-vn -0.558386 0.779926 -0.282702
-vn -0.578692 0.773020 -0.259916
-vn -0.575015 0.807501 -0.131531
-vn -0.588542 0.802258 0.100000
-vn -0.633352 0.727604 -0.263549
-vn -0.660352 0.750459 -0.027326
-vn -0.615924 0.721684 0.315925
-vn -0.607276 0.676219 0.417065
-vn -0.703407 0.710158 -0.029900
-vn -0.667439 0.709767 0.225291
-vn -0.716805 0.582031 -0.383967
-vn -0.750700 0.650905 -0.113015
-vn -0.762942 0.637716 0.106007
-vn -0.751288 0.633127 0.186326
-vn -0.637982 0.631895 0.440100
-vn -0.732988 0.566827 -0.376080
-vn -0.778713 0.584458 0.228066
-vn -0.751082 0.539371 0.380729
-vn -0.811604 0.535009 -0.234658
-vn -0.793748 0.594836 -0.127020
-vn -0.851586 0.523640 -0.024554
-vn -0.757028 0.524913 0.389070
-vn 0.198811 0.669549 -0.715666
-vn -0.011665 0.998626 -0.051090
-vn -0.183590 0.969720 -0.161053
-vn -0.053368 0.953921 -0.295273
-vn -0.183771 0.944995 -0.270578
-vn 0.034311 0.912595 -0.407422
-vn -0.214645 0.931205 -0.294592
-vn -0.357659 0.896059 -0.262981
-vn -0.396976 0.868111 -0.297980
-vn -0.013097 0.863734 -0.503778
-vn -0.226097 0.882826 -0.411701
-vn 0.033761 0.822026 -0.568448
-vn -0.152065 0.848394 -0.507055
-vn -0.367762 0.825312 -0.428498
-vn -0.397330 0.788471 -0.469513
-vn -0.517498 0.733245 -0.441076
-vn 0.049230 0.702752 -0.709729
-vn 0.005268 0.754356 -0.656445
-vn -0.201766 0.779439 -0.593098
-vn -0.329418 0.738768 -0.587967
-vn -0.569318 0.653654 -0.498611
-vn -0.181690 0.710445 -0.679895
-vn -0.138401 0.707590 -0.692937
-vn 0.210903 0.602230 -0.769960
-vn -0.023349 0.616458 -0.787041
-vn -0.283009 0.626495 -0.726230
-vn -0.358359 0.665110 -0.655139
-vn 0.161473 0.549415 -0.819799
-vn -0.014893 0.573977 -0.818736
-vn -0.283552 0.562005 -0.777013
-vn -0.470300 0.614298 -0.633605
-vn 0.338827 0.940749 -0.013696
-vn 0.682745 0.728669 -0.053860
-vn 0.060746 0.981389 -0.182172
-vn 0.152559 0.966355 -0.207083
-vn 0.191438 0.945850 -0.262142
-vn 0.137922 0.918498 -0.370591
-vn 0.414901 0.894838 -0.164685
-vn 0.328842 0.906386 -0.265194
-vn 0.536851 0.840978 -0.067427
-vn 0.485704 0.860271 -0.155003
-vn 0.370802 0.843228 -0.389196
-vn 0.253595 0.838869 -0.481652
-vn 0.231950 0.795953 -0.559159
-vn 0.446534 0.798313 -0.404110
-vn 0.559796 0.772051 -0.300941
-vn 0.272103 0.733049 -0.623378
-vn 0.693478 0.677469 -0.245200
-vn 0.621983 0.719286 -0.309461
-vn 0.482165 0.703752 -0.521776
-vn 0.420587 0.675740 -0.605378
-vn 0.603776 0.641288 -0.473503
-vn 0.455087 0.585197 -0.671149
-vn 0.853022 0.500753 -0.146969
-vn 0.790760 0.554671 -0.258916
-vn 0.659460 0.543693 -0.519144
-vn 0.387042 0.500531 -0.774382
-vn 0.389305 0.500543 -0.773239
-usemtl None.002
-s off
-f 1//1 2//1 3//1
-f 4//2 5//2 6//2
-f 10//3 11//3 7//3
-f 11//4 16//4 7//4
-f 10//5 12//5 11//5
-f 11//6 17//6 16//6
-f 12//7 13//7 11//7
-f 13//8 17//8 11//8
-f 12//9 14//9 13//9
-f 13//10 18//10 17//10
-f 18//11 19//11 17//11
-f 14//12 20//12 13//12
-f 13//13 20//13 18//13
-f 21//14 20//14 14//14
-f 20//15 22//15 18//15
-f 18//16 22//16 19//16
-f 22//17 23//17 19//17
-f 15//18 21//18 14//18
-f 22//19 24//19 23//19
-f 15//20 2//20 21//20
-f 20//21 25//21 22//21
-f 21//22 25//22 20//22
-f 24//23 26//23 23//23
-f 2//24 27//24 21//24
-f 27//25 25//25 21//25
-f 25//26 28//26 22//26
-f 22//27 28//27 24//27
-f 2//28 29//28 27//28
-f 27//29 30//29 25//29
-f 30//30 28//30 25//30
-f 28//31 31//31 24//31
-f 24//32 31//32 26//32
-f 32//33 33//33 34//33
-f 34//34 37//34 9//34
-f 34//35 38//35 37//35
-f 34//36 39//36 38//36
-f 33//37 39//37 34//37
-f 39//38 40//38 38//38
-f 40//39 41//39 38//39
-f 32//40 35//40 33//40
-f 35//41 42//41 33//41
-f 33//42 42//42 39//42
-f 39//43 43//43 40//43
-f 44//44 42//44 35//44
-f 42//45 43//45 39//45
-f 43//46 45//46 40//46
-f 45//47 46//47 40//47
-f 36//48 44//48 35//48
-f 44//49 47//49 42//49
-f 47//50 43//50 42//50
-f 45//51 29//51 46//51
-f 36//52 31//52 44//52
-f 31//53 28//53 44//53
-f 44//54 28//54 47//54
-f 47//55 30//55 43//55
-f 43//56 29//56 45//56
-f 46//57 29//57 1//57
-f 28//58 30//58 47//58
-f 30//59 27//59 43//59
-f 43//60 27//60 29//60
-f 36//61 26//61 31//61
-f 2//62 1//62 29//62
-f 48//63 49//63 50//63
-f 48//64 53//64 49//64
-f 54//65 55//65 48//65
-f 55//66 53//66 48//66
-f 53//67 57//67 56//67
-f 58//68 55//68 54//68
-f 55//69 59//69 53//69
-f 59//70 57//70 53//70
-f 52//71 61//71 58//71
-f 58//72 61//72 55//72
-f 61//73 62//73 55//73
-f 55//74 62//74 59//74
-f 61//75 63//75 62//75
-f 62//76 64//76 59//76
-f 59//77 64//77 57//77
-f 57//78 64//78 60//78
-f 52//79 15//79 61//79
-f 15//80 63//80 61//80
-f 64//81 10//81 60//81
-f 60//82 10//82 65//82
-f 51//83 3//83 52//83
-f 3//84 15//84 52//84
-f 63//85 12//85 62//85
-f 62//86 12//86 64//86
-f 15//87 14//87 63//87
-f 12//88 10//88 64//88
-f 2//89 15//89 3//89
-f 14//90 12//90 63//90
-f 10//91 7//91 65//91
-f 66//92 67//92 4//92
-f 1//93 51//93 68//93
-f 4//94 67//94 5//94
-f 66//95 70//95 67//95
-f 67//96 70//96 5//96
-f 5//97 70//97 71//97
-f 72//98 70//98 66//98
-f 70//99 73//99 71//99
-f 73//100 74//100 71//100
-f 72//101 75//101 70//101
-f 75//102 73//102 70//102
-f 69//103 76//103 72//103
-f 72//104 76//104 75//104
-f 73//105 77//105 74//105
-f 68//106 78//106 69//106
-f 69//107 78//107 76//107
-f 76//108 79//108 75//108
-f 75//109 79//109 73//109
-f 79//110 80//110 73//110
-f 73//111 80//111 77//111
-f 80//112 81//112 77//112
-f 78//113 82//113 76//113
-f 82//114 79//114 76//114
-f 68//115 51//115 78//115
-f 51//116 52//116 78//116
-f 78//117 52//117 82//117
-f 82//118 83//118 79//118
-f 79//119 83//119 80//119
-f 80//120 50//120 81//120
-f 1//121 3//121 51//121
-f 52//122 58//122 82//122
-f 82//123 58//123 83//123
-f 58//124 54//124 83//124
-f 54//125 48//125 83//125
-f 83//126 48//126 80//126
-f 48//127 50//127 80//127
-f 38//128 84//128 37//128
-f 46//129 85//129 40//129
-f 1//130 86//130 46//130
-f 37//131 87//131 9//131
-f 37//132 88//132 87//132
-f 84//133 88//133 37//133
-f 88//134 89//134 87//134
-f 88//135 90//135 89//135
-f 38//136 41//136 84//136
-f 84//137 90//137 88//137
-f 90//138 91//138 89//138
-f 91//139 92//139 89//139
-f 40//140 85//140 41//140
-f 85//141 93//141 41//141
-f 41//142 93//142 84//142
-f 84//143 93//143 90//143
-f 93//144 94//144 90//144
-f 90//145 94//145 91//145
-f 94//146 95//146 91//146
-f 95//147 96//147 91//147
-f 46//148 86//148 85//148
-f 85//149 97//149 93//149
-f 97//150 98//150 93//150
-f 93//151 98//151 94//151
-f 94//152 98//152 95//152
-f 95//153 4//153 96//153
-f 86//154 97//154 85//154
-f 98//155 99//155 95//155
-f 99//156 4//156 95//156
-f 97//157 69//157 98//157
-f 99//158 66//158 4//158
-f 1//159 68//159 86//159
-f 86//160 68//160 97//160
-f 68//161 69//161 97//161
-f 69//162 72//162 98//162
-f 72//163 66//163 98//163
-f 98//164 66//164 99//164
-f 100//165 101//165 102//165
-f 103//166 104//166 100//166
-f 106//167 107//167 108//167
-f 106//168 109//168 107//168
-f 102//169 101//169 106//169
-f 101//170 109//170 106//170
-f 101//171 110//171 109//171
-f 101//172 112//172 110//172
-f 110//173 111//173 109//173
-f 100//174 104//174 101//174
-f 104//175 112//175 101//175
-f 112//176 114//176 110//176
-f 114//177 115//177 110//177
-f 110//178 115//178 111//178
-f 115//179 113//179 111//179
-f 103//180 105//180 104//180
-f 104//181 105//181 112//181
-f 105//182 116//182 112//182
-f 116//183 114//183 112//183
-f 103//184 36//184 105//184
-f 36//185 116//185 105//185
-f 116//186 32//186 114//186
-f 114//187 32//187 115//187
-f 115//188 117//188 113//188
-f 113//189 117//189 9//189
-f 32//190 34//190 115//190
-f 34//191 117//191 115//191
-f 36//192 35//192 116//192
-f 35//193 32//193 116//193
-f 34//194 9//194 117//194
-f 121//195 122//195 123//195
-f 118//196 120//196 119//196
-f 120//197 125//197 119//197
-f 119//198 125//198 124//198
-f 122//199 126//199 120//199
-f 120//200 126//200 125//200
-f 125//201 127//201 124//201
-f 126//202 127//202 125//202
-f 127//203 128//203 124//203
-f 126//204 129//204 127//204
-f 129//205 130//205 127//205
-f 127//206 130//206 128//206
-f 121//207 131//207 122//207
-f 122//208 131//208 126//208
-f 126//209 132//209 129//209
-f 130//210 133//210 128//210
-f 131//211 132//211 126//211
-f 132//212 134//212 129//212
-f 129//213 134//213 130//213
-f 134//214 135//214 130//214
-f 130//215 135//215 133//215
-f 135//216 136//216 133//216
-f 131//217 19//217 132//217
-f 132//218 19//218 134//218
-f 19//219 135//219 134//219
-f 7//220 16//220 121//220
-f 121//221 16//221 131//221
-f 135//222 23//222 136//222
-f 16//223 17//223 131//223
-f 131//224 17//224 19//224
-f 19//225 23//225 135//225
-f 23//226 26//226 136//226
-f 50//227 140//227 139//227
-f 137//228 142//228 141//228
-f 137//229 138//229 142//229
-f 144//230 143//230 138//230
-f 138//231 145//231 142//231
-f 145//232 146//232 142//232
-f 143//233 145//233 138//233
-f 148//234 149//234 144//234
-f 144//235 149//235 143//235
-f 146//236 150//236 147//236
-f 148//237 140//237 149//237
-f 149//238 151//238 143//238
-f 143//239 151//239 145//239
-f 145//240 152//240 146//240
-f 152//241 150//241 146//241
-f 151//242 152//242 145//242
-f 150//243 8//243 147//243
-f 140//244 153//244 149//244
-f 153//245 56//245 149//245
-f 149//246 56//246 151//246
-f 56//247 154//247 151//247
-f 151//248 154//248 152//248
-f 152//249 154//249 150//249
-f 154//250 65//250 150//250
-f 150//251 65//251 8//251
-f 50//252 49//252 140//252
-f 140//253 49//253 153//253
-f 49//254 56//254 153//254
-f 56//255 60//255 154//255
-f 49//256 53//256 56//256
-f 56//257 57//257 60//257
-f 154//258 60//258 65//258
-f 65//259 7//259 8//259
-f 155//260 156//260 157//260
-f 6//261 5//261 155//261
-f 162//262 163//262 160//262
-f 163//263 161//263 160//263
-f 163//264 164//264 161//264
-f 156//265 165//265 162//265
-f 162//266 165//266 163//266
-f 163//267 166//267 164//267
-f 165//268 167//268 163//268
-f 167//269 166//269 163//269
-f 156//270 168//270 165//270
-f 168//271 167//271 165//271
-f 167//272 169//272 166//272
-f 155//273 158//273 156//273
-f 158//274 168//274 156//274
-f 168//275 170//275 167//275
-f 169//276 171//276 166//276
-f 158//277 172//277 168//277
-f 172//278 170//278 168//278
-f 167//279 170//279 169//279
-f 155//280 5//280 158//280
-f 172//281 74//281 170//281
-f 170//282 81//282 169//282
-f 169//283 81//283 171//283
-f 81//284 50//284 171//284
-f 5//285 71//285 158//285
-f 158//286 71//286 172//286
-f 74//287 77//287 170//287
-f 170//288 77//288 81//288
-f 172//289 71//289 74//289
-f 173//290 174//290 175//290
-f 173//291 178//291 174//291
-f 178//292 179//292 174//292
-f 179//293 180//293 174//293
-f 179//294 181//294 180//294
-f 176//295 177//295 178//295
-f 179//296 182//296 181//296
-f 177//297 183//297 178//297
-f 183//298 184//298 178//298
-f 178//299 184//299 179//299
-f 179//300 184//300 182//300
-f 185//301 186//301 177//301
-f 177//302 186//302 183//302
-f 183//303 187//303 184//303
-f 184//304 187//304 182//304
-f 187//305 188//305 182//305
-f 188//306 189//306 182//306
-f 186//307 187//307 183//307
-f 186//308 92//308 187//308
-f 188//309 96//309 189//309
-f 92//310 188//310 187//310
-f 96//311 190//311 189//311
-f 189//312 190//312 6//312
-f 9//313 87//313 185//313
-f 87//314 89//314 185//314
-f 185//315 89//315 186//315
-f 186//316 89//316 92//316
-f 92//317 91//317 188//317
-f 188//318 91//318 96//318
-f 96//319 4//319 190//319
-f 124//320 191//320 119//320
-f 124//321 193//321 191//321
-f 191//322 193//322 192//322
-f 128//323 194//323 124//323
-f 124//324 194//324 193//324
-f 193//325 195//325 192//325
-f 192//326 195//326 196//326
-f 194//327 197//327 193//327
-f 197//328 195//328 193//328
-f 195//329 198//329 196//329
-f 128//330 199//330 194//330
-f 194//331 199//331 197//331
-f 133//332 200//332 128//332
-f 200//333 199//333 128//333
-f 197//334 201//334 195//334
-f 195//335 201//335 198//335
-f 136//336 200//336 133//336
-f 200//337 201//337 199//337
-f 199//338 201//338 197//338
-f 136//339 103//339 200//339
-f 201//340 102//340 198//340
-f 198//341 102//341 202//341
-f 102//342 108//342 202//342
-f 200//343 100//343 201//343
-f 100//344 102//344 201//344
-f 26//345 36//345 136//345
-f 36//346 103//346 136//346
-f 103//347 100//347 200//347
-f 102//348 106//348 108//348
-f 142//349 203//349 141//349
-f 146//350 204//350 142//350
-f 147//351 204//351 146//351
-f 141//352 205//352 206//352
-f 141//353 203//353 205//353
-f 142//354 204//354 203//354
-f 203//355 208//355 205//355
-f 205//356 208//356 207//356
-f 208//357 209//357 207//357
-f 209//358 210//358 207//358
-f 147//359 211//359 204//359
-f 211//360 203//360 204//360
-f 209//361 212//361 210//361
-f 211//362 213//362 203//362
-f 203//363 213//363 208//363
-f 213//364 214//364 208//364
-f 208//365 214//365 209//365
-f 209//366 214//366 212//366
-f 214//367 215//367 212//367
-f 147//368 216//368 211//368
-f 8//369 216//369 147//369
-f 213//370 217//370 214//370
-f 214//371 217//371 215//371
-f 216//372 123//372 211//372
-f 211//373 123//373 213//373
-f 123//374 217//374 213//374
-f 217//375 118//375 215//375
-f 118//376 218//376 215//376
-f 120//377 118//377 217//377
-f 8//378 7//378 216//378
-f 7//379 121//379 216//379
-f 216//380 121//380 123//380
-f 123//381 122//381 217//381
-f 122//382 120//382 217//382
-f 118//383 119//383 218//383
-f 166//384 219//384 164//384
-f 50//385 139//385 171//385
-f 160//386 220//386 159//386
-f 161//387 220//387 160//387
-f 164//388 222//388 161//388
-f 161//389 222//389 220//389
-f 222//390 221//390 220//390
-f 222//391 223//391 221//391
-f 164//392 219//392 222//392
-f 219//393 224//393 222//393
-f 224//394 223//394 222//394
-f 223//395 225//395 221//395
-f 225//396 226//396 221//396
-f 171//397 227//397 166//397
-f 166//398 227//398 219//398
-f 227//399 224//399 219//399
-f 224//400 228//400 223//400
-f 223//401 228//401 225//401
-f 171//402 139//402 227//402
-f 228//403 229//403 225//403
-f 225//404 229//404 226//404
-f 227//405 148//405 224//405
-f 148//406 228//406 224//406
-f 228//407 137//407 229//407
-f 139//408 148//408 227//408
-f 137//409 230//409 229//409
-f 148//410 144//410 228//410
-f 144//411 137//411 228//411
-f 139//412 140//412 148//412
-f 144//413 138//413 137//413
-f 137//414 141//414 230//414
-f 141//415 206//415 230//415
-f 181//416 231//416 180//416
-f 182//417 231//417 181//417
-f 189//418 232//418 182//418
-f 4//419 6//419 190//419
-f 174//420 233//420 175//420
-f 174//421 180//421 233//421
-f 180//422 234//422 233//422
-f 234//423 235//423 233//423
-f 231//424 234//424 180//424
-f 234//425 236//425 235//425
-f 182//426 232//426 231//426
-f 231//427 237//427 234//427
-f 237//428 238//428 234//428
-f 238//429 236//429 234//429
-f 232//430 237//430 231//430
-f 238//431 239//431 236//431
-f 239//432 240//432 236//432
-f 232//433 241//433 237//433
-f 237//434 241//434 238//434
-f 241//435 239//435 238//435
-f 239//436 242//436 240//436
-f 6//437 232//437 189//437
-f 232//438 157//438 241//438
-f 241//439 243//439 239//439
-f 243//440 242//440 239//440
-f 242//441 244//441 240//441
-f 6//442 155//442 232//442
-f 155//443 157//443 232//443
-f 157//444 243//444 241//444
-f 242//445 159//445 244//445
-f 157//446 156//446 243//446
-f 156//447 162//447 243//447
-f 243//448 162//448 242//448
-f 162//449 160//449 242//449
-f 242//450 160//450 159//450
-f 111//451 245//451 109//451
-f 9//452 246//452 113//452
-f 107//453 247//453 108//453
-f 109//454 245//454 107//454
-f 245//455 247//455 107//455
-f 248//456 249//456 247//456
-f 245//457 250//457 247//457
-f 247//458 250//458 248//458
-f 111//459 251//459 245//459
-f 245//460 251//460 250//460
-f 250//461 252//461 248//461
-f 248//462 252//462 249//462
-f 251//463 253//463 250//463
-f 113//464 255//464 111//464
-f 111//465 255//465 251//465
-f 253//466 256//466 250//466
-f 256//467 252//467 250//467
-f 252//468 257//468 254//468
-f 113//469 246//469 255//469
-f 255//470 253//470 251//470
-f 256//471 258//471 252//471
-f 258//472 257//472 252//472
-f 255//473 259//473 253//473
-f 246//474 259//474 255//474
-f 259//475 176//475 253//475
-f 253//476 176//476 256//476
-f 258//477 173//477 257//477
-f 176//478 258//478 256//478
-f 9//479 185//479 246//479
-f 246//480 185//480 259//480
-f 185//481 177//481 259//481
-f 259//482 177//482 176//482
-f 176//483 178//483 258//483
-f 178//484 173//484 258//484
-f 260//485 261//485 262//485
-f 263//486 264//486 260//486
-f 261//487 267//487 262//487
-f 262//488 267//488 266//488
-f 267//489 268//489 266//489
-f 260//490 264//490 261//490
-f 261//491 269//491 267//491
-f 269//492 270//492 267//492
-f 264//493 271//493 261//493
-f 271//494 269//494 261//494
-f 269//495 272//495 270//495
-f 263//496 265//496 264//496
-f 265//497 271//497 264//497
-f 271//498 273//498 269//498
-f 269//499 273//499 272//499
-f 263//500 274//500 265//500
-f 265//501 275//501 271//501
-f 275//502 276//502 271//502
-f 276//503 277//503 271//503
-f 271//504 277//504 273//504
-f 273//505 202//505 272//505
-f 272//506 202//506 278//506
-f 218//507 279//507 274//507
-f 274//508 279//508 265//508
-f 279//509 275//509 265//509
-f 277//510 202//510 273//510
-f 279//511 196//511 275//511
-f 275//512 196//512 276//512
-f 196//513 277//513 276//513
-f 202//514 108//514 278//514
-f 218//515 191//515 279//515
-f 196//516 198//516 277//516
-f 277//517 198//517 202//517
-f 119//518 191//518 218//518
-f 191//519 192//519 279//519
-f 279//520 192//520 196//520
-f 281//521 282//521 280//521
-f 283//522 284//522 281//522
-f 280//523 285//523 262//523
-f 285//524 260//524 262//524
-f 282//525 285//525 280//525
-f 285//526 286//526 260//526
-f 286//527 263//527 260//527
-f 281//528 284//528 282//528
-f 282//529 286//529 285//529
-f 284//530 287//530 282//530
-f 282//531 287//531 286//531
-f 287//532 288//532 286//532
-f 288//533 289//533 286//533
-f 286//534 289//534 263//534
-f 283//535 290//535 284//535
-f 290//536 291//536 284//536
-f 284//537 291//537 287//537
-f 291//538 288//538 287//538
-f 289//539 274//539 263//539
-f 289//540 218//540 274//540
-f 290//541 207//541 291//541
-f 207//542 210//542 291//542
-f 210//543 288//543 291//543
-f 206//544 205//544 290//544
-f 205//545 207//545 290//545
-f 288//546 215//546 289//546
-f 289//547 215//547 218//547
-f 210//548 212//548 288//548
-f 288//549 212//549 215//549
-f 244//550 159//550 294//550
-f 296//551 293//551 262//551
-f 262//552 293//552 280//552
-f 293//553 297//553 280//553
-f 297//554 281//554 280//554
-f 298//555 297//555 292//555
-f 292//556 297//556 293//556
-f 298//557 299//557 297//557
-f 299//558 300//558 297//558
-f 297//559 300//559 281//559
-f 300//560 283//560 281//560
-f 295//561 294//561 298//561
-f 294//562 301//562 298//562
-f 298//563 301//563 299//563
-f 299//564 302//564 300//564
-f 303//565 301//565 294//565
-f 301//566 302//566 299//566
-f 300//567 304//567 283//567
-f 304//568 290//568 283//568
-f 301//569 305//569 302//569
-f 302//570 304//570 300//570
-f 159//571 303//571 294//571
-f 303//572 305//572 301//572
-f 305//573 226//573 302//573
-f 226//574 304//574 302//574
-f 304//575 206//575 290//575
-f 159//576 220//576 303//576
-f 226//577 229//577 304//577
-f 229//578 206//578 304//578
-f 220//579 221//579 303//579
-f 303//580 221//580 305//580
-f 221//581 226//581 305//581
-f 229//582 230//582 206//582
-f 308//583 309//583 306//583
-f 266//584 296//584 262//584
-f 296//585 292//585 293//585
-f 310//586 311//586 296//586
-f 311//587 292//587 296//587
-f 307//588 311//588 310//588
-f 311//589 312//589 292//589
-f 312//590 298//590 292//590
-f 312//591 295//591 298//591
-f 307//592 313//592 311//592
-f 311//593 314//593 312//593
-f 306//594 313//594 307//594
-f 313//595 314//595 311//595
-f 314//596 295//596 312//596
-f 314//597 315//597 295//597
-f 315//598 294//598 295//598
-f 309//599 316//599 306//599
-f 306//600 316//600 313//600
-f 313//601 317//601 314//601
-f 317//602 315//602 314//602
-f 315//603 244//603 294//603
-f 316//604 235//604 313//604
-f 313//605 235//605 317//605
-f 308//606 175//606 309//606
-f 309//607 235//607 316//607
-f 235//608 240//608 317//608
-f 317//609 240//609 315//609
-f 175//610 233//610 309//610
-f 233//611 235//611 309//611
-f 235//612 236//612 240//612
-f 240//613 244//613 315//613
-f 270//614 268//614 267//614
-f 278//615 318//615 272//615
-f 266//616 310//616 296//616
-f 268//617 310//617 266//617
-f 268//618 319//618 310//618
-f 319//619 307//619 310//619
-f 270//620 320//620 268//620
-f 320//621 319//621 268//621
-f 272//622 318//622 270//622
-f 318//623 320//623 270//623
-f 320//624 321//624 319//624
-f 319//625 321//625 307//625
-f 321//626 306//626 307//626
-f 320//627 322//627 321//627
-f 318//628 322//628 320//628
-f 321//629 308//629 306//629
-f 278//630 249//630 318//630
-f 318//631 249//631 322//631
-f 322//632 254//632 321//632
-f 254//633 308//633 321//633
-f 249//634 254//634 322//634
-f 254//635 257//635 308//635
-f 108//636 247//636 278//636
-f 278//637 247//637 249//637
-f 249//638 252//638 254//638
-f 257//639 173//639 308//639
-f 308//640 173//640 175//640
diff --git a/src/examples/evas/resources/models/lod/iso_sphere2.obj b/src/examples/evas/resources/models/lod/iso_sphere2.obj
deleted file mode 100644
index 0a5ff59006..0000000000
--- a/src/examples/evas/resources/models/lod/iso_sphere2.obj
+++ /dev/null
@@ -1,808 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: ''
-# www.blender.org
-mtllib iso_sphere2.mtl
-o Icosphere.002
-v -0.043085 -1.110005 0.350275
-v -0.337617 -1.079840 0.336233
-v -0.285440 -0.585440 -0.525917
-v -0.531376 -0.575270 -0.437794
-v -0.283834 -0.545811 1.215694
-v -0.499054 -0.505438 1.162908
-v 0.654968 -0.510392 -0.199780
-v -0.474590 -0.768147 0.985874
-v -0.087179 -0.707791 1.143459
-v -0.299933 -0.881676 0.935535
-v -0.008774 -0.843590 1.015251
-v -0.072305 -1.033951 0.721859
-v -0.246823 -1.068542 0.559624
-v 0.337395 -0.557072 1.131420
-v 0.089247 -0.941906 0.853393
-v 0.300138 -0.815399 0.924240
-v 0.422819 -0.662415 0.991150
-v 0.320283 -0.958198 0.668575
-v 0.645573 -0.627166 0.786306
-v 0.132259 -1.078536 0.438246
-v 0.480358 -0.833977 0.713856
-v 0.792637 -0.574664 0.319945
-v 0.635831 -0.786164 0.207136
-v 0.723372 -0.606370 0.029680
-v 0.679441 -0.720267 0.520725
-v 0.484967 -0.802409 -0.103068
-v 0.294766 -1.022106 0.181082
-v 0.292891 -0.923773 -0.095417
-v 0.485381 -0.925966 0.423022
-v -0.803823 -0.808436 0.413738
-v -0.885127 -0.673160 0.583628
-v -0.990892 -0.550005 0.322880
-v -0.619727 -0.891485 0.680166
-v -0.873503 -0.540241 0.791042
-v -0.694462 -0.676220 0.897598
-v -0.575186 -0.986318 0.306743
-v -0.430878 -0.993595 0.656383
-v -0.317218 -0.775528 -0.376969
-v -0.211685 -1.063345 0.068899
-v -0.337974 -0.945765 -0.155163
-v -0.620106 -0.714304 -0.267048
-v -0.684850 -0.803608 -0.079216
-v -0.853416 -0.583001 -0.114483
-v -0.466844 -0.986394 0.035488
-v -0.736586 -0.859776 0.186172
-v -0.943753 -0.607470 0.132875
-v 0.041003 -1.050327 0.023054
-v 0.395985 -0.643604 -0.359921
-v 0.143711 -0.882835 -0.258825
-v 0.009105 -0.720215 -0.452780
-v 0.199703 -0.455054 -0.562698
-v -0.142967 -0.947197 -0.211140
-v 0.890285 -0.084419 0.556994
-v 0.863267 0.189883 0.468162
-v 0.785349 -0.202121 0.820583
-v 0.841177 -0.403835 0.570116
-v 0.821439 0.230937 0.063660
-v 0.909336 -0.046523 0.220958
-v 0.854325 -0.117769 -0.002844
-v 0.887901 -0.328848 0.349619
-v 0.832592 -0.379028 0.044187
-v 0.070833 0.177135 1.289833
-v 0.237408 0.254766 1.214340
-v -0.270239 -0.351235 1.298106
-v -0.105918 -0.144275 1.342076
-v 0.366009 0.076849 1.213537
-v 0.132133 -0.162282 1.313611
-v 0.397385 -0.178849 1.211441
-v 0.587799 -0.114118 1.074440
-v 0.292595 -0.312500 1.240183
-v 0.067577 -0.424900 1.275726
-v 0.616707 -0.368339 0.998730
-v -0.960056 0.171375 0.765186
-v -0.960758 -0.070815 0.844814
-v -1.075348 -0.319435 0.312977
-v -1.014677 -0.413517 0.589386
-v -0.743130 0.307930 0.987598
-v -0.831280 -0.090788 1.024551
-v -1.066078 -0.108663 0.592005
-v -0.642967 -0.266209 1.161930
-v -0.952019 -0.344589 0.797783
-v -0.761909 -0.439749 1.004043
-v -0.578869 -0.184317 -0.543253
-v -0.808233 -0.115121 -0.371317
-v -0.761061 -0.398044 -0.359041
-v -0.871302 0.369238 -0.100170
-v -0.920135 0.214570 -0.142809
-v -0.750769 0.171965 -0.377922
-v -0.951937 -0.017335 -0.177204
-v -1.058321 -0.022178 0.071262
-v -1.035574 -0.255153 0.019268
-v -0.943188 -0.315718 -0.160099
-v 0.252098 0.252701 -0.541653
-v 0.217963 0.488884 -0.419874
-v 0.502609 -0.112018 -0.476820
-v 0.263783 0.003515 -0.601440
-v 0.024979 0.278481 -0.594942
-v -0.004380 -0.127570 -0.666612
-v 0.262665 -0.232774 -0.594235
-v 0.483948 -0.387848 -0.439896
-v -0.052023 -0.469005 -0.603711
-v -0.318117 -0.360137 -0.614348
-v 0.397964 0.420673 1.042683
-v 0.575905 0.158554 1.040710
-v 0.626959 0.388094 0.845360
-v 0.761446 0.091665 0.837194
-v 0.730349 0.376724 0.658611
-v 0.746921 0.455314 0.409437
-v -0.633217 0.108732 1.156311
-v -0.841345 0.384472 0.795570
-v -0.469215 0.440361 1.092636
-v -0.397266 0.317100 1.202000
-v -0.414673 -0.032404 1.288877
-v -0.176482 0.154676 1.304393
-v -0.085038 0.379200 1.217154
-v 0.143173 0.462581 1.132462
-v -1.015969 0.270023 0.169908
-v -1.042686 0.203063 0.475093
-v -0.913159 0.478394 0.397644
-v -1.096181 -0.031866 0.291238
-v -0.878438 0.453167 0.639355
-v -0.168630 0.145768 -0.640814
-v -0.324457 -0.136029 -0.641977
-v -0.246814 0.495504 -0.458252
-v -0.449674 0.404317 -0.462725
-v -0.418270 0.098507 -0.595456
-v -0.599224 0.155701 -0.493637
-v 0.707630 -0.216033 -0.268274
-v 0.713462 0.272873 -0.137657
-v 0.612297 0.506575 -0.042900
-v 0.724725 0.024737 -0.237570
-v 0.494619 0.367397 -0.337263
-v 0.464614 0.562986 -0.177645
-v 0.541979 0.138264 -0.406811
-v -0.107575 0.806074 0.774759
-v 0.163417 0.858934 0.493508
-v -0.082945 0.898915 0.437085
-v 0.096251 0.670177 0.954388
-v 0.318120 0.750322 0.685074
-v 0.310741 0.654518 0.860890
-v 0.134068 0.874334 0.224604
-v 0.376475 0.787784 0.375769
-v 0.529269 0.683066 0.419120
-v 0.537943 0.587103 0.704846
-v 0.680249 0.531307 0.217619
-v -0.279031 0.851239 0.613994
-v -0.486828 0.813635 0.495644
-v -0.588239 0.630827 0.822411
-v -0.357988 0.643371 0.954727
-v -0.132449 0.589638 1.065384
-v -0.336158 0.870105 0.237582
-v -0.781217 0.592996 0.082910
-v -0.532025 0.762084 0.054369
-v -0.098966 0.880414 0.114647
-v -0.702800 0.696410 0.438742
-v -0.015972 0.595602 -0.388412
-v 0.100659 0.780216 -0.110664
-v -0.193844 0.812969 -0.066578
-v -0.298229 0.702745 -0.236465
-v -0.612024 0.525072 -0.262520
-v 0.449396 0.723814 0.123743
-v 0.274922 0.681236 -0.176248
-vn -0.325280 -0.386001 -0.863247
-vn -0.217219 -0.605243 0.765830
-vn -0.202023 -0.639645 0.741647
-vn -0.097132 -0.712323 0.695099
-vn -0.041522 -0.834040 0.550139
-vn 0.232482 -0.593342 0.770647
-vn 0.042421 -0.842307 0.537327
-vn 0.248001 -0.754040 0.608210
-vn 0.272464 -0.625586 0.731031
-vn 0.383941 -0.610763 0.692502
-vn 0.007245 -0.979552 0.201059
-vn 0.326862 -0.813897 0.480346
-vn 0.223599 -0.906008 0.359378
-vn 0.072098 -0.976012 0.205434
-vn 0.220145 -0.926733 0.304471
-vn 0.459241 -0.759645 0.460475
-vn 0.540076 -0.660963 0.521005
-vn 0.573451 -0.638104 0.513788
-vn 0.829519 -0.540941 -0.138858
-vn 0.703602 -0.556113 -0.442360
-vn 0.700606 -0.644130 -0.306999
-vn 0.565195 -0.791240 -0.233439
-vn 0.502396 -0.813572 -0.292743
-vn 0.799353 -0.600673 0.015060
-vn 0.715335 -0.697197 0.047027
-vn 0.570843 -0.811109 -0.127435
-vn 0.683484 -0.657266 0.317571
-vn 0.646563 -0.724063 0.240184
-vn 0.397950 -0.916018 0.050467
-vn 0.214068 -0.973669 -0.078381
-vn 0.544493 -0.796967 0.261480
-vn 0.397613 -0.905459 0.148485
-vn -0.818780 -0.570687 0.062571
-vn -0.667374 -0.704461 0.241549
-vn -0.693925 -0.587952 0.415670
-vn -0.566912 -0.812035 0.138600
-vn -0.664842 -0.632392 0.397575
-vn -0.377512 -0.915852 0.136750
-vn -0.452324 -0.875799 0.168462
-vn -0.498522 -0.695599 0.517318
-vn -0.295004 -0.940703 0.167480
-vn -0.496145 -0.516503 0.697900
-vn -0.366357 -0.791505 0.489186
-vn -0.369697 -0.787443 0.493212
-vn -0.171469 -0.909624 0.378395
-vn -0.105831 -0.990018 0.093087
-vn -0.179041 -0.881302 0.437322
-vn -0.294857 -0.552721 0.779460
-vn -0.300534 -0.556633 -0.774493
-vn -0.096282 -0.989649 -0.106418
-vn -0.376055 -0.613162 -0.694704
-vn -0.360000 -0.723523 -0.588994
-vn -0.649139 -0.575524 -0.497384
-vn -0.419723 -0.755079 -0.503674
-vn -0.421204 -0.786166 -0.452251
-vn -0.228572 -0.909111 -0.348242
-vn -0.529578 -0.803062 -0.273201
-vn -0.713608 -0.644124 -0.275440
-vn -0.725669 -0.606444 -0.325008
-vn -0.506362 -0.838325 -0.202013
-vn -0.262011 -0.947767 -0.181903
-vn -0.347813 -0.927254 -0.138661
-vn -0.615189 -0.788370 -0.003905
-vn -0.761993 -0.642604 -0.080166
-vn -0.806300 -0.591125 -0.021257
-vn 0.188646 -0.973526 -0.129071
-vn 0.625373 -0.548037 -0.555486
-vn 0.427594 -0.695118 -0.577905
-vn 0.424579 -0.707569 -0.564870
-vn 0.297073 -0.620106 -0.726097
-vn 0.296026 -0.539527 -0.788213
-vn 0.300058 -0.898131 -0.321443
-vn 0.234318 -0.870860 -0.432085
-vn 0.116642 -0.871904 -0.475583
-vn 0.056821 -0.745287 -0.664318
-vn -0.025578 -0.519409 -0.854143
-vn -0.040821 -0.715313 -0.697611
-vn -0.081008 -0.606328 -0.791078
-vn 0.019031 -0.984447 -0.174650
-vn -0.022886 -0.921460 -0.387799
-vn -0.123146 -0.905614 -0.405829
-vn -0.180605 -0.772005 -0.609417
-vn 0.939797 -0.131531 0.315406
-vn 0.918920 0.390537 -0.055385
-vn 0.961915 0.263497 -0.072725
-vn 0.990311 0.120112 0.069689
-vn 0.997330 -0.052659 0.050603
-vn 0.976904 -0.143697 0.158142
-vn 0.977607 -0.144108 -0.153354
-vn 0.972408 -0.117201 -0.201709
-vn 0.842254 -0.312404 0.439330
-vn 0.927120 -0.367911 0.071342
-vn 0.931073 -0.347367 -0.111533
-vn 0.833842 -0.374733 -0.405318
-vn 0.892788 -0.418236 -0.167358
-vn 0.838930 -0.471282 0.272196
-vn 0.870468 -0.468487 0.151013
-vn 0.314278 0.223000 0.922768
-vn 0.125070 0.091795 0.987892
-vn 0.285969 0.118264 0.950913
-vn 0.361192 0.036682 0.931770
-vn 0.568657 0.063054 0.820154
-vn 0.354160 -0.077256 0.931988
-vn 0.016559 -0.220352 0.975280
-vn 0.104586 -0.167135 0.980371
-vn 0.248624 -0.197897 0.948168
-vn 0.611896 -0.161038 0.774371
-vn 0.544813 -0.255399 0.798718
-vn 0.550269 -0.255466 0.794947
-vn 0.309450 -0.338496 0.888629
-vn 0.016059 -0.390907 0.920290
-vn -0.029079 -0.410270 0.911501
-vn 0.603953 -0.415720 0.680013
-vn 0.202558 -0.503514 0.839907
-vn 0.644350 -0.440932 0.624814
-vn -0.936414 -0.339131 0.090109
-vn -0.762955 0.224849 0.606088
-vn -0.785320 0.195416 0.587440
-vn -0.913503 -0.097033 0.395090
-vn -0.929581 -0.159590 0.332280
-vn -0.811611 -0.123981 0.570890
-vn -0.682480 -0.177341 0.709063
-vn -0.763908 -0.188135 0.617292
-vn -0.855737 -0.356336 0.375152
-vn -0.765305 -0.326237 0.554867
-vn -0.547333 -0.326108 0.770766
-vn -0.883545 -0.444145 0.148609
-vn -0.844315 -0.428413 0.321860
-vn -0.684131 -0.452590 0.571951
-vn -0.539756 -0.468719 0.699261
-vn -0.425490 -0.283512 -0.859406
-vn -0.778666 0.195222 -0.596295
-vn -0.905349 0.181124 -0.384107
-vn -0.761569 0.137870 -0.633249
-vn -0.919266 -0.001905 -0.393633
-vn -0.815916 -0.056907 -0.575363
-vn -0.894811 -0.051658 -0.443446
-vn -0.759714 -0.154080 -0.631739
-vn -0.620273 -0.136931 -0.772342
-vn -0.498474 -0.281710 -0.819855
-vn -0.758690 -0.348727 -0.550254
-vn -0.878272 -0.337968 -0.338253
-vn -0.932479 -0.305286 -0.193091
-vn -0.929743 -0.345970 -0.126028
-vn -0.582305 -0.455417 -0.673436
-vn -0.867666 -0.351432 -0.351641
-vn -0.652766 -0.464914 -0.598123
-vn 0.247336 0.237012 -0.939495
-vn 0.158311 0.160516 -0.974255
-vn 0.451221 -0.029329 -0.891930
-vn 0.250188 -0.030689 -0.967711
-vn 0.493835 -0.148114 -0.856849
-vn 0.186564 -0.189613 -0.963971
-vn 0.168371 -0.201264 -0.964958
-vn -0.032941 -0.176631 -0.983726
-vn 0.432813 -0.245658 -0.867367
-vn -0.117764 -0.377575 -0.918460
-vn 0.623723 -0.420548 -0.658870
-vn 0.441599 -0.402606 -0.801809
-vn 0.167003 -0.477603 -0.862557
-vn 0.490380 0.350852 0.797766
-vn 0.513925 0.342963 0.786294
-vn 0.601572 0.123860 0.789158
-vn 0.625966 0.419994 0.657093
-vn 0.749694 0.324238 0.576914
-vn 0.752471 0.113086 0.648844
-vn 0.767864 -0.101078 0.632588
-vn 0.793888 0.030254 0.607311
-vn 0.824648 0.362167 0.434501
-vn 0.894992 0.302832 0.327539
-vn 0.881939 0.429530 0.194131
-vn 0.919465 0.052780 0.389613
-vn 0.931868 0.191565 0.308100
-vn 0.817565 -0.308088 0.486487
-vn -0.682032 0.215554 0.698834
-vn -0.572503 0.027168 0.819453
-vn -0.493097 0.387588 0.778865
-vn -0.490430 0.400475 0.774014
-vn -0.506090 0.026081 0.862086
-vn -0.385042 0.240649 0.890972
-vn -0.253556 0.245224 0.935721
-vn -0.124144 0.402895 0.906788
-vn -0.367805 -0.140010 0.919302
-vn -0.379169 -0.224426 0.897699
-vn -0.189743 -0.057585 0.980144
-vn -0.136578 0.092091 0.986340
-vn 0.022901 0.353962 0.934979
-vn 0.164706 0.443872 0.880823
-vn -0.285125 -0.356857 0.889582
-vn 0.045951 0.135598 0.989698
-vn 0.195610 0.434995 0.878929
-vn -0.914917 0.241736 -0.323250
-vn -0.869641 0.365925 -0.331397
-vn -0.968233 0.193715 -0.158111
-vn -0.903125 0.429113 0.015087
-vn -0.984981 -0.082812 -0.151509
-vn -0.983442 -0.057680 -0.171800
-vn -0.969030 0.244979 -0.031082
-vn -0.871570 0.458707 0.173072
-vn -0.983949 0.122502 0.129759
-vn -0.876142 0.383932 0.291498
-vn -0.994398 -0.065786 0.082728
-vn -0.830889 0.409089 0.377188
-vn -0.941002 0.178449 0.287526
-vn -0.973574 -0.165505 0.157362
-vn -0.922494 0.122975 0.365899
-vn -0.768867 0.352230 0.533645
-vn 0.119447 0.164194 -0.979170
-vn -0.072887 -0.124063 -0.989594
-vn 0.251807 0.472014 -0.844864
-vn -0.093397 0.444236 -0.891028
-vn -0.171652 0.425450 -0.888554
-vn -0.077893 0.047186 -0.995844
-vn -0.233093 0.366940 -0.900568
-vn -0.198408 0.113735 -0.973498
-vn -0.379250 0.335357 -0.862383
-vn -0.525680 0.408961 -0.745930
-vn -0.367653 0.037255 -0.929216
-vn -0.544321 0.446066 -0.710451
-vn -0.338312 -0.124564 -0.932753
-vn -0.463519 0.100713 -0.880345
-vn -0.652712 0.454550 -0.606095
-vn -0.581515 0.083276 -0.809262
-vn -0.596886 0.101164 -0.795923
-vn -0.713750 0.386393 -0.584176
-vn 0.949660 0.142746 -0.278870
-vn 0.841860 -0.260585 -0.472618
-vn 0.808738 0.485002 -0.332740
-vn 0.902140 0.161389 -0.400121
-vn 0.878932 0.211936 -0.427272
-vn 0.689898 0.507823 -0.515903
-vn 0.887807 -0.152047 -0.434374
-vn 0.875302 -0.000478 -0.483576
-vn 0.740126 0.279812 -0.611488
-vn 0.709841 0.334810 -0.619699
-vn 0.721760 0.036896 -0.691159
-vn 0.705180 0.085943 -0.703801
-vn 0.504334 0.344566 -0.791784
-vn 0.709885 -0.277620 -0.647294
-vn 0.669230 -0.142891 -0.729187
-vn 0.514876 0.154860 -0.843161
-vn 0.482711 0.225666 -0.846206
-vn 0.093605 0.958220 0.270283
-vn 0.205871 0.878532 0.431045
-vn 0.151113 0.987704 0.040073
-vn 0.195266 0.912435 0.359629
-vn 0.401487 0.897109 0.184402
-vn 0.266239 0.841664 0.469807
-vn 0.515228 0.833821 0.198196
-vn 0.513999 0.743975 0.426972
-vn 0.563104 0.788392 0.247694
-vn 0.723249 0.690235 0.022067
-vn 0.344700 0.654844 0.672578
-vn 0.342210 0.652936 0.675697
-vn 0.712068 0.671815 0.204018
-vn 0.556786 0.629238 0.542262
-vn 0.557774 0.630559 0.539706
-vn 0.725366 0.582940 0.366094
-vn 0.741553 0.624102 0.246162
-vn 0.360770 0.478910 0.800306
-vn 0.005070 0.964113 0.265445
-vn -0.363627 0.856498 0.366314
-vn -0.301490 0.843426 0.444675
-vn -0.216737 0.854915 0.471323
-vn -0.097879 0.802168 0.589021
-vn 0.007762 0.801682 0.597700
-vn 0.125412 0.662113 0.738836
-vn -0.403001 0.655008 0.639182
-vn -0.217498 0.627206 0.747868
-vn -0.614727 0.572458 0.542589
-vn -0.519993 0.573345 0.633153
-vn 0.079527 0.594822 0.799914
-vn -0.195409 0.584597 0.787440
-vn -0.150232 0.555824 0.817613
-vn -0.648699 0.621059 -0.439858
-vn -0.071083 0.996028 -0.053616
-vn -0.171020 0.982394 0.075193
-vn -0.222766 0.971375 0.082495
-vn -0.438564 0.896706 -0.059838
-vn -0.464944 0.883592 -0.055603
-vn -0.514505 0.806427 0.291477
-vn -0.566708 0.816226 -0.112327
-vn -0.630937 0.711223 0.309969
-vn -0.714601 0.698058 -0.045393
-vn -0.724851 0.666648 0.173699
-vn -0.652876 0.623982 0.429418
-vn -0.814625 0.526687 -0.242871
-vn -0.818491 0.557136 -0.140258
-vn 0.054264 0.996729 -0.059885
-vn -0.176451 0.949117 -0.260849
-vn 0.047748 0.927702 -0.370255
-vn -0.242224 0.926674 -0.287407
-vn 0.010785 0.835814 -0.548906
-vn -0.274368 0.874912 -0.399064
-vn 0.014740 0.829857 -0.557781
-vn -0.401217 0.779213 -0.481510
-vn -0.543759 0.732110 -0.410295
-vn -0.100858 0.715164 -0.691642
-vn -0.284491 0.666683 -0.688911
-vn -0.324226 0.670484 -0.667330
-vn 0.141859 0.553010 -0.821009
-vn 0.015963 0.547109 -0.836909
-vn 0.325908 0.945219 0.018563
-vn 0.656234 0.750934 -0.073862
-vn 0.157486 0.946574 -0.281419
-vn 0.397391 0.910279 -0.116072
-vn 0.336973 0.897202 -0.285445
-vn 0.572908 0.818543 -0.042002
-vn 0.366294 0.867647 -0.336179
-vn 0.211524 0.770686 -0.601083
-vn 0.484432 0.781739 -0.392695
-vn 0.248139 0.731255 -0.635369
-vn 0.677600 0.694247 -0.242651
-vn 0.597617 0.719512 -0.353775
-vn 0.410839 0.666394 -0.622198
-vn 0.459489 0.602819 -0.652288
-vn 0.874275 0.471057 -0.117257
-vn 0.814909 0.517165 -0.261655
-vn 0.673982 0.526395 -0.518321
-vn 0.433775 0.461654 -0.773767
-usemtl None.002
-s off
-f 3//1 4//1 102//1
-f 8//2 9//2 5//2
-f 8//3 10//3 9//3
-f 10//4 11//4 9//4
-f 10//5 12//5 11//5
-f 11//6 14//6 9//6
-f 12//7 15//7 11//7
-f 15//8 16//8 11//8
-f 11//9 16//9 14//9
-f 16//10 17//10 14//10
-f 13//11 1//11 12//11
-f 15//12 18//12 16//12
-f 12//13 18//13 15//13
-f 1//14 20//14 12//14
-f 20//15 18//15 12//15
-f 18//16 21//16 16//16
-f 16//17 21//17 17//17
-f 21//18 19//18 17//18
-f 22//19 23//19 24//19
-f 24//20 26//20 7//20
-f 24//21 23//21 26//21
-f 23//22 27//22 26//22
-f 27//23 28//23 26//23
-f 22//24 25//24 23//24
-f 25//25 29//25 23//25
-f 23//26 29//26 27//26
-f 19//27 21//27 25//27
-f 25//28 21//28 29//28
-f 29//29 20//29 27//29
-f 27//30 20//30 1//30
-f 21//31 18//31 29//31
-f 18//32 20//32 29//32
-f 30//33 31//33 32//33
-f 33//34 31//34 30//34
-f 31//35 35//35 34//35
-f 36//36 33//36 30//36
-f 33//37 35//37 31//37
-f 2//38 37//38 36//38
-f 36//39 37//39 33//39
-f 33//40 8//40 35//40
-f 2//41 13//41 37//41
-f 35//42 8//42 6//42
-f 37//43 10//43 33//43
-f 33//44 10//44 8//44
-f 13//45 12//45 37//45
-f 1//46 13//46 2//46
-f 12//47 10//47 37//47
-f 8//48 5//48 6//48
-f 38//49 4//49 3//49
-f 1//50 2//50 39//50
-f 38//51 41//51 4//51
-f 40//52 41//52 38//52
-f 42//53 43//53 41//53
-f 40//54 42//54 41//54
-f 40//55 44//55 42//55
-f 39//56 44//56 40//56
-f 44//57 45//57 42//57
-f 45//58 46//58 42//58
-f 42//59 46//59 43//59
-f 36//60 45//60 44//60
-f 39//61 2//61 44//61
-f 44//62 2//62 36//62
-f 36//63 30//63 45//63
-f 45//64 30//64 46//64
-f 30//65 32//65 46//65
-f 1//66 47//66 27//66
-f 26//67 48//67 7//67
-f 26//68 49//68 48//68
-f 28//69 49//69 26//69
-f 49//70 50//70 48//70
-f 50//71 51//71 48//71
-f 27//72 47//72 28//72
-f 47//73 49//73 28//73
-f 47//74 52//74 49//74
-f 49//75 52//75 50//75
-f 50//76 3//76 101//76
-f 52//77 38//77 50//77
-f 38//78 3//78 50//78
-f 1//79 39//79 47//79
-f 47//80 39//80 52//80
-f 39//81 40//81 52//81
-f 40//82 38//82 52//82
-f 55//83 56//83 53//83
-f 54//84 57//84 108//84
-f 54//85 58//85 57//85
-f 53//86 58//86 54//86
-f 53//87 60//87 58//87
-f 56//88 60//88 53//88
-f 60//89 61//89 58//89
-f 58//90 61//90 59//90
-f 55//91 19//91 56//91
-f 56//92 22//92 60//92
-f 60//93 22//93 61//93
-f 61//94 24//94 7//94
-f 22//95 24//95 61//95
-f 19//96 25//96 56//96
-f 25//97 22//97 56//97
-f 62//98 66//98 63//98
-f 65//99 67//99 62//99
-f 62//100 67//100 66//100
-f 67//101 68//101 66//101
-f 68//102 69//102 66//102
-f 67//103 70//103 68//103
-f 64//104 71//104 65//104
-f 65//105 71//105 67//105
-f 67//106 71//106 70//106
-f 68//107 72//107 69//107
-f 70//108 14//108 68//108
-f 68//109 14//109 72//109
-f 71//110 14//110 70//110
-f 5//111 9//111 64//111
-f 64//112 9//112 71//112
-f 14//113 17//113 72//113
-f 71//114 9//114 14//114
-f 17//115 19//115 72//115
-f 32//116 76//116 75//116
-f 73//117 78//117 77//117
-f 73//118 74//118 78//118
-f 79//119 81//119 74//119
-f 79//120 76//120 81//120
-f 74//121 81//121 78//121
-f 82//122 80//122 78//122
-f 81//123 82//123 78//123
-f 76//124 34//124 81//124
-f 34//125 82//125 81//125
-f 82//126 6//126 80//126
-f 32//127 31//127 76//127
-f 31//128 34//128 76//128
-f 34//129 35//129 82//129
-f 82//130 35//130 6//130
-f 102//131 4//131 83//131
-f 88//132 89//132 87//132
-f 89//133 90//133 87//133
-f 88//134 84//134 89//134
-f 89//135 91//135 90//135
-f 84//136 92//136 89//136
-f 92//137 91//137 89//137
-f 85//138 92//138 84//138
-f 83//139 85//139 84//139
-f 83//140 4//140 85//140
-f 85//141 43//141 92//141
-f 92//142 46//142 91//142
-f 91//143 46//143 75//143
-f 46//144 32//144 75//144
-f 4//145 41//145 85//145
-f 92//146 43//146 46//146
-f 85//147 41//147 43//147
-f 96//148 97//148 93//148
-f 96//149 98//149 97//149
-f 95//150 99//150 96//150
-f 96//151 99//151 98//151
-f 95//152 100//152 99//152
-f 99//153 51//153 98//153
-f 51//154 101//154 98//154
-f 101//155 102//155 98//155
-f 100//156 51//156 99//156
-f 101//157 3//157 102//157
-f 7//158 48//158 100//158
-f 100//159 48//159 51//159
-f 51//160 50//160 101//160
-f 66//161 103//161 63//161
-f 66//162 104//162 103//162
-f 69//163 104//163 66//163
-f 104//164 105//164 103//164
-f 106//165 105//165 104//165
-f 69//166 106//166 104//166
-f 72//167 55//167 69//167
-f 55//168 106//168 69//168
-f 105//169 106//169 107//169
-f 106//170 54//170 107//170
-f 107//171 54//171 108//171
-f 55//172 53//172 106//172
-f 53//173 54//173 106//173
-f 19//174 55//174 72//174
-f 78//175 109//175 77//175
-f 80//176 109//176 78//176
-f 109//177 112//177 77//177
-f 77//178 112//178 111//178
-f 80//179 113//179 109//179
-f 109//180 113//180 112//180
-f 113//181 114//181 112//181
-f 114//182 115//182 112//182
-f 80//183 64//183 113//183
-f 6//184 64//184 80//184
-f 64//185 65//185 113//185
-f 65//186 114//186 113//186
-f 114//187 62//187 115//187
-f 62//188 116//188 115//188
-f 6//189 5//189 64//189
-f 65//190 62//190 114//190
-f 62//191 63//191 116//191
-f 90//192 117//192 87//192
-f 87//193 117//193 86//193
-f 90//194 120//194 117//194
-f 118//195 119//195 117//195
-f 75//196 120//196 91//196
-f 91//197 120//197 90//197
-f 120//198 118//198 117//198
-f 118//199 121//199 119//199
-f 79//200 118//200 120//200
-f 118//201 73//201 121//201
-f 75//202 79//202 120//202
-f 73//203 110//203 121//203
-f 79//204 73//204 118//204
-f 75//205 76//205 79//205
-f 79//206 74//206 73//206
-f 73//207 77//207 110//207
-f 98//208 122//208 97//208
-f 102//209 123//209 98//209
-f 93//210 97//210 94//210
-f 122//211 124//211 97//211
-f 122//212 125//212 124//212
-f 98//213 123//213 122//213
-f 126//214 125//214 122//214
-f 123//215 126//215 122//215
-f 126//216 127//216 125//216
-f 127//217 88//217 125//217
-f 123//218 83//218 126//218
-f 88//219 160//219 125//219
-f 102//220 83//220 123//220
-f 83//221 127//221 126//221
-f 88//222 86//222 160//222
-f 83//223 84//223 127//223
-f 84//224 88//224 127//224
-f 88//225 87//225 86//225
-f 59//226 57//226 58//226
-f 7//227 128//227 61//227
-f 129//228 130//228 57//228
-f 59//229 131//229 57//229
-f 57//230 131//230 129//230
-f 129//231 132//231 130//231
-f 61//232 128//232 59//232
-f 59//233 128//233 131//233
-f 131//234 134//234 129//234
-f 134//235 132//235 129//235
-f 128//236 95//236 131//236
-f 131//237 95//237 134//237
-f 134//238 93//238 132//238
-f 7//239 100//239 128//239
-f 100//240 95//240 128//240
-f 95//241 96//241 134//241
-f 96//242 93//242 134//242
-f 135//243 136//243 137//243
-f 138//244 139//244 135//244
-f 137//245 136//245 141//245
-f 135//246 139//246 136//246
-f 139//247 142//247 136//247
-f 138//248 140//248 139//248
-f 139//249 143//249 142//249
-f 140//250 144//250 139//250
-f 139//251 144//251 143//251
-f 143//252 108//252 145//252
-f 116//253 103//253 138//253
-f 138//254 103//254 140//254
-f 144//255 108//255 143//255
-f 103//256 105//256 140//256
-f 140//257 105//257 144//257
-f 105//258 107//258 144//258
-f 144//259 107//259 108//259
-f 63//260 103//260 116//260
-f 146//261 135//261 137//261
-f 147//262 148//262 146//262
-f 148//263 149//263 146//263
-f 146//264 149//264 135//264
-f 149//265 150//265 135//265
-f 135//266 150//266 138//266
-f 150//267 116//267 138//267
-f 148//268 111//268 149//268
-f 111//269 150//269 149//269
-f 110//270 77//270 148//270
-f 77//271 111//271 148//271
-f 150//272 115//272 116//272
-f 111//273 112//273 150//273
-f 150//274 112//274 115//274
-f 160//275 86//275 152//275
-f 154//276 151//276 137//276
-f 137//277 151//277 146//277
-f 151//278 147//278 146//278
-f 153//279 147//279 151//279
-f 153//280 155//280 147//280
-f 155//281 148//281 147//281
-f 153//282 152//282 155//282
-f 155//283 121//283 148//283
-f 152//284 119//284 155//284
-f 119//285 121//285 155//285
-f 121//286 110//286 148//286
-f 86//287 117//287 152//287
-f 152//288 117//288 119//288
-f 141//289 154//289 137//289
-f 158//290 151//290 154//290
-f 157//291 158//291 154//291
-f 158//292 153//292 151//292
-f 157//293 159//293 158//293
-f 158//294 159//294 153//294
-f 156//295 159//295 157//295
-f 159//296 160//296 153//296
-f 160//297 152//297 153//297
-f 156//298 124//298 159//298
-f 124//299 125//299 159//299
-f 159//300 125//300 160//300
-f 94//301 97//301 156//301
-f 97//302 124//302 156//302
-f 142//303 141//303 136//303
-f 145//304 161//304 143//304
-f 141//305 157//305 154//305
-f 142//306 161//306 141//306
-f 161//307 157//307 141//307
-f 143//308 161//308 142//308
-f 161//309 162//309 157//309
-f 162//310 156//310 157//310
-f 161//311 133//311 162//311
-f 162//312 94//312 156//312
-f 145//313 130//313 161//313
-f 161//314 130//314 133//314
-f 133//315 94//315 162//315
-f 133//316 132//316 94//316
-f 108//317 57//317 145//317
-f 145//318 57//318 130//318
-f 130//319 132//319 133//319
-f 132//320 93//320 94//320
diff --git a/src/examples/evas/resources/models/mesh_for_mmap.eet b/src/examples/evas/resources/models/mesh_for_mmap.eet
deleted file mode 100644
index 1be67146cd..0000000000
--- a/src/examples/evas/resources/models/mesh_for_mmap.eet
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/resources/models/mesh_for_mmap.md2 b/src/examples/evas/resources/models/mesh_for_mmap.md2
deleted file mode 100644
index b31051dabe..0000000000
--- a/src/examples/evas/resources/models/mesh_for_mmap.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/resources/models/mesh_for_mmap.obj b/src/examples/evas/resources/models/mesh_for_mmap.obj
deleted file mode 100644
index 6c5c6d30ab..0000000000
--- a/src/examples/evas/resources/models/mesh_for_mmap.obj
+++ /dev/null
@@ -1,639 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: ''
-# www.blender.org
-mtllib mesh_for_mmap.mtl
-o Plane
-v -1.223918 -0.500325 0.075700
-v -1.411940 -0.052580 0.073553
-v -1.395336 0.525426 0.071991
-v -1.073111 0.789552 0.075464
-v -0.577547 0.616305 0.095547
-v -0.421710 -0.579509 0.104937
-v -0.665485 -0.787970 0.085343
-v -1.059597 -0.938348 0.073501
-v -0.338078 -0.111442 0.179903
-v -0.616496 1.039868 0.078907
-v -0.211234 1.153622 0.079979
-v 0.282335 0.779734 0.095788
-v 0.440822 0.080958 0.139238
-v 0.117452 -0.161199 0.229495
-v 0.375599 -0.393653 0.122957
-v 0.190477 -0.810287 0.095391
-v -0.424230 -0.891009 0.087234
-v 0.680409 0.038702 0.106808
-v 0.540613 0.740512 0.090451
-v 0.821473 1.091689 0.074569
-v 1.362800 0.955968 0.069034
-v 1.409251 -0.277760 0.073066
-v 0.738710 -1.186747 0.073873
-v 0.225778 -0.955564 0.087192
-v 0.492514 -0.516774 0.103988
-v 0.530321 -0.557759 0.099516
-v 0.367342 -0.873027 0.088809
-v 0.722321 -1.019809 0.077430
-v 1.241735 -0.144758 0.077418
-v -0.156120 0.240132 0.211450
-v -0.356977 0.918276 0.087481
-v -0.129520 0.943621 0.088972
-v 0.280125 0.254749 0.156761
-v -0.691491 0.435852 0.097541
-v -0.248374 -0.761113 0.097904
-v 0.091530 -0.678240 0.107075
-v 0.208055 -0.421717 0.135555
-v -0.087247 -0.317338 0.176827
-v -0.593100 -0.529653 0.098746
-v -1.206739 -0.279321 0.078061
-v 0.824483 0.132863 0.094961
-v 0.722936 0.599027 0.089215
-v 0.920645 0.893190 0.076568
-v 1.228081 0.822376 0.072240
-v 1.232690 0.081196 0.077819
-v -1.227752 0.255306 0.077636
-v -0.875692 -0.708493 0.081658
-v -1.023257 0.505677 0.081258
-v -1.223918 -0.500325 0.075700
-v -1.411940 -0.052580 0.073553
-v -1.395336 0.525426 0.071991
-v -1.073111 0.789552 0.075464
-v -0.577547 0.616305 0.095547
-v -0.421710 -0.579509 0.104937
-v -0.665485 -0.787970 0.085343
-v -1.059597 -0.938348 0.073501
-v -0.338078 -0.111442 0.179903
-v -0.616496 1.039868 0.078907
-v -0.211234 1.153622 0.079979
-v 0.282335 0.779734 0.095788
-v 0.440822 0.080958 0.139238
-v 0.117452 -0.161199 0.229495
-v 0.375599 -0.393653 0.122957
-v 0.190477 -0.810287 0.095391
-v -0.424230 -0.891009 0.087234
-v 0.680409 0.038702 0.106808
-v 0.540613 0.740512 0.090451
-v 0.821473 1.091689 0.074569
-v 1.362800 0.955968 0.069034
-v 1.409251 -0.277760 0.073066
-v 0.738710 -1.186747 0.073873
-v 0.225778 -0.955564 0.087192
-v 0.492514 -0.516774 0.103988
-v 0.530321 -0.557759 0.099516
-v 0.367342 -0.873027 0.088809
-v 0.722321 -1.019809 0.077430
-v 1.241735 -0.144758 0.077418
-v -0.156120 0.240132 0.211450
-v -0.356977 0.918276 0.087481
-v -0.129520 0.943621 0.088972
-v 0.280125 0.254749 0.156761
-v -0.691491 0.435852 0.097541
-v -0.248374 -0.761113 0.097904
-v 0.091530 -0.678240 0.107075
-v 0.208055 -0.421717 0.135555
-v -0.087247 -0.317338 0.176827
-v -0.593100 -0.529653 0.098746
-v -1.206739 -0.279321 0.078061
-v 0.824483 0.132863 0.094961
-v 0.722936 0.599027 0.089215
-v 0.920645 0.893190 0.076568
-v 1.228081 0.822376 0.072240
-v 1.232690 0.081196 0.077819
-v -1.227752 0.255306 0.077636
-v -0.875692 -0.708493 0.081658
-v -1.023257 0.505677 0.081258
-v -1.281017 -0.355500 0.039362
-v -1.411210 0.112344 0.038448
-v -1.322014 0.683668 0.037678
-v -0.969117 0.905153 0.039401
-v -0.499290 0.670931 0.046923
-v -0.495146 -0.534987 0.049829
-v -0.763213 -0.711121 0.043182
-v -1.173112 -0.810717 0.038334
-v -0.353288 -0.081162 0.047829
-v -0.484637 1.096028 0.040952
-v -0.068283 1.157889 0.041556
-v 0.374321 0.724872 0.048243
-v 0.443630 0.011709 0.064944
-v 0.092362 -0.187838 0.079423
-v 0.319211 -0.450925 0.058135
-v 0.083140 -0.840956 0.047555
-v -0.536839 -0.843694 0.044010
-v 0.675998 -0.060356 0.053007
-v 0.625612 0.653465 0.046280
-v 0.948425 0.966515 0.039165
-v 1.468373 0.763762 0.036164
-v 1.359230 -0.466005 0.038215
-v 0.579650 -1.283402 0.038531
-v 0.099882 -0.989520 0.044387
-v 0.419705 -0.587777 0.051305
-v 0.452055 -0.633193 0.049594
-v 0.250706 -0.925451 0.045130
-v 0.584395 -1.115729 0.040402
-v 1.209780 -0.312984 0.040543
-v -0.128541 0.244724 0.040128
-v -0.242478 0.942750 0.044422
-v -0.013641 0.939276 0.045183
-v 0.306076 0.204337 0.069578
-v -0.635032 0.506248 0.047292
-v -0.346037 -0.736957 0.047937
-v 0.001593 -0.697509 0.051643
-v 0.149467 -0.457686 0.061432
-v -0.130355 -0.316982 0.063692
-v -0.658901 -0.463963 0.047699
-v -1.236168 -0.138413 0.040290
-v 0.830773 0.014929 0.048264
-v 0.788685 0.490165 0.045847
-v 1.021834 0.757115 0.040232
-v 1.317917 0.648183 0.037878
-v 1.229236 -0.087687 0.040792
-v -1.189747 0.394609 0.040163
-v -0.961750 -0.605827 0.041732
-v -0.955376 0.617261 0.041630
-vn 0.004198 0.008399 0.999956
-vn -0.047263 -0.038545 0.998139
-vn -0.041206 0.037052 0.998463
-vn -0.227448 0.030378 0.973316
-vn 0.013218 -0.335110 0.942086
-vn 0.099781 -0.154456 0.982948
-vn -0.004554 -0.091519 0.995793
-vn -0.111563 -0.031388 0.993262
-vn 0.041945 -0.000090 0.999120
-vn 0.204239 0.090567 0.974723
-vn -0.014018 0.040525 0.999080
-vn 0.026362 0.025247 0.999334
-vn 0.017662 -0.010470 0.999789
-vn 0.108693 -0.960329 -0.256817
-vn 0.287992 0.362391 -0.886416
-vn -0.832608 -0.198530 0.517058
-vn 0.718598 0.164863 0.675601
-vn -0.559085 -0.130450 -0.818784
-vn -0.571995 0.088202 -0.815501
-vn 0.007602 0.368488 -0.929601
-vn -0.459199 0.272561 -0.845486
-vn 0.617921 0.638683 0.458539
-vn -0.372918 -0.009302 -0.927818
-vn 0.627436 0.075681 -0.774982
-vn 0.322416 0.015233 0.946476
-vn -0.316304 -0.941346 0.117555
-vn 0.000000 0.000000 1.000000
-vn 0.000204 -0.002409 -0.999997
-vn 0.017692 0.010808 -0.999785
-vn 0.013141 -0.013072 -0.999828
-vn 0.020317 0.009466 -0.999749
-vn -0.021848 0.061906 -0.997843
-vn -0.020989 0.039801 -0.998987
-vn 0.005597 0.026770 -0.999626
-vn 0.055798 -0.062032 -0.996513
-vn -0.018061 0.002668 -0.999833
-vn -0.039014 -0.003825 -0.999231
-vn 0.003900 -0.016473 -0.999857
-vn -0.012650 -0.009982 -0.999870
-vn -0.008563 0.006846 -0.999940
-vn 0.452960 -0.250955 -0.855482
-vn -0.295696 0.383648 0.874859
-vn 0.198030 -0.265784 -0.943474
-vn 0.354051 -0.260379 0.898248
-vn 0.113227 0.874364 -0.471877
-vn 0.994113 0.095410 -0.051351
-vn -0.589681 -0.165642 -0.790467
-vn -0.237831 0.970087 0.048658
-vn -0.291633 0.190851 -0.937297
-vn -0.349373 0.550764 0.758022
-vn 0.212817 -0.101254 0.971832
-vn -0.971452 -0.229730 0.059204
-vn 0.720478 -0.352163 -0.597405
-vn 0.007207 -0.665049 -0.746765
-vn -0.347478 -0.294245 -0.890325
-vn 0.434177 -0.342570 -0.833148
-vn -0.077374 -0.227594 0.970677
-vn 0.063166 -0.212503 -0.975117
-vn 0.784802 0.604209 -0.137902
-vn 0.843955 0.032745 -0.535413
-vn 0.606018 -0.794459 0.039707
-vn -0.812984 0.314919 0.489779
-vn 0.215081 0.459114 0.861948
-vn 0.076217 0.342190 -0.936534
-vn -0.054590 -0.295301 0.953843
-vn -0.134217 0.907251 -0.398599
-vn 0.076986 0.260785 -0.962322
-vn 0.900568 -0.265805 -0.343984
-vn -0.108015 -0.470758 0.875625
-vn -0.676021 0.016322 -0.736702
-vn -0.986484 0.092980 0.134921
-vn -0.768211 0.449540 0.455813
-vn -0.021527 -0.322930 -0.946178
-vn 0.442930 0.444906 -0.778378
-vn 0.938281 0.307021 0.159270
-vn -0.036822 -0.002505 0.999319
-vn -0.033540 -0.042411 0.998537
-vn -0.023751 -0.016471 0.999582
-vn -0.022446 -0.008933 0.999708
-vn -0.025914 -0.014739 0.999556
-vn -0.035548 0.014154 0.999268
-vn -0.024036 0.016182 0.999580
-vn -0.024598 0.005630 0.999682
-vn -0.028020 0.003505 0.999601
-vn -0.031084 -0.008259 0.999483
-vn -0.022044 -0.000073 0.999757
-vn 0.059789 0.196614 0.978656
-vn 0.121270 -0.299116 0.946479
-vn 0.018641 -0.074251 0.997065
-vn -0.003012 -0.077815 0.996963
-vn -0.124673 -0.166493 0.978129
-vn 0.029311 -0.121184 0.992197
-vn -0.101491 -0.138357 0.985168
-vn 0.062166 0.030397 0.997603
-vn 0.029382 0.029140 0.999143
-vn 0.064772 0.026404 0.997551
-vn 0.119261 0.125579 0.984889
-vn -0.010851 0.038568 0.999197
-vn 0.226052 0.111443 0.967719
-vn 0.029409 0.115196 0.992907
-vn 0.000583 0.043012 0.999074
-vn 0.027036 0.023571 0.999357
-vn 0.025373 -0.000755 0.999678
-vn 0.014573 0.017348 0.999743
-vn 0.015908 0.007951 0.999842
-vn 0.019812 0.004014 0.999796
-vn 0.042718 0.007785 0.999057
-vn 0.052052 -0.060760 0.996794
-vn 0.016853 -0.048473 0.998682
-vn 0.009658 -0.036144 0.999300
-vn 0.026541 -0.018692 0.999473
-vn 0.024216 -0.018922 0.999528
-vn -0.015349 -0.998174 0.058429
-vn 0.323938 0.264956 -0.908220
-vn -0.471009 -0.181030 0.863353
-vn 0.992348 0.087442 -0.087170
-vn -0.976776 -0.067028 0.203510
-vn -0.992969 0.028835 0.114811
-vn 0.036623 0.213297 -0.976301
-vn -0.470245 0.366208 0.802971
-vn 0.233767 0.346999 0.908265
-vn -0.907194 0.107718 -0.406688
-vn 0.525808 0.003856 0.850594
-vn 0.724399 -0.065436 -0.686268
-vn -0.349234 -0.704459 0.617878
-vn 0.012689 -0.000732 -0.999919
-vn 0.013887 0.012414 -0.999826
-vn 0.010405 0.005848 -0.999929
-vn 0.011290 0.004935 -0.999924
-vn 0.009271 0.002360 -0.999954
-vn 0.012445 -0.007147 -0.999897
-vn 0.009459 -0.007290 -0.999929
-vn 0.010056 -0.003998 -0.999941
-vn 0.011815 -0.003193 -0.999925
-vn 0.012846 0.001621 -0.999916
-vn 0.009054 -0.001026 -0.999958
-vn -0.022198 -0.008318 -0.999719
-vn 0.028391 0.072479 -0.996966
-vn 0.010388 0.034385 -0.999355
-vn 0.006973 0.032446 -0.999449
-vn 0.070641 -0.000319 -0.997502
-vn 0.020541 0.000063 -0.999789
-vn 0.071638 0.000628 -0.997431
-vn -0.013010 -0.010342 -0.999862
-vn -0.026939 -0.007599 -0.999608
-vn -0.026999 -0.007475 -0.999608
-vn 0.062047 -0.058825 -0.996338
-vn 0.003086 -0.015814 -0.999870
-vn -0.001484 -0.016956 -0.999855
-vn -0.076689 -0.030792 -0.996580
-vn -0.013753 -0.039148 -0.999139
-vn -0.012759 -0.009568 -0.999873
-vn -0.013265 0.002254 -0.999909
-vn -0.008987 -0.008246 -0.999926
-vn -0.009065 -0.003035 -0.999954
-vn -0.010855 -0.000705 -0.999941
-vn -0.023203 -0.001162 -0.999730
-vn -0.015977 0.026275 -0.999527
-vn -0.003614 0.020092 -0.999792
-vn -0.002092 0.016509 -0.999862
-vn -0.012474 0.011510 -0.999856
-vn -0.007680 0.011375 -0.999906
-vn 0.837490 -0.344029 -0.424563
-vn -0.138687 0.255819 0.956725
-vn 0.394607 -0.382951 -0.835245
-vn 0.427015 -0.407571 -0.807183
-vn -0.030744 0.999289 0.021836
-vn 0.531366 0.172094 0.829478
-vn -0.917609 -0.385791 -0.095707
-vn -0.097838 0.807548 0.581631
-vn -0.146524 0.128803 -0.980786
-vn -0.275167 0.323794 0.905230
-vn 0.266822 -0.213269 0.939852
-vn -0.262677 -0.034943 -0.964251
-vn 0.448908 -0.296397 -0.842989
-vn 0.118367 -0.935135 0.333933
-vn -0.915697 -0.399727 -0.041437
-vn 0.527067 -0.550545 -0.647380
-vn -0.210915 -0.362412 0.907839
-vn 0.150686 -0.321294 -0.934914
-vn 0.543310 0.321369 0.775587
-vn 0.820582 -0.071330 0.567061
-vn 0.402188 -0.662099 0.632353
-vn -0.546192 0.304935 0.780186
-vn 0.050332 0.255883 0.965397
-vn 0.075592 0.208286 -0.975142
-vn -0.077353 -0.231201 0.969826
-vn -0.244590 0.867294 0.433563
-vn 0.186521 0.349908 -0.918027
-vn 0.412811 -0.178496 -0.893155
-vn -0.072068 -0.200482 0.977043
-vn -0.651615 -0.065460 0.755720
-vn -0.329842 0.074684 0.941078
-vn -0.376500 0.284548 0.881635
-vn -0.154301 -0.489046 -0.858501
-vn 0.594724 0.768555 -0.235854
-vn 0.342161 0.050078 0.938306
-usemtl None
-s off
-f 5//1 34//1 6//1
-f 6//2 39//2 7//2
-f 5//3 48//3 34//3
-f 10//4 9//4 30//4
-f 14//5 38//5 37//5
-f 15//6 37//6 36//6
-f 16//7 36//7 35//7
-f 9//8 14//8 30//8
-f 29//9 45//9 41//9
-f 13//10 33//10 14//10
-f 10//11 31//11 11//11
-f 19//12 42//12 43//12
-f 22//13 29//13 28//13
-f 79//14 127//14 80//14
-f 73//15 74//15 121//15
-f 49//16 97//16 104//16
-f 90//17 89//17 138//17
-f 66//18 67//18 115//18
-f 51//19 99//19 98//19
-f 89//20 93//20 137//20
-f 76//21 77//21 125//21
-f 60//22 108//22 107//22
-f 93//23 92//23 140//23
-f 54//24 102//24 53//24
-f 69//25 70//25 117//25
-f 86//26 134//26 85//26
-f 16//27 64//27 15//27
-f 31//27 79//27 32//27
-f 39//27 87//27 47//27
-f 7//27 55//27 6//27
-f 22//27 23//27 70//27
-f 33//27 81//27 30//27
-f 13//27 61//27 12//27
-f 2//27 50//27 1//27
-f 36//27 84//27 35//27
-f 19//27 20//27 67//27
-f 4//27 52//27 3//27
-f 43//27 42//27 91//27
-f 26//27 27//27 74//27
-f 9//27 10//27 57//27
-f 17//27 65//27 16//27
-f 32//27 80//27 33//27
-f 46//27 94//27 48//27
-f 8//27 56//27 7//27
-f 23//27 24//27 71//27
-f 47//27 95//27 40//27
-f 40//27 88//27 46//27
-f 14//27 62//27 13//27
-f 37//27 85//27 36//27
-f 5//27 53//27 4//27
-f 20//27 21//27 68//27
-f 44//27 43//27 92//27
-f 11//27 59//27 10//27
-f 27//27 28//27 75//27
-f 29//27 18//27 77//27
-f 38//27 35//27 86//27
-f 34//27 82//27 39//27
-f 17//27 9//27 65//27
-f 24//27 25//27 72//27
-f 48//27 96//27 34//27
-f 15//27 63//27 14//27
-f 31//27 30//27 79//27
-f 38//27 86//27 37//27
-f 6//27 54//27 5//27
-f 21//27 22//27 69//27
-f 45//27 44//27 93//27
-f 28//27 29//27 76//27
-f 12//27 60//27 11//27
-f 41//27 45//27 89//27
-f 3//27 51//27 2//27
-f 18//27 19//27 66//27
-f 42//27 41//27 90//27
-f 1//27 49//27 8//27
-f 25//27 26//27 73//27
-f 101//28 102//28 130//28
-f 102//29 103//29 135//29
-f 144//30 101//30 130//30
-f 106//31 127//31 126//31
-f 110//32 111//32 133//32
-f 111//33 112//33 133//33
-f 112//34 113//34 131//34
-f 105//35 126//35 110//35
-f 125//36 137//36 141//36
-f 109//37 110//37 129//37
-f 106//38 107//38 127//38
-f 115//39 139//39 138//39
-f 118//40 124//40 125//40
-f 64//41 112//41 111//41
-f 87//42 135//42 95//42
-f 55//43 103//43 102//43
-f 70//44 71//44 118//44
-f 81//45 129//45 126//45
-f 61//46 109//46 108//46
-f 50//47 98//47 97//47
-f 84//48 132//48 83//48
-f 67//49 68//49 115//49
-f 52//50 100//50 99//50
-f 91//51 90//51 139//51
-f 57//52 58//52 105//52
-f 74//53 75//53 122//53
-f 65//54 113//54 112//54
-f 80//55 128//55 81//55
-f 94//56 142//56 96//56
-f 71//57 72//57 119//57
-f 56//58 104//58 103//58
-f 95//59 143//59 88//59
-f 88//60 136//60 94//60
-f 62//61 110//61 61//61
-f 85//62 133//62 84//62
-f 53//63 101//63 100//63
-f 68//64 69//64 116//64
-f 92//65 91//65 139//65
-f 59//66 107//66 106//66
-f 75//67 76//67 124//67
-f 86//68 83//68 134//68
-f 77//69 66//69 114//69
-f 82//70 130//70 135//70
-f 65//71 57//71 105//71
-f 72//72 73//72 121//72
-f 96//73 144//73 82//73
-f 63//74 111//74 110//74
-f 79//75 78//75 126//75
-f 34//76 39//76 6//76
-f 39//77 47//77 7//77
-f 7//78 47//78 8//78
-f 47//79 40//79 1//79
-f 8//80 47//80 1//80
-f 4//81 48//81 5//81
-f 3//82 48//82 4//82
-f 3//83 46//83 48//83
-f 3//84 2//84 46//84
-f 2//85 1//85 40//85
-f 46//86 2//86 40//86
-f 31//87 10//87 30//87
-f 15//88 14//88 37//88
-f 16//89 15//89 36//89
-f 17//90 16//90 35//90
-f 9//91 38//91 14//91
-f 17//92 35//92 9//92
-f 35//93 38//93 9//93
-f 18//94 29//94 41//94
-f 19//95 18//95 42//95
-f 18//96 41//96 42//96
-f 33//97 30//97 14//97
-f 31//98 32//98 11//98
-f 33//99 13//99 12//99
-f 32//100 33//100 12//100
-f 11//101 32//101 12//101
-f 20//102 19//102 43//102
-f 22//103 45//103 29//103
-f 21//104 20//104 43//104
-f 21//105 43//105 44//105
-f 22//106 21//106 44//106
-f 45//107 22//107 44//107
-f 25//108 27//108 26//108
-f 24//109 27//109 25//109
-f 24//110 23//110 27//110
-f 23//111 22//111 28//111
-f 27//112 23//112 28//112
-f 127//113 128//113 80//113
-f 74//114 122//114 121//114
-f 56//115 49//115 104//115
-f 89//116 137//116 138//116
-f 114//117 66//117 115//117
-f 50//118 51//118 98//118
-f 93//119 141//119 137//119
-f 124//120 76//120 125//120
-f 59//121 60//121 107//121
-f 141//122 93//122 140//122
-f 102//123 101//123 53//123
-f 70//124 118//124 117//124
-f 134//125 133//125 85//125
-f 64//27 63//27 15//27
-f 79//27 80//27 32//27
-f 87//27 95//27 47//27
-f 55//27 54//27 6//27
-f 23//27 71//27 70//27
-f 81//27 78//27 30//27
-f 61//27 60//27 12//27
-f 50//27 49//27 1//27
-f 84//27 83//27 35//27
-f 20//27 68//27 67//27
-f 52//27 51//27 3//27
-f 42//27 90//27 91//27
-f 27//27 75//27 74//27
-f 10//27 58//27 57//27
-f 65//27 64//27 16//27
-f 80//27 81//27 33//27
-f 94//27 96//27 48//27
-f 56//27 55//27 7//27
-f 24//27 72//27 71//27
-f 95//27 88//27 40//27
-f 88//27 94//27 46//27
-f 62//27 61//27 13//27
-f 85//27 84//27 36//27
-f 53//27 52//27 4//27
-f 21//27 69//27 68//27
-f 43//27 91//27 92//27
-f 59//27 58//27 10//27
-f 28//27 76//27 75//27
-f 18//27 66//27 77//27
-f 35//27 83//27 86//27
-f 82//27 87//27 39//27
-f 9//27 57//27 65//27
-f 25//27 73//27 72//27
-f 96//27 82//27 34//27
-f 63//27 62//27 14//27
-f 30//27 78//27 79//27
-f 86//27 85//27 37//27
-f 54//27 53//27 5//27
-f 22//27 70//27 69//27
-f 44//27 92//27 93//27
-f 29//27 77//27 76//27
-f 60//27 59//27 11//27
-f 45//27 93//27 89//27
-f 51//27 50//27 2//27
-f 19//27 67//27 66//27
-f 41//27 89//27 90//27
-f 49//27 56//27 8//27
-f 26//27 74//27 73//27
-f 102//126 135//126 130//126
-f 135//127 103//127 143//127
-f 103//128 104//128 143//128
-f 104//129 97//129 143//129
-f 97//130 136//130 143//130
-f 144//131 100//131 101//131
-f 99//132 100//132 144//132
-f 99//133 144//133 142//133
-f 98//134 99//134 142//134
-f 97//135 98//135 136//135
-f 98//136 142//136 136//136
-f 105//137 106//137 126//137
-f 134//138 110//138 133//138
-f 112//139 132//139 133//139
-f 132//140 112//140 131//140
-f 105//141 110//141 134//141
-f 113//142 105//142 131//142
-f 105//143 134//143 131//143
-f 114//144 115//144 138//144
-f 125//145 114//145 137//145
-f 114//146 138//146 137//146
-f 110//147 126//147 129//147
-f 127//148 107//148 128//148
-f 107//149 108//149 128//149
-f 108//150 109//150 129//150
-f 128//151 108//151 129//151
-f 115//152 116//152 139//152
-f 141//153 118//153 125//153
-f 116//154 117//154 139//154
-f 139//155 117//155 140//155
-f 117//156 118//156 140//156
-f 118//157 141//157 140//157
-f 123//158 121//158 122//158
-f 120//159 121//159 123//159
-f 119//160 120//160 123//160
-f 118//161 119//161 124//161
-f 119//162 123//162 124//162
-f 63//163 64//163 111//163
-f 135//164 143//164 95//164
-f 54//165 55//165 102//165
-f 71//166 119//166 118//166
-f 78//167 81//167 126//167
-f 60//168 61//168 108//168
-f 49//169 50//169 97//169
-f 132//170 131//170 83//170
-f 68//171 116//171 115//171
-f 51//172 52//172 99//172
-f 90//173 138//173 139//173
-f 58//174 106//174 105//174
-f 75//175 123//175 122//175
-f 64//176 65//176 112//176
-f 128//177 129//177 81//177
-f 142//178 144//178 96//178
-f 72//179 120//179 119//179
-f 55//180 56//180 103//180
-f 143//181 136//181 88//181
-f 136//182 142//182 94//182
-f 110//183 109//183 61//183
-f 133//184 132//184 84//184
-f 52//185 53//185 100//185
-f 69//186 117//186 116//186
-f 140//187 92//187 139//187
-f 58//188 59//188 106//188
-f 123//189 75//189 124//189
-f 83//190 131//190 134//190
-f 125//191 77//191 114//191
-f 87//192 82//192 135//192
-f 113//193 65//193 105//193
-f 120//194 72//194 121//194
-f 144//195 130//195 82//195
-f 62//196 63//196 110//196
-f 127//197 79//197 126//197
diff --git a/src/examples/evas/resources/models/mesh_for_mmap.ply b/src/examples/evas/resources/models/mesh_for_mmap.ply
deleted file mode 100644
index bf071a712e..0000000000
--- a/src/examples/evas/resources/models/mesh_for_mmap.ply
+++ /dev/null
@@ -1,401 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 288
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 100
-property list uchar uint vertex_indices
-end_header
-1.000000 0.000000 -1.000000 0.000000 1.000000 0.000000
--1.000000 0.000000 -1.000000 0.000000 1.000000 0.000000
--0.846154 0.000000 -0.846154 0.000000 1.000000 0.000000
-0.846154 0.000000 -0.846154 0.000000 1.000000 0.000000
--1.000000 0.000000 1.000000 0.000000 1.000000 0.000000
--0.846154 0.000000 0.846154 0.000000 1.000000 0.000000
-0.846154 0.000000 0.846154 0.000000 1.000000 0.000000
-1.000000 0.000000 1.000000 0.000000 1.000000 0.000000
-0.076923 0.000000 0.692308 -0.000000 1.000000 0.000000
-0.076923 0.000000 -0.692308 -0.000000 1.000000 0.000000
--0.076923 0.000000 -0.692308 -0.000000 1.000000 0.000000
--0.076923 0.000000 0.692308 -0.000000 1.000000 0.000000
-0.230769 0.000000 0.692308 0.000000 1.000000 -0.000000
-0.384615 0.000000 0.692308 0.000000 1.000000 -0.000000
-0.384615 0.000000 0.230769 0.000000 1.000000 -0.000000
-0.230769 0.000000 0.076923 0.000000 1.000000 -0.000000
-0.538462 0.000000 0.230769 -0.000000 1.000000 0.000000
-0.538462 0.000000 0.076923 -0.000000 1.000000 0.000000
-0.692308 0.000000 0.692308 -0.000000 1.000000 0.000000
-0.692308 0.000000 -0.692308 -0.000000 1.000000 0.000000
-0.538462 0.000000 -0.538462 -0.000000 1.000000 0.000000
-0.538462 0.000000 0.692308 -0.000000 1.000000 0.000000
-0.384615 0.000000 -0.384615 -0.000000 1.000000 0.000000
-0.384615 0.000000 -0.538462 -0.000000 1.000000 0.000000
-0.230769 0.000000 -0.692308 -0.000000 1.000000 0.000000
-0.230769 0.000000 -0.384615 -0.000000 1.000000 0.000000
--0.692308 0.000000 -0.692308 0.000000 1.000000 0.000000
--0.692308 0.000000 0.692308 0.000000 1.000000 0.000000
--0.538462 0.000000 0.538462 0.000000 1.000000 0.000000
--0.538462 0.000000 -0.692308 0.000000 1.000000 0.000000
--0.538462 0.000000 0.076923 0.000000 1.000000 0.000000
--0.538462 0.000000 0.230769 0.000000 1.000000 0.000000
--0.384615 0.000000 0.230769 0.000000 1.000000 0.000000
--0.230769 0.000000 0.076923 0.000000 1.000000 0.000000
--0.384615 0.000000 0.538462 0.000000 1.000000 0.000000
--0.230769 0.000000 0.692308 0.000000 1.000000 0.000000
-0.384615 0.000000 -0.384615 0.000000 -0.000000 1.000000
-0.230769 0.000000 -0.384615 0.000000 -0.000000 1.000000
-0.230769 -0.100000 -0.384615 0.000000 -0.000000 1.000000
-0.384615 -0.100000 -0.384615 0.000000 -0.000000 1.000000
--0.846154 0.000000 -0.846154 1.000000 -0.000000 0.000000
--0.846154 0.000000 0.846154 1.000000 -0.000000 0.000000
--0.846154 -0.100000 0.846154 1.000000 -0.000000 0.000000
--0.846154 -0.100000 -0.846154 1.000000 -0.000000 0.000000
-0.538462 0.000000 0.230769 -1.000000 0.000000 0.000000
-0.538462 0.000000 0.076923 -1.000000 0.000000 0.000000
-0.538462 -0.100000 0.076923 -1.000000 0.000000 0.000000
-0.538462 -0.100000 0.230769 -1.000000 0.000000 0.000000
-0.230769 0.000000 -0.692308 0.000000 0.000000 -1.000000
-0.692308 0.000000 -0.692308 0.000000 0.000000 -1.000000
-0.692308 -0.100000 -0.692308 0.000000 0.000000 -1.000000
-0.230769 -0.100000 -0.692308 0.000000 0.000000 -1.000000
-1.000000 0.000000 -1.000000 1.000000 -0.000000 0.000000
-1.000000 0.000000 1.000000 1.000000 -0.000000 0.000000
-1.000000 -0.100000 1.000000 1.000000 -0.000000 0.000000
-1.000000 -0.100000 -1.000000 1.000000 -0.000000 0.000000
-0.230769 0.000000 0.076923 -1.000000 0.000000 0.000000
-0.230769 -0.100000 0.076923 -1.000000 0.000000 0.000000
-0.230769 -0.100000 0.692308 -1.000000 0.000000 0.000000
-0.230769 0.000000 0.692308 -1.000000 0.000000 0.000000
--0.692308 0.000000 0.692308 -1.000000 0.000000 0.000000
--0.692308 0.000000 -0.692308 -1.000000 0.000000 0.000000
--0.692308 -0.100000 -0.692308 -1.000000 0.000000 0.000000
--0.692308 -0.100000 0.692308 -1.000000 0.000000 0.000000
--0.384615 0.000000 0.230769 0.000000 -0.000000 1.000000
--0.538462 0.000000 0.230769 0.000000 -0.000000 1.000000
--0.538462 -0.100000 0.230769 0.000000 -0.000000 1.000000
--0.384615 -0.100000 0.230769 0.000000 -0.000000 1.000000
-0.692308 0.000000 0.692308 0.000000 -0.000000 1.000000
-0.538462 0.000000 0.692308 0.000000 -0.000000 1.000000
-0.538462 -0.100000 0.692308 0.000000 -0.000000 1.000000
-0.692308 -0.100000 0.692308 0.000000 -0.000000 1.000000
-0.230769 0.000000 0.692308 0.000000 0.000000 1.000000
-0.230769 -0.100000 0.692308 0.000000 0.000000 1.000000
-0.384615 -0.100000 0.692308 0.000000 0.000000 1.000000
-0.384615 0.000000 0.692308 0.000000 0.000000 1.000000
--0.230769 0.000000 0.692308 0.000000 -0.000000 1.000000
--0.692308 0.000000 0.692308 0.000000 -0.000000 1.000000
--0.692308 -0.100000 0.692308 0.000000 -0.000000 1.000000
--0.230769 -0.100000 0.692308 0.000000 -0.000000 1.000000
--0.076923 0.000000 -0.692308 -1.000000 0.000000 0.000000
--0.076923 -0.100000 -0.692308 -1.000000 0.000000 0.000000
--0.076923 -0.100000 0.692308 -1.000000 0.000000 0.000000
--0.076923 0.000000 0.692308 -1.000000 0.000000 0.000000
-0.384615 0.000000 -0.538462 1.000000 -0.000000 0.000000
-0.384615 0.000000 -0.384615 1.000000 -0.000000 0.000000
-0.384615 -0.100000 -0.384615 1.000000 -0.000000 0.000000
-0.384615 -0.100000 -0.538462 1.000000 -0.000000 0.000000
--1.000000 0.000000 1.000000 -1.000000 0.000000 0.000000
--1.000000 0.000000 -1.000000 -1.000000 0.000000 0.000000
--1.000000 -0.100000 -1.000000 -1.000000 0.000000 0.000000
--1.000000 -0.100000 1.000000 -1.000000 0.000000 0.000000
-0.538462 0.000000 -0.538462 0.000000 0.000000 0.000000
-0.384615 0.000000 -0.538462 0.000000 0.000000 0.000000
-0.384615 0.000000 -0.538462 0.000000 0.000000 0.000000
-0.538462 0.000000 -0.538462 0.000000 0.000000 0.000000
-0.538462 0.000000 0.076923 0.000000 0.000000 0.000000
-0.230769 0.000000 0.076923 0.000000 0.000000 0.000000
-0.230769 0.000000 0.076923 0.000000 0.000000 0.000000
-0.538462 0.000000 0.076923 0.000000 0.000000 0.000000
--0.538462 0.000000 -0.692308 0.000000 0.000000 0.000000
--0.538462 0.000000 0.538462 0.000000 0.000000 0.000000
--0.538462 0.000000 0.538462 0.000000 0.000000 0.000000
--0.538462 0.000000 -0.692308 0.000000 0.000000 0.000000
--0.692308 0.000000 -0.692308 0.000000 0.000000 0.000000
--0.692308 0.000000 -0.692308 0.000000 0.000000 0.000000
--0.230769 0.000000 0.076923 0.000000 0.000000 0.000000
--0.230769 0.000000 0.692308 0.000000 0.000000 0.000000
--0.230769 0.000000 0.692308 0.000000 0.000000 0.000000
--0.230769 0.000000 0.076923 0.000000 0.000000 0.000000
-0.384615 0.000000 0.692308 0.000000 0.000000 0.000000
-0.384615 0.000000 0.692308 0.000000 0.000000 0.000000
-0.384615 0.000000 0.230769 0.000000 0.000000 0.000000
-0.384615 0.000000 0.230769 0.000000 0.000000 0.000000
-0.846154 0.000000 0.846154 0.000000 0.000000 0.000000
-0.846154 0.000000 -0.846154 0.000000 0.000000 0.000000
-0.846154 0.000000 -0.846154 0.000000 0.000000 0.000000
-0.846154 0.000000 0.846154 0.000000 0.000000 0.000000
--0.538462 0.000000 0.230769 0.000000 0.000000 0.000000
--0.538462 0.000000 0.076923 0.000000 0.000000 0.000000
--0.538462 0.000000 0.076923 0.000000 0.000000 0.000000
--0.538462 0.000000 0.230769 0.000000 0.000000 0.000000
-0.230769 0.000000 -0.384615 0.000000 0.000000 0.000000
-0.230769 0.000000 -0.692308 0.000000 0.000000 0.000000
-0.230769 0.000000 -0.692308 0.000000 0.000000 0.000000
-0.230769 0.000000 -0.384615 0.000000 0.000000 0.000000
-0.076923 0.000000 -0.692308 0.000000 0.000000 0.000000
--0.076923 0.000000 -0.692308 0.000000 0.000000 0.000000
--0.076923 0.000000 -0.692308 0.000000 0.000000 0.000000
-0.076923 0.000000 -0.692308 0.000000 0.000000 0.000000
-0.538462 0.000000 0.692308 0.000000 0.000000 0.000000
-0.538462 0.000000 0.692308 0.000000 0.000000 0.000000
-1.000000 0.000000 1.000000 0.000000 0.000000 0.000000
--1.000000 0.000000 1.000000 0.000000 0.000000 0.000000
--1.000000 0.000000 1.000000 0.000000 0.000000 0.000000
-1.000000 0.000000 1.000000 0.000000 0.000000 0.000000
--0.384615 0.000000 0.538462 0.000000 0.000000 0.000000
--0.384615 0.000000 0.538462 0.000000 0.000000 0.000000
--1.000000 0.000000 -1.000000 0.000000 0.000000 0.000000
-1.000000 0.000000 -1.000000 0.000000 0.000000 0.000000
-1.000000 0.000000 -1.000000 0.000000 0.000000 0.000000
--1.000000 0.000000 -1.000000 0.000000 0.000000 0.000000
--0.384615 0.000000 0.230769 0.000000 0.000000 0.000000
--0.384615 0.000000 0.230769 0.000000 0.000000 0.000000
-0.538462 0.000000 0.230769 0.000000 0.000000 0.000000
-0.538462 0.000000 0.230769 0.000000 0.000000 0.000000
-0.384615 0.000000 -0.384615 0.000000 0.000000 0.000000
-0.384615 0.000000 -0.384615 0.000000 0.000000 0.000000
--0.692308 0.000000 0.692308 0.000000 0.000000 0.000000
--0.692308 0.000000 0.692308 0.000000 0.000000 0.000000
-0.230769 0.000000 0.692308 0.000000 0.000000 0.000000
-0.230769 0.000000 0.692308 0.000000 0.000000 0.000000
--0.076923 0.000000 0.692308 0.000000 0.000000 0.000000
--0.076923 0.000000 0.692308 0.000000 0.000000 0.000000
-0.692308 0.000000 0.692308 0.000000 0.000000 0.000000
-0.692308 0.000000 0.692308 0.000000 0.000000 0.000000
--0.846154 0.000000 -0.846154 0.000000 0.000000 0.000000
--0.846154 0.000000 0.846154 0.000000 0.000000 0.000000
--0.846154 0.000000 0.846154 0.000000 0.000000 0.000000
--0.846154 0.000000 -0.846154 0.000000 0.000000 0.000000
-0.692308 0.000000 -0.692308 0.000000 0.000000 0.000000
-0.692308 0.000000 -0.692308 0.000000 0.000000 0.000000
-0.076923 0.000000 0.692308 0.000000 0.000000 0.000000
-0.076923 0.000000 0.692308 0.000000 0.000000 0.000000
-1.000000 -0.100000 -1.000000 0.000000 -1.000000 0.000000
-0.846154 -0.100000 -0.846154 0.000000 -1.000000 0.000000
--0.846154 -0.100000 -0.846154 0.000000 -1.000000 0.000000
--1.000000 -0.100000 -1.000000 0.000000 -1.000000 0.000000
--0.846154 -0.100000 0.846154 0.000000 -1.000000 0.000000
--1.000000 -0.100000 1.000000 0.000000 -1.000000 0.000000
-0.846154 -0.100000 0.846154 0.000000 -1.000000 0.000000
-1.000000 -0.100000 1.000000 0.000000 -1.000000 0.000000
-0.076923 -0.100000 0.692308 0.000000 -1.000000 0.000000
--0.076923 -0.100000 0.692308 0.000000 -1.000000 0.000000
--0.076923 -0.100000 -0.692308 0.000000 -1.000000 0.000000
-0.076923 -0.100000 -0.692308 0.000000 -1.000000 0.000000
-0.230769 -0.100000 0.692308 -0.000000 -1.000000 0.000000
-0.230769 -0.100000 0.076923 -0.000000 -1.000000 0.000000
-0.384615 -0.100000 0.230769 -0.000000 -1.000000 0.000000
-0.384615 -0.100000 0.692308 -0.000000 -1.000000 0.000000
-0.538462 -0.100000 0.230769 0.000000 -1.000000 0.000000
-0.538462 -0.100000 0.076923 0.000000 -1.000000 0.000000
-0.692308 -0.100000 0.692308 0.000000 -1.000000 0.000000
-0.538462 -0.100000 0.692308 0.000000 -1.000000 0.000000
-0.538462 -0.100000 -0.538462 0.000000 -1.000000 0.000000
-0.692308 -0.100000 -0.692308 0.000000 -1.000000 0.000000
-0.384615 -0.100000 -0.384615 0.000000 -1.000000 0.000000
-0.230769 -0.100000 -0.384615 0.000000 -1.000000 0.000000
-0.230769 -0.100000 -0.692308 0.000000 -1.000000 0.000000
-0.384615 -0.100000 -0.538462 0.000000 -1.000000 0.000000
--0.692308 -0.100000 -0.692308 0.000000 -1.000000 -0.000000
--0.538462 -0.100000 -0.692308 0.000000 -1.000000 -0.000000
--0.538462 -0.100000 0.538462 0.000000 -1.000000 -0.000000
--0.692308 -0.100000 0.692308 0.000000 -1.000000 -0.000000
--0.538462 -0.100000 0.076923 0.000000 -1.000000 -0.000000
--0.230769 -0.100000 0.076923 0.000000 -1.000000 -0.000000
--0.384615 -0.100000 0.230769 0.000000 -1.000000 -0.000000
--0.538462 -0.100000 0.230769 0.000000 -1.000000 -0.000000
--0.384615 -0.100000 0.538462 0.000000 -1.000000 0.000000
--0.230769 -0.100000 0.692308 0.000000 -1.000000 0.000000
-0.076923 0.000000 0.692308 1.000000 0.000000 -0.000000
-0.076923 -0.100000 0.692308 1.000000 0.000000 -0.000000
-0.076923 -0.100000 -0.692308 1.000000 0.000000 -0.000000
-0.076923 0.000000 -0.692308 1.000000 0.000000 -0.000000
--0.846154 0.000000 0.846154 0.000000 0.000000 -1.000000
-0.846154 0.000000 0.846154 0.000000 0.000000 -1.000000
-0.846154 -0.100000 0.846154 0.000000 0.000000 -1.000000
--0.846154 -0.100000 0.846154 0.000000 0.000000 -1.000000
-0.692308 0.000000 -0.692308 1.000000 -0.000000 0.000000
-0.692308 0.000000 0.692308 1.000000 -0.000000 0.000000
-0.692308 -0.100000 0.692308 1.000000 -0.000000 0.000000
-0.692308 -0.100000 -0.692308 1.000000 -0.000000 0.000000
--0.538462 0.000000 0.076923 0.000000 0.000000 -1.000000
--0.230769 0.000000 0.076923 0.000000 0.000000 -1.000000
--0.230769 -0.100000 0.076923 0.000000 0.000000 -1.000000
--0.538462 -0.100000 0.076923 0.000000 0.000000 -1.000000
--0.076923 0.000000 0.692308 0.000000 0.000000 1.000000
--0.076923 -0.100000 0.692308 0.000000 0.000000 1.000000
-0.076923 -0.100000 0.692308 0.000000 0.000000 1.000000
-0.076923 0.000000 0.692308 0.000000 0.000000 1.000000
-0.846154 0.000000 -0.846154 0.000000 -0.000000 1.000000
--0.846154 0.000000 -0.846154 0.000000 -0.000000 1.000000
--0.846154 -0.100000 -0.846154 0.000000 -0.000000 1.000000
-0.846154 -0.100000 -0.846154 0.000000 -0.000000 1.000000
-0.538462 0.000000 -0.538462 0.000000 -0.000000 1.000000
-0.384615 0.000000 -0.538462 0.000000 -0.000000 1.000000
-0.384615 -0.100000 -0.538462 0.000000 -0.000000 1.000000
-0.538462 -0.100000 -0.538462 0.000000 -0.000000 1.000000
-0.538462 0.000000 0.076923 0.000000 0.000000 -1.000000
-0.538462 -0.100000 0.076923 0.000000 0.000000 -1.000000
-0.230769 -0.100000 0.076923 0.000000 0.000000 -1.000000
-0.230769 0.000000 0.076923 0.000000 0.000000 -1.000000
--0.692308 0.000000 -0.692308 0.000000 0.000000 -1.000000
--0.538462 0.000000 -0.692308 0.000000 0.000000 -1.000000
--0.538462 -0.100000 -0.692308 0.000000 0.000000 -1.000000
--0.692308 -0.100000 -0.692308 0.000000 0.000000 -1.000000
--0.538462 0.000000 -0.692308 1.000000 -0.000000 0.000000
--0.538462 0.000000 0.538462 1.000000 -0.000000 0.000000
--0.538462 -0.100000 0.538462 1.000000 -0.000000 0.000000
--0.538462 -0.100000 -0.692308 1.000000 -0.000000 0.000000
--0.230769 0.000000 0.076923 1.000000 0.000000 -0.000000
--0.230769 0.000000 0.692308 1.000000 0.000000 -0.000000
--0.230769 -0.100000 0.692308 1.000000 0.000000 -0.000000
--0.230769 -0.100000 0.076923 1.000000 0.000000 -0.000000
-0.384615 0.000000 0.692308 1.000000 0.000000 -0.000000
-0.384615 -0.100000 0.692308 1.000000 0.000000 -0.000000
-0.384615 -0.100000 0.230769 1.000000 0.000000 -0.000000
-0.384615 0.000000 0.230769 1.000000 0.000000 -0.000000
-0.846154 0.000000 0.846154 -1.000000 0.000000 0.000000
-0.846154 0.000000 -0.846154 -1.000000 0.000000 0.000000
-0.846154 -0.100000 -0.846154 -1.000000 0.000000 0.000000
-0.846154 -0.100000 0.846154 -1.000000 0.000000 0.000000
--0.538462 0.000000 0.230769 -1.000000 0.000000 0.000000
--0.538462 0.000000 0.076923 -1.000000 0.000000 0.000000
--0.538462 -0.100000 0.076923 -1.000000 0.000000 0.000000
--0.538462 -0.100000 0.230769 -1.000000 0.000000 0.000000
-0.230769 0.000000 -0.384615 -1.000000 0.000000 0.000000
-0.230769 0.000000 -0.692308 -1.000000 0.000000 0.000000
-0.230769 -0.100000 -0.692308 -1.000000 0.000000 0.000000
-0.230769 -0.100000 -0.384615 -1.000000 0.000000 0.000000
-0.076923 0.000000 -0.692308 0.000000 0.000000 -1.000000
-0.076923 -0.100000 -0.692308 0.000000 0.000000 -1.000000
--0.076923 -0.100000 -0.692308 0.000000 0.000000 -1.000000
--0.076923 0.000000 -0.692308 0.000000 0.000000 -1.000000
-1.000000 0.000000 1.000000 0.000000 -0.000000 1.000000
--1.000000 0.000000 1.000000 0.000000 -0.000000 1.000000
--1.000000 -0.100000 1.000000 0.000000 -0.000000 1.000000
-1.000000 -0.100000 1.000000 0.000000 -0.000000 1.000000
-0.538462 0.000000 0.692308 -1.000000 0.000000 0.000000
-0.538462 0.000000 -0.538462 -1.000000 0.000000 0.000000
-0.538462 -0.100000 -0.538462 -1.000000 0.000000 0.000000
-0.538462 -0.100000 0.692308 -1.000000 0.000000 0.000000
--0.538462 0.000000 0.538462 0.000000 0.000000 -1.000000
--0.384615 0.000000 0.538462 0.000000 0.000000 -1.000000
--0.384615 -0.100000 0.538462 0.000000 0.000000 -1.000000
--0.538462 -0.100000 0.538462 0.000000 0.000000 -1.000000
--1.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000
-1.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000
-1.000000 -0.100000 -1.000000 0.000000 0.000000 -1.000000
--1.000000 -0.100000 -1.000000 0.000000 0.000000 -1.000000
--0.384615 0.000000 0.538462 -1.000000 0.000000 0.000000
--0.384615 0.000000 0.230769 -1.000000 0.000000 0.000000
--0.384615 -0.100000 0.230769 -1.000000 0.000000 0.000000
--0.384615 -0.100000 0.538462 -1.000000 0.000000 0.000000
-0.384615 0.000000 0.230769 0.000000 0.000000 1.000000
-0.384615 -0.100000 0.230769 0.000000 0.000000 1.000000
-0.538462 -0.100000 0.230769 0.000000 0.000000 1.000000
-0.538462 0.000000 0.230769 0.000000 0.000000 1.000000
-4 0 1 2 3
-4 1 4 5 2
-4 6 5 4 7
-4 3 6 7 0
-4 8 9 10 11
-4 12 13 14 15
-4 16 17 15 14
-4 18 19 20 21
-4 22 23 24 25
-4 23 20 19 24
-4 26 27 28 29
-4 30 31 32 33
-4 34 28 27 35
-4 32 34 35 33
-4 36 37 38 39
-4 40 41 42 43
-4 44 45 46 47
-4 48 49 50 51
-4 52 53 54 55
-4 56 57 58 59
-4 60 61 62 63
-4 64 65 66 67
-4 68 69 70 71
-4 72 73 74 75
-4 76 77 78 79
-4 80 81 82 83
-4 84 85 86 87
-4 88 89 90 91
-4 92 93 94 95
-4 96 97 98 99
-4 100 101 102 103
-4 104 100 103 105
-4 106 107 108 109
-4 110 111 112 113
-4 114 115 116 117
-4 118 119 120 121
-4 122 123 124 125
-4 126 127 128 129
-4 130 92 95 131
-4 132 133 134 135
-4 101 136 137 102
-4 138 139 140 141
-4 136 142 143 137
-4 113 144 145 112
-4 133 138 141 134
-4 93 146 147 94
-4 107 148 149 108
-4 150 151 111 110
-4 127 128 152 153
-4 154 130 131 155
-4 142 118 121 143
-4 148 104 105 149
-4 97 98 151 150
-4 139 132 135 140
-4 144 96 99 145
-4 156 157 158 159
-4 123 160 161 124
-4 146 122 125 147
-4 162 126 129 163
-4 157 114 117 158
-4 160 154 155 161
-4 119 106 109 120
-4 153 162 163 152
-4 115 156 159 116
-4 164 165 166 167
-4 168 169 167 166
-4 170 171 169 168
-4 165 164 171 170
-4 172 173 174 175
-4 176 177 178 179
-4 180 178 177 181
-4 182 183 184 185
-4 186 187 188 189
-4 189 188 185 184
-4 190 191 192 193
-4 194 195 196 197
-4 198 199 193 192
-4 196 195 199 198
-4 200 201 202 203
-4 204 205 206 207
-4 208 209 210 211
-4 212 213 214 215
-4 216 217 218 219
-4 220 221 222 223
-4 224 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-4 236 237 238 239
-4 240 241 242 243
-4 244 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-4 284 285 286 287
diff --git a/src/examples/evas/resources/models/sonic.md2 b/src/examples/evas/resources/models/sonic.md2
deleted file mode 100644
index 228edb9fb7..0000000000
--- a/src/examples/evas/resources/models/sonic.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/resources/models/sweet_home.obj b/src/examples/evas/resources/models/sweet_home.obj
deleted file mode 100644
index 1a52b933d6..0000000000
--- a/src/examples/evas/resources/models/sweet_home.obj
+++ /dev/null
@@ -1,107 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: 'sweet_home.blend'
-# www.blender.org
-v 1.000003 -0.999997 0.000002
-v -0.999997 -1.000003 0.000002
-v -1.000002 0.999998 0.000002
-v 0.999998 1.000002 0.000002
-v 1.000002 -0.999998 2.000002
-v -0.999998 -1.000002 2.000002
-v -1.000002 0.999998 2.000002
-v 0.999997 1.000003 2.000002
-v 0.000002 -1.000000 3.075149
-v -0.000002 1.000000 3.075149
-v 0.666668 -0.644449 2.358384
-v 0.333335 -0.644450 2.716766
-v 0.666667 -0.293067 2.358384
-v 0.333334 -0.293068 2.716766
-v 0.662209 -0.629904 2.991038
-v 0.337794 -0.629904 2.980731
-v 0.662208 -0.307612 2.991038
-v 0.337793 -0.307613 2.980731
-vt 0.013689 0.608350
-vt 0.285640 0.608350
-vt 0.285640 0.978776
-vt 0.013689 0.978776
-vt 0.564957 0.983606
-vt 0.293719 0.983606
-vt 0.293719 0.613180
-vt 0.564957 0.613180
-vt 0.646856 0.021326
-vt 0.083404 0.021326
-vt 0.083369 0.584801
-vt 0.646820 0.584801
-vt 0.949735 0.303064
-vt 0.654355 0.022016
-vt 0.957234 0.303753
-vt 0.654320 0.585490
-vt 0.090869 0.585491
-vt 0.090904 0.022016
-vt 0.820337 0.692442
-vt 0.820337 0.803140
-vt 0.740863 0.803140
-vt 0.740863 0.692442
-vt 0.695284 0.903159
-vt 0.695284 0.830265
-vt 0.768687 0.830265
-vt 0.768687 0.903159
-vt 0.874667 0.789013
-vt 0.874667 0.893367
-vt 0.979009 0.893367
-vt 0.979009 0.789013
-vt 0.567834 0.981515
-vt 0.567834 0.611089
-vt 0.768686 0.903159
-vt 0.768687 0.823686
-vt 0.811715 0.826975
-vt 0.811715 0.899870
-vt 0.591196 0.903159
-vt 0.591196 0.823686
-vt 0.695284 0.826975
-vt 0.695284 0.899870
-vt 0.666035 0.721564
-vt 0.667476 0.661838
-vt 0.740863 0.660019
-vt 0.591196 0.741571
-vt 0.666035 0.660015
-vt 0.666035 0.803140
-vt 0.592658 0.801339
-vt 0.013481 0.981515
-vt 0.104078 0.915663
-vt 0.194676 0.915663
-vt 0.285274 0.981515
-vt 0.194676 0.850582
-vt 0.285274 0.611089
-vt 0.104078 0.850582
-vt 0.013481 0.611089
-vn -0.732233 -0.000002 0.681054
-vn 1.000000 0.000002 0.000000
-vn 0.000002 -1.000000 0.000000
-vn -0.000002 1.000000 -0.000000
-vn -0.732233 -0.000001 -0.681054
-vn -0.031755 -0.000000 0.999496
-vn -0.000000 0.000000 -1.000000
-vn -1.000000 -0.000002 -0.000000
-vn -0.999857 -0.000002 0.016891
-vn 0.999975 0.000002 0.007049
-vn 0.017155 0.999327 0.032422
-vn 0.017160 -0.999327 0.032422
-vn 0.732233 0.000001 0.681054
-vn 0.732233 0.000002 0.681054
-vn 0.732234 0.000002 0.681053
-s off
-f 6/1/1 9/2/1 10/3/1 7/4/1
-f 4/5/2 8/6/2 5/7/2 1/8/2
-f 6/9/3 2/10/3 1/11/3 5/12/3 9/13/3
-f 7/14/4 10/15/4 8/16/4 4/17/4 3/18/4
-f 11/19/5 12/20/5 14/21/5 13/22/5
-f 15/23/6 17/24/6 18/25/6 16/26/6
-f 2/27/7 3/28/7 4/29/7 1/30/7
-f 6/2/8 7/3/8 3/31/8 2/32/8
-f 14/33/9 12/34/9 16/35/9 18/36/9
-f 11/37/10 13/38/10 17/39/10 15/40/10
-f 13/21/11 14/41/11 18/42/11 17/43/11
-f 12/44/12 11/45/12 15/46/12 16/47/12
-f 5/48/13 11/49/13 12/50/13 9/51/13
-f 9/51/14 12/50/14 14/52/14 10/53/14
-f 13/54/14 8/55/14 10/53/14 14/52/14
-f 11/49/15 5/48/15 8/55/15 13/54/15
diff --git a/src/examples/evas/resources/models/sweet_home_only_vertex_coords.obj b/src/examples/evas/resources/models/sweet_home_only_vertex_coords.obj
deleted file mode 100644
index 675b032db0..0000000000
--- a/src/examples/evas/resources/models/sweet_home_only_vertex_coords.obj
+++ /dev/null
@@ -1,40 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: 'sweet_home.blend'
-# www.blender.org
-mtllib sweet_home_only_vertex_coords.mtl
-o Cube
-v 1.000003 -0.999997 0.000002
-v -0.999997 -1.000003 0.000002
-v -1.000002 0.999998 0.000002
-v 0.999998 1.000002 0.000002
-v 1.000002 -0.999998 2.000002
-v -0.999998 -1.000002 2.000002
-v -1.000002 0.999998 2.000002
-v 0.999997 1.000003 2.000002
-v 0.000002 -1.000000 3.075149
-v -0.000002 1.000000 3.075149
-v 0.666668 -0.644449 2.358384
-v 0.333335 -0.644450 2.716766
-v 0.666667 -0.293067 2.358384
-v 0.333334 -0.293068 2.716766
-v 0.662209 -0.629904 2.991038
-v 0.337794 -0.629904 2.980731
-v 0.662208 -0.307612 2.991038
-v 0.337793 -0.307613 2.980731
-usemtl Material
-s off
-f 4 8 5 1
-f 6 2 1 5 9
-f 7 10 8 4 3
-f 11 12 14 13
-f 15 17 18 16
-f 2 3 4 1
-f 6 7 3 2
-f 6 9 10 7
-f 14 12 16 18
-f 11 13 17 15
-f 13 14 18 17
-f 12 11 15 16
-f 5 11 12 9
-f 9 12 14 10
-f 13 8 10 14
-f 11 5 8 13
diff --git a/src/examples/evas/resources/models/sweet_home_without_normals.obj b/src/examples/evas/resources/models/sweet_home_without_normals.obj
deleted file mode 100644
index a535ece5a4..0000000000
--- a/src/examples/evas/resources/models/sweet_home_without_normals.obj
+++ /dev/null
@@ -1,96 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: 'sweet_home.blend'
-# www.blender.org
-mtllib sweet_home_without_normals.mtl
-o Cube
-v 1.000003 -0.999997 0.000002
-v -0.999997 -1.000003 0.000002
-v -1.000002 0.999998 0.000002
-v 0.999998 1.000002 0.000002
-v 1.000002 -0.999998 2.000002
-v -0.999998 -1.000002 2.000002
-v -1.000002 0.999998 2.000002
-v 0.999997 1.000003 2.000002
-v 0.000002 -1.000000 3.075149
-v -0.000002 1.000000 3.075149
-v 0.666668 -0.644449 2.358384
-v 0.333335 -0.644450 2.716766
-v 0.666667 -0.293067 2.358384
-v 0.333334 -0.293068 2.716766
-v 0.662209 -0.629904 2.991038
-v 0.337794 -0.629904 2.980731
-v 0.662208 -0.307612 2.991038
-v 0.337793 -0.307613 2.980731
-vt 0.013689 0.608350
-vt 0.285640 0.608350
-vt 0.285640 0.978776
-vt 0.013689 0.978776
-vt 0.564957 0.983606
-vt 0.293719 0.983606
-vt 0.293719 0.613180
-vt 0.564957 0.613180
-vt 0.646856 0.021326
-vt 0.083404 0.021326
-vt 0.083369 0.584801
-vt 0.646820 0.584801
-vt 0.949735 0.303064
-vt 0.654355 0.022016
-vt 0.957234 0.303753
-vt 0.654320 0.585490
-vt 0.090869 0.585491
-vt 0.090904 0.022016
-vt 0.820337 0.692442
-vt 0.820337 0.803140
-vt 0.740863 0.803140
-vt 0.740863 0.692442
-vt 0.695284 0.903159
-vt 0.695284 0.830265
-vt 0.768687 0.830265
-vt 0.768687 0.903159
-vt 0.874667 0.789013
-vt 0.874667 0.893367
-vt 0.979009 0.893367
-vt 0.979009 0.789013
-vt 0.567834 0.981515
-vt 0.567834 0.611089
-vt 0.768686 0.903159
-vt 0.768687 0.823686
-vt 0.811715 0.826975
-vt 0.811715 0.899870
-vt 0.591196 0.903159
-vt 0.591196 0.823686
-vt 0.695284 0.826975
-vt 0.695284 0.899870
-vt 0.666035 0.721564
-vt 0.667476 0.661838
-vt 0.740863 0.660019
-vt 0.591196 0.741571
-vt 0.666035 0.660015
-vt 0.666035 0.803140
-vt 0.592658 0.801339
-vt 0.013481 0.981515
-vt 0.104078 0.915663
-vt 0.194676 0.915663
-vt 0.285274 0.981515
-vt 0.194676 0.850582
-vt 0.285274 0.611089
-vt 0.104078 0.850582
-vt 0.013481 0.611089
-usemtl Material
-s off
-f 6/1 9/2 10/3 7/4
-usemtl Material_Untitled
-f 4/5 8/6 5/7 1/8
-f 6/9 2/10 1/11 5/12 9/13
-f 7/14 10/15 8/16 4/17 3/18
-f 11/19 12/20 14/21 13/22
-f 15/23 17/24 18/25 16/26
-f 2/27 3/28 4/29 1/30
-f 6/2 7/3 3/31 2/32
-f 14/33 12/34 16/35 18/36
-f 11/37 13/38 17/39 15/40
-f 13/21 14/41 18/42 17/43
-f 12/44 11/45 15/46 16/47
-f 5/48 11/49 12/50 9/51
-f 9/51 12/50 14/52 10/53
-f 13/54 8/55 10/53 14/52
-f 11/49 5/48 8/55 13/54
diff --git a/src/examples/evas/resources/models/sweet_home_without_tex_coords.obj b/src/examples/evas/resources/models/sweet_home_without_tex_coords.obj
deleted file mode 100644
index 50339a28b7..0000000000
--- a/src/examples/evas/resources/models/sweet_home_without_tex_coords.obj
+++ /dev/null
@@ -1,55 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: 'sweet_home.blend'
-# www.blender.org
-mtllib sweet_home_without_tex_coords.mtl
-o Cube
-v 1.000003 -0.999997 0.000002
-v -0.999997 -1.000003 0.000002
-v -1.000002 0.999998 0.000002
-v 0.999998 1.000002 0.000002
-v 1.000002 -0.999998 2.000002
-v -0.999998 -1.000002 2.000002
-v -1.000002 0.999998 2.000002
-v 0.999997 1.000003 2.000002
-v 0.000002 -1.000000 3.075149
-v -0.000002 1.000000 3.075149
-v 0.666668 -0.644449 2.358384
-v 0.333335 -0.644450 2.716766
-v 0.666667 -0.293067 2.358384
-v 0.333334 -0.293068 2.716766
-v 0.662209 -0.629904 2.991038
-v 0.337794 -0.629904 2.980731
-v 0.662208 -0.307612 2.991038
-v 0.337793 -0.307613 2.980731
-vn 1.000000 0.000002 0.000000
-vn 0.000002 -1.000000 0.000000
-vn -0.000002 1.000000 -0.000000
-vn -0.732233 -0.000001 -0.681054
-vn -0.031755 -0.000000 0.999496
-vn -0.000000 0.000000 -1.000000
-vn -1.000000 -0.000002 -0.000000
-vn -0.732233 -0.000002 0.681054
-vn -0.999857 -0.000002 0.016891
-vn 0.999975 0.000002 0.007049
-vn 0.017155 0.999327 0.032422
-vn 0.017160 -0.999327 0.032422
-vn 0.732233 0.000001 0.681054
-vn 0.732233 0.000002 0.681054
-vn 0.732234 0.000002 0.681053
-usemtl Material
-s off
-f 4//1 8//1 5//1 1//1
-f 6//2 2//2 1//2 5//2 9//2
-f 7//3 10//3 8//3 4//3 3//3
-f 11//4 12//4 14//4 13//4
-f 15//5 17//5 18//5 16//5
-f 2//6 3//6 4//6 1//6
-f 6//7 7//7 3//7 2//7
-f 6//8 9//8 10//8 7//8
-f 14//9 12//9 16//9 18//9
-f 11//10 13//10 17//10 15//10
-f 13//11 14//11 18//11 17//11
-f 12//12 11//12 15//12 16//12
-f 5//13 11//13 12//13 9//13
-f 9//14 12//14 14//14 10//14
-f 13//14 8//14 10//14 14//14
-f 11//15 5//15 8//15 13//15
diff --git a/src/examples/evas/shooter/assets/images/brick-stone.jpg b/src/examples/evas/shooter/assets/images/brick-stone.jpg
deleted file mode 100644
index 9bea5d6fb2..0000000000
--- a/src/examples/evas/shooter/assets/images/brick-stone.jpg
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/brick-stone_n.jpg b/src/examples/evas/shooter/assets/images/brick-stone_n.jpg
deleted file mode 100644
index 8c790ccb0d..0000000000
--- a/src/examples/evas/shooter/assets/images/brick-stone_n.jpg
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/bricks.jpg b/src/examples/evas/shooter/assets/images/bricks.jpg
deleted file mode 100644
index 29d163f494..0000000000
--- a/src/examples/evas/shooter/assets/images/bricks.jpg
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/bricks_n.jpg b/src/examples/evas/shooter/assets/images/bricks_n.jpg
deleted file mode 100644
index b323050ea1..0000000000
--- a/src/examples/evas/shooter/assets/images/bricks_n.jpg
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/eagle.png b/src/examples/evas/shooter/assets/images/eagle.png
deleted file mode 100644
index b0e1b4aa7d..0000000000
--- a/src/examples/evas/shooter/assets/images/eagle.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/gazebo.png b/src/examples/evas/shooter/assets/images/gazebo.png
deleted file mode 100644
index 0caed46db7..0000000000
--- a/src/examples/evas/shooter/assets/images/gazebo.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/gazebo_b_n.png b/src/examples/evas/shooter/assets/images/gazebo_b_n.png
deleted file mode 100644
index 6cfe9a7bea..0000000000
--- a/src/examples/evas/shooter/assets/images/gazebo_b_n.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/gazebo_t.png b/src/examples/evas/shooter/assets/images/gazebo_t.png
deleted file mode 100644
index d8f829ce06..0000000000
--- a/src/examples/evas/shooter/assets/images/gazebo_t.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/gazebo_t_n.png b/src/examples/evas/shooter/assets/images/gazebo_t_n.png
deleted file mode 100644
index 6fa4a8219c..0000000000
--- a/src/examples/evas/shooter/assets/images/gazebo_t_n.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/gazebo_t_t.png b/src/examples/evas/shooter/assets/images/gazebo_t_t.png
deleted file mode 100644
index a9edd15f21..0000000000
--- a/src/examples/evas/shooter/assets/images/gazebo_t_t.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/snake.png b/src/examples/evas/shooter/assets/images/snake.png
deleted file mode 100644
index 8e0c83557c..0000000000
--- a/src/examples/evas/shooter/assets/images/snake.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/snake_n.png b/src/examples/evas/shooter/assets/images/snake_n.png
deleted file mode 100644
index 829ae42de1..0000000000
--- a/src/examples/evas/shooter/assets/images/snake_n.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/soldier.png b/src/examples/evas/shooter/assets/images/soldier.png
deleted file mode 100644
index ee5b171a4e..0000000000
--- a/src/examples/evas/shooter/assets/images/soldier.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/images/warrior.png b/src/examples/evas/shooter/assets/images/warrior.png
deleted file mode 100644
index 151a16f02c..0000000000
--- a/src/examples/evas/shooter/assets/images/warrior.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/models/eagle.md2 b/src/examples/evas/shooter/assets/models/eagle.md2
deleted file mode 100644
index 0c3136d06c..0000000000
--- a/src/examples/evas/shooter/assets/models/eagle.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/models/gazebo_b.md2 b/src/examples/evas/shooter/assets/models/gazebo_b.md2
deleted file mode 100644
index 60a358de55..0000000000
--- a/src/examples/evas/shooter/assets/models/gazebo_b.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/models/gazebo_t.md2 b/src/examples/evas/shooter/assets/models/gazebo_t.md2
deleted file mode 100644
index aea6ab8433..0000000000
--- a/src/examples/evas/shooter/assets/models/gazebo_t.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/models/snake.md2 b/src/examples/evas/shooter/assets/models/snake.md2
deleted file mode 100644
index 0cb6c4eb8f..0000000000
--- a/src/examples/evas/shooter/assets/models/snake.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/models/soldier.md2 b/src/examples/evas/shooter/assets/models/soldier.md2
deleted file mode 100644
index c955877657..0000000000
--- a/src/examples/evas/shooter/assets/models/soldier.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/models/soldier_jump.md2 b/src/examples/evas/shooter/assets/models/soldier_jump.md2
deleted file mode 100644
index 620b770f54..0000000000
--- a/src/examples/evas/shooter/assets/models/soldier_jump.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/assets/models/tommy.ply b/src/examples/evas/shooter/assets/models/tommy.ply
deleted file mode 100644
index 0381e66292..0000000000
--- a/src/examples/evas/shooter/assets/models/tommy.ply
+++ /dev/null
@@ -1,3558 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 2724
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 821
-property list uchar uint vertex_indices
-end_header
-4.730700 2.853000 0.027700 0.595871 -0.803017 0.010101
-4.731200 2.853600 0.045900 0.595871 -0.803017 0.010101
-4.170100 2.437600 0.074400 0.595871 -0.803017 0.010101
-4.730700 2.853000 0.027700 0.595695 -0.803184 0.006505
-4.170100 2.437600 0.074400 0.595695 -0.803184 0.006505
-4.291700 2.527600 0.051400 0.595695 -0.803184 0.006505
-4.731800 2.854300 0.067300 0.027324 0.031589 0.999127
-4.672800 2.933800 0.066400 0.027324 0.031589 0.999127
-4.111600 2.517800 0.094900 0.027324 0.031589 0.999127
-4.731800 2.854300 0.067300 0.028575 0.029285 0.999163
-4.111600 2.517800 0.094900 0.028575 0.029285 0.999163
-3.942700 2.392600 0.103400 0.028575 0.029285 0.999163
-4.731800 2.854300 0.067300 0.027187 0.031655 0.999129
-3.942700 2.392600 0.103400 0.027187 0.031655 0.999129
-3.556100 2.106000 0.123000 0.027187 0.031655 0.999129
-4.731800 2.854300 0.067300 0.027277 0.031514 0.999131
-3.556100 2.106000 0.123000 0.027277 0.031514 0.999131
-3.615100 2.026400 0.123900 0.027277 0.031514 0.999131
-4.731800 2.854300 0.067300 0.246119 -0.268241 0.931382
-3.615100 2.026400 0.123900 0.246119 -0.268241 0.931382
-4.001700 2.313000 0.104300 0.246119 -0.268241 0.931382
-4.731800 2.854300 0.067300 -0.596277 0.802254 -0.029029
-4.001700 2.313000 0.104300 -0.596277 0.802254 -0.029029
-4.170700 2.438300 0.095800 -0.596277 0.802254 -0.029029
-4.730700 2.853000 0.027700 -0.029386 -0.033118 -0.999019
-4.291700 2.527600 0.051400 -0.029386 -0.033118 -0.999019
-4.232700 2.607100 0.050500 -0.029386 -0.033118 -0.999019
-4.730700 2.853000 0.027700 -0.029401 -0.033087 -0.999020
-4.232700 2.607100 0.050500 -0.029401 -0.033087 -0.999020
-4.671700 2.932600 0.026800 -0.029401 -0.033087 -0.999020
-4.672200 2.933100 0.045000 -0.595788 0.803122 -0.005688
-4.671700 2.932600 0.026800 -0.595788 0.803122 -0.005688
-4.232700 2.607100 0.050500 -0.595788 0.803122 -0.005688
-4.672200 2.933100 0.045000 -0.595795 0.803103 -0.007359
-4.232700 2.607100 0.050500 -0.595795 0.803103 -0.007359
-4.111100 2.517100 0.073500 -0.595795 0.803103 -0.007359
-4.091000 2.545700 0.094600 -0.595856 0.803034 -0.009565
-4.652100 2.961700 0.066100 -0.595856 0.803034 -0.009565
-4.651500 2.961000 0.044700 -0.595856 0.803034 -0.009565
-4.091000 2.545700 0.094600 -0.595856 0.803034 -0.009564
-4.651500 2.961000 0.044700 -0.595856 0.803034 -0.009564
-4.090400 2.545000 0.073200 -0.595856 0.803034 -0.009564
-4.752500 2.826400 0.067700 0.595859 -0.802994 0.012352
-4.191300 2.410400 0.096100 0.595859 -0.802994 0.012352
-4.190800 2.409700 0.074700 0.595859 -0.802994 0.012352
-4.752500 2.826400 0.067700 0.595855 -0.803036 0.009521
-4.190800 2.409700 0.074700 0.595855 -0.803036 0.009521
-4.751900 2.825700 0.046200 0.595855 -0.803036 0.009521
-4.191300 2.410400 0.096100 0.025770 0.033444 0.999108
-4.752500 2.826400 0.067700 0.025770 0.033444 0.999108
-4.731800 2.854300 0.067300 0.025770 0.033444 0.999108
-4.191300 2.410400 0.096100 0.027649 0.031158 0.999132
-4.731800 2.854300 0.067300 0.027649 0.031158 0.999132
-4.170700 2.438300 0.095800 0.027649 0.031158 0.999132
-4.751900 2.825700 0.046200 -0.027601 -0.031222 -0.999131
-4.190800 2.409700 0.074700 -0.027601 -0.031222 -0.999131
-4.170100 2.437600 0.074400 -0.027601 -0.031222 -0.999131
-4.751900 2.825700 0.046200 -0.027601 -0.031222 -0.999131
-4.170100 2.437600 0.074400 -0.027601 -0.031222 -0.999131
-4.731200 2.853600 0.045900 -0.027601 -0.031222 -0.999131
-4.090400 2.545000 0.073200 -0.027601 -0.031222 -0.999131
-4.651500 2.961000 0.044700 -0.027601 -0.031222 -0.999131
-4.672200 2.933100 0.045000 -0.027601 -0.031222 -0.999131
-4.090400 2.545000 0.073200 -0.027601 -0.031222 -0.999131
-4.672200 2.933100 0.045000 -0.027601 -0.031222 -0.999131
-4.111100 2.517100 0.073500 -0.027601 -0.031222 -0.999131
-4.652100 2.961700 0.066100 0.027649 0.031158 0.999132
-4.091000 2.545700 0.094600 0.027649 0.031158 0.999132
-4.111600 2.517800 0.094900 0.027649 0.031158 0.999132
-4.652100 2.961700 0.066100 0.027598 0.031219 0.999131
-4.111600 2.517800 0.094900 0.027598 0.031219 0.999131
-4.672800 2.933800 0.066400 0.027598 0.031219 0.999131
-3.679200 1.590500 -0.100200 0.593504 -0.792668 0.139393
-3.660000 1.576300 -0.099200 0.593504 -0.792668 0.139393
-3.666000 1.560200 -0.216300 0.593504 -0.792668 0.139393
-3.685200 1.574400 -0.217300 0.593504 -0.792668 0.139393
-3.393300 2.316700 0.081300 -0.373963 0.628487 0.682023
-3.232600 2.206400 0.096200 -0.373963 0.628487 0.682023
-3.546500 2.168900 0.301500 -0.373963 0.628487 0.682023
-3.563700 2.181600 0.300600 -0.373963 0.628487 0.682023
-3.336300 1.932900 0.314700 0.027395 0.031480 0.999129
-3.233900 1.894600 0.318700 0.027395 0.031480 0.999129
-3.181000 1.855400 0.321400 0.027395 0.031480 0.999129
-3.261500 1.746800 0.322600 0.027395 0.031480 0.999129
-3.614800 1.691200 0.102000 0.466260 -0.532912 0.706121
-3.767100 1.812800 0.086900 0.466260 -0.532912 0.706121
-3.684900 2.018200 0.302500 0.466260 -0.532912 0.706121
-3.559400 1.925100 0.308800 0.466260 -0.532912 0.706121
-2.097800 0.965800 0.389300 0.473599 -0.655424 0.588322
-1.938700 0.796800 0.329100 0.473599 -0.655424 0.588322
-3.261500 1.746800 0.322600 0.473599 -0.655424 0.588322
-1.911100 0.828300 0.245500 -0.066249 -0.058982 -0.996058
-2.530300 1.304800 0.176100 -0.066249 -0.058982 -0.996058
-2.545900 1.283900 0.176300 -0.066249 -0.058982 -0.996058
-2.139700 0.927600 0.288600 0.584914 -0.809303 0.053895
-3.059900 1.589400 0.239600 0.584914 -0.809303 0.053895
-3.264500 1.742200 0.313600 0.584914 -0.809303 0.053895
-3.215100 2.186200 -0.544800 -0.343418 0.493757 -0.798917
-3.376200 2.296900 -0.545600 -0.343418 0.493757 -0.798917
-3.429000 2.220900 -0.615300 -0.343418 0.493757 -0.798917
-3.269100 2.108500 -0.616000 -0.343418 0.493757 -0.798917
-3.614800 1.691200 0.102000 0.529233 -0.587240 0.612423
-3.655200 1.630400 0.008700 0.529233 -0.587240 0.612423
-3.806600 1.753300 -0.004200 0.529233 -0.587240 0.612423
-3.767100 1.812800 0.086900 0.529233 -0.587240 0.612423
-2.109900 0.974700 0.388700 0.135643 -0.118100 0.983694
-2.097800 0.965800 0.389300 0.135643 -0.118100 0.983694
-3.261500 1.746800 0.322600 0.135643 -0.118100 0.983694
-1.943800 0.787800 0.298400 0.580729 -0.805494 0.118040
-2.139700 0.927600 0.288600 0.580729 -0.805494 0.118040
-3.264500 1.742200 0.313600 0.580729 -0.805494 0.118040
-1.905700 0.824300 0.249300 -0.410182 -0.470232 -0.781430
-1.908200 0.826100 0.246900 -0.410182 -0.470232 -0.781430
-1.917700 0.813500 0.249500 -0.410182 -0.470232 -0.781430
-1.914800 0.812200 0.251800 -0.410182 -0.470232 -0.781430
-3.794500 1.739300 -0.447500 0.579742 -0.722910 -0.375900
-3.823900 1.707100 -0.340200 0.579742 -0.722910 -0.375900
-3.672800 1.583100 -0.334800 0.579742 -0.722910 -0.375900
-3.642800 1.616100 -0.444500 0.579742 -0.722910 -0.375900
-3.336300 1.932900 0.314700 0.027271 0.031453 0.999133
-3.261500 1.746800 0.322600 0.027271 0.031453 0.999133
-3.684900 2.018200 0.302500 0.027271 0.031453 0.999133
-3.333000 2.019200 -0.660300 -0.254762 0.277271 -0.926400
-3.313800 2.004900 -0.659300 -0.254762 0.277271 -0.926400
-3.249900 2.094200 -0.615000 -0.254762 0.277271 -0.926400
-3.269100 2.108500 -0.616000 -0.254762 0.277271 -0.926400
-1.911100 0.828300 0.245500 -0.025374 -0.118457 -0.992635
-2.545900 1.283900 0.176300 -0.025374 -0.118457 -0.992635
-2.599300 1.268300 0.175400 -0.025374 -0.118457 -0.992635
-1.920800 0.815300 0.248200 -0.025374 -0.118457 -0.992635
-2.108600 0.976400 0.388700 0.037900 0.028984 0.998861
-2.109900 0.974700 0.388700 0.037900 0.028984 0.998861
-3.261500 1.746800 0.322600 0.037900 0.028984 0.998861
-1.888100 0.865000 0.328300 -0.534954 0.701168 0.471368
-3.181000 1.855400 0.321400 -0.534954 0.701168 0.471368
-3.177500 1.859500 0.312300 -0.534954 0.701168 0.471368
-1.883300 0.870500 0.313700 -0.534954 0.701168 0.471368
-1.942700 0.790400 0.314600 0.576173 -0.799977 0.167513
-1.943800 0.787800 0.298400 0.576173 -0.799977 0.167513
-3.264500 1.742200 0.313600 0.576173 -0.799977 0.167513
-1.913000 0.814400 0.338600 -0.656396 -0.672698 0.341500
-1.919800 0.804800 0.332700 -0.656396 -0.672698 0.341500
-1.922200 0.803900 0.335600 -0.656396 -0.672698 0.341500
-1.914800 0.814400 0.342000 -0.656396 -0.672698 0.341500
-3.453700 1.816400 -0.657200 -0.711817 -0.665928 -0.223285
-3.520100 1.729900 -0.610900 -0.711817 -0.665928 -0.223285
-3.244200 1.772400 0.141900 -0.711817 -0.665928 -0.223285
-1.919800 0.804800 0.332700 -0.605270 -0.745903 0.277988
-1.925100 0.797000 0.323400 -0.605270 -0.745903 0.277988
-1.928000 0.795500 0.325600 -0.605270 -0.745903 0.277988
-1.922200 0.803900 0.335600 -0.605270 -0.745903 0.277988
-3.539400 1.744200 -0.611900 0.340181 -0.514768 -0.786951
-3.597300 1.671000 -0.539000 0.340181 -0.514768 -0.786951
-3.578100 1.656800 -0.538000 0.340181 -0.514768 -0.786951
-3.520100 1.729900 -0.610900 0.340181 -0.514768 -0.786951
-1.925400 0.793900 0.286800 -0.791243 -0.610316 0.038057
-1.926000 0.794600 0.310500 -0.791243 -0.610316 0.038057
-1.921800 0.797900 0.276100 -0.791243 -0.610316 0.038057
-3.655200 1.630400 0.008700 0.561650 -0.729334 0.390666
-3.636000 1.616100 0.009700 0.561650 -0.729334 0.390666
-3.660000 1.576300 -0.099200 0.561650 -0.729334 0.390666
-3.679200 1.590500 -0.100200 0.561650 -0.729334 0.390666
-3.628400 1.949200 -0.656500 0.826952 0.467383 -0.312576
-3.731500 2.109800 -0.143600 0.826952 0.467383 -0.312576
-3.693300 1.864600 -0.611300 0.826952 0.467383 -0.312576
-1.929800 0.803800 0.255800 0.193302 -0.431161 -0.881326
-1.920800 0.815300 0.248200 0.193302 -0.431161 -0.881326
-2.599300 1.268300 0.175400 0.193302 -0.431161 -0.881326
-1.881300 0.872000 0.297400 -0.600577 0.786119 0.146029
-1.883300 0.870500 0.313700 -0.600577 0.786119 0.146029
-3.177500 1.859500 0.312300 -0.600577 0.786119 0.146029
-1.895500 0.834400 0.254600 -0.709923 -0.420477 -0.564985
-1.896700 0.836500 0.251500 -0.709923 -0.420477 -0.564985
-1.905700 0.824300 0.249300 -0.709923 -0.420477 -0.564985
-1.903900 0.823000 0.252500 -0.709923 -0.420477 -0.564985
-3.189200 1.839400 0.250000 -0.802750 -0.594932 0.040606
-3.264500 1.742200 0.313600 -0.802750 -0.594932 0.040606
-3.261500 1.746800 0.322600 -0.802750 -0.594932 0.040606
-3.181000 1.855400 0.321400 -0.802750 -0.594932 0.040606
-1.916500 0.804500 0.267600 -0.801368 -0.597084 0.036066
-1.921800 0.797900 0.276100 -0.801368 -0.597084 0.036066
-1.902900 0.822300 0.260100 -0.801368 -0.597084 0.036066
-1.937000 0.794900 0.267500 0.352155 -0.627734 -0.694217
-1.929800 0.803800 0.255800 0.352155 -0.627734 -0.694217
-2.599300 1.268300 0.175400 0.352155 -0.627734 -0.694217
-3.059900 1.589400 0.239600 0.584707 -0.809401 0.054668
-3.231100 1.712500 0.231100 0.584707 -0.809401 0.054668
-3.264500 1.742200 0.313600 0.584707 -0.809401 0.054668
-2.072100 1.018800 0.287600 -0.603959 0.791327 0.095050
-1.881300 0.872000 0.297400 -0.603959 0.791327 0.095050
-3.177500 1.859500 0.312300 -0.603959 0.791327 0.095050
-1.926400 0.802200 0.256900 -0.014820 -0.557561 -0.830004
-1.917700 0.813500 0.249500 -0.014820 -0.557561 -0.830004
-1.920800 0.815300 0.248200 -0.014820 -0.557561 -0.830004
-1.929800 0.803800 0.255800 -0.014820 -0.557561 -0.830004
-1.901500 0.842000 0.346600 -0.481043 0.190403 0.855771
-1.904300 0.844500 0.347600 -0.481043 0.190403 0.855771
-1.895300 0.856000 0.340000 -0.481043 0.190403 0.855771
-1.892800 0.853200 0.339200 -0.481043 0.190403 0.855771
-1.910000 0.812900 0.262000 -0.800641 -0.598296 0.031870
-1.916500 0.804500 0.267600 -0.800641 -0.598296 0.031870
-1.902900 0.822300 0.260100 -0.800641 -0.598296 0.031870
-3.533300 2.089200 0.304400 0.027312 0.031579 0.999128
-3.336300 1.932900 0.314700 0.027312 0.031579 0.999128
-3.684900 2.018200 0.302500 0.027312 0.031579 0.999128
-3.640300 2.141400 0.299800 0.027312 0.031579 0.999128
-1.941800 0.789400 0.282200 0.480655 -0.758173 -0.440619
-1.937000 0.794900 0.267500 0.480655 -0.758173 -0.440619
-2.599300 1.268300 0.175400 0.480655 -0.758173 -0.440619
-2.909500 1.658600 0.241500 -0.605473 0.795057 0.035876
-2.072100 1.018800 0.287600 -0.605473 0.795057 0.035876
-3.177500 1.859500 0.312300 -0.605473 0.795057 0.035876
-1.899300 0.839400 0.344600 -0.663675 -0.020002 0.747753
-1.901500 0.842000 0.346600 -0.663675 -0.020002 0.747753
-1.892800 0.853200 0.339200 -0.663675 -0.020002 0.747753
-1.891000 0.850200 0.337500 -0.663675 -0.020002 0.747753
-3.249900 2.094200 -0.615000 -0.841868 -0.485835 -0.234995
-3.313800 2.004900 -0.659300 -0.841868 -0.485835 -0.234995
-3.142200 2.139200 -0.322200 -0.841868 -0.485835 -0.234995
-1.945000 0.791600 0.282000 0.522412 -0.789228 -0.322808
-1.941800 0.789400 0.282200 0.522412 -0.789228 -0.322808
-2.599300 1.268300 0.175400 0.522412 -0.789228 -0.322808
-1.926400 0.802200 0.256900 0.136196 -0.747045 -0.650672
-1.929800 0.803800 0.255800 0.136196 -0.747045 -0.650672
-1.937000 0.794900 0.267500 0.136196 -0.747045 -0.650672
-1.933500 0.793500 0.268400 0.136196 -0.747045 -0.650672
-2.976000 1.709400 0.238100 -0.605493 0.795035 0.036012
-2.909500 1.658600 0.241500 -0.605493 0.795035 0.036012
-3.177500 1.859500 0.312300 -0.605493 0.795035 0.036012
-1.920200 0.801600 0.261500 -0.483834 -0.712066 -0.508788
-1.912400 0.811700 0.254800 -0.483834 -0.712066 -0.508788
-1.914800 0.812200 0.251800 -0.483834 -0.712066 -0.508788
-1.923100 0.801500 0.258900 -0.483834 -0.712066 -0.508788
-1.895300 0.856000 0.340000 -0.474164 0.532331 0.701279
-2.095300 0.969200 0.389300 -0.474164 0.532331 0.701279
-1.888100 0.865000 0.328300 -0.474164 0.532331 0.701279
-3.402600 1.924400 -0.674600 0.052879 -0.134403 -0.989515
-3.472900 1.830600 -0.658100 0.052879 -0.134403 -0.989515
-3.453700 1.816400 -0.657200 0.052879 -0.134403 -0.989515
-3.383300 1.910200 -0.673700 0.052879 -0.134403 -0.989515
-3.167900 2.247100 0.002600 -0.917722 0.233837 0.321101
-3.137900 2.280000 -0.107100 -0.917722 0.233837 0.321101
-3.177500 1.859500 0.312300 -0.917722 0.233837 0.321101
-1.925100 0.797000 0.323400 -0.574336 -0.795032 0.195094
-1.928400 0.791800 0.311700 -0.574336 -0.795032 0.195094
-1.931500 0.789800 0.312900 -0.574336 -0.795032 0.195094
-1.928000 0.795500 0.325600 -0.574336 -0.795032 0.195094
-1.945000 0.791600 0.282000 0.566823 -0.810732 -0.146373
-2.599300 1.268300 0.175400 0.566823 -0.810732 -0.146373
-1.943800 0.787800 0.298400 0.566823 -0.810732 -0.146373
-3.140300 1.834900 0.229700 -0.605468 0.795060 0.035895
-2.976000 1.709400 0.238100 -0.605468 0.795060 0.035895
-3.177500 1.859500 0.312300 -0.605468 0.795060 0.035895
-1.916500 0.804500 0.267600 -0.793765 -0.608220 0.002538
-1.910000 0.812900 0.262000 -0.793765 -0.608220 0.002538
-1.910800 0.811900 0.258300 -0.793765 -0.608220 0.002538
-1.917900 0.802600 0.264400 -0.793765 -0.608220 0.002538
-3.504400 1.614500 -0.126200 -0.459501 -0.877469 -0.137500
-3.623600 1.601800 -0.443500 -0.459501 -0.877469 -0.137500
-3.653600 1.568900 -0.333800 -0.459501 -0.877469 -0.137500
-1.912400 0.811700 0.254800 -0.597074 -0.565742 -0.568717
-1.903900 0.823000 0.252500 -0.597074 -0.565742 -0.568717
-1.905700 0.824300 0.249300 -0.597074 -0.565742 -0.568717
-1.914800 0.812200 0.251800 -0.597074 -0.565742 -0.568717
-3.195900 2.171900 -0.543800 -0.888811 -0.370273 -0.270023
-3.249900 2.094200 -0.615000 -0.888811 -0.370273 -0.270023
-3.142200 2.139200 -0.322200 -0.888811 -0.370273 -0.270023
-3.623600 1.601800 -0.443500 0.540049 -0.753904 -0.374134
-3.642800 1.616100 -0.444500 0.540049 -0.753904 -0.374134
-3.672800 1.583100 -0.334800 0.540049 -0.753904 -0.374134
-3.653600 1.568900 -0.333800 0.540049 -0.753904 -0.374134
-1.938200 0.788100 0.282700 0.251876 -0.875821 -0.411699
-1.933500 0.793500 0.268400 0.251876 -0.875821 -0.411699
-1.937000 0.794900 0.267500 0.251876 -0.875821 -0.411699
-1.941800 0.789400 0.282200 0.251876 -0.875821 -0.411699
-3.215100 2.186200 -0.544800 -0.386219 0.462761 -0.797927
-3.269100 2.108500 -0.616000 -0.386219 0.462761 -0.797927
-3.249900 2.094200 -0.615000 -0.386219 0.462761 -0.797927
-3.195900 2.171900 -0.543800 -0.386219 0.462761 -0.797927
-1.921800 0.797900 0.276100 -0.784025 -0.620613 0.012039
-1.916500 0.804500 0.267600 -0.784025 -0.620613 0.012039
-1.917900 0.802600 0.264400 -0.784025 -0.620613 0.012039
-1.923800 0.795400 0.273900 -0.784025 -0.620613 0.012039
-1.895300 0.856000 0.340000 -0.631658 0.375116 0.678452
-1.888100 0.865000 0.328300 -0.631658 0.375116 0.678452
-1.885700 0.861900 0.327800 -0.631658 0.375116 0.678452
-1.892800 0.853200 0.339200 -0.631658 0.375116 0.678452
-1.941800 0.789400 0.282200 0.432616 -0.890429 -0.141350
-1.945000 0.791600 0.282000 0.432616 -0.890429 -0.141350
-1.943800 0.787800 0.298400 0.432616 -0.890429 -0.141350
-1.940100 0.786600 0.298500 0.432616 -0.890429 -0.141350
-1.897900 0.834200 0.334700 -0.809149 -0.584437 0.060910
-1.897400 0.835400 0.338300 -0.809149 -0.584437 0.060910
-1.890200 0.844600 0.332200 -0.809149 -0.584437 0.060910
-1.886100 0.849200 0.320600 -0.809149 -0.584437 0.060910
-3.636000 1.616100 0.009700 -0.046477 -0.941482 0.333843
-3.264500 1.742200 0.313600 -0.046477 -0.941482 0.333843
-3.660000 1.576300 -0.099200 -0.046477 -0.941482 0.333843
-1.885700 0.861900 0.327800 -0.747694 0.502695 0.433879
-1.888100 0.865000 0.328300 -0.747694 0.502695 0.433879
-1.883300 0.870500 0.313700 -0.747694 0.502695 0.433879
-1.881000 0.867300 0.313400 -0.747694 0.502695 0.433879
-1.938200 0.788100 0.282700 0.321120 -0.938389 -0.127703
-1.941800 0.789400 0.282200 0.321120 -0.938389 -0.127703
-1.940100 0.786600 0.298500 0.321120 -0.938389 -0.127703
-1.879700 0.863700 0.312900 -0.883515 0.263057 0.387559
-1.884200 0.858600 0.326600 -0.883515 0.263057 0.387559
-1.885700 0.861900 0.327800 -0.883515 0.263057 0.387559
-1.881000 0.867300 0.313400 -0.883515 0.263057 0.387559
-3.125500 2.288700 -0.224500 -0.989059 -0.147191 -0.009859
-3.142200 2.139200 -0.322200 -0.989059 -0.147191 -0.009859
-3.188200 1.838200 0.211200 -0.989059 -0.147191 -0.009859
-3.177500 1.859500 0.312300 -0.989059 -0.147191 -0.009859
-1.914800 0.812200 0.251800 -0.268016 -0.665952 -0.696186
-1.917700 0.813500 0.249500 -0.268016 -0.665952 -0.696186
-1.926400 0.802200 0.256900 -0.268016 -0.665952 -0.696186
-1.923100 0.801500 0.258900 -0.268016 -0.665952 -0.696186
-3.140300 1.834900 0.229700 -0.578134 0.815756 0.017420
-3.177500 1.859500 0.312300 -0.578134 0.815756 0.017420
-3.185900 1.867200 0.230500 -0.578134 0.815756 0.017420
-1.921800 0.797900 0.276100 -0.775255 -0.631239 0.022757
-1.923800 0.795400 0.273900 -0.775255 -0.631239 0.022757
-1.927700 0.791000 0.285700 -0.775255 -0.631239 0.022757
-1.925400 0.793900 0.286800 -0.775255 -0.631239 0.022757
-1.886100 0.849200 0.320600 -0.820014 -0.568720 0.064304
-1.890200 0.844600 0.332200 -0.820014 -0.568720 0.064304
-1.884400 0.851900 0.322800 -0.820014 -0.568720 0.064304
-3.155500 2.232800 -0.450600 -0.939069 -0.224098 -0.260632
-3.195900 2.171900 -0.543800 -0.939069 -0.224098 -0.260632
-3.142200 2.139200 -0.322200 -0.939069 -0.224098 -0.260632
-1.929900 0.793100 0.269800 -0.137200 -0.826568 -0.545858
-1.923100 0.801500 0.258900 -0.137200 -0.826568 -0.545858
-1.926400 0.802200 0.256900 -0.137200 -0.826568 -0.545858
-1.933500 0.793500 0.268400 -0.137200 -0.826568 -0.545858
-1.879100 0.868900 0.297600 -0.805288 0.572761 0.153153
-1.881000 0.867300 0.313400 -0.805288 0.572761 0.153153
-1.883300 0.870500 0.313700 -0.805288 0.572761 0.153153
-1.881300 0.872000 0.297400 -0.805288 0.572761 0.153153
-2.139700 0.927600 0.288600 0.584021 -0.811727 0.004388
-2.705900 1.334800 0.257300 0.584021 -0.811727 0.004388
-3.059900 1.589400 0.239600 0.584021 -0.811727 0.004388
-3.173000 1.854300 0.148500 -0.577172 0.815760 -0.037535
-3.140300 1.834900 0.229700 -0.577172 0.815760 -0.037535
-3.185900 1.867200 0.230500 -0.577172 0.815760 -0.037535
-1.934400 0.787900 0.283500 0.027472 -0.994938 -0.096666
-1.938200 0.788100 0.282700 0.027472 -0.994938 -0.096666
-1.940100 0.786600 0.298500 0.027472 -0.994938 -0.096666
-1.936200 0.786500 0.298600 0.027472 -0.994938 -0.096666
-1.879700 0.863700 0.312900 -0.938002 0.315324 0.143953
-1.881000 0.867300 0.313400 -0.938002 0.315324 0.143953
-1.879100 0.868900 0.297600 -0.938002 0.315324 0.143953
-1.877900 0.865200 0.297800 -0.938002 0.315324 0.143953
-3.131500 2.272600 -0.341700 -0.978565 -0.104436 -0.177493
-3.155500 2.232800 -0.450600 -0.978565 -0.104436 -0.177493
-3.142200 2.139200 -0.322200 -0.978565 -0.104436 -0.177493
-1.918200 0.806400 0.329500 -0.794395 -0.602646 0.075857
-1.919800 0.804800 0.332700 -0.794395 -0.602646 0.075857
-1.913000 0.814400 0.338600 -0.794395 -0.602646 0.075857
-1.905000 0.824800 0.336600 -0.794395 -0.602646 0.075857
-3.187400 1.863500 0.207400 0.012693 0.987463 -0.157341
-3.173000 1.854300 0.148500 0.012693 0.987463 -0.157341
-3.185900 1.867200 0.230500 0.012693 0.987463 -0.157341
-3.504400 1.614500 -0.126200 -0.335461 -0.941429 -0.034304
-3.653600 1.568900 -0.333800 -0.335461 -0.941429 -0.034304
-3.666000 1.560200 -0.216300 -0.335461 -0.941429 -0.034304
-3.215100 2.186200 -0.544800 -0.490149 0.617228 -0.615454
-3.195900 2.171900 -0.543800 -0.490149 0.617228 -0.615454
-3.155500 2.232800 -0.450600 -0.490149 0.617228 -0.615454
-3.174700 2.247000 -0.451600 -0.490149 0.617228 -0.615454
-3.504700 1.614800 -0.118200 -0.255509 -0.960037 0.114214
-3.504400 1.614500 -0.126200 -0.255509 -0.960037 0.114214
-3.666000 1.560200 -0.216300 -0.255509 -0.960037 0.114214
-3.660000 1.576300 -0.099200 -0.255509 -0.960037 0.114214
-1.933500 0.793500 0.268400 -0.026878 -0.937780 -0.346187
-1.938200 0.788100 0.282700 -0.026878 -0.937780 -0.346187
-1.934400 0.787900 0.283500 -0.026878 -0.937780 -0.346187
-1.929900 0.793100 0.269800 -0.026878 -0.937780 -0.346187
-1.939000 0.789100 0.314300 0.260531 -0.854309 0.449755
-1.942700 0.790400 0.314600 0.260531 -0.854309 0.449755
-1.938700 0.796800 0.329100 0.260531 -0.854309 0.449755
-1.935100 0.795400 0.328500 0.260531 -0.854309 0.449755
-1.905200 0.825000 0.340500 -0.776229 -0.504723 0.377788
-1.906400 0.825900 0.344100 -0.776229 -0.504723 0.377788
-1.897900 0.837200 0.341800 -0.776229 -0.504723 0.377788
-1.897400 0.835400 0.338300 -0.776229 -0.504723 0.377788
-1.880100 0.866300 0.281800 -0.812763 0.564577 -0.143769
-1.879100 0.868900 0.297600 -0.812763 0.564577 -0.143769
-1.881300 0.872000 0.297400 -0.812763 0.564577 -0.143769
-1.882400 0.869500 0.281300 -0.812763 0.564577 -0.143769
-1.935200 0.788900 0.313700 0.028164 -0.986969 0.158425
-1.936200 0.786500 0.298600 0.028164 -0.986969 0.158425
-1.940100 0.786600 0.298500 0.028164 -0.986969 0.158425
-1.939000 0.789100 0.314300 0.028164 -0.986969 0.158425
-1.882600 0.856700 0.269100 -0.906286 0.231668 -0.353518
-1.878900 0.862800 0.282700 -0.906286 0.231668 -0.353518
-1.880100 0.866300 0.281800 -0.906286 0.231668 -0.353518
-1.884100 0.860100 0.267600 -0.906286 0.231668 -0.353518
-3.792100 2.090400 0.045800 0.980815 0.172609 -0.090598
-3.836000 1.698600 -0.225400 0.980815 0.172609 -0.090598
-3.823900 1.707100 -0.340200 0.980815 0.172609 -0.090598
-1.925400 0.793900 0.286800 -0.788510 -0.614021 0.035080
-1.927700 0.791000 0.285700 -0.788510 -0.614021 0.035080
-1.929200 0.789700 0.298700 -0.788510 -0.614021 0.035080
-1.926000 0.794600 0.310500 -0.788510 -0.614021 0.035080
-3.181000 1.855400 0.321400 -0.803041 -0.594512 0.040998
-3.177500 1.859500 0.312300 -0.803041 -0.594512 0.040998
-3.189200 1.839400 0.250000 -0.803041 -0.594512 0.040998
-3.125500 2.288700 -0.224500 -0.995559 -0.085585 -0.039210
-3.131500 2.272600 -0.341700 -0.995559 -0.085585 -0.039210
-3.142200 2.139200 -0.322200 -0.995559 -0.085585 -0.039210
-2.530900 1.360400 0.174300 -0.612436 0.773745 -0.161993
-1.882400 0.869500 0.281300 -0.612436 0.773745 -0.161993
-1.881300 0.872000 0.297400 -0.612436 0.773745 -0.161993
-1.928700 0.804800 0.339800 0.173934 -0.703810 0.688766
-1.935100 0.795400 0.328500 0.173934 -0.703810 0.688766
-1.938700 0.796800 0.329100 0.173934 -0.703810 0.688766
-1.932100 0.806500 0.340600 0.173934 -0.703810 0.688766
-3.792100 2.090400 0.045800 0.948070 0.261290 -0.181357
-3.823900 1.707100 -0.340200 0.948070 0.261290 -0.181357
-3.794500 1.739300 -0.447500 0.948070 0.261290 -0.181357
-1.902900 0.822300 0.256200 -0.794271 -0.525970 -0.304121
-1.895200 0.832900 0.258100 -0.794271 -0.525970 -0.304121
-1.895500 0.834400 0.254600 -0.794271 -0.525970 -0.304121
-1.903900 0.823000 0.252500 -0.794271 -0.525970 -0.304121
-1.931400 0.794900 0.327300 -0.011035 -0.915560 0.402030
-1.935200 0.788900 0.313700 -0.011035 -0.915560 0.402030
-1.939000 0.789100 0.314300 -0.011035 -0.915560 0.402030
-1.935100 0.795400 0.328500 -0.011035 -0.915560 0.402030
-2.782900 1.561800 0.248100 -0.606616 0.794912 0.011506
-2.586400 1.411700 0.258200 -0.606616 0.794912 0.011506
-2.072100 1.018800 0.287600 -0.606616 0.794912 0.011506
-1.926000 0.794600 0.310500 -0.769688 -0.636014 0.055377
-1.929200 0.789700 0.298700 -0.769688 -0.636014 0.055377
-1.928400 0.791800 0.311700 -0.769688 -0.636014 0.055377
-1.930800 0.788900 0.284500 -0.283611 -0.957398 -0.054346
-1.934400 0.787900 0.283500 -0.283611 -0.957398 -0.054346
-1.936200 0.786500 0.298600 -0.283611 -0.957398 -0.054346
-1.932500 0.787600 0.298700 -0.283611 -0.957398 -0.054346
-1.932100 0.806500 0.340600 0.364975 -0.597830 0.713717
-1.938700 0.796800 0.329100 0.364975 -0.597830 0.713717
-2.097800 0.965800 0.389300 0.364975 -0.597830 0.713717
-1.877900 0.865200 0.297800 -0.947864 0.299175 -0.109763
-1.879100 0.868900 0.297600 -0.947864 0.299175 -0.109763
-1.880100 0.866300 0.281800 -0.947864 0.299175 -0.109763
-1.878900 0.862800 0.282700 -0.947864 0.299175 -0.109763
-3.313800 2.004900 -0.659300 -0.823973 -0.519208 -0.226917
-3.383300 1.910200 -0.673700 -0.823973 -0.519208 -0.226917
-3.200900 1.831200 0.148100 -0.823973 -0.519208 -0.226917
-3.142200 2.139200 -0.322200 -0.823973 -0.519208 -0.226917
-2.530900 1.360400 0.174300 -0.609960 0.786116 -0.099846
-1.881300 0.872000 0.297400 -0.609960 0.786116 -0.099846
-2.072100 1.018800 0.287600 -0.609960 0.786116 -0.099846
-3.731500 2.109800 -0.143600 0.902605 0.354173 -0.244675
-3.792100 2.090400 0.045800 0.902605 0.354173 -0.244675
-3.794500 1.739300 -0.447500 0.902605 0.354173 -0.244675
-3.750000 1.793000 -0.540000 0.902605 0.354173 -0.244675
-1.884900 0.847700 0.275600 -0.821859 -0.569643 0.007385
-1.883100 0.850300 0.273200 -0.821859 -0.569643 0.007385
-1.888400 0.842500 0.264000 -0.821859 -0.569643 0.007385
-1.889700 0.840700 0.267200 -0.821859 -0.569643 0.007385
-1.923600 0.818500 0.347900 0.153826 -0.431722 0.888794
-1.932100 0.806500 0.340600 0.153826 -0.431722 0.888794
-2.097800 0.965800 0.389300 0.153826 -0.431722 0.888794
-1.926000 0.794600 0.310500 -0.781866 -0.620466 0.060884
-1.928400 0.791800 0.311700 -0.781866 -0.620466 0.060884
-1.925100 0.797000 0.323400 -0.781866 -0.620466 0.060884
-1.918200 0.806400 0.329500 -0.781866 -0.620466 0.060884
-2.586400 1.411700 0.258200 -0.446211 0.627105 0.638463
-2.782900 1.561800 0.248100 -0.446211 0.627105 0.638463
-2.909500 1.658600 0.241500 -0.446211 0.627105 0.638463
-3.402600 1.924400 -0.674600 0.091039 -0.106231 -0.990165
-3.559500 2.040900 -0.672700 0.091039 -0.106231 -0.990165
-3.628400 1.949200 -0.656500 0.091039 -0.106231 -0.990165
-3.472900 1.830600 -0.658100 0.091039 -0.106231 -0.990165
-1.886400 0.863000 0.266700 -0.766925 0.480791 -0.425048
-1.884100 0.860100 0.267600 -0.766925 0.480791 -0.425048
-1.880100 0.866300 0.281800 -0.766925 0.480791 -0.425048
-1.882400 0.869500 0.281300 -0.766925 0.480791 -0.425048
-1.932500 0.787600 0.298700 -0.270201 -0.953809 0.131302
-1.936200 0.786500 0.298600 -0.270201 -0.953809 0.131302
-1.935200 0.788900 0.313700 -0.270201 -0.953809 0.131302
-1.931500 0.789800 0.312900 -0.270201 -0.953809 0.131302
-1.917300 0.815100 0.344900 -0.229267 -0.623746 0.747247
-1.925300 0.804000 0.338000 -0.229267 -0.623746 0.747247
-1.928700 0.804800 0.339800 -0.229267 -0.623746 0.747247
-1.920300 0.816500 0.346900 -0.229267 -0.623746 0.747247
-3.157100 2.294300 -0.108100 -0.588830 0.799086 0.121410
-3.144700 2.303000 -0.225500 -0.588830 0.799086 0.121410
-3.125500 2.288700 -0.224500 -0.588830 0.799086 0.121410
-3.137900 2.280000 -0.107100 -0.588830 0.799086 0.121410
-2.782900 1.561800 0.248100 -0.605097 0.780755 -0.155815
-2.072100 1.018800 0.287600 -0.605097 0.780755 -0.155815
-2.909500 1.658600 0.241500 -0.605097 0.780755 -0.155815
-2.107300 0.978100 0.388700 0.033445 0.035669 0.998804
-2.108600 0.976400 0.388700 0.033445 0.035669 0.998804
-3.261500 1.746800 0.322600 0.033445 0.035669 0.998804
-3.181000 1.855400 0.321400 0.033445 0.035669 0.998804
-1.919800 0.804800 0.332700 -0.778785 -0.622399 0.078194
-1.918200 0.806400 0.329500 -0.778785 -0.622399 0.078194
-1.925100 0.797000 0.323400 -0.778785 -0.622399 0.078194
-3.142200 2.139200 -0.322200 -0.910967 -0.387878 -0.140320
-3.200900 1.831200 0.148100 -0.910967 -0.387878 -0.140320
-3.188200 1.838200 0.211200 -0.910967 -0.387878 -0.140320
-1.925300 0.804000 0.338000 -0.109794 -0.790586 0.602428
-1.931400 0.794900 0.327300 -0.109794 -0.790586 0.602428
-1.935100 0.795400 0.328500 -0.109794 -0.790586 0.602428
-1.928700 0.804800 0.339800 -0.109794 -0.790586 0.602428
-2.108600 0.976400 0.388700 0.031878 0.024377 0.999194
-2.107300 0.978100 0.388700 0.031878 0.024377 0.999194
-2.095300 0.969200 0.389300 0.031878 0.024377 0.999194
-2.096600 0.967500 0.389300 0.031878 0.024377 0.999194
-1.918200 0.806400 0.329500 -0.801891 -0.595228 0.051719
-1.905000 0.824800 0.336600 -0.801891 -0.595228 0.051719
-1.897900 0.834200 0.334700 -0.801891 -0.595228 0.051719
-2.096600 0.967500 0.389300 0.032241 0.023707 0.999199
-2.097800 0.965800 0.389300 0.032241 0.023707 0.999199
-2.109900 0.974700 0.388700 0.032241 0.023707 0.999199
-2.108600 0.976400 0.388700 0.032241 0.023707 0.999199
-3.693300 1.864600 -0.611300 0.868910 0.405643 -0.283635
-3.731500 2.109800 -0.143600 0.868910 0.405643 -0.283635
-3.750000 1.793000 -0.540000 0.868910 0.405643 -0.283635
-1.890200 0.844600 0.332200 -0.893841 -0.349753 0.280573
-1.890100 0.847200 0.335100 -0.893841 -0.349753 0.280573
-1.883800 0.855100 0.324900 -0.893841 -0.349753 0.280573
-1.884400 0.851900 0.322800 -0.893841 -0.349753 0.280573
-2.095300 0.969200 0.389300 -0.073483 0.165380 0.983489
-2.107300 0.978100 0.388700 -0.073483 0.165380 0.983489
-3.181000 1.855400 0.321400 -0.073483 0.165380 0.983489
-1.926000 0.794600 0.310500 -0.803492 -0.594031 0.039070
-1.918200 0.806400 0.329500 -0.803492 -0.594031 0.039070
-1.897900 0.834200 0.334700 -0.803492 -0.594031 0.039070
-1.906400 0.825900 0.344100 -0.569042 -0.527589 0.630747
-1.914800 0.814400 0.342000 -0.569042 -0.527589 0.630747
-1.917300 0.815100 0.344900 -0.569042 -0.527589 0.630747
-1.908400 0.827400 0.347100 -0.569042 -0.527589 0.630747
-1.928700 0.804800 0.339800 0.041589 -0.496983 0.866763
-1.932100 0.806500 0.340600 0.041589 -0.496983 0.866763
-1.923600 0.818500 0.347900 0.041589 -0.496983 0.866763
-1.920300 0.816500 0.346900 0.041589 -0.496983 0.866763
-3.546500 2.168900 0.301500 0.026997 0.031883 0.999127
-3.233900 1.894600 0.318700 0.026997 0.031883 0.999127
-3.533300 2.089200 0.304400 0.026997 0.031883 0.999127
-1.888100 0.865000 0.328300 -0.496613 0.652284 0.572626
-2.095300 0.969200 0.389300 -0.496613 0.652284 0.572626
-3.181000 1.855400 0.321400 -0.496613 0.652284 0.572626
-1.914800 0.814400 0.342000 -0.451422 -0.678609 0.579404
-1.922200 0.803900 0.335600 -0.451422 -0.678609 0.579404
-1.925300 0.804000 0.338000 -0.451422 -0.678609 0.579404
-1.917300 0.815100 0.344900 -0.451422 -0.678609 0.579404
-3.597300 1.671000 -0.539000 0.455841 -0.656375 -0.601150
-3.642800 1.616100 -0.444500 0.455841 -0.656375 -0.601150
-3.623600 1.601800 -0.443500 0.455841 -0.656375 -0.601150
-3.578100 1.656800 -0.538000 0.455841 -0.656375 -0.601150
-2.097800 0.965800 0.389300 0.000000 0.000000 1.000000
-2.096600 0.967500 0.389300 0.000000 0.000000 1.000000
-2.095300 0.969200 0.389300 0.000000 0.000000 1.000000
-1.940100 0.786600 0.298500 0.311253 -0.934925 0.170402
-1.943800 0.787800 0.298400 0.311253 -0.934925 0.170402
-1.942700 0.790400 0.314600 0.311253 -0.934925 0.170402
-1.939000 0.789100 0.314300 0.311253 -0.934925 0.170402
-1.905000 0.824800 0.336600 -0.797197 -0.599455 0.071626
-1.913000 0.814400 0.338600 -0.797197 -0.599455 0.071626
-1.905200 0.825000 0.340500 -0.797197 -0.599455 0.071626
-3.144700 2.303000 -0.225500 -0.596162 0.790715 -0.139143
-3.150700 2.286900 -0.342700 -0.596162 0.790715 -0.139143
-3.131500 2.272600 -0.341700 -0.596162 0.790715 -0.139143
-3.125500 2.288700 -0.224500 -0.596162 0.790715 -0.139143
-3.539400 1.744200 -0.611900 0.381074 -0.483302 -0.788164
-3.693300 1.864600 -0.611300 0.381074 -0.483302 -0.788164
-3.750000 1.793000 -0.540000 0.381074 -0.483302 -0.788164
-3.597300 1.671000 -0.539000 0.381074 -0.483302 -0.788164
-1.914000 0.831600 0.350300 -0.212398 0.002890 0.977179
-2.097800 0.965800 0.389300 -0.212398 0.002890 0.977179
-2.095300 0.969200 0.389300 -0.212398 0.002890 0.977179
-1.904300 0.844500 0.347600 -0.212398 0.002890 0.977179
-1.897900 0.834200 0.334700 -0.804283 -0.589131 0.077802
-1.905000 0.824800 0.336600 -0.804283 -0.589131 0.077802
-1.905200 0.825000 0.340500 -0.804283 -0.589131 0.077802
-1.897400 0.835400 0.338300 -0.804283 -0.589131 0.077802
-3.750000 1.793000 -0.540000 0.496054 -0.625641 -0.602083
-3.794500 1.739300 -0.447500 0.496054 -0.625641 -0.602083
-3.642800 1.616100 -0.444500 0.496054 -0.625641 -0.602083
-3.597300 1.671000 -0.539000 0.496054 -0.625641 -0.602083
-3.244200 1.772400 0.141900 -0.659882 -0.723993 -0.200972
-3.520100 1.729900 -0.610900 -0.659882 -0.723993 -0.200972
-3.578100 1.656800 -0.538000 -0.659882 -0.723993 -0.200972
-1.922200 0.803900 0.335600 -0.360118 -0.804193 0.472852
-1.928000 0.795500 0.325600 -0.360118 -0.804193 0.472852
-1.931400 0.794900 0.327300 -0.360118 -0.804193 0.472852
-1.925300 0.804000 0.338000 -0.360118 -0.804193 0.472852
-1.895300 0.856000 0.340000 -0.378626 0.285522 0.880409
-1.904300 0.844500 0.347600 -0.378626 0.285522 0.880409
-2.095300 0.969200 0.389300 -0.378626 0.285522 0.880409
-1.928000 0.795500 0.325600 -0.301445 -0.899436 0.316457
-1.931500 0.789800 0.312900 -0.301445 -0.899436 0.316457
-1.935200 0.788900 0.313700 -0.301445 -0.899436 0.316457
-1.931400 0.794900 0.327300 -0.301445 -0.899436 0.316457
-2.586400 1.411700 0.258200 -0.608049 0.791892 -0.056426
-2.909500 1.658600 0.241500 -0.608049 0.791892 -0.056426
-3.173000 1.854300 0.148500 -0.608049 0.791892 -0.056426
-1.886400 0.863000 0.266700 -0.583263 0.670609 -0.458355
-1.882400 0.869500 0.281300 -0.583263 0.670609 -0.458355
-2.530900 1.360400 0.174300 -0.583263 0.670609 -0.458355
-1.890100 0.847200 0.335100 -0.881005 -0.113507 0.459290
-1.891000 0.850200 0.337500 -0.881005 -0.113507 0.459290
-1.884200 0.858600 0.326600 -0.881005 -0.113507 0.459290
-1.883800 0.855100 0.324900 -0.881005 -0.113507 0.459290
-1.890200 0.844600 0.332200 -0.837342 -0.424656 0.344274
-1.897400 0.835400 0.338300 -0.837342 -0.424656 0.344274
-1.897900 0.837200 0.341800 -0.837342 -0.424656 0.344274
-1.890100 0.847200 0.335100 -0.837342 -0.424656 0.344274
-2.072100 1.018800 0.287600 -0.608141 0.791743 -0.057521
-2.586400 1.411700 0.258200 -0.608141 0.791743 -0.057521
-3.173000 1.854300 0.148500 -0.608141 0.791743 -0.057521
-3.137900 2.280000 -0.107100 -0.994303 0.011996 0.105910
-3.125500 2.288700 -0.224500 -0.994303 0.011996 0.105910
-3.177500 1.859500 0.312300 -0.994303 0.011996 0.105910
-1.893000 0.853300 0.255300 -0.490238 0.502991 -0.711805
-1.886400 0.863000 0.266700 -0.490238 0.502991 -0.711805
-2.530900 1.360400 0.174300 -0.490238 0.502991 -0.711805
-1.910000 0.812900 0.262000 -0.796663 -0.604408 -0.004334
-1.902900 0.822300 0.260100 -0.796663 -0.604408 -0.004334
-1.902900 0.822300 0.256200 -0.796663 -0.604408 -0.004334
-1.910800 0.811900 0.258300 -0.796663 -0.604408 -0.004334
-3.383300 1.910200 -0.673700 -0.772521 -0.591229 -0.231644
-3.453700 1.816400 -0.657200 -0.772521 -0.591229 -0.231644
-3.244200 1.772400 0.141900 -0.772521 -0.591229 -0.231644
-3.200900 1.831200 0.148100 -0.772521 -0.591229 -0.231644
-2.530900 1.360400 0.174300 -0.609369 0.787315 -0.093838
-2.072100 1.018800 0.287600 -0.609369 0.787315 -0.093838
-3.173000 1.854300 0.148500 -0.609369 0.787315 -0.093838
-1.929200 0.789700 0.298700 -0.549554 -0.830056 0.094855
-1.932500 0.787600 0.298700 -0.549554 -0.830056 0.094855
-1.931500 0.789800 0.312900 -0.549554 -0.830056 0.094855
-1.928400 0.791800 0.311700 -0.549554 -0.830056 0.094855
-1.901500 0.841400 0.247900 -0.351403 0.300405 -0.886720
-1.893000 0.853300 0.255300 -0.351403 0.300405 -0.886720
-2.530900 1.360400 0.174300 -0.351403 0.300405 -0.886720
-3.672800 1.583100 -0.334800 0.586155 -0.801086 -0.121172
-3.685200 1.574400 -0.217300 0.586155 -0.801086 -0.121172
-3.666000 1.560200 -0.216300 0.586155 -0.801086 -0.121172
-3.653600 1.568900 -0.333800 0.586155 -0.801086 -0.121172
-3.244200 1.772400 0.141900 -0.061088 0.027298 -0.997759
-2.530900 1.360400 0.174300 -0.061088 0.027298 -0.997759
-3.173000 1.854300 0.148500 -0.061088 0.027298 -0.997759
-1.895900 0.831900 0.261800 -0.803342 -0.593792 0.045309
-1.902900 0.822300 0.260100 -0.803342 -0.593792 0.045309
-1.889700 0.840700 0.267200 -0.803342 -0.593792 0.045309
-3.628400 1.949200 -0.656500 0.242655 -0.305657 -0.920702
-3.693300 1.864600 -0.611300 0.242655 -0.305657 -0.920702
-3.539400 1.744200 -0.611900 0.242655 -0.305657 -0.920702
-3.472900 1.830600 -0.658100 0.242655 -0.305657 -0.920702
-3.491500 2.133600 -0.658600 -0.212396 0.307992 -0.927377
-3.333000 2.019200 -0.660300 -0.212396 0.307992 -0.927377
-3.269100 2.108500 -0.616000 -0.212396 0.307992 -0.927377
-3.429000 2.220900 -0.615300 -0.212396 0.307992 -0.927377
-1.902900 0.822300 0.260100 -0.808804 -0.588071 -0.002882
-1.895900 0.831900 0.261800 -0.808804 -0.588071 -0.002882
-1.895200 0.832900 0.258100 -0.808804 -0.588071 -0.002882
-1.902900 0.822300 0.256200 -0.808804 -0.588071 -0.002882
-3.200900 1.831200 0.148100 0.178731 0.232425 -0.956051
-3.244200 1.772400 0.141900 0.178731 0.232425 -0.956051
-3.173000 1.854300 0.148500 0.178731 0.232425 -0.956051
-1.911100 0.828300 0.245500 -0.109341 -0.005643 -0.993988
-1.901500 0.841400 0.247900 -0.109341 -0.005643 -0.993988
-2.530900 1.360400 0.174300 -0.109341 -0.005643 -0.993988
-2.530300 1.304800 0.176100 -0.109341 -0.005643 -0.993988
-1.892800 0.853200 0.339200 -0.789443 0.138214 0.598060
-1.885700 0.861900 0.327800 -0.789443 0.138214 0.598060
-1.884200 0.858600 0.326600 -0.789443 0.138214 0.598060
-1.891000 0.850200 0.337500 -0.789443 0.138214 0.598060
-1.884900 0.847700 0.275600 -0.826301 -0.562909 0.018983
-1.881900 0.852500 0.286200 -0.826301 -0.562909 0.018983
-1.879800 0.855500 0.284900 -0.826301 -0.562909 0.018983
-1.883100 0.850300 0.273200 -0.826301 -0.562909 0.018983
-1.889700 0.840700 0.267200 -0.816120 -0.577878 0.002067
-1.888400 0.842500 0.264000 -0.816120 -0.577878 0.002067
-1.895200 0.832900 0.258100 -0.816120 -0.577878 0.002067
-1.895900 0.831900 0.261800 -0.816120 -0.577878 0.002067
-3.167900 2.247100 0.002600 -0.807026 0.356288 0.470922
-3.177500 1.859500 0.312300 -0.807026 0.356288 0.470922
-3.181000 1.855400 0.321400 -0.807026 0.356288 0.470922
-1.897900 0.837200 0.341800 -0.673313 -0.377654 0.635631
-1.906400 0.825900 0.344100 -0.673313 -0.377654 0.635631
-1.908400 0.827400 0.347100 -0.673313 -0.377654 0.635631
-1.899300 0.839400 0.344600 -0.673313 -0.377654 0.635631
-2.545900 1.283900 0.176300 -0.030087 -0.032018 -0.999034
-2.530300 1.304800 0.176100 -0.030087 -0.032018 -0.999034
-2.530900 1.360400 0.174300 -0.030087 -0.032018 -0.999034
-1.921800 0.797900 0.276100 -0.803038 -0.594532 0.040766
-1.926000 0.794600 0.310500 -0.803038 -0.594532 0.040766
-1.897900 0.834200 0.334700 -0.803038 -0.594532 0.040766
-1.881900 0.852500 0.286200 -0.803038 -0.594532 0.040766
-3.453700 1.816400 -0.657200 0.203221 -0.335843 -0.919734
-3.472900 1.830600 -0.658100 0.203221 -0.335843 -0.919734
-3.539400 1.744200 -0.611900 0.203221 -0.335843 -0.919734
-3.520100 1.729900 -0.610900 0.203221 -0.335843 -0.919734
-2.976000 1.709400 0.238100 -0.607874 0.792088 -0.055554
-3.140300 1.834900 0.229700 -0.607874 0.792088 -0.055554
-3.173000 1.854300 0.148500 -0.607874 0.792088 -0.055554
-1.879500 0.859900 0.312100 -0.951636 -0.026620 0.306071
-1.883800 0.855100 0.324900 -0.951636 -0.026620 0.306071
-1.884200 0.858600 0.326600 -0.951636 -0.026620 0.306071
-1.879700 0.863700 0.312900 -0.951636 -0.026620 0.306071
-1.897900 0.837200 0.341800 -0.786125 -0.227113 0.574827
-1.899300 0.839400 0.344600 -0.786125 -0.227113 0.574827
-1.891000 0.850200 0.337500 -0.786125 -0.227113 0.574827
-1.890100 0.847200 0.335100 -0.786125 -0.227113 0.574827
-2.909500 1.658600 0.241500 -0.607905 0.792056 -0.055674
-2.976000 1.709400 0.238100 -0.607905 0.792056 -0.055674
-3.173000 1.854300 0.148500 -0.607905 0.792056 -0.055674
-1.886100 0.849200 0.320600 -0.793955 -0.606742 0.038734
-1.881100 0.854300 0.298000 -0.793955 -0.606742 0.038734
-1.881900 0.852500 0.286200 -0.793955 -0.606742 0.038734
-3.202600 1.840400 0.170200 0.587303 0.740452 -0.326811
-3.200900 1.831200 0.148100 0.587303 0.740452 -0.326811
-3.173000 1.854300 0.148500 0.587303 0.740452 -0.326811
-3.193200 1.854300 0.186600 0.587303 0.740452 -0.326811
-3.188200 1.838200 0.211200 -0.802238 -0.595723 0.039100
-3.241000 1.771100 0.272200 -0.802238 -0.595723 0.039100
-3.189200 1.839400 0.250000 -0.802238 -0.595723 0.039100
-1.880500 0.856300 0.311000 -0.930597 -0.310315 0.194147
-1.884400 0.851900 0.322800 -0.930597 -0.310315 0.194147
-1.883800 0.855100 0.324900 -0.930597 -0.310315 0.194147
-1.879500 0.859900 0.312100 -0.930597 -0.310315 0.194147
-1.897900 0.834200 0.334700 -0.803741 -0.593551 0.041194
-1.886100 0.849200 0.320600 -0.803741 -0.593551 0.041194
-1.881900 0.852500 0.286200 -0.803741 -0.593551 0.041194
-3.157100 2.294300 -0.108100 -0.540054 0.753900 0.374134
-3.137900 2.280000 -0.107100 -0.540054 0.753900 0.374134
-3.167900 2.247100 0.002600 -0.540054 0.753900 0.374134
-3.187100 2.261300 0.001600 -0.540054 0.753900 0.374134
-1.890500 0.850600 0.256400 -0.818769 0.111979 -0.563097
-1.888800 0.847700 0.258300 -0.818769 0.111979 -0.563097
-1.882600 0.856700 0.269100 -0.818769 0.111979 -0.563097
-1.884100 0.860100 0.267600 -0.818769 0.111979 -0.563097
-3.173000 1.854300 0.148500 0.464902 0.850360 -0.246484
-3.187400 1.863500 0.207400 0.464902 0.850360 -0.246484
-3.193200 1.854300 0.186600 0.464902 0.850360 -0.246484
-1.921800 0.797900 0.276100 -0.802964 -0.594547 0.041974
-1.881900 0.852500 0.286200 -0.802964 -0.594547 0.041974
-1.884900 0.847700 0.275600 -0.802964 -0.594547 0.041974
-3.244200 1.772400 0.141900 -0.645821 -0.739083 -0.191501
-3.578100 1.656800 -0.538000 -0.645821 -0.739083 -0.191501
-3.504400 1.614500 -0.126200 -0.645821 -0.739083 -0.191501
-3.213400 2.192100 0.097100 -0.668991 0.455596 0.587268
-3.167900 2.247100 0.002600 -0.668991 0.455596 0.587268
-3.181000 1.855400 0.321400 -0.668991 0.455596 0.587268
-2.530900 1.360400 0.174300 -0.036836 -0.017705 -0.999164
-3.244200 1.772400 0.141900 -0.036836 -0.017705 -0.999164
-3.256600 1.741100 0.140800 -0.036836 -0.017705 -0.999164
-2.545900 1.283900 0.176300 -0.036836 -0.017705 -0.999164
-1.902900 0.822300 0.260100 -0.802969 -0.594552 0.041817
-1.921800 0.797900 0.276100 -0.802969 -0.594552 0.041817
-1.884900 0.847700 0.275600 -0.802969 -0.594552 0.041817
-1.895500 0.834400 0.254600 -0.821014 -0.274296 -0.500697
-1.888100 0.844900 0.261000 -0.821014 -0.274296 -0.500697
-1.888800 0.847700 0.258300 -0.821014 -0.274296 -0.500697
-1.896700 0.836500 0.251500 -0.821014 -0.274296 -0.500697
-1.877800 0.861300 0.297900 -0.992236 0.027626 0.121260
-1.879500 0.859900 0.312100 -0.992236 0.027626 0.121260
-1.879700 0.863700 0.312900 -0.992236 0.027626 0.121260
-1.877900 0.865200 0.297800 -0.992236 0.027626 0.121260
-3.244200 1.772400 0.141900 0.870181 0.399142 -0.288911
-3.242400 1.786100 0.160200 0.870181 0.399142 -0.288911
-3.255100 1.769700 0.171000 0.870181 0.399142 -0.288911
-3.256600 1.741100 0.140800 0.870181 0.399142 -0.288911
-1.889700 0.840700 0.267200 -0.806368 -0.590582 0.031364
-1.902900 0.822300 0.260100 -0.806368 -0.590582 0.031364
-1.884900 0.847700 0.275600 -0.806368 -0.590582 0.031364
-2.599300 1.268300 0.175400 -0.027163 -0.035346 -0.999006
-2.545900 1.283900 0.176300 -0.027163 -0.035346 -0.999006
-3.256600 1.741100 0.140800 -0.027163 -0.035346 -0.999006
-3.232600 2.206400 0.096200 -0.456947 0.655745 0.600997
-3.187100 2.261300 0.001600 -0.456947 0.655745 0.600997
-3.167900 2.247100 0.002600 -0.456947 0.655745 0.600997
-3.213400 2.192100 0.097100 -0.456947 0.655745 0.600997
-3.232600 2.206400 0.096200 -0.415282 0.685714 0.597777
-3.393300 2.316700 0.081300 -0.415282 0.685714 0.597777
-3.348800 2.370400 -0.011200 -0.415282 0.685714 0.597777
-3.187100 2.261300 0.001600 -0.415282 0.685714 0.597777
-3.264500 1.742200 0.313600 -0.573179 -0.815922 -0.075745
-3.244200 1.772400 0.141900 -0.573179 -0.815922 -0.075745
-3.504400 1.614500 -0.126200 -0.573179 -0.815922 -0.075745
-1.882300 0.853400 0.271000 -0.968481 -0.045474 -0.244901
-1.878800 0.859000 0.283700 -0.968481 -0.045474 -0.244901
-1.878900 0.862800 0.282700 -0.968481 -0.045474 -0.244901
-1.882600 0.856700 0.269100 -0.968481 -0.045474 -0.244901
-1.923800 0.795400 0.273900 -0.608772 -0.766056 -0.206285
-1.917900 0.802600 0.264400 -0.608772 -0.766056 -0.206285
-1.920200 0.801600 0.261500 -0.608772 -0.766056 -0.206285
-1.926500 0.793800 0.271700 -0.608772 -0.766056 -0.206285
-1.888400 0.842500 0.264000 -0.904307 -0.374523 -0.204845
-1.883100 0.850300 0.273200 -0.904307 -0.374523 -0.204845
-1.882300 0.853400 0.271000 -0.904307 -0.374523 -0.204845
-1.888100 0.844900 0.261000 -0.904307 -0.374523 -0.204845
-2.599300 1.268300 0.175400 0.483814 -0.710052 -0.511615
-3.256600 1.741100 0.140800 0.483814 -0.710052 -0.511615
-3.260100 1.737000 0.149800 0.483814 -0.710052 -0.511615
-1.882300 0.853400 0.271000 -0.905803 -0.150262 -0.396160
-1.882600 0.856700 0.269100 -0.905803 -0.150262 -0.396160
-1.888800 0.847700 0.258300 -0.905803 -0.150262 -0.396160
-1.888100 0.844900 0.261000 -0.905803 -0.150262 -0.396160
-1.943800 0.787800 0.298400 0.570343 -0.811165 -0.129309
-2.599300 1.268300 0.175400 0.570343 -0.811165 -0.129309
-3.260100 1.737000 0.149800 0.570343 -0.811165 -0.129309
-1.877800 0.861300 0.297900 -0.997378 0.015822 -0.070621
-1.877900 0.865200 0.297800 -0.997378 0.015822 -0.070621
-1.878900 0.862800 0.282700 -0.997378 0.015822 -0.070621
-1.878800 0.859000 0.283700 -0.997378 0.015822 -0.070621
-1.917900 0.802600 0.264400 -0.665814 -0.693299 -0.275733
-1.910800 0.811900 0.258300 -0.665814 -0.693299 -0.275733
-1.912400 0.811700 0.254800 -0.665814 -0.693299 -0.275733
-1.920200 0.801600 0.261500 -0.665814 -0.693299 -0.275733
-1.911000 0.829300 0.349300 -0.121894 -0.266159 0.956191
-1.920300 0.816500 0.346900 -0.121894 -0.266159 0.956191
-1.923600 0.818500 0.347900 -0.121894 -0.266159 0.956191
-1.914000 0.831600 0.350300 -0.121894 -0.266159 0.956191
-2.139700 0.927600 0.288600 0.574952 -0.812452 -0.096701
-1.943800 0.787800 0.298400 0.574952 -0.812452 -0.096701
-3.260100 1.737000 0.149800 0.574952 -0.812452 -0.096701
-3.578100 1.656800 -0.538000 -0.577201 -0.795370 -0.185002
-3.623600 1.601800 -0.443500 -0.577201 -0.795370 -0.185002
-3.504400 1.614500 -0.126200 -0.577201 -0.795370 -0.185002
-3.546500 2.168900 0.301500 0.029387 0.029161 0.999143
-3.181000 1.855400 0.321400 0.029387 0.029161 0.999143
-3.233900 1.894600 0.318700 0.029387 0.029161 0.999143
-1.880500 0.856300 0.311000 -0.954996 -0.283013 0.088809
-1.879500 0.859900 0.312100 -0.954996 -0.283013 0.088809
-1.877800 0.861300 0.297900 -0.954996 -0.283013 0.088809
-1.878900 0.857500 0.298000 -0.954996 -0.283013 0.088809
-3.188200 1.838200 0.211200 -0.784236 -0.618737 -0.046239
-3.200900 1.831200 0.148100 -0.784236 -0.618737 -0.046239
-3.244200 1.772400 0.141900 -0.784236 -0.618737 -0.046239
-3.241000 1.771100 0.272200 -0.784236 -0.618737 -0.046239
-2.705900 1.334800 0.257300 0.582038 -0.812256 -0.038363
-2.139700 0.927600 0.288600 0.582038 -0.812256 -0.038363
-3.260100 1.737000 0.149800 0.582038 -0.812256 -0.038363
-3.256600 1.741100 0.140800 0.905382 0.319635 -0.279494
-3.255100 1.769700 0.171000 0.905382 0.319635 -0.279494
-3.265500 1.756900 0.187700 0.905382 0.319635 -0.279494
-3.260100 1.737000 0.149800 0.905382 0.319635 -0.279494
-1.902900 0.822300 0.256200 -0.728751 -0.612748 -0.305716
-1.903900 0.823000 0.252500 -0.728751 -0.612748 -0.305716
-1.912400 0.811700 0.254800 -0.728751 -0.612748 -0.305716
-1.910800 0.811900 0.258300 -0.728751 -0.612748 -0.305716
-3.177500 1.859500 0.312300 -0.806244 -0.590294 0.039036
-3.188200 1.838200 0.211200 -0.806244 -0.590294 0.039036
-3.189200 1.839400 0.250000 -0.806244 -0.590294 0.039036
-1.911000 0.829300 0.349300 -0.305072 -0.028010 0.951917
-1.914000 0.831600 0.350300 -0.305072 -0.028010 0.951917
-1.904300 0.844500 0.347600 -0.305072 -0.028010 0.951917
-1.901500 0.842000 0.346600 -0.305072 -0.028010 0.951917
-3.059900 1.589400 0.239600 0.582273 -0.812160 -0.036790
-2.705900 1.334800 0.257300 0.582273 -0.812160 -0.036790
-3.260100 1.737000 0.149800 0.582273 -0.812160 -0.036790
-3.264500 1.742200 0.313600 -0.397454 -0.916299 0.049254
-3.504400 1.614500 -0.126200 -0.397454 -0.916299 0.049254
-3.504700 1.614800 -0.118200 -0.397454 -0.916299 0.049254
-3.272400 1.749000 0.208700 0.951055 0.196361 -0.238613
-3.260100 1.737000 0.149800 0.951055 0.196361 -0.238613
-3.265500 1.756900 0.187700 0.951055 0.196361 -0.238613
-1.883100 0.850300 0.273200 -0.940112 -0.318689 -0.120942
-1.879800 0.855500 0.284900 -0.940112 -0.318689 -0.120942
-1.878800 0.859000 0.283700 -0.940112 -0.318689 -0.120942
-1.882300 0.853400 0.271000 -0.940112 -0.318689 -0.120942
-3.213400 2.192100 0.097100 -0.414965 0.533749 0.736829
-3.181000 1.855400 0.321400 -0.414965 0.533749 0.736829
-3.546500 2.168900 0.301500 -0.414965 0.533749 0.736829
-3.232600 2.206400 0.096200 -0.414965 0.533749 0.736829
-3.231100 1.712500 0.231100 0.582175 -0.812216 -0.037101
-3.059900 1.589400 0.239600 0.582175 -0.812216 -0.037101
-3.260100 1.737000 0.149800 0.582175 -0.812216 -0.037101
-1.920200 0.801600 0.261500 -0.388999 -0.831397 -0.396812
-1.923100 0.801500 0.258900 -0.388999 -0.831397 -0.396812
-1.929900 0.793100 0.269800 -0.388999 -0.831397 -0.396812
-1.926500 0.793800 0.271700 -0.388999 -0.831397 -0.396812
-3.233900 1.894600 0.318700 0.027247 0.031500 0.999132
-3.336300 1.932900 0.314700 0.027247 0.031500 0.999132
-3.533300 2.089200 0.304400 0.027247 0.031500 0.999132
-1.879800 0.855500 0.284900 -0.959699 -0.280113 -0.022670
-1.878900 0.857500 0.298000 -0.959699 -0.280113 -0.022670
-1.877800 0.861300 0.297900 -0.959699 -0.280113 -0.022670
-1.878800 0.859000 0.283700 -0.959699 -0.280113 -0.022670
-3.231100 1.712500 0.231100 0.614046 -0.789047 -0.018751
-3.260100 1.737000 0.149800 0.614046 -0.789047 -0.018751
-3.275200 1.746800 0.231900 0.614046 -0.789047 -0.018751
-1.890500 0.850600 0.256400 -0.666662 0.333339 -0.666668
-1.884100 0.860100 0.267600 -0.666662 0.333339 -0.666668
-1.886400 0.863000 0.266700 -0.666662 0.333339 -0.666668
-1.893000 0.853300 0.255300 -0.666662 0.333339 -0.666668
-1.929900 0.793100 0.269800 -0.322419 -0.915207 -0.241749
-1.934400 0.787900 0.283500 -0.322419 -0.915207 -0.241749
-1.930800 0.788900 0.284500 -0.322419 -0.915207 -0.241749
-1.926500 0.793800 0.271700 -0.322419 -0.915207 -0.241749
-1.917300 0.815100 0.344900 -0.372030 -0.421335 0.827086
-1.920300 0.816500 0.346900 -0.372030 -0.421335 0.827086
-1.911000 0.829300 0.349300 -0.372030 -0.421335 0.827086
-1.908400 0.827400 0.347100 -0.372030 -0.421335 0.827086
-3.264500 1.742200 0.313600 0.613141 -0.789158 0.035869
-3.231100 1.712500 0.231100 0.613141 -0.789158 0.035869
-3.275200 1.746800 0.231900 0.613141 -0.789158 0.035869
-3.157100 2.294300 -0.108100 -0.498742 0.782970 0.371774
-3.187100 2.261300 0.001600 -0.498742 0.782970 0.371774
-3.348800 2.370400 -0.011200 -0.498742 0.782970 0.371774
-3.319400 2.402600 -0.118500 -0.498742 0.782970 0.371774
-3.264500 1.742200 0.313600 -0.254418 -0.956794 0.140770
-3.504700 1.614800 -0.118200 -0.254418 -0.956794 0.140770
-3.660000 1.576300 -0.099200 -0.254418 -0.956794 0.140770
-1.890500 0.850600 0.256400 -0.528243 0.141864 -0.837158
-1.893000 0.853300 0.255300 -0.528243 0.141864 -0.837158
-1.901500 0.841400 0.247900 -0.528243 0.141864 -0.837158
-1.898800 0.838900 0.249200 -0.528243 0.141864 -0.837158
-1.923800 0.795400 0.273900 -0.580151 -0.806823 -0.111633
-1.926500 0.793800 0.271700 -0.580151 -0.806823 -0.111633
-1.930800 0.788900 0.284500 -0.580151 -0.806823 -0.111633
-1.927700 0.791000 0.285700 -0.580151 -0.806823 -0.111633
-1.911000 0.829300 0.349300 -0.519483 -0.217211 0.826412
-1.901500 0.842000 0.346600 -0.519483 -0.217211 0.826412
-1.899300 0.839400 0.344600 -0.519483 -0.217211 0.826412
-1.908400 0.827400 0.347100 -0.519483 -0.217211 0.826412
-3.260100 1.737000 0.149800 0.949475 -0.280298 -0.141171
-3.272400 1.749000 0.208700 0.949475 -0.280298 -0.141171
-3.275200 1.746800 0.231900 0.949475 -0.280298 -0.141171
-1.886100 0.849200 0.320600 -0.817875 -0.572915 0.053384
-1.884400 0.851900 0.322800 -0.817875 -0.572915 0.053384
-1.880500 0.856300 0.311000 -0.817875 -0.572915 0.053384
-1.881100 0.854300 0.298000 -0.817875 -0.572915 0.053384
-1.881100 0.854300 0.298000 -0.823048 -0.565849 0.049059
-1.880500 0.856300 0.311000 -0.823048 -0.565849 0.049059
-1.878900 0.857500 0.298000 -0.823048 -0.565849 0.049059
-1.898800 0.838900 0.249200 -0.363723 -0.098739 -0.926259
-1.901500 0.841400 0.247900 -0.363723 -0.098739 -0.926259
-1.911100 0.828300 0.245500 -0.363723 -0.098739 -0.926259
-1.908200 0.826100 0.246900 -0.363723 -0.098739 -0.926259
-1.929200 0.789700 0.298700 -0.550567 -0.834656 -0.015012
-1.927700 0.791000 0.285700 -0.550567 -0.834656 -0.015012
-1.930800 0.788900 0.284500 -0.550567 -0.834656 -0.015012
-1.932500 0.787600 0.298700 -0.550567 -0.834656 -0.015012
-1.888800 0.847700 0.258300 -0.700634 -0.061032 -0.710906
-1.890500 0.850600 0.256400 -0.700634 -0.061032 -0.710906
-1.898800 0.838900 0.249200 -0.700634 -0.061032 -0.710906
-1.896700 0.836500 0.251500 -0.700634 -0.061032 -0.710906
-1.920800 0.815300 0.248200 -0.191873 -0.334894 -0.922513
-1.917700 0.813500 0.249500 -0.191873 -0.334894 -0.922513
-1.908200 0.826100 0.246900 -0.191873 -0.334894 -0.922513
-1.911100 0.828300 0.245500 -0.191873 -0.334894 -0.922513
-4.583700 2.687200 0.074700 0.802215 0.595633 -0.040896
-4.554500 2.726500 0.074300 0.802215 0.595633 -0.040896
-4.559300 2.731900 0.247100 0.802215 0.595633 -0.040896
-4.583700 2.687200 0.074700 0.803206 0.594328 -0.040418
-4.559300 2.731900 0.247100 0.803206 0.594328 -0.040418
-4.588400 2.692600 0.247500 0.803206 0.594328 -0.040418
-4.579300 2.672300 0.075300 0.958723 -0.283822 -0.017205
-4.583700 2.687200 0.074700 0.958723 -0.283822 -0.017205
-4.588400 2.692600 0.247500 0.958723 -0.283822 -0.017205
-4.579300 2.672300 0.075300 0.958731 -0.283794 -0.017209
-4.588400 2.692600 0.247500 0.958731 -0.283794 -0.017209
-4.584000 2.677700 0.248100 0.958731 -0.283794 -0.017209
-3.683200 2.008000 0.120700 0.595797 -0.803086 0.008890
-4.579300 2.672300 0.075300 0.595797 -0.803086 0.008890
-4.584000 2.677700 0.248100 0.595797 -0.803086 0.008890
-3.683200 2.008000 0.120700 0.595785 -0.803093 0.009012
-4.584000 2.677700 0.248100 0.595785 -0.803093 0.009012
-3.688000 2.013500 0.293500 0.595785 -0.803093 0.009012
-4.536800 2.828300 0.244600 0.802571 0.595161 -0.040770
-4.586600 2.761200 0.245400 0.802571 0.595161 -0.040770
-4.581900 2.755700 0.072600 0.802571 0.595161 -0.040770
-4.536800 2.828300 0.244600 0.802540 0.595201 -0.040795
-4.581900 2.755700 0.072600 0.802540 0.595201 -0.040795
-4.532100 2.822800 0.071900 0.802540 0.595201 -0.040795
-4.581900 2.755700 0.072600 -0.023090 -0.036498 -0.999067
-4.580400 2.745700 0.073000 -0.023090 -0.036498 -0.999067
-4.554500 2.726500 0.074300 -0.023090 -0.036498 -0.999067
-4.581900 2.755700 0.072600 -0.027836 -0.032046 -0.999099
-4.554500 2.726500 0.074300 -0.027836 -0.032046 -0.999099
-4.496200 2.805200 0.073400 -0.027836 -0.032046 -0.999099
-4.581900 2.755700 0.072600 -0.027257 -0.031043 -0.999146
-4.496200 2.805200 0.073400 -0.027257 -0.031043 -0.999146
-4.522100 2.824300 0.072100 -0.027257 -0.031043 -0.999146
-4.581900 2.755700 0.072600 -0.024249 -0.028422 -0.999302
-4.522100 2.824300 0.072100 -0.024249 -0.028422 -0.999302
-4.532100 2.822800 0.071900 -0.024249 -0.028422 -0.999302
-4.559300 2.731900 0.247100 0.595778 -0.803104 0.008548
-4.554500 2.726500 0.074300 0.595778 -0.803104 0.008548
-4.580400 2.745700 0.073000 0.595778 -0.803104 0.008548
-4.559300 2.731900 0.247100 0.597272 -0.801990 0.008817
-4.580400 2.745700 0.073000 0.597272 -0.801990 0.008817
-4.585100 2.751100 0.245800 0.597272 -0.801990 0.008817
-4.534000 2.823500 0.253900 0.023818 0.038844 0.998961
-4.528500 2.824300 0.254000 0.023818 0.038844 0.998961
-4.500000 2.803200 0.255500 0.023818 0.038844 0.998961
-4.534000 2.823500 0.253900 0.028435 0.031122 0.999111
-4.500000 2.803200 0.255500 0.028435 0.031122 0.999111
-4.551800 2.733400 0.256200 0.028435 0.031122 0.999111
-4.534000 2.823500 0.253900 0.026346 0.030711 0.999181
-4.551800 2.733400 0.256200 0.026346 0.030711 0.999181
-4.580300 2.754500 0.254800 0.026346 0.030711 0.999181
-4.534000 2.823500 0.253900 0.028535 0.032179 0.999075
-4.580300 2.754500 0.254800 0.028535 0.032179 0.999075
-4.581100 2.760000 0.254600 0.028535 0.032179 0.999075
-4.585100 2.751100 0.245800 0.988560 -0.149182 -0.022227
-4.580400 2.745700 0.073000 0.988560 -0.149182 -0.022227
-4.581900 2.755700 0.072600 0.988560 -0.149182 -0.022227
-4.585100 2.751100 0.245800 0.988784 -0.147696 -0.022192
-4.581900 2.755700 0.072600 0.988784 -0.147696 -0.022192
-4.586600 2.761200 0.245400 0.988784 -0.147696 -0.022192
-4.309900 2.481500 0.270800 -0.481230 0.605854 -0.633528
-4.064700 2.299700 0.283200 -0.481230 0.605854 -0.633528
-3.684900 2.018200 0.302500 -0.481230 0.605854 -0.633528
-4.309900 2.481500 0.270800 0.522472 -0.668620 0.529122
-3.684900 2.018200 0.302500 0.522472 -0.668620 0.529122
-3.688000 2.013500 0.293500 0.522472 -0.668620 0.529122
-4.309900 2.481500 0.270800 0.522171 -0.668178 0.529977
-3.688000 2.013500 0.293500 0.522171 -0.668178 0.529977
-4.584000 2.677700 0.248100 0.522171 -0.668178 0.529977
-4.309900 2.481500 0.270800 0.522539 -0.668831 0.528789
-4.584000 2.677700 0.248100 0.522539 -0.668831 0.528789
-4.579500 2.681300 0.257100 0.522539 -0.668831 0.528789
-4.309900 2.481500 0.270800 0.572882 -0.788389 -0.224162
-4.579500 2.681300 0.257100 0.572882 -0.788389 -0.224162
-4.555100 2.663200 0.258400 0.572882 -0.788389 -0.224162
-4.584000 2.677700 0.248100 0.832859 -0.225580 0.505429
-4.588400 2.692600 0.247500 0.832859 -0.225580 0.505429
-4.582600 2.691800 0.256700 0.832859 -0.225580 0.505429
-4.584000 2.677700 0.248100 0.831993 -0.226331 0.506519
-4.582600 2.691800 0.256700 0.831993 -0.226331 0.506519
-4.579500 2.681300 0.257100 0.831993 -0.226331 0.506519
-4.588400 2.692600 0.247500 0.698391 0.522111 0.489541
-4.559300 2.731900 0.247100 0.698391 0.522111 0.489541
-4.551800 2.733400 0.256200 0.698391 0.522111 0.489541
-4.588400 2.692600 0.247500 0.699392 0.523672 0.486434
-4.551800 2.733400 0.256200 0.699392 0.523672 0.486434
-4.582600 2.691800 0.256700 0.699392 0.523672 0.486434
-4.559300 2.731900 0.247100 0.522995 -0.666835 0.530855
-4.585100 2.751100 0.245800 0.522995 -0.666835 0.530855
-4.580300 2.754500 0.254800 0.522995 -0.666835 0.530855
-4.559300 2.731900 0.247100 0.518761 -0.665062 0.537196
-4.580300 2.754500 0.254800 0.518761 -0.665062 0.537196
-4.551800 2.733400 0.256200 0.518761 -0.665062 0.537196
-4.585100 2.751100 0.245800 0.859448 -0.107821 0.499723
-4.586600 2.761200 0.245400 0.859448 -0.107821 0.499723
-4.581100 2.760000 0.254600 0.859448 -0.107821 0.499723
-4.585100 2.751100 0.245800 0.859938 -0.106953 0.499067
-4.581100 2.760000 0.254600 0.859938 -0.106953 0.499067
-4.580300 2.754500 0.254800 0.859938 -0.106953 0.499067
-4.534000 2.823500 0.253900 0.699215 0.523993 0.486342
-4.581100 2.760000 0.254600 0.699215 0.523993 0.486342
-4.586600 2.761200 0.245400 0.699215 0.523993 0.486342
-4.534000 2.823500 0.253900 0.700667 0.525768 0.482321
-4.586600 2.761200 0.245400 0.700667 0.525768 0.482321
-4.536800 2.828300 0.244600 0.700667 0.525768 0.482321
-4.536800 2.828300 0.244600 0.143550 0.858615 0.492112
-4.526800 2.829800 0.244900 0.143550 0.858615 0.492112
-4.528500 2.824300 0.254000 0.143550 0.858615 0.492112
-4.536800 2.828300 0.244600 0.134461 0.863468 0.486151
-4.528500 2.824300 0.254000 0.134461 0.863468 0.486151
-4.534000 2.823500 0.253900 0.134461 0.863468 0.486151
-4.526800 2.829800 0.244900 -0.495148 0.702556 0.511120
-4.500900 2.810600 0.246200 -0.495148 0.702556 0.511120
-4.500000 2.803200 0.255500 -0.495148 0.702556 0.511120
-4.526800 2.829800 0.244900 -0.492071 0.701312 0.515779
-4.500000 2.803200 0.255500 -0.492071 0.701312 0.515779
-4.528500 2.824300 0.254000 -0.492071 0.701312 0.515779
-4.500900 2.810600 0.246200 0.700126 0.526328 0.482496
-4.471700 2.849900 0.245700 0.700126 0.526328 0.482496
-4.469200 2.844700 0.255000 0.700126 0.526328 0.482496
-4.500900 2.810600 0.246200 0.699309 0.524849 0.485283
-4.469200 2.844700 0.255000 0.699309 0.524849 0.485283
-4.500000 2.803200 0.255500 0.699309 0.524849 0.485283
-4.471700 2.849900 0.245700 0.021493 0.870073 0.492453
-4.456200 2.850000 0.246200 0.021493 0.870073 0.492453
-4.458200 2.844800 0.255300 0.021493 0.870073 0.492453
-4.471700 2.849900 0.245700 0.021328 0.870178 0.492276
-4.458200 2.844800 0.255300 0.021328 0.870178 0.492276
-4.469200 2.844700 0.255000 0.021328 0.870178 0.492276
-4.188600 2.644900 0.269000 0.592816 -0.788185 0.165327
-4.433800 2.826700 0.256500 0.592816 -0.788185 0.165327
-4.458200 2.844800 0.255300 0.592816 -0.788185 0.165327
-4.188600 2.644900 0.269000 -0.495256 0.702926 0.510505
-4.458200 2.844800 0.255300 -0.495256 0.702926 0.510505
-4.456200 2.850000 0.246200 -0.495256 0.702926 0.510505
-4.188600 2.644900 0.269000 -0.494310 0.701943 0.512770
-4.456200 2.850000 0.246200 -0.494310 0.701943 0.512770
-3.560100 2.185800 0.291600 -0.494310 0.701943 0.512770
-4.188600 2.644900 0.269000 -0.490839 0.697642 0.521894
-3.560100 2.185800 0.291600 -0.490839 0.697642 0.521894
-3.563700 2.181600 0.300600 -0.490839 0.697642 0.521894
-4.188600 2.644900 0.269000 -0.277356 0.311965 -0.908709
-3.563700 2.181600 0.300600 -0.277356 0.311965 -0.908709
-3.943500 2.463200 0.281400 -0.277356 0.311965 -0.908709
-4.522100 2.824300 0.072100 0.147200 0.988471 -0.035465
-4.526800 2.829800 0.244900 0.147200 0.988471 -0.035465
-4.536800 2.828300 0.244600 0.147200 0.988471 -0.035465
-4.522100 2.824300 0.072100 0.147562 0.988416 -0.035494
-4.536800 2.828300 0.244600 0.147562 0.988416 -0.035494
-4.532100 2.822800 0.071900 0.147562 0.988416 -0.035494
-4.496200 2.805200 0.073400 -0.595780 0.803098 -0.008893
-4.500900 2.810600 0.246200 -0.595780 0.803098 -0.008893
-4.526800 2.829800 0.244900 -0.595780 0.803098 -0.008893
-4.496200 2.805200 0.073400 -0.593799 0.804558 -0.009456
-4.526800 2.829800 0.244900 -0.593799 0.804558 -0.009456
-4.522100 2.824300 0.072100 -0.593799 0.804558 -0.009456
-4.451500 2.844600 0.073400 -0.595810 0.803071 -0.009355
-3.555400 2.180300 0.118800 -0.595810 0.803071 -0.009355
-3.560100 2.185800 0.291600 -0.595810 0.803071 -0.009355
-4.451500 2.844600 0.073400 -0.595739 0.803129 -0.008893
-3.560100 2.185800 0.291600 -0.595739 0.803129 -0.008893
-4.456200 2.850000 0.246200 -0.595739 0.803129 -0.008893
-4.467000 2.844500 0.073000 0.005632 0.999491 -0.031387
-4.451500 2.844600 0.073400 0.005632 0.999491 -0.031387
-4.456200 2.850000 0.246200 0.005632 0.999491 -0.031387
-4.467000 2.844500 0.073000 0.005429 0.999492 -0.031400
-4.456200 2.850000 0.246200 0.005429 0.999492 -0.031400
-4.471700 2.849900 0.245700 0.005429 0.999492 -0.031400
-4.496200 2.805200 0.073400 0.802227 0.595647 -0.040458
-4.467000 2.844500 0.073000 0.802227 0.595647 -0.040458
-4.471700 2.849900 0.245700 0.802227 0.595647 -0.040458
-4.496200 2.805200 0.073400 0.802281 0.595575 -0.040431
-4.471700 2.849900 0.245700 0.802281 0.595575 -0.040431
-4.500900 2.810600 0.246200 0.802281 0.595575 -0.040431
-4.551800 2.733400 0.256200 -0.802983 -0.595726 0.018154
-4.500000 2.803200 0.255500 -0.802983 -0.595726 0.018154
-4.469200 2.844700 0.255000 -0.802983 -0.595726 0.018154
-4.551800 2.733400 0.256200 0.027531 0.031204 0.999134
-4.469200 2.844700 0.255000 0.027531 0.031204 0.999134
-4.458200 2.844800 0.255300 0.027531 0.031204 0.999134
-4.551800 2.733400 0.256200 0.026584 0.030409 0.999184
-4.458200 2.844800 0.255300 0.026584 0.030409 0.999184
-4.433800 2.826700 0.256500 0.026584 0.030409 0.999184
-4.551800 2.733400 0.256200 0.028350 0.032643 0.999065
-4.433800 2.826700 0.256500 0.028350 0.032643 0.999065
-4.555100 2.663200 0.258400 0.028350 0.032643 0.999065
-4.551800 2.733400 0.256200 0.028992 0.032672 0.999046
-4.555100 2.663200 0.258400 0.028992 0.032672 0.999046
-4.579500 2.681300 0.257100 0.028992 0.032672 0.999046
-4.551800 2.733400 0.256200 0.025156 0.030636 0.999214
-4.579500 2.681300 0.257100 0.025156 0.030636 0.999214
-4.582600 2.691800 0.256700 0.025156 0.030636 0.999214
-4.467000 2.844500 0.073000 -0.461834 -0.351434 -0.814373
-4.496200 2.805200 0.073400 -0.461834 -0.351434 -0.814373
-4.554500 2.726500 0.074300 -0.461834 -0.351434 -0.814373
-4.467000 2.844500 0.073000 0.461845 0.351442 0.814364
-4.554500 2.726500 0.074300 0.461845 0.351442 0.814364
-4.583700 2.687200 0.074700 0.461845 0.351442 0.814364
-4.467000 2.844500 0.073000 -0.028378 -0.031851 -0.999090
-4.583700 2.687200 0.074700 -0.028378 -0.031851 -0.999090
-4.579300 2.672300 0.075300 -0.028378 -0.031851 -0.999090
-4.467000 2.844500 0.073000 -0.027454 -0.031249 -0.999134
-4.579300 2.672300 0.075300 -0.027454 -0.031249 -0.999134
-3.683200 2.008000 0.120700 -0.027454 -0.031249 -0.999134
-4.467000 2.844500 0.073000 -0.027376 -0.031323 -0.999134
-3.683200 2.008000 0.120700 -0.027376 -0.031323 -0.999134
-3.555400 2.180300 0.118800 -0.027376 -0.031323 -0.999134
-4.467000 2.844500 0.073000 -0.025997 -0.033213 -0.999110
-3.555400 2.180300 0.118800 -0.025997 -0.033213 -0.999110
-4.451500 2.844600 0.073400 -0.025997 -0.033213 -0.999110
-3.372700 1.928100 0.170300 0.025548 0.033251 0.999120
-3.209500 1.807100 0.178500 0.025548 0.033251 0.999120
-3.225100 1.786100 0.178800 0.025548 0.033251 0.999120
-3.372700 1.928100 0.170300 0.028299 0.030392 0.999137
-3.225100 1.786100 0.178800 0.028299 0.030392 0.999137
-3.388300 1.907000 0.170500 0.028299 0.030392 0.999137
-3.402800 1.897600 0.178200 -0.230145 0.371626 0.899404
-3.225100 1.786100 0.178800 -0.230145 0.371626 0.899404
-3.236900 1.770900 0.188100 -0.230145 0.371626 0.899404
-3.402800 1.897600 0.178200 -0.219692 0.358556 0.907289
-3.236900 1.770900 0.188100 -0.219692 0.358556 0.907289
-3.406700 1.896700 0.179500 -0.219692 0.358556 0.907289
-3.225100 1.786100 0.178800 -0.231616 0.373965 0.898056
-3.402800 1.897600 0.178200 -0.231616 0.373965 0.898056
-3.395300 1.901600 0.174600 -0.231616 0.373965 0.898056
-3.225100 1.786100 0.178800 -0.233872 0.377218 0.896108
-3.395300 1.901600 0.174600 -0.233872 0.377218 0.896108
-3.388300 1.907000 0.170500 -0.233872 0.377218 0.896108
-3.369400 1.936400 0.174200 0.280723 -0.317032 0.905917
-3.198300 1.822900 0.187500 0.280723 -0.317032 0.905917
-3.209500 1.807100 0.178500 0.280723 -0.317032 0.905917
-3.369400 1.936400 0.174200 0.279244 -0.315166 0.907024
-3.209500 1.807100 0.178500 0.279244 -0.315166 0.907024
-3.372700 1.928100 0.170300 0.279244 -0.315166 0.907024
-3.198300 1.822900 0.187500 0.278947 -0.314173 0.907460
-3.369400 1.936400 0.174200 0.278947 -0.314173 0.907460
-3.367800 1.944800 0.177600 0.278947 -0.314173 0.907460
-3.198300 1.822900 0.187500 0.279964 -0.315654 0.906633
-3.367800 1.944800 0.177600 0.279964 -0.315654 0.906633
-3.368100 1.948800 0.178900 0.279964 -0.315654 0.906633
-3.238800 1.768500 0.190600 -0.370152 0.550245 0.748477
-3.414000 1.898600 0.181600 -0.370152 0.550245 0.748477
-3.409100 1.896800 0.180500 -0.370152 0.550245 0.748477
-3.236900 1.770900 0.188100 -0.351488 0.527439 0.773476
-3.238800 1.768500 0.190600 -0.351488 0.527439 0.773476
-3.409100 1.896800 0.180500 -0.351488 0.527439 0.773476
-3.236900 1.770900 0.188100 -0.346642 0.521197 0.779867
-3.409100 1.896800 0.180500 -0.346642 0.521197 0.779867
-3.406700 1.896700 0.179500 -0.346642 0.521197 0.779867
-3.428300 1.909000 0.181000 -0.326432 0.495285 0.805068
-3.414000 1.898600 0.181600 -0.326432 0.495285 0.805068
-3.238800 1.768500 0.190600 -0.326432 0.495285 0.805068
-3.368800 1.951000 0.179900 0.396350 -0.481149 0.781922
-3.196600 1.825400 0.189900 0.396350 -0.481149 0.781922
-3.198300 1.822900 0.187500 0.396350 -0.481149 0.781922
-3.368800 1.951000 0.179900 0.396571 -0.481461 0.781618
-3.198300 1.822900 0.187500 0.396571 -0.481461 0.781618
-3.368100 1.948800 0.178900 0.396571 -0.481461 0.781618
-3.196600 1.825400 0.189900 0.394114 -0.477832 0.785080
-3.368800 1.951000 0.179900 0.394114 -0.477832 0.785080
-3.371900 1.955200 0.180900 0.394114 -0.477832 0.785080
-3.196600 1.825400 0.189900 0.421410 -0.517493 0.744724
-3.371900 1.955200 0.180900 0.421410 -0.517493 0.744724
-3.386100 1.965900 0.180300 0.421410 -0.517493 0.744724
-3.428300 1.909000 0.181000 -0.472016 0.675351 0.566658
-3.238800 1.768500 0.190600 -0.472016 0.675351 0.566658
-3.248300 1.757100 0.212100 -0.472016 0.675351 0.566658
-3.428300 1.909000 0.181000 -0.472141 0.675453 0.566433
-3.248300 1.757100 0.212100 -0.472141 0.675453 0.566433
-3.438500 1.898100 0.202500 -0.472141 0.675453 0.566433
-3.378300 1.979100 0.201600 0.502898 -0.638833 0.582224
-3.188200 1.838200 0.211200 0.502898 -0.638833 0.582224
-3.196600 1.825400 0.189900 0.502898 -0.638833 0.582224
-3.378300 1.979100 0.201600 0.503619 -0.639576 0.580784
-3.196600 1.825400 0.189900 0.503619 -0.639576 0.580784
-3.386100 1.965900 0.180300 0.503619 -0.639576 0.580784
-3.248300 1.757100 0.212100 -0.595883 0.803032 -0.007944
-3.249400 1.758300 0.250900 -0.595883 0.803032 -0.007944
-3.454000 1.909900 0.228500 -0.595883 0.803032 -0.007944
-3.502800 1.946100 0.226000 -0.596124 0.802808 -0.011669
-3.454000 1.909900 0.228500 -0.596124 0.802808 -0.011669
-3.249400 1.758300 0.250900 -0.596124 0.802808 -0.011669
-3.502800 1.946100 0.226000 -0.595743 0.803158 -0.005150
-3.249400 1.758300 0.250900 -0.595743 0.803158 -0.005150
-3.503100 1.946400 0.238100 -0.595743 0.803158 -0.005150
-3.248300 1.757100 0.212100 -0.595623 0.803167 -0.012455
-3.454000 1.909900 0.228500 -0.595623 0.803167 -0.012455
-3.450100 1.907000 0.228000 -0.595623 0.803167 -0.012455
-3.248300 1.757100 0.212100 -0.596873 0.802244 0.012107
-3.450100 1.907000 0.228000 -0.596873 0.802244 0.012107
-3.446300 1.904200 0.226200 -0.596873 0.802244 0.012107
-3.248300 1.757100 0.212100 -0.596049 0.802921 -0.006519
-3.446300 1.904200 0.226200 -0.596049 0.802921 -0.006519
-3.443100 1.901800 0.223200 -0.596049 0.802921 -0.006519
-3.248300 1.757100 0.212100 -0.595227 0.803187 -0.024404
-3.443100 1.901800 0.223200 -0.595227 0.803187 -0.024404
-3.440700 1.899900 0.219200 -0.595227 0.803187 -0.024404
-3.248300 1.757100 0.212100 -0.595696 0.803138 -0.010747
-3.440700 1.899900 0.219200 -0.595696 0.803138 -0.010747
-3.439300 1.898800 0.214600 -0.595696 0.803138 -0.010747
-3.248300 1.757100 0.212100 -0.595816 0.803121 -0.000522
-3.439300 1.898800 0.214600 -0.595816 0.803121 -0.000522
-3.438900 1.898500 0.209600 -0.595816 0.803121 -0.000522
-3.248300 1.757100 0.212100 -0.595870 0.802996 -0.011658
-3.438900 1.898500 0.209600 -0.595870 0.802996 -0.011658
-3.438500 1.898100 0.202500 -0.595870 0.802996 -0.011658
-3.260100 1.737000 0.149800 0.595794 -0.803081 0.009490
-3.374900 1.822100 0.144000 0.595794 -0.803081 0.009490
-3.379300 1.827300 0.307800 0.595794 -0.803081 0.009490
-3.260100 1.737000 0.149800 0.595794 -0.803082 0.009491
-3.379300 1.827300 0.307800 0.595794 -0.803082 0.009491
-3.264500 1.742200 0.313600 0.595794 -0.803082 0.009491
-3.226200 1.895600 0.309800 -0.589301 0.807817 -0.012473
-3.227500 1.896400 0.300200 -0.589301 0.807817 -0.012473
-3.173000 1.854300 0.148500 -0.589301 0.807817 -0.012473
-3.226200 1.895600 0.309800 -0.595780 0.803096 -0.009128
-3.173000 1.854300 0.148500 -0.595780 0.803096 -0.009128
-3.177500 1.859500 0.312300 -0.595780 0.803096 -0.009128
-3.287800 1.939400 0.142700 -0.595777 0.803101 -0.008838
-3.173000 1.854300 0.148500 -0.595777 0.803101 -0.008838
-3.227500 1.896400 0.300200 -0.595777 0.803101 -0.008838
-3.249400 1.758300 0.250900 -0.502978 0.638772 -0.582223
-3.241000 1.771100 0.272200 -0.502978 0.638772 -0.582223
-3.494700 1.959200 0.259400 -0.502978 0.638772 -0.582223
-3.249400 1.758300 0.250900 -0.502979 0.638774 -0.582220
-3.494700 1.959200 0.259400 -0.502979 0.638774 -0.582220
-3.503100 1.946400 0.238100 -0.502979 0.638774 -0.582220
-1.878900 0.857500 0.298000 -0.824279 -0.565388 0.030015
-1.879800 0.855500 0.284900 -0.824279 -0.565388 0.030015
-1.881900 0.852500 0.286200 -0.824279 -0.565388 0.030015
-1.881100 0.854300 0.298000 -0.824279 -0.565388 0.030015
-1.914000 0.831600 0.350300 -0.049824 -0.215193 0.975300
-1.923600 0.818500 0.347900 -0.049824 -0.215193 0.975300
-2.097800 0.965800 0.389300 -0.049824 -0.215193 0.975300
-1.914800 0.814400 0.342000 -0.711515 -0.590500 0.380861
-1.906400 0.825900 0.344100 -0.711515 -0.590500 0.380861
-1.905200 0.825000 0.340500 -0.711515 -0.590500 0.380861
-1.913000 0.814400 0.338600 -0.711515 -0.590500 0.380861
-3.374900 1.822100 0.144000 0.494611 -0.702141 -0.512209
-3.260100 1.737000 0.149800 0.494611 -0.702141 -0.512209
-3.256600 1.741100 0.140800 0.494611 -0.702141 -0.512209
-3.374900 1.822100 0.144000 0.492979 -0.699557 -0.517292
-3.256600 1.741100 0.140800 0.492979 -0.699557 -0.517292
-3.371700 1.826500 0.135000 0.492979 -0.699557 -0.517292
-3.173000 1.854300 0.148500 -0.523598 0.670513 -0.525602
-3.287800 1.939400 0.142700 -0.523598 0.670513 -0.525602
-3.291200 1.935000 0.133700 -0.523598 0.670513 -0.525602
-1.898800 0.838900 0.249200 -0.557297 -0.268758 -0.785614
-1.908200 0.826100 0.246900 -0.557297 -0.268758 -0.785614
-1.905700 0.824300 0.249300 -0.557297 -0.268758 -0.785614
-1.896700 0.836500 0.251500 -0.557297 -0.268758 -0.785614
-1.938700 0.796800 0.329100 0.511631 -0.709552 0.484531
-1.942700 0.790400 0.314600 0.511631 -0.709552 0.484531
-3.264500 1.742200 0.313600 0.511631 -0.709552 0.484531
-3.261500 1.746800 0.322600 0.511631 -0.709552 0.484531
-3.333000 2.019200 -0.660300 -0.103764 0.074048 -0.991842
-3.402600 1.924400 -0.674600 -0.103764 0.074048 -0.991842
-3.383300 1.910200 -0.673700 -0.103764 0.074048 -0.991842
-3.313800 2.004900 -0.659300 -0.103764 0.074048 -0.991842
-3.336700 2.356500 -0.454500 0.561561 0.809417 -0.171735
-3.313200 2.395400 -0.348000 0.561561 0.809417 -0.171735
-3.672500 2.189300 -0.144500 0.561561 0.809417 -0.171735
-3.241000 1.771100 0.272200 -0.757711 -0.652107 -0.025115
-3.244200 1.772400 0.141900 -0.757711 -0.652107 -0.025115
-3.264500 1.742200 0.313600 -0.757711 -0.652107 -0.025115
-3.376200 2.296900 -0.545600 0.600493 0.763114 -0.238881
-3.336700 2.356500 -0.454500 0.600493 0.763114 -0.238881
-3.672500 2.189300 -0.144500 0.600493 0.763114 -0.238881
-3.150700 2.286900 -0.342700 -0.553038 0.821072 -0.141386
-3.144700 2.303000 -0.225500 -0.553038 0.821072 -0.141386
-3.307300 2.411200 -0.233400 -0.553038 0.821072 -0.141386
-3.313200 2.395400 -0.348000 -0.553038 0.821072 -0.141386
-3.559400 1.925100 0.308800 0.033796 0.020871 0.999211
-3.554900 1.927600 0.308900 0.033796 0.020871 0.999211
-3.261500 1.746800 0.322600 0.033796 0.020871 0.999211
-3.189200 1.839400 0.250000 -0.802305 -0.595596 0.039647
-3.241000 1.771100 0.272200 -0.802305 -0.595596 0.039647
-3.264500 1.742200 0.313600 -0.802305 -0.595596 0.039647
-3.429000 2.220900 -0.615300 0.644248 0.709496 -0.285587
-3.376200 2.296900 -0.545600 0.644248 0.709496 -0.285587
-3.672500 2.189300 -0.144500 0.644248 0.709496 -0.285587
-3.806600 1.753300 -0.004200 0.600583 -0.698953 0.388283
-3.655200 1.630400 0.008700 0.600583 -0.698953 0.388283
-3.679200 1.590500 -0.100200 0.600583 -0.698953 0.388283
-3.830100 1.714300 -0.110800 0.600583 -0.698953 0.388283
-3.559400 1.925100 0.308800 0.373965 -0.559234 0.739870
-3.261500 1.746800 0.322600 0.373965 -0.559234 0.739870
-3.595600 1.676900 0.102900 0.373965 -0.559234 0.739870
-3.614800 1.691200 0.102000 0.373965 -0.559234 0.739870
-3.491500 2.133600 -0.658600 0.691408 0.650697 -0.313925
-3.429000 2.220900 -0.615300 0.691408 0.650697 -0.313925
-3.672500 2.189300 -0.144500 0.691408 0.650697 -0.313925
-3.150700 2.286900 -0.342700 -0.519765 0.758932 -0.392260
-3.313200 2.395400 -0.348000 -0.519765 0.758932 -0.392260
-3.336700 2.356500 -0.454500 -0.519765 0.758932 -0.392260
-3.174700 2.247000 -0.451600 -0.519765 0.758932 -0.392260
-3.261500 1.746800 0.322600 0.094459 -0.873345 0.477856
-3.264500 1.742200 0.313600 0.094459 -0.873345 0.477856
-3.636000 1.616100 0.009700 0.094459 -0.873345 0.477856
-3.830100 1.714300 -0.110800 0.634072 -0.761038 0.137015
-3.679200 1.590500 -0.100200 0.634072 -0.761038 0.137015
-3.685200 1.574400 -0.217300 0.634072 -0.761038 0.137015
-3.836000 1.698600 -0.225400 0.634072 -0.761038 0.137015
-3.595600 1.676900 0.102900 0.234950 -0.764347 0.600476
-3.261500 1.746800 0.322600 0.234950 -0.764347 0.600476
-3.636000 1.616100 0.009700 0.234950 -0.764347 0.600476
-3.144700 2.303000 -0.225500 -0.545897 0.829311 0.119334
-3.157100 2.294300 -0.108100 -0.545897 0.829311 0.119334
-3.319400 2.402600 -0.118500 -0.545897 0.829311 0.119334
-3.307300 2.411200 -0.233400 -0.545897 0.829311 0.119334
-3.559500 2.040900 -0.672700 0.749756 0.577693 -0.322704
-3.491500 2.133600 -0.658600 0.749756 0.577693 -0.322704
-3.672500 2.189300 -0.144500 0.749756 0.577693 -0.322704
-3.731500 2.109800 -0.143600 0.749756 0.577693 -0.322704
-3.215100 2.186200 -0.544800 -0.448035 0.647036 -0.616935
-3.174700 2.247000 -0.451600 -0.448035 0.647036 -0.616935
-3.336700 2.356500 -0.454500 -0.448035 0.647036 -0.616935
-3.376200 2.296900 -0.545600 -0.448035 0.647036 -0.616935
-3.614800 1.691200 0.102000 0.490332 -0.617491 0.615045
-3.595600 1.676900 0.102900 0.490332 -0.617491 0.615045
-3.636000 1.616100 0.009700 0.490332 -0.617491 0.615045
-3.655200 1.630400 0.008700 0.490332 -0.617491 0.615045
-3.823900 1.707100 -0.340200 0.626943 -0.769281 -0.123081
-3.836000 1.698600 -0.225400 0.626943 -0.769281 -0.123081
-3.685200 1.574400 -0.217300 0.626943 -0.769281 -0.123081
-3.672800 1.583100 -0.334800 0.626943 -0.769281 -0.123081
-3.313200 2.395400 -0.348000 0.532891 0.841534 -0.088588
-3.307300 2.411200 -0.233400 0.532891 0.841534 -0.088588
-3.672500 2.189300 -0.144500 0.532891 0.841534 -0.088588
-3.491500 2.133600 -0.658600 -0.064228 0.103209 -0.992584
-3.559500 2.040900 -0.672700 -0.064228 0.103209 -0.992584
-3.402600 1.924400 -0.674600 -0.064228 0.103209 -0.992584
-3.333000 2.019200 -0.660300 -0.064228 0.103209 -0.992584
-3.261500 1.746800 0.322600 0.027300 0.031407 0.999134
-3.554900 1.927600 0.308900 0.027300 0.031407 0.999134
-3.684900 2.018200 0.302500 0.027300 0.031407 0.999134
-3.628400 1.949200 -0.656500 0.783010 0.531139 -0.323707
-3.559500 2.040900 -0.672700 0.783010 0.531139 -0.323707
-3.731500 2.109800 -0.143600 0.783010 0.531139 -0.323707
-1.895500 0.834400 0.254600 -0.856503 -0.442587 -0.265555
-1.895200 0.832900 0.258100 -0.856503 -0.442587 -0.265555
-1.888400 0.842500 0.264000 -0.856503 -0.442587 -0.265555
-1.888100 0.844900 0.261000 -0.856503 -0.442587 -0.265555
-5.379200 3.352400 -0.030500 0.587017 -0.558270 0.586298
-5.584000 3.485200 -0.109100 0.587017 -0.558270 0.586298
-5.629500 3.544700 -0.098000 0.587017 -0.558270 0.586298
-5.126100 3.091800 -0.172500 0.585694 -0.810383 0.015569
-5.152600 3.112100 -0.120400 0.585694 -0.810383 0.015569
-4.752500 2.826400 0.067700 0.585694 -0.810383 0.015569
-4.751900 2.825700 0.046200 0.585694 -0.810383 0.015569
-5.580100 3.492100 -0.628400 0.399324 -0.476991 -0.782956
-5.599900 3.545300 -0.649400 0.399324 -0.476991 -0.782956
-5.621400 3.564100 -0.651200 0.399324 -0.476991 -0.782956
-5.634300 3.548000 -0.633500 0.399324 -0.476991 -0.782956
-5.580100 3.492100 -0.628400 0.660303 -0.700118 -0.271726
-5.634300 3.548000 -0.633500 0.660303 -0.700118 -0.271726
-5.645900 3.535800 -0.581100 0.660303 -0.700118 -0.271726
-5.529700 3.426100 -0.573600 0.660303 -0.700118 -0.271726
-5.047500 3.135500 0.041000 0.303872 -0.161803 0.938873
-5.276500 3.270800 -0.009800 0.303872 -0.161803 0.938873
-5.391100 3.389700 -0.026400 0.303872 -0.161803 0.938873
-5.597000 3.598200 -0.634100 0.754935 0.652482 -0.065888
-5.587900 3.614000 -0.581900 0.754935 0.652482 -0.065888
-5.610600 3.596400 -0.496100 0.754935 0.652482 -0.065888
-4.718200 2.808500 0.049100 0.455649 -0.890011 0.016264
-4.751900 2.825700 0.046200 0.455649 -0.890011 0.016264
-4.752500 2.826400 0.067700 0.455649 -0.890011 0.016264
-5.597000 3.598200 -0.634100 0.787344 0.612555 -0.069756
-5.610600 3.596400 -0.496100 0.787344 0.612555 -0.069756
-5.622000 3.579800 -0.513500 0.787344 0.612555 -0.069756
-5.608900 3.580900 -0.651400 0.787344 0.612555 -0.069756
-5.379200 3.352400 -0.030500 0.413435 -0.228775 0.881325
-5.629500 3.544700 -0.098000 0.413435 -0.228775 0.881325
-5.391100 3.389700 -0.026400 0.413435 -0.228775 0.881325
-5.634300 3.548000 -0.633500 0.845052 0.530905 -0.063456
-5.634400 3.564300 -0.495800 0.845052 0.530905 -0.063456
-5.645900 3.535800 -0.581100 0.845052 0.530905 -0.063456
-5.276500 3.270800 -0.009800 0.352654 -0.212675 0.911265
-5.379200 3.352400 -0.030500 0.352654 -0.212675 0.911265
-5.391100 3.389700 -0.026400 0.352654 -0.212675 0.911265
-4.622600 2.937400 0.047700 -0.632788 0.774311 -0.004679
-4.651500 2.961000 0.044700 -0.632788 0.774311 -0.004679
-4.627000 2.940600 -0.017800 -0.632788 0.774311 -0.004679
-5.030900 3.157900 0.040800 0.119870 0.100080 0.987732
-5.047500 3.135500 0.041000 0.119870 0.100080 0.987732
-5.391100 3.389700 -0.026400 0.119870 0.100080 0.987732
-5.374500 3.412000 -0.026700 0.119870 0.100080 0.987732
-5.529700 3.426100 -0.573600 0.671781 -0.722698 -0.162536
-5.645900 3.535800 -0.581100 0.671781 -0.722698 -0.162536
-5.657100 3.526600 -0.493900 0.671781 -0.722698 -0.162536
-5.019700 3.177000 0.030900 -0.124892 0.397872 0.908900
-5.030900 3.157900 0.040800 -0.124892 0.397872 0.908900
-5.227400 3.337000 -0.010600 -0.124892 0.397872 0.908900
-5.621400 3.564100 -0.651200 0.800653 0.594869 -0.071315
-5.608900 3.580900 -0.651400 0.800653 0.594869 -0.071315
-5.622000 3.579800 -0.513500 0.800653 0.594869 -0.071315
-4.627000 2.940600 -0.017800 -0.975354 -0.118303 -0.186252
-4.646800 2.954000 -0.130000 -0.975354 -0.118303 -0.186252
-4.654300 2.934200 -0.156700 -0.975354 -0.118303 -0.186252
-5.495600 3.393800 -0.561300 0.659804 -0.741933 -0.119136
-5.529700 3.426100 -0.573600 0.659804 -0.741933 -0.119136
-5.657100 3.526600 -0.493900 0.659804 -0.741933 -0.119136
-5.634400 3.564300 -0.495800 0.815016 0.575325 -0.068921
-5.634300 3.548000 -0.633500 0.815016 0.575325 -0.068921
-5.621400 3.564100 -0.651200 0.815016 0.575325 -0.068921
-5.622000 3.579800 -0.513500 0.815016 0.575325 -0.068921
-4.627000 2.940600 -0.017800 -0.933345 -0.316791 -0.168850
-4.654300 2.934200 -0.156700 -0.933345 -0.316791 -0.168850
-4.667800 2.894000 -0.155900 -0.933345 -0.316791 -0.168850
-4.691800 2.861600 -0.155600 -0.801969 -0.595179 -0.051065
-4.718200 2.808500 0.049100 -0.801969 -0.595179 -0.051065
-4.622600 2.937400 0.047700 -0.801969 -0.595179 -0.051065
-4.667800 2.894000 -0.155900 -0.801969 -0.595179 -0.051065
-5.457000 3.357900 -0.546200 0.656458 -0.747751 -0.099654
-5.495600 3.393800 -0.561300 0.656458 -0.747751 -0.099654
-5.657100 3.526600 -0.493900 0.656458 -0.747751 -0.099654
-5.227400 3.337000 -0.010600 -0.078026 0.353168 0.932301
-5.030900 3.157900 0.040800 -0.078026 0.353168 0.932301
-5.374500 3.412000 -0.026700 -0.078026 0.353168 0.932301
-5.642900 3.572300 -0.211500 0.808893 0.586622 -0.039587
-5.648100 3.557700 -0.321600 0.808893 0.586622 -0.039587
-5.645800 3.555000 -0.408600 0.808893 0.586622 -0.039587
-4.622600 2.937400 0.047700 -0.857993 -0.507008 -0.082402
-4.627000 2.940600 -0.017800 -0.857993 -0.507008 -0.082402
-4.667800 2.894000 -0.155900 -0.857993 -0.507008 -0.082402
-5.335400 3.411400 -0.031200 -0.110456 0.410907 0.904961
-5.227400 3.337000 -0.010600 -0.110456 0.410907 0.904961
-5.374500 3.412000 -0.026700 -0.110456 0.410907 0.904961
-5.424000 3.326400 -0.523100 0.655179 -0.751339 -0.078923
-5.457000 3.357900 -0.546200 0.655179 -0.751339 -0.078923
-5.657100 3.526600 -0.493900 0.655179 -0.751339 -0.078923
-5.663800 3.523600 -0.406900 0.655179 -0.751339 -0.078923
-5.634400 3.564300 -0.495800 0.802791 0.594813 -0.041516
-5.622000 3.579800 -0.513500 0.802791 0.594813 -0.041516
-5.645800 3.555000 -0.408600 0.802791 0.594813 -0.041516
-4.667800 2.894000 -0.155900 -0.345079 -0.263953 -0.900694
-5.369800 3.410100 -0.576100 -0.345079 -0.263953 -0.900694
-5.393800 3.377700 -0.575800 -0.345079 -0.263953 -0.900694
-4.691800 2.861600 -0.155600 -0.345079 -0.263953 -0.900694
-5.335400 3.411400 -0.031200 -0.108655 0.456072 0.883285
-5.374500 3.412000 -0.026700 -0.108655 0.456072 0.883285
-5.587100 3.601900 -0.098600 -0.108655 0.456072 0.883285
-5.645900 3.535800 -0.581100 0.855169 0.515222 -0.056853
-5.634400 3.564300 -0.495800 0.855169 0.515222 -0.056853
-5.645800 3.555000 -0.408600 0.855169 0.515222 -0.056853
-5.434500 3.319300 -0.327900 0.651830 -0.755781 -0.062554
-5.424000 3.326400 -0.523100 0.651830 -0.755781 -0.062554
-5.663800 3.523600 -0.406900 0.651830 -0.755781 -0.062554
-5.227400 3.337000 -0.010600 -0.363672 0.698542 0.616264
-5.335400 3.411400 -0.031200 -0.363672 0.698542 0.616264
-5.587100 3.601900 -0.098600 -0.363672 0.698542 0.616264
-4.723000 2.811100 -0.016300 -0.396786 -0.900533 -0.177767
-4.726400 2.837100 -0.155600 -0.396786 -0.900533 -0.177767
-4.742900 2.824500 -0.128600 -0.396786 -0.900533 -0.177767
-5.435100 3.320300 -0.242100 0.666149 -0.745806 0.004403
-5.434500 3.319300 -0.327900 0.666149 -0.745806 0.004403
-5.663800 3.523600 -0.406900 0.666149 -0.745806 0.004403
-5.666200 3.526300 -0.319900 0.666149 -0.745806 0.004403
-5.657100 3.526600 -0.493900 0.857982 0.510581 -0.056335
-5.645900 3.535800 -0.581100 0.857982 0.510581 -0.056335
-5.645800 3.555000 -0.408600 0.857982 0.510581 -0.056335
-4.742900 2.824500 -0.128600 0.567460 -0.822256 -0.043408
-5.113100 3.086700 -0.255800 0.567460 -0.822256 -0.043408
-4.999900 3.003800 -0.165300 0.567460 -0.822256 -0.043408
-5.019700 3.177000 0.030900 -0.199984 0.481008 0.853603
-5.227400 3.337000 -0.010600 -0.199984 0.481008 0.853603
-4.652100 2.961700 0.066100 -0.199984 0.481008 0.853603
-5.663800 3.523600 -0.406900 0.867652 0.494677 -0.049758
-5.657100 3.526600 -0.493900 0.867652 0.494677 -0.049758
-5.645800 3.555000 -0.408600 0.867652 0.494677 -0.049758
-4.742900 2.824500 -0.128600 0.562582 -0.826413 -0.023294
-4.999900 3.003800 -0.165300 0.562582 -0.826413 -0.023294
-4.751900 2.825700 0.046200 0.562582 -0.826413 -0.023294
-4.723000 2.811100 -0.016300 0.562582 -0.826413 -0.023294
-4.855500 3.051000 0.062400 -0.185887 0.459386 0.868568
-5.019700 3.177000 0.030900 -0.185887 0.459386 0.868568
-4.652100 2.961700 0.066100 -0.185887 0.459386 0.868568
-5.666200 3.526300 -0.319900 0.867219 0.496410 -0.038831
-5.663800 3.523600 -0.406900 0.867219 0.496410 -0.038831
-5.645800 3.555000 -0.408600 0.867219 0.496410 -0.038831
-5.648100 3.557700 -0.321600 0.867219 0.496410 -0.038831
-4.866700 3.032100 0.072300 -0.152892 0.385939 0.909766
-4.855500 3.051000 0.062400 -0.152892 0.385939 0.909766
-4.652100 2.961700 0.066100 -0.152892 0.385939 0.909766
-5.393800 3.377700 -0.575800 -0.287947 -0.222275 -0.931494
-5.369800 3.410100 -0.576100 -0.287947 -0.222275 -0.931494
-5.410900 3.440200 -0.596000 -0.287947 -0.222275 -0.931494
-5.433900 3.409200 -0.595700 -0.287947 -0.222275 -0.931494
-5.478000 3.445500 -0.612100 -0.217111 -0.170818 -0.961085
-5.433900 3.409200 -0.595700 -0.217111 -0.170818 -0.961085
-5.410900 3.440200 -0.596000 -0.217111 -0.170818 -0.961085
-5.457000 3.473800 -0.612400 -0.217111 -0.170818 -0.961085
-4.723000 2.811100 -0.016300 0.454457 -0.890766 -0.002059
-4.751900 2.825700 0.046200 0.454457 -0.890766 -0.002059
-4.718200 2.808500 0.049100 0.454457 -0.890766 -0.002059
-5.665300 3.535100 -0.209900 0.861369 0.507091 -0.030039
-5.666200 3.526300 -0.319900 0.861369 0.507091 -0.030039
-5.648100 3.557700 -0.321600 0.861369 0.507091 -0.030039
-5.642900 3.572300 -0.211500 0.861369 0.507091 -0.030039
-4.879100 3.015300 0.072500 -0.026360 -0.007720 0.999623
-4.866700 3.032100 0.072300 -0.026360 -0.007720 0.999623
-4.652100 2.961700 0.066100 -0.026360 -0.007720 0.999623
-4.752500 2.826400 0.067700 -0.026360 -0.007720 0.999623
-4.723000 2.811100 -0.016300 -0.733060 -0.675366 -0.080650
-4.718200 2.808500 0.049100 -0.733060 -0.675366 -0.080650
-4.691800 2.861600 -0.155600 -0.733060 -0.675366 -0.080650
-4.718200 2.808500 0.049100 -0.354714 -0.252928 0.900114
-4.752500 2.826400 0.067700 -0.354714 -0.252928 0.900114
-4.652100 2.961700 0.066100 -0.354714 -0.252928 0.900114
-4.622600 2.937400 0.047700 -0.354714 -0.252928 0.900114
-5.659200 3.548000 -0.140600 0.856889 0.515094 -0.020462
-5.665300 3.535100 -0.209900 0.856889 0.515094 -0.020462
-5.642900 3.572300 -0.211500 0.856889 0.515094 -0.020462
-5.650000 3.563000 -0.104000 0.807448 0.589936 -0.001859
-5.642900 3.572300 -0.211500 0.807448 0.589936 -0.001859
-5.630400 3.589500 -0.207600 0.807448 0.589936 -0.001859
-5.636800 3.581000 -0.100200 0.807448 0.589936 -0.001859
-4.726400 2.837100 -0.155600 -0.570046 -0.805043 -0.164172
-4.723000 2.811100 -0.016300 -0.570046 -0.805043 -0.164172
-4.691800 2.861600 -0.155600 -0.570046 -0.805043 -0.164172
-5.518100 3.478100 -0.626400 -0.209137 -0.165944 -0.963703
-5.478000 3.445500 -0.612100 -0.209137 -0.165944 -0.963703
-5.457000 3.473800 -0.612400 -0.209137 -0.165944 -0.963703
-5.498700 3.504200 -0.626700 -0.209137 -0.165944 -0.963703
-5.391100 3.389700 -0.026400 0.305379 -0.030043 0.951757
-5.629500 3.544700 -0.098000 0.305379 -0.030043 0.951757
-5.650000 3.563000 -0.104000 0.305379 -0.030043 0.951757
-5.515800 3.433100 -0.608300 0.024272 -0.391106 -0.920025
-5.557700 3.509800 -0.639800 0.024272 -0.391106 -0.920025
-5.550700 3.464200 -0.620600 0.024272 -0.391106 -0.920025
-5.623600 3.598800 -0.100400 0.803243 0.595651 -0.000722
-5.636800 3.581000 -0.100200 0.803243 0.595651 -0.000722
-5.630400 3.589500 -0.207600 0.803243 0.595651 -0.000722
-4.651500 2.961000 0.044700 -0.632957 0.774149 -0.007580
-4.622600 2.937400 0.047700 -0.632957 0.774149 -0.007580
-4.652100 2.961700 0.066100 -0.632957 0.774149 -0.007580
-5.659200 3.548000 -0.140600 0.842425 0.538738 -0.009033
-5.642900 3.572300 -0.211500 0.842425 0.538738 -0.009033
-5.650000 3.563000 -0.104000 0.842425 0.538738 -0.009033
-5.557700 3.509800 -0.639800 -0.199731 -0.157889 -0.967046
-5.518100 3.478100 -0.626400 -0.199731 -0.157889 -0.967046
-5.498700 3.504200 -0.626700 -0.199731 -0.157889 -0.967046
-5.539600 3.534200 -0.640000 -0.199731 -0.157889 -0.967046
-4.651500 2.961000 0.044700 -0.619208 0.785183 -0.008326
-4.652100 2.961700 0.066100 -0.619208 0.785183 -0.008326
-4.912100 3.164900 -0.107400 -0.619208 0.785183 -0.008326
-5.557700 3.509800 -0.639800 0.116312 -0.400537 -0.908868
-5.588100 3.536100 -0.647500 0.116312 -0.400537 -0.908868
-5.550700 3.464200 -0.620600 0.116312 -0.400537 -0.908868
-5.584000 3.485200 -0.109100 0.676360 -0.601632 0.424943
-5.659200 3.548000 -0.140600 0.676360 -0.601632 0.424943
-5.650000 3.563000 -0.104000 0.676360 -0.601632 0.424943
-5.629500 3.544700 -0.098000 0.676360 -0.601632 0.424943
-5.515800 3.433100 -0.608300 0.476785 -0.729185 -0.490882
-5.550700 3.464200 -0.620600 0.476785 -0.729185 -0.490882
-5.477300 3.398300 -0.594000 0.476785 -0.729185 -0.490882
-5.346400 3.468700 -0.137300 -0.536944 0.821602 0.191472
-5.517800 3.574400 -0.110200 -0.536944 0.821602 0.191472
-5.507400 3.583800 -0.179700 -0.536944 0.821602 0.191472
-4.627000 2.940600 -0.017800 -0.621101 0.783593 -0.014687
-4.651500 2.961000 0.044700 -0.621101 0.783593 -0.014687
-4.912100 3.164900 -0.107400 -0.621101 0.783593 -0.014687
-4.646800 2.954000 -0.130000 -0.621101 0.783593 -0.014687
-3.150700 2.286900 -0.342700 -0.561650 0.729335 -0.390666
-3.174700 2.247000 -0.451600 -0.561650 0.729335 -0.390666
-3.155500 2.232800 -0.450600 -0.561650 0.729335 -0.390666
-3.131500 2.272600 -0.341700 -0.561650 0.729335 -0.390666
-5.588100 3.536100 -0.647500 -0.147245 -0.117888 -0.982050
-5.557700 3.509800 -0.639800 -0.147245 -0.117888 -0.982050
-5.539600 3.534200 -0.640000 -0.147245 -0.117888 -0.982050
-5.573000 3.556500 -0.647700 -0.147245 -0.117888 -0.982050
-5.557700 3.509800 -0.639800 -0.000375 -0.379726 -0.925099
-5.515800 3.433100 -0.608300 -0.000375 -0.379726 -0.925099
-5.477300 3.398300 -0.594000 -0.000375 -0.379726 -0.925099
-5.040700 3.262900 -0.122100 -0.545704 0.822458 0.160532
-5.346400 3.468700 -0.137300 -0.545704 0.822458 0.160532
-5.507400 3.583800 -0.179700 -0.545704 0.822458 0.160532
-5.610200 3.616600 -0.104600 0.798285 0.602277 -0.001905
-5.623600 3.598800 -0.100400 0.798285 0.602277 -0.001905
-5.630400 3.589500 -0.207600 0.798285 0.602277 -0.001905
-5.617600 3.606400 -0.211900 0.798285 0.602277 -0.001905
-5.391100 3.389700 -0.026400 0.283669 0.005592 0.958906
-5.650000 3.563000 -0.104000 0.283669 0.005592 0.958906
-5.636800 3.581000 -0.100200 0.283669 0.005592 0.958906
-4.622600 2.937400 0.047700 0.026895 0.031574 0.999139
-4.439900 2.801900 0.056900 0.026895 0.031574 0.999139
-4.535500 2.673000 0.058400 0.026895 0.031574 0.999139
-4.622600 2.937400 0.047700 0.027619 0.031335 0.999127
-4.535500 2.673000 0.058400 0.027619 0.031335 0.999127
-4.718200 2.808500 0.049100 0.027619 0.031335 0.999127
-4.663100 2.790200 -0.151100 -0.028893 -0.039324 -0.998809
-4.570200 2.721300 -0.145700 -0.028893 -0.039324 -0.998809
-4.527600 2.739900 -0.145200 -0.028893 -0.039324 -0.998809
-4.663100 2.790200 -0.151100 -0.029594 -0.037442 -0.998861
-4.527600 2.739900 -0.145200 -0.029594 -0.037442 -0.998861
-4.628600 2.814800 -0.151000 -0.029594 -0.037442 -0.998861
-5.518100 3.478100 -0.626400 -0.021047 -0.366850 -0.930042
-5.557700 3.509800 -0.639800 -0.021047 -0.366850 -0.930042
-5.477300 3.398300 -0.594000 -0.021047 -0.366850 -0.930042
-5.391100 3.389700 -0.026400 0.179094 0.145225 0.973054
-5.636800 3.581000 -0.100200 0.179094 0.145225 0.973054
-5.623600 3.598800 -0.100400 0.179094 0.145225 0.973054
-5.374500 3.412000 -0.026700 0.179094 0.145225 0.973054
-4.646800 2.954000 -0.130000 -0.620206 0.783737 -0.033176
-4.912100 3.164900 -0.107400 -0.620206 0.783737 -0.033176
-4.893300 3.147500 -0.167000 -0.620206 0.783737 -0.033176
-4.646800 2.954000 -0.130000 -0.622096 0.780373 -0.063364
-4.893300 3.147500 -0.167000 -0.622096 0.780373 -0.063364
-5.006500 3.230400 -0.257400 -0.622096 0.780373 -0.063364
-5.478000 3.445500 -0.612100 -0.042363 -0.357182 -0.933074
-5.518100 3.478100 -0.626400 -0.042363 -0.357182 -0.933074
-5.477300 3.398300 -0.594000 -0.042363 -0.357182 -0.933074
-4.731400 2.817100 -0.029600 0.594507 -0.804041 0.008958
-4.708400 2.799100 -0.118800 0.594507 -0.804041 0.008958
-4.742900 2.824500 -0.128600 0.594507 -0.804041 0.008958
-4.491100 2.838700 -0.111500 -0.584248 0.811206 0.024468
-4.483400 2.833100 -0.109700 -0.584248 0.811206 0.024468
-4.476200 2.827800 -0.105900 -0.584248 0.811206 0.024468
-4.491100 2.838700 -0.111500 -0.582538 0.812213 0.030979
-4.476200 2.827800 -0.105900 -0.582538 0.812213 0.030979
-4.469800 2.823000 -0.100400 -0.582538 0.812213 0.030979
-4.491100 2.838700 -0.111500 -0.598330 0.801108 -0.015032
-4.469800 2.823000 -0.100400 -0.598330 0.801108 -0.015032
-4.464400 2.819100 -0.093300 -0.598330 0.801108 -0.015032
-4.491100 2.838700 -0.111500 -0.598733 0.800790 -0.015965
-4.464400 2.819100 -0.093300 -0.598733 0.800790 -0.015965
-4.460300 2.816200 -0.085000 -0.598733 0.800790 -0.015965
-4.491100 2.838700 -0.111500 -0.594646 0.803943 -0.008538
-4.460300 2.816200 -0.085000 -0.594646 0.803943 -0.008538
-4.444400 2.805000 -0.032200 -0.594646 0.803943 -0.008538
-4.491100 2.838700 -0.111500 -0.594494 0.804056 -0.008401
-4.444400 2.805000 -0.032200 -0.594494 0.804056 -0.008401
-4.444200 2.805100 -0.008500 -0.594494 0.804056 -0.008401
-4.491100 2.838700 -0.111500 -0.595770 0.803101 -0.009293
-4.444200 2.805100 -0.008500 -0.595770 0.803101 -0.009293
-4.627000 2.940600 -0.017800 -0.595770 0.803101 -0.009293
-4.491100 2.838700 -0.111500 -0.595703 0.803149 -0.009443
-4.627000 2.940600 -0.017800 -0.595703 0.803149 -0.009443
-4.635300 2.946600 -0.031100 -0.595703 0.803149 -0.009443
-4.491100 2.838700 -0.111500 -0.595997 0.802940 -0.008635
-4.635300 2.946600 -0.031100 -0.595997 0.802940 -0.008635
-4.584000 2.907600 -0.116800 -0.595997 0.802940 -0.008635
-5.517800 3.574400 -0.110200 -0.467389 0.841017 0.272466
-5.610200 3.616600 -0.104600 -0.467389 0.841017 0.272466
-5.598700 3.629500 -0.141500 -0.467389 0.841017 0.272466
-5.507400 3.583800 -0.179700 -0.467389 0.841017 0.272466
-5.113100 3.086700 -0.255800 0.558951 -0.825765 -0.075407
-4.742900 2.824500 -0.128600 0.558951 -0.825765 -0.075407
-5.266100 3.206500 -0.433600 0.558951 -0.825765 -0.075407
-5.588100 3.536100 -0.647500 -0.096665 -0.081604 -0.991966
-5.573000 3.556500 -0.647700 -0.096665 -0.081604 -0.991966
-5.585000 3.565300 -0.649600 -0.096665 -0.081604 -0.991966
-5.599900 3.545300 -0.649400 -0.096665 -0.081604 -0.991966
-5.006500 3.230400 -0.257400 -0.622326 0.778093 -0.085338
-5.163900 3.346200 -0.349400 -0.622326 0.778093 -0.085338
-5.167400 3.339600 -0.435100 -0.622326 0.778093 -0.085338
-4.652100 2.961700 0.066100 -0.395009 0.721686 0.568451
-5.227400 3.337000 -0.010600 -0.395009 0.721686 0.568451
-5.517800 3.574400 -0.110200 -0.395009 0.721686 0.568451
-5.585000 3.565300 -0.649600 -0.054736 -0.051462 -0.997174
-5.602100 3.575900 -0.651100 -0.054736 -0.051462 -0.997174
-5.614700 3.558900 -0.650900 -0.054736 -0.051462 -0.997174
-5.599900 3.545300 -0.649400 -0.054736 -0.051462 -0.997174
-5.433900 3.409200 -0.595700 -0.056779 -0.352955 -0.933916
-5.478000 3.445500 -0.612100 -0.056779 -0.352955 -0.933916
-5.437300 3.364200 -0.578900 -0.056779 -0.352955 -0.933916
-4.498200 2.818500 -0.146800 -0.034663 -0.031597 -0.998900
-4.591100 2.887300 -0.152200 -0.034663 -0.031597 -0.998900
-4.604600 2.847200 -0.151400 -0.034663 -0.031597 -0.998900
-4.498200 2.818500 -0.146800 -0.035082 -0.030047 -0.998933
-4.604600 2.847200 -0.151400 -0.035082 -0.030047 -0.998933
-4.503600 2.772300 -0.145600 -0.035082 -0.030047 -0.998933
-5.610200 3.616600 -0.104600 0.759656 0.650257 -0.009424
-5.617600 3.606400 -0.211900 0.759656 0.650257 -0.009424
-5.598700 3.629500 -0.141500 0.759656 0.650257 -0.009424
-4.691800 2.861600 -0.155600 -0.270471 -0.360089 -0.892850
-5.393800 3.377700 -0.575800 -0.270471 -0.360089 -0.892850
-5.398400 3.331100 -0.559000 -0.270471 -0.360089 -0.892850
-4.726400 2.837100 -0.155600 -0.270471 -0.360089 -0.892850
-5.346400 3.468700 -0.137300 -0.537033 0.818041 0.205924
-4.652100 2.961700 0.066100 -0.537033 0.818041 0.205924
-5.517800 3.574400 -0.110200 -0.537033 0.818041 0.205924
-5.478000 3.445500 -0.612100 -0.047797 -0.357024 -0.932871
-5.477300 3.398300 -0.594000 -0.047797 -0.357024 -0.932871
-5.437300 3.364200 -0.578900 -0.047797 -0.357024 -0.932871
-5.040700 3.262900 -0.122100 -0.548590 0.823642 0.143743
-5.507400 3.583800 -0.179700 -0.548590 0.823642 0.143743
-5.322600 3.471900 -0.243800 -0.548590 0.823642 0.143743
-5.588100 3.536100 -0.647500 0.183797 -0.419337 -0.889030
-5.599900 3.545300 -0.649400 0.183797 -0.419337 -0.889030
-5.580100 3.492100 -0.628400 0.183797 -0.419337 -0.889030
-5.227400 3.337000 -0.010600 -0.381472 0.713305 0.587941
-5.587100 3.601900 -0.098600 -0.381472 0.713305 0.587941
-5.517800 3.574400 -0.110200 -0.381472 0.713305 0.587941
-5.550700 3.464200 -0.620600 0.158576 -0.417273 -0.894839
-5.588100 3.536100 -0.647500 0.158576 -0.417273 -0.894839
-5.580100 3.492100 -0.628400 0.158576 -0.417273 -0.894839
-4.612300 2.928600 -0.120200 -0.556392 0.579693 -0.595302
-4.715300 2.979400 -0.167000 -0.556392 0.579693 -0.595302
-4.682600 2.955100 -0.160100 -0.556392 0.579693 -0.595302
-4.584000 2.907600 -0.116800 -0.539458 0.679193 -0.497677
-4.654300 2.934200 -0.156700 -0.539458 0.679193 -0.497677
-4.591100 2.887300 -0.152200 -0.539458 0.679193 -0.497677
-4.491100 2.838700 -0.111500 -0.538820 0.679880 -0.497430
-4.498200 2.818500 -0.146800 -0.538820 0.679880 -0.497430
-4.445700 2.779600 -0.143100 -0.538820 0.679880 -0.497430
-4.483400 2.833100 -0.109700 -0.633947 0.681410 -0.365775
-4.438000 2.773900 -0.141300 -0.633947 0.681410 -0.365775
-4.430200 2.768200 -0.138400 -0.633947 0.681410 -0.365775
-4.476200 2.827800 -0.105900 -0.683172 0.678639 -0.269675
-4.423000 2.762800 -0.134700 -0.683172 0.678639 -0.269675
-4.415900 2.757600 -0.129800 -0.683172 0.678639 -0.269675
-5.374500 3.412000 -0.026700 0.072749 0.280589 0.957067
-5.623600 3.598800 -0.100400 0.072749 0.280589 0.957067
-5.610200 3.616600 -0.104600 0.072749 0.280589 0.957067
-4.481500 2.655800 -0.123200 0.445646 -0.874613 -0.190927
-4.565900 2.693500 -0.098900 0.445646 -0.874613 -0.190927
-4.475300 2.651200 -0.116600 0.445646 -0.874613 -0.190927
-4.495100 2.665700 -0.133600 0.453009 -0.857404 -0.244214
-4.572300 2.698200 -0.104500 0.453009 -0.857404 -0.244214
-4.487900 2.660500 -0.128700 0.453009 -0.857404 -0.244214
-4.510100 2.676800 -0.140200 0.472898 -0.809710 -0.347472
-4.579500 2.703600 -0.108200 0.472898 -0.809710 -0.347472
-4.502300 2.671000 -0.137300 0.472898 -0.809710 -0.347472
-4.570200 2.721300 -0.145700 0.499485 -0.719944 -0.481867
-4.587200 2.709200 -0.110000 0.499485 -0.719944 -0.481867
-4.517700 2.682400 -0.142000 0.499485 -0.719944 -0.481867
-4.726400 2.837100 -0.155600 0.499286 -0.720108 -0.481828
-4.680100 2.778100 -0.115400 0.499286 -0.720108 -0.481828
-4.663100 2.790200 -0.151100 0.499286 -0.720108 -0.481828
-4.787400 2.882200 -0.165900 0.404605 -0.710775 -0.575407
-4.708400 2.799100 -0.118800 0.404605 -0.710775 -0.575407
-4.754700 2.858000 -0.159000 0.404605 -0.710775 -0.575407
-5.014200 3.242600 -0.174200 -0.598205 0.801270 -0.010848
-5.040700 3.262900 -0.122100 -0.598205 0.801270 -0.010848
-5.322600 3.471900 -0.243800 -0.598205 0.801270 -0.010848
-5.322400 3.470400 -0.329600 -0.598205 0.801270 -0.010848
-4.646800 2.954000 -0.130000 -0.627089 0.773435 -0.092513
-5.006500 3.230400 -0.257400 -0.627089 0.773435 -0.092513
-5.167400 3.339600 -0.435100 -0.627089 0.773435 -0.092513
-4.460900 2.640800 -0.093200 0.436781 -0.897262 -0.064376
-4.556400 2.686600 -0.083600 0.436781 -0.897262 -0.064376
-4.450400 2.633400 -0.061300 0.436781 -0.897262 -0.064376
-4.469900 2.647300 -0.109500 0.440108 -0.888448 -0.130250
-4.560500 2.689600 -0.091900 0.440108 -0.888448 -0.130250
-4.465000 2.643700 -0.101500 0.440108 -0.888448 -0.130250
-5.328500 3.455200 -0.524500 -0.560434 0.824021 -0.083081
-5.322400 3.470400 -0.329600 -0.560434 0.824021 -0.083081
-5.579300 3.637500 -0.408200 -0.560434 0.824021 -0.083081
-5.367200 3.478900 -0.547500 -0.560434 0.824021 -0.083081
-5.550700 3.464200 -0.620600 0.606340 -0.728236 -0.319413
-5.580100 3.492100 -0.628400 0.606340 -0.728236 -0.319413
-5.529700 3.426100 -0.573600 0.606340 -0.728236 -0.319413
-5.587100 3.601900 -0.098600 0.062407 0.291533 0.954523
-5.374500 3.412000 -0.026700 0.062407 0.291533 0.954523
-5.610200 3.616600 -0.104600 0.062407 0.291533 0.954523
-4.646800 2.954000 -0.130000 -0.685742 0.537578 -0.490681
-5.167400 3.339600 -0.435100 -0.685742 0.537578 -0.490681
-5.326300 3.428200 -0.560100 -0.685742 0.537578 -0.490681
-4.604600 2.847200 -0.151400 -0.041484 -0.039973 -0.998339
-4.667800 2.894000 -0.155900 -0.041484 -0.039973 -0.998339
-4.691800 2.861600 -0.155600 -0.041484 -0.039973 -0.998339
-4.604600 2.847200 -0.151400 -0.041027 -0.042715 -0.998245
-4.691800 2.861600 -0.155600 -0.041027 -0.042715 -0.998245
-4.628600 2.814800 -0.151000 -0.041027 -0.042715 -0.998245
-4.451100 2.733400 -0.141900 -0.039531 -0.041607 -0.998352
-4.503600 2.772300 -0.145600 -0.039531 -0.041607 -0.998352
-4.527600 2.739900 -0.145200 -0.039531 -0.041607 -0.998352
-4.451100 2.733400 -0.141900 -0.039510 -0.041844 -0.998343
-4.527600 2.739900 -0.145200 -0.039510 -0.041844 -0.998343
-4.475200 2.701100 -0.141500 -0.039510 -0.041844 -0.998343
-4.742900 2.824500 -0.128600 0.266524 -0.800688 -0.536529
-4.726400 2.837100 -0.155600 0.266524 -0.800688 -0.536529
-5.398400 3.331100 -0.559000 0.266524 -0.800688 -0.536529
-5.550700 3.464200 -0.620600 0.578220 -0.740703 -0.342084
-5.529700 3.426100 -0.573600 0.578220 -0.740703 -0.342084
-5.495600 3.393800 -0.561300 0.578220 -0.740703 -0.342084
-5.517800 3.574400 -0.110200 -0.393468 0.801852 0.449684
-5.587100 3.601900 -0.098600 -0.393468 0.801852 0.449684
-5.610200 3.616600 -0.104600 -0.393468 0.801852 0.449684
-5.266100 3.206500 -0.433600 0.321083 -0.819192 -0.475216
-4.742900 2.824500 -0.128600 0.321083 -0.819192 -0.475216
-5.398400 3.331100 -0.559000 0.321083 -0.819192 -0.475216
-4.654300 2.934200 -0.156700 -0.683366 0.481353 -0.548918
-4.646800 2.954000 -0.130000 -0.683366 0.481353 -0.548918
-5.326300 3.428200 -0.560100 -0.683366 0.481353 -0.548918
-5.550700 3.464200 -0.620600 0.546366 -0.746881 -0.379016
-5.495600 3.393800 -0.561300 0.546366 -0.746881 -0.379016
-5.457000 3.357900 -0.546200 0.546366 -0.746881 -0.379016
-4.652100 2.961700 0.066100 -0.541490 0.818515 0.191890
-5.346400 3.468700 -0.137300 -0.541490 0.818515 0.191890
-5.040700 3.262900 -0.122100 -0.541490 0.818515 0.191890
-5.477300 3.398300 -0.594000 0.522643 -0.747564 -0.409869
-5.550700 3.464200 -0.620600 0.522643 -0.747564 -0.409869
-5.457000 3.357900 -0.546200 0.522643 -0.747564 -0.409869
-5.433900 3.409200 -0.595700 -0.174908 -0.352496 -0.919323
-5.437300 3.364200 -0.578900 -0.174908 -0.352496 -0.919323
-5.398400 3.331100 -0.559000 -0.174908 -0.352496 -0.919323
-5.393800 3.377700 -0.575800 -0.174908 -0.352496 -0.919323
-4.912100 3.164900 -0.107400 -0.603847 0.796606 0.028071
-4.652100 2.961700 0.066100 -0.603847 0.796606 0.028071
-5.040700 3.262900 -0.122100 -0.603847 0.796606 0.028071
-4.667800 2.894000 -0.155900 -0.412059 -0.169456 -0.895261
-4.654300 2.934200 -0.156700 -0.412059 -0.169456 -0.895261
-5.326300 3.428200 -0.560100 -0.412059 -0.169456 -0.895261
-5.369800 3.410100 -0.576100 -0.412059 -0.169456 -0.895261
-5.163900 3.346200 -0.349400 -0.613587 0.787446 -0.058644
-5.006500 3.230400 -0.257400 -0.613587 0.787446 -0.058644
-5.014200 3.242600 -0.174200 -0.613587 0.787446 -0.058644
-5.171600 3.358400 -0.266100 -0.613587 0.787446 -0.058644
-5.437300 3.364200 -0.578900 0.482351 -0.759264 -0.436870
-5.477300 3.398300 -0.594000 0.482351 -0.759264 -0.436870
-5.457000 3.357900 -0.546200 0.482351 -0.759264 -0.436870
-5.113100 3.086700 -0.255800 0.565432 -0.822043 -0.067321
-5.266100 3.206500 -0.433600 0.565432 -0.822043 -0.067321
-5.270500 3.202500 -0.347800 0.565432 -0.822043 -0.067321
-5.266100 3.206500 -0.433600 0.402793 -0.825526 -0.395304
-5.398400 3.331100 -0.559000 0.402793 -0.825526 -0.395304
-5.424000 3.326400 -0.523100 0.402793 -0.825526 -0.395304
-5.581300 3.628800 -0.495100 0.725552 0.686199 -0.052003
-5.579300 3.637500 -0.408200 0.725552 0.686199 -0.052003
-5.604000 3.611300 -0.409300 0.725552 0.686199 -0.052003
-5.410900 3.440200 -0.596000 -0.379021 -0.084725 -0.921501
-5.369800 3.410100 -0.576100 -0.379021 -0.084725 -0.921501
-5.326300 3.428200 -0.560100 -0.379021 -0.084725 -0.921501
-5.368600 3.456800 -0.579900 -0.379021 -0.084725 -0.921501
-4.439900 2.801900 0.056900 -0.595726 0.803187 -0.000779
-4.622600 2.937400 0.047700 -0.595726 0.803187 -0.000779
-4.627000 2.940600 -0.017800 -0.595726 0.803187 -0.000779
-4.439900 2.801900 0.056900 -0.595485 0.803366 0.000155
-4.627000 2.940600 -0.017800 -0.595485 0.803366 0.000155
-4.444200 2.805100 -0.008500 -0.595485 0.803366 0.000155
-4.749800 3.004800 -0.176800 -0.548007 0.480043 -0.685016
-4.715300 2.979400 -0.167000 -0.548007 0.480043 -0.685016
-4.612300 2.928600 -0.120200 -0.548007 0.480043 -0.685016
-4.749800 3.004800 -0.176800 -0.548010 0.480054 -0.685006
-4.612300 2.928600 -0.120200 -0.548010 0.480054 -0.685006
-4.646800 2.954000 -0.130000 -0.548010 0.480054 -0.685006
-4.654300 2.934200 -0.156700 -0.045147 -0.035029 -0.998366
-4.667800 2.894000 -0.155900 -0.045147 -0.035029 -0.998366
-4.604600 2.847200 -0.151400 -0.045147 -0.035029 -0.998366
-4.654300 2.934200 -0.156700 -0.045051 -0.035084 -0.998368
-4.604600 2.847200 -0.151400 -0.045051 -0.035084 -0.998368
-4.591100 2.887300 -0.152200 -0.045051 -0.035084 -0.998368
-4.682600 2.955100 -0.160100 -0.545364 0.652953 -0.525576
-4.654300 2.934200 -0.156700 -0.545364 0.652953 -0.525576
-4.584000 2.907600 -0.116800 -0.545364 0.652953 -0.525576
-4.682600 2.955100 -0.160100 -0.545513 0.649345 -0.529874
-4.584000 2.907600 -0.116800 -0.545513 0.649345 -0.529874
-4.612300 2.928600 -0.120200 -0.545513 0.649345 -0.529874
-4.498200 2.818500 -0.146800 -0.047072 -0.031434 -0.998397
-4.503600 2.772300 -0.145600 -0.047072 -0.031434 -0.998397
-4.451100 2.733400 -0.141900 -0.047072 -0.031434 -0.998397
-4.498200 2.818500 -0.146800 -0.047072 -0.031434 -0.998397
-4.451100 2.733400 -0.141900 -0.047072 -0.031434 -0.998397
-4.445700 2.779600 -0.143100 -0.047072 -0.031434 -0.998397
-4.591100 2.887300 -0.152200 -0.534548 0.682696 -0.498182
-4.498200 2.818500 -0.146800 -0.534548 0.682696 -0.498182
-4.491100 2.838700 -0.111500 -0.534548 0.682696 -0.498182
-4.591100 2.887300 -0.152200 -0.534562 0.682420 -0.498545
-4.491100 2.838700 -0.111500 -0.534562 0.682420 -0.498545
-4.584000 2.907600 -0.116800 -0.534562 0.682420 -0.498545
-4.751900 2.825700 0.046200 0.571020 -0.820654 -0.021492
-4.999900 3.003800 -0.165300 0.571020 -0.820654 -0.021492
-5.126100 3.091800 -0.172500 0.571020 -0.820654 -0.021492
-4.912100 3.164900 -0.107400 -0.612941 0.789923 -0.018033
-5.040700 3.262900 -0.122100 -0.612941 0.789923 -0.018033
-5.014200 3.242600 -0.174200 -0.612941 0.789923 -0.018033
-4.893300 3.147500 -0.167000 -0.612941 0.789923 -0.018033
-4.445700 2.779600 -0.143100 -0.602138 0.682715 -0.413920
-4.438000 2.773900 -0.141300 -0.602138 0.682715 -0.413920
-4.483400 2.833100 -0.109700 -0.602138 0.682715 -0.413920
-4.445700 2.779600 -0.143100 -0.595660 0.683323 -0.422206
-4.483400 2.833100 -0.109700 -0.595660 0.683323 -0.422206
-4.491100 2.838700 -0.111500 -0.595660 0.683323 -0.422206
-5.587900 3.614000 -0.581900 0.738492 0.671730 -0.058377
-5.581300 3.628800 -0.495100 0.738492 0.671730 -0.058377
-5.604000 3.611300 -0.409300 0.738492 0.671730 -0.058377
-4.430200 2.768200 -0.138400 -0.666656 0.680441 -0.304253
-4.423000 2.762800 -0.134700 -0.666656 0.680441 -0.304253
-4.476200 2.827800 -0.105900 -0.666656 0.680441 -0.304253
-4.430200 2.768200 -0.138400 -0.664151 0.680908 -0.308654
-4.476200 2.827800 -0.105900 -0.664151 0.680908 -0.308654
-4.483400 2.833100 -0.109700 -0.664151 0.680908 -0.308654
-4.415900 2.757600 -0.129800 -0.700453 0.677782 -0.223558
-4.469800 2.823000 -0.100400 -0.700453 0.677782 -0.223558
-4.476200 2.827800 -0.105900 -0.700453 0.677782 -0.223558
-5.610600 3.596400 -0.496100 0.740555 0.669435 -0.058606
-5.587900 3.614000 -0.581900 0.740555 0.669435 -0.058606
-5.604000 3.611300 -0.409300 0.740555 0.669435 -0.058606
-4.565900 2.693500 -0.098900 0.442174 -0.884049 -0.151461
-4.560500 2.689600 -0.091900 0.442174 -0.884049 -0.151461
-4.469900 2.647300 -0.109500 0.442174 -0.884049 -0.151461
-4.565900 2.693500 -0.098900 0.442130 -0.884395 -0.149552
-4.469900 2.647300 -0.109500 0.442130 -0.884395 -0.149552
-4.475300 2.651200 -0.116600 0.442130 -0.884395 -0.149552
-4.572300 2.698200 -0.104500 0.449179 -0.867299 -0.214547
-4.565900 2.693500 -0.098900 0.449179 -0.867299 -0.214547
-4.481500 2.655800 -0.123200 0.449179 -0.867299 -0.214547
-4.572300 2.698200 -0.104500 0.449393 -0.866449 -0.217511
-4.481500 2.655800 -0.123200 0.449393 -0.866449 -0.217511
-4.487900 2.660500 -0.128700 0.449393 -0.866449 -0.217511
-5.457000 3.473800 -0.612400 -0.349784 0.028721 -0.936390
-5.410900 3.440200 -0.596000 -0.349784 0.028721 -0.936390
-5.368600 3.456800 -0.579900 -0.349784 0.028721 -0.936390
-5.412000 3.486200 -0.595000 -0.349784 0.028721 -0.936390
-4.999900 3.003800 -0.165300 0.570062 -0.820689 -0.038719
-5.113100 3.086700 -0.255800 0.570062 -0.820689 -0.038719
-5.126100 3.091800 -0.172500 0.570062 -0.820689 -0.038719
-4.579500 2.703600 -0.108200 0.465182 -0.830397 -0.306669
-4.572300 2.698200 -0.104500 0.465182 -0.830397 -0.306669
-4.495100 2.665700 -0.133600 0.465182 -0.830397 -0.306669
-4.579500 2.703600 -0.108200 0.463818 -0.835586 -0.294395
-4.495100 2.665700 -0.133600 0.463818 -0.835586 -0.294395
-4.502300 2.671000 -0.137300 0.463818 -0.835586 -0.294395
-5.437300 3.364200 -0.578900 0.451630 -0.784964 -0.424101
-5.457000 3.357900 -0.546200 0.451630 -0.784964 -0.424101
-5.424000 3.326400 -0.523100 0.451630 -0.784964 -0.424101
-5.398400 3.331100 -0.559000 0.451630 -0.784964 -0.424101
-4.587200 2.709200 -0.110000 0.481809 -0.786607 -0.386147
-4.579500 2.703600 -0.108200 0.481809 -0.786607 -0.386147
-4.510100 2.676800 -0.140200 0.481809 -0.786607 -0.386147
-4.587200 2.709200 -0.110000 0.482936 -0.782056 -0.393906
-4.510100 2.676800 -0.140200 0.482936 -0.782056 -0.393906
-4.517700 2.682400 -0.142000 0.482936 -0.782056 -0.393906
-5.113100 3.086700 -0.255800 0.576845 -0.815871 -0.040049
-5.270500 3.202500 -0.347800 0.576845 -0.815871 -0.040049
-5.283500 3.207600 -0.264400 0.576845 -0.815871 -0.040049
-5.126100 3.091800 -0.172500 0.576845 -0.815871 -0.040049
-5.006500 3.230400 -0.257400 -0.619342 0.783014 -0.057494
-4.893300 3.147500 -0.167000 -0.619342 0.783014 -0.057494
-5.014200 3.242600 -0.174200 -0.619342 0.783014 -0.057494
-4.680100 2.778100 -0.115400 0.503457 -0.716650 -0.482642
-4.587200 2.709200 -0.110000 0.503457 -0.716650 -0.482642
-4.570200 2.721300 -0.145700 0.503457 -0.716650 -0.482642
-4.680100 2.778100 -0.115400 0.503457 -0.716650 -0.482642
-4.570200 2.721300 -0.145700 0.503457 -0.716650 -0.482642
-4.663100 2.790200 -0.151100 0.503457 -0.716650 -0.482642
-4.517700 2.682400 -0.142000 -0.033638 -0.049760 -0.998195
-4.475200 2.701100 -0.141500 -0.033638 -0.049760 -0.998195
-4.527600 2.739900 -0.145200 -0.033638 -0.049760 -0.998195
-4.517700 2.682400 -0.142000 -0.033456 -0.049792 -0.998199
-4.527600 2.739900 -0.145200 -0.033456 -0.049792 -0.998199
-4.570200 2.721300 -0.145700 -0.033456 -0.049792 -0.998199
-4.708400 2.799100 -0.118800 0.471726 -0.718465 -0.511158
-4.680100 2.778100 -0.115400 0.471726 -0.718465 -0.511158
-4.726400 2.837100 -0.155600 0.471726 -0.718465 -0.511158
-4.708400 2.799100 -0.118800 0.469302 -0.718893 -0.512785
-4.726400 2.837100 -0.155600 0.469302 -0.718893 -0.512785
-4.754700 2.858000 -0.159000 0.469302 -0.718893 -0.512785
-4.663100 2.790200 -0.151100 -0.037113 -0.047991 -0.998158
-4.628600 2.814800 -0.151000 -0.037113 -0.047991 -0.998158
-4.691800 2.861600 -0.155600 -0.037113 -0.047991 -0.998158
-4.663100 2.790200 -0.151100 -0.034677 -0.048973 -0.998198
-4.691800 2.861600 -0.155600 -0.034677 -0.048973 -0.998198
-4.726400 2.837100 -0.155600 -0.034677 -0.048973 -0.998198
-4.742900 2.824500 -0.128600 0.301043 -0.670513 -0.678075
-4.708400 2.799100 -0.118800 0.301043 -0.670513 -0.678075
-4.787400 2.882200 -0.165900 0.301043 -0.670513 -0.678075
-4.540300 2.675600 -0.007000 0.596047 -0.802863 0.011828
-4.723000 2.811100 -0.016300 0.596047 -0.802863 0.011828
-4.718200 2.808500 0.049100 0.596047 -0.802863 0.011828
-4.540300 2.675600 -0.007000 0.596047 -0.802863 0.011828
-4.718200 2.808500 0.049100 0.596047 -0.802863 0.011828
-4.535500 2.673000 0.058400 0.596047 -0.802863 0.011828
-5.498700 3.504200 -0.626700 -0.350561 0.040746 -0.935653
-5.457000 3.473800 -0.612400 -0.350561 0.040746 -0.935653
-5.412000 3.486200 -0.595000 -0.350561 0.040746 -0.935653
-5.270500 3.202500 -0.347800 0.582369 -0.810487 -0.062897
-5.266100 3.206500 -0.433600 0.582369 -0.810487 -0.062897
-5.424000 3.326400 -0.523100 0.582369 -0.810487 -0.062897
-5.434500 3.319300 -0.327900 0.582369 -0.810487 -0.062897
-4.556400 2.686600 -0.083600 0.438024 -0.897072 -0.058275
-4.540500 2.675400 -0.030700 0.438024 -0.897072 -0.058275
-4.434500 2.622200 -0.008500 0.438024 -0.897072 -0.058275
-4.556400 2.686600 -0.083600 0.437953 -0.897098 -0.058412
-4.434500 2.622200 -0.008500 0.437953 -0.897098 -0.058412
-4.450400 2.633400 -0.061300 0.437953 -0.897098 -0.058412
-5.622000 3.579800 -0.513500 0.802561 0.595140 -0.041274
-5.610600 3.596400 -0.496100 0.802561 0.595140 -0.041274
-5.604000 3.611300 -0.409300 0.802561 0.595140 -0.041274
-5.645800 3.555000 -0.408600 0.802561 0.595140 -0.041274
-5.642900 3.572300 -0.211500 0.802805 0.594859 -0.040594
-5.645800 3.555000 -0.408600 0.802805 0.594859 -0.040594
-5.604000 3.611300 -0.409300 0.802805 0.594859 -0.040594
-5.630400 3.589500 -0.207600 0.802805 0.594859 -0.040594
-4.560500 2.689600 -0.091900 0.438626 -0.892411 -0.105873
-4.556400 2.686600 -0.083600 0.438626 -0.892411 -0.105873
-4.460900 2.640800 -0.093200 0.438626 -0.892411 -0.105873
-4.560500 2.689600 -0.091900 0.438986 -0.893427 -0.095284
-4.460900 2.640800 -0.093200 0.438986 -0.893427 -0.095284
-4.465000 2.643700 -0.101500 0.438986 -0.893427 -0.095284
-5.171600 3.358400 -0.266100 -0.605135 0.795389 -0.034189
-5.014200 3.242600 -0.174200 -0.605135 0.795389 -0.034189
-5.322400 3.470400 -0.329600 -0.605135 0.795389 -0.034189
-5.159500 3.131100 -0.059800 0.632618 -0.730501 0.257221
-5.291100 3.228200 -0.107700 0.632618 -0.730501 0.257221
-5.437900 3.345400 -0.135900 0.632618 -0.730501 0.257221
-5.539600 3.534200 -0.640000 -0.355602 0.071666 -0.931886
-5.498700 3.504200 -0.626700 -0.355602 0.071666 -0.931886
-5.412000 3.486200 -0.595000 -0.355602 0.071666 -0.931886
-5.163900 3.346200 -0.349400 -0.609672 0.789430 -0.071422
-5.171600 3.358400 -0.266100 -0.609672 0.789430 -0.071422
-5.322400 3.470400 -0.329600 -0.609672 0.789430 -0.071422
-5.325200 3.461400 -0.438800 -0.609672 0.789430 -0.071422
-4.503600 2.772300 -0.145600 -0.031121 -0.035385 -0.998889
-4.604600 2.847200 -0.151400 -0.031121 -0.035385 -0.998889
-4.628600 2.814800 -0.151000 -0.031121 -0.035385 -0.998889
-4.503600 2.772300 -0.145600 -0.031121 -0.035385 -0.998889
-4.628600 2.814800 -0.151000 -0.031121 -0.035385 -0.998889
-4.527600 2.739900 -0.145200 -0.031121 -0.035385 -0.998889
-5.455400 3.514500 -0.609200 -0.359908 0.085784 -0.929036
-5.539600 3.534200 -0.640000 -0.359908 0.085784 -0.929036
-5.412000 3.486200 -0.595000 -0.359908 0.085784 -0.929036
-5.047500 3.135500 0.041000 0.334165 -0.221631 0.916086
-5.062600 3.119000 0.031500 0.334165 -0.221631 0.916086
-5.276500 3.270800 -0.009800 0.334165 -0.221631 0.916086
-5.617600 3.606400 -0.211900 0.801427 0.596726 -0.040402
-5.630400 3.589500 -0.207600 0.801427 0.596726 -0.040402
-5.604000 3.611300 -0.409300 0.801427 0.596726 -0.040402
-5.126100 3.091800 -0.172500 0.595874 -0.803026 0.009104
-5.283500 3.207600 -0.264400 0.595874 -0.803026 0.009104
-5.435100 3.320300 -0.242100 0.595874 -0.803026 0.009104
-5.152600 3.112100 -0.120400 0.595874 -0.803026 0.009104
-5.539600 3.534200 -0.640000 -0.363998 0.109706 -0.924916
-5.455400 3.514500 -0.609200 -0.363998 0.109706 -0.924916
-5.494400 3.540200 -0.621500 -0.363998 0.109706 -0.924916
-5.617600 3.606400 -0.211900 0.803353 0.594117 -0.040599
-5.604000 3.611300 -0.409300 0.803353 0.594117 -0.040599
-5.606400 3.614000 -0.322300 0.803353 0.594117 -0.040599
-5.019700 3.177000 0.030900 -0.129963 0.396839 0.908641
-4.855500 3.051000 0.062400 -0.129963 0.396839 0.908641
-4.866700 3.032100 0.072300 -0.129963 0.396839 0.908641
-5.030900 3.157900 0.040800 -0.129963 0.396839 0.908641
-5.325200 3.461400 -0.438800 -0.614533 0.784780 -0.080437
-5.322400 3.470400 -0.329600 -0.614533 0.784780 -0.080437
-5.328500 3.455200 -0.524500 -0.614533 0.784780 -0.080437
-5.573000 3.556500 -0.647700 -0.347437 0.204380 -0.915159
-5.539600 3.534200 -0.640000 -0.347437 0.204380 -0.915159
-5.494400 3.540200 -0.621500 -0.347437 0.204380 -0.915159
-4.612300 2.928600 -0.120200 -0.596522 0.802555 -0.008145
-4.584000 2.907600 -0.116800 -0.596522 0.802555 -0.008145
-4.635300 2.946600 -0.031100 -0.596522 0.802555 -0.008145
-4.654900 2.961100 -0.034000 -0.594563 0.803995 -0.009296
-4.646800 2.954000 -0.130000 -0.594563 0.803995 -0.009296
-4.612300 2.928600 -0.120200 -0.594563 0.803995 -0.009296
-4.654900 2.961100 -0.034000 -0.595538 0.803282 -0.008546
-4.612300 2.928600 -0.120200 -0.595538 0.803282 -0.008546
-4.635300 2.946600 -0.031100 -0.595538 0.803282 -0.008546
-4.723000 2.811100 -0.016300 0.596046 -0.802863 0.011813
-4.540300 2.675600 -0.007000 0.596046 -0.802863 0.011813
-4.540500 2.675400 -0.030700 0.596046 -0.802863 0.011813
-4.723000 2.811100 -0.016300 0.596194 -0.802787 0.009227
-4.540500 2.675400 -0.030700 0.596194 -0.802787 0.009227
-4.556400 2.686600 -0.083600 0.596194 -0.802787 0.009227
-4.723000 2.811100 -0.016300 0.597266 -0.802027 0.005167
-4.556400 2.686600 -0.083600 0.597266 -0.802027 0.005167
-4.560500 2.689600 -0.091900 0.597266 -0.802027 0.005167
-4.723000 2.811100 -0.016300 0.595311 -0.803412 0.011594
-4.560500 2.689600 -0.091900 0.595311 -0.803412 0.011594
-4.565900 2.693500 -0.098900 0.595311 -0.803412 0.011594
-4.723000 2.811100 -0.016300 0.596498 -0.802573 0.008143
-4.565900 2.693500 -0.098900 0.596498 -0.802573 0.008143
-4.572300 2.698200 -0.104500 0.596498 -0.802573 0.008143
-4.723000 2.811100 -0.016300 0.599792 -0.800156 -0.000580
-4.572300 2.698200 -0.104500 0.599792 -0.800156 -0.000580
-4.579500 2.703600 -0.108200 0.599792 -0.800156 -0.000580
-4.723000 2.811100 -0.016300 0.591130 -0.806324 0.020161
-4.579500 2.703600 -0.108200 0.591130 -0.806324 0.020161
-4.587200 2.709200 -0.110000 0.591130 -0.806324 0.020161
-4.723000 2.811100 -0.016300 0.596029 -0.802909 0.009347
-4.587200 2.709200 -0.110000 0.596029 -0.802909 0.009347
-4.680100 2.778100 -0.115400 0.596029 -0.802909 0.009347
-4.723000 2.811100 -0.016300 0.593053 -0.805084 0.011360
-4.680100 2.778100 -0.115400 0.593053 -0.805084 0.011360
-4.731400 2.817100 -0.029600 0.593053 -0.805084 0.011360
-4.680100 2.778100 -0.115400 0.596518 -0.802559 0.008140
-4.708400 2.799100 -0.118800 0.596518 -0.802559 0.008140
-4.731400 2.817100 -0.029600 0.596518 -0.802559 0.008140
-5.588700 3.638300 -0.211100 0.726475 0.686334 -0.034344
-5.606400 3.614000 -0.322300 0.726475 0.686334 -0.034344
-5.581700 3.640200 -0.321200 0.726475 0.686334 -0.034344
-5.528800 3.561200 -0.629200 -0.495365 0.817542 -0.293663
-5.451600 3.531400 -0.574800 -0.495365 0.817542 -0.293663
-5.587900 3.614000 -0.581900 -0.495365 0.817542 -0.293663
-5.597000 3.598200 -0.634100 -0.495365 0.817542 -0.293663
-4.185200 2.564700 -0.539600 -0.536289 0.831212 -0.146562
-4.157900 2.544300 -0.555400 -0.536289 0.831212 -0.146562
-4.451500 2.844600 0.073400 -0.536289 0.831212 -0.146562
-4.172500 2.443500 -0.569500 0.292327 0.060021 -0.954433
-4.163000 2.473700 -0.570200 0.292327 0.060021 -0.954433
-4.205500 2.505400 -0.555500 0.292327 0.060021 -0.954433
-4.215800 2.466200 -0.554500 0.292327 0.060021 -0.954433
-4.354900 2.583000 0.342000 0.061581 -0.033875 0.997527
-3.896600 2.291700 0.360400 0.061581 -0.033875 0.997527
-4.330600 2.497600 0.340600 0.061581 -0.033875 0.997527
-4.232900 2.525900 -0.539700 0.444728 0.093443 -0.890778
-4.243100 2.486600 -0.538700 0.444728 0.093443 -0.890778
-4.215800 2.466200 -0.554500 0.444728 0.093443 -0.890778
-4.205500 2.505400 -0.555500 0.444728 0.093443 -0.890778
-4.157900 2.544300 -0.555400 -0.567757 0.813866 -0.123585
-4.149400 2.537900 -0.558500 -0.567757 0.813866 -0.123585
-4.451500 2.844600 0.073400 -0.567757 0.813866 -0.123585
-3.896600 2.291700 0.360400 0.019274 0.055371 0.998280
-3.901500 2.293600 0.360200 0.019274 0.055371 0.998280
-4.330600 2.497600 0.340600 0.019274 0.055371 0.998280
-4.078300 2.484900 -0.578400 -0.614788 0.784528 -0.080939
-3.943500 2.463200 0.281400 -0.614788 0.784528 -0.080939
-4.451500 2.844600 0.073400 -0.614788 0.784528 -0.080939
-4.149400 2.537900 -0.558500 -0.614788 0.784528 -0.080939
-5.455400 3.514500 -0.609200 -0.588588 0.697852 -0.408126
-5.412000 3.486200 -0.595000 -0.588588 0.697852 -0.408126
-5.494400 3.540200 -0.621500 -0.588588 0.697852 -0.408126
-5.437900 3.345400 -0.135900 0.634492 -0.755784 0.161898
-5.291100 3.228200 -0.107700 0.634492 -0.755784 0.161898
-5.435100 3.320300 -0.242100 0.634492 -0.755784 0.161898
-3.901500 2.293600 0.360200 0.148303 -0.219296 0.964321
-3.906400 2.286800 0.357900 0.148303 -0.219296 0.964321
-4.330600 2.497600 0.340600 0.148303 -0.219296 0.964321
-4.079600 2.476300 -0.581500 -0.788735 -0.132539 -0.600275
-3.758000 2.210300 -0.100200 -0.788735 -0.132539 -0.600275
-3.785500 2.273100 -0.150200 -0.788735 -0.132539 -0.600275
-5.030900 3.157900 0.040800 0.116206 0.096055 0.988569
-4.866700 3.032100 0.072300 0.116206 0.096055 0.988569
-4.879100 3.015300 0.072500 0.116206 0.096055 0.988569
-5.047500 3.135500 0.041000 0.116206 0.096055 0.988569
-3.906400 2.286800 0.357900 0.322749 -0.588651 0.741163
-3.910100 2.281400 0.352000 0.322749 -0.588651 0.741163
-4.330600 2.497600 0.340600 0.322749 -0.588651 0.741163
-3.878400 2.309000 0.358000 -0.189328 0.199882 0.961354
-3.886200 2.305700 0.360200 -0.189328 0.199882 0.961354
-3.889400 2.309800 0.360000 -0.189328 0.199882 0.961354
-3.884400 2.316500 0.357600 -0.189328 0.199882 0.961354
-4.435000 2.828000 0.299500 0.629232 0.479368 0.611778
-4.417000 2.815000 0.328200 0.629232 0.479368 0.611778
-4.444100 2.815800 0.299700 0.629232 0.479368 0.611778
-3.880300 2.321500 0.351600 -0.547966 0.554626 0.626198
-4.209400 2.661100 0.338800 -0.547966 0.554626 0.626198
-3.943500 2.463200 0.281400 -0.547966 0.554626 0.626198
-3.910100 2.281400 0.352000 0.364921 -0.675998 0.640203
-4.064700 2.299700 0.283200 0.364921 -0.675998 0.640203
-4.330600 2.497600 0.340600 0.364921 -0.675998 0.640203
-4.308200 2.667100 0.340600 -0.013021 0.093048 0.995577
-4.426100 2.802700 0.328400 -0.013021 0.093048 0.995577
-4.417000 2.815000 0.328200 -0.013021 0.093048 0.995577
-4.209400 2.661100 0.338800 -0.013021 0.093048 0.995577
-4.078300 2.484900 -0.578400 -0.662690 0.744041 -0.085119
-3.785500 2.273100 -0.150200 -0.662690 0.744041 -0.085119
-3.943500 2.463200 0.281400 -0.662690 0.744041 -0.085119
-4.064700 2.299700 0.283200 0.515226 -0.789201 0.334222
-3.971700 2.132900 0.032700 0.515226 -0.789201 0.334222
-4.330600 2.497600 0.340600 0.515226 -0.789201 0.334222
-5.283500 3.207600 -0.264400 0.589625 -0.807470 -0.018281
-5.270500 3.202500 -0.347800 0.589625 -0.807470 -0.018281
-5.434500 3.319300 -0.327900 0.589625 -0.807470 -0.018281
-5.435100 3.320300 -0.242100 0.589625 -0.807470 -0.018281
-5.326300 3.428200 -0.560100 -0.671332 0.609913 -0.421093
-5.167400 3.339600 -0.435100 -0.671332 0.609913 -0.421093
-5.328500 3.455200 -0.524500 -0.671332 0.609913 -0.421093
-3.886200 2.305700 0.360200 -0.140445 0.157300 0.977513
-3.886000 2.304900 0.360300 -0.140445 0.157300 0.977513
-3.889400 2.309800 0.360000 -0.140445 0.157300 0.977513
-4.426100 2.802700 0.328400 0.777825 0.579418 0.243441
-4.538200 2.651500 0.330100 0.777825 0.579418 0.243441
-4.417000 2.815000 0.328200 0.777825 0.579418 0.243441
-5.494400 3.540200 -0.621500 -0.567775 0.728627 -0.383058
-5.411800 3.506800 -0.562600 -0.567775 0.728627 -0.383058
-5.451600 3.531400 -0.574800 -0.567775 0.728627 -0.383058
-3.880300 2.321500 0.351600 -0.475426 0.488309 0.731795
-3.884400 2.316500 0.357600 -0.475426 0.488309 0.731795
-4.209400 2.661100 0.338800 -0.475426 0.488309 0.731795
-5.598700 3.629500 -0.141500 0.740653 0.671543 -0.021510
-5.617600 3.606400 -0.211900 0.740653 0.671543 -0.021510
-5.588700 3.638300 -0.211100 0.740653 0.671543 -0.021510
-4.503600 2.772300 -0.145600 0.844008 0.535214 0.034589
-4.451500 2.844600 0.073400 0.844008 0.535214 0.034589
-4.537800 2.689500 0.301100 0.844008 0.535214 0.034589
-4.556300 2.664600 0.301400 0.844008 0.535214 0.034589
-3.886000 2.304900 0.360300 -0.015117 0.071549 0.997322
-4.298100 2.659600 0.341100 -0.015117 0.071549 0.997322
-3.889400 2.309800 0.360000 -0.015117 0.071549 0.997322
-3.897500 2.283300 0.358300 0.131547 -0.228998 0.964497
-3.906400 2.286800 0.357900 0.131547 -0.228998 0.964497
-3.901500 2.293600 0.360200 0.131547 -0.228998 0.964497
-3.896600 2.291700 0.360400 0.131547 -0.228998 0.964497
-3.889400 2.309800 0.360000 -0.041331 0.097656 0.994362
-4.298100 2.659600 0.341100 -0.041331 0.097656 0.994362
-4.209400 2.661100 0.338800 -0.041331 0.097656 0.994362
-3.884400 2.316500 0.357600 -0.041331 0.097656 0.994362
-4.426100 2.802700 0.328400 0.048771 0.047548 0.997678
-4.308200 2.667100 0.340600 0.048771 0.047548 0.997678
-4.365000 2.590500 0.341500 0.048771 0.047548 0.997678
-4.538200 2.651500 0.330100 0.048771 0.047548 0.997678
-3.896600 2.291700 0.360400 0.022413 0.027966 0.999358
-4.328500 2.618500 0.341600 0.022413 0.027966 0.999358
-4.298100 2.659600 0.341100 0.022413 0.027966 0.999358
-3.886000 2.304900 0.360300 0.022413 0.027966 0.999358
-4.537800 2.689500 0.301100 0.356305 0.253892 -0.899214
-4.453500 2.803200 0.299800 0.356305 0.253892 -0.899214
-4.556300 2.664600 0.301400 0.356305 0.253892 -0.899214
-4.365000 2.590500 0.341500 0.079303 -0.039015 0.996087
-4.330600 2.497600 0.340600 0.079303 -0.039015 0.996087
-4.538200 2.651500 0.330100 0.079303 -0.039015 0.996087
-5.494400 3.540200 -0.621500 -0.543714 0.760492 -0.355002
-5.451600 3.531400 -0.574800 -0.543714 0.760492 -0.355002
-5.528800 3.561200 -0.629200 -0.543714 0.760492 -0.355002
-5.322600 3.471900 -0.243800 -0.534285 0.843471 0.055649
-5.507400 3.583800 -0.179700 -0.534285 0.843471 0.055649
-5.588700 3.638300 -0.211100 -0.534285 0.843471 0.055649
-5.581700 3.640200 -0.321200 -0.534285 0.843471 0.055649
-5.322400 3.470400 -0.329600 -0.547517 0.836707 -0.012098
-5.322600 3.471900 -0.243800 -0.547517 0.836707 -0.012098
-5.581700 3.640200 -0.321200 -0.547517 0.836707 -0.012098
-5.579300 3.637500 -0.408200 -0.547517 0.836707 -0.012098
-4.453500 2.803200 0.299800 0.576683 0.435707 0.691083
-4.444100 2.815800 0.299700 0.576683 0.435707 0.691083
-4.556300 2.664600 0.301400 0.576683 0.435707 0.691083
-4.894200 2.998900 0.063000 0.319384 -0.237361 0.917417
-4.879100 3.015300 0.072500 0.319384 -0.237361 0.917417
-4.752500 2.826400 0.067700 0.319384 -0.237361 0.917417
-4.330600 2.497600 0.340600 0.586551 -0.775216 0.234518
-3.971700 2.132900 0.032700 0.586551 -0.775216 0.234518
-4.538200 2.651500 0.330100 0.586551 -0.775216 0.234518
-4.298100 2.659600 0.341100 -0.024125 0.098809 0.994814
-4.308200 2.667100 0.340600 -0.024125 0.098809 0.994814
-4.209400 2.661100 0.338800 -0.024125 0.098809 0.994814
-4.128300 2.410600 -0.580800 0.035758 -0.903951 -0.426138
-4.136200 2.406900 -0.577500 0.035758 -0.903951 -0.426138
-3.968300 2.130000 0.001000 0.035758 -0.903951 -0.426138
-3.844500 2.193500 -0.149300 0.035758 -0.903951 -0.426138
-4.232900 2.525900 -0.539700 0.341872 0.242766 -0.907848
-4.205500 2.505400 -0.555500 0.341872 0.242766 -0.907848
-4.192400 2.523100 -0.555700 0.341872 0.242766 -0.907848
-4.219800 2.543600 -0.539900 0.341872 0.242766 -0.907848
-4.417000 2.815000 0.328200 0.630728 0.474807 0.613791
-4.538200 2.651500 0.330100 0.630728 0.474807 0.613791
-4.556300 2.664600 0.301400 0.630728 0.474807 0.613791
-4.444100 2.815800 0.299700 0.630728 0.474807 0.613791
-4.136200 2.406900 -0.577500 0.607819 -0.769860 -0.194608
-4.207300 2.459900 -0.557600 0.607819 -0.769860 -0.194608
-3.999700 2.153300 -0.000600 0.607819 -0.769860 -0.194608
-3.968300 2.130000 0.001000 0.607819 -0.769860 -0.194608
-3.971700 2.132900 0.032700 0.588427 -0.774986 0.230544
-4.004000 2.156800 0.030600 0.588427 -0.774986 0.230544
-4.538200 2.651500 0.330100 0.588427 -0.774986 0.230544
-3.886000 2.304900 0.360300 -0.199961 0.170595 0.964838
-3.886200 2.305700 0.360200 -0.199961 0.170595 0.964838
-3.878400 2.309000 0.358000 -0.199961 0.170595 0.964838
-4.207600 2.581500 -0.517700 -0.417955 0.875131 -0.243844
-4.185200 2.564700 -0.539600 -0.417955 0.875131 -0.243844
-4.469800 2.823000 -0.100400 -0.417955 0.875131 -0.243844
-4.242300 2.560500 -0.518000 0.329906 0.553945 -0.764400
-4.219800 2.543600 -0.539900 0.329906 0.553945 -0.764400
-4.185200 2.564700 -0.539600 0.329906 0.553945 -0.764400
-4.207600 2.581500 -0.517700 0.329906 0.553945 -0.764400
-4.104500 2.430200 -0.580700 -0.608591 -0.457559 -0.648271
-3.775600 2.186600 -0.100000 -0.608591 -0.457559 -0.648271
-3.758000 2.210300 -0.100200 -0.608591 -0.457559 -0.648271
-4.091400 2.447900 -0.580900 -0.608591 -0.457559 -0.648271
-4.163000 2.473700 -0.570200 0.219978 0.151922 -0.963602
-4.149900 2.491400 -0.570400 0.219978 0.151922 -0.963602
-4.192400 2.523100 -0.555700 0.219978 0.151922 -0.963602
-4.205500 2.505400 -0.555500 0.219978 0.151922 -0.963602
-4.004000 2.156800 0.030600 0.656526 -0.751099 0.069456
-4.007200 2.159100 0.024500 0.656526 -0.751099 0.069456
-4.556300 2.664600 0.301400 0.656526 -0.751099 0.069456
-4.538200 2.651500 0.330100 0.656526 -0.751099 0.069456
-5.062600 3.119000 0.031500 0.360998 -0.272239 0.891945
-4.894200 2.998900 0.063000 0.360998 -0.272239 0.891945
-4.752500 2.826400 0.067700 0.360998 -0.272239 0.891945
-4.192400 2.523100 -0.555700 0.228229 0.385508 -0.894033
-4.157900 2.544300 -0.555400 0.228229 0.385508 -0.894033
-4.185200 2.564700 -0.539600 0.228229 0.385508 -0.894033
-4.219800 2.543600 -0.539900 0.228229 0.385508 -0.894033
-5.494400 3.540200 -0.621500 -0.586263 0.674082 -0.449344
-5.412000 3.486200 -0.595000 -0.586263 0.674082 -0.449344
-5.367200 3.478900 -0.547500 -0.586263 0.674082 -0.449344
-5.159500 3.131100 -0.059800 0.632190 -0.716986 0.293712
-5.437900 3.345400 -0.135900 0.632190 -0.716986 0.293712
-5.584000 3.485200 -0.109100 0.632190 -0.716986 0.293712
-4.207300 2.459900 -0.557600 0.627595 -0.756806 -0.182671
-4.215800 2.466200 -0.554500 0.627595 -0.756806 -0.182671
-3.999700 2.153300 -0.000600 0.627595 -0.756806 -0.182671
-5.276500 3.270800 -0.009800 0.374397 -0.287732 0.881497
-5.062600 3.119000 0.031500 0.374397 -0.287732 0.881497
-4.752500 2.826400 0.067700 0.374397 -0.287732 0.881497
-5.604000 3.611300 -0.409300 0.726138 0.686306 -0.041330
-5.579300 3.637500 -0.408200 0.726138 0.686306 -0.041330
-5.581700 3.640200 -0.321200 0.726138 0.686306 -0.041330
-5.606400 3.614000 -0.322300 0.726138 0.686306 -0.041330
-4.123800 2.509200 -0.570200 0.152338 0.246567 -0.957078
-4.149400 2.537900 -0.558500 0.152338 0.246567 -0.957078
-4.192400 2.523100 -0.555700 0.152338 0.246567 -0.957078
-4.149900 2.491400 -0.570400 0.152338 0.246567 -0.957078
-5.528800 3.561200 -0.629200 -0.343317 0.499844 -0.795166
-5.597000 3.598200 -0.634100 -0.343317 0.499844 -0.795166
-5.608900 3.580900 -0.651400 -0.343317 0.499844 -0.795166
-5.585000 3.565300 -0.649600 -0.343317 0.499844 -0.795166
-4.215800 2.466200 -0.554500 0.649982 -0.741728 -0.165419
-4.243100 2.486600 -0.538700 0.649982 -0.741728 -0.165419
-3.999700 2.153300 -0.000600 0.649982 -0.741728 -0.165419
-4.007200 2.159100 0.024500 0.675884 -0.736990 0.005130
-4.555100 2.663200 0.258400 0.675884 -0.736990 0.005130
-4.556300 2.664600 0.301400 0.675884 -0.736990 0.005130
-4.265500 2.503500 -0.516800 0.684152 -0.716909 -0.134083
-4.540500 2.675400 -0.030700 0.684152 -0.716909 -0.134083
-3.999700 2.153300 -0.000600 0.684152 -0.716909 -0.134083
-4.243100 2.486600 -0.538700 0.684152 -0.716909 -0.134083
-5.367200 3.478900 -0.547500 -0.554609 0.826340 -0.097834
-5.579300 3.637500 -0.408200 -0.554609 0.826340 -0.097834
-5.581300 3.628800 -0.495100 -0.554609 0.826340 -0.097834
-5.411800 3.506800 -0.562600 -0.554609 0.826340 -0.097834
-4.149900 2.491400 -0.570400 0.158713 0.136484 -0.977846
-4.145300 2.423300 -0.578700 0.158713 0.136484 -0.977846
-4.096600 2.488900 -0.579400 0.158713 0.136484 -0.977846
-4.123800 2.509200 -0.570200 0.158713 0.136484 -0.977846
-4.006100 2.158100 0.006700 0.690940 -0.720280 -0.061631
-4.540500 2.675400 -0.030700 0.690940 -0.720280 -0.061631
-4.555100 2.663200 0.258400 0.690940 -0.720280 -0.061631
-4.007200 2.159100 0.024500 0.690940 -0.720280 -0.061631
-4.555100 2.663200 0.258400 0.956630 0.289059 -0.036112
-4.540500 2.675400 -0.030700 0.956630 0.289059 -0.036112
-4.556300 2.664600 0.301400 0.956630 0.289059 -0.036112
-4.145300 2.423300 -0.578700 0.084290 0.051917 -0.995088
-4.128300 2.410600 -0.580800 0.084290 0.051917 -0.995088
-4.079600 2.476300 -0.581500 0.084290 0.051917 -0.995088
-4.096600 2.488900 -0.579400 0.084290 0.051917 -0.995088
-4.192400 2.523100 -0.555700 0.151707 0.260374 -0.953515
-4.149400 2.537900 -0.558500 0.151707 0.260374 -0.953515
-4.157900 2.544300 -0.555400 0.151707 0.260374 -0.953515
-4.243100 2.486600 -0.538700 0.633233 0.144196 -0.760410
-4.232900 2.525900 -0.539700 0.633233 0.144196 -0.760410
-4.255400 2.542800 -0.517800 0.633233 0.144196 -0.760410
-4.265500 2.503500 -0.516800 0.633233 0.144196 -0.760410
-4.540500 2.675400 -0.030700 0.946951 0.319504 -0.034662
-4.503600 2.772300 -0.145600 0.946951 0.319504 -0.034662
-4.556300 2.664600 0.301400 0.946951 0.319504 -0.034662
-5.424500 3.364100 -0.067700 0.610192 -0.647720 0.456207
-4.752500 2.826400 0.067700 0.610192 -0.647720 0.456207
-5.584000 3.485200 -0.109100 0.610192 -0.647720 0.456207
-4.172500 2.443500 -0.569500 0.276290 0.064687 -0.958895
-4.145300 2.423300 -0.578700 0.276290 0.064687 -0.958895
-4.163000 2.473700 -0.570200 0.276290 0.064687 -0.958895
-5.590300 3.471900 -0.178500 0.657268 -0.733418 0.173483
-5.584000 3.485200 -0.109100 0.657268 -0.733418 0.173483
-5.437900 3.345400 -0.135900 0.657268 -0.733418 0.173483
-5.435100 3.320300 -0.242100 0.657268 -0.733418 0.173483
-5.411800 3.506800 -0.562600 -0.579358 0.701800 -0.414514
-5.494400 3.540200 -0.621500 -0.579358 0.701800 -0.414514
-5.367200 3.478900 -0.547500 -0.579358 0.701800 -0.414514
-5.424500 3.364100 -0.067700 0.592226 -0.606584 0.530400
-5.379200 3.352400 -0.030500 0.592226 -0.606584 0.530400
-4.752500 2.826400 0.067700 0.592226 -0.606584 0.530400
-5.379200 3.352400 -0.030500 0.576094 -0.578596 0.577358
-5.276500 3.270800 -0.009800 0.576094 -0.578596 0.577358
-4.752500 2.826400 0.067700 0.576094 -0.578596 0.577358
-5.062600 3.119000 0.031500 0.331686 -0.224672 0.916246
-5.047500 3.135500 0.041000 0.331686 -0.224672 0.916246
-4.879100 3.015300 0.072500 0.331686 -0.224672 0.916246
-4.894200 2.998900 0.063000 0.331686 -0.224672 0.916246
-4.242300 2.560500 -0.518000 0.497955 0.359628 -0.789119
-4.255400 2.542800 -0.517800 0.497955 0.359628 -0.789119
-4.232900 2.525900 -0.539700 0.497955 0.359628 -0.789119
-4.219800 2.543600 -0.539900 0.497955 0.359628 -0.789119
-4.265500 2.503500 -0.516800 0.741676 -0.642588 -0.192348
-4.517700 2.682400 -0.142000 0.741676 -0.642588 -0.192348
-4.540500 2.675400 -0.030700 0.741676 -0.642588 -0.192348
-4.123800 2.509200 -0.570200 0.096452 0.300764 -0.948809
-4.096600 2.488900 -0.579400 0.096452 0.300764 -0.948809
-4.149400 2.537900 -0.558500 0.096452 0.300764 -0.948809
-4.145300 2.423300 -0.578700 0.161731 0.108620 -0.980839
-4.149900 2.491400 -0.570400 0.161731 0.108620 -0.980839
-4.163000 2.473700 -0.570200 0.161731 0.108620 -0.980839
-5.608900 3.580900 -0.651400 -0.022729 -0.028705 -0.999329
-5.621400 3.564100 -0.651200 -0.022729 -0.028705 -0.999329
-5.614700 3.558900 -0.650900 -0.022729 -0.028705 -0.999329
-5.602100 3.575900 -0.651100 -0.022729 -0.028705 -0.999329
-4.328500 2.618500 0.341600 0.026840 0.031769 0.999135
-4.365000 2.590500 0.341500 0.026840 0.031769 0.999135
-4.308200 2.667100 0.340600 0.026840 0.031769 0.999135
-4.298100 2.659600 0.341100 0.026840 0.031769 0.999135
-4.517700 2.682400 -0.142000 0.971095 0.144707 -0.189829
-4.503600 2.772300 -0.145600 0.971095 0.144707 -0.189829
-4.540500 2.675400 -0.030700 0.971095 0.144707 -0.189829
-3.943500 2.463200 0.281400 -0.598191 0.801310 0.008360
-4.209400 2.661100 0.338800 -0.598191 0.801310 0.008360
-4.451500 2.844600 0.073400 -0.598191 0.801310 0.008360
-3.775600 2.186600 -0.100000 -0.491552 -0.593638 -0.637158
-4.104500 2.430200 -0.580700 -0.491552 -0.593638 -0.637158
-4.128300 2.410600 -0.580800 -0.491552 -0.593638 -0.637158
-5.590300 3.471900 -0.178500 0.676959 -0.709828 0.194604
-5.665300 3.535100 -0.209900 0.676959 -0.709828 0.194604
-5.659200 3.548000 -0.140600 0.676959 -0.709828 0.194604
-5.584000 3.485200 -0.109100 0.676959 -0.709828 0.194604
-4.096600 2.488900 -0.579400 -0.161160 0.529027 -0.833161
-4.078300 2.484900 -0.578400 -0.161160 0.529027 -0.833161
-4.149400 2.537900 -0.558500 -0.161160 0.529027 -0.833161
-5.451600 3.531400 -0.574800 -0.548232 0.827756 -0.119420
-5.411800 3.506800 -0.562600 -0.548232 0.827756 -0.119420
-5.581300 3.628800 -0.495100 -0.548232 0.827756 -0.119420
-4.128300 2.410600 -0.580800 -0.033271 -0.035304 -0.998823
-4.104500 2.430200 -0.580700 -0.033271 -0.035304 -0.998823
-4.079600 2.476300 -0.581500 -0.033271 -0.035304 -0.998823
-4.209400 2.661100 0.338800 -0.595064 0.803577 0.012779
-4.417000 2.815000 0.328200 -0.595064 0.803577 0.012779
-4.451500 2.844600 0.073400 -0.595064 0.803577 0.012779
-5.585000 3.565300 -0.649600 -0.345620 0.277777 -0.896318
-5.573000 3.556500 -0.647700 -0.345620 0.277777 -0.896318
-5.528800 3.561200 -0.629200 -0.345620 0.277777 -0.896318
-4.006100 2.158100 0.006700 0.685013 -0.716994 -0.129137
-3.999700 2.153300 -0.000600 0.685013 -0.716994 -0.129137
-4.540500 2.675400 -0.030700 0.685013 -0.716994 -0.129137
-4.096600 2.488900 -0.579400 -0.121351 0.320315 -0.939506
-4.079600 2.476300 -0.581500 -0.121351 0.320315 -0.939506
-4.078300 2.484900 -0.578400 -0.121351 0.320315 -0.939506
-4.752500 2.826400 0.067700 0.630116 -0.712370 0.309004
-5.159500 3.131100 -0.059800 0.630116 -0.712370 0.309004
-5.584000 3.485200 -0.109100 0.630116 -0.712370 0.309004
-4.104500 2.430200 -0.580700 -0.030237 -0.033668 -0.998976
-4.091400 2.447900 -0.580900 -0.030237 -0.033668 -0.998976
-4.079600 2.476300 -0.581500 -0.030237 -0.033668 -0.998976
-5.507400 3.583800 -0.179700 -0.499223 0.847799 0.178922
-5.598700 3.629500 -0.141500 -0.499223 0.847799 0.178922
-5.588700 3.638300 -0.211100 -0.499223 0.847799 0.178922
-5.602100 3.575900 -0.651100 -0.288381 0.338466 -0.895700
-5.585000 3.565300 -0.649600 -0.288381 0.338466 -0.895700
-5.608900 3.580900 -0.651400 -0.288381 0.338466 -0.895700
-4.417000 2.815000 0.328200 -0.564934 0.824910 0.019337
-4.435000 2.828000 0.299500 -0.564934 0.824910 0.019337
-4.451500 2.844600 0.073400 -0.564934 0.824910 0.019337
-3.775600 2.186600 -0.100000 -0.353954 -0.721094 -0.595600
-4.128300 2.410600 -0.580800 -0.353954 -0.721094 -0.595600
-3.844500 2.193500 -0.149300 -0.353954 -0.721094 -0.595600
-4.079600 2.476300 -0.581500 -0.838889 0.067874 -0.540054
-3.785500 2.273100 -0.150200 -0.838889 0.067874 -0.540054
-4.078300 2.484900 -0.578400 -0.838889 0.067874 -0.540054
-5.617600 3.606400 -0.211900 0.740423 0.671520 -0.028887
-5.606400 3.614000 -0.322300 0.740423 0.671520 -0.028887
-5.588700 3.638300 -0.211100 0.740423 0.671520 -0.028887
-4.091400 2.447900 -0.580900 -0.704608 -0.306290 -0.640089
-3.758000 2.210300 -0.100200 -0.704608 -0.306290 -0.640089
-4.079600 2.476300 -0.581500 -0.704608 -0.306290 -0.640089
-4.435000 2.828000 0.299500 0.796606 0.595852 0.101880
-4.444100 2.815800 0.299700 0.796606 0.595852 0.101880
-4.451500 2.844600 0.073400 0.796606 0.595852 0.101880
-5.412000 3.486200 -0.595000 -0.601469 0.647648 -0.467748
-5.368600 3.456800 -0.579900 -0.601469 0.647648 -0.467748
-5.367200 3.478900 -0.547500 -0.601469 0.647648 -0.467748
-4.265500 2.503500 -0.516800 0.790675 0.126773 -0.598967
-4.255400 2.542800 -0.517800 0.790675 0.126773 -0.598967
-4.503600 2.772300 -0.145600 0.790675 0.126773 -0.598967
-4.517700 2.682400 -0.142000 0.790675 0.126773 -0.598967
-3.896600 2.291700 0.360400 0.022385 0.027907 0.999360
-4.354900 2.583000 0.342000 0.022385 0.027907 0.999360
-4.328500 2.618500 0.341600 0.022385 0.027907 0.999360
-4.444100 2.815800 0.299700 0.796972 0.595371 0.101831
-4.453500 2.803200 0.299800 0.796972 0.595371 0.101831
-4.451500 2.844600 0.073400 0.796972 0.595371 0.101831
-5.599900 3.545300 -0.649400 0.237236 -0.357782 -0.903167
-5.614700 3.558900 -0.650900 0.237236 -0.357782 -0.903167
-5.621400 3.564100 -0.651200 0.237236 -0.357782 -0.903167
-4.128300 2.410600 -0.580800 0.283670 -0.225597 -0.932007
-4.145300 2.423300 -0.578700 0.283670 -0.225597 -0.932007
-4.136200 2.406900 -0.577500 0.283670 -0.225597 -0.932007
-5.379200 3.352400 -0.030500 0.594517 -0.600054 0.535243
-5.424500 3.364100 -0.067700 0.594517 -0.600054 0.535243
-5.584000 3.485200 -0.109100 0.594517 -0.600054 0.535243
-3.886000 2.304900 0.360300 0.001054 0.008421 0.999964
-3.895800 2.291800 0.360400 0.001054 0.008421 0.999964
-3.896600 2.291700 0.360400 0.001054 0.008421 0.999964
-4.453500 2.803200 0.299800 0.798596 0.593259 0.101430
-4.537800 2.689500 0.301100 0.798596 0.593259 0.101430
-4.451500 2.844600 0.073400 0.798596 0.593259 0.101430
-4.145300 2.423300 -0.578700 0.469268 -0.320590 -0.822806
-4.207300 2.459900 -0.557600 0.469268 -0.320590 -0.822806
-4.136200 2.406900 -0.577500 0.469268 -0.320590 -0.822806
-4.255400 2.542800 -0.517800 0.600465 0.436848 -0.669780
-4.242300 2.560500 -0.518000 0.600465 0.436848 -0.669780
-4.503600 2.772300 -0.145600 0.600465 0.436848 -0.669780
-5.435100 3.320300 -0.242100 0.674123 -0.734346 0.079332
-5.666200 3.526300 -0.319900 0.674123 -0.734346 0.079332
-5.665300 3.535100 -0.209900 0.674123 -0.734346 0.079332
-5.590300 3.471900 -0.178500 0.674123 -0.734346 0.079332
-5.163900 3.346200 -0.349400 -0.610127 0.787939 -0.083047
-5.325200 3.461400 -0.438800 -0.610127 0.787939 -0.083047
-5.328500 3.455200 -0.524500 -0.610127 0.787939 -0.083047
-5.167400 3.339600 -0.435100 -0.610127 0.787939 -0.083047
-4.207600 2.581500 -0.517700 0.327642 0.709176 -0.624275
-4.469800 2.823000 -0.100400 0.327642 0.709176 -0.624275
-4.503600 2.772300 -0.145600 0.327642 0.709176 -0.624275
-4.242300 2.560500 -0.518000 0.327642 0.709176 -0.624275
-4.503600 2.772300 -0.145600 0.840486 0.541418 0.021210
-4.469800 2.823000 -0.100400 0.840486 0.541418 0.021210
-4.451500 2.844600 0.073400 0.840486 0.541418 0.021210
-5.152600 3.112100 -0.120400 0.624082 -0.762940 0.168651
-5.291100 3.228200 -0.107700 0.624082 -0.762940 0.168651
-4.752500 2.826400 0.067700 0.624082 -0.762940 0.168651
-3.901500 2.293600 0.360200 0.396927 0.304076 0.866018
-4.064700 2.299700 0.283200 0.396927 0.304076 0.866018
-3.943500 2.463200 0.281400 0.396927 0.304076 0.866018
-3.889400 2.309800 0.360000 0.396927 0.304076 0.866018
-4.145300 2.423300 -0.578700 0.328991 -0.012950 -0.944244
-4.172500 2.443500 -0.569500 0.328991 -0.012950 -0.944244
-4.207300 2.459900 -0.557600 0.328991 -0.012950 -0.944244
-4.328500 2.618500 0.341600 0.026480 0.030951 0.999170
-4.354900 2.583000 0.342000 0.026480 0.030951 0.999170
-4.365000 2.590500 0.341500 0.026480 0.030951 0.999170
-5.291100 3.228200 -0.107700 0.623500 -0.764659 0.162925
-5.159500 3.131100 -0.059800 0.623500 -0.764659 0.162925
-4.752500 2.826400 0.067700 0.623500 -0.764659 0.162925
-4.469800 2.823000 -0.100400 -0.517651 0.840691 -0.158987
-4.185200 2.564700 -0.539600 -0.517651 0.840691 -0.158987
-4.451500 2.844600 0.073400 -0.517651 0.840691 -0.158987
-4.172500 2.443500 -0.569500 0.288343 0.080483 -0.954139
-4.215800 2.466200 -0.554500 0.288343 0.080483 -0.954139
-4.207300 2.459900 -0.557600 0.288343 0.080483 -0.954139
-5.451600 3.531400 -0.574800 -0.516538 0.836711 -0.181942
-5.581300 3.628800 -0.495100 -0.516538 0.836711 -0.181942
-5.587900 3.614000 -0.581900 -0.516538 0.836711 -0.181942
-4.354900 2.583000 0.342000 0.077907 -0.038500 0.996217
-4.330600 2.497600 0.340600 0.077907 -0.038500 0.996217
-4.365000 2.590500 0.341500 0.077907 -0.038500 0.996217
-5.291100 3.228200 -0.107700 0.627304 -0.764545 0.148192
-5.152600 3.112100 -0.120400 0.627304 -0.764545 0.148192
-5.435100 3.320300 -0.242100 0.627304 -0.764545 0.148192
-5.573000 3.556500 -0.647700 -0.351977 0.245373 -0.903274
-5.494400 3.540200 -0.621500 -0.351977 0.245373 -0.903274
-5.528800 3.561200 -0.629200 -0.351977 0.245373 -0.903274
-5.326300 3.428200 -0.560100 -0.639751 0.626673 -0.444971
-5.328500 3.455200 -0.524500 -0.639751 0.626673 -0.444971
-5.367200 3.478900 -0.547500 -0.639751 0.626673 -0.444971
-5.368600 3.456800 -0.579900 -0.639751 0.626673 -0.444971
-3.559400 1.925100 0.308800 -0.479562 -0.868294 0.126832
-3.554900 1.927600 0.308900 -0.479562 -0.868294 0.126832
-3.830100 1.714300 -0.110800 -0.479562 -0.868294 0.126832
-3.503100 1.946400 0.238100 -0.495913 -0.861584 0.108369
-3.836000 1.698600 -0.225400 -0.495913 -0.861584 0.108369
-3.830100 1.714300 -0.110800 -0.495913 -0.861584 0.108369
-3.554900 1.927600 0.308900 -0.495913 -0.861584 0.108369
-3.393300 2.316700 0.081300 -0.761963 0.149129 0.630217
-3.533300 2.089200 0.304400 -0.761963 0.149129 0.630217
-3.546500 2.168900 0.301500 -0.761963 0.149129 0.630217
-3.767100 1.812800 0.086900 0.447618 -0.556002 0.700357
-3.684900 2.018200 0.302500 0.447618 -0.556002 0.700357
-3.559400 1.925100 0.308800 0.447618 -0.556002 0.700357
-3.886000 2.304900 0.360300 -0.151968 -0.001289 0.988385
-3.533300 2.089200 0.304400 -0.151968 -0.001289 0.988385
-3.554900 1.927600 0.308900 -0.151968 -0.001289 0.988385
-3.895800 2.291800 0.360400 -0.151968 -0.001289 0.988385
-3.943500 2.463200 0.281400 -0.256900 0.930844 0.259870
-4.091000 2.545700 0.094600 -0.256900 0.930844 0.259870
-3.319400 2.402600 -0.118500 -0.256900 0.930844 0.259870
-3.348800 2.370400 -0.011200 -0.256900 0.930844 0.259870
-3.546500 2.168900 0.301500 -0.397617 0.584667 0.707153
-3.884400 2.316500 0.357600 -0.397617 0.584667 0.707153
-3.943500 2.463200 0.281400 -0.397617 0.584667 0.707153
-3.393300 2.316700 0.081300 -0.397617 0.584667 0.707153
-3.503100 1.946400 0.238100 -0.565443 -0.824068 0.034451
-3.502800 1.946100 0.226000 -0.565443 -0.824068 0.034451
-3.836000 1.698600 -0.225400 -0.565443 -0.824068 0.034451
-3.533300 2.089200 0.304400 -0.654306 -0.066480 0.753302
-3.494700 1.959200 0.259400 -0.654306 -0.066480 0.753302
-3.554900 1.927600 0.308900 -0.654306 -0.066480 0.753302
-3.348800 2.370400 -0.011200 -0.401936 0.694618 0.596618
-3.393300 2.316700 0.081300 -0.401936 0.694618 0.596618
-3.943500 2.463200 0.281400 -0.401936 0.694618 0.596618
-3.307300 2.411200 -0.233400 -0.797364 -0.592855 -0.112844
-3.559500 2.040900 -0.672700 -0.797364 -0.592855 -0.112844
-3.836000 1.698600 -0.225400 -0.797364 -0.592855 -0.112844
-3.502800 1.946100 0.226000 -0.797364 -0.592855 -0.112844
-3.886000 2.304900 0.360300 0.031743 0.034701 0.998893
-3.896600 2.291700 0.360400 0.031743 0.034701 0.998893
-3.901500 2.293600 0.360200 0.031743 0.034701 0.998893
-3.889400 2.309800 0.360000 0.031743 0.034701 0.998893
-3.836000 1.698600 -0.225400 0.873625 -0.477766 0.092302
-4.190800 2.409700 0.074700 0.873625 -0.477766 0.092302
-4.191300 2.410400 0.096100 0.873625 -0.477766 0.092302
-3.830100 1.714300 -0.110800 0.873625 -0.477766 0.092302
-3.494700 1.959200 0.259400 -0.593580 -0.771370 0.229459
-3.503100 1.946400 0.238100 -0.593580 -0.771370 0.229459
-3.554900 1.927600 0.308900 -0.593580 -0.771370 0.229459
-3.559500 2.040900 -0.672700 0.789653 -0.142101 -0.596871
-4.190800 2.409700 0.074700 0.789653 -0.142101 -0.596871
-3.836000 1.698600 -0.225400 0.789653 -0.142101 -0.596871
-3.901500 2.293600 0.360200 0.426656 0.001539 0.904413
-3.906400 2.286800 0.357900 0.426656 0.001539 0.904413
-4.064700 2.299700 0.283200 0.426656 0.001539 0.904413
-3.494700 1.959200 0.259400 -0.808158 -0.587949 0.034612
-3.502800 1.946100 0.226000 -0.808158 -0.587949 0.034612
-3.503100 1.946400 0.238100 -0.808158 -0.587949 0.034612
-3.684900 2.018200 0.302500 0.436656 -0.539794 0.719690
-3.767100 1.812800 0.086900 0.436656 -0.539794 0.719690
-4.064700 2.299700 0.283200 0.436656 -0.539794 0.719690
-3.906400 2.286800 0.357900 0.436656 -0.539794 0.719690
-3.943500 2.463200 0.281400 0.594635 0.448174 0.667495
-4.064700 2.299700 0.283200 0.594635 0.448174 0.667495
-4.191300 2.410400 0.096100 0.594635 0.448174 0.667495
-4.091000 2.545700 0.094600 0.594635 0.448174 0.667495
-3.559500 2.040900 -0.672700 0.579096 0.422152 -0.697449
-4.170100 2.437600 0.074400 0.579096 0.422152 -0.697449
-4.190800 2.409700 0.074700 0.579096 0.422152 -0.697449
-3.494700 1.959200 0.259400 -0.901908 -0.428968 -0.050479
-3.307300 2.411200 -0.233400 -0.901908 -0.428968 -0.050479
-3.502800 1.946100 0.226000 -0.901908 -0.428968 -0.050479
-4.111100 2.517100 0.073500 0.802536 0.595114 -0.042142
-4.091000 2.545700 0.094600 0.802536 0.595114 -0.042142
-4.170100 2.437600 0.074400 0.802536 0.595114 -0.042142
-4.190800 2.409700 0.074700 0.802708 0.595147 -0.038212
-4.170100 2.437600 0.074400 0.802708 0.595147 -0.038212
-4.191300 2.410400 0.096100 0.802708 0.595147 -0.038212
-3.767100 1.812800 0.086900 0.541025 -0.577259 0.611608
-3.806600 1.753300 -0.004200 0.541025 -0.577259 0.611608
-4.064700 2.299700 0.283200 0.541025 -0.577259 0.611608
-3.559500 2.040900 -0.672700 0.579224 0.421967 -0.697455
-4.111100 2.517100 0.073500 0.579224 0.421967 -0.697455
-4.170100 2.437600 0.074400 0.579224 0.421967 -0.697455
-3.494700 1.959200 0.259400 -0.912110 -0.056424 0.406044
-3.393300 2.316700 0.081300 -0.912110 -0.056424 0.406044
-3.348800 2.370400 -0.011200 -0.912110 -0.056424 0.406044
-3.307300 2.411200 -0.233400 0.102508 0.788794 -0.606050
-4.090400 2.545000 0.073200 0.102508 0.788794 -0.606050
-3.559500 2.040900 -0.672700 0.102508 0.788794 -0.606050
-4.111100 2.517100 0.073500 0.802607 0.595031 -0.041961
-4.090400 2.545000 0.073200 0.802607 0.595031 -0.041961
-4.091000 2.545700 0.094600 0.802607 0.595031 -0.041961
-4.170100 2.437600 0.074400 0.802936 0.594796 -0.038873
-4.091000 2.545700 0.094600 0.802936 0.594796 -0.038873
-4.191300 2.410400 0.096100 0.802936 0.594796 -0.038873
-4.090400 2.545000 0.073200 0.579084 0.422143 -0.697464
-4.111100 2.517100 0.073500 0.579084 0.422143 -0.697464
-3.559500 2.040900 -0.672700 0.579084 0.422143 -0.697464
-3.767100 1.812800 0.086900 0.224863 -0.768298 0.599296
-3.559400 1.925100 0.308800 0.224863 -0.768298 0.599296
-3.806600 1.753300 -0.004200 0.224863 -0.768298 0.599296
-3.494700 1.959200 0.259400 -0.823037 0.048485 0.565914
-3.533300 2.089200 0.304400 -0.823037 0.048485 0.565914
-3.393300 2.316700 0.081300 -0.823037 0.048485 0.565914
-3.307300 2.411200 -0.233400 -0.199156 0.977079 0.075188
-3.319400 2.402600 -0.118500 -0.199156 0.977079 0.075188
-4.091000 2.545700 0.094600 -0.199156 0.977079 0.075188
-4.090400 2.545000 0.073200 -0.199156 0.977079 0.075188
-3.684900 2.018200 0.302500 0.403706 -0.492005 0.771332
-3.906400 2.286800 0.357900 0.403706 -0.492005 0.771332
-3.559400 1.925100 0.308800 0.403706 -0.492005 0.771332
-4.064700 2.299700 0.283200 0.807112 -0.516249 0.286456
-3.806600 1.753300 -0.004200 0.807112 -0.516249 0.286456
-3.830100 1.714300 -0.110800 0.807112 -0.516249 0.286456
-4.191300 2.410400 0.096100 0.807112 -0.516249 0.286456
-3.494700 1.959200 0.259400 -0.947838 -0.309397 0.076658
-3.319400 2.402600 -0.118500 -0.947838 -0.309397 0.076658
-3.307300 2.411200 -0.233400 -0.947838 -0.309397 0.076658
-3.494700 1.959200 0.259400 -0.957450 -0.208195 0.199860
-3.348800 2.370400 -0.011200 -0.957450 -0.208195 0.199860
-3.319400 2.402600 -0.118500 -0.957450 -0.208195 0.199860
-3.906400 2.286800 0.357900 0.150047 -0.272944 0.950256
-3.897500 2.283300 0.358300 0.150047 -0.272944 0.950256
-3.559400 1.925100 0.308800 0.150047 -0.272944 0.950256
-3.886000 2.304900 0.360300 -0.198868 0.073930 0.977234
-3.878400 2.309000 0.358000 -0.198868 0.073930 0.977234
-3.546500 2.168900 0.301500 -0.198868 0.073930 0.977234
-3.533300 2.089200 0.304400 -0.198868 0.073930 0.977234
-3.897500 2.283300 0.358300 0.102926 -0.230854 0.967529
-3.896600 2.291700 0.360400 0.102926 -0.230854 0.967529
-3.559400 1.925100 0.308800 0.102926 -0.230854 0.967529
-3.895800 2.291800 0.360400 -0.034374 -0.108270 0.993527
-3.554900 1.927600 0.308900 -0.034374 -0.108270 0.993527
-3.559400 1.925100 0.308800 -0.034374 -0.108270 0.993527
-3.896600 2.291700 0.360400 -0.034374 -0.108270 0.993527
-3.806600 1.753300 -0.004200 -0.294658 -0.916558 0.270368
-3.559400 1.925100 0.308800 -0.294658 -0.916558 0.270368
-3.830100 1.714300 -0.110800 -0.294658 -0.916558 0.270368
-3.884400 2.316500 0.357600 0.126296 0.416718 0.900220
-3.889400 2.309800 0.360000 0.126296 0.416718 0.900220
-3.943500 2.463200 0.281400 0.126296 0.416718 0.900220
-3.878400 2.309000 0.358000 -0.269441 0.264928 0.925859
-3.884400 2.316500 0.357600 -0.269441 0.264928 0.925859
-3.546500 2.168900 0.301500 -0.269441 0.264928 0.925859
-3 0 1 2
-3 3 4 5
-3 6 7 8
-3 9 10 11
-3 12 13 14
-3 15 16 17
-3 18 19 20
-3 21 22 23
-3 24 25 26
-3 27 28 29
-3 30 31 32
-3 33 34 35
-3 36 37 38
-3 39 40 41
-3 42 43 44
-3 45 46 47
-3 48 49 50
-3 51 52 53
-3 54 55 56
-3 57 58 59
-3 60 61 62
-3 63 64 65
-3 66 67 68
-3 69 70 71
-4 72 73 74 75
-4 76 77 78 79
-4 80 81 82 83
-4 84 85 86 87
-3 88 89 90
-3 91 92 93
-3 94 95 96
-4 97 98 99 100
-4 101 102 103 104
-3 105 106 107
-3 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-3 119 120 121
-4 122 123 124 125
-4 126 127 128 129
-3 130 131 132
-4 133 134 135 136
-3 137 138 139
-4 140 141 142 143
-3 144 145 146
-4 147 148 149 150
-4 151 152 153 154
-3 155 156 157
-4 158 159 160 161
-3 162 163 164
-3 165 166 167
-3 168 169 170
-4 171 172 173 174
-4 175 176 177 178
-3 179 180 181
-3 182 183 184
-3 185 186 187
-3 188 189 190
-4 191 192 193 194
-4 195 196 197 198
-3 199 200 201
-4 202 203 204 205
-3 206 207 208
-3 209 210 211
-4 212 213 214 215
-3 216 217 218
-3 219 220 221
-4 222 223 224 225
-3 226 227 228
-4 229 230 231 232
-3 233 234 235
-4 236 237 238 239
-3 240 241 242
-4 243 244 245 246
-3 247 248 249
-3 250 251 252
-4 253 254 255 256
-3 257 258 259
-4 260 261 262 263
-3 264 265 266
-4 267 268 269 270
-4 271 272 273 274
-4 275 276 277 278
-4 279 280 281 282
-4 283 284 285 286
-4 287 288 289 290
-4 291 292 293 294
-3 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-3 317 318 319
-4 320 321 322 323
-3 324 325 326
-3 327 328 329
-4 330 331 332 333
-4 334 335 336 337
-3 338 339 340
-3 341 342 343
-4 344 345 346 347
-4 348 349 350 351
-3 352 353 354
-4 355 356 357 358
-3 359 360 361
-3 362 363 364
-4 365 366 367 368
-4 369 370 371 372
-4 373 374 375 376
-4 377 378 379 380
-4 381 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-4 393 394 395 396
-3 397 398 399
-4 400 401 402 403
-3 404 405 406
-3 407 408 409
-3 410 411 412
-4 413 414 415 416
-3 417 418 419
-4 420 421 422 423
-4 424 425 426 427
-3 428 429 430
-3 431 432 433
-4 434 435 436 437
-3 438 439 440
-4 441 442 443 444
-4 445 446 447 448
-3 449 450 451
-4 452 453 454 455
-4 456 457 458 459
-3 460 461 462
-4 463 464 465 466
-3 467 468 469
-4 470 471 472 473
-4 474 475 476 477
-4 478 479 480 481
-4 482 483 484 485
-4 486 487 488 489
-3 490 491 492
-4 493 494 495 496
-3 497 498 499
-3 500 501 502
-4 503 504 505 506
-4 507 508 509 510
-3 511 512 513
-4 514 515 516 517
-3 518 519 520
-4 521 522 523 524
-3 525 526 527
-3 528 529 530
-4 531 532 533 534
-4 535 536 537 538
-3 539 540 541
-3 542 543 544
-4 545 546 547 548
-4 549 550 551 552
-3 553 554 555
-4 556 557 558 559
-3 560 561 562
-4 563 564 565 566
-4 567 568 569 570
-4 571 572 573 574
-4 575 576 577 578
-4 579 580 581 582
-3 583 584 585
-4 586 587 588 589
-3 590 591 592
-4 593 594 595 596
-3 597 598 599
-3 600 601 602
-4 603 604 605 606
-4 607 608 609 610
-3 611 612 613
-3 614 615 616
-3 617 618 619
-4 620 621 622 623
-4 624 625 626 627
-3 628 629 630
-4 631 632 633 634
-3 635 636 637
-4 638 639 640 641
-3 642 643 644
-3 645 646 647
-4 648 649 650 651
-4 652 653 654 655
-4 656 657 658 659
-3 660 661 662
-4 663 664 665 666
-4 667 668 669 670
-4 671 672 673 674
-4 675 676 677 678
-3 679 680 681
-4 682 683 684 685
-3 686 687 688
-4 689 690 691 692
-4 693 694 695 696
-3 697 698 699
-4 700 701 702 703
-4 704 705 706 707
-3 708 709 710
-3 711 712 713
-4 714 715 716 717
-3 718 719 720
-4 721 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-3 736 737 738
-3 739 740 741
-3 742 743 744
-3 745 746 747
-4 748 749 750 751
-3 752 753 754
-4 755 756 757 758
-4 759 760 761 762
-4 763 764 765 766
-3 767 768 769
-3 770 771 772
-4 773 774 775 776
-4 777 778 779 780
-3 781 782 783
-4 784 785 786 787
-4 788 789 790 791
-4 792 793 794 795
-3 796 797 798
-4 799 800 801 802
-3 803 804 805
-4 806 807 808 809
-4 810 811 812 813
-4 814 815 816 817
-3 818 819 820
-3 821 822 823
-3 824 825 826
-4 827 828 829 830
-4 831 832 833 834
-3 835 836 837
-4 838 839 840 841
-4 842 843 844 845
-3 846 847 848
-4 849 850 851 852
-3 853 854 855
-3 856 857 858
-3 859 860 861
-4 862 863 864 865
-4 866 867 868 869
-3 870 871 872
-4 873 874 875 876
-3 877 878 879
-4 880 881 882 883
-3 884 885 886
-4 887 888 889 890
-4 891 892 893 894
-4 895 896 897 898
-3 899 900 901
-4 902 903 904 905
-3 906 907 908
-4 909 910 911 912
-4 913 914 915 916
-4 917 918 919 920
-3 921 922 923
-4 924 925 926 927
-3 928 929 930
-4 931 932 933 934
-4 935 936 937 938
-4 939 940 941 942
-4 943 944 945 946
-3 947 948 949
-3 950 951 952
-3 953 954 955
-3 956 957 958
-3 959 960 961
-3 962 963 964
-3 965 966 967
-3 968 969 970
-3 971 972 973
-3 974 975 976
-3 977 978 979
-3 980 981 982
-3 983 984 985
-3 986 987 988
-3 989 990 991
-3 992 993 994
-3 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-3 1004 1005 1006
-3 1007 1008 1009
-3 1010 1011 1012
-3 1013 1014 1015
-3 1016 1017 1018
-3 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 1028 1029 1030
-3 1031 1032 1033
-3 1034 1035 1036
-3 1037 1038 1039
-3 1040 1041 1042
-3 1043 1044 1045
-3 1046 1047 1048
-3 1049 1050 1051
-3 1052 1053 1054
-3 1055 1056 1057
-3 1058 1059 1060
-3 1061 1062 1063
-3 1064 1065 1066
-3 1067 1068 1069
-3 1070 1071 1072
-3 1073 1074 1075
-3 1076 1077 1078
-3 1079 1080 1081
-3 1082 1083 1084
-3 1085 1086 1087
-3 1088 1089 1090
-3 1091 1092 1093
-3 1094 1095 1096
-3 1097 1098 1099
-3 1100 1101 1102
-3 1103 1104 1105
-3 1106 1107 1108
-3 1109 1110 1111
-3 1112 1113 1114
-3 1115 1116 1117
-3 1118 1119 1120
-3 1121 1122 1123
-3 1124 1125 1126
-3 1127 1128 1129
-3 1130 1131 1132
-3 1133 1134 1135
-3 1136 1137 1138
-3 1139 1140 1141
-3 1142 1143 1144
-3 1145 1146 1147
-3 1148 1149 1150
-3 1151 1152 1153
-3 1154 1155 1156
-3 1157 1158 1159
-3 1160 1161 1162
-3 1163 1164 1165
-3 1166 1167 1168
-3 1169 1170 1171
-3 1172 1173 1174
-3 1175 1176 1177
-3 1178 1179 1180
-3 1181 1182 1183
-3 1184 1185 1186
-3 1187 1188 1189
-3 1190 1191 1192
-3 1193 1194 1195
-3 1196 1197 1198
-3 1199 1200 1201
-3 1202 1203 1204
-3 1205 1206 1207
-3 1208 1209 1210
-3 1211 1212 1213
-3 1214 1215 1216
-3 1217 1218 1219
-3 1220 1221 1222
-3 1223 1224 1225
-3 1226 1227 1228
-3 1229 1230 1231
-3 1232 1233 1234
-3 1235 1236 1237
-3 1238 1239 1240
-3 1241 1242 1243
-3 1244 1245 1246
-3 1247 1248 1249
-3 1250 1251 1252
-3 1253 1254 1255
-3 1256 1257 1258
-3 1259 1260 1261
-3 1262 1263 1264
-3 1265 1266 1267
-3 1268 1269 1270
-3 1271 1272 1273
-4 1274 1275 1276 1277
-3 1278 1279 1280
-4 1281 1282 1283 1284
-3 1285 1286 1287
-3 1288 1289 1290
-3 1291 1292 1293
-4 1294 1295 1296 1297
-4 1298 1299 1300 1301
-4 1302 1303 1304 1305
-3 1306 1307 1308
-3 1309 1310 1311
-3 1312 1313 1314
-4 1315 1316 1317 1318
-3 1319 1320 1321
-3 1322 1323 1324
-3 1325 1326 1327
-4 1328 1329 1330 1331
-4 1332 1333 1334 1335
-3 1336 1337 1338
-4 1339 1340 1341 1342
-3 1343 1344 1345
-4 1346 1347 1348 1349
-3 1350 1351 1352
-4 1353 1354 1355 1356
-4 1357 1358 1359 1360
-4 1361 1362 1363 1364
-4 1365 1366 1367 1368
-4 1369 1370 1371 1372
-3 1373 1374 1375
-4 1376 1377 1378 1379
-3 1380 1381 1382
-3 1383 1384 1385
-4 1386 1387 1388 1389
-3 1390 1391 1392
-4 1393 1394 1395 1396
-4 1397 1398 1399 1400
-4 1401 1402 1403 1404
-3 1405 1406 1407
-3 1408 1409 1410
-3 1411 1412 1413
-4 1414 1415 1416 1417
-3 1418 1419 1420
-3 1421 1422 1423
-3 1424 1425 1426
-3 1427 1428 1429
-4 1430 1431 1432 1433
-3 1434 1435 1436
-3 1437 1438 1439
-3 1440 1441 1442
-3 1443 1444 1445
-3 1446 1447 1448
-4 1449 1450 1451 1452
-3 1453 1454 1455
-4 1456 1457 1458 1459
-3 1460 1461 1462
-3 1463 1464 1465
-3 1466 1467 1468
-3 1469 1470 1471
-3 1472 1473 1474
-4 1475 1476 1477 1478
-3 1479 1480 1481
-4 1482 1483 1484 1485
-3 1486 1487 1488
-3 1489 1490 1491
-3 1492 1493 1494
-3 1495 1496 1497
-3 1498 1499 1500
-4 1501 1502 1503 1504
-3 1505 1506 1507
-3 1508 1509 1510
-3 1511 1512 1513
-3 1514 1515 1516
-4 1517 1518 1519 1520
-3 1521 1522 1523
-4 1524 1525 1526 1527
-3 1528 1529 1530
-4 1531 1532 1533 1534
-4 1535 1536 1537 1538
-3 1539 1540 1541
-4 1542 1543 1544 1545
-4 1546 1547 1548 1549
-3 1550 1551 1552
-4 1553 1554 1555 1556
-3 1557 1558 1559
-4 1560 1561 1562 1563
-3 1564 1565 1566
-4 1567 1568 1569 1570
-3 1571 1572 1573
-3 1574 1575 1576
-3 1577 1578 1579
-3 1580 1581 1582
-3 1583 1584 1585
-4 1586 1587 1588 1589
-3 1590 1591 1592
-3 1593 1594 1595
-4 1596 1597 1598 1599
-3 1600 1601 1602
-3 1603 1604 1605
-4 1606 1607 1608 1609
-4 1610 1611 1612 1613
-4 1614 1615 1616 1617
-3 1618 1619 1620
-3 1621 1622 1623
-4 1624 1625 1626 1627
-3 1628 1629 1630
-3 1631 1632 1633
-3 1634 1635 1636
-3 1637 1638 1639
-3 1640 1641 1642
-3 1643 1644 1645
-4 1646 1647 1648 1649
-3 1650 1651 1652
-3 1653 1654 1655
-3 1656 1657 1658
-3 1659 1660 1661
-3 1662 1663 1664
-3 1665 1666 1667
-3 1668 1669 1670
-3 1671 1672 1673
-3 1674 1675 1676
-3 1677 1678 1679
-3 1680 1681 1682
-3 1683 1684 1685
-3 1686 1687 1688
-4 1689 1690 1691 1692
-3 1693 1694 1695
-4 1696 1697 1698 1699
-3 1700 1701 1702
-3 1703 1704 1705
-4 1706 1707 1708 1709
-3 1710 1711 1712
-3 1713 1714 1715
-3 1716 1717 1718
-3 1719 1720 1721
-4 1722 1723 1724 1725
-3 1726 1727 1728
-3 1729 1730 1731
-3 1732 1733 1734
-3 1735 1736 1737
-3 1738 1739 1740
-3 1741 1742 1743
-3 1744 1745 1746
-3 1747 1748 1749
-3 1750 1751 1752
-3 1753 1754 1755
-3 1756 1757 1758
-3 1759 1760 1761
-3 1762 1763 1764
-3 1765 1766 1767
-3 1768 1769 1770
-3 1771 1772 1773
-3 1774 1775 1776
-3 1777 1778 1779
-4 1780 1781 1782 1783
-3 1784 1785 1786
-3 1787 1788 1789
-3 1790 1791 1792
-4 1793 1794 1795 1796
-3 1797 1798 1799
-3 1800 1801 1802
-3 1803 1804 1805
-3 1806 1807 1808
-3 1809 1810 1811
-3 1812 1813 1814
-3 1815 1816 1817
-3 1818 1819 1820
-3 1821 1822 1823
-3 1824 1825 1826
-3 1827 1828 1829
-3 1830 1831 1832
-3 1833 1834 1835
-3 1836 1837 1838
-3 1839 1840 1841
-4 1842 1843 1844 1845
-3 1846 1847 1848
-4 1849 1850 1851 1852
-4 1853 1854 1855 1856
-3 1857 1858 1859
-3 1860 1861 1862
-3 1863 1864 1865
-3 1866 1867 1868
-4 1869 1870 1871 1872
-3 1873 1874 1875
-3 1876 1877 1878
-3 1879 1880 1881
-3 1882 1883 1884
-3 1885 1886 1887
-3 1888 1889 1890
-3 1891 1892 1893
-3 1894 1895 1896
-3 1897 1898 1899
-3 1900 1901 1902
-3 1903 1904 1905
-3 1906 1907 1908
-3 1909 1910 1911
-4 1912 1913 1914 1915
-3 1916 1917 1918
-3 1919 1920 1921
-3 1922 1923 1924
-3 1925 1926 1927
-3 1928 1929 1930
-3 1931 1932 1933
-3 1934 1935 1936
-3 1937 1938 1939
-3 1940 1941 1942
-3 1943 1944 1945
-3 1946 1947 1948
-4 1949 1950 1951 1952
-3 1953 1954 1955
-3 1956 1957 1958
-3 1959 1960 1961
-4 1962 1963 1964 1965
-3 1966 1967 1968
-3 1969 1970 1971
-4 1972 1973 1974 1975
-3 1976 1977 1978
-3 1979 1980 1981
-3 1982 1983 1984
-3 1985 1986 1987
-3 1988 1989 1990
-3 1991 1992 1993
-3 1994 1995 1996
-3 1997 1998 1999
-3 2000 2001 2002
-3 2003 2004 2005
-3 2006 2007 2008
-3 2009 2010 2011
-3 2012 2013 2014
-4 2015 2016 2017 2018
-3 2019 2020 2021
-3 2022 2023 2024
-4 2025 2026 2027 2028
-4 2029 2030 2031 2032
-3 2033 2034 2035
-3 2036 2037 2038
-3 2039 2040 2041
-3 2042 2043 2044
-3 2045 2046 2047
-4 2048 2049 2050 2051
-3 2052 2053 2054
-3 2055 2056 2057
-3 2058 2059 2060
-3 2061 2062 2063
-3 2064 2065 2066
-4 2067 2068 2069 2070
-3 2071 2072 2073
-3 2074 2075 2076
-4 2077 2078 2079 2080
-3 2081 2082 2083
-3 2084 2085 2086
-3 2087 2088 2089
-3 2090 2091 2092
-3 2093 2094 2095
-3 2096 2097 2098
-3 2099 2100 2101
-3 2102 2103 2104
-3 2105 2106 2107
-3 2108 2109 2110
-3 2111 2112 2113
-3 2114 2115 2116
-3 2117 2118 2119
-3 2120 2121 2122
-3 2123 2124 2125
-3 2126 2127 2128
-4 2129 2130 2131 2132
-3 2133 2134 2135
-4 2136 2137 2138 2139
-3 2140 2141 2142
-4 2143 2144 2145 2146
-3 2147 2148 2149
-3 2150 2151 2152
-4 2153 2154 2155 2156
-3 2157 2158 2159
-3 2160 2161 2162
-3 2163 2164 2165
-3 2166 2167 2168
-4 2169 2170 2171 2172
-3 2173 2174 2175
-4 2176 2177 2178 2179
-3 2180 2181 2182
-3 2183 2184 2185
-3 2186 2187 2188
-4 2189 2190 2191 2192
-3 2193 2194 2195
-3 2196 2197 2198
-4 2199 2200 2201 2202
-3 2203 2204 2205
-3 2206 2207 2208
-3 2209 2210 2211
-3 2212 2213 2214
-3 2215 2216 2217
-3 2218 2219 2220
-4 2221 2222 2223 2224
-3 2225 2226 2227
-4 2228 2229 2230 2231
-4 2232 2233 2234 2235
-4 2236 2237 2238 2239
-4 2240 2241 2242 2243
-3 2244 2245 2246
-3 2247 2248 2249
-3 2250 2251 2252
-4 2253 2254 2255 2256
-4 2257 2258 2259 2260
-3 2261 2262 2263
-3 2264 2265 2266
-3 2267 2268 2269
-3 2270 2271 2272
-4 2273 2274 2275 2276
-4 2277 2278 2279 2280
-4 2281 2282 2283 2284
-4 2285 2286 2287 2288
-3 2289 2290 2291
-3 2292 2293 2294
-3 2295 2296 2297
-4 2298 2299 2300 2301
-4 2302 2303 2304 2305
-4 2306 2307 2308 2309
-4 2310 2311 2312 2313
-3 2314 2315 2316
-4 2317 2318 2319 2320
-3 2321 2322 2323
-3 2324 2325 2326
-3 2327 2328 2329
-3 2330 2331 2332
-4 2333 2334 2335 2336
-4 2337 2338 2339 2340
-4 2341 2342 2343 2344
-3 2345 2346 2347
-3 2348 2349 2350
-4 2351 2352 2353 2354
-4 2355 2356 2357 2358
-4 2359 2360 2361 2362
-4 2363 2364 2365 2366
-3 2367 2368 2369
-4 2370 2371 2372 2373
-3 2374 2375 2376
-4 2377 2378 2379 2380
-3 2381 2382 2383
-3 2384 2385 2386
-3 2387 2388 2389
-4 2390 2391 2392 2393
-3 2394 2395 2396
-3 2397 2398 2399
-3 2400 2401 2402
-4 2403 2404 2405 2406
-4 2407 2408 2409 2410
-3 2411 2412 2413
-3 2414 2415 2416
-3 2417 2418 2419
-4 2420 2421 2422 2423
-4 2424 2425 2426 2427
-3 2428 2429 2430
-3 2431 2432 2433
-3 2434 2435 2436
-4 2437 2438 2439 2440
-3 2441 2442 2443
-3 2444 2445 2446
-3 2447 2448 2449
-3 2450 2451 2452
-3 2453 2454 2455
-3 2456 2457 2458
-3 2459 2460 2461
-3 2462 2463 2464
-3 2465 2466 2467
-3 2468 2469 2470
-3 2471 2472 2473
-3 2474 2475 2476
-3 2477 2478 2479
-3 2480 2481 2482
-3 2483 2484 2485
-3 2486 2487 2488
-3 2489 2490 2491
-3 2492 2493 2494
-4 2495 2496 2497 2498
-3 2499 2500 2501
-3 2502 2503 2504
-3 2505 2506 2507
-3 2508 2509 2510
-3 2511 2512 2513
-3 2514 2515 2516
-3 2517 2518 2519
-3 2520 2521 2522
-3 2523 2524 2525
-4 2526 2527 2528 2529
-4 2530 2531 2532 2533
-4 2534 2535 2536 2537
-3 2538 2539 2540
-3 2541 2542 2543
-4 2544 2545 2546 2547
-3 2548 2549 2550
-3 2551 2552 2553
-3 2554 2555 2556
-3 2557 2558 2559
-3 2560 2561 2562
-3 2563 2564 2565
-3 2566 2567 2568
-3 2569 2570 2571
-3 2572 2573 2574
-4 2575 2576 2577 2578
-3 2579 2580 2581
-4 2582 2583 2584 2585
-3 2586 2587 2588
-3 2589 2590 2591
-4 2592 2593 2594 2595
-4 2596 2597 2598 2599
-4 2600 2601 2602 2603
-3 2604 2605 2606
-3 2607 2608 2609
-3 2610 2611 2612
-4 2613 2614 2615 2616
-4 2617 2618 2619 2620
-4 2621 2622 2623 2624
-3 2625 2626 2627
-3 2628 2629 2630
-3 2631 2632 2633
-3 2634 2635 2636
-4 2637 2638 2639 2640
-4 2641 2642 2643 2644
-3 2645 2646 2647
-3 2648 2649 2650
-3 2651 2652 2653
-3 2654 2655 2656
-3 2657 2658 2659
-3 2660 2661 2662
-3 2663 2664 2665
-3 2666 2667 2668
-3 2669 2670 2671
-3 2672 2673 2674
-3 2675 2676 2677
-3 2678 2679 2680
-3 2681 2682 2683
-4 2684 2685 2686 2687
-3 2688 2689 2690
-4 2691 2692 2693 2694
-3 2695 2696 2697
-3 2698 2699 2700
-3 2701 2702 2703
-4 2704 2705 2706 2707
-3 2708 2709 2710
-4 2711 2712 2713 2714
-3 2715 2716 2717
-3 2718 2719 2720
-3 2721 2722 2723
diff --git a/src/examples/evas/shooter/assets/models/warrior.md2 b/src/examples/evas/shooter/assets/models/warrior.md2
deleted file mode 100644
index c87282b0ab..0000000000
--- a/src/examples/evas/shooter/assets/models/warrior.md2
+++ /dev/null
Binary files differ
diff --git a/src/examples/evas/shooter/evas-3d-shooter-header.c b/src/examples/evas/shooter/evas-3d-shooter-header.c
deleted file mode 100644
index 8053f53cbb..0000000000
--- a/src/examples/evas/shooter/evas-3d-shooter-header.c
+++ /dev/null
@@ -1,359 +0,0 @@
-#include "evas-3d-shooter-header.h"
-
-void
-evas_box3_set(Box3 *box, Evas_Real x0, Evas_Real y0, Evas_Real z0, Evas_Real x1, Evas_Real y1, Evas_Real z1)
-{
- box->p0.x = x0;
- box->p0.y = y0;
- box->p0.z = z0;
- box->p1.x = x1;
- box->p1.y = y1;
- box->p1.z = z1;
-}
-
-void
-_scale(Evas_Canvas3D_Node *node, Evas_Real scale)
-{
- evas_canvas3d_node_scale_set(node, 1.0 * scale, 1.0 * scale, 1.0 * scale);
-}
-
-float
-_distance(float x1, float z1, float x2, float z2)
-{
- return sqrt(pow(x2 - x1, 2) + pow(z2 - z1, 2));
-}
-
-void
-_camera_setup(Scene_Data *data)
-{
- data->camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, evas);
- evas_canvas3d_camera_projection_perspective_set(data->camera, 65.0, 1.0, 1.0, 300.0);
-
- data->mediator_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
- data->camera_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
-
- evas_canvas3d_node_member_add(data->root_node, data->mediator_node);
- evas_canvas3d_node_member_add(data->mediator_node, data->camera_node);
-
- evas_canvas3d_node_camera_set(data->camera_node, data->camera);
- evas_canvas3d_node_position_set(data->camera_node, 20.0, 80.0, 30.0);
- evas_canvas3d_node_look_at_set(data->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
-}
-
-void
-_light_setup(Scene_Data *data)
-{
- data->light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, evas);
-
- evas_canvas3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_light_specular_set(data->light, 0.2, 0.2, 0.2, 1.0);
- evas_canvas3d_light_projection_perspective_set(data->light, 100.0, 1.0, 1.0, 200.0);
-
- data->light_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
-
- evas_canvas3d_node_light_set(data->light_node, data->light);
- evas_canvas3d_node_position_set(data->light_node, -30.0, 70.0, 0.0);
- evas_canvas3d_node_look_at_set(data->light_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 1.0);
-
- evas_canvas3d_node_member_add(data->root_node, data->light_node);
-}
-
-Eina_Bool _mesh_aabb(Evas_Canvas3D_Mesh **mesh, Scene_Data *scene, int index)
-{
- Evas_Real x0, y0, z0, x1, y1, z1, r;
- Evas_Canvas3D_Node *node = NULL;
-
- if (fmod(index, 12) == 0)
- node = scene->mesh_node_warrior;
- else if (fmod(index, 12) == 1)
- node = scene->mesh_node_eagle;
- else if (fmod(index, 12) == 2)
- node = scene->mesh_node_grass;
- else if (fmod(index, 12) == 3)
- node = scene->mesh_node_soldier;
- else if (fmod(index, 12) == 4)
- node = scene->mesh_node_tommy;
- else if (fmod(index, 12) == 5)
- node = scene->mesh_node_gazebo;
- else if (fmod(index, 12) == 6)
- node = scene->mesh_node_carpet;
- else if (fmod(index, 12) == 7)
- node = scene->mesh_node_wall[0];
- else if (fmod(index, 12) == 8)
- node = scene->mesh_node_wall[1];
- else if (fmod(index, 12) == 9)
- node = scene->mesh_node_column[1];
- else if (fmod(index, 12) == 10)
- node = scene->mesh_node_column_c;
- else if (fmod(index, 12) == 11)
- node = scene->mesh_node_snake;
-
- evas_canvas3d_node_bounding_sphere_get(node, &x0, &y0, &z0, &r);
-
- evas_canvas3d_node_scale_set(scene->mesh_node_ball, r, r, r);
- evas_canvas3d_node_position_set(scene->mesh_node_ball, x0, y0, z0);
-
- evas_canvas3d_node_bounding_box_get(node, &x0, &y0, &z0, &x1, &y1, &z1);
-
- float vertixes[] =
- {
- x0, y0, z1, 0.0, 0.0, 1.0,
- x0, y1, z1, 0.0, 0.0, 1.0,
- x1, y1, z1, 0.0, 0.0, 1.0,
- x1, y0, z1, 0.0, 0.0, 1.0,
-
- x0, y0, z0, 0.0, 0.0, -1.0,
- x1, y0, z0, 0.0, 0.0, -1.0,
- x0, y1, z0, 0.0, 0.0, -1.0,
- x1, y1, z0, 0.0, 0.0, -1.0,
-
- x0, y0, z0, -1.0, 0.0, 0.0,
- x0, y1, z0, -1.0, 0.0, 0.0,
- x0, y0, z1, -1.0, 0.0, 0.0,
- x0, y1, z1, -1.0, 0.0, 0.0,
-
- x1, y0, z0, 1.0, 0.0, 0.0,
- x1, y1, z0, 1.0, 0.0, 0.0,
- x1, y1, z1, 1.0, 0.0, 0.0,
- x1, y0, z1, 1.0, 0.0, 0.0,
-
- x0, y1, z0, 0.0, 1.0, 0.0,
- x1, y1, z0, 0.0, 1.0, 0.0,
- x0, y1, z1, 0.0, 1.0, 0.0,
- x1, y1, z1, 0.0, 1.0, 0.0,
-
- x0, y0, z0, 0.0, -1.0, 0.0,
- x1, y0, z0, 0.0, -1.0, 0.0,
- x1, y0, z1, 0.0, -1.0, 0.0,
- x0, y0, z1, 0.0, -1.0, 0.0
- };
-
- unsigned short indixes[] =
- {
- 0, 1, 2, 3, 1, 2, 0, 3,
- 4, 5, 5, 7, 7, 6, 6, 4,
- 8, 9, 9, 11, 11, 10, 10, 8,
- 12, 13, 13, 14, 14, 15, 15, 12,
- 16, 17, 17, 19, 19, 18, 18, 16,
- 20, 21, 21, 22, 22, 23, 23, 20
- };
-
- if (*mesh)
- {
- evas_canvas3d_mesh_vertex_assembly_set(*mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(*mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 6 * sizeof(float), &vertixes[ 0]);
- evas_canvas3d_mesh_index_data_copy_set(*mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 48, &indixes[0]);
-
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-
-}
-
-void _on_delete(Ecore_Evas *ee EINA_UNUSED)
-{
- ecore_main_loop_quit();
-}
-
-void _on_canvas_resize(Ecore_Evas *ee)
-{
- int w, h;
-
- ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
-
- evas_object_resize(background, w, h);
- evas_object_resize(image, w, h);
- evas_object_move(image, 0, 0);
-}
-
-Eina_Bool _horizontal_circle_resolution(Evas_Canvas3D_Node *node, Evas_Real x, Evas_Real z, Evas_Real r)
-{
- Evas_Real x0, y0, z0, x1, y1, z1;
-
- evas_canvas3d_node_bounding_box_get(node, &x0, &y0, &z0, &x1, &y1, &z1);
-
- if (((x0 - x) * (x0 - x)) + ((z0 - z) * (z0 - z)) < r * r) return EINA_FALSE;
- if (((x0 - x) * (x0 - x)) + ((z1 - z) * (z1 - z)) < r * r) return EINA_FALSE;
- if (((x1 - x) * (x1 - x)) + ((z0 - z) * (z0 - z)) < r * r) return EINA_FALSE;
- if (((x1 - x) * (x1 - x)) + ((z1 - z) * (z1 - z)) < r * r) return EINA_FALSE;
-
- if ((((x + r < x0) && (x + r > x1)) || ((x + r > x0) && (x+r < x1))) && (((z < z0) && (z > z1)) || ((z > z0) && (z < z1))))
- return EINA_FALSE;
- if ((((x - r < x0) && (x - r > x1)) || ((x - r > x0) && (x-r < x1))) && (((z < z0) && (z > z1)) || ((z > z0) && (z < z1))))
- return EINA_FALSE;
- if ((((z + r < z0) && (z + r > z1)) || ((z + r > z0) && (z+r < z1))) && (((x < x0) && (x > x1)) || ((x > x0) && (x < x1))))
- return EINA_FALSE;
- if ((((z - r < z0) && (z - r > z1)) || ((z - r > z0) && (z-r < z1))) && (((x < x0) && (x > x1)) || ((x > x0) && (x < x1))))
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-Eina_Bool _horizontal_circle_object_resolution(Evas_Canvas3D_Node *node, Evas_Canvas3D_Node *node2, Evas_Real r)
-{
- Evas_Real x0, y0, z0, x1, y1, z1, x, y, z;
-
- evas_canvas3d_node_position_get(node2, EVAS_CANVAS3D_SPACE_WORLD, &x, &y, &z);
- evas_canvas3d_node_bounding_box_get(node, &x0, &y0, &z0, &x1, &y1, &z1);
-
- if (((x0 - x) * (x0 - x)) + ((z0 - z) * (z0 - z)) < r * r) return EINA_FALSE;
- if (((x0 - x) * (x0 - x)) + ((z1 - z) * (z1 - z)) < r * r) return EINA_FALSE;
- if (((x1 - x) * (x1 - x)) + ((z0 - z) * (z0 - z)) < r * r) return EINA_FALSE;
- if (((x1 - x) * (x1 - x)) + ((z1 - z) * (z1 - z)) < r * r) return EINA_FALSE;
-
- if ((((x + r < x0) && (x + r > x1)) || ((x + r > x0) && (x+r < x1))) && (((z < z0) && (z > z1)) || ((z > z0) && (z < z1))))
- return EINA_FALSE;
- if ((((x - r < x0) && (x - r > x1)) || ((x - r > x0) && (x-r < x1))) && (((z < z0) && (z > z1)) || ((z > z0) && (z < z1))))
- return EINA_FALSE;
- if ((((z + r < z0) && (z + r > z1)) || ((z + r > z0) && (z+r < z1))) && (((x < x0) && (x > x1)) || ((x > x0) && (x < x1))))
- return EINA_FALSE;
- if ((((z - r < z0) && (z - r > z1)) || ((z - r > z0) && (z-r < z1))) && (((x < x0) && (x > x1)) || ((x > x0) && (x < x1))))
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-Eina_Bool _horizontal_circle_position_resolution(Evas_Canvas3D_Node *node, Evas_Real x, Evas_Real z, Evas_Real r)
-{
- Evas_Real x0, y0, z0;
-
- evas_canvas3d_node_position_get(node, EVAS_CANVAS3D_SPACE_PARENT, &x0, &y0, &z0);
-
- if (((x0 - x) * (x0 - x)) + ((z0 - z) * (z0 - z)) < r * r) return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-Eina_Bool _horizontal_position_resolution(Evas_Canvas3D_Node *node, Evas_Real x, Evas_Real z)
-{
- Evas_Real x0, y0, z0, x1, y1, z1;
-
- evas_canvas3d_node_bounding_box_get(node, &x0, &y0, &z0, &x1, &y1, &z1);
-
- if ((x > x0) && (x < x1) && (z > z0) && (z < z1))
- return EINA_FALSE;
- if ((x > x0) && (x < x1) && (z < z0) && (z > z1))
- return EINA_FALSE;
- if ((x < x0) && (x > x1) && (z > z0) && (z < z1))
- return EINA_FALSE;
- if ((x < x0) && (x > x1) && (z < z0) && (z > z1))
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-/* Is actual for this example only */
-Eina_Bool _horizontal_object_resolution(Evas_Canvas3D_Node *node, Evas_Real x1, Evas_Real z1, Evas_Real x2,
- Evas_Real z2, Evas_Real x_move, Evas_Real z_move)
-{
- Evas_Real x3, y3, z3, x4, y4, z4;
-
- evas_canvas3d_node_bounding_box_get(node, &x3, &y3, &z3, &x4, &y4, &z4);
-
- if ((x4 + x_move < x1) || (x4 + x_move > x2) ||
- (z4 + z_move < z1) || (z4 + z_move > z2))
- return EINA_FALSE;
-
-
- return EINA_TRUE;
-}
-
-Eina_Bool _horizontal_frame_resolution(Evas_Canvas3D_Node *node, Evas_Real x1, Evas_Real z1, Evas_Real x2,
- Evas_Real z2, Evas_Real *x_move, Evas_Real *z_move)
-{
- Evas_Real x3, y3, z3, x4, y4, z4;
-
- *x_move = 0;
- *z_move = 0;
-
- evas_canvas3d_node_bounding_box_get(node, &x3, &y3, &z3, &x4, &y4, &z4);
-
- if (x3 < x1)
- *x_move = x1 - x3;
- else if (x4 > x2)
- *x_move = x2 - x4;
- if (z3 < z1)
- *z_move = z1 - z3;
- else if (z4 > z2)
- *z_move = z2 - z4;
-
- if ((*x_move != 0) || (*z_move != 0))
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-static void
-_generate_square_grid(unsigned short *indices, int count)
-{
- int i, j;
- unsigned short *index = &indices[0];
- int vccount = count + 1;
-
- for(j = 0; j < count; j++)
- for(i = 0; i < count; i++)
- {
- *index++ = (unsigned short)(i + vccount * j);
- *index++ = i + vccount * (j + 1);
- *index++ = i + 1 + vccount * (j + 1);
-
- *index++ = i + vccount * j;
- *index++ = i + 1 + vccount * j;
- *index++ = i + vccount * (j + 1) + 1;
- }
-}
-
-void
-_set_ball(Eo *mesh, int p)
-{
- int vcount, icount, vccount, i, j;
- double dtheta, dfi, sinth, costh, fi, theta, sinfi, cosfi;
- unsigned short *indices;
-
- icount = p * p * 6;
- vccount = p + 1;
- vcount = vccount * vccount;
-
- dtheta = M_PI / p;
- dfi = 2 * M_PI / p;
-
- vec3 *vertices = malloc(sizeof(vec3) * vcount);
- vec3 *normals = malloc(sizeof(vec3) * vcount);
-
- for (j = 0; j < vccount; j++)
- {
- theta = j * dtheta;
- sinth = sin(theta);
- costh = cos(theta);
- for (i = 0; i < vccount; i++)
- {
- fi = i * dfi;
- sinfi = sin(fi);
- cosfi = cos(fi);
- vertices[i + j * vccount].x = sinth * cosfi;
- vertices[i + j * vccount].y = sinth * sinfi;
- vertices[i + j * vccount].z = costh;
-
- normals[i + j * vccount].x = vertices[i + j * vccount].x;
- normals[i + j * vccount].y = vertices[i + j * vccount].y;
- normals[i + j * vccount].z = vertices[i + j * vccount].z;
- }
- }
-
- indices = malloc(sizeof(short) * icount);
-
- _generate_square_grid(indices, p);
-
- evas_canvas3d_mesh_vertex_count_set(mesh, vcount);
- evas_canvas3d_mesh_frame_add(mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, sizeof(vec3), &vertices[0]);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, sizeof(vec3), &normals[0]);
- evas_canvas3d_mesh_index_data_copy_set(mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, icount, &indices[0]);
-
- free(vertices);
- free(normals);
- free(indices);
-}
-
diff --git a/src/examples/evas/shooter/evas-3d-shooter-header.h b/src/examples/evas/shooter/evas-3d-shooter-header.h
deleted file mode 100644
index cd30fde209..0000000000
--- a/src/examples/evas/shooter/evas-3d-shooter-header.h
+++ /dev/null
@@ -1,196 +0,0 @@
-#ifndef EVAS_3D_SHOOTER_H_
-#define EVAS_3D_SHOOTER_H_
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#else
-#define PACKAGE_EXAMPLES_DIR "."
-#define EFL_BETA_API_SUPPORT
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <Ecore.h>
-#include <Ecore_Evas.h>
-#include <Ecore_Getopt.h>
-#include <Evas.h>
-#include "Eo.h"
-#include "evas-3d-shooter-macros.h"
-#include "../evas-common.h"
-
-typedef struct _Scene_Data
-{
- Eo *cube_primitive;
- Eo *sphere_primitive;
- Eo *cylinder_primitive;
- Eo *texture_diffuse_eagle;
- Eo *texture_diffuse_world;
- Eo *texture_diffuse_grass;
- Eo *texture_diffuse_soldier;
- Eo *texture_diffuse_soldier_jump;
- Eo *texture_diffuse_head;
- Eo *texture_diffuse_wall;
- Eo *texture_diffuse_gazebo;
- Eo *texture_diffuse_carpet;
- Eo *texture_diffuse_column;
- Eo *texture_diffuse_column_c;
- Eo *texture_diffuse_level[2];
- Eo *texture_diffuse_warrior;
- Eo *texture_diffuse_snake;
- Eo *texture_normal_grass;
- Eo *texture_normal_wall;
- Eo *texture_normal_gazebo;
- Eo *texture_normal_carpet;
- Eo *texture_normal_column;
- Eo *texture_normal_column_c;
- Eo *texture_normal_level[2];
- Eo *texture_normal_snake;
- Eo *root_node;
- Eo *camera_node;
- Eo *mesh_node_world;
- Eo *mesh_node_grass;
- Eo *light_node;
- Eo *mediator_node;
- Eo *carp_mediator_node;
- Eo *mesh_node_cube;
- Eo *mesh_node_eagle;
- Eo *mesh_node_soldier;
- Eo *mesh_node_head;
- Eo *mesh_node_tommy;
- Eo *mesh_node_wall[4];
- Eo *mesh_node_gazebo;
- Eo *mesh_node_carpet;
- Eo *mesh_node_column[4];
- Eo *mesh_node_column_c;
- Eo *mesh_node_rocket[10];
- Eo *mesh_node_level[10];
- Eo *mesh_node_snake;
- Eo *mesh_node_warrior;
- Eo *mesh_node_ball;
-
- Eo *camera;
- Eo *light;
- Eo *mesh_world;
- Eo *mesh_grass;
- Eo *mesh_cube;
- Eo *mesh_eagle;
- Eo *mesh_soldier;
- Eo *mesh_soldier_jump;
- Eo *mesh_head;
- Eo *mesh_tommy;
- Eo *mesh_wall[4];
- Eo *mesh_gazebo;
- Eo *mesh_carpet;
- Eo *mesh_column[4];
- Eo *mesh_column_c;
- Eo *mesh_rocket[10];
- Eo *mesh_level[10];
- Eo *mesh_snake;
- Eo *mesh_warrior;
- Eo *mesh_ball;
- Eo *material_world;
- Eo *material_grass;
- Eo *material_eagle;
- Eo *material_soldier;
- Eo *material_soldier_jump;
- Eo *material_head;
- Eo *material_tommy;
- Eo *material_wall;
- Eo *material_gazebo;
- Eo *material_carpet;
- Eo *material_column;
- Eo *material_column_c;
- Eo *material_cube;
- Eo *material_level[2];
- Eo *material_snake;
- Eo *material_warrior;
- Eo *material_rocket[10];
- Eo *material_ball;
-
- Eina_Bool shadow;
- Eina_Bool colorpick;
- Eina_Bool fog;
- Eina_Bool blending;
- Eina_Bool normal;
-} Scene_Data;
-
-extern Evas *evas;
-extern Eo *background;
-extern Eo *image;
-
-static const vec2 tex_scale = {1, 1};
-
-static const Ecore_Getopt optdesc = {
- "ecore_thread_example",
- NULL,
- "0.0",
- "(C) 2011 Enlightenment",
- "Public domain?",
- "Example program for Ecore_Thread",
- 0,
- {
- ECORE_GETOPT_STORE_BOOL('s', "shadow", "If shadow is enable"),
- ECORE_GETOPT_STORE_BOOL('c', "colopick", "If colorpick is enable"),
- ECORE_GETOPT_STORE_BOOL('f', "fog", "If fog is enable"),
- ECORE_GETOPT_STORE_BOOL('b', "blending", "If blending is enable"),
- ECORE_GETOPT_HELP('h', "help"),
- ECORE_GETOPT_SENTINEL
- }
-};
-
-typedef struct _vec4
-{
- float x;
- float y;
- float z;
- float w;
-} vec4;
-
-typedef struct _Box3
-{
- vec3 p0;
- vec3 p1;
-} Box3;
-
-typedef struct _vertex
-{
- vec3 position;
- vec3 normal;
- vec3 tangent;
- vec4 color;
- vec3 texcoord;
-} vertex;
-
-void evas_box3_empty_set(Box3 *box);
-
-void evas_box3_set(Box3 *box, Evas_Real x0, Evas_Real y0, Evas_Real z0, Evas_Real x1, Evas_Real y1, Evas_Real z1);
-
-void _scale(Evas_Canvas3D_Node *node, Evas_Real scale);
-
-float _distance(float x1, float z1, float x2, float z2);
-
-void _camera_setup(Scene_Data *data);
-
-void _light_setup(Scene_Data *data);
-
-Eina_Bool _mesh_aabb(Evas_Canvas3D_Mesh **mesh, Scene_Data *scene, int index);
-
-void _on_delete(Ecore_Evas *ee EINA_UNUSED);
-
-void _on_canvas_resize(Ecore_Evas *ee);
-
-Eina_Bool _horizontal_circle_resolution(Evas_Canvas3D_Node *node, Evas_Real x, Evas_Real z, Evas_Real r);
-
-Eina_Bool _horizontal_circle_position_resolution(Evas_Canvas3D_Node *node, Evas_Real x, Evas_Real z, Evas_Real r);
-
-Eina_Bool _horizontal_circle_object_resolution(Evas_Canvas3D_Node *node, Evas_Canvas3D_Node *node2, Evas_Real r);
-
-Eina_Bool _horizontal_position_resolution(Evas_Canvas3D_Node *node, Evas_Real x, Evas_Real z);
-
-Eina_Bool _horizontal_object_resolution(Evas_Canvas3D_Node *node, Evas_Real x1, Evas_Real z1, Evas_Real x2,
- Evas_Real z2, Evas_Real x_move, Evas_Real z_move);
-
-Eina_Bool _horizontal_frame_resolution(Evas_Canvas3D_Node *node, Evas_Real x1, Evas_Real z1, Evas_Real x2,
- Evas_Real z2, Evas_Real *x_move, Evas_Real *z_move);
-
-void _set_ball(Eo *mesh, int p);
-#endif
diff --git a/src/examples/evas/shooter/evas-3d-shooter-macros.h b/src/examples/evas/shooter/evas-3d-shooter-macros.h
deleted file mode 100644
index 94980ec2e3..0000000000
--- a/src/examples/evas/shooter/evas-3d-shooter-macros.h
+++ /dev/null
@@ -1,242 +0,0 @@
-#define FOG_COLOR 0.5, 0.5, 0.5
-#define FOG_FACTOR 0.01
-#define WIDTH 1920
-#define HEIGHT 1080
-#define SOLDIER_RADIUS 5.3 /* soldier couldn't get сloser to camera than SOLDIER_RADIUS */
-#define COLUMN_RADIUS 3.0 /* warrior couldn't get сloser to any column than WARRIOR_COLUMN */
-#define WALL_RADIUS 2.2 /* camera couldn't get сloser to wall than WALL_RADIUS */
-#define JUMP_HIGHT 4
-#define GUN_DIR_X 0
-#define GUN_DIR_Y -2
-#define GUN_DIR_Z 105
-#define ROCKET_POS_X 0.4
-#define ROCKET_POS_Y -3.1
-#define ROCKET_POS_Z 0.0
-#define TOMMY_POS_X 1.0
-#define TOMMY_POS_Y -3.3
-#define TOMMY_POS_Z -9.0
-#define TOMMY_JUMP_X 0.7
-#define TOMMY_JUMP_Y 3.3
-#define TOMMY_JUMP_Z -4.1
-
-
-#define GUN_SPEED 0.001
-#define WARRIOR_SPEED 0.001
-#define WARRIOR_SPEED2 0.003
-#define SNAKE_SPEED 0.1
-#define SNAKE_SPEED2 0.001
-#define ROCKET_SPEED 2
-#define TO_RADIAN M_PI / 180
-#define JUMP 0.2
-#define STEP 2.5
-#define FALL_SPEED_UP 0.04
-#define CAMERA_SPEED 2
-#define CAMERA_MOVE 0.3
-
-#define SOLDIER_FRAME_X1 -43
-#define SOLDIER_FRAME_X2 76
-#define SOLDIER_FRAME_Z1 -55
-#define SOLDIER_FRAME_Z2 30.3
-#define ROCKET_FRAME_X1 -47
-#define ROCKET_FRAME_X2 80
-#define ROCKET_FRAME_Z1 -59
-#define ROCKET_FRAME_Z2 34
-#define SNAKE_FRAME_X1 -47
-#define SNAKE_FRAME_X2 79
-#define SNAKE_FRAME_Z1 -59
-#define SNAKE_FRAME_Z2 32
-
-typedef struct _vec3
-{
- float x;
- float y;
- float z;
-} vec3;
-
-typedef struct _vec2
-{
- float x;
- float y;
-} vec2;
-
-#define KEY_MOTION(way) \
- { \
- for (i = 0; (motion_vec[i] > 0) && (!pressed); i++) \
- pressed = (motion_vec[i] == way); \
- \
- if (!pressed) \
- motion_vec[i] = way; \
- \
- if ((way == 1) || (way == 3)) \
- camera_move = CAMERA_MOVE; \
- else \
- camera_move = -CAMERA_MOVE; \
- \
- if (way < 3) \
- lateral_motion_indicator = 0; \
- else \
- lateral_motion_indicator = 1; \
- }
-
-#define KEY_MOTION_DOWN(way) \
- { \
- while ((motion_vec[i] != way) && (i < 4)) \
- i++; \
- for (j = i; j < 3; j++) \
- motion_vec[j] = motion_vec[j + 1]; \
- motion_vec[3] = 0; \
- \
- i = 0; \
- while (motion_vec[i] > 0) \
- i++; \
- if (i > 0) \
- { \
- if ((motion_vec[i - 1] == 1) || (motion_vec[i - 1] == 3)) \
- camera_move = CAMERA_MOVE; \
- else \
- camera_move = -CAMERA_MOVE; \
- \
- if (motion_vec[i-1] < 3) \
- lateral_motion_indicator = 0; \
- else \
- lateral_motion_indicator = 1; \
- } \
- else \
- camera_move = 0; \
- }
-
-
-#define ENABLE_FOG(mesh) \
- evas_canvas3d_mesh_fog_enable_set(mesh, EINA_TRUE); \
- evas_canvas3d_mesh_fog_color_set(mesh, FOG_COLOR, FOG_FACTOR);
-
-
-#define DISABLE_FOG(mesh) \
- evas_canvas3d_mesh_fog_enable_set(mesh, EINA_FALSE);
-
-
-#define ENABLE_NORMAL(mesh) \
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP);
-
-
-#define DISABLE_NORMAL(mesh) \
- evas_canvas3d_mesh_shader_mode_set(mesh, EVAS_CANVAS3D_SHADER_MODE_PHONG);
-
-
-#define ADD_MESH(Object, Name, a, d, s) \
- data->material_##Object = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas); \
- \
- evas_canvas3d_material_enable_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE); \
- evas_canvas3d_material_enable_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE); \
- evas_canvas3d_material_enable_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE); \
- evas_canvas3d_material_enable_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE); \
- evas_canvas3d_material_color_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, a, a, a, 1.0); \
- evas_canvas3d_material_color_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, d, d, d, 1.0); \
- evas_canvas3d_material_color_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, s, s, s, 1.0); \
- evas_canvas3d_material_shininess_set(data->material_##Object, 50.0); \
- \
- data->mesh_##Name = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
-
-#define SETUP_DEFAULT_MESH(Object, Name, Shade_Mode) \
- evas_canvas3d_mesh_shader_mode_set(data->mesh_##Name, EVAS_CANVAS3D_SHADER_MODE_##Shade_Mode); \
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_##Name, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES); \
- evas_canvas3d_mesh_frame_material_set(data->mesh_##Name, 0, data->material_##Object);
-
-
-#define SETUP_MESH_NODE(Name) \
- data->mesh_node_##Name = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH)); \
- \
- evas_canvas3d_node_mesh_add(data->mesh_node_##Name, data->mesh_##Name);
-
-
-#define MATERIAL_TEXTURE_SET(Object, Name, file, image) \
- efl_file_simple_load(data->mesh_##Name, file, NULL); \
- \
- SETUP_DEFAULT_MESH(Object, Name, PHONG) \
- data->texture_diffuse_##Object = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); \
- \
- evas_canvas3d_texture_atlas_enable_set(data->texture_diffuse_##Object, EINA_FALSE); \
- efl_file_simple_load(data->texture_diffuse_##Object, image, NULL); \
- evas_canvas3d_texture_filter_set(data->texture_diffuse_##Object, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, \
- EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST); \
- evas_canvas3d_texture_wrap_set(data->texture_diffuse_##Object, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT); \
- \
- evas_canvas3d_material_texture_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, \
- data->texture_diffuse_##Object); \
- evas_canvas3d_material_texture_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, \
- data->texture_diffuse_##Object);
-
-
-#define CUBE_TEXTURE_SET(Object, Name, vertex, image) \
- evas_canvas3d_mesh_from_primitive_set(data->mesh_##Name, 0, data->cube_primitive); \
- evas_canvas3d_mesh_frame_vertex_data_set(data->mesh_##Name, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, \
- 2 * sizeof(float), vertex); \
- SETUP_DEFAULT_MESH(Object, Name, NORMAL_MAP) \
- data->texture_diffuse_##Object = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); \
- \
- evas_canvas3d_texture_atlas_enable_set(data->texture_diffuse_##Object, EINA_FALSE); \
- efl_file_simple_load(data->texture_diffuse_##Object, image, NULL); \
- evas_canvas3d_texture_filter_set(data->texture_diffuse_##Object, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, \
- EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST); \
- evas_canvas3d_texture_wrap_set(data->texture_diffuse_##Object, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT); \
- \
- evas_canvas3d_material_texture_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, \
- data->texture_diffuse_##Object); \
- evas_canvas3d_material_texture_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, \
- data->texture_diffuse_##Object);
-
-
-#define NORMAL_SET(Object, Name, normal) \
- data->texture_normal_##Object = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); \
- \
- evas_canvas3d_texture_atlas_enable_set(data->texture_normal_##Object, EINA_FALSE); \
- efl_file_simple_load(data->texture_normal_##Object, normal, NULL); \
- evas_canvas3d_texture_filter_set(data->texture_normal_##Object, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, \
- EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST); \
- evas_canvas3d_texture_wrap_set(data->texture_normal_##Object, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT); \
- \
- evas_canvas3d_material_texture_set(data->material_##Object, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, \
- data->texture_normal_##Object); \
- \
- evas_canvas3d_mesh_shader_mode_set(data->mesh_##Name, EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP);
-
-#define TEXTCOORDS_SET(Name, fb1, fb2, lr1, lr2, tb1, tb2) \
- static float Name##_textcoords[] = \
- { \
- /* Front */ \
- 0.0, 0.0, \
- fb1, 0.0, \
- fb1, fb2, \
- 0.0, fb2, \
- \
- /* Left */ \
- lr1, 0.0, \
- lr1, lr2, \
- 0.0, lr2, \
- 0.0, 0.0, \
- \
- /* Back */ \
- 0.0, 0.0, \
- fb1, 0.0, \
- fb1, fb2, \
- 0.0, fb2, \
- \
- /* Right */ \
- 0.0, lr2, \
- 0.0, 0.0, \
- lr1, 0.0, \
- lr1, lr2, \
- \
- /* Top */ \
- 0.0, 0.0, \
- 0.0, tb2, \
- tb1, tb2, \
- tb1, 0.0, \
- \
- /* Bottom */ \
- tb1, 0.0, \
- tb1, tb2, \
- 0.0, tb2, \
- 0.0, 0.0, \
- };
-
diff --git a/src/examples/evas/shooter/evas-3d-shooter.c b/src/examples/evas/shooter/evas-3d-shooter.c
deleted file mode 100644
index 2dcad1db61..0000000000
--- a/src/examples/evas/shooter/evas-3d-shooter.c
+++ /dev/null
@@ -1,1186 +0,0 @@
-/*
-* This is example of 3d-shooter done with help of evas-3d
-*
-* Basic control: 'w' - to go forward, 's' - to go back, 'a' - to the left, 'd' - to the right,
-* right mouse down - to activate camera rotation, mouse wheel down - to deactivate camera rotation,
-* left mouse down - to fire, 'space' - to jump, 'S' - to activate or deactivete shadow,
-* 'F' - to activate or deactivate fog, 'N' - to activate or deactivate normal mapping.
-* The warrior is atackable, the snake isn't, this possibility is given by presence of the bounding box,
-* which fixes the rocket entry. The warrior isn't passable for camera,
-* neither is wall, stairs and columns. There is a possibility to go upstairs and break down.
-*
-* Compile with "gcc -g evas-3d-shooter.c evas-3d-shooter-header.c -o evas-3d-shooter `pkg-config --libs --cflags efl evas ecore ecore-evas eo` -lm"
-*
-* Run program with flag "-s=TRUE" to turn on shadows, with "-f=TRUE" to turn on the fog, with "-b=TRUE" to turn on the blending.
-*/
-
-#include "evas-3d-shooter-header.h"
-
-#define LOCAL_IMAGE_FOLDER PACKAGE_EXAMPLES_DIR "" EVAS_PROJECT_IMAGE_FOLDER
-#define LOCAL_MODEL_FOLDER PACKAGE_EXAMPLES_DIR "" EVAS_PROJECT_MODEL_FOLDER
-
-
-Evas *evas = NULL;
-Eo *background = NULL;
-Eo *image = NULL;
-
-static const char *gray_brick_n_path = LOCAL_IMAGE_FOLDER "/brick-stone_n.jpg";
-static const char *gray_brick_path = LOCAL_IMAGE_FOLDER "/brick-stone.jpg";
-static const char *red_brick_n_path = LOCAL_IMAGE_FOLDER "/bricks_n.jpg";
-static const char *red_brick_path = LOCAL_IMAGE_FOLDER "/bricks.jpg";
-static const char *eagle_tex_path = LOCAL_IMAGE_FOLDER "/eagle.png";
-static const char *snake_tex_path = LOCAL_IMAGE_FOLDER "/snake.png";
-static const char *snake_tex_n_path = LOCAL_IMAGE_FOLDER "/snake_n.png";
-static const char *soldier_tex_path = LOCAL_IMAGE_FOLDER "/soldier.png";
-static const char *gazebo_b_path = LOCAL_IMAGE_FOLDER "/gazebo.png";
-static const char *gazebo_t_path = LOCAL_IMAGE_FOLDER "/gazebo_t.png";
-static const char *gazebo_t_trans_path = LOCAL_IMAGE_FOLDER "/gazebo_t_t.png";
-static const char *gazebo_t_n_path = LOCAL_IMAGE_FOLDER "/gazebo_t_n.png";
-static const char *gazebo_b_n_path = LOCAL_IMAGE_FOLDER "/gazebo_b_n.png";
-static const char *warrior_tex_path = LOCAL_IMAGE_FOLDER "/warrior.png";
-
-static const char *warrior_path = LOCAL_MODEL_FOLDER "/warrior.md2";
-static const char *gazebo_bot_path = LOCAL_MODEL_FOLDER "/gazebo_b.md2";
-static const char *gazebo_top_path = LOCAL_MODEL_FOLDER "/gazebo_t.md2";
-static const char *eagle_path = LOCAL_MODEL_FOLDER "/eagle.md2";
-static const char *snake_path = LOCAL_MODEL_FOLDER "/snake.md2";
-static const char *soldier_jump_path = LOCAL_MODEL_FOLDER "/soldier_jump.md2";
-static const char *soldier_path = LOCAL_MODEL_FOLDER "/soldier.md2";
-static const char *gun_path = LOCAL_MODEL_FOLDER "/tommy.ply";
-
-Evas_Canvas3D_Scene *global_scene = NULL;
-Ecore_Evas *ecore_evas = NULL;
-static float angle_camera = 0.0f;
-static float angle_eagle = 180.0f;
-static float d_angle_camera = 0.0;
-float d_angle_eagle = 0.5;
-float world_position = 0.0;
-float camera_position = 25.0;
-float camera_move = 0.0;
-float space_move = 0.0;
-float old_space_position = 0.0;
-float fall_speed = 0.0;
-float rocket_parametr[10];
-float new_y = 0.0;
-int rocket_indicator[10];
-int soldier_mode = 0;
-int cage_indicator = 0;
-int gun_indicator = 0;
-int tommy_indicator = 0;
-int mouse_diff_x = 0;
-int mouse_diff_y = 0;
-int mouse_old_x = 0;
-int mouse_old_y = 0;
-int camera_indicator = 0;
-int lateral_motion_indicator = 0;
-int step_indicator = 0;
-int fall_indicator = 0;
-int aabb_index = 0;
-int motion_vec[4];
-
-typedef struct _Ecore_Timers
-{
- Ecore_Timer *t;
- void *data;
-} Timers;
-
-static const unsigned short cube_indices[] =
-{
- /* Front */
- 0, 1, 2, 2, 1, 3,
-
- /* Back */
- 4, 5, 6, 6, 5, 7,
-
- /* Left */
- 8, 9, 10, 10, 9, 11,
-
- /* Right */
- 12, 13, 14, 14, 13, 15,
-
- /* Top */
- 16, 17, 18, 18, 17, 19,
-
- /* Bottom */
- 20, 21, 22, 22, 21, 23
-};
-
-static void
-_key_down(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Key_Down *ev = event_info;
- Evas_Real x, y, z;
- Scene_Data *scene = (Scene_Data *)data;
- Eina_Bool pressed = EINA_FALSE;
- int i = 0;
- if (!strcmp(ev->key, "space"))
- {
- if (space_move == 0.0)
- {
- evas_canvas3d_node_position_get(scene->mesh_node_tommy, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- old_space_position = y;
- space_move = JUMP;
- }
- }
- else if (!strcmp(ev->key, "s"))
- KEY_MOTION(1)
- else if (!strcmp(ev->key, "w"))
- KEY_MOTION(2)
- else if (!strcmp(ev->key, "d"))
- KEY_MOTION(3)
- else if (!strcmp(ev->key, "a"))
- KEY_MOTION(4)
- else if (!strcmp(ev->key, "B"))
- {
- if (!scene->blending)
- {
- scene->blending = EINA_TRUE;
- efl_file_simple_load(scene->texture_diffuse_carpet, gazebo_t_trans_path, NULL);
- evas_canvas3d_mesh_blending_enable_set(scene->mesh_carpet, EINA_TRUE);
- evas_canvas3d_mesh_blending_func_set(scene->mesh_carpet, EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA, EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_ALPHA);
- }
- else
- {
- scene->blending = EINA_FALSE;
- efl_file_simple_load(scene->texture_diffuse_carpet, gazebo_t_path, NULL);
- evas_canvas3d_mesh_blending_enable_set(scene->mesh_carpet, EINA_FALSE);
- }
- }
- else if (!strcmp(ev->key, "S"))
- {
- if (!scene->blending)
- {
- scene->blending = EINA_TRUE;
- evas_canvas3d_scene_shadows_enable_set(global_scene, EINA_TRUE);
- }
- else
- {
- scene->blending = EINA_FALSE;
- evas_canvas3d_scene_shadows_enable_set(global_scene, EINA_FALSE);
- }
- }
- else if (!strcmp(ev->key, "F"))
- {
- if (!scene->fog)
- {
- scene->fog = EINA_TRUE;
- ENABLE_FOG(scene->mesh_soldier)
- ENABLE_FOG(scene->mesh_soldier_jump)
- ENABLE_FOG(scene->mesh_warrior)
- ENABLE_FOG(scene->mesh_tommy)
- ENABLE_FOG(scene->mesh_gazebo)
- ENABLE_FOG(scene->mesh_carpet)
- ENABLE_FOG(scene->mesh_eagle)
- ENABLE_FOG(scene->mesh_world)
- ENABLE_FOG(scene->mesh_snake)
- ENABLE_FOG(scene->mesh_column_c)
- ENABLE_FOG(scene->mesh_grass)
- for (i = 0; i < 4; i++)
- {
- ENABLE_FOG(scene->mesh_wall[i])
- ENABLE_FOG(scene->mesh_column[i])
- }
- for (i = 0; i < 10; i++)
- {
- ENABLE_FOG(scene->mesh_level[i])
- ENABLE_FOG(scene->mesh_rocket[i])
- }
- }
- else
- {
- scene->fog = EINA_FALSE;
- DISABLE_FOG(scene->mesh_soldier)
- DISABLE_FOG(scene->mesh_soldier_jump)
- DISABLE_FOG(scene->mesh_warrior)
- DISABLE_FOG(scene->mesh_tommy)
- DISABLE_FOG(scene->mesh_gazebo)
- DISABLE_FOG(scene->mesh_carpet)
- DISABLE_FOG(scene->mesh_eagle)
- DISABLE_FOG(scene->mesh_world)
- DISABLE_FOG(scene->mesh_snake)
- DISABLE_FOG(scene->mesh_column_c)
- DISABLE_FOG(scene->mesh_grass)
- for (i = 0; i < 4; i++)
- {
- DISABLE_FOG(scene->mesh_wall[i])
- DISABLE_FOG(scene->mesh_column[i])
- }
- for (i = 0; i < 10; i++)
- {
- DISABLE_FOG(scene->mesh_level[i])
- DISABLE_FOG(scene->mesh_rocket[i])
- }
- }
- }
- else if (!strcmp(ev->key, "N"))
- {
- if (!scene->normal)
- {
- scene->normal = EINA_TRUE;
- ENABLE_NORMAL(scene->mesh_gazebo)
- ENABLE_NORMAL(scene->mesh_carpet)
- ENABLE_NORMAL(scene->mesh_snake)
- ENABLE_NORMAL(scene->mesh_column_c)
- ENABLE_NORMAL(scene->mesh_grass)
- for (i = 0; i < 4; i++)
- {
- ENABLE_NORMAL(scene->mesh_wall[i])
- ENABLE_NORMAL(scene->mesh_column[i])
- }
- for (i = 0; i < 10; i++)
- {
- ENABLE_NORMAL(scene->mesh_level[i])
- }
- }
- else
- {
- scene->normal = EINA_FALSE;
- DISABLE_NORMAL(scene->mesh_gazebo)
- DISABLE_NORMAL(scene->mesh_carpet)
- DISABLE_NORMAL(scene->mesh_snake)
- DISABLE_NORMAL(scene->mesh_column_c)
- DISABLE_NORMAL(scene->mesh_grass)
- for (i = 0; i < 4; i++)
- {
- DISABLE_NORMAL(scene->mesh_wall[i])
- DISABLE_NORMAL(scene->mesh_column[i])
- }
- for (i = 0; i < 10; i++)
- {
- DISABLE_NORMAL(scene->mesh_level[i])
- }
- }
- }
- else if (!strcmp(ev->key, "F1"))
- {
- evas_canvas3d_node_position_set(scene->camera_node, 0.0, 80.0, 30.0);
- evas_canvas3d_node_look_at_set(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- }
- else if (!strcmp(ev->key, "F2"))
- {
- evas_canvas3d_node_position_set(scene->camera_node, -2.0, 0.0, 4.0);
- evas_canvas3d_node_look_at_set(scene->camera_node, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 0.0, -100.0, EVAS_CANVAS3D_SPACE_PARENT, 0.0, 1.0, 0.0);
- }
- else if (!strcmp(ev->key, "A"))
- {
- aabb_index++;
- }
-}
-
-static void
-_key_up(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Key_Down *ev = event_info;
- int i = 0, j;
-
- if (!strcmp(ev->key, "space"))
- space_move = 0;
- else if (!strcmp(ev->key, "s"))
- KEY_MOTION_DOWN(1)
- else if (!strcmp(ev->key, "w"))
- KEY_MOTION_DOWN(2)
- else if (!strcmp(ev->key, "d"))
- KEY_MOTION_DOWN(3)
- else if (!strcmp(ev->key, "a"))
- KEY_MOTION_DOWN(4)
-
-}
-
-/* animate camera, create artificial intelligence of warrior */
-static Eina_Bool
-_animate_camera(void *data)
-{
- Scene_Data *scene = (Scene_Data *)data;
- Evas_Real x, y, z;
- Evas_Real x1, y1, z1;
- Evas_Real x2, y2, z2;
-
- int i = 0;
- Evas_Real x_move, x_move_lateral, z_move, z_move_lateral;
-
- angle_camera += d_angle_camera;
- x_move = camera_move * sin(angle_camera * TO_RADIAN);
- z_move = camera_move * cos(angle_camera * TO_RADIAN);
- x_move_lateral = camera_move * sin((angle_camera + 90) * TO_RADIAN);
- z_move_lateral = camera_move * cos((angle_camera + 90) * TO_RADIAN);
-
- evas_canvas3d_node_position_get(scene->mediator_node, EVAS_CANVAS3D_SPACE_WORLD, &x, &y, &z);
-
- evas_canvas3d_node_position_get(scene->mesh_node_world, EVAS_CANVAS3D_SPACE_PARENT, &x1, &y1, &z1);
-
- evas_canvas3d_node_position_get(scene->mesh_node_tommy, EVAS_CANVAS3D_SPACE_PARENT, &x2, &y2, &z2);
-
- if (fall_speed != 0)
- {
- if (y - fall_speed < 0)
- {
- evas_canvas3d_node_position_set(scene->mediator_node, x, 0, z);
- fall_speed = 0.0;
- }
- else
- {
- evas_canvas3d_node_position_set(scene->mediator_node, x, y - fall_speed, z);
- fall_speed += FALL_SPEED_UP;
- }
- }
- else if ((lateral_motion_indicator == 0) && (SOLDIER_FRAME_X1 < x + x_move) && (x + x_move < SOLDIER_FRAME_X2)
- && (SOLDIER_FRAME_Z1 < z + z_move) && (z + z_move < SOLDIER_FRAME_Z2) &&
- (_horizontal_circle_position_resolution(scene->mesh_node_warrior, x + x_move, z + z_move, SOLDIER_RADIUS)) &&
- (_horizontal_circle_resolution(scene->mesh_node_level[0], x + x_move, z + z_move, WALL_RADIUS)))
- {
- int under_breaks = 0;
- for (i = 2; i < 5; i++)
- {
- if (!_horizontal_position_resolution(scene->mesh_node_level[i],
- x + x_move, z + z_move))
- {
- under_breaks++;
- break;
- }
- }
-
- if ((!under_breaks || step_indicator) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[0], x + x_move, z + z_move, SOLDIER_RADIUS) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[1], x + x_move, z + z_move, SOLDIER_RADIUS) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[2], x + x_move, z + z_move, SOLDIER_RADIUS) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[3], x + x_move, z + z_move, SOLDIER_RADIUS))
- {
- evas_canvas3d_node_position_set(scene->mediator_node, x + x_move, y, z + z_move);
- evas_canvas3d_node_position_set(scene->mesh_node_world, x1 + x_move, y1, z1 + z_move);
- }
- }
- else if ((SOLDIER_FRAME_X1 < x + x_move_lateral) && (x + x_move_lateral < SOLDIER_FRAME_X2) &&
- (SOLDIER_FRAME_Z1 < z + z_move_lateral) && (z + z_move_lateral < SOLDIER_FRAME_Z2) &&
- (_horizontal_circle_position_resolution(scene->mesh_node_warrior, x + x_move_lateral, z + z_move_lateral, SOLDIER_RADIUS))&&
- (_horizontal_circle_resolution(scene->mesh_node_level[0], x + x_move_lateral, z + z_move_lateral, WALL_RADIUS)))
- {
- int under_breaks = 0;
- for (i = 2; i < 5; i++)
- {
- if (!_horizontal_position_resolution(scene->mesh_node_level[i],
- x + x_move_lateral, z + z_move_lateral))
- {
- under_breaks++;
- break;
- }
- }
- if ((!under_breaks || step_indicator) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[0], x + x_move_lateral, z + z_move_lateral, SOLDIER_RADIUS) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[1], x + x_move_lateral, z + z_move_lateral, SOLDIER_RADIUS) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[2], x + x_move_lateral, z + z_move_lateral, SOLDIER_RADIUS) &&
- _horizontal_circle_position_resolution(scene->mesh_node_column[3], x + x_move_lateral, z + z_move_lateral, SOLDIER_RADIUS))
- {
- evas_canvas3d_node_position_set(scene->mediator_node, x + x_move_lateral, y, z + z_move_lateral);
- evas_canvas3d_node_position_set(scene->mesh_node_world, x1 + x_move_lateral, y1, z1 + z_move_lateral);
- }
- }
-
- evas_canvas3d_node_position_get(scene->mediator_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
-
- if (!_horizontal_position_resolution(scene->mesh_node_level[step_indicator+1], x, z))
- {
- evas_canvas3d_node_position_set(scene->mediator_node, x, y + STEP, z);
- old_space_position += STEP;
- step_indicator++;
- }
- else if (!_horizontal_position_resolution(scene->mesh_node_level[step_indicator-1], x, z) && step_indicator > 0)
- {
- evas_canvas3d_node_position_set(scene->mediator_node, x, y - STEP, z);
- old_space_position -= STEP;
- step_indicator--;
- }
- else if (_horizontal_position_resolution(scene->mesh_node_level[step_indicator], x, z) && (step_indicator > 0))
- {
- fall_speed += FALL_SPEED_UP;
- step_indicator = 0;
- }
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mediator_node, angle_camera, 0, 1.0, 0.0);
- evas_canvas3d_node_position_get(scene->mediator_node, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
-
- evas_canvas3d_node_position_get(scene->mesh_node_warrior, EVAS_CANVAS3D_SPACE_PARENT, &x1, &y1, &z1);
- evas_canvas3d_node_position_get(scene->mesh_node_snake, EVAS_CANVAS3D_SPACE_PARENT, &x2, &y2, &z2);
-
- float snake_x = (x2 - x) / _distance(x, z, x2, z2);
- float snake_z = (z2 - z) / _distance(x, z, x2, z2);
- float looking = sin(angle_camera* TO_RADIAN)* snake_x + cos(angle_camera* TO_RADIAN)* snake_z;
-
- if (_horizontal_circle_position_resolution(scene->mesh_node_warrior, (x1 - x) * WARRIOR_SPEED + x,
- (z1 - z) * WARRIOR_SPEED + z, SOLDIER_RADIUS))
- {
- if (_horizontal_circle_object_resolution(scene->mesh_node_warrior, scene->mesh_node_column[0], COLUMN_RADIUS) &&
- _horizontal_circle_object_resolution(scene->mesh_node_warrior, scene->mesh_node_column[1], COLUMN_RADIUS) &&
- _horizontal_circle_object_resolution(scene->mesh_node_warrior, scene->mesh_node_column[2], COLUMN_RADIUS) &&
- _horizontal_circle_object_resolution(scene->mesh_node_warrior, scene->mesh_node_column[3], COLUMN_RADIUS) &&
- _horizontal_circle_object_resolution(scene->mesh_node_level[0], scene->mesh_node_warrior, COLUMN_RADIUS))
- evas_canvas3d_node_position_set(scene->mesh_node_warrior, (x - x1) * WARRIOR_SPEED + x1, y1, (z - z1) * WARRIOR_SPEED + z1);
- else
- evas_canvas3d_node_position_set(scene->mesh_node_warrior, (z - z1) * WARRIOR_SPEED2 + x1, y1, -(x - x1) * WARRIOR_SPEED2 + z1);
- }
-
- /* if soldier is looking at the snake */
- if (looking < 0)
- {
- /* if snake is located at the left hand of the soldier */
- if (snake_x * cos(angle_camera * TO_RADIAN) - snake_z * sin(angle_camera* TO_RADIAN) < 0)
- {
- if ((_horizontal_object_resolution(scene->mesh_node_snake, SNAKE_FRAME_X1, SNAKE_FRAME_Z1,
- SNAKE_FRAME_X2, SNAKE_FRAME_Z2, snake_z * SNAKE_SPEED, -snake_x * SNAKE_SPEED)))
- evas_canvas3d_node_position_set(scene->mesh_node_snake, snake_z * SNAKE_SPEED + x2, y2, -snake_x * SNAKE_SPEED + z2);
- else if (_horizontal_circle_resolution(scene->mesh_node_snake, (x2 - x) * SNAKE_SPEED2 + x,
- (z2 - z) * SNAKE_SPEED2 + z, SOLDIER_RADIUS))
- evas_canvas3d_node_position_set(scene->mesh_node_snake, (x - x2) * SNAKE_SPEED2 + x2, y2, (z - z2) * SNAKE_SPEED2 + z2);
- }
- /* if snake is located at the right hand of the soldier */
- else
- {
- if ((_horizontal_object_resolution(scene->mesh_node_snake, SNAKE_FRAME_X1, SNAKE_FRAME_Z1,
- SNAKE_FRAME_X2, SNAKE_FRAME_Z2, -snake_z * SNAKE_SPEED, snake_x * SNAKE_SPEED)))
- evas_canvas3d_node_position_set(scene->mesh_node_snake, -snake_z * SNAKE_SPEED + x2, y2, snake_x * SNAKE_SPEED + z2);
- else if (_horizontal_circle_resolution(scene->mesh_node_snake, (x2 - x) * SNAKE_SPEED2 + x,
- (z2 - z) * SNAKE_SPEED2 + z, SOLDIER_RADIUS))
- evas_canvas3d_node_position_set(scene->mesh_node_snake, (x - x2) * SNAKE_SPEED2 + x2, y2, (z - z2) * SNAKE_SPEED2 + z2);
- }
- }
- else if (_horizontal_circle_resolution(scene->mesh_node_snake, (x2 - x) * SNAKE_SPEED2 + x, (z2 - z) * SNAKE_SPEED2 + z, SOLDIER_RADIUS))
- evas_canvas3d_node_position_set(scene->mesh_node_snake, (x - x2) * SNAKE_SPEED2 + x2, y2, (z - z2) * SNAKE_SPEED2 + z2);
-
- evas_canvas3d_node_position_get(scene->mesh_node_snake, EVAS_CANVAS3D_SPACE_PARENT, &x2, &y2, &z2);
-
- evas_canvas3d_node_look_at_set(scene->mesh_node_warrior, EVAS_CANVAS3D_SPACE_PARENT, 0.0, -1000.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, (z - z1) / _distance(x, z, x1, z1), 0, (x1 - x) / _distance(x, z, x1, z1));
-
- evas_canvas3d_node_look_at_set(scene->mesh_node_snake, EVAS_CANVAS3D_SPACE_PARENT, 2 * x2 - x, y2, 2 * z2 - z, EVAS_CANVAS3D_SPACE_PARENT, 0, 1, 0);
-
- if (!_horizontal_frame_resolution(scene->mesh_node_snake, SNAKE_FRAME_X1, SNAKE_FRAME_Z1,
- SNAKE_FRAME_X2, SNAKE_FRAME_Z2, &x_move, &z_move))
- evas_canvas3d_node_position_set(scene->mesh_node_snake, x2 + x_move, y2, z2 + z_move);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_animate_scene_gun(void *data)
-{
- static float angle = 0.0f;
-
- static float tommy_parametr = 0.0f;
- int i = 0;
- Evas_Real x, y, z;
- Evas_Real x1, y1, z1;
- static int frame = 0;
- static int frame_soldier, frame_eagle, frame_snake;
- Scene_Data *scene = (Scene_Data *)data;
- Box3 boxy;
-
- float sinus = sin(angle_camera * TO_RADIAN);
- float cosinus = cos(angle_camera * TO_RADIAN);
-
- /* rocket and gun movement */
- angle_eagle += d_angle_eagle;
-
- frame_eagle = evas_canvas3d_node_mesh_frame_get(scene->mesh_node_eagle, scene->mesh_eagle);
- if (frame_eagle > 19500) frame_eagle = 0;
- frame_eagle += 150;
-
- frame_snake = evas_canvas3d_node_mesh_frame_get(scene->mesh_node_snake, scene->mesh_snake);
- if (frame_snake > 16000) frame_snake = 0;
- frame_snake += 64;
-
- evas_canvas3d_node_orientation_angle_axis_set(scene->mesh_node_eagle, angle_eagle, 0.0, 1.0, 0.0);
- /* equation of eagle flight */
- evas_canvas3d_node_position_set(scene->mesh_node_eagle, 38 * sin((angle_eagle + 90) * TO_RADIAN), 20 + 20 * sin(angle_eagle * TO_RADIAN), -10 + 20.0 * cos((angle_eagle + 90) * TO_RADIAN));
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node_eagle, scene->mesh_eagle, frame_eagle);
-
- for (i = 0; i < 10; i ++)
- {
- if (rocket_indicator[i] == 3)
- rocket_indicator[i] = 0;
- else if (rocket_indicator[i] == 0)
- /* almost hidden rocket */
- _scale(scene->mesh_node_rocket[i], 0.004);
- else if (rocket_indicator[i] == 1)
- {
- _scale(scene->mesh_node_rocket[i], 0.4);
- evas_canvas3d_material_color_set(scene->material_rocket[i], EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(scene->material_rocket[i], EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.2, 0.2, 0.0, 1.0);
- evas_canvas3d_material_color_set(scene->material_rocket[i], EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 0.5, 0.5, 0.5, 1.0);
-
- rocket_indicator[i] = 2;
-
- evas_canvas3d_node_position_set(scene->mesh_node_rocket[i], ROCKET_POS_X, ROCKET_POS_Y, ROCKET_POS_Z);
- rocket_parametr[i] = 0;
- }
- else if (rocket_indicator[i] == 2)
- {
- rocket_parametr[i] += ROCKET_SPEED;
- /* equation of rocket flight */
-
- evas_canvas3d_node_position_get(scene->mesh_node_rocket[i], EVAS_CANVAS3D_SPACE_WORLD, &x, &y, &z);
-
- if ((ROCKET_FRAME_X1 < x) && (x < ROCKET_FRAME_X2) && (ROCKET_FRAME_Z1 < z) && (z < ROCKET_FRAME_Z2))
- evas_canvas3d_node_position_set(scene->mesh_node_rocket[i], ROCKET_POS_X, ROCKET_POS_Y, ROCKET_POS_Z - rocket_parametr[i]);
- else
- rocket_indicator[i] = 3;
-
- /* the way to stop the rocket */
- evas_canvas3d_node_bounding_box_get(scene->mesh_node_warrior, &x, &y, &z, &x1, &y1, &z1);
- evas_box3_set(&boxy, x, y, z, x1, y1, z1);
-
- evas_canvas3d_node_position_get(scene->mesh_node_rocket[i], EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
-
- evas_canvas3d_node_position_get(scene->mediator_node, EVAS_CANVAS3D_SPACE_PARENT, &x1, &y1, &z1);
-
- if (((z * sinus + x * cosinus + x1) >= boxy.p0.x) && ((z * sinus + x * cosinus + x1) <= boxy.p1.x) &&
- ((z * cosinus - x * sinus + z1) >= boxy.p0.z) && ((z * cosinus - x * sinus + z1) <= boxy.p1.z))
- {
- evas_canvas3d_material_color_set(scene->material_rocket[i], EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.8, 0.8, 0.8, 1.0);
- evas_canvas3d_material_color_set(scene->material_rocket[i], EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.9, 0.1, 0.1, 1.0);
- evas_canvas3d_material_color_set(scene->material_rocket[i], EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 0.5, 0.5, 0.5, 1.0);
-
- _scale(scene->mesh_node_rocket[i], 4.5);
- rocket_indicator[i] = 3;
- }
- }
- }
-
- if (tommy_indicator == 1)
- {
- tommy_indicator = 2;
- evas_canvas3d_node_position_set(scene->mesh_node_tommy, TOMMY_POS_X, TOMMY_POS_Y, TOMMY_POS_Z);
- tommy_parametr = 0.0;
- }
- /* parametric equations of gun movement, (GUN_DIR_X, GUN_DIR_Y, GUN_DIR_Z) is direction vector */
- else if (tommy_indicator == 2)
- {
- tommy_parametr += GUN_SPEED;
- evas_canvas3d_node_position_set(scene->mesh_node_tommy, TOMMY_POS_X + GUN_DIR_X * tommy_parametr, TOMMY_POS_Y + GUN_DIR_Y * tommy_parametr, TOMMY_POS_Z + GUN_DIR_Z * tommy_parametr);
-
- if (TOMMY_POS_Z + GUN_DIR_Z * tommy_parametr >= -8.3)
- tommy_indicator = 3;
- }
- else if (tommy_indicator == 3)
- {
- tommy_parametr-= GUN_SPEED / 2;
- evas_canvas3d_node_position_set(scene->mesh_node_tommy, TOMMY_POS_X + GUN_DIR_X * tommy_parametr, TOMMY_POS_Y + GUN_DIR_Y * tommy_parametr, TOMMY_POS_Z + GUN_DIR_Z * tommy_parametr);
-
- evas_canvas3d_node_position_get(scene->mesh_node_tommy, EVAS_CANVAS3D_SPACE_PARENT, &x, &y, &z);
- if (z <= TOMMY_POS_Z)
- {
- tommy_indicator = 4;
- tommy_parametr = 0;
- }
- }
-
- if (angle_eagle > 360.0) angle -= 360.0f;
-
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node_warrior, scene->mesh_warrior, frame);
-
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node_snake, scene->mesh_snake, frame_snake);
-
- if (space_move && (soldier_mode == 0))
- {
- evas_canvas3d_node_mesh_add(scene->mesh_node_soldier, scene->mesh_soldier_jump);
- evas_canvas3d_node_mesh_del(scene->mesh_node_soldier, scene->mesh_soldier);
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node_soldier, scene->mesh_soldier_jump, 0);
- soldier_mode = 1;
- evas_canvas3d_node_position_set(scene->mesh_node_tommy, TOMMY_JUMP_X, TOMMY_JUMP_Y, TOMMY_JUMP_Z);
- evas_canvas3d_node_look_at_set(scene->mesh_node_tommy, EVAS_CANVAS3D_SPACE_PARENT, 1000.0, 0.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 0, 0, 1);
- }
- else if (soldier_mode == 1)
- {
- frame_soldier = evas_canvas3d_node_mesh_frame_get(scene->mesh_node_soldier, scene->mesh_soldier_jump);
- frame_soldier += 124;
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node_soldier, scene->mesh_soldier_jump, frame_soldier);
- if (frame_soldier < 2480)
- evas_canvas3d_node_position_set(scene->mesh_node_tommy, TOMMY_JUMP_X, TOMMY_JUMP_Y + 4.5 * frame_soldier / 2480, TOMMY_JUMP_Z);
- else
- evas_canvas3d_node_position_set(scene->mesh_node_tommy, TOMMY_JUMP_X, TOMMY_JUMP_Y + 4.5 * (4960 - frame_soldier) / 2480, TOMMY_JUMP_Z);
- if (frame_soldier > 4960)
- {
- evas_canvas3d_node_mesh_del(scene->mesh_node_soldier, scene->mesh_soldier_jump);
- evas_canvas3d_node_mesh_add(scene->mesh_node_soldier, scene->mesh_soldier);
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node_soldier, scene->mesh_soldier, 0);
- soldier_mode = 0;
- evas_canvas3d_node_position_set(scene->mesh_node_tommy, TOMMY_POS_X, TOMMY_POS_Y, TOMMY_POS_Z);
- evas_canvas3d_node_look_at_set(scene->mesh_node_tommy, EVAS_CANVAS3D_SPACE_PARENT, 0.0, -1000.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 2, 0, 1.5);
- }
- }
- else if (camera_move)
- {
- frame_soldier = evas_canvas3d_node_mesh_frame_get(scene->mesh_node_soldier, scene->mesh_soldier);
- frame_soldier += 124;
- if (frame_soldier > 6200) frame_soldier = 0;
- evas_canvas3d_node_mesh_frame_set(scene->mesh_node_soldier, scene->mesh_soldier, frame_soldier);
- }
-
- /* create bounding box */
- _mesh_aabb(&scene->mesh_cube, scene, aabb_index);
-
- frame += 32;
- if (frame > 108 * 20) frame = 192;
-
- return ECORE_CALLBACK_RENEW;
-}
-
-static void
-_on_mouse_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *info)
-{
- Evas_Event_Mouse_Down *ev = info;
-
- if ((ev->button == 1) && !space_move)
- {
- cage_indicator = fmod(++cage_indicator, 10);
- rocket_indicator[cage_indicator] = 1;
- tommy_indicator = 1;
- }
-
- /* camera default settings */
- d_angle_camera = 0.0;
-}
-
-/* emit signals independently */
-static Eina_Bool
-_continue_camera(void *data)
-{
- if (camera_indicator == 1)
- evas_event_feed_mouse_down(evas, 3, EVAS_BUTTON_NONE, 0, &data);
-
- return EINA_TRUE;
-}
-
-/* calculate new angle of rotation */
-static void
-_reload_camera(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Mesh *m;
- Evas_Real s, t;
-
- evas_canvas3d_scene_pick(global_scene, ev->canvas.x, ev->canvas.y, &n, &m, &s, &t);
-
- d_angle_camera = 0;
- if (n || m)
- {
- mouse_diff_x = ev->canvas.x - mouse_old_x;
- mouse_diff_y = ev->canvas.y - mouse_old_y;
- mouse_old_x = ev->canvas.x;
- mouse_old_y = ev->canvas.y;
-
- if (camera_indicator == 1)
- d_angle_camera = (float) -mouse_diff_x / 100;
-
- if (ev->canvas.x < 0)
- d_angle_camera = CAMERA_SPEED;
- else if (ev->canvas.x > WIDTH - 100)
- d_angle_camera = -CAMERA_SPEED;
- }
-
- if (ev->button == 3)
- {
- if (camera_indicator == 0)
- ecore_timer_add(0.160, _continue_camera, &data);
- camera_indicator = 1;
- }
-}
-
-static void
-_play_scene(void *data EINA_UNUSED,
- Evas *e EINA_UNUSED,
- Evas_Object *eo EINA_UNUSED,
- void *event_info)
-{
- Evas_Event_Mouse_Down *ev = event_info;
-
- if (ev->button == 2)
- {
- if (camera_indicator == 1) camera_indicator = 2;
- d_angle_camera = 0;
- }
-}
-
-void
-_mesh_setup_gun_planet(Scene_Data *data)
-{
- /* Setup material and texture for world. */
-
- ADD_MESH(world, world, 0.5, 0.5, 1.0);
- evas_canvas3d_mesh_from_primitive_set(data->mesh_world, 0, data->sphere_primitive);
- SETUP_DEFAULT_MESH(world, world, DIFFUSE);
- SETUP_MESH_NODE(world);
-
- evas_canvas3d_node_scale_set(data->mesh_node_world, 350, 350, 350);
- evas_canvas3d_node_position_set(data->mesh_node_world, 0.0, 0.0, 0.0);
-
- /* Setup material and texture for player */
-
- ADD_MESH(soldier, soldier, 0.2, 0.6, 1.0)
- MATERIAL_TEXTURE_SET(soldier, soldier, soldier_path, soldier_tex_path)
-
- SETUP_MESH_NODE(soldier)
-
- evas_canvas3d_node_position_set(data->mesh_node_soldier, 0, -10, 0);
- evas_canvas3d_node_scale_set(data->mesh_node_soldier, 5, 5, 5);
-
- evas_canvas3d_node_look_at_set(data->mesh_node_soldier, EVAS_CANVAS3D_SPACE_PARENT, 0.0, -10.0, -100.0, EVAS_CANVAS3D_SPACE_PARENT, 0, 1, 0);
- evas_canvas3d_node_mesh_frame_set(data->mesh_node_soldier, data->mesh_soldier, 0);
-
- ADD_MESH(soldier, soldier_jump, 1.0, 1.0, 1.0)
- MATERIAL_TEXTURE_SET(soldier, soldier_jump, soldier_jump_path, soldier_tex_path)
-
- /* Setup material and texture for tommy gun */
-
- ADD_MESH(tommy, tommy, 0.0, 0.3, 1.0)
- SETUP_MESH_NODE(tommy)
- efl_file_simple_load(data->mesh_tommy, gun_path, NULL);
- efl_file_save(data->mesh_tommy, "try.obj", NULL, NULL);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_tommy, EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh_tommy, 0, data->material_tommy);
-
- evas_canvas3d_node_scale_set(data->mesh_node_tommy, 1.5, 1.5, 1.5);
- evas_canvas3d_node_position_set(data->mesh_node_tommy, TOMMY_POS_X, TOMMY_POS_Y, TOMMY_POS_Z);
- evas_canvas3d_node_look_at_set(data->mesh_node_tommy, EVAS_CANVAS3D_SPACE_PARENT, 0.0, -1000.0, 0.0, EVAS_CANVAS3D_SPACE_PARENT, 2, 0, 1.5);
-
- /* Setup material and texture for gazebo */
-
- ADD_MESH(gazebo, gazebo, 0.01, 1.0, 1.0)
- SETUP_MESH_NODE(gazebo)
- MATERIAL_TEXTURE_SET(gazebo, gazebo, gazebo_bot_path, gazebo_b_path)
- NORMAL_SET(gazebo, gazebo, gazebo_b_n_path)
-
- evas_canvas3d_node_scale_set(data->mesh_node_gazebo, 0.18, 0.18, 0.18);
- evas_canvas3d_node_orientation_angle_axis_set(data->mesh_node_gazebo, 180, 0.0, 1.0, 0.0);
- evas_canvas3d_node_position_set(data->mesh_node_gazebo, -20, -10, -35);
-
- /* Setup material and texture for carpet */
-
- ADD_MESH(carpet, carpet, 0.01, 1.0, 1.0)
- SETUP_MESH_NODE(carpet)
- MATERIAL_TEXTURE_SET(carpet, carpet, gazebo_top_path, gazebo_t_path)
- NORMAL_SET(carpet, carpet, gazebo_t_n_path)
-
- if (data->blending)
- {
- evas_canvas3d_texture_atlas_enable_set(data->texture_diffuse_carpet, EINA_FALSE);
- efl_file_simple_load(data->texture_diffuse_carpet, gazebo_t_trans_path, NULL);
- evas_canvas3d_mesh_blending_enable_set(data->mesh_carpet, EINA_TRUE);
- evas_canvas3d_mesh_blending_func_set(data->mesh_carpet, EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA, EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_ALPHA);
- }
-
- evas_canvas3d_node_scale_set(data->mesh_node_carpet, 0.18, 0.18, 0.18);
- evas_canvas3d_node_position_set(data->mesh_node_carpet, -20, -10, -35);
- /* Setup material and texture for eagle. */
-
- ADD_MESH(eagle, eagle, 0.01, 1.0, 1.0)
- SETUP_MESH_NODE(eagle)
- MATERIAL_TEXTURE_SET(eagle, eagle, eagle_path, eagle_tex_path)
-
- evas_canvas3d_node_scale_set(data->mesh_node_eagle, 0.1, 0.1, 0.1);
- evas_canvas3d_node_position_set(data->mesh_node_eagle, -20, 20, 0);
- /* Set material for bounding box */
-
- ADD_MESH(cube, cube, 0.01, 1.0, 1.0)
- evas_canvas3d_mesh_frame_add(data->mesh_cube, 0);
- SETUP_DEFAULT_MESH(cube, cube, DIFFUSE);
- SETUP_MESH_NODE(cube)
-
- evas_canvas3d_mesh_index_data_set(data->mesh_cube, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 36, &cube_indices[0]);
- evas_canvas3d_mesh_vertex_count_set(data->mesh_cube, 24);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_cube, EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES);
-
- /* Setup mesh for column carpet */
-
- ADD_MESH(column_c, column_c, 0.2, 0.8, 1.0)
- SETUP_MESH_NODE(column_c)
- TEXTCOORDS_SET(cube, 5.0, 0.4, 5.0, 0.1, 5.0, 0.1)
- CUBE_TEXTURE_SET(column_c, column_c, cube_textcoords, red_brick_path)
- NORMAL_SET(column_c, column_c, red_brick_n_path)
-
- evas_canvas3d_node_orientation_angle_axis_set(data->mesh_node_column_c, 90, 0, 1.0, 0.0);
- evas_canvas3d_node_scale_set(data->mesh_node_column_c, 96.0, 1.6, 4.8);
- evas_canvas3d_node_position_set(data->mesh_node_column_c, 10, 9.0, -12);
-
- /* Setup mesh for bounding sphere */
- data->material_ball = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
- evas_canvas3d_material_enable_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.0, 5.0, 1.0, 1.0);
- evas_canvas3d_material_color_set(data->material_ball, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material_ball, 50.0);
-
- data->mesh_ball = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
-
- _set_ball(data->mesh_ball, 10);
-
- evas_canvas3d_mesh_shader_mode_set(data->mesh_ball, EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_ball, EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES);
- evas_canvas3d_mesh_frame_material_set(data->mesh_ball, 0, data->material_ball);
-
- SETUP_MESH_NODE(ball)
-
- _scale(data->mesh_node_ball, 10.0);
-}
-
-void
-_mesh_setup_wall(Scene_Data *data, int index)
-{
- /* Setup material and texture for wall. */
-
- ADD_MESH(wall, wall[index], 0.2, 0.8, 1.0)
- SETUP_MESH_NODE(wall[index])
- TEXTCOORDS_SET(wall, 12.0, 0.2, 0.2, 1.0, 12.0, 1.0)
- CUBE_TEXTURE_SET(wall, wall[index], wall_textcoords, red_brick_path)
- NORMAL_SET(wall, wall[index], red_brick_n_path)
-
- /* placing of wall carpet on the floor grid */
- if (index == 0)
- {
- evas_canvas3d_node_scale_set(data->mesh_node_wall[index], 6.7 * 19.5, 20.0, 2.0);
- evas_canvas3d_node_position_set(data->mesh_node_wall[index], -39.7 + 18.6 * 3, 0.0, -60.3);
- }
- else if (index == 1)
- {
- evas_canvas3d_node_scale_set(data->mesh_node_wall[index], 5 * 19.5, 20.0, 2.0);
- evas_canvas3d_node_position_set(data->mesh_node_wall[index], 81.2, 0.0, -51.5 + 19.5 * 2);
- evas_canvas3d_node_orientation_angle_axis_set(data->mesh_node_wall[index], 90, 0, 1.0, 0.0);
- }
- else if (index == 2)
- {
- evas_canvas3d_node_scale_set(data->mesh_node_wall[index], 6.7 * 19.5, 20.0, 2.0);
- evas_canvas3d_node_position_set(data->mesh_node_wall[index], -39.7 + 18.6*3, 0.0, 35.3);
- }
- else if (index == 3)
- {
- evas_canvas3d_node_scale_set(data->mesh_node_wall[index], 5* 19.5, 20.0, 2.0);
- evas_canvas3d_node_position_set(data->mesh_node_wall[index], -48.4, 0.0, -51.5 + 19.5 * 2);
- evas_canvas3d_node_orientation_angle_axis_set(data->mesh_node_wall[index], 90, 0, 1.0, 0.0);
- }
-}
-
-void
-_mesh_setup_column(Scene_Data *data, int index)
-{
- /* Setup mesh for column */
-
- data->material_column = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);
-
- evas_canvas3d_material_enable_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0.4, 0.4, 0.4, 1.0);
- evas_canvas3d_material_color_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0.6, 0.6, 0.6, 1.0);
- evas_canvas3d_material_color_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1.0, 1.0, 1.0, 1.0);
- evas_canvas3d_material_shininess_set(data->material_column, 50.0);
-
- data->mesh_column[index] = efl_add(EVAS_CANVAS3D_MESH_CLASS, evas);
-
- SETUP_MESH_NODE(column[index])
-
- evas_canvas3d_mesh_from_primitive_set(data->mesh_column[index], 0, data->cylinder_primitive);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_column[index], EVAS_CANVAS3D_SHADER_MODE_DIFFUSE);
- evas_canvas3d_mesh_vertex_assembly_set(data->mesh_column[index], EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_shader_mode_set(data->mesh_column[index], EVAS_CANVAS3D_SHADER_MODE_PHONG);
- evas_canvas3d_mesh_frame_material_set(data->mesh_column[index], 0, data->material_column);
-
- data->texture_diffuse_column = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);
-
- efl_file_simple_load(data->texture_diffuse_column, red_brick_path, NULL);
- evas_canvas3d_texture_atlas_enable_set(data->texture_diffuse_column, EINA_FALSE);
- evas_canvas3d_texture_filter_set(data->texture_diffuse_column, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST);
- evas_canvas3d_texture_wrap_set(data->texture_diffuse_column, EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT);
-
- evas_canvas3d_material_texture_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, data->texture_diffuse_column);
- evas_canvas3d_material_texture_set(data->material_column, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, data->texture_diffuse_column);
-
- NORMAL_SET(column, column[index], red_brick_n_path)
-
- evas_canvas3d_node_scale_set(data->mesh_node_column[index], 2.2, 2.2, 19.0);
- evas_canvas3d_node_position_set(data->mesh_node_column[index], 10, 0, -45 + 21.25 * index);
- evas_canvas3d_node_orientation_angle_axis_set(data->mesh_node_column[index], 90, 1.0, 0.0, 0.0);
-}
-
-void
-_mesh_setup_grass(Scene_Data *data)
-{
- /* Setup material and texture for grass. */
-
- ADD_MESH(grass, grass, 0.4, 0.8, 1.0)
- SETUP_MESH_NODE(grass)
- TEXTCOORDS_SET(grass, 6.0, 3.0, 1.0, 1.0, 1.0, 1.0)
- CUBE_TEXTURE_SET(grass, grass, grass_textcoords, gray_brick_path)
- NORMAL_SET(grass, grass, gray_brick_n_path)
-
- /* placing of grass carpet on the floor grid */
- evas_canvas3d_node_scale_set(data->mesh_node_grass, 130.0, 1.0, 96.0);
- evas_canvas3d_node_position_set(data->mesh_node_grass, 16.5, -10.0, -12);
-}
-
-void
-_mesh_setup(Scene_Data *data, float h EINA_UNUSED, float w EINA_UNUSED, float d EINA_UNUSED, float *isource, int index)
-{
- /* Setup mesh. */
-
- if (!index)
- {
- ADD_MESH(level[0], level[index], 0.4, 0.8, 1.0)
- SETUP_MESH_NODE(level[index])
- CUBE_TEXTURE_SET(level[0], level[index], isource, red_brick_path)
- NORMAL_SET(level[0], level[index], red_brick_n_path)
-
- evas_canvas3d_node_scale_set(data->mesh_node_level[index], 19.5, 20.0, 2.0);
- evas_canvas3d_node_position_set(data->mesh_node_level[index], 50, 0, -15);
- }
- else
- {
- ADD_MESH(level[1], level[index], 0.4, 0.8, 1.0)
- SETUP_MESH_NODE(level[index])
- CUBE_TEXTURE_SET(level[1], level[index], isource, gray_brick_path)
- NORMAL_SET(level[1], level[index], gray_brick_n_path)
-
- evas_canvas3d_node_scale_set(data->mesh_node_level[index], 2.0, 2.0, 8.0);
- evas_canvas3d_node_position_set(data->mesh_node_level[index], 40 + (2 * index), -10 + (2 * index), -10);
- }
-}
-
-void
-_mesh_setup_warrior(Scene_Data *data)
-{
- /* Setup mesh for warrior */
-
- ADD_MESH(warrior, warrior, 0.4, 0.6, 1.0)
- SETUP_MESH_NODE(warrior)
- MATERIAL_TEXTURE_SET(warrior, warrior, warrior_path, warrior_tex_path)
-
- evas_canvas3d_node_position_set(data->mesh_node_warrior, 57, -10, 0);
- evas_canvas3d_node_scale_set(data->mesh_node_warrior, 0.15, 0.15, 0.15);
-}
-
-void
-_mesh_setup_snake(Scene_Data *data)
-{
- ADD_MESH(snake, snake, 0.01, 1.0, 1.0)
- SETUP_MESH_NODE(snake)
- MATERIAL_TEXTURE_SET(snake, snake, snake_path, snake_tex_path)
- NORMAL_SET(snake, snake, snake_tex_n_path)
-
- evas_canvas3d_node_position_set(data->mesh_node_snake, 20, -10, 20);
- evas_canvas3d_node_scale_set(data->mesh_node_snake, 4.0, 4.0, 4.0);
-}
-
-void
-_mesh_setup_rocket(Scene_Data *data, int index)
-{
- ADD_MESH(rocket[index], rocket[index], 0.8, 0.2, 0.5);
- evas_canvas3d_mesh_from_primitive_set(data->mesh_rocket[index], 0, data->sphere_primitive);
- SETUP_DEFAULT_MESH(rocket[index], rocket[index], DIFFUSE);
- SETUP_MESH_NODE(rocket[index]);
-
- evas_canvas3d_node_scale_set(data->mesh_node_rocket[index], 1, 1, 1);
- evas_canvas3d_node_position_set(data->mesh_node_rocket[index], ROCKET_POS_X, ROCKET_POS_Y, ROCKET_POS_Z);
-}
-
-void
-_scene_setup(Scene_Data *data)
-{
- int i = 0;
-
- for (i = 0; i < 4; i++)
- motion_vec[i] = 0;
-
- data->cube_primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->cube_primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE);
- evas_canvas3d_primitive_precision_set(data->cube_primitive, 10);
-
- data->sphere_primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_form_set(data->sphere_primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE);
- evas_canvas3d_primitive_precision_set(data->sphere_primitive, 50);
-
- global_scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
-
- evas_canvas3d_scene_size_set(global_scene, WIDTH, HEIGHT);
- evas_canvas3d_scene_background_color_set(global_scene, 0.5, 0.5, 0.9, 0.0);
-
- data->root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- _camera_setup(data);
- _light_setup(data);
- _mesh_setup_gun_planet(data);
- _mesh_setup_snake(data);
-
- for (i = 0; i < 10; i++)
- _mesh_setup_rocket(data, i);
-
- data->cylinder_primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
- evas_canvas3d_primitive_mode_set(data->cylinder_primitive, EVAS_CANVAS3D_PRIMITIVE_MODE_WITHOUT_BASE);
- evas_canvas3d_primitive_form_set(data->cylinder_primitive, EVAS_CANVAS3D_MESH_PRIMITIVE_CYLINDER);
- evas_canvas3d_primitive_tex_scale_set(data->cylinder_primitive, 1.0, 1.0);
- evas_canvas3d_primitive_precision_set(data->cylinder_primitive, 50);
-
- for ( i = 0; i < 4; i++)
- _mesh_setup_column(data, i);
-
- _mesh_setup_grass(data);
-
- for ( i = 0; i < 4; i++)
- _mesh_setup_wall(data, i);
-
- TEXTCOORDS_SET(bricks1, 1.0, 0.2, 0.2, 1.0, 1.0, 1.0)
- _mesh_setup(data, 9.75, 10, 1, bricks1_textcoords, 0);
-
- TEXTCOORDS_SET(bricks2, 1.0, 1.5, 3.0, 0.5, 2.0, 0.5)
- for (i = 1; i < 10; i++)
- _mesh_setup(data, 1, 1, 4, bricks2_textcoords, i);
-
- _mesh_setup_warrior(data);
-
- _mesh_aabb(&data->mesh_cube, data, aabb_index);
-
- evas_canvas3d_scene_root_node_set(global_scene, data->root_node);
- evas_canvas3d_scene_camera_node_set(global_scene, data->camera_node);
-
- if (data->shadow)
- evas_canvas3d_scene_shadows_enable_set(global_scene, EINA_TRUE);
-
- if (data->fog)
- {
- ENABLE_FOG(data->mesh_soldier)
- ENABLE_FOG(data->mesh_warrior)
- ENABLE_FOG(data->mesh_tommy)
- ENABLE_FOG(data->mesh_gazebo)
- ENABLE_FOG(data->mesh_carpet)
- ENABLE_FOG(data->mesh_eagle)
- ENABLE_FOG(data->mesh_world)
- ENABLE_FOG(data->mesh_snake)
- ENABLE_FOG(data->mesh_column_c)
- ENABLE_FOG(data->mesh_grass)
- for (i = 0; i < 4; i++)
- {
- ENABLE_FOG(data->mesh_wall[i])
- ENABLE_FOG(data->mesh_column[i])
- }
- for (i = 0; i < 10; i++)
- {
- ENABLE_FOG(data->mesh_level[i])
- ENABLE_FOG(data->mesh_rocket[i])
- }
- }
-
- data->carp_mediator_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- evas_canvas3d_node_member_add(data->carp_mediator_node, data->mesh_node_carpet);
-
- evas_canvas3d_node_member_add(data->mediator_node, data->mesh_node_soldier);
- evas_canvas3d_node_member_add(data->mediator_node, data->mesh_node_tommy);
-
- for (i = 0; i < 10; i++)
- evas_canvas3d_node_member_add(data->mediator_node, data->mesh_node_rocket[i]);
-
- evas_canvas3d_node_member_add(data->root_node, data->carp_mediator_node);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_world);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_gazebo);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_eagle);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_cube);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_column_c);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_ball);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_grass);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_warrior);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_snake);
-
- for (i = 0; i < 4; i++)
- {
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_wall[i]);
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_column[i]);
- }
- for (i = 0; i < 10; i++)
- evas_canvas3d_node_member_add(data->root_node, data->mesh_node_level[i]);
-}
-
-int
-main(int argc, char *argv[])
-{
- Scene_Data data;
-
- Eina_Bool shadow = EINA_FALSE;
- Eina_Bool colorpick = EINA_FALSE;
- Eina_Bool fog = EINA_FALSE;
- Eina_Bool blending = EINA_FALSE;
- Ecore_Getopt_Value values[] = {
- ECORE_GETOPT_VALUE_BOOL(shadow),
- ECORE_GETOPT_VALUE_BOOL(colorpick),
- ECORE_GETOPT_VALUE_BOOL(fog),
- ECORE_GETOPT_VALUE_BOOL(blending),
- ECORE_GETOPT_VALUE_NONE
- };
-
- ecore_getopt_parse(&optdesc, values, argc, argv);
-
- data.shadow = shadow;
- data.colorpick = colorpick;
- data.fog = fog;
- data.blending = blending;
- data.normal = EINA_FALSE;
-
- if (!ecore_evas_init()) return 0;
-
- ecore_evas = ecore_evas_new("opengl_x11", 0, 0, WIDTH, HEIGHT, NULL);
-
- if (!ecore_evas) return 0;
-
- ecore_evas_callback_delete_request_set(ecore_evas, _on_delete);
- ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize);
- ecore_evas_show(ecore_evas);
-
- evas = ecore_evas_get(ecore_evas);
-
- /* Add a background rectangle objects. */
- background = evas_object_rectangle_add(evas);
- evas_object_color_set(background, 0, 0, 0, 255);
- evas_object_move(background, 0, 0);
- evas_object_resize(background, WIDTH, HEIGHT);
- evas_object_show(background);
-
- _scene_setup(&data);
-
- /* Add an image object for 3D scene rendering. */
- image = efl_add(EFL_CANVAS_SCENE3D_CLASS, evas);
- evas_object_move(image, 0, 0);
- evas_object_resize(image, WIDTH, HEIGHT);
- evas_object_show(image);
-
- /* Set the image object as render target for 3D scene. */
- efl_canvas_scene3d_set(image, global_scene);
-
- evas_object_focus_set(image, EINA_TRUE);
-
- /* Add animation timer callback. */
- Timers timers[4];
-
- timers[0].t = ecore_timer_add(0.016, _animate_scene_gun, &data);
- timers[0].data = &data;
- timers[1].t = ecore_timer_add(0.016, _animate_camera, &data);
- timers[0].data = &data;
-
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _reload_camera, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &timers);
- evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_UP, _play_scene, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _key_down, &data);
- evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_UP, _key_up, &data);
-
-
- /* Enter main loop. */
- ecore_main_loop_begin();
-
- ecore_evas_free(ecore_evas);
- ecore_evas_shutdown();
-
- return 0;
-}
diff --git a/src/examples/evas/shooter/meson.build b/src/examples/evas/shooter/meson.build
deleted file mode 100644
index abb782d540..0000000000
--- a/src/examples/evas/shooter/meson.build
+++ /dev/null
@@ -1,5 +0,0 @@
-executable('evas-3d-shooter',
- ['evas-3d-shooter-header.c', 'evas-3d-shooter.c'],
- dependencies: [ecore_evas],
- c_args : ['-DPACKAGE_EXAMPLES_DIR="'+meson.current_source_dir()+'"']
-)
diff --git a/src/generic/emotion/meson.build b/src/generic/emotion/meson.build
deleted file mode 100644
index 58cd5294aa..0000000000
--- a/src/generic/emotion/meson.build
+++ /dev/null
@@ -1,8 +0,0 @@
-generic_loaders = ['vlc']
-
-foreach loader : generic_loaders
- if get_option('emotion-generic-loaders-disabler').contains(loader) == false
- subdir(loader)
- endif
-endforeach
-
diff --git a/src/generic/emotion/vlc/emotion_generic_vlc.c b/src/generic/emotion/vlc/emotion_generic_vlc.c
deleted file mode 100644
index dcfcbe9e8c..0000000000
--- a/src/generic/emotion/vlc/emotion_generic_vlc.c
+++ /dev/null
@@ -1,789 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <poll.h>
-
-#include <signal.h>
-
-#include <vlc/vlc.h>
-
-#include <Emotion_Generic_Plugin.h>
-#include <Eina.h>
-#include <Ecore.h>
-
-static int _em_vlc_log_dom = -1;
-#define ERR(...) EINA_LOG_DOM_ERR(_em_vlc_log_dom, __VA_ARGS__)
-#define DBG(...) EINA_LOG_DOM_DBG(_em_vlc_log_dom, __VA_ARGS__)
-#define INF(...) EINA_LOG_DOM_INFO(_em_vlc_log_dom, __VA_ARGS__)
-#define WRN(...) EINA_LOG_DOM_WARN(_em_vlc_log_dom, __VA_ARGS__)
-#define CRIT(...) EINA_LOG_DOM_CRIT(_em_vlc_log_dom, __VA_ARGS__)
-
-
-typedef struct _App App;
-struct _App {
- Emotion_Generic_Video_Shared *vs;
- Emotion_Generic_Video_Frame vf;
-
- libvlc_instance_t *libvlc;
- libvlc_media_t *m;
- libvlc_media_player_t *mp;
- libvlc_event_manager_t *event_mgr;
-
- Ecore_Pipe *fd_read; // read commands from emotion here
- Ecore_Pipe *fd_write; // write commands for emotion here
- Eina_Lock cmd_mutex;// lock used to send just one command at a time
- int last_order; // current command received from emotion
-
- char *filename;
- char *subtitle_path;
- char *shmname;
- unsigned w, h;
- int volume;
- Eina_Bool audio_muted;
-
- Eina_Bool opening;
- Eina_Bool closing;
- Eina_Bool playing;
- Eina_Bool inited;
-};
-
-static void _player_setup(App *app);
-
-
-/* Utilities to send commands back to emotion */
-#define SEND_CMD_PARAM(app, i) \
- if ((app)->fd_write) \
- if (!ecore_pipe_write((app)->fd_write, &(i), sizeof((i)))) \
- ecore_main_loop_quit();
-
-static void
-_send_cmd(App *app, int cmd)
-{
- if (!app->fd_write)
- return;
-
- eina_lock_take(&app->cmd_mutex); /* LOCK HERE */
-
- if (!ecore_pipe_write(app->fd_write, &cmd, sizeof(cmd)))
- ecore_main_loop_quit();
-}
-
-static void
-_send_cmd_str(App *app, const char *str)
-{
- int len;
-
- len = str ? strlen(str) + 1 : 0;
- if (app->fd_write)
- if (!ecore_pipe_write(app->fd_write, &len, sizeof(len)))
- ecore_main_loop_quit();
- if (app->fd_write)
- if (!ecore_pipe_write(app->fd_write, str, len))
- ecore_main_loop_quit();
-}
-
-static void
-_send_cmd_finish(App *app)
-{
- eina_lock_release(&app->cmd_mutex); /* UNLOCK HERE */
-}
-
-/* Commands sent to the emotion pipe */
-static void
-_send_file_closed(App *app)
-{
- _send_cmd(app, EM_RESULT_FILE_CLOSE);
- _send_cmd_finish(app);
-}
-
-static void
-_send_time_changed(App *app)
-{
- float new_time;
-
- if (app->vs->frame_drop > 1)
- return;
-
- new_time = libvlc_media_player_get_time(app->mp);
- new_time /= 1000;
- _send_cmd(app, EM_RESULT_POSITION_CHANGED);
- SEND_CMD_PARAM(app, new_time);
- _send_cmd_finish(app);
-}
-
-static void
-_send_resize(App *app, int width, int height)
-{
- _send_cmd(app, EM_RESULT_FRAME_SIZE);
- SEND_CMD_PARAM(app, width);
- SEND_CMD_PARAM(app, height);
- _send_cmd_finish(app);
-}
-
-static void
-_send_track_info(App *app, int cmd, int current, int count, libvlc_track_description_t *desc)
-{
- _send_cmd(app, cmd);
- SEND_CMD_PARAM(app, current);
- SEND_CMD_PARAM(app, count);
- while (desc)
- {
- int tid = desc->i_id;
- const char *name = desc->psz_name;
- SEND_CMD_PARAM(app, tid);
- _send_cmd_str(app, name);
- desc = desc->p_next;
- }
- _send_cmd_finish(app);
-}
-
-static void
-_send_all_track_info(App *app)
-{
- int track_count, current;
- libvlc_track_description_t *desc;
-
- current = libvlc_audio_get_track(app->mp);
- track_count = libvlc_audio_get_track_count(app->mp);
- desc = libvlc_audio_get_track_description(app->mp);
-
- _send_track_info(app, EM_RESULT_AUDIO_TRACK_INFO,
- current, track_count, desc);
-
- current = libvlc_video_get_track(app->mp);
- track_count = libvlc_video_get_track_count(app->mp);
- desc = libvlc_video_get_track_description(app->mp);
-
- _send_track_info(app, EM_RESULT_VIDEO_TRACK_INFO,
- current, track_count, desc);
-
- current = libvlc_video_get_spu(app->mp);
- track_count = libvlc_video_get_spu_count(app->mp);
- desc = libvlc_video_get_spu_description(app->mp);
-
- _send_track_info(app, EM_RESULT_SPU_TRACK_INFO,
- current, track_count, desc);
-}
-
-static void
-_send_all_meta_info(App *app)
-{
- const char *meta;
-
- _send_cmd(app, EM_RESULT_META_INFO);
-
- /*
- * Will send in this order: title, artist, album, year,
- * genre, comments, disc id and track count.
- */
- meta = libvlc_media_get_meta(app->m, libvlc_meta_Title);
- _send_cmd_str(app, meta);
- meta = libvlc_media_get_meta(app->m, libvlc_meta_Artist);
- _send_cmd_str(app, meta);
- meta = libvlc_media_get_meta(app->m, libvlc_meta_Album);
- _send_cmd_str(app, meta);
- meta = libvlc_media_get_meta(app->m, libvlc_meta_Date);
- _send_cmd_str(app, meta);
- meta = libvlc_media_get_meta(app->m, libvlc_meta_Genre);
- _send_cmd_str(app, meta);
- meta = NULL; // sending empty comments
- _send_cmd_str(app, meta);
- meta = NULL; // sending empty disc id
- _send_cmd_str(app, meta);
- meta = libvlc_media_get_meta(app->m, libvlc_meta_TrackNumber);
- _send_cmd_str(app, meta);
-
- _send_cmd_finish(app);
-}
-
-static void
-_send_length_changed(App *app)
-{
- float length = libvlc_media_player_get_length(app->mp);
-
- length /= 1000;
- _send_cmd(app, EM_RESULT_LENGTH_CHANGED);
- SEND_CMD_PARAM(app, length);
- _send_cmd_finish(app);
-}
-
-static void
-_send_seekable_changed(App *app, const struct libvlc_event_t *ev)
-{
- int seekable = ev->u.media_player_seekable_changed.new_seekable;
-
- _send_cmd(app, EM_RESULT_SEEKABLE_CHANGED);
- SEND_CMD_PARAM(app, seekable);
- _send_cmd_finish(app);
-}
-
-static void
-_send_playback_started(App *app)
-{
- _send_cmd(app, EM_RESULT_PLAYBACK_STARTED);
- _send_cmd_finish(app);
-}
-
-static void
-_send_playback_stopped(App *app)
-{
- _send_cmd(app, EM_RESULT_PLAYBACK_STOPPED);
- _send_cmd_finish(app);
-}
-
-static void
-_send_init(App *app)
-{
- _send_cmd(app, EM_RESULT_INIT);
- _send_cmd_finish(app);
-}
-
-static void
-_send_file_set(App *app)
-{
- _send_cmd(app, EM_RESULT_FILE_SET);
- _send_cmd_finish(app);
-}
-
-static void
-_send_file_set_done(App *app, int success)
-{
- _send_cmd(app, EM_RESULT_FILE_SET_DONE);
- SEND_CMD_PARAM(app, success);
- _send_cmd_finish(app);
-}
-
-
-/* VLC events and callbacks */
-static void
-_event_cb(const struct libvlc_event_t *ev, void *data)
-{
- App *app = data;
-
- ecore_thread_main_loop_begin();
- switch (ev->type)
- {
- case libvlc_MediaPlayerTimeChanged:
- // DBG("libvlc_MediaPlayerTimeChanged");
- _send_time_changed(app);
- break;
- case libvlc_MediaPlayerLengthChanged:
- DBG("libvlc_MediaPlayerLengthChanged");
- _send_length_changed(app);
- break;
- case libvlc_MediaPlayerSeekableChanged:
- DBG("libvlc_MediaPlayerSeekableChanged");
- _send_seekable_changed(app, ev);
- break;
- case libvlc_MediaPlayerPlaying:
- DBG("libvlc_MediaPlayerPlaying");
- libvlc_audio_set_volume(app->mp, app->volume);
- libvlc_audio_set_mute(app->mp, app->audio_muted);
- _send_playback_started(app);
- break;
- case libvlc_MediaPlayerStopped:
- DBG("libvlc_MediaPlayerStopped");
- _send_playback_stopped(app);
- if (app->closing)
- {
- free(app->filename);
- app->filename = NULL;
- free(app->subtitle_path);
- app->subtitle_path = NULL;
- libvlc_media_release(app->m);
- app->m = NULL;
- libvlc_media_player_release(app->mp);
- app->mp = NULL;
- emotion_generic_shm_free(app->vs);
- app->playing = EINA_FALSE;
- app->closing = EINA_FALSE;
- _send_file_closed(app);
- }
- break;
- case libvlc_MediaPlayerEndReached:
- DBG("libvlc_MediaPlayerEndReached");
- app->playing = EINA_FALSE;
- /* vlc had released the media_playere here, we create a new one */
- app->mp = libvlc_media_player_new_from_media(app->m);
- _player_setup(app);
- _send_playback_stopped(app);
- break;
- }
- ecore_thread_main_loop_end();
-}
-
-static void
-_tmp_playing_event_cb(const struct libvlc_event_t *ev, void *data)
-{
- App *app = data;
-
- if (ev->type != libvlc_MediaPlayerPlaying)
- return;
-
- /* pause and stop listening the temporary event */
- libvlc_event_detach(app->event_mgr,libvlc_MediaPlayerPlaying,
- _tmp_playing_event_cb, app);
- libvlc_media_player_set_pause(app->mp, 1);
-
- /* sending size info */
- libvlc_video_get_size(app->mp, 0, &app->w, &app->h);
- _send_resize(app, app->w, app->h);
-
- /* sending total lenght */
- _send_length_changed(app);
-
- /* sending audio track info */
- _send_all_track_info(app);
-
- /* sending meta info */
- _send_all_meta_info(app);
-
- /* ok, we are done! Now let emotion create the shmem for us */
- _send_file_set(app);
-}
-
-static void *
-_lock(void *data, void **pixels)
-{
- App *app = data;
-
- if (app->playing)
- *pixels = app->vf.frames[app->vs->frame.player];
- else
- *pixels = NULL;
-
- return NULL; // picture identifier, not needed here
-}
-
-static void
-_unlock(void *data EINA_UNUSED, void *id EINA_UNUSED, void *const *pixels EINA_UNUSED)
-{
-}
-
-static void
-_display(void *data, void *id EINA_UNUSED)
-{
- App *app = data;
-
- if (!app->playing)
- return;
-
- eina_semaphore_lock(&app->vs->lock);
- app->vs->frame.last = app->vs->frame.player;
- app->vs->frame.player = app->vs->frame.next;
- app->vs->frame.next = app->vs->frame.last;
- if (!app->vs->frame_drop++)
- {
- _send_cmd(app, EM_RESULT_FRAME_NEW);
- _send_cmd_finish(app);
- }
- eina_semaphore_release(&app->vs->lock, 1);
-}
-
-static void
-_player_setup(App *app)
-{
-
- libvlc_video_set_format(app->mp, "RV32", app->w, app->h, app->w * 4);
- libvlc_video_set_callbacks(app->mp, _lock, _unlock, _display, app);
-
- app->event_mgr = libvlc_media_player_event_manager(app->mp);
- libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerPlaying,
- _event_cb, app);
- libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerTimeChanged,
- _event_cb, app);
- libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerLengthChanged,
- _event_cb, app);
- libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerSeekableChanged,
- _event_cb, app);
- libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerEndReached,
- _event_cb, app);
- libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerStopped,
- _event_cb, app);
-}
-
-/* Commands received from the emotion pipe */
-static void
-_file_set(App *app)
-{
- DBG("Path: %s", app->filename);
- app->m = libvlc_media_new_path(app->libvlc, app->filename);
- if (!app->m)
- {
- ERR("could not open path: \"%s\"", app->filename);
- return;
- }
-
- app->mp = libvlc_media_player_new_from_media(app->m);
- if (!app->mp)
- {
- ERR("could not create new player from media.");
- return;
- }
-
- app->opening = EINA_TRUE;
-
- /* Here we start playing and connect a temporary callback to know when
- * the file is parsed and ready to be played for real.
- */
- app->event_mgr = libvlc_media_player_event_manager(app->mp);
- libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerPlaying,
- _tmp_playing_event_cb, app);
-
- libvlc_media_player_play(app->mp);
-}
-
-static void
-_file_set_done(App *app)
-{
- int r;
-
- DBG("Path: %s", app->filename);
- app->opening = EINA_FALSE;
-
- r = emotion_generic_shm_get(app->shmname, &app->vs, &app->vf);
- if (!r)
- {
- free(app->filename);
- libvlc_media_release(app->m);
- libvlc_media_player_release(app->mp);
- app->filename = NULL;
- app->m = NULL;
- app->mp = NULL;
- }
- else
- {
- _player_setup(app);
- }
-
- _send_file_set_done(app, r);
-}
-
-static void
-_file_close(App *app)
-{
- DBG("closing file");
-
- if (!app->mp)
- return;
-
- app->closing = EINA_TRUE;
- libvlc_media_player_stop(app->mp);
-}
-
-static void
-_stop(App *app)
-{
- DBG("Stop");
- if (app->mp)
- libvlc_media_player_set_pause(app->mp, 1);
-}
-
-static void
-_play(App *app, float pos)
-{
- DBG("Play at %.3f", pos);
-
- if (!app->mp)
- return;
-
- if (app->playing)
- {
- libvlc_media_player_set_pause(app->mp, 0);
- }
- else
- {
- libvlc_time_t new_time = pos * 1000;
- libvlc_media_player_set_time(app->mp, new_time);
- libvlc_media_player_play(app->mp);
-
- if (app->subtitle_path)
- libvlc_video_set_subtitle_file(app->mp, app->subtitle_path);
-
- app->playing = EINA_TRUE;
- }
-}
-
-static void
-_position_set(App *app, float position)
-{
- libvlc_time_t new_time;
-
- DBG("Position set %.3f", position);
- if (!app->mp)
- return;
-
- new_time = position * 1000;
- libvlc_media_player_set_time(app->mp, new_time);
-
- if (libvlc_media_player_get_state(app->mp) == libvlc_Paused)
- _send_time_changed(app);
-}
-
-static void
-_speed_set(App *app, float rate)
-{
- DBG("Speed set %.3f", rate);
- if (!app->mp)
- return;
-
- libvlc_media_player_set_rate(app->mp, rate);
-}
-
-static void
-_mute_set(App *app, int mute)
-{
- DBG("Mute %d", mute);
- if (!app->mp)
- return;
-
- app->audio_muted = mute;
- libvlc_audio_set_mute(app->mp, mute);
-}
-
-static void
-_volume_set(App *app, float volume)
-{
- DBG("Volume set %.2f", volume);
- if (!app->mp)
- return;
-
- app->volume = volume * 100;
- libvlc_audio_set_volume(app->mp, app->volume);
-}
-
-static void
-_spu_track_set(App *app, int track)
-{
- DBG("SPU track %d", track);
- libvlc_video_set_spu(app->mp, track);
-}
-
-static void
-_audio_track_set(App *app, int track)
-{
- DBG("Audio track %d", track);
- libvlc_audio_set_track(app->mp, track);
-}
-
-static void
-_video_track_set(App *app, int track)
-{
- DBG("Video Track %d", track);
- libvlc_video_set_track(app->mp, track);
-}
-
-static void
-_remote_command(void *data, void *buffer, unsigned int nbyte)
-{
- App *app = data;
-
- if (nbyte == 0)
- {
- ecore_main_loop_quit();
- return ;
- }
-
- if (app->last_order == EM_CMD_LAST)
- {
- if (nbyte != sizeof (int))
- {
- ERR("didn't receive a valid command from emotion (%i) !", nbyte);
- ecore_main_loop_quit();
- return ;
- }
-
- app->last_order = *((int*) buffer);
-
- if (!app->inited &&
- app->last_order != EM_CMD_INIT)
- {
- ERR("wrong init command!");
- ecore_main_loop_quit();
- return ;
- }
-
- switch (app->last_order)
- {
- case EM_CMD_FILE_SET:
- if (app->opening)
- {
- libvlc_media_release(app->m);
- libvlc_media_player_release(app->mp);
- free(app->filename);
- app->opening = EINA_FALSE;
- }
- break;
- case EM_CMD_FILE_SET_DONE:
- _file_set_done(app);
- app->last_order = EM_CMD_LAST;
- break;
- case EM_CMD_FILE_CLOSE:
- _file_close(app);
- app->last_order = EM_CMD_LAST;
- break;
- case EM_CMD_STOP:
- _stop(app);
- app->last_order = EM_CMD_LAST;
- break;
- }
- }
- else
- {
- switch (app->last_order)
- {
- case EM_CMD_INIT:
- app->shmname = strdup(buffer);
- app->inited = EINA_TRUE;
- _send_init(app);
- break;
- case EM_CMD_FILE_SET:
- app->filename = strdup(buffer);
- _file_set(app);
- break;
- case EM_CMD_SUBTITLE_SET:
- app->subtitle_path = strdup(buffer);
- break;
- case EM_CMD_PLAY:
- _play(app, *(float*) buffer);
- break;
- case EM_CMD_POSITION_SET:
- _position_set(app, *(float*) buffer);
- break;
- case EM_CMD_SPEED_SET:
- _speed_set(app, *(float*) buffer);
- break;
- case EM_CMD_AUDIO_MUTE_SET:
- _mute_set(app, *(int*) buffer);
- break;
- case EM_CMD_VOLUME_SET:
- _volume_set(app, *(float*) buffer);
- break;
- case EM_CMD_SPU_TRACK_SET:
- _spu_track_set(app, *(int*) buffer);
- break;
- case EM_CMD_AUDIO_TRACK_SET:
- _audio_track_set(app, *(int*) buffer);
- break;
- case EM_CMD_VIDEO_TRACK_SET:
- _video_track_set(app, *(int*) buffer);
- break;
- }
- app->last_order = EM_CMD_LAST;
- }
-}
-
-static void
-_dummy(void *data EINA_UNUSED, void *buffer EINA_UNUSED, unsigned int nbyte EINA_UNUSED)
-{
- /* This function is useless for the pipe we use to send message back
- to emotion, but still needed */
-}
-
-/* Main */
-static Eina_Bool
-exit_func(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev EINA_UNUSED)
-{
- DBG("Quit signal received !");
- ecore_main_loop_quit();
- return EINA_TRUE;
-}
-
-int
-main(int argc, const char *argv[])
-{
- App app;
- Ecore_Event_Handler *hld;
- int vlc_argc;
-
- const char *vlc_argv[] =
- {
- "--quiet",
- "--intf", "dummy", /* no interface */
- "--vout", "dummy", /* we don't want video (output) */
- "--no-video-title-show", /* nor the filename displayed */
- "--no-sub-autodetect-file", /* we don't want automatic subtitles */
- "--no-stats", /* no stats */
- "--no-inhibit", /* we don't want interfaces */
- "--no-disable-screensaver", /* we don't want interfaces */
-// XXX: causes newer vlcs to segv!
-// "--codec", "avcodec",
-// XXX: disable this just in case
-// "--demux", "avformat"
- };
- vlc_argc = sizeof(vlc_argv) / sizeof(*vlc_argv);
-
- memset(&app, 0, sizeof(app));
- if (!eina_init())
- {
- EINA_LOG_CRIT("Can't initialize generic vlc player, eina failed.");
- return -1;
- }
-
- _em_vlc_log_dom = eina_log_domain_register("emotion_generic_vlc",
- EINA_COLOR_CYAN);
- if (_em_vlc_log_dom < 0)
- {
- EINA_LOG_CRIT("Unable to register emotion_generic_vlc log domain.");
- goto error;
- }
-
- if (!eina_log_domain_level_check(_em_vlc_log_dom, EINA_LOG_LEVEL_WARN))
- eina_log_domain_level_set("emotion_generic_vlc", EINA_LOG_LEVEL_WARN);
-
- if (argc < 3)
- {
- ERR("missing parameters.");
- ERR("syntax:\n\t%s <fd read> <fd write>", argv[0]);
- goto error;
- }
-
- ecore_init();
-
- eina_lock_new(&app.cmd_mutex);
-
- app.fd_read = ecore_pipe_full_add(_remote_command, &app,
- atoi(argv[1]), -1, EINA_FALSE, EINA_FALSE);
- app.fd_write = ecore_pipe_full_add(_dummy, NULL,
- -1, atoi(argv[2]), EINA_FALSE, EINA_FALSE);
-
- hld = ecore_event_handler_add(ECORE_EVENT_SIGNAL_HUP, exit_func, NULL);
-
- app.libvlc = libvlc_new(vlc_argc, vlc_argv);
- app.mp = NULL;
- app.filename = NULL;
- app.subtitle_path = NULL;
- app.w = 0;
- app.h = 0;
- app.opening = EINA_FALSE;
- app.playing = EINA_FALSE;
- app.inited = EINA_FALSE;
- app.last_order = EM_CMD_LAST;
-
- ecore_main_loop_begin();
-
- libvlc_release(app.libvlc);
- ecore_pipe_del(app.fd_read);
- ecore_pipe_del(app.fd_write);
- ecore_event_handler_del(hld);
- eina_lock_free(&app.cmd_mutex);
-
- ecore_shutdown();
- eina_shutdown();
- return 0;
-
- error:
- eina_shutdown();
- return -1;
-}
-#undef SEND_CMD_PARAM
diff --git a/src/generic/emotion/vlc/meson.build b/src/generic/emotion/vlc/meson.build
deleted file mode 100644
index b21f4a16df..0000000000
--- a/src/generic/emotion/vlc/meson.build
+++ /dev/null
@@ -1,8 +0,0 @@
-vlc = dependency('libvlc')
-
-executable('vlc',
- 'emotion_generic_vlc.c',
- dependencies: [emotion_generic, eina, ecore, rt, vlc],
- install: true,
- install_dir: join_paths(dir_lib, 'emotion', 'generic_players', version_name)
-)
diff --git a/src/generic/evas/common/shmfile.h b/src/generic/evas/common/shmfile.h
index f70a8fd157..a58dd4bf2b 100644
--- a/src/generic/evas/common/shmfile.h
+++ b/src/generic/evas/common/shmfile.h
@@ -4,7 +4,7 @@
#ifdef __cplusplus
extern "C" {
#endif
-
+
extern int shm_fd;
extern int shm_size;
extern void *shm_addr;
diff --git a/src/generic/evas/common/timeout.c b/src/generic/evas/common/timeout.c
index 844884c8e0..1b05a7db56 100644
--- a/src/generic/evas/common/timeout.c
+++ b/src/generic/evas/common/timeout.c
@@ -1,3 +1,6 @@
+#include <stdio.h>
+static void (*timeout_func) (void) = NULL;
+
#ifdef _WIN32
# include <stdio.h>
# include <windows.h>
@@ -8,6 +11,7 @@ _timeout(void *arg)
{
int s = (int)(uintptr_t)arg;
Sleep(s * 1000);
+ if (timeout_func) timeout_func();
_Exit(-1);
_endthreadex(0);
return 0;
@@ -26,6 +30,7 @@ timeout_init(int seconds)
static void
_timeout(int val)
{
+ if (timeout_func) timeout_func();
_exit(-1);
if (val) return;
}
@@ -37,3 +42,9 @@ timeout_init(int seconds)
alarm(seconds);
}
#endif
+
+void
+timeout_func_set(void (*func) (void))
+{
+ timeout_func = func;
+}
diff --git a/src/generic/evas/common/timeout.h b/src/generic/evas/common/timeout.h
index 8725627e06..5cd4c8b54d 100644
--- a/src/generic/evas/common/timeout.h
+++ b/src/generic/evas/common/timeout.h
@@ -4,9 +4,10 @@
#ifdef __cplusplus
extern "C" {
#endif
-
+
void timeout_init(int seconds);
-
+void timeout_func_set(void (*func) (void));
+
#ifdef __cplusplus
}
#endif
diff --git a/src/generic/evas/gst/main.c b/src/generic/evas/gst/main.c
index 3f93507078..4ac37c4dda 100644
--- a/src/generic/evas/gst/main.c
+++ b/src/generic/evas/gst/main.c
@@ -70,7 +70,7 @@ _gst_init(const char *filename)
D("Setting file %s\n", uri);
- descr = g_strdup_printf("uridecodebin uri=%s ! typefind ! videoconvert ! "
+ descr = g_strdup_printf("uridecodebin uri=%s ! typefind ! videoconvert ! "
" appsink name=sink caps=\"" CAPS "\"", uri);
pipeline = gst_parse_launch(descr, &error);
free(uri);
diff --git a/src/generic/evas/meson.build b/src/generic/evas/meson.build
index 2e5b58ae4c..e651b8b16a 100644
--- a/src/generic/evas/meson.build
+++ b/src/generic/evas/meson.build
@@ -1,8 +1,8 @@
-generic_loaders = ['gst', 'pdf',
-'ps',
-'raw',
-'rsvg',
-'xcf']
+generic_loaders = [ 'pdf', 'ps', 'raw', 'rsvg', 'xcf' ]
+
+if get_option('gstreamer') == true
+ generic_loaders += [ 'gst' ]
+endif
generic_src = []
generic_deps = []
diff --git a/src/generic/evas/pdf/main.cpp b/src/generic/evas/pdf/main.cpp
index c7c3ee13bd..5c70bfef21 100644
--- a/src/generic/evas/pdf/main.cpp
+++ b/src/generic/evas/pdf/main.cpp
@@ -18,6 +18,11 @@
#include "shmfile.h"
#include "timeout.h"
+#ifndef _WIN32
+# include <unistd.h>
+# include <signal.h>
+#endif
+
#define DATA32 unsigned int
typedef char RGB24[3];
@@ -192,11 +197,43 @@ void poppler_load_image(int size_w EINA_UNUSED, int size_h EINA_UNUSED)
delete renderer;
}
+static Eina_Tmpstr *tmpdir = NULL;
+static Eina_Tmpstr *generated = NULL;
+
+static void
+tmp_cleanup(void)
+{
+ if (tmpdir)
+ {
+ if (generated)
+ {
+ unlink(generated);
+ }
+ if (rmdir(tmpdir) < 0)
+ {
+ D("Failed to delete tmpdir %s\n", tmpdir);
+ }
+ eina_tmpstr_del(tmpdir);
+ tmpdir = NULL;
+ if (generated)
+ {
+ eina_tmpstr_del(generated);
+ generated = NULL;
+ }
+ }
+}
+
+static void
+_crash(int val)
+{
+ D("Crash\n");
+ tmp_cleanup();
+ _exit(-1 | val);
+}
+
int
main(int argc, char **argv)
{
- Eina_Tmpstr *tmpdir = NULL;
- Eina_Tmpstr *generated = NULL;
char *extension;
char *dir;
char *file;
@@ -204,6 +241,7 @@ main(int argc, char **argv)
int size_w = 0, size_h = 0;
int head_only = 0;
int page_num = 0;
+ int ret = 0;
if (argc < 2) return -1;
// file is ALWAYS first arg, other options come after
@@ -247,6 +285,18 @@ main(int argc, char **argv)
dir = dirname(argv[0]);
if (extension && dir && strcmp(extension, ".pdf"))
{
+#ifndef _WIN32
+ signal(SIGSEGV, _crash);
+ signal(SIGBUS, _crash);
+ signal(SIGFPE, _crash);
+ signal(SIGABRT, _crash);
+ signal(SIGILL, _crash);
+ signal(SIGSYS, _crash);
+ signal(SIGINT, _crash);
+ signal(SIGTERM, _crash);
+ signal(SIGQUIT, _crash);
+#endif
+ timeout_func_set(tmp_cleanup);
if (eina_file_mkdtemp("evas_generic_pdf_loaderXXXXXX", &tmpdir))
{
Eina_Strbuf *tmp;
@@ -270,6 +320,7 @@ main(int argc, char **argv)
pclose(cmd);
filename = basename(file);
+
generated = eina_tmpstr_add_length(filename, strlen(filename) - strlen(extension));
eina_strbuf_append_printf(tmp, "%s/%s.pdf", tmpdir, generated);
@@ -291,12 +342,15 @@ main(int argc, char **argv)
}
// Let's force a timeout if things go wrong
- timeout_init(10);
+ timeout_init(30);
// Now process the pdf (or the generated pdf)
D("poppler_file_init\n");
if (!poppler_init(file, page_num, size_w, size_h))
- return -1;
+ {
+ goto cleanup;
+ ret = 1;
+ }
D("poppler_file_init done\n");
D("dpi2...: %f\n", dpi);
@@ -338,18 +392,9 @@ main(int argc, char **argv)
printf("done\n");
poppler_shutdown();
-
- if (tmpdir)
- {
- if (generated) unlink(generated);
- if (rmdir(tmpdir) < 0)
- {
- D("Failed to delete tmpdir %s\n", tmpdir);
- }
-
- eina_tmpstr_del(tmpdir);
- eina_tmpstr_del(generated);
- }
+cleanup:
+ timeout_func_set(NULL);
+ tmp_cleanup();
fflush(stdout);
- return 0;
+ return ret;
}
diff --git a/src/generic/evas/ps/main.c b/src/generic/evas/ps/main.c
index 586c7e8f0b..2afa62adff 100644
--- a/src/generic/evas/ps/main.c
+++ b/src/generic/evas/ps/main.c
@@ -151,7 +151,7 @@ _pixcopy(DATA32 *dst, unsigned char *src, int size)
e = s + size;
while (s < e)
{
- d[0] =
+ d[0] =
0xff000000 |
(s[2] << 16) |
(s[1] << 8 ) |
@@ -250,7 +250,7 @@ main(int argc, char **argv)
D("page...: %d\n", page_nbr);
timeout_init(10);
-
+
if (!_spectre_init(file, page_nbr, size_w, size_h))
return -1;
D("_spectre_init done\n");
diff --git a/src/generic/evas/rsvg/main.c b/src/generic/evas/rsvg/main.c
index 70d50e204f..1eaf2a32c7 100644
--- a/src/generic/evas/rsvg/main.c
+++ b/src/generic/evas/rsvg/main.c
@@ -199,7 +199,7 @@ int main(int argc, char **argv)
}
timeout_init(5);
-
+
if (!_svg_init(file)) return -1;
if (!read_svg_header(scale_down, dpi, size_w, size_h)) return -1;
diff --git a/src/generic/evas/xcf/main.c b/src/generic/evas/xcf/main.c
index 767c6bf4b1..d9e162dac6 100644
--- a/src/generic/evas/xcf/main.c
+++ b/src/generic/evas/xcf/main.c
@@ -275,7 +275,7 @@ static File *
f_open(const char *file)
{
File *f;
-
+
f = calloc(1, sizeof(File));
if (!f) return NULL;
f->fd = open(file, O_RDONLY);
@@ -304,13 +304,13 @@ f_close(File *f)
free(f);
}
-#ifdef FBUF
+#ifdef FBUF
static void
_f_read_pos(File *f, long pos, long bytes)
{
long i, cnum;
Chunk **cks;
-
+
if (f->size > 0) return;
cnum = ((pos + bytes) / CHUNK_SIZE) + 1;
if (f->chunk_num >= cnum) return;
@@ -343,19 +343,19 @@ _f_read_pos(File *f, long pos, long bytes)
static long
f_read(File *f, unsigned char *dest, long bytes)
{
-#ifdef FBUF
+#ifdef FBUF
long done = 0, off = 0;
int c;
unsigned char *p;
_f_read_pos(f, f->pos, bytes);
-
+
c = f->pos / CHUNK_SIZE;
off = f->pos - (c * CHUNK_SIZE);
p = dest;
while ((done < bytes) && (c < f->chunk_num))
{
long amount = bytes - done;
-
+
if (!f->chunk[c]) break;
if (amount > (f->chunk[c]->size - off))
amount = (f->chunk[c]->size - off);
@@ -372,7 +372,7 @@ f_read(File *f, unsigned char *dest, long bytes)
long done = gzread(f->fp, dest, bytes);
f->pos += done;
return done;
-#endif
+#endif
}
static void
@@ -383,14 +383,14 @@ f_seek(File *f, long pos)
{
if (pos >= f->size) pos = f->size -1;
}
-#endif
+#endif
if (f->pos == pos) return;
f->pos = pos;
#ifdef FBUF
_f_read_pos(f, f->pos, 1);
#else
gzseek(f->fp, f->pos, SEEK_SET);
-#endif
+#endif
}
@@ -1696,12 +1696,12 @@ main(int argc, char **argv)
// int size_h = atoi(argv[i]);
}
}
-
+
timeout_init(8);
-
+
D("xcf_file_init\n");
if (!xcf_file_init(file)) return -1;
-
+
D("size %i %i\n", image->width, image->height);
if (!head_only)
{
diff --git a/src/lib/ecore/Ecore.h b/src/lib/ecore/Ecore.h
index 7818faf907..e87ccc6093 100644
--- a/src/lib/ecore/Ecore.h
+++ b/src/lib/ecore/Ecore.h
@@ -6,7 +6,7 @@
/**
* @page ecore_main Ecore
* @date 2000 (created)
- * @section toc Table of Contents
+ * @section ecore_toc Table of Contents
* @li @ref ecore_main_intro
* @li @ref ecore_main_compiling
* @li @ref ecore_main_next_steps
@@ -45,15 +45,16 @@
* this is very simple. You simply have to compile your application
* with the appropriate compiler flags that the @p pkg-config script
* outputs. Note that each module is separate in pkg-config. For
- * example using @ref Ecore_Evas_Group:
+ * example using @c Ecore_Evas:
+ *
* Compiling C or C++ files into object files:
- * @verbatim
+ * @code
* gcc -c -o main.o main.c `pkg-config --cflags ecore ecore-evas`
- * @endverbatim
+ * @endcode
* Linking object files into a binary executable:
- * @verbatim
+ * @code
* gcc -o my_application main.o `pkg-config --libs ecore ecore-evas`
- * @endverbatim
+ * @endcode
* See @ref pkgconfig
*
* @section ecore_main_next_steps Next Steps
@@ -330,6 +331,8 @@ extern "C" {
#endif
#include "Ecore_Eo.h"
+EAPI double _ecore_main_loop_wakeup_time_get(void);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/lib/ecore/Ecore_Common.h b/src/lib/ecore/Ecore_Common.h
index 443a05880c..899debc267 100644
--- a/src/lib/ecore/Ecore_Common.h
+++ b/src/lib/ecore/Ecore_Common.h
@@ -4,8 +4,8 @@
#include <Efl_Config.h>
/**
- * @ingroup Ecore
* @defgroup Ecore_Init_Group Ecore initialization, shutdown functions and reset on fork.
+ * @ingroup Ecore
* @{
*/
@@ -2660,8 +2660,8 @@ EAPI double ecore_throttle_get(void);
*/
/**
- * @ingroup Ecore_Main_Loop_Group
* @defgroup Ecore_Poller_Group Ecore Poll functions
+ * @ingroup Ecore_Main_Loop_Group
*
* Ecore poller provides infrastructure for the creation of pollers. Pollers
* are, in essence, callbacks that share a single timer per type. Because not
@@ -2732,16 +2732,12 @@ EAPI double ecore_throttle_get(void);
* @{
*/
-/**
- * @enum _Ecore_Animator_Source
- * Defines the timing sources for animators.
- */
-enum _Ecore_Animator_Source /* Timing sources for animators */
+/** Defines the timing sources for animators. */
+typedef enum
{
ECORE_ANIMATOR_SOURCE_TIMER, /**< The default system clock/timer based animator that ticks every "frametime" seconds */
ECORE_ANIMATOR_SOURCE_CUSTOM /**< A custom animator trigger that you need to call ecore_animator_custom_tick() to make it tick */
-};
-typedef enum _Ecore_Animator_Source Ecore_Animator_Source;
+} Ecore_Animator_Source;
/**
* @typedef Ecore_Timeline_Cb Ecore_Timeline_Cb
@@ -2798,7 +2794,7 @@ typedef enum
* @warning Too small a value may cause performance issues and too high a
* value may cause your animation to seem "jerky".
*
- * @note The default @p frametime value is 1/30th of a second.
+ * @note The default @p frametime value is 1/60th of a second.
*/
EAPI void ecore_animator_frametime_set(double frametime);
@@ -2950,7 +2946,7 @@ EAPI double ecore_animator_pos_map_n(double pos, Ecore_Pos_Map map, int v_size,
* on the animator source. The default source is the system clock timer
* source - ECORE_ANIMATOR_SOURCE_TIMER. This source uses the system clock
* to tick over every N seconds (specified by ecore_animator_frametime_set(),
- * with the default being 1/30th of a second unless set otherwise). You can
+ * with the default being 1/60th of a second unless set otherwise). You can
* set a custom tick source by setting the source to
* ECORE_ANIMATOR_SOURCE_CUSTOM and then drive it yourself based on some input
* tick source (like another application via ipc, some vertical blanking
diff --git a/src/lib/ecore/Ecore_Eo.h b/src/lib/ecore/Ecore_Eo.h
index 02b44f3482..90a0cc38e5 100644
--- a/src/lib/ecore/Ecore_Eo.h
+++ b/src/lib/ecore/Ecore_Eo.h
@@ -5,7 +5,7 @@
#include <Eo.h>
/**
- * @ingroup Ecore_Timer_Group
+ * @addtogroup Ecore_Timer_Group
*
* @{
*/
@@ -21,7 +21,7 @@
#include "efl_loop_message_future_handler.eo.h"
/**
- * @ingroup Ecore_MainLoop_Group
+ * @addtogroup Ecore_Main_Loop_Group
*
* @{
*/
@@ -68,7 +68,7 @@ EAPI int efl_loop_exit_code_process(Eina_Value *value);
/**
* @brief Get the future scheduler for the current loop.
*
- * @param[in] An object which is either a loop or a loop consumer
+ * @param[in] obj An object which is either a loop or a loop consumer
* @return The current loop's future scheduler.
*/
EAPI Eina_Future_Scheduler *efl_loop_future_scheduler_get(const Eo *obj);
@@ -93,7 +93,8 @@ EAPI Eo *efl_main_loop_get(void);
*/
/**
- * @ingroup Ecore_Fd_Io_Group
+ * @ingroup Ecore
+ * @addtogroup Ecore_Fd_Io_Group
*
* @{
*/
@@ -115,7 +116,8 @@ EAPI Eo *efl_main_loop_get(void);
*/
/**
- * @ingroup Ecore_Model_Group
+ * @ingroup Ecore
+ * @addtogroup Ecore_Model_Group
*
* @{
*/
diff --git a/src/lib/ecore/Ecore_Getopt.h b/src/lib/ecore/Ecore_Getopt.h
index 7a038f744a..751d30c788 100644
--- a/src/lib/ecore/Ecore_Getopt.h
+++ b/src/lib/ecore/Ecore_Getopt.h
@@ -1186,7 +1186,7 @@ EAPI Eina_List *ecore_getopt_list_free(Eina_List *list);
* @return @c EINA_TRUE on success, @c EINA_FALSE on incorrect geometry value.
*
* This is a helper function to be used with ECORE_GETOPT_CALLBACK_*().
- *
+ *
* @c callback_data value is ignored, you can safely use @c NULL.
*/
EAPI Eina_Bool ecore_getopt_callback_geometry_parse(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage);
diff --git a/src/lib/ecore/Ecore_Legacy.h b/src/lib/ecore/Ecore_Legacy.h
index 9c951f5a93..e4ed2773c1 100644
--- a/src/lib/ecore/Ecore_Legacy.h
+++ b/src/lib/ecore/Ecore_Legacy.h
@@ -2,7 +2,7 @@
#define _ECORE_LEGACY_H
/**
- * @ingroup Ecore_Poller_Group
+ * @addtogroup Ecore_Poller_Group
*
* @{
*/
@@ -76,8 +76,6 @@ EAPI double ecore_poller_poll_interval_get(Ecore_Poller_Type type);
* @param[in] interval The tick interval; must be a power of 2 and <= 32768.
*
* @return @c true on success, @c false on failure.
- *
- * @ingroup Ecore_Poller
*/
EAPI Eina_Bool ecore_poller_poller_interval_set(Ecore_Poller *obj, int interval);
@@ -85,8 +83,6 @@ EAPI Eina_Bool ecore_poller_poller_interval_set(Ecore_Poller *obj, int interval)
* @brief Polling interval rate of the poller.
*
* @return The tick interval; must be a power of 2 and <= 32768.
- *
- * @ingroup Ecore_Poller
*/
EAPI int ecore_poller_poller_interval_get(const Ecore_Poller *obj);
@@ -95,11 +91,15 @@ EAPI int ecore_poller_poller_interval_get(const Ecore_Poller *obj);
*/
/**
- * @ingroup Ecore_Animator_Group
+ * @addtogroup Ecore_Animator_Group
*
* @{
*/
+/**
+ * @struct Ecore_Animator
+ * Opaque handle to manage Ecore Animator objects.
+ */
typedef struct _Ecore_Animator Ecore_Animator;
/**
@@ -205,7 +205,7 @@ EAPI void ecore_animator_thaw(Ecore_Animator *animator);
*/
/**
- * @ingroup Ecore_Timer_Group
+ * @addtogroup Ecore_Timer_Group
*
* @{
*/
@@ -302,7 +302,7 @@ EAPI void ecore_timer_thaw(Ecore_Timer *timer);
*/
/**
- * @ingroup Ecore_Idle_Group
+ * @addtogroup Ecore_Idle_Group
*
* @{
*/
@@ -387,7 +387,7 @@ EAPI void *ecore_idle_exiter_del(Ecore_Idle_Exiter *idle_exiter);
*/
/**
- * @ingroup Ecore_Exe_Group
+ * @addtogroup Ecore_Exe_Group
*
* @{
*/
@@ -399,7 +399,7 @@ EAPI void *ecore_idle_exiter_del(Ecore_Idle_Exiter *idle_exiter);
*/
/**
- * @ingroup Ecore_Job_Group
+ * @addtogroup Ecore_Job_Group
*
* @{
*/
diff --git a/src/lib/ecore/Efl_Core.h b/src/lib/ecore/Efl_Core.h
index 0178299379..7e80819b83 100644
--- a/src/lib/ecore/Efl_Core.h
+++ b/src/lib/ecore/Efl_Core.h
@@ -54,7 +54,7 @@
extern "C" {
#endif
-extern EAPI double _efl_startup_time;
+EAPI extern double _efl_startup_time;
#include "Ecore_Common.h"
#include "Ecore_Eo.h"
diff --git a/src/lib/ecore/ecore.c b/src/lib/ecore/ecore.c
index 3110c5ef54..0b4ba4a8fd 100644
--- a/src/lib/ecore/ecore.c
+++ b/src/lib/ecore/ecore.c
@@ -21,10 +21,6 @@
# include <sys/mman.h>
#endif
-#ifdef HAVE_SYSTEMD
-# include <systemd/sd-daemon.h>
-#endif
-
#ifdef _WIN32
# include <evil_private.h> /* evil_init/shutdown */
#endif
@@ -36,8 +32,8 @@
#include "ecore_private.h"
#include "../../static_libs/buildsystem/buildsystem.h"
-#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
-#include <malloc.h>
+#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO) || defined(HAVE_MALLINFO2)
+# include <malloc.h>
#endif
#ifndef O_BINARY
@@ -49,14 +45,19 @@ EAPI Ecore_Version *ecore_version = &_version;
EAPI double _efl_startup_time = 0;
-#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
-#define KEEP_MAX(Global, Local) \
- if (Global < (Local)) \
- Global = Local;
+#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO) || defined(HAVE_MALLINFO2)
+# define KEEP_MAX(Global, Local) \
+ if (Global < (Local)) \
+ Global = Local;
static Eina_Bool _ecore_memory_statistic(void *data);
+# ifdef HAVE_MALLINFO2
+static size_t _ecore_memory_max_total = 0;
+static size_t _ecore_memory_max_free = 0;
+# else
static int _ecore_memory_max_total = 0;
static int _ecore_memory_max_free = 0;
+# endif
static pid_t _ecore_memory_pid = 0;
#ifdef HAVE_MALLOC_INFO
static FILE *_ecore_memory_statistic_file = NULL;
@@ -295,7 +296,7 @@ ecore_init(void)
if (_ecore_glib_always_integrate) ecore_main_loop_glib_integrate();
#endif
-#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
+#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO) || defined(HAVE_MALLINFO2)
if (getenv("ECORE_MEM_STAT"))
{
#ifdef HAVE_MALLOC_INFO
@@ -313,9 +314,7 @@ ecore_init(void)
#ifdef HAVE_SYSTEMD
if (getenv("WATCHDOG_USEC"))
{
- double sec;
-
- sec = ((double) atoi(getenv("WATCHDOG_USEC"))) / 1000 / 1000;
+ double sec = ((double) atoi(getenv("WATCHDOG_USEC"))) / 1000 / 1000;
_systemd_watchdog =
efl_add(EFL_LOOP_TIMER_CLASS, efl_main_loop_get(),
@@ -326,7 +325,6 @@ ecore_init(void)
unsetenv("WATCHDOG_USEC");
INF("Setup systemd watchdog to : %f", sec);
-
_systemd_watchdog_cb(NULL, NULL);
}
#endif
@@ -439,16 +437,22 @@ ecore_shutdown(void)
_ecore_main_loop_shutdown();
-#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
+#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO) || defined(HAVE_MALLINFO2)
if (getenv("ECORE_MEM_STAT"))
{
_ecore_memory_statistic(NULL);
+ #ifdef HAVE_MALLINFO2
+ ERR("[%i] Memory MAX total: %lu, free: %lu",
+ _ecore_memory_pid,
+ _ecore_memory_max_total,
+ _ecore_memory_max_free);
+ #else
ERR("[%i] Memory MAX total: %i, free: %i",
_ecore_memory_pid,
_ecore_memory_max_total,
_ecore_memory_max_free);
-
+ #endif
#ifdef HAVE_MALLOC_INFO
fclose(_ecore_memory_statistic_file);
@@ -589,7 +593,7 @@ ecore_fork_reset(void)
fcb->func(fcb->data);
}
fork_cbs_walking--;
-
+
EINA_LIST_FOREACH_SAFE(fork_cbs, l, ln, fcb)
{
if (fcb->delete_me)
@@ -962,24 +966,38 @@ _ecore_fps_debug_runtime_add(double t)
static void
_systemd_watchdog_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- sd_notify(0, "WATCHDOG=1");
+ if (getenv("NOTIFY_SOCKET"))
+ {
+ _ecore_sd_init();
+ if (_ecore_sd_notify) _ecore_sd_notify(0, "WATCHDOG=1");
+ }
}
#endif
-#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
+#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO) || defined(HAVE_MALLINFO2)
static Eina_Bool
_ecore_memory_statistic(EINA_UNUSED void *data)
{
#ifdef HAVE_MALLOC_INFO
static int frame = 0;
#endif
-#ifdef HAVE_MALLINFO
+
+#if defined(HAVE_MALLINFO) || defined(HAVE_MALLINFO2)
+ Eina_Bool changed = EINA_FALSE;
+
+# if defined(HAVE_MALLINFO2)
+ struct mallinfo2 mi;
+ static size_t uordblks = 0;
+ static size_t fordblks = 0;
+
+ mi = mallinfo2();
+# else
struct mallinfo mi;
static int uordblks = 0;
static int fordblks = 0;
- Eina_Bool changed = EINA_FALSE;
mi = mallinfo();
+# endif
#define HAS_CHANGED(Global, Local) \
if (Global != Local) \
@@ -992,14 +1010,24 @@ _ecore_memory_statistic(EINA_UNUSED void *data)
HAS_CHANGED(fordblks, mi.fordblks);
if (changed)
- ERR("[%i] Memory total: %i, free: %i",
- _ecore_memory_pid,
- mi.uordblks,
- mi.fordblks);
+ {
+#ifdef HAVE_MALLINFO2
+ ERR("[%i] Memory total: %lu, free: %lu",
+ _ecore_memory_pid,
+ mi.uordblks,
+ mi.fordblks);
+#else
+ ERR("[%i] Memory total: %i, free: %i",
+ _ecore_memory_pid,
+ mi.uordblks,
+ mi.fordblks);
+#endif
+ }
KEEP_MAX(_ecore_memory_max_total, mi.uordblks);
KEEP_MAX(_ecore_memory_max_free, mi.fordblks);
#endif
+
#ifdef HAVE_MALLOC_INFO
if (frame) fputs("\n", _ecore_memory_statistic_file);
malloc_info(0, _ecore_memory_statistic_file);
@@ -1122,3 +1150,39 @@ ecore_memory_state_set(Ecore_Memory_State state)
_ecore_memory_state = state;
ecore_event_add(ECORE_EVENT_MEMORY_STATE, NULL, NULL, NULL);
}
+
+#ifdef HAVE_SYSTEMD
+static Eina_Module *_libsystemd = NULL;
+static Eina_Bool _libsystemd_broken = EINA_FALSE;
+
+int (*_ecore_sd_notify) (int unset_environment, const char *state) = NULL;
+
+void
+_ecore_sd_init(void)
+{
+ if (_libsystemd_broken) return;
+ _libsystemd = eina_module_new("libsystemd.so.0");
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ if (!_libsystemd)
+ {
+ _libsystemd_broken = EINA_TRUE;
+ return;
+ }
+ _ecore_sd_notify =
+ eina_module_symbol_get(_libsystemd, "sd_notify");
+ if (!_ecore_sd_notify)
+ {
+ _ecore_sd_notify = NULL;
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ _libsystemd_broken = EINA_TRUE;
+ }
+}
+#endif
diff --git a/src/lib/ecore/ecore_anim.c b/src/lib/ecore/ecore_anim.c
index f2ec2d61c8..a5bde81ff6 100644
--- a/src/lib/ecore/ecore_anim.c
+++ b/src/lib/ecore/ecore_anim.c
@@ -626,68 +626,103 @@ _pos_map_spring(double pos,
return _pos_map_sin((M_PI / 2.0) + (p2 * len)) * decay;
}
-static double
-_cubic_bezier_a (double a1, double a2)
+static inline double
+cuberoot(double v)
{
- return 1.0 - 3.0 * a2 + 3.0 * a1;
+ if (v < 0.0)
+ return -pow(-v, 1. / 3.);
+ else
+ return pow(v, 1. / 3.);
}
static double
-_cubic_bezier_b (double a1, double a2)
+_bezier_t_get(double _x, double _x1, double _x2)
{
- return 3.0 * a2 - 6.0 * a1;
-}
+ if (_x < 0.0 || _x > 1.0) return _x;
+
+ // Cardano's algorithm
+ double\
+ pa = _x - 0.0,
+ pb = _x - _x1,
+ pc = _x - _x2,
+ pd = _x - 1.0;
+
+ double\
+ a = 3*pa-6*pb+3*pc,
+ b = -3*pa+3*pb,
+ c = pa,
+ d = -pa+3*pb-3*pc+pd;
+
+ a /= d;
+ b /= d;
+ c /= d;
+
+ double\
+ p = (3*b-a*a)/3.0,
+ p3 = p/3.0,
+ q = (2*a*a*a-9*a*b+27*c)/27.0,
+ q2 = q/2.0,
+ discriminant = q2*q2 + p3*p3*p3;
+
+ double u1, v1, root1, root2, root3;
+
+ if (discriminant < 0)
+ {
+ double\
+ mp3 = -p/3.0,
+ mp33 = mp3*mp3*mp3,
+ r = sqrt(mp33),
+ t = -q / (2*r),
+ cosphi = t<-1.0 ? -1.0 : t>1.0 ? 1.0 : t,
+ phi = acos(cosphi),
+ crtr = cuberoot(r),
+ t1 = 2*crtr;
+ root1 = t1 * cos(phi/3.0) - a/3.0;
+ root2 = t1 * cos((phi+2*M_PI)/3.0) - a/3.0;
+ root3 = t1 * cos((phi+4*M_PI)/3.0) - a/3.0;
+
+ if (root1 >= 0.0 && root1 <= 1.0) return root1;
+ if (root2 >= 0.0 && root2 <= 1.0) return root2;
+ if (root3 >= 0.0 && root3 <= 1.0) return root3;
+ }
+ else if (discriminant == 0)
+ {
+ u1 = q2 < 0 ? cuberoot(-q2) : -cuberoot(q2);
+ root1 = 2*u1 - a/3.0;
+ root2 = -u1 - a/3.0;
-static double
-_cubic_bezier_c(double a1)
-{
- return 3.0 * a1;
-}
+ if (root1 >= 0.0 && root1 <= 1.0) return root1;
+ if (root2 >= 0.0 && root2 <= 1.0) return root2;
+ }
+ else
+ {
+ double sd = sqrt(discriminant);
+ u1 = cuberoot(sd - q2);
+ v1 = cuberoot(sd + q2);
+ root1 = u1 - v1 - a/3.0;
-static double
-_cubic_bezier_calc(double t,
- double a1,
- double a2)
-{
- return ((_cubic_bezier_a(a1, a2) * t +
- _cubic_bezier_b(a1, a2)) * t +
- _cubic_bezier_c(a1)) * t;
-}
+ if (root1 >= 0.0 && root1 <= 1.0) return root1;
+ }
-static double
-_cubic_bezier_slope_get(double t,
- double a1,
- double a2)
-{
- return 3.0 * _cubic_bezier_a(a1, a2) * t * t +
- 2.0 * _cubic_bezier_b(a1, a2) * t +
- _cubic_bezier_c(a1);
+ return _x;
}
static double
-_cubic_bezier_t_get(double a,
- double x1,
- double x2)
+_bezier_calc(double t, double y1, double y2)
{
-#define APPROXIMATE_RANGE(val) \
- ((((val) < 0.01) && ((val) > -0.01)) ? EINA_TRUE : EINA_FALSE)
-
- const int LIMIT = 100;
- double current_slope;
- double change;
- double current_x;
- double guess_t = a;
-
- for (int i = 0; i < LIMIT; i++)
- {
- current_slope = _cubic_bezier_slope_get(guess_t, x1, x2);
- if (EINA_DBL_EQ(current_slope, 0.0)) return guess_t;
- current_x = _cubic_bezier_calc(guess_t, x1, x2) - a;
- change = current_x / current_slope;
- guess_t -= change;
- if (APPROXIMATE_RANGE(change)) break;
- }
- return guess_t;
+ double y0 = 0.0;
+ double y3 = 1.0;
+
+ double u = 1.0 - t;
+ double t2 = t*t;
+ double t3 = t*t*t;
+ double u2 = u*u;
+ double u3 = u*u*u;
+
+ return u3 * y0 +
+ 3.0 * u2 * t * y1 +
+ 3.0 * u * t2 * y2 +
+ t3 * y3;
}
static double
@@ -700,7 +735,7 @@ _pos_map_cubic_bezier(double pos,
if (EINA_DBL_EQ(x1, y1) &&
EINA_DBL_EQ(x2, y2))
return pos;
- return _cubic_bezier_calc(_cubic_bezier_t_get(pos, x1, x2), y1, y2);
+ return _bezier_calc(_bezier_t_get(pos, x1, x2), y1, y2);
}
#define DBL_TO(Fp) eina_f32p32_double_to(Fp)
diff --git a/src/lib/ecore/ecore_exe_eo.h b/src/lib/ecore/ecore_exe_eo.h
index fa8ecb026a..a4ab65e635 100644
--- a/src/lib/ecore/ecore_exe_eo.h
+++ b/src/lib/ecore/ecore_exe_eo.h
@@ -4,6 +4,10 @@
#ifndef _ECORE_EXE_EO_CLASS_TYPE
#define _ECORE_EXE_EO_CLASS_TYPE
+/**
+ * @struct Ecore_Exe
+ * Opaque handle to manage Ecore Exe objects.
+ */
typedef Eo Ecore_Exe;
#endif
@@ -76,7 +80,7 @@ typedef enum
*/
#define ECORE_EXE_CLASS ecore_exe_class_get()
-EWAPI const Efl_Class *ecore_exe_class_get(void);
+EWAPI const Efl_Class *ecore_exe_class_get(void) EINA_CONST;
/**
* @brief Controls the command that's executed. FIXME: May need a split/rename.
diff --git a/src/lib/ecore/ecore_exe_posix.c b/src/lib/ecore/ecore_exe_posix.c
index 44d9c73ca8..635fc0678b 100644
--- a/src/lib/ecore/ecore_exe_posix.c
+++ b/src/lib/ecore/ecore_exe_posix.c
@@ -16,6 +16,8 @@
#ifdef HAVE_PRCTL
# include <sys/prctl.h>
+#elif defined(HAVE_PROCCTL)
+# include <sys/procctl.h>
#endif
#ifdef HAVE_SYS_WAIT_H
@@ -216,6 +218,13 @@ _impl_ecore_exe_run_priority_get(void)
return run_pri;
}
+#if defined (__FreeBSD__) || defined (__OpenBSD__)
+# include <dlfcn.h>
+static char ***_dl_environ;
+#else
+extern char **environ;
+#endif
+
Eo *
_impl_ecore_exe_efl_object_finalize(Eo *obj, Ecore_Exe_Data *exe)
{
@@ -280,31 +289,100 @@ _impl_ecore_exe_efl_object_finalize(Eo *obj, Ecore_Exe_Data *exe)
pid_t pid = 0;
volatile int vfork_exec_errno = 0;
+ sigset_t newset, oldset;
+
+ sigemptyset(&newset);
+ sigaddset(&newset, SIGPIPE);
+ sigaddset(&newset, SIGALRM);
+ sigaddset(&newset, SIGCHLD);
+ sigaddset(&newset, SIGUSR1);
+ sigaddset(&newset, SIGUSR2);
+ sigaddset(&newset, SIGHUP);
+ sigaddset(&newset, SIGQUIT);
+ sigaddset(&newset, SIGINT);
+ sigaddset(&newset, SIGTERM);
+ sigaddset(&newset, SIGBUS);
+ sigaddset(&newset, SIGCONT);
+ sigaddset(&newset, SIGWINCH);
+#ifdef SIGEMT
+ sigaddset(&newset, SIGEMT);
+#endif
+#ifdef SIGIO
+ sigaddset(&newset, SIGIO);
+#endif
+#ifdef SIGTSTP
+ sigaddset(&newset, SIGTSTP);
+#endif
+#ifdef SIGTTIN
+ sigaddset(&newset, SIGTTIN);
+#endif
+#ifdef SIGTTOU
+ sigaddset(&newset, SIGTTOU);
+#endif
+#ifdef SIGVTALRM
+ sigaddset(&newset, SIGVTALRM);
+#endif
+#ifdef SIGPWR
+ sigaddset(&newset, SIGPWR);
+#endif
+ // block all those nasty signals we don't want messing with things
+ // in signal handlers while we go from fork to exec in the child
+ pthread_sigmask(SIG_BLOCK, &newset, &oldset);
/* FIXME: I should double check this. After a quick look around, this is already done, but via a more modern method. */
/* signal(SIGPIPE, SIG_IGN); We only want EPIPE on errors */
pid = fork();
if (pid == -1)
{
+ pthread_sigmask(SIG_SETMASK, &oldset, NULL);
ERR("Failed to fork process");
pid = 0;
}
else if (pid == 0) /* child */
{
+ struct sigaction sa;
+ int sig;
+
+ sa.sa_handler = SIG_DFL;
+ sa.sa_flags = 0;
+ sigemptyset(&sa.sa_mask);
+ for (sig = 0; sig < 32; sig++) sigaction(sig, &sa, NULL);
#ifdef HAVE_SYSTEMD
- unsetenv("NOTIFY_SOCKET");
+ char **env = NULL, **e;
+
+# if defined (__FreeBSD__) || defined (__OpenBSD__)
+ _dl_environ = dlsym(NULL, "environ");
+ env = *_dl_environ;
+# else
+ env = environ;
+# endif
+ // find NOTIFY_SOCKET env var and remove it without any heap work
+ if (env)
+ {
+ Eina_Bool shuffle = EINA_FALSE;
+
+ for (e = env; *e; e++)
+ {
+ if (!shuffle)
+ {
+ if (!strncmp(e[0], "NOTIFY_SOCKET=", 14))
+ shuffle = EINA_TRUE;
+ }
+ if (shuffle) e[0] = e[1];
+ }
+ }
#endif
if (run_pri != ECORE_EXE_PRIORITY_INHERIT)
- {
-#ifdef PRIO_PROCESS
- if ((run_pri >= -20) && (run_pri <= 19))
- setpriority(PRIO_PROCESS, 0, run_pri);
+ {
+#ifdef PRIO_PROCESS
+ if ((run_pri >= -20) && (run_pri <= 19))
+ setpriority(PRIO_PROCESS, 0, run_pri);
#else
#warning "Your OS/libc does not provide PRIO_PROCESS (and possibly setpriority())"
#warning "This is a POSIX-1.2001 standard and it is highly encouraged that you"
#warning "Have support for this"
#endif
- }
+ }
if (ok && (flags & ECORE_EXE_ISOLATE_IO))
{
int devnull;
@@ -369,13 +447,15 @@ _impl_ecore_exe_efl_object_finalize(Eo *obj, Ecore_Exe_Data *exe)
except[0] = statusPipe[1];
eina_file_close_from(3, except);
/* Run the actual command. */
- _ecore_exe_exec_it(exe_cmd, flags); /* no return */
+ pthread_sigmask(SIG_SETMASK, &oldset, NULL);
+ _ecore_exe_exec_it(exe_cmd, flags); /* no return */
}
}
_exit(-1);
}
else /* parent */
{
+ pthread_sigmask(SIG_SETMASK, &oldset, NULL);
/* Close the unused pipes. */
E_NO_ERRNO(result, close(statusPipe[1]), ok);
@@ -1000,6 +1080,12 @@ _ecore_exe_exec_it(const char *exe_cmd,
{
prctl(PR_SET_PDEATHSIG, SIGTERM);
}
+#elif defined(HAVE_PROCCTL)
+ if ((flags & ECORE_EXE_TERM_WITH_PARENT))
+ {
+ int sig = SIGTERM;
+ procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
+ }
#endif
if (!(flags & ECORE_EXE_NOT_LEADER)) setsid();
diff --git a/src/lib/ecore/ecore_internal.h b/src/lib/ecore/ecore_internal.h
index 32a9472188..9f6e55eb24 100644
--- a/src/lib/ecore/ecore_internal.h
+++ b/src/lib/ecore/ecore_internal.h
@@ -129,6 +129,39 @@ _efl_composite_lookup(const Efl_Class *self, Eo *parent, Efl_Model *view, unsign
EFL_COMPOSITE_REMEMBER_RETURN(remember, view);
}
+/* Result from eina_future_all_* is an EINA_VALUE_TYPE_ARRAY that contain Eina_Value of
+ Eo Model. It is expected that children slice get return an EINA_VALUE_TYPE_ARRAY that
+ contain Eo Model directly.
+*/
+static inline Eina_Value
+_efl_future_all_repack(Eo *o EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
+{
+ unsigned int i, len;
+ Eina_Value created = EINA_VALUE_EMPTY;
+ Eina_Value r = EINA_VALUE_EMPTY;
+
+ eina_value_array_setup(&r, EINA_VALUE_TYPE_OBJECT, 4);
+
+ EINA_VALUE_ARRAY_FOREACH(&v, len, i, created)
+ {
+ Eo *target = NULL;
+
+ if (eina_value_type_get(&created) != EINA_VALUE_TYPE_OBJECT)
+ goto on_error;
+
+ target = eina_value_object_get(&created);
+ if (!target) goto on_error;
+
+ eina_value_array_append(&r, target);
+ }
+
+ return r;
+
+ on_error:
+ eina_value_flush(&r);
+ return eina_value_error_init(EFL_MODEL_ERROR_UNKNOWN);
+}
+
#undef EAPI
#define EAPI
diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c
index 7e84d9d231..a037916e3a 100644
--- a/src/lib/ecore/ecore_main.c
+++ b/src/lib/ecore/ecore_main.c
@@ -20,10 +20,6 @@
#include <fcntl.h>
#include <sys/time.h>
-#ifdef HAVE_SYSTEMD
-# include <systemd/sd-daemon.h>
-#endif
-
#ifdef HAVE_IEEEFP_H
# include <ieeefp.h> // for Solaris
#endif
@@ -211,12 +207,20 @@ static gboolean _ecore_glib_idle_enterer_called;
static gboolean ecore_fds_ready;
#endif
+static double _ecore_main_loop_wakeup_time = 0.0;
+
+EAPI double _ecore_main_loop_wakeup_time_get(void)
+{
+ return _ecore_main_loop_wakeup_time;
+}
+
static inline void
_update_loop_time(Efl_Loop_Data *pd)
{
double loop_time = ecore_time_get();
if (loop_time > pd->loop_time)
pd->loop_time = loop_time;
+ _ecore_main_loop_wakeup_time = loop_time;
}
#ifdef EFL_EXTRA_SANITY_CHECKS
@@ -316,6 +320,16 @@ _gfd_events_from_fdh(Ecore_Fd_Handler *fdh)
}
#endif
+
+static void
+_ecore_main_pre_idle_exit(void)
+{
+ // even if we never go idle, keep up flushing some of our freeq away
+ // on every idle exit which may happen if we even never called idlers
+ // for now an idea but dont enforce
+ eina_freeq_reduce(eina_freeq_main_get(), 128);
+}
+
#ifdef HAVE_LIBUV
static void
_ecore_main_uv_poll_cb(uv_poll_t *handle, int status, int events)
@@ -332,6 +346,7 @@ _ecore_main_uv_poll_cb(uv_poll_t *handle, int status, int events)
DBG("not IDLE anymore");
_ecore_main_uv_idling = EINA_FALSE;
eina_file_statgen_next();
+ _ecore_main_pre_idle_exit();
efl_event_callback_call(obj, EFL_LOOP_EVENT_IDLE_EXIT, NULL);
_ecore_animator_run_reset();
}
@@ -532,11 +547,7 @@ _ecore_main_idler_all_call(Eo *loop, Efl_Loop_Data *pd)
{
if (pd->idlers)
efl_event_callback_call(loop, EFL_LOOP_EVENT_IDLE, NULL);
- // just spin in an idler until the free queue is empty freeing 84 items
- // from the free queue each time.for now this seems like an ok balance
- // between going in and out of a reduce func with mutexes around it
- // vs blocking mainloop for too long. this number is up for discussion
- eina_freeq_reduce(eina_freeq_main_get(), 84);
+ eina_freeq_reduce(eina_freeq_main_get(), 256);
}
#ifdef HAVE_SYS_EPOLL_H
@@ -797,6 +808,7 @@ _ecore_main_gsource_dispatch(GSource *source EINA_UNUSED,
{
_ecore_animator_run_reset();
eina_file_statgen_next();
+ _ecore_main_pre_idle_exit();
efl_event_callback_call(obj, EFL_LOOP_EVENT_IDLE_EXIT, NULL);
ecore_idling = 0;
}
@@ -812,6 +824,7 @@ _ecore_main_gsource_dispatch(GSource *source EINA_UNUSED,
{
_ecore_animator_run_reset();
eina_file_statgen_next();
+ _ecore_main_pre_idle_exit();
efl_event_callback_call(obj, EFL_LOOP_EVENT_IDLE_EXIT, NULL);
ecore_idling = 0;
}
@@ -872,6 +885,7 @@ _ecore_main_loop_timer_run(uv_timer_t *timer EINA_UNUSED)
{
_ecore_main_uv_idling = EINA_FALSE;
eina_file_statgen_next();
+ _ecore_main_pre_idle_exit();
efl_event_callback_call(obj, EFL_LOOP_EVENT_IDLE_EXIT, NULL);
_ecore_animator_run_reset();
}
@@ -1186,7 +1200,11 @@ _ecore_main_loop_begin(Eo *obj, Efl_Loop_Data *pd)
if (obj == ML_OBJ)
{
#ifdef HAVE_SYSTEMD
- sd_notify(0, "READY=1");
+ if (getenv("NOTIFY_SOCKET"))
+ {
+ _ecore_sd_init();
+ if (_ecore_sd_notify) _ecore_sd_notify(0, "READY=1");
+ }
#endif
#ifdef HAVE_LIBUV
if (!_dl_uv_run)
@@ -2250,6 +2268,7 @@ _ecore_main_loop_uv_prepare(uv_prepare_t *handle EINA_UNUSED)
if (_ecore_main_uv_idling)
{
eina_file_statgen_next();
+ _ecore_main_pre_idle_exit();
efl_event_callback_call(obj, EFL_LOOP_EVENT_IDLE_EXIT, NULL);
_ecore_animator_run_reset();
_ecore_main_uv_idling = EINA_FALSE;
@@ -2481,6 +2500,7 @@ process_all: //-*********************************************************
{
_ecore_animator_run_reset(); // XXX:
eina_file_statgen_next();
+ _ecore_main_pre_idle_exit();
efl_event_callback_call(obj, EFL_LOOP_EVENT_IDLE_EXIT, NULL);
}
// call the fd handler per fd that became alive...
diff --git a/src/lib/ecore/ecore_main_timechanges.c b/src/lib/ecore/ecore_main_timechanges.c
index cb3daf1fc1..c2b50ec8e9 100644
--- a/src/lib/ecore/ecore_main_timechanges.c
+++ b/src/lib/ecore/ecore_main_timechanges.c
@@ -14,7 +14,7 @@
#include "Ecore.h"
#include "ecore_private.h"
-#include "lib/ecore/ecore_main_common.h"
+#include "ecore_main_common.h"
#ifdef HAVE_SYS_TIMERFD_H
diff --git a/src/lib/ecore/ecore_pipe.c b/src/lib/ecore/ecore_pipe.c
index 4023bfa70f..e884494605 100644
--- a/src/lib/ecore/ecore_pipe.c
+++ b/src/lib/ecore/ecore_pipe.c
@@ -204,6 +204,7 @@ ecore_pipe_write(Ecore_Pipe *p,
size_t already_written = 0;
int retry = ECORE_PIPE_WRITE_RETRY;
Eina_Bool ok = EINA_FALSE;
+ unsigned int bytes = nbytes;
if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE))
{
@@ -217,7 +218,7 @@ ecore_pipe_write(Ecore_Pipe *p,
do // First write the len into the pipe
{
- ret = pipe_write(p->fd_write, &nbytes, sizeof(nbytes));
+ ret = pipe_write(p->fd_write, &bytes, sizeof(bytes));
if (ret == sizeof(nbytes))
{
retry = ECORE_PIPE_WRITE_RETRY;
diff --git a/src/lib/ecore/ecore_private.h b/src/lib/ecore/ecore_private.h
index e60c191a21..f87e5e753f 100644
--- a/src/lib/ecore/ecore_private.h
+++ b/src/lib/ecore/ecore_private.h
@@ -270,7 +270,7 @@ ecore_print_warning(const char *function,
#define CHECK_PARAM_POINTER_RETURN(sparam, param, ret) \
if (!(param)) \
{ \
- ecore_print_warning(__FUNCTION__, sparam); \
+ ecore_print_warning(__func__, sparam); \
return ret; \
}
@@ -278,7 +278,7 @@ ecore_print_warning(const char *function,
#define CHECK_PARAM_POINTER(sparam, param) \
if (!(param)) \
{ \
- ecore_print_warning(__FUNCTION__, sparam); \
+ ecore_print_warning(__func__, sparam); \
return; \
}
@@ -511,6 +511,12 @@ extern Eina_Bool _ecore_glib_always_integrate;
extern Ecore_Select_Function main_loop_select;
extern int in_main_loop;
+#ifdef HAVE_SYSTEMD
+void _ecore_sd_init(void);
+
+extern int (*_ecore_sd_notify) (int unset_environment, const char *state);
+#endif
+
Eina_Bool ecore_mempool_init(void);
void ecore_mempool_shutdown(void);
#define GENERIC_ALLOC_FREE_HEADER(TYPE, Type) \
diff --git a/src/lib/ecore/ecore_thread.c b/src/lib/ecore/ecore_thread.c
index 05ab26cdea..f38c7880c1 100644
--- a/src/lib/ecore/ecore_thread.c
+++ b/src/lib/ecore/ecore_thread.c
@@ -40,6 +40,7 @@
# define PHE(x, y) eina_thread_equal(x, y)
# define PHS() eina_thread_self()
# define PHC(x, f, d) eina_thread_create(&(x), EINA_THREAD_BACKGROUND, -1, (void *)f, d)
+# define PHC2(x, f, d)eina_thread_create(&(x), EINA_THREAD_URGENT, -1, (void *)f, d)
# define PHJ(x) eina_thread_join(x)
typedef struct _Ecore_Pthread_Worker Ecore_Pthread_Worker;
@@ -953,7 +954,7 @@ ecore_thread_feedback_run(Ecore_Thread_Cb func_heavy,
eina_threads_init();
retry_direct:
- if (PHC(t, _ecore_direct_worker, worker))
+ if (PHC2(t, _ecore_direct_worker, worker))
{
SLKL(_ecore_pending_job_threads_mutex);
_ecore_thread_count_no_queue++;
diff --git a/src/lib/ecore/ecore_time.c b/src/lib/ecore/ecore_time.c
index f2afe0e860..9f039e2b59 100644
--- a/src/lib/ecore/ecore_time.c
+++ b/src/lib/ecore/ecore_time.c
@@ -13,10 +13,16 @@
#include <time.h>
+#ifdef _WIN32
+# include <evil_private.h> /* gettimeofday */
+#endif
+
#include "Ecore.h"
#include "ecore_private.h"
-#if defined (HAVE_CLOCK_GETTIME)
+#if defined(_WIN32)
+static LONGLONG _ecore_time_freq;
+#elif defined (HAVE_CLOCK_GETTIME)
static clockid_t _ecore_time_clock_id;
static Eina_Bool _ecore_time_got_clock_id = EINA_FALSE;
#elif defined(__APPLE__) && defined(__MACH__)
@@ -26,7 +32,12 @@ static double _ecore_time_clock_conversion = 1e-9;
EAPI double
ecore_time_get(void)
{
-#if defined (HAVE_CLOCK_GETTIME)
+#ifdef _WIN32
+ LARGE_INTEGER count;
+
+ QueryPerformanceCounter(&count);
+ return (double)count.QuadPart/ (double)_ecore_time_freq;
+#elif defined (HAVE_CLOCK_GETTIME)
struct timespec t;
if (EINA_UNLIKELY(!_ecore_time_got_clock_id))
@@ -39,8 +50,6 @@ ecore_time_get(void)
}
return (double)t.tv_sec + (((double)t.tv_nsec) / 1000000000.0);
-#elif defined(_WIN32)
- return evil_time_get();
#elif defined(__APPLE__) && defined(__MACH__)
return _ecore_time_clock_conversion * (double)mach_absolute_time();
#else
@@ -82,7 +91,12 @@ ecore_loop_time_set(double t)
void
_ecore_time_init(void)
{
-#if defined(HAVE_CLOCK_GETTIME)
+#if defined(_WIN32)
+ LARGE_INTEGER freq;
+
+ QueryPerformanceFrequency(&freq);
+ _ecore_time_freq = freq.QuadPart;
+#elif defined(HAVE_CLOCK_GETTIME)
struct timespec t;
if (_ecore_time_got_clock_id) return;
@@ -103,18 +117,16 @@ _ecore_time_init(void)
else
CRI("Cannot get a valid clock_gettime() clock id! Fallback to unix time");
#else
-# ifndef _WIN32
-# if defined(__APPLE__) && defined(__MACH__)
+# if defined(__APPLE__) && defined(__MACH__)
mach_timebase_info_data_t info;
kern_return_t err = mach_timebase_info(&info);
if (err == 0)
  _ecore_time_clock_conversion = 1e-9 * (double)info.numer / (double)info.denom;
else
WRN("Unable to get timebase info. Fallback to nanoseconds");
-# else
-# warning "Your platform isn't supported yet"
+# else
+# warning "Your platform isn't supported yet"
CRI("Platform does not support clock_gettime. Fallback to unix time");
-# endif
# endif
#endif
ecore_loop_time_set(ecore_time_get());
diff --git a/src/lib/ecore/efl_core_proc_env.c b/src/lib/ecore/efl_core_proc_env.c
index a4ee9d75f9..9177d822f1 100644
--- a/src/lib/ecore/efl_core_proc_env.c
+++ b/src/lib/ecore/efl_core_proc_env.c
@@ -16,7 +16,7 @@
#if defined (__FreeBSD__) || defined (__OpenBSD__)
# include <dlfcn.h>
static char ***_dl_environ;
-#else
+#elif !defined(_MSC_VER)
extern char **environ;
#endif
@@ -58,6 +58,8 @@ _sync(Efl_Core_Env *obj, Efl_Core_Proc_Env_Data *pd)
char **values;
values = eina_str_split(*p, "=", 2);
+ if (!values) break;
+
efl_core_env_set(obj, values[0], values[1]);
EINA_LIST_FOREACH(existing_keys, n, key)
@@ -68,6 +70,8 @@ _sync(Efl_Core_Env *obj, Efl_Core_Proc_Env_Data *pd)
break;
}
}
+ free(values[0]);
+ free(values);
}
}
EINA_LIST_FOREACH(existing_keys, n, key)
diff --git a/src/lib/ecore/efl_cubic_bezier_interpolator.eo b/src/lib/ecore/efl_cubic_bezier_interpolator.eo
index 4c67204783..02de6741d3 100644
--- a/src/lib/ecore/efl_cubic_bezier_interpolator.eo
+++ b/src/lib/ecore/efl_cubic_bezier_interpolator.eo
@@ -1,3 +1,5 @@
+import eina_types;
+
class Efl.Cubic_Bezier_Interpolator extends Efl.Object implements Efl.Interpolator
{
[[Cubic Bezier interpolator. It starts slow, then moves quickly and then slows down
diff --git a/src/lib/ecore/efl_exe.c b/src/lib/ecore/efl_exe.c
index 8609dbfac5..7239bcdf6f 100644
--- a/src/lib/ecore/efl_exe.c
+++ b/src/lib/ecore/efl_exe.c
@@ -25,8 +25,10 @@
# include <sys/socket.h>
# ifdef HAVE_PRCTL
# include <sys/prctl.h>
+# elif defined(HAVE_PROCCTL)
+# include <sys/procctl.h>
# endif
-# ifdef HAVE_SYS_WAIT_H
+#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
# endif
# ifndef HAVE_CLEARENV
@@ -67,6 +69,7 @@ struct _Efl_Exe_Data
} fd;
#endif
Eina_Bool exit_called : 1;
+ Eina_Bool exit_signalled : 1;
Eina_Bool run : 1;
};
@@ -150,7 +153,13 @@ _exec(const char *cmd, Efl_Exe_Flags flags, Efl_Task_Flags task_flags)
# ifdef HAVE_PRCTL
if (task_flags & EFL_TASK_FLAGS_EXIT_WITH_PARENT)
prctl(PR_SET_PDEATHSIG, SIGTERM);
-# endif
+#elif defined(HAVE_PROCCTL)
+ if (task_flags & EFL_TASK_FLAGS_EXIT_WITH_PARENT)
+ {
+ int sig = SIGTERM;
+ procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
+ }
+#endif
if (flags & EFL_EXE_FLAGS_GROUP_LEADER) setsid();
if (use_sh) // We have to use a shell to run this.
@@ -261,10 +270,10 @@ _efl_exe_signal(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd, Efl_Exe_Signal sig)
switch (sig)
{
- case EFL_EXE_SIGNAL_INT: s = SIGINT; break;
- case EFL_EXE_SIGNAL_QUIT: s = SIGQUIT; break;
- case EFL_EXE_SIGNAL_TERM: s = SIGTERM; break;
- case EFL_EXE_SIGNAL_KILL: s = SIGKILL; break;
+ case EFL_EXE_SIGNAL_INT: s = SIGINT; pd->exit_signalled = EINA_TRUE; break;
+ case EFL_EXE_SIGNAL_QUIT: s = SIGQUIT; pd->exit_signalled = EINA_TRUE; break;
+ case EFL_EXE_SIGNAL_TERM: s = SIGTERM; pd->exit_signalled = EINA_TRUE; break;
+ case EFL_EXE_SIGNAL_KILL: s = SIGKILL; pd->exit_signalled = EINA_TRUE; break;
case EFL_EXE_SIGNAL_CONT: s = SIGCONT; break;
case EFL_EXE_SIGNAL_STOP: s = SIGSTOP; break;
case EFL_EXE_SIGNAL_HUP: s = SIGHUP; break;
@@ -348,8 +357,10 @@ _efl_exe_efl_task_run(Eo *obj, Efl_Exe_Data *pd)
return EINA_FALSE;
#else
Eo *loop;
- Efl_Task_Data *tdl, *td = efl_data_scope_get(obj, EFL_TASK_CLASS);
+ Efl_Task_Data *tdl = NULL, *td = efl_data_scope_get(obj, EFL_TASK_CLASS);
+ Eina_Iterator *itr = NULL, *itr2 = NULL;
const char *cmd;
+ char **newenv, **env = NULL, **e;
int devnull;
int pipe_stdin[2];
int pipe_stdout[2];
@@ -419,9 +430,57 @@ _efl_exe_efl_task_run(Eo *obj, Efl_Exe_Data *pd)
}
_ecore_signal_pid_lock();
+ // get these before the fork to avoid heap malloc deadlocks
+ loop = efl_provider_find(obj, EFL_LOOP_CLASS);
+ if (loop) tdl = efl_data_scope_get(loop, EFL_TASK_CLASS);
+ if (pd->env) itr = efl_core_env_content_get(pd->env);
+ if (pd->env) itr2 = efl_core_env_content_get(pd->env);
+ sigset_t newset, oldset;
+
+ sigemptyset(&newset);
+ sigaddset(&newset, SIGPIPE);
+ sigaddset(&newset, SIGALRM);
+ sigaddset(&newset, SIGCHLD);
+ sigaddset(&newset, SIGUSR1);
+ sigaddset(&newset, SIGUSR2);
+ sigaddset(&newset, SIGHUP);
+ sigaddset(&newset, SIGQUIT);
+ sigaddset(&newset, SIGINT);
+ sigaddset(&newset, SIGTERM);
+ sigaddset(&newset, SIGBUS);
+ sigaddset(&newset, SIGCONT);
+ sigaddset(&newset, SIGWINCH);
+# ifdef SIGEMT
+ sigaddset(&newset, SIGEMT);
+# endif
+# ifdef SIGIO
+ sigaddset(&newset, SIGIO);
+# endif
+# ifdef SIGTSTP
+ sigaddset(&newset, SIGTSTP);
+# endif
+# ifdef SIGTTIN
+ sigaddset(&newset, SIGTTIN);
+# endif
+# ifdef SIGTTOU
+ sigaddset(&newset, SIGTTOU);
+# endif
+# ifdef SIGVTALRM
+ sigaddset(&newset, SIGVTALRM);
+# endif
+# ifdef SIGPWR
+ sigaddset(&newset, SIGPWR);
+# endif
+ // block all those nasty signals we don't want messing with things
+ // in signal handlers while we go from fork to exec in the child
+ pthread_sigmask(SIG_BLOCK, &newset, &oldset);
pd->pid = fork();
+
if (pd->pid != 0)
{
+ pthread_sigmask(SIG_SETMASK, &oldset, NULL);
+ if (itr) eina_iterator_free(itr);
+ if (itr2) eina_iterator_free(itr2);
// parent process is here inside this if block
if (td->flags & EFL_TASK_FLAGS_USE_STDIN) close(pipe_stdin[0]);
if (td->flags & EFL_TASK_FLAGS_USE_STDOUT) close(pipe_stdout[1]);
@@ -446,6 +505,13 @@ _efl_exe_efl_task_run(Eo *obj, Efl_Exe_Data *pd)
pd->run = EINA_TRUE;
return EINA_TRUE;
}
+ struct sigaction sa;
+ int sig;
+
+ sa.sa_handler = SIG_DFL;
+ sa.sa_flags = 0;
+ sigemptyset(&sa.sa_mask);
+ for (sig = 0; sig < 32; sig++) sigaction(sig, &sa, NULL);
// this code is in the child here, and is temporary setup until we
// exec() the child to replace everything.
@@ -471,13 +537,14 @@ _efl_exe_efl_task_run(Eo *obj, Efl_Exe_Data *pd)
{
// hide stdin
devnull = open("/dev/null", O_RDONLY);
- dup2(devnull, STDIN_FILENO);
+ if (devnull < 0) _exit(1);
+ if (dup2(devnull, STDIN_FILENO) < 0) _exit(1);
close(devnull);
}
else if ((td->flags & EFL_TASK_FLAGS_USE_STDIN))
{
// hook up stdin to the pipe going to the parent
- dup2(pipe_stdin[0], STDIN_FILENO);
+ if (dup2(pipe_stdin[0], STDIN_FILENO) < 0) _exit(1);
close(pipe_stdin[0]);
}
@@ -486,13 +553,14 @@ _efl_exe_efl_task_run(Eo *obj, Efl_Exe_Data *pd)
{
// hide stdout
devnull = open("/dev/null", O_WRONLY);
- dup2(devnull, STDOUT_FILENO);
+ if (devnull < 0) _exit(1);
+ if (dup2(devnull, STDOUT_FILENO) < 0) _exit(1);
close(devnull);
}
else if ((td->flags & EFL_TASK_FLAGS_USE_STDOUT))
{
// hook up stdout to the pipe going to the parent
- dup2(pipe_stdout[1], STDOUT_FILENO);
+ if (dup2(pipe_stdout[1], STDOUT_FILENO) < 0) _exit(1);
close(pipe_stdout[1]);
}
@@ -500,58 +568,90 @@ _efl_exe_efl_task_run(Eo *obj, Efl_Exe_Data *pd)
{
// hide stderr
devnull = open("/dev/null", O_WRONLY);
- dup2(devnull, STDERR_FILENO);
+ if (devnull < 0) _exit(1);
+ if (dup2(devnull, STDERR_FILENO) < 0) _exit(1);
close(devnull);
}
- if (!(loop = efl_provider_find(obj, EFL_LOOP_CLASS))) exit(1);
-
- if (!(tdl = efl_data_scope_get(loop, EFL_TASK_CLASS))) exit(1);
+ if (!tdl) _exit(1);
// clear systemd notify socket... only relevant for systemd world,
// otherwise shouldn't be trouble
- putenv("NOTIFY_SOCKET=");
+# if defined (__FreeBSD__) || defined (__OpenBSD__)
+ _dl_environ = dlsym(NULL, "environ");
+ if (_dl_environ) env = *_dl_environ;
+# else
+ env = environ;
+# endif
+ if (env)
+ {
+ Eina_Bool shuffle = EINA_FALSE;
+
+ for (e = env; *e; e++)
+ {
+ if (!shuffle)
+ {
+ if (!strncmp(e[0], "NOTIFY_SOCKET=", 14))
+ shuffle = EINA_TRUE;
+ }
+ if (shuffle) e[0] = e[1];
+ }
+ }
// actually setenv the env object (clear what was there before so it is
// the only env there)
if (pd->env)
{
- Eina_Iterator *itr;
const char *key;
+ int count = 0, i = 0;
-# ifdef HAVE_CLEARENV
- clearenv();
-# else
-# if defined (__FreeBSD__) || defined (__OpenBSD__)
- _dl_environ = dlsym(NULL, "environ");
- if (_dl_environ) *_dl_environ = NULL;
- else ERR("Can't find envrion symbol");
-# else
- environ = NULL;
-# endif
-# endif
- itr = efl_core_env_content_get(pd->env);
-
+ // use 2nd throw-away itr to count
+ EINA_ITERATOR_FOREACH(itr2, key)
+ {
+ count++;
+ }
+ // object which we don't free (sitting in hash table in env obj)
+ newenv = alloca(sizeof(char *) * (count + 1));
+ // use 2st iter to walk and fill new env
EINA_ITERATOR_FOREACH(itr, key)
{
- setenv(key, efl_core_env_get(pd->env, key) , 1);
+ newenv[i] = (char *)efl_core_env_get(pd->env, key);
+ i++;
}
- efl_unref(pd->env);
- pd->env = NULL;
+ // yes - we dont free itr or itr2 - we're going to exec below or exit
+ // also put newenv array on stack pointign to the strings in the env
+# if defined (__FreeBSD__) || defined (__OpenBSD__)
+ if (_dl_environ) *_dl_environ = newenv;
+ else ERR("Can't find envrion symbol");
+# else
+ environ = newenv;
+# endif
}
// close all fd's other than the first 3 (0, 1, 2) and exited write fd
int except[2] = { 0, -1 };
except[0] = pd->fd.exited_write;
eina_file_close_from(3, except);
-
+# ifdef HAVE_PRCTL
+ if ((pd->flags & EFL_EXE_FLAGS_TERM_WITH_PARENT))
+ {
+ prctl(PR_SET_PDEATHSIG, SIGTERM);
+ }
+# elif defined(HAVE_PROCCTL)
+ if ((pd->flags & EFL_EXE_FLAGS_TERM_WITH_PARENT))
+ {
+ int sig = SIGTERM;
+ procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
+ }
+# endif
+ pthread_sigmask(SIG_SETMASK, &oldset, NULL);
// actually execute!
_exec(cmd, pd->flags, td->flags);
// we couldn't exec... uh oh. HAAAAAAAALP!
if ((errno == EACCES) || (errno == EINVAL) || (errno == ELOOP) ||
(errno == ENOEXEC) || (errno == ENOMEM))
- exit(126);
- exit(127);
+ _exit(126);
+ _exit(127);
return EINA_FALSE;
#endif
}
@@ -562,6 +662,7 @@ _efl_exe_efl_task_end(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd)
#ifdef _WIN32
#else
if (pd->pid == -1) return;
+ pd->exit_signalled = EINA_TRUE;
kill(pd->pid, SIGINT);
#endif
}
@@ -572,6 +673,16 @@ _efl_exe_exit_signal_get(const Eo *obj EINA_UNUSED, Efl_Exe_Data *pd)
return pd->exit_signal;
}
+EOLIAN static int
+_efl_exe_pid_get(const Eo *obj EINA_UNUSED, Efl_Exe_Data *pd)
+{
+#ifndef _WIN32
+ if (pd->pid != -1)
+ return pd->pid;
+#endif
+ return 0;
+}
+
EOLIAN static Efl_Object *
_efl_exe_efl_object_constructor(Eo *obj, Efl_Exe_Data *pd)
{
@@ -594,7 +705,7 @@ _efl_exe_efl_object_destructor(Eo *obj, Efl_Exe_Data *pd)
{
#ifdef _WIN32
#else
- if (!pd->exit_called)
+ if ((!pd->exit_called) && (!pd->exit_signalled))
ERR("Exe being destroyed while child has not exited yet.");
if (pd->fd.exited_read >= 0)
{
diff --git a/src/lib/ecore/efl_exe.eo b/src/lib/ecore/efl_exe.eo
index 23b68935e4..c4cc2d7ebf 100644
--- a/src/lib/ecore/efl_exe.eo
+++ b/src/lib/ecore/efl_exe.eo
@@ -18,7 +18,8 @@ enum @beta Efl.Exe_Flags {
[[Flags to customize process behavior.]]
none = 0, [[No special flags.]]
group_leader = 1, [[Process will be executed in its own session.]]
- hide_io = 4 [[All console IO will be hidden.]]
+ hide_io = 4, [[All console IO will be hidden.]]
+ term_with_parent = 8, [[Makes child receive SIGTERM when parent dies.]]
}
class @beta Efl.Exe extends Efl.Task implements Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Core.Command_Line
@@ -51,6 +52,15 @@ class @beta Efl.Exe extends Efl.Task implements Efl.Io.Reader, Efl.Io.Writer, Ef
sig: int; [[The exit signal, or -1 if no exit signal happened.]]
}
}
+ @property pid {
+ [[The pid of the process, which is only accessible after the object has been finalized.
+ @since 1.24
+ ]]
+ get { }
+ values {
+ pid: int; [[The pid, or 0 on failure.]]
+ }
+ }
@property env {
[[If $env is $NULL then the process created by this object is
going to inherit the environment of this process.
diff --git a/src/lib/ecore/efl_filter_model.c b/src/lib/ecore/efl_filter_model.c
index cc18dca89b..4ef3316947 100644
--- a/src/lib/ecore/efl_filter_model.c
+++ b/src/lib/ecore/efl_filter_model.c
@@ -314,39 +314,6 @@ _filter_remove_array(Eo *o EINA_UNUSED, void *data, const Eina_Value v)
return eina_value_object_init(target);
}
-/* Result from eina_future_all_array is an EINA_VALUE_TYPE_ARRAY that contain Eina_Value of
- Eo Model. It is expected that children slice get return an EINA_VALUE_TYPE_ARRAY that
- contain Eo Model directly.
-*/
-static Eina_Value
-_filter_cleanup_array(Eo *o EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
-{
- unsigned int i, len;
- Eina_Value created = EINA_VALUE_EMPTY;
- Eina_Value r = EINA_VALUE_EMPTY;
-
- eina_value_array_setup(&r, EINA_VALUE_TYPE_OBJECT, 4);
-
- EINA_VALUE_ARRAY_FOREACH(&v, len, i, created)
- {
- Eo *target = NULL;
-
- if (eina_value_type_get(&created) != EINA_VALUE_TYPE_OBJECT)
- goto on_error;
-
- target = eina_value_object_get(&created);
- if (!target) goto on_error;
-
- eina_value_array_append(&r, target);
- }
-
- return r;
-
- on_error:
- eina_value_flush(&r);
- return eina_value_error_init(EFL_MODEL_ERROR_UNKNOWN);
-}
-
static Eina_Future *
_efl_filter_model_efl_model_children_slice_get(Eo *obj, Efl_Filter_Model_Data *pd,
unsigned int start, unsigned int count)
@@ -389,7 +356,7 @@ _efl_filter_model_efl_model_children_slice_get(Eo *obj, Efl_Filter_Model_Data *p
}
r[i] = EINA_FUTURE_SENTINEL;
- f = efl_future_then(obj, eina_future_all_array(r), .success = _filter_cleanup_array);
+ f = efl_future_then(obj, eina_future_all_array(r), .success = _efl_future_all_repack);
free(r);
free(mapping);
diff --git a/src/lib/ecore/efl_io_copier.eo b/src/lib/ecore/efl_io_copier.eo
index e172a0c41d..291bdbc0ef 100644
--- a/src/lib/ecore/efl_io_copier.eo
+++ b/src/lib/ecore/efl_io_copier.eo
@@ -148,7 +148,7 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
destination then the "done" event is emitted.
If the destination is not set (ie: $NULL) then data is kept
- in a internal @Eina.Binbuf, which can be stolen with
+ in a internal binbuf, which can be stolen with
@.binbuf_steal once "data" or "line" events are
emitted. It exists as a useful shortcut to easily drain
readers and store all data in memory with no need to use an
@@ -313,7 +313,7 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
which case you should wait for "done", "data" or "line"
events and then call it to retrieve and own the data.
]]
- return: ptr(Eina.Binbuf) @move @no_unused; [[Binbuf]]
+ return: binbuf @move @no_unused; [[Binbuf]]
}
@property pending_size {
diff --git a/src/lib/ecore/efl_loop.c b/src/lib/ecore/efl_loop.c
index 726a4b36a0..d85d5b1661 100644
--- a/src/lib/ecore/efl_loop.c
+++ b/src/lib/ecore/efl_loop.c
@@ -140,7 +140,11 @@ efl_loop_exit_code_process(Eina_Value *value)
eina_value_setup(&v, EINA_VALUE_TYPE_INT);
if (!eina_value_convert(value, &v)) r = -1;
- else eina_value_get(&v, &r);
+ else
+ {
+ if (!eina_value_get(&v, &r))
+ r = -1;
+ }
}
else
{
diff --git a/src/lib/ecore/efl_loop_consumer.eo b/src/lib/ecore/efl_loop_consumer.eo
index e384240c0b..a028e5aff1 100644
--- a/src/lib/ecore/efl_loop_consumer.eo
+++ b/src/lib/ecore/efl_loop_consumer.eo
@@ -1,3 +1,5 @@
+import eina_types;
+
abstract Efl.Loop_Consumer extends Efl.Object
{
[[An @Efl.Loop_Consumer is a class which requires one of the parents to provide
diff --git a/src/lib/ecore/efl_loop_model.c b/src/lib/ecore/efl_loop_model.c
index d3e52a63fb..88d8574285 100644
--- a/src/lib/ecore/efl_loop_model.c
+++ b/src/lib/ecore/efl_loop_model.c
@@ -108,6 +108,42 @@ _efl_loop_model_efl_model_property_ready_get(Eo *obj, void *pd EINA_UNUSED, cons
return efl_future_then(obj, f);
}
+static Eina_Value
+_unpack_from_array(void *data EINA_UNUSED, Eina_Value v, const Eina_Future *f EINA_UNUSED)
+{
+ Eo *object = NULL;
+
+ if (eina_value_type_get(&v) == EINA_VALUE_TYPE_ERROR) return v;
+ if (eina_value_type_get(&v) != EINA_VALUE_TYPE_ARRAY) return eina_value_error_init(EINVAL);
+ if (eina_value_array_count(&v) != 1) return eina_value_error_init(EINVAL);
+
+ eina_value_array_get(&v, 0, &object);
+
+ return eina_value_object_init(object);
+}
+
+static Eina_Future *
+_efl_loop_model_efl_model_children_index_get(Eo *obj, void *pd EINA_UNUSED, Eina_Iterator *indexes)
+{
+ Eina_Future *r;
+ Eina_Array futures;
+ unsigned int idx;
+
+ eina_array_step_set(&futures, sizeof (Eina_Array), 8);
+
+ EINA_ITERATOR_FOREACH(indexes, idx)
+ eina_array_push(&futures, eina_future_then(efl_model_children_slice_get(obj, idx, 1), _unpack_from_array, NULL));
+ eina_iterator_free(indexes);
+
+ r = efl_future_then(obj, eina_future_all_iterator(eina_array_iterator_new(&futures)),
+ .success = _efl_future_all_repack,
+ .success_type = EINA_VALUE_TYPE_ARRAY);
+
+ eina_array_flush(&futures);
+
+ return r;
+}
+
static void
_noref_death(void *data EINA_UNUSED, const Efl_Event *event)
{
diff --git a/src/lib/ecore/efl_loop_model.eo b/src/lib/ecore/efl_loop_model.eo
index 2285b56f1b..06af337ecf 100644
--- a/src/lib/ecore/efl_loop_model.eo
+++ b/src/lib/ecore/efl_loop_model.eo
@@ -20,5 +20,6 @@ abstract Efl.Loop_Model extends Efl.Loop_Consumer implements Efl.Model
Efl.Object.invalidate;
Efl.Model.property_ready_get;
Efl.Model.property { get; set; }
+ Efl.Model.children_index_get;
}
}
diff --git a/src/lib/ecore/efl_thread.c b/src/lib/ecore/efl_thread.c
index ab6fdab7a1..9fc6b8d882 100644
--- a/src/lib/ecore/efl_thread.c
+++ b/src/lib/ecore/efl_thread.c
@@ -826,8 +826,8 @@ _efl_thread_efl_task_run(Eo *obj, Efl_Thread_Data *pd)
close(pd->fd.out);
close(pd->ctrl.in);
close(pd->ctrl.out);
- close(thdat->fd.in);
- close(thdat->fd.out);
+ if (thdat->fd.in >= 0) close(thdat->fd.in);
+ if (thdat->fd.out >= 0) close(thdat->fd.out);
close(thdat->ctrl.in);
close(thdat->ctrl.out);
free(thdat);
diff --git a/src/lib/ecore/efl_threadio.eo b/src/lib/ecore/efl_threadio.eo
index 58629fd7b4..80b4f5b653 100644
--- a/src/lib/ecore/efl_threadio.eo
+++ b/src/lib/ecore/efl_threadio.eo
@@ -1,5 +1,3 @@
-import efl_object;
-
function @beta EflThreadIOCall {
[[A Function to be called asynchronously on a different thread.]]
params {
diff --git a/src/lib/ecore/meson.build b/src/lib/ecore/meson.build
index 34c32e753d..dfc2dece55 100644
--- a/src/lib/ecore/meson.build
+++ b/src/lib/ecore/meson.build
@@ -1,5 +1,10 @@
-ecore_deps = [intl]
+ecore_deps = []
ecore_pub_deps = [eina, eo, efl]
+ecore_ext_deps = [intl, m, buildsystem]
+
+if sys_sun == true
+ ecore_deps += [malloc]
+endif
pub_legacy_eo_files = [
'ecore_event_message.eo',
@@ -98,7 +103,7 @@ ecore_header_src = [
'efl_loop_timer_eo.legacy.h',
]
-ecore_src = [
+ecore_src = files([
'efl_app.c',
'ecore.c',
'ecore_alloc.c',
@@ -168,18 +173,18 @@ ecore_src = [
'efl_core_env.c',
'efl_core_proc_env.c',
'efl_core_command_line.c',
-]
+])
if sys_windows == true
#nothing for now ... needs testing
- ecore_src += ['ecore_exe_win32.c']
+ ecore_src += files(['ecore_exe_win32.c'])
else
- ecore_src += ['ecore_signal.c', 'ecore_exe_posix.c']
+ ecore_src += files(['ecore_signal.c', 'ecore_exe_posix.c'])
endif
if get_option('glib') == true and sys_windows == false
- ecore_deps += dependency('glib-2.0')
- ecore_deps += dependency('gthread-2.0')
+ ecore_ext_deps += dependency('glib-2.0')
+ ecore_ext_deps += dependency('gthread-2.0')
config_h.set('GLIB_INTEGRATION_ALWAYS', '1')
config_h.set('HAVE_GLIB', '1')
endif
@@ -192,13 +197,9 @@ if get_option('g-mainloop') == true
endif
endif
-if get_option('systemd') == true
- ecore_deps += systemd
-endif
-
ecore_lib = library('ecore',
ecore_src, pub_eo_file_target,
- dependencies: ecore_pub_deps + [m, buildsystem, ecore_deps],
+ dependencies: ecore_pub_deps + [ecore_deps, ecore_ext_deps],
include_directories : config_dir + [include_directories(join_paths('..','..'))],
install: true,
c_args : package_c_args,
diff --git a/src/lib/ecore_audio/Ecore_Audio.h b/src/lib/ecore_audio/Ecore_Audio.h
index 717c36c3fd..35b59d3c6e 100644
--- a/src/lib/ecore_audio/Ecore_Audio.h
+++ b/src/lib/ecore_audio/Ecore_Audio.h
@@ -4,30 +4,32 @@
#include <Eina.h>
#include <Eo.h>
-#ifdef EAPI
-#undef EAPI
+#ifdef ECORE_AUDIO_API
+#error ECORE_AUDIO_API should not be already defined
#endif
#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
+# ifndef ECORE_AUDIO_STATIC
+# ifdef ECORE_AUDIO_BUILD
+# define ECORE_AUDIO_API __declspec(dllexport)
# else
-# define EAPI
+# define ECORE_AUDIO_API __declspec(dllimport)
# endif
# else
-# define EAPI __declspec(dllimport)
+# define ECORE_AUDIO_API
# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
+# define ECORE_AUDIO_API_WEAK
+#elif __GNUC__
+# if __GNUC__ >= 4
+# define ECORE_AUDIO_API __attribute__ ((visibility("default")))
+# define ECORE_AUDIO_API_WEAK __attribute__ ((weak))
# else
-# define EAPI
+# define ECORE_AUDIO_API
+# define ECORE_AUDIO_API_WEAK
# endif
+#else
+# define ECORE_AUDIO_API
+# define ECORE_AUDIO_API_WEAK
#endif
/**
@@ -176,7 +178,7 @@ typedef struct _Ecore_Audio_Vio Ecore_Audio_Vio;
* When Ecore_Audio is not used anymore, call ecore_audio_shutdown()
* to shut down the Ecore_Audio library.
*/
-EAPI int ecore_audio_init(void);
+ECORE_AUDIO_API int ecore_audio_init(void);
/**
* @brief Shuts down the Ecore_Audio library.
@@ -190,7 +192,7 @@ EAPI int ecore_audio_init(void);
* been called the same number of times than ecore_audio_init(). In that case
* it shuts down all the services it uses.
*/
-EAPI int ecore_audio_shutdown(void);
+ECORE_AUDIO_API int ecore_audio_shutdown(void);
//Legacy compatibility code
@@ -200,14 +202,14 @@ EAPI int ecore_audio_shutdown(void);
* @since 1.8
*
*/
-EAPI const char* ecore_audio_obj_name_get(const Efl_Object* obj);
+ECORE_AUDIO_API const char* ecore_audio_obj_name_get(const Efl_Object* obj);
/**
* @brief Name of the object
*
* @since 1.8
*
*/
-EAPI void ecore_audio_obj_name_set(Efl_Object* obj, const char *name);
+ECORE_AUDIO_API void ecore_audio_obj_name_set(Efl_Object* obj, const char *name);
#include <ecore_audio_obj.h>
#include <ecore_audio_obj_in.h>
@@ -230,7 +232,4 @@ EAPI void ecore_audio_obj_name_set(Efl_Object* obj, const char *n
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/ecore_audio/ecore_audio.c b/src/lib/ecore_audio/ecore_audio.c
index 1c0345ed73..91bf99b364 100644
--- a/src/lib/ecore_audio/ecore_audio.c
+++ b/src/lib/ecore_audio/ecore_audio.c
@@ -27,7 +27,7 @@ Ecore_Audio_Lib_Sndfile *ecore_audio_sndfile_lib = NULL;
/* externally accessible functions */
-EAPI int
+ECORE_AUDIO_API int
ecore_audio_init(void)
{
@@ -60,7 +60,7 @@ ecore_audio_init(void)
return _ecore_audio_init_count;
}
-EAPI int
+ECORE_AUDIO_API int
ecore_audio_shutdown(void)
{
DBG("Ecore_Audio shutdown");
@@ -144,6 +144,7 @@ ecore_audio_pulse_lib_load(void)
goto err; \
}
SYM(pa_context_new);
+ SYM(pa_context_unref);
SYM(pa_context_connect);
SYM(pa_context_set_sink_input_volume);
SYM(pa_context_get_state);
@@ -155,6 +156,7 @@ ecore_audio_pulse_lib_load(void)
SYM(pa_stream_connect_playback);
SYM(pa_stream_disconnect);
SYM(pa_stream_drain);
+ SYM(pa_stream_flush);
SYM(pa_stream_cork);
SYM(pa_stream_write);
SYM(pa_stream_begin_write);
@@ -261,13 +263,13 @@ ecore_audio_sndfile_lib_unload(void)
#endif /* HAVE_SNDFILE */
-EAPI const char*
+ECORE_AUDIO_API const char*
ecore_audio_obj_name_get(const Efl_Object* obj)
{
return efl_name_get(obj);
}
-EAPI void
+ECORE_AUDIO_API void
ecore_audio_obj_name_set(Efl_Object* obj, const char *name)
{
efl_name_set(obj, name);
diff --git a/src/lib/ecore_audio/ecore_audio_obj_in.c b/src/lib/ecore_audio/ecore_audio_obj_in.c
index b2a8f912c3..64ce45ba54 100644
--- a/src/lib/ecore_audio/ecore_audio_obj_in.c
+++ b/src/lib/ecore_audio/ecore_audio_obj_in.c
@@ -155,7 +155,10 @@ _ecore_audio_in_ecore_audio_vio_set(Eo *eo_obj, Ecore_Audio_Input *obj, Ecore_Au
Ecore_Audio_Object *ea_obj = efl_data_scope_get(eo_obj, ECORE_AUDIO_CLASS);
if (ea_obj->vio)
- _free_vio(ea_obj);
+ {
+ ERR("VIO already set!");
+ _free_vio(ea_obj);
+ }
obj->seekable = obj->seekable_prev;
@@ -184,9 +187,15 @@ _ecore_audio_in_efl_object_constructor(Eo *eo_obj, Ecore_Audio_Input *obj)
EOLIAN static void
_ecore_audio_in_efl_object_destructor(Eo *eo_obj, Ecore_Audio_Input *obj)
{
+ Ecore_Audio_Object *ea_obj = efl_data_scope_get(eo_obj, ECORE_AUDIO_CLASS);
if(obj->output)
- ecore_audio_obj_out_input_detach(obj->output, eo_obj);
+ {
+ if (!ecore_audio_obj_out_input_detach(obj->output, eo_obj))
+ ERR("Failed to detach output %p!", obj->output);
+ }
+ if (ea_obj->vio)
+ _free_vio(ea_obj);
efl_destructor(efl_super(eo_obj, MY_CLASS));
}
diff --git a/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c b/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c
index bebfba59d2..dc4bd4578d 100644
--- a/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c
+++ b/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c
@@ -135,15 +135,6 @@ _ecore_audio_in_sndfile_ecore_audio_format_get(const Eo *eo_obj, Ecore_Audio_In_
return obj->format;;
}
-static void _free_vio(Ecore_Audio_Object *ea_obj)
-{
- if (ea_obj->vio->free_func)
- ea_obj->vio->free_func(ea_obj->vio->data);
-
- free(ea_obj->vio);
- ea_obj->vio = NULL;
-}
-
EOLIAN static void
_ecore_audio_in_sndfile_ecore_audio_vio_set(Eo *eo_obj, Ecore_Audio_In_Sndfile_Data *obj, Ecore_Audio_Vio *vio, void *data, efl_key_data_free_func free_func)
{
@@ -156,27 +147,25 @@ _ecore_audio_in_sndfile_ecore_audio_vio_set(Eo *eo_obj, Ecore_Audio_In_Sndfile_D
obj->handle = NULL;
}
- eina_stringshare_replace(&ea_obj->source, "VIO");
-
- if (!ea_obj->source)
- return;
- if (ea_obj->vio)
- _free_vio(ea_obj);
+ if (vio)
+ eina_stringshare_replace(&ea_obj->source, "VIO");
+ else
+ eina_stringshare_replace(&ea_obj->source, NULL);
in_obj->seekable = EINA_FALSE;
+ ecore_audio_obj_vio_set(efl_super(eo_obj, MY_CLASS), vio, data, free_func);
if (!vio)
return;
-
- ea_obj->vio = calloc(1, sizeof(Ecore_Audio_Vio_Internal));
- ea_obj->vio->vio = vio;
- ea_obj->vio->data = data;
- ea_obj->vio->free_func = free_func;
in_obj->seekable = (vio->seek != NULL);
obj->handle = ESF_CALL(sf_open_virtual)(&vio_wrapper, SFM_READ, &obj->sfinfo, eo_obj);
if (!obj->handle) {
+ if (ea_obj->vio->free_func)
+ ea_obj->vio->free_func(ea_obj->vio->data);
+ free(ea_obj->vio);
+ ea_obj->vio = NULL;
eina_stringshare_del(ea_obj->source);
ea_obj->source = NULL;
return;
@@ -201,14 +190,9 @@ _ecore_audio_in_sndfile_ecore_audio_vio_set(Eo *eo_obj, Ecore_Audio_In_Sndfile_D
EOLIAN static void
_ecore_audio_in_sndfile_efl_object_destructor(Eo *eo_obj, Ecore_Audio_In_Sndfile_Data *obj)
{
- Ecore_Audio_Object *ea_obj = efl_data_scope_get(eo_obj, ECORE_AUDIO_CLASS);
-
if (obj->handle)
ESF_CALL(sf_close)(obj->handle);
- if (ea_obj->vio)
- _free_vio(ea_obj);
-
efl_destructor(efl_super(eo_obj, MY_CLASS));
}
diff --git a/src/lib/ecore_audio/ecore_audio_obj_out.c b/src/lib/ecore_audio/ecore_audio_obj_out.c
index 7e1d39beca..7a51e8c73d 100644
--- a/src/lib/ecore_audio/ecore_audio_obj_out.c
+++ b/src/lib/ecore_audio/ecore_audio_obj_out.c
@@ -118,7 +118,10 @@ _ecore_audio_out_ecore_audio_vio_set(Eo *eo_obj, Ecore_Audio_Output *_pd EINA_UN
Ecore_Audio_Object *ea_obj = efl_data_scope_get(eo_obj, ECORE_AUDIO_CLASS);
if (ea_obj->vio)
- _free_vio(ea_obj);
+ {
+ ERR("VIO already set!");
+ _free_vio(ea_obj);
+ }
if (!vio)
return;
@@ -144,11 +147,13 @@ _ecore_audio_out_efl_object_destructor(Eo *eo_obj, Ecore_Audio_Output *obj)
{
Eina_List *cur, *tmp;
Eo *in;
+ Ecore_Audio_Object *ea_obj = efl_data_scope_get(eo_obj, ECORE_AUDIO_CLASS);
EINA_LIST_FOREACH_SAFE(obj->inputs, cur, tmp, in) {
ecore_audio_obj_out_input_detach(eo_obj, in);
}
-
+ if (ea_obj->vio)
+ _free_vio(ea_obj);
efl_destructor(efl_super(eo_obj, MY_CLASS));
}
diff --git a/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c b/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c
index 5d61e0eb3e..463ecb6773 100644
--- a/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c
+++ b/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c
@@ -25,27 +25,19 @@ extern pa_mainloop_api functable;
#define MY_CLASS ECORE_AUDIO_OUT_PULSE_CLASS
#define MY_CLASS_NAME "Ecore_Audio_Out_Pulse"
-struct _Ecore_Audio_Pulse_Class {
- pa_mainloop_api *api;
- pa_context *context;
- pa_context_state_t state;
- Ecore_Job *state_job;
- Eina_List *outputs;
-};
-
-static struct _Ecore_Audio_Pulse_Class class_vars = {
- .api = &functable,
-};
-
struct _Ecore_Audio_Out_Pulse_Data
{
- char *foo;
+ pa_mainloop_api *api;
+ pa_context *context;
+ pa_context_state_t state;
+ Ecore_Job *state_job;
+ Eina_List *outputs;
};
typedef struct _Ecore_Audio_Out_Pulse_Data Ecore_Audio_Out_Pulse_Data;
EOLIAN static void
-_ecore_audio_out_pulse_ecore_audio_volume_set(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *_pd EINA_UNUSED, double volume)
+_ecore_audio_out_pulse_ecore_audio_volume_set(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *pd, double volume)
{
Eo *in;
pa_stream *stream = NULL;
@@ -65,7 +57,7 @@ _ecore_audio_out_pulse_ecore_audio_volume_set(Eo *eo_obj, Ecore_Audio_Out_Pulse_
EINA_LIST_FOREACH(out_obj->inputs, input, in) {
stream = efl_key_data_get(in, "pulse_data");
idx = EPA_CALL(pa_stream_get_index)(stream);
- EPA_CALL(pa_operation_unref)(EPA_CALL(pa_context_set_sink_input_volume)(class_vars.context, idx, &pa_volume, NULL, NULL));
+ EPA_CALL(pa_operation_unref)(EPA_CALL(pa_context_set_sink_input_volume)(pd->context, idx, &pa_volume, NULL, NULL));
}
}
@@ -114,6 +106,7 @@ static Eina_Bool _input_attach_internal(Eo *eo_obj, Eo *in)
pa_stream *stream;
Eina_Bool ret = EINA_FALSE;
Ecore_Audio_Object *ea_obj = efl_data_scope_get(eo_obj, ECORE_AUDIO_CLASS);
+ Ecore_Audio_Out_Pulse_Data *pd = efl_data_scope_get(eo_obj, MY_CLASS);
if (!EPA_LOAD()) return EINA_FALSE;
ret = ecore_audio_obj_out_input_attach(efl_super(eo_obj, MY_CLASS), in);
@@ -128,7 +121,7 @@ static Eina_Bool _input_attach_internal(Eo *eo_obj, Eo *in)
ss.rate = ss.rate * speed;
- stream = EPA_CALL(pa_stream_new)(class_vars.context, name, &ss, NULL);
+ stream = EPA_CALL(pa_stream_new)(pd->context, name, &ss, NULL);
if (!stream) {
ERR("Could not create stream");
ecore_audio_obj_out_input_detach(efl_super(eo_obj, MY_CLASS), in);
@@ -151,18 +144,27 @@ static Eina_Bool _input_attach_internal(Eo *eo_obj, Eo *in)
static void _delayed_attach_cb(void *data, const Efl_Event *event)
{
- Eo *in = data;
- efl_event_callback_del(event->object, ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_READY, _delayed_attach_cb, in);
+ efl_event_callback_del(event->object, ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_READY, _delayed_attach_cb, data);
- _input_attach_internal(event->object, in);
+ _input_attach_internal(event->object, data);
+}
+
+static Eina_Bool
+_is_input_attached(Eo *eo_obj, Eo *in)
+{
+ Ecore_Audio_Output *out_obj = efl_data_scope_get(eo_obj, ECORE_AUDIO_OUT_CLASS);
+ if (!out_obj->inputs) return EINA_FALSE;
+ return !!eina_list_data_find(out_obj->inputs, in);
}
EOLIAN static Eina_Bool
-_ecore_audio_out_pulse_ecore_audio_out_input_attach(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *_pd EINA_UNUSED, Eo *in)
+_ecore_audio_out_pulse_ecore_audio_out_input_attach(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *pd, Eo *in)
{
Eina_Bool retval = EINA_TRUE;
- if (class_vars.state != PA_CONTEXT_READY) {
+ if (_is_input_attached(eo_obj, in)) return EINA_TRUE;
+
+ if (pd->state != PA_CONTEXT_READY) {
DBG("Delaying input_attach because PA context is not ready.");
efl_event_callback_add(eo_obj, ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_READY, _delayed_attach_cb, in);
} else {
@@ -180,16 +182,32 @@ static void _drain_cb(pa_stream *stream, int success EINA_UNUSED, void *data EIN
}
EOLIAN static Eina_Bool
-_ecore_audio_out_pulse_ecore_audio_out_input_detach(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *_pd EINA_UNUSED, Eo *in)
+_ecore_audio_out_pulse_ecore_audio_out_input_detach(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *pd, Eo *in)
{
pa_stream *stream = NULL;
Eina_Bool ret2 = EINA_FALSE;
pa_operation *op;
- if (!EPA_LOAD()) return EINA_FALSE;
+ if (!EPA_LOAD())
+ {
+ ERR("Failed to load PA!");
+ return EINA_FALSE;
+ }
+ if (!_is_input_attached(eo_obj, in))
+ {
+ ERR("Input object passed is not currently attached to this output!");
+ return EINA_FALSE;
+ }
+ if (pd->state != PA_CONTEXT_READY)
+ efl_event_callback_del(in, ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_READY, _delayed_attach_cb, pd);
+ else
+ efl_event_callback_del(in, ECORE_AUDIO_IN_EVENT_IN_SAMPLERATE_CHANGED, _update_samplerate_cb, eo_obj);
ret2 = ecore_audio_obj_out_input_detach(efl_super(eo_obj, MY_CLASS), in);
if (!ret2)
- return EINA_FALSE;
+ {
+ ERR("Super call failed for ecore_audio_obj_out_input_detach!");
+ return EINA_FALSE;
+ }
stream = efl_key_data_get(in, "pulse_data");
@@ -197,7 +215,12 @@ _ecore_audio_out_pulse_ecore_audio_out_input_detach(Eo *eo_obj, Ecore_Audio_Out_
op = EPA_CALL(pa_stream_drain) (stream, _drain_cb, NULL);
if (!op)
{
- ERR("Failed to drain PulseAudio stream.");
+ op = EPA_CALL(pa_stream_flush)(stream, _drain_cb, NULL);
+ if (!op)
+ {
+ EPA_CALL(pa_stream_disconnect)(stream);
+ EPA_CALL(pa_stream_unref)(stream);
+ }
return EINA_FALSE;
}
@@ -205,67 +228,69 @@ _ecore_audio_out_pulse_ecore_audio_out_input_detach(Eo *eo_obj, Ecore_Audio_Out_
return EINA_TRUE;
}
-static void _state_cb(pa_context *context, void *data EINA_UNUSED)
+static void _state_cb(pa_context *context, void *data)
{
Eina_List *out, *tmp;
Eo *eo_obj;
pa_context_state_t state;
-
+ Ecore_Audio_Out_Pulse_Data *pd = data;
+
if (!EPA_LOAD()) return;
state = EPA_CALL(pa_context_get_state)(context);
- class_vars.state = state;
-
+ pd->state = state;
+
//ref everything in the list to be sure...
- EINA_LIST_FOREACH(class_vars.outputs, out, eo_obj) {
+ EINA_LIST_FOREACH(pd->outputs, out, eo_obj) {
efl_ref(eo_obj);
}
// the callback here can delete things in the list..
if (state == PA_CONTEXT_READY) {
DBG("PA context ready.");
- EINA_LIST_FOREACH(class_vars.outputs, out, eo_obj) {
+ EINA_LIST_FOREACH(pd->outputs, out, eo_obj) {
efl_event_callback_call(eo_obj, ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_READY, NULL);
}
} else if ((state == PA_CONTEXT_FAILED) || (state == PA_CONTEXT_TERMINATED)) {
DBG("PA context fail.");
- EINA_LIST_FOREACH(class_vars.outputs, out, eo_obj) {
+ EINA_LIST_FOREACH(pd->outputs, out, eo_obj) {
efl_event_callback_call(eo_obj, ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_FAIL, NULL);
}
} else {
DBG("Connection state %i", state);
}
// now unref everything safely
- EINA_LIST_FOREACH_SAFE(class_vars.outputs, out, tmp, eo_obj) {
+ EINA_LIST_FOREACH_SAFE(pd->outputs, out, tmp, eo_obj) {
efl_unref(eo_obj);
}
}
-static void _state_job(void *data EINA_UNUSED)
+static void _state_job(void *data)
{
- if ((class_vars.state == PA_CONTEXT_FAILED) ||
- (class_vars.state == PA_CONTEXT_TERMINATED))
+ Ecore_Audio_Out_Pulse_Data *pd = data;
+ if ((pd->state == PA_CONTEXT_FAILED) ||
+ (pd->state == PA_CONTEXT_TERMINATED))
{
Eo *eo_obj;
Eina_List *out, *tmp;
-
+
DBG("PA context fail.");
//ref everything in the list to be sure...
- EINA_LIST_FOREACH(class_vars.outputs, out, eo_obj) {
+ EINA_LIST_FOREACH(pd->outputs, out, eo_obj) {
efl_ref(eo_obj);
}
// the callback here can delete things in the list..
- EINA_LIST_FOREACH(class_vars.outputs, out, eo_obj) {
+ EINA_LIST_FOREACH(pd->outputs, out, eo_obj) {
efl_event_callback_call(eo_obj, ECORE_AUDIO_OUT_PULSE_EVENT_CONTEXT_FAIL, NULL);
}
// now unref everything safely
- EINA_LIST_FOREACH_SAFE(class_vars.outputs, out, tmp, eo_obj) {
+ EINA_LIST_FOREACH_SAFE(pd->outputs, out, tmp, eo_obj) {
efl_unref(eo_obj);
}
}
- class_vars.state_job = NULL;
+ pd->state_job = NULL;
}
EOLIAN static Eo *
-_ecore_audio_out_pulse_efl_object_constructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *_pd EINA_UNUSED)
+_ecore_audio_out_pulse_efl_object_constructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *pd)
{
int argc;
char **argv, *disp = NULL;
@@ -274,10 +299,11 @@ _ecore_audio_out_pulse_efl_object_constructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_
if (!EPA_LOAD()) return NULL;
eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
+ pd->api = &functable;
out_obj->need_writer = EINA_FALSE;
- if (!class_vars.context) {
+ if (!pd->context) {
// if we're in a wayland world rather than x11... but DISPLAY also set...
if (getenv("WAYLAND_DISPLAY")) disp = getenv("DISPLAY");
@@ -310,9 +336,9 @@ _ecore_audio_out_pulse_efl_object_constructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_
ecore_app_args_get(&argc, &argv);
if (!argc) {
DBG("Could not get program name, pulse outputs will be named ecore_audio");
- class_vars.context = EPA_CALL(pa_context_new)(class_vars.api, "ecore_audio");
+ pd->context = EPA_CALL(pa_context_new)(pd->api, "ecore_audio");
} else {
- class_vars.context = EPA_CALL(pa_context_new)(class_vars.api, basename(argv[0]));
+ pd->context = EPA_CALL(pa_context_new)(pd->api, basename(argv[0]));
}
// if we had a display value and a displayenv buffer then let's restore
// the previous value content of DISPLAY as we duplicated it above and
@@ -327,21 +353,22 @@ _ecore_audio_out_pulse_efl_object_constructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_
// free up our temporary local DISPLAY env sring copy if we have it
if (disp) free(disp);
- EPA_CALL(pa_context_set_state_callback)(class_vars.context, _state_cb, NULL);
- EPA_CALL(pa_context_connect)(class_vars.context, NULL, PA_CONTEXT_NOFLAGS, NULL);
+ EPA_CALL(pa_context_set_state_callback)(pd->context, _state_cb, pd);
+ EPA_CALL(pa_context_connect)(pd->context, NULL, PA_CONTEXT_NOFLAGS, NULL);
}
- class_vars.outputs = eina_list_append(class_vars.outputs, eo_obj);
- if (class_vars.state_job) ecore_job_del(class_vars.state_job);
- class_vars.state_job = ecore_job_add(_state_job, NULL);
+ pd->outputs = eina_list_append(pd->outputs, eo_obj);
+ pd->state_job = ecore_job_add(_state_job, pd);
return eo_obj;
}
EOLIAN static void
-_ecore_audio_out_pulse_efl_object_destructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *_pd EINA_UNUSED)
+_ecore_audio_out_pulse_efl_object_destructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *pd)
{
- class_vars.outputs = eina_list_remove(class_vars.outputs, eo_obj);
+ pd->outputs = eina_list_remove(pd->outputs, eo_obj);
+ ecore_job_del(pd->state_job);
+ EPA_CALL(pa_context_unref)(pd->context);
efl_destructor(efl_super(eo_obj, MY_CLASS));
}
diff --git a/src/lib/ecore_audio/ecore_audio_private.h b/src/lib/ecore_audio/ecore_audio_private.h
index 03947b120f..f406f4a1e7 100644
--- a/src/lib/ecore_audio/ecore_audio_private.h
+++ b/src/lib/ecore_audio/ecore_audio_private.h
@@ -168,6 +168,7 @@ struct _Ecore_Audio_Lib_Pulse
Eina_Module *mod;
pa_context *(*pa_context_new) (pa_mainloop_api *mainloop, const char *name);
+ pa_context *(*pa_context_unref) (pa_context *c);
int (*pa_context_connect) (pa_context *c, const char *server, pa_context_flags_t flags, const pa_spawn_api *api);
pa_operation *(*pa_context_set_sink_input_volume) (pa_context *c, uint32_t idx, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata);
pa_context_state_t (*pa_context_get_state) (pa_context *c);
@@ -179,6 +180,7 @@ struct _Ecore_Audio_Lib_Pulse
int (*pa_stream_connect_playback) (pa_stream *s, const char *dev, const pa_buffer_attr *attr, pa_stream_flags_t flags, const pa_cvolume *volume, pa_stream *sync_stream);
int (*pa_stream_disconnect) (pa_stream *s);
pa_operation *(*pa_stream_drain) (pa_stream *s, pa_stream_success_cb_t cb, void *userdata);
+ pa_operation *(*pa_stream_flush) (pa_stream *s, pa_stream_success_cb_t cb, void *userdata);
pa_operation *(*pa_stream_cork) (pa_stream *s, int b, pa_stream_success_cb_t cb, void *userdata);
int (*pa_stream_write) (pa_stream *p, const void *data, size_t nbytes, pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek);
int (*pa_stream_begin_write) (pa_stream *p, void **data, size_t *nbytes);
diff --git a/src/lib/ecore_audio/meson.build b/src/lib/ecore_audio/meson.build
index cbcaca4931..95ffddf5b5 100644
--- a/src/lib/ecore_audio/meson.build
+++ b/src/lib/ecore_audio/meson.build
@@ -1,5 +1,6 @@
ecore_audio_deps = [ecore]
ecore_audio_pub_deps = [eina, eo]
+ecore_audio_ext_deps = [m]
pub_eo_files = [
'ecore_audio.eo',
@@ -23,6 +24,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'ECORE_AUDIO_API',
'-gchd', '@INPUT@'])
endforeach
@@ -41,45 +43,46 @@ ecore_audio_header_src = [
'ecore_audio_obj_out_wasapi.h'
]
-ecore_audio_src = [
+ecore_audio_src = files([
'ecore_audio.c',
'ecore_audio_obj.c',
'ecore_audio_obj_in.c',
'ecore_audio_obj_out.c',
'ecore_audio_obj_in_tone.c',
'ecore_audio_private.h'
-]
+])
-ecore_audio_src += [
+ecore_audio_src += files([
'ecore_audio_obj_in_sndfile.c',
'ecore_audio_obj_out_sndfile.c',
'ecore_audio_sndfile_vio.c'
-]
+])
ecore_audio_deps += dependency('sndfile')
config_h.set('HAVE_SNDFILE', '1')
if get_option('pulseaudio')
- ecore_audio_deps += dependency('libpulse')
+ ecore_audio_ext_deps += dependency('libpulse')
- ecore_audio_src += [
+ ecore_audio_src += files([
'ecore_audio_pulse_ml.c',
'ecore_audio_obj_out_pulse.c'
- ]
+ ])
config_h.set('HAVE_PULSE', '1')
endif
if sys_windows == true
- ecore_audio_src += [
+ ecore_audio_src += files([
'ecore_audio_obj_out_wasapi.c'
- ]
- ecore_audio_deps += [cc.find_library('ksuser', required: true), cc.find_library('winmm', required: true)]
+ ])
+ ecore_audio_ext_deps += [cc.find_library('ksuser', required: true), cc.find_library('winmm', required: true)]
endif
ecore_audio_lib = library('ecore_audio',
ecore_audio_src, pub_eo_file_target,
- dependencies: ecore_audio_pub_deps + [m] + ecore_audio_deps,
+ c_args : [package_c_args, '-DECORE_AUDIO_BUILD'],
+ dependencies: ecore_audio_pub_deps + ecore_audio_deps + ecore_audio_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
@@ -92,11 +95,14 @@ ecore_audio = declare_dependency(
dependencies: ecore_audio_pub_deps,
)
-if get_option('install-eo-files')
- install_data(pub_eo_files + pub_eo_types_files,
- install_dir: eolian_ecore_dir
- )
-endif
+#
+# Only enable that again when the namespace problems are fixed. ref T8648
+#
+#if get_option('install-eo-files')
+# install_data(pub_eo_files + pub_eo_types_files,
+# install_dir: eolian_ecore_dir
+# )
+#endif
install_headers(ecore_audio_header_src,
install_dir : dir_package_include,
diff --git a/src/lib/ecore_avahi/meson.build b/src/lib/ecore_avahi/meson.build
index 40e037850a..6a14a4e9e9 100644
--- a/src/lib/ecore_avahi/meson.build
+++ b/src/lib/ecore_avahi/meson.build
@@ -9,6 +9,7 @@ config_h.set('HAVE_AVAHI', '1')
ecore_avahi_lib = library('ecore_avahi',
ecore_avahi_src,
+ c_args : package_c_args,
dependencies: [m] + ecore_avahi_deps + ecore_avahi_pub_deps,
include_directories : config_dir + [include_directories(join_paths('..','..'))],
install: true,
diff --git a/src/lib/ecore_buffer/bq_mgr_protocol.h b/src/lib/ecore_buffer/bq_mgr_protocol.h
index 7cf9ad9380..79d785d8ca 100644
--- a/src/lib/ecore_buffer/bq_mgr_protocol.h
+++ b/src/lib/ecore_buffer/bq_mgr_protocol.h
@@ -75,25 +75,10 @@ bq_mgr_create_provider(struct bq_mgr *bq_mgr, const char *name)
}
struct bq_consumer_listener {
- /**
- * connected - (none)
- */
void (*connected)(void *data,
struct bq_consumer *bq_consumer);
- /**
- * disconnected - (none)
- */
void (*disconnected)(void *data,
struct bq_consumer *bq_consumer);
- /**
- * buffer_attached - (none)
- * @buffer: (none)
- * @engine: (none)
- * @width: (none)
- * @height: (none)
- * @format: (none)
- * @flags: (none)
- */
void (*buffer_attached)(void *data,
struct bq_consumer *bq_consumer,
struct bq_buffer *buffer,
@@ -102,17 +87,6 @@ struct bq_consumer_listener {
int32_t height,
int32_t format,
uint32_t flags);
- /**
- * set_buffer_id - (none)
- * @buffer: (none)
- * @id: (none)
- * @offset0: (none)
- * @stride0: (none)
- * @offset1: (none)
- * @stride1: (none)
- * @offset2: (none)
- * @stride2: (none)
- */
void (*set_buffer_id)(void *data,
struct bq_consumer *bq_consumer,
struct bq_buffer *buffer,
@@ -123,17 +97,6 @@ struct bq_consumer_listener {
int32_t stride1,
int32_t offset2,
int32_t stride2);
- /**
- * set_buffer_fd - (none)
- * @buffer: (none)
- * @fd: (none)
- * @offset0: (none)
- * @stride0: (none)
- * @offset1: (none)
- * @stride1: (none)
- * @offset2: (none)
- * @stride2: (none)
- */
void (*set_buffer_fd)(void *data,
struct bq_consumer *bq_consumer,
struct bq_buffer *buffer,
@@ -144,18 +107,9 @@ struct bq_consumer_listener {
int32_t stride1,
int32_t offset2,
int32_t stride2);
- /**
- * buffer_detached - (none)
- * @buffer: (none)
- */
void (*buffer_detached)(void *data,
struct bq_consumer *bq_consumer,
struct bq_buffer *buffer);
- /**
- * add_buffer - (none)
- * @buffer: (none)
- * @serial: (none)
- */
void (*add_buffer)(void *data,
struct bq_consumer *bq_consumer,
struct bq_buffer *buffer,
@@ -206,27 +160,13 @@ enum bq_provider_error {
#endif /* BQ_PROVIDER_ERROR_ENUM */
struct bq_provider_listener {
- /**
- * connected - (none)
- * @queue_size: (none)
- * @width: (none)
- * @height: (none)
- */
void (*connected)(void *data,
struct bq_provider *bq_provider,
int32_t queue_size,
int32_t width,
int32_t height);
- /**
- * disconnected - (none)
- */
void (*disconnected)(void *data,
struct bq_provider *bq_provider);
- /**
- * add_buffer - (none)
- * @buffer: (none)
- * @serial: (none)
- */
void (*add_buffer)(void *data,
struct bq_provider *bq_provider,
struct bq_buffer *buffer,
diff --git a/src/lib/ecore_buffer/ecore_buffer_private.h b/src/lib/ecore_buffer/ecore_buffer_private.h
index 4e33772ed6..4487ea2a2c 100644
--- a/src/lib/ecore_buffer/ecore_buffer_private.h
+++ b/src/lib/ecore_buffer/ecore_buffer_private.h
@@ -1,29 +1,30 @@
#ifndef _ECORE_BUFFER_PRIVATE_H_
# define _ECORE_BUFFER_PRIVATE_H_
-#ifdef ERR
-#undef ERR
-#endif
-#ifdef WARN
-#undef WARN
-#endif
-#ifdef DBG
-#undef DBG
-#endif
+# ifdef ERR
+# undef ERR
+# endif
+# ifdef WARN
+# undef WARN
+# endif
+# ifdef DBG
+# undef DBG
+# endif
-#define ERR(...) EINA_LOG_DOM_ERR(_ecore_buffer_queue_log_dom, __VA_ARGS__)
-#define DBG(...) EINA_LOG_DOM_DBG(_ecore_buffer_queue_log_dom, __VA_ARGS__)
-#define WARN(...) EINA_LOG_DOM_WARN(_ecore_buffer_queue_log_dom, __VA_ARGS__)
+# define ERR(...) EINA_LOG_DOM_ERR(_ecore_buffer_queue_log_dom, __VA_ARGS__)
+# define DBG(...) EINA_LOG_DOM_DBG(_ecore_buffer_queue_log_dom, __VA_ARGS__)
+# define WARN(...) EINA_LOG_DOM_WARN(_ecore_buffer_queue_log_dom, __VA_ARGS__)
-#define CALLBACK_CALL(obj, cbname) \
-do { \
- if (obj->cb.cbname) \
- obj->cb.cbname(obj, obj->cb.data); \
-} while(0)
+# define CALLBACK_CALL(obj, cbname) \
+ do { \
+ if (obj->cb.cbname) \
+ obj->cb.cbname(obj, obj->cb.data); \
+ } while(0)
extern int _ecore_buffer_queue_log_dom;
const char *_ecore_buffer_engine_name_get(Ecore_Buffer *buf);
+
/* NOTE: if Ecore_Export_Type as a return value is EXPORT_TYPE_FD,
* then caller should close the fd after using it. */
Ecore_Export_Type _ecore_buffer_export(Ecore_Buffer *buf, int *id);
diff --git a/src/lib/ecore_buffer/ecore_buffer_provider.c b/src/lib/ecore_buffer/ecore_buffer_provider.c
index 53380fac84..e5cd4f0cf6 100644
--- a/src/lib/ecore_buffer/ecore_buffer_provider.c
+++ b/src/lib/ecore_buffer/ecore_buffer_provider.c
@@ -17,20 +17,20 @@ struct _Ecore_Buffer_Provider
Ecore_Buffer_Queue *ebq;
int free_slot;
struct
- {
- void (*consumer_add) (Ecore_Buffer_Provider *provider, int queue_size, int w, int h, void *data);
- void (*consumer_del) (Ecore_Buffer_Provider *provider, void *data);
- void (*enqueue) (Ecore_Buffer_Provider *provider, void *data);
- void *data;
- } cb;
+ {
+ void (*consumer_add) (Ecore_Buffer_Provider *provider, int queue_size, int w, int h, void *data);
+ void (*consumer_del) (Ecore_Buffer_Provider *provider, void *data);
+ void (*enqueue) (Ecore_Buffer_Provider *provider, void *data);
+ void *data;
+ } cb;
};
-static void _ecore_buffer_provider_cb_consumer_connected(void *data, struct bq_provider *bq_provider, int32_t queue_size, int32_t width, int32_t height);
-static void _ecore_buffer_provider_cb_consumer_disconnected(void *data, struct bq_provider *bq_provider);
-static void _ecore_buffer_provider_cb_add_buffer(void *data, struct bq_provider *bq_provider, struct bq_buffer *buffer, uint32_t serial);
+static void _ecore_buffer_provider_cb_consumer_connected(void *data, struct bq_provider *bq_provider, int32_t queue_size, int32_t width, int32_t height);
+static void _ecore_buffer_provider_cb_consumer_disconnected(void *data, struct bq_provider *bq_provider);
+static void _ecore_buffer_provider_cb_add_buffer(void *data, struct bq_provider *bq_provider, struct bq_buffer *buffer, uint32_t serial);
static Shared_Buffer *_ecore_buffer_provider_shared_buffer_new(Ecore_Buffer_Provider *provider, Ecore_Buffer *buffer);
-static void _ecore_buffer_provider_shared_buffer_free(Ecore_Buffer_Provider *provider, Shared_Buffer *sb);
-static void _ecore_buffer_provider_cb_buffer_free(Ecore_Buffer *buf, void *data);
+static void _ecore_buffer_provider_shared_buffer_free(Ecore_Buffer_Provider *provider, Shared_Buffer *sb);
+static void _ecore_buffer_provider_cb_buffer_free(Ecore_Buffer *buf, void *data);
struct bq_provider_listener _ecore_buffer_provider_listener =
{
@@ -83,7 +83,9 @@ ecore_buffer_provider_free(Ecore_Buffer_Provider *provider)
if (provider->ebq)
{
- shared_buffers = _ecore_buffer_queue_shared_buffer_list_get(provider->ebq);
+ shared_buffers =
+ _ecore_buffer_queue_shared_buffer_list_get(provider->ebq);
+
EINA_LIST_FOREACH(shared_buffers, l, sb)
_ecore_buffer_provider_shared_buffer_free(provider, sb);
@@ -183,7 +185,8 @@ ecore_buffer_provider_buffer_enqueue(Ecore_Buffer_Provider *provider, Ecore_Buff
}
_shared_buffer_state_set(sb, SHARED_BUFFER_STATE_ENQUEUE);
- bq_provider_enqueue_buffer(provider->resource, _shared_buffer_resource_get(sb), 0);
+ bq_provider_enqueue_buffer(provider->resource,
+ _shared_buffer_resource_get(sb), 0);
return EINA_TRUE;
}
@@ -255,7 +258,8 @@ _ecore_buffer_provider_cb_consumer_connected(void *data, struct bq_provider *bq_
// CALLBACK_CALL
if (provider->cb.consumer_add)
- provider->cb.consumer_add(provider, queue_size, width, height, provider->cb.data);
+ provider->cb.consumer_add(provider, queue_size, width, height,
+ provider->cb.data);
}
static void
@@ -298,7 +302,9 @@ static void
_ecore_buffer_provider_cb_buffer_free(Ecore_Buffer *buffer, void *data)
{
Ecore_Buffer_Provider *provider = data;
- Shared_Buffer *sb = _ecore_buffer_queue_shared_buffer_find(provider->ebq, buffer);
+ Shared_Buffer *sb;
+
+ sb = _ecore_buffer_queue_shared_buffer_find(provider->ebq, buffer);
EINA_SAFETY_ON_NULL_RETURN(provider);
@@ -334,7 +340,8 @@ _ecore_buffer_provider_shared_buffer_new(Ecore_Buffer_Provider *provider, Ecore_
engine = _ecore_buffer_engine_name_get(buffer);
flags = ecore_buffer_flags_get(buffer);
- buf_resource = bq_provider_attach_buffer(provider->resource, engine, w, h, format, flags);
+ buf_resource =
+ bq_provider_attach_buffer(provider->resource, engine, w, h, format, flags);
if (!buf_resource)
{
ERR("Fail to attach buffer - engine %s, size (%dx%d), format %d, flags %d",
@@ -362,7 +369,9 @@ _ecore_buffer_provider_shared_buffer_new(Ecore_Buffer_Provider *provider, Ecore_
_ecore_buffer_queue_shared_buffer_add(provider->ebq, sb);
bq_buffer_set_user_data(buf_resource, sb);
- ecore_buffer_free_callback_add(buffer, _ecore_buffer_provider_cb_buffer_free, provider);
+ ecore_buffer_free_callback_add(buffer,
+ _ecore_buffer_provider_cb_buffer_free,
+ provider);
return sb;
}
diff --git a/src/lib/ecore_buffer/meson.build b/src/lib/ecore_buffer/meson.build
index 4cf3fc65da..1d05cbe65b 100644
--- a/src/lib/ecore_buffer/meson.build
+++ b/src/lib/ecore_buffer/meson.build
@@ -1,12 +1,13 @@
-ecore_buffer_deps = [dependency('wayland-client'), dependency('wayland-server'), ecore]
+ecore_buffer_deps = [ecore]
ecore_buffer_pub_deps = [eina]
+ecore_buffer_ext_deps = [dependency('wayland-client'), dependency('wayland-server')]
ecore_buffer_header_src = [
'Ecore_Buffer.h',
'Ecore_Buffer_Queue.h'
]
-ecore_buffer_src = [
+ecore_buffer_src = files([
'bq_mgr_protocol.c',
'buffer_queue.c',
'shared_buffer.c',
@@ -15,11 +16,12 @@ ecore_buffer_src = [
'ecore_buffer_con.c',
'ecore_buffer_provider.c',
'ecore_buffer_consumer.c'
-]
+])
ecore_buffer_lib = library('ecore_buffer',
ecore_buffer_src, pub_eo_file_target,
- dependencies: ecore_buffer_pub_deps + ecore_buffer_deps,
+ c_args : package_c_args,
+ dependencies: ecore_buffer_pub_deps + ecore_buffer_deps + ecore_buffer_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/ecore_cocoa/Ecore_Cocoa.h b/src/lib/ecore_cocoa/Ecore_Cocoa.h
index 36f17b490b..a545d584d7 100644
--- a/src/lib/ecore_cocoa/Ecore_Cocoa.h
+++ b/src/lib/ecore_cocoa/Ecore_Cocoa.h
@@ -196,22 +196,6 @@ struct _Ecore_Cocoa_Event_Window_Destroy
Ecore_Cocoa_Object *cocoa_window; /**< Handler of the Cocoa window */
};
-/**
- * @typedef Ecore_Cocoa_Cnp_Type
- * Type used to interact with the Cocoa pasteboard.
- * It holds types that can apply to a context.
- * @since 1.18
- */
-typedef enum
-{
- ECORE_COCOA_CNP_TYPE_UNKNOWN = 0, /**< Undefined type */
- ECORE_COCOA_CNP_TYPE_STRING = (1 << 0), /**< String type (pure text) */
- ECORE_COCOA_CNP_TYPE_MARKUP = (1 << 1), /**< Elementary markup */
- ECORE_COCOA_CNP_TYPE_IMAGE = (1 << 2), /**< Image (all formats) */
- ECORE_COCOA_CNP_TYPE_HTML = (1 << 3) /**< HTML */
-} Ecore_Cocoa_Cnp_Type;
-
-
/*============================================================================*
* Core *
*============================================================================*/
@@ -561,27 +545,22 @@ EAPI void ecore_cocoa_terminate_cb_set(Ecore_Cocoa_Terminate_Cb cb)
* Sets the clipboard of Cocoa (NSPasteboard)
* @param data The contents to be set in the clipboard
* @param size The size in bytes of @c data
- * @param type
+ * @param mime_type The type of object to set the data
* @return EINA_TRUE on success, EINA_FALSE on failure
*/
EAPI Eina_Bool ecore_cocoa_clipboard_set(const void *data,
- int size,
- Ecore_Cocoa_Cnp_Type type);
+ int size,
+ const char *mime_type);
/*
* Gets the contents of the Cocoa clipboard
* @param size Pointer used to retrieve the size of the received contents
- * @param type The type of object to retrieve from the clipboard
- * @param retrieved_types The types of objects retrieved from the clipboard
+ * @param mime_type The type of object to retrieve from the clipboard
* @return The data retrieved from the clipboard. NULL on failure
*
- * If @c type was ECORE_COCOA_CNP_TYPE_STRING or ECORE_COCOA_CNP_TYPE_MARKUP,
- * @c retrieved_types will contain ECORE_COCOA_CNP_TYPE_STRING and the data
- * will be a C string (char*) that must be freed after use.
*/
EAPI void *ecore_cocoa_clipboard_get(int *size,
- Ecore_Cocoa_Cnp_Type type,
- Ecore_Cocoa_Cnp_Type *retrieved_types)
+ const char *mime_type)
EINA_WARN_UNUSED_RESULT;
/*
@@ -589,6 +568,11 @@ EAPI void *ecore_cocoa_clipboard_get(int *size,
*/
EAPI void ecore_cocoa_clipboard_clear(void);
+/*
+ * Returns true when the clipboard contains data that can be received.
+ */
+EAPI Eina_Bool ecore_cocoa_clipboard_exists(void);
+
#endif /* EFL_BETA_API_SUPPORT */
#ifdef __cplusplus
diff --git a/src/lib/ecore_cocoa/ecore_cocoa_app.h b/src/lib/ecore_cocoa/ecore_cocoa_app.h
index e6eac097fc..4eb9e7d752 100644
--- a/src/lib/ecore_cocoa/ecore_cocoa_app.h
+++ b/src/lib/ecore_cocoa/ecore_cocoa_app.h
@@ -9,6 +9,7 @@
Ecore_Timer *_timer;
NSDate *_expiration;
Ecore_Cocoa_Terminate_Cb _terminate_cb;
+ BOOL _is_running;
}
- (NSDate *)eventExpirationDate;
diff --git a/src/lib/ecore_cocoa/ecore_cocoa_app.m b/src/lib/ecore_cocoa/ecore_cocoa_app.m
index 8df1be1830..7d62e141e7 100644
--- a/src/lib/ecore_cocoa/ecore_cocoa_app.m
+++ b/src/lib/ecore_cocoa/ecore_cocoa_app.m
@@ -45,8 +45,7 @@ _ecore_cocoa_run_loop_cb(void *data EINA_UNUSED)
- (void)internalUpdate
{
- [_mainMenu update];
- // FIXME Will not compile with GNUStep (member is named "_main_menu")
+ [[self mainMenu] update];
}
- (id)init
@@ -72,11 +71,16 @@ _ecore_cocoa_run_loop_cb(void *data EINA_UNUSED)
return _expiration;
}
+- (BOOL)isRunning
+{
+ return _is_running;
+}
+
- (void)run
{
[self finishLaunching];
- _running = 1;
+ _is_running = YES;
_expiration = [NSDate distantPast];
_timer = ecore_timer_add(ECORE_COCOA_MAINLOOP_PERIOD,
diff --git a/src/lib/ecore_cocoa/ecore_cocoa_cnp.m b/src/lib/ecore_cocoa/ecore_cocoa_cnp.m
index c5fd22e99d..fabfc8c5a5 100644
--- a/src/lib/ecore_cocoa/ecore_cocoa_cnp.m
+++ b/src/lib/ecore_cocoa/ecore_cocoa_cnp.m
@@ -9,16 +9,17 @@
#import "ecore_cocoa_app.h"
EAPI Eina_Bool
-ecore_cocoa_clipboard_set(const void *data,
- int size,
- Ecore_Cocoa_Cnp_Type type)
+ecore_cocoa_clipboard_set(const void *data,
+ int size,
+ const char *raw_mime_type)
{
NSMutableArray *objects;
NSString *str = nil;
BOOL ok = YES;
+ NSString *mime_type = [NSString stringWithUTF8String:raw_mime_type];
objects = [[NSMutableArray alloc] init];
- if (type & ECORE_COCOA_CNP_TYPE_STRING)
+ if ([mime_type hasPrefix:@"text/"])
{
str = [[NSString alloc] initWithBytes: data
length: size
@@ -26,18 +27,9 @@ ecore_cocoa_clipboard_set(const void *data,
if (str)
[objects addObject: str];
}
- if (type & ECORE_COCOA_CNP_TYPE_MARKUP)
+ else
{
- WRN("Markup CNP: NOT IMPLEMENTED");
- }
-
- if (type & ECORE_COCOA_CNP_TYPE_IMAGE)
- {
- WRN("Image CNP: NOT IMPLEMENTED");
- }
- if (type & ECORE_COCOA_CNP_TYPE_HTML)
- {
- WRN("HTML CNP: NOT IMPLEMENTED");
+ ERR("Mimetype %s is not handled yet", raw_mime_type);
}
/* Write to pasteboard */
@@ -54,35 +46,45 @@ ecore_cocoa_clipboard_set(const void *data,
return (ok) ? EINA_TRUE : EINA_FALSE;
}
+EAPI Eina_Bool
+ecore_cocoa_clipboard_exists(void)
+{
+ NSDictionary *options;
+ NSPasteboard *pb;
+ NSArray *items;
+ NSMutableArray *classes;
+
+ classes = [[NSMutableArray alloc] init];
+ [classes addObject: [NSString class]]; // we only support strings for now
+ pb = [NSPasteboard generalPasteboard];
+ options = [NSDictionary dictionary];
+ return [pb canReadItemWithDataConformingToTypes: classes];
+}
EAPI void *
-ecore_cocoa_clipboard_get(int *size,
- Ecore_Cocoa_Cnp_Type type,
- Ecore_Cocoa_Cnp_Type *retrieved_types)
+ecore_cocoa_clipboard_get(int *size,
+ const char *raw_mime_type)
{
NSMutableArray *classes;
- void *data;
+ void *data = NULL;
NSDictionary *options;
NSPasteboard *pb;
NSArray *items;
unsigned int len;
BOOL string_class = NO;
- Ecore_Cocoa_Cnp_Type types = 0;
+ NSString *mime_type = [NSString stringWithUTF8String:raw_mime_type];
classes = [[NSMutableArray alloc] init];
- if (type & ECORE_COCOA_CNP_TYPE_STRING)
+ if ([mime_type hasPrefix:@"text/"])
{
string_class = YES;
[classes addObject: [NSString class]];
}
- if (type & ECORE_COCOA_CNP_TYPE_IMAGE)
- {
- WRN("Image CNP: NOT IMPLEMENTED");
- }
- if (type & ECORE_COCOA_CNP_TYPE_HTML)
+ else
{
- WRN("HTML CNP: NOT IMPLEMENTED");
+ ERR("Mimetype %s is not handled yet", raw_mime_type);
+ goto fail;
}
if ([classes count] <= 0)
@@ -120,7 +122,6 @@ ecore_cocoa_clipboard_get(int *size,
(const char *)data, len);
goto remove_fail;
}
- types |= ECORE_COCOA_CNP_TYPE_STRING;
#if 0
if (type & ECORE_COCOA_CNP_TYPE_MARKUP)
@@ -139,7 +140,7 @@ ecore_cocoa_clipboard_get(int *size,
#endif
}
- if (!types)
+ if (!data)
{
ERR("No types retrieved!");
goto remove_fail;
@@ -148,14 +149,12 @@ ecore_cocoa_clipboard_get(int *size,
[classes removeAllObjects];
if (size) *size = len;
- if (retrieved_types) *retrieved_types = types;
return data;
remove_fail:
[classes removeAllObjects];
fail:
if (size) *size = 0;
- if (retrieved_types) *retrieved_types = 0;
return NULL;
}
diff --git a/src/lib/ecore_cocoa/ecore_cocoa_keys.h b/src/lib/ecore_cocoa/ecore_cocoa_keys.h
index 9a3324c2c7..3cde2686f2 100644
--- a/src/lib/ecore_cocoa/ecore_cocoa_keys.h
+++ b/src/lib/ecore_cocoa/ecore_cocoa_keys.h
@@ -124,7 +124,7 @@ static const struct _ecore_cocoa_keys_s keystable[] =
{ 127, "BackSpace", "\x08" },
{ 126, "asciitilde", "~" },
-{ 160, "w0", "" },
+{ 160, "w0", "" },
{ 161, "w1", "" },
{ 162, "w2", "" },
{ 163, "w3", "" },
diff --git a/src/lib/ecore_cocoa/meson.build b/src/lib/ecore_cocoa/meson.build
index b7aca40031..a44d6a4d58 100644
--- a/src/lib/ecore_cocoa/meson.build
+++ b/src/lib/ecore_cocoa/meson.build
@@ -1,12 +1,18 @@
+cocoa_external_dep = declare_dependency(
+ link_args : ['-lobjc', '-framework', 'CoreFoundation', '-framework', 'cocoa', ],
+)
+
ecore_cocoa_deps = [eina, ecore_input, ecore, emile, eet]
ecore_cocoa_pub_deps = [eina]
+ecore_cocoa_ext_deps = [cocoa_external_dep]
+
pub_eo_file_target = []
ecore_cocoa_header_src = [
'Ecore_Cocoa.h'
]
-ecore_cocoa_src = [
+ecore_cocoa_src = files([
'ecore_cocoa.m',
'ecore_cocoa_keys.h',
'ecore_cocoa_window.h',
@@ -15,23 +21,22 @@ ecore_cocoa_src = [
'ecore_cocoa_app.m',
'ecore_cocoa_app.h',
'ecore_cocoa_private.h'
-]
+])
evas_include_directories = [
include_directories(join_paths('..', 'evas')),
include_directories(join_paths('..', 'evas','canvas')),
include_directories(join_paths('..', 'evas','common')),
- include_directories(join_paths('..', 'evas','common3d')),
- include_directories(join_paths('..', 'evas','common3d', 'save_load')),
include_directories(join_paths('..', 'evas','include')),
include_directories(join_paths('..', 'evas','filters'))
]
ecore_cocoa_lib = library('ecore_cocoa',
ecore_cocoa_src, pub_eo_file_target,
- dependencies: ecore_cocoa_deps + ecore_cocoa_pub_deps,
+ c_args : package_c_args,
+ dependencies: ecore_cocoa_deps + ecore_cocoa_pub_deps + ecore_cocoa_ext_deps,
+ link_args : '-Wl,-U,_evas_textblock_text_markup_to_utf8',
include_directories : config_dir + evas_include_directories,
- link_args : ['-lobjc', '-framework', 'CoreFoundation', '-framework', 'cocoa', '-Wl,-U,_evas_textblock_text_markup_to_utf8'],
install: true,
version : meson.project_version()
)
diff --git a/src/lib/ecore_con/Ecore_Con.h b/src/lib/ecore_con/Ecore_Con.h
index d8b9583c3d..2945b06a8f 100644
--- a/src/lib/ecore_con/Ecore_Con.h
+++ b/src/lib/ecore_con/Ecore_Con.h
@@ -15,31 +15,7 @@
#include "Efl_Net.h"
#endif
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <ecore_con_api.h>
/**
* @defgroup Ecore_Con_Group Ecore_Con - Connection functions
@@ -120,38 +96,38 @@
/**
* @defgroup Ecore_Con_Buffer Ecore Connection Buffering
* @ingroup Ecore_Con_Group
- *
+ *
* As Ecore_Con works on an event driven design, as data arrives, events will
* be produced containing the data that arrived. It is up to the user of
* Ecore_Con to either parse as they go, append to a file to later parse the
* whole file in one go, or append to memory to parse or handle later.
- *
- * To help with this Eina has some handy API's. The Eina_Binbuf and
- * Eina_Strbuf APIs, abstract dynamic buffer management and make it trivial
- * to handle buffers at runtime, without having to manage them. Eina_Binbuf
- * makes it possible to create, expand, reset and slice a blob of memory -
- * all via API. No system calls, no pointer manipulations and no size
+ *
+ * To help with this Eina has some handy API's. The Eina_Binbuf and
+ * Eina_Strbuf APIs, abstract dynamic buffer management and make it trivial
+ * to handle buffers at runtime, without having to manage them. Eina_Binbuf
+ * makes it possible to create, expand, reset and slice a blob of memory -
+ * all via API. No system calls, no pointer manipulations and no size
* calculation.
- *
- * Additional functions include adding content at specified byte positions in
- * the buffer, escaping the inputs, find and replace strings. This provides
+ *
+ * Additional functions include adding content at specified byte positions in
+ * the buffer, escaping the inputs, find and replace strings. This provides
* extreme flexibility to play around, with a dynamic blob of memory.
- *
+ *
* It is good to free it (using eina_binbuf_free()) after using it.
- *
+ *
* Eina_Binbuf compliments Ecore_Con use cases, where dynamic sizes of data
* arrive from the network (think http download in chunks). Using
* Eina_Binbuf provides enough flexibility to handle data as it arrives and
* to defer its processing until desired, without having to think about
* where to store the temporary data and how to manage its size.
- *
+ *
* An example of how to use these with Ecore_Con follows.
- *
+ *
* @code
* #include <Eina.h>
* #include <Ecore.h>
* #include <Ecore_Con.h>
- *
+ *
* static Eina_Bool
* data_callback(void *data, int type, void *event)
* {
@@ -161,56 +137,56 @@
* // append data as it arrives - don't worry where or how it gets stored.
* // Also don't worry about size, expanding, reallocing etc.
* // just keep appending - size is automatically handled.
- *
+ *
* eina_binbuf_append_length(data, url_data->data, url_data->size);
- *
+ *
* fprintf(stderr, "Appended %d \n", url_data->size);
* }
* return EINA_TRUE;
* }
- *
- *
- *
+ *
+ *
+ *
* static Eina_Bool
* completion_callback(void *data, int type, void *event)
* {
* Ecore_Con_Event_Url_Complete *url_complete = event;
* printf("download completed with status code: %d\n", url_complete->status);
- *
+ *
* // get the data back from Eina_Binbuf
* char *ptr = eina_binbuf_string_get(data);
* size_t size = eina_binbuf_length_get(data);
- *
+ *
* // process data as required (write to file)
* fprintf(stderr, "Size of data = %d bytes\n", size);
* int fd = open("./elm.png", O_CREAT);
* write(fd, ptr, size);
* close(fd);
- *
+ *
* // free it when done.
* eina_binbuf_free(data);
- *
+ *
* ecore_main_loop_quit();
- *
+ *
* return EINA_TRUE;
* }
- *
- *
+ *
+ *
* int
* main(int argc, char **argv)
* {
- *
+ *
* const char *url = "http://www.enlightenment.org/p/index/d/logo.png";
- *
+ *
* ecore_init();
* ecore_con_init();
* ecore_con_url_init();
- *
- *
+ *
+ *
* // This is single additional line to manage dynamic network data.
* Eina_Binbuf *data = eina_binbuf_new();
* Ecore_Con_Url *url_con = ecore_con_url_new(url);
- *
+ *
* ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE,
* completion_callback,
* data);
@@ -218,7 +194,7 @@
* data_callback,
* data);
* ecore_con_url_get(url_con);
- *
+ *
* ecore_main_loop_begin();
* return 0;
* }
@@ -633,51 +609,51 @@ struct _Ecore_Con_Event_Url_Progress
};
/** A client has connected to the server. */
-EAPI extern int ECORE_CON_EVENT_CLIENT_ADD;
+ECORE_CON_API extern int ECORE_CON_EVENT_CLIENT_ADD;
/** A client has disconnected from the server. */
-EAPI extern int ECORE_CON_EVENT_CLIENT_DEL;
+ECORE_CON_API extern int ECORE_CON_EVENT_CLIENT_DEL;
/** A client experienced an error.
* @since 1.1
*/
-EAPI extern int ECORE_CON_EVENT_CLIENT_ERROR;
+ECORE_CON_API extern int ECORE_CON_EVENT_CLIENT_ERROR;
/** A client connection has been upgraded to SSL.
* @since 1.1
*/
-EAPI extern int ECORE_CON_EVENT_CLIENT_UPGRADE;
+ECORE_CON_API extern int ECORE_CON_EVENT_CLIENT_UPGRADE;
/** A server was created. */
-EAPI extern int ECORE_CON_EVENT_SERVER_ADD;
+ECORE_CON_API extern int ECORE_CON_EVENT_SERVER_ADD;
/** A server connection was lost. */
-EAPI extern int ECORE_CON_EVENT_SERVER_DEL;
+ECORE_CON_API extern int ECORE_CON_EVENT_SERVER_DEL;
/** A server experienced an error.
* @since 1.1
*/
-EAPI extern int ECORE_CON_EVENT_SERVER_ERROR;
+ECORE_CON_API extern int ECORE_CON_EVENT_SERVER_ERROR;
/** A server connection has been upgraded to SSL.
* @since 1.1
*/
-EAPI extern int ECORE_CON_EVENT_SERVER_UPGRADE;
+ECORE_CON_API extern int ECORE_CON_EVENT_SERVER_UPGRADE;
/** A server connection has sent data to its client.
* @since 1.1
*/
-EAPI extern int ECORE_CON_EVENT_CLIENT_WRITE;
+ECORE_CON_API extern int ECORE_CON_EVENT_CLIENT_WRITE;
/** A server connection object has sent data.
* @since 1.1
*/
-EAPI extern int ECORE_CON_EVENT_SERVER_WRITE;
+ECORE_CON_API extern int ECORE_CON_EVENT_SERVER_WRITE;
/** A client connected to the server has sent data. */
-EAPI extern int ECORE_CON_EVENT_CLIENT_DATA;
+ECORE_CON_API extern int ECORE_CON_EVENT_CLIENT_DATA;
/** A server connection object has data.*/
-EAPI extern int ECORE_CON_EVENT_SERVER_DATA;
+ECORE_CON_API extern int ECORE_CON_EVENT_SERVER_DATA;
/** A server connection has successfully negotiated an ip:port binding.
* @since 1.2
*/
-EAPI extern int ECORE_CON_EVENT_PROXY_BIND;
+ECORE_CON_API extern int ECORE_CON_EVENT_PROXY_BIND;
/** A URL object has data. */
-EAPI extern int ECORE_CON_EVENT_URL_DATA;
+ECORE_CON_API extern int ECORE_CON_EVENT_URL_DATA;
/** A URL object has completed its transfer to and from the server and can be reused. */
-EAPI extern int ECORE_CON_EVENT_URL_COMPLETE;
+ECORE_CON_API extern int ECORE_CON_EVENT_URL_COMPLETE;
/** A URL object has made progress in its transfer. */
-EAPI extern int ECORE_CON_EVENT_URL_PROGRESS;
+ECORE_CON_API extern int ECORE_CON_EVENT_URL_PROGRESS;
/**
* @}
@@ -698,7 +674,7 @@ EAPI extern int ECORE_CON_EVENT_URL_PROGRESS;
* @note This function already calls ecore_init() internally, so you don't need
* to call it explicitly.
*/
-EAPI int ecore_con_init(void);
+ECORE_CON_API int ecore_con_init(void);
/**
* @brief Shuts down the Ecore_Con library.
@@ -707,7 +683,7 @@ EAPI int ecore_con_init(void);
* @note This function already calls ecore_shutdown() internally, so you don't
* need to call it explicitly unless you called ecore_init() explicitly too.
*/
-EAPI int ecore_con_shutdown(void);
+ECORE_CON_API int ecore_con_shutdown(void);
/**
* @brief Do an asynchronous DNS lookup.
@@ -727,7 +703,7 @@ EAPI int ecore_con_shutdown(void);
* @return @c true if the request did not fail to be set up, @c false
* otherwise.
*/
-EAPI Eina_Bool ecore_con_lookup(const char *name, Ecore_Con_Dns_Cb done_cb, const void *data) EINA_ARG_NONNULL(1);
+ECORE_CON_API Eina_Bool ecore_con_lookup(const char *name, Ecore_Con_Dns_Cb done_cb, const void *data) EINA_ARG_NONNULL(1);
/**
* @}
@@ -748,7 +724,7 @@ EAPI Eina_Bool ecore_con_lookup(const char *name, Ecore_Con_Dns_Cb done_cb, cons
* @c 2 if SSL is available and provided by openssl,
* @c 0 if it is not available.
*/
-EAPI int ecore_con_ssl_available_get(void);
+ECORE_CON_API int ecore_con_ssl_available_get(void);
/**
* @brief Adds an SSL certificate for use in ecore_con functions.
@@ -760,7 +736,7 @@ EAPI int ecore_con_ssl_available_get(void);
* @param cert The path to the certificate.
* @return @c EINA_FALSE if the file cannot be loaded, otherwise @c EINA_TRUE.
*/
-EAPI Eina_Bool ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, const char *cert);
+ECORE_CON_API Eina_Bool ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, const char *cert);
/**
* @brief Adds an SSL private key for use in ecore_con functions.
@@ -772,7 +748,7 @@ EAPI Eina_Bool ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, cons
* @param key_file The path to the key file.
* @return @c EINA_FALSE if the file cannot be loaded, otherwise @c EINA_TRUE.
*/
-EAPI Eina_Bool ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, const char *key_file);
+ECORE_CON_API Eina_Bool ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, const char *key_file);
/**
* @brief Adds an SSL CRL for use in ecore_con functions.
@@ -784,7 +760,7 @@ EAPI Eina_Bool ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, c
* @param crl_file The path to the CRL file.
* @return @c EINA_FALSE if the file cannot be loaded, otherwise @c EINA_TRUE.
*/
-EAPI Eina_Bool ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, const char *crl_file);
+ECORE_CON_API Eina_Bool ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, const char *crl_file);
/**
* @brief Adds an SSL CA file for use in ecore_con functions.
@@ -797,7 +773,7 @@ EAPI Eina_Bool ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, const
* @return @c EINA_FALSE if the file cannot be loaded, otherwise @c EINA_TRUE.
* @note since 1.2, this function can load directories.
*/
-EAPI Eina_Bool ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, const char *ca_file);
+ECORE_CON_API Eina_Bool ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, const char *ca_file);
/**
* @brief Enables certificate verification on a server object.
@@ -806,7 +782,7 @@ EAPI Eina_Bool ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, co
* to enable verification of certificates against loaded certificates.
* @param svr The server object
*/
-EAPI void ecore_con_ssl_server_verify(Ecore_Con_Server *svr);
+ECORE_CON_API void ecore_con_ssl_server_verify(Ecore_Con_Server *svr);
/**
* @brief Enables hostname-based certificate verification on a server object.
@@ -818,7 +794,7 @@ EAPI void ecore_con_ssl_server_verify(Ecore_Con_Server *svr);
* ecore_con_server_add.
* @since 1.1
*/
-EAPI void ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr);
+ECORE_CON_API void ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr);
/**
* @brief Sets the hostname to verify against in certificate verification.
@@ -833,7 +809,7 @@ EAPI void ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr);
* @param name The hostname to verify against
* @since 1.2
*/
-EAPI void ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *svr, const char *name);
+ECORE_CON_API void ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *svr, const char *name);
/**
* @brief Gets the hostname to verify against in certificate verification.
@@ -845,7 +821,7 @@ EAPI void ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *sv
* @return The hostname which will be used
* @since 1.2
*/
-EAPI const char *ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *svr);
+ECORE_CON_API const char *ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *svr);
/**
* @brief Upgrades a connection to a specified level of encryption.
@@ -860,7 +836,7 @@ EAPI const char *ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *sv
* @warning Setting a wrong value for @p ssl_type WILL mess up your program.
* @since 1.1
*/
-EAPI Eina_Bool ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type ssl_type);
+ECORE_CON_API Eina_Bool ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type ssl_type);
/**
* @brief Upgrades a connection to a specified level of encryption.
@@ -874,7 +850,7 @@ EAPI Eina_Bool ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore
* @warning Setting a wrong value for @p ssl_type WILL mess up your program.
* @since 1.1
*/
-EAPI Eina_Bool ecore_con_ssl_client_upgrade(Ecore_Con_Client *cl, Ecore_Con_Type ssl_type);
+ECORE_CON_API Eina_Bool ecore_con_ssl_client_upgrade(Ecore_Con_Client *cl, Ecore_Con_Type ssl_type);
/**
* @}
@@ -898,7 +874,7 @@ EAPI Eina_Bool ecore_con_ssl_client_upgrade(Ecore_Con_Client *cl, Ecore_
* @note This object NEVER needs to be explicitly freed.
* @since 1.2
*/
-EAPI Ecore_Con_Socks *ecore_con_socks4_remote_add(const char *ip, int port, const char *username);
+ECORE_CON_API Ecore_Con_Socks *ecore_con_socks4_remote_add(const char *ip, int port, const char *username);
/**
* @brief Finds a SOCKS v4 proxy in the proxy list.
@@ -913,7 +889,7 @@ EAPI Ecore_Con_Socks *ecore_con_socks4_remote_add(const char *ip, int port, cons
* ecore_con_socks4_remote_add() should be used to return the actual object.
* @since 1.2
*/
-EAPI Eina_Bool ecore_con_socks4_remote_exists(const char *ip, int port, const char *username);
+ECORE_CON_API Eina_Bool ecore_con_socks4_remote_exists(const char *ip, int port, const char *username);
/**
* @brief Removes a SOCKS v4 proxy from the proxy list and delete it.
@@ -927,7 +903,7 @@ EAPI Eina_Bool ecore_con_socks4_remote_exists(const char *ip, int port, c
* @warning Be aware that deleting a proxy which is being used WILL ruin your life.
* @since 1.2
*/
-EAPI void ecore_con_socks4_remote_del(const char *ip, int port, const char *username);
+ECORE_CON_API void ecore_con_socks4_remote_del(const char *ip, int port, const char *username);
/**
* @brief Adds a SOCKS v5 proxy to the proxy list.
@@ -942,7 +918,7 @@ EAPI void ecore_con_socks4_remote_del(const char *ip, int port, cons
* @note This object NEVER needs to be explicitly freed.
* @since 1.2
*/
-EAPI Ecore_Con_Socks *ecore_con_socks5_remote_add(const char *ip, int port, const char *username, const char *password);
+ECORE_CON_API Ecore_Con_Socks *ecore_con_socks5_remote_add(const char *ip, int port, const char *username, const char *password);
/**
* @brief Finds a SOCKS v5 proxy in the proxy list.
@@ -958,7 +934,7 @@ EAPI Ecore_Con_Socks *ecore_con_socks5_remote_add(const char *ip, int port, cons
* ecore_con_socks5_remote_add() should be used to return the actual object.
* @since 1.2
*/
-EAPI Eina_Bool ecore_con_socks5_remote_exists(const char *ip, int port, const char *username, const char *password);
+ECORE_CON_API Eina_Bool ecore_con_socks5_remote_exists(const char *ip, int port, const char *username, const char *password);
/**
* @brief Removes a SOCKS v5 proxy from the proxy list and delete it.
@@ -973,7 +949,7 @@ EAPI Eina_Bool ecore_con_socks5_remote_exists(const char *ip, int port, c
* @warning Be aware that deleting a proxy which is being used WILL ruin your life.
* @since 1.2
*/
-EAPI void ecore_con_socks5_remote_del(const char *ip, int port, const char *username, const char *password);
+ECORE_CON_API void ecore_con_socks5_remote_del(const char *ip, int port, const char *username, const char *password);
/**
* @brief Sets DNS lookup mode on an existing SOCKS proxy.
@@ -988,7 +964,7 @@ EAPI void ecore_con_socks5_remote_del(const char *ip, int port, cons
* @note By default, this setting is DISABLED.
* @since 1.2
*/
-EAPI void ecore_con_socks_lookup_set(Ecore_Con_Socks *ecs, Eina_Bool enable);
+ECORE_CON_API void ecore_con_socks_lookup_set(Ecore_Con_Socks *ecs, Eina_Bool enable);
/**
* @brief Gets DNS lookup mode on an existing SOCKS proxy.
@@ -1002,7 +978,7 @@ EAPI void ecore_con_socks_lookup_set(Ecore_Con_Socks *ecs, Eina_Bool
* @note By default, this setting is DISABLED.
* @since 1.2
*/
-EAPI Eina_Bool ecore_con_socks_lookup_get(Ecore_Con_Socks *ecs);
+ECORE_CON_API Eina_Bool ecore_con_socks_lookup_get(Ecore_Con_Socks *ecs);
/**
* @brief Enables bind mode on a SOCKS proxy.
@@ -1014,7 +990,7 @@ EAPI Eina_Bool ecore_con_socks_lookup_get(Ecore_Con_Socks *ecs);
* @warning Be aware that changing the operation mode of an active proxy may result in undefined behavior
* @since 1.2
*/
-EAPI void ecore_con_socks_bind_set(Ecore_Con_Socks *ecs, Eina_Bool is_bind);
+ECORE_CON_API void ecore_con_socks_bind_set(Ecore_Con_Socks *ecs, Eina_Bool is_bind);
/**
* @brief Returns bind mode of a SOCKS proxy.
@@ -1025,7 +1001,7 @@ EAPI void ecore_con_socks_bind_set(Ecore_Con_Socks *ecs, Eina_Bool i
* @return If true, the connection established will be a port binding.
* @since 1.2
*/
-EAPI Eina_Bool ecore_con_socks_bind_get(Ecore_Con_Socks *ecs);
+ECORE_CON_API Eina_Bool ecore_con_socks_bind_get(Ecore_Con_Socks *ecs);
/**
* @brief Returns SOCKS version of a SOCKS proxy.
@@ -1035,7 +1011,7 @@ EAPI Eina_Bool ecore_con_socks_bind_get(Ecore_Con_Socks *ecs);
* @return @c 0 on error, else @c 4/5
* @since 1.2
*/
-EAPI unsigned int ecore_con_socks_version_get(Ecore_Con_Socks *ecs);
+ECORE_CON_API unsigned int ecore_con_socks_version_get(Ecore_Con_Socks *ecs);
/**
* @brief Removes a SOCKS v4 proxy from the proxy list and delete it.
@@ -1045,7 +1021,7 @@ EAPI unsigned int ecore_con_socks_version_get(Ecore_Con_Socks *ecs);
* @warning Be aware that deleting a proxy which is being used WILL ruin your life.
* @since 1.2
*/
-EAPI void ecore_con_socks_remote_del(Ecore_Con_Socks *ecs);
+ECORE_CON_API void ecore_con_socks_remote_del(Ecore_Con_Socks *ecs);
/**
* @brief Sets a proxy object to be used with the next server created with ecore_con_server_connect().
@@ -1056,7 +1032,7 @@ EAPI void ecore_con_socks_remote_del(Ecore_Con_Socks *ecs);
* @see ecore_con_socks_apply_always()
* @since 1.2
*/
-EAPI void ecore_con_socks_apply_once(Ecore_Con_Socks *ecs);
+ECORE_CON_API void ecore_con_socks_apply_once(Ecore_Con_Socks *ecs);
/**
* @brief Sets a proxy object to be used with all servers created with ecore_con_server_connect().
@@ -1073,7 +1049,7 @@ EAPI void ecore_con_socks_apply_once(Ecore_Con_Socks *ecs);
* port is the port to connect to on the proxy server.
* lookup is 1 if the proxy should perform all DNS lookups, otherwise 0 or omitted.
*/
-EAPI void ecore_con_socks_apply_always(Ecore_Con_Socks *ecs);
+ECORE_CON_API void ecore_con_socks_apply_always(Ecore_Con_Socks *ecs);
/**
* @}
@@ -1178,7 +1154,7 @@ EAPI void ecore_con_socks_apply_always(Ecore_Con_Socks *ecs);
*
* @since 1.19
*/
-EAPI char *ecore_con_local_path_new(Eina_Bool is_system, const char *name, int port) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(2);
+ECORE_CON_API char *ecore_con_local_path_new(Eina_Bool is_system, const char *name, int port) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(2);
/**
* @brief Creates a server to listen for connections.
@@ -1222,7 +1198,7 @@ EAPI char *ecore_con_local_path_new(Eina_Bool is_system, const char *name, int p
* #EFL_NET_SERVER_SIMPLE_CLASS.
* See @li @ref efl_net_server_simple_example.c
*/
-EAPI Ecore_Con_Server *ecore_con_server_add(Ecore_Con_Type type,
+ECORE_CON_API Ecore_Con_Server *ecore_con_server_add(Ecore_Con_Type type,
const char *name, int port,
const void *data);
@@ -1278,7 +1254,7 @@ EAPI Ecore_Con_Server *ecore_con_server_add(Ecore_Con_Type type,
* #EFL_NET_DIALER_SIMPLE_CLASS.
* See @li @ref efl_net_dialer_simple_example.c
*/
-EAPI Ecore_Con_Server *ecore_con_server_connect(Ecore_Con_Type type,
+ECORE_CON_API Ecore_Con_Server *ecore_con_server_connect(Ecore_Con_Type type,
const char *name, int port,
const void *data);
/**
@@ -1291,7 +1267,7 @@ EAPI Ecore_Con_Server *ecore_con_server_connect(Ecore_Con_Type type,
*
* @see ecore_con_server_add, ecore_con_server_connect
*/
-EAPI void * ecore_con_server_del(Ecore_Con_Server *svr);
+ECORE_CON_API void * ecore_con_server_del(Ecore_Con_Server *svr);
/**
* @brief Retrieves the name of server.
@@ -1303,7 +1279,7 @@ EAPI void * ecore_con_server_del(Ecore_Con_Server *svr);
*
* @ingroup Efl_Network_Server
*/
-EAPI const char *ecore_con_server_name_get(const Ecore_Con_Server *svr);
+ECORE_CON_API const char *ecore_con_server_name_get(const Ecore_Con_Server *svr);
/**
* @brief Retrieves the data associated with the given server.
@@ -1313,7 +1289,7 @@ EAPI const char *ecore_con_server_name_get(const Ecore_Con_Server *svr);
*
* @see ecore_con_server_data_set()
*/
-EAPI void * ecore_con_server_data_get(Ecore_Con_Server *svr);
+ECORE_CON_API void * ecore_con_server_data_get(Ecore_Con_Server *svr);
/**
* @brief Sets the data associated with the given server.
*
@@ -1323,7 +1299,7 @@ EAPI void * ecore_con_server_data_get(Ecore_Con_Server *svr);
*
* @see ecore_con_server_data_get()
*/
-EAPI void * ecore_con_server_data_set(Ecore_Con_Server *svr,
+ECORE_CON_API void * ecore_con_server_data_set(Ecore_Con_Server *svr,
void *data);
/**
* @brief Retrieves whether the given server is currently connected.
@@ -1331,7 +1307,7 @@ EAPI void * ecore_con_server_data_set(Ecore_Con_Server *svr,
* @param svr The given server.
* @return @c EINA_TRUE if the server is connected, @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool ecore_con_server_connected_get(const Ecore_Con_Server *svr);
+ECORE_CON_API Eina_Bool ecore_con_server_connected_get(const Ecore_Con_Server *svr);
/**
* @brief Retrieves the server port in use.
@@ -1341,7 +1317,7 @@ EAPI Eina_Bool ecore_con_server_connected_get(const Ecore_Con_Server *sv
*
* The port where the server is listening for connections.
*/
-EAPI int ecore_con_server_port_get(const Ecore_Con_Server *svr);
+ECORE_CON_API int ecore_con_server_port_get(const Ecore_Con_Server *svr);
/**
* @brief Checks how long a server has been connected.
*
@@ -1352,7 +1328,7 @@ EAPI int ecore_con_server_port_get(const Ecore_Con_Server *svr);
* This function is used to find out the time that has been elapsed since
* ecore_con_server_add() succeeded.
*/
-EAPI double ecore_con_server_uptime_get(const Ecore_Con_Server *svr);
+ECORE_CON_API double ecore_con_server_uptime_get(const Ecore_Con_Server *svr);
/**
* @brief Sends the given data to the given server.
*
@@ -1370,7 +1346,7 @@ EAPI double ecore_con_server_uptime_get(const Ecore_Con_Server *svr);
* @see ecore_con_client_send()
* @see ecore_con_server_flush()
*/
-EAPI int ecore_con_server_send(Ecore_Con_Server *svr,
+ECORE_CON_API int ecore_con_server_send(Ecore_Con_Server *svr,
const void *data,
int size);
/**
@@ -1396,7 +1372,7 @@ EAPI int ecore_con_server_send(Ecore_Con_Server *svr,
* clients have already connected and will not be affected by this call.
* Only clients subsequently trying to connect will be affected.
*/
-EAPI void ecore_con_server_client_limit_set(Ecore_Con_Server *svr,
+ECORE_CON_API void ecore_con_server_client_limit_set(Ecore_Con_Server *svr,
int client_limit,
char reject_excess_clients);
@@ -1412,7 +1388,7 @@ EAPI void ecore_con_server_client_limit_set(Ecore_Con_Server *svr,
* @return The list of clients on this server.
*
*/
-EAPI const Eina_List *ecore_con_server_clients_get(const Ecore_Con_Server *svr);
+ECORE_CON_API const Eina_List *ecore_con_server_clients_get(const Ecore_Con_Server *svr);
/**
* @brief Gets the IP address of a server that has been connected to.
@@ -1424,7 +1400,7 @@ EAPI const Eina_List *ecore_con_server_clients_get(const Ecore_Con_Server *svr);
* deletion for the @p svr object. If no IP is known @c NULL is
* returned.
*/
-EAPI const char * ecore_con_server_ip_get(const Ecore_Con_Server *svr);
+ECORE_CON_API const char * ecore_con_server_ip_get(const Ecore_Con_Server *svr);
/**
* @brief Flushes all pending data to the given server.
*
@@ -1435,7 +1411,7 @@ EAPI const char * ecore_con_server_ip_get(const Ecore_Con_Server *svr);
* @see ecore_con_server_send()
* @see ecore_con_client_flush()
*/
-EAPI void ecore_con_server_flush(Ecore_Con_Server *svr);
+ECORE_CON_API void ecore_con_server_flush(Ecore_Con_Server *svr);
/**
* @brief Sets the default time after which an inactive client will be disconnected.
*
@@ -1454,7 +1430,7 @@ EAPI void ecore_con_server_flush(Ecore_Con_Server *svr);
* @see ecore_con_server_timeout_get()
* @see ecore_con_client_timeout_set()
*/
-EAPI void ecore_con_server_timeout_set(Ecore_Con_Server *svr, double timeout);
+ECORE_CON_API void ecore_con_server_timeout_set(Ecore_Con_Server *svr, double timeout);
/**
* @brief Gets the default time after which an inactive client will be disconnected.
*
@@ -1467,7 +1443,7 @@ EAPI void ecore_con_server_timeout_set(Ecore_Con_Server *svr, doubl
* @see ecore_con_server_timeout_set()
* @see ecore_con_client_timeout_get()
*/
-EAPI double ecore_con_server_timeout_get(const Ecore_Con_Server *svr);
+ECORE_CON_API double ecore_con_server_timeout_get(const Ecore_Con_Server *svr);
/**
* @brief Gets the fd that the server is connected to.
@@ -1481,7 +1457,7 @@ EAPI double ecore_con_server_timeout_get(const Ecore_Con_Server *svr)
* @warning Seriously. Don't use this unless you know what you are doing.
* @since 1.1
*/
-EAPI int ecore_con_server_fd_get(const Ecore_Con_Server *svr);
+ECORE_CON_API int ecore_con_server_fd_get(const Ecore_Con_Server *svr);
/**
* @brief Gets the fd that the client is connected to.
@@ -1493,7 +1469,7 @@ EAPI int ecore_con_server_fd_get(const Ecore_Con_Server *svr);
* It should not be tampered with unless you REALLY know what you are doing.
* @since 1.1
*/
-EAPI int ecore_con_client_fd_get(const Ecore_Con_Client *cl);
+ECORE_CON_API int ecore_con_client_fd_get(const Ecore_Con_Client *cl);
/**
* @}
*/
@@ -1535,7 +1511,7 @@ EAPI int ecore_con_client_fd_get(const Ecore_Con_Client *cl);
* @see ecore_con_server_send()
* @see ecore_con_client_flush()
*/
-EAPI int ecore_con_client_send(Ecore_Con_Client *cl,
+ECORE_CON_API int ecore_con_client_send(Ecore_Con_Client *cl,
const void *data,
int size);
/**
@@ -1544,14 +1520,14 @@ EAPI int ecore_con_client_send(Ecore_Con_Client *cl,
* @param cl The given client.
* @return Data associated with the client.
*/
-EAPI void * ecore_con_client_del(Ecore_Con_Client *cl);
+ECORE_CON_API void * ecore_con_client_del(Ecore_Con_Client *cl);
/**
* @brief Sets the data associated with the given client to @p data.
*
* @param cl The given client.
* @param data What to set the data to.
*/
-EAPI void ecore_con_client_data_set(Ecore_Con_Client *cl,
+ECORE_CON_API void ecore_con_client_data_set(Ecore_Con_Client *cl,
const void *data);
/**
* @brief Retrieves the data associated with the given client.
@@ -1559,7 +1535,7 @@ EAPI void ecore_con_client_data_set(Ecore_Con_Client *cl,
* @param cl The given client.
* @return The data associated with @p cl.
*/
-EAPI void * ecore_con_client_data_get(Ecore_Con_Client *cl);
+ECORE_CON_API void * ecore_con_client_data_get(Ecore_Con_Client *cl);
/**
* @brief Gets the IP address of a client that has connected.
@@ -1571,7 +1547,7 @@ EAPI void * ecore_con_client_data_get(Ecore_Con_Client *cl);
* The returned string should not be modified, freed or trusted to stay valid
* after deletion for the @p cl object. If no IP is known @c NULL is returned.
*/
-EAPI const char * ecore_con_client_ip_get(const Ecore_Con_Client *cl);
+ECORE_CON_API const char * ecore_con_client_ip_get(const Ecore_Con_Client *cl);
/**
* @brief Flushes all pending data to the given client.
*
@@ -1582,7 +1558,7 @@ EAPI const char * ecore_con_client_ip_get(const Ecore_Con_Client *cl);
* @see ecore_con_client_send()
* @see ecore_con_server_flush()
*/
-EAPI void ecore_con_client_flush(Ecore_Con_Client *cl);
+ECORE_CON_API void ecore_con_client_flush(Ecore_Con_Client *cl);
/**
* @brief Checks how long a client has been connected.
*
@@ -1592,7 +1568,7 @@ EAPI void ecore_con_client_flush(Ecore_Con_Client *cl);
*
* This function is used to find out how long a client has been connected for.
*/
-EAPI double ecore_con_client_uptime_get(const Ecore_Con_Client *cl);
+ECORE_CON_API double ecore_con_client_uptime_get(const Ecore_Con_Client *cl);
/**
* @brief Gets the default time after which the client will be disconnected when
* inactive.
@@ -1605,7 +1581,7 @@ EAPI double ecore_con_client_uptime_get(const Ecore_Con_Client *cl);
*
* @see ecore_con_client_timeout_set()
*/
-EAPI double ecore_con_client_timeout_get(const Ecore_Con_Client *cl);
+ECORE_CON_API double ecore_con_client_timeout_get(const Ecore_Con_Client *cl);
/**
* @brief Sets the time after which the client will be disconnected when inactive.
*
@@ -1625,14 +1601,14 @@ EAPI double ecore_con_client_timeout_get(const Ecore_Con_Client *cl);
* @see ecore_con_client_timeout_get()
* @see ecore_con_server_timeout_set()
*/
-EAPI void ecore_con_client_timeout_set(Ecore_Con_Client *cl, double timeout);
+ECORE_CON_API void ecore_con_client_timeout_set(Ecore_Con_Client *cl, double timeout);
/**
* @brief Returns whether the client is still connected.
*
* @param cl The given client.
* @return @c EINA_TRUE if connected, @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool ecore_con_client_connected_get(const Ecore_Con_Client *cl);
+ECORE_CON_API Eina_Bool ecore_con_client_connected_get(const Ecore_Con_Client *cl);
/**
* @brief Returns the port that the client has connected to.
*
@@ -1640,7 +1616,7 @@ EAPI Eina_Bool ecore_con_client_connected_get(const Ecore_Con_Client *cl
* @return The port that @p cl has connected to, or @c -1 on error
* Use this function to return the port on which a given client has connected.
*/
-EAPI int ecore_con_client_port_get(const Ecore_Con_Client *cl);
+ECORE_CON_API int ecore_con_client_port_get(const Ecore_Con_Client *cl);
/**
* @brief The server the client is connected to.
@@ -1648,7 +1624,7 @@ EAPI int ecore_con_client_port_get(const Ecore_Con_Client *cl);
* @param cl The client
* @return The server the client is connected to.
*/
-EAPI Ecore_Con_Server *ecore_con_client_server_get(const Ecore_Con_Client *cl);
+ECORE_CON_API Ecore_Con_Server *ecore_con_client_server_get(const Ecore_Con_Client *cl);
/**
* @}
@@ -1773,7 +1749,7 @@ typedef enum _Ecore_Con_Url_Http_Version
* @since 1.2
* @see ecore_con_url_pipeline_get()
*/
-EAPI Eina_Bool ecore_con_url_http_version_set(Ecore_Con_Url *url_con, Ecore_Con_Url_Http_Version version);
+ECORE_CON_API Eina_Bool ecore_con_url_http_version_set(Ecore_Con_Url *url_con, Ecore_Con_Url_Http_Version version);
/**
* @brief Initializes the Ecore_Con_Url library.
@@ -1783,7 +1759,7 @@ EAPI Eina_Bool ecore_con_url_http_version_set(Ecore_Con_Url *url_con, Ec
* @note This function doesn't call ecore_con_init(). You still need to call it
* explicitly before calling this one.
*/
-EAPI int ecore_con_url_init(void);
+ECORE_CON_API int ecore_con_url_init(void);
/**
* @brief Shuts down the Ecore_Con_Url library.
@@ -1792,7 +1768,7 @@ EAPI int ecore_con_url_init(void);
* @note This function doesn't call ecore_con_shutdown(). You still need to call
* it explicitly after calling this one.
*/
-EAPI int ecore_con_url_shutdown(void);
+ECORE_CON_API int ecore_con_url_shutdown(void);
/**
* @brief Enables or disable HTTP 1.1 pipelining.
@@ -1809,14 +1785,14 @@ EAPI int ecore_con_url_shutdown(void);
*
* @see ecore_con_url_pipeline_get()
*/
-EAPI void ecore_con_url_pipeline_set(Eina_Bool enable);
+ECORE_CON_API void ecore_con_url_pipeline_set(Eina_Bool enable);
/**
* @brief Is HTTP 1.1 pipelining enable ?
* @return @c EINA_TRUE if it is enable.
*
* @see ecore_con_url_pipeline_set()
*/
-EAPI Eina_Bool ecore_con_url_pipeline_get(void);
+ECORE_CON_API Eina_Bool ecore_con_url_pipeline_get(void);
/**
* @brief Creates and initializes a new Ecore_Con_Url connection object.
@@ -1832,7 +1808,7 @@ EAPI Eina_Bool ecore_con_url_pipeline_get(void);
* @see ecore_con_url_custom_new()
* @see ecore_con_url_url_set()
*/
-EAPI Ecore_Con_Url * ecore_con_url_new(const char *url);
+ECORE_CON_API Ecore_Con_Url * ecore_con_url_new(const char *url);
/**
@@ -1842,7 +1818,7 @@ EAPI Ecore_Con_Url * ecore_con_url_new(const char *url);
* @param url the new URL.
* @return @c EINA_TRUE on success, @c EINA_FALSE on errors.
*/
-EAPI Eina_Bool ecore_con_url_url_set(Ecore_Con_Url *url_con,
+ECORE_CON_API Eina_Bool ecore_con_url_url_set(Ecore_Con_Url *url_con,
const char *url);
/**
@@ -1851,7 +1827,7 @@ EAPI Eina_Bool ecore_con_url_url_set(Ecore_Con_Url *url_con,
* @param url_con the Connection object to retrieve URL.
* @return @c NULL on error, read-only URL string on success.
*/
-EAPI const char *ecore_con_url_url_get(Ecore_Con_Url *url_con);
+ECORE_CON_API const char *ecore_con_url_url_get(Ecore_Con_Url *url_con);
/**
* @brief Creates a custom connection object.
@@ -1868,7 +1844,7 @@ EAPI const char *ecore_con_url_url_get(Ecore_Con_Url *url_con);
* @see ecore_con_url_new()
* @see ecore_con_url_url_set()
*/
-EAPI Ecore_Con_Url * ecore_con_url_custom_new(const char *url,
+ECORE_CON_API Ecore_Con_Url * ecore_con_url_custom_new(const char *url,
const char *custom_request);
/**
* @brief Destroys an Ecore_Con_Url connection object.
@@ -1877,7 +1853,7 @@ EAPI Ecore_Con_Url * ecore_con_url_custom_new(const char *url,
*
* @see ecore_con_url_new()
*/
-EAPI void ecore_con_url_free(Ecore_Con_Url *url_con);
+ECORE_CON_API void ecore_con_url_free(Ecore_Con_Url *url_con);
/**
* @brief Associates data with a connection object.
@@ -1890,7 +1866,7 @@ EAPI void ecore_con_url_free(Ecore_Con_Url *url_con);
*
* @see ecore_con_url_data_get()
*/
-EAPI void ecore_con_url_data_set(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_data_set(Ecore_Con_Url *url_con,
void *data);
/**
* @brief Retrieves data associated with a Ecore_Con_Url connection object.
@@ -1904,7 +1880,7 @@ EAPI void ecore_con_url_data_set(Ecore_Con_Url *url_con,
*
* @see ecore_con_url_data_set()
*/
-EAPI void * ecore_con_url_data_get(Ecore_Con_Url *url_con);
+ECORE_CON_API void * ecore_con_url_data_get(Ecore_Con_Url *url_con);
/**
* @brief Adds an additional header to the request connection object.
*
@@ -1922,7 +1898,7 @@ EAPI void * ecore_con_url_data_get(Ecore_Con_Url *url_con);
* @see ecore_con_url_post()
* @see ecore_con_url_additional_headers_clear()
*/
-EAPI void ecore_con_url_additional_header_add(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_additional_header_add(Ecore_Con_Url *url_con,
const char *key,
const char *value);
/**
@@ -1937,7 +1913,7 @@ EAPI void ecore_con_url_additional_header_add(Ecore_Con_Url *url_co
* @see ecore_con_url_get()
* @see ecore_con_url_post()
*/
-EAPI void ecore_con_url_additional_headers_clear(Ecore_Con_Url *url_con);
+ECORE_CON_API void ecore_con_url_additional_headers_clear(Ecore_Con_Url *url_con);
/**
* @brief Retrieves headers from last request sent.
*
@@ -1949,7 +1925,7 @@ EAPI void ecore_con_url_additional_headers_clear(Ecore_Con_Url *url
*
* @return List of response headers. This list must not be modified by the user.
*/
-EAPI const Eina_List * ecore_con_url_response_headers_get(Ecore_Con_Url *url_con);
+ECORE_CON_API const Eina_List * ecore_con_url_response_headers_get(Ecore_Con_Url *url_con);
/**
* @brief Sets up a file for receiving response data.
*
@@ -1964,7 +1940,7 @@ EAPI const Eina_List * ecore_con_url_response_headers_get(Ecore_Con_Url *url_con
* This call can be used to easily setup a file where the downloaded data will
* be saved.
*/
-EAPI void ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd);
+ECORE_CON_API void ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd);
/**
* @brief Retrieves the number of bytes received.
*
@@ -1978,7 +1954,7 @@ EAPI void ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd);
* @see ecore_con_url_get()
* @see ecore_con_url_post()
*/
-EAPI int ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con);
+ECORE_CON_API int ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con);
/**
* @brief Sets url_con to use http auth, with given username and password, "safely" or not.
*
@@ -1993,7 +1969,7 @@ EAPI int ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con);
* @attention Require libcurl >= 7.19.1 to work, otherwise will always return
* @c 0.
*/
-EAPI Eina_Bool ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
+ECORE_CON_API Eina_Bool ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
const char *username,
const char *password,
Eina_Bool safe);
@@ -2017,7 +1993,7 @@ EAPI Eina_Bool ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
* @see ecore_con_url_time()
* @see ecore_con_url_post()
*/
-EAPI Eina_Bool ecore_con_url_get(Ecore_Con_Url *url_con);
+ECORE_CON_API Eina_Bool ecore_con_url_get(Ecore_Con_Url *url_con);
/**
* @brief Sends a HEAD request.
*
@@ -2037,7 +2013,7 @@ EAPI Eina_Bool ecore_con_url_get(Ecore_Con_Url *url_con);
* @see ecore_con_url_post()
* @since 1.14
*/
-EAPI Eina_Bool ecore_con_url_head(Ecore_Con_Url *url_con);
+ECORE_CON_API Eina_Bool ecore_con_url_head(Ecore_Con_Url *url_con);
/**
* @brief Sends a post request.
*
@@ -2066,7 +2042,7 @@ EAPI Eina_Bool ecore_con_url_head(Ecore_Con_Url *url_con);
* @see ecore_con_url_time()
* @see ecore_con_url_get()
*/
-EAPI Eina_Bool ecore_con_url_post(Ecore_Con_Url *url_con,
+ECORE_CON_API Eina_Bool ecore_con_url_post(Ecore_Con_Url *url_con,
const void *data, long length,
const char *content_type);
/**
@@ -2084,7 +2060,7 @@ EAPI Eina_Bool ecore_con_url_post(Ecore_Con_Url *url_con,
* @sa ecore_con_url_get()
* @sa ecore_con_url_post()
*/
-EAPI void ecore_con_url_time(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_time(Ecore_Con_Url *url_con,
Ecore_Con_Url_Time time_condition,
double timestamp);
@@ -2101,7 +2077,7 @@ EAPI void ecore_con_url_time(Ecore_Con_Url *url_con,
* Upload @p filename to an ftp server set in @p url_con using @p user
* and @p pass to directory @p upload_dir
*/
-EAPI Eina_Bool ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
+ECORE_CON_API Eina_Bool ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
const char *filename,
const char *user,
const char *pass,
@@ -2116,14 +2092,14 @@ EAPI Eina_Bool ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
* information about its operations, which is useful for
* debugging. The verbose information will be sent to stderr.
*/
-EAPI void ecore_con_url_verbose_set(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_verbose_set(Ecore_Con_Url *url_con,
Eina_Bool verbose);
/**
* @brief Enables or disables EPSV extension.
* @param url_con The Ecore_Con_Url instance which will be acted upon.
* @param use_epsv Boolean to enable/disable the EPSV extension.
*/
-EAPI void ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con,
Eina_Bool use_epsv);
/**
@@ -2138,7 +2114,7 @@ EAPI void ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con,
* @note Even though this function is called @c ecore_con_url_cookies_init(),
* there is no symmetrical shutdown operation.
*/
-EAPI void ecore_con_url_cookies_init(Ecore_Con_Url *url_con);
+ECORE_CON_API void ecore_con_url_cookies_init(Ecore_Con_Url *url_con);
/**
* @brief Controls whether session cookies from previous sessions shall be loaded.
*
@@ -2159,7 +2135,7 @@ EAPI void ecore_con_url_cookies_init(Ecore_Con_Url *url_con);
*
* @see ecore_con_url_cookies_file_add()
*/
-EAPI void ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con,
Eina_Bool ignore);
/**
* @brief Clears currently loaded cookies.
@@ -2183,7 +2159,7 @@ EAPI void ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Ur
* @see ecore_con_url_cookies_session_clear()
* @see ecore_con_url_cookies_ignore_old_session_set()
*/
-EAPI void ecore_con_url_cookies_clear(Ecore_Con_Url *url_con);
+ECORE_CON_API void ecore_con_url_cookies_clear(Ecore_Con_Url *url_con);
/**
* @brief Clears currently loaded session cookies.
*
@@ -2212,7 +2188,7 @@ EAPI void ecore_con_url_cookies_clear(Ecore_Con_Url *url_con);
* @see ecore_con_url_cookies_clear()
* @see ecore_con_url_cookies_ignore_old_session_set()
*/
-EAPI void ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_con);
+ECORE_CON_API void ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_con);
/**
* @brief Adds a file to the list of files from which to load cookies.
*
@@ -2239,7 +2215,7 @@ EAPI void ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_co
* @see ecore_con_url_cookies_ignore_old_session_set()
* @see ecore_con_url_cookies_jar_file_set()
*/
-EAPI void ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con,
const char * const file_name);
/**
* @brief Sets the name of the file to which all current cookies will be written when
@@ -2262,7 +2238,7 @@ EAPI void ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con,
*
* @see ecore_con_url_cookies_jar_write()
*/
-EAPI Eina_Bool ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con,
+ECORE_CON_API Eina_Bool ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con,
const char * const cookiejar_file);
/**
* @brief Writes all current cookies to the cookie jar immediately.
@@ -2277,7 +2253,7 @@ EAPI Eina_Bool ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con
*
* @see ecore_con_url_cookies_jar_file_set()
*/
-EAPI void ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con);
+ECORE_CON_API void ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con);
/**
* Toggle libcurl's verify peer's certificate option.
@@ -2291,7 +2267,7 @@ EAPI void ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con);
* @param verify Whether or not libcurl will check peer's certificate.
* @since 1.1.0
*/
-EAPI void ecore_con_url_ssl_verify_peer_set(Ecore_Con_Url *url_con,
+ECORE_CON_API void ecore_con_url_ssl_verify_peer_set(Ecore_Con_Url *url_con,
Eina_Bool verify);
/**
* Set a custom CA to trust for SSL/TLS connections.
@@ -2311,7 +2287,7 @@ EAPI void ecore_con_url_ssl_verify_peer_set(Ecore_Con_Url *url_con,
* @return @c 0 on success. When cURL is used, non-zero return values
* are equal to cURL error codes.
*/
-EAPI int ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
+ECORE_CON_API int ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
const char *ca_path);
/**
@@ -2331,7 +2307,7 @@ EAPI int ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
* @return @c EINA_TRUE on success, @c EINA_FALSE on error.
* @since 1.2
*/
-EAPI Eina_Bool ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy);
+ECORE_CON_API Eina_Bool ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy);
/**
* @brief Sets zero terminated username to use for proxy.
@@ -2347,7 +2323,7 @@ EAPI Eina_Bool ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy
*
* @since 1.2
*/
-EAPI Eina_Bool ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const char *username);
+ECORE_CON_API Eina_Bool ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const char *username);
/**
* @brief Sets zero terminated password to use for proxy.
@@ -2363,7 +2339,7 @@ EAPI Eina_Bool ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const ch
*
* @since 1.2
*/
-EAPI Eina_Bool ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password);
+ECORE_CON_API Eina_Bool ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password);
/**
* @brief Sets timeout in seconds.
@@ -2380,7 +2356,7 @@ EAPI Eina_Bool ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const ch
*
* @since 1.2
*/
-EAPI void ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout);
+ECORE_CON_API void ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout);
/**
* @brief Gets the returned HTTP STATUS code.
@@ -2391,23 +2367,23 @@ EAPI void ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout);
*
* @since 1.2
*/
-EAPI int ecore_con_url_status_code_get(Ecore_Con_Url *url_con);
+ECORE_CON_API int ecore_con_url_status_code_get(Ecore_Con_Url *url_con);
/**
* @brief Sets a maximum upload speed.
*
- * @param url_con Connection object
+ * @param url_obj Connection object
* @param max_speed Maximum upload speed, in bytes per second
*/
-EAPI void ecore_con_url_limit_upload_speed(Ecore_Con_Url *url_obj, off_t max_speed);
+ECORE_CON_API void ecore_con_url_limit_upload_speed(Ecore_Con_Url *url_obj, off_t max_speed);
/**
* @brief Sets a maximum download speed.
*
- * @param url_con Connection object
+ * @param url_obj Connection object
* @param max_speed Maximum download speed, in bytes per second
*/
-EAPI void ecore_con_url_limit_download_speed(Ecore_Con_Url *url_obj, off_t max_speed);
+ECORE_CON_API void ecore_con_url_limit_download_speed(Ecore_Con_Url *url_obj, off_t max_speed);
/**
* @}
@@ -2417,7 +2393,4 @@ EAPI void ecore_con_url_limit_download_speed(Ecore_Con_Url *url_obj, off_t max_s
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/ecore_con/Ecore_Con_Eet.h b/src/lib/ecore_con/Ecore_Con_Eet.h
index 4a716752a3..013786062e 100644
--- a/src/lib/ecore_con/Ecore_Con_Eet.h
+++ b/src/lib/ecore_con/Ecore_Con_Eet.h
@@ -5,31 +5,7 @@
#include <Ecore.h>
#include <Ecore_Con.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <ecore_con_api.h>
/**
* @defgroup Ecore_Con_Eet_Group Eet connection functions
@@ -100,7 +76,7 @@ typedef Eina_Bool (*Ecore_Con_Eet_Server_Cb)(void *data, Ecore_Con_Reply *reply,
*
* @return A new Ecore_Con_Eet server.
*/
-EAPI Ecore_Con_Eet *ecore_con_eet_server_new(Ecore_Con_Server *server);
+ECORE_CON_API Ecore_Con_Eet *ecore_con_eet_server_new(Ecore_Con_Server *server);
/**
* @brief Creates an Ecore_Con_Eet client.
@@ -114,7 +90,7 @@ EAPI Ecore_Con_Eet *ecore_con_eet_server_new(Ecore_Con_Server *server);
*
* @return A new Ecore_Con_Eet client.
*/
-EAPI Ecore_Con_Eet *ecore_con_eet_client_new(Ecore_Con_Server *server);
+ECORE_CON_API Ecore_Con_Eet *ecore_con_eet_client_new(Ecore_Con_Server *server);
/**
* @brief Frees an existing Ecore_Con_Eet object.
@@ -124,7 +100,7 @@ EAPI Ecore_Con_Eet *ecore_con_eet_client_new(Ecore_Con_Server *server);
* ecore_con_eet_client_new.
*
*/
-EAPI void ecore_con_eet_server_free(Ecore_Con_Eet *server);
+ECORE_CON_API void ecore_con_eet_server_free(Ecore_Con_Eet *server);
/**
* @brief Registers an @c Eet data descriptor on a Ecore_Con_Eet object.
@@ -135,7 +111,7 @@ EAPI void ecore_con_eet_server_free(Ecore_Con_Eet *server);
* in the Eet stream.
*
*/
-EAPI void ecore_con_eet_register(Ecore_Con_Eet *ece, const char *name, Eet_Data_Descriptor *edd);
+ECORE_CON_API void ecore_con_eet_register(Ecore_Con_Eet *ece, const char *name, Eet_Data_Descriptor *edd);
/**
* @brief Registers a data callback on a Ecore_Con_Eet object.
@@ -147,7 +123,7 @@ EAPI void ecore_con_eet_register(Ecore_Con_Eet *ece, const char *name, Eet_Data_
* @param data The data to pass to the callback.
*
*/
-EAPI void ecore_con_eet_data_callback_add(Ecore_Con_Eet *ece, const char *name, Ecore_Con_Eet_Data_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_data_callback_add(Ecore_Con_Eet *ece, const char *name, Ecore_Con_Eet_Data_Cb func, const void *data);
/**
* @brief Removes a data callback on a Ecore_Con_Eet object.
@@ -156,7 +132,7 @@ EAPI void ecore_con_eet_data_callback_add(Ecore_Con_Eet *ece, const char *name,
* @param name The name of the Eet stream to remove callback on.
*
*/
-EAPI void ecore_con_eet_data_callback_del(Ecore_Con_Eet *ece, const char *name);
+ECORE_CON_API void ecore_con_eet_data_callback_del(Ecore_Con_Eet *ece, const char *name);
/**
* @brief Registers a raw data callback on a Ecore_Con_Eet object.
@@ -168,7 +144,7 @@ EAPI void ecore_con_eet_data_callback_del(Ecore_Con_Eet *ece, const char *name);
* @param data The data to pass to the callback.
*
*/
-EAPI void ecore_con_eet_raw_data_callback_add(Ecore_Con_Eet *ece, const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_raw_data_callback_add(Ecore_Con_Eet *ece, const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data);
/**
* @brief Removes a raw data callback on a Ecore_Con_Eet object.
@@ -177,7 +153,7 @@ EAPI void ecore_con_eet_raw_data_callback_add(Ecore_Con_Eet *ece, const char *na
* @param name The name of the raw Eet stream to remove callback on.
*
*/
-EAPI void ecore_con_eet_raw_data_callback_del(Ecore_Con_Eet *ece, const char *name);
+ECORE_CON_API void ecore_con_eet_raw_data_callback_del(Ecore_Con_Eet *ece, const char *name);
/**
* @brief Registers a client connect callback on a Ecore_Con_Eet object.
@@ -189,7 +165,7 @@ EAPI void ecore_con_eet_raw_data_callback_del(Ecore_Con_Eet *ece, const char *na
* @param func The function to call as a callback.
* @param data The data to pass to the callback.
*/
-EAPI void ecore_con_eet_client_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_client_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
/**
* @brief Removes a client connect callback on a Ecore_Con_Eet object.
@@ -198,7 +174,7 @@ EAPI void ecore_con_eet_client_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Co
* @param func The callback to remove.
* @param data The data passed to this function at the callback registration.
*/
-EAPI void ecore_con_eet_client_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_client_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
/**
* @brief Registers a client disconnect callback on a Ecore_Con_Eet object.
@@ -210,7 +186,7 @@ EAPI void ecore_con_eet_client_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Co
* @param func The function to call as a callback.
* @param data The data to pass to the callback.
*/
-EAPI void ecore_con_eet_client_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_client_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
/**
* @brief Removes a client disconnect callback on a Ecore_Con_Eet object.
@@ -219,7 +195,7 @@ EAPI void ecore_con_eet_client_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore
* @param func The callback to remove.
* @param data The data passed to this function at the callback registration.
*/
-EAPI void ecore_con_eet_client_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_client_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data);
/**
* @brief Registers a server connect callback on a Ecore_Con_Eet object.
@@ -231,7 +207,7 @@ EAPI void ecore_con_eet_client_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore
* @param func The function to call as a callback.
* @param data The data to pass to the callback.
*/
-EAPI void ecore_con_eet_server_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_server_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
/**
* @brief Removes a server connect callback on a Ecore_Con_Eet object.
@@ -240,7 +216,7 @@ EAPI void ecore_con_eet_server_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Co
* @param func The callback to remove.
* @param data The data passed to this function at the callback registration.
*/
-EAPI void ecore_con_eet_server_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_server_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
/**
* @brief Registers a server disconnect callback on a Ecore_Con_Eet object.
@@ -252,7 +228,7 @@ EAPI void ecore_con_eet_server_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Co
* @param func The function to call as a callback.
* @param data The data to pass to the callback.
*/
-EAPI void ecore_con_eet_server_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_server_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
/**
* @brief Removes a server disconnect callback on a Ecore_Con_Eet object.
@@ -261,7 +237,7 @@ EAPI void ecore_con_eet_server_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore
* @param func The callback to remove.
* @param data The data passed to this function at the callback registration.
*/
-EAPI void ecore_con_eet_server_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
+ECORE_CON_API void ecore_con_eet_server_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data);
/**
* @brief Attaches data to an Ecore_Con_Eet object.
@@ -269,7 +245,7 @@ EAPI void ecore_con_eet_server_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore
* @param ece An Ecore_Con_Eet object.
* @param data The data to attach to the Ecore_Con_Eet object.
*/
-EAPI void ecore_con_eet_data_set(Ecore_Con_Eet *ece, const void *data);
+ECORE_CON_API void ecore_con_eet_data_set(Ecore_Con_Eet *ece, const void *data);
/**
* @brief Gets the data attached to an Ecore_Con_Eet object.
@@ -277,7 +253,7 @@ EAPI void ecore_con_eet_data_set(Ecore_Con_Eet *ece, const void *data);
* @param ece An Ecore_Con_Eet object.
* @return The data attached to the Ecore_Con_Eet object.
*/
-EAPI const void *ecore_con_eet_data_get(Ecore_Con_Eet *ece);
+ECORE_CON_API const void *ecore_con_eet_data_get(Ecore_Con_Eet *ece);
/**
* @brief Gets the Ecore_Con_Eet object corresponding to the Ecore_Con_Reply object.
@@ -285,7 +261,7 @@ EAPI const void *ecore_con_eet_data_get(Ecore_Con_Eet *ece);
* @param reply An Ecore_Con_Reply object.
* @return The corresponding Ecore_Con_Eet object.
*/
-EAPI Ecore_Con_Eet *ecore_con_eet_reply(Ecore_Con_Reply *reply);
+ECORE_CON_API Ecore_Con_Eet *ecore_con_eet_reply(Ecore_Con_Reply *reply);
/**
* @brief Sends some data using a protocol type.
@@ -294,7 +270,7 @@ EAPI Ecore_Con_Eet *ecore_con_eet_reply(Ecore_Con_Reply *reply);
* @param protocol_name The protocol type to use.
* @param value The data to send.
*/
-EAPI void ecore_con_eet_send(Ecore_Con_Reply *reply, const char *protocol_name, void *value);
+ECORE_CON_API void ecore_con_eet_send(Ecore_Con_Reply *reply, const char *protocol_name, void *value);
/**
* @brief Sends some raw data using a protocol type.
@@ -305,7 +281,7 @@ EAPI void ecore_con_eet_send(Ecore_Con_Reply *reply, const char *protocol_name,
* @param value The data to send.
* @param length The data length.
*/
-EAPI void ecore_con_eet_raw_send(Ecore_Con_Reply *reply, const char *protocol_name, const char *section, void *value, unsigned int length);
+ECORE_CON_API void ecore_con_eet_raw_send(Ecore_Con_Reply *reply, const char *protocol_name, const char *section, void *value, unsigned int length);
/**
* @}
@@ -315,7 +291,4 @@ EAPI void ecore_con_eet_raw_send(Ecore_Con_Reply *reply, const char *protocol_na
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/ecore_con/Efl_Net.h b/src/lib/ecore_con/Efl_Net.h
index 7cab05efa3..4c5cab8725 100644
--- a/src/lib/ecore_con/Efl_Net.h
+++ b/src/lib/ecore_con/Efl_Net.h
@@ -13,31 +13,7 @@
#include <Efl_Core.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <ecore_con_api.h>
#ifdef __cplusplus
extern "C" {
@@ -51,7 +27,7 @@ extern "C" {
* @note This function already calls ecore_init() internally, so you don't need
* to call it explicitly.
*/
-EAPI int ecore_con_init(void);
+ECORE_CON_API int ecore_con_init(void);
/**
* @brief Shuts down the Ecore_Con library.
@@ -60,7 +36,7 @@ EAPI int ecore_con_init(void);
* @note This function already calls ecore_shutdown() internally, so you don't
* need to call it explicitly unless you called ecore_init() explicitly too.
*/
-EAPI int ecore_con_shutdown(void);
+ECORE_CON_API int ecore_con_shutdown(void);
/**
* @brief Initializes the Ecore_Con_Url library.
@@ -70,7 +46,7 @@ EAPI int ecore_con_shutdown(void);
* @note This function doesn't call ecore_con_init(). You still need to call it
* explicitly before calling this one.
*/
-EAPI int ecore_con_url_init(void);
+ECORE_CON_API int ecore_con_url_init(void);
/**
* @brief Shuts down the Ecore_Con_Url library.
@@ -79,161 +55,161 @@ EAPI int ecore_con_url_init(void);
* @note This function doesn't call ecore_con_shutdown(). You still need to call
* it explicitly after calling this one.
*/
-EAPI int ecore_con_url_shutdown(void);
+ECORE_CON_API int ecore_con_url_shutdown(void);
#ifdef EFL_BETA_API_SUPPORT
/** HTTP error: bad content encoding */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_BAD_CONTENT_ENCODING;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_BAD_CONTENT_ENCODING;
/** HTTP error: bad download resume */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_BAD_DOWNLOAD_RESUME;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_BAD_DOWNLOAD_RESUME;
/** HTTP error: bad function argument */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_BAD_FUNCTION_ARGUMENT;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_BAD_FUNCTION_ARGUMENT;
/** HTTP error: chunk failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_CHUNK_FAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_CHUNK_FAILED;
/** HTTP error: conv failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_CONV_FAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_CONV_FAILED;
/** HTTP error: conv reqd */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_CONV_REQD;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_CONV_REQD;
/** HTTP error: failed init */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_FAILED_INIT;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_FAILED_INIT;
/** HTTP error: could not read file */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_FILE_COULDNT_READ_FILE;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_FILE_COULDNT_READ_FILE;
/** HTTP error: filesize exceeded */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_FILESIZE_EXCEEDED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_FILESIZE_EXCEEDED;
/** HTTP error: function not found */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_FUNCTION_NOT_FOUND;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_FUNCTION_NOT_FOUND;
/** HTTP error: got nothing */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_GOT_NOTHING;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_GOT_NOTHING;
/** HTTP error: http2 */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP2;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_HTTP2;
/** HTTP error: http2 stream */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP2_STREAM;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_HTTP2_STREAM;
/** HTTP error: http post error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP_POST_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_HTTP_POST_ERROR;
/** HTTP error: http returned error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP_RETURNED_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_HTTP_RETURNED_ERROR;
/** HTTP error: interface failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_INTERFACE_FAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_INTERFACE_FAILED;
/** HTTP error: login denied */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_LOGIN_DENIED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_LOGIN_DENIED;
/** HTTP error: no connection available */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_NO_CONNECTION_AVAILABLE;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_NO_CONNECTION_AVAILABLE;
/** HTTP error: not built in */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_NOT_BUILT_IN;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_NOT_BUILT_IN;
/** HTTP error: operation timeout */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_OPERATION_TIMEDOUT;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_OPERATION_TIMEDOUT;
/** HTTP error: partial file */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_PARTIAL_FILE;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_PARTIAL_FILE;
/** HTTP error: peer failed verification */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_PEER_FAILED_VERIFICATION;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_PEER_FAILED_VERIFICATION;
/** HTTP error: range error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_RANGE_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_RANGE_ERROR;
/** HTTP error: read error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_READ_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_READ_ERROR;
/** HTTP error: receive error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_RECV_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_RECV_ERROR;
/** HTTP error: remote access denied */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_ACCESS_DENIED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_REMOTE_ACCESS_DENIED;
/** HTTP error: remote disk full */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_DISK_FULL;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_REMOTE_DISK_FULL;
/** HTTP error: remote file exists */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_EXISTS;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_EXISTS;
/** HTTP error: remote file not found */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_NOT_FOUND;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_NOT_FOUND;
/** HTTP error: send error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SEND_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SEND_ERROR;
/** HTTP error: send fail rewind */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SEND_FAIL_REWIND;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SEND_FAIL_REWIND;
/** HTTP error: SSL cacert */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT;
/** HTTP error: SSL cacert bad file */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT_BADFILE;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT_BADFILE;
/** HTTP error: SSL certproblem */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CERTPROBLEM;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_CERTPROBLEM;
/** HTTP error: SSL cipher */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CIPHER;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_CIPHER;
/** HTTP error: SSL connect error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CONNECT_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_CONNECT_ERROR;
/** HTTP error: SSL crl bad file */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CRL_BADFILE;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_CRL_BADFILE;
/** HTTP error: SSL engine init failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_INITFAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_INITFAILED;
/** HTTP error: SSL engine not found */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_NOTFOUND;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_NOTFOUND;
/** HTTP error: SSL engine set failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_SETFAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_SETFAILED;
/** HTTP error: SSL invalid cert status */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_INVALIDCERTSTATUS;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_INVALIDCERTSTATUS;
/** HTTP error: SSL issuer error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ISSUER_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_ISSUER_ERROR;
/** HTTP error: SSL pinned pub key does not match */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_PINNEDPUBKEYNOTMATCH;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_PINNEDPUBKEYNOTMATCH;
/** HTTP error: SSL shutdown failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_SHUTDOWN_FAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_SSL_SHUTDOWN_FAILED;
/** HTTP error: too many redirects */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_TOO_MANY_REDIRECTS;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_TOO_MANY_REDIRECTS;
/** HTTP error: unknown option */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_UNKNOWN_OPTION;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_UNKNOWN_OPTION;
/** HTTP error: unsupported protocol */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_UNSUPPORTED_PROTOCOL;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_UNSUPPORTED_PROTOCOL;
/** HTTP error: upload failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_UPLOAD_FAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_UPLOAD_FAILED;
/** HTTP error: URL mal-formatted */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_URL_MALFORMAT;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_URL_MALFORMAT;
/** HTTP error: usage of SSL failed */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_USE_SSL_FAILED;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_USE_SSL_FAILED;
/** HTTP error: write error */
-extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_WRITE_ERROR;
+ECORE_CON_API ECORE_CON_API_WEAK extern Eina_Error EFL_NET_HTTP_ERROR_WRITE_ERROR;
#endif /* EFL_BETA_API_SUPPORT */
#include "efl_net_types.eot.h"
@@ -293,7 +269,4 @@ extern EWAPI Eina_Error EFL_NET_HTTP_ERROR_WRITE_ERROR;
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/ecore_con/ecore_con.c b/src/lib/ecore_con/ecore_con.c
index 8a4e0fb43e..96cb7b3e5e 100644
--- a/src/lib/ecore_con/ecore_con.c
+++ b/src/lib/ecore_con/ecore_con.c
@@ -34,10 +34,6 @@
# include <sys/filio.h>
#endif
-#ifdef HAVE_SYSTEMD
-# include <systemd/sd-daemon.h>
-#endif
-
#ifdef _WIN32
# include <ws2tcpip.h>
# include <evil_private.h> /* evil_init|shutdown */
@@ -68,7 +64,7 @@ char **_efl_net_proxy_helper_url_wait (int id);
void _efl_net_proxy_helper_init (void);
void _efl_net_proxy_helper_shutdown (void);
-EAPI int
+ECORE_CON_API int
ecore_con_init(void)
{
if (++_ecore_con_init_count != 1)
@@ -107,7 +103,11 @@ ecore_con_init(void)
EFL_NET_SOCKET_SSL_ERROR_CERTIFICATE_VERIFY_FAILED;
#ifdef HAVE_SYSTEMD
- sd_fd_max = sd_listen_fds(0);
+ if (getenv("LISTEN_PID") && getenv("LISTEN_FDS"))
+ {
+ _ecore_con_sd_init();
+ if (_ecore_sd_listen_fds) sd_fd_max = _ecore_sd_listen_fds(0);
+ }
#endif
eina_log_timing(_ecore_con_log_dom,
@@ -129,7 +129,7 @@ ecore_con_log_error:
return --_ecore_con_init_count;
}
-EAPI int
+ECORE_CON_API int
ecore_con_shutdown(void)
{
/* _ecore_con_init_count should not go below zero. */
@@ -162,7 +162,7 @@ ecore_con_shutdown(void)
return _ecore_con_init_count;
}
-EAPI int
+ECORE_CON_API int
ecore_con_ssl_available_get(void)
{
#if HAVE_GNUTLS
@@ -389,11 +389,16 @@ efl_net_ip_port_split(char *buf, const char **p_host, const char **p_port)
Eina_Error
efl_net_ip_socket_activate_check(const char *address, int family, int type, Eina_Bool *listening)
{
- SOCKET fd = SD_LISTEN_FDS_START + sd_fd_index;
+ SOCKET fd = /*SD_LISTEN_FDS_START*/3 + sd_fd_index;
int r;
+ // check first as this will return if we're not socket activated...
+ // or systemd not found, which means the below init will not be done then
if (sd_fd_index >= sd_fd_max) return ENOENT;
+ _ecore_con_sd_init();
+ if ((!_ecore_sd_is_socket_unix) || (!_ecore_sd_is_socket)) return ENOENT;
+
if (family == AF_UNIX)
{
char buf[sizeof(struct sockaddr_un)] = "";
@@ -424,7 +429,7 @@ efl_net_ip_socket_activate_check(const char *address, int family, int type, Eina
len = strlen(address) + 1;
}
- r = sd_is_socket_unix(fd, type, 0, sun_path, len);
+ r = _ecore_sd_is_socket_unix(fd, type, 0, sun_path, len);
if (r < 0)
{
ERR("socket " SOCKET_FMT " is not of family=%d, type=%d", fd, family, type);
@@ -443,7 +448,7 @@ efl_net_ip_socket_activate_check(const char *address, int family, int type, Eina
Eina_Error err;
int x;
- r = sd_is_socket(fd, family, type, (type == SOCK_DGRAM) ? -1 : 0);
+ r = _ecore_sd_is_socket(fd, family, type, (type == SOCK_DGRAM) ? -1 : 0);
if (r < 0)
{
ERR("socket " SOCKET_FMT " is not of family=%d, type=%d", fd, family, type);
@@ -2588,3 +2593,49 @@ ecore_con_libproxy_proxies_free(char **proxies)
free(*itr);
free(proxies);
}
+
+#ifdef HAVE_SYSTEMD
+static Eina_Module *_libsystemd = NULL;
+static Eina_Bool _libsystemd_broken = EINA_FALSE;
+
+int (*_ecore_sd_listen_fds) (int unset_environment) = NULL;
+int (*_ecore_sd_is_socket_unix) (int fd, int type, int listening, const char *path, size_t length) = NULL;
+int (*_ecore_sd_is_socket) (int fd, int family, int type, int listening) = NULL;
+
+void
+_ecore_con_sd_init(void)
+{
+ if (_libsystemd_broken) return;
+ _libsystemd = eina_module_new("libsystemd.so.0");
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ if (!_libsystemd)
+ {
+ _libsystemd_broken = EINA_TRUE;
+ return;
+ }
+ _ecore_sd_listen_fds =
+ eina_module_symbol_get(_libsystemd, "sd_listen_fds");
+ _ecore_sd_is_socket_unix =
+ eina_module_symbol_get(_libsystemd, "sd_is_socket_unix");
+ _ecore_sd_is_socket =
+ eina_module_symbol_get(_libsystemd, "sd_is_socket");
+ if ((!_ecore_sd_listen_fds) ||
+ (!_ecore_sd_is_socket_unix) ||
+ (!_ecore_sd_is_socket))
+ {
+ _ecore_sd_listen_fds = NULL;
+ _ecore_sd_is_socket_unix = NULL;
+ _ecore_sd_is_socket = NULL;
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ _libsystemd_broken = EINA_TRUE;
+ }
+}
+#endif
diff --git a/src/lib/ecore_con/ecore_con_api.h b/src/lib/ecore_con/ecore_con_api.h
new file mode 100644
index 0000000000..eb5fe8d302
--- /dev/null
+++ b/src/lib/ecore_con/ecore_con_api.h
@@ -0,0 +1,32 @@
+#ifndef _EFL_ECORE_CON_API_H
+#define _EFL_ECORE_CON_API_H
+
+#ifdef ECORE_CON_API
+#error ECORE_CON_API should not be already defined
+#endif
+
+#ifdef _WIN32
+# ifndef ECORE_CON_STATIC
+# ifdef ECORE_CON_BUILD
+# define ECORE_CON_API __declspec(dllexport)
+# else
+# define ECORE_CON_API __declspec(dllimport)
+# endif
+# else
+# define ECORE_CON_API
+# endif
+# define ECORE_CON_API_WEAK
+#elif defined(__GNUC__)
+# if __GNUC__ >= 4
+# define ECORE_CON_API __attribute__ ((visibility("default")))
+# define ECORE_CON_API_WEAK __attribute__ ((weak))
+# else
+# define ECORE_CON_API
+# define ECORE_CON_API_WEAK
+# endif
+#else
+# define ECORE_CON_API
+# define ECORE_CON_API_WEAK
+#endif
+
+#endif
diff --git a/src/lib/ecore_con/ecore_con_eet.c b/src/lib/ecore_con/ecore_con_eet.c
index 2bbbba7db4..3e7cb0de74 100644
--- a/src/lib/ecore_con/ecore_con_eet.c
+++ b/src/lib/ecore_con/ecore_con_eet.c
@@ -717,7 +717,7 @@ _ecore_con_eet_base_server_get(const Eo *obj EINA_UNUSED, Ecore_Con_Eet_Base_Dat
* Global API *
**************/
-EAPI Ecore_Con_Eet *
+ECORE_CON_API Ecore_Con_Eet *
ecore_con_eet_server_new(Ecore_Con_Server *server)
{
Ecore_Con_Eet *ece_obj;
@@ -729,7 +729,7 @@ ecore_con_eet_server_new(Ecore_Con_Server *server)
return ece_obj;
}
-EAPI Ecore_Con_Eet *
+ECORE_CON_API Ecore_Con_Eet *
ecore_con_eet_client_new(Ecore_Con_Server *server)
{
Ecore_Con_Eet *ece_obj;
@@ -741,43 +741,43 @@ ecore_con_eet_client_new(Ecore_Con_Server *server)
return ece_obj;
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_server_free(Ecore_Con_Eet *server)
{
efl_unref(server);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_register(Ecore_Con_Eet *ece, const char *name, Eet_Data_Descriptor *edd)
{
ecore_con_eet_base_register(ece, name, edd);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_data_callback_add(Ecore_Con_Eet *ece, const char *name, Ecore_Con_Eet_Data_Cb func, const void *data)
{
ecore_con_eet_base_data_callback_set(ece, name, func, data);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_data_callback_del(Ecore_Con_Eet *ece, const char *name)
{
ecore_con_eet_base_data_callback_del(ece, name);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_raw_data_callback_add(Ecore_Con_Eet *ece, const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data)
{
ecore_con_eet_base_raw_data_callback_set(ece, name, func, data);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_raw_data_callback_del(Ecore_Con_Eet *ece, const char *name)
{
ecore_con_eet_base_raw_data_callback_del(ece, name);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_client_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data)
{
Ecore_Con_Eet_Server_Obj_Data *eces = efl_data_scope_get(ece, ECORE_CON_EET_SERVER_OBJ_CLASS);
@@ -794,7 +794,7 @@ ecore_con_eet_client_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Clie
eces->client_connect_callbacks = eina_list_append(eces->client_connect_callbacks, c);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_client_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data)
{
Ecore_Con_Eet_Server_Obj_Data *eces = efl_data_scope_get(ece, ECORE_CON_EET_SERVER_OBJ_CLASS);
@@ -812,7 +812,7 @@ ecore_con_eet_client_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Clie
}
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_client_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data)
{
Ecore_Con_Eet_Server_Obj_Data *eces = efl_data_scope_get(ece, ECORE_CON_EET_SERVER_OBJ_CLASS);
@@ -829,7 +829,7 @@ ecore_con_eet_client_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_C
eces->client_disconnect_callbacks = eina_list_append(eces->client_disconnect_callbacks, c);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_client_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Client_Cb func, const void *data)
{
Ecore_Con_Eet_Server_Obj_Data *eced = efl_data_scope_get(ece, ECORE_CON_EET_SERVER_OBJ_CLASS);
@@ -847,7 +847,7 @@ ecore_con_eet_client_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_C
}
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_server_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data)
{
Ecore_Con_Eet_Client_Obj_Data *eced = efl_data_scope_get(ece, ECORE_CON_EET_CLIENT_OBJ_CLASS);
@@ -864,7 +864,7 @@ ecore_con_eet_server_connect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Serv
eced->server_connect_callbacks = eina_list_append(eced->server_connect_callbacks, s);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_server_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data)
{
Ecore_Con_Eet_Client_Obj_Data *eced = efl_data_scope_get(ece, ECORE_CON_EET_CLIENT_OBJ_CLASS);
@@ -882,7 +882,7 @@ ecore_con_eet_server_connect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Serv
}
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_server_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data)
{
Ecore_Con_Eet_Client_Obj_Data *eced = efl_data_scope_get(ece, ECORE_CON_EET_CLIENT_OBJ_CLASS);
@@ -899,7 +899,7 @@ ecore_con_eet_server_disconnect_callback_add(Ecore_Con_Eet *ece, Ecore_Con_Eet_S
eced->server_disconnect_callbacks = eina_list_append(eced->server_disconnect_callbacks, s);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_server_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_Server_Cb func, const void *data)
{
Ecore_Con_Eet_Client_Obj_Data *eced = efl_data_scope_get(ece, ECORE_CON_EET_CLIENT_OBJ_CLASS);
@@ -917,32 +917,32 @@ ecore_con_eet_server_disconnect_callback_del(Ecore_Con_Eet *ece, Ecore_Con_Eet_S
}
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_data_set(Ecore_Con_Eet *ece, const void *data)
{
efl_key_data_set(ece, ECORE_CON_EET_DATA_KEY, data);
}
-EAPI const void *
+ECORE_CON_API const void *
ecore_con_eet_data_get(Ecore_Con_Eet *ece)
{
return efl_key_data_get(ece, ECORE_CON_EET_DATA_KEY);
}
-EAPI Ecore_Con_Eet *
+ECORE_CON_API Ecore_Con_Eet *
ecore_con_eet_reply(Ecore_Con_Reply *reply)
{
if (!reply) return NULL;
return reply->ece;
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_send(Ecore_Con_Reply *reply, const char *name, void *value)
{
ecore_con_eet_base_send(reply->ece, reply, name, value);
}
-EAPI void
+ECORE_CON_API void
ecore_con_eet_raw_send(Ecore_Con_Reply *reply, const char *protocol_name, const char *section, void *value, unsigned int length)
{
Eina_Binbuf *buf = eina_binbuf_manage_new(value, length, 1);
diff --git a/src/lib/ecore_con/ecore_con_eet_base_eo.c b/src/lib/ecore_con/ecore_con_eet_base_eo.c
index 7e1e6913c1..64969ba71e 100644
--- a/src/lib/ecore_con/ecore_con_eet_base_eo.c
+++ b/src/lib/ecore_con/ecore_con_eet_base_eo.c
@@ -1,39 +1,39 @@
void _ecore_con_eet_base_server_set(Eo *obj, Ecore_Con_Eet_Base_Data *pd, Ecore_Con_Server *data);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_server_set, EFL_FUNC_CALL(data), Ecore_Con_Server *data);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_server_set, EFL_FUNC_CALL(data), Ecore_Con_Server *data);
Ecore_Con_Server *_ecore_con_eet_base_server_get(const Eo *obj, Ecore_Con_Eet_Base_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(ecore_con_eet_base_server_get, Ecore_Con_Server *, NULL);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_FUNC_BODY_CONST(ecore_con_eet_base_server_get, Ecore_Con_Server *, NULL);
void _ecore_con_eet_base_data_callback_set(Eo *obj, Ecore_Con_Eet_Base_Data *pd, const char *name, Ecore_Con_Eet_Data_Cb func, const void *data);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_data_callback_set, EFL_FUNC_CALL(name, func, data), const char *name, Ecore_Con_Eet_Data_Cb func, const void *data);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_data_callback_set, EFL_FUNC_CALL(name, func, data), const char *name, Ecore_Con_Eet_Data_Cb func, const void *data);
void _ecore_con_eet_base_raw_data_callback_set(Eo *obj, Ecore_Con_Eet_Base_Data *pd, const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_raw_data_callback_set, EFL_FUNC_CALL(name, func, data), const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_raw_data_callback_set, EFL_FUNC_CALL(name, func, data), const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data);
void _ecore_con_eet_base_data_callback_del(Eo *obj, Ecore_Con_Eet_Base_Data *pd, const char *name);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_data_callback_del, EFL_FUNC_CALL(name), const char *name);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_data_callback_del, EFL_FUNC_CALL(name), const char *name);
void _ecore_con_eet_base_raw_data_callback_del(Eo *obj, Ecore_Con_Eet_Base_Data *pd, const char *name);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_raw_data_callback_del, EFL_FUNC_CALL(name), const char *name);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_raw_data_callback_del, EFL_FUNC_CALL(name), const char *name);
void _ecore_con_eet_base_register(Eo *obj, Ecore_Con_Eet_Base_Data *pd, const char *name, Eet_Data_Descriptor *edd);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_register, EFL_FUNC_CALL(name, edd), const char *name, Eet_Data_Descriptor *edd);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_register, EFL_FUNC_CALL(name, edd), const char *name, Eet_Data_Descriptor *edd);
void _ecore_con_eet_base_send(Eo *obj, Ecore_Con_Eet_Base_Data *pd, Ecore_Con_Reply *reply, const char *name, void *value);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_send, EFL_FUNC_CALL(reply, name, value), Ecore_Con_Reply *reply, const char *name, void *value);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_send, EFL_FUNC_CALL(reply, name, value), Ecore_Con_Reply *reply, const char *name, void *value);
void _ecore_con_eet_base_raw_send(Eo *obj, Ecore_Con_Eet_Base_Data *pd, Ecore_Con_Reply *reply, const char *protocol_name, const char *section, Eina_Binbuf *section_data);
-EOAPI EFL_VOID_FUNC_BODYV(ecore_con_eet_base_raw_send, EFL_FUNC_CALL(reply, protocol_name, section, section_data), Ecore_Con_Reply *reply, const char *protocol_name, const char *section, Eina_Binbuf *section_data);
+ECORE_CON_API ECORE_CON_API_WEAK EFL_VOID_FUNC_BODYV(ecore_con_eet_base_raw_send, EFL_FUNC_CALL(reply, protocol_name, section, section_data), Ecore_Con_Reply *reply, const char *protocol_name, const char *section, Eina_Binbuf *section_data);
Efl_Object *_ecore_con_eet_base_efl_object_constructor(Eo *obj, Ecore_Con_Eet_Base_Data *pd);
diff --git a/src/lib/ecore_con/ecore_con_eet_base_eo.h b/src/lib/ecore_con/ecore_con_eet_base_eo.h
index 6c8176861f..e4e00e20fc 100644
--- a/src/lib/ecore_con/ecore_con_eet_base_eo.h
+++ b/src/lib/ecore_con/ecore_con_eet_base_eo.h
@@ -29,7 +29,7 @@ typedef struct _Ecore_Con_Reply Ecore_Con_Reply;
*/
#define ECORE_CON_EET_BASE_CLASS ecore_con_eet_base_class_get()
-EWAPI const Efl_Class *ecore_con_eet_base_class_get(void);
+ECORE_CON_API ECORE_CON_API_WEAK const Efl_Class *ecore_con_eet_base_class_get(void) EINA_CONST;
/**
* @brief The server object to which we send and receive.
@@ -39,7 +39,7 @@ EWAPI const Efl_Class *ecore_con_eet_base_class_get(void);
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_server_set(Eo *obj, Ecore_Con_Server *data);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_server_set(Eo *obj, Ecore_Con_Server *data);
/**
* @brief The server object to which we send and receive.
@@ -50,7 +50,7 @@ EOAPI void ecore_con_eet_base_server_set(Eo *obj, Ecore_Con_Server *data);
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI Ecore_Con_Server *ecore_con_eet_base_server_get(const Eo *obj);
+ECORE_CON_API ECORE_CON_API_WEAK Ecore_Con_Server *ecore_con_eet_base_server_get(const Eo *obj);
/**
* @brief A callback function which should be called when data is received by
@@ -64,7 +64,7 @@ EOAPI Ecore_Con_Server *ecore_con_eet_base_server_get(const Eo *obj);
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_data_callback_set(Eo *obj, const char *name, Ecore_Con_Eet_Data_Cb func, const void *data);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_data_callback_set(Eo *obj, const char *name, Ecore_Con_Eet_Data_Cb func, const void *data);
/**
* @brief A callback function which should be calledn when raw data is received
@@ -78,7 +78,7 @@ EOAPI void ecore_con_eet_base_data_callback_set(Eo *obj, const char *name, Ecore
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_raw_data_callback_set(Eo *obj, const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_raw_data_callback_set(Eo *obj, const char *name, Ecore_Con_Eet_Raw_Data_Cb func, const void *data);
/**
* @brief Function to delete the @ref ecore_con_eet_base_data_callback_set.
@@ -88,7 +88,7 @@ EOAPI void ecore_con_eet_base_raw_data_callback_set(Eo *obj, const char *name, E
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_data_callback_del(Eo *obj, const char *name);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_data_callback_del(Eo *obj, const char *name);
/**
* @brief Function to delete the @ref ecore_con_eet_base_raw_data_callback_set.
@@ -98,7 +98,7 @@ EOAPI void ecore_con_eet_base_data_callback_del(Eo *obj, const char *name);
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_raw_data_callback_del(Eo *obj, const char *name);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_raw_data_callback_del(Eo *obj, const char *name);
/**
* @brief Function to register a @ref Eet.Data.Descriptor to the ecore_con_eet
@@ -110,7 +110,7 @@ EOAPI void ecore_con_eet_base_raw_data_callback_del(Eo *obj, const char *name);
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_register(Eo *obj, const char *name, Eet_Data_Descriptor *edd);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_register(Eo *obj, const char *name, Eet_Data_Descriptor *edd);
/**
* @brief Function to send data.
@@ -123,7 +123,7 @@ EOAPI void ecore_con_eet_base_register(Eo *obj, const char *name, Eet_Data_Descr
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_send(Eo *obj, Ecore_Con_Reply *reply, const char *name, void *value);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_send(Eo *obj, Ecore_Con_Reply *reply, const char *name, void *value);
/**
* @brief Function to send raw data.
@@ -137,6 +137,6 @@ EOAPI void ecore_con_eet_base_send(Eo *obj, Ecore_Con_Reply *reply, const char *
*
* @ingroup Ecore_Con_Eet_Base
*/
-EOAPI void ecore_con_eet_base_raw_send(Eo *obj, Ecore_Con_Reply *reply, const char *protocol_name, const char *section, Eina_Binbuf *section_data);
+ECORE_CON_API ECORE_CON_API_WEAK void ecore_con_eet_base_raw_send(Eo *obj, Ecore_Con_Reply *reply, const char *protocol_name, const char *section, Eina_Binbuf *section_data);
#endif
diff --git a/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.c b/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.c
index 696028a9c8..434754217e 100644
--- a/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.c
+++ b/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.c
@@ -1,5 +1,5 @@
-EAPI void
+ECORE_CON_API void
ecore_con_eet(Ecore_Con_Eet_Base *obj, const char *name, Eet_Data_Descriptor *edd)
{
ecore_con_eet_base_register(obj, name, edd);
diff --git a/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.h b/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.h
index 4636f095bb..2ec7bd427f 100644
--- a/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.h
+++ b/src/lib/ecore_con/ecore_con_eet_base_eo.legacy.h
@@ -36,7 +36,7 @@ typedef struct _Ecore_Con_Reply Ecore_Con_Reply;
*
* @ingroup (null)_Group
*/
-EAPI void ecore_con_eet(Ecore_Con_Eet_Base *obj, const char *name, Eet_Data_Descriptor *edd);
+ECORE_CON_API void ecore_con_eet(Ecore_Con_Eet_Base *obj, const char *name, Eet_Data_Descriptor *edd);
diff --git a/src/lib/ecore_con/ecore_con_eet_client_obj_eo.h b/src/lib/ecore_con/ecore_con_eet_client_obj_eo.h
index 0de995fca3..53d91370da 100644
--- a/src/lib/ecore_con/ecore_con_eet_client_obj_eo.h
+++ b/src/lib/ecore_con/ecore_con_eet_client_obj_eo.h
@@ -19,6 +19,6 @@ typedef Eo Ecore_Con_Eet_Client_Obj;
*/
#define ECORE_CON_EET_CLIENT_OBJ_CLASS ecore_con_eet_client_obj_class_get()
-EWAPI const Efl_Class *ecore_con_eet_client_obj_class_get(void);
+ECORE_CON_API ECORE_CON_API_WEAK const Efl_Class *ecore_con_eet_client_obj_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/ecore_con/ecore_con_eet_server_obj_eo.h b/src/lib/ecore_con/ecore_con_eet_server_obj_eo.h
index 3d2a76c38e..59e6845b6b 100644
--- a/src/lib/ecore_con/ecore_con_eet_server_obj_eo.h
+++ b/src/lib/ecore_con/ecore_con_eet_server_obj_eo.h
@@ -19,6 +19,6 @@ typedef Eo Ecore_Con_Eet_Server_Obj;
*/
#define ECORE_CON_EET_SERVER_OBJ_CLASS ecore_con_eet_server_obj_class_get()
-EWAPI const Efl_Class *ecore_con_eet_server_obj_class_get(void);
+ECORE_CON_API ECORE_CON_API_WEAK const Efl_Class *ecore_con_eet_server_obj_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/ecore_con/ecore_con_legacy.c b/src/lib/ecore_con/ecore_con_legacy.c
index 050a30f1f2..04fe10edfe 100644
--- a/src/lib/ecore_con/ecore_con_legacy.c
+++ b/src/lib/ecore_con/ecore_con_legacy.c
@@ -95,7 +95,7 @@ typedef struct _Ecore_Con_Lookup_Ctx {
if (!svr) return __VA_ARGS__; \
if (!EINA_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) \
{ \
- ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __FUNCTION__); \
+ ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER, __func__); \
return __VA_ARGS__; \
} \
} \
@@ -115,7 +115,7 @@ typedef struct _Ecore_Con_Lookup_Ctx {
if (!cl) return __VA_ARGS__; \
if (!EINA_MAGIC_CHECK(cl, ECORE_MAGIC_CON_CLIENT)) \
{ \
- ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, __FUNCTION__); \
+ ECORE_MAGIC_FAIL(cl, ECORE_MAGIC_CON_CLIENT, __func__); \
return __VA_ARGS__; \
} \
} \
@@ -151,22 +151,22 @@ GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Client_Upgrade, ecore_con_event_client
#undef GENERIC_ALLOC_FREE_HEADER
/* shared */
-EAPI int ECORE_CON_EVENT_SERVER_DEL = 0;
-EAPI int ECORE_CON_EVENT_SERVER_ERROR = 0;
+ECORE_CON_API int ECORE_CON_EVENT_SERVER_DEL = 0;
+ECORE_CON_API int ECORE_CON_EVENT_SERVER_ERROR = 0;
/* ecore_con_server_add() */
-EAPI int ECORE_CON_EVENT_CLIENT_ADD = 0;
-EAPI int ECORE_CON_EVENT_CLIENT_DEL = 0;
+ECORE_CON_API int ECORE_CON_EVENT_CLIENT_ADD = 0;
+ECORE_CON_API int ECORE_CON_EVENT_CLIENT_DEL = 0;
/* ecore_con_server_connect() */
-EAPI int ECORE_CON_EVENT_SERVER_ADD = 0;
-EAPI int ECORE_CON_EVENT_SERVER_DATA = 0;
-EAPI int ECORE_CON_EVENT_SERVER_WRITE = 0;
-EAPI int ECORE_CON_EVENT_PROXY_BIND = 0; /* we're not supporting proxy bind, keep only for ABI */
-EAPI int ECORE_CON_EVENT_SERVER_UPGRADE = 0;
+ECORE_CON_API int ECORE_CON_EVENT_SERVER_ADD = 0;
+ECORE_CON_API int ECORE_CON_EVENT_SERVER_DATA = 0;
+ECORE_CON_API int ECORE_CON_EVENT_SERVER_WRITE = 0;
+ECORE_CON_API int ECORE_CON_EVENT_PROXY_BIND = 0; /* we're not supporting proxy bind, keep only for ABI */
+ECORE_CON_API int ECORE_CON_EVENT_SERVER_UPGRADE = 0;
/* for each client from ECORE_CON_EVENT_CLIENT_ADD */
-EAPI int ECORE_CON_EVENT_CLIENT_DATA = 0;
-EAPI int ECORE_CON_EVENT_CLIENT_WRITE = 0;
-EAPI int ECORE_CON_EVENT_CLIENT_ERROR = 0;
-EAPI int ECORE_CON_EVENT_CLIENT_UPGRADE = 0;
+ECORE_CON_API int ECORE_CON_EVENT_CLIENT_DATA = 0;
+ECORE_CON_API int ECORE_CON_EVENT_CLIENT_WRITE = 0;
+ECORE_CON_API int ECORE_CON_EVENT_CLIENT_ERROR = 0;
+ECORE_CON_API int ECORE_CON_EVENT_CLIENT_UPGRADE = 0;
static Eina_List *_servers = NULL;
static Eina_List *_ecore_con_lookups = NULL;
@@ -664,7 +664,7 @@ ecore_con_client_add(Ecore_Con_Server *svr, Eo *socket)
return cl;
}
-EAPI int
+ECORE_CON_API int
ecore_con_client_send(Ecore_Con_Client *cl, const void *data, int size)
{
Eina_Error err;
@@ -686,28 +686,28 @@ ecore_con_client_send(Ecore_Con_Client *cl, const void *data, int size)
return slice.len;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_client_connected_get(const Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RETURN(cl, EINA_FALSE);
return !efl_io_closer_closed_get(cl->socket);
}
-EAPI void
+ECORE_CON_API void
ecore_con_client_timeout_set(Ecore_Con_Client *cl, double timeout)
{
ECORE_CON_CLIENT_CHECK_RETURN(cl);
efl_io_buffered_stream_timeout_inactivity_set(cl->socket, timeout);
}
-EAPI double
+ECORE_CON_API double
ecore_con_client_timeout_get(const Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RETURN(cl, -1.0);
return efl_io_buffered_stream_timeout_inactivity_get(cl->socket);
}
-EAPI void *
+ECORE_CON_API void *
ecore_con_client_del(Ecore_Con_Client *cl)
{
const void *data;
@@ -720,7 +720,7 @@ ecore_con_client_del(Ecore_Con_Client *cl)
return (void *)data;
}
-EAPI void
+ECORE_CON_API void
ecore_con_client_data_set(Ecore_Con_Client *cl,
const void *data)
{
@@ -728,42 +728,42 @@ ecore_con_client_data_set(Ecore_Con_Client *cl,
cl->data = data;
}
-EAPI void *
+ECORE_CON_API void *
ecore_con_client_data_get(Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RELAXED_RETURN(cl, NULL);
return (void *)cl->data;
}
-EAPI const char *
+ECORE_CON_API const char *
ecore_con_client_ip_get(const Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RELAXED_RETURN(cl, NULL);
return cl->ip;
}
-EAPI int
+ECORE_CON_API int
ecore_con_client_port_get(const Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RELAXED_RETURN(cl, -1);
return cl->port;
}
-EAPI Ecore_Con_Server *
+ECORE_CON_API Ecore_Con_Server *
ecore_con_client_server_get(const Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RELAXED_RETURN(cl, NULL);
return cl->svr;
}
-EAPI double
+ECORE_CON_API double
ecore_con_client_uptime_get(const Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RELAXED_RETURN(cl, 0.0);
return ecore_time_get() - cl->start_time;
}
-EAPI void
+ECORE_CON_API void
ecore_con_client_flush(Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RETURN(cl);
@@ -782,7 +782,7 @@ ecore_con_client_flush(Ecore_Con_Client *cl)
efl_net_socket_tcp_cork_set(inner_socket, EINA_TRUE);
}
-EAPI int
+ECORE_CON_API int
ecore_con_client_fd_get(const Ecore_Con_Client *cl)
{
ECORE_CON_CLIENT_CHECK_RETURN(cl, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
@@ -896,7 +896,7 @@ _ecore_con_server_job_schedule(Ecore_Con_Server *svr, Eo *loop,
eina_future_then(efl_loop_job(loop), cb, svr, &svr->ssl.job);
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_ssl_client_upgrade(Ecore_Con_Client *cl, Ecore_Con_Type compl_type)
{
Ecore_Con_Server *svr;
@@ -1692,7 +1692,7 @@ _ecore_con_server_server_ssl_job(void *data, const Eina_Value v,
* using ecore_con_server_add()
*/
-EAPI Ecore_Con_Server *
+ECORE_CON_API Ecore_Con_Server *
ecore_con_server_add(Ecore_Con_Type compl_type,
const char *name,
int port,
@@ -2161,7 +2161,7 @@ _ecore_con_server_dialer_ssl_upgrade_job(void *data, const Eina_Value v,
* example server using ecore_con_server_connect().
*/
-EAPI Ecore_Con_Server *
+ECORE_CON_API Ecore_Con_Server *
ecore_con_server_connect(Ecore_Con_Type compl_type,
const char *name,
int port,
@@ -2256,14 +2256,14 @@ ecore_con_server_connect(Ecore_Con_Type compl_type,
return NULL;
}
-EAPI const char *
+ECORE_CON_API const char *
ecore_con_server_name_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RELAXED_RETURN(svr, NULL);
return svr->name;
}
-EAPI void
+ECORE_CON_API void
ecore_con_server_client_limit_set(Ecore_Con_Server *svr,
int client_limit,
char reject_excess_clients)
@@ -2273,14 +2273,14 @@ ecore_con_server_client_limit_set(Ecore_Con_Server *svr,
efl_net_server_clients_limit_set(svr->server, client_limit, reject_excess_clients);
}
-EAPI const Eina_List *
+ECORE_CON_API const Eina_List *
ecore_con_server_clients_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, NULL);
return svr->clients;
}
-EAPI void
+ECORE_CON_API void
ecore_con_server_timeout_set(Ecore_Con_Server *svr, double timeout)
{
ECORE_CON_SERVER_CHECK_RETURN(svr);
@@ -2291,14 +2291,14 @@ ecore_con_server_timeout_set(Ecore_Con_Server *svr, double timeout)
efl_io_buffered_stream_timeout_inactivity_set(svr->dialer, timeout);
}
-EAPI double
+ECORE_CON_API double
ecore_con_server_timeout_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, -1.0);
return svr->timeout;
}
-EAPI void *
+ECORE_CON_API void *
ecore_con_server_del(Ecore_Con_Server *svr)
{
const void *data;
@@ -2311,14 +2311,14 @@ ecore_con_server_del(Ecore_Con_Server *svr)
return (void *)data;
}
-EAPI void *
+ECORE_CON_API void *
ecore_con_server_data_get(Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RELAXED_RETURN(svr, NULL);
return (void *)svr->data;
}
-EAPI void *
+ECORE_CON_API void *
ecore_con_server_data_set(Ecore_Con_Server *svr,
void *data)
{
@@ -2330,7 +2330,7 @@ ecore_con_server_data_set(Ecore_Con_Server *svr,
return (void *)old;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_server_connected_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, EINA_FALSE);
@@ -2343,14 +2343,14 @@ ecore_con_server_connected_get(const Ecore_Con_Server *svr)
return EINA_TRUE;
}
-EAPI int
+ECORE_CON_API int
ecore_con_server_port_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RELAXED_RETURN(svr, -1);
return svr->port;
}
-EAPI int
+ECORE_CON_API int
ecore_con_server_send(Ecore_Con_Server *svr, const void *data, int size)
{
Eina_Error err;
@@ -2394,21 +2394,21 @@ ecore_con_server_send(Ecore_Con_Server *svr, const void *data, int size)
return slice.len;
}
-EAPI const char *
+ECORE_CON_API const char *
ecore_con_server_ip_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RELAXED_RETURN(svr, NULL);
return svr->ip;
}
-EAPI double
+ECORE_CON_API double
ecore_con_server_uptime_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RELAXED_RETURN(svr, 0.0);
return ecore_time_get() - svr->start_time;
}
-EAPI void
+ECORE_CON_API void
ecore_con_server_flush(Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr);
@@ -2431,7 +2431,7 @@ ecore_con_server_flush(Ecore_Con_Server *svr)
efl_net_socket_tcp_cork_set(inner_dialer, EINA_TRUE);
}
-EAPI int
+ECORE_CON_API int
ecore_con_server_fd_get(const Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
@@ -2464,7 +2464,7 @@ ecore_con_server_fd_get(const Ecore_Con_Server *svr)
return SOCKET_TO_LOOP_FD(INVALID_SOCKET);
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, const char *cert)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, EINA_FALSE);
@@ -2479,7 +2479,7 @@ ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, const char *cert)
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, const char *privkey)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, EINA_FALSE);
@@ -2494,7 +2494,7 @@ ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, const char *privkey)
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, const char *crl)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, EINA_FALSE);
@@ -2509,7 +2509,7 @@ ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, const char *crl)
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, const char *cafile)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, EINA_FALSE);
@@ -2524,7 +2524,7 @@ ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, const char *cafile)
return EINA_TRUE;
}
-EAPI void
+ECORE_CON_API void
ecore_con_ssl_server_verify(Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr);
@@ -2544,7 +2544,7 @@ ecore_con_ssl_server_verify(Ecore_Con_Server *svr)
svr->ssl.verify = EINA_TRUE;
}
-EAPI void
+ECORE_CON_API void
ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr);
@@ -2565,7 +2565,7 @@ ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr)
svr->ssl.verify_basic = EINA_TRUE;
}
-EAPI void
+ECORE_CON_API void
ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *svr, const char *name)
{
ECORE_CON_SERVER_CHECK_RETURN(svr);
@@ -2579,14 +2579,14 @@ ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *svr, const char *name)
eina_stringshare_replace(&svr->ssl.verify_name, name);
}
-EAPI const char *
+ECORE_CON_API const char *
ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *svr)
{
ECORE_CON_SERVER_CHECK_RETURN(svr, NULL);
return svr->ssl.verify_name ? svr->ssl.verify_name : svr->name;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type compl_type)
{
double start;
@@ -2674,7 +2674,7 @@ _ecore_con_lookup_done_cb(void *data, const char *host, const char *port EINA_UN
* - doesn't return a handle to cancel (likely to access memory after free)
* - doesn't report errors
*/
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_lookup(const char *name, Ecore_Con_Dns_Cb done_cb, const void *data)
{
Ecore_Con_Lookup_Ctx *ctx;
diff --git a/src/lib/ecore_con/ecore_con_local.c b/src/lib/ecore_con/ecore_con_local.c
index fae182e133..749589c602 100644
--- a/src/lib/ecore_con/ecore_con_local.c
+++ b/src/lib/ecore_con/ecore_con_local.c
@@ -17,10 +17,6 @@
#endif
#include <libgen.h>
-#ifdef HAVE_SYSTEMD
-# include <systemd/sd-daemon.h>
-#endif
-
#ifdef _WIN32
# include <ws2tcpip.h>
#endif
@@ -31,7 +27,7 @@
#include "Ecore_Con.h"
#include "ecore_con_private.h"
-EAPI char *
+ECORE_CON_API char *
ecore_con_local_path_new(Eina_Bool is_system, const char *name, int port)
{
#if _WIN32
diff --git a/src/lib/ecore_con/ecore_con_local_win32.c b/src/lib/ecore_con/ecore_con_local_win32.c
index 6b68bf07fe..426b86f66a 100644
--- a/src/lib/ecore_con/ecore_con_local_win32.c
+++ b/src/lib/ecore_con/ecore_con_local_win32.c
@@ -361,7 +361,7 @@ _ecore_con_local_win32_listening(void *data)
return 0;
}
-EAPI char *
+ECORE_CON_API char *
ecore_con_local_path_new(Eina_Bool is_system, const char *name, int port)
{
char buf[256];
diff --git a/src/lib/ecore_con/ecore_con_private.h b/src/lib/ecore_con/ecore_con_private.h
index 7f0c95d61d..805abbecb6 100644
--- a/src/lib/ecore_con/ecore_con_private.h
+++ b/src/lib/ecore_con/ecore_con_private.h
@@ -90,6 +90,13 @@ struct Ecore_Con_Socks_v5
#ifdef HAVE_SYSTEMD
extern int sd_fd_index;
extern int sd_fd_max;
+
+void _ecore_con_sd_init(void);
+
+extern int (*_ecore_sd_listen_fds) (int unset_environment);
+extern int (*_ecore_sd_is_socket_unix) (int fd, int type, int listening, const char *path, size_t length);
+extern int (*_ecore_sd_is_socket) (int fd, int family, int type, int listening);
+
#endif
/* init must be called from main thread */
diff --git a/src/lib/ecore_con/ecore_con_socks.c b/src/lib/ecore_con/ecore_con_socks.c
index 0068b33076..bc75a9bc1b 100644
--- a/src/lib/ecore_con/ecore_con_socks.c
+++ b/src/lib/ecore_con/ecore_con_socks.c
@@ -172,7 +172,7 @@ ecore_con_socks_init(void)
* General Socks API.
*/
-EAPI Ecore_Con_Socks *
+ECORE_CON_API Ecore_Con_Socks *
ecore_con_socks4_remote_add(const char *ip, int port, const char *username)
{
Ecore_Con_Socks *ecs;
@@ -201,7 +201,7 @@ ecore_con_socks4_remote_add(const char *ip, int port, const char *username)
return ecs;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_socks4_remote_exists(const char *ip, int port, const char *username)
{
if ((!ip) || (!ip[0]) || (port < -1) || (port > 65535) || (username && (!username[0])))
@@ -209,7 +209,7 @@ ecore_con_socks4_remote_exists(const char *ip, int port, const char *username)
return !!_ecore_con_socks_find(4, ip, port, username, username ? strlen(username) : 0, NULL, 0);
}
-EAPI void
+ECORE_CON_API void
ecore_con_socks4_remote_del(const char *ip, int port, const char *username)
{
Ecore_Con_Socks_v4 *v4;
@@ -223,7 +223,7 @@ ecore_con_socks4_remote_del(const char *ip, int port, const char *username)
_ecore_con_socks_free((Ecore_Con_Socks *)v4);
}
-EAPI Ecore_Con_Socks *
+ECORE_CON_API Ecore_Con_Socks *
ecore_con_socks5_remote_add(const char *ip, int port, const char *username, const char *password)
{
Ecore_Con_Socks_v5 *ecs5;
@@ -260,7 +260,7 @@ ecore_con_socks5_remote_add(const char *ip, int port, const char *username, cons
return (Ecore_Con_Socks *)ecs5;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_socks5_remote_exists(const char *ip, int port, const char *username, const char *password)
{
if ((!ip) || (!ip[0]) || (port < -1) || (port > 65535) || (username && (!username[0])) || (password && (!password[0])))
@@ -268,7 +268,7 @@ ecore_con_socks5_remote_exists(const char *ip, int port, const char *username, c
return !!_ecore_con_socks_find(5, ip, port, username, username ? strlen(username) : 0, password, password ? strlen(password) : 0);
}
-EAPI void
+ECORE_CON_API void
ecore_con_socks5_remote_del(const char *ip, int port, const char *username, const char *password)
{
Ecore_Con_Socks_v5 *v5;
@@ -283,21 +283,21 @@ ecore_con_socks5_remote_del(const char *ip, int port, const char *username, cons
_ecore_con_socks_free((Ecore_Con_Socks *)v5);
}
-EAPI void
+ECORE_CON_API void
ecore_con_socks_lookup_set(Ecore_Con_Socks *ecs, Eina_Bool enable)
{
ECORE_CON_SOCKS_VERSION_CHECK(ecs);
ecs->lookup = !!enable;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_socks_lookup_get(Ecore_Con_Socks *ecs)
{
ECORE_CON_SOCKS_VERSION_CHECK_RETURN(ecs, EINA_FALSE);
return ecs->lookup;
}
-EAPI void
+ECORE_CON_API void
ecore_con_socks_bind_set(Ecore_Con_Socks *ecs, Eina_Bool is_bind)
{
EINA_SAFETY_ON_NULL_RETURN(ecs);
@@ -305,7 +305,7 @@ ecore_con_socks_bind_set(Ecore_Con_Socks *ecs, Eina_Bool is_bind)
ecs->bind = !!is_bind;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_socks_bind_get(Ecore_Con_Socks *ecs)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ecs, EINA_FALSE);
@@ -313,7 +313,7 @@ ecore_con_socks_bind_get(Ecore_Con_Socks *ecs)
return ecs->bind;
}
-EAPI unsigned int
+ECORE_CON_API unsigned int
ecore_con_socks_version_get(Ecore_Con_Socks *ecs)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ecs, 0);
@@ -321,7 +321,7 @@ ecore_con_socks_version_get(Ecore_Con_Socks *ecs)
return ecs->version;
}
-EAPI void
+ECORE_CON_API void
ecore_con_socks_remote_del(Ecore_Con_Socks *ecs)
{
EINA_SAFETY_ON_NULL_RETURN(ecs);
@@ -331,13 +331,13 @@ ecore_con_socks_remote_del(Ecore_Con_Socks *ecs)
_ecore_con_socks_free(ecs);
}
-EAPI void
+ECORE_CON_API void
ecore_con_socks_apply_once(Ecore_Con_Socks *ecs)
{
_ecore_con_proxy_once = ecs;
}
-EAPI void
+ECORE_CON_API void
ecore_con_socks_apply_always(Ecore_Con_Socks *ecs)
{
_ecore_con_proxy_global = ecs;
diff --git a/src/lib/ecore_con/ecore_con_url.c b/src/lib/ecore_con/ecore_con_url.c
index c92af111c9..4df3e71079 100644
--- a/src/lib/ecore_con/ecore_con_url.c
+++ b/src/lib/ecore_con/ecore_con_url.c
@@ -41,7 +41,7 @@ static Eina_List *_url_con_url_list = NULL;
* @{
*/
-EAPI int
+ECORE_CON_API int
ecore_con_url_init(void)
{
if (++_init_count > 1) return _init_count;
@@ -49,7 +49,6 @@ ecore_con_url_init(void)
if (!ecore_con_init()) goto ecore_con_init_failed;
if (!emile_init()) goto emile_init_failed;
if (!emile_cipher_init()) goto emile_cipher_init_failed;
- _c_init();
ECORE_CON_EVENT_URL_DATA = ecore_event_type_new();
ECORE_CON_EVENT_URL_COMPLETE = ecore_event_type_new();
ECORE_CON_EVENT_URL_PROGRESS = ecore_event_type_new();
@@ -65,7 +64,7 @@ ecore_con_url_init(void)
return --_init_count;
}
-EAPI int
+ECORE_CON_API int
ecore_con_url_shutdown(void)
{
Ecore_Con_Url *url_con_url;
@@ -79,14 +78,13 @@ ecore_con_url_shutdown(void)
ECORE_CON_EVENT_URL_COMPLETE,
ECORE_CON_EVENT_URL_PROGRESS);
- _c_shutdown();
emile_shutdown(); /* no emile_cipher_shutdown(), handled here */
ecore_con_shutdown();
ecore_shutdown();
return 0;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_pipeline_set(Eina_Bool enable)
{
if (!_c_init()) return;
@@ -95,7 +93,7 @@ ecore_con_url_pipeline_set(Eina_Bool enable)
pipelining = enable;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_pipeline_get(void)
{
return pipelining;
@@ -161,7 +159,7 @@ struct _Ecore_Con_Url
{ \
if (!EINA_MAGIC_CHECK(u, ECORE_MAGIC_CON_URL)) \
{ \
- ECORE_MAGIC_FAIL(u, ECORE_MAGIC_CON_URL, __FUNCTION__); \
+ ECORE_MAGIC_FAIL(u, ECORE_MAGIC_CON_URL, __func__); \
return __VA_ARGS__; \
} \
EINA_SAFETY_ON_TRUE_RETURN_VAL(u->delete_me, __VA_ARGS__); \
@@ -780,7 +778,7 @@ _ecore_con_url_request_prepare(Ecore_Con_Url *url_con, const char *method)
return EINA_FALSE;
}
-EAPI Ecore_Con_Url *
+ECORE_CON_API Ecore_Con_Url *
ecore_con_url_new(const char *url)
{
Ecore_Con_Url *url_con;
@@ -800,7 +798,7 @@ ecore_con_url_new(const char *url)
return url_con;
}
-EAPI Ecore_Con_Url *
+ECORE_CON_API Ecore_Con_Url *
ecore_con_url_custom_new(const char *url,
const char *custom_request)
{
@@ -817,7 +815,7 @@ ecore_con_url_custom_new(const char *url,
return url_con;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_free(Ecore_Con_Url *url_con)
{
ECORE_CON_URL_CHECK_RETURN(url_con);
@@ -828,14 +826,14 @@ ecore_con_url_free(Ecore_Con_Url *url_con)
_ecore_con_url_free_internal(url_con);
}
-EAPI void *
+ECORE_CON_API void *
ecore_con_url_data_get(Ecore_Con_Url *url_con)
{
ECORE_CON_URL_CHECK_RETURN(url_con, NULL);
return url_con->data;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_data_set(Ecore_Con_Url *url_con,
void *data)
{
@@ -843,7 +841,7 @@ ecore_con_url_data_set(Ecore_Con_Url *url_con,
url_con->data = data;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_url_set(Ecore_Con_Url *url_con,
const char *url)
{
@@ -852,7 +850,7 @@ ecore_con_url_url_set(Ecore_Con_Url *url_con,
return EINA_TRUE;
}
-EAPI const char *
+ECORE_CON_API const char *
ecore_con_url_url_get(Ecore_Con_Url *url_con)
{
ECORE_CON_URL_CHECK_RETURN(url_con, NULL);
@@ -860,7 +858,7 @@ ecore_con_url_url_get(Ecore_Con_Url *url_con)
}
/* LEGACY: HTTP requests */
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_get(Ecore_Con_Url *url_con)
{
Eina_Error err;
@@ -881,7 +879,7 @@ ecore_con_url_get(Ecore_Con_Url *url_con)
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_head(Ecore_Con_Url *url_con)
{
Eina_Error err;
@@ -902,7 +900,7 @@ ecore_con_url_head(Ecore_Con_Url *url_con)
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_post(Ecore_Con_Url *url_con,
const void *data,
long length,
@@ -965,7 +963,7 @@ ecore_con_url_post(Ecore_Con_Url *url_con,
}
/* LEGACY: headers */
-EAPI void
+ECORE_CON_API void
ecore_con_url_additional_header_add(Ecore_Con_Url *url_con,
const char *key,
const char *value)
@@ -992,14 +990,14 @@ ecore_con_url_additional_header_add(Ecore_Con_Url *url_con,
header);
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_additional_headers_clear(Ecore_Con_Url *url_con)
{
ECORE_CON_URL_CHECK_RETURN(url_con);
_ecore_con_url_request_headers_free(url_con);
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_time(Ecore_Con_Url *url_con,
Ecore_Con_Url_Time time_condition,
double timestamp)
@@ -1010,7 +1008,7 @@ ecore_con_url_time(Ecore_Con_Url *url_con,
}
/* LEGACY: cookies */
-EAPI void
+ECORE_CON_API void
ecore_con_url_cookies_init(Ecore_Con_Url *url_con)
{
CURL *curl_easy;
@@ -1028,7 +1026,7 @@ ecore_con_url_cookies_init(Ecore_Con_Url *url_con)
_c->curl_easy_setopt(curl_easy, CURLOPT_COOKIEFILE, "");
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con,
const char * const file_name)
{
@@ -1048,7 +1046,7 @@ ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con,
_c->curl_easy_setopt(curl_easy, CURLOPT_COOKIEFILE, file_name);
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_cookies_clear(Ecore_Con_Url *url_con)
{
static const char cookielist_cmd_all[] = "ALL";
@@ -1069,7 +1067,7 @@ ecore_con_url_cookies_clear(Ecore_Con_Url *url_con)
_c->curl_easy_setopt(curl_easy, CURLOPT_COOKIELIST, cookielist_cmd_all);
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_con)
{
static const char cookielist_cmd_sess[] = "SESS";
@@ -1090,7 +1088,7 @@ ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_con)
_c->curl_easy_setopt(curl_easy, CURLOPT_COOKIELIST, cookielist_cmd_sess);
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con,
Eina_Bool ignore)
{
@@ -1098,7 +1096,7 @@ ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con,
url_con->cookies.ignore_old_session = ignore;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con,
const char * const cookiejar_file)
{
@@ -1119,7 +1117,7 @@ ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con,
return EINA_TRUE;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con)
{
CURL *curl_easy;
@@ -1136,7 +1134,7 @@ ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con)
}
/* LEGACY: file upload/download */
-EAPI void
+ECORE_CON_API void
ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd)
{
ECORE_CON_URL_CHECK_RETURN(url_con);
@@ -1147,7 +1145,7 @@ ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd)
if (!url_con->dialer) return;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
const char *filename,
const char *user,
@@ -1213,7 +1211,7 @@ ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
return EINA_FALSE;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con,
Eina_Bool use_epsv)
{
@@ -1221,7 +1219,7 @@ ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con,
url_con->ftp_use_epsv = use_epsv;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_limit_upload_speed(Ecore_Con_Url *url_con, off_t max_speed)
{
CURL *curl_easy;
@@ -1235,7 +1233,7 @@ ecore_con_url_limit_upload_speed(Ecore_Con_Url *url_con, off_t max_speed)
_c->curl_easy_setopt(curl_easy, CURLOPT_MAX_SEND_SPEED_LARGE, max_speed);
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_limit_download_speed(Ecore_Con_Url *url_con, off_t max_speed)
{
CURL *curl_easy;
@@ -1250,7 +1248,7 @@ ecore_con_url_limit_download_speed(Ecore_Con_Url *url_con, off_t max_speed)
}
/* LEGACY: proxy */
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password)
{
ECORE_CON_URL_CHECK_RETURN(url_con, EINA_FALSE);
@@ -1259,7 +1257,7 @@ ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password)
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const char *username)
{
ECORE_CON_URL_CHECK_RETURN(url_con, EINA_FALSE);
@@ -1268,7 +1266,7 @@ ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const char *username)
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy_url)
{
ECORE_CON_URL_CHECK_RETURN(url_con, EINA_FALSE);
@@ -1277,14 +1275,14 @@ ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy_url)
}
/* LEGACY: response */
-EAPI int
+ECORE_CON_API int
ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con)
{
ECORE_CON_URL_CHECK_RETURN(url_con, EINA_FALSE);
return url_con->received_bytes;
}
-EAPI int
+ECORE_CON_API int
ecore_con_url_status_code_get(Ecore_Con_Url *url_con)
{
ECORE_CON_URL_CHECK_RETURN(url_con, 0);
@@ -1292,7 +1290,7 @@ ecore_con_url_status_code_get(Ecore_Con_Url *url_con)
return efl_net_dialer_http_response_status_get(url_con->dialer);
}
-EAPI const Eina_List *
+ECORE_CON_API const Eina_List *
ecore_con_url_response_headers_get(Ecore_Con_Url *url_con)
{
ECORE_CON_URL_CHECK_RETURN(url_con, NULL);
@@ -1300,7 +1298,7 @@ ecore_con_url_response_headers_get(Ecore_Con_Url *url_con)
}
/* LEGACY: SSL */
-EAPI int
+ECORE_CON_API int
ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
const char *ca_path)
{
@@ -1310,7 +1308,7 @@ ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
return 0;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_ssl_verify_peer_set(Ecore_Con_Url *url_con,
Eina_Bool verify)
{
@@ -1319,7 +1317,7 @@ ecore_con_url_ssl_verify_peer_set(Ecore_Con_Url *url_con,
}
/* LEGACY: misc */
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
const char *username,
const char *password,
@@ -1336,7 +1334,7 @@ ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
return EINA_TRUE;
}
-EAPI Eina_Bool
+ECORE_CON_API Eina_Bool
ecore_con_url_http_version_set(Ecore_Con_Url *url_con, Ecore_Con_Url_Http_Version version)
{
ECORE_CON_URL_CHECK_RETURN(url_con, EINA_FALSE);
@@ -1377,7 +1375,7 @@ _ecore_con_url_timeout_cb(void *data)
return EINA_FALSE;
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout)
{
ECORE_CON_URL_CHECK_RETURN(url_con);
@@ -1395,7 +1393,7 @@ ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout)
url_con->timer = ecore_timer_add(timeout, _ecore_con_url_timeout_cb, url_con);
}
-EAPI void
+ECORE_CON_API void
ecore_con_url_verbose_set(Ecore_Con_Url *url_con,
Eina_Bool verbose)
{
@@ -1419,3 +1417,8 @@ ecore_con_url_verbose_set(Ecore_Con_Url *url_con,
}
_c->curl_easy_setopt(curl_easy, CURLOPT_VERBOSE, (long)url_con->verbose);
}
+
+/**
+ * @}
+ */
+
diff --git a/src/lib/ecore_con/ecore_con_url_curl.c b/src/lib/ecore_con/ecore_con_url_curl.c
index f4fe730cdd..1cd6a10a98 100644
--- a/src/lib/ecore_con/ecore_con_url_curl.c
+++ b/src/lib/ecore_con/ecore_con_url_curl.c
@@ -22,57 +22,57 @@ Ecore_Con_Curl *_c = NULL;
Eina_Bool _c_fail = EINA_FALSE;
double _c_timeout = 0.0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_BAD_CONTENT_ENCODING = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_BAD_DOWNLOAD_RESUME = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_BAD_FUNCTION_ARGUMENT = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_CHUNK_FAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_CONV_FAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_CONV_REQD = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_FAILED_INIT = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_FILE_COULDNT_READ_FILE = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_FILESIZE_EXCEEDED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_FUNCTION_NOT_FOUND = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_GOT_NOTHING = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP2 = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP2_STREAM = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP_POST_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_HTTP_RETURNED_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_INTERFACE_FAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_LOGIN_DENIED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_NO_CONNECTION_AVAILABLE = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_NOT_BUILT_IN = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_OPERATION_TIMEDOUT = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_PARTIAL_FILE = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_PEER_FAILED_VERIFICATION = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_RANGE_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_READ_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_RECV_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_ACCESS_DENIED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_DISK_FULL = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_EXISTS = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_NOT_FOUND = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SEND_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SEND_FAIL_REWIND = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT_BADFILE = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CERTPROBLEM = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CIPHER = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CONNECT_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_CRL_BADFILE = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_INITFAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_NOTFOUND = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_SETFAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_INVALIDCERTSTATUS = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_ISSUER_ERROR = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_PINNEDPUBKEYNOTMATCH = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_SSL_SHUTDOWN_FAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_TOO_MANY_REDIRECTS = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_UNKNOWN_OPTION = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_UNSUPPORTED_PROTOCOL = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_UPLOAD_FAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_URL_MALFORMAT = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_USE_SSL_FAILED = 0;
-EWAPI Eina_Error EFL_NET_HTTP_ERROR_WRITE_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_BAD_CONTENT_ENCODING = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_BAD_DOWNLOAD_RESUME = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_BAD_FUNCTION_ARGUMENT = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_CHUNK_FAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_CONV_FAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_CONV_REQD = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_FAILED_INIT = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_FILE_COULDNT_READ_FILE = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_FILESIZE_EXCEEDED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_FUNCTION_NOT_FOUND = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_GOT_NOTHING = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_HTTP2 = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_HTTP2_STREAM = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_HTTP_POST_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_HTTP_RETURNED_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_INTERFACE_FAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_LOGIN_DENIED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_NO_CONNECTION_AVAILABLE = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_NOT_BUILT_IN = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_OPERATION_TIMEDOUT = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_PARTIAL_FILE = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_PEER_FAILED_VERIFICATION = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_RANGE_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_READ_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_RECV_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_REMOTE_ACCESS_DENIED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_REMOTE_DISK_FULL = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_EXISTS = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_REMOTE_FILE_NOT_FOUND = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SEND_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SEND_FAIL_REWIND = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_CACERT_BADFILE = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_CERTPROBLEM = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_CIPHER = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_CONNECT_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_CRL_BADFILE = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_INITFAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_NOTFOUND = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_ENGINE_SETFAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_INVALIDCERTSTATUS = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_ISSUER_ERROR = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_PINNEDPUBKEYNOTMATCH = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_SSL_SHUTDOWN_FAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_TOO_MANY_REDIRECTS = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_UNKNOWN_OPTION = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_UNSUPPORTED_PROTOCOL = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_UPLOAD_FAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_URL_MALFORMAT = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_USE_SSL_FAILED = 0;
+ECORE_CON_API ECORE_CON_API_WEAK Eina_Error EFL_NET_HTTP_ERROR_WRITE_ERROR = 0;
Eina_Error
_curlcode_to_eina_error(const CURLcode code)
diff --git a/src/lib/ecore_con/efl_net_control-connman.c b/src/lib/ecore_con/efl_net_control-connman.c
index 8334d4d0b2..ceb3541f31 100644
--- a/src/lib/ecore_con/efl_net_control-connman.c
+++ b/src/lib/ecore_con/efl_net_control-connman.c
@@ -212,6 +212,7 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
Efl_Net_Control_Agent_Request_Input event = { };
Efl_Net_Control_Agent_Request_Input_Information *info;
Eldbus_Message_Iter *array, *entry;
+ Eina_Array infos;
const char *path;
DBG("Agent %p requested input %s", o, eldbus_message_path_get(msg));
@@ -231,6 +232,8 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
if (!eldbus_message_arguments_get(msg, "oa{sv}", &path, &array))
goto err;
+ eina_array_step_set(&infos, sizeof (Eina_Array), 4);
+ event.informational = eina_array_accessor_new(&infos);
event.access_point = _efl_net_control_access_point_find(pd, path);
while (eldbus_message_iter_get_and_next(array, 'e', &entry))
@@ -261,7 +264,7 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
{
info = _efl_net_control_agent_informational_get(name, var);
if (info)
- event.informational = eina_list_append(event.informational, info);
+ eina_array_push(&infos, info);
else
WRN("Unknown field name '%s'", name);
}
@@ -270,7 +273,9 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
pd->agent_request_input.msg = eldbus_message_ref((Eldbus_Message *)msg);
efl_event_callback_call(o, EFL_NET_CONTROL_MANAGER_EVENT_AGENT_REQUEST_INPUT, &event);
- EINA_LIST_FREE(event.informational, info) free(info);
+ eina_accessor_free(event.informational);
+ while ((info = eina_array_pop(&infos))) free(info);
+ eina_array_flush(&infos);
return NULL; /* reply later */
diff --git a/src/lib/ecore_con/efl_net_control_manager.eo b/src/lib/ecore_con/efl_net_control_manager.eo
index 3c84235bf7..eb0a61477b 100644
--- a/src/lib/ecore_con/efl_net_control_manager.eo
+++ b/src/lib/ecore_con/efl_net_control_manager.eo
@@ -36,7 +36,7 @@ struct @beta Efl.Net.Control.Agent_Request_Input {
access_point: Efl.Net.Control.Access_Point; [[The access point which triggered this request.]]
fields: Efl.Net.Control.Agent_Request_Input_Field; [[Bitwise OR of fields present in this request.]]
passphrase_type: string; [[Extra detail for the passphrase field, such as wep, psk, response (IEEE802.X GTC/OTP), string...]]
- informational: list<Efl.Net.Control.Agent_Request_Input_Information>; [[Such as the previous passphrase, VPN host]]
+ informational: accessor<Efl.Net.Control.Agent_Request_Input_Information>; [[Such as the previous passphrase, VPN host]]
}
struct @beta Efl.Net.Control.Agent_Error {
diff --git a/src/lib/ecore_con/efl_net_dialer_http.c b/src/lib/ecore_con/efl_net_dialer_http.c
index b6467b2c23..7215d9a195 100644
--- a/src/lib/ecore_con/efl_net_dialer_http.c
+++ b/src/lib/ecore_con/efl_net_dialer_http.c
@@ -1674,7 +1674,7 @@ _efl_net_dialer_http_efl_io_writer_write(Eo *o, Efl_Net_Dialer_Http_Data *pd, Ei
CURL_CSELECT_OUT, &pd->cm->running);
if (rm != CURLM_OK)
{
- err = _curlcode_to_eina_error(rm);
+ err = _curlmcode_to_eina_error(rm);
ERR("dialer=%p could not trigger socket=" SOCKET_FMT " (fdhandler=%p) action: %s",
o, pd->fd, pd->fdhandler, eina_error_msg_get(err));
goto error;
diff --git a/src/lib/ecore_con/efl_net_dialer_http.eo b/src/lib/ecore_con/efl_net_dialer_http.eo
index 00bff4131b..f194d7bdc6 100644
--- a/src/lib/ecore_con/efl_net_dialer_http.eo
+++ b/src/lib/ecore_con/efl_net_dialer_http.eo
@@ -310,7 +310,7 @@ class @beta Efl.Net.Dialer_Http extends Efl.Loop_Consumer implements Efl.Net.Dia
If a new, empty session is to be used, start with an
empty or non-existent file such as created with
- mkstemp() or tmpfile(). Alternatively use an
+ eina_file_mkstemp() or tmpfile(). Alternatively use an
empty string ("") to store it in memory.
If you want to start from a pre-existing cookie jar
diff --git a/src/lib/ecore_con/efl_net_dialer_unix.c b/src/lib/ecore_con/efl_net_dialer_unix.c
index b2d3dfce39..000ba66013 100644
--- a/src/lib/ecore_con/efl_net_dialer_unix.c
+++ b/src/lib/ecore_con/efl_net_dialer_unix.c
@@ -94,6 +94,7 @@ _efl_net_dialer_unix_connected(void *data, const struct sockaddr *addr, socklen_
{
Eo *o = data;
Efl_Net_Dialer_Unix_Data *pd = efl_data_scope_get(o, MY_CLASS);
+ if (!pd) return;
pd->connect.thread = NULL;
diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.c b/src/lib/ecore_con/efl_net_dialer_websocket.c
index e6672e600c..a16579cfc6 100644
--- a/src/lib/ecore_con/efl_net_dialer_websocket.c
+++ b/src/lib/ecore_con/efl_net_dialer_websocket.c
@@ -86,14 +86,12 @@ _efl_net_dialer_websocket_close_reason_check(Efl_Net_Dialer_Websocket_Close_Reas
case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_TOO_BIG:
case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_MISSING_EXTENSION:
case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_SERVER_ERROR:
- case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_IANA_REGISTRY_START:
- case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_IANA_REGISTRY_END:
- case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_PRIVATE_START:
- case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_PRIVATE_END:
return EINA_TRUE;
case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_NO_REASON:
case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_ABRUPTLY:
return EINA_FALSE;
+ default:
+ break;
}
if ((r >= EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_IANA_REGISTRY_START) &&
diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.eo b/src/lib/ecore_con/efl_net_dialer_websocket.eo
index 612f504d46..1d4d98fb44 100644
--- a/src/lib/ecore_con/efl_net_dialer_websocket.eo
+++ b/src/lib/ecore_con/efl_net_dialer_websocket.eo
@@ -273,7 +273,7 @@ class @beta Efl.Net.Dialer_Websocket extends Efl.Loop_Consumer implements Efl.Ne
If a new, empty session is to be used, start with an
empty or non-existent file such as one created with
- mkstemp() or tmpfile(). Alternatively use an
+ eina_file_mkstemp() or tmpfile(). Alternatively use an
empty string ("") to keep it in memory.
If you want to start from a pre-existent cookie jar
diff --git a/src/lib/ecore_con/efl_net_http_types.eot b/src/lib/ecore_con/efl_net_http_types.eot
index 63784f86e9..15b84f5203 100644
--- a/src/lib/ecore_con/efl_net_http_types.eot
+++ b/src/lib/ecore_con/efl_net_http_types.eot
@@ -1,5 +1,3 @@
-import eina_types;
-
enum @beta Efl.Net.Http.Version {
[[HTTP protocol versions]]
diff --git a/src/lib/ecore_con/efl_net_server_fd.c b/src/lib/ecore_con/efl_net_server_fd.c
index d3d61ca46f..62fef94eed 100644
--- a/src/lib/ecore_con/efl_net_server_fd.c
+++ b/src/lib/ecore_con/efl_net_server_fd.c
@@ -14,10 +14,6 @@
# include <sys/socket.h>
#endif
-#ifdef HAVE_SYSTEMD
-# include <systemd/sd-daemon.h>
-#endif
-
#define MY_CLASS EFL_NET_SERVER_FD_CLASS
typedef struct _Efl_Net_Server_Fd_Data
@@ -233,7 +229,7 @@ _efl_net_server_fd_socket_activate(Eo *o, Efl_Net_Server_Fd_Data *pd EINA_UNUSED
}
else
{
- SOCKET fd = SD_LISTEN_FDS_START + sd_fd_index;
+ SOCKET fd = /*SD_LISTEN_FDS_START*/3 + sd_fd_index;
int family;
socklen_t len = sizeof(family);
diff --git a/src/lib/ecore_con/efl_net_server_unix.c b/src/lib/ecore_con/efl_net_server_unix.c
index ed8735fb0b..473442331f 100644
--- a/src/lib/ecore_con/efl_net_server_unix.c
+++ b/src/lib/ecore_con/efl_net_server_unix.c
@@ -18,6 +18,26 @@
#include <sys/un.h>
#endif
+// BSD workaround - unable to reproduce.... but we seem to
+// get a blocking bind here if 2 processes fight over the same
+// socket where one of them loses out by sitting here and
+// blockign forever - as i can't reproduce in the freebsd vm
+// i have, so i'm limited in what to do so this is a
+// workaround to try mitigate this
+#if defined (__FreeBSD__)
+# define BIND_HANG_WORKAROUND 1
+#else
+// only need on freebsd
+//# define BIND_HANG_WORKAROUND 1
+#endif
+
+#ifdef BIND_HANG_WORKAROUND
+# include <sys/file.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <fcntl.h>
+#endif
+
/* no include EVIL as it's not supposed to be compiled on Windows */
#define MY_CLASS EFL_NET_SERVER_UNIX_CLASS
@@ -25,21 +45,85 @@
typedef struct _Efl_Net_Server_Unix_Data
{
unsigned int leading_directories_create_mode;
- Eina_Bool leading_directories_create;
- Eina_Bool unlink_before_bind;
+#ifdef BIND_HANG_WORKAROUND
+ int lock_fd;
+ Eina_Bool have_lock_fd : 1;
+#endif
+ Eina_Bool leading_directories_create : 1;
+ Eina_Bool unlink_before_bind : 1;
} Efl_Net_Server_Unix_Data;
+#ifdef BIND_HANG_WORKAROUND
+static int
+_efl_net_server_unix_bind_hang_lock_workaround(const char *address, Eina_Bool lock, int lockfile_fd)
+{
+ size_t addrlen;
+ char *lockfile;
+ int ret;
+
+ addrlen = strlen(address);
+ lockfile = malloc(addrlen + 1 + 5);
+ if (!lockfile) return -1;
+
+ strcpy(lockfile, address);
+ strncpy(lockfile + addrlen, ".lock", 6);
+ if (lock)
+ {
+#ifdef HAVE_OPEN_CLOEXEC
+ lockfile_fd = open(lockfile, O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC,
+ S_IRUSR | S_IWUSR);
+ if (lockfile_fd < 0) return -1;
+#else
+ lockfile_fd = open(lockfile, O_RDWR | O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR);
+ if (lockfile_fd < 0) return -1;
+ eina_file_close_on_exec(lockfile_fd, EINA_TRUE);
+#endif
+ }
+
+ errno = 0;
+ if (lock)
+ {
+ ret = flock(lockfile_fd, LOCK_EX | LOCK_NB);
+ if ((ret != 0) && (errno == EWOULDBLOCK))
+ {
+ close(lockfile_fd);
+ lockfile_fd = -1;
+ }
+ }
+ else
+ {
+ flock(lockfile_fd, LOCK_UN | LOCK_NB);
+ unlink(lockfile);
+ close(lockfile_fd);
+ lockfile_fd = -1;
+ }
+ free(lockfile);
+ return lockfile_fd;
+}
+#endif
+
EOLIAN static void
_efl_net_server_unix_efl_object_destructor(Eo *o, Efl_Net_Server_Unix_Data *pd EINA_UNUSED)
{
SOCKET fd = efl_loop_fd_get(o);
+ const char *address = efl_net_server_address_get(o);
if (fd != INVALID_SOCKET)
{
- const char *address = efl_net_server_address_get(o);
- if ((address) && (strncmp(address, "abstract:", strlen("abstract:")) != 0))
+ if ((address) &&
+ (strncmp(address, "abstract:", strlen("abstract:")) != 0))
unlink(address);
}
+#ifdef BIND_HANG_WORKAROUND
+ if ((address) && (pd->have_lock_fd) && (pd->lock_fd >= 0))
+ {
+ _efl_net_server_unix_bind_hang_lock_workaround
+ (address, EINA_FALSE, pd->lock_fd);
+ pd->lock_fd = -1;
+ pd->have_lock_fd = EINA_FALSE;
+ }
+#endif
efl_destructor(efl_super(o, MY_CLASS));
}
@@ -101,6 +185,20 @@ _efl_net_server_unix_bind(Eo *o, Efl_Net_Server_Unix_Data *pd)
unlink(addr.sun_path);
}
+#ifdef BIND_HANG_WORKAROUND
+ if (addr.sun_path[0] != '\0')
+ {
+ pd->lock_fd = _efl_net_server_unix_bind_hang_lock_workaround
+ (addr.sun_path, EINA_TRUE, -1);
+ if (pd->lock_fd < 0)
+ {
+ err = EADDRINUSE;
+ goto error;
+ }
+ pd->have_lock_fd = EINA_TRUE;
+ unlink(addr.sun_path);
+ }
+#endif
r = bind(fd, (struct sockaddr *)&addr, addrlen);
if (r != 0)
{
@@ -165,6 +263,14 @@ _efl_net_server_unix_bind(Eo *o, Efl_Net_Server_Unix_Data *pd)
error:
if (err)
{
+#ifdef BIND_HANG_WORKAROUND
+ if ((pd->have_lock_fd) && (pd->lock_fd >= 0))
+ {
+ pd->lock_fd = _efl_net_server_unix_bind_hang_lock_workaround
+ (addr.sun_path, EINA_FALSE, -1);
+ pd->have_lock_fd = EINA_TRUE;
+ }
+#endif
efl_event_callback_call(o, EFL_NET_SERVER_EVENT_SERVER_ERROR, &err);
if (fd != INVALID_SOCKET) closesocket(fd);
efl_loop_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
diff --git a/src/lib/ecore_con/efl_net_socket_windows.c b/src/lib/ecore_con/efl_net_socket_windows.c
index 717f0a0256..d01f9d7d84 100644
--- a/src/lib/ecore_con/efl_net_socket_windows.c
+++ b/src/lib/ecore_con/efl_net_socket_windows.c
@@ -634,7 +634,7 @@ _efl_net_socket_windows_efl_object_constructor(Eo *o, Efl_Net_Socket_Windows_Dat
}
EOLIAN static void
-_efl_net_socket_windows_efl_object_invalidate(Eo *o, Efl_Net_Socket_Windows_Data *pd)
+_efl_net_socket_windows_efl_object_invalidate(Eo *o, Efl_Net_Socket_Windows_Data *pd EINA_UNUSED)
{
if (efl_io_closer_close_on_invalidate_get(o) &&
(!efl_io_closer_closed_get(o)))
diff --git a/src/lib/ecore_con/efl_net_ssl_conn-openssl.c b/src/lib/ecore_con/efl_net_ssl_conn-openssl.c
index fc8fb2e95f..e59c6811c9 100644
--- a/src/lib/ecore_con/efl_net_ssl_conn-openssl.c
+++ b/src/lib/ecore_con/efl_net_ssl_conn-openssl.c
@@ -152,12 +152,18 @@ __efl_net_socket_bio_get(void)
if (efl_net_socket_bio) return efl_net_socket_bio;
efl_net_socket_bio = BIO_meth_new(0x400 /* 0x400 means source & sink */,
"efl_net_socket wrapper");
- BIO_meth_set_write(efl_net_socket_bio, efl_net_socket_bio_write);
- BIO_meth_set_read(efl_net_socket_bio, efl_net_socket_bio_read);
- BIO_meth_set_puts(efl_net_socket_bio, efl_net_socket_bio_puts);
- BIO_meth_set_ctrl(efl_net_socket_bio, efl_net_socket_bio_ctrl);
- BIO_meth_set_create(efl_net_socket_bio, efl_net_socket_bio_create);
- BIO_meth_set_destroy(efl_net_socket_bio, efl_net_socket_bio_destroy);
+ if (!efl_net_socket_bio) return NULL;
+ if (!BIO_meth_set_write(efl_net_socket_bio, efl_net_socket_bio_write)
+ || !BIO_meth_set_read(efl_net_socket_bio, efl_net_socket_bio_read)
+ || !BIO_meth_set_puts(efl_net_socket_bio, efl_net_socket_bio_puts)
+ || !BIO_meth_set_ctrl(efl_net_socket_bio, efl_net_socket_bio_ctrl)
+ || !BIO_meth_set_create(efl_net_socket_bio, efl_net_socket_bio_create)
+ || !BIO_meth_set_destroy(efl_net_socket_bio, efl_net_socket_bio_destroy))
+ {
+ BIO_meth_free(efl_net_socket_bio);
+ efl_net_socket_bio = NULL;
+ return NULL;
+ }
// FIXME: some day we need to clean up, but for now a singleton alloc is ok
// BIO_meth_free(efl_net_socket_bio);
return efl_net_socket_bio;
@@ -189,7 +195,7 @@ struct _Efl_Net_Ssl_Conn
#define EFL_NET_SOCKET_SSL_CIPHERS "aRSA+HIGH:+kEDH:+kRSA:!kSRP:!kPSK:+3DES:!MD5"
#define _efl_net_ssl_conn_session_debug(conn) \
- __efl_net_ssl_conn_session_debug(__FILE__, __LINE__, __FUNCTION__, conn)
+ __efl_net_ssl_conn_session_debug(__FILE__, __LINE__, __func__, conn)
static void
__efl_net_ssl_conn_session_debug(const char *file, int line, const char *fname, Efl_Net_Ssl_Conn *conn)
{
@@ -288,7 +294,7 @@ __efl_net_ssl_conn_session_debug(const char *file, int line, const char *fname,
}
#define _efl_net_ssl_conn_check_errors() \
- __efl_net_ssl_conn_check_errors(__FILE__, __LINE__, __FUNCTION__)
+ __efl_net_ssl_conn_check_errors(__FILE__, __LINE__, __func__)
static unsigned long
__efl_net_ssl_conn_check_errors(const char *file, int line, const char *fname)
{
diff --git a/src/lib/ecore_con/efl_net_ssl_ctx-openssl.c b/src/lib/ecore_con/efl_net_ssl_ctx-openssl.c
index d8e4b6e220..3cf2d2f90b 100644
--- a/src/lib/ecore_con/efl_net_ssl_ctx-openssl.c
+++ b/src/lib/ecore_con/efl_net_ssl_ctx-openssl.c
@@ -17,7 +17,7 @@ struct _Efl_Net_Ssl_Ctx
#define EFL_NET_SSL_CONTEXT_CIPHERS "aRSA+HIGH:+kEDH:+kRSA:!kSRP:!kPSK:+3DES:!MD5"
#define _efl_net_ssl_ctx_check_errors() \
- __efl_net_ssl_ctx_check_errors(__FILE__, __LINE__, __FUNCTION__)
+ __efl_net_ssl_ctx_check_errors(__FILE__, __LINE__, __func__)
static unsigned long
__efl_net_ssl_ctx_check_errors(const char *file, int line, const char *fname)
{
diff --git a/src/lib/ecore_con/efl_net_types.eot b/src/lib/ecore_con/efl_net_types.eot
index 36d8bba1ec..1d3cbb3da5 100644
--- a/src/lib/ecore_con/efl_net_types.eot
+++ b/src/lib/ecore_con/efl_net_types.eot
@@ -1,3 +1 @@
-import eina_types;
-
error @beta Efl.Net.Error.COULDNT_RESOLVE_HOST = "Couldn't resolve host name"; [[Could not resolve the given host name]]
diff --git a/src/lib/ecore_con/meson.build b/src/lib/ecore_con/meson.build
index fc53d3210f..d446055c1e 100644
--- a/src/lib/ecore_con/meson.build
+++ b/src/lib/ecore_con/meson.build
@@ -1,6 +1,6 @@
-ecore_con_deps = []
+ecore_con_deps = [buildsystem, eldbus, eet]
ecore_con_pub_deps = [eina, eo, efl, ecore]
-
+ecore_con_ext_deps = [buildsystem_simple, dl, http_parser]
if sys_windows == true
ipv6 = true
else
@@ -70,6 +70,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'ECORE_CON_API',
'-gchd', '@INPUT@'])
endforeach
@@ -91,6 +92,7 @@ foreach eo_file : pub_eo_types_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'ECORE_CON_API',
'-gchd', '@INPUT@'])
endforeach
@@ -107,10 +109,11 @@ ecore_con_header_src = [
'ecore_con_eet_client_obj_eo.h',
'ecore_con_eet_client_obj_eo.legacy.h',
'ecore_con_eet_server_obj_eo.h',
- 'ecore_con_eet_server_obj_eo.legacy.h'
+ 'ecore_con_eet_server_obj_eo.legacy.h',
+ 'ecore_con_api.h',
]
-ecore_con_src = [
+ecore_con_src = files([
'ecore_con_alloc.c',
'ecore_con.c',
'ecore_con_proxy_helper.c',
@@ -145,49 +148,49 @@ ecore_con_src = [
'efl_net_server_ssl.c',
'ecore_con_local.c',
'efl_net_ip_address.c'
-]
+])
if sys_windows == true
- ecore_con_src += [
+ ecore_con_src += files([
'efl_net_socket_windows.c',
'efl_net_dialer_windows.c',
'efl_net_server_windows.c'
- ]
+ ])
else
- ecore_con_src += [
+ ecore_con_src += files([
'efl_net_socket_unix.c',
'efl_net_dialer_unix.c',
'efl_net_server_unix.c'
- ]
+ ])
endif
if get_option('network-backend') == 'none'
- ecore_con_src += [
+ ecore_con_src += files([
'efl_net_control_access_point-none.c',
'efl_net_control_technology-none.c',
'efl_net_control-none.c',
'efl_net_session-none.c'
- ]
+ ])
else
- ecore_con_src += [
+ ecore_con_src += files([
'efl_net-connman.h',
'efl_net-connman.c',
'efl_net_control_access_point-connman.c',
'efl_net_control_technology-connman.c',
'efl_net_control-connman.c',
'efl_net_session-connman.c'
- ]
+ ])
ecore_con_deps += eldbus
endif
-ecore_con_deps += crypto
+ecore_con_ext_deps += crypto
ecore_con_lib = library('ecore_con',
ecore_con_src, pub_eo_file_target,
- dependencies: [ecore, ecore_con_deps, http_parser, eldbus, eet, systemd, buildsystem, dl],
+ dependencies: [ecore_con_deps, ecore_con_ext_deps, ecore_con_pub_deps],
include_directories : config_dir,
install: true,
- c_args : package_c_args,
+ c_args : [package_c_args, '-DECORE_CON_BUILD'],
version : meson.project_version()
)
diff --git a/src/lib/ecore_drm/Ecore_Drm.h b/src/lib/ecore_drm/Ecore_Drm.h
index ad60ca37c9..054995833c 100644
--- a/src/lib/ecore_drm/Ecore_Drm.h
+++ b/src/lib/ecore_drm/Ecore_Drm.h
@@ -213,17 +213,16 @@ EAPI extern int ECORE_DRM_EVENT_SEAT_ADD; /**< @since 1.14 */
* @defgroup Ecore_Drm_Group Ecore_Drm - Drm Integration
* @ingroup Ecore
* @brief Ecore functions for dealing with drm, virtual terminals.
- *
+ *
* Ecore_Drm provides a wrapper and functions for using libdrm.
- *
+ *
* @li @ref Ecore_Drm_Init_Group
* @li @ref Ecore_Drm_Device_Group
* @li @ref Ecore_Drm_Tty_Group
* @li @ref Ecore_Drm_Output_Group
* @li @ref Ecore_Drm_Input_Group
- * @li @ref Ecore_Drm_Sprite_Group
* @li @ref Ecore_Drm_Fb_Group
- *
+ *
*/
EAPI int ecore_drm_init(void);
@@ -233,13 +232,13 @@ EAPI int ecore_drm_shutdown(void);
* @ingroup Ecore_Drm_Device_Group
* @brief Finds a drm device in the system.
*
- * @param name The name of the device to find. If NULL, this function will
+ * @param name The name of the device to find. If NULL, this function will
* search for the default drm device.
- * @param seat The name of the seat where this device may be found. If NULL,
+ * @param seat The name of the seat where this device may be found. If NULL,
* this function will use a default seat name 'seat0'.
- *
+ *
* @return An opaque Ecore_Drm_Device structure representing the card.
- *
+ *
*/
EAPI Ecore_Drm_Device *ecore_drm_device_find(const char *name, const char *seat);
@@ -248,9 +247,9 @@ EAPI Ecore_Drm_Device *ecore_drm_device_find(const char *name, const char *seat)
* @brief Frees an Ecore_Drm_Device.
*
* This function will cleanup and free any previously allocated Ecore_Drm_Device.
- *
+ *
* @param dev The Ecore_Drm_Device to free
- *
+ *
*/
EAPI void ecore_drm_device_free(Ecore_Drm_Device *dev);
@@ -259,11 +258,11 @@ EAPI void ecore_drm_device_free(Ecore_Drm_Device *dev);
* @brief Opens an Ecore_Drm_Device.
*
* This function will open an existing Ecore_Drm_Device for use.
- *
+ *
* @param dev The Ecore_Drm_Device to try and open
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_device_open(Ecore_Drm_Device *dev);
@@ -272,50 +271,50 @@ EAPI Eina_Bool ecore_drm_device_open(Ecore_Drm_Device *dev);
* @brief Closes an Ecore_Drm_Device.
*
* This function will close a previously opened Ecore_Drm_Device
- *
+ *
* @param dev The Ecore_Drm_Device to free
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_device_close(Ecore_Drm_Device *dev);
/**
* @ingroup Ecore_Drm_Device_Group
* @brief Gets if a given Ecore_Drm_Device is master.
- *
+ *
* This function will check if the given drm device is set to master
- *
+ *
* @param dev The Ecore_Drm_Device to check
- *
+ *
* @return @c EINA_TRUE if device is master, @c EINA_FALSE otherwise
- *
+ *
*/
EAPI Eina_Bool ecore_drm_device_master_get(Ecore_Drm_Device *dev);
/**
* @ingroup Ecore_Drm_Device_Group
* @brief Sets a given Ecore_Drm_Device to master.
- *
+ *
* This function will attempt to set a given drm device to be master
- *
+ *
* @param dev The Ecore_Drm_Device to set
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_device_master_set(Ecore_Drm_Device *dev);
/**
* @ingroup Ecore_Drm_Device_Group
* @brief Tells a given Ecore_Drm_Device to stop being master.
- *
+ *
* This function will attempt to ask a drm device to stop being master
- *
+ *
* @param dev The Ecore_Drm_Device to set
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_device_master_drop(Ecore_Drm_Device *dev);
@@ -418,7 +417,7 @@ EAPI void ecore_drm_device_keyboard_cached_keymap_set(struct xkb_keymap *map);
* @ingroup Ecore_Drm_Device_Group
* @brief Finds an Ecore_Drm_Output at the given coordinates.
*
- * This function will loop all the existing outputs in Ecore_Drm_Device and
+ * This function will loop all the existing outputs in Ecore_Drm_Device and
* return an output if one exists that encapsulates the given coordinates.
*
* @param dev The Ecore_Drm_Device to search
@@ -434,46 +433,46 @@ EAPI Ecore_Drm_Output *ecore_drm_device_output_find(Ecore_Drm_Device *dev, int x
/**
* @ingroup Ecore_Drm_Tty_Group
* @brief Opens a tty for use.
- *
+ *
* @param dev The Ecore_Drm_Device that this tty will belong to.
- * @param name The name of the tty to try and open.
+ * @param name The name of the tty to try and open.
* If NULL, /dev/tty0 will be used.
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_tty_open(Ecore_Drm_Device *dev, const char *name);
/**
* @ingroup Ecore_Drm_Tty_Group
* @brief Closes an already opened tty.
- *
+ *
* @param dev The Ecore_Drm_Device which owns this tty.
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_tty_close(Ecore_Drm_Device *dev);
/**
* @ingroup Ecore_Drm_Tty_Group
* @brief Releases a virtual terminal.
- *
+ *
* @param dev The Ecore_Drm_Device which owns this tty.
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_tty_release(Ecore_Drm_Device *dev);
/**
* @ingroup Ecore_Drm_Tty_Group
* @brief Acquires a virtual terminal.
- *
+ *
* @param dev The Ecore_Drm_Device which owns this tty.
- *
+ *
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
- *
+ *
*/
EAPI Eina_Bool ecore_drm_tty_acquire(Ecore_Drm_Device *dev);
@@ -482,10 +481,10 @@ EAPI Eina_Bool ecore_drm_tty_acquire(Ecore_Drm_Device *dev);
* @brief Gets the opened virtual terminal file descriptor.
*
* @param dev The Ecore_Drm_Device which owns this tty.
- *
+ *
* @return The tty fd opened from previous call to ecore_drm_tty_open
- *
- *
+ *
+ *
* @since 1.10
*/
EAPI int ecore_drm_tty_get(Ecore_Drm_Device *dev);
@@ -497,8 +496,8 @@ EAPI int ecore_drm_tty_get(Ecore_Drm_Device *dev);
* This function will create outputs for Ecore_Drm_Device.
*
* @param dev The Ecore_Drm_Device device for which outputs
- * needs to be created
- *
+ * needs to be created
+ *
* @return EINA_TRUE on success, EINA_FALSE on failure.
*
*/
@@ -511,7 +510,7 @@ EAPI Eina_Bool ecore_drm_outputs_create(Ecore_Drm_Device *dev);
* This function will cleanup and free any previously allocated Ecore_Drm_Output.
*
* @param output The Ecore_Drm_Output to free
- *
+ *
*/
EAPI void ecore_drm_output_free(Ecore_Drm_Output *output);
@@ -566,7 +565,7 @@ EAPI void ecore_drm_output_repaint(Ecore_Drm_Output *output);
* This function will give the output size of Ecore_Drm_Device.
*
* @param dev The Ecore_Drm_Device to get output size
- * @param output The output id whose information needs to be retrieved
+ * @param output The output id whose information needs to be retrieved
* @param *w The parameter in which output width is stored
* @param *h The parameter in which output height is stored
*
@@ -621,12 +620,17 @@ EAPI unsigned int ecore_drm_output_crtc_buffer_get(Ecore_Drm_Output *output);
*/
EAPI unsigned int ecore_drm_output_connector_id_get(Ecore_Drm_Output *output);
-/* TODO: Doxy */
+/** @defgroup Ecore_Drm_Input_Group Drm input handling
+ * @{
+ */
EAPI Eina_Bool ecore_drm_inputs_create(Ecore_Drm_Device *dev);
EAPI void ecore_drm_inputs_destroy(Ecore_Drm_Device *dev);
EAPI Eina_Bool ecore_drm_inputs_enable(Ecore_Drm_Input *input);
EAPI void ecore_drm_inputs_disable(Ecore_Drm_Input *input);
EAPI void ecore_drm_inputs_device_axis_size_set(Ecore_Drm_Evdev *dev, int w, int h);
+/**
+ * @}
+ */
EAPI Eina_Bool ecore_drm_sprites_create(Ecore_Drm_Device *dev);
EAPI void ecore_drm_sprites_destroy(Ecore_Drm_Device *dev);
@@ -645,7 +649,7 @@ EAPI void ecore_drm_fb_destroy(Ecore_Drm_Fb *fb);
* @param fb The Ecore_Drm_Fb to mark as dirty
* @param rects The regions of the Ecore_Drm_Fb which are dirty
* @param count The number of regions
- *
+ *
* @since 1.14
*/
EAPI void ecore_drm_fb_dirty(Ecore_Drm_Fb *fb, Eina_Rectangle *rects, unsigned int count);
@@ -789,7 +793,7 @@ EAPI char *ecore_drm_output_name_get(Ecore_Drm_Output *output);
*
* @param output The Ecore_Drm_Output to set the dpms level on
* @param level The level to set
- *
+ *
* @since 1.14
*/
EAPI void ecore_drm_output_dpms_set(Ecore_Drm_Output *output, int level);
@@ -805,7 +809,7 @@ EAPI void ecore_drm_output_dpms_set(Ecore_Drm_Output *output, int level);
* @param r The amount to scale the red channel
* @param g The amount to scale the green channel
* @param b The amount to scale the blue channel
- *
+ *
* @since 1.14
*/
EAPI void ecore_drm_output_gamma_set(Ecore_Drm_Output *output, uint16_t size, uint16_t *r, uint16_t *g, uint16_t *b);
@@ -962,7 +966,7 @@ EAPI void ecore_drm_output_crtc_size_get(Ecore_Drm_Output *output, int *width, i
* @ingroup Ecore_Drm_Device_Group
* @brief Finds an Ecore_Drm_Output which has the given name.
*
- * This function will loop all the existing outputs in Ecore_Drm_Device and
+ * This function will loop all the existing outputs in Ecore_Drm_Device and
* return an output if one exists that matches the given name.
*
* @param dev The Ecore_Drm_Device to search
@@ -998,8 +1002,8 @@ EAPI Eina_Bool ecore_drm_output_possible_crtc_get(Ecore_Drm_Output *output, unsi
*
* @param output The Ecore_Drm_Output to set the mode on
* @param mode A valid Ecore_Drm_Output_Mode to set or NULL to disable the output
- * @param X The X position to set this output to
- * @param Y The Y position to set this output to
+ * @param x The X position to set this output to
+ * @param y The Y position to set this output to
*
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure
*
diff --git a/src/lib/ecore_drm/ecore_drm.c b/src/lib/ecore_drm/ecore_drm.c
index fb8c593b09..75c4c76b38 100644
--- a/src/lib/ecore_drm/ecore_drm.c
+++ b/src/lib/ecore_drm/ecore_drm.c
@@ -50,25 +50,25 @@ _ecore_drm_event_activate_send(Eina_Bool active)
if (!(e = calloc(1, sizeof(Ecore_Drm_Event_Activate)))) return;
e->active = active;
- ecore_event_add(ECORE_DRM_EVENT_ACTIVATE, e,
+ ecore_event_add(ECORE_DRM_EVENT_ACTIVATE, e,
_ecore_drm_event_activate_free, NULL);
}
/**
* @defgroup Ecore_Drm_Init_Group Drm Library Init and Shutdown Functions
- *
+ *
* Functions that start and shutdown the Ecore_Drm Library.
*/
/**
* Initialize the Ecore_Drm library
- *
+ *
* @return The number of times the library has been initialized without
* being shut down. 0 is returned if an error occurs.
- *
+ *
* @ingroup Ecore_Drm_Init_Group
*/
-EAPI int
+EAPI int
ecore_drm_init(void)
{
/* if we have already initialized, return the count */
@@ -78,7 +78,7 @@ ecore_drm_init(void)
if (!eina_init()) return --_ecore_drm_init_count;
/* try to init ecore */
- if (!ecore_init())
+ if (!ecore_init())
{
eina_shutdown();
return --_ecore_drm_init_count;
@@ -96,7 +96,7 @@ ecore_drm_init(void)
/* eina_log_level_set(EINA_LOG_LEVEL_DBG); */
/* try to create logging domain */
- _ecore_drm_log_dom =
+ _ecore_drm_log_dom =
eina_log_domain_register("ecore_drm", ECORE_DRM_DEFAULT_LOG_COLOR);
if (!_ecore_drm_log_dom)
{
diff --git a/src/lib/ecore_drm/ecore_drm_dbus.c b/src/lib/ecore_drm/ecore_drm_dbus.c
index 5834133179..4d60428879 100644
--- a/src/lib/ecore_drm/ecore_drm_dbus.c
+++ b/src/lib/ecore_drm/ecore_drm_dbus.c
@@ -33,7 +33,7 @@ static int _dbus_init_count = 0;
static Eldbus_Connection *dconn;
static Eldbus_Object *dobj;
-static void
+static void
_ecore_drm_dbus_device_pause_done(uint32_t major, uint32_t minor)
{
Eldbus_Proxy *proxy;
@@ -56,7 +56,7 @@ _ecore_drm_dbus_device_pause_done(uint32_t major, uint32_t minor)
eldbus_proxy_send(proxy, msg, NULL, NULL, -1);
}
-static void
+static void
_cb_session_removed(void *data, const Eldbus_Message *msg)
{
Ecore_Drm_Device *dev;
@@ -81,7 +81,7 @@ _cb_session_removed(void *data, const Eldbus_Message *msg)
}
}
-static void
+static void
_cb_device_paused(void *ctxt EINA_UNUSED, const Eldbus_Message *msg)
{
const char *errname, *errmsg;
@@ -104,7 +104,7 @@ _cb_device_paused(void *ctxt EINA_UNUSED, const Eldbus_Message *msg)
}
}
-static void
+static void
_cb_device_resumed(void *ctxt EINA_UNUSED, const Eldbus_Message *msg)
{
const char *errname, *errmsg;
@@ -133,7 +133,7 @@ _property_response_set(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus
ERR("Eldbus Message error %s - %s\n\n", errname, errmsg);
}
-static void
+static void
_cb_properties_changed(void *data EINA_UNUSED, Eldbus_Proxy *proxy EINA_UNUSED, void *event)
{
Eldbus_Proxy_Event_Property_Changed *ev;
@@ -142,14 +142,14 @@ _cb_properties_changed(void *data EINA_UNUSED, Eldbus_Proxy *proxy EINA_UNUSED,
if (!strcmp(ev->name, "Active"))
{
- eldbus_proxy_property_set(proxy, "Active", "b", (void *)EINA_TRUE,
+ eldbus_proxy_property_set(proxy, "Active", "b", (void *)EINA_TRUE,
_property_response_set, NULL);
- eldbus_proxy_property_set(proxy, "State", "s", &"active",
+ eldbus_proxy_property_set(proxy, "State", "s", &"active",
_property_response_set, NULL);
}
}
-Eina_Bool
+Eina_Bool
_ecore_drm_dbus_session_take(void)
{
Eldbus_Proxy *proxy;
@@ -184,7 +184,7 @@ _ecore_drm_dbus_session_take(void)
return EINA_TRUE;
}
-Eina_Bool
+Eina_Bool
_ecore_drm_dbus_session_release(void)
{
Eldbus_Proxy *proxy;
@@ -217,7 +217,7 @@ _ecore_drm_dbus_session_release(void)
return EINA_TRUE;
}
-void
+void
_ecore_drm_dbus_device_release(uint32_t major, uint32_t minor)
{
Eldbus_Proxy *proxy;
@@ -264,7 +264,7 @@ eldbus_err:
if (callback) callback(data, fd, b);
}
-int
+int
_ecore_drm_dbus_device_take(uint32_t major, uint32_t minor, Ecore_Drm_Open_Cb callback, void *data)
{
Eldbus_Proxy *proxy;
@@ -338,7 +338,7 @@ _ecore_drm_dbus_device_take_no_pending(uint32_t major, uint32_t minor, Eina_Bool
return fd;
}
-int
+int
_ecore_drm_dbus_init(Ecore_Drm_Device *dev)
{
Eldbus_Proxy *proxy;
@@ -385,7 +385,7 @@ _ecore_drm_dbus_init(Ecore_Drm_Device *dev)
goto proxy_err;
}
- eldbus_proxy_signal_handler_add(proxy, "SessionRemoved",
+ eldbus_proxy_signal_handler_add(proxy, "SessionRemoved",
_cb_session_removed, dev);
/* try to get the Session proxy */
@@ -395,9 +395,9 @@ _ecore_drm_dbus_init(Ecore_Drm_Device *dev)
goto proxy_err;
}
- eldbus_proxy_signal_handler_add(proxy, "PauseDevice",
+ eldbus_proxy_signal_handler_add(proxy, "PauseDevice",
_cb_device_paused, NULL);
- eldbus_proxy_signal_handler_add(proxy, "ResumeDevice",
+ eldbus_proxy_signal_handler_add(proxy, "ResumeDevice",
_cb_device_resumed, NULL);
/* try to get the Properties proxy */
@@ -408,7 +408,7 @@ _ecore_drm_dbus_init(Ecore_Drm_Device *dev)
}
eldbus_proxy_properties_monitor(proxy, EINA_TRUE);
- eldbus_proxy_event_callback_add(proxy, ELDBUS_PROXY_EVENT_PROPERTY_CHANGED,
+ eldbus_proxy_event_callback_add(proxy, ELDBUS_PROXY_EVENT_PROPERTY_CHANGED,
_cb_properties_changed, NULL);
return _dbus_init_count;
@@ -424,7 +424,7 @@ conn_err:
return --_dbus_init_count;
}
-int
+int
_ecore_drm_dbus_shutdown(void)
{
if (--_dbus_init_count != 0) return _dbus_init_count;
diff --git a/src/lib/ecore_drm/ecore_drm_device.c b/src/lib/ecore_drm/ecore_drm_device.c
index ca560340dc..c5865ce1e8 100644
--- a/src/lib/ecore_drm/ecore_drm_device.c
+++ b/src/lib/ecore_drm/ecore_drm_device.c
@@ -36,6 +36,9 @@
static Eina_List *drm_devices;
static int ticking = 0;
+struct xkb_keymap *cached_keymap;
+struct xkb_context *cached_context;
+
static void _ecore_drm_tick_source_set(Ecore_Drm_Device *dev);
static void
@@ -190,8 +193,8 @@ _ecore_drm_device_cached_keymap_update(struct xkb_keymap *map)
/**
* @defgroup Ecore_Drm_Device_Group Device manipulation functions
- *
- * Functions that deal with finding, opening, closing, and otherwise using
+ *
+ * Functions that deal with finding, opening, closing, and otherwise using
* the DRM device itself.
*/
@@ -228,7 +231,7 @@ ecore_drm_device_find(const char *name, const char *seat)
if (!(devseat = eeze_udev_syspath_get_property(device, "ID_SEAT")))
devseat = eina_stringshare_add("seat0");
- if ((seat) && (strcmp(seat, devseat)))
+ if ((seat) && (strcmp(seat, devseat)))
goto cont;
else if (strcmp(devseat, "seat0"))
goto cont;
@@ -236,7 +239,7 @@ ecore_drm_device_find(const char *name, const char *seat)
devparent = eeze_udev_syspath_get_parent_filtered(device, "pci", NULL);
if (!devparent)
{
- devparent =
+ devparent =
eeze_udev_syspath_get_parent_filtered(device, "platform", NULL);
platform = EINA_TRUE;
}
@@ -294,7 +297,7 @@ out:
return dev;
}
-EAPI void
+EAPI void
ecore_drm_device_free(Ecore_Drm_Device *dev)
{
unsigned int i = 0;
@@ -331,7 +334,7 @@ ecore_drm_device_free(Ecore_Drm_Device *dev)
free(dev);
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_device_open(Ecore_Drm_Device *dev)
{
uint64_t caps;
@@ -451,7 +454,7 @@ ecore_drm_devices_get(void)
return drm_devices;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_device_master_get(Ecore_Drm_Device *dev)
{
drm_magic_t mag;
@@ -460,14 +463,14 @@ ecore_drm_device_master_get(Ecore_Drm_Device *dev)
if ((!dev) || (dev->drm.fd < 0)) return EINA_FALSE;
/* get if we are master or not */
- if ((drmGetMagic(dev->drm.fd, &mag) == 0) &&
+ if ((drmGetMagic(dev->drm.fd, &mag) == 0) &&
(drmAuthMagic(dev->drm.fd, mag) == 0))
return EINA_TRUE;
return EINA_FALSE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_device_master_set(Ecore_Drm_Device *dev)
{
/* check for valid device */
@@ -480,7 +483,7 @@ ecore_drm_device_master_set(Ecore_Drm_Device *dev)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_device_master_drop(Ecore_Drm_Device *dev)
{
/* check for valid device */
@@ -493,14 +496,14 @@ ecore_drm_device_master_drop(Ecore_Drm_Device *dev)
return EINA_TRUE;
}
-EAPI int
+EAPI int
ecore_drm_device_fd_get(Ecore_Drm_Device *dev)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(dev, -1);
return dev->drm.fd;
}
-EAPI void
+EAPI void
ecore_drm_device_window_set(Ecore_Drm_Device *dev, unsigned int window)
{
/* check for valid device */
diff --git a/src/lib/ecore_drm/ecore_drm_evdev.c b/src/lib/ecore_drm/ecore_drm_evdev.c
index 4fa66bc076..f93f78ca0e 100644
--- a/src/lib/ecore_drm/ecore_drm_evdev.c
+++ b/src/lib/ecore_drm/ecore_drm_evdev.c
@@ -32,7 +32,7 @@
static void _device_modifiers_update(Ecore_Drm_Evdev *edev);
-static void
+static void
_device_calibration_set(Ecore_Drm_Evdev *edev)
{
const char *sysname;
@@ -42,7 +42,7 @@ _device_calibration_set(Ecore_Drm_Evdev *edev)
const char *vals;
enum libinput_config_status status;
- if ((!libinput_device_config_calibration_has_matrix(edev->device)) ||
+ if ((!libinput_device_config_calibration_has_matrix(edev->device)) ||
(libinput_device_config_calibration_get_default_matrix(edev->device, cal) != 0))
return;
@@ -54,7 +54,7 @@ _device_calibration_set(Ecore_Drm_Evdev *edev)
EINA_LIST_FREE(devices, device)
{
vals = eeze_udev_syspath_get_property(device, "WL_CALIBRATION");
- if ((!vals) ||
+ if ((!vals) ||
(sscanf(vals, "%f %f %f %f %f %f",
&cal[0], &cal[1], &cal[2], &cal[3], &cal[4], &cal[5]) != 6))
goto cont;
@@ -62,7 +62,7 @@ _device_calibration_set(Ecore_Drm_Evdev *edev)
cal[2] /= edev->output->current_mode->width;
cal[5] /= edev->output->current_mode->height;
- status =
+ status =
libinput_device_config_calibration_set_matrix(edev->device, cal);
if (status != LIBINPUT_CONFIG_STATUS_SUCCESS)
@@ -74,7 +74,7 @@ cont:
}
}
-static void
+static void
_device_output_set(Ecore_Drm_Evdev *edev)
{
Ecore_Drm_Input *input;
@@ -102,7 +102,7 @@ _device_output_set(Ecore_Drm_Evdev *edev)
edev->output = output;
- if (libinput_device_has_capability(edev->device,
+ if (libinput_device_has_capability(edev->device,
LIBINPUT_DEVICE_CAP_POINTER))
{
edev->seat->ptr.ix = edev->seat->ptr.dx = edev->output->current_mode->width / 2;
@@ -112,7 +112,7 @@ _device_output_set(Ecore_Drm_Evdev *edev)
}
}
-static void
+static void
_device_configure(Ecore_Drm_Evdev *edev)
{
if (libinput_device_config_tap_get_finger_count(edev->device) > 0)
@@ -123,7 +123,7 @@ _device_configure(Ecore_Drm_Evdev *edev)
libinput_device_config_tap_set_enabled(edev->device, tap);
}
- ecore_drm_outputs_geometry_get(edev->seat->input->dev,
+ ecore_drm_outputs_geometry_get(edev->seat->input->dev,
&edev->mouse.minx, &edev->mouse.miny,
&edev->mouse.maxw, &edev->mouse.maxh);
@@ -131,7 +131,7 @@ _device_configure(Ecore_Drm_Evdev *edev)
_device_calibration_set(edev);
}
-static void
+static void
_device_keyboard_setup(Ecore_Drm_Evdev *edev)
{
Ecore_Drm_Input *input;
@@ -155,25 +155,25 @@ _device_keyboard_setup(Ecore_Drm_Evdev *edev)
return;
}
- edev->xkb.ctrl_mask =
+ edev->xkb.ctrl_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, XKB_MOD_NAME_CTRL);
- edev->xkb.alt_mask =
+ edev->xkb.alt_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, XKB_MOD_NAME_ALT);
- edev->xkb.shift_mask =
+ edev->xkb.shift_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, XKB_MOD_NAME_SHIFT);
- edev->xkb.win_mask =
+ edev->xkb.win_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, XKB_MOD_NAME_LOGO);
- edev->xkb.scroll_mask =
+ edev->xkb.scroll_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, XKB_LED_NAME_SCROLL);
- edev->xkb.num_mask =
+ edev->xkb.num_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, XKB_LED_NAME_NUM);
- edev->xkb.caps_mask =
+ edev->xkb.caps_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, XKB_MOD_NAME_CAPS);
- edev->xkb.altgr_mask =
+ edev->xkb.altgr_mask =
1 << xkb_map_mod_get_index(edev->xkb.keymap, "ISO_Level3_Shift");
}
-static int
+static int
_device_keysym_translate(xkb_keysym_t keysym, unsigned int modifiers, char *buffer, int bytes)
{
unsigned long hbytes = 0;
@@ -222,13 +222,13 @@ _device_modifiers_update_device(Ecore_Drm_Evdev *edev, Ecore_Drm_Evdev *from)
{
xkb_mod_mask_t mask;
- edev->xkb.depressed =
+ edev->xkb.depressed =
xkb_state_serialize_mods(from->xkb.state, XKB_STATE_DEPRESSED);
- edev->xkb.latched =
+ edev->xkb.latched =
xkb_state_serialize_mods(from->xkb.state, XKB_STATE_LATCHED);
- edev->xkb.locked =
+ edev->xkb.locked =
xkb_state_serialize_mods(from->xkb.state, XKB_STATE_LOCKED);
- edev->xkb.group =
+ edev->xkb.group =
xkb_state_serialize_mods(from->xkb.state, XKB_STATE_EFFECTIVE);
mask = (edev->xkb.depressed | edev->xkb.latched);
@@ -251,7 +251,7 @@ _device_modifiers_update_device(Ecore_Drm_Evdev *edev, Ecore_Drm_Evdev *from)
edev->xkb.modifiers |= ECORE_EVENT_MODIFIER_ALTGR;
}
-static void
+static void
_device_modifiers_update(Ecore_Drm_Evdev *edev)
{
edev->xkb.modifiers = 0;
@@ -322,7 +322,7 @@ _device_handle_key(struct libinput_device *device, struct libinput_event_keyboar
((state == LIBINPUT_KEY_STATE_RELEASED) && (key_count != 0)))
return;
- xkb_state_update_key(edev->xkb.state, code,
+ xkb_state_update_key(edev->xkb.state, code,
(state ? XKB_KEY_DOWN : XKB_KEY_UP));
/* get the keysym for this code */
@@ -340,8 +340,8 @@ _device_handle_key(struct libinput_device *device, struct libinput_event_keyboar
snprintf(keyname, sizeof(keyname), "Keycode-%u", code);
/* if shift is active, we need to transform the key to lower */
- if (xkb_state_mod_index_is_active(edev->xkb.state,
- xkb_map_mod_get_index(edev->xkb.keymap,
+ if (xkb_state_mod_index_is_active(edev->xkb.state,
+ xkb_map_mod_get_index(edev->xkb.keymap,
XKB_MOD_NAME_SHIFT),
XKB_STATE_MODS_EFFECTIVE))
{
@@ -350,7 +350,7 @@ _device_handle_key(struct libinput_device *device, struct libinput_event_keyboar
}
memset(compose_buffer, 0, sizeof(compose_buffer));
- if (_device_keysym_translate(sym, edev->xkb.modifiers,
+ if (_device_keysym_translate(sym, edev->xkb.modifiers,
compose_buffer, sizeof(compose_buffer)))
{
compose = eina_str_convert("ISO8859-1", "UTF-8", compose_buffer);
@@ -398,7 +398,7 @@ err:
if (tmp) free(tmp);
}
-static void
+static void
_device_pointer_motion(Ecore_Drm_Evdev *edev, struct libinput_event_pointer *event)
{
Ecore_Drm_Input *input;
@@ -455,7 +455,7 @@ _ecore_drm_pointer_motion_post(Ecore_Drm_Evdev *edev)
_device_pointer_motion(edev, NULL);
}
-static void
+static void
_device_handle_pointer_motion(struct libinput_device *device, struct libinput_event_pointer *event)
{
Ecore_Drm_Evdev *edev;
@@ -476,7 +476,7 @@ _device_handle_pointer_motion(struct libinput_device *device, struct libinput_ev
_device_pointer_motion(edev, event);
}
-static void
+static void
_device_handle_pointer_motion_absolute(struct libinput_device *device, struct libinput_event_pointer *event)
{
Ecore_Drm_Evdev *edev;
@@ -498,7 +498,7 @@ _device_handle_pointer_motion_absolute(struct libinput_device *device, struct li
_device_pointer_motion(edev, event);
}
-static void
+static void
_device_handle_button(struct libinput_device *device, struct libinput_event_pointer *event)
{
Ecore_Drm_Evdev *edev;
@@ -557,7 +557,7 @@ _device_handle_button(struct libinput_device *device, struct libinput_event_poin
(button == edev->mouse.prev_button))
{
edev->mouse.did_double = EINA_TRUE;
- if (((current - edev->mouse.last) <= (2 * edev->mouse.threshold)) &&
+ if (((current - edev->mouse.last) <= (2 * edev->mouse.threshold)) &&
(button == edev->mouse.last_button))
{
edev->mouse.did_triple = EINA_TRUE;
@@ -600,7 +600,7 @@ _event_scroll_get(struct libinput_event_pointer *pe, enum libinput_pointer_axis
return 0.0;
}
-static void
+static void
_device_handle_axis(struct libinput_device *device, struct libinput_event_pointer *event)
{
Ecore_Drm_Evdev *edev;
@@ -635,7 +635,7 @@ _device_handle_axis(struct libinput_device *device, struct libinput_event_pointe
ev->z = _event_scroll_get(event, axis);
axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL;
- if (libinput_event_pointer_has_axis(event, axis))
+ if (libinput_event_pointer_has_axis(event, axis))
{
ev->direction = 1;
ev->z = _event_scroll_get(event, axis);
@@ -771,7 +771,7 @@ _device_handle_touch_event_send(Ecore_Drm_Evdev *edev, struct libinput_event_tou
(button == edev->mouse.prev_button))
{
edev->mouse.did_double = EINA_TRUE;
- if (((current - edev->mouse.last) <= (2 * edev->mouse.threshold)) &&
+ if (((current - edev->mouse.last) <= (2 * edev->mouse.threshold)) &&
(button == edev->mouse.last_button))
{
edev->mouse.did_triple = EINA_TRUE;
@@ -877,7 +877,7 @@ _device_handle_touch_motion(struct libinput_device *device, struct libinput_even
_device_handle_touch_motion_send(edev, event);
}
-static void
+static void
_device_handle_touch_up(struct libinput_device *device, struct libinput_event_touch *event)
{
Ecore_Drm_Evdev *edev;
@@ -889,13 +889,13 @@ _device_handle_touch_up(struct libinput_device *device, struct libinput_event_to
_device_handle_touch_event_send(edev, event, ECORE_EVENT_MOUSE_BUTTON_UP);
}
-static void
+static void
_device_handle_touch_frame(struct libinput_device *device EINA_UNUSED, struct libinput_event_touch *event EINA_UNUSED)
{
/* DBG("Unhandled Touch Frame Event"); */
}
-void
+void
_ecore_drm_evdev_device_destroy(Ecore_Drm_Evdev *edev)
{
EINA_SAFETY_ON_NULL_RETURN(edev);
@@ -913,7 +913,7 @@ _ecore_drm_evdev_device_destroy(Ecore_Drm_Evdev *edev)
free(edev);
}
-Eina_Bool
+Eina_Bool
_ecore_drm_evdev_event_process(struct libinput_event *event)
{
struct libinput_device *device;
@@ -926,11 +926,11 @@ _ecore_drm_evdev_event_process(struct libinput_event *event)
_device_handle_key(device, libinput_event_get_keyboard_event(event));
break;
case LIBINPUT_EVENT_POINTER_MOTION:
- _device_handle_pointer_motion(device,
+ _device_handle_pointer_motion(device,
libinput_event_get_pointer_event(event));
break;
case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
- _device_handle_pointer_motion_absolute(device,
+ _device_handle_pointer_motion_absolute(device,
libinput_event_get_pointer_event(event));
break;
case LIBINPUT_EVENT_POINTER_BUTTON:
@@ -943,7 +943,7 @@ _ecore_drm_evdev_event_process(struct libinput_event *event)
_device_handle_touch_down(device, libinput_event_get_touch_event(event));
break;
case LIBINPUT_EVENT_TOUCH_MOTION:
- _device_handle_touch_motion(device,
+ _device_handle_touch_motion(device,
libinput_event_get_touch_event(event));
break;
case LIBINPUT_EVENT_TOUCH_UP:
@@ -963,7 +963,7 @@ _ecore_drm_evdev_event_process(struct libinput_event *event)
/**
* @brief Set the axis size of the given device.
*
- * @param dev The device to set the axis size to.
+ * @param edev The device to set the axis size to.
* @param w The width of the axis.
* @param h The height of the axis.
*
@@ -985,7 +985,7 @@ ecore_drm_inputs_device_axis_size_set(Ecore_Drm_Evdev *edev, int w, int h)
EINA_SAFETY_ON_NULL_RETURN(edev);
EINA_SAFETY_ON_TRUE_RETURN((w == 0) || (h == 0));
- if ((!libinput_device_config_calibration_has_matrix(edev->device)) ||
+ if ((!libinput_device_config_calibration_has_matrix(edev->device)) ||
(libinput_device_config_calibration_get_default_matrix(edev->device, cal) != 0))
return;
@@ -997,7 +997,7 @@ ecore_drm_inputs_device_axis_size_set(Ecore_Drm_Evdev *edev, int w, int h)
EINA_LIST_FREE(devices, device)
{
vals = eeze_udev_syspath_get_property(device, "WL_CALIBRATION");
- if ((!vals) ||
+ if ((!vals) ||
(sscanf(vals, "%f %f %f %f %f %f",
&cal[0], &cal[1], &cal[2], &cal[3], &cal[4], &cal[5]) != 6))
goto cont;
@@ -1005,7 +1005,7 @@ ecore_drm_inputs_device_axis_size_set(Ecore_Drm_Evdev *edev, int w, int h)
cal[2] /= w;
cal[5] /= h;
- status =
+ status =
libinput_device_config_calibration_set_matrix(edev->device, cal);
if (status != LIBINPUT_CONFIG_STATUS_SUCCESS)
diff --git a/src/lib/ecore_drm/ecore_drm_fb.c b/src/lib/ecore_drm/ecore_drm_fb.c
index 7f3d32360e..cf9c9e5ffd 100644
--- a/src/lib/ecore_drm/ecore_drm_fb.c
+++ b/src/lib/ecore_drm/ecore_drm_fb.c
@@ -30,9 +30,9 @@
/**
* @defgroup Ecore_Drm_Fb_Group Frame buffer manipulation
- *
+ *
* Functions that deal with frame buffers.
- *
+ *
*/
static Eina_Bool
@@ -148,7 +148,7 @@ create_err:
return NULL;
}
-EAPI void
+EAPI void
ecore_drm_fb_destroy(Ecore_Drm_Fb *fb)
{
struct drm_mode_destroy_dumb darg;
diff --git a/src/lib/ecore_drm/ecore_drm_inputs.c b/src/lib/ecore_drm/ecore_drm_inputs.c
index d0896eced3..c01126ab39 100644
--- a/src/lib/ecore_drm/ecore_drm_inputs.c
+++ b/src/lib/ecore_drm/ecore_drm_inputs.c
@@ -32,7 +32,7 @@ EAPI int ECORE_DRM_EVENT_SEAT_ADD = -1;
static Eina_Hash *_fd_hash = NULL;
/* local functions */
-static int
+static int
_cb_open_restricted(const char *path, int flags, void *data)
{
Ecore_Drm_Input *input;
@@ -49,7 +49,7 @@ _cb_open_restricted(const char *path, int flags, void *data)
return fd;
}
-static void
+static void
_cb_close_restricted(int fd, void *data)
{
Ecore_Drm_Input *input;
@@ -108,7 +108,7 @@ _seat_get(Ecore_Drm_Input *input, const char *seat)
return _seat_create(input, seat);
}
-static void
+static void
_device_added(Ecore_Drm_Input *input, struct libinput_device *device)
{
struct libinput_seat *libinput_seat;
@@ -139,7 +139,7 @@ _device_added(Ecore_Drm_Input *input, struct libinput_device *device)
seat->devices = eina_list_append(seat->devices, edev);
}
-static void
+static void
_device_removed(Ecore_Drm_Input *input EINA_UNUSED, struct libinput_device *device)
{
Ecore_Drm_Evdev *edev;
@@ -161,7 +161,7 @@ _device_removed(Ecore_Drm_Input *input EINA_UNUSED, struct libinput_device *devi
_ecore_drm_evdev_device_destroy(edev);
}
-static int
+static int
_udev_event_process(struct libinput_event *event)
{
struct libinput *libinput;
@@ -188,14 +188,14 @@ _udev_event_process(struct libinput_event *event)
return ret;
}
-static void
+static void
_input_event_process(struct libinput_event *event)
{
if (_udev_event_process(event)) return;
if (_ecore_drm_evdev_event_process(event)) return;
}
-static void
+static void
_input_events_process(Ecore_Drm_Input *input)
{
struct libinput_event *event;
@@ -207,7 +207,7 @@ _input_events_process(Ecore_Drm_Input *input)
}
}
-static Eina_Bool
+static Eina_Bool
_cb_input_dispatch(void *data, Ecore_Fd_Handler *hdlr EINA_UNUSED)
{
Ecore_Drm_Input *input;
@@ -223,14 +223,14 @@ _cb_input_dispatch(void *data, Ecore_Fd_Handler *hdlr EINA_UNUSED)
return EINA_TRUE;
}
-const struct libinput_interface _input_interface =
+const struct libinput_interface _input_interface =
{
_cb_open_restricted,
_cb_close_restricted,
};
/* public functions */
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_inputs_create(Ecore_Drm_Device *dev)
{
Ecore_Drm_Input *input;
@@ -246,7 +246,7 @@ ecore_drm_inputs_create(Ecore_Drm_Device *dev)
input->dev = dev;
/* try to create libinput context */
- input->libinput =
+ input->libinput =
libinput_udev_create_context(&_input_interface, input, eeze_udev_get());
if (!input->libinput)
{
@@ -285,7 +285,7 @@ err:
return EINA_FALSE;
}
-EAPI void
+EAPI void
ecore_drm_inputs_destroy(Ecore_Drm_Device *dev)
{
Ecore_Drm_Input *input;
@@ -313,7 +313,7 @@ ecore_drm_inputs_destroy(Ecore_Drm_Device *dev)
}
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_inputs_enable(Ecore_Drm_Input *input)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(input, EINA_FALSE);
@@ -323,14 +323,14 @@ ecore_drm_inputs_enable(Ecore_Drm_Input *input)
if (!input->hdlr)
{
- input->hdlr =
- ecore_main_fd_handler_add(input->fd, ECORE_FD_READ,
+ input->hdlr =
+ ecore_main_fd_handler_add(input->fd, ECORE_FD_READ,
_cb_input_dispatch, input, NULL, NULL);
}
if (input->suspended)
{
- if (libinput_resume(input->libinput) != 0)
+ if (libinput_resume(input->libinput) != 0)
goto err;
input->suspended = EINA_FALSE;
@@ -351,7 +351,7 @@ err:
return EINA_FALSE;
}
-EAPI void
+EAPI void
ecore_drm_inputs_disable(Ecore_Drm_Input *input)
{
EINA_SAFETY_ON_NULL_RETURN(input);
diff --git a/src/lib/ecore_drm/ecore_drm_launcher.c b/src/lib/ecore_drm/ecore_drm_launcher.c
index 7c70d240cb..256eacc892 100644
--- a/src/lib/ecore_drm/ecore_drm_launcher.c
+++ b/src/lib/ecore_drm/ecore_drm_launcher.c
@@ -30,7 +30,7 @@
static Eina_Bool logind = EINA_FALSE;
-static Eina_Bool
+static Eina_Bool
_ecore_drm_launcher_cb_vt_switch(void *data, int type EINA_UNUSED, void *event)
{
Ecore_Drm_Device *dev;
@@ -81,7 +81,7 @@ _ecore_drm_launcher_device_flags_set(int fd, int flags)
return fd;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_launcher_connect(Ecore_Drm_Device *dev)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
@@ -106,14 +106,14 @@ ecore_drm_launcher_connect(Ecore_Drm_Device *dev)
}
}
- dev->tty.switch_hdlr =
- ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
+ dev->tty.switch_hdlr =
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
_ecore_drm_launcher_cb_vt_switch, dev);
return EINA_TRUE;
}
-EAPI void
+EAPI void
ecore_drm_launcher_disconnect(Ecore_Drm_Device *dev)
{
EINA_SAFETY_ON_NULL_RETURN(dev);
diff --git a/src/lib/ecore_drm/ecore_drm_logind.c b/src/lib/ecore_drm/ecore_drm_logind.c
index f5792a774c..07db06049b 100644
--- a/src/lib/ecore_drm/ecore_drm_logind.c
+++ b/src/lib/ecore_drm/ecore_drm_logind.c
@@ -36,12 +36,62 @@
static Ecore_Event_Handler *active_hdlr;
#ifdef HAVE_SYSTEMD
-static inline Eina_Bool
+static Eina_Module *_libsystemd = NULL;
+static Eina_Bool _libsystemd_broken = EINA_FALSE;
+
+static int (*_ecore_sd_session_get_vt) (const char *session, unsigned *vtnr) = NULL;
+static int (*_ecore_sd_pid_get_session) (pid_t pid, char **session) = NULL;
+static int (*_ecore_sd_session_get_seat) (const char *session, char **seat) = NULL;
+
+void
+_ecore_drm_sd_init(void)
+{
+ if (_libsystemd_broken) return;
+ _libsystemd = eina_module_new("libsystemd.so.0");
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ if (!_libsystemd)
+ {
+ _libsystemd_broken = EINA_TRUE;
+ return;
+ }
+ _ecore_sd_session_get_vt =
+ eina_module_symbol_get(_libsystemd, "sd_session_get_vt");
+ _ecore_sd_pid_get_session =
+ eina_module_symbol_get(_libsystemd, "sd_pid_get_session");
+ _ecore_sd_session_get_seat =
+ eina_module_symbol_get(_libsystemd, "sd_session_get_seat");
+ if ((!_ecore_sd_session_get_vt) ||
+ (!_ecore_sd_pid_get_session) ||
+ (!_ecore_sd_session_get_seat))
+ {
+ _ecore_sd_session_get_vt = NULL;
+ _ecore_sd_pid_get_session = NULL;
+ _ecore_sd_session_get_seat = NULL;
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ _libsystemd_broken = EINA_TRUE;
+ }
+}
+
+static inline Eina_Bool
_ecore_drm_logind_vt_get(Ecore_Drm_Device *dev)
{
int ret;
- ret = sd_session_get_vt(dev->session, &dev->vt);
+ _ecore_drm_sd_init();
+ if (!_ecore_sd_session_get_vt)
+ {
+ ERR("Could not get systemd tty");
+ return EINA_FALSE;
+ }
+ ret = _ecore_sd_session_get_vt(dev->session, &dev->vt);
if (ret < 0)
{
ERR("Could not get systemd tty");
@@ -52,7 +102,7 @@ _ecore_drm_logind_vt_get(Ecore_Drm_Device *dev)
}
#endif
-static Eina_Bool
+static Eina_Bool
_ecore_drm_logind_vt_setup(Ecore_Drm_Device *dev)
{
char buff[64];
@@ -66,7 +116,7 @@ _ecore_drm_logind_vt_setup(Ecore_Drm_Device *dev)
return EINA_TRUE;
}
-static Eina_Bool
+static Eina_Bool
_ecore_drm_logind_cb_vt_signal(void *data, int type EINA_UNUSED, void *event)
{
Ecore_Drm_Device *dev;
@@ -96,7 +146,7 @@ _ecore_drm_logind_cb_vt_signal(void *data, int type EINA_UNUSED, void *event)
return ECORE_CALLBACK_RENEW;
}
-static Eina_Bool
+static Eina_Bool
_ecore_drm_logind_cb_activate(void *data, int type EINA_UNUSED, void *event)
{
Ecore_Drm_Event_Activate *ev;
@@ -142,20 +192,26 @@ _ecore_drm_logind_cb_activate(void *data, int type EINA_UNUSED, void *event)
return ECORE_CALLBACK_PASS_ON;
}
-Eina_Bool
+Eina_Bool
_ecore_drm_logind_connect(Ecore_Drm_Device *dev)
{
#ifdef HAVE_SYSTEMD
- char *seat;
+ char *seat = NULL;
+ _ecore_drm_sd_init();
+ if ((!_ecore_sd_pid_get_session) ||
+ (!_ecore_sd_session_get_seat))
+ {
+ ERR("Could not get systemd session");
+ return EINA_FALSE;
+ }
/* get session id */
- if (sd_pid_get_session(getpid(), &dev->session) < 0)
+ if (_ecore_sd_pid_get_session(getpid(), &dev->session) < 0)
{
ERR("Could not get systemd session");
return EINA_FALSE;
}
-
- if (sd_session_get_seat(dev->session, &seat) < 0)
+ if (_ecore_sd_session_get_seat(dev->session, &seat) < 0)
{
ERR("Could not get systemd seat");
return EINA_FALSE;
@@ -166,9 +222,7 @@ _ecore_drm_logind_connect(Ecore_Drm_Device *dev)
free(seat);
return EINA_FALSE;
}
-
free(seat);
-
if (!_ecore_drm_logind_vt_get(dev)) return EINA_FALSE;
#endif
@@ -191,15 +245,15 @@ _ecore_drm_logind_connect(Ecore_Drm_Device *dev)
/* setup handler for vt signals */
if (!dev->tty.event_hdlr)
{
- dev->tty.event_hdlr =
- ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
+ dev->tty.event_hdlr =
+ ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
_ecore_drm_logind_cb_vt_signal, dev);
}
if (!active_hdlr)
{
- active_hdlr =
- ecore_event_handler_add(ECORE_DRM_EVENT_ACTIVATE,
+ active_hdlr =
+ ecore_event_handler_add(ECORE_DRM_EVENT_ACTIVATE,
_ecore_drm_logind_cb_activate, dev);
}
@@ -212,7 +266,7 @@ take_err:
return EINA_FALSE;
}
-void
+void
_ecore_drm_logind_disconnect(Ecore_Drm_Device *dev)
{
if (active_hdlr) ecore_event_handler_del(active_hdlr);
@@ -223,7 +277,7 @@ _ecore_drm_logind_disconnect(Ecore_Drm_Device *dev)
_ecore_drm_dbus_shutdown();
}
-void
+void
_ecore_drm_logind_restore(Ecore_Drm_Device *dev)
{
_ecore_drm_tty_restore(dev);
@@ -237,7 +291,7 @@ _ecore_drm_logind_device_open(const char *device, Ecore_Drm_Open_Cb callback, vo
if (stat(device, &st) < 0) return EINA_FALSE;
if (!S_ISCHR(st.st_mode)) return EINA_FALSE;
- if (_ecore_drm_dbus_device_take(major(st.st_rdev), minor(st.st_rdev),
+ if (_ecore_drm_dbus_device_take(major(st.st_rdev), minor(st.st_rdev),
callback, data) < 0)
return EINA_FALSE;
diff --git a/src/lib/ecore_drm/ecore_drm_output.c b/src/lib/ecore_drm/ecore_drm_output.c
index 526e0113cd..7cad23557d 100644
--- a/src/lib/ecore_drm/ecore_drm_output.c
+++ b/src/lib/ecore_drm/ecore_drm_output.c
@@ -37,7 +37,7 @@
#define EDID_OFFSET_PNPID 0x08
#define EDID_OFFSET_SERIAL 0x0c
-static const char *conn_types[] =
+static const char *conn_types[] =
{
"None", "VGA", "DVI-I", "DVI-D", "DVI-A",
"Composite", "S-Video", "LVDS", "Component", "DIN",
@@ -111,7 +111,7 @@ _ecore_drm_output_property_get(int fd, drmModeConnectorPtr conn, const char *nam
return NULL;
}
-static void
+static void
_ecore_drm_output_edid_parse_string(const uint8_t *data, char text[])
{
int i = 0, rep = 0;
@@ -139,7 +139,7 @@ _ecore_drm_output_edid_parse_string(const uint8_t *data, char text[])
if (rep > 4) text[0] = '\0';
}
-static int
+static int
_ecore_drm_output_edid_parse(Ecore_Drm_Output *output, const uint8_t *data, size_t len)
{
int i = 0;
@@ -149,8 +149,8 @@ _ecore_drm_output_edid_parse(Ecore_Drm_Output *output, const uint8_t *data, size
if ((data[0] != 0x00) || (data[1] != 0xff)) return -1;
output->edid.pnp[0] = 'A' + ((data[EDID_OFFSET_PNPID + 0] & 0x7c) / 4) - 1;
- output->edid.pnp[1] =
- 'A' + ((data[EDID_OFFSET_PNPID + 0] & 0x3) * 8) +
+ output->edid.pnp[1] =
+ 'A' + ((data[EDID_OFFSET_PNPID + 0] & 0x3) * 8) +
((data[EDID_OFFSET_PNPID + 1] & 0xe0) / 32) - 1;
output->edid.pnp[2] = 'A' + (data[EDID_OFFSET_PNPID + 1] & 0x1f) - 1;
output->edid.pnp[3] = '\0';
@@ -178,7 +178,7 @@ _ecore_drm_output_edid_parse(Ecore_Drm_Output *output, const uint8_t *data, size
return 0;
}
-static void
+static void
_ecore_drm_output_edid_find(Ecore_Drm_Output *output, drmModeConnector *conn)
{
drmModePropertyBlobPtr blob = NULL;
@@ -189,10 +189,10 @@ _ecore_drm_output_edid_find(Ecore_Drm_Output *output, drmModeConnector *conn)
{
if (!(prop = drmModeGetProperty(output->dev->drm.fd, conn->props[i])))
continue;
- if ((prop->flags & DRM_MODE_PROP_BLOB) &&
+ if ((prop->flags & DRM_MODE_PROP_BLOB) &&
(!strcmp(prop->name, "EDID")))
{
- blob = drmModeGetPropertyBlob(output->dev->drm.fd,
+ blob = drmModeGetPropertyBlob(output->dev->drm.fd,
conn->prop_values[i]);
}
drmModeFreeProperty(prop);
@@ -217,7 +217,7 @@ _ecore_drm_output_edid_find(Ecore_Drm_Output *output, drmModeConnector *conn)
drmModeFreePropertyBlob(blob);
}
-static void
+static void
_ecore_drm_output_software_render(Ecore_Drm_Output *output)
{
if (!output) return;
@@ -637,7 +637,7 @@ _ecore_drm_output_create(Ecore_Drm_Device *dev, drmModeRes *res, drmModeConnecto
output->current_mode->flags |= DRM_MODE_TYPE_DEFAULT;
/* try to init backlight */
- output->backlight =
+ output->backlight =
_ecore_drm_output_backlight_init(output, conn->connector_type);
/* parse edid */
@@ -692,7 +692,7 @@ err:
return NULL;
}
-static void
+static void
_ecore_drm_output_free(Ecore_Drm_Output *output)
{
Ecore_Drm_Output_Mode *mode;
@@ -708,7 +708,7 @@ _ecore_drm_output_free(Ecore_Drm_Output *output)
}
/* delete the backlight struct */
- if (output->backlight)
+ if (output->backlight)
_ecore_drm_output_backlight_shutdown(output->backlight);
/* turn off hardware cursor */
@@ -716,9 +716,14 @@ _ecore_drm_output_free(Ecore_Drm_Output *output)
/* restore crtc state */
if (output->crtc)
- drmModeSetCrtc(output->dev->drm.fd, output->crtc->crtc_id,
- output->crtc->buffer_id, output->crtc->x, output->crtc->y,
- &output->conn_id, 1, &output->crtc->mode);
+ {
+ if (drmModeSetCrtc(output->dev->drm.fd, output->crtc->crtc_id,
+ output->crtc->buffer_id, output->crtc->x, output->crtc->y,
+ &output->conn_id, 1, &output->crtc->mode))
+ {
+ ERR("Failed to restore Crtc state for output %s: %m", output->name);
+ }
+ }
/* free modes */
EINA_LIST_FREE(output->modes, mode)
@@ -738,7 +743,7 @@ _ecore_drm_output_free(Ecore_Drm_Output *output)
free(output);
}
-void
+void
_ecore_drm_output_frame_finish(Ecore_Drm_Output *output)
{
if (!output) return;
@@ -748,7 +753,7 @@ _ecore_drm_output_frame_finish(Ecore_Drm_Output *output)
output->repaint_scheduled = EINA_FALSE;
}
-void
+void
_ecore_drm_output_fb_release(Ecore_Drm_Output *output, Ecore_Drm_Fb *fb)
{
if ((!output) || (!fb)) return;
@@ -758,7 +763,7 @@ _ecore_drm_output_fb_release(Ecore_Drm_Output *output, Ecore_Drm_Fb *fb)
ecore_drm_fb_destroy(fb);
}
-void
+void
_ecore_drm_output_repaint_start(Ecore_Drm_Output *output)
{
unsigned int fb;
@@ -775,7 +780,7 @@ _ecore_drm_output_repaint_start(Ecore_Drm_Output *output)
}
fb = output->dev->current->id;
- if (drmModePageFlip(output->dev->drm.fd, output->crtc_id, fb,
+ if (drmModePageFlip(output->dev->drm.fd, output->crtc_id, fb,
DRM_MODE_PAGE_FLIP_EVENT, output) < 0)
{
ERR("Could not schedule output page flip event");
@@ -915,12 +920,12 @@ _ecore_drm_output_render_disable(Ecore_Drm_Output *output)
/**
* @defgroup Ecore_Drm_Output_Group Ecore DRM Output
- *
+ *
* Functions to manage DRM outputs.
- *
+ *
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_outputs_create(Ecore_Drm_Device *dev)
{
Eina_Bool ret = EINA_TRUE;
@@ -993,13 +998,13 @@ next:
return ret;
}
-EAPI void
+EAPI void
ecore_drm_output_free(Ecore_Drm_Output *output)
{
_ecore_drm_output_free(output);
}
-EAPI void
+EAPI void
ecore_drm_output_cursor_size_set(Ecore_Drm_Output *output, int handle, int w, int h)
{
EINA_SAFETY_ON_NULL_RETURN(output);
@@ -1007,7 +1012,7 @@ ecore_drm_output_cursor_size_set(Ecore_Drm_Output *output, int handle, int w, in
drmModeSetCursor(output->dev->drm.fd, output->crtc_id, handle, w, h);
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_output_enable(Ecore_Drm_Output *output)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
@@ -1031,7 +1036,7 @@ ecore_drm_output_disable(Ecore_Drm_Output *output)
_ecore_drm_output_event_send(output, EINA_FALSE);
}
-EAPI void
+EAPI void
ecore_drm_output_fb_release(Ecore_Drm_Output *output, Ecore_Drm_Fb *fb)
{
EINA_SAFETY_ON_NULL_RETURN(output);
@@ -1039,7 +1044,7 @@ ecore_drm_output_fb_release(Ecore_Drm_Output *output, Ecore_Drm_Fb *fb)
_ecore_drm_output_fb_release(output, fb);
}
-EAPI void
+EAPI void
ecore_drm_output_repaint(Ecore_Drm_Output *output)
{
Ecore_Drm_Device *dev;
@@ -1065,7 +1070,7 @@ ecore_drm_output_repaint(Ecore_Drm_Output *output)
output->need_repaint = EINA_FALSE;
- if ((!dev->current) ||
+ if ((!dev->current) ||
(dev->current->stride != dev->next->stride))
{
Ecore_Drm_Output_Mode *mode;
@@ -1094,13 +1099,13 @@ ecore_drm_output_repaint(Ecore_Drm_Output *output)
EINA_LIST_FOREACH(dev->sprites, l, sprite)
{
unsigned int flags = 0, id = 0;
- drmVBlank vbl =
+ drmVBlank vbl =
{
.request.type = (DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT),
.request.sequence = 1,
};
- if (((!sprite->current_fb) && (!sprite->next_fb)) ||
+ if (((!sprite->current_fb) && (!sprite->next_fb)) ||
(!ecore_drm_sprites_crtc_supported(output, sprite->crtcs)))
continue;
@@ -1127,7 +1132,7 @@ err:
}
}
-EAPI void
+EAPI void
ecore_drm_output_size_get(Ecore_Drm_Device *dev, int output, int *w, int *h)
{
drmModeFB *fb;
@@ -1142,7 +1147,7 @@ ecore_drm_output_size_get(Ecore_Drm_Device *dev, int output, int *w, int *h)
drmModeFreeFB(fb);
}
-EAPI void
+EAPI void
ecore_drm_outputs_geometry_get(Ecore_Drm_Device *dev, int *x, int *y, int *w, int *h)
{
Ecore_Drm_Output *output;
diff --git a/src/lib/ecore_drm/ecore_drm_private.h b/src/lib/ecore_drm/ecore_drm_private.h
index 91781d0f55..90699559ee 100644
--- a/src/lib/ecore_drm/ecore_drm_private.h
+++ b/src/lib/ecore_drm/ecore_drm_private.h
@@ -53,10 +53,6 @@
# include <linux/input.h>
# include <libinput.h>
-# ifdef HAVE_SYSTEMD
-# include <systemd/sd-login.h>
-# endif
-
# include <Eldbus.h>
# include <Ecore_Drm.h>
@@ -96,8 +92,8 @@
# endif
extern int _ecore_drm_log_dom;
-struct xkb_keymap *cached_keymap;
-struct xkb_context *cached_context;
+extern struct xkb_keymap *cached_keymap;
+extern struct xkb_context *cached_context;
# define EVDEV_MAX_SLOTS 32
@@ -177,7 +173,7 @@ struct _Ecore_Drm_Output
char serial[13];
} edid;
- Ecore_Drm_Backlight *backlight;
+ Ecore_Drm_Backlight *backlight;
Ecore_Drm_Fb *current, *next;
Eina_Bool primary : 1;
@@ -241,7 +237,7 @@ struct _Ecore_Drm_Evdev
/* } pt[EVDEV_MAX_SLOTS]; */
/* } abs; */
- struct
+ struct
{
int ix, iy;
int minx, miny, maxw, maxh;
@@ -253,7 +249,7 @@ struct _Ecore_Drm_Evdev
uint32_t prev_button, last_button;
} mouse;
- struct
+ struct
{
struct xkb_keymap *keymap;
struct xkb_state *state;
@@ -286,7 +282,7 @@ struct _Ecore_Drm_Sprite
unsigned int crtcs;
unsigned int plane_id;
- struct
+ struct
{
int x, y;
unsigned int w, h;
diff --git a/src/lib/ecore_drm/ecore_drm_sprites.c b/src/lib/ecore_drm/ecore_drm_sprites.c
index bcc6669765..523d787c4f 100644
--- a/src/lib/ecore_drm/ecore_drm_sprites.c
+++ b/src/lib/ecore_drm/ecore_drm_sprites.c
@@ -30,14 +30,14 @@
/**
* @defgroup Ecore_Drm_Sprites_Group Ecore DRM Sprites
- *
+ *
* Functions for managing DRM sprites.
- *
+ *
*/
/* TODO: DOXY !! */
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_sprites_create(Ecore_Drm_Device *dev)
{
drmModePlaneRes *res;
@@ -58,8 +58,8 @@ ecore_drm_sprites_create(Ecore_Drm_Device *dev)
continue;
/* allocate space for sprite */
- if (!(sprite =
- malloc(sizeof(Ecore_Drm_Sprite) +
+ if (!(sprite =
+ malloc(sizeof(Ecore_Drm_Sprite) +
((sizeof(unsigned int)) * p->count_formats))))
{
drmModeFreePlane(p);
@@ -71,7 +71,7 @@ ecore_drm_sprites_create(Ecore_Drm_Device *dev)
sprite->crtcs = p->possible_crtcs;
sprite->plane_id = p->plane_id;
sprite->num_formats = p->count_formats;
- memcpy(sprite->formats, p->formats,
+ memcpy(sprite->formats, p->formats,
p->count_formats * sizeof(p->formats[0]));
drmModeFreePlane(p);
@@ -84,7 +84,7 @@ ecore_drm_sprites_create(Ecore_Drm_Device *dev)
return EINA_TRUE;
}
-EAPI void
+EAPI void
ecore_drm_sprites_destroy(Ecore_Drm_Device *dev)
{
Ecore_Drm_Sprite *sprite;
@@ -106,28 +106,28 @@ ecore_drm_sprites_destroy(Ecore_Drm_Device *dev)
}
}
-EAPI void
+EAPI void
ecore_drm_sprites_fb_set(Ecore_Drm_Sprite *sprite, int fb_id, int flags)
{
EINA_SAFETY_ON_TRUE_RETURN((!sprite) || (!sprite->output));
if (fb_id)
{
- drmModeSetPlane(sprite->drm_fd, sprite->plane_id,
- sprite->output->crtc_id, fb_id, flags,
- sprite->dest.x, sprite->dest.y, sprite->dest.w,
+ drmModeSetPlane(sprite->drm_fd, sprite->plane_id,
+ sprite->output->crtc_id, fb_id, flags,
+ sprite->dest.x, sprite->dest.y, sprite->dest.w,
sprite->dest.h, sprite->src.x, sprite->src.y,
sprite->src.w, sprite->src.h);
}
else
{
- drmModeSetPlane(sprite->drm_fd, sprite->plane_id,
- sprite->output->crtc_id, 0, 0,
+ drmModeSetPlane(sprite->drm_fd, sprite->plane_id,
+ sprite->output->crtc_id, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0);
}
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_sprites_crtc_supported(Ecore_Drm_Output *output, unsigned int supported)
{
Ecore_Drm_Device *dev;
diff --git a/src/lib/ecore_drm/ecore_drm_tty.c b/src/lib/ecore_drm/ecore_drm_tty.c
index b950ba1de7..822ee3bbbe 100644
--- a/src/lib/ecore_drm/ecore_drm_tty.c
+++ b/src/lib/ecore_drm/ecore_drm_tty.c
@@ -34,7 +34,7 @@
static int kbd_mode = 0;
-static Eina_Bool
+static Eina_Bool
_ecore_drm_tty_cb_vt_signal(void *data, int type EINA_UNUSED, void *event)
{
Ecore_Drm_Device *dev;
@@ -77,14 +77,14 @@ _ecore_drm_tty_switch(Ecore_Drm_Device *dev, int activate_vt)
return ioctl(dev->tty.fd, VT_ACTIVATE, activate_vt) >= 0;
}
-static Eina_Bool
+static Eina_Bool
_ecore_drm_tty_setup(Ecore_Drm_Device *dev)
{
struct stat st;
int kmode;
struct vt_mode vtmode = { 0, 0, SIGUSR1, SIGUSR2, 0 };
- if ((fstat(dev->tty.fd, &st) == -1) ||
+ if ((fstat(dev->tty.fd, &st) == -1) ||
(major(st.st_rdev) != TTY_MAJOR) || (minor(st.st_rdev) <= 0) ||
(minor(st.st_rdev) >= 64))
{
@@ -121,7 +121,7 @@ _ecore_drm_tty_setup(Ecore_Drm_Device *dev)
else if (dev->tty.kbd_mode == K_OFF)
dev->tty.kbd_mode = K_UNICODE;
- if (ioctl(dev->tty.fd, KDSKBMUTE, 1) &&
+ if (ioctl(dev->tty.fd, KDSKBMUTE, 1) &&
ioctl(dev->tty.fd, KDSKBMODE, K_OFF))
{
ERR("Could not set K_OFF keyboard mode: %m");
@@ -156,11 +156,11 @@ err_kmode:
/**
* @defgroup Ecore_Drm_Tty_Group Tty manipulation functions
- *
+ *
* Functions that deal with opening, closing, and otherwise using a tty
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_tty_open(Ecore_Drm_Device *dev, const char *name)
{
char tty[32] = "<stdin>";
@@ -219,8 +219,8 @@ ecore_drm_tty_open(Ecore_Drm_Device *dev, const char *name)
return EINA_FALSE;
}
- dev->tty.event_hdlr =
- ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
+ dev->tty.event_hdlr =
+ ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
_ecore_drm_tty_cb_vt_signal, dev);
/* set current tty into env */
@@ -240,7 +240,7 @@ _ecore_drm_tty_restore(Ecore_Drm_Device *dev)
if (ioctl(fd, KDSETMODE, KD_TEXT))
ERR("Could not set KD_TEXT mode on tty: %m\n");
- if (ioctl(dev->tty.fd, KDSKBMUTE, 0) &&
+ if (ioctl(dev->tty.fd, KDSKBMUTE, 0) &&
ioctl(dev->tty.fd, KDSKBMODE, kbd_mode))
{
ERR("Could not restore keyboard mode: %m");
@@ -253,7 +253,7 @@ _ecore_drm_tty_restore(Ecore_Drm_Device *dev)
ERR("Could not reset VT handling\n");
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_tty_close(Ecore_Drm_Device *dev)
{
/* check for valid device */
@@ -276,7 +276,7 @@ ecore_drm_tty_close(Ecore_Drm_Device *dev)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_tty_release(Ecore_Drm_Device *dev)
{
/* check for valid device */
@@ -284,7 +284,7 @@ ecore_drm_tty_release(Ecore_Drm_Device *dev)
(dev->tty.fd < 0), EINA_FALSE);
/* send ioctl for vt release */
- if (ioctl(dev->tty.fd, VT_RELDISP, 1) < 0)
+ if (ioctl(dev->tty.fd, VT_RELDISP, 1) < 0)
{
ERR("Could not release VT: %m");
return EINA_FALSE;
@@ -293,7 +293,7 @@ ecore_drm_tty_release(Ecore_Drm_Device *dev)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_drm_tty_acquire(Ecore_Drm_Device *dev)
{
/* check for valid device */
@@ -301,7 +301,7 @@ ecore_drm_tty_acquire(Ecore_Drm_Device *dev)
(dev->tty.fd < 0), EINA_FALSE);
/* send ioctl for vt acquire */
- if (ioctl(dev->tty.fd, VT_RELDISP, VT_ACKACQ) < 0)
+ if (ioctl(dev->tty.fd, VT_RELDISP, VT_ACKACQ) < 0)
{
ERR("Could not acquire VT: %m");
return EINA_FALSE;
@@ -310,7 +310,7 @@ ecore_drm_tty_acquire(Ecore_Drm_Device *dev)
return EINA_TRUE;
}
-EAPI int
+EAPI int
ecore_drm_tty_get(Ecore_Drm_Device *dev)
{
/* check for valid device */
diff --git a/src/lib/ecore_drm2/Ecore_Drm2.h b/src/lib/ecore_drm2/Ecore_Drm2.h
index 5c43258177..4dde788355 100644
--- a/src/lib/ecore_drm2/Ecore_Drm2.h
+++ b/src/lib/ecore_drm2/Ecore_Drm2.h
@@ -92,6 +92,8 @@ typedef struct _Ecore_Drm2_Context
unsigned int tv_usec, void *user_data);
void (*page_flip_handler)(int fd, unsigned int sequence, unsigned int tv_sec,
unsigned int tv_usec, void *user_data);
+ void (*page_flip_handler2)(int fd, unsigned int sequence, unsigned int tv_sec,
+ unsigned int tv_usec, unsigned int crtc_id, void *user_data);
} Ecore_Drm2_Context;
EAPI extern int ECORE_DRM2_EVENT_OUTPUT_CHANGED;
@@ -148,7 +150,7 @@ EAPI int ecore_drm2_shutdown(void);
* Read and process pending Drm events
*
* @param dev drm device
- * @param ctx
+ * @param drmctx
*
* @return 0 on success, -1 otherwise
*
@@ -230,7 +232,7 @@ EAPI void ecore_drm2_device_pointer_xy_get(Ecore_Drm2_Device *device, int *x, in
/**
* Warp the pointer position to given coordinates
*
- * @param dev
+ * @param device
* @param x
* @param y
*
@@ -410,6 +412,18 @@ EAPI Eina_Bool ecore_drm2_device_vt_set(Ecore_Drm2_Device *device, int vt);
EAPI Eina_Bool ecore_drm2_device_prefer_shadow(Ecore_Drm2_Device *device);
/**
+ * Get the default depth & bpp from a given device
+ *
+ * @param device
+ * @param depth
+ * @param bpp
+ *
+ * @ingroup Ecore_Drm2_Device_Group
+ * @since 1.25
+ */
+EAPI void ecore_drm2_device_preferred_depth_get(Ecore_Drm2_Device *device, int *depth, int *bpp);
+
+/**
* @defgroup Ecore_Drm2_Output_Group Drm output functions
*
* Functions that deal with setup of outputs
@@ -807,7 +821,7 @@ EAPI int ecore_drm2_output_rotation_get(Ecore_Drm2_Output *output);
/**
* Set the user data for the output's page flip handler
*
- * @param output The output to update user data for
+ * @param o The output to update user data for
* @param data The new user data pointer
*
* @ingroup Ecore_Drm2_Output_Group
@@ -840,7 +854,7 @@ EAPI unsigned int ecore_drm2_output_subpixel_get(const Ecore_Drm2_Output *output
* Set the relative mode for an output
*
* @param output The output to set relative mode
- * @param relative The relative mode to set
+ * @param mode The relative mode to set
*
* @ingroup Ecore_Drm2_Output_Group
* @since 1.21
@@ -1005,7 +1019,7 @@ EAPI Eina_Bool ecore_drm2_fb_busy_get(Ecore_Drm2_Fb *fb);
* Releasing buffers committed to scanout will potentially cause flicker,
* so this is only done when the panic flag is set.
*
- * @param output The output to force release
+ * @param o The output to force release
* @param panic Try to release even buffers committed to scanout
*
* @return EINA_TRUE if a buffer was released
@@ -1036,7 +1050,7 @@ EAPI void *ecore_drm2_fb_bo_get(Ecore_Drm2_Fb *fb);
* @param depth
* @param bpp
* @param format
- * @param stride
+ * @param strides
* @param dmabuf_fd
* @param dmabuf_fd_count
*
diff --git a/src/lib/ecore_drm2/ecore_drm2_device.c b/src/lib/ecore_drm2/ecore_drm2_device.c
index 7602114453..77498d806e 100644
--- a/src/lib/ecore_drm2/ecore_drm2_device.c
+++ b/src/lib/ecore_drm2/ecore_drm2_device.c
@@ -1,5 +1,9 @@
#include "ecore_drm2_private.h"
+#ifndef DRM_CAP_DUMB_PREFERRED_DEPTH
+# define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3
+#endif
+
#ifndef DRM_CAP_DUMB_PREFER_SHADOW
# define DRM_CAP_DUMB_PREFER_SHADOW 0x4
#endif
@@ -883,6 +887,22 @@ ecore_drm2_device_prefer_shadow(Ecore_Drm2_Device *device)
return EINA_FALSE;
}
+EAPI void
+ecore_drm2_device_preferred_depth_get(Ecore_Drm2_Device *device, int *depth, int *bpp)
+{
+ uint64_t caps;
+ int ret;
+
+ EINA_SAFETY_ON_NULL_RETURN(device);
+
+ ret = sym_drmGetCap(device->fd, DRM_CAP_DUMB_PREFERRED_DEPTH, &caps);
+ if (ret == 0)
+ {
+ if (depth) *depth = caps;
+ if (bpp) *bpp = caps;
+ }
+}
+
EAPI int
ecore_drm2_device_fd_get(Ecore_Drm2_Device *device)
{
diff --git a/src/lib/ecore_drm2/ecore_drm2_fb.c b/src/lib/ecore_drm2/ecore_drm2_fb.c
index e91cf67ec5..e2ef2e8a2f 100644
--- a/src/lib/ecore_drm2/ecore_drm2_fb.c
+++ b/src/lib/ecore_drm2/ecore_drm2_fb.c
@@ -1,6 +1,6 @@
#include "ecore_drm2_private.h"
-#define FLIP_TIMEOUT 0.05
+#define FLIP_TIMEOUT 1.0
static Eina_Bool
_fb2_create(Ecore_Drm2_Fb *fb)
@@ -137,10 +137,10 @@ _ecore_drm2_fb_destroy(Ecore_Drm2_Fb *fb)
{
EINA_SAFETY_ON_NULL_RETURN(fb);
- if (!fb->dead) ERR("Destroying an fb that hasn't been discarded");
+ if (!fb->dead) WRN("Destroying an fb that hasn't been discarded");
if (fb->scanout_count)
- ERR("Destroyed fb on scanout %d times.", fb->scanout_count);
+ WRN("Destroyed fb on scanout %d times.", fb->scanout_count);
if (fb->mmap) munmap(fb->mmap, fb->sizes[0]);
diff --git a/src/lib/ecore_drm2/ecore_drm2_outputs.c b/src/lib/ecore_drm2/ecore_drm2_outputs.c
index 6fe3eb5770..77123c948a 100644
--- a/src/lib/ecore_drm2/ecore_drm2_outputs.c
+++ b/src/lib/ecore_drm2/ecore_drm2_outputs.c
@@ -250,7 +250,7 @@ _output_edid_find(Ecore_Drm2_Output *output, const drmModeConnector *conn)
}
static int
-_output_crtc_find(const drmModeRes *res, const drmModeConnector *conn, Ecore_Drm2_Device *dev)
+_output_crtc_find(const drmModeRes *res, const drmModeConnector *conn, int fd)
{
drmModeEncoder *enc;
uint32_t crtc;
@@ -267,7 +267,7 @@ _output_crtc_find(const drmModeRes *res, const drmModeConnector *conn, Ecore_Drm
for (j = 0; j < conn->count_encoders; j++)
{
- enc = sym_drmModeGetEncoder(dev->fd, conn->encoders[j]);
+ enc = sym_drmModeGetEncoder(fd, conn->encoders[j]);
if (!enc) continue;
crtc = enc->crtc_id;
@@ -678,7 +678,7 @@ _output_create(Ecore_Drm2_Device *dev, const drmModeRes *res, const drmModeConne
if (w) *w = 0;
- i = _output_crtc_find(res, conn, dev);
+ i = _output_crtc_find(res, conn, dev->fd);
if (i < 0) return EINA_FALSE;
output = calloc(1, sizeof(Ecore_Drm2_Output));
diff --git a/src/lib/ecore_drm2/meson.build b/src/lib/ecore_drm2/meson.build
index 1a36fbbede..212dd366c7 100644
--- a/src/lib/ecore_drm2/meson.build
+++ b/src/lib/ecore_drm2/meson.build
@@ -1,22 +1,24 @@
-ecore_drm2_deps = [eeze, elput, dl, libdrm]
+ecore_drm2_deps = [eeze, elput]
ecore_drm2_pub_deps = [ecore]
+ecore_drm2_ext_deps = [dl, libdrm]
ecore_drm2_header_src = [
'Ecore_Drm2.h'
]
-ecore_drm2_src = [
+ecore_drm2_src = files([
'ecore_drm2_plane.c',
'ecore_drm2_fb.c',
'ecore_drm2_outputs.c',
'ecore_drm2_device.c',
'ecore_drm2.c',
'ecore_drm2_private.h'
-]
+])
ecore_drm2_lib = library('ecore_drm2',
ecore_drm2_src, pub_eo_file_target,
- dependencies: ecore_drm2_pub_deps + ecore_drm2_deps,
+ c_args : package_c_args,
+ dependencies: ecore_drm2_pub_deps + ecore_drm2_deps + ecore_drm2_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/ecore_evas/Ecore_Evas.h b/src/lib/ecore_evas/Ecore_Evas.h
index d59900d788..89a9ff843f 100644
--- a/src/lib/ecore_evas/Ecore_Evas.h
+++ b/src/lib/ecore_evas/Ecore_Evas.h
@@ -45,7 +45,7 @@
/* FIXME:
* to do soon:
- * - iconfication api needs to work
+ * - iconification api needs to work
* - maximization api needs to work
*
* later:
@@ -202,7 +202,7 @@ EAPI int ecore_evas_shutdown(void);
* Turns on client+server synchronized rendering in X11. App comp sync
* is disabled by default, but can be turned on optionally.
*
- * @note This is an experimental functionality and is likely to be removed.
+ * @warning This is a deprecated API. DO NOT USE.
*
* @param do_sync True to enable comp syncing, False to disable
*/
@@ -213,7 +213,7 @@ EAPI void ecore_evas_app_comp_sync_set(Eina_Bool do_sync);
*
* @return True if app comp sync is enabled.
*
- * @note This is an experimental functionality and is likely to be removed.
+ * @warning This is a deprecated API. DO NOT USE.
*
*/
EAPI Eina_Bool ecore_evas_app_comp_sync_get(void);
@@ -1003,8 +1003,8 @@ EAPI int ecore_evas_aux_hint_id_get(const Ecore_Evas *ee, const cha
* @see eecore_evas_callback_msg_handle_set()
*
* This is a list of examples of these functions:
- * @li @ref ecore_evas_extn_socket_example
- * @li @ref ecore_evas_extn_plug_example
+ * @li ecore_evas_extn_socket_example
+ * @li ecore_evas_extn_plug_example
*/
EAPI void ecore_evas_msg_parent_send(Ecore_Evas *ee, int msg_domain, int msg_id, void *data, int size);
@@ -1637,7 +1637,7 @@ EAPI Ecore_Cocoa_Window *ecore_evas_cocoa_window_get(const Ecore_Evas *ee);
/**
* @brief Create an Ecore_Evas window using the drm engine.
*
- * @param disp_name Name of the Wayland display to connect to.
+ * @param device Name of the Wayland display to connect to.
* @param parent (Unused)
* @param x Horizontal position of the Ecore_Evas window.
* @param y Vertical position of the Ecore_Evas window.
@@ -1657,7 +1657,7 @@ EAPI Ecore_Evas *ecore_evas_drm_new(const char *device, unsigned int parent,
/**
* @brief Create an Ecore_Evas window using the drm engine with GL support.
*
- * @param disp_name Name of the Wayland display to connect to.
+ * @param device Name of the Wayland display to connect to.
* @param parent (Unused)
* @param x Horizontal position of the Ecore_Evas window.
* @param y Vertical position of the Ecore_Evas window.
@@ -1740,7 +1740,7 @@ EAPI Ecore_Evas *ecore_evas_buffer_allocfunc_new(int w, int h, void *(*alloc
* @return A pointer to the internal pixels array of @p ee
*
* Besides returning a pointer to the actual pixel array of the given
- * canvas, this call will force a <b>rendering update on @p ee</b>,
+ * canvas, this call will force a <b>rendering update</b> on @p ee
* first.
*
* A common use case for this call is to create an image object, from
@@ -2033,10 +2033,7 @@ EAPI Ecore_Evas *ecore_evas_cocoa_new(Ecore_Cocoa_Window *parent,
* @brief Creates a new @c Ecore_Evas canvas bound to the Evas
* @b psl1ght engine.
*
- * @param parent ID of the parent window this Ecore_Evas window belongs
- * to, or 0 if this is a top-level window.
- * @param x Horizontal position of window, in pixels
- * @param y Vertical position of window, in pixels
+ * @param name Deprecated.
* @param w Width of the canvas, in pixels.
* @param h Height of the canvas, in pixels.
*
@@ -2894,8 +2891,7 @@ EAPI void ecore_evas_manual_render(Ecore_Evas *ee);
* set via the ECORE_EVAS_COMP_NOSYNC / ECORE_EVAS_COMP_SYNC
* environmental variables.
*
- * @note This is an experimental functionality and is likely to be
- * removed in future versions of EFL.
+ * @warning This is a deprecated API. DO NOT USE.
*/
EAPI void ecore_evas_comp_sync_set(Ecore_Evas *ee, Eina_Bool do_sync);
@@ -2905,8 +2901,7 @@ EAPI void ecore_evas_comp_sync_set(Ecore_Evas *ee, Eina_Bool do_sync);
* @param ee An @c Ecore_Evas handle
* @return True if composition synchronization is enabled, False otherwise
*
- * @note This is an experimental functionality and is likely to be
- * removed in future versions of EFL.
+ * @warning This is a deprecated API. DO NOT USE.
*/
EAPI Eina_Bool ecore_evas_comp_sync_get(const Ecore_Evas *ee);
@@ -3186,7 +3181,7 @@ typedef void (*Ecore_Evas_Vnc_Client_Disconnected_Cb)(void *data, Ecore_Evas *ee
* @param port The port number to start the VNC server. Use @c -1 to set the default VNC port (5900)
* @param accept_cb A callback used to accept a new client. If @c NULL all clients will be accepted.
* @param disc_cb A callback used to inform that a client has disconnected. It may be @c NULL.
- * @param data Data to pass to @a accept_cb and @disc_cb
+ * @param data Data to pass to @p accept_cb and @p disc_cb
* @return an Evas_Object that take everything under it to represent the view of the client.
*
* @see ecore_evas_vnc_stop()
@@ -3203,7 +3198,6 @@ EAPI Evas_Object *ecore_evas_vnc_start(Ecore_Evas *ee, const char *addr, int por
/**
* @brief Sets a callback for building new Evas.
*
- * @param ee The Ecore_Evas to set callbacks on
* @param func The function to call
*
* A call to this function will set a callback on an Ecore_Evas, causing
@@ -3592,6 +3586,10 @@ EAPI Evas_Object *ecore_evas_extn_plug_new(Ecore_Evas *ee_target);
EAPI Eina_Bool ecore_evas_extn_plug_connect(Evas_Object *obj, const char *svcname, int svcnum, Eina_Bool svcsys);
/**
+ * @}
+ */
+
+/**
* @brief Retrieves the coordinates of the default mouse pointer.
*
* @param ee The Ecore_Evas containing the pointer
@@ -3669,6 +3667,258 @@ EAPI unsigned long ecore_evas_pixmap_colormap_get(const Ecore_Evas *ee);
*/
EAPI int ecore_evas_pixmap_depth_get(const Ecore_Evas *ee);
+/** @defgroup Ecore_Evas_Selection_Group Ecore_Evas methods to handle selection
+ *
+ * These methods perform Copy&Paste and Drag&Drop operations.
+ *
+ * @since 1.24
+ *
+ * @{
+ */
+
+/** @brief Data buffer to use in Copy&Paste (and Drag&Drop) operations
+ *
+ * @since 1.24
+ */
+typedef enum {
+ ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER = 0, /**< Stores selected / highlighted selection */
+ ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER = 1, /**< Stores copied things (Ctrl + C) */
+ ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER = 2, /**< Stores dragged things while drag and drop is happening. */
+ ECORE_EVAS_SELECTION_BUFFER_LAST = 3, /**< Sentinel value. Do not use. */
+} Ecore_Evas_Selection_Buffer;
+
+/**
+ * @brief Callback called when the content of one of the selection buffers changes.
+ *
+ * @param[in] ee The Ecore_Evas that handles this selection.
+ * @param[in] selection The selection buffer that has changed.
+ *
+ * @since 1.24
+ */
+typedef void (*Ecore_Evas_Selection_Changed_Cb)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection);
+
+/**
+ * @brief Sets a callback for Ecore_Evas to be called when a selection buffer changes.
+ *
+ * @param[in] ee The Ecore_Evas to set the callback on.
+ * @param[in] cb The function to call.
+ *
+ * A call to this function will set a callback on an Ecore_Evas, causing
+ * @p func to be called whenever @p ee selections change.
+ * Only one such callback can exist for each Ecore_Evas. Calling this method multiple
+ * times overwrites previous functions. Use a NULL @p func to stop being notified.
+ *
+ * @warning If and when this function is called depends on the underlying
+ * windowing system.
+ *
+ * @since 1.24
+ */
+EAPI void ecore_evas_callback_selection_changed_set(Ecore_Evas *ee, Ecore_Evas_Selection_Changed_Cb cb);
+
+/**
+ * @brief Sets the content of the specified selection buffer.
+ *
+ * @param[in] ee The Ecore_Evas to set the selection buffer on.
+ * @param[in] buffer The selection buffer to set.
+ * @param[in] content Content to set to the selection buffer. The Eina_Content specifies the MIME type of the data.
+ * Ownership of the content is transferred.
+ *
+ * @note Only ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER and ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER
+ * buffers can be set. Drag and drop operations use a different set of methods.
+ *
+ * @since 1.24
+ */
+EAPI Eina_Bool ecore_evas_selection_set(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, Eina_Content *content);
+
+/**
+ * @brief Checks if the specified selection buffer has content.
+ *
+ * @param[in] ee The ecore evas to query
+ * @param[in] buffer Which selection buffer to ask
+ *
+ * @return EINA_TRUE if there is an available selection for the specified buffer.
+ *
+ * EINA_TRUE is also returned when the selection is in the window associated with @p ee
+ *
+ * @note Due to the asynchronous nature of selection buffers, this method might not return
+ * the right result when invoked from the selection callback set with ecore_evas_callback_selection_changed_set.
+ *
+ * @since 1.24
+ */
+EAPI Eina_Bool ecore_evas_selection_exists(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer);
+
+/**
+ * @brief Retrieves the content of the specified selection buffer.
+ *
+ * @param[in] ee The ecore evas to query.
+ * @param[in] buffer Selection buffer to retrieve.
+ * @param[in] acceptable_types MIME types which are acceptable for the returned Eina_Content.
+ * The iterator contains plain strings (char *). Ownership is transferred for the iterator but not for the strings.
+ * This is convenient for the usual case of a hard-coded array of strings, since the iterator can be generated
+ * on the fly, used and forgotten.
+ *
+ * @return An Eina_Future containing an Eina_Content which has one of the types in @p acceptable_type.
+ * An error is delivered when no matching type is found or when the requested selection buffer is empty.
+ *
+ * This method is time consuming, therefore, it is recommended to verify the existence of a selection
+ * using ecore_evas_selection_exists before calling it.
+ *
+ * @since 1.24
+ */
+EAPI Eina_Future* ecore_evas_selection_get(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, Eina_Iterator *acceptable_types);
+
+/**
+ * @brief This method is called when the mouse pointer enters or exits the specified window while
+ * performing a drag operation.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] p Position (in window coordinates) where the event occurred.
+ * @param[in] inside @c EINA_TRUE if the pointer just entered this window. @c EINA_FALSE if it has just exited.
+ *
+ * Set this callback using ecore_evas_callback_drop_state_changed_set.
+ *
+ * @since 1.24
+ */
+typedef void (*Ecore_Evas_Drag_Finished_Cb)(Ecore_Evas *ee, unsigned int seat, void *data, Eina_Bool accepted);
+
+/**
+ * @brief Starts a new drag operation.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] content The content to delivery at the drop site (ownership is transferred).
+ * The Eina_Content has data and its associated MIME type, plus a list of alternate types that can be provided.
+ * @param[in] drag_rep An Ecore_Evas used as a visual representation of the content being dragged.
+ * It must have the same type as @p ee. This is the transparent object dragged along the mouse pointer to indicate that
+ * a drag operation is in progress.
+ * @p terminate_cb will be called when @p drag_rep is not needed anymore and it must be disposed of.
+ * Use @p data to convey @p drag_rep to @p terminate_cb. For example, if @p drag_rep is owned by an Efl_Window, @p data
+ * can point to that window.
+ * @param[in] action Action the target application should perform upon receiving this content. It is entirely up to the
+ * target application to honor (or even understand) this request.
+ * @return @c EINA_TRUE if the drag operation has been successfully started.
+ *
+ * This method must be called when a drag operation is initiated in order to provide the necessary information.
+ *
+ * @since 1.24
+ */
+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 Cancels an ongoing drag operation.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @return @c EINA_TRUE if the drag operation has been successfully cancelled.
+ *
+ * The initiator of a drag operation can call this method to abort it.
+ *
+ * @since 1.24
+ */
+EAPI Eina_Bool ecore_evas_drag_cancel(Ecore_Evas *ee, unsigned int seat);
+
+/**
+ * @brief This method is called when the mouse pointer enters or exits the specified window while
+ * performing a drag operation.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] p Position (in window coordinates) where the event occurred.
+ * @param[in] inside @c EINA_TRUE if the pointer just entered this window. @c EINA_FALSE if it has just exited.
+ *
+ * Set this callback using ecore_evas_callback_drop_state_changed_set.
+ *
+ * @since 1.24
+ */
+typedef void (*Ecore_Evas_Drag_State_Changed_Cb)(Ecore_Evas *ee, unsigned int seat, Eina_Position2D p, Eina_Bool inside);
+
+/**
+ * @brief Sets the method (callback) to call when the mouse pointer enters or exits the specified window while
+ * performing a drag operation.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] cb Method to call when the events are received.
+ *
+ * Only one such callback can exist for each Ecore_Evas. Calling this method multiple
+ * times overwrites previous functions. Use a NULL @p cb func to stop being notified.
+ *
+ * @since 1.24
+ */
+EAPI void ecore_evas_callback_drop_state_changed_set(Ecore_Evas *ee, Ecore_Evas_Drag_State_Changed_Cb cb);
+
+/**
+ * @brief This method is called when the mouse pointer moves over the specified window while
+ * performing a drag operation.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] p Position (in window coordinates) where the event occurred.
+ *
+ * Set this callback using ecore_evas_callback_drop_motion_set.
+ *
+ * @since 1.24
+ */
+
+typedef void (*Ecore_Evas_Drag_Motion_Cb)(Ecore_Evas *ee, unsigned int seat, Eina_Position2D p);
+/**
+ * @brief Sets the method (callback) to call when the mouse pointer moves over the specified window while
+ * performing a drag operation.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] cb Method to call when the events are received.
+ *
+ * Only one such callback can exist for each Ecore_Evas. Calling this method multiple
+ * times overwrites previous functions. Use a NULL @p cb func to stop being notified.
+ *
+ * @since 1.24
+ */
+EAPI void ecore_evas_callback_drop_motion_set(Ecore_Evas *ee, Ecore_Evas_Drag_Motion_Cb cb);
+
+/**
+ * @brief This method is called when the mouse pointer is released over the specified window while
+ * performing a drag operation (thus dropping the dragged content over the window).
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] p Position (in window coordinates) where the event occurred.
+ *
+ * The dropped data can be retrieved using ecore_evas_selection_get and the
+ * ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER buffer.
+ *
+ * Set this callback using ecore_evas_callback_drop_drop_set.
+ *
+ * @since 1.24
+ */
+typedef void (*Ecore_Evas_Drop_Cb)(Ecore_Evas *ee, unsigned int seat, Eina_Position2D p, const char *action);
+
+/**
+ * @brief Sets the method (callback) to call when the mouse pointer is released over the specified window while
+ * performing a drag operation (thus dropping the dragged content over the window).
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @param[in] cb Method to call when the events are received.
+ *
+ * Only one such callback can exist for each Ecore_Evas. Calling this method multiple
+ * times overwrites previous functions. Use a NULL @p cb func to stop being notified.
+ *
+ * @since 1.24
+ */
+EAPI void ecore_evas_callback_drop_drop_set(Ecore_Evas *ee, Ecore_Evas_Drop_Cb cb);
+
+/**
+ * @brief Retrieves the list of types the data currently being dragged can be automatically converted to.
+ *
+ * @param[in] ee The Ecore Evas the drag operation started on.
+ * @return
+ *
+ * This can be used in any of the drag and drop callbacks (Ecore_Evas_Drag_State_Changed_Cb, Ecore_Evas_Drag_Motion_Cb
+ * and Ecore_Evas_Drop_Cb) to check if the data being dragged is acceptable and give the user some early feedback
+ * before the data is actually dropped on the window.
+ *
+ * This is functionally equivalent to calling ecore_evas_selection_get and examining the available types in the
+ * returned Eina_Content, but much faster since the actual data does not have to be asynchronously requested to the
+ * initiator application.
+ *
+ * @since 1.24
+ */
+EAPI Eina_Accessor* ecore_evas_drop_available_types_get(Ecore_Evas *ee, unsigned int seat);
+
/**
* @}
*/
@@ -3685,3 +3935,4 @@ EAPI int ecore_evas_pixmap_depth_get(const Ecore_Evas *ee);
#define EAPI
#endif
+
diff --git a/src/lib/ecore_evas/Ecore_Evas_Types.h b/src/lib/ecore_evas/Ecore_Evas_Types.h
index fae0b0e16f..aa93c97164 100644
--- a/src/lib/ecore_evas/Ecore_Evas_Types.h
+++ b/src/lib/ecore_evas/Ecore_Evas_Types.h
@@ -12,7 +12,7 @@
typedef unsigned int Ecore_X_Window;
typedef unsigned int Ecore_X_Pixmap;
typedef unsigned int Ecore_X_Atom;
-typedef struct _Ecore_X_Icon
+typedef struct _Ecore_X_Icon
{
unsigned int width, height;
unsigned int *data;
diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index d3c26ddb19..a579abff97 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -44,17 +44,21 @@
#define ECORE_EVAS_CHECK(ee, ...) \
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS)) \
{ \
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __FUNCTION__); \
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __func__); \
return __VA_ARGS__; \
}
#define ECORE_EVAS_CHECK_GOTO(_ee, _label) \
if (!ECORE_MAGIC_CHECK(_ee, ECORE_MAGIC_EVAS)) \
{ \
- ECORE_MAGIC_FAIL(_ee, ECORE_MAGIC_EVAS, __FUNCTION__); \
+ ECORE_MAGIC_FAIL(_ee, ECORE_MAGIC_EVAS, __func__); \
goto _label; \
}
+EAPI Eina_Error ecore_evas_no_matching_type;
+EAPI Eina_Error ecore_evas_no_selection;
+EAPI Eina_Error ecore_evas_request_replaced;
+
EAPI Eina_Bool _ecore_evas_app_comp_sync = EINA_FALSE;
EAPI int _ecore_evas_log_dom = -1;
static int _ecore_evas_init_count = 0;
@@ -361,7 +365,7 @@ _ecore_evas_cursor_add(Ecore_Evas *ee, Efl_Input_Device *dev)
cursor = calloc(1, sizeof(Ecore_Evas_Cursor));
EINA_SAFETY_ON_NULL_RETURN(cursor);
eina_hash_add(ee->prop.cursors, &seat, cursor);
- if (seat != evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT)) return;
+ if (seat != evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT)) return;
if (ee->prop.cursor_cache.object)
{
ecore_evas_object_cursor_device_set(ee, dev,
@@ -392,7 +396,7 @@ _ecore_evas_dev_added_or_removed(void *data, const Efl_Event *event)
{
if (_is_pointer(event->info))
_ecore_evas_cursor_add(ee, event->info);
- else if (event->info == evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT))
+ else if (event->info == evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT))
{
if (ee->prop.focused)
_ecore_evas_focus_device_set(ee, event->info, 1);
@@ -652,6 +656,10 @@ ecore_evas_init(void)
iface.del = _ecore_evas_animator_del;
ecore_evas_object_animator_init(&iface);
+ ecore_evas_no_matching_type = eina_error_msg_register("No fitting type could be found");
+ ecore_evas_no_selection = eina_error_msg_register("No selection available");
+ ecore_evas_request_replaced = eina_error_msg_register("Selection request replaced");
+
return _ecore_evas_init_count;
shutdown_ecore:
@@ -1720,7 +1728,7 @@ _ecore_evas_default_cursor_image_get(Ecore_Evas *ee)
Efl_Input_Device *pointer;
Ecore_Evas_Cursor *cursor;
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
cursor = eina_hash_find(ee->prop.cursors, &pointer);
EINA_SAFETY_ON_NULL_RETURN_VAL(cursor, NULL);
return cursor->object;
@@ -1732,7 +1740,7 @@ _ecore_evas_default_cursor_hide(Ecore_Evas *ee)
Efl_Input_Device *pointer;
Ecore_Evas_Cursor *cursor;
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
cursor = eina_hash_find(ee->prop.cursors, &pointer);
EINA_SAFETY_ON_NULL_RETURN(cursor);
if (cursor->object)
@@ -1751,7 +1759,7 @@ _ecore_evas_object_cursor_device_set(Ecore_Evas *ee, Efl_Input_Device *pointer,
ECORE_EVAS_CHECK(ee);
- dpointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ dpointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
if (pointer)
{
if (efl_input_device_type_get(pointer) != EFL_INPUT_DEVICE_TYPE_SEAT)
@@ -1880,7 +1888,7 @@ ecore_evas_cursor_device_get(const Ecore_Evas *ee, Efl_Input_Device *pointer,
}
}
else
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
if (pointer)
{
cursor = eina_hash_find(ee->prop.cursors, &pointer);
@@ -1927,7 +1935,7 @@ ecore_evas_cursor_device_unset(Ecore_Evas *ee, Efl_Input_Device *pointer)
}
}
else
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
if (pointer)
cursor = eina_hash_find(ee->prop.cursors, &pointer);
if (!cursor) return NULL;
@@ -1969,7 +1977,7 @@ ecore_evas_focus_device_get(const Ecore_Evas *ee, Efl_Input_Device *seat)
{
ECORE_EVAS_CHECK(ee, EINA_FALSE);
if (!seat)
- seat = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ seat = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
return eina_list_data_find(ee->prop.focused_by, seat) ? EINA_TRUE : EINA_FALSE;
}
@@ -1980,7 +1988,7 @@ _ecore_evas_focus_device_set(Ecore_Evas *ee, Efl_Input_Device *seat,
Eina_Bool present;
if (!seat)
- seat = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ seat = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
if ((!on) && (!seat)) return;
if (seat && (efl_input_device_type_get(seat) != EFL_INPUT_DEVICE_TYPE_SEAT))
@@ -2777,13 +2785,13 @@ ecore_evas_screen_dpi_get(const Ecore_Evas *ee, int *xdpi, int *ydpi)
EAPI void
ecore_evas_draw_frame_set(Ecore_Evas *ee EINA_UNUSED, Eina_Bool draw_frame EINA_UNUSED)
{
- WRN("Calling deprecated function %s (not implemented)", __FUNCTION__);
+ WRN("Calling deprecated function %s (not implemented)", __func__);
}
EAPI Eina_Bool
ecore_evas_draw_frame_get(const Ecore_Evas *ee EINA_UNUSED)
{
- WRN("Calling deprecated function %s (not implemented)", __FUNCTION__);
+ WRN("Calling deprecated function %s (not implemented)", __func__);
return EINA_FALSE;
}
@@ -2818,7 +2826,7 @@ ecore_evas_shadow_geometry_get(const Ecore_Evas *ee, int *l, int *r, int *t, int
if (b) *b = ee->shadow.b;
}
-EAPI void
+EAPI void
ecore_evas_pointer_xy_get(const Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
{
if (x) *x = 0;
@@ -2828,7 +2836,7 @@ ecore_evas_pointer_xy_get(const Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
IFE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_evas_pointer_warp(const Ecore_Evas *ee, Evas_Coord x, Evas_Coord y)
{
ECORE_EVAS_CHECK(ee, EINA_FALSE);
@@ -2856,7 +2864,7 @@ ecore_evas_pointer_device_xy_get(const Ecore_Evas *ee,
}
}
if ((!pointer) ||
- (pointer == evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT)))
+ (pointer == evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT)))
ecore_evas_pointer_xy_get(ee, x, y);
else
{
@@ -2905,7 +2913,7 @@ ecore_evas_pixmap_visual_get(const Ecore_Evas *ee)
return NULL;
}
-EAPI unsigned long
+EAPI unsigned long
ecore_evas_pixmap_colormap_get(const Ecore_Evas *ee)
{
ECORE_EVAS_CHECK(ee, 0);
@@ -2932,7 +2940,7 @@ ecore_evas_pixmap_colormap_get(const Ecore_Evas *ee)
return 0;
}
-EAPI int
+EAPI int
ecore_evas_pixmap_depth_get(const Ecore_Evas *ee)
{
ECORE_EVAS_CHECK(ee, 0);
@@ -3080,11 +3088,18 @@ _ecore_evas_animator_detach(Ecore_Animator *a)
ee = a->ee;
if (a->suspended)
- ee->ee_anim.suspended = eina_inlist_remove(ee->ee_anim.suspended, EINA_INLIST_GET(a));
- else if ((!tmp->next) && (!tmp->prev) && (EINA_INLIST_GET(a) != ee->ee_anim.active))
+ {
+ ee->ee_anim.suspended =
+ eina_inlist_remove(ee->ee_anim.suspended, EINA_INLIST_GET(a));
+ }
+ else if ((!tmp->next) && (!tmp->prev) &&
+ (EINA_INLIST_GET(a) != ee->ee_anim.active))
return;
else
- ee->ee_anim.active = eina_inlist_remove(ee->ee_anim.active, EINA_INLIST_GET(a));
+ {
+ ee->ee_anim.active =
+ eina_inlist_remove(ee->ee_anim.active, EINA_INLIST_GET(a));
+ }
a->suspended = EINA_FALSE;
}
@@ -3524,6 +3539,9 @@ _ecore_evas_free(Ecore_Evas *ee)
free(iface);
ee->engine.ifaces = NULL;
+
+ if (ee->fallback_interface)
+ fallback_selection_shutdown(ee);
free(ee);
}
@@ -3542,7 +3560,7 @@ _ecore_evas_idle_timeout_update(Ecore_Evas *ee)
{
if (ee->engine.idle_flush_timer)
ecore_timer_del(ee->engine.idle_flush_timer);
- ee->engine.idle_flush_timer =
+ ee->engine.idle_flush_timer =
ecore_timer_loop_add(IDLE_FLUSH_TIME, _ecore_evas_cb_idle_flush, ee);
}
@@ -3569,7 +3587,7 @@ _ecore_evas_mouse_move_process_internal(Ecore_Evas *ee,
}
else
{
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_MOUSE);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_MOUSE);
seat = efl_input_device_seat_get(pointer);
}
if (efl_input_device_type_get(seat) != EFL_INPUT_DEVICE_TYPE_SEAT)
@@ -4007,7 +4025,7 @@ ecore_evas_software_x11_pixmap_new(const char *disp_name, Ecore_X_Window parent,
}
-EAPI Ecore_X_Pixmap
+EAPI Ecore_X_Pixmap
ecore_evas_software_x11_pixmap_get(const Ecore_Evas *ee)
{
Ecore_Evas_Interface_Software_X11 *iface;
@@ -4082,7 +4100,7 @@ ecore_evas_gl_x11_pixmap_new(const char *disp_name, Ecore_X_Window parent, int x
}
-EAPI Ecore_X_Pixmap
+EAPI Ecore_X_Pixmap
ecore_evas_gl_x11_pixmap_get(const Ecore_Evas *ee)
{
Ecore_Evas_Interface_Gl_X11 *iface;
@@ -4839,7 +4857,7 @@ _direct_mouse_updown(Ecore_Evas *ee, const Ecore_Event_Mouse_Button *info, Efl_P
ev->pressure = info->multi.pressure;
ev->angle = info->multi.angle - ee->rotation;
if (info->dev) ev->device = efl_ref(info->dev);
- else ev->device = efl_ref(evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_MOUSE));
+ else ev->device = efl_ref(evas_default_device_get(e, EVAS_DEVICE_CLASS_MOUSE));
efl_input_pointer_finalize(evt);
efl_event_callback_legacy_call(e, _event_description_get(ev->action), evt);
@@ -4901,7 +4919,7 @@ _direct_mouse_move_cb(Ecore_Evas *ee, const Ecore_Event_Mouse_Move *info)
ev->pressure = info->multi.pressure;
ev->angle = info->multi.angle - ee->rotation;
if (info->dev) ev->device = efl_ref(info->dev);
- else ev->device = efl_ref(evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_MOUSE));
+ else ev->device = efl_ref(evas_default_device_get(e, EVAS_DEVICE_CLASS_MOUSE));
efl_input_pointer_finalize(evt);
efl_event_callback_legacy_call(e, _event_description_get(ev->action), evt);
@@ -4936,7 +4954,7 @@ _direct_mouse_wheel_cb(Ecore_Evas *ee, const Ecore_Event_Mouse_Wheel *info)
ev->wheel.z = info->z;
ev->wheel.horizontal = !!info->direction;
if (info->dev) ev->device = efl_ref(info->dev);
- else ev->device = efl_ref(evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_MOUSE));
+ else ev->device = efl_ref(evas_default_device_get(e, EVAS_DEVICE_CLASS_MOUSE));
efl_input_pointer_finalize(evt);
efl_event_callback_legacy_call(e, _event_description_get(ev->action), evt);
@@ -4966,7 +4984,7 @@ _direct_mouse_inout(Ecore_Evas *ee, const Ecore_Event_Mouse_IO *info, Efl_Pointe
ev->timestamp = info->timestamp;
_pointer_position_set(ev, ee, info->x, info->y, info->x, info->y);
if (info->dev) ev->device = efl_ref(info->dev);
- else ev->device = efl_ref(evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_MOUSE));
+ else ev->device = efl_ref(evas_default_device_get(e, EVAS_DEVICE_CLASS_MOUSE));
efl_input_pointer_finalize(evt);
efl_event_callback_legacy_call(e, _event_description_get(ev->action), evt);
@@ -5096,7 +5114,7 @@ _direct_axis_update_cb(Ecore_Evas *ee, const Ecore_Event_Axis_Update *info)
}
_pointer_position_set(ev, ee, x, y, x, y);
if (info->dev) ev->device = efl_ref(info->dev);
- else ev->device = efl_ref(evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_MOUSE));
+ else ev->device = efl_ref(evas_default_device_get(e, EVAS_DEVICE_CLASS_MOUSE));
efl_input_pointer_finalize(evt);
efl_event_callback_legacy_call(e, _event_description_get(ev->action), evt);
@@ -5135,7 +5153,7 @@ _direct_key_updown_cb(Ecore_Evas *ee, const Ecore_Event_Key *info, Eina_Bool dow
ev->data = info->data;
ev->event_flags = 0;
if (info->dev) ev->device = efl_ref(info->dev);
- else ev->device = efl_ref(evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_KEYBOARD));
+ else ev->device = efl_ref(evas_default_device_get(e, EVAS_DEVICE_CLASS_KEYBOARD));
if (down)
efl_event_callback_legacy_call(e, EFL_EVENT_KEY_DOWN, evt);
@@ -5187,8 +5205,7 @@ _ecore_evas_mouse_inout_set(Ecore_Evas *ee, Efl_Input_Device *mouse,
Eina_List *present;
if (!mouse)
- mouse = evas_default_device_get(ee->evas,
- EFL_INPUT_DEVICE_TYPE_MOUSE);;
+ mouse = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_MOUSE);
EINA_SAFETY_ON_NULL_RETURN(mouse);
present = eina_list_data_find_list(ee->mice_in, mouse);
@@ -5215,7 +5232,7 @@ EAPI Eina_Bool
_ecore_evas_mouse_in_check(Ecore_Evas *ee, Efl_Input_Device *mouse)
{
if (!mouse)
- mouse = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_MOUSE);
+ mouse = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_MOUSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(mouse, EINA_FALSE);
return eina_list_data_find(ee->mice_in, mouse) ? EINA_TRUE : EINA_FALSE;
}
@@ -5449,3 +5466,361 @@ _ecore_evas_animator_thaw(Ecore_Animator *in)
EINA_INLIST_GET(animator));
_ticking_start(ee);
}
+
+EAPI void
+ecore_evas_callback_selection_changed_set(Ecore_Evas *ee, Ecore_Evas_Selection_Changed_Cb func)
+{
+ ECORE_EVAS_CHECK(ee);
+ ee->func.fn_selection_changed = func;
+}
+
+static Ecore_Evas_Selection_Seat_Buffers*
+_fetch_selection_buffers_of_seat(Ecore_Evas *ee, unsigned int seat, Eina_Bool create)
+{
+ Ecore_Evas_Selection_Seat_Buffers *buffers;
+ if (!ee->selection_buffers)
+ ee->selection_buffers = eina_hash_int32_new(free);
+
+ buffers = eina_hash_find(ee->selection_buffers, &seat);
+
+ if (!buffers && create)
+ {
+ buffers = calloc(1, sizeof(Ecore_Evas_Selection_Seat_Buffers));
+ buffers->seat = seat;
+ eina_hash_add(ee->selection_buffers, &seat, buffers);
+ }
+ return buffers;
+}
+
+static Eina_Bool
+_deliver_cb(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, const char *type, Eina_Rw_Slice *slice)
+{
+ Ecore_Evas_Selection_Seat_Buffers *buffers;
+ Eina_Content *content = NULL;
+ Eina_Content *converted = NULL;
+ Eina_Bool result = EINA_FALSE;
+
+ INF("Delivery request on seat %d in buffer %d", seat, buffer);
+
+ buffers = _fetch_selection_buffers_of_seat(ee, seat, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_GOTO(buffers, free_everything);
+ content = buffers->selection_buffer[buffer];
+ EINA_SAFETY_ON_NULL_GOTO(content, free_everything);
+ if (!eina_streq(type, eina_content_type_get(content)))
+ converted = eina_content_convert(content, type);
+ else
+ converted = content;
+
+ EINA_SAFETY_ON_NULL_GOTO(converted, free_everything);
+ *slice = eina_slice_dup(eina_content_data_get(converted));
+ result = EINA_TRUE;
+
+ if (buffer == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ {
+ ee->drag.accepted = EINA_TRUE;
+ }
+
+free_everything:
+ if (converted && content && !eina_streq(type, eina_content_type_get(content)))
+ eina_content_free(converted);
+
+ return result;
+}
+
+static void
+_cancel_cb(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer)
+{
+ Ecore_Evas_Selection_Seat_Buffers *buffers;
+
+ INF("Cancel request on seat %d in buffer %d", seat, buffer);
+
+ buffers = _fetch_selection_buffers_of_seat(ee, seat, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN(buffers);
+ EINA_SAFETY_ON_FALSE_RETURN(buffers->selection_buffer[buffer]);
+ eina_content_free(buffers->selection_buffer[buffer]);
+ buffers->selection_buffer[buffer] = NULL;
+
+ if (buffer == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ {
+ ee->drag.rep = NULL;
+ if (ee->drag.free)
+ ee->drag.free(ee, seat, ee->drag.data, EINA_FALSE);
+ ee->drag.free = NULL;
+ }
+}
+
+#define CALL(call) (ee->engine.func->fn_ ##call ? : fallback_ ##call)
+
+static Eina_Array*
+_iterator_to_array(Eina_Iterator *iter, const char *existing_type)
+{
+ Eina_Array *ret = eina_array_new(10);
+ const char *type;
+
+ if (existing_type)
+ eina_array_push(ret, existing_type);
+
+ EINA_ITERATOR_FOREACH(iter, type)
+ {
+ eina_array_push(ret, type);
+ }
+ eina_iterator_free(iter);
+
+ return ret;
+}
+
+EAPI Eina_Bool
+ecore_evas_selection_set(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, Eina_Content *content)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ee, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(buffer >= 0 && buffer < ECORE_EVAS_SELECTION_BUFFER_LAST, EINA_FALSE);
+ Eina_Iterator *available_type = NULL;
+ Eina_Bool success;
+ Ecore_Evas_Selection_Seat_Buffers *buffers;
+
+ INF("Selection set on seat %d in buffer %d", seat, buffer);
+
+ if (buffer == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ {
+ ERR("You cannot set a selection with this API, please use the API to start a drag operation");
+ return EINA_FALSE;
+ }
+
+ buffers = _fetch_selection_buffers_of_seat(ee, seat, EINA_TRUE);
+
+ if (content)
+ available_type = eina_content_possible_conversions(content);
+
+ success = CALL(selection_claim)(ee, seat, buffer, _iterator_to_array(available_type, content ? eina_content_type_get(content) : NULL), content ? _deliver_cb : NULL, content ? _cancel_cb : NULL);
+ if (success)
+ {
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(buffers->selection_buffer[buffer] == NULL, EINA_FALSE);
+ //keep this after the claim, the claim might call cancel, which would overwrite this.
+ buffers->selection_buffer[buffer] = content;
+ }
+ else if (content)
+ {
+ eina_content_free(content);
+ }
+
+ return success;
+}
+
+EAPI Eina_Bool
+ecore_evas_selection_exists(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ee, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(buffer >= 0 && buffer < ECORE_EVAS_SELECTION_BUFFER_LAST, EINA_FALSE);
+ Ecore_Evas_Selection_Seat_Buffers *buffers;
+
+ INF("Exists request on seat %d in buffer %d", seat, buffer);
+
+ buffers = _fetch_selection_buffers_of_seat(ee, seat, EINA_TRUE);
+ if (buffers->selection_buffer[buffer])
+ return EINA_TRUE;
+ else
+ {
+ return CALL(selection_has_owner)(ee, seat, buffer);
+ }
+}
+
+static Eina_Array*
+_iterator_to_array_stringshared(Eina_Iterator *iter)
+{
+ Eina_Array *ret = eina_array_new(10);
+ const char *type;
+
+ EINA_ITERATOR_FOREACH(iter, type)
+ {
+ eina_array_push(ret, eina_stringshare_add(type));
+ }
+ eina_iterator_free(iter);
+
+ return ret;
+}
+
+EAPI Eina_Future*
+ecore_evas_selection_get(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, Eina_Iterator *acceptable_types)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ee, NULL);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(buffer >= 0 && buffer < ECORE_EVAS_SELECTION_BUFFER_LAST, NULL);
+
+ INF("Selection get request on seat %d in buffer %d", seat, buffer);
+
+ return CALL(selection_request)(ee, seat, buffer, _iterator_to_array_stringshared(acceptable_types));
+}
+
+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)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ee, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(content, EINA_FALSE);
+ Eina_Iterator *available_type = eina_content_possible_conversions(content);
+ Eina_Bool success;
+ Ecore_Evas_Selection_Seat_Buffers *buffers;
+
+ INF("Drag start on seat %d", seat);
+
+ buffers = _fetch_selection_buffers_of_seat(ee, seat, EINA_TRUE);
+ success = CALL(dnd_start)(ee, seat, _iterator_to_array(available_type, eina_content_type_get(content)), drag_rep, _deliver_cb, _cancel_cb, action);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(buffers->selection_buffer[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER] == NULL, EINA_FALSE);
+ //keep this after the claim, the claim might call cancel, which would overwrite this.
+ buffers->selection_buffer[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER] = content;
+
+ ee->drag.rep = drag_rep;
+ ee->drag.free = terminate_cb;
+ ee->drag.data = data;
+ ee->drag.accepted = EINA_FALSE;
+
+ return success;
+}
+
+EAPI Eina_Bool
+ecore_evas_drag_cancel(Ecore_Evas *ee, unsigned int seat)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ee, EINA_FALSE);
+
+ INF("Drag cancel on seat %d", seat);
+
+ return CALL(dnd_stop)(ee, seat);
+}
+
+EAPI void
+ecore_evas_callback_drop_motion_set(Ecore_Evas *ee, Ecore_Evas_Drag_Motion_Cb cb)
+{
+ ECORE_EVAS_CHECK(ee);
+ ee->func.fn_dnd_motion = cb;
+}
+
+EAPI void
+ecore_evas_callback_drop_state_changed_set(Ecore_Evas *ee, Ecore_Evas_Drag_State_Changed_Cb cb)
+{
+ ECORE_EVAS_CHECK(ee);
+ ee->func.fn_dnd_state_change = cb;
+}
+
+EAPI void
+ecore_evas_callback_drop_drop_set(Ecore_Evas *ee, Ecore_Evas_Drop_Cb cb)
+{
+ ECORE_EVAS_CHECK(ee);
+ ee->func.fn_dnd_drop = cb;
+}
+
+typedef struct {
+ Eina_Array *available_mime_types;
+ Eina_Position2D pos;
+ Eina_Bool last_motion_was_used;
+} Ecore_Evas_Active_Dnd;
+
+static void
+_ecore_evas_active_dnd_free(Ecore_Evas_Active_Dnd *dnd)
+{
+ eina_array_free(dnd->available_mime_types);
+ free(dnd);
+}
+
+EAPI void
+ecore_evas_dnd_enter(Ecore_Evas *ee, unsigned int seat, Eina_Iterator *available_types, Eina_Position2D pos)
+{
+ Eina_Stringshare *s;
+ Ecore_Evas_Active_Dnd *dnd;
+
+ ECORE_EVAS_CHECK(ee);
+ if (!ee->active_drags)
+ {
+ ee->active_drags = eina_hash_int32_new((Eina_Free_Cb)_ecore_evas_active_dnd_free);
+ }
+
+ dnd = calloc(1, sizeof(Ecore_Evas_Active_Dnd));
+ dnd->available_mime_types = eina_array_new(5);
+ eina_hash_add(ee->active_drags, &seat, dnd);
+
+ EINA_ITERATOR_FOREACH(available_types, s)
+ {
+ eina_array_push(dnd->available_mime_types, s);
+ }
+ eina_iterator_free(available_types);
+
+ if (ee->func.fn_dnd_state_change)
+ ee->func.fn_dnd_state_change(ee, seat, pos, EINA_TRUE);
+}
+
+EAPI Eina_Bool
+ecore_evas_dnd_position_set(Ecore_Evas *ee, unsigned int seat, Eina_Position2D pos)
+{
+ Ecore_Evas_Active_Dnd *dnd;
+
+ ECORE_EVAS_CHECK_GOTO(ee, err);
+ EINA_SAFETY_ON_NULL_GOTO(ee->active_drags, err);
+ dnd = eina_hash_find(ee->active_drags, &seat);
+ EINA_SAFETY_ON_NULL_GOTO(dnd, err);
+ dnd->pos = pos;
+ dnd->last_motion_was_used = EINA_FALSE;
+ if (ee->func.fn_dnd_motion)
+ ee->func.fn_dnd_motion(ee, seat, pos);
+ return dnd->last_motion_was_used;
+err:
+ return EINA_FALSE;
+}
+
+EAPI void
+ecore_evas_dnd_mark_motion_used(Ecore_Evas *ee, unsigned int seat)
+{
+ Ecore_Evas_Active_Dnd *dnd;
+
+ ECORE_EVAS_CHECK(ee);
+ EINA_SAFETY_ON_NULL_RETURN(ee->active_drags);
+ dnd = eina_hash_find(ee->active_drags, &seat);
+ EINA_SAFETY_ON_NULL_RETURN(dnd);
+ dnd->last_motion_was_used = EINA_TRUE;
+}
+
+EAPI void
+ecore_evas_dnd_leave(Ecore_Evas *ee, unsigned int seat, Eina_Position2D pos)
+{
+ Ecore_Evas_Active_Dnd *dnd;
+
+ ECORE_EVAS_CHECK(ee);
+ EINA_SAFETY_ON_NULL_RETURN(ee->active_drags);
+ dnd = eina_hash_find(ee->active_drags, &seat);
+ EINA_SAFETY_ON_NULL_RETURN(dnd);
+
+ if (ee->func.fn_dnd_state_change)
+ ee->func.fn_dnd_state_change(ee, seat, pos, EINA_FALSE);
+ eina_hash_del(ee->active_drags, &seat, dnd);
+ if (eina_hash_population(ee->active_drags) == 0)
+ {
+ eina_hash_free(ee->active_drags);
+ ee->active_drags = NULL;
+ }
+}
+
+EAPI Eina_Position2D
+ecore_evas_dnd_pos_get(Ecore_Evas *ee, unsigned int seat)
+{
+ Ecore_Evas_Active_Dnd *dnd;
+
+ ECORE_EVAS_CHECK_GOTO(ee, err);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ee->active_drags, EINA_POSITION2D(0, 0));
+ dnd = eina_hash_find(ee->active_drags, &seat);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(dnd, EINA_POSITION2D(0, 0));
+
+ return dnd->pos;
+err:
+ return EINA_POSITION2D(0, 0);
+}
+
+EAPI Eina_Accessor*
+ecore_evas_drop_available_types_get(Ecore_Evas *ee, unsigned int seat)
+{
+ Ecore_Evas_Active_Dnd *dnd;
+
+ ECORE_EVAS_CHECK_GOTO(ee, err);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ee->active_drags, NULL);
+ dnd = eina_hash_find(ee->active_drags, &seat);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(dnd, NULL);
+
+ return eina_array_accessor_new(dnd->available_mime_types);
+err:
+ return NULL;
+}
diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c
index 19422366b6..2f3f2ff72b 100644
--- a/src/lib/ecore_evas/ecore_evas_buffer.c
+++ b/src/lib/ecore_evas/ecore_evas_buffer.c
@@ -20,6 +20,8 @@ _ecore_evas_buffer_free(Ecore_Evas *ee)
{
Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data;
+ ecore_evas_input_event_unregister(ee);
+
if (!bdata) return;
if (bdata->image)
{
@@ -237,7 +239,7 @@ _ecore_evas_buffer_coord_translate(Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
fw = ee->w; fh = ee->h;
ww = ee->w; hh = ee->h;
}
-
+
if ((fx == 0) && (fy == 0) && (fw == ww) && (fh == hh))
{
*x = (ee->w * (*x - xx)) / fw;
@@ -260,12 +262,12 @@ _ecore_evas_buffer_coord_translate(Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
static void
_ecore_evas_buffer_transfer_modifiers_locks(Evas *e, Evas *e2)
{
- const char *mods[] =
+ const char *mods[] =
{ "Shift", "Control", "Alt", "Meta", "Hyper", "Super", NULL };
- const char *locks[] =
+ const char *locks[] =
{ "Scroll_Lock", "Num_Lock", "Caps_Lock", NULL };
int i;
-
+
for (i = 0; mods[i]; i++)
{
if (evas_key_modifier_is_set(evas_key_modifier_get(e), mods[i]))
@@ -530,7 +532,7 @@ _ecore_evas_buffer_alpha_set(Ecore_Evas *ee, int alpha)
else
{
Evas_Engine_Info_Buffer *einfo;
-
+
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
if (einfo)
{
@@ -637,13 +639,13 @@ _ecore_evas_buffer_pointer_warp(const Ecore_Evas *ee, Evas_Coord x, Evas_Coord y
ev->root.y = y;
{
- const char *mods[] =
+ const char *mods[] =
{ "Shift", "Control", "Alt", "Super", NULL };
int modifiers[] =
{ ECORE_EVENT_MODIFIER_SHIFT, ECORE_EVENT_MODIFIER_CTRL, ECORE_EVENT_MODIFIER_ALT,
ECORE_EVENT_MODIFIER_WIN, 0 };
int i;
-
+
for (i = 0; mods[i]; i++)
if (evas_key_modifier_is_set(evas_key_modifier_get(ee->evas), mods[i]))
ev->modifiers |= modifiers[i];
diff --git a/src/lib/ecore_evas/ecore_evas_ews.c b/src/lib/ecore_evas/ecore_evas_ews.c
index 77a33f7094..86e939f765 100644
--- a/src/lib/ecore_evas/ecore_evas_ews.c
+++ b/src/lib/ecore_evas/ecore_evas_ews.c
@@ -644,7 +644,7 @@ static const Ecore_Evas_Engine_Func _ecore_ews_engine_func =
_ecore_evas_ews_transparent_set,
NULL, // profiles_set
NULL, // profile_set
-
+
NULL,
NULL,
NULL,
diff --git a/src/lib/ecore_evas/ecore_evas_extn.h b/src/lib/ecore_evas/ecore_evas_extn.h
index 67d9dffb76..dab82f69d9 100644
--- a/src/lib/ecore_evas/ecore_evas_extn.h
+++ b/src/lib/ecore_evas/ecore_evas_extn.h
@@ -3,7 +3,7 @@
typedef struct _Ecore_Evas_Interface_Extn Ecore_Evas_Interface_Extn;
-struct _Ecore_Evas_Interface_Extn
+struct _Ecore_Evas_Interface_Extn
{
Ecore_Evas_Interface base;
diff --git a/src/lib/ecore_evas/ecore_evas_fallback_selection.c b/src/lib/ecore_evas/ecore_evas_fallback_selection.c
new file mode 100644
index 0000000000..1abdfa29cd
--- /dev/null
+++ b/src/lib/ecore_evas/ecore_evas_fallback_selection.c
@@ -0,0 +1,111 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Ecore.h>
+#include "ecore_private.h"
+#include "Ecore_Evas.h"
+#include "ecore_evas_private.h"
+#include <Efl_Core.h>
+
+typedef struct {
+ Ecore_Evas_Selection_Callbacks callbacks[ECORE_EVAS_SELECTION_BUFFER_LAST];
+ int seat;
+} Ecore_Evas_Fallback_Selection_Data;
+
+static Ecore_Evas_Fallback_Selection_Data data[ECORE_EVAS_SELECTION_BUFFER_LAST];
+
+void
+fallback_selection_shutdown(Ecore_Evas *ee)
+{
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ if (data->callbacks[i].cancel)
+ data->callbacks[i].cancel(ee, data->seat, i);
+ }
+}
+
+Eina_Bool
+fallback_selection_claim(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel)
+{
+ Ecore_Evas_Selection_Callbacks *callbacks = &data->callbacks[selection];
+
+ if (callbacks->cancel)
+ {
+ callbacks->cancel(ee, data->seat, selection);
+ eina_array_free(callbacks->available_types);
+ }
+
+ callbacks->delivery = delivery;
+ callbacks->cancel = cancel;
+ callbacks->available_types = available_types;
+ data->seat = seat;
+
+ if (ee->func.fn_selection_changed)
+ ee->func.fn_selection_changed(ee, seat, selection);
+
+ return EINA_TRUE;
+}
+
+Eina_Bool
+fallback_selection_has_owner(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection EINA_UNUSED)
+{
+ return EINA_FALSE; //if the real selection buffer does not contain it, then we dont know it either.
+}
+
+Eina_Stringshare*
+available_types(Eina_Array *acceptable_types, Eina_Array *available_types)
+{
+ Eina_Stringshare *found_type = NULL;
+ Eina_Stringshare *type;
+
+ for (unsigned int i = 0; i < eina_array_count_get(available_types); ++i)
+ {
+ unsigned int out = -1;
+ type = eina_array_data_get(available_types, i);
+
+ if (!found_type && eina_array_find(acceptable_types, type, &out))
+ {
+ found_type = eina_stringshare_ref(type);
+ }
+ eina_stringshare_del(type);
+ }
+ eina_array_free(acceptable_types);
+
+ return found_type;
+}
+
+Eina_Future*
+fallback_selection_request(Ecore_Evas *ee EINA_UNUSED, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *acceptable_type)
+{
+ Ecore_Evas_Selection_Callbacks callbacks = data->callbacks[selection];
+ Eina_Content *result;
+ Eina_Stringshare *serving_type;
+ Eina_Rw_Slice slice_data;
+ Eina_Value value;
+
+ if (!callbacks.delivery)
+ return eina_future_resolved(efl_loop_future_scheduler_get(efl_main_loop_get()), eina_value_int_init(0));
+
+ serving_type = available_types(acceptable_type, callbacks.available_types);
+ if (!serving_type)
+ return NULL; //Silent return cause we cannot deliver a good type
+
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(callbacks.delivery(ee, seat, selection, serving_type, &slice_data), NULL);
+ result = eina_content_new(eina_rw_slice_slice_get(slice_data), serving_type);
+ value = eina_value_content_init(result);
+ eina_content_free(result);
+
+ return eina_future_resolved(efl_loop_future_scheduler_get(efl_main_loop_get()), value);
+}
+Eina_Bool
+fallback_dnd_start(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Eina_Array *available_types EINA_UNUSED, Ecore_Evas *drag_rep EINA_UNUSED, Ecore_Evas_Selection_Internal_Delivery delivery EINA_UNUSED, Ecore_Evas_Selection_Internal_Cancel cancel EINA_UNUSED, const char* action EINA_UNUSED)
+{
+ return EINA_FALSE;
+}
+
+Eina_Bool
+fallback_dnd_stop(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED)
+{
+ return EINA_FALSE;
+}
diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h
index 474b7a35ed..20c176f050 100644
--- a/src/lib/ecore_evas/ecore_evas_private.h
+++ b/src/lib/ecore_evas/ecore_evas_private.h
@@ -33,6 +33,10 @@
EAPI extern int _ecore_evas_log_dom;
+EAPI extern Eina_Error ecore_evas_no_matching_type;
+EAPI extern Eina_Error ecore_evas_no_selection;
+EAPI extern Eina_Error ecore_evas_request_replaced;
+
#ifdef ECORE_EVAS_DEFAULT_LOG_COLOR
# undef ECORE_EVAS_DEFAULT_LOG_COLOR
#endif
@@ -78,6 +82,15 @@ typedef struct _Ecore_Evas_Interface Ecore_Evas_Interface;
typedef struct _Ecore_Evas_Aux_Hint Ecore_Evas_Aux_Hint;
typedef struct _Ecore_Evas_Cursor Ecore_Evas_Cursor;
+typedef Eina_Bool (*Ecore_Evas_Selection_Internal_Delivery)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, const char *type, Eina_Rw_Slice *slice);
+typedef void (*Ecore_Evas_Selection_Internal_Cancel)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer);
+typedef struct
+{
+ Ecore_Evas_Selection_Internal_Delivery delivery;
+ Ecore_Evas_Selection_Internal_Cancel cancel;
+ Eina_Array *available_types;
+} Ecore_Evas_Selection_Callbacks;
+
/* Engines interfaces */
struct _Ecore_Evas_Engine_Func
{
@@ -171,6 +184,12 @@ struct _Ecore_Evas_Engine_Func
Eina_Bool (*fn_prepare)(Ecore_Evas *ee);
double (*fn_last_tick_get)(Ecore_Evas *ee);
+
+ Eina_Bool (*fn_selection_claim)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel);
+ Eina_Bool (*fn_selection_has_owner)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection);
+ Eina_Future* (*fn_selection_request)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *acceptable_types); // a future containing a Eina_Content, type must be in acceptable_types
+ Eina_Bool (*fn_dnd_start)(Ecore_Evas *ee, unsigned int seat, Eina_Array *available_types, Ecore_Evas *drag_rep, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel, const char *action);
+ Eina_Bool (*fn_dnd_stop)(Ecore_Evas *ee, unsigned int seat);
};
struct _Ecore_Evas_Interface
@@ -186,22 +205,31 @@ struct _Ecore_Evas_Engine
Eina_List *ifaces;
Ecore_Timer *idle_flush_timer;
#ifdef BUILD_ECORE_EVAS_EWS
- struct {
- Evas_Object *image;
- } ews;
+ struct
+ {
+ Evas_Object *image;
+ } ews;
#endif
};
-struct _Ecore_Evas_Cursor {
+struct _Ecore_Evas_Cursor
+{
Evas_Object *object;
- int layer;
- struct {
- int x, y;
- } hot;
+ int layer;
+ struct
+ {
+ int x, y;
+ } hot;
int pos_x;
int pos_y;
};
+typedef struct
+{
+ unsigned int seat;
+ Eina_Content *selection_buffer[ECORE_EVAS_SELECTION_BUFFER_LAST];
+} Ecore_Evas_Selection_Seat_Buffers;
+
struct _Ecore_Evas
{
EINA_INLIST;
@@ -224,106 +252,123 @@ struct _Ecore_Evas
Eina_List *vnc_server; /* @since 1.19 */
- struct {
- int x, y, w, h;
- } req;
-
- struct {
- int l, r, t, b;
- int changed : 1;
- } shadow;
-
- struct {
- int w, h;
- } expecting_resize;
-
- struct {
- int w, h;
- } framespace;
-
- struct {
- Eina_Hash *cursors;
- char *title;
- char *name;
- char *clas;
- struct {
- char *name;
- char **available_list;
- int count;
- } profile;
- struct {
- int w, h;
- } min, max, base, step;
- Ecore_Evas_Cursor cursor_cache;
- struct {
- Eina_Bool supported; // indicate that the underlying window system supports window manager rotation protocol
- Eina_Bool app_set; // indicate that the ee supports window manager rotation protocol
- Eina_Bool win_resize; // indicate that the ee will be resized by the WM
- int angle; // rotation value which is decided by the WM
- int w, h; // window size to rotate
- int preferred_rot; // preferred rotation hint
- int *available_rots; // array of avaialable rotation values
- unsigned int count; // number of elements of available_rots
- struct {
- Eina_Bool set;
- Eina_Bool wait_for_done;
- Ecore_Timer *timer;
- } manual_mode;
- } wm_rot;
- struct {
- Eina_List *supported_list;
- Eina_List *hints;
- int id;
- } aux_hint;
- Eina_List *focused_by;
- int layer;
- Ecore_Window window;
- unsigned char avoid_damage;
- Ecore_Evas *group_ee;
- Ecore_Window group_ee_win;
- double aspect;
- Eina_Bool iconified : 1;
- Eina_Bool borderless : 1;
- Eina_Bool override : 1;
- Eina_Bool maximized : 1;
- Eina_Bool fullscreen : 1;
- Eina_Bool withdrawn : 1;
- Eina_Bool sticky : 1;
- Eina_Bool request_pos : 1;
- Eina_Bool hwsurface : 1;
- Eina_Bool urgent : 1;
- Eina_Bool modal : 1;
- Eina_Bool demand_attention : 1;
- Eina_Bool focus_skip : 1;
- Eina_Bool focused : 1;
- } prop;
-
- struct {
- void (*fn_resize) (Ecore_Evas *ee);
- void (*fn_move) (Ecore_Evas *ee);
- void (*fn_show) (Ecore_Evas *ee);
- void (*fn_hide) (Ecore_Evas *ee);
- void (*fn_delete_request) (Ecore_Evas *ee);
- void (*fn_destroy) (Ecore_Evas *ee);
- void (*fn_focus_in) (Ecore_Evas *ee);
- void (*fn_focus_out) (Ecore_Evas *ee);
- void (*fn_sticky) (Ecore_Evas *ee);
- void (*fn_unsticky) (Ecore_Evas *ee);
- void (*fn_mouse_in) (Ecore_Evas *ee);
- void (*fn_mouse_out) (Ecore_Evas *ee);
- void (*fn_pre_render) (Ecore_Evas *ee);
- void (*fn_post_render) (Ecore_Evas *ee);
- void (*fn_pre_free) (Ecore_Evas *ee);
- void (*fn_state_change) (Ecore_Evas *ee);
- void (*fn_msg_parent_handle) (Ecore_Evas *ee, int maj, int min, void *data, int size);
- void (*fn_msg_handle) (Ecore_Evas *ee, int maj, int min, void *data, int size);
- void (*fn_pointer_xy_get) (const Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y);
- Eina_Bool (*fn_pointer_warp) (const Ecore_Evas *ee, Evas_Coord x, Evas_Coord y);
- void (*fn_focus_device_in) (Ecore_Evas *ee, Efl_Input_Device *seat);
- void (*fn_focus_device_out) (Ecore_Evas *ee, Efl_Input_Device *seat);
- void (*fn_device_mouse_in) (Ecore_Evas *ee, Efl_Input_Device *mouse);
- void (*fn_device_mouse_out) (Ecore_Evas *ee, Efl_Input_Device *mouse);
- } func;
+ Eina_Hash *selection_buffers;
+
+ struct
+ {
+ int x, y, w, h;
+ } req;
+
+ struct
+ {
+ int l, r, t, b;
+ int changed : 1;
+ } shadow;
+
+ struct
+ {
+ int w, h;
+ } expecting_resize;
+
+ struct
+ {
+ int w, h;
+ } framespace;
+
+ struct
+ {
+ Eina_Hash *cursors;
+ char *title;
+ char *name;
+ char *clas;
+ struct
+ {
+ char *name;
+ char **available_list;
+ int count;
+ } profile;
+ struct
+ {
+ int w, h;
+ } min, max, base, step;
+ Ecore_Evas_Cursor cursor_cache;
+ struct
+ {
+ Eina_Bool supported; // indicate that the underlying window system supports window manager rotation protocol
+ Eina_Bool app_set; // indicate that the ee supports window manager rotation protocol
+ Eina_Bool win_resize; // indicate that the ee will be resized by the WM
+ int angle; // rotation value which is decided by the WM
+ int w, h; // window size to rotate
+ int preferred_rot; // preferred rotation hint
+ int *available_rots; // array of avaialable rotation values
+ unsigned int count; // number of elements of available_rots
+ struct
+ {
+ Eina_Bool set;
+ Eina_Bool wait_for_done;
+ Ecore_Timer *timer;
+ } manual_mode;
+ } wm_rot;
+ struct
+ {
+ Eina_List *supported_list;
+ Eina_List *hints;
+ int id;
+ } aux_hint;
+ Eina_List *focused_by;
+ int layer;
+ Ecore_Window window;
+ unsigned char avoid_damage;
+ Ecore_Evas *group_ee;
+ Ecore_Window group_ee_win;
+ double aspect;
+ Eina_Bool iconified : 1;
+ Eina_Bool borderless : 1;
+ Eina_Bool override : 1;
+ Eina_Bool maximized : 1;
+ Eina_Bool fullscreen : 1;
+ Eina_Bool withdrawn : 1;
+ Eina_Bool sticky : 1;
+ Eina_Bool request_pos : 1;
+ Eina_Bool hwsurface : 1;
+ Eina_Bool urgent : 1;
+ Eina_Bool modal : 1;
+ Eina_Bool demand_attention : 1;
+ Eina_Bool focus_skip : 1;
+ Eina_Bool focused : 1;
+ } prop;
+
+ struct
+ {
+ void (*fn_resize) (Ecore_Evas *ee);
+ void (*fn_move) (Ecore_Evas *ee);
+ void (*fn_show) (Ecore_Evas *ee);
+ void (*fn_hide) (Ecore_Evas *ee);
+ void (*fn_delete_request) (Ecore_Evas *ee);
+ void (*fn_destroy) (Ecore_Evas *ee);
+ void (*fn_focus_in) (Ecore_Evas *ee);
+ void (*fn_focus_out) (Ecore_Evas *ee);
+ void (*fn_sticky) (Ecore_Evas *ee);
+ void (*fn_unsticky) (Ecore_Evas *ee);
+ void (*fn_mouse_in) (Ecore_Evas *ee);
+ void (*fn_mouse_out) (Ecore_Evas *ee);
+ void (*fn_pre_render) (Ecore_Evas *ee);
+ void (*fn_post_render) (Ecore_Evas *ee);
+ void (*fn_pre_free) (Ecore_Evas *ee);
+ void (*fn_state_change) (Ecore_Evas *ee);
+ void (*fn_msg_parent_handle) (Ecore_Evas *ee, int maj, int min, void *data, int size);
+ void (*fn_msg_handle) (Ecore_Evas *ee, int maj, int min, void *data, int size);
+ void (*fn_pointer_xy_get) (const Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y);
+ Eina_Bool (*fn_pointer_warp) (const Ecore_Evas *ee, Evas_Coord x, Evas_Coord y);
+ void (*fn_focus_device_in) (Ecore_Evas *ee, Efl_Input_Device *seat);
+ void (*fn_focus_device_out) (Ecore_Evas *ee, Efl_Input_Device *seat);
+ void (*fn_device_mouse_in) (Ecore_Evas *ee, Efl_Input_Device *mouse);
+ void (*fn_device_mouse_out) (Ecore_Evas *ee, Efl_Input_Device *mouse);
+ void (*fn_selection_changed) (Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection);
+ void (*fn_dnd_motion) (Ecore_Evas *ee, unsigned int seat, Eina_Position2D p);
+ void (*fn_dnd_state_change) (Ecore_Evas *ee, unsigned int seat, Eina_Position2D p, Eina_Bool inside);
+ void (*fn_dnd_drop)(Ecore_Evas *ee, unsigned int seat, Eina_Position2D p, const char *action);
+ } func;
Ecore_Evas_Engine engine;
Eina_List *sub_ecore_evas;
@@ -332,26 +377,37 @@ struct _Ecore_Evas
Ecore_Animator *anim;
unsigned int animator_count;
- struct {
- Eina_Inlist *active;
- Eina_Inlist *deleted;
- Eina_Inlist *suspended;
- Eina_Inlist *run_list;
- } ee_anim;
-
- struct {
- unsigned char avoid_damage;
- unsigned char resize_shape : 1;
- unsigned char shaped : 1;
- unsigned char shaped_changed : 1;
- unsigned char alpha : 1;
- unsigned char alpha_changed : 1;
- unsigned char transparent : 1;
- unsigned char transparent_changed : 1;
- int rotation;
- int rotation_resize;
- unsigned char rotation_changed : 1;
- } delayed;
+ struct
+ {
+ Eina_Inlist *active;
+ Eina_Inlist *deleted;
+ Eina_Inlist *suspended;
+ Eina_Inlist *run_list;
+ } ee_anim;
+
+ struct
+ {
+ unsigned char avoid_damage;
+ unsigned char resize_shape : 1;
+ unsigned char shaped : 1;
+ unsigned char shaped_changed : 1;
+ unsigned char alpha : 1;
+ unsigned char alpha_changed : 1;
+ unsigned char transparent : 1;
+ unsigned char transparent_changed : 1;
+ int rotation;
+ int rotation_resize;
+ unsigned char rotation_changed : 1;
+ } delayed;
+
+ Eina_Hash *active_drags;
+ struct
+ {
+ Ecore_Evas *rep;
+ void *data;
+ Ecore_Evas_Drag_Finished_Cb free;
+ Eina_Bool accepted;
+ } drag;
int refcount;
//#define ECORE_EVAS_ASYNC_RENDER_DEBUG 1 /* TODO: remove me */
@@ -374,6 +430,7 @@ struct _Ecore_Evas
unsigned char first_frame : 1;
unsigned char self_del : 1;
unsigned char evas_dying : 1;
+ unsigned char fallback_interface : 1;
};
struct _Ecore_Evas_Aux_Hint
@@ -401,31 +458,31 @@ EAPI void _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned
EAPI void _ecore_evas_mouse_device_move_process(Ecore_Evas *ee, Efl_Input_Device *pointer,
int x, int y, unsigned int timestamp);
EAPI void _ecore_evas_mouse_multi_move_process(Ecore_Evas *ee, int device,
- int x, int y,
- double radius,
- double radius_x, double radius_y,
- double pressure,
- double angle,
- double mx, double my,
- unsigned int timestamp);
+ int x, int y,
+ double radius,
+ double radius_x, double radius_y,
+ double pressure,
+ double angle,
+ double mx, double my,
+ unsigned int timestamp);
EAPI void _ecore_evas_mouse_multi_down_process(Ecore_Evas *ee, int device,
- int x, int y,
- double radius,
- double radius_x, double radius_y,
- double pressure,
- double angle,
- double mx, double my,
- Evas_Button_Flags flags,
- unsigned int timestamp);
+ int x, int y,
+ double radius,
+ double radius_x, double radius_y,
+ double pressure,
+ double angle,
+ double mx, double my,
+ Evas_Button_Flags flags,
+ unsigned int timestamp);
EAPI void _ecore_evas_mouse_multi_up_process(Ecore_Evas *ee, int device,
- int x, int y,
- double radius,
- double radius_x, double radius_y,
- double pressure,
- double angle,
- double mx, double my,
- Evas_Button_Flags flags,
- unsigned int timestamp);
+ int x, int y,
+ double radius,
+ double radius_x, double radius_y,
+ double pressure,
+ double angle,
+ double mx, double my,
+ Evas_Button_Flags flags,
+ unsigned int timestamp);
EAPI Eina_Bool _ecore_evas_input_direct_cb(void *window, int type, const void *info);
EAPI extern Eina_Bool _ecore_evas_app_comp_sync;
@@ -485,6 +542,20 @@ EAPI Eina_Bool ecore_evas_render(Ecore_Evas *ee);
EAPI Evas *ecore_evas_evas_new(Ecore_Evas *ee, int w, int h);
EAPI void ecore_evas_done(Ecore_Evas *ee, Eina_Bool single_window);
+EAPI void ecore_evas_dnd_mark_motion_used(Ecore_Evas *ee, unsigned int seat);
+EAPI Eina_Bool ecore_evas_dnd_position_set(Ecore_Evas *ee, unsigned int seat, Eina_Position2D pos);
+EAPI void ecore_evas_dnd_leave(Ecore_Evas *ee, unsigned int seat, Eina_Position2D pos);
+EAPI void ecore_evas_dnd_enter(Ecore_Evas *ee, unsigned int seat, Eina_Iterator *available_types, Eina_Position2D pos);
+EAPI Eina_Position2D ecore_evas_dnd_pos_get(Ecore_Evas *ee, unsigned int seat);
+
+
+void fallback_selection_init(Ecore_Evas *ee);
+void fallback_selection_shutdown(Ecore_Evas *ee);
+Eina_Bool fallback_selection_claim(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel);
+Eina_Bool fallback_selection_has_owner(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection);
+Eina_Future* fallback_selection_request(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *acceptable_type);
+Eina_Bool fallback_dnd_start(Ecore_Evas *ee, unsigned int seat, Eina_Array *available_types, Ecore_Evas *drag_rep, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel, const char* action);
+Eina_Bool fallback_dnd_stop(Ecore_Evas *ee, unsigned int seat);
#ifdef IPA_YLNO_ESU_LANRETNI_MLE
EAPI Ecore_Evas *_wayland_shm_new(const char *disp_name, Ecore_Window parent, int x, int y, int w, int h, Eina_Bool frame);
diff --git a/src/lib/ecore_evas/ecore_evas_util.c b/src/lib/ecore_evas/ecore_evas_util.c
index 7b07fdc699..43558ec767 100644
--- a/src/lib/ecore_evas/ecore_evas_util.c
+++ b/src/lib/ecore_evas/ecore_evas_util.c
@@ -86,13 +86,13 @@ _ecore_evas_object_intercept_lower(void *data, Evas_Object *obj EINA_UNUSED)
static void
_ecore_evas_object_intercept_stack_above(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Evas_Object *above EINA_UNUSED)
{
- INF("TODO: %s", __FUNCTION__);
+ INF("TODO: %s", __func__);
}
static void
_ecore_evas_object_intercept_stack_below(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Evas_Object *below EINA_UNUSED)
{
- INF("TODO: %s", __FUNCTION__);
+ INF("TODO: %s", __func__);
}
static void
@@ -227,12 +227,12 @@ ecore_evas_object_associate(Ecore_Evas *ee, Evas_Object *obj, Ecore_Evas_Object_
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
{
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __FUNCTION__);
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __func__);
return EINA_FALSE;
}
CHECK_PARAM_POINTER_RETURN("obj", obj, EINA_FALSE);
- if (!_ecore_evas_object_evas_check(__FUNCTION__, ee, obj))
+ if (!_ecore_evas_object_evas_check(__func__, ee, obj))
return EINA_FALSE;
old_ee = _evas_object_associate_get(obj);
@@ -255,7 +255,7 @@ ecore_evas_object_dissociate(Ecore_Evas *ee, Evas_Object *obj)
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
{
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __FUNCTION__);
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __func__);
return EINA_FALSE;
}
@@ -284,7 +284,7 @@ ecore_evas_object_associate_get(const Ecore_Evas *ee)
{
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
{
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __FUNCTION__);
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __func__);
return NULL;
}
return _ecore_evas_associate_get(ee);
@@ -380,7 +380,7 @@ _ecore_evas_object_dissociate(Ecore_Evas *ee, Evas_Object *obj)
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
{
- ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __FUNCTION__);
+ ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, __func__);
}
else
{
diff --git a/src/lib/ecore_evas/ecore_evas_wayland.h b/src/lib/ecore_evas/ecore_evas_wayland.h
index 2d6faa2ea8..b36d93cff0 100644
--- a/src/lib/ecore_evas/ecore_evas_wayland.h
+++ b/src/lib/ecore_evas/ecore_evas_wayland.h
@@ -3,7 +3,7 @@
typedef struct _Ecore_Evas_Interface_Wayland Ecore_Evas_Interface_Wayland;
-struct _Ecore_Evas_Interface_Wayland
+struct _Ecore_Evas_Interface_Wayland
{
Ecore_Evas_Interface base;
diff --git a/src/lib/ecore_evas/meson.build b/src/lib/ecore_evas/meson.build
index c0fb459a56..2ce2b0fcd2 100644
--- a/src/lib/ecore_evas/meson.build
+++ b/src/lib/ecore_evas/meson.build
@@ -1,5 +1,6 @@
-ecore_evas_deps = [eina, ecore_input_evas, ecore_input, ecore, eet, evas, efl, eo, eina, emile]
+ecore_evas_deps = [eina, ecore_input_evas, ecore_input, ecore, eet, evas, efl, eo, eina, emile, buildsystem]
ecore_evas_pub_deps = [evas, ecore]
+ecore_evas_ext_deps = [buildsystem_simple]
pub_eo_file_target = []
ecore_evas_header_src = [
@@ -8,7 +9,7 @@ ecore_evas_header_src = [
]
-ecore_evas_src = [
+ecore_evas_src = files([
'ecore_evas.c',
'ecore_evas_buffer.c',
'ecore_evas_buffer.h',
@@ -23,20 +24,26 @@ ecore_evas_src = [
'ecore_evas_cocoa.h',
'ecore_evas_win32.h',
'ecore_evas_x11.h',
- 'ecore_evas_util.c'
-]
+ 'ecore_evas_util.c',
+ 'ecore_evas_fallback_selection.c'
+])
+
+ecore_evas_ext_deps += declare_dependency(
+ include_directories: include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer')),
+)
ecore_evas_lib = library('ecore_evas',
ecore_evas_src, pub_eo_file_target,
- dependencies: [ecore_evas_deps, buildsystem],
+ c_args : package_c_args,
+ dependencies: ecore_evas_deps + ecore_evas_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
)
ecore_evas = declare_dependency(
- include_directories: [include_directories('.')],
+ include_directories: [include_directories('.'), include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer'))],
link_with: ecore_evas_lib,
sources : pub_eo_file_target + priv_eo_file_target,
dependencies: [evas],
@@ -45,3 +52,6 @@ ecore_evas = declare_dependency(
install_headers(ecore_evas_header_src,
install_dir : dir_package_include,
)
+
+#a custom directory that must be added to efl_one
+efl_one_include_dirs += [include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer'))]
diff --git a/src/lib/ecore_fb/ecore_fb.c b/src/lib/ecore_fb/ecore_fb.c
index 0d90242d0b..c3f1014129 100644
--- a/src/lib/ecore_fb/ecore_fb.c
+++ b/src/lib/ecore_fb/ecore_fb.c
@@ -57,7 +57,7 @@ ecore_fb_init(const char *name)
{
oldhand = signal(SIGINT, nosigint);
}
-
+
_ecore_fb_size_get(name, &_ecore_fb_console_w, &_ecore_fb_console_h);
return _ecore_fb_init_count;
diff --git a/src/lib/ecore_fb/ecore_fb_li.c b/src/lib/ecore_fb/ecore_fb_li.c
index 9e8025df77..bc253522b7 100644
--- a/src/lib/ecore_fb/ecore_fb_li.c
+++ b/src/lib/ecore_fb/ecore_fb_li.c
@@ -47,7 +47,7 @@ _ecore_fb_li_device_event_key(Ecore_Fb_Input_Device *dev, struct input_event *ie
{
int offset = 0;
const char *keyname = _ecore_fb_li_kbd_syms[iev->code * 7];
-
+
/* check the key table */
if (iev->value)
{
@@ -102,11 +102,11 @@ _ecore_fb_li_device_event_key(Ecore_Fb_Input_Device *dev, struct input_event *ie
const char *key = _ecore_fb_li_kbd_syms[(iev->code * 7) + offset];
const char *compose = _ecore_fb_li_kbd_syms[(iev->code * 7) + 3 + offset];
-
+
if (dev->keyboard.ctrl)
{
const char *ts = _ecore_fb_li_kbd_syms[(iev->code * 7) + 3 + 3];
-
+
if (ts) compose = ts;
}
diff --git a/src/lib/ecore_fb/ecore_fb_private.h b/src/lib/ecore_fb/ecore_fb_private.h
index e48c7b09f8..b9bdd6d70a 100644
--- a/src/lib/ecore_fb/ecore_fb_private.h
+++ b/src/lib/ecore_fb/ecore_fb_private.h
@@ -18,7 +18,7 @@
#include <linux/vt.h>
#include <linux/fb.h>
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
- #define kernel_ulong_t unsigned long
+ #define kernel_ulong_t unsigned long
#define BITS_PER_LONG 32
#include <linux/input.h>
#undef kernel_ulong_t
@@ -53,7 +53,7 @@ struct _Ecore_Fb_Input_Device
int fd;
Ecore_Fd_Handler *handler;
int listen;
- struct
+ struct
{
Ecore_Fb_Input_Device_Cap cap;
char *name;
@@ -105,7 +105,7 @@ void ecore_fb_vt_shutdown(void);
#ifndef TS_GET_CAL
#define TS_GET_CAL 0x8014660a
#endif
-
+
#undef EAPI
#define EAPI
diff --git a/src/lib/ecore_fb/meson.build b/src/lib/ecore_fb/meson.build
index a2eb5400c6..6d50e0f146 100644
--- a/src/lib/ecore_fb/meson.build
+++ b/src/lib/ecore_fb/meson.build
@@ -1,25 +1,27 @@
ecore_fb_deps = [ecore, ecore_input]
ecore_fb_pub_deps = [eina]
+ecore_fb_ext_deps = []
if get_option('tslib')
- ecore_fb_deps += dependency('tslib')
+ ecore_fb_ext_deps += dependency('tslib')
endif
ecore_fb_header_src = [
'Ecore_Fb.h'
]
-ecore_fb_src = [
+ecore_fb_src = files([
'ecore_fb.c',
'ecore_fb_li.c',
'ecore_fb_ts.c',
'ecore_fb_vt.c',
'ecore_fb_keytable.h',
'ecore_fb_private.h'
-]
+])
ecore_fb_lib = library('ecore_fb',
ecore_fb_src, pub_eo_file_target,
+ c_args : package_c_args,
dependencies: ecore_fb_pub_deps + ecore_fb_deps,
include_directories : config_dir,
install: true,
@@ -30,7 +32,7 @@ ecore_fb = declare_dependency(
include_directories: [include_directories('.')],
link_with: ecore_fb_lib,
sources : pub_eo_file_target + priv_eo_file_target,
- dependencies: ecore_fb_pub_deps,
+ dependencies: ecore_fb_pub_deps + ecore_fb_ext_deps,
)
install_headers(ecore_fb_header_src,
diff --git a/src/lib/ecore_file/Ecore_File.h b/src/lib/ecore_file/Ecore_File.h
index 37f3bd8a0c..8c17daa58a 100644
--- a/src/lib/ecore_file/Ecore_File.h
+++ b/src/lib/ecore_file/Ecore_File.h
@@ -92,7 +92,7 @@ typedef void (*Ecore_File_Download_Completion_Cb)(void *data, const char *file,
/**
* @typedef _Ecore_File_Progress_Return
- * What to do with the download as a return from the
+ * What to do with the download as a return from the
* Ecore_File_Download_Progress_Cb function, if provided.
*/
typedef enum _Ecore_File_Progress_Return
@@ -518,7 +518,7 @@ EAPI int ecore_file_dir_is_empty (const char *dir);
* This function monitors @p path. If @p path is @c NULL, or is an
* empty string, or none of the notify methods (Inotify, Windows
* notification or polling) is available, or if @p path does not exist
- * the function returns @c NULL. Otherwise, it returns a newly
+ * the function returns @c NULL. Otherwise, it returns a newly
* allocated Ecore_File_Monitor object and the monitoring begins.
* When one of the Ecore_File_Event event is notified, @p func is called
* and @p data is passed to @p func.Call ecore_file_monitor_del() to
diff --git a/src/lib/ecore_file/ecore_file.c b/src/lib/ecore_file/ecore_file.c
index ab8b07f1ce..66bdfe542e 100644
--- a/src/lib/ecore_file/ecore_file.c
+++ b/src/lib/ecore_file/ecore_file.c
@@ -514,11 +514,11 @@ ecore_file_mv(const char *src, const char *dst)
}
}
#ifdef _WIN32
- if (errno == EEXIST)
- {
- struct _stat s;
- _stat(dst, &s);
- if (_S_IFREG & s.st_mode)
+ if (errno == ENOENT)
+ {
+ struct _stat s;
+ _stat(dst, &s);
+ if (_S_IFREG & s.st_mode)
{
ecore_file_unlink(dst);
if (rename(src, dst))
@@ -526,7 +526,7 @@ ecore_file_mv(const char *src, const char *dst)
return EINA_TRUE;
}
}
- }
+ }
#endif
goto FAIL;
}
@@ -622,8 +622,94 @@ ecore_file_can_write(const char *file)
EAPI Eina_Bool
ecore_file_can_exec(const char *file)
{
- if (!file) return EINA_FALSE;
+#ifdef _WIN32
+ HANDLE h;
+ HANDLE fm;
+ char *base;
+ char *base_nt;
+ LARGE_INTEGER sz;
+ WORD characteristics;
+#endif
+
+ if (!file || !*file) return EINA_FALSE;
+
+#ifdef _WIN32
+ /*
+ * we parse the file to check if it is a PE file (EXE or DLL)
+ * and we finally check whether it's a DLL or not.
+ * Reference :
+ * https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
+ */
+ h = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (h == INVALID_HANDLE_VALUE)
+ goto test_bat;
+
+ if (!GetFileSizeEx(h, &sz))
+ goto close_h;
+
+ /* a PE file must have at least the DOS and NT headers */
+ if (sz.QuadPart < (LONGLONG)(sizeof(IMAGE_DOS_HEADER) + sizeof(IMAGE_NT_HEADERS)))
+ goto close_h;
+
+ fm = CreateFileMapping(h, NULL, PAGE_READONLY, 0, 0, NULL);
+ if (fm == NULL)
+ goto close_h;
+
+ base = (char *)MapViewOfFile(fm, FILE_MAP_READ, 0, 0, 0);
+ CloseHandle(fm);
+ if (base == NULL)
+ goto close_h;
+
+ /*
+ * the PE file begins with the DOS header.
+ * First magic number : the DOS header must begin with a DOS magic number,
+ * that is "MZ", that is 0x5a4d, stored in a WORD.
+ */
+ if (*((WORD *)base) != 0x5a4d)
+ goto unmap_view;
+
+ /*
+ * The position of the NT header is located at the offset 0x3c.
+ */
+ base_nt = base + *((DWORD *)(base + 0x3c));
+ /*
+ * The NT header begins with the magic number "PE\0\0", that is
+ * 0x00004550, stored in a DWORD.
+ */
+ if (*((DWORD *)base_nt) != 0x00004550)
+ goto unmap_view;
+
+ /*
+ * to get informations about executable (EXE or DLL), we look at
+ * the 'Characteristics' member of the NT header, located at the offset
+ * 22 (4 for the magic number, 18 for the offset) from base_nt.
+ * https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#characteristics
+ */
+ characteristics = *((WORD *)(base_nt + 4 + 18));
+
+ UnmapViewOfFile(base);
+ CloseHandle(h);
+
+ /*
+ * 0x0002 : if set, EXE or DLL
+ * 0x2000 : if set, DLL
+ */
+ if ((characteristics & 0x0002) && !(characteristics & 0x2000))
+ return EINA_TRUE;
+ unmap_view:
+ UnmapViewOfFile(base);
+ close_h:
+ CloseHandle(h);
+ test_bat:
+ /*
+ * a .bat file, considered as an executable, is only a text file,
+ * so we rely on the extension. Not the best but we cannot do more.
+ */
+ return eina_str_has_extension(file, ".bat");
+#else
if (!access(file, X_OK)) return EINA_TRUE;
+#endif
return EINA_FALSE;
}
diff --git a/src/lib/ecore_file/ecore_file_download.c b/src/lib/ecore_file/ecore_file_download.c
index 4b65c51ee6..e212ea0fbf 100644
--- a/src/lib/ecore_file/ecore_file_download.c
+++ b/src/lib/ecore_file/ecore_file_download.c
@@ -305,7 +305,7 @@ ecore_file_download_abort(Ecore_File_Download_Job *job)
return;
if (!ECORE_MAGIC_CHECK(job, ECORE_MAGIC_FILE_DOWNLOAD_JOB))
{
- ECORE_MAGIC_FAIL(job, ECORE_MAGIC_FILE_DOWNLOAD_JOB, __FUNCTION__);
+ ECORE_MAGIC_FAIL(job, ECORE_MAGIC_FILE_DOWNLOAD_JOB, __func__);
return;
}
diff --git a/src/lib/ecore_file/ecore_file_monitor_kevent.c b/src/lib/ecore_file/ecore_file_monitor_kevent.c
new file mode 100644
index 0000000000..e8c4c1e238
--- /dev/null
+++ b/src/lib/ecore_file/ecore_file_monitor_kevent.c
@@ -0,0 +1,290 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "ecore_file_private.h"
+
+#define KEVENT_NUM_EVENTS 5
+
+typedef struct _Ecore_File_Monitor_Kevent Ecore_File_Monitor_Kevent;
+
+#define ECORE_FILE_MONITOR_KEVENT(x) ((Ecore_File_Monitor_Kevent *)(x))
+
+struct _Ecore_File_Monitor_Kevent
+{
+ Ecore_File_Monitor monitor;
+ Eina_List *prev;
+ int fd;
+};
+
+typedef struct _File_Info File_Info;
+struct _File_Info
+{
+ const char *path;
+ Eina_Stat st;
+};
+
+static Ecore_Fd_Handler *_kevent_fdh = NULL;
+static Eina_Hash *_kevent_monitors = NULL;
+
+static Eina_Bool _ecore_file_monitor_kevent_handler(void *data, Ecore_Fd_Handler *fdh);
+static int _ecore_file_monitor_kevent_monitor(Ecore_File_Monitor *em, const char *path);
+static void _ecore_file_monitor_kevent_find(Ecore_File_Monitor *em);
+static void _ecore_file_monitor_kevent_hash_del_cb(void *data);
+static Eina_List * _ecore_file_monitor_kevent_ls(const char *directory);
+static void _ecore_file_monitor_kevent_ls_free(Eina_List *);
+
+int
+ecore_file_monitor_backend_init(void)
+{
+ int fd;
+
+ if (_kevent_fdh != NULL) return 0;
+
+ fd = kqueue();
+ if (fd < 0)
+ return 0;
+
+ _kevent_fdh = ecore_main_fd_handler_add(fd, ECORE_FD_READ, _ecore_file_monitor_kevent_handler,
+ NULL, NULL, NULL);
+ if (!_kevent_fdh)
+ {
+ close(fd);
+ return 0;
+ }
+
+ _kevent_monitors = eina_hash_int32_new(_ecore_file_monitor_kevent_hash_del_cb);
+ return 1;
+}
+
+int
+ecore_file_monitor_backend_shutdown(void)
+{
+ int fd;
+
+ if (!_kevent_fdh) return 1;
+
+ eina_hash_free(_kevent_monitors);
+
+ fd = ecore_main_fd_handler_fd_get(_kevent_fdh);
+ ecore_main_fd_handler_del(_kevent_fdh);
+ _kevent_fdh = NULL;
+
+ if (fd != -1)
+ close(fd);
+
+ return 1;
+}
+
+Ecore_File_Monitor *
+ecore_file_monitor_backend_add(const char *path,
+ void (*func) (void *data, Ecore_File_Monitor *em,
+ Ecore_File_Event event,
+ const char *path),
+ void *data)
+{
+ Ecore_File_Monitor *em;
+ char *path2;
+ size_t len;
+
+ if (!path) return NULL;
+ if (!func) return NULL;
+
+ em = (Ecore_File_Monitor *)calloc(1, sizeof(Ecore_File_Monitor_Kevent));
+ if (!em) return NULL;
+
+ em->func = func;
+ em->data = data;
+
+ len = strlen(path);
+ path2 = alloca(len + 1);
+ strcpy(path2, path);
+ if (path2[len - 1] == '/' && strcmp(path2, "/")) path2[len - 1] = 0;
+ em->path = eina_stringshare_add(path2);
+
+ if (!_ecore_file_monitor_kevent_monitor(em, em->path))
+ return NULL;
+
+ return em;
+}
+
+static Eina_List *
+_ecore_file_monitor_kevent_ls(const char *directory)
+{
+ Eina_Iterator *it;
+ Eina_File_Direct_Info *info;
+ Eina_List *files = NULL;
+
+ it = eina_file_direct_ls(directory);
+ if (!it) return NULL;
+
+ EINA_ITERATOR_FOREACH(it, info)
+ {
+ File_Info *file = malloc(sizeof(File_Info));
+ if (eina_file_statat(eina_iterator_container_get(it), info, &file->st))
+ {
+ free(file);
+ continue;
+ }
+ file->path = eina_stringshare_add(info->path);
+ files = eina_list_append(files, file);
+ }
+
+ eina_iterator_free(it);
+
+ return files;
+}
+
+static void
+_ecore_file_monitor_kevent_ls_free(Eina_List *list)
+{
+ File_Info *file;
+
+ EINA_LIST_FREE(list, file)
+ {
+ eina_stringshare_del(file->path);
+ free(file);
+ }
+}
+
+static void
+_ecore_file_monitor_kevent_hash_del_cb(void *data)
+{
+ Ecore_File_Monitor *em = data;
+
+ if (ECORE_FILE_MONITOR_KEVENT(em)->fd >= 0)
+ close(ECORE_FILE_MONITOR_KEVENT(em)->fd);
+ eina_stringshare_del(em->path);
+ _ecore_file_monitor_kevent_ls_free(ECORE_FILE_MONITOR_KEVENT(em)->prev);
+
+ free(em);
+}
+
+void
+ecore_file_monitor_backend_del(Ecore_File_Monitor *em)
+{
+ eina_hash_del(_kevent_monitors, &(ECORE_FILE_MONITOR_KEVENT(em)->fd), em);
+}
+
+static Eina_Bool
+_ecore_file_monitor_kevent_handler(void *data EINA_UNUSED, Ecore_Fd_Handler *fdh)
+{
+ Ecore_File_Monitor *em;
+ struct kevent evs[KEVENT_NUM_EVENTS];
+ int fd;
+ const struct timespec timeout = { 0, 0 };
+
+ fd = ecore_main_fd_handler_fd_get(fdh);
+ if (fd < 0) return ECORE_CALLBACK_RENEW;
+
+ int res = kevent(fd, 0, 0, evs, KEVENT_NUM_EVENTS, &timeout);
+ for (int i = 0; i < res; i++)
+ {
+ em = eina_hash_find(_kevent_monitors, &evs[i].ident);
+ if (evs[i].fflags & NOTE_DELETE)
+ {
+ em->func(em->data, em, ECORE_FILE_EVENT_DELETED_SELF, em->path);
+ }
+ if ((evs[i].fflags & NOTE_WRITE) || (evs[i].fflags & NOTE_ATTRIB))
+ {
+ _ecore_file_monitor_kevent_find(em);
+ }
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static void
+_ecore_file_monitor_kevent_find(Ecore_File_Monitor *em)
+{
+ Eina_List *l, *l2;
+ File_Info *file, *file2;
+ Eina_List *files;
+
+ files = _ecore_file_monitor_kevent_ls(em->path);
+
+ EINA_LIST_FOREACH(ECORE_FILE_MONITOR_KEVENT(em)->prev, l, file)
+ {
+ Eina_Bool exists = EINA_FALSE;
+ EINA_LIST_FOREACH(files, l2, file2)
+ {
+ if (file->st.ino == file2->st.ino)
+ {
+ if (file->path == file2->path)
+ exists = EINA_TRUE;
+
+ if (file->st.mtime != file2->st.mtime)
+ em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, file->path);
+ }
+ }
+
+ if (!exists)
+ {
+ if (S_ISDIR(file->st.mode))
+ em->func(em->data, em, ECORE_FILE_EVENT_DELETED_DIRECTORY, file->path);
+ else
+ em->func(em->data, em, ECORE_FILE_EVENT_DELETED_FILE, file->path);
+ }
+ }
+
+ EINA_LIST_FOREACH(files, l, file)
+ {
+ Eina_Bool exists = EINA_FALSE;
+ EINA_LIST_FOREACH(ECORE_FILE_MONITOR_KEVENT(em)->prev, l2, file2)
+ {
+ if ((file->path == file2->path) && (file->st.ino == file2->st.ino))
+ {
+ exists = EINA_TRUE;
+ break;
+ }
+ }
+
+ if (!exists)
+ {
+ if (S_ISDIR(file->st.mode))
+ em->func(em->data, em, ECORE_FILE_EVENT_CREATED_DIRECTORY, file->path);
+ else
+ em->func(em->data, em, ECORE_FILE_EVENT_CREATED_FILE, file->path);
+ }
+ }
+
+ _ecore_file_monitor_kevent_ls_free(ECORE_FILE_MONITOR_KEVENT(em)->prev);
+ ECORE_FILE_MONITOR_KEVENT(em)->prev = files;
+}
+
+static int
+_ecore_file_monitor_kevent_monitor(Ecore_File_Monitor *em, const char *path)
+{
+ struct kevent ev;
+ int fd, res = 0;
+
+ if ((!ecore_file_exists(path)) || (!ecore_file_is_dir(path)))
+ return 0;
+
+ fd = open(path, O_RDONLY);
+ if (fd < 0)
+ {
+ INF("open failed, %s", strerror(errno));
+ ecore_file_monitor_backend_del(em);
+ return 0;
+ }
+
+ eina_file_close_on_exec(fd, EINA_TRUE);
+
+ ECORE_FILE_MONITOR_KEVENT(em)->fd = fd;
+ ECORE_FILE_MONITOR_KEVENT(em)->prev = _ecore_file_monitor_kevent_ls(em->path);
+
+ eina_hash_direct_add(_kevent_monitors, &(ECORE_FILE_MONITOR_KEVENT(em)->fd), em);
+
+ EV_SET(&ev, fd, EVFILT_VNODE, EV_ADD | EV_CLEAR,
+ NOTE_DELETE | NOTE_WRITE | NOTE_ATTRIB, 0, NULL);
+ res = kevent(ecore_main_fd_handler_fd_get(_kevent_fdh), &ev, 1, 0, 0, 0);
+ if (res)
+ eina_hash_del(_kevent_monitors, &(ECORE_FILE_MONITOR_KEVENT(em)->fd), em);
+
+ return 1;
+}
diff --git a/src/lib/ecore_file/ecore_file_monitor_poll.c b/src/lib/ecore_file/ecore_file_monitor_poll.c
index d2034dc7ab..84e82d4694 100644
--- a/src/lib/ecore_file/ecore_file_monitor_poll.c
+++ b/src/lib/ecore_file/ecore_file_monitor_poll.c
@@ -119,8 +119,8 @@ ecore_file_monitor_backend_add(const char *path,
f->name = file;
f->mtime = ecore_file_mod_time(buf);
f->is_dir = ecore_file_is_dir(buf);
- em->files =
- (Ecore_File *) eina_inlist_append(EINA_INLIST_GET(em->files),
+ em->files =
+ (Ecore_File *) eina_inlist_append(EINA_INLIST_GET(em->files),
EINA_INLIST_GET(f));
}
}
diff --git a/src/lib/ecore_file/ecore_file_path.c b/src/lib/ecore_file/ecore_file_path.c
index 0c4e466ce5..513f3b9a8a 100644
--- a/src/lib/ecore_file/ecore_file_path.c
+++ b/src/lib/ecore_file/ecore_file_path.c
@@ -95,7 +95,10 @@ ecore_file_app_installed(const char *exe)
char buf[PATH_MAX];
if (!exe) return EINA_FALSE;
- if (ecore_file_can_exec(exe)) return EINA_TRUE;
+ if (((!strncmp(exe, "/", 1)) ||
+ (!strncmp(exe, "./", 2)) ||
+ (!strncmp(exe, "../", 3))) &&
+ ecore_file_can_exec(exe)) return EINA_TRUE;
EINA_LIST_FOREACH(__ecore_file_path_bin, l, dir)
{
diff --git a/src/lib/ecore_file/meson.build b/src/lib/ecore_file/meson.build
index 727c3d372c..a25d98dffb 100644
--- a/src/lib/ecore_file/meson.build
+++ b/src/lib/ecore_file/meson.build
@@ -1,20 +1,23 @@
ecore_file_deps = [ecore_con, ecore]
ecore_file_pub_deps = [eina]
+ecore_file_ext_deps = []
-ecore_file_src = [
+ecore_file_src = files([
'ecore_file.c',
'ecore_file_download.c',
'ecore_file_monitor.c',
'ecore_file_path.c',
'ecore_file_private.h'
-]
+])
if sys_windows == true
- ecore_file_src += [ 'ecore_file_monitor_win32.c']
+ ecore_file_src += files([ 'ecore_file_monitor_win32.c'])
elif sys_linux == true
- ecore_file_src += [ 'ecore_file_monitor_inotify.c']
+ ecore_file_src += files([ 'ecore_file_monitor_inotify.c'])
+elif sys_bsd == true
+ ecore_file_src += files([ 'ecore_file_monitor_kevent.c'])
else
- ecore_file_src += [ 'ecore_file_monitor_poll.c']
+ ecore_file_src += files([ 'ecore_file_monitor_poll.c'])
endif
ecore_file_header_src = ['Ecore_File.h']
@@ -22,7 +25,8 @@ ecore_file_header_src = ['Ecore_File.h']
ecore_file_lib = library('ecore_file',
ecore_file_src,
- dependencies: ecore_file_deps + ecore_file_pub_deps + ecore_file_deps,
+ c_args : package_c_args,
+ dependencies: ecore_file_deps + ecore_file_pub_deps + ecore_file_ext_deps,
include_directories : config_dir + [include_directories(join_paths('..','..'))],
install: true,
version : meson.project_version()
diff --git a/src/lib/ecore_imf/Ecore_IMF.h b/src/lib/ecore_imf/Ecore_IMF.h
index dc6065f7d8..f293fe10a6 100644
--- a/src/lib/ecore_imf/Ecore_IMF.h
+++ b/src/lib/ecore_imf/Ecore_IMF.h
@@ -33,7 +33,7 @@
extern "C" {
#endif
-#define ECORE_IMF_INPUT_HINT_AUTOFILL_MASK 0xff00
+#define ECORE_IMF_INPUT_HINT_AUTOFILL_MASK 0xff00 /* @deprecated since 1.24 */
/**
* @defgroup Ecore_IMF_Lib_Group Ecore_IMF - Ecore Input Method Library Functions
@@ -47,7 +47,7 @@ extern "C" {
* @defgroup Ecore_IMF_Context_Group Ecore Input Method Context Functions
* @ingroup Ecore_IMF_Lib_Group
*
- * @section intro Introduction
+ * @section ecore_imf_intro Introduction
*
* Functions that operate on Ecore Input Method Context objects.
@@ -413,17 +413,17 @@ typedef enum
ECORE_IMF_INPUT_HINT_AUTO_COMPLETE = 1 << 0, /**< Suggest word auto completion @since 1.12 */
ECORE_IMF_INPUT_HINT_SENSITIVE_DATA = 1 << 1, /**< Typed text should not be stored. @since 1.12 */
ECORE_IMF_INPUT_HINT_MULTILINE = 1 << 2, /**< Multiline text @since 1.18 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE = 0x100, /**< Autofill hint for a credit card expiration date @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DAY = 0x200, /**< Autofill hint for a credit card expiration day @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_MONTH = 0x300, /**< Autofill hint for a credit card expiration month @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_YEAR = 0x400, /**< Autofill hint for a credit card expiration year @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_NUMBER = 0x500, /**< Autofill hint for a credit card number @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_EMAIL_ADDRESS = 0x600, /**< Autofill hint for an email address @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_NAME = 0x700, /**< Autofill hint for a user's real name @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_PHONE = 0x800, /**< Autofill hint for a phone number @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_ADDRESS = 0x900, /**< Autofill hint for a postal address @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_CODE = 0xA00, /**< Autofill hint for a postal code @since 1.21 */
- ECORE_IMF_INPUT_HINT_AUTOFILL_ID = 0xB00 /**< Autofill hint for a user's ID @since 1.21 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE = 0x100, /**< Autofill hint for a credit card expiration date @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DAY = 0x200, /**< Autofill hint for a credit card expiration day @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_MONTH = 0x300, /**< Autofill hint for a credit card expiration month @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_YEAR = 0x400, /**< Autofill hint for a credit card expiration year @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_NUMBER = 0x500, /**< Autofill hint for a credit card number @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_EMAIL_ADDRESS = 0x600, /**< Autofill hint for an email address @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_NAME = 0x700, /**< Autofill hint for a user's real name @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_PHONE = 0x800, /**< Autofill hint for a phone number @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_ADDRESS = 0x900, /**< Autofill hint for a postal address @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_CODE = 0xA00, /**< Autofill hint for a postal code @deprecated since 1.24 */
+ ECORE_IMF_INPUT_HINT_AUTOFILL_ID = 0xB00 /**< Autofill hint for a user's ID @deprecated since 1.24 */
} Ecore_IMF_Input_Hints;
/**
@@ -1971,7 +1971,7 @@ EAPI void ecore_imf_context_candidate_panel_geometry_ge
/**
* @ingroup Ecore_IMF_Context_Group
- * @brief Sets whether the Input Method Context should request to show the input panel in case of only an user's explicit Mouse Up event.
+ * @brief Sets whether the Input Method Context should request to show the input panel in case of only a user's explicit Mouse Up event.
* It doesn't request to show the input panel even though the Input Method Context has focus.
*
* @param ctx An #Ecore_IMF_Context.
@@ -1982,7 +1982,7 @@ EAPI void ecore_imf_context_input_panel_show_on_demand_
/**
* @ingroup Ecore_IMF_Context_Group
- * @brief Gets whether the Input Method Context should request to show the input panel in case of only an user's explicit Mouse Up event.
+ * @brief Gets whether the Input Method Context should request to show the input panel in case of only a user's explicit Mouse Up event.
*
* @param ctx An #Ecore_IMF_Context.
* @return @c EINA_TRUE if the input panel will be shown in case of only Mouse up event.
@@ -2077,7 +2077,7 @@ EAPI void ecore_imf_context_input_panel_position_set(Eco
*
* @param[in] ctx An #Ecore_IMF_Context
* @param key The key of the prediction hint
- * @param data The data to replace
+ * @param value The data to replace
* @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
*
* This function modifies the data of @p key with @p data in the hash associated @p
diff --git a/src/lib/ecore_imf/ecore_imf_context.c b/src/lib/ecore_imf/ecore_imf_context.c
index 270004e81b..5ade47002b 100644
--- a/src/lib/ecore_imf/ecore_imf_context.c
+++ b/src/lib/ecore_imf/ecore_imf_context.c
@@ -906,7 +906,7 @@ ecore_imf_context_input_panel_show(Ecore_IMF_Context *ctx)
}
show_req_ctx = ctx;
- if ((ctx->input_panel_enabled) ||
+ if ((ctx->input_panel_enabled) ||
(getenv("ECORE_IMF_INPUT_PANEL_ENABLED")))
{
if (ctx->klass && ctx->klass->show) ctx->klass->show(ctx);
@@ -923,7 +923,7 @@ ecore_imf_context_input_panel_hide(Ecore_IMF_Context *ctx)
return;
}
- if ((ctx->input_panel_enabled) ||
+ if ((ctx->input_panel_enabled) ||
(getenv("ECORE_IMF_INPUT_PANEL_ENABLED")))
{
if (ctx->klass && ctx->klass->hide) ctx->klass->hide(ctx);
diff --git a/src/lib/ecore_imf/meson.build b/src/lib/ecore_imf/meson.build
index 978594d20a..7b305751dd 100644
--- a/src/lib/ecore_imf/meson.build
+++ b/src/lib/ecore_imf/meson.build
@@ -1,21 +1,22 @@
-ecore_imf_deps = [ecore]
+ecore_imf_deps = [ecore, buildsystem]
ecore_imf_pub_deps = [eina]
+ecore_imf_ext_deps = [buildsystem_simple]
ecore_imf_header_src = [
'Ecore_IMF.h'
]
-ecore_imf_src = [
+ecore_imf_src = files([
'ecore_imf.c',
'ecore_imf_context.c',
'ecore_imf_module.c',
'ecore_imf_private.h',
-]
+])
ecore_imf_lib = library('ecore_imf',
ecore_imf_src, pub_eo_file_target,
- dependencies: [buildsystem, ecore_imf_deps, ecore_imf_pub_deps],
+ dependencies: [ecore_imf_deps, ecore_imf_pub_deps, ecore_imf_ext_deps],
include_directories : config_dir,
c_args : package_c_args,
install: true,
diff --git a/src/lib/ecore_imf_evas/meson.build b/src/lib/ecore_imf_evas/meson.build
index 28d53ea78d..b5d2d64125 100644
--- a/src/lib/ecore_imf_evas/meson.build
+++ b/src/lib/ecore_imf_evas/meson.build
@@ -2,16 +2,17 @@ ecore_imf_evas_header_src = [
'Ecore_IMF_Evas.h'
]
-ecore_imf_evas_src = [
+ecore_imf_evas_src = files([
'ecore_imf_evas.c'
-]
+])
ecore_imf_evas_deps = [ecore_imf, evas]
ecore_imf_evas_pub_deps = [eina, eo, efl]
+ecore_imf_evas_ext_deps = [m]
ecore_imf_evas_lib = library('ecore_imf_evas',
ecore_imf_evas_src,
- dependencies: ecore_imf_evas_pub_deps + [m] + ecore_imf_evas_deps,
+ dependencies: ecore_imf_evas_pub_deps + ecore_imf_evas_deps + ecore_imf_evas_ext_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
c_args : package_c_args,
diff --git a/src/lib/ecore_input/Ecore_Input.h b/src/lib/ecore_input/Ecore_Input.h
index 0e28909729..1c8763818b 100644
--- a/src/lib/ecore_input/Ecore_Input.h
+++ b/src/lib/ecore_input/Ecore_Input.h
@@ -130,7 +130,7 @@ extern "C" {
* An enum of Compose states.
*/
typedef enum _Ecore_Compose_State
- {
+ {
ECORE_COMPOSE_NONE,
ECORE_COMPOSE_MIDDLE,
ECORE_COMPOSE_DONE
@@ -202,10 +202,10 @@ extern "C" {
Ecore_Window window; /**< The main window where event happened */
Ecore_Window root_window; /**< The root window where event happened */
Ecore_Window event_window; /**< The child window where event happened */
-
+
unsigned int timestamp; /**< Time when the event occurred */
unsigned int modifiers; /**< The combination of modifiers key (SHIFT,CTRL,ALT,..)*/
-
+
int same_screen; /**< same screen flag */
unsigned int keycode; /**< Key scan code numeric value @since 1.10 */
@@ -231,14 +231,14 @@ extern "C" {
unsigned int double_click; /**< Double click event */
unsigned int triple_click; /**< Triple click event */
int same_screen; /**< Same screen flag */
-
+
int x; /**< x coordinate relative to window where event happened */
int y; /**< y coordinate relative to window where event happened */
struct {
int x;
int y;
} root; /**< Coordinates relative to root window */
-
+
struct {
int device; /**< 0 if normal mouse, 1+ for other mouse-devices (eg multi-touch - other fingers) */
double radius, radius_x, radius_y; /**< radius of press point - radius_x and y if its an ellipse (radius is the average of the 2) */
@@ -262,14 +262,14 @@ extern "C" {
Ecore_Window window; /**< The main window where event happened */
Ecore_Window root_window; /**< The root window where event happened */
Ecore_Window event_window; /**< The child window where event happened */
-
+
unsigned int timestamp; /**< Time when the event occurred */
unsigned int modifiers; /**< The combination of modifiers key (SHIFT,CTRL,ALT,..)*/
-
+
int same_screen; /**< Same screen flag */
int direction; /**< Orientation of the wheel (horizontal/vertical) */
int z; /**< Value of the wheel event (+1/-1) */
-
+
int x; /**< x coordinate relative to window where event happened */
int y; /**< y coordinate relative to window where event happened */
struct {
@@ -289,19 +289,19 @@ extern "C" {
Ecore_Window window; /**< The main window where event happened */
Ecore_Window root_window; /**< The root window where event happened */
Ecore_Window event_window; /**< The child window where event happened */
-
+
unsigned int timestamp; /**< Time when the event occurred */
unsigned int modifiers; /**< The combination of modifiers key (SHIFT,CTRL,ALT,..)*/
-
+
int same_screen; /**< Same screen flag */
-
+
int x; /**< x coordinate relative to window where event happened */
int y; /**< y coordinate relative to window where event happened */
struct {
int x;
int y;
} root; /**< Coordinates relative to root window */
-
+
struct {
int device; /**< 0 if normal mouse, 1+ for other mouse-devices (eg multi-touch - other fingers) */
double radius, radius_x, radius_y; /**< radius of press point - radius_x and y if its an ellipse (radius is the average of the 2) */
@@ -367,10 +367,10 @@ extern "C" {
{
Ecore_Window window; /**< The main window where event happened */
Ecore_Window event_window; /**< The child window where event happened */
-
+
unsigned int timestamp; /**< Time when the event occurred */
unsigned int modifiers; /**< The combination of modifiers key (SHIFT,CTRL,ALT,..)*/
-
+
int x; /**< x coordinate relative to window where event happened */
int y; /**< y coordinate relative to window where event happened */
diff --git a/src/lib/ecore_input/ecore_input_compose.c b/src/lib/ecore_input/ecore_input_compose.c
index 13b90bca09..1c52f550dd 100644
--- a/src/lib/ecore_input/ecore_input_compose.c
+++ b/src/lib/ecore_input/ecore_input_compose.c
@@ -52,7 +52,7 @@ ecore_compose_get(const Eina_List *seq, char **seqstr_ret)
for (p = comp; (p < pend) && s;)
{
int len, jump = -1, bsize = -1;
-
+
len = strlen(p);
psz = (unsigned char *)(p + len + 1);
// decode jump amount to next entry
diff --git a/src/lib/ecore_input/ecore_input_joystick.c b/src/lib/ecore_input/ecore_input_joystick.c
index 28f527bc89..7793c3bf35 100644
--- a/src/lib/ecore_input/ecore_input_joystick.c
+++ b/src/lib/ecore_input/ecore_input_joystick.c
@@ -484,7 +484,7 @@ _joystick_register(const char* syspath)
mapper = _joystick_mapping_info_get(syspath);
if (!mapper)
{
- ERR("Unsupported joystick.");
+ WRN("Unsupported joystick.");
goto register_failed;
}
diff --git a/src/lib/ecore_input/ecore_input_private.h b/src/lib/ecore_input/ecore_input_private.h
index 4d085a19b4..8f53892ac7 100644
--- a/src/lib/ecore_input/ecore_input_private.h
+++ b/src/lib/ecore_input/ecore_input_private.h
@@ -4,7 +4,7 @@
extern int _ecore_input_log_dom;
#ifdef ECORE_INPUT_DEFAULT_LOG_COLOR
-# undef ECORE_INPUT_DEFAULT_LOG_COLOR
+# undef ECORE_INPUT_DEFAULT_LOG_COLOR
#endif
#define ECORE_INPUT_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
diff --git a/src/lib/ecore_input/meson.build b/src/lib/ecore_input/meson.build
index c57ec4e04c..d1250c3591 100644
--- a/src/lib/ecore_input/meson.build
+++ b/src/lib/ecore_input/meson.build
@@ -1,26 +1,27 @@
ecore_input_deps = [ecore]
ecore_input_pub_deps = [eina, eo]
+ecore_input_ext_deps = []
ecore_input_header_src = [
'Ecore_Input.h'
]
-ecore_input_src = [
+ecore_input_src = files([
'ecore_input.c',
'ecore_input_compose.c',
'ecore_input_joystick.c',
'ecore_input_compose.h',
'ecore_input_private.h'
-]
+])
if get_option('eeze')
ecore_input_deps += eeze
endif
-
ecore_input_lib = library('ecore_input',
ecore_input_src, pub_eo_file_target,
- dependencies: ecore_input_pub_deps + ecore_input_deps,
+ c_args : package_c_args,
+ dependencies: ecore_input_pub_deps + ecore_input_deps + ecore_input_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/ecore_input_evas/Ecore_Input_Evas.h b/src/lib/ecore_input_evas/Ecore_Input_Evas.h
index 1ec065613f..27765e6982 100644
--- a/src/lib/ecore_input_evas/Ecore_Input_Evas.h
+++ b/src/lib/ecore_input_evas/Ecore_Input_Evas.h
@@ -37,7 +37,7 @@ typedef void (*Ecore_Event_Mouse_Move_Cb)(void *window, int x, int y, unsigned i
typedef void (*Ecore_Event_Multi_Move_Cb)(void *window, int device, int x, int y, double radius, double radius_x, double radius_y, double pressure, double angle, double mx, double my, unsigned int timestamp);
typedef void (*Ecore_Event_Multi_Down_Cb)(void *window, int device, int x, int y, double radius, double radius_x, double radius_y, double pressure, double angle, double mx, double my, Evas_Button_Flags flags, unsigned int timestamp);
typedef void (*Ecore_Event_Multi_Up_Cb)(void *window, int device, int x, int y, double radius, double radius_x, double radius_y, double pressure, double angle, double mx, double my, Evas_Button_Flags flags, unsigned int timestamp);
-
+
EAPI int ecore_event_evas_init(void);
EAPI int ecore_event_evas_shutdown(void);
diff --git a/src/lib/ecore_input_evas/ecore_input_evas.c b/src/lib/ecore_input_evas/ecore_input_evas.c
index bd2f0d1868..ea07300e7a 100644
--- a/src/lib/ecore_input_evas/ecore_input_evas.c
+++ b/src/lib/ecore_input_evas/ecore_input_evas.c
@@ -7,8 +7,8 @@
#include <string.h>
#include <stdlib.h>
-#include "Ecore.h"
-#include "Ecore_Input.h"
+#include <Ecore.h>
+#include <Ecore_Input.h>
#include "Ecore_Input_Evas.h"
#include "ecore_input_evas_private.h"
@@ -845,10 +845,14 @@ EAPI int
ecore_event_evas_shutdown(void)
{
size_t i;
+ Ecore_Event_Last *eel;
if (--_ecore_event_evas_init_count != 0)
return _ecore_event_evas_init_count;
+ EINA_LIST_FREE(_last_events, eel)
+ free(eel);
+
eina_hash_free(_window_hash);
_window_hash = NULL;
for (i = 0; i < sizeof(ecore_event_evas_handlers) / sizeof(Ecore_Event_Handler *); i++)
diff --git a/src/lib/ecore_input_evas/ecore_input_evas_private.h b/src/lib/ecore_input_evas/ecore_input_evas_private.h
index 1956e10664..972cf3e7af 100644
--- a/src/lib/ecore_input_evas/ecore_input_evas_private.h
+++ b/src/lib/ecore_input_evas/ecore_input_evas_private.h
@@ -4,7 +4,7 @@
extern int _ecore_input_evas_log_dom;
#ifdef ECORE_INPUT_EVAS_DEFAULT_LOG_COLOR
-#undef ECORE_INPUT_EVAS_DEFAULT_LOG_COLOR
+#undef ECORE_INPUT_EVAS_DEFAULT_LOG_COLOR
#endif
#define ECORE_INPUT_EVAS_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
diff --git a/src/lib/ecore_input_evas/meson.build b/src/lib/ecore_input_evas/meson.build
index 8b48142f7d..612a931c16 100644
--- a/src/lib/ecore_input_evas/meson.build
+++ b/src/lib/ecore_input_evas/meson.build
@@ -1,20 +1,22 @@
ecore_input_evas_deps = [ecore, ecore_input, evas]
ecore_input_evas_pub_deps = [eina, evas]
+ecore_input_evas_ext_deps = []
pub_eo_file_target = []
ecore_input_evas_header_src = [
'Ecore_Input_Evas.h'
]
-ecore_input_evas_src = [
+ecore_input_evas_src = files([
'ecore_input_evas.c',
'ecore_input_evas_private.h',
-]
+])
ecore_input_evas_lib = library('ecore_input_evas',
ecore_input_evas_src, pub_eo_file_target,
- dependencies: ecore_input_evas_pub_deps + ecore_input_evas_deps,
+ c_args : package_c_args,
+ dependencies: [ecore_input_evas_pub_deps, ecore_input_evas_deps, ecore_input_evas_ext_deps],
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/ecore_ipc/Ecore_Ipc.h b/src/lib/ecore_ipc/Ecore_Ipc.h
index 5da43c7639..6881141cf6 100644
--- a/src/lib/ecore_ipc/Ecore_Ipc.h
+++ b/src/lib/ecore_ipc/Ecore_Ipc.h
@@ -133,7 +133,7 @@ EAPI unsigned long long _ecore_ipc_swap_64(unsigned long long v) EINA_DEPRECATED
p->v = (char *)ptr; \
ptr += strlen(p->v) + 1; \
} \
- }
+ }
#define ECORE_IPC_PUTS(v, l)\
{ \
strcpy((char *)ptr, p->v); \
@@ -234,7 +234,7 @@ typedef enum _Ecore_Ipc_Type
ECORE_IPC_USE_SSL = (1 << 4),
ECORE_IPC_NO_PROXY = (1 << 5)
} Ecore_Ipc_Type;
-
+
typedef struct _Ecore_Ipc_Event_Client_Add Ecore_Ipc_Event_Client_Add;
typedef struct _Ecore_Ipc_Event_Client_Del Ecore_Ipc_Event_Client_Del;
typedef struct _Ecore_Ipc_Event_Server_Add Ecore_Ipc_Event_Server_Add;
@@ -318,7 +318,7 @@ struct _Ecore_Ipc_Event_Server_Data
void *data; /**< The message data */
int size; /**< The data length (in bytes) */
};
-
+
EAPI extern int ECORE_IPC_EVENT_CLIENT_ADD;
EAPI extern int ECORE_IPC_EVENT_CLIENT_DEL;
EAPI extern int ECORE_IPC_EVENT_SERVER_ADD;
diff --git a/src/lib/ecore_ipc/ecore_ipc.c b/src/lib/ecore_ipc/ecore_ipc.c
index f6f7fee463..389d905d9e 100644
--- a/src/lib/ecore_ipc/ecore_ipc.c
+++ b/src/lib/ecore_ipc/ecore_ipc.c
@@ -278,6 +278,8 @@ ecore_ipc_post_event_client_del(Ecore_Ipc_Client *cl)
if (cl->delete_me) return;
+ cl->delete_me = EINA_TRUE;
+
ev = calloc(1, sizeof(Ecore_Ipc_Event_Client_Del));
EINA_SAFETY_ON_NULL_RETURN(ev);
@@ -1849,7 +1851,7 @@ ecore_ipc_server_data_process(Ecore_Ipc_Server *svr, void *data, int size, Eina_
offset += (s + msg.size);
if ((svr->buf_size == offset) && (svr->buf))
{
- if (svr->buf) free(svr->buf);
+ free(svr->buf);
svr->buf = NULL;
svr->buf_size = 0;
return ECORE_CALLBACK_CANCEL;
diff --git a/src/lib/ecore_ipc/ecore_ipc_private.h b/src/lib/ecore_ipc/ecore_ipc_private.h
index c964acd733..b918f3dd64 100644
--- a/src/lib/ecore_ipc/ecore_ipc_private.h
+++ b/src/lib/ecore_ipc/ecore_ipc_private.h
@@ -79,15 +79,15 @@ struct _Ecore_Ipc_Client
unsigned char *buf;
int buf_size;
int max_buf_size;
-
+
struct {
Ecore_Ipc_Msg_Head i, o;
} prev;
-
+
int event_count;
Eina_Bool delete_me : 1;
};
-
+
struct _Ecore_Ipc_Server
{
ECORE_MAGIC;
@@ -112,7 +112,7 @@ struct _Ecore_Ipc_Server
struct {
Ecore_Ipc_Msg_Head i, o;
} prev;
-
+
int event_count;
Eina_Bool delete_me : 1;
};
diff --git a/src/lib/ecore_ipc/meson.build b/src/lib/ecore_ipc/meson.build
index dbc95b0531..6439148d16 100644
--- a/src/lib/ecore_ipc/meson.build
+++ b/src/lib/ecore_ipc/meson.build
@@ -1,18 +1,19 @@
ecore_ipc_deps = [ecore, ecore_con]
ecore_ipc_pub_deps = [eina]
-
+ecore_ipc_ext_deps = []
ecore_ipc_header_src = [
'Ecore_Ipc.h'
]
-ecore_ipc_src = [
+ecore_ipc_src = files([
'ecore_ipc.c',
'ecore_ipc_private.h',
-]
+])
ecore_ipc_lib = library('ecore_ipc',
ecore_ipc_src, pub_eo_file_target,
- dependencies: ecore_ipc_deps + ecore_ipc_pub_deps,
+ c_args : package_c_args,
+ dependencies: [ecore_ipc_deps, ecore_ipc_pub_deps, ecore_ipc_ext_deps],
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/ecore_sdl/Ecore_Sdl.h b/src/lib/ecore_sdl/Ecore_Sdl.h
index 50b87069ad..c110f14f3d 100644
--- a/src/lib/ecore_sdl/Ecore_Sdl.h
+++ b/src/lib/ecore_sdl/Ecore_Sdl.h
@@ -100,7 +100,7 @@ struct _Ecore_Sdl_Event_Mouse_Button_Up /** SDL Mouse Up event */
};
typedef struct _Ecore_Sdl_Event_Mouse_Move Ecore_Sdl_Event_Mouse_Move;
-struct _Ecore_Sdl_Event_Mouse_Move /** SDL Mouse Move event */
+struct _Ecore_Sdl_Event_Mouse_Move /** SDL Mouse Move event */
{
int x; /**< Mouse co-ordinates where the mouse cursor moved to */
int y; /**< Mouse co-ordinates where the mouse cursor moved to */
diff --git a/src/lib/ecore_sdl/ecore_sdl_private.h b/src/lib/ecore_sdl/ecore_sdl_private.h
index 593083a957..8d584e53cb 100644
--- a/src/lib/ecore_sdl/ecore_sdl_private.h
+++ b/src/lib/ecore_sdl/ecore_sdl_private.h
@@ -4,33 +4,33 @@
extern int _ecore_sdl_log_dom;
# ifdef ECORE_SDL_DEFAULT_LOG_COLOR
-# undef ECORE_SDL_DEFAULT_LOG_COLOR
+# undef ECORE_SDL_DEFAULT_LOG_COLOR
# endif
# define ECORE_SDL_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
-
+
# ifdef ERR
# undef ERR
# endif
# define ERR(...) EINA_LOG_DOM_ERR(_ecore_sdl_log_dom, __VA_ARGS__)
-
+
# ifdef DBG
# undef DBG
# endif
# define DBG(...) EINA_LOG_DOM_DBG(_ecore_sdl_log_dom, __VA_ARGS__)
-
+
# ifdef INF
# undef INF
# endif
# define INF(...) EINA_LOG_DOM_INFO(_ecore_sdl_log_dom, __VA_ARGS__)
-
+
# ifdef WRN
# undef WRN
# endif
# define WRN(...) EINA_LOG_DOM_WARN(_ecore_sdl_log_dom, __VA_ARGS__)
-
+
# ifdef CRI
# undef CRI
# endif
# define CRI(...) EINA_LOG_DOM_CRIT(_ecore_sdl_log_dom, __VA_ARGS__)
-
+
#endif
diff --git a/src/lib/ecore_sdl/meson.build b/src/lib/ecore_sdl/meson.build
index b4685818c1..f3cd70428d 100644
--- a/src/lib/ecore_sdl/meson.build
+++ b/src/lib/ecore_sdl/meson.build
@@ -1,20 +1,21 @@
ecore_sdl_deps = [eina, ecore, ecore_input]
ecore_sdl_pub_deps = []
+ecore_sdl_ext_deps = [m]
-ecore_sdl_src = [
+ecore_sdl_src = files([
'ecore_sdl.c'
-]
+])
ecore_sdl_header_src = [
'Ecore_Sdl.h',
'Ecore_Sdl_Keys.h'
]
-ecore_sdl_deps += dependency('sdl2')
+ecore_sdl_ext_deps += dependency('sdl2')
ecore_sdl_lib = library('ecore_sdl',
ecore_sdl_src,
- dependencies: [m] + ecore_sdl_deps + ecore_sdl_pub_deps,
+ dependencies: [ecore_sdl_deps, ecore_sdl_pub_deps, ecore_sdl_ext_deps],
include_directories : config_dir + [include_directories(join_paths('..','..'))],
install: true,
c_args : package_c_args,
diff --git a/src/lib/ecore_wayland/Ecore_Wayland.h b/src/lib/ecore_wayland/Ecore_Wayland.h
index 7db571e80c..1e56c351b8 100644
--- a/src/lib/ecore_wayland/Ecore_Wayland.h
+++ b/src/lib/ecore_wayland/Ecore_Wayland.h
@@ -836,10 +836,11 @@ EAPI void ecore_wl_server_mode_set(Eina_Bool on);
* @brief Creates and returns a new subsurface.
*
* Create a new surface (and subsurface interface), with the parent surface
- * being the one associated with the given @param win.
+ * being the one associated with the given @p win.
*
- * The @param win must be visible, otherwise there will be no surface created
+ * @p win must be visible, otherwise there will be no surface created
* for it yet.
+ * @param win The window
*
* @return the allocated and initialized Ecore_Wl_Subsurf object, or
* NULL on failure
@@ -900,8 +901,8 @@ EAPI void ecore_wl_subsurf_position_get(Ecore_Wl_Subsurf *ess, int *x, int *y);
* @ingroup Ecore_Wl_Subsurf
* @brief Places subsurface on layer above a reference surface.
*
- * Moves the @param ess subsurface to just above the reference @param
- * surface, changing the z-order. The reference @param surface must
+ * Moves the @p ess subsurface to just above the reference
+ * @p surface, changing the z-order. The reference @p surface must
* be either a sibling or parent surface, else a protocol error will
* be generated.
*
diff --git a/src/lib/ecore_wayland/ecore_wl.c b/src/lib/ecore_wayland/ecore_wl.c
index 3bc3125122..6905ff9dde 100644
--- a/src/lib/ecore_wayland/ecore_wl.c
+++ b/src/lib/ecore_wayland/ecore_wl.c
@@ -128,7 +128,7 @@ EAPI int
ecore_wl_init(const char *name)
{
struct wl_callback *callback;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (++_ecore_wl_init_count != 1) return _ecore_wl_init_count;
@@ -240,7 +240,7 @@ exit_eina:
EAPI int
ecore_wl_shutdown(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_wl_shutdown(EINA_TRUE);
}
@@ -337,7 +337,7 @@ ecore_wl_screen_size_get(int *w, int *h)
Eina_Inlist *tmp;
int ow = 0, oh = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (w) *w = 0;
if (h) *h = 0;
@@ -380,7 +380,7 @@ ecore_wl_screen_size_get(int *w, int *h)
EAPI void
ecore_wl_pointer_xy_get(int *x, int *y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_wl_input_pointer_xy_get(x, y);
}
@@ -390,7 +390,7 @@ ecore_wl_dpi_get(void)
{
int w, mw;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!_ecore_wl_disp) return 0;
@@ -428,7 +428,7 @@ ecore_wl_display_iterate(void)
EAPI Eina_Bool
ecore_wl_animator_source_set(Ecore_Animator_Source source)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_ecore_wl_server_mode) return EINA_FALSE;
@@ -477,7 +477,7 @@ ecore_wl_server_mode_set(Eina_Bool on)
static int
_ecore_wl_shutdown(Eina_Bool close)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_ecore_wl_init_count < 1)
{
@@ -619,7 +619,7 @@ _ecore_wl_cb_handle_data(void *data, Ecore_Fd_Handler *hdl)
Ecore_Wl_Display *ewd;
int ret = 0;
- /* LOGFN(__FILE__, __LINE__, __FUNCTION__); */
+ /* LOGFN; */
if (_ecore_wl_fatal_error) return ECORE_CALLBACK_CANCEL;
@@ -664,7 +664,7 @@ _ecore_wl_cb_handle_global(void *data, struct wl_registry *registry, unsigned in
Ecore_Wl_Display *ewd;
Ecore_Wl_Global *global;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ewd = data;
@@ -769,7 +769,7 @@ _ecore_wl_cb_handle_global_remove(void *data, struct wl_registry *registry EINA_
Ecore_Wl_Global *global;
Eina_Inlist *tmp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ewd = data;
@@ -786,7 +786,7 @@ _ecore_wl_cb_handle_global_remove(void *data, struct wl_registry *registry EINA_
static Eina_Bool
_ecore_wl_xkb_init(Ecore_Wl_Display *ewd)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ewd->xkb.context = xkb_context_new(0)))
return EINA_FALSE;
@@ -797,7 +797,7 @@ _ecore_wl_xkb_init(Ecore_Wl_Display *ewd)
static Eina_Bool
_ecore_wl_xkb_shutdown(Ecore_Wl_Display *ewd)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xkb_context_unref(ewd->xkb.context);
diff --git a/src/lib/ecore_wayland/ecore_wl_dnd.c b/src/lib/ecore_wayland/ecore_wl_dnd.c
index 35760f849d..d4bf3e193f 100644
--- a/src/lib/ecore_wayland/ecore_wl_dnd.c
+++ b/src/lib/ecore_wayland/ecore_wl_dnd.c
@@ -85,7 +85,7 @@ _ecore_wl_dnd_offer_listener =
EINA_DEPRECATED EAPI Eina_Bool
ecore_wl_dnd_set_selection(Ecore_Wl_Dnd *dnd, const char **types_offered)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return ecore_wl_dnd_selection_set(dnd->input, types_offered);
}
@@ -97,7 +97,7 @@ ecore_wl_dnd_set_selection(Ecore_Wl_Dnd *dnd, const char **types_offered)
EINA_DEPRECATED EAPI Eina_Bool
ecore_wl_dnd_get_selection(Ecore_Wl_Dnd *dnd, const char *type)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return ecore_wl_dnd_selection_get(dnd->input, type);
}
@@ -143,7 +143,7 @@ ecore_wl_dnd_selection_set(Ecore_Wl_Input *input, const char **types_offered)
const char **type;
char **t;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return EINA_FALSE;
@@ -197,7 +197,7 @@ ecore_wl_dnd_selection_get(Ecore_Wl_Input *input, const char *type)
{
char **t;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid input and selection source */
if ((!input) || (!input->selection_source)) return EINA_FALSE;
@@ -221,7 +221,7 @@ ecore_wl_dnd_selection_get(Ecore_Wl_Input *input, const char *type)
EAPI Eina_Bool
ecore_wl_dnd_selection_owner_has(Ecore_Wl_Input *input)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return EINA_FALSE;
return (input->selection_source != NULL);
@@ -234,7 +234,7 @@ ecore_wl_dnd_selection_owner_has(Ecore_Wl_Input *input)
EAPI Eina_Bool
ecore_wl_dnd_selection_clear(Ecore_Wl_Input *input)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid input */
if (!input) return EINA_FALSE;
@@ -256,7 +256,7 @@ ecore_wl_dnd_drag_start(Ecore_Wl_Input *input, Ecore_Wl_Window *win, Ecore_Wl_Wi
struct wl_surface *drag_surface;
struct wl_surface *origin_surface;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid input. if not, get the default one */
if (!input) input = _ecore_wl_disp->input;
@@ -312,7 +312,7 @@ ecore_wl_dnd_drag_end(Ecore_Wl_Input *input)
{
Ecore_Wl_Event_Dnd_End *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid input. if not, get the default one */
if (!input) input = _ecore_wl_disp->input;
@@ -354,7 +354,7 @@ ecore_wl_dnd_drag_get(Ecore_Wl_Input *input, const char *type)
{
char **t;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid input and drag source */
if ((!input) || (!input->drag_source)) return EINA_FALSE;
@@ -380,7 +380,7 @@ ecore_wl_dnd_drag_types_set(Ecore_Wl_Input *input, const char **types_offered)
const char **type;
char **t;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid input. if not, get the default one */
if (!input) input = _ecore_wl_disp->input;
@@ -410,7 +410,6 @@ ecore_wl_dnd_drag_types_set(Ecore_Wl_Input *input, const char **types_offered)
/* add these types to the data source */
for (type = types_offered; *type; type++)
{
- if (!*type) continue;
t = wl_array_add(&input->data_types, sizeof(*t));
if (t)
{
@@ -427,7 +426,7 @@ ecore_wl_dnd_drag_types_set(Ecore_Wl_Input *input, const char **types_offered)
EAPI struct wl_array *
ecore_wl_dnd_drag_types_get(Ecore_Wl_Input *input)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid input. if not, get the default one */
if (!input) input = _ecore_wl_disp->input;
@@ -442,7 +441,7 @@ _ecore_wl_dnd_add(Ecore_Wl_Input *input, struct wl_data_device *data_device EINA
{
Ecore_Wl_Dnd_Source *source;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(source = malloc(sizeof(Ecore_Wl_Dnd_Source))))
return;
@@ -465,7 +464,7 @@ _ecore_wl_dnd_enter(void *data, struct wl_data_device *data_device EINA_UNUSED,
char **types;
int num = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -511,7 +510,7 @@ _ecore_wl_dnd_leave(void *data, struct wl_data_device *data_device EINA_UNUSED)
Ecore_Wl_Event_Dnd_Leave *ev;
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -532,7 +531,7 @@ _ecore_wl_dnd_motion(void *data, struct wl_data_device *data_device EINA_UNUSED,
Ecore_Wl_Event_Dnd_Position *ev;
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -559,7 +558,7 @@ _ecore_wl_dnd_drop(void *data, struct wl_data_device *data_device EINA_UNUSED)
Ecore_Wl_Event_Dnd_Drop *ev;
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -584,7 +583,7 @@ _ecore_wl_dnd_selection(void *data, struct wl_data_device *data_device EINA_UNUS
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -604,7 +603,7 @@ _ecore_wl_dnd_selection(void *data, struct wl_data_device *data_device EINA_UNUS
void
_ecore_wl_dnd_del(Ecore_Wl_Dnd_Source *source)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!source) return;
source->refcount--;
@@ -627,7 +626,7 @@ _ecore_wl_dnd_selection_data_receive(Ecore_Wl_Dnd_Source *source, const char *ty
struct _dnd_source *read_source = NULL;
int p[2];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (pipe2(p, O_CLOEXEC) == -1)
return;
@@ -690,7 +689,7 @@ _ecore_wl_dnd_selection_data_read(void *data, Ecore_Fd_Handler *fd_handler EINA_
Ecore_Wl_Event_Selection_Data_Ready *event;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
read_source = data;
source = read_source->source;
@@ -734,7 +733,7 @@ _ecore_wl_dnd_selection_data_ready_cb_free(void *data EINA_UNUSED, void *event)
{
Ecore_Wl_Event_Selection_Data_Ready *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = event)) return;
@@ -749,7 +748,7 @@ _ecore_wl_dnd_selection_cb_idle(void *data)
struct _dnd_task *task;
int count, i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ctx = data;
count = epoll_wait(ctx->epoll_fd, ctx->ep, 1, 0);
@@ -773,7 +772,7 @@ _ecore_wl_dnd_source_cb_target(void *data, struct wl_data_source *source EINA_UN
{
Ecore_Wl_Event_Data_Source_Target *event;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!data) return;
if (!(event = calloc(1, sizeof(Ecore_Wl_Event_Data_Source_Target)))) return;
@@ -790,7 +789,7 @@ _ecore_wl_dnd_source_cb_target_free(void *data EINA_UNUSED, void *event)
{
Ecore_Wl_Event_Data_Source_Target *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = event)) return;
@@ -803,7 +802,7 @@ _ecore_wl_dnd_source_cb_send(void *data, struct wl_data_source *source EINA_UNUS
{
Ecore_Wl_Event_Data_Source_Send *event;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!data) return;
@@ -821,7 +820,7 @@ _ecore_wl_dnd_source_cb_send_free(void *data EINA_UNUSED, void *event)
{
Ecore_Wl_Event_Data_Source_Send *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = event)) return;
@@ -835,7 +834,7 @@ _ecore_wl_dnd_source_cb_cancelled(void *data, struct wl_data_source *source)
Ecore_Wl_Input *input;
Ecore_Wl_Event_Data_Source_Cancelled *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -859,7 +858,7 @@ _ecore_wl_dnd_offer_cb_offer(void *data, struct wl_data_offer *data_offer EINA_U
Ecore_Wl_Dnd_Source *source;
char **t;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(source = data)) return;
if (!type) return;
diff --git a/src/lib/ecore_wayland/ecore_wl_input.c b/src/lib/ecore_wayland/ecore_wl_input.c
index e3fb6f487d..12220d78c5 100644
--- a/src/lib/ecore_wayland/ecore_wl_input.c
+++ b/src/lib/ecore_wayland/ecore_wl_input.c
@@ -150,7 +150,7 @@ static int _pointer_x, _pointer_y;
EAPI void
ecore_wl_input_grab(Ecore_Wl_Input *input, Ecore_Wl_Window *win, unsigned int button)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
input->grab = win;
@@ -160,7 +160,7 @@ ecore_wl_input_grab(Ecore_Wl_Input *input, Ecore_Wl_Window *win, unsigned int bu
EAPI void
ecore_wl_input_ungrab(Ecore_Wl_Input *input)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
@@ -184,7 +184,7 @@ ecore_wl_input_ungrab(Ecore_Wl_Input *input)
void
_ecore_wl_input_grab_release(Ecore_Wl_Input *input, Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
if (input->grab != win) return;
@@ -204,7 +204,7 @@ _pointer_update_stop(Ecore_Wl_Input *input)
EAPI void
ecore_wl_input_pointer_set(Ecore_Wl_Input *input, struct wl_surface *surface, int hot_x, int hot_y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
@@ -217,7 +217,7 @@ ecore_wl_input_pointer_set(Ecore_Wl_Input *input, struct wl_surface *surface, in
EAPI void
ecore_wl_input_cursor_size_set(Ecore_Wl_Input *input, const int size)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
@@ -234,7 +234,7 @@ ecore_wl_input_cursor_size_set(Ecore_Wl_Input *input, const int size)
EAPI void
ecore_wl_input_cursor_theme_name_set(Ecore_Wl_Input *input, const char *cursor_theme_name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
@@ -252,7 +252,7 @@ ecore_wl_input_cursor_theme_name_set(Ecore_Wl_Input *input, const char *cursor_t
EAPI struct xkb_keymap *
ecore_wl_input_keymap_get(Ecore_Wl_Input *input)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(input, NULL);
@@ -308,7 +308,7 @@ ecore_wl_input_cursor_from_name_set(Ecore_Wl_Input *input, const char *cursor_na
{
struct wl_cursor *cursor;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
/* No pointer device. Don't need to set cursor and update it */
@@ -346,7 +346,7 @@ ecore_wl_input_cursor_from_name_set(Ecore_Wl_Input *input, const char *cursor_na
EAPI void
ecore_wl_input_cursor_default_restore(Ecore_Wl_Input *input)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return;
@@ -369,7 +369,7 @@ ecore_wl_input_get(void)
EAPI struct wl_seat *
ecore_wl_input_seat_get(Ecore_Wl_Input *input)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!input) return NULL;
@@ -400,7 +400,7 @@ _ecore_wl_input_add(Ecore_Wl_Display *ewd, unsigned int id)
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = calloc(1, sizeof(Ecore_Wl_Input)))) return;
@@ -525,7 +525,7 @@ _ecore_wl_input_seat_handle_capabilities(void *data, struct wl_seat *seat, enum
if (!(input = data)) return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if ((caps & WL_SEAT_CAPABILITY_POINTER) && (!input->pointer))
{
@@ -577,7 +577,7 @@ _ecore_wl_input_cb_pointer_motion(void *data, struct wl_pointer *pointer EINA_UN
{
Ecore_Wl_Input *input;
- /* LOGFN(__FILE__, __LINE__, __FUNCTION__); */
+ /* LOGFN; */
if (!(input = data)) return;
@@ -595,7 +595,7 @@ _ecore_wl_input_cb_pointer_button(void *data, struct wl_pointer *pointer EINA_UN
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -637,7 +637,7 @@ _ecore_wl_input_cb_pointer_axis(void *data, struct wl_pointer *pointer EINA_UNUS
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
_ecore_wl_input_mouse_wheel_send(input, axis, wl_fixed_to_int(value),
@@ -649,7 +649,7 @@ _ecore_wl_input_cb_pointer_frame(void *data, struct wl_callback *callback, unsig
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -680,7 +680,7 @@ _ecore_wl_input_cb_keyboard_keymap(void *data, struct wl_keyboard *keyboard EINA
Ecore_Wl_Input *input;
char *map = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data))
{
@@ -789,7 +789,7 @@ _ecore_wl_input_cb_keyboard_key(void *data, struct wl_keyboard *keyboard EINA_UN
char key[256], keyname[256], compose[256];
Ecore_Event_Key *e;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -891,7 +891,7 @@ _ecore_wl_input_cb_keyboard_modifiers(void *data, struct wl_keyboard *keyboard E
Ecore_Wl_Input *input;
xkb_mod_mask_t mask;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -927,7 +927,7 @@ _ecore_wl_input_cb_keyboard_repeat_setup(void *data, struct wl_keyboard *keyboar
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
@@ -949,7 +949,7 @@ _ecore_wl_input_cb_keyboard_repeat(void *data)
Ecore_Wl_Input *input;
Ecore_Wl_Window *win = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return ECORE_CALLBACK_RENEW;
@@ -974,7 +974,7 @@ _ecore_wl_input_cb_pointer_enter(void *data, struct wl_pointer *pointer EINA_UNU
Ecore_Wl_Input *input;
Ecore_Wl_Window *win = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!surface) return;
if (!(input = data)) return;
@@ -1022,7 +1022,7 @@ _ecore_wl_input_cb_pointer_leave(void *data, struct wl_pointer *pointer EINA_UNU
Ecore_Wl_Input *input;
Ecore_Wl_Window *win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!surface) return;
if (!(input = data)) return;
@@ -1055,7 +1055,7 @@ _ecore_wl_input_cb_keyboard_enter(void *data, struct wl_keyboard *keyboard EINA_
Ecore_Wl_Input *input;
Ecore_Wl_Window *win = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!surface) return;
if (!(input = data)) return;
@@ -1084,7 +1084,7 @@ _ecore_wl_input_cb_keyboard_leave(void *data, struct wl_keyboard *keyboard EINA_
Ecore_Wl_Input *input;
Ecore_Wl_Window *win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!surface) return;
if (!(input = data)) return;
@@ -1119,7 +1119,7 @@ _ecore_wl_input_cb_touch_down(void *data, struct wl_touch *touch EINA_UNUSED, un
Ecore_Wl_Input *input;
Ecore_Wl_Window *win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!surface) return;
if (!(input = data)) return;
@@ -1158,7 +1158,7 @@ _ecore_wl_input_cb_touch_up(void *data, struct wl_touch *touch EINA_UNUSED, unsi
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
if (!input->touch_focus) return;
@@ -1178,7 +1178,7 @@ _ecore_wl_input_cb_touch_motion(void *data, struct wl_touch *touch EINA_UNUSED,
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(input = data)) return;
if (!input->touch_focus) return;
@@ -1193,19 +1193,19 @@ _ecore_wl_input_cb_touch_motion(void *data, struct wl_touch *touch EINA_UNUSED,
static void
_ecore_wl_input_cb_touch_frame(void *data EINA_UNUSED, struct wl_touch *touch EINA_UNUSED)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
}
static void
_ecore_wl_input_cb_touch_cancel(void *data EINA_UNUSED, struct wl_touch *touch EINA_UNUSED)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
}
static void
_ecore_wl_input_cb_data_offer(void *data, struct wl_data_device *data_device, struct wl_data_offer *offer)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_wl_dnd_add(data, data_device, offer);
}
@@ -1213,7 +1213,7 @@ _ecore_wl_input_cb_data_offer(void *data, struct wl_data_device *data_device, st
static void
_ecore_wl_input_cb_data_enter(void *data, struct wl_data_device *data_device, unsigned int timestamp, struct wl_surface *surface, wl_fixed_t x, wl_fixed_t y, struct wl_data_offer *offer)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!surface) return;
@@ -1223,7 +1223,7 @@ _ecore_wl_input_cb_data_enter(void *data, struct wl_data_device *data_device, un
static void
_ecore_wl_input_cb_data_leave(void *data, struct wl_data_device *data_device)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_wl_dnd_leave(data, data_device);
}
@@ -1231,7 +1231,7 @@ _ecore_wl_input_cb_data_leave(void *data, struct wl_data_device *data_device)
static void
_ecore_wl_input_cb_data_motion(void *data, struct wl_data_device *data_device, unsigned int timestamp, wl_fixed_t x, wl_fixed_t y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_wl_dnd_motion(data, data_device, timestamp, x, y);
}
@@ -1239,7 +1239,7 @@ _ecore_wl_input_cb_data_motion(void *data, struct wl_data_device *data_device, u
static void
_ecore_wl_input_cb_data_drop(void *data, struct wl_data_device *data_device)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_wl_dnd_drop(data, data_device);
}
@@ -1247,7 +1247,7 @@ _ecore_wl_input_cb_data_drop(void *data, struct wl_data_device *data_device)
static void
_ecore_wl_input_cb_data_selection(void *data, struct wl_data_device *data_device, struct wl_data_offer *offer)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_wl_dnd_selection(data, data_device, offer);
}
@@ -1258,7 +1258,7 @@ _ecore_wl_input_mouse_move_send(Ecore_Wl_Input *input, Ecore_Wl_Window *win, uns
Ecore_Event_Mouse_Move *ev;
Ecore_Wl_Mouse_Down_Info *down_info;
- /* LOGFN(__FILE__, __LINE__, __FUNCTION__); */
+ /* LOGFN; */
if (!(ev = calloc(1, sizeof(Ecore_Event_Mouse_Move)))) return;
@@ -1299,7 +1299,7 @@ _ecore_wl_input_mouse_in_send(Ecore_Wl_Input *input, Ecore_Wl_Window *win, unsig
{
Ecore_Wl_Event_Mouse_In *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Mouse_In)))) return;
@@ -1324,7 +1324,7 @@ _ecore_wl_input_mouse_out_send(Ecore_Wl_Input *input, Ecore_Wl_Window *win, unsi
{
Ecore_Wl_Event_Mouse_Out *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Mouse_Out)))) return;
@@ -1349,7 +1349,7 @@ _ecore_wl_input_focus_in_send(Ecore_Wl_Input *input EINA_UNUSED, Ecore_Wl_Window
{
Ecore_Wl_Event_Focus_In *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Focus_In)))) return;
ev->timestamp = timestamp;
@@ -1362,7 +1362,7 @@ _ecore_wl_input_focus_out_send(Ecore_Wl_Input *input EINA_UNUSED, Ecore_Wl_Windo
{
Ecore_Wl_Event_Focus_Out *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Focus_Out)))) return;
ev->timestamp = timestamp;
@@ -1376,7 +1376,7 @@ _ecore_wl_input_mouse_down_send(Ecore_Wl_Input *input, Ecore_Wl_Window *win, int
Ecore_Event_Mouse_Button *ev;
Ecore_Wl_Mouse_Down_Info *down_info;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Event_Mouse_Button)))) return;
@@ -1485,7 +1485,7 @@ _ecore_wl_input_mouse_up_send(Ecore_Wl_Input *input, Ecore_Wl_Window *win, int d
Ecore_Event_Mouse_Button *ev;
Ecore_Wl_Mouse_Down_Info *down_info;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Event_Mouse_Button)))) return;
@@ -1548,7 +1548,7 @@ _ecore_wl_input_mouse_wheel_send(Ecore_Wl_Input *input, unsigned int axis, int v
{
Ecore_Event_Mouse_Wheel *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Event_Mouse_Wheel)))) return;
diff --git a/src/lib/ecore_wayland/ecore_wl_output.c b/src/lib/ecore_wayland/ecore_wl_output.c
index 596a0f80a9..cb61c077ad 100644
--- a/src/lib/ecore_wayland/ecore_wl_output.c
+++ b/src/lib/ecore_wayland/ecore_wl_output.c
@@ -10,7 +10,7 @@ _ecore_wl_output_cb_geometry(void *data, struct wl_output *wl_output EINA_UNUSED
{
Ecore_Wl_Output *output;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
output = data;
output->allocation.x = x;
@@ -27,7 +27,7 @@ _ecore_wl_output_cb_mode(void *data, struct wl_output *wl_output EINA_UNUSED, un
Ecore_Wl_Output *output;
Ecore_Wl_Display *ewd;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
output = data;
ewd = output->display;
@@ -77,7 +77,7 @@ _ecore_wl_output_add(Ecore_Wl_Display *ewd, unsigned int id)
{
Ecore_Wl_Output *output;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(output = calloc(1, sizeof(Ecore_Wl_Output)))) return;
diff --git a/src/lib/ecore_wayland/ecore_wl_private.h b/src/lib/ecore_wayland/ecore_wl_private.h
index a100b440e5..c2e0825785 100644
--- a/src/lib/ecore_wayland/ecore_wl_private.h
+++ b/src/lib/ecore_wayland/ecore_wl_private.h
@@ -17,9 +17,9 @@
# ifdef LOGFNS
# include <stdio.h>
-# define LOGFN(fl, ln, fn) printf("-ECORE-WL: %25s: %5i - %s\n", fl, ln, fn);
+# define LOGFN printf("-ECORE-WL: %25s: %5i - %s\n", __FILE__, __LINE__, __func__)
# else
-# define LOGFN(fl, ln, fn)
+# define LOGFN
# endif
extern int _ecore_wl_log_dom;
diff --git a/src/lib/ecore_wayland/ecore_wl_subsurf.c b/src/lib/ecore_wayland/ecore_wl_subsurf.c
index 3c92ce8c4e..96e35877a5 100644
--- a/src/lib/ecore_wayland/ecore_wl_subsurf.c
+++ b/src/lib/ecore_wayland/ecore_wl_subsurf.c
@@ -35,7 +35,7 @@ ecore_wl_subsurf_create(Ecore_Wl_Window *win)
Ecore_Wl_Subsurf *ess;
struct wl_subcompositor *subcomp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win) return NULL;
if (!win->surface) return NULL;
@@ -89,7 +89,7 @@ _ecore_wl_subsurf_destroy(Ecore_Wl_Subsurf *ess)
EAPI void
ecore_wl_subsurf_del(Ecore_Wl_Subsurf *ess)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return;
@@ -112,7 +112,7 @@ _ecore_wl_subsurfs_del_all(Ecore_Wl_Window *win)
EAPI struct wl_surface *
ecore_wl_subsurf_surface_get(Ecore_Wl_Subsurf *ess)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return NULL;
@@ -122,7 +122,7 @@ ecore_wl_subsurf_surface_get(Ecore_Wl_Subsurf *ess)
EAPI void
ecore_wl_subsurf_position_set(Ecore_Wl_Subsurf *ess, int x, int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return;
if (!ess->subsurface) return;
@@ -139,7 +139,7 @@ ecore_wl_subsurf_position_set(Ecore_Wl_Subsurf *ess, int x, int y)
EAPI void
ecore_wl_subsurf_position_get(Ecore_Wl_Subsurf *ess, int *x, int *y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return;
@@ -150,7 +150,7 @@ ecore_wl_subsurf_position_get(Ecore_Wl_Subsurf *ess, int *x, int *y)
EAPI void
ecore_wl_subsurf_place_above(Ecore_Wl_Subsurf *ess, struct wl_surface *surface)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return;
if (!surface) return;
@@ -162,7 +162,7 @@ ecore_wl_subsurf_place_above(Ecore_Wl_Subsurf *ess, struct wl_surface *surface)
EAPI void
ecore_wl_subsurf_place_below(Ecore_Wl_Subsurf *ess, struct wl_surface *surface)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return;
if (!surface) return;
@@ -174,7 +174,7 @@ ecore_wl_subsurf_place_below(Ecore_Wl_Subsurf *ess, struct wl_surface *surface)
EAPI void
ecore_wl_subsurf_sync_set(Ecore_Wl_Subsurf *ess, Eina_Bool val)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return;
if (!ess->subsurface) return;
@@ -195,7 +195,7 @@ ecore_wl_subsurf_opaque_region_set(Ecore_Wl_Subsurf *ess, int x, int y, int w, i
{
struct wl_region *region = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ess) return;
if (!ess->surface) return;
diff --git a/src/lib/ecore_wayland/ecore_wl_window.c b/src/lib/ecore_wayland/ecore_wl_window.c
index 39764d42e7..9504128e51 100644
--- a/src/lib/ecore_wayland/ecore_wl_window.c
+++ b/src/lib/ecore_wayland/ecore_wl_window.c
@@ -196,7 +196,7 @@ ecore_wl_window_new(Ecore_Wl_Window *parent, int x, int y, int w, int h, int buf
Ecore_Wl_Window *win;
static int _win_id = 1;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(win = calloc(1, sizeof(Ecore_Wl_Window))))
{
@@ -236,7 +236,7 @@ ecore_wl_window_free(Ecore_Wl_Window *win)
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -285,7 +285,7 @@ ecore_wl_window_move(Ecore_Wl_Window *win, int x, int y)
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -314,7 +314,7 @@ ecore_wl_window_resize(Ecore_Wl_Window *win, int w EINA_UNUSED, int h EINA_UNUSE
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -341,7 +341,7 @@ ecore_wl_window_resize(Ecore_Wl_Window *win, int w EINA_UNUSED, int h EINA_UNUSE
EAPI void
ecore_wl_window_damage(Ecore_Wl_Window *win, int x, int y, int w, int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -351,7 +351,7 @@ ecore_wl_window_damage(Ecore_Wl_Window *win, int x, int y, int w, int h)
EAPI void
ecore_wl_window_commit(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -362,7 +362,7 @@ ecore_wl_window_commit(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_buffer_attach(Ecore_Wl_Window *win, struct wl_buffer *buffer, int x, int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -391,7 +391,7 @@ ecore_wl_window_buffer_attach(Ecore_Wl_Window *win, struct wl_buffer *buffer, in
EAPI struct wl_surface *
ecore_wl_window_surface_create(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
@@ -418,7 +418,7 @@ ecore_wl_window_surface_create(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_show(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win) return;
@@ -430,7 +430,7 @@ ecore_wl_window_show(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_hide(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -450,7 +450,7 @@ ecore_wl_window_hide(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_raise(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -464,7 +464,7 @@ ecore_wl_window_maximized_set(Ecore_Wl_Window *win, Eina_Bool maximized)
{
Eina_Bool prev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -494,7 +494,7 @@ ecore_wl_window_maximized_set(Ecore_Wl_Window *win, Eina_Bool maximized)
EAPI Eina_Bool
ecore_wl_window_maximized_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
@@ -506,7 +506,7 @@ ecore_wl_window_fullscreen_set(Ecore_Wl_Window *win, Eina_Bool fullscreen)
{
Eina_Bool prev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -541,7 +541,7 @@ ecore_wl_window_fullscreen_set(Ecore_Wl_Window *win, Eina_Bool fullscreen)
EAPI Eina_Bool
ecore_wl_window_fullscreen_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
@@ -551,7 +551,7 @@ ecore_wl_window_fullscreen_get(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_transparent_set(Ecore_Wl_Window *win, Eina_Bool transparent)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -566,7 +566,7 @@ ecore_wl_window_transparent_set(Ecore_Wl_Window *win, Eina_Bool transparent)
EAPI Eina_Bool
ecore_wl_window_alpha_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
@@ -576,7 +576,7 @@ ecore_wl_window_alpha_get(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_alpha_set(Ecore_Wl_Window *win, Eina_Bool alpha)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -591,7 +591,7 @@ ecore_wl_window_alpha_set(Ecore_Wl_Window *win, Eina_Bool alpha)
EAPI Eina_Bool
ecore_wl_window_transparent_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
@@ -601,7 +601,7 @@ ecore_wl_window_transparent_get(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_update_size(Ecore_Wl_Window *win, int w, int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -622,7 +622,7 @@ ecore_wl_window_update_size(Ecore_Wl_Window *win, int w, int h)
EAPI void
ecore_wl_window_update_location(Ecore_Wl_Window *win, int x, int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -638,7 +638,7 @@ ecore_wl_window_update_location(Ecore_Wl_Window *win, int x, int y)
EAPI struct wl_surface *
ecore_wl_window_surface_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
@@ -649,7 +649,7 @@ ecore_wl_window_surface_get(Ecore_Wl_Window *win)
EAPI struct wl_shell_surface *
ecore_wl_window_shell_surface_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
@@ -660,7 +660,7 @@ ecore_wl_window_shell_surface_get(Ecore_Wl_Window *win)
EAPI struct xdg_surface *
ecore_wl_window_xdg_surface_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
@@ -680,7 +680,7 @@ ecore_wl_window_find(unsigned int id)
EAPI void
ecore_wl_window_type_set(Ecore_Wl_Window *win, Ecore_Wl_Window_Type type)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -692,7 +692,7 @@ ecore_wl_window_pointer_set(Ecore_Wl_Window *win, struct wl_surface *surface, in
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -710,7 +710,7 @@ ecore_wl_window_cursor_from_name_set(Ecore_Wl_Window *win, const char *cursor_na
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -730,7 +730,7 @@ ecore_wl_window_cursor_default_restore(Ecore_Wl_Window *win)
{
Ecore_Wl_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -744,7 +744,7 @@ ecore_wl_window_cursor_default_restore(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_parent_set(Ecore_Wl_Window *win, Ecore_Wl_Window *parent)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -759,7 +759,7 @@ ecore_wl_window_iconified_set(Ecore_Wl_Window *win, Eina_Bool iconified)
struct wl_array states;
uint32_t *s;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -798,7 +798,7 @@ ecore_wl_window_iconified_set(Ecore_Wl_Window *win, Eina_Bool iconified)
EAPI Eina_Bool
ecore_wl_window_iconified_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
@@ -833,7 +833,7 @@ ecore_wl_window_surface_find(struct wl_surface *surface)
EAPI void
ecore_wl_window_input_region_set(Ecore_Wl_Window *win, int x, int y, int w, int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -876,7 +876,7 @@ ecore_wl_window_opaque_region_set(Ecore_Wl_Window *win, int x, int y, int w, int
{
struct wl_region *region;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -914,7 +914,7 @@ ecore_wl_window_opaque_region_set(Ecore_Wl_Window *win, int x, int y, int w, int
EAPI void
ecore_wl_window_rotation_set(Ecore_Wl_Window *win, int rotation)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -925,7 +925,7 @@ ecore_wl_window_rotation_set(Ecore_Wl_Window *win, int rotation)
EAPI int
ecore_wl_window_rotation_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, 0);
@@ -936,7 +936,7 @@ ecore_wl_window_rotation_get(Ecore_Wl_Window *win)
EAPI int
ecore_wl_window_id_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, 0);
@@ -947,7 +947,7 @@ ecore_wl_window_id_get(Ecore_Wl_Window *win)
EAPI int
ecore_wl_window_surface_id_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, 0);
@@ -958,7 +958,7 @@ ecore_wl_window_surface_id_get(Ecore_Wl_Window *win)
EAPI void
ecore_wl_window_title_set(Ecore_Wl_Window *win, const char *title)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -974,7 +974,7 @@ ecore_wl_window_title_set(Ecore_Wl_Window *win, const char *title)
EAPI void
ecore_wl_window_class_name_set(Ecore_Wl_Window *win, const char *class_name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(win);
@@ -991,7 +991,7 @@ ecore_wl_window_class_name_set(Ecore_Wl_Window *win, const char *class_name)
EAPI Ecore_Wl_Input *
ecore_wl_window_keyboard_get(Ecore_Wl_Window *win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(win, 0);
@@ -1012,7 +1012,7 @@ _ecore_wl_window_cb_configure(void *data, struct wl_shell_surface *shell_surface
{
Ecore_Wl_Window *win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(win = data)) return;
@@ -1028,7 +1028,7 @@ _ecore_xdg_handle_surface_configure(void *data, struct xdg_surface *xdg_surface
Ecore_Wl_Window *win;
uint32_t *p;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(win = data)) return;
@@ -1071,7 +1071,7 @@ _ecore_xdg_handle_surface_delete(void *data, struct xdg_surface *xdg_surface EIN
{
Ecore_Wl_Window *win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(win = data)) return;
ecore_wl_window_free(win);
@@ -1082,7 +1082,7 @@ _ecore_wl_window_cb_popup_done(void *data, struct wl_shell_surface *shell_surfac
{
Ecore_Wl_Window *win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!shell_surface) return;
if (!(win = data)) return;
@@ -1094,7 +1094,7 @@ _ecore_xdg_handle_popup_done(void *data, struct xdg_popup *xdg_popup)
{
Ecore_Wl_Window *win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!xdg_popup) return;
if (!(win = data)) return;
@@ -1107,7 +1107,7 @@ _ecore_session_recovery_uuid(void *data EINA_UNUSED, struct zwp_e_session_recove
Ecore_Wl_Window *win;
char uuid_string[37];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(win = data)) return;
if (!session_recovery) return;
@@ -1122,7 +1122,7 @@ _ecore_wl_window_configure_send(Ecore_Wl_Window *win, int w, int h, int edges)
{
Ecore_Wl_Event_Window_Configure *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Window_Configure)))) return;
ev->win = win->id;
diff --git a/src/lib/ecore_wayland/ivi-application-client-protocol.h b/src/lib/ecore_wayland/ivi-application-client-protocol.h
index 84fecd84ef..7f825772df 100644
--- a/src/lib/ecore_wayland/ivi-application-client-protocol.h
+++ b/src/lib/ecore_wayland/ivi-application-client-protocol.h
@@ -44,59 +44,45 @@ extern const struct wl_interface ivi_application_interface;
#ifndef IVI_SURFACE_WARNING_CODE_ENUM
#define IVI_SURFACE_WARNING_CODE_ENUM
/**
- * ivi_surface_warning_code - possible warning codes returned by ivi
- * compositor
- * @IVI_SURFACE_WARNING_CODE_INVALID_WL_SURFACE: wl_surface is invalid
- * @IVI_SURFACE_WARNING_CODE_IVI_ID_IN_USE: ivi_id is in use and can not
- * be shared
+ * @brief Possible warning codes returned by ivi compositor
*
* These define all possible warning codes returned by ivi compositor on
- * server-side warnings. invalid_wl_surface: - wl_surface already has a
- * another role. - wl_surface is destroyed before the ivi_surface is
- * destroyed. ivi_id_in_use: ivi_id is already assigned by another
- * application.
+ * server-side warnings.
*/
enum ivi_surface_warning_code {
- IVI_SURFACE_WARNING_CODE_INVALID_WL_SURFACE = 1,
- IVI_SURFACE_WARNING_CODE_IVI_ID_IN_USE = 2,
+ IVI_SURFACE_WARNING_CODE_INVALID_WL_SURFACE = 1, /**< Surface is invalid. */
+ IVI_SURFACE_WARNING_CODE_IVI_ID_IN_USE = 2, /**< ivi_id is in use and cannot be shared. */
};
#endif /* IVI_SURFACE_WARNING_CODE_ENUM */
/**
- * ivi_surface - application interface to surface in ivi compositor
- * @visibility: visibility of surface in ivi compositor has changed
- * @warning: server-side warning detected
- *
- *
+ * @brief Application interface to surface in ivi compositor
*/
struct ivi_surface_listener {
/**
- * visibility - visibility of surface in ivi compositor has
+ * @brief Visibility of surface in ivi compositor has
* changed
- * @visibility: (none)
*
- * The new visibility state is provided in argument visibility.
- * If visibility is 0, the surface has become invisible. If
- * visibility is not 0, the surface has become visible.
+ * The new visibility state is provided in argument @p visibility.
+ * If @p visibility is 0, the surface has become invisible. If
+ * @p visibility is not 0, the surface has become visible.
*/
void (*visibility)(void *data,
struct ivi_surface *ivi_surface,
int32_t visibility);
/**
- * warning - server-side warning detected
- * @warning_code: (none)
- * @warning_text: (none)
+ * @brief Server-side warning detected
*
* The ivi compositor encountered warning while processing a
* request by this application. The warning is defined by argument
- * warning_code and optional warning_text. If the warning is
- * detected, client shall destroy the ivi_surface object.
+ * @p warning_code and optional @p warning_text. If the warning is
+ * detected, client shall destroy the @p ivi_surface object.
*
* When a warning event is sent, the compositor turns the
- * ivi_surface object inert. The ivi_surface will not deliver
+ * @p ivi_surface object inert. The @p ivi_surface will not deliver
* further events, all requests on it are ignored except 'destroy',
* and the association to the ivi_id is removed. The client should
- * destroy the ivi_surface object. If an inert ivi_surface object
+ * destroy the @p ivi_surface object. If an inert @p ivi_surface object
* is used as an argument to any other object's request, that
* request will [produce a fatal error / produce a warning / be
* ignored].
diff --git a/src/lib/ecore_wayland/session-recovery-client-protocol.h b/src/lib/ecore_wayland/session-recovery-client-protocol.h
index 24057471fb..5ea65c555d 100644
--- a/src/lib/ecore_wayland/session-recovery-client-protocol.h
+++ b/src/lib/ecore_wayland/session-recovery-client-protocol.h
@@ -17,10 +17,6 @@ struct zwp_e_session_recovery;
extern const struct wl_interface zwp_e_session_recovery_interface;
struct zwp_e_session_recovery_listener {
- /**
- * uuid - (none)
- * @uuid: (none)
- */
void (*uuid)(void *data,
struct zwp_e_session_recovery *zwp_e_session_recovery,
const char *uuid);
diff --git a/src/lib/ecore_wayland/xdg-shell-client-protocol.h b/src/lib/ecore_wayland/xdg-shell-client-protocol.h
index 24b92b01e1..aa98e593a3 100644
--- a/src/lib/ecore_wayland/xdg-shell-client-protocol.h
+++ b/src/lib/ecore_wayland/xdg-shell-client-protocol.h
@@ -1,9 +1,9 @@
-/*
+/*
* Copyright © 2008-2013 Kristian Høgsberg
* Copyright © 2013 Rafael Antognolli
* Copyright © 2013 Jasper St. Pierre
* Copyright © 2010-2013 Intel Corporation
- *
+ *
* Permission to use, copy, modify, distribute, and sell this
* software and its documentation for any purpose is hereby granted
* without fee, provided that the above copyright notice appear in
@@ -15,7 +15,7 @@
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied
* warranty.
- *
+ *
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
@@ -77,8 +77,7 @@ enum xdg_shell_error {
#endif /* XDG_SHELL_ERROR_ENUM */
/**
- * xdg_shell - create desktop-style surfaces
- * @ping: check if the client is alive
+ * @brief Create desktop-style surfaces
*
* xdg_shell allows clients to turn a wl_surface into a "real window"
* which can be dragged, resized, stacked, and moved around by the user.
@@ -87,8 +86,7 @@ enum xdg_shell_error {
*/
struct xdg_shell_listener {
/**
- * ping - check if the client is alive
- * @serial: pass this to the pong request
+ * @brief Check if the client is alive
*
* The ping event asks the client if it's still alive. Pass the
* serial specified in the event back to the compositor by sending
@@ -101,6 +99,8 @@ struct xdg_shell_listener {
*
* A compositor is free to ping in any way it wants, but a client
* must always respond to any xdg_shell object it created.
+ *
+ * @param serial Pass this to the pong request
*/
void (*ping)(void *data,
struct xdg_shell *xdg_shell,
@@ -181,16 +181,7 @@ xdg_shell_pong(struct xdg_shell *xdg_shell, uint32_t serial)
#ifndef XDG_SURFACE_RESIZE_EDGE_ENUM
#define XDG_SURFACE_RESIZE_EDGE_ENUM
/**
- * xdg_surface_resize_edge - edge values for resizing
- * @XDG_SURFACE_RESIZE_EDGE_NONE: (none)
- * @XDG_SURFACE_RESIZE_EDGE_TOP: (none)
- * @XDG_SURFACE_RESIZE_EDGE_BOTTOM: (none)
- * @XDG_SURFACE_RESIZE_EDGE_LEFT: (none)
- * @XDG_SURFACE_RESIZE_EDGE_TOP_LEFT: (none)
- * @XDG_SURFACE_RESIZE_EDGE_BOTTOM_LEFT: (none)
- * @XDG_SURFACE_RESIZE_EDGE_RIGHT: (none)
- * @XDG_SURFACE_RESIZE_EDGE_TOP_RIGHT: (none)
- * @XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT: (none)
+ * @brief Edge values for resizing
*
* These values are used to indicate which edge of a surface is being
* dragged in a resize operation. The server may use this information to
@@ -212,11 +203,7 @@ enum xdg_surface_resize_edge {
#ifndef XDG_SURFACE_STATE_ENUM
#define XDG_SURFACE_STATE_ENUM
/**
- * xdg_surface_state - types of state on the surface
- * @XDG_SURFACE_STATE_MAXIMIZED: the surface is maximized
- * @XDG_SURFACE_STATE_FULLSCREEN: the surface is fullscreen
- * @XDG_SURFACE_STATE_RESIZING: (none)
- * @XDG_SURFACE_STATE_ACTIVATED: (none)
+ * @brief Types of state on the surface
*
* The different state values used on the surface. This is designed for
* state values like maximized, fullscreen. It is paired with the configure
@@ -246,9 +233,7 @@ enum xdg_surface_state {
#endif /* XDG_SURFACE_STATE_ENUM */
/**
- * xdg_surface - A desktop window
- * @configure: suggest a surface change
- * @close: surface wants to be closed
+ * @brief A desktop window
*
* An interface that may be implemented by a wl_surface, for
* implementations that provide a desktop-style user interface.
@@ -272,11 +257,7 @@ enum xdg_surface_state {
*/
struct xdg_surface_listener {
/**
- * configure - suggest a surface change
- * @width: (none)
- * @height: (none)
- * @states: (none)
- * @serial: (none)
+ * @brief Suggest a surface change
*
* The configure event asks the client to resize its surface or
* to change its state.
@@ -311,7 +292,7 @@ struct xdg_surface_listener {
struct wl_array *states,
uint32_t serial);
/**
- * close - surface wants to be closed
+ * @brief Surface wants to be closed
*
* The close event is sent by the compositor when the user wants
* the surface to be closed. This should be equivalent to the user
@@ -462,8 +443,7 @@ xdg_surface_set_minimized(struct xdg_surface *xdg_surface)
}
/**
- * xdg_popup - short-lived, popup surfaces for menus
- * @popup_done: popup interaction is done
+ * @brief Short-lived popup surfaces for menus
*
* A popup surface is a short-lived, temporary surface that can be used
* to implement menus. It takes an explicit grab on the surface that will
@@ -513,7 +493,7 @@ xdg_surface_set_minimized(struct xdg_surface *xdg_surface)
*/
struct xdg_popup_listener {
/**
- * popup_done - popup interaction is done
+ * @brief Popup interaction is done
*
* The popup_done event is sent out when a popup is dismissed by
* the compositor. The client should destroy the xdg_popup object
diff --git a/src/lib/ecore_wayland/xdg-shell-protocol.c b/src/lib/ecore_wayland/xdg-shell-protocol.c
index 82433ea5b8..43545d6e33 100644
--- a/src/lib/ecore_wayland/xdg-shell-protocol.c
+++ b/src/lib/ecore_wayland/xdg-shell-protocol.c
@@ -1,9 +1,9 @@
-/*
+/*
* Copyright © 2008-2013 Kristian Høgsberg
* Copyright © 2013 Rafael Antognolli
* Copyright © 2013 Jasper St. Pierre
* Copyright © 2010-2013 Intel Corporation
- *
+ *
* Permission to use, copy, modify, distribute, and sell this
* software and its documentation for any purpose is hereby granted
* without fee, provided that the above copyright notice appear in
@@ -15,7 +15,7 @@
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied
* warranty.
- *
+ *
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
diff --git a/src/lib/ecore_win32/Ecore_Win32.h b/src/lib/ecore_win32/Ecore_Win32.h
index 91274ba74a..bb26a352d6 100644
--- a/src/lib/ecore_win32/Ecore_Win32.h
+++ b/src/lib/ecore_win32/Ecore_Win32.h
@@ -216,21 +216,6 @@ typedef enum
} Ecore_Win32_DnD_State;
/**
- * @typedef Ecore_Win32_Selection
- * Type of the selection.
- *
- * @since 1.16
- */
-typedef enum
-{
- ECORE_WIN32_SELECTION_PRIMARY,
- ECORE_WIN32_SELECTION_SECONDARY,
- ECORE_WIN32_SELECTION_DND,
- ECORE_WIN32_SELECTION_CLIPBOARD,
- ECORE_WIN32_SELECTION_OTHER
-} Ecore_Win32_Selection;
-
-/**
* @typedef Ecore_Win32_Window
* Abstract type for a window.
*/
@@ -326,7 +311,7 @@ typedef struct _Ecore_Win32_Event_Window_Delete_Request Ecore_Win32_Event_Window
* @typedef Ecore_Win32_Event_Selection_Clear
* Event sent when the content of the clipboard has been removed.
*
- * @since 1.16
+ * @since 1.24
*/
typedef struct _Ecore_Win32_Event_Selection_Clear Ecore_Win32_Event_Selection_Clear;
@@ -334,7 +319,7 @@ typedef struct _Ecore_Win32_Event_Selection_Clear Ecore_Win32_Event_Selection_Cl
* @typedef Ecore_Win32_Event_Selection_Notify
* Event sent when the content of the clipboard has been added.
*
- * @since 1.16
+ * @since 1.24
*/
typedef struct _Ecore_Win32_Event_Selection_Notify Ecore_Win32_Event_Selection_Notify;
@@ -490,26 +475,26 @@ struct _Ecore_Win32_Event_Window_Delete_Request
* @struct _Ecore_Win32_Event_Selection_Clear
* Event sent when the content of the clipboard has been removed.
*
- * @since 1.16
+ * @since 1.24
*/
struct _Ecore_Win32_Event_Selection_Clear
{
Ecore_Win32_Window *window; /**< The window that received the event */
unsigned long timestamp; /**< The time the event occurred */
- Ecore_Win32_Selection selection; /**< The type of the selection */
+ char *selection; /**< The type of the selection */
};
/**
* @struct _Ecore_Win32_Event_Selection_Notify
* Event sent when the content of the clipboard has been added.
*
- * @since 1.16
+ * @since 1.24
*/
struct _Ecore_Win32_Event_Selection_Notify
{
Ecore_Win32_Window *window; /**< The window that received the event */
unsigned long timestamp; /**< The time the event occurred */
- Ecore_Win32_Selection selection; /**< The type of the selection */
+ char *selection; /**< The type of the selection */
void *data; /**< The data of the selection */
};
@@ -626,6 +611,8 @@ EAPI void ecore_win32_window_raise(Ecore_Win32_Window *window);
EAPI void ecore_win32_window_lower(Ecore_Win32_Window *window);
+EAPI void ecore_win32_window_activate(Ecore_Win32_Window *window);
+
EAPI void ecore_win32_window_title_set(Ecore_Win32_Window *window,
const char *title);
@@ -638,6 +625,8 @@ EAPI void ecore_win32_window_iconified_set(Ecore_Win32_Window *window,
EAPI void ecore_win32_window_borderless_set(Ecore_Win32_Window *window,
Eina_Bool on);
+EAPI void ecore_win32_window_maximized_set(Ecore_Win32_Window *window,
+ Eina_Bool on);
EAPI void ecore_win32_window_fullscreen_set(Ecore_Win32_Window *window,
Eina_Bool on);
@@ -698,6 +687,7 @@ EAPI void ecore_win32_dnd_unregister_drop_target(Ecore_Win32_Window *window
* @param[in] window The window that owns the clipboard.
* @param[in] data The data to set.
* @param[in] size The size of the data.
+ * @param[in] mime_type The mime type describing the data in the clipboard.
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
*
* This function sets @p data of size @p size in the clipboard owned by
@@ -705,44 +695,42 @@ EAPI void ecore_win32_dnd_unregister_drop_target(Ecore_Win32_Window *window
* #EINA_FALSE otherwise. If @p window or @p data are @c NULL, or @p size
* is less than or equal to 0, this function returns #EINA_FALSE.
*
- * @since 1.16
+ * @since 1.24
*/
EAPI Eina_Bool ecore_win32_clipboard_set(const Ecore_Win32_Window *window,
const void *data,
- int size);
+ size_t size,
+ const char *mime_type);
/**
* @brief Get data from the clipboard.
*
* @param[in] window The window that owns the clipboard.
- * @param[out] data The retrieved data.
* @param[out] size The size of the data.
- * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
+ * @param[in] mime_type The mime type describing the data in the clipboard.
+ * @return The retrieved data.
*
- * This function gets @p data of size @p size from the clipboard owned by
- * @p window. This function returns #EINA_TRUE on success, and
- * #EINA_FALSE otherwise. If @p window is @c NULL, this function returns
- * #EINA_FALSE. @p data and @p size must be valid buffers.
+ * This function gets data of size @p size from the clipboard owned by
+ * @p window. @p size must be a valid buffer.
*
- * @since 1.16
+ * @since 1.24
*/
-EAPI Eina_Bool ecore_win32_clipboard_get(const Ecore_Win32_Window *window,
- void **data,
- int *size);
+EAPI void * ecore_win32_clipboard_get(const Ecore_Win32_Window *window,
+ size_t *size,
+ const char *mime_type);
/**
* @brief Cleat the clipboard.
*
* @param[in] window The window that owns the clipboard.
- * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
*
* This function clears the clipboard owned by @p window. This
* function returns #EINA_TRUE on success, and #EINA_FALSE otherwise.
* If @p window is @c NULL, this function returns #EINA_FALSE.
*
- * @since 1.16
+ * @since 1.24
*/
-EAPI Eina_Bool ecore_win32_clipboard_clear(const Ecore_Win32_Window *window);
+EAPI void ecore_win32_clipboard_clear(const Ecore_Win32_Window *window);
/**
* @typedef Ecore_Win32_Monitor
diff --git a/src/lib/ecore_win32/ecore_win32_clipboard.c b/src/lib/ecore_win32/ecore_win32_clipboard.c
index a20be680c0..da4960370a 100644
--- a/src/lib/ecore_win32/ecore_win32_clipboard.c
+++ b/src/lib/ecore_win32/ecore_win32_clipboard.c
@@ -6,6 +6,7 @@
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
+#include <evil_private.h> /* utf-8 and utf-16 conversion */
#include <Eina.h>
#include "Ecore_Win32.h"
@@ -39,10 +40,13 @@
EAPI Eina_Bool
ecore_win32_clipboard_set(const Ecore_Win32_Window *window,
const void *data,
- int size)
+ size_t size,
+ const char *mime_type)
{
HGLOBAL global;
char *d;
+ Eina_Bool supported_mime_text;
+ Eina_Bool res = EINA_FALSE;
/*
* See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms649016%28v=vs.85%29.aspx#_win32_Copying_Information_to_the_Clipboard
@@ -54,47 +58,77 @@ ecore_win32_clipboard_set(const Ecore_Win32_Window *window,
INF("setting data to the clipboard");
- if (!window || !data || (size <= 0))
- return EINA_FALSE;
+ supported_mime_text = eina_str_has_prefix(mime_type, "text/");
+ if (!supported_mime_text)
+ {
+ ERR("Mimetype %s is not handled yet", mime_type);
+ return EINA_FALSE;
+ }
- if (!OpenClipboard(window->window))
+ if (!window || !data || (size <= 0) || !OpenClipboard(window->window))
return EINA_FALSE;
if (!EmptyClipboard())
goto close_clipboard;
- global = GlobalAlloc(GMEM_MOVEABLE, size + 1);
- if (!global)
- goto close_clipboard;
-
- d = (char *)GlobalLock(global);
- if (!d)
- goto unlock_global;
-
- memcpy(d, data, size);
- d[size] = '\0';
- GlobalUnlock(global);
- SetClipboardData(CF_TEXT, global);
- CloseClipboard();
-
- return EINA_TRUE;
+ if (supported_mime_text)
+ {
+ wchar_t *text16;
+ size_t size16;
+
+ /* CF_TEXT (UTF-8) */
+
+ global = GlobalAlloc(GMEM_MOVEABLE, size);
+ if (global)
+ {
+ d = (char *)GlobalLock(global);
+ if (d)
+ {
+ memcpy(d, data, size);
+ SetClipboardData(CF_TEXT, global);
+ res = EINA_TRUE;
+ GlobalUnlock(global);
+ }
+ }
+
+ /* CF_UNICODETEXT (UTF-16) */
+
+ text16 = evil_utf8_to_utf16(data);
+ if (text16)
+ {
+ size16 = (wcslen(text16) + 1) * sizeof(wchar_t);
+
+ global = GlobalAlloc(GMEM_MOVEABLE, size16);
+ if (global)
+ {
+ d = (char *)GlobalLock(global);
+ if (d)
+ {
+ memcpy(d, text16, size16);
+ SetClipboardData(CF_UNICODETEXT, global);
+ res = EINA_TRUE;
+ GlobalUnlock(global);
+ }
+ }
+
+ free(text16);
+ }
+ }
- unlock_global:
- GlobalUnlock(global);
close_clipboard:
CloseClipboard();
- return EINA_FALSE;
+ return res;
}
-EAPI Eina_Bool
+EAPI void *
ecore_win32_clipboard_get(const Ecore_Win32_Window *window,
- void **data,
- int *size)
+ size_t *size,
+ const char *mime_type)
{
HGLOBAL global;
+ void *data;
void *d;
- void *p;
/*
* See https://msdn.microsoft.com/en-us/library/windows/desktop/ms649016%28v=vs.85%29.aspx#_win32_Pasting_Information_from_the_Clipboard
@@ -107,80 +141,100 @@ ecore_win32_clipboard_get(const Ecore_Win32_Window *window,
INF("getting data from the clipboard");
- if (!window)
- return EINA_FALSE;
-
- if (!IsClipboardFormatAvailable(CF_TEXT))
- return EINA_FALSE;
-
- if (!OpenClipboard(window->window))
- goto set_val;
-
- /* { */
- /* UINT fmt = 0; */
+ if (!eina_str_has_prefix(mime_type, "text/"))
+ {
+ ERR("Mimetype %s is not handled yet", mime_type);
+ return NULL;
+ }
- /* while (1) */
- /* { */
- /* fmt = EnumClipboardFormats(fmt); */
- /* printf(" $ Format : %x\n", fmt); */
- /* if (!fmt) */
- /* break; */
- /* } */
- /* } */
+ if (!window || !size || !OpenClipboard(window->window))
+ return NULL;
- global = GetClipboardData(CF_TEXT);
- if (!global)
- goto close_clipboard;
-
- d = GlobalLock(global);
- if (!d)
- goto unlock_global;
-
- *size = strlen(d);
- p = malloc(*size);
- if (!p)
- goto unlock_global;
+ *size = 0;
- memcpy(p, d, *size);
- *data = p;
- GlobalUnlock(global);
- CloseClipboard();
+#if 0
+ {
+ UINT fmt = 0;
+
+ while (1)
+ {
+ char name[4096];
+ int res;
+ fmt = EnumClipboardFormats(fmt);
+ res = GetClipboardFormatName(fmt, name, sizeof(name));
+ fprintf(stderr, " $ Format2 : %x %d\n", fmt, res);
+ if (res)
+ fprintf(stderr, " $ Format2 : %s\n", name);
+ else
+ fprintf(stderr, " $ Format2 : error %ld\n", GetLastError());
+ fflush(stderr);
+ if (!fmt)
+ break;
+ }
+ }
+#endif
- return EINA_TRUE;
+ if (eina_str_has_prefix(mime_type, "text/"))
+ {
+ /* first check if UTF-16 text is available */
+ global = GetClipboardData(CF_UNICODETEXT);
+ if (global)
+ {
+ d = GlobalLock(global);
+ if (d)
+ {
+ data = evil_utf16_to_utf8(d);
+ if (data)
+ {
+ *size = strlen(data);
+ GlobalUnlock(global);
+ CloseClipboard();
+ return data;
+ }
+ GlobalUnlock(global);
+ }
+ /* otherwise, we try CF_TEXT (UTF-8/ANSI) */
+ }
+
+ /* second, check if UTF-8/ANSI text is available */
+ global = GetClipboardData(CF_TEXT);
+ if (global)
+ {
+ d = GlobalLock(global);
+ if (d)
+ {
+ *size = strlen(d) + 1;
+ data = malloc(*size);
+ if (data)
+ {
+ memcpy(data, d, *size);
+ GlobalUnlock(global);
+ CloseClipboard();
+ return data;
+ }
+ else
+ *size = 0;
+
+ GlobalUnlock(global);
+ }
+ }
+ }
- unlock_global:
- GlobalUnlock(global);
- close_clipboard:
CloseClipboard();
- set_val:
- *data = NULL;
- *size = 0;
- return EINA_FALSE;
+ return NULL;
}
-EAPI Eina_Bool
+EAPI void
ecore_win32_clipboard_clear(const Ecore_Win32_Window *window)
{
INF("clearing the clipboard");
- if (!window)
- return EINA_FALSE;
-
- if (!OpenClipboard(window->window))
- return EINA_FALSE;
-
- if (!EmptyClipboard())
- goto close_clipboard;
-
- CloseClipboard();
-
- return EINA_TRUE;
+ if (!window || !OpenClipboard(window->window))
+ return;
- close_clipboard:
+ EmptyClipboard();
CloseClipboard();
-
- return EINA_FALSE;
}
/**
diff --git a/src/lib/ecore_win32/ecore_win32_event.c b/src/lib/ecore_win32/ecore_win32_event.c
index 293b16816b..6ef8a6cf76 100644
--- a/src/lib/ecore_win32/ecore_win32_event.c
+++ b/src/lib/ecore_win32/ecore_win32_event.c
@@ -9,6 +9,7 @@
#undef WIN32_LEAN_AND_MEAN
#include <windowsx.h>
+#include <evil_private.h> /* evil_utf16_to_utf8() */
#include <Eina.h>
#include <Ecore.h>
#include <Ecore_Input.h>
@@ -42,32 +43,6 @@ static Ecore_Win32_Key_Mask _ecore_win32_key_mask = 0;
static Eina_Bool _ecore_win32_ctrl_fake = EINA_FALSE;
static Eina_Bool _ecore_win32_clipboard_has_data = EINA_FALSE;
-static char *
-_ecore_win32_utf16_to_utf8(const wchar_t *text)
-{
- char *res;
- int size;
-
- /* text is used as an array, hence never NULL */
-
- size = WideCharToMultiByte(CP_UTF8, 0, text, -1, NULL, 0, NULL, NULL);
- if (size == 0)
- return NULL;
-
- res = (char *)malloc(size * sizeof(char));
- if (!res)
- return NULL;
-
- size = WideCharToMultiByte(CP_UTF8, 0, text, -1, res, size, NULL, NULL);
- if (size == 0)
- {
- free(res);
- return NULL;
- }
-
- return res;
-}
-
static unsigned int
_ecore_win32_modifiers_get(void)
{
@@ -298,7 +273,8 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
char string[2] = { 0, 0 };
const char *keyname = NULL;
const char *key = NULL;
- const char *compose = NULL;
+ char *compose = NULL;
+ unsigned char free_compose = 0;
switch (msg->window_param)
{
@@ -1202,13 +1178,17 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
if (res == -1)
{
/* dead key, but managed like normal key */
- compose = _ecore_win32_utf16_to_utf8(buf);
+ compose = evil_utf16_to_utf8(buf);
+ free_compose = 1;
}
else if (res == 0)
{
INF("No translatable character found, skipping");
if (msg->window_param >= 0x30 && msg->window_param <= 0x39)
- compose = _ecore_win32_utf16_to_utf8(buf);
+ {
+ compose = evil_utf16_to_utf8(buf);
+ free_compose = 1;
+ }
/* otherwise, compose is NULL */
}
else if (res >= 2)
@@ -1222,11 +1202,17 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
MapVirtualKey(msg->window_param, MAPVK_VK_TO_CHAR),
kbd_state, buf, 4, 0);
if (!((res != 1) && (res != -1)))
- compose = _ecore_win32_utf16_to_utf8(buf);
+ {
+ compose = evil_utf16_to_utf8(buf);
+ free_compose = 1;
+ }
/* otherwise, compose is NULL */
}
else /* res == 1 : 1 char written to buf */
- compose = _ecore_win32_utf16_to_utf8(buf);
+ {
+ compose = evil_utf16_to_utf8(buf);
+ free_compose = 1;
+ }
/*** key field ***/
@@ -1239,7 +1225,7 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
_ecore_win32_modifiers_ctrl_save(kbd_state, &modifiers_save);
if (!SetKeyboardState(kbd_state))
- return NULL;
+ goto _free_compose;
}
is_dead_key = EINA_FALSE;
@@ -1271,7 +1257,7 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
if (res == -1)
is_dead_key = EINA_TRUE;
if ((res != 1) && (res != -1))
- return NULL;
+ goto _free_compose;
}
if (is_dead_key)
@@ -1289,13 +1275,13 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
_ecore_win32_modifiers_ctrl_restore(kbd_state, modifiers_save);
if (!SetKeyboardState(kbd_state))
- return NULL;
+ goto _free_compose;
}
if (!key)
{
WRN("no keysym found for keycode %d\n", string[0]);
- return NULL;
+ goto _free_compose;
}
/*** keyname field ***/
@@ -1309,7 +1295,7 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
_ecore_win32_modifiers_win_save(kbd_state, &modifiers_save);
if (!SetKeyboardState(kbd_state))
- return NULL;
+ goto _free_compose;
is_dead_key = EINA_FALSE;
res = ToUnicode(msg->window_param,
@@ -1342,7 +1328,7 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
if (res == -1)
is_dead_key = EINA_TRUE;
if ((res != 1) && (res != -1))
- return NULL;
+ goto _free_compose;
}
if (is_dead_key)
@@ -1361,25 +1347,25 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
_ecore_win32_modifiers_win_restore(kbd_state, modifiers_save);
if (!SetKeyboardState(kbd_state))
- return NULL;
+ goto _free_compose;
if (!keyname)
{
WRN("no keysym found for keycode %d\n", string[0]);
- return NULL;
+ goto _free_compose;
}
}
}
if (!keyname || !key)
- return NULL;
+ goto _free_compose;
e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key) +
strlen(keyname) + 1 +
strlen(key) + 1 +
(compose ? strlen(compose) : 0) + 1);
if (!e)
- return NULL;
+ goto _free_compose;
e->keyname = (char *)(e + 1);
e->key = e->keyname + strlen(keyname) + 1;
@@ -1393,11 +1379,17 @@ _ecore_win32_event_keystroke_get(Ecore_Win32_Callback_Data *msg,
if (compose)
{
memcpy((char *)e->compose, compose, strlen(compose));
- free(compose);
+ if (free_compose)
+ free(compose);
}
return e;
+
+ _free_compose:
+ if (free_compose)
+ free(compose);
+ return NULL;
}
/***** Global functions definitions *****/
@@ -1961,71 +1953,116 @@ _ecore_win32_event_handle_delete_request(Ecore_Win32_Callback_Data *msg)
ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL);
}
+static void
+_ecore_win32_event_free_selection_notify(void *data EINA_UNUSED, void *ev)
+{
+ Ecore_Win32_Event_Selection_Notify *e;
+
+ e = (Ecore_Win32_Event_Selection_Notify *)ev;
+ if (e->data) free(e->data);
+ if (e->selection) free(e->selection);
+ free(e);
+}
+
+
void
_ecore_win32_event_handle_selection_notify(Ecore_Win32_Callback_Data *msg)
{
Ecore_Win32_Event_Selection_Notify *e;
HGLOBAL global;
- char *str;
INF("selection_notify");
+ e = calloc(1, sizeof(Ecore_Win32_Event_Selection_Notify));
+ if (!e) return;
+
+ e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA);
+ e->timestamp = _ecore_win32_event_last_time;
+
/*
- * we have text data in clipboard but no data before,
- * so text data has just been added
+ * we have data in clipboard but no data before,
+ * so data has just been added
*/
- if (IsClipboardFormatAvailable(CF_TEXT) && !_ecore_win32_clipboard_has_data)
+ if (!_ecore_win32_clipboard_has_data)
{
- e = calloc(1, sizeof(Ecore_Win32_Event_Selection_Notify));
- if (!e) return;
-
- e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA);
- e->timestamp = _ecore_win32_event_last_time;
- e->selection = ECORE_WIN32_SELECTION_CLIPBOARD;
-
+ /* in case someone else is owning the clipboard, we can't do anything */
if (!OpenClipboard(msg->window))
goto free_e;
- global = GetClipboardData(CF_TEXT);
- if (!global)
- goto close_clipboard;
-
- str = GlobalLock(global);
- if (str)
+ if (IsClipboardFormatAvailable(CF_UNICODETEXT))
{
- e->data = strdup(str);
- GlobalUnlock(global);
+ global = GetClipboardData(CF_UNICODETEXT);
+ if (global)
+ {
+ e->selection = strdup("text/plain;charset=utf-8");
+ if (e->selection)
+ {
+ wchar_t *d;
+
+ d = (wchar_t *)GlobalLock(global);
+ if (d)
+ e->data = evil_utf16_to_utf8(d);
+
+ GlobalUnlock(global);
+ if (e->data)
+ {
+ ecore_event_add(ECORE_WIN32_EVENT_SELECTION_NOTIFY,
+ e,
+ _ecore_win32_event_free_selection_notify,
+ NULL);
+ _ecore_win32_clipboard_has_data = EINA_TRUE;
+ CloseClipboard();
+ return;
+ }
+ }
+ }
}
+ if (IsClipboardFormatAvailable(CF_TEXT))
+ {
+ global = GetClipboardData(CF_TEXT);
+ if (global)
+ {
+ e->selection = strdup("text/plain;charset=utf-8");
+ if (e->selection)
+ {
+ char *d;
+
+ d = (char *)GlobalLock(global);
+ if (d)
+ e->data = strdup(d);
+
+ GlobalUnlock(global);
+ if (e->data)
+ {
+ ecore_event_add(ECORE_WIN32_EVENT_SELECTION_NOTIFY, e, NULL, NULL);
+
+ _ecore_win32_clipboard_has_data = EINA_TRUE;
+ CloseClipboard();
+ return;
+ }
+ }
+ }
+ }
CloseClipboard();
-
- ecore_event_add(ECORE_WIN32_EVENT_SELECTION_NOTIFY, e, NULL, NULL);
-
- _ecore_win32_clipboard_has_data = EINA_TRUE;
}
-
/*
- * we have no more text data in clipboard and data before,
+ * otherwise, we have no more text data in clipboard and data before,
* so text data has just been removed
*/
- if (!IsClipboardFormatAvailable(CF_TEXT) && _ecore_win32_clipboard_has_data)
+ else
{
- e = calloc(1, sizeof(Ecore_Win32_Event_Selection_Clear));
- if (!e) return;
-
- e->window = (void *)GetWindowLongPtr(msg->window, GWLP_USERDATA);
- e->timestamp = _ecore_win32_event_last_time;
- e->selection = ECORE_WIN32_SELECTION_CLIPBOARD;
-
- ecore_event_add(ECORE_WIN32_EVENT_SELECTION_CLEAR, e, NULL, NULL);
-
- _ecore_win32_clipboard_has_data = EINA_FALSE;
+ if (!IsClipboardFormatAvailable(CF_UNICODETEXT) &&
+ !IsClipboardFormatAvailable(CF_TEXT))
+ {
+ ecore_event_add(ECORE_WIN32_EVENT_SELECTION_CLEAR, e, NULL, NULL);
+ _ecore_win32_clipboard_has_data = EINA_FALSE;
+ return;
+ }
}
- return;
-
- close_clipboard:
- CloseClipboard();
free_e:
+ if (e->data) free(e->data);
+ if (e->selection) free(e->selection);
free(e);
}
diff --git a/src/lib/ecore_win32/ecore_win32_private.h b/src/lib/ecore_win32/ecore_win32_private.h
index 88d0e12afb..64304bb606 100644
--- a/src/lib/ecore_win32/ecore_win32_private.h
+++ b/src/lib/ecore_win32/ecore_win32_private.h
@@ -104,6 +104,7 @@ struct _Ecore_Win32_Window
unsigned int pointer_is_in : 1;
unsigned int borderless : 1;
unsigned int iconified : 1;
+ unsigned int maximized : 1;
unsigned int fullscreen : 1;
struct {
diff --git a/src/lib/ecore_win32/ecore_win32_window.c b/src/lib/ecore_win32/ecore_win32_window.c
index 628264d7b3..914e0cf9ce 100644
--- a/src/lib/ecore_win32/ecore_win32_window.c
+++ b/src/lib/ecore_win32/ecore_win32_window.c
@@ -146,6 +146,7 @@ _ecore_win32_window_internal_new(Ecore_Win32_Window *parent,
w->pointer_is_in = 0;
w->borderless = 0;
w->iconified = 0;
+ w->maximized = 0;
w->fullscreen = 0;
w->drag.x = x;
@@ -1155,6 +1156,29 @@ ecore_win32_window_lower(Ecore_Win32_Window *window)
}
/**
+ * @brief Activate the given window.
+ *
+ * @param window The window to activate.
+ *
+ * This functions activates the windows @p window. If @p window
+ * is @c NULL, this function does nothing. Otherwise, the window is
+ * activated. So if is minimized or maximized, the window is restored
+ * to its original position and size.
+ *
+ *@since 1.26
+ */
+EAPI void
+ecore_win32_window_activate(Ecore_Win32_Window *window)
+{
+ if (!window) return;
+
+ INF("activate window");
+
+ ShowWindow(window->window, SW_RESTORE);
+ window->iconified = EINA_FALSE;
+}
+
+/**
* @brief Set the title of the given window.
*
* @param window The window to set the title.
@@ -1337,6 +1361,37 @@ ecore_win32_window_borderless_set(Ecore_Win32_Window *window,
}
/**
+ * @brief Maximize or restore the given window.
+ *
+ * @param window The window.
+ * @param on @c EINA_TRUE for maximized window, @c EINA_FALSE to
+ * restore it.
+ *
+ * This function maximizes @p window if @p on is set
+ * to @c EINA_TRUE, or restores the window if it is set to
+ * @c EINA_FALSE. If @p window is @c NULL or if the state
+ * does not change (like setting to fullscreenmaximized the window is already
+ * maximized), this function does nothing.
+ *
+ * @since 1.26
+ */
+EAPI void
+ecore_win32_window_maximized_set(Ecore_Win32_Window *window,
+ Eina_Bool on)
+{
+ if (!window) return;
+
+ if (((window->maximized) && (on)) ||
+ ((!window->maximized) && (!on)))
+ return;
+
+ INF("maximizing window: %s", on ? "yes" : "no");
+
+ ShowWindow(window->window, on ? SW_MAXIMIZE : SW_RESTORE);
+ window->maximized = on;
+}
+
+/**
* @brief Set the given window to fullscreen.
*
* @param window The window.
@@ -1502,8 +1557,7 @@ ecore_win32_window_state_set(Ecore_Win32_Window *window,
window->state.maximized_horz = 1;
break;
case ECORE_WIN32_WINDOW_STATE_MAXIMIZED:
- window->state.maximized_horz = 1;
- window->state.maximized_vert = 1;
+ window->state.maximized = 1;
break;
case ECORE_WIN32_WINDOW_STATE_SHADED:
window->state.shaded = 1;
diff --git a/src/lib/ecore_win32/meson.build b/src/lib/ecore_win32/meson.build
index 1bb4589f28..b105dbae91 100644
--- a/src/lib/ecore_win32/meson.build
+++ b/src/lib/ecore_win32/meson.build
@@ -1,8 +1,14 @@
+ecore_win32_deps = []
+ecore_win32_pub_deps = []
+ecore_win32_ext_deps = []
+ecore_win32_src = []
+
if sys_windows == true
- ecore_win32_deps = [evil, eina, ecore, ecore_input]
- ecore_win32_pub_deps = []
+ ecore_win32_deps += [evil, eina, ecore, ecore_input]
+ ecore_win32_pub_deps += []
+ ecore_win32_ext_deps += []
- ecore_win32_src = [
+ ecore_win32_src += files([
'ecore_win32.c',
'ecore_win32_clipboard.c',
'ecore_win32_cursor.c',
@@ -14,7 +20,7 @@ if sys_windows == true
'ecore_win32_event.c',
'ecore_win32_monitor.c',
'ecore_win32_window.c',
- ]
+ ])
ecore_win32_header_src = [
'Ecore_Win32.h'
@@ -22,7 +28,7 @@ if sys_windows == true
ecore_win32_lib = library('ecore_win32',
ecore_win32_src,
- dependencies: ecore_win32_deps + ecore_win32_pub_deps,
+ dependencies: [ecore_win32_deps, ecore_win32_pub_deps, ecore_win32_ext_deps],
include_directories : config_dir,
install: true,
c_args : package_c_args,
diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h
index 0631a5fe6d..6a7d2507ec 100644
--- a/src/lib/ecore_wl2/Ecore_Wl2.h
+++ b/src/lib/ecore_wl2/Ecore_Wl2.h
@@ -320,6 +320,13 @@ typedef struct _Ecore_Wl2_Event_Window_Deactivate
Ecore_Wl2_Window *event_win;
} Ecore_Wl2_Event_Window_Deactivate;
+typedef struct _Ecore_Wl2_Event_Window_Common
+{
+ Ecore_Wl2_Window *win;
+ Ecore_Wl2_Window *parent_win;
+ Ecore_Wl2_Window *event_win;
+} Ecore_Wl2_Event_Window_Common;
+
typedef struct _Ecore_Wl2_Event_Window_Iconify_State_Change
{
Ecore_Wl2_Window *win;
@@ -422,6 +429,8 @@ EAPI extern int ECORE_WL2_EVENT_WINDOW_ACTIVATE; /** @since 1.20 */
EAPI extern int ECORE_WL2_EVENT_WINDOW_DEACTIVATE; /** @since 1.20 */
EAPI extern int ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE; /** @since 1.21 */
EAPI extern int ECORE_WL2_EVENT_WINDOW_OFFSCREEN; /** @since 1.21 */
+EAPI extern int ECORE_WL2_EVENT_WINDOW_CREATE; /** @since 1.25 */
+EAPI extern int ECORE_WL2_EVENT_WINDOW_DESTROY; /** @since 1.25 */
typedef struct _Ecore_Wl2_Surface_Interface
{
@@ -452,9 +461,7 @@ typedef struct _Ecore_Wl2_Surface_Interface
* @li @ref Ecore_Wl2_Display_Group
* @li @ref Ecore_Wl2_Window_Group
* @li @ref Ecore_Wl2_Output_Group
- * @li @ref Ecore_Wl2_Dnd_Group
* @li @ref Ecore_Wl2_Input_Group
- * @li @ref Ecore_Wl2_Subsurface_Group
*/
/**
@@ -553,20 +560,6 @@ EAPI Ecore_Wl2_Display *ecore_wl2_display_connect(const char *name);
EAPI void ecore_wl2_display_disconnect(Ecore_Wl2_Display *display);
/**
- * Terminate a Wayland display's main loop
- *
- * @brief This function is typically used by servers to terminate the
- * Wayland display main loop. This is usually only called when a server
- * encounters an error.
- *
- * @param display The Ecore_Wl2_Display to terminate
- *
- * @ingroup Ecore_Wl2_Display_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_display_terminate(Ecore_Wl2_Display *display);
-
-/**
* Retrieve the existing Wayland display
*
* @param display The Ecore_Wl2_Display for which to retrieve the existing
@@ -730,15 +723,15 @@ EAPI Ecore_Wl2_Window *ecore_wl2_display_window_find_by_surface(Ecore_Wl2_Displa
* Gets the connected display object
*
* @brief This function is typically used by clients to get an
- * ​existing Wayland display.
+ * existing Wayland display.
*
- * ​@param name The display target name. If @c NULL, the default
- * display is assumed.
+ * @param name The display target name. If @c NULL, the default
+ * display is assumed.
*
- * ​@return The Ecore_Wl2_Display which was connected to
+ * @return The Ecore_Wl2_Display which was connected to
*
- * ​@ingroup Ecore_Wl2_Display_Group
- * ​@since 1.24
+ * @ingroup Ecore_Wl2_Display_Group
+ * @since 1.24
*/
EAPI Ecore_Wl2_Display *ecore_wl2_connected_display_get(const char *name);
@@ -906,7 +899,7 @@ EAPI void ecore_wl2_window_alpha_set(Ecore_Wl2_Window *window, Eina_Bool alpha);
/**
* Set the opaque region of the Ecore_Wl2_Window
*
- * @param win The window
+ * @param window The window
* @param x The left point of the region.
* @param y The top point of the region.
* @param w The width of the region.
@@ -918,6 +911,20 @@ EAPI void ecore_wl2_window_alpha_set(Ecore_Wl2_Window *window, Eina_Bool alpha);
EAPI void ecore_wl2_window_opaque_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h);
/**
+ * Get the opaque region of the Ecore_Wl2_Window
+ *
+ * @param window The window
+ * @param x The left point of the region.
+ * @param y The top point of the region.
+ * @param w The width of the region.
+ * @param h The height of the region.
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.24
+ */
+EAPI void ecore_wl2_window_opaque_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h);
+
+/**
* Set the input region of the Ecore_Wl2_Window.
*
* To set an empty region, pass width and height as 0.
@@ -936,6 +943,20 @@ EAPI void ecore_wl2_window_opaque_region_set(Ecore_Wl2_Window *window, int x, in
EAPI void ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h);
/**
+ * Get the input region of the Ecore_Wl2_Window.
+ *
+ * @param window The window to set the input region of
+ * @param x The left point of the region.
+ * @param y The top point of the region.
+ * @param w The width of the region.
+ * @param h The height of the region.
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.24
+ */
+EAPI void ecore_wl2_window_input_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h);
+
+/**
* Get if a given window is maximized
*
* @param window The window to get the maximized state of
@@ -974,7 +995,7 @@ EAPI Eina_Bool ecore_wl2_window_fullscreen_get(Ecore_Wl2_Window *window);
* Set the fullscreen state of a given window
*
* @param window The window to set the fullscreen state of
- * @param maximized EINA_TRUE to set fullscreen, EINA_FALSE to unset
+ * @param fullscreen EINA_TRUE to set fullscreen, EINA_FALSE to unset
*
* @ingroup Ecore_Wl2_Window_Group
* @since 1.17
@@ -1088,21 +1109,10 @@ EAPI void ecore_wl2_window_geometry_get(Ecore_Wl2_Window *window, int *x, int *y
EAPI void ecore_wl2_window_geometry_set(Ecore_Wl2_Window *window, int x, int y, int w, int h);
/**
- * Iconify a window
- *
- * @param win The window to iconifiy
- * @param iconified The new iconified state to set
- *
- * @ingroup Ecore_Wl2_Window_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_window_iconified_set(Ecore_Wl2_Window *window, Eina_Bool iconified);
-
-/**
* Set the type of a given window
*
* @param window The window to set the type of
- * @type The Ecore_Wl2_Window_Type to set on the window
+ * @param type The Ecore_Wl2_Window_Type to set on the window
*
* @ingroup Ecore_Wl2_Window_Group
* @since 1.17
@@ -1227,54 +1237,6 @@ EAPI void ecore_wl2_window_available_rotations_set(Ecore_Wl2_Window *window, con
EAPI Eina_Bool ecore_wl2_window_available_rotations_get(Ecore_Wl2_Window *window, int **rots, unsigned int *count);
/**
- * Get list of supported auxiliary window hints
- *
- * @param window
- *
- * @return An Eina_List of supported auxiliary hints, or NULL otherwise
- *
- * @ingroup Ecore_Wl2_Window_Group
- * @since 1.20
- */
-EAPI Eina_List *ecore_wl2_window_aux_hints_supported_get(Ecore_Wl2_Window *window);
-
-/**
- * Add a supported auxiliary hint to a given window
- *
- * @param window
- * @param id
- * @param hint
- * @param val
- *
- * @ingroup Ecore_Wl2_Window_Group
- * @since 1.20
- */
-EAPI void ecore_wl2_window_aux_hint_add(Ecore_Wl2_Window *window, int id, const char *hint, const char *val);
-
-/**
- * Change an auxiliary hint on a given window
- *
- * @param window
- * @param id
- * @param val
- *
- * @ingroup Ecore_Wl2_Window_Group
- * @since 1.20
- */
-EAPI void ecore_wl2_window_aux_hint_change(Ecore_Wl2_Window *window, int id, const char *val);
-
-/**
- * Delete an auxiliary hint on a given window
- *
- * @param window
- * @param id
- *
- * @ingroup Ecore_Wl2_Window_Group
- * @since 1.20
- */
-EAPI void ecore_wl2_window_aux_hint_del(Ecore_Wl2_Window *window, int id);
-
-/**
* @brief Get the activated state of a window
*
* @param window The window to get activated state from
@@ -1301,9 +1263,21 @@ EAPI Eina_Bool ecore_wl2_window_activated_get(const Ecore_Wl2_Window *window);
EAPI void ecore_wl2_window_popup_input_set(Ecore_Wl2_Window *window, Ecore_Wl2_Input *input);
/**
+ * @brief Get the seat for a popup window to be used with grab
+ *
+ * @param window The window
+ *
+ * @return Returns Ecore_Wl2_Input if the window has an input.
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.24
+ */
+EAPI Ecore_Wl2_Input *ecore_wl2_window_popup_input_get(Ecore_Wl2_Window *window);
+
+/**
* Check if a window has a shell surface - without one it can't be visible.
*
- * @param The window to check
+ * @param win The window to check
*
* @return Returns true if the window has an associated shell surface.
*
@@ -1496,17 +1470,15 @@ EAPI Eina_Stringshare *ecore_wl2_input_name_get(Ecore_Wl2_Input *input);
EAPI Eina_Bool ecore_wl2_input_keyboard_repeat_get(const Ecore_Wl2_Input *input, double *rate, double *delay);
/**
- * Get the Evas_Device for the seat belonging to a window from an input
- *
+ * Set the keyboard repeat rate and delay of an input
* @param input The input
- * @param window The window
- *
- * @return The device object
- *
+ * @param rate Pointer to store the repeat rate (in seconds)
+ * @param rate Pointer to store the repeat delay (in seconds)
+ * @return True if repeat is enabled
* @ingroup Ecore_Wl2_Input_Group
- * @since 1.20
+ * @since 1.24
*/
-EAPI Eo *ecore_wl2_input_seat_device_get(const Ecore_Wl2_Input *input, const Ecore_Wl2_Window *window);
+EAPI Eina_Bool ecore_wl2_input_keyboard_repeat_set(Ecore_Wl2_Input *input, double rate, double delay);
/**
* Retrieves the mouse position of the seat
@@ -1550,254 +1522,14 @@ EAPI void ecore_wl2_input_pointer_set(Ecore_Wl2_Input *input, struct wl_surface
EAPI void ecore_wl2_input_cursor_from_name_set(Ecore_Wl2_Input *input, const char *cursor);
/**
- * @defgroup Ecore_Wl2_Dnd_Group Wayland Library Drag-n-Drop Functions
- * @ingroup Ecore_Wl2_Group
- *
- * Functions that deal with creating, destroying, or interacting with
- * Wayland Drag-n-Drop
- */
-
-/**
- * Set the types which are supported by a possible drag and drop operation.
- * This call initializes a data source and offeres the given mimetypes
- *
- * @param input the input where to add on the data source
- * @param types a null-terminated array of mimetypes
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_dnd_drag_types_set(Ecore_Wl2_Input *input, const char **types);
-
-/**
- * Start a drag on the given input
- *
- * @param input the input to use
- * @param window the window which is the origin of the drag operation
- * @param drag_window the window which is used as window of the visible hint.
- *
- * @return The serial for the start_drag request
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.17
- */
-EAPI uint32_t ecore_wl2_dnd_drag_start(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, Ecore_Wl2_Window *drag_window);
-
-/**
- * Call wl_data_source.set_actions on an existing source
- *
- * @param input the input to use
- *
- * @see ecore_wl2_dnd_drag_start for a more useful function.
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.20
- */
-EAPI void ecore_wl2_dnd_set_actions(Ecore_Wl2_Input *input);
-
-/**
- * End a drag started by a call to ecore_wl2_dnd_drag_start
- *
- * @param input the input object on which the drag was started
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_dnd_drag_end(Ecore_Wl2_Input *input);
-
-/**
- * Get the offer which is currently resposible for the clipboard
- *
- * @param input the input object to use
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI Ecore_Wl2_Offer* ecore_wl2_dnd_selection_get(Ecore_Wl2_Input *input);
-
-/**
- * Set the types which are available from this client
- * Later the event ECORE_WL2_EVENT_DATA_SOURCE_SEND is emitted,
- * where the caller of this api must write the data (encoded in the given mimetype) to the fd
- *
- * @param input the input to provice this types on
- * @param types a null-terminated array of mimetypes supported by the client
- *
- * @return serial of request on success, 0 on failure
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.17
- */
-EAPI uint32_t ecore_wl2_dnd_selection_set(Ecore_Wl2_Input *input, const char **types);
-
-/**
- * Clear the selection currently setted on this input.
- *
- * @param input the input to clear
- *
- * @return serial of request on success, 0 on failure
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.17
- */
-EAPI uint32_t ecore_wl2_dnd_selection_clear(Ecore_Wl2_Input *input);
-
-/**
- * @defgroup Ecore_Wl2_Subsurface_Group Functions to manipulate subsurfaces.
- * @ingroup Ecore_Wl2_Group
- *
- * Functions to manipulate wayland subsurfaces, using Ecore_Wl2_Subsurface.
- *
- * This API is intended to expose Wayland subsurface functionality, although it
- * should not be necessary for most applications to use it, as soon as we have
- * means to make Evas automatically switch Evas images to use subsurfaces.
- *
- * It can/should be used, for instance, when subsurfaces are needed to be not
- * in sync with the main window surface.
- */
-
-/**
- * Create and return a new subsurface.
- *
- * Create a new surface (and subsurface interface), with the parent surface
- * being the one associated with the given @param win.
- *
- * The @param win must be visible, otherwise there will be no surface created
- * for it yet.
- *
- * @return the allocated and initialized Ecore_Wl2_Subsurface object, or
- * NULL on failure
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI Ecore_Wl2_Subsurface *ecore_wl2_subsurface_new(Ecore_Wl2_Window *window);
-
-/**
- * Destroy the given subsurface, as well as the surface associated with it.
- *
- * @param subsurface the subsurface
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_subsurface_del(Ecore_Wl2_Subsurface *subsurface);
-
-/**
- * Get the wl_surface for this subsurface
- *
- * @param subsurface the subsurface
+ * Gets default input of a given display
*
- * @return the wl_surface associated with this subsurface, or NULL on failure
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI struct wl_surface *ecore_wl2_subsurface_surface_get(Ecore_Wl2_Subsurface *subsurface);
-
-/**
- * Set the position of this subsurface, relative to its parent surface.
- * If subsurface is defined and the x, y coordinates differ from the currently
- * tracked position, this also schedules a sub-surface position change.
+ * @param ewd The display
*
- * @param subsurface the subsurface
- * @param x coordinate in the parent surface
- * @param y coordinate in the parent surface
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_subsurface_position_set(Ecore_Wl2_Subsurface *subsurface, int x, int y);
-
-/**
- * Get the position of this subsurface, relative to its parent surface.
- * Coordinates will be returned in x and y if non-NULL.
- *
- * @param subsurface the subsurface
- * @param x coordinate in the parent surface, or NULL to ignore
- * @param y coordinate in the parent surface, or NULL to ignore
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_subsurface_position_get(Ecore_Wl2_Subsurface *subsurface, int *x, int *y);
-
-/**
- * Place subsurface on layer above a reference surface
- *
- * Moves the @param subsurface to just above the reference @param
- * surface, changing the z-order. The reference @param surface must
- * be either a sibling or parent surface, else a protocol error will
- * be generated.
- *
- * @param subsurface the subsurface
- * @param surface the sibling reference surface
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_subsurface_place_above(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
-
-/**
- * Place subsurface on layer below a reference surface
- *
- * See ecore_wl2_subsurface_place_above.
- *
- * @param subsurface the subsurface
- * @param surface the sibling reference surface
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_subsurface_place_below(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
-
-/**
- * Enables or disables sub-surface synchronization
- *
- * When synchronization is enabled, surface commits on the subsurface
- * will be cached and only applied when the parent surface's state is
- * applied. This ensures atomic updates of the parent and all of its
- * synchronized sub-surfaces.
- *
- * When synchronization is disabled, commits will apply to the pending
- * state directly without caching, just like a normal wl_surface. If
- * there are already cached events when this is set, those events are
- * applied simultaneously with the desync event.
- *
- * Attempting to enable synchronization when the subsurface already
- * thinks it's sync'd, or desync when it believes its desync'd, will
- * be trivially ignored and will not generate a Wayland event.
- *
- * See Wayland's set_desync documentation for further details and
- * exceptional cases.
- *
- * @param subsurface the subsurface
- * @param sync true to enable synchronization, false to desynchronize
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
- */
-EAPI void ecore_wl2_subsurface_sync_set(Ecore_Wl2_Subsurface *subsurface, Eina_Bool sync);
-
-/**
- * Set an opaque region for the given subsurface.
- *
- * This is an optimization hint to the compositor to allow it avoid
- * redrawing content unnecessarily. Note that marking transparent
- * content as opaque will cause repaint artifacts.
- *
- * Use a 0x0 region size to unset the opaque region.
- *
- * @param subsurface the subsurface
- * @param x coordinate in the parent surface
- * @param y coordinate in the parent surface
- * @param w width to set as opaque
- * @param h height to set as opaque
- *
- * @ingroup Ecore_Wl2_Subsurface_Group
- * @since 1.17
+ * @ingroup Ecore_Wl2_Input_Group
+ * @since 1.24
*/
-EAPI void ecore_wl2_subsurface_opaque_region_set(Ecore_Wl2_Subsurface *subsurface, int x, int y, int w, int h);
+EAPI Ecore_Wl2_Input *ecore_wl2_input_default_input_get(const Ecore_Wl2_Display *ewd);
/**
* @defgroup Ecore_Wl2_Output_Group Wayland Library Output Functions
@@ -1848,136 +1580,6 @@ EAPI int ecore_wl2_output_transform_get(Ecore_Wl2_Output *output);
EAPI int ecore_wl2_display_compositor_version_get(Ecore_Wl2_Display *disp);
/**
- * Get the actions available from the data source
- *
- * @param offer Offer object to use
- *
- * @return or´ed values from Ecore_Wl2_Drag_Action which are describing the available actions
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_actions_get(Ecore_Wl2_Offer *offer);
-
-/**
- * Set the actions which are supported by you
- *
- * @param offer Offer object to use
- * @param actions A or´ed value of mutliple Ecore_Wl2_Drag_Action values
- * @param action the preferred action out of the actions
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI void ecore_wl2_offer_actions_set(Ecore_Wl2_Offer *offer, Ecore_Wl2_Drag_Action actions, Ecore_Wl2_Drag_Action action);
-
-/**
- * Get action which is set by either the data source or in the last call of actions_set
- *
- * @param offer Offer object to use
- *
- * @return the preferred action
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_action_get(Ecore_Wl2_Offer *offer);
-
-/**
- * Get the mime types which are given by the source
- *
- * @param offer the offer to query
- *
- * @return a eina array of strdup´ed strings, this array must NOT be changed or freed
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI Eina_Array* ecore_wl2_offer_mimes_get(Ecore_Wl2_Offer *offer);
-
-/**
- * Set mimetypes you are accepting under this offer
- *
- * @param offer the offer to use
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI void ecore_wl2_offer_mimes_set(Ecore_Wl2_Offer *offer, Eina_Array *mimes);
-
-/**
- * Accept a single mime type for an offer
- *
- * @param offer the offer to use
- * @param mime_type the mime type
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.20
- */
-EAPI void ecore_wl2_offer_accept(Ecore_Wl2_Offer *offer, const char *mime_type);
-
-/**
- * Request the data from this offer.
- * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
- * There offer will be not destroyed as long as requested data is not emitted by the event.
- *
- * @param offer the offer to use
- * @param mime the mimetype to receive
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI void ecore_wl2_offer_receive(Ecore_Wl2_Offer *offer, char *mime);
-
-/**
- * Request the data from this offer on an externally managed fd.
- * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
- * There offer will be not destroyed as long as requested data is not emitted by the event.
- *
- * @param offer the offer to use
- * @param mime the mimetype to receive
- * @param fd the fd to pass for receiving
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.20
- */
-EAPI void ecore_wl2_offer_proxy_receive(Ecore_Wl2_Offer *offer, const char *mime, int fd);
-
-/**
- * End the use of a proxy received offer. This may invalidate the offer object
- *
- * @param offer the offer
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.20
- */
-EAPI void ecore_wl2_offer_proxy_receive_end(Ecore_Wl2_Offer *offer);
-
-/**
- * Check if the given offer supports the given mimetype
- *
- * @param offer the offer to use
- * @param mime the mimetype to check
- *
- * @return Returns true if the mimetype is supported by this offer, false if not
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI Eina_Bool ecore_wl2_offer_supports_mime(Ecore_Wl2_Offer *offer, const char *mime);
-
-/**
- * Mark this offer as finished
- * This will call the dnd_finished event on the source of the sender.
- *
- * @param offer the offer to use
- *
- * @ingroup Ecore_Wl2_Dnd_Group
- * @since 1.19
- */
-EAPI void ecore_wl2_offer_finish(Ecore_Wl2_Offer *offer);
-
-/**
* Disable session recovery for any further connections. Must be called
* before connecting. This is irreversible and not intended for general
* use.
@@ -2004,20 +1606,6 @@ EAPI void ecore_wl2_session_recovery_disable(void);
EAPI void ecore_wl2_window_commit(Ecore_Wl2_Window *window, Eina_Bool flush);
/**
- * Check if a wayland window's surface is in the pending state.
- *
- * A surface is pending if it's been commit but we haven't received a
- * frame callback for it yet. This mean's we're not ready to draw yet.
- *
- * @param window The window whose surface we want to check
- *
- * @return whether the window's surface is pending or not.
- *
- * @since 1.21
- */
-EAPI Eina_Bool ecore_wl2_window_pending_get(Ecore_Wl2_Window *window);
-
-/**
* Add a callback that fires when the window's surface_frame callback fires
*
* @param window The window to add a callback on
@@ -2029,10 +1617,9 @@ EAPI Eina_Bool ecore_wl2_window_pending_get(Ecore_Wl2_Window *window);
EAPI Ecore_Wl2_Frame_Cb_Handle *ecore_wl2_window_frame_callback_add(Ecore_Wl2_Window *window, Ecore_Wl2_Frame_Cb cb, void *data);
/**
- * delete a callback that fires when the window's surface_frame callback fires
+ * Delete a callback that fires when the window's surface_frame callback fires
*
- * @param window The window to add a callback on
- * @param cb The callback handle
+ * @param handle The callback handle obtained through ecore_wl2_window_frame_callback_add().
*
* @since 1.21
*/
diff --git a/src/lib/ecore_wl2/ecore_wl2.c b/src/lib/ecore_wl2/ecore_wl2.c
index d14b14aee5..f9dbda85f4 100644
--- a/src/lib/ecore_wl2/ecore_wl2.c
+++ b/src/lib/ecore_wl2/ecore_wl2.c
@@ -58,6 +58,8 @@ EAPI int ECORE_WL2_EVENT_WINDOW_ACTIVATE = 0;
EAPI int ECORE_WL2_EVENT_WINDOW_DEACTIVATE = 0;
EAPI int ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE = 0;
EAPI int ECORE_WL2_EVENT_WINDOW_OFFSCREEN = 0;
+EAPI int ECORE_WL2_EVENT_WINDOW_CREATE = 0;
+EAPI int ECORE_WL2_EVENT_WINDOW_DESTROY = 0;
EAPI int _ecore_wl2_event_window_www = -1;
EAPI int _ecore_wl2_event_window_www_drag = -1;
@@ -90,8 +92,6 @@ _ecore_wl2_surface_modules_init(void)
local_module = NULL;
return EINA_FALSE;
}
- eina_module_free(local_module);
- local_module = NULL;
return EINA_TRUE;
}
}
@@ -205,6 +205,8 @@ ecore_wl2_init(void)
ECORE_WL2_EVENT_WINDOW_DEACTIVATE = ecore_event_type_new();
ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE = ecore_event_type_new();
ECORE_WL2_EVENT_WINDOW_OFFSCREEN = ecore_event_type_new();
+ ECORE_WL2_EVENT_WINDOW_CREATE = ecore_event_type_new();
+ ECORE_WL2_EVENT_WINDOW_DESTROY = ecore_event_type_new();
if (!no_session_recovery)
no_session_recovery = !!getenv("EFL_NO_WAYLAND_SESSION_RECOVERY");
@@ -279,7 +281,9 @@ ecore_wl2_shutdown(void)
ECORE_WL2_EVENT_WINDOW_ACTIVATE,
ECORE_WL2_EVENT_WINDOW_DEACTIVATE,
ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE,
- ECORE_WL2_EVENT_WINDOW_OFFSCREEN);
+ ECORE_WL2_EVENT_WINDOW_OFFSCREEN,
+ ECORE_WL2_EVENT_WINDOW_CREATE,
+ ECORE_WL2_EVENT_WINDOW_DESTROY);
/* shutdown Ecore_Event */
ecore_event_shutdown();
diff --git a/src/lib/ecore_wl2/ecore_wl2_buffer.c b/src/lib/ecore_wl2/ecore_wl2_buffer.c
index faa811a447..386eff294f 100644
--- a/src/lib/ecore_wl2/ecore_wl2_buffer.c
+++ b/src/lib/ecore_wl2/ecore_wl2_buffer.c
@@ -17,7 +17,26 @@
#include <sys/mman.h>
#include <sys/ioctl.h>
+#if defined(__linux__)
#include <linux/dma-buf.h>
+#elif defined(__FreeBSD__)
+/* begin/end dma-buf functions used for userspace mmap. */
+struct dma_buf_sync {
+ __u64 flags;
+};
+
+#define DMA_BUF_SYNC_READ (1 << 0)
+#define DMA_BUF_SYNC_WRITE (2 << 0)
+#define DMA_BUF_SYNC_RW (DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE)
+#define DMA_BUF_SYNC_START (0 << 2)
+#define DMA_BUF_SYNC_END (1 << 2)
+#define DMA_BUF_SYNC_VALID_FLAGS_MASK \
+ (DMA_BUF_SYNC_RW | DMA_BUF_SYNC_END)
+
+#define DMA_BUF_BASE 'b'
+#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)
+#endif
+
#include "linux-dmabuf-unstable-v1-client-protocol.h"
#define SYM(lib, xx) \
@@ -352,6 +371,7 @@ _wl_shm_alloc(Buffer_Manager *self EINA_UNUSED, const char *name EINA_UNUSED, in
void *out = NULL;
char *tmp;
+ // XXX try memfd, then shm open then the below...
tmp = eina_vpath_resolve("(:usr.run:)/evas-wayland_shm-XXXXXX");
*fd = eina_file_mkstemp(tmp, &fullname);
free(tmp);
diff --git a/src/lib/ecore_wl2/ecore_wl2_display.c b/src/lib/ecore_wl2/ecore_wl2_display.c
index cc92b8f871..7a0e20cf31 100644
--- a/src/lib/ecore_wl2/ecore_wl2_display.c
+++ b/src/lib/ecore_wl2/ecore_wl2_display.c
@@ -307,15 +307,6 @@ _cb_global_add(void *data, struct wl_registry *registry, unsigned int id, const
ewd->wl.data_device_manager =
wl_registry_bind(registry, id, &wl_data_device_manager_interface, ewd->wl.data_device_manager_version);
}
- else if ((eina_streq(interface, "www")) &&
- (getenv("EFL_WAYLAND_ENABLE_WWW")))
- {
- Ecore_Wl2_Window *window;
-
- ewd->wl.www = wl_registry_bind(registry, id, &www_interface, 1);
- EINA_INLIST_FOREACH(ewd->windows, window)
- _ecore_wl2_window_www_surface_init(window);
- }
else if ((!strcmp(interface, "zwp_e_session_recovery")) &&
(!no_session_recovery))
{
@@ -335,12 +326,6 @@ _cb_global_add(void *data, struct wl_registry *registry, unsigned int id, const
EINA_INLIST_FOREACH(ewd->windows, window)
if (window->surface) efl_aux_hints_get_supported_aux_hints(ewd->wl.efl_aux_hints, window->surface);
}
- else if (!strcmp(interface, "zwp_teamwork"))
- {
- ewd->wl.teamwork =
- wl_registry_bind(registry, id,
- &zwp_teamwork_interface, EFL_TEAMWORK_VERSION);
- }
else if (!strcmp(interface, "wl_output"))
_ecore_wl2_output_add(ewd, id);
else if (!strcmp(interface, "wl_seat"))
@@ -437,7 +422,7 @@ _cb_create_prepare(void *data, Ecore_Fd_Handler *hdlr EINA_UNUSED)
wl_display_flush_clients(ewd->wl.display);
}
-static Eina_Bool
+static Eina_Bool
_recovery_timer(Ecore_Wl2_Display *ewd)
{
if (!_ecore_wl2_display_connect(ewd, 1))
@@ -452,7 +437,6 @@ _ecore_wl2_display_globals_cleanup(Ecore_Wl2_Display *ewd)
{
if (ewd->wl.session_recovery)
zwp_e_session_recovery_destroy(ewd->wl.session_recovery);
- if (ewd->wl.www) www_destroy(ewd->wl.www);
if (ewd->wl.xdg_wm_base) xdg_wm_base_destroy(ewd->wl.xdg_wm_base);
if (ewd->wl.zxdg_shell) zxdg_shell_v6_destroy(ewd->wl.zxdg_shell);
if (ewd->wl.shm) wl_shm_destroy(ewd->wl.shm);
@@ -965,17 +949,16 @@ EAPI void
ecore_wl2_display_disconnect(Ecore_Wl2_Display *display)
{
EINA_SAFETY_ON_NULL_RETURN(display);
+ int ret;
+
+ do
+ {
+ ret = wl_display_dispatch_pending(display->wl.display);
+ } while (ret > 0);
--display->refs;
if (display->refs == 0)
{
- int ret;
-
- do
- {
- ret = wl_display_dispatch_pending(display->wl.display);
- } while (ret > 0);
-
_ecore_wl2_display_cleanup(display);
wl_display_disconnect(display->wl.display);
diff --git a/src/lib/ecore_wl2/ecore_wl2_dnd.c b/src/lib/ecore_wl2/ecore_wl2_dnd.c
index fccbed468b..c9ac71fba5 100644
--- a/src/lib/ecore_wl2/ecore_wl2_dnd.c
+++ b/src/lib/ecore_wl2/ecore_wl2_dnd.c
@@ -453,7 +453,6 @@ ecore_wl2_dnd_drag_types_set(Ecore_Wl2_Input *input, const char **types)
for (type = types; *type; type++)
{
- if (!*type) continue;
t = wl_array_add(&input->data.drag.types, sizeof(*t));
if (t)
{
@@ -579,7 +578,6 @@ ecore_wl2_dnd_selection_set(Ecore_Wl2_Input *input, const char **types)
for (type = types; *type; type++)
{
- if (!*type) continue;
t = wl_array_add(&input->data.selection.types, sizeof(*t));
if (t)
{
diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c
index 67a2dcba80..0d7aaaa727 100644
--- a/src/lib/ecore_wl2/ecore_wl2_input.c
+++ b/src/lib/ecore_wl2/ecore_wl2_input.c
@@ -1173,8 +1173,11 @@ _keyboard_cb_repeat_setup(void *data, struct wl_keyboard *keyboard EINA_UNUSED,
}
input->repeat.enabled = EINA_TRUE;
- input->repeat.rate = (1.0 / rate);
- input->repeat.delay = (delay / 1000.0);
+ if (!input->repeat.changed)
+ {
+ input->repeat.rate = (1.0 / rate);
+ input->repeat.delay = (delay / 1000.0);
+ }
ev = malloc(sizeof(Ecore_Wl2_Event_Seat_Keymap_Changed));
if (ev)
{
@@ -1215,7 +1218,7 @@ _touch_cb_down(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int seri
_pointer_cb_enter(data, NULL, serial, surface, x, y);
- if ((!input->grab.window) && (input->focus.touch))
+ if ((!input->grab.window) && (input->focus.touch) && input->grab.touch_count == 1)
{
_ecore_wl2_input_grab(input, input->focus.touch, BTN_LEFT);
input->grab.timestamp = timestamp;
@@ -1232,7 +1235,7 @@ _touch_cb_up(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int serial
input = data;
if (!input) return;
- if (!input->focus.touch) return;
+ EINA_SAFETY_ON_NULL_RETURN(input->focus.touch); //if this is happening, then we are getting up events in a invalid state
input->timestamp = timestamp;
input->display->serial = serial;
@@ -1243,7 +1246,7 @@ _touch_cb_up(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int serial
if (input->grab.count) input->grab.count--;
if (input->grab.touch_count) input->grab.touch_count--;
if ((input->grab.window) && (input->grab.button == BTN_LEFT) &&
- (!input->grab.count))
+ (!input->grab.count) && !input->grab.touch_count)
_ecore_wl2_input_ungrab(input);
if (input->grab.touch_count == 0) input->focus.touch = NULL;
@@ -1615,6 +1618,7 @@ _ecore_wl2_input_add(Ecore_Wl2_Display *display, unsigned int id, unsigned int v
input->repeat.rate = 0.025;
input->repeat.delay = 0.4;
input->repeat.enabled = EINA_TRUE;
+ input->repeat.changed = EINA_FALSE;
wl_array_init(&input->data.selection.types);
wl_array_init(&input->data.drag.types);
@@ -1814,25 +1818,26 @@ ecore_wl2_input_keymap_get(const Ecore_Wl2_Input *input)
}
EAPI Eina_Bool
-ecore_wl2_input_keyboard_repeat_get(const Ecore_Wl2_Input *input, double *rate, double *delay)
+ecore_wl2_input_keyboard_repeat_set(Ecore_Wl2_Input *input, double rate, double delay)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(input, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(input->display, EINA_FALSE);
EINA_SAFETY_ON_FALSE_RETURN_VAL(input->wl.keyboard, EINA_FALSE);
- if (rate) *rate = input->repeat.rate;
- if (delay) *delay = input->repeat.delay;
+ input->repeat.rate = rate;
+ input->repeat.delay = delay;
+ input->repeat.changed = EINA_TRUE;
return input->repeat.enabled;
}
-EAPI Eo *
-ecore_wl2_input_seat_device_get(const Ecore_Wl2_Input *input, const Ecore_Wl2_Window *window)
+EAPI Eina_Bool
+ecore_wl2_input_keyboard_repeat_get(const Ecore_Wl2_Input *input, double *rate, double *delay)
{
- Ecore_Wl2_Input_Devices *devices;
- EINA_SAFETY_ON_NULL_RETURN_VAL(input, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(window, NULL);
-
- devices = _ecore_wl2_devices_get(input, window);
- return devices ? devices->seat_dev : NULL;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(input, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(input->display, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(input->wl.keyboard, EINA_FALSE);
+ if (rate) *rate = input->repeat.rate;
+ if (delay) *delay = input->repeat.delay;
+ return input->repeat.enabled;
}
EAPI void
@@ -1866,3 +1871,17 @@ ecore_wl2_input_pointer_xy_get(const Ecore_Wl2_Input *input, int *x, int *y)
if (y) *y = input->pointer.sy;
return EINA_TRUE;
}
+
+EAPI Ecore_Wl2_Input *
+ecore_wl2_input_default_input_get(const Ecore_Wl2_Display *ewd)
+{
+ Ecore_Wl2_Input *input;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ewd, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ewd->inputs, NULL);
+
+ input = ecore_wl2_display_input_find_by_name(ewd, "seat0");
+ if (!input) input = ecore_wl2_display_input_find_by_name(ewd, "default");
+
+ return input;
+}
diff --git a/src/lib/ecore_wl2/ecore_wl2_internal.h b/src/lib/ecore_wl2/ecore_wl2_internal.h
index 2b6a965b10..eb292ea67d 100644
--- a/src/lib/ecore_wl2/ecore_wl2_internal.h
+++ b/src/lib/ecore_wl2/ecore_wl2_internal.h
@@ -100,6 +100,473 @@ EAPI void ecore_wl2_window_buffer_attach(Ecore_Wl2_Window *win, void *buffer, in
*/
EAPI void ecore_wl2_window_buffer_transform_set(Ecore_Wl2_Window *window, int transform);
+/**
+ * Iconify a window
+ *
+ * @param window The window to iconifiy
+ * @param iconified The new iconified state to set
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_window_iconified_set(Ecore_Wl2_Window *window, Eina_Bool iconified);
+
+/**
+ * Check if a wayland window's surface is in the pending state.
+ *
+ * A surface is pending if it's been commit but we haven't received a
+ * frame callback for it yet. This mean's we're not ready to draw yet.
+ *
+ * @param window The window whose surface we want to check
+ *
+ * @return whether the window's surface is pending or not.
+ *
+ * @since 1.21
+ */
+EAPI Eina_Bool ecore_wl2_window_pending_get(Ecore_Wl2_Window *window);
+
+/**
+ * @defgroup Ecore_Wl2_Dnd_Group Wayland Library Drag-n-Drop Functions
+ * @ingroup Ecore_Wl2_Group
+ *
+ * Functions that deal with creating, destroying, or interacting with
+ * Wayland Drag-n-Drop
+ */
+
+/**
+ * Set the types which are supported by a possible drag and drop operation.
+ * This call initializes a data source and offeres the given mimetypes
+ *
+ * @param input the input where to add on the data source
+ * @param types a null-terminated array of mimetypes
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_dnd_drag_types_set(Ecore_Wl2_Input *input, const char **types);
+
+/**
+ * Start a drag on the given input
+ *
+ * @param input the input to use
+ * @param window the window which is the origin of the drag operation
+ * @param drag_window the window which is used as window of the visible hint.
+ *
+ * @return The serial for the start_drag request
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.17
+ */
+EAPI uint32_t ecore_wl2_dnd_drag_start(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, Ecore_Wl2_Window *drag_window);
+
+/**
+ * Call wl_data_source.set_actions on an existing source
+ *
+ * @param input the input to use
+ *
+ * @see ecore_wl2_dnd_drag_start for a more useful function.
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.20
+ */
+EAPI void ecore_wl2_dnd_set_actions(Ecore_Wl2_Input *input);
+
+/**
+ * End a drag started by a call to ecore_wl2_dnd_drag_start
+ *
+ * @param input the input object on which the drag was started
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_dnd_drag_end(Ecore_Wl2_Input *input);
+
+/**
+ * Get the offer which is currently resposible for the clipboard
+ *
+ * @param input the input object to use
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI Ecore_Wl2_Offer* ecore_wl2_dnd_selection_get(Ecore_Wl2_Input *input);
+
+/**
+ * Set the types which are available from this client
+ * Later the event ECORE_WL2_EVENT_DATA_SOURCE_SEND is emitted,
+ * where the caller of this api must write the data (encoded in the given mimetype) to the fd
+ *
+ * @param input the input to provice this types on
+ * @param types a null-terminated array of mimetypes supported by the client
+ *
+ * @return serial of request on success, 0 on failure
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.17
+ */
+EAPI uint32_t ecore_wl2_dnd_selection_set(Ecore_Wl2_Input *input, const char **types);
+
+/**
+ * Clear the selection currently setted on this input.
+ *
+ * @param input the input to clear
+ *
+ * @return serial of request on success, 0 on failure
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.17
+ */
+EAPI uint32_t ecore_wl2_dnd_selection_clear(Ecore_Wl2_Input *input);
+
+/**
+ * Get the actions available from the data source
+ *
+ * @param offer Offer object to use
+ *
+ * @return or´ed values from Ecore_Wl2_Drag_Action which are describing the available actions
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_actions_get(Ecore_Wl2_Offer *offer);
+
+/**
+ * Set the actions which are supported by you
+ *
+ * @param offer Offer object to use
+ * @param actions A or´ed value of mutliple Ecore_Wl2_Drag_Action values
+ * @param action the preferred action out of the actions
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI void ecore_wl2_offer_actions_set(Ecore_Wl2_Offer *offer, Ecore_Wl2_Drag_Action actions, Ecore_Wl2_Drag_Action action);
+
+/**
+ * Get action which is set by either the data source or in the last call of actions_set
+ *
+ * @param offer Offer object to use
+ *
+ * @return the preferred action
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_action_get(Ecore_Wl2_Offer *offer);
+
+/**
+ * Get the mime types which are given by the source
+ *
+ * @param offer the offer to query
+ *
+ * @return a eina array of strdup´ed strings, this array must NOT be changed or freed
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI Eina_Array* ecore_wl2_offer_mimes_get(Ecore_Wl2_Offer *offer);
+
+/**
+ * Set mimetypes you are accepting under this offer
+ *
+ * @param offer the offer to use
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI void ecore_wl2_offer_mimes_set(Ecore_Wl2_Offer *offer, Eina_Array *mimes);
+
+/**
+ * Accept a single mime type for an offer
+ *
+ * @param offer the offer to use
+ * @param mime_type the mime type
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.20
+ */
+EAPI void ecore_wl2_offer_accept(Ecore_Wl2_Offer *offer, const char *mime_type);
+
+/**
+ * Request the data from this offer.
+ * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
+ * There offer will be not destroyed as long as requested data is not emitted by the event.
+ *
+ * @param offer the offer to use
+ * @param mime the mimetype to receive
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI void ecore_wl2_offer_receive(Ecore_Wl2_Offer *offer, char *mime);
+
+/**
+ * Request the data from this offer on an externally managed fd.
+ * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
+ * There offer will be not destroyed as long as requested data is not emitted by the event.
+ *
+ * @param offer the offer to use
+ * @param mime the mimetype to receive
+ * @param fd the fd to pass for receiving
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.20
+ */
+EAPI void ecore_wl2_offer_proxy_receive(Ecore_Wl2_Offer *offer, const char *mime, int fd);
+
+/**
+ * End the use of a proxy received offer. This may invalidate the offer object
+ *
+ * @param offer the offer
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.20
+ */
+EAPI void ecore_wl2_offer_proxy_receive_end(Ecore_Wl2_Offer *offer);
+
+/**
+ * Check if the given offer supports the given mimetype
+ *
+ * @param offer the offer to use
+ * @param mime the mimetype to check
+ *
+ * @return Returns true if the mimetype is supported by this offer, false if not
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI Eina_Bool ecore_wl2_offer_supports_mime(Ecore_Wl2_Offer *offer, const char *mime);
+
+/**
+ * Mark this offer as finished
+ * This will call the dnd_finished event on the source of the sender.
+ *
+ * @param offer the offer to use
+ *
+ * @ingroup Ecore_Wl2_Dnd_Group
+ * @since 1.19
+ */
+EAPI void ecore_wl2_offer_finish(Ecore_Wl2_Offer *offer);
+
+/**
+ * @defgroup Ecore_Wl2_Subsurface_Group Functions to manipulate subsurfaces.
+ * @ingroup Ecore_Wl2_Group
+ *
+ * Functions to manipulate wayland subsurfaces, using Ecore_Wl2_Subsurface.
+ *
+ * This API is intended to expose Wayland subsurface functionality, although it
+ * should not be necessary for most applications to use it, as soon as we have
+ * means to make Evas automatically switch Evas images to use subsurfaces.
+ *
+ * It can/should be used, for instance, when subsurfaces are needed to be not
+ * in sync with the main window surface.
+ */
+
+/**
+ * Create and return a new subsurface.
+ *
+ * Create a new surface (and subsurface interface), with the parent surface
+ * being the one associated with the given window.
+ *
+ * @param window The window. It must be visible, otherwise there will be no surface created
+ * for it yet.
+ *
+ * @return the allocated and initialized Ecore_Wl2_Subsurface object, or
+ * NULL on failure
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI Ecore_Wl2_Subsurface *ecore_wl2_subsurface_new(Ecore_Wl2_Window *window);
+
+/**
+ * Destroy the given subsurface, as well as the surface associated with it.
+ *
+ * @param subsurface the subsurface
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_subsurface_del(Ecore_Wl2_Subsurface *subsurface);
+
+/**
+ * Get the wl_surface for this subsurface
+ *
+ * @param subsurface the subsurface
+ *
+ * @return the wl_surface associated with this subsurface, or NULL on failure
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI struct wl_surface *ecore_wl2_subsurface_surface_get(Ecore_Wl2_Subsurface *subsurface);
+
+/**
+ * Set the position of this subsurface, relative to its parent surface.
+ * If subsurface is defined and the x, y coordinates differ from the currently
+ * tracked position, this also schedules a sub-surface position change.
+ *
+ * @param subsurface the subsurface
+ * @param x coordinate in the parent surface
+ * @param y coordinate in the parent surface
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_subsurface_position_set(Ecore_Wl2_Subsurface *subsurface, int x, int y);
+
+/**
+ * Get the position of this subsurface, relative to its parent surface.
+ * Coordinates will be returned in x and y if non-NULL.
+ *
+ * @param subsurface the subsurface
+ * @param x coordinate in the parent surface, or NULL to ignore
+ * @param y coordinate in the parent surface, or NULL to ignore
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_subsurface_position_get(Ecore_Wl2_Subsurface *subsurface, int *x, int *y);
+
+/**
+ * Place subsurface on layer above a reference surface
+ *
+ * Moves the subsurface to just above the reference surface,
+ * changing the z-order. The reference surface must
+ * be either a sibling or parent surface, else a protocol error will
+ * be generated.
+ *
+ * @param subsurface the subsurface
+ * @param surface the sibling reference surface
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_subsurface_place_above(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
+
+/**
+ * Place subsurface on layer below a reference surface
+ *
+ * See ecore_wl2_subsurface_place_above.
+ *
+ * @param subsurface the subsurface
+ * @param surface the sibling reference surface
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_subsurface_place_below(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
+
+/**
+ * Enables or disables sub-surface synchronization
+ *
+ * When synchronization is enabled, surface commits on the subsurface
+ * will be cached and only applied when the parent surface's state is
+ * applied. This ensures atomic updates of the parent and all of its
+ * synchronized sub-surfaces.
+ *
+ * When synchronization is disabled, commits will apply to the pending
+ * state directly without caching, just like a normal wl_surface. If
+ * there are already cached events when this is set, those events are
+ * applied simultaneously with the desync event.
+ *
+ * Attempting to enable synchronization when the subsurface already
+ * thinks it's sync'd, or desync when it believes its desync'd, will
+ * be trivially ignored and will not generate a Wayland event.
+ *
+ * See Wayland's set_desync documentation for further details and
+ * exceptional cases.
+ *
+ * @param subsurface the subsurface
+ * @param sync true to enable synchronization, false to desynchronize
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_subsurface_sync_set(Ecore_Wl2_Subsurface *subsurface, Eina_Bool sync);
+
+/**
+ * Set an opaque region for the given subsurface.
+ *
+ * This is an optimization hint to the compositor to allow it avoid
+ * redrawing content unnecessarily. Note that marking transparent
+ * content as opaque will cause repaint artifacts.
+ *
+ * Use a 0x0 region size to unset the opaque region.
+ *
+ * @param subsurface the subsurface
+ * @param x coordinate in the parent surface
+ * @param y coordinate in the parent surface
+ * @param w width to set as opaque
+ * @param h height to set as opaque
+ *
+ * @ingroup Ecore_Wl2_Subsurface_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_subsurface_opaque_region_set(Ecore_Wl2_Subsurface *subsurface, int x, int y, int w, int h);
+
+/**
+ * Get list of supported auxiliary window hints
+ *
+ * @param window
+ *
+ * @return An Eina_List of supported auxiliary hints, or NULL otherwise
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.20
+ */
+EAPI Eina_List *ecore_wl2_window_aux_hints_supported_get(Ecore_Wl2_Window *window);
+
+/**
+ * Add a supported auxiliary hint to a given window
+ *
+ * @param window
+ * @param id
+ * @param hint
+ * @param val
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.20
+ */
+EAPI void ecore_wl2_window_aux_hint_add(Ecore_Wl2_Window *window, int id, const char *hint, const char *val);
+
+/**
+ * Change an auxiliary hint on a given window
+ *
+ * @param window
+ * @param id
+ * @param val
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.20
+ */
+EAPI void ecore_wl2_window_aux_hint_change(Ecore_Wl2_Window *window, int id, const char *val);
+
+/**
+ * Delete an auxiliary hint on a given window
+ *
+ * @param window
+ * @param id
+ *
+ * @ingroup Ecore_Wl2_Window_Group
+ * @since 1.20
+ */
+EAPI void ecore_wl2_window_aux_hint_del(Ecore_Wl2_Window *window, int id);
+
+/**
+ * Terminate a Wayland display's main loop
+ *
+ * @brief This function is typically used by servers to terminate the
+ * Wayland display main loop. This is usually only called when a server
+ * encounters an error.
+ *
+ * @param display The Ecore_Wl2_Display to terminate
+ *
+ * @ingroup Ecore_Wl2_Display_Group
+ * @since 1.17
+ */
+EAPI void ecore_wl2_display_terminate(Ecore_Wl2_Display *display);
+
# undef EAPI
# define EAPI
diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h
index 5178e8f3ea..c374c67857 100644
--- a/src/lib/ecore_wl2/ecore_wl2_private.h
+++ b/src/lib/ecore_wl2/ecore_wl2_private.h
@@ -5,12 +5,8 @@
# include "Ecore_Wl2.h"
# include "Ecore_Input.h"
# include <xkbcommon/xkbcommon-compose.h>
-# include "www-client-protocol.h"
# include "ecore_wl2_internal.h"
-# define EFL_TEAMWORK_VERSION 2
-# include "teamwork-client-protocol.h"
-
# include "session-recovery-client-protocol.h"
# include "xdg-shell-client-protocol.h"
@@ -91,10 +87,8 @@ struct _Ecore_Wl2_Display
struct zwp_linux_dmabuf_v1 *dmabuf;
struct zxdg_shell_v6 *zxdg_shell;
struct xdg_wm_base *xdg_wm_base;
- struct www *www;
struct zwp_e_session_recovery *session_recovery;
struct efl_aux_hints *efl_aux_hints;
- struct zwp_teamwork *teamwork;
struct efl_hints *efl_hints;
int compositor_version;
} wl;
@@ -182,7 +176,6 @@ struct _Ecore_Wl2_Window
struct wl_surface *surface;
void *buffer;
struct wl_callback *callback;
- struct www_surface *www_surface;
struct xdg_surface *xdg_surface;
struct xdg_toplevel *xdg_toplevel;
struct xdg_popup *xdg_popup;
@@ -266,6 +259,8 @@ struct _Ecore_Wl2_Window
Eina_Bool has_buffer : 1;
Eina_Bool updating : 1;
Eina_Bool deferred_minimize : 1;
+
+ Eina_Bool visible : 1;
};
struct _Ecore_Wl2_Output
@@ -508,6 +503,7 @@ struct _Ecore_Wl2_Input
double rate, delay;
Eina_Bool enabled : 1;
Eina_Bool repeating : 1;
+ Eina_Bool changed : 1;
} repeat;
struct
@@ -526,20 +522,6 @@ struct _Ecore_Wl2_Input
Eina_List *devices_list;
};
-typedef struct Ecore_Wl2_Event_Window_WWW
-{
- Ecore_Wl2_Window *window;
- int x_rel;
- int y_rel;
- uint32_t timestamp;
-} Ecore_Wl2_Event_Window_WWW;
-
-typedef struct Ecore_Wl2_Event_Window_WWW_Drag
-{
- Ecore_Wl2_Window *window;
- Eina_Bool dragging;
-} Ecore_Wl2_Event_Window_WWW_Drag;
-
typedef struct _Buffer_Handle Buffer_Handle;
typedef struct _Ecore_Wl2_Buffer
{
@@ -570,9 +552,6 @@ typedef struct _Ecore_Wl2_Surface
Eina_Bool alpha : 1;
} Ecore_Wl2_Surface;
-EAPI extern int _ecore_wl2_event_window_www;
-EAPI extern int _ecore_wl2_event_window_www_drag;
-
Ecore_Wl2_Window *_ecore_wl2_display_window_surface_find(Ecore_Wl2_Display *display, struct wl_surface *wl_surface);
void _display_event_free(void *d, void *event EINA_UNUSED);
@@ -602,7 +581,6 @@ void _ecore_wl2_subsurf_free(Ecore_Wl2_Subsurface *subsurf);
void _ecore_wl2_window_surface_create(Ecore_Wl2_Window *window);
void _ecore_wl2_window_shell_surface_init(Ecore_Wl2_Window *window);
-void _ecore_wl2_window_www_surface_init(Ecore_Wl2_Window *window);
void _ecore_wl2_window_semi_free(Ecore_Wl2_Window *window);
void _ecore_wl2_offer_unref(Ecore_Wl2_Offer *offer);
diff --git a/src/lib/ecore_wl2/ecore_wl2_subsurf.c b/src/lib/ecore_wl2/ecore_wl2_subsurf.c
index 980c2eed47..5409fd2b26 100644
--- a/src/lib/ecore_wl2/ecore_wl2_subsurf.c
+++ b/src/lib/ecore_wl2/ecore_wl2_subsurf.c
@@ -65,6 +65,9 @@ ecore_wl2_subsurface_new(Ecore_Wl2_Window *window)
goto sub_surf_err;
}
+ /* A sub-surface is initially in the synchronized mode. */
+ subsurf->sync = EINA_TRUE;
+
window->subsurfs =
eina_inlist_append(window->subsurfs, EINA_INLIST_GET(subsurf));
diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c
index 0085354d11..8c018ebd38 100644
--- a/src/lib/ecore_wl2/ecore_wl2_window.c
+++ b/src/lib/ecore_wl2/ecore_wl2_window.c
@@ -28,10 +28,6 @@ _ecore_wl2_window_semi_free(Ecore_Wl2_Window *window)
if (window->zxdg_surface) zxdg_surface_v6_destroy(window->zxdg_surface);
window->zxdg_surface = NULL;
- if (window->www_surface)
- www_surface_destroy(window->www_surface);
- window->www_surface = NULL;
-
if (window->surface) wl_surface_destroy(window->surface);
window->surface = NULL;
window->surface_id = -1;
@@ -132,70 +128,6 @@ _configure_complete(Ecore_Wl2_Window *window)
#include "window_v6.x"
static void
-_www_surface_end_drag(void *data, struct www_surface *www_surface EINA_UNUSED)
-{
- Ecore_Wl2_Window *window = data;
- Ecore_Wl2_Event_Window_WWW_Drag *ev;
-
- ev = malloc(sizeof(Ecore_Wl2_Event_Window_WWW_Drag));
- EINA_SAFETY_ON_NULL_RETURN(ev);
- ev->window = window;
- ev->dragging = 0;
-
- ecore_event_add(_ecore_wl2_event_window_www_drag, ev, NULL, NULL);
-}
-
-static void
-_www_surface_start_drag(void *data, struct www_surface *www_surface EINA_UNUSED)
-{
- Ecore_Wl2_Window *window = data;
- Ecore_Wl2_Event_Window_WWW_Drag *ev;
-
- ev = malloc(sizeof(Ecore_Wl2_Event_Window_WWW_Drag));
- EINA_SAFETY_ON_NULL_RETURN(ev);
- ev->window = window;
- ev->dragging = 1;
-
- ecore_event_add(_ecore_wl2_event_window_www_drag, ev, NULL, NULL);
-}
-
-static void
-_www_surface_status(void *data, struct www_surface *www_surface EINA_UNUSED, int32_t x_rel, int32_t y_rel, uint32_t timestamp)
-{
- Ecore_Wl2_Window *window = data;
- Ecore_Wl2_Event_Window_WWW *ev;
-
- ev = malloc(sizeof(Ecore_Wl2_Event_Window_WWW));
- EINA_SAFETY_ON_NULL_RETURN(ev);
- ev->window = window;
- ev->x_rel = x_rel;
- ev->y_rel = y_rel;
- ev->timestamp = timestamp;
-
- ecore_event_add(_ecore_wl2_event_window_www, ev, NULL, NULL);
-}
-
-static struct www_surface_listener _www_surface_listener =
-{
- .status = _www_surface_status,
- .start_drag = _www_surface_start_drag,
- .end_drag = _www_surface_end_drag,
-};
-
-void
-_ecore_wl2_window_www_surface_init(Ecore_Wl2_Window *window)
-{
- if (!window->surface) return;
- if (!window->display->wl.www) return;
- if (window->www_surface) return;
- window->www_surface = www_create(window->display->wl.www, window->surface);
- www_surface_set_user_data(window->www_surface, window);
- www_surface_add_listener(window->www_surface, &_www_surface_listener,
- window);
-}
-
-
-static void
_xdg_surface_cb_configure(void *data, struct xdg_surface *xdg_surface EINA_UNUSED, uint32_t serial)
{
Ecore_Wl2_Window *window;
@@ -519,6 +451,7 @@ _ecore_wl2_window_show_send(Ecore_Wl2_Window *window)
if (window->parent)
ev->parent_win = window->parent;
ev->event_win = window;
+ window->visible = EINA_TRUE;
ecore_event_add(ECORE_WL2_EVENT_WINDOW_SHOW, ev, NULL, NULL);
}
@@ -534,9 +467,27 @@ _ecore_wl2_window_hide_send(Ecore_Wl2_Window *window)
if (window->parent)
ev->parent_win = window->parent;
ev->event_win = window;
+ window->visible = EINA_FALSE;
ecore_event_add(ECORE_WL2_EVENT_WINDOW_HIDE, ev, NULL, NULL);
}
+static void
+_ecore_wl2_window_create_destroy_send(Ecore_Wl2_Window *window, Eina_Bool create)
+{
+ Ecore_Wl2_Event_Window_Common *ev;
+
+ ev = calloc(1, sizeof(Ecore_Wl2_Event_Window_Common));
+ if (!ev) return;
+
+ ev->win = window;
+ if (window->parent)
+ ev->parent_win = window->parent;
+ ev->event_win = window;
+
+ if (create) ecore_event_add(ECORE_WL2_EVENT_WINDOW_CREATE, ev, NULL, NULL);
+ else ecore_event_add(ECORE_WL2_EVENT_WINDOW_DESTROY, ev, NULL, NULL);
+}
+
EAPI Ecore_Wl2_Window *
ecore_wl2_window_new(Ecore_Wl2_Display *display, Ecore_Wl2_Window *parent, int x, int y, int w, int h)
{
@@ -569,6 +520,8 @@ ecore_wl2_window_new(Ecore_Wl2_Display *display, Ecore_Wl2_Window *parent, int x
_ecore_wl2_window_surface_create(win);
+ _ecore_wl2_window_create_destroy_send(win, EINA_TRUE);
+
return win;
}
@@ -618,7 +571,6 @@ ecore_wl2_window_show(Ecore_Wl2_Window *window)
(window->type != ECORE_WL2_WINDOW_TYPE_NONE))
{
_ecore_wl2_window_shell_surface_init(window);
- _ecore_wl2_window_www_surface_init(window);
_ecore_wl2_window_show_send(window);
}
else
@@ -628,16 +580,10 @@ ecore_wl2_window_show(Ecore_Wl2_Window *window)
EAPI void
ecore_wl2_window_hide(Ecore_Wl2_Window *window)
{
- Ecore_Wl2_Subsurface *subsurf;
- Eina_Inlist *tmp;
-
EINA_SAFETY_ON_NULL_RETURN(window);
_ecore_wl2_window_hide_send(window);
- EINA_INLIST_FOREACH_SAFE(window->subsurfs, tmp, subsurf)
- _ecore_wl2_subsurf_unmap(subsurf);
-
if (window->commit_pending)
{
/* We've probably been hidden while an animator
@@ -695,6 +641,10 @@ ecore_wl2_window_free(Ecore_Wl2_Window *window)
EINA_SAFETY_ON_NULL_RETURN(window);
+ if (window->visible) _ecore_wl2_window_hide_send(window);
+
+ _ecore_wl2_window_create_destroy_send(window, EINA_FALSE);
+
display = window->display;
EINA_INLIST_FOREACH(display->inputs, input)
@@ -720,6 +670,9 @@ ecore_wl2_window_free(Ecore_Wl2_Window *window)
if (window->class) eina_stringshare_del(window->class);
if (window->role) eina_stringshare_del(window->role);
+ if (window->wm_rot.available_rots) free(window->wm_rot.available_rots);
+ window->wm_rot.available_rots = NULL;
+
display->windows =
eina_inlist_remove(display->windows, EINA_INLIST_GET(window));
@@ -845,6 +798,17 @@ ecore_wl2_window_opaque_region_set(Ecore_Wl2_Window *window, int x, int y, int w
}
EAPI void
+ecore_wl2_window_opaque_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h)
+{
+ EINA_SAFETY_ON_NULL_RETURN(window);
+
+ if (x) *x = window->opaque.x;
+ if (y) *y = window->opaque.y;
+ if (w) *w = window->opaque.w;
+ if (h) *h = window->opaque.h;
+}
+
+EAPI void
ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h)
{
int nx = 0, ny = 0, nw = 0, nh = 0;
@@ -893,6 +857,17 @@ ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w,
window->pending.input = EINA_TRUE;
}
+EAPI void
+ecore_wl2_window_input_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h)
+{
+ EINA_SAFETY_ON_NULL_RETURN(window);
+
+ if (x) *x = window->input_rect.x;
+ if (y) *y = window->input_rect.y;
+ if (w) *w = window->input_rect.w;
+ if (h) *h = window->input_rect.h;
+}
+
EAPI Eina_Bool
ecore_wl2_window_maximized_get(Ecore_Wl2_Window *window)
{
@@ -1117,6 +1092,14 @@ ecore_wl2_window_popup_input_set(Ecore_Wl2_Window *window, Ecore_Wl2_Input *inpu
window->grab = input;
}
+EAPI Ecore_Wl2_Input *
+ecore_wl2_window_popup_input_get(Ecore_Wl2_Window *window)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(window, NULL);
+
+ return window->grab;
+}
+
EAPI Ecore_Wl2_Display *
ecore_wl2_window_display_get(const Ecore_Wl2_Window *window)
{
@@ -1203,9 +1186,24 @@ ecore_wl2_window_preferred_rotation_get(Ecore_Wl2_Window *window)
EAPI void
ecore_wl2_window_available_rotations_set(Ecore_Wl2_Window *window, const int *rots, unsigned int count)
{
+ unsigned int i = 0;
EINA_SAFETY_ON_NULL_RETURN(window);
+
+ if (window->wm_rot.available_rots)
+ {
+ free(window->wm_rot.available_rots);
+ window->wm_rot.available_rots = NULL;
+ }
window->wm_rot.count = count;
- window->wm_rot.available_rots = (int *)rots;
+
+ if (count >= 1)
+ {
+ window->wm_rot.available_rots = calloc(count, sizeof(int));
+ if (!window->wm_rot.available_rots) return;
+
+ for (; i < count; i++)
+ window->wm_rot.available_rots[i] = ((int *)rots)[i];
+ }
}
EAPI Eina_Bool
diff --git a/src/lib/ecore_wl2/meson.build b/src/lib/ecore_wl2/meson.build
index b053dc4d8a..eb88e47703 100644
--- a/src/lib/ecore_wl2/meson.build
+++ b/src/lib/ecore_wl2/meson.build
@@ -1,14 +1,13 @@
-ecore_wl2_deps = [
- dependency('wayland-client'), dependency('wayland-server'), dependency('xkbcommon'),
- wayland_protocol, dl, m, ecore, ecore_input, libdrm, buildsystem
-]
+ecore_wl2_deps = [ecore, ecore_input, buildsystem]
ecore_wl2_pub_deps = [eina, ecore]
+ecore_wl2_ext_deps = [dependency('wayland-client'), dependency('wayland-server'), dependency('xkbcommon'),
+ wayland_protocol, libdrm, buildsystem_simple, dl, m]
ecore_wl2_header_src = [
'Ecore_Wl2.h'
]
-ecore_wl2_src = [
+ecore_wl2_src = files([
'ecore_wl2_internal.h',
'ecore_wl2_subsurf.c',
'ecore_wl2_dnd.c',
@@ -20,11 +19,12 @@ ecore_wl2_src = [
'ecore_wl2_private.h',
'ecore_wl2_buffer.c',
'ecore_wl2_surface.c'
-]
+])
ecore_wl2_lib = library('ecore_wl2',
ecore_wl2_src, pub_eo_file_target,
- dependencies: ecore_wl2_deps + ecore_wl2_pub_deps,
+ c_args : package_c_args,
+ dependencies: ecore_wl2_deps + ecore_wl2_pub_deps + ecore_wl2_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
@@ -37,6 +37,11 @@ ecore_wl2 = declare_dependency(
dependencies: ecore_wl2_pub_deps,
)
+ecore_wl2_internal_headers = declare_dependency(
+ include_directories: include_directories('.'),
+ dependencies: [wayland_protocol_simple, libdrm, dependency('wayland-client'), dependency('wayland-server'), dependency('xkbcommon'),],
+)
+
install_headers(ecore_wl2_header_src,
install_dir : dir_package_include,
)
diff --git a/src/lib/ecore_x/Ecore_X.h b/src/lib/ecore_x/Ecore_X.h
index b58520c1b3..8eb235b5fb 100644
--- a/src/lib/ecore_x/Ecore_X.h
+++ b/src/lib/ecore_x/Ecore_X.h
@@ -18,6 +18,8 @@
# define EAPI
#endif // ifdef __GNUC__
+EAPI double _ecore_x_vsync_wakeup_time_get(void);
+
#define ECORE_X_VERSION_MAJOR EFL_VERSION_MAJOR
#define ECORE_X_VERSION_MINOR EFL_VERSION_MINOR
/**
@@ -2092,6 +2094,24 @@ typedef int Ecore_X_Randr_Signal_Format;
typedef int Ecore_X_Randr_Signal_Property;
typedef int Ecore_X_Randr_Connector_Type;
+typedef enum _Ecore_X_Randr_Mode_Flags
+{
+ ECORE_X_RANDR_MODE_HSYNC_POSITIVE = 0x00000001,
+ ECORE_X_RANDR_MODE_HSYNC_NEGATIVE = 0x00000002,
+ ECORE_X_RANDR_MODE_VSYNC_POSITIVE = 0x00000004,
+ ECORE_X_RANDR_MODE_VSYNC_NEGATIVE = 0x00000008,
+ ECORE_X_RANDR_MODE_INTERLACE = 0x00000010,
+ ECORE_X_RANDR_MODE_DOUBLE_SCAN = 0x00000020,
+ ECORE_X_RANDR_MODE_CSYNC = 0x00000040,
+ ECORE_X_RANDR_MODE_CSYNC_POSITIVE = 0x00000080,
+ ECORE_X_RANDR_MODE_CSYNC_NEGATIVE = 0x00000100,
+ ECORE_X_RANDR_MODE_HSKEW_PRESENT = 0x00000200,
+ ECORE_X_RANDR_MODE_BCAST = 0x00000400,
+ ECORE_X_RANDR_MODE_PIXEL_MULTIPLEX = 0x00000800,
+ ECORE_X_RANDR_MODE_DOUBLE_CLOCK = 0x00001000,
+ ECORE_X_RANDR_MODE_CLOCK_DIV_BY_2 = 0x00002000,
+} Ecore_X_Randr_Mode_Flags;
+
typedef struct _Ecore_X_Randr_Mode_Info
{
Ecore_X_ID xid;
@@ -2432,6 +2452,7 @@ EAPI void ecore_x_region_window_shape_set(Ecore_X_Region region, E
EAPI void ecore_x_region_picture_clip_set(Ecore_X_Region region, Ecore_X_Picture picture, int x_origin, int y_origin);
EAPI void ecore_x_cursor_show(void);
EAPI void ecore_x_cursor_hide(void);
+EAPI void ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num); /** @since 1.24 */
/**
* xfixes selection notification request.
@@ -2443,6 +2464,15 @@ EAPI void ecore_x_cursor_hide(void);
*/
EAPI Eina_Bool ecore_x_fixes_selection_notification_request(Ecore_X_Atom selection);
+/**
+ * xfixes selection notification request.
+ *
+ * In addition to ecore_x_fixes_selection_notification_request you can also specify for which window you want to get them
+ * @since 1.24
+ */
+EAPI Eina_Bool ecore_x_fixes_window_selection_notification_request(Ecore_X_Window window, Ecore_X_Atom selection);
+
+
/* XComposite Extension Support */
EAPI Eina_Bool ecore_x_composite_query(void);
EAPI void ecore_x_composite_redirect_window(Ecore_X_Window win, Ecore_X_Composite_Update_Type type);
@@ -2580,6 +2610,7 @@ EAPI void *ecore_x_input_device_property_get(int slot, const char *prop
EAPI void ecore_x_input_device_property_set(int slot, const char *prop, void *data, int num, Ecore_X_Atom format, int unit_size); /**< @since 1.24 */
EAPI Eina_Bool ecore_x_vsync_animator_tick_source_set(Ecore_X_Window win);
+EAPI void ecore_x_vsync_animator_tick_delay_set(double delay); /** < @since 1.26 */
typedef enum _Ecore_X_Gesture_Event_Mask
{
@@ -2772,6 +2803,11 @@ EAPI Eina_Bool ecore_x_window_keygrab_unset(Ecore_X_
EAPI void ecore_x_e_keyrouter_set(Ecore_X_Window root, Eina_Bool on); /**< @since 1.15 */ //Key router set keyrouter flag using this
EAPI Eina_Bool ecore_x_e_keyrouter_get(Ecore_X_Window root); /**< @since 1.15 */ //Client check the existence of keyrouter using this
+EAPI void ecore_x_rersource_load(const char *file); /** @since 1.26 */
+EAPI void ecore_x_resource_db_string_set(const char *key, const char *val); /** @since 1.26 */
+EAPI const char *ecore_x_resource_db_string_get(const char *key); /** @since 1.26 */
+EAPI void ecore_x_resource_db_flush(void); /** @since 1.26 */
+
#ifdef EFL_BETA_API_SUPPORT
// XXX: FIXME: re-evaluate this after looking at xdg foreign in wayland
EAPI void ecore_x_e_stack_type_set(Ecore_X_Window win, Ecore_X_Stack_Type stack_type);
diff --git a/src/lib/ecore_x/ecore_x.c b/src/lib/ecore_x/ecore_x.c
index ff603bb43b..c78e6adbb1 100644
--- a/src/lib/ecore_x/ecore_x.c
+++ b/src/lib/ecore_x/ecore_x.c
@@ -352,7 +352,7 @@ clean_up:
static Eina_Bool
_ecore_x_init1(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
#ifdef LOGRT
_logrt_init();
#endif /* ifdef LOGRT */
@@ -762,7 +762,7 @@ _ecore_x_shutdown(void)
if (!_ecore_x_disp)
return 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_event_type_flush(ECORE_X_EVENT_ANY,
ECORE_X_EVENT_MOUSE_IN,
@@ -836,6 +836,7 @@ _ecore_x_shutdown(void)
_ecore_x_input_shutdown();
_ecore_x_selection_shutdown();
_ecore_x_dnd_shutdown();
+ _ecore_x_resource_shutdown();
ecore_x_netwm_shutdown();
return 0;
@@ -928,7 +929,7 @@ ecore_x_display_get(void)
EAPI int
ecore_x_fd_get(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
return ConnectionNumber(_ecore_x_disp);
}
@@ -941,7 +942,7 @@ ecore_x_fd_get(void)
EAPI Ecore_X_Screen *
ecore_x_default_screen_get(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, NULL);
return (Ecore_X_Screen *)DefaultScreenOfDisplay(_ecore_x_disp);
}
@@ -962,7 +963,7 @@ ecore_x_screen_size_get(const Ecore_X_Screen *screen,
int *h)
{
Screen *s = (Screen *)screen;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (w) *w = 0;
if (h) *h = 0;
EINA_SAFETY_ON_NULL_RETURN(screen);
@@ -981,7 +982,7 @@ ecore_x_screen_size_get(const Ecore_X_Screen *screen,
EAPI int
ecore_x_screen_count_get(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
return ScreenCount(_ecore_x_disp);
}
@@ -1065,7 +1066,7 @@ ecore_x_double_click_time_get(void)
EAPI void
ecore_x_flush(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XFlush(_ecore_x_disp);
}
@@ -1078,7 +1079,7 @@ ecore_x_flush(void)
EAPI void
ecore_x_sync(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XSync(_ecore_x_disp, False);
}
@@ -1101,7 +1102,7 @@ ecore_x_killall(Ecore_X_Window root)
Window *children_r = NULL;
unsigned int num_children = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XGrabServer(_ecore_x_disp);
/* Tranverse window tree starting from root, and drag each
@@ -1130,7 +1131,7 @@ ecore_x_killall(Ecore_X_Window root)
EAPI void
ecore_x_kill(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XKillClient(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1159,7 +1160,7 @@ ecore_x_dpi_get(void)
{
Screen *s;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
s = DefaultScreenOfDisplay(_ecore_x_disp);
if (s->mwidth <= 0)
@@ -1286,7 +1287,7 @@ ecore_x_window_root_list(int *num_ret)
*num_ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, NULL);
num = ScreenCount(_ecore_x_disp);
roots = malloc(num * sizeof(Ecore_X_Window));
@@ -1308,7 +1309,7 @@ ecore_x_window_root_first_get(void)
int num;
Ecore_X_Window root, *roots = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
roots = ecore_x_window_root_list(&num);
if (!(roots)) return 0;
@@ -1337,7 +1338,7 @@ ecore_x_window_manage(Ecore_X_Window win)
{
XWindowAttributes att;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
if (XGetWindowAttributes(_ecore_x_disp, win, &att) != True)
return EINA_FALSE;
@@ -1369,7 +1370,7 @@ ecore_x_window_manage(Ecore_X_Window win)
EAPI void
ecore_x_window_container_manage(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_ecore_x_window_manage_succeeded && (win == ecore_x_window_root_first_get())) return;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XSelectInput(_ecore_x_disp, win,
@@ -1381,7 +1382,7 @@ ecore_x_window_container_manage(Ecore_X_Window win)
EAPI void
ecore_x_window_client_manage(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
if (_ecore_x_window_manage_succeeded && (win == ecore_x_window_root_first_get())) return;
XSelectInput(_ecore_x_disp, win,
@@ -1401,7 +1402,7 @@ ecore_x_window_client_manage(Ecore_X_Window win)
EAPI void
ecore_x_window_sniff(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
if (_ecore_x_window_manage_succeeded && (win == ecore_x_window_root_first_get())) return;
XSelectInput(_ecore_x_disp, win,
@@ -1414,7 +1415,7 @@ ecore_x_window_sniff(Ecore_X_Window win)
EAPI void
ecore_x_window_root_properties_select(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_ecore_x_window_manage_succeeded) return;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XSelectInput(_ecore_x_disp, ecore_x_window_root_first_get(), PropertyChangeMask);
@@ -1424,7 +1425,7 @@ ecore_x_window_root_properties_select(void)
EAPI void
ecore_x_window_client_sniff(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_ecore_x_window_manage_succeeded && (win == ecore_x_window_root_first_get())) return;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XSelectInput(_ecore_x_disp, win,
@@ -1446,7 +1447,7 @@ ecore_x_window_attributes_get(Ecore_X_Window win,
XWindowAttributes att;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = XGetWindowAttributes(_ecore_x_disp, win, &att);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1488,7 +1489,7 @@ ecore_x_window_attributes_get(Ecore_X_Window win,
EAPI void
ecore_x_window_save_set_add(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XAddToSaveSet(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1497,7 +1498,7 @@ ecore_x_window_save_set_add(Ecore_X_Window win)
EAPI void
ecore_x_window_save_set_del(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XRemoveFromSaveSet(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1512,7 +1513,7 @@ ecore_x_window_children_get(Ecore_X_Window win,
Window root_ret = 0, parent_ret = 0, *children_ret = NULL;
unsigned int children_ret_num = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, NULL);
success = XQueryTree(_ecore_x_disp, win, &root_ret, &parent_ret, &children_ret,
&children_ret_num);
@@ -1543,7 +1544,7 @@ ecore_x_pointer_control_set(int accel_num,
int threshold)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = !!XChangePointerControl(_ecore_x_disp, 1, 1,
accel_num, accel_denom, threshold);
@@ -1557,7 +1558,7 @@ ecore_x_pointer_control_get(int *accel_num,
int *threshold)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = !!XGetPointerControl(_ecore_x_disp,
accel_num, accel_denom, threshold);
@@ -1570,7 +1571,7 @@ ecore_x_pointer_mapping_set(unsigned char *map,
int nmap)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = (XSetPointerMapping(_ecore_x_disp, map, nmap) == MappingSuccess);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1582,7 +1583,7 @@ ecore_x_pointer_mapping_get(unsigned char *map,
int nmap)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = !!XGetPointerMapping(_ecore_x_disp, map, nmap);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1593,7 +1594,7 @@ EAPI Eina_Bool
ecore_x_pointer_grab(Ecore_X_Window win)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = (XGrabPointer(_ecore_x_disp, win, False,
ButtonPressMask | ButtonReleaseMask |
@@ -1608,7 +1609,7 @@ EAPI Eina_Bool
ecore_x_pointer_confine_grab(Ecore_X_Window win)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = (XGrabPointer(_ecore_x_disp, win, False,
ButtonPressMask | ButtonReleaseMask |
@@ -1622,7 +1623,7 @@ ecore_x_pointer_confine_grab(Ecore_X_Window win)
EAPI void
ecore_x_pointer_ungrab(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XUngrabPointer(_ecore_x_disp, CurrentTime);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1634,7 +1635,7 @@ ecore_x_pointer_warp(Ecore_X_Window win,
int y)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = !!XWarpPointer(_ecore_x_disp, None, win, 0, 0, 0, 0, x, y);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1645,7 +1646,7 @@ EAPI Eina_Bool
ecore_x_keyboard_grab(Ecore_X_Window win)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
ret = (XGrabKeyboard(_ecore_x_disp, win, False,
GrabModeAsync, GrabModeAsync,
@@ -1657,7 +1658,7 @@ ecore_x_keyboard_grab(Ecore_X_Window win)
EAPI void
ecore_x_keyboard_ungrab(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XUngrabKeyboard(_ecore_x_disp, CurrentTime);
}
@@ -1665,7 +1666,7 @@ ecore_x_keyboard_ungrab(void)
EAPI void
ecore_x_grab(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
_ecore_x_grab_count++;
if (_ecore_x_grab_count == 1)
@@ -1675,7 +1676,7 @@ ecore_x_grab(void)
EAPI void
ecore_x_ungrab(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
_ecore_x_grab_count--;
if (_ecore_x_grab_count < 0)
@@ -1696,7 +1697,7 @@ ecore_x_passive_grab_replay_func_set(Eina_Bool (*func)(void *data,
void *event),
void *data)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_window_grab_replay_func = func;
_ecore_window_grab_replay_data = data;
}
@@ -1722,7 +1723,7 @@ _ecore_x_window_button_grab_internal(Ecore_X_Window win,
unsigned int locks[8];
int i, ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
b = button;
if (b == 0)
b = AnyButton;
@@ -1836,7 +1837,7 @@ _ecore_x_window_button_ungrab_internal(Ecore_X_Window win,
unsigned int locks[8];
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
b = button;
if (b == 0)
b = AnyButton;
@@ -1928,7 +1929,7 @@ _ecore_x_window_key_grab_internal(Ecore_X_Window win,
unsigned int locks[8];
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!strncmp(key, "Keycode-", 8))
keycode = atoi(key + 8);
else
@@ -2044,7 +2045,7 @@ _ecore_x_window_key_ungrab_internal(Ecore_X_Window win,
unsigned int locks[8];
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!strncmp(key, "Keycode-", 8))
keycode = atoi(key + 8);
else
@@ -2148,7 +2149,7 @@ ecore_x_client_message32_send(Ecore_X_Window win,
XEvent xev = { 0 };
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
xev.xclient.window = win;
xev.xclient.type = ClientMessage;
@@ -2184,7 +2185,7 @@ ecore_x_client_message8_send(Ecore_X_Window win,
XEvent xev = { 0 };
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
xev.xclient.window = win;
xev.xclient.type = ClientMessage;
@@ -2214,7 +2215,7 @@ ecore_x_mouse_move_send(Ecore_X_Window win,
int rx, ry;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
@@ -2247,7 +2248,7 @@ ecore_x_mouse_down_send(Ecore_X_Window win,
int rx, ry;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
@@ -2280,7 +2281,7 @@ ecore_x_mouse_up_send(Ecore_X_Window win,
int rx, ry;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
@@ -2312,7 +2313,7 @@ ecore_x_mouse_in_send(Ecore_X_Window win,
int rx, ry;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
@@ -2346,7 +2347,7 @@ ecore_x_mouse_out_send(Ecore_X_Window win,
int rx, ry;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
@@ -2372,7 +2373,7 @@ ecore_x_mouse_out_send(Ecore_X_Window win,
EAPI void
ecore_x_focus_reset(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XSetInputFocus(_ecore_x_disp, PointerRoot, RevertToPointerRoot, CurrentTime);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -2381,7 +2382,7 @@ ecore_x_focus_reset(void)
EAPI void
ecore_x_events_allow_all(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XAllowEvents(_ecore_x_disp, AsyncBoth, CurrentTime);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -2407,7 +2408,7 @@ ecore_x_pointer_xy_get(Ecore_X_Window win,
int rx, ry, wx, wy, ret;
unsigned int mask;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
ret = XQueryPointer(_ecore_x_disp, win, &rwin, &cwin,
&rx, &ry, &wx, &wy, &mask);
@@ -2428,10 +2429,10 @@ ecore_x_pointer_root_xy_get(int *x, int *y)
int i, num;
unsigned int mask;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
root = ecore_x_window_root_list(&num);
- for (i = 0; i < num; i++)
+ for (i = 0; i < num; i++)
{
ret = XQueryPointer(_ecore_x_disp, root[i], &rwin, &cwin,
&rx, &ry, &wx, &wy, &mask);
@@ -2540,8 +2541,10 @@ ecore_x_xkb_track_state(void)
{
Eina_Bool ret = EINA_FALSE;
#ifdef ECORE_XKB
+ unsigned mask = XkbNewKeyboardNotifyMask | XkbMapNotifyMask |
+ XkbStateNotifyMask | XkbCompatMapNotifyMask;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
- ret = XkbSelectEvents(_ecore_x_disp, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask);
+ ret = XkbSelectEvents(_ecore_x_disp, XkbUseCoreKbd, mask, mask);
if (_ecore_xlib_sync) ecore_x_sync();
#endif
return ret;
diff --git a/src/lib/ecore_x/ecore_x_atoms.c b/src/lib/ecore_x/ecore_x_atoms.c
index 5276238fd4..d3d39fa29d 100644
--- a/src/lib/ecore_x/ecore_x_atoms.c
+++ b/src/lib/ecore_x/ecore_x_atoms.c
@@ -46,7 +46,7 @@ ecore_x_atom_get(const char *name)
{
Ecore_X_Atom atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
atom = XInternAtom(_ecore_x_disp, name, False);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -61,7 +61,7 @@ ecore_x_atoms_get(const char **names,
Atom *atoms_int;
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
atoms_int = alloca(num * sizeof(Atom));
XInternAtoms(_ecore_x_disp, (char **)names, num, False, atoms_int);
@@ -76,7 +76,7 @@ ecore_x_atom_name_get(Ecore_X_Atom atom)
char *name;
char *xname;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, NULL);
diff --git a/src/lib/ecore_x/ecore_x_composite.c b/src/lib/ecore_x/ecore_x_composite.c
index 913839f481..16ba2db635 100644
--- a/src/lib/ecore_x/ecore_x_composite.c
+++ b/src/lib/ecore_x/ecore_x_composite.c
@@ -38,7 +38,7 @@ _ecore_x_composite_init(void)
EAPI Eina_Bool
ecore_x_composite_query(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _composite_available;
}
@@ -49,7 +49,7 @@ ecore_x_composite_redirect_window(Ecore_X_Window win,
#ifdef ECORE_XCOMPOSITE
int update = CompositeRedirectAutomatic;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
switch (type)
{
case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
@@ -72,7 +72,7 @@ ecore_x_composite_redirect_subwindows(Ecore_X_Window win,
#ifdef ECORE_XCOMPOSITE
int update = CompositeRedirectAutomatic;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
switch (type)
{
case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
@@ -95,7 +95,7 @@ ecore_x_composite_unredirect_window(Ecore_X_Window win,
#ifdef ECORE_XCOMPOSITE
int update = CompositeRedirectAutomatic;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
switch (type)
{
case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
@@ -118,7 +118,7 @@ ecore_x_composite_unredirect_subwindows(Ecore_X_Window win,
#ifdef ECORE_XCOMPOSITE
int update = CompositeRedirectAutomatic;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
switch (type)
{
case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
@@ -139,7 +139,7 @@ ecore_x_composite_name_window_pixmap_get(Ecore_X_Window win)
{
Ecore_X_Pixmap pixmap = None;
#ifdef ECORE_XCOMPOSITE
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
pixmap = XCompositeNameWindowPixmap(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XCOMPOSITE */
@@ -180,7 +180,7 @@ EAPI void
ecore_x_composite_render_window_disable(Ecore_X_Window root)
{
#ifdef ECORE_XCOMPOSITE
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XCompositeReleaseOverlayWindow(_ecore_x_disp, root);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XCOMPOSITE */
diff --git a/src/lib/ecore_x/ecore_x_cursor.c b/src/lib/ecore_x/ecore_x_cursor.c
index 46ac42e59a..c472c02af6 100644
--- a/src/lib/ecore_x/ecore_x_cursor.c
+++ b/src/lib/ecore_x/ecore_x_cursor.c
@@ -22,7 +22,7 @@ ecore_x_cursor_new(Ecore_X_Window win,
{
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
#ifdef ECORE_XCURSOR
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_ecore_x_xcursor)
{
@@ -218,7 +218,7 @@ ecore_x_cursor_new(Ecore_X_Window win,
EAPI void
ecore_x_cursor_free(Ecore_X_Cursor c)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XFreeCursor(_ecore_x_disp, c);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -233,7 +233,7 @@ EAPI Ecore_X_Cursor
ecore_x_cursor_shape_get(int shape)
{
Ecore_X_Cursor cur;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
/* Shapes are defined in Ecore_X_Cursor.h */
cur = XCreateFontCursor(_ecore_x_disp, shape);
@@ -245,7 +245,7 @@ EAPI void
ecore_x_cursor_size_set(int size)
{
#ifdef ECORE_XCURSOR
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XcursorSetDefaultSize(_ecore_x_disp, size);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -258,7 +258,7 @@ EAPI int
ecore_x_cursor_size_get(void)
{
#ifdef ECORE_XCURSOR
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
return XcursorGetDefaultSize(_ecore_x_disp);
#else /* ifdef ECORE_XCURSOR */
diff --git a/src/lib/ecore_x/ecore_x_damage.c b/src/lib/ecore_x/ecore_x_damage.c
index c5906b4531..8a19a03d07 100644
--- a/src/lib/ecore_x/ecore_x_damage.c
+++ b/src/lib/ecore_x/ecore_x_damage.c
@@ -17,7 +17,7 @@ _ecore_x_damage_init(void)
_damage_major = 1;
_damage_minor = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (XDamageQueryVersion(_ecore_x_disp, &_damage_major, &_damage_minor))
_damage_available = EINA_TRUE;
else
@@ -41,7 +41,7 @@ ecore_x_damage_new(Ecore_X_Drawable d,
#ifdef ECORE_XDAMAGE
Ecore_X_Damage damage;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
damage = XDamageCreate(_ecore_x_disp, d, level);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -55,7 +55,7 @@ EAPI void
ecore_x_damage_free(Ecore_X_Damage damage)
{
#ifdef ECORE_XDAMAGE
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XDamageDestroy(_ecore_x_disp, damage);
#endif /* ifdef ECORE_XDAMAGE */
@@ -67,7 +67,7 @@ ecore_x_damage_subtract(Ecore_X_Damage damage,
Ecore_X_Region parts)
{
#ifdef ECORE_XDAMAGE
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XDamageSubtract(_ecore_x_disp, damage, repair, parts);
if (_ecore_xlib_sync) ecore_x_sync();
diff --git a/src/lib/ecore_x/ecore_x_dnd.c b/src/lib/ecore_x/ecore_x_dnd.c
index c5d6fd5cd2..b758be8e54 100644
--- a/src/lib/ecore_x/ecore_x_dnd.c
+++ b/src/lib/ecore_x/ecore_x_dnd.c
@@ -147,7 +147,7 @@ ecore_x_dnd_aware_set(Ecore_X_Window win,
{
Ecore_X_Atom prop_data = ECORE_X_DND_VERSION;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (on)
ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_AWARE,
XA_ATOM, 32, &prop_data, 1);
@@ -162,7 +162,7 @@ ecore_x_dnd_version_get(Ecore_X_Window win)
int num;
Version_Cache_Item *t;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
// this looks hacky - and it is, but we need a way of caching info about
// a window while dragging, because we literally query this every mouse
// move and going to and from x multiple times per move is EXPENSIVE
@@ -234,7 +234,7 @@ ecore_x_dnd_type_isset(Ecore_X_Window win,
unsigned char *data;
Ecore_X_Atom *atoms, atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_TYPE_LIST,
XA_ATOM, 32, &data, &num))
return ret;
@@ -266,10 +266,10 @@ ecore_x_dnd_type_set(Ecore_X_Window win,
unsigned char *data = NULL;
unsigned char *old_data = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = ecore_x_atom_get(type);
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (on)
{
if (ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_TYPE_LIST,
@@ -341,7 +341,7 @@ ecore_x_dnd_types_set(Ecore_X_Window win,
unsigned int i;
unsigned char *data = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!num_types)
ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_TYPE_LIST);
else
@@ -371,7 +371,7 @@ ecore_x_dnd_actions_set(Ecore_X_Window win,
unsigned int i;
unsigned char *data = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!num_actions)
ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_ACTION_LIST);
else
@@ -431,7 +431,7 @@ _ecore_x_dnd_begin(Ecore_X_Window source,
unsigned char *data,
int size)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_dnd_version_get(source))
return EINA_FALSE;
@@ -469,7 +469,7 @@ _ecore_x_dnd_drop(Eina_Bool self)
XEvent xev = { 0 };
int status = EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_source->dest)
{
xev.xany.type = ClientMessage;
@@ -553,7 +553,7 @@ ecore_x_dnd_send_status(Eina_Bool will_accept,
if (_target->state == ECORE_X_DND_TARGET_IDLE)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
memset(&xev, 0, sizeof(XEvent));
_target->will_accept = will_accept;
@@ -605,7 +605,7 @@ ecore_x_dnd_send_finished(void)
if (_target->state == ECORE_X_DND_TARGET_IDLE)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xev.xany.type = ClientMessage;
xev.xany.display = _ecore_x_disp;
xev.xclient.message_type = ECORE_X_ATOM_XDND_FINISHED;
diff --git a/src/lib/ecore_x/ecore_x_dpms.c b/src/lib/ecore_x/ecore_x_dpms.c
index ad946d45c9..b55c1992f5 100644
--- a/src/lib/ecore_x/ecore_x_dpms.c
+++ b/src/lib/ecore_x/ecore_x_dpms.c
@@ -54,7 +54,7 @@ EAPI Eina_Bool
ecore_x_dpms_capable_get(void)
{
#ifdef ECORE_XDPMS
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
return DPMSCapable(_ecore_x_disp) ? EINA_TRUE : EINA_FALSE;
#else /* ifdef ECORE_XDPMS */
@@ -74,7 +74,7 @@ ecore_x_dpms_enabled_get(void)
unsigned char state;
unsigned short power_lvl;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
DPMSInfo(_ecore_x_disp, &power_lvl, &state);
return state ? EINA_TRUE : EINA_FALSE;
@@ -99,7 +99,7 @@ ecore_x_dpms_power_level_get(void)
unsigned char state;
unsigned short power_lvl;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, -1);
DPMSInfo(_ecore_x_disp, &power_lvl, &state);
return (int)power_lvl;
@@ -117,7 +117,7 @@ EAPI void
ecore_x_dpms_enabled_set(int enabled)
{
#ifdef ECORE_XDPMS
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
if (enabled)
DPMSEnable(_ecore_x_disp);
@@ -140,7 +140,7 @@ ecore_x_dpms_timeouts_get(unsigned int *standby,
unsigned int *off)
{
#ifdef ECORE_XDPMS
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
DPMSGetTimeouts(_ecore_x_disp, (unsigned short *)standby,
(unsigned short *)suspend, (unsigned short *)off);
@@ -160,7 +160,7 @@ ecore_x_dpms_timeouts_set(unsigned int standby,
unsigned int off)
{
#ifdef ECORE_XDPMS
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
return DPMSSetTimeouts(_ecore_x_disp, standby, suspend, off) ? EINA_TRUE : EINA_FALSE;
#else /* ifdef ECORE_XDPMS */
@@ -179,7 +179,7 @@ ecore_x_dpms_timeout_standby_get(void)
#ifdef ECORE_XDPMS
unsigned short standby, suspend, off;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
return standby;
@@ -200,7 +200,7 @@ ecore_x_dpms_timeout_suspend_get(void)
#ifdef ECORE_XDPMS
unsigned short standby, suspend, off;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
return suspend;
@@ -221,7 +221,7 @@ ecore_x_dpms_timeout_off_get(void)
#ifdef ECORE_XDPMS
unsigned short standby, suspend, off;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
return off;
@@ -241,7 +241,7 @@ ecore_x_dpms_timeout_standby_set(unsigned int new_timeout)
#ifdef ECORE_XDPMS
unsigned short standby, suspend, off;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
DPMSSetTimeouts(_ecore_x_disp, new_timeout, suspend, off);
@@ -259,7 +259,7 @@ ecore_x_dpms_timeout_suspend_set(unsigned int new_timeout)
#ifdef ECORE_XDPMS
unsigned short standby, suspend, off;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
DPMSSetTimeouts(_ecore_x_disp, standby, new_timeout, off);
@@ -277,7 +277,7 @@ ecore_x_dpms_timeout_off_set(unsigned int new_timeout)
#ifdef ECORE_XDPMS
unsigned short standby, suspend, off;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
DPMSSetTimeouts(_ecore_x_disp, standby, suspend, new_timeout);
@@ -293,7 +293,7 @@ EAPI void
ecore_x_dpms_force(Eina_Bool on)
{
#ifdef ECORE_XDPMS
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
if (on) DPMSForceLevel(_ecore_x_disp, DPMSModeOn);
else DPMSForceLevel(_ecore_x_disp, DPMSModeOff);
diff --git a/src/lib/ecore_x/ecore_x_drawable.c b/src/lib/ecore_x/ecore_x_drawable.c
index e0edbe2776..dcd457c67d 100644
--- a/src/lib/ecore_x/ecore_x_drawable.c
+++ b/src/lib/ecore_x/ecore_x_drawable.c
@@ -31,7 +31,7 @@ ecore_x_drawable_geometry_get(Ecore_X_Drawable d,
int ret_x, ret_y;
unsigned int ret_w, ret_h, dummy_border, dummy_depth;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &ret_x, &ret_y,
&ret_w, &ret_h, &dummy_border, &dummy_depth))
@@ -69,7 +69,7 @@ ecore_x_drawable_border_width_get(Ecore_X_Drawable d)
int dummy_x, dummy_y;
unsigned int dummy_w, dummy_h, border_ret, dummy_depth;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
&dummy_w, &dummy_h, &border_ret, &dummy_depth))
@@ -91,7 +91,7 @@ ecore_x_drawable_depth_get(Ecore_X_Drawable d)
int dummy_x, dummy_y;
unsigned int dummy_w, dummy_h, dummy_border, depth_ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
&dummy_w, &dummy_h, &dummy_border, &depth_ret))
@@ -117,7 +117,7 @@ ecore_x_drawable_rectangle_fill(Ecore_X_Drawable d,
int width,
int height)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
XFillRectangle(_ecore_x_disp, d, gc, x, y, width, height);
if (_ecore_xlib_sync) ecore_x_sync();
diff --git a/src/lib/ecore_x/ecore_x_e.c b/src/lib/ecore_x/ecore_x_e.c
index 8d10ba0700..8ba71739f0 100644
--- a/src/lib/ecore_x/ecore_x_e.c
+++ b/src/lib/ecore_x/ecore_x_e.c
@@ -34,7 +34,7 @@ ecore_x_e_frame_size_set(Ecore_X_Window win,
{
unsigned int frames[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
frames[0] = fl;
frames[1] = fr;
frames[2] = ft;
@@ -46,7 +46,7 @@ EAPI void
ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,
unsigned int is_keyboard)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
&is_keyboard, 1);
}
@@ -57,7 +57,7 @@ ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
&val, 1);
if ((ret == 0) || (ret == -1))
@@ -178,7 +178,7 @@ ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_vkbd_atom_get(state);
ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
&atom, 1);
@@ -189,7 +189,7 @@ ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
&atom, 1))
return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
@@ -201,7 +201,7 @@ EAPI void
ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,
Ecore_X_Virtual_Keyboard_State state)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
_ecore_x_e_vkbd_atom_get(state),
@@ -247,7 +247,7 @@ EAPI void
ecore_x_e_illume_zone_set(Ecore_X_Window win,
Ecore_X_Window zone)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE,
&zone, 1);
}
@@ -258,7 +258,7 @@ ecore_x_e_illume_zone_get(Ecore_X_Window win)
Ecore_X_Window zone = 0;
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
&zone, 1);
if ((ret == 0) || (ret == -1))
@@ -272,7 +272,7 @@ ecore_x_e_illume_zone_list_set(Ecore_X_Window win,
Ecore_X_Window *zones,
unsigned int n_zones)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
zones, n_zones);
}
@@ -281,7 +281,7 @@ EAPI void
ecore_x_e_illume_conformant_set(Ecore_X_Window win,
unsigned int is_conformant)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
&is_conformant, 1);
}
@@ -292,7 +292,7 @@ ecore_x_e_illume_conformant_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
&val, 1);
if ((ret == 0) || (ret == -1))
@@ -307,7 +307,7 @@ ecore_x_e_illume_mode_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_illume_atom_get(mode);
ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_MODE,
&atom, 1);
@@ -318,7 +318,7 @@ ecore_x_e_illume_mode_get(Ecore_X_Window win)
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1))
return ECORE_X_ILLUME_MODE_UNKNOWN;
@@ -329,7 +329,7 @@ EAPI void
ecore_x_e_illume_mode_send(Ecore_X_Window win,
Ecore_X_Illume_Mode mode)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_MODE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
_ecore_x_e_illume_atom_get(mode),
@@ -339,7 +339,7 @@ ecore_x_e_illume_mode_send(Ecore_X_Window win,
EAPI void
ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_BACK,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -348,7 +348,7 @@ ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -357,7 +357,7 @@ ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_HOME,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -366,7 +366,7 @@ ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_close_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_CLOSE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -375,7 +375,7 @@ ecore_x_e_illume_close_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_home_new_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_NEW,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -384,7 +384,7 @@ ecore_x_e_illume_home_new_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_home_del_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_DEL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -393,18 +393,18 @@ ecore_x_e_illume_home_del_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_access_action_next_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
- ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT,
+ ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT,
0, 0, 0);
}
EAPI void
ecore_x_e_illume_access_action_prev_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
@@ -415,18 +415,18 @@ ecore_x_e_illume_access_action_prev_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_access_action_activate_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
- ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE,
+ ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE,
0, 0, 0);
}
EAPI void
ecore_x_e_illume_access_action_over_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
@@ -437,7 +437,7 @@ ecore_x_e_illume_access_action_over_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_access_action_read_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
@@ -448,7 +448,7 @@ ecore_x_e_illume_access_action_read_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_access_action_read_next_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
@@ -459,7 +459,7 @@ ecore_x_e_illume_access_action_read_next_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_access_action_read_prev_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
@@ -470,7 +470,7 @@ ecore_x_e_illume_access_action_read_prev_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_access_action_up_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
@@ -481,7 +481,7 @@ ecore_x_e_illume_access_action_up_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_access_action_down_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
win,
@@ -493,7 +493,7 @@ EAPI void
ecore_x_e_illume_drag_set(Ecore_X_Window win,
unsigned int drag)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
}
@@ -503,7 +503,7 @@ ecore_x_e_illume_drag_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG,
&val, 1);
if ((ret == 0) || (ret == -1))
@@ -516,7 +516,7 @@ EAPI void
ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
unsigned int is_locked)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
&is_locked, 1);
}
@@ -527,7 +527,7 @@ ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
&val, 1);
if ((ret == 0) || (ret == -1))
@@ -539,7 +539,7 @@ ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -548,7 +548,7 @@ ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1, 0, 0, 0, 0);
@@ -563,7 +563,7 @@ ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
{
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
geom[0] = x;
geom[1] = y;
geom[2] = w;
@@ -582,7 +582,7 @@ ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
int ret = 0;
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret =
ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
@@ -614,7 +614,7 @@ ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
{
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
geom[0] = x;
geom[1] = y;
geom[2] = w;
@@ -633,7 +633,7 @@ ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
int ret = 0;
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret =
ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
@@ -665,7 +665,7 @@ ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
{
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
geom[0] = x;
geom[1] = y;
geom[2] = w;
@@ -684,7 +684,7 @@ ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
int ret = 0;
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret =
ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
@@ -740,7 +740,7 @@ EAPI void
ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,
unsigned int is_quickpanel)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
&is_quickpanel, 1);
}
@@ -751,7 +751,7 @@ ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
&val, 1);
if ((ret == 0) || (ret == -1))
@@ -766,7 +766,7 @@ ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_quickpanel_atom_get(state);
ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
&atom, 1);
@@ -777,7 +777,7 @@ ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
&atom, 1))
@@ -790,7 +790,7 @@ EAPI void
ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
Ecore_X_Illume_Quickpanel_State state)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
_ecore_x_e_quickpanel_atom_get(state),
@@ -800,7 +800,7 @@ ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
EAPI void
ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
@@ -811,7 +811,7 @@ EAPI void
ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
unsigned int priority)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
&priority, 1);
@@ -823,7 +823,7 @@ ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
&val, 1);
if ((ret == 0) || (ret == -1))
@@ -836,7 +836,7 @@ EAPI void
ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
unsigned int priority)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
&priority, 1);
@@ -848,7 +848,7 @@ ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
&val, 1);
@@ -862,7 +862,7 @@ EAPI void
ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,
unsigned int zone)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
&zone, 1);
@@ -874,7 +874,7 @@ ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
&val, 1);
@@ -887,7 +887,7 @@ ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
EAPI void
ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win,
ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
@@ -927,7 +927,7 @@ ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_clipboard_atom_get(state);
ecore_x_window_prop_atom_set(win,
@@ -940,7 +940,7 @@ ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win,
ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
@@ -955,7 +955,7 @@ ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,
{
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
geom[0] = x;
geom[1] = y;
geom[2] = w;
@@ -972,7 +972,7 @@ ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
int ret = 0;
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret =
ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
@@ -988,25 +988,25 @@ ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
}
/* for sliding window */
-EAPI void
+EAPI void
ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,
unsigned int is_visible)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
- ecore_x_window_prop_card32_set(win,
- ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
+ LOGFN;
+ ecore_x_window_prop_card32_set(win,
+ ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
&is_visible, 1);
} /* ecore_x_e_illume_sliding_win_state_set */
-EAPI int
+EAPI int
ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)
{
unsigned int is_visible = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
- ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
+ ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
&is_visible, 1);
if ((ret == 0) || (ret == -1))
return 0;
@@ -1023,17 +1023,17 @@ ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,
{
unsigned int geom[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
geom[0] = x;
geom[1] = y;
geom[2] = w;
geom[3] = h;
ecore_x_window_prop_card32_set(win,
- ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
+ ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
geom, 4);
} /* ecore_x_e_illume_sliding_win_geometry_set */
-EAPI int
+EAPI int
ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,
int *x,
int *y,
@@ -1042,27 +1042,27 @@ ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,
{
int ret = 0;
unsigned int geom[4];
-
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
- ret =
- ecore_x_window_prop_card32_get(win,
- ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
+
+ LOGFN;
+ ret =
+ ecore_x_window_prop_card32_get(win,
+ ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
geom, 4);
if (ret != 4)
return 0;
-
+
if (x)
*x = geom[0];
-
+
if (y)
*y = geom[1];
-
+
if (w)
*w = geom[2];
-
+
if (h)
*h = geom[3];
-
+
return 1;
}/* ecore_x_e_illume_sliding_win_geometry_get */
@@ -1070,7 +1070,7 @@ EAPI void
ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
Ecore_X_Sync_Counter counter)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (counter)
ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
ECORE_X_ATOM_CARDINAL, &counter, 1);
@@ -1084,7 +1084,7 @@ ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
int ret = 0;
Ecore_X_Sync_Counter counter = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret =
ecore_x_window_prop_xid_get(win,
ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
@@ -1102,7 +1102,7 @@ ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1134,7 +1134,7 @@ ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1169,7 +1169,7 @@ ecore_x_e_window_profile_list_set(Ecore_X_Window win,
{
Ecore_X_Atom *atoms;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win)
return;
@@ -1199,7 +1199,7 @@ ecore_x_e_window_profile_list_get(Ecore_X_Window win,
Ecore_X_Atom *atoms;
int num, i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (ret_num)
*ret_num = 0;
@@ -1254,7 +1254,7 @@ ecore_x_e_window_profile_set(Ecore_X_Window win,
{
Ecore_X_Atom atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win)
return;
@@ -1269,7 +1269,7 @@ ecore_x_e_window_profile_set(Ecore_X_Window win,
}
/*
- * @since 1.3
+ * @since 1.3
*/
EAPI char *
ecore_x_e_window_profile_get(Ecore_X_Window win)
@@ -1279,7 +1279,7 @@ ecore_x_e_window_profile_get(Ecore_X_Window win)
char *profile = NULL;
int num;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_E_WINDOW_PROFILE,
XA_ATOM, 32, &data, &num))
{
@@ -1304,7 +1304,7 @@ ecore_x_e_window_profile_supported_set(Ecore_X_Window root,
{
Ecore_X_Window win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1344,7 +1344,7 @@ ecore_x_e_window_profile_supported_get(Ecore_X_Window root)
Ecore_X_Window win, win2;
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
@@ -1377,7 +1377,7 @@ ecore_x_e_window_available_profiles_set(Ecore_X_Window win,
{
Ecore_X_Atom *atoms;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win)
return;
@@ -1404,7 +1404,7 @@ ecore_x_e_window_available_profiles_get(Ecore_X_Window win,
Ecore_X_Atom *atoms;
int num, i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (count)
*count = 0;
@@ -1460,7 +1460,7 @@ ecore_x_e_window_profile_change_send(Ecore_X_Window root,
XEvent xev = { 0 };
Ecore_X_Atom atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1496,7 +1496,7 @@ ecore_x_e_window_profile_change_request_send(Ecore_X_Window win,
XEvent xev = { 0 };
Ecore_X_Atom atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1529,7 +1529,7 @@ ecore_x_e_window_profile_change_done_send(Ecore_X_Window root,
XEvent xev = { 0 };
Ecore_X_Atom atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1566,7 +1566,7 @@ ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
if (!root)
root = DefaultRootWindow(_ecore_x_disp);
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (enabled)
{
win = ecore_x_window_new(root, 1, 2, 3, 4);
@@ -1600,7 +1600,7 @@ ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
Ecore_X_Window win, win2;
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
@@ -1631,7 +1631,7 @@ ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1657,7 +1657,7 @@ ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1683,7 +1683,7 @@ ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1709,7 +1709,7 @@ ecore_x_e_comp_flush_send(Ecore_X_Window win)
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1735,7 +1735,7 @@ ecore_x_e_comp_dump_send(Ecore_X_Window win)
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1760,7 +1760,7 @@ EAPI void
ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
Ecore_X_Pixmap pixmap)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (pixmap)
ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP,
ECORE_X_ATOM_PIXMAP, &pixmap, 1);
@@ -1774,7 +1774,7 @@ ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
int ret = 0;
Ecore_X_Pixmap pixmap = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret =
ecore_x_window_prop_xid_get(win,
ECORE_X_ATOM_E_COMP_PIXMAP,
@@ -1821,7 +1821,7 @@ ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_indicator_atom_get(state);
ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
&atom, 1);
@@ -1832,7 +1832,7 @@ ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
&atom, 1))
@@ -1845,7 +1845,7 @@ EAPI void
ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,
Ecore_X_Illume_Indicator_State state)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
_ecore_x_e_indicator_atom_get(state),
@@ -1893,7 +1893,7 @@ ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_indicator_opacity_atom_get(mode);
ecore_x_window_prop_atom_set(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
@@ -1905,7 +1905,7 @@ ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
&atom, 1))
@@ -1918,7 +1918,7 @@ EAPI void
ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
Ecore_X_Illume_Indicator_Opacity_Mode mode)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
@@ -1967,7 +1967,7 @@ ecore_x_e_illume_indicator_type_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_indicator_type_atom_get(mode);
ecore_x_window_prop_atom_set(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
@@ -1979,7 +1979,7 @@ ecore_x_e_illume_indicator_type_get(Ecore_X_Window win)
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
&atom, 1))
@@ -1992,7 +1992,7 @@ EAPI void
ecore_x_e_illume_indicator_type_send(Ecore_X_Window win,
Ecore_X_Illume_Indicator_Type_Mode mode)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win,
ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
@@ -2035,7 +2035,7 @@ ecore_x_e_illume_window_state_set(Ecore_X_Window win,
{
Ecore_X_Atom atom = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_e_illume_window_state_atom_get(state);
ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
&atom, 1);
@@ -2046,7 +2046,7 @@ ecore_x_e_illume_window_state_get(Ecore_X_Window win)
{
Ecore_X_Atom atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_atom_get(win,
ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
&atom, 1))
@@ -2059,7 +2059,7 @@ EAPI void
ecore_x_e_illume_window_state_send(Ecore_X_Window win,
Ecore_X_Illume_Window_State state)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win,
ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
@@ -2073,7 +2073,7 @@ ecore_x_e_window_rotation_supported_set(Ecore_X_Window root,
{
Ecore_X_Window win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -2112,7 +2112,7 @@ ecore_x_e_window_rotation_supported_get(Ecore_X_Window root)
Ecore_X_Window win, win2;
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
@@ -2144,7 +2144,7 @@ ecore_x_e_window_rotation_app_set(Ecore_X_Window win,
{
unsigned int val = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (set) val = 1;
@@ -2158,7 +2158,7 @@ ecore_x_e_window_rotation_app_get(Ecore_X_Window win)
{
unsigned int val = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_WINDOW_ROTATION_APP_SUPPORTED,
&val, 1))
@@ -2173,7 +2173,7 @@ ecore_x_e_window_rotation_preferred_rotation_set(Ecore_X_Window win,
{
unsigned int val = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (rot != -1)
{
@@ -2196,7 +2196,7 @@ ecore_x_e_window_rotation_preferred_rotation_get(Ecore_X_Window win,
unsigned int val = 0;
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_E_WINDOW_ROTATION_PREFERRED_ROTATION,
@@ -2214,7 +2214,7 @@ ecore_x_e_window_rotation_available_rotations_set(Ecore_X_Window win,
const int *rots,
unsigned int count)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win) return;
@@ -2236,7 +2236,7 @@ ecore_x_e_window_rotation_available_rotations_get(Ecore_X_Window win,
int num, i;
int *val = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if ((!win) || (!rots) || (!count))
return EINA_FALSE;
@@ -2276,7 +2276,7 @@ ecore_x_e_window_rotation_change_prepare_send(Ecore_X_Window win,
int w,
int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send
(win, ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_PREPARE,
ECORE_X_EVENT_MASK_NONE,
@@ -2290,7 +2290,7 @@ ecore_x_e_window_rotation_change_prepare_done_send(Ecore_X_Window root,
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -2317,7 +2317,7 @@ EAPI void
ecore_x_e_window_rotation_change_request_send(Ecore_X_Window win,
int rot)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send
(win, ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_REQUEST,
ECORE_X_EVENT_MASK_NONE,
@@ -2333,7 +2333,7 @@ ecore_x_e_window_rotation_change_done_send(Ecore_X_Window root,
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -2367,7 +2367,7 @@ ecore_x_e_keyrouter_set(Ecore_X_Window win EINA_UNUSED,
unsigned int val;
Ecore_X_Window root;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -2386,7 +2386,7 @@ ecore_x_e_keyrouter_get(Ecore_X_Window win EINA_UNUSED)
unsigned int val;
Ecore_X_Window root;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
@@ -2404,7 +2404,7 @@ ecore_x_e_stack_type_set(Ecore_X_Window win,
Ecore_X_Stack_Type stack_type)
{
unsigned int val = stack_type;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -2420,7 +2420,7 @@ ecore_x_e_stack_type_get(Ecore_X_Window win)
{
int ret;
unsigned int val;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, ECORE_X_STACK_NONE);
@@ -2436,7 +2436,7 @@ ecore_x_e_stack_position_set(Ecore_X_Window win,
Ecore_X_Stack_Position stack_position)
{
unsigned int val = stack_position;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -2452,7 +2452,7 @@ ecore_x_e_stack_position_get(Ecore_X_Window win)
{
int ret;
unsigned int val;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, ECORE_X_STACK_POSITION_NONE);
diff --git a/src/lib/ecore_x/ecore_x_events.c b/src/lib/ecore_x/ecore_x_events.c
index 6431bdd283..aee6d1b9b2 100644
--- a/src/lib/ecore_x/ecore_x_events.c
+++ b/src/lib/ecore_x/ecore_x_events.c
@@ -121,7 +121,7 @@ ecore_x_event_mask_set(Ecore_X_Window w,
XWindowAttributes attr;
XSetWindowAttributes s_attr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -143,7 +143,7 @@ ecore_x_event_mask_unset(Ecore_X_Window w,
XWindowAttributes attr;
XSetWindowAttributes s_attr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -1404,7 +1404,7 @@ _ecore_x_event_handle_selection_clear(XEvent *xevent)
Ecore_X_Event_Selection_Clear *e;
Ecore_X_Atom sel;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_last_event_mouse_move = EINA_FALSE;
d = _ecore_x_selection_get(xevent->xselectionclear.selection);
if (d && (xevent->xselectionclear.time <= d->time)) return;
@@ -1443,7 +1443,7 @@ _ecore_x_event_handle_selection_request(XEvent *xevent)
int len;
int typesize;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_last_event_mouse_move = EINA_FALSE;
/*
* Generate a selection request event.
@@ -1510,7 +1510,7 @@ _ecore_x_event_handle_selection_notify(XEvent *xevent)
Ecore_X_Atom selection;
int num_ret, format;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_last_event_mouse_move = EINA_FALSE;
selection = xevent->xselection.selection;
@@ -1643,7 +1643,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Enter));
if (!e) return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
target = _ecore_x_dnd_target_get();
target->state = ECORE_X_DND_TARGET_ENTERED;
@@ -1665,7 +1665,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
Ecore_X_Atom *types;
int i, num_ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(ecore_x_window_prop_property_get(target->source,
ECORE_X_ATOM_XDND_TYPE_LIST,
XA_ATOM,
@@ -1682,7 +1682,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
e->types = calloc(num_ret, sizeof(char *));
if (e->types)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
for (i = 0; i < num_ret; i++)
e->types[i] = XGetAtomName(_ecore_x_disp, types[i]);
}
@@ -1697,7 +1697,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
e->types = calloc(3, sizeof(char *));
if (e->types)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
while ((i < 3) && (xevent->xclient.data.l[i + 2]))
{
e->types[i] = XGetAtomName(_ecore_x_disp,
@@ -1720,7 +1720,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
Ecore_X_Event_Xdnd_Position *e;
Ecore_X_DND_Target *target;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
target = _ecore_x_dnd_target_get();
if ((target->source != (Ecore_X_Window)xevent->xclient.data.l[0]) ||
@@ -1750,7 +1750,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
Ecore_X_Event_Xdnd_Status *e;
Ecore_X_DND_Source *source;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
source = _ecore_x_dnd_source_get();
/* Make sure source/target match */
@@ -1791,7 +1791,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
Ecore_X_Event_Xdnd_Leave *e;
Ecore_X_DND_Target *target;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
target = _ecore_x_dnd_target_get();
if ((target->source != (Ecore_X_Window)xevent->xclient.data.l[0]) ||
@@ -1813,7 +1813,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
Ecore_X_Event_Xdnd_Drop *e;
Ecore_X_DND_Target *target;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
target = _ecore_x_dnd_target_get();
/* Match source/target */
@@ -1841,7 +1841,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
Ecore_X_DND_Source *source;
Eina_Bool completed = EINA_TRUE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
source = _ecore_x_dnd_source_get();
/* Match source/target */
@@ -1851,7 +1851,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
if ((source->version < 5) || (xevent->xclient.data.l[1] & 0x1UL))
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* Target successfully performed drop action */
ecore_x_selection_xdnd_clear();
source->state = ECORE_X_DND_SOURCE_IDLE;
@@ -1904,12 +1904,12 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
return;
}
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
e->state[0] = _ecore_x_netwm_state_get(xevent->xclient.data.l[1]);
if (e->state[0] == ECORE_X_WINDOW_STATE_UNKNOWN)
{
// char *name;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
// name = XGetAtomName(_ecore_x_disp, xevent->xclient.data.l[1]);
// if (name) ERR("Unknown state: %s", name);
@@ -1919,7 +1919,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
if (e->state[1] == ECORE_X_WINDOW_STATE_UNKNOWN)
{
// char *name;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
// name = XGetAtomName(_ecore_x_disp, xevent->xclient.data.l[2]);
// if (name) ERR("Unknown state: %s", name);
@@ -1994,7 +1994,7 @@ _ecore_x_event_handle_client_message(XEvent *xevent)
ecore_event_add(ECORE_X_EVENT_PING, e, NULL, NULL);
if (ScreenCount(_ecore_x_disp) > 1)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
root = ecore_x_window_root_get(e->win);
}
else
@@ -2309,7 +2309,7 @@ _ecore_x_event_handle_randr_notify(XEvent *xevent)
_ecore_x_last_event_mouse_move = EINA_FALSE;
randr_event = (const XRRNotifyEvent *)xevent;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
switch (randr_event->subtype)
{
case RRNotify_CrtcChange:
@@ -2375,7 +2375,7 @@ _ecore_x_event_handle_fixes_selection_notify(XEvent *event)
void
_ecore_x_event_handle_damage_notify(XEvent *event)
{
- XDamageNotifyEvent *damage_event;
+ XDamageNotifyEvent *damage_event;
Ecore_X_Event_Damage *e;
_ecore_x_last_event_mouse_move = EINA_FALSE;
@@ -2426,7 +2426,7 @@ _ecore_x_event_handle_generic_event(XEvent *event)
Ecore_X_Event_Generic *e;
XGenericEventCookie *data;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
generic_event = (XGenericEvent *)event;
#ifdef ECORE_XPRESENT
@@ -2511,10 +2511,16 @@ _ecore_x_event_handle_xkb(XEvent *xevent)
if (xkbev->any.xkb_type == XkbMapNotify)
{
- XkbMapNotifyEvent *xkbmapping;
+ XkbMapNotifyEvent *xkbmapping = (XkbMapNotifyEvent *)xkbev;
- xkbmapping = (XkbMapNotifyEvent *)xkbev;
+ _ecore_x_window_grab_suspend();
+ _ecore_x_key_grab_suspend();
+ XkbGetMap(_ecore_x_disp, XkbAllMapComponentsMask,
+ xkbmapping->device);
XkbRefreshKeyboardMapping(xkbmapping);
+ _ecore_x_modifiers_get();
+ _ecore_x_window_grab_resume();
+ _ecore_x_key_grab_resume();
}
else
{
diff --git a/src/lib/ecore_x/ecore_x_fixes.c b/src/lib/ecore_x/ecore_x_fixes.c
index dd81b674c8..1c92d574f3 100644
--- a/src/lib/ecore_x/ecore_x_fixes.c
+++ b/src/lib/ecore_x/ecore_x_fixes.c
@@ -7,6 +7,8 @@
#include "ecore_x_private.h"
#include "Ecore_X.h"
+#include <X11/Xregion.h>
+
static int _fixes_available;
#ifdef ECORE_XFIXES
static int _fixes_major, _fixes_minor;
@@ -20,7 +22,7 @@ _ecore_x_fixes_init(void)
_fixes_major = 3;
_fixes_minor = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
@@ -110,6 +112,26 @@ ecore_x_fixes_selection_notification_request(Ecore_X_Atom selection)
return EINA_FALSE;
}
+EAPI Eina_Bool
+ecore_x_fixes_window_selection_notification_request(Ecore_X_Window window, Ecore_X_Atom selection)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
+
+#ifdef ECORE_XFIXES
+ if (_fixes_available)
+ {
+ XFixesSelectSelectionInput (_ecore_x_disp,
+ window,
+ selection,
+ XFixesSetSelectionOwnerNotifyMask |
+ XFixesSelectionWindowDestroyNotifyMask |
+ XFixesSelectionClientCloseNotifyMask);
+ return EINA_TRUE;
+ }
+#endif
+ return EINA_FALSE;
+}
+
EAPI Ecore_X_Region
ecore_x_region_new(Ecore_X_Rectangle *rects,
int num)
@@ -120,7 +142,7 @@ ecore_x_region_new(Ecore_X_Rectangle *rects,
Ecore_X_Region region;
XRectangle *xrect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xrect = _ecore_x_rectangle_ecore_to_x(rects, num);
region = XFixesCreateRegion(_ecore_x_disp, xrect, num);
free(xrect);
@@ -137,7 +159,7 @@ ecore_x_region_new_from_bitmap(Ecore_X_Pixmap bitmap)
#ifdef ECORE_XFIXES
Ecore_X_Region region;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
region = XFixesCreateRegionFromBitmap(_ecore_x_disp, bitmap);
if (_ecore_xlib_sync) ecore_x_sync();
return region;
@@ -154,7 +176,7 @@ ecore_x_region_new_from_window(Ecore_X_Window win,
#ifdef ECORE_XFIXES
Ecore_X_Region region;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
region = XFixesCreateRegionFromWindow(_ecore_x_disp, win, type);
if (_ecore_xlib_sync) ecore_x_sync();
return region;
@@ -170,7 +192,7 @@ ecore_x_region_new_from_gc(Ecore_X_GC gc)
#ifdef ECORE_XFIXES
Ecore_X_Region region;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
region = XFixesCreateRegionFromGC(_ecore_x_disp, gc);
if (_ecore_xlib_sync) ecore_x_sync();
return region;
@@ -186,7 +208,7 @@ ecore_x_region_new_from_picture(Ecore_X_Picture picture)
#ifdef ECORE_XFIXES
Ecore_X_Region region;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
region = XFixesCreateRegionFromPicture(_ecore_x_disp, picture);
if (_ecore_xlib_sync) ecore_x_sync();
return region;
@@ -200,7 +222,7 @@ ecore_x_region_free(Ecore_X_Region region)
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesDestroyRegion(_ecore_x_disp, region);
#endif /* ifdef ECORE_XFIXES */
}
@@ -213,7 +235,7 @@ ecore_x_region_set(Ecore_X_Region region,
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
XRectangle *xrect = _ecore_x_rectangle_ecore_to_x(rects, num);
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesSetRegion(_ecore_x_disp, region, xrect, num);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -225,7 +247,7 @@ ecore_x_region_copy(Ecore_X_Region dest,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesCopyRegion(_ecore_x_disp, dest, source);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -238,7 +260,7 @@ ecore_x_region_combine(Ecore_X_Region dest,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesUnionRegion(_ecore_x_disp, dest, source1, source2);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -251,7 +273,7 @@ ecore_x_region_intersect(Ecore_X_Region dest,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesIntersectRegion(_ecore_x_disp, dest, source1, source2);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -264,7 +286,7 @@ ecore_x_region_subtract(Ecore_X_Region dest,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesSubtractRegion(_ecore_x_disp, dest, source1, source2);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -280,7 +302,7 @@ ecore_x_region_invert(Ecore_X_Region dest,
XRectangle *xbound;
int num = 1;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xbound = _ecore_x_rectangle_ecore_to_x(bounds, num);
XFixesInvertRegion(_ecore_x_disp, dest, xbound, source);
@@ -296,7 +318,7 @@ ecore_x_region_translate(Ecore_X_Region region,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesTranslateRegion(_ecore_x_disp, region, dx, dy);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -308,7 +330,7 @@ ecore_x_region_extents(Ecore_X_Region dest,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesRegionExtents(_ecore_x_disp, dest, source);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -324,7 +346,7 @@ ecore_x_region_fetch(Ecore_X_Region region,
Ecore_X_Rectangle *rects;
XRectangle *xrect, xbound;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xrect = XFixesFetchRegionAndBounds(_ecore_x_disp, region, num, &xbound);
if (_ecore_xlib_sync) ecore_x_sync();
rects = _ecore_x_rectangle_x_to_ecore(xrect, *num);
@@ -349,7 +371,7 @@ ecore_x_region_expand(Ecore_X_Region dest,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesExpandRegion(_ecore_x_disp, dest, source, left, right, top, bottom);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -363,7 +385,7 @@ ecore_x_region_gc_clip_set(Ecore_X_Region region,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesSetGCClipRegion(_ecore_x_disp, gc, x_origin, y_origin, region);
if (_ecore_xlib_sync) ecore_x_sync();
#endif /* ifdef ECORE_XFIXES */
@@ -378,7 +400,7 @@ ecore_x_region_window_shape_set(Ecore_X_Region region,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesSetWindowShapeRegion(_ecore_x_disp,
win,
type,
@@ -397,7 +419,7 @@ ecore_x_region_picture_clip_set(Ecore_X_Region region,
{
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
#ifdef ECORE_XFIXES
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFixesSetPictureClipRegion(_ecore_x_disp,
picture,
x_origin,
@@ -434,3 +456,100 @@ ecore_x_cursor_hide(void)
}
#endif /* ifdef ECORE_XFIXES */
}
+
+EAPI void
+ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num)
+{
+#ifdef ECORE_XFIXES
+ static PointerBarrier *bar = NULL;
+ static int bar_num = 0;
+ static int bar_alloc = 0;
+ Region reg, reg2, reg3;
+ int i, j;
+
+ // clear out old root screen barriers....
+ if (bar)
+ {
+ for (i = 0; i < bar_num; i++)
+ {
+ XFixesDestroyPointerBarrier(_ecore_x_disp, bar[i]);
+ }
+ free(bar);
+ }
+ bar = NULL;
+ bar_num = 0;
+ bar_alloc = 0;
+ if ((!screens) || (num <= 0)) return;
+
+ // set up new ones given the screen list given
+ for (i = 0; i < num; i++)
+ {
+ XRectangle xrect;
+
+ reg = XCreateRegion();
+ reg2 = XCreateRegion();
+ xrect.x = screens[i].x - 1;
+ xrect.y = screens[i].y - 1;
+ xrect.width = screens[i].width + 2;
+ xrect.height = screens[i].height + 2;
+ XUnionRectWithRegion(&xrect, reg, reg2);
+ XDestroyRegion(reg);
+ reg = reg2;
+
+ // reg == screen i + 1 pixel surrounding it
+ for (j = 0; j < num; j++)
+ {
+ // create a region representing screen j
+ reg2 = XCreateRegion();
+ reg3 = XCreateRegion();
+ xrect.x = screens[j].x;
+ xrect.y = screens[j].y;
+ xrect.width = screens[j].width;
+ xrect.height = screens[j].height;
+ XUnionRectWithRegion(&xrect, reg2, reg3);
+ XDestroyRegion(reg2);
+ reg2 = reg3;
+ // reg2 == screen j
+
+ reg3 = XCreateRegion();
+ XSubtractRegion(reg, reg2, reg3);
+ XDestroyRegion(reg);
+ XDestroyRegion(reg2);
+ reg = reg3;
+ // reg now has had screen j cut out of the boundary
+ }
+ // reg is the result of starting with screen i and then with a
+ // 1 pixel boundary around it havnig adjacent screens "cut out"
+ // of that boundary leaving only extra bounds where no screens
+ // are adjacent
+
+ // walk rects and create barriers
+ for (j = 0; j < reg->numRects; j++)
+ {
+ int x1, y1, x2, y2;
+
+ bar_num++;
+ if (bar_num > bar_alloc)
+ {
+ bar_alloc += 32;
+ PointerBarrier *t = realloc(bar, bar_alloc * sizeof(PointerBarrier));
+ if (!t)
+ {
+ bar_num--;
+ return;
+ }
+ bar = t;
+ }
+ x1 = reg->rects[j].x1;
+ y1 = reg->rects[j].y1;
+ x2 = reg->rects[j].x2 - 1;
+ y2 = reg->rects[j].y2 - 1;
+ bar[bar_num - 1] =
+ XFixesCreatePointerBarrier(_ecore_x_disp,
+ DefaultRootWindow(_ecore_x_disp),
+ x1, y1, x2, y2, 0, 0, NULL);
+ }
+ XDestroyRegion(reg);
+ }
+#endif
+}
diff --git a/src/lib/ecore_x/ecore_x_gc.c b/src/lib/ecore_x/ecore_x_gc.c
index 6b8168bb3b..2461889db8 100644
--- a/src/lib/ecore_x/ecore_x_gc.c
+++ b/src/lib/ecore_x/ecore_x_gc.c
@@ -29,7 +29,7 @@ ecore_x_gc_new(Ecore_X_Drawable draw,
int idx;
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!draw)
draw = DefaultRootWindow(_ecore_x_disp);
@@ -168,7 +168,7 @@ ecore_x_gc_new(Ecore_X_Drawable draw,
EAPI void
ecore_x_gc_free(Ecore_X_GC gc)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XFreeGC(_ecore_x_disp, gc);
if (_ecore_xlib_sync) ecore_x_sync();
}
diff --git a/src/lib/ecore_x/ecore_x_icccm.c b/src/lib/ecore_x/ecore_x_icccm.c
index 4bf81da5ac..9f1c6c87af 100644
--- a/src/lib/ecore_x/ecore_x_icccm.c
+++ b/src/lib/ecore_x/ecore_x_icccm.c
@@ -20,7 +20,7 @@
EAPI void
ecore_x_icccm_init(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
}
EAPI void
@@ -29,7 +29,7 @@ ecore_x_icccm_state_set(Ecore_X_Window win,
{
unsigned long c[2];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
c[0] = WithdrawnState;
else if (state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
@@ -53,7 +53,7 @@ ecore_x_icccm_state_get(Ecore_X_Window win)
int format_ret;
Ecore_X_Window_State_Hint hint;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
hint = ECORE_X_WINDOW_STATE_HINT_NONE;
XGetWindowProperty(_ecore_x_disp, win, ECORE_X_ATOM_WM_STATE,
0, 0x7fffffff, False, ECORE_X_ATOM_WM_STATE,
@@ -80,7 +80,7 @@ EAPI void
ecore_x_icccm_delete_window_send(Ecore_X_Window win,
Ecore_X_Time t)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
ECORE_X_EVENT_MASK_NONE,
ECORE_X_ATOM_WM_DELETE_WINDOW,
@@ -91,7 +91,7 @@ EAPI void
ecore_x_icccm_take_focus_send(Ecore_X_Window win,
Ecore_X_Time t)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
ECORE_X_EVENT_MASK_NONE,
ECORE_X_ATOM_WM_TAKE_FOCUS,
@@ -102,7 +102,7 @@ EAPI void
ecore_x_icccm_save_yourself_send(Ecore_X_Window win,
Ecore_X_Time t)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
ECORE_X_EVENT_MASK_NONE,
ECORE_X_ATOM_WM_SAVE_YOURSELF,
@@ -118,7 +118,7 @@ ecore_x_icccm_move_resize_send(Ecore_X_Window win,
{
XEvent ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev.type = ConfigureNotify;
ev.xconfigure.display = _ecore_x_disp;
ev.xconfigure.event = win;
@@ -150,7 +150,7 @@ ecore_x_icccm_hints_set(Ecore_X_Window win,
if (!hints)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
hints->flags = InputHint | StateHint;
hints->input = accepts_focus;
if (initial_state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
@@ -204,7 +204,7 @@ ecore_x_icccm_hints_get(Ecore_X_Window win,
{
XWMHints *hints;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (accepts_focus)
*accepts_focus = EINA_TRUE;
@@ -288,7 +288,7 @@ ecore_x_icccm_size_pos_hints_set(Ecore_X_Window win,
XSizeHints hint;
long mask;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!XGetWMNormalHints(_ecore_x_disp, win, &hint, &mask))
memset(&hint, 0, sizeof(XSizeHints));
if (_ecore_xlib_sync) ecore_x_sync();
@@ -368,7 +368,7 @@ ecore_x_icccm_size_pos_hints_get(Ecore_X_Window win,
int stepx = -1, stepy = -1;
double mina = 0.0, maxa = 0.0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!XGetWMNormalHints(_ecore_x_disp, win, &hint, &mask))
{
if (_ecore_xlib_sync) ecore_x_sync();
@@ -483,7 +483,7 @@ ecore_x_icccm_title_set(Ecore_X_Window win,
if (!t)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xprop.value = NULL;
#ifdef X_HAVE_UTF8_STRING
list[0] = strdup(t);
@@ -520,7 +520,7 @@ ecore_x_icccm_title_get(Ecore_X_Window win)
{
XTextProperty xprop;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xprop.value = NULL;
if (XGetWMName(_ecore_x_disp, win, &xprop) >= Success)
{
@@ -583,9 +583,9 @@ ecore_x_icccm_protocol_atoms_set(Ecore_X_Window win,
{
Atom *protos2 = alloca(sizeof(Atom) * num);
int i;
-
+
for (i = 0; i < num; i++) protos2[i] = protos[i];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (num > 0)
XSetWMProtocols(_ecore_x_disp, win, protos2, num);
else
@@ -614,7 +614,7 @@ ecore_x_icccm_protocol_set(Ecore_X_Window win,
if (protocol >= ECORE_X_WM_PROTOCOL_NUM)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
proto = _ecore_x_atoms_wm_protocols[protocol];
if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
@@ -699,7 +699,7 @@ ecore_x_icccm_protocol_isset(Ecore_X_Window win,
if (protocol >= ECORE_X_WM_PROTOCOL_NUM)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
proto = _ecore_x_atoms_wm_protocols[protocol];
if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
@@ -738,7 +738,7 @@ ecore_x_icccm_name_class_set(Ecore_X_Window win,
if (!xch)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xch->res_name = (char *)n;
xch->res_class = (char *)c;
XSetClassHint(_ecore_x_disp, win, xch);
@@ -761,7 +761,7 @@ ecore_x_icccm_name_class_get(Ecore_X_Window win,
{
XClassHint xch;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (n)
*n = NULL;
@@ -798,7 +798,7 @@ ecore_x_icccm_client_machine_get(Ecore_X_Window win)
{
char *name;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
name = ecore_x_window_prop_string_get(win, ECORE_X_ATOM_WM_CLIENT_MACHINE);
return name;
}
@@ -815,7 +815,7 @@ ecore_x_icccm_command_set(Ecore_X_Window win,
int argc,
char **argv)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSetCommand(_ecore_x_disp, win, argv, argc);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -844,7 +844,7 @@ ecore_x_icccm_command_get(Ecore_X_Window win,
if (argv)
*argv = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
success = XGetCommand(_ecore_x_disp, win, &v, &c);
if (_ecore_xlib_sync) ecore_x_sync();
if (!success) return;
@@ -899,7 +899,7 @@ ecore_x_icccm_icon_name_set(Ecore_X_Window win,
XTextProperty xprop;
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xprop.value = NULL;
#ifdef X_HAVE_UTF8_STRING
list[0] = strdup(t);
@@ -941,7 +941,7 @@ ecore_x_icccm_icon_name_get(Ecore_X_Window win)
{
XTextProperty xprop;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xprop.value = NULL;
if (XGetWMIconName(_ecore_x_disp, win, &xprop) >= Success)
{
@@ -1009,7 +1009,7 @@ ecore_x_icccm_colormap_window_set(Ecore_X_Window win,
Window *oldset = NULL;
Window *newset = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_property_get(win,
ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
XA_WINDOW, 32, &old_data, &num))
@@ -1073,7 +1073,7 @@ ecore_x_icccm_colormap_window_unset(Ecore_X_Window win,
Window *oldset = NULL;
Window *newset = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_prop_property_get(win,
ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
XA_WINDOW, 32, &old_data, &num))
@@ -1134,7 +1134,7 @@ EAPI void
ecore_x_icccm_transient_for_set(Ecore_X_Window win,
Ecore_X_Window forwin)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSetTransientForHint(_ecore_x_disp, win, forwin);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -1146,7 +1146,7 @@ ecore_x_icccm_transient_for_set(Ecore_X_Window win,
EAPI void
ecore_x_icccm_transient_for_unset(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XDeleteProperty(_ecore_x_disp, win, ECORE_X_ATOM_WM_TRANSIENT_FOR);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -1162,7 +1162,7 @@ ecore_x_icccm_transient_for_get(Ecore_X_Window win)
Window forwin;
Eina_Bool success;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
success = XGetTransientForHint(_ecore_x_disp, win, &forwin);
if (_ecore_xlib_sync) ecore_x_sync();
if (success)
@@ -1180,7 +1180,7 @@ EAPI void
ecore_x_icccm_window_role_set(Ecore_X_Window win,
const char *role)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_string_set(win, ECORE_X_ATOM_WM_WINDOW_ROLE,
(char *)role);
}
@@ -1193,7 +1193,7 @@ ecore_x_icccm_window_role_set(Ecore_X_Window win,
EAPI char *
ecore_x_icccm_window_role_get(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return ecore_x_window_prop_string_get(win, ECORE_X_ATOM_WM_WINDOW_ROLE);
}
@@ -1209,7 +1209,7 @@ EAPI void
ecore_x_icccm_client_leader_set(Ecore_X_Window win,
Ecore_X_Window l)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(win, ECORE_X_ATOM_WM_CLIENT_LEADER,
&l, 1);
}
@@ -1223,7 +1223,7 @@ ecore_x_icccm_client_leader_get(Ecore_X_Window win)
{
Ecore_X_Window l;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (ecore_x_window_prop_window_get(win, ECORE_X_ATOM_WM_CLIENT_LEADER,
&l, 1) > 0)
return l;
@@ -1240,7 +1240,7 @@ ecore_x_icccm_iconic_request_send(Ecore_X_Window win,
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!root)
root = DefaultRootWindow(_ecore_x_disp);
diff --git a/src/lib/ecore_x/ecore_x_image.c b/src/lib/ecore_x/ecore_x_image.c
index 3b7030863f..99f53d6e1b 100644
--- a/src/lib/ecore_x/ecore_x_image.c
+++ b/src/lib/ecore_x/ecore_x_image.c
@@ -101,7 +101,7 @@ _ecore_x_image_shm_check(void)
_ecore_x_image_shm_can = 0;
return _ecore_x_image_shm_can;
}
-
+
XSync(_ecore_x_disp, False);
_ecore_x_image_err = 0;
@@ -189,7 +189,7 @@ ecore_x_image_new(int w,
if (!im)
return NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
im->w = w;
im->h = h;
im->vis = vis;
@@ -206,7 +206,7 @@ ecore_x_image_new(int w,
EAPI void
ecore_x_image_free(Ecore_X_Image *im)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (im->shm)
{
if (im->xim)
@@ -306,7 +306,7 @@ ecore_x_image_get(Ecore_X_Image *im,
Eina_Bool ret = EINA_TRUE;
XErrorHandler ph;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (im->shm)
{
if (!im->xim) _ecore_x_image_shm_create(im);
@@ -400,7 +400,7 @@ ecore_x_image_put(Ecore_X_Image *im,
{
Ecore_X_GC tgc = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!gc)
{
XGCValues gcv;
@@ -434,7 +434,7 @@ ecore_x_image_data_get(Ecore_X_Image *im,
int *rows,
int *bpp)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!im->xim)
{
if (im->shm) _ecore_x_image_shm_create(im);
@@ -691,7 +691,7 @@ ecore_x_image_to_argb_convert(void *src,
break;
}
break;
-
+
case 32:
s32 = ((unsigned int *)(((unsigned char *)src) + ((y + row) * sbpl))) + x;
switch (mode)
diff --git a/src/lib/ecore_x/ecore_x_mwm.c b/src/lib/ecore_x/ecore_x_mwm.c
index c2d298bc81..eac01f6edb 100644
--- a/src/lib/ecore_x/ecore_x_mwm.c
+++ b/src/lib/ecore_x/ecore_x_mwm.c
@@ -42,7 +42,7 @@ ecore_x_mwm_hints_get(Ecore_X_Window win,
int num;
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = EINA_FALSE;
if (!ecore_x_window_prop_property_get(win,
ECORE_X_ATOM_MOTIF_WM_HINTS,
@@ -100,7 +100,7 @@ ecore_x_mwm_borderless_set(Ecore_X_Window win,
data[0] = 2; /* just set the decorations hint! */
data[2] = !borderless;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_property_set(win,
ECORE_X_ATOM_MOTIF_WM_HINTS,
ECORE_X_ATOM_MOTIF_WM_HINTS,
diff --git a/src/lib/ecore_x/ecore_x_netwm.c b/src/lib/ecore_x/ecore_x_netwm.c
index 182021aad1..60e8e0315f 100644
--- a/src/lib/ecore_x/ecore_x_netwm.c
+++ b/src/lib/ecore_x/ecore_x_netwm.c
@@ -74,7 +74,7 @@ static Eina_Hash *startup_info = NULL;
EAPI void
ecore_x_netwm_init(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
startup_info = eina_hash_string_superfast_new(
_ecore_x_netwm_startup_info_free);
}
@@ -82,7 +82,7 @@ ecore_x_netwm_init(void)
EAPI void
ecore_x_netwm_shutdown(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (startup_info)
eina_hash_free(startup_info);
@@ -97,7 +97,7 @@ ecore_x_netwm_wm_identify(Ecore_X_Window root,
Ecore_X_Window check,
const char *wm_name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(check,
ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
&check,
@@ -123,7 +123,7 @@ ecore_x_netwm_supported_set(Ecore_X_Window root,
Ecore_X_Atom *supported,
int num)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_atom_set(root,
ECORE_X_ATOM_NET_SUPPORTED,
supported,
@@ -142,7 +142,7 @@ ecore_x_netwm_supported_get(Ecore_X_Window root,
if (num)
*num = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
num_ret = ecore_x_window_prop_atom_list_get(root, ECORE_X_ATOM_NET_SUPPORTED,
supported);
if (num_ret <= 0)
@@ -161,7 +161,7 @@ EAPI void
ecore_x_netwm_desk_count_set(Ecore_X_Window root,
unsigned int n_desks)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS,
&n_desks, 1);
}
@@ -171,7 +171,7 @@ ecore_x_netwm_desk_roots_set(Ecore_X_Window root,
Ecore_X_Window *vroots,
unsigned int n_desks)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(root,
ECORE_X_ATOM_NET_VIRTUAL_ROOTS,
vroots,
@@ -188,7 +188,7 @@ ecore_x_netwm_desk_names_set(Ecore_X_Window root,
unsigned int i;
int l, len;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
buf = NULL;
len = 0;
@@ -225,7 +225,7 @@ ecore_x_netwm_desk_size_set(Ecore_X_Window root,
{
unsigned int size[2];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
size[0] = width;
size[1] = height;
ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_GEOMETRY, size,
@@ -237,7 +237,7 @@ ecore_x_netwm_desk_viewports_set(Ecore_X_Window root,
unsigned int *origins,
unsigned int n_desks)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_VIEWPORT,
origins, 2 * n_desks);
}
@@ -251,7 +251,7 @@ ecore_x_netwm_desk_layout_set(Ecore_X_Window root,
{
unsigned int layout[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
layout[0] = orientation;
layout[1] = columns;
layout[2] = rows;
@@ -265,7 +265,7 @@ ecore_x_netwm_desk_workareas_set(Ecore_X_Window root,
unsigned int *areas,
unsigned int n_desks)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_WORKAREA, areas,
4 * n_desks);
}
@@ -293,7 +293,7 @@ EAPI void
ecore_x_netwm_desk_current_set(Ecore_X_Window root,
unsigned int desk)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_CURRENT_DESKTOP, &desk,
1);
}
@@ -304,7 +304,7 @@ ecore_x_netwm_showing_desktop_set(Ecore_X_Window root,
{
unsigned int val;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
val = (on) ? 1 : 0;
ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_SHOWING_DESKTOP, &val,
1);
@@ -320,7 +320,7 @@ ecore_x_netwm_client_list_set(Ecore_X_Window root,
Ecore_X_Window *p_clients,
unsigned int n_clients)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_CLIENT_LIST,
p_clients, n_clients);
}
@@ -331,7 +331,7 @@ ecore_x_netwm_client_list_stacking_set(Ecore_X_Window root,
Ecore_X_Window *p_clients,
unsigned int n_clients)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_CLIENT_LIST_STACKING,
p_clients, n_clients);
}
@@ -340,7 +340,7 @@ EAPI void
ecore_x_netwm_client_active_set(Ecore_X_Window root,
Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_ACTIVE_WINDOW,
&win, 1);
}
@@ -353,7 +353,7 @@ ecore_x_netwm_client_active_request(Ecore_X_Window root,
{
XEvent xev = { 0 };
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!root)
root = DefaultRootWindow(_ecore_x_disp);
@@ -377,7 +377,7 @@ EAPI void
ecore_x_netwm_name_set(Ecore_X_Window win,
const char *name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_WM_NAME, name);
}
@@ -385,7 +385,7 @@ EAPI int
ecore_x_netwm_name_get(Ecore_X_Window win,
char **name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (name)
*name = _ecore_x_window_prop_string_utf8_get(win,
ECORE_X_ATOM_NET_WM_NAME);
@@ -397,7 +397,7 @@ EAPI void
ecore_x_netwm_startup_id_set(Ecore_X_Window win,
const char *id)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_STARTUP_ID, id);
}
@@ -405,7 +405,7 @@ EAPI int
ecore_x_netwm_startup_id_get(Ecore_X_Window win,
char **id)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (id)
*id = _ecore_x_window_prop_string_utf8_get(win,
ECORE_X_ATOM_NET_STARTUP_ID);
@@ -417,7 +417,7 @@ EAPI void
ecore_x_netwm_visible_name_set(Ecore_X_Window win,
const char *name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_WM_VISIBLE_NAME,
name);
}
@@ -426,7 +426,7 @@ EAPI int
ecore_x_netwm_visible_name_get(Ecore_X_Window win,
char **name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (name)
*name = _ecore_x_window_prop_string_utf8_get(
win,
@@ -439,7 +439,7 @@ EAPI void
ecore_x_netwm_icon_name_set(Ecore_X_Window win,
const char *name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_WM_ICON_NAME,
name);
}
@@ -448,7 +448,7 @@ EAPI int
ecore_x_netwm_icon_name_get(Ecore_X_Window win,
char **name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (name)
*name = _ecore_x_window_prop_string_utf8_get(
win,
@@ -461,7 +461,7 @@ EAPI void
ecore_x_netwm_visible_icon_name_set(Ecore_X_Window win,
const char *name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_window_prop_string_utf8_set(win,
ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME,
name);
@@ -471,7 +471,7 @@ EAPI int
ecore_x_netwm_visible_icon_name_get(Ecore_X_Window win,
char **name)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (name)
*name = _ecore_x_window_prop_string_utf8_get(
win,
@@ -484,7 +484,7 @@ EAPI void
ecore_x_netwm_desktop_set(Ecore_X_Window win,
unsigned int desk)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_DESKTOP, &desk, 1);
}
@@ -495,7 +495,7 @@ ecore_x_netwm_desktop_get(Ecore_X_Window win,
int ret;
unsigned int tmp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_DESKTOP,
&tmp, 1);
@@ -517,7 +517,7 @@ ecore_x_netwm_strut_set(Ecore_X_Window win,
{
unsigned int strut[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
strut[0] = left;
strut[1] = right;
strut[2] = top;
@@ -538,7 +538,7 @@ ecore_x_netwm_strut_get(Ecore_X_Window win,
int ret = 0;
unsigned int strut[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_NET_WM_STRUT,
strut,
@@ -578,7 +578,7 @@ ecore_x_netwm_strut_partial_set(Ecore_X_Window win,
{
unsigned int strut[12];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
strut[0] = left;
strut[1] = right;
strut[2] = top;
@@ -615,7 +615,7 @@ ecore_x_netwm_strut_partial_get(Ecore_X_Window win,
int ret = 0;
unsigned int strut[12];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_NET_WM_STRUT_PARTIAL,
strut,
@@ -669,8 +669,8 @@ ecore_x_netwm_icons_set(Ecore_X_Window win,
{
unsigned int *data, *p, *p2;
unsigned int i, size, x, y;
-
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+
+ LOGFN;
size = 0;
for (i = 0; i < (unsigned int)num; i++)
{
@@ -690,7 +690,7 @@ ecore_x_netwm_icons_set(Ecore_X_Window win,
for (x = 0; x < icon[i].width; x++)
{
unsigned int r, g, b, a;
-
+
a = (*p2 >> 24) & 0xff;
r = (*p2 >> 16) & 0xff;
g = (*p2 >> 8 ) & 0xff;
@@ -723,7 +723,7 @@ ecore_x_netwm_icons_get(Ecore_X_Window win,
unsigned int len, icons, i;
int num_ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (num)
*num = 0;
@@ -831,7 +831,7 @@ ecore_x_netwm_icon_geometry_set(Ecore_X_Window win,
{
unsigned int geometry[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
geometry[0] = x;
geometry[1] = y;
geometry[2] = width;
@@ -852,7 +852,7 @@ ecore_x_netwm_icon_geometry_get(Ecore_X_Window win,
int ret;
unsigned int geometry[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_NET_WM_ICON_GEOMETRY,
geometry,
@@ -881,7 +881,7 @@ ecore_x_netwm_pid_set(Ecore_X_Window win,
{
unsigned int tmp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
tmp = pid;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_PID,
&tmp, 1);
@@ -894,7 +894,7 @@ ecore_x_netwm_pid_get(Ecore_X_Window win,
int ret;
unsigned int tmp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_PID,
&tmp, 1);
if (pid)
@@ -906,7 +906,7 @@ ecore_x_netwm_pid_get(Ecore_X_Window win,
EAPI void
ecore_x_netwm_handled_icons_set(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_HANDLED_ICONS,
NULL, 0);
}
@@ -915,7 +915,7 @@ EAPI Eina_Bool
ecore_x_netwm_handled_icons_get(Ecore_X_Window win)
{
int ret = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_HANDLED_ICONS,
NULL, 0);
return ret == 0 ? EINA_TRUE : EINA_FALSE;
@@ -925,7 +925,7 @@ EAPI void
ecore_x_netwm_user_time_set(Ecore_X_Window win,
unsigned int tim)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_USER_TIME,
&tim, 1);
}
@@ -937,7 +937,7 @@ ecore_x_netwm_user_time_get(Ecore_X_Window win,
int ret;
unsigned int tmp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_USER_TIME,
&tmp, 1);
if (tim)
@@ -1031,7 +1031,7 @@ ecore_x_netwm_window_state_set(Ecore_X_Window win,
Ecore_X_Atom *set;
unsigned int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!num)
{
ecore_x_window_prop_property_del(win, ECORE_X_ATOM_NET_WM_STATE);
@@ -1058,7 +1058,7 @@ ecore_x_netwm_window_state_get(Ecore_X_Window win,
int num_ret, i;
Ecore_X_Atom *atoms;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (num)
*num = 0;
@@ -1182,7 +1182,7 @@ ecore_x_netwm_window_type_set(Ecore_X_Window win,
{
Ecore_X_Atom atom;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
atom = _ecore_x_netwm_window_type_atom_get(type);
ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
&atom, 1);
@@ -1196,7 +1196,7 @@ ecore_x_netwm_window_type_get(Ecore_X_Window win,
int num;
Ecore_X_Atom *atoms = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (type)
*type = ECORE_X_WINDOW_TYPE_NORMAL;
@@ -1221,7 +1221,7 @@ ecore_x_netwm_window_types_get(Ecore_X_Window win,
Ecore_X_Atom *atoms = NULL;
Ecore_X_Window_Type *atoms2 = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (types)
*types = NULL;
@@ -1309,7 +1309,7 @@ ecore_x_netwm_allowed_action_isset(Ecore_X_Window win,
Ecore_X_Atom *atoms, atom;
Eina_Bool ret = EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
num = ecore_x_window_prop_atom_list_get(win, ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
&atoms);
if (num <= 0)
@@ -1339,7 +1339,7 @@ ecore_x_netwm_allowed_action_set(Ecore_X_Window win,
Ecore_X_Atom *set;
unsigned int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!num)
{
ecore_x_window_prop_property_del(win,
@@ -1370,7 +1370,7 @@ ecore_x_netwm_allowed_action_get(Ecore_X_Window win,
int num_ret, i;
Ecore_X_Atom *atoms;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (num)
*num = 0;
@@ -1403,7 +1403,7 @@ EAPI void
ecore_x_netwm_opacity_set(Ecore_X_Window win,
unsigned int opacity)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY,
&opacity, 1);
}
@@ -1415,7 +1415,7 @@ ecore_x_netwm_opacity_get(Ecore_X_Window win,
int ret;
unsigned int tmp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY,
&tmp, 1);
if (opacity)
@@ -1433,7 +1433,7 @@ ecore_x_netwm_frame_size_set(Ecore_X_Window win,
{
unsigned int frames[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
frames[0] = fl;
frames[1] = fr;
frames[2] = ft;
@@ -1454,7 +1454,7 @@ ecore_x_netwm_frame_size_get(Ecore_X_Window win,
int ret = 0;
unsigned int frames[4];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(win,
ECORE_X_ATOM_NET_FRAME_EXTENTS,
frames,
@@ -1484,7 +1484,7 @@ ecore_x_netwm_sync_counter_get(Ecore_X_Window win,
int ret;
unsigned int tmp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_card32_get(
win,
ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER,
@@ -1505,7 +1505,7 @@ ecore_x_netwm_ping_send(Ecore_X_Window win)
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xev.xclient.type = ClientMessage;
xev.xclient.display = _ecore_x_disp;
xev.xclient.window = win;
@@ -1531,7 +1531,7 @@ ecore_x_netwm_sync_request_send(Ecore_X_Window win,
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncIntToValue(&value, (int)serial);
xev.xclient.type = ClientMessage;
@@ -1561,7 +1561,7 @@ ecore_x_netwm_state_request_send(Ecore_X_Window win,
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!root)
root = DefaultRootWindow(_ecore_x_disp);
@@ -1595,7 +1595,7 @@ ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!root)
root = DefaultRootWindow(_ecore_x_disp);
@@ -1625,7 +1625,7 @@ ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xev.xclient.window = win;
xev.xclient.type = ClientMessage;
xev.xclient.message_type = ECORE_X_ATOM_NET_WM_MOVERESIZE;
@@ -2061,7 +2061,7 @@ ecore_x_screen_is_composited(int screen)
Ecore_X_Atom atom;
char buf[32];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
snprintf(buf, sizeof(buf), "_NET_WM_CM_S%i", screen);
atom = XInternAtom(_ecore_x_disp, buf, True);
if (atom == None) return EINA_FALSE;
@@ -2077,7 +2077,7 @@ ecore_x_screen_is_composited_set(int screen,
Ecore_X_Atom atom;
char buf[32];
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
snprintf(buf, sizeof(buf), "_NET_WM_CM_S%i", screen);
atom = XInternAtom(_ecore_x_disp, buf, False);
if (atom == None) return;
diff --git a/src/lib/ecore_x/ecore_x_pixmap.c b/src/lib/ecore_x/ecore_x_pixmap.c
index 30903c1cf4..bd1a9f3351 100644
--- a/src/lib/ecore_x/ecore_x_pixmap.c
+++ b/src/lib/ecore_x/ecore_x_pixmap.c
@@ -32,7 +32,7 @@ ecore_x_pixmap_new(Ecore_X_Window win,
int dep)
{
Ecore_X_Pixmap pm;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp);
@@ -56,7 +56,7 @@ ecore_x_pixmap_new(Ecore_X_Window win,
EAPI void
ecore_x_pixmap_free(Ecore_X_Pixmap pmap)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!pmap) return;
XFreePixmap(_ecore_x_disp, pmap);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -87,7 +87,7 @@ ecore_x_pixmap_paste(Ecore_X_Pixmap pmap,
int dx,
int dy)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XCopyArea(_ecore_x_disp, pmap, dest, gc, sx, sy, w, h, dx, dy);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -108,7 +108,7 @@ ecore_x_pixmap_geometry_get(Ecore_X_Pixmap pmap,
int *w,
int *h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!pmap) return;
ecore_x_drawable_geometry_get(pmap, x, y, w, h);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -124,7 +124,7 @@ EAPI int
ecore_x_pixmap_depth_get(Ecore_X_Pixmap pmap)
{
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_drawable_depth_get(pmap);
if (_ecore_xlib_sync) ecore_x_sync();
return ret;
diff --git a/src/lib/ecore_x/ecore_x_present.c b/src/lib/ecore_x/ecore_x_present.c
index eb190b7560..4ac5fe58b2 100644
--- a/src/lib/ecore_x/ecore_x_present.c
+++ b/src/lib/ecore_x/ecore_x_present.c
@@ -17,7 +17,7 @@ _ecore_x_present_init(void)
ECORE_X_EVENT_PRESENT_COMPLETE = ecore_event_type_new();
ECORE_X_EVENT_PRESENT_IDLE = ecore_event_type_new();
#ifdef ECORE_XPRESENT
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_present_exists = XPresentQueryExtension(_ecore_x_disp, &_ecore_x_present_major, NULL, NULL);
#endif
}
diff --git a/src/lib/ecore_x/ecore_x_private.h b/src/lib/ecore_x/ecore_x_private.h
index 5a288d4a25..ec14111b70 100644
--- a/src/lib/ecore_x/ecore_x_private.h
+++ b/src/lib/ecore_x/ecore_x_private.h
@@ -383,14 +383,16 @@ Ecore_Event_Mouse_Button *_ecore_mouse_button(int event,
void _ecore_x_modifiers_get(void);
KeySym _ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int index);
+void _ecore_x_resource_shutdown(void);
+
int _ecore_x_shutdown(void);
//#define LOGFNS 1
#ifdef LOGFNS
#include <stdio.h>
-#define LOGFN(fl, ln, fn) printf("-ECORE-X: %25s: %5i - %s\n", fl, ln, fn);
+#define LOGFN printf("-ECORE-X: %25s: %5i - %s\n", __FILE__, __LINE__, __func__)
#else /* ifdef LOGFNS */
-#define LOGFN(fl, ln, fn)
+#define LOGFN
#endif /* ifdef LOGFNS */
diff --git a/src/lib/ecore_x/ecore_x_randr.c b/src/lib/ecore_x/ecore_x_randr.c
index f2288cc404..faab344eb5 100644
--- a/src/lib/ecore_x/ecore_x_randr.c
+++ b/src/lib/ecore_x/ecore_x_randr.c
@@ -7,10 +7,10 @@
#include "Ecore_X.h"
/* NB: FIXME:
- *
- * A lot of this code uses XRRGetScreenInfo and then calls
- * XRRFreeScreenConfigInfo. Typically this is not an Unheard of thing to do,
- * however this process of getting config and freeing config does force a
+ *
+ * A lot of this code uses XRRGetScreenInfo and then calls
+ * XRRFreeScreenConfigInfo. Typically this is not an Unheard of thing to do,
+ * however this process of getting config and freeing config does force a
* round-trip to the X server */
/* local variables */
@@ -33,7 +33,7 @@ static Ecore_X_Atom connector_number = 0;
# define RANDR_EDID_MANUFACTURER 0x08
# define RANDR_EDID_BLOCK 0x36
-typedef enum _Ecore_X_Randr_Edid_Aspect_Ratio_Preferred
+typedef enum _Ecore_X_Randr_Edid_Aspect_Ratio_Preferred
{
RANDR_EDID_ASPECT_RATIO_PREFERRED_4_3 = 0x00,
RANDR_EDID_ASPECT_RATIO_PREFERRED_16_9 = 0x01,
@@ -49,7 +49,7 @@ XRRScreenResources *(*_ecore_x_randr_screen_resources_get)(Display *disp, Window
#endif
/* local functions */
-void
+void
_ecore_x_randr_init(void)
{
#ifdef ECORE_XRANDR
@@ -76,7 +76,7 @@ _ecore_x_randr_init(void)
}
/* public functions */
-EAPI int
+EAPI int
ecore_x_randr_version_get(void)
{
#ifdef ECORE_XRANDR
@@ -85,23 +85,23 @@ ecore_x_randr_version_get(void)
return -1;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_query(void)
{
return _randr_avail;
}
/**
- * @brief This function returns the current config timestamp from
+ * @brief This function returns the current config timestamp from
* XRRScreenConfiguration.
- *
+ *
* @param root root window to query screen configuration from
- *
+ *
* @returns The screen configuration timestamp
- *
+ *
* @since 1.8
*/
-EAPI Ecore_X_Time
+EAPI Ecore_X_Time
ecore_x_randr_config_timestamp_get(Ecore_X_Window root)
{
Ecore_X_Time timestamp = 0;
@@ -133,14 +133,14 @@ ecore_x_randr_config_timestamp_get(Ecore_X_Window root)
/*
* @param root window which's primary output will be queried
*/
-EAPI Ecore_X_Randr_Orientation
+EAPI Ecore_X_Randr_Orientation
ecore_x_randr_screen_primary_output_orientations_get(Ecore_X_Window root)
{
#ifdef ECORE_XRANDR
Rotation ret = 0, crot = 0;
/* get the rotations available from XRandr */
- ret = XRRRotations(_ecore_x_disp,
+ ret = XRRRotations(_ecore_x_disp,
XRRRootToScreen(_ecore_x_disp, root), &crot);
return ret;
@@ -153,14 +153,14 @@ ecore_x_randr_screen_primary_output_orientations_get(Ecore_X_Window root)
* @param root window which's primary output will be queried
* @return the current orientation of the root window's screen primary output
*/
-EAPI Ecore_X_Randr_Orientation
+EAPI Ecore_X_Randr_Orientation
ecore_x_randr_screen_primary_output_orientation_get(Ecore_X_Window root)
{
#ifdef ECORE_XRANDR
Rotation ret = 0;
/* get the current rotation available from XRandr */
- XRRRotations(_ecore_x_disp,
+ XRRRotations(_ecore_x_disp,
XRRRootToScreen(_ecore_x_disp, root), &ret);
return ret;
@@ -178,7 +178,7 @@ ecore_x_randr_screen_primary_output_orientation_get(Ecore_X_Window root)
* @return @c EINA_TRUE if the primary output's orientation could be
* successfully altered.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_screen_primary_output_orientation_set(Ecore_X_Window root, Ecore_X_Randr_Orientation orient)
{
#ifdef ECORE_XRANDR
@@ -223,7 +223,7 @@ ecore_x_randr_screen_primary_output_sizes_get(Ecore_X_Window root, int *num)
int n = 0, i = 0;
/* retrieve the number of sizes from X, and the sizes themselves.
- *
+ *
* NB: don't have to free the returned sizes */
sizes = XRRSizes(_ecore_x_disp, XRRRootToScreen(_ecore_x_disp, root), &n);
if (!sizes) return NULL;
@@ -250,7 +250,7 @@ ecore_x_randr_screen_primary_output_sizes_get(Ecore_X_Window root, int *num)
#endif
}
-EAPI void
+EAPI void
ecore_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root, int *w, int *h, int *w_mm, int *h_mm, int *size_index)
{
#ifdef ECORE_XRANDR
@@ -264,9 +264,9 @@ ecore_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root, int *w
int n = 0;
/* retrieve the number of sizes from X, and the sizes themselves.
- *
+ *
* NB: don't have to free the returned sizes */
- sizes =
+ sizes =
XRRSizes(_ecore_x_disp, XRRRootToScreen(_ecore_x_disp, root), &n);
if ((sizes) && (n > 0))
{
@@ -275,7 +275,7 @@ ecore_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root, int *w
/* get the index of the current configuration */
idx = XRRConfigCurrentConfiguration(cfg, &crot);
- /* if the index is valid, then fill in the return variables with
+ /* if the index is valid, then fill in the return variables with
* the size information for this index */
if ((idx < n) && (idx >= 0))
{
@@ -303,7 +303,7 @@ ecore_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root, int *w
* @return @c EINA_TRUE on success, @c EINA_FALSE on failure due to e.g.
* invalid times.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_screen_primary_output_size_set(Ecore_X_Window root, int size_index)
{
#ifdef ECORE_XRANDR
@@ -325,10 +325,10 @@ ecore_x_randr_screen_primary_output_size_set(Ecore_X_Window root, int size_index
if ((cfg = XRRGetScreenInfo(_ecore_x_disp, root)))
{
/* try to set the new screen config
- *
+ *
* NB: Returns Success (0) if it works */
- if (!XRRSetScreenConfig(_ecore_x_disp, cfg, root, size_index,
- ECORE_X_RANDR_ORIENTATION_ROT_0,
+ if (!XRRSetScreenConfig(_ecore_x_disp, cfg, root, size_index,
+ ECORE_X_RANDR_ORIENTATION_ROT_0,
CurrentTime))
{
ret = EINA_TRUE;
@@ -349,7 +349,7 @@ ecore_x_randr_screen_primary_output_size_set(Ecore_X_Window root, int size_index
* @param root window which's primary output will be queried
* @return currently used refresh rate or - if request failed or RandRR is not available - 0.0
*/
-EAPI Ecore_X_Randr_Refresh_Rate
+EAPI Ecore_X_Randr_Refresh_Rate
ecore_x_randr_screen_primary_output_current_refresh_rate_get(Ecore_X_Window root)
{
#ifdef ECORE_XRANDR
@@ -385,7 +385,7 @@ ecore_x_randr_screen_primary_output_refresh_rates_get(Ecore_X_Window root, int s
int n = 0;
/* try to get the refresh rates for this screen */
- if ((rates = XRRRates(_ecore_x_disp,
+ if ((rates = XRRRates(_ecore_x_disp,
XRRRootToScreen(_ecore_x_disp, root), size_index, &n)))
{
Ecore_X_Randr_Refresh_Rate *ret = NULL;
@@ -418,7 +418,7 @@ ecore_x_randr_screen_primary_output_refresh_rates_get(Ecore_X_Window root, int s
* @param rate The refresh rate to be set.
* @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_screen_primary_output_refresh_rate_set(Ecore_X_Window root, int size_index, Ecore_X_Randr_Refresh_Rate rate)
{
#ifdef ECORE_XRANDR
@@ -434,11 +434,11 @@ ecore_x_randr_screen_primary_output_refresh_rate_set(Ecore_X_Window root, int si
/* get the current rotation */
XRRConfigRotations(cfg, &rot);
-
+
/* try to set the new screen config
- *
+ *
* NB: Returns Success (0) if it works */
- if (!XRRSetScreenConfigAndRate(_ecore_x_disp, cfg, root,
+ if (!XRRSetScreenConfigAndRate(_ecore_x_disp, cfg, root,
size_index, rot, rate, CurrentTime))
{
ret = EINA_TRUE;
@@ -465,7 +465,7 @@ ecore_x_randr_screen_primary_output_refresh_rate_set(Ecore_X_Window root, int si
* @param win Select this window's properties for RandR events.
* @param on Enable/disable selecting.
*/
-EAPI void
+EAPI void
ecore_x_randr_events_select(Ecore_X_Window win, Eina_Bool on)
{
#ifdef ECORE_XRANDR
@@ -475,7 +475,7 @@ ecore_x_randr_events_select(Ecore_X_Window win, Eina_Bool on)
{
mask = RRScreenChangeNotifyMask;
if (_randr_version >= RANDR_VERSION_1_2)
- mask |= (RRCrtcChangeNotifyMask | RROutputChangeNotifyMask |
+ mask |= (RRCrtcChangeNotifyMask | RROutputChangeNotifyMask |
RROutputPropertyNotifyMask);
}
@@ -488,7 +488,7 @@ ecore_x_randr_events_select(Ecore_X_Window win, Eina_Bool on)
* @param w width of screen in px
* @param h height of screen in px
*/
-EAPI void
+EAPI void
ecore_x_randr_screen_current_size_get(Ecore_X_Window root, int *w, int *h, int *w_mm, int *h_mm)
{
#ifdef ECORE_XRANDR
@@ -514,7 +514,7 @@ ecore_x_randr_screen_current_size_get(Ecore_X_Window root, int *w, int *h, int *
* @param wmax maximum width the screen can be set to
* @param hmax maximum height the screen can be set to
*/
-EAPI void
+EAPI void
ecore_x_randr_screen_size_range_get(Ecore_X_Window root, int *wmin, int *hmin, int *wmax, int *hmax)
{
#ifdef ECORE_XRANDR
@@ -523,9 +523,9 @@ ecore_x_randr_screen_size_range_get(Ecore_X_Window root, int *wmin, int *hmin, i
int swmin = 0, shmin = 0, swmax = 0, shmax = 0;
/* try to get the screen size range from XRandr
- *
+ *
* NB: returns 1 on success */
- if ((XRRGetScreenSizeRange(_ecore_x_disp, root, &swmin, &shmin,
+ if ((XRRGetScreenSizeRange(_ecore_x_disp, root, &swmin, &shmin,
&swmax, &shmax)))
{
/* fill in the return variables */
@@ -543,7 +543,7 @@ ecore_x_randr_screen_size_range_get(Ecore_X_Window root, int *wmin, int *hmin, i
* and all other CRTCs dx,dy respectively.
* @param root the window's screen which will be reset.
*/
-EAPI void
+EAPI void
ecore_x_randr_screen_reset(Ecore_X_Window root)
{
#ifdef ECORE_XRANDR
@@ -612,7 +612,7 @@ ecore_x_randr_screen_reset(Ecore_X_Window root)
}
/*
- * @param root Window which's screen's size should be set. If invalid (e.g.
+ * @param root Window which's screen's size should be set. If invalid (e.g.
* @c NULL) no action is taken.
* @param w Width in px the screen should be set to. If out of valid
* boundaries, current value is assumed.
@@ -625,7 +625,7 @@ ecore_x_randr_screen_reset(Ecore_X_Window root)
* @return @c EINA_TRUE if request was successfully sent or screen is already
* in requested size, @c EINA_FALSE if parameters are invalid.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_screen_current_size_set(Ecore_X_Window root, int w, int h, int w_mm, int h_mm)
{
#ifdef ECORE_XRANDR
@@ -733,7 +733,7 @@ ecore_x_randr_modes_info_get(Ecore_X_Window root, int *num)
ret[i]->vTotal = res->modes[i].vTotal;
if (res->modes[i].nameLength > 0)
{
- if ((ret[i]->name =
+ if ((ret[i]->name =
(malloc(res->modes[i].nameLength + 1))))
strncpy(ret[i]->name, res->modes[i].name,
(res->modes[i].nameLength + 1));
@@ -775,7 +775,7 @@ ecore_x_randr_modes_info_get(Ecore_X_Window root, int *num)
* adding failed.
* @since 1.2.0
*/
-EAPI Ecore_X_Randr_Mode
+EAPI Ecore_X_Randr_Mode
ecore_x_randr_mode_info_add(Ecore_X_Window root, Ecore_X_Randr_Mode_Info *mode_info)
{
#ifdef ECORE_XRANDR
@@ -783,7 +783,7 @@ ecore_x_randr_mode_info_add(Ecore_X_Window root, Ecore_X_Randr_Mode_Info *mode_i
{
Ecore_X_Randr_Mode mode = 0;
- /* if we have valid mode_info from the user, then ask XRandr to
+ /* if we have valid mode_info from the user, then ask XRandr to
* create the new mode using that as base */
if (mode_info)
mode = XRRCreateMode(_ecore_x_disp, root, (XRRModeInfo *)mode_info);
@@ -800,7 +800,7 @@ ecore_x_randr_mode_info_add(Ecore_X_Window root, Ecore_X_Randr_Mode_Info *mode_i
* @param mode_info
* @since 1.2.0
*/
-EAPI void
+EAPI void
ecore_x_randr_mode_del(Ecore_X_Randr_Mode mode)
{
#ifdef ECORE_XRANDR
@@ -887,7 +887,7 @@ ecore_x_randr_mode_info_get(Ecore_X_Window root, Ecore_X_Randr_Mode mode)
*
* @param mode_info The mode information that should be freed.
*/
-EAPI void
+EAPI void
ecore_x_randr_mode_info_free(Ecore_X_Randr_Mode_Info *mode_info)
{
#ifdef ECORE_XRANDR
@@ -1024,9 +1024,9 @@ ecore_x_randr_window_outputs_get(Ecore_X_Window window, int *num)
Ecore_X_Randr_Output *ret = NULL;
/* try to get the screen resources from Xrandr
- *
+ *
* NB: We do this ONCE here as we reuse it for every crtc.
- * NB: The old code used to loop and fetch the screen resources on
+ * NB: The old code used to loop and fetch the screen resources on
* every crtc */
if ((res = _ecore_x_randr_screen_resources_get(_ecore_x_disp, root)))
{
@@ -1041,15 +1041,15 @@ ecore_x_randr_window_outputs_get(Ecore_X_Window window, int *num)
/* try to get the crtc info for this crtc */
if (!(crtc = XRRGetCrtcInfo(_ecore_x_disp, res, crtcs[i])))
continue;
-
+
if (crtc->noutput > 0)
{
/* try to reallocate our return variable */
- if ((tret = realloc(ret, ((nret + crtc->noutput) *
+ if ((tret = realloc(ret, ((nret + crtc->noutput) *
sizeof(Ecore_X_Randr_Output)))))
{
ret = tret;
- memcpy(&ret[nret], crtc->outputs,
+ memcpy(&ret[nret], crtc->outputs,
(crtc->noutput * sizeof(Ecore_X_Randr_Output)));
nret += crtc->noutput;
}
@@ -1130,9 +1130,9 @@ ecore_x_randr_window_crtcs_get(Ecore_X_Window window, int *num)
}
/* try to get the screen resources from Xrandr
- *
+ *
* NB: We do this ONCE here as we reuse it for every crtc.
- * NB: The old code used to loop and fetch the screen resources on
+ * NB: The old code used to loop and fetch the screen resources on
* every crtc */
if ((res = _ecore_x_randr_screen_resources_get(_ecore_x_disp, root)))
{
@@ -1141,11 +1141,11 @@ ecore_x_randr_window_crtcs_get(Ecore_X_Window window, int *num)
int i = 0, nret = 0;
/* get the geometry of this window */
- ecore_x_window_geometry_get(window, &wrect.x, &wrect.y,
+ ecore_x_window_geometry_get(window, &wrect.x, &wrect.y,
&wrect.w, &wrect.h);
/* translate coordinates relative to root window */
- XTranslateCoordinates(_ecore_x_disp, window, root,
+ XTranslateCoordinates(_ecore_x_disp, window, root,
0, 0, &wrect.x, &wrect.y, &tw);
for (i = 0; i < ncrtcs; i++)
@@ -1325,7 +1325,7 @@ ecore_x_randr_crtc_possible_outputs_get(Ecore_X_Window root, Ecore_X_Randr_Crtc
return NULL;
}
-EAPI void
+EAPI void
ecore_x_randr_crtc_geometry_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *x, int *y, int *w, int *h)
{
#ifdef ECORE_XRANDR
@@ -1356,7 +1356,7 @@ ecore_x_randr_crtc_geometry_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, in
#endif
}
-EAPI void
+EAPI void
ecore_x_randr_crtc_pos_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *x, int *y)
{
#ifdef ECORE_XRANDR
@@ -1378,7 +1378,7 @@ ecore_x_randr_crtc_pos_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *x,
* value will be kept.
* @return @c EINA_TRUE if position could successfully be altered.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_pos_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int x, int y)
{
#ifdef ECORE_XRANDR
@@ -1419,7 +1419,7 @@ ecore_x_randr_crtc_pos_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int x,
* @return currently set mode or - in case parameters are invalid -
* Ecore_X_Randr_Unset
*/
-EAPI Ecore_X_Randr_Mode
+EAPI Ecore_X_Randr_Mode
ecore_x_randr_crtc_mode_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc)
{
#ifdef ECORE_XRANDR
@@ -1466,19 +1466,19 @@ ecore_x_randr_crtc_mode_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc)
* @return @c EINA_TRUE if mode setting was successful, @c EINA_FALSE
* otherwise.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_mode_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, Ecore_X_Randr_Output *outputs, int noutputs, Ecore_X_Randr_Mode mode)
{
#ifdef ECORE_XRANDR
if (_randr_version < RANDR_VERSION_1_2) return EINA_FALSE;
- return ecore_x_randr_crtc_settings_set(root, crtc, outputs, noutputs,
+ return ecore_x_randr_crtc_settings_set(root, crtc, outputs, noutputs,
-1, -1, mode, -1);
#endif
return EINA_FALSE;
}
-EAPI void
+EAPI void
ecore_x_randr_crtc_size_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *w, int *h)
{
#ifdef ECORE_XRANDR
@@ -1487,7 +1487,7 @@ ecore_x_randr_crtc_size_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *w
#endif
}
-EAPI Ecore_X_Randr_Refresh_Rate
+EAPI Ecore_X_Randr_Refresh_Rate
ecore_x_randr_crtc_refresh_rate_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc EINA_UNUSED, Ecore_X_Randr_Mode mode)
{
#ifdef ECORE_XRANDR
@@ -1524,7 +1524,7 @@ ecore_x_randr_crtc_refresh_rate_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc
return 0.0;
}
-EAPI Ecore_X_Randr_Orientation
+EAPI Ecore_X_Randr_Orientation
ecore_x_randr_crtc_orientations_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc)
{
#ifdef ECORE_XRANDR
@@ -1557,7 +1557,7 @@ ecore_x_randr_crtc_orientations_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc
return 0;
}
-EAPI Ecore_X_Randr_Orientation
+EAPI Ecore_X_Randr_Orientation
ecore_x_randr_crtc_orientation_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc)
{
#ifdef ECORE_XRANDR
@@ -1590,20 +1590,20 @@ ecore_x_randr_crtc_orientation_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc)
return 0;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_orientation_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, const Ecore_X_Randr_Orientation orientation)
{
#ifdef ECORE_XRANDR
if (_randr_version < RANDR_VERSION_1_2) return EINA_FALSE;
if (orientation != 0)
- return ecore_x_randr_crtc_settings_set(root, crtc, NULL,
+ return ecore_x_randr_crtc_settings_set(root, crtc, NULL,
-1, -1, -1, -1, orientation);
#endif
return EINA_FALSE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_clone_set(Ecore_X_Window root, Ecore_X_Randr_Crtc original, Ecore_X_Randr_Crtc cln)
{
#ifdef ECORE_XRANDR
@@ -1632,7 +1632,7 @@ ecore_x_randr_crtc_clone_set(Ecore_X_Window root, Ecore_X_Randr_Crtc original, E
XRRFreeCrtcInfo(info);
}
- ret = ecore_x_randr_crtc_settings_set(root, cln, NULL, -1, ox, oy,
+ ret = ecore_x_randr_crtc_settings_set(root, cln, NULL, -1, ox, oy,
orig_mode, orig_orient);
/* free the resources */
@@ -1666,7 +1666,7 @@ ecore_x_randr_crtc_clone_set(Ecore_X_Window root, Ecore_X_Randr_Crtc original, E
* @return @c EINA_TRUE if the configuration alteration was successful,
* @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_settings_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, Ecore_X_Randr_Output *outputs, int noutputs, int x, int y, Ecore_X_Randr_Mode mode, Ecore_X_Randr_Orientation orientation)
{
#ifdef ECORE_XRANDR
@@ -1719,8 +1719,8 @@ ecore_x_randr_crtc_settings_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, Ec
}
/* try to set the crtc config */
- if (!XRRSetCrtcConfig(_ecore_x_disp, res, rcrtc, CurrentTime,
- x, y, mode, orientation,
+ if (!XRRSetCrtcConfig(_ecore_x_disp, res, rcrtc, CurrentTime,
+ x, y, mode, orientation,
routputs, noutputs))
ret = EINA_TRUE;
@@ -1751,7 +1751,7 @@ ecore_x_randr_crtc_settings_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, Ec
* if repositioning failed or if position of new crtc would be out of given
* screen's min/max bounds.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_pos_relative_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc_r1, Ecore_X_Randr_Crtc crtc_r2, Ecore_X_Randr_Output_Policy policy, Ecore_X_Randr_Relative_Alignment alignment)
{
#ifdef ECORE_XRANDR
@@ -1818,7 +1818,7 @@ ecore_x_randr_crtc_pos_relative_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc
nx = -1;
break;
case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL:
- nx = ((int)((((double)r2.x + (double)r2.w) / 2.0) -
+ nx = ((int)((((double)r2.x + (double)r2.w) / 2.0) -
((double)r1.w / 2.0)));
break;
case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR:
@@ -1836,7 +1836,7 @@ ecore_x_randr_crtc_pos_relative_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc
nx = -1;
break;
case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL:
- nx = ((int)((((double)r2.x + (double)r2.w) / 2.0) -
+ nx = ((int)((((double)r2.x + (double)r2.w) / 2.0) -
((double)r1.w / 2.0)));
break;
case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR:
@@ -1902,7 +1902,7 @@ ecore_x_randr_crtc_info_get(Ecore_X_Window root, const Ecore_X_Randr_Crtc crtc)
if (info->noutput > 0)
{
- if ((ret->outputs =
+ if ((ret->outputs =
malloc(info->noutput * sizeof(Ecore_X_Randr_Output))))
{
int i = 0;
@@ -1915,7 +1915,7 @@ ecore_x_randr_crtc_info_get(Ecore_X_Window root, const Ecore_X_Randr_Crtc crtc)
if (info->npossible > 0)
{
- if ((ret->possible =
+ if ((ret->possible =
malloc(info->npossible * sizeof(Ecore_X_Randr_Output))))
{
int i = 0;
@@ -1943,7 +1943,7 @@ ecore_x_randr_crtc_info_get(Ecore_X_Window root, const Ecore_X_Randr_Crtc crtc)
/*
* @since 1.8
*/
-EAPI void
+EAPI void
ecore_x_randr_crtc_info_free(Ecore_X_Randr_Crtc_Info *info)
{
#ifdef ECORE_XRANDR
@@ -1968,7 +1968,7 @@ ecore_x_randr_crtc_info_free(Ecore_X_Randr_Crtc_Info *info)
* @c EINA_TRUE.
* @since 1.2.0
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_output_mode_add(Ecore_X_Randr_Output output, Ecore_X_Randr_Mode mode)
{
#ifdef ECORE_XRANDR
@@ -1977,7 +1977,7 @@ ecore_x_randr_output_mode_add(Ecore_X_Randr_Output output, Ecore_X_Randr_Mode mo
if ((output) && (mode))
{
/* add this mode to output
- *
+ *
* NB: This XRR function returns void so we have to assume it worked */
XRRAddOutputMode(_ecore_x_disp, output, mode);
@@ -1993,7 +1993,7 @@ ecore_x_randr_output_mode_add(Ecore_X_Randr_Output output, Ecore_X_Randr_Mode mo
* @param mode the mode removed from the output
* @since 1.2.0
*/
-EAPI void
+EAPI void
ecore_x_randr_output_mode_del(Ecore_X_Randr_Output output, Ecore_X_Randr_Mode mode)
{
#ifdef ECORE_XRANDR
@@ -2144,7 +2144,7 @@ ecore_x_randr_output_possible_crtcs_get(Ecore_X_Window root, Ecore_X_Randr_Outpu
return NULL;
}
-EAPI Ecore_X_Randr_Crtc
+EAPI Ecore_X_Randr_Crtc
ecore_x_randr_output_crtc_get(Ecore_X_Window root, Ecore_X_Randr_Output output)
{
#ifdef ECORE_XRANDR
@@ -2231,7 +2231,7 @@ ecore_x_randr_output_name_get(Ecore_X_Window root, Ecore_X_Randr_Output output,
/*
* @deprecated use ecore_x_randr_crtc_gamma_size_get()
*/
-EINA_DEPRECATED EAPI int
+EINA_DEPRECATED EAPI int
ecore_x_randr_crtc_gamma_ramp_size_get(Ecore_X_Randr_Crtc crtc EINA_UNUSED)
{
return 0;
@@ -2249,7 +2249,7 @@ ecore_x_randr_crtc_gamma_ramps_get(Ecore_X_Randr_Crtc crtc EINA_UNUSED)
/*
* @deprecated use ecore_x_randr_crtc_gamma_set()
*/
-EINA_DEPRECATED EAPI Eina_Bool
+EINA_DEPRECATED EAPI Eina_Bool
ecore_x_randr_crtc_gamma_ramps_set(Ecore_X_Randr_Crtc crtc EINA_UNUSED, const Ecore_X_Randr_Crtc_Gamma *red EINA_UNUSED, const Ecore_X_Randr_Crtc_Gamma *green EINA_UNUSED, const Ecore_X_Randr_Crtc_Gamma *blue EINA_UNUSED)
{
return EINA_FALSE;
@@ -2258,7 +2258,7 @@ ecore_x_randr_crtc_gamma_ramps_set(Ecore_X_Randr_Crtc crtc EINA_UNUSED, const Ec
/*
* @since 1.8
*/
-EAPI int
+EAPI int
ecore_x_randr_crtc_gamma_size_get(Ecore_X_Randr_Crtc crtc)
{
#ifdef ECORE_XRANDR
@@ -2303,14 +2303,14 @@ ecore_x_randr_crtc_gamma_get(Ecore_X_Randr_Crtc crtc)
/*
* @since 1.8
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_gamma_set(Ecore_X_Randr_Crtc crtc, const Ecore_X_Randr_Crtc_Gamma_Info *gamma)
{
#ifdef ECORE_XRANDR
if (_randr_version < RANDR_VERSION_1_2) return EINA_FALSE;
/* try to set the gamma
- *
+ *
* NB: XRRSetCrtcGamma returns void
*/
XRRSetCrtcGamma(_ecore_x_disp, crtc, (XRRCrtcGamma *)gamma);
@@ -2322,7 +2322,7 @@ ecore_x_randr_crtc_gamma_set(Ecore_X_Randr_Crtc crtc, const Ecore_X_Randr_Crtc_G
return EINA_FALSE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_move_all_crtcs_but(Ecore_X_Window root, const Ecore_X_Randr_Crtc *not_moved, int nnot_moved, int dx, int dy)
{
#ifdef ECORE_XRANDR
@@ -2388,7 +2388,7 @@ ecore_x_randr_move_all_crtcs_but(Ecore_X_Window root, const Ecore_X_Randr_Crtc *
* @param dy Amount of pixels the CRTCs should be moved in y direction.
* @return @c EINA_TRUE if all crtcs could be moved successfully.
*/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_move_crtcs(Ecore_X_Window root, const Ecore_X_Randr_Crtc *crtcs, int ncrtc, int dx, int dy)
{
#ifdef ECORE_XRANDR
@@ -2420,8 +2420,8 @@ ecore_x_randr_move_crtcs(Ecore_X_Window root, const Ecore_X_Randr_Crtc *crtcs, i
/* try to get crtc info for original crtc */
if ((info[i] = XRRGetCrtcInfo(_ecore_x_disp, res, crtcs[i])))
{
- if (((info[i]->x + dx) < 0) || ((info[i]->y + dy < 0)) ||
- ((int)(info[i]->x + info[i]->width) > mw) ||
+ if (((info[i]->x + dx) < 0) || ((info[i]->y + dy < 0)) ||
+ ((int)(info[i]->x + info[i]->width) > mw) ||
((int)(info[i]->y + info[i]->height) > mh))
{
goto err;
@@ -2433,17 +2433,17 @@ ecore_x_randr_move_crtcs(Ecore_X_Window root, const Ecore_X_Randr_Crtc *crtcs, i
}
/* resize the screen if we need to */
- if (!(((nw > sw) || (nh > sh)) ||
+ if (!(((nw > sw) || (nh > sh)) ||
ecore_x_randr_screen_current_size_set(root, nw, nh, -1, -1)))
goto err;
/* actually move the crtcs */
for (i = 0; ((i < ncrtc) && info[i]); i++)
{
- if (!ecore_x_randr_crtc_settings_set(root, crtcs[i], NULL, -1,
- (info[i]->x + dx),
- (info[i]->y + dy),
- info[i]->mode,
+ if (!ecore_x_randr_crtc_settings_set(root, crtcs[i], NULL, -1,
+ (info[i]->x + dx),
+ (info[i]->y + dy),
+ info[i]->mode,
info[i]->rotation))
{
ret = EINA_FALSE;
@@ -2457,10 +2457,10 @@ ecore_x_randr_move_crtcs(Ecore_X_Window root, const Ecore_X_Randr_Crtc *crtcs, i
while ((--i) >= 0)
{
if (info[i])
- ecore_x_randr_crtc_settings_set(root, crtcs[i], NULL, -1,
- (info[i]->x - dx),
- (info[i]->y - dy),
- info[i]->mode,
+ ecore_x_randr_crtc_settings_set(root, crtcs[i], NULL, -1,
+ (info[i]->x - dx),
+ (info[i]->y - dy),
+ info[i]->mode,
info[i]->rotation);
}
}
@@ -2494,7 +2494,7 @@ err:
* @param w width of given mode in px
* @param h height of given mode in px
*/
-EAPI void
+EAPI void
ecore_x_randr_mode_size_get(Ecore_X_Window root, Ecore_X_Randr_Mode mode, int *w, int *h)
{
#ifdef ECORE_XRANDR
@@ -2526,20 +2526,20 @@ ecore_x_randr_mode_size_get(Ecore_X_Window root, Ecore_X_Randr_Mode mode, int *w
#endif
}
-EAPI Ecore_X_Randr_Connection_Status
+EAPI Ecore_X_Randr_Connection_Status
ecore_x_randr_output_connection_status_get(Ecore_X_Window root, Ecore_X_Randr_Output output)
{
#ifdef ECORE_XRANDR
XRRScreenResources *res = NULL;
- if (_randr_version < RANDR_VERSION_1_2)
+ if (_randr_version < RANDR_VERSION_1_2)
return ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
/* try to get the screen resources from Xrandr */
if ((res = _ecore_x_randr_screen_resources_get(_ecore_x_disp, root)))
{
XRROutputInfo *info = NULL;
- Ecore_X_Randr_Connection_Status ret =
+ Ecore_X_Randr_Connection_Status ret =
ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
/* try to get output info */
@@ -2560,7 +2560,7 @@ ecore_x_randr_output_connection_status_get(Ecore_X_Window root, Ecore_X_Randr_Ou
return ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
}
-EAPI void
+EAPI void
ecore_x_randr_output_size_mm_get(Ecore_X_Window root, Ecore_X_Randr_Output output, int *w, int *h)
{
#ifdef ECORE_XRANDR
@@ -2589,14 +2589,14 @@ ecore_x_randr_output_size_mm_get(Ecore_X_Window root, Ecore_X_Randr_Output outpu
#endif
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_output_crtc_set(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Output output EINA_UNUSED, const Ecore_X_Randr_Crtc crtc EINA_UNUSED)
{
/* TODO: !! */
return EINA_FALSE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_output_backlight_available(void)
{
#ifdef ECORE_XRANDR
@@ -2619,7 +2619,7 @@ ecore_x_randr_output_backlight_available(void)
* @param root The window's screen which will be set.
* @param level Of the backlight between @c 0 and @c 1.
*/
-EAPI void
+EAPI void
ecore_x_randr_screen_backlight_level_set(Ecore_X_Window root, double level)
{
#ifdef ECORE_XRANDR
@@ -2641,7 +2641,7 @@ ecore_x_randr_screen_backlight_level_set(Ecore_X_Window root, double level)
#endif
}
-EAPI double
+EAPI double
ecore_x_randr_output_backlight_level_get(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Output output)
{
#ifdef ECORE_XRANDR
@@ -2656,11 +2656,11 @@ ecore_x_randr_output_backlight_level_get(Ecore_X_Window root EINA_UNUSED, Ecore_
/* check if "new" backlight is available */
if (_randr_version >= RANDR_VERSION_1_3)
{
- if ((backlight =
+ if ((backlight =
XInternAtom(_ecore_x_disp, RR_PROPERTY_BACKLIGHT, True)))
{
- XRRGetOutputProperty(_ecore_x_disp, output, backlight, 0, 4,
- False, False, None, &type, &format,
+ XRRGetOutputProperty(_ecore_x_disp, output, backlight, 0, 4,
+ False, False, None, &type, &format,
&items, &bytes, &prop);
}
}
@@ -2668,15 +2668,15 @@ ecore_x_randr_output_backlight_level_get(Ecore_X_Window root EINA_UNUSED, Ecore_
if ((!prop) || (items == 0))
{
/* check legacy backlight property
- *
- * FIXME: NB: Not sure what randr version we need for the legacy
+ *
+ * FIXME: NB: Not sure what randr version we need for the legacy
* backlight property so skip version check */
if ((backlight = XInternAtom(_ecore_x_disp, "BACKLIGHT", True)))
{
free(prop);
prop = NULL;
- XRRGetOutputProperty(_ecore_x_disp, output, backlight, 0, 4,
- False, False, None, &type, &format,
+ XRRGetOutputProperty(_ecore_x_disp, output, backlight, 0, 4,
+ False, False, None, &type, &format,
&items, &bytes, &prop);
}
}
@@ -2700,7 +2700,7 @@ ecore_x_randr_output_backlight_level_get(Ecore_X_Window root EINA_UNUSED, Ecore_
if ((info->range) && (info->num_values == 2))
{
/* convert the current value */
- ret = ((double)(val - info->values[0])) /
+ ret = ((double)(val - info->values[0])) /
((double)(info->values[1] - info->values[0]));
}
@@ -2713,7 +2713,7 @@ ecore_x_randr_output_backlight_level_get(Ecore_X_Window root EINA_UNUSED, Ecore_
return -1;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_output_backlight_level_set(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Output output, double level)
{
#ifdef ECORE_XRANDR
@@ -2757,8 +2757,8 @@ ecore_x_randr_output_backlight_level_set(Ecore_X_Window root EINA_UNUSED, Ecore_
if (val < min) val = min;
/* tell xrandr to change the backlight value */
- XRRChangeOutputProperty(_ecore_x_disp, output, backlight,
- XA_INTEGER, 32, PropModeReplace,
+ XRRChangeOutputProperty(_ecore_x_disp, output, backlight,
+ XA_INTEGER, 32, PropModeReplace,
(unsigned char *)&val, 1);
/* send changes to X */
@@ -2796,14 +2796,14 @@ ecore_x_randr_output_edid_get(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Out
if (_randr_version < RANDR_VERSION_1_2) return NULL;
/* try to get the edid atom */
- if (!(edid = XInternAtom(_ecore_x_disp, RR_PROPERTY_RANDR_EDID, False)))
+ if (!(edid = XInternAtom(_ecore_x_disp, RR_PROPERTY_RANDR_EDID, False)))
return NULL;
/* get the output property
- *
+ *
* NB: Returns 0 on success */
if (!XRRGetOutputProperty(_ecore_x_disp, output, edid, 0, 128, False, False,
- AnyPropertyType, &type, &format, &nitems,
+ AnyPropertyType, &type, &format, &nitems,
&bytes, &prop))
{
if ((type == XA_INTEGER) && (nitems >= 1) && (format == 8))
@@ -2824,13 +2824,13 @@ ecore_x_randr_output_edid_get(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Out
return NULL;
}
-EAPI Ecore_X_Render_Subpixel_Order
+EAPI Ecore_X_Render_Subpixel_Order
ecore_x_randr_output_subpixel_order_get(Ecore_X_Window root, Ecore_X_Randr_Output output)
{
#ifdef ECORE_XRANDR
XRRScreenResources *res = NULL;
- if (_randr_version < RANDR_VERSION_1_2)
+ if (_randr_version < RANDR_VERSION_1_2)
return ECORE_X_RENDER_SUBPIXEL_ORDER_UNKNOWN;
/* try to get the screen resources from Xrandr */
@@ -2870,9 +2870,9 @@ ecore_x_randr_output_wired_clones_get(Ecore_X_Window root EINA_UNUSED, Ecore_X_R
int format = 0;
unsigned long nitems = 0, bytes = 0;
- /* NB: FIXME:
- *
- * I am not sure that this code is correct. This needs checking
+ /* NB: FIXME:
+ *
+ * I am not sure that this code is correct. This needs checking
*/
if (_randr_version < RANDR_VERSION_1_3) return NULL;
@@ -2882,10 +2882,10 @@ ecore_x_randr_output_wired_clones_get(Ecore_X_Window root EINA_UNUSED, Ecore_X_R
return NULL;
/* get the output property
- *
+ *
* NB: Returns 0 on success */
- if (!XRRGetOutputProperty(_ecore_x_disp, output, clones, 0, 100, False, False,
- AnyPropertyType, &type, &format, &nitems,
+ if (!XRRGetOutputProperty(_ecore_x_disp, output, clones, 0, 100, False, False,
+ AnyPropertyType, &type, &format, &nitems,
&bytes, &prop))
{
if ((type == XA_ATOM) && (nitems >= 1) && (format == 32))
@@ -2932,10 +2932,10 @@ ecore_x_randr_output_signal_formats_get(Ecore_X_Window root EINA_UNUSED, Ecore_X
return NULL;
/* try to get the output property from Xrandr
- *
+ *
* NB: Returns 0 on success */
- if (XRRGetOutputProperty(_ecore_x_disp, output, sig, 0, 100,
- False, False, AnyPropertyType, &type, &format,
+ if (XRRGetOutputProperty(_ecore_x_disp, output, sig, 0, 100,
+ False, False, AnyPropertyType, &type, &format,
&items, &bytes, &prop))
{
free(prop);
@@ -2958,10 +2958,10 @@ ecore_x_randr_output_signal_formats_get(Ecore_X_Window root EINA_UNUSED, Ecore_X
if (info->num_values > 0)
{
- if ((formats =
+ if ((formats =
malloc(info->num_values * sizeof(Ecore_X_Randr_Signal_Format))))
{
- memcpy(formats, info->values,
+ memcpy(formats, info->values,
(info->num_values * sizeof(Ecore_X_Randr_Signal_Format)));
}
}
@@ -2975,7 +2975,7 @@ ecore_x_randr_output_signal_formats_get(Ecore_X_Window root EINA_UNUSED, Ecore_X
return NULL;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_output_signal_format_set(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Output output EINA_UNUSED, Ecore_X_Randr_Signal_Format *sig EINA_UNUSED)
{
/* TODO: (1.3) !! */
@@ -3001,10 +3001,10 @@ ecore_x_randr_output_signal_properties_get(Ecore_X_Window root EINA_UNUSED, Ecor
return NULL;
/* try to get the output property from Xrandr
- *
+ *
* NB: Returns 0 on success */
- if (XRRGetOutputProperty(_ecore_x_disp, output, sig, 0, 100,
- False, False, AnyPropertyType, &type, &format,
+ if (XRRGetOutputProperty(_ecore_x_disp, output, sig, 0, 100,
+ False, False, AnyPropertyType, &type, &format,
&items, &bytes, &prop))
{
free(prop);
@@ -3027,10 +3027,10 @@ ecore_x_randr_output_signal_properties_get(Ecore_X_Window root EINA_UNUSED, Ecor
if (info->num_values > 0)
{
- if ((props =
+ if ((props =
malloc(info->num_values * sizeof(Ecore_X_Randr_Signal_Property))))
{
- memcpy(props, info->values,
+ memcpy(props, info->values,
(info->num_values * sizeof(Ecore_X_Randr_Signal_Property)));
}
}
@@ -3045,17 +3045,17 @@ ecore_x_randr_output_signal_properties_get(Ecore_X_Window root EINA_UNUSED, Ecor
}
/* TODO NB:
- *
+ *
* Document this.
- *
- * Returns:
+ *
+ * Returns:
* 0 == unknown
* 1 == primary
* 2 == secondary
* 3 == (typically) TV Connector but is driver/hardware dependent
- *
+ *
*/
-EAPI int
+EAPI int
ecore_x_randr_output_connector_number_get(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Output output)
{
#ifdef ECORE_XRANDR
@@ -3069,10 +3069,10 @@ ecore_x_randr_output_connector_number_get(Ecore_X_Window root EINA_UNUSED, Ecore
if (_randr_version < RANDR_VERSION_1_3) return -1;
/* try to get the output property from Xrandr
- *
+ *
* NB: Returns 0 on success */
- if (XRRGetOutputProperty(_ecore_x_disp, output, connector_number, 0, 100,
- False, False, AnyPropertyType, &type, &format,
+ if (XRRGetOutputProperty(_ecore_x_disp, output, connector_number, 0, 100,
+ False, False, AnyPropertyType, &type, &format,
&items, &bytes, &prop))
{
free(prop);
@@ -3107,7 +3107,7 @@ ecore_x_randr_output_connector_number_get(Ecore_X_Window root EINA_UNUSED, Ecore
return -1;
}
-EAPI Ecore_X_Randr_Connector_Type
+EAPI Ecore_X_Randr_Connector_Type
ecore_x_randr_output_connector_type_get(Ecore_X_Window root EINA_UNUSED, Ecore_X_Randr_Output output)
{
#ifdef ECORE_XRANDR
@@ -3121,8 +3121,8 @@ ecore_x_randr_output_connector_type_get(Ecore_X_Window root EINA_UNUSED, Ecore_X
if (_randr_version < RANDR_VERSION_1_3) return -1;
/* try to get the connector type atom */
- if (XRRGetOutputProperty(_ecore_x_disp, output, connector_type, 0, 100,
- False, False, AnyPropertyType, &type, &format,
+ if (XRRGetOutputProperty(_ecore_x_disp, output, connector_type, 0, 100,
+ False, False, AnyPropertyType, &type, &format,
&items, &bytes, &prop) != Success)
{
free(prop);
@@ -3134,12 +3134,12 @@ ecore_x_randr_output_connector_type_get(Ecore_X_Window root EINA_UNUSED, Ecore_X
Atom conn;
free(prop);
- /* NB: some butthead drivers (*cough* nouveau *cough*) do not
- * implement randr properly. They are not using the connector type
+ /* NB: some butthead drivers (*cough* nouveau *cough*) do not
+ * implement randr properly. They are not using the connector type
* property of randr, but rather a "subconnector" property */
if ((conn = XInternAtom(_ecore_x_disp, "subconnector", True)))
- XRRGetOutputProperty(_ecore_x_disp, output, conn, 0, 4,
- False, False, AnyPropertyType, &type,
+ XRRGetOutputProperty(_ecore_x_disp, output, conn, 0, 4,
+ False, False, AnyPropertyType, &type,
&format, &items, &bytes, &prop);
}
@@ -3178,7 +3178,7 @@ ecore_x_randr_output_connector_type_get(Ecore_X_Window root EINA_UNUSED, Ecore_X
return -1;
}
-EAPI Ecore_X_Randr_Output
+EAPI Ecore_X_Randr_Output
ecore_x_randr_primary_output_get(Ecore_X_Window root)
{
#ifdef ECORE_XRANDR
@@ -3189,7 +3189,7 @@ ecore_x_randr_primary_output_get(Ecore_X_Window root)
#endif
}
-EAPI void
+EAPI void
ecore_x_randr_primary_output_set(Ecore_X_Window root, Ecore_X_Randr_Output output)
{
#ifdef ECORE_XRANDR
@@ -3202,7 +3202,7 @@ ecore_x_randr_primary_output_set(Ecore_X_Window root, Ecore_X_Randr_Output outpu
* API Functions for RandR version 1.4 *
***************************************/
-EAPI void
+EAPI void
ecore_x_randr_crtc_panning_area_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *x, int *y, int *w, int *h)
{
#ifdef ECORE_XRANDR
@@ -3232,7 +3232,7 @@ ecore_x_randr_crtc_panning_area_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc
#endif
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_panning_area_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, const int x, const int y, const int w, const int h)
{
#ifdef ECORE_XRANDR
@@ -3273,7 +3273,7 @@ ecore_x_randr_crtc_panning_area_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc
#endif
}
-EAPI void
+EAPI void
ecore_x_randr_crtc_tracking_area_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *x, int *y, int *w, int *h)
{
#ifdef ECORE_XRANDR
@@ -3303,7 +3303,7 @@ ecore_x_randr_crtc_tracking_area_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crt
#endif
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_tracking_area_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, const int x, const int y, const int w, const int h)
{
#ifdef ECORE_XRANDR
@@ -3344,7 +3344,7 @@ ecore_x_randr_crtc_tracking_area_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crt
#endif
}
-EAPI void
+EAPI void
ecore_x_randr_crtc_border_area_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *x, int *y, int *w, int *h)
{
#ifdef ECORE_XRANDR
@@ -3374,7 +3374,7 @@ ecore_x_randr_crtc_border_area_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc,
#endif
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_crtc_border_area_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, const int left, const int top, const int right, const int bottom)
{
#ifdef ECORE_XRANDR
@@ -3419,7 +3419,7 @@ ecore_x_randr_crtc_border_area_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc,
* API Functions for RandR Edid
***************************************/
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_edid_has_valid_header(unsigned char *edid, unsigned long edid_length)
{
const unsigned char header[] =
@@ -3431,7 +3431,7 @@ ecore_x_randr_edid_has_valid_header(unsigned char *edid, unsigned long edid_leng
return EINA_FALSE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_edid_info_has_valid_checksum(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3466,14 +3466,14 @@ ecore_x_randr_edid_info_has_valid_checksum(unsigned char *edid, unsigned long ed
#endif
}
-EAPI int
+EAPI int
ecore_x_randr_edid_version_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
- if ((edid_length > RANDR_EDID_VERSION_MINOR) &&
+ if ((edid_length > RANDR_EDID_VERSION_MINOR) &&
(ecore_x_randr_edid_has_valid_header(edid, edid_length)))
{
- return (edid[RANDR_EDID_VERSION_MAJOR] << 8) |
+ return (edid[RANDR_EDID_VERSION_MAJOR] << 8) |
edid[RANDR_EDID_VERSION_MINOR];
}
@@ -3487,7 +3487,7 @@ EAPI char *
ecore_x_randr_edid_manufacturer_name_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
- if ((edid_length > RANDR_EDID_MANUFACTURER + 1) &&
+ if ((edid_length > RANDR_EDID_MANUFACTURER + 1) &&
(ecore_x_randr_edid_has_valid_header(edid, edid_length)))
{
unsigned char *x;
@@ -3517,7 +3517,7 @@ ecore_x_randr_edid_display_name_get(unsigned char *edid, unsigned long edid_leng
version = ecore_x_randr_edid_version_get(edid, edid_length);
if (version < RANDR_EDID_VERSION_1_3) return NULL;
- for (block = (edid + RANDR_EDID_BLOCK);
+ for (block = (edid + RANDR_EDID_BLOCK);
block <= (edid + RANDR_EDID_BLOCK + (3 * 18)); block += 18)
{
if ((block[0] == 0) && (block[1] == 0))
@@ -3553,7 +3553,7 @@ ecore_x_randr_edid_display_ascii_get(unsigned char *edid, unsigned long edid_len
version = ecore_x_randr_edid_version_get(edid, edid_length);
if (version < RANDR_EDID_VERSION_1_3) return NULL;
- for (block = (edid + RANDR_EDID_BLOCK);
+ for (block = (edid + RANDR_EDID_BLOCK);
block <= (edid + RANDR_EDID_BLOCK + (3 * 18)); block += 18)
{
if ((block[0] == 0) && (block[1] == 0))
@@ -3589,7 +3589,7 @@ ecore_x_randr_edid_display_serial_get(unsigned char *edid, unsigned long edid_le
version = ecore_x_randr_edid_version_get(edid, edid_length);
if (version < RANDR_EDID_VERSION_1_3) return NULL;
- for (block = (edid + RANDR_EDID_BLOCK);
+ for (block = (edid + RANDR_EDID_BLOCK);
block <= (edid + RANDR_EDID_BLOCK + (3 * 18)); block += 18)
{
if ((block[0] == 0) && (block[1] == 0))
@@ -3615,19 +3615,19 @@ ecore_x_randr_edid_display_serial_get(unsigned char *edid, unsigned long edid_le
return NULL;
}
-EAPI int
+EAPI int
ecore_x_randr_edid_model_get(unsigned char *edid, unsigned long edid_length)
{
return ecore_x_randr_edid_manufacturer_model_get(edid, edid_length);
}
-EAPI int
+EAPI int
ecore_x_randr_edid_manufacturer_serial_number_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
- if ((edid_length > RANDR_EDID_MANUFACTURER + 1) &&
+ if ((edid_length > RANDR_EDID_MANUFACTURER + 1) &&
(ecore_x_randr_edid_has_valid_header(edid, edid_length)))
- return (int)(edid[0x0c] + (edid[0x0d] << 8) +
+ return (int)(edid[0x0c] + (edid[0x0d] << 8) +
(edid[0x0e] << 16) + (edid[0x0f] << 24));
return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
@@ -3636,18 +3636,18 @@ ecore_x_randr_edid_manufacturer_serial_number_get(unsigned char *edid, unsigned
#endif
}
-EAPI int
+EAPI int
ecore_x_randr_edid_manufacturer_model_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
- if ((edid_length > RANDR_EDID_MANUFACTURER + 1) &&
+ if ((edid_length > RANDR_EDID_MANUFACTURER + 1) &&
(ecore_x_randr_edid_has_valid_header(edid, edid_length)))
return (int)(edid[0x0a] + (edid[0x0b] << 8));
#endif
return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_edid_dpms_available_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3662,7 +3662,7 @@ ecore_x_randr_edid_dpms_available_get(unsigned char *edid, unsigned long edid_le
#endif
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_edid_dpms_standby_available_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3676,7 +3676,7 @@ ecore_x_randr_edid_dpms_standby_available_get(unsigned char *edid, unsigned long
return EINA_FALSE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_edid_dpms_suspend_available_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3690,7 +3690,7 @@ ecore_x_randr_edid_dpms_suspend_available_get(unsigned char *edid, unsigned long
return EINA_FALSE;
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_edid_dpms_off_available_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3704,7 +3704,7 @@ ecore_x_randr_edid_dpms_off_available_get(unsigned char *edid, unsigned long edi
return EINA_FALSE;
}
-EAPI Ecore_X_Randr_Edid_Aspect_Ratio
+EAPI Ecore_X_Randr_Edid_Aspect_Ratio
ecore_x_randr_edid_display_aspect_ratio_preferred_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3712,17 +3712,17 @@ ecore_x_randr_edid_display_aspect_ratio_preferred_get(unsigned char *edid, unsig
int version = 0;
version = ecore_x_randr_edid_version_get(edid, edid_length);
- if (version < RANDR_EDID_VERSION_1_3)
+ if (version < RANDR_EDID_VERSION_1_3)
return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
- for (block = (edid + RANDR_EDID_BLOCK);
+ for (block = (edid + RANDR_EDID_BLOCK);
block <= (edid + RANDR_EDID_BLOCK + (3 * 18)); block += 18)
{
if ((block[0] == 0) && (block[1] == 0))
{
if ((block[3] == 0xfd) && (block[10] == 0x04))
{
- Ecore_X_Randr_Edid_Aspect_Ratio_Preferred ratio =
+ Ecore_X_Randr_Edid_Aspect_Ratio_Preferred ratio =
(Ecore_X_Randr_Edid_Aspect_Ratio_Preferred)((block[15] & 0xe0) >> 5);
switch (ratio)
@@ -3750,7 +3750,7 @@ ecore_x_randr_edid_display_aspect_ratio_preferred_get(unsigned char *edid, unsig
#endif
}
-EAPI Ecore_X_Randr_Edid_Aspect_Ratio
+EAPI Ecore_X_Randr_Edid_Aspect_Ratio
ecore_x_randr_edid_display_aspect_ratios_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3761,10 +3761,10 @@ ecore_x_randr_edid_display_aspect_ratios_get(unsigned char *edid, unsigned long
ret = ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
version = ecore_x_randr_edid_version_get(edid, edid_length);
- if (version < RANDR_EDID_VERSION_1_3)
+ if (version < RANDR_EDID_VERSION_1_3)
return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
- for (block = (edid + RANDR_EDID_BLOCK);
+ for (block = (edid + RANDR_EDID_BLOCK);
block <= (edid + RANDR_EDID_BLOCK + (3 * 18)); block += 18)
{
if ((block[0] == 0) && (block[1] == 0))
@@ -3791,7 +3791,7 @@ ecore_x_randr_edid_display_aspect_ratios_get(unsigned char *edid, unsigned long
#endif
}
-EAPI Ecore_X_Randr_Edid_Display_Colorscheme
+EAPI Ecore_X_Randr_Edid_Display_Colorscheme
ecore_x_randr_edid_display_colorscheme_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3801,7 +3801,7 @@ ecore_x_randr_edid_display_colorscheme_get(unsigned char *edid, unsigned long ed
ret = ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
version = ecore_x_randr_edid_version_get(edid, edid_length);
- if (version < RANDR_EDID_VERSION_1_3)
+ if (version < RANDR_EDID_VERSION_1_3)
return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
if (ecore_x_randr_edid_display_type_digital_get(edid, edid_length))
@@ -3821,7 +3821,7 @@ ecore_x_randr_edid_display_colorscheme_get(unsigned char *edid, unsigned long ed
#endif
}
-EAPI Eina_Bool
+EAPI Eina_Bool
ecore_x_randr_edid_display_type_digital_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3836,7 +3836,7 @@ ecore_x_randr_edid_display_type_digital_get(unsigned char *edid, unsigned long e
#endif
}
-EAPI Ecore_X_Randr_Edid_Display_Interface_Type
+EAPI Ecore_X_Randr_Edid_Display_Interface_Type
ecore_x_randr_edid_display_interface_type_get(unsigned char *edid, unsigned long edid_length)
{
#ifdef ECORE_XRANDR
@@ -3846,7 +3846,7 @@ ecore_x_randr_edid_display_interface_type_get(unsigned char *edid, unsigned long
type = ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
version = ecore_x_randr_edid_version_get(edid, edid_length);
- if (version < RANDR_EDID_VERSION_1_3)
+ if (version < RANDR_EDID_VERSION_1_3)
return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
type = (edid[0x14] & 0x0f);
diff --git a/src/lib/ecore_x/ecore_x_region.c b/src/lib/ecore_x/ecore_x_region.c
index 01f1fa76a3..d37040a48b 100644
--- a/src/lib/ecore_x/ecore_x_region.c
+++ b/src/lib/ecore_x/ecore_x_region.c
@@ -30,14 +30,14 @@
EAPI Ecore_X_XRegion *
ecore_x_xregion_new()
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return (Ecore_X_XRegion *)XCreateRegion();
}
EAPI void
ecore_x_xregion_free(Ecore_X_XRegion *region)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!region)
return;
@@ -49,7 +49,7 @@ ecore_x_xregion_set(Ecore_X_XRegion *region,
Ecore_X_GC gc)
{
Eina_Bool ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = !!XSetRegion(_ecore_x_disp, gc, (Region)region);
if (_ecore_xlib_sync) ecore_x_sync();
return ret;
@@ -60,7 +60,7 @@ ecore_x_xregion_translate(Ecore_X_XRegion *region,
int x,
int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!region)
return;
@@ -73,7 +73,7 @@ ecore_x_xregion_intersect(Ecore_X_XRegion *dst,
Ecore_X_XRegion *r1,
Ecore_X_XRegion *r2)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XIntersectRegion((Region)r1, (Region)r2, (Region)dst) ? EINA_TRUE : EINA_FALSE;
}
@@ -82,7 +82,7 @@ ecore_x_xregion_union(Ecore_X_XRegion *dst,
Ecore_X_XRegion *r1,
Ecore_X_XRegion *r2)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XUnionRegion((Region)r1, (Region)r2, (Region)dst) ? EINA_TRUE : EINA_FALSE;
}
@@ -93,7 +93,7 @@ ecore_x_xregion_union_rect(Ecore_X_XRegion *dst,
{
XRectangle xr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xr.x = rect->x;
xr.y = rect->y;
xr.width = rect->width;
@@ -107,7 +107,7 @@ ecore_x_xregion_subtract(Ecore_X_XRegion *dst,
Ecore_X_XRegion *rm,
Ecore_X_XRegion *rs)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XSubtractRegion((Region)rm, (Region)rs, (Region)dst) ? EINA_TRUE : EINA_FALSE;
}
@@ -117,7 +117,7 @@ ecore_x_xregion_is_empty(Ecore_X_XRegion *region)
if (!region)
return EINA_TRUE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XEmptyRegion((Region)region) ? EINA_TRUE : EINA_FALSE;
}
@@ -128,7 +128,7 @@ ecore_x_xregion_is_equal(Ecore_X_XRegion *r1,
if (!r1 || !r2)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XEqualRegion((Region)r1, (Region)r1) ? EINA_TRUE : EINA_FALSE;
}
@@ -140,7 +140,7 @@ ecore_x_xregion_point_contain(Ecore_X_XRegion *region,
if (!region)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XPointInRegion((Region)region, x, y) ? EINA_TRUE : EINA_FALSE;
}
@@ -151,7 +151,7 @@ ecore_x_xregion_rect_contain(Ecore_X_XRegion *region,
if (!region || !rect)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XRectInRegion((Region)region,
rect->x,
rect->y,
diff --git a/src/lib/ecore_x/ecore_x_resource.c b/src/lib/ecore_x/ecore_x_resource.c
new file mode 100644
index 0000000000..fe6f8ccd42
--- /dev/null
+++ b/src/lib/ecore_x/ecore_x_resource.c
@@ -0,0 +1,118 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif /* ifdef HAVE_CONFIG_H */
+
+#include "ecore_x_private.h"
+
+static Eina_Bool _ecore_x_resource_initted = EINA_FALSE;
+static XrmDatabase _ecore_x_resource_db = NULL;
+
+static void
+_ecore_x_resource_init(void)
+{
+ if (_ecore_x_resource_initted) return;
+ XrmInitialize();
+ _ecore_x_resource_initted = EINA_TRUE;
+}
+
+void
+_ecore_x_resource_shutdown(void)
+{
+ if (!_ecore_x_disp) return;
+ if (!_ecore_x_resource_initted) return;
+ if (_ecore_x_resource_db) _ecore_x_resource_db = NULL;
+ _ecore_x_resource_initted = EINA_FALSE;
+}
+
+EAPI void
+ecore_x_rersource_load(const char *file)
+{
+ XrmDatabase db;
+
+ if (!_ecore_x_disp) return;
+ _ecore_x_resource_init();
+ db = XrmGetFileDatabase(file);
+ if (!db) return;
+ if (_ecore_x_resource_db) XrmDestroyDatabase(_ecore_x_resource_db);
+ _ecore_x_resource_db = db;
+// something smells fishy/broken in xlib - this segfaults in trying to free
+// up the previous db bveing used for that display...
+// XrmSetDatabase(_ecore_x_disp, db);
+}
+
+EAPI void
+ecore_x_resource_db_string_set(const char *key, const char *val)
+{
+ if (!_ecore_x_disp) return;
+ _ecore_x_resource_init();
+ if ((!key) || (!val)) return;
+ if (!_ecore_x_resource_db)
+ _ecore_x_resource_db = XrmGetDatabase(_ecore_x_disp);
+ XrmPutStringResource(&_ecore_x_resource_db, key, val);
+}
+
+EAPI const char *
+ecore_x_resource_db_string_get(const char *key)
+{
+ char *type = NULL;
+ XrmValue xval = { 0, NULL };
+
+ if (!_ecore_x_disp) return NULL;
+ _ecore_x_resource_init();
+ if (!_ecore_x_resource_db)
+ _ecore_x_resource_db = XrmGetDatabase(_ecore_x_disp);
+ if (XrmGetResource(_ecore_x_resource_db, key, "String", &type, &xval))
+ {
+ if (xval.addr && (!strcmp(type, "String")))
+ {
+ if (xval.size > 0) return xval.addr;
+ }
+ }
+ return NULL;
+}
+
+EAPI void
+ecore_x_resource_db_flush(void)
+{
+ Ecore_X_Atom atom, type;
+ Ecore_X_Window *roots;
+ int i, num, fd;
+ char *str;
+ Eina_Tmpstr *path = NULL;
+ off_t offset;
+
+ if (!_ecore_x_disp) return;
+ _ecore_x_resource_init();
+ if (!_ecore_x_resource_db) return;
+ fd = eina_file_mkstemp("ecore-x-resource-XXXXXX", &path);
+ if (fd < 0) return;
+ XrmPutFileDatabase(_ecore_x_resource_db, path);
+ offset = lseek(fd, 0, SEEK_END);
+ if (offset > 0)
+ {
+ lseek(fd, 0, SEEK_SET);
+ str = malloc(offset + 1);
+ if (str)
+ {
+ if (read(fd, str, offset) == offset)
+ {
+ str[offset] = 0;
+ atom = XInternAtom(_ecore_x_disp, "RESOURCE_MANAGER", False);
+ type = ECORE_X_ATOM_STRING;
+ roots = ecore_x_window_root_list(&num);
+ if (roots)
+ {
+ for (i = 0; i < num; i++)
+ ecore_x_window_prop_property_set(roots[i],
+ atom, type,
+ 8, str, offset);
+ free(roots);
+ }
+ }
+ free(str);
+ }
+ }
+ eina_tmpstr_del(path);
+ close(fd);
+ unlink(path);
+}
diff --git a/src/lib/ecore_x/ecore_x_screensaver.c b/src/lib/ecore_x/ecore_x_screensaver.c
index faaa6256f7..0fc4bf30f9 100644
--- a/src/lib/ecore_x/ecore_x_screensaver.c
+++ b/src/lib/ecore_x/ecore_x_screensaver.c
@@ -22,7 +22,7 @@ ecore_x_screensaver_event_available_get(void)
#ifdef ECORE_XSS
int _screensaver_major, _screensaver_minor;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_screensaver_major = 1;
_screensaver_minor = 0;
@@ -47,7 +47,7 @@ ecore_x_screensaver_idle_time_get(void)
int dummy;
int idle;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xss = XScreenSaverAllocInfo();
XScreenSaverQueryInfo(_ecore_x_disp,
RootWindow(_ecore_x_disp, DefaultScreen(
@@ -104,7 +104,7 @@ ecore_x_screensaver_set(int timeout,
int prefer_blanking,
int allow_exposures)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSetScreenSaver(_ecore_x_disp,
timeout,
interval,
@@ -117,7 +117,7 @@ ecore_x_screensaver_timeout_set(int timeout)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
XSetScreenSaver(_ecore_x_disp, timeout, pint, pblank, pexpo);
}
@@ -127,7 +127,7 @@ ecore_x_screensaver_timeout_get(void)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
return pto;
}
@@ -137,7 +137,7 @@ ecore_x_screensaver_blank_set(int blank)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
XSetScreenSaver(_ecore_x_disp, pto, pint, blank, pexpo);
}
@@ -147,7 +147,7 @@ ecore_x_screensaver_blank_get(void)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
return pblank;
}
@@ -157,7 +157,7 @@ ecore_x_screensaver_expose_set(int expose)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
XSetScreenSaver(_ecore_x_disp, pto, pint, pblank, expose);
}
@@ -167,7 +167,7 @@ ecore_x_screensaver_expose_get(void)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
return pexpo;
}
@@ -177,7 +177,7 @@ ecore_x_screensaver_interval_set(int interval)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
XSetScreenSaver(_ecore_x_disp, pto, interval, pblank, pexpo);
}
@@ -187,7 +187,7 @@ ecore_x_screensaver_interval_get(void)
{
int pto, pint, pblank, pexpo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
return pint;
}
@@ -198,7 +198,7 @@ ecore_x_screensaver_event_listen_set(Eina_Bool on)
#ifdef ECORE_XSS
Ecore_X_Window root;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
root = DefaultRootWindow(_ecore_x_disp);
if (on)
XScreenSaverSelectInput(_ecore_x_disp, root,
@@ -217,7 +217,7 @@ ecore_x_screensaver_custom_blanking_enable(void)
{
#ifdef ECORE_XSS
XSetWindowAttributes attr;
-
+
XScreenSaverSetAttributes(_ecore_x_disp,
DefaultRootWindow(_ecore_x_disp),
-9999, -9999, 1, 1, 0,
@@ -247,7 +247,7 @@ ecore_x_screensaver_supend(void)
ecore_x_screensaver_suspend();
}
-EAPI void
+EAPI void
ecore_x_screensaver_suspend(void)
{
#ifdef ECORE_XSS
diff --git a/src/lib/ecore_x/ecore_x_selection.c b/src/lib/ecore_x/ecore_x_selection.c
index 22cd5c8c7f..de4c91abd5 100644
--- a/src/lib/ecore_x/ecore_x_selection.c
+++ b/src/lib/ecore_x/ecore_x_selection.c
@@ -175,7 +175,7 @@ ecore_x_selection_primary_set(Ecore_X_Window w,
const void *data,
int size)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_PRIMARY);
}
@@ -188,7 +188,7 @@ ecore_x_selection_primary_set(Ecore_X_Window w,
EAPI Eina_Bool
ecore_x_selection_primary_clear(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_PRIMARY);
}
@@ -205,7 +205,7 @@ ecore_x_selection_secondary_set(Ecore_X_Window w,
const void *data,
int size)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(w,
data,
size,
@@ -221,7 +221,7 @@ ecore_x_selection_secondary_set(Ecore_X_Window w,
EAPI Eina_Bool
ecore_x_selection_secondary_clear(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(None,
NULL,
0,
@@ -241,7 +241,7 @@ ecore_x_selection_xdnd_set(Ecore_X_Window w,
const void *data,
int size)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_XDND);
}
@@ -254,7 +254,7 @@ ecore_x_selection_xdnd_set(Ecore_X_Window w,
EAPI Eina_Bool
ecore_x_selection_xdnd_clear(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_XDND);
}
@@ -274,7 +274,7 @@ ecore_x_selection_clipboard_set(Ecore_X_Window w,
const void *data,
int size)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(w,
data,
size,
@@ -290,7 +290,7 @@ ecore_x_selection_clipboard_set(Ecore_X_Window w,
EAPI Eina_Bool
ecore_x_selection_clipboard_clear(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_selection_set(None,
NULL,
0,
@@ -365,7 +365,7 @@ EAPI void
ecore_x_selection_primary_request(Ecore_X_Window w,
const char *target)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_PRIMARY, target);
}
@@ -373,7 +373,7 @@ EAPI void
ecore_x_selection_secondary_request(Ecore_X_Window w,
const char *target)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_SECONDARY, target);
}
@@ -384,7 +384,7 @@ ecore_x_selection_xdnd_request(Ecore_X_Window w,
Ecore_X_Atom atom;
Ecore_X_DND_Target *_target;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_target = _ecore_x_dnd_target_get();
atom = _ecore_x_selection_target_atom_get(target);
XConvertSelection(_ecore_x_disp, ECORE_X_ATOM_SELECTION_XDND, atom,
@@ -397,7 +397,7 @@ EAPI void
ecore_x_selection_clipboard_request(Ecore_X_Window w,
const char *target)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_CLIPBOARD, target);
}
@@ -413,7 +413,7 @@ ecore_x_selection_converter_atom_add(Ecore_X_Atom target,
{
Ecore_X_Selection_Converter *cnv;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_INLIST_FOREACH(converters, cnv)
if (cnv->target == target)
@@ -446,7 +446,7 @@ ecore_x_selection_converter_add(char *target,
if (!func || !target)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
x_target = _ecore_x_selection_target_atom_get(target);
ecore_x_selection_converter_atom_add(x_target, func);
@@ -457,7 +457,7 @@ ecore_x_selection_converter_atom_del(Ecore_X_Atom target)
{
Ecore_X_Selection_Converter *cnv;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_INLIST_FOREACH(converters, cnv)
{
@@ -479,7 +479,7 @@ ecore_x_selection_converter_del(char *target)
if (!target)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
x_target = _ecore_x_selection_target_atom_get(target);
ecore_x_selection_converter_atom_del(x_target);
}
@@ -494,7 +494,7 @@ ecore_x_selection_notify_send(Ecore_X_Window requestor,
XEvent xev = { 0 };
XSelectionEvent xnotify;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xnotify.type = SelectionNotify;
xnotify.display = _ecore_x_disp;
xnotify.requestor = requestor;
@@ -523,7 +523,7 @@ ecore_x_selection_convert(Ecore_X_Atom selection,
void *data = NULL;
char *tgt_str;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
sel = _ecore_x_selection_get(selection);
tgt_str = _ecore_x_selection_target_get(target);
@@ -576,7 +576,7 @@ ecore_x_selection_converter_text(char *target,
if (!data || !size)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!strcmp(target, ECORE_X_SELECTION_TARGET_TEXT))
style = XTextStyle;
else if (!strcmp(target, ECORE_X_SELECTION_TARGET_COMPOUND_TEXT))
@@ -641,7 +641,7 @@ ecore_x_selection_parser_add(const char *target,
if (!target)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_INLIST_FOREACH(parsers, prs)
if (!strcmp(prs->target, target))
@@ -668,7 +668,7 @@ ecore_x_selection_parser_del(const char *target)
if (!target)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
EINA_INLIST_FOREACH(parsers, prs)
{
@@ -990,15 +990,15 @@ _ecore_x_selection_parser_targets(const char *target EINA_UNUSED,
if (!sel) return NULL;
targets = data;
- sel->num_targets = size - 2;
- sel->targets = malloc((size - 2) * sizeof(char *));
+ sel->num_targets = size;
+ sel->targets = malloc((sel->num_targets) * sizeof(char *));
if (!sel->targets)
{
free(sel);
return NULL;
}
- for (i = 2; i < size; i++)
- sel->targets[i - 2] = XGetAtomName(_ecore_x_disp, targets[i]);
+ for (i = 0; i < size; i++)
+ sel->targets[i] = XGetAtomName(_ecore_x_disp, targets[i]);
ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_targets_free;
ECORE_X_SELECTION_DATA(sel)->content = ECORE_X_SELECTION_CONTENT_TARGETS;
diff --git a/src/lib/ecore_x/ecore_x_sync.c b/src/lib/ecore_x/ecore_x_sync.c
index 0c7f546f1a..54c0013573 100644
--- a/src/lib/ecore_x/ecore_x_sync.c
+++ b/src/lib/ecore_x/ecore_x_sync.c
@@ -18,7 +18,7 @@ ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter)
XSyncAlarmAttributes values;
XSyncValue init;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncIntToValue(&init, 0);
XSyncSetCounter(_ecore_x_disp, counter, init);
@@ -47,7 +47,7 @@ ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter)
EAPI Eina_Bool
ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return XSyncDestroyAlarm(_ecore_x_disp, alarm);
}
@@ -57,7 +57,7 @@ ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter,
{
XSyncValue value;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
{
*val = (unsigned int)XSyncValueLow32(value);
@@ -73,7 +73,7 @@ ecore_x_sync_counter_new(int val)
XSyncCounter counter;
XSyncValue v;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncIntToValue(&v, val);
counter = XSyncCreateCounter(_ecore_x_disp, v);
return counter;
@@ -82,7 +82,7 @@ ecore_x_sync_counter_new(int val)
EAPI void
ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncDestroyCounter(_ecore_x_disp, counter);
}
@@ -92,7 +92,7 @@ ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter,
{
XSyncValue v;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncIntToValue(&v, by);
XSyncChangeCounter(_ecore_x_disp, counter, v);
}
@@ -104,7 +104,7 @@ ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter,
XSyncWaitCondition cond;
XSyncValue v, v2;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncQueryCounter(_ecore_x_disp, counter, &v);
XSyncIntToValue(&v, val);
XSyncIntToValue(&v2, val + 1);
@@ -123,7 +123,7 @@ ecore_x_sync_counter_set(Ecore_X_Sync_Counter counter,
{
XSyncValue v;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncIntToValue(&v, val);
XSyncSetCounter(_ecore_x_disp, counter, v);
}
@@ -135,7 +135,7 @@ ecore_x_sync_counter_2_set(Ecore_X_Sync_Counter counter,
{
XSyncValue v;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSyncIntsToValue(&v, val_lo, val_hi);
XSyncSetCounter(_ecore_x_disp, counter, v);
}
@@ -147,7 +147,7 @@ ecore_x_sync_counter_2_query(Ecore_X_Sync_Counter counter,
{
XSyncValue value;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
{
*val_lo = (unsigned int)XSyncValueLow32(value);
diff --git a/src/lib/ecore_x/ecore_x_test.c b/src/lib/ecore_x/ecore_x_test.c
index f55291069e..51ead5a136 100644
--- a/src/lib/ecore_x/ecore_x_test.c
+++ b/src/lib/ecore_x/ecore_x_test.c
@@ -23,7 +23,7 @@ ecore_x_test_fake_key_down(const char *key EINA_UNUSED)
KeyCode keycode = 0;
KeySym keysym;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!strncmp(key, "Keycode-", 8))
keycode = atoi(key + 8);
else
@@ -55,7 +55,7 @@ ecore_x_test_fake_key_up(const char *key EINA_UNUSED)
KeyCode keycode = 0;
KeySym keysym;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!strncmp(key, "Keycode-", 8))
keycode = atoi(key + 8);
else
@@ -88,7 +88,7 @@ ecore_x_test_fake_key_press(const char *key EINA_UNUSED)
KeySym keysym = 0;
int shift = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!strncmp(key, "Keycode-", 8))
keycode = atoi(key + 8);
else
@@ -153,7 +153,7 @@ ecore_x_keysym_string_get(int keysym)
return XKeysymToString(keysym);
}
-EAPI int
+EAPI int
ecore_x_keysym_keycode_get(const char *keyname)
{
int keycode = 0;
diff --git a/src/lib/ecore_x/ecore_x_vsync.c b/src/lib/ecore_x/ecore_x_vsync.c
index 05e18edd5f..5ad828d0fe 100644
--- a/src/lib/ecore_x/ecore_x_vsync.c
+++ b/src/lib/ecore_x/ecore_x_vsync.c
@@ -29,6 +29,8 @@ int _ecore_x_image_shm_check(void);
static int _vsync_log_dom = -1;
+static double _ecore_x_vsync_animator_tick_delay = 0.0;
+
#undef ERR
#define ERR(...) EINA_LOG_DOM_ERR(_vsync_log_dom, __VA_ARGS__)
@@ -154,6 +156,9 @@ static Ecore_Thread *drm_thread = NULL;
static Eina_Spinlock tick_queue_lock;
static int tick_queue_count = 0;
static Eina_Bool tick_skip = EINA_FALSE;
+static Eina_Bool threaded_vsync = EINA_TRUE;
+static Ecore_Timer *fail_timer = NULL;
+static Ecore_Timer *fallback_timer = NULL;
typedef struct
{
@@ -167,6 +172,37 @@ typedef struct
# define D(args...)
#endif
+static void _drm_send_time(double t);
+
+static Eina_Bool
+_fallback_timeout(void *data EINA_UNUSED)
+{
+ if (drm_event_is_busy)
+ {
+ _drm_send_time(ecore_loop_time_get());
+ return EINA_TRUE;
+ }
+ fallback_timer = NULL;
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_fail_timeout(void *data EINA_UNUSED)
+{
+ fail_timer = NULL;
+ _drm_fail_count++;
+ if (_drm_fail_count >= 10)
+ {
+ _drm_fail_count = 10;
+ if (!fallback_timer)
+ fallback_timer = ecore_timer_add
+ (1.0 / 60.0, _fallback_timeout, NULL);
+ }
+ if (drm_event_is_busy)
+ _drm_send_time(ecore_loop_time_get());
+ return EINA_FALSE;
+}
+
static Eina_Bool
_drm_tick_schedule(void)
{
@@ -196,7 +232,33 @@ _drm_tick_begin(void *data EINA_UNUSED)
{
_drm_fail_count = 0;
drm_event_is_busy = 1;
- _tick_send(1);
+ if (threaded_vsync)
+ {
+ _tick_send(1);
+ }
+ else
+ {
+ if (fail_timer) ecore_timer_reset(fail_timer);
+ else fail_timer = ecore_timer_add(1.0 / 15.0, _fail_timeout, NULL);
+ if (_drm_fail_count < 10)
+ {
+ if (!_drm_tick_schedule())
+ {
+ _drm_fail_count = 999999;
+ if (!fallback_timer)
+ fallback_timer = ecore_timer_add
+ (1.0 / 60.0, _fallback_timeout, NULL);
+ }
+ }
+ else
+ {
+ if (!_drm_tick_schedule())
+ _drm_fail_count = 999999;
+ if (!fallback_timer)
+ fallback_timer = ecore_timer_add
+ (1.0 / 60.0, _fallback_timeout, NULL);
+ }
+ }
}
static void
@@ -204,22 +266,105 @@ _drm_tick_end(void *data EINA_UNUSED)
{
_drm_fail_count = 0;
drm_event_is_busy = 0;
- _tick_send(0);
+ if (threaded_vsync)
+ {
+ _tick_send(0);
+ }
+ else
+ {
+ if (fail_timer)
+ {
+ ecore_timer_del(fail_timer);
+ fail_timer = NULL;
+ }
+ if (fallback_timer)
+ {
+ ecore_timer_del(fallback_timer);
+ fallback_timer = NULL;
+ }
+ }
}
static void
_drm_send_time(double t)
{
- double *tim = malloc(sizeof(*tim));
- if (tim)
+ if (threaded_vsync)
+ {
+ static double t_last = 0.0;
+ double *tim = malloc(sizeof(*tim));
+
+ // you won't believe this
+ if (t <= t_last)
+ {
+ fprintf(stderr, "EEEEEEK! time went backwards! %1.5f -> %1.5f\n", t_last, t);
+ t = ecore_time_get();
+ if (t <= t_last) t = t_last + 0.001;
+ }
+ if (tim)
+ {
+ *tim = t;
+ DBG(" ... send %1.8f", t);
+ // if we are the wm/compositor we need to offset out vsync by 1/2
+ // a frame ... we should never offset by more than
+ // frame_time - render_time though ... but we don't know what
+ // this is and this varies... so for now this will do.a
+ if (_ecore_x_vsync_animator_tick_delay > 0.0)
+ {
+ static double t_delta_hist[10] = { 0.0 };
+ double t_delta = t - t_last;
+ double t_delta_min = 0.0;
+ double t_sleep = 0.0;
+
+ // if time delta is sane like 1/20th of a sec or less..
+ if (t_delta < (1.0 / 20.0))
+ {
+ int i;
+
+ for (i = 0; i < 9; i++)
+ t_delta_hist[i] = t_delta_hist[i + 1];
+ t_delta_hist[9] = t_delta;
+ t_delta_min = t_delta_hist[0];
+ for (i = 1; i < 10; i++)
+ {
+ if (t_delta_hist[i] < t_delta_min)
+ t_delta_min = t_delta_hist[i];
+ }
+ t_sleep = t_delta_min * _ecore_x_vsync_animator_tick_delay;
+ // if w'ere sleeping too long - don't sleep at all.
+ if (t_sleep > (1.0 / 20.0)) t_sleep = 0.0;
+ }
+ if (t_sleep > 0.0) usleep(t_sleep * 1000000.0);
+ }
+ D(" @%1.5f ... send %1.8f\n", ecore_time_get(), t);
+ eina_spinlock_take(&tick_queue_lock);
+ tick_queue_count++;
+ eina_spinlock_release(&tick_queue_lock);
+ ecore_thread_feedback(drm_thread, tim);
+ }
+ t_last = t;
+ }
+ else
{
- *tim = t;
- DBG(" ... send %1.8f", t);
- D(" @%1.5f ... send %1.8f\n", ecore_time_get(), t);
- eina_spinlock_take(&tick_queue_lock);
- tick_queue_count++;
- eina_spinlock_release(&tick_queue_lock);
- ecore_thread_feedback(drm_thread, tim);
+ if (drm_event_is_busy)
+ {
+ if (_drm_fail_count == 0)
+ {
+ if (fallback_timer)
+ {
+ ecore_timer_del(fallback_timer);
+ fallback_timer = NULL;
+ }
+ }
+ ecore_loop_time_set(t);
+ ecore_animator_custom_tick();
+ if (drm_event_is_busy)
+ {
+ if (fail_timer) ecore_timer_reset(fail_timer);
+ else fail_timer = ecore_timer_add(1.0 / 15.0, _fail_timeout, NULL);
+ if (!_drm_tick_schedule())
+ _drm_fail_count = 999999;
+ }
+ }
}
}
@@ -239,12 +384,20 @@ _drm_vblank_handler(int fd EINA_UNUSED,
if (pframe != frame)
{
#define DELTA_COUNT 10
- double t = (double)sec + ((double)usec / 1000000);
double tnow = ecore_time_get();
+ double t = (double)sec + ((double)usec / 1000000);
+ unsigned long long tusec, ptusec;
static double tdelta[DELTA_COUNT];
static double tdelta_avg = 0.0;
static int tdelta_n = 0;
+ static unsigned int psec = 0, pusec = 0;
+ tusec = ((unsigned long long)sec) * 1000000 + usec;
+ ptusec = ((unsigned long long)psec) * 1000000 + pusec;
+ if (tusec <= ptusec)
+ fprintf(stderr,
+ "EEEEEEK! drm time went backwards! %u.%06u -> %u.%06u\n",
+ psec, pusec, sec, usec);
if (t > tnow)
{
if (tdelta_n > DELTA_COUNT)
@@ -272,8 +425,11 @@ _drm_vblank_handler(int fd EINA_UNUSED,
tdelta_avg = 0.0;
tdelta_n = 0;
}
+ _drm_fail_count = 0;
_drm_send_time(t);
pframe = frame;
+ psec = sec;
+ pusec = usec;
}
}
else
@@ -282,6 +438,13 @@ _drm_vblank_handler(int fd EINA_UNUSED,
}
}
+static double _ecore_x_vsync_wakeup_time = 0.0;
+
+EAPI double _ecore_x_vsync_wakeup_time_get(void)
+{
+ return _ecore_x_vsync_wakeup_time;
+}
+
static void
_drm_tick_core(void *data EINA_UNUSED, Ecore_Thread *thread)
{
@@ -300,7 +463,7 @@ _drm_tick_core(void *data EINA_UNUSED, Ecore_Thread *thread)
if (!drm_event_is_busy)
{
DBG("wait...");
- D(" @1.5f wait...\n", ecore_time_get());
+ D(" @%1.5f wait...\n", ecore_time_get());
msg = eina_thread_queue_wait(thq, &ref);
if (msg)
{
@@ -357,6 +520,20 @@ _drm_tick_core(void *data EINA_UNUSED, Ecore_Thread *thread)
tv.tv_usec = _drm_fail_time * 1000000;
D(" @%1.5f wait %ims\n", ecore_time_get(), (int)(tv.tv_usec /1000));
ret = select(max_fd + 1, &rfds, &wfds, &exfds, &tv);
+ _ecore_x_vsync_wakeup_time = ecore_time_get();
+#if 0
+ static double pt = 0.0;
+ double t = ecore_time_get();
+ double f = 1.0 / (t - pt);
+ char buf[1024];
+ int i, fps;
+ fps = 30 + ((f - 60.0) * 10.0);
+ if (fps > 1000) fps = 1000;
+ for (i = 0; i < fps; i++) buf[i] = '#';
+ buf[i] = 0;
+ printf("WAKE %1.5f [%s>\n", 1.0 / (t - pt), buf);
+ pt = t;
+#endif
if ((ret == 1) && (FD_ISSET(drm_fd, &rfds)))
{
D(" @%1.5f have event\n", ecore_time_get());
@@ -387,21 +564,35 @@ _drm_tick_notify(void *data EINA_UNUSED, Ecore_Thread *thread EINA_UNUSED, void
D("notify.... %3.3f %i\n", *((double *)msg), drm_event_is_busy);
if (drm_event_is_busy)
{
- double *t = msg;
- static double pt = 0.0;
-
- DBG("VSYNC %1.8f = delt %1.8f", *t, *t - pt);
- D("VSYNC %1.8f = delt %1.8f\n", *t, *t - pt);
+ double *t = msg, rt, lt;
+ static double pt = 0.0, prt = 0.0, plt = 0.0;
+
+ rt = ecore_time_get();
+ lt = ecore_loop_time_get();
+ DBG("VSYNC %1.8f = delt %1.8f | real = %1.8f | loop = %1.8f", *t, *t - pt, rt - prt, lt - plt);
+ D("VSYNC %1.8f = delt %1.8f | real = %1.8f | loop = %1.8f", *t, *t - pt, rt - prt, lt - plt);
+// printf("VSYNC %1.8f = delt %1.5f | real = %1.5f | loop = %1.5f\n", *t, 1.0 / (*t - pt), 1.0 / (rt - prt), 1.0 / (lt - plt));
if ((!tick_skip) || (tick_queued == 1))
{
ecore_loop_time_set(*t);
ecore_animator_custom_tick();
}
pt = *t;
+ prt = rt;
+ plt = lt;
}
free(msg);
}
+static Eina_Bool
+_ecore_vsync_fd_handler(void *data EINA_UNUSED,
+ Ecore_Fd_Handler *fd_handler EINA_UNUSED)
+{
+ _ecore_x_vsync_wakeup_time = ecore_time_get();
+ sym_drmHandleEvent(drm_fd, &drm_evctx);
+ return ECORE_CALLBACK_RENEW;
+}
+
// yes. most evil. we dlopen libdrm and libGL etc. to manually find smbols
// so we can be as compatible as possible given the whole mess of the
// gl/dri/drm etc. world. and handle graceful failure at runtime not
@@ -675,11 +866,20 @@ checkdone:
}
if (getenv("ECORE_ANIMATOR_SKIP")) tick_skip = EINA_TRUE;
- tick_queue_count = 0;
- eina_spinlock_new(&tick_queue_lock);
- thq = eina_thread_queue_new();
- drm_thread = ecore_thread_feedback_run(_drm_tick_core, _drm_tick_notify,
- NULL, NULL, NULL, EINA_TRUE);
+ if (threaded_vsync)
+ {
+ tick_queue_count = 0;
+ eina_spinlock_new(&tick_queue_lock);
+ thq = eina_thread_queue_new();
+ drm_thread = ecore_thread_feedback_run(_drm_tick_core, _drm_tick_notify,
+ NULL, NULL, NULL, EINA_TRUE);
+ }
+ else
+ {
+ ecore_main_fd_handler_add(drm_fd, ECORE_FD_READ,
+ _ecore_vsync_fd_handler, NULL,
+ NULL, NULL);
+ }
return 1;
}
@@ -759,6 +959,8 @@ ecore_x_vsync_animator_tick_source_set(Ecore_X_Window win)
const char *home;
struct stat st;
+ if (getenv("ECORE_VSYNC_THREAD")) threaded_vsync = EINA_TRUE;
+ if (getenv("ECORE_VSYNC_NO_THREAD")) threaded_vsync = EINA_FALSE;
home = eina_environment_home_get();
if (!home) eina_environment_tmp_get();
snprintf(buf, sizeof(buf), "%s/.ecore-no-vsync", home);
@@ -780,3 +982,9 @@ ecore_x_vsync_animator_tick_source_set(Ecore_X_Window win)
}
return EINA_TRUE;
}
+
+EAPI void
+ecore_x_vsync_animator_tick_delay_set(double delay)
+{
+ _ecore_x_vsync_animator_tick_delay = delay;
+}
diff --git a/src/lib/ecore_x/ecore_x_window.c b/src/lib/ecore_x/ecore_x_window.c
index 5600956605..890551559f 100644
--- a/src/lib/ecore_x/ecore_x_window.c
+++ b/src/lib/ecore_x/ecore_x_window.c
@@ -35,7 +35,7 @@ ecore_x_window_full_new(Ecore_X_Window parent,
Window win;
XSetWindowAttributes attr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (parent == 0)
parent = DefaultRootWindow(_ecore_x_disp);
@@ -105,7 +105,7 @@ ecore_x_window_new(Ecore_X_Window parent,
Window win;
XSetWindowAttributes attr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (parent == 0)
parent = DefaultRootWindow(_ecore_x_disp);
@@ -174,7 +174,7 @@ ecore_x_window_override_new(Ecore_X_Window parent,
Window win;
XSetWindowAttributes attr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (parent == 0)
parent = DefaultRootWindow(_ecore_x_disp);
@@ -240,7 +240,7 @@ ecore_x_window_input_new(Ecore_X_Window parent,
Window win;
XSetWindowAttributes attr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (parent == 0)
parent = DefaultRootWindow(_ecore_x_disp);
@@ -302,7 +302,7 @@ ecore_x_window_defaults_set(Ecore_X_Window win)
char **argv;
XTextProperty xprop;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/*
* Set WM_CLIENT_MACHINE.
*/
@@ -348,7 +348,7 @@ ecore_x_window_configure(Ecore_X_Window win,
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xwc.x = x;
xwc.y = y;
@@ -380,7 +380,7 @@ ecore_x_window_free(Ecore_X_Window win)
/* sorry sir, deleting the root window doesn't sound like
* a smart idea.
*/
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win) return;
XDestroyWindow(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -398,7 +398,7 @@ ecore_x_window_ignore_set(Ecore_X_Window win,
int i, j, cnt;
Ecore_X_Window *t;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (ignore)
{
if (ignore_list)
@@ -475,7 +475,7 @@ ecore_x_window_delete_request_send(Ecore_X_Window win)
if (!win)
return;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
xev.xclient.type = ClientMessage;
xev.xclient.display = _ecore_x_disp;
xev.xclient.window = win;
@@ -506,7 +506,7 @@ ecore_x_window_delete_request_send(Ecore_X_Window win)
EAPI void
ecore_x_window_show(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XMapWindow(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -528,7 +528,7 @@ ecore_x_window_hide(Ecore_X_Window win)
unsigned int uidum;
/* ICCCM: SEND unmap event... */
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
root = win;
if (ScreenCount(_ecore_x_disp) == 1)
root = DefaultRootWindow(_ecore_x_disp);
@@ -579,7 +579,7 @@ ecore_x_window_move(Ecore_X_Window win,
int x,
int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XMoveWindow(_ecore_x_disp, win, x, y);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -596,7 +596,7 @@ ecore_x_window_resize(Ecore_X_Window win,
int w,
int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (w < 1)
w = 1;
@@ -623,7 +623,7 @@ ecore_x_window_move_resize(Ecore_X_Window win,
int w,
int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (w < 1)
w = 1;
@@ -649,7 +649,7 @@ ecore_x_window_move_resize(Ecore_X_Window win,
EAPI void
ecore_x_window_focus(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp); // XSetInputFocus(_ecore_x_disp, win, RevertToNone, CurrentTime);
@@ -668,7 +668,7 @@ EAPI void
ecore_x_window_focus_at_time(Ecore_X_Window win,
Ecore_X_Time t)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp); // XSetInputFocus(_ecore_x_disp, win, RevertToNone, t);
@@ -688,7 +688,7 @@ ecore_x_window_focus_get(void)
Window win;
int revert_mode;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
win = 0;
XGetInputFocus(_ecore_x_disp, &win, &revert_mode);
return win;
@@ -709,7 +709,7 @@ ecore_x_window_focus_get(void)
EAPI void
ecore_x_window_raise(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XRaiseWindow(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -722,7 +722,7 @@ ecore_x_window_raise(Ecore_X_Window win)
EAPI void
ecore_x_window_lower(Ecore_X_Window win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XLowerWindow(_ecore_x_disp, win);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -748,7 +748,7 @@ ecore_x_window_reparent(Ecore_X_Window win,
int x,
int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (new_parent == 0)
new_parent = DefaultRootWindow(_ecore_x_disp);
@@ -770,7 +770,7 @@ ecore_x_window_size_get(Ecore_X_Window win,
{
int dummy_x, dummy_y;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp);
@@ -801,7 +801,7 @@ ecore_x_window_geometry_get(Ecore_X_Window win,
int *w,
int *h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win)
win = DefaultRootWindow(_ecore_x_disp);
@@ -819,7 +819,7 @@ EAPI int
ecore_x_window_border_width_get(Ecore_X_Window win)
{
int w;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* doesn't make sense to call this on a root window */
if (!win)
return 0;
@@ -839,7 +839,7 @@ EAPI void
ecore_x_window_border_width_set(Ecore_X_Window win,
int width)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* doesn't make sense to call this on a root window */
if (!win)
return;
@@ -857,7 +857,7 @@ EAPI int
ecore_x_window_depth_get(Ecore_X_Window win)
{
int d;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
d = ecore_x_drawable_depth_get(win);
if (_ecore_xlib_sync) ecore_x_sync();
return d;
@@ -872,7 +872,7 @@ EAPI void
ecore_x_window_cursor_show(Ecore_X_Window win,
Eina_Bool show)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp);
@@ -915,7 +915,7 @@ ecore_x_window_cursor_set(Ecore_X_Window win,
int devid;
#endif
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
#ifdef ECORE_XI2
XIGetClientPointer(_ecore_x_disp, None, &devid);
if (c == 0)
@@ -943,7 +943,7 @@ ecore_x_window_visible_get(Ecore_X_Window win)
Eina_Bool ret;
XWindowAttributes attr;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = (XGetWindowAttributes(_ecore_x_disp, win, &attr) &&
(attr.map_state == IsViewable));
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1303,7 +1303,7 @@ ecore_x_window_shadow_tree_at_xy_with_skip_get(Ecore_X_Window base,
Ecore_X_Window *skip,
int skip_num)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_window_shadow_tree_at_xy_get(base,
0,
0,
@@ -1328,7 +1328,7 @@ ecore_x_window_shadow_parent_get(Ecore_X_Window root EINA_UNUSED,
Shadow *s;
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!shadow_base)
{
_ecore_x_window_tree_shadow_populate();
@@ -1360,7 +1360,7 @@ ecore_x_window_shadow_parent_get(Ecore_X_Window root EINA_UNUSED,
EAPI void
ecore_x_window_shadow_tree_flush(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
_ecore_x_window_tree_shadow_free();
}
@@ -1375,7 +1375,7 @@ ecore_x_window_root_get(Ecore_X_Window win)
{
XWindowAttributes att;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!XGetWindowAttributes(_ecore_x_disp, win, &att))
return 0;
@@ -1396,11 +1396,11 @@ _ecore_x_window_at_xy_get(Window base,
int i, j, wx, wy, ww, wh;
unsigned int num;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ecore_x_window_visible_get(base))
return 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_geometry_get(base, &wx, &wy, &ww, &wh);
wx += bx;
wy += by;
@@ -1408,7 +1408,7 @@ _ecore_x_window_at_xy_get(Window base,
if (!((x >= wx) && (y >= wy) && (x < (wx + ww)) && (y < (wy + wh))))
return 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!XQueryTree(_ecore_x_disp, base, &root_win, &parent_win, &list, &num))
return base;
@@ -1459,7 +1459,7 @@ ecore_x_window_at_xy_get(int x,
{
Ecore_X_Window win, root;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* FIXME: Proper function to determine current root/virtual root
* window missing here */
root = DefaultRootWindow(_ecore_x_disp);
@@ -1489,7 +1489,7 @@ ecore_x_window_at_xy_with_skip_get(int x,
{
Ecore_X_Window win, root;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* FIXME: Proper function to determine current root/virtual root
* window missing here */
root = DefaultRootWindow(_ecore_x_disp);
@@ -1508,7 +1508,7 @@ ecore_x_window_at_xy_begin_get(Ecore_X_Window begin,
{
Ecore_X_Window win;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_grab();
win = _ecore_x_window_at_xy_get(begin, 0, 0, x, y, NULL, 0);
ecore_x_ungrab();
@@ -1529,7 +1529,7 @@ ecore_x_window_parent_get(Ecore_X_Window win)
unsigned int num;
Eina_Bool success;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
success = XQueryTree(_ecore_x_disp, win, &root, &parent, &children, &num);
if (_ecore_xlib_sync) ecore_x_sync();
if (!success) return 0;
@@ -1557,7 +1557,7 @@ ecore_x_window_background_color_set(Ecore_X_Window win,
Colormap map;
XColor col;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
col.red = r;
col.green = g;
col.blue = b;
@@ -1576,7 +1576,7 @@ ecore_x_window_gravity_set(Ecore_X_Window win,
{
XSetWindowAttributes att;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
att.win_gravity = grav;
XChangeWindowAttributes(_ecore_x_disp, win, CWWinGravity, &att);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1588,7 +1588,7 @@ ecore_x_window_pixel_gravity_set(Ecore_X_Window win,
{
XSetWindowAttributes att;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
att.bit_gravity = grav;
XChangeWindowAttributes(_ecore_x_disp, win, CWBitGravity, &att);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1598,7 +1598,7 @@ EAPI void
ecore_x_window_pixmap_set(Ecore_X_Window win,
Ecore_X_Pixmap pmap)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XSetWindowBackgroundPixmap(_ecore_x_disp, win, pmap);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -1610,7 +1610,7 @@ ecore_x_window_area_clear(Ecore_X_Window win,
int w,
int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XClearArea(_ecore_x_disp, win, x, y, w, h, False);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -1622,7 +1622,7 @@ ecore_x_window_area_expose(Ecore_X_Window win,
int w,
int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XClearArea(_ecore_x_disp, win, x, y, w, h, True);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -1633,7 +1633,7 @@ ecore_x_window_override_set(Ecore_X_Window win,
{
XSetWindowAttributes att;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
att.override_redirect = override;
XChangeWindowAttributes(_ecore_x_disp, win, CWOverrideRedirect, &att);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -1801,7 +1801,7 @@ ecore_x_window_manager_argb_new(Ecore_X_Window parent,
int h)
{
#ifdef ECORE_XRENDER
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 1, 0);
#else /* ifdef ECORE_XRENDER */
return 0;
@@ -1827,7 +1827,7 @@ ecore_x_window_argb_new(Ecore_X_Window parent,
int h)
{
#ifdef ECORE_XRENDER
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 0, 0);
#else /* ifdef ECORE_XRENDER */
return 0;
@@ -1853,7 +1853,7 @@ ecore_x_window_override_argb_new(Ecore_X_Window parent,
int h)
{
#ifdef ECORE_XRENDER
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 1, 0);
#else /* ifdef ECORE_XRENDER */
return 0;
@@ -1870,7 +1870,7 @@ ecore_x_window_permanent_new(Ecore_X_Window parent, Ecore_X_Atom unique_atom)
unsigned long ldata, bytes_after, num_ret, *datap;
unsigned char *prop_ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
disp = XOpenDisplay(DisplayString(_ecore_x_disp));
if (!disp) return 0;
diff --git a/src/lib/ecore_x/ecore_x_window_prop.c b/src/lib/ecore_x/ecore_x_window_prop.c
index ac23a50877..ae82f9256a 100644
--- a/src/lib/ecore_x/ecore_x_window_prop.c
+++ b/src/lib/ecore_x/ecore_x_window_prop.c
@@ -31,7 +31,7 @@ ecore_x_window_prop_card32_set(Ecore_X_Window win,
long *v2;
unsigned int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
v2 = malloc(num * sizeof(long));
if (!v2)
return;
@@ -65,7 +65,7 @@ ecore_x_window_prop_card32_get(Ecore_X_Window win,
unsigned int i;
int num;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
prop_ret = NULL;
if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
XA_CARDINAL, &type_ret, &format_ret, &num_ret,
@@ -112,7 +112,7 @@ ecore_x_window_prop_card32_list_get(Ecore_X_Window win,
unsigned int i, *val;
int num;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (plst) *plst = NULL;
prop_ret = NULL;
if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
@@ -163,7 +163,7 @@ ecore_x_window_prop_xid_set(Ecore_X_Window win,
unsigned long *pl;
unsigned int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
pl = malloc(num * sizeof(unsigned long));
if (!pl)
return;
@@ -200,7 +200,7 @@ ecore_x_window_prop_xid_get(Ecore_X_Window win,
unsigned i;
Eina_Bool success;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
prop_ret = NULL;
success = (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
type, &type_ret, &format_ret, &num_ret,
@@ -252,7 +252,7 @@ ecore_x_window_prop_xid_list_get(Ecore_X_Window win,
unsigned i;
Eina_Bool success;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (val) *val = NULL;
prop_ret = NULL;
success = (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
@@ -294,7 +294,7 @@ ecore_x_window_prop_xid_list_change(Ecore_X_Window win,
Ecore_X_ID *lst, *temp;
int i, num;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
num = ecore_x_window_prop_xid_list_get(win, atom, type, &lst);
if (num < 0)
{
@@ -355,7 +355,7 @@ ecore_x_window_prop_atom_set(Ecore_X_Window win,
Ecore_X_Atom *lst,
unsigned int num)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_xid_set(win, atom, XA_ATOM, lst, num);
}
@@ -374,7 +374,7 @@ ecore_x_window_prop_atom_get(Ecore_X_Window win,
unsigned int len)
{
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_xid_get(win, atom, XA_ATOM, lst, len);
return ret;
}
@@ -393,7 +393,7 @@ ecore_x_window_prop_atom_list_get(Ecore_X_Window win,
Ecore_X_Atom **plst)
{
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_xid_list_get(win, atom, XA_ATOM, plst);
return ret;
}
@@ -407,7 +407,7 @@ ecore_x_window_prop_atom_list_change(Ecore_X_Window win,
Ecore_X_Atom item,
int op)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_xid_list_change(win, atom, XA_ATOM, item, op);
}
@@ -420,7 +420,7 @@ ecore_x_window_prop_window_set(Ecore_X_Window win,
Ecore_X_Window *lst,
unsigned int num)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ecore_x_window_prop_xid_set(win, atom, XA_WINDOW, lst, num);
}
@@ -439,7 +439,7 @@ ecore_x_window_prop_window_get(Ecore_X_Window win,
unsigned int len)
{
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_xid_get(win, atom, XA_WINDOW, lst, len);
return ret;
}
@@ -458,7 +458,7 @@ ecore_x_window_prop_window_list_get(Ecore_X_Window win,
Ecore_X_Window **plst)
{
int ret;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ret = ecore_x_window_prop_xid_list_get(win, atom, XA_WINDOW, plst);
return ret;
}
@@ -486,7 +486,7 @@ ecore_x_window_prop_property_set(Ecore_X_Window win,
void *data,
int number)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp);
@@ -551,7 +551,7 @@ ecore_x_window_prop_property_get(Ecore_X_Window win,
else /* we can't store the retrieved data, so just return */
return 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!win)
win = DefaultRootWindow(_ecore_x_disp);
@@ -602,7 +602,7 @@ EAPI void
ecore_x_window_prop_property_del(Ecore_X_Window win,
Ecore_X_Atom property)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XDeleteProperty(_ecore_x_disp, win, property);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -615,7 +615,7 @@ ecore_x_window_prop_list(Ecore_X_Window win,
Atom *atom_ret;
int num = 0, i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (num_ret)
*num_ret = 0;
@@ -652,7 +652,7 @@ ecore_x_window_prop_string_set(Ecore_X_Window win,
{
XTextProperty xtp;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp);
@@ -677,7 +677,7 @@ ecore_x_window_prop_string_get(Ecore_X_Window win,
XTextProperty xtp;
char *str = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (win == 0)
win = DefaultRootWindow(_ecore_x_disp);
@@ -727,7 +727,7 @@ ecore_x_window_prop_protocol_isset(Ecore_X_Window win,
if (protocol >= ECORE_X_WM_PROTOCOL_NUM)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
proto = _ecore_x_atoms_wm_protocols[protocol];
ret = XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count);
@@ -763,7 +763,7 @@ ecore_x_window_prop_protocol_list_get(Ecore_X_Window win,
Ecore_X_WM_Protocol *prot_ret = NULL;
Eina_Bool success;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
success = XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count);
if (_ecore_xlib_sync) ecore_x_sync();
if (!success)
diff --git a/src/lib/ecore_x/ecore_x_window_shape.c b/src/lib/ecore_x/ecore_x_window_shape.c
index 987aa07cf8..e9f989c1cf 100644
--- a/src/lib/ecore_x/ecore_x_window_shape.c
+++ b/src/lib/ecore_x/ecore_x_window_shape.c
@@ -27,7 +27,7 @@ EAPI void
ecore_x_window_shape_mask_set(Ecore_X_Window win,
Ecore_X_Pixmap mask)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineMask(_ecore_x_disp, win, ShapeBounding, 0, 0, mask, ShapeSet);
if (_ecore_xlib_sync) ecore_x_sync();
}
@@ -43,7 +43,7 @@ EAPI void
ecore_x_window_shape_input_mask_set(Ecore_X_Window win,
Ecore_X_Pixmap mask)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
#ifdef ShapeInput
XShapeCombineMask(_ecore_x_disp, win, ShapeInput, 0, 0, mask, ShapeSet);
if (_ecore_xlib_sync) ecore_x_sync();
@@ -57,7 +57,7 @@ EAPI void
ecore_x_window_shape_window_set(Ecore_X_Window win,
Ecore_X_Window shape_win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineShape(_ecore_x_disp,
win,
ShapeBounding,
@@ -74,7 +74,7 @@ ecore_x_window_shape_input_window_set(Ecore_X_Window win,
Ecore_X_Window shape_win)
{
#ifdef ShapeInput
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineShape(_ecore_x_disp,
win,
ShapeInput,
@@ -96,7 +96,7 @@ ecore_x_window_shape_window_set_xy(Ecore_X_Window win,
int x,
int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineShape(_ecore_x_disp,
win,
ShapeBounding,
@@ -115,7 +115,7 @@ ecore_x_window_shape_input_window_set_xy(Ecore_X_Window win,
int y)
{
#ifdef ShapeInput
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineShape(_ecore_x_disp,
win,
ShapeInput,
@@ -140,7 +140,7 @@ ecore_x_window_shape_rectangle_set(Ecore_X_Window win,
{
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -167,7 +167,7 @@ ecore_x_window_shape_input_rectangle_set(Ecore_X_Window win,
#ifdef ShapeInput
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -197,7 +197,7 @@ ecore_x_window_shape_rectangles_set(Ecore_X_Window win,
XRectangle *rect = NULL;
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!rects) return;
if (num > 0)
{
@@ -237,7 +237,7 @@ ecore_x_window_shape_input_rectangles_set(Ecore_X_Window win,
XRectangle *rect = NULL;
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!rects) return;
if (num > 0)
{
@@ -277,7 +277,7 @@ ecore_x_window_shape_rectangle_subtract(Ecore_X_Window win,
{
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -304,7 +304,7 @@ ecore_x_window_shape_input_rectangle_subtract(Ecore_X_Window win,
#ifdef ShapeInput
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -329,7 +329,7 @@ EAPI void
ecore_x_window_shape_window_add(Ecore_X_Window win,
Ecore_X_Window shape_win)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineShape(_ecore_x_disp,
win,
ShapeBounding,
@@ -347,7 +347,7 @@ ecore_x_window_shape_window_add_xy(Ecore_X_Window win,
int x,
int y)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineShape(_ecore_x_disp,
win,
ShapeBounding,
@@ -366,7 +366,7 @@ ecore_x_window_shape_input_window_add_xy(Ecore_X_Window win,
int y)
{
#ifdef ShapeInput
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
XShapeCombineShape(_ecore_x_disp,
win,
ShapeInput,
@@ -391,7 +391,7 @@ ecore_x_window_shape_rectangle_add(Ecore_X_Window win,
{
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -418,7 +418,7 @@ ecore_x_window_shape_input_rectangle_add(Ecore_X_Window win,
#ifdef ShapeInput
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -448,7 +448,7 @@ ecore_x_window_shape_rectangle_clip(Ecore_X_Window win,
{
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -475,7 +475,7 @@ ecore_x_window_shape_input_rectangle_clip(Ecore_X_Window win,
#ifdef ShapeInput
XRectangle rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect.x = x;
rect.y = y;
rect.width = w;
@@ -504,7 +504,7 @@ ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
XRectangle *rect = NULL;
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (num > 0)
{
rect = malloc(sizeof(XRectangle) * num);
@@ -540,7 +540,7 @@ ecore_x_window_shape_input_rectangles_add(Ecore_X_Window win,
XRectangle *rect = NULL;
int i;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (num > 0)
{
rect = malloc(sizeof(XRectangle) * num);
@@ -579,7 +579,7 @@ ecore_x_window_shape_rectangles_get(Ecore_X_Window win,
Ecore_X_Rectangle *rects = NULL;
int i, num = 0, ord;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect = XShapeGetRectangles(_ecore_x_disp, win, ShapeBounding, &num, &ord);
if (_ecore_xlib_sync) ecore_x_sync();
if (rect)
@@ -619,7 +619,7 @@ ecore_x_window_shape_input_rectangles_get(Ecore_X_Window win,
XRectangle *rect;
int i, num = 0, ord;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
rect = XShapeGetRectangles(_ecore_x_disp, win, ShapeInput, &num, &ord);
if (_ecore_xlib_sync) ecore_x_sync();
if (rect)
@@ -675,7 +675,7 @@ EAPI void
ecore_x_window_shape_events_select(Ecore_X_Window win,
Eina_Bool on)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (on)
XShapeSelectInput(_ecore_x_disp, win, ShapeNotifyMask);
else
diff --git a/src/lib/ecore_x/ecore_x_xi2.c b/src/lib/ecore_x/ecore_x_xi2.c
index 6bbbd855b6..40244abcf2 100644
--- a/src/lib/ecore_x/ecore_x_xi2.c
+++ b/src/lib/ecore_x/ecore_x_xi2.c
@@ -783,7 +783,7 @@ ecore_x_input_multi_select(Ecore_X_Window win)
if (!_ecore_x_xi2_devs)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
for (i = 0; i < _ecore_x_xi2_num; i++)
{
XIDeviceInfo *dev = &(_ecore_x_xi2_devs[i]);
@@ -847,7 +847,7 @@ ecore_x_input_raw_select(Ecore_X_Window win)
if (!_ecore_x_xi2_devs)
return EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
emask.deviceid = XIAllMasterDevices;
emask.mask_len = sizeof(mask);
emask.mask = mask;
@@ -881,7 +881,7 @@ _ecore_x_input_touch_devices_grab(Ecore_X_Window grab_win, Eina_Bool grab)
Eina_Bool status = EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
for (i = 0; i < _ecore_x_xi2_num; i++)
{
XIDeviceInfo *dev = &(_ecore_x_xi2_devs[i]);
@@ -1035,9 +1035,10 @@ ecore_x_input_device_property_get(int slot, const char *prop, int *num_ret,
if ((slot < 0) || (slot >= _ecore_x_xi2_num)) goto err;
a = XInternAtom(_ecore_x_disp, prop, False);
- if (!XIGetProperty(_ecore_x_disp, _ecore_x_xi2_devs[slot].deviceid,
+ // XIGetProperty returns 0 AKA `Success` if everything is good
+ if (XIGetProperty(_ecore_x_disp, _ecore_x_xi2_devs[slot].deviceid,
a, 0, 65536, False, AnyPropertyType, &a_type, &fmt,
- &num, &dummy, &data)) goto err;
+ &num, &dummy, &data) != 0) goto err;
*format_ret = a_type;
*num_ret = num;
*unit_size_ret = fmt;
diff --git a/src/lib/ecore_x/ecore_x_xinerama.c b/src/lib/ecore_x/ecore_x_xinerama.c
index a55fdbd051..7bc8e36e6e 100644
--- a/src/lib/ecore_x/ecore_x_xinerama.c
+++ b/src/lib/ecore_x/ecore_x_xinerama.c
@@ -22,7 +22,7 @@ ecore_x_xinerama_screen_count_get(void)
#ifdef ECORE_XINERAMA
int event_base, error_base;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (_xin_info)
XFree(_xin_info);
@@ -48,7 +48,7 @@ ecore_x_xinerama_screen_geometry_get(int screen EINA_UNUSED, // if no xinerama
int *w,
int *h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
#ifdef ECORE_XINERAMA
if (_xin_info)
{
diff --git a/src/lib/ecore_x/meson.build b/src/lib/ecore_x/meson.build
index ba7d01f961..c62ec4df99 100644
--- a/src/lib/ecore_x/meson.build
+++ b/src/lib/ecore_x/meson.build
@@ -1,5 +1,6 @@
-ecore_x_deps = [ecore, dl, m, ecore_input]
+ecore_x_deps = [ecore, ecore_input]
ecore_x_pub_deps = [eina, efl]
+ecore_x_ext_deps = [dl, m]
ecore_x_header_src = [
'Ecore_X.h',
@@ -7,7 +8,7 @@ ecore_x_header_src = [
'Ecore_X_Cursor.h'
]
-ecore_x_src = [
+ecore_x_src = files([
'ecore_x_atoms_decl.h',
'ecore_x.c',
'ecore_x_dnd.c',
@@ -42,8 +43,9 @@ ecore_x_src = [
'ecore_x_xi2.c',
'ecore_x_vsync.c',
'ecore_x_gesture.c',
+ 'ecore_x_resource.c',
'ecore_x_private.h'
-]
+])
ecore_x_checks = [
['Xcomposite', 'Xcomposite.h', 'Xcomposite', 'XCompositeQueryExtension'],
@@ -104,12 +106,12 @@ int main () {
else
error('extension '+ecore_x_check[0]+' not found for X11')
endif
- ecore_x_deps += x_lib
+ ecore_x_ext_deps += x_lib
endforeach
-ecore_x_deps += x11
-ecore_x_deps += xcb
-ecore_x_deps += x11_xcb
+ecore_x_ext_deps += x11
+ecore_x_ext_deps += xcb
+ecore_x_ext_deps += x11_xcb
# there are a few special cases
@@ -125,11 +127,12 @@ cc.has_header_symbol('X11/Xcursor/Xcursor.h', 'XcursorSupportsARGB',
dependencies : [x11, xcb]
)
config_h.set('ECORE_XCURSOR', '1')
-ecore_x_deps += lib
+ecore_x_ext_deps += lib
ecore_x_lib = library('ecore_x',
ecore_x_src, pub_eo_file_target,
- dependencies: ecore_x_pub_deps + ecore_x_deps,
+ c_args : package_c_args,
+ dependencies: ecore_x_pub_deps + ecore_x_deps + ecore_x_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/ector/Ector.h b/src/lib/ector/Ector.h
index 961a42c150..ba93fbddae 100644
--- a/src/lib/ector/Ector.h
+++ b/src/lib/ector/Ector.h
@@ -6,31 +6,8 @@
#ifdef EFL_BETA_API_SUPPORT
#include <Efl.h>
#endif
-#ifdef EAPI
-# undef EAPI
-#endif
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <ector_api.h>
#ifdef __cplusplus
extern "C" {
@@ -41,7 +18,7 @@ extern "C" {
*
* @date 2014 (created)
*
- * @section toc Table of Contents
+ * @section ector_toc Table of Contents
*
* @li @ref ector_main_intro
* @li @ref ector_main_compiling
@@ -133,7 +110,7 @@ typedef enum _Ector_Update_Type
*
* @see ector_shutfown()
*/
-EAPI int ector_init(void);
+ECTOR_API int ector_init(void);
/**
* @brief Shutdown the ector subsystem
@@ -141,7 +118,7 @@ EAPI int ector_init(void);
*
* @see ector_init()
*/
-EAPI int ector_shutdown(void);
+ECTOR_API int ector_shutdown(void);
/**
* @brief Registers OpenGL API calls with the internal Ector_GL_API.
@@ -156,7 +133,7 @@ EAPI int ector_shutdown(void);
*
* @see dlsym()
*/
-EAPI Eina_Bool ector_glsym_set(void *(*glsym)(void *lib, const char *name), void *lib);
+ECTOR_API Eina_Bool ector_glsym_set(void *(*glsym)(void *lib, const char *name), void *lib);
/* Avoid redefinition of types */
#define _ECTOR_SURFACE_EO_CLASS_TYPE
@@ -177,7 +154,4 @@ EAPI Eina_Bool ector_glsym_set(void *(*glsym)(void *lib, const char *name), void
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/ector/ector_api.h b/src/lib/ector/ector_api.h
new file mode 100644
index 0000000000..f0549582d0
--- /dev/null
+++ b/src/lib/ector/ector_api.h
@@ -0,0 +1,32 @@
+#ifndef _EFL_ECTOR_API_H
+#define _EFL_ECTOR_API_H
+
+#ifdef ECTOR_API
+#error ECTOR_API should not be already defined
+#endif
+
+#ifdef _WIN32
+# ifndef ECTOR_STATIC
+# ifdef ECTOR_BUILD
+# define ECTOR_API __declspec(dllexport)
+# else
+# define ECTOR_API __declspec(dllimport)
+# endif
+# else
+# define ECTOR_API
+# endif
+# define ECTOR_API_WEAK
+#elif defined(__GNUC__)
+# if __GNUC__ >= 4
+# define ECTOR_API __attribute__ ((visibility("default")))
+# define ECTOR_API_WEAK __attribute__ ((weak))
+# else
+# define ECTOR_API
+# define ECTOR_API_WEAK
+# endif
+#else
+# define ECTOR_API
+# define ECTOR_API_WEAK
+#endif
+
+#endif
diff --git a/src/lib/ector/ector_main.c b/src/lib/ector/ector_main.c
index db65c44ea4..5a8dcc25fa 100644
--- a/src/lib/ector/ector_main.c
+++ b/src/lib/ector/ector_main.c
@@ -27,7 +27,7 @@ int _ector_log_dom_global = 0;
static int _ector_main_count = 0;
-EAPI int
+ECTOR_API int
ector_init(void)
{
if (EINA_LIKELY(_ector_main_count > 0))
@@ -62,7 +62,7 @@ donothing(void)
{
}
-EAPI Eina_Bool
+ECTOR_API Eina_Bool
ector_glsym_set(void *(*glsym)(void *lib, const char *name), void *lib)
{
Eina_Bool r = EINA_TRUE;
@@ -221,7 +221,7 @@ ector_glsym_set(void *(*glsym)(void *lib, const char *name), void *lib)
return r;
}
-EAPI int
+ECTOR_API int
ector_shutdown(void)
{
if (_ector_main_count <= 0)
diff --git a/src/lib/ector/ector_renderer_image.eo b/src/lib/ector/ector_renderer_image.eo
index 9c2e7b3448..ff84bc8adf 100644
--- a/src/lib/ector/ector_renderer_image.eo
+++ b/src/lib/ector/ector_renderer_image.eo
@@ -1,5 +1,3 @@
-import ector_renderer;
-
mixin @beta Ector.Renderer.Image
{
[[Ector image renderer mixin]]
diff --git a/src/lib/ector/gl/Ector_GL.h b/src/lib/ector/gl/Ector_GL.h
index 88b6c6bae1..6a9efe27de 100644
--- a/src/lib/ector/gl/Ector_GL.h
+++ b/src/lib/ector/gl/Ector_GL.h
@@ -3,31 +3,7 @@
#include <Ector.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include "ector_api.h"
#ifdef EFL_BETA_API_SUPPORT
@@ -48,7 +24,4 @@ typedef short GLshort;
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/ector/gl/meson.build b/src/lib/ector/gl/meson.build
index ab87d79b4d..3837f0ece8 100644
--- a/src/lib/ector/gl/meson.build
+++ b/src/lib/ector/gl/meson.build
@@ -31,12 +31,15 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'ECTOR_API',
'-gchd', '@INPUT@'])
endforeach
-
-if get_option('install-eo-files')
- install_data(pub_eo_files,
- install_dir: join_paths(eolian_include_dir, package_version_name)
- )
-endif
+#
+# Only enable that again when the namespace problems are fixed. ref T8648
+#
+#if get_option('install-eo-files')
+# install_data(pub_eo_files,
+# install_dir: join_paths(eolian_include_dir, package_version_name)
+# )
+#endif
diff --git a/src/lib/ector/meson.build b/src/lib/ector/meson.build
index b0d33a1d42..9a9545fee8 100644
--- a/src/lib/ector/meson.build
+++ b/src/lib/ector/meson.build
@@ -1,5 +1,6 @@
-ector_deps = [eina, emile, eet, eo, efl]
+ector_deps = [eina, emile, eet, eo, efl, draw]
ector_pub_deps = [eina, efl]
+ector_ext_deps = [triangulator, freetype, draw_without_deps, m]
pub_eo_file_target = []
ector_opt_lib = [ ]
@@ -9,7 +10,7 @@ ector_header_src = [
# nothing for now ector stays only intree
]
-ector_src = [
+ector_src = files([
'ector_main.c',
'ector_gl_internal.h',
'ector_buffer.c',
@@ -19,7 +20,7 @@ ector_src = [
'ector_renderer_gradient.c',
'ector_renderer_gradient_radial.c',
'ector_renderer_gradient_linear.c'
-]
+])
pub_eo_files = [
'ector_surface.eo',
@@ -45,6 +46,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'ECTOR_API',
'-gchd', '@INPUT@'])
endforeach
@@ -56,11 +58,14 @@ pub_eo_types_files = [
'ector_types.eot'
]
-if get_option('install-eo-files')
- install_data(ector_pub_eo_files + pub_eo_types_files,
- install_dir: join_paths(eolian_include_dir, package_version_name)
- )
-endif
+#
+# Only enable that again when the namespace problems are fixed. ref T8648
+#
+#if get_option('install-eo-files')
+# install_data(ector_pub_eo_files + pub_eo_types_files,
+# install_dir: join_paths(eolian_include_dir, package_version_name)
+# )
+#endif
foreach eo_file : pub_eo_types_files
pub_eo_file_target += custom_target('eolian_gen_' + eo_file,
@@ -72,18 +77,25 @@ foreach eo_file : pub_eo_types_files
command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'ECTOR_API',
'-ghd', '@INPUT@'])
endforeach
subdir('software')
+ector_opt_lib_dep = declare_dependency(
+ link_with: ector_opt_lib
+)
+
+ector_ext_deps += ector_opt_lib_dep
+
ector_lib = library('ector',
ector_src, pub_eo_file_target,
- dependencies: ector_pub_deps + [triangulator, freetype, draw, m] + ector_deps,
+ c_args : [package_c_args, '-DECTOR_BUILD'],
+ dependencies: ector_pub_deps + ector_ext_deps + ector_deps,
include_directories : config_dir,
install: true,
version : meson.project_version(),
- link_with: ector_opt_lib
)
ector = declare_dependency(
diff --git a/src/lib/ector/software/Ector_Software.h b/src/lib/ector/software/Ector_Software.h
index 85529e6f21..249e8a638a 100644
--- a/src/lib/ector/software/Ector_Software.h
+++ b/src/lib/ector/software/Ector_Software.h
@@ -3,31 +3,7 @@
#include <Ector.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include "ector_api.h"
#ifdef EFL_BETA_API_SUPPORT
@@ -42,7 +18,4 @@
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/ector/software/ector_renderer_software_image.c b/src/lib/ector/software/ector_renderer_software_image.c
index e06e79d574..d7807ed518 100644
--- a/src/lib/ector/software/ector_renderer_software_image.c
+++ b/src/lib/ector/software/ector_renderer_software_image.c
@@ -106,6 +106,10 @@ _ector_renderer_software_image_ector_renderer_draw(Eo *obj EINA_UNUSED,
double im11, im12, im21, im22, im31, im32;
uint32_t *dst_buf, *src_buf;
int image_w, image_h;
+
+ int dst_buf_width = MIN(pd->boundary.x2, (int)pd->surface->rasterizer->fill_data.raster_buffer->generic->w);
+ int dst_buf_height = MIN(pd->boundary.y2, (int)pd->surface->rasterizer->fill_data.raster_buffer->generic->h);
+
ector_buffer_size_get(pd->image->buffer, &image_w, &image_h);
dst_buf = pd->surface->rasterizer->fill_data.raster_buffer->pixels.u32;
@@ -116,9 +120,9 @@ _ector_renderer_software_image_ector_renderer_draw(Eo *obj EINA_UNUSED,
&im31, &im32, NULL);
//Draw
- for (int local_y = pd->boundary.y1; local_y < pd->boundary.y2; local_y++)
+ for (int local_y = pd->boundary.y1; local_y < dst_buf_height; local_y++)
{
- for (int local_x = pd->boundary.x1; local_x < pd->boundary.x2; local_x++)
+ for (int local_x = pd->boundary.x1; local_x < dst_buf_width; local_x++)
{
uint32_t *dst = dst_buf + ((int)local_x + ((int)local_y * pix_stride));
int rx, ry;
@@ -140,7 +144,7 @@ _ector_renderer_software_image_ector_renderer_draw(Eo *obj EINA_UNUSED,
temp = draw_mul_256(pd->opacity, *src);
}
int inv_alpha = 255 - ((temp) >> 24);
- *dst = temp + draw_mul_256(inv_alpha, *dst);
+ *dst = temp + draw_mul_256(inv_alpha, *dst);
}
}
diff --git a/src/lib/ector/software/ector_renderer_software_shape.c b/src/lib/ector/software/ector_renderer_software_shape.c
index 0db1ea2a70..658a82e41f 100644
--- a/src/lib/ector/software/ector_renderer_software_shape.c
+++ b/src/lib/ector/software/ector_renderer_software_shape.c
@@ -271,7 +271,7 @@ typedef struct _Line
double y2;
}Line;
-static void
+static void
_line_value_set(Line *l, double x1, double y1, double x2, double y2)
{
l->x1 = x1;
@@ -281,7 +281,7 @@ _line_value_set(Line *l, double x1, double y1, double x2, double y2)
}
// approximate sqrt(x*x + y*y) using alpha max plus beta min algorithm.
-// With alpha = 1, beta = 3/8, giving results with the largest error less
+// With alpha = 1, beta = 3/8, giving results with the largest error less
// than 7% compared to the exact value.
static double
_line_length(Line *l)
@@ -339,7 +339,7 @@ _dasher_line_to(Dash_Stroker *dasher, double x, double y)
_outline_line_to(dasher->outline, x, y);
}
}
- else
+ else
{
while (line_len > dasher->cur_dash_length)
{
@@ -404,7 +404,7 @@ _dasher_cubic_to(Dash_Stroker *dasher, double cx1 , double cy1, double cx2, doub
_outline_cubic_to(dasher->outline, cx1, cy1, cx2, cy2, x, y);
}
}
- else
+ else
{
while (bez_len > dasher->cur_dash_length)
{
@@ -535,8 +535,8 @@ _need_update_rle(Eo *obj, Ector_Renderer_Software_Shape_Data *pd)
{
if (pd->task) return pd->task;
- if (!_generate_stroke_data(pd) &&
- !_generate_shape_data(pd))
+ if (!pd->base->visibility || (!_generate_stroke_data(pd) &&
+ !_generate_shape_data(pd)))
return NULL;
const Efl_Gfx_Path_Command *cmds;
@@ -654,8 +654,8 @@ _ector_renderer_software_shape_ector_renderer_draw(Eo *obj EINA_UNUSED,
if (task) ector_software_wait(_update_rle, _done_rle, task);
// adjust the offset
- x = pd->surface->x + (int)pd->base->origin.x;
- y = pd->surface->y + (int)pd->base->origin.y;
+ x = (int)pd->base->origin.x - pd->surface->x;
+ y = (int)pd->base->origin.y - pd->surface->y;
ector_software_rasterizer_clip_rect_set(pd->surface->rasterizer, clips);
ector_software_rasterizer_transform_set(pd->surface->rasterizer, pd->base->m);
diff --git a/src/lib/ector/software/ector_software_buffer.c b/src/lib/ector/software/ector_software_buffer.c
index 62dae2c50b..efaf5fefca 100644
--- a/src/lib/ector/software/ector_software_buffer.c
+++ b/src/lib/ector/software/ector_software_buffer.c
@@ -67,10 +67,10 @@ EOLIAN static Eina_Bool
_ector_software_buffer_base_ector_buffer_pixels_get(Eo *obj EINA_UNUSED, Ector_Software_Buffer_Base_Data *pd,
void **pixels, int* width, int* height, int* stride)
{
- if (*pixels) *pixels = pd->pixels.u8;
- if (*width) *width = pd->generic->w;
- if (*height) *height = pd->generic->h;
- if (*stride) *stride = pd->stride;
+ if (pixels) *pixels = pd->pixels.u8;
+ if (width) *width = pd->generic->w;
+ if (height) *height = pd->generic->h;
+ if (stride) *stride = pd->stride;
return pd->writable;
}
diff --git a/src/lib/ector/software/meson.build b/src/lib/ector/software/meson.build
index 7374252729..a87f66efa5 100644
--- a/src/lib/ector/software/meson.build
+++ b/src/lib/ector/software/meson.build
@@ -33,6 +33,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'ECTOR_API',
'-gchd', '@INPUT@'])
endforeach
@@ -48,8 +49,11 @@ if cpu_sse3 == true
endif
-if get_option('install-eo-files')
- install_data(pub_eo_files,
- install_dir: join_paths(eolian_include_dir, package_version_name)
- )
-endif
+#
+# Only enable that again when the namespace problems are fixed. ref T8648
+#
+#if get_option('install-eo-files')
+# install_data(pub_eo_files,
+# install_dir: join_paths(eolian_include_dir, package_version_name)
+# )
+#endif
diff --git a/src/lib/edje/Edje.h b/src/lib/edje/Edje.h
index d8c32dc8c1..65ff5342e4 100644
--- a/src/lib/edje/Edje.h
+++ b/src/lib/edje/Edje.h
@@ -7,7 +7,7 @@ These routines are used for Edje.
@date 2003 (created)
-@section toc Table of Contents
+@section edje_toc Table of Contents
@li @ref edje_main_intro
@li @ref edje_main_work
diff --git a/src/lib/edje/Edje_Common.h b/src/lib/edje/Edje_Common.h
index 22aa8e667a..5e486fe2de 100644
--- a/src/lib/edje/Edje_Common.h
+++ b/src/lib/edje/Edje_Common.h
@@ -317,15 +317,6 @@ EAPI void *edje_object_signal_callback_seat_data_get(void);
*
* @brief Functions to manipulate audio abilities in edje.
*
- * Perspective is a graphical tool that makes objects represented in 2D
- * look like they have a 3D appearance.
- *
- * Edje allows us to use perspective on any edje object. This group of
- * functions deal with the use of perspective, by creating and configuring
- * a perspective object that must set to a edje object or a canvas,
- * affecting all the objects inside that have no particular perspective
- * set already.
- *
* @{
*/
@@ -817,6 +808,7 @@ struct _Edje_External_Param_Info
#define EDJE_EXTERNAL_PARAM_INFO_SENTINEL {NULL, 0, 0, {.s = {NULL, NULL, NULL}}}
+/** Version of the EDJE External ABI used by this library .*/
#define EDJE_EXTERNAL_TYPE_ABI_VERSION (3)
/**
@@ -869,6 +861,7 @@ struct _Edje_External_Type
Edje_External_Param_Info *parameters_info; /**< An array of #Edje_External_Param_Info describing the different parameters this EXTERNAL may have. The last element in the array must be #EDJE_EXTERNAL_PARAM_INFO_SENTINEL. */
void *data; /**< Private user data that will be passed to all of the class functions. */
};
+/** Alias for _Edje_External_Type */
typedef struct _Edje_External_Type Edje_External_Type;
/**
@@ -882,6 +875,7 @@ struct _Edje_External_Type_Info
const Edje_External_Type *info; /**< The type definition. */
};
+/** Alias for _Edje_External_Type_Info */
typedef struct _Edje_External_Type_Info Edje_External_Type_Info;
/**
@@ -1207,22 +1201,6 @@ typedef enum _Edje_Aspect_Control
*/
EAPI const char *edje_object_part_object_name_get(const Evas_Object *obj);
-#ifdef EFL_BETA_API_SUPPORT
-
-/**
- * @brief Creates scene and root node which contains all 3D parts of edje object.
- * @param obj An edje part object
- * @param root node to collect all 3D parts
- * @param scene
- * @return scene and root node which contains all 3D parts of edje object
- * @note If this function returns @c EINA_FALSE, @p the scene or the root
- * node wasn't made
- * @since 1.18
- */
-EAPI Eina_Bool edje_3d_object_add(Evas_Object *obj, Eo **root_node, Eo *scene);
-
-#endif
-
/**
* @}
*/
@@ -1831,13 +1809,14 @@ EAPI Eina_Bool edje_mmap_group_exists(Eina_File *f, const char *glob);
/**
* @brief Determines whether a group have 3D Scene.
* @param f The mapped file
- * @param glob The group name
+ * @param group The group name
*
* @return @c 1 if a Scene is found is found, @c 0 otherwise
*
+ * @deprecated
* @since 1.18
*/
-EAPI Eina_Bool edje_mmap_3d_has(Eina_File *f, const char *group);
+EINA_DEPRECATED EAPI Eina_Bool edje_mmap_3d_has(Eina_File *f, const char *group);
/**
* @brief Iterates over all the opened Edje files.
@@ -1952,7 +1931,13 @@ typedef enum _Edje_Action_Type
EDJE_ACTION_TYPE_PHYSICS_ROT_SET = 23, /**< @since 1.8 @brief Physics rotation set action value */
EDJE_ACTION_TYPE_VIBRATION_SAMPLE = 24, /**< @since 1.10 @brief vibration sample action value */
EDJE_ACTION_TYPE_MO = 25, /**< @since 1.15 @brief Mo action value */
- EDJE_ACTION_TYPE_LAST = 26 /**< Last action value */
+ EDJE_ACTION_TYPE_VG_ANIM_STOP = 26, /** @since 1.24 @brief Vector animation stop action value */
+ EDJE_ACTION_TYPE_VG_ANIM_PAUSE = 27, /** @since 1.24 @brief Vector animation pause action value */
+ EDJE_ACTION_TYPE_VG_ANIM_RESUME = 28, /** @since 1.24 @brief Vector animation resume action value */
+ EDJE_ACTION_TYPE_VG_ANIM_PLAY = 29, /** @since 1.24 @brief Vector animation play action value */
+ EDJE_ACTION_TYPE_VG_ANIM_REWIND = 30, /** @since 1.24 @brief Vector animation rewind action value */
+ EDJE_ACTION_TYPE_VG_ANIM_LOOP = 31, /** @since 1.24 @brief Vector animation loop value */
+ EDJE_ACTION_TYPE_LAST = 32 /**< Last action value */
} Edje_Action_Type;
/**
diff --git a/src/lib/edje/Edje_Edit.h b/src/lib/edje/Edje_Edit.h
index b08a85246d..4de878fe43 100644
--- a/src/lib/edje/Edje_Edit.h
+++ b/src/lib/edje/Edje_Edit.h
@@ -1165,7 +1165,7 @@ EAPI Eina_Bool edje_edit_color_class_name_set(Evas_Object *obj, const char *name
* @brief Gets the description of a color class.
*
* @param obj Object being edited.
- * @param name Color class to get the description of.
+ * @param class_name Color class to get the description of.
*
* @return The description of the color class or @c NULL if not found
* @since 1.14
@@ -1176,7 +1176,7 @@ EAPI Eina_Stringshare *edje_edit_color_class_description_get(Evas_Object *obj, c
* @brief Changes the description of a color class.
*
* @param obj Object being edited.
- * @param name Color class to edit.
+ * @param class_name Color class to edit.
* @param desc New description for the color class
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
@@ -1904,7 +1904,7 @@ EAPI Eina_Bool edje_edit_part_anti_alias_get(Evas_Object *obj, const char *part)
*
* @param obj Object being edited.
* @param part The part to set if the anti-aliasing is accepted.
- * @param mouse_events @c EINA_TRUE if part should to draw anti-aliased, @c EINA_FALSE otherwise.
+ * @param anti_alias @c EINA_TRUE if part should be drawn anti-aliased, @c EINA_FALSE otherwise.
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
*/
@@ -2074,7 +2074,7 @@ EAPI Eina_Bool edje_edit_part_mask_flags_set(Evas_Object *obj, const char *part,
* @param obj Object being edited.
* @param part Part name to get it's pointer_mode.
*
- * @return Ponter Mode of the part.
+ * @return Pointer Mode of the part.
* @since 1.11
*/
EAPI Evas_Object_Pointer_Mode edje_edit_part_pointer_mode_get(Evas_Object *obj, const char *part);
@@ -2082,7 +2082,7 @@ EAPI Evas_Object_Pointer_Mode edje_edit_part_pointer_mode_get(Evas_Object *obj,
/**
* @brief Gets pointer_mode of a part.
*
- * Note that Ponter Mode can be:
+ * Note that Pointer Mode can be:
* - EVAS_OBJECT_POINTER_MODE_AUTOGRAB - default, X11-like
* - EVAS_OBJECT_POINTER_MODE_NOGRAB - pointer always bound to the object right below it
* - EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN - useful on object with "repeat events" enabled, @since 1.2
@@ -2108,7 +2108,7 @@ EAPI Eina_Bool edje_edit_part_pointer_mode_set(Evas_Object *obj, const char *par
* @param obj Object being edited.
* @param part Part name to get it's cursor_mode.
*
- * @return Ponter Mode of the part.
+ * @return Pointer Mode of the part.
* @since 1.11
*/
EAPI unsigned char edje_edit_part_cursor_mode_get(Evas_Object *obj, const char *part);
@@ -2156,7 +2156,7 @@ EAPI Eina_Bool edje_edit_part_scale_set(Evas_Object *obj, const char *part, Eina
EAPI Eina_Bool edje_edit_part_scale_get(Evas_Object *obj, const char *part);
/**
- * @brief Gets horizontal dragable state for part.
+ * @brief Gets horizontal draggable state for part.
*
* @param obj Object being edited.
* @param part Part to get if can be dragged horizontally.
@@ -2166,7 +2166,7 @@ EAPI Eina_Bool edje_edit_part_scale_get(Evas_Object *obj, const char *part);
EAPI int edje_edit_part_drag_x_get(Evas_Object *obj, const char *part);
/**
- * @brief Sets horizontal dragable state for part.
+ * @brief Sets horizontal draggable state for part.
*
* @param obj Object being edited.
* @param part Part to set if should be dragged horizontally.
@@ -2177,7 +2177,7 @@ EAPI int edje_edit_part_drag_x_get(Evas_Object *obj, const char *part);
EAPI Eina_Bool edje_edit_part_drag_x_set(Evas_Object *obj, const char *part, int drag);
/**
- * @brief Gets vertical dragable state for part.
+ * @brief Gets vertical draggable state for part.
*
* @param obj Object being edited.
* @param part Part to get if can be dragged vertically.
@@ -2187,7 +2187,7 @@ EAPI Eina_Bool edje_edit_part_drag_x_set(Evas_Object *obj, const char *part, int
EAPI int edje_edit_part_drag_y_get(Evas_Object *obj, const char *part);
/**
- * @brief Sets vertical dragable state for part.
+ * @brief Sets vertical draggable state for part.
*
* @param obj Object being edited.
* @param part Part to set if should be dragged vertically.
@@ -2198,7 +2198,7 @@ EAPI int edje_edit_part_drag_y_get(Evas_Object *obj, const char *part);
EAPI Eina_Bool edje_edit_part_drag_y_set(Evas_Object *obj, const char *part, int drag);
/**
- * @brief Gets horizontal dragable step for part.
+ * @brief Gets horizontal draggable step for part.
*
* @param obj Object being edited.
* @param part Part to get the drag horizontal step value.
@@ -2208,7 +2208,7 @@ EAPI Eina_Bool edje_edit_part_drag_y_set(Evas_Object *obj, const char *part, int
EAPI int edje_edit_part_drag_step_x_get(Evas_Object *obj, const char *part);
/**
- * @brief Sets horizontal dragable state for part.
+ * @brief Sets horizontal draggable state for part.
*
* @param obj Object being edited.
* @param part Part to set the drag horizontal step value.
@@ -2219,7 +2219,7 @@ EAPI int edje_edit_part_drag_step_x_get(Evas_Object *obj, const char *part);
EAPI Eina_Bool edje_edit_part_drag_step_x_set(Evas_Object *obj, const char *part, int step);
/**
- * @brief Gets vertical dragable step for part.
+ * @brief Gets vertical draggable step for part.
*
* @param obj Object being edited.
* @param part Part to get the drag vertical step value.
@@ -2229,7 +2229,7 @@ EAPI Eina_Bool edje_edit_part_drag_step_x_set(Evas_Object *obj, const char *part
EAPI int edje_edit_part_drag_step_y_get(Evas_Object *obj, const char *part);
/**
- * @brief Sets vertical dragable state for part.
+ * @brief Sets vertical draggable state for part.
*
* @param obj Object being edited.
* @param part Part to set the drag vertical step value.
@@ -2240,17 +2240,17 @@ EAPI int edje_edit_part_drag_step_y_get(Evas_Object *obj, const char *part);
EAPI Eina_Bool edje_edit_part_drag_step_y_set(Evas_Object *obj, const char *part, int step);
/**
- * @brief Gets horizontal dragable count for part.
+ * @brief Gets horizontal draggable count for part.
*
* @param obj Object being edited.
* @param part Part to get the drag horizontal count value.
*
- * @return Horizontal dragable count value
+ * @return Horizontal draggable count value
*/
EAPI int edje_edit_part_drag_count_x_get(Evas_Object *obj, const char *part);
/**
- * @brief Sets horizontal dragable count for part.
+ * @brief Sets horizontal draggable count for part.
*
* @param obj Object being edited.
* @param part Part to set the drag horizontal count value.
@@ -2261,17 +2261,17 @@ EAPI int edje_edit_part_drag_count_x_get(Evas_Object *obj, const char *part);
EAPI Eina_Bool edje_edit_part_drag_count_x_set(Evas_Object *obj, const char *part, int count);
/**
- * @brief Gets vertical dragable count for part.
+ * @brief Gets vertical draggable count for part.
*
* @param obj Object being edited.
* @param part Part to get the drag vertical count value.
*
- * @return Vertical dragable count value
+ * @return Vertical draggable count value
*/
EAPI int edje_edit_part_drag_count_y_get(Evas_Object *obj, const char *part);
/**
- * @brief Sets vertical dragable count for part.
+ * @brief Sets vertical draggable count for part.
*
* @param obj Object being edited.
* @param part Part to set the drag vertical count value.
@@ -2824,7 +2824,7 @@ EAPI Eina_Bool edje_edit_part_item_append(Evas_Object *obj, const char *part, co
* @param obj Object being edited.
* @param part Part to add a new item. This part should have BOX or TABLE type.
* @param item_name Name of new item that is not exist in BOX or TABLE yet.
- * @param item_before Name of repated item that is exist in BOX or TABLE.
+ * @param item_before Name of repeated item that is exist in BOX or TABLE.
* @param source_group Source (means group name) of the new item.
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
@@ -2840,7 +2840,7 @@ edje_edit_part_item_insert_before(Evas_Object *obj, const char *part, const char
* @param obj Object being edited.
* @param part Part to add a new item. This part should have BOX or TABLE type.
* @param item_name Name of new item that is not exist in BOX or TABLE yet.
- * @param index Index of repated item that is exist in BOX or TABLE.
+ * @param index Index of repeated item that is exist in BOX or TABLE.
* @param source_group Source (means group name) of the new item.
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
@@ -2855,7 +2855,7 @@ edje_edit_part_item_insert_before_index(Evas_Object *obj, const char *part, cons
* @param obj Object being edited.
* @param part Part to add a new item. This part should have BOX or TABLE type.
* @param item_name Name of new item that is not exist in BOX or TABLE yet.
- * @param item_after Name of repated item that is exist in BOX or TABLE.
+ * @param item_after Name of repeated item that is exist in BOX or TABLE.
* @param source_group Source (means group name) of the new item.
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
@@ -2871,7 +2871,7 @@ edje_edit_part_item_insert_after(Evas_Object *obj, const char *part, const char
* @param obj Object being edited.
* @param part Part to add a new item. This part should have BOX or TABLE type.
* @param item_name Name of new item that is not exist in BOX or TABLE yet.
- * @param index Index of repated item that is exist in BOX or TABLE.
+ * @param index Index of repeated item that is exist in BOX or TABLE.
* @param source_group Source (means group name) of the new item.
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
@@ -3033,7 +3033,7 @@ edje_edit_part_item_index_name_get(Evas_Object *obj, const char *part, unsigned
* @param obj Object being edited.
* @param part Part to change item's source. This part should have BOX or TABLE type.
* @param item_name Name of item.
- * @param source_group New gorup name.
+ * @param source_group New group name.
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
* @since 1.11
@@ -3047,7 +3047,7 @@ EAPI Eina_Bool edje_edit_part_item_source_set(Evas_Object *obj, const char *part
* @param obj Object being edited.
* @param part Part to change item's source. This part should have BOX or TABLE type.
* @param index Index of item
- * @param source_group New gorup name.
+ * @param source_group New group name.
*
* @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
* @since 1.18
@@ -3363,7 +3363,7 @@ EAPI int edje_edit_part_item_spread_w_get(Evas_Object *obj, const char *part, co
/**
* @brief Sets the spread width value of a part's item.
*
- * @attention be careful, if you set up huge number (like 10 or 100). width and height of
+ * @attention be careful, if you set up huge number (like 10 or 100) width and height of
* spread is being multiplied and you will get huge number of objects that may "eat"
* all of your processor performance at once... Or if you want, you may
* get some coffee and wait until it will recalculate all of those objects :)
@@ -3382,7 +3382,7 @@ EAPI Eina_Bool edje_edit_part_item_spread_w_set(Evas_Object *obj, const char *pa
/**
* @brief Gets the spread height value of a part's item.
*
- * @attention be careful, if you set up huge number (like 10 or 100). width and height of
+ * @attention be careful, if you set up huge number (like 10 or 100) width and height of
* spread is being multiplied and you will get huge number of objects that may "eat"
* all of your processor performance at once... Or if you want, you may
* get some coffee and wait until it will recalculate all of those objects :)
@@ -3692,7 +3692,7 @@ edje_edit_part_item_index_spread_w_get(Evas_Object *obj, const char *part, unsig
/**
* @brief Sets the spread width value of a part's item.
*
- * @attention be careful, if you set up huge number (like 10 or 100). width and height of
+ * @attention be careful, if you set up huge number (like 10 or 100) width and height of
* spread is being multiplied and you will get huge number of objects that may "eat"
* all of your processor performance at once... Or if you want, you may
* get some coffee and wait until it will recalculate all of those objects :)
@@ -3711,7 +3711,7 @@ edje_edit_part_item_index_spread_w_set(Evas_Object *obj, const char *part, unsig
/**
* @brief Gets the spread height value of a part's item.
*
- * @attention be careful, if you set up huge number (like 10 or 100). width and height of
+ * @attention be careful, if you set up huge number (like 10 or 100) width and height of
* spread is being multiplied and you will get huge number of objects that may "eat"
* all of your processor performance at once... Or if you want, you may
* get some coffee and wait until it will recalculate all of those objects :)
@@ -3838,7 +3838,7 @@ edje_edit_part_item_index_align_x_get(Evas_Object *obj, const char *part, unsign
* @brief Sets the horizontal align value of a part state.
*
* @param obj Object being edited.
- * @param part Part that contain itemf
+ * @param part Part that contains item
* @param item The name of the item to set horizontal align value.
* @param align_x New value of the horizontal align.
*
@@ -3852,7 +3852,7 @@ EAPI Eina_Bool edje_edit_part_item_align_x_set(Evas_Object *obj, const char *par
* @brief Sets the horizontal align value of a part state.
*
* @param obj Object being edited.
- * @param part Part that contain itemf
+ * @param part Part that contains item
* @param index Index of the item to set horizontal align value.
* @param align_x New value of the horizontal align.
*
@@ -3946,7 +3946,7 @@ edje_edit_part_item_index_weight_x_get(Evas_Object *obj, const char *part, unsig
* @brief Sets the horizontal we value of a part item.
*
* @param obj Object being edited.
- * @param part Part that contain itemf
+ * @param part Part that contains item
* @param item The name of the item to set horizontal weight value.
* @param weight_x New value of the horizontal weight.
*
@@ -3960,7 +3960,7 @@ EAPI Eina_Bool edje_edit_part_item_weight_x_set(Evas_Object *obj, const char *pa
* @brief Sets the horizontal we value of a part item.
*
* @param obj Object being edited.
- * @param part Part that contain itemf
+ * @param part Part that contains item
* @param index Index of the item to set horizontal weight value.
* @param weight_x New value of the horizontal weight.
*
@@ -4113,7 +4113,7 @@ edje_edit_part_item_item_weight_x_get(Evas_Object *obj, const char *part, unsign
* @brief Sets the horizontal we value of a part item.
*
* @param obj Object being edited.
- * @param part Part that contain itemf
+ * @param part Part that contains item
* @param index Index of the item to set horizontal weight value.
* @param weight_x New value of the horizontal weight.
*
@@ -4952,22 +4952,6 @@ EAPI Eina_Bool edje_edit_state_align_x_set(Evas_Object *obj, const char *part, c
EAPI Eina_Bool edje_edit_state_align_y_set(Evas_Object *obj, const char *part, const char *state, double value, double align);
/**
- * @brief Sets the size class of the given part state.
- *
- * @param obj Object being edited.
- * @param part Part that contain state.
- * @param state The name of the state to set size class (not including the state value).
- * @param value The state value.
- * @param text_class The size class to assign.
- *
- * @return @c EINA_TRUE in case of success, @c EINA_FALSE otherwise.
- *
- * @since 1.18
- */
-EAPI Eina_Bool
-edje_edit_state_text_class_set(Evas_Object *obj, const char *part, const char *state, double value, const char *size_class);
-
-/**
* @brief Gets the minimum width value of a part state.
*
* @param obj Object being edited.
@@ -5792,7 +5776,7 @@ EAPI Eina_Bool edje_edit_state_external_param_choice_set(Evas_Object *obj, const
/**
* @brief Sets the states step parameter values.
*
- * Step parameter restricts resizing of each dimension to values divisibles by
+ * Step parameter restricts resizing of each dimension to values divisible by
* its value. This causes the part to jump from value to value while resizing.
* The default value is "0 0" disabling stepping.
*
@@ -5830,7 +5814,7 @@ EAPI Eina_Bool edje_edit_state_step_get(Evas_Object *obj, const char *part, cons
/**
* @brief Sets the states limit parameter value.
*
- * Set limit causes the emission of signals when the the size of part changes
+ * Set limit causes the emission of signals when the size of part changes
* from zero or to a zero size in corresponding to the limit value.
* For example, the signals emitted on width changing are <i>'limit,width,over'</i>
* and <i>'limit,width,zero'</i>
@@ -5870,7 +5854,7 @@ EAPI Eina_Bool edje_edit_state_limit_set(Evas_Object *obj, const char *part, con
* @param state The name of the state.
* @param value The state value.
*
- * @return The value that represents the states limit value in case of success, othervise returns 4.
+ * @return The value that represents the states limit value in case of success, otherwise returns 4.
* @see edje_edit_state_limit_set()
* @since 1.11
*/
@@ -6606,7 +6590,7 @@ EAPI Eina_Bool edje_edit_state_text_fit_y_set(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to get the the minimum horizontal size of the container to be equal (not including the state value).
+ * @param state The name of the state to get the minimum horizontal size of the container to be equal (not including the state value).
* @param value The state value.
*
* @return @c EINA_TRUE If the part forces container's minimum horizontal size, @c EINA_FALSE otherwise.
@@ -6618,7 +6602,7 @@ EAPI Eina_Bool edje_edit_state_text_min_x_get(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to get the the minimum horizontal size of the container to be equal (not including the state value).
+ * @param state The name of the state to get the minimum horizontal size of the container to be equal (not including the state value).
* @param value The state value.
*
* @return @c EINA_TRUE If the part forces container's maximum horizontal size, @c EINA_FALSE otherwise.
@@ -6630,7 +6614,7 @@ EAPI Eina_Bool edje_edit_state_text_max_x_get(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to get the the minimum vertical size of the container to be equal (not including the state value).
+ * @param state The name of the state to get the minimum vertical size of the container to be equal (not including the state value).
* @param value The state value.
*
* @return @c EINA_TRUE If the part forces container's minimum vertical size, @c EINA_FALSE otherwise.
@@ -6642,7 +6626,7 @@ EAPI Eina_Bool edje_edit_state_text_min_y_get(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to get the the maximum vertical size of the container to be equal (not including the state value).
+ * @param state The name of the state to get the maximum vertical size of the container to be equal (not including the state value).
* @param value The state value.
*
* @return @c EINA_TRUE If the part forces container's maximum vertical size, @c EINA_FALSE otherwise.
@@ -6654,7 +6638,7 @@ EAPI Eina_Bool edje_edit_state_text_max_y_get(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the minimum horizontal size of the container to be equal (not including the state value).
+ * @param state The name of the state to set the minimum horizontal size of the container to be equal (not including the state value).
* @param value The state value.
* @param v @c EINA_TRUE to make the text force it's forces container's minimum horizontal size, @c EINA_FALSE otherwise.
*
@@ -6667,7 +6651,7 @@ EAPI Eina_Bool edje_edit_state_text_min_x_set(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the maximum horizontal size of the container to be equal (not including the state value).
+ * @param state The name of the state to set the maximum horizontal size of the container to be equal (not including the state value).
* @param value The state value.
* @param v @c EINA_TRUE to make the text force it's forces container's maximum horizontal size, @c EINA_FALSE otherwise.
*
@@ -6680,7 +6664,7 @@ EAPI Eina_Bool edje_edit_state_text_max_x_set(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the minimum vertical size of the container to be equal (not including the state value).
+ * @param state The name of the state to set the minimum vertical size of the container to be equal (not including the state value).
* @param value The state value.
* @param v @c EINA_TRUE to make the text force it's forces container's minimum vertical size, @c EINA_FALSE otherwise.
*
@@ -6693,7 +6677,7 @@ EAPI Eina_Bool edje_edit_state_text_min_y_set(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the maximum vertical size of the container to be equal (not including the state value).
+ * @param state The name of the state to set the maximum vertical size of the container to be equal (not including the state value).
* @param value The state value.
* @param v @c EINA_TRUE to make the text force it's forces container's maximum vertical size, @c EINA_FALSE otherwise.
*
@@ -6734,7 +6718,7 @@ EAPI Eina_Bool edje_edit_state_text_style_set(Evas_Object *obj, const char *part
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the maximum vertical size of
+ * @param state The name of the state to set the maximum vertical size of
* the container to be equal (not including the state value).
* @param value Value of the state.
*
@@ -6749,7 +6733,7 @@ EAPI const char * edje_edit_state_text_text_source_get(Evas_Object *obj, const c
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the maximum vertical size of
+ * @param state The name of the state to set the maximum vertical size of
* the container to be equal (not including the state value).
* @param value Value of the state.
* @param source The text source part name.
@@ -6763,7 +6747,7 @@ EAPI Eina_Bool edje_edit_state_text_text_source_set(Evas_Object *obj, const char
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the maximum vertical size of
+ * @param state The name of the state to set the maximum vertical size of
* @param value Value of the state.
* The container to be equal (not including the state value).
*
@@ -6778,7 +6762,7 @@ EAPI const char * edje_edit_state_text_source_get(Evas_Object *obj, const char *
*
* @param obj Object being edited.
* @param part Part that contain state.
- * @param state The name of the state to set the the maximum vertical size of
+ * @param state The name of the state to set the maximum vertical size of
* the container to be equal (not including the state value).
* @param value Value of the state.
* @param source The text source part name.
@@ -6986,7 +6970,7 @@ edje_edit_image_set_list_get(Evas_Object *obj);
*
* @param obj Object being edited.
* @param name The name of the image.
- * @param first_only If @c EINA_TRUE, return only one triplete.
+ * @param first_only If @c EINA_TRUE, return only one triplet.
*
* @return Eina_List containing Edje_Part_Image_Use if successful, NULL otherwise
*/
@@ -7415,7 +7399,7 @@ EAPI Eina_Bool edje_edit_image_compression_type_set(Evas_Object *obj, const char
* @param obj Object being edited.
* @param image The name of the image.
*
- * @return The compression rate (if the imnage is @c
+ * @return The compression rate (if the image is @c
* EDJE_EDIT_IMAGE_COMP_LOSSY[_ETC1]) or < 0, on errors.
*/
EAPI int edje_edit_image_compression_rate_get(Evas_Object *obj, const char *image);
@@ -7681,7 +7665,7 @@ EAPI Eina_Bool edje_edit_vector_del(Evas_Object *obj, const char *name);
*
* @param obj Object being edited.
* @param name The name of the vector.
- * @param first_only If EINA_TRUE, return only one triplete.
+ * @param first_only If EINA_TRUE, return only one triplet.
*
* @return Eina_List containing Edje_Part_Image_Use if successful, NULL otherwise
* @since 1.19
diff --git a/src/lib/edje/Edje_Eo.h b/src/lib/edje/Edje_Eo.h
index d302b44998..78a41abe83 100644
--- a/src/lib/edje/Edje_Eo.h
+++ b/src/lib/edje/Edje_Eo.h
@@ -8,6 +8,7 @@
#include <efl_canvas_layout_types.eot.h>
+#include "efl_canvas_layout_part_type_provider.eo.h"
#include "efl_canvas_layout_part.eo.h"
#include "efl_canvas_layout_part_box.eo.h"
#include "efl_canvas_layout_part_table.eo.h"
diff --git a/src/lib/edje/Edje_Legacy.h b/src/lib/edje/Edje_Legacy.h
index af89a4939c..a571ea297e 100644
--- a/src/lib/edje/Edje_Legacy.h
+++ b/src/lib/edje/Edje_Legacy.h
@@ -48,6 +48,9 @@
* @note Before creating the first Edje object in your code, remember
* to initialize the library, with edje_init(), or unexpected behavior
* might occur.
+ *
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI Evas_Object *edje_object_add (Evas *evas);
@@ -67,6 +70,9 @@ EAPI Evas_Object *edje_object_add (Evas *evas);
* will remove it (if it was issued before).
*
* @return @c false if obj was not a valid Edje object otherwise @c true
+ *
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI Eina_Bool edje_object_preload(Evas_Object *obj, Eina_Bool cancel);
@@ -110,6 +116,9 @@ EAPI Eina_Bool edje_object_preload(Evas_Object *obj, Eina_Bool cancel);
* @param[in] func The callback function to be executed when the signal is
* emitted.
* @param[in] data A pointer to data to pass in to func.
+ *
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI void edje_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data);
@@ -125,6 +134,9 @@ EAPI void edje_object_signal_callback_add(Evas_Object *obj, const char *emission
*
* @param[in] emission The signal's "emission" string
* @param[in] source The signal's "source" string
+ *
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI void edje_object_signal_emit(Evas_Object *obj, const char *emission, const char *source);
@@ -146,6 +158,8 @@ EAPI void edje_object_signal_emit(Evas_Object *obj, const char *emission, const
* @see edje_object_signal_callback_add().
* @see edje_object_signal_callback_del_full().
*
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI void *edje_object_signal_callback_del (Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func);
@@ -171,6 +185,8 @@ EAPI void *edje_object_signal_callback_del (Evas_Object *obj, const char
* @see edje_object_signal_callback_add().
* @see edje_object_signal_callback_del().
*
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI void *edje_object_signal_callback_del_full(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data);
@@ -207,6 +223,9 @@ typedef enum
* #EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED - #EDJE_LOAD_ERROR_CORRUPT_FILE
* - #EDJE_LOAD_ERROR_UNKNOWN_FORMAT - #EDJE_LOAD_ERROR_INCOMPATIBLE_FILE -
* #EDJE_LOAD_ERROR_UNKNOWN_COLLECTION - #EDJE_LOAD_ERROR_RECURSIVE_REFERENCE
+ *
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI Edje_Load_Error edje_object_load_error_get(const Evas_Object *obj);
@@ -223,6 +242,9 @@ EAPI Edje_Load_Error edje_object_load_error_get(const Evas_Object *obj);
* edje_object_load_error_get(). The function in question is meant
* to be used in conjunction with the latter, for pretty-printing any
* possible error cause.
+ *
+ * @ingroup Edje_Object_Group
+ *
*/
EAPI const char *edje_load_error_str (Edje_Load_Error error);
@@ -248,7 +270,7 @@ EAPI const char *edje_load_error_str (Edje_Load_Error error);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI Eina_Bool edje_object_part_geometry_get(const Evas_Object *obj, const char * part, int *x, int *y, int *w, int *h);
@@ -260,7 +282,7 @@ EAPI Eina_Bool edje_object_part_geometry_get(const Evas_Object *obj, const char
*
* @return The part state: "default" for the default state "" for other states
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI const char *edje_object_part_state_get(const Evas_Object *obj, const char * part, double *val_ret);
@@ -286,7 +308,7 @@ EAPI const char *edje_object_part_state_get(const Evas_Object *obj, const char *
* @return A pointer to the Evas object implementing the given part, @c null on
* failure (e.g. the given part doesn't exist)
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI const Efl_Canvas_Object *edje_object_part_object_get(const Evas_Object *obj, const char * part);
@@ -307,7 +329,7 @@ EAPI const Efl_Canvas_Object *edje_object_part_object_get(const Evas_Object *obj
*
* @param[in] update Whether or not update the size hints.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_update_hints_set(Evas_Object *obj, Eina_Bool update);
@@ -328,7 +350,7 @@ EAPI void edje_object_update_hints_set(Evas_Object *obj, Eina_Bool update);
*
* @return Whether or not update the size hints.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI Eina_Bool edje_object_update_hints_get(const Evas_Object *obj);
@@ -341,7 +363,7 @@ EAPI Eina_Bool edje_object_update_hints_get(const Evas_Object *obj);
* @param[out] minw The minimum required width (return value)
* @param[out] minh The minimum required height (return value)
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_size_min_calc(Evas_Object *obj, int *minw, int *minh);
@@ -368,7 +390,7 @@ EAPI void edje_object_size_min_calc(Evas_Object *obj, int *minw, int *minh);
* @param[in] restrictedh The minimum height constraint as input, @c minh can
* not be lower than this
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_size_min_restricted_calc(Evas_Object *obj, int *minw, int *minh, int restrictedw, int restrictedh);
@@ -392,7 +414,7 @@ EAPI void edje_object_size_min_restricted_calc(Evas_Object *obj, int *minw, int
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI Eina_Bool edje_object_parts_extends_calc(Evas_Object *obj, int *x, int *y, int *w, int *h);
@@ -403,7 +425,7 @@ EAPI Eina_Bool edje_object_parts_extends_calc(Evas_Object *obj, int *x, int *y,
*
* See also @ref edje_object_freeze and @ref edje_object_thaw.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_calc_force(Evas_Object *obj);
@@ -417,7 +439,7 @@ EAPI void edje_object_calc_force(Evas_Object *obj);
*
* @return The frozen state or 0 on error
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI int edje_object_freeze(Evas_Object *obj);
@@ -433,7 +455,7 @@ EAPI int edje_object_freeze(Evas_Object *obj);
*
* @return The frozen state or 0 if the object is not frozen or on error.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI int edje_object_thaw(Evas_Object *obj);
@@ -464,21 +486,21 @@ EAPI void edje_object_text_change_cb_set(Evas_Object *obj, Edje_Text_Change_Cb f
/**
- * @ingroup Edje_Object_Communication_Interface_Message
+ * @addtogroup Edje_Object_Communication_Interface_Message
*
* @{
*/
-typedef struct _Edje_Message_String Edje_Message_String;
-typedef struct _Edje_Message_Int Edje_Message_Int;
-typedef struct _Edje_Message_Float Edje_Message_Float;
-typedef struct _Edje_Message_String_Set Edje_Message_String_Set;
-typedef struct _Edje_Message_Int_Set Edje_Message_Int_Set;
-typedef struct _Edje_Message_Float_Set Edje_Message_Float_Set;
-typedef struct _Edje_Message_String_Int Edje_Message_String_Int;
-typedef struct _Edje_Message_String_Float Edje_Message_String_Float;
-typedef struct _Edje_Message_String_Int_Set Edje_Message_String_Int_Set;
-typedef struct _Edje_Message_String_Float_Set Edje_Message_String_Float_Set;
+typedef struct _Edje_Message_String Edje_Message_String; /**< Alias for _Edje_Message_String. */
+typedef struct _Edje_Message_Int Edje_Message_Int; /**< Alias for _Edje_Message_Int */
+typedef struct _Edje_Message_Float Edje_Message_Float; /**< Alias for _Edje_Message_Float */
+typedef struct _Edje_Message_String_Set Edje_Message_String_Set; /**< Alias for _Edje_Message_String_Set */
+typedef struct _Edje_Message_Int_Set Edje_Message_Int_Set; /**< Alias for _Edje_Message_Int_Set */
+typedef struct _Edje_Message_Float_Set Edje_Message_Float_Set; /**< Alias for _Edje_Message_Float_Set */
+typedef struct _Edje_Message_String_Int Edje_Message_String_Int; /**< Alias for _Edje_Message_String_Int */
+typedef struct _Edje_Message_String_Float Edje_Message_String_Float; /**< Alias for _Edje_Message_String_Float */
+typedef struct _Edje_Message_String_Int_Set Edje_Message_String_Int_Set; /**< Alias for _Edje_Message_String_Int_Set */
+typedef struct _Edje_Message_String_Float_Set Edje_Message_String_Float_Set; /**< Alias for _Edje_Message_String_Float_Set */
struct _Edje_Message_String
{
@@ -657,7 +679,7 @@ EAPI void edje_object_message_signal_recursive_process(Evas_Object *obj);
*/
/**
- * @ingroup Edje_Object
+ * @addgroup Edje_Object_Group
*
* @{
*/
@@ -671,7 +693,7 @@ EAPI void edje_object_message_signal_recursive_process(Evas_Object *obj);
* @return @ref EDJE_EXTERNAL_PARAM_TYPE_MAX on errors, or another value from
* @ref Edje_External_Param_Type on success.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Edje_External_Param_Type edje_object_part_external_param_type_get(const Evas_Object *obj, const char *part, const char * param);
@@ -700,7 +722,7 @@ EAPI Edje_External_Param_Type edje_object_part_external_param_type_get(const Eva
*
* @return @c true if everything went fine, @c false on errors.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_external_param_set(Evas_Object *obj, const char *part, const Edje_External_Param *param);
@@ -726,7 +748,7 @@ EAPI Eina_Bool edje_object_part_external_param_set(Evas_Object *obj, const char
* information, @c false on errors and param member values are not set or
* valid.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_external_param_get(const Evas_Object *obj, const char *part, Edje_External_Param *param);
@@ -749,7 +771,7 @@ EAPI Eina_Bool edje_object_part_external_param_get(const Evas_Object *obj, const
* @return The externally created object, or @c null if there is none or part
* is not an external.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Evas_Object *edje_object_part_external_object_get(const Evas_Object *obj, const char * part);
@@ -765,7 +787,7 @@ EAPI Evas_Object *edje_object_part_external_object_get(const Evas_Object *obj, c
*
* @return Canvas object
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Evas_Object *edje_object_part_external_content_get(const Evas_Object *obj, const char *part, const char *content);
@@ -783,6 +805,8 @@ EAPI Evas_Object *edje_object_part_external_content_get(const Evas_Object *obj,
*
* This sets the minimum size restriction for the object.
*
+ * @ingroup Edje_Object_Group
+ *
*/
EINA_DEPRECATED EAPI void edje_extern_object_min_size_set (Evas_Object *obj, Evas_Coord minw, Evas_Coord minh);
@@ -796,6 +820,8 @@ EINA_DEPRECATED EAPI void edje_extern_object_min_size_set (Evas_Object *
*
* This sets the maximum size restriction for the object.
*
+ * @ingroup Edje_Object_Group
+ *
*/
EINA_DEPRECATED EAPI void edje_extern_object_max_size_set (Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh);
@@ -813,6 +839,8 @@ EINA_DEPRECATED EAPI void edje_extern_object_max_size_set (Evas_Object *
* ASPECT and the object may be scaled to be larger or smaller, but
* retaining the relative scale of both aspect width and height.
*
+ * @ingroup Edje_Object_Group
+ *
*/
EINA_DEPRECATED EAPI void edje_extern_object_aspect_set (Evas_Object *obj, Edje_Aspect_Control aspect, Evas_Coord aw, Evas_Coord ah);
@@ -847,7 +875,7 @@ EINA_DEPRECATED EAPI void edje_extern_object_aspect_set (Evas_Object *
* @param[in] group The name of the group, in @p file, which implements an
Edje object
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI Eina_Bool edje_object_file_set(Evas_Object *obj, const char *file, const char *group);
@@ -869,7 +897,7 @@ EAPI Eina_Bool edje_object_file_set(Evas_Object *obj, const char *file, const ch
* @param[out] group The name of the group, in @p file, which implements an
Edje object
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_file_get(const Evas_Object *obj, const char **file, const char **group);
@@ -905,7 +933,7 @@ EAPI void edje_object_file_get(const Evas_Object *obj, const char **file, const
* @param[in] group The name of the group, in @p file, which implements an
Edje object
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*
*/
EAPI Eina_Bool edje_object_mmap_set(Evas_Object *obj, const Eina_File *file, const char *group);
@@ -941,7 +969,7 @@ EAPI Eina_Bool edje_object_mmap_set(Evas_Object *obj, const Eina_File *file, con
*
* @param[in] obj_swallow The object to occupy that part
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_swallow);
@@ -952,7 +980,7 @@ EAPI Eina_Bool edje_object_part_swallow(Evas_Object *obj, const char *part, Evas
*
* @return The swallowed object, or @c null if there is none.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Evas_Object *edje_object_part_swallow_get(const Evas_Object *obj, const char *part);
@@ -967,7 +995,7 @@ EAPI Evas_Object *edje_object_part_swallow_get(const Evas_Object *obj, const cha
*
* @param[in] obj_swallow The swallowed object
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow);
@@ -978,7 +1006,7 @@ EAPI void edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow)
*
* @since 1.7.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_List *edje_object_access_part_list_get(const Evas_Object *obj);
@@ -996,7 +1024,7 @@ EAPI Eina_List *edje_object_access_part_list_get(const Evas_Object *obj);
*
* @return @c true: Successfully added. @c false: An error occurred.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_box_append(Evas_Object *obj, const char *part, Evas_Object *child);
@@ -1014,7 +1042,7 @@ EAPI Eina_Bool edje_object_part_box_append(Evas_Object *obj, const char *part, E
*
* @return @c true: Successfully added. @c false: An error occurred.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_box_prepend(Evas_Object *obj, const char *part, Evas_Object *child);
@@ -1033,7 +1061,7 @@ EAPI Eina_Bool edje_object_part_box_prepend(Evas_Object *obj, const char *part,
*
* @return @c true: Successfully added. @c false: An error occurred.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_box_insert_before(Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference);
@@ -1072,7 +1100,7 @@ EAPI Eina_Bool edje_object_part_box_insert_after(Evas_Object *obj, const char *p
*
* @return @c true: Successfully added. @c false: An error occurred.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_box_insert_at(Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos);
@@ -1088,7 +1116,7 @@ EAPI Eina_Bool edje_object_part_box_insert_at(Evas_Object *obj, const char *part
*
* @return Pointer to the object removed, or @c null.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Evas_Object *edje_object_part_box_remove_at(Evas_Object *obj, const char *part, unsigned int pos);
@@ -1104,7 +1132,7 @@ EAPI Evas_Object *edje_object_part_box_remove_at(Evas_Object *obj, const char *p
*
* @return Pointer to the object removed, or @c null.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Evas_Object *edje_object_part_box_remove(Evas_Object *obj, const char *part, Evas_Object *child);
@@ -1121,7 +1149,7 @@ EAPI Evas_Object *edje_object_part_box_remove(Evas_Object *obj, const char *part
*
* @return 1: Successfully cleared. 0: An error occurred.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_box_remove_all(Evas_Object *obj, const char *part, Eina_Bool clear);
@@ -1138,7 +1166,7 @@ EAPI Eina_Bool edje_object_part_box_remove_all(Evas_Object *obj, const char *par
*
* @return @c true object was added, @c false on failure
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_table_pack(Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan);
@@ -1151,7 +1179,7 @@ EAPI Eina_Bool edje_object_part_table_pack(Evas_Object *obj, const char *part, E
*
* @return @c true object removed, @c false on failure
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_table_unpack(Evas_Object *obj, const char *part, Evas_Object *child_obj);
@@ -1165,7 +1193,7 @@ EAPI Eina_Bool edje_object_part_table_unpack(Evas_Object *obj, const char *part,
*
* @return @c true get some data, @c false on failure
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_table_col_row_size_get(const Evas_Object *obj, const char *part, int *cols, int *rows);
@@ -1177,7 +1205,7 @@ EAPI Eina_Bool edje_object_part_table_col_row_size_get(const Evas_Object *obj, c
*
* @return The child Efl.Canvas.Object
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Evas_Object *edje_object_part_table_child_get(const Evas_Object *obj, const char *part, unsigned int col, unsigned int row);
@@ -1191,7 +1219,7 @@ EAPI Evas_Object *edje_object_part_table_child_get(const Evas_Object *obj, const
*
* @return @c true clear the table, @c false on failure
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear);
@@ -1225,7 +1253,7 @@ EAPI Eina_Bool edje_object_part_table_clear(Evas_Object *obj, const char *part,
* @param[in] b3 Shadow Blue value
* @param[in] a3 Shadow Alpha value
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Color_Class
*/
EAPI Eina_Bool edje_object_color_class_set(Evas_Object *obj, const char * color_class, int r, int g, int b, int a, int r2, int g2, int b2, int a2, int r3, int g3, int b3, int a3);
@@ -1257,7 +1285,7 @@ EAPI Eina_Bool edje_object_color_class_set(Evas_Object *obj, const char * color_
*
* @return true if found or false if not found and all values are zeroed.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Color_Class
*/
EAPI Eina_Bool edje_object_color_class_get(const Evas_Object *obj, const char * color_class, int *r, int *g, int *b, int *a, int *r2, int *g2, int *b2, int *a2, int *r3, int *g3, int *b3, int *a3);
@@ -1275,7 +1303,7 @@ EAPI Eina_Bool edje_object_color_class_get(const Evas_Object *obj, const char *
*
* @param[in] color_class The color class to be deleted.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Color_Class
*/
EAPI void edje_object_color_class_del(Evas_Object *obj, const char *color_class);
@@ -1290,7 +1318,7 @@ EAPI void edje_object_color_class_del(Evas_Object *obj, const char *color_class)
*
* @since 1.17.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Color_Class
*/
EAPI Eina_Bool edje_object_color_class_clear(const Evas_Object *obj);
@@ -1305,7 +1333,7 @@ EAPI Eina_Bool edje_object_color_class_clear(const Evas_Object *obj);
*
* @return @c true, on success or @c false, on error
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Text_Class
*/
EAPI Eina_Bool edje_object_text_class_set(Evas_Object *obj, const char * text_class, const char *font, Evas_Font_Size size);
@@ -1322,7 +1350,7 @@ EAPI Eina_Bool edje_object_text_class_set(Evas_Object *obj, const char * text_cl
*
* @return @c true, on success or @c false, on error
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Text_Class
*/
EAPI Eina_Bool edje_object_text_class_get(const Evas_Object *obj, const char * text_class, const char **font, Evas_Font_Size *size);
@@ -1339,7 +1367,7 @@ EAPI Eina_Bool edje_object_text_class_get(const Evas_Object *obj, const char * t
*
* @since 1.17
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Text_Class
*/
EAPI void edje_object_text_class_del(Evas_Object *obj, const char *text_class);
@@ -1360,7 +1388,7 @@ EAPI void edje_object_text_class_del(Evas_Object *obj, const char *text_class);
*
* @since 1.17
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Size_Class
*/
EAPI Eina_Bool edje_object_size_class_set(Evas_Object *obj, const char * size_class, int minw, int minh, int maxw, int maxh);
@@ -1381,7 +1409,7 @@ EAPI Eina_Bool edje_object_size_class_set(Evas_Object *obj, const char * size_cl
*
* @since 1.17
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Size_Class
*/
EAPI Eina_Bool edje_object_size_class_get(const Evas_Object *obj, const char * size_class, int *minw, int *minh, int *maxw, int *maxh);
@@ -1398,7 +1426,7 @@ EAPI Eina_Bool edje_object_size_class_get(const Evas_Object *obj, const char * s
*
* @since 1.17
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Size_Class
*/
EAPI void edje_object_size_class_del(Evas_Object *obj, const char *size_class);
@@ -1412,7 +1440,7 @@ EAPI void edje_object_size_class_del(Evas_Object *obj, const char *size_class);
* @param[in] part The part name
* @param[in] allow true to enable, false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_select_allow_set(const Evas_Object *obj, const char *part, Eina_Bool allow);
@@ -1423,7 +1451,7 @@ EAPI void edje_object_part_text_select_allow_set(const Evas_Object *obj, const c
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_mirrored_set(Evas_Object *obj, Eina_Bool rtl);
@@ -1436,7 +1464,7 @@ EAPI void edje_object_mirrored_set(Evas_Object *obj, Eina_Bool rtl);
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI Eina_Bool edje_object_mirrored_get(const Evas_Object *obj);
@@ -1447,7 +1475,7 @@ EAPI Eina_Bool edje_object_mirrored_get(const Evas_Object *obj);
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_language_set(Evas_Object *obj, const char *language);
@@ -1458,7 +1486,7 @@ EAPI void edje_object_language_set(Evas_Object *obj, const char *language);
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI const char *edje_object_language_get(const Evas_Object *obj);
@@ -1482,7 +1510,7 @@ EAPI const char *edje_object_language_get(const Evas_Object *obj);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Scale
*/
EAPI Eina_Bool edje_object_scale_set(Evas_Object *obj, double scale);
@@ -1497,7 +1525,7 @@ EAPI Eina_Bool edje_object_scale_set(Evas_Object *obj, double scale);
* @return The scaling factor (the default value is @0.0, meaning individual
* scaling not set)
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Scale
*/
EAPI double edje_object_scale_get(const Evas_Object *obj);
@@ -1511,7 +1539,7 @@ EAPI double edje_object_scale_get(const Evas_Object *obj);
* @return The base_scale factor (the default value is @ 1.0, that means the
* edc file is made based on scale 1.0.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Scale
*/
EAPI double edje_object_base_scale_get(const Evas_Object *obj);
@@ -1533,12 +1561,13 @@ EAPI double edje_object_base_scale_get(const Evas_Object *obj);
* @{
*/
+/** Directions in which a part can be dragged .*/
typedef enum _Edje_Drag_Dir
{
- EDJE_DRAG_DIR_NONE = 0,
- EDJE_DRAG_DIR_X = 1,
- EDJE_DRAG_DIR_Y = 2,
- EDJE_DRAG_DIR_XY = 3
+ EDJE_DRAG_DIR_NONE = 0, /**< Part cannot be dragged. */
+ EDJE_DRAG_DIR_X = 1, /**< Part can be dragged in the horizontal direction. */
+ EDJE_DRAG_DIR_Y = 2, /**< Part can be dragged in the vertical direction. */
+ EDJE_DRAG_DIR_XY = 3 /**< Part can be dragged in every direction. */
} Edje_Drag_Dir;
/**
@@ -1628,8 +1657,8 @@ EAPI Eina_Bool edje_object_part_drag_size_get(const Evas_Object *obj, const char
/**
* @brief Determines dragable directions.
*
- * The dragable directions are defined in the EDC file, inside the @ref
- * dragable section, by the attributes @c x and @c y. See the @ref edcref for
+ * The dragable directions are defined in the EDC file, inside the
+ * "dragable" section, by the attributes @c x and @c y. See the @ref edcref for
* more information.
*
* @param[in] part The part name
@@ -1771,7 +1800,7 @@ EAPI Eina_Bool edje_object_part_drag_page(Evas_Object *obj, const char *part, do
* @param[in] part The part name
* @param[in] text The text to set on that part
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_set(const Evas_Object *obj, const char *part, const char *text);
@@ -1782,7 +1811,7 @@ EAPI Eina_Bool edje_object_part_text_set(const Evas_Object *obj, const char *par
*
* @return The text set on the part, @c null otherwise.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI const char * edje_object_part_text_get(const Evas_Object *obj, const char *part);
@@ -1793,7 +1822,7 @@ EAPI const char * edje_object_part_text_get(const Evas_Object *obj, const char *
* @param[in] part The part name
* @param[in] cur The edje cursor to work on
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_cursor_begin_set(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1804,7 +1833,7 @@ EAPI void edje_object_part_text_cursor_begin_set(Evas_Object *obj, const char *p
* @param[in] part The part name
* @param[in] cur The edje cursor to work on
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_cursor_end_set(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1817,7 +1846,7 @@ EAPI void edje_object_part_text_cursor_end_set(Evas_Object *obj, const char *par
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_cursor_pos_set(Evas_Object *obj, const char * part, Edje_Cursor cur, int pos);
@@ -1831,7 +1860,7 @@ EAPI void edje_object_part_text_cursor_pos_set(Evas_Object *obj, const char * pa
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI int edje_object_part_text_cursor_pos_get(const Evas_Object *obj, const char * part, Edje_Cursor cur);
@@ -1847,7 +1876,7 @@ EAPI int edje_object_part_text_cursor_pos_get(const Evas_Object *obj, const char
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_cursor_coord_set(Evas_Object *obj, const char *part, Edje_Cursor cur, int x, int y);
@@ -1858,7 +1887,7 @@ EAPI Eina_Bool edje_object_part_text_cursor_coord_set(Evas_Object *obj, const ch
* @param[in] part The part name
* @param[in] cur The edje cursor to work on
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_cursor_line_begin_set(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1869,7 +1898,7 @@ EAPI void edje_object_part_text_cursor_line_begin_set(Evas_Object *obj, const ch
* @param[in] part The part name
* @param[in] cur The edje cursor to work on
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_cursor_line_end_set(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1882,7 +1911,7 @@ EAPI void edje_object_part_text_cursor_line_end_set(Evas_Object *obj, const char
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_cursor_prev(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1895,7 +1924,7 @@ EAPI Eina_Bool edje_object_part_text_cursor_prev(Evas_Object *obj, const char *p
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_cursor_next(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1907,7 +1936,7 @@ EAPI Eina_Bool edje_object_part_text_cursor_next(Evas_Object *obj, const char *p
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_cursor_up(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1919,7 +1948,7 @@ EAPI Eina_Bool edje_object_part_text_cursor_up(Evas_Object *obj, const char *par
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_cursor_down(Evas_Object *obj, const char *part, Edje_Cursor cur);
@@ -1930,7 +1959,7 @@ EAPI Eina_Bool edje_object_part_text_cursor_down(Evas_Object *obj, const char *p
* @param[in] src The cursor to copy from
* @param[in] dst The cursor to copy to
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_cursor_copy(Evas_Object *obj, const char *part, Edje_Cursor src, Edje_Cursor dst);
@@ -1946,7 +1975,7 @@ EAPI void edje_object_part_text_cursor_copy(Evas_Object *obj, const char *part,
* @return The character string pointed to (may be a multi-byte utf8 sequence)
* terminated by a null byte.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI char *edje_object_part_text_cursor_content_get(const Evas_Object *obj, const char * part, Edje_Cursor cur);
@@ -1959,7 +1988,7 @@ EAPI char *edje_object_part_text_cursor_content_get(const Evas_Object *obj, cons
* @param[out] w Cursor width
* @param[out] h Cursor height
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_cursor_geometry_get(const Evas_Object *obj, const char * part, int *x, int *y, int *w, int *h);
@@ -1973,7 +2002,7 @@ EAPI void edje_object_part_text_cursor_geometry_get(const Evas_Object *obj, cons
*
* @since 1.18.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_hide_visible_password(Evas_Object *obj, const char *part);
@@ -1986,7 +2015,7 @@ EAPI Eina_Bool edje_object_part_text_hide_visible_password(Evas_Object *obj, con
*
* @return @c true if the cursor points to a format, @c false otherwise.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_cursor_is_format_get(const Evas_Object *obj, const char * part, Edje_Cursor cur);
@@ -2000,7 +2029,7 @@ EAPI Eina_Bool edje_object_part_text_cursor_is_format_get(const Evas_Object *obj
* @return @c true if the cursor points to a visible format, @c false
* otherwise.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_cursor_is_visible_format_get(const Evas_Object *obj, const char * part, Edje_Cursor cur);
@@ -2015,7 +2044,7 @@ EAPI Eina_Bool edje_object_part_text_cursor_is_visible_format_get(const Evas_Obj
* @return The list of anchor rects (const Evas_Textblock_Rectangle *), do not
* modify! Geometry is relative to entry part.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI const Eina_List *edje_object_part_text_anchor_geometry_get(const Evas_Object *obj, const char * part, const char * anchor);
@@ -2028,7 +2057,7 @@ EAPI const Eina_List *edje_object_part_text_anchor_geometry_get(const Evas_Objec
*
* @return The list of anchors (const char *), do not modify!
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI const Eina_List *edje_object_part_text_anchor_list_get(const Evas_Object *obj, const char * part);
@@ -2043,7 +2072,7 @@ EAPI const Eina_List *edje_object_part_text_anchor_list_get(const Evas_Object *o
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI const char *edje_object_part_text_style_user_peek(const Evas_Object *obj, const char *part);
@@ -2057,7 +2086,7 @@ EAPI const char *edje_object_part_text_style_user_peek(const Evas_Object *obj, c
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_style_user_push(Evas_Object *obj, const char *part, const char *style);
@@ -2068,7 +2097,7 @@ EAPI void edje_object_part_text_style_user_push(Evas_Object *obj, const char *pa
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_style_user_pop(Evas_Object *obj, const char *part);
@@ -2086,7 +2115,7 @@ EAPI void edje_object_part_text_style_user_pop(Evas_Object *obj, const char *par
*
* @return $1 if item exists, $0 if not
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_item_geometry_get(const Evas_Object *obj, const char * part, const char * item, int *cx, int *cy, int *cw, int *ch);
@@ -2099,7 +2128,7 @@ EAPI Eina_Bool edje_object_part_text_item_geometry_get(const Evas_Object *obj, c
*
* @return The list of items (const char *), do not modify!
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI const Eina_List *edje_object_part_text_item_list_get(const Evas_Object *obj, const char * part);
@@ -2134,7 +2163,7 @@ EAPI const Eina_List *edje_object_part_text_item_list_get(const Evas_Object *obj
* @param[in] func The callback function that will act as filter
* @param[in] data User provided data to pass to the filter function
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_text_insert_filter_callback_add(Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data);
@@ -2152,7 +2181,7 @@ EAPI void edje_object_text_insert_filter_callback_add(Evas_Object *obj, const ch
*
* @return The user data pointer if successful, or @c null otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void *edje_object_text_insert_filter_callback_del(Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func);
@@ -2171,7 +2200,7 @@ EAPI void *edje_object_text_insert_filter_callback_del(Evas_Object *obj, const c
*
* @return The same data pointer if successful, or @c null otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void *edje_object_text_insert_filter_callback_del_full(Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data);
@@ -2204,7 +2233,7 @@ EAPI void *edje_object_text_insert_filter_callback_del_full(Evas_Object *obj, co
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_text_markup_filter_callback_add(Evas_Object *obj, const char *part, Edje_Markup_Filter_Cb func, void *data);
@@ -2224,7 +2253,7 @@ EAPI void edje_object_text_markup_filter_callback_add(Evas_Object *obj, const ch
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void *edje_object_text_markup_filter_callback_del(Evas_Object *obj, const char *part, Edje_Markup_Filter_Cb func);
@@ -2246,7 +2275,7 @@ EAPI void *edje_object_text_markup_filter_callback_del(Evas_Object *obj, const c
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void *edje_object_text_markup_filter_callback_del_full(Evas_Object *obj, const char *part, Edje_Markup_Filter_Cb func, void *data);
@@ -2261,7 +2290,7 @@ EAPI void *edje_object_text_markup_filter_callback_del_full(Evas_Object *obj, co
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_user_insert(const Evas_Object *obj, const char *part, const char *text);
@@ -2276,7 +2305,7 @@ EAPI void edje_object_part_text_user_insert(const Evas_Object *obj, const char *
*
* @since 1.1
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_append(Evas_Object *obj, const char *part, const char *text);
@@ -2294,7 +2323,7 @@ EAPI void edje_object_part_text_append(Evas_Object *obj, const char *part, const
*
* @since 1.2
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_escaped_set(Evas_Object *obj, const char *part, const char *text);
@@ -2312,7 +2341,7 @@ EAPI Eina_Bool edje_object_part_text_escaped_set(Evas_Object *obj, const char *p
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_unescaped_set(Evas_Object *obj, const char * part, const char *text_to_escape);
@@ -2329,7 +2358,7 @@ EAPI Eina_Bool edje_object_part_text_unescaped_set(Evas_Object *obj, const char
*
* @return The text string
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI char *edje_object_part_text_unescaped_get(const Evas_Object *obj, const char * part);
@@ -2342,7 +2371,7 @@ EAPI char *edje_object_part_text_unescaped_get(const Evas_Object *obj, const cha
* @param[in] part The part name
* @param[in] text The text string
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_insert(Evas_Object *obj, const char *part, const char *text);
@@ -2354,7 +2383,7 @@ EAPI void edje_object_part_text_insert(Evas_Object *obj, const char *part, const
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_autocapital_type_set(Evas_Object *obj, const char *part, Edje_Text_Autocapital_Type autocapital_type);
@@ -2367,7 +2396,7 @@ EAPI void edje_object_part_text_autocapital_type_set(Evas_Object *obj, const cha
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Edje_Text_Autocapital_Type edje_object_part_text_autocapital_type_get(const Evas_Object *obj, const char *part);
@@ -2379,7 +2408,7 @@ EAPI Edje_Text_Autocapital_Type edje_object_part_text_autocapital_type_get(const
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_prediction_allow_set(Evas_Object *obj, const char *part, Eina_Bool prediction);
@@ -2392,7 +2421,7 @@ EAPI void edje_object_part_text_prediction_allow_set(Evas_Object *obj, const cha
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_prediction_allow_get(const Evas_Object *obj, const char *part);
@@ -2408,7 +2437,7 @@ EAPI Eina_Bool edje_object_part_text_prediction_allow_get(const Evas_Object *obj
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void *edje_object_part_text_imf_context_get(const Evas_Object *obj, const char *part);
@@ -2422,7 +2451,7 @@ EAPI void *edje_object_part_text_imf_context_get(const Evas_Object *obj, const c
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_imf_context_reset(const Evas_Object *obj, const char *part);
@@ -2435,7 +2464,7 @@ EAPI void edje_object_part_text_imf_context_reset(const Evas_Object *obj, const
*
* @since 1.12.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_hint_set(Evas_Object *obj, const char *part, Edje_Input_Hints input_hints);
@@ -2448,7 +2477,7 @@ EAPI void edje_object_part_text_input_hint_set(Evas_Object *obj, const char *par
*
* @since 1.12.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Edje_Input_Hints edje_object_part_text_input_hint_get(const Evas_Object *obj, const char *part);
@@ -2464,7 +2493,7 @@ EAPI Edje_Input_Hints edje_object_part_text_input_hint_get(const Evas_Object *ob
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_show(const Evas_Object *obj, const char *part);
@@ -2480,7 +2509,7 @@ EAPI void edje_object_part_text_input_panel_show(const Evas_Object *obj, const c
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_hide(const Evas_Object *obj, const char *part);
@@ -2497,7 +2526,7 @@ EAPI void edje_object_part_text_input_panel_hide(const Evas_Object *obj, const c
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_imdata_set(Evas_Object *obj, const char *part, const void *data, int len);
@@ -2512,7 +2541,7 @@ EAPI void edje_object_part_text_input_panel_imdata_set(Evas_Object *obj, const c
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_imdata_get(const Evas_Object *obj, const char *part, void *data, int *len);
@@ -2529,7 +2558,7 @@ EAPI void edje_object_part_text_input_panel_imdata_get(const Evas_Object *obj, c
*
* @since 1.1
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_layout_set(Evas_Object *obj, const char *part, Edje_Input_Panel_Layout layout);
@@ -2544,7 +2573,7 @@ EAPI void edje_object_part_text_input_panel_layout_set(Evas_Object *obj, const c
*
* @since 1.1
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Edje_Input_Panel_Layout edje_object_part_text_input_panel_layout_get(const Evas_Object *obj, const char *part);
@@ -2558,7 +2587,7 @@ EAPI Edje_Input_Panel_Layout edje_object_part_text_input_panel_layout_get(const
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_language_set(Evas_Object *obj, const char *part, Edje_Input_Panel_Lang lang);
@@ -2574,7 +2603,7 @@ EAPI void edje_object_part_text_input_panel_language_set(Evas_Object *obj, const
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Edje_Input_Panel_Lang edje_object_part_text_input_panel_language_get(const Evas_Object *obj, const char *part);
@@ -2591,7 +2620,7 @@ EAPI Edje_Input_Panel_Lang edje_object_part_text_input_panel_language_get(const
*
* @since 1.8
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_layout_variation_set(Evas_Object *obj, const char *part, int variation);
@@ -2606,7 +2635,7 @@ EAPI void edje_object_part_text_input_panel_layout_variation_set(Evas_Object *ob
*
* @since 1.8
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI int edje_object_part_text_input_panel_layout_variation_get(const Evas_Object *obj, const char *part);
@@ -2619,7 +2648,7 @@ EAPI int edje_object_part_text_input_panel_layout_variation_get(const Evas_Objec
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_enabled_set(Evas_Object *obj, const char *part, Eina_Bool enabled);
@@ -2634,7 +2663,7 @@ EAPI void edje_object_part_text_input_panel_enabled_set(Evas_Object *obj, const
*
* @since 1.1.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_input_panel_enabled_get(const Evas_Object *obj, const char *part);
@@ -2646,7 +2675,7 @@ EAPI Eina_Bool edje_object_part_text_input_panel_enabled_get(const Evas_Object *
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_return_key_disabled_set(Evas_Object *obj, const char *part, Eina_Bool disabled);
@@ -2660,7 +2689,7 @@ EAPI void edje_object_part_text_input_panel_return_key_disabled_set(Evas_Object
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_input_panel_return_key_disabled_get(const Evas_Object *obj, const char *part);
@@ -2675,7 +2704,7 @@ EAPI Eina_Bool edje_object_part_text_input_panel_return_key_disabled_get(const E
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_return_key_type_set(Evas_Object *obj, const char *part, Edje_Input_Panel_Return_Key_Type return_key_type);
@@ -2691,12 +2720,12 @@ EAPI void edje_object_part_text_input_panel_return_key_type_set(Evas_Object *obj
*
* @since 1.2.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Edje_Input_Panel_Return_Key_Type edje_object_part_text_input_panel_return_key_type_get(const Evas_Object *obj, const char *part);
/**
- * @brief Sets the attribute to show the input panel in case of only an user's
+ * @brief Sets the attribute to show the input panel in case of only a user's
* explicit Mouse Up event. It doesn't request to show the input panel even
* though it has focus.
*
@@ -2706,12 +2735,12 @@ EAPI Edje_Input_Panel_Return_Key_Type edje_object_part_text_input_panel_return_k
*
* @since 1.9.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_input_panel_show_on_demand_set(Evas_Object *obj, const char *part, Eina_Bool ondemand);
/**
- * @brief Gets the attribute to show the input panel in case of only an user's
+ * @brief Gets the attribute to show the input panel in case of only a user's
* explicit Mouse Up event.
*
* @param[in] part The part name
@@ -2721,7 +2750,7 @@ EAPI void edje_object_part_text_input_panel_show_on_demand_set(Evas_Object *obj,
*
* @since 1.9.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_input_panel_show_on_demand_get(const Evas_Object *obj, const char *part);
@@ -2734,7 +2763,7 @@ EAPI Eina_Bool edje_object_part_text_input_panel_show_on_demand_get(const Evas_O
*
* @since 1.20.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_prediction_hint_set(Evas_Object *obj, const char *part, const char *prediction_hint);
@@ -2749,7 +2778,7 @@ EAPI void edje_object_part_text_prediction_hint_set(Evas_Object *obj, const char
*
* @since 1.21.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_prediction_hint_hash_set(Evas_Object *obj, const char *part, const char *key, const char *value);
@@ -2763,7 +2792,7 @@ EAPI Eina_Bool edje_object_part_text_prediction_hint_hash_set(Evas_Object *obj,
*
* @since 1.21.0
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_text_prediction_hint_hash_del(Evas_Object *obj, const char *part, const char *key);
@@ -2772,7 +2801,7 @@ EAPI Eina_Bool edje_object_part_text_prediction_hint_hash_del(Evas_Object *obj,
*
* @param[in] part The part name
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_select_begin(const Evas_Object *obj, const char *part);
@@ -2781,7 +2810,7 @@ EAPI void edje_object_part_text_select_begin(const Evas_Object *obj, const char
*
* @param[in] part The part name
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_select_abort(const Evas_Object *obj, const char *part);
@@ -2790,7 +2819,7 @@ EAPI void edje_object_part_text_select_abort(const Evas_Object *obj, const char
*
* @param[in] part The part name
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_select_extend(const Evas_Object *obj, const char *part);
@@ -2801,7 +2830,7 @@ EAPI void edje_object_part_text_select_extend(const Evas_Object *obj, const char
*
* @param[in] part The part name
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_select_all(const Evas_Object *obj, const char *part);
@@ -2812,7 +2841,7 @@ EAPI void edje_object_part_text_select_all(const Evas_Object *obj, const char *p
*
* @param[in] part The part name
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI void edje_object_part_text_select_none(const Evas_Object *obj, const char *part);
@@ -2828,7 +2857,7 @@ EAPI void edje_object_part_text_select_none(const Evas_Object *obj, const char *
*
* @return The text string
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI const char *edje_object_part_text_selection_get(const Evas_Object *obj, const char *part);
@@ -2850,7 +2879,7 @@ EAPI const char *edje_object_part_text_selection_get(const Evas_Object *obj, con
*
* @param[in] play The play state, @c true by default.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_play_set(Evas_Object *obj, Eina_Bool play);
@@ -2872,7 +2901,7 @@ EAPI void edje_object_play_set(Evas_Object *obj, Eina_Bool play);
*
* @return The play state, @c true by default.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI Eina_Bool edje_object_play_get(const Evas_Object *obj);
@@ -2887,7 +2916,7 @@ EAPI Eina_Bool edje_object_play_get(const Evas_Object *obj);
*
* @param[in] scale The transition duration factor.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_transition_duration_factor_set(Evas_Object *obj, double scale);
@@ -2902,7 +2931,7 @@ EAPI void edje_object_transition_duration_factor_set(Evas_Object *obj, double sc
*
* @return The transition duration factor.
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI double edje_object_transition_duration_factor_get(const Evas_Object *obj);
@@ -2924,7 +2953,7 @@ EAPI double edje_object_transition_duration_factor_get(const Evas_Object *obj);
* @param[out] minw Pointer to a variable where to store the minimum width
* @param[out] minh Pointer to a variable where to store the minimum height
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_size_min_get(const Evas_Object *obj, int *minw, int *minh);
@@ -2946,7 +2975,7 @@ EAPI void edje_object_size_min_get(const Evas_Object *obj, int *minw, int *minh)
* @param[out] maxw The maximum width
* @param[out] maxh The maximum height
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_size_max_get(const Evas_Object *obj, int *maxw, int *maxh);
@@ -2964,12 +2993,10 @@ EAPI void edje_object_size_max_get(const Evas_Object *obj, int *maxw, int *maxh)
* @return @c true if the Edje part exists in obj's group, or @c false
* otherwise (and on errors)
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Part
*/
EAPI Eina_Bool edje_object_part_exists(const Evas_Object *obj, const char *part);
-
-
/**
* @brief Sets the function that provides item objects for named items in an
* edje entry text
@@ -2982,7 +3009,7 @@ EAPI Eina_Bool edje_object_part_exists(const Evas_Object *obj, const char *part)
* objects
* @param[in] data The data pointer to pass to the func callback
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Group
*/
EAPI void edje_object_item_provider_set(Edje_Object *obj, Edje_Item_Provider_Cb func, void *data);
@@ -2996,7 +3023,7 @@ EAPI void edje_object_item_provider_set(Edje_Object *obj, Edje_Item_Provider_Cb
*
* @return The description of the target color class or @c null if not found
*
- * @ingroup Edje_Object
+ * @ingroup Edje_Object_Color_Class
*/
EAPI const char *edje_object_color_class_description_get(const Edje_Object *obj, const char * color_class);
@@ -3006,15 +3033,6 @@ EAPI const char *edje_object_color_class_description_get(const Edje_Object *obj,
*
* @brief Functions that deal with 3D projection of an 2D object.
*
- * Perspective is a graphical tool that makes objects represented in 2D
- * look like they have a 3D appearance.
- *
- * Edje allows us to use perspective on any edje object. This group of
- * functions deal with the use of perspective, by creating and configuring
- * a perspective object that must set to a edje object or a canvas,
- * affecting all the objects inside that have no particular perspective
- * set already.
- *
* @{
*/
@@ -3151,6 +3169,54 @@ EAPI const Edje_Perspective *edje_object_perspective_get(const Evas_Object *obj)
*/
/**
+ * @brief Sets Edje text class for edje file (if loaded)
+ *
+ * This function sets the text class for All Edje Objects created from Edje file.
+ * (if edje file loaded before)
+ *
+ * @param[in] file edje file path
+ * @param[in] text_class The text class name
+ * @param[in] font Font name
+ * @param[in] size Font Size
+ *
+ * @return @c true, on success or @c false, on error
+ *
+ * @ingroup Edje_Object_Text_Class
+ *
+ */
+EAPI Eina_Bool edje_file_text_class_set(const char *file, const char *text_class, const char *font, Evas_Font_Size size);
+
+/**
+ * @brief Delete the file text class.
+ *
+ * This function deletes any values at the file level for the specified
+ * file and text class.
+ *
+ * @param[in] text_class The text class to be deleted.
+ *
+ * @ingroup Edje_Object_Text_Class
+ *
+ */
+EAPI Eina_Bool edje_file_text_class_del(const char *file, const char *text_class);
+
+/**
+ * @brief Gets font and font size from edje file if loaded.
+ *
+ * This function gets the font and the font size from the file text class.
+ *
+ * @param[in] text_class The text class name
+ * @param[out] font Font name
+ * @param[out] size Font Size
+ *
+ * @return @c true, on success or @c false, on error
+ *
+ * @ingroup Edje_Object_Text_Class
+ *
+ */
+EAPI Eina_Bool edje_file_text_class_get(const char *file, const char * text_class, const char **font, Evas_Font_Size *size);
+
+
+/**
* @defgroup Edje_Object_Part Edje Part
*
* @brief Functions that deal with layout components
diff --git a/src/lib/edje/Efl_Layout.h b/src/lib/edje/Efl_Layout.h
index 8387984485..3fed1f381f 100644
--- a/src/lib/edje/Efl_Layout.h
+++ b/src/lib/edje/Efl_Layout.h
@@ -48,6 +48,7 @@ extern "C" {
#include <efl_canvas_layout_types.eot.h>
+#include <efl_canvas_layout_part_type_provider.eo.h>
#include <efl_canvas_layout_part.eo.h>
#include <efl_canvas_layout_part_box.eo.h>
#include <efl_canvas_layout_part_table.eo.h>
diff --git a/src/lib/edje/edje_box_layout.c b/src/lib/edje/edje_box_layout.c
index a3458cf281..51a91701b3 100644
--- a/src/lib/edje/edje_box_layout.c
+++ b/src/lib/edje/edje_box_layout.c
@@ -108,7 +108,7 @@ _edje_box_layout(Evas_Object *obj, Evas_Object_Box_Data *priv, void *data)
{
Edje_Part_Box_Animation *anim = data;
- if (anim->progress == 0.0)
+ if (EINA_DBL_EQ(anim->progress, 0.0))
{
if (anim->start.layout)
{
@@ -195,7 +195,7 @@ _edje_box_recalc_apply(Edje *ed EINA_UNUSED, Edje_Real_Part *ep, Edje_Calc_Param
ep->typedata.container->anim->end.layout = NULL;
}
- if (ep->description_pos == 0.0 || !ep->typedata.container->anim->start.layout)
+ if (EINA_DBL_EQ(ep->description_pos, 0.0) || !ep->typedata.container->anim->start.layout)
{
_edje_box_layout_find_all(chosen_desc->box.layout, chosen_desc->box.alt_layout, &ep->typedata.container->anim->start.layout, &ep->typedata.container->anim->start.data, &ep->typedata.container->anim->start.free_data);
ep->typedata.container->anim->start.padding.x = chosen_desc->box.padding.x;
diff --git a/src/lib/edje/edje_cache.c b/src/lib/edje/edje_cache.c
index 64eb6ad5ec..8afe284e7a 100644
--- a/src/lib/edje/edje_cache.c
+++ b/src/lib/edje/edje_cache.c
@@ -40,9 +40,6 @@ edje_cache_emp_alloc(Edje_Part_Collection_Directory_Entry *ce)
INIT_EMP_BOTH(EXTERNAL, Edje_Part_Description_External, ce);
INIT_EMP_BOTH(SPACER, Edje_Part_Description_Common, ce);
INIT_EMP_BOTH(SNAPSHOT, Edje_Part_Description_Snapshot, ce);
- INIT_EMP_BOTH(MESH_NODE, Edje_Part_Description_Mesh_Node, ce);
- INIT_EMP_BOTH(LIGHT, Edje_Part_Description_Light, ce);
- INIT_EMP_BOTH(CAMERA, Edje_Part_Description_Camera, ce);
INIT_EMP_BOTH(VECTOR, Edje_Part_Description_Vector, ce);
INIT_EMP(part, Edje_Part, ce);
}
@@ -66,9 +63,6 @@ edje_cache_emp_free(Edje_Part_Collection_Directory_Entry *ce)
eina_mempool_del(ce->mp->mp.EXTERNAL);
eina_mempool_del(ce->mp->mp.SPACER);
eina_mempool_del(ce->mp->mp.SNAPSHOT);
- eina_mempool_del(ce->mp->mp.MESH_NODE);
- eina_mempool_del(ce->mp->mp.LIGHT);
- eina_mempool_del(ce->mp->mp.CAMERA);
eina_mempool_del(ce->mp->mp.VECTOR);
eina_mempool_del(ce->mp->mp.part);
memset(&ce->mp->mp, 0, sizeof(ce->mp->mp));
@@ -85,9 +79,6 @@ edje_cache_emp_free(Edje_Part_Collection_Directory_Entry *ce)
eina_mempool_del(ce->mp->mp_rtl.EXTERNAL);
eina_mempool_del(ce->mp->mp_rtl.SPACER);
eina_mempool_del(ce->mp->mp_rtl.SNAPSHOT);
- eina_mempool_del(ce->mp->mp_rtl.MESH_NODE);
- eina_mempool_del(ce->mp->mp_rtl.LIGHT);
- eina_mempool_del(ce->mp->mp_rtl.CAMERA);
eina_mempool_del(ce->mp->mp_rtl.VECTOR);
memset(&ce->mp->mp_rtl, 0, sizeof(ce->mp->mp_rtl));
@@ -600,8 +591,13 @@ _edje_file_open(const Eina_File *f, int *error_ret, time_t mtime, Eina_Bool coll
edf->text_hash = eina_hash_string_small_new(NULL);
EINA_LIST_FOREACH(edf->text_classes, l, tc)
- if (tc->name)
- eina_hash_direct_add(edf->text_hash, tc->name, tc);
+ {
+ if (tc->name)
+ eina_hash_direct_add(edf->text_hash, tc->name, tc);
+
+ if (tc->font)
+ tc->font = eina_stringshare_add(tc->font);
+ }
edf->size_hash = eina_hash_string_small_new(NULL);
EINA_LIST_FOREACH(edf->size_classes, l, sc)
@@ -713,7 +709,7 @@ _edje_file_cache_trash_pop(const Eina_File *file)
return NULL;
}
-static inline Edje_File*
+Edje_File*
_edje_file_cache_find(const Eina_File *file)
{
Edje_File *edf;
diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 336bbc00cc..221e7b645d 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -45,55 +45,6 @@ static void _edje_part_recalc_single(Edje *ed, Edje_Rea
#endif
-
-#define SET_QUATERNION(type) \
- double norm; \
- Eina_Quaternion quaternion; \
- \
- eina_quaternion_set(&quaternion, pd_##type->type.orientation.data[0], \
- pd_##type->type.orientation.data[1], \
- pd_##type->type.orientation.data[2], \
- pd_##type->type.orientation.data[3]); \
- \
- norm = eina_quaternion_norm(&quaternion); \
- \
- if ((norm - 0.0) <= TYPE_EPSILON) \
- ERR("%s %s", \
- "{0, 0, 0, 0} quaternion gives rotation on non-zero angle", \
- "around axis without orientation"); \
- \
- eina_quaternion_scale(&quaternion, &quaternion, 1/norm); \
- \
- evas_canvas3d_node_orientation_set(ep->node, quaternion.x, quaternion.y, \
- quaternion.z, quaternion.w);
-
-#define SET_LOOK_AT(type) \
- evas_canvas3d_node_look_at_set(ep->node, pd_##type->type.position.space, \
- pd_##type->type.orientation.data[0], \
- pd_##type->type.orientation.data[1], \
- pd_##type->type.orientation.data[2], \
- pd_##type->type.position.space, \
- pd_##type->type.orientation.data[3], \
- pd_##type->type.orientation.data[4], \
- pd_##type->type.orientation.data[5]);
-
-#define SET_LOOK_TO(type) \
- Edje_Real_Part *look_to; \
- Evas_Real x, y ,z; \
- look_to = ed->table_parts[pd_##type->type.orientation.look_to % ed->table_parts_size]; \
- evas_canvas3d_node_position_get(look_to->node, pd_##type->type.position.space, &x, &y, &z); \
- evas_canvas3d_node_look_at_set(ep->node, pd_##type->type.position.space, x, y, z, \
- pd_##type->type.position.space, \
- pd_##type->type.orientation.data[3], \
- pd_##type->type.orientation.data[4], \
- pd_##type->type.orientation.data[5]);
-
-#define SET_ANGLE_AXIS(type) \
- evas_canvas3d_node_orientation_angle_axis_set(ep->node, pd_##type->type.orientation.data[0], \
- pd_##type->type.orientation.data[1], \
- pd_##type->type.orientation.data[2], \
- pd_##type->type.orientation.data[3]);
-
void
_edje_calc_params_clear(Edje_Calc_Params *p)
{
@@ -357,9 +308,6 @@ case EDJE_PART_TYPE_##Short: \
POPULATE_MEMSIZE_RTL(BOX, Box);
POPULATE_MEMSIZE_RTL(TABLE, Table);
POPULATE_MEMSIZE_RTL(EXTERNAL, External);
- POPULATE_MEMSIZE_RTL(CAMERA, Camera);
- POPULATE_MEMSIZE_RTL(LIGHT, Light);
- POPULATE_MEMSIZE_RTL(MESH_NODE, Mesh_Node);
POPULATE_MEMSIZE_RTL(VECTOR, Vector);
}
#undef POPULATE_MEMSIZE_RTL
@@ -460,9 +408,6 @@ case EDJE_PART_TYPE_##Short: \
EDIT_ALLOC_POOL_RTL(BOX, Box, box);
EDIT_ALLOC_POOL_RTL(TABLE, Table, table);
EDIT_ALLOC_POOL_RTL(EXTERNAL, External, external_params);
- EDIT_ALLOC_POOL_RTL(CAMERA, Camera, camera);
- EDIT_ALLOC_POOL_RTL(LIGHT, Light, light);
- EDIT_ALLOC_POOL_RTL(MESH_NODE, Mesh_Node, mesh_node);
EDIT_ALLOC_POOL_RTL(VECTOR, Vector, vector);
}
@@ -546,13 +491,32 @@ _edje_part_description_find(Edje *ed, Edje_Real_Part *rp, const char *state_name
}
static int
+_edje_image_set_fill(Edje_Real_Part_Set **eps,
+ Edje_Image_Directory_Set_Entry *entry,
+ Edje_Image_Directory_Set *set,
+ int id)
+{
+ if (eps)
+ {
+ if (!*eps) *eps = calloc(1, sizeof(Edje_Real_Part_Set));
+ if (*eps)
+ {
+ (*eps)->entry = entry;
+ (*eps)->set = set;
+ (*eps)->id = id;
+ }
+ }
+ return entry->id;
+}
+
+static int
_edje_image_find(Evas_Object *obj, Edje *ed, Edje_Real_Part_Set **eps,
Edje_Part_Description_Image *st, Edje_Part_Image_Id *imid)
{
Edje_Image_Directory_Set_Entry *entry;
Edje_Image_Directory_Set *set = NULL;
Eina_List *l;
- int w = 0, h = 0, id;
+ int w = 0, h = 0, id, maxw = 0, maxh = 0;
if (!st && !imid) return -1;
if (st && !st->image.set) return st->image.id;
@@ -572,52 +536,35 @@ _edje_image_find(Evas_Object *obj, Edje *ed, Edje_Real_Part_Set **eps,
{
if (((*eps)->entry->size.min.h <= h) &&
(h <= (*eps)->entry->size.max.h))
- {
- return (*eps)->entry->id;
- }
+ return (*eps)->entry->id;
}
}
}
if (!set) set = ed->file->image_dir->sets + id;
+ if (set->entries)
+ evas_image_max_size_get(evas_object_evas_get(obj), &maxw, &maxh);
EINA_LIST_FOREACH(set->entries, l, entry)
{
+ // skip images b
+ if ((entry->size.w > 0) && (entry->size.h > 0) &&
+ ((w > entry->size.w) || (h > entry->size.h)))
+ continue;
+ // skip images that exceed max size
+ if ((maxw > 0) && (maxh > 0) &&
+ ((entry->size.w > maxw) || (entry->size.h > maxh)))
+ continue;
if ((entry->size.min.w <= w) && (w <= entry->size.max.w))
{
if ((entry->size.min.h <= h) && (h <= entry->size.max.h))
- {
- if (eps)
- {
- if (!*eps) *eps = calloc(1, sizeof(Edje_Real_Part_Set));
- if (*eps)
- {
- (*eps)->entry = entry;
- (*eps)->set = set;
- (*eps)->id = id;
- }
- }
- return entry->id;
- }
+ return _edje_image_set_fill(eps, entry, set, id);
}
}
-
+ // nothing found so pick first - which shouldbe smallest
entry = eina_list_data_get(set->entries);
if (entry)
- {
- if (eps)
- {
- if (!*eps)
- *eps = calloc(1, sizeof (Edje_Real_Part_Set));
- if (*eps)
- {
- (*eps)->entry = entry;
- (*eps)->set = set;
- (*eps)->id = id;
- }
- }
- return entry->id;
- }
+ return _edje_image_set_fill(eps, entry, set, id);
return -1;
}
@@ -2890,43 +2837,6 @@ _edje_part_recalc_single_text0(Edje_Calc_Params *params,
}
static void
-_edje_part_recalc_single_light0(Edje_Calc_Params *params,
- Edje_Part_Description_Light *light_desc)
-{
- _edje_calc_params_need_type_node(params);
- params->type.node->data[0] = light_desc->light.orientation.data[0];
- params->type.node->point.x = light_desc->light.position.point.x;
- params->type.node->point.y = light_desc->light.position.point.y;
- params->type.node->point.z = light_desc->light.position.point.z;
-}
-
-static void
-_edje_part_recalc_single_camera0(Edje_Calc_Params *params,
- Edje_Part_Description_Camera *camera_desc)
-{
- _edje_calc_params_need_type_node(params);
- params->type.node->data[0] = camera_desc->camera.orientation.data[0];
- params->type.node->point.x = camera_desc->camera.position.point.x;
- params->type.node->point.y = camera_desc->camera.position.point.y;
- params->type.node->point.z = camera_desc->camera.position.point.z;
-}
-
-static void
-_edje_part_recalc_single_mesh0(Edje_Calc_Params *params,
- Edje_Part_Description_Mesh_Node *mesh_desc)
-{
- _edje_calc_params_need_type_node(params);
- params->type.node->frame = mesh_desc->mesh_node.mesh.frame;
- params->type.node->data[0] = mesh_desc->mesh_node.orientation.data[0];
- params->type.node->point.x = mesh_desc->mesh_node.position.point.x;
- params->type.node->point.y = mesh_desc->mesh_node.position.point.y;
- params->type.node->point.z = mesh_desc->mesh_node.position.point.z;
- params->type.node->scale_3d.x = mesh_desc->mesh_node.scale_3d.x;
- params->type.node->scale_3d.y = mesh_desc->mesh_node.scale_3d.y;
- params->type.node->scale_3d.z = mesh_desc->mesh_node.scale_3d.z;
-}
-
-static void
_edje_table_recalc_apply(Edje *ed EINA_UNUSED,
Edje_Real_Part *ep,
Edje_Calc_Params *p3 EINA_UNUSED,
@@ -2986,14 +2896,14 @@ _edje_part_recalc_single(Edje *ed,
/* check whether this part has fixed value or not*/
if ((rel1_to_x == rel2_to_x) &&
(EQ(desc->rel1.relative_x, desc->rel2.relative_x)) &&
- (!chosen_desc->fixed.w))
+ (!chosen_desc->fixed.w) && (!chosen_desc->user_set.fixed))
{
chosen_desc->fixed.w = 1;
fixedw = EINA_TRUE;
}
if ((rel1_to_y == rel2_to_y) &&
(EQ(desc->rel1.relative_y, desc->rel2.relative_y)) &&
- (!chosen_desc->fixed.h))
+ (!chosen_desc->fixed.h) && (!chosen_desc->user_set.fixed))
{
chosen_desc->fixed.h = 1;
fixedh = EINA_TRUE;
@@ -3088,15 +2998,6 @@ _edje_part_recalc_single(Edje *ed,
// image. proxy, snapshot share this filter recalc, so fall through
_edje_part_recalc_single_filter(ed, ep, desc, chosen_desc, pos);
break;
- case EDJE_PART_TYPE_LIGHT:
- _edje_part_recalc_single_light0(params, (Edje_Part_Description_Light *)desc);
- break;
- case EDJE_PART_TYPE_CAMERA:
- _edje_part_recalc_single_camera0(params, (Edje_Part_Description_Camera *)desc);
- break;
- case EDJE_PART_TYPE_MESH_NODE:
- _edje_part_recalc_single_mesh0(params, (Edje_Part_Description_Mesh_Node *)desc);
- break;
case EDJE_PART_TYPE_SPACER:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_SWALLOW:
@@ -3272,56 +3173,215 @@ _edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edj
evas_object_image_border_center_fill_set(ep->object, EVAS_BORDER_FILL_SOLID);
}
+#ifdef BUILD_VG_LOADER_JSON
static void
-_edje_svg_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3 EINA_UNUSED, Edje_Part_Description_Vector *chosen_desc, FLOAT_T pos)
+_edje_vector_animation_running_cb(void *data, const Efl_Event *event)
{
- int new_svg = -1; //invalid svg
+ double pos = *((double*)event->info);
+ Edje_Real_Part *ep = (Edje_Real_Part *)data;
+ int frame, frame_count;
+
+ frame_count = efl_gfx_frame_controller_frame_count_get(ep->object) - 1;
+ if (frame_count < 0) frame_count = 0;
+
+ if (ep->typedata.vector->backward)
+ frame = ep->typedata.vector->start_frame - (int) (frame_count * pos);
+ else
+ frame = ep->typedata.vector->start_frame + (int) (frame_count * pos);
+
+ efl_gfx_frame_controller_frame_set(ep->object, frame);
+
+ if ((ep->typedata.vector->backward && (frame <= 0)) ||
+ (!ep->typedata.vector->backward && (frame >= frame_count)))
+ {
+ if (ep->typedata.vector->loop)
+ {
+ if (ep->typedata.vector->backward)
+ ep->typedata.vector->start_frame = frame_count;
+ else
+ ep->typedata.vector->start_frame = 0;
+
+ efl_canvas_object_animation_start(ep->object,
+ ep->typedata.vector->anim,
+ 1.0, 0.0);
+ }
+ else
+ {
+ efl_canvas_object_animation_stop(ep->object);
+ }
+ }
+}
+
+static void
+_edje_vector_load_lottie(Edje *ed, Edje_Real_Part *ep, const char *key)
+{
+ Edje_Part_Description_Vector *desc = (Edje_Part_Description_Vector *)ep->chosen_description;
+ Eina_File *file;
+ char *lottie_data;
+ double frame_duration;
+ int lottie_data_len = 0;
+ int frame_count;
+
+ if (ep->typedata.vector->anim == NULL)
+ {
+ Eo *anim = efl_add(EFL_CANVAS_ANIMATION_CLASS, ed->base.evas);
+ ep->typedata.vector->anim = anim;
+ efl_event_callback_add(ep->object,
+ EFL_CANVAS_OBJECT_ANIMATION_EVENT_ANIMATION_PROGRESS_UPDATED,
+ _edje_vector_animation_running_cb, ep);
+ }
+
+ if (ep->typedata.vector->current_id != desc->vg.id)
+ {
+ lottie_data = (char *)eet_read(ed->file->ef, key, &lottie_data_len);
+ if (lottie_data)
+ {
+ lottie_data[lottie_data_len] = '\0';
+ file = eina_file_virtualize(NULL, lottie_data, lottie_data_len + 1, EINA_FALSE);
+ if (efl_file_loaded_get(ep->object)) efl_file_unload(ep->object);
+ efl_file_simple_mmap_load(ep->object, file, NULL);
+
+ if (ep->typedata.vector->lottie_virtual_file)
+ eina_file_close(ep->typedata.vector->lottie_virtual_file);
+ ep->typedata.vector->lottie_virtual_file = file;
+
+ if (ep->typedata.vector->lottie_data)
+ free(ep->typedata.vector->lottie_data);
+ ep->typedata.vector->lottie_data = lottie_data;
+
+ ep->typedata.vector->current_id = desc->vg.id;
+ }
+ }
+
+ frame_duration = efl_gfx_frame_controller_frame_duration_get(ep->object, 0, 0);
+ efl_animation_duration_set(ep->typedata.vector->anim, frame_duration);
+
+ if (!ep->typedata.vector->is_playing)
+ {
+ frame_count = efl_gfx_frame_controller_frame_count_get(ep->object);
+ efl_gfx_frame_controller_frame_set(ep->object, (int)(frame_count * desc->vg.frame));
+ }
+}
+#endif
+
+static void
+_edje_vector_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3 EINA_UNUSED, Edje_Part_Description_Vector *chosen_desc, FLOAT_T pos)
+{
+ int new_id = -1; //invalid svg
int w, h;
char src_key[32], dest_key[32];
Efl_VG *src_root, *dest_root, *root;
+ Edje_Vector_File_Type type = chosen_desc->vg.type;
+ Edje_Vector_File_Type new_type = EDJE_VECTOR_FILE_TYPE_SVG;
evas_object_geometry_get(ep->object, NULL, NULL, &w, &h);
if( (w == 0) || (h == 0)) return;
snprintf(src_key, sizeof(src_key), "edje/vectors/%i", chosen_desc->vg.id);
+ if (type == EDJE_VECTOR_FILE_TYPE_LOTTIE)
+ {
+#ifdef BUILD_VG_LOADER_JSON
+ _edje_vector_load_lottie(ed, ep, src_key);
+#else
+ ERR("Evas Vg Lottie (Lottie) Loader is not supported, Only Static Vector Image(SVG) is available!");
+#endif
+ return;
+ }
+
if (ep->param2)
{
Edje_Part_Description_Vector *next_state = (Edje_Part_Description_Vector *)ep->param2->description;
if (chosen_desc->vg.id != next_state->vg.id)
- new_svg = next_state->vg.id;
+ {
+ new_id = next_state->vg.id;
+ new_type = next_state->vg.type;
+ }
else
- pos = 0;
+ {
+ pos = 0;
+ }
}
- if (new_svg < 0)
+ if ((new_id < 0) || (new_type == EDJE_VECTOR_FILE_TYPE_LOTTIE))
{
- efl_file_simple_load(ep->object, ed->file->path, src_key);
+#ifndef BUILD_VG_LOADER_JSON
+ if (new_type == EDJE_VECTOR_FILE_TYPE_LOTTIE)
+ ERR("Evas Vg Lottie (Lottie) Loader is not supported, Only Static Vector Image(SVG) is available!");
+ else
+#endif
+ efl_file_simple_load(ep->object, ed->file->path, src_key);
}
else
{
- snprintf(dest_key, sizeof(dest_key), "edje/vectors/%i", new_svg);
+ Eina_Rect viewbox;
+
+ snprintf(dest_key, sizeof(dest_key), "edje/vectors/%i", new_id);
efl_file_simple_load(ep->object, ed->file->path, src_key);
src_root = efl_canvas_vg_object_root_node_get(ep->object);
efl_ref(src_root);
+ // Note: Assume that the viewboxes of two interpolation objects are the same.
+ viewbox = efl_canvas_vg_object_viewbox_get(ep->object);
+
efl_file_simple_load(ep->object, ed->file->path, dest_key);
dest_root = efl_canvas_vg_object_root_node_get(ep->object);
efl_ref(dest_root);
root = efl_duplicate(src_root);
+ efl_canvas_vg_object_viewbox_set(ep->object, viewbox);
if (!efl_gfx_path_interpolate(root, src_root, dest_root, pos))
- {
- ERR("Can't interpolate check the svg file");
- }
+ ERR("Can't interpolate check the svg file");
+
efl_canvas_vg_object_root_node_set(ep->object, root);
+
+ efl_unref(root);
efl_unref(src_root);
efl_unref(dest_root);
}
}
+#ifdef BUILD_VG_LOADER_JSON
+void
+_edje_part_vector_anim_stop(Edje *ed EINA_UNUSED, Edje_Real_Part *rp)
+{
+ Edje_Part_Description_Vector *desc = (Edje_Part_Description_Vector *)rp->chosen_description;
+ double frame_count = efl_gfx_frame_controller_frame_count_get(rp->object);
+
+ efl_canvas_object_animation_stop(rp->object);
+ efl_gfx_frame_controller_frame_set(rp->object, (int)(frame_count * desc->vg.frame));
+ rp->typedata.vector->is_playing = EINA_FALSE;
+}
+
+void
+_edje_part_vector_anim_pause(Edje *ed EINA_UNUSED, Edje_Real_Part *rp)
+{
+ efl_canvas_object_animation_pause_set(rp->object, EINA_TRUE);
+}
+
+void
+_edje_part_vector_anim_resume(Edje *ed EINA_UNUSED, Edje_Real_Part *rp)
+{
+ if (rp->typedata.vector->is_playing)
+ {
+ rp->typedata.vector->start_frame = efl_gfx_frame_controller_frame_get(rp->object);
+ efl_canvas_object_animation_pause_set(rp->object, EINA_FALSE);
+ }
+}
+
+void
+_edje_part_vector_anim_play(Edje *ed EINA_UNUSED, Edje_Real_Part *rp, Eina_Bool backward, Eina_Bool loop)
+{
+ rp->typedata.vector->backward = backward;
+ rp->typedata.vector->loop = loop;
+ rp->typedata.vector->start_frame = efl_gfx_frame_controller_frame_get(rp->object);
+ rp->typedata.vector->is_playing = EINA_TRUE;
+ efl_canvas_object_animation_start(rp->object, rp->typedata.vector->anim, 1.0, 0.0);
+}
+#endif
+
static Edje_Real_Part *
_edje_real_part_state_get(Edje *ed, Edje_Real_Part *ep, int flags, int id, int *state)
{
@@ -3883,19 +3943,6 @@ _edje_part_calc_params_memcpy(Edje_Calc_Params *p, Edje_Calc_Params *s, Edje_Par
else p->type.text = NULL;
}
break;
- case EDJE_PART_TYPE_LIGHT:
- case EDJE_PART_TYPE_CAMERA:
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Edje_Calc_Params_Type_Node *d = malloc(sizeof(*d));
- if (d)
- {
- memcpy(d, s->type.node, sizeof(*d));
- p->type.node = d;
- }
- else p->type.node = NULL;
- }
- break;
default:
break;
}
@@ -4011,8 +4058,9 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
}
ERR("Circular dependency in the group '%s' : %s",
ed->group, depends_path);
- eina_array_free(part_array);
}
+
+ eina_array_free(part_array);
#endif
return;
}
@@ -4233,7 +4281,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
}
/* Recalc if needed the map center && light source */
- if (ep->param1.description->map.on)
+ if (ep->param1.description && ep->param1.description->map.on)
{
center[0] = _edje_real_part_state_get(ed, ep, flags, ep->param1.description->map.rot.id_center, &statec1);
zoom_center[0] = _edje_real_part_state_get(ed, ep, flags, ep->param1.description->map.zoom.id_center, &statec1);
@@ -4392,10 +4440,6 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
_edje_calc_params_need_ext(p3);
p3->ext->clip_to = p1->ext->clip_to;
}
- else
- {
- if (p3->ext) p3->ext->clip_to = NULL;
- }
}
/* and no_render as well */
@@ -4566,33 +4610,6 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
p3->type.text->align.y = FFP(p1->type.text->align.y, p2->type.text->align.y, pos);
p3->type.text->ellipsis = TO_DOUBLE(FINTP(p1->type.text->ellipsis, p2->type.text->ellipsis, pos2));
break;
- case EDJE_PART_TYPE_MESH_NODE:
- _edje_calc_params_need_type_node(p3);
- p3->type.node->frame = INTP(p1->type.node->frame, p2->type.node->frame, pos);
- p3->type.node->data[0] = INTP(p1->type.node->data[0], p2->type.node->data[0], pos);
-
- p3->type.node->point.x = FFP(p1->type.node->point.x, p2->type.node->point.x, pos);
- p3->type.node->point.y = FFP(p1->type.node->point.y, p2->type.node->point.y, pos);
- p3->type.node->point.z = FFP(p1->type.node->point.z, p2->type.node->point.z, pos);
-
- p3->type.node->scale_3d.x = FFP(p1->type.node->scale_3d.x, p2->type.node->scale_3d.x, pos);
- p3->type.node->scale_3d.y = FFP(p1->type.node->scale_3d.y, p2->type.node->scale_3d.y, pos);
- p3->type.node->scale_3d.z = FFP(p1->type.node->scale_3d.z, p2->type.node->scale_3d.z, pos);
- break;
- case EDJE_PART_TYPE_CAMERA:
- p3->type.node->data[0] = FFP(p1->type.node->data[0], p2->type.node->data[0], pos);
-
- p3->type.node->point.x = FFP(p1->type.node->point.x, p2->type.node->point.x, pos);
- p3->type.node->point.y = FFP(p1->type.node->point.y, p2->type.node->point.y, pos);
- p3->type.node->point.z = FFP(p1->type.node->point.z, p2->type.node->point.z, pos);
- break;
- case EDJE_PART_TYPE_LIGHT:
- p3->type.node->data[0] = FFP(p1->type.node->data[0], p2->type.node->data[0], pos);
-
- p3->type.node->point.x = FFP(p1->type.node->point.x, p2->type.node->point.x, pos);
- p3->type.node->point.y = FFP(p1->type.node->point.y, p2->type.node->point.y, pos);
- p3->type.node->point.z = FFP(p1->type.node->point.z, p2->type.node->point.z, pos);
- break;
}
/* mapped is a special case like visible */
@@ -4744,7 +4761,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
}
if (!ed->calc_only)
{
- Evas_Object *mo;
+ Evas_Object *mo = NULL;
/* Common move, resize and color_set for all part. */
switch (ep->part->type)
@@ -4869,197 +4886,6 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
case EDJE_PART_TYPE_SPACER:
/* We really should do nothing on SPACER part */
break;
- case EDJE_PART_TYPE_CAMERA:
- {
- Evas_Object *viewport;
- Evas_Canvas3D_Camera *camera = NULL;
- Edje_Part_Description_Camera *pd_camera;
-
- efl_gfx_entity_size_set(ep->object, EINA_SIZE2D(pf->req.w, pf->req.h));
-
- pd_camera = (Edje_Part_Description_Camera*) ep->chosen_description;
-
- efl_gfx_entity_position_set(ep->object, EINA_POSITION2D(ed->x + pf->final.x, ed->y + pf->final.y)),
- efl_gfx_entity_size_set(ep->object, EINA_SIZE2D(pf->final.w, pf->final.h));
-
- viewport = evas_object_image_source_get(ep->object);
-
- efl_gfx_entity_size_set(viewport, EINA_SIZE2D(pf->req.w, pf->req.h));
-
- evas_object_image_source_visible_set(ep->object, EINA_FALSE);
- evas_object_image_source_events_set(ep->object, EINA_TRUE);
- evas_object_show(ep->object);
-
- camera = evas_canvas3d_node_camera_get(ep->node);
-
- evas_canvas3d_camera_projection_perspective_set(camera, pd_camera->camera.camera.fovy, pd_camera->camera.camera.aspect, pd_camera->camera.camera.frustum_near, pd_camera->camera.camera.frustum_far);
-
- _edje_calc_params_need_type_node(pf);
- evas_canvas3d_node_position_set(ep->node, pf->type.node->point.x, pf->type.node->point.y, pf->type.node->point.z);
- switch (pd_camera->camera.orientation.type)
- {
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_NONE:
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_QUATERNION:
- {
- SET_QUATERNION(camera)
- break;
- }
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_AT:
- SET_LOOK_AT(camera)
- break;
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_TO:
- {
- SET_LOOK_TO(camera)
- break;
- }
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_ANGLE_AXIS:
- SET_ANGLE_AXIS(camera)
- break;
- }
- break;
- }
- case EDJE_PART_TYPE_LIGHT:
- {
- Evas_Canvas3D_Light *light_node = NULL;
- Edje_Part_Description_Light *pd_light;
-
- pd_light = (Edje_Part_Description_Light*) ep->chosen_description;
- light_node = evas_canvas3d_node_light_get(ep->node);
-
- evas_canvas3d_light_ambient_set(light_node, (float) pd_light->light.properties.ambient.r / 255, (float) pd_light->light.properties.ambient.g / 255, (float) pd_light->light.properties.ambient.b / 255, (float) pd_light->light.properties.ambient.a / 255);
- evas_canvas3d_light_diffuse_set(light_node, (float) pd_light->light.properties.diffuse.r / 255, (float) pd_light->light.properties.diffuse.g / 255, (float) pd_light->light.properties.diffuse.b / 255, (float) pd_light->light.properties.diffuse.a / 255);
- evas_canvas3d_light_specular_set(light_node, (float) pd_light->light.properties.specular.r / 255, (float) pd_light->light.properties.specular.g / 255, (float) pd_light->light.properties.specular.b / 255, (float) pd_light->light.properties.specular.a / 255);
- evas_canvas3d_light_directional_set(light_node, EINA_TRUE);
- evas_canvas3d_light_projection_perspective_set(light_node, pd_light->light.light.fovy, pd_light->light.light.aspect, pd_light->light.light.frustum_near, pd_light->light.light.frustum_far);
-
- _edje_calc_params_need_type_node(pf);
- evas_canvas3d_node_position_set(ep->node, pf->type.node->point.x, pf->type.node->point.y, pf->type.node->point.z);
- switch (pd_light->light.orientation.type)
- {
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_NONE:
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_QUATERNION:
- {
- SET_QUATERNION(light);
- break;
- }
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_AT:
- SET_LOOK_AT(light)
- break;
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_TO:
- {
- SET_LOOK_TO(light)
- break;
- }
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_ANGLE_AXIS:
- SET_ANGLE_AXIS(light)
- break;
- }
- break;
- }
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Evas_Canvas3D_Material *material = NULL;
- Evas_Canvas3D_Texture *texture = NULL;
- Evas_Canvas3D_Mesh *mesh = NULL;
- const char *proxy;
- Edje_Part_Description_Mesh_Node *pd_mesh_node;
- const Eina_List *meshes;
- const Eina_List *list;
- Eina_Bool frame_exist;
-
- meshes = evas_canvas3d_node_mesh_list_get(ep->node);
-
- EINA_LIST_FOREACH(meshes, list, mesh)
- {
- material = evas_canvas3d_mesh_frame_material_get(mesh, 0);
- texture = evas_canvas3d_material_texture_get(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE);
-
- pd_mesh_node = (Edje_Part_Description_Mesh_Node*) ep->chosen_description;
-
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, EINA_TRUE);
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, pd_mesh_node->mesh_node.properties.normal);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, (float) pd_mesh_node->mesh_node.properties.ambient.r / 255, (float) pd_mesh_node->mesh_node.properties.ambient.g / 255, (float) pd_mesh_node->mesh_node.properties.ambient.b / 255, (float) pd_mesh_node->mesh_node.properties.ambient.a / 255);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, (float) pd_mesh_node->mesh_node.properties.diffuse.r / 255, (float) pd_mesh_node->mesh_node.properties.diffuse.g / 255, (float) pd_mesh_node->mesh_node.properties.diffuse.b / 255, (float) pd_mesh_node->mesh_node.properties.diffuse.a / 255);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, (float) pd_mesh_node->mesh_node.properties.specular.r / 255, (float) pd_mesh_node->mesh_node.properties.specular.g / 255, (float) pd_mesh_node->mesh_node.properties.specular.b / 255, (float) pd_mesh_node->mesh_node.properties.specular.a / 255);
- evas_canvas3d_material_shininess_set(material, pd_mesh_node->mesh_node.properties.shininess);
-
- switch(pd_mesh_node->mesh_node.mesh.primitive)
- {
- case EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE:
- case EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE:
- {
- Eo *primitive = NULL;
- primitive = efl_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, ed->base.evas);
- evas_canvas3d_primitive_form_set(primitive, pd_mesh_node->mesh_node.mesh.primitive);
-
- _edje_calc_params_need_type_node(pf);
- frame_exist = evas_canvas3d_mesh_frame_exist(mesh, pf->type.node->frame);
- if (!frame_exist)
- {
- evas_canvas3d_mesh_frame_material_set(mesh, pf->type.node->frame, material);
- }
- evas_canvas3d_mesh_from_primitive_set(mesh, 0, primitive);
- break;
- }
- default:
- break;
- }
-
- if (pd_mesh_node->mesh_node.texture.need_texture && pd_mesh_node->mesh_node.texture.textured)
- {
- proxy = NULL;
-
- texture = evas_canvas3d_material_texture_get(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE);
-
- //proxy = _edje_image_name_find(ed, pd_mesh_node->mesh_node.texture.id);
- /*FIXME Conflict with function _edje_image_name_find (two places in edje_utils and edje_edit.c,
- temporary desicion need to clarify up to commit to phab*/
- proxy = ed->file->image_dir->entries[pd_mesh_node->mesh_node.texture.id].entry;
- if (proxy)
- {
- efl_file_simple_mmap_load(texture, ed->file->f, proxy);
- evas_canvas3d_texture_filter_set(texture, pd_mesh_node->mesh_node.texture.filter1, pd_mesh_node->mesh_node.texture.filter2);
- evas_canvas3d_texture_wrap_set(texture, pd_mesh_node->mesh_node.texture.wrap1, pd_mesh_node->mesh_node.texture.wrap2);
- }
- }
-
- _edje_calc_params_need_type_node(pf);
- frame_exist = evas_canvas3d_mesh_frame_exist(mesh, pf->type.node->frame);
- if (!frame_exist)
- {
- evas_canvas3d_mesh_frame_add(mesh, pf->type.node->frame);
- evas_canvas3d_mesh_frame_material_set(mesh, pf->type.node->frame, material);
- }
- evas_canvas3d_mesh_shader_mode_set(mesh, pd_mesh_node->mesh_node.properties.shade);
- evas_canvas3d_mesh_vertex_assembly_set(mesh, pd_mesh_node->mesh_node.mesh.assembly);
- evas_canvas3d_node_mesh_frame_set(ep->node, mesh, pf->type.node->frame);
- evas_canvas3d_node_scale_set(ep->node, pf->type.node->scale_3d.x, pf->type.node->scale_3d.y, pf->type.node->scale_3d.z);
- evas_canvas3d_node_position_set(ep->node, pf->type.node->point.x, pf->type.node->point.y, pf->type.node->point.z);
- switch (pd_mesh_node->mesh_node.orientation.type)
- {
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_NONE:
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_QUATERNION:
- {
- SET_QUATERNION(mesh_node)
- break;
- }
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_AT:
- SET_LOOK_AT(mesh_node)
- break;
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_LOOK_TO:
- {
- SET_LOOK_TO(mesh_node)
- break;
- }
- case EVAS_CANVAS3D_NODE_ORIENTATION_TYPE_ANGLE_AXIS:
- SET_ANGLE_AXIS(mesh_node)
- break;
- }
- }
- break;
- }
}
/* Some object need special recalc. */
@@ -5086,7 +4912,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
break;
case EDJE_PART_TYPE_VECTOR:
- _edje_svg_recalc_apply(ed, ep, pf, (Edje_Part_Description_Vector *)chosen_desc, pos);
+ _edje_vector_recalc_apply(ed, ep, pf, (Edje_Part_Description_Vector *)chosen_desc, pos);
break;
case EDJE_PART_TYPE_TEXTBLOCK:
@@ -5119,12 +4945,17 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
if (ep->part->type == EDJE_PART_TYPE_GROUP)
vis = evas_object_visible_get(ed->obj);
- efl_gfx_entity_position_set(ep->typedata.swallow->swallowed_object, EINA_POSITION2D(ed->x + pf->final.x, ed->y + pf->final.y));
- efl_gfx_entity_size_set(ep->typedata.swallow->swallowed_object, EINA_SIZE2D(pf->final.w, pf->final.h));
- efl_gfx_entity_visible_set(ep->typedata.swallow->swallowed_object, vis);
+ if (ep->typedata.swallow)
+ efl_gfx_entity_position_set(ep->typedata.swallow->swallowed_object, EINA_POSITION2D(ed->x + pf->final.x, ed->y + pf->final.y));
+ if (ep->typedata.swallow)
+ efl_gfx_entity_size_set(ep->typedata.swallow->swallowed_object, EINA_SIZE2D(pf->final.w, pf->final.h));
+ if (ep->typedata.swallow)
+ efl_gfx_entity_visible_set(ep->typedata.swallow->swallowed_object, vis);
}
- else evas_object_hide(ep->typedata.swallow->swallowed_object);
- mo = ep->typedata.swallow->swallowed_object;
+ else if (ep->typedata.swallow)
+ evas_object_hide(ep->typedata.swallow->swallowed_object);
+ if (ep->typedata.swallow)
+ mo = ep->typedata.swallow->swallowed_object;
}
else mo = ep->object;
if (ep->part->type != EDJE_PART_TYPE_SPACER)
diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
index ca9cbf11ad..6a89fd9ca9 100644
--- a/src/lib/edje/edje_data.c
+++ b/src/lib/edje/edje_data.c
@@ -54,12 +54,6 @@ Eet_Data_Descriptor *_edje_edd_edje_part_description_textblock = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_box = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_table = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_external = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_3d_color = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_3d_offset = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_3d_vec = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_mesh_node = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_light = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_camera = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_variant_list = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_rectangle_pointer = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_snapshot_pointer = NULL;
@@ -73,9 +67,6 @@ Eet_Data_Descriptor *_edje_edd_edje_part_description_textblock_pointer = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_box_pointer = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_table_pointer = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_external_pointer = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_mesh_node_pointer = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_light_pointer = NULL;
-Eet_Data_Descriptor *_edje_edd_edje_part_description_camera_pointer = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description_filter_data = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_image_id = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_image_id_pointer = NULL;
@@ -106,6 +97,7 @@ Eet_Data_Descriptor *_edje_edd_edje_part_description_vector_pointer = NULL;
memset(data, 0, size); \
data->clip_to_id = -1; \
data->map.zoom.x = data->map.zoom.y = 1.0; \
+ data->map.zoom.id_center = -1; \
return data; \
} \
\
@@ -126,9 +118,6 @@ EMP(BOX, box)
EMP(TABLE, table)
EMP(EXTERNAL, external)
EMP(SPACER, spacer)
-EMP(MESH_NODE, mesh_node)
-EMP(LIGHT, light)
-EMP(CAMERA, camera)
EMP(SNAPSHOT, snapshot)
EMP(VECTOR, vector)
#undef EMP
@@ -177,9 +166,6 @@ struct
{ EDJE_PART_TYPE_EXTERNAL, "external" },
{ EDJE_PART_TYPE_PROXY, "proxy" },
{ EDJE_PART_TYPE_SPACER, "spacer" },
- { EDJE_PART_TYPE_MESH_NODE, "mesh_node" },
- { EDJE_PART_TYPE_LIGHT, "light" },
- { EDJE_PART_TYPE_CAMERA, "camera" },
{ EDJE_PART_TYPE_SNAPSHOT, "snapshot" },
{ EDJE_PART_TYPE_VECTOR, "vector" }
};
@@ -297,14 +283,8 @@ _edje_edd_shutdown(void)
FREED(_edje_edd_edje_part_description_box);
FREED(_edje_edd_edje_part_description_table);
FREED(_edje_edd_edje_part_description_external);
- FREED(_edje_edd_edje_part_description_mesh_node);
- FREED(_edje_edd_edje_part_description_light);
FREED(_edje_edd_edje_part_description_vector);
FREED(_edje_edd_edje_part_description_vector_pointer);
- FREED(_edje_edd_edje_part_description_camera);
- FREED(_edje_edd_edje_part_description_3d_color);
- FREED(_edje_edd_edje_part_description_3d_offset);
- FREED(_edje_edd_edje_part_description_3d_vec);
FREED(_edje_edd_edje_part_description_variant_list);
FREED(_edje_edd_edje_part_description_rectangle_pointer);
FREED(_edje_edd_edje_part_description_snapshot_pointer);
@@ -318,9 +298,6 @@ _edje_edd_shutdown(void)
FREED(_edje_edd_edje_part_description_box_pointer);
FREED(_edje_edd_edje_part_description_table_pointer);
FREED(_edje_edd_edje_part_description_external_pointer);
- FREED(_edje_edd_edje_part_description_mesh_node_pointer);
- FREED(_edje_edd_edje_part_description_light_pointer);
- FREED(_edje_edd_edje_part_description_camera_pointer);
FREED(_edje_edd_edje_part_description_filter_data);
FREED(_edje_edd_edje_part_image_id);
FREED(_edje_edd_edje_part_image_id_pointer);
@@ -399,6 +376,8 @@ _edje_edd_init(void)
eet_data_descriptor_file_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_set_entry, Edje_Image_Directory_Set_Entry, "name", name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_set_entry, Edje_Image_Directory_Set_Entry, "id", id, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_set_entry, Edje_Image_Directory_Set_Entry, "w", size.w, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_set_entry, Edje_Image_Directory_Set_Entry, "h", size.h, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_set_entry, Edje_Image_Directory_Set_Entry, "min.w", size.min.w, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_set_entry, Edje_Image_Directory_Set_Entry, "min.h", size.min.h, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_set_entry, Edje_Image_Directory_Set_Entry, "max.w", size.max.w, EET_T_INT);
@@ -422,6 +401,7 @@ _edje_edd_init(void)
eet_data_descriptor_file_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_vector_directory_entry, Edje_Vector_Directory_Entry, "entry", entry, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_vector_directory_entry, Edje_Vector_Directory_Entry, "id", id, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_vector_directory_entry, Edje_Vector_Directory_Entry, "type", type, EET_T_INT);
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Image_Directory);
_edje_edd_edje_image_directory =
@@ -490,31 +470,6 @@ _edje_edd_init(void)
eet_data_descriptor_file_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_vibration_directory, Edje_Vibration_Directory, "samples", samples, _edje_edd_edje_vibration_sample);
- /* color structure for ambient, diffuse and specular colors */
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Color);
- _edje_edd_edje_part_description_3d_color =
- eet_data_descriptor_file_new(&eddc);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_color, Edje_Color, "r", r, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_color, Edje_Color, "g", g, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_color, Edje_Color, "b", b, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_color, Edje_Color, "a", a, EET_T_UCHAR);
-
- /* offset (vector of integer values) */
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_3D_Int_Vec);
- _edje_edd_edje_part_description_3d_offset =
- eet_data_descriptor_file_new(&eddc);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_offset, Edje_3D_Int_Vec, "x", x, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_offset, Edje_3D_Int_Vec, "y", y, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_offset, Edje_3D_Int_Vec, "z", z, EET_T_INT);
-
- /* vector of float values */
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_3D_Vec);
- _edje_edd_edje_part_description_3d_vec =
- eet_data_descriptor_file_new(&eddc);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_vec, Edje_3D_Vec, "x", x, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_vec, Edje_3D_Vec, "y", y, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_3d_vec, Edje_3D_Vec, "z", z, EDJE_T_FLOAT);
-
/* Efl.Gfx.Filter */
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Gfx_Filter);
_edje_edd_edje_filter = eet_data_descriptor_file_new(&eddc);
@@ -543,9 +498,6 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.EXTERNAL", count.EXTERNAL, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.SPACER", count.SPACER, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.SNAPSHOT", count.SNAPSHOT, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.MESH_NODE", count.MESH_NODE, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.LIGHT", count.LIGHT, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.CAMERA", count.CAMERA, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.VECTOR", count.VECTOR, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.part", count.part, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "group_alias", group_alias, EET_T_UCHAR);
@@ -668,7 +620,6 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "name", name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "signal", signal, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "source", source, EET_T_STRING);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "source_3d_id", source_3d_id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "filter_part", filter.part, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "filter_state", filter.state, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "in.from", in.from, EET_T_DOUBLE);
@@ -754,9 +705,9 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "limit", limit, EET_T_CHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.x", align.x, EDJE_T_FLOAT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.y", align.y, EDJE_T_FLOAT); \
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(Edd, Type, "align_3d", align_3d, _edje_edd_edje_part_description_3d_vec); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "fixed.w", fixed.w, EET_T_UCHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "fixed.h", fixed.h, EET_T_UCHAR); \
+ EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "user_set.fixed", user_set.fixed, EET_T_UCHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "minmul.have", minmul.have, EET_T_UCHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "minmul.w", minmul.w, EDJE_T_FLOAT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "minmul.h", minmul.h, EDJE_T_FLOAT); \
@@ -853,13 +804,15 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "visible", Dec.visible, EET_T_CHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.x", Dec.align.x, EDJE_T_FLOAT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.y", Dec.align.y, EDJE_T_FLOAT); \
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(Edd, Type, "align_3d", Dec.align_3d, _edje_edd_edje_part_description_3d_vec); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "fixed.w", Dec.fixed.w, EET_T_UCHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "fixed.h", Dec.fixed.h, EET_T_UCHAR); \
+ EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "user_set.fixed", Dec.user_set.fixed, EET_T_UCHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "min.w", Dec.min.w, EET_T_INT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "min.h", Dec.min.h, EET_T_INT); \
+ EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "min.limit", Dec.min.limit, EET_T_CHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "max.w", Dec.max.w, EET_T_INT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "max.h", Dec.max.h, EET_T_INT); \
+ EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "max.limit", Dec.max.limit, EET_T_CHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "step.x", Dec.step.x, EET_T_INT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "step.y", Dec.step.y, EET_T_INT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "aspect.min", Dec.aspect.min, EDJE_T_FLOAT); \
@@ -969,6 +922,8 @@ _edje_edd_init(void)
EDJE_DATA_DESCRIPTOR_DESCRIPTION_COMMON_SUB(_edje_edd_edje_part_description_vector, Edje_Part_Description_Vector, common);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_vector, Edje_Part_Description_Vector, "vg.id", vg.id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_vector, Edje_Part_Description_Vector, "vg.set", vg.set, EET_T_UCHAR);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_vector, Edje_Part_Description_Vector, "vg.type", vg.type, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_vector, Edje_Part_Description_Vector, "vg.frame", vg.frame, EET_T_DOUBLE);
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Description_Common);
@@ -1010,77 +965,6 @@ _edje_edd_init(void)
eet_data_descriptor_file_new(&eddc);
EDJE_DATA_DESCRIPTOR_DESCRIPTION_COMMON_SUB(_edje_edd_edje_part_description_image, Edje_Part_Description_Image, common);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Description_Mesh_Node);
- eddc.func.mem_free = mem_free_mesh_node;
- eddc.func.mem_alloc = mem_alloc_mesh_node;
- _edje_edd_edje_part_description_mesh_node =
- eet_data_descriptor_file_new(&eddc);
- EDJE_DATA_DESCRIPTOR_DESCRIPTION_COMMON_SUB(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, common);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.position.point", mesh_node.position.point, _edje_edd_edje_part_description_3d_vec);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.position.space", mesh_node.position.space, EET_T_CHAR);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.properties.ambient", mesh_node.properties.ambient, _edje_edd_edje_part_description_3d_color);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.properties.diffuse", mesh_node.properties.diffuse, _edje_edd_edje_part_description_3d_color);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.properties.specular", mesh_node.properties.specular, _edje_edd_edje_part_description_3d_color);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.properties.material_attrib", mesh_node.properties.material_attrib, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.properties.normal", mesh_node.properties.normal, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.properties.shininess", mesh_node.properties.shininess, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.properties.shade", mesh_node.properties.shade, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.aabb1.relative", mesh_node.aabb1.relative, _edje_edd_edje_part_description_3d_vec);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.aabb1.offset", mesh_node.aabb1.offset, _edje_edd_edje_part_description_3d_offset);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.aabb1.rel_to", mesh_node.aabb1.rel_to, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.aabb2.relative", mesh_node.aabb2.relative, _edje_edd_edje_part_description_3d_vec);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.aabb2.offset", mesh_node.aabb2.offset, _edje_edd_edje_part_description_3d_offset);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.aabb2.rel_to", mesh_node.aabb2.rel_to, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.orientation.type", mesh_node.orientation.type, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED_LOOK(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, mesh_node);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.scale_3d", mesh_node.scale_3d, _edje_edd_edje_part_description_3d_vec);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.id", mesh_node.texture.id, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.set", mesh_node.texture.set, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.wrap1", mesh_node.texture.wrap1, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.wrap2", mesh_node.texture.wrap2, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.filter1", mesh_node.texture.filter1, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.filter2", mesh_node.texture.filter2, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.need_texture", mesh_node.texture.need_texture, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.texture.textured", mesh_node.texture.textured, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.mesh.primitive", mesh_node.mesh.primitive, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.mesh.assembly", mesh_node.mesh.assembly, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.mesh.id", mesh_node.mesh.id, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.mesh.set", mesh_node.mesh.set, EET_T_UCHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_mesh_node, Edje_Part_Description_Mesh_Node, "mesh_node.mesh.frame", mesh_node.mesh.frame, EET_T_INT);
-
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Description_Light);
- eddc.func.mem_free = mem_free_light;
- eddc.func.mem_alloc = mem_alloc_light;
- _edje_edd_edje_part_description_light =
- eet_data_descriptor_file_new(&eddc);
- EDJE_DATA_DESCRIPTOR_DESCRIPTION_COMMON_SUB(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, common);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.position.point", light.position.point, _edje_edd_edje_part_description_3d_vec);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.position.space", light.position.space, EET_T_CHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.orientation.type", light.orientation.type, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED_LOOK(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, light);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.properties.ambient", light.properties.ambient, _edje_edd_edje_part_description_3d_color);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.properties.diffuse", light.properties.diffuse, _edje_edd_edje_part_description_3d_color);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.properties.specular", light.properties.specular, _edje_edd_edje_part_description_3d_color);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.light.perspective.fovy", light.light.fovy, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.light.perspective.aspect", light.light.aspect, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.light.perspective.near", light.light.frustum_near, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_light, Edje_Part_Description_Light, "light.light.perspective.far", light.light.frustum_far, EDJE_T_FLOAT);
-
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Description_Camera);
- eddc.func.mem_free = mem_free_camera;
- eddc.func.mem_alloc = mem_alloc_camera;
- _edje_edd_edje_part_description_camera =
- eet_data_descriptor_file_new(&eddc);
- EDJE_DATA_DESCRIPTOR_DESCRIPTION_COMMON_SUB(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, common);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, "camera.position.point", camera.position.point, _edje_edd_edje_part_description_3d_vec);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, "camera.position.space", camera.position.space, EET_T_CHAR);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, "camera.orientation.type", camera.orientation.type, EET_T_INT);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED_LOOK(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, camera);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, "camera.camera.perspective.fovy", camera.camera.fovy, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, "camera.camera.perspective.aspect", camera.camera.aspect, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, "camera.camera.perspective.near", camera.camera.frustum_near, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_camera, Edje_Part_Description_Camera, "camera.camera.perspective.far", camera.camera.frustum_far, EDJE_T_FLOAT);
-
EDJE_DEFINE_POINTER_TYPE(Part_Image_Id, part_image_id);
EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_part_description_image, Edje_Part_Description_Image, "image.tweens", image.tweens, _edje_edd_edje_part_image_id_pointer);
@@ -1251,9 +1135,6 @@ _edje_edd_init(void)
EDJE_DEFINE_POINTER_TYPE(Part_Description_Box, part_description_box);
EDJE_DEFINE_POINTER_TYPE(Part_Description_Table, part_description_table);
EDJE_DEFINE_POINTER_TYPE(Part_Description_External, part_description_external);
- EDJE_DEFINE_POINTER_TYPE(Part_Description_Mesh_Node, part_description_mesh_node);
- EDJE_DEFINE_POINTER_TYPE(Part_Description_Camera, part_description_camera);
- EDJE_DEFINE_POINTER_TYPE(Part_Description_Light, part_description_light);
EDJE_DEFINE_POINTER_TYPE(Part_Description_Vector, part_description_vector);
eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
@@ -1273,9 +1154,6 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "box", _edje_edd_edje_part_description_box);
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "table", _edje_edd_edje_part_description_table);
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "external", _edje_edd_edje_part_description_external);
- EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "mesh_node", _edje_edd_edje_part_description_mesh_node);
- EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "light", _edje_edd_edje_part_description_light);
- EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "camera", _edje_edd_edje_part_description_camera);
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "vector", _edje_edd_edje_part_description_vector);
#define EDJE_ADD_ARRAY_MAPPING(Variant, Type, Minus) \
@@ -1303,9 +1181,6 @@ _edje_edd_init(void)
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "box", box);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "table", table);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "external", external);
- EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "mesh_node", mesh_node);
- EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "light", light);
- EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "camera", camera);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "vector", vector);
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Pack_Element);
@@ -1424,8 +1299,6 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "id", id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_HASH_STRING(_edje_edd_edje_part_collection, Edje_Part_Collection, "alias", alias);
EET_DATA_DESCRIPTOR_ADD_HASH_STRING(_edje_edd_edje_part_collection, Edje_Part_Collection, "aliased", aliased);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "scene_size.width", scene_size.width, EDJE_T_FLOAT);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "scene_size.height", scene_size.height, EDJE_T_FLOAT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.min.w", prop.min.w, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.min.h", prop.min.h, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.max.w", prop.max.w, EET_T_INT);
diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c
index 1aa5eb8633..4ee1f03580 100644
--- a/src/lib/edje/edje_edit.c
+++ b/src/lib/edje/edje_edit.c
@@ -1693,9 +1693,6 @@ _mempools_add(Edje_Part_Collection_Directory_Entry *de)
EDIT_EMN(EXTERNAL, Edje_Part_Description_External, de);
EDIT_EMN(SPACER, Edje_Part_Description_Common, de);
EDIT_EMN(SNAPSHOT, Edje_Part_Description_Snapshot, de);
- EDIT_EMN(MESH_NODE, Edje_Part_Description_Mesh_Node, de);
- EDIT_EMN(LIGHT, Edje_Part_Description_Light, de);
- EDIT_EMN(CAMERA, Edje_Part_Description_Camera, de);
EDIT_EMN(part, Edje_Part, de);
EDIT_EMNP(RECTANGLE, Edje_Part_Description_Common, de);
@@ -1710,9 +1707,6 @@ _mempools_add(Edje_Part_Collection_Directory_Entry *de)
EDIT_EMNP(EXTERNAL, Edje_Part_Description_External, de);
EDIT_EMNP(SPACER, Edje_Part_Description_Common, de);
EDIT_EMNP(SNAPSHOT, Edje_Part_Description_Snapshot, de);
- EDIT_EMNP(MESH_NODE, Edje_Part_Description_Mesh_Node, de);
- EDIT_EMNP(LIGHT, Edje_Part_Description_Light, de);
- EDIT_EMNP(CAMERA, Edje_Part_Description_Camera, de);
}
EAPI Eina_Bool
@@ -6298,6 +6292,7 @@ _edje_edit_state_alloc(int type, Edje *ed)
Edje_Part_Description_Common *pd = NULL;
ce = eina_hash_find(ed->file->collection, ed->group);
+ if (!ce) return NULL;
switch (type)
{
@@ -6435,9 +6430,6 @@ edje_edit_state_add(Evas_Object *obj, const char *part, const char *name, double
pd->persp.zplane = EINA_FALSE;
pd->map.zoom.x = FROM_DOUBLE(1.0);
pd->map.zoom.y = FROM_DOUBLE(1.0);
- pd->align_3d.x = FROM_DOUBLE(0.5);
- pd->align_3d.y = FROM_DOUBLE(0.5);
- pd->align_3d.z = FROM_DOUBLE(0.5);
pd->persp.focal = 1000;
if (rp->part->type == EDJE_PART_TYPE_TEXT
@@ -13370,7 +13362,7 @@ _edje_generate_source_of_style(Edje *ed, const char *name, Eina_Strbuf *buf)
}
static Eina_Bool
-_edje_generate_source_of_program(Evas_Object *obj, const char *program, Eina_Strbuf *buf)
+_edje_generate_source_of_program(Evas_Object *obj, const char *prog, Eina_Strbuf *buf)
{
Eina_List *l, *ll;
const char *s;
@@ -13379,15 +13371,13 @@ _edje_generate_source_of_program(Evas_Object *obj, const char *program, Eina_Str
Eina_Bool ret = EINA_TRUE;
Eina_Bool no_transition = EINA_FALSE;
const char *api_name, *api_description;
- Edje_Program *epr;
int tweenmode = 0;
GET_ED_OR_RETURN(EINA_FALSE);
GET_EED_OR_RETURN(EINA_FALSE);
+ GET_EPR_OR_RETURN(EINA_FALSE);
- epr = _edje_program_get_byname(obj, program);
-
- BUF_APPENDF(I3 "program { name: \"%s\";\n", program);
+ BUF_APPENDF(I3 "program { name: \"%s\";\n", prog);
/* Signal */
s = eina_stringshare_add(epr->signal);
@@ -13423,7 +13413,7 @@ _edje_generate_source_of_program(Evas_Object *obj, const char *program, Eina_Str
if (epr->state)
{
BUF_APPENDF(I4 "action: STATE_SET \"%s\" %.2f;\n", epr->state,
- edje_edit_program_value_get(obj, program));
+ edje_edit_program_value_get(obj, prog));
}
break;
diff --git a/src/lib/edje/edje_edit_eo.h b/src/lib/edje/edje_edit_eo.h
index f6c561a57d..c29b6e4da3 100644
--- a/src/lib/edje/edje_edit_eo.h
+++ b/src/lib/edje/edje_edit_eo.h
@@ -23,6 +23,6 @@ typedef Eo Edje_Edit;
*/
#define EDJE_EDIT_CLASS edje_edit_class_get()
-EWAPI const Efl_Class *edje_edit_class_get(void);
+EWAPI const Efl_Class *edje_edit_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c
index b5b3b6663f..bb3828ab3d 100644
--- a/src/lib/edje/edje_embryo.c
+++ b/src/lib/edje/edje_embryo.c
@@ -193,7 +193,7 @@
* POINTER_MODE_NOGRAB = 1,
* POINTER_MODE_NOGREP = 2,
* }
- *
+ *
* set_pointer_mode(part_id, mode)
* set_repeat_events(part_id, rep)
* get_repeat_events(part_id)
@@ -2089,6 +2089,11 @@ _edje_embryo_fn_custom_state(Embryo_Program *ep, Embryo_Cell *params)
if (!(parent = _edje_part_description_find(ed, rp, name, val, EINA_TRUE)))
return 0;
+ rp->custom = eina_mempool_malloc(_edje_real_part_state_mp, sizeof (Edje_Real_Part_State));
+ if (!rp->custom) return 0;
+
+ memset(rp->custom, 0, sizeof (Edje_Real_Part_State));
+
/* now create the custom state */
switch (rp->part->type)
{
@@ -2102,8 +2107,9 @@ case EDJE_PART_TYPE_##Short: \
Edje_Part_Description_##Type * new; \
tmp = (Edje_Part_Description_##Type *)parent; \
new = calloc(1, sizeof (Edje_Part_Description_##Type)); \
+ if (!new) break; \
new->Spec = tmp->Spec; \
- d = &new->common; \
+ To = &new->common; \
break; \
}
@@ -2122,17 +2128,13 @@ case EDJE_PART_TYPE_##Short: \
ALLOC_COPY_DESC(VECTOR, Vector, d, vg);
}
- if (!d) return 0;
-
- rp->custom = eina_mempool_malloc(_edje_real_part_state_mp, sizeof (Edje_Real_Part_State));
- if (!rp->custom)
+ if (!d)
{
- free(d);
+ eina_mempool_free(_edje_real_part_state_mp, rp->custom);
+ rp->custom = NULL;
return 0;
}
- memset(rp->custom, 0, sizeof (Edje_Real_Part_State));
-
*d = *parent;
d->state.name = (char *)eina_stringshare_add("custom");
@@ -4701,7 +4703,7 @@ _edje_embryo_test_run(Edje *ed, Edje_Program *pr, const char *sig, const char *s
pdata = embryo_program_data_get(ed->collection->script);
embryo_program_data_set(ed->collection->script, ed);
/* 5 million instructions is an arbitrary number. on my p4-2.6 here */
- /* IF embryo is ONLY running embryo stuff and NO native calls thats */
+ /* IF embryo is ONLY running embryo stuff and NO native calls that's */
/* about 0.016 seconds, and longer on slower cpu's. if a simple */
/* embryo script snippet hasn't managed to do its work in 5 MILLION */
/* embryo virtual machine instructions - something is wrong, or */
diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c
index 3d4e47207d..b62c12b631 100644
--- a/src/lib/edje/edje_entry.c
+++ b/src/lib/edje/edje_entry.c
@@ -853,7 +853,7 @@ _edje_anchor_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EIN
{
an->en->have_link_pressed = EINA_TRUE;
evas_textblock_cursor_format_append(an->start, "<link_pressed>");
- evas_textblock_cursor_format_prepend(an->end, "</>");
+ evas_textblock_cursor_format_prepend(an->end, "</link_pressed>");
}
}
ev->event_flags |= rp->mask_flags;
@@ -1196,79 +1196,82 @@ _anchors_update(Evas_Textblock_Cursor *c EINA_UNUSED, Evas_Object *o, Entry *en)
free(sel);
an->sel = eina_list_remove_list(an->sel, an->sel);
}
- Evas_Textblock_Rectangle *r, *r_last;
-
- r = range->data;
- r_last = eina_list_last_data_get(range);
- if (r->y != r_last->y)
- {
- /* For multiple range */
- r->h = r->y + r_last->y + r_last->h;
- }
- /* For vertically layout entry */
- if (_is_anchors_outside_viewport(y, r->y, r->h, vy, tvh))
- {
- EINA_LIST_FREE(range, r)
- free(r);
- continue;
- }
- else
- {
- /* XXX: Should consider for horizontal entry but has
- * very minimal usage. Probably we should get the min x
- * and max w for range and then decide whether it is in
- * the viewport or not. Unnecessary calculation for this
- * minimal usage. Please test with large number of anchors
- * after implementing it, if its needed to be.
- */
- }
- for (ll = range; ll; ll = eina_list_next(ll))
+ if (range)
{
- Evas_Object *ob;
+ Evas_Textblock_Rectangle *r, *r_last;
- sel = calloc(1, sizeof(Sel));
- if (!sel)
+ r = range->data;
+ r_last = eina_list_last_data_get(range);
+ if (r->y != r_last->y)
{
- ERR("Running very low on memory");
- break;
+ /* For multiple range */
+ r->h = r->y + r_last->y + r_last->h;
}
- an->sel = eina_list_append(an->sel, sel);
- if (en->rp->part->source5)
+ /* For vertically layout entry */
+ if (_is_anchors_outside_viewport(y, r->y, r->h, vy, tvh))
{
- ob = edje_object_add(ed->base.evas);
- edje_object_file_set(ob, ed->path, en->rp->part->source5);
- evas_object_smart_member_add(ob, smart);
- evas_object_stack_below(ob, o);
- evas_object_clip_set(ob, clip);
- evas_object_pass_events_set(ob, EINA_TRUE);
- sel->obj_bg = ob;
- _edje_subobj_register(ed, sel->obj_bg);
+ EINA_LIST_FREE(range, r)
+ free(r);
+ continue;
}
-
- if (en->rp->part->source6)
+ else
+ {
+ /* XXX: Should consider for horizontal entry but has
+ * very minimal usage. Probably we should get the min x
+ * and max w for range and then decide whether it is in
+ * the viewport or not. Unnecessary calculation for this
+ * minimal usage. Please test with large number of anchors
+ * after implementing it, if its needed to be.
+ */
+ }
+ for (ll = range; ll; ll = eina_list_next(ll))
{
- ob = edje_object_add(ed->base.evas);
- edje_object_file_set(ob, ed->path, en->rp->part->source6);
+ Evas_Object *ob;
+
+ sel = calloc(1, sizeof(Sel));
+ if (!sel)
+ {
+ ERR("Running very low on memory");
+ break;
+ }
+ an->sel = eina_list_append(an->sel, sel);
+ if (en->rp->part->source5)
+ {
+ ob = edje_object_add(ed->base.evas);
+ edje_object_file_set(ob, ed->path, en->rp->part->source5);
+ evas_object_smart_member_add(ob, smart);
+ evas_object_stack_below(ob, o);
+ evas_object_clip_set(ob, clip);
+ evas_object_pass_events_set(ob, EINA_TRUE);
+ sel->obj_bg = ob;
+ _edje_subobj_register(ed, sel->obj_bg);
+ }
+
+ if (en->rp->part->source6)
+ {
+ ob = edje_object_add(ed->base.evas);
+ edje_object_file_set(ob, ed->path, en->rp->part->source6);
+ evas_object_smart_member_add(ob, smart);
+ evas_object_stack_above(ob, o);
+ evas_object_clip_set(ob, clip);
+ evas_object_pass_events_set(ob, EINA_TRUE);
+ sel->obj_fg = ob;
+ _edje_subobj_register(ed, sel->obj_fg);
+ }
+
+ ob = evas_object_rectangle_add(ed->base.evas);
+ evas_object_color_set(ob, 0, 0, 0, 0);
evas_object_smart_member_add(ob, smart);
evas_object_stack_above(ob, o);
evas_object_clip_set(ob, clip);
- evas_object_pass_events_set(ob, EINA_TRUE);
- sel->obj_fg = ob;
- _edje_subobj_register(ed, sel->obj_fg);
+ evas_object_repeat_events_set(ob, EINA_TRUE);
+ evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_DOWN, _edje_anchor_mouse_down_cb, an);
+ evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_UP, _edje_anchor_mouse_up_cb, an);
+ evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_MOVE, _edje_anchor_mouse_move_cb, an);
+ evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_IN, _edje_anchor_mouse_in_cb, an);
+ evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_OUT, _edje_anchor_mouse_out_cb, an);
+ sel->obj = ob;
}
-
- ob = evas_object_rectangle_add(ed->base.evas);
- evas_object_color_set(ob, 0, 0, 0, 0);
- evas_object_smart_member_add(ob, smart);
- evas_object_stack_above(ob, o);
- evas_object_clip_set(ob, clip);
- evas_object_repeat_events_set(ob, EINA_TRUE);
- evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_DOWN, _edje_anchor_mouse_down_cb, an);
- evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_UP, _edje_anchor_mouse_up_cb, an);
- evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_MOVE, _edje_anchor_mouse_move_cb, an);
- evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_IN, _edje_anchor_mouse_in_cb, an);
- evas_object_event_callback_add(ob, EVAS_CALLBACK_MOUSE_OUT, _edje_anchor_mouse_out_cb, an);
- sel->obj = ob;
}
}
@@ -1276,6 +1279,8 @@ _anchors_update(Evas_Textblock_Cursor *c EINA_UNUSED, Evas_Object *o, Entry *en)
{
Evas_Textblock_Rectangle *r;
+ if (!range) break;
+
r = range->data;
*(&(sel->rect)) = *r;
if (_is_anchors_outside_viewport(y, r->y, r->h, vy, tvh) ||
@@ -2078,9 +2083,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!shift) && (!strcmp(ev->keyname, "v")))
+ else if ((super) && (!shift) && (!strcmp(ev->key, "v")))
#else
- else if ((control) && (!shift) && (!strcmp(ev->keyname, "v")))
+ else if ((control) && (!shift) && (!strcmp(ev->key, "v")))
#endif
{
_compose_seq_reset(en);
@@ -2089,9 +2094,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!strcmp(ev->keyname, "a")))
+ else if ((super) && (!strcmp(ev->key, "a")))
#else
- else if ((control) && (!strcmp(ev->keyname, "a")))
+ else if ((control) && (!strcmp(ev->key, "a")))
#endif
{
_compose_seq_reset(en);
@@ -2107,9 +2112,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
}
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (((!shift) && !strcmp(ev->keyname, "c")) || !strcmp(ev->key, "Insert")))
+ else if ((super) && (((!shift) && !strcmp(ev->key, "c")) || !strcmp(ev->key, "Insert")))
#else
- else if ((control) && (((!shift) && !strcmp(ev->keyname, "c")) || !strcmp(ev->key, "Insert")))
+ else if ((control) && (((!shift) && !strcmp(ev->key, "c")) || !strcmp(ev->key, "Insert")))
#endif
{
_compose_seq_reset(en);
@@ -2117,9 +2122,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!shift) && ((!strcmp(ev->keyname, "x") || (!strcmp(ev->keyname, "m")))))
+ else if ((super) && (!shift) && ((!strcmp(ev->key, "x") || (!strcmp(ev->key, "m")))))
#else
- else if ((control) && (!shift) && ((!strcmp(ev->keyname, "x") || (!strcmp(ev->keyname, "m")))))
+ else if ((control) && (!shift) && ((!strcmp(ev->key, "x") || (!strcmp(ev->key, "m")))))
#endif
{
_compose_seq_reset(en);
@@ -2127,9 +2132,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!strcmp(ev->keyname, "z")))
+ else if ((super) && (!strcmp(ev->key, "z")))
#else
- else if ((control) && (!strcmp(ev->keyname, "z")))
+ else if ((control) && (!strcmp(ev->key, "z")))
#endif
{
_compose_seq_reset(en);
@@ -2146,9 +2151,9 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!shift) && (!strcmp(ev->keyname, "y")))
+ else if ((super) && (!shift) && (!strcmp(ev->key, "y")))
#else
- else if ((control) && (!shift) && (!strcmp(ev->keyname, "y")))
+ else if ((control) && (!shift) && (!strcmp(ev->key, "y")))
#endif
{
_compose_seq_reset(en);
@@ -4699,7 +4704,7 @@ _edje_entry_imf_default_focused_rp_get(Edje *ed)
Evas *e;
e = evas_object_evas_get(ed->obj);
- seat = evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_SEAT);
+ seat = evas_default_device_get(e, EVAS_DEVICE_CLASS_SEAT);
seat_name = _edje_seat_name_get(ed, seat);
return _edje_focused_part_get(ed, seat_name);
@@ -4739,7 +4744,11 @@ _edje_entry_imf_retrieve_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_
char *itr = NULL;
size_t len = eina_unicode_utf8_get_len(plain_text);
char *u_text = (char *)malloc(len * sizeof(char) + 1);
- if (!u_text) return EINA_FALSE;
+ if (!u_text)
+ {
+ free(plain_text);
+ return EINA_FALSE;
+ }
itr = u_text;
while (eina_unicode_utf8_next_get(plain_text, &idx))
@@ -4865,6 +4874,20 @@ _edje_entry_imf_event_commit_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED,
_edje_entry_real_part_configure(ed, rp);
}
+static int
+_sort_cb(const void *a1, const void *a2)
+{
+ Ecore_IMF_Preedit_Attr *attr1 = (Ecore_IMF_Preedit_Attr *)a1;
+ Ecore_IMF_Preedit_Attr *attr2 = (Ecore_IMF_Preedit_Attr *)a2;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(attr1, 0);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(attr2, 0);
+
+ if (attr1->start_index < attr2->start_index) return -1;
+ else if (attr1->start_index == attr2->start_index) return 0;
+ else return 1;
+}
+
static void
_edje_entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info EINA_UNUSED)
{
@@ -4927,10 +4950,11 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA
buf = eina_strbuf_new();
if (attrs)
{
+ attrs = eina_list_sort(attrs, 0, EINA_COMPARE_CB(_sort_cb));
+
EINA_LIST_FOREACH(attrs, l, attr)
{
- if (attr->preedit_type < preedit_type_size &&
- tagname[attr->preedit_type])
+ if (attr->preedit_type < preedit_type_size)
{
preedit_attr_str = eina_strbuf_new();
if (preedit_attr_str)
@@ -4940,7 +4964,10 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA
if (markup_txt)
{
- eina_strbuf_append_printf(buf, "<%s>%s</%s>", tagname[attr->preedit_type], markup_txt, tagname[attr->preedit_type]);
+ if (tagname[attr->preedit_type])
+ eina_strbuf_append_printf(buf, "<%s>%s</%s>", tagname[attr->preedit_type], markup_txt, tagname[attr->preedit_type]);
+ else
+ eina_strbuf_append_printf(buf, "%s", markup_txt);
free(markup_txt);
}
eina_strbuf_free(preedit_attr_str);
diff --git a/src/lib/edje/edje_legacy.c b/src/lib/edje/edje_legacy.c
index f3a692b5a0..299b61c598 100644
--- a/src/lib/edje/edje_legacy.c
+++ b/src/lib/edje/edje_legacy.c
@@ -5,8 +5,9 @@
#define GET_REAL_PART_ON_FAIL_RETURN(x) Edje_Real_Part *rp;\
Edje *ed;\
+ if (!part) return x;\
ed = _edje_fetch(obj);\
- if ((!ed) || (!part)) return x;\
+ if (!ed) return x;\
rp = _edje_real_part_recursive_get(&ed, part);\
if (!rp) return x;\
@@ -25,12 +26,13 @@ edje_object_part_geometry_get(const Edje_Object *obj, const char *part, int *x,
{
Edje_Real_Part *rp;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, EINA_FALSE);
// Similar to geometry_get(efl_part(obj, part), x, y, w, h) but the bool
// return value matters here.
ed = _edje_fetch(obj);
- if ((!ed) || (!part))
+ if (!ed)
{
if (x) *x = 0;
if (y) *y = 0;
@@ -219,7 +221,7 @@ EAPI double edje_object_scale_get(const Edje_Object *obj)
EAPI Edje_Drag_Dir
edje_object_part_drag_dir_get(const Evas_Object *obj, const char *part)
{
- return efl_ui_drag_dir_get(efl_part(obj, part));
+ return (Edje_Drag_Dir)efl_ui_drag_dir_get(efl_part(obj, part));
}
EAPI Eina_Bool
@@ -382,8 +384,12 @@ EAPI void
edje_object_part_text_cursor_geometry_get(const Edje_Object *obj, const char * part EINA_UNUSED, int *x, int *y, int *w, int *h)
{
GET_REAL_PART_ON_FAIL_RETURN()
- evas_textblock_cursor_geometry_bidi_get(_edje_text_cursor_get(rp, EDJE_CURSOR_MAIN),
- x, y, w, h, NULL, NULL, NULL, NULL, EVAS_TEXTBLOCK_CURSOR_BEFORE);
+ if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
+ {
+ _edje_entry_cursor_geometry_get(rp, x, y, w, h, NULL);
+ if (x) *x -= ed->x;
+ if (y) *y -= ed->y;
+ }
}
EAPI Eina_Bool
@@ -448,7 +454,7 @@ edje_object_part_text_anchor_geometry_get(const Eo *obj, const char *part, const
}
EAPI void
-edje_object_part_text_style_user_push(Eo *obj EINA_UNUSED, const char *part, const char *style)
+edje_object_part_text_style_user_push(Eo *obj, const char *part, const char *style)
{
Evas_Textblock_Style *ts;
GET_REAL_PART_ON_FAIL_RETURN()
@@ -481,15 +487,16 @@ edje_object_part_text_style_user_pop(Eo *obj, const char *part)
}
EAPI const char *
-edje_object_part_text_style_user_peek(const Eo *obj EINA_UNUSED, const char *part)
+edje_object_part_text_style_user_peek(const Eo *obj, const char *part)
{
Edje_Real_Part *rp;
const Evas_Textblock_Style *ts;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return NULL;
+ if (!ed) return NULL;
rp = _edje_real_part_recursive_get(&ed, part);
if (!rp) return NULL;
if (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) return NULL;
@@ -502,7 +509,7 @@ edje_object_part_text_style_user_peek(const Eo *obj EINA_UNUSED, const char *par
}
EAPI const Eina_List *
-edje_object_part_text_item_list_get(const Eo *obj EINA_UNUSED, const char *part)
+edje_object_part_text_item_list_get(const Eo *obj, const char *part)
{
GET_REAL_PART_ON_FAIL_RETURN(NULL)
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
@@ -512,7 +519,7 @@ edje_object_part_text_item_list_get(const Eo *obj EINA_UNUSED, const char *part)
}
EAPI Eina_Bool
-edje_object_part_text_item_geometry_get(const Eo *obj EINA_UNUSED, const char *part, const char *item, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
+edje_object_part_text_item_geometry_get(const Eo *obj, const char *part, const char *item, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
{
GET_REAL_PART_ON_FAIL_RETURN(EINA_FALSE)
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
@@ -524,14 +531,15 @@ edje_object_part_text_item_geometry_get(const Eo *obj EINA_UNUSED, const char *p
}
EAPI void
-edje_object_text_insert_filter_callback_add(Eo *obj EINA_UNUSED, const char *part, Edje_Text_Filter_Cb func, void *data)
+edje_object_text_insert_filter_callback_add(Eo *obj, const char *part, Edje_Text_Filter_Cb func, void *data)
{
Edje_Text_Insert_Filter_Callback *cb;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN(part);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return;
+ if (!ed) return;
cb = calloc(1, sizeof(Edje_Text_Insert_Filter_Callback));
cb->part = eina_stringshare_add(part);
cb->func = func;
@@ -541,15 +549,16 @@ edje_object_text_insert_filter_callback_add(Eo *obj EINA_UNUSED, const char *par
}
EAPI void *
-edje_object_text_insert_filter_callback_del(Eo *obj EINA_UNUSED, const char *part, Edje_Text_Filter_Cb func)
+edje_object_text_insert_filter_callback_del(Eo *obj, const char *part, Edje_Text_Filter_Cb func)
{
Edje_Text_Insert_Filter_Callback *cb;
Eina_List *l;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return NULL;
+ if (!ed) return NULL;
EINA_LIST_FOREACH(ed->text_insert_filter_callbacks, l, cb)
{
if ((!strcmp(cb->part, part)) && (cb->func == func))
@@ -567,15 +576,16 @@ edje_object_text_insert_filter_callback_del(Eo *obj EINA_UNUSED, const char *par
}
EAPI void *
-edje_object_text_insert_filter_callback_del_full(Eo *obj EINA_UNUSED, const char *part, Edje_Text_Filter_Cb func, void *data)
+edje_object_text_insert_filter_callback_del_full(Eo *obj, const char *part, Edje_Text_Filter_Cb func, void *data)
{
Edje_Text_Insert_Filter_Callback *cb;
Eina_List *l;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return NULL;
+ if (!ed) return NULL;
EINA_LIST_FOREACH(ed->text_insert_filter_callbacks, l, cb)
{
if ((!strcmp(cb->part, part)) && (cb->func == func) &&
@@ -594,14 +604,15 @@ edje_object_text_insert_filter_callback_del_full(Eo *obj EINA_UNUSED, const char
}
EAPI void
-edje_object_text_markup_filter_callback_add(Eo *obj EINA_UNUSED, const char *part, Edje_Markup_Filter_Cb func, void *data)
+edje_object_text_markup_filter_callback_add(Eo *obj, const char *part, Edje_Markup_Filter_Cb func, void *data)
{
Edje_Markup_Filter_Callback *cb;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN(part);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return;
+ if (!ed) return;
cb = calloc(1, sizeof(Edje_Markup_Filter_Callback));
cb->part = eina_stringshare_add(part);
cb->func = func;
@@ -611,15 +622,16 @@ edje_object_text_markup_filter_callback_add(Eo *obj EINA_UNUSED, const char *par
}
EAPI void *
-edje_object_text_markup_filter_callback_del(Eo *obj EINA_UNUSED, const char *part, Edje_Markup_Filter_Cb func)
+edje_object_text_markup_filter_callback_del(Eo *obj, const char *part, Edje_Markup_Filter_Cb func)
{
Edje_Markup_Filter_Callback *cb;
Eina_List *l;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return NULL;
+ if (!ed) return NULL;
EINA_LIST_FOREACH(ed->markup_filter_callbacks, l, cb)
{
if ((!strcmp(cb->part, part)) && (cb->func == func))
@@ -637,15 +649,16 @@ edje_object_text_markup_filter_callback_del(Eo *obj EINA_UNUSED, const char *par
}
EAPI void *
-edje_object_text_markup_filter_callback_del_full(Eo *obj EINA_UNUSED, const char *part, Edje_Markup_Filter_Cb func, void *data)
+edje_object_text_markup_filter_callback_del_full(Eo *obj, const char *part, Edje_Markup_Filter_Cb func, void *data)
{
Edje_Markup_Filter_Callback *cb;
Eina_List *l;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return NULL;
+ if (!ed) return NULL;
EINA_LIST_FOREACH(ed->markup_filter_callbacks, l, cb)
{
if ((!strcmp(cb->part, part)) && (cb->func == func) &&
@@ -668,10 +681,11 @@ edje_object_part_text_user_insert(const Eo *obj, const char *part, const char *t
{
Edje_Real_Part *rp;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN(part);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return;
+ if (!ed) return;
rp = _edje_real_part_recursive_get(&ed, part);
if (!rp) return;
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
@@ -719,11 +733,12 @@ EAPI void
edje_object_part_text_append(Eo *obj, const char *part, const char *text)
{
Edje_Real_Part *rp;
-
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN(part);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return;
+
+ if (!ed) return;
rp = _edje_real_part_recursive_get(&ed, part);
if (!rp) return;
if ((rp->part->type != EDJE_PART_TYPE_TEXTBLOCK)) return;
@@ -745,10 +760,11 @@ edje_object_part_text_escaped_set(Eo *obj, const char *part, const char *text)
Edje_Real_Part *rp;
Eina_Bool int_ret;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, EINA_FALSE);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return EINA_FALSE;
+ if (!ed) return EINA_FALSE;
rp = _edje_real_part_recursive_get(&ed, part);
if (!rp) return EINA_FALSE;
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
@@ -931,10 +947,11 @@ edje_object_part_text_unescaped_set(Eo *obj, const char *part, const char *text_
Edje_Real_Part *rp;
Eina_Bool int_ret = EINA_FALSE;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, EINA_FALSE);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return EINA_FALSE;
+ if (!ed) return EINA_FALSE;
rp = _edje_real_part_recursive_get(&ed, part);
if (!rp) return EINA_FALSE;
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
@@ -954,14 +971,15 @@ edje_object_part_text_unescaped_set(Eo *obj, const char *part, const char *text_
}
EAPI char *
-edje_object_part_text_unescaped_get(const Eo *obj EINA_UNUSED, const char *part)
+edje_object_part_text_unescaped_get(const Eo *obj, const char *part)
{
Edje_Real_Part *rp;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return NULL;
+ if (!ed) return NULL;
/* Need to recalc before providing the object. */
_edje_recalc_do(ed);
@@ -1012,10 +1030,11 @@ edje_object_part_text_insert(Eo *obj, const char *part, const char *text)
{
Edje_Real_Part *rp;
Edje *ed;
+ EINA_SAFETY_ON_NULL_RETURN(part);
ed = _edje_fetch(obj);
- if ((!ed) || (!part)) return;
+ if (!ed) return;
rp = _edje_real_part_recursive_get(&ed, part);
_edje_object_part_text_insert(ed, rp, text);
if (ed->text_change.func)
diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index 92713a2325..acf0826b1d 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -269,23 +269,9 @@ edje_mmap_group_exists(Eina_File *f, const char *glob)
}
EAPI Eina_Bool
-edje_mmap_3d_has(Eina_File *f, const char *group)
+edje_mmap_3d_has(Eina_File *f EINA_UNUSED, const char *group EINA_UNUSED)
{
- Edje_Part_Collection *edc = NULL;
- Edje_File *edf;
- int err_ret = 0;
- Eina_Bool r = EINA_FALSE;
-
- edf = _edje_cache_file_coll_open(f, group, &err_ret, &edc, NULL);
- if (!edf || !edc) return EINA_FALSE;
-
- if (edc->scene_size.width >0 && edc->scene_size.height > 0)
- r = EINA_TRUE;
-
- _edje_cache_coll_unref(edf, edc);
- _edje_cache_file_unref(edf);
-
- return r;
+ return EINA_FALSE;
}
typedef struct _Edje_File_Iterator Edje_File_Iterator;
@@ -951,6 +937,15 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
if (!rp->typedata.container) memerr = EINA_TRUE;
break;
+ case EDJE_PART_TYPE_VECTOR:
+ rp->type = EDJE_RP_TYPE_VECTOR;
+ rp->typedata.vector = calloc(1, sizeof(Edje_Real_Part_Vector));
+ if (!rp->typedata.vector)
+ memerr = EINA_TRUE;
+ else
+ rp->typedata.vector->current_id = -1;
+ break;
+
default:
break;
}
@@ -1044,71 +1039,6 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
rp->object = NULL;
break;
- case EDJE_PART_TYPE_MESH_NODE:
- {
- Evas_Canvas3D_Mesh *mesh = NULL;
- Evas_Canvas3D_Material *material = NULL;
- Edje_Part_Description_Mesh_Node *pd_mesh_node;
-
- rp->node = efl_add(EVAS_CANVAS3D_NODE_CLASS, ed->base.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_MESH));
-
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, ed->base.evas);
- evas_canvas3d_node_mesh_add(rp->node, mesh);
-
- pd_mesh_node = (Edje_Part_Description_Mesh_Node*) rp->chosen_description;
-
- if (pd_mesh_node->mesh_node.mesh.primitive == EVAS_CANVAS3D_MESH_PRIMITIVE_NONE)
- {
- efl_file_simple_load(mesh, ed->file->model_dir->entries[pd_mesh_node->mesh_node.mesh.id].entry, NULL);
- }
- else
- {
- evas_canvas3d_mesh_frame_add(mesh, 0);
- }
-
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, ed->base.evas);
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
- if (pd_mesh_node->mesh_node.texture.need_texture && pd_mesh_node->mesh_node.texture.textured)
- {
- Evas_Canvas3D_Texture *texture = NULL;
-
- texture = efl_add(EVAS_CANVAS3D_TEXTURE_CLASS, ed->base.evas);
- evas_canvas3d_material_texture_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, texture);
- }
- rp->object = NULL;
- }
- break;
-
- case EDJE_PART_TYPE_LIGHT:
- {
- Evas_Canvas3D_Light *light = NULL;
-
- rp->node = efl_add(EVAS_CANVAS3D_NODE_CLASS, ed->base.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_LIGHT));
- light = efl_add(EVAS_CANVAS3D_LIGHT_CLASS, ed->base.evas);
- evas_canvas3d_node_light_set(rp->node, light);
-
- rp->object = NULL;
- break;
- }
-
- case EDJE_PART_TYPE_CAMERA:
- {
- Evas_Canvas3D_Camera *camera = NULL;
-
- rp->node = efl_add(EVAS_CANVAS3D_NODE_CLASS, ed->base.evas, evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_CAMERA));
- camera = efl_add(EVAS_CANVAS3D_CAMERA_CLASS, ed->base.evas);
- evas_canvas3d_node_camera_set(rp->node, camera);
-
- rp->object = evas_object_image_filled_add(ed->base.evas);
-
- Eo* viewport = efl_add(EFL_CANVAS_SCENE3D_CLASS, ed->base.evas);
- evas_object_image_source_set(rp->object, viewport);
- evas_object_show(viewport);
- evas_object_event_callback_add(rp->object, EVAS_CALLBACK_DEL, _evas_object_viewport_del, viewport);
-
- break;
- }
-
default:
ERR("wrong part type %i!", ep->type);
break;
@@ -1374,7 +1304,6 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
default:
/* This list should only be filled by group, box or table, nothing else. */
abort();
- continue;
}
while (source)
@@ -1542,8 +1471,6 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
Eina_List *l, *ll;
it = eina_hash_iterator_data_new(collect);
- /* the eud structs get manually freed below */
- eina_hash_free_cb_set(collect, (void*)eina_list_free);
EINA_ITERATOR_FOREACH(it, l)
{
EINA_LIST_FOREACH(l, ll, eud)
@@ -1954,14 +1881,6 @@ _edje_file_del(Edje *ed)
if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE)
_edje_entry_real_part_shutdown(ed, rp);
- if (rp->object)
- {
- _edje_callbacks_focus_del(rp->object, ed);
- _edje_callbacks_del(rp->object, ed);
- evas_object_del(rp->object);
- rp->object = NULL;
- }
-
if (rp->custom)
{
// xxx: lua2
@@ -2025,6 +1944,30 @@ _edje_file_del(Edje *ed)
free(rp->typedata.swallow);
rp->typedata.swallow = NULL;
}
+ else if ((rp->type == EDJE_RP_TYPE_VECTOR) &&
+ (rp->typedata.vector))
+ {
+ if (rp->typedata.vector->anim)
+ {
+ efl_canvas_object_animation_stop(rp->object);
+ efl_del(rp->typedata.vector->anim);
+ }
+ if (rp->typedata.vector->lottie_virtual_file)
+ eina_file_close(rp->typedata.vector->lottie_virtual_file);
+ if (rp->typedata.vector->lottie_data)
+ free(rp->typedata.vector->lottie_data);
+
+ free(rp->typedata.vector);
+ rp->typedata.vector = NULL;
+ }
+
+ if (rp->object)
+ {
+ _edje_callbacks_focus_del(rp->object, ed);
+ _edje_callbacks_del(rp->object, ed);
+ evas_object_del(rp->object);
+ rp->object = NULL;
+ }
/* Cleanup optional part. */
free(rp->drag);
@@ -2081,6 +2024,7 @@ _edje_file_del(Edje *ed)
_edje_text_part_on_del(ed, ep);
_edje_color_class_on_del(ed, ep);
}
+ _edje_object_textblock_styles_cache_cleanup(ed);
_edje_cache_coll_unref(ed->file, ed->collection);
ed->collection = NULL;
@@ -2177,6 +2121,9 @@ _edje_file_free(Edje_File *edf)
{
for (i = 0; i < edf->image_dir->entries_count; ++i)
eina_stringshare_del(edf->image_dir->entries[i].entry);
+
+ for (i = 0; i < edf->image_dir->vectors_count; ++i)
+ eina_stringshare_del(edf->image_dir->vectors[i].entry);
}
/* Sets have been added after edje received eet dictionary support */
@@ -2190,6 +2137,7 @@ _edje_file_free(Edje_File *edf)
free(edf->image_dir->entries);
free(edf->image_dir->sets);
+ free(edf->image_dir->vectors);
free(edf->image_dir);
}
if (edf->sound_dir)
@@ -2228,6 +2176,22 @@ _edje_file_free(Edje_File *edf)
free(edf->vibration_dir);
}
+ if (edf->filter_dir)
+ {
+ int i;
+
+ if (edf->free_strings)
+ {
+ for (i = 0; i < edf->filter_dir->filters_count; ++i)
+ {
+ eina_stringshare_del(edf->filter_dir->filters[i].name);
+ eina_stringshare_del(edf->filter_dir->filters[i].script);
+ }
+ }
+ free(edf->filter_dir->filters);
+ free(edf->filter_dir);
+ }
+
if (edf->mo_dir)
{
unsigned int i;
@@ -2408,6 +2372,8 @@ _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec, Edje_Part_Collec
if (ec->script) embryo_program_free(ec->script);
_edje_lua2_script_unload(ec);
+ if (ec->limits.parts) free(ec->limits.parts);
+
eina_hash_free(ec->alias);
eina_hash_free(ec->aliased);
@@ -2706,59 +2672,3 @@ _cb_signal_repeat(void *data, Evas_Object *obj, const char *sig, const char *sou
_edje_util_message_send(ed_parent, EDJE_QUEUE_SCRIPT,
EDJE_MESSAGE_SIGNAL, 0, &emsg);
}
-
-EAPI Eina_Bool
-edje_3d_object_add(Evas_Object *obj, Eo **root_node, Eo *scene)
-{
- /* Use default value for state. */
- unsigned int i;
- Edje *ed;
- Edje_Real_Part *rp;
-
- ed = _edje_fetch(obj);
-
- if (!ed)
- {
- ERR("Cannot get edje from object");
- return EINA_FALSE;
- }
-
- if (*root_node == NULL)
- *root_node = efl_add(EVAS_CANVAS3D_NODE_CLASS, ed->base.evas,
- evas_canvas3d_node_type_set(efl_added, EVAS_CANVAS3D_NODE_TYPE_NODE));
-
- if (scene == NULL)
- scene = efl_add(EVAS_CANVAS3D_SCENE_CLASS, ed->base.evas);
-
- if ((*root_node == NULL) || (scene == NULL))
- {
- ERR("Cannot create scene and root node");
- return EINA_FALSE;
- }
-
- for (i = 0; i < ed->table_parts_size; i++)
- {
- rp = ed->table_parts[i];
-
- if (rp->node)
- {
- evas_canvas3d_node_member_add(*root_node, rp->node);
- }
-
- if (rp->part->type == EDJE_PART_TYPE_CAMERA)
- {
- Evas_Object *viewport;
-
- evas_canvas3d_scene_camera_node_set(scene, rp->node);
- evas_canvas3d_scene_root_node_set(scene, *root_node);
- evas_canvas3d_scene_size_set(scene, ed->collection->scene_size.width, ed->collection->scene_size.height);
- evas_canvas3d_scene_background_color_set(scene, 0, 0 ,0 ,0);
-
- viewport = evas_object_image_source_get(rp->object);
- efl_canvas_scene3d_set(viewport, scene);
- }
- }
-
- return EINA_TRUE;
-}
-
diff --git a/src/lib/edje/edje_lua.c b/src/lib/edje/edje_lua.c
index f31c3172fe..1719f5b842 100644
--- a/src/lib/edje/edje_lua.c
+++ b/src/lib/edje/edje_lua.c
@@ -118,7 +118,7 @@ struct _Edje_Lua_Edje_Part_Description
jmp_buf _edje_lua_panic_jmp;
static int
-_edje_lua_custom_panic(EINA_UNUSED lua_State *L)
+_edje_lua_custom_panic(lua_State *L EINA_UNUSED)
{
CRI("PANIC");
longjmp(_edje_lua_panic_jmp, 1);
@@ -1237,7 +1237,7 @@ const Edje_Lua_Reg mObject = {
};
static void
-_edje_lua_object_del_cb(void *data, EINA_UNUSED Evas *e, Evas_Object *obj, EINA_UNUSED void *event_info)
+_edje_lua_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
//printf("_edje_lua_object_delete_cb\n");
lua_State *L = data;
@@ -1939,7 +1939,7 @@ _edje_lua_object_set_precise_is_inside(lua_State *L)
lua_insert(L, -2);
static void
-_edje_lua_object_cb_mouse_in(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
+_edje_lua_object_cb_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info)
{
OBJECT_CB_MACRO("mouse_in");
@@ -1956,7 +1956,7 @@ _edje_lua_object_cb_mouse_in(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
}
static void
-_edje_lua_object_cb_mouse_out(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
+_edje_lua_object_cb_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info)
{
OBJECT_CB_MACRO("mouse_out");
@@ -1973,7 +1973,7 @@ _edje_lua_object_cb_mouse_out(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
}
static void
-_edje_lua_object_cb_mouse_down(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
+_edje_lua_object_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info)
{
OBJECT_CB_MACRO("mouse_down");
@@ -1991,7 +1991,7 @@ _edje_lua_object_cb_mouse_down(void *data, EINA_UNUSED Evas *e, Evas_Object *obj
}
static void
-_edje_lua_object_cb_mouse_up(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
+_edje_lua_object_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info)
{
OBJECT_CB_MACRO("mouse_up");
@@ -2009,7 +2009,7 @@ _edje_lua_object_cb_mouse_up(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
}
static void
-_edje_lua_object_cb_mouse_move(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
+_edje_lua_object_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info)
{
OBJECT_CB_MACRO("mouse_move");
@@ -2027,7 +2027,7 @@ _edje_lua_object_cb_mouse_move(void *data, EINA_UNUSED Evas *e, Evas_Object *obj
}
static void
-_edje_lua_object_cb_mouse_wheel(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
+_edje_lua_object_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info)
{
OBJECT_CB_MACRO("mouse_wheel");
@@ -3476,8 +3476,8 @@ const Edje_Lua_Reg mPart = {
};
static void
-_edje_lua_edje_part_del_cb(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
- EINA_UNUSED void *event_info)
+_edje_lua_edje_part_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
+ void *event_info EINA_UNUSED)
{
//printf("_edje_lua_object_delete_cb\n");
lua_State *L = data;
diff --git a/src/lib/edje/edje_lua2.c b/src/lib/edje/edje_lua2.c
index b204736439..6032528815 100644
--- a/src/lib/edje/edje_lua2.c
+++ b/src/lib/edje/edje_lua2.c
@@ -18,7 +18,7 @@
/**
@page luaref Edje Lua scripting
- @section intro Introduction
+ @section edje_lua_intro Introduction
Lua is intended for script-only objects at this point (with embryo left
for augmenting standard programs). Since script-only objects effectively
diff --git a/src/lib/edje/edje_main.c b/src/lib/edje/edje_main.c
index 02bab59444..f75ca688ee 100644
--- a/src/lib/edje/edje_main.c
+++ b/src/lib/edje/edje_main.c
@@ -39,8 +39,6 @@ edje_init(void)
if (++_edje_init_count != 1)
return _edje_init_count;
- srand(time(NULL));
-
EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_init(), --_edje_init_count);
_edje_default_log_dom = eina_log_domain_register
diff --git a/src/lib/edje/edje_match.c b/src/lib/edje/edje_match.c
index 7f4065ae96..021a891856 100644
--- a/src/lib/edje/edje_match.c
+++ b/src/lib/edje/edje_match.c
@@ -112,8 +112,8 @@ _edje_match_states_insert(Edje_States *list,
static void
_edje_match_states_clear(Edje_States *list,
- EINA_UNUSED unsigned int patterns_size,
- EINA_UNUSED unsigned int patterns_max_length)
+ unsigned int patterns_size EINA_UNUSED,
+ unsigned int patterns_max_length EINA_UNUSED)
{
list->size = 0;
}
@@ -478,7 +478,7 @@ edje_match_programs_exec_check_finals(const unsigned int *signal_finals,
unsigned int i;
unsigned int j;
- /* when not enought memory, they could be NULL */
+ /* when not enough memory, they could be NULL */
if (!signal_finals || !source_finals) return EINA_TRUE;
for (i = 0; i < signal_states->size; ++i)
@@ -753,7 +753,7 @@ _edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp)
static Eina_Rbtree_Direction
_edje_signal_source_node_cmp(const Edje_Signal_Source_Char *n1,
const Edje_Signal_Source_Char *n2,
- EINA_UNUSED void *data)
+ void *data EINA_UNUSED)
{
int cmp;
@@ -766,7 +766,7 @@ _edje_signal_source_node_cmp(const Edje_Signal_Source_Char *n1,
static int
_edje_signal_source_key_cmp(const Edje_Signal_Source_Char *node,
const char *sig,
- EINA_UNUSED int length,
+ int length EINA_UNUSED,
const char *source)
{
int cmp;
@@ -877,7 +877,7 @@ edje_match_signal_source_hash_get(const char *sig,
}
void
-edje_match_signal_source_free(Edje_Signal_Source_Char *key, EINA_UNUSED void *data)
+edje_match_signal_source_free(Edje_Signal_Source_Char *key, void *data EINA_UNUSED)
{
eina_inarray_flush(&key->list);
free(key);
diff --git a/src/lib/edje/edje_message_queue.c b/src/lib/edje/edje_message_queue.c
index 020f89b46d..d92601073b 100644
--- a/src/lib/edje/edje_message_queue.c
+++ b/src/lib/edje/edje_message_queue.c
@@ -223,6 +223,7 @@ again:
if (!lookup_ed) continue;
tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
lookup_ed->messages = eina_inlist_remove(lookup_ed->messages, &(em->inlist_edje));
+ lookup_ed->message.num--;
if (!lookup_ed->delete_me)
{
lookup_ed->processing_messages++;
diff --git a/src/lib/edje/edje_multisense.c b/src/lib/edje/edje_multisense.c
index ce4bd12e87..1bbb457ae3 100644
--- a/src/lib/edje/edje_multisense.c
+++ b/src/lib/edje/edje_multisense.c
@@ -5,14 +5,17 @@
static Eo *out = NULL;
static int outs = 0;
+static Eina_List *ins = NULL;
static Eina_Bool outfail = EINA_FALSE;
static void
_play_finished(void *data EINA_UNUSED, const Efl_Event *event)
{
+ ins = eina_list_remove(ins, event->object);
efl_unref(event->object);
}
+#if defined(_WIN32) || defined(HAVE_PULSE)
static void
_out_fail(void *data EINA_UNUSED, const Efl_Event *event)
{
@@ -20,6 +23,7 @@ _out_fail(void *data EINA_UNUSED, const Efl_Event *event)
efl_unref(event->object);
out = NULL;
}
+#endif
struct _edje_multisense_eet_data
{
@@ -243,6 +247,7 @@ _edje_multisense_internal_sound_sample_play(Edje *ed, const char *sample_name, c
efl_unref(in);
return EINA_FALSE;
}
+ ins = eina_list_append(ins, in);
}
}
return EINA_TRUE;
@@ -346,17 +351,19 @@ void
_edje_multisense_shutdown(void)
{
#ifdef ENABLE_MULTISENSE
+ Eo *in;
if (outs > 0)
{
WRN("Shutting down audio while samples still playing");
}
if (out)
{
- // XXX: this causes an abort inside of pa!!!!!
- //efl_unref(out);
+ efl_unref(out);
out = NULL;
outs = 0;
}
+ EINA_LIST_FREE(ins, in)
+ efl_unref(in);
ecore_audio_shutdown();
#endif
}
diff --git a/src/lib/edje/edje_part.c b/src/lib/edje/edje_part.c
index 978b488934..cd1bf399b2 100644
--- a/src/lib/edje/edje_part.c
+++ b/src/lib/edje/edje_part.c
@@ -24,9 +24,6 @@ _part_type_to_string(unsigned char type)
case EDJE_PART_TYPE_EXTERNAL: typestr = "EXTERNAL"; break;
case EDJE_PART_TYPE_PROXY: typestr = "PROXY"; break;
case EDJE_PART_TYPE_SPACER: typestr = "SPACER"; break;
- case EDJE_PART_TYPE_MESH_NODE: typestr = "MESH_NODE"; break;
- case EDJE_PART_TYPE_LIGHT: typestr = "LIGHT"; break;
- case EDJE_PART_TYPE_CAMERA: typestr = "CAMERA"; break;
case EDJE_PART_TYPE_SNAPSHOT: typestr = "SNAPSHOT"; break;
case EDJE_PART_TYPE_VECTOR: typestr = "VECTOR"; break;
default: break;
@@ -121,7 +118,7 @@ _efl_canvas_layout_part_state_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Layout_P
}
EOLIAN static Efl_Canvas_Layout_Part_Type
-_efl_canvas_layout_part_part_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
+_efl_canvas_layout_part_efl_canvas_layout_part_type_provider_part_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
{
Edje_Real_Part *rp;
@@ -158,7 +155,7 @@ _efl_canvas_layout_part_efl_ui_drag_drag_size_get(const Eo *obj EINA_UNUSED, Efl
EOLIAN static Efl_Ui_Drag_Dir
_efl_canvas_layout_part_efl_ui_drag_drag_dir_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
{
- return _edje_object_part_drag_dir_get(pd->ed, pd->part);
+ return (Efl_Ui_Drag_Dir)_edje_object_part_drag_dir_get(pd->ed, pd->part);
}
EOLIAN static Eina_Bool
@@ -197,24 +194,12 @@ _efl_canvas_layout_part_efl_ui_drag_drag_page_move(Eo *obj EINA_UNUSED, Efl_Canv
return _edje_object_part_drag_page(pd->ed, pd->part, dx, dy);
}
-static Eo *
-_edje_invalid_part_efl_content_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
-{
- ERR("Part '%s' (type: %s) of group '%s' is not a SWALLOW part!", pd->part, _part_type_to_string(pd->rp->type), pd->ed->group);
- return NULL;
-}
-
-static Eina_Bool
-_edje_invalid_part_efl_content_set(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, Eo *subobj EINA_UNUSED)
+EOLIAN static void
+_efl_canvas_layout_part_efl_object_debug_name_override(Eo *obj, Efl_Canvas_Layout_Part_Data *pd, Eina_Strbuf *sb)
{
- ERR("Part '%s' (type: %s) of group '%s' is not a SWALLOW part!", pd->part, _part_type_to_string(pd->rp->type), pd->ed->group);
- return EINA_FALSE;
+ efl_debug_name_override(efl_super(obj, MY_CLASS), sb);
+ eina_strbuf_append_printf(sb, "%s : %s : %s", pd->part, _part_type_to_string(pd->rp->type), pd->ed->group);
}
-/* Internal EO APIs and hidden overrides */
-
-#define EFL_CANVAS_LAYOUT_PART_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_content_get, _edje_invalid_part_efl_content_get), \
- EFL_OBJECT_OP_FUNC(efl_content_set, _edje_invalid_part_efl_content_set), \
-
+#include "efl_canvas_layout_part_type_provider.eo.c"
#include "efl_canvas_layout_part.eo.c"
diff --git a/src/lib/edje/edje_part_invalid.c b/src/lib/edje/edje_part_invalid.c
index 9b939d9f72..1774d297a5 100644
--- a/src/lib/edje/edje_part_invalid.c
+++ b/src/lib/edje/edje_part_invalid.c
@@ -38,7 +38,7 @@ _efl_canvas_layout_part_invalid_efl_canvas_layout_part_state_get(const Eo *proxy
}
EOLIAN static Efl_Canvas_Layout_Part_Type
-_efl_canvas_layout_part_invalid_efl_canvas_layout_part_part_type_get(const Eo *proxy EINA_UNUSED, void *_pd EINA_UNUSED)
+_efl_canvas_layout_part_invalid_efl_canvas_layout_part_type_provider_part_type_get(const Eo *proxy EINA_UNUSED, void *_pd EINA_UNUSED)
{
return EFL_CANVAS_LAYOUT_PART_TYPE_NONE;
}
diff --git a/src/lib/edje/edje_part_text.c b/src/lib/edje/edje_part_text.c
index 4c3e09161a..103a2251eb 100644
--- a/src/lib/edje/edje_part_text.c
+++ b/src/lib/edje/edje_part_text.c
@@ -63,7 +63,7 @@ _efl_canvas_layout_part_text_efl_text_style_text_background_type_get(const Eo *o
PROXY_DATA_GET(obj, pd);
if (pd->rp->part->type == EDJE_PART_TYPE_TEXT)
- return EFL_TEXT_STYLE_BACKGROUND_TYPE_DISABLED;
+ return EFL_TEXT_STYLE_BACKGROUND_TYPE_NONE;
return efl_text_background_type_get(pd->rp->object);
}
@@ -98,13 +98,13 @@ _efl_canvas_layout_part_text_efl_text_style_ ##x ##_color_get(const Eo *obj, \
TEXT_COLOR_IMPL(text_background, BACKING)
TEXT_COLOR_IMPL(text_glow, GLOW)
-TEXT_COLOR_IMPL(text_glow2, GLOW2)
+TEXT_COLOR_IMPL(text_secondary_glow, GLOW2)
TEXT_COLOR_IMPL(text, NORMAL)
TEXT_COLOR_IMPL(text_outline, OUTLINE)
TEXT_COLOR_IMPL(text_shadow, SHADOW)
TEXT_COLOR_IMPL(text_strikethrough, STRIKETHROUGH)
TEXT_COLOR_IMPL(text_underline, UNDERLINE)
-TEXT_COLOR_IMPL(text_underline2, UNDERLINE2)
+TEXT_COLOR_IMPL(text_secondary_underline, UNDERLINE2)
TEXT_COLOR_IMPL(text_underline_dashed, UNDERLINE_DASHED)
EOLIAN static void
@@ -367,13 +367,13 @@ _canvas_layout_user_text_collect(Edje *ed, Edje_User_Defined *eud)
STYLE_COLOR_COLLECT(text_background, BACKING)
STYLE_COLOR_COLLECT(text_glow, GLOW)
- STYLE_COLOR_COLLECT(text_glow2, GLOW2)
+ STYLE_COLOR_COLLECT(text_secondary_glow, GLOW2)
STYLE_COLOR_COLLECT(text, NORMAL)
STYLE_COLOR_COLLECT(text_outline, OUTLINE)
STYLE_COLOR_COLLECT(text_shadow, SHADOW)
STYLE_COLOR_COLLECT(text_strikethrough, STRIKETHROUGH)
STYLE_COLOR_COLLECT(text_underline, UNDERLINE)
- STYLE_COLOR_COLLECT(text_underline2, UNDERLINE2)
+ STYLE_COLOR_COLLECT(text_secondary_underline, UNDERLINE2)
STYLE_COLOR_COLLECT(text_underline_dashed, UNDERLINE_DASHED)
#undef STYLE_COLOR_COLLECT
@@ -486,13 +486,13 @@ _canvas_layout_user_text_apply(Edje_User_Defined *eud, Eo *obj,
STYLE_COLOR_CASE(text_background, BACKING)
STYLE_COLOR_CASE(text_glow, GLOW)
- STYLE_COLOR_CASE(text_glow2, GLOW2)
+ STYLE_COLOR_CASE(text_secondary_glow, GLOW2)
STYLE_COLOR_CASE(text, NORMAL)
STYLE_COLOR_CASE(text_outline, OUTLINE)
STYLE_COLOR_CASE(text_shadow, SHADOW)
STYLE_COLOR_CASE(text_strikethrough, STRIKETHROUGH)
STYLE_COLOR_CASE(text_underline, UNDERLINE)
- STYLE_COLOR_CASE(text_underline2, UNDERLINE2)
+ STYLE_COLOR_CASE(text_secondary_underline, UNDERLINE2)
STYLE_COLOR_CASE(text_underline_dashed, UNDERLINE_DASHED)
#undef STYLE_COLOR_CASE
@@ -511,7 +511,7 @@ _canvas_layout_user_text_apply(Edje_User_Defined *eud, Eo *obj,
case EDJE_PART_TEXT_PROP_FONT:
efl_text_font_family_set(efl_part(obj,
- eud->part),
+ eud->part),
prop->val.font.font);
efl_text_font_size_set(efl_part(obj,
eud->part),
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index 9a293e2e33..818a62195f 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -292,17 +292,6 @@ struct _Edje_String
unsigned int id;
};
-struct _Edje_3D_Vec {
- FLOAT_T x;
- FLOAT_T y;
- FLOAT_T z;
-};
-
-struct _Edje_3D_Int_Vec {
- int x;
- int y;
- int z;
-};
typedef struct _Edje_Position_Scale Edje_Alignment;
typedef struct _Edje_Position_Scale Edje_Position_Scale;
@@ -314,9 +303,6 @@ typedef struct _Edje_Map_Color Edje_Map_Color;
typedef struct _Edje_Aspect_Prefer Edje_Aspect_Prefer;
typedef struct _Edje_Aspect Edje_Aspect;
typedef struct _Edje_String Edje_String;
-typedef struct _Edje_3D_Vec Edje_3D_Vec;
-typedef struct _Edje_3D_Int_Vec Edje_3D_Int_Vec;
-typedef struct _AABB AABB;
typedef struct _Edje_File Edje_File;
typedef struct _Edje_Style Edje_Style;
@@ -361,9 +347,6 @@ typedef struct _Edje_Part_Description_Text Edje_Part_Description_Text;
typedef struct _Edje_Part_Description_Box Edje_Part_Description_Box;
typedef struct _Edje_Part_Description_Table Edje_Part_Description_Table;
typedef struct _Edje_Part_Description_External Edje_Part_Description_External;
-typedef struct _Edje_Part_Description_Mesh_Node Edje_Part_Description_Mesh_Node;
-typedef struct _Edje_Part_Description_Light Edje_Part_Description_Light;
-typedef struct _Edje_Part_Description_Camera Edje_Part_Description_Camera;
typedef struct _Edje_Part_Description_Snapshot Edje_Part_Description_Snapshot;
typedef struct _Edje_Part_Description_Common Edje_Part_Description_Common;
typedef struct _Edje_Part_Description_Spec_Fill Edje_Part_Description_Spec_Fill;
@@ -373,9 +356,6 @@ typedef struct _Edje_Part_Description_Spec_Proxy Edje_Part_Description_Spec_
typedef struct _Edje_Part_Description_Spec_Text Edje_Part_Description_Spec_Text;
typedef struct _Edje_Part_Description_Spec_Box Edje_Part_Description_Spec_Box;
typedef struct _Edje_Part_Description_Spec_Table Edje_Part_Description_Spec_Table;
-typedef struct _Edje_Part_Description_Spec_Mesh_Node Edje_Part_Description_Spec_Mesh_Node;
-typedef struct _Edje_Part_Description_Spec_Light Edje_Part_Description_Spec_Light;
-typedef struct _Edje_Part_Description_Spec_Camera Edje_Part_Description_Spec_Camera;
typedef struct _Edje_Part_Description_Spec_Filter Edje_Part_Description_Spec_Filter;
typedef struct _Edje_Part_Description_Spec_Filter_Data Edje_Part_Description_Spec_Filter_Data;
typedef struct _Edje_Physics_Face Edje_Physics_Face;
@@ -393,6 +373,7 @@ typedef struct _Edje_Real_Part_Container Edje_Real_Part_Container;
typedef struct _Edje_Real_Part_State Edje_Real_Part_State;
typedef struct _Edje_Real_Part_Drag Edje_Real_Part_Drag;
typedef struct _Edje_Real_Part_Set Edje_Real_Part_Set;
+typedef struct _Edje_Real_Part_Vector Edje_Real_Part_Vector;
typedef struct _Edje_Real_Part Edje_Real_Part;
typedef struct _Edje_Running_Program Edje_Running_Program;
typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
@@ -545,12 +526,6 @@ typedef struct _Edje_Signal_Callback_Custom Edje_Signal_Callback_Custom;
/*----------*/
-struct _AABB {
- Edje_3D_Vec relative;
- Edje_3D_Int_Vec offset;
- int rel_to;
-};
-
typedef struct Edje_Image_Hash
{
int id;
@@ -686,10 +661,17 @@ struct _Edje_Image_Directory
unsigned int vectors_count;
};
+typedef enum _Edje_Vector_File_Type
+{
+ EDJE_VECTOR_FILE_TYPE_SVG = 0,
+ EDJE_VECTOR_FILE_TYPE_LOTTIE
+} Edje_Vector_File_Type;
+
struct _Edje_Vector_Directory_Entry
{
const char *entry; /* the nominal name of the vector image - if any */
int id; /* the id no. of the image */
+ Edje_Vector_File_Type type;
};
struct _Edje_Image_Directory_Entry
@@ -817,7 +799,6 @@ struct _Edje_Color_Tree_Node
struct _Edje_Program /* a conditional program to be run */
{
int id; /* id of program */
- int source_3d_id; /* id of real 3D part */
const char *name; /* name of the action */
@@ -916,9 +897,6 @@ struct _Edje_Limit
TYPE TABLE; \
TYPE SPACER; \
TYPE EXTERNAL; \
- TYPE MESH_NODE; \
- TYPE LIGHT; \
- TYPE CAMERA; \
TYPE SNAPSHOT; \
TYPE VECTOR;
@@ -1168,11 +1146,6 @@ struct _Edje_Part_Collection
} patterns;
/* *** *** */
- struct {
- Evas_Real height;
- Evas_Real width;
- } scene_size;
-
unsigned char lua_script_only;
unsigned char broadcast_signal;
unsigned char physics_enabled; /* will be 1 if a body is declared */
@@ -1230,7 +1203,6 @@ struct _Edje_Part
Evas_Event_Flags ignore_flags;
Evas_Event_Flags mask_flags;
unsigned int items_count;
- Edje_3D_Vec scale_3d;
Edje_Part_Api api;
Edje_Part_Allowed_Seat **allowed_seats;
unsigned int allowed_seats_count;
@@ -1366,12 +1338,14 @@ struct _Edje_Part_Description_Common
} physics;
#endif
- Edje_3D_Vec align_3d;
-
unsigned char visible; /* is it shown */
unsigned char limit; /* 0 == no, 1 = width, 2 = height, 3 = both */
unsigned char no_render; /* no_render override @since 1.19 */
unsigned char offset_is_scaled;
+
+ struct {
+ Eina_Bool fixed;
+ } user_set;
};
struct _Edje_Part_Description_Spec_Fill
@@ -1496,112 +1470,12 @@ struct _Edje_Part_Description_Spec_Table
} min;
};
-struct _Edje_Part_Description_Spec_Mesh_Node
-{
- struct {
- Edje_Part_Image_Id **tweens;
- unsigned int tweens_count;
- int id;
- Evas_Canvas3D_Mesh_Primitive primitive;
- Evas_Canvas3D_Vertex_Assembly assembly;
- int frame;
- Eina_Bool set;
- } mesh;
-
- struct {
- Edje_Part_Image_Id **tweens;
- unsigned int tweens_count;
- int id;
- Evas_Canvas3D_Wrap_Mode wrap1;
- Evas_Canvas3D_Wrap_Mode wrap2;
- Evas_Canvas3D_Texture_Filter filter1;
- Evas_Canvas3D_Texture_Filter filter2;
- Eina_Bool need_texture;
- Eina_Bool textured;
- Eina_Bool set;
- } texture;
-
- struct {
- Edje_Color ambient;
- Edje_Color diffuse;
- Edje_Color specular;
- Eina_Bool normal;
- FLOAT_T shininess;
- Evas_Canvas3D_Shader_Mode shade;
- Evas_Canvas3D_Material_Attrib material_attrib;
- } properties;
-
- AABB aabb1;
- AABB aabb2;
-
- struct {
- Evas_Canvas3D_Node_Orientation_Type type;
- FLOAT_T data[6];
- int look_to; /* -1 = whole part collection, or part ID */
- } orientation;
-
- Edje_3D_Vec scale_3d;
-
- struct {
- Edje_3D_Vec point;
-
- unsigned char space;
- } position;
-};
-
-struct _Edje_Part_Description_Spec_Light
-{
- struct {
- Edje_Color ambient;
- Edje_Color diffuse;
- Edje_Color specular;
- } properties;
-
- struct {
- Edje_3D_Vec point;
-
- unsigned char space;
- } position;
-
- struct {
- Evas_Canvas3D_Node_Orientation_Type type;
- FLOAT_T data[6];
- int look_to; /* -1 = whole part collection, or part ID */
- } orientation;
-
- struct {
- Evas_Real fovy;
- Evas_Real aspect;
- Evas_Real frustum_near;
- Evas_Real frustum_far;
- } light;
-};
-
-struct _Edje_Part_Description_Spec_Camera
-{
- struct {
- Evas_Real fovy;
- Evas_Real aspect;
- Evas_Real frustum_near;
- Evas_Real frustum_far;
- } camera;
-
- struct {
- Edje_3D_Vec point;
- unsigned char space;
- } position;
-
- struct {
- Evas_Canvas3D_Node_Orientation_Type type;
- FLOAT_T data[6];
- int look_to; /* -1 = whole part collection, or part ID */
- } orientation;
-};
-
struct _Edje_Part_Description_Spec_Svg
{
- int id; /* the svg id to use */
- Eina_Bool set; /* if vg condition it's content */
+ int id; /* the svg id to use */
+ Eina_Bool set; /* if vg condition it's content */
+ Edje_Vector_File_Type type;
+ double frame;
};
struct _Edje_Part_Description_Image
@@ -1649,24 +1523,6 @@ struct _Edje_Part_Description_External
Eina_List *external_params; /* parameters for external objects */
};
-struct _Edje_Part_Description_Mesh_Node
-{
- Edje_Part_Description_Common common;
- Edje_Part_Description_Spec_Mesh_Node mesh_node;
-};
-
-struct _Edje_Part_Description_Light
-{
- Edje_Part_Description_Common common;
- Edje_Part_Description_Spec_Light light;
-};
-
-struct _Edje_Part_Description_Camera
-{
- Edje_Part_Description_Common common;
- Edje_Part_Description_Spec_Camera camera;
-};
-
struct _Edje_Part_Description_Vector
{
Edje_Part_Description_Common common;
@@ -1723,6 +1579,7 @@ struct _Edje
Eina_List *groups;
+ Eina_Hash *styles;
Edje_Perspective *persp;
Ecore_Animator *animator;
@@ -1877,7 +1734,6 @@ struct _Edje_Calc_Params_Physics
typedef struct _Edje_Calc_Params_Type_Common Edje_Calc_Params_Type_Common;
typedef struct _Edje_Calc_Params_Type_Text Edje_Calc_Params_Type_Text;
-typedef struct _Edje_Calc_Params_Type_Node Edje_Calc_Params_Type_Node;
struct _Edje_Calc_Params_Type_Common
{
@@ -1898,14 +1754,6 @@ struct _Edje_Calc_Params_Type_Text
Edje_Color color2, color3; // 8
}; // 36
-struct _Edje_Calc_Params_Type_Node
-{
- FLOAT_T data[6]; // 48
- Edje_3D_Vec point; // 24
- Edje_3D_Vec scale_3d; // 24
- int frame; // 4
-}; // 100
-
typedef struct _Edje_Calc_Params_Ext Edje_Calc_Params_Ext;
struct _Edje_Calc_Params_Ext
@@ -1923,7 +1771,6 @@ struct _Edje_Calc_Params
union {
Edje_Calc_Params_Type_Common *common;
Edje_Calc_Params_Type_Text *text;
- Edje_Calc_Params_Type_Node *node;
} type; // 4/8
Edje_Calc_Params_Ext *ext; // 4/8
struct {
@@ -1987,6 +1834,7 @@ struct _Edje_Real_Part_Drag
#define EDJE_RP_TYPE_TEXT 1
#define EDJE_RP_TYPE_CONTAINER 2
#define EDJE_RP_TYPE_SWALLOW 3
+#define EDJE_RP_TYPE_VECTOR 4
struct _Edje_Real_Part_Text
{
@@ -2031,6 +1879,18 @@ struct _Edje_Real_Part_Swallow
} swallow_params; // 28 // FIXME: only if type SWALLOW
};
+struct _Edje_Real_Part_Vector
+{
+ Eo *anim;
+ Eina_File *lottie_virtual_file;
+ char *lottie_data;
+ int start_frame;
+ int current_id;
+ Eina_Bool backward : 1;
+ Eina_Bool loop : 1;
+ Eina_Bool is_playing : 1;
+};
+
struct _Edje_Real_Part
{
Edje_Real_Part_State param1; // 32
@@ -2038,7 +1898,6 @@ struct _Edje_Real_Part
Edje_Part *part; // 4
Evas_Object *object; // 4
Evas_Object *nested_smart; // 4
- Eo *node; // 4
Edje_Real_Part_Drag *drag; // 4
Edje_Part_Description_Common *chosen_description; // 4
// WITH EDJE_CALC_CACHE: 307
@@ -2053,6 +1912,7 @@ struct _Edje_Real_Part
Edje_Real_Part_Text *text;
Edje_Real_Part_Container *container;
Edje_Real_Part_Swallow *swallow;
+ Edje_Real_Part_Vector *vector;
} typedata; // 4
FLOAT_T description_pos; // 8
Edje_Rectangle req; // 16
@@ -2500,9 +2360,6 @@ EAPI extern Eina_Mempool *_emp_BOX;
EAPI extern Eina_Mempool *_emp_TABLE;
EAPI extern Eina_Mempool *_emp_EXTERNAL;
EAPI extern Eina_Mempool *_emp_SPACER;
-EAPI extern Eina_Mempool *_emp_MESH_NODE;
-EAPI extern Eina_Mempool *_emp_LIGHT;
-EAPI extern Eina_Mempool *_emp_CAMERA;
EAPI extern Eina_Mempool *_emp_SNAPSHOT;
EAPI extern Eina_Mempool *_emp_part;
EAPI extern Eina_Mempool *_emp_VECTOR;
@@ -2533,13 +2390,6 @@ _edje_calc_params_need_type_text(Edje_Calc_Params *p)
}
static inline void
-_edje_calc_params_need_type_node(Edje_Calc_Params *p)
-{
- if (p->type.node) return;
- p->type.node = calloc(1, sizeof(Edje_Calc_Params_Type_Node));
-}
-
-static inline void
_edje_calc_params_need_ext(Edje_Calc_Params *p)
{
if (p->ext) return;
@@ -2802,14 +2652,17 @@ void _edje_message_del (Edje *ed);
Evas_Textblock_Style * _edje_textblock_style_get(Edje *ed, const char *style);
void _edje_textblock_styles_add(Edje *ed, Edje_Real_Part *ep);
void _edje_textblock_styles_del(Edje *ed, Edje_Part *pt);
+void _edje_object_textblock_style_all_update_text_class(Edje *ed, const char *text_class);
+void _edje_object_textblock_styles_cache_cleanup(Edje *ed);
// Edje File level textblock style api
void _edje_file_textblock_style_all_update(Edje_File *ed);
-void _edje_file_textblock_style_all_update_text_class(Edje_File *edf, const char *text_class);
+void _edje_file_textblock_styles_all_update_text_class(Edje *ed, const char *text_class);
void _edje_file_textblock_style_parse_and_fix(Edje_File *edf);
void _edje_file_textblock_style_cleanup(Edje_File *edf);
Edje_File *_edje_cache_file_coll_open(const Eina_File *file, const char *coll, int *error_ret, Edje_Part_Collection **edc_ret, Edje *ed);
+Edje_File *_edje_file_cache_find(const Eina_File *file);
void _edje_cache_coll_clean(Edje_File *edf);
void _edje_cache_coll_flush(Edje_File *edf);
void _edje_cache_coll_unref(Edje_File *edf, Edje_Part_Collection *edc);
@@ -2904,7 +2757,7 @@ void _edje_lua_shutdown(void);
void __edje_lua_error(const char *file, const char *fnc, int line, lua_State *L, int err_code);
#define _edje_lua_error(L, err_code) \
- __edje_lua_error(__FILE__, __FUNCTION__, __LINE__, L, err_code)
+ __edje_lua_error(__FILE__, __func__, __LINE__, L, err_code)
Eina_Bool _edje_lua_script_only(Edje *ed);
void _edje_lua_script_only_init(Edje *ed);
@@ -3039,7 +2892,7 @@ EAPI void _edje_program_insert(Edje_Part_Collection *ed, Edje_Program *p);
EAPI void _edje_program_remove(Edje_Part_Collection *ed, Edje_Program *p);
void _edje_lua2_error_full(const char *file, const char *fnc, int line, lua_State *L, int err_code);
-#define _edje_lua2_error(L, err_code) _edje_lua2_error_full(__FILE__, __FUNCTION__, __LINE__, L, err_code)
+#define _edje_lua2_error(L, err_code) _edje_lua2_error_full(__FILE__, __func__, __LINE__, L, err_code)
void _edje_lua2_script_init(Edje *ed);
void _edje_lua2_script_shutdown(Edje *ed);
void _edje_lua2_script_load(Edje_Part_Collection *edc, void *data, int size);
@@ -3322,6 +3175,12 @@ char * _edje_text_cursor_content_get(Edje_Real_Part *rp, Efl_Text_Cursor_Handle
void _edje_object_part_text_insert(Edje *ed, Edje_Real_Part *rp, const char *text);
void _edje_internal_proxy_shutdown(void);
+#ifdef BUILD_VG_LOADER_JSON
+void _edje_part_vector_anim_stop(Edje *ed, Edje_Real_Part *rp);
+void _edje_part_vector_anim_pause(Edje *ed, Edje_Real_Part *rp);
+void _edje_part_vector_anim_resume(Edje *ed, Edje_Real_Part *rp);
+void _edje_part_vector_anim_play(Edje *ed, Edje_Real_Part *rp, Eina_Bool backward, Eina_Bool loop);
+#endif
#ifdef HAVE_EPHYSICS
Eina_Bool _edje_ephysics_load(void);
diff --git a/src/lib/edje/edje_program.c b/src/lib/edje/edje_program.c
index b1edd1fa2b..2ee0c22204 100644
--- a/src/lib/edje/edje_program.c
+++ b/src/lib/edje/edje_program.c
@@ -629,7 +629,7 @@ _edje_part_focus_set(Edje *ed, const char *seat_name, Edje_Real_Part *rp)
else /* Use default seat name */
{
e = evas_object_evas_get(ed->obj);
- seat = evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_SEAT);
+ seat = evas_default_device_get(e, EVAS_DEVICE_CLASS_SEAT);
sname = eina_stringshare_ref(_edje_seat_name_get(ed, seat));
}
@@ -1017,7 +1017,7 @@ low_mem_current:
Evas *e;
e = evas_object_evas_get(ed->obj);
- seat = evas_default_device_get(e, EFL_INPUT_DEVICE_TYPE_SEAT);
+ seat = evas_default_device_get(e, EVAS_DEVICE_CLASS_SEAT);
}
if (!pr->targets)
{
@@ -1221,6 +1221,89 @@ low_mem_current:
break;
#endif
+
+#ifdef BUILD_VG_LOADER_JSON
+ case EDJE_ACTION_TYPE_VG_ANIM_STOP:
+ if (_edje_block_break(ed))
+ goto break_prog;
+ EINA_LIST_FOREACH(pr->targets, l, pt)
+ {
+ if (pt->id >= 0)
+ {
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ _edje_part_vector_anim_stop(ed, rp);
+ }
+ }
+ break;
+
+ case EDJE_ACTION_TYPE_VG_ANIM_PAUSE:
+ if (_edje_block_break(ed))
+ goto break_prog;
+ EINA_LIST_FOREACH(pr->targets, l, pt)
+ {
+ if (pt->id >= 0)
+ {
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ _edje_part_vector_anim_pause(ed, rp);
+ }
+ }
+ break;
+
+ case EDJE_ACTION_TYPE_VG_ANIM_RESUME:
+ if (_edje_block_break(ed))
+ goto break_prog;
+ EINA_LIST_FOREACH(pr->targets, l, pt)
+ {
+ if (pt->id >= 0)
+ {
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ _edje_part_vector_anim_resume(ed, rp);
+ }
+ }
+ break;
+
+ case EDJE_ACTION_TYPE_VG_ANIM_LOOP:
+ case EDJE_ACTION_TYPE_VG_ANIM_REWIND:
+ case EDJE_ACTION_TYPE_VG_ANIM_PLAY:
+ if (_edje_block_break(ed))
+ goto break_prog;
+ EINA_LIST_FOREACH(pr->targets, l, pt)
+ {
+ if (pt->id >= 0)
+ {
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ {
+ Eina_Bool vector_anim_backward = EINA_FALSE;
+ Eina_Bool vector_anim_loop = EINA_FALSE;
+
+ if (pr->action == EDJE_ACTION_TYPE_VG_ANIM_REWIND)
+ vector_anim_backward = EINA_TRUE;
+
+ if (pr->action == EDJE_ACTION_TYPE_VG_ANIM_LOOP)
+ vector_anim_loop = EINA_TRUE;
+
+ _edje_part_vector_anim_play(ed, rp,
+ vector_anim_backward,
+ vector_anim_loop);
+ }
+ }
+ }
+ break;
+#else
+ case EDJE_ACTION_TYPE_VG_ANIM_STOP:
+ case EDJE_ACTION_TYPE_VG_ANIM_PAUSE:
+ case EDJE_ACTION_TYPE_VG_ANIM_RESUME:
+ case EDJE_ACTION_TYPE_VG_ANIM_LOOP:
+ case EDJE_ACTION_TYPE_VG_ANIM_REWIND:
+ case EDJE_ACTION_TYPE_VG_ANIM_PLAY:
+ ERR("Evas Vg Json (Lottie) Loader is not supported, Only Static Vector Image(SVG) is available!");
+ break;
+#endif
+
default:
// _edje_emit(ed, "program,start", pr->name);
// _edje_emit(ed, "program,stop", pr->name);
@@ -1267,7 +1350,7 @@ _edje_seat_emit(Edje *ed, Efl_Input_Device *dev, const char *sig, const char *sr
if (dev) seat = efl_input_device_seat_get(dev);
if (seat)
{
- sname = strdup(efl_name_get(seat));
+ sname = eina_strdup(efl_name_get(seat));
mdata = _edje_signal_data_setup(NULL, NULL, sname, free);
}
/* keep sending old style signals for legacy compatibility, but provide */
diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c
index f8d42d9069..d0d794790b 100644
--- a/src/lib/edje/edje_smart.c
+++ b/src/lib/edje/edje_smart.c
@@ -504,7 +504,12 @@ _efl_canvas_layout_efl_observer_update(Eo *obj EINA_UNUSED, Edje *ed, Efl_Object
}
else if (obs == _edje_text_class_member)
{
- _edje_file_textblock_style_all_update_text_class(ed->file, key);
+ if (data == ed)
+ // Object level update
+ _edje_object_textblock_style_all_update_text_class(ed, key);
+ else if ((data == ed->file) || // File level update will pass ed->file
+ (!data)) // Global update will pass NULL
+ _edje_file_textblock_styles_all_update_text_class(ed, key);
#ifdef EDJE_CALC_CACHE
ed->text_part_change = EINA_TRUE;
#endif
diff --git a/src/lib/edje/edje_text.c b/src/lib/edje/edje_text.c
index ef1b149c75..f245c9d04b 100644
--- a/src/lib/edje/edje_text.c
+++ b/src/lib/edje/edje_text.c
@@ -367,14 +367,15 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
*/
if (!chosen_desc->text.fit_x) size = sh;
- if (inlined_font) efl_text_font_source_set(ep->object, ed->path);
- else efl_text_font_source_set(ep->object, NULL);
+ if (size < 1) size = 1;
+ if (inlined_font) efl_text_font_source_set(ep->object, ed->path);
+ else efl_text_font_source_set(ep->object, NULL);
- if (ep->part->scale) efl_gfx_entity_scale_set(ep->object, TO_DOUBLE(sc));
+ if (ep->part->scale) efl_gfx_entity_scale_set(ep->object, TO_DOUBLE(sc));
- efl_text_font_family_set(ep->object, font);
- efl_text_font_size_set(ep->object, size);
- efl_text_set(ep->object, text);
+ efl_text_font_family_set(ep->object, font);
+ efl_text_font_size_set(ep->object, size);
+ efl_text_set(ep->object, text);
part_get_geometry(ep, &tw, &th);
/* only grow the font size if we didn't already reach the max size
diff --git a/src/lib/edje/edje_textblock.c b/src/lib/edje/edje_textblock.c
index d0c5c6d30d..38b737a508 100644
--- a/src/lib/edje/edje_textblock.c
+++ b/src/lib/edje/edje_textblock.c
@@ -493,6 +493,20 @@ _edje_part_textblock_style_text_set(Edje *ed,
return EINA_FALSE;
}
+static char*
+strrstr(const char* haystack, const char* violate)
+{
+ char *s_ret = NULL;
+ char *tmp = NULL;
+ const char *_haystack = haystack;
+ size_t len = strlen(violate);
+ while((tmp = strstr(_haystack, violate))){
+ s_ret = tmp;
+ _haystack = tmp + len;
+ }
+ return s_ret;
+}
+
void
_edje_part_recalc_single_textblock(FLOAT_T sc,
Edje *ed,
@@ -522,11 +536,24 @@ _edje_part_recalc_single_textblock(FLOAT_T sc,
size_t size_array_len = 0;
Eina_List *l;
unsigned int *value;
+ Evas_Textblock_Style *st = _edje_textblock_style_get(ed, chosen_desc->text.style.str);
+ const char *text_style = evas_textblock_style_get(st);
+ char *s_font_size = (text_style) ? strrstr(text_style,"font_size=") : NULL;
+ if (s_font_size && s_font_size[10])
+ {
+ int font_size = (int) strtol(&s_font_size[10], NULL, 10);
+ if (font_size > 0)
+ {
+ chosen_desc->text.size_range_max = font_size;
+ if (chosen_desc->text.size_range_min > chosen_desc->text.size_range_max)
+ chosen_desc->text.size_range_min = chosen_desc->text.size_range_max;
+ }
+ }
EINA_LIST_FOREACH(chosen_desc->text.fit_size_array, l, value)
{
size_array[size_array_len++] = *value;
}
- unsigned int mode = TEXTBLOCK_FIT_MODE_NONE;
+ unsigned int mode = TEXTBLOCK_FIT_MODE_NONE;
if (chosen_desc->text.fit_x)
mode |= TEXTBLOCK_FIT_MODE_WIDTH;
@@ -534,12 +561,14 @@ _edje_part_recalc_single_textblock(FLOAT_T sc,
mode |= TEXTBLOCK_FIT_MODE_HEIGHT;
evas_textblock_fit_options_set(ep->object, mode);
evas_textblock_fit_step_size_set(ep->object, chosen_desc->text.fit_step);
- if ( chosen_desc->text.size_range_min || chosen_desc->text.size_range_max)
- evas_textblock_fit_size_range_set(ep->object, chosen_desc->text.size_range_min, chosen_desc->text.size_range_max);
- if (size_array_len>0)
+ if (size_array_len > 0)
{
evas_textblock_fit_size_array_set(ep->object,size_array,size_array_len);
}
+ else if ( chosen_desc->text.size_range_min || chosen_desc->text.size_range_max)
+ {
+ evas_textblock_fit_size_range_set(ep->object, chosen_desc->text.size_range_min, chosen_desc->text.size_range_max);
+ }
}
if ((ed->file->efl_version.major >= 1) && (ed->file->efl_version.minor >= 19))
diff --git a/src/lib/edje/edje_textblock_styles.c b/src/lib/edje/edje_textblock_styles.c
index d2b8aaa4ba..88d11207ea 100644
--- a/src/lib/edje/edje_textblock_styles.c
+++ b/src/lib/edje/edje_textblock_styles.c
@@ -1,4 +1,72 @@
#include "edje_private.h"
+#include <ctype.h>
+
+void _edje_textblock_style_update(Edje *ed, Edje_Style *stl);
+
+static Edje_Style *
+_edje_textblock_style_copy(Edje_Style *stl)
+{
+ Edje_Style *new_stl;
+
+ new_stl = calloc(1, sizeof(Edje_Style));
+ if (!new_stl) return NULL;
+
+ new_stl->style = evas_textblock_style_new();
+ evas_textblock_style_set(new_stl->style, NULL);
+
+ // just keep a reference.
+ new_stl->tags = stl->tags;
+ new_stl->name = stl->name;
+ new_stl->cache = EINA_FALSE;
+
+ return new_stl;
+}
+
+static void
+_edje_object_textblock_styles_cache_style_free(void *data)
+{
+ Edje_Style *obj_stl = data;
+
+ if (!obj_stl) return;
+
+ if (obj_stl->style) evas_textblock_style_free(obj_stl->style);
+ free(obj_stl);
+}
+
+static Edje_Style *
+_edje_object_textblock_styles_cache_add(Edje *ed, Edje_Style *stl)
+{
+ Edje_Style *obj_stl = eina_hash_find(ed->styles, stl->name);
+ // Find the style in the object cache
+
+ if (!obj_stl)
+ {
+ obj_stl = _edje_textblock_style_copy(stl);
+
+ if (obj_stl)
+ {
+ if (!ed->styles) ed->styles = eina_hash_stringshared_new(_edje_object_textblock_styles_cache_style_free);
+ eina_hash_direct_add(ed->styles, obj_stl->name, obj_stl);
+ _edje_textblock_style_update(ed, obj_stl);
+ }
+ }
+ return obj_stl;
+}
+
+void
+_edje_object_textblock_styles_cache_cleanup(Edje *ed)
+{
+ if (!ed || !ed->styles) return;
+ eina_hash_free(ed->styles);
+ ed->styles = NULL;
+}
+
+static Edje_Style *
+_edje_object_textblock_styles_cache_get(Edje *ed, const char *stl)
+{
+ // Find the style in the object cache
+ return eina_hash_find(ed->styles, stl);
+}
static int
_edje_font_is_embedded(Edje_File *edf, const char *font)
@@ -99,6 +167,10 @@ _edje_format_reparse(Edje_File *edf, const char *str, Edje_Style_Tag *tag_ret, E
char buffer[120];
snprintf(buffer, sizeof(buffer), "edje/fonts/%s", val);
tag_ret->font = eina_stringshare_add(buffer);
+ if (eina_strbuf_length_get(result)) eina_strbuf_append(result, " ");
+ eina_strbuf_append(result, "font=");
+ eina_strbuf_append(result, buffer);
+ continue;
}
else
{
@@ -123,6 +195,57 @@ _edje_format_reparse(Edje_File *edf, const char *str, Edje_Style_Tag *tag_ret, E
}
}
+static void
+_edje_textblock_tag_update(Eina_Strbuf *style, const char *key, const char *new_tag)
+{
+ char *ptr = strstr(eina_strbuf_string_get(style), key);
+ char *last = NULL;
+
+ while (ptr != NULL)
+ {
+ last = ptr;
+ ptr = strstr(ptr + 1, key);
+ }
+
+ if (last)
+ {
+ char *tok = strdup(last);
+ int cnt = 0;
+ while (*tok && !isspace(*tok))
+ {
+ tok++;
+ cnt++;
+ }
+ if (*tok) *tok = 0;
+ tok -= cnt;
+
+ eina_strbuf_replace_last(style, tok, new_tag);
+ free(tok);
+ }
+ else
+ {
+ eina_strbuf_append(style, " ");
+ eina_strbuf_append(style, new_tag);
+ }
+}
+
+static void
+_edje_textblock_font_tag_update(Eina_Strbuf *style, const char *new_value)
+{
+ const char *font_key = "font=";
+ char new_font[256] = {0,};
+ snprintf(new_font, sizeof(new_font), "%s%s", font_key, new_value);
+ _edje_textblock_tag_update(style, font_key, new_font);
+}
+
+static void
+_edje_textblock_font_size_tag_update(Eina_Strbuf *style, double new_value)
+{
+ const char *font_size_key = "font_size=";
+ char new_font_size[32] = {0,};
+ snprintf(new_font_size, sizeof(new_font_size), "%s%.1f", font_size_key, new_value);
+ _edje_textblock_tag_update(style, font_size_key, new_font_size);
+}
/* Update the given evas_style
*
@@ -193,28 +316,22 @@ _edje_textblock_style_update(Edje *ed, Edje_Style *stl)
eina_strbuf_append(txt, fontsource);
}
}
- if (tc && tc->size && !EINA_DBL_EQ(tag->font_size, 0))
+ if (tc && tc->size)
{
double new_size = _edje_text_size_calc(tag->font_size, tc);
if (!EINA_DBL_EQ(tag->font_size, new_size))
{
- char buffer[32];
-
- snprintf(buffer, sizeof(buffer), "%.1f", new_size);
- eina_strbuf_append(txt, " font_size=");
- eina_strbuf_append(txt, buffer);
+ _edje_textblock_font_size_tag_update(txt, new_size);
}
}
/* Add font name last to save evas from multiple loads */
- if (tc && tc->font && tag->font)
+ if (tc && tc->font)
{
const char *f;
char *sfont = NULL;
- eina_strbuf_append(txt, " font=");
-
f = _edje_text_font_get(tag->font, tc->font, &sfont);
- eina_strbuf_append_escaped(txt, f);
+ _edje_textblock_font_tag_update(txt, f);
if (sfont) free(sfont);
}
@@ -230,26 +347,6 @@ _edje_textblock_style_update(Edje *ed, Edje_Style *stl)
eina_strbuf_free(txt);
}
-/*
- * mark all the styles in the Edje_File dirty (except readonly styles)so that
- * subsequent request to style will update before giving the style.
- * Note: this will enable lazy style computation (only when some
- * widget request for new style it will get computed).
- *
- * @param ed The edje containing styles which need to be updated
- */
-void
-_edje_file_textblock_style_all_update(Edje_File *edf)
-{
- Eina_List *l;
- Edje_Style *stl;
-
- if (!edf) return;
-
- EINA_LIST_FOREACH(edf->styles, l, stl)
- if (stl && !stl->readonly) stl->cache = EINA_FALSE;
-}
-
static inline Edje_Style *
_edje_textblock_style_search(Edje *ed, const char *style)
{
@@ -371,9 +468,18 @@ _edje_textblock_styles_del(Edje *ed, Edje_Part *pt)
Evas_Textblock_Style *
_edje_textblock_style_get(Edje *ed, const char *style)
{
+ Edje_Style *stl;
+
if (!style) return NULL;
- Edje_Style *stl = _edje_textblock_style_search(ed, style);
+ // First search in Edje_Object styles list
+ stl = _edje_object_textblock_styles_cache_get(ed, style);
+
+ if (!stl)
+ {
+ // If not found in Edje_Object search in Edje_File styles list
+ stl = _edje_textblock_style_search(ed, style);
+ }
if (!stl) return NULL;
@@ -387,19 +493,21 @@ _edje_textblock_style_get(Edje *ed, const char *style)
return stl->style;
}
-/*
- * Finds all the styles having text class tag as text_class and
- * updates them.
- */
-void
-_edje_file_textblock_style_all_update_text_class(Edje_File *edf, const char *text_class)
+static void
+_edje_textblock_style_all_update_text_class(Edje *ed, const char *text_class, Eina_Bool is_object_level)
{
- Eina_List *l, *ll;
+ Eina_List *ll, *l;
Edje_Style *stl;
+ Edje_Style *obj_stl;
+ Edje_File *edf;
- if (!edf) return;
+ if (!ed) return;
+ if (!ed->file) return;
if (!text_class) return;
+ edf = ed->file;
+
+ // check if there is styles in file that uses this text_class
EINA_LIST_FOREACH(edf->styles, l, stl)
{
Edje_Style_Tag *tag;
@@ -412,15 +520,49 @@ _edje_file_textblock_style_all_update_text_class(Edje_File *edf, const char *tex
if (!strcmp(tag->text_class, text_class))
{
- // just mark it dirty so the next request
- // for this style will trigger recomputation.
- stl->cache = EINA_FALSE;
+ if (is_object_level)
+ {
+ obj_stl = _edje_object_textblock_styles_cache_get(ed, stl->name);
+ if (obj_stl)
+ // If already in Edje styles just make it dirty
+ obj_stl->cache = EINA_FALSE;
+ else
+ // create a copy from it if it's not exists
+ _edje_object_textblock_styles_cache_add(ed, stl);
+ }
+ else
+ {
+ // just mark it dirty so the next request
+ // for this style will trigger recomputation.
+ stl->cache = EINA_FALSE;
+ }
+ // don't need to continue searching
break;
}
}
}
}
+/*
+ * Finds all the styles having text class tag as text_class and
+ * updates them in object level.
+ */
+void
+_edje_object_textblock_style_all_update_text_class(Edje *ed, const char *text_class)
+{
+ _edje_textblock_style_all_update_text_class(ed, text_class, EINA_TRUE);
+}
+
+/*
+ * Finds all the styles having text class tag as text_class and
+ * updates them in file level.
+ */
+void
+_edje_file_textblock_styles_all_update_text_class(Edje *ed, const char *text_class)
+{
+ _edje_textblock_style_all_update_text_class(ed, text_class, EINA_FALSE);
+}
+
/* When we get to here the edje file had been read into memory
* the name of the style is established as well as the name and
* data for the tags. This function will create the Evas_Style
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index f699f835ff..af465288e7 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -326,6 +326,7 @@ edje_language_set(const char *locale)
char *loc;
int length;
+ if (!locale) return;
lookup = strstr(locale, ".");
length = lookup ? lookup - locale : (int)strlen(locale);
loc = alloca(length + 1);
@@ -1336,6 +1337,140 @@ _edje_text_class_list_foreach(const Eina_Hash *hash EINA_UNUSED, const void *key
return EINA_TRUE;
}
+static Edje_File *
+_edje_file_find(const char *file)
+{
+ char *tmp = NULL;
+ Eina_File *f = NULL;
+ Edje_File *edf = NULL;
+
+ if (!file) return NULL;
+
+ tmp = eina_vpath_resolve(file);
+ if (!tmp) return NULL;
+
+ f = eina_file_open(tmp, EINA_FALSE);
+
+ if (tmp) free(tmp);
+ if (!f) return NULL;
+
+ edf = _edje_file_cache_find(f);
+
+ eina_file_close(f);
+ return edf;
+}
+
+EAPI Eina_Bool
+edje_file_text_class_get(const char *file, const char * text_class, const char **font, Evas_Font_Size *size)
+{
+ Edje_Text_Class *tc = NULL;
+ Edje_File *edf = NULL;
+ Eina_Bool ret = EINA_FALSE;
+
+ if (font) *font = NULL;
+ if (size) *size = 0;
+
+ if ((!file) || (!text_class)) return ret;
+ if ((!font) && (!size)) return ret; // No need to go deep
+
+ edf = _edje_file_find(file);
+ if (!edf) return ret;
+
+ tc = eina_hash_find(edf->text_hash, text_class);
+ if (!tc) goto end;
+
+ if (font) *font = tc->font;
+ if (size) *size = tc->size;
+ ret = EINA_TRUE;
+
+end:
+ _edje_cache_file_unref(edf);
+ return ret;
+}
+
+EAPI Eina_Bool
+edje_file_text_class_del(const char *file, const char *text_class)
+{
+ Edje_Text_Class *tc = NULL;
+ Edje_File *edf = NULL;
+ Eina_Bool ret = EINA_FALSE;
+ if ((!file) || (!text_class)) return ret;
+
+ edf = _edje_file_find(file);
+ if (!edf) return ret;
+
+ tc = eina_hash_find(edf->text_hash, text_class);
+ if (!tc) goto end;
+
+ eina_hash_del(edf->text_hash, text_class, tc);
+ eina_stringshare_del(tc->name);
+ eina_stringshare_del(tc->font);
+ free(tc);
+
+ /* Tell all members of the text class to recalc */
+ efl_observable_observers_update(_edje_text_class_member, text_class, edf);
+
+ ret = EINA_TRUE;
+end:
+ _edje_cache_file_unref(edf);
+ return ret;
+}
+
+EAPI Eina_Bool
+edje_file_text_class_set(const char *file, const char *text_class, const char *font, Evas_Font_Size size)
+{
+ Edje_File *edf = NULL;
+ Edje_Text_Class *tc = NULL;
+ Eina_Bool ret = EINA_FALSE;
+
+ if ((!file) || (!text_class)) return ret;
+
+ edf = _edje_file_find(file);
+ if (!edf) return ret;
+
+ // update text_class properties, or create new text_class if not found
+ if (edf->text_hash) tc = eina_hash_find(edf->text_hash, text_class);
+ if (!tc)
+ {
+ /* Create new text class */
+ tc = calloc(1, sizeof(Edje_Text_Class));
+ if (!tc) goto error_end;
+ tc->name = eina_stringshare_add(text_class);
+ if (!tc->name)
+ {
+ free(tc);
+ goto error_end;
+ }
+ if (!edf->text_hash) edf->text_hash = eina_hash_string_small_new(NULL);
+ eina_hash_direct_add(edf->text_hash, text_class, tc);
+
+ tc->font = eina_stringshare_add(font);
+ tc->size = size;
+ }
+ else
+ {
+ /* Match and the same, return */
+ if (((tc->font && font) && !strcmp(tc->font, font)) &&
+ (tc->size == size))
+ goto success_end;
+
+ /* Update the class found */
+ eina_stringshare_replace(&tc->font, font);
+ tc->size = size;
+ }
+
+
+ /* Tell all members of the text class to recalc */
+ efl_observable_observers_update(_edje_text_class_member, text_class, edf);
+
+success_end:
+ ret = EINA_TRUE;
+
+error_end:
+ _edje_cache_file_unref(edf);
+ return ret;
+}
+
EAPI Eina_Bool
edje_object_text_class_set(Evas_Object *obj, const char *text_class, const char *font, Evas_Font_Size size)
{
@@ -1401,7 +1536,7 @@ _efl_canvas_layout_efl_gfx_text_class_text_class_set(Eo *obj EINA_UNUSED, Edje *
text_class, font, size);
}
- efl_observer_update(obj, _edje_text_class_member, text_class, NULL);
+ efl_observer_update(obj, _edje_text_class_member, text_class, ed);
return EINA_TRUE;
}
@@ -1460,7 +1595,7 @@ _efl_canvas_layout_efl_gfx_text_class_text_class_del(Eo *obj EINA_UNUSED, Edje *
efl_gfx_text_class_del(rp->typedata.swallow->swallowed_object, text_class);
}
- efl_observer_update(obj, _edje_text_class_member, text_class, NULL);
+ efl_observer_update(obj, _edje_text_class_member, text_class, ed);
}
typedef struct _Edje_File_Text_Class_Iterator Edje_File_Text_Class_Iterator;
@@ -3200,7 +3335,7 @@ _edje_box_layout_builtin_find(const char *name)
}
static Eina_Rbtree_Direction
-_edje_box_layout_part_external_node_cmp(const Eina_Rbtree *left, const Eina_Rbtree *right, EINA_UNUSED void *data)
+_edje_box_layout_part_external_node_cmp(const Eina_Rbtree *left, const Eina_Rbtree *right, void *data EINA_UNUSED)
{
Edje_Box_Layout *l = (Edje_Box_Layout *)left;
Edje_Box_Layout *r = (Edje_Box_Layout *)right;
@@ -3212,7 +3347,7 @@ _edje_box_layout_part_external_node_cmp(const Eina_Rbtree *left, const Eina_Rbtr
}
static int
-_edje_box_layout_part_external_find_cmp(const Eina_Rbtree *node, const void *key, EINA_UNUSED int length, EINA_UNUSED void *data)
+_edje_box_layout_part_external_find_cmp(const Eina_Rbtree *node, const void *key, int length EINA_UNUSED, void *data EINA_UNUSED)
{
Edje_Box_Layout *l = (Edje_Box_Layout *)node;
return strcmp(key, l->name);
@@ -3293,7 +3428,7 @@ _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data,
}
static void
-_edje_box_layout_part_external_free(Eina_Rbtree *node, EINA_UNUSED void *data)
+_edje_box_layout_part_external_free(Eina_Rbtree *node, void *data EINA_UNUSED)
{
Edje_Box_Layout *l = (Edje_Box_Layout *)node;
@@ -5101,7 +5236,7 @@ _edje_part_table_clear(Edje *ed, const char *part, Eina_Bool clear)
}
static void
-_edje_perspective_obj_del(void *data, EINA_UNUSED Evas *e, EINA_UNUSED Evas_Object *obj, EINA_UNUSED void *event_info)
+_edje_perspective_obj_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Edje_Perspective *ps = data;
Evas_Object *o;
@@ -5828,24 +5963,28 @@ _edje_color_class_on_del(Edje *ed, Edje_Part *ep)
Edje_Text_Class *
_edje_text_class_find(Edje *ed, const char *text_class)
{
- Edje_Text_Class *tc;
+ Edje_Text_Class *tc = NULL;
+
+ if (!text_class) return NULL;
- if ((!ed) || (!text_class)) return NULL;
+ if (!ed)
+ {
+ /* If ed object is NULL, then look through the global scope only */
+ return eina_hash_find(_edje_text_class_hash, text_class);
+ }
/* first look through the object scope */
tc = eina_hash_find(ed->text_classes, text_class);
- if (tc) return tc;
/* next look through the global scope */
- tc = eina_hash_find(_edje_text_class_hash, text_class);
- if (tc) return tc;
+ if (!tc)
+ tc = eina_hash_find(_edje_text_class_hash, text_class);
/* finally, look through the file scope */
- if (ed->file)
+ if (!tc && ed->file)
tc = eina_hash_find(ed->file->text_hash, text_class);
- if (tc) return tc;
- return NULL;
+ return tc;
}
static Eina_Bool
@@ -6093,7 +6232,7 @@ _edje_real_part_swallow_hints_update(Edje_Real_Part *rp)
}
void
-_edje_object_part_swallow_changed_hints_cb(void *data, EINA_UNUSED Evas *e, Evas_Object *obj, EINA_UNUSED void *event_info)
+_edje_object_part_swallow_changed_hints_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Edje_Real_Part *rp;
Edje *ed;
@@ -6245,6 +6384,7 @@ _edje_real_part_swallow_clear(Edje *ed, Edje_Real_Part *rp)
rp);
evas_object_clip_unset(rp->typedata.swallow->swallowed_object);
evas_object_data_del(rp->typedata.swallow->swallowed_object, "\377 edje.swallowing_part");
+ evas_object_data_del(rp->typedata.swallow->swallowed_object, ".edje");
_edje_callbacks_del(rp->typedata.swallow->swallowed_object, ed);
_edje_callbacks_focus_del(rp->typedata.swallow->swallowed_object, ed);
rp->typedata.swallow->swallowed_object = NULL;
@@ -6259,7 +6399,7 @@ _edje_object_preload_helper(Edje *ed)
}
static void
-_edje_object_image_preload_cb(void *data, EINA_UNUSED Evas *e, Evas_Object *obj, EINA_UNUSED void *event_info)
+_edje_object_image_preload_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Edje *ed = data;
@@ -6268,7 +6408,7 @@ _edje_object_image_preload_cb(void *data, EINA_UNUSED Evas *e, Evas_Object *obj,
}
static void
-_edje_object_signal_preload_cb(void *data, Evas_Object *obj, EINA_UNUSED const char *emission, EINA_UNUSED const char *source)
+_edje_object_signal_preload_cb(void *data, Evas_Object *obj, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
{
Edje *ed = data;
@@ -6395,7 +6535,7 @@ edje_string_id_get(const Edje_String *es)
}
static void
-_cb_subobj_del(void *data, EINA_UNUSED Evas *e, Evas_Object *obj, EINA_UNUSED void *event_info)
+_cb_subobj_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Edje *ed = data;
_edje_subobj_unregister(ed, obj);
@@ -6586,7 +6726,7 @@ edje_object_part_text_set(const Edje_Object *obj, const char *part, const char *
ed = _edje_fetch(obj);
- return _edje_efl_text_text_set((Eo *) obj, ed, part, text, EINA_TRUE, EINA_FALSE);
+ return _edje_efl_text_text_set((Eo *) obj, ed, part, text, EINA_TRUE, EINA_TRUE);
}
EAPI const char *
diff --git a/src/lib/edje/efl_canvas_layout.eo b/src/lib/edje/efl_canvas_layout.eo
index ef33c5bd8f..348cb719e1 100644
--- a/src/lib/edje/efl_canvas_layout.eo
+++ b/src/lib/edje/efl_canvas_layout.eo
@@ -6,7 +6,10 @@ class @beta Efl.Canvas.Layout extends Efl.Canvas.Group implements Efl.File, Efl.
Efl.Player, Efl.Playable, Efl.Gfx.Color_Class, Efl.Gfx.Text_Class,
Efl.Gfx.Size_Class
{
- [[Edje object class]]
+ [[Edje object class
+
+ The @Efl.Player.autoplay and @Efl.Player.playback_loop properties both default to $true in this class.
+ ]]
event_c_prefix: efl_layout;
data: Edje;
methods {
@@ -127,7 +130,12 @@ class @beta Efl.Canvas.Layout extends Efl.Canvas.Group implements Efl.File, Efl.
Efl.Part.part_get; [[Returns @Efl.Canvas.Layout_Part]]
Efl.Observer.update;
Efl.Playable.playable { get; }
+ @empty Efl.Player.playing { get; set; }
Efl.Player.paused { get; set; }
+ @empty Efl.Player.playback_position { get; set; }
+ @empty Efl.Player.playback_progress { get; set; }
Efl.Player.playback_speed { get; set; }
+ @empty Efl.Player.autoplay { set; get; }
+ @empty Efl.Player.playback_loop { set; get; }
}
}
diff --git a/src/lib/edje/efl_canvas_layout_part.eo b/src/lib/edje/efl_canvas_layout_part.eo
index 9346cc68d5..20a1443ab5 100644
--- a/src/lib/edje/efl_canvas_layout_part.eo
+++ b/src/lib/edje/efl_canvas_layout_part.eo
@@ -1,6 +1,4 @@
-import efl_canvas_layout_types;
-
-class @beta Efl.Canvas.Layout_Part extends Efl.Object implements Efl.Gfx.Entity, Efl.Ui.Drag
+class @beta Efl.Canvas.Layout_Part extends Efl.Object implements Efl.Gfx.Entity, Efl.Ui.Drag, Efl.Canvas.Layout_Part_Type_Provider
{
[[Common class for part proxy objects for @Efl.Canvas.Layout.
@@ -24,18 +22,10 @@ class @beta Efl.Canvas.Layout_Part extends Efl.Object implements Efl.Gfx.Entity,
val: double(0.0); [[The value of the state.]]
}
}
- @property part_type {
- [[Type of this part in the layout.]]
- get {
- }
- values {
- type: Efl.Canvas.Layout_Part_Type(Efl.Canvas.Layout_Part_Type.none);
- [[One of the types or $none if not an existing part.]]
- }
- }
}
implements {
Efl.Object.finalize;
+ Efl.Object.debug_name_override;
Efl.Gfx.Entity.geometry { get; }
Efl.Ui.Drag.drag_value { set; get; }
Efl.Ui.Drag.drag_size { set; get; }
@@ -44,5 +34,6 @@ class @beta Efl.Canvas.Layout_Part extends Efl.Object implements Efl.Gfx.Entity,
Efl.Ui.Drag.drag_step_move;
Efl.Ui.Drag.drag_page { set; get; }
Efl.Ui.Drag.drag_page_move;
+ Efl.Canvas.Layout_Part_Type_Provider.part_type { get; }
}
}
diff --git a/src/lib/edje/efl_canvas_layout_part_invalid.eo b/src/lib/edje/efl_canvas_layout_part_invalid.eo
index 306b585b7b..ef1741dd47 100644
--- a/src/lib/edje/efl_canvas_layout_part_invalid.eo
+++ b/src/lib/edje/efl_canvas_layout_part_invalid.eo
@@ -14,7 +14,7 @@ class @beta Efl.Canvas.Layout_Part_Invalid extends Efl.Canvas.Layout_Part implem
implements {
// Efl.Canvas.Layout.Part
Efl.Canvas.Layout_Part.state { get; }
- Efl.Canvas.Layout_Part.part_type { get; }
+ Efl.Canvas.Layout_Part_Type_Provider.part_type { get; }
Efl.Gfx.Entity.geometry { get; }
Efl.Ui.Drag.drag_value { set; get; }
Efl.Ui.Drag.drag_size { set; get; }
diff --git a/src/lib/edje/efl_canvas_layout_part_text.eo b/src/lib/edje/efl_canvas_layout_part_text.eo
index a593424062..a0314f1906 100644
--- a/src/lib/edje/efl_canvas_layout_part_text.eo
+++ b/src/lib/edje/efl_canvas_layout_part_text.eo
@@ -11,7 +11,7 @@ enum @beta Efl.Canvas.Layout_Part_Text_Expand
}
class @beta Efl.Canvas.Layout_Part_Text extends Efl.Canvas.Layout_Part implements Efl.Text,
-Efl.Text_Markup, Efl.Text_Format, Efl.Text.Font.Properties, Efl.Text_Style
+Efl.Text_Markup, Efl.Text_Format, Efl.Text_Font_Properties, Efl.Text_Style
{
[[Represents a TEXT part of a layout
@@ -38,14 +38,14 @@ Efl.Text_Markup, Efl.Text_Format, Efl.Text.Font.Properties, Efl.Text_Style
Efl.Text_Markup.markup { get; set; }
Efl.Text_Format.ellipsis { set; get; }
Efl.Text_Format.wrap { set; get; }
- Efl.Text.Font.Properties.font_family { set; get; }
- Efl.Text.Font.Properties.font_size { set; get; }
+ Efl.Text_Font_Properties.font_family { set; get; }
+ Efl.Text_Font_Properties.font_size { set; get; }
Efl.Text_Style.text_color { set; get; }
Efl.Text_Style.text_background_type { set; get; }
Efl.Text_Style.text_background_color { set; get;}
Efl.Text_Style.text_underline_type { set; }
Efl.Text_Style.text_underline_color { set; get; }
- Efl.Text_Style.text_underline2_color { set; get; }
+ Efl.Text_Style.text_secondary_underline_color { set; get; }
Efl.Text_Style.text_underline_dashed_color { set; get; }
Efl.Text_Style.text_underline_height { set; }
Efl.Text_Style.text_underline_dashed_width { set; }
@@ -57,6 +57,6 @@ Efl.Text_Markup, Efl.Text_Format, Efl.Text.Font.Properties, Efl.Text_Style
Efl.Text_Style.text_outline_color { set; get; }
Efl.Text_Style.text_shadow_color { set; get; }
Efl.Text_Style.text_glow_color { set; get; }
- Efl.Text_Style.text_glow2_color { set; get; }
+ Efl.Text_Style.text_secondary_glow_color { set; get; }
}
}
diff --git a/src/lib/edje/efl_canvas_layout_part_type_provider.eo b/src/lib/edje/efl_canvas_layout_part_type_provider.eo
new file mode 100644
index 0000000000..ee43e045b8
--- /dev/null
+++ b/src/lib/edje/efl_canvas_layout_part_type_provider.eo
@@ -0,0 +1,20 @@
+import efl_canvas_layout_types;
+
+interface @beta Efl.Canvas.Layout_Part_Type_Provider
+{
+ [[Common Interface for the Part Type
+
+ The getter for the part type is usefull for different types of part hirachies. This interface can be used to support all the different kinds of part types that are available in EFL.
+ ]]
+ c_prefix: efl_canvas_layout;
+ methods {
+ @property part_type {
+ [[Type of this part in the layout.]]
+ get {
+ }
+ values {
+ type: Efl.Canvas.Layout_Part_Type(Efl.Canvas.Layout_Part_Type.none); [[One of the types or $none if not an existing part.]]
+ }
+ }
+ }
+}
diff --git a/src/lib/edje/efl_canvas_layout_types.eot b/src/lib/edje/efl_canvas_layout_types.eot
index b3eee20d18..f699df937c 100644
--- a/src/lib/edje/efl_canvas_layout_types.eot
+++ b/src/lib/edje/efl_canvas_layout_types.eot
@@ -14,9 +14,6 @@ enum @beta Efl.Canvas.Layout_Part_Type
external = 10, [[External type value.]]
proxy = 11, [[Proxy type value.]]
spacer = 12, [[Spacer type value @since 1.7.]]
- mesh_node = 13, [[Canvas 3D type: mesh node.]]
- light = 14, [[Canvas 3D type: light.]]
- camera = 15, [[Canvas 3D type: camera.]]
snapshot = 16, [[Snapshot @since 1.16.]]
vector = 17, [[Vector @since 1.18.]]
last = 18 [[Last type value.]]
diff --git a/src/lib/edje/efl_layout_group.eo b/src/lib/edje/efl_layout_group.eo
index 77113abc81..c50a966396 100644
--- a/src/lib/edje/efl_layout_group.eo
+++ b/src/lib/edje/efl_layout_group.eo
@@ -109,7 +109,7 @@ interface Efl.Layout.Group
does not exist, and this will return $true if the part is of type
$SPACER in the EDC file ($SPACER parts have type $NONE).
- See also @Efl.Canvas.Layout_Part.part_type.
+ See also @Efl.Canvas.Layout_Part_Type_Provider.part_type.
]]
get {}
keys {
diff --git a/src/lib/edje/meson.build b/src/lib/edje/meson.build
index 1ab13e314c..8332f9525a 100644
--- a/src/lib/edje/meson.build
+++ b/src/lib/edje/meson.build
@@ -3,10 +3,12 @@ edje_deps = [
eet, evas, ecore_evas,
ecore_file, ecore_input,
ecore_imf, ecore_imf_evas,
- embryo, efreet, eio, intl
+ embryo, efreet, eio, intl,
+ buildsystem
]
-edje_pub_deps = [m, evas, eo, efl, lua]
+edje_pub_deps = [evas, eo, efl]
+edje_ext_deps = [m, lua, buildsystem_simple]
if (get_option('physics'))
edje_deps += ephysics
@@ -32,6 +34,7 @@ pub_legacy_eo_files = [
'efl_canvas_layout_part_swallow.eo',
'efl_canvas_layout_part_table.eo',
'efl_canvas_layout_part_text.eo',
+ 'efl_canvas_layout_part_type_provider.eo',
]
pub_eo_files = pub_legacy_eo_files
@@ -101,7 +104,7 @@ edje_header_src = [
'efl_canvas_layout_eo.legacy.h',
]
-edje_src = [
+edje_src = files([
'edje_private.h',
'edje_convert.h',
'edje_box_layout.c',
@@ -140,12 +143,11 @@ edje_src = [
'edje_part_box.c',
'edje_part_text.c',
'edje_part_invalid.c'
-
-]
+])
edje_lib = library('edje',
edje_src, pub_eo_file_target, priv_eo_file_target,
- dependencies: edje_pub_deps + edje_deps,
+ dependencies: edje_pub_deps + edje_deps + edje_ext_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
c_args : [package_c_args],
diff --git a/src/lib/eet/Eet.h b/src/lib/eet/Eet.h
index eb7cb5324f..455042fc0c 100644
--- a/src/lib/eet/Eet.h
+++ b/src/lib/eet/Eet.h
@@ -7,7 +7,7 @@
@date 2000 (created)
- @section toc Table of Contents
+ @section eet_toc Table of Contents
@li @ref eet_main_intro
@li @ref eet_main_compiling
@@ -179,7 +179,6 @@ typedef struct _Eet_Version
int revision; /** < svn revision (0 if a proper release or the svn revision number Eet is built from) */
} Eet_Version;
-EAPI extern Eet_Version *eet_version;
/**
* @defgroup Eet_Group Top level functions
@@ -190,6 +189,11 @@ EAPI extern Eet_Version *eet_version;
*/
/**
+ * Eet Version Information
+ */
+EAPI extern Eet_Version *eet_version;
+
+/**
* @enum _Eet_Error
* All the error identifiers known by Eet.
*/
@@ -665,7 +669,7 @@ eet_mode_get(Eet_File *ef);
* If the eet file handle is not valid nothing will be done.
*
* @since 1.0.0
- *
+ *
* @see eet_clearcache()
*/
EAPI Eet_Error
@@ -932,7 +936,7 @@ eet_list(Eet_File *ef,
* @ingroup Eet_File_Group
* @brief Returns an iterator that will describe each entry of an Eet_File.
* @param ef A valid eet file handle.
- * @return An interator of Eet_Entry.
+ * @return An iterator of Eet_Entry.
*
* @since 1.8.0
*/
@@ -2027,7 +2031,7 @@ eet_identity_open(const char *certificate_file,
/**
* @ingroup Eet_Cipher_Group
- * @brief Close and release all resource used by an Eet_Key.
+ * @brief Close and release all resource used by an Eet_Key.
* A reference counter prevent it from being freed until all file
* using it are also closed.
*
@@ -3192,11 +3196,11 @@ eet_data_write(Eet_File *ef,
/**
* @typedef Eet_Data_Descriptor_Class
- *
- * Callback protoype for Eet_Dump
+ *
+ * Callback protoype for Eet_Dump
*
* @param data To passe to the callback
- * @param str The string to dump
+ * @param str The string to dump
*
*/
typedef void (*Eet_Dump_Callback)(void *data, const char *str);
@@ -4539,6 +4543,7 @@ eet_node_struct_child_new(const char *parent,
Eet_Node *child);
/**
+ * @ingroup Eet_Node_Group
* @brief Gets a node's child nodes.
* @param node The node
* @return The first child node which contains a pointer to the
@@ -4549,6 +4554,7 @@ EAPI Eet_Node *
eet_node_children_get(Eet_Node *node);
/**
+ * @ingroup Eet_Node_Group
* @brief Gets the next node in a list of nodes.
* @param node The node
* @return A node which contains a pointer to the
@@ -4559,6 +4565,7 @@ EAPI Eet_Node *
eet_node_next_get(Eet_Node *node);
/**
+ * @ingroup Eet_Node_Group
* @brief Gets the parent node of a node.
* @param node The node
* @return The parent node of @p node
@@ -4624,6 +4631,7 @@ eet_node_dump(Eet_Node *n,
void *dumpdata);
/**
+ * @ingroup Eet_Node_Group
* @brief Returns the type of a node.
* @param node The node
* @return The node's type (EET_T_$TYPE)
@@ -4633,6 +4641,7 @@ EAPI int
eet_node_type_get(Eet_Node *node);
/**
+ * @ingroup Eet_Node_Group
* @brief Returns the node's data.
* @param node The node
* @return The data contained in the node
@@ -4770,6 +4779,10 @@ struct _Eet_Node_Walk
Eet_Node_Walk_Simple_Callback simple;
};
+/**
+ * @ingroup Eet_Node_Group
+ * Walks trees of #Eet_Node
+ */
EAPI void *
eet_node_walk(void *parent,
const char *name,
diff --git a/src/lib/eet/eet_cipher.c b/src/lib/eet/eet_cipher.c
index 2314c24e03..025750cc98 100644
--- a/src/lib/eet/eet_cipher.c
+++ b/src/lib/eet/eet_cipher.c
@@ -185,21 +185,19 @@ on_error:
# else /* ifdef HAVE_GNUTLS */
/* Openssl private declarations */
- FILE *fp;
EVP_PKEY *pkey = NULL;
X509 *cert = NULL;
if (!emile_cipher_init()) return NULL;
/* Load the X509 certificate in memory. */
- fp = fopen(certificate_file, "rb");
- if (!fp)
- return NULL;
-
- cert = PEM_read_X509(fp, NULL, NULL, NULL);
- fclose(fp);
- if (!cert)
- goto on_error;
+ {
+ BIO* cert_bio = BIO_new_file(certificate_file, "rb");
+ cert = PEM_read_bio_X509(cert_bio, NULL, NULL, NULL);
+ BIO_free(cert_bio);
+ if (!cert)
+ goto on_error;
+ }
/* Check the presence of the public key. Just in case. */
pkey = X509_get_pubkey(cert);
@@ -207,14 +205,13 @@ on_error:
goto on_error;
/* Load the private key in memory. */
- fp = fopen(private_key_file, "rb");
- if (!fp)
- goto on_error;
-
- pkey = PEM_read_PrivateKey(fp, NULL, cb, NULL);
- fclose(fp);
- if (!pkey)
- goto on_error;
+ {
+ BIO* private_key_bio = BIO_new_file(private_key_file, "rb");
+ pkey = PEM_read_bio_PrivateKey(private_key_bio, NULL, cb, NULL);
+ BIO_free(private_key_bio);
+ if (!pkey)
+ goto on_error;
+ }
/* Load the certificate and the private key in Eet_Key structure */
key = malloc(sizeof(Eet_Key));
@@ -567,6 +564,11 @@ eet_identity_sign(FILE *fp,
/* Do the signature. */
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
md_ctx = EVP_MD_CTX_new();
+ if (!md_ctx)
+ {
+ err = EET_ERROR_OUT_OF_MEMORY;
+ goto on_error;
+ }
EVP_SignInit(md_ctx, EVP_sha1());
EVP_SignUpdate(md_ctx, data, st_buf.st_size);
err = EVP_SignFinal(md_ctx,
@@ -779,6 +781,16 @@ eet_identity_check(const void *data_base,
/* Verify the signature */
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
md_ctx = EVP_MD_CTX_new();
+ if (!md_ctx)
+ {
+ err = EET_ERROR_OUT_OF_MEMORY;
+
+ X509_free(x509);
+ EVP_PKEY_free(pkey);
+
+ return NULL;
+ }
+
EVP_VerifyInit(md_ctx, EVP_sha1());
EVP_VerifyUpdate(md_ctx, data_base, data_length);
err = EVP_VerifyFinal(md_ctx, sign, sign_len, pkey);
diff --git a/src/lib/eet/eet_connection.c b/src/lib/eet/eet_connection.c
index c46f614960..eb83f9c8c2 100644
--- a/src/lib/eet/eet_connection.c
+++ b/src/lib/eet/eet_connection.c
@@ -33,9 +33,9 @@ eet_connection_new(Eet_Read_Cb *eet_read_cb,
const void *user_data)
{
Eet_Connection *conn;
-
+
if ((!eet_read_cb) || (!eet_write_cb)) return NULL;
-
+
conn = calloc(1, sizeof (Eet_Connection));
if (!conn) return NULL;
conn->eet_read_cb = eet_read_cb;
@@ -53,12 +53,12 @@ eet_connection_received(Eet_Connection *conn,
do
{
size_t copy_size;
-
+
if (conn->size == 0)
{
const int *msg;
size_t packet_size;
-
+
if (size < (sizeof(int) * 2)) break;
msg = data;
@@ -76,7 +76,7 @@ eet_connection_received(Eet_Connection *conn,
/* Not a partial receive, go the quick way. */
if (!conn->eet_read_cb(data, packet_size, conn->user_data))
break;
-
+
data = (void *)((char *)data + packet_size);
size -= packet_size;
conn->received = 0;
@@ -86,7 +86,7 @@ eet_connection_received(Eet_Connection *conn,
if (conn->allocated < conn->size)
{
void *tmp;
-
+
tmp = realloc(conn->buffer, conn->size);
if (!tmp) break;
conn->buffer = tmp;
@@ -99,15 +99,15 @@ eet_connection_received(Eet_Connection *conn,
(conn->size - conn->received >=
size) ? size : conn->size - conn->received;
memcpy((char *)conn->buffer + conn->received, data, copy_size);
-
+
conn->received += copy_size;
data = (void *)((char *)data + copy_size);
size -= copy_size;
-
+
if (conn->received == conn->size)
{
size_t data_size;
-
+
data_size = conn->size;
conn->size = 0;
conn->received = 0;
@@ -121,7 +121,7 @@ eet_connection_received(Eet_Connection *conn,
}
}
while (size > 0);
-
+
return size;
}
diff --git a/src/lib/eet/eet_data.c b/src/lib/eet/eet_data.c
index 5bcf65f9d6..3815db3d4f 100644
--- a/src/lib/eet/eet_data.c
+++ b/src/lib/eet/eet_data.c
@@ -334,8 +334,8 @@ eet_data_put_null(Eet_Dictionary *ed,
int *size_ret);
static int
-eet_data_get_value(const Eet_Dictionary *ed,
- const void *src,
+eet_data_get_value(const Eet_Dictionary *ed,
+ const void *src,
const void *src_end,
void *dst);
@@ -1306,10 +1306,10 @@ _eina_value_to_eet_type_get(const Eina_Value_Type *eina_type)
}
static int
-eet_data_get_value(const Eet_Dictionary *ed,
- const void *src,
+eet_data_get_value(const Eet_Dictionary *ed,
+ const void *src,
const void *src_end,
- void *dst)
+ void *dst)
{
const Eina_Value_Type *eina_type;
void *tmp;
@@ -1349,9 +1349,9 @@ eet_data_get_value(const Eet_Dictionary *ed,
}
static void *
-eet_data_put_value(Eet_Dictionary *ed,
- const void *src,
- int *size_ret)
+eet_data_put_value(Eet_Dictionary *ed,
+ const void *src,
+ int *size_ret)
{
const Eina_Value *value = *(Eina_Value **)src;
const Eina_Value_Type *value_type;
@@ -2249,7 +2249,7 @@ eet_data_descriptor_element_add(Eet_Data_Descriptor *edd,
ede->counter_name = counter_name;
if (subtype)
- INF("Adding '%s' of size %i to '%s' at offset %i.",
+ INF("Adding '%s' of size %i to '%s' at offset %i.",
subtype->name, subtype->size,
edd->name, offset);
@@ -2299,7 +2299,7 @@ EAPI void *
eet_data_read_cipher_buffer(Eet_File *ef,
Eet_Data_Descriptor *edd,
const char *name,
- const char *cipher_key,
+ const char *cipher_key,
char* buffer,
int buffer_size)
{
@@ -4613,7 +4613,7 @@ eet_data_get_unknown(Eet_Free_Context *context,
memcpy(data, data_ret, subtype->size);
free(data_ret);
}
- else
+ else
{
ptr = data;
*ptr = (void *)data_ret;
diff --git a/src/lib/eet/eet_lib.c b/src/lib/eet/eet_lib.c
index 0e05b2acaf..e1216e6108 100644
--- a/src/lib/eet/eet_lib.c
+++ b/src/lib/eet/eet_lib.c
@@ -1069,7 +1069,7 @@ eet_internal_read1(Eet_File *ef)
(byte_entries > 0x7fffffff), ef))
return NULL;
- /* we can't have more entires than minimum bytes for those! invalid! */
+ /* we can't have more entries than minimum bytes for those! invalid! */
if (eet_test_close((num_entries * 20) > byte_entries, ef))
return NULL;
@@ -1485,7 +1485,7 @@ eet_mmap(const Eina_File *file)
if (ef->mode == EET_FILE_MODE_READ)
eet_cache_add(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc);
-
+
done:
UNLOCK_CACHE;
return ef;
diff --git a/src/lib/eet/meson.build b/src/lib/eet/meson.build
index 8ebdb48dd6..78b5146296 100644
--- a/src/lib/eet/meson.build
+++ b/src/lib/eet/meson.build
@@ -1,11 +1,12 @@
-eet_deps = [crypto, jpeg, rg_etc, m]
+eet_deps = [rg_etc]
eet_pub_deps = [eina, emile, efl]
+eet_ext_deps = [crypto, jpeg, m, rg_etc_simple]
eet_header_src = [
'Eet.h'
]
-eet_src = [
+eet_src = files([
'Eet_private.h',
'eet_alloc.c',
'eet_cipher.c',
@@ -16,11 +17,12 @@ eet_src = [
'eet_lib.c',
'eet_node.c',
'eet_utils.c',
-]
+])
eet_lib = library('eet',
eet_src, pub_eo_file_target,
- dependencies: eet_deps + eet_pub_deps,
+ c_args : package_c_args,
+ dependencies: eet_deps + eet_pub_deps + eet_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/eeze/Eeze.h b/src/lib/eeze/Eeze.h
index f5dab4230d..b9686a12e4 100644
--- a/src/lib/eeze/Eeze.h
+++ b/src/lib/eeze/Eeze.h
@@ -6,7 +6,7 @@
@date 2010 (created)
- @section toc Table of Contents
+ @section eeze_toc Table of Contents
@li @ref eeze_main_intro
@li @ref eeze_main_compiling
@@ -569,7 +569,7 @@ EAPI Eina_Bool eeze_udev_syspath_check_sysattr(const char *syspath, const char *
* @param sysattr The sysattr to set;
* @param value The value of sysattr to be set
* @return @c EINA_TRUE if the sysattr value is set
- * @Since 1.12
+ * @since 1.12
*/
EAPI Eina_Bool eeze_udev_syspath_set_sysattr(const char *syspath, const char *sysattr, double value);
@@ -620,7 +620,7 @@ EAPI Eina_Bool eeze_udev_syspath_is_joystick(const char *syspath);
*
* @param syspath The /sys/ path with or without the /sys/
* @return A integer with the sysnum or -1 on failure
- *
+ *
* @since 1.12
*/
EAPI int eeze_udev_syspath_get_sysnum(const char *syspath);
diff --git a/src/lib/eeze/eeze_disk.c b/src/lib/eeze/eeze_disk.c
index 60c4fa74b7..9747b9801a 100644
--- a/src/lib/eeze/eeze_disk.c
+++ b/src/lib/eeze/eeze_disk.c
@@ -174,10 +174,12 @@ eeze_disk_new(const char *path)
else if (!(dev = _new_device(path)))
return NULL;
-
if (!(disk = calloc(1, sizeof(Eeze_Disk))))
- return NULL;
-
+ {
+ eina_stringshare_del(syspath);
+ udev_device_unref(dev);
+ return NULL;
+ }
if (is_dev)
{
@@ -187,7 +189,6 @@ eeze_disk_new(const char *path)
else
disk->syspath = eina_stringshare_add(udev_device_get_syspath(dev));
-
disk->device = dev;
disk->mount_opts = EEZE_DISK_MOUNTOPT_DEFAULTS;
disk->mount_cmd_changed = EINA_TRUE;
diff --git a/src/lib/eeze/eeze_disk_libmount_new.c b/src/lib/eeze/eeze_disk_libmount_new.c
index f7fd17d0af..a04b91453c 100644
--- a/src/lib/eeze/eeze_disk_libmount_new.c
+++ b/src/lib/eeze/eeze_disk_libmount_new.c
@@ -439,7 +439,7 @@ eeze_mount_tabs_watch(void)
_mountinfo = open("/proc/self/mountinfo", O_RDONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (_mountinfo < 0) goto error;
if (fcntl(_mountinfo, F_SETFL, O_NONBLOCK) < 0) goto error;
-
+
_mountinfo_fdh = ecore_main_fd_handler_file_add(_mountinfo, ECORE_FD_ERROR, _eeze_mount_fdh, NULL, NULL, NULL);
if (!_mountinfo_fdh) goto error;
_fstab_mon = ecore_file_monitor_add("/etc/fstab", _eeze_mount_tab_watcher, NULL);
diff --git a/src/lib/eeze/eeze_net.c b/src/lib/eeze/eeze_net.c
index 47887d74b6..bdd7181993 100644
--- a/src/lib/eeze/eeze_net.c
+++ b/src/lib/eeze/eeze_net.c
@@ -78,7 +78,11 @@ eeze_net_new(const char *name)
}
if (!device) return NULL;
net = calloc(1, sizeof(Eeze_Net));
- if (!net) return NULL;
+ if (!net)
+ {
+ udev_device_unref(device);
+ return NULL;
+ }
EINA_REFCOUNT_INIT(net);
net->device = device;
net->syspath = syspath;
diff --git a/src/lib/eeze/eeze_udev_syspath.c b/src/lib/eeze/eeze_udev_syspath.c
index cf8ee37dd3..4d2a5c237a 100644
--- a/src/lib/eeze/eeze_udev_syspath.c
+++ b/src/lib/eeze/eeze_udev_syspath.c
@@ -53,7 +53,10 @@ eeze_udev_syspath_get_parents(const char *syspath)
return NULL;
if (!(parent = udev_device_get_parent(device)))
- return NULL;
+ {
+ udev_device_unref(device);
+ return NULL;
+ }
for (; parent; child = parent, parent = udev_device_get_parent(child))
{
@@ -78,7 +81,10 @@ eeze_udev_syspath_get_devpath(const char *syspath)
return NULL;
if (!(name = udev_device_get_devnode(device)))
- return NULL;
+ {
+ udev_device_unref(device);
+ return NULL;
+ }
name = eina_stringshare_add(name);
udev_device_unref(device);
@@ -98,7 +104,10 @@ eeze_udev_syspath_get_devname(const char *syspath)
return NULL;
if (!(name = udev_device_get_sysname(device)))
- return NULL;
+ {
+ udev_device_unref(device);
+ return NULL;
+ }
name = eina_stringshare_add(name);
udev_device_unref(device);
@@ -369,7 +378,7 @@ eeze_udev_devpath_get_syspath(const char *devpath)
return ret;
}
-EAPI int
+EAPI int
eeze_udev_syspath_get_sysnum(const char *syspath)
{
_udev_device *device;
diff --git a/src/lib/eeze/eeze_udev_walk.c b/src/lib/eeze/eeze_udev_walk.c
index 78e2aabda4..5df34178a8 100644
--- a/src/lib/eeze/eeze_udev_walk.c
+++ b/src/lib/eeze/eeze_udev_walk.c
@@ -40,7 +40,7 @@ EAPI const char *
eeze_udev_walk_get_sysattr(const char *syspath,
const char *sysattr)
{
- _udev_device *device, *child, *parent;
+ _udev_device *device, *parent;
const char *test = NULL;
if (!syspath)
@@ -49,17 +49,12 @@ eeze_udev_walk_get_sysattr(const char *syspath,
if (!(device = _new_device(syspath)))
return NULL;
- for (parent = device; parent;
- child = parent, parent = udev_device_get_parent(child))
+ for (parent = device; parent && !test;)
{
- if ((test = udev_device_get_sysattr_value(parent, sysattr)))
- {
- test = eina_stringshare_add(test);
- udev_device_unref(device);
- return test;
- }
+ test = udev_device_get_sysattr_value(parent, sysattr);
+ parent = udev_device_get_parent(parent);
}
udev_device_unref(device);
- return NULL;
+ return eina_stringshare_add(test);
}
diff --git a/src/lib/eeze/meson.build b/src/lib/eeze/meson.build
index 313a73d888..1435fe7a2f 100644
--- a/src/lib/eeze/meson.build
+++ b/src/lib/eeze/meson.build
@@ -1,5 +1,6 @@
eeze_deps = [buildsystem]
-eeze_pub_deps = [eina, efl]
+eeze_pub_deps = [eina, efl, ecore, ecore_file]
+eeze_ext_deps = []
pub_eo_file_target = []
eeze_header_src = [
@@ -10,7 +11,7 @@ eeze_header_src = [
join_paths('..','..','bin','eeze','eeze_scanner','eeze_scanner.h')
]
-eeze_src = [
+eeze_src = files([
'eeze_main.c',
'eeze_net.c',
'eeze_net_private.h',
@@ -26,7 +27,7 @@ eeze_src = [
'eeze_disk_udev.c',
'eeze_disk_mount.c',
'eeze_disk_private.h'
-]
+])
if get_option('v4l2')
config_h.set('HAVE_V4L2', '1')
@@ -37,17 +38,17 @@ endif
if (get_option('libmount'))
libmount = dependency('mount')
- eeze_deps += [libmount]
+ eeze_ext_deps += [libmount]
if libmount.version() == '2.19'
- eeze_src += 'eeze_disk_libmount.c'
+ eeze_src += files('eeze_disk_libmount.c')
elif libmount.version() < '2.19'
- eeze_src += 'eeze_disk_libmount_old.c'
+ eeze_src += files('eeze_disk_libmount_old.c')
elif libmount.version() > '2.19'
- eeze_src += 'eeze_disk_libmount_new.c'
+ eeze_src += files('eeze_disk_libmount_new.c')
endif
config_h.set('HAVE_EEZE_MOUNT', '1')
else
- eeze_src += 'eeze_disk_dummy.c'
+ eeze_src += files('eeze_disk_dummy.c')
endif
options_to_check = ['eject', 'mount', 'unmount']
@@ -55,7 +56,7 @@ options_to_check = ['eject', 'mount', 'unmount']
udev = dependency('libudev',
version: ['>=148']
)
-eeze_deps += udev
+eeze_ext_deps += udev
if udev.version() < '199'
config_h.set('OLD_LIBUDEV', '1')
@@ -87,7 +88,7 @@ config_h.set_quoted('EEZE_UNMOUNT_BIN', unmount_bin)
eeze_lib = library('eeze',
eeze_src, pub_eo_file_target,
- dependencies: eeze_deps + eeze_pub_deps + [ecore, ecore_file, buildsystem, eeze_deps],
+ dependencies: eeze_deps + eeze_pub_deps + eeze_deps + eeze_ext_deps,
include_directories : config_dir,
install: true,
c_args : package_c_args,
diff --git a/src/lib/efl/Efl.h b/src/lib/efl/Efl.h
index 649383f2c9..480249fae5 100644
--- a/src/lib/efl/Efl.h
+++ b/src/lib/efl/Efl.h
@@ -52,6 +52,9 @@ extern "C" {
#define EFL_VERSION_1_21 1
#define EFL_VERSION_1_22 1
#define EFL_VERSION_1_23 1
+#define EFL_VERSION_1_24 1
+#define EFL_VERSION_1_25 1
+#define EFL_VERSION_1_26 1
/* Add here all the required ifdef for any @protected method */
#ifdef EFL_BUILD
@@ -212,7 +215,7 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command;
#include "interfaces/efl_text_format.eo.h"
#include "interfaces/efl_text_markup.eo.h"
#include "interfaces/efl_text_markup_util.eo.h"
-#include "interfaces/efl_input_text.eo.h"
+#include "interfaces/efl_input_text_entity.eo.h"
/**
* @brief Get a proxy object referring to a part of an object.
@@ -234,6 +237,100 @@ EAPI Efl_Object *efl_part(const Eo *obj, const char *name);
EAPI void efl_observable_tuple_free(Efl_Observable_Tuple *tuple);
+
+
+static inline Eina_Bool
+efl_config_bool_set(Efl_Config *obj, const char * name, Eina_Bool val)
+{
+ Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_UCHAR);
+ Eina_Bool b;
+ eina_value_set(v, val);
+ b = efl_config_set(obj, name, v);
+ eina_value_free(v);
+ return b;
+}
+
+static inline Eina_Bool
+efl_config_bool_get(const Efl_Config *obj, const char * name)
+{
+ Eina_Value *v = efl_config_get(obj, name);
+ Eina_Bool b = 0;
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_UCHAR)
+ eina_value_get(v, &b);
+ eina_value_free(v);
+ return b;
+}
+
+static inline Eina_Bool
+efl_config_int_set(Efl_Config *obj, const char * name, int val)
+{
+ Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_INT);
+ Eina_Bool b;
+ eina_value_set(v, val);
+ b = efl_config_set(obj, name, v);
+ eina_value_free(v);
+ return b;
+}
+
+static inline int
+efl_config_int_get(const Efl_Config *obj, const char * name)
+{
+ Eina_Value *v = efl_config_get(obj, name);
+ int b = 0;
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_INT)
+ eina_value_get(v, &b);
+ eina_value_free(v);
+ return b;
+}
+
+static inline Eina_Bool
+efl_config_double_set(Efl_Config *obj, const char * name, double val)
+{
+ Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_DOUBLE);
+ Eina_Bool b;
+ eina_value_set(v, val);
+ b = efl_config_set(obj, name, v);
+ eina_value_free(v);
+ return b;
+}
+
+static inline double
+efl_config_double_get(const Efl_Config *obj, const char * name)
+{
+ Eina_Value *v = efl_config_get(obj, name);
+ double b = 0;
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_DOUBLE)
+ eina_value_get(v, &b);
+ eina_value_free(v);
+ return b;
+}
+
+static inline Eina_Bool
+efl_config_string_set(Efl_Config *obj, const char *name, const char *val)
+{
+ Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_STRING);
+ Eina_Bool b;
+ eina_value_set(v, val);
+ b = efl_config_set(obj, name, v);
+ eina_value_free(v);
+ return b;
+}
+
+static inline Eina_Stringshare *
+efl_config_string_get(const Efl_Config *obj, const char *name)
+{
+ Eina_Value *v = efl_config_get(obj, name);
+ Eina_Stringshare *s = 0;
+ if (v && eina_value_type_get(v) == EINA_VALUE_TYPE_STRING)
+ {
+ const char *b = 0;
+ eina_value_get(v, &b);
+ s = eina_stringshare_add(b);
+ }
+ eina_value_free(v);
+ return s;
+}
+
#else
#ifndef EFL_NOLEGACY_API_SUPPORT
diff --git a/src/lib/efl/Efl_Config.h.in b/src/lib/efl/Efl_Config.h.in
index 56732f2c1c..3dbef96659 100644
--- a/src/lib/efl/Efl_Config.h.in
+++ b/src/lib/efl/Efl_Config.h.in
@@ -1,8 +1,8 @@
#ifndef EFL_CONFIG_H
#define EFL_CONFIG_H
-/* Add -DEFL_API_OVERRIDE ot your CFLAGS to override the default
- * installed api set and then fter that -DEFL_NOLEGACY_API_SUPPORT
+/* Add -DEFL_API_OVERRIDE to your CFLAGS to override the default
+ * installed api set and after that -DEFL_NOLEGACY_API_SUPPORT
* as desired
*/
#ifndef EFL_API_OVERRIDE
diff --git a/src/lib/efl/interfaces/efl_config.eo b/src/lib/efl/interfaces/efl_config.eo
index afbe38ec89..449456468c 100644
--- a/src/lib/efl/interfaces/efl_config.eo
+++ b/src/lib/efl/interfaces/efl_config.eo
@@ -27,6 +27,9 @@ interface @beta Efl.Config
}
}
}
+ events {
+ config,changed: string; [[Called when a config value has been changed for the manager object. Passed string is the name of the value or NULL if all values were changed.]]
+ }
}
/* NOTES:
diff --git a/src/lib/efl/interfaces/efl_file.c b/src/lib/efl/interfaces/efl_file.c
index a35710f0f3..206a4eb789 100644
--- a/src/lib/efl/interfaces/efl_file.c
+++ b/src/lib/efl/interfaces/efl_file.c
@@ -69,7 +69,7 @@ _efl_file_mmap_set(Eo *obj, Efl_File_Data *pd, const Eina_File *f)
if (pd->file) eina_file_close(pd->file); // close matching open (dup above) OK
pd->file = file;
pd->loaded = EINA_FALSE;
-
+
if (!pd->setting)
{
/* avoid infinite recursion */
@@ -138,7 +138,7 @@ _efl_file_key_get(const Eo *obj EINA_UNUSED, Efl_File_Data *pd)
return pd->key;
}
-EOLIAN static Eina_Bool
+EOLIAN static Eina_Bool
_efl_file_loaded_get(const Eo *obj EINA_UNUSED, Efl_File_Data *pd)
{
return pd->loaded;
diff --git a/src/lib/efl/interfaces/efl_file_save.eo b/src/lib/efl/interfaces/efl_file_save.eo
index 2340de9c77..e53908f182 100644
--- a/src/lib/efl/interfaces/efl_file_save.eo
+++ b/src/lib/efl/interfaces/efl_file_save.eo
@@ -1,6 +1,3 @@
-import eina_types;
-
-
struct Efl.File_Save_Info
{
[[Info used to determine various attributes when saving a file.
diff --git a/src/lib/efl/interfaces/efl_gfx_color.eo b/src/lib/efl/interfaces/efl_gfx_color.eo
index e507440ace..b457bba039 100644
--- a/src/lib/efl/interfaces/efl_gfx_color.eo
+++ b/src/lib/efl/interfaces/efl_gfx_color.eo
@@ -1,5 +1,3 @@
-import efl_gfx_types;
-
mixin Efl.Gfx.Color
{
[[Efl Gfx Color mixin class
diff --git a/src/lib/efl/interfaces/efl_gfx_frame_controller.eo b/src/lib/efl/interfaces/efl_gfx_frame_controller.eo
index 2d8481d184..02d596a3a3 100644
--- a/src/lib/efl/interfaces/efl_gfx_frame_controller.eo
+++ b/src/lib/efl/interfaces/efl_gfx_frame_controller.eo
@@ -8,6 +8,14 @@ enum @beta Efl.Gfx.Frame_Controller_Loop_Hint {
pingpong = 2 [[Ping-pong bouncing loop: 1->2->3->2->1->2->3->1]]
}
+struct @beta Efl.Gfx.Frame_Sector_Data
+{
+ [[ The infomation of sector for playing section. ]]
+ name: string;
+ startframe: int;
+ endframe: int;
+}
+
interface @beta Efl.Gfx.Frame_Controller
{
[[Efl frame controller of frame based animated object interface.]]
@@ -117,5 +125,13 @@ interface @beta Efl.Gfx.Frame_Controller
endframe: int; [[ The end frame of sector ]]
}
}
+ @property sector_list {
+ [[ The list of sectors for playing section. ]]
+ get {
+ }
+ values {
+ list: iterator<Efl.Gfx.Frame_Sector_Data> @move; [[Iterator to list]]
+ }
+ }
}
}
diff --git a/src/lib/efl/interfaces/efl_gfx_hint.eo b/src/lib/efl/interfaces/efl_gfx_hint.eo
index 676c5ba1ec..d60ee1b297 100644
--- a/src/lib/efl/interfaces/efl_gfx_hint.eo
+++ b/src/lib/efl/interfaces/efl_gfx_hint.eo
@@ -229,7 +229,7 @@ interface Efl.Gfx.Hint
use this hint as a boolean, but some others might consider it as a
proportion, see documentation of each container.
- Note: Default weight hint values are 0.0, for both axis.
+ Note: Default weight hint values are 1.0, for both axis.
]]
values {
x: double; [[Non-negative double value to use as horizontal weight hint.]]
diff --git a/src/lib/efl/interfaces/efl_gfx_image_load_controller.eo b/src/lib/efl/interfaces/efl_gfx_image_load_controller.eo
index 9352244439..477b7f8276 100644
--- a/src/lib/efl/interfaces/efl_gfx_image_load_controller.eo
+++ b/src/lib/efl/interfaces/efl_gfx_image_load_controller.eo
@@ -1,5 +1,4 @@
import eina_types;
-import efl_gfx_types;
/*
enum @beta Efl.Gfx.Image_Load_Controller_State
diff --git a/src/lib/efl/interfaces/efl_gfx_path.c b/src/lib/efl/interfaces/efl_gfx_path.c
index 85be89ce71..4c20fb45b2 100644
--- a/src/lib/efl/interfaces/efl_gfx_path.c
+++ b/src/lib/efl/interfaces/efl_gfx_path.c
@@ -136,8 +136,6 @@ _efl_gfx_path_current_search(const Efl_Gfx_Path_Command *cmd,
{
switch (cmd[i])
{
- case EFL_GFX_PATH_COMMAND_TYPE_END:
- break;
case EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO:
case EFL_GFX_PATH_COMMAND_TYPE_LINE_TO:
if (current_x) *current_x = points[0];
@@ -243,7 +241,7 @@ _efl_gfx_path_bounds_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Path_Data *pd, Eina_
maxy = maxy > pd->points[i + 1] ? maxy : pd->points[i + 1];
}
- EINA_RECTANGLE_SET(r, minx, miny, (maxx - minx), (maxy - miny));
+ EINA_RECTANGLE_SET(r, floor(minx), floor(miny), (ceil(maxx) - floor(minx)), (ceil(maxy) - floor(miny)));
}
EOLIAN static void
@@ -685,7 +683,7 @@ _efl_gfx_path_append_arc_to(Eo *obj, Efl_Gfx_Path_Data *pd,
cy += (sy + y) / 2.0;
// step 4 (F6.5.4)
- // we dont' use arccos (as per w3c doc), see
+ // we don't use arccos (as per w3c doc), see
// http://www.euclideanspace.com/maths/algebra/vectors/angleBetween/index.htm
// note: atan2 (0.0, 1.0) == 0.0
at = atan2(((y1p - cyp) / ry), ((x1p - cxp) / rx));
@@ -1237,7 +1235,7 @@ _number_count(char cmd)
}
static void
-process_command(Eo *obj, Efl_Gfx_Path_Data *pd, char cmd, double *arr, int count, double *cur_x, double *cur_y)
+process_command(Eo *obj, Efl_Gfx_Path_Data *pd, char cmd, double *arr, int count, double *cur_x, double *cur_y, double *start_x, double *start_y)
{
int i;
switch (cmd)
@@ -1284,6 +1282,8 @@ process_command(Eo *obj, Efl_Gfx_Path_Data *pd, char cmd, double *arr, int count
_efl_gfx_path_append_move_to(obj, pd, arr[0], arr[1]);
*cur_x = arr[0];
*cur_y = arr[1];
+ *start_x = arr[0];
+ *start_y = arr[1];
break;
}
case 'l':
@@ -1344,6 +1344,8 @@ process_command(Eo *obj, Efl_Gfx_Path_Data *pd, char cmd, double *arr, int count
case 'Z':
{
_efl_gfx_path_append_close(obj, pd);
+ *cur_x = *start_x;
+ *cur_y = *start_y;
break;
}
case 'a':
@@ -1377,7 +1379,7 @@ _next_command(char *path, char *cmd, double *arr, int *count)
path++;
*count = _number_count(*cmd);
}
- else
+ else
{
if (*cmd == 'm')
*cmd = 'l';
@@ -1422,6 +1424,7 @@ _path_interpolation(Eo *obj, Efl_Gfx_Path_Data *pd,
double from_arr[7], to_arr[7];
int from_count=0, to_count=0;
double cur_x=0, cur_y=0;
+ double start_x=0, start_y=0;
char from_cmd= 0, to_cmd = 0;
char *cur_locale;
@@ -1460,7 +1463,7 @@ _path_interpolation(Eo *obj, Efl_Gfx_Path_Data *pd,
from_arr[i] = interpolate(from_arr[i], to_arr[i], pos);
}
}
- process_command(obj, pd, from_cmd, from_arr, from_count, &cur_x, &cur_y);
+ process_command(obj, pd, from_cmd, from_arr, from_count, &cur_x, &cur_y, &start_x, &start_y);
}
else
{
@@ -1481,6 +1484,7 @@ _efl_gfx_path_append_svg_path(Eo *obj, Efl_Gfx_Path_Data *pd,
double number_array[7];
int number_count = 0;
double cur_x=0, cur_y=0;
+ double start_x=0, start_y=0;
char cmd= 0;
char *path = (char *) svg_path_data;
Eina_Bool arc = EINA_FALSE;
@@ -1502,7 +1506,7 @@ _efl_gfx_path_append_svg_path(Eo *obj, Efl_Gfx_Path_Data *pd,
//printf("Error parsing command\n");
goto error;
}
- process_command(obj, pd, cmd, number_array, number_count, &cur_x, &cur_y);
+ process_command(obj, pd, cmd, number_array, number_count, &cur_x, &cur_y, &start_x, &start_y);
if ((!arc) && ((cmd == 'a') || (cmd == 'A') ||
(cmd == 'e') || (cmd == 'E')))
arc = EINA_TRUE;
@@ -1513,6 +1517,7 @@ _efl_gfx_path_append_svg_path(Eo *obj, Efl_Gfx_Path_Data *pd,
if (pd->path_data)
free(pd->path_data);
pd->path_data = malloc(strlen(svg_path_data) + 1);
+ if (!pd->path_data) goto error;
strcpy(pd->path_data, svg_path_data);
}
@@ -1536,11 +1541,4 @@ _efl_gfx_path_copy_from(Eo *obj, Efl_Gfx_Path_Data *pd, const Eo *dup_from)
_efl_gfx_path_path_set(obj, pd, from->commands, from->points);
}
-EOLIAN static void
-_efl_gfx_path_efl_object_destructor(Eo *obj, Efl_Gfx_Path_Data *pd)
-{
- _efl_gfx_path_reset(obj, pd);
- efl_destructor(efl_super(obj, EFL_GFX_PATH_MIXIN));
-}
-
#include "interfaces/efl_gfx_path.eo.c"
diff --git a/src/lib/efl/interfaces/efl_gfx_path.eo b/src/lib/efl/interfaces/efl_gfx_path.eo
index 42a44607ac..3f47497da9 100644
--- a/src/lib/efl/interfaces/efl_gfx_path.eo
+++ b/src/lib/efl/interfaces/efl_gfx_path.eo
@@ -1,7 +1,7 @@
import eina_types;
import efl_gfx_types;
-mixin @beta Efl.Gfx.Path requires Efl.Object
+mixin @beta Efl.Gfx.Path
{
[[EFL graphics path object interface]]
methods {
@@ -267,7 +267,4 @@ mixin @beta Efl.Gfx.Path requires Efl.Object
]]
}
}
- implements {
- Efl.Object.destructor;
- }
}
diff --git a/src/lib/efl/interfaces/efl_gfx_types.eot b/src/lib/efl/interfaces/efl_gfx_types.eot
index 75d70e6e90..59c8f2c64c 100644
--- a/src/lib/efl/interfaces/efl_gfx_types.eot
+++ b/src/lib/efl/interfaces/efl_gfx_types.eot
@@ -46,7 +46,7 @@ enum Efl.Gfx.Render_Op {
enum Efl.Gfx.Path_Command_Type {
[[These values determine how the points are interpreted in a stream of points.
- @since 1.14
+ @since 1.22
]]
end = 0, [[The end of stream , no more points to process.]]
move_to, [[The next point is the start point of a sub path.]]
@@ -60,7 +60,7 @@ enum Efl.Gfx.Cap {
[[These values determine how the end of opened sub-paths are rendered in a
stroke.
@Efl.Gfx.Shape.stroke_cap.set
- @since 1.14
+ @since 1.22
]]
butt = 0, [[The end of lines is rendered as a full stop on the last point itself.]]
round, [[The end of lines is rendered as a half-circle around the last point.]]
@@ -72,11 +72,11 @@ enum Efl.Gfx.Join
{
[[These values determine how two joining lines are rendered in a stroker.
@Efl.Gfx.Shape.stroke_join.set
- @since 1.14
+ @since 1.22
]]
- miter = 0, [[Used to render rounded line joins. Circular arcs are used to join two lines smoothly.]]
- round, [[Used to render beveled line joins. The outer corner of the joined lines is filled by enclosing the triangular region of the corner with a straight line between the outer corners of each stroke.]]
- bevel, [[Used to render mitered line joins. The intersection of the strokes is clipped at a line perpendicular to the bisector of the angle between the strokes, at the distance from the intersection of the segments equal to the product of the miter limit value and the border radius. This prevents long spikes being created.]]
+ miter = 0, [[Used to render mitered line joins. The intersection of the strokes is clipped at a line perpendicular to the bisector of the angle between the strokes, at the distance from the intersection of the segments equal to the product of the miter limit value and the border radius. This prevents long spikes being created.]]
+ round, [[Used to render rounded line joins. Circular arcs are used to join two lines smoothly.]]
+ bevel, [[Used to render beveled line joins. The outer corner of the joined lines is filled by enclosing the triangular region of the corner with a straight line between the outer corners of each stroke.]]
last [[Sentinel value to indicate last enum field during iteration]]
}
@@ -84,7 +84,8 @@ enum Efl.Gfx.Gradient_Spread
{
[[Specifies how the area outside the gradient area should be filled.
@Efl.Gfx.Gradient.spread.set
- @since 1.14
+
+ @since 1.22
]]
pad, [[The area is filled with the closest stop color. This is the default.]]
reflect, [[The gradient is reflected outside the gradient area.]]
@@ -95,7 +96,6 @@ enum Efl.Gfx.Gradient_Spread
enum @beta Efl.Gfx.Fill_Rule
{
[[Type defining how an image content get filled.
- @since 1.14
]]
winding = 0, [[Draw a horizontal line from the point to a location outside the shape. Determine whether the direction of the line at each intersection point is up or down. The winding number is determined by summing the direction of each intersection. If the number is non zero, the point is inside the shape. This mode is the default]]
odd_even = 1, [[Draw a horizontal line from the point to a location outside the shape, and count the number of intersections. If the number of intersections is an odd number, the point is inside the shape.]]
@@ -104,7 +104,8 @@ enum @beta Efl.Gfx.Fill_Rule
struct Efl.Gfx.Dash {
[[Type describing dash.
@Efl.Gfx.Shape.stroke_dash.set
- @since 1.14
+
+ @since 1.22
]]
length: double; [[Dash drawing length.]]
gap: double; [[Distance between two dashes.]]
@@ -114,7 +115,8 @@ struct Efl.Gfx.Gradient_Stop
{
[[Type defining gradient stops.
Describes the location and color of a transition point in a gradient.
- @since 1.14
+
+ @since 1.22
]]
offset: double; [[The location of the gradient stop within the gradient vector]]
r: int; [[The component R color of the gradient stop]]
@@ -176,7 +178,7 @@ enum Efl.Gfx.Center_Fill_Mode
enum Efl.Gfx.Change_Flag
{
- [[What property got changed for this object @since 1.18]]
+ [[What property got changed for this object @since 1.22]]
none = 0x0, [[Nothing changed.]]
matrix = 0x1, [[Matrix got changed.]]
path = 0x2, [[Path got changed.]]
@@ -184,7 +186,7 @@ enum Efl.Gfx.Change_Flag
all = 0xffff [[All properties got changed.]]
}
-struct Efl.Gfx.Event.Render_Post
+struct @beta Efl.Gfx.Event.Render_Post
{
[[Data sent along a "render,post" event, after a frame has been rendered. @since 1.23]]
updated_area: list<Eina.Rect>; [[A list of rectangles that were
@@ -219,7 +221,7 @@ enum @beta Efl.Gfx.Color_Class_Layer {
shadow [[Shadow color]]
}
-type @beta Efl.Font.Size: int; [[Efl font size type]]
+type Efl.Font.Size: int; [[Efl font size type @since 1.24]]
error @extern @beta Efl.Gfx.Image.Load_Error.NONE = "XXX"; [[No error on load]]
error @extern @beta Efl.Gfx.Image.Load_Error.GENERIC = "XXX"; [[A non-specific error occurred]]
diff --git a/src/lib/efl/interfaces/efl_input_text.eo b/src/lib/efl/interfaces/efl_input_text_entity.eo
index 37d3acb978..75144fd275 100644
--- a/src/lib/efl/interfaces/efl_input_text.eo
+++ b/src/lib/efl/interfaces/efl_input_text_entity.eo
@@ -1,53 +1,51 @@
-enum @beta Efl.Input_Text.Panel_Layout_Type
+enum Efl.Input_Text.Panel_Layout_Type
{
[[Input panel (virtual keyboard) layout types.
Type of input panel (virtual keyboard) to use - this is a hint and may not provide exactly what is desired.
+ @since 1.24
]]
normal, [[Default layout.]]
number, [[Number layout.]]
email, [[Email layout.]]
url, [[URL layout.]]
- phonenumber, [[Phone Number layout.]]
+ phone_number, [[Phone Number layout.]]
ip, [[IP layout.]]
month, [[Month layout.]]
- numberonly, [[Number Only layout.]]
+ number_only, [[Number Only layout.]]
invalid, [[Never use this.]]
hex, [[Hexadecimal layout.]]
terminal, [[Command-line terminal layout including esc, alt, ctrl key, so on (no auto-correct, no auto-capitalization).]]
password, [[Like normal, but no auto-correct, no auto-capitalization etc.]]
- datetime, [[Date and time layout
-
- @since 1.8]]
- emoticon, [[Emoticon layout
-
- @since 1.10]]
- voice [[Voice layout, but if the IME does not support voice layout, then normal layout will be shown.
-
- @since 1.19]]
+ datetime, [[Date and time layout.]]
+ emoticon, [[Emoticon layout.]]
+ voice [[Voice layout, but if the IME does not support voice layout, then normal layout will be shown.]]
}
-enum @beta Efl.Input_Text.Panel_Language_Type
+enum Efl.Input_Text.Panel_Language_Type
{
[[Input panel (virtual keyboard) language modes.
+ @since 1.24
]]
automatic, [[Automatic]]
alphabet [[Alphabet]]
}
-enum @beta Efl.Input_Text.Capitalize_Type
+enum Efl.Input_Text.Capitalize_Type
{
[[Autocapitalization Types.
Choose method of auto-capitalization.
+ @since 1.24
]]
none, [[No auto-capitalization when typing.]]
word, [[Autocapitalize each word typed.]]
sentence, [[Autocapitalize the start of each sentence.]]
- allcharacter [[Autocapitalize all letters.]]
+ all [[Autocapitalize all letters.]]
}
-enum @beta Efl.Input_Text.Panel_Return_Key_Type
+enum Efl.Input_Text.Panel_Return_Key_Type
{
[["Return" Key types on the input panel (virtual keyboard).
+ @since 1.24
]]
default, [[Default.]]
done, [[Done.]]
@@ -57,14 +55,13 @@ enum @beta Efl.Input_Text.Panel_Return_Key_Type
next, [[Next.]]
search, [[Search string or magnifier icon.]]
send, [[Send.]]
- signin [[Sign-in
-
- @since 1.8]]
+ signin [[Sign-in.]]
}
-enum @beta Efl.Input_Text.Panel_Return_Key_State
+enum Efl.Input_Text.Panel_Return_Key_State
{
[["Return" Key state on the input panel (virtual keyboard).
+ @since 1.24
]]
auto, [[The return key on input panel is disabled when the entry has no text,
if entry has text, return key is enabled.
@@ -73,59 +70,57 @@ enum @beta Efl.Input_Text.Panel_Return_Key_State
disabled, [[The return key on input panel is disabled.]]
}
-enum @beta Efl.Input_Text.Hints_Type
+enum Efl.Input_Text.Content_Type
{
[[Enumeration that defines the types of Input Hints.
+ @since 1.24]]
+ none = 0, [[No active hints.]]
+ auto_complete = 1 << 0, [[Suggest word auto completion.]]
+ sensitive_data = 1 << 1, [[Typed text should not be stored.]]
+ autofill_credit_card_expiration_date = 0x100, [[ Autofill hint for a credit card expiration date.]]
+ autofill_credit_card_expiration_day = 0x200, [[Autofill hint for a credit card expiration day.]]
+ autofill_credit_card_expiration_month = 0x300, [[ Autofill hint for a credit card expiration month.]]
+ autofill_credit_card_expiration_year = 0x400, [[ Autofill hint for a credit card expiration year.]]
+ autofill_credit_card_number = 0x500, [[ Autofill hint for a credit card number.]]
+ autofill_email_address = 0x600, [[ Autofill hint for an email address.]]
+ autofill_name = 0x700, [[ Autofill hint for a user's real name.]]
+ autofill_phone = 0x800, [[ Autofill hint for a phone number.]]
+ autofill_postal_address = 0x900, [[ Autofill hint for a postal address.]]
+ autofill_postal_code = 0xA00, [[ Autofill hint for a postal code.]]
+ autofill_id = 0xB00 [[ Autofill hint for a user's ID.]]
+}
- @since 1.12
- ]]
- none = 0, [[No active hints
-
- @since 1.12]]
- auto_complete = 1 << 0, [[Suggest word auto completion
-
- @since 1.12]]
- sensitive_data = 1 << 1, [[Typed text should not be stored.
-
- @since 1.12]]
- autofill_credit_card_expiration_date = 0x100, [[ Autofill hint for a credit card expiration date
-
- @since 1.21]]
- autofill_credit_card_expiration_day = 0x200, [[Autofill hint for a credit card expiration day
-
- @since 1.21]]
- autofill_credit_card_expiration_month = 0x300, [[ Autofill hint for a credit card expiration month
-
- @since 1.21]]
- autofill_credit_card_expiration_year = 0x400, [[ Autofill hint for a credit card expiration year
-
- @since 1.21]]
- autofill_credit_card_number = 0x500, [[ Autofill hint for a credit card number
-
- @since 1.21]]
- autofill_email_address = 0x600, [[ Autofill hint for an email address
-
- @since 1.21]]
- autofill_name = 0x700, [[ Autofill hint for a user's real name
-
- @since 1.21]]
- autofill_phone = 0x800, [[ Autofill hint for a phone number
+enum @beta Efl.Input_Text.Panel_Layout_Normal_Variation_Type
+{
+ [[Enumeration for defining the types of @Efl.Input_Text.Panel_Layout_Type for normal variation.]]
+ normal , [[The plain normal layout.]]
+ file_name , [[Filename layout. Symbols such as '/' should be disabled.]]
+ person_name , [[The name of a person, @Efl.Input_Text.Entity.autocapitalization will be set to @Efl.Input_Text.Capitalize_Type.word.]]
+}
- @since 1.21]]
- autofill_postal_address = 0x900, [[ Autofill hint for a postal address
+enum @beta Efl.Input_Text.Panel_Layout_Numberonly_Variation_Type
+{
+ [[Enumeration for defining the types of @Efl.Input_Text.Panel_Layout_Type for normal variation.]]
+ normal , [[The plain normal number layout.]]
+ signed , [[The number layout to allow a positive or negative sign at the start.]]
+ decimal , [[The number layout to allow decimal point to provide fractional value.]]
+ signed_and_decimal , [[The number layout to allow decimal point and negative sign.]]
+}
- @since 1.21]]
- autofill_postal_code = 0xA00, [[ Autofill hint for a postal code
+enum @beta Efl.Input_Text.Panel_Layout_Password_Variation_Type
+{
+ [[Enumeration for defining the types of @Efl.Input_Text.Panel_Layout_Type for normal variation.]]
+ normal , [[The normal password layout.]]
+ number_only , [[The password layout to allow only number.]]
+}
- @since 1.21]]
- autofill_id = 0xB00 [[ Autofill hint for a user's ID
- @since 1.21]]
-}
-interface @beta Efl.Input_Text {
- [[All the functionality relating to input hints
+interface Efl.Input_Text.Entity {
+ [[All the functionality relating to input hints/
+ @since 1.24
]]
+ c_prefix: efl_input_text;
methods {
@property input_panel_show_on_demand {
[[Set/Get the attribute to show the input panel in case of only a user's explicit Mouse Up event.
@@ -141,7 +136,7 @@ interface @beta Efl.Input_Text {
}
}
- // FIXME: I don't understand why this is needed in addition to Layout
+
@property input_panel_language {
[[The language mode of the input panel.
This API can be used if you want to show the alphabet keyboard mode.]]
@@ -154,9 +149,10 @@ interface @beta Efl.Input_Text {
}
}
- // FIXME: What is this?
@property input_panel_layout_variation {
- [[The input panel layout variation of the entry.]]
+ [[The input panel layout variation of the entry, this can be
+ @Efl.Input_Text.Panel_Layout_Normal_Variation_Type , @Efl.Input_Text.Panel_Layout_Numberonly_Variation_Type
+ or @Efl.Input_Text.Panel_Layout_Password_Variation_Type.]]
set {
}
get {
@@ -166,7 +162,6 @@ interface @beta Efl.Input_Text {
}
}
- // FIXME: input_capitalize/capitalization ?
@property autocapitalization {
[[The autocapitalization type on the immodule.]]
set {
@@ -178,7 +173,6 @@ interface @beta Efl.Input_Text {
}
}
- // FIXME: rename
@property predictable {
[[Whether the entry should allow predictive text.]]
set {
@@ -189,17 +183,18 @@ interface @beta Efl.Input_Text {
prediction: bool; [[Whether the entry should allow predictive text.]]
}
}
- // FIXME: I agree with Mike, looks bad
- @property input_hint {
+
+ @property input_content_type @beta {
[[The input hint which allows input methods to fine-tune their behavior.]]
set {
}
get {
}
values {
- hints: Efl.Input_Text.Hints_Type; [[Input hint.]]
+ hints: Efl.Input_Text.Content_Type; [[Input hint.]]
}
}
+
@property input_panel_layout {
[[The input panel layout of the entry.]]
set {
@@ -210,6 +205,7 @@ interface @beta Efl.Input_Text {
layout: Efl.Input_Text.Panel_Layout_Type(Efl.Input_Text.Panel_Layout_Type.invalid); [[Layout type.]]
}
}
+
@property input_panel_return_key_type {
[[The "return" key type. This type is used to set string or icon on the "return" key of the input panel.
An input panel displays the string or icon associated with this type.]]
@@ -221,7 +217,7 @@ interface @beta Efl.Input_Text {
return_key_type: Efl.Input_Text.Panel_Return_Key_Type; [[The type of "return" key on the input panel.]]
}
}
- // FIXME: shouldn't this be "autoshow" or something?
+
@property input_panel_autoshow {
[[The attribute to show the input panel automatically.]]
set {
@@ -271,4 +267,4 @@ interface @beta Efl.Input_Text {
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/lib/efl/interfaces/efl_interfaces_main.c b/src/lib/efl/interfaces/efl_interfaces_main.c
index d7fab5fcf8..4856df5a6e 100644
--- a/src/lib/efl/interfaces/efl_interfaces_main.c
+++ b/src/lib/efl/interfaces/efl_interfaces_main.c
@@ -25,7 +25,7 @@
#include "interfaces/efl_text_style.eo.c"
#include "interfaces/efl_text_format.eo.c"
#include "interfaces/efl_text_markup.eo.c"
-#include "interfaces/efl_input_text.eo.c"
+#include "interfaces/efl_input_text_entity.eo.c"
#include "interfaces/efl_gfx_entity.eo.c"
#include "interfaces/efl_gfx_buffer.eo.c"
diff --git a/src/lib/efl/interfaces/efl_io_buffer.eo b/src/lib/efl/interfaces/efl_io_buffer.eo
index 518a799a3a..58e0c7ab22 100644
--- a/src/lib/efl/interfaces/efl_io_buffer.eo
+++ b/src/lib/efl/interfaces/efl_io_buffer.eo
@@ -133,7 +133,7 @@ class @beta Efl.Io.Buffer extends Efl.Object
On failure, for example a read-only backing store was
adopted with @.adopt_readonly, $NULL is returned.
]]
- return: ptr(Eina.Binbuf) @move @no_unused; [[Binbuf]]
+ return: binbuf @move @no_unused; [[Binbuf]]
}
}
diff --git a/src/lib/efl/interfaces/efl_model.eo b/src/lib/efl/interfaces/efl_model.eo
index ee04879f68..e669d50ade 100644
--- a/src/lib/efl/interfaces/efl_model.eo
+++ b/src/lib/efl/interfaces/efl_model.eo
@@ -141,6 +141,18 @@ interface Efl.Model
/* XXX: is this right? */
return: future<array<Efl.Object>>; [[Array of children]]
}
+ children_index_get {
+ [[Get children as specified by iterator.
+
+ Provided index have to be between 0 and @.children_count.get.
+
+ This function might rely on @.children_slice_get as a fallback.
+ ]]
+ params {
+ @in indices: iterator<uint>; [[Indices of the requested children.]]
+ }
+ return: future<array<Efl.Object>>; [[Array of children]]
+ }
@property children_count {
[[Number of children.
diff --git a/src/lib/efl/interfaces/efl_observable.eo b/src/lib/efl/interfaces/efl_observable.eo
index d551f6fd91..45b05b0984 100644
--- a/src/lib/efl/interfaces/efl_observable.eo
+++ b/src/lib/efl/interfaces/efl_observable.eo
@@ -1,5 +1,3 @@
-import efl_types;
-
struct @beta @free(efl_observable_tuple_free) Efl.Observable_Tuple
{
[[This type describes an observable touple]]
diff --git a/src/lib/efl/interfaces/efl_player.eo b/src/lib/efl/interfaces/efl_player.eo
index afeb7c2d13..9ec9b2b1ad 100644
--- a/src/lib/efl/interfaces/efl_player.eo
+++ b/src/lib/efl/interfaces/efl_player.eo
@@ -67,9 +67,11 @@ interface Efl.Player
@property playback_progress {
[[How much of the file has been played.
- This function gets the progress in playing the file, the
- return value is in the [0, 1] range.
+ This function sets or gets the progress in playing the file, the
+ value is in the [0, 1] range.
]]
+ set {
+ }
get {
}
values {
@@ -91,5 +93,52 @@ interface Efl.Player
speed: double; [[The play speed in the [0, infinity) range.]]
}
}
+ @property autoplay {
+ [[When $true, playback will start as soon as the media is ready.
+
+ This means that the media file has been successfully loaded and the
+ object is visible.
+
+ If the object becomes invisible later on the playback is paused,
+ resuming when it is visible again.
+
+ Changing this property affects the next media being loaded,
+ so set it before setting the media file.
+
+ @since 1.24
+ ]]
+ set {
+ }
+ get {
+ }
+ values {
+ autoplay: bool; [[Auto play mode, Default is $false unless specified by the implementing class.]]
+ }
+ }
+ @property playback_loop {
+ [[Enable playback looping.
+
+ When $true, playback continues from the beginning when it reaches the last frame.
+ Otherwise, playback stops.
+ This works both when playing forward and backward.
+
+ @since 1.24
+ ]]
+ set {
+ }
+ get {
+ }
+ values {
+ looping: bool; [[Loop mode, Default is $false unless specified by the implementing class.]]
+ }
+ }
+ }
+ events {
+ playing,changed: bool; [[Called when the playing state has changed. The event value reflects the current state. @since 1.24]]
+ paused,changed: bool; [[Called when the paused state has changed. The event value reflects the current state. @since 1.24]]
+ playback_progress,changed: double; [[Called when the playback_progress state has changed. The event value reflects the current state. @since 1.24]]
+ playback_position,changed: double; [[Called when the playback_position state has changed. The event value reflects the current state. @since 1.24]]
+ playback,repeated: int; [[Called when the player has begun to repeat its data stream. The event value is the current number of repeats. @since 1.24]]
+ playback,finished: void; [[Called when the player has completed playing its data stream. @since 1.24]]
}
}
diff --git a/src/lib/efl/interfaces/efl_text_font_properties.eo b/src/lib/efl/interfaces/efl_text_font_properties.eo
index 796a020324..95ccbf2953 100644
--- a/src/lib/efl/interfaces/efl_text_font_properties.eo
+++ b/src/lib/efl/interfaces/efl_text_font_properties.eo
@@ -1,53 +1,63 @@
import efl_gfx_types;
-enum @beta Efl.Text_Font_Weight {
- [[Type of font weight.]]
- normal, [[Normal font weight.]]
- thin, [[Thin font weight.]]
- ultralight, [[Ultralight font weight.]]
- extralight, [[Extralight font weight.]]
- light, [[Light font weight.]]
- book, [[Book font weight.]]
- medium, [[Medium font weight.]]
- semibold, [[Semibold font weight.]]
- bold, [[Bold font weight.]]
- ultrabold, [[Ultrabold font weight.]]
- extrabold, [[Extrabold font weight.]]
- black, [[Black font weight.]]
- extrablack, [[Extrablack font weight.]]
+enum Efl.Text_Font_Weight {
+ [[The weight of a particular font is the thickness of the character outlines relative to their height.
+ The given numerical values follow the TrueType scale (from 100 to 900) and are approximate.
+ It is up to each font to provide all of them.
+ @since 1.24
+ ]]
+ normal, [[Normal font weight (400).]]
+ thin, [[Thin font weight (100).]]
+ ultralight, [[Ultralight font weight (200).]]
+ extralight, [[Extralight font weight (200).]]
+ light, [[Light font weight (300).]]
+ book, [[Book font weight (350).]]
+ medium, [[Medium font weight (500).]]
+ semibold, [[Semibold font weight (600).]]
+ bold, [[Bold font weight (700).]]
+ ultrabold, [[Ultrabold font weight (800).]]
+ extrabold, [[Extrabold font weight (800).]]
+ black, [[Black font weight (900).]]
+ extrablack, [[Extrablack font weight (950).]]
}
-enum @beta Efl.Text_Font_Width {
- [[Type of font width.]]
- normal, [[Normal font width.]]
+enum Efl.Text_Font_Width {
+ [[Font width relative to its height.
+ It is up to each font to provide all these widths.
+ @since 1.24
+ ]]
+ normal, [[Normal font width.]]
ultracondensed, [[Ultracondensed font width.]]
extracondensed, [[Extracondensed font width.]]
- condensed, [[Condensed font width.]]
- semicondensed, [[Semicondensed font width.]]
- semiexpanded, [[Semiexpanded font width.]]
- expanded, [[Expanded font width.]]
- extraexpanded, [[Extraexpanded font width.]]
- ultraexpanded, [[Ultraexpanded font width.]]
+ condensed, [[Condensed font width.]]
+ semicondensed, [[Semicondensed font width.]]
+ semiexpanded, [[Semiexpanded font width.]]
+ expanded, [[Expanded font width.]]
+ extraexpanded, [[Extraexpanded font width.]]
+ ultraexpanded, [[Ultraexpanded font width.]]
}
-enum @beta Efl.Text_Font_Slant {
- [[Type of font slant.]]
- normal, [[Normal font slant.]]
- oblique, [[Oblique font slant.]]
- italic, [[Italic font slant.]]
+enum Efl.Text_Font_Slant {
+ [[Type of font slant.
+ @since 1.24
+ ]]
+ normal, [[Normal font slant: Sets the text to the normal font (non-italicized).]]
+ oblique, [[Oblique font slant: Sets the text to use a simulated version of an italic font,
+ created by algorithmically slanting the normal version.]]
+ italic, [[Italic font slant: Sets the text to use the italic version of the font if available.
+ If not available, it will simulate italics with oblique instead.]]
}
-/* FIXME: It needs to support "normal" option for non-color bitmap font.
- For supporting "normal" option, S/W glyph drawing engine should be updated.
- */
-enum @beta Efl.Text_Font_Bitmap_Scalable {
- [[Scalable of bitmap fonts.
+enum Efl.Text_Font_Bitmap_Scalable {
+ [[When are bitmap fonts allowed to be scaled.
+ @since 1.24
]]
- none = 0, [[Disable scalable feature for bitmap fonts.]]
- color = (1 << 0), [[Enable scalable feature for color bitmap fonts.]]
+ none = 0, [[Disable scaling for bitmap fonts.]]
+ color = (1 << 0), [[Enable scaling for color bitmap fonts.]]
}
-interface @beta Efl.Text.Font.Properties {
- [[Font settings for text.
+interface Efl.Text_Font_Properties {
+ [[Properties related to font handling.
+ @since 1.24
]]
c_prefix: efl_text;
methods {
@@ -75,9 +85,9 @@ interface @beta Efl.Text.Font.Properties {
}
@property font_size {
- [[The font size for a given text object.
+ [[The font size to use, in points.
- This property controls the font size of a text object.
+ If the specified @.font_family does not provide this particular size, it will be scaled.
]]
set {}
get {}
@@ -115,7 +125,7 @@ interface @beta Efl.Text.Font.Properties {
}
@property font_weight {
- [[Type of weight of the displayed font
+ [[Type of weight (e.g. bold or normal) of the displayed font
Default is @Efl.Text_Font_Weight.normal.
]]
@@ -125,7 +135,7 @@ interface @beta Efl.Text.Font.Properties {
}
@property font_slant {
- [[Type of slant of the displayed font.
+ [[Type of slant (e.g. italic or normal) of the displayed font.
Default is @Efl.Text_Font_Slant.normal.
]]
@@ -135,7 +145,7 @@ interface @beta Efl.Text.Font.Properties {
}
@property font_width {
- [[Type of width of the displayed font.
+ [[Type of width (e.g. condensed, expanded or normal) of the displayed font.
Default is @Efl.Text_Font_Width.normal.
]]
@@ -158,14 +168,14 @@ interface @beta Efl.Text.Font.Properties {
}
@property font_bitmap_scalable {
- [[The bitmap fonts have fixed size glyphs for several available sizes.
- Basically, it is not scalable. But, it needs to be scalable for some use cases.
- (e.g. colorful emoji fonts)
+ [[Bitmap fonts have fixed size glyphs for several available sizes.
+ Other sizes need to be algorithmically scaled, resulting in blurry glyphs.
+ This property controls whether scaling of non-provided sizes is allowed.
Default is @Efl.Text_Font_Bitmap_Scalable.none.
]]
values {
- scalable: Efl.Text_Font_Bitmap_Scalable; [[Scalable.]]
+ scalable: Efl.Text_Font_Bitmap_Scalable; [[When should bitmap fonts be scaled.]]
}
}
}
diff --git a/src/lib/efl/interfaces/efl_text_format.eo b/src/lib/efl/interfaces/efl_text_format.eo
index 5c974a675e..73fa97a67d 100644
--- a/src/lib/efl/interfaces/efl_text_format.eo
+++ b/src/lib/efl/interfaces/efl_text_format.eo
@@ -1,5 +1,7 @@
-enum @beta Efl.Text_Format_Wrap {
- [[Wrapping policy of the text.]]
+enum Efl.Text_Format_Wrap {
+ [[Wrapping policy for the text.
+ @since 1.24
+ ]]
none, [[No wrapping.]]
char, [[Wrap at character boundaries.]]
word, [[Wrap at word boundaries.]]
@@ -8,19 +10,22 @@ enum @beta Efl.Text_Format_Wrap {
at any character.]]
}
-enum @beta Efl.Text_Format_Horizontal_Alignment_Auto_Type {
- [[Auto-horizontal alignment of the text.]]
- none, [[No auto-alignment rule.]]
- normal, [[Respects LTR/RTL (bidirectional) settings.]]
- locale, [[Respects locale's language settings.]]
- end [[Text is placed at opposite side of LTR/RTL (bidirectional) settings.]]
+enum Efl.Text_Format_Horizontal_Alignment_Auto_Type {
+ [[Automatic horizontal alignment setting for the text (Left-To-Right or Right-To-Left).
+ @since 1.24
+ ]]
+ none, [[No auto-alignment rule: Horizontal Alignment is decided by @Efl.Text_Format.text_horizontal_align]]
+ auto, [[Respects LTR/RTL (bidirectional) characters found inside the text content.]]
+ locale, [[Respects the system's language settings.]]
+ opposite [[Text is placed at opposite side of LTR/RTL (bidirectional) settings.]]
}
-interface @beta Efl.Text_Format {
+interface Efl.Text_Format {
[[The look and layout of the text.
The text format can affect the geometry of the text object, as well as
how characters are presented.
+ @since 1.24
]]
c_prefix: efl_text;
methods {
@@ -33,44 +38,55 @@ interface @beta Efl.Text_Format {
]]
values
{
- value: double; [[Ellipsis value.]]
+ value: double; [[Position of the ellipsis inside the text, from $[0.0] to $[1.0].]]
}
}
@property wrap {
- [[Wrapping policy of the text. Requires @.multiline to be $true.]]
+ [[Wrapping policy for the text.
+
+ When text does not fit the widget in a single line, it can be automatically wrapped at
+ character or word boundaries, for example.
+
+ Requires @.multiline to be $true.
+ ]]
values {
- wrap: Efl.Text_Format_Wrap; [[Wrap mode.]]
+ wrap: Efl.Text_Format_Wrap; [[Wrapping policy.]]
}
}
@property multiline {
[[Enables text to span multiple lines.
-
+
When $false, new-line characters are ignored and no text wrapping occurs.
]]
values {
- enabled: bool; [[$true if multiline is enabled.]]
+ enabled: bool; [[$true if multiple lines should be rendered.]]
}
}
@property text_horizontal_align_auto_type {
- [[Horizontal alignment of text.]]
+ [[Specifies when the text's horizontal alignment should be set automatically.]]
values {
- value: Efl.Text_Format_Horizontal_Alignment_Auto_Type; [[Alignment type.]]
+ value: Efl.Text_Format_Horizontal_Alignment_Auto_Type; [[Automatic horizontal alignment type.]]
}
}
@property text_horizontal_align {
- [[Horizontal alignment of text. $[0.0] means "left"
- and $[1.0] means "right".]]
+ [[Manual horizontal alignment of text. $[0.0] means "left"
+ and $[1.0] means "right".
+ Setting this value also sets @.text_horizontal_align_auto_type to
+ @Efl.Text_Format_Horizontal_Alignment_Auto_Type.none.
+ This value is ignored when @.text_horizontal_align_auto_type is set to anything other than
+ @Efl.Text_Format_Horizontal_Alignment_Auto_Type.none.
+ ]]
values {
value: double; [[Alignment value between $[0.0] and $[1.0].]]
}
}
@property text_vertical_align {
- [[Vertical alignment of text.$[0.0] means "top"
+ [[Vertical alignment of text. $[0.0] means "top"
and $[1.0] means "bottom"]]
values {
value: double; [[Alignment value between $[0.0] and $[1.0].]]
@@ -100,16 +116,16 @@ interface @beta Efl.Text_Format {
}
@property tab_stops {
- [[Size of the tab character.]]
+ [[Size (in pixels) of the tab character.]]
values
{
- value: int; [[Size in pixels.]]
+ value: int; [[Size in pixels, greater than 1.]]
}
}
@property password {
[[Enabling this causes all characters to be replaced by @.replacement_char.
-
+
This is useful for password input boxes.
]]
values
@@ -119,13 +135,12 @@ interface @beta Efl.Text_Format {
}
@property replacement_char {
- [[The character used to replace characters that can't be displayed
+ [[The character used to replace characters that can't be displayed.
- Currently only used to replace characters if @.password
- is enabled.
+ Only used to replace characters if @.password is enabled.
]]
values {
- repch: string; [[Replacement character]]
+ repch: string; [[Replacement character.]]
}
}
}
diff --git a/src/lib/efl/interfaces/efl_text_markup.eo b/src/lib/efl/interfaces/efl_text_markup.eo
index a0ec020cf5..0f11e86a96 100644
--- a/src/lib/efl/interfaces/efl_text_markup.eo
+++ b/src/lib/efl/interfaces/efl_text_markup.eo
@@ -1,5 +1,6 @@
-interface @beta Efl.Text_Markup {
+interface Efl.Text_Markup {
[[Markup data that populates the text object's style and format
+ @since 1.24
]]
methods {
@property markup {
diff --git a/src/lib/efl/interfaces/efl_text_style.eo b/src/lib/efl/interfaces/efl_text_style.eo
index 9fdd1e05f2..d0cd196e9a 100644
--- a/src/lib/efl/interfaces/efl_text_style.eo
+++ b/src/lib/efl/interfaces/efl_text_style.eo
@@ -1,71 +1,92 @@
-enum @beta Efl.Text_Style_Background_Type
+enum Efl.Text_Style_Background_Type
{
- [[Whether to add a background colored rectangle (background) to each line of text or not.]]
- disabled = 0, [[Do not use background.]]
- solid_color, [[Use solid color background.]]
+ [[Type of background to use behind each line of text.
+ @since 1.24
+ ]]
+ none = 0, [[Do not use background.]]
+ solid_color, [[Use a solid-color rectangle as background.
+ Requires @Efl.Text_Style.text_background_color.]]
}
-enum @beta Efl.Text_Style_Strikethrough_Type
+enum Efl.Text_Style_Strikethrough_Type
{
- [[Whether to add a strike-through decoration to the displayed text or not.]]
- disabled = 0, [[Do not use strike-through.]]
- solid_color, [[Use solid color strike-through.]]
-
+ [[Whether to add a strike-through decoration to the displayed text or not.
+ @since 1.24
+ ]]
+ none = 0, [[Do not use strike-through.]]
+ single, [[Strike-through with a single line.
+ Requires @Efl.Text_Style.text_strikethrough_color.]]
}
-enum @beta Efl.Text_Style_Effect_Type
+enum Efl.Text_Style_Effect_Type
{
- [[Effect to apply to the displayed text.]]
- none = 0, [[No effect.]]
-
- // colored with shadow_color
- shadow, [[Shadow effect.]]
- far_shadow, [[Far shadow effect.]]
- soft_shadow, [[Soft shadow effect.]]
- far_soft_shadow, [[Far and soft shadow effect.]]
- // colored with glow_color
- glow, [[Glow effect.]]
- // colored with outline_color
- outline, [[Outline effect.]]
- soft_outline, [[Soft outline effect.]]
- // colored with outline_color + shadow_color
- outline_shadow, [[Outline + shadow effect.]]
- outline_soft_shadow, [[Outline + soft shadow effect.]]
+ [[Effect to apply to the displayed text.
+ @since 1.24
+ ]]
+ none = 0, [[No effect.]]
+ shadow, [[Shadow effect.
+ Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
+ far_shadow, [[Far shadow effect.
+ Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
+ soft_shadow, [[Soft shadow effect.
+ Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
+ far_soft_shadow, [[Far and soft shadow effect.
+ Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
+ glow, [[Glow effect.
+ Uses @Efl.Text_Style.text_glow_color and @Efl.Text_Style.text_secondary_glow_color.]]
+ outline, [[Outline effect.
+ Uses @Efl.Text_Style.text_outline_color.]]
+ soft_outline, [[Soft outline effect.
+ Uses @Efl.Text_Style.text_outline_color.]]
+ outline_shadow, [[Outline + shadow effect.
+ Uses @Efl.Text_Style.text_shadow_color, @Efl.Text_Style.text_shadow_direction and
+ @Efl.Text_Style.text_outline_color.]]
+ outline_soft_shadow, [[Outline + soft shadow effect.
+ Uses @Efl.Text_Style.text_shadow_color, @Efl.Text_Style.text_shadow_direction and
+ @Efl.Text_Style.text_outline_color.]]
}
-enum @beta Efl.Text_Style_Shadow_Direction
+enum Efl.Text_Style_Shadow_Direction
{
- [[Direction of the shadow.]]
+ [[Direction of the shadow effect.
+ @since 1.24
+ ]]
bottom_right = 0, [[Shadow towards bottom right.]]
- bottom, [[Shadow towards bottom.]]
- bottom_left, [[Shadow towards bottom left.]]
- left, [[Shadow towards left.]]
- top_left, [[Shadow towards top left.]]
- top, [[Shadow towards top.]]
- top_right, [[Shadow towards top right.]]
- right, [[Shadow towards right.]]
+ bottom, [[Shadow towards bottom.]]
+ bottom_left, [[Shadow towards bottom left.]]
+ left, [[Shadow towards left.]]
+ top_left, [[Shadow towards top left.]]
+ top, [[Shadow towards top.]]
+ top_right, [[Shadow towards top right.]]
+ right, [[Shadow towards right.]]
}
-enum @beta Efl.Text_Style_Underline_Type
+enum Efl.Text_Style_Underline_Type
{
- [[Type of underline of the displayed text.]]
- off = 0, [[Text without underline.]]
- on, [[Underline enabled.]]
- single, [[Underlined with a single line.]]
- double, [[Underlined with a double line.]]
- dashed, [[Underlined with a dashed line.]]
+ [[Type of underline for the displayed text.
+ @since 1.24
+ ]]
+ none = 0, [[Text without underline.]]
+ single, [[Underlined with a single line.
+ Requires @Efl.Text_Style.text_underline_color.]]
+ double, [[Underlined with a double line.
+ Requires @Efl.Text_Style.text_underline_color and @Efl.Text_Style.text_secondary_underline_color.]]
+ dashed, [[Underlined with a dashed line.
+ Requires @Efl.Text_Style.text_underline_dashed_color, @Efl.Text_Style.text_underline_dashed_width and
+ @Efl.Text_Style.text_underline_dashed_gap.]]
}
-interface @beta Efl.Text_Style {
+interface Efl.Text_Style {
[[Decorations to add to the text.
- Decorations can be coloring, effects, underlines, strike-through etc.
+ Decorations include text color, glow, outline, underline, strike-through and shadows.
+ @since 1.24
]]
c_prefix: efl_text;
methods {
@property text_color {
- [[Color of text, excluding decorations like, shadow, outline or glow.]]
+ [[Color of text, excluding all other decorations. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -76,7 +97,7 @@ interface @beta Efl.Text_Style {
}
@property text_background_type {
- [[Enables rendering of a background rectangle behind each line of text.]]
+ [[Type of background to use behind each line of text.]]
values
{
type: Efl.Text_Style_Background_Type; [[Background type.]]
@@ -84,7 +105,7 @@ interface @beta Efl.Text_Style {
}
@property text_background_color {
- [[Color of the background rectangle (backing) behind each line of text.]]
+ [[Color of the background behind each line of text. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -95,7 +116,7 @@ interface @beta Efl.Text_Style {
}
@property text_underline_type {
- [[Underline style for the text.]]
+ [[Type of underline to use for the text.]]
values
{
type: Efl.Text_Style_Underline_Type; [[Underline type.]]
@@ -104,7 +125,7 @@ interface @beta Efl.Text_Style {
@property text_underline_color
{
- [[Color of normal underline style.]]
+ [[Color of the primary underline. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -127,7 +148,7 @@ interface @beta Efl.Text_Style {
@property text_underline_dashed_color
{
[[Color of the dashed underline. Only valid when @.text_underline_type is
- @Efl.Text_Style_Underline_Type.dashed.]]
+ @Efl.Text_Style_Underline_Type.dashed. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -157,10 +178,10 @@ interface @beta Efl.Text_Style {
}
}
- @property text_underline2_color
+ @property text_secondary_underline_color
{
[[Color of the secondary underline. Only valid when @.text_underline_type is
- @Efl.Text_Style_Underline_Type.double.]]
+ @Efl.Text_Style_Underline_Type.double. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -180,7 +201,7 @@ interface @beta Efl.Text_Style {
@property text_strikethrough_color
{
- [[Color of the line striking through the text.]]
+ [[Color of the line striking through the text. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -199,7 +220,7 @@ interface @beta Efl.Text_Style {
}
@property text_outline_color
{
- [[Color of the text outline.]]
+ [[Color of the text outline. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -211,7 +232,7 @@ interface @beta Efl.Text_Style {
@property text_shadow_direction
{
- [[Direction of shadow effect.]]
+ [[Direction of the shadow effect.]]
values
{
type: Efl.Text_Style_Shadow_Direction; [[Shadow direction.]]
@@ -220,7 +241,7 @@ interface @beta Efl.Text_Style {
@property text_shadow_color
{
- [[Color of the shadow.]]
+ [[Color of the text shadow. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -232,7 +253,7 @@ interface @beta Efl.Text_Style {
@property text_glow_color
{
- [[Color of the glow decoration.]]
+ [[Color of the text glow. By default it is invisible.]]
values
{
r: ubyte; [[Red component.]]
@@ -242,11 +263,12 @@ interface @beta Efl.Text_Style {
}
}
- @property text_glow2_color
+ @property text_secondary_glow_color
{
[[Color of the secondary glow decoration.
This is the color of the inner glow (where it touches the text) which
- gradually fades into @.text_glow_color as it reaches the edge.
+ gradually fades into @.text_glow_color as it reaches the outer edge.
+ By default it is invisible.
]]
values
{
@@ -265,7 +287,7 @@ interface @beta Efl.Text_Style {
]]
values
{
- code: string; [[Filter code]]
+ code: string; [[Filter code.]]
}
}
}
diff --git a/src/lib/efl/interfaces/efl_text_types.eot b/src/lib/efl/interfaces/efl_text_types.eot
index c0451e03aa..d56dccf417 100644
--- a/src/lib/efl/interfaces/efl_text_types.eot
+++ b/src/lib/efl/interfaces/efl_text_types.eot
@@ -10,23 +10,23 @@ enum Efl.Text_Bidirectional_Type {
inherit [[Inherit text type]]
}
-struct @beta Efl.Text_Change_Info {
+enum Efl.Text_Change_Type {
+ [[Text change type.
+ @since 1.24
+ ]]
+ insert = 0, [[the content was inserted.]]
+ remove [[the content was removed.]]
+}
+
+struct Efl.Text_Change_Info {
[[This structure includes all the information about content changes.
It's meant to be used to implement undo/redo.
+ @since 1.24
]]
content: string; [[The content added/removed]]
position: size; [[The position where it was added/removed]]
length: size; [[The length of content in characters (not bytes, actual unicode characters)]]
- insert: bool; [[$true if the content was inserted, $false if removei]]
- merge: bool; [[$true if can be merged with the previous one. Used for example with insertion when something is already selected]]
+ type: Efl.Text_Change_Type; [[Text change type]]
+ mergeable: bool; [[$true if can be merged with the previous one. Used for example with insertion when something is already selected]]
}
-
-struct @beta Efl.Text_Range {
- [[This structure includes text position range (from/to).
- ]]
- start: int; [[The start postion.]]
- end: int; [[The end position.]]
-}
-
-struct @extern @beta Efl.Text_Attribute_Handle; [[EFL text annotations data structure]] \ No newline at end of file
diff --git a/src/lib/efl/interfaces/efl_types.eot b/src/lib/efl/interfaces/efl_types.eot
index fd5a23f255..39648518de 100644
--- a/src/lib/efl/interfaces/efl_types.eot
+++ b/src/lib/efl/interfaces/efl_types.eot
@@ -5,7 +5,7 @@ struct @extern Efl.Time
It is intended to be a standard way to reference
it in .eo files.
- @since 1.18
+ @since 1.22
]]
tm_sec: int; [[Seconds. [0-60] (1 leap second)]]
@@ -27,7 +27,7 @@ struct Efl.Version
be passed by applications at startup time to inform EFL of the version
a certain application was built for.
- @since 1.18
+ @since 1.22
]]
major: int; [[Major component of the version (>= 1).]]
diff --git a/src/lib/efl/interfaces/efl_ui_draggable.eo b/src/lib/efl/interfaces/efl_ui_draggable.eo
index 91c74202ad..0b4139958d 100644
--- a/src/lib/efl/interfaces/efl_ui_draggable.eo
+++ b/src/lib/efl/interfaces/efl_ui_draggable.eo
@@ -22,16 +22,4 @@ interface @beta Efl.Ui.Draggable
}
}
}
-
- events {
- /* FIXME: Explain what is the object passed through the event_infos */
- drag: Efl.Object; [[Called when drag operation starts]]
- drag,start: void; [[Called when drag started]]
- drag,stop: Efl.Object; [[Called when drag stopped]]
- drag,end: void; [[Called when drag operation ends]]
- drag,start,up: Efl.Object; [[Called when drag starts into up direction]]
- drag,start,down: Efl.Object; [[Called when drag starts into down direction]]
- drag,start,right: Efl.Object; [[Called when drag starts into right direction]]
- drag,start,left: Efl.Object; [[Called when drag starts into left direction]]
- }
}
diff --git a/src/lib/efl/interfaces/efl_ui_factory_bind.eo b/src/lib/efl/interfaces/efl_ui_factory_bind.eo
index 74717e595f..4e1a42556c 100644
--- a/src/lib/efl/interfaces/efl_ui_factory_bind.eo
+++ b/src/lib/efl/interfaces/efl_ui_factory_bind.eo
@@ -1,3 +1,5 @@
+import eina_types;
+
interface Efl.Ui.Factory_Bind
{
[[Efl UI Property interface.
diff --git a/src/lib/efl/interfaces/efl_ui_range_display.eo b/src/lib/efl/interfaces/efl_ui_range_display.eo
index 4b8cade311..2a9a75abb7 100644
--- a/src/lib/efl/interfaces/efl_ui_range_display.eo
+++ b/src/lib/efl/interfaces/efl_ui_range_display.eo
@@ -4,7 +4,7 @@ interface Efl.Ui.Range_Display
A value range contains a value restricted between specified minimum and maximum
limits at all times.
- This can be used for progressbars, sliders or spinners, for example.
+ This can be used for progress bars, sliders or spinners, for example.
@since 1.23
]]
diff --git a/src/lib/efl/interfaces/efl_ui_scrollbar.eo b/src/lib/efl/interfaces/efl_ui_scrollbar.eo
index 5741df6b8f..3b4696f00b 100644
--- a/src/lib/efl/interfaces/efl_ui_scrollbar.eo
+++ b/src/lib/efl/interfaces/efl_ui_scrollbar.eo
@@ -60,6 +60,18 @@ interface Efl.Ui.Scrollbar
and $[1.0] (the bottom side of the thumb is touching the bottom edge of the widget).]]
}
}
+ @property bar_visibility {
+ [[Current visibility state of the scrollbars.
+ This is useful in @Efl.Ui.Scrollbar_Mode.auto mode where EFL decides if the scrollbars
+ are shown or hidden. See also the @[.bar,show] and @[.bar,hide] events.
+ ]]
+ get {
+ }
+ values {
+ hbar: bool; [[Whether the horizontal scrollbar is currently visible.]]
+ vbar: bool; [[Whether the vertical scrollbar is currently visible.]]
+ }
+ }
bar_visibility_update @protected @beta{
[[Update bar visibility.
diff --git a/src/lib/efl/interfaces/meson.build b/src/lib/efl/interfaces/meson.build
index 76e9fb5d07..0b1bdd4556 100644
--- a/src/lib/efl/interfaces/meson.build
+++ b/src/lib/efl/interfaces/meson.build
@@ -93,7 +93,7 @@ pub_eo_files = [
'efl_gfx_text_class.eo',
'efl_gfx_size_class.eo',
'efl_cached_item.eo',
- 'efl_input_text.eo',
+ 'efl_input_text_entity.eo',
]
foreach eo_file : pub_eo_files
diff --git a/src/lib/efl/meson.build b/src/lib/efl/meson.build
index d5805be9b3..5dbc825894 100644
--- a/src/lib/efl/meson.build
+++ b/src/lib/efl/meson.build
@@ -1,5 +1,6 @@
-efl_deps = []
+efl_deps = [m]
efl_pub_deps = [eo]
+efl_ext_deps = []
efl_header_src = [
'Efl.h',
@@ -13,7 +14,8 @@ package_header_subdirs += 'interfaces'
efl_lib = library('efl',
efl_src, pub_eo_file_target,
- dependencies: [eina, eo, m],
+ c_args : package_c_args,
+ dependencies: [efl_deps, efl_pub_deps, efl_ext_deps],
install: true,
version : meson.project_version()
)
diff --git a/src/lib/efl_canvas_wl/Efl_Canvas_Wl.h b/src/lib/efl_canvas_wl/Efl_Canvas_Wl.h
new file mode 100644
index 0000000000..b0c0772ab8
--- /dev/null
+++ b/src/lib/efl_canvas_wl/Efl_Canvas_Wl.h
@@ -0,0 +1,61 @@
+#ifndef EFL_CANVAS_WL_H
+# define EFL_CANVAS_WL_H
+#include <Evas.h>
+#include <Efl_Core.h>
+
+#ifdef EAPI
+# undef EAPI
+#endif
+#ifdef EAPI_WEAK
+# undef EAPI_WEAK
+#endif
+
+# ifdef __GNUC__
+# if __GNUC__ >= 4
+# define EAPI __attribute__ ((visibility("default")))
+# define EAPI_WEAK
+# else
+# define EAPI
+# define EAPI_WEAK
+# endif
+# endif
+
+#define EWAPI EAPI EAPI_WEAK
+
+#ifdef WAYLAND_UTIL_H
+typedef struct wl_surface Efl_Canvas_Wl_Wl_Surface;
+typedef struct wl_global Efl_Canvas_Wl_Wl_Global;
+typedef struct wl_interface Efl_Canvas_Wl_Wl_Interface;
+typedef struct wl_array Efl_Canvas_Wl_Wl_Array;
+typedef void Efl_Canvas_Wl_Wl_Interface_Data;
+typedef void Efl_Canvas_Wl_Wl_Interface_Bind_Cb;
+#else
+typedef struct Efl_Canvas_Wl_Wl_Surface Efl_Canvas_Wl_Wl_Surface;
+typedef struct Efl_Canvas_Wl_Wl_Global Efl_Canvas_Wl_Wl_Global;
+typedef struct Efl_Canvas_Wl_Wl_Interface Efl_Canvas_Wl_Wl_Interface;
+typedef struct Efl_Canvas_Wl_Wl_Array Efl_Canvas_Wl_Wl_Array;
+typedef void * Efl_Canvas_Wl_Wl_Interface_Data;
+typedef void * Efl_Canvas_Wl_Wl_Interface_Bind_Cb;
+#endif
+#ifdef _XKBCOMMON_H_
+typedef struct xkb_state Efl_Canvas_Wl_Xkb_State;
+#else
+typedef struct Efl_Canvas_Wl_Xkb_State Efl_Canvas_Wl_Xkb_State;
+#endif
+#include <efl_canvas_wl_surface.eo.h>
+#include <efl_canvas_wl.eo.h>
+/**
+ * Get the Evas_Object for an extracted wl_surface resource created by an efl_canvas_wl object
+ *
+ * @note Passing anything other than a valid wl_surface resource from an efl_canvas_wl object will guarantee a crash.
+ *
+ * @param surface_resource The wl_resource for a wl_surface
+ * @return The Evas_Object of the surface, NULL on failure
+ * @since 1.24
+ */
+EAPI Evas_Object *efl_canvas_wl_extracted_surface_object_find(void *surface_resource);
+#undef EAPI
+#define EAPI
+#undef EAPI_WEAK
+#define EAPI_WEAK
+#endif
diff --git a/src/lib/efl_wl/copiedfromweston.x b/src/lib/efl_canvas_wl/copiedfromweston.x
index d5c35eee75..d5c35eee75 100644
--- a/src/lib/efl_wl/copiedfromweston.x
+++ b/src/lib/efl_canvas_wl/copiedfromweston.x
diff --git a/src/lib/efl_wl/dmabuf.c b/src/lib/efl_canvas_wl/dmabuf.c
index 273d141b05..273d141b05 100644
--- a/src/lib/efl_wl/dmabuf.c
+++ b/src/lib/efl_canvas_wl/dmabuf.c
diff --git a/src/lib/efl_wl/dmabuf.h b/src/lib/efl_canvas_wl/dmabuf.h
index 72f42816a3..72f42816a3 100644
--- a/src/lib/efl_wl/dmabuf.h
+++ b/src/lib/efl_canvas_wl/dmabuf.h
diff --git a/src/lib/efl_wl/efl_wl.c b/src/lib/efl_canvas_wl/efl_canvas_wl.c
index 02406d1d21..15f5c255b2 100644
--- a/src/lib/efl_wl/efl_wl.c
+++ b/src/lib/efl_canvas_wl/efl_canvas_wl.c
@@ -1,3 +1,6 @@
+#define EFL_INTERNAL_UNSTABLE
+#define EFL_CANVAS_GROUP_PROTECTED
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@@ -16,6 +19,7 @@
#include "Ecore_Evas.h"
#include "Ecore_Wl2.h"
+#include "ecore_wl2_internal.h"
#include "Ecore_Input.h"
#include "Evas_GL.h"
@@ -33,8 +37,9 @@
# ifdef HAVE_ECORE_X
#include "Ecore_X.h"
#endif
-
-#include "Efl_Wl.h"
+#include "Evas_Internal.h"
+#include "canvas/evas_canvas_eo.h"
+#include "Efl_Canvas_Wl.h"
#undef COORDS_INSIDE
#define COORDS_INSIDE(x, y, xx, yy, ww, hh) \
@@ -83,6 +88,7 @@
WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE | \
WL_DATA_DEVICE_MANAGER_DND_ACTION_ASK)
+#define MY_CLASS EFL_CANVAS_WL_CLASS
typedef struct Input_Sequence
{
@@ -114,21 +120,21 @@ typedef struct Comp_Buffer
typedef struct Comp
{
- Efl_Wl_Rotation rotation;
+ Efl_Canvas_Wl_Rotation rotation;
double scale;
char *env;
+ Efl_Exe_Flags flags;
Ecore_Wl2_Display *disp;
Ecore_Wl2_Display *parent_disp;
Ecore_Wl2_Display *client_disp;
struct wl_display *display;
double wayland_time_base;
- Evas_Object *obj;
- Evas_Object *clip;
- Evas_Object *events;
+ Eo *obj;
+ Eo *clip;
+ Eo *events;
Eina_Hash *exes;
- Ecore_Event_Handler *exe_handler;
Eina_Inlist *surfaces;
unsigned int surfaces_count;
@@ -205,7 +211,7 @@ typedef struct Comp_Seat
struct xkb_context *context;
struct xkb_keymap *keymap;
struct xkb_state *state;
- char *keymap_str;
+ const char *keymap_str;
int keymap_str_size;
int repeat_rate;
int repeat_delay;
@@ -228,7 +234,7 @@ typedef struct Comp_Seat
} cursor;
struct
{
- Evas_Object *obj;
+ Eo *obj;
int layer;
int x, y;
} efl;
@@ -293,9 +299,9 @@ struct Comp_Surface
{
EINA_INLIST;
Comp *c;
- Evas_Object *obj;
- Evas_Object *clip;
- Evas_Object *img;
+ Eo *obj;
+ Eo *clip;
+ Eo *img;
Eina_Array *input_rects;
Eina_Array *opaque_rects;
Eina_List *proxies;
@@ -570,12 +576,12 @@ seat_tch_resources_get(Comp_Seat *s, struct wl_client *client)
return s->tch.resources ? eina_hash_find(s->tch.resources, &client) : NULL;
}
-static void comp_render_pre_proxied(Evas_Object *o, Evas *e, void *event_info);
+static void comp_render_pre_proxied(Eo *o, Evas *e, void *event_info);
static void comp_render_post_proxied(Comp_Surface *cs, Evas *e, void *event_info);
-static void comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Evas_Object *o);
+static void comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Eo *o);
static void
-comp_surface_proxy_del(void *data, Evas *e, Evas_Object *obj, void *event_info EINA_UNUSED)
+comp_surface_proxy_del(void *data, Evas *e, Eo *obj, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
int i;
@@ -597,7 +603,7 @@ comp_surface_proxy_del(void *data, Evas *e, Evas_Object *obj, void *event_info E
}
static void
-comp_surface_proxy_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+comp_surface_proxy_resize(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info EINA_UNUSED)
{
int w, h;
@@ -642,7 +648,7 @@ comp_surface_proxy_win_del(Ecore_Evas *ee)
static void
seat_drag_proxy_win_add(Comp_Seat *s)
{
- Evas_Object *o;
+ Eo *o;
if (s->drag.proxy_win) abort();
evas_object_hide(s->drag.surface->obj);
@@ -977,7 +983,12 @@ _apply_positioner(Comp_Surface *cs, Shell_Positioner *sp)
h = zy + zh - y;
}
evas_object_move(cs->obj, zx + x, zy + y);
- if (w > 0) evas_object_resize(cs->obj, w, h);
+ if (w > 0)
+ {
+ if (!cs->hint_set_weight)
+ evas_object_size_hint_weight_set(cs->obj, 0, 0);
+ evas_object_resize(cs->obj, w, h);
+ }
}
static const struct wl_data_offer_interface data_device_offer_interface =
@@ -1181,18 +1192,18 @@ shell_surface_activate_recurse(Comp_Surface *cs)
static void
shell_surface_minmax_update(Comp_Surface *cs)
{
- int w, h;
+ Eina_Size2D sz;
if (!cs) return;
if (!cs->c->minmax) return;
if (cs->extracted) return;
if (cs->parent) return;
- evas_object_size_hint_min_get(cs->obj, &w, &h);
- evas_object_size_hint_min_set(cs->c->obj, w, h);
- evas_object_size_hint_max_get(cs->obj, &w, &h);
- if (!w) w = -1;
- if (!h) h = -1;
- evas_object_size_hint_max_set(cs->c->obj, w, h);
+ sz = efl_gfx_hint_size_restricted_min_get(cs->obj);
+ efl_gfx_hint_size_restricted_min_set(cs->c->obj, sz);
+ sz = efl_gfx_hint_size_restricted_max_get(cs->obj);
+ if (!sz.w) sz.w = -1;
+ if (!sz.h) sz.h = -1;
+ efl_gfx_hint_size_restricted_max_set(cs->c->obj, sz);
}
static void
@@ -1343,7 +1354,7 @@ comp_surface_buffer_post_render(Comp_Surface *cs)
}
static void
-comp_surface_pixels_get(void *data, Evas_Object *obj)
+comp_surface_pixels_get(void *data, Eo *obj)
{
Comp_Surface *cs = data;
Comp_Buffer *buffer;
@@ -1357,7 +1368,7 @@ comp_surface_pixels_get(void *data, Evas_Object *obj)
}
static void
-comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Evas_Object *o)
+comp_surface_commit_image_state(Comp_Surface *cs, Comp_Buffer *buffer, Eo *o)
{
if ((!buffer->renders) || (!eina_list_data_find(buffer->renders, evas_object_evas_get(o))))
buffer->renders = eina_list_append(buffer->renders, evas_object_evas_get(o));
@@ -1409,7 +1420,7 @@ comp_surface_commit_state(Comp_Surface *cs, Comp_Buffer_State *state)
{
int x, y;
Eina_List *l;
- Evas_Object *o;
+ Eo *o;
Comp_Buffer *buffer = NULL;
Eina_Bool newly_new = EINA_FALSE;
@@ -1512,7 +1523,7 @@ comp_surface_commit_state(Comp_Surface *cs, Comp_Buffer_State *state)
{
Eina_Iterator *it;
Eina_Rectangle *rect;
- Evas_Object *r;
+ Eo *r;
it = eina_tiler_iterator_new(state->opaque);
cs->opaque_rects = eina_array_new(1);
@@ -1549,7 +1560,7 @@ comp_surface_commit_state(Comp_Surface *cs, Comp_Buffer_State *state)
{
Eina_Iterator *it;
Eina_Rectangle *rect;
- Evas_Object *r;
+ Eo *r;
array_clear(&cs->input_rects);
it = eina_tiler_iterator_new(state->input);
@@ -1905,7 +1916,7 @@ comp_surface_impl_destroy(struct wl_resource *resource)
if (cs->post_render_queue && (!cs->dead))
{
Eina_List *l;
- Evas_Object *o;
+ Eo *o;
cs->dead = 1;
evas_object_hide(cs->obj);
@@ -1920,8 +1931,6 @@ comp_surface_impl_destroy(struct wl_resource *resource)
}
-static Evas_Smart *comp_surface_smart = NULL;
-
static inline Eina_Bool
comp_surface_check_grab(Comp_Surface *cs, Comp_Seat *s)
{
@@ -2016,7 +2025,7 @@ comp_surface_send_pointer_enter(Comp_Surface *cs, Comp_Seat *s, int cx, int cy)
}
static void
-comp_surface_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_in(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_In *ev = event_info;
Comp_Seat *s;
@@ -2070,7 +2079,7 @@ comp_surface_send_pointer_leave(Comp_Surface *cs, Comp_Seat *s)
}
static void
-comp_surface_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_out(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Out *ev = event_info;
Comp_Seat *s;
@@ -2153,7 +2162,7 @@ comp_surface_mouse_button(Comp_Surface *cs, Comp_Seat *s, uint32_t timestamp, ui
}
static void
-comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Down *ev = event_info;
Comp_Seat *s;
@@ -2168,7 +2177,7 @@ comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
static void
-comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Down *ev = event_info;
Comp_Seat *s;
@@ -2183,7 +2192,7 @@ comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
}
static void
-comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Mouse_Move *ev = event_info;
Comp_Surface *cs = data;
@@ -2228,7 +2237,7 @@ comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
static void
-comp_surface_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
+comp_surface_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Eo *obj EINA_UNUSED, void *event)
{
Evas_Event_Mouse_Wheel *ev = event;
Comp_Surface *cs = data;
@@ -2261,7 +2270,7 @@ comp_surface_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EI
}
static void
-comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Multi_Down *ev = event_info;
Comp_Surface *cs = data;
@@ -2295,7 +2304,7 @@ comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
static void
-comp_surface_multi_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_multi_up(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Multi_Up *ev = event_info;
Comp_Surface *cs = data;
@@ -2334,7 +2343,7 @@ comp_surface_multi_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
}
static void
-comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Multi_Move *ev = event_info;
Comp_Surface *cs = data;
@@ -2374,14 +2383,19 @@ comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
}
}
+EOLIAN static Eo *
+_efl_canvas_wl_surface_efl_object_constructor(Eo *obj, Comp_Surface *cs EINA_UNUSED)
+{
+ efl_canvas_group_clipped_set(obj, EINA_TRUE);
+ return efl_constructor(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS));
+}
+
static void
-comp_surface_smart_add(Evas_Object *obj)
+_efl_canvas_wl_surface_efl_canvas_group_group_add(Eo *obj, Comp_Surface *cs)
{
- Comp_Surface *cs;
Evas *e;
- cs = calloc(1, sizeof(Comp_Surface));
- evas_object_smart_data_set(obj, cs);
+ efl_canvas_group_add(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS));
cs->obj = obj;
evas_object_event_callback_add(cs->obj, EVAS_CALLBACK_MOUSE_DOWN, comp_surface_mouse_down, cs);
evas_object_event_callback_add(cs->obj, EVAS_CALLBACK_MOUSE_UP, comp_surface_mouse_up, cs);
@@ -2395,19 +2409,17 @@ comp_surface_smart_add(Evas_Object *obj)
e = evas_object_evas_get(obj);
cs->img = evas_object_image_filled_add(e);
evas_object_show(cs->img);
- cs->clip = evas_object_rectangle_add(e);
+ cs->clip = (Eo*)efl_canvas_group_clipper_get(obj);
+ efl_gfx_entity_geometry_set(cs->clip, efl_gfx_entity_geometry_get(obj));
evas_object_smart_member_add(cs->img, cs->obj);
- evas_object_smart_member_add(cs->clip, cs->obj);
evas_object_image_border_center_fill_set(cs->img, EVAS_BORDER_FILL_SOLID);
evas_object_image_colorspace_set(cs->img, EVAS_COLORSPACE_ARGB8888);
}
static void
-comp_surface_smart_del(Evas_Object *obj)
+_efl_canvas_wl_surface_efl_canvas_group_group_del(Eo *obj, Comp_Surface *cs)
{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
-
array_clear(&cs->input_rects);
array_clear(&cs->opaque_rects);
eina_tiler_free(cs->opaque);
@@ -2421,7 +2433,6 @@ comp_surface_smart_del(Evas_Object *obj)
wl_resource_destroy(cs->res);
}
evas_object_del(cs->img);
- evas_object_del(cs->clip);
if (cs->shell.surface)
{
if (cs->role)
@@ -2430,54 +2441,42 @@ comp_surface_smart_del(Evas_Object *obj)
}
cs->c->surfaces = eina_inlist_remove(cs->c->surfaces, EINA_INLIST_GET(cs));
cs->c->surfaces_count--;
- free(cs);
+ efl_canvas_group_del(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS));
}
static void
-comp_surface_smart_move(Evas_Object *obj, int x, int y)
+_efl_canvas_wl_surface_efl_gfx_entity_position_set(Eo *obj, Comp_Surface *cs, Eina_Position2D pos)
{
- Eina_List *l;
- Evas_Object *o;
- int px, py, cx, cy;
+ efl_gfx_entity_position_set(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS), pos);
+ efl_gfx_entity_position_set(cs->clip, pos);
- evas_object_geometry_get(obj, &px, &py, NULL, NULL);
//{
- //Comp_Surface *cs = evas_object_smart_data_get(obj);
//if (cs->cursor)
//fprintf(stderr, "COMP %sSURFACE(%p) %d,%d\n", cs->subsurface ? "SUB" : "", cs, x, y);
//}
- l = evas_object_smart_members_get(obj);
- EINA_LIST_FREE(l, o)
- {
- evas_object_geometry_get(o, &cx, &cy, NULL, NULL);
- evas_object_move(o, x + (cx - px), y + (cy - py));
- //fprintf(stderr, "SUBOBJ %d,%d\n", x + (cx - px), y + (cy - py));
- }
}
static void
-comp_surface_smart_resize(Evas_Object *obj, int w, int h)
+_efl_canvas_wl_surface_efl_gfx_entity_size_set(Eo *obj, Comp_Surface *cs, Eina_Size2D sz)
{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_resize(cs->clip, w, h);
+ efl_gfx_entity_size_set(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS), sz);
+ evas_object_resize(cs->clip, sz.w, sz.h);
//if (cs->cursor) fprintf(stderr, "COMP %sSURFACE(%p) %dx%d\n", cs->subsurface ? "SUB" : "", cs, w, h);
if (cs->drag)
evas_object_move(cs->obj, cs->drag->ptr.pos.x, cs->drag->ptr.pos.y);
}
static void
-comp_surface_smart_show(Evas_Object *obj)
+_efl_canvas_wl_surface_efl_gfx_entity_visible_set(Eo *obj, Comp_Surface *cs, Eina_Bool vis)
{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_show(cs->clip);
- cs->mapped = 1;
-}
-
-static void
-comp_surface_smart_hide(Evas_Object *obj)
-{
- Comp_Surface *pcs = NULL, *lcs, *cs = evas_object_smart_data_get(obj);
-
+ Comp_Surface *pcs = NULL, *lcs;
+ efl_gfx_entity_visible_set(efl_super(obj, EFL_CANVAS_WL_SURFACE_CLASS), vis);
+ if (vis)
+ {
+ evas_object_show(cs->clip);
+ cs->mapped = 1;
+ return;
+ }
evas_object_hide(cs->clip);
cs->mapped = 0;
@@ -2515,77 +2514,18 @@ comp_surface_smart_hide(Evas_Object *obj)
}
static void
-comp_surface_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_clip_set(cs->clip, clip);
-}
-
-static void
-comp_surface_smart_clip_unset(Evas_Object *obj)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- evas_object_clip_unset(cs->clip);
-}
-
-static void
-comp_surface_smart_member_add(Evas_Object *obj, Evas_Object *child)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- if (child != cs->clip) evas_object_clip_set(child, cs->clip);
-}
-
-static void
-comp_surface_smart_member_del(Evas_Object *obj, Evas_Object *child)
-{
- Comp_Surface *cs = evas_object_smart_data_get(obj);
- if (child != cs->clip) evas_object_clip_unset(child);
-}
-
-static void
-comp_surface_smart_init(void)
-{
- if (comp_surface_smart) return;
- {
- static const Evas_Smart_Class sc =
- {
- "comp_surface",
- EVAS_SMART_CLASS_VERSION,
- comp_surface_smart_add,
- comp_surface_smart_del,
- comp_surface_smart_move,
- comp_surface_smart_resize,
- comp_surface_smart_show,
- comp_surface_smart_hide,
- NULL, //color_set
- comp_surface_smart_clip_set,
- comp_surface_smart_clip_unset,
- NULL,
- comp_surface_smart_member_add,
- comp_surface_smart_member_del,
-
- NULL,
- NULL,
- NULL,
- NULL
- };
- comp_surface_smart = evas_smart_class_new(&sc);
- }
-}
-
-static void
comp_surface_create(struct wl_client *client, struct wl_resource *resource, uint32_t id)
{
struct wl_resource *res;
Comp_Surface *cs;
Comp *c = wl_resource_get_user_data(resource);
- Evas_Object *obj;
+ Eo *obj;
int x, y;
res = wl_resource_create(client, &wl_surface_interface, wl_resource_get_version(resource), id);
- comp_surface_smart_init();
- obj = evas_object_smart_add(c->evas, comp_surface_smart);
- cs = evas_object_smart_data_get(obj);
+ obj = efl_add(EFL_CANVAS_WL_SURFACE_CLASS, c->obj);
+ efl_gfx_entity_visible_set(obj, EINA_FALSE);
+ cs = efl_data_scope_get(obj, EFL_CANVAS_WL_SURFACE_CLASS);
cs->res = res;
evas_object_smart_member_add(cs->obj, c->obj);
cs->c = c;
@@ -3163,16 +3103,16 @@ output_resize(Comp *c, struct wl_resource *res)
int rot[][4] =
{
{
- [EFL_WL_ROTATION_0] = WL_OUTPUT_TRANSFORM_NORMAL,
- [EFL_WL_ROTATION_90] = WL_OUTPUT_TRANSFORM_90,
- [EFL_WL_ROTATION_180] = WL_OUTPUT_TRANSFORM_180,
- [EFL_WL_ROTATION_270] = WL_OUTPUT_TRANSFORM_270,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_0] = WL_OUTPUT_TRANSFORM_NORMAL,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_90] = WL_OUTPUT_TRANSFORM_90,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_180] = WL_OUTPUT_TRANSFORM_180,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_270] = WL_OUTPUT_TRANSFORM_270,
},
{
- [EFL_WL_ROTATION_0] = WL_OUTPUT_TRANSFORM_FLIPPED,
- [EFL_WL_ROTATION_90] = WL_OUTPUT_TRANSFORM_FLIPPED_90,
- [EFL_WL_ROTATION_180] = WL_OUTPUT_TRANSFORM_FLIPPED_180,
- [EFL_WL_ROTATION_270] = WL_OUTPUT_TRANSFORM_FLIPPED_270,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_0] = WL_OUTPUT_TRANSFORM_FLIPPED,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_90] = WL_OUTPUT_TRANSFORM_FLIPPED_90,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_180] = WL_OUTPUT_TRANSFORM_FLIPPED_180,
+ [EFL_CANVAS_WL_ROTATION_ROTATE_270] = WL_OUTPUT_TRANSFORM_FLIPPED_270,
},
};
@@ -3238,7 +3178,8 @@ shell_surface_toplevel_set_parent(struct wl_client *client EINA_UNUSED, struct w
if (parent_resource) pcs = wl_resource_get_user_data(parent_resource);
comp_surface_reparent(cs, pcs);
- evas_object_smart_callback_call(cs->c->obj, "child_added", cs->obj);
+ if (parent_resource)
+ efl_event_callback_call(cs->c->obj, EFL_CANVAS_WL_EVENT_CHILD_ADDED, cs->obj);
}
static void
@@ -3268,7 +3209,7 @@ static void
shell_surface_toplevel_set_max_size(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, int32_t w, int32_t h)
{
Comp_Surface *cs = wl_resource_get_user_data(resource);
- evas_object_size_hint_max_set(cs->obj, w, h);
+ efl_gfx_hint_size_restricted_max_set(cs->obj, EINA_SIZE2D(w, h));
if (cs == cs->c->active_surface)
shell_surface_minmax_update(cs);
}
@@ -3277,7 +3218,7 @@ static void
shell_surface_toplevel_set_min_size(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, int32_t w, int32_t h)
{
Comp_Surface *cs = wl_resource_get_user_data(resource);
- evas_object_size_hint_min_set(cs->obj, w, h);
+ efl_gfx_hint_size_restricted_min_set(cs->obj, EINA_SIZE2D(w, h));
if (cs == cs->c->active_surface)
shell_surface_minmax_update(cs);
}
@@ -3332,6 +3273,7 @@ shell_surface_toplevel_create(struct wl_client *client EINA_UNUSED, struct wl_re
cs->role = wl_resource_create(client, &xdg_toplevel_interface, 1, id);
wl_resource_set_implementation(cs->role, &shell_surface_toplevel_interface, cs, shell_surface_toplevel_impl_destroy);
cs->shell.new = 1;
+ efl_event_callback_call(cs->c->obj, EFL_CANVAS_WL_EVENT_TOPLEVEL_ADDED, cs->obj);
}
static void
@@ -3420,7 +3362,7 @@ shell_surface_popup_create(struct wl_client *client, struct wl_resource *resourc
comp_surface_reparent(cs, wl_resource_get_user_data(parent_resource));
cs->shell.positioner = wl_resource_get_user_data(positioner_resource);
_apply_positioner(cs, cs->shell.positioner);
- evas_object_smart_callback_call(cs->c->obj, "popup_added", cs->obj);
+ efl_event_callback_call(cs->c->obj, EFL_CANVAS_WL_EVENT_POPUP_ADDED, cs->obj);
}
static void
@@ -3891,7 +3833,7 @@ seat_kbd_create(struct wl_client *client, struct wl_resource *resource, uint32_t
}
static void
-seat_ptr_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+seat_ptr_del(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp_Seat *s = data;
@@ -4203,7 +4145,7 @@ comp_render_pre(Comp *c, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
if (cs->opaque_rects && (eina_array_count(cs->opaque_rects) == 1))
{
- Evas_Object *r = eina_array_data_get(cs->opaque_rects, 0);
+ Eo *r = eina_array_data_get(cs->opaque_rects, 0);
int x, y, w, h, ox, oy, ow, oh;
evas_object_geometry_get(cs->img, &x, &y, &w, &h);
@@ -4225,9 +4167,10 @@ comp_render_pre(Comp *c, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
}
static void
-comp_render_pre_proxied(Evas_Object *o, Evas *e, void *event_info)
+comp_render_pre_proxied(Eo *o, Evas *e, void *event_info)
{
Comp_Surface *cs = evas_object_data_get(o, "comp_surface");
+ EINA_SAFETY_ON_NULL_RETURN(cs);
Comp_Buffer *buffer = cs->buffer[!cs->render_queue];
//fprintf(stderr, "PROXY RENDER_PRE %d\n", buffer ? wl_resource_get_id(buffer->res) : -1);
@@ -4299,8 +4242,6 @@ comp_render_post(Comp *c, Evas *e, void *event_info EINA_UNUSED)
}
}
-static Evas_Smart *comp_smart = NULL;
-
static void
comp_seat_selection_update(Comp_Seat *s)
{
@@ -4538,7 +4479,7 @@ comp_seats_proxy(Comp *c)
else if (!c->parent_disp)
comp_device_caps_update(s);
s->global = wl_global_create(c->display, &wl_seat_interface, 4, s, seat_bind);
- evas_object_smart_callback_call(s->c->obj, "seat_added", dev);
+ efl_event_callback_call(s->c->obj, EFL_CANVAS_WL_EVENT_SEAT_ADDED, dev);
if (ecore_wl2_display_sync_is_done(c->client_disp))
seat_proxy_update(s);
}
@@ -5078,7 +5019,7 @@ comp_handlers_init(void)
}
static void
-comp_focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+comp_focus_in(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp *c = data;
//Efl_Input_Focus_Data *ev = event_info;
@@ -5125,7 +5066,7 @@ comp_focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi
}
static void
-comp_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+comp_focus_out(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp *c = data;
//Efl_Input_Focus_Data *ev = event_info;
@@ -5140,7 +5081,7 @@ comp_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo
}
static void
-comp_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
+comp_mouse_in(void *data, Evas *e, Eo *obj, void *event_info)
{
Comp *c = data;
Evas_Event_Mouse_In *ev = event_info;
@@ -5178,7 +5119,7 @@ comp_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
}
static void
-comp_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_multi_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Comp *c = data;
Evas_Event_Multi_Move *ev = event_info;
@@ -5199,7 +5140,7 @@ comp_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
}
static void
-comp_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+comp_mouse_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info)
{
Comp *c = data;
Evas_Event_Mouse_Move *ev = event_info;
@@ -5220,7 +5161,7 @@ comp_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
}
static void
-comp_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info)
+comp_mouse_out(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info)
{
Comp *c = data;
Evas_Event_Mouse_Out *ev = event_info;
@@ -5334,28 +5275,33 @@ efl_hints_bind(struct wl_client *client, void *data, uint32_t version, uint32_t
wl_resource_set_implementation(res, &hints_interface, data, NULL);
}
+EOLIAN static Eo *
+_efl_canvas_wl_efl_object_constructor(Eo *obj, Comp *c)
+{
+ efl_canvas_group_clipped_set(obj, EINA_TRUE);
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(!ecore_wl2_init(), NULL);
+ return efl_constructor(efl_super(obj, MY_CLASS));
+}
-
-static void
-comp_smart_add(Evas_Object *obj)
+EOLIAN static void
+_efl_canvas_wl_efl_canvas_group_group_add(Eo *obj, Comp *c)
{
- Comp *c;
char *env, *dbg = NULL;
- c = calloc(1, sizeof(Comp));
+ efl_canvas_group_add(efl_super(obj, MY_CLASS));
c->wayland_time_base = ecore_loop_time_get();
c->obj = obj;
- evas_object_smart_data_set(obj, c);
+ c->flags = EFL_EXE_FLAGS_TERM_WITH_PARENT;
env = getenv("WAYLAND_DISPLAY");
if (env) env = strdup(env);
- if (getenv("EFL_WL_DEBUG"))
+ if (getenv("EFL_CANVAS_WL_DEBUG"))
{
dbg = eina_strdup(getenv("WAYLAND_DEBUG"));
setenv("WAYLAND_DEBUG", "1", 1);
}
c->disp = ecore_wl2_display_create(NULL);
- if (getenv("EFL_WL_DEBUG"))
+ if (getenv("EFL_CANVAS_WL_DEBUG"))
{
if (dbg) setenv("WAYLAND_DEBUG", dbg, 1);
else unsetenv("WAYLAND_DEBUG");
@@ -5366,9 +5312,9 @@ comp_smart_add(Evas_Object *obj)
else unsetenv("WAYLAND_DISPLAY");
c->display = ecore_wl2_display_get(c->disp);
c->client_surfaces = eina_hash_pointer_new(NULL);
- c->evas = evas_object_evas_get(obj);
- c->clip = evas_object_rectangle_add(c->evas);
- evas_object_smart_member_add(c->clip, obj);
+ c->evas = efl_provider_find(obj, EVAS_CANVAS_CLASS);
+ c->clip = (Eo*)efl_canvas_group_clipper_get(obj);
+ efl_gfx_entity_geometry_set(c->clip, efl_gfx_entity_geometry_get(obj));
c->events = evas_object_rectangle_add(c->evas);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_IN, comp_mouse_in, c);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE, comp_mouse_move, c);
@@ -5426,12 +5372,9 @@ comp_smart_add(Evas_Object *obj)
free(env);
}
-static void
-comp_smart_del(Evas_Object *obj)
+EOLIAN static void
+_efl_canvas_wl_efl_canvas_group_group_del(Eo *obj, Comp *c)
{
- Comp *c = evas_object_smart_data_get(obj);
-
- evas_object_del(c->clip);
evas_object_del(c->events);
free(c->env);
if (c->gl) comp_gl_shutdown(c);
@@ -5458,10 +5401,8 @@ comp_smart_del(Evas_Object *obj)
evas_event_callback_del_full(c->evas, EVAS_CALLBACK_RENDER_PRE, (Evas_Event_Cb)comp_render_pre, c);
evas_event_callback_del_full(c->evas, EVAS_CALLBACK_RENDER_POST, (Evas_Event_Cb)comp_render_post, c);
efl_event_callback_array_del(c->evas, comp_device_cbs(), c);
- ecore_event_handler_del(c->exe_handler);
eina_hash_free(c->exes);
comps = eina_list_remove(comps, c);
- free(c);
if (!comps)
{
void *h;
@@ -5472,35 +5413,25 @@ comp_smart_del(Evas_Object *obj)
#endif
}
ecore_wl2_shutdown();
+ efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
static void
-comp_smart_move(Evas_Object *obj, int x, int y)
+_efl_canvas_wl_efl_gfx_entity_position_set(Eo *obj, Comp *c, Eina_Position2D pos)
{
- Comp_Surface *cs;
- Comp *c = evas_object_smart_data_get(obj);
- int dx, dy;
- evas_object_geometry_get(obj, &dx, &dy, NULL, NULL);
- dx = x - dx;
- dy = y - dy;
- evas_object_move(c->clip, x, y);
- evas_object_move(c->events, x, y);
- EINA_INLIST_FOREACH(c->surfaces, cs)
- {
- int cx, cy;
- evas_object_geometry_get(cs->obj, &cx, &cy, NULL, NULL);
- evas_object_move(cs->obj, cx + dx, cy + dy);
- }
+ efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
+ efl_gfx_entity_position_set(c->clip, pos);
}
static void
-comp_smart_resize(Evas_Object *obj, int w, int h)
+_efl_canvas_wl_efl_gfx_entity_size_set(Eo *obj, Comp *c, Eina_Size2D sz)
{
- Comp *c = evas_object_smart_data_get(obj);
Eina_List *l;
Comp_Surface *cs;
struct wl_resource *res;
+ int w = sz.w, h = sz.h;
+ efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz);
evas_object_resize(c->clip, w, h);
evas_object_resize(c->events, w, h);
EINA_LIST_FOREACH(c->output_resources, l, res)
@@ -5512,101 +5443,25 @@ comp_smart_resize(Evas_Object *obj, int w, int h)
}
static void
-comp_smart_show(Evas_Object *obj)
+_efl_canvas_wl_efl_gfx_entity_visible_set(Eo *obj, Comp *c, Eina_Bool vis)
{
- Comp *c = evas_object_smart_data_get(obj);
Comp_Surface *cs;
- evas_object_show(c->clip);
+ efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), vis);
EINA_INLIST_FOREACH(c->surfaces, cs)
- comp_surface_output_leave(cs);
-}
-
-static void
-comp_smart_hide(Evas_Object *obj)
-{
- Comp *c = evas_object_smart_data_get(obj);
- Comp_Surface *cs;
-
- evas_object_hide(c->clip);
- EINA_INLIST_FOREACH(c->surfaces, cs)
- comp_surface_output_leave(cs);
-}
-
-static void
-comp_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
-{
- Comp *c = evas_object_smart_data_get(obj);
- evas_object_color_set(c->clip, r, g, b, a);
-}
-
-static void
-comp_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
-{
- Comp *c = evas_object_smart_data_get(obj);
- evas_object_clip_set(c->clip, clip);
-}
-
-static void
-comp_smart_clip_unset(Evas_Object *obj)
-{
- Comp *c = evas_object_smart_data_get(obj);
- evas_object_clip_unset(c->clip);
-}
-
-static void
-comp_smart_member_add(Evas_Object *obj, Evas_Object *child)
-{
- Comp *c = evas_object_smart_data_get(obj);
- if (child != c->clip) evas_object_clip_set(child, c->clip);
-}
-
-static void
-comp_smart_member_del(Evas_Object *obj, Evas_Object *child)
-{
- Comp *c = evas_object_smart_data_get(obj);
- if (child != c->clip) evas_object_clip_unset(child);
+ if (vis)
+ comp_surface_output_enter(cs);
+ else
+ comp_surface_output_leave(cs);
}
static void
-comp_smart_init(void)
-{
- if (comp_smart) return;
- {
- static const Evas_Smart_Class sc =
- {
- "comp",
- EVAS_SMART_CLASS_VERSION,
- comp_smart_add,
- comp_smart_del,
- comp_smart_move,
- comp_smart_resize,
- comp_smart_show,
- comp_smart_hide,
- comp_smart_color_set,
- comp_smart_clip_set,
- comp_smart_clip_unset,
- NULL,
- comp_smart_member_add,
- comp_smart_member_del,
-
- NULL,
- NULL,
- NULL,
- NULL
- };
- comp_smart = evas_smart_class_new(&sc);
- }
-}
-
-static Eina_Bool
-exe_event_del(void *data, int t EINA_UNUSED, Ecore_Exe_Event_Del *ev)
+exe_event_del(void *data, const Efl_Event *ev)
{
Comp *c = data;
- int32_t pid = ev->pid;
+ int32_t pid = efl_exe_pid_get(ev->object);
eina_hash_del_by_key(c->exes, &pid);
- return ECORE_CALLBACK_RENEW;
}
# ifdef __GNUC__
@@ -5618,7 +5473,7 @@ Eina_Bool
comp_dmabuf_test(struct linux_dmabuf_buffer *dmabuf)
{
Evas_Native_Surface ns;
- Evas_Object *test;
+ Eo *test;
int size;
void *data;
Comp *c = dmabuf->compositor;
@@ -5666,28 +5521,14 @@ comp_dmabuf_modifiers_query(void *compositor EINA_UNUSED, int format EINA_UNUSED
*num_modifiers = 0;
}
-Evas_Object *
-efl_wl_add(Evas *e)
-{
- comp_smart_init();
- EINA_SAFETY_ON_TRUE_RETURN_VAL(!ecore_wl2_init(), NULL);
- return evas_object_smart_add(e, comp_smart);
-}
-
-Ecore_Exe *
-comp_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
+Eo *
+comp_run(Eo *obj, Comp *c, const char *cmd, Efl_Exe_Flags flags)
{
char *env, *disp, *gl = NULL;
- Comp *c;
- Ecore_Exe *exe;
+ Efl_Exe *exe;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
if (!c->exes)
c->exes = eina_hash_int32_new(NULL);
- if (!c->exe_handler)
- c->exe_handler =
- ecore_event_handler_add(ECORE_EXE_EVENT_DEL, (Ecore_Event_Handler_Cb)exe_event_del, c);
disp = getenv("DISPLAY");
if (disp) disp = strdup(disp);
unsetenv("DISPLAY");
@@ -5700,7 +5541,10 @@ comp_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
if (gl) gl = strdup(gl);
setenv("ELM_ACCEL", "gl", 1);
}
- exe = ecore_exe_pipe_run(cmd, flags, c);
+ exe = efl_add(EFL_EXE_CLASS, obj,
+ efl_core_command_line_command_string_set(efl_added, cmd),
+ efl_exe_flags_set(efl_added, flags),
+ efl_task_run(efl_added));
if (disp) setenv("DISPLAY", disp, 1);
if (env) setenv("WAYLAND_DISPLAY", env, 1);
else unsetenv("WAYLAND_DISPLAY");
@@ -5714,113 +5558,135 @@ comp_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
free(disp);
if (exe)
{
- int32_t pid = ecore_exe_pid_get(exe);
+ int32_t pid = efl_exe_pid_get(exe);
eina_hash_add(c->exes, &pid, (void*)1);
+ efl_event_callback_add(exe, EFL_TASK_EVENT_EXIT, exe_event_del, c);
}
return exe;
}
-Ecore_Exe *
-efl_wl_run(Evas_Object *obj, const char *cmd)
+EOLIAN static Efl_Exe *
+_efl_canvas_wl_run(Eo *obj, Comp *c, const char *cmd)
{
- return comp_run(obj, cmd, ECORE_EXE_TERM_WITH_PARENT);
+ return comp_run(obj, c, cmd, EFL_EXE_FLAGS_TERM_WITH_PARENT);
}
-Ecore_Exe *
-efl_wl_flags_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags)
+EOLIAN static Efl_Exe_Flags
+_efl_canvas_wl_exec_flags_get(const Eo *obj, Comp *c)
{
- return comp_run(obj, cmd, flags);
+ return c->flags;
}
-void
-efl_wl_pid_add(Evas_Object *obj, int32_t pid)
+EOLIAN static void
+_efl_canvas_wl_exec_flags_set(Eo *obj, Comp *c, Efl_Exe_Flags flags)
{
- Comp *c;
+ c->flags = flags;
+}
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
+EOLIAN static void
+_efl_canvas_wl_allowed_pid_add(Eo *obj, Comp *c, int32_t pid)
+{
if (!c->exes)
c->exes = eina_hash_int32_new(NULL);
eina_hash_add(c->exes, &pid, (void*)1);
}
-void
-efl_wl_pid_del(Evas_Object *obj, int32_t pid)
+EOLIAN static void
+_efl_canvas_wl_allowed_pid_del(Eo *obj, Comp *c, int32_t pid)
{
- Comp *c;
-
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
if (!c->exes) return;
eina_hash_del_by_key(c->exes, &pid);
}
-Eina_Bool
-efl_wl_next(Evas_Object *obj)
+EOLIAN static Eo *
+_efl_canvas_wl_surface_next(Eo *obj, Comp *c)
{
- Comp *c;
Comp_Surface *cs;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
- if (c->surfaces_count < 2) return EINA_FALSE;
+ if (c->surfaces_count < 2) return NULL;
EINA_INLIST_REVERSE_FOREACH(c->surfaces, cs)
{
if (cs->shell.activated) continue;
if ((!cs->role) || (!cs->shell.surface) || cs->dead) continue;
cs->shell.activated = 1;
shell_surface_send_configure(cs);
- return EINA_TRUE;
+ return cs->obj;
}
- return EINA_FALSE;
+ return NULL;
}
-Eina_Bool
-efl_wl_prev(Evas_Object *obj)
+EOLIAN static Eo *
+_efl_canvas_wl_surface_prev(Eo *obj, Comp *c)
{
- Comp *c;
Comp_Surface *cs;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
- if (c->surfaces_count < 2) return EINA_FALSE;
+ if (c->surfaces_count < 2) return NULL;
EINA_INLIST_FOREACH(c->surfaces, cs)
{
if (cs->shell.activated) continue;
if ((!cs->role) || (!cs->shell.surface) || cs->dead) continue;
cs->shell.activated = 1;
shell_surface_send_configure(cs);
- return EINA_TRUE;
+ return cs->obj;
}
- return EINA_FALSE;
+ return NULL;
}
-void
-efl_wl_rotate(Evas_Object *obj, Efl_Wl_Rotation rot, Eina_Bool rtl)
+EOLIAN static Eo *
+_efl_canvas_wl_active_surface_get(const Eo *obj, Comp *c)
+{
+ if (c->active_surface && (!c->active_surface->dead))
+ return c->active_surface->obj;
+ return NULL;
+}
+
+EOLIAN static Eina_Bool
+_efl_canvas_wl_active_surface_set(Eo *obj, Comp *c, Eo *surface)
+{
+ Comp_Surface *cs = efl_data_scope_get(surface, EFL_CANVAS_WL_SURFACE_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(cs, EINA_FALSE);
+ if (cs->dead) return EINA_FALSE;
+ if (c->active_surface == cs) return EINA_TRUE;
+ /* can't activate a popup */
+ if (cs->shell.popup) return EINA_FALSE;
+ cs->shell.activated = 1;
+ shell_surface_send_configure(cs);
+ return EINA_TRUE;
+}
+
+EOLIAN static void
+_efl_canvas_wl_rotation_get(const Eo *obj EINA_UNUSED, Comp *c, Efl_Canvas_Wl_Rotation *rotation, Eina_Bool *rtl)
+{
+ if (rotation) *rotation = c->rotation;
+ if (rtl) *rtl = c->rtl;
+}
+
+EOLIAN static void
+_efl_canvas_wl_rotation_set(Eo *obj EINA_UNUSED, Comp *c, Efl_Canvas_Wl_Rotation rot, Eina_Bool rtl)
{
- Comp *c;
Eina_List *l;
struct wl_resource *res;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
c->rtl = !!rtl;
c->rotation = rot;
EINA_LIST_FOREACH(c->output_resources, l, res)
output_resize(c, res);
}
-void
-efl_wl_scale_set(Evas_Object *obj, double scale)
+EOLIAN static double
+_efl_canvas_wl_efl_gfx_entity_scale_get(const Eo *obj EINA_UNUSED, Comp *c)
+{
+ return c->scale;
+}
+
+EOLIAN static void
+_efl_canvas_wl_efl_gfx_entity_scale_set(Eo *obj EINA_UNUSED, Comp *c, double scale)
{
- Comp *c;
Eina_List *l;
struct wl_resource *res;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
c->scale = scale;
EINA_LIST_FOREACH(c->output_resources, l, res)
@@ -5828,13 +5694,15 @@ efl_wl_scale_set(Evas_Object *obj, double scale)
wl_output_send_scale(res, lround(c->scale));
}
-void
-efl_wl_aspect_set(Evas_Object *obj, Eina_Bool set)
+EOLIAN static Eina_Bool
+_efl_canvas_wl_aspect_propagate_get(const Eo *obj EINA_UNUSED, Comp *c)
{
- Comp *c;
+ return c->aspect;
+}
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
+EOLIAN static void
+_efl_canvas_wl_aspect_propagate_set(Eo *obj, Comp *c, Eina_Bool set)
+{
if (c->aspect == (!!set)) return;
c->aspect = !!set;
if (c->aspect)
@@ -5843,37 +5711,35 @@ efl_wl_aspect_set(Evas_Object *obj, Eina_Bool set)
evas_object_size_hint_aspect_set(obj, EVAS_ASPECT_CONTROL_NONE, 0, 0);
}
-void
-efl_wl_minmax_set(Evas_Object *obj, Eina_Bool set)
+EOLIAN static Eina_Bool
+_efl_canvas_wl_minmax_propagate_get(const Eo *obj EINA_UNUSED, Comp *c)
{
- Comp *c;
+ return c->minmax;
+}
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
+EOLIAN static void
+_efl_canvas_wl_minmax_propagate_set(Eo *obj, Comp *c, Eina_Bool set)
+{
if (c->minmax == (!!set)) return;
c->minmax = !!set;
if (c->minmax)
shell_surface_minmax_update(c->active_surface);
else
{
- evas_object_size_hint_min_set(obj, 0, 0);
- evas_object_size_hint_max_set(obj, -1, -1);
+ efl_gfx_hint_size_restricted_min_set(obj, EINA_SIZE2D(0, 0));
+ efl_gfx_hint_size_restricted_max_set(obj, EINA_SIZE2D(-1, -1));
}
}
-void *
-efl_wl_global_add(Evas_Object *obj, const void *interface, uint32_t version, void *data, void *bind_cb)
+EOLIAN static Efl_Canvas_Wl_Wl_Global *
+_efl_canvas_wl_global_add(Eo *obj, Comp *c, const Efl_Canvas_Wl_Wl_Interface *interface, uint32_t version, Efl_Canvas_Wl_Wl_Interface_Data *data, Efl_Canvas_Wl_Wl_Interface_Bind_Cb *bind_cb)
{
- Comp *c;
-
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
EINA_SAFETY_ON_NULL_RETURN_VAL(interface, NULL);
- c = evas_object_smart_data_get(obj);
- return wl_global_create(c->display, interface, version, data, bind_cb);
+ return (void*)wl_global_create(c->display, (void*)interface, version, (void*)data, (void*)bind_cb);
}
static void
-extracted_focus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+extracted_focus(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
@@ -5887,10 +5753,10 @@ extracted_focus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
}
static void
-extracted_unfocus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+extracted_unfocus(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
- Evas_Object *focus;
+ Eo *focus;
if (cs->dead) return;
focus = evas_focus_get(cs->c->evas);
@@ -5900,7 +5766,7 @@ extracted_unfocus(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event
}
static void
-extracted_changed(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+extracted_changed(void *data, Evas *e EINA_UNUSED, Eo *obj, void *event_info EINA_UNUSED)
{
Comp_Surface *cs = data;
@@ -5908,12 +5774,18 @@ extracted_changed(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event
shell_surface_send_configure(data);
}
-Eina_Bool
-efl_wl_surface_extract(Evas_Object *surface)
+static EOLIAN int32_t
+_efl_canvas_wl_surface_pid_get(const Eo *surface, Comp_Surface *cs)
+{
+ int32_t pid;
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, -1);
+ wl_client_get_credentials(wl_resource_get_client(cs->res), &pid, NULL, NULL);
+ return pid;
+}
+
+static EOLIAN Eina_Bool
+_efl_canvas_wl_surface_extract(Eo *surface, Comp_Surface *cs)
{
- Comp_Surface *cs;
- if (!eina_streq(evas_object_type_get(surface), "comp_surface")) abort();
- cs = evas_object_smart_data_get(surface);
EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->extracted, EINA_FALSE);
EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, EINA_FALSE);
cs->extracted = 1;
@@ -5925,8 +5797,8 @@ efl_wl_surface_extract(Evas_Object *surface)
return EINA_TRUE;
}
-Evas_Object *
-efl_wl_extracted_surface_object_find(void *surface_resource)
+Eo *
+efl_canvas_wl_extracted_surface_object_find(void *surface_resource)
{
Comp_Surface *cs = wl_resource_get_user_data(surface_resource);
@@ -5937,45 +5809,39 @@ efl_wl_extracted_surface_object_find(void *surface_resource)
return cs->obj;
}
-Evas_Object *
-efl_wl_extracted_surface_extracted_parent_get(Evas_Object *surface)
+static EOLIAN Eo *
+_efl_canvas_wl_surface_parent_surface_get(const Eo *surface, Comp_Surface *cs)
{
- Comp_Surface *cs;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(surface, NULL);
- if (!eina_streq(evas_object_type_get(surface), "comp_surface")) abort();
-
- cs = evas_object_smart_data_get(surface);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(!cs->extracted, NULL);
EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, NULL);
- if (cs->parent)
- {
- if (!cs->parent->extracted) return NULL;
- return cs->parent->obj;
- }
+ if (cs->parent && cs->role) return cs->parent->obj;
return NULL;
}
-void
-efl_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *str, void *key_array)
+static EOLIAN Eina_Bool
+_efl_canvas_wl_surface_extracted_get(const Eo *surface EINA_UNUSED, Comp_Surface *cs)
+{
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(cs->dead, EINA_FALSE);
+
+ return cs->extracted;
+}
+
+static EOLIAN void
+_efl_canvas_wl_seat_keymap_set(Eo *obj, Comp *c, Eo *seat, Efl_Canvas_Wl_Xkb_State *state, const char *str, Efl_Canvas_Wl_Wl_Array *key_array)
{
- Comp *c;
Comp_Seat *s;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
EINA_INLIST_FOREACH(c->seats, s)
{
- if (!seat) efl_wl_seat_keymap_set(obj, s->dev, state, str, key_array);
+ if (!seat) efl_canvas_wl_seat_keymap_set(obj, s->dev, state, str, key_array);
else if (s->dev == seat) break;
}
if (!seat) return;
EINA_SAFETY_ON_NULL_RETURN(s);
seat_kbd_destroy(s);
s->kbd.external = 1;
- s->kbd.keys_external = key_array;
- s->kbd.state = state;
+ s->kbd.keys_external = (void*)key_array;
+ s->kbd.state = (void*)state;
s->kbd.keymap_str = str;
if (str)
s->kbd.keymap_str_size = strlen(str) + 1;
@@ -5987,17 +5853,14 @@ efl_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *str, void
seat_kbd_external_init(s);
}
-void
-efl_wl_seat_key_repeat_set(Evas_Object *obj, Eo *seat, int repeat_rate, int repeat_delay)
+static EOLIAN void
+_efl_canvas_wl_seat_key_repeat_set(Eo *obj, Comp *c, Eo *seat, int repeat_rate, int repeat_delay)
{
- Comp *c;
Comp_Seat *s;
- if (!eina_streq(evas_object_type_get(obj), "comp")) abort();
- c = evas_object_smart_data_get(obj);
EINA_INLIST_FOREACH(c->seats, s)
{
- if (!seat) efl_wl_seat_key_repeat_set(obj, s->dev, repeat_rate, repeat_delay);
+ if (!seat) efl_canvas_wl_seat_key_repeat_set(obj, s->dev, repeat_rate, repeat_delay);
else if (s->dev == seat) break;
}
if (!seat) return;
@@ -6006,3 +5869,12 @@ efl_wl_seat_key_repeat_set(Evas_Object *obj, Eo *seat, int repeat_rate, int repe
s->kbd.repeat_delay = repeat_delay;
seat_kbd_repeat_rate_send(s);
}
+
+#define EFL_CANVAS_WL_EXTRA_OPS \
+ EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_canvas_wl), \
+
+#define EFL_CANVAS_WL_SURFACE_EXTRA_OPS \
+ EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_canvas_wl_surface), \
+
+#include "efl_canvas_wl.eo.c"
+#include "efl_canvas_wl_surface.eo.c"
diff --git a/src/lib/efl_canvas_wl/efl_canvas_wl.eo b/src/lib/efl_canvas_wl/efl_canvas_wl.eo
new file mode 100644
index 0000000000..843f034dc2
--- /dev/null
+++ b/src/lib/efl_canvas_wl/efl_canvas_wl.eo
@@ -0,0 +1,183 @@
+import efl_exe;
+import efl_input_device;
+import efl_canvas_wl_surface;
+
+struct @beta @extern Efl.Canvas.Wl_Wl_Surface; [[ struct wl_surface. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Global; [[ struct wl_global. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Interface; [[ A libwayland callback interface struct. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Interface_Data; [[ A data pointer to send with the bind callback. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Interface_Bind_Cb; [[ A callback with the type (*void)(struct wl_client *client, void *data, uint32_t version, uint32_t id). @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Xkb_State; [[ struct xkb_state. @since 1.24 ]]
+struct @beta @extern Efl.Canvas.Wl_Wl_Array; [[ struct wl_array. @since 1.24 ]]
+
+
+enum @beta Efl.Canvas.Wl_Rotation
+{
+ [[Orientation of the internal compositor object in degrees. These values are COUNTER-CLOCKWISE.
+ ]]
+ rotate_0 = 0,
+ rotate_90 = 1,
+ rotate_180 = 2,
+ rotate_270 = 3
+}
+
+class @beta Efl.Canvas.Wl extends Efl.Canvas.Group
+{
+ [[A multiseat xdg-shell compliant Wayland compositor which runs in a canvas object.
+
+ All toplevel windows will be sized to the size of the compositor object unless extracted with
+ @Efl.Canvas.Wl_Surface.extract.
+
+ Only clients executed with @Efl.Canvas.Wl.run or added with @.allowed_pid_add will
+ be permitted to connect to this compositor.
+
+ If no surface is activated at the time of the first toplevel surface's first buffer commit, this
+ first surface will automatically be activated so long as its geometry is not externally modified
+ during this time. If regularly modifying geometry is necessary, surfaces should be manually activated
+ with the @.active_surface property.
+
+ @since 1.24
+ ]]
+ data: Comp;
+ methods {
+ run {
+ [[
+ Run a specified command in the compositor widget.
+ If GL is available, the ELM_ACCEL environment variable will be set to "gl" while executing the command.
+ ]]
+ params {
+ cmd: string; [[The command to execute.]]
+ }
+ return: Efl.Exe; [[The exe object for the executed process. $NULL on failure.]]
+ }
+ @property exec_flags {
+ [[The flags to be used when running commands with @Efl.Canvas.Wl.run.
+ Changing this value will only affect commands run after this call.
+
+ The default is @Efl.Exe_Flags.term_with_parent.
+ ]]
+ values {
+ flags: Efl.Exe_Flags; [[A bitmask of flags.]]
+ }
+ }
+ allowed_pid_add {
+ [[Add a process to the list of allowed clients for the compositor widget.
+
+ Once called, this client will be capable of connecting to the internal compositor
+ even if it was not executed by the widget.
+ ]]
+ params {
+ pid: int; [[The pid to add.]]
+ }
+ }
+ allowed_pid_del {
+ [[Remove a process from the list of allowed clients for the compositor widget.
+
+ Once called, this client will be incapable of connecting to the internal compositor
+ even if it was executed by the widget.
+ ]]
+ params {
+ pid: int; [[The pid to remove.]]
+ }
+ }
+ surface_next {
+ [[Activate and raise the bottom-most toplevel surface.]]
+ return: Efl.Canvas.Wl_Surface; [[The surface that was activated, or $NULL if no change was made.]]
+ }
+ surface_prev {
+ [[Activate and raise the second top-most toplevel surface.]]
+ return: Efl.Canvas.Wl_Surface; [[The surface that was activated, or $NULL if no change was made.]]
+ }
+ @property active_surface {
+ [[This is the currently activated surface in the compositor widget.
+ Only one surface can be activated at a time.
+ ]]
+ get {}
+ set {
+ return: bool; [[Returns $true if a change was successfully made.]]
+ }
+ values {
+ surface: Efl.Canvas.Wl_Surface; [[The activated surface.]]
+ }
+ }
+ @property aspect_propagate {
+ [[When set to $true, the compositor will propagate the aspect ratio of the top-most
+ surface to the @Efl.Gfx.Hint.hint_aspect of the compositor widget.
+ ]]
+ values {
+ set: bool; [[Whether to propagate the hint.]]
+ }
+ }
+ @property minmax_propagate {
+ [[When set to $true, the compositor will propagate the min and max hints of the top-most
+ surface to the @Efl.Gfx.Hint.hint_size_min and @Efl.Gfx.Hint.hint_size_max of the compositor widget.
+ ]]
+ values {
+ set: bool; [[Whether to propagate the hints.]]
+ }
+ }
+ @property rotation {
+ [[Set the rotation and flip for the compositor's internal output, which is passed to clients.
+
+ Note that the rotation provided here is counter-clockwise.
+ ]]
+ values {
+ rotation: Efl.Canvas.Wl_Rotation; [[The rotation to apply to the internal output.]]
+ rtl: bool; [[The horizontal flip to apply to the internal output.]]
+ }
+ }
+ global_add {
+ [[Add a new wl_global to the internal compositor.
+
+ Use this to add implementations of custom extensions for use in the compositor.
+ Globals are removed with wl_global_destroy in libwayland.
+
+ Read Wayland documentation for more info.
+ ]]
+ params {
+ interface: const(Efl.Canvas.Wl_Wl_Interface) @by_ref; [[The wl_interface of callbacks for the protocol.]]
+ version: uint; [[The version of the protocol.]]
+ data: Efl.Canvas.Wl_Wl_Interface_Data @by_ref; [[The data to be passed to the callback functions.]]
+ bind_cb: Efl.Canvas.Wl_Wl_Interface_Bind_Cb @by_ref; [[The callback to trigger when a client has bound this global.]]
+ }
+ return: Efl.Canvas.Wl_Wl_Global @by_ref; [[The $wl_global or $NULL on failure.]]
+ }
+ seat_keymap_set {
+ [[Sets the keymap for the internal compositor's seat.
+
+ This is useful when nesting the compositor widget inside another compositor in order to reuse the existing keymap and state.
+ ]]
+ params {
+ seat: Efl.Input.Device; [[The seat to set the keymap of, or $NULL for all seats.]]
+ state: Efl.Canvas.Wl_Xkb_State @by_ref; [[The $xkb_state to apply.]]
+ keymap_str: string; [[The keymap type as a string, as reported by libxkbcommon.
+ The lifetime of the passed string must exceed the lifetime of the compositor widget.
+ ]]
+ key_array: Efl.Canvas.Wl_Wl_Array @by_ref; [[The current $wl_array of keys.]]
+ }
+ }
+ seat_key_repeat_set {
+ [[Modify the key repeat rate and delay of the internal compositor for a given seat.
+ This is the value sent to clients.
+ ]]
+ params {
+ seat: Efl.Input.Device; [[The seat to set the repeat rate and delay of, or $NULL for all seats.]]
+ repeat_rate: int; [[The repeat rate to set in number of times per second keys should repeat.]]
+ repeat_delay: int; [[The delay before repeating should begin in milliseconds.]]
+ }
+ }
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Gfx.Entity.visible { set; }
+ Efl.Gfx.Entity.size { set; }
+ Efl.Gfx.Entity.position { set; }
+ Efl.Gfx.Entity.scale { get; set; }
+ }
+ events {
+ toplevel,added: Efl.Canvas.Wl_Surface; [[Contains the toplevel surface which was added.]]
+ child,added: Efl.Canvas.Wl_Surface; [[Contains the toplevel child surface which was added.]]
+ popup,added: Efl.Canvas.Wl_Surface; [[Contains the popup surface which was added.]]
+ seat,added: Efl.Input.Device; [[Contains the seat object that was added.]]
+ }
+}
diff --git a/src/lib/efl_canvas_wl/efl_canvas_wl_surface.eo b/src/lib/efl_canvas_wl/efl_canvas_wl_surface.eo
new file mode 100644
index 0000000000..d2646f8431
--- /dev/null
+++ b/src/lib/efl_canvas_wl/efl_canvas_wl_surface.eo
@@ -0,0 +1,68 @@
+class @beta Efl.Canvas.Wl_Surface extends Efl.Canvas.Group
+{
+ [[A canvas object representing a Wayland toplevel or popup surface.
+
+ This object's geometry properties reflect the properties of the underlying surface. If
+ the client is using a protocol to export its size hints, those hints will be directly
+ applied to this object any time they change in the application.
+
+ Changes to geometry and visibility of this object must not be made while @.extracted
+ is $false.
+
+ Changes to size of this object will be immediately propagated to the underlying application.
+
+ Hiding this object will have differing effects based on the surface's xdg-shell role.
+ If the surface is a popup, it will be sent the 'done' protocol event which will close it.
+ If the surface is a toplevel, it will be deactivated if it was active.
+
+ This object's lifetime is bound to the lifetime of the underlying surface or the compositor widget.
+
+ This object must not be manually deleted.
+ @since 1.24
+ ]]
+ data: Comp_Surface;
+ methods {
+ extract {
+ [[Extract a surface from the compositor widget.
+
+ Call this prior to making any calls which directly modify the geometry of
+ the surface. Once extracted, the compositor will no longer attempt to automatically
+ apply geometry or stacking changes to the surface.
+
+ Once extracted, a surface cannot be un-extracted.
+ ]]
+ return: bool; [[Returns $true if the surface was successfully extracted.]]
+ }
+ @property pid {
+ [[The process id of the surface's application.]]
+ get {}
+ values {
+ pid: int; [[The process id, or -1 if the surface has been asynchronously destroyed.]]
+ }
+ }
+ @property parent_surface {
+ [[The parent surface of the given surface. This value is $NULL for toplevel surfaces without a parent.
+
+ For popup surfaces, this may be another popup or a toplevel.
+ For toplevel surfaces, this will always be another toplevel or $NULL.
+ ]]
+ get {}
+ values {
+ parent: Efl.Canvas.Wl_Surface; [[The parent surface. $NULL if no parent exists or the surface was asynchronously destroyed.]]
+ }
+ }
+ @property extracted {
+ [[The extracted state of the surface.]]
+ get {}
+ values {
+ extracted: bool; [[$true if @.extract was successfully called previously.]]
+ }
+ }
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Gfx.Entity.visible { set; }
+ Efl.Gfx.Entity.size { set; }
+ Efl.Gfx.Entity.position { set; }
+ }
+}
diff --git a/src/lib/efl_canvas_wl/meson.build b/src/lib/efl_canvas_wl/meson.build
new file mode 100644
index 0000000000..5955da62eb
--- /dev/null
+++ b/src/lib/efl_canvas_wl/meson.build
@@ -0,0 +1,62 @@
+efl_canvas_wl_deps = [ecore_wl2, ecore_input, ecore, ecore_evas, evas, emile, eina]
+efl_canvas_wl_pub_deps = [eo, efl, evas]
+efl_canvas_wl_ext_deps = [dependency('wayland-server', version : '>= 1.11.0'), dependency('xkbcommon', version : '>= 0.6.0'), wayland_protocol]
+
+if (get_option('x11'))
+ efl_canvas_wl_deps += [ecore_x]
+ efl_canvas_wl_ext_deps += [dependency('xkbcommon-x11')]
+endif
+
+pub_eo_files = [
+ 'efl_canvas_wl.eo',
+ 'efl_canvas_wl_surface.eo',
+]
+
+foreach eo_file : pub_eo_files
+ pub_eo_file_target += custom_target('eolian_gen_' + eo_file,
+ input : eo_file,
+ output : [eo_file + '.h'],
+ depfile : eo_file + '.d',
+ install : true,
+ install_dir : dir_package_include,
+ command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
+ '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
+ '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
+ '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-gchd', '@INPUT@'])
+endforeach
+
+efl_canvas_wl_src = files([
+ 'dmabuf.c',
+ 'efl_canvas_wl.c',
+])
+
+efl_canvas_wl_header_src = ['Efl_Canvas_Wl.h']
+eolian_include_directories += ['-I', meson.current_source_dir()]
+
+efl_canvas_wl_lib = library('efl_canvas_wl',
+ efl_canvas_wl_src, pub_eo_file_target,
+ dependencies: efl_canvas_wl_deps + efl_canvas_wl_pub_deps + efl_canvas_wl_ext_deps,
+ include_directories : config_dir + [include_directories(join_paths('..','..'))],
+ install: true,
+ c_args : package_c_args,
+ version : meson.project_version()
+)
+
+efl_canvas_wl = declare_dependency(
+ include_directories: [include_directories('.')],
+ link_with: efl_canvas_wl_lib,
+ sources: pub_eo_file_target,
+ dependencies: efl_canvas_wl_pub_deps,
+)
+
+install_headers(efl_canvas_wl_header_src,
+ install_dir : dir_package_include,
+)
+
+eolian_efl_canvas_wl_dir = join_paths(eolian_include_dir, package_version_name)
+if get_option('install-eo-files')
+ install_data(pub_eo_files,
+ install_dir: eolian_efl_canvas_wl_dir
+ )
+endif
diff --git a/src/lib/efl_wl/x11.x b/src/lib/efl_canvas_wl/x11.x
index 2d7a88352f..2d7a88352f 100644
--- a/src/lib/efl_wl/x11.x
+++ b/src/lib/efl_canvas_wl/x11.x
diff --git a/src/lib/efl_mono/efl_custom_exports_mono.c b/src/lib/efl_mono/efl_custom_exports_mono.c
index 93cfc541ea..7b10c79cd6 100644
--- a/src/lib/efl_mono/efl_custom_exports_mono.c
+++ b/src/lib/efl_mono/efl_custom_exports_mono.c
@@ -543,6 +543,31 @@ EINA_CONTAINER_APPEND_WRAPPER(double, double)
EINA_CONTAINER_APPEND_WRAPPER(string, const char *)
EINA_CONTAINER_APPEND_WRAPPER(ptr, void *)
+#define EINA_CONTAINER_INSERT_WRAPPER(N, T) EAPI Eina_Bool eina_value_container_insert_wrapper_##N(Eina_Value *value, unsigned int position, T new_value) \
+{ \
+ const Eina_Value_Type *tp = eina_value_type_get(value); \
+ if (tp == EINA_VALUE_TYPE_ARRAY) \
+ return eina_value_array_insert(value, position, new_value); \
+ else if (tp == EINA_VALUE_TYPE_LIST) \
+ return eina_value_list_insert(value, position, new_value); \
+ else \
+ return EINA_FALSE; \
+}
+
+EINA_CONTAINER_INSERT_WRAPPER(char, char)
+EINA_CONTAINER_INSERT_WRAPPER(uchar, unsigned char)
+EINA_CONTAINER_INSERT_WRAPPER(short, short)
+EINA_CONTAINER_INSERT_WRAPPER(ushort, unsigned short)
+EINA_CONTAINER_INSERT_WRAPPER(int, int)
+EINA_CONTAINER_INSERT_WRAPPER(uint, unsigned int)
+EINA_CONTAINER_INSERT_WRAPPER(long, long)
+EINA_CONTAINER_INSERT_WRAPPER(ulong, unsigned long)
+EINA_CONTAINER_INSERT_WRAPPER(float, float)
+EINA_CONTAINER_INSERT_WRAPPER(double, double)
+EINA_CONTAINER_INSERT_WRAPPER(string, const char *)
+EINA_CONTAINER_INSERT_WRAPPER(ptr, void *)
+
+
EAPI void eina_value_container_get_wrapper(const Eina_Value *value, int i, void *output)
{
const Eina_Value_Type *tp = eina_value_type_get(value);
diff --git a/src/lib/efl_wl/Efl_Wl.h b/src/lib/efl_wl/Efl_Wl.h
deleted file mode 100644
index 62f43e0d2b..0000000000
--- a/src/lib/efl_wl/Efl_Wl.h
+++ /dev/null
@@ -1,229 +0,0 @@
-#ifdef EFL_BETA_API_SUPPORT
-
-#ifndef EFL_WL_H
-# define EFL_WL_H
-#include <Evas.h>
-#include <Ecore.h>
-
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-#else
-# define EAPI
-#endif
-
-/**
- * @defgroup Efl_Wl_Group EFL Wayland
- *
- * A multiseat xdg-shell compliant Wayland compositor in an Evas object.
- * All toplevel windows will be sized to the size of the compositor object.
- * @since 1.20
- * @{
- */
-
-/**
- * @typedef Efl_Wl_Rotation
- * The rotation to apply to the compositor's internal wl_output
- */
-typedef enum
-{
- EFL_WL_ROTATION_0,
- EFL_WL_ROTATION_90,
- EFL_WL_ROTATION_180,
- EFL_WL_ROTATION_270
-} Efl_Wl_Rotation;
-
-/**
- * Add a compositor widget to the given canvas.
- *
- * The following smart callbacks will trigger on the compositor object:
- * "child_added" - A toplevel surface with a parent has been added; event info is Evas_Object *surface
- * "popup_added" - A popup surface has been added; event info is Evas_Object *surface
- * "seat_added" - A compositor seat has been added; event info is Eo *dev
- *
- * @param e The canvas
- * @return The compositor object, @c NULL on failure
- */
-EAPI Evas_Object *efl_wl_add(Evas *e);
-
-/**
- * Run a command in the compositor widget.
- *
- * @note If GL is available, the ELM_ACCEL environment variable will be
- * set to "gl" while executing the command.
- *
- * @param obj The compositor widget
- * @param cmd The command to run
- * @return The Ecore_Exe from the executed process, @c NULL on failure
- */
-EAPI Ecore_Exe *efl_wl_run(Evas_Object *obj, const char *cmd);
-
-/**
- * Run a command in the compositor widget with specified flags.
- *
- * @note If GL is available, the ELM_ACCEL environment variable will be
- * set to "gl" while executing the command.
- *
- * @param obj The compositor widget
- * @param cmd The command to run
- * @param flags The flags to use
- * @return The Ecore_Exe from the executed process, @c NULL on failure
- */
-Ecore_Exe *efl_wl_flags_run(Evas_Object *obj, const char *cmd, Ecore_Exe_Flags flags);
-
-/**
- * Add a process to the list of allowed clients for the compositor widget
- *
- * @param obj The compositor widget
- * @param pid The process to allow
- * @since 1.21
- */
-EAPI void efl_wl_pid_add(Evas_Object *obj, int32_t pid);
-
-/**
- * Remove a process from the list of allowed clients for the compositor widget
- *
- * @param obj The compositor widget
- * @param pid The process to deny
- * @since 1.21
- */
-EAPI void efl_wl_pid_del(Evas_Object *obj, int32_t pid);
-
-/**
- * Put the bottom-most toplevel window on top and apply focus to it
- *
- * @param obj The compositor widget
- * @return EINA_TRUE if the window stacking was changed
- */
-EAPI Eina_Bool efl_wl_next(Evas_Object *obj);
-
-/**
- * Put the second top-most toplevel window on top and apply focus to it
- *
- * @param obj The compositor widget
- * @return EINA_TRUE if the window stacking was changed
- */
-EAPI Eina_Bool efl_wl_prev(Evas_Object *obj);
-
-/**
- * Set rotation and flip for the compositor's output
- *
- * @param obj The compositor widget
- * @param rot The rotation to apply
- * @param rtl If set, the output will apply a flip around the Y axis
- * @note rtl is equivalent to WL_OUTPUT_TRANSFORM_FLIPPED and rotations are applied
- * on top
- */
-EAPI void efl_wl_rotate(Evas_Object *obj, Efl_Wl_Rotation rot, Eina_Bool rtl);
-
-/**
- * Set the scale factor for the compositor's output
- *
- * @param obj The compositor widget
- * @param scale The scale factor to set
- */
-EAPI void efl_wl_scale_set(Evas_Object *obj, double scale);
-
-/**
- * Transfer aspect hints from top-most surface onto the efl_wl object
- *
- * @param obj The compositor widget
- * @param set Whether to enable aspect setting
- * @since 1.21
- */
-EAPI void efl_wl_aspect_set(Evas_Object *obj, Eina_Bool set);
-
-/**
- * Transfer min/max hints from top-most surface onto the efl_wl object
- *
- * @param obj The compositor widget
- * @param set Whether to enable min/max setting
- * @since 1.21
- */
-EAPI void efl_wl_minmax_set(Evas_Object *obj, Eina_Bool set);
-
-/**
- * Add an externally-managed global to the compositor
- * @note The external implementation is expected to restrict access to authorized
- * clients
- * @see wl_global_create() docs
- *
- * @param obj The compositor widget
- * @param interface The Wayland protocol interface struct of the protocol's global
- * @param version The version of the global to use
- * @param data User data to use with this interface
- * @param bind_cb The callback which should be triggered when the global is bound by a client
- * @return The created global (struct wl_global), or NULL on failure
- * @since 1.21
- */
-EAPI void *efl_wl_global_add(Evas_Object *obj, const void *interface, uint32_t version, void *data, void *bind_cb);
-
-/**
- * Extract a child surface from the compositor
- *
- * An extracted surface can be freely manipulated by external code.
- * @note size hints must be respected, and the extracted object must not be externally deleted
- *
- * @param surface The surface to extract
- * @return True if the surface was successfully extracted
- * @since 1.21
- */
-EAPI Eina_Bool efl_wl_surface_extract(Evas_Object *surface);
-
-/**
- * Get the Evas_Object for an extracted wl_surface resource created by an efl_wl object
- *
- * @note Passing anything other than a valid wl_surface resource from an efl_wl object will guarantee a crash.
- *
- * @param surface_resource The wl_resource for a wl_surface
- * @return The Evas_Object of the surface, NULL on failure
- * @since 1.21
- */
-EAPI Evas_Object *efl_wl_extracted_surface_object_find(void *surface_resource);
-
-/**
- * Get the Evas_Object for an extracted surface's parent, or NULL if the parent is not extracted
- *
- * @note Passing anything other than a valid, extracted surface guarantees a crash.
- *
- * @param surface The extracted surface for a wl_surface
- * @return The Evas_Object of the parent surface, NULL on failure or if there is no parent
- * @since 1.21
- */
-EAPI Evas_Object *efl_wl_extracted_surface_extracted_parent_get(Evas_Object *surface);
-
-/**
- * Set external xkbcommon resources to be used read-only by the compositor object
- *
- * Use this function if you have available the necessary xkbcommon objects which are used
- * to handle keyboard states in a compositor. The passed objects will not be modified or copied,
- * so this function must be called again in the case that the compositor widget outlives the
- * lifetime of any of the passed pointers.
- *
- * @param obj The compositor widget
- * @param seat The seat to set the keymap for, NULL to set the keymap for all seats
- * @param keymap The xkb_keymap object to use
- * @param state The xkb_state object to use
- * @param str The string containing the keymap
- * @param wl_key_array A pointer to the wl_array in which keys are stored
- * @since 1.21
- */
-EAPI void efl_wl_seat_keymap_set(Evas_Object *obj, Eo *seat, void *state, char *str, void *wl_key_array);
-
-/**
- * Set the key repeat rate for a seat in the compositor
- *
- * @param obj The compositor widget
- * @since 1.21
- */
-EAPI void efl_wl_seat_key_repeat_set(Evas_Object *obj, Eo *seat, int repeat_rate, int repeat_delay);
-#endif
-
-#endif
diff --git a/src/lib/efl_wl/meson.build b/src/lib/efl_wl/meson.build
deleted file mode 100644
index 35f20ec404..0000000000
--- a/src/lib/efl_wl/meson.build
+++ /dev/null
@@ -1,32 +0,0 @@
-efl_wl_deps = [ecore_wl2, ecore_input, ecore, ecore_evas, evas, emile, eo, efl, eina]
-efl_wl_pub_deps = [evas, dependency('wayland-server', version : '>= 1.11.0'), dependency('xkbcommon', version : '>= 0.6.0')]
-
-if (get_option('x11'))
- efl_wl_deps += [ecore_x]
- efl_wl_pub_deps += [dependency('xkbcommon-x11')]
-endif
-
-efl_wl_src = [
- 'dmabuf.c',
- 'efl_wl.c'
-]
-efl_wl_header_src = ['Efl_Wl.h']
-
-
-efl_wl_lib = library('efl_wl',
- efl_wl_src,
- dependencies: [m, dl] + efl_wl_deps + efl_wl_pub_deps,
- include_directories : config_dir + [include_directories(join_paths('..','..'))],
- install: true,
- version : meson.project_version()
-)
-
-efl_wl = declare_dependency(
- include_directories: [include_directories('.')],
- link_with: efl_wl_lib,
- dependencies: efl_wl_pub_deps,
-)
-
-install_headers(efl_wl_header_src,
- install_dir : dir_package_include,
-)
diff --git a/src/lib/efreet/Efreet.h b/src/lib/efreet/Efreet.h
index 22d2291f44..6c39a1782e 100644
--- a/src/lib/efreet/Efreet.h
+++ b/src/lib/efreet/Efreet.h
@@ -11,7 +11,7 @@
/**
* @page efreet_main Efreet
*
- * @section toc Table of Contents
+ * @section efreet_toc Table of Contents
*
* @li @ref efreet_main_intro
* @li @ref efreet_main_compiling
@@ -123,9 +123,9 @@ extern "C" {
int micro; /** < micro (bugfix, internal improvements, no new features version) */
int revision; /** < git revision (0 if a proper release or the git revision number Efreet is built from) */
} Efreet_Version;
-
+
EAPI extern Efreet_Version *efreet_version;
-
+
#include "efreet_base.h"
#include "efreet_ini.h"
#include "efreet_icon.h"
@@ -167,6 +167,9 @@ EAPI void efreet_cache_disable(void);
*/
EAPI void efreet_cache_enable(void);
+#include <Efreet_Mime.h>
+#include <Efreet_Trash.h>
+
#undef EAPI
#define EAPI
diff --git a/src/lib/efreet/Efreet_Trash.h b/src/lib/efreet/Efreet_Trash.h
index 5ecf41d9be..67db071cae 100644
--- a/src/lib/efreet/Efreet_Trash.h
+++ b/src/lib/efreet/Efreet_Trash.h
@@ -67,7 +67,7 @@ EAPI const char *efreet_trash_dir_get(const char *for_file);
* will be deleted permanently
* @return @c 1 on success, @c 0 on failure or @c -1 in case the uri is not on
* the same filesystem and force_delete is not set.
- * @brief This function try to move the given uri to the trash. Files on
+ * @brief This function try to move the given uri to the trash. Files on
* different filesystem can't be moved to trash. If force_delete
* is @c 0 than non-local files will be ignored and @c -1 is returned, if you set
* force_delete to @c 1 non-local files will be deleted without asking.
diff --git a/src/lib/efreet/efreet.c b/src/lib/efreet/efreet.c
index 091899f2b2..4c20b12bc1 100644
--- a/src/lib/efreet/efreet.c
+++ b/src/lib/efreet/efreet.c
@@ -94,6 +94,12 @@ efreet_init(void)
if (!efreet_util_init())
goto shutdown_efreet_menu;
+ if (!efreet_internal_mime_init())
+ goto shutdown_efreet_mime;
+
+ if (!efreet_internal_trash_init())
+ goto shutdown_efreet_trash;
+
#ifdef ENABLE_NLS
bindtextdomain(PACKAGE, LOCALE_DIR);
bind_textdomain_codeset(PACKAGE, "UTF-8");
@@ -101,6 +107,10 @@ efreet_init(void)
return _efreet_init_count;
+shutdown_efreet_trash:
+ efreet_internal_trash_shutdown();
+shutdown_efreet_mime:
+ efreet_internal_mime_shutdown();
shutdown_efreet_menu:
efreet_menu_shutdown();
shutdown_efreet_desktop:
@@ -146,6 +156,8 @@ efreet_shutdown(void)
efreet_xml_shutdown();
efreet_cache_shutdown();
efreet_base_shutdown();
+ efreet_internal_mime_shutdown();
+ efreet_internal_trash_shutdown();
IF_RELEASE(efreet_lang);
IF_RELEASE(efreet_lang_country);
diff --git a/src/lib/efreet/efreet_base.c b/src/lib/efreet/efreet_base.c
index 6497e8d955..7b1490af46 100644
--- a/src/lib/efreet/efreet_base.c
+++ b/src/lib/efreet/efreet_base.c
@@ -51,6 +51,8 @@ static const char *xdg_pictures_dir = NULL;
static const char *xdg_videos_dir = NULL;
static const char *hostname = NULL;
+static Eina_Prefix *pfx= NULL;
+
static void efreet_dirs_init(void);
static const char *efreet_dir_get(const char *key, const char *fallback);
static Eina_List *efreet_dirs_get(const char *key,
@@ -72,6 +74,9 @@ efreet_base_init(void)
EINA_LOG_ERR("Efreet: Could not create a log domain for efreet_base.\n");
return 0;
}
+ 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();
return 1;
}
@@ -105,6 +110,11 @@ efreet_base_shutdown(void)
IF_RELEASE(hostname);
+ if (pfx)
+ {
+ eina_prefix_free(pfx);
+ pfx = NULL;
+ }
eina_log_domain_unregister(_efreet_base_log_dom);
_efreet_base_log_dom = -1;
}
@@ -124,7 +134,13 @@ EAPI const char *
efreet_desktop_dir_get(void)
{
if (xdg_desktop_dir) return xdg_desktop_dir;
- xdg_desktop_dir = efreet_user_dir_get("XDG_DESKTOP_DIR", _("Desktop"));
+ xdg_desktop_dir = efreet_user_dir_get("XDG_DESKTOP_DIR",
+#ifdef _WIN32
+ "Desktop"
+#else
+ _("Desktop")
+#endif
+ );
return xdg_desktop_dir;
}
@@ -132,7 +148,13 @@ EAPI const char *
efreet_download_dir_get(void)
{
if (xdg_download_dir) return xdg_download_dir;
- xdg_download_dir = efreet_user_dir_get("XDG_DOWNLOAD_DIR", _("Downloads"));
+ xdg_download_dir = efreet_user_dir_get("XDG_DOWNLOAD_DIR",
+#ifdef _WIN32
+ "Downloads"
+#else
+ _("Downloads")
+#endif
+ );
return xdg_download_dir;
}
@@ -141,7 +163,12 @@ efreet_templates_dir_get(void)
{
if (xdg_templates_dir) return xdg_templates_dir;
xdg_templates_dir = efreet_user_dir_get("XDG_TEMPLATES_DIR",
- _("Templates"));
+#ifdef _WIN32
+ "Templates"
+#else
+ _("Templates")
+#endif
+ );
return xdg_templates_dir;
}
@@ -167,7 +194,13 @@ EAPI const char *
efreet_music_dir_get(void)
{
if (xdg_music_dir) return xdg_music_dir;
- xdg_music_dir = efreet_user_dir_get("XDG_MUSIC_DIR", _("Music"));
+ xdg_music_dir = efreet_user_dir_get("XDG_MUSIC_DIR",
+#ifdef _WIN32
+ "Music"
+#else
+ _("Music")
+#endif
+ );
return xdg_music_dir;
}
@@ -175,7 +208,13 @@ EAPI const char *
efreet_pictures_dir_get(void)
{
if (xdg_pictures_dir) return xdg_pictures_dir;
- xdg_pictures_dir = efreet_user_dir_get("XDG_PICTURES_DIR", _("Pictures"));
+ xdg_pictures_dir = efreet_user_dir_get("XDG_PICTURES_DIR",
+#ifdef _WIN32
+ "Pictures"
+#else
+ _("Pictures")
+#endif
+ );
return xdg_pictures_dir;
}
@@ -183,7 +222,13 @@ EAPI const char *
efreet_videos_dir_get(void)
{
if (xdg_videos_dir) return xdg_videos_dir;
- xdg_videos_dir = efreet_user_dir_get("XDG_VIDEOS_DIR", _("Videos"));
+ xdg_videos_dir = efreet_user_dir_get("XDG_VIDEOS_DIR",
+#ifdef _WIN32
+ "Videos"
+#else
+ _("Videos")
+#endif
+ );
return xdg_videos_dir;
}
@@ -280,6 +325,7 @@ efreet_dirs_reset(void)
static void
efreet_dirs_init(void)
{
+ char *data_dir = DATA_DIR;
char buf[PATH_MAX];
/* efreet_home_dir */
@@ -294,13 +340,27 @@ efreet_dirs_init(void)
xdg_cache_home = efreet_dir_get("XDG_CACHE_HOME", "/.cache");
/* xdg_data_dirs */
+ if (pfx)
+ {
+ const char *dir = eina_prefix_get(pfx);
+ if (dir)
+ {
+ size_t len = strlen(dir);
+
+ data_dir = alloca(len + 1 + 5 /*"share" */ + 1);
#ifdef _WIN32
- snprintf(buf, sizeof(buf), "%s\\Efl;" DATA_DIR ";", getenv("APPDATA"));
- xdg_data_dirs = efreet_dirs_get("XDG_DATA_DIRS", buf);
+ snprintf(data_dir, len + 1 + 5 + 1, "%s\\share", dir);
#else
- xdg_data_dirs = efreet_dirs_get("XDG_DATA_DIRS",
- DATA_DIR ":/usr/share:/usr/local/share");
+ snprintf(data_dir, len + 1 + 5 + 1, "%s/share", dir);
#endif
+ }
+ }
+#ifdef _WIN32
+ snprintf(buf, sizeof(buf), "%s\\Efl;%s;", data_dir, getenv("APPDATA"));
+#else
+ snprintf(buf, sizeof(buf), "%s:/usr/share:/usr/local/share", data_dir);
+#endif
+ xdg_data_dirs = efreet_dirs_get("XDG_DATA_DIRS", buf);
/* xdg_config_dirs */
#ifdef _WIN32
xdg_config_dirs = efreet_dirs_get("XDG_CONFIG_DIRS", getenv("APPDATA"));
diff --git a/src/lib/efreet/efreet_cache.c b/src/lib/efreet/efreet_cache.c
index 883cf5e3c2..a801081ce9 100644
--- a/src/lib/efreet/efreet_cache.c
+++ b/src/lib/efreet/efreet_cache.c
@@ -1,3 +1,4 @@
+
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
@@ -101,6 +102,7 @@ static void *hash_array_string_add(void *hash, const char *key, void *data);
static Eina_Bool disable_cache;
static Eina_Bool run_in_tree;
+static int relaunch_try = 0;
EAPI int EFREET_EVENT_ICON_CACHE_UPDATE = 0;
EAPI int EFREET_EVENT_DESKTOP_CACHE_UPDATE = 0;
@@ -117,9 +119,19 @@ _ipc_launch(void)
char buf[PATH_MAX];
int num;
int try_gap = 10000; // 10ms
- int tries = 200; // 200 * 10ms == 2sec
+ int tries = 1000; // 1000 * 10ms == 10sec
const char *s;
+ if (relaunch_try == 0)
+ {
+ ipc = ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, "efreetd", 0, NULL);
+ if (ipc)
+ {
+ relaunch_try++;
+ return;
+ }
+ }
+ relaunch_try--;
s = getenv("EFREETD_CONNECT_TRIES");
if (s)
{
@@ -151,6 +163,7 @@ static Eina_Bool
_cb_server_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
IPC_HEAD(Add);
+ relaunch_try--;
return ECORE_CALLBACK_DONE;
}
@@ -180,7 +193,6 @@ _cb_server_reconnect(void *data EINA_UNUSED)
static Eina_Bool
_cb_server_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
- static double last_del = 0.0;
double t;
IPC_HEAD(Del);
ipc = NULL;
@@ -194,15 +206,10 @@ _cb_server_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
free(address);
return EINA_FALSE;
}
- t = ecore_time_get();
- if ((t - last_del) < 0.5)
- {
- if (reconnect_timer) ecore_timer_del(reconnect_timer);
- reconnect_timer = ecore_timer_add(0.5, _cb_server_reconnect, NULL);
- }
- else
- _cb_server_reconnect(NULL);
- last_del = t;
+ // random 0.5 -> 1.0 sec from now
+ t = (((double)((rand() + (int)getpid()) & 0xff) / 255.0) * 0.5) + 0.5;
+ if (reconnect_timer) ecore_timer_del(reconnect_timer);
+ reconnect_timer = ecore_timer_add(t, _cb_server_reconnect, NULL);
return ECORE_CALLBACK_DONE;
}
@@ -530,6 +537,145 @@ efreet_desktop_util_cache_file(void)
/*
* Needs EAPI because of helper binaries
*/
+#define SHSH(n, v) ((((v) << (n)) & 0xffffffff) | ((v) >> (32 - (n))))
+
+static inline int
+int_to_bigendian(int in)
+{
+ static const unsigned char test[4] = { 0x11, 0x22, 0x33, 0x44 };
+ static const unsigned int *test_i = (const unsigned int *)test;
+ if (test_i[0] == 0x44332211) return eina_swap32(in);
+ return in;
+}
+
+static void
+sha1(unsigned char *data, int size, unsigned char *dst)
+{
+ unsigned int digest[5], word[80], wa, wb, wc, wd, we, t;
+ unsigned char buf[64], *d;
+ int idx, left, i;
+ const unsigned int magic[4] =
+ { 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 };
+
+ idx = 0;
+ digest[0] = 0x67452301; digest[1] = 0xefcdab89; digest[2] = 0x98badcfe;
+ digest[3] = 0x10325476; digest[4] = 0xc3d2e1f0;
+
+ memset(buf, 0, sizeof(buf));
+ for (left = size, d = data; left > 0; left--, d++)
+ {
+ if ((idx == 0) && (left < 64))
+ {
+ memset(buf, 0, 60);
+ buf[60] = (size >> 24) & 0xff;
+ buf[61] = (size >> 16) & 0xff;
+ buf[62] = (size >> 8) & 0xff;
+ buf[63] = (size) & 0xff;
+ }
+ buf[idx] = *d;
+ idx++;
+ if ((idx == 64) || (left == 1))
+ {
+ if ((left == 1) && (idx < 64)) buf[idx] = 0x80;
+ for (i = 0; i < 16; i++)
+ {
+ word[i] = (unsigned int)buf[(i * 4) ] << 24;
+ word[i] |= (unsigned int)buf[(i * 4) + 1] << 16;
+ word[i] |= (unsigned int)buf[(i * 4) + 2] << 8;
+ word[i] |= (unsigned int)buf[(i * 4) + 3];
+ }
+ for (i = 16; i < 80; i++)
+ word[i] = SHSH(1,
+ word[i - 3 ] ^ word[i - 8 ] ^
+ word[i - 14] ^ word[i - 16]);
+ wa = digest[0]; wb = digest[1]; wc = digest[2];
+ wd = digest[3]; we = digest[4];
+ for (i = 0; i < 80; i++)
+ {
+ if (i < 20)
+ t = SHSH(5, wa) + ((wb & wc) | ((~wb) & wd)) +
+ we + word[i] + magic[0];
+ else if (i < 40)
+ t = SHSH(5, wa) + (wb ^ wc ^ wd) +
+ we + word[i] + magic[1];
+ else if (i < 60)
+ t = SHSH(5, wa) + ((wb & wc) | (wb & wd) | (wc & wd)) +
+ we + word[i] + magic[2];
+ else if (i < 80)
+ t = SHSH(5, wa) + (wb ^ wc ^ wd) +
+ we + word[i] + magic[3];
+ we = wd;
+ wd = wc;
+ wc = SHSH(30, wb);
+ wb = wa;
+ wa = t;
+ }
+ digest[0] += wa; digest[1] += wb; digest[2] += wc;
+ digest[3] += wd; digest[4] += we;
+ idx = 0;
+ }
+ }
+ t = int_to_bigendian(digest[0]); digest[0] = t;
+ t = int_to_bigendian(digest[1]); digest[1] = t;
+ t = int_to_bigendian(digest[2]); digest[2] = t;
+ t = int_to_bigendian(digest[3]); digest[3] = t;
+ t = int_to_bigendian(digest[4]); digest[4] = t;
+ memcpy(dst, digest, 5 * 4);
+}
+
+EAPI Eina_Bool
+efreet_file_cache_fill(const char *file, Efreet_Cache_Check *check)
+{
+ struct stat st;
+
+ memset(check, 0, sizeof(Efreet_Cache_Check));
+#ifdef _WIN32
+ if (stat(file, &st) != 0) return EINA_FALSE;
+#else
+ ssize_t size = 0;
+
+ if (lstat(file, &st) != 0) return EINA_FALSE;
+ if (S_ISLNK(st.st_mode))
+ {
+ char link[PATH_MAX];
+
+ size = readlink(file, link, sizeof(link));
+ if ((size > 0) && ((size_t)size >= sizeof(link))) return EINA_FALSE;
+ if (stat(file, &st) != 0) return EINA_FALSE;
+ }
+ if (size > 0) sha1((unsigned char *)link, size, check->link_sha1);
+#endif
+ check->uid = st.st_uid;
+ check->gid = st.st_gid;
+ check->size = st.st_size;
+#ifndef _WIN32
+ check->blocks = st.st_blocks;
+#else
+ check->blocks = 0;
+#endif
+ check->mtime = st.st_mtime;
+ check->chtime = st.st_ctime;
+ check->mode = st.st_mode;
+ return EINA_TRUE;
+}
+
+EAPI Eina_Bool // true if matches
+efreet_file_cache_check(const Efreet_Cache_Check *check1, const Efreet_Cache_Check *check2)
+{
+ if ((check1->mtime != check2->mtime ) ||
+ (check1->size != check2->size ) ||
+ (check1->chtime != check2->chtime ) ||
+ (check1->blocks != check2->blocks) ||
+ (check1->mode != check2->mode ) ||
+ (check1->uid != check2->uid ) ||
+ (check1->gid != check2->gid ) ||
+ (memcmp(check1->link_sha1, check2->link_sha1, 20) != 0))
+ {
+ return EINA_FALSE;
+ }
+ return EINA_TRUE; // matches
+}
+
EAPI Eet_Data_Descriptor *
efreet_version_edd(void)
{
@@ -685,8 +831,22 @@ efreet_icon_directory_edd(void)
directory_edd = eet_data_descriptor_file_new(&eddc);
if (!directory_edd) return NULL;
- EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
- "modified_time", modified_time, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
+ "check.uid", check.uid, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
+ "check.gid", check.gid, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
+ "check.size", check.size, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
+ "check.blocks", check.blocks, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
+ "check.mtime", check.mtime, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
+ "check.chtime", check.chtime, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
+ "check.mode", check.mode, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC_ARRAY(directory_edd, Efreet_Cache_Directory,
+ "check.link_sha1", check.link_sha1, EET_T_CHAR);
return directory_edd;
}
@@ -784,7 +944,21 @@ efreet_icon_theme_edd(Eina_Bool cache)
if (cache)
{
EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
- "last_cache_check", last_cache_check, EET_T_LONG_LONG);
+ "check.uid", check.uid, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
+ "check.gid", check.gid, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
+ "check.size", check.size, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
+ "check.blocks", check.blocks, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
+ "check.mtime", check.mtime, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
+ "check.chtime", check.chtime, EET_T_LONG_LONG);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
+ "check.mode", check.mode, EET_T_INT);
+ EET_DATA_DESCRIPTOR_ADD_BASIC_ARRAY(icon_theme_edd, Efreet_Cache_Icon_Theme,
+ "check.link_sha1", check.link_sha1, EET_T_CHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
"path", path, EET_T_STRING);
diff --git a/src/lib/efreet/efreet_cache_private.h b/src/lib/efreet/efreet_cache_private.h
index 97dbd45a1e..1edbb3b5ff 100644
--- a/src/lib/efreet/efreet_cache_private.h
+++ b/src/lib/efreet/efreet_cache_private.h
@@ -38,11 +38,20 @@
# endif
#endif
+typedef struct _Efreet_Cache_Check Efreet_Cache_Check;
+
+typedef struct _Efreet_Cache_Icon_Theme Efreet_Cache_Icon_Theme;
+typedef struct _Efreet_Cache_Directory Efreet_Cache_Directory;
+typedef struct _Efreet_Cache_Desktop Efreet_Cache_Desktop;
+
EAPI const char *efreet_desktop_util_cache_file(void);
EAPI const char *efreet_desktop_cache_file(void);
EAPI const char *efreet_icon_cache_file(const char *theme);
EAPI const char *efreet_icon_theme_cache_file(void);
+EAPI Eina_Bool efreet_file_cache_fill(const char *file, Efreet_Cache_Check *check);
+EAPI Eina_Bool efreet_file_cache_check(const Efreet_Cache_Check *check1, const Efreet_Cache_Check *check2);
+
EAPI Eet_Data_Descriptor *efreet_version_edd(void);
EAPI Eet_Data_Descriptor *efreet_desktop_edd(void);
EAPI Eet_Data_Descriptor *efreet_hash_array_string_edd(void);
@@ -52,15 +61,23 @@ EAPI Eet_Data_Descriptor *efreet_icon_theme_edd(Eina_Bool cache);
EAPI Eet_Data_Descriptor *efreet_icon_edd(void);
EAPI Eet_Data_Descriptor *efreet_icon_fallback_edd(void);
-typedef struct _Efreet_Cache_Icon_Theme Efreet_Cache_Icon_Theme;
-typedef struct _Efreet_Cache_Directory Efreet_Cache_Directory;
-typedef struct _Efreet_Cache_Desktop Efreet_Cache_Desktop;
+struct _Efreet_Cache_Check
+{
+ unsigned long long uid;
+ unsigned long long gid;
+ unsigned long long size;
+ unsigned long long blocks;
+ unsigned long long mtime;
+ unsigned long long chtime;
+ unsigned int mode;
+ unsigned char link_sha1[20];
+};
struct _Efreet_Cache_Icon_Theme
{
Efreet_Icon_Theme theme;
- long long last_cache_check; /**< Last time the cache was checked */
+ Efreet_Cache_Check check; /**< relevant stat info from last check */
Eina_Hash *dirs; /**< All possible icon paths for this theme */
@@ -73,13 +90,14 @@ struct _Efreet_Cache_Icon_Theme
struct _Efreet_Cache_Directory
{
- long long modified_time;
+ Efreet_Cache_Check check; /**< relevant stat info from last check */
};
struct _Efreet_Cache_Desktop
{
Efreet_Desktop desktop;
+ Efreet_Cache_Check check; /**< relevant stat info from last check */
double check_time; /**< Last time we check for disk modification */
};
diff --git a/src/lib/efreet/efreet_desktop.c b/src/lib/efreet/efreet_desktop.c
index f0c46d4c33..4e97dc1efb 100644
--- a/src/lib/efreet/efreet_desktop.c
+++ b/src/lib/efreet/efreet_desktop.c
@@ -777,7 +777,22 @@ efreet_desktop_application_fields_parse(Efreet_Desktop *desktop, Efreet_Ini *ini
if (val) desktop->path = strdup(val);
val = efreet_ini_string_get(ini, "StartupWMClass");
- if (val) desktop->startup_wm_class = strdup(val);
+ if ((val) && (val[0]) && (val[1]))
+ {
+ size_t len = strlen(val);
+ if (((val[0] == '"') && (val[len - 1] == '"') ) ||
+ ((val[0] == '\'') && (val[len - 1] == '\'')))
+ {
+ // fixup for some spec-violating apps that put startupwmclass
+ // in quotes... spec doesnt allow for this. just escapes.
+ char *tmpval = alloca(len - 1);
+ strncpy(tmpval, val + 1, len - 2);
+ tmpval[len - 2] = '\0';
+ desktop->startup_wm_class = strdup(tmpval);
+ }
+ else
+ desktop->startup_wm_class = strdup(val);
+ }
val = efreet_ini_string_get(ini, "Categories");
if (val)
diff --git a/src/lib/efreet/efreet_icon.c b/src/lib/efreet/efreet_icon.c
index 7078343e57..a07d2b216f 100644
--- a/src/lib/efreet/efreet_icon.c
+++ b/src/lib/efreet/efreet_icon.c
@@ -790,6 +790,8 @@ efreet_icon_fallback_lookup_path(Efreet_Cache_Fallback_Icon *icon)
}
#endif
+ path = efreet_icon_fallback_lookup_path_path(icon, "/usr/local/share/pixmaps");
+ if (path) return path;
path = efreet_icon_fallback_lookup_path_path(icon, "/usr/share/pixmaps");
if (path) return path;
diff --git a/src/lib/efreet/efreet_menu.c b/src/lib/efreet/efreet_menu.c
index 06c2c418fb..890934fc22 100644
--- a/src/lib/efreet/efreet_menu.c
+++ b/src/lib/efreet/efreet_menu.c
@@ -65,7 +65,7 @@ struct Efreet_Menu_Internal
Eina_List *layout; /**< This menus layout */
Eina_List *default_layout; /**< Default layout */
signed char show_empty; /**< Whether to show empty menus */
- signed char in_line; /**< Whether this meny can be inlined */
+ signed char in_line; /**< Whether this menu can be inlined */
signed char inline_limit; /**< Number of elements which triggers inline */
signed char inline_header; /**< Whether we should use the header name when this menu is inlined */
signed char inline_alias; /**< Whether we should use the menu name when inlining */
@@ -143,7 +143,7 @@ struct Efreet_Menu_Layout
/* The items below are for Menuname Layout elements */
signed char show_empty; /**< Whether to show empty menus */
- signed char in_line; /**< Whether this meny can be inlined */
+ signed char in_line; /**< Whether this menu can be inlined */
signed char inline_limit; /**< Number of elements which triggers inline */
signed char inline_header; /**< Whether we should use the header name when this menu is inlined */
signed char inline_alias; /**< Whether we should use the menu name when inlining */
@@ -531,7 +531,7 @@ efreet_menu_file_set(const char *file)
EFREET_DEPRECATED_API EAPI void
efreet_menu_async_get(Efreet_Menu_Cb func EINA_UNUSED, const void *data EINA_UNUSED)
{
- ERR("%s is deprecated and shouldn't be called", __FUNCTION__);
+ ERR("%s is deprecated and shouldn't be called", __func__);
return;
}
@@ -575,7 +575,7 @@ efreet_menu_get(void)
EFREET_DEPRECATED_API EAPI void
efreet_menu_async_parse(const char *path EINA_UNUSED, Efreet_Menu_Cb func EINA_UNUSED, const void *data EINA_UNUSED)
{
- ERR("%s is deprecated and shouldn't be called", __FUNCTION__);
+ ERR("%s is deprecated and shouldn't be called", __func__);
return;
}
diff --git a/src/lib/efreet/efreet_mime.c b/src/lib/efreet/efreet_mime.c
index 9eba8c8db9..d94894ff71 100644
--- a/src/lib/efreet/efreet_mime.c
+++ b/src/lib/efreet/efreet_mime.c
@@ -348,21 +348,12 @@ _efreet_mimedb_glob_mime_get(unsigned int num)
/** --------------------------------- **/
-EAPI int
-efreet_mime_init(void)
+int
+efreet_internal_mime_init(void)
{
if (++_efreet_mime_init_count != 1)
return _efreet_mime_init_count;
- if (!ecore_init())
- return --_efreet_mime_init_count;
-
- if (!ecore_file_init())
- goto shutdown_ecore;
-
- if (!efreet_init())
- goto shutdown_ecore_file;
-
_efreet_mime_log_dom = eina_log_domain_register
("efreet_mime", EFREET_DEFAULT_LOG_COLOR);
@@ -388,17 +379,11 @@ unregister_log_domain:
eina_log_domain_unregister(_efreet_mime_log_dom);
_efreet_mime_log_dom = -1;
shutdown_efreet:
- efreet_shutdown();
-shutdown_ecore_file:
- ecore_file_shutdown();
-shutdown_ecore:
- ecore_shutdown();
-
return --_efreet_mime_init_count;
-}
+ }
-EAPI int
-efreet_mime_shutdown(void)
+int
+efreet_internal_mime_shutdown(void)
{
if (_efreet_mime_init_count == 0)
{
@@ -428,13 +413,22 @@ efreet_mime_shutdown(void)
IF_FREE_HASH(mime_icons);
eina_log_domain_unregister(_efreet_mime_log_dom);
_efreet_mime_log_dom = -1;
- efreet_shutdown();
- ecore_file_shutdown();
- ecore_shutdown();
return _efreet_mime_init_count;
}
+EAPI int
+efreet_mime_init(void)
+{
+ return efreet_init();
+}
+
+EAPI int
+efreet_mime_shutdown(void)
+{
+ return efreet_shutdown();
+}
+
EAPI const char *
efreet_mime_type_get(const char *file)
{
diff --git a/src/lib/efreet/efreet_private.h b/src/lib/efreet/efreet_private.h
index eb42c28f74..77a74dfca1 100644
--- a/src/lib/efreet/efreet_private.h
+++ b/src/lib/efreet/efreet_private.h
@@ -114,7 +114,7 @@
/**
* macros that are used all around the code for message processing
- * four macros are defined ERR, WRN, DGB, INF.
+ * four macros are defined ERR, WRN, DGB, INF.
* EFREET_MODULE_LOG_DOM should be defined individually for each module
*/
#ifdef CRI
@@ -214,6 +214,12 @@ void efreet_desktop_shutdown(void);
int efreet_util_init(void);
int efreet_util_shutdown(void);
+int efreet_internal_mime_init(void);
+int efreet_internal_mime_shutdown(void);
+
+int efreet_internal_trash_init(void);
+int efreet_internal_trash_shutdown(void);
+
const char *efreet_home_dir_get(void);
void efreet_dirs_reset(void);
diff --git a/src/lib/efreet/efreet_trash.c b/src/lib/efreet/efreet_trash.c
index 04a4a6cda4..f3837caf47 100644
--- a/src/lib/efreet/efreet_trash.c
+++ b/src/lib/efreet/efreet_trash.c
@@ -32,28 +32,25 @@ static const char *efreet_trash_dir = NULL;
# define getuid() GetCurrentProcessId()
#endif
-EAPI int
-efreet_trash_init(void)
+
+int
+efreet_internal_trash_init(void)
{
if (++_efreet_trash_init_count != 1)
return _efreet_trash_init_count;
- if (!eina_init())
- return --_efreet_trash_init_count;
-
_efreet_trash_log_dom = eina_log_domain_register
("efreet_trash", EFREET_DEFAULT_LOG_COLOR);
if (_efreet_trash_log_dom < 0)
{
EINA_LOG_ERR("Efreet: Could not create a log domain for efreet_trash");
- eina_shutdown();
return --_efreet_trash_init_count;
}
return _efreet_trash_init_count;
}
-EAPI int
-efreet_trash_shutdown(void)
+int
+efreet_internal_trash_shutdown(void)
{
if (--_efreet_trash_init_count != 0)
return _efreet_trash_init_count;
@@ -61,11 +58,22 @@ efreet_trash_shutdown(void)
IF_RELEASE(efreet_trash_dir);
eina_log_domain_unregister(_efreet_trash_log_dom);
_efreet_trash_log_dom = -1;
- eina_shutdown();
return _efreet_trash_init_count;
}
+EAPI int
+efreet_trash_init(void)
+{
+ return efreet_init();
+}
+
+EAPI int
+efreet_trash_shutdown(void)
+{
+ return efreet_shutdown();
+}
+
EAPI const char*
efreet_trash_dir_get(const char *file)
{
diff --git a/src/lib/efreet/efreet_uri.c b/src/lib/efreet/efreet_uri.c
index 44fe54a35f..2b64556159 100644
--- a/src/lib/efreet/efreet_uri.c
+++ b/src/lib/efreet/efreet_uri.c
@@ -2,8 +2,15 @@
# include <config.h>
#endif
+#include <stdlib.h>
+#include <string.h>
#include <ctype.h>
+#ifdef _WIN32
+# include <windows.h>
+# include <shlwapi.h>
+#endif
+
#ifndef _POSIX_HOST_NAME_MAX
#define _POSIX_HOST_NAME_MAX 255
#endif
@@ -28,6 +35,64 @@ efreet_uri_decode(const char *full_uri)
EINA_SAFETY_ON_NULL_RETURN_VAL(full_uri, NULL);
/* An uri should be in the form <scheme>:[<authority>][<path>][<query>][<fragment>] */
+
+ /*
+ * Specific code for Windows when the scheme part of full_uri is 'file',
+ * for local Windows file path.
+ * see https://docs.microsoft.com/en-us/archive/blogs/ie/file-uris-in-windows
+ *
+ * Correct syntax :
+ * file:///c:/path/to/file
+ *
+ * The returned path must be c:\path\to\file
+ */
+#ifdef _WIN32
+
+ *scheme = 0;
+ *authority = 0;
+ *path = 0;
+
+ if (strncasecmp(full_uri, "file://", strlen("file://")) == 0)
+ {
+ HRESULT res;
+ DWORD len;
+# ifdef UNICODE
+ wchar_t buf[MAX_PATH];
+ wchar_t *w_full_uri;
+ char *uri;
+
+ w_full_uri = evil_utf8_to_utf16(full_uri);
+ if (!w_full_uri)
+ return NULL;
+
+ if (wcslen(w_full_uri) > 2048)
+ {
+ free(w_full_uri);
+ return NULL;
+ }
+
+ len = sizeof(buf);
+ res = PathCreateFromUrl(w_full_uri, buf, &len, 0UL);
+ free(w_full_uri);
+ if (res != S_OK)
+ return NULL;
+ uri = evil_utf16_to_utf8(buf);
+ if (uri)
+ {
+ strncpy(path, uri, sizeof(path));
+ path[sizeof(path)-1] = 0;
+ goto win32_file_scheme;
+ }
+#else
+ len = sizeof(path);
+ res = PathCreateFromUrl(full_uri, path, &len, 0UL);
+ if (res == S_OK)
+ goto win32_file_scheme;
+#endif
+ return NULL;
+ }
+#endif
+
sep = strchr(full_uri, ':');
if (!sep) return NULL;
/* check if we have a Windows PATH, that is a letter follow by a colon */
@@ -77,6 +142,11 @@ efreet_uri_decode(const char *full_uri)
path[i] = *p;
}
+#ifdef _WIN32
+ win32_file_scheme:
+ strcpy(scheme, "file");
+#endif
+
uri = NEW(Efreet_Uri, 1);
if (!uri) return NULL;
diff --git a/src/lib/efreet/efreet_uri.h b/src/lib/efreet/efreet_uri.h
index 32b1f51ad2..79bc2f3c1c 100644
--- a/src/lib/efreet/efreet_uri.h
+++ b/src/lib/efreet/efreet_uri.h
@@ -17,7 +17,7 @@ typedef struct Efreet_Uri Efreet_Uri;
/**
* Efreet_Uri
- * @brief Contains a simple rappresentation of an uri. The string don't have
+ * @brief Contains a simple rappresentation of an uri. The string don't have
* special chars escaped.
*/
struct Efreet_Uri
diff --git a/src/lib/efreet/meson.build b/src/lib/efreet/meson.build
index ea4ef9a6c0..1d02f3db1f 100644
--- a/src/lib/efreet/meson.build
+++ b/src/lib/efreet/meson.build
@@ -11,7 +11,7 @@ efreet_header_src = [
'Efreet_Trash.h'
]
-efreet_src = [
+efreet_src = files([
'efreet.c',
'efreet_base.c',
'efreet_icon.c',
@@ -25,18 +25,28 @@ efreet_src = [
'efreet_cache.c',
'efreet_private.h',
'efreet_xml.h',
- 'efreet_cache_private.h'
-]
+ 'efreet_cache_private.h',
+ 'efreet_mime.c',
+ 'efreet_trash.c'
+])
-efreet_deps = [eet, ecore, ecore_con, ecore_file, eo, efl, eina, emile, ecore_ipc, buildsystem,intl]
+efreet_deps = [eet, ecore, ecore_con, ecore_file, eo, efl, eina, emile, ecore_ipc, buildsystem]
efreet_pub_deps = [eina, eo, efl]
+efreet_ext_deps = [buildsystem_simple, intl, m]
+
+package_c_args += ['-DDATA_DIR="'+dir_data+'"']
+
+if sys_windows
+ shlwapi = cc.find_library('shlwapi')
+ efreet_ext_deps += [shlwapi]
+endif
efreet_lib = library('efreet',
efreet_src,
- dependencies: efreet_pub_deps + [m] + efreet_deps,
+ dependencies: efreet_pub_deps + efreet_ext_deps + efreet_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
- c_args : [package_c_args, '-DDATA_DIR="'+dir_data+'"'],
+ c_args : package_c_args,
version : meson.project_version()
)
@@ -46,51 +56,40 @@ efreet = declare_dependency(
dependencies: efreet_pub_deps,
)
-efreet_mime_lib = library('efreet_mime',
- 'efreet_mime.c',
- dependencies: efreet_pub_deps + [m, efreet, efreet_deps],
- include_directories : config_dir + [include_directories('.')],
- install: true,
- c_args : package_c_args,
- version : meson.project_version()
+install_headers(efreet_header_src,
+ install_dir : dir_package_include,
)
-efreet_mime = declare_dependency(
- include_directories: [include_directories('.')],
- link_with: efreet_mime_lib,
- dependencies: efreet_pub_deps
-)
+#Deprecated efreet libs
+# everything and everyone should use efreet itself, efreet_mime and efreet_trash are contained in libefreet.so
+# libefreet_mime.so and libefreet_trash.so will just have NEEDED on libefreet.so so the symbols get caught in like that
-efreet_trash_lib = library('efreet_trash',
- 'efreet_trash.c',
- dependencies: efreet_pub_deps + [efreet, efreet_deps],
+deprecated_efreet_mime_lib = library('efreet_mime',
+ dependencies: [efreet],
include_directories : config_dir + [include_directories('.')],
install: true,
- c_args : package_c_args,
version : meson.project_version()
)
-efreet_trash = declare_dependency(
- include_directories: [include_directories('.')],
- link_with: efreet_trash_lib,
- dependencies: efreet_pub_deps,
-)
-
-install_headers(efreet_header_src,
- install_dir : dir_package_include,
+deprecated_efreet_trash_lib = library('efreet_trash',
+ dependencies: efreet,
+ include_directories : config_dir + [include_directories('.')],
+ install: true,
+ version : meson.project_version()
)
-
-pkgconfig.generate(efreet_mime_lib,
+pkgconfig.generate(efreet_lib,
name : 'efreet-mime',
+ description : 'Deprecated, please just use efreet',
subdirs : package_version_name,
version : version_major + '.' + version_minor + '.' + version_micro,
- libraries : [tmp_deps] + tmp_pub_deps,
+ libraries : efreet_pub_deps,
)
-pkgconfig.generate(efreet_trash_lib,
+pkgconfig.generate(efreet_lib,
name : 'efreet-trash',
+ description : 'Deprecated, please just use efreet',
subdirs : package_version_name,
version : version_major + '.' + version_minor + '.' + version_micro,
- libraries : [tmp_deps] + tmp_pub_deps,
+ libraries : efreet_pub_deps,
)
diff --git a/src/lib/eina/Eina.h b/src/lib/eina/Eina.h
index bbf3161929..383696d7d8 100644
--- a/src/lib/eina/Eina.h
+++ b/src/lib/eina/Eina.h
@@ -48,7 +48,7 @@
*
* @date 2008 (created)
*
- * @section toc Table of Contents
+ * @section eina_toc Table of Contents
*
* @li @ref eina_main_intro
* @li @ref eina_main_compiling
@@ -137,6 +137,10 @@
* More examples can be found at @ref eina_examples.
*
*
+ * @defgroup Eina_Core_Group Core
+ * @brief Initialization, shut down and core types.
+ * @ingroup Eina
+ *
* @defgroup Eina_Data_Types_Group Data Types
* @brief Eina provides an easy to use and optimized data types and structures.
* @ingroup Eina
@@ -212,6 +216,7 @@ extern "C" {
#include <eina_main.h>
#include <eina_fp.h>
#include <eina_rectangle.h>
+#include <eina_range.h>
#include <eina_clist.h>
#include <eina_inlist.h>
#include <eina_file.h>
@@ -271,9 +276,8 @@ extern "C" {
#include <eina_debug.h>
#include <eina_promise.h>
#include <eina_vpath.h>
+#include <eina_abstract_content.h>
-#undef EAPI
-#define EAPI
#ifdef __cplusplus
}
diff --git a/src/lib/eina/eina_abi.c b/src/lib/eina/eina_abi.c
index cdf0f9f450..35d93a51e3 100644
--- a/src/lib/eina/eina_abi.c
+++ b/src/lib/eina/eina_abi.c
@@ -25,12 +25,12 @@
#include "eina_unicode.h"
#include "eina_safety_checks.h"
-EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex)
+EINA_API Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex)
{
return eina_unicode_utf8_next_get(buf, iindex);
}
-EAPI unsigned int
+EINA_API unsigned int
eina_mempool_alignof(unsigned int size)
{
unsigned int align;
diff --git a/src/lib/eina/eina_abstract_content.c b/src/lib/eina/eina_abstract_content.c
new file mode 100644
index 0000000000..02d246bed3
--- /dev/null
+++ b/src/lib/eina/eina_abstract_content.c
@@ -0,0 +1,458 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <Eina.h>
+#include "eina_abstract_content.h"
+
+struct _Eina_Content
+{
+ Eina_Rw_Slice data;
+ const char *type;
+ const char *file;
+ EINA_REFCOUNT;
+};
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_CONTENT;
+
+static int _eina_abstract_content_log_domain = -1;
+
+#ifdef ERR
+#undef ERR
+#endif
+#define ERR(...) EINA_LOG_DOM_ERR(_eina_abstract_content_log_domain, __VA_ARGS__)
+
+#ifdef DBG
+#undef DBG
+#endif
+#define DBG(...) EINA_LOG_DOM_DBG(_eina_abstract_content_log_domain, __VA_ARGS__)
+
+static Eina_Hash *conversion_callbacks;
+
+typedef struct {
+ const char *to;
+ Eina_Content_Conversion_Callback callback;
+} Eina_Content_Conversion_Node;
+
+static void
+_eina_content_ref(Eina_Content *content)
+{
+ EINA_REFCOUNT_REF(content);
+}
+
+EINA_API Eina_Bool
+eina_content_converter_conversion_register(const char *from, const char *to, Eina_Content_Conversion_Callback conversion)
+{
+ Eina_Content_Conversion_Node *node = calloc(1, sizeof(Eina_Content_Conversion_Node));
+
+ Eina_Stringshare *shared_from = eina_stringshare_add(from);
+
+ if (eina_content_converter_convert_can(from, to))
+ {
+ ERR("Convertion from %s to %s is already possible", from, to);
+ eina_stringshare_del(shared_from);
+ free(node);
+ return EINA_FALSE;
+ }
+
+ node->to = eina_stringshare_add(to);
+ node->callback = conversion;
+
+ eina_hash_list_append(conversion_callbacks, shared_from, node);
+
+ return EINA_TRUE;
+}
+
+static inline Eina_List*
+_conversion_callback_fetch_possible(const char *from)
+{
+ Eina_Stringshare *shared_from = eina_stringshare_add(from);
+ Eina_List *res = eina_hash_find(conversion_callbacks, shared_from);
+ eina_stringshare_del(shared_from);
+ return res;
+}
+
+static inline Eina_Content_Conversion_Callback
+_conversion_callback_fetch(const char *from, const char *to)
+{
+ Eina_List *possibilities = _conversion_callback_fetch_possible(from);
+ Eina_Content_Conversion_Node *n;
+ Eina_Content_Conversion_Callback result = NULL;
+ Eina_List *l;
+ Eina_Stringshare *shared_to = eina_stringshare_add(to);
+
+ EINA_LIST_FOREACH(possibilities, l, n)
+ {
+ if (n->to == shared_to)
+ {
+ result = n->callback;
+ goto end;
+ }
+ }
+end:
+ eina_stringshare_del(shared_to);
+ return result;
+}
+
+EINA_API Eina_Bool
+eina_content_converter_convert_can(const char *from, const char *to)
+{
+ return !!_conversion_callback_fetch(from, to);
+}
+
+static const void*
+_process_cb(const void *container EINA_UNUSED, void *data, void *fdata EINA_UNUSED)
+{
+ Eina_Content_Conversion_Node *n = data;
+
+ return n->to;
+ }
+
+EINA_API Eina_Iterator*
+eina_content_converter_possible_conversions(const char *from)
+{
+ Eina_List *possibilities = _conversion_callback_fetch_possible(from);
+
+ return eina_iterator_processed_new(eina_list_iterator_new(possibilities) , EINA_PROCESS_CB(_process_cb), NULL, possibilities);
+}
+
+EINA_API Eina_Content*
+eina_content_new(Eina_Slice data, const char *type)
+{
+ Eina_Content *content;
+
+ if (eina_str_has_prefix(type,"text"))
+ {
+ //last char in the mem must be \0
+ if (((char*)data.mem)[data.len - 1] != '\0')
+ {
+ ERR("Last character is not a null character! but type is text!");
+ return NULL;
+ }
+ }
+
+ content = calloc(1, sizeof(Eina_Content));
+ EINA_SAFETY_ON_NULL_RETURN_VAL(content, NULL);
+ content->data = eina_slice_dup(data);
+ content->type = eina_stringshare_add(type);
+ EINA_SAFETY_ON_NULL_GOTO(content->data.mem, err);
+
+ _eina_content_ref(content);
+ return content;
+
+err:
+ if (content->data.mem)
+ {
+ free(content->data.mem);
+ content->data.mem = NULL;
+ }
+ free(content);
+ return NULL;
+}
+
+EINA_API void
+eina_content_free(Eina_Content *content)
+{
+ EINA_REFCOUNT_UNREF(content)
+ {
+ if (content->file)
+ eina_tmpstr_del(content->file);
+ free(content->data.mem);
+ free(content);
+ }
+}
+
+EINA_API const char*
+eina_content_as_file(Eina_Content *content)
+{
+ if (!content->file)
+ {
+ Eina_Tmpstr *path;
+ int fd = eina_file_mkstemp("prefixXXXXXX.ext", &path);
+
+ if (fd < 0)
+ {
+ ERR("Failed to create tmp file");
+ return NULL;
+ }
+
+ if (write(fd, content->data.mem, content->data.len) < 0)
+ {
+ ERR("Failed to write to a file");
+ eina_tmpstr_del(path);
+ close(fd);
+ return NULL;
+ }
+
+ content->file = path;
+ close(fd);
+ }
+ return content->file;
+}
+
+EINA_API const char*
+eina_content_type_get(Eina_Content *content)
+{
+ return content->type;
+}
+
+EINA_API Eina_Slice
+eina_content_data_get(Eina_Content *content)
+{
+ return eina_rw_slice_slice_get(content->data);
+}
+
+EINA_API Eina_Content*
+eina_content_convert(Eina_Content *content, const char *new_type)
+{
+ Eina_Content_Conversion_Callback callback = _conversion_callback_fetch(content->type, new_type);
+
+ if (!callback)
+ {
+ ERR("No suitable conversion found");
+ return NULL;
+ }
+
+ return callback(content, new_type);
+}
+
+static Eina_Content*
+_copy_converter(Eina_Content *from, const char *to_type)
+{
+ Eina_Slice slice = eina_content_data_get(from);
+ return eina_content_new(slice, to_type);
+}
+
+static Eina_Content*
+_latin1_to_utf8_converter(Eina_Content *from, const char *to_type)
+{
+ Eina_Slice slice = eina_content_data_get(from);
+ Eina_Strbuf *out = eina_strbuf_new();
+
+ for (unsigned int i = 0; i < slice.len; ++i)
+ {
+ const unsigned char c = ((char*)slice.mem)[i];
+ if (c < 128)
+ eina_strbuf_append_char(out, c);
+ else
+ {
+ eina_strbuf_append_char(out, 0xc0 | c >> 6);
+ eina_strbuf_append_char(out, 0x80 | (c & 0x3f));
+ }
+ }
+ Eina_Slice new;
+ new.len = eina_strbuf_length_get(out);
+ new.mem = eina_strbuf_string_get(out);
+ Eina_Content *c = eina_content_new(new, to_type);
+ eina_strbuf_free(out);
+ return c;
+}
+
+static Eina_Bool
+_eina_value_type_content_setup(const Eina_Value_Type *type EINA_UNUSED, void *mem)
+{
+ memset(mem, 0, sizeof(Eina_Content*));
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_eina_value_type_content_flush(const Eina_Value_Type *type EINA_UNUSED,
+ void *mem EINA_UNUSED)
+{
+ Eina_Content **content = mem;
+
+ eina_content_free(*content);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_eina_value_type_content_copy(const Eina_Value_Type *type EINA_UNUSED, const void *src, void *dst)
+{
+ Eina_Content * const *srcc = src;
+ Eina_Content **dstc = dst;
+
+ *dstc = *srcc;
+ _eina_content_ref(*dstc);
+ return EINA_TRUE;
+}
+
+static int
+_eina_value_type_content_compare(const Eina_Value_Type *type EINA_UNUSED, const void *a, const void *b)
+{
+ Eina_Content * const *ra = a;
+ Eina_Content * const *rb = b;
+
+ if ((*ra)->type != (*rb)->type)
+ return -1;
+
+ return eina_rw_slice_compare((*ra)->data, (*rb)->data);
+}
+
+static Eina_Bool
+_eina_value_type_content_convert_to(const Eina_Value_Type *type EINA_UNUSED, const Eina_Value_Type *convert EINA_UNUSED, const void *type_mem EINA_UNUSED, void *convert_mem EINA_UNUSED)
+{
+ Eina_Content * const *ra = type_mem;
+
+ if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
+ convert == EINA_VALUE_TYPE_STRING)
+ {
+ const char *type = eina_content_type_get(*ra);
+ if (eina_streq(type, "text/plain;charset=utf-8"))
+ {
+ Eina_Slice data = eina_content_data_get(*ra);
+ return eina_value_type_pset(convert, convert_mem, &data.mem);
+ }
+ else
+ {
+ Eina_Iterator *iter = eina_content_possible_conversions(*ra);
+ const char *type;
+
+ EINA_ITERATOR_FOREACH(iter, type)
+ {
+ if (eina_streq(type, "text/plain;charset=utf-8"))
+ {
+ Eina_Content *conv_result = eina_content_convert(*ra, type);
+
+ Eina_Slice data = eina_content_data_get(conv_result);
+ Eina_Bool success = eina_value_type_pset(convert, convert_mem, &data.mem);
+ eina_content_free(conv_result);
+ return success;
+ }
+ }
+ //create some fallback
+ {
+ char buf[128];
+ char *tmp = (char*) &buf;
+ snprintf(buf, sizeof(buf), "Content %p cannot be converted to \"text/plain;charset=utf-8\"", *ra);
+ return eina_value_type_pset(convert, convert_mem, &tmp);
+ }
+ }
+ }
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_eina_value_type_content_convert_from(const Eina_Value_Type *type EINA_UNUSED, const Eina_Value_Type *convert EINA_UNUSED, void *type_mem EINA_UNUSED, const void *convert_mem EINA_UNUSED)
+{
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_eina_value_type_content_pset(const Eina_Value_Type *type EINA_UNUSED, void *mem, const void *ptr)
+{
+ Eina_Content * const *srcc = ptr;
+ Eina_Content **dstc = mem;
+
+ *dstc = *srcc;
+ _eina_content_ref(*dstc);
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_eina_value_type_content_vset(const Eina_Value_Type *type EINA_UNUSED, void *mem, va_list args)
+{
+ Eina_Content **dst = mem;
+ Eina_Content *content = va_arg(args, Eina_Content*);
+
+ *dst = content;
+ _eina_content_ref(*dst);
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_eina_value_type_content_pget(const Eina_Value_Type *type EINA_UNUSED, const void *mem, void *ptr)
+{
+ Eina_Content * const *src = mem;
+ Eina_Content **dst = ptr;
+
+ *dst = *src;
+ _eina_content_ref(*dst);
+ return EINA_TRUE;
+}
+
+EINA_API const Eina_Value_Type _EINA_VALUE_TYPE_CONTENT ={
+ EINA_VALUE_TYPE_VERSION,
+ sizeof(Eina_Content*),
+ "Eina_Abstract_Content",
+ _eina_value_type_content_setup,
+ _eina_value_type_content_flush,
+ _eina_value_type_content_copy,
+ _eina_value_type_content_compare,
+ _eina_value_type_content_convert_to,
+ _eina_value_type_content_convert_from,
+ _eina_value_type_content_vset,
+ _eina_value_type_content_pset,
+ _eina_value_type_content_pget
+};
+
+static void
+_free_node(void *v)
+{
+ Eina_Content_Conversion_Node *n;
+ EINA_LIST_FREE(v, n)
+ {
+ eina_stringshare_del(n->to);
+ free(n);
+ }
+}
+
+Eina_Bool
+eina_abstract_content_init(void)
+{
+ _eina_abstract_content_log_domain = eina_log_domain_register("eina_abstract_content", "white");
+ conversion_callbacks = eina_hash_stringshared_new(_free_node);
+
+ EINA_VALUE_TYPE_CONTENT = &_EINA_VALUE_TYPE_CONTENT;
+
+ // text/plain is assumed to be charset "US-ASCII"
+
+ eina_content_converter_conversion_register("text/plain", "text/plain;charset=utf-8", _copy_converter);
+ eina_content_converter_conversion_register("text/plain", "text/plain;charset=iso-8859-1", _copy_converter);
+ eina_content_converter_conversion_register("text/plain;charset=iso-8859-1", "text/plain;charset=utf-8", _latin1_to_utf8_converter);
+ eina_content_converter_conversion_register("text/plain;charset=iso-8859-1", "text/plain", _copy_converter);
+
+ return EINA_TRUE;
+}
+
+Eina_Bool
+eina_abstract_content_shutdown(void)
+{
+ eina_hash_free(conversion_callbacks);
+
+ return EINA_TRUE;
+}
+
+Eina_Value*
+eina_value_content_new(Eina_Content *content)
+{
+ Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_CONTENT);
+
+ if (!eina_value_pset(v, &content))
+ return NULL;
+ return v;
+}
+
+
+Eina_Value
+eina_value_content_init(Eina_Content *content)
+{
+ Eina_Value v;
+
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_setup(&v, EINA_VALUE_TYPE_CONTENT), EINA_VALUE_EMPTY);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_pset(&v, &content), EINA_VALUE_EMPTY);
+
+ return v;
+}
+
+Eina_Content*
+eina_value_to_content(const Eina_Value *value)
+{
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_get(value) == EINA_VALUE_TYPE_CONTENT, NULL);
+ Eina_Content *result = calloc(1, sizeof(Eina_Content));
+ if (!eina_value_pget(value, &result))
+ {
+ free(result);
+ return NULL;
+ }
+ return result;
+}
diff --git a/src/lib/eina/eina_abstract_content.h b/src/lib/eina/eina_abstract_content.h
new file mode 100644
index 0000000000..580ed97242
--- /dev/null
+++ b/src/lib/eina/eina_abstract_content.h
@@ -0,0 +1,154 @@
+#ifndef EINA_ABSTRACT_CONTENT_H
+#define EINA_ABSTRACT_CONTENT_H
+
+
+/**
+ * @typedef Eina_Content
+ * Container for any type of content.
+ *
+ * Each Eina_Content is made of an Eina_Slice of memory and an IANA MIME type:
+ * https://www.iana.org/assignments/media-types/media-types.xhtml
+ *
+ * @note If the type is any kind of text the last byte of the slice must be \0.
+ *
+ * @since 1.24
+ */
+typedef struct _Eina_Content Eina_Content;
+
+/**
+ * @typedef Eina_Content_Conversion_Callback
+ *
+ * Method called when conversion from one type to another is requested.
+ * The from and to types are specified when the callback is registered.
+ * The to type is also passed in the callback here.
+ * The type of the from pointer does not need to be checked.
+ */
+typedef Eina_Content* (*Eina_Content_Conversion_Callback)(Eina_Content *from, const char *to_type);
+
+/**
+ * Get the path to a file, containing the slice memory as content.
+ *
+ * @param[in] content The content that will be in the file.
+ *
+ * @return The path to the file. Do not free this.
+ *
+ */
+EINA_API const char* eina_content_as_file(Eina_Content *content);
+
+/**
+ * Convert the content of the object to another type.
+ *
+ * In case the conversion cannot be performed, NULL is returned.
+ *
+ * @param[in] content The content to convert.
+ * @param[in] new_type The new type the returned content will have.
+ *
+ * @return A new content object. The caller of this function is owning this.
+ */
+EINA_API Eina_Content* eina_content_convert(Eina_Content *content, const char *new_type);
+
+/**
+ * Get the type of the passed content.
+ *
+ * @param[in] content The content to fetch the type from.
+ *
+ * @return The type of this content. Do no free this.
+ */
+EINA_API const char* eina_content_type_get(Eina_Content *content);
+
+/**
+ * Get the Eina_Slice of the passed content.
+ *
+ * @param[in] content The content to fetch the data from.
+ *
+ * @return An Eina_Slice containing the data. Do not free.
+ */
+EINA_API Eina_Slice eina_content_data_get(Eina_Content *content);
+
+/**
+ * Create a new content object, with the provided data and type.
+ *
+ * @param[in] data A slice of memory. The memory is copied.
+ * @param[in] type The type this data represents.
+ *
+ * @return The new content object. The caller owns this object.
+ */
+EINA_API Eina_Content* eina_content_new(Eina_Slice data, const char *type);
+
+/**
+ * Free the content object.
+ *
+ * @param[in] content The content to free.
+ */
+EINA_API void eina_content_free(Eina_Content *content);
+
+/**
+ * Register a new conversion callback.
+ *
+ * @param[in] from The type to convert from.
+ * @param[in] to The type to convert to.
+ *
+ * @return True if the callback was successfully registered.
+ */
+EINA_API Eina_Bool eina_content_converter_conversion_register(const char *from, const char *to, Eina_Content_Conversion_Callback convertion);
+
+/**
+ * Check if a specific conversion can be performed.
+ *
+ * A conversion can only be performed if a callback is registered.
+ *
+ * @param[in] from The type to convert from.
+ * @param[in] to The type to convert to.
+ *
+ * @return True if the conversion can be performed.
+ */
+EINA_API Eina_Bool eina_content_converter_convert_can(const char *from, const char *to);
+
+/**
+ * Returns an iterator containing all the target types that the provided source type can be converted to.
+ *
+ * @param[in] from The type to convert from.
+ *
+ * @return An Iterator containing MIME type strings. Free this via eina_iterator_free.
+ */
+EINA_API Eina_Iterator* eina_content_converter_possible_conversions(const char *from);
+
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_CONTENT;
+
+/**
+ * Convert the Eina_Content object to an Eina_Value.
+ *
+ * @param[in] content The Eina_Content struct that will be converted to an Eina_Value.
+ *
+ * @return An newly-allocated Eina_Value. Caller owns it.
+ */
+EINA_API Eina_Value* eina_value_content_new(Eina_Content *content);
+
+/**
+ * Creates an Eina_Value from an Eina_Content.
+ *
+ * @param[in] content The Eina_Content struct that will be converted to an Eina_Value.
+ *
+ * @return An Eina_Value with type EINA_VALUE_TYPE_CONTENT.
+ */
+EINA_API Eina_Value eina_value_content_init(Eina_Content *content);
+
+/**
+ * Gets the content from the Eina_Value.
+ *
+ * If the value is not of the type EINA_VALUE_TYPE_CONTENT, NULL will be returned and an error will be printed.
+ *
+ * @param[in] value The value to get the content from
+ *
+ * @return A newly-allocated Eina_Content. Caller owns it.
+ */
+EINA_API Eina_Content* eina_value_to_content(const Eina_Value *value);
+
+
+static inline Eina_Iterator*
+eina_content_possible_conversions(Eina_Content *content)
+{
+ return eina_content_converter_possible_conversions(eina_content_type_get(content));
+}
+
+#endif
diff --git a/src/lib/eina/eina_accessor.c b/src/lib/eina/eina_accessor.c
index 67494987a9..f6b4fb6221 100644
--- a/src/lib/eina/eina_accessor.c
+++ b/src/lib/eina/eina_accessor.c
@@ -92,7 +92,7 @@ eina_accessor_shutdown(void)
*============================================================================*/
-EAPI void
+EINA_API void
eina_accessor_free(Eina_Accessor *accessor)
{
if (!accessor)
@@ -103,7 +103,7 @@ eina_accessor_free(Eina_Accessor *accessor)
accessor->free(accessor);
}
-EAPI void *
+EINA_API void *
eina_accessor_container_get(Eina_Accessor *accessor)
{
EINA_MAGIC_CHECK_ACCESSOR(accessor);
@@ -112,7 +112,7 @@ eina_accessor_container_get(Eina_Accessor *accessor)
return accessor->get_container(accessor);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_accessor_data_get(Eina_Accessor *accessor,
unsigned int position,
void **data)
@@ -124,7 +124,7 @@ eina_accessor_data_get(Eina_Accessor *accessor,
return accessor->get_at(accessor, position, data);
}
-EAPI void
+EINA_API void
eina_accessor_over(Eina_Accessor *accessor,
Eina_Each_Cb cb,
unsigned int start,
@@ -156,7 +156,7 @@ eina_accessor_over(Eina_Accessor *accessor,
(void) eina_accessor_unlock(accessor);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_accessor_lock(Eina_Accessor *accessor)
{
EINA_MAGIC_CHECK_ACCESSOR(accessor);
@@ -167,7 +167,7 @@ eina_accessor_lock(Eina_Accessor *accessor)
return EINA_TRUE;
}
-EAPI Eina_Accessor*
+EINA_API Eina_Accessor*
eina_accessor_clone(Eina_Accessor *accessor)
{
EINA_MAGIC_CHECK_ACCESSOR(accessor);
@@ -179,7 +179,7 @@ eina_accessor_clone(Eina_Accessor *accessor)
return NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_accessor_unlock(Eina_Accessor *accessor)
{
EINA_MAGIC_CHECK_ACCESSOR(accessor);
@@ -205,20 +205,20 @@ struct _Eina_Accessor_CArray_Length
static Eina_Bool
eina_carray_length_accessor_get_at(Eina_Accessor_CArray_Length *accessor, unsigned int idx, void **data)
{
- if (accessor->array + idx*accessor->step >= accessor->end)
+ if ((char*)accessor->array + idx*accessor->step >= (char*)accessor->end)
return EINA_FALSE;
- memcpy(data, (void*) accessor->array + idx*accessor->step, accessor->step);
+ memcpy(data, (char*) accessor->array + idx*accessor->step, accessor->step);
return EINA_TRUE;
}
static Eina_Bool
eina_carray_length_accessor_ptr_get_at(Eina_Accessor_CArray_Length *accessor, unsigned int idx, void **data)
{
- if (accessor->array + idx*accessor->step >= accessor->end)
+ if ((char*)accessor->array + idx*accessor->step >= (char*)accessor->end)
return EINA_FALSE;
- *data = (((void*)accessor->array) + idx*accessor->step);
+ *data = (((char*)accessor->array) + idx*accessor->step);
return EINA_TRUE;
}
@@ -235,7 +235,7 @@ eina_carray_length_accessor_free(Eina_Accessor_CArray_Length *accessor)
free(accessor);
}
-EAPI Eina_Accessor *
+EINA_API Eina_Accessor *
eina_carray_length_accessor_new(void** array, unsigned int step, unsigned int length)
{
Eina_Accessor_CArray_Length *accessor;
@@ -246,7 +246,7 @@ eina_carray_length_accessor_new(void** array, unsigned int step, unsigned int le
EINA_MAGIC_SET(&accessor->accessor, EINA_MAGIC_ACCESSOR);
accessor->array = array;
- accessor->end = accessor->array + length * step;
+ accessor->end = (void**)((char*)accessor->array + length * step);
accessor->step = step;
accessor->accessor.version = EINA_ACCESSOR_VERSION;
@@ -258,7 +258,7 @@ eina_carray_length_accessor_new(void** array, unsigned int step, unsigned int le
return &accessor->accessor;
}
-EAPI Eina_Accessor *
+EINA_API Eina_Accessor *
eina_carray_length_ptr_accessor_new(void** array, unsigned int step, unsigned int length)
{
Eina_Accessor_CArray_Length *accessor;
@@ -269,7 +269,7 @@ eina_carray_length_ptr_accessor_new(void** array, unsigned int step, unsigned in
EINA_MAGIC_SET(&accessor->accessor, EINA_MAGIC_ACCESSOR);
accessor->array = array;
- accessor->end = accessor->array + length * step;
+ accessor->end = (void**)((char*)accessor->array + length * step);
accessor->step = step;
accessor->accessor.version = EINA_ACCESSOR_VERSION;
diff --git a/src/lib/eina/eina_accessor.h b/src/lib/eina/eina_accessor.h
index ccfccceba3..c70f8ed495 100644
--- a/src/lib/eina/eina_accessor.h
+++ b/src/lib/eina/eina_accessor.h
@@ -205,7 +205,7 @@ struct _Eina_Accessor
* @param[in] accessor The accessor to free
*
*/
-EAPI void eina_accessor_free(Eina_Accessor *accessor);
+EINA_API void eina_accessor_free(Eina_Accessor *accessor);
/**
* @brief Gets the data of an accessor at the given position.
@@ -219,7 +219,7 @@ EAPI void eina_accessor_free(Eina_Accessor *accessor);
* @return #EINA_TRUE on success, otherwise #EINA_FALSE
*
*/
-EAPI Eina_Bool eina_accessor_data_get(Eina_Accessor *accessor,
+EINA_API Eina_Bool eina_accessor_data_get(Eina_Accessor *accessor,
unsigned int position,
void **data) EINA_ARG_NONNULL(1);
@@ -231,7 +231,7 @@ EAPI Eina_Bool eina_accessor_data_get(Eina_Accessor *accessor,
* @return The container that created the accessor
*
*/
-EAPI void *eina_accessor_container_get(Eina_Accessor *accessor) EINA_ARG_NONNULL(1) EINA_PURE;
+EINA_API void *eina_accessor_container_get(Eina_Accessor *accessor) EINA_ARG_NONNULL(1) EINA_PURE;
/**
* @brief Iterates over the container and executes a callback on the chosen elements.
@@ -249,7 +249,7 @@ EAPI void *eina_accessor_container_get(Eina_Accessor *accessor) EINA_ARG_NONNULL
* @param[in] fdata The data passed to the callback
*
*/
-EAPI void eina_accessor_over(Eina_Accessor *accessor,
+EINA_API void eina_accessor_over(Eina_Accessor *accessor,
Eina_Each_Cb cb,
unsigned int start,
unsigned int end,
@@ -269,7 +269,7 @@ EAPI void eina_accessor_over(Eina_Accessor *accessor,
*
* @warning None of the existing eina data structures are lockable.
*/
-EAPI Eina_Bool eina_accessor_lock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_accessor_lock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
/**
* @brief Clones the container of the accessor.
@@ -278,7 +278,7 @@ EAPI Eina_Bool eina_accessor_lock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
* @return Another accessor
* @since 1.10
*/
-EAPI Eina_Accessor* eina_accessor_clone(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
+EINA_API Eina_Accessor* eina_accessor_clone(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
/**
* @brief Unlocks the container of the accessor.
@@ -293,7 +293,7 @@ EAPI Eina_Accessor* eina_accessor_clone(Eina_Accessor *accessor) EINA_ARG_NONNUL
*
* @warning None of the existing eina data structures are lockable.
*/
-EAPI Eina_Bool eina_accessor_unlock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_accessor_unlock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
/**
* @def EINA_ACCESSOR_FOREACH
@@ -363,7 +363,7 @@ EAPI Eina_Bool eina_accessor_unlock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1)
*
* @since 1.23
*/
-EAPI Eina_Accessor* eina_carray_length_accessor_new(void** array, unsigned int step, unsigned int length);
+EINA_API Eina_Accessor* eina_carray_length_accessor_new(void** array, unsigned int step, unsigned int length);
/**
@@ -383,12 +383,12 @@ EAPI Eina_Accessor* eina_carray_length_accessor_new(void** array, unsigned int s
* @since 1.24
*/
-EAPI Eina_Accessor* eina_carray_length_ptr_accessor_new(void** array, unsigned int step, unsigned int length);
+EINA_API Eina_Accessor* eina_carray_length_ptr_accessor_new(void** array, unsigned int step, unsigned int length);
/**
* @def EINA_C_ARRAY_ACCESSOR_NEW
* @brief Creates an Eina_Accessor that wraps a plain fixed size C array
*
- * @param[in] array The array
+ * @param[in] Array The array
* @return The accessor that will give access to the passed array
*
* You can create it like this:
@@ -403,7 +403,7 @@ EAPI Eina_Accessor* eina_carray_length_ptr_accessor_new(void** array, unsigned i
* @def EINA_C_ARRAY_ACCESSOR_NEW
* @brief Creates an Eina_Accessor that wraps a plain fixed size C array
*
- * @param[in] array The array
+ * @param[in] Array The array
* @return The accessor that will give access to the passed array
*
* You can create it like this:
diff --git a/src/lib/eina/eina_array.c b/src/lib/eina/eina_array.c
index cda5181213..a7c50d28dd 100644
--- a/src/lib/eina/eina_array.c
+++ b/src/lib/eina/eina_array.c
@@ -191,7 +191,7 @@ eina_array_accessor_clone(const Eina_Accessor_Array *it)
}
/* used from eina_inline_array.x, thus a needed symbol */
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_array_grow(Eina_Array *array)
{
void **tmp;
@@ -272,7 +272,7 @@ eina_array_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_Array *
+EINA_API Eina_Array *
eina_array_new(unsigned int step)
{
Eina_Array *array;
@@ -291,7 +291,7 @@ eina_array_new(unsigned int step)
return array;
}
-EAPI void
+EINA_API void
eina_array_free(Eina_Array *array)
{
if (!array) return;
@@ -301,7 +301,7 @@ eina_array_free(Eina_Array *array)
MAGIC_FREE(array);
}
-EAPI void
+EINA_API void
eina_array_step_set(Eina_Array *array,
unsigned int sizeof_eina_array,
unsigned int step)
@@ -326,7 +326,7 @@ eina_array_step_set(Eina_Array *array,
EINA_MAGIC_SET(array, EINA_MAGIC_ARRAY);
}
-EAPI void
+EINA_API void
eina_array_flush(Eina_Array *array)
{
EINA_SAFETY_ON_NULL_RETURN(array);
@@ -342,7 +342,7 @@ eina_array_flush(Eina_Array *array)
array->data = NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data,
void *gdata),
void *gdata)
@@ -390,7 +390,7 @@ eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data,
return EINA_TRUE;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_array_iterator_new(const Eina_Array *array)
{
Eina_Iterator_Array *it;
@@ -415,7 +415,7 @@ eina_array_iterator_new(const Eina_Array *array)
return &it->iterator;
}
-EAPI Eina_Accessor *
+EINA_API Eina_Accessor *
eina_array_accessor_new(const Eina_Array *array)
{
Eina_Accessor_Array *ac;
diff --git a/src/lib/eina/eina_array.h b/src/lib/eina/eina_array.h
index c6e62ad142..3c4eb6f753 100644
--- a/src/lib/eina/eina_array.h
+++ b/src/lib/eina/eina_array.h
@@ -251,7 +251,7 @@ struct _Eina_Array
* This function return a valid array on success, or @c NULL if memory
* allocation fails.
*/
-EAPI Eina_Array *eina_array_new(unsigned int step) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Array *eina_array_new(unsigned int step) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Frees an array.
@@ -263,7 +263,7 @@ EAPI Eina_Array *eina_array_new(unsigned int step) EINA_WARN_UNUSED_RESULT EINA_
* does not free the memory allocated for the elements of @p array. To
* free them, walk the array with #EINA_ARRAY_ITER_NEXT.
*/
-EAPI void eina_array_free(Eina_Array *array);
+EINA_API void eina_array_free(Eina_Array *array);
/**
* @brief Sets the step of an array.
@@ -278,7 +278,7 @@ EAPI void eina_array_free(Eina_Array *array);
*
* @warning This function can @b only be called on uninitialized arrays.
*/
-EAPI void eina_array_step_set(Eina_Array *array,
+EINA_API void eina_array_step_set(Eina_Array *array,
unsigned int sizeof_eina_array,
unsigned int step) EINA_ARG_NONNULL(1);
/**
@@ -303,7 +303,7 @@ static inline void eina_array_clean(Eina_Array *array) EINA_ARG_NONNULL(1);
* there is no check of @p array. If it is @c NULL or invalid, the
* program may crash.
*/
-EAPI void eina_array_flush(Eina_Array *array) EINA_ARG_NONNULL(1);
+EINA_API void eina_array_flush(Eina_Array *array) EINA_ARG_NONNULL(1);
/**
* @brief Rebuilds an array by specifying the data to keep.
@@ -321,7 +321,7 @@ EAPI void eina_array_flush(Eina_Array *array) EINA_ARG_NONNULL(1);
* If it wasn't able to remove items due to an allocation failure, it will
* return #EINA_FALSE.
*/
-EAPI Eina_Bool eina_array_remove(Eina_Array * array,
+EINA_API Eina_Bool eina_array_remove(Eina_Array * array,
Eina_Bool (*keep)(void *data, void *gdata),
void *gdata) EINA_ARG_NONNULL(1, 2);
@@ -441,7 +441,7 @@ static inline Eina_Bool eina_array_find(const Eina_Array *array,
*
* @see Eina_Iterator_Group
*/
-EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_array_iterator_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets a new accessor associated with an array.
@@ -456,7 +456,7 @@ EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array *array) EINA
*
* @see Eina_Accessor_Group
*/
-EAPI Eina_Accessor *eina_array_accessor_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Accessor *eina_array_accessor_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Iterates over an array using a callback function.
diff --git a/src/lib/eina/eina_benchmark.c b/src/lib/eina/eina_benchmark.c
index 7afa8e8e56..3b4f07bc46 100644
--- a/src/lib/eina/eina_benchmark.c
+++ b/src/lib/eina/eina_benchmark.c
@@ -134,7 +134,7 @@ eina_benchmark_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_Benchmark *
+EINA_API Eina_Benchmark *
eina_benchmark_new(const char *name, const char *run)
{
Eina_Benchmark *new;
@@ -148,7 +148,7 @@ eina_benchmark_new(const char *name, const char *run)
return new;
}
-EAPI void
+EINA_API void
eina_benchmark_free(Eina_Benchmark *bench)
{
Eina_Array *names;
@@ -179,7 +179,7 @@ eina_benchmark_free(Eina_Benchmark *bench)
free(bench);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_benchmark_register(Eina_Benchmark *bench,
const char *name,
Eina_Benchmark_Specimens bench_cb,
@@ -209,7 +209,7 @@ eina_benchmark_register(Eina_Benchmark *bench,
return EINA_TRUE;
}
-EAPI Eina_Array *
+EINA_API Eina_Array *
eina_benchmark_run(Eina_Benchmark *bench)
{
FILE *main_script;
diff --git a/src/lib/eina/eina_benchmark.h b/src/lib/eina/eina_benchmark.h
index 38959a1306..c906abba58 100644
--- a/src/lib/eina/eina_benchmark.h
+++ b/src/lib/eina/eina_benchmark.h
@@ -170,8 +170,6 @@
* char tmp[128];
* int i;
*
- * srand(time(NULL));
- *
* for (i = 0; i < request; ++i)
* eina_convert_itoa(rand(), tmp);
* }
@@ -182,8 +180,6 @@
* char tmp[128];
* int i;
*
- * srand(time(NULL));
- *
* for (i = 0; i < request; ++i)
* eina_convert_xtoa(rand(), tmp);
* }
@@ -203,8 +199,6 @@
* int *data;
* int i;
*
- * srand(time(NULL));
- *
* array = eina_array_new(64);
*
* for (i = 0; i < request; ++i)
@@ -228,8 +222,6 @@
* int *data;
* int i;
*
- * srand(time(NULL));
- *
* for (i = 0; i < request; ++i)
* {
* data = (int *)malloc(sizeof(int));
@@ -367,7 +359,7 @@ typedef void (*Eina_Benchmark_Specimens)(int request);
* When the new module is not needed anymore, use
* eina_benchmark_free() to free the allocated memory.
*/
-EAPI Eina_Benchmark *eina_benchmark_new(const char *name,
+EINA_API Eina_Benchmark *eina_benchmark_new(const char *name,
const char *run);
/**
@@ -379,7 +371,7 @@ EAPI Eina_Benchmark *eina_benchmark_new(const char *name,
* registered and frees @p bench. If @p bench is @c NULL, this
* function returns immediately.
*/
-EAPI void eina_benchmark_free(Eina_Benchmark *bench);
+EINA_API void eina_benchmark_free(Eina_Benchmark *bench);
/**
* @brief Adds a test to a benchmark.
@@ -401,7 +393,7 @@ EAPI void eina_benchmark_free(Eina_Benchmark *bench);
* If @p bench is @c NULL or @p count_step is 0, this function returns
* immediately and does not add any tests to the benchmark.
*/
-EAPI Eina_Bool eina_benchmark_register(Eina_Benchmark *bench,
+EINA_API Eina_Bool eina_benchmark_register(Eina_Benchmark *bench,
const char *name,
Eina_Benchmark_Specimens bench_cb,
int count_start,
@@ -430,7 +422,7 @@ EAPI Eina_Bool eina_benchmark_register(Eina_Benchmark *bench,
* the gnuplot file. The number of times each test is executed is
* controlled by the parameters passed to eina_benchmark_register().
*/
-EAPI Eina_Array *eina_benchmark_run(Eina_Benchmark *bench);
+EINA_API Eina_Array *eina_benchmark_run(Eina_Benchmark *bench);
/**
* @}
diff --git a/src/lib/eina/eina_bezier.c b/src/lib/eina/eina_bezier.c
index b3b093c790..43dbe33578 100644
--- a/src/lib/eina/eina_bezier.c
+++ b/src/lib/eina/eina_bezier.c
@@ -106,7 +106,7 @@ _eina_bezier_length_helper(const Eina_Bezier *b)
return len;
}
-EAPI void
+EINA_API void
eina_bezier_values_set(Eina_Bezier *b,
double start_x, double start_y,
double ctrl_start_x, double ctrl_start_y,
@@ -123,7 +123,7 @@ eina_bezier_values_set(Eina_Bezier *b,
b->end.y = end_y;
}
-EAPI void
+EINA_API void
eina_bezier_values_get(const Eina_Bezier *b,
double *start_x, double *start_y,
double *ctrl_start_x, double *ctrl_start_y,
@@ -141,7 +141,7 @@ eina_bezier_values_get(const Eina_Bezier *b,
}
-EAPI void
+EINA_API void
eina_bezier_point_at(const Eina_Bezier *bz, double t, double *px, double *py)
{
double m_t = 1.0 - t;
@@ -169,7 +169,7 @@ eina_bezier_point_at(const Eina_Bezier *bz, double t, double *px, double *py)
}
}
-EAPI double
+EINA_API double
eina_bezier_angle_at(const Eina_Bezier *b, double t)
{
double x, y;
@@ -183,7 +183,7 @@ eina_bezier_angle_at(const Eina_Bezier *b, double t)
return theta_normalized;
}
-EAPI double
+EINA_API double
eina_bezier_length_get(const Eina_Bezier *b)
{
return _eina_bezier_length_helper(b);
@@ -218,7 +218,7 @@ _eina_bezier_split_left(Eina_Bezier *b, double t, Eina_Bezier *left)
left->end.y = b->start.y = left->ctrl_end.y + t * (b->ctrl_start.y - left->ctrl_end.y);
}
-EAPI double
+EINA_API double
eina_bezier_t_at(const Eina_Bezier *b, double l)
{
double len = eina_bezier_length_get(b);
@@ -256,7 +256,7 @@ eina_bezier_t_at(const Eina_Bezier *b, double l)
return t;
}
-EAPI void
+EINA_API void
eina_bezier_split_at_length(const Eina_Bezier *b, double len,
Eina_Bezier *left, Eina_Bezier *right)
{
@@ -270,7 +270,7 @@ eina_bezier_split_at_length(const Eina_Bezier *b, double len,
_eina_bezier_split_left(right, t, left);
}
-EAPI void
+EINA_API void
eina_bezier_bounds_get(const Eina_Bezier *b, double *x, double *y, double *w, double *h)
{
double xmin = b->start.x;
@@ -310,7 +310,7 @@ eina_bezier_bounds_get(const Eina_Bezier *b, double *x, double *y, double *w, do
if (h) *h = ymax - ymin;
}
-EAPI void
+EINA_API void
eina_bezier_on_interval(Eina_Bezier *b, double t0, double t1, Eina_Bezier *result)
{
Eina_Bezier bezier;
diff --git a/src/lib/eina/eina_bezier.h b/src/lib/eina/eina_bezier.h
index bf309643fa..1779da09fc 100644
--- a/src/lib/eina/eina_bezier.h
+++ b/src/lib/eina/eina_bezier.h
@@ -20,6 +20,13 @@
#define EINA_BEZIER_H
/**
+ * @defgroup Eina_Bezier_Group Bezier Curve
+ * @ingroup Eina_Tools_Group
+ *
+ * @{
+ */
+
+/**
* Floating point cubic bezier curve
*/
typedef struct _Eina_Bezier Eina_Bezier;
@@ -64,7 +71,7 @@ struct _Eina_Bezier
* @p b. No check is done on @p b.
* @since 1.16
*/
-EAPI void eina_bezier_values_set(Eina_Bezier *b, double start_x, double start_y, double ctrl_start_x, double ctrl_start_y, double ctrl_end_x, double ctrl_end_y, double end_x, double end_y) EINA_ARG_NONNULL(1);
+EINA_API void eina_bezier_values_set(Eina_Bezier *b, double start_x, double start_y, double ctrl_start_x, double ctrl_start_y, double ctrl_end_x, double ctrl_end_y, double end_x, double end_y) EINA_ARG_NONNULL(1);
/**
* @brief Gets the values of the points of the given floating
@@ -83,7 +90,7 @@ EAPI void eina_bezier_values_set(Eina_Bezier *b, double start_x, double start_y,
* @p b. No check is done on @p b.
* @since 1.16
*/
-EAPI void eina_bezier_values_get(const Eina_Bezier *b, double *start_x, double *start_y, double *ctrl_start_x, double *ctrl_start_y, double *ctrl_end_x, double *ctrl_end_y, double *end_x, double *end_y) EINA_ARG_NONNULL(1);
+EINA_API void eina_bezier_values_get(const Eina_Bezier *b, double *start_x, double *start_y, double *ctrl_start_x, double *ctrl_start_y, double *ctrl_end_x, double *ctrl_end_y, double *end_x, double *end_y) EINA_ARG_NONNULL(1);
/**
* @brief Calculates the approximate length of the given floating point
@@ -99,7 +106,7 @@ EAPI void eina_bezier_values_get(const Eina_Bezier *b, double *start_x, double *
* No check is done on @p b.
* @since 1.16
*/
-EAPI double eina_bezier_length_get(const Eina_Bezier *b) EINA_ARG_NONNULL(1);
+EINA_API double eina_bezier_length_get(const Eina_Bezier *b) EINA_ARG_NONNULL(1);
/**
* @brief Returns the relative position on a bezier at a given length.
@@ -116,7 +123,7 @@ EAPI double eina_bezier_length_get(const Eina_Bezier *b) EINA_ARG_NONNULL(1);
*
* @since 1.16
*/
-EAPI double eina_bezier_t_at(const Eina_Bezier *b, double len) EINA_ARG_NONNULL(1);
+EINA_API double eina_bezier_t_at(const Eina_Bezier *b, double len) EINA_ARG_NONNULL(1);
/**
* @brief Gets the point on the bezier curve at position t.
@@ -129,7 +136,7 @@ EAPI double eina_bezier_t_at(const Eina_Bezier *b, double len) EINA_ARG_NONNULL(
* No check is done on @p b.
* @since 1.16
*/
-EAPI void eina_bezier_point_at(const Eina_Bezier *b, double t, double *px, double *py) EINA_ARG_NONNULL(1);
+EINA_API void eina_bezier_point_at(const Eina_Bezier *b, double t, double *px, double *py) EINA_ARG_NONNULL(1);
/**
* @brief Determines the slope of the bezier at a given position.
@@ -140,7 +147,7 @@ EAPI void eina_bezier_point_at(const Eina_Bezier *b, double t, double *px, doubl
* No check is done on @p b.
* @since 1.16
*/
-EAPI double eina_bezier_angle_at(const Eina_Bezier *b, double t) EINA_ARG_NONNULL(1);
+EINA_API double eina_bezier_angle_at(const Eina_Bezier *b, double t) EINA_ARG_NONNULL(1);
/**
* @brief Splits the bezier at a given length.
@@ -153,7 +160,7 @@ EAPI double eina_bezier_angle_at(const Eina_Bezier *b, double t) EINA_ARG_NONNUL
* No check is done on @p b.
* @since 1.16
*/
-EAPI void eina_bezier_split_at_length(const Eina_Bezier *b, double len, Eina_Bezier *left, Eina_Bezier *right) EINA_ARG_NONNULL(1);
+EINA_API void eina_bezier_split_at_length(const Eina_Bezier *b, double len, Eina_Bezier *left, Eina_Bezier *right) EINA_ARG_NONNULL(1);
/**
* @brief Calculates the bounding box for the bezier.
@@ -167,7 +174,7 @@ EAPI void eina_bezier_split_at_length(const Eina_Bezier *b, double len, Eina_Bez
* No check is done on @p b.
* @since 1.17
*/
-EAPI void eina_bezier_bounds_get(const Eina_Bezier *b, double *x, double *y, double *w, double *h) EINA_ARG_NONNULL(1);
+EINA_API void eina_bezier_bounds_get(const Eina_Bezier *b, double *x, double *y, double *w, double *h) EINA_ARG_NONNULL(1);
/**
* @brief Finds the bezier between the given interval.
@@ -180,6 +187,10 @@ EAPI void eina_bezier_bounds_get(const Eina_Bezier *b, double *x, double *y, dou
* No check is done on @p b.
* @since 1.17
*/
-EAPI void eina_bezier_on_interval(Eina_Bezier *b, double t0, double t1, Eina_Bezier *result);
+EINA_API void eina_bezier_on_interval(Eina_Bezier *b, double t0, double t1, Eina_Bezier *result);
+
+/**
+ * @}
+ */
#endif // EINA_BEZIER_H
diff --git a/src/lib/eina/eina_binbuf.c b/src/lib/eina/eina_binbuf.c
index d392686c33..9e7e5de337 100644
--- a/src/lib/eina/eina_binbuf.c
+++ b/src/lib/eina/eina_binbuf.c
@@ -53,7 +53,7 @@ static const char __BINBUF_MAGIC_STR[] = "Eina Binbuf";
#include "eina_binbuf_template_c.x"
-EAPI Eina_Binbuf *
+EINA_API Eina_Binbuf *
eina_binbuf_manage_new(const unsigned char *str, size_t length, Eina_Bool ro)
{
Eina_Binbuf *buf;
diff --git a/src/lib/eina/eina_binbuf.h b/src/lib/eina/eina_binbuf.h
index dbbcf9e31a..99cda39f15 100644
--- a/src/lib/eina/eina_binbuf.h
+++ b/src/lib/eina/eina_binbuf.h
@@ -47,7 +47,7 @@ typedef struct _Eina_Strbuf Eina_Binbuf;
* @see eina_binbuf_append()
* @see eina_binbuf_string_get()
*/
-EAPI Eina_Binbuf *eina_binbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Binbuf *eina_binbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new string buffer using the passed string.
@@ -73,7 +73,7 @@ EAPI Eina_Binbuf *eina_binbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
*
* @since 1.14.0
*/
-EAPI Eina_Binbuf *eina_binbuf_manage_new(const unsigned char *str, size_t length, Eina_Bool ro) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Binbuf *eina_binbuf_manage_new(const unsigned char *str, size_t length, Eina_Bool ro) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new string buffer using the passed string.
@@ -89,7 +89,7 @@ EAPI Eina_Binbuf *eina_binbuf_manage_new(const unsigned char *str, size_t length
*
* @since 1.2.0
*/
-EAPI Eina_Binbuf *eina_binbuf_manage_new_length(unsigned char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_DEPRECATED;
+EINA_API Eina_Binbuf *eina_binbuf_manage_new_length(unsigned char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_DEPRECATED;
/**
* @brief Creates a new string buffer using the passed string.
@@ -110,7 +110,7 @@ EAPI Eina_Binbuf *eina_binbuf_manage_new_length(unsigned char *str, size_t lengt
*
* @since 1.9.0
*/
-EAPI Eina_Binbuf *eina_binbuf_manage_read_only_new_length(const unsigned char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_DEPRECATED;
+EINA_API Eina_Binbuf *eina_binbuf_manage_read_only_new_length(const unsigned char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_DEPRECATED;
/**
* @brief Frees a string buffer.
@@ -120,7 +120,7 @@ EAPI Eina_Binbuf *eina_binbuf_manage_read_only_new_length(const unsigned char *s
* This function frees the memory of @p buf. @p buf must have been
* created by eina_binbuf_new().
*/
-EAPI void eina_binbuf_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_binbuf_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Resets a string buffer.
@@ -130,7 +130,7 @@ EAPI void eina_binbuf_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
* This function resets @p buf: the buffer len is set to 0, and the
* string is set to '\\0'. No memory is freed.
*/
-EAPI void eina_binbuf_reset(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_binbuf_reset(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Expands a buffer, making room for at least @p minimum_unused_space.
@@ -160,7 +160,7 @@ EAPI void eina_binbuf_reset(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
*
* @since 1.19
*/
-EAPI Eina_Rw_Slice eina_binbuf_expand(Eina_Binbuf *buf, size_t minimum_unused_space) EINA_ARG_NONNULL(1);
+EINA_API Eina_Rw_Slice eina_binbuf_expand(Eina_Binbuf *buf, size_t minimum_unused_space) EINA_ARG_NONNULL(1);
/**
* @brief Marks more bytes as used.
@@ -180,7 +180,7 @@ EAPI Eina_Rw_Slice eina_binbuf_expand(Eina_Binbuf *buf, size_t minimum_unused_sp
*
* @since 1.19
*/
-EAPI Eina_Bool eina_binbuf_use(Eina_Binbuf *buf, size_t extra_bytes) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_binbuf_use(Eina_Binbuf *buf, size_t extra_bytes) EINA_ARG_NONNULL(1);
/**
* @brief Appends a string of exact length to a buffer, reallocating as
@@ -200,7 +200,7 @@ EAPI Eina_Bool eina_binbuf_use(Eina_Binbuf *buf, size_t extra_bytes) EINA_ARG_NO
* @see eina_binbuf_append()
* @see eina_binbuf_append_n()
*/
-EAPI Eina_Bool eina_binbuf_append_length(Eina_Binbuf *buf, const unsigned char *str, size_t length) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_binbuf_append_length(Eina_Binbuf *buf, const unsigned char *str, size_t length) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a slice to a buffer, reallocating as necessary.
@@ -213,7 +213,7 @@ EAPI Eina_Bool eina_binbuf_append_length(Eina_Binbuf *buf, const unsigned char *
*
* @since 1.19
*/
-EAPI Eina_Bool eina_binbuf_append_slice(Eina_Binbuf *buf, const Eina_Slice slice) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_binbuf_append_slice(Eina_Binbuf *buf, const Eina_Slice slice) EINA_ARG_NONNULL(1);
/**
* @brief Appends an Eina_Binbuf to a buffer, reallocating as necessary.
@@ -232,7 +232,7 @@ EAPI Eina_Bool eina_binbuf_append_slice(Eina_Binbuf *buf, const Eina_Slice slice
*
* @since 1.9.0
*/
-EAPI Eina_Bool eina_binbuf_append_buffer(Eina_Binbuf *buf, const Eina_Binbuf *data) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_binbuf_append_buffer(Eina_Binbuf *buf, const Eina_Binbuf *data) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a character to a string buffer, reallocating as
@@ -244,7 +244,7 @@ EAPI Eina_Bool eina_binbuf_append_buffer(Eina_Binbuf *buf, const Eina_Binbuf *da
*
* This function appends @p c to @p buf.
*/
-EAPI Eina_Bool eina_binbuf_append_char(Eina_Binbuf *buf, unsigned char c) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_binbuf_append_char(Eina_Binbuf *buf, unsigned char c) EINA_ARG_NONNULL(1);
/**
* @brief Inserts a string of exact length into a buffer, reallocating as necessary.
@@ -264,7 +264,7 @@ EAPI Eina_Bool eina_binbuf_append_char(Eina_Binbuf *buf, unsigned char c) EINA_A
* @see eina_binbuf_insert()
* @see eina_binbuf_insert_n()
*/
-EAPI Eina_Bool eina_binbuf_insert_length(Eina_Binbuf *buf, const unsigned char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_binbuf_insert_length(Eina_Binbuf *buf, const unsigned char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts a slice into a buffer, reallocating as necessary.
@@ -278,7 +278,7 @@ EAPI Eina_Bool eina_binbuf_insert_length(Eina_Binbuf *buf, const unsigned char *
*
* @since 1.19.0
*/
-EAPI Eina_Bool eina_binbuf_insert_slice(Eina_Binbuf *buf, const Eina_Slice slice, size_t pos) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_binbuf_insert_slice(Eina_Binbuf *buf, const Eina_Slice slice, size_t pos) EINA_ARG_NONNULL(1);
/**
* @brief Inserts a character into a string buffer, reallocating as
@@ -291,7 +291,7 @@ EAPI Eina_Bool eina_binbuf_insert_slice(Eina_Binbuf *buf, const Eina_Slice slice
*
* This function inserts @p c to @p buf at position @p pos.
*/
-EAPI Eina_Bool eina_binbuf_insert_char(Eina_Binbuf *buf, unsigned char c, size_t pos) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_binbuf_insert_char(Eina_Binbuf *buf, unsigned char c, size_t pos) EINA_ARG_NONNULL(1);
/**
* @brief Removes a slice of the given string buffer.
@@ -307,7 +307,7 @@ EAPI Eina_Bool eina_binbuf_insert_char(Eina_Binbuf *buf, unsigned char c, size_t
* (inclusive) and ending at @p end (non-inclusive). Both values are
* in bytes.
*/
-EAPI Eina_Bool eina_binbuf_remove(Eina_Binbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_binbuf_remove(Eina_Binbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
/**
* @brief Retrieves a pointer to the contents of a string buffer.
@@ -322,7 +322,7 @@ EAPI Eina_Bool eina_binbuf_remove(Eina_Binbuf *buf, size_t start, size_t end) EI
*
* @see eina_binbuf_string_steal()
*/
-EAPI const unsigned char *eina_binbuf_string_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API const unsigned char *eina_binbuf_string_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Steals the contents of a string buffer.
@@ -337,7 +337,7 @@ EAPI const unsigned char *eina_binbuf_string_get(const Eina_Binbuf *buf) EINA_AR
*
* @see eina_binbuf_string_get()
*/
-EAPI unsigned char *eina_binbuf_string_steal(Eina_Binbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API unsigned char *eina_binbuf_string_steal(Eina_Binbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Frees the contents of a string buffer but not the buffer.
@@ -347,7 +347,7 @@ EAPI unsigned char *eina_binbuf_string_steal(Eina_Binbuf *buf) EINA_MALLOC EINA_
* This function frees the string contained in @p buf without freeing
* @p buf.
*/
-EAPI void eina_binbuf_string_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_binbuf_string_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Retrieves the length of the string buffer's content.
@@ -357,7 +357,7 @@ EAPI void eina_binbuf_string_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
*
* This function returns the length of @p buf.
*/
-EAPI size_t eina_binbuf_length_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API size_t eina_binbuf_length_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets a read-only slice of the buffer contents.
@@ -368,7 +368,7 @@ EAPI size_t eina_binbuf_length_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) E
*
* @since 1.19
*/
-EAPI Eina_Slice eina_binbuf_slice_get(const Eina_Binbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Slice eina_binbuf_slice_get(const Eina_Binbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Gets a read-write slice of the buffer contents.
@@ -382,7 +382,7 @@ EAPI Eina_Slice eina_binbuf_slice_get(const Eina_Binbuf *buf) EINA_WARN_UNUSED_R
*
* @since 1.19
*/
-EAPI Eina_Rw_Slice eina_binbuf_rw_slice_get(const Eina_Binbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Rw_Slice eina_binbuf_rw_slice_get(const Eina_Binbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Frees the buffer, returning its old contents.
@@ -393,7 +393,7 @@ EAPI Eina_Rw_Slice eina_binbuf_rw_slice_get(const Eina_Binbuf *buf) EINA_WARN_UN
*
* @since 1.19
*/
-EAPI unsigned char* eina_binbuf_release(Eina_Binbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API unsigned char* eina_binbuf_release(Eina_Binbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @}
diff --git a/src/lib/eina/eina_binbuf_template_c.x b/src/lib/eina/eina_binbuf_template_c.x
index ef6a58befd..b693c44f8d 100644
--- a/src/lib/eina/eina_binbuf_template_c.x
+++ b/src/lib/eina/eina_binbuf_template_c.x
@@ -57,7 +57,7 @@ _FUNC_EXPAND(shutdown)(void)
* API *
*============================================================================*/
-EAPI _STRBUF_STRUCT_NAME *
+EINA_API _STRBUF_STRUCT_NAME *
_FUNC_EXPAND(new)(void)
{
_STRBUF_STRUCT_NAME *buf = eina_strbuf_common_new(_STRBUF_CSIZE);
@@ -65,7 +65,7 @@ _FUNC_EXPAND(new)(void)
return buf;
}
-EAPI _STRBUF_STRUCT_NAME *
+EINA_API _STRBUF_STRUCT_NAME *
_FUNC_EXPAND(manage_new_length)(_STRBUF_DATA_TYPE *str, size_t length)
{
_STRBUF_STRUCT_NAME *buf =
@@ -74,7 +74,7 @@ _FUNC_EXPAND(manage_new_length)(_STRBUF_DATA_TYPE *str, size_t length)
return buf;
}
-EAPI _STRBUF_STRUCT_NAME *
+EINA_API _STRBUF_STRUCT_NAME *
_FUNC_EXPAND(manage_read_only_new_length)(const _STRBUF_DATA_TYPE *str, size_t length)
{
_STRBUF_STRUCT_NAME *buf =
@@ -83,7 +83,7 @@ _FUNC_EXPAND(manage_read_only_new_length)(const _STRBUF_DATA_TYPE *str, size_t l
return buf;
}
-EAPI void
+EINA_API void
_FUNC_EXPAND(free)(_STRBUF_STRUCT_NAME *buf)
{
if (!buf) return ;
@@ -93,14 +93,14 @@ _FUNC_EXPAND(free)(_STRBUF_STRUCT_NAME *buf)
eina_strbuf_common_free(buf);
}
-EAPI void
+EINA_API void
_FUNC_EXPAND(reset)(_STRBUF_STRUCT_NAME *buf)
{
EINA_MAGIC_CHECK_STRBUF(buf);
eina_strbuf_common_reset(_STRBUF_CSIZE, buf);
}
-EAPI Eina_Rw_Slice
+EINA_API Eina_Rw_Slice
_FUNC_EXPAND(expand)(_STRBUF_STRUCT_NAME *buf, size_t minimum_unused_space)
{
Eina_Rw_Slice ret = {.len = 0, .mem = NULL};
@@ -108,28 +108,28 @@ _FUNC_EXPAND(expand)(_STRBUF_STRUCT_NAME *buf, size_t minimum_unused_space)
return eina_strbuf_common_expand(_STRBUF_CSIZE, buf, minimum_unused_space);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(use)(_STRBUF_STRUCT_NAME *buf, size_t extra_bytes)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_use(buf, extra_bytes);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(append_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_append_length(_STRBUF_CSIZE, buf, (const void *) str, length);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(append_slice)(_STRBUF_STRUCT_NAME *buf, const Eina_Slice slice)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_append_length(_STRBUF_CSIZE, buf, slice.mem, slice.len);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(append_buffer)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_STRUCT_NAME *data)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
@@ -138,70 +138,70 @@ _FUNC_EXPAND(append_buffer)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_STRUCT_NAME
return eina_strbuf_common_append_length(_STRBUF_CSIZE, buf, (_STRBUF_DATA_TYPE *) eina_strbuf_common_string_get(data), eina_strbuf_common_length_get(data));
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(insert_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length, size_t pos)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_insert_length(_STRBUF_CSIZE, buf, (const void *) str, length, pos);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(insert_slice)(_STRBUF_STRUCT_NAME *buf, const Eina_Slice slice, size_t pos)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_insert_length(_STRBUF_CSIZE, buf, slice.mem, slice.len, pos);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(append_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_append_char(_STRBUF_CSIZE, buf, (const void *) &c);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(insert_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c, size_t pos)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_insert_char(_STRBUF_CSIZE, buf, (const void *) &c, pos);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(remove)(_STRBUF_STRUCT_NAME *buf, size_t start, size_t end)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_remove(_STRBUF_CSIZE, buf, start, end);
}
-EAPI const _STRBUF_DATA_TYPE *
+EINA_API const _STRBUF_DATA_TYPE *
_FUNC_EXPAND(string_get)(const _STRBUF_STRUCT_NAME *buf)
{
EINA_MAGIC_CHECK_STRBUF(buf, NULL);
return (const _STRBUF_DATA_TYPE *) eina_strbuf_common_string_get(buf);
}
-EAPI _STRBUF_DATA_TYPE *
+EINA_API _STRBUF_DATA_TYPE *
_FUNC_EXPAND(string_steal)(_STRBUF_STRUCT_NAME *buf)
{
EINA_MAGIC_CHECK_STRBUF(buf, NULL);
return (_STRBUF_DATA_TYPE *) eina_strbuf_common_string_steal(_STRBUF_CSIZE, buf);
}
-EAPI void
+EINA_API void
_FUNC_EXPAND(string_free)(_STRBUF_STRUCT_NAME *buf)
{
EINA_MAGIC_CHECK_STRBUF(buf);
eina_strbuf_common_string_free(_STRBUF_CSIZE, buf);
}
-EAPI size_t
+EINA_API size_t
_FUNC_EXPAND(length_get)(const _STRBUF_STRUCT_NAME *buf)
{
EINA_MAGIC_CHECK_STRBUF(buf, 0);
return eina_strbuf_common_length_get(buf);
}
-EAPI Eina_Slice
+EINA_API Eina_Slice
_FUNC_EXPAND(slice_get)(const _STRBUF_STRUCT_NAME *buf)
{
Eina_Slice ret = {.len = 0, .mem = NULL};
@@ -209,7 +209,7 @@ _FUNC_EXPAND(slice_get)(const _STRBUF_STRUCT_NAME *buf)
return eina_strbuf_common_slice_get(buf);
}
-EAPI Eina_Rw_Slice
+EINA_API Eina_Rw_Slice
_FUNC_EXPAND(rw_slice_get)(const _STRBUF_STRUCT_NAME *buf)
{
Eina_Rw_Slice ret = {.len = 0, .mem = NULL};
@@ -217,7 +217,7 @@ _FUNC_EXPAND(rw_slice_get)(const _STRBUF_STRUCT_NAME *buf)
return eina_strbuf_common_rw_slice_get(buf);
}
-EAPI _STRBUF_DATA_TYPE*
+EINA_API _STRBUF_DATA_TYPE*
_FUNC_EXPAND(release)(_STRBUF_STRUCT_NAME *buf)
{
_STRBUF_DATA_TYPE *result;
diff --git a/src/lib/eina/eina_binshare.c b/src/lib/eina/eina_binshare.c
index 65edf841a4..84d0aa5208 100644
--- a/src/lib/eina/eina_binshare.c
+++ b/src/lib/eina/eina_binshare.c
@@ -83,7 +83,7 @@ static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node";
*
* @see eina_init()
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_binshare_init(void)
{
Eina_Bool ret;
@@ -124,7 +124,7 @@ eina_binshare_init(void)
*
* @see eina_shutdown()
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_binshare_shutdown(void)
{
Eina_Bool ret;
@@ -144,7 +144,7 @@ eina_binshare_shutdown(void)
* API *
*============================================================================*/
-EAPI void
+EINA_API void
eina_binshare_del(const void *obj)
{
if (!obj)
@@ -154,7 +154,7 @@ eina_binshare_del(const void *obj)
CRI("EEEK trying to del non-shared binshare %p", obj);
}
-EAPI const void *
+EINA_API const void *
eina_binshare_add_length(const void *obj, unsigned int olen)
{
return eina_share_common_add_length(binshare_share,
@@ -163,19 +163,19 @@ eina_binshare_add_length(const void *obj, unsigned int olen)
0);
}
-EAPI const void *
+EINA_API const void *
eina_binshare_ref(const void *obj)
{
return eina_share_common_ref(binshare_share, obj);
}
-EAPI int
+EINA_API int
eina_binshare_length(const void *obj)
{
return eina_share_common_length(binshare_share, obj);
}
-EAPI void
+EINA_API void
eina_binshare_dump(void)
{
eina_share_common_dump(binshare_share, NULL, 0);
diff --git a/src/lib/eina/eina_binshare.h b/src/lib/eina/eina_binshare.h
index 6caee100b1..31ec3cd237 100644
--- a/src/lib/eina/eina_binshare.h
+++ b/src/lib/eina/eina_binshare.h
@@ -93,7 +93,7 @@
*
* @see eina_binshare_add()
*/
-EAPI const void *eina_binshare_add_length(const void *obj,
+EINA_API const void *eina_binshare_add_length(const void *obj,
unsigned int olen) EINA_WARN_UNUSED_RESULT;
/**
@@ -110,7 +110,7 @@ EAPI const void *eina_binshare_add_length(const void *obj,
*
* @note There is no unref since this is the work of eina_binshare_del().
*/
-EAPI const void *eina_binshare_ref(const void *obj);
+EINA_API const void *eina_binshare_ref(const void *obj);
/**
* @brief Notes that the given object has lost an instance.
@@ -125,7 +125,7 @@ EAPI const void *eina_binshare_ref(const void *obj);
* @warning If the given pointer is not shared, bad things happen, mostly a
* segmentation fault.
*/
-EAPI void eina_binshare_del(const void *obj);
+EINA_API void eina_binshare_del(const void *obj);
/**
* @brief Notes that the given object @b must be shared.
@@ -138,7 +138,7 @@ EAPI void eina_binshare_del(const void *obj);
* @warning If the given pointer is not shared, bad things happen, mostly a
* segmentation fault. If in doubt, try strlen().
*/
-EAPI int eina_binshare_length(const void *obj) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API int eina_binshare_length(const void *obj) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @brief Dumps the contents of share_common.
@@ -146,7 +146,7 @@ EAPI int eina_binshare_length(const void *obj) EINA_WARN_UNUSED_RESULT E
* @details This function dumps all the objects from share_common to stdout with a
* DDD: prefix per line and a memory usage summary.
*/
-EAPI void eina_binshare_dump(void);
+EINA_API void eina_binshare_dump(void);
/**
* @brief Retrieves an instance of a blob for use in a program.
diff --git a/src/lib/eina/eina_convert.c b/src/lib/eina/eina_convert.c
index f210d14d8a..422459c00c 100644
--- a/src/lib/eina/eina_convert.c
+++ b/src/lib/eina/eina_convert.c
@@ -39,6 +39,7 @@
#include "eina_safety_checks.h"
#include "eina_convert.h"
#include "eina_fp.h"
+#include "eina_util.h"
/*============================================================================*
* Local *
@@ -90,9 +91,9 @@ static inline void reverse(char s[], int length)
* @cond LOCAL
*/
-EAPI Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND = 0;
-EAPI Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND = 0;
-EAPI Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH = 0;
+EINA_API Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND = 0;
+EINA_API Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND = 0;
+EINA_API Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH = 0;
/**
* @endcond
@@ -149,7 +150,7 @@ eina_convert_shutdown(void)
* Come from the second edition of The C Programming Language ("K&R2") on page 64
*/
-EAPI int
+EINA_API int
eina_convert_itoa(int n, char *s)
{
int i = 0;
@@ -174,7 +175,7 @@ eina_convert_itoa(int n, char *s)
return i + r;
}
-EAPI int
+EINA_API int
eina_convert_xtoa(unsigned int n, char *s)
{
int i;
@@ -193,7 +194,7 @@ eina_convert_xtoa(unsigned int n, char *s)
return i;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_convert_atod(const char *src, int length, long long *m, long *e)
{
const char *str = src;
@@ -285,7 +286,7 @@ on_length_error:
return EINA_FALSE;
}
-EAPI int
+EINA_API int
eina_convert_dtoa(double d, char *des)
{
int length = 0;
@@ -349,7 +350,7 @@ eina_convert_dtoa(double d, char *des)
return length + eina_convert_itoa(p, des);
}
-EAPI int
+EINA_API int
eina_convert_fptoa(Eina_F32p32 fp, char *des)
{
int length = 0;
@@ -433,7 +434,7 @@ eina_convert_fptoa(Eina_F32p32 fp, char *des)
return length + eina_convert_itoa(p, des);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp)
{
long long m;
@@ -467,7 +468,7 @@ eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp)
* No hexadecimal form supported
* no sequence supported after NAN
*/
-EAPI double
+EINA_API double
eina_convert_strtod_c(const char *nptr, char **endptr)
{
const char *iter;
@@ -613,7 +614,7 @@ eina_convert_strtod_c(const char *nptr, char **endptr)
else if (*iter == 0)
goto on_success;
- if ((val == 2.2250738585072011) && ((minus_e * (int)expo_part) == -308))
+ if ((eina_dbl_exact(val, 2.2250738585072011)) && ((minus_e * (int)expo_part) == -308))
{
val *= 1.0e-308;
a = iter;
@@ -621,7 +622,7 @@ eina_convert_strtod_c(const char *nptr, char **endptr)
goto on_success;
}
- if ((val == 2.2250738585072012) && ((minus_e * (int)expo_part) <= -308))
+ if ((eina_dbl_exact(val, 2.2250738585072012)) && ((minus_e * (int)expo_part) <= -308))
{
val *= 1.0e-308;
a = iter;
diff --git a/src/lib/eina/eina_convert.h b/src/lib/eina/eina_convert.h
index 314cd4cf92..8c41ac74dd 100644
--- a/src/lib/eina/eina_convert.h
+++ b/src/lib/eina/eina_convert.h
@@ -158,9 +158,9 @@
* @{
*/
-EAPI extern Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND; /**< Not used, perhaps a placeholder? Defined as 0 in eina_convert.c*/
-EAPI extern Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND; /**< Not used, perhaps a placeholder? Defined as 0 in eina_convert.c*/
-EAPI extern Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH; /**< Not used, perhaps a placeholder? Defined as 0 in eina_convert.c*/
+EINA_API extern Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND; /**< Not used, perhaps a placeholder? Defined as 0 in eina_convert.c*/
+EINA_API extern Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND; /**< Not used, perhaps a placeholder? Defined as 0 in eina_convert.c*/
+EINA_API extern Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH; /**< Not used, perhaps a placeholder? Defined as 0 in eina_convert.c*/
/**
* @brief Converts an integer number to a string in decimal base.
@@ -177,7 +177,7 @@ EAPI extern Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH; /**< Not used, p
* The returned value is the length of the string, including the null
* terminated character.
*/
-EAPI int eina_convert_itoa(int n, char *s) EINA_ARG_NONNULL(2);
+EINA_API int eina_convert_itoa(int n, char *s) EINA_ARG_NONNULL(2);
/**
* @brief Converts an integer number to a string in hexadecimal base.
@@ -195,7 +195,7 @@ EAPI int eina_convert_itoa(int n, char *s) EINA_ARG_NONNULL(2);
* The returned value is the length of the string, including the nul
* terminated character.
*/
-EAPI int eina_convert_xtoa(unsigned int n, char *s) EINA_ARG_NONNULL(2);
+EINA_API int eina_convert_xtoa(unsigned int n, char *s) EINA_ARG_NONNULL(2);
/**
@@ -220,7 +220,7 @@ EAPI int eina_convert_xtoa(unsigned int n, char *s) EINA_ARG_NONNULL(2);
* The returned value is the length of the string, including the null
* character.
*/
-EAPI int eina_convert_dtoa(double d, char *des) EINA_ARG_NONNULL(2);
+EINA_API int eina_convert_dtoa(double d, char *des) EINA_ARG_NONNULL(2);
/**
* @brief Converts a string to a double.
@@ -257,7 +257,7 @@ EAPI int eina_convert_dtoa(double d, char *des) EINA_ARG_NONNULL(2);
* If the string is invalid #EINA_FALSE is returned, otherwise #EINA_TRUE is
* returned.
*/
-EAPI Eina_Bool eina_convert_atod(const char *src,
+EINA_API Eina_Bool eina_convert_atod(const char *src,
int length,
long long *m,
long *e) EINA_ARG_NONNULL(1, 3, 4);
@@ -289,7 +289,7 @@ EAPI Eina_Bool eina_convert_atod(const char *src,
* implements the frexp() function for fixed point numbers and does
* some optimization.
*/
-EAPI int eina_convert_fptoa(Eina_F32p32 fp,
+EINA_API int eina_convert_fptoa(Eina_F32p32 fp,
char *des) EINA_ARG_NONNULL(2);
/**
@@ -329,7 +329,7 @@ EAPI int eina_convert_fptoa(Eina_F32p32 fp,
* @note The code uses eina_convert_atod() and do the correct bit
* shift to compute the fixed point number.
*/
-EAPI Eina_Bool eina_convert_atofp(const char *src,
+EINA_API Eina_Bool eina_convert_atofp(const char *src,
int length,
Eina_F32p32 *fp) EINA_ARG_NONNULL(1, 3);
@@ -347,7 +347,7 @@ EAPI Eina_Bool eina_convert_atofp(const char *src,
* without locale-dependency, this function can replace strtod.
* For more information, please refer documents of strtod, strtod_l.
*/
-EAPI double eina_convert_strtod_c(const char *nptr, char **endptr);
+EINA_API double eina_convert_strtod_c(const char *nptr, char **endptr);
/**
* @}
diff --git a/src/lib/eina/eina_counter.c b/src/lib/eina/eina_counter.c
index 1143c566fa..dc89f28f33 100644
--- a/src/lib/eina/eina_counter.c
+++ b/src/lib/eina/eina_counter.c
@@ -113,7 +113,7 @@ _eina_counter_asiprintf(char *base, int *position, const char *format, ...)
* API *
*============================================================================*/
-EAPI Eina_Counter *
+EINA_API Eina_Counter *
eina_counter_new(const char *name)
{
Eina_Counter *counter;
@@ -131,7 +131,7 @@ eina_counter_new(const char *name)
return counter;
}
-EAPI void
+EINA_API void
eina_counter_free(Eina_Counter *counter)
{
EINA_SAFETY_ON_NULL_RETURN(counter);
@@ -147,7 +147,7 @@ eina_counter_free(Eina_Counter *counter)
free(counter);
}
-EAPI void
+EINA_API void
eina_counter_start(Eina_Counter *counter)
{
Eina_Clock *clk;
@@ -165,7 +165,7 @@ eina_counter_start(Eina_Counter *counter)
clk->start = tp;
}
-EAPI void
+EINA_API void
eina_counter_stop(Eina_Counter *counter, int specimen)
{
Eina_Clock *clk;
@@ -185,7 +185,7 @@ eina_counter_stop(Eina_Counter *counter, int specimen)
clk->valid = EINA_TRUE;
}
-EAPI char *
+EINA_API char *
eina_counter_dump(Eina_Counter *counter)
{
Eina_Clock *clk;
diff --git a/src/lib/eina/eina_counter.h b/src/lib/eina/eina_counter.h
index 6cb15b982b..f498942d2e 100644
--- a/src/lib/eina/eina_counter.h
+++ b/src/lib/eina/eina_counter.h
@@ -124,7 +124,7 @@ typedef struct _Eina_Counter Eina_Counter;
* @note When the new counter is not needed anymore, use eina_counter_free() to
* free the allocated memory.
*/
-EAPI Eina_Counter *eina_counter_new(const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Counter *eina_counter_new(const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Deletes a counter.
@@ -135,7 +135,7 @@ EAPI Eina_Counter *eina_counter_new(const char *name) EINA_WARN_UNUSED_RESULT EI
* @param[in] counter The counter to delete
*
*/
-EAPI void eina_counter_free(Eina_Counter *counter) EINA_ARG_NONNULL(1);
+EINA_API void eina_counter_free(Eina_Counter *counter) EINA_ARG_NONNULL(1);
/**
* @brief Starts the time count.
@@ -152,7 +152,7 @@ EAPI void eina_counter_free(Eina_Counter *counter) EINA_ARG_NONNULL(1);
* @note To stop the timing, eina_counter_stop() must be called with the
* same counter.
*/
-EAPI void eina_counter_start(Eina_Counter *counter) EINA_ARG_NONNULL(1);
+EINA_API void eina_counter_start(Eina_Counter *counter) EINA_ARG_NONNULL(1);
/**
* @brief Stops the time count.
@@ -165,7 +165,7 @@ EAPI void eina_counter_start(Eina_Counter *counter) EINA_ARG_NONNULL(1)
* @param[in] specimen The number of the test
*
*/
-EAPI void eina_counter_stop(Eina_Counter *counter,
+EINA_API void eina_counter_stop(Eina_Counter *counter,
int specimen) EINA_ARG_NONNULL(1);
/**
@@ -185,7 +185,7 @@ EAPI void eina_counter_stop(Eina_Counter *counter,
*
* @note The unit of time is nanoseconds.
*/
-EAPI char *eina_counter_dump(Eina_Counter *counter) EINA_ARG_NONNULL(1);
+EINA_API char *eina_counter_dump(Eina_Counter *counter) EINA_ARG_NONNULL(1);
/**
* @}
diff --git a/src/lib/eina/eina_cow.c b/src/lib/eina/eina_cow.c
index 8737ff8e49..79c594a3f9 100644
--- a/src/lib/eina/eina_cow.c
+++ b/src/lib/eina/eina_cow.c
@@ -326,7 +326,7 @@ eina_cow_shutdown(void)
return EINA_TRUE;
}
-EAPI Eina_Cow *
+EINA_API Eina_Cow *
eina_cow_add(const char *name, unsigned int struct_size, unsigned int step, const void *default_value, Eina_Bool gc)
{
const char *choice, *tmp;
@@ -390,7 +390,7 @@ eina_cow_add(const char *name, unsigned int struct_size, unsigned int step, cons
return NULL;
}
-EAPI void
+EINA_API void
eina_cow_del(Eina_Cow *cow)
{
if (!cow) return;
@@ -405,7 +405,7 @@ eina_cow_del(Eina_Cow *cow)
free(cow);
}
-EAPI const Eina_Cow_Data *
+EINA_API const Eina_Cow_Data *
eina_cow_alloc(Eina_Cow *cow)
{
#ifdef EINA_COW_MAGIC_ON
@@ -415,7 +415,7 @@ eina_cow_alloc(Eina_Cow *cow)
return cow->default_value;
}
-EAPI void
+EINA_API void
eina_cow_free(Eina_Cow *cow, const Eina_Cow_Data **data)
{
Eina_Cow_Ptr *ref;
@@ -451,7 +451,7 @@ eina_cow_free(Eina_Cow *cow, const Eina_Cow_Data **data)
eina_mempool_free(cow->pool, (void*) ref);
}
-EAPI void *
+EINA_API void *
eina_cow_write(Eina_Cow *cow,
const Eina_Cow_Data * const *data)
{
@@ -535,7 +535,7 @@ eina_cow_write(Eina_Cow *cow,
return (void *) *data;
}
-EAPI void
+EINA_API void
eina_cow_done(Eina_Cow *cow,
const Eina_Cow_Data * const * dst,
const void *data,
@@ -569,7 +569,7 @@ eina_cow_done(Eina_Cow *cow,
_eina_cow_togc_add(cow, ref, (const Eina_Cow_Data **) dst);
}
-EAPI void
+EINA_API void
eina_cow_memcpy(Eina_Cow *cow,
const Eina_Cow_Data * const *dst,
const Eina_Cow_Data *src)
@@ -603,7 +603,7 @@ eina_cow_memcpy(Eina_Cow *cow,
*((const void**)dst) = src;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_cow_gc(Eina_Cow *cow)
{
Eina_Cow_GC *gc;
diff --git a/src/lib/eina/eina_cow.h b/src/lib/eina/eina_cow.h
index 4836d3e870..f5a6473978 100644
--- a/src/lib/eina/eina_cow.h
+++ b/src/lib/eina/eina_cow.h
@@ -61,14 +61,14 @@ typedef void Eina_Cow_Data;
* @param[in] gc Is it possible to run garbage collection on this pool.
* @return A valid new Eina_Cow, or @c NULL on error.
*/
-EAPI Eina_Cow *eina_cow_add(const char *name, unsigned int struct_size, unsigned int step, const void *default_value, Eina_Bool gc) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Cow *eina_cow_add(const char *name, unsigned int struct_size, unsigned int step, const void *default_value, Eina_Bool gc) EINA_WARN_UNUSED_RESULT;
/**
* @brief Destroys an Eina_Cow pool and all the allocated memory.
*
* @param[in] cow The pool to destroy
*/
-EAPI void eina_cow_del(Eina_Cow *cow);
+EINA_API void eina_cow_del(Eina_Cow *cow);
/**
* @brief Returns an initialized pointer from the pool.
@@ -76,7 +76,7 @@ EAPI void eina_cow_del(Eina_Cow *cow);
* @param[in] cow The pool to take things from.
* @return A pointer to the new pool instance
*/
-EAPI const Eina_Cow_Data *eina_cow_alloc(Eina_Cow *cow) EINA_WARN_UNUSED_RESULT;
+EINA_API const Eina_Cow_Data *eina_cow_alloc(Eina_Cow *cow) EINA_WARN_UNUSED_RESULT;
/**
* @brief Frees a pointer from the pool.
@@ -87,7 +87,7 @@ EAPI const Eina_Cow_Data *eina_cow_alloc(Eina_Cow *cow) EINA_WARN_UNUSED_RESULT;
* @note To simplify the caller code *data will point to the default
* read only state after the call to this function.
*/
-EAPI void eina_cow_free(Eina_Cow *cow, const Eina_Cow_Data **data);
+EINA_API void eina_cow_free(Eina_Cow *cow, const Eina_Cow_Data **data);
/**
* @brief Gets a writeable pointer from a const pointer.
@@ -97,7 +97,7 @@ EAPI void eina_cow_free(Eina_Cow *cow, const Eina_Cow_Data **data);
*
* @note This function is not thread safe.
*/
-EAPI void *eina_cow_write(Eina_Cow *cow,
+EINA_API void *eina_cow_write(Eina_Cow *cow,
const Eina_Cow_Data * const *src) EINA_WARN_UNUSED_RESULT;
/**
@@ -110,7 +110,7 @@ EAPI void *eina_cow_write(Eina_Cow *cow,
*
* @note This function is not thread safe.
*/
-EAPI void eina_cow_done(Eina_Cow *cow,
+EINA_API void eina_cow_done(Eina_Cow *cow,
const Eina_Cow_Data * const *dst,
const void *data,
Eina_Bool needed_gc);
@@ -121,7 +121,7 @@ EAPI void eina_cow_done(Eina_Cow *cow,
* @param[in] dst The destination to update.
* @param[in] src The source of information to copy.
*/
-EAPI void eina_cow_memcpy(Eina_Cow *cow,
+EINA_API void eina_cow_memcpy(Eina_Cow *cow,
const Eina_Cow_Data * const *dst,
const Eina_Cow_Data *src);
@@ -135,7 +135,7 @@ EAPI void eina_cow_memcpy(Eina_Cow *cow,
* It does run a hash function on all possible common structures trying to
* find the one that matches and merge them into one pointer.
*/
-EAPI Eina_Bool eina_cow_gc(Eina_Cow *cow);
+EINA_API Eina_Bool eina_cow_gc(Eina_Cow *cow);
/**
* @def EINA_COW_WRITE_BEGIN
diff --git a/src/lib/eina/eina_cpu.c b/src/lib/eina/eina_cpu.c
index c61297803b..119b8d098d 100644
--- a/src/lib/eina/eina_cpu.c
+++ b/src/lib/eina/eina_cpu.c
@@ -165,7 +165,7 @@ _ppc_cpu_features(Eina_Cpu_Features *features)
/* FIXME the features checks should be called when this function is called?
* or make it static by doing eina_cpu_init() and return a local var
*/
-EAPI Eina_Cpu_Features eina_cpu_features = 0;
+EINA_API Eina_Cpu_Features eina_cpu_features = 0;
Eina_Bool
eina_cpu_init(void)
@@ -192,7 +192,7 @@ eina_cpu_shutdown(void)
*
* @return
*/
-EAPI Eina_Cpu_Features eina_cpu_features_get(void)
+EINA_API Eina_Cpu_Features eina_cpu_features_get(void)
{
return eina_cpu_features;
}
@@ -302,13 +302,13 @@ _eina_page_size(void)
}
}
-EAPI int eina_cpu_page_size(void)
+EINA_API int eina_cpu_page_size(void)
{
if (_page_size == 0) _eina_page_size();
return _page_size;
}
-EAPI int eina_cpu_count(void)
+EINA_API int eina_cpu_count(void)
{
return _cpu_count;
}
diff --git a/src/lib/eina/eina_cpu.h b/src/lib/eina/eina_cpu.h
index 35172a7a3b..c17d46e22b 100644
--- a/src/lib/eina/eina_cpu.h
+++ b/src/lib/eina/eina_cpu.h
@@ -45,18 +45,18 @@
*/
typedef enum _Eina_Cpu_Features
{
- EINA_CPU_MMX = 0x00000001,
- EINA_CPU_SSE = 0x00000002,
- EINA_CPU_SSE2 = 0x00000004,
- EINA_CPU_SSE3 = 0x00000008,
+ EINA_CPU_MMX = 0x00000001, /**< Multimedia Extensions (Intel) */
+ EINA_CPU_SSE = 0x00000002, /**< Streaming SIMD Extensions (Intel) */
+ EINA_CPU_SSE2 = 0x00000004, /**< Streaming SIMD Extensions 2 (Intel) */
+ EINA_CPU_SSE3 = 0x00000008, /**< Streaming SIMD Extensions 3 (Intel) */
/* TODO 3DNow! */
- EINA_CPU_ALTIVEC = 0x00000010,
- EINA_CPU_VIS = 0x00000020,
- EINA_CPU_NEON = 0x00000040,
- EINA_CPU_SSSE3 = 0x00000080,
- EINA_CPU_SSE41 = 0x00000100,
- EINA_CPU_SSE42 = 0x00000200,
- EINA_CPU_SVE = 0x00000400
+ EINA_CPU_ALTIVEC = 0x00000010, /**< Single-precision floating point and integer SIMD (PowerPC) */
+ EINA_CPU_VIS = 0x00000020, /**< Visual Instruction Set (Spark) */
+ EINA_CPU_NEON = 0x00000040, /**< Advanced SIMD Extension (ARM) */
+ EINA_CPU_SSSE3 = 0x00000080, /**< Supplemental Streaming SIMD Extension 3 (Intel) */
+ EINA_CPU_SSE41 = 0x00000100, /**< Streaming SIMD Extension 4.1 (Intel) */
+ EINA_CPU_SSE42 = 0x00000200, /**< Streaming SIMD Extension 4.2 (Intel) */
+ EINA_CPU_SVE = 0x00000400 /**< Scalable Vector Extension (ARM) */
} Eina_Cpu_Features;
/**
@@ -64,14 +64,14 @@ typedef enum _Eina_Cpu_Features
*
* @return the current cpu features
*/
-EAPI extern Eina_Cpu_Features eina_cpu_features;
+EINA_API extern Eina_Cpu_Features eina_cpu_features;
/**
* @brief Cpu features accessor.
*
* @return the current cpu features
*/
-EAPI Eina_Cpu_Features eina_cpu_features_get(void);
+EINA_API Eina_Cpu_Features eina_cpu_features_get(void);
/**
* @brief Gets the current number of processors.
@@ -79,7 +79,7 @@ EAPI Eina_Cpu_Features eina_cpu_features_get(void);
* @return The number of processors that are online, that
* is available when the function is called.
*/
-EAPI int eina_cpu_count(void);
+EINA_API int eina_cpu_count(void);
/**
* @brief Gets the current virtual page size.
@@ -88,13 +88,13 @@ EAPI int eina_cpu_count(void);
* allocation performed by the operating system on behalf of the program, and
* for transfers between the main memory and any other auxiliary store.
*/
-EAPI int eina_cpu_page_size(void);
+EINA_API int eina_cpu_page_size(void);
/**
* @brief Reverses the byte order of a 16-bit (destination) register.
*
* @param[in] x The binary word to swap
- * @return A byte order swapped 16-bit integer.
+ * @return A byte order swapped 16-bit integer.
*
* On big endian systems, the number is converted to little endian byte order.
* On little endian systems, the number is converted to big endian byte order.
@@ -105,7 +105,7 @@ static inline unsigned short eina_swap16(unsigned short x);
* @brief Reverses the byte order of a 32-bit (destination) register.
*
* @param[in] x The binary word to swap
- * @return A byte order swapped 32-bit integer.
+ * @return A byte order swapped 32-bit integer.
*
* On big endian systems, the number is converted to little endian byte order.
* On little endian systems, the number is converted to big endian byte order.
@@ -136,10 +136,18 @@ static inline unsigned int eina_ntohl(unsigned int net);
static inline unsigned long long eina_ntohll(unsigned long long net);
#ifndef MIN
+/** Returns the minimum of the two parameters
+ * @warning Beware of side effects, since the returned parameter is evaluated
+ * twice.
+ */
# define MIN(x, y) (((x) > (y)) ? (y) : (x))
#endif
#ifndef MAX
+/** Returns the maximum of the two parameters
+ * @warning Beware of side effects, since the returned parameter is evaluated
+ * twice.
+ */
# define MAX(x, y) (((x) > (y)) ? (x) : (y))
#endif
diff --git a/src/lib/eina/eina_crc.c b/src/lib/eina/eina_crc.c
index 69d0b2341c..616d07931c 100644
--- a/src/lib/eina/eina_crc.c
+++ b/src/lib/eina/eina_crc.c
@@ -287,7 +287,7 @@ static const unsigned int table[8][256] =
}
};
-EAPI unsigned int
+EINA_API unsigned int
_eina_crc(const char *data, int len, unsigned int seed, Eina_Bool start_stream)
{
unsigned int crc;
diff --git a/src/lib/eina/eina_debug.c b/src/lib/eina/eina_debug.c
index c811c5fe2a..00e90ab995 100644
--- a/src/lib/eina/eina_debug.c
+++ b/src/lib/eina/eina_debug.c
@@ -142,7 +142,7 @@ static void _opcodes_register_all(Eina_Debug_Session *session);
#endif
static void _thread_start(Eina_Debug_Session *session);
-EAPI int
+EINA_API int
eina_debug_session_send(Eina_Debug_Session *session, int dest, int op, void *data, int size)
{
Eina_Debug_Packet_Header hdr;
@@ -262,13 +262,13 @@ end:
}
#endif
-EAPI void
+EINA_API void
eina_debug_disable()
{
_debug_disabled = EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_debug_session_terminate(Eina_Debug_Session *session)
{
/* Close fd here so the thread terminates its own session by itself */
@@ -287,7 +287,7 @@ eina_debug_session_terminate(Eina_Debug_Session *session)
}
}
-EAPI void
+EINA_API void
eina_debug_session_dispatch_override(Eina_Debug_Session *session, Eina_Debug_Dispatch_Cb disp_cb)
{
if (!session) return;
@@ -295,7 +295,7 @@ eina_debug_session_dispatch_override(Eina_Debug_Session *session, Eina_Debug_Dis
session->dispatch_cb = disp_cb;
}
-EAPI Eina_Debug_Dispatch_Cb
+EINA_API Eina_Debug_Dispatch_Cb
eina_debug_session_dispatch_get(Eina_Debug_Session *session)
{
if (session) return session->dispatch_cb;
@@ -462,7 +462,7 @@ _session_create(int fd)
return session;
}
-EAPI Eina_Debug_Session *
+EINA_API Eina_Debug_Session *
eina_debug_remote_connect(int port)
{
int fd;
@@ -492,7 +492,7 @@ err:
return NULL;
}
-EAPI Eina_Debug_Session *
+EINA_API Eina_Debug_Session *
eina_debug_local_connect(Eina_Bool is_master)
{
#ifndef _WIN32
@@ -641,7 +641,7 @@ _thread_start(Eina_Debug_Session *session)
* - Pointer to ops: returned in the response to determine which opcodes have been added
* - List of opcode names separated by \0
*/
-EAPI void
+EINA_API void
eina_debug_opcodes_register(Eina_Debug_Session *session, const Eina_Debug_Opcode ops[],
Eina_Debug_Opcode_Status_Cb status_cb, void *data)
{
@@ -663,7 +663,7 @@ eina_debug_opcodes_register(Eina_Debug_Session *session, const Eina_Debug_Opcode
_opcodes_registration_send(session, info);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_debug_dispatch(Eina_Debug_Session *session, void *buffer)
{
Eina_Debug_Packet_Header *hdr = buffer;
@@ -688,13 +688,13 @@ eina_debug_dispatch(Eina_Debug_Session *session, void *buffer)
return EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_debug_session_data_set(Eina_Debug_Session *session, void *data)
{
if (session) session->data = data;
}
-EAPI void *
+EINA_API void *
eina_debug_session_data_get(Eina_Debug_Session *session)
{
if (session) return session->data;
@@ -750,7 +750,7 @@ eina_debug_shutdown(void)
return EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_debug_fork_reset(void)
{
extern Eina_Bool fork_resetting;
diff --git a/src/lib/eina/eina_debug.h b/src/lib/eina/eina_debug.h
index 0bc6e5f406..a19d04d83a 100644
--- a/src/lib/eina/eina_debug.h
+++ b/src/lib/eina/eina_debug.h
@@ -108,7 +108,7 @@ typedef Eina_Bool (*Eina_Debug_Timer_Cb)(void *);
typedef struct _Eina_Debug_Timer Eina_Debug_Timer;
/**
- * @typedef Eina_Debug_Packet_Header
+ * @struct Eina_Debug_Packet_Header
*
* Header of Eina Debug packet
*/
@@ -143,7 +143,7 @@ typedef struct
}
/**
- * @typedef Eina_Debug_Opcode
+ * @struct Eina_Debug_Opcode
*
* Structure to describe information for an opcode. It is used to register new
* opcodes.
@@ -162,7 +162,7 @@ typedef struct
* of them.
* Need to be invoked before eina_init. Otherwise it won't have any effect.
*/
-EAPI void eina_debug_disable(void);
+EINA_API void eina_debug_disable(void);
/**
* @brief Connect to the local daemon
@@ -171,7 +171,7 @@ EAPI void eina_debug_disable(void);
*
* @return The session on success or NULL otherwise.
*/
-EAPI Eina_Debug_Session *eina_debug_local_connect(Eina_Bool is_master);
+EINA_API Eina_Debug_Session *eina_debug_local_connect(Eina_Bool is_master);
/**
* @brief Connect to remote daemon
@@ -182,14 +182,14 @@ EAPI Eina_Debug_Session *eina_debug_local_connect(Eina_Bool is_master);
*
* @return The session on success or NULL otherwise.
*/
-EAPI Eina_Debug_Session *eina_debug_remote_connect(int port);
+EINA_API Eina_Debug_Session *eina_debug_remote_connect(int port);
/**
* @brief Terminate the session
*
* @param[in,out] session the session to terminate
*/
-EAPI void eina_debug_session_terminate(Eina_Debug_Session *session);
+EINA_API void eina_debug_session_terminate(Eina_Debug_Session *session);
/**
* @brief Override the dispatcher of a specific session
@@ -201,7 +201,7 @@ EAPI void eina_debug_session_terminate(Eina_Debug_Session *session);
* @param[in,out] session the session
* @param[in] disp_cb the new dispatcher for the given session
*/
-EAPI void eina_debug_session_dispatch_override(Eina_Debug_Session *session, Eina_Debug_Dispatch_Cb disp_cb);
+EINA_API void eina_debug_session_dispatch_override(Eina_Debug_Session *session, Eina_Debug_Dispatch_Cb disp_cb);
/**
* @brief Get the dispatcher of a specific session
@@ -210,7 +210,7 @@ EAPI void eina_debug_session_dispatch_override(Eina_Debug_Session *session, Eina
*
* @return The session dispatcher.
*/
-EAPI Eina_Debug_Dispatch_Cb eina_debug_session_dispatch_get(Eina_Debug_Session *session);
+EINA_API Eina_Debug_Dispatch_Cb eina_debug_session_dispatch_get(Eina_Debug_Session *session);
/**
* @brief Dispatch a given packet according to its header.
@@ -224,7 +224,7 @@ EAPI Eina_Debug_Dispatch_Cb eina_debug_session_dispatch_get(Eina_Debug_Session *
*
* @return True on success, false if the connection seems compromised.
*/
-EAPI Eina_Bool eina_debug_dispatch(Eina_Debug_Session *session, void *buffer);
+EINA_API Eina_Bool eina_debug_dispatch(Eina_Debug_Session *session, void *buffer);
/**
* @brief Set data to a session
@@ -232,7 +232,7 @@ EAPI Eina_Bool eina_debug_dispatch(Eina_Debug_Session *session, void *buffer);
* @param[in,out] session the session
* @param[in] data the data to set
*/
-EAPI void eina_debug_session_data_set(Eina_Debug_Session *session, void *data);
+EINA_API void eina_debug_session_data_set(Eina_Debug_Session *session, void *data);
/**
* @brief Get the data attached to a session
@@ -241,7 +241,7 @@ EAPI void eina_debug_session_data_set(Eina_Debug_Session *session, void *data);
*
* @return The data of the session.
*/
-EAPI void *eina_debug_session_data_get(Eina_Debug_Session *session);
+EINA_API void *eina_debug_session_data_get(Eina_Debug_Session *session);
/**
* @brief Register opcodes to a session
@@ -257,7 +257,7 @@ EAPI void *eina_debug_session_data_get(Eina_Debug_Session *session);
* @param[in] status_cb a function to call when the opcodes are received
* @param[in] status_data the data to give to status_cb
*/
-EAPI void eina_debug_opcodes_register(Eina_Debug_Session *session,
+EINA_API void eina_debug_opcodes_register(Eina_Debug_Session *session,
const Eina_Debug_Opcode ops[],
Eina_Debug_Opcode_Status_Cb status_cb, void *status_data);
@@ -274,7 +274,7 @@ EAPI void eina_debug_opcodes_register(Eina_Debug_Session *session,
*
* @return The number of sent bytes.
*/
-EAPI int eina_debug_session_send(Eina_Debug_Session *session, int dest_id, int op, void *data, int size);
+EINA_API int eina_debug_session_send(Eina_Debug_Session *session, int dest_id, int op, void *data, int size);
/**
* @brief Add a timer
@@ -285,7 +285,7 @@ EAPI int eina_debug_session_send(Eina_Debug_Session *session, int dest_id, int o
*
* @return The timer handle, NULL on error.
*/
-EAPI Eina_Debug_Timer *eina_debug_timer_add(unsigned int timeout_ms, Eina_Debug_Timer_Cb cb, void *data);
+EINA_API Eina_Debug_Timer *eina_debug_timer_add(unsigned int timeout_ms, Eina_Debug_Timer_Cb cb, void *data);
/**
* @brief Delete a timer
@@ -295,7 +295,7 @@ EAPI Eina_Debug_Timer *eina_debug_timer_add(unsigned int timeout_ms, Eina_Debug_
* If the timer reaches the end and has not be renewed, trying to delete it will lead to a crash, as
* it has already been deleted internally.
*/
-EAPI void eina_debug_timer_del(Eina_Debug_Timer *timer);
+EINA_API void eina_debug_timer_del(Eina_Debug_Timer *timer);
/**
* @brief Reset the eina debug system after forking
@@ -303,7 +303,7 @@ EAPI void eina_debug_timer_del(Eina_Debug_Timer *timer);
* Call this any time the application forks
* @since 1.21
* */
-EAPI void eina_debug_fork_reset(void);
+EINA_API void eina_debug_fork_reset(void);
/**
* @}
*/
diff --git a/src/lib/eina/eina_debug_bt.c b/src/lib/eina/eina_debug_bt.c
index a2510e9123..69e5c608fd 100644
--- a/src/lib/eina/eina_debug_bt.c
+++ b/src/lib/eina/eina_debug_bt.c
@@ -34,6 +34,7 @@
#include "eina_debug.h"
#include "eina_debug_private.h"
+#include "eina_util.h"
#ifndef _WIN32
# include <signal.h>
@@ -49,7 +50,7 @@
// broken on OSX in that a HUP signal will maybe cause a crash... but compiling
// with -pg would have guaranteed always caused a crash before anyway.
// given OSX only supports "old-style" signals like:
-//
+//
// #define SIGHUP 1 /* hangup */
// #define SIGINT 2 /* interrupt */
// #define SIGQUIT 3 /* quit */
@@ -90,7 +91,7 @@
// #endif
// #define SIGUSR1 30 /* user defined signal 1 */
// #define SIGUSR2 31 /* user defined signal 2 */
-//
+//
// (excerpt from OSX's signal.h - found at:
// http://github.com/st3fan/osx-10.9/blob/master/xnu-2422.1.72/bsd/sys/signal.h
// pasting here due to how difficult it was to find a signal list for OSX)
@@ -307,7 +308,7 @@ _trace_cb(void *data EINA_UNUSED)
static int bts = 0;
int i;
- if (!_trace_t0) _trace_t0 = get_time();
+ if (!EINA_DBL_NONZERO(_trace_t0)) _trace_t0 = get_time();
// take a lock on grabbing thread debug info like backtraces
eina_spinlock_take(&_eina_debug_thread_lock);
diff --git a/src/lib/eina/eina_debug_private.h b/src/lib/eina/eina_debug_private.h
index a635c2072d..dbe4df771a 100644
--- a/src/lib/eina/eina_debug_private.h
+++ b/src/lib/eina/eina_debug_private.h
@@ -12,8 +12,8 @@
#define REMOTE_SERVER_PORT 6666
#ifdef DEBUGON
-# define e_debug(fmt, args...) fprintf(stderr, "%d:"__FILE__":%s/%d : " fmt "\n", getpid(), __FUNCTION__, __LINE__, ##args)
-# define e_debug_begin(fmt, args...) fprintf(stderr, "%d:"__FILE__":%s/%d : " fmt "", getpid(), __FUNCTION__, __LINE__, ##args)
+# define e_debug(fmt, args...) fprintf(stderr, "%d:"__FILE__":%s/%d : " fmt "\n", getpid(), __func__, __LINE__, ##args)
+# define e_debug_begin(fmt, args...) fprintf(stderr, "%d:"__FILE__":%s/%d : " fmt "", getpid(), __func__, __LINE__, ##args)
# define e_debug_continue(fmt, args...) fprintf(stderr, fmt, ##args)
# define e_debug_end() fprintf(stderr, "\n")
#else
diff --git a/src/lib/eina/eina_debug_timer.c b/src/lib/eina/eina_debug_timer.c
index 8d03c0e57b..07cf6b1ef4 100644
--- a/src/lib/eina/eina_debug_timer.c
+++ b/src/lib/eina/eina_debug_timer.c
@@ -148,7 +148,7 @@ _monitor(void *_data EINA_UNUSED)
return NULL;
}
-EAPI Eina_Debug_Timer *
+EINA_API Eina_Debug_Timer *
eina_debug_timer_add(unsigned int timeout_ms, Eina_Debug_Timer_Cb cb, void *data)
{
if (!cb || !timeout_ms) return NULL;
@@ -193,7 +193,7 @@ eina_debug_timer_add(unsigned int timeout_ms, Eina_Debug_Timer_Cb cb, void *data
return t;
}
-EAPI void
+EINA_API void
eina_debug_timer_del(Eina_Debug_Timer *t)
{
eina_spinlock_take(&_lock);
diff --git a/src/lib/eina/eina_error.c b/src/lib/eina/eina_error.c
index 7922933e59..43851728e5 100644
--- a/src/lib/eina/eina_error.c
+++ b/src/lib/eina/eina_error.c
@@ -115,7 +115,13 @@ _eina_error_msg_alloc(void)
/* Windows has strerror_s(), similar to POSIX strerror_r() */
static inline int strerror_r(int errnum, char *buf, size_t buflen)
{
- return strerror_s(buf, buflen, errnum);
+ int ret;
+
+ ret = strerror_s(buf, buflen, errnum);
+ if (strcmp(buf, "Unknown error") == 0)
+ snprintf(buf, buflen, "Unknown error %d", errnum);
+
+ return ret;
}
#endif
@@ -132,7 +138,7 @@ static inline int strerror_r(int errnum, char *buf, size_t buflen)
* @cond LOCAL
*/
-EAPI Eina_Error EINA_ERROR_OUT_OF_MEMORY = ENOMEM;
+EINA_API Eina_Error EINA_ERROR_OUT_OF_MEMORY = ENOMEM;
/**
* @endcond
@@ -219,7 +225,7 @@ eina_error_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_Error
+EINA_API Eina_Error
eina_error_msg_register(const char *msg)
{
Eina_Error_Message *eem;
@@ -241,7 +247,7 @@ eina_error_msg_register(const char *msg)
return EINA_ERROR_FROM_INDEX(_eina_errors_count); /* identifier = index + 1 (== _count). */
}
-EAPI Eina_Error
+EINA_API Eina_Error
eina_error_msg_static_register(const char *msg)
{
Eina_Error_Message *eem;
@@ -257,7 +263,7 @@ eina_error_msg_static_register(const char *msg)
return EINA_ERROR_FROM_INDEX(_eina_errors_count); /* identifier = index + 1 (== _count). */
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_error_msg_modify(Eina_Error error, const char *msg)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, EINA_FALSE);
@@ -285,7 +291,7 @@ eina_error_msg_modify(Eina_Error error, const char *msg)
return EINA_TRUE;
}
-EAPI const char *
+EINA_API const char *
eina_error_msg_get(Eina_Error error)
{
if (!EINA_ERROR_REGISTERED_CHECK(error))
@@ -379,7 +385,7 @@ eina_error_msg_get(Eina_Error error)
return _eina_errors[error - 1].string;
}
-EAPI Eina_Error
+EINA_API Eina_Error
eina_error_get(void)
{
if (eina_main_loop_is())
@@ -388,7 +394,7 @@ eina_error_get(void)
return (Eina_Error)(uintptr_t) eina_tls_get(_eina_last_key);
}
-EAPI void
+EINA_API void
eina_error_set(Eina_Error err)
{
if (eina_main_loop_is())
@@ -397,7 +403,7 @@ eina_error_set(Eina_Error err)
eina_tls_set(_eina_last_key, (void*)(uintptr_t) err);
}
-EAPI Eina_Error
+EINA_API Eina_Error
eina_error_find(const char *msg)
{
size_t i;
diff --git a/src/lib/eina/eina_error.h b/src/lib/eina/eina_error.h
index c21cb7bc7e..3203924515 100644
--- a/src/lib/eina/eina_error.h
+++ b/src/lib/eina/eina_error.h
@@ -46,6 +46,7 @@
* Here is an example for use:
*
* @include eina_error_01.c
+ * @example eina_error_01.c
*
* Of course, instead of printf(), eina_log_print() can be used to
* have beautiful error messages.
@@ -89,6 +90,15 @@
typedef int Eina_Error;
/**
+ * @typedef Eina_Success_Flag
+ * @brief A flag indicating a function completed succesfully.
+ *
+ * Errors are reported with a EINA_FALSE value for Eina_Success_Flag
+ * return and success with a EINA_TRUE.
+ */
+typedef Eina_Bool Eina_Success_Flag;
+
+/**
* @def EINA_ERROR_NO_ERROR
* @brief No error reported.
*
@@ -98,12 +108,12 @@ typedef int Eina_Error;
#define EINA_ERROR_NO_ERROR ((Eina_Error)0)
/**
- * @var EINA_ERROR_OUT_OF_MEMORY
+ * @var Eina_Error EINA_ERROR_OUT_OF_MEMORY
* @brief The error identifier corresponding to lack of memory.
*
* @deprecated since 1.19, same as @c ENOMEM from @c errno.h
*/
-EAPI extern Eina_Error EINA_ERROR_OUT_OF_MEMORY EINA_DEPRECATED; /* use ENOMEM */
+EINA_API extern Eina_Error EINA_ERROR_OUT_OF_MEMORY EINA_DEPRECATED; /* use ENOMEM */
/**
* @brief Registers a new error type.
@@ -121,7 +131,7 @@ EAPI extern Eina_Error EINA_ERROR_OUT_OF_MEMORY EINA_DEPRECATED; /* use ENOMEM *
*
* @see eina_error_msg_static_register()
*/
-EAPI Eina_Error eina_error_msg_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Error eina_error_msg_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Registers a new error type, statically allocated message.
@@ -140,7 +150,7 @@ EAPI Eina_Error eina_error_msg_register(const char *msg) EINA_ARG_NONNULL(1) EI
*
* @see eina_error_msg_register()
*/
-EAPI Eina_Error eina_error_msg_static_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Error eina_error_msg_static_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Changes the message of an already registered message.
@@ -161,7 +171,7 @@ EAPI Eina_Error eina_error_msg_static_register(const char *msg) EINA_ARG_NONNUL
*
* @see eina_error_msg_register()
*/
-EAPI Eina_Bool eina_error_msg_modify(Eina_Error error,
+EINA_API Eina_Bool eina_error_msg_modify(Eina_Error error,
const char *msg) EINA_ARG_NONNULL(2);
/**
@@ -173,7 +183,7 @@ EAPI Eina_Bool eina_error_msg_modify(Eina_Error error,
*
* @note This function is thread safe @since 1.10, but slower to use.
*/
-EAPI Eina_Error eina_error_get(void);
+EINA_API Eina_Error eina_error_get(void);
/**
* @brief Sets the last error.
@@ -187,7 +197,7 @@ EAPI Eina_Error eina_error_get(void);
*
* @note This function is thread safe @since 1.10, but slower to use.
*/
-EAPI void eina_error_set(Eina_Error err);
+EINA_API void eina_error_set(Eina_Error err);
/**
* @brief Returns the description of the given error number.
@@ -198,7 +208,7 @@ EAPI void eina_error_set(Eina_Error err);
* @return The description of the error
*
*/
-EAPI const char *eina_error_msg_get(Eina_Error error) EINA_PURE;
+EINA_API const char *eina_error_msg_get(Eina_Error error) EINA_PURE;
/**
* @brief Finds the #Eina_Error corresponding to a message string.
@@ -213,7 +223,7 @@ EAPI const char *eina_error_msg_get(Eina_Error error) EINA_PURE;
* eina_error_msg_static_register() or modified with
* eina_error_msg_modify().
*/
-EAPI Eina_Error eina_error_find(const char *msg) EINA_ARG_NONNULL(1) EINA_PURE;
+EINA_API Eina_Error eina_error_find(const char *msg) EINA_ARG_NONNULL(1) EINA_PURE;
/**
* @}
diff --git a/src/lib/eina/eina_evlog.c b/src/lib/eina/eina_evlog.c
index eb32dfc27b..c0fe64fe22 100644
--- a/src/lib/eina/eina_evlog.c
+++ b/src/lib/eina/eina_evlog.c
@@ -150,7 +150,7 @@ push_buf(Eina_Evlog_Buf *b, unsigned int size)
return ptr;
}
-EAPI void
+EINA_API void
eina_evlog(const char *event, void *obj, double srctime, const char *detail)
{
Eina_Evlog_Item *item;
@@ -186,7 +186,7 @@ eina_evlog(const char *event, void *obj, double srctime, const char *detail)
eina_spinlock_release(&_evlog_lock);
}
-EAPI Eina_Evlog_Buf *
+EINA_API Eina_Evlog_Buf *
eina_evlog_steal(void)
{
Eina_Evlog_Buf *stolen = NULL;
@@ -210,7 +210,7 @@ eina_evlog_steal(void)
return stolen;
}
-EAPI void
+EINA_API void
eina_evlog_start(void)
{
eina_spinlock_take(&_evlog_lock);
@@ -224,7 +224,7 @@ eina_evlog_start(void)
eina_spinlock_release(&_evlog_lock);
}
-EAPI void
+EINA_API void
eina_evlog_stop(void)
{
eina_spinlock_take(&_evlog_lock);
diff --git a/src/lib/eina/eina_evlog.h b/src/lib/eina/eina_evlog.h
index 6843602ff7..4c6a4255db 100644
--- a/src/lib/eina/eina_evlog.h
+++ b/src/lib/eina/eina_evlog.h
@@ -113,7 +113,7 @@ struct _Eina_Evlog_Buf
*
* @since 1.15
*/
-EAPI void
+EINA_API void
eina_evlog(const char *event, void *obj, double srctime, const char *detail);
/**
@@ -126,7 +126,7 @@ eina_evlog(const char *event, void *obj, double srctime, const char *detail);
*
* @since 1.15
*/
-EAPI Eina_Evlog_Buf *
+EINA_API Eina_Evlog_Buf *
eina_evlog_steal(void);
/**
@@ -134,7 +134,7 @@ eina_evlog_steal(void);
*
* @since 1.15
*/
-EAPI void
+EINA_API void
eina_evlog_start(void);
/**
@@ -145,7 +145,7 @@ eina_evlog_start(void);
*
* @since 1.15
*/
-EAPI void
+EINA_API void
eina_evlog_stop(void);
/**
diff --git a/src/lib/eina/eina_file.h b/src/lib/eina/eina_file.h
index 404dea1ccb..c7e5b2b590 100644
--- a/src/lib/eina/eina_file.h
+++ b/src/lib/eina/eina_file.h
@@ -264,7 +264,7 @@ struct _Eina_File_Line
* @param[in] data The data to pass to the callback
* @return #EINA_TRUE on success, otherwise #EINA_FALSE
*/
-EAPI Eina_Bool eina_file_dir_list(const char *dir,
+EINA_API Eina_Bool eina_file_dir_list(const char *dir,
Eina_Bool recursive,
Eina_File_Dir_List_Cb cb,
void *data) EINA_ARG_NONNULL(1, 3);
@@ -280,7 +280,7 @@ EAPI Eina_Bool eina_file_dir_list(const char *dir,
* @return An array of the parts of the path to split
*
*/
-EAPI Eina_Array *eina_file_split(char *path) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_Array *eina_file_split(char *path) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Gets an iterator to list the content of a directory.
@@ -300,7 +300,7 @@ EAPI Eina_Array *eina_file_split(char *path) EINA_WARN_UNUSED_RESULT EINA_ARG
*
* @see eina_file_direct_ls()
*/
-EAPI Eina_Iterator *eina_file_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_Iterator *eina_file_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Gets an iterator to list the content of a directory, with direct
@@ -327,7 +327,7 @@ EAPI Eina_Iterator *eina_file_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_A
*
* @see eina_file_direct_ls()
*/
-EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Uses information provided by #Eina_Iterator of eina_file_stat_ls() or eina_file_direct_ls()
@@ -345,7 +345,7 @@ EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT E
*
* @since 1.2
*/
-EAPI int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2, 3);
+EINA_API int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Close all file descriptors that are open at or above the given fd
@@ -356,13 +356,13 @@ EAPI int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Sta
* if no fd's are to be skipped, but if some fd's are to skip being
* closed then this will be an array of fd numbers being terminated
* by a fd value of -1.
- *
+ *
* @param[in] fd The fd value to begin closing at
* @param[in] except_fd An array of fd's not to close terminated by -1 as the last invalid fd
- *
+ *
* @since 1.24
*/
-EAPI void eina_file_close_from(int fd, int *except_fd);
+EINA_API void eina_file_close_from(int fd, int *except_fd);
/**
* @brief Generates and creates a uniquely named temporary file from a template name.
@@ -393,7 +393,7 @@ EAPI void eina_file_close_from(int fd, int *except_fd);
* @see eina_file_mkdtemp()
* @since 1.8
*/
-EAPI int eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path) EINA_ARG_NONNULL(1);
+EINA_API int eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path) EINA_ARG_NONNULL(1);
/**
* @brief Generates and creates a uniquely named temporary directory from a template name.
@@ -417,7 +417,7 @@ EAPI int eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path) EINA_AR
* @see eina_file_mkstemp()
* @since 1.8
*/
-EAPI Eina_Bool eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path) EINA_ARG_NONNULL(1,2);
+EINA_API Eina_Bool eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path) EINA_ARG_NONNULL(1,2);
/**
* @brief Gets an iterator to list the content of a directory, with direct
@@ -446,7 +446,7 @@ EAPI Eina_Bool eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path) E
*
* @see eina_file_ls()
*/
-EAPI Eina_Iterator *eina_file_direct_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_Iterator *eina_file_direct_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Sanitizes the file path.
@@ -460,7 +460,7 @@ EAPI Eina_Iterator *eina_file_direct_ls(const char *dir) EINA_WARN_UNUSED_RESULT
*
* @since 1.1
*/
-EAPI char *eina_file_path_sanitize(const char *path);
+EINA_API char *eina_file_path_sanitize(const char *path);
/**
* @typedef Eina_File_Copy_Progress
@@ -497,7 +497,7 @@ typedef enum {
*
* @note During the progress it may call back @p cb with the progress summary.
*/
-EAPI Eina_Bool eina_file_copy(const char *src, const char *dst, Eina_File_Copy_Flags flags, Eina_File_Copy_Progress cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_file_copy(const char *src, const char *dst, Eina_File_Copy_Flags flags, Eina_File_Copy_Progress cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
/**
* @brief Gets a read-only handler to a file.
@@ -512,7 +512,7 @@ EAPI Eina_Bool eina_file_copy(const char *src, const char *dst, Eina_File_Copy_F
*
* @since 1.1
*/
-EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Creates a virtual file from a memory pointer.
@@ -525,7 +525,7 @@ EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNU
*
* @since 1.8
*/
-EAPI Eina_File *
+EINA_API Eina_File *
eina_file_virtualize(const char *virtual_name, const void *data, unsigned long long length, Eina_Bool copy) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
@@ -536,7 +536,7 @@ eina_file_virtualize(const char *virtual_name, const void *data, unsigned long l
*
* @since 1.8
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_virtual(Eina_File *file) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
@@ -549,7 +549,7 @@ eina_file_virtual(Eina_File *file) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
*
* @since 1.8
*/
-EAPI Eina_Bool eina_file_refresh(Eina_File *file);
+EINA_API Eina_Bool eina_file_refresh(Eina_File *file);
/**
* @brief Duplicates a read-only handler of a previously open file.
@@ -561,7 +561,7 @@ EAPI Eina_Bool eina_file_refresh(Eina_File *file);
*
* @since 1.8
*/
-EAPI Eina_File * eina_file_dup(const Eina_File *file);
+EINA_API Eina_File * eina_file_dup(const Eina_File *file);
/**
* @brief Unrefs the file handler.
@@ -571,7 +571,7 @@ EAPI Eina_File * eina_file_dup(const Eina_File *file);
*
* @since 1.1
*/
-EAPI void eina_file_close(Eina_File *file);
+EINA_API void eina_file_close(Eina_File *file);
/**
* @brief Gets the file size at open time.
@@ -581,7 +581,7 @@ EAPI void eina_file_close(Eina_File *file);
*
* @since 1.1
*/
-EAPI size_t eina_file_size_get(const Eina_File *file);
+EINA_API size_t eina_file_size_get(const Eina_File *file);
/**
* @brief Gets the last modification time of an open file.
@@ -591,7 +591,7 @@ EAPI size_t eina_file_size_get(const Eina_File *file);
*
* @since 1.1
*/
-EAPI time_t eina_file_mtime_get(const Eina_File *file);
+EINA_API time_t eina_file_mtime_get(const Eina_File *file);
/**
* @brief Gets the filename of an open file.
@@ -601,7 +601,7 @@ EAPI time_t eina_file_mtime_get(const Eina_File *file);
*
* @since 1.1
*/
-EAPI const char *eina_file_filename_get(const Eina_File *file);
+EINA_API const char *eina_file_filename_get(const Eina_File *file);
/**
* @brief Gets the extended attribute of an open file.
@@ -614,7 +614,7 @@ EAPI const char *eina_file_filename_get(const Eina_File *file);
*
* @since 1.2
*/
-EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file);
+EINA_API Eina_Iterator *eina_file_xattr_get(Eina_File *file);
/**
* @brief Gets the extended attribute of an open file.
@@ -628,7 +628,7 @@ EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file);
*
* @since 1.2
*/
-EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file);
+EINA_API Eina_Iterator *eina_file_xattr_value_get(Eina_File *file);
/**
* @brief Maps all the files to a buffer.
@@ -640,7 +640,7 @@ EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file);
*
* @since 1.1
*/
-EAPI void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule);
+EINA_API void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule);
/**
* @brief Maps a part of the file.
@@ -656,7 +656,7 @@ EAPI void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule);
*
* @since 1.1
*/
-EAPI void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
+EINA_API void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
unsigned long int offset, unsigned long int length);
/**
@@ -667,23 +667,23 @@ EAPI void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
*
* @since 1.1
*/
-EAPI void eina_file_map_free(Eina_File *file, void *map);
+EINA_API void eina_file_map_free(Eina_File *file, void *map);
/**
* @brief Asks the OS to populate or otherwise pages of memory in file mapping.
* @details This advises the operating system as to what to do with the memory mapped
* to the given @p file. This affects a specific range of memory and may not
* be honored if the system chooses to ignore the request.
- *
+ *
* @param[in] file The file handle from which the map comes
* @param[in] rule The rule to apply to the mapped memory
* @param[in] map Memory that was mapped inside of which the memory range is
* @param[in] offset The offset in bytes from the start of the map address
* @param[in] length The length in bytes of the memory region to populate
- *
+ *
* @since 1.8
*/
-EAPI void
+EINA_API void
eina_file_map_populate(Eina_File *file, Eina_File_Populate rule, const void *map,
unsigned long int offset, unsigned long int length);
@@ -698,7 +698,7 @@ eina_file_map_populate(Eina_File *file, Eina_File_Populate rule, const void *map
*
* @since 1.3
*/
-EAPI Eina_Iterator *eina_file_map_lines(Eina_File *file);
+EINA_API Eina_Iterator *eina_file_map_lines(Eina_File *file);
/**
* @brief Tells whether there has been an IO error during the life of a mmaped file.
@@ -709,7 +709,7 @@ EAPI Eina_Iterator *eina_file_map_lines(Eina_File *file);
*
* @since 1.2
*/
-EAPI Eina_Bool eina_file_map_faulted(Eina_File *file, void *map);
+EINA_API Eina_Bool eina_file_map_faulted(Eina_File *file, void *map);
/**
* @brief Joins two paths of known length.
@@ -768,7 +768,7 @@ static inline size_t eina_file_path_join(char *dst,
*
* @since 1.19
*/
-EAPI Eina_Bool eina_file_unlink(const char *pathname);
+EINA_API Eina_Bool eina_file_unlink(const char *pathname);
/**
* @brief Make sure a file descriptor will be closed on exec.
@@ -781,7 +781,7 @@ EAPI Eina_Bool eina_file_unlink(const char *pathname);
*
* @since 1.20
*/
-EAPI Eina_Bool eina_file_close_on_exec(int fd, Eina_Bool on);
+EINA_API Eina_Bool eina_file_close_on_exec(int fd, Eina_Bool on);
#include "eina_inline_file.x"
@@ -796,26 +796,26 @@ typedef unsigned int Eina_Statgen;
* @brief Force the stat generation counter to tick over so any following i/o does real i/o and stat calls
* @since 1.23
*/
-EAPI void eina_file_statgen_next(void);
+EINA_API void eina_file_statgen_next(void);
/**
* @brief Get the current stat generation counter value
* @return 0 if you should always do stat calls and compare, or some other value that changes like a generation counter
* @since 1.23
*/
-EAPI Eina_Statgen eina_file_statgen_get(void);
+EINA_API Eina_Statgen eina_file_statgen_get(void);
/**
* @brief Enable stat generation count optimiziing to only stat/do file i/o between generation counts changing
* @since 1.23
*/
-EAPI void eina_file_statgen_enable(void);
+EINA_API void eina_file_statgen_enable(void);
/**
* @brief Disable stat generation count optimiziing to only stat/do file i/o between generation counts changing
* @since 1.23
*/
-EAPI void eina_file_statgen_disable(void);
+EINA_API void eina_file_statgen_disable(void);
/**
* @}
diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c
index c1517d5874..d93d2ef7b7 100644
--- a/src/lib/eina/eina_file_common.c
+++ b/src/lib/eina/eina_file_common.c
@@ -28,7 +28,7 @@
#include <errno.h>
#ifdef _WIN32
-# include <evil_private.h> /* windows.h fcntl mkstemps mkdtemp */
+# include <evil_private.h> /* windows.h */
#endif
#define COPY_BLOCKSIZE (4 * 1024 * 1024)
@@ -73,7 +73,7 @@ Eina_Lock _eina_file_lock_cache;
static Eina_Spinlock _eina_statgen_lock;
static Eina_Statgen _eina_statgen = 0;
-EAPI void
+EINA_API void
eina_file_statgen_next(void)
{
eina_spinlock_take(&_eina_statgen_lock);
@@ -85,7 +85,7 @@ eina_file_statgen_next(void)
eina_spinlock_release(&_eina_statgen_lock);
}
-EAPI Eina_Statgen
+EINA_API Eina_Statgen
eina_file_statgen_get(void)
{
Eina_Statgen s;
@@ -95,15 +95,15 @@ eina_file_statgen_get(void)
return s;
}
-EAPI void
+EINA_API void
eina_file_statgen_enable(void)
{
eina_spinlock_take(&_eina_statgen_lock);
- if (_eina_statgen != 0) _eina_statgen = 1;
+ if (_eina_statgen == 0) _eina_statgen = 1;
eina_spinlock_release(&_eina_statgen_lock);
}
-EAPI void
+EINA_API void
eina_file_statgen_disable(void)
{
eina_spinlock_take(&_eina_statgen_lock);
@@ -405,7 +405,7 @@ _eina_file_map_close(Eina_File_Map *map)
// Global API
-EAPI char *
+EINA_API char *
eina_file_path_sanitize(const char *path)
{
Eina_Tmpstr *result = NULL;
@@ -430,7 +430,7 @@ eina_file_path_sanitize(const char *path)
return r;
}
-EAPI Eina_File *
+EINA_API Eina_File *
eina_file_virtualize(const char *virtual_name, const void *data, unsigned long long length, Eina_Bool copy)
{
Eina_File *file;
@@ -494,7 +494,7 @@ eina_file_virtualize(const char *virtual_name, const void *data, unsigned long l
return file;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_virtual(Eina_File *file)
{
if (!file) return EINA_FALSE;
@@ -502,7 +502,7 @@ eina_file_virtual(Eina_File *file)
return file->virtual;
}
-EAPI Eina_File *
+EINA_API Eina_File *
eina_file_dup(const Eina_File *f)
{
Eina_File *file = (Eina_File*) f;
@@ -544,7 +544,7 @@ eina_file_clean_close(Eina_File *file)
free(file);
}
-EAPI void
+EINA_API void
eina_file_close(Eina_File *file)
{
Eina_Bool leave = EINA_TRUE;
@@ -574,21 +574,21 @@ eina_file_close(Eina_File *file)
eina_lock_release(&_eina_file_lock_cache);
}
-EAPI size_t
+EINA_API size_t
eina_file_size_get(const Eina_File *file)
{
EINA_FILE_MAGIC_CHECK(file, 0);
return file->length;
}
-EAPI time_t
+EINA_API time_t
eina_file_mtime_get(const Eina_File *file)
{
EINA_FILE_MAGIC_CHECK(file, 0);
return file->mtime;
}
-EAPI const char *
+EINA_API const char *
eina_file_filename_get(const Eina_File *file)
{
EINA_FILE_MAGIC_CHECK(file, NULL);
@@ -695,7 +695,7 @@ _eina_file_map_lines_iterator_free(Eina_Lines_Iterator *it)
free(it);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_map_lines(Eina_File *file)
{
Eina_Lines_Iterator *it;
@@ -952,7 +952,7 @@ _eina_file_copy_internal(int s, int d, off_t total, Eina_File_Copy_Progress cb,
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_copy(const char *src, const char *dst, Eina_File_Copy_Flags flags, Eina_File_Copy_Progress cb, const void *cb_data)
{
struct stat st;
@@ -993,98 +993,6 @@ eina_file_copy(const char *src, const char *dst, Eina_File_Copy_Flags flags, Ein
return success;
}
-EAPI int
-eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
-{
- char buffer[PATH_MAX];
- const char *XXXXXX = NULL, *sep;
- int fd, len;
-#ifndef _WIN32
- mode_t old_umask;
-#endif
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, -1);
-
- sep = strchr(templatename, '/');
-#ifdef _WIN32
- if (!sep) sep = strchr(templatename, '\\');
-#endif
- if (sep)
- {
- len = eina_strlcpy(buffer, templatename, sizeof(buffer));
- }
- else
- {
- len = eina_file_path_join(buffer, sizeof(buffer),
- eina_environment_tmp_get(), templatename);
- }
-
- /*
- * Unix:
- * Make sure temp file is created with secure permissions,
- * http://man7.org/linux/man-pages/man3/mkstemp.3.html#NOTES
- *
- * Windows:
- * no secure permissions anyway and the umask use below makes
- * the file read-only.
- */
-#ifndef _WIN32
- old_umask = umask(S_IRWXG|S_IRWXO);
-#endif
- if ((XXXXXX = strstr(buffer, "XXXXXX.")) != NULL)
- {
- int suffixlen = buffer + len - XXXXXX - 6;
- fd = mkstemps(buffer, suffixlen);
- }
- else
- fd = mkstemp(buffer);
-#ifndef _WIN32
- umask(old_umask);
-#endif
-
- if (fd < 0)
- {
- if (path) *path = NULL;
- return -1;
- }
-
- if (path) *path = eina_tmpstr_add(buffer);
- return fd;
-}
-
-EAPI Eina_Bool
-eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path)
-{
- char buffer[PATH_MAX];
- char *tmpdirname, *sep;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, EINA_FALSE);
-
- sep = strchr(templatename, '/');
-#ifdef _WIN32
- if (!sep) sep = strchr(templatename, '\\');
-#endif
- if (sep)
- {
- eina_strlcpy(buffer, templatename, sizeof(buffer));
- }
- else
- {
- eina_file_path_join(buffer, sizeof(buffer),
- eina_environment_tmp_get(), templatename);
- }
-
- tmpdirname = mkdtemp(buffer);
- if (tmpdirname == NULL)
- {
- if (path) *path = NULL;
- return EINA_FALSE;
- }
-
- if (path) *path = eina_tmpstr_add(tmpdirname);
- return EINA_TRUE;
-}
-
/*============================================================================*
* Global *
*============================================================================*/
@@ -1147,10 +1055,14 @@ eina_file_shutdown(void)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_close_on_exec(int fd, Eina_Bool on)
{
-#ifdef HAVE_FCNTL
+#ifdef _WIN32
+ return EINA_TRUE;
+ (void)fd;
+ (void)on;
+#elif HAVE_FCNTL
int flags;
flags = fcntl(fd, F_GETFD);
diff --git a/src/lib/eina/eina_file_common.h b/src/lib/eina/eina_file_common.h
index 38c1a3c4ee..16fb772c4d 100644
--- a/src/lib/eina/eina_file_common.h
+++ b/src/lib/eina/eina_file_common.h
@@ -69,7 +69,7 @@ typedef struct _Eina_Lines_Iterator Eina_Lines_Iterator;
struct _Eina_File
{
EINA_MAGIC; /**< Indicates whether Eina Magic should be used. */
- const char *filename; /**< The absolute path of the file. Note that the path given when calling @ref eina_file_open will be run through @ref eina_file_path_sanitize before it is stored here. */
+ const char *filename; /**< The absolute path of the file. Note that the path given when calling @ref eina_file_open will be run through @ref eina_file_path_sanitize before it is stored here. */
Eina_Hash *map; /**< Tracks portions of a file that have been mapped with mmap(2). The key is a tuple offset/length and the data is a pointer to the mapped region. */
Eina_Hash *rmap; /**< Similar function to #map, but used to look up mapped areas by pointer rather than offset/length. */
void *global_map; /**< A pointer to the entire contents of the file that have been mapped with mmap(2). This is the common case, and EFL and is optimized for it. */
@@ -124,6 +124,9 @@ struct _Eina_File_Map
Eina_Bool hugetlb : 1; /**< Indicates if we are using HugeTLB */
Eina_Bool faulty : 1; /**< Indicates if this region was not mapped correctly (i.e. the call to mmap(2) failed). */
+#ifdef _WIN32
+ void *ret; /**< A pointer to the mapped region */
+#endif
};
/**
diff --git a/src/lib/eina/eina_file.c b/src/lib/eina/eina_file_posix.c
index bc656233ac..c8b4c56919 100644
--- a/src/lib/eina/eina_file.c
+++ b/src/lib/eina/eina_file_posix.c
@@ -21,6 +21,10 @@
# include "config.h"
#endif
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
@@ -36,6 +40,10 @@
#endif
#include <fcntl.h>
+#if defined(__linux__)
+# include <sys/syscall.h>
+#endif
+
#ifdef HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
@@ -366,7 +374,7 @@ _eina_file_map_rule_apply(Eina_File_Populate rule, const void *map, unsigned lon
case EINA_FILE_REMOVE: flag = MADV_FREE; break;
#else
# warning "EINA_FILE_REMOVE does not have system support"
-#endif
+#endif
default: return tmp; break;
}
@@ -511,7 +519,7 @@ eina_file_mmap_faulty(void *addr, long page_size)
/* ================================================================ *
* Simplified logic for portability layer with eina_file_common *
- * ================================================================ */
+ * ================================================================ */
Eina_Bool
eina_file_path_relative(const char *path)
@@ -554,7 +562,7 @@ eina_file_cleanup(Eina_Tmpstr *path)
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_dir_list(const char *dir,
Eina_Bool recursive,
Eina_File_Dir_List_Cb cb,
@@ -586,7 +594,7 @@ eina_file_dir_list(const char *dir,
return EINA_TRUE;
}
-EAPI Eina_Array *
+EINA_API Eina_Array *
eina_file_split(char *path)
{
Eina_Array *ea;
@@ -619,7 +627,7 @@ eina_file_split(char *path)
return ea;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_ls(const char *dir)
{
#ifdef HAVE_DIRENT_H
@@ -667,7 +675,7 @@ eina_file_ls(const char *dir)
#endif
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_direct_ls(const char *dir)
{
#ifdef HAVE_DIRENT_H
@@ -727,7 +735,7 @@ eina_file_direct_ls(const char *dir)
#endif
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_stat_ls(const char *dir)
{
#ifdef HAVE_DIRENT_H
@@ -787,7 +795,7 @@ eina_file_stat_ls(const char *dir)
#endif
}
-EAPI Eina_File *
+EINA_API Eina_File *
eina_file_open(const char *path, Eina_Bool shared)
{
Eina_File *file;
@@ -896,7 +904,7 @@ eina_file_open(const char *path, Eina_Bool shared)
return NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_refresh(Eina_File *file)
{
struct stat file_stat;
@@ -929,7 +937,7 @@ eina_file_refresh(Eina_File *file)
return r;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_unlink(const char *pathname)
{
if ( unlink(pathname) < 0)
@@ -939,7 +947,7 @@ eina_file_unlink(const char *pathname)
return EINA_TRUE;
}
-EAPI void *
+EINA_API void *
eina_file_map_all(Eina_File *file, Eina_File_Populate rule)
{
int flags = MAP_SHARED;
@@ -990,7 +998,7 @@ eina_file_map_all(Eina_File *file, Eina_File_Populate rule)
return ret;
}
-EAPI void *
+EINA_API void *
eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
unsigned long int offset, unsigned long int length)
{
@@ -1069,7 +1077,7 @@ eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
return NULL;
}
-EAPI void
+EINA_API void
eina_file_map_free(Eina_File *file, void *map)
{
EINA_SAFETY_ON_NULL_RETURN(file);
@@ -1100,7 +1108,7 @@ eina_file_map_free(Eina_File *file, void *map)
eina_lock_release(&file->lock);
}
-EAPI void
+EINA_API void
eina_file_map_populate(Eina_File *file, Eina_File_Populate rule, const void *map,
unsigned long int offset, unsigned long int length)
{
@@ -1115,7 +1123,7 @@ eina_file_map_populate(Eina_File *file, Eina_File_Populate rule, const void *map
eina_lock_release(&file->lock);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_map_faulted(Eina_File *file, void *map)
{
Eina_Bool r = EINA_FALSE;
@@ -1157,7 +1165,7 @@ eina_file_map_faulted(Eina_File *file, void *map)
return r;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_xattr_get(Eina_File *file)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
@@ -1167,7 +1175,7 @@ eina_file_xattr_get(Eina_File *file)
return eina_xattr_fd_ls(file->fd);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_xattr_value_get(Eina_File *file)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
@@ -1177,7 +1185,7 @@ eina_file_xattr_value_get(Eina_File *file)
return eina_xattr_value_fd_ls(file->fd);
}
-EAPI int
+EINA_API int
eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *st)
{
struct stat buf;
@@ -1252,69 +1260,238 @@ eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *st)
return 0;
}
-EAPI void
+///////////////////////////////////////////////////////////////////////////
+// this below is funky avoiding opendir to avoid heap allocations thus
+// getdents and all the os specific stuff as this is intendedf for use
+// between fork and exec normally ... this is important
+#if defined(__FreeBSD__)
+# define do_getdents(fd, buf, size) getdents(fd, buf, size)
+typedef struct
+{
+#if __FreeBSD__ > 11
+ ino_t d_ino;
+ off_t d_off;
+ unsigned short d_reclen;
+ unsigned char d_type;
+ unsigned char ____pad0;
+ unsigned short d_namlen;
+ unsigned short ____pad1;
+ char d_name[4096];
+#else
+ __uint32_t d_fileno;
+ __uint16_t d_reclen;
+ __uint8_t d_type;
+ __uint8_t d_namlen;
+ char d_name[4096];
+#endif
+} Dirent;
+#elif defined(__OpenBSD__)
+# define do_getdents(fd, buf, size) getdents(fd, buf, size)
+typedef struct
+{
+ __ino_t d_ino;
+ __off_t d_off;
+ unsigned short d_reclen;
+ unsigned char d_type;
+ unsigned char d_namlen;
+ unsigned char ____pad[4];
+ char d_name[4096];
+} Dirent;
+#elif defined(__linux__)
+# define do_getdents(fd, buf, size) syscall(SYS_getdents64, fd, buf, size)
+// getdents64 added un glibc 2.30 ... so use raw syscall - will work
+// from some linux 2.4 on... so ... i think that's ok. :)
+//# define do_getdents(fd, buf, size) getdents64(fd, buf, size)
+typedef struct
+{
+ ino64_t d_ino;
+ off64_t d_off;
+ unsigned short d_reclen;
+ unsigned char d_type;
+ char d_name[4096];
+} Dirent;
+#endif
+
+EINA_API void
eina_file_close_from(int fd, int *except_fd)
{
#if defined(_WIN32)
// XXX: what do to here? anything?
#else
#ifdef HAVE_DIRENT_H
+//# if 0
+# if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__linux__)
+ int dirfd;
+ Dirent *d;
+ char buf[4096];
+ int *closes = NULL;
+ int num_closes = 0, i, j, clo, num;
+ const char *fname;
+ ssize_t pos, ret;
+ Eina_Bool do_read;
+
+ // note - this api is EXPECTED to be called in between a fork() and exec()
+ // when no threads are running. if you use this outside that context then
+ // it may not work as intended and may miss some fd's etc.
+ dirfd = open("/proc/self/fd", O_RDONLY | O_DIRECTORY);
+ if (dirfd < 0) dirfd = open("/dev/fd", O_RDONLY | O_DIRECTORY);
+ if (dirfd >= 0)
+ {
+ // count # of closes - the dir list should/will not change as its
+ // the fd's we have open so we can read it twice with no changes
+ // to it
+ do_read = EINA_TRUE;
+ for (;;)
+ {
+skip:
+ if (do_read)
+ {
+ pos = 0;
+ ret = do_getdents(dirfd, buf, sizeof(buf));
+ if (ret <= 0) break;
+ do_read = EINA_FALSE;
+ }
+ d = (Dirent *)(buf + pos);
+ fname = d->d_name;
+ pos += d->d_reclen;
+ if (pos >= ret) do_read = EINA_TRUE;
+ if (!((fname[0] >= '0') && (fname[0] <= '9'))) continue;
+ num = atoi(fname);
+ if (num < fd) continue;
+ if (except_fd)
+ {
+ for (j = 0; except_fd[j] >= 0; j++)
+ {
+ if (except_fd[j] == num) goto skip;
+ }
+ }
+ num_closes++;
+ }
+ // alloc closes list and walk again to fill it - on stack to avoid
+ // heap allocs
+ closes = alloca(num_closes * sizeof(int));
+ if ((closes) && (num_closes > 0))
+ {
+ clo = 0;
+ lseek(dirfd, 0, SEEK_SET);
+ do_read = EINA_TRUE;
+ for (;;)
+ {
+skip2:
+ if (do_read)
+ {
+ pos = 0;
+ ret = do_getdents(dirfd, buf, sizeof(buf));
+ if (ret <= 0) break;
+ do_read = EINA_FALSE;
+ }
+ d = (Dirent *)(buf + pos);
+ fname = d->d_name;
+ pos += d->d_reclen;
+ if (pos >= ret) do_read = EINA_TRUE;
+ if (!((fname[0] >= '0') && (fname[0] <= '9'))) continue;
+ num = atoi(fname);
+ if (num < fd) continue;
+ if (except_fd)
+ {
+ for (j = 0; except_fd[j] >= 0; j++)
+ {
+ if (except_fd[j] == num) goto skip2;
+ }
+ }
+ if (clo < num_closes) closes[clo] = num;
+ clo++;
+ }
+ // in case we somehow don't fill up all of closes in 2nd pass
+ // (this shouldn't happen as no threads are running and we
+ // do nothing to modify the fd set between 2st and 2nd pass).
+ // set rest num_closes to clo so we don't close invalid values
+ num_closes = clo;
+ }
+ close(dirfd);
+ // now go close all those fd's - some may be invalide like the dir
+ // reading fd above... that's ok.
+ for (i = 0; i < num_closes; i++)
+ {
+ close(closes[i]);
+ }
+ return;
+ }
+# else
DIR *dir;
+ int *closes = NULL;
+ int num_closes = 0, i, j, clo, num;
+ struct dirent *dp;
+ const char *fname;
- dir = opendir("/proc/sefl/fd");
+ dir = opendir("/proc/self/fd");
if (!dir) dir = opendir("/dev/fd");
if (dir)
{
- struct dirent *dp;
- const char *fname;
- int *closes = NULL;
- int num_closes = 0, i;
-
+ // count # of closes - the dir list should/will not change as its
+ // the fd's we have open so we can read it twice with no changes
+ // to it
for (;;)
{
skip:
- dp = readdir(dir);
- if (!dp) break;
+ if (!(dp = readdir(dir))) break;
fname = dp->d_name;
-
- if ((fname[0] >= '0') && (fname[0] <= '9'))
+ if (!((fname[0] >= '0') && (fname[0] <= '9'))) continue;
+ num = atoi(fname);
+ if (num < fd) continue;
+ if (except_fd)
{
- int num = atoi(fname);
- if (num >= fd)
+ for (j = 0; except_fd[j] >= 0; j++)
{
- if (except_fd)
- {
- int j;
-
- for (j = 0; except_fd[j] >= 0; j++)
- {
- if (except_fd[j] == num) goto skip;
- }
- }
- num_closes++;
- int *tmp = realloc(closes, num_closes * sizeof(int));
- if (!tmp) num_closes--;
- else
+ if (except_fd[j] == num) goto skip;
+ }
+ }
+ num_closes++;
+ }
+ // alloc closes list and walk again to fill it - on stack to avoid
+ // heap allocs
+ closes = alloca(num_closes * sizeof(int));
+ if ((closes) && (num_closes > 0))
+ {
+ clo = 0;
+ seekdir(dir, 0);
+ for (;;)
+ {
+skip2:
+ if (!(dp = readdir(dir))) break;
+ fname = dp->d_name;
+ if (!((fname[0] >= '0') && (fname[0] <= '9'))) continue;
+ num = atoi(fname);
+ if (num < fd) continue;
+ if (except_fd)
+ {
+ for (j = 0; except_fd[j] >= 0; j++)
{
- closes = tmp;
- closes[num_closes - 1] = num;
+ if (except_fd[j] == num) goto skip2;
}
}
+ if (clo < num_closes) closes[clo] = num;
+ clo++;
}
}
closedir(dir);
- for (i = 0; i < num_closes; i++) close(closes[i]);
- free(closes);
+ // now go close all those fd's - some may be invalide like the dir
+ // reading fd above... that's ok.
+ for (i = 0; i < num_closes; i++)
+ {
+ close(closes[i]);
+ }
return;
}
+# endif
#endif
- int i, max = 1024;
+ int max = 1024;
-# ifdef HAVE_SYS_RESOURCE_H
+#ifdef HAVE_SYS_RESOURCE_H
struct rlimit lim;
if (getrlimit(RLIMIT_NOFILE, &lim) < 0) return;
max = lim.rlim_max;
-# endif
+#endif
for (i = fd; i < max;)
{
if (except_fd)
@@ -1323,12 +1500,88 @@ skip:
for (j = 0; except_fd[j] >= 0; j++)
{
- if (except_fd[j] == i) goto skip2;
+ if (except_fd[j] == i) goto skip3;
}
}
close(i);
-skip2:
+skip3:
i++;
}
#endif
}
+
+EINA_API int
+eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
+{
+ char buffer[PATH_MAX];
+ const char *XXXXXX = NULL, *sep;
+ int fd, len;
+ mode_t old_umask;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, -1);
+
+ sep = strchr(templatename, '/');
+ if (sep)
+ {
+ len = eina_strlcpy(buffer, templatename, sizeof(buffer));
+ }
+ else
+ {
+ len = eina_file_path_join(buffer, sizeof(buffer),
+ eina_environment_tmp_get(), templatename);
+ }
+
+ /*
+ * Unix:
+ * Make sure temp file is created with secure permissions,
+ * http://man7.org/linux/man-pages/man3/mkstemp.3.html#NOTES
+ */
+ old_umask = umask(S_IRWXG|S_IRWXO);
+ if ((XXXXXX = strstr(buffer, "XXXXXX.")) != NULL)
+ {
+ int suffixlen = buffer + len - XXXXXX - 6;
+ fd = mkstemps(buffer, suffixlen);
+ }
+ else
+ fd = mkstemp(buffer);
+ umask(old_umask);
+
+ if (fd < 0)
+ {
+ if (path) *path = NULL;
+ return -1;
+ }
+
+ if (path) *path = eina_tmpstr_add(buffer);
+ return fd;
+}
+
+EINA_API Eina_Bool
+eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path)
+{
+ char buffer[PATH_MAX];
+ char *tmpdirname, *sep;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, EINA_FALSE);
+
+ sep = strchr(templatename, '/');
+ if (sep)
+ {
+ eina_strlcpy(buffer, templatename, sizeof(buffer));
+ }
+ else
+ {
+ eina_file_path_join(buffer, sizeof(buffer),
+ eina_environment_tmp_get(), templatename);
+ }
+
+ tmpdirname = mkdtemp(buffer);
+ if (tmpdirname == NULL)
+ {
+ if (path) *path = NULL;
+ return EINA_FALSE;
+ }
+
+ if (path) *path = eina_tmpstr_add(tmpdirname);
+ return EINA_TRUE;
+}
diff --git a/src/lib/eina/eina_file_win32.c b/src/lib/eina/eina_file_win32.c
index ca8e78b83e..455d583b96 100644
--- a/src/lib/eina/eina_file_win32.c
+++ b/src/lib/eina/eina_file_win32.c
@@ -24,6 +24,7 @@
#include <sys/stat.h>
#include <evil_private.h>
+#include <fcntl.h>
#include "eina_config.h"
#include "eina_private.h"
@@ -104,7 +105,7 @@ _eina_file_win32_is_dir(const char *dir)
attr = GetFileAttributes(dir);
#endif
- if (attr == 0xFFFFFFFF)
+ if (attr == INVALID_FILE_ATTRIBUTES)
return EINA_FALSE;
if (!(attr & FILE_ATTRIBUTE_DIRECTORY))
@@ -397,6 +398,114 @@ _eina_file_sep_find(char *s)
return NULL;
}
+static unsigned char _eina_file_random_uchar(unsigned char *c)
+{
+ /*
+ * Helper function for mktemp.
+ *
+ * Only characters from 'a' to 'z' and '0' to '9' are considered
+ * because on Windows, file system is case insensitive. That means
+ * 36 possible values.
+ * To increase randomness, we consider the greatest multiple of 36
+ * within 255 : 7*36 = 252, that is, values from 0 to 251 and choose
+ * a random value in this interval.
+ */
+ do {
+ BCryptGenRandom(_eina_bcrypt_provider, c, sizeof(UCHAR), 0);
+ } while (*c > 251);
+
+ *c = '0' + *c % 36;
+ if (*c > '9')
+ *c += 'a' - '9' - 1;
+
+ return *c;
+}
+
+static int
+_eina_file_mkstemp_init(char *__template, size_t *length, int suffixlen)
+{
+ if (!__template || (suffixlen < 0))
+ {
+ errno = EINVAL;
+ return 0;
+ }
+
+ *length = strlen(__template);
+ if ((*length < (6 + (size_t)suffixlen))
+ || (strncmp(__template + *length - 6 - suffixlen, "XXXXXX", 6) != 0))
+ {
+ errno = EINVAL;
+ return 0;
+ }
+ return 1;
+}
+
+static void
+_eina_file_tmpname(char *__template, size_t length, int suffixlen)
+{
+ unsigned char *suffix;
+
+ suffix = (unsigned char *)(__template + length - 6 - suffixlen);
+ *suffix = _eina_file_random_uchar(suffix);
+ suffix++;
+ *suffix = _eina_file_random_uchar(suffix);
+ suffix++;
+ *suffix = _eina_file_random_uchar(suffix);
+ suffix++;
+ *suffix = _eina_file_random_uchar(suffix);
+ suffix++;
+ *suffix = _eina_file_random_uchar(suffix);
+ suffix++;
+ *suffix = _eina_file_random_uchar(suffix);
+ suffix++;
+}
+
+static int
+_eina_file_mkstemps(char *__template, int suffixlen)
+{
+ size_t length;
+ int i;
+
+ if (!_eina_file_mkstemp_init(__template, &length, suffixlen))
+ return -1;
+
+ for (i = 0; i < 32768; i++)
+ {
+ int fd;
+
+ _eina_file_tmpname(__template, length, suffixlen);
+
+ fd = _open(__template,
+ _O_RDWR | _O_BINARY | _O_CREAT | _O_EXCL,
+ _S_IREAD | _S_IWRITE);
+ if (fd >= 0)
+ return fd;
+ }
+
+ errno = EEXIST;
+ return -1;
+}
+
+static char *
+_eina_file_mkdtemp(char *__template)
+{
+ size_t length;
+ int i;
+
+ if (!_eina_file_mkstemp_init(__template, &length, 0))
+ return NULL;
+
+ for (i = 0; i < 32768; i++)
+ {
+ _eina_file_tmpname(__template, length, 0);
+ if (CreateDirectory(__template, NULL) == TRUE)
+ return __template;
+ }
+
+ return NULL;
+}
+
+
/**
* @endcond
*/
@@ -450,7 +559,7 @@ eina_file_cleanup(Eina_Tmpstr *path)
* API *
*============================================================================*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_dir_list(const char *dir,
Eina_Bool recursive,
Eina_File_Dir_List_Cb cb,
@@ -512,7 +621,7 @@ eina_file_dir_list(const char *dir,
return EINA_TRUE;
}
-EAPI Eina_Array *
+EINA_API Eina_Array *
eina_file_split(char *path)
{
Eina_Array *ea;
@@ -545,7 +654,7 @@ eina_file_split(char *path)
return ea;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_ls(const char *dir)
{
Eina_File_Iterator *it;
@@ -590,7 +699,7 @@ eina_file_ls(const char *dir)
return NULL;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_direct_ls(const char *dir)
{
Eina_File_Direct_Iterator *it;
@@ -641,13 +750,13 @@ eina_file_direct_ls(const char *dir)
return NULL;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_file_stat_ls(const char *dir)
{
return eina_file_direct_ls(dir);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_refresh(Eina_File *file)
{
WIN32_FILE_ATTRIBUTE_DATA fad;
@@ -679,7 +788,7 @@ eina_file_refresh(Eina_File *file)
return r;
}
-EAPI Eina_File *
+EINA_API Eina_File *
eina_file_open(const char *path, Eina_Bool shared)
{
Eina_File *file;
@@ -788,7 +897,7 @@ eina_file_open(const char *path, Eina_Bool shared)
return NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_unlink(const char *pathname)
{
Eina_Stringshare *unlink_path = eina_file_sanitize(pathname);
@@ -827,23 +936,23 @@ eina_file_unlink(const char *pathname)
}
-EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file EINA_UNUSED)
+EINA_API Eina_Iterator *eina_file_xattr_get(Eina_File *file EINA_UNUSED)
{
return NULL;
}
-EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file EINA_UNUSED)
+EINA_API Eina_Iterator *eina_file_xattr_value_get(Eina_File *file EINA_UNUSED)
{
return NULL;
}
-EAPI void
+EINA_API void
eina_file_map_populate(Eina_File *file EINA_UNUSED, Eina_File_Populate rule EINA_UNUSED, const void *map EINA_UNUSED,
unsigned long int offset EINA_UNUSED, unsigned long int length EINA_UNUSED)
{
}
-EAPI void *
+EINA_API void *
eina_file_map_all(Eina_File *file, Eina_File_Populate rule EINA_UNUSED)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
@@ -886,7 +995,7 @@ eina_file_map_all(Eina_File *file, Eina_File_Populate rule EINA_UNUSED)
return NULL;
}
-EAPI void *
+EINA_API void *
eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
unsigned long int offset, unsigned long int length)
{
@@ -900,7 +1009,7 @@ eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
if (offset + length > file->length)
return NULL;
- if (offset == 0 && length == file->length)
+ if (offset == 0UL && length == file->length)
return eina_file_map_all(file, rule);
if (file->virtual)
@@ -914,40 +1023,56 @@ eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
map = eina_hash_find(file->map, &key);
if (!map)
{
+ SYSTEM_INFO si;
HANDLE fm;
+ __int64 map_size;
+ DWORD view_offset;
+ DWORD view_length;
+ DWORD granularity;
+
map = malloc(sizeof (Eina_File_Map));
if (!map)
- {
- eina_lock_release(&file->lock);
- return NULL;
- }
+ goto on_error;
- /* the length parameter is unsigned long, that is a DWORD */
- /* so the max size high parameter of CreateFileMapping is 0 */
+ /*
+ * the size of the mapping object is the offset plus the length,
+ * which might be greater than a DWORD
+ */
+ map_size = (__int64)offset + (__int64)length;
fm = CreateFileMapping(file->handle, NULL, PAGE_READONLY,
- 0, (DWORD)length, NULL);
+ (DWORD)((map_size >> 32) & 0x00000000ffffffffULL),
+ (DWORD)(map_size & 0x00000000ffffffffULL),
+ NULL);
if (!fm)
- return NULL;
-
+ goto on_error;
+
+ /*
+ * get the system allocation granularity as the
+ * offset passed to MapViewOfFile() must be a
+ * multiple of this granularity
+ */
+ GetSystemInfo(&si);
+ granularity = si.dwAllocationGranularity;
+
+ /*
+ * view_offset is the greatest multiple of granularity, less or equal
+ * than offset (and can be stored in a DWORD)
+ */
+ view_offset = (offset / granularity) * granularity;
+ view_length = (offset - view_offset) + length;
map->map = MapViewOfFile(fm, FILE_MAP_READ,
- offset & 0xffff0000,
- offset & 0x0000ffff,
- length);
+ 0,
+ view_offset,
+ view_length);
CloseHandle(fm);
if (!map->map)
- map->map = MAP_FAILED;
+ goto on_error;
+ map->ret = (unsigned char *)map->map + (offset - view_offset);
map->offset = offset;
map->length = length;
map->refcount = 0;
- if (map->map == MAP_FAILED)
- {
- free(map);
- eina_lock_release(&file->lock);
- return NULL;
- }
-
eina_hash_add(file->map, &key, map);
eina_hash_direct_add(file->rmap, map->map, map);
}
@@ -956,10 +1081,16 @@ eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
eina_lock_release(&file->lock);
- return map->map;
+ return map->ret;
+
+ on_error:
+ free(map);
+ eina_lock_release(&file->lock);
+
+ return NULL;
}
-EAPI void
+EINA_API void
eina_file_map_free(Eina_File *file, void *map)
{
EINA_SAFETY_ON_NULL_RETURN(file);
@@ -990,7 +1121,7 @@ eina_file_map_free(Eina_File *file, void *map)
eina_lock_release(&file->lock);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_file_map_faulted(Eina_File *file, void *map EINA_UNUSED)
{
#warning "We need to handle access to corrupted memory mapped file."
@@ -1028,7 +1159,7 @@ eina_file_map_faulted(Eina_File *file, void *map EINA_UNUSED)
return EINA_FALSE;
}
-EAPI int
+EINA_API int
eina_file_statat(void *container EINA_UNUSED, Eina_File_Direct_Info *info, Eina_Stat *st)
{
struct __stat64 buf;
@@ -1071,3 +1202,70 @@ eina_file_statat(void *container EINA_UNUSED, Eina_File_Direct_Info *info, Eina_
return 0;
}
+
+EINA_API int
+eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
+{
+ char buffer[PATH_MAX];
+ const char *XXXXXX = NULL, *sep;
+ int fd, len;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, -1);
+
+ sep = strchr(templatename, '/');
+ if (!sep) sep = strchr(templatename, '\\');
+ if (sep)
+ {
+ len = eina_strlcpy(buffer, templatename, sizeof(buffer));
+ }
+ else
+ {
+ len = eina_file_path_join(buffer, sizeof(buffer),
+ eina_environment_tmp_get(), templatename);
+ }
+
+ if ((XXXXXX = strstr(buffer, "XXXXXX.")) != NULL)
+ fd = _eina_file_mkstemps(buffer, buffer + len - XXXXXX - 6);
+ else
+ fd = _eina_file_mkstemps(buffer, 0);
+
+ if (fd < 0)
+ {
+ if (path) *path = NULL;
+ return -1;
+ }
+
+ if (path) *path = eina_tmpstr_add(buffer);
+ return fd;
+}
+
+EINA_API Eina_Bool
+eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path)
+{
+ char buffer[PATH_MAX];
+ char *tmpdirname, *sep;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, EINA_FALSE);
+
+ sep = strchr(templatename, '/');
+ if (!sep) sep = strchr(templatename, '\\');
+ if (sep)
+ {
+ eina_strlcpy(buffer, templatename, sizeof(buffer));
+ }
+ else
+ {
+ eina_file_path_join(buffer, sizeof(buffer),
+ eina_environment_tmp_get(), templatename);
+ }
+
+ tmpdirname = _eina_file_mkdtemp(buffer);
+ if (tmpdirname == NULL)
+ {
+ if (path) *path = NULL;
+ return EINA_FALSE;
+ }
+
+ if (path) *path = eina_tmpstr_add(tmpdirname);
+ return EINA_TRUE;
+}
diff --git a/src/lib/eina/eina_fp.c b/src/lib/eina/eina_fp.c
index ea1775c961..35f08a0188 100644
--- a/src/lib/eina/eina_fp.c
+++ b/src/lib/eina/eina_fp.c
@@ -423,7 +423,7 @@ static const Eina_F32p32 eina_trigo[MAX_PREC] =
0x0000000000653d02, 0x0000000000000000
};
-EAPI Eina_F32p32
+EINA_API Eina_F32p32
eina_f32p32_cos(Eina_F32p32 a)
{
Eina_F32p32 F32P32_2PI;
@@ -471,7 +471,7 @@ eina_f32p32_cos(Eina_F32p32 a)
return result;
}
-EAPI Eina_F32p32
+EINA_API Eina_F32p32
eina_f32p32_sin(Eina_F32p32 a)
{
Eina_F32p32 F32P32_PI2;
diff --git a/src/lib/eina/eina_fp.h b/src/lib/eina/eina_fp.h
index 49d6662cdb..5c041170fc 100644
--- a/src/lib/eina/eina_fp.h
+++ b/src/lib/eina/eina_fp.h
@@ -144,7 +144,7 @@ static inline Eina_F32p32 eina_f32p32_mul(Eina_F32p32 a, Eina_F32p32 b);
/**
* @brief Calculates the scale multiplication of one Eina_F32p32 floating point
- * number with an integer
+ * number with an integer
*
* @param[in] a The Eina_F32p32 number
* @param[in] b The integer value
@@ -194,7 +194,7 @@ static inline unsigned int eina_f32p32_fracc_get(Eina_F32p32 v);
* @param[in] a The angle in radians to calculate the cosine from.
* @return The cosine of the angle @p a
*/
-EAPI Eina_F32p32 eina_f32p32_cos(Eina_F32p32 a);
+EINA_API Eina_F32p32 eina_f32p32_cos(Eina_F32p32 a);
/**
* @brief Calculates the sine of a floating point number
@@ -202,7 +202,7 @@ EAPI Eina_F32p32 eina_f32p32_cos(Eina_F32p32 a);
* @param[in] a The angle in radians to calculate the sine from.
* @return The cosine of the angle @p a
*/
-EAPI Eina_F32p32 eina_f32p32_sin(Eina_F32p32 a);
+EINA_API Eina_F32p32 eina_f32p32_sin(Eina_F32p32 a);
/**
@@ -230,7 +230,7 @@ static inline Eina_F16p16 eina_f16p16_int_from(int32_t v);
/**
* @brief Creates a new standard 32-bit integer from Eina_F16p16 floating point
- * number
+ * number
*
* @param[in] v Eina_F16p16 value to convert
* @return The value converted into 32-bit integer
@@ -247,7 +247,7 @@ static inline Eina_F16p16 eina_f16p16_double_from(double v);
/**
* @brief Creates a new standard double from Eina_F16p16 floating point
- * number
+ * number
*
* @param[in] v Eina_F16p16 value to convert
* @return The value converted into double
diff --git a/src/lib/eina/eina_freeq.c b/src/lib/eina/eina_freeq.c
index 5abb7b8f45..a4c07c9f9d 100644
--- a/src/lib/eina/eina_freeq.c
+++ b/src/lib/eina/eina_freeq.c
@@ -17,9 +17,23 @@
// ========================================================================= //
#define ITEM_FILLPAT_MAX 0
-#define ITEM_TOTAL_MAX ( 16 * 1024)
-#define ITEM_MEM_MAX (1024 * 1024)
-#define ITEM_BLOCK_COUNT 42
+#define ITEM_TOTAL_MAX ( 256 * 1024)
+#define ITEM_MEM_MAX ( 32 * 1024 * 1024)
+#if __WORDSIZE == 32
+// 4kb blocks
+//# define ITEM_BLOCK_COUNT 340
+// 64k blocks
+# define ITEM_BLOCK_COUNT 5459
+// 256k blocks
+//# define ITEM_BLOCK_COUNT 21844
+#else // __WORDSIZE == 64
+// 4kb blocks
+//# define ITEM_BLOCK_COUNT 170
+// 64k blocks
+# define ITEM_BLOCK_COUNT 2730
+// 256k blocks
+//# define ITEM_BLOCK_COUNT 10922
+#endif
// ========================================================================= //
@@ -28,6 +42,186 @@ typedef struct _Eina_FreeQ_Block Eina_FreeQ_Block;
// ========================================================================= //
+// these items are highly compressable. here is a dump of F: ptr freefunc size
+// ...
+// F: 0xaaab0454dd00 0xffff8b83b628 0x10
+// F: 0xaaab0454bd00 0xffff8b83b648 0x20
+// F: 0xaaab0454dd10 0xffff8b83b628 0x10
+// F: 0xaaab0454bd20 0xffff8b83b648 0x20
+// F: 0xaaab0454dd20 0xffff8b83b628 0x10
+// F: 0xaaab0454bd40 0xffff8b83b648 0x20
+// F: 0xaaab0454dd30 0xffff8b83b628 0x10
+// F: 0xaaab0454bd60 0xffff8b83b648 0x20
+// F: 0xaaab0454bda0 0xffff8b83b648 0x20
+// F: 0xaaab0454bdc0 0xffff8b83b648 0x20
+// ...
+// F: 0xaaab049176d0 0xffff8b83b648 0x20
+// F: 0xaaab04917750 0xffff8b83b648 0x20
+// F: 0xaaab04917770 0xffff8b83b648 0x20
+// F: 0xaaab04917330 0xffff8b83b648 0x20
+// F: 0xaaab0481b3c0 0xffff8b83b628 0x10
+// F: 0xaaab049177f0 0xffff8b83b648 0x20
+// F: 0xaaab049259a0 0xffff8af1c638 0x38
+// F: 0xaaab049172d0 0xffff8b83b648 0x20
+// F: 0xaaab049172f0 0xffff8b83b648 0x20
+// F: 0xaaab04925c00 0xffff8af1c638 0x38
+// F: 0xaaab04925c40 0xffff8af1c638 0x38
+// F: 0xaaab0481b3b0 0xffff8b83b628 0x10
+// F: 0xaaab04917310 0xffff8b83b648 0x20
+// F: 0xaaab04925bc0 0xffff8af1c638 0x38
+// F: 0xaaab0491d240 0xffff8af1c638 0x40
+// F: 0xaaab0492b3a0 0xffff8af1c638 0x38
+// F: 0xaaab049225c0 0xffff8af1c638 (nil)
+// F: 0xaaab04917730 0xffff8b83b648 0x20
+// F: 0xaaab04917790 0xffff8b83b648 0x20
+// F: 0xaaab049177b0 0xffff8b83b648 0x20
+// F: 0xaaab0492b710 0xffff8af1c638 0x38
+// F: 0xaaab0492b750 0xffff8af1c638 0x38
+// F: 0xaaab0481b420 0xffff8b83b628 0x10
+// F: 0xaaab049177d0 0xffff8b83b648 0x20
+// F: 0xaaab0492b2d0 0xffff8af1c638 0x38
+// F: 0xaaab0481b410 0xffff8b83b628 0x10
+// F: 0xaaab04917710 0xffff8b83b648 0x20
+// F: 0xaaab0492b280 0xffff8af1c638 0x40
+// F: 0xaaab0481b430 0xffff8b83b628 0x10
+// F: 0xaaab04917810 0xffff8b83b648 0x20
+// F: 0xaaab0492b6d0 0xffff8af1c638 0x38
+// F: 0xaaab0491ca80 0xffff8af1c638 (nil)
+// F: 0xaaab0492b350 0xffff8af1c638 0x40
+// F: 0xaaab0490fef0 0xffff8af1c638 0x38
+// F: 0xaaab0481b320 0xffff8b83b628 0x10
+// F: 0xaaab04916ff0 0xffff8b83b648 0x20
+// F: 0xaaab0481b330 0xffff8b83b628 0x10
+// F: 0xaaab04917030 0xffff8b83b648 0x20
+// F: 0xaaab04920560 0xffff8af1c638 0x38
+// F: 0xaaab0481b350 0xffff8b83b628 0x10
+// F: 0xaaab049170f0 0xffff8b83b648 0x20
+// F: 0xaaab04917050 0xffff8b83b648 0x20
+// F: 0xaaab04920510 0xffff8af1c638 0x40
+// F: 0xaaab04920850 0xffff8af1c638 0x38
+// F: 0xaaab04917070 0xffff8b83b648 0x20
+// F: 0xaaab04920800 0xffff8af1c638 0x40
+// F: 0xaaab04920c30 0xffff8af1c638 0x38
+// F: 0xaaab04917090 0xffff8b83b648 0x20
+// F: 0xaaab04920be0 0xffff8af1c638 0x40
+// F: 0xaaab04920e60 0xffff8af1c638 0x38
+// F: 0xaaab04920e10 0xffff8af1c638 0x40
+// F: 0xaaab049212b0 0xffff8af1c638 0x38
+// F: 0xaaab0481b340 0xffff8b83b628 0x10
+// F: 0xaaab049170d0 0xffff8b83b648 0x20
+// F: 0xaaab04921260 0xffff8af1c638 0x40
+// F: 0xaaab0481b1f0 0xffff8b83b628 0x10
+// F: 0xaaab04875d50 0xffff8b83b648 0x20
+// F: 0xaaab0490fea0 0xffff8af1c638 0x40
+// F: 0xaaab049102e0 0xffff8af1c638 0x38
+// F: 0xaaab04917010 0xffff8b83b648 0x20
+// F: 0xaaab0490b4f0 0xffff8af1c638 (nil)
+// F: 0xaaab04910290 0xffff8af1c638 0x40
+// F: 0xaaab0481b460 0xffff8b83b628 0x10
+// F: 0xaaab049178b0 0xffff8b83b648 0x20
+// F: 0xaaab0481b450 0xffff8b83b628 0x10
+// F: 0xaaab04917870 0xffff8b83b648 0x20
+// F: 0xaaab0481b490 0xffff8b83b628 0x10
+// F: 0xaaab049e56f0 0xffff8b83b648 0x20
+// F: 0xaaab0481b4a0 0xffff8b83b628 0x10
+// F: 0xaaab049e5710 0xffff8b83b648 0x20
+// F: 0xaaab0481b4b0 0xffff8b83b628 0x10
+// F: 0xaaab049e5730 0xffff8b83b648 0x20
+// F: 0xaaab0481b4c0 0xffff8b83b628 0x10
+// F: 0xaaab049e5750 0xffff8b83b648 0x20
+// F: 0xaaab0481b4f0 0xffff8b83b628 0x10
+// F: 0xaaab049e57d0 0xffff8b83b648 0x20
+// F: 0xaaab049e5990 0xffff8b83b648 0x20
+// F: 0xaaab049e5770 0xffff8b83b648 0x20
+// F: 0xaaab0481b4d0 0xffff8b83b628 0x10
+// F: 0xaaab049e5790 0xffff8b83b648 0x20
+// F: 0xaaab049e5a50 0xffff8b83b648 0x20
+// F: 0xaaab049e57b0 0xffff8b83b648 0x20
+// ...
+// F: 0xaaab04d9f330 0xffff8b83b648 0x20
+// F: 0xaaab04b18920 0xffff8b83b628 0x10
+// F: 0xaaab04d9f350 0xffff8b83b648 0x20
+// F: 0xaaab04d4d000 0xffff8b83b648 0x20
+// F: 0xaaab04d9f370 0xffff8b83b648 0x20
+// F: 0xaaab04d9f390 0xffff8b83b648 0x20
+// F: 0xaaab04d9f3b0 0xffff8b83b648 0x20
+// F: 0xaaab04b18930 0xffff8b83b628 0x10
+// F: 0xaaab04d9f3d0 0xffff8b83b648 0x20
+// F: 0xaaab04d9f3f0 0xffff8b83b648 0x20
+// F: 0xaaab04d9f410 0xffff8b83b648 0x20
+// F: 0xaaab04d9f430 0xffff8b83b648 0x20
+// F: 0xaaab04b18940 0xffff8b83b628 0x10
+// F: 0xaaab04d9f450 0xffff8b83b648 0x20
+// F: 0xaaab04d4d020 0xffff8b83b648 0x20
+// F: 0xaaab04d9f470 0xffff8b83b648 0x20
+// F: 0xaaab04d9f490 0xffff8b83b648 0x20
+// F: 0xaaab04d9f4b0 0xffff8b83b648 0x20
+// F: 0xaaab04b18950 0xffff8b83b628 0x10
+// F: 0xaaab04d9f4d0 0xffff8b83b648 0x20
+// F: 0xaaab04d9f4f0 0xffff8b83b648 0x20
+// F: 0xaaab04d9f510 0xffff8b83b648 0x20
+// F: 0xaaab04d9f530 0xffff8b83b648 0x20
+// F: 0xaaab04b18960 0xffff8b83b628 0x10
+// F: 0xaaab04d9f550 0xffff8b83b648 0x20
+// F: 0xaaab04640ce0 0xffff8b83b628 0x10
+// F: 0xaaab04d9ee10 0xffff8b83b648 0x20
+// F: 0xaaab04577e50 0xffff8af1c638 (nil)
+// F: 0xaaab04571570 0xffff8af1c638 (nil)
+// F: 0xaaab04577ee0 0xffff8af1c638 0x40
+// F: 0xaaab0457af50 0xffff8af1c638 (nil)
+// F: 0xaaab04571590 0xffff8af1c638 (nil)
+// F: 0xaaab0457afe0 0xffff8af1c638 0x40
+// F: 0xaaab0457e0c0 0xffff8af1c638 (nil)
+// F: 0xaaab0457b360 0xffff8af1c638 (nil)
+// F: 0xaaab0457e150 0xffff8af1c638 0x40
+// F: 0xaaab04581860 0xffff8af1c638 (nil)
+// F: 0xaaab04581330 0xffff8af1c638 (nil)
+// F: 0xaaab045818f0 0xffff8af1c638 0x40
+// F: 0xaaab0490ed00 0xffff8af1c638 0xc0
+// F: 0xaaab0490f090 0xffff8af1c638 0xc0
+// F: 0xaaab04922760 0xffff8af1c638 0xc0
+// F: 0xaaab04922880 0xffff8af1c638 0xc0
+// F: 0xaaab04922a20 0xffff8af1c638 0xc0
+// F: 0xaaab0491cb80 0xffff8af1c638 0xc0
+// F: 0xaaab0492b8e0 0xffff8af1c638 0xc0
+// F: 0xaaab0492c4b0 0xffff8af1c638 0xc0
+// F: 0xaaab0492c5c0 0xffff8af1c638 0xc0
+// F: 0xaaab0492c750 0xffff8af1c638 0xc0
+// F: 0xaaab04926230 0xffff8af1c638 0xc0
+// F: 0xaaab04920d00 0xffff8af1c638 0xc0
+// F: 0xaaab04920aa0 0xffff8af1c638 0xc0
+// F: 0xaaab04a05280 0xffff8af1c638 0xc0
+// F: 0xaaab04a053d0 0xffff8af1c638 0xc0
+// F: 0xaaab04a05520 0xffff8af1c638 0xc0
+// F: 0xaaab049f3860 0xffff8af1c638 0xc0
+// F: 0xaaab049f3a30 0xffff8af1c638 0xc0
+// F: 0xaaab04a06e60 0xffff8af1c638 0xc0
+// F: 0xaaab04a25490 0xffff8af1c638 0xc0
+// F: 0xaaab04a55170 0xffff8af1c638 0xc0
+// F: 0xaaab04a55ca0 0xffff8af1c638 0xc0
+// ...
+// so in future maybe create delta compression. keep a "start value" in the
+// Eina_FreeQ_Block block for each to begin from (and update these as we
+// march blcok->start forward (or at least update them when we finish a run
+// of processing items at the end of the processing.
+//
+// we can store things as DELTAS from the preview value. ptr, func, size all
+// are ptr sized values so we can compress them with deltas and thus encode
+// them in variable runs of bytes depending on the size of the delta. e.g.
+// use LEB128 maybe or PrefixVariant.
+//
+// after some playng leb128 seems to be the best from simplicity (so fast
+// encode which matters and decode needs to be good too) and size. i saw
+// a reduction to 24% of the original data size this way based on the sample
+// data i collected like above. is it worth the extra cycles? don't know.
+//
+// when looking at the deltas i noticed that func and sie delats are very
+// often 0 for long runs. this means we can probably use RLE effectively
+// if we split this into 3 streams wahc delta compressed then RLE compressed
+// per stream. walking is more complex and filling the block means taking
+// a guess at pre-allocating offsets per stream so it may not fill the blocks
+// as affectively then. again - is it worth it? need to measure if RLE helps
+// a lot or not in keeping size down in addition to delta + leb128.
struct _Eina_FreeQ_Item
{
void *ptr;
@@ -67,6 +261,20 @@ static unsigned char _eina_freeq_fillpat_freed_val = 0x77;
static int _eina_freeq_total_max = ITEM_TOTAL_MAX;
static size_t _eina_freeq_mem_max = ITEM_MEM_MAX;
+// debgging/tuning info to enable in future when gathering stats
+#if 0
+static int _max_seen = 0;
+# define FQMAX(fq) \
+ if (fq == _eina_freeq_main) { \
+ if (fq->count > _max_seen) { \
+ _max_seen = fq->count; \
+ printf("FQ max: %i\n", _max_seen); \
+ } \
+ }
+#else
+# define FQMAX(fq)
+#endif
+
// ========================================================================= //
#define LOCK_FQ(fq); do { \
@@ -108,9 +316,9 @@ err:
static void
_eina_freeq_free_do(void *ptr,
void (*free_func) (void *ptr),
- size_t size EINA_UNUSED)
+ size_t size)
{
- if ((size < _eina_freeq_fillpat_max) && (size > 0))
+ if (EINA_LIKELY((size > 0) && (size < _eina_freeq_fillpat_max)))
{
_eina_freeq_fill_check(ptr, free_func, size);
_eina_freeq_freed_fill_do(ptr, size);
@@ -157,6 +365,7 @@ _eina_freeq_flush_nolock(Eina_FreeQ *fq)
{
if (fq->postponed) return;
+ FQMAX(fq);
while ((fq->count > fq->count_max) || (fq->mem_total > fq->mem_max))
_eina_freeq_process(fq);
}
@@ -222,7 +431,7 @@ _eina_freeq_new_postponed(void)
return fq;
}
-EAPI Eina_FreeQ *
+EINA_API Eina_FreeQ *
eina_freeq_new(Eina_FreeQ_Type type)
{
switch (type)
@@ -236,7 +445,7 @@ eina_freeq_new(Eina_FreeQ_Type type)
}
}
-EAPI void
+EINA_API void
eina_freeq_free(Eina_FreeQ *fq)
{
if (!fq) return;
@@ -246,7 +455,7 @@ eina_freeq_free(Eina_FreeQ *fq)
free(fq);
}
-EAPI Eina_FreeQ_Type
+EINA_API Eina_FreeQ_Type
eina_freeq_type_get(Eina_FreeQ *fq)
{
if (fq && fq->postponed)
@@ -261,13 +470,13 @@ eina_freeq_main_set(Eina_FreeQ *fq)
_eina_freeq_main = fq;
}
-EAPI Eina_FreeQ *
+EINA_API Eina_FreeQ *
eina_freeq_main_get(void)
{
return _eina_freeq_main;
}
-EAPI void
+EINA_API void
eina_freeq_count_max_set(Eina_FreeQ *fq, int count)
{
if (!fq) return;
@@ -280,7 +489,7 @@ eina_freeq_count_max_set(Eina_FreeQ *fq, int count)
UNLOCK_FQ(fq);
}
-EAPI int
+EINA_API int
eina_freeq_count_max_get(Eina_FreeQ *fq)
{
int count;
@@ -293,7 +502,7 @@ eina_freeq_count_max_get(Eina_FreeQ *fq)
return count;
}
-EAPI void
+EINA_API void
eina_freeq_mem_max_set(Eina_FreeQ *fq, size_t mem)
{
if (!fq) return;
@@ -305,7 +514,7 @@ eina_freeq_mem_max_set(Eina_FreeQ *fq, size_t mem)
UNLOCK_FQ(fq);
}
-EAPI size_t
+EINA_API size_t
eina_freeq_mem_max_get(Eina_FreeQ *fq)
{
size_t mem;
@@ -318,20 +527,22 @@ eina_freeq_mem_max_get(Eina_FreeQ *fq)
return mem;
}
-EAPI void
+EINA_API void
eina_freeq_clear(Eina_FreeQ *fq)
{
if (!fq) return;
LOCK_FQ(fq);
+ FQMAX(fq);
while (fq->count > 0) _eina_freeq_process(fq);
UNLOCK_FQ(fq);
}
-EAPI void
+EINA_API void
eina_freeq_reduce(Eina_FreeQ *fq, int count)
{
if (!fq) return;
LOCK_FQ(fq);
+ FQMAX(fq);
while ((fq->count > 0) && (count > 0))
{
_eina_freeq_process(fq);
@@ -340,7 +551,7 @@ eina_freeq_reduce(Eina_FreeQ *fq, int count)
UNLOCK_FQ(fq);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_freeq_ptr_pending(Eina_FreeQ *fq)
{
Eina_Bool pending;
@@ -353,7 +564,7 @@ eina_freeq_ptr_pending(Eina_FreeQ *fq)
return pending;
}
-EAPI void
+EINA_API void
eina_freeq_ptr_add(Eina_FreeQ *fq,
void *ptr,
void (*free_func) (void *ptr),
diff --git a/src/lib/eina/eina_freeq.h b/src/lib/eina/eina_freeq.h
index a9c789c42e..d867a1c0d7 100644
--- a/src/lib/eina/eina_freeq.h
+++ b/src/lib/eina/eina_freeq.h
@@ -62,18 +62,18 @@
* will be filled with this pattern value in every byte. The default value
* is 0x77 (119). Memory is only filled if the size of the allocation is
* less than the max that you can adjust with EINA_FREEQ_FILL_MAX.
- *
+ *
* @{
*
* @since 1.19
- *
+ *
* @typedef Eina_FreeQ
*
* A queue of pointers to free in the future. You may create custom free
* queues of your own to defer freeing, use the main free queue where the
* mainloop will free things as it iterates, or eina will free everything
* on shut down.
- *
+ *
*/
typedef struct _Eina_FreeQ Eina_FreeQ;
@@ -126,17 +126,17 @@ typedef enum _Eina_FreeQ_Type
* @return A new free queue
* @since 1.19
*/
-EAPI Eina_FreeQ *
+EINA_API Eina_FreeQ *
eina_freeq_new(Eina_FreeQ_Type type);
/**
* @brief Free a free queue and anything that is queued in it.
*
* @param[in,out] fq The free queue to free and clear.
- *
+ *
* @since 1.19
*/
-EAPI void
+EINA_API void
eina_freeq_free(Eina_FreeQ *fq);
/**
@@ -146,17 +146,17 @@ eina_freeq_free(Eina_FreeQ *fq);
*
* @since 1.19
*/
-EAPI Eina_FreeQ_Type
+EINA_API Eina_FreeQ_Type
eina_freeq_type_get(Eina_FreeQ *fq);
/**
* @brief Get the main loop free queue.
*
* @return The main loop free queue.
- *
+ *
* @since 1.19
*/
-EAPI Eina_FreeQ *
+EINA_API Eina_FreeQ *
eina_freeq_main_get(void);
/**
@@ -177,7 +177,7 @@ eina_freeq_main_get(void);
*
* @since 1.19
*/
-EAPI void
+EINA_API void
eina_freeq_count_max_set(Eina_FreeQ *fq, int count);
/**
@@ -185,10 +185,10 @@ eina_freeq_count_max_set(Eina_FreeQ *fq, int count);
*
* @param[in] fq The free queue to query
* @return The maximum number of free items allowed or -1 for infinity
- *
+ *
* @since 1.19
*/
-EAPI int
+EINA_API int
eina_freeq_count_max_get(Eina_FreeQ *fq);
/**
@@ -207,10 +207,10 @@ eina_freeq_count_max_get(Eina_FreeQ *fq);
*
* @note Setting a memory limit on a postponed free queue leads to undefined
* behavior.
- *
+ *
* @since 1.19
*/
-EAPI void
+EINA_API void
eina_freeq_mem_max_set(Eina_FreeQ *fq, size_t mem);
/**
@@ -221,7 +221,7 @@ eina_freeq_mem_max_set(Eina_FreeQ *fq, size_t mem);
*
* @since 1.19
*/
-EAPI size_t
+EINA_API size_t
eina_freeq_mem_max_get(Eina_FreeQ *fq);
/**
@@ -232,10 +232,10 @@ eina_freeq_mem_max_get(Eina_FreeQ *fq);
* This will free and thus remove all queued items from the free queue when
* this function is called. When it returns the free queue should be
* empty.
- *
+ *
* @since 1.19
*/
-EAPI void
+EINA_API void
eina_freeq_clear(Eina_FreeQ *fq);
/**
@@ -248,21 +248,21 @@ eina_freeq_clear(Eina_FreeQ *fq);
* and thus reduce the amount of memory it is holding on to. This function
* will return once it has removed @p count items or there are no more items
* to remove from the queue.
- *
+ *
* @since 1.19
*/
-EAPI void
+EINA_API void
eina_freeq_reduce(Eina_FreeQ *fq, int count);
/**
* @brief Return if there are any items pending a free in the free queue
*
* @param[in] fq The free queue to query
- * @raturn EINA_TRUE if there are items to free, EINA_FALSE otherwise
- *
+ * @return EINA_TRUE if there are items to free, EINA_FALSE otherwise
+ *
* @since 1.19
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_freeq_ptr_pending(Eina_FreeQ *fq);
/**
@@ -303,10 +303,10 @@ eina_freeq_ptr_pending(Eina_FreeQ *fq);
* This note does not apply if you use a size of 0 for the pointer, but then
* you lose canary debugging ability when using 0 sized pointers on the free
* queue.
- *
+ *
* @since 1.19
*/
-EAPI void
+EINA_API void
eina_freeq_ptr_add(Eina_FreeQ *fq, void *ptr, void (*free_func) (void *ptr), size_t size);
/**
@@ -315,10 +315,10 @@ eina_freeq_ptr_add(Eina_FreeQ *fq, void *ptr, void (*free_func) (void *ptr), siz
* @param[in] ptr The pointer to free
* @param[in] free_func The function used to free the pointer with
* @param[in] size The size of the data the pointer points to
- *
+ *
* This is the same as eina_freeq_ptr_add() but the main free queue is
* fetched by eina_freeq_main_get().
- *
+ *
* @since 1.19
*/
static inline void
@@ -331,12 +331,12 @@ eina_freeq_ptr_main_add(void *ptr, void (*free_func) (void *ptr), size_t size)
* @brief Convenience macro for well known structures and types
*
* @param[in] ptr The pointer to free
- *
+ *
* This is the same as eina_freeq_ptr_main_add() but the free function is
* assumed to be the libc free() function, and size is provided by
* sizeof(*ptr), so it will not work on void pointers or will be inaccurate
* for pointers to arrays. For arrays please use EINA_FREEQ_ARRAY_FREE()
- *
+ *
* @since 1.19
*/
#define EINA_FREEQ_FREE(ptr) eina_freeq_ptr_main_add(ptr, NULL, sizeof(*(ptr)))
@@ -345,12 +345,12 @@ eina_freeq_ptr_main_add(void *ptr, void (*free_func) (void *ptr), size_t size)
* @brief Convenience macro for well known structures and types
*
* @param[in] ptr The pointer to free
- *
+ *
* This is the same as eina_freeq_ptr_main_add() but the free function is
* assumed to be the libc free() function, and size is provided by
* sizeof(*ptr), so it will not work on void pointers. Total size is multiplied
* by the count @p n so it should work well for arrays of types.
- *
+ *
* @since 1.19
*/
#define EINA_FREEQ_N_FREE(ptr, n) eina_freeq_ptr_main_add(ptr, NULL, sizeof(*(ptr)) * n)
diff --git a/src/lib/eina/eina_hamster.c b/src/lib/eina/eina_hamster.c
index 261713b734..9ed4286a61 100644
--- a/src/lib/eina/eina_hamster.c
+++ b/src/lib/eina/eina_hamster.c
@@ -53,7 +53,7 @@ static const int _eina_hamster =
* API *
*============================================================================*/
-EAPI int
+EINA_API int
eina_hamster_count(void)
{
return _eina_hamster;
diff --git a/src/lib/eina/eina_hamster.h b/src/lib/eina/eina_hamster.h
index e5b7129f04..165763cf3b 100644
--- a/src/lib/eina/eina_hamster.h
+++ b/src/lib/eina/eina_hamster.h
@@ -20,14 +20,6 @@
#define EINA_HAMSTER_H_
/**
- * @addtogroup Eina_Hamster_Group Hamster
- *
- * @brief These functions provide hamster calls.
- *
- * @{
- */
-
-/**
* @addtogroup Eina_Core_Group Core
*
* @{
@@ -35,9 +27,12 @@
/**
* @defgroup Eina_Hamster_Group Hamster
+ *
+ * @brief These functions provide hamster calls.
+ *
+ * @{
*/
-
/**
* @brief Gets the hamster count.
*
@@ -45,7 +40,7 @@
*
* This function returns how many hamsters you have.
*/
-EAPI int eina_hamster_count(void);
+EINA_API int eina_hamster_count(void);
/**
* @}
diff --git a/src/lib/eina/eina_hash.c b/src/lib/eina/eina_hash.c
index d313e57d60..a0edb8c692 100644
--- a/src/lib/eina/eina_hash.c
+++ b/src/lib/eina/eina_hash.c
@@ -729,7 +729,7 @@ _eina_hash_iterator_free(Eina_Iterator_Hash *it)
* API *
*============================================================================*/
-EAPI void
+EINA_API void
eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb)
{
EINA_MAGIC_CHECK_HASH(hash);
@@ -738,7 +738,7 @@ eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb)
hash->data_free_cb = data_free_cb;
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_new(Eina_Key_Length key_length_cb,
Eina_Key_Cmp key_cmp_cb,
Eina_Key_Hash key_hash_cb,
@@ -776,7 +776,7 @@ on_error:
return NULL;
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb)
{
return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
@@ -786,7 +786,7 @@ eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb)
EINA_HASH_BUCKET_SIZE);
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb)
{
return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
@@ -796,7 +796,7 @@ eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb)
EINA_HASH_BUCKET_SIZE);
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_string_small_new(Eina_Free_Cb data_free_cb)
{
return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
@@ -806,7 +806,7 @@ eina_hash_string_small_new(Eina_Free_Cb data_free_cb)
EINA_HASH_SMALL_BUCKET_SIZE);
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_int32_new(Eina_Free_Cb data_free_cb)
{
return eina_hash_new(EINA_KEY_LENGTH(_eina_int32_key_length),
@@ -816,7 +816,7 @@ eina_hash_int32_new(Eina_Free_Cb data_free_cb)
EINA_HASH_BUCKET_SIZE);
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_int64_new(Eina_Free_Cb data_free_cb)
{
return eina_hash_new(EINA_KEY_LENGTH(_eina_int64_key_length),
@@ -826,7 +826,7 @@ eina_hash_int64_new(Eina_Free_Cb data_free_cb)
EINA_HASH_BUCKET_SIZE);
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_pointer_new(Eina_Free_Cb data_free_cb)
{
#ifdef EFL64
@@ -844,7 +844,7 @@ eina_hash_pointer_new(Eina_Free_Cb data_free_cb)
#endif
}
-EAPI Eina_Hash *
+EINA_API Eina_Hash *
eina_hash_stringshared_new(Eina_Free_Cb data_free_cb)
{
return eina_hash_new(NULL,
@@ -854,7 +854,7 @@ eina_hash_stringshared_new(Eina_Free_Cb data_free_cb)
EINA_HASH_BUCKET_SIZE);
}
-EAPI int
+EINA_API int
eina_hash_population(const Eina_Hash *hash)
{
if (!hash)
@@ -864,7 +864,7 @@ eina_hash_population(const Eina_Hash *hash)
return hash->population;
}
-EAPI void
+EINA_API void
eina_hash_free(Eina_Hash *hash)
{
int i;
@@ -882,7 +882,7 @@ eina_hash_free(Eina_Hash *hash)
free(hash);
}
-EAPI void
+EINA_API void
eina_hash_free_buckets(Eina_Hash *hash)
{
int i;
@@ -902,7 +902,7 @@ eina_hash_free_buckets(Eina_Hash *hash)
}
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_add_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
@@ -917,7 +917,7 @@ eina_hash_add_by_hash(Eina_Hash *hash,
data);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_direct_add_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
@@ -927,7 +927,7 @@ eina_hash_direct_add_by_hash(Eina_Hash *hash,
return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_add(Eina_Hash *hash, const void *key, const void *data)
{
int key_length;
@@ -944,7 +944,7 @@ eina_hash_add(Eina_Hash *hash, const void *key, const void *data)
return eina_hash_add_alloc_by_hash(hash, key, key_length, key_length, key_hash, data);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data)
{
int key_length;
@@ -961,7 +961,7 @@ eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data)
return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_del_by_key_hash(Eina_Hash *hash,
const void *key,
int key_length,
@@ -973,7 +973,7 @@ eina_hash_del_by_key_hash(Eina_Hash *hash,
return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, NULL);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_del_by_key(Eina_Hash *hash, const void *key)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
@@ -982,7 +982,7 @@ eina_hash_del_by_key(Eina_Hash *hash, const void *key)
return _eina_hash_del_by_key(hash, key, NULL);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_del_by_data(Eina_Hash *hash, const void *data)
{
Eina_Hash_Element *hash_element;
@@ -1006,7 +1006,7 @@ error:
return EINA_FALSE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_del_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
@@ -1026,7 +1026,7 @@ eina_hash_del_by_hash(Eina_Hash *hash,
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_del(Eina_Hash *hash, const void *key, const void *data)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
@@ -1038,7 +1038,7 @@ eina_hash_del(Eina_Hash *hash, const void *key, const void *data)
return _eina_hash_del_by_key(hash, key, data);
}
-EAPI void *
+EINA_API void *
eina_hash_find_by_hash(const Eina_Hash *hash,
const void *key,
int key_length,
@@ -1065,7 +1065,7 @@ eina_hash_find_by_hash(const Eina_Hash *hash,
return NULL;
}
-EAPI void *
+EINA_API void *
eina_hash_find(const Eina_Hash *hash, const void *key)
{
int key_length;
@@ -1086,7 +1086,7 @@ eina_hash_find(const Eina_Hash *hash, const void *key)
return eina_hash_find_by_hash(hash, key, key_length, key_hash);
}
-EAPI void *
+EINA_API void *
eina_hash_modify_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
@@ -1117,7 +1117,7 @@ eina_hash_modify_by_hash(Eina_Hash *hash,
return old_data;
}
-EAPI void *
+EINA_API void *
eina_hash_set(Eina_Hash *hash, const void *key, const void *data)
{
Eina_Hash_Tuple tuple;
@@ -1170,7 +1170,7 @@ eina_hash_set(Eina_Hash *hash, const void *key, const void *data)
return NULL;
}
-EAPI void *
+EINA_API void *
eina_hash_modify(Eina_Hash *hash, const void *key, const void *data)
{
int key_length;
@@ -1187,7 +1187,7 @@ eina_hash_modify(Eina_Hash *hash, const void *key, const void *data)
return eina_hash_modify_by_hash(hash, key, key_length, key_hash, data);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_hash_move(Eina_Hash *hash, const void *old_key, const void *new_key)
{
Eina_Free_Cb hash_free_cb;
@@ -1219,7 +1219,7 @@ error:
* Iterator *
*============================================================================*/
-EAPI void
+EINA_API void
eina_hash_foreach(const Eina_Hash *hash,
Eina_Hash_Foreach func,
const void *fdata)
@@ -1242,7 +1242,7 @@ eina_hash_foreach(const Eina_Hash *hash,
eina_iterator_free(it);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_hash_iterator_data_new(const Eina_Hash *hash)
{
Eina_Iterator_Hash *it;
@@ -1268,7 +1268,7 @@ eina_hash_iterator_data_new(const Eina_Hash *hash)
return &it->iterator;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_hash_iterator_key_new(const Eina_Hash *hash)
{
Eina_Iterator_Hash *it;
@@ -1295,7 +1295,7 @@ eina_hash_iterator_key_new(const Eina_Hash *hash)
return &it->iterator;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_hash_iterator_tuple_new(const Eina_Hash *hash)
{
Eina_Iterator_Hash *it;
@@ -1326,7 +1326,7 @@ eina_hash_iterator_tuple_new(const Eina_Hash *hash)
/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html)
used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */
-EAPI int
+EINA_API int
eina_hash_superfast(const char *key, int len)
{
int hash = len, tmp;
@@ -1378,7 +1378,7 @@ eina_hash_superfast(const char *key, int len)
return hash;
}
-EAPI void
+EINA_API void
eina_hash_list_append(Eina_Hash *hash, const void *key, const void *data)
{
Eina_Hash_Tuple tuple;
@@ -1411,7 +1411,7 @@ eina_hash_list_append(Eina_Hash *hash, const void *key, const void *data)
eina_list_append(NULL, data));
}
-EAPI void
+EINA_API void
eina_hash_list_direct_append(Eina_Hash *hash, const void *key, const void *data)
{
Eina_Hash_Tuple tuple;
@@ -1444,7 +1444,7 @@ eina_hash_list_direct_append(Eina_Hash *hash, const void *key, const void *data)
eina_list_append(NULL, data));
}
-EAPI void
+EINA_API void
eina_hash_list_prepend(Eina_Hash *hash, const void *key, const void *data)
{
Eina_Hash_Tuple tuple;
@@ -1477,7 +1477,7 @@ eina_hash_list_prepend(Eina_Hash *hash, const void *key, const void *data)
eina_list_append(NULL, data));
}
-EAPI void
+EINA_API void
eina_hash_list_direct_prepend(Eina_Hash *hash, const void *key, const void *data)
{
Eina_Hash_Tuple tuple;
@@ -1510,7 +1510,7 @@ eina_hash_list_direct_prepend(Eina_Hash *hash, const void *key, const void *data
eina_list_append(NULL, data));
}
-EAPI void
+EINA_API void
eina_hash_list_remove(Eina_Hash *hash, const void *key, const void *data)
{
Eina_Hash_Tuple tuple;
diff --git a/src/lib/eina/eina_hash.h b/src/lib/eina/eina_hash.h
index e7a122994d..207cd632e0 100644
--- a/src/lib/eina/eina_hash.h
+++ b/src/lib/eina/eina_hash.h
@@ -320,7 +320,7 @@ typedef unsigned int (*Eina_Key_Length)(const void *key);
typedef int (*Eina_Key_Cmp)(const void *key1, int key1_length, const void *key2, int key2_length);
/**
* @def EINA_KEY_CMP
- * @param[in]Function The function used to compare hash key.
+ * @param[in] Function The function used to compare hash key.
*/
#define EINA_KEY_CMP(Function) ((Eina_Key_Cmp)Function)
@@ -371,7 +371,7 @@ typedef Eina_Bool (*Eina_Hash_Foreach)(const Eina_Hash *hash, const void *key
* eina_hash_int64_new(), eina_hash_pointer_new() and
* eina_hash_stringshared_new().
*/
-EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb,
+EINA_API Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb,
Eina_Key_Cmp key_cmp_cb,
Eina_Key_Hash key_hash_cb,
Eina_Free_Cb data_free_cb,
@@ -391,7 +391,7 @@ EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb,
* @since 1.1
* @see eina_hash_new.
*/
-EAPI void eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) EINA_ARG_NONNULL(1);
+EINA_API void eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) EINA_ARG_NONNULL(1);
/**
* @brief Creates a new hash table using the djb2 algorithm.
@@ -406,7 +406,7 @@ EAPI void eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) EINA
* be looked up with pointers other than the original key pointer that
* was used to add values.
*/
-EAPI Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb);
+EINA_API Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb);
/**
* @brief Creates a new hash table for use with strings.
@@ -425,7 +425,7 @@ EAPI Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb);
* remotely request and push data in it. This hash is subject to denial
* of service.
*/
-EAPI Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb);
+EINA_API Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb);
/**
* @brief Creates a new hash table for use with strings with small bucket size.
@@ -442,7 +442,7 @@ EAPI Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb);
* table. Values can then be looked up with pointers other than the
* original key pointer that was used to add values.
*/
-EAPI Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb);
+EINA_API Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb);
/**
* @brief Creates a new hash table for use with 32bit integers.
@@ -460,7 +460,7 @@ EAPI Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb);
* used to add values. This method is not suitable to match string keys as
* it would only match the first character.
*/
-EAPI Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb);
+EINA_API Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb);
/**
* @brief Creates a new hash table for use with 64bit integers.
@@ -477,7 +477,7 @@ EAPI Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb);
* used to add values. This method is not suitable to match string keys as
* it would only match the first character.
*/
-EAPI Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb);
+EINA_API Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb);
/**
* @brief Creates a new hash table for use with pointers.
@@ -503,7 +503,7 @@ EAPI Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb);
* eina_hash_add(hash, &data, data);
* @endcode
*/
-EAPI Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb);
+EINA_API Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb);
/**
* @brief Creates a new hash table optimized for stringshared values.
@@ -528,7 +528,7 @@ EAPI Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb);
* eina_hash_find(hash, "key");
* @endcode
*/
-EAPI Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb);
+EINA_API Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb);
/**
* @brief Adds an entry to the given hash table.
@@ -553,7 +553,7 @@ EAPI Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb);
*
* Key strings are case sensitive.
*/
-EAPI Eina_Bool eina_hash_add(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_add(Eina_Hash *hash,
const void *key,
const void *data) EINA_ARG_NONNULL(1, 2, 3);
@@ -582,7 +582,7 @@ EAPI Eina_Bool eina_hash_add(Eina_Hash *hash,
* @p key, so it must be a string constant or stored elsewhere (such as
* in the object being added). Key strings are case sensitive.
*/
-EAPI Eina_Bool eina_hash_direct_add(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_direct_add(Eina_Hash *hash,
const void *key,
const void *data) EINA_ARG_NONNULL(1, 2, 3);
@@ -607,7 +607,7 @@ EAPI Eina_Bool eina_hash_direct_add(Eina_Hash *hash,
* eina_hash_del_by_key_hash(). If you don't have the key, use
* eina_hash_del_by_data() directly.
*/
-EAPI Eina_Bool eina_hash_del(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_del(Eina_Hash *hash,
const void *key,
const void *data) EINA_ARG_NONNULL(1);
@@ -622,7 +622,7 @@ EAPI Eina_Bool eina_hash_del(Eina_Hash *hash,
* This function retrieves the entry associated with @p key in
* @p hash. If @p hash is @c NULL, this function returns @c NULL.
*/
-EAPI void *eina_hash_find(const Eina_Hash *hash,
+EINA_API void *eina_hash_find(const Eina_Hash *hash,
const void *key) EINA_ARG_NONNULL(2);
/**
@@ -637,7 +637,7 @@ EAPI void *eina_hash_find(const Eina_Hash *hash,
* This function modifies the data of @p key with @p data in @p
* hash. If no entry is found, nothing is added to @p hash.
*/
-EAPI void *eina_hash_modify(Eina_Hash *hash,
+EINA_API void *eina_hash_modify(Eina_Hash *hash,
const void *key,
const void *data) EINA_ARG_NONNULL(1, 2, 3);
@@ -655,7 +655,7 @@ EAPI void *eina_hash_modify(Eina_Hash *hash,
* hash. If no entry is found, @p data is added to @p hash with the
* key @p key.
*/
-EAPI void *eina_hash_set(Eina_Hash *hash,
+EINA_API void *eina_hash_set(Eina_Hash *hash,
const void *key,
const void *data) EINA_ARG_NONNULL(1, 2);
@@ -672,7 +672,7 @@ EAPI void *eina_hash_set(Eina_Hash *hash,
* but does not call the Eina_Free_Cb associated with the hash table
* when destroying the old key.
*/
-EAPI Eina_Bool eina_hash_move(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_move(Eina_Hash *hash,
const void *old_key,
const void *new_key) EINA_ARG_NONNULL(1, 2, 3);
@@ -699,7 +699,7 @@ EAPI Eina_Bool eina_hash_move(Eina_Hash *hash,
* hash = NULL;
* @endcode
*/
-EAPI void eina_hash_free(Eina_Hash *hash) EINA_ARG_NONNULL(1);
+EINA_API void eina_hash_free(Eina_Hash *hash) EINA_ARG_NONNULL(1);
/**
* @brief Frees the given hash table buckets resources.
@@ -715,7 +715,7 @@ EAPI void eina_hash_free(Eina_Hash *hash) EINA_ARG_NONNULL(1);
*
* If @p hash is @c NULL, the function returns immediately.
*/
-EAPI void eina_hash_free_buckets(Eina_Hash *hash) EINA_ARG_NONNULL(1);
+EINA_API void eina_hash_free_buckets(Eina_Hash *hash) EINA_ARG_NONNULL(1);
/**
* @brief Returns the number of entries in the given hash table.
@@ -724,7 +724,7 @@ EAPI void eina_hash_free_buckets(Eina_Hash *hash) EINA_ARG_NONNULL(1);
* @return The number of entries in the hash table, or @c 0 on error or
* if @p hash is @c NULL.
*/
-EAPI int eina_hash_population(const Eina_Hash *hash) EINA_ARG_NONNULL(1);
+EINA_API int eina_hash_population(const Eina_Hash *hash) EINA_ARG_NONNULL(1);
/**
* @brief Adds an entry to the given hash table by its key hash.
@@ -747,7 +747,7 @@ EAPI int eina_hash_population(const Eina_Hash *hash) EINA_ARG_NONNULL(1);
*
* @see eina_hash_add()
*/
-EAPI Eina_Bool eina_hash_add_by_hash(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_add_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
int key_hash,
@@ -778,7 +778,7 @@ EAPI Eina_Bool eina_hash_add_by_hash(Eina_Hash *hash,
*
* @see eina_hash_direct_add()
*/
-EAPI Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
int key_hash,
@@ -803,7 +803,7 @@ EAPI Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash *hash,
* @note If you don't have the key_hash, use eina_hash_del_by_key()
* instead. If you don't have the key, use eina_hash_del_by_data().
*/
-EAPI Eina_Bool eina_hash_del_by_key_hash(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_del_by_key_hash(Eina_Hash *hash,
const void *key,
int key_length,
int key_hash) EINA_ARG_NONNULL(1, 2);
@@ -828,7 +828,7 @@ EAPI Eina_Bool eina_hash_del_by_key_hash(Eina_Hash *hash,
* @note If you already have the key_hash, use eina_hash_del_by_key_hash().
* If you don't have the key, use eina_hash_del_by_data() instead.
*/
-EAPI Eina_Bool eina_hash_del_by_key(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_del_by_key(Eina_Hash *hash,
const void *key) EINA_ARG_NONNULL(1, 2);
/**
@@ -850,7 +850,7 @@ EAPI Eina_Bool eina_hash_del_by_key(Eina_Hash *hash,
* @note If you already have the key, use eina_hash_del_by_key()
* or eina_hash_del_by_key_hash() instead.
*/
-EAPI Eina_Bool eina_hash_del_by_data(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_del_by_data(Eina_Hash *hash,
const void *data) EINA_ARG_NONNULL(1, 2);
/**
@@ -880,7 +880,7 @@ EAPI Eina_Bool eina_hash_del_by_data(Eina_Hash *hash,
* @note If you already have the key, use eina_hash_del_by_key_hash().
* If you don't have the key, use eina_hash_del_by_data() directly.
*/
-EAPI Eina_Bool eina_hash_del_by_hash(Eina_Hash *hash,
+EINA_API Eina_Bool eina_hash_del_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
int key_hash,
@@ -901,7 +901,7 @@ EAPI Eina_Bool eina_hash_del_by_hash(Eina_Hash *hash,
* @p key. It is ignored if @p key is @c NULL. Do not forget to count
* '\\0' for string when setting the value of @p key_length.
*/
-EAPI void *eina_hash_find_by_hash(const Eina_Hash *hash,
+EINA_API void *eina_hash_find_by_hash(const Eina_Hash *hash,
const void *key,
int key_length,
int key_hash) EINA_ARG_NONNULL(1, 2);
@@ -921,7 +921,7 @@ EAPI void *eina_hash_find_by_hash(const Eina_Hash *hash,
* if not found. If an existing entry is not found, nothing is added to
* the hash.
*/
-EAPI void *eina_hash_modify_by_hash(Eina_Hash *hash,
+EINA_API void *eina_hash_modify_by_hash(Eina_Hash *hash,
const void *key,
int key_length,
int key_hash,
@@ -941,7 +941,7 @@ EAPI void *eina_hash_modify_by_hash(Eina_Hash *hash,
* @warning If the hash structure changes then the iterator becomes
* invalid; adding or removing items may lead to program crash.
*/
-EAPI Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns a new iterator associated with a hash.
@@ -957,7 +957,7 @@ EAPI Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash *hash) EINA_MALLO
* @warning If the hash structure changes then the iterator becomes
* invalid; adding or removing items may lead to program crash.
*/
-EAPI Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Returned a new iterator associated with hash keys and data.
@@ -976,7 +976,7 @@ EAPI Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash *hash) EINA_MALL
* @warning If the hash structure changes then the iterator becomes
* invalid; adding or removing items may lead to program crash.
*/
-EAPI Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Calls a function on every member stored in the hash table.
@@ -1013,7 +1013,7 @@ EAPI Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash *hash) EINA_MAL
* }
* @endcode
*/
-EAPI void eina_hash_foreach(const Eina_Hash *hash,
+EINA_API void eina_hash_foreach(const Eina_Hash *hash,
Eina_Hash_Foreach func,
const void *fdata) EINA_ARG_NONNULL(1, 2);
@@ -1031,7 +1031,7 @@ EAPI void eina_hash_foreach(const Eina_Hash *hash,
*
* @since 1.10
*/
-EAPI void eina_hash_list_append(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API void eina_hash_list_append(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Appends data to an #Eina_List inside a hash using eina_hash_direct_add().
@@ -1046,7 +1046,7 @@ EAPI void eina_hash_list_append(Eina_Hash *hash, const void *key, const void *da
*
* @since 1.23
*/
-EAPI void eina_hash_list_direct_append(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API void eina_hash_list_direct_append(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Prepends data to an #Eina_List inside a hash.
@@ -1061,7 +1061,7 @@ EAPI void eina_hash_list_direct_append(Eina_Hash *hash, const void *key, const v
*
* @since 1.10
*/
-EAPI void eina_hash_list_prepend(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API void eina_hash_list_prepend(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Prepends data to an #Eina_List inside a hash using eina_hash_direct_add().
@@ -1076,7 +1076,7 @@ EAPI void eina_hash_list_prepend(Eina_Hash *hash, const void *key, const void *d
*
* @since 1.23
*/
-EAPI void eina_hash_list_direct_prepend(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API void eina_hash_list_direct_prepend(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Removes data from an #Eina_List inside a hash.
@@ -1091,7 +1091,7 @@ EAPI void eina_hash_list_direct_prepend(Eina_Hash *hash, const void *key, const
*
* @since 1.10
*/
-EAPI void eina_hash_list_remove(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API void eina_hash_list_remove(Eina_Hash *hash, const void *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief
@@ -1101,7 +1101,7 @@ EAPI void eina_hash_list_remove(Eina_Hash *hash, const void *key, const void *da
* @param[in] len The length of the key.
* @return The hash value.
*/
-EAPI int eina_hash_superfast(const char *key,
+EINA_API int eina_hash_superfast(const char *key,
int len) EINA_ARG_NONNULL(1);
/**
diff --git a/src/lib/eina/eina_inarray.c b/src/lib/eina/eina_inarray.c
index 709ae6ff36..35e0d1b17d 100644
--- a/src/lib/eina/eina_inarray.c
+++ b/src/lib/eina/eina_inarray.c
@@ -338,7 +338,7 @@ eina_inarray_shutdown(void)
/*============================================================================*
* API *
*============================================================================*/
-EAPI Eina_Inarray *
+EINA_API Eina_Inarray *
eina_inarray_new(unsigned int member_size, unsigned int step)
{
Eina_Inarray *ret;
@@ -351,7 +351,7 @@ eina_inarray_new(unsigned int member_size, unsigned int step)
return ret;
}
-EAPI void
+EINA_API void
eina_inarray_free(Eina_Inarray *array)
{
if (!array)
@@ -362,7 +362,7 @@ eina_inarray_free(Eina_Inarray *array)
free(array);
}
-EAPI void
+EINA_API void
eina_inarray_step_set(Eina_Inarray *array,
unsigned int sizeof_eina_inarray,
unsigned int member_size,
@@ -384,7 +384,7 @@ eina_inarray_step_set(Eina_Inarray *array,
_eina_inarray_setup(array, member_size, step);
}
-EAPI void
+EINA_API void
eina_inarray_flush(Eina_Inarray *array)
{
EINA_MAGIC_CHECK_INARRAY(array);
@@ -394,7 +394,7 @@ eina_inarray_flush(Eina_Inarray *array)
array->members = NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_inarray_resize(Eina_Inarray *array, unsigned int new_size)
{
Eina_Bool r;
@@ -407,7 +407,7 @@ eina_inarray_resize(Eina_Inarray *array, unsigned int new_size)
return EINA_TRUE;
}
-EAPI int
+EINA_API int
eina_inarray_push(Eina_Inarray *array, const void *data)
{
void *p;
@@ -425,7 +425,7 @@ eina_inarray_push(Eina_Inarray *array, const void *data)
return array->len - 1;
}
-EAPI void *
+EINA_API void *
eina_inarray_grow(Eina_Inarray *array, unsigned int size)
{
void *p;
@@ -442,7 +442,7 @@ eina_inarray_grow(Eina_Inarray *array, unsigned int size)
return p;
}
-EAPI int
+EINA_API int
eina_inarray_insert(Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
{
const unsigned char *itr, *itr_end;
@@ -471,7 +471,7 @@ eina_inarray_insert(Eina_Inarray *array, const void *data, Eina_Compare_Cb compa
return eina_inarray_push(array, data);
}
-EAPI int
+EINA_API int
eina_inarray_insert_sorted(Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
{
unsigned int pos;
@@ -490,7 +490,7 @@ eina_inarray_insert_sorted(Eina_Inarray *array, const void *data, Eina_Compare_C
return pos;
}
-EAPI int
+EINA_API int
eina_inarray_remove(Eina_Inarray *array, const void *data)
{
const unsigned char *itr, *itr_end;
@@ -528,18 +528,18 @@ found:
return position;
}
-EAPI void *
+EINA_API void *
eina_inarray_pop(Eina_Inarray *array)
{
EINA_MAGIC_CHECK_INARRAY(array, NULL);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(array->len == 0, NULL);
+ if (array->len == 0) return NULL;
if (!_eina_inarray_resize(array, array->len - 1))
return NULL;
array->len--;
return _eina_inarray_get(array, array->len);
}
-EAPI void *
+EINA_API void *
eina_inarray_nth(const Eina_Inarray *array, unsigned int position)
{
EINA_MAGIC_CHECK_INARRAY(array, NULL);
@@ -547,7 +547,7 @@ eina_inarray_nth(const Eina_Inarray *array, unsigned int position)
return _eina_inarray_get(array, position);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_inarray_insert_at(Eina_Inarray *array, unsigned int position, const void *data)
{
unsigned int sz;
@@ -569,7 +569,7 @@ eina_inarray_insert_at(Eina_Inarray *array, unsigned int position, const void *d
return EINA_TRUE;
}
-EAPI void *
+EINA_API void *
eina_inarray_alloc_at(Eina_Inarray *array, unsigned int position, unsigned int member_count)
{
unsigned int sz;
@@ -591,7 +591,7 @@ eina_inarray_alloc_at(Eina_Inarray *array, unsigned int position, unsigned int m
return p;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_inarray_replace_at(Eina_Inarray *array, unsigned int position, const void *data)
{
unsigned char *p;
@@ -605,7 +605,7 @@ eina_inarray_replace_at(Eina_Inarray *array, unsigned int position, const void *
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_inarray_remove_at(Eina_Inarray *array, unsigned int position)
{
EINA_MAGIC_CHECK_INARRAY(array, EINA_FALSE);
@@ -623,7 +623,7 @@ eina_inarray_remove_at(Eina_Inarray *array, unsigned int position)
return EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_inarray_reverse(Eina_Inarray *array)
{
size_t sz;
@@ -653,7 +653,7 @@ eina_inarray_reverse(Eina_Inarray *array)
}
}
-EAPI void
+EINA_API void
eina_inarray_sort(Eina_Inarray *array, Eina_Compare_Cb compare)
{
EINA_MAGIC_CHECK_INARRAY(array);
@@ -661,7 +661,7 @@ eina_inarray_sort(Eina_Inarray *array, Eina_Compare_Cb compare)
qsort(array->members, array->len, array->member_size, compare);
}
-EAPI int
+EINA_API int
eina_inarray_search(const Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
{
EINA_MAGIC_CHECK_INARRAY(array, -1);
@@ -670,7 +670,7 @@ eina_inarray_search(const Eina_Inarray *array, const void *data, Eina_Compare_Cb
return _eina_inarray_search(array, data, compare);
}
-EAPI int
+EINA_API int
eina_inarray_search_sorted(const Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
{
unsigned int pos;
@@ -686,7 +686,7 @@ eina_inarray_search_sorted(const Eina_Inarray *array, const void *data, Eina_Com
return -1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_inarray_foreach(const Eina_Inarray *array, Eina_Each_Cb function, const void *user_data)
{
unsigned char *itr, *itr_end;
@@ -704,7 +704,7 @@ eina_inarray_foreach(const Eina_Inarray *array, Eina_Each_Cb function, const voi
return ret;
}
-EAPI int
+EINA_API int
eina_inarray_foreach_remove(Eina_Inarray *array, Eina_Each_Cb match, const void *user_data)
{
unsigned int i = 0, count = 0;
@@ -728,14 +728,14 @@ eina_inarray_foreach_remove(Eina_Inarray *array, Eina_Each_Cb match, const void
return count;
}
-EAPI unsigned int
+EINA_API unsigned int
eina_inarray_count(const Eina_Inarray *array)
{
EINA_MAGIC_CHECK_INARRAY(array, 0);
return array->len;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_inarray_iterator_new(const Eina_Inarray *array)
{
Eina_Iterator_Inarray *it;
@@ -759,7 +759,7 @@ eina_inarray_iterator_new(const Eina_Inarray *array)
return &it->iterator;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_inarray_iterator_reversed_new(const Eina_Inarray *array)
{
Eina_Iterator_Inarray *it;
@@ -784,7 +784,7 @@ eina_inarray_iterator_reversed_new(const Eina_Inarray *array)
return &it->iterator;
}
-EAPI Eina_Accessor *
+EINA_API Eina_Accessor *
eina_inarray_accessor_new(const Eina_Inarray *array)
{
Eina_Accessor_Inarray *ac;
diff --git a/src/lib/eina/eina_inarray.h b/src/lib/eina/eina_inarray.h
index 306d8498ae..90667221ef 100644
--- a/src/lib/eina/eina_inarray.h
+++ b/src/lib/eina/eina_inarray.h
@@ -252,7 +252,7 @@ struct _Eina_Inarray
*
* @since 1.2
*/
-EAPI Eina_Inarray *eina_inarray_new(unsigned int member_size,
+EINA_API Eina_Inarray *eina_inarray_new(unsigned int member_size,
unsigned int step) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
@@ -264,7 +264,7 @@ EAPI Eina_Inarray *eina_inarray_new(unsigned int member_size,
*
* @since 1.2
*/
-EAPI void eina_inarray_free(Eina_Inarray *array) EINA_ARG_NONNULL(1);
+EINA_API void eina_inarray_free(Eina_Inarray *array) EINA_ARG_NONNULL(1);
/**
* @brief Initializes an inline array.
@@ -284,7 +284,7 @@ EAPI void eina_inarray_free(Eina_Inarray *array) EINA_ARG_NONNULL(1);
*
* @since 1.2
*/
-EAPI void eina_inarray_step_set(Eina_Inarray *array,
+EINA_API void eina_inarray_step_set(Eina_Inarray *array,
unsigned int sizeof_eina_inarray,
unsigned int member_size,
unsigned int step) EINA_ARG_NONNULL(1);
@@ -296,7 +296,7 @@ EAPI void eina_inarray_step_set(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI void eina_inarray_flush(Eina_Inarray *array) EINA_ARG_NONNULL(1);
+EINA_API void eina_inarray_flush(Eina_Inarray *array) EINA_ARG_NONNULL(1);
/**
* @brief Copies the data as the last member of the array.
@@ -312,7 +312,7 @@ EAPI void eina_inarray_flush(Eina_Inarray *array) EINA_ARG_NONNULL(1);
*
* @since 1.2
*/
-EAPI int eina_inarray_push(Eina_Inarray *array,
+EINA_API int eina_inarray_push(Eina_Inarray *array,
const void *data) EINA_ARG_NONNULL(1, 2);
/**
@@ -326,7 +326,7 @@ EAPI int eina_inarray_push(Eina_Inarray *array,
*
* @since 1.8
*/
-EAPI void *eina_inarray_grow(Eina_Inarray *array, unsigned int size);
+EINA_API void *eina_inarray_grow(Eina_Inarray *array, unsigned int size);
/**
* @brief Copies the data to the array at a position found by the comparison function.
@@ -349,7 +349,7 @@ EAPI void *eina_inarray_grow(Eina_Inarray *array, unsigned int size);
*
* @since 1.2
*/
-EAPI int eina_inarray_insert(Eina_Inarray *array,
+EINA_API int eina_inarray_insert(Eina_Inarray *array,
const void *data,
Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
@@ -375,7 +375,7 @@ EAPI int eina_inarray_insert(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI int eina_inarray_insert_sorted(Eina_Inarray *array,
+EINA_API int eina_inarray_insert_sorted(Eina_Inarray *array,
const void *data,
Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
@@ -394,7 +394,7 @@ EAPI int eina_inarray_insert_sorted(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI int eina_inarray_remove(Eina_Inarray *array,
+EINA_API int eina_inarray_remove(Eina_Inarray *array,
const void *data) EINA_ARG_NONNULL(1, 2);
/**
@@ -407,7 +407,7 @@ EAPI int eina_inarray_remove(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI void *eina_inarray_pop(Eina_Inarray *array) EINA_ARG_NONNULL(1);
+EINA_API void *eina_inarray_pop(Eina_Inarray *array) EINA_ARG_NONNULL(1);
/**
* @brief Gets the member at the given position.
@@ -422,7 +422,7 @@ EAPI void *eina_inarray_pop(Eina_Inarray *array) EINA_ARG_NONNULL(1);
*
* @since 1.2
*/
-EAPI void *eina_inarray_nth(const Eina_Inarray *array,
+EINA_API void *eina_inarray_nth(const Eina_Inarray *array,
unsigned int position) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
@@ -447,7 +447,7 @@ EAPI void *eina_inarray_nth(const Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI Eina_Bool eina_inarray_insert_at(Eina_Inarray *array,
+EINA_API Eina_Bool eina_inarray_insert_at(Eina_Inarray *array,
unsigned int position,
const void *data) EINA_ARG_NONNULL(1, 3);
@@ -477,7 +477,7 @@ EAPI Eina_Bool eina_inarray_insert_at(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI void *eina_inarray_alloc_at(Eina_Inarray *array,
+EINA_API void *eina_inarray_alloc_at(Eina_Inarray *array,
unsigned int position,
unsigned int member_count) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
@@ -497,7 +497,7 @@ EAPI void *eina_inarray_alloc_at(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI Eina_Bool eina_inarray_replace_at(Eina_Inarray *array,
+EINA_API Eina_Bool eina_inarray_replace_at(Eina_Inarray *array,
unsigned int position,
const void *data) EINA_ARG_NONNULL(1, 3);
@@ -516,7 +516,7 @@ EAPI Eina_Bool eina_inarray_replace_at(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI Eina_Bool eina_inarray_remove_at(Eina_Inarray *array,
+EINA_API Eina_Bool eina_inarray_remove_at(Eina_Inarray *array,
unsigned int position) EINA_ARG_NONNULL(1);
/**
@@ -531,7 +531,7 @@ EAPI Eina_Bool eina_inarray_remove_at(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI void eina_inarray_reverse(Eina_Inarray *array) EINA_ARG_NONNULL(1);
+EINA_API void eina_inarray_reverse(Eina_Inarray *array) EINA_ARG_NONNULL(1);
/**
* @brief Applies a quick sort to the array.
@@ -547,7 +547,7 @@ EAPI void eina_inarray_reverse(Eina_Inarray *array) EINA_ARG_NONNULL(1);
*
* @since 1.2
*/
-EAPI void eina_inarray_sort(Eina_Inarray *array,
+EINA_API void eina_inarray_sort(Eina_Inarray *array,
Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2);
/**
@@ -565,7 +565,7 @@ EAPI void eina_inarray_sort(Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI int eina_inarray_search(const Eina_Inarray *array,
+EINA_API int eina_inarray_search(const Eina_Inarray *array,
const void *data,
Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
@@ -584,7 +584,7 @@ EAPI int eina_inarray_search(const Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI int eina_inarray_search_sorted(const Eina_Inarray *array,
+EINA_API int eina_inarray_search_sorted(const Eina_Inarray *array,
const void *data,
Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
@@ -607,7 +607,7 @@ EAPI int eina_inarray_search_sorted(const Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI Eina_Bool eina_inarray_foreach(const Eina_Inarray *array,
+EINA_API Eina_Bool eina_inarray_foreach(const Eina_Inarray *array,
Eina_Each_Cb function,
const void *user_data) EINA_ARG_NONNULL(1, 2);
@@ -623,7 +623,7 @@ EAPI Eina_Bool eina_inarray_foreach(const Eina_Inarray *array,
*
* @since 1.2
*/
-EAPI int eina_inarray_foreach_remove(Eina_Inarray *array,
+EINA_API int eina_inarray_foreach_remove(Eina_Inarray *array,
Eina_Each_Cb match,
const void *user_data) EINA_ARG_NONNULL(1, 2);
@@ -636,7 +636,7 @@ EAPI int eina_inarray_foreach_remove(Eina_Inarray *array,
*
* @since 1.10
*/
-EAPI Eina_Bool eina_inarray_resize(Eina_Inarray *array, unsigned int new_size);
+EINA_API Eina_Bool eina_inarray_resize(Eina_Inarray *array, unsigned int new_size);
/**
* @brief Counts the number of members in an array.
@@ -646,7 +646,7 @@ EAPI Eina_Bool eina_inarray_resize(Eina_Inarray *array, unsigned int new_size);
*
* @since 1.2
*/
-EAPI unsigned int eina_inarray_count(const Eina_Inarray *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API unsigned int eina_inarray_count(const Eina_Inarray *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns a new iterator associated to an array.
@@ -665,7 +665,7 @@ EAPI unsigned int eina_inarray_count(const Eina_Inarray *array) EINA_ARG_NONNULL
*
* @since 1.2
*/
-EAPI Eina_Iterator *eina_inarray_iterator_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Iterator *eina_inarray_iterator_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Returns a new reversed iterator associated to an array.
@@ -686,7 +686,7 @@ EAPI Eina_Iterator *eina_inarray_iterator_new(const Eina_Inarray *array) EINA_MA
*
* @since 1.2
*/
-EAPI Eina_Iterator *eina_inarray_iterator_reversed_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Iterator *eina_inarray_iterator_reversed_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Returns a new accessor associated to an array.
@@ -701,7 +701,7 @@ EAPI Eina_Iterator *eina_inarray_iterator_reversed_new(const Eina_Inarray *array
*
* @since 1.2
*/
-EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @def EINA_INARRAY_FOREACH
diff --git a/src/lib/eina/eina_inline_array.x b/src/lib/eina/eina_inline_array.x
index d750782ce8..cfed7edace 100644
--- a/src/lib/eina/eina_inline_array.x
+++ b/src/lib/eina/eina_inline_array.x
@@ -27,7 +27,7 @@
* @cond LOCAL
*/
-EAPI Eina_Bool eina_array_grow(Eina_Array *array);
+EINA_API Eina_Bool eina_array_grow(Eina_Array *array);
/**
* @endcond
@@ -44,16 +44,13 @@ EAPI Eina_Bool eina_array_grow(Eina_Array *array);
static inline Eina_Bool
eina_array_push(Eina_Array *array, const void *data)
{
- if (data)
- {
- if (EINA_UNLIKELY((array->count + 1) > array->total)) goto do_grow;
+ if (EINA_UNLIKELY(data == NULL)) return EINA_FALSE;
+ if (EINA_UNLIKELY((array->count + 1) > array->total)) goto do_grow;
do_grow_back:
- array->data[array->count++] = (void*) data;
+ array->data[array->count++] = (void*) data;
- return EINA_TRUE;
- }
- return EINA_FALSE;
+ return EINA_TRUE;
do_grow:
if (!eina_array_grow(array)) return EINA_FALSE;
goto do_grow_back;
@@ -89,6 +86,7 @@ eina_array_count_get(const Eina_Array *array)
static inline unsigned int
eina_array_count(const Eina_Array *array)
{
+ if (!array) return 0;
return array->count;
}
diff --git a/src/lib/eina/eina_inline_crc.x b/src/lib/eina/eina_inline_crc.x
index 41589f17fc..19f928a683 100644
--- a/src/lib/eina/eina_inline_crc.x
+++ b/src/lib/eina/eina_inline_crc.x
@@ -19,7 +19,7 @@
#ifndef EINA_INLINE_CRC_X_
#define EINA_INLINE_CRC_X_
-EAPI unsigned int _eina_crc(const char *data, int len, unsigned int seed, Eina_Bool start_stream);
+EINA_API unsigned int _eina_crc(const char *data, int len, unsigned int seed, Eina_Bool start_stream);
static inline unsigned int
eina_crc(const char *key, int len, unsigned int seed, Eina_Bool start_stream)
diff --git a/src/lib/eina/eina_inline_hash.x b/src/lib/eina/eina_inline_hash.x
index da983d83c9..801107a7ff 100644
--- a/src/lib/eina/eina_inline_hash.x
+++ b/src/lib/eina/eina_inline_hash.x
@@ -21,7 +21,7 @@
#include "eina_crc.h"
-EAPI extern unsigned int eina_seed;
+EINA_API extern unsigned int eina_seed;
/*
djb2 hash algorithm was first reported by dan bernstein, and was the old
diff --git a/src/lib/eina/eina_inline_lock_posix.x b/src/lib/eina/eina_inline_lock_posix.x
index 911b5c1f3b..80f42c3165 100644
--- a/src/lib/eina/eina_inline_lock_posix.x
+++ b/src/lib/eina/eina_inline_lock_posix.x
@@ -61,8 +61,8 @@ typedef void (*Eina_Lock_Bt_Func) ();
#include "eina_inlist.h"
#endif
-EAPI void _eina_lock_debug_abort(int err, const char *fn, const volatile void *ptr);
-EAPI void _eina_lock_debug_deadlock(const char *fn, const volatile void *ptr);
+EINA_API void _eina_lock_debug_abort(int err, const char *fn, const volatile void *ptr);
+EINA_API void _eina_lock_debug_deadlock(const char *fn, const volatile void *ptr);
#define EINA_LOCK_ABORT_DEBUG(err, fn, ptr) \
_eina_lock_debug_abort(err, #fn, ptr)
@@ -94,7 +94,7 @@ typedef semaphore_t Eina_Semaphore;
typedef sem_t Eina_Semaphore;
#endif
-EAPI void eina_lock_debug(const Eina_Lock *mutex);
+EINA_API void eina_lock_debug(const Eina_Lock *mutex);
/** @privatesection @{ */
struct _Eina_Lock
@@ -130,30 +130,30 @@ struct _Eina_RWLock
};
/** @} privatesection */
-EAPI extern Eina_Bool _eina_threads_activated;
+EINA_API extern Eina_Bool _eina_threads_activated;
#ifdef EINA_HAVE_DEBUG_THREADS
-EAPI extern int _eina_threads_debug;
-EAPI extern pthread_t _eina_main_loop;
-EAPI extern pthread_mutex_t _eina_tracking_lock;
-EAPI extern Eina_Inlist *_eina_tracking;
-#endif
-
-
-EAPI Eina_Bool _eina_lock_new(Eina_Lock *mutex, Eina_Bool recursive);
-EAPI void _eina_lock_free(Eina_Lock *mutex);
-EAPI Eina_Bool _eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex);
-EAPI void _eina_condition_free(Eina_Condition *cond);
-EAPI Eina_Bool _eina_rwlock_new(Eina_RWLock *mutex);
-EAPI void _eina_rwlock_free(Eina_RWLock *mutex);
-EAPI Eina_Bool _eina_spinlock_new(Eina_Spinlock *spinlock);
-EAPI void _eina_spinlock_free(Eina_Spinlock *spinlock);
-EAPI Eina_Bool _eina_semaphore_new(Eina_Semaphore *sem, int count_init);
-EAPI Eina_Bool _eina_semaphore_free(Eina_Semaphore *sem);
+EINA_API extern int _eina_threads_debug;
+EINA_API extern pthread_t _eina_main_loop;
+EINA_API extern pthread_mutex_t _eina_tracking_lock;
+EINA_API extern Eina_Inlist *_eina_tracking;
+#endif
+
+
+EINA_API Eina_Bool _eina_lock_new(Eina_Lock *mutex, Eina_Bool recursive);
+EINA_API void _eina_lock_free(Eina_Lock *mutex);
+EINA_API Eina_Bool _eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex);
+EINA_API void _eina_condition_free(Eina_Condition *cond);
+EINA_API Eina_Bool _eina_rwlock_new(Eina_RWLock *mutex);
+EINA_API void _eina_rwlock_free(Eina_RWLock *mutex);
+EINA_API Eina_Bool _eina_spinlock_new(Eina_Spinlock *spinlock);
+EINA_API void _eina_spinlock_free(Eina_Spinlock *spinlock);
+EINA_API Eina_Bool _eina_semaphore_new(Eina_Semaphore *sem, int count_init);
+EINA_API Eina_Bool _eina_semaphore_free(Eina_Semaphore *sem);
#ifdef EINA_HAVE_OSX_SPINLOCK
-EAPI Eina_Lock_Result _eina_spinlock_macos_take(Eina_Spinlock *spinlock);
-EAPI Eina_Lock_Result _eina_spinlock_macos_take_try(Eina_Spinlock *spinlock);
-EAPI Eina_Lock_Result _eina_spinlock_macos_release(Eina_Spinlock *spinlock);
+EINA_API Eina_Lock_Result _eina_spinlock_macos_take(Eina_Spinlock *spinlock);
+EINA_API Eina_Lock_Result _eina_spinlock_macos_take_try(Eina_Spinlock *spinlock);
+EINA_API Eina_Lock_Result _eina_spinlock_macos_release(Eina_Spinlock *spinlock);
#endif
static inline Eina_Bool
@@ -613,8 +613,8 @@ eina_barrier_wait(Eina_Barrier *barrier)
#include "eina_inline_lock_barrier.x"
#endif
-EAPI Eina_Bool _eina_barrier_new(Eina_Barrier *barrier, int needed);
-EAPI void _eina_barrier_free(Eina_Barrier *barrier);
+EINA_API Eina_Bool _eina_barrier_new(Eina_Barrier *barrier, int needed);
+EINA_API void _eina_barrier_free(Eina_Barrier *barrier);
static inline Eina_Bool
eina_barrier_new(Eina_Barrier *barrier, int needed)
diff --git a/src/lib/eina/eina_inline_mempool.x b/src/lib/eina/eina_inline_mempool.x
index b0ab81587d..e0b8d24dad 100644
--- a/src/lib/eina/eina_inline_mempool.x
+++ b/src/lib/eina/eina_inline_mempool.x
@@ -58,12 +58,12 @@ struct _Eina_Mempool_Backend
Eina_Bool (*from)(void *data, void *element);
/** Function to get an Eina_Iterator that will walk every allocated element
* in the pool.
- * @use eina_mempool_iterator_new
+ * @see eina_mempool_iterator_new
*/
Eina_Iterator *(*iterator)(void *data);
/** Function to allocate memory near already allocated memory.
* @since 1.24
- * @use eina_mempool_malloc_near
+ * @see eina_mempool_malloc_near
*/
void *(*alloc_near)(void *data, void *after, void *before, unsigned int size);
};
diff --git a/src/lib/eina/eina_inline_modinfo.x b/src/lib/eina/eina_inline_modinfo.x
index 582b7caf5a..a53de0a4a8 100644
--- a/src/lib/eina/eina_inline_modinfo.x
+++ b/src/lib/eina/eina_inline_modinfo.x
@@ -28,46 +28,33 @@
__attribute__((__used__)) __attribute__((unused, aligned(1))) = info;
#define EINA_MODINFO(tag, info) _EINA_MODINFO(tag, info)
-/**
- * @defgroup Eina_Module_Group Module
- *
- * These macros allow you to define module informations like author/description/version/license.
- * eina_modinfo - shows information about an eina module.
- * eina_modinfo pulls out information from the eina modules given on command line.
- *
- * $ eina_modinfo module.so
- * version: 0.1
- * description: Entry test
- * license: GPLv2
- * author: Enlightenment Community
- *
- */
-
/**
- * @defgroup Eina_Module_Group Module
+ * @ingroup Eina_Module_Group
*
* This macro is used for defining license.
*
*/
#define EINA_MODULE_LICENSE(_license) EINA_MODINFO(license, _license)
/**
- * @defgroup Eina_Module_Group Module
+ * @ingroup Eina_Module_Group
*
* This macro is used for defining author
* Use "name <email>" or just "name"
* for multiple authors, use multiple lines like below
- * EINA_MODULE_AUTHOR("Author 1 <author1.email>\n
+ @code{.c}
+ EINA_MODULE_AUTHOR("Author 1 <author1.email>\n"
"Author 2 <author2.email>");
+ @endcode
*/
#define EINA_MODULE_AUTHOR(_author) EINA_MODINFO(author, _author)
/**
- * @defgroup Eina_Module_Group Module
+ * @ingroup Eina_Module_Group
*
* This macro is used for defining version.
*/
#define EINA_MODULE_VERSION(_ver) EINA_MODINFO(ver, _ver)
/**
- * @defgroup Eina_Module_Group Module
+ * @ingroup Eina_Module_Group
*
* This macro is used for defining description.
* Explain what your module does.
diff --git a/src/lib/eina/eina_inline_range.x b/src/lib/eina/eina_inline_range.x
new file mode 100644
index 0000000000..b5af9d7226
--- /dev/null
+++ b/src/lib/eina/eina_inline_range.x
@@ -0,0 +1,82 @@
+/* EINA - EFL data type library
+ * Copyright (C) 2020 Ali Alzyod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library;
+ * if not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef EINA_INLINE_RANGE_H_
+#define EINA_INLINE_RANGE_H_
+
+/*============================================================================*
+ * API *
+ *============================================================================*/
+
+static inline size_t eina_range_end(const Eina_Range *range)
+{
+ if (range) return range->start + range->length;
+ return 0;
+}
+
+static inline Eina_Range eina_range_intersect(const Eina_Range *range, const Eina_Range *range2)
+{
+ Eina_Range ret_range = EINA_RANGE_EMPTY();
+ size_t min, max;
+
+ if (!range || !range2)
+ return ret_range;
+
+ min = MAX(range->start, range2->start);
+ max = MIN(range->start + range->length, range2->start + range2->length);
+
+ if (max > min)
+ {
+ ret_range = eina_range_from_to(min, max);
+ }
+
+ return ret_range;
+}
+
+static inline Eina_Range eina_range_union(const Eina_Range *range, const Eina_Range *range2)
+{
+ size_t min, max;
+
+ if (!range || !range2)
+ return EINA_RANGE_EMPTY();
+
+ min = MIN(range->start, range2->start);
+ max = MAX(range->start + range->length, range2->start + range2->length);
+
+ return eina_range_from_to(min, max);
+}
+
+static inline Eina_Bool eina_range_contains(const Eina_Range *range, size_t value)
+{
+ if (!range) return EINA_FALSE;
+
+ return value >= range->start && value < (range->start + range->length);
+}
+
+static inline Eina_Bool eina_range_equal(const Eina_Range *range, const Eina_Range *range2)
+{
+ if (!range || !range2) return EINA_FALSE;
+ return (range->start == range2->start && range->length == range2->length);
+}
+
+static inline Eina_Range eina_range_from_to(size_t min, size_t max)
+{
+ if (min < max) return EINA_RANGE(min, max - min);
+ return EINA_RANGE(max, min - max);;
+}
+
+#endif // EINA_INLINE_RANGE_H_ \ No newline at end of file
diff --git a/src/lib/eina/eina_inline_safepointer.x b/src/lib/eina/eina_inline_safepointer.x
index 1652e84947..aa0142c95a 100644
--- a/src/lib/eina/eina_inline_safepointer.x
+++ b/src/lib/eina/eina_inline_safepointer.x
@@ -119,8 +119,8 @@ struct _Eina_Memory_Table
Eina_Memory_Entry entries[EINA_MAX_ENTRY_ID];
};
-EAPI extern Eina_Memory_Table **_eina_sp_ids_tables[EINA_MAX_MID_TABLE_ID];
-EAPI extern int _eina_sp_log_dom;
+EINA_API extern Eina_Memory_Table **_eina_sp_ids_tables[EINA_MAX_MID_TABLE_ID];
+EINA_API extern int _eina_sp_log_dom;
#ifdef _EINA_SP_ERR
#undef _EINA_SP_ERR
diff --git a/src/lib/eina/eina_inline_str.x b/src/lib/eina/eina_inline_str.x
index d61eda5d7a..96de70336a 100644
--- a/src/lib/eina/eina_inline_str.x
+++ b/src/lib/eina/eina_inline_str.x
@@ -19,6 +19,8 @@
#ifndef EINA_STR_INLINE_H_
#define EINA_STR_INLINE_H_
+#include <string.h>
+
/**
* @addtogroup Eina_String_Group String
*
@@ -92,14 +94,21 @@ eina_strdup(const char *str)
static inline char *
eina_strndup(const char *str, size_t n)
{
-#ifdef _WIN32
char *ret;
- size_t slen;
+ const char *p;
+ size_t slen = 0;
if (!str)
return NULL;
-
- slen = strnlen(str, n);
+ for (p = str; *p; p++)
+ {
+ slen = (size_t)(p - str) + 1;
+ if (slen > n)
+ {
+ slen = n;
+ break;
+ }
+ }
ret = (char *)malloc(slen + 1); /* cast for C++ code */
if (!ret)
return NULL;
@@ -108,9 +117,6 @@ eina_strndup(const char *str, size_t n)
ret[slen] = '\0';
return ret;
-#else
- return str ? strndup(str, n) : NULL;
-#endif
}
/**
diff --git a/src/lib/eina/eina_inline_unicode.x b/src/lib/eina/eina_inline_unicode.x
index 7b7f7592b4..4199c50562 100644
--- a/src/lib/eina/eina_inline_unicode.x
+++ b/src/lib/eina/eina_inline_unicode.x
@@ -19,7 +19,7 @@
#ifndef EINA_INLINE_UNICODE_
# define EINA_INLINE_UNICODE_
-EAPI Eina_Unicode _eina_unicode_utf8_next_get(int ind,
+EINA_API Eina_Unicode _eina_unicode_utf8_next_get(int ind,
unsigned char d,
const char *buf,
int *iindex);
@@ -40,7 +40,7 @@ eina_unicode_utf8_next_get(const char *buf, int *iindex)
ind = *iindex;
/* if this char is the null terminator, exit */
- if ((d = buf[ind++]) == 0) return 0;
+ if ((d = (unsigned char)buf[ind++]) == 0) return 0;
if ((d & 0x80) == 0)
{ // 1 byte (7bit) - 0xxxxxxx
@@ -51,7 +51,8 @@ eina_unicode_utf8_next_get(const char *buf, int *iindex)
if ((d & 0xe0) == 0xc0)
{ // 2 byte (11bit) - 110xxxxx 10xxxxxx
r = (d & 0x1f) << 6;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f);
if (r <= 0x7F) goto error;
@@ -65,7 +66,7 @@ eina_unicode_utf8_next_get(const char *buf, int *iindex)
* we just use the invalid unicode codepoints 8 lower bits represent
* the original char */
error:
- d = buf[*iindex];
+ d = (unsigned char)buf[*iindex];
(*iindex)++;
return ERROR_REPLACEMENT_BASE | d;
}
diff --git a/src/lib/eina/eina_inline_value.x b/src/lib/eina/eina_inline_value.x
index 8d3457cf14..649cab1900 100644
--- a/src/lib/eina/eina_inline_value.x
+++ b/src/lib/eina/eina_inline_value.x
@@ -37,7 +37,7 @@
* @since 1.2
* @private
*/
-EAPI extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START;
+EINA_API extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START;
/**
* @var _EINA_VALUE_TYPE_BASICS_END
@@ -45,7 +45,7 @@ EAPI extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START;
* @since 1.2
* @private
*/
-EAPI extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END;
+EINA_API extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END;
#define EINA_VALUE_TYPE_DEFAULT(type) \
((_EINA_VALUE_TYPE_BASICS_START <= type) && \
(type <= _EINA_VALUE_TYPE_BASICS_END))
@@ -94,13 +94,13 @@ eina_value_memory_get(const Eina_Value *value)
* @since 1.2
* @private
*/
-EAPI void *eina_value_inner_alloc(size_t size);
+EINA_API void *eina_value_inner_alloc(size_t size);
/**
* @brief Releases memory for internal value types.
* @since 1.2
* @private
*/
-EAPI void eina_value_inner_free(size_t size, void *mem);
+EINA_API void eina_value_inner_free(size_t size, void *mem);
static inline Eina_Bool
eina_value_setup(Eina_Value *value, const Eina_Value_Type *type)
@@ -979,13 +979,14 @@ eina_value_list_vinsert(Eina_Value *value, unsigned int position, va_list args)
if (!desc)
return EINA_FALSE;
- if (!desc->list)
+ if (!desc->list && position == 0)
node = desc->list = eina_list_append(NULL, (void*)1L);
else if (position == 0)
node = desc->list = eina_list_prepend(desc->list, (void*)1L);
else
{
Eina_List *rel = eina_list_nth_list(desc->list, position - 1);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(rel, EINA_FALSE);
desc->list = eina_list_append_relative_list(desc->list, (void*)1L, rel);
node = rel->next;
}
@@ -1408,7 +1409,7 @@ eina_value_hash_pget(const Eina_Value *value, const char *key, void *ptr)
* @since 1.2
* @internal
*/
-EAPI const Eina_Value_Struct_Member *eina_value_struct_member_find(const Eina_Value_Struct *st, const char *name) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
+EINA_API const Eina_Value_Struct_Member *eina_value_struct_member_find(const Eina_Value_Struct *st, const char *name) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
static inline Eina_Bool
eina_value_struct_setup(Eina_Value *value, const Eina_Value_Struct_Desc *sdesc)
@@ -1734,7 +1735,7 @@ eina_value_optional_type_get(Eina_Value *value)
mem = eina_value_memory_get(value);
if (!mem)
return NULL;
-
+
if(2*sizeof(void*) <= sizeof(Eina_Value_Union))
{
Eina_Value_Optional_Outer* opt = (Eina_Value_Optional_Outer*)mem;
diff --git a/src/lib/eina/eina_inlist.c b/src/lib/eina/eina_inlist.c
index 7496c515d0..9d17492764 100644
--- a/src/lib/eina/eina_inlist.c
+++ b/src/lib/eina/eina_inlist.c
@@ -223,7 +223,7 @@ _eina_inlist_sorted_state_compact(Eina_Inlist_Sorted_State *state)
* API *
*============================================================================*/
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_append(Eina_Inlist *list, Eina_Inlist *new_l)
{
Eina_Inlist *l;
@@ -250,7 +250,7 @@ eina_inlist_append(Eina_Inlist *list, Eina_Inlist *new_l)
return list;
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_prepend(Eina_Inlist *list, Eina_Inlist *new_l)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list);
@@ -270,7 +270,7 @@ eina_inlist_prepend(Eina_Inlist *list, Eina_Inlist *new_l)
return new_l;
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_append_relative(Eina_Inlist *list,
Eina_Inlist *new_l,
Eina_Inlist *relative)
@@ -298,7 +298,7 @@ eina_inlist_append_relative(Eina_Inlist *list,
return eina_inlist_append(list, new_l);
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_prepend_relative(Eina_Inlist *list,
Eina_Inlist *new_l,
Eina_Inlist *relative)
@@ -331,7 +331,7 @@ eina_inlist_prepend_relative(Eina_Inlist *list,
return eina_inlist_prepend(list, new_l);
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_remove(Eina_Inlist *list, Eina_Inlist *item)
{
Eina_Inlist *return_l;
@@ -368,7 +368,7 @@ eina_inlist_remove(Eina_Inlist *list, Eina_Inlist *item)
return return_l;
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_promote(Eina_Inlist *list, Eina_Inlist *item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL);
@@ -395,7 +395,7 @@ eina_inlist_promote(Eina_Inlist *list, Eina_Inlist *item)
return item;
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_demote(Eina_Inlist *list, Eina_Inlist *item)
{
Eina_Inlist *l;
@@ -429,7 +429,7 @@ eina_inlist_demote(Eina_Inlist *list, Eina_Inlist *item)
return l;
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_find(Eina_Inlist *list, Eina_Inlist *item)
{
Eina_Inlist *l;
@@ -444,7 +444,7 @@ eina_inlist_find(Eina_Inlist *list, Eina_Inlist *item)
return NULL;
}
-EAPI unsigned int
+EINA_API unsigned int
eina_inlist_count(const Eina_Inlist *list)
{
const Eina_Inlist *l;
@@ -456,7 +456,7 @@ eina_inlist_count(const Eina_Inlist *list)
return i;
}
-EAPI int
+EINA_API int
eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list)
{
Eina_Inlist *ct = NULL;
@@ -486,7 +486,7 @@ eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list
return count;
}
-EAPI Eina_Inlist_Sorted_State *
+EINA_API Eina_Inlist_Sorted_State *
eina_inlist_sorted_state_new(void)
{
Eina_Inlist_Sorted_State *r;
@@ -499,7 +499,7 @@ eina_inlist_sorted_state_new(void)
return r;
}
-EAPI void
+EINA_API void
eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state)
{
free(state);
@@ -554,7 +554,7 @@ _eina_inlist_sorted_state_insert(Eina_Inlist_Sorted_State *state,
}
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_sorted_insert(Eina_Inlist *list,
Eina_Inlist *item,
Eina_Compare_Cb func)
@@ -661,7 +661,7 @@ eina_inlist_sorted_insert(Eina_Inlist *list,
return eina_inlist_prepend_relative(list, item, ct);
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_sorted_state_insert(Eina_Inlist *list,
Eina_Inlist *item,
Eina_Compare_Cb func,
@@ -800,7 +800,7 @@ eina_inlist_sorted_state_insert(Eina_Inlist *list,
return ct;
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func)
{
unsigned int i = 0;
@@ -848,7 +848,7 @@ eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func)
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_inlist_iterator_new(const Eina_Inlist *list)
{
Eina_Iterator_Inlist *it;
@@ -870,7 +870,7 @@ eina_inlist_iterator_new(const Eina_Inlist *list)
return &it->iterator;
}
-EAPI Eina_Accessor *
+EINA_API Eina_Accessor *
eina_inlist_accessor_new(const Eina_Inlist *list)
{
Eina_Accessor_Inlist *ac;
diff --git a/src/lib/eina/eina_inlist.h b/src/lib/eina/eina_inlist.h
index 5adc3104f3..74431127b1 100644
--- a/src/lib/eina/eina_inlist.h
+++ b/src/lib/eina/eina_inlist.h
@@ -108,6 +108,7 @@
*
* @skip while
* @until }
+ * @example eina_inlist_01.c
*/
/**
@@ -179,6 +180,7 @@
* @until }
*
* Here is the full source code for this example: @ref eina_inlist_02_c
+ * @example eina_inlist_02.c
*/
/**
@@ -266,7 +268,7 @@
*
* To see the full source code for this example, click here: @ref
* eina_inlist_03_c
- *
+ * @example eina_inlist_03.c
*/
/**
@@ -431,7 +433,7 @@ struct _Eina_Inlist
*
* @return The new list head. Use it and not @a in_list anymore.
*/
-EAPI Eina_Inlist *eina_inlist_append(Eina_Inlist *in_list,
+EINA_API Eina_Inlist *eina_inlist_append(Eina_Inlist *in_list,
Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -450,7 +452,7 @@ EAPI Eina_Inlist *eina_inlist_append(Eina_Inlist *in_list,
*
* @return The new list head. Use it and not @a in_list anymore.
*/
-EAPI Eina_Inlist *eina_inlist_prepend(Eina_Inlist *in_list,
+EINA_API Eina_Inlist *eina_inlist_prepend(Eina_Inlist *in_list,
Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -475,7 +477,7 @@ EAPI Eina_Inlist *eina_inlist_prepend(Eina_Inlist *in_list,
*
* @return The new list head. Use it and not @a list anymore.
*/
-EAPI Eina_Inlist *eina_inlist_append_relative(Eina_Inlist *in_list,
+EINA_API Eina_Inlist *eina_inlist_append_relative(Eina_Inlist *in_list,
Eina_Inlist *in_item,
Eina_Inlist *in_relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
@@ -501,7 +503,7 @@ EAPI Eina_Inlist *eina_inlist_append_relative(Eina_Inlist *in_list,
*
* @return The new list head. Use it and not @a in_list anymore.
*/
-EAPI Eina_Inlist *eina_inlist_prepend_relative(Eina_Inlist *in_list,
+EINA_API Eina_Inlist *eina_inlist_prepend_relative(Eina_Inlist *in_list,
Eina_Inlist *in_item,
Eina_Inlist *in_relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
@@ -522,7 +524,7 @@ EAPI Eina_Inlist *eina_inlist_prepend_relative(Eina_Inlist *in_list,
*
* @return The new list head. Use it and not @a list anymore.
*/
-EAPI Eina_Inlist *eina_inlist_remove(Eina_Inlist *in_list,
+EINA_API Eina_Inlist *eina_inlist_remove(Eina_Inlist *in_list,
Eina_Inlist *in_item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
@@ -536,7 +538,7 @@ EAPI Eina_Inlist *eina_inlist_remove(Eina_Inlist *in_list,
*
* @return @a in_item if found, @c NULL if not.
*/
-EAPI Eina_Inlist *eina_inlist_find(Eina_Inlist *in_list,
+EINA_API Eina_Inlist *eina_inlist_find(Eina_Inlist *in_list,
Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -554,7 +556,7 @@ EAPI Eina_Inlist *eina_inlist_find(Eina_Inlist *in_list,
*
* @return The new list head. Use it and not @a list anymore.
*/
-EAPI Eina_Inlist *eina_inlist_promote(Eina_Inlist *list,
+EINA_API Eina_Inlist *eina_inlist_promote(Eina_Inlist *list,
Eina_Inlist *item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
@@ -572,7 +574,7 @@ EAPI Eina_Inlist *eina_inlist_promote(Eina_Inlist *list,
*
* @return The new list head. Use it and not @a list anymore.
*/
-EAPI Eina_Inlist *eina_inlist_demote(Eina_Inlist *list,
+EINA_API Eina_Inlist *eina_inlist_demote(Eina_Inlist *list,
Eina_Inlist *item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
@@ -620,7 +622,7 @@ static inline Eina_Inlist *eina_inlist_last(const Eina_Inlist *list) EINA_PURE E
* on the number of elements on the list, so, it might become
* slow for big lists!
*/
-EAPI unsigned int eina_inlist_count(const Eina_Inlist *list) EINA_WARN_UNUSED_RESULT;
+EINA_API unsigned int eina_inlist_count(const Eina_Inlist *list) EINA_WARN_UNUSED_RESULT;
/**
@@ -642,7 +644,7 @@ EAPI unsigned int eina_inlist_count(const Eina_Inlist *list) EINA_WARN_UNUSED_
* invalid, and if you add or remove nodes iterator
* behavior is undefined, and your program may crash!
*/
-EAPI Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns a new accessor associated to a list.
@@ -656,7 +658,7 @@ EAPI Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist *in_list) EINA_MA
* not be allocated, @c NULL is returned and Otherwise, a valid accessor is
* returned.
*/
-EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Inserts a new node into a sorted list.
@@ -680,7 +682,7 @@ EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist *in_list) EINA_MA
*
* @since 1.1.0
*/
-EAPI Eina_Inlist *eina_inlist_sorted_insert(Eina_Inlist *list, Eina_Inlist *item, Eina_Compare_Cb func) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Inlist *eina_inlist_sorted_insert(Eina_Inlist *list, Eina_Inlist *item, Eina_Compare_Cb func) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates state with valid data in it.
@@ -691,7 +693,7 @@ EAPI Eina_Inlist *eina_inlist_sorted_insert(Eina_Inlist *list, Eina_Inlist *item
*
* See eina_inlist_sorted_state_insert() for more information.
*/
-EAPI Eina_Inlist_Sorted_State *eina_inlist_sorted_state_new(void);
+EINA_API Eina_Inlist_Sorted_State *eina_inlist_sorted_state_new(void);
/**
* @brief Forces an Eina_Inlist_Sorted_State to match the content of a list.
@@ -706,7 +708,7 @@ EAPI Eina_Inlist_Sorted_State *eina_inlist_sorted_state_new(void);
* useful if you didn't use eina_inlist_sorted_state_insert() at some point, but
* still think you have a sorted list. It will only correctly work on a sorted list.
*/
-EAPI int eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list);
+EINA_API int eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list);
/**
* @brief Frees an Eina_Inlist_Sorted_State.
@@ -717,7 +719,7 @@ EAPI int eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inl
*
* See eina_inlist_sorted_state_insert() for more information.
*/
-EAPI void eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state);
+EINA_API void eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state);
/**
* @brief Inserts a new node into a sorted list.
@@ -747,7 +749,7 @@ EAPI void eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state);
* linear cost again. Consider worst case to be almost O(n) pointer
* dereference (list walk).
*/
-EAPI Eina_Inlist *eina_inlist_sorted_state_insert(Eina_Inlist *list,
+EINA_API Eina_Inlist *eina_inlist_sorted_state_insert(Eina_Inlist *list,
Eina_Inlist *item,
Eina_Compare_Cb func,
Eina_Inlist_Sorted_State *state);
@@ -795,7 +797,7 @@ EAPI Eina_Inlist *eina_inlist_sorted_state_insert(Eina_Inlist *list,
* list = eina_inlist_sort(list, sort_cb);
* @endcode
*/
-EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func);
+EINA_API Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func);
/* These two macros are helpers for the _FOREACH ones, don't use them */
/**
diff --git a/src/lib/eina/eina_internal.h b/src/lib/eina/eina_internal.h
index e501bd17b5..2ad977b22d 100644
--- a/src/lib/eina/eina_internal.h
+++ b/src/lib/eina/eina_internal.h
@@ -8,39 +8,7 @@
* not stable API.
*/
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-# define EAPI_WEAK
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# define EAPI_WEAK __attribute__ ((weak))
-# else
-# define EAPI
-# define EAPI_WEAK
-# endif
-# else
-/**
- * @def EAPI
- * @brief Used to export functions (by changing visibility).
- */
-# define EAPI
-# endif
-#endif
-
+#include "eina_types.h"
#include "eina_prefix.h"
#include "eina_promise.h"
@@ -70,9 +38,9 @@ struct _Eina_Vpath_Interface_User
*
* @internal
*/
-EAPI void __eina_promise_cancel_all(void);
+EINA_API void __eina_promise_cancel_all(void);
-EAPI void __eina_promise_cancel_data(void *data);
+EINA_API void __eina_promise_cancel_data(void *data);
/**
* Make the app specific paths accessible as virtual path
@@ -89,7 +57,7 @@ EAPI void __eina_promise_cancel_data(void *data);
*
* If you do NOT call this api the virtual paths for app.* will be unset
*/
-EAPI void eina_vpath_interface_app_set(const char *app_name, Eina_Prefix *p);
+EINA_API void eina_vpath_interface_app_set(const char *app_name, Eina_Prefix *p);
/**
* Create the desktop specific vpaths
@@ -98,11 +66,8 @@ EAPI void eina_vpath_interface_app_set(const char *app_name, Eina_Prefix *p);
*
* If you do NOT call this api the virtual paths for usr.* will be unset.
*/
-EAPI void eina_vpath_interface_user_set(Eina_Vpath_Interface_User *user);
+EINA_API void eina_vpath_interface_user_set(Eina_Vpath_Interface_User *user);
void eina_xdg_env_init(void);
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/eina/eina_iterator.c b/src/lib/eina/eina_iterator.c
index 1043a9c6e0..aba9e3eea6 100644
--- a/src/lib/eina/eina_iterator.c
+++ b/src/lib/eina/eina_iterator.c
@@ -94,7 +94,7 @@ eina_iterator_shutdown(void)
* API *
*============================================================================*/
-EAPI void
+EINA_API void
eina_iterator_free(Eina_Iterator *iterator)
{
if (!iterator)
@@ -105,7 +105,7 @@ eina_iterator_free(Eina_Iterator *iterator)
iterator->free(iterator);
}
-EAPI void *
+EINA_API void *
eina_iterator_container_get(Eina_Iterator *iterator)
{
EINA_MAGIC_CHECK_ITERATOR(iterator);
@@ -114,7 +114,7 @@ eina_iterator_container_get(Eina_Iterator *iterator)
return iterator->get_container(iterator);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_iterator_next(Eina_Iterator *iterator, void **data)
{
if (!iterator)
@@ -126,7 +126,7 @@ eina_iterator_next(Eina_Iterator *iterator, void **data)
return iterator->next(iterator, data);
}
-EAPI void
+EINA_API void
eina_iterator_foreach(Eina_Iterator *iterator,
Eina_Each_Cb cb,
const void *fdata)
@@ -155,7 +155,7 @@ on_exit:
(void) eina_iterator_unlock(iterator);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_iterator_lock(Eina_Iterator *iterator)
{
EINA_MAGIC_CHECK_ITERATOR(iterator);
@@ -166,7 +166,7 @@ eina_iterator_lock(Eina_Iterator *iterator)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_iterator_unlock(Eina_Iterator *iterator)
{
EINA_MAGIC_CHECK_ITERATOR(iterator);
@@ -210,7 +210,7 @@ eina_carray_iterator_free(Eina_Iterator_CArray *it)
free(it);
}
-EAPI Eina_Iterator*
+EINA_API Eina_Iterator*
eina_carray_iterator_new(void** array)
{
Eina_Iterator_CArray *it;
@@ -268,7 +268,7 @@ eina_carray_length_iterator_free(Eina_Iterator_CArray_Length *it)
free(it);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_carray_length_iterator_new(void** array, unsigned int step, unsigned int length)
{
Eina_Iterator_CArray_Length *it;
@@ -336,7 +336,7 @@ eina_multi_iterator_free(Eina_Multi_Iterator *it)
free(it);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_multi_iterator_internal_new(Eina_Iterator *itc, ...)
{
Eina_Multi_Iterator *it;
@@ -404,7 +404,7 @@ eina_iterator_filter_free(Eina_Iterator_Filter *it)
free(it);
}
-EAPI Eina_Iterator*
+EINA_API Eina_Iterator*
eina_iterator_filter_new(Eina_Iterator *iterator, Eina_Each_Cb filter, Eina_Free_Cb free_cb, void *data)
{
Eina_Iterator_Filter *it;
@@ -429,3 +429,62 @@ eina_iterator_filter_new(Eina_Iterator *iterator, Eina_Each_Cb filter, Eina_Free
return &it->iterator;
}
+
+typedef struct {
+ Eina_Iterator iterator;
+
+ void *data;
+ Eina_Iterator *original;
+ Eina_Process_Cb cb;
+ Eina_Free_Cb free;
+} Eina_Iterator_Processor;
+
+static Eina_Bool
+eina_iterator_process_next(Eina_Iterator_Processor *it, void **data)
+{
+ if (!eina_iterator_next(it->original, data))
+ return EINA_FALSE;
+
+ *data = it->cb(it->original, *data, it->data);
+
+ return EINA_TRUE;
+}
+
+static void*
+eina_iterator_process_get_container(Eina_Iterator_Processor *it)
+{
+ return it->original;
+}
+
+static void
+eina_iterator_process_free(Eina_Iterator_Processor *it)
+{
+ if (it->free)
+ it->free(it->data);
+ eina_iterator_free(it->original);
+ free(it);
+}
+
+EINA_API Eina_Iterator*
+eina_iterator_processed_new(Eina_Iterator *iterator, Eina_Process_Cb process, Eina_Free_Cb free_cb, void *data)
+{
+ Eina_Iterator_Processor *it;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(process, NULL);
+
+ it = calloc(1, sizeof(Eina_Iterator_Processor));
+ it->data = data;
+ it->cb = process;
+ it->free = free_cb;
+ it->original = iterator;
+
+ EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
+
+ it->iterator.version = EINA_ITERATOR_VERSION;
+ it->iterator.next = FUNC_ITERATOR_NEXT(eina_iterator_process_next);
+ it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(eina_iterator_process_get_container);
+ it->iterator.free = FUNC_ITERATOR_FREE(eina_iterator_process_free);
+
+ return &it->iterator;
+}
diff --git a/src/lib/eina/eina_iterator.h b/src/lib/eina/eina_iterator.h
index cb254c7e8e..24bbc4903a 100644
--- a/src/lib/eina/eina_iterator.h
+++ b/src/lib/eina/eina_iterator.h
@@ -203,7 +203,7 @@ struct _Eina_Iterator
*
* This function frees @p iterator if it is not @c NULL;
*/
-EAPI void eina_iterator_free(Eina_Iterator *iterator);
+EINA_API void eina_iterator_free(Eina_Iterator *iterator);
/**
@@ -215,7 +215,7 @@ EAPI void eina_iterator_free(Eina_Iterator *iterator);
* This function returns the container which created @p iterator. If
* @p iterator is @c NULL, this function returns @c NULL.
*/
-EAPI void *eina_iterator_container_get(Eina_Iterator *iterator) EINA_ARG_NONNULL(1) EINA_PURE;
+EINA_API void *eina_iterator_container_get(Eina_Iterator *iterator) EINA_ARG_NONNULL(1) EINA_PURE;
/**
* @brief Returns the value of the current element and go to the next one.
@@ -229,7 +229,7 @@ EAPI void *eina_iterator_container_get(Eina_Iterator *iterator) EINA_ARG_NON
* iterator is @c NULL or if a problem occurred, #EINA_FALSE is
* returned, otherwise #EINA_TRUE is returned.
*/
-EAPI Eina_Bool eina_iterator_next(Eina_Iterator *iterator,
+EINA_API Eina_Bool eina_iterator_next(Eina_Iterator *iterator,
void **data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
@@ -247,7 +247,7 @@ EAPI Eina_Bool eina_iterator_next(Eina_Iterator *iterator,
* the iteration stops at that point, if @p cb returns #EINA_TRUE
* the iteration continues.
*/
-EAPI void eina_iterator_foreach(Eina_Iterator *iterator,
+EINA_API void eina_iterator_foreach(Eina_Iterator *iterator,
Eina_Each_Cb callback,
const void *fdata) EINA_ARG_NONNULL(2);
@@ -266,7 +266,7 @@ EAPI void eina_iterator_foreach(Eina_Iterator *iterator,
*
* @warning None of the existing eina data structures are lockable.
*/
-EAPI Eina_Bool eina_iterator_lock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_iterator_lock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
/**
* @brief Unlocks the container of the iterator.
@@ -282,7 +282,7 @@ EAPI Eina_Bool eina_iterator_lock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
*
* @warning None of the existing eina data structures are lockable.
*/
-EAPI Eina_Bool eina_iterator_unlock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_iterator_unlock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
/**
* @brief Creates an Eina_Iterator that iterates through a
@@ -299,7 +299,7 @@ EAPI Eina_Bool eina_iterator_unlock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1)
*
* @since 1.18
*/
-EAPI Eina_Iterator *eina_carray_iterator_new(void** array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_carray_iterator_new(void** array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates an Eina_Iterator that iterates through a
@@ -315,14 +315,14 @@ EAPI Eina_Iterator *eina_carray_iterator_new(void** array) EINA_ARG_NONNULL(1) E
*
* @since 1.22
*/
-EAPI Eina_Iterator *eina_carray_length_iterator_new(void** array, unsigned int step, unsigned int length) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_carray_length_iterator_new(void** array, unsigned int step, unsigned int length) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @def EINA_C_ARRAY_ITERATOR_NEW
* @brief Creates an Eina_Iterator that iterates through a
* NUL-terminated C array.
*
- * @param[in] array The NUL-terminated array
+ * @param[in] Array The NUL-terminated array
* @return The iterator that will walk over the array.
*
* You can create it like this:
@@ -347,7 +347,7 @@ EAPI Eina_Iterator *eina_carray_length_iterator_new(void** array, unsigned int s
*
* @since 1.19
*/
-EAPI Eina_Iterator* eina_iterator_filter_new(Eina_Iterator *original, Eina_Each_Cb filter, Eina_Free_Cb free_cb, void *data) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator* eina_iterator_filter_new(Eina_Iterator *original, Eina_Each_Cb filter, Eina_Free_Cb free_cb, void *data) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates an Eina_Iterator that iterates through a series
@@ -363,14 +363,32 @@ EAPI Eina_Iterator* eina_iterator_filter_new(Eina_Iterator *original, Eina_Each_
*
* @since 1.22
*/
-EAPI Eina_Iterator *eina_multi_iterator_internal_new(Eina_Iterator *it, ...) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_multi_iterator_internal_new(Eina_Iterator *it, ...) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+
+
+/**
+ * @brief Calls the process method on each node of iterator, producing new "processed"
+ * nodes and returning a new iterator which contains them.
+ *
+ * @param[in] iterator Iterator containing the nodes to process.
+ * @param[in] process Method to call on each node.
+ * @param[in] free_cb Method called when all nodes have been processed. It receives "data" as a parameter.
+ * @param[in] fdata Additional data passed to the process method.
+ *
+ * Processes every node in the input iterator and returns a new iterator containing
+ * the processed nodes. This is akin to a Map function:
+ * https://en.wikipedia.org/wiki/Map_(higher-order_function)
+ *
+ * @since 1.24
+ */
+EINA_API Eina_Iterator* eina_iterator_processed_new(Eina_Iterator *iterator, Eina_Process_Cb process, Eina_Free_Cb free_cb, void *fdata) EINA_WARN_UNUSED_RESULT;
/**
* @def eina_multi_iterator_new
* @brief Creates an Eina_Iterator that iterates through a series
* of Eina_Iterator.
*
- * @param[in] it The first Eina_Iterator to iterate over
+ * @param[in] It The first Eina_Iterator to iterate over
* @return The iterator that will walk all the other iterator
*
* Eina_Iterator* iterator = eina_multi_iterator_new(it1, it2, it3);
diff --git a/src/lib/eina/eina_lalloc.c b/src/lib/eina/eina_lalloc.c
index b1e62b7420..6d6eb26b77 100644
--- a/src/lib/eina/eina_lalloc.c
+++ b/src/lib/eina/eina_lalloc.c
@@ -65,7 +65,7 @@ struct _Eina_Lalloc
* @{
*/
-EAPI Eina_Lalloc *eina_lalloc_new(void *data,
+EINA_API Eina_Lalloc *eina_lalloc_new(void *data,
Eina_Lalloc_Alloc alloc_cb,
Eina_Lalloc_Free free_cb,
int num_init)
@@ -88,7 +88,7 @@ EAPI Eina_Lalloc *eina_lalloc_new(void *data,
return a;
}
-EAPI void eina_lalloc_free(Eina_Lalloc *a)
+EINA_API void eina_lalloc_free(Eina_Lalloc *a)
{
EINA_SAFETY_ON_NULL_RETURN(a);
EINA_SAFETY_ON_NULL_RETURN(a->free_cb);
@@ -96,7 +96,7 @@ EAPI void eina_lalloc_free(Eina_Lalloc *a)
free(a);
}
-EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a)
+EINA_API Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(a, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(a->alloc_cb, EINA_FALSE);
@@ -117,7 +117,7 @@ EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a)
return EINA_TRUE;
}
-EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a, int num)
+EINA_API Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a, int num)
{
int tmp;
diff --git a/src/lib/eina/eina_lalloc.h b/src/lib/eina/eina_lalloc.h
index bb14a7163c..bbeaa7f40c 100644
--- a/src/lib/eina/eina_lalloc.h
+++ b/src/lib/eina/eina_lalloc.h
@@ -76,7 +76,7 @@ typedef struct _Eina_Lalloc Eina_Lalloc;
* @return A new lazy allocator.
*
*/
-EAPI Eina_Lalloc *eina_lalloc_new(void *data,
+EINA_API Eina_Lalloc *eina_lalloc_new(void *data,
Eina_Lalloc_Alloc alloc_cb,
Eina_Lalloc_Free free_cb,
int num_init) EINA_ARG_NONNULL(2, 3);
@@ -87,7 +87,7 @@ EAPI Eina_Lalloc *eina_lalloc_new(void *data,
* @param[in,out] a The lazy allocator to free.
*
*/
-EAPI void eina_lalloc_free(Eina_Lalloc *a) EINA_ARG_NONNULL(1);
+EINA_API void eina_lalloc_free(Eina_Lalloc *a) EINA_ARG_NONNULL(1);
/**
* @brief Adds several elements to a lazy allocator.
@@ -98,7 +98,7 @@ EAPI void eina_lalloc_free(Eina_Lalloc *a) EINA_ARG_NONNULL(1);
* @return #EINA_TRUE on success, else #EINA_FALSE.
*
*/
-EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a,
+EINA_API Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a,
int num) EINA_ARG_NONNULL(1);
/**
@@ -109,7 +109,7 @@ EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a,
* @return #EINA_TRUE on success, else #EINA_FALSE.
*
*/
-EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a) EINA_ARG_NONNULL(1);
/**
* @}
diff --git a/src/lib/eina/eina_list.c b/src/lib/eina/eina_list.c
index d81bf6cb63..cfbd74e922 100644
--- a/src/lib/eina/eina_list.c
+++ b/src/lib/eina/eina_list.c
@@ -580,7 +580,7 @@ eina_list_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_append(Eina_List *list, const void *data)
{
Eina_List *l, *new_l;
@@ -614,7 +614,7 @@ on_error:
#endif
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_prepend(Eina_List *list, const void *data)
{
Eina_List *new_l;
@@ -645,7 +645,7 @@ on_error:
#endif
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_append_relative(Eina_List *list,
const void *data,
const void *relative)
@@ -666,7 +666,7 @@ eina_list_append_relative(Eina_List *list,
return eina_list_append(list, data);
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_append_relative_list(Eina_List *list,
const void *data,
Eina_List *relative)
@@ -700,7 +700,7 @@ eina_list_append_relative_list(Eina_List *list,
return list;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_prepend_relative(Eina_List *list,
const void *data,
const void *relative)
@@ -720,7 +720,7 @@ eina_list_prepend_relative(Eina_List *list,
return eina_list_prepend(list, data);
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_prepend_relative_list(Eina_List *list,
const void *data,
Eina_List *relative)
@@ -753,7 +753,7 @@ eina_list_prepend_relative_list(Eina_List *list,
return new_l;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_sorted_insert(Eina_List *list, Eina_Compare_Cb func, const void *data)
{
Eina_List *lnear;
@@ -769,7 +769,7 @@ eina_list_sorted_insert(Eina_List *list, Eina_Compare_Cb func, const void *data)
return eina_list_prepend_relative_list(list, data, lnear);
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_remove(Eina_List *list, const void *data)
{
Eina_List *l;
@@ -782,7 +782,7 @@ eina_list_remove(Eina_List *list, const void *data)
return eina_list_remove_list(list, l);
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_remove_list(Eina_List *list, Eina_List *remove_list)
{
Eina_List *return_l;
@@ -819,7 +819,7 @@ eina_list_remove_list(Eina_List *list, Eina_List *remove_list)
return return_l;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_free(Eina_List *list)
{
Eina_List *l, *free_l;
@@ -841,7 +841,7 @@ eina_list_free(Eina_List *list)
return NULL;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_promote_list(Eina_List *list, Eina_List *move_list)
{
if (!list)
@@ -885,7 +885,7 @@ eina_list_promote_list(Eina_List *list, Eina_List *move_list)
return move_list;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_demote_list(Eina_List *list, Eina_List *move_list)
{
if (!list)
@@ -924,7 +924,7 @@ eina_list_demote_list(Eina_List *list, Eina_List *move_list)
return list;
}
-EAPI void *
+EINA_API void *
eina_list_data_find(const Eina_List *list, const void *data)
{
if (eina_list_data_find_list(list, data))
@@ -933,7 +933,7 @@ eina_list_data_find(const Eina_List *list, const void *data)
return NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_list_move(Eina_List **to, Eina_List **from, void *data)
{
Eina_List *l;
@@ -954,7 +954,7 @@ eina_list_move(Eina_List **to, Eina_List **from, void *data)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(to, EINA_FALSE);
@@ -971,7 +971,7 @@ eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data)
return EINA_TRUE;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_data_find_list(const Eina_List *list, const void *data)
{
const Eina_List *l;
@@ -990,7 +990,7 @@ eina_list_data_find_list(const Eina_List *list, const void *data)
return NULL;
}
-EAPI void *
+EINA_API void *
eina_list_nth(const Eina_List *list, unsigned int n)
{
Eina_List *l;
@@ -1002,7 +1002,7 @@ eina_list_nth(const Eina_List *list, unsigned int n)
return l ? l->data : NULL;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_nth_list(const Eina_List *list, unsigned int n)
{
const Eina_List *l;
@@ -1038,7 +1038,7 @@ eina_list_nth_list(const Eina_List *list, unsigned int n)
abort();
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_reverse(Eina_List *list)
{
Eina_List *l1, *l2;
@@ -1068,7 +1068,7 @@ eina_list_reverse(Eina_List *list)
return list;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_reverse_clone(const Eina_List *list)
{
const Eina_List *l;
@@ -1088,7 +1088,7 @@ eina_list_reverse_clone(const Eina_List *list)
return lclone;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_clone(const Eina_List *list)
{
const Eina_List *l;
@@ -1108,7 +1108,7 @@ eina_list_clone(const Eina_List *list)
return lclone;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_sort(Eina_List *list, unsigned int limit, Eina_Compare_Cb func)
{
unsigned int i = 0;
@@ -1178,7 +1178,7 @@ eina_list_sort(Eina_List *list, unsigned int limit, Eina_Compare_Cb func)
return list;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_shuffle(Eina_List *list, Eina_Random_Cb func)
{
unsigned int n, i, j;
@@ -1261,7 +1261,7 @@ eina_list_shuffle(Eina_List *list, Eina_Random_Cb func)
return shuffled_list;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_merge(Eina_List *left, Eina_List *right)
{
unsigned int n_left, n_right;
@@ -1312,7 +1312,7 @@ eina_list_merge(Eina_List *left, Eina_List *right)
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right)
{
Eina_List *next;
@@ -1358,7 +1358,7 @@ eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right)
return list;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func)
{
Eina_List *ret;
@@ -1435,7 +1435,7 @@ eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func)
return ret;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_search_sorted_near_list(const Eina_List *list,
Eina_Compare_Cb func,
const void *data,
@@ -1518,7 +1518,7 @@ end:
return (Eina_List *)ct;
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_search_sorted_list(const Eina_List *list,
Eina_Compare_Cb func,
const void *data)
@@ -1537,7 +1537,7 @@ eina_list_search_sorted_list(const Eina_List *list,
}
-EAPI void *
+EINA_API void *
eina_list_search_sorted(const Eina_List *list,
Eina_Compare_Cb func,
const void *data)
@@ -1545,7 +1545,7 @@ eina_list_search_sorted(const Eina_List *list,
return eina_list_data_get(eina_list_search_sorted_list(list, func, data));
}
-EAPI Eina_List *
+EINA_API Eina_List *
eina_list_search_unsorted_list(const Eina_List *list,
Eina_Compare_Cb func,
const void *data)
@@ -1561,7 +1561,7 @@ eina_list_search_unsorted_list(const Eina_List *list,
return NULL;
}
-EAPI void *
+EINA_API void *
eina_list_search_unsorted(const Eina_List *list,
Eina_Compare_Cb func,
const void *data)
@@ -1570,7 +1570,7 @@ eina_list_search_unsorted(const Eina_List *list,
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_list_iterator_new(const Eina_List *list)
{
Eina_Iterator_List *it;
@@ -1593,7 +1593,7 @@ eina_list_iterator_new(const Eina_List *list)
return &it->iterator;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_list_iterator_reversed_new(const Eina_List *list)
{
Eina_Iterator_List *it;
@@ -1616,7 +1616,7 @@ eina_list_iterator_reversed_new(const Eina_List *list)
return &it->iterator;
}
-EAPI Eina_Accessor *
+EINA_API Eina_Accessor *
eina_list_accessor_new(const Eina_List *list)
{
Eina_Accessor_List *ac;
@@ -1643,7 +1643,7 @@ eina_list_accessor_new(const Eina_List *list)
return &ac->accessor;
}
-EAPI int
+EINA_API int
eina_list_data_idx(const Eina_List *list, void *data)
{
const Eina_List *l;
diff --git a/src/lib/eina/eina_list.h b/src/lib/eina/eina_list.h
index 569f84d2c2..a630f84453 100644
--- a/src/lib/eina/eina_list.h
+++ b/src/lib/eina/eina_list.h
@@ -363,7 +363,7 @@ struct _Eina_List_Accounting
*
* @warning @p list must be a pointer to the first element of the list(or NULL).
*/
-EAPI Eina_List *eina_list_append(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_append(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -391,7 +391,7 @@ EAPI Eina_List *eina_list_append(Eina_List *list, const void *data) E
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_prepend(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_prepend(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -424,7 +424,7 @@ EAPI Eina_List *eina_list_prepend(Eina_List *list, const void *data)
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_append_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_append_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -446,7 +446,7 @@ EAPI Eina_List *eina_list_append_relative(Eina_List *list, const void
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_append_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_append_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -479,7 +479,7 @@ EAPI Eina_List *eina_list_append_relative_list(Eina_List *list, const
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_prepend_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_prepend_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -501,7 +501,7 @@ EAPI Eina_List *eina_list_prepend_relative(Eina_List *list, const voi
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_prepend_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_prepend_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -527,7 +527,7 @@ EAPI Eina_List *eina_list_prepend_relative_list(Eina_List *list, cons
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_sorted_insert(Eina_List *list, Eina_Compare_Cb func, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_sorted_insert(Eina_List *list, Eina_Compare_Cb func, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
/**
@@ -545,7 +545,7 @@ EAPI Eina_List *eina_list_sorted_insert(Eina_List *list, Eina_Compare
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_remove(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_remove(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -583,7 +583,7 @@ EAPI Eina_List *eina_list_remove(Eina_List *list, const void *data) E
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_remove_list(Eina_List *list, Eina_List *remove_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_remove_list(Eina_List *list, Eina_List *remove_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -617,7 +617,7 @@ EAPI Eina_List *eina_list_remove_list(Eina_List *list, Eina_List *rem
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_promote_list(Eina_List *list, Eina_List *move_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_promote_list(Eina_List *list, Eina_List *move_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -651,7 +651,7 @@ EAPI Eina_List *eina_list_promote_list(Eina_List *list, Eina_List *mo
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_demote_list(Eina_List *list, Eina_List *move_list);
+EINA_API Eina_List *eina_list_demote_list(Eina_List *list, Eina_List *move_list);
/**
@@ -678,7 +678,7 @@ EAPI Eina_List *eina_list_demote_list(Eina_List *list, Eina_List *mov
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI void *eina_list_data_find(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API void *eina_list_data_find(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -696,7 +696,7 @@ EAPI void *eina_list_data_find(const Eina_List *list, const void
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_data_find_list(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_data_find_list(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@@ -713,7 +713,7 @@ EAPI Eina_List *eina_list_data_find_list(const Eina_List *list, const
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_Bool eina_list_move(Eina_List **to, Eina_List **from, void *data);
+EINA_API Eina_Bool eina_list_move(Eina_List **to, Eina_List **from, void *data);
/**
@@ -730,7 +730,7 @@ EAPI Eina_Bool eina_list_move(Eina_List **to, Eina_List **from, void
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_Bool eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data);
+EINA_API Eina_Bool eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data);
/**
@@ -742,7 +742,7 @@ EAPI Eina_Bool eina_list_move_list(Eina_List **to, Eina_List **from,
* This function frees all the nodes of @p list. It does not free the
* data of the nodes. To free them, use #EINA_LIST_FREE.
*/
-EAPI Eina_List *eina_list_free(Eina_List *list);
+EINA_API Eina_List *eina_list_free(Eina_List *list);
/**
* @brief Gets the nth member's data pointer in a list, or @c NULL on
@@ -761,7 +761,7 @@ EAPI Eina_List *eina_list_free(Eina_List *list);
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI void *eina_list_nth(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT;
+EINA_API void *eina_list_nth(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets the nth member's list node in a list.
@@ -782,7 +782,7 @@ EAPI void *eina_list_nth(const Eina_List *list, unsigned int n)
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_nth_list(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_nth_list(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT;
/**
@@ -804,7 +804,7 @@ EAPI Eina_List *eina_list_nth_list(const Eina_List *list, unsigned in
* @see eina_list_reverse_clone()
* @see eina_list_iterator_reversed_new()
*/
-EAPI Eina_List *eina_list_reverse(Eina_List *list) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_reverse(Eina_List *list) EINA_WARN_UNUSED_RESULT;
/**
@@ -825,7 +825,7 @@ EAPI Eina_List *eina_list_reverse(Eina_List *list) EINA_WARN_UNUSED_R
* @see eina_list_reverse()
* @see eina_list_clone()
*/
-EAPI Eina_List *eina_list_reverse_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_reverse_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT;
/**
@@ -845,7 +845,7 @@ EAPI Eina_List *eina_list_reverse_clone(const Eina_List *list) EINA_W
*
* @see eina_list_reverse_clone()
*/
-EAPI Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT;
/**
@@ -888,7 +888,7 @@ EAPI Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUS
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int limit, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_sort(Eina_List *list, unsigned int limit, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT;
/**
@@ -909,7 +909,7 @@ EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int limit, E
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_shuffle(Eina_List *list, Eina_Random_Cb func) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_shuffle(Eina_List *list, Eina_Random_Cb func) EINA_WARN_UNUSED_RESULT;
/**
@@ -929,7 +929,7 @@ EAPI Eina_List *eina_list_shuffle(Eina_List *list, Eina_Random_Cb fun
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_merge(Eina_List *left, Eina_List *right) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_merge(Eina_List *left, Eina_List *right) EINA_WARN_UNUSED_RESULT;
/**
@@ -969,7 +969,7 @@ EAPI Eina_List *eina_list_merge(Eina_List *left, Eina_List *right) EI
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT;
/**
@@ -989,7 +989,7 @@ EAPI Eina_List *eina_list_sorted_merge(Eina_List *left, Eina_List *ri
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_List *eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_List *eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) EINA_WARN_UNUSED_RESULT;
/**
@@ -1051,7 +1051,7 @@ EAPI Eina_List *eina_list_split_list(Eina_List *list, Eina_List *rela
* @see eina_list_sort()
* @see eina_list_sorted_merge()
*/
-EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data, int *result_cmp);
+EINA_API Eina_List *eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data, int *result_cmp);
/**
@@ -1087,7 +1087,7 @@ EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List *li
* @see eina_list_search_unsorted_list()
* @see eina_list_search_sorted_near_list()
*/
-EAPI Eina_List *eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
+EINA_API Eina_List *eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
/**
@@ -1123,7 +1123,7 @@ EAPI Eina_List *eina_list_search_sorted_list(const Eina_List *list, E
* @see eina_list_sorted_merge()
* @see eina_list_search_unsorted_list()
*/
-EAPI void *eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
+EINA_API void *eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
/**
@@ -1149,7 +1149,7 @@ EAPI void *eina_list_search_sorted(const Eina_List *list, Eina_C
* @see eina_list_search_sorted_list()
* @see eina_list_search_unsorted()
*/
-EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
+EINA_API Eina_List *eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
/**
@@ -1176,7 +1176,7 @@ EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List *list,
* @see eina_list_search_sorted()
* @see eina_list_search_unsorted_list()
*/
-EAPI void *eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
+EINA_API void *eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
/**
@@ -1304,7 +1304,7 @@ static inline void *eina_list_last_data_get(const Eina_List *list);
* invalid! That is, if you add or remove nodes this iterator
* behavior is undefined and your program may crash!
*/
-EAPI Eina_Iterator *eina_list_iterator_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_list_iterator_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
@@ -1327,7 +1327,7 @@ EAPI Eina_Iterator *eina_list_iterator_new(const Eina_List *list) EINA_MA
* invalid! That is, if you add or remove nodes this iterator
* behavior is undefined and your program may crash!
*/
-EAPI Eina_Iterator *eina_list_iterator_reversed_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_list_iterator_reversed_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
@@ -1344,7 +1344,7 @@ EAPI Eina_Iterator *eina_list_iterator_reversed_new(const Eina_List *list
*
* @warning @p list must be a pointer to the first element of the list.
*/
-EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Accessor *eina_list_accessor_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
@@ -1362,7 +1362,7 @@ EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List *list) EINA_MA
*
* @since 1.14
*/
-EAPI int eina_list_data_idx(const Eina_List *list, void *data);
+EINA_API int eina_list_data_idx(const Eina_List *list, void *data);
/**
@@ -1371,7 +1371,7 @@ EAPI int eina_list_data_idx(const Eina_List *list, void *data)
*
* @param[in] list The list to iterate over.
* @param[out] l A list that is used as an iterator and points to the current node.
- * @param[out] data Current item's data.
+ * @param[out] _data Current item's data.
*
* This macro iterates over @p list from the first element to
* the last. @p data is the data related to the current element.
@@ -1429,7 +1429,7 @@ EAPI int eina_list_data_idx(const Eina_List *list, void *data)
*
* @param[in] list The list to iterate over.
* @param[out] l A list that is used as an iterator and points to the current node.
- * @param[out] data Current item's data.
+ * @param[out] _data Current item's data.
*
* This macro works like EINA_LIST_FOREACH, but iterates from the
* last element of a list to the first.
diff --git a/src/lib/eina/eina_lock.c b/src/lib/eina/eina_lock.c
index aa085cd15a..ec7a668537 100644
--- a/src/lib/eina/eina_lock.c
+++ b/src/lib/eina/eina_lock.c
@@ -28,14 +28,14 @@
# define os_unfair_lock_trylock(LCK) OSSpinLockTry(LCK)
# endif
-EAPI Eina_Lock_Result
+EINA_API Eina_Lock_Result
_eina_spinlock_macos_take(Eina_Spinlock *spinlock)
{
os_unfair_lock_lock(SPINLOCK_GET(spinlock));
return EINA_LOCK_SUCCEED;
}
-EAPI Eina_Lock_Result
+EINA_API Eina_Lock_Result
_eina_spinlock_macos_take_try(Eina_Spinlock *spinlock)
{
return (os_unfair_lock_trylock(SPINLOCK_GET(spinlock)) == true)
@@ -43,7 +43,7 @@ _eina_spinlock_macos_take_try(Eina_Spinlock *spinlock)
: EINA_LOCK_FAIL;
}
-EAPI Eina_Lock_Result
+EINA_API Eina_Lock_Result
_eina_spinlock_macos_release(Eina_Spinlock *spinlock)
{
os_unfair_lock_unlock(SPINLOCK_GET(spinlock));
@@ -54,7 +54,7 @@ _eina_spinlock_macos_release(Eina_Spinlock *spinlock)
Eina_Bool fork_resetting;
-EAPI void
+EINA_API void
_eina_lock_debug_abort(int err, const char *fn, const volatile void *ptr)
{
if (fork_resetting) return;
@@ -64,7 +64,7 @@ _eina_lock_debug_abort(int err, const char *fn, const volatile void *ptr)
#endif
}
-EAPI void
+EINA_API void
_eina_lock_debug_deadlock(const char *fn, const volatile void *ptr)
{
fprintf(stderr, "EINA ERROR: DEADLOCK on %s %p\n", fn, ptr);
@@ -73,7 +73,7 @@ _eina_lock_debug_deadlock(const char *fn, const volatile void *ptr)
#endif
}
-EAPI void
+EINA_API void
eina_lock_debug(const Eina_Lock *mutex)
{
#ifdef EINA_HAVE_DEBUG_THREADS
@@ -85,7 +85,7 @@ eina_lock_debug(const Eina_Lock *mutex)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_eina_lock_new(Eina_Lock *mutex, Eina_Bool recursive)
{
pthread_mutexattr_t attr;
@@ -106,7 +106,7 @@ fail_release:
return ok;
}
-EAPI void
+EINA_API void
_eina_lock_free(Eina_Lock *mutex)
{
int ok;
@@ -115,7 +115,7 @@ _eina_lock_free(Eina_Lock *mutex)
if (ok != 0) EINA_LOCK_ABORT_DEBUG(ok, mutex_destroy, mutex);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
{
pthread_condattr_t attr;
@@ -161,13 +161,13 @@ _eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
return EINA_TRUE;
}
-EAPI void
+EINA_API void
_eina_condition_free(Eina_Condition *cond)
{
pthread_cond_destroy(&(cond->condition));
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_eina_rwlock_new(Eina_RWLock *mutex)
{
int ok;
@@ -179,13 +179,13 @@ _eina_rwlock_new(Eina_RWLock *mutex)
return EINA_FALSE;
}
-EAPI void
+EINA_API void
_eina_rwlock_free(Eina_RWLock *mutex)
{
pthread_rwlock_destroy(&(mutex->mutex));
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_eina_barrier_new(Eina_Barrier *barrier, int needed)
{
#ifdef EINA_HAVE_PTHREAD_BARRIER
@@ -206,7 +206,7 @@ _eina_barrier_new(Eina_Barrier *barrier, int needed)
#endif
}
-EAPI void
+EINA_API void
_eina_barrier_free(Eina_Barrier *barrier)
{
#ifdef EINA_HAVE_PTHREAD_BARRIER
@@ -220,7 +220,7 @@ _eina_barrier_free(Eina_Barrier *barrier)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_eina_spinlock_new(Eina_Spinlock *spinlock)
{
#if defined(EINA_HAVE_POSIX_SPINLOCK)
@@ -237,7 +237,7 @@ _eina_spinlock_new(Eina_Spinlock *spinlock)
#endif
}
-EAPI void
+EINA_API void
_eina_spinlock_free(Eina_Spinlock *spinlock)
{
#if defined(EINA_HAVE_POSIX_SPINLOCK)
@@ -251,7 +251,7 @@ _eina_spinlock_free(Eina_Spinlock *spinlock)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_eina_semaphore_new(Eina_Semaphore *sem, int count_init)
{
if (sem && (count_init >= 0))
@@ -266,7 +266,7 @@ _eina_semaphore_new(Eina_Semaphore *sem, int count_init)
return EINA_FALSE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_eina_semaphore_free(Eina_Semaphore *sem)
{
if (sem)
diff --git a/src/lib/eina/eina_lock.h b/src/lib/eina/eina_lock.h
index 752c19ad5c..2a611de2df 100644
--- a/src/lib/eina/eina_lock.h
+++ b/src/lib/eina/eina_lock.h
@@ -103,7 +103,7 @@ typedef void (*Eina_TLS_Delete_Cb)(void *ptr);
* @brief A type definition for warning that a function was called from
* somewhere other than the EFL main loop.
*/
-EAPI extern Eina_Error EINA_ERROR_NOT_MAIN_LOOP;
+EINA_API extern Eina_Error EINA_ERROR_NOT_MAIN_LOOP;
/**
* @brief Initializes a new #Eina_Lock.
@@ -208,7 +208,7 @@ static inline Eina_Lock_Result eina_lock_release(Eina_Lock *mutex);
*
* @since 1.19
*/
-EAPI void eina_lock_debug(const Eina_Lock *mutex);
+EINA_API void eina_lock_debug(const Eina_Lock *mutex);
/**
* @brief Initializes a new condition variable.
@@ -261,7 +261,7 @@ static inline Eina_Bool eina_condition_wait(Eina_Condition *cond);
* @param[in] t The maximum amount of time to wait, in seconds.
*
* @return #EINA_TRUE on success, #EINA_FALSE otherwise. If the operation
- * timed out, eina error will be set to #ETIMEDOUT.
+ * timed out, eina error will be set to @c ETIMEDOUT.
*
* @see eina_condition_wait()
*/
@@ -545,7 +545,7 @@ static inline Eina_Bool eina_barrier_wait(Eina_Barrier *barrier);
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
*
* @note Spinlocks are only implemented on the POSIX platform and are only available
- * if #EINA_HAVE_POSIX_SPINLOCK is defined. you get a new #Eina_Lock on All other platforms.
+ * if @c EINA_HAVE_POSIX_SPINLOCK is defined. You get a new #Eina_Lock on All other platforms.
*
* @see eina_spinlock_free()
*/
@@ -618,7 +618,7 @@ static inline void eina_spinlock_free(Eina_Spinlock *spinlock);
{ \
EINA_LOG_ERR("You are calling %s from outside" \
"of the main loop threads in %s at line %i", \
- __FUNCTION__, \
+ __func__, \
__FILE__, \
__LINE__); \
return val; \
@@ -630,7 +630,7 @@ static inline void eina_spinlock_free(Eina_Spinlock *spinlock);
{ \
EINA_LOG_ERR("You are calling %s from outside" \
"of the main loop threads in %s at line %i", \
- __FUNCTION__, \
+ __func__, \
__FILE__, \
__LINE__); \
return ; \
diff --git a/src/lib/eina/eina_log.c b/src/lib/eina/eina_log.c
index 81be34a1b2..fb0b3c3c9c 100644
--- a/src/lib/eina/eina_log.c
+++ b/src/lib/eina/eina_log.c
@@ -29,10 +29,6 @@
#include <assert.h>
#include <errno.h>
-#ifdef HAVE_SYSTEMD
-# include <systemd/sd-journal.h>
-#endif
-
#ifdef _WIN32
# include <windows.h>
#endif
@@ -42,7 +38,10 @@
#endif
#include "eina_debug_private.h"
-#define EINA_LOG_BACKTRACE
+
+#ifdef HAVE_BACKTRACE
+//#define EINA_LOG_BACKTRACE
+#endif
#include "eina_config.h"
#include "eina_private.h"
@@ -51,6 +50,7 @@
#include "eina_thread.h"
#include "eina_convert.h"
#include "eina_strbuf.h"
+#include "eina_module.h"
/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
#include "eina_safety_checks.h"
@@ -103,8 +103,8 @@ struct _Eina_Log_Timing
Eina_Log_State state;
};
-EAPI const char *_eina_log_state_init = "init";
-EAPI const char *_eina_log_state_shutdown = "shutdown";
+EINA_API const char *_eina_log_state_init = "init";
+EINA_API const char *_eina_log_state_shutdown = "shutdown";
/*
* List of levels for domains set by the user before the domains are registered,
@@ -127,7 +127,7 @@ static int _abort_level_on_critical = EINA_LOG_LEVEL_CRITICAL;
# ifndef EINA_LOG_BACKTRACE_ENABLE
static int _backtrace_level = -1;
# else
-static int _backtrace_level = 1;
+static int _backtrace_level = EINA_LOG_LEVEL_ERR;
# endif
#endif
@@ -1694,13 +1694,13 @@ eina_log_threads_shutdown(void)
* @cond LOCAL
*/
-EAPI int EINA_LOG_DOMAIN_GLOBAL = 0;
+EINA_API int EINA_LOG_DOMAIN_GLOBAL = 0;
/**
* @endcond
*/
-EAPI void
+EINA_API void
eina_log_threads_enable(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1711,7 +1711,7 @@ eina_log_threads_enable(void)
#endif
}
-EAPI void
+EINA_API void
eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data)
{
#ifdef EINA_ENABLE_LOG
@@ -1729,7 +1729,7 @@ eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data)
#endif
}
-EAPI void
+EINA_API void
eina_log_level_set(int level)
{
#ifdef EINA_ENABLE_LOG
@@ -1742,7 +1742,7 @@ eina_log_level_set(int level)
#endif
}
-EAPI int
+EINA_API int
eina_log_level_get(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1752,7 +1752,7 @@ eina_log_level_get(void)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_log_main_thread_check(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1762,7 +1762,7 @@ eina_log_main_thread_check(void)
#endif
}
-EAPI void
+EINA_API void
eina_log_color_disable_set(Eina_Bool disabled)
{
#ifdef EINA_ENABLE_LOG
@@ -1791,7 +1791,7 @@ eina_log_color_disable_set(Eina_Bool disabled)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_log_color_disable_get(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1801,7 +1801,7 @@ eina_log_color_disable_get(void)
#endif
}
-EAPI void
+EINA_API void
eina_log_file_disable_set(Eina_Bool disabled)
{
#ifdef EINA_ENABLE_LOG
@@ -1811,7 +1811,7 @@ eina_log_file_disable_set(Eina_Bool disabled)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_log_file_disable_get(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1821,7 +1821,7 @@ eina_log_file_disable_get(void)
#endif
}
-EAPI void
+EINA_API void
eina_log_function_disable_set(Eina_Bool disabled)
{
#ifdef EINA_ENABLE_LOG
@@ -1831,7 +1831,7 @@ eina_log_function_disable_set(Eina_Bool disabled)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_log_function_disable_get(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1841,7 +1841,7 @@ eina_log_function_disable_get(void)
#endif
}
-EAPI void
+EINA_API void
eina_log_abort_on_critical_set(Eina_Bool abort_on_critical)
{
#ifdef EINA_ENABLE_LOG
@@ -1851,7 +1851,7 @@ eina_log_abort_on_critical_set(Eina_Bool abort_on_critical)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_log_abort_on_critical_get(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1861,7 +1861,7 @@ eina_log_abort_on_critical_get(void)
#endif
}
-EAPI void
+EINA_API void
eina_log_abort_on_critical_level_set(int critical_level)
{
#ifdef EINA_ENABLE_LOG
@@ -1871,7 +1871,7 @@ eina_log_abort_on_critical_level_set(int critical_level)
#endif
}
-EAPI int
+EINA_API int
eina_log_abort_on_critical_level_get(void)
{
#ifdef EINA_ENABLE_LOG
@@ -1881,7 +1881,7 @@ eina_log_abort_on_critical_level_get(void)
#endif
}
-EAPI int
+EINA_API int
eina_log_domain_register(const char *name, const char *color)
{
#ifdef EINA_ENABLE_LOG
@@ -1900,7 +1900,7 @@ eina_log_domain_register(const char *name, const char *color)
#endif
}
-EAPI void
+EINA_API void
eina_log_domain_unregister(int domain)
{
#ifdef EINA_ENABLE_LOG
@@ -1913,7 +1913,7 @@ eina_log_domain_unregister(int domain)
#endif
}
-EAPI void
+EINA_API void
eina_log_domain_level_set(const char *domain_name, int level)
{
#ifdef EINA_ENABLE_LOG
@@ -1963,7 +1963,7 @@ eina_log_domain_level_set(const char *domain_name, int level)
#endif
}
-EAPI int
+EINA_API int
eina_log_domain_level_get(const char *domain_name)
{
#ifdef EINA_ENABLE_LOG
@@ -2007,7 +2007,7 @@ eina_log_domain_level_get(const char *domain_name)
#endif
}
-EAPI int
+EINA_API int
eina_log_domain_registered_level_get(int domain)
{
#ifdef EINA_ENABLE_LOG
@@ -2023,7 +2023,7 @@ eina_log_domain_registered_level_get(int domain)
#endif
}
-EAPI void
+EINA_API void
eina_log_domain_registered_level_set(int domain, int level)
{
#ifdef EINA_ENABLE_LOG
@@ -2037,7 +2037,7 @@ eina_log_domain_registered_level_set(int domain, int level)
#endif
}
-EAPI void
+EINA_API void
eina_log_print_cb_stderr(const Eina_Log_Domain *d,
Eina_Log_Level level,
const char *file,
@@ -2052,6 +2052,14 @@ eina_log_print_cb_stderr(const Eina_Log_Domain *d,
vfprintf(stderr, fmt, args);
putc('\n', stderr);
DISPLAY_BACKTRACE(stderr, level);
+# ifdef _WIN32
+ /*
+ * NOTE: when using mintty-base terminals (like MSYS2, or cygwin one),
+ * stderr is not flushed, so we force flush in this case.
+ */
+ if (!_eina_log_win32_is_console)
+ fflush(stderr);
+# endif
#else
(void) d;
(void) level;
@@ -2064,7 +2072,7 @@ eina_log_print_cb_stderr(const Eina_Log_Domain *d,
#endif
}
-EAPI void
+EINA_API void
eina_log_print_cb_stdout(const Eina_Log_Domain *d,
Eina_Log_Level level,
const char *file,
@@ -2091,7 +2099,44 @@ eina_log_print_cb_stdout(const Eina_Log_Domain *d,
#endif
}
-EAPI void
+#ifdef HAVE_SYSTEMD
+static Eina_Module *_libsystemd = NULL;
+static Eina_Bool _libsystemd_broken = EINA_FALSE;
+
+static int (*_eina_sd_journal_send_with_location) (const char *file, const char *line, const char *func, const char *format, ...) = NULL;
+
+static void
+_eina_sd_init(void)
+{
+ if (_libsystemd_broken) return;
+ _libsystemd = eina_module_new("libsystemd.so.0");
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ if (!_libsystemd)
+ {
+ _libsystemd_broken = EINA_TRUE;
+ return;
+ }
+ _eina_sd_journal_send_with_location =
+ eina_module_symbol_get(_libsystemd, "sd_journal_send_with_location");
+ if (!_eina_sd_journal_send_with_location)
+ {
+ _eina_sd_journal_send_with_location = NULL;
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ _libsystemd_broken = EINA_TRUE;
+ }
+}
+
+#endif
+
+EINA_API void
eina_log_print_cb_journald(const Eina_Log_Domain *d,
Eina_Log_Level level,
const char *file,
@@ -2108,6 +2153,9 @@ eina_log_print_cb_journald(const Eina_Log_Domain *d,
Eina_Thread cur;
int r;
+ _eina_sd_init();
+ if (!_eina_sd_journal_send_with_location) goto nosystemd;
+
r = asprintf(&file_prefixed, "CODE_FILE=%s", file);
if (r == -1)
{
@@ -2134,12 +2182,12 @@ eina_log_print_cb_journald(const Eina_Log_Domain *d,
#ifdef EINA_LOG_BACKTRACE
if (EINA_LIKELY(level > _backtrace_level))
#endif
- sd_journal_send_with_location(file_prefixed, line_str, fnc,
- "PRIORITY=%i", level,
- "MESSAGE=%s", message,
- "EFL_DOMAIN=%s", d->domain_str,
- "THREAD=%lu", cur,
- NULL);
+ _eina_sd_journal_send_with_location(file_prefixed, line_str, fnc,
+ "PRIORITY=%i", level,
+ "MESSAGE=%s", message,
+ "EFL_DOMAIN=%s", d->domain_str,
+ "THREAD=%lu", cur,
+ NULL);
#ifdef EINA_LOG_BACKTRACE
else
{
@@ -2159,14 +2207,14 @@ eina_log_print_cb_journald(const Eina_Log_Domain *d,
else
eina_strbuf_append_printf(bts, "[%s], ", strings[i]);
- sd_journal_send_with_location(file_prefixed, line_str, fnc,
- "PRIORITY=%i", level,
- "MESSAGE=%s", message,
- "EFL_DOMAIN=%s", d->domain_str,
- "THREAD=%lu", cur,
- "BACKTRACE=%s",
- eina_strbuf_string_get(bts),
- NULL);
+ _eina_sd_journal_send_with_location(file_prefixed, line_str, fnc,
+ "PRIORITY=%i", level,
+ "MESSAGE=%s", message,
+ "EFL_DOMAIN=%s", d->domain_str,
+ "THREAD=%lu", cur,
+ "BACKTRACE=%s",
+ eina_strbuf_string_get(bts),
+ NULL);
eina_strbuf_free(bts);
free(strings);
}
@@ -2176,13 +2224,13 @@ finish:
free(file_prefixed);
free(line_str);
free(message);
-
-#else
- eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, data, args);
+ return;
+nosystemd:
#endif
+ eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, data, args);
}
-EAPI void
+EINA_API void
eina_log_print_cb_file(const Eina_Log_Domain *d,
EINA_UNUSED Eina_Log_Level level,
const char *file,
@@ -2226,7 +2274,7 @@ end:
#endif
}
-EAPI void
+EINA_API void
eina_log_print(int domain, Eina_Log_Level level, const char *file,
const char *fnc, int line, const char *fmt, ...)
{
@@ -2268,7 +2316,7 @@ eina_log_print(int domain, Eina_Log_Level level, const char *file,
#endif
}
-EAPI void
+EINA_API void
eina_log_vprint(int domain, Eina_Log_Level level, const char *file,
const char *fnc, int line, const char *fmt, va_list args)
{
@@ -2308,7 +2356,7 @@ eina_log_vprint(int domain, Eina_Log_Level level, const char *file,
#endif
}
-EAPI void
+EINA_API void
eina_log_console_color_set(FILE *fp, const char *color)
{
#ifdef EINA_ENABLE_LOG
@@ -2344,7 +2392,7 @@ eina_log_console_color_set(FILE *fp, const char *color)
#endif
}
-EAPI void
+EINA_API void
eina_log_timing(int domain,
Eina_Log_State state,
const char *phase)
diff --git a/src/lib/eina/eina_log.h b/src/lib/eina/eina_log.h
index b4254fed4f..ca69d0405a 100644
--- a/src/lib/eina/eina_log.h
+++ b/src/lib/eina/eina_log.h
@@ -142,7 +142,7 @@
* custom data can be passed to that callback, powerful display
* messages can be displayed.
*
- * It is suggested to not use __FILE__, __FUNCTION__ or __LINE__ when
+ * It is suggested to not use __FILE__, __func__ or __LINE__ when
* writing that callback, but when defining macros (like
* EINA_LOG_ERR() and other macros).
*
@@ -230,7 +230,7 @@
* EINA_LOG_DOMAIN_GLOBAL is the general purpose log domain to be
* used, it is always registered and available everywhere.
*/
-EAPI extern int EINA_LOG_DOMAIN_GLOBAL;
+EINA_API extern int EINA_LOG_DOMAIN_GLOBAL;
#ifndef EINA_LOG_DOMAIN_DEFAULT
@@ -304,7 +304,7 @@ EAPI extern int EINA_LOG_DOMAIN_GLOBAL;
# define EINA_LOG(DOM, LEVEL, fmt, ...) \
do { \
if (LEVEL <= EINA_LOG_LEVEL_MAXIMUM) { \
- eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, \
+ eina_log_print(DOM, LEVEL, __FILE__, __func__, __LINE__, \
fmt, ## __VA_ARGS__); } \
} while (0)
# else
@@ -312,7 +312,7 @@ EAPI extern int EINA_LOG_DOMAIN_GLOBAL;
eina_log_print(DOM, \
LEVEL, \
__FILE__, \
- __FUNCTION__, \
+ __func__, \
__LINE__, \
fmt, \
## __VA_ARGS__)
@@ -441,7 +441,7 @@ struct _Eina_Log_Domain
* The main thread is considered the thread where the first
* eina_init() was called.
*/
-EAPI void eina_log_threads_enable(void);
+EINA_API void eina_log_threads_enable(void);
/**
@@ -482,8 +482,8 @@ typedef void (*Eina_Log_Print_Cb)(const Eina_Log_Domain *d,
*/
typedef enum _Eina_Log_State
{
- EINA_LOG_STATE_START,
- EINA_LOG_STATE_STOP
+ EINA_LOG_STATE_START, /**< Logging is Started */
+ EINA_LOG_STATE_STOP /**< Logging is Stopped */
} Eina_Log_State;
/*
@@ -504,7 +504,7 @@ typedef enum _Eina_Log_State
* This means you're safe from other calls but you should never
* call eina_log_print(), directly or indirectly.
*/
-EAPI void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) EINA_ARG_NONNULL(1);
+EINA_API void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) EINA_ARG_NONNULL(1);
/**
@@ -519,7 +519,7 @@ EAPI void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) EINA_ARG_NONNU
*
* @see eina_log_level_get()
*/
-EAPI void eina_log_level_set(int level);
+EINA_API void eina_log_level_set(int level);
/**
* @brief Gets the default log level.
@@ -528,7 +528,7 @@ EAPI void eina_log_level_set(int level);
*
* @see eina_log_level_set()
*/
-EAPI int eina_log_level_get(void) EINA_WARN_UNUSED_RESULT;
+EINA_API int eina_log_level_get(void) EINA_WARN_UNUSED_RESULT;
/**
* @brief Determines if a given @p level should be logged.
@@ -545,15 +545,15 @@ static inline Eina_Bool eina_log_level_check(int level);
* @brief Checks if current thread is the main thread.
*
* If there is no thread support (compiled with --disable-pthreads) or
- * threads were not enabled, then #EINA_TRUE is returned. The only case where
- * #EINA_FALSE is returned is when threads were successfully enabled but the
- * current thread is not the one that called eina_log_threads_init() (the
+ * threads were not enabled, then #EINA_TRUE is returned. The only case where
+ * #EINA_FALSE is returned is when threads were successfully enabled but the
+ * current thread is not the one that called eina_log_threads_init() (the
* main thread).
- *
- * @return #EINA_TRUE if the current thread is the one that called
- * eina_log_threads_init(), otherwise #EINA_FALSE.
+ *
+ * @return #EINA_TRUE if the current thread is the one that called
+ * eina_log_threads_init(), otherwise #EINA_FALSE.
*/
-EAPI Eina_Bool eina_log_main_thread_check(void) EINA_CONST EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_log_main_thread_check(void) EINA_CONST EINA_WARN_UNUSED_RESULT;
/**
@@ -565,7 +565,7 @@ EAPI Eina_Bool eina_log_main_thread_check(void) EINA_CONST EINA_WARN_UN
*
* @see eina_log_color_disable_get()
*/
-EAPI void eina_log_color_disable_set(Eina_Bool disabled);
+EINA_API void eina_log_color_disable_set(Eina_Bool disabled);
/**
* @brief Determines if color logging is enabled or disabled.
@@ -574,7 +574,7 @@ EAPI void eina_log_color_disable_set(Eina_Bool disabled);
*
* @see eina_log_color_disable_set()
*/
-EAPI Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets if originating file name logging should be disabled.
@@ -585,7 +585,7 @@ EAPI Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT
*
* @see eina_log_file_disable_get()
*/
-EAPI void eina_log_file_disable_set(Eina_Bool disabled);
+EINA_API void eina_log_file_disable_set(Eina_Bool disabled);
/**
* @brief Gets if originating file name logging should be disabled.
@@ -594,7 +594,7 @@ EAPI void eina_log_file_disable_set(Eina_Bool disabled);
*
* @see eina_log_file_disable_set()
*/
-EAPI Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets if originating function name logging should be disabled.
@@ -606,7 +606,7 @@ EAPI Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT;
*
* @see eina_log_function_disable_get()
*/
-EAPI void eina_log_function_disable_set(Eina_Bool disabled);
+EINA_API void eina_log_function_disable_set(Eina_Bool disabled);
/**
* @brief Gets if originating function name logging should be disabled.
@@ -615,7 +615,7 @@ EAPI void eina_log_function_disable_set(Eina_Bool disabled);
*
* @see eina_log_function_disable_set()
*/
-EAPI Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets if critical messages should abort the program.
@@ -630,7 +630,7 @@ EAPI Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RES
* @see eina_log_abort_on_critical_get()
* @see eina_log_abort_on_critical_level_set()
*/
-EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical);
+EINA_API void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical);
/**
* @brief Gets if critical messages should abort the program.
@@ -642,7 +642,7 @@ EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critic
* @see eina_log_abort_on_critical_set()
* @see eina_log_abort_on_critical_level_set()
*/
-EAPI Eina_Bool eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets level that triggers abort if abort-on-critical is set.
@@ -657,7 +657,7 @@ EAPI Eina_Bool eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RE
* @see eina_log_abort_on_critical_level_get()
* @see eina_log_abort_on_critical_get()
*/
-EAPI void eina_log_abort_on_critical_level_set(int critical_level);
+EINA_API void eina_log_abort_on_critical_level_set(int critical_level);
/**
* @brief Gets level that triggers abort if abort-on-critical is set.
@@ -669,7 +669,7 @@ EAPI void eina_log_abort_on_critical_level_set(int critical_level)
* @see eina_log_abort_on_critical_level_set()
* @see eina_log_abort_on_critical_get()
*/
-EAPI int eina_log_abort_on_critical_level_get(void) EINA_WARN_UNUSED_RESULT;
+EINA_API int eina_log_abort_on_critical_level_get(void) EINA_WARN_UNUSED_RESULT;
/**
@@ -684,7 +684,7 @@ EAPI int eina_log_abort_on_critical_level_get(void) EINA_WARN_UNU
* registration.
* @param[in] level Level to use to limit eina_log_print() for given domain.
*/
-EAPI void eina_log_domain_level_set(const char *domain_name, int level) EINA_ARG_NONNULL(1);
+EINA_API void eina_log_domain_level_set(const char *domain_name, int level) EINA_ARG_NONNULL(1);
/**
* @brief Gets the domain level given its name.
@@ -704,7 +704,7 @@ EAPI void eina_log_domain_level_set(const char *domain_name, int l
* @see eina_log_domain_level_set()
* @see eina_log_domain_registered_level_get()
*/
-EAPI int eina_log_domain_level_get(const char *domain_name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API int eina_log_domain_level_get(const char *domain_name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Gets the domain level given its identifier.
@@ -717,7 +717,7 @@ EAPI int eina_log_domain_level_get(const char *domain_name) EINA_
* @return #EINA_TRUE if level should be printed, #EINA_FALSE if not.
* (domain's level is greater or equal @a level).
*/
-EAPI int eina_log_domain_registered_level_get(int domain) EINA_WARN_UNUSED_RESULT;
+EINA_API int eina_log_domain_registered_level_get(int domain) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets the domain level given its identifier.
@@ -729,7 +729,7 @@ EAPI int eina_log_domain_registered_level_get(int domain) EINA_WA
* @param[in] level Level to use to limit eina_log_print() for given domain.
* @since 1.10
*/
-EAPI void eina_log_domain_registered_level_set(int domain, int level);
+EINA_API void eina_log_domain_registered_level_set(int domain, int level);
static inline Eina_Bool eina_log_domain_level_check(int domain, int level);
@@ -746,7 +746,7 @@ static inline Eina_Bool eina_log_domain_level_check(int domain, int level);
*
* @note MT: Safe to call from any thread.
*/
-EAPI int eina_log_domain_register(const char *name, const char *color) EINA_ARG_NONNULL(1);
+EINA_API int eina_log_domain_register(const char *name, const char *color) EINA_ARG_NONNULL(1);
/**
* @brief Forgets about a logging domain registered by eina_log_domain_register()
@@ -756,7 +756,7 @@ EAPI int eina_log_domain_register(const char *name, const char *color) EINA_ARG
*
* @note MT: Safe to call from any thread.
*/
-EAPI void eina_log_domain_unregister(int domain);
+EINA_API void eina_log_domain_unregister(int domain);
/*
* Logging functions.
@@ -785,7 +785,7 @@ EAPI void eina_log_domain_unregister(int domain);
* @note MT: This function may be called from different threads if
* eina_log_threads_enable() was called before.
*/
-EAPI void eina_log_print(int domain,
+EINA_API void eina_log_print(int domain,
Eina_Log_Level level,
const char *file,
const char *function,
@@ -818,7 +818,7 @@ EAPI void eina_log_print(int domain,
*
* @see eina_log_print()
*/
-EAPI void eina_log_vprint(int domain,
+EINA_API void eina_log_vprint(int domain,
Eina_Log_Level level,
const char *file,
const char *fnc,
@@ -856,7 +856,7 @@ EAPI void eina_log_vprint(int domain,
* @note MT: Threads different from main thread will have thread id
* appended to domain name.
*/
-EAPI void eina_log_print_cb_stdout(const Eina_Log_Domain *d,
+EINA_API void eina_log_print_cb_stdout(const Eina_Log_Domain *d,
Eina_Log_Level level,
const char *file,
const char *fnc,
@@ -898,7 +898,7 @@ EAPI void eina_log_print_cb_stdout(const Eina_Log_Domain *d,
* @note MT: Threads different from main thread will have thread id
* appended to domain name.
*/
-EAPI void eina_log_print_cb_stderr(const Eina_Log_Domain *d,
+EINA_API void eina_log_print_cb_stderr(const Eina_Log_Domain *d,
Eina_Log_Level level,
const char *file,
const char *fnc,
@@ -925,7 +925,7 @@ EAPI void eina_log_print_cb_stderr(const Eina_Log_Domain *d,
* @note MT: Threads different from main thread will have thread id
* appended to domain name.
*/
-EAPI void eina_log_print_cb_file(const Eina_Log_Domain *d,
+EINA_API void eina_log_print_cb_file(const Eina_Log_Domain *d,
Eina_Log_Level level,
const char *file,
const char *fnc,
@@ -954,7 +954,7 @@ EAPI void eina_log_print_cb_file(const Eina_Log_Domain *d,
*
* @since 1.8
*/
-EAPI void eina_log_print_cb_journald(const Eina_Log_Domain *d,
+EINA_API void eina_log_print_cb_journald(const Eina_Log_Domain *d,
Eina_Log_Level level,
const char *file,
const char *fnc,
@@ -975,16 +975,16 @@ EAPI void eina_log_print_cb_journald(const Eina_Log_Domain *d,
*
* @since 1.7
*/
-EAPI void eina_log_console_color_set(FILE *fp,
+EINA_API void eina_log_console_color_set(FILE *fp,
const char *color) EINA_ARG_NONNULL(1, 2);
/** String that indicates the log system is initializing. */
-extern EAPI const char *_eina_log_state_init;
+extern EINA_API const char *_eina_log_state_init;
/** String that indicates the log system is shutting down. */
-extern EAPI const char *_eina_log_state_shutdown;
+extern EINA_API const char *_eina_log_state_shutdown;
/**
* @def EINA_LOG_STATE_INIT
- * String that indicates the log system is initializing
+ * String that indicates the log system is initializing
*/
#define EINA_LOG_STATE_INIT _eina_log_state_init
/**
@@ -1006,7 +1006,7 @@ extern EAPI const char *_eina_log_state_shutdown;
* @note The phase name should be available for all the life of the timing.
* @since 1.8
*/
-EAPI void eina_log_timing(int domain,
+EINA_API void eina_log_timing(int domain,
Eina_Log_State state,
const char *phase) EINA_ARG_NONNULL(1, 3);
diff --git a/src/lib/eina/eina_magic.c b/src/lib/eina/eina_magic.c
index cb0d997eac..ff8b0f340c 100644
--- a/src/lib/eina/eina_magic.c
+++ b/src/lib/eina/eina_magic.c
@@ -119,7 +119,7 @@ _eina_magic_strings_alloc(void)
* Global *
*============================================================================*/
-EAPI Eina_Error EINA_ERROR_MAGIC_FAILED = 0;
+EINA_API Eina_Error EINA_ERROR_MAGIC_FAILED = 0;
/**
* @internal
@@ -185,7 +185,7 @@ eina_magic_string_shutdown(void)
/*============================================================================*
* API *
*============================================================================*/
-EAPI const char *
+EINA_API const char *
eina_magic_string_get(Eina_Magic magic)
{
Eina_Magic_String *ems;
@@ -209,7 +209,7 @@ eina_magic_string_get(Eina_Magic magic)
return "(unknown)";
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_magic_string_set(Eina_Magic magic, const char *magic_name)
{
Eina_Magic_String *ems;
@@ -234,7 +234,7 @@ eina_magic_string_set(Eina_Magic magic, const char *magic_name)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_magic_string_static_set(Eina_Magic magic, const char *magic_name)
{
Eina_Magic_String *ems;
@@ -257,7 +257,7 @@ eina_magic_string_static_set(Eina_Magic magic, const char *magic_name)
# undef eina_magic_fail
#endif
-EAPI void
+EINA_API void
eina_magic_fail(void *d,
Eina_Magic m,
Eina_Magic req_m,
diff --git a/src/lib/eina/eina_magic.h b/src/lib/eina/eina_magic.h
index 7222f045f2..c512d8da5f 100644
--- a/src/lib/eina/eina_magic.h
+++ b/src/lib/eina/eina_magic.h
@@ -150,7 +150,7 @@ typedef unsigned int Eina_Magic;
*
* @warning The returned value must not be freed.
*/
-EAPI const char *eina_magic_string_get(Eina_Magic magic) EINA_WARN_UNUSED_RESULT;
+EINA_API const char *eina_magic_string_get(Eina_Magic magic) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets the string associated with the given magic identifier.
* @details This function sets the string @p magic_name to @p magic. It is not
@@ -165,7 +165,7 @@ EAPI const char *eina_magic_string_get(Eina_Magic magic) EINA_WARN_UNUSED_RESULT
*
* @see eina_magic_string_static_set()
*/
-EAPI Eina_Bool eina_magic_string_set(Eina_Magic magic,
+EINA_API Eina_Bool eina_magic_string_set(Eina_Magic magic,
const char *magic_name) EINA_ARG_NONNULL(2);
/**
@@ -183,7 +183,7 @@ EAPI Eina_Bool eina_magic_string_set(Eina_Magic magic,
*
* @see eina_magic_string_set()
*/
-EAPI Eina_Bool eina_magic_string_static_set(Eina_Magic magic,
+EINA_API Eina_Bool eina_magic_string_static_set(Eina_Magic magic,
const char *magic_name) EINA_ARG_NONNULL(2);
/**
@@ -200,7 +200,7 @@ EAPI Eina_Bool eina_magic_string_static_set(Eina_Magic magic,
* @var EINA_ERROR_MAGIC_FAILED
* @brief The error identifier corresponding to the magic check failure.
*/
-EAPI extern Eina_Error EINA_ERROR_MAGIC_FAILED;
+EINA_API extern Eina_Error EINA_ERROR_MAGIC_FAILED;
#ifdef EINA_MAGIC_DEBUG
@@ -249,7 +249,7 @@ EAPI extern Eina_Error EINA_ERROR_MAGIC_FAILED;
/**
* @def EINA_MAGIC_FAIL(d, m)
* @brief Definition to call eina_magic_fail() with the parameters @p d, @p d->__magic,
- * @p m, __FILE__, __FUNCTION__, and __LINE__. @p d must be a structure that
+ * @p m, __FILE__, __func__, and __LINE__. @p d must be a structure that
* holds an Eina magic number declaration. Use #EINA_MAGIC to add such a
* declaration.
*
@@ -261,7 +261,7 @@ EAPI extern Eina_Error EINA_ERROR_MAGIC_FAILED;
(d) ? (d)->__magic : 0, \
(m), \
__FILE__, \
- __FUNCTION__, \
+ __func__, \
__LINE__);
/**
@@ -289,7 +289,7 @@ EAPI extern Eina_Error EINA_ERROR_MAGIC_FAILED;
* called and the program stops. It is useful for debugging programs
* with gdb.
*/
-EAPI void eina_magic_fail(void *d, Eina_Magic m, Eina_Magic req_m,
+EINA_API void eina_magic_fail(void *d, Eina_Magic m, Eina_Magic req_m,
const char *file, const char *fnc,
int line) EINA_ARG_NONNULL(4, 5);
diff --git a/src/lib/eina/eina_main.c b/src/lib/eina/eina_main.c
index b8856474d3..7b71e87458 100644
--- a/src/lib/eina/eina_main.c
+++ b/src/lib/eina/eina_main.c
@@ -30,6 +30,14 @@
# include <unistd.h>
#endif
+#ifndef _WIN32
+# ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+# include <sys/stat.h>
+# include <fcntl.h>
+#endif
+
#ifdef HAVE_MCHECK_H
# ifdef HAVE_MTRACE
# define MT 1
@@ -92,13 +100,13 @@ static int _eina_log_dom = -1;
#endif
#define DBG(...) EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__)
-EAPI Eina_Bool _eina_threads_activated = EINA_FALSE;
-EAPI Eina_Error EINA_ERROR_NOT_MAIN_LOOP = 0;
-EAPI Eina_Error EINA_ERROR_NOT_IMPLEMENTED = 0;
-EAPI unsigned int eina_seed = 0;
+EINA_API Eina_Bool _eina_threads_activated = EINA_FALSE;
+EINA_API Eina_Error EINA_ERROR_NOT_MAIN_LOOP = 0;
+EINA_API Eina_Error EINA_ERROR_NOT_IMPLEMENTED = 0;
+EINA_API unsigned int eina_seed = 0;
#ifdef EFL_HAVE_THREADS
-EAPI pthread_t _eina_main_loop;
+EINA_API pthread_t _eina_main_loop;
#endif
#ifdef MT
@@ -106,12 +114,16 @@ static int _mt_enabled = 0;
#endif
#ifdef EFL_HAVE_THREADS
-EAPI int _eina_threads_debug = 0;
-EAPI pthread_mutex_t _eina_tracking_lock;
-EAPI Eina_Inlist *_eina_tracking = NULL;
+EINA_API int _eina_threads_debug = 0;
+EINA_API pthread_mutex_t _eina_tracking_lock;
+EINA_API Eina_Inlist *_eina_tracking = NULL;
extern Eina_Lock _sysmon_lock;
#endif
+#ifdef _WIN32
+BCRYPT_ALG_HANDLE _eina_bcrypt_provider;
+#endif
+
/* place module init/shutdown functions here to avoid other modules
* calling them by mistake.
*/
@@ -154,6 +166,7 @@ extern Eina_Lock _sysmon_lock;
S(slstr);
S(promise);
S(vpath);
+ S(abstract_content);
#undef S
struct eina_desc_setup
@@ -202,6 +215,7 @@ static const struct eina_desc_setup _eina_desc_setup[] = {
S(safepointer),
S(slstr),
S(promise),
+ S(abstract_content)
#undef S
};
static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) /
@@ -271,9 +285,9 @@ _eina_threads_do_shutdown(void)
* @var eina_version
* @brief Eina version (defined at configuration time)
*/
-EAPI Eina_Version *eina_version = &_version;
+EINA_API Eina_Version *eina_version = &_version;
-EAPI int
+EINA_API int
eina_init(void)
{
const struct eina_desc_setup *itr, *itr_end;
@@ -281,7 +295,24 @@ eina_init(void)
if (EINA_LIKELY(_eina_main_count > 0))
return ++_eina_main_count;
- srand(time(NULL));
+#ifdef _WIN32
+ if (!BCRYPT_SUCCESS(BCryptOpenAlgorithmProvider(&_eina_bcrypt_provider,
+ BCRYPT_RNG_ALGORITHM,
+ NULL, 0)))
+ return 0;
+#else
+ int fd = open("/dev/urandom", O_RDONLY);
+ if (fd >= 0)
+ {
+ unsigned int val;
+
+ if (read(fd, &val, sizeof(val)) == sizeof(val)) srand(val);
+ else srand(time(NULL));
+ close(fd);
+ }
+ else
+#endif
+ srand(time(NULL));
while (eina_seed == 0)
eina_seed = rand();
@@ -344,7 +375,7 @@ eina_init(void)
return 1;
}
-EAPI int
+EINA_API int
eina_shutdown(void)
{
if (_eina_main_count <= 0)
@@ -374,13 +405,17 @@ eina_shutdown(void)
_mt_enabled = 0;
}
#endif
+
+#ifdef _WIN32
+ BCryptCloseAlgorithmProvider(_eina_bcrypt_provider, 0);
+#endif
}
return _eina_main_count;
}
-EAPI int
+EINA_API int
eina_threads_init(void)
{
#ifdef EFL_HAVE_THREADS
@@ -406,7 +441,7 @@ eina_threads_init(void)
#endif
}
-EAPI int
+EINA_API int
eina_threads_shutdown(void)
{
#ifdef EFL_HAVE_THREADS
@@ -430,7 +465,7 @@ eina_threads_shutdown(void)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_main_loop_is(void)
{
#ifdef EFL_HAVE_THREADS
@@ -447,7 +482,7 @@ eina_main_loop_is(void)
}
/** The purpose of this API should not be documented, it is used only by the one who know what they are doing. */
-EAPI void
+EINA_API void
eina_main_loop_define(void)
{
#ifdef EFL_HAVE_THREADS
diff --git a/src/lib/eina/eina_main.h b/src/lib/eina/eina_main.h
index 7be3bfdc0c..7b38917de4 100644
--- a/src/lib/eina/eina_main.h
+++ b/src/lib/eina/eina_main.h
@@ -24,12 +24,6 @@
#include "eina_types.h"
#include "eina_error.h"
-/**
- * @addtogroup Eina_Main_Group Main
- *
- * @brief These functions provide general initialization and shut down
- * functions.
- */
/**
* @addtogroup Eina_Core_Group Core
@@ -40,6 +34,9 @@
/**
* @defgroup Eina_Main_Group Main
*
+ * @brief These functions provide general initialization and shut down
+ * functions.
+ *
* @{
*/
@@ -56,6 +53,8 @@
#define EINA_VERSION_MINOR EFL_VERSION_MINOR
/**
+ * @struct _Eina_Version
+ * The version of Eina.
* @typedef Eina_Version
* The version of Eina.
*/
@@ -67,9 +66,9 @@ typedef struct _Eina_Version
int revision; /**< Revision component of the version */
} Eina_Version;
-EAPI extern Eina_Version *eina_version;
+EINA_API extern Eina_Version *eina_version;
-EAPI extern Eina_Error EINA_ERROR_NOT_IMPLEMENTED;
+EINA_API extern Eina_Error EINA_ERROR_NOT_IMPLEMENTED;
/**
* @brief Initializes the Eina library.
@@ -176,7 +175,7 @@ EAPI extern Eina_Error EINA_ERROR_NOT_IMPLEMENTED;
* threads, but requires Eina to be compiled with such feature.
*
*/
-EAPI int eina_init(void);
+EINA_API int eina_init(void);
/**
* @brief Shuts down the Eina library.
@@ -192,7 +191,7 @@ EAPI int eina_init(void);
* not call any of the Eina functions anymore. You must call
* eina_init() again to use the Eina functions again.
*/
-EAPI int eina_shutdown(void);
+EINA_API int eina_shutdown(void);
/**
* @brief Initializes the mutexes of the Eina library.
@@ -209,7 +208,7 @@ EAPI int eina_shutdown(void);
*
* This function should never be called outside of the main loop.
*/
-EAPI int eina_threads_init(void);
+EINA_API int eina_threads_init(void);
/**
* @brief Shuts down mutexes in the Eina library.
@@ -227,7 +226,7 @@ EAPI int eina_threads_init(void);
*
* This function should never be called outside of the main loop.
*/
-EAPI int eina_threads_shutdown(void);
+EINA_API int eina_threads_shutdown(void);
/**
* @brief Checks if you are calling this function from the same thread Eina was initialized or not.
@@ -240,7 +239,7 @@ EAPI int eina_threads_shutdown(void);
* the main loop. With this call you could know if you can call an EFL
* function or not.
*/
-EAPI Eina_Bool eina_main_loop_is(void);
+EINA_API Eina_Bool eina_main_loop_is(void);
/**
* @brief You should never use this function except if you really really know what your are doing.
@@ -249,7 +248,7 @@ EAPI Eina_Bool eina_main_loop_is(void);
* If you are reading this documentation, that certainly means you don't know what is the purpose of
* this call and you should just not use it.
*/
-EAPI void eina_main_loop_define(void);
+EINA_API void eina_main_loop_define(void);
/**
* @}
diff --git a/src/lib/eina/eina_matrix.c b/src/lib/eina/eina_matrix.c
index 7c30d1e767..9f77a84b34 100644
--- a/src/lib/eina/eina_matrix.c
+++ b/src/lib/eina/eina_matrix.c
@@ -62,48 +62,11 @@
/*============================================================================*
* Local *
*============================================================================*/
-/** @cond internal */
-/*
- * In the range [-pi pi]
- * (4/pi)*x - ((4/(pi*pi))*x*abs(x))
- * http://www.devmaster.net/forums/showthread.php?t=5784
- */
-#define EXTRA_PRECISION
-static inline double
- _sin(double x)
-{
- const double B = 4/M_PI;
- const double C = -4/(M_PI*M_PI);
-
- double y = (B * x) + (C * x * fabs(x));
-
-#ifdef EXTRA_PRECISION
- // const float Q = 0.775;
- const double P = 0.225;
-
- y = P * (y * fabs(y) - y) + y; // Q * y + P * y * abs(y)
-#endif
- return y;
-}
-
-static inline double
-_cos(double x)
-{
- x += M_PI_2;
-
- if (x > M_PI) // Original x > pi/2
- {
- x -= 2 * M_PI; // Wrap: cos(x) = cos(x - 2 pi)
- }
-
- return _sin(x);
-}
-/** @endcond */
/*============================================================================*
* API *
*============================================================================*/
-EAPI Eina_Matrix_Type
+EINA_API Eina_Matrix_Type
eina_matrix3_type_get(const Eina_Matrix3 *m)
{
if (!EINA_DBL_EQ(MATRIX_ZX(m), 0.0) ||
@@ -124,7 +87,7 @@ eina_matrix3_type_get(const Eina_Matrix3 *m)
}
}
-EAPI Eina_Matrix_Type
+EINA_API Eina_Matrix_Type
eina_matrix4_type_get(const Eina_Matrix4 *m)
{
if (EINA_DBL_EQ(MATRIX_XX(m), 1.0) &&
@@ -147,7 +110,7 @@ eina_matrix4_type_get(const Eina_Matrix4 *m)
return EINA_MATRIX_TYPE_AFFINE;
}
-EAPI Eina_Matrix_Type
+EINA_API Eina_Matrix_Type
eina_matrix3_f16p16_type_get(const Eina_Matrix3_F16p16 *m)
{
if ((MATRIX_ZX(m) != 0) || (MATRIX_ZY(m) != 0) || (MATRIX_ZZ(m) != 65536))
@@ -162,7 +125,7 @@ eina_matrix3_f16p16_type_get(const Eina_Matrix3_F16p16 *m)
}
}
-EAPI void
+EINA_API void
eina_matrix3_values_set(Eina_Matrix3 *m,
double xx, double xy, double xz,
double yx, double yy, double yz,
@@ -179,7 +142,7 @@ eina_matrix3_values_set(Eina_Matrix3 *m,
MATRIX_ZZ(m) = zz;
}
-EAPI void
+EINA_API void
eina_matrix3_values_get(const Eina_Matrix3 *m,
double *xx, double *xy, double *xz,
double *yx, double *yy, double *yz,
@@ -196,7 +159,7 @@ eina_matrix3_values_get(const Eina_Matrix3 *m,
if (zz) *zz = MATRIX_ZZ(m);
}
-EAPI void
+EINA_API void
eina_matrix4_values_set(Eina_Matrix4 *m,
double xx, double xy, double xz, double xw,
double yx, double yy, double yz, double yw,
@@ -221,7 +184,7 @@ eina_matrix4_values_set(Eina_Matrix4 *m,
MATRIX_WW(m) = ww;
}
-EAPI void
+EINA_API void
eina_matrix4_values_get(const Eina_Matrix4 *m,
double *xx, double *xy, double *xz, double *xw,
double *yx, double *yy, double *yz, double *yw,
@@ -246,7 +209,7 @@ eina_matrix4_values_get(const Eina_Matrix4 *m,
if (ww) *ww = MATRIX_WW(m);
}
-EAPI void
+EINA_API void
eina_matrix3_fixed_values_get(const Eina_Matrix3 *m,
Eina_F16p16 *xx, Eina_F16p16 *xy, Eina_F16p16 *xz,
Eina_F16p16 *yx, Eina_F16p16 *yy, Eina_F16p16 *yz,
@@ -263,7 +226,7 @@ eina_matrix3_fixed_values_get(const Eina_Matrix3 *m,
if (zz) *zz = eina_f16p16_double_from(MATRIX_ZZ(m));
}
-EAPI void
+EINA_API void
eina_matrix3_matrix3_f16p16_to(const Eina_Matrix3 *m,
Eina_Matrix3_F16p16 *fm)
{
@@ -273,7 +236,7 @@ eina_matrix3_matrix3_f16p16_to(const Eina_Matrix3 *m,
&fm->zx, &fm->zy, &fm->zz);
}
-EAPI void
+EINA_API void
eina_matrix3_point_transform(const Eina_Matrix3 *m,
double x, double y,
double *xr, double *yr)
@@ -298,7 +261,7 @@ eina_matrix3_point_transform(const Eina_Matrix3 *m,
if (yr) *yr = yrr;
}
-EAPI void
+EINA_API void
eina_matrix3_rectangle_transform(const Eina_Matrix3 *m,
const Eina_Rectangle *r,
const Eina_Quad *q)
@@ -309,7 +272,7 @@ eina_matrix3_rectangle_transform(const Eina_Matrix3 *m,
eina_matrix3_point_transform(m, r->x, r->y + r->h, &((Eina_Quad *)q)->x3, &((Eina_Quad *)q)->y3);
}
-EAPI void
+EINA_API void
eina_matrix3_cofactor(const Eina_Matrix3 *m, Eina_Matrix3 *a)
{
double a11, a12, a13, a21, a22, a23, a31, a32, a33;
@@ -339,7 +302,7 @@ eina_matrix3_cofactor(const Eina_Matrix3 *m, Eina_Matrix3 *a)
MATRIX_ZZ(a) = a33;
}
-EAPI void
+EINA_API void
eina_matrix3_transpose(const Eina_Matrix3 *m, Eina_Matrix3 *a)
{
MATRIX_XX(a) = MATRIX_XX(m);
@@ -355,7 +318,7 @@ eina_matrix3_transpose(const Eina_Matrix3 *m, Eina_Matrix3 *a)
MATRIX_ZZ(a) = MATRIX_ZZ(m);
}
-EAPI void
+EINA_API void
eina_matrix3_adjoint(const Eina_Matrix3 *m, Eina_Matrix3 *a)
{
Eina_Matrix3 cofactor;
@@ -366,7 +329,7 @@ eina_matrix3_adjoint(const Eina_Matrix3 *m, Eina_Matrix3 *a)
eina_matrix3_transpose(&cofactor, a);
}
-EAPI double
+EINA_API double
eina_matrix3_determinant(const Eina_Matrix3 *m)
{
double det;
@@ -378,7 +341,7 @@ eina_matrix3_determinant(const Eina_Matrix3 *m)
return det;
}
-EAPI void
+EINA_API void
eina_matrix3_divide(Eina_Matrix3 *m, double scalar)
{
MATRIX_XX(m) /= scalar;
@@ -394,7 +357,7 @@ eina_matrix3_divide(Eina_Matrix3 *m, double scalar)
MATRIX_ZZ(m) /= scalar;
}
-EAPI void
+EINA_API void
eina_matrix3_inverse(const Eina_Matrix3 *m, Eina_Matrix3 *m2)
{
double scalar;
@@ -412,7 +375,7 @@ eina_matrix3_inverse(const Eina_Matrix3 *m, Eina_Matrix3 *m2)
eina_matrix3_divide(m2, scalar);
}
-EAPI void
+EINA_API void
eina_matrix3_compose(const Eina_Matrix3 *m1,
const Eina_Matrix3 *m2,
Eina_Matrix3 *dst)
@@ -442,7 +405,7 @@ eina_matrix3_compose(const Eina_Matrix3 *m1,
MATRIX_ZZ(dst) = a33;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrix3_equal(const Eina_Matrix3 *m1, const Eina_Matrix3 *m2)
{
if (!EINA_DBL_EQ(m1->xx, m2->xx) ||
@@ -458,7 +421,7 @@ eina_matrix3_equal(const Eina_Matrix3 *m1, const Eina_Matrix3 *m2)
return EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_matrix3_f16p16_compose(const Eina_Matrix3_F16p16 *m1,
const Eina_Matrix3_F16p16 *m2,
Eina_Matrix3_F16p16 *dst)
@@ -506,7 +469,7 @@ eina_matrix3_f16p16_compose(const Eina_Matrix3_F16p16 *m1,
MATRIX_ZZ(dst) = a33;
}
-EAPI void
+EINA_API void
eina_matrix3_translate(Eina_Matrix3 *m, double tx, double ty)
{
Eina_Matrix3 tmp;
@@ -522,7 +485,7 @@ eina_matrix3_translate(Eina_Matrix3 *m, double tx, double ty)
eina_matrix3_compose(m, &tmp, m);
}
-EAPI void
+EINA_API void
eina_matrix3_scale(Eina_Matrix3 *m, double sx, double sy)
{
Eina_Matrix3 tmp;
@@ -538,7 +501,7 @@ eina_matrix3_scale(Eina_Matrix3 *m, double sx, double sy)
eina_matrix3_compose(m, &tmp, m);
}
-EAPI void
+EINA_API void
eina_matrix3_rotate(Eina_Matrix3 *m, double rad)
{
double c, s;
@@ -573,7 +536,7 @@ eina_matrix3_rotate(Eina_Matrix3 *m, double rad)
eina_matrix3_compose(m, &tmp, m);
}
-EAPI void
+EINA_API void
eina_matrix3_identity(Eina_Matrix3 *m)
{
MATRIX_XX(m) = 1;
@@ -587,7 +550,7 @@ eina_matrix3_identity(Eina_Matrix3 *m)
MATRIX_ZZ(m) = 1;
}
-EAPI void
+EINA_API void
eina_matrix3_f16p16_identity(Eina_Matrix3_F16p16 *m)
{
MATRIX_XX(m) = 65536;
@@ -601,7 +564,7 @@ eina_matrix3_f16p16_identity(Eina_Matrix3_F16p16 *m)
MATRIX_ZZ(m) = 65536;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrix3_square_quad_map(Eina_Matrix3 *m, const Eina_Quad *q)
{
// x0 - x1 + x2 - x3
@@ -652,7 +615,7 @@ eina_matrix3_square_quad_map(Eina_Matrix3 *m, const Eina_Quad *q)
}
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrix3_quad_square_map(Eina_Matrix3 *m,
const Eina_Quad *q)
{
@@ -672,7 +635,7 @@ eina_matrix3_quad_square_map(Eina_Matrix3 *m,
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrix3_quad_quad_map(Eina_Matrix3 *m,
const Eina_Quad *src,
const Eina_Quad *dst)
@@ -689,7 +652,7 @@ eina_matrix3_quad_quad_map(Eina_Matrix3 *m,
return EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_matrix4_matrix3_to(Eina_Matrix3 *m3, const Eina_Matrix4 *m4)
{
MATRIX_XX(m3) = MATRIX_XX(m4);
@@ -703,7 +666,7 @@ eina_matrix4_matrix3_to(Eina_Matrix3 *m3, const Eina_Matrix4 *m4)
MATRIX_ZZ(m3) = MATRIX_WW(m4);
}
-EAPI void
+EINA_API void
eina_matrix3_matrix4_to(Eina_Matrix4 *m4, const Eina_Matrix3 *m3)
{
MATRIX_XX(m4) = MATRIX_XX(m3);
@@ -724,7 +687,7 @@ eina_matrix3_matrix4_to(Eina_Matrix4 *m4, const Eina_Matrix3 *m3)
MATRIX_WW(m4) = MATRIX_ZZ(m3);
}
-EAPI double
+EINA_API double
eina_matrix4_determinant(const Eina_Matrix4 *m)
{
return
@@ -754,7 +717,7 @@ eina_matrix4_determinant(const Eina_Matrix4 *m)
+ MATRIX_XX(m) * MATRIX_YY(m) * MATRIX_ZZ(m) * MATRIX_WW(m);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrix4_normalized(Eina_Matrix4 *out, const Eina_Matrix4 *in)
{
double det;
@@ -782,7 +745,7 @@ eina_matrix4_normalized(Eina_Matrix4 *out, const Eina_Matrix4 *in)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrix4_inverse(Eina_Matrix4 *out, const Eina_Matrix4 *in)
{
double det;
@@ -945,7 +908,7 @@ eina_matrix4_inverse(Eina_Matrix4 *out, const Eina_Matrix4 *in)
return EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_matrix4_transpose(Eina_Matrix4 *out, const Eina_Matrix4 *in)
{
MATRIX_XX(out) = MATRIX_XX(in);
@@ -966,7 +929,7 @@ eina_matrix4_transpose(Eina_Matrix4 *out, const Eina_Matrix4 *in)
MATRIX_WW(out) = MATRIX_WW(in);
}
-EAPI void
+EINA_API void
eina_matrix4_multiply_copy(Eina_Matrix4 *out,
const Eina_Matrix4 *mat_a, const Eina_Matrix4 *mat_b)
{
@@ -983,7 +946,7 @@ eina_matrix4_multiply_copy(Eina_Matrix4 *out,
}
}
-EAPI void
+EINA_API void
eina_matrix4_identity(Eina_Matrix4 *out)
{
memset(out, 0, sizeof (Eina_Matrix4));
@@ -994,7 +957,7 @@ eina_matrix4_identity(Eina_Matrix4 *out)
MATRIX_WW(out) = 1.0;
}
-EAPI Eina_Matrix_Type
+EINA_API Eina_Matrix_Type
eina_matrix2_type_get(const Eina_Matrix2 *m)
{
if (EINA_DBL_EQ(MATRIX_XX(m), 1.0) &&
@@ -1005,19 +968,19 @@ eina_matrix2_type_get(const Eina_Matrix2 *m)
return EINA_MATRIX_TYPE_AFFINE;
}
-EAPI void
+EINA_API void
eina_matrix4_array_set(Eina_Matrix4 *m, const double *v)
{
memcpy(&MATRIX_XX(m), v, sizeof(double) * 16);
}
-EAPI void
+EINA_API void
eina_matrix4_copy(Eina_Matrix4 *dst, const Eina_Matrix4 *src)
{
memcpy(dst, src, sizeof(Eina_Matrix4));
}
-EAPI void
+EINA_API void
eina_matrix4_multiply(Eina_Matrix4 *out, const Eina_Matrix4 *mat_a,
const Eina_Matrix4 *mat_b)
{
@@ -1033,44 +996,10 @@ eina_matrix4_multiply(Eina_Matrix4 *out, const Eina_Matrix4 *mat_a,
return;
}
- MATRIX_XX(out) = MATRIX_XX(mat_a) * MATRIX_XX(mat_b) + MATRIX_YX(mat_a) * MATRIX_XY(mat_b) +
- MATRIX_ZX(mat_a) * MATRIX_XZ(mat_b) + MATRIX_WX(mat_a) * MATRIX_XW(mat_b);
- MATRIX_YX(out) = MATRIX_XX(mat_a) * MATRIX_YX(mat_b) + MATRIX_YX(mat_a) * MATRIX_YY(mat_b) +
- MATRIX_ZX(mat_a) * MATRIX_YZ(mat_b) + MATRIX_WX(mat_a) * MATRIX_YW(mat_b);
- MATRIX_ZX(out) = MATRIX_XX(mat_a) * MATRIX_ZX(mat_b) + MATRIX_YX(mat_a) * MATRIX_ZY(mat_b) +
- MATRIX_ZX(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_WX(mat_a) * MATRIX_ZW(mat_b);
- MATRIX_WX(out) = MATRIX_XX(mat_a) * MATRIX_WX(mat_b) + MATRIX_YX(mat_a) * MATRIX_WY(mat_b) +
- MATRIX_ZX(mat_a) * MATRIX_WZ(mat_b) + MATRIX_WX(mat_a) * MATRIX_WW(mat_b);
-
- MATRIX_XY(out) = MATRIX_XY(mat_a) * MATRIX_XX(mat_b) + MATRIX_YY(mat_a) * MATRIX_XY(mat_b) +
- MATRIX_ZY(mat_a) * MATRIX_XZ(mat_b) + MATRIX_WY(mat_a) * MATRIX_XW(mat_b);
- MATRIX_YY(out) = MATRIX_XY(mat_a) * MATRIX_YX(mat_b) + MATRIX_YY(mat_a) * MATRIX_YY(mat_b) +
- MATRIX_ZY(mat_a) * MATRIX_YZ(mat_b) + MATRIX_WY(mat_a) * MATRIX_YW(mat_b);
- MATRIX_ZY(out) = MATRIX_XY(mat_a) * MATRIX_ZX(mat_b) + MATRIX_YY(mat_a) * MATRIX_ZY(mat_b) +
- MATRIX_ZY(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_WY(mat_a) * MATRIX_ZW(mat_b);
- MATRIX_WY(out) = MATRIX_XY(mat_a) * MATRIX_WX(mat_b) + MATRIX_YY(mat_a) * MATRIX_WY(mat_b) +
- MATRIX_ZY(mat_a) * MATRIX_WZ(mat_b) + MATRIX_WY(mat_a) * MATRIX_WW(mat_b);
-
- MATRIX_XZ(out) = MATRIX_XZ(mat_a) * MATRIX_XX(mat_b) + MATRIX_YZ(mat_a) * MATRIX_XY(mat_b) +
- MATRIX_ZZ(mat_a) * MATRIX_XZ(mat_b) + MATRIX_WZ(mat_a) * MATRIX_XW(mat_b);
- MATRIX_YZ(out) = MATRIX_XZ(mat_a) * MATRIX_YX(mat_b) + MATRIX_YZ(mat_a) * MATRIX_YY(mat_b) +
- MATRIX_ZZ(mat_a) * MATRIX_YZ(mat_b) + MATRIX_WZ(mat_a) * MATRIX_YW(mat_b);
- MATRIX_ZZ(out) = MATRIX_XZ(mat_a) * MATRIX_ZX(mat_b) + MATRIX_YZ(mat_a) * MATRIX_ZY(mat_b) +
- MATRIX_ZZ(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_WZ(mat_a) * MATRIX_ZW(mat_b);
- MATRIX_WZ(out) = MATRIX_XZ(mat_a) * MATRIX_WX(mat_b) + MATRIX_YZ(mat_a) * MATRIX_WY(mat_b) +
- MATRIX_ZZ(mat_a) * MATRIX_WZ(mat_b) + MATRIX_WZ(mat_a) * MATRIX_WW(mat_b);
-
- MATRIX_XW(out) = MATRIX_XW(mat_a) * MATRIX_XX(mat_b) + MATRIX_YW(mat_a) * MATRIX_XY(mat_b) +
- MATRIX_ZW(mat_a) * MATRIX_XZ(mat_b) + MATRIX_WW(mat_a) * MATRIX_XW(mat_b);
- MATRIX_YW(out) = MATRIX_XW(mat_a) * MATRIX_YX(mat_b) + MATRIX_YW(mat_a) * MATRIX_YY(mat_b) +
- MATRIX_ZW(mat_a) * MATRIX_YZ(mat_b) + MATRIX_WW(mat_a) * MATRIX_YW(mat_b);
- MATRIX_ZW(out) = MATRIX_XW(mat_a) * MATRIX_ZX(mat_b) + MATRIX_YW(mat_a) * MATRIX_ZY(mat_b) +
- MATRIX_ZW(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_WW(mat_a) * MATRIX_ZW(mat_b);
- MATRIX_WW(out) = MATRIX_XW(mat_a) * MATRIX_WX(mat_b) + MATRIX_YW(mat_a) * MATRIX_WY(mat_b) +
- MATRIX_ZW(mat_a) * MATRIX_WZ(mat_b) + MATRIX_WW(mat_a) * MATRIX_WW(mat_b);
+ eina_matrix4_compose(mat_a, mat_b, out);
}
-EAPI void
+EINA_API void
eina_matrix4_ortho_set(Eina_Matrix4 *m,
double left, double right, double bottom, double top,
double dnear, double dfar)
@@ -1100,19 +1029,189 @@ eina_matrix4_ortho_set(Eina_Matrix4 *m,
MATRIX_WW(m) = 1.0f;
}
-EAPI void
+EINA_API void
+eina_matrix4_compose(const Eina_Matrix4 *mat_a,
+ const Eina_Matrix4 *mat_b,
+ Eina_Matrix4 *out)
+{
+ double xx, xy, xz, xw,
+ yx, yy, yz, yw,
+ zx, zy, zz, zw,
+ wx, wy, wz, ww;
+
+ xx = MATRIX_XX(mat_a) * MATRIX_XX(mat_b) + MATRIX_XY(mat_a) * MATRIX_YX(mat_b) +
+ MATRIX_XZ(mat_a) * MATRIX_ZX(mat_b) + MATRIX_XW(mat_a) * MATRIX_WX(mat_b);
+ xy = MATRIX_XX(mat_a) * MATRIX_XY(mat_b) + MATRIX_XY(mat_a) * MATRIX_YY(mat_b) +
+ MATRIX_XZ(mat_a) * MATRIX_ZY(mat_b) + MATRIX_XW(mat_a) * MATRIX_WY(mat_b);
+ xz = MATRIX_XX(mat_a) * MATRIX_XZ(mat_b) + MATRIX_XY(mat_a) * MATRIX_YZ(mat_b) +
+ MATRIX_XZ(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_XW(mat_a) * MATRIX_WZ(mat_b);
+ xw = MATRIX_XX(mat_a) * MATRIX_XW(mat_b) + MATRIX_XY(mat_a) * MATRIX_YW(mat_b) +
+ MATRIX_XZ(mat_a) * MATRIX_ZW(mat_b) + MATRIX_XW(mat_a) * MATRIX_WW(mat_b);
+
+ yx = MATRIX_YX(mat_a) * MATRIX_XX(mat_b) + MATRIX_YY(mat_a) * MATRIX_YX(mat_b) +
+ MATRIX_YZ(mat_a) * MATRIX_ZX(mat_b) + MATRIX_YW(mat_a) * MATRIX_WX(mat_b);
+ yy = MATRIX_YX(mat_a) * MATRIX_XY(mat_b) + MATRIX_YY(mat_a) * MATRIX_YY(mat_b) +
+ MATRIX_YZ(mat_a) * MATRIX_ZY(mat_b) + MATRIX_YW(mat_a) * MATRIX_WY(mat_b);
+ yz = MATRIX_YX(mat_a) * MATRIX_XZ(mat_b) + MATRIX_YY(mat_a) * MATRIX_YZ(mat_b) +
+ MATRIX_YZ(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_YW(mat_a) * MATRIX_WZ(mat_b);
+ yw = MATRIX_YX(mat_a) * MATRIX_XW(mat_b) + MATRIX_YY(mat_a) * MATRIX_YW(mat_b) +
+ MATRIX_YZ(mat_a) * MATRIX_ZW(mat_b) + MATRIX_YW(mat_a) * MATRIX_WW(mat_b);
+
+ zx = MATRIX_ZX(mat_a) * MATRIX_XX(mat_b) + MATRIX_ZY(mat_a) * MATRIX_YX(mat_b) +
+ MATRIX_ZZ(mat_a) * MATRIX_ZX(mat_b) + MATRIX_ZW(mat_a) * MATRIX_WX(mat_b);
+ zy = MATRIX_ZX(mat_a) * MATRIX_XY(mat_b) + MATRIX_ZY(mat_a) * MATRIX_YY(mat_b) +
+ MATRIX_ZZ(mat_a) * MATRIX_ZY(mat_b) + MATRIX_ZW(mat_a) * MATRIX_WY(mat_b);
+ zz = MATRIX_ZX(mat_a) * MATRIX_XZ(mat_b) + MATRIX_ZY(mat_a) * MATRIX_YZ(mat_b) +
+ MATRIX_ZZ(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_ZW(mat_a) * MATRIX_WZ(mat_b);
+ zw = MATRIX_ZX(mat_a) * MATRIX_XW(mat_b) + MATRIX_ZY(mat_a) * MATRIX_YW(mat_b) +
+ MATRIX_ZZ(mat_a) * MATRIX_ZW(mat_b) + MATRIX_ZW(mat_a) * MATRIX_WW(mat_b);
+
+ wx = MATRIX_WX(mat_a) * MATRIX_XX(mat_b) + MATRIX_WY(mat_a) * MATRIX_YX(mat_b) +
+ MATRIX_WZ(mat_a) * MATRIX_ZX(mat_b) + MATRIX_WW(mat_a) * MATRIX_WX(mat_b);
+ wy = MATRIX_WX(mat_a) * MATRIX_XY(mat_b) + MATRIX_WY(mat_a) * MATRIX_YY(mat_b) +
+ MATRIX_WZ(mat_a) * MATRIX_ZY(mat_b) + MATRIX_WW(mat_a) * MATRIX_WY(mat_b);
+ wz = MATRIX_WX(mat_a) * MATRIX_XZ(mat_b) + MATRIX_WY(mat_a) * MATRIX_YZ(mat_b) +
+ MATRIX_WZ(mat_a) * MATRIX_ZZ(mat_b) + MATRIX_WW(mat_a) * MATRIX_WZ(mat_b);
+ ww = MATRIX_WX(mat_a) * MATRIX_XW(mat_b) + MATRIX_WY(mat_a) * MATRIX_YW(mat_b) +
+ MATRIX_WZ(mat_a) * MATRIX_ZW(mat_b) + MATRIX_WW(mat_a) * MATRIX_WW(mat_b);
+
+ MATRIX_XX(out) = xx;
+ MATRIX_XY(out) = xy;
+ MATRIX_XZ(out) = xz;
+ MATRIX_XW(out) = xw;
+
+ MATRIX_YX(out) = yx;
+ MATRIX_YY(out) = yy;
+ MATRIX_YZ(out) = yz;
+ MATRIX_YW(out) = yw;
+
+ MATRIX_ZX(out) = zx;
+ MATRIX_ZY(out) = zy;
+ MATRIX_ZZ(out) = zz;
+ MATRIX_ZW(out) = zw;
+
+ MATRIX_WX(out) = wx;
+ MATRIX_WY(out) = wy;
+ MATRIX_WZ(out) = wz;
+ MATRIX_WW(out) = ww;
+}
+
+EINA_API void
+eina_matrix4_translate(Eina_Matrix4 *t, double tx, double ty, double tz)
+{
+ Eina_Matrix4 tmp;
+ MATRIX_XX(&tmp) = 1;
+ MATRIX_XY(&tmp) = 0;
+ MATRIX_XZ(&tmp) = 0;
+ MATRIX_XW(&tmp) = tx;
+
+ MATRIX_YX(&tmp) = 0;
+ MATRIX_YY(&tmp) = 1;
+ MATRIX_YZ(&tmp) = 0;
+ MATRIX_YW(&tmp) = ty;
+
+ MATRIX_ZX(&tmp) = 0;
+ MATRIX_ZY(&tmp) = 0;
+ MATRIX_ZZ(&tmp) = 1;
+ MATRIX_ZW(&tmp) = tz;
+
+ MATRIX_WX(&tmp) = 0;
+ MATRIX_WY(&tmp) = 0;
+ MATRIX_WZ(&tmp) = 0;
+ MATRIX_WW(&tmp) = 1;
+
+ eina_matrix4_compose(&tmp, t, t);
+}
+
+EINA_API void
+eina_matrix4_scale(Eina_Matrix4 *t, double sx, double sy, double sz)
+{
+ Eina_Matrix4 tmp;
+ MATRIX_XX(&tmp) = sx;
+ MATRIX_XY(&tmp) = 0;
+ MATRIX_XZ(&tmp) = 0;
+ MATRIX_XW(&tmp) = 0;
+
+ MATRIX_YX(&tmp) = 0;
+ MATRIX_YY(&tmp) = sy;
+ MATRIX_YZ(&tmp) = 0;
+ MATRIX_YW(&tmp) = 0;
+
+ MATRIX_ZX(&tmp) = 0;
+ MATRIX_ZY(&tmp) = 0;
+ MATRIX_ZZ(&tmp) = sz;
+ MATRIX_ZW(&tmp) = 0;
+
+ MATRIX_WX(&tmp) = 0;
+ MATRIX_WY(&tmp) = 0;
+ MATRIX_WZ(&tmp) = 0;
+ MATRIX_WW(&tmp) = 1;
+
+ eina_matrix4_compose(&tmp, t, t);
+}
+
+EINA_API void
+eina_matrix4_rotate(Eina_Matrix4 *t, double rad, Eina_Matrix_Axis axis)
+{
+ double c, s;
+
+ /* Note: Local functions do not guarantee accuracy.
+ * Errors occur in the calculation of very small or very large numbers.
+ * Local cos and sin functions differ from the math header cosf and sinf functions
+ * by result values. The 4th decimal place is different.
+ * But local functions are certainly faster than functions in math library.
+ * Later we would want someone to look at this and improve accuracy.
+ */
+#if 1
+ c = cos(rad);
+ s = sin(rad);
+#else
+ /* normalize the angle between -pi,pi */
+ rad = fmod(rad + M_PI, 2 * M_PI) - M_PI;
+ c = _cos(rad);
+ s = _sin(rad);
+#endif
+
+ Eina_Matrix4 tmp;
+ eina_matrix4_identity(&tmp);
+
+ switch (axis)
+ {
+ case EINA_MATRIX_AXIS_X:
+ MATRIX_YY(&tmp) = c;
+ MATRIX_YZ(&tmp) = -s;
+ MATRIX_ZY(&tmp) = s;
+ MATRIX_ZZ(&tmp) = c;
+ break;
+ case EINA_MATRIX_AXIS_Y:
+ MATRIX_XX(&tmp) = c;
+ MATRIX_XZ(&tmp) = s;
+ MATRIX_ZX(&tmp) = -s;
+ MATRIX_ZZ(&tmp) = c;
+ break;
+ case EINA_MATRIX_AXIS_Z:
+ MATRIX_XX(&tmp) = c;
+ MATRIX_XY(&tmp) = -s;
+ MATRIX_YX(&tmp) = s;
+ MATRIX_YY(&tmp) = c;
+ break;
+ }
+ eina_matrix4_compose(&tmp, t, t);
+}
+
+EINA_API void
eina_matrix3_array_set(Eina_Matrix3 *m, const double *v)
{
memcpy(&MATRIX_XX(m), v, sizeof(double) * 9);
}
-EAPI void
+EINA_API void
eina_matrix3_copy(Eina_Matrix3 *dst, const Eina_Matrix3 *src)
{
memcpy(dst, src, sizeof(Eina_Matrix3));
}
-EAPI void
+EINA_API void
eina_matrix3_multiply(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const Eina_Matrix3 *mat_b)
{
if (eina_matrix3_type_get(mat_a) == EINA_MATRIX_TYPE_IDENTITY)
@@ -1130,7 +1229,7 @@ eina_matrix3_multiply(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const Eina_M
eina_matrix3_compose(mat_a, mat_b, out);
}
-EAPI void
+EINA_API void
eina_matrix3_multiply_copy(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const Eina_Matrix3 *mat_b)
{
if (out != mat_a && out != mat_b)
@@ -1146,7 +1245,7 @@ eina_matrix3_multiply_copy(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const E
}
}
-EAPI void
+EINA_API void
eina_matrix3_position_transform_set(Eina_Matrix3 *out, const double p_x,
const double p_y)
{
@@ -1155,7 +1254,7 @@ eina_matrix3_position_transform_set(Eina_Matrix3 *out, const double p_x,
MATRIX_YZ(out) = p_y;
}
-EAPI void
+EINA_API void
eina_matrix3_scale_transform_set(Eina_Matrix3 *out, double s_x, double s_y)
{
eina_matrix3_identity(out);
@@ -1163,7 +1262,7 @@ eina_matrix3_scale_transform_set(Eina_Matrix3 *out, double s_x, double s_y)
MATRIX_YY(out) = s_y;
}
-EAPI void
+EINA_API void
eina_normal3_matrix_get(Eina_Matrix3 *out, const Eina_Matrix4 *m)
{
/* Normal matrix is a transposed matrix of inversed modelview.
@@ -1201,7 +1300,7 @@ eina_normal3_matrix_get(Eina_Matrix3 *out, const Eina_Matrix4 *m)
MATRIX_ZZ(out) = (a * e - d * b) * det;
}
-EAPI void
+EINA_API void
eina_matrix2_values_set(Eina_Matrix2 *m,
double xx, double xy,
double yx, double yy)
@@ -1212,7 +1311,7 @@ eina_matrix2_values_set(Eina_Matrix2 *m,
MATRIX_YY(m) = yy;
}
-EAPI void
+EINA_API void
eina_matrix2_values_get(const Eina_Matrix2 *m,
double *xx, double *xy,
double *yx, double *yy)
@@ -1223,7 +1322,7 @@ eina_matrix2_values_get(const Eina_Matrix2 *m,
if (yy) *yy = MATRIX_YY(m);
}
-EAPI void
+EINA_API void
eina_matrix2_inverse(Eina_Matrix2 *out, const Eina_Matrix2 *mat)
{
double det;
@@ -1247,7 +1346,7 @@ eina_matrix2_inverse(Eina_Matrix2 *out, const Eina_Matrix2 *mat)
MATRIX_YY(out) = MATRIX_XX(mat) * det;
}
-EAPI void
+EINA_API void
eina_matrix2_identity(Eina_Matrix2 *m)
{
MATRIX_XX(m) = 1.0;
@@ -1257,19 +1356,19 @@ eina_matrix2_identity(Eina_Matrix2 *m)
MATRIX_YY(m) = 1.0;
}
-EAPI void
+EINA_API void
eina_matrix2_array_set(Eina_Matrix2 *m, const double *v)
{
memcpy(&MATRIX_XX(m), v, sizeof(double) * 4);
}
-EAPI void
+EINA_API void
eina_matrix2_copy(Eina_Matrix2 *dst, const Eina_Matrix2 *src)
{
memcpy(dst, src, sizeof(Eina_Matrix2));
}
-EAPI void
+EINA_API void
eina_matrix2_multiply(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a, const Eina_Matrix2 *mat_b)
{
if (eina_matrix2_type_get(mat_a) == EINA_MATRIX_TYPE_IDENTITY)
@@ -1291,7 +1390,7 @@ eina_matrix2_multiply(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a, const Eina_M
MATRIX_YY(out) = MATRIX_XY(mat_a) * MATRIX_YX(mat_b) + MATRIX_YY(mat_a) * MATRIX_YY(mat_b);
}
-EAPI void
+EINA_API void
eina_matrix2_multiply_copy(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a, const Eina_Matrix2 *mat_b)
{
if (out != mat_a && out != mat_b)
diff --git a/src/lib/eina/eina_matrix.h b/src/lib/eina/eina_matrix.h
index ed12f6f0db..a4dfb3c609 100644
--- a/src/lib/eina/eina_matrix.h
+++ b/src/lib/eina/eina_matrix.h
@@ -22,9 +22,6 @@
/**
* @file
- * @ender_group{Eina_Matrix_Type}
- * @ender_group{Eina_Matrix3_F16p16}
- * @ender_group{Eina_Matrix3}
*/
/**
@@ -57,6 +54,17 @@ typedef enum _Eina_Matrix_Type
} Eina_Matrix_Type;
/**
+ * @typedef Eina_Matrix_Axis
+ * Matrix Axes
+ */
+typedef enum _Eina_Matrix_Axis
+ {
+ EINA_MATRIX_AXIS_X, /**< X-Axis */
+ EINA_MATRIX_AXIS_Y, /**< Y-Axis */
+ EINA_MATRIX_AXIS_Z, /**< Z-Axis */
+ } Eina_Matrix_Axis;
+
+/**
* @defgroup Eina_Matrix3_Group 3x3 floating point matrices
*
* @brief Definition and operations for 3x3 matrices.
@@ -180,7 +188,7 @@ struct _Eina_Matrix3_F16p16
*
* @since 1.14
*/
-EAPI void eina_matrix3_f16p16_identity(Eina_Matrix3_F16p16 *m);
+EINA_API void eina_matrix3_f16p16_identity(Eina_Matrix3_F16p16 *m);
/**
* @brief Sets dst as the matrix multiplication (composition) of two
@@ -197,7 +205,7 @@ EAPI void eina_matrix3_f16p16_identity(Eina_Matrix3_F16p16 *m);
*
* @since 1.14
*/
-EAPI void eina_matrix3_f16p16_compose(const Eina_Matrix3_F16p16 *m1,
+EINA_API void eina_matrix3_f16p16_compose(const Eina_Matrix3_F16p16 *m1,
const Eina_Matrix3_F16p16 *m2,
Eina_Matrix3_F16p16 *dst);
@@ -212,7 +220,7 @@ EAPI void eina_matrix3_f16p16_compose(const Eina_Matrix3_F16p16 *m1,
*
* @since 1.14
*/
-EAPI Eina_Matrix_Type eina_matrix3_f16p16_type_get(const Eina_Matrix3_F16p16 *m);
+EINA_API Eina_Matrix_Type eina_matrix3_f16p16_type_get(const Eina_Matrix3_F16p16 *m);
/**
* @}
@@ -244,7 +252,7 @@ EAPI Eina_Matrix_Type eina_matrix3_f16p16_type_get(const Eina_Matrix3_F16p16 *m)
*
* @since 1.14
*/
-EAPI Eina_Matrix_Type eina_matrix3_type_get(const Eina_Matrix3 *m);
+EINA_API Eina_Matrix_Type eina_matrix3_type_get(const Eina_Matrix3 *m);
/**
* @brief Sets the values of the coefficients of the given floating
@@ -268,7 +276,7 @@ EAPI Eina_Matrix_Type eina_matrix3_type_get(const Eina_Matrix3 *m);
*
* @since 1.14
*/
-EAPI void eina_matrix3_values_set(Eina_Matrix3 *m,
+EINA_API void eina_matrix3_values_set(Eina_Matrix3 *m,
double xx, double xy, double xz,
double yx, double yy, double yz,
double zx, double zy, double zz);
@@ -295,7 +303,7 @@ EAPI void eina_matrix3_values_set(Eina_Matrix3 *m,
*
* @since 1.14
*/
-EAPI void eina_matrix3_values_get(const Eina_Matrix3 *m,
+EINA_API void eina_matrix3_values_get(const Eina_Matrix3 *m,
double *xx, double *xy, double *xz,
double *yx, double *yy, double *yz,
double *zx, double *zy, double *zz);
@@ -322,7 +330,7 @@ EAPI void eina_matrix3_values_get(const Eina_Matrix3 *m,
*
* @since 1.14
*/
-EAPI void eina_matrix3_fixed_values_get(const Eina_Matrix3 *m,
+EINA_API void eina_matrix3_fixed_values_get(const Eina_Matrix3 *m,
Eina_F16p16 *xx, Eina_F16p16 *xy, Eina_F16p16 *xz,
Eina_F16p16 *yx, Eina_F16p16 *yy, Eina_F16p16 *yz,
Eina_F16p16 *zx, Eina_F16p16 *zy, Eina_F16p16 *zz);
@@ -340,7 +348,7 @@ EAPI void eina_matrix3_fixed_values_get(const Eina_Matrix3 *m,
*
* @since 1.14
*/
-EAPI void eina_matrix3_matrix3_f16p16_to(const Eina_Matrix3 *m,
+EINA_API void eina_matrix3_matrix3_f16p16_to(const Eina_Matrix3 *m,
Eina_Matrix3_F16p16 *fm);
/**
@@ -355,7 +363,7 @@ EAPI void eina_matrix3_matrix3_f16p16_to(const Eina_Matrix3 *m,
*
* @since 1.14
*/
-EAPI Eina_Bool eina_matrix3_equal(const Eina_Matrix3 *m1, const Eina_Matrix3 *m2);
+EINA_API Eina_Bool eina_matrix3_equal(const Eina_Matrix3 *m1, const Eina_Matrix3 *m2);
/**
* @brief Sets dst as the matrix multiplication (composition) of two matrices.
@@ -371,7 +379,7 @@ EAPI Eina_Bool eina_matrix3_equal(const Eina_Matrix3 *m1, const Eina_Matrix3 *m2
*
* @since 1.14
*/
-EAPI void eina_matrix3_compose(const Eina_Matrix3 *m1,
+EINA_API void eina_matrix3_compose(const Eina_Matrix3 *m1,
const Eina_Matrix3 *m2,
Eina_Matrix3 *dst);
@@ -384,7 +392,7 @@ EAPI void eina_matrix3_compose(const Eina_Matrix3 *m1,
*
* @since 1.14
*/
-EAPI void eina_matrix3_translate(Eina_Matrix3 *t, double tx, double ty);
+EINA_API void eina_matrix3_translate(Eina_Matrix3 *m, double tx, double ty);
/**
* @brief Sets the matrix values for a scaling operation.
@@ -395,16 +403,16 @@ EAPI void eina_matrix3_translate(Eina_Matrix3 *t, double tx, double ty);
*
* @since 1.14
*/
-EAPI void eina_matrix3_scale(Eina_Matrix3 *t, double sx, double sy);
+EINA_API void eina_matrix3_scale(Eina_Matrix3 *m, double sx, double sy);
/**
* @brief Sets the matrix values for a rotation operation.
- * @param[out] t The matrix.
+ * @param[out] m The matrix.
* @param[in] rad The number of radians to rotate.
*
* @since 1.14
*/
-EAPI void eina_matrix3_rotate(Eina_Matrix3 *t, double rad);
+EINA_API void eina_matrix3_rotate(Eina_Matrix3 *m, double rad);
/**
* @brief Sets the given floating point matrix to the identity matrix.
@@ -416,7 +424,7 @@ EAPI void eina_matrix3_rotate(Eina_Matrix3 *t, double rad);
*
* @since 1.14
*/
-EAPI void eina_matrix3_identity(Eina_Matrix3 *t);
+EINA_API void eina_matrix3_identity(Eina_Matrix3 *m);
/**
* @brief Calculates the determinant of the given matrix.
@@ -429,7 +437,7 @@ EAPI void eina_matrix3_identity(Eina_Matrix3 *t);
*
* @since 1.14
*/
-EAPI double eina_matrix3_determinant(const Eina_Matrix3 *m);
+EINA_API double eina_matrix3_determinant(const Eina_Matrix3 *m);
/**
* @brief Divides the given matrix by a scalar number.
@@ -442,7 +450,7 @@ EAPI double eina_matrix3_determinant(const Eina_Matrix3 *m);
*
* @since 1.14
*/
-EAPI void eina_matrix3_divide(Eina_Matrix3 *m, double scalar);
+EINA_API void eina_matrix3_divide(Eina_Matrix3 *m, double scalar);
/**
* @brief Computes the inverse of the given matrix.
@@ -456,7 +464,7 @@ EAPI void eina_matrix3_divide(Eina_Matrix3 *m, double scalar);
*
* @since 1.14
*/
-EAPI void eina_matrix3_inverse(const Eina_Matrix3 *m, Eina_Matrix3 *m2);
+EINA_API void eina_matrix3_inverse(const Eina_Matrix3 *m, Eina_Matrix3 *m2);
/**
* @brief Computes the transpose of the given matrix.
@@ -470,7 +478,7 @@ EAPI void eina_matrix3_inverse(const Eina_Matrix3 *m, Eina_Matrix3 *m2);
*
* @since 1.14
*/
-EAPI void eina_matrix3_transpose(const Eina_Matrix3 *m, Eina_Matrix3 *a);
+EINA_API void eina_matrix3_transpose(const Eina_Matrix3 *m, Eina_Matrix3 *a);
/**
* @brief Computes the cofactor of the given matrix.
@@ -486,7 +494,7 @@ EAPI void eina_matrix3_transpose(const Eina_Matrix3 *m, Eina_Matrix3 *a);
*
* @since 1.14
*/
-EAPI void eina_matrix3_cofactor(const Eina_Matrix3 *m, Eina_Matrix3 *a);
+EINA_API void eina_matrix3_cofactor(const Eina_Matrix3 *m, Eina_Matrix3 *a);
/**
* @brief Computes the adjoint of the given matrix.
@@ -500,7 +508,7 @@ EAPI void eina_matrix3_cofactor(const Eina_Matrix3 *m, Eina_Matrix3 *a);
*
* @since 1.14
*/
-EAPI void eina_matrix3_adjoint(const Eina_Matrix3 *m, Eina_Matrix3 *a);
+EINA_API void eina_matrix3_adjoint(const Eina_Matrix3 *m, Eina_Matrix3 *a);
/**
* @brief Computes the transform of a 2D point using the given matrix.
@@ -518,7 +526,7 @@ EAPI void eina_matrix3_adjoint(const Eina_Matrix3 *m, Eina_Matrix3 *a);
*
* @since 1.14
*/
-EAPI void eina_matrix3_point_transform(const Eina_Matrix3 *m,
+EINA_API void eina_matrix3_point_transform(const Eina_Matrix3 *m,
double x, double y,
double *xr, double *yr);
/**
@@ -534,7 +542,7 @@ EAPI void eina_matrix3_point_transform(const Eina_Matrix3 *m,
*
* @since 1.14
*/
-EAPI void eina_matrix3_rectangle_transform(const Eina_Matrix3 *m,
+EINA_API void eina_matrix3_rectangle_transform(const Eina_Matrix3 *m,
const Eina_Rectangle *r,
const Eina_Quad *q);
@@ -549,7 +557,7 @@ EAPI void eina_matrix3_rectangle_transform(const Eina_Matrix3 *m,
* Calculates a matrix @p m that can be used to transform from an arbitrary
* source quadrangle @p src to another arbitrary quadrangle @p dst.
*/
-EAPI Eina_Bool eina_matrix3_quad_quad_map(Eina_Matrix3 *m,
+EINA_API Eina_Bool eina_matrix3_quad_quad_map(Eina_Matrix3 *m,
const Eina_Quad *src,
const Eina_Quad *dst);
@@ -568,7 +576,7 @@ EAPI Eina_Bool eina_matrix3_quad_quad_map(Eina_Matrix3 *m,
*
* @since 1.14
*/
-EAPI Eina_Bool eina_matrix3_square_quad_map(Eina_Matrix3 *m,
+EINA_API Eina_Bool eina_matrix3_square_quad_map(Eina_Matrix3 *m,
const Eina_Quad *q);
/**
@@ -585,7 +593,7 @@ EAPI Eina_Bool eina_matrix3_square_quad_map(Eina_Matrix3 *m,
*
* @since 1.14
*/
-EAPI Eina_Bool eina_matrix3_quad_square_map(Eina_Matrix3 *m,
+EINA_API Eina_Bool eina_matrix3_quad_square_map(Eina_Matrix3 *m,
const Eina_Quad *q);
/**
@@ -600,7 +608,7 @@ EAPI Eina_Bool eina_matrix3_quad_square_map(Eina_Matrix3 *m,
*
* @since 1.17
*/
-EAPI void eina_matrix3_array_set(Eina_Matrix3 *m, const double *v);
+EINA_API void eina_matrix3_array_set(Eina_Matrix3 *m, const double *v);
/**
* @brief Copies a matrix.
@@ -610,7 +618,7 @@ EAPI void eina_matrix3_array_set(Eina_Matrix3 *m, const double *v);
*
* @since 1.16
*/
-EAPI void eina_matrix3_copy(Eina_Matrix3 *dst, const Eina_Matrix3 *src);
+EINA_API void eina_matrix3_copy(Eina_Matrix3 *dst, const Eina_Matrix3 *src);
/**
* @brief Multiplies two matrices.
@@ -625,7 +633,7 @@ EAPI void eina_matrix3_copy(Eina_Matrix3 *dst, const Eina_Matrix3 *src);
*
* @since 1.17
*/
-EAPI void eina_matrix3_multiply(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a,
+EINA_API void eina_matrix3_multiply(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a,
const Eina_Matrix3 *mat_b);
/**
@@ -641,7 +649,7 @@ EAPI void eina_matrix3_multiply(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a,
*
* @since 1.17
*/
-EAPI void eina_matrix3_multiply_copy(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a,
+EINA_API void eina_matrix3_multiply_copy(Eina_Matrix3 *out, const Eina_Matrix3 *mat_a,
const Eina_Matrix3 *mat_b);
/**
@@ -656,7 +664,7 @@ EAPI void eina_matrix3_multiply_copy(Eina_Matrix3 *out, const Eina_Matrix3 *mat_
*
* @since 1.17
*/
-EAPI void eina_matrix3_scale_transform_set(Eina_Matrix3 *out, double s_x, double s_y);
+EINA_API void eina_matrix3_scale_transform_set(Eina_Matrix3 *out, double s_x, double s_y);
/**
* @brief Sets the positional parameters (XZ, YZ) of a matrix.
@@ -670,7 +678,7 @@ EAPI void eina_matrix3_scale_transform_set(Eina_Matrix3 *out, double s_x, double
* @since 1.17
*/
-EAPI void eina_matrix3_position_transform_set(Eina_Matrix3 *out, const double p_x,
+EINA_API void eina_matrix3_position_transform_set(Eina_Matrix3 *out, const double p_x,
const double p_y);
/**
@@ -681,7 +689,7 @@ EAPI void eina_matrix3_position_transform_set(Eina_Matrix3 *out, const double p_
*
* @since 1.17
*/
-EAPI void eina_normal3_matrix_get(Eina_Matrix3 *out, const Eina_Matrix4 *m);
+EINA_API void eina_normal3_matrix_get(Eina_Matrix3 *out, const Eina_Matrix4 *m);
/**
* @brief Converts an Eina_Matrix3 into an Eina_Matrix4.
@@ -691,7 +699,7 @@ EAPI void eina_normal3_matrix_get(Eina_Matrix3 *out, const Eina_Matrix4 *m);
*
* @since 1.15
*/
-EAPI void eina_matrix3_matrix4_to(Eina_Matrix4 *m4, const Eina_Matrix3 *m3);
+EINA_API void eina_matrix3_matrix4_to(Eina_Matrix4 *m4, const Eina_Matrix3 *m3);
/**
* @}
@@ -714,7 +722,7 @@ EAPI void eina_matrix3_matrix4_to(Eina_Matrix4 *m4, const Eina_Matrix3 *m3);
*
* @since 1.15
*/
-EAPI Eina_Matrix_Type eina_matrix4_type_get(const Eina_Matrix4 *m);
+EINA_API Eina_Matrix_Type eina_matrix4_type_get(const Eina_Matrix4 *m);
/**
* @brief Sets the values of the coefficients of the given floating
@@ -745,7 +753,7 @@ EAPI Eina_Matrix_Type eina_matrix4_type_get(const Eina_Matrix4 *m);
*
* @since 1.15
*/
-EAPI void eina_matrix4_values_set(Eina_Matrix4 *m,
+EINA_API void eina_matrix4_values_set(Eina_Matrix4 *m,
double xx, double xy, double xz, double xw,
double yx, double yy, double yz, double yw,
double zx, double zy, double zz, double zw,
@@ -780,7 +788,7 @@ EAPI void eina_matrix4_values_set(Eina_Matrix4 *m,
*
* @since 1.15
*/
-EAPI void eina_matrix4_values_get(const Eina_Matrix4 *m,
+EINA_API void eina_matrix4_values_get(const Eina_Matrix4 *m,
double *xx, double *xy, double *xz, double *xw,
double *yx, double *yy, double *yz, double *yw,
double *zx, double *zy, double *zz, double *zw,
@@ -797,7 +805,7 @@ EAPI void eina_matrix4_values_get(const Eina_Matrix4 *m,
*
* @since 1.16
*/
-EAPI double eina_matrix4_determinant(const Eina_Matrix4 *m);
+EINA_API double eina_matrix4_determinant(const Eina_Matrix4 *m);
/**
* @brief Normalizes the given matrix.
@@ -812,7 +820,7 @@ EAPI double eina_matrix4_determinant(const Eina_Matrix4 *m);
*
* @since 1.16
*/
-EAPI Eina_Bool eina_matrix4_normalized(Eina_Matrix4 *out,
+EINA_API Eina_Bool eina_matrix4_normalized(Eina_Matrix4 *out,
const Eina_Matrix4 *in);
/**
@@ -828,7 +836,7 @@ EAPI Eina_Bool eina_matrix4_normalized(Eina_Matrix4 *out,
*
* @since 1.16
*/
-EAPI Eina_Bool eina_matrix4_inverse(Eina_Matrix4 *out, const Eina_Matrix4 *in);
+EINA_API Eina_Bool eina_matrix4_inverse(Eina_Matrix4 *out, const Eina_Matrix4 *in);
/**
* @brief Computes the transpose of the given matrix.
@@ -842,7 +850,7 @@ EAPI Eina_Bool eina_matrix4_inverse(Eina_Matrix4 *out, const Eina_Matrix4 *in);
*
* @since 1.16
*/
-EAPI void eina_matrix4_transpose(Eina_Matrix4 *out, const Eina_Matrix4 *in);
+EINA_API void eina_matrix4_transpose(Eina_Matrix4 *out, const Eina_Matrix4 *in);
/**
* @brief Converts an Eina_Matrix4 into an Eina_Matrix3.
@@ -852,7 +860,7 @@ EAPI void eina_matrix4_transpose(Eina_Matrix4 *out, const Eina_Matrix4 *in);
*
* @since 1.15
*/
-EAPI void eina_matrix4_matrix3_to(Eina_Matrix3 *m3, const Eina_Matrix4 *m4);
+EINA_API void eina_matrix4_matrix3_to(Eina_Matrix3 *m3, const Eina_Matrix4 *m4);
/**
* @brief Sets the given matrix to identity.
@@ -861,7 +869,7 @@ EAPI void eina_matrix4_matrix3_to(Eina_Matrix3 *m3, const Eina_Matrix4 *m4);
*
* @since 1.16
*/
-EAPI void eina_matrix4_identity(Eina_Matrix4 *out);
+EINA_API void eina_matrix4_identity(Eina_Matrix4 *out);
/**
* @brief Multiplies two matrix.
@@ -876,7 +884,7 @@ EAPI void eina_matrix4_identity(Eina_Matrix4 *out);
*
* @since 1.17
*/
-EAPI void eina_matrix4_multiply_copy(Eina_Matrix4 *out,
+EINA_API void eina_matrix4_multiply_copy(Eina_Matrix4 *out,
const Eina_Matrix4 *mat_a, const Eina_Matrix4 *mat_b);
/**
@@ -891,7 +899,7 @@ EAPI void eina_matrix4_multiply_copy(Eina_Matrix4 *out,
*
* @since 1.17
*/
-EAPI void eina_matrix4_array_set(Eina_Matrix4 *m, const double *v);
+EINA_API void eina_matrix4_array_set(Eina_Matrix4 *m, const double *v);
/**
* @brief Copies matrix.
@@ -901,7 +909,7 @@ EAPI void eina_matrix4_array_set(Eina_Matrix4 *m, const double *v);
*
* @since 1.17
*/
-EAPI void eina_matrix4_copy(Eina_Matrix4 *dst, const Eina_Matrix4 *src);
+EINA_API void eina_matrix4_copy(Eina_Matrix4 *dst, const Eina_Matrix4 *src);
/**
* @brief Multiplies two matrices with check.
@@ -912,7 +920,7 @@ EAPI void eina_matrix4_copy(Eina_Matrix4 *dst, const Eina_Matrix4 *src);
*
* @since 1.17
*/
-EAPI void eina_matrix4_multiply(Eina_Matrix4 *out, const Eina_Matrix4 *mat_a,
+EINA_API void eina_matrix4_multiply(Eina_Matrix4 *out, const Eina_Matrix4 *mat_a,
const Eina_Matrix4 *mat_b);
/**
@@ -928,10 +936,63 @@ EAPI void eina_matrix4_multiply(Eina_Matrix4 *out, const Eina_Matrix4 *mat_a,
*
* @since 1.17
*/
-EAPI void eina_matrix4_ortho_set(Eina_Matrix4 *m,
+EINA_API void eina_matrix4_ortho_set(Eina_Matrix4 *m,
double left, double right, double bottom, double top,
double dnear, double dfar);
+
+/**
+ * @brief Sets out as the matrix multiplication (composition) of two matrices.
+ *
+ * @param[in] mat_a The first matrix. Must be non-NULL.
+ * @param[in] mat_b The second matrix. Must be non-NULL.
+ * @param[out] out The results matrix.
+ *
+ * In matrix multiplication, AB, the resultant matrix is created from
+ * the rows of A multiplied against the columns of B and summed. This
+ * is not commutative; i.e. AB != BA, so the ordering of arguments
+ * @p m1 and @p m2 matters.
+ *
+ * @since 1.24
+ */
+EINA_API void eina_matrix4_compose(const Eina_Matrix4 *mat_a,
+ const Eina_Matrix4 *mat_b,
+ Eina_Matrix4 *out);
+
+/**
+ * @brief Sets the matrix values for a translation operation.
+ *
+ * @param[out] t Where to store the resulting matrix.
+ * @param[in] tx The X coordinate translation.
+ * @param[in] ty The Y coordinate translation.
+ * @param[in] tz The Z coordinate translation.
+ *
+ * @since 1.24
+ */
+EINA_API void eina_matrix4_translate(Eina_Matrix4 *t, double tx, double ty, double tz);
+
+/**
+ * @brief Sets the matrix values for a scaling operation.
+ *
+ * @param[out] t Where to store the resulting matrix.
+ * @param[in] sx The X coordinate scaling factor.
+ * @param[in] sy The Y coordinate scaling factor.
+ * @param[in] sz The Z coordinate scaling factor.
+ *
+ * @since 1.24
+ */
+EINA_API void eina_matrix4_scale(Eina_Matrix4 *t, double sx, double sy, double sz);
+
+/**
+ * @brief Sets the matrix values for a rotation operation.
+ * @param[out] t Where to store the resulting matrix.
+ * @param[in] rad The number of radians to rotate.
+ * @param[in] axis The Axis of rotation.
+ *
+ * @since 1.24
+ */
+EINA_API void eina_matrix4_rotate(Eina_Matrix4 *t, double rad, Eina_Matrix_Axis axis);
+
/**
* @}
*/
@@ -980,7 +1041,7 @@ struct _Eina_Matrix2
*
* @since 1.17
*/
-EAPI void eina_matrix2_values_set(Eina_Matrix2 *m, double xx, double xy,
+EINA_API void eina_matrix2_values_set(Eina_Matrix2 *m, double xx, double xy,
double yx, double yy);
/**
@@ -1000,7 +1061,7 @@ EAPI void eina_matrix2_values_set(Eina_Matrix2 *m, double xx, double xy,
*
* @since 1.17
*/
-EAPI void eina_matrix2_values_get(const Eina_Matrix2 *m, double *xx, double *xy,
+EINA_API void eina_matrix2_values_get(const Eina_Matrix2 *m, double *xx, double *xy,
double *yx, double *yy);
/**
@@ -1015,7 +1076,7 @@ EAPI void eina_matrix2_values_get(const Eina_Matrix2 *m, double *xx, double *xy,
*
* @since 1.17
*/
-EAPI void eina_matrix2_inverse(Eina_Matrix2 *out, const Eina_Matrix2 *mat);
+EINA_API void eina_matrix2_inverse(Eina_Matrix2 *out, const Eina_Matrix2 *mat);
/**
* @brief Sets the given floating point matrix to the identity matrix.
@@ -1027,7 +1088,7 @@ EAPI void eina_matrix2_inverse(Eina_Matrix2 *out, const Eina_Matrix2 *mat);
*
* @since 1.17
*/
-EAPI void eina_matrix2_identity(Eina_Matrix2 *m);
+EINA_API void eina_matrix2_identity(Eina_Matrix2 *m);
/**
* @brief Sets array to matrix.
@@ -1039,7 +1100,7 @@ EAPI void eina_matrix2_identity(Eina_Matrix2 *m);
*
* @since 1.17
*/
-EAPI void eina_matrix2_array_set(Eina_Matrix2 *m, const double *v);
+EINA_API void eina_matrix2_array_set(Eina_Matrix2 *m, const double *v);
/**
* @brief Copies matrix.
@@ -1049,7 +1110,7 @@ EAPI void eina_matrix2_array_set(Eina_Matrix2 *m, const double *v);
*
* @since 1.17
*/
-EAPI void eina_matrix2_copy(Eina_Matrix2 *dst, const Eina_Matrix2 *src);
+EINA_API void eina_matrix2_copy(Eina_Matrix2 *dst, const Eina_Matrix2 *src);
/**
* @brief Multiplies two matrices.
@@ -1060,7 +1121,7 @@ EAPI void eina_matrix2_copy(Eina_Matrix2 *dst, const Eina_Matrix2 *src);
*
* @since 1.17
*/
-EAPI void eina_matrix2_multiply(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a,
+EINA_API void eina_matrix2_multiply(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a,
const Eina_Matrix2 *mat_b);
/**
@@ -1072,7 +1133,7 @@ EAPI void eina_matrix2_multiply(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a,
*
* @since 1.17
*/
-EAPI void eina_matrix2_multiply_copy(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a,
+EINA_API void eina_matrix2_multiply_copy(Eina_Matrix2 *out, const Eina_Matrix2 *mat_a,
const Eina_Matrix2 *mat_b);
/**
@@ -1086,7 +1147,7 @@ EAPI void eina_matrix2_multiply_copy(Eina_Matrix2 *out, const Eina_Matrix2 *mat_
*
* @since 1.17
*/
-EAPI Eina_Matrix_Type eina_matrix2_type_get(const Eina_Matrix2 *m);
+EINA_API Eina_Matrix_Type eina_matrix2_type_get(const Eina_Matrix2 *m);
/**
* @}
diff --git a/src/lib/eina/eina_matrixsparse.c b/src/lib/eina/eina_matrixsparse.c
index 9716a2cbd5..a3c5677978 100644
--- a/src/lib/eina/eina_matrixsparse.c
+++ b/src/lib/eina/eina_matrixsparse.c
@@ -927,7 +927,7 @@ eina_matrixsparse_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_Matrixsparse *
+EINA_API Eina_Matrixsparse *
eina_matrixsparse_new(unsigned long rows, unsigned long cols, void (*free_func)(
void *user_data,
void *cell_data), const void *user_data)
@@ -941,7 +941,7 @@ eina_matrixsparse_new(unsigned long rows, unsigned long cols, void (*free_func)(
if (!m) return NULL;
EINA_MAGIC_SET(m, EINA_MAGIC_MATRIXSPARSE);
-
+
m->rows = NULL;
m->last_row = NULL;
m->last_used = NULL;
@@ -954,7 +954,7 @@ eina_matrixsparse_new(unsigned long rows, unsigned long cols, void (*free_func)(
return m;
}
-EAPI void
+EINA_API void
eina_matrixsparse_free(Eina_Matrixsparse *m)
{
void (*free_func)(void *, void *);
@@ -982,7 +982,7 @@ eina_matrixsparse_free(Eina_Matrixsparse *m)
free(m);
}
-EAPI void
+EINA_API void
eina_matrixsparse_size_get(const Eina_Matrixsparse *m,
unsigned long *rows,
unsigned long *cols)
@@ -1001,7 +1001,7 @@ eina_matrixsparse_size_get(const Eina_Matrixsparse *m,
*cols = m->size.cols;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_size_set(Eina_Matrixsparse *m,
unsigned long rows,
unsigned long cols)
@@ -1107,7 +1107,7 @@ eina_matrixsparse_size_set(Eina_Matrixsparse *m,
return 1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m,
unsigned long row,
unsigned long col,
@@ -1122,14 +1122,14 @@ eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m,
return 1;
}
-EAPI void *
+EINA_API void *
eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell)
{
EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, NULL);
return cell->data;
}
-EAPI void *
+EINA_API void *
eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m,
unsigned long row,
unsigned long col)
@@ -1143,7 +1143,7 @@ eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m,
return NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell,
unsigned long *row,
unsigned long *col)
@@ -1165,7 +1165,7 @@ eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell,
return 1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell,
const void *data,
void **p_old)
@@ -1182,7 +1182,7 @@ eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell,
return 1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data)
{
Eina_Matrixsparse *m;
@@ -1200,7 +1200,7 @@ eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data)
return 1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m,
unsigned long row,
unsigned long col,
@@ -1229,7 +1229,7 @@ eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m,
return _eina_matrixsparse_cell_idx_add(m, row, col, data);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m,
unsigned long row,
unsigned long col,
@@ -1254,7 +1254,7 @@ eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m,
return _eina_matrixsparse_cell_idx_add(m, row, col, data);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row)
{
Eina_Matrixsparse_Row *r;
@@ -1272,7 +1272,7 @@ eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row)
return 1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col)
{
Eina_Matrixsparse_Row *r;
@@ -1311,7 +1311,7 @@ eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col)
return 1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m,
unsigned long row,
unsigned long col)
@@ -1332,7 +1332,7 @@ eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m,
return 1;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell)
{
Eina_Matrixsparse *m;
@@ -1348,7 +1348,7 @@ eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell)
return 1;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m)
{
Eina_Matrixsparse_Iterator *it;
@@ -1371,7 +1371,7 @@ eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m)
return &it->iterator;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m)
{
Eina_Matrixsparse_Iterator_Complete *it;
diff --git a/src/lib/eina/eina_matrixsparse.h b/src/lib/eina/eina_matrixsparse.h
index e6988c5ab2..d168a904db 100644
--- a/src/lib/eina/eina_matrixsparse.h
+++ b/src/lib/eina/eina_matrixsparse.h
@@ -95,7 +95,7 @@ typedef struct _Eina_Matrixsparse_Cell Eina_Matrixsparse_Cell;
*
* @return Newly allocated matrix, or @c NULL if allocation failed.
*/
-EAPI Eina_Matrixsparse *eina_matrixsparse_new(unsigned long rows,
+EINA_API Eina_Matrixsparse *eina_matrixsparse_new(unsigned long rows,
unsigned long cols,
void (*free_func)(void *user_data,
void *cell_data),
@@ -106,7 +106,7 @@ EAPI Eina_Matrixsparse *eina_matrixsparse_new(unsigned long rows,
*
* @param[in] m The Sparse Matrix instance to free; must @b not be @c NULL.
*/
-EAPI void eina_matrixsparse_free(Eina_Matrixsparse *m);
+EINA_API void eina_matrixsparse_free(Eina_Matrixsparse *m);
/* size manipulation */
@@ -123,7 +123,7 @@ EAPI void eina_matrixsparse_free(Eina_Matrixsparse *m);
* @param[out] cols Returns the number of columns; may be @c NULL. If @a m is
* invalid, returned value is zero, otherwise it's a positive integer.
*/
-EAPI void eina_matrixsparse_size_get(const Eina_Matrixsparse *m,
+EINA_API void eina_matrixsparse_size_get(const Eina_Matrixsparse *m,
unsigned long *rows,
unsigned long *cols);
@@ -141,7 +141,7 @@ EAPI void eina_matrixsparse_size_get(const Eina_Matrixsparse *m,
* @warning Cells, rows or columns are not reference counted and thus
* references to freed instances may become invalid.
*/
-EAPI Eina_Bool eina_matrixsparse_size_set(Eina_Matrixsparse *m,
+EINA_API Eina_Bool eina_matrixsparse_size_set(Eina_Matrixsparse *m,
unsigned long rows,
unsigned long cols);
@@ -161,7 +161,7 @@ EAPI Eina_Bool eina_matrixsparse_size_set(Eina_Matrixsparse *m,
* @see eina_matrixsparse_cell_data_get()
* @see eina_matrixsparse_data_idx_get()
*/
-EAPI Eina_Bool eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col, Eina_Matrixsparse_Cell **cell);
+EINA_API Eina_Bool eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col, Eina_Matrixsparse_Cell **cell);
/**
* @brief Gets data associated with given cell reference.
@@ -173,7 +173,7 @@ EAPI Eina_Bool eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m, unsign
* @see eina_matrixsparse_cell_idx_get()
* @see eina_matrixsparse_data_idx_get()
*/
-EAPI void *eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell);
+EINA_API void *eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell);
/**
* @brief Gets data associated with given cell given its indexes.
@@ -187,7 +187,7 @@ EAPI void *eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cel
* @see eina_matrixsparse_cell_idx_get()
* @see eina_matrixsparse_cell_data_get()
*/
-EAPI void *eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col);
+EINA_API void *eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col);
/**
* @brief Gets the row and column position of the given cell.
@@ -198,7 +198,7 @@ EAPI void *eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m, unsign
*
* @return #EINA_TRUE on success, #EINA_FALSE otherwise (@c cell is @c NULL).
*/
-EAPI Eina_Bool eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell, unsigned long *row, unsigned long *col);
+EINA_API Eina_Bool eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell, unsigned long *row, unsigned long *col);
/* Data setting */
@@ -215,7 +215,7 @@ EAPI Eina_Bool eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell
* @see eina_matrixsparse_cell_data_set()
* @see eina_matrixsparse_data_idx_replace()
*/
-EAPI Eina_Bool eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell, const void *data, void **p_old);
+EINA_API Eina_Bool eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell, const void *data, void **p_old);
/**
* @brief Changes cell value, freeing any previously existing value.
@@ -231,7 +231,7 @@ EAPI Eina_Bool eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell,
* @see eina_matrixsparse_cell_data_replace()
* @see eina_matrixsparse_data_idx_set()
*/
-EAPI Eina_Bool eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data);
+EINA_API Eina_Bool eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data);
/**
* @brief Changes cell value at a given row and column position, without
@@ -249,7 +249,7 @@ EAPI Eina_Bool eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, con
* @see eina_matrixsparse_cell_data_replace()
* @see eina_matrixsparse_data_idx_set()
*/
-EAPI Eina_Bool eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data, void **p_old);
+EINA_API Eina_Bool eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data, void **p_old);
/**
* @brief Changes cell value at a given row and column position, freeing
@@ -267,7 +267,7 @@ EAPI Eina_Bool eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m, unsigned
*
* @see eina_matrixsparse_cell_data_replace()
*/
-EAPI Eina_Bool eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data);
+EINA_API Eina_Bool eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data);
/* data deleting */
@@ -287,7 +287,7 @@ EAPI Eina_Bool eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m, unsigned lon
* @warning Cells, rows or columns are not reference counted and thus
* references to freed instances may become invalid.
*/
-EAPI Eina_Bool eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row);
+EINA_API Eina_Bool eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row);
/**
* @brief Clears (erases all cells) of column given its index.
@@ -305,7 +305,7 @@ EAPI Eina_Bool eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned lo
* @warning Cells, rows or columns are not reference counted and thus
* references to freed instances may become invalid.
*/
-EAPI Eina_Bool eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col);
+EINA_API Eina_Bool eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col);
/**
* @brief Clears (erases) cell at a given row, column position.
@@ -328,7 +328,7 @@ EAPI Eina_Bool eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned
* @note This call might also free the column and/or row if this was the
* last remaining cell contained.
*/
-EAPI Eina_Bool eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m, unsigned long row, unsigned long col);
+EINA_API Eina_Bool eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m, unsigned long row, unsigned long col);
/**
* @brief Clears (erases) cell given its reference.
@@ -343,7 +343,7 @@ EAPI Eina_Bool eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m, unsigned l
* @note This call might also free the column and/or row if this was the
* last remaining cell contained.
*/
-EAPI Eina_Bool eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell);
+EINA_API Eina_Bool eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell);
/* Iterators */
@@ -366,7 +366,7 @@ EAPI Eina_Bool eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell);
* invalid! That is, if you add or remove cells this iterator
* behavior is undefined and your program may crash!
*/
-EAPI Eina_Iterator *eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m);
+EINA_API Eina_Iterator *eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m);
/**
* @brief Creates a new iterator over all matrix cells.
@@ -394,7 +394,7 @@ EAPI Eina_Iterator *eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m);
* invalid! That is, if you add or remove cells this iterator
* behavior is undefined and your program may crash!
*/
-EAPI Eina_Iterator *eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m);
+EINA_API Eina_Iterator *eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m);
/**
* @}
diff --git a/src/lib/eina/eina_mempool.c b/src/lib/eina/eina_mempool.c
index 93c32e9d7e..406e80fe75 100644
--- a/src/lib/eina/eina_mempool.c
+++ b/src/lib/eina/eina_mempool.c
@@ -148,13 +148,13 @@ void pass_through_shutdown(void);
* @cond LOCAL
*/
-EAPI Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE = 0;
+EINA_API Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE = 0;
/**
* @endcond
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_mempool_register(Eina_Mempool_Backend *be)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(be, 0);
@@ -162,7 +162,7 @@ eina_mempool_register(Eina_Mempool_Backend *be)
return eina_hash_add(_backends, be->name, be);
}
-EAPI void
+EINA_API void
eina_mempool_unregister(Eina_Mempool_Backend *be)
{
EINA_SAFETY_ON_NULL_RETURN(be);
@@ -259,7 +259,7 @@ eina_mempool_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_Mempool *
+EINA_API Eina_Mempool *
eina_mempool_add(const char *name,
const char *context,
const char *options,
@@ -282,7 +282,7 @@ eina_mempool_add(const char *name,
return mp;
}
-EAPI void eina_mempool_del(Eina_Mempool *mp)
+EINA_API void eina_mempool_del(Eina_Mempool *mp)
{
EINA_SAFETY_ON_NULL_RETURN(mp);
EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
@@ -292,7 +292,7 @@ EAPI void eina_mempool_del(Eina_Mempool *mp)
free(mp);
}
-EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data)
+EINA_API void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data)
{
EINA_SAFETY_ON_NULL_RETURN(mp);
EINA_SAFETY_ON_NULL_RETURN(mp->backend2);
@@ -301,7 +301,7 @@ EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void
mp->backend2->repack(mp->backend_data, cb, data);
}
-EAPI void eina_mempool_gc(Eina_Mempool *mp)
+EINA_API void eina_mempool_gc(Eina_Mempool *mp)
{
EINA_SAFETY_ON_NULL_RETURN(mp);
EINA_SAFETY_ON_NULL_RETURN(mp->backend.garbage_collect);
@@ -309,7 +309,7 @@ EAPI void eina_mempool_gc(Eina_Mempool *mp)
mp->backend.garbage_collect(mp->backend_data);
}
-EAPI void eina_mempool_statistics(Eina_Mempool *mp)
+EINA_API void eina_mempool_statistics(Eina_Mempool *mp)
{
EINA_SAFETY_ON_NULL_RETURN(mp);
EINA_SAFETY_ON_NULL_RETURN(mp->backend.statistics);
diff --git a/src/lib/eina/eina_mempool.h b/src/lib/eina/eina_mempool.h
index 9b845c6565..a299a21ee0 100644
--- a/src/lib/eina/eina_mempool.h
+++ b/src/lib/eina/eina_mempool.h
@@ -73,7 +73,7 @@ typedef struct _Eina_Mempool_Backend Eina_Mempool_Backend;
*/
typedef void (*Eina_Mempool_Repack_Cb)(void *dst, void *src, void *data);
-EAPI extern Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE;
+EINA_API extern Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE;
/**
* @brief Creates a new mempool of the given type
@@ -84,14 +84,14 @@ EAPI extern Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE;
* @param[in] ... Additional options to pass to the allocator; depends entirely on the type of mempool ("int pool size" for chained and "int item_size" for one_big.
* @return Newly allocated mempool instance, NULL otherwise.
*/
-EAPI Eina_Mempool *eina_mempool_add(const char *name, const char *context, const char *options, ...) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Mempool *eina_mempool_add(const char *name, const char *context, const char *options, ...) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Deletes the given mempool.
*
* @param[in] mp The mempool to delete
*/
-EAPI void eina_mempool_del(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
+EINA_API void eina_mempool_del(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
/**
* @brief Re-allocates an amount memory by the given mempool.
@@ -192,14 +192,14 @@ static inline void eina_mempool_free(Eina_Mempool *mp, void *element) EINA_ARG_
* @see Eina_Mempool_Repack_Cb
* @see _Eina_Mempool_Backend
*/
-EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data) EINA_ARG_NONNULL(1, 2);
+EINA_API void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data) EINA_ARG_NONNULL(1, 2);
/**
* @brief Runs a garbage collection cycle.
*
* @param[in] mp The mempool
*/
-EAPI void eina_mempool_gc(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
+EINA_API void eina_mempool_gc(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
/**
* @brief Check if a pointer is a valid element from the mempool
@@ -218,7 +218,7 @@ static inline Eina_Bool eina_mempool_from(Eina_Mempool *mp, void *element);
* @param[in] mp The mempool
*
*/
-EAPI void eina_mempool_statistics(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
+EINA_API void eina_mempool_statistics(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
/**
* @brief Provide an iterator to walk all allocated elements from a specified mempool.
@@ -238,14 +238,14 @@ static inline Eina_Iterator *eina_mempool_iterator_new(Eina_Mempool *mp);
* @return #EINA_TRUE if backend has been correctly registered, #EINA_FALSE
* otherwise.
*/
-EAPI Eina_Bool eina_mempool_register(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_mempool_register(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
/**
* @brief Unregisters the given memory pool backend.
*
* @param[in] be The backend
*/
-EAPI void eina_mempool_unregister(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
+EINA_API void eina_mempool_unregister(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
/**
* @brief Computes the alignment that would be used when allocating a object of size @p size.
diff --git a/src/lib/eina/eina_mmap.c b/src/lib/eina/eina_mmap.c
index 23386dac1d..55f891e379 100644
--- a/src/lib/eina/eina_mmap.c
+++ b/src/lib/eina/eina_mmap.c
@@ -167,7 +167,7 @@ _eina_mmap_safe_sigbus(int sig, siginfo_t *siginfo, void *ptr)
* API *
*============================================================================*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_mmap_safety_enabled_set(Eina_Bool enabled)
{
#ifndef HAVE_SIGINFO_T
@@ -229,13 +229,13 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled)
}
signal(SIGBUS, SIG_DFL);
}
-done:
+done:
mmap_safe = enabled;
return mmap_safe;
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_mmap_safety_enabled_get(void)
{
return mmap_safe;
diff --git a/src/lib/eina/eina_mmap.h b/src/lib/eina/eina_mmap.h
index 8e7545abe1..afa36a4d04 100644
--- a/src/lib/eina/eina_mmap.h
+++ b/src/lib/eina/eina_mmap.h
@@ -39,7 +39,7 @@
*
* @since 1.1.0
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_mmap_safety_enabled_set(Eina_Bool enabled);
/**
@@ -52,7 +52,7 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled);
*
* @since 1.1.0
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_mmap_safety_enabled_get(void);
/**
diff --git a/src/lib/eina/eina_module.c b/src/lib/eina/eina_module.c
index 171b71afad..345ae20637 100644
--- a/src/lib/eina/eina_module.c
+++ b/src/lib/eina/eina_module.c
@@ -180,8 +180,8 @@ static void _dir_arch_list_cb(const char *name, const char *path, void *data)
* @cond LOCAL
*/
-EAPI Eina_Error EINA_ERROR_WRONG_MODULE = 0;
-EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED = 0;
+EINA_API Eina_Error EINA_ERROR_WRONG_MODULE = 0;
+EINA_API Eina_Error EINA_ERROR_MODULE_INIT_FAILED = 0;
/**
* @endcond
@@ -240,7 +240,7 @@ eina_module_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_Module *eina_module_new(const char *file)
+EINA_API Eina_Module *eina_module_new(const char *file)
{
Eina_Module *m;
size_t len;
@@ -278,7 +278,7 @@ EAPI Eina_Module *eina_module_new(const char *file)
return m;
}
-EAPI Eina_Bool eina_module_free(Eina_Module *m)
+EINA_API Eina_Bool eina_module_free(Eina_Module *m)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
@@ -292,7 +292,7 @@ EAPI Eina_Bool eina_module_free(Eina_Module *m)
return EINA_TRUE;
}
-EAPI Eina_Bool eina_module_load(Eina_Module *m)
+EINA_API Eina_Bool eina_module_load(Eina_Module *m)
{
#ifdef HAVE_DLOPEN
void *dl_handle;
@@ -347,7 +347,7 @@ loaded:
#endif
}
-EAPI Eina_Bool eina_module_unload(Eina_Module *m)
+EINA_API Eina_Bool eina_module_unload(Eina_Module *m)
{
#ifdef HAVE_DLOPEN
Eina_Module_Shutdown *shut;
@@ -375,7 +375,7 @@ EAPI Eina_Bool eina_module_unload(Eina_Module *m)
#endif
}
-EAPI void *eina_module_symbol_get(const Eina_Module *m, const char *symbol)
+EINA_API void *eina_module_symbol_get(const Eina_Module *m, const char *symbol)
{
#ifdef HAVE_DLOPEN
EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
@@ -388,19 +388,19 @@ EAPI void *eina_module_symbol_get(const Eina_Module *m, const char *symbol)
#endif
}
-EAPI const char *eina_module_file_get(const Eina_Module *m)
+EINA_API const char *eina_module_file_get(const Eina_Module *m)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
return m->file;
}
-EAPI void eina_module_symbol_global_set(Eina_Module *module, Eina_Bool global)
+EINA_API void eina_module_symbol_global_set(Eina_Module *module, Eina_Bool global)
{
EINA_SAFETY_ON_NULL_RETURN(module);
module->global = !!global;
}
-EAPI char *eina_module_symbol_path_get(const void *symbol, const char *sub_dir)
+EINA_API char *eina_module_symbol_path_get(const void *symbol, const char *sub_dir)
{
#ifdef HAVE_DLADDR
Dl_info eina_dl;
@@ -442,7 +442,7 @@ EAPI char *eina_module_symbol_path_get(const void *symbol, const char *sub_dir)
return NULL;
}
-EAPI char *eina_module_environment_path_get(const char *env,
+EINA_API char *eina_module_environment_path_get(const char *env,
const char *sub_dir)
{
const char *env_dir;
@@ -478,7 +478,7 @@ EAPI char *eina_module_environment_path_get(const char *env,
return NULL;
}
-EAPI Eina_Array *eina_module_arch_list_get(Eina_Array *array,
+EINA_API Eina_Array *eina_module_arch_list_get(Eina_Array *array,
const char *path,
const char *arch)
{
@@ -496,7 +496,7 @@ EAPI Eina_Array *eina_module_arch_list_get(Eina_Array *array,
return list_get_cb_data.array;
}
-EAPI Eina_Array *eina_module_list_get(Eina_Array *array,
+EINA_API Eina_Array *eina_module_list_get(Eina_Array *array,
const char *path,
Eina_Bool recursive,
Eina_Module_Cb cb,
@@ -520,7 +520,7 @@ EAPI Eina_Array *eina_module_list_get(Eina_Array *array,
return list_get_cb_data.array;
}
-EAPI Eina_Module *
+EINA_API Eina_Module *
eina_module_find(const Eina_Array *array, const char *module)
{
unsigned int i;
@@ -551,7 +551,7 @@ eina_module_find(const Eina_Array *array, const char *module)
return NULL;
}
-EAPI void eina_module_list_load(Eina_Array *array)
+EINA_API void eina_module_list_load(Eina_Array *array)
{
Eina_Array_Iterator iterator;
Eina_Module *m;
@@ -566,7 +566,7 @@ EAPI void eina_module_list_load(Eina_Array *array)
}
}
-EAPI void eina_module_list_unload(Eina_Array *array)
+EINA_API void eina_module_list_unload(Eina_Array *array)
{
Eina_Array_Iterator iterator;
Eina_Module *m;
@@ -578,7 +578,7 @@ EAPI void eina_module_list_unload(Eina_Array *array)
eina_module_unload(m);
}
-EAPI void eina_module_list_free(Eina_Array *array)
+EINA_API void eina_module_list_free(Eina_Array *array)
{
Eina_Array_Iterator iterator;
Eina_Module *m;
diff --git a/src/lib/eina/eina_module.h b/src/lib/eina/eina_module.h
index 90400546a1..821da69ab3 100644
--- a/src/lib/eina/eina_module.h
+++ b/src/lib/eina/eina_module.h
@@ -25,19 +25,9 @@
#include "eina_inline_modinfo.x"
/**
- * @addtogroup Eina_Module_Group Module
- *
- * @brief These functions provide module management.
- */
-
-/**
- * @addtogroup Eina_Tools_Group Tools
- *
- * @{
- */
-
-/**
* @defgroup Eina_Module_Group Module
+ * @ingroup Eina_Tools_Group Tools
+ * @brief These functions provide module management.
*
* Eina module provides some helpers over POSIX dlopen(). It is not
* meant to replace, abstract or make a "portable" version of
@@ -59,6 +49,16 @@
* directory listing. See eina_module_arch_list_get(),
* eina_module_list_get() and eina_module_find().
*
+ * #EINA_MODULE_LICENSE, #EINA_MODULE_AUTHOR, #EINA_MODULE_VERSION and
+ * #EINA_MODULE_DESCRIPTION allow you to define module information that can
+ * be retrieved with the @c eina_modinfo tool.
+ @code{.sh}
+ $ eina_modinfo module.so
+ version: 0.1
+ description: Entry test
+ license: GPLv2
+ author: Enlightenment Community
+ @endcode
* @{
*/
@@ -106,8 +106,8 @@ typedef void (*Eina_Module_Shutdown)(void);
*/
#define EINA_MODULE_SHUTDOWN(f) EXPORTAPI Eina_Module_Shutdown __eina_module_shutdown = &f
-extern EAPI Eina_Error EINA_ERROR_WRONG_MODULE;
-extern EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED;
+extern EINA_API Eina_Error EINA_ERROR_WRONG_MODULE;
+extern EINA_API Eina_Error EINA_ERROR_MODULE_INIT_FAILED;
/**
* @brief Returns a new module.
@@ -123,7 +123,7 @@ extern EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED;
*
* @see eina_module_load
*/
-EAPI Eina_Module *
+EINA_API Eina_Module *
eina_module_new(const char *file) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
@@ -137,7 +137,7 @@ EAPI Eina_Module *
* returns #EINA_TRUE and #EINA_FALSE otherwise. If @p module is @c NULL, the
* function returns immediately.
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_module_free(Eina_Module *module) EINA_ARG_NONNULL(1);
/**
@@ -158,7 +158,7 @@ EAPI Eina_Bool
* When the symbols of the shared file objects are not needed
* anymore, call eina_module_unload() to unload the module.
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_module_load(Eina_Module *module) EINA_ARG_NONNULL(1);
/**
@@ -175,7 +175,7 @@ EAPI Eina_Bool
* returned. In all case, the reference counter is decreased. If @p module
* is @c NULL, the function returns immediately #EINA_FALSE.
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_module_unload(Eina_Module *module) EINA_ARG_NONNULL(1);
/**
@@ -190,7 +190,7 @@ EAPI Eina_Bool
* is @c NULL, or if it has not been correctly loaded before, the
* function returns immediately @c NULL.
*/
-EAPI void *
+EINA_API void *
eina_module_symbol_get(const Eina_Module *module, const char *symbol) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
@@ -203,7 +203,7 @@ EAPI void *
* @p module is @c NULL, the function returns immediately @c NULL. The
* returned value must no be freed.
*/
-EAPI const char *
+EINA_API const char *
eina_module_file_get(const Eina_Module *module) EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
@@ -214,7 +214,7 @@ EAPI const char *
*
* @since 1.11
*/
-EAPI void eina_module_symbol_global_set(Eina_Module *module, Eina_Bool global) EINA_ARG_NONNULL(1);
+EINA_API void eina_module_symbol_global_set(Eina_Module *module, Eina_Bool global) EINA_ARG_NONNULL(1);
/**
* @brief Returns the path built from the location of a library and a
@@ -230,7 +230,7 @@ EAPI void eina_module_symbol_global_set(Eina_Module *module, Eina_Bool global) E
* anymore. If the symbol is not found, or dl_addr() is not supported,
* or allocation fails, this function returns @c NULL.
*/
-EAPI char *
+EINA_API char *
eina_module_symbol_path_get(const void *symbol, const char *sub_dir) EINA_MALLOC EINA_ARG_NONNULL(1, 2);
/**
@@ -247,7 +247,7 @@ EAPI char *
* anymore. If the symbol is not found, or @p env does not exist, or
* allocation fails, this function returns @c NULL.
*/
-EAPI char *
+EINA_API char *
eina_module_environment_path_get(const char *env, const char *sub_dir) EINA_MALLOC EINA_ARG_NONNULL(1, 2);
@@ -264,7 +264,7 @@ EAPI char *
* @c NULL, the function returns immediately @p array. @p array can be
* @c NULL. In that case, it is created with 4 elements.
*/
-EAPI Eina_Array *
+EINA_API Eina_Array *
eina_module_arch_list_get(Eina_Array *array, const char *path, const char *arch);
/**
@@ -286,7 +286,7 @@ EAPI Eina_Array *
* @p array can be @c NULL. In that case, it is created with 4
* elements. @p cb can be @c NULL.
*/
-EAPI Eina_Array *
+EINA_API Eina_Array *
eina_module_list_get(Eina_Array *array, const char *path, Eina_Bool recursive, Eina_Module_Cb cb, void *data) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
@@ -297,7 +297,7 @@ EAPI Eina_Array *
* This function calls eina_module_load() on each element found in
* @p array. If @p array is @c NULL, this function does nothing.
*/
-EAPI void
+EINA_API void
eina_module_list_load(Eina_Array *array) EINA_ARG_NONNULL(1);
/**
@@ -308,7 +308,7 @@ EAPI void
* This function calls eina_module_unload() on each element found in
* @p array. If @p array is @c NULL, this function does nothing.
*/
-EAPI void
+EINA_API void
eina_module_list_unload(Eina_Array *array) EINA_ARG_NONNULL(1);
/**
@@ -319,7 +319,7 @@ EAPI void
* This function calls eina_module_free() on each element found in
* @p array. If @p array is @c NULL, this function does nothing.
*/
-EAPI void
+EINA_API void
eina_module_list_free(Eina_Array *array) EINA_ARG_NONNULL(1);
/**
@@ -333,15 +333,11 @@ EAPI void
* If the element is found the function returns the module, else
* @c NULL is returned.
*/
-EAPI Eina_Module *
+EINA_API Eina_Module *
eina_module_find(const Eina_Array *array, const char *module) EINA_ARG_NONNULL(1, 2);
/**
* @}
*/
-/**
- * @}
- */
-
#endif /*EINA_MODULE_H_*/
diff --git a/src/lib/eina/eina_prefix.c b/src/lib/eina/eina_prefix.c
index dd483a085a..1e7f5ddd80 100644
--- a/src/lib/eina/eina_prefix.c
+++ b/src/lib/eina/eina_prefix.c
@@ -301,8 +301,9 @@ _try_argv(Eina_Prefix *pfx, const char *argv0)
{
if (getcwd(buf2, sizeof(buf2)))
{
- char joined[PATH_MAX];
- eina_file_path_join(joined, sizeof(joined), buf2, argv0);
+ size_t len = strlen(buf2) + 1 + strlen(argv0) + 1;
+ char *joined = alloca(len);
+ eina_file_path_join(joined, len, buf2, argv0);
if (realpath(joined, buf))
{
if (access(buf, X_OK) == 0)
@@ -371,7 +372,7 @@ _try_argv(Eina_Prefix *pfx, const char *argv0)
static int
_get_env_var(char **var, const char *envprefix, const char *envsuffix, const char *prefix, const char *dir)
{
- char env[1024];
+ char env[64];
const char *s;
#if defined(HAVE_GETUID) && defined(HAVE_GETEUID)
@@ -387,8 +388,11 @@ _get_env_var(char **var, const char *envprefix, const char *envsuffix, const cha
}
else if (prefix)
{
- char buf[PATH_MAX];
- eina_file_path_join(buf, sizeof(buf), prefix, dir);
+ size_t len = strlen(prefix) + 1 + strlen(dir) + 1;
+ char *buf;
+
+ buf = alloca(len);
+ eina_file_path_join(buf, len, prefix, dir);
INF("Have %s_PREFIX = %s, use %s = %s", envprefix, prefix, env, buf);
STRDUP_REP(*var, buf);
return 1;
@@ -409,7 +413,7 @@ _get_env_vars(Eina_Prefix *pfx,
const char *datadir,
const char *localedir)
{
- char env[1024];
+ char env[32];
const char *prefix;
int ret = 0;
@@ -460,7 +464,7 @@ _common_prefix_find(const char *bin, const char *lib, const char *data, const ch
*============================================================================*/
-EAPI Eina_Prefix *
+EINA_API Eina_Prefix *
eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
const char *sharedir, const char *magicsharefile,
const char *pkg_bin, const char *pkg_lib,
@@ -746,7 +750,7 @@ eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
return pfx;
}
-EAPI void
+EINA_API void
eina_prefix_free(Eina_Prefix *pfx)
{
EINA_SAFETY_ON_NULL_RETURN(pfx);
@@ -760,35 +764,35 @@ eina_prefix_free(Eina_Prefix *pfx)
free(pfx);
}
-EAPI const char *
+EINA_API const char *
eina_prefix_get(Eina_Prefix *pfx)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(pfx, "");
return pfx->prefix_path;
}
-EAPI const char *
+EINA_API const char *
eina_prefix_bin_get(Eina_Prefix *pfx)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(pfx, "");
return pfx->prefix_path_bin;
}
-EAPI const char *
+EINA_API const char *
eina_prefix_lib_get(Eina_Prefix *pfx)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(pfx, "");
return pfx->prefix_path_lib;
}
-EAPI const char *
+EINA_API const char *
eina_prefix_data_get(Eina_Prefix *pfx)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(pfx, "");
return pfx->prefix_path_data;
}
-EAPI const char *
+EINA_API const char *
eina_prefix_locale_get(Eina_Prefix *pfx)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(pfx, "");
diff --git a/src/lib/eina/eina_prefix.h b/src/lib/eina/eina_prefix.h
index 549f4620dc..f2547b72be 100644
--- a/src/lib/eina/eina_prefix.h
+++ b/src/lib/eina/eina_prefix.h
@@ -150,7 +150,7 @@ typedef struct _Eina_Prefix Eina_Prefix;
*
* @see eina_prefix_free()
*/
-EAPI Eina_Prefix *eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
+EINA_API Eina_Prefix *eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
const char *sharedir, const char *magicsharefile,
const char *pkg_bin, const char *pkg_lib,
const char *pkg_data, const char *pkg_locale) EINA_ARG_NONNULL(6, 7, 8, 9) EINA_WARN_UNUSED_RESULT;
@@ -167,7 +167,7 @@ EAPI Eina_Prefix *eina_prefix_new(const char *argv0, void *symbol, const char *e
*
* @see eina_prefix_new()
*/
-EAPI void eina_prefix_free(Eina_Prefix *pfx) EINA_ARG_NONNULL(1);
+EINA_API void eina_prefix_free(Eina_Prefix *pfx) EINA_ARG_NONNULL(1);
/**
* @brief Gets the prefix base directory.
@@ -178,7 +178,7 @@ EAPI void eina_prefix_free(Eina_Prefix *pfx) EINA_ARG_NONNULL(1);
*
* @since 1.1.0
*/
-EAPI const char *eina_prefix_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API const char *eina_prefix_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @brief Gets the binary installation directory.
@@ -189,7 +189,7 @@ EAPI const char *eina_prefix_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN
*
* @since 1.1.0
*/
-EAPI const char *eina_prefix_bin_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API const char *eina_prefix_bin_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @brief Gets the library installation directory.
@@ -200,7 +200,7 @@ EAPI const char *eina_prefix_bin_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_
*
* @since 1.1.0
*/
-EAPI const char *eina_prefix_lib_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API const char *eina_prefix_lib_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @brief Gets the data installation directory.
@@ -211,7 +211,7 @@ EAPI const char *eina_prefix_lib_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_
*
* @since 1.1.0
*/
-EAPI const char *eina_prefix_data_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API const char *eina_prefix_data_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @brief Gets the locale installation directory.
@@ -222,7 +222,7 @@ EAPI const char *eina_prefix_data_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA
*
* @since 1.1.0
*/
-EAPI const char *eina_prefix_locale_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API const char *eina_prefix_locale_get(Eina_Prefix *pfx) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @}
diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h
index 9e2954e001..9d4da033ce 100644
--- a/src/lib/eina/eina_private.h
+++ b/src/lib/eina/eina_private.h
@@ -25,6 +25,11 @@
#include <xlocale.h>
#endif
+#ifdef _WIN32
+# include <windows.h>
+# include <bcrypt.h>
+#endif
+
#include "eina_magic.h"
#include "eina_iterator.h"
#include "eina_accessor.h"
@@ -152,6 +157,7 @@ Eina_Stringshare *eina_file_sanitize(const char *path);
void eina_freeq_main_set(Eina_FreeQ *fq);
#ifdef _WIN32
+extern BCRYPT_ALG_HANDLE _eina_bcrypt_provider;
typedef _locale_t locale_t;
#endif
locale_t _eina_c_locale_get(void);
@@ -159,4 +165,3 @@ locale_t _eina_c_locale_get(void);
#include "eina_inline_private.h"
#endif /* EINA_PRIVATE_H_ */
-
diff --git a/src/lib/eina/eina_promise.c b/src/lib/eina/eina_promise.c
index f32d835fe4..4fe51206e4 100644
--- a/src/lib/eina/eina_promise.c
+++ b/src/lib/eina/eina_promise.c
@@ -8,6 +8,7 @@
#include "eina_mempool.h"
#include "eina_promise_private.h"
#include "eina_internal.h"
+#include "eina_iterator.h"
#include <errno.h>
#include <stdarg.h>
@@ -97,7 +98,7 @@
#undef CRI
#define CRI(...) EINA_LOG_DOM_CRIT(_promise_log_dom, __VA_ARGS__)
-#define _eina_promise_value_dbg(_msg, _p, _v) __eina_promise_value_dbg(_msg, _p, _v, __LINE__, __FUNCTION__)
+#define _eina_promise_value_dbg(_msg, _p, _v) __eina_promise_value_dbg(_msg, _p, _v, __LINE__, __func__)
struct _Eina_Promise {
Eina_Future *future;
@@ -138,7 +139,9 @@ static const Eina_Value_Struct_Desc RACE_STRUCT_DESC = {
.size = sizeof(Eina_Future_Race_Result)
};
-EAPI const Eina_Value_Struct_Desc *EINA_PROMISE_RACE_STRUCT_DESC = &RACE_STRUCT_DESC;
+/** @cond local */
+EINA_API const Eina_Value_Struct_Desc *EINA_PROMISE_RACE_STRUCT_DESC = &RACE_STRUCT_DESC;
+/** @endcond */
static inline void
__eina_promise_value_dbg(const char *msg,
@@ -244,7 +247,7 @@ _promise_convert_to(const Eina_Value_Type *type EINA_UNUSED, const Eina_Value_Ty
return EINA_FALSE;
}
-static const Eina_Value_Type EINA_VALUE_TYPE_PROMISE = {
+const Eina_Value_Type EINA_VALUE_TYPE_PROMISE = {
.version = EINA_VALUE_TYPE_VERSION,
.value_size = sizeof(Eina_Promise *),
.name = "Eina_Promise",
@@ -424,6 +427,7 @@ _eina_future_dispatch(Eina_Future_Scheduler *scheduler, Eina_Future *f, Eina_Val
static void
_scheduled_entry_cb(Eina_Future *f, Eina_Value value)
{
+ EINA_SAFETY_ON_NULL_RETURN(f->scheduled_entry);
// This function is called by the scheduler, so it has to be defined
Eina_Future_Scheduler *scheduler = f->scheduled_entry->scheduler;
@@ -570,7 +574,7 @@ eina_promise_init(void)
return EINA_FALSE;
}
-EAPI void
+EINA_API void
__eina_promise_cancel_all(void)
{
eina_lock_take(&_pending_futures_lock);
@@ -579,7 +583,7 @@ __eina_promise_cancel_all(void)
eina_lock_release(&_pending_futures_lock);
}
-EAPI void
+EINA_API void
__eina_promise_cancel_data(void *data)
{
Eina_List *del = NULL, *l;
@@ -614,7 +618,7 @@ eina_promise_shutdown(void)
return EINA_TRUE;
}
-EAPI Eina_Value
+EINA_API Eina_Value
eina_promise_as_value(Eina_Promise *p)
{
Eina_Value v = EINA_VALUE_EMPTY;
@@ -694,7 +698,7 @@ _scheduler_get(Eina_Future *f)
return NULL;
}
-EAPI Eina_Value
+EINA_API Eina_Value
eina_future_as_value(Eina_Future *f)
{
Eina_Value v = EINA_VALUE_EMPTY;
@@ -735,7 +739,7 @@ eina_future_as_value(Eina_Future *f)
return v;
}
-EAPI Eina_Promise *
+EINA_API Eina_Promise *
eina_promise_new(Eina_Future_Scheduler *scheduler,
Eina_Promise_Cancel_Cb cancel_cb, const void *data)
{
@@ -754,7 +758,7 @@ eina_promise_new(Eina_Future_Scheduler *scheduler,
return p;
}
-EAPI Eina_Promise *
+EINA_API Eina_Promise *
eina_promise_continue_new(const Eina_Future *dead_future,
Eina_Promise_Cancel_Cb cancel_cb, const void *data)
{
@@ -773,14 +777,14 @@ eina_promise_continue_new(const Eina_Future *dead_future,
return p;
}
-EAPI void
+EINA_API void
eina_future_cancel(Eina_Future *f)
{
EINA_FUTURE_CHECK_RETURN(f);
_eina_future_cancel(f, ECANCELED);
}
-EAPI void
+EINA_API void
eina_promise_resolve(Eina_Promise *p, Eina_Value value)
{
EINA_PROMISE_CHECK_GOTO(p, err);
@@ -791,7 +795,7 @@ eina_promise_resolve(Eina_Promise *p, Eina_Value value)
eina_value_flush(&value);
}
-EAPI void
+EINA_API void
eina_promise_reject(Eina_Promise *p, Eina_Error err)
{
Eina_Value value;
@@ -859,7 +863,7 @@ _eina_future_new(Eina_Promise *p, const Eina_Future_Desc desc)
return NULL;
}
-EAPI Eina_Future *
+EINA_API Eina_Future *
eina_future_new(Eina_Promise *p)
{
static const Eina_Future_Desc desc = {
@@ -894,7 +898,7 @@ _eina_future_then(Eina_Future *prev, const Eina_Future_Desc desc)
return NULL;
}
-EAPI Eina_Future *
+EINA_API Eina_Future *
eina_future_resolved(Eina_Future_Scheduler *scheduler, Eina_Value value)
{
Eina_Promise *p;
@@ -916,7 +920,7 @@ eina_future_resolved(Eina_Future_Scheduler *scheduler, Eina_Value value)
return NULL;
}
-EAPI Eina_Future *
+EINA_API Eina_Future *
eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Error err)
{
Eina_Promise *p;
@@ -937,7 +941,7 @@ eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Error err)
return NULL;
}
-EAPI Eina_Future *
+EINA_API Eina_Future *
eina_future_then_from_desc(Eina_Future *prev, const Eina_Future_Desc desc)
{
EINA_FUTURE_CHECK_GOTO(prev, err_future);
@@ -951,7 +955,7 @@ eina_future_then_from_desc(Eina_Future *prev, const Eina_Future_Desc desc)
return NULL;
}
-EAPI Eina_Future *
+EINA_API Eina_Future *
eina_future_chain_array(Eina_Future *prev, const Eina_Future_Desc descs[])
{
Eina_Future *f = prev;
@@ -987,7 +991,7 @@ eina_future_chain_array(Eina_Future *prev, const Eina_Future_Desc descs[])
return NULL;
}
-EAPI Eina_Future *
+EINA_API Eina_Future *
eina_future_chain_easy_array(Eina_Future *prev, const Eina_Future_Cb_Easy_Desc descs[])
{
size_t i = -1;
@@ -1056,7 +1060,7 @@ _eina_future_cb_console(void *data,
return value;
}
-EAPI Eina_Future_Desc
+EINA_API Eina_Future_Desc
eina_future_cb_console_from_desc(const Eina_Future_Cb_Console_Desc desc)
{
Eina_Future_Cb_Console_Desc *c;
@@ -1108,7 +1112,7 @@ _eina_future_cb_convert_to(void *data, const Eina_Value src,
return dst;
}
-EAPI Eina_Future_Desc
+EINA_API Eina_Future_Desc
eina_future_cb_convert_to(const Eina_Value_Type *type)
{
return (Eina_Future_Desc){.cb = _eina_future_cb_convert_to, .data = type};
@@ -1130,7 +1134,7 @@ _eina_future_cb_easy(void *data, const Eina_Value value,
return ret;
}
-EAPI Eina_Future_Desc
+EINA_API Eina_Future_Desc
eina_future_cb_easy_from_desc(const Eina_Future_Cb_Easy_Desc desc)
{
Eina_Future_Cb_Easy_Desc *d = calloc(1, sizeof(Eina_Future_Cb_Easy_Desc));
@@ -1223,7 +1227,7 @@ _race_then_cb(void *data, const Eina_Value v,
//This is not allowed!
assert(v.type != &EINA_VALUE_TYPE_PROMISE);
found = _future_unset(&ctx->base, &i, dead_ptr);
- assert(found);
+ assert(found); (void) found;
if (ctx->dispatching) return EINA_VALUE_EMPTY;
ctx->dispatching = EINA_TRUE;
@@ -1262,7 +1266,7 @@ _all_then_cb(void *data, const Eina_Value v,
assert(v.type != &EINA_VALUE_TYPE_PROMISE);
found = _future_unset(&ctx->base, &i, dead_ptr);
- assert(found);
+ assert(found); (void) found;
ctx->processed++;
eina_value_array_set(&ctx->values, i, v);
@@ -1325,7 +1329,71 @@ promise_proxy_of_future_array_create(Eina_Future *array[],
return EINA_FALSE;
}
-EAPI Eina_Promise *
+EINA_API Eina_Promise *
+eina_promise_all_iterator(Eina_Iterator *it)
+{
+ All_Promise_Ctx *ctx;
+ Eina_Future *f;
+ unsigned int i = 1;
+ Eina_Bool r;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
+ ctx = calloc(1, sizeof(All_Promise_Ctx));
+ EINA_SAFETY_ON_NULL_GOTO(ctx, err_ctx);
+ r = eina_value_array_setup(&ctx->values, EINA_VALUE_TYPE_VALUE, 0);
+ EINA_SAFETY_ON_FALSE_GOTO(r, err_array);
+ r = eina_iterator_next(it, (void**) &f);
+ EINA_SAFETY_ON_FALSE_GOTO(r, err_array);
+
+ ctx->base.promise = eina_promise_new(_scheduler_get(f), _all_promise_cancel, ctx);
+ EINA_SAFETY_ON_NULL_GOTO(ctx->base.promise, err_array);
+
+ ctx->base.futures_len = 1;
+ ctx->base.futures = calloc(1, sizeof (Eina_Future *));
+ EINA_SAFETY_ON_NULL_GOTO(ctx->base.futures, err_futures);
+
+ ctx->base.futures[0] = eina_future_then(f, _all_then_cb, ctx, NULL);
+
+ EINA_ITERATOR_FOREACH(it, f)
+ {
+ Eina_Future **tmp;
+
+ ctx->base.futures_len++;
+ tmp = realloc(ctx->base.futures, ctx->base.futures_len * sizeof (Eina_Future *));
+
+ EINA_SAFETY_ON_NULL_GOTO(tmp, err_futures);
+ ctx->base.futures = tmp;
+ ctx->base.futures[i] = eina_future_then(f, _all_then_cb, ctx, NULL);
+ EINA_SAFETY_ON_NULL_GOTO(ctx->base.futures[i++], err_futures);
+ }
+
+ for (i = 0; i < ctx->base.futures_len; i++)
+ {
+ Eina_Value v = { 0 };
+ //Stub values...
+ r = eina_value_setup(&v, EINA_VALUE_TYPE_INT);
+ EINA_SAFETY_ON_FALSE_GOTO(r, err_futures);
+ r = eina_value_array_append(&ctx->values, v);
+ eina_value_flush(&v);
+ EINA_SAFETY_ON_FALSE_GOTO(r, err_futures);
+ }
+ return ctx->base.promise;
+
+ err_futures:
+ while (i >= 1) _eina_future_free(ctx->base.futures[--i]);
+ free(ctx->base.futures);
+ ctx->base.futures = NULL;
+
+ eina_mempool_free(_promise_mp, ctx->base.promise);
+ eina_value_flush(&ctx->values);
+ err_array:
+ free(ctx);
+ err_ctx:
+ eina_iterator_free(it);
+ return NULL;
+}
+
+EINA_API Eina_Promise *
eina_promise_all_array(Eina_Future *array[])
{
All_Promise_Ctx *ctx;
@@ -1368,7 +1436,7 @@ eina_promise_all_array(Eina_Future *array[])
return NULL;
}
-EAPI Eina_Promise *
+EINA_API Eina_Promise *
eina_promise_race_array(Eina_Future *array[])
{
Race_Promise_Ctx *ctx;
@@ -1400,7 +1468,9 @@ _eina_future_cb_ignore_error(void *data, const Eina_Value value,
if (value.type == EINA_VALUE_TYPE_ERROR)
{
Eina_Error err;
- eina_value_get(&value, &err);
+
+ if (!eina_value_get(&value, &err))
+ return EINA_VALUE_EMPTY;
if ((!expected_err) || (expected_err == err))
{
DBG("ignored error %d (%s)", err, eina_error_msg_get(err));
@@ -1410,13 +1480,13 @@ _eina_future_cb_ignore_error(void *data, const Eina_Value value,
return value;
}
-EAPI Eina_Future_Desc
+EINA_API Eina_Future_Desc
eina_future_cb_ignore_error(Eina_Error err)
{
return (Eina_Future_Desc){ _eina_future_cb_ignore_error, (void*)(uintptr_t)err, NULL };
}
-EAPI void
+EINA_API void
eina_future_desc_flush(Eina_Future_Desc *desc)
{
if (!desc) return;
@@ -1424,7 +1494,7 @@ eina_future_desc_flush(Eina_Future_Desc *desc)
memset(desc, 0, sizeof(Eina_Future_Desc));
}
-EAPI void
+EINA_API void
eina_future_cb_easy_desc_flush(Eina_Future_Cb_Easy_Desc *desc)
{
if (!desc) return;
@@ -1473,7 +1543,7 @@ _future_cb_log(void *data, const Eina_Value value,
return value;
}
-EAPI Eina_Future_Desc
+EINA_API Eina_Future_Desc
eina_future_cb_log_from_desc(const Eina_Future_Cb_Log_Desc desc)
{
Eina_Future_Cb_Log_Desc *ctx = calloc(1, sizeof(Eina_Future_Cb_Log_Desc));
diff --git a/src/lib/eina/eina_promise.h b/src/lib/eina/eina_promise.h
index 9de125463e..459ca4ba6f 100644
--- a/src/lib/eina/eina_promise.h
+++ b/src/lib/eina/eina_promise.h
@@ -9,26 +9,64 @@ extern "C" {
#include "eina_types.h"
#include "eina_value.h"
-/**
+/** @file */
+
+/** @struct Eina_Promise
* @ingroup Eina_Promise
- *
- * @{
+ * An opaque structure representing a piece of data that will be available at a later point.
+ * @typedef struct _Eina_Promise Eina_Promise
+ * Convenience wrapper.
*/
-typedef struct _Eina_Future_Desc Eina_Future_Desc;
typedef struct _Eina_Promise Eina_Promise;
+
+/** @struct Eina_Future
+ * @ingroup Eina_Future
+ * An opaque structure representing a callback to be called when a promise is fulfilled.
+ * @typedef struct _Eina_Future Eina_Future
+ * Convenience wrapper.
+ */
typedef struct _Eina_Future Eina_Future;
+
+/** @typedef struct _Eina_Future_Desc Eina_Future_Desc
+ * @ingroup Eina_Future
+ * Convenience wrapper over #_Eina_Future_Desc. */
+typedef struct _Eina_Future_Desc Eina_Future_Desc;
+
+/** @typedef struct _Eina_Future_Race_Result Eina_Future_Race_Result
+ * @ingroup Eina_Future
+ * Convenience wrapper over #_Eina_Future_Race_Result. */
+typedef struct _Eina_Future_Race_Result Eina_Future_Race_Result;
+
+/**
+ * @defgroup Eina_Future_Callbacks Eina Future Callbacks
+ * @ingroup Eina_Future
+ * @brief Methods and structures dealing with #Eina_Future callbacks
+ * @{
+ */
+
+/** @typedef struct _Eina_Future_Cb_Easy_Desc Eina_Future_Cb_Easy_Desc
+ * Convenience wrapper over #_Eina_Future_Cb_Easy_Desc. */
typedef struct _Eina_Future_Cb_Easy_Desc Eina_Future_Cb_Easy_Desc;
+
+/** @typedef struct _Eina_Future_Cb_Console_Desc Eina_Future_Cb_Console_Desc
+ * Convenience wrapper over _Eina_Future_Cb_Console_Desc. */
typedef struct _Eina_Future_Cb_Console_Desc Eina_Future_Cb_Console_Desc;
+
+/** @typedef struct _Eina_Future_Scheduler Eina_Future_Scheduler
+ * Convenience wrapper over _Eina_Future_Scheduler. */
typedef struct _Eina_Future_Scheduler Eina_Future_Scheduler;
+
+/** @typedef struct _Eina_Future_Schedule_Entry Eina_Future_Schedule_Entry
+ * Convenience wrapper over _Eina_Future_Schedule_Entry. */
typedef struct _Eina_Future_Schedule_Entry Eina_Future_Schedule_Entry;
-typedef struct _Eina_Future_Race_Result Eina_Future_Race_Result;
+
+/** @typedef struct _Eina_Future_Cb_Log_Desc Eina_Future_Cb_Log_Desc
+ * Convenience wrapper over _Eina_Future_Cb_Log_Desc. */
typedef struct _Eina_Future_Cb_Log_Desc Eina_Future_Cb_Log_Desc;
/**
- * @defgroup Eina_Future_Callbacks Efl Future Callbacks
- * @ingroup eina_future
- * @typedef Eina_Future_Cb Eina_Future_Cb
- *
+ * @typedef Eina_Future_Cb
+
* A callback used to inform that a future was resolved.
* Usually this callback is called from a clean context, that is, from the
* main loop or some platform defined safe context. However there are
@@ -43,18 +81,18 @@ typedef struct _Eina_Future_Cb_Log_Desc Eina_Future_Cb_Log_Desc;
*
* @param[in] data The data provided by the user
*
- * @param[in] value An Eina_Value which contains the operation result. Before using
+ * @param[in] value An #Eina_Value which contains the operation result. Before using
* the @p value, its type must be checked in order to avoid errors. This is needed because
- * if an operation fails the Eina_Value type will be EINA_VALUE_TYPE_ERROR
+ * if an operation fails the #Eina_Value type will be #EINA_VALUE_TYPE_ERROR
* which is a different type than the expected operation result.
*
* @param[in] dead_future A pointer to the future that was completed.
*
- * @return An Eina_Value to pass to the next Eina_Future in the chain (if any).
+ * @return An #Eina_Value to pass to the next #Eina_Future in the chain (if any).
* If there is no need to convert the received value, it's @b recommended
- * to passthrough @p value argument. If you need to convert to a different type
- * or generate a new value, use @c eina_value_setup() on @b another Eina_Value
- * and return it. By returning a promise Eina_Value (eina_promise_as_value()) the
+ * to passthrough the @p value argument. If you need to convert to a different type
+ * or generate a new value, use @c eina_value_setup() on @b another #Eina_Value
+ * and return it. By returning a promise #Eina_Value (eina_promise_as_value()) the
* whole chain will wait until the promise is resolved in
* order to continue its execution.
* Note that the value contents must survive this function scope,
@@ -63,7 +101,7 @@ typedef struct _Eina_Future_Cb_Log_Desc Eina_Future_Cb_Log_Desc;
* using @c eina_value_flush() once they are unused (no more future or futures
* returned a new value).
*
- * @note The returned value @b can be an EFL_VALUE_TYPE_PROMISE! (see eina_promise_as_value() and
+ * @note The returned value @b can be an #EINA_VALUE_TYPE_PROMISE! (see eina_promise_as_value() and
* eina_future_as_value()) In this case the future chain will wait until the promise is resolved.
*
* @see eina_future_cancel()
@@ -74,13 +112,11 @@ typedef struct _Eina_Future_Cb_Log_Desc Eina_Future_Cb_Log_Desc;
* @see eina_future_chain_array()
* @see eina_future_as_value()
* @see eina_promise_as_value()
- * @{
*/
typedef Eina_Value (*Eina_Future_Cb)(void *data, const Eina_Value value, const Eina_Future *dead_future);
/**
- * @struct _Eina_Future_Scheduler
- * @ingroup eina_promise
+ * @struct _Eina_Future_Schedule_Entry
*
* A struct that represents an scheduled event.
* This struct may be used by Eina to cancel
@@ -88,8 +124,8 @@ typedef Eina_Value (*Eina_Future_Cb)(void *data, const Eina_Value value, const E
*
* @see eina_promise_new()
*
- * @see #Eina_Future_Scheduler
- * @see #Eina_Future_Scheduler_Cb
+ * @see Eina_Future_Scheduler
+ * @see Eina_Future_Scheduler_Cb
*/
struct _Eina_Future_Schedule_Entry {
/**
@@ -102,8 +138,7 @@ struct _Eina_Future_Schedule_Entry {
/**
* @typedef Eina_Future_Scheduler_Cb
- * @ingroup eina_promise
- * A callback used by the Eina_Future_Scheduler to deliver
+ * A callback used by the #Eina_Future_Scheduler to deliver
* the future operation result.
*
* @param[out] f The delivered future.
@@ -112,21 +147,20 @@ struct _Eina_Future_Schedule_Entry {
*
* @see eina_promise_new()
*
- * @see #Eina_Future_Schedule_Entry
- * @see #Eina_Future_Scheduler
+ * @see Eina_Future_Schedule_Entry
+ * @see Eina_Future_Scheduler
*/
typedef void (*Eina_Future_Scheduler_Cb)(Eina_Future *f, Eina_Value value);
/**
* @struct _Eina_Future_Scheduler
- * @ingroup eina_promise
* This struct is used as a bridge between Eina and the future scheduler.
- * By using the functions provided by #_Eina_Future_Scheduler Eina can
+ * By using the functions provided by _Eina_Future_Scheduler Eina can
* schedule futures resolutions, rejections and cancellations to a safe context.
*
* @see eina_promise_new()
- * @see #Eina_Future_Schedule_Entry
- * @see #Eina_Future_Scheduler_Cb
+ * @see Eina_Future_Schedule_Entry
+ * @see Eina_Future_Scheduler_Cb
*/
struct _Eina_Future_Scheduler {
/**
@@ -137,7 +171,7 @@ struct _Eina_Future_Scheduler {
*
* Must call back from a safe context using @p cb(f,value)
* @param[in,out] scheduler The scheduler to use.
- * @param[in] cb The #Eina_Future_Scheduler_Cb to be called and deliver the @p f and @p value.
+ * @param[in] cb The Eina_Future_Scheduler_Cb to be called and deliver the @p f and @p value.
* @param[in] f The future to be delivered to @p cb
* @param[in] value The value to be delivered to @p cb
* @return A scheduled entry or @c NULL on error
@@ -155,26 +189,25 @@ struct _Eina_Future_Scheduler {
};
/**
- * @typedef Eina_Promise_Cancel_Cb Eina_Promise_Cancel_Cb.
- * @ingroup eina_promise
+ * @typedef void (*Eina_Promise_Cancel_Cb) (void *data, const Eina_Promise *dead_promise)
*
* A callback used to inform that a promise was canceled.
*
* A promise may be canceled by the user calling `eina_future_cancel()`
- * on any Eina_Future that is part of the chain that uses an Eina_Promise,
+ * on any #Eina_Future that is part of the chain that uses an #Eina_Promise,
* that will cancel the whole chain and then the promise.
*
* It should stop all asynchronous operations or at least mark them to be
* discarded instead of resolved. Actually it can't be resolved once
* canceled since the given pointer @c dead_promise is now invalid.
*
- * @note This callback is @b mandatory for a reason, do not provide an empty
+ * @note @li This callback is @b mandatory for a reason, do not provide an empty
* callback as it'll likely result in memory corruption and invalid access.
* If impossible to cancel an asynchronous task, then create an
- * intermediate memory to hold Eina_Promise and make it @c NULL,
+ * intermediate memory to hold #Eina_Promise and make it @c NULL,
* in this callback. Then prior to resolution check if the pointer is set.
*
- * @note This callback is @b not called if eina_promise_resolve() or
+ * @note @li This callback is @b not called if eina_promise_resolve() or
* eina_promise_reject() are used. If any cleanup is needed, then
* call yourself. It's only meant as cancellation, not a general
* "free callback".
@@ -188,15 +221,14 @@ struct _Eina_Future_Scheduler {
typedef void (*Eina_Promise_Cancel_Cb) (void *data, const Eina_Promise *dead_promise);
/**
- * @typedef Eina_Future_Success_Cb Eina_Future_Success_Cb.
- * @ingroup eina_future
+ * @typedef Eina_Future_Success_Cb
*
* A callback used to inform that the future completed with success.
*
- * Unlike #Eina_Future_Cb this callback only called if the future operation was successful, this is,
- * no errors occurred (@p value type differs from EINA_VALUE_TYPE_ERROR)
- * and the @p value matches #_Eina_Future_Cb_Easy_Desc::success_type (if given).
- * In case #_Eina_Future_Cb_Easy_Desc::success_type was not supplied (it's @c NULL) the @p value type
+ * Unlike #Eina_Future_Cb this callback is only called if the future operation was successful, this is,
+ * no errors occurred (@p value type differs from #EINA_VALUE_TYPE_ERROR)
+ * and the @p value matches _Eina_Future_Cb_Easy_Desc::success_type (if given).
+ * In case _Eina_Future_Cb_Easy_Desc::success_type was not supplied (it's @c NULL) the @p value type
* must be checked before using it.
*
* @note This function is always called from a safe context (main loop or some platform defined safe context).
@@ -221,36 +253,35 @@ typedef void (*Eina_Promise_Cancel_Cb) (void *data, const Eina_Promise *dead_pro
typedef Eina_Value (*Eina_Future_Success_Cb)(void *data, const Eina_Value value);
/**
- * @typedef Eina_Future_Error_Cb Eina_Future_Error_Cb.
- * @ingroup eina_future
+ * @typedef Eina_Future_Error_Cb
*
* A callback used to inform that the future completed with failure.
*
* Unlike #Eina_Future_Success_Cb this function is only called when an error
- * occurs during the future process or when #_Eina_Future_Cb_Easy_Desc::success_type
+ * occurs during the future process or when _Eina_Future_Cb_Easy_Desc::success_type
* differs from the future result.
* On future creation errors and future cancellation this function will be called
- * from the current context with the following errors respectfully: `EINVAL`, `ENOMEM` and `ECANCELED`.
+ * from the current context with the following errors: `EINVAL`, `ENOMEM` and `ECANCELED`.
* Otherwise this function is called from a safe context.
*
* If it was possible to recover from an error this function should return an empty value
- * `return EINA_VALUE_EMPTY;` or any other Eina_Value type that differs from EINA_VALUE_TYPE_ERROR.
+ * #EINA_VALUE_EMPTY or any other #Eina_Value type that differs from #EINA_VALUE_TYPE_ERROR.
* In this case the error will not be reported by the other futures in the chain (if any), otherwise
- * if an Eina_Value type EINA_VALUE_TYPE_ERROR is returned the error will continue to be reported
+ * if an #Eina_Value type #EINA_VALUE_TYPE_ERROR is returned the error will continue to be reported
* to the other futures in the chain.
*
* @param[in] data The data provided by the user.
* @param[in] error The operation error
- * @return An Eina_Value to pass to the next Eina_Future in the chain (if any).
+ * @return An #Eina_Value to pass to the next #Eina_Future in the chain (if any).
* If you need to convert to a different type or generate a new value,
- * use @c eina_value_setup() on @b another Eina_Value
+ * use eina_value_setup() on @b another Eina_Value
* and return it. By returning a promise Eina_Value (eina_promise_as_value()) the
* whole chain will wait until the promise is resolved in
* order to continue its execution.
* Note that the value contents must survive this function scope,
* that is, do @b not use stack allocated blobs, arrays, structures or types that
* keep references to memory you give. Values will be automatically cleaned up
- * using @c eina_value_flush() once they are unused (no more future or futures
+ * using eina_value_flush() once they are unused (no more future or futures
* returned a new value).
* @see eina_future_cb_easy_from_desc()
* @see eina_future_cb_easy()
@@ -258,8 +289,7 @@ typedef Eina_Value (*Eina_Future_Success_Cb)(void *data, const Eina_Value value)
typedef Eina_Value (*Eina_Future_Error_Cb)(void *data, const Eina_Error error);
/**
- * @typedef Eina_Future_Free_Cb Eina_Future_Free_Cb.
- * @ingroup eina_future
+ * @typedef Eina_Future_Free_Cb
*
* A callback used to inform that the future was freed and the user should also @c free the @p data.
* This callback may be called from an unsafe context if the future was canceled or an error
@@ -278,7 +308,6 @@ typedef void (*Eina_Future_Free_Cb)(void *data, const Eina_Future *dead_future);
/**
* @struct _Eina_Future_Cb_Easy_Desc
- * @ingroup eina_future
*
* A struct with callbacks to be used by eina_future_cb_easy_from_desc() and eina_future_cb_easy()
*
@@ -339,7 +368,6 @@ struct _Eina_Future_Cb_Easy_Desc {
/**
* @struct _Eina_Future_Cb_Console_Desc
- * @ingroup eina_future
*
* A struct used to define the prefix and suffix to be printed
* along side the a future value. This struct is used by
@@ -360,7 +388,6 @@ struct _Eina_Future_Cb_Console_Desc {
/**
* @struct _Eina_Future_Cb_Log_Desc
- * @ingroup eina_future
*
* This struct is used by eina_future_cb_log_from_desc() and
* its contents will be routed to eina_log_print() along side
@@ -400,18 +427,22 @@ struct _Eina_Future_Cb_Log_Desc {
};
/**
+ * @}
+ */
+
+/**
* @struct _Eina_Future_Desc
- * @ingroup eina_future
+ * @ingroup Eina_Future
* A struct used to define a callback and data for a future.
*
* This struct contains a future completion callback and a data to the future
* completion callback which is used by eina_future_then(), eina_future_chain()
- * and friends to inform the user about the future result. The #_Eina_Future_Desc::data
- * variable should be freed when #_Eina_Future_Desc::cb is called, otherwise it will leak.
+ * and friends to inform the user about the future result. The _Eina_Future_Desc::data
+ * variable should be freed when _Eina_Future_Desc::cb is called, otherwise it will leak.
*
* @note If eina_future_then(), eina_future_chain() and friends fails to return a valid future
- * (in other words: @c NULL is returned) the #_Eina_Future_Desc::cb will be called
- * report an error like `EINVAL` or `ENOMEM` so #_Eina_Future_Desc::data can be freed.
+ * (in other words: @c NULL is returned) the _Eina_Future_Desc::cb will be called
+ * report an error like `EINVAL` or `ENOMEM` so _Eina_Future_Desc::data can be freed.
*
* @see eina_future_then()
* @see eina_future_chain_array()
@@ -452,36 +483,26 @@ struct _Eina_Future_Desc {
};
/**
- * @}
- */
-
-/**
- * @defgroup Eina_Promise Eina_Promise
- * Creates a new promise.
+ * @defgroup Eina_Promise Eina Promises
+ * @ingroup Eina
*
- * This function creates a new promise which can be used to create a future
- * using eina_future_new(). Every time a promise is created a #Eina_Promise_Cancel_Cb
- * must be provided which is used to free resources that were created.
+ * @brief Promises are a programming paradigm that simplifies synchronization when concurrent execution is present.
*
- * A promise may be canceled directly by calling
- * @c eina_future_cancel(eina_future_new(eina_promise_new(...)))
- * that is, canceling any future that is chained to receive the results.
+ * Since C does not natively support Promises the Eina library provides the Eina_Promise and Eina_Future objects.
*
- * However promises can be canceled indirectly by other entities.
- * These other entities will call `eina_future_cancel()` themselves,
- * however you may not be aware of that. Some common sources
- * of indirect cancellations:
+ * In procedural languages like C if you need a value which is not yet available, for instance because
+ * it takes a long time to calculate or has to be fetched from a remote server, you typically have to wait.
*
- * @li A subsystem was shutdown, canceling all pending futures (i.e.: ecore_shutdown())
+ * Other languages however can return a Promise and continue execution immediately. A promise acts as a placeholder
+ * for the requested value: the value is not available yet but will be at some point in the future.
*
- * @li An EO object was linked to the promise or future, then if the object dies (last reference
- * is gone), then the pending promises and futures will be canceled.
+ * With a promise in hand you can attach callbacks to be triggered when the value becomes available (i.e. when
+ * the promise is fulfilled) and then continue your calculations. You can even pass the promise to other methods
+ * which will then be executed as values become available, forming complex chains.
*
- * @li Some other entity (library provider or library user) chained and canceled his future,
- * which will result in your future being canceled.
- *
- * Since a promise may be canceled indirectly (by code sections that goes beyond your scope)
- * you should always provide a cancel callback, even if you think you'll not need it.
+ * An Eina_Promise can be considered as an object with the sole purpose of emitting the "Promise Resolved" event.
+ * Eina_Future are callbacks attached to this object to be called when the event is emitted. The promised value is
+ * passed to the callbacks whenever it's available.
*
* Here's a typical example:
*
@@ -521,6 +542,43 @@ struct _Eina_Future_Desc {
* }
* @endcode
*
+ * @{
+ */
+
+/**
+ * Value type for #Eina_Value's containing an #Eina_Promise
+ */
+EINA_API extern const Eina_Value_Type EINA_VALUE_TYPE_PROMISE;
+
+/**
+ * Creates a new promise.
+ *
+ * This function creates a new promise which can be used to create a future
+ * using eina_future_new(). Every time a promise is created an #Eina_Promise_Cancel_Cb
+ * must be provided which is used to free resources that were created.
+ *
+ * A promise may be canceled directly by calling:
+ * @code
+ * eina_future_cancel(eina_future_new(eina_promise_new(...)))
+ * @endcode
+ * That is, canceling any future that is chained to receive the results.
+ *
+ * However promises can be canceled indirectly by other entities.
+ * These other entities will call eina_future_cancel() themselves,
+ * however you may not be aware of that. Some common sources
+ * of indirect cancellations:
+ *
+ * @li A subsystem was shutdown, canceling all pending futures (i.e.: ecore_shutdown())
+ *
+ * @li An EO object was linked to the promise or future, then if the object dies (last reference
+ * is gone), then the pending promises and futures will be canceled.
+ *
+ * @li Some other entity (library provider or library user) chained and canceled his future,
+ * which will result in your future being canceled.
+ *
+ * Since a promise may be canceled indirectly (by code sections that goes beyond your scope)
+ * you should always provide a cancel callback, even if you think you'll not need it.
+ *
* If you already have a value and want to create a future that will
* resolve to it directly use the eina_future_resolved(), it has the
* same effect as creating a promise and immediately resolving it.
@@ -536,27 +594,28 @@ struct _Eina_Future_Desc {
* @see eina_promise_resolve()
* @see eina_promise_reject()
* @see eina_promise_as_value()
- * @see #Eina_Future_Scheduler
- * @see #Eina_Future_Scheduler_Entry
- * @see #Eina_Future_Scheduler_Cb
- * @{
+ * @see Eina_Future_Scheduler
+ * @see Eina_Future_Schedule_Entry
+ * @see Eina_Future_Scheduler_Cb
*/
-EAPI Eina_Promise *eina_promise_new(Eina_Future_Scheduler *scheduler, Eina_Promise_Cancel_Cb cancel_cb, const void *data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Promise *eina_promise_new(Eina_Future_Scheduler *scheduler, Eina_Promise_Cancel_Cb cancel_cb, const void *data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
* Creates a new promise from a dead_future.
*
* This function creates a new promise from a future currently being resolved which can be
* used to create a #Eina_Value with eina_promise_as_value(). Every time a promise is
- * created a #Eina_Promise_Cancel_Cb must be provided which is used to free resources
+ * created an #Eina_Promise_Cancel_Cb must be provided which is used to free resources
* that were created.
*
- * A promise may be canceled directly by calling
- * @c eina_future_cancel(eina_future_new(eina_promise_new(...)))
- * that is, canceling any future that is chained to receive the results.
+ * A promise may be canceled directly by calling:
+ * @code
+ * eina_future_cancel(eina_future_new(eina_promise_new(...)))
+ * @endcode
+ * That is, canceling any future that is chained to receive the results.
*
* However promises can be canceled indirectly by other entities.
- * These other entities will call `eina_future_cancel()` themselves,
+ * These other entities will call eina_future_cancel() themselves,
* however you may not be aware of that. Some common sources
* of indirect cancellations:
*
@@ -574,7 +633,6 @@ EAPI Eina_Promise *eina_promise_new(Eina_Future_Scheduler *scheduler, Eina_Promi
* Here's a typical example:
*
* @code
- *
* Eina_Value
* _future_resolve(void *data, const Eina_Value v, const Eina_Future *dead_future)
* {
@@ -589,11 +647,11 @@ EAPI Eina_Promise *eina_promise_new(Eina_Future_Scheduler *scheduler, Eina_Promi
* same effect as creating a promise and immediately resolving it.
*
* @note This function is to be used solely inside of a future resolve callback with
- * the Eina_Value being returned from it.
+ * the #Eina_Value being returned from it.
*
* @param[in] dead_future The future being resolved to get a scheduler from.
* @param[in] cancel_cb A callback used to inform that the promise was canceled. Use
- * this callback to @c free @p data. @p cancel_cb must not be @c NULL !
+ * this callback to @c free @p data. @p cancel_cb must not be @c NULL.
* @param[in] data Data to @p cancel_cb.
* @return A promise or @c NULL on error.
* @see eina_future_cancel()
@@ -602,11 +660,11 @@ EAPI Eina_Promise *eina_promise_new(Eina_Future_Scheduler *scheduler, Eina_Promi
* @see eina_promise_resolve()
* @see eina_promise_reject()
* @see eina_promise_as_value()
- * @see #Eina_Future_Scheduler
- * @see #Eina_Future_Scheduler_Entry
- * @see #Eina_Future_Scheduler_Cb
+ * @see Eina_Future_Scheduler
+ * @see Eina_Future_Schedule_Entry
+ * @see Eina_Future_Scheduler_Cb
*/
-EAPI Eina_Promise *eina_promise_continue_new(const Eina_Future *dead_future, Eina_Promise_Cancel_Cb cancel_cb, const void *data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Promise *eina_promise_continue_new(const Eina_Future *dead_future, Eina_Promise_Cancel_Cb cancel_cb, const void *data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
* Resolves a promise.
@@ -628,7 +686,7 @@ EAPI Eina_Promise *eina_promise_continue_new(const Eina_Future *dead_future, Ein
* @see eina_promise_reject()
* @see eina_promise_as_value()
*/
-EAPI void eina_promise_resolve(Eina_Promise *p, Eina_Value value) EINA_ARG_NONNULL(1);
+EINA_API void eina_promise_resolve(Eina_Promise *p, Eina_Value value) EINA_ARG_NONNULL(1);
/**
* Rejects a promise.
@@ -639,13 +697,13 @@ EAPI void eina_promise_resolve(Eina_Promise *p, Eina_Value value) EINA_ARG_NONNU
*
* @param[in,out] p A promise to reject.
* @param[in] err An Eina_Error value
- * @note Internally this function will create an Eina_Value with type #EINA_VALUE_TYPE_ERROR.
+ * @note Internally this function will create an #Eina_Value with type #EINA_VALUE_TYPE_ERROR.
*
* @see eina_promise_new()
* @see eina_promise_resolve()
* @see eina_promise_as_value()
*/
-EAPI void eina_promise_reject(Eina_Promise *p, Eina_Error err) EINA_ARG_NONNULL(1);
+EINA_API void eina_promise_reject(Eina_Promise *p, Eina_Error err) EINA_ARG_NONNULL(1);
/**
@@ -653,45 +711,49 @@ EAPI void eina_promise_reject(Eina_Promise *p, Eina_Error err) EINA_ARG_NONNULL(
*/
/**
- * @defgroup Eina_Future Eina_Future
+ * @defgroup Eina_Future Eina Futures
+ * @ingroup Eina_Promise
+ * @brief Methods and structures dealing with #Eina_Future
+ * @{
+ */
+
+/**
* Cancels a future.
*
* This function will cancel the whole future chain immediately (it will not be schedule to the next mainloop pass)
- * and it will also cancel the promise linked against it. The Eina_Future_Cb will be called
- * with an Eina_Value typed as #EINA_VALUE_TYPE_ERROR, which its value will be
- * ECANCELED
+ * and it will also cancel the promise linked against it. The #Eina_Future_Cb will be called
+ * with an #Eina_Value typed as #EINA_VALUE_TYPE_ERROR, with its value set to @c ECANCELED
* @param[in,out] f The future to cancel.
- * @{
*/
-EAPI void eina_future_cancel(Eina_Future *f) EINA_ARG_NONNULL(1);
+EINA_API void eina_future_cancel(Eina_Future *f) EINA_ARG_NONNULL(1);
/**
* Flushes an #Eina_Future_Desc
*
- * This function is mainly used by bindings to flush a #Eina_Future_Desc.
- * It will call the #Eina_Future_Cb with `ENOMEM` and zero the @p desc contents.
+ * This function is mainly used by bindings to flush an #Eina_Future_Desc.
+ * It will call the #Eina_Future_Cb with @c ENOMEM and zero the @p desc contents.
*
* @param[in,out] desc The #Eina_Future_Desc to flush, if @c NULL this is a noop.
*/
-EAPI void eina_future_desc_flush(Eina_Future_Desc *desc);
+EINA_API void eina_future_desc_flush(Eina_Future_Desc *desc);
/**
* Flushes an #Eina_Future_Cb_Easy_Desc
*
- * This function is mainly used by bindings to flush a #Eina_Future_Cb_Easy_Desc.
- * It will call the #Eina_Future_Error_Cb with `ENOMEM`, the #Eina_Future_Free_Cb and
+ * This function is mainly used by bindings to flush an #Eina_Future_Cb_Easy_Desc.
+ * It will call the #Eina_Future_Error_Cb with @c ENOMEM, the #Eina_Future_Free_Cb and
* zero the @p desc contents.
*
* @param[in,out] desc The #Eina_Future_Cb_Easy_Desc to flush, if @c NULL this is a noop.
*/
-EAPI void eina_future_cb_easy_desc_flush(Eina_Future_Cb_Easy_Desc *desc);
+EINA_API void eina_future_cb_easy_desc_flush(Eina_Future_Cb_Easy_Desc *desc);
/**
- * Creates a new Eina_Value from a promise.
+ * Creates a new #Eina_Value from a promise.
*
- * This function creates a new Eina_Value that will store a promise
+ * This function creates a new #Eina_Value that will store an #Eina_Promise
* in it. This function is useful for dealing with promises inside
- * a #Eina_Future_Cb. By returning a Promise Eina_Value the
+ * an #Eina_Future_Cb. By returning a promise inside the #Eina_Value the
* whole chain will wait until the promise is resolved in
* order to continue its execution. Example:
*
@@ -756,28 +818,28 @@ EAPI void eina_future_cb_easy_desc_flush(Eina_Future_Cb_Easy_Desc *desc);
* }
* @endcode
*
- * @param[in,out] p The promise obect to create the value from.
- * @return An Eina_Value. On error the value's type will be @c NULL.
+ * @param[in,out] p The promise object to wrap in a value.
+ * @return An #Eina_Value. On error the value's type will be @c NULL.
*
* @note If an error happens the promise will be CANCELED.
* @see eina_future_as_value()
* @see eina_promise_reject()
* @see eina_promise_resolve()
*/
-EAPI Eina_Value eina_promise_as_value(Eina_Promise *p) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Value eina_promise_as_value(Eina_Promise *p) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
- * Creates an Eina_Value from a future.
+ * Creates an #Eina_Value from a future.
*
* This function is used for the same purposes as eina_promise_as_value(),
- * but receives an Eina_Future instead.
+ * but receives an #Eina_Future instead.
*
* @param[in,out] f A future to create a Eina_Value from.
* @return An Eina_Value. On error the value's type will be @c NULL.
* @note If an error happens the future @p f will be CANCELED
* @see eina_promise_as_value()
*/
-EAPI Eina_Value eina_future_as_value(Eina_Future *f)EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Value eina_future_as_value(Eina_Future *f)EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* Creates a new future.
@@ -802,13 +864,13 @@ EAPI Eina_Value eina_future_as_value(Eina_Future *f)EINA_ARG_NONNULL(1) EINA_WAR
* @see eina_promise_resolve()
* @see eina_future_cancel()
*/
-EAPI Eina_Future *eina_future_new(Eina_Promise *p) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Future *eina_future_new(Eina_Promise *p) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* Creates a new future that is already resolved to a value.
*
* This function creates a new future with an already known value,
- * that will be resolved and dispatched by the given @a scheduler as
+ * that will be resolved and dispatched by the given @p scheduler as
* usual.
*
* This is a helper that behaves the same as eina_promise_new()
@@ -834,24 +896,24 @@ EAPI Eina_Future *eina_future_new(Eina_Promise *p) EINA_ARG_NONNULL(1) EINA_WARN
* @see eina_promise_resolve()
* @see eina_future_cancel()
*/
-EAPI Eina_Future *eina_future_resolved(Eina_Future_Scheduler *scheduler, Eina_Value value) EINA_ARG_NONNULL(1);
+EINA_API Eina_Future *eina_future_resolved(Eina_Future_Scheduler *scheduler, Eina_Value value) EINA_ARG_NONNULL(1);
/**
* Creates a new future that is already rejected to a specified error.
*
* This function creates a new future with an already known error,
- * that will be resolved and dispatched by the given @a scheduler as
+ * that will be resolved and dispatched by the given @p scheduler as
* usual.
*
* This is a helper that behaves the same as eina_promise_new()
- * followed by eina_future_new() and then eina_promise_rejected().
+ * followed by eina_future_new() and then eina_promise_reject().
*
* Futures can also be canceled using eina_future_cancel(), which will
* cause the whole chain to be canceled alongside with any pending
* promise.
*
* @param[in,out] scheduler The scheduler to use.
- * @param[in] err An Eina_Error value
+ * @param[in] err An #Eina_Error value
*
* @return The future or @c NULL on error.
*
@@ -861,20 +923,20 @@ EAPI Eina_Future *eina_future_resolved(Eina_Future_Scheduler *scheduler, Eina_Va
* @see eina_promise_resolve()
* @see eina_future_cancel()
*/
-EAPI Eina_Future *eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Error err);
+EINA_API Eina_Future *eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Error err);
/**
- * Register an Eina_Future_Desc to be used when the future is resolve/rejected.
+ * Register an #Eina_Future_Desc to be used when the future is resolved/rejected.
*
* With this function a callback and data is attached to the future and then
* once it's resolved or rejected the callback will be informed.
*
* If during the future creation an error happens this function will return @c NULL,
- * and the #Eina_Future_Desc::cb will be called reporting an error (`EINVAL` or `ENOMEM`),
- * so the user has a chance to free #Eina_Future_Desc::data.
+ * and the Eina_Future_Desc::cb will be called reporting an error (@c EINVAL or @c ENOMEM),
+ * so the user has a chance to free Eina_Future_Desc::data.
*
* In case a future in the chain is canceled, the whole chain will be canceled immediately
- * and the error `ECANCELED` will be reported.
+ * and the error @c ECANCELED will be reported.
*
* Here's a simple usage of this function.
*
@@ -915,17 +977,18 @@ EAPI Eina_Future *eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Er
* @endcode
*
* Although the code presented at `_size_ready()` is very simple, most of it
- * is just used to check the Eina_Value type. In order
+ * is just used to check the #Eina_Value type. In order
* to avoid this type of code the function eina_future_cb_easy_from_desc()
* was created. Please, check its documentation for more information.
*
* This function can also be used to create a future chain, making
* it possible to execute the future result in a cascade order. When
- * using a future chain the Eina_Value returned by a #Eina_Future_Desc::cb
- * will be delivered to the next #Eina_Future_Desc::cb in the chain.
+ * using a future chain the #Eina_Value returned by a Eina_Future_Desc::cb
+ * will be delivered to the next Eina_Future_Desc::cb in the chain.
*
* Here's an example:
*
+ * @code
* static Eina_Value
* _future_cb1(const *data EINA_UNUSED, const Eina_Value v)
* {
@@ -978,7 +1041,6 @@ EAPI Eina_Future *eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Er
* return new_v;
* }
*
- * @code
* void chain(void)
* {
* Eina_Future *f = get_file_size_async("/MyFile.txt");
@@ -992,11 +1054,11 @@ EAPI Eina_Future *eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Er
* }
* @endcode
*
- * Although it's possible to create a future chain using eina_future_then()/eina_future_then_from_desc()
+ * Although it's possible to create a future chain using eina_future_then() and eina_future_then_from_desc()
* there's a function that makes this task much easier, please check eina_future_chain_array() for more
* information.
- * @note This example does manual conversion and print, however we offer
- * eina_future_cb_convert_to() and eina_future_cb_console_from_desc() and to make those common case easier.
+ * @note This example does manual conversion and print, however Eina offers
+ * eina_future_cb_convert_to() and eina_future_cb_console_from_desc() to make those common case easier.
*
* @param[in,out] prev A future to link against
* @param[in] desc A description struct containing the callback and data.
@@ -1005,7 +1067,7 @@ EAPI Eina_Future *eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Er
* desc.cb will be called in order to free desc.data.
* @see eina_future_new()
* @see eina_future_then()
- * @see #Eina_Future_Desc
+ * @see Eina_Future_Desc
* @see eina_future_chain_array()
* @see eina_future_chain()
* @see eina_future_cb_console_from_desc()
@@ -1016,32 +1078,30 @@ EAPI Eina_Future *eina_future_rejected(Eina_Future_Scheduler *scheduler, Eina_Er
* @see eina_future_then_easy()
* @see eina_future_cb_log_from_desc()
*/
-EAPI Eina_Future *eina_future_then_from_desc(Eina_Future *prev, const Eina_Future_Desc desc) EINA_ARG_NONNULL(1);
-
+EINA_API Eina_Future *eina_future_then_from_desc(Eina_Future *prev, const Eina_Future_Desc desc) EINA_ARG_NONNULL(1);
/**
* Creates an Eina_Future_Desc that will log the previous future resolved value.
*
- * This function can be used to quickly log the value that an #Eina_Future_Desc::cb
+ * This function can be used to quickly log the value that an Eina_Future_Desc::cb
* is returning. The returned value will be passed to the next future in the chain without
* modifications.
*
* There are some helper macros like eina_future_cb_log_dbg() which will automatically
* fill the following fields:
*
- * @li #Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
- * @li #Eina_Future_Cb_Log_Desc::func: The __FUNCTION__ macro will be used.
- * @li #Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_DBG will be used.
- * @li #Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
- * @li #Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
- *
+ * @li Eina_Future_Cb_Log_Desc::file: The `__FILE__` function will be used.
+ * @li Eina_Future_Cb_Log_Desc::func: The `__func__` macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::level: `EINA_LOG_LEVEL_DBG` will be used.
+ * @li Eina_Future_Cb_Log_Desc::domain: `EINA_LOG_DOMAIN_DEFAULT` will be used.
+ * @li Eina_Future_Cb_Log_Desc::line: The `__LINE__` macro will be used.
*
* @param[in] desc The description data to be used.
* @return An #Eina_Future_Desc
*
- * @see #Eina_Future_Cb_Log_Desc
- * @see efl_future_then()
- * @see efl_future_chain()
+ * @see Eina_Future_Cb_Log_Desc
+ * @see eina_future_then()
+ * @see eina_future_chain()
* @see eina_future_cb_log_dbg()
* @see eina_future_cb_log_crit()
* @see eina_future_cb_log_err()
@@ -1049,7 +1109,7 @@ EAPI Eina_Future *eina_future_then_from_desc(Eina_Future *prev, const Eina_Futur
* @see eina_future_cb_log_warn()
* @see eina_future_cb_console_from_desc()
*/
-EAPI Eina_Future_Desc eina_future_cb_log_from_desc(const Eina_Future_Cb_Log_Desc desc) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Future_Desc eina_future_cb_log_from_desc(const Eina_Future_Cb_Log_Desc desc) EINA_WARN_UNUSED_RESULT;
/**
* Creates a future chain.
@@ -1057,11 +1117,11 @@ EAPI Eina_Future_Desc eina_future_cb_log_from_desc(const Eina_Future_Cb_Log_Desc
* This behaves exactly like eina_future_then_from_desc(), but makes it easier to create future chains.
*
* If during the future chain creation an error happens this function will return @c NULL,
- * and the #Eina_Future_Desc::cb from the @p descs array will be called reporting an error (`EINVAL` or `ENOMEM`),
- * so the user has a chance to free #Eina_Future_Desc::data.
+ * and the Eina_Future_Desc::cb from the @p descs array will be called reporting an error (`EINVAL` or `ENOMEM`),
+ * so the user has a chance to free Eina_Future_Desc::data.
*
- * Just like eina_future_then_from_desc(), the value returned by a #Eina_Future_Desc::cb callback will
- * be delivered to the next #Eina_Future_Desc::cb in the chain.
+ * Just like eina_future_then_from_desc(), the value returned by a Eina_Future_Desc::cb callback will
+ * be delivered to the next Eina_Future_Desc::cb in the chain.
*
* In case a future in the chain is canceled, the whole chain will be canceled immediately
* and the error `ECANCELED` will be reported.
@@ -1069,7 +1129,6 @@ EAPI Eina_Future_Desc eina_future_cb_log_from_desc(const Eina_Future_Cb_Log_Desc
* Here's an example:
*
* @code
- *
* // callbacks code....
*
* Eina_Future* chain(void)
@@ -1083,13 +1142,14 @@ EAPI Eina_Future_Desc eina_future_cb_log_from_desc(const Eina_Future_Cb_Log_Desc
* @endcode
*
* @param[in,out] prev The previous future
- * @param[in] descs An array of descriptions. The last element of the array must have the #Eina_Future_Desc::cb set to @c NULL
+ * @param[in] descs An array of descriptions.
+ The last element of the array must have the Eina_Future_Desc::cb set to @c NULL
* @return A future or @c NULL on error.
* @note If an error happens the whole future chain will CANCELED and
* desc.cb will be called in order to free desc.data.
* @see eina_future_new()
* @see eina_future_then()
- * @see #Eina_Future_Desc
+ * @see Eina_Future_Desc
* @see eina_future_chain()
* @see eina_future_cb_ignore_error()
* @see eina_future_cb_console_from_desc()
@@ -1100,7 +1160,7 @@ EAPI Eina_Future_Desc eina_future_cb_log_from_desc(const Eina_Future_Cb_Log_Desc
* @see eina_future_then_easy()
* @see eina_future_cb_convert_to()
*/
-EAPI Eina_Future *eina_future_chain_array(Eina_Future *prev, const Eina_Future_Desc descs[]) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Future *eina_future_chain_array(Eina_Future *prev, const Eina_Future_Desc descs[]) EINA_ARG_NONNULL(1, 2);
/**
@@ -1111,7 +1171,7 @@ EAPI Eina_Future *eina_future_chain_array(Eina_Future *prev, const Eina_Future_D
*
*
* @param[in,out] prev The previous future
- * @param[in] descs An array of descriptions. The last element of the array must have the #Eina_Future_Desc::cb set to @c NULL
+ * @param[in] descs An array of descriptions. The last element of the array must have the Eina_Future_Desc::cb set to @c NULL
* @return A future or @c NULL on error.
* @note If an error happens the whole future chain will CANCELED and
* desc.cb will be called in order to free desc.data.
@@ -1121,12 +1181,12 @@ EAPI Eina_Future *eina_future_chain_array(Eina_Future *prev, const Eina_Future_D
* @see eina_future_chain_array()
* @see eina_future_cb_easy_from_desc()
*/
-EAPI Eina_Future *eina_future_chain_easy_array(Eina_Future *prev, const Eina_Future_Cb_Easy_Desc descs[]) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Future *eina_future_chain_easy_array(Eina_Future *prev, const Eina_Future_Cb_Easy_Desc descs[]) EINA_ARG_NONNULL(1, 2);
/**
- * Creates an Eina_Future_Desc that will print the previous future resolved value.
+ * Creates an #Eina_Future_Desc that will print the previous future's resolved value.
*
- * This function can be used to quickly inspect the value that an #Eina_Future_Desc::cb
+ * This function can be used to quickly inspect the value that an Eina_Future_Desc::cb
* is returning. The returned value will be passed to the next future in the chain without
* modifications.
*
@@ -1149,12 +1209,12 @@ EAPI Eina_Future *eina_future_chain_easy_array(Eina_Future *prev, const Eina_Fut
* @return An #Eina_Future_Desc
*
* The description object, @p desc, can (optionally) include a prefix, suffix,
- * filename and function name. If these are @c NULL, empty strings ("") are used
- * instead. If @p desc->suffix is provided, the '\n' should be provided to ensure
+ * filename and function name. If these are @c NULL, empty strings ("") are used
+ * instead. If @p desc->suffix is provided, the '\\n' should be provided to ensure
* the printed string ends with a line feed.
*
* @see eina_future_then()
- * @see #Eina_Future_Desc
+ * @see Eina_Future_Desc
* @see eina_future_chain()
* @see eina_future_cb_easy_from_desc()
* @see eina_future_cb_easy()
@@ -1164,57 +1224,57 @@ EAPI Eina_Future *eina_future_chain_easy_array(Eina_Future *prev, const Eina_Fut
* @see eina_future_cb_ignore_error()
* @see eina_future_cb_log_from_desc()
*/
-EAPI Eina_Future_Desc eina_future_cb_console_from_desc(const Eina_Future_Cb_Console_Desc desc) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Future_Desc eina_future_cb_console_from_desc(const Eina_Future_Cb_Console_Desc desc) EINA_WARN_UNUSED_RESULT;
/**
- * Returns a #Eina_Future_Desc that ignores an error.
+ * Returns an #Eina_Future_Desc that ignores an error.
*
* This function may be used if one wants to ignore an error. If the
- * specified error happens an EINA_VALUE_EMPTY will be delivered to the
+ * specified error happens an #EINA_VALUE_EMPTY will be delivered to the
* next future in the chain.
*
* @param[in] err The error to be ignored.
* @return A future descriptor to be used with eina_future_then() or eina_future_chain()
*/
-EAPI Eina_Future_Desc eina_future_cb_ignore_error(Eina_Error err);
+EINA_API Eina_Future_Desc eina_future_cb_ignore_error(Eina_Error err);
/**
- * Creates an #Eina_Future_Desc which will convert the the received eina value to a given type.
+ * Creates an #Eina_Future_Desc which will convert the received eina value to a given type.
*
- * @param[in] type The Eina_Value_Type to convert to.
+ * @param[in] type The #Eina_Value_Type to convert to.
* @return An #Eina_Future_Desc
* @see eina_future_then()
- * @see #Eina_Future_Desc
+ * @see Eina_Future_Desc
* @see eina_future_chain()
* @see eina_future_cb_easy_from_desc()
* @see eina_future_cb_easy()
* @see eina_future_then_from_desc()
* @see eina_future_then_easy()
*/
-EAPI Eina_Future_Desc eina_future_cb_convert_to(const Eina_Value_Type *type);
+EINA_API Eina_Future_Desc eina_future_cb_convert_to(const Eina_Value_Type *type);
/**
- * Creates an #Eina_Future_Desc based on a #Eina_Future_Cb_Easy_Desc
+ * Creates an #Eina_Future_Desc based on an #Eina_Future_Cb_Easy_Desc.
*
* This function aims to be used in conjunction with eina_future_chain(),
* eina_future_then_from_desc() and friends and its main objective is to simplify
- * error handling and Eina_Value type checks.
+ * error handling and #Eina_Value type checks.
* It uses three callbacks to inform the user about the future's
* result and life cycle. They are:
*
- * @li #Eina_Future_Cb_Easy_Desc::success: This callback is called when
+ * @li Eina_Future_Cb_Easy_Desc::success: This callback is called when
* the future execution was successful, that is, no errors occurred and
- * the result type matches #Eina_Future_Cb_Easy_Desc::success_type. In case
- * #Eina_Future_Cb_Easy_Desc::success_type is @c NULL, this function will
+ * the result type matches Eina_Future_Cb_Easy_Desc::success_type. In case
+ * Eina_Future_Cb_Easy_Desc::success_type is @c NULL, this function will
* only be called if the future did not report an error. The value returned
* by this function will be propagated to the next future in the chain (if any).
*
- * @li #Eina_Future_Cb_Easy_Desc::error: This callback is called when
- * the future result is an error or #Eina_Future_Cb_Easy_Desc::success_type
+ * @li Eina_Future_Cb_Easy_Desc::error: This callback is called when
+ * the future result is an error or Eina_Future_Cb_Easy_Desc::success_type
* does not match the future result type. The value returned
* by this function will be propagated to the next future in the chain (if any).
*
- * @li #Eina_Future_Cb_Easy_Desc::free: Called after the future was freed and any resources
+ * @li Eina_Future_Cb_Easy_Desc::free: Called after the future was freed and any resources
* allocated must be freed at this point. This callback is always called.
*
* Check the example below for a sample usage:
@@ -1249,7 +1309,6 @@ EAPI Eina_Future_Desc eina_future_cb_convert_to(const Eina_Value_Type *type);
* free(ctx);
* }
*
- * @code
* void do_work(File_Size_Handler_Cb cb)
* {
* Ctx *ctx = malloc(sizeof(Ctx));
@@ -1267,19 +1326,18 @@ EAPI Eina_Future_Desc eina_future_cb_convert_to(const Eina_Value_Type *type);
* @see eina_future_then()
* @see eina_future_cb_easy()
*/
-EAPI Eina_Future_Desc eina_future_cb_easy_from_desc(const Eina_Future_Cb_Easy_Desc desc) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Future_Desc eina_future_cb_easy_from_desc(const Eina_Future_Cb_Easy_Desc desc) EINA_WARN_UNUSED_RESULT;
/**
* Creates an all promise.
*
* Creates a promise that is resolved once all the futures
* from the @p array are resolved.
- * The promise is resolved with an Eina_Value type array which
- * contains EINA_VALUE_TYPE_VALUE elements. The result array is
+ * The promise is resolved with an #Eina_Value type array which
+ * contains #EINA_VALUE_TYPE_VALUE elements. The result array is
* ordered according to the @p array argument. Example:
*
* @code
- *
* static const char *
* _get_operation_name_by_index(int idx)
* {
@@ -1364,12 +1422,28 @@ EAPI Eina_Future_Desc eina_future_cb_easy_from_desc(const Eina_Future_Cb_Easy_De
* }
* @endcode
*
- * @param[in,out] array An array of futures, @c #EINA_FUTURE_SENTINEL terminated.
+ * @param[in,out] array An array of futures, terminated with #EINA_FUTURE_SENTINEL.
* @return A promise or @c NULL on error.
* @note On error all the futures will be CANCELED.
* @see eina_future_all_array()
*/
-EAPI Eina_Promise *eina_promise_all_array(Eina_Future *array[]) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Promise *eina_promise_all_array(Eina_Future *array[]) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+
+/**
+ * Creates an all promise from an iterator.
+ *
+ * Creates a promise that is resolved once all the futures
+ * from the @p iterator are resolved.
+ * The promise is resolved with an #Eina_Value type array which
+ * contains #EINA_VALUE_TYPE_VALUE elements. The result array is
+ * ordered according to the @p iterator order.
+ *
+ * @param[in] iterator An iterator of futures. Will be destroyed after the call.
+ * @return A promise or @c NULL on error.
+ * @note On error all the futures will be CANCELED.
+ * @see eina_future_all_iterator()
+ */
+EINA_API Eina_Promise *eina_promise_all_iterator(Eina_Iterator *iterator) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* Creates a race promise.
@@ -1378,16 +1452,15 @@ EAPI Eina_Promise *eina_promise_all_array(Eina_Future *array[]) EINA_ARG_NONNULL
* is completed. The remaining futures will be canceled with the
* error code `ECANCELED`
*
- * The resulting value is an EINA_VALUE_TYPE_STRUCT with two fields:
+ * The resulting value is an #EINA_VALUE_TYPE_STRUCT with two fields:
*
- * @li A field named "value" which contains an Eina_Value with the result itself.
- * @li A field named "index" which is an int that contains the index of the completed
- * function relative to the @p array;
+ * @li A field named @c value containing an #Eina_Value with the result itself.
+ * @li A field named @c index containing the index of the completed
+ * function relative to the @p array.
*
- * Example.
+ * Example:
*
* @code
- *
* static const char *
* _get_operation_name_by_index(int idx)
* {
@@ -1476,13 +1549,13 @@ EAPI Eina_Promise *eina_promise_all_array(Eina_Future *array[]) EINA_ARG_NONNULL
* }
* @endcode
*
- * @param[in,out] array An array of futures, @c #EINA_FUTURE_SENTINEL terminated.
+ * @param[in,out] array An array of futures, terminated by #EINA_FUTURE_SENTINEL.
* @return A promise or @c NULL on error.
* @note On error all the futures will be CANCELED.
* @see eina_future_race_array()
- * @see #_Eina_Future_Race_Result
+ * @see _Eina_Future_Race_Result
*/
-EAPI Eina_Promise *eina_promise_race_array(Eina_Future *array[]) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Promise *eina_promise_race_array(Eina_Future *array[]) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @struct _Eina_Future_Race_Result
@@ -1512,7 +1585,7 @@ EAPI Eina_Promise *eina_promise_race_array(Eina_Future *array[]) EINA_ARG_NONNUL
* @see eina_future_race_array()
* @see eina_promise_race()
* @see eina_future_race()
- * @see #EINA_PROMISE_RACE_STRUCT_DESC
+ * @see EINA_PROMISE_RACE_STRUCT_DESC
*/
struct _Eina_Future_Race_Result {
/**
@@ -1526,28 +1599,28 @@ struct _Eina_Future_Race_Result {
};
/**
- * @var EINA_PROMISE_RACE_STRUCT_DESC
+ * @var const Eina_Value_Struct_Desc *EINA_PROMISE_RACE_STRUCT_DESC
*
* A pointer to the race struct description, which
- * is used by eina_promise_race_array();
+ * is used by eina_promise_race_array().
*
* This struct contains two members:
- * @li value An EINA_VALUE_TYPE_VALUE that contains the future result that wont the race.
- * @li index An EINA_VALUE_TYPE_UINT that contains the future index that won the race.
+ * @li @c value: An #EINA_VALUE_TYPE_VALUE that contains the future result that won the race.
+ * @li @c index: An #EINA_VALUE_TYPE_UINT that contains the future index that won the race.
*
* @see eina_promise_race_array()
- * @see #_Eina_Future_Race_Result
+ * @see _Eina_Future_Race_Result
*/
-EAPI extern const Eina_Value_Struct_Desc *EINA_PROMISE_RACE_STRUCT_DESC;
+EINA_API extern const Eina_Value_Struct_Desc *EINA_PROMISE_RACE_STRUCT_DESC;
/**
* Creates a future that will be resolved once all futures from @p array is resolved.
* This is a helper over eina_promise_all_array()
*
- * @param[in,out] array A future array, must be terminated with #EINA_FUTURE_SENTINEL
+ * @param[in,out] array A future array, must be terminated with #EINA_FUTURE_SENTINEL.
* @return A future.
* @see eina_promise_all_array()
- * @see #EINA_FUTURE_SENTINEL
+ * @see EINA_FUTURE_SENTINEL
*/
static inline Eina_Future *
eina_future_all_array(Eina_Future *array[])
@@ -1558,13 +1631,29 @@ eina_future_all_array(Eina_Future *array[])
}
/**
+ * Creates a future that will be resolved once all futures from @p iterator are resolved.
+ * This is a helper over eina_promise_all_iterator()
+ *
+ * @param[in] iterator An iterator containing futures. Will be destroyed on exit of the function.
+ * @return A future.
+ * @see eina_promise_all_iterator()
+ */
+static inline Eina_Future *
+eina_future_all_iterator(Eina_Iterator *iterator)
+{
+ Eina_Promise *p = eina_promise_all_iterator(iterator);
+ if (!p) return NULL;
+ return eina_future_new(p);
+}
+
+/**
* Creates a future that will be resolved once a future @p array is resolved.
* This is a helper over eina_promise_race_array()
*
* @param[in,out] array A future array, must be terminated with #EINA_FUTURE_SENTINEL
* @return A future.
* @see eina_promise_race_array()
- * @see #EINA_FUTURE_SENTINEL
+ * @see EINA_FUTURE_SENTINEL
*/
static inline Eina_Future *
eina_future_race_array(Eina_Future *array[])
@@ -1662,11 +1751,11 @@ eina_future_race_array(Eina_Future *array[])
*
* This macro will set the following fields of the #Eina_Future_Cb_Log_Desc:
*
- * @li #Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
- * @li #Eina_Future_Cb_Log_Desc::func: The __FUNCTION__ macro will be used.
- * @li #Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_DBG will be used.
- * @li #Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
- * @li #Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::file: The `__FILE__` function will be used.
+ * @li Eina_Future_Cb_Log_Desc::func: The `__func__` macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::level: `EINA_LOG_LEVEL_DBG` will be used.
+ * @li Eina_Future_Cb_Log_Desc::domain: `EINA_LOG_DOMAIN_DEFAULT` will be used.
+ * @li Eina_Future_Cb_Log_Desc::line: The `__LINE__` macro will be used.
*
* Usage:
* @code
@@ -1676,18 +1765,18 @@ eina_future_race_array(Eina_Future *array[])
*/
#define eina_future_cb_log_dbg(_prefix, _suffix) \
eina_future_cb_log_from_desc((Eina_Future_Cb_Log_Desc){_prefix, _suffix, __FILE__, \
- __FUNCTION__, EINA_LOG_LEVEL_DBG, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
+ __func__, EINA_LOG_LEVEL_DBG, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
/**
* A syntactic sugar over eina_future_cb_log_from_desc().
*
- * This macro will set the following fields of the #Eina_Future_Cb_Log_Desc:
+ * This macro will set the following fields of the Eina_Future_Cb_Log_Desc:
*
- * @li #Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
- * @li #Eina_Future_Cb_Log_Desc::func: The __FUNCTION__ macro will be used.
- * @li #Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_CRITICAL will be used.
- * @li #Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
- * @li #Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
+ * @li Eina_Future_Cb_Log_Desc::func: The __func__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_CRITICAL will be used.
+ * @li Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
+ * @li Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
*
* Usage:
* @code
@@ -1697,18 +1786,18 @@ eina_future_race_array(Eina_Future *array[])
*/
#define eina_future_cb_log_crit(_prefix, _suffix) \
eina_future_cb_log_from_desc((Eina_Future_Cb_Log_Desc){_prefix, _suffix, __FILE__, \
- __FUNCTION__, EINA_LOG_LEVEL_CRITICAL, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
+ __func__, EINA_LOG_LEVEL_CRITICAL, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
/**
* A syntactic sugar over eina_future_cb_log_from_desc().
*
- * This macro will set the following fields of the #Eina_Future_Cb_Log_Desc:
+ * This macro will set the following fields of the Eina_Future_Cb_Log_Desc:
*
- * @li #Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
- * @li #Eina_Future_Cb_Log_Desc::func: The __FUNCTION__ macro will be used.
- * @li #Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_ERR will be used.
- * @li #Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
- * @li #Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
+ * @li Eina_Future_Cb_Log_Desc::func: The __func__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_ERR will be used.
+ * @li Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
+ * @li Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
*
* Usage:
* @code
@@ -1718,18 +1807,18 @@ eina_future_race_array(Eina_Future *array[])
*/
#define eina_future_cb_log_err(_prefix, _suffix) \
eina_future_cb_log_from_desc((Eina_Future_Cb_Log_Desc){_prefix, _suffix, __FILE__, \
- __FUNCTION__, EINA_LOG_LEVEL_ERR, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
+ __func__, EINA_LOG_LEVEL_ERR, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
/**
* A syntactic sugar over eina_future_cb_log_from_desc().
*
- * This macro will set the following fields of the #Eina_Future_Cb_Log_Desc:
+ * This macro will set the following fields of the Eina_Future_Cb_Log_Desc:
*
- * @li #Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
- * @li #Eina_Future_Cb_Log_Desc::func: The __FUNCTION__ macro will be used.
- * @li #Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_INFO will be used.
- * @li #Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
- * @li #Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
+ * @li Eina_Future_Cb_Log_Desc::func: The __func__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_INFO will be used.
+ * @li Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
+ * @li Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
*
* Usage:
* @code
@@ -1739,28 +1828,31 @@ eina_future_race_array(Eina_Future *array[])
*/
#define eina_future_cb_log_info(_prefix, _suffix) \
eina_future_cb_log_from_desc((Eina_Future_Cb_Log_Desc){_prefix, _suffix, __FILE__, \
- __FUNCTION__, EINA_LOG_LEVEL_INFO, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
+ __func__, EINA_LOG_LEVEL_INFO, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
/**
* A syntactic sugar over eina_future_cb_log_from_desc().
*
- * This macro will set the following fields of the #Eina_Future_Cb_Log_Desc:
+ * This macro will set the following fields of the Eina_Future_Cb_Log_Desc:
*
- * @li #Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
- * @li #Eina_Future_Cb_Log_Desc::func: The __FUNCTION__ macro will be used.
- * @li #Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_WARN will be used.
- * @li #Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
- * @li #Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::file: The __FILE__ function will be used.
+ * @li Eina_Future_Cb_Log_Desc::func: The __func__ macro will be used.
+ * @li Eina_Future_Cb_Log_Desc::level: EINA_LOG_LEVEL_WARN will be used.
+ * @li Eina_Future_Cb_Log_Desc::domain: EINA_LOG_DOMAIN_DEFAULT will be used.
+ * @li Eina_Future_Cb_Log_Desc::line: The __LINE__ macro will be used.
*
* Usage:
* @code
* desc = eina_future_cb_log_warn(.prefix = "prefix", .suffix = "suffix");
* @endcode
+ * @param _prefix PREFIX
+ * @param _suffix SUFFIX
+ * @returns SOMETHING
* @see eina_future_cb_log_from_desc()
*/
#define eina_future_cb_log_warn(_prefix, _suffix) \
eina_future_cb_log_from_desc((Eina_Future_Cb_Log_Desc){_prefix, _suffix, __FILE__, \
- __FUNCTION__, EINA_LOG_LEVEL_WARN, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
+ __func__, EINA_LOG_LEVEL_WARN, EINA_LOG_DOMAIN_DEFAULT, __LINE__})
/**
* A syntactic sugar over eina_future_then() and eina_future_cb_easy().
diff --git a/src/lib/eina/eina_quad.c b/src/lib/eina/eina_quad.c
index 3d5aa54b11..e5ba84436c 100644
--- a/src/lib/eina/eina_quad.c
+++ b/src/lib/eina/eina_quad.c
@@ -53,7 +53,7 @@ static inline void _quad_dump(Eina_Quad *q)
/*============================================================================*
* API *
*============================================================================*/
-EAPI void
+EINA_API void
eina_quad_rectangle_to(const Eina_Quad *q,
Eina_Rectangle *r)
{
@@ -82,7 +82,7 @@ eina_quad_rectangle_to(const Eina_Quad *q,
r->h = lround(ymax) - r->y;
}
-EAPI void
+EINA_API void
eina_quad_rectangle_from(Eina_Quad *q,
const Eina_Rectangle *r)
{
@@ -96,7 +96,7 @@ eina_quad_rectangle_from(Eina_Quad *q,
QUAD_Y3(q) = r->y + r->h;
}
-EAPI void eina_quad_coords_get(const Eina_Quad *q,
+EINA_API void eina_quad_coords_get(const Eina_Quad *q,
double *qx0, double *qy0,
double *qx1, double *qy1,
double *qx2, double *qy2,
@@ -112,7 +112,7 @@ EAPI void eina_quad_coords_get(const Eina_Quad *q,
if (qy3) *qy3 = q->y3;
}
-EAPI void eina_quad_coords_set(Eina_Quad *q,
+EINA_API void eina_quad_coords_set(Eina_Quad *q,
double qx0, double qy0,
double qx1, double qy1,
double qx2, double qy2,
diff --git a/src/lib/eina/eina_quad.h b/src/lib/eina/eina_quad.h
index c4cdc9fc90..27a4f9a75f 100644
--- a/src/lib/eina/eina_quad.h
+++ b/src/lib/eina/eina_quad.h
@@ -22,7 +22,6 @@
/**
* @file
- * @ender_group{Eina_Quad}
*/
/**
@@ -62,7 +61,7 @@ typedef struct _Eina_Quad
*
* @since 1.14
* */
-EAPI void eina_quad_rectangle_to(const Eina_Quad *q,
+EINA_API void eina_quad_rectangle_to(const Eina_Quad *q,
Eina_Rectangle *r);
/**
* @brief Transform the given rectangle to the given quadrangle.
@@ -72,7 +71,7 @@ EAPI void eina_quad_rectangle_to(const Eina_Quad *q,
*
* @since 1.14
* */
-EAPI void eina_quad_rectangle_from(Eina_Quad *q,
+EINA_API void eina_quad_rectangle_from(Eina_Quad *q,
const Eina_Rectangle *r);
/**
* @brief Sets the values of the coordinates of the given quadrangle.
@@ -89,7 +88,7 @@ EAPI void eina_quad_rectangle_from(Eina_Quad *q,
*
* @since 1.14
* */
-EAPI void eina_quad_coords_set(Eina_Quad *q,
+EINA_API void eina_quad_coords_set(Eina_Quad *q,
double x0, double y0,
double x1, double y1,
double x2, double y2,
@@ -110,7 +109,7 @@ EAPI void eina_quad_coords_set(Eina_Quad *q,
*
* @since 1.14
* */
-EAPI void eina_quad_coords_get(const Eina_Quad *q,
+EINA_API void eina_quad_coords_get(const Eina_Quad *q,
double *x0, double *y0,
double *x1, double *y1,
double *x2, double *y2,
diff --git a/src/lib/eina/eina_quadtree.c b/src/lib/eina/eina_quadtree.c
index 83778ef8a2..32553d1b49 100644
--- a/src/lib/eina/eina_quadtree.c
+++ b/src/lib/eina/eina_quadtree.c
@@ -584,7 +584,7 @@ end:
object->root = NULL;
}
-EAPI Eina_QuadTree *
+EINA_API Eina_QuadTree *
eina_quadtree_new(size_t w, size_t h,
Eina_Quad_Callback vertical, Eina_Quad_Callback horizontal)
{
@@ -612,7 +612,7 @@ eina_quadtree_new(size_t w, size_t h,
return result;
}
-EAPI void
+EINA_API void
eina_quadtree_free(Eina_QuadTree *q)
{
Eina_QuadTree_Item *item;
@@ -653,7 +653,7 @@ eina_quadtree_free(Eina_QuadTree *q)
free(q);
}
-EAPI Eina_QuadTree_Item *
+EINA_API Eina_QuadTree_Item *
eina_quadtree_add(Eina_QuadTree *q, const void *object)
{
Eina_QuadTree_Item *result;
@@ -691,7 +691,7 @@ eina_quadtree_add(Eina_QuadTree *q, const void *object)
return result;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_quadtree_del(Eina_QuadTree_Item *object)
{
if (!object)
@@ -728,7 +728,7 @@ eina_quadtree_del(Eina_QuadTree_Item *object)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_quadtree_change(Eina_QuadTree_Item *object)
{
EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
@@ -751,7 +751,7 @@ eina_quadtree_change(Eina_QuadTree_Item *object)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_quadtree_hide(Eina_QuadTree_Item *object)
{
EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
@@ -761,7 +761,7 @@ eina_quadtree_hide(Eina_QuadTree_Item *object)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_quadtree_show(Eina_QuadTree_Item *object)
{
EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
@@ -778,7 +778,7 @@ eina_quadtree_show(Eina_QuadTree_Item *object)
return EINA_TRUE;
}
-EAPI Eina_Inlist *
+EINA_API Eina_Inlist *
eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h)
{
Eina_Rectangle canvas;
@@ -826,7 +826,7 @@ eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h)
return q->cached;
}
-EAPI void *
+EINA_API void *
eina_quadtree_object(Eina_Inlist *item)
{
Eina_QuadTree_Item *qi;
@@ -846,7 +846,7 @@ eina_quadtree_object(Eina_Inlist *item)
return (void *)qi->object;
}
-EAPI void
+EINA_API void
eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h)
{
EINA_MAGIC_CHECK_QUADTREE(q);
@@ -860,7 +860,7 @@ eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h)
q->geom.h = h;
}
-EAPI void
+EINA_API void
eina_quadtree_cycle(Eina_QuadTree *q)
{
EINA_MAGIC_CHECK_QUADTREE(q);
@@ -868,7 +868,7 @@ eina_quadtree_cycle(Eina_QuadTree *q)
q->index = 0;
}
-EAPI void
+EINA_API void
eina_quadtree_increase(Eina_QuadTree_Item *object)
{
size_t tmp;
diff --git a/src/lib/eina/eina_quadtree.h b/src/lib/eina/eina_quadtree.h
index ad23bc3343..57e01ba59f 100644
--- a/src/lib/eina/eina_quadtree.h
+++ b/src/lib/eina/eina_quadtree.h
@@ -30,6 +30,14 @@
*/
/**
+ * @defgroup Eina_Quadtree_Group Quadtrees
+ *
+ * @brief Quadtree operations.
+ *
+ * @{
+ */
+
+/**
* @typedef Eina_QuadTree
*
* A quadtree is a data structure where each node contains four child
@@ -78,7 +86,7 @@ typedef Eina_Quad_Direction (*Eina_Quad_Callback)(const void *object, size_t mid
* The vertical and horizontal callbacks are used to assist in
* determining which quadrant a given data item belongs to.
*/
-EAPI Eina_QuadTree *eina_quadtree_new(size_t w, size_t h, Eina_Quad_Callback vertical, Eina_Quad_Callback horizontal);
+EINA_API Eina_QuadTree *eina_quadtree_new(size_t w, size_t h, Eina_Quad_Callback vertical, Eina_Quad_Callback horizontal);
/**
* @brief Destructs quadtree and its data.
@@ -88,7 +96,7 @@ EAPI Eina_QuadTree *eina_quadtree_new(size_t w, size_t h, Eina_Quad_Callback ver
* Frees the memory for the Eina_QuadTree object, and any memory used by
* its change tracking and garbage collection internals.
*/
-EAPI void eina_quadtree_free(Eina_QuadTree *q);
+EINA_API void eina_quadtree_free(Eina_QuadTree *q);
/**
* @brief Changes the width and height of the quadtree.
@@ -100,14 +108,14 @@ EAPI void eina_quadtree_free(Eina_QuadTree *q);
* Sets the width and height of the quadtree, but the actual update is
* done lazily.
*/
-EAPI void eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h);
+EINA_API void eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h);
/**
* @brief Sets the quadtree's index to 0.
*
* @param[in,out] q The quadtree to cycle.
*/
-EAPI void eina_quadtree_cycle(Eina_QuadTree *q);
+EINA_API void eina_quadtree_cycle(Eina_QuadTree *q);
/**
* @brief Increases the index of the quadtree item by one.
@@ -116,7 +124,7 @@ EAPI void eina_quadtree_cycle(Eina_QuadTree *q);
*
* If necessary, records that the root is no longer sorted.
*/
-EAPI void eina_quadtree_increase(Eina_QuadTree_Item *object);
+EINA_API void eina_quadtree_increase(Eina_QuadTree_Item *object);
/**
* @brief Inserts a data object into the quadtree.
@@ -130,7 +138,7 @@ EAPI void eina_quadtree_increase(Eina_QuadTree_Item *object);
* insert the item into the quadtree (i.e. insertion is delayed until
* it needs to be used.)
*/
-EAPI Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree *q, const void *object);
+EINA_API Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree *q, const void *object);
/**
* @brief Deletes a given quadtree item from the quadtree.
@@ -141,7 +149,7 @@ EAPI Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree *q, const void *object)
* Moves the item to the quadtree's internal garbage heap for later
* reclamation.
*/
-EAPI Eina_Bool eina_quadtree_del(Eina_QuadTree_Item *object);
+EINA_API Eina_Bool eina_quadtree_del(Eina_QuadTree_Item *object);
/**
* @brief Marks an object within the quadtree as needing changed.
@@ -149,7 +157,7 @@ EAPI Eina_Bool eina_quadtree_del(Eina_QuadTree_Item *object);
* @param[in,out] object The object that has changed.
* @return #EINA_TRUE if change successfully noted, or #EINA_FALSE otherwise.
*/
-EAPI Eina_Bool eina_quadtree_change(Eina_QuadTree_Item *object);
+EINA_API Eina_Bool eina_quadtree_change(Eina_QuadTree_Item *object);
/**
* @brief Sets @p object invisible.
@@ -158,7 +166,7 @@ EAPI Eina_Bool eina_quadtree_change(Eina_QuadTree_Item *object);
* @return #EINA_TRUE if @p object was successfully hidden, or
* #EINA_FALSE if it wasn't in the quadtree.
*/
-EAPI Eina_Bool eina_quadtree_hide(Eina_QuadTree_Item *object);
+EINA_API Eina_Bool eina_quadtree_hide(Eina_QuadTree_Item *object);
/**
* @brief Sets @p object to visible.
@@ -167,7 +175,7 @@ EAPI Eina_Bool eina_quadtree_hide(Eina_QuadTree_Item *object);
* @return #EINA_TRUE if @p object was successfully shown, or
* #EINA_FALSE if it wasn't in the quadtree.
*/
-EAPI Eina_Bool eina_quadtree_show(Eina_QuadTree_Item *object);
+EINA_API Eina_Bool eina_quadtree_show(Eina_QuadTree_Item *object);
/**
* @brief Retrieves items in quadtree inside the target geometry.
@@ -183,7 +191,7 @@ EAPI Eina_Bool eina_quadtree_show(Eina_QuadTree_Item *object);
* changes, then performs a collision detection to find items whose
* geometry is contained within or intersects the given target geometry.
*/
-EAPI Eina_Inlist *eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h);
+EINA_API Eina_Inlist *eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h);
/**
* @brief Retrieves the quadtree item's data for the given inline list.
@@ -192,7 +200,11 @@ EAPI Eina_Inlist *eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, i
* @return The contained data object in the Eina_QuadTree_Item, or @c
* NULL if none could be found.
*/
-EAPI void *eina_quadtree_object(Eina_Inlist *list);
+EINA_API void *eina_quadtree_object(Eina_Inlist *list);
+
+/**
+ * @}
+ */
/**
* @}
diff --git a/src/lib/eina/eina_quaternion.c b/src/lib/eina/eina_quaternion.c
index f3431e0326..bde46a1c71 100644
--- a/src/lib/eina/eina_quaternion.c
+++ b/src/lib/eina/eina_quaternion.c
@@ -30,7 +30,7 @@
#include "eina_quaternion.h"
#include "eina_util.h"
-EAPI void
+EINA_API void
eina_quaternion_f16p16_set(Eina_Quaternion *out,
Eina_F16p16 x, Eina_F16p16 y,
Eina_F16p16 z, Eina_F16p16 w)
@@ -41,7 +41,7 @@ eina_quaternion_f16p16_set(Eina_Quaternion *out,
out->z = z;
}
-EAPI Eina_F16p16
+EINA_API Eina_F16p16
eina_quaternion_f16p16_norm(const Eina_Quaternion_F16p16 *q)
{
Eina_F16p16 s;
@@ -54,7 +54,7 @@ eina_quaternion_f16p16_norm(const Eina_Quaternion_F16p16 *q)
return eina_f16p16_sqrt(s);
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_negative(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *in)
{
@@ -64,7 +64,7 @@ eina_quaternion_f16p16_negative(Eina_Quaternion_F16p16 *out,
out->z = eina_f16p16_sub(0, in->z);
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_add(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b)
@@ -75,7 +75,7 @@ eina_quaternion_f16p16_add(Eina_Quaternion_F16p16 *out,
out->z = eina_f16p16_add(a->z, b->z);
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_mul(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b)
@@ -98,7 +98,7 @@ eina_quaternion_f16p16_mul(Eina_Quaternion_F16p16 *out,
eina_f16p16_mul(a->y, b->x)));
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_scale(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
Eina_F16p16 b)
@@ -109,7 +109,7 @@ eina_quaternion_f16p16_scale(Eina_Quaternion_F16p16 *out,
out->z = eina_f16p16_scale(a->z, b);
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_conjugate(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *in)
{
@@ -119,7 +119,7 @@ eina_quaternion_f16p16_conjugate(Eina_Quaternion_F16p16 *out,
out->z = eina_f16p16_sub(0, in->z);
}
-EAPI Eina_F16p16
+EINA_API Eina_F16p16
eina_quaternion_f16p16_dot(const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b)
{
@@ -129,7 +129,7 @@ eina_quaternion_f16p16_dot(const Eina_Quaternion_F16p16 *a,
eina_f16p16_mul(a->z, b->z)));
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_normalized(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *in)
{
@@ -141,7 +141,7 @@ eina_quaternion_f16p16_normalized(Eina_Quaternion_F16p16 *out,
norm));
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_lerp(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b,
@@ -172,7 +172,7 @@ eina_quaternion_f16p16_lerp(Eina_Quaternion_F16p16 *out,
pos));
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_slerp(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b,
@@ -228,7 +228,7 @@ eina_quaternion_f16p16_slerp(Eina_Quaternion_F16p16 *out,
eina_quaternion_f16p16_add(out, &left, &right);
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_nlerp(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b,
@@ -267,7 +267,7 @@ eina_quaternion_f16p16_nlerp(Eina_Quaternion_F16p16 *out,
eina_quaternion_f16p16_normalized(out, &not_normalize);
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_rotate(Eina_Point_3D_F16p16 *p,
const Eina_Point_3D_F16p16 *center,
const Eina_Quaternion_F16p16 *q)
@@ -313,7 +313,7 @@ eina_quaternion_f16p16_rotate(Eina_Point_3D_F16p16 *p,
eina_f16p16_add(uvz, uuvz));
}
-EAPI void
+EINA_API void
eina_quaternion_f16p16_rotation_matrix3_get(Eina_Matrix3_F16p16 *m,
const Eina_Quaternion_F16p16 *q)
{
@@ -351,7 +351,7 @@ eina_quaternion_f16p16_rotation_matrix3_get(Eina_Matrix3_F16p16 *m,
eina_f16p16_add(xx, yy));
}
-EAPI void
+EINA_API void
eina_quaternion_set(Eina_Quaternion *out, double x,
double y, double z, double w)
{
@@ -361,7 +361,7 @@ eina_quaternion_set(Eina_Quaternion *out, double x,
out->z = z;
}
-EAPI double
+EINA_API double
eina_quaternion_norm(const Eina_Quaternion *q)
{
double s;
@@ -371,7 +371,7 @@ eina_quaternion_norm(const Eina_Quaternion *q)
return sqrt(s);
}
-EAPI void
+EINA_API void
eina_quaternion_negative(Eina_Quaternion *out,
const Eina_Quaternion *in)
{
@@ -381,7 +381,7 @@ eina_quaternion_negative(Eina_Quaternion *out,
out->z = - in->z;
}
-EAPI void
+EINA_API void
eina_quaternion_add(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b)
@@ -392,7 +392,7 @@ eina_quaternion_add(Eina_Quaternion *out,
out->z = a->z + b->z;
}
-EAPI void
+EINA_API void
eina_quaternion_mul(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b)
@@ -403,7 +403,7 @@ eina_quaternion_mul(Eina_Quaternion *out,
out->z = a->w * b->z + a->x * b->y - a->y * b->x + a->z * b->w;
}
-EAPI void
+EINA_API void
eina_quaternion_scale(Eina_Quaternion *out,
const Eina_Quaternion *a,
double b)
@@ -414,7 +414,7 @@ eina_quaternion_scale(Eina_Quaternion *out,
out->z = a->z * b;
}
-EAPI void
+EINA_API void
eina_quaternion_conjugate(Eina_Quaternion *out,
const Eina_Quaternion *in)
{
@@ -424,14 +424,14 @@ eina_quaternion_conjugate(Eina_Quaternion *out,
out->z = - in->z;
}
-EAPI double
+EINA_API double
eina_quaternion_dot(const Eina_Quaternion *a,
const Eina_Quaternion *b)
{
return a->w * b->w + a->x * b->x + a->y * b->y + a->z * b->z;
}
-EAPI void
+EINA_API void
eina_quaternion_normalized(Eina_Quaternion *out,
const Eina_Quaternion *in)
{
@@ -441,7 +441,7 @@ eina_quaternion_normalized(Eina_Quaternion *out,
eina_quaternion_scale(out, in, 1.0 / norm);
}
-EAPI void
+EINA_API void
eina_quaternion_lerp(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b,
@@ -464,7 +464,7 @@ eina_quaternion_lerp(Eina_Quaternion *out,
out->z = a->z + pos * (b->z - a->z);
}
-EAPI void
+EINA_API void
eina_quaternion_slerp(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b,
@@ -518,7 +518,7 @@ eina_quaternion_slerp(Eina_Quaternion *out,
eina_quaternion_add(out, &left, &right);
}
-EAPI void
+EINA_API void
eina_quaternion_nlerp(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b,
@@ -556,7 +556,7 @@ eina_quaternion_nlerp(Eina_Quaternion *out,
eina_quaternion_normalized(out, &not_normalize);
}
-EAPI void
+EINA_API void
eina_quaternion_rotate(Eina_Point_3D *p,
const Eina_Point_3D *center,
const Eina_Quaternion *q)
@@ -590,7 +590,7 @@ eina_quaternion_rotate(Eina_Point_3D *p,
p->z = center->z + z + uvz + uuvz;
}
-EAPI void
+EINA_API void
eina_quaternion_rotation_matrix3_get(Eina_Matrix3 *m,
const Eina_Quaternion *q)
{
@@ -681,7 +681,7 @@ eina_point3d_neg(Eina_Point_3D *out, const Eina_Point_3D *in)
}
/* http://www.w3.org/TR/css3-transforms/#decomposing-a-3d-matrix */
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_matrix4_quaternion_to(Eina_Quaternion *rotation,
Eina_Quaternion *perspective,
Eina_Point_3D *translation,
@@ -832,7 +832,7 @@ eina_matrix4_quaternion_to(Eina_Quaternion *rotation,
return EINA_TRUE;
}
-EAPI void
+EINA_API void
eina_matrix3_quaternion_get(Eina_Quaternion *q,
const Eina_Matrix3 *m)
{
@@ -884,7 +884,7 @@ eina_matrix3_quaternion_get(Eina_Quaternion *q,
q->z = z;
}
-EAPI void
+EINA_API void
eina_quaternion_matrix4_to(Eina_Matrix4 *m,
const Eina_Quaternion *rotation,
const Eina_Quaternion *perspective,
@@ -986,7 +986,7 @@ eina_quaternion_matrix4_to(Eina_Matrix4 *m,
m->ww = tmp.ww;
}
-EAPI void
+EINA_API void
eina_quaternion_inverse(Eina_Quaternion *out, const Eina_Quaternion *q)
{
double norm = (q->x * q->x) + (q->y * q->y) + (q->z * q->z) + (q->w * q->w);
@@ -1008,7 +1008,7 @@ eina_quaternion_inverse(Eina_Quaternion *out, const Eina_Quaternion *q)
}
}
-EAPI void
+EINA_API void
eina_quaternion_array_set(Eina_Quaternion *dst, const double *v)
{
dst->x = v[0];
@@ -1017,7 +1017,7 @@ eina_quaternion_array_set(Eina_Quaternion *dst, const double *v)
dst->w = v[3];
}
-EAPI void
+EINA_API void
eina_quaternion_copy(Eina_Quaternion *dst, const Eina_Quaternion *src)
{
dst->x = src->x;
@@ -1026,7 +1026,7 @@ eina_quaternion_copy(Eina_Quaternion *dst, const Eina_Quaternion *src)
dst->w = src->w;
}
-EAPI void
+EINA_API void
eina_quaternion_homogeneous_regulate(Eina_Quaternion *out, const Eina_Quaternion *v)
{
if (!EINA_DBL_EQ(v->w, 0.0))
@@ -1040,7 +1040,7 @@ eina_quaternion_homogeneous_regulate(Eina_Quaternion *out, const Eina_Quaternion
}
}
-EAPI void
+EINA_API void
eina_quaternion_subtract(Eina_Quaternion *out, const Eina_Quaternion *a, const Eina_Quaternion *b)
{
out->x = a->x - b->x;
@@ -1049,20 +1049,20 @@ eina_quaternion_subtract(Eina_Quaternion *out, const Eina_Quaternion *a, const E
out->w = a->w - b->w;
}
-EAPI double
+EINA_API double
eina_quaternion_length_get(const Eina_Quaternion *v)
{
return (double)sqrt((double)((v->x * v->x) + (v->y * v->y) +
(v->z * v->z) + (v->w * v->w)));
}
-EAPI double
+EINA_API double
eina_quaternion_length_square_get(const Eina_Quaternion *v)
{
return (v->x * v->x) + (v->y * v->y) + (v->z * v->z) + (v->w * v->w);
}
-EAPI double
+EINA_API double
eina_quaternion_distance_get(const Eina_Quaternion *a, const Eina_Quaternion *b)
{
Eina_Quaternion v;
@@ -1071,7 +1071,7 @@ eina_quaternion_distance_get(const Eina_Quaternion *a, const Eina_Quaternion *b)
return eina_quaternion_length_get(&v);
}
-EAPI double
+EINA_API double
eina_quaternion_distance_square_get(const Eina_Quaternion *a, const Eina_Quaternion *b)
{
Eina_Quaternion v;
@@ -1080,7 +1080,7 @@ eina_quaternion_distance_square_get(const Eina_Quaternion *a, const Eina_Quatern
return eina_quaternion_length_square_get(&v);
}
-EAPI void
+EINA_API void
eina_quaternion_transform(Eina_Quaternion *out, const Eina_Quaternion *v, const Eina_Matrix4 *m)
{
Eina_Quaternion tmp;
@@ -1099,7 +1099,7 @@ eina_quaternion_transform(Eina_Quaternion *out, const Eina_Quaternion *v, const
eina_quaternion_copy(out, &tmp);
}
-EAPI double
+EINA_API double
eina_quaternion_angle_plains(Eina_Quaternion *a, Eina_Quaternion *b)
{
return (double) ((a->x * b->x) + (a->y * b->y) + (a->z * b->z)) / ((sqrt((a->x * a->x) +
diff --git a/src/lib/eina/eina_quaternion.h b/src/lib/eina/eina_quaternion.h
index 3de9996d05..bf37b0e730 100644
--- a/src/lib/eina/eina_quaternion.h
+++ b/src/lib/eina/eina_quaternion.h
@@ -18,6 +18,13 @@
#ifndef EINA_QUATERNION_H_
#define EINA_QUATERNION_H_
+/**
+ * @defgroup Eina_Quaternion_Group Quaternion
+ * @ingroup Eina_Containers_Group
+ *
+ * @{
+ */
+
typedef struct _Eina_Quaternion_F16p16 Eina_Quaternion_F16p16;
typedef struct _Eina_Quaternion Eina_Quaternion;
typedef struct _Eina_Point_3D Eina_Point_3D;
@@ -53,89 +60,89 @@ struct _Eina_Point_3D_F16p16
Eina_F16p16 z;
};
-EAPI void eina_quaternion_f16p16_set(Eina_Quaternion *out,
+EINA_API void eina_quaternion_f16p16_set(Eina_Quaternion *out,
Eina_F16p16 x, Eina_F16p16 y,
Eina_F16p16 z, Eina_F16p16 w); /**< @since 1.15 */
-EAPI Eina_F16p16 eina_quaternion_f16p16_norm(const Eina_Quaternion_F16p16 *q); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_negative(Eina_Quaternion_F16p16 *out,
+EINA_API Eina_F16p16 eina_quaternion_f16p16_norm(const Eina_Quaternion_F16p16 *q); /**< @since 1.15 */
+EINA_API void eina_quaternion_f16p16_negative(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *in); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_add(Eina_Quaternion_F16p16 *out,
+EINA_API void eina_quaternion_f16p16_add(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_mul(Eina_Quaternion_F16p16 *out,
+EINA_API void eina_quaternion_f16p16_mul(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_scale(Eina_Quaternion_F16p16 *out,
+EINA_API void eina_quaternion_f16p16_scale(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
Eina_F16p16 b); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_conjugate(Eina_Quaternion_F16p16 *out,
+EINA_API void eina_quaternion_f16p16_conjugate(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *in); /**< @since 1.15 */
-EAPI Eina_F16p16 eina_quaternion_f16p16_dot(const Eina_Quaternion_F16p16 *a,
+EINA_API Eina_F16p16 eina_quaternion_f16p16_dot(const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_lerp(Eina_Quaternion_F16p16 *out,
+EINA_API void eina_quaternion_f16p16_lerp(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b,
Eina_F16p16 pos); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_slerp(Eina_Quaternion_F16p16 *out,
+EINA_API void eina_quaternion_f16p16_slerp(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b,
Eina_F16p16 pos); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_nlerp(Eina_Quaternion_F16p16 *out,
+EINA_API void eina_quaternion_f16p16_nlerp(Eina_Quaternion_F16p16 *out,
const Eina_Quaternion_F16p16 *a,
const Eina_Quaternion_F16p16 *b,
Eina_F16p16 pos); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_rotate(Eina_Point_3D_F16p16 *p,
+EINA_API void eina_quaternion_f16p16_rotate(Eina_Point_3D_F16p16 *p,
const Eina_Point_3D_F16p16 *center,
const Eina_Quaternion_F16p16 *q); /**< @since 1.15 */
-EAPI void eina_quaternion_f16p16_rotation_matrix3_get(Eina_Matrix3_F16p16 *m,
+EINA_API void eina_quaternion_f16p16_rotation_matrix3_get(Eina_Matrix3_F16p16 *m,
const Eina_Quaternion_F16p16 *q); /**< @since 1.15 */
-EAPI void eina_quaternion_set(Eina_Quaternion *q, double x,
+EINA_API void eina_quaternion_set(Eina_Quaternion *q, double x,
double y, double z, double w);
-EAPI double eina_quaternion_norm(const Eina_Quaternion *q); /**< @since 1.15 */
-EAPI void eina_quaternion_negative(Eina_Quaternion *out,
+EINA_API double eina_quaternion_norm(const Eina_Quaternion *q); /**< @since 1.15 */
+EINA_API void eina_quaternion_negative(Eina_Quaternion *out,
const Eina_Quaternion *in); /**< @since 1.15 */
-EAPI void eina_quaternion_add(Eina_Quaternion *out,
+EINA_API void eina_quaternion_add(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b); /**< @since 1.15 */
-EAPI void eina_quaternion_mul(Eina_Quaternion *out,
+EINA_API void eina_quaternion_mul(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b); /**< @since 1.15 */
-EAPI void eina_quaternion_scale(Eina_Quaternion *out,
+EINA_API void eina_quaternion_scale(Eina_Quaternion *out,
const Eina_Quaternion *a,
double b); /**< @since 1.15 */
-EAPI void eina_quaternion_conjugate(Eina_Quaternion *out,
+EINA_API void eina_quaternion_conjugate(Eina_Quaternion *out,
const Eina_Quaternion *in); /**< @since 1.15 */
-EAPI double eina_quaternion_dot(const Eina_Quaternion *a,
+EINA_API double eina_quaternion_dot(const Eina_Quaternion *a,
const Eina_Quaternion *b); /**< @since 1.15 */
-EAPI void eina_quaternion_normalized(Eina_Quaternion *out,
+EINA_API void eina_quaternion_normalized(Eina_Quaternion *out,
const Eina_Quaternion *in); /**< @since 1.15 */
-EAPI void eina_quaternion_lerp(Eina_Quaternion *out,
+EINA_API void eina_quaternion_lerp(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b,
double pos); /**< @since 1.15 */
-EAPI void eina_quaternion_slerp(Eina_Quaternion *out,
+EINA_API void eina_quaternion_slerp(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b,
double pos); /**< @since 1.15 */
-EAPI void eina_quaternion_nlerp(Eina_Quaternion *out,
+EINA_API void eina_quaternion_nlerp(Eina_Quaternion *out,
const Eina_Quaternion *a,
const Eina_Quaternion *b,
double pos); /**< @since 1.15 */
-EAPI void eina_quaternion_rotate(Eina_Point_3D *p,
+EINA_API void eina_quaternion_rotate(Eina_Point_3D *p,
const Eina_Point_3D *center,
const Eina_Quaternion *q); /**< @since 1.15 */
-EAPI void eina_quaternion_rotation_matrix3_get(Eina_Matrix3 *m,
+EINA_API void eina_quaternion_rotation_matrix3_get(Eina_Matrix3 *m,
const Eina_Quaternion *q); /**< @since 1.15 */
-EAPI void eina_matrix3_quaternion_get(Eina_Quaternion *q,
+EINA_API void eina_matrix3_quaternion_get(Eina_Quaternion *q,
const Eina_Matrix3 *m); /**< @since 1.15 */
-EAPI Eina_Bool eina_matrix4_quaternion_to(Eina_Quaternion *rotation,
+EINA_API Eina_Bool eina_matrix4_quaternion_to(Eina_Quaternion *rotation,
Eina_Quaternion *perspective,
Eina_Point_3D *translation,
Eina_Point_3D *scale,
Eina_Point_3D *skew,
const Eina_Matrix4 *m); /**< @since 1.16 */
-EAPI void eina_quaternion_matrix4_to(Eina_Matrix4 *m,
+EINA_API void eina_quaternion_matrix4_to(Eina_Matrix4 *m,
const Eina_Quaternion *rotation,
const Eina_Quaternion *perspective,
const Eina_Point_3D *translation,
@@ -152,7 +159,7 @@ EAPI void eina_quaternion_matrix4_to(Eina_Matrix4 *m,
*
* @since 1.17
*/
-EAPI void eina_quaternion_inverse(Eina_Quaternion *out, const Eina_Quaternion *q);
+EINA_API void eina_quaternion_inverse(Eina_Quaternion *out, const Eina_Quaternion *q);
/**
* @brief Set array to quaternion.
@@ -164,7 +171,7 @@ EAPI void eina_quaternion_inverse(Eina_Quaternion *out, const Eina_Quaternion *q
*
* @since 1.17
*/
-EAPI void eina_quaternion_array_set(Eina_Quaternion *dst, const double *v);
+EINA_API void eina_quaternion_array_set(Eina_Quaternion *dst, const double *v);
/**
* @brief Copy quaternion.
@@ -174,7 +181,7 @@ EAPI void eina_quaternion_array_set(Eina_Quaternion *dst, const double *v);
*
* @since 1.17
*/
-EAPI void eina_quaternion_copy(Eina_Quaternion *dst,
+EINA_API void eina_quaternion_copy(Eina_Quaternion *dst,
const Eina_Quaternion *src);
/**
@@ -185,7 +192,7 @@ EAPI void eina_quaternion_copy(Eina_Quaternion *dst,
*
* @since 1.17
*/
-EAPI void eina_quaternion_homogeneous_regulate(Eina_Quaternion *out,
+EINA_API void eina_quaternion_homogeneous_regulate(Eina_Quaternion *out,
const Eina_Quaternion *v);
/**
@@ -197,7 +204,7 @@ EAPI void eina_quaternion_homogeneous_regulate(Eina_Quaternion *out,
*
* @since 1.17
*/
-EAPI void eina_quaternion_subtract(Eina_Quaternion *out, const Eina_Quaternion *a,
+EINA_API void eina_quaternion_subtract(Eina_Quaternion *out, const Eina_Quaternion *a,
const Eina_Quaternion *b);
/**
@@ -208,7 +215,7 @@ EAPI void eina_quaternion_subtract(Eina_Quaternion *out, const Eina_Quaternion *
*
* @since 1.17
*/
-EAPI double eina_quaternion_length_get(const Eina_Quaternion *v);
+EINA_API double eina_quaternion_length_get(const Eina_Quaternion *v);
/**
* @brief Return the length in square of the given quaternion.
@@ -218,7 +225,7 @@ EAPI double eina_quaternion_length_get(const Eina_Quaternion *v);
*
* @since 1.17
*/
-EAPI double eina_quaternion_length_square_get(const Eina_Quaternion *v);
+EINA_API double eina_quaternion_length_square_get(const Eina_Quaternion *v);
/**
* @brief Return the distance between of two quaternions.
@@ -229,7 +236,7 @@ EAPI double eina_quaternion_length_square_get(const Eina_Quaternion *v);
*
* @since 1.17
*/
-EAPI double eina_quaternion_distance_get(const Eina_Quaternion *a,
+EINA_API double eina_quaternion_distance_get(const Eina_Quaternion *a,
const Eina_Quaternion *b);
/**
* @brief Return the distance in square between of two quaternions.
@@ -240,7 +247,7 @@ EAPI double eina_quaternion_distance_get(const Eina_Quaternion *a,
*
* @since 1.17
*/
-EAPI double eina_quaternion_distance_square_get(const Eina_Quaternion *a,
+EINA_API double eina_quaternion_distance_square_get(const Eina_Quaternion *a,
const Eina_Quaternion *b);
/**
@@ -252,7 +259,7 @@ EAPI double eina_quaternion_distance_square_get(const Eina_Quaternion *a,
*
* @since 1.17
*/
-EAPI void eina_quaternion_transform(Eina_Quaternion *out, const Eina_Quaternion *v,
+EINA_API void eina_quaternion_transform(Eina_Quaternion *out, const Eina_Quaternion *v,
const Eina_Matrix4 *m);
/**
@@ -264,6 +271,9 @@ EAPI void eina_quaternion_transform(Eina_Quaternion *out, const Eina_Quaternion
*
* @since 1.17
*/
-EAPI double eina_quaternion_angle_plains(Eina_Quaternion *a, Eina_Quaternion *b);
+EINA_API double eina_quaternion_angle_plains(Eina_Quaternion *a, Eina_Quaternion *b);
+/**
+ * @}
+ */
#endif
diff --git a/src/lib/eina/eina_range.h b/src/lib/eina/eina_range.h
new file mode 100644
index 0000000000..b5ffac92f1
--- /dev/null
+++ b/src/lib/eina/eina_range.h
@@ -0,0 +1,116 @@
+/* EINA - EFL data type library
+ * Copyright (C) 2020 Ali Alzyod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library;
+ * if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef EINA_RANGE_H_
+#define EINA_RANGE_H_
+
+#include "eina_types.h"
+
+#include "eina_cpu.h"
+
+#define EINA_RANGE(start, length) ((Eina_Range) { (start), (length) })
+#define EINA_RANGE_FROM_TO(from, to) ((Eina_Range) { MIN((from),(to)), ABS((to) - (from)) })
+#define EINA_RANGE_ZERO() EINA_RANGE(0, 0)
+#define EINA_RANGE_EMPTY() ((Eina_Range) EINA_RANGE_ZERO())
+
+/** @brief A Int range */
+typedef struct _Eina_Range
+{
+ size_t start;
+ size_t length;
+} Eina_Range;
+
+
+/**
+ * @brief convenience macro for comparing two Eina_Range structs
+ * @param[in] a An Eina_Range
+ * @param[in] b An Eina_Range
+ * @return 1 if the structs are equal, 0 if they are not
+ * @since 1.24
+ */
+#define EINA_RANGE_EQ(a, b) \
+ (((a).start == (b).start) && ((a).length == (b).length))
+
+/**
+ * @brief Get end value in range (not included in range).
+ *
+ * @param[in] range The Range.
+ * @return The sum of end and length of the range.
+ *
+ * @since 1.24
+ * */
+static inline size_t eina_range_end(const Eina_Range *range);
+
+/**
+ * @brief Intersection between two ranges.
+ *
+ * @param[in] range The first range.
+ * @param[in] range2 The second range.
+ * @return The intersection between two ranges, If ranges do not intersect return length will be 0.
+ *
+ * @since 1.24
+ * */
+static inline Eina_Range eina_range_intersect(const Eina_Range *range, const Eina_Range *range2);
+
+
+/**
+ * @brief Union between two ranges.
+ *
+ * @param[in] range The first range.
+ * @param[in] range2 The second range.
+ * @return The union between two ranges.
+ *
+ * @since 1.24
+ * */
+static inline Eina_Range eina_range_union(const Eina_Range *range, const Eina_Range *range2);
+
+/**
+ * @brief Check if value is set in a range.
+ *
+ * @param[in] range The range.
+ * @return Wither value set within range.
+ *
+ * @since 1.24
+ * */
+static inline Eina_Bool eina_range_contains(const Eina_Range *range, size_t value);
+
+/**
+ * @brief Check if two ranges are equal.
+ *
+ * @param[in] range The first range.
+ * @param[in] range2 The second range.
+ * @return Wither two ranges are equal.
+ *
+ * @since 1.24
+ * */
+static inline Eina_Bool eina_range_equal(const Eina_Range *range, const Eina_Range *range2);
+
+/**
+ * @brief Check if two ranges are equal.
+ *
+ * @param[in] min The min value in range.
+ * @param[in] max The max value in range.
+ * @return range.
+ *
+ * @since 1.24
+ * */
+static inline Eina_Range eina_range_from_to(size_t min, size_t max);
+
+#include "eina_inline_range.x"
+
+#endif /*EINA_RANGE_H_*/
diff --git a/src/lib/eina/eina_rbtree.c b/src/lib/eina/eina_rbtree.c
index b7373c7fbe..764f55aef4 100644
--- a/src/lib/eina/eina_rbtree.c
+++ b/src/lib/eina/eina_rbtree.c
@@ -228,10 +228,14 @@ _eina_rbtree_iterator_build(const Eina_Rbtree *root, unsigned char mask)
it = calloc(1, sizeof (Eina_Iterator_Rbtree));
if (!it) return NULL;
- eina_trash_init(&it->trash);
+ eina_trash_init(&it->trash);
- it->stack = eina_array_new(8);
- if (!it->stack) goto on_error;
+ it->stack = eina_array_new(8);
+ if (!it->stack)
+ {
+ free(it);
+ return NULL;
+ }
}
first = _eina_rbtree_iterator_list_new(it, root);
@@ -299,7 +303,7 @@ _eina_rbtree_inline_double_rotation(Eina_Rbtree *node,
* API *
*============================================================================*/
-EAPI Eina_Rbtree *
+EINA_API Eina_Rbtree *
eina_rbtree_inline_insert(Eina_Rbtree *root,
Eina_Rbtree *node,
Eina_Rbtree_Cmp_Node_Cb cmp,
@@ -366,7 +370,7 @@ eina_rbtree_inline_insert(Eina_Rbtree *root,
return root;
}
-EAPI Eina_Rbtree *
+EINA_API Eina_Rbtree *
eina_rbtree_inline_remove(Eina_Rbtree *root,
Eina_Rbtree *node,
Eina_Rbtree_Cmp_Node_Cb cmp,
@@ -472,7 +476,7 @@ eina_rbtree_inline_remove(Eina_Rbtree *root,
rt = (*rt)->son + dir;
}
- if (q != NULL)
+ if (q != NULL)
{
int r_color = r->color;
Eina_Rbtree *nd = q->son[dir ^ 1];
@@ -513,25 +517,25 @@ eina_rbtree_inline_remove(Eina_Rbtree *root,
return root;
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_rbtree_iterator_prefix(const Eina_Rbtree *root)
{
return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_PREFIX_MASK);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_rbtree_iterator_infix(const Eina_Rbtree *root)
{
return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_INFIX_MASK);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_rbtree_iterator_postfix(const Eina_Rbtree *root)
{
return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_POSTFIX_MASK);
}
-EAPI void
+EINA_API void
eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data)
{
if (!root)
diff --git a/src/lib/eina/eina_rbtree.h b/src/lib/eina/eina_rbtree.h
index 00e3eb6149..da4adb148b 100644
--- a/src/lib/eina/eina_rbtree.h
+++ b/src/lib/eina/eina_rbtree.h
@@ -162,7 +162,7 @@ typedef void (*Eina_Rbtree_Free_Cb)(Eina_Rbtree *node, void *data);
* an empty valid red black tree. The resulting new tree is a valid red
* black tree. This function doesn't allocate any data.
*/
-EAPI Eina_Rbtree *eina_rbtree_inline_insert(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Rbtree *eina_rbtree_inline_insert(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
/**
* @brief Removes a node from an existing red black tree.
@@ -177,7 +177,7 @@ EAPI Eina_Rbtree *eina_rbtree_inline_insert(Eina_Rbtree *root, Eina_Rbt
* contain the node that you are removing. This function will return @c NULL
* when the red black tree got empty. This function doesn't free any data.
*/
-EAPI Eina_Rbtree *eina_rbtree_inline_remove(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Rbtree *eina_rbtree_inline_remove(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
/**
* @brief Deletes all nodes from a valid red black tree.
@@ -186,7 +186,7 @@ EAPI Eina_Rbtree *eina_rbtree_inline_remove(Eina_Rbtree *root, Eina_Rbt
* @param[in] func The callback that will free each node.
* @param[in] data Private data to help the compare function.
*/
-EAPI void eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data) EINA_ARG_NONNULL(2);
+EINA_API void eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data) EINA_ARG_NONNULL(2);
/**
* @brief Searches tree for a key using a comparison function.
@@ -221,7 +221,7 @@ static inline Eina_Rbtree *eina_rbtree_inline_lookup(const Eina_Rbtree *root, co
* invalid! That is, if you add or remove nodes this iterator
* behavior is undefined and your program may crash!
*/
-EAPI Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns a new prefix iterator associated with a rbtree.
@@ -241,7 +241,7 @@ EAPI Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree *root)
* invalid! That is, if you add or remove nodes this iterator
* behavior is undefined and your program may crash!
*/
-EAPI Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns a new prefix iterator associated with a rbtree.
@@ -261,7 +261,7 @@ EAPI Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree *root) E
* invalid! That is, if you add or remove nodes this iterator
* behavior is undefined and your program may crash!
*/
-EAPI Eina_Iterator *eina_rbtree_iterator_postfix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_rbtree_iterator_postfix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
#include "eina_inline_rbtree.x"
diff --git a/src/lib/eina/eina_rectangle.c b/src/lib/eina/eina_rectangle.c
index e8e04cdc16..562d8a952d 100644
--- a/src/lib/eina/eina_rectangle.c
+++ b/src/lib/eina/eina_rectangle.c
@@ -591,7 +591,7 @@ eina_rectangle_shutdown(void)
* API *
*============================================================================*/
-EAPI Eina_Rectangle *
+EINA_API Eina_Rectangle *
eina_rectangle_new(int x, int y, int w, int h)
{
Eina_Rectangle *rect = NULL;
@@ -615,7 +615,7 @@ eina_rectangle_new(int x, int y, int w, int h)
return rect;
}
-EAPI void
+EINA_API void
eina_rectangle_free(Eina_Rectangle *rect)
{
EINA_SAFETY_ON_NULL_RETURN(rect);
@@ -631,7 +631,7 @@ eina_rectangle_free(Eina_Rectangle *rect)
}
}
-EAPI Eina_Rectangle_Pool *
+EINA_API Eina_Rectangle_Pool *
eina_rectangle_pool_new(int w, int h)
{
Eina_Rectangle_Pool *new;
@@ -660,7 +660,7 @@ eina_rectangle_pool_new(int w, int h)
return new;
}
-EAPI void
+EINA_API void
eina_rectangle_pool_free(Eina_Rectangle_Pool *pool)
{
Eina_Rectangle_Alloc *del;
@@ -690,14 +690,14 @@ eina_rectangle_pool_free(Eina_Rectangle_Pool *pool)
MAGIC_FREE(pool);
}
-EAPI int
+EINA_API int
eina_rectangle_pool_count(Eina_Rectangle_Pool *pool)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(pool, 0);
return pool->references;
}
-EAPI Eina_Rectangle *
+EINA_API Eina_Rectangle *
eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h)
{
Eina_Rectangle_Alloc *new;
@@ -763,7 +763,7 @@ eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h)
return rect;
}
-EAPI void
+EINA_API void
eina_rectangle_pool_release(Eina_Rectangle *rect)
{
Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *)rect) - 1;
@@ -817,7 +817,7 @@ eina_rectangle_pool_release(Eina_Rectangle *rect)
}
}
-EAPI Eina_Rectangle_Pool *
+EINA_API Eina_Rectangle_Pool *
eina_rectangle_pool_get(Eina_Rectangle *rect)
{
Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *)rect) - 1;
@@ -830,7 +830,7 @@ eina_rectangle_pool_get(Eina_Rectangle *rect)
return era->pool;
}
-EAPI void
+EINA_API void
eina_rectangle_pool_packing_set(Eina_Rectangle_Pool *pool, Eina_Rectangle_Packing type)
{
EINA_MAGIC_CHECK_RECTANGLE_POOL(pool);
@@ -853,7 +853,7 @@ eina_rectangle_pool_packing_set(Eina_Rectangle_Pool *pool, Eina_Rectangle_Packin
}
}
-EAPI void
+EINA_API void
eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data)
{
EINA_MAGIC_CHECK_RECTANGLE_POOL(pool);
@@ -865,7 +865,7 @@ eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data)
pool->data = (void *)data;
}
-EAPI void *
+EINA_API void *
eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool)
{
EINA_MAGIC_CHECK_RECTANGLE_POOL(pool);
@@ -874,7 +874,7 @@ eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool)
return pool->data;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *pool, int *w, int *h)
{
if (!pool)
@@ -892,7 +892,7 @@ eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *pool, int *w, int *h)
return EINA_TRUE;
}
-EAPI Eina_Rectangle_Outside
+EINA_API Eina_Rectangle_Outside
eina_rectangle_outside_position(Eina_Rectangle *rect1, Eina_Rectangle *rect2)
{
Eina_Rectangle_Outside ret = 0;
diff --git a/src/lib/eina/eina_rectangle.h b/src/lib/eina/eina_rectangle.h
index 54cf1ccb99..ad501a6860 100644
--- a/src/lib/eina/eina_rectangle.h
+++ b/src/lib/eina/eina_rectangle.h
@@ -39,15 +39,24 @@
* @{
*/
+/** A zero-size rectangle. */
#define EINA_RECTANGLE_INIT { 0, 0, 0, 0}
+/** A format string useful for printf-like functions. */
#define EINA_RECTANGLE_FORMAT "dx%d - %dx%d"
+/** Separates the components of the rectangle structure into a comma-separated list,
+ * so they can be used as parameters. */
#define EINA_RECTANGLE_ARGS(r) (r)->x, (r)->y, (r)->w, (r)->h
+/** Creates an instance of an #Eina_Rect */
#define EINA_RECT(x, y, w, h) ((Eina_Rect) { { (x), (y), (w), (h) } })
+/** A zero-size rectangle that can be used to initialize #Eina_Rect structures. */
#define EINA_RECT_ZERO() { EINA_RECTANGLE_INIT }
+/** A zero-size rectangle that can be used to initialize #Eina_Rect structures. */
#define EINA_RECT_EMPTY() ((Eina_Rect) EINA_RECT_ZERO())
+/** Creates an instance of an #Eina_Position2D */
#define EINA_POSITION2D(x, y) ((Eina_Position2D) { (x), (y) })
+/** Creates an instance of an #Eina_Size2D */
#define EINA_SIZE2D(x, y) ((Eina_Size2D) { (x), (y) })
/** @brief A 2D position in pixel coordinates */
@@ -82,6 +91,15 @@ typedef struct _Eina_Size2D
*/
#define EINA_POSITION2D_EQ(a, b) \
(((a).x == (b).x) && ((a).y == (b).y))
+/**
+ * @brief Convenience macro for getting the distance from one point to another
+ * @param[in] a An Eina_Position2D
+ * @param[in] b An Eina_Position2D
+ * @return The distance between the two points.
+ * @since 1.24
+ */
+#define EINA_POSITION2D_DISTANCE(a, b) \
+ sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y))
/**
* @typedef Eina_Rectangle
@@ -95,15 +113,22 @@ typedef struct _Eina_Rectangle
int h; /**< height of rectangle */
} Eina_Rectangle;
+/**
+ * @typedef Eina_Rect
+ * A convenient rectangle structure which can be accessed in different ways.
+ */
typedef union _Eina_Rect
{
- Eina_Rectangle rect;
+ Eina_Rectangle rect; /**< Embedded simple rectangle structure */
struct {
- Eina_Position2D pos;
- Eina_Size2D size;
+ Eina_Position2D pos; /**< Top-left corner in pixels */
+ Eina_Size2D size; /**< Size in pixels */
};
struct {
- int x, y, w, h;
+ int x; /**< Top-left x coordinate of rectangle */
+ int y; /**< Top-left y coordinate of rectangle */
+ int w; /**< Width of rectangle */
+ int h; /**< Height of rectangle */
};
} Eina_Rect;
@@ -132,10 +157,10 @@ typedef enum {
* @since 1.19
*/
typedef enum {
- EINA_RECTANGLE_OUTSIDE_TOP = 1,
- EINA_RECTANGLE_OUTSIDE_LEFT = 2,
- EINA_RECTANGLE_OUTSIDE_BOTTOM = 4,
- EINA_RECTANGLE_OUTSIDE_RIGHT = 8
+ EINA_RECTANGLE_OUTSIDE_TOP = 1, /**< Position is over the rectangle */
+ EINA_RECTANGLE_OUTSIDE_LEFT = 2, /**< Position is to the left of the rectangle */
+ EINA_RECTANGLE_OUTSIDE_BOTTOM = 4, /**< Position is below the rectangle */
+ EINA_RECTANGLE_OUTSIDE_RIGHT = 8 /**< Position is to the right of the rectangle */
} Eina_Rectangle_Outside;
@@ -397,7 +422,7 @@ static inline Eina_Bool eina_rectangle_subtract(Eina_Rectangle *rect, Eina_Rec
* new pool. If the pool can not be created, @c NULL is
* returned. Otherwise the newly allocated pool is returned.
*/
-EAPI Eina_Rectangle_Pool *eina_rectangle_pool_new(int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Rectangle_Pool *eina_rectangle_pool_new(int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns the pool of the given rectangle.
@@ -408,7 +433,7 @@ EAPI Eina_Rectangle_Pool *eina_rectangle_pool_new(int w, int h) EINA_MALLOC EINA
* This function returns the pool in which @p rect is. If @p rect is
* @c NULL, @c NULL is returned.
*/
-EAPI Eina_Rectangle_Pool *eina_rectangle_pool_get(Eina_Rectangle *rect) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Rectangle_Pool *eina_rectangle_pool_get(Eina_Rectangle *rect) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Returns the width and height of the given pool.
@@ -423,7 +448,7 @@ EAPI Eina_Rectangle_Pool *eina_rectangle_pool_get(Eina_Rectangle *rect) EINA_WAR
* @p pool is @c NULL, #EINA_FALSE is returned. Otherwise #EINA_TRUE is
* returned.
*/
-EAPI Eina_Bool eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *pool, int *w, int *h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *pool, int *w, int *h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets the data from the given pool.
@@ -435,7 +460,7 @@ EAPI Eina_Bool eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *
* eina_rectangle_pool_data_set(). If @p pool is @c NULL, this
* function returns @c NULL.
*/
-EAPI void *eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API void *eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Sets the data to the given pool.
@@ -446,7 +471,7 @@ EAPI void *eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool
* This function sets @p data to @p pool. If @p pool is @c NULL, this
* function does nothing.
*/
-EAPI void eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data) EINA_ARG_NONNULL(1);
+EINA_API void eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data) EINA_ARG_NONNULL(1);
/**
* @brief Frees the given pool.
@@ -456,7 +481,7 @@ EAPI void eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool
* This function frees the allocated data of @p pool. If @p pool is
* @c NULL, this function returned immediately.
*/
-EAPI void eina_rectangle_pool_free(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1);
+EINA_API void eina_rectangle_pool_free(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1);
/**
* @brief Returns the number of rectangles in the given pool.
@@ -466,7 +491,7 @@ EAPI void eina_rectangle_pool_free(Eina_Rectangle_Pool *pool) EI
*
* This function returns the number of rectangles in @p pool.
*/
-EAPI int eina_rectangle_pool_count(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API int eina_rectangle_pool_count(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Requests a rectangle of given size in the given pool.
@@ -483,7 +508,7 @@ EAPI int eina_rectangle_pool_count(Eina_Rectangle_Pool *pool) E
* returns the rectangle which matches the size (@p w, @p h).
* Otherwise it returns @c NULL.
*/
-EAPI Eina_Rectangle *eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Rectangle *eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Removes the given rectangle from the pool.
@@ -494,7 +519,7 @@ EAPI Eina_Rectangle *eina_rectangle_pool_request(Eina_Rectangle_Pool *pool,
* @c NULL, the function returns immediately. Otherwise it removes @p
* rect from the pool.
*/
-EAPI void eina_rectangle_pool_release(Eina_Rectangle *rect) EINA_ARG_NONNULL(1);
+EINA_API void eina_rectangle_pool_release(Eina_Rectangle *rect) EINA_ARG_NONNULL(1);
/**
* @def EINA_RECTANGLE_SET
@@ -518,6 +543,10 @@ EAPI void eina_rectangle_pool_release(Eina_Rectangle *rect) EINA
(Rectangle)->h = H; \
}
+/**
+ * @def EINA_RECT_SET
+ * Functionally equivalent to #EINA_RECTANGLE_SET
+ */
#define EINA_RECT_SET(rect, x, y, w, h) do { EINA_RECTANGLE_SET((&rect), x, y, w, h) } while (0)
@@ -536,16 +565,16 @@ EAPI void eina_rectangle_pool_release(Eina_Rectangle *rect) EINA
*
* No check is done on @p w and @p h.
*/
-EAPI Eina_Rectangle *eina_rectangle_new(int x, int y, int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Rectangle *eina_rectangle_new(int x, int y, int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Frees the given rectangle.
*
- * @param[iin] rect The rectangle to free.
+ * @param[in] rect The rectangle to free.
*
* This function removes @p rect from the rectangles pool.
*/
-EAPI void eina_rectangle_free(Eina_Rectangle *rect) EINA_ARG_NONNULL(1);
+EINA_API void eina_rectangle_free(Eina_Rectangle *rect) EINA_ARG_NONNULL(1);
/**
* @brief Sets the type of given rectangle pool.
@@ -557,7 +586,7 @@ EAPI void eina_rectangle_free(Eina_Rectangle *rect) EINA_ARG_NONNULL(
* @see Eina_Rectangle_Packing
* @since 1.11
*/
-EAPI void eina_rectangle_pool_packing_set(Eina_Rectangle_Pool *pool,Eina_Rectangle_Packing type) EINA_ARG_NONNULL(1);
+EINA_API void eina_rectangle_pool_packing_set(Eina_Rectangle_Pool *pool,Eina_Rectangle_Packing type) EINA_ARG_NONNULL(1);
/**
* @brief calculates where rect2 is outside of rect1.
@@ -568,7 +597,7 @@ EAPI void eina_rectangle_pool_packing_set(Eina_Rectangle_Pool *pool,E
* @return An OR'd map of Eina_Rectangle_Outside values
* @since 1.19
*/
-EAPI Eina_Rectangle_Outside eina_rectangle_outside_position(Eina_Rectangle *rect1, Eina_Rectangle *rect2);
+EINA_API Eina_Rectangle_Outside eina_rectangle_outside_position(Eina_Rectangle *rect1, Eina_Rectangle *rect2);
/**
* @brief Compares two rectangles for equality
diff --git a/src/lib/eina/eina_safepointer.c b/src/lib/eina/eina_safepointer.c
index 9016aab27a..fc88b6c63e 100644
--- a/src/lib/eina/eina_safepointer.c
+++ b/src/lib/eina/eina_safepointer.c
@@ -59,8 +59,8 @@ struct _Eina_Memory_Header
size_t size;
};
-EAPI Eina_Memory_Table **_eina_sp_ids_tables[EINA_MAX_MID_TABLE_ID] = { NULL };
-EAPI int _eina_sp_log_dom = -1;
+EINA_API Eina_Memory_Table **_eina_sp_ids_tables[EINA_MAX_MID_TABLE_ID] = { NULL };
+EINA_API int _eina_sp_log_dom = -1;
/* Spare empty table */
static Eina_Memory_Table *empty_table = NULL;
@@ -261,7 +261,7 @@ _eina_safepointer_entry_find(Eina_Memory_Table *table)
return entry;
}
-EAPI const Eina_Safepointer *
+EINA_API const Eina_Safepointer *
eina_safepointer_register(const void *target)
{
Eina_Memory_Table *table;
@@ -298,7 +298,7 @@ eina_safepointer_register(const void *target)
return (void*) id;
}
-EAPI void
+EINA_API void
eina_safepointer_unregister(const Eina_Safepointer *safe)
{
Eina_Memory_Table *table;
diff --git a/src/lib/eina/eina_safepointer.h b/src/lib/eina/eina_safepointer.h
index 8120e48bfa..0a42b11d7d 100644
--- a/src/lib/eina/eina_safepointer.h
+++ b/src/lib/eina/eina_safepointer.h
@@ -77,7 +77,7 @@ typedef struct _Eina_Safepointer Eina_Safepointer;
*
* @since 1.18
*/
-EAPI const Eina_Safepointer *eina_safepointer_register(const void *target);
+EINA_API const Eina_Safepointer *eina_safepointer_register(const void *target);
/**
* @brief Unregister an Eina_Safepointer and the pointer that maps to it.
@@ -88,7 +88,7 @@ EAPI const Eina_Safepointer *eina_safepointer_register(const void *target);
*
* @since 1.18
*/
-EAPI void eina_safepointer_unregister(const Eina_Safepointer *safe);
+EINA_API void eina_safepointer_unregister(const Eina_Safepointer *safe);
/**
* @brief Get the associated pointer from an Eina_Safepointer mapping.
diff --git a/src/lib/eina/eina_safety_checks.c b/src/lib/eina/eina_safety_checks.c
index 4ead9d68ae..372fb7e8ec 100644
--- a/src/lib/eina/eina_safety_checks.c
+++ b/src/lib/eina/eina_safety_checks.c
@@ -25,7 +25,7 @@
#include "eina_log.h"
#include "eina_safety_checks.h"
-EAPI Eina_Error EINA_ERROR_SAFETY_FAILED = 0;
+EINA_API Eina_Error EINA_ERROR_SAFETY_FAILED = 0;
static int EINA_SAFETY_LOG_DOMAIN = 0;
static int initcnt = 0;
@@ -74,7 +74,7 @@ eina_safety_checks_init(void)
return EINA_TRUE;
}
-EAPI void
+EINA_API void
_eina_safety_error(const char *file, const char *func, int line, const char *str)
{
eina_error_set(EINA_ERROR_SAFETY_FAILED);
diff --git a/src/lib/eina/eina_safety_checks.h b/src/lib/eina/eina_safety_checks.h
index cf29f27a21..f9aaa4e9c2 100644
--- a/src/lib/eina/eina_safety_checks.h
+++ b/src/lib/eina/eina_safety_checks.h
@@ -29,16 +29,16 @@
* @defgroup Eina_Safety_Checks_Group Safety Checks
*
* @warning @c eina_safety_checks.h should only be included by source
- * files, after all other includes and before the source file
+ * files after all other includes and before the source file
* specific includes. By source file specific includes we
* mean those that define the functions that are being
* checked. The reason for such complexity is the trick to
* avoid compiler optimizations. If compilers are told that
* some given function will never receive @c NULL
- * (EINA_ARG_NONNULL(), then compiler will emit a warning if
- * it detects so (good!) but will remove any checks for that
+ * (EINA_ARG_NONNULL()), then the compiler will emit a warning if
+ * it detects so (good!) and also will remove any checks for that
* condition as it believes it will never happen, removing
- * all safety checks! By including @c eina_safety_checks.h it
+ * all safety checks! By including @c eina_safety_checks.h last it
* will redefine EINA_ARG_NONNULL() to void and compiler
* warning will not be emitted, but checks will be there. The
* files already processed with the old macro
@@ -69,7 +69,7 @@
* will log and return instead of abort() your program.
*
* Since these cases should never happen, one may want to keep safety
- * checks enabled during tests but disable then during deploy, not
+ * checks enabled during tests but disable them during deploy, not
* doing any checks at all. This is a common requirement for embedded
* systems. When to check or not should be set during compile time
* by using @c --disable-safety-checks or @c --enable-safety-checks
@@ -87,7 +87,7 @@
#include "eina_config.h"
#include "eina_error.h"
-EAPI extern Eina_Error EINA_ERROR_SAFETY_FAILED;
+EINA_API extern Eina_Error EINA_ERROR_SAFETY_FAILED;
#ifdef EINA_SAFETY_CHECKS
@@ -104,8 +104,8 @@ EAPI extern Eina_Error EINA_ERROR_SAFETY_FAILED;
* @since 1.17
* @internal
*/
-EAPI void _eina_safety_error(const char *file, const char *func, int line, const char *str);
-# define EINA_SAFETY_ERROR(msg) _eina_safety_error(__FILE__, __FUNCTION__, __LINE__, msg)
+EINA_API void _eina_safety_error(const char *file, const char *func, int line, const char *str);
+# define EINA_SAFETY_ERROR(msg) _eina_safety_error(__FILE__, __func__, __LINE__, msg)
# else
# define EINA_SAFETY_ERROR(msg) EINA_LOG_ERR("%s", msg)
# endif
diff --git a/src/lib/eina/eina_sched.c b/src/lib/eina/eina_sched.c
index bf47d806b1..3864054712 100644
--- a/src/lib/eina/eina_sched.c
+++ b/src/lib/eina/eina_sched.c
@@ -34,7 +34,7 @@
#define RTNICENESS 1
#define NICENESS 5
-EAPI void
+EINA_API void
eina_sched_prio_drop(void)
{
struct sched_param param;
diff --git a/src/lib/eina/eina_sched.h b/src/lib/eina/eina_sched.h
index 13f35a4476..77d90a31e4 100644
--- a/src/lib/eina/eina_sched.h
+++ b/src/lib/eina/eina_sched.h
@@ -44,7 +44,7 @@
* only one that is implemented as of now. In this case, the nice level is
* incremented on this thread by @c NICENESS.
*/
-EAPI void eina_sched_prio_drop(void);
+EINA_API void eina_sched_prio_drop(void);
/**
* @}
diff --git a/src/lib/eina/eina_simple_xml_parser.c b/src/lib/eina/eina_simple_xml_parser.c
index a2548a97e1..8cc13c742f 100644
--- a/src/lib/eina/eina_simple_xml_parser.c
+++ b/src/lib/eina/eina_simple_xml_parser.c
@@ -280,7 +280,7 @@ eina_simple_xml_shutdown(void)
*============================================================================*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_simple_xml_parse(const char *buf, unsigned buflen, Eina_Bool strip, Eina_Simple_XML_Cb func, const void *data)
{
const char *itr = buf, *itr_end = buf + buflen;
@@ -472,7 +472,7 @@ eina_simple_xml_parse(const char *buf, unsigned buflen, Eina_Bool strip, Eina_Si
return EINA_TRUE;
}
-EAPI const char *
+EINA_API const char *
eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen)
{
const char *itr = buf, *itr_end = buf + buflen;
@@ -497,7 +497,7 @@ eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen)
return NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_simple_xml_attributes_parse(const char *buf, unsigned buflen, Eina_Simple_XML_Attribute_Cb func, const void *data)
{
const char *itr = buf, *itr_end = buf + buflen;
@@ -557,7 +557,7 @@ eina_simple_xml_attributes_parse(const char *buf, unsigned buflen, Eina_Simple_X
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_simple_xml_attribute_w3c_parse(const char *buf, Eina_Simple_XML_Attribute_Cb func, const void *data)
{
const char *end;
@@ -616,7 +616,7 @@ eina_simple_xml_attribute_w3c_parse(const char *buf, Eina_Simple_XML_Attribute_C
/* Node loader *************************************************************/
-EAPI Eina_Simple_XML_Attribute *
+EINA_API Eina_Simple_XML_Attribute *
eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value)
{
Eina_Simple_XML_Attribute *attr;
@@ -642,7 +642,7 @@ eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key,
return attr;
}
-EAPI void
+EINA_API void
eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr)
{
if (!attr)
@@ -671,7 +671,7 @@ _eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
free(node);
}
-EAPI Eina_Simple_XML_Node_Tag *
+EINA_API Eina_Simple_XML_Node_Tag *
eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name)
{
Eina_Simple_XML_Node_Tag *n;
@@ -729,7 +729,7 @@ _eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
eina_mempool_free(_eina_simple_xml_tag_mp, tag);
}
-EAPI void
+EINA_API void
eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
{
if (!tag)
@@ -774,14 +774,14 @@ _eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, Eina_Simple_XML
return n;
}
-EAPI Eina_Simple_XML_Node_Data *
+EINA_API Eina_Simple_XML_Node_Data *
eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
{
return _eina_simple_xml_node_data_new
(parent, EINA_SIMPLE_XML_NODE_DATA, contents, length);
}
-EAPI void
+EINA_API void
eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
@@ -796,14 +796,14 @@ eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
_eina_simple_xml_node_data_free(node);
}
-EAPI Eina_Simple_XML_Node_CData *
+EINA_API Eina_Simple_XML_Node_CData *
eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
{
return _eina_simple_xml_node_data_new
(parent, EINA_SIMPLE_XML_NODE_CDATA, contents, length);
}
-EAPI void
+EINA_API void
eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
@@ -818,14 +818,14 @@ eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node)
_eina_simple_xml_node_data_free(node);
}
-EAPI Eina_Simple_XML_Node_Doctype_Child *
+EINA_API Eina_Simple_XML_Node_Doctype_Child *
eina_simple_xml_node_doctype_child_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
{
return _eina_simple_xml_node_data_new
(parent, EINA_SIMPLE_XML_NODE_DOCTYPE_CHILD, contents, length);
}
-EAPI void
+EINA_API void
eina_simple_xml_node_doctype_child_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
@@ -840,14 +840,14 @@ eina_simple_xml_node_doctype_child_free(Eina_Simple_XML_Node_Data *node)
_eina_simple_xml_node_data_free(node);
}
-EAPI Eina_Simple_XML_Node_Processing *
+EINA_API Eina_Simple_XML_Node_Processing *
eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
{
return _eina_simple_xml_node_data_new
(parent, EINA_SIMPLE_XML_NODE_PROCESSING, contents, length);
}
-EAPI void
+EINA_API void
eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
@@ -862,14 +862,14 @@ eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node)
_eina_simple_xml_node_data_free(node);
}
-EAPI Eina_Simple_XML_Node_Doctype *
+EINA_API Eina_Simple_XML_Node_Doctype *
eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
{
return _eina_simple_xml_node_data_new
(parent, EINA_SIMPLE_XML_NODE_DOCTYPE, contents, length);
}
-EAPI void
+EINA_API void
eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
@@ -884,14 +884,14 @@ eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node)
_eina_simple_xml_node_data_free(node);
}
-EAPI Eina_Simple_XML_Node_Comment *
+EINA_API Eina_Simple_XML_Node_Comment *
eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
{
return _eina_simple_xml_node_data_new
(parent, EINA_SIMPLE_XML_NODE_COMMENT, contents, length);
}
-EAPI void
+EINA_API void
eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
@@ -1010,7 +1010,7 @@ _eina_simple_xml_node_parse(void *data, Eina_Simple_XML_Type type, const char *c
return EINA_TRUE;
}
-EAPI Eina_Simple_XML_Node_Root *
+EINA_API Eina_Simple_XML_Node_Root *
eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip)
{
Eina_Simple_XML_Node_Root *root;
@@ -1032,7 +1032,7 @@ eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip)
return root;
}
-EAPI void
+EINA_API void
eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root)
{
if (!root) return;
@@ -1192,7 +1192,7 @@ _eina_simple_xml_node_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node *node, const c
}
}
-EAPI char *
+EINA_API char *
eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent)
{
Eina_Strbuf *buf;
diff --git a/src/lib/eina/eina_simple_xml_parser.h b/src/lib/eina/eina_simple_xml_parser.h
index 19c0bca44f..313eca9c59 100644
--- a/src/lib/eina/eina_simple_xml_parser.h
+++ b/src/lib/eina/eina_simple_xml_parser.h
@@ -125,16 +125,7 @@
*
* For more information, see
* @ref eina_simple_xml_parser_example_01_page "this example".
- */
-
-/**
- * @addtogroup Eina_Tools_Group Tools
- *
- * @{
- */
-
-/**
- * @defgroup Eina_Simple_XML_Group Simple_XML
+ * @ingroup Eina_Tools_Group Tools
*
* @{
*/
@@ -238,7 +229,7 @@ typedef Eina_Bool (*Eina_Simple_XML_Attribute_Cb)(void *data, const char *key, c
* @return #EINA_TRUE on success, or #EINA_FALSE if it was aborted by user or
* parsing error.
*/
-EAPI Eina_Bool eina_simple_xml_parse(const char *buf, unsigned buflen,
+EINA_API Eina_Bool eina_simple_xml_parse(const char *buf, unsigned buflen,
Eina_Bool strip,
Eina_Simple_XML_Cb func, const void *data);
@@ -256,7 +247,7 @@ EAPI Eina_Bool eina_simple_xml_parse(const char *buf, unsigned buflen,
* type is #EINA_SIMPLE_XML_OPEN or #EINA_SIMPLE_XML_OPEN_EMPTY.
*
*/
-EAPI const char * eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen);
+EINA_API const char * eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen);
/**
* @brief Given a buffer with xml attributes, parse them to key=value pairs.
@@ -273,7 +264,7 @@ EAPI const char * eina_simple_xml_tag_attributes_find(const char *buf, unsigned
* @return #EINA_TRUE on success, or #EINA_FALSE if it was aborted by user or
* parsing error.
*/
-EAPI Eina_Bool eina_simple_xml_attributes_parse(const char *buf, unsigned buflen,
+EINA_API Eina_Bool eina_simple_xml_attributes_parse(const char *buf, unsigned buflen,
Eina_Simple_XML_Attribute_Cb func, const void *data);
/**
@@ -292,7 +283,7 @@ EAPI Eina_Bool eina_simple_xml_attributes_parse(const char *buf, unsigned buflen
*
* @since 1.14
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_simple_xml_attribute_w3c_parse(const char *buf, Eina_Simple_XML_Attribute_Cb func, const void *data);
/**
@@ -308,14 +299,14 @@ eina_simple_xml_attribute_w3c_parse(const char *buf, Eina_Simple_XML_Attribute_C
* released with eina_simple_xml_attribute_free() or indirectly
* with eina_simple_xml_node_tag_free().
*/
-EAPI Eina_Simple_XML_Attribute * eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value);
+EINA_API Eina_Simple_XML_Attribute * eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value);
/**
* @brief Removes attribute from parent and deletes it.
*
* @param[in] attr attribute to release memory.
*/
-EAPI void eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr);
+EINA_API void eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr);
/**
* @brief Creates new tag. If parent is provided, it is automatically appended.
@@ -328,14 +319,14 @@ EAPI void eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr);
* released with eina_simple_xml_node_tag_free() or indirectly
* with eina_simple_xml_node_tag_free() of the parent.
*/
-EAPI Eina_Simple_XML_Node_Tag * eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name);
+EINA_API Eina_Simple_XML_Node_Tag * eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name);
/**
* @brief Removes tag from parent and deletes it.
*
* @param[in] tag to release memory.
*/
-EAPI void eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag);
+EINA_API void eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag);
/**
@@ -350,14 +341,14 @@ EAPI void eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag);
* released with eina_simple_xml_node_data_free() or indirectly
* with eina_simple_xml_node_tag_free() of the parent.
*/
-EAPI Eina_Simple_XML_Node_Data * eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
+EINA_API Eina_Simple_XML_Node_Data * eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
/**
* @brief Removes data from parent and deletes it.
*
* @param[in] node to release memory.
*/
-EAPI void eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node);
+EINA_API void eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node);
/**
@@ -372,14 +363,14 @@ EAPI void eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node);
* released with eina_simple_xml_node_cdata_free() or indirectly
* with eina_simple_xml_node_tag_free() of the parent.
*/
-EAPI Eina_Simple_XML_Node_CData * eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
+EINA_API Eina_Simple_XML_Node_CData * eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
/**
* @brief Removes cdata from parent and deletes it.
*
* @param[in] node to release memory.
*/
-EAPI void eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node);
+EINA_API void eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node);
/**
@@ -396,7 +387,7 @@ EAPI void eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node);
*
* @since 1.8
*/
-EAPI Eina_Simple_XML_Node_Doctype_Child * eina_simple_xml_node_doctype_child_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
+EINA_API Eina_Simple_XML_Node_Doctype_Child * eina_simple_xml_node_doctype_child_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
/**
* @brief Removes doctype child from parent and deletes it.
@@ -405,7 +396,7 @@ EAPI Eina_Simple_XML_Node_Doctype_Child * eina_simple_xml_node_doctype_child_new
*
* @since 1.8
*/
-EAPI void eina_simple_xml_node_doctype_child_free(Eina_Simple_XML_Node_Data *node);
+EINA_API void eina_simple_xml_node_doctype_child_free(Eina_Simple_XML_Node_Data *node);
/**
@@ -420,14 +411,14 @@ EAPI void eina_simple_xml_node_doctype_child_free(Eina_Simple_XML_Node_Data *nod
* released with eina_simple_xml_node_processing_free() or indirectly
* with eina_simple_xml_node_tag_free() of the parent.
*/
-EAPI Eina_Simple_XML_Node_Processing * eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
+EINA_API Eina_Simple_XML_Node_Processing * eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
/**
* @brief Removes processing from parent and deletes it.
*
* @param[in] node processing to release memory.
*/
-EAPI void eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node);
+EINA_API void eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node);
/**
@@ -442,14 +433,14 @@ EAPI void eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node);
* released with eina_simple_xml_node_doctype_free() or indirectly
* with eina_simple_xml_node_tag_free() of the parent.
*/
-EAPI Eina_Simple_XML_Node_Doctype * eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
+EINA_API Eina_Simple_XML_Node_Doctype * eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
/**
* @brief Removes doctype from parent and deletes it.
*
* @param[in] node doctype to release memory.
*/
-EAPI void eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node);
+EINA_API void eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node);
/**
@@ -464,14 +455,14 @@ EAPI void eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node);
* released with eina_simple_xml_node_comment_free() or indirectly
* with eina_simple_xml_node_tag_free() of the parent.
*/
-EAPI Eina_Simple_XML_Node_Comment * eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
+EINA_API Eina_Simple_XML_Node_Comment * eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
/**
* @brief Removes comment from parent and deletes it.
*
* @param[in] node comment to release memory.
*/
-EAPI void eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node);
+EINA_API void eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node);
/**
@@ -486,14 +477,14 @@ EAPI void eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node);
* Document with errors may return partial tree instead of @c NULL,
* we'll do our best to avoid returning nothing.
*/
-EAPI Eina_Simple_XML_Node_Root * eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip);
+EINA_API Eina_Simple_XML_Node_Root * eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip);
/**
* @brief Frees node tree build with eina_simple_xml_node_load()
*
* @param[in] root Memory returned by eina_simple_xml_node_load()
*/
-EAPI void eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root);
+EINA_API void eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root);
/**
* @brief Converts the node tree under the given element to a XML string.
@@ -503,12 +494,8 @@ EAPI void eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root);
*
* @return @c NULL on errors, or a newly allocated string on success.
*/
-EAPI char * eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent);
-
+EINA_API char * eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent);
-/**
- * @}
- */
/**
* @}
diff --git a/src/lib/eina/eina_slice.h b/src/lib/eina/eina_slice.h
index a354eaa566..6bb3aaa8bb 100644
--- a/src/lib/eina/eina_slice.h
+++ b/src/lib/eina/eina_slice.h
@@ -362,7 +362,7 @@ static inline char *eina_slice_strdup(const Eina_Slice slice);
/**
* @brief A null-terminated string for this slice.
*
- * @param[in] slice the reference memory.
+ * @param[in] rw_slice the reference memory.
* @return newly allocated memory or @c NULL on error
*
* @since 1.19
@@ -464,6 +464,30 @@ static inline char *eina_rw_slice_strdup(const Eina_Rw_Slice rw_slice);
#else
#define EINA_SLICE_STR(str) {.len = strlen((str)), .mem = (str)}
#endif
+/**
+ * @def EINA_SLICE_STR_FULL(str)
+ *
+ * Same as EINA_SLICE_STR_FULL, but it also contains the \0 element of the string
+ *
+ * @param[in] str The string to create the slice from.
+ * @return The initialized slice object.
+ *
+ * @note This macro is usable with both Eina_Slice or Eina_Rw_Slice.
+ *
+ * @code
+ * Eina_Slice ro_slice = EINA_SLICE_STR_FULL("hello world");
+ * @endcode
+ *
+ * @see EINA_SLICE_STR_FULL() for specific version using literals.
+ *
+ * @since 1.24
+ */
+#ifdef __cplusplus
+#define EINA_SLICE_STR_FULL(str) {strlen((str)) + 1, (str)}
+#else
+#define EINA_SLICE_STR_FULL(str) {.len = strlen((str)) + 1, .mem = (str)}
+#endif
+
/**
* @def EINA_SLICE_STR_FMT
diff --git a/src/lib/eina/eina_slstr.c b/src/lib/eina/eina_slstr.c
index 017b692fe7..2ce638a642 100644
--- a/src/lib/eina/eina_slstr.c
+++ b/src/lib/eina/eina_slstr.c
@@ -21,9 +21,9 @@ static Eina_TLS _slstr_tls = 0;
#if 0
// 2 extension ideas here: slices for short-lived raw data buffers
-EAPI Eina_Rw_Slice eina_slslice_new(size_t length); // alloc
-EAPI Eina_Rw_Slice eina_slslice_copy(Eina_Slice slice); // copies
-EAPI Eina_Rw_Slice eina_slslice_free(Eina_Rw_Slice slice); // steals
+EINA_API Eina_Rw_Slice eina_slslice_new(size_t length); // alloc
+EINA_API Eina_Rw_Slice eina_slslice_copy(Eina_Slice slice); // copies
+EINA_API Eina_Rw_Slice eina_slslice_free(Eina_Rw_Slice slice); // steals
#endif
static void
@@ -87,7 +87,7 @@ _slstr_freeq_get(Eina_Bool nocreate)
}
}
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_copy_new(const char *string)
{
Eina_FreeQ *fq;
@@ -108,7 +108,7 @@ eina_slstr_copy_new(const char *string)
return copy;
}
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_copy_new_length(const char *string, size_t len)
{
Eina_FreeQ *fq;
@@ -125,7 +125,7 @@ eina_slstr_copy_new_length(const char *string, size_t len)
return copy;
}
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_steal_new(char *string)
{
Eina_FreeQ *fq;
@@ -143,7 +143,7 @@ eina_slstr_steal_new(char *string)
return string;
}
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_stringshare_new(Eina_Stringshare *string)
{
Eina_FreeQ *fq;
@@ -161,7 +161,7 @@ eina_slstr_stringshare_new(Eina_Stringshare *string)
return string;
}
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_tmpstr_new(Eina_Tmpstr *string)
{
Eina_FreeQ *fq;
@@ -179,7 +179,7 @@ eina_slstr_tmpstr_new(Eina_Tmpstr *string)
return string;
}
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_strbuf_new(Eina_Strbuf *string)
{
Eina_FreeQ *fq;
@@ -203,7 +203,7 @@ error:
return NULL;
}
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_vasprintf_new(const char *fmt, va_list args)
{
Eina_FreeQ *fq;
@@ -224,7 +224,7 @@ eina_slstr_vasprintf_new(const char *fmt, va_list args)
return str;
}
-EAPI void
+EINA_API void
eina_slstr_local_clear(void)
{
Eina_FreeQ *fq;
diff --git a/src/lib/eina/eina_slstr.h b/src/lib/eina/eina_slstr.h
index 7f6144fc9e..8e9f78f953 100644
--- a/src/lib/eina/eina_slstr.h
+++ b/src/lib/eina/eina_slstr.h
@@ -48,7 +48,7 @@ typedef const char Eina_Slstr;
*
* @since 1.19
*/
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_copy_new(const char *string);
/**
@@ -67,7 +67,7 @@ eina_slstr_copy_new(const char *string);
*
* @since 1.19
*/
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_copy_new_length(const char *string, size_t len);
/**
@@ -84,7 +84,7 @@ eina_slstr_copy_new_length(const char *string, size_t len);
*
* @since 1.19
*/
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_steal_new(char *string);
/**
@@ -101,7 +101,7 @@ eina_slstr_steal_new(char *string);
*
* @since 1.19
*/
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_stringshare_new(Eina_Stringshare *string);
/**
@@ -118,7 +118,7 @@ eina_slstr_stringshare_new(Eina_Stringshare *string);
*
* @since 1.19
*/
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_tmpstr_new(Eina_Tmpstr *string);
/**
@@ -139,7 +139,7 @@ eina_slstr_tmpstr_new(Eina_Tmpstr *string);
*
* @since 1.19
*/
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_strbuf_new(Eina_Strbuf *string);
/**
@@ -151,7 +151,7 @@ eina_slstr_strbuf_new(Eina_Strbuf *string);
*
* @since 1.19
*/
-EAPI Eina_Slstr *
+EINA_API Eina_Slstr *
eina_slstr_vasprintf_new(const char *fmt, va_list args);
/**
@@ -191,7 +191,7 @@ eina_slstr_printf(const char *fmt, ...)
*
* @since 1.19
*/
-EAPI void
+EINA_API void
eina_slstr_local_clear(void);
#endif
diff --git a/src/lib/eina/eina_str.c b/src/lib/eina/eina_str.c
index 53e27d5a56..4b7f2c9ce3 100644
--- a/src/lib/eina/eina_str.c
+++ b/src/lib/eina/eina_str.c
@@ -313,7 +313,7 @@ eina_str_split_full_helper(const char *str,
* API *
*============================================================================*/
-EAPI size_t
+EINA_API size_t
eina_strlcpy(char *dst, const char *src, size_t siz)
{
#ifdef HAVE_STRLCPY
@@ -345,7 +345,7 @@ eina_strlcpy(char *dst, const char *src, size_t siz)
#endif
}
-EAPI size_t
+EINA_API size_t
eina_strlcat(char *dst, const char *src, size_t siz)
{
char *d = dst;
@@ -379,7 +379,7 @@ eina_strlcat(char *dst, const char *src, size_t siz)
return(dlen + (s - src)); /* count does not include NUL */
}
-EAPI char *
+EINA_API char *
eina_strftime(const char *format, const struct tm *tm)
{
const size_t flen = strlen(format);
@@ -412,7 +412,7 @@ eina_strftime(const char *format, const struct tm *tm)
return NULL;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_str_has_prefix(const char *str, const char *prefix)
{
size_t str_len;
@@ -426,19 +426,19 @@ eina_str_has_prefix(const char *str, const char *prefix)
return (strncmp(str, prefix, prefix_len) == 0);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_str_has_suffix(const char *str, const char *suffix)
{
return eina_str_has_suffix_helper(str, suffix, strcmp);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_str_has_extension(const char *str, const char *ext)
{
return eina_str_has_suffix_helper(str, ext, strcasecmp);
}
-EAPI char **
+EINA_API char **
eina_str_split_full(const char *str,
const char *delim,
int max_tokens,
@@ -448,13 +448,13 @@ eina_str_split_full(const char *str,
}
-EAPI char **
+EINA_API char **
eina_str_split(const char *str, const char *delim, int max_tokens)
{
return eina_str_split_full_helper(str, delim, max_tokens, NULL);
}
-EAPI size_t
+EINA_API size_t
eina_str_join_len(char *dst,
size_t size,
char sep,
@@ -501,7 +501,7 @@ eina_str_join_len(char *dst,
}
#ifdef HAVE_ICONV
-EAPI char *
+EINA_API char *
eina_str_convert(const char *enc_from, const char *enc_to, const char *text)
{
iconv_t ic;
@@ -563,7 +563,7 @@ eina_str_convert(const char *enc_from, const char *enc_to, const char *text)
return new_txt;
}
#else
-EAPI char *
+EINA_API char *
eina_str_convert(const char *enc_from EINA_UNUSED,
const char *enc_to EINA_UNUSED,
const char *text EINA_UNUSED)
@@ -573,7 +573,7 @@ eina_str_convert(const char *enc_from EINA_UNUSED,
#endif
#ifdef HAVE_ICONV
-EAPI char *
+EINA_API char *
eina_str_convert_len(const char *enc_from, const char *enc_to, const char *text, size_t len, size_t *retlen)
{
iconv_t ic;
@@ -636,7 +636,7 @@ eina_str_convert_len(const char *enc_from, const char *enc_to, const char *text,
return new_txt;
}
#else
-EAPI char *
+EINA_API char *
eina_str_convert_len(const char *enc_from EINA_UNUSED, const char *enc_to EINA_UNUSED, const char *text EINA_UNUSED, size_t len EINA_UNUSED, size_t *retlen)
{
if (retlen) *retlen = 0;
@@ -644,7 +644,7 @@ eina_str_convert_len(const char *enc_from EINA_UNUSED, const char *enc_to EINA_U
}
#endif
-EAPI char *
+EINA_API char *
eina_str_escape(const char *str)
{
char *s2, *d;
@@ -694,7 +694,7 @@ eina_str_escape(const char *str)
return s2;
}
-EAPI void
+EINA_API void
eina_str_tolower(char **str)
{
char *p;
@@ -705,7 +705,7 @@ eina_str_tolower(char **str)
*p = tolower((unsigned char )(*p));
}
-EAPI void
+EINA_API void
eina_str_toupper(char **str)
{
char *p;
@@ -716,7 +716,7 @@ eina_str_toupper(char **str)
*p = toupper((unsigned char)(*p));
}
-EAPI unsigned char *
+EINA_API unsigned char *
eina_memdup(unsigned char *mem, size_t size, Eina_Bool terminate)
{
unsigned char *ret;
diff --git a/src/lib/eina/eina_str.h b/src/lib/eina/eina_str.h
index 961ac58980..b64a0f957a 100644
--- a/src/lib/eina/eina_str.h
+++ b/src/lib/eina/eina_str.h
@@ -101,7 +101,7 @@
* ensures @p dst is NULL-terminated even if no @c NULL byte is found in the first
* @p siz bytes of src.
*/
-EAPI size_t eina_strlcpy(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2);
+EINA_API size_t eina_strlcpy(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a c-string.
@@ -118,7 +118,7 @@ EAPI size_t eina_strlcpy(char *dst, const char *src, size_t siz) EINA_A
* MIN(siz, strlen(initial dst)). If the returned value is greater or
* equal than @p siz, truncation occurred.
*/
-EAPI size_t eina_strlcat(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2);
+EINA_API size_t eina_strlcat(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2);
/**
@@ -132,7 +132,7 @@ EAPI size_t eina_strlcat(char *dst, const char *src, size_t siz) EINA_A
* @p prefix, #EINA_FALSE otherwise. If the length of @p prefix is
* greater than @p str, #EINA_FALSE is returned.
*/
-EAPI Eina_Bool eina_str_has_prefix(const char *str, const char *prefix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_str_has_prefix(const char *str, const char *prefix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
* @brief Checks if the given string has the given suffix.
@@ -145,7 +145,7 @@ EAPI Eina_Bool eina_str_has_prefix(const char *str, const char *prefix) EI
* @p suffix, #EINA_FALSE otherwise. If the length of @p suffix is
* greater than @p str, #EINA_FALSE is returned.
*/
-EAPI Eina_Bool eina_str_has_suffix(const char *str, const char *suffix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_str_has_suffix(const char *str, const char *suffix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
* @brief Checks if the given string has the given extension.
@@ -157,7 +157,7 @@ EAPI Eina_Bool eina_str_has_suffix(const char *str, const char *suffix) EI
* This function does the same as eina_str_has_suffix(), except it's case
* insensitive.
*/
-EAPI Eina_Bool eina_str_has_extension(const char *str, const char *ext) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_str_has_extension(const char *str, const char *ext) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
/**
* @brief Splits a string using a delimiter.
@@ -183,7 +183,7 @@ EAPI Eina_Bool eina_str_has_extension(const char *str, const char *ext) EI
* @note If you need the number of elements in the returned array see
* eina_str_split_full().
*/
-EAPI char **eina_str_split(const char *string, const char *delimiter, int max_tokens) EINA_ARG_NONNULL(1, 2) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API char **eina_str_split(const char *string, const char *delimiter, int max_tokens) EINA_ARG_NONNULL(1, 2) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Splits a string using a delimiter and returns number of elements.
@@ -216,7 +216,7 @@ EAPI char **eina_str_split(const char *string, const char *delimiter, i
*
* @see eina_str_split()
*/
-EAPI char **eina_str_split_full(const char *string, const char *delimiter, int max_tokens, unsigned int *elements) EINA_ARG_NONNULL(1, 2, 4) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API char **eina_str_split_full(const char *string, const char *delimiter, int max_tokens, unsigned int *elements) EINA_ARG_NONNULL(1, 2, 4) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
@@ -245,7 +245,7 @@ EAPI char **eina_str_split_full(const char *string, const char *delimit
* @see eina_str_join()
* @see eina_str_join_static()
*/
-EAPI size_t eina_str_join_len(char *dst, size_t size, char sep, const char *a, size_t a_len, const char *b, size_t b_len) EINA_ARG_NONNULL(1, 4, 6);
+EINA_API size_t eina_str_join_len(char *dst, size_t size, char sep, const char *a, size_t a_len, const char *b, size_t b_len) EINA_ARG_NONNULL(1, 4, 6);
/**
@@ -265,7 +265,7 @@ EAPI size_t eina_str_join_len(char *dst, size_t size, char sep, const c
* @warning This function is guaranteed to break when '\0' characters are in @p text.
* DO NOT USE THIS FUNCTION IF YOUR TEXT CONTAINS NON-TERMINATING '\0' CHARACTERS.
*/
-EAPI char *eina_str_convert(const char *enc_from, const char *enc_to, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1, 2, 3);
+EINA_API char *eina_str_convert(const char *enc_from, const char *enc_to, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Uses Iconv to convert a text string from one encoding to another.
@@ -285,7 +285,7 @@ EAPI char *eina_str_convert(const char *enc_from, const char *enc_to,
*
* @since 1.8
*/
-EAPI char *eina_str_convert_len(const char *enc_from, const char *enc_to, const char *text, size_t len, size_t *retlen) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1, 2, 3);
+EINA_API char *eina_str_convert_len(const char *enc_from, const char *enc_to, const char *text, size_t len, size_t *retlen) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1, 2, 3);
/**
@@ -300,7 +300,7 @@ EAPI char *eina_str_convert_len(const char *enc_from, const char *enc_
* failure. When not used anymore, the
* returned value must be freed.
*/
-EAPI char *eina_str_escape(const char *str) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1);
+EINA_API char *eina_str_escape(const char *str) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1);
/**
@@ -312,7 +312,7 @@ EAPI char *eina_str_escape(const char *str) EINA_WARN_UNUSED_RESULT EI
* in [A-Z] to lowercase. If @p str is @c NULL or is an empty string,
* this function does nothing.
*/
-EAPI void eina_str_tolower(char **str);
+EINA_API void eina_str_tolower(char **str);
/**
* @brief Uppercases all the characters in range [a-z] in the given string.
@@ -323,7 +323,7 @@ EAPI void eina_str_tolower(char **str);
* in [a-z] to uppercase. If @p str is @c NULL or is an empty string,
* this function does nothing.
*/
-EAPI void eina_str_toupper(char **str);
+EINA_API void eina_str_toupper(char **str);
static inline size_t eina_str_join(char *dst, size_t size, char sep, const char *a, const char *b) EINA_ARG_NONNULL(1, 4, 5);
@@ -355,7 +355,7 @@ static inline size_t eina_strlen_bounded(const char *str, size_t maxlen) EINA_PU
* @return The copied memory, must be freed
* @since 1.13
*/
-EAPI unsigned char *eina_memdup(unsigned char *mem, size_t size, Eina_Bool terminate);
+EINA_API unsigned char *eina_memdup(unsigned char *mem, size_t size, Eina_Bool terminate);
/**
* @brief Creates and update the buffer based on strftime output.
@@ -381,7 +381,7 @@ EAPI unsigned char *eina_memdup(unsigned char *mem, size_t size, Eina_Bool termi
*
* @since 1.17.0
*/
-EAPI char *eina_strftime(const char *format, const struct tm *tm);
+EINA_API char *eina_strftime(const char *format, const struct tm *tm);
static inline size_t eina_strlen_bounded(const char *str, size_t maxlen);
diff --git a/src/lib/eina/eina_strbuf.c b/src/lib/eina/eina_strbuf.c
index 69d6a30cfe..9c76e2647e 100644
--- a/src/lib/eina/eina_strbuf.c
+++ b/src/lib/eina/eina_strbuf.c
@@ -78,7 +78,7 @@ static const char __STRBUF_MAGIC_STR[] = "Eina Strbuf";
*============================================================================*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...)
{
va_list args;
@@ -98,7 +98,7 @@ eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...)
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args)
{
char *str;
@@ -115,7 +115,7 @@ eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args)
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...)
{
va_list args;
@@ -135,7 +135,7 @@ eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...)
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_strbuf_insert_vprintf(Eina_Strbuf *buf,
const char *fmt,
size_t pos,
@@ -155,7 +155,7 @@ eina_strbuf_insert_vprintf(Eina_Strbuf *buf,
return ret;
}
-EAPI void
+EINA_API void
eina_strbuf_trim(Eina_Strbuf *buf)
{
unsigned char *c = buf->buf;
@@ -171,7 +171,7 @@ eina_strbuf_trim(Eina_Strbuf *buf)
((unsigned char *)buf->buf)[buf->len] = '\0';
}
-EAPI void
+EINA_API void
eina_strbuf_ltrim(Eina_Strbuf *buf)
{
unsigned char *c = buf->buf;
@@ -185,7 +185,7 @@ eina_strbuf_ltrim(Eina_Strbuf *buf)
((unsigned char *)buf->buf)[buf->len] = '\0';
}
-EAPI void
+EINA_API void
eina_strbuf_rtrim(Eina_Strbuf *buf)
{
while (buf->len > 0 && isspace(((unsigned char*)(buf->buf))[buf->len - 1]))
@@ -193,7 +193,7 @@ eina_strbuf_rtrim(Eina_Strbuf *buf)
((unsigned char *)buf->buf)[buf->len] = '\0';
}
-EAPI void
+EINA_API void
eina_strbuf_tolower(Eina_Strbuf *buf)
{
if (!buf || !(buf->buf)) return;
@@ -201,7 +201,7 @@ eina_strbuf_tolower(Eina_Strbuf *buf)
eina_str_tolower((char **)&(buf->buf));
}
-EAPI Eina_Strbuf *
+EINA_API Eina_Strbuf *
eina_strbuf_substr_get(Eina_Strbuf *buf, size_t pos, size_t len)
{
char *str;
@@ -216,7 +216,7 @@ eina_strbuf_substr_get(Eina_Strbuf *buf, size_t pos, size_t len)
return eina_strbuf_manage_new(str);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_strbuf_append_strftime(Eina_Strbuf *buf, const char *format, const struct tm *tm)
{
char *outputbuf;
@@ -230,7 +230,7 @@ eina_strbuf_append_strftime(Eina_Strbuf *buf, const char *format, const struct t
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_strbuf_insert_strftime(Eina_Strbuf *buf, const char *format, const struct tm *tm, size_t pos)
{
char *outputbuf;
diff --git a/src/lib/eina/eina_strbuf.h b/src/lib/eina/eina_strbuf.h
index 73d166433d..1018df53fe 100644
--- a/src/lib/eina/eina_strbuf.h
+++ b/src/lib/eina/eina_strbuf.h
@@ -79,7 +79,7 @@ typedef struct _Eina_Strbuf Eina_Strbuf;
* @see eina_strbuf_append()
* @see eina_strbuf_string_get()
*/
-EAPI Eina_Strbuf *eina_strbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Strbuf *eina_strbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new string buffer using the passed string.
@@ -89,7 +89,8 @@ EAPI Eina_Strbuf *eina_strbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
*
* This function creates a new string buffer. The passed string is used
* directly as the buffer, it's effectively the inverse of
- * eina_strbuf_string_steal(). The passed string must be malloc'd.
+ * eina_strbuf_string_steal().
+ * The passed string must be malloc'd, and its ownership will transfer to Eina_Strbuf(do not free it with free()).
* To free the resources, use eina_strbuf_free().
*
* @see eina_strbuf_free()
@@ -98,7 +99,7 @@ EAPI Eina_Strbuf *eina_strbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
*
* @since 1.1.0
*/
-EAPI Eina_Strbuf *eina_strbuf_manage_new(char *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Strbuf *eina_strbuf_manage_new(char *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new string buffer using the passed string.
@@ -116,7 +117,7 @@ EAPI Eina_Strbuf *eina_strbuf_manage_new(char *str) EINA_MALLOC EINA_WARN_UNUSED
*
* @since 1.2.0
*/
-EAPI Eina_Strbuf *eina_strbuf_manage_new_length(char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Strbuf *eina_strbuf_manage_new_length(char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new string buffer using the passed string.
@@ -137,7 +138,7 @@ EAPI Eina_Strbuf *eina_strbuf_manage_new_length(char *str, size_t length) EINA_M
*
* @since 1.9.0
*/
-EAPI Eina_Strbuf *eina_strbuf_manage_read_only_new_length(const char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Strbuf *eina_strbuf_manage_read_only_new_length(const char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Frees a string buffer.
@@ -147,7 +148,7 @@ EAPI Eina_Strbuf *eina_strbuf_manage_read_only_new_length(const char *str, size_
* This function frees the memory of @p buf. @p buf must have been
* created by eina_strbuf_new().
*/
-EAPI void eina_strbuf_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_strbuf_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Resets a string buffer.
@@ -157,7 +158,7 @@ EAPI void eina_strbuf_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
* This function resets @p buf: the buffer len is set to 0, and the
* string data is set to '\\0'. No memory is freed.
*/
-EAPI void eina_strbuf_reset(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_strbuf_reset(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Appends a string to a buffer, reallocating as necessary.
@@ -174,7 +175,7 @@ EAPI void eina_strbuf_reset(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
* @see eina_strbuf_append()
* @see eina_strbuf_append_length()
*/
-EAPI Eina_Bool eina_strbuf_append(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_append(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends an escaped string to a buffer, reallocating as necessary.
@@ -185,7 +186,7 @@ EAPI Eina_Bool eina_strbuf_append(Eina_Strbuf *buf, const char *str) EINA_ARG_NO
*
* This function escapes and then appends the string @p str to @p buf.
*/
-EAPI Eina_Bool eina_strbuf_append_escaped(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_append_escaped(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a string to a buffer, reallocating as necessary,
@@ -206,7 +207,7 @@ EAPI Eina_Bool eina_strbuf_append_escaped(Eina_Strbuf *buf, const char *str) EIN
* @see eina_strbuf_append()
* @see eina_strbuf_append_length()
*/
-EAPI Eina_Bool eina_strbuf_append_n(Eina_Strbuf *buf, const char *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_append_n(Eina_Strbuf *buf, const char *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a string of exact length to a buffer, reallocating as
@@ -226,7 +227,7 @@ EAPI Eina_Bool eina_strbuf_append_n(Eina_Strbuf *buf, const char *str, size_t ma
* @see eina_strbuf_append()
* @see eina_strbuf_append_n()
*/
-EAPI Eina_Bool eina_strbuf_append_length(Eina_Strbuf *buf, const char *str, size_t length) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_append_length(Eina_Strbuf *buf, const char *str, size_t length) EINA_ARG_NONNULL(1, 2);
/**
* @brief Append a slice to a buffer, reallocating as necessary.
@@ -239,7 +240,7 @@ EAPI Eina_Bool eina_strbuf_append_length(Eina_Strbuf *buf, const char *str, size
*
* @since 1.19.0
*/
-EAPI Eina_Bool eina_strbuf_append_slice(Eina_Strbuf *buf, const Eina_Slice slice) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_strbuf_append_slice(Eina_Strbuf *buf, const Eina_Slice slice) EINA_ARG_NONNULL(1);
/**
* @brief Appends an Eina_Strbuf to a buffer, reallocating as necessary.
@@ -258,7 +259,7 @@ EAPI Eina_Bool eina_strbuf_append_slice(Eina_Strbuf *buf, const Eina_Slice slice
*
* @since 1.9.0
*/
-EAPI Eina_Bool eina_strbuf_append_buffer(Eina_Strbuf *buf, const Eina_Strbuf *data) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_append_buffer(Eina_Strbuf *buf, const Eina_Strbuf *data) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a character to a string buffer, reallocating as
@@ -270,7 +271,7 @@ EAPI Eina_Bool eina_strbuf_append_buffer(Eina_Strbuf *buf, const Eina_Strbuf *da
*
* This function appends @p c to @p buf.
*/
-EAPI Eina_Bool eina_strbuf_append_char(Eina_Strbuf *buf, char c) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_strbuf_append_char(Eina_Strbuf *buf, char c) EINA_ARG_NONNULL(1);
/**
* @brief Appends data elements to a buffer using printf-style formatting.
@@ -287,7 +288,7 @@ EAPI Eina_Bool eina_strbuf_append_char(Eina_Strbuf *buf, char c) EINA_ARG_NONNUL
*
* @see eina_strbuf_append()
*/
-EAPI Eina_Bool eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 3);
+EINA_API Eina_Bool eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 3);
/**
* @brief Appends data elements to a string buffer using a va_list.
@@ -299,7 +300,7 @@ EAPI Eina_Bool eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...)
*
* @see eina_strbuf_append_printf()
*/
-EAPI Eina_Bool eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts a string into a buffer, reallocating as necessary.
@@ -314,7 +315,7 @@ EAPI Eina_Bool eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_
* eina_strbuf_insert_length(). If the length is known beforehand,
* consider using that variant.
*/
-EAPI Eina_Bool eina_strbuf_insert(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_insert(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts an escaped string into a buffer, reallocating as
@@ -328,7 +329,7 @@ EAPI Eina_Bool eina_strbuf_insert(Eina_Strbuf *buf, const char *str, size_t pos)
* This function escapes and inserts the string @p str into @p buf at
* position @p pos.
*/
-EAPI Eina_Bool eina_strbuf_insert_escaped(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_insert_escaped(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts a string of a maximum length into a buffer, reallocating as necessary.
@@ -347,7 +348,7 @@ EAPI Eina_Bool eina_strbuf_insert_escaped(Eina_Strbuf *buf, const char *str, siz
* should then be checked so that it is greater than the size of
* @p str).
*/
-EAPI Eina_Bool eina_strbuf_insert_n(Eina_Strbuf *buf, const char *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_insert_n(Eina_Strbuf *buf, const char *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts a string of an exact length into a buffer, reallocating as necessary.
@@ -367,7 +368,7 @@ EAPI Eina_Bool eina_strbuf_insert_n(Eina_Strbuf *buf, const char *str, size_t ma
* @see eina_strbuf_insert()
* @see eina_strbuf_insert_n()
*/
-EAPI Eina_Bool eina_strbuf_insert_length(Eina_Strbuf *buf, const char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_insert_length(Eina_Strbuf *buf, const char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Insert a slice into a buffer, reallocating as necessary.
@@ -381,7 +382,7 @@ EAPI Eina_Bool eina_strbuf_insert_length(Eina_Strbuf *buf, const char *str, size
*
* @since 1.19.0
*/
-EAPI Eina_Bool eina_strbuf_insert_slice(Eina_Strbuf *buf, const Eina_Slice slice, size_t pos) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_strbuf_insert_slice(Eina_Strbuf *buf, const Eina_Slice slice, size_t pos) EINA_ARG_NONNULL(1);
/**
* @brief Inserts a character into a string buffer, reallocating as
@@ -394,7 +395,7 @@ EAPI Eina_Bool eina_strbuf_insert_slice(Eina_Strbuf *buf, const Eina_Slice slice
*
* This function inserts @p c into @p buf at position @p pos.
*/
-EAPI Eina_Bool eina_strbuf_insert_char(Eina_Strbuf *buf, char c, size_t pos) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_strbuf_insert_char(Eina_Strbuf *buf, char c, size_t pos) EINA_ARG_NONNULL(1);
/**
* @brief Inserts data elements into a buffer using printf-style formatting.
@@ -409,7 +410,7 @@ EAPI Eina_Bool eina_strbuf_insert_char(Eina_Strbuf *buf, char c, size_t pos) EIN
* the position @p pos. @p fmt must be of a valid format for printf family of
* functions.
*/
-EAPI Eina_Bool eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 4);
+EINA_API Eina_Bool eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 4);
/**
* @brief Inserts data elements into a buffer using a va_list.
@@ -422,7 +423,7 @@ EAPI Eina_Bool eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size
*
* @see eina_strbuf_insert_printf
*/
-EAPI Eina_Bool eina_strbuf_insert_vprintf(Eina_Strbuf *buf, const char *fmt, size_t pos, va_list args) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_strbuf_insert_vprintf(Eina_Strbuf *buf, const char *fmt, size_t pos, va_list args) EINA_ARG_NONNULL(1, 2);
/**
* @def eina_strbuf_prepend(buf, str)
@@ -525,7 +526,7 @@ EAPI Eina_Bool eina_strbuf_insert_vprintf(Eina_Strbuf *buf, const char *fmt, siz
* in bytes.
*/
-EAPI Eina_Bool eina_strbuf_remove(Eina_Strbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_strbuf_remove(Eina_Strbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
/**
* @brief Retrieves a pointer to the contents of a string buffer.
@@ -541,7 +542,7 @@ EAPI Eina_Bool eina_strbuf_remove(Eina_Strbuf *buf, size_t start, size_t end) EI
*
* @see eina_strbuf_string_steal()
*/
-EAPI const char *eina_strbuf_string_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API const char *eina_strbuf_string_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Steals the contents of a string buffer.
@@ -556,7 +557,7 @@ EAPI const char *eina_strbuf_string_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL
*
* @see eina_strbuf_string_get()
*/
-EAPI char *eina_strbuf_string_steal(Eina_Strbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API char *eina_strbuf_string_steal(Eina_Strbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Frees the contents of a string buffer but not the buffer.
@@ -566,7 +567,7 @@ EAPI char *eina_strbuf_string_steal(Eina_Strbuf *buf) EINA_MALLOC EINA_WARN_UNUS
* This function frees the string contained in @p buf without freeing
* @p buf.
*/
-EAPI void eina_strbuf_string_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_strbuf_string_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Retrieves the length of the string buffer's content.
@@ -576,7 +577,7 @@ EAPI void eina_strbuf_string_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
*
* This function returns the length of @p buf.
*/
-EAPI size_t eina_strbuf_length_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API size_t eina_strbuf_length_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Replaces a substring in the buffer with another string.
@@ -590,7 +591,7 @@ EAPI size_t eina_strbuf_length_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) E
* This function replaces the n-th occurrence of @p str in @p buf with
* @p with.
*/
-EAPI Eina_Bool eina_strbuf_replace(Eina_Strbuf *buf, const char *str, const char *with, unsigned int n) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API Eina_Bool eina_strbuf_replace(Eina_Strbuf *buf, const char *str, const char *with, unsigned int n) EINA_ARG_NONNULL(1, 2, 3);
/**
* @def eina_strbuf_replace_first(buf, str, with)
@@ -608,6 +609,19 @@ EAPI Eina_Bool eina_strbuf_replace(Eina_Strbuf *buf, const char *str, const char
#define eina_strbuf_replace_first(buf, str, with) eina_strbuf_replace(buf, str, with, 1)
/**
+ * @brief Replaces the last occurrence of a substring with another string.
+ *
+ * @param[in,out] buf The string buffer.
+ * @param[in] str The text to match.
+ * @param[in] with The replacement string.
+ * @return #EINA_TRUE on success, #EINA_FALSE on failure.
+ *
+ * This function replaces the last occurrence of @p str in @p buf with
+ * @p with.
+ */
+EINA_API Eina_Bool eina_strbuf_replace_last(Eina_Strbuf *buf, const char *str, const char *with) EINA_ARG_NONNULL(1, 2, 3);
+
+/**
* @brief Replaces all matching substrings with another string.
*
* @param[in,out] buf The string buffer.
@@ -618,7 +632,7 @@ EAPI Eina_Bool eina_strbuf_replace(Eina_Strbuf *buf, const char *str, const char
* This function replaces all the occurrences of @p str in @p buf with
* the string @p with.
*/
-EAPI int eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API int eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with) EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Trims the string buffer.
@@ -628,7 +642,7 @@ EAPI int eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *
* This function removes whitespace at the beginning and end of the
* buffer's string.
*/
-EAPI void eina_strbuf_trim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_strbuf_trim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Left trims the string buffer.
@@ -638,7 +652,7 @@ EAPI void eina_strbuf_trim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
* This function removes whitespace at the beginning of the buffer's
* string.
*/
-EAPI void eina_strbuf_ltrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_strbuf_ltrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Right trims the string buffer.
@@ -647,7 +661,7 @@ EAPI void eina_strbuf_ltrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
*
* This function removes whitespace at the end of the buffer's string.
*/
-EAPI void eina_strbuf_rtrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_strbuf_rtrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Converts the string to lower case.
@@ -659,7 +673,7 @@ EAPI void eina_strbuf_rtrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
*
* @since 1.17
*/
-EAPI void eina_strbuf_tolower(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_strbuf_tolower(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Obtains substring from a source string buffer.
@@ -676,7 +690,7 @@ EAPI void eina_strbuf_tolower(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
*
* @since 1.17
*/
-EAPI Eina_Strbuf * eina_strbuf_substr_get(Eina_Strbuf *buf, size_t pos, size_t len) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Strbuf * eina_strbuf_substr_get(Eina_Strbuf *buf, size_t pos, size_t len) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets a read-only slice of the buffer contents.
@@ -687,7 +701,7 @@ EAPI Eina_Strbuf * eina_strbuf_substr_get(Eina_Strbuf *buf, size_t pos, size_t l
*
* @since 1.19
*/
-EAPI Eina_Slice eina_strbuf_slice_get(const Eina_Strbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Slice eina_strbuf_slice_get(const Eina_Strbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Gets a read-write slice of the buffer contents.
@@ -699,7 +713,7 @@ EAPI Eina_Slice eina_strbuf_slice_get(const Eina_Strbuf *buf) EINA_WARN_UNUSED_R
*
* @since 1.19.0
*/
-EAPI Eina_Rw_Slice eina_strbuf_rw_slice_get(const Eina_Strbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Rw_Slice eina_strbuf_rw_slice_get(const Eina_Strbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Frees the buffer, returning its old contents.
@@ -710,7 +724,7 @@ EAPI Eina_Rw_Slice eina_strbuf_rw_slice_get(const Eina_Strbuf *buf) EINA_WARN_UN
*
* @since 1.19
*/
-EAPI char* eina_strbuf_release(Eina_Strbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API char* eina_strbuf_release(Eina_Strbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Appends a strftime-style timestamp to the buffer.
@@ -738,7 +752,7 @@ EAPI char* eina_strbuf_release(Eina_Strbuf *buf) EINA_WARN_UNUSED_RESULT EINA_AR
*
* @since 1.21
*/
-EAPI Eina_Bool eina_strbuf_append_strftime(Eina_Strbuf *buf, const char *fmt, const struct tm *tm);
+EINA_API Eina_Bool eina_strbuf_append_strftime(Eina_Strbuf *buf, const char *fmt, const struct tm *tm);
/**
* @brief Inserts a strftime-style timestamp into the buffer.
@@ -767,7 +781,7 @@ EAPI Eina_Bool eina_strbuf_append_strftime(Eina_Strbuf *buf, const char *fmt, co
*
* @since 1.21
*/
-EAPI Eina_Bool eina_strbuf_insert_strftime(Eina_Strbuf *buf, const char *fmt, const struct tm *tm, size_t pos);
+EINA_API Eina_Bool eina_strbuf_insert_strftime(Eina_Strbuf *buf, const char *fmt, const struct tm *tm, size_t pos);
/**
* @def eina_strbuf_prepend_strftime(buf, fmt, tm)
diff --git a/src/lib/eina/eina_strbuf_common.c b/src/lib/eina/eina_strbuf_common.c
index e08d4b79fe..96d404690c 100644
--- a/src/lib/eina/eina_strbuf_common.c
+++ b/src/lib/eina/eina_strbuf_common.c
@@ -217,7 +217,7 @@ _eina_strbuf_common_insert_length(size_t csize,
return EINA_FALSE;
/* move the existing text */
- memmove(((unsigned char *)(buf->buf)) + ((len + pos) * csize),
+ memmove(((unsigned char *)(buf->buf)) + ((len + pos) * csize),
((unsigned char *)(buf->buf)) + (pos * csize),
(buf->len - pos) * csize);
@@ -484,7 +484,7 @@ eina_strbuf_common_append(size_t csize,
if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len)))
return EINA_FALSE;
- memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str,
+ memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str,
(len + 1) * csize);
buf->len += len;
return EINA_TRUE;
@@ -525,7 +525,7 @@ eina_strbuf_common_append_n(size_t csize,
if (len > maxlen) len = maxlen;
if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len)))
return EINA_FALSE;
- memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str,
+ memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str,
len * csize);
buf->len += len;
memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize);
@@ -757,6 +757,7 @@ eina_strbuf_common_remove(size_t csize,
if (!dest) return 0;
memcpy(dest, buf->buf, buf->len);
buf->buf = dest;
+ buf->ro = EINA_FALSE;
}
remove_len = end - start;
@@ -825,6 +826,7 @@ eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf *buf)
if (!dest) return 0;
memcpy(dest, buf->buf, buf->len);
buf->buf = dest;
+ buf->ro = EINA_FALSE;
}
ret = buf->buf;
@@ -922,7 +924,7 @@ eina_strbuf_common_rw_slice_get(const Eina_Strbuf *buf)
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_strbuf_replace(Eina_Strbuf *buf,
const char *str,
const char *with,
@@ -945,6 +947,10 @@ eina_strbuf_replace(Eina_Strbuf *buf,
if (n) spos++;
}
+ pos = spos - (const char *)buf->buf;
+ len1 = strlen(str);
+ len2 = strlen(with);
+
/* This is a read only buffer which need change to be made */
if (buf->ro)
{
@@ -954,18 +960,71 @@ eina_strbuf_replace(Eina_Strbuf *buf,
if (!dest) return 0;
memcpy(dest, buf->buf, buf->len);
buf->buf = dest;
+ buf->ro = EINA_FALSE;
+ }
+
+ if (len1 != len2)
+ {
+ /* resize the buffer if necessary */
+ if (EINA_UNLIKELY(!_eina_strbuf_common_grow(_STRBUF_CSIZE, buf,
+ buf->len - len1 + len2)))
+ return EINA_FALSE; /* move the existing text */
+ memmove(((unsigned char *)(buf->buf)) + pos + len2,
+ ((unsigned char *)(buf->buf)) + pos + len1,
+ buf->len - pos - len1);
}
+ /* and now insert the given string */
+ memcpy(((unsigned char *)(buf->buf)) + pos, with, len2);
+ buf->len += len2 - len1;
+ memset(((unsigned char *)(buf->buf)) + buf->len, 0, 1);
+ return EINA_TRUE;
+}
+
+EINA_API Eina_Bool
+eina_strbuf_replace_last(Eina_Strbuf *buf,
+ const char *str,
+ const char *with)
+{
+ size_t len1, len2;
+ char *spos, *spos_next;
+ size_t pos;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL( str, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(with, EINA_FALSE);
+ EINA_MAGIC_CHECK_STRBUF(buf, 0);
+
+ spos = NULL;
+ spos_next = strstr(buf->buf, str);
+ while (spos_next && *spos_next)
+ {
+ spos = spos_next;
+ spos_next = strstr(spos + 1, str);
+ }
+
+ if (!spos) return EINA_FALSE;
pos = spos - (const char *)buf->buf;
len1 = strlen(str);
len2 = strlen(with);
+
+ /* This is a read only buffer which need change to be made */
+ if (buf->ro)
+ {
+ char *dest;
+
+ dest = malloc(buf->size);
+ if (!dest) return 0;
+ memcpy(dest, buf->buf, buf->len);
+ buf->buf = dest;
+ }
+
if (len1 != len2)
{
/* resize the buffer if necessary */
if (EINA_UNLIKELY(!_eina_strbuf_common_grow(_STRBUF_CSIZE, buf,
buf->len - len1 + len2)))
return EINA_FALSE; /* move the existing text */
- memmove(((unsigned char *)(buf->buf)) + pos + len2,
+ memmove(((unsigned char *)(buf->buf)) + pos + len2,
((unsigned char *)(buf->buf)) + pos + len1,
buf->len - pos - len1);
}
@@ -976,7 +1035,7 @@ eina_strbuf_replace(Eina_Strbuf *buf,
return EINA_TRUE;
}
-EAPI int
+EINA_API int
eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with)
{
size_t len1, len2, len;
@@ -1002,6 +1061,7 @@ eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with)
if (!dest) return 0;
memcpy(dest, buf->buf, buf->len);
buf->buf = dest;
+ buf->ro = EINA_FALSE;
}
len1 = strlen(str);
diff --git a/src/lib/eina/eina_strbuf_template_c.x b/src/lib/eina/eina_strbuf_template_c.x
index e8c3b617d3..ceea0eeb54 100644
--- a/src/lib/eina/eina_strbuf_template_c.x
+++ b/src/lib/eina/eina_strbuf_template_c.x
@@ -22,7 +22,7 @@
* API *
*============================================================================*/
-EAPI _STRBUF_STRUCT_NAME *
+EINA_API _STRBUF_STRUCT_NAME *
_FUNC_EXPAND(manage_new)(_STRBUF_DATA_TYPE *str)
{
_STRBUF_STRUCT_NAME *buf = eina_strbuf_common_manage_new(_STRBUF_CSIZE,
@@ -31,14 +31,14 @@ _FUNC_EXPAND(manage_new)(_STRBUF_DATA_TYPE *str)
return buf;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(append)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_append(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str));
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(append_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str)
{
_STRBUF_DATA_TYPE *esc;
@@ -56,21 +56,21 @@ _FUNC_EXPAND(append_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(append_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_append_n(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), maxlen);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(insert)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
return eina_strbuf_common_insert(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), pos);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(insert_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos)
{
_STRBUF_DATA_TYPE *esc;
@@ -88,7 +88,7 @@ _FUNC_EXPAND(insert_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
_FUNC_EXPAND(insert_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen, size_t pos)
{
EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
diff --git a/src/lib/eina/eina_stringshare.c b/src/lib/eina/eina_stringshare.c
index efabdb2280..912c5a1530 100644
--- a/src/lib/eina/eina_stringshare.c
+++ b/src/lib/eina/eina_stringshare.c
@@ -529,7 +529,7 @@ eina_stringshare_shutdown(void)
* API *
*============================================================================*/
-EAPI void
+EINA_API void
eina_stringshare_del(Eina_Stringshare *str)
{
int slen;
@@ -569,7 +569,7 @@ eina_stringshare_del(Eina_Stringshare *str)
CRI("EEEK trying to del non-shared stringshare \"%s\"", str);
}
-EAPI Eina_Stringshare *
+EINA_API Eina_Stringshare *
eina_stringshare_add_length(const char *str, unsigned int slen)
{
if (!str)
@@ -602,14 +602,14 @@ eina_stringshare_add_length(const char *str, unsigned int slen)
sizeof(char), sizeof(char));
}
-EAPI Eina_Stringshare *
+EINA_API Eina_Stringshare *
eina_stringshare_add(const char *str)
{
if (!str) return NULL;
return eina_stringshare_add_length(str, strlen(str));
}
-EAPI Eina_Stringshare *
+EINA_API Eina_Stringshare *
eina_stringshare_printf(const char *fmt, ...)
{
va_list args;
@@ -633,7 +633,7 @@ eina_stringshare_printf(const char *fmt, ...)
return ret;
}
-EAPI Eina_Stringshare *
+EINA_API Eina_Stringshare *
eina_stringshare_vprintf(const char *fmt, va_list args)
{
char *tmp = NULL;
@@ -654,7 +654,7 @@ eina_stringshare_vprintf(const char *fmt, va_list args)
return ret;
}
-EAPI Eina_Stringshare *
+EINA_API Eina_Stringshare *
eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
{
va_list args;
@@ -681,7 +681,7 @@ eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
return eina_stringshare_add_length(tmp, size);
}
-EAPI Eina_Stringshare *
+EINA_API Eina_Stringshare *
eina_stringshare_ref(Eina_Stringshare *str)
{
int slen;
@@ -722,7 +722,7 @@ eina_stringshare_ref(Eina_Stringshare *str)
return eina_share_common_ref(stringshare_share, str);
}
-EAPI int
+EINA_API int
eina_stringshare_strlen(Eina_Stringshare *str)
{
int len;
@@ -747,7 +747,7 @@ eina_stringshare_strlen(Eina_Stringshare *str)
return len;
}
-EAPI void
+EINA_API void
eina_stringshare_dump(void)
{
eina_share_common_dump(stringshare_share,
diff --git a/src/lib/eina/eina_stringshare.h b/src/lib/eina/eina_stringshare.h
index ccb865075f..a3b7efb11d 100644
--- a/src/lib/eina/eina_stringshare.h
+++ b/src/lib/eina/eina_stringshare.h
@@ -194,7 +194,7 @@ typedef const char Eina_Stringshare;
*
* @see eina_share_common_add()
*/
-EAPI Eina_Stringshare *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Stringshare *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves an instance of a string for use in a program.
@@ -214,7 +214,7 @@ EAPI Eina_Stringshare *eina_stringshare_add_length(const char *str, unsigned in
*
* @see eina_stringshare_add_length()
*/
-EAPI Eina_Stringshare *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Stringshare *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves an instance of a string for use in a program
@@ -235,7 +235,7 @@ EAPI Eina_Stringshare *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_R
*
* @see eina_stringshare_nprintf()
*/
-EAPI Eina_Stringshare *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2);
+EINA_API Eina_Stringshare *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2);
/**
* @brief Retrieves an instance of a string for use in a program
@@ -257,7 +257,7 @@ EAPI Eina_Stringshare *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_
*
* @see eina_stringshare_nprintf()
*/
-EAPI Eina_Stringshare *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Stringshare *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves an instance of a string for use in a program
@@ -278,7 +278,7 @@ EAPI Eina_Stringshare *eina_stringshare_vprintf(const char *fmt, va_list args)
*
* @see eina_stringshare_printf()
*/
-EAPI Eina_Stringshare *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3);
+EINA_API Eina_Stringshare *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3);
/**
* Increment references of the given shared string.
@@ -294,7 +294,7 @@ EAPI Eina_Stringshare *eina_stringshare_nprintf(unsigned int len, const char *f
*
* There is no unref since this is the work of eina_share_common_del().
*/
-EAPI Eina_Stringshare *eina_stringshare_ref(Eina_Stringshare *str);
+EINA_API Eina_Stringshare *eina_stringshare_ref(Eina_Stringshare *str);
/**
* @brief Notes that the given string has lost an instance.
@@ -309,7 +309,7 @@ EAPI Eina_Stringshare *eina_stringshare_ref(Eina_Stringshare *str);
* @note If the given pointer is not shared, bad things will happen, likely a
* segmentation fault.
*/
-EAPI void eina_stringshare_del(Eina_Stringshare *str);
+EINA_API void eina_stringshare_del(Eina_Stringshare *str);
/**
* @brief Notes that the given string @b must be shared.
@@ -324,7 +324,7 @@ EAPI void eina_stringshare_del(Eina_Stringshare *str);
* @note If the given pointer is not shared, bad things will happen, likely a
* segmentation fault. If in doubt, try strlen().
*/
-EAPI int eina_stringshare_strlen(Eina_Stringshare *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
+EINA_API int eina_stringshare_strlen(Eina_Stringshare *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
/**
* @brief Dumps the contents of the share_common.
@@ -332,7 +332,7 @@ EAPI int eina_stringshare_strlen(Eina_Stringshare *str) EINA_PURE
* This function dumps all strings in the share_common to stdout with a
* DDD: prefix per line and a memory usage summary.
*/
-EAPI void eina_stringshare_dump(void);
+EINA_API void eina_stringshare_dump(void);
static inline Eina_Bool eina_stringshare_replace(Eina_Stringshare **p_str, const char *news) EINA_ARG_NONNULL(1);
static inline Eina_Bool eina_stringshare_replace_length(Eina_Stringshare **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1);
diff --git a/src/lib/eina/eina_thread.c b/src/lib/eina/eina_thread.c
index c1a1ef0d22..75623edb0a 100644
--- a/src/lib/eina/eina_thread.c
+++ b/src/lib/eina/eina_thread.c
@@ -65,8 +65,11 @@ _eina_thread_create(Eina_Thread *t, int affinity, void *(*func)(void *data), voi
#ifndef _WIN32
sigset_t oldset, newset;
#endif
-
- pthread_attr_init(&attr);
+
+ if (pthread_attr_init(&attr) != 0)
+ {
+ return EINA_FALSE;
+ }
if (affinity >= 0)
{
#ifdef EINA_HAVE_PTHREAD_AFFINITY
@@ -141,11 +144,53 @@ _eina_internal_call(void *context)
EINA_THREAD_CLEANUP_PUSH(free, c);
- if (c->prio == EINA_THREAD_BACKGROUND ||
- c->prio == EINA_THREAD_IDLE)
- eina_sched_prio_drop();
-
self = pthread_self();
+
+ if (c->prio == EINA_THREAD_IDLE)
+ {
+ struct sched_param params;
+ int min;
+#ifdef SCHED_IDLE
+ int pol = SCHED_IDLE;
+#else
+ int pol;
+ pthread_getschedparam(self, &pol, &params);
+#endif
+ min = sched_get_priority_min(pol);
+ params.sched_priority = min;
+ pthread_setschedparam(self, pol, &params);
+ }
+ else if (c->prio == EINA_THREAD_BACKGROUND)
+ {
+ struct sched_param params;
+ int min, max;
+#ifdef SCHED_BATCH
+ int pol = SCHED_BATCH;
+#else
+ int pol;
+ pthread_getschedparam(self, &pol, &params);
+#endif
+ min = sched_get_priority_min(pol);
+ max = sched_get_priority_max(pol);
+ params.sched_priority = (max - min) / 2;
+ pthread_setschedparam(self, pol, &params);
+ }
+// do nothing for normal
+// else if (c->prio == EINA_THREAD_NORMAL)
+// {
+// }
+ else if (c->prio == EINA_THREAD_URGENT)
+ {
+ struct sched_param params;
+ int max, pol;
+
+ pthread_getschedparam(self, &pol, &params);
+ max = sched_get_priority_max(pol);
+ params.sched_priority += 5;
+ if (params.sched_priority > max) params.sched_priority = max;
+ pthread_setschedparam(self, pol, &params);
+ }
+
_eina_debug_thread_add(&self);
EINA_THREAD_CLEANUP_PUSH(_eina_debug_thread_del, &self);
r = c->func((void*) c->data, eina_thread_self());
@@ -155,19 +200,19 @@ _eina_internal_call(void *context)
return r;
}
-EAPI Eina_Thread
+EINA_API Eina_Thread
eina_thread_self(void)
{
return _eina_thread_self();
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_thread_equal(Eina_Thread t1, Eina_Thread t2)
{
return !!_eina_thread_equal(t1, t2);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_thread_create(Eina_Thread *t,
Eina_Thread_Priority prio, int affinity,
Eina_Thread_Cb func, const void *data)
@@ -194,13 +239,13 @@ eina_thread_create(Eina_Thread *t,
return EINA_FALSE;
}
-EAPI void *
+EINA_API void *
eina_thread_join(Eina_Thread t)
{
return _eina_thread_join(t);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_thread_name_set(Eina_Thread t, const char *name)
{
#ifdef EINA_HAVE_PTHREAD_SETNAME
@@ -224,14 +269,14 @@ eina_thread_name_set(Eina_Thread t, const char *name)
return EINA_FALSE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_thread_cancel(Eina_Thread t)
{
if (!t) return EINA_FALSE;
return pthread_cancel((pthread_t)t) == 0;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_thread_cancellable_set(Eina_Bool cancellable, Eina_Bool *was_cancellable)
{
int state = cancellable ? PTHREAD_CANCEL_ENABLE : PTHREAD_CANCEL_DISABLE;
@@ -248,13 +293,13 @@ eina_thread_cancellable_set(Eina_Bool cancellable, Eina_Bool *was_cancellable)
return r == 0;
}
-EAPI void
+EINA_API void
eina_thread_cancel_checkpoint(void)
{
pthread_testcancel();
}
-EAPI void *
+EINA_API void *
eina_thread_cancellable_run(Eina_Thread_Cancellable_Run_Cb cb, Eina_Free_Cb cleanup_cb, void *data)
{
Eina_Bool old = EINA_FALSE;
@@ -268,7 +313,7 @@ eina_thread_cancellable_run(Eina_Thread_Cancellable_Run_Cb cb, Eina_Free_Cb clea
return ret;
}
-EAPI const void *EINA_THREAD_JOIN_CANCELED = PTHREAD_CANCELED;
+EINA_API const void *EINA_THREAD_JOIN_CANCELED = PTHREAD_CANCELED;
Eina_Bool
eina_thread_init(void)
diff --git a/src/lib/eina/eina_thread.h b/src/lib/eina/eina_thread.h
index 15e522fc4c..d0ca8138c2 100644
--- a/src/lib/eina/eina_thread.h
+++ b/src/lib/eina/eina_thread.h
@@ -26,13 +26,8 @@
#include <stdint.h>
/**
- * @addtogroup Eina_Tools_Group Tools
- *
- * @{
- */
-
-/**
* @defgroup Eina_Thread_Group Thread
+ * @ingroup Eina_Tools_Group
*
* Abstracts platform threads, providing a uniform API. It's modeled
* after POSIX THREADS (pthreads), on Linux they are almost 1:1
@@ -62,10 +57,10 @@ typedef void *(*Eina_Thread_Cb)(void *data, Eina_Thread t);
*/
typedef enum _Eina_Thread_Priority
{
- EINA_THREAD_URGENT,
- EINA_THREAD_NORMAL,
- EINA_THREAD_BACKGROUND,
- EINA_THREAD_IDLE
+ EINA_THREAD_URGENT, /**< Higher than average process priority */
+ EINA_THREAD_NORMAL, /**< Standard process priority */
+ EINA_THREAD_BACKGROUND, /**< Lower than average process priority */
+ EINA_THREAD_IDLE /**< Thread to be executed only when the processor is idle */
} Eina_Thread_Priority;
/**
@@ -73,7 +68,7 @@ typedef enum _Eina_Thread_Priority
* @return identifier of current thread.
* @since 1.8
*/
-EAPI Eina_Thread eina_thread_self(void) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Thread eina_thread_self(void) EINA_WARN_UNUSED_RESULT;
/**
* @brief Checks if two thread identifiers are the same.
@@ -82,7 +77,7 @@ EAPI Eina_Thread eina_thread_self(void) EINA_WARN_UNUSED_RESULT;
* @return #EINA_TRUE if they are equal, #EINA_FALSE otherwise.
* @since 1.8
*/
-EAPI Eina_Bool eina_thread_equal(Eina_Thread t1, Eina_Thread t2) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_thread_equal(Eina_Thread t1, Eina_Thread t2) EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new thread, setting its priority and affinity.
@@ -95,7 +90,7 @@ EAPI Eina_Bool eina_thread_equal(Eina_Thread t1, Eina_Thread t2) EINA_WARN_UNUSE
* @return #EINA_TRUE if thread was created, #EINA_FALSE on errors.
* @since 1.8
*/
-EAPI Eina_Bool eina_thread_create(Eina_Thread *t,
+EINA_API Eina_Bool eina_thread_create(Eina_Thread *t,
Eina_Thread_Priority prio, int affinity,
Eina_Thread_Cb func, const void *data) EINA_ARG_NONNULL(1, 4) EINA_WARN_UNUSED_RESULT;
@@ -111,7 +106,7 @@ EAPI Eina_Bool eina_thread_create(Eina_Thread *t,
*
* @since 1.19
*/
-EAPI extern const void *EINA_THREAD_JOIN_CANCELED;
+EINA_API extern const void *EINA_THREAD_JOIN_CANCELED;
/**
* @brief Joins a currently running thread, waiting until it finishes.
@@ -128,7 +123,7 @@ EAPI extern const void *EINA_THREAD_JOIN_CANCELED;
* EINA_THREAD_JOIN_CANCELED.
* @since 1.8
*/
-EAPI void *eina_thread_join(Eina_Thread t);
+EINA_API void *eina_thread_join(Eina_Thread t);
/**
* @brief Sets the name of a given thread for debugging purposes.
@@ -145,7 +140,7 @@ EAPI void *eina_thread_join(Eina_Thread t);
* otherwise.
* @since 1.16
*/
-EAPI Eina_Bool eina_thread_name_set(Eina_Thread t, const char *name);
+EINA_API Eina_Bool eina_thread_name_set(Eina_Thread t, const char *name);
/**
* @brief Attempts to cancel a running thread.
@@ -168,7 +163,7 @@ EAPI Eina_Bool eina_thread_name_set(Eina_Thread t, const char *name);
*
* @since 1.19
*/
-EAPI Eina_Bool eina_thread_cancel(Eina_Thread t);
+EINA_API Eina_Bool eina_thread_cancel(Eina_Thread t);
/**
* @brief Enables or disables if the current thread can be canceled.
@@ -206,7 +201,7 @@ EAPI Eina_Bool eina_thread_cancel(Eina_Thread t);
*
* @since 1.19
*/
-EAPI Eina_Bool eina_thread_cancellable_set(Eina_Bool cancellable, Eina_Bool *was_cancellable);
+EINA_API Eina_Bool eina_thread_cancellable_set(Eina_Bool cancellable, Eina_Bool *was_cancellable);
/**
* If the current thread is cancellable, this introduces a
@@ -222,7 +217,7 @@ EAPI Eina_Bool eina_thread_cancellable_set(Eina_Bool cancellable, Eina_Bool *was
*
* @since 1.19
*/
-EAPI void eina_thread_cancel_checkpoint(void);
+EINA_API void eina_thread_cancel_checkpoint(void);
/**
* @def EINA_THREAD_CLEANUP_PUSH(cleanup, data)
@@ -336,11 +331,7 @@ typedef void *(*Eina_Thread_Cancellable_Run_Cb)(void *data);
*
* @since 1.19
*/
-EAPI void *eina_thread_cancellable_run(Eina_Thread_Cancellable_Run_Cb cb, Eina_Free_Cb cleanup_cb, void *data);
-
-/**
- * @}
- */
+EINA_API void *eina_thread_cancellable_run(Eina_Thread_Cancellable_Run_Cb cb, Eina_Free_Cb cleanup_cb, void *data);
/**
* @}
diff --git a/src/lib/eina/eina_thread_queue.c b/src/lib/eina/eina_thread_queue.c
index 531800dac7..e0410185f1 100644
--- a/src/lib/eina/eina_thread_queue.c
+++ b/src/lib/eina/eina_thread_queue.c
@@ -397,7 +397,7 @@ eina_thread_queue_shutdown(void)
return EINA_TRUE;
}
-EAPI Eina_Thread_Queue *
+EINA_API Eina_Thread_Queue *
eina_thread_queue_new(void)
{
Eina_Thread_Queue *thq;
@@ -423,7 +423,7 @@ eina_thread_queue_new(void)
return thq;
}
-EAPI void
+EINA_API void
eina_thread_queue_free(Eina_Thread_Queue *thq)
{
if (!thq) return;
@@ -437,7 +437,7 @@ eina_thread_queue_free(Eina_Thread_Queue *thq)
free(thq);
}
-EAPI void *
+EINA_API void *
eina_thread_queue_send(Eina_Thread_Queue *thq, int size, void **allocref)
{
Eina_Thread_Queue_Msg *msg;
@@ -457,7 +457,7 @@ eina_thread_queue_send(Eina_Thread_Queue *thq, int size, void **allocref)
return msg;
}
-EAPI void
+EINA_API void
eina_thread_queue_send_done(Eina_Thread_Queue *thq, void *allocref)
{
_eina_thread_queue_msg_alloc_done(allocref);
@@ -483,7 +483,7 @@ eina_thread_queue_send_done(Eina_Thread_Queue *thq, void *allocref)
}
}
-EAPI void *
+EINA_API void *
eina_thread_queue_wait(Eina_Thread_Queue *thq, void **allocref)
{
Eina_Thread_Queue_Msg *msg;
@@ -504,13 +504,13 @@ eina_thread_queue_wait(Eina_Thread_Queue *thq, void **allocref)
return msg;
}
-EAPI void
+EINA_API void
eina_thread_queue_wait_done(Eina_Thread_Queue *thq EINA_UNUSED, void *allocref)
{
_eina_thread_queue_msg_fetch_done(allocref);
}
-EAPI void *
+EINA_API void *
eina_thread_queue_poll(Eina_Thread_Queue *thq, void **allocref)
{
Eina_Thread_Queue_Msg *msg;
@@ -534,7 +534,7 @@ eina_thread_queue_poll(Eina_Thread_Queue *thq, void **allocref)
return msg;
}
-EAPI int
+EINA_API int
eina_thread_queue_pending_get(const Eina_Thread_Queue *thq)
{
int pending;
@@ -549,25 +549,25 @@ eina_thread_queue_pending_get(const Eina_Thread_Queue *thq)
return pending;
}
-EAPI void
+EINA_API void
eina_thread_queue_parent_set(Eina_Thread_Queue *thq, Eina_Thread_Queue *thq_parent)
{
thq->parent = thq_parent;
}
-EAPI Eina_Thread_Queue *
+EINA_API Eina_Thread_Queue *
eina_thread_queue_parent_get(const Eina_Thread_Queue *thq)
{
return thq->parent;
}
-EAPI void
+EINA_API void
eina_thread_queue_fd_set(Eina_Thread_Queue *thq, int fd)
{
thq->fd = fd;
}
-EAPI int
+EINA_API int
eina_thread_queue_fd_get(const Eina_Thread_Queue *thq)
{
return thq->fd;
diff --git a/src/lib/eina/eina_thread_queue.h b/src/lib/eina/eina_thread_queue.h
index dd8f90d455..094d8bd41b 100644
--- a/src/lib/eina/eina_thread_queue.h
+++ b/src/lib/eina/eina_thread_queue.h
@@ -73,7 +73,7 @@ struct _Eina_Thread_Queue_Msg_Sub
*
* @since 1.11
*/
-EAPI Eina_Thread_Queue *
+EINA_API Eina_Thread_Queue *
eina_thread_queue_new(void);
/**
@@ -87,7 +87,7 @@ eina_thread_queue_new(void);
*
* @since 1.11
*/
-EAPI void
+EINA_API void
eina_thread_queue_free(Eina_Thread_Queue *thq) EINA_ARG_NONNULL(1);
/**
@@ -106,7 +106,7 @@ eina_thread_queue_free(Eina_Thread_Queue *thq) EINA_ARG_NONNULL(1);
*
* @since 1.11
*/
-EAPI void *
+EINA_API void *
eina_thread_queue_send(Eina_Thread_Queue *thq, int size, void **allocref) EINA_ARG_NONNULL(1, 3);
/**
@@ -120,7 +120,7 @@ eina_thread_queue_send(Eina_Thread_Queue *thq, int size, void **allocref) EINA_A
*
* @since 1.11
*/
-EAPI void
+EINA_API void
eina_thread_queue_send_done(Eina_Thread_Queue *thq, void *allocref) EINA_ARG_NONNULL(1, 2);
/**
@@ -140,7 +140,7 @@ eina_thread_queue_send_done(Eina_Thread_Queue *thq, void *allocref) EINA_ARG_NON
*
* @since 1.11
*/
-EAPI void *
+EINA_API void *
eina_thread_queue_wait(Eina_Thread_Queue *thq, void **allocref) EINA_ARG_NONNULL(1, 2);
/**
@@ -154,7 +154,7 @@ eina_thread_queue_wait(Eina_Thread_Queue *thq, void **allocref) EINA_ARG_NONNULL
*
* @since 1.11
*/
-EAPI void
+EINA_API void
eina_thread_queue_wait_done(Eina_Thread_Queue *thq, void *allocref) EINA_ARG_NONNULL(1, 2);
/**
@@ -172,7 +172,7 @@ eina_thread_queue_wait_done(Eina_Thread_Queue *thq, void *allocref) EINA_ARG_NON
*
* @since 1.11
*/
-EAPI void *
+EINA_API void *
eina_thread_queue_poll(Eina_Thread_Queue *thq, void **allocref) EINA_ARG_NONNULL(1, 2);
/**
@@ -186,7 +186,7 @@ eina_thread_queue_poll(Eina_Thread_Queue *thq, void **allocref) EINA_ARG_NONNULL
*
* @since 1.11
*/
-EAPI int
+EINA_API int
eina_thread_queue_pending_get(const Eina_Thread_Queue *thq) EINA_ARG_NONNULL(1);
/**
@@ -203,7 +203,7 @@ eina_thread_queue_pending_get(const Eina_Thread_Queue *thq) EINA_ARG_NONNULL(1);
*
* @since 1.11
*/
-EAPI void
+EINA_API void
eina_thread_queue_parent_set(Eina_Thread_Queue *thq, Eina_Thread_Queue *thq_parent) EINA_ARG_NONNULL(1);
/**
@@ -219,7 +219,7 @@ eina_thread_queue_parent_set(Eina_Thread_Queue *thq, Eina_Thread_Queue *thq_pare
*
* @since 1.11
*/
-EAPI Eina_Thread_Queue *
+EINA_API Eina_Thread_Queue *
eina_thread_queue_parent_get(const Eina_Thread_Queue *thq) EINA_ARG_NONNULL(1);
/**
@@ -239,7 +239,7 @@ eina_thread_queue_parent_get(const Eina_Thread_Queue *thq) EINA_ARG_NONNULL(1);
*
* @since 1.11
*/
-EAPI void
+EINA_API void
eina_thread_queue_fd_set(Eina_Thread_Queue *thq, int fd) EINA_ARG_NONNULL(1);
/**
@@ -255,7 +255,7 @@ eina_thread_queue_fd_set(Eina_Thread_Queue *thq, int fd) EINA_ARG_NONNULL(1);
*
* @since 1.11
*/
-EAPI int
+EINA_API int
eina_thread_queue_fd_get(const Eina_Thread_Queue *thq) EINA_ARG_NONNULL(1);
/**
diff --git a/src/lib/eina/eina_tiler.c b/src/lib/eina/eina_tiler.c
index c4c04d8641..865ea5a508 100644
--- a/src/lib/eina/eina_tiler.c
+++ b/src/lib/eina/eina_tiler.c
@@ -1101,7 +1101,7 @@ static Eina_Bool _iterator_next(Eina_Iterator_Tiler *it, void **data)
it->r.x = cur.left;
it->r.y = cur.top;
it->r.w = cur.width;
- it->r.h = cur.height;
+ it->r.h = cur.height;
}
if (eina_rectangle_intersection(&it->r, &it->tiler->area) == EINA_FALSE)
@@ -1137,7 +1137,7 @@ static void _iterator_free(Eina_Iterator_Tiler *it)
* API *
*============================================================================*/
-EAPI Eina_Tiler *eina_tiler_new(int w, int h)
+EINA_API Eina_Tiler *eina_tiler_new(int w, int h)
{
Eina_Tiler *t;
@@ -1158,7 +1158,7 @@ EAPI Eina_Tiler *eina_tiler_new(int w, int h)
return t;
}
-EAPI void eina_tiler_free(Eina_Tiler *t)
+EINA_API void eina_tiler_free(Eina_Tiler *t)
{
if (!t)
return;
@@ -1168,7 +1168,7 @@ EAPI void eina_tiler_free(Eina_Tiler *t)
free(t);
}
-EAPI void eina_tiler_area_size_set(Eina_Tiler *t, int w, int h)
+EINA_API void eina_tiler_area_size_set(Eina_Tiler *t, int w, int h)
{
EINA_MAGIC_CHECK_TILER(t);
if ((w <= 0) || (h <= 0))
@@ -1178,14 +1178,14 @@ EAPI void eina_tiler_area_size_set(Eina_Tiler *t, int w, int h)
t->area.h = h;
}
-EAPI void eina_tiler_area_size_get(const Eina_Tiler *t, int *w, int *h)
+EINA_API void eina_tiler_area_size_get(const Eina_Tiler *t, int *w, int *h)
{
EINA_MAGIC_CHECK_TILER(t);
if (w) *w = t->area.w;
if (h) *h = t->area.h;
}
-EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h)
+EINA_API void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h)
{
EINA_MAGIC_CHECK_TILER(t);
if ((w <= 0) || (h <= 0))
@@ -1198,7 +1198,7 @@ EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h)
_splitter_tile_size_set(t, w, h);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_tiler_empty(const Eina_Tiler *t)
{
EINA_MAGIC_CHECK_TILER(t, EINA_TRUE);
@@ -1219,7 +1219,7 @@ _rect_same(Eina_Rectangle *rec1, Eina_Rectangle *rec2)
return ((same1->x == same2->x) && (same1->y == same2->y));
}
-EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r)
+EINA_API Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r)
{
Eina_Rectangle tmp __attribute__ ((aligned (8)));
@@ -1245,7 +1245,7 @@ EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r)
return _splitter_rect_add(t, &tmp);
}
-EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r)
+EINA_API void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r)
{
Eina_Rectangle tmp __attribute__ ((aligned (8)));
@@ -1271,7 +1271,7 @@ EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r)
_splitter_rect_del(t, &tmp);
}
-EAPI void eina_tiler_clear(Eina_Tiler *t)
+EINA_API void eina_tiler_clear(Eina_Tiler *t)
{
EINA_MAGIC_CHECK_TILER(t);
_splitter_clear(t);
@@ -1281,14 +1281,14 @@ EAPI void eina_tiler_clear(Eina_Tiler *t)
t->last.del.h = -1;
}
-EAPI void
+EINA_API void
eina_tiler_strict_set(Eina_Tiler *t, Eina_Bool strict)
{
EINA_MAGIC_CHECK_TILER(t);
t->strict = strict;
}
-EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t)
+EINA_API Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t)
{
Eina_Iterator_Tiler *it;
@@ -1363,7 +1363,7 @@ EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t)
return &it->iterator;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_tiler_union(Eina_Tiler *dst,
Eina_Tiler *src)
{
@@ -1405,7 +1405,7 @@ eina_tiler_union(Eina_Tiler *dst,
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_tiler_subtract(Eina_Tiler *dst,
Eina_Tiler *src)
{
@@ -1444,7 +1444,7 @@ eina_tiler_subtract(Eina_Tiler *dst,
return EINA_TRUE;
}
-EAPI Eina_Tiler *
+EINA_API Eina_Tiler *
eina_tiler_intersection(Eina_Tiler *t1,
Eina_Tiler *t2)
{
@@ -1527,7 +1527,7 @@ cleanup:
return t;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_tiler_equal(const Eina_Tiler *t1,
const Eina_Tiler *t2)
{
@@ -1604,7 +1604,7 @@ eina_tile_grid_slicer_iterator_next(Eina_Tile_Grid_Slicer_Iterator *it,
(&it->priv, (const Eina_Tile_Grid_Info **)data);
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_tile_grid_slicer_iterator_new(int x,
int y,
int w,
@@ -1614,7 +1614,7 @@ eina_tile_grid_slicer_iterator_new(int x,
{
Eina_Tile_Grid_Slicer_Iterator *it;
- if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) ||
+ if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) ||
(tile_w <= 0) || (tile_h <= 0))
return NULL;
diff --git a/src/lib/eina/eina_tiler.h b/src/lib/eina/eina_tiler.h
index 28492efc4f..a7aba218a3 100644
--- a/src/lib/eina/eina_tiler.h
+++ b/src/lib/eina/eina_tiler.h
@@ -183,7 +183,7 @@ typedef struct _Eina_Tile_Grid_Slicer Eina_Tile_Grid_Slicer;
*
* @see eina_tiler_free()
*/
-EAPI Eina_Tiler *eina_tiler_new(int w, int h);
+EINA_API Eina_Tiler *eina_tiler_new(int w, int h);
/**
* @brief Frees a tiler.
@@ -193,7 +193,7 @@ EAPI Eina_Tiler *eina_tiler_new(int w, int h);
* This function frees @p t. It does not free the memory allocated for the
* elements of @p t.
*/
-EAPI void eina_tiler_free(Eina_Tiler *t);
+EINA_API void eina_tiler_free(Eina_Tiler *t);
/**
* @brief Sets the size of tiles for a tiler.
@@ -206,7 +206,7 @@ EAPI void eina_tiler_free(Eina_Tiler *t);
* won't be changed.
* @warning Tile size is not used!
*/
-EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h);
+EINA_API void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h);
/**
* @brief Changes the size of the area covered by the tiler.
@@ -219,7 +219,7 @@ EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h);
*
* @warning Must clear the tiler before changing its size.
*/
-EAPI void eina_tiler_area_size_set(Eina_Tiler *t, int w, int h);
+EINA_API void eina_tiler_area_size_set(Eina_Tiler *t, int w, int h);
/**
* @brief Gets the size of the area covered by the tiler.
@@ -230,7 +230,7 @@ EAPI void eina_tiler_area_size_set(Eina_Tiler *t, int w, int h);
*
* @since 1.8
*/
-EAPI void eina_tiler_area_size_get(const Eina_Tiler *t, int *w, int *h);
+EINA_API void eina_tiler_area_size_get(const Eina_Tiler *t, int *w, int *h);
/**
* @brief Defines if we need to follow a strict grid of tile or a loose one.
@@ -242,7 +242,7 @@ EAPI void eina_tiler_area_size_get(const Eina_Tiler *t, int *w, in
*
* @since 1.8
*/
-EAPI void eina_tiler_strict_set(Eina_Tiler *t, Eina_Bool strict);
+EINA_API void eina_tiler_strict_set(Eina_Tiler *t, Eina_Bool strict);
/**
* @brief Tells if a tiler is empty or not.
@@ -252,7 +252,7 @@ EAPI void eina_tiler_strict_set(Eina_Tiler *t, Eina_Bool strict);
*
* @since 1.8
*/
-EAPI Eina_Bool eina_tiler_empty(const Eina_Tiler *t);
+EINA_API Eina_Bool eina_tiler_empty(const Eina_Tiler *t);
/**
* @brief Adds a rectangle to a tiler.
@@ -263,7 +263,7 @@ EAPI Eina_Bool eina_tiler_empty(const Eina_Tiler *t);
*
* @see eina_tiler_rect_del()
*/
-EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r);
+EINA_API Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r);
/**
* @brief Removes a rectangle from a tiler.
@@ -274,7 +274,7 @@ EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle
* @see eina_tiler_rect_add()
* @see eina_tiler_clear()
*/
-EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r);
+EINA_API void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r);
/**
* @brief Removes all rectangles from tiles.
@@ -283,7 +283,7 @@ EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle
*
* @see eina_tiler_rect_del()
*/
-EAPI void eina_tiler_clear(Eina_Tiler *t);
+EINA_API void eina_tiler_clear(Eina_Tiler *t);
/**
* @brief Creates a iterator to access the tilers calculated rectangles.
@@ -291,7 +291,7 @@ EAPI void eina_tiler_clear(Eina_Tiler *t);
* @param[in] t The tiler to iterate over.
* @return A iterator containing Eina_Rectangle.
*/
-EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t);
+EINA_API Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t);
/**
* @brief Creates a new Eina_Iterator that iterates over a list of tiles.
@@ -312,7 +312,7 @@ EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t);
* equivalent to calling eina_tile_grid_slicer_setup() and calling
* eina_tile_grid_slicer_next() until it returns #EINA_FALSE.
*/
-EAPI Eina_Iterator *eina_tile_grid_slicer_iterator_new(int x, int y, int w, int h, int tile_w, int tile_h);
+EINA_API Eina_Iterator *eina_tile_grid_slicer_iterator_new(int x, int y, int w, int h, int tile_w, int tile_h);
/**
* @brief Gets the union of two tilers.
@@ -325,7 +325,7 @@ EAPI Eina_Iterator *eina_tile_grid_slicer_iterator_new(int x, int y, int w,
* The result is stored in @p dst. It returns #EINA_TRUE if it succeeds.
* @since 1.11
*/
-EAPI Eina_Bool eina_tiler_union(Eina_Tiler *dst, Eina_Tiler *src);
+EINA_API Eina_Bool eina_tiler_union(Eina_Tiler *dst, Eina_Tiler *src);
/**
* @brief Subtracts two tilers.
@@ -338,7 +338,7 @@ EAPI Eina_Bool eina_tiler_union(Eina_Tiler *dst, Eina_Tiler *src);
* The result is stored in @p dst. It returns #EINA_TRUE if it succeeds.
* @since 1.11
*/
-EAPI Eina_Bool eina_tiler_subtract(Eina_Tiler *dst, Eina_Tiler *src);
+EINA_API Eina_Bool eina_tiler_subtract(Eina_Tiler *dst, Eina_Tiler *src);
/**
* @brief Gets the intersection of two tilers.
@@ -351,7 +351,7 @@ EAPI Eina_Bool eina_tiler_subtract(Eina_Tiler *dst, Eina_Tiler *src);
* It returns a pointer of result if intersection of two tilers exists., otherwise returns NULL.
* @since 1.11
*/
-EAPI Eina_Tiler *eina_tiler_intersection(Eina_Tiler *t1, Eina_Tiler *t2);
+EINA_API Eina_Tiler *eina_tiler_intersection(Eina_Tiler *t1, Eina_Tiler *t2);
/**
* @brief Gets whether two tilers are equal in rects or not.
@@ -364,7 +364,7 @@ EAPI Eina_Tiler *eina_tiler_intersection(Eina_Tiler *t1, Eina_Tiler *t2);
* It returns #EINA_TRUE if tilers are equal.
* @since 1.11
*/
-EAPI Eina_Bool eina_tiler_equal(const Eina_Tiler *t1, const Eina_Tiler *t2);
+EINA_API Eina_Bool eina_tiler_equal(const Eina_Tiler *t1, const Eina_Tiler *t2);
/**
* @brief Iterates over the tiles set by eina_tile_grid_slicer_setup().
diff --git a/src/lib/eina/eina_tmpstr.c b/src/lib/eina/eina_tmpstr.c
index 84dd8439b6..7de15b8127 100644
--- a/src/lib/eina/eina_tmpstr.c
+++ b/src/lib/eina/eina_tmpstr.c
@@ -63,7 +63,7 @@ eina_tmpstr_shutdown(void)
return EINA_TRUE;
}
-EAPI Eina_Tmpstr *
+EINA_API Eina_Tmpstr *
eina_tmpstr_add_length(const char *str, size_t length)
{
Str *s;
@@ -83,7 +83,7 @@ eina_tmpstr_add_length(const char *str, size_t length)
return s->str;
}
-EAPI Eina_Tmpstr *
+EINA_API Eina_Tmpstr *
eina_tmpstr_manage_new_length(char *str, size_t length)
{
Str *s;
@@ -101,7 +101,7 @@ eina_tmpstr_manage_new_length(char *str, size_t length)
return s->str;
}
-EAPI Eina_Tmpstr *
+EINA_API Eina_Tmpstr *
eina_tmpstr_manage_new(char *str)
{
size_t len;
@@ -111,7 +111,7 @@ eina_tmpstr_manage_new(char *str)
return eina_tmpstr_manage_new_length(str, len);
}
-EAPI Eina_Tmpstr *
+EINA_API Eina_Tmpstr *
eina_tmpstr_add(const char *str)
{
size_t len;
@@ -121,7 +121,7 @@ eina_tmpstr_add(const char *str)
return eina_tmpstr_add_length(str, len);
}
-EAPI void
+EINA_API void
eina_tmpstr_del(Eina_Tmpstr *tmpstr)
{
Str *s, *sp;
@@ -142,14 +142,14 @@ eina_tmpstr_del(Eina_Tmpstr *tmpstr)
eina_lock_release(&_mutex);
}
-EAPI size_t
+EINA_API size_t
eina_tmpstr_strlen(Eina_Tmpstr *tmpstr)
{
if (!tmpstr) return 0;
return eina_tmpstr_len(tmpstr) + 1;
}
-EAPI size_t
+EINA_API size_t
eina_tmpstr_len(Eina_Tmpstr *tmpstr)
{
Str *s;
diff --git a/src/lib/eina/eina_tmpstr.h b/src/lib/eina/eina_tmpstr.h
index 164fe43aa5..c897ef2e34 100644
--- a/src/lib/eina/eina_tmpstr.h
+++ b/src/lib/eina/eina_tmpstr.h
@@ -162,7 +162,7 @@ typedef const char Eina_Tmpstr;
*
* @since 1.8.0
*/
-EAPI Eina_Tmpstr *eina_tmpstr_add(const char *str) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Tmpstr *eina_tmpstr_add(const char *str) EINA_WARN_UNUSED_RESULT;
/**
* @brief Adds a new temporary string based on the input string and length.
@@ -195,7 +195,7 @@ EAPI Eina_Tmpstr *eina_tmpstr_add(const char *str) EINA_WARN_UNUSED_RESULT;
*
* @since 1.8.0
*/
-EAPI Eina_Tmpstr *eina_tmpstr_add_length(const char *str, size_t length);
+EINA_API Eina_Tmpstr *eina_tmpstr_add_length(const char *str, size_t length);
/**
* @brief **Deprecated** Return the length of a temporary string including the '\0'.
@@ -208,7 +208,7 @@ EAPI Eina_Tmpstr *eina_tmpstr_add_length(const char *str, size_t length);
* @see eina_tmpstr_len()
* @since 1.8.0
*/
-EINA_DEPRECATED EAPI size_t eina_tmpstr_strlen(Eina_Tmpstr *tmpstr);
+EINA_DEPRECATED EINA_API size_t eina_tmpstr_strlen(Eina_Tmpstr *tmpstr);
/**
* @brief Returns the length of a temporary string.
@@ -219,7 +219,7 @@ EINA_DEPRECATED EAPI size_t eina_tmpstr_strlen(Eina_Tmpstr *tmpstr);
*
* @since 1.14.0
*/
-EAPI size_t eina_tmpstr_len(Eina_Tmpstr *tmpstr);
+EINA_API size_t eina_tmpstr_len(Eina_Tmpstr *tmpstr);
/**
* @brief Deletes the temporary string if it is one, or ignore it if it is not.
@@ -235,7 +235,7 @@ EAPI size_t eina_tmpstr_len(Eina_Tmpstr *tmpstr);
*
* @since 1.8.0
*/
-EAPI void eina_tmpstr_del(Eina_Tmpstr *tmpstr) EINA_ARG_NONNULL(1);
+EINA_API void eina_tmpstr_del(Eina_Tmpstr *tmpstr) EINA_ARG_NONNULL(1);
/**
* @brief Adds a new temporary string using the passed string. The passed
@@ -250,7 +250,7 @@ EAPI void eina_tmpstr_del(Eina_Tmpstr *tmpstr) EINA_ARG_NONNULL(1);
* @see eina_tmpstr_del()
* @since 1.17.0
*/
-EAPI Eina_Tmpstr *eina_tmpstr_manage_new(char *str) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Tmpstr *eina_tmpstr_manage_new(char *str) EINA_WARN_UNUSED_RESULT;
/**
* @brief Adds a new temporary string using the passed string. The passed
@@ -267,7 +267,7 @@ EAPI Eina_Tmpstr *eina_tmpstr_manage_new(char *str) EINA_WARN_UNUSED_RESULT;
* @see eina_tmpstr_del()
* @since 1.17.0
*/
-EAPI Eina_Tmpstr *eina_tmpstr_manage_new_length(char *str, size_t length);
+EINA_API Eina_Tmpstr *eina_tmpstr_manage_new_length(char *str, size_t length);
/**
* @}
diff --git a/src/lib/eina/eina_types.h b/src/lib/eina/eina_types.h
index c049baf4dd..92831207f6 100644
--- a/src/lib/eina/eina_types.h
+++ b/src/lib/eina/eina_types.h
@@ -28,45 +28,57 @@
/**
* @defgroup Eina_Types_Group Types
*
+ * @brief Definition for eina types and core functions.
+ *
* @{
*/
-#ifdef EAPI
-# undef EAPI
+#ifdef EINA_API
+#error EINA_API should not be already defined
#endif
#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
+# ifndef EINA_STATIC
+# ifdef EINA_BUILD
+# define EINA_API __declspec(dllexport)
# else
-# define EAPI
+# define EINA_API __declspec(dllimport)
# endif
# else
-# define EAPI __declspec(dllimport)
+# define EINA_API
# endif
-# define EAPI_WEAK
+# define EINA_API_WEAK
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# define EAPI_WEAK __attribute__ ((weak))
+# define EINA_API __attribute__ ((visibility("default")))
+# define EINA_API_WEAK __attribute__ ((weak))
# else
-# define EAPI
-# define EAPI_WEAK
+# define EINA_API
+# define EINA_API_WEAK
# endif
# else
/**
- * @def EAPI
+ * @def EINA_API
* @brief Used to export functions (by changing visibility).
*/
-# define EAPI
-# define EAPI_WEAK
+# define EINA_API
+/**
+ * @def EINA_API_WEAK
+ * @brief Weak symbol, primarily useful in defining library functions which
+ * can be overridden in user code.
+ * Note: Not supported on all platforms.
+ */
+# define EINA_API_WEAK
# endif
#endif
-/* Weak symbols part of EFL API - Note: not weak on all platforms */
-#define EWAPI EAPI EAPI_WEAK
+/**
+ * @def EWAPI
+ * @brief Weak symbols part of the EFL API.
+ * Note: Not supported on all platforms.
+ */
+#define EWAPI EAPI EINA_API_WEAK
#ifdef _WIN32
# ifdef DLL_EXPORT
@@ -83,8 +95,8 @@
# endif
# else
/**
- * @def EAPI
- * @brief Used to export functions (by changing visibility).
+ * @def EXPORTAPI
+ * @brief An alias for #EINA_API.
*/
# define EXPORTAPI
# endif
@@ -96,6 +108,11 @@
# if defined(__OPENBSD__) && (INTPTR_MAX == INT32_MAX)
# define __WORDSIZE 32
# else
+/**
+ * @def __WORDSIZE
+ * @brief Architecture's word size (32 or 64 bits). Defined by Eina if
+ * its definition cannot be found in the system's headers.
+ */
# define __WORDSIZE 64
# endif
#endif
@@ -247,8 +264,8 @@
# define EINA_FORMAT(fmt)
# define EINA_CONST
# define EINA_NOINSTRUMENT
-# define EINA_UNLIKELY(exp) exp
-# define EINA_LIKELY(exp) exp
+# define EINA_UNLIKELY(exp) (exp)
+# define EINA_LIKELY(exp) (exp)
# define EINA_SENTINEL
# define EINA_FALLTHROUGH
# define EINA_PREFETCH(arg) ((void) (arg))
@@ -273,8 +290,8 @@
# define EINA_FORMAT(fmt)
# define EINA_CONST
# define EINA_NOINSTRUMENT
-# define EINA_UNLIKELY(exp) exp
-# define EINA_LIKELY(exp) exp
+# define EINA_UNLIKELY(exp) (exp)
+# define EINA_LIKELY(exp) (exp)
# define EINA_SENTINEL
# define EINA_FALLTHROUGH
# define EINA_PREFETCH(arg) ((void) (arg))
@@ -303,8 +320,8 @@
# define EINA_CONST
# endif
# define EINA_NOINSTRUMENT
-# define EINA_UNLIKELY(exp) exp
-# define EINA_LIKELY(exp) exp
+# define EINA_UNLIKELY(exp) (exp)
+# define EINA_LIKELY(exp) (exp)
# define EINA_SENTINEL
# define EINA_FALLTHROUGH
# define EINA_PREFETCH(arg) ((void) (arg))
@@ -316,7 +333,8 @@
/**
* @def EINA_UNUSED
- * Used to warn when an argument of the function is not used.
+ * Used to indicate that a function parameter is purposely unused.
+ * This silences some compiler's warning about unused parameters.
*/
# define EINA_UNUSED
@@ -361,21 +379,30 @@
/**
* @def EINA_PRINTF
- * @param[in] fmt The format to be used.
- * @param[in] arg The argument to be used.
+ * @brief Indicates that this function accepts a printf-style format string.
+ * This allows some compilers to perform additional checks on the parameters
+ * passed to the function.
+ * @param[in] fmt The 1-based index of the parameter specifying the format string.
+ * @param[in] arg The 1-based index of the first data parameter.
*/
# define EINA_PRINTF(fmt, arg)
/**
* @def EINA_SCANF
- * @param[in] fmt The format to be used.
- * @param[in] arg The argument to be used.
+ * @brief Indicates that this function accepts a scanf-style format string.
+ * This allows some compilers to perform additional checks on the parameters
+ * passed to the function.
+ * @param[in] fmt The 1-based index of the parameter specifying the format string.
+ * @param[in] arg The 1-based index of the first data parameter.
*/
# define EINA_SCANF(fmt, arg)
/**
* @def EINA_FORMAT
- * @param[in] fmt The format to be used.
+ * @brief Indicates that the output of this function can be used as a format string
+ * in printf-style functions. Some compilers will check that the return value of
+ * this function is consistent with the @p fmt parameter.
+ * @param[in] fmt The 1-based index of the parameter specifying the format string.
*/
# define EINA_FORMAT(fmt)
@@ -393,15 +420,19 @@
/**
* @def EINA_UNLIKELY
+ * @brief Indicates that the expression is likely to be @c FALSE. Some compilers and
+ * processor architectures can then optimize the more likely path.
* @param[in] exp The expression to be used.
*/
-# define EINA_UNLIKELY(exp) exp
+# define EINA_UNLIKELY(exp) (exp)
/**
* @def EINA_LIKELY
+ * @brief Indicates that the expression is likely to be @c TRUE. Some compilers and
+ * processor architectures can then optimize the more likely path.
* @param[in] exp The expression to be used.
*/
-# define EINA_LIKELY(exp) exp
+# define EINA_LIKELY(exp) (exp)
/**
* @def EINA_SENTINEL
@@ -423,7 +454,7 @@
/**
* @def EINA_PREFETCH
- * @brief Hints that the pointer @parg needs to be pre-fetched into cache
+ * @brief Hints that the pointer @p arg needs to be pre-fetched into cache
*
* This hints to the compiler to probably issue a prefetch command for the
* memory address @p arg and ensure it goes into all levels of cache. For
@@ -438,7 +469,7 @@
/**
* @def EINA_PREFETCH_WRITE
- * @brief Hints that the pointer @parg needs to be pre-fetched into cache
+ * @brief Hints that the pointer @p arg needs to be pre-fetched into cache
*
* This hints to the compiler to probably issue a prefetch command for the
* memory address @p arg and ensure it goes into all levels of cache. This
@@ -454,7 +485,7 @@
/**
* @def EINA_PREFETCH_NOCACHE
- * @brief Hints that the pointer @parg needs to be pre-fetched into cache
+ * @brief Hints that the pointer @p arg needs to be pre-fetched into cache
*
* This hints to the compiler to probably issue a prefetch command for the
* memory address @p arg and ensure it goes into just the closest(l1) cache.
@@ -468,9 +499,9 @@
# define EINA_PREFETCH_NOCACHE(arg)
/**
- * @def EINA_PREFETCH_WRITE_NOCACHE
+ * @def EINA_PREFETCH_NOCACHE_WRITE
*
- * @brief Hints that the pointer @parg needs to be pre-fetched into cache
+ * @brief Hints that the pointer @p arg needs to be pre-fetched into cache
*
* This hints to the compiler to probably issue a prefetch command for the
* memory address @p arg and ensure it goes into just the closest(l1) cache.
@@ -507,8 +538,6 @@ typedef unsigned char Eina_Bool;
*/
#define EINA_TRUE ((Eina_Bool)1)
-EAPI extern const unsigned int eina_prime_table[];
-
/**
* @typedef Eina_Compare_Cb
* Function used in functions using sorting. It compares @p data1 and
@@ -540,6 +569,22 @@ typedef int (*Eina_Random_Cb)(const int min, const int max);
#define EINA_RANDOM_CB(function) ((Eina_Random_Cb)function)
/**
+ * @typedef Eina_Process_Cb
+ * Method that processes some data and returns new data.
+ * It's meant to be used as a callback to process all nodes inside a container
+ * (See eina_iterator_processed_new, for example.)
+ * @param data The data to process.
+ * @param fdata Context data.
+ * @return The processed data.
+ */
+typedef void* (*Eina_Process_Cb)(const void *container, void *data, void *fdata);
+
+/**
+ * @def EINA_PROCESS_CB
+ * Macro to cast to Eina_Process.
+ */
+#define EINA_PROCESS_CB(Function) ((Eina_Process_Cb)Function)
+/**
* @typedef Eina_Each_Cb
* A callback type used when iterating over a container.
*/
diff --git a/src/lib/eina/eina_unicode.c b/src/lib/eina/eina_unicode.c
index 0bb70ffae9..eecb8d3a94 100644
--- a/src/lib/eina/eina_unicode.c
+++ b/src/lib/eina/eina_unicode.c
@@ -34,8 +34,8 @@
/* Maybe I'm too tired, but this is the only thing that actually worked. */
const Eina_Unicode _EINA_UNICODE_EMPTY_STRING[1] = {0};
-EAPI const Eina_Unicode *EINA_UNICODE_EMPTY_STRING = _EINA_UNICODE_EMPTY_STRING;
-EAPI int
+EINA_API const Eina_Unicode *EINA_UNICODE_EMPTY_STRING = _EINA_UNICODE_EMPTY_STRING;
+EINA_API int
eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(a, -1);
@@ -51,7 +51,7 @@ eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b)
return 1;
}
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source)
{
Eina_Unicode *ret = dest;
@@ -65,7 +65,7 @@ eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source)
return ret;
}
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n)
{
Eina_Unicode *ret = dest;
@@ -80,7 +80,7 @@ eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n)
return ret;
}
-EAPI size_t
+EINA_API size_t
eina_unicode_strlen(const Eina_Unicode *ustr)
{
const Eina_Unicode *end;
@@ -92,7 +92,7 @@ eina_unicode_strlen(const Eina_Unicode *ustr)
return end - ustr;
}
-EAPI size_t
+EINA_API size_t
eina_unicode_strnlen(const Eina_Unicode *ustr, int n)
{
const Eina_Unicode *end;
@@ -108,7 +108,7 @@ eina_unicode_strnlen(const Eina_Unicode *ustr, int n)
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_unicode_strndup(const Eina_Unicode *text, size_t n)
{
Eina_Unicode *ustr;
@@ -124,7 +124,7 @@ eina_unicode_strndup(const Eina_Unicode *text, size_t n)
return ustr;
}
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_unicode_strdup(const Eina_Unicode *text)
{
size_t len;
@@ -135,7 +135,7 @@ eina_unicode_strdup(const Eina_Unicode *text)
return eina_unicode_strndup(text, len);
}
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle)
{
const Eina_Unicode *i, *j;
@@ -158,7 +158,7 @@ eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle)
return NULL;
}
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_unicode_escape(const Eina_Unicode *str)
{
Eina_Unicode *s2, *d;
@@ -190,10 +190,10 @@ eina_unicode_escape(const Eina_Unicode *str)
/* The replacement range that will be used for bad utf8 chars. */
#define ERROR_REPLACEMENT_END 0xDCFF
-EAPI Eina_Unicode
+EINA_API Eina_Unicode
_eina_unicode_utf8_next_get(int ind,
unsigned char d,
- const char *buf,
+ const char *buf,
int *iindex)
{
Eina_Unicode r;
@@ -201,10 +201,12 @@ _eina_unicode_utf8_next_get(int ind,
if ((d & 0xf0) == 0xe0)
{ // 3 byte (16bit) - 1110xxxx 10xxxxxx 10xxxxxx
r = (d & 0x0f) << 12;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 6;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f);
if (r <= 0x7FF) goto error;
@@ -214,13 +216,16 @@ _eina_unicode_utf8_next_get(int ind,
if ((d & 0xf8) == 0xf0)
{ // 4 byte (21bit) - 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
r = (d & 0x07) << 18;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 12;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 6;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f);
if (r <= 0xFFFF) goto error;
@@ -230,16 +235,20 @@ _eina_unicode_utf8_next_get(int ind,
if ((d & 0xfc) == 0xf8)
{ // 5 byte (26bit) - 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
r = (d & 0x03) << 24;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 18;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 12;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 6;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f);
if (r <= 0x1FFFFF) goto error;
@@ -249,19 +258,24 @@ _eina_unicode_utf8_next_get(int ind,
if ((d & 0xfe) == 0xfc)
{ // 6 byte (31bit) - 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
r = (d & 0x01) << 30;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0)
+ || EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 24;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char) buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 18;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 12;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f) << 6;
- if (((d = buf[ind++]) == 0) || EINA_IS_INVALID_BYTE(d) ||
+ if (((d = (unsigned char)buf[ind++]) == 0) ||
+ EINA_IS_INVALID_BYTE(d) ||
!EINA_IS_CONTINUATION_BYTE(d)) goto error;
r |= (d & 0x3f);
if (r <= 0x3FFFFFF) goto error;
@@ -273,12 +287,12 @@ _eina_unicode_utf8_next_get(int ind,
* we just use the invalid unicode codepoints 8 lower bits represent
* the original char */
error:
- d = buf[*iindex];
+ d = (unsigned char)buf[*iindex];
(*iindex)++;
return ERROR_REPLACEMENT_BASE | d;
}
-EAPI Eina_Unicode
+EINA_API Eina_Unicode
eina_unicode_utf8_get_prev(const char *buf, int *iindex)
{
int r, ind;
@@ -298,14 +312,14 @@ eina_unicode_utf8_get_prev(const char *buf, int *iindex)
/* Next advance iindex to previous codepoint */
ind = *iindex;
ind--;
- while ((ind > 0) && ((buf[ind] & 0xc0) == 0x80))
+ while ((ind > 0) && (((unsigned char)buf[ind] & 0xc0) == 0x80))
ind--;
*iindex = ind;
return r;
}
-EAPI int
+EINA_API int
eina_unicode_utf8_get_len(const char *buf)
{
/* returns the number of utf8 characters (not bytes) in the string */
@@ -319,7 +333,7 @@ eina_unicode_utf8_get_len(const char *buf)
return len;
}
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_unicode_utf8_to_unicode(const char *utf, int *_len)
{
/* FIXME: Should optimize! */
@@ -343,7 +357,7 @@ eina_unicode_utf8_to_unicode(const char *utf, int *_len)
return buf;
}
-EAPI char *
+EINA_API char *
eina_unicode_unicode_to_utf8_range(const Eina_Unicode *uni, int ulen, int *_len)
{
char *buf, *buf2;
@@ -426,7 +440,7 @@ eina_unicode_unicode_to_utf8_range(const Eina_Unicode *uni, int ulen, int *_len)
return buf2;
}
-EAPI char *
+EINA_API char *
eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len)
{
int len = eina_unicode_strlen(uni);
diff --git a/src/lib/eina/eina_unicode.h b/src/lib/eina/eina_unicode.h
index 1f798ef52e..82c86f7269 100644
--- a/src/lib/eina/eina_unicode.h
+++ b/src/lib/eina/eina_unicode.h
@@ -36,9 +36,9 @@ typedef uint32_t Eina_Unicode;
/**
* @brief Same as the standard strlen just with Eina_Unicode instead of char.
*/
-EAPI extern const Eina_Unicode *EINA_UNICODE_EMPTY_STRING;
+EINA_API extern const Eina_Unicode *EINA_UNICODE_EMPTY_STRING;
-EAPI size_t eina_unicode_strlen(const Eina_Unicode *ustr) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API size_t eina_unicode_strlen(const Eina_Unicode *ustr) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @brief Returns the length of a Eina_Unicode string, up to a limit.
@@ -51,7 +51,7 @@ EAPI size_t eina_unicode_strlen(const Eina_Unicode *ustr) EINA_ARG_NONNUL
* @param[in] n Max length to search
* @return Number of characters or n.
*/
-EAPI size_t eina_unicode_strnlen(const Eina_Unicode *ustr, int n) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
+EINA_API size_t eina_unicode_strnlen(const Eina_Unicode *ustr, int n) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
/**
* @brief Same as the standard strdup just with Eina_Unicode instead of char.
@@ -59,7 +59,7 @@ EAPI size_t eina_unicode_strnlen(const Eina_Unicode *ustr, int n) EINA_AR
* @param[in] text The text to duplicate.
* @return The duplicated string.
*/
-EAPI Eina_Unicode *eina_unicode_strdup(const Eina_Unicode *text) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_Unicode *eina_unicode_strdup(const Eina_Unicode *text) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Same as strdup but cuts on the given size. Assumes n < len
@@ -74,7 +74,7 @@ EAPI Eina_Unicode *eina_unicode_strdup(const Eina_Unicode *text) EINA_WARN_UNUSE
*
* @since 1.1.0
*/
-EAPI Eina_Unicode *eina_unicode_strndup(const Eina_Unicode *text, size_t n) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_Unicode *eina_unicode_strndup(const Eina_Unicode *text, size_t n) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Same as the standard strcmp just with Eina_Unicode instead of char.
@@ -83,7 +83,7 @@ EAPI Eina_Unicode *eina_unicode_strndup(const Eina_Unicode *text, size_t n) EINA
* @param[in] b The text to be compared.
* @return An integer value indicating the ordinal relation of @p a to @p b.
*/
-EAPI int eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
+EINA_API int eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
/**
* @brief Same as the standard strcpy just with Eina_Unicode instead of char.
@@ -92,7 +92,7 @@ EAPI int eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode
* @param[in] source The text to copy from.
* @return @p dest is returned.
*/
-EAPI Eina_Unicode *eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Unicode *eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source) EINA_ARG_NONNULL(1, 2);
/**
* @brief Same as the standard strstr just with Eina_Unicode instead of char.
@@ -102,7 +102,7 @@ EAPI Eina_Unicode *eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *s
* @return The substring of @p haystack which starts with @p needle
* when @p needle is founded in @p haystack, or NULL is returned.
*/
-EAPI Eina_Unicode *eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
+EINA_API Eina_Unicode *eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
/**
* @brief Same as the standard strncpy just with Eina_Unicode instead of char.
@@ -112,7 +112,7 @@ EAPI Eina_Unicode *eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_
* @param[in] n Maximum number of characters to be copied from @p source.
* @return @p dest is returned.
*/
-EAPI Eina_Unicode *eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Unicode *eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n) EINA_ARG_NONNULL(1, 2);
/**
* @see eina_str_escape()
@@ -120,7 +120,7 @@ EAPI Eina_Unicode *eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *
* @param[in] str The string to escape.
* @return The escaped string.
*/
-EAPI Eina_Unicode *eina_unicode_escape(const Eina_Unicode *str) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Unicode *eina_unicode_escape(const Eina_Unicode *str) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/* UTF-8 Handling */
@@ -157,7 +157,7 @@ static inline Eina_Unicode eina_unicode_utf8_next_get(const char *buf, int *iind
*
* @since 1.1.0
*/
-EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2) EINA_DEPRECATED;
+EINA_API Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2) EINA_DEPRECATED;
/**
* Reads UTF8 bytes from @p buf, starting at @p iindex and returns
@@ -174,7 +174,7 @@ EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex) EINA_
*
* @since 1.1.0
*/
-EAPI Eina_Unicode eina_unicode_utf8_get_prev(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Unicode eina_unicode_utf8_get_prev(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2);
/**
* Returns the number of unicode characters in the string. That is,
@@ -186,7 +186,7 @@ EAPI Eina_Unicode eina_unicode_utf8_get_prev(const char *buf, int *iindex) EINA_
*
* @since 1.1.0
*/
-EAPI int eina_unicode_utf8_get_len(const char *buf) EINA_ARG_NONNULL(1);
+EINA_API int eina_unicode_utf8_get_len(const char *buf) EINA_ARG_NONNULL(1);
/**
* Converts a utf-8 string to a newly allocated Eina_Unicode string.
@@ -197,7 +197,7 @@ EAPI int eina_unicode_utf8_get_len(const char *buf) EINA_ARG_NONNULL(1);
*
* @since 1.1.0
*/
-EAPI Eina_Unicode *eina_unicode_utf8_to_unicode(const char *utf, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API Eina_Unicode *eina_unicode_utf8_to_unicode(const char *utf, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Converts an Eina_Unicode string to a newly allocated utf-8 substring at given length.
@@ -209,7 +209,7 @@ EAPI Eina_Unicode *eina_unicode_utf8_to_unicode(const char *utf, int *_len) EINA
*
* @since 1.17
*/
-EAPI char * eina_unicode_unicode_to_utf8_range(const Eina_Unicode *uni, int ulen, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API char * eina_unicode_unicode_to_utf8_range(const Eina_Unicode *uni, int ulen, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Converts an Eina_Unicode string to a newly allocated utf-8 string.
@@ -220,7 +220,7 @@ EAPI char * eina_unicode_unicode_to_utf8_range(const Eina_Unicode *uni, int ulen
*
* @since 1.1.0
*/
-EAPI char * eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EINA_API char * eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
#include "eina_inline_unicode.x"
diff --git a/src/lib/eina/eina_ustrbuf.h b/src/lib/eina/eina_ustrbuf.h
index 0030735a5d..cb5beb3e0a 100644
--- a/src/lib/eina/eina_ustrbuf.h
+++ b/src/lib/eina/eina_ustrbuf.h
@@ -46,7 +46,7 @@ typedef struct _Eina_Strbuf Eina_UStrbuf;
* @see eina_ustrbuf_append()
* @see eina_ustrbuf_string_get()
*/
-EAPI Eina_UStrbuf *eina_ustrbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_UStrbuf *eina_ustrbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new string buffer using the passed string.
@@ -65,7 +65,7 @@ EAPI Eina_UStrbuf *eina_ustrbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
*
* @since 1.1.0
*/
-EAPI Eina_UStrbuf *eina_ustrbuf_manage_new(Eina_Unicode *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_UStrbuf *eina_ustrbuf_manage_new(Eina_Unicode *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a new string buffer using the passed string.
@@ -83,7 +83,7 @@ EAPI Eina_UStrbuf *eina_ustrbuf_manage_new(Eina_Unicode *str) EINA_MALLOC EINA_W
*
* @since 1.2.0
*/
-EAPI Eina_UStrbuf *eina_ustrbuf_manage_new_length(Eina_Unicode *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_UStrbuf *eina_ustrbuf_manage_new_length(Eina_Unicode *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Frees a string buffer.
@@ -93,7 +93,7 @@ EAPI Eina_UStrbuf *eina_ustrbuf_manage_new_length(Eina_Unicode *str, size_t leng
* This function frees the memory of @p buf. @p buf must have been
* created by eina_ustrbuf_new().
*/
-EAPI void eina_ustrbuf_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_ustrbuf_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Resets a string buffer.
@@ -103,7 +103,7 @@ EAPI void eina_ustrbuf_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
* This function resets @p buf: the buffer len is set to 0, and the
* string data is set to '\\0'. No memory is freed.
*/
-EAPI void eina_ustrbuf_reset(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
+EINA_API void eina_ustrbuf_reset(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
/**
* @brief Appends a string to a buffer, reallocating as necessary.
@@ -120,7 +120,7 @@ EAPI void eina_ustrbuf_reset(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
* @see eina_ustrbuf_append()
* @see eina_ustrbuf_append_length()
*/
-EAPI Eina_Bool eina_ustrbuf_append(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_append(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends an escaped string to a buffer, reallocating as necessary.
@@ -131,7 +131,7 @@ EAPI Eina_Bool eina_ustrbuf_append(Eina_UStrbuf *buf, const Eina_Unicode *str) E
*
* This function appends the escaped string @p str to @p buf.
*/
-EAPI Eina_Bool eina_ustrbuf_append_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_append_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a string to a buffer, reallocating as necessary,
@@ -152,7 +152,7 @@ EAPI Eina_Bool eina_ustrbuf_append_escaped(Eina_UStrbuf *buf, const Eina_Unicode
* @see eina_ustrbuf_append()
* @see eina_ustrbuf_append_length()
*/
-EAPI Eina_Bool eina_ustrbuf_append_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_append_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a string of exact length to a buffer, reallocating as
@@ -172,7 +172,7 @@ EAPI Eina_Bool eina_ustrbuf_append_n(Eina_UStrbuf *buf, const Eina_Unicode *str,
* @see eina_ustrbuf_append()
* @see eina_ustrbuf_append_n()
*/
-EAPI Eina_Bool eina_ustrbuf_append_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_append_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length) EINA_ARG_NONNULL(1, 2);
/**
* @brief Appends a slice to a buffer, reallocating as necessary.
@@ -185,7 +185,7 @@ EAPI Eina_Bool eina_ustrbuf_append_length(Eina_UStrbuf *buf, const Eina_Unicode
*
* @since 1.19.0
*/
-EAPI Eina_Bool eina_ustrbuf_append_slice(Eina_UStrbuf *buf, const Eina_Slice slice) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_ustrbuf_append_slice(Eina_UStrbuf *buf, const Eina_Slice slice) EINA_ARG_NONNULL(1);
/**
* @brief Appends a character to a string buffer, reallocating as
@@ -197,7 +197,7 @@ EAPI Eina_Bool eina_ustrbuf_append_slice(Eina_UStrbuf *buf, const Eina_Slice sli
*
* This function appends @p c to @p buf.
*/
-EAPI Eina_Bool eina_ustrbuf_append_char(Eina_UStrbuf *buf, Eina_Unicode c) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_ustrbuf_append_char(Eina_UStrbuf *buf, Eina_Unicode c) EINA_ARG_NONNULL(1);
/**
* @brief Inserts a string to a buffer, reallocating as necessary.
@@ -212,7 +212,7 @@ EAPI Eina_Bool eina_ustrbuf_append_char(Eina_UStrbuf *buf, Eina_Unicode c) EINA_
* eina_ustrbuf_insert_length(). If the length is known beforehand,
* consider using that variant.
*/
-EAPI Eina_Bool eina_ustrbuf_insert(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_insert(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts an escaped string to a buffer, reallocating as
@@ -226,7 +226,7 @@ EAPI Eina_Bool eina_ustrbuf_insert(Eina_UStrbuf *buf, const Eina_Unicode *str, s
* This function inserts the escaped string @p str to @p buf at
* position @p pos.
*/
-EAPI Eina_Bool eina_ustrbuf_insert_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_insert_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts a string to a buffer, reallocating as necessary. Limited by maxlen.
@@ -245,7 +245,7 @@ EAPI Eina_Bool eina_ustrbuf_insert_escaped(Eina_UStrbuf *buf, const Eina_Unicode
* should then be checked so that it is greater than the size of
* @p str).
*/
-EAPI Eina_Bool eina_ustrbuf_insert_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_insert_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts a string of exact length to a buffer, reallocating as necessary.
@@ -265,7 +265,7 @@ EAPI Eina_Bool eina_ustrbuf_insert_n(Eina_UStrbuf *buf, const Eina_Unicode *str,
* @see eina_ustrbuf_insert()
* @see eina_ustrbuf_insert_n()
*/
-EAPI Eina_Bool eina_ustrbuf_insert_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_ustrbuf_insert_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
/**
* @brief Inserts a slice to a buffer, reallocating as necessary.
@@ -279,7 +279,7 @@ EAPI Eina_Bool eina_ustrbuf_insert_length(Eina_UStrbuf *buf, const Eina_Unicode
*
* @since 1.19.0
*/
-EAPI Eina_Bool eina_ustrbuf_insert_slice(Eina_UStrbuf *buf, const Eina_Slice slice, size_t pos) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_ustrbuf_insert_slice(Eina_UStrbuf *buf, const Eina_Slice slice, size_t pos) EINA_ARG_NONNULL(1);
/**
* @brief Inserts a character to a string buffer, reallocating as
@@ -292,7 +292,7 @@ EAPI Eina_Bool eina_ustrbuf_insert_slice(Eina_UStrbuf *buf, const Eina_Slice sli
*
* This function inserts @p c to @p buf at position @p pos.
*/
-EAPI Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf *buf, Eina_Unicode c, size_t pos) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf *buf, Eina_Unicode c, size_t pos) EINA_ARG_NONNULL(1);
/**
* @def eina_ustrbuf_prepend(buf, str)
@@ -325,7 +325,7 @@ EAPI Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf *buf, Eina_Unicode c, size_
* @param[in,out] buf The string buffer.
* @param[in] str The string to prepend.
* @param[in] maxlen The maximum number of Eina_Unicode *s to prepend.
- * @return #EINA_TRUE on success, #EINA_FALSE if @str could not be prepended.
+ * @return #EINA_TRUE on success, #EINA_FALSE if @p str could not be prepended.
*
* This macro simply calls eina_ustrbuf_insert_n() with position 0.
*/
@@ -370,7 +370,7 @@ EAPI Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf *buf, Eina_Unicode c, size_
* (inclusive) and ending at @p end (non-inclusive). Both values are
* in bytes.
*/
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_ustrbuf_remove(Eina_UStrbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
/**
@@ -386,7 +386,7 @@ eina_ustrbuf_remove(Eina_UStrbuf *buf, size_t start, size_t end) EINA_ARG_NONNUL
*
* @see eina_ustrbuf_string_steal()
*/
-EAPI const Eina_Unicode *
+EINA_API const Eina_Unicode *
eina_ustrbuf_string_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
@@ -402,7 +402,7 @@ eina_ustrbuf_string_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_U
*
* @see eina_ustrbuf_string_get()
*/
-EAPI Eina_Unicode *
+EINA_API Eina_Unicode *
eina_ustrbuf_string_steal(Eina_UStrbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
@@ -413,7 +413,7 @@ eina_ustrbuf_string_steal(Eina_UStrbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT
* This function frees the string contained in @p buf without freeing
* @p buf.
*/
-EAPI void
+EINA_API void
eina_ustrbuf_string_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
/**
@@ -424,7 +424,7 @@ eina_ustrbuf_string_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
*
* This function returns the length of @p buf.
*/
-EAPI size_t
+EINA_API size_t
eina_ustrbuf_length_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
@@ -436,7 +436,7 @@ eina_ustrbuf_length_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_U
*
* @since 1.19
*/
-EAPI Eina_Slice eina_ustrbuf_slice_get(const Eina_UStrbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Slice eina_ustrbuf_slice_get(const Eina_UStrbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Gets a read-write slice of the buffer contents.
@@ -448,7 +448,7 @@ EAPI Eina_Slice eina_ustrbuf_slice_get(const Eina_UStrbuf *buf) EINA_WARN_UNUSED
*
* @since 1.19.0
*/
-EAPI Eina_Rw_Slice eina_ustrbuf_rw_slice_get(const Eina_UStrbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Rw_Slice eina_ustrbuf_rw_slice_get(const Eina_UStrbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Frees the buffer, returning its old contents.
@@ -459,7 +459,7 @@ EAPI Eina_Rw_Slice eina_ustrbuf_rw_slice_get(const Eina_UStrbuf *buf) EINA_WARN_
*
* @since 1.19
*/
-EAPI Eina_Unicode* eina_ustrbuf_release(Eina_UStrbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EINA_API Eina_Unicode* eina_ustrbuf_release(Eina_UStrbuf *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @}
diff --git a/src/lib/eina/eina_ustringshare.c b/src/lib/eina/eina_ustringshare.c
index dbdc8a707b..1ef9dc742a 100644
--- a/src/lib/eina/eina_ustringshare.c
+++ b/src/lib/eina/eina_ustringshare.c
@@ -138,7 +138,7 @@ eina_ustringshare_shutdown(void)
* API *
*============================================================================*/
-EAPI void
+EINA_API void
eina_ustringshare_del(const Eina_Unicode *str)
{
if (!str)
@@ -148,7 +148,7 @@ eina_ustringshare_del(const Eina_Unicode *str)
CRI("EEEK trying to del non-shared ustringshare \"%s\"", (const char *)str);
}
-EAPI const Eina_Unicode *
+EINA_API const Eina_Unicode *
eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen)
{
return (const Eina_Unicode *)eina_share_common_add_length(ustringshare_share,
@@ -160,21 +160,21 @@ eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen)
Eina_Unicode));
}
-EAPI const Eina_Unicode *
+EINA_API const Eina_Unicode *
eina_ustringshare_add(const Eina_Unicode *str)
{
int slen = (str) ? (int)eina_unicode_strlen(str) : -1;
return eina_ustringshare_add_length(str, slen);
}
-EAPI const Eina_Unicode *
+EINA_API const Eina_Unicode *
eina_ustringshare_ref(const Eina_Unicode *str)
{
return (const Eina_Unicode *)eina_share_common_ref(ustringshare_share,
(const char *)str);
}
-EAPI int
+EINA_API int
eina_ustringshare_strlen(const Eina_Unicode *str)
{
int len = eina_share_common_length(ustringshare_share, (const char *)str);
@@ -182,7 +182,7 @@ eina_ustringshare_strlen(const Eina_Unicode *str)
return len;
}
-EAPI void
+EINA_API void
eina_ustringshare_dump(void)
{
eina_share_common_dump(ustringshare_share, NULL, 0);
diff --git a/src/lib/eina/eina_ustringshare.h b/src/lib/eina/eina_ustringshare.h
index 5c92e5f67e..acbd50cc3c 100644
--- a/src/lib/eina/eina_ustringshare.h
+++ b/src/lib/eina/eina_ustringshare.h
@@ -109,7 +109,7 @@
*
* @see eina_ustringshare_add()
*/
-EAPI const Eina_Unicode *eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
+EINA_API const Eina_Unicode *eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves an instance of a string for use in a program.
@@ -130,7 +130,7 @@ EAPI const Eina_Unicode *eina_ustringshare_add_length(const Eina_Unicode *str, u
*
* @see eina_ustringshare_add_length()
*/
-EAPI const Eina_Unicode *eina_ustringshare_add(const Eina_Unicode *str) EINA_WARN_UNUSED_RESULT;
+EINA_API const Eina_Unicode *eina_ustringshare_add(const Eina_Unicode *str) EINA_WARN_UNUSED_RESULT;
/**
* @brief Increments references of the given shared string.
@@ -146,7 +146,7 @@ EAPI const Eina_Unicode *eina_ustringshare_add(const Eina_Unicode *str) EINA_WAR
*
* There is no unref since this is the work of eina_ustringshare_del().
*/
-EAPI const Eina_Unicode *eina_ustringshare_ref(const Eina_Unicode *str);
+EINA_API const Eina_Unicode *eina_ustringshare_ref(const Eina_Unicode *str);
/**
* @brief Notes that the given string has lost an instance.
@@ -161,7 +161,7 @@ EAPI const Eina_Unicode *eina_ustringshare_ref(const Eina_Unicode *str);
* @note If the given pointer is not shared, bad things will happen, likely a
* segmentation fault.
*/
-EAPI void eina_ustringshare_del(const Eina_Unicode *str);
+EINA_API void eina_ustringshare_del(const Eina_Unicode *str);
/**
* @brief Notes that the given string @b must be shared.
@@ -176,7 +176,7 @@ EAPI void eina_ustringshare_del(const Eina_Unicode *str);
* @note If the given pointer is not shared, bad things will happen, likely a
* segmentation fault. If in doubt, try strlen().
*/
-EAPI int eina_ustringshare_strlen(const Eina_Unicode *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
+EINA_API int eina_ustringshare_strlen(const Eina_Unicode *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
/**
* @brief Dumps the contents of the share_common.
@@ -184,7 +184,7 @@ EAPI int eina_ustringshare_strlen(const Eina_Unicode *str) EINA_
* This function dumps all strings in the share_common to stdout with a
* DDD: prefix per line and a memory usage summary.
*/
-EAPI void eina_ustringshare_dump(void);
+EINA_API void eina_ustringshare_dump(void);
static inline Eina_Bool eina_ustringshare_replace(const Eina_Unicode **p_str, const Eina_Unicode *news) EINA_ARG_NONNULL(1);
static inline Eina_Bool eina_ustringshare_replace_length(const Eina_Unicode **p_str, const Eina_Unicode *news, unsigned int slen) EINA_ARG_NONNULL(1);
diff --git a/src/lib/eina/eina_util.c b/src/lib/eina/eina_util.c
index 290038037d..a003eb8fdb 100644
--- a/src/lib/eina/eina_util.c
+++ b/src/lib/eina/eina_util.c
@@ -48,7 +48,7 @@
* API *
*============================================================================*/
-EAPI const char *
+EINA_API const char *
eina_environment_home_get(void)
{
static char *home = NULL;
@@ -94,7 +94,7 @@ eina_environment_home_get(void)
return home;
}
-EAPI const char *
+EINA_API const char *
eina_environment_tmp_get(void)
{
static char *tmp = NULL;
diff --git a/src/lib/eina/eina_util.h b/src/lib/eina/eina_util.h
index 08b15233ab..a4ee7a9981 100644
--- a/src/lib/eina/eina_util.h
+++ b/src/lib/eina/eina_util.h
@@ -37,7 +37,7 @@
*
* @since 1.15
*/
-EAPI const char *eina_environment_home_get(void);
+EINA_API const char *eina_environment_home_get(void);
/**
* @brief Returns the content of the environment referred as TMPDIR on this system.
@@ -48,7 +48,7 @@ EAPI const char *eina_environment_home_get(void);
*
* @since 1.15
*/
-EAPI const char *eina_environment_tmp_get(void);
+EINA_API const char *eina_environment_tmp_get(void);
/**
* @brief Warningless comparison of doubles using ==
diff --git a/src/lib/eina/eina_value.c b/src/lib/eina/eina_value.c
index 0596b70e9f..4045124775 100644
--- a/src/lib/eina/eina_value.c
+++ b/src/lib/eina/eina_value.c
@@ -39,7 +39,7 @@
#include "eina_safety_checks.h"
#include "eina_value.h"
-EAPI Eina_Error EINA_ERROR_VALUE_FAILED = 0;
+EINA_API Eina_Error EINA_ERROR_VALUE_FAILED = 0;
/*============================================================================*
* Local *
@@ -2266,7 +2266,7 @@ _eina_value_type_string_vset(const Eina_Value_Type *type EINA_UNUSED, void *mem,
{
char **tmem = mem;
const char *str = va_arg(args, const char *);
-
+
if (str == *tmem) return EINA_TRUE;
if (!str)
{
@@ -2291,7 +2291,7 @@ _eina_value_type_string_pset(const Eina_Value_Type *type EINA_UNUSED, void *mem,
{
char **tmem = mem;
const char * const *str = ptr;
-
+
if (*str == *tmem) return EINA_TRUE;
if (!*str)
{
@@ -3567,11 +3567,14 @@ _eina_value_type_tm_compare(const Eina_Value_Type *type, const void *a, const vo
struct tm tma = *(struct tm*)a;
struct tm tmb = *(struct tm*)b;
time_t ta, tb;
+ struct timeval tva = {0}, tvb = {0};
ta = mktime(&tma);
tb = mktime(&tmb);
+ tva.tv_sec = ta;
+ tvb.tv_sec = tb;
- return _eina_value_type_timeval_compare(type, &ta, &tb);
+ return _eina_value_type_timeval_compare(type, &tva, &tvb);
}
static Eina_Bool
@@ -4087,7 +4090,7 @@ _eina_value_type_struct_ops_get(const Eina_Value_Struct *st)
return st->desc->ops;
}
-EAPI const Eina_Value_Struct_Member *
+EINA_API const Eina_Value_Struct_Member *
eina_value_struct_member_find(const Eina_Value_Struct *st, const char *name)
{
const Eina_Value_Struct_Operations *ops;
@@ -4572,7 +4575,7 @@ _eina_value_type_optional_flush(const Eina_Value_Type *type EINA_UNUSED, void *m
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_value_optional_reset(Eina_Value *value)
{
void *mem = eina_value_memory_get(value);
@@ -4581,7 +4584,7 @@ eina_value_optional_reset(Eina_Value *value)
return _eina_value_type_optional_flush(EINA_VALUE_TYPE_OPTIONAL, mem);
}
-EAPI Eina_Value*
+EINA_API Eina_Value*
eina_value_optional_new(Eina_Value_Type const *subtype,
const void* initial_value) EINA_ARG_NONNULL(1, 2)
{
@@ -4604,40 +4607,40 @@ eina_value_optional_new(Eina_Value_Type const *subtype,
return value;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_value_optional_pset(Eina_Value *value,
Eina_Value_Type const* subtype,
const void *subvalue) EINA_ARG_NONNULL(1, 2, 3)
{
eina_value_optional_reset(value);
-
- if(sizeof(Eina_Value_Optional_Outer) <= sizeof(Eina_Value_Union))
+
+ if (sizeof(Eina_Value_Optional_Outer) <= sizeof(Eina_Value_Union))
{
- Eina_Value_Optional_Outer outer;
- outer.subtype = subtype;
- outer.value = malloc(subtype->value_size);
- eina_value_type_setup(subtype, outer.value);
- eina_value_type_pset(subtype, outer.value, subvalue);
- if (!eina_value_pset(value, &outer))
- {
- return EINA_FALSE;
- }
+ Eina_Value_Optional_Outer outer;
+ outer.subtype = subtype;
+ outer.value = malloc(subtype->value_size);
+ if (!eina_value_type_setup(subtype, outer.value))
+ return EINA_FALSE;
+ eina_value_type_pset(subtype, outer.value, subvalue);
+ if (!eina_value_pset(value, &outer))
+ return EINA_FALSE;
}
else
{
Eina_Value_Optional_Inner *inner =
malloc(sizeof(Eina_Value_Optional_Inner) + subtype->value_size);
inner->subtype = subtype;
- eina_value_type_setup(subtype, inner->value);
+ if (!eina_value_type_setup(subtype, inner->value))
+ return EINA_FALSE;
eina_value_type_pset(subtype, inner->value, subvalue);
if (!eina_value_pset(value, &inner))
- return EINA_FALSE;
+ return EINA_FALSE;
}
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_value_optional_pget(Eina_Value *value, void *subvalue) EINA_ARG_NONNULL(1, 2, 3)
{
if(sizeof(Eina_Value_Optional_Outer) <= sizeof(Eina_Value_Union))
@@ -4718,7 +4721,7 @@ _eina_value_type_optional_compare(const Eina_Value_Type *type EINA_UNUSED, const
{
Eina_Value_Optional_Inner const * const* lhs_p = lhs_raw;
Eina_Value_Optional_Inner const * const* rhs_p = rhs_raw;
-
+
if(!*lhs_p)
return *rhs_p ? -1 : 0;
else if(!*rhs_p)
@@ -4759,7 +4762,7 @@ _eina_value_type_eina_error_convert_to(const Eina_Value_Type *type, const Eina_V
return _eina_value_type_int_convert_to(type, convert, type_mem, convert_mem);
}
-EAPI const Eina_Value_Type _EINA_VALUE_TYPE_OPTIONAL = {
+EINA_API const Eina_Value_Type _EINA_VALUE_TYPE_OPTIONAL = {
EINA_VALUE_TYPE_VERSION,
sizeof(Eina_Value_Union),
"optional",
@@ -4890,7 +4893,7 @@ _eina_value_type_file_pget(const Eina_Value_Type *type EINA_UNUSED, const void *
return EINA_TRUE;
}
-EAPI const Eina_Value_Type _EINA_VALUE_TYPE_FILE = {
+EINA_API const Eina_Value_Type _EINA_VALUE_TYPE_FILE = {
EINA_VALUE_TYPE_VERSION,
sizeof (Eina_File *),
"Eina_File",
@@ -5004,7 +5007,7 @@ _eina_value_type_rectangle_pget(const Eina_Value_Type *type EINA_UNUSED, const v
return EINA_TRUE;
}
-EAPI const Eina_Value_Type _EINA_VALUE_TYPE_RECTANGLE = {
+EINA_API const Eina_Value_Type _EINA_VALUE_TYPE_RECTANGLE = {
EINA_VALUE_TYPE_VERSION,
sizeof (Eina_Rectangle),
"Eina_Rectangle",
@@ -5364,7 +5367,7 @@ _eina_value_inner_free_internal(int size, void *mem)
_eina_value_inner_mp_dispose(size, imp);
}
-EAPI void *
+EINA_API void *
eina_value_inner_alloc(size_t size)
{
void *mem;
@@ -5378,7 +5381,7 @@ eina_value_inner_alloc(size_t size)
return mem;
}
-EAPI void
+EINA_API void
eina_value_inner_free(size_t size, void *mem)
{
if (size > 256)
@@ -5582,52 +5585,45 @@ eina_value_shutdown(void)
* API *
*============================================================================*/
-EAPI const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START = NULL;
-EAPI const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END = NULL;
-
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_VALUE = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ERROR = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BOOL = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ULONG = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT64 = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_CHAR = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_SHORT = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_INT = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_LONG = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_INT64 = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_FLOAT = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_DOUBLE = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRINGSHARE = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRING = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_LIST = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_HASH = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_OPTIONAL = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_FILE = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_RECTANGLE = NULL;
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TM = NULL;
-
-
-EAPI const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC = NULL;
-
-EAPI const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH = NULL;
-EAPI const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE = NULL;
-
-EAPI const unsigned int eina_prime_table[] =
-{
- 17, 31, 61, 127, 257, 509, 1021,
- 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573,
- 2097143, 4194301, 8388617, 16777213
-};
-
-EAPI Eina_Value *
+EINA_API const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START = NULL;
+EINA_API const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END = NULL;
+
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_VALUE = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_ERROR = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_BOOL = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_ULONG = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_UINT64 = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_CHAR = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_SHORT = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_INT = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_LONG = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_INT64 = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_FLOAT = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_DOUBLE = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_STRINGSHARE = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_STRING = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_LIST = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_HASH = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_OPTIONAL = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_FILE = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_RECTANGLE = NULL;
+EINA_API const Eina_Value_Type *EINA_VALUE_TYPE_TM = NULL;
+
+
+EINA_API const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC = NULL;
+
+EINA_API const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH = NULL;
+EINA_API const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE = NULL;
+
+EINA_API Eina_Value *
eina_value_new(const Eina_Value_Type *type)
{
Eina_Value *value = eina_mempool_malloc(_eina_value_mp, sizeof(Eina_Value));
@@ -5645,7 +5641,7 @@ eina_value_new(const Eina_Value_Type *type)
return value;
}
-EAPI void
+EINA_API void
eina_value_free(Eina_Value *value)
{
if (!value) return;
@@ -5654,7 +5650,7 @@ eina_value_free(Eina_Value *value)
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_value_copy(const Eina_Value *value, Eina_Value *copy)
{
const Eina_Value_Type *type;
@@ -5688,7 +5684,7 @@ eina_value_copy(const Eina_Value *value, Eina_Value *copy)
return ret;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_value_convert(const Eina_Value *value, Eina_Value *convert)
{
Eina_Bool ret = EINA_FALSE;
@@ -5719,7 +5715,7 @@ eina_value_convert(const Eina_Value *value, Eina_Value *convert)
return ret;
}
-EAPI char *
+EINA_API char *
eina_value_to_string(const Eina_Value *value)
{
Eina_Value tmp;
@@ -5735,7 +5731,7 @@ eina_value_to_string(const Eina_Value *value)
return tmp.value.ptr; /* steal value */
}
-EAPI Eina_Binbuf *
+EINA_API Eina_Binbuf *
eina_value_to_binbuf(Eina_Value *value)
{
Eina_Value tmp = EINA_VALUE_EMPTY;
@@ -5763,7 +5759,7 @@ eina_value_to_binbuf(Eina_Value *value)
return buf;
}
-EAPI Eina_Value *
+EINA_API Eina_Value *
eina_value_array_new(const Eina_Value_Type *subtype, unsigned int step)
{
Eina_Value *value;
@@ -5783,7 +5779,7 @@ eina_value_array_new(const Eina_Value_Type *subtype, unsigned int step)
return value;
}
-EAPI Eina_Value *
+EINA_API Eina_Value *
eina_value_list_new(const Eina_Value_Type *subtype)
{
Eina_Value *value;
@@ -5803,7 +5799,7 @@ eina_value_list_new(const Eina_Value_Type *subtype)
return value;
}
-EAPI Eina_Value *
+EINA_API Eina_Value *
eina_value_hash_new(const Eina_Value_Type *subtype, unsigned int buckets_power_size)
{
Eina_Value *value;
@@ -5823,7 +5819,7 @@ eina_value_hash_new(const Eina_Value_Type *subtype, unsigned int buckets_power_s
return value;
}
-EAPI Eina_Value *
+EINA_API Eina_Value *
eina_value_struct_new(const Eina_Value_Struct_Desc *desc)
{
Eina_Value *value;
@@ -5841,14 +5837,14 @@ eina_value_struct_new(const Eina_Value_Struct_Desc *desc)
return value;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_value_type_check(const Eina_Value_Type *type)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE);
return type->version == EINA_VALUE_TYPE_VERSION;
}
-EAPI const char *
+EINA_API const char *
eina_value_type_name_get(const Eina_Value_Type *type)
{
EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), NULL);
diff --git a/src/lib/eina/eina_value.h b/src/lib/eina/eina_value.h
index faca4bfde1..58464bb87d 100644
--- a/src/lib/eina/eina_value.h
+++ b/src/lib/eina/eina_value.h
@@ -213,7 +213,7 @@
* Next we have setting, this however requires not one but rather two functions,
* the reason for this is because to be able to receive arguments of any type
* eina value uses <a href="https://wikipedia.org/wiki/Variadic_functions">
- * variadic functions</a>, so we need a function to get the argument from a
+ * variadic functions</a>, so we need a function to get the argument from a
* va_list and another to actually to the setting.
*
* Lets first look at the pset function which sets the received value to a
@@ -361,7 +361,7 @@ union _Eina_Value_Union
*
* @since 1.21
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ERROR;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_ERROR;
/**
* @var EINA_VALUE_TYPE_VALUE
@@ -372,7 +372,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ERROR;
*
* @since 1.21
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_VALUE;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_VALUE;
/**
* @var EINA_VALUE_TYPE_UCHAR
@@ -380,7 +380,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_VALUE;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR;
/**
* @var EINA_VALUE_TYPE_UCHAR
@@ -388,7 +388,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR;
*
* @since 1.21
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_BOOL;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_BOOL;
/**
* @var EINA_VALUE_TYPE_USHORT
@@ -396,7 +396,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_BOOL;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_USHORT;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_USHORT;
/**
* @var EINA_VALUE_TYPE_UINT
@@ -404,7 +404,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_USHORT;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT;
/**
* @var EINA_VALUE_TYPE_ULONG
@@ -412,7 +412,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ULONG;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_ULONG;
/**
* @var EINA_VALUE_TYPE_TIMESTAMP
@@ -421,7 +421,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ULONG;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP;
/**
* @var EINA_VALUE_TYPE_UINT64
@@ -429,7 +429,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT64;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT64;
/**
* @var EINA_VALUE_TYPE_CHAR
@@ -437,7 +437,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT64;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_CHAR;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_CHAR;
/**
* @var EINA_VALUE_TYPE_SHORT
@@ -445,7 +445,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_CHAR;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_SHORT;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_SHORT;
/**
* @var EINA_VALUE_TYPE_INT
@@ -453,7 +453,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_SHORT;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_INT;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_INT;
/**
* @var EINA_VALUE_TYPE_LONG
@@ -461,7 +461,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_INT;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_LONG;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_LONG;
/**
* @var EINA_VALUE_TYPE_INT64
@@ -469,7 +469,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_LONG;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_INT64;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_INT64;
/**
* @var EINA_VALUE_TYPE_FLOAT
@@ -477,7 +477,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_INT64;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_FLOAT;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_FLOAT;
/**
* @var EINA_VALUE_TYPE_DOUBLE
@@ -485,7 +485,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_FLOAT;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_DOUBLE;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_DOUBLE;
/**
* @var EINA_VALUE_TYPE_STRINGSHARE
@@ -493,7 +493,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_DOUBLE;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRINGSHARE;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_STRINGSHARE;
/**
* @var EINA_VALUE_TYPE_STRING
@@ -501,7 +501,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRINGSHARE;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRING;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_STRING;
/**
@@ -525,7 +525,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRING;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY;
/**
* @var EINA_VALUE_TYPE_LIST
@@ -547,7 +547,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_LIST;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_LIST;
/**
* @var EINA_VALUE_TYPE_HASH
@@ -576,7 +576,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_LIST;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_HASH;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_HASH;
/**
* @var EINA_VALUE_TYPE_TIMEVAL
@@ -590,7 +590,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_HASH;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL;
/**
* @var EINA_VALUE_TYPE_BLOB
@@ -606,7 +606,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_BLOB;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_BLOB;
/**
* @var EINA_VALUE_TYPE_STRUCT
@@ -628,7 +628,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_BLOB;
*
* @since 1.2
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT;
/**
* @var EINA_VALUE_TYPE_TM
@@ -642,9 +642,9 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT;
*
* @since 1.21
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TM;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_TM;
-EAPI extern Eina_Error EINA_ERROR_VALUE_FAILED;
+EINA_API extern Eina_Error EINA_ERROR_VALUE_FAILED;
/**
* @defgroup Eina_Value_Value_Group Generic Value management
@@ -686,7 +686,7 @@ struct _Eina_Value
*
* @since 1.2
*/
-EAPI Eina_Value *eina_value_new(const Eina_Value_Type *type) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Value *eina_value_new(const Eina_Value_Type *type) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
/**
* @brief Frees value and its data.
@@ -696,7 +696,7 @@ EAPI Eina_Value *eina_value_new(const Eina_Value_Type *type) EINA_ARG_NONNULL(1)
*
* @since 1.2
*/
-EAPI void eina_value_free(Eina_Value *value);
+EINA_API void eina_value_free(Eina_Value *value);
/**
* @brief Initializes generic value storage.
@@ -758,7 +758,7 @@ static inline void eina_value_flush(Eina_Value *value) EINA_ARG_NONNULL(1);
*
* @since 1.2
*/
-EAPI Eina_Bool eina_value_copy(const Eina_Value *value,
+EINA_API Eina_Bool eina_value_copy(const Eina_Value *value,
Eina_Value *copy) EINA_ARG_NONNULL(1, 2);
/**
@@ -1105,7 +1105,7 @@ static inline Eina_Bool eina_value_pget(const Eina_Value *value,
*
* @since 1.2
*/
-EAPI Eina_Bool eina_value_convert(const Eina_Value *value,
+EINA_API Eina_Bool eina_value_convert(const Eina_Value *value,
Eina_Value *convert) EINA_ARG_NONNULL(1, 2);
/**
@@ -1124,7 +1124,7 @@ EAPI Eina_Bool eina_value_convert(const Eina_Value *value,
*
* @since 1.20
*/
-EAPI Eina_Binbuf *eina_value_to_binbuf(Eina_Value *value);
+EINA_API Eina_Binbuf *eina_value_to_binbuf(Eina_Value *value);
/**
* @brief Converts value to string.
@@ -1136,7 +1136,7 @@ EAPI Eina_Binbuf *eina_value_to_binbuf(Eina_Value *value);
* @see eina_value_to_binbuf()
* @since 1.2
*/
-EAPI char *eina_value_to_string(const Eina_Value *value) EINA_ARG_NONNULL(1);
+EINA_API char *eina_value_to_string(const Eina_Value *value) EINA_ARG_NONNULL(1);
/**
* @brief Queries value type.
@@ -1203,7 +1203,7 @@ struct _Eina_Value_Array
*
* @since 1.2
*/
-EAPI Eina_Value *eina_value_array_new(const Eina_Value_Type *subtype,
+EINA_API Eina_Value *eina_value_array_new(const Eina_Value_Type *subtype,
unsigned int step) EINA_ARG_NONNULL(1);
/**
@@ -1847,10 +1847,10 @@ static inline Eina_Bool eina_value_array_value_get(const Eina_Value *src,
* @brief Definition for the macro to iterate over an array contained in an Eina_Value.
* @since 1.21
*
- * @param[in] array The list to iterate over.
- * @param[in] length Contain the length of the array
- * @param[out] it Contain the current position walked over
- * @param[out] value Contain the value at the current position.
+ * @param[in] Array The list to iterate over.
+ * @param[in] Length Contain the length of the array
+ * @param[out] It Contain the current position walked over
+ * @param[out] Value Contain the value at the current position.
*
* This macro iterates over @p array from the first element to
* the last. @p value is the data related to the current element.
@@ -1935,7 +1935,7 @@ struct _Eina_Value_List
*
* @since 1.2
*/
-EAPI Eina_Value *eina_value_list_new(const Eina_Value_Type *subtype) EINA_ARG_NONNULL(1);
+EINA_API Eina_Value *eina_value_list_new(const Eina_Value_Type *subtype) EINA_ARG_NONNULL(1);
/**
* @brief Initializes generic value storage of type list.
@@ -1966,7 +1966,7 @@ static inline Eina_Bool eina_value_list_setup(Eina_Value *value,
/**
* @brief Queries number of elements in value of list type.
*
- * @param[in]value value object.
+ * @param[in] value value object.
* @return number of child elements.
*
* @since 1.2
@@ -2605,7 +2605,7 @@ struct _Eina_Value_Hash
*
* @since 1.2
*/
-EAPI Eina_Value *eina_value_hash_new(const Eina_Value_Type *subtype, unsigned int buckets_power_size) EINA_ARG_NONNULL(1);
+EINA_API Eina_Value *eina_value_hash_new(const Eina_Value_Type *subtype, unsigned int buckets_power_size) EINA_ARG_NONNULL(1);
/**
* @brief Initializes generic value storage of type hash.
@@ -2970,7 +2970,7 @@ struct _Eina_Value_Blob_Operations
*
* No compare or to_string are provided, defaults will be used.
*/
-EAPI extern const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC;
+EINA_API extern const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC;
/**
* @typedef Eina_Value_Blob
@@ -3083,7 +3083,7 @@ struct _Eina_Value_Struct_Operations
* No other methods are set (alloc, free, copy, compare), then it uses
* the default operations.
*/
-EAPI extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH;
+EINA_API extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH;
/**
* @var EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE
@@ -3098,7 +3098,7 @@ EAPI extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_BIN
* No other methods are set (alloc, free, copy, compare), then it uses
* the default operations.
*/
-EAPI extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE;
+EINA_API extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE;
/**
* @struct _Eina_Value_Struct_Member
@@ -3223,7 +3223,7 @@ struct _Eina_Value_Struct
*
* @since 1.2
*/
-EAPI Eina_Value *eina_value_struct_new(const Eina_Value_Struct_Desc *desc) EINA_ARG_NONNULL(1);
+EINA_API Eina_Value *eina_value_struct_new(const Eina_Value_Struct_Desc *desc) EINA_ARG_NONNULL(1);
/**
* @brief Initializes generic value storage of type struct.
@@ -3256,7 +3256,7 @@ static inline Eina_Bool eina_value_struct_setup(Eina_Value *value,
*
* @param[in] value Value object
* @return structure description, with all members and size.
- * on failure, #NULL is returned.
+ * on failure, @c NULL is returned.
*
* @since 1.21
*/
@@ -3698,7 +3698,7 @@ struct _Eina_Value_Type
*
* @since 1.2
*/
-EAPI const char *eina_value_type_name_get(const Eina_Value_Type *type) EINA_PURE EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API const char *eina_value_type_name_get(const Eina_Value_Type *type) EINA_PURE EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Checks if type is valid.
@@ -3706,12 +3706,12 @@ EAPI const char *eina_value_type_name_get(const Eina_Value_Type *type) EINA_PURE
* @param[in] type Type reference.
* @return #EINA_TRUE if valid, #EINA_FALSE otherwise.
*
- * A type is invalid if it's NULL or if version field is not the same
+ * A type is invalid if it's @c NULL or if version field is not the same
* as runtime #EINA_VALUE_TYPE_VERSION.
*
* @since 1.2
*/
-EAPI Eina_Bool eina_value_type_check(const Eina_Value_Type *type) EINA_PURE EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Bool eina_value_type_check(const Eina_Value_Type *type) EINA_PURE EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Initializes memory using type descriptor.
@@ -3837,7 +3837,7 @@ static inline Eina_Bool eina_value_type_pget(const Eina_Value_Type *type, const
*
* @since 1.17
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_OPTIONAL;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_OPTIONAL;
/**
* @typedef Eina_Value_Optional type to be used with Eina_Value_Struct
@@ -3864,7 +3864,7 @@ static inline Eina_Value *eina_value_optional_empty_new(void);
*
* @since 1.17
*/
-EAPI Eina_Value *eina_value_optional_new(const Eina_Value_Type *subtype,
+EINA_API Eina_Value *eina_value_optional_new(const Eina_Value_Type *subtype,
const void* value) EINA_ARG_NONNULL(1, 2);
/**
@@ -3889,7 +3889,7 @@ static inline Eina_Bool eina_value_optional_empty_is(const Eina_Value *value,
*
* @since 1.17
*/
-EAPI Eina_Bool eina_value_optional_pset(Eina_Value *value,
+EINA_API Eina_Bool eina_value_optional_pset(Eina_Value *value,
Eina_Value_Type const* subtype,
const void *subvalue) EINA_ARG_NONNULL(1, 2, 3);
@@ -3903,7 +3903,7 @@ EAPI Eina_Bool eina_value_optional_pset(Eina_Value *value,
*
* @since 1.17
*/
-EAPI Eina_Bool eina_value_optional_pget(Eina_Value *value,
+EINA_API Eina_Bool eina_value_optional_pget(Eina_Value *value,
void *subvalue) EINA_ARG_NONNULL(1, 2);
/**
@@ -3914,7 +3914,7 @@ EAPI Eina_Bool eina_value_optional_pget(Eina_Value *value,
*
* @since 1.17
*/
-EAPI Eina_Bool eina_value_optional_reset(Eina_Value *value) EINA_ARG_NONNULL(1);
+EINA_API Eina_Bool eina_value_optional_reset(Eina_Value *value) EINA_ARG_NONNULL(1);
/**
*
@@ -3933,7 +3933,7 @@ static inline const Eina_Value_Type *eina_value_optional_type_get(Eina_Value *va
*
* @since 1.21
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_FILE;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_FILE;
/**
* @var EINA_VALUE_TYPE_RECTANGLE
@@ -3941,7 +3941,7 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_FILE;
*
* @since 1.21
*/
-EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_RECTANGLE;
+EINA_API extern const Eina_Value_Type *EINA_VALUE_TYPE_RECTANGLE;
/**
* @}
diff --git a/src/lib/eina/eina_value_util.c b/src/lib/eina/eina_value_util.c
index 05c79910f0..484aa1b69e 100644
--- a/src/lib/eina/eina_value_util.c
+++ b/src/lib/eina/eina_value_util.c
@@ -73,7 +73,7 @@ static Eina_Value_Struct_Operations operations =
NULL
};
-EAPI Eina_Value_Struct_Desc *
+EINA_API Eina_Value_Struct_Desc *
eina_value_util_struct_desc_new(void)
{
Eina_Value_Util_Struct_Desc *st_desc;
@@ -85,7 +85,7 @@ eina_value_util_struct_desc_new(void)
return (Eina_Value_Struct_Desc*)st_desc;
}
-EAPI Eina_Value *
+EINA_API Eina_Value *
eina_value_util_time_string_new(const char *timestr)
{
Eina_Value *v;
diff --git a/src/lib/eina/eina_value_util.h b/src/lib/eina/eina_value_util.h
index 9b4fff78b0..70bffb8c4f 100644
--- a/src/lib/eina/eina_value_util.h
+++ b/src/lib/eina/eina_value_util.h
@@ -35,7 +35,7 @@
*
* @since 1.12
*/
-EAPI Eina_Value_Struct_Desc *eina_value_util_struct_desc_new(void);
+EINA_API Eina_Value_Struct_Desc *eina_value_util_struct_desc_new(void);
/**
* @brief Creates a new #Eina_Value containing the passed parameter.
@@ -45,7 +45,7 @@ EAPI Eina_Value_Struct_Desc *eina_value_util_struct_desc_new(void);
*
* @since 1.12
*/
-EAPI Eina_Value *eina_value_util_time_string_new(const char *timestr);
+EINA_API Eina_Value *eina_value_util_time_string_new(const char *timestr);
#include "eina_inline_value_util.x"
diff --git a/src/lib/eina/eina_vector.h b/src/lib/eina/eina_vector.h
index e9ee12d732..998879b099 100644
--- a/src/lib/eina/eina_vector.h
+++ b/src/lib/eina/eina_vector.h
@@ -24,42 +24,28 @@
/**
* @file
- * @ender_group{Eina_Vector_Type}
- * @ender_group{Eina_Vector2}
- * @ender_group{Eina_Vector3}
*/
-typedef struct _Eina_Vector2 Eina_Vector2;
-typedef struct _Eina_Vector3 Eina_Vector3;
-
-#define EINA_VECTOR2(x, y) ((Eina_Vector2) {(x), (y)})
/**
- * @}
- * @defgroup Eina_Vector2 Vectors in floating point
- * @ingroup Eina_Basic
- * @brief Vector definition and operations
+ * @addtogroup Eina_Data_Types_Group Data Types
+ *
* @{
*/
-struct _Eina_Vector2
-{
- double x;
- double y;
-};
-
/**
- * @}
- * @defgroup Eina_Vector3 Vectors in floating point
- * @ingroup Eina_Basic
- * @brief Vector definition and operations
+ * @defgroup Eina_Vector2 Floating point vectors in 2D
+ * @brief 2D vector definition and operations
* @{
*/
-struct _Eina_Vector3
+typedef struct _Eina_Vector2 Eina_Vector2;
+typedef struct _Eina_Vector3 Eina_Vector3;
+
+#define EINA_VECTOR2(x, y) ((Eina_Vector2) {(x), (y)})
+struct _Eina_Vector2
{
double x;
double y;
- double z;
};
/**
@@ -234,6 +220,20 @@ static inline void eina_vector2_homogeneous_position_transform(Eina_Vector2 *out
*/
static inline void eina_vector2_homogeneous_direction_transform(Eina_Vector2 *out, const Eina_Matrix3 *m, const Eina_Vector2 *v);
+/** @} */
+
+/**
+ * @defgroup Eina_Vector3 Floating point vectors in 3D
+ * @brief 3D vector definition and operations
+ * @{
+ */
+struct _Eina_Vector3
+{
+ double x;
+ double y;
+ double z;
+};
+
/**
* @brief Set parameters to vector.
*
@@ -536,6 +536,8 @@ static inline Eina_Bool eina_vector3_triangle_equivalent(Eina_Vector3 *v0, Eina_
/** @} */
+/** @} */
+
#include "eina_inline_vector.x"
#endif
diff --git a/src/lib/eina/eina_vpath.c b/src/lib/eina/eina_vpath.c
index ac2d6ca9e2..38255efcff 100644
--- a/src/lib/eina/eina_vpath.c
+++ b/src/lib/eina/eina_vpath.c
@@ -50,12 +50,10 @@ static char *
_fallback_runtime_dir(const char *home)
{
char buf[PATH_MAX];
-#if defined(HAVE_GETUID)
- uid_t uid = getuid();
-#endif
struct stat st;
-
#if defined(HAVE_GETUID) && defined(HAVE_GETEUID)
+ uid_t uid = getuid();
+
if (setuid(geteuid()) != 0)
{
fprintf(stderr,
@@ -232,11 +230,11 @@ _eina_vpath_resolve(const char *path, char *str, size_t size)
}
// ~username/ <- homedir of user "username"
else
+ {
#ifndef HAVE_GETPWENT
- ERR("User fetching is disabled on this system\nThe string was: %s", path);
- return 0;
+ ERR("User fetching is disabled on this system\nThe string was: %s", path);
+ return 0;
#else
- {
const char *p;
char *name;
@@ -251,8 +249,8 @@ _eina_vpath_resolve(const char *path, char *str, size_t size)
if (!_fetch_user_homedir(&home, name, path))
return 0;
path = p;
- }
#endif
+ }
if (home)
{
return snprintf(str, size, "%s%s", home, path);
@@ -323,7 +321,7 @@ _eina_vpath_resolve(const char *path, char *str, size_t size)
return 0;
}
-EAPI char *
+EINA_API char *
eina_vpath_resolve(const char* path)
{
char buf[PATH_MAX];
@@ -334,7 +332,7 @@ eina_vpath_resolve(const char* path)
return NULL;
}
-EAPI int
+EINA_API int
eina_vpath_resolve_snprintf(char *str, size_t size, const char *format, ...)
{
va_list args;
@@ -364,7 +362,7 @@ eina_vpath_resolve_snprintf(char *str, size_t size, const char *format, ...)
return 0;
}
-EAPI void
+EINA_API void
eina_vpath_interface_app_set(const char *app_domain, Eina_Prefix *app_pfx)
{
char buf[PATH_MAX];
@@ -391,7 +389,7 @@ eina_vpath_interface_app_set(const char *app_domain, Eina_Prefix *app_pfx)
_eina_vpath_data_add("app.tmp", buf);
}
-EAPI void
+EINA_API void
eina_vpath_interface_user_set(Eina_Vpath_Interface_User *user)
{
Eina_Bool free_run = EINA_FALSE;
diff --git a/src/lib/eina/eina_vpath.h b/src/lib/eina/eina_vpath.h
index 10b7c1edf2..e72d18c50c 100644
--- a/src/lib/eina/eina_vpath.h
+++ b/src/lib/eina/eina_vpath.h
@@ -98,7 +98,7 @@ typedef const char * Eina_Vpath;
* @since 1.21
*
*/
-EAPI char *eina_vpath_resolve(Eina_Vpath path);
+EINA_API char *eina_vpath_resolve(Eina_Vpath path);
/**
* Translate a virtual path into a normal path, and print it into str.
@@ -113,6 +113,6 @@ EAPI char *eina_vpath_resolve(Eina_Vpath path);
* @since 1.21
*
*/
-EAPI int eina_vpath_resolve_snprintf(char *str, size_t size, const char *format, ...);
+EINA_API int eina_vpath_resolve_snprintf(char *str, size_t size, const char *format, ...);
#endif
#endif
diff --git a/src/lib/eina/eina_xattr.c b/src/lib/eina/eina_xattr.c
index a32ff5306a..1d665a7910 100644
--- a/src/lib/eina/eina_xattr.c
+++ b/src/lib/eina/eina_xattr.c
@@ -180,7 +180,7 @@ _eina_xattr_ls_iterator_free(Eina_Xattr_Iterator *it)
* API *
*============================================================================*/
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_xattr_value_fd_ls(int fd)
{
#ifdef HAVE_XATTR
@@ -224,7 +224,7 @@ eina_xattr_value_fd_ls(int fd)
#endif
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_xattr_fd_ls(int fd)
{
#ifdef HAVE_XATTR
@@ -260,7 +260,7 @@ eina_xattr_fd_ls(int fd)
#endif
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_xattr_ls(const char *file)
{
#ifdef HAVE_XATTR
@@ -296,7 +296,7 @@ eina_xattr_ls(const char *file)
#endif
}
-EAPI Eina_Iterator *
+EINA_API Eina_Iterator *
eina_xattr_value_ls(const char *file)
{
#ifdef HAVE_XATTR
@@ -342,7 +342,7 @@ eina_xattr_value_ls(const char *file)
#endif
}
-EAPI void *
+EINA_API void *
eina_xattr_get(const char *file, const char *attribute, ssize_t *size)
{
#ifdef HAVE_XATTR
@@ -381,7 +381,7 @@ eina_xattr_get(const char *file, const char *attribute, ssize_t *size)
#endif
}
-EAPI void *
+EINA_API void *
eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size)
{
#ifdef HAVE_XATTR
@@ -419,7 +419,7 @@ eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags)
{
#ifdef HAVE_XATTR
@@ -452,7 +452,7 @@ eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags)
{
#ifdef HAVE_XATTR
@@ -484,7 +484,7 @@ eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t lengt
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_del(const char *file, const char *attribute)
{
#ifdef HAVE_XATTR
@@ -498,7 +498,7 @@ eina_xattr_del(const char *file, const char *attribute)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_fd_del(int fd, const char *attribute)
{
#ifdef HAVE_XATTR
@@ -511,7 +511,7 @@ eina_xattr_fd_del(int fd, const char *attribute)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
@@ -519,7 +519,7 @@ eina_xattr_string_set(const char *file, const char *attribute, const char *data,
return eina_xattr_set(file, attribute, data, strlen(data) + 1, flags);
}
-EAPI char *
+EINA_API char *
eina_xattr_string_get(const char *file, const char *attribute)
{
char *tmp;
@@ -537,7 +537,7 @@ eina_xattr_string_get(const char *file, const char *attribute)
return tmp;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags)
{
char buffer[128];
@@ -546,7 +546,7 @@ eina_xattr_double_set(const char *file, const char *attribute, double value, Ein
return eina_xattr_string_set(file, attribute, buffer, flags);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_double_get(const char *file, const char *attribute, double *value)
{
char *tmp;
@@ -570,7 +570,7 @@ eina_xattr_double_get(const char *file, const char *attribute, double *value)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags)
{
char buffer[10];
@@ -579,7 +579,7 @@ eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xatt
return eina_xattr_string_set(file, attribute, buffer, flags);
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_int_get(const char *file, const char *attribute, int *value)
{
char *tmp;
@@ -598,7 +598,7 @@ eina_xattr_int_get(const char *file, const char *attribute, int *value)
return result;
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_copy(const char *src, const char *dst)
{
#ifdef HAVE_XATTR
@@ -629,7 +629,7 @@ eina_xattr_copy(const char *src, const char *dst)
#endif
}
-EAPI Eina_Bool
+EINA_API Eina_Bool
eina_xattr_fd_copy(int src, int dst)
{
#ifdef HAVE_XATTR
diff --git a/src/lib/eina/eina_xattr.h b/src/lib/eina/eina_xattr.h
index 711c40e86f..ce29c35f41 100644
--- a/src/lib/eina/eina_xattr.h
+++ b/src/lib/eina/eina_xattr.h
@@ -24,7 +24,9 @@
#include <sys/types.h>
/**
- * @addtogroup Eina_Tools_Group Tools
+ * @addtogroup Eina_Xattr_Group Xattrs
+ * @ingroup Eina_Tools_Group
+ * @brief Extended Attributes handling
*
* @{
*/
@@ -36,9 +38,14 @@
* @since 1.1
*/
typedef enum {
- EINA_XATTR_INSERT, /**< This is the default behavior, it will either create or replace the extended attribute */
- EINA_XATTR_REPLACE, /**< This will only succeed if the extended attribute previously existed */
- EINA_XATTR_CREATED /**< This will only succeed if the extended attribute wasn't previously set */
+ EINA_XATTR_INSERT = 0, /**< This is the default behavior, it will either create or replace the extended attribute */
+ EINA_XATTR_REPLACE = 1, /**< This will only succeed if the extended attribute previously existed */
+ EINA_XATTR_CREATED = 2, /**< This will only succeed if the extended attribute wasn't previously set */
+ //The definitions below are required in order to have symbols available for the enum definition in eina_types.eot
+ EINA_XATTR_FLAGS_INSERT = 0, /**< This is the default behavior, it will either create or replace the extended attribute */
+ EINA_XATTR_FLAGS_REPLACE = 1, /**< This will only succeed if the extended attribute previously existed */
+ EINA_XATTR_FLAGS_CREATED = 2 /**< This will only succeed if the extended attribute wasn't previously set */
+
} Eina_Xattr_Flags;
typedef struct _Eina_Xattr Eina_Xattr;
@@ -61,7 +68,7 @@ struct _Eina_Xattr
*
* @since 1.1
*/
-EAPI Eina_Iterator *eina_xattr_ls(const char *file) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_xattr_ls(const char *file) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets an iterator that list all extended attribute value related to a fd.
@@ -74,7 +81,7 @@ EAPI Eina_Iterator *eina_xattr_ls(const char *file) EINA_ARG_NONNULL(1) EINA_WAR
*
* @since 1.2
*/
-EAPI Eina_Iterator *eina_xattr_value_ls(const char *file) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_xattr_value_ls(const char *file) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets an iterator that list all extended attribute related to a fd.
@@ -87,7 +94,7 @@ EAPI Eina_Iterator *eina_xattr_value_ls(const char *file) EINA_ARG_NONNULL(1) EI
*
* @since 1.2
*/
-EAPI Eina_Iterator *eina_xattr_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_xattr_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
/**
* @brief Gets an iterator that list all extended attribute value related to a fd.
@@ -100,7 +107,7 @@ EAPI Eina_Iterator *eina_xattr_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
*
* @since 1.2
*/
-EAPI Eina_Iterator *eina_xattr_value_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
+EINA_API Eina_Iterator *eina_xattr_value_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
/**
* @brief Copies the extended attribute from one file to another.
@@ -113,7 +120,7 @@ EAPI Eina_Iterator *eina_xattr_value_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
*
* @since 1.8
*/
-EAPI Eina_Bool eina_xattr_copy(const char *src, const char *dst) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_xattr_copy(const char *src, const char *dst) EINA_ARG_NONNULL(1, 2);
/**
* @brief Copies the extended attribute from one file descriptor to another.
@@ -126,7 +133,7 @@ EAPI Eina_Bool eina_xattr_copy(const char *src, const char *dst) EINA_ARG_NONNUL
*
* @since 1.8
*/
-EAPI Eina_Bool eina_xattr_fd_copy(int src, int dst);
+EINA_API Eina_Bool eina_xattr_fd_copy(int src, int dst);
/**
* @brief Retrieves an extended attribute from a file.
@@ -140,7 +147,7 @@ EAPI Eina_Bool eina_xattr_fd_copy(int src, int dst);
*
* @since 1.1
*/
-EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
+EINA_API void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves an extended attribute from a file descriptor.
@@ -154,7 +161,7 @@ EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size
*
* @since 1.8
*/
-EAPI void *eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
+EINA_API void *eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
/**
* @brief Sets an extended attribute on a file.
@@ -168,7 +175,7 @@ EAPI void *eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size) EINA_
*
* @since 1.1
*/
-EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags) EINA_ARG_NONNULL(1, 2, 3);
+EINA_API Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags) EINA_ARG_NONNULL(1, 2, 3);
/**
* @brief Sets an extended attribute on a file descriptor.
@@ -182,7 +189,7 @@ EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const voi
*
* @since 1.8
*/
-EAPI Eina_Bool eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags) EINA_ARG_NONNULL(2, 3);
+EINA_API Eina_Bool eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags) EINA_ARG_NONNULL(2, 3);
/**
@@ -194,7 +201,7 @@ EAPI Eina_Bool eina_xattr_fd_set(int fd, const char *attribute, const void *data
*
* @since 1.8
*/
-EAPI Eina_Bool eina_xattr_del(const char *file, const char *attribute) EINA_ARG_NONNULL(1, 2);
+EINA_API Eina_Bool eina_xattr_del(const char *file, const char *attribute) EINA_ARG_NONNULL(1, 2);
/**
* @brief Deletes (removes) an extended attribute from a file descriptor.
@@ -205,7 +212,7 @@ EAPI Eina_Bool eina_xattr_del(const char *file, const char *attribute) EINA_ARG_
*
* @since 1.8
*/
-EAPI Eina_Bool eina_xattr_fd_del(int fd, const char *attribute) EINA_ARG_NONNULL(2);
+EINA_API Eina_Bool eina_xattr_fd_del(int fd, const char *attribute) EINA_ARG_NONNULL(2);
/**
* @brief Sets a string as a extended attribute properties.
@@ -218,7 +225,7 @@ EAPI Eina_Bool eina_xattr_fd_del(int fd, const char *attribute) EINA_ARG_NONNULL
*
* @since 1.1
*/
-EAPI Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags);
+EINA_API Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags);
/**
* @brief Gets a string from an extended attribute properties.
@@ -231,7 +238,7 @@ EAPI Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, co
*
* @since 1.1
*/
-EAPI char *eina_xattr_string_get(const char *file, const char *attribute);
+EINA_API char *eina_xattr_string_get(const char *file, const char *attribute);
/**
* @brief Sets a double as a extended attribute properties.
@@ -244,7 +251,7 @@ EAPI char *eina_xattr_string_get(const char *file, const char *attribute);
*
* @since 1.1
*/
-EAPI Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags);
+EINA_API Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags);
/**
* @brief Gets a double from an extended attribute properties.
@@ -258,7 +265,7 @@ EAPI Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, do
*
* @since 1.1
*/
-EAPI Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, double *value);
+EINA_API Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, double *value);
/**
* @brief Sets an int as a extended attribute properties.
@@ -271,7 +278,7 @@ EAPI Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, do
*
* @since 1.1
*/
-EAPI Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags);
+EINA_API Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags);
/**
* @brief Gets a int from an extended attribute properties.
@@ -285,7 +292,7 @@ EAPI Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int v
*
* @since 1.1
*/
-EAPI Eina_Bool eina_xattr_int_get(const char *file, const char *attribute, int *value);
+EINA_API Eina_Bool eina_xattr_int_get(const char *file, const char *attribute, int *value);
/**
* @}
diff --git a/src/lib/eina/meson.build b/src/lib/eina/meson.build
index 7866323742..69b35a8453 100644
--- a/src/lib/eina/meson.build
+++ b/src/lib/eina/meson.build
@@ -1,10 +1,16 @@
eina_deps = [dl]
-eina_pub_deps = [thread_dep]
+eina_pub_deps = [thread_dep, m]
+eina_pc_deps = [m, rt, dl, thread_dep] #special case, this array is taken to drag in external deps to efl-one
+eina_ext_deps = eina_pc_deps
if sys_windows == true
eina_pub_deps += [evil]
endif
+if sys_sun == true
+ eina_deps += [socket]
+endif
+
public_sub_headers = [
'eina_promise.h',
'eina_safety_checks.h',
@@ -32,6 +38,7 @@ public_sub_headers = [
'eina_mempool.h',
'eina_module.h',
'eina_rectangle.h',
+'eina_range.h',
'eina_types.h',
'eina_array.h',
'eina_counter.h',
@@ -51,6 +58,7 @@ public_sub_headers = [
'eina_inline_rbtree.x',
'eina_inline_mempool.x',
'eina_inline_rectangle.x',
+'eina_inline_range.x',
'eina_inline_trash.x',
'eina_thread.h',
'eina_trash.h',
@@ -105,13 +113,14 @@ public_sub_headers = [
'eina_freeq.h',
'eina_slstr.h',
'eina_vpath.h',
+'eina_abstract_content.h'
]
public_headers = [
'Eina.h'
]
-sources = [
+eina_src = files([
'eina_abi.c',
'eina_accessor.c',
'eina_array.c',
@@ -186,13 +195,14 @@ sources = [
'eina_freeq.c',
'eina_slstr.c',
'eina_vpath.c',
-'eina_vpath_xdg.c'
-]
+'eina_vpath_xdg.c',
+'eina_abstract_content.c',
+]) + eina_mp_sources
if sys_windows == true
- sources += 'eina_file_win32.c'
+ eina_src += files('eina_file_win32.c')
else
- sources += 'eina_file.c'
+ eina_src += files('eina_file_posix.c')
endif
eina_config = configuration_data()
@@ -238,7 +248,7 @@ if use_valgrind
else
config_h.set('HAVE_VALGRIND', 1)
endif
- eina_deps += valgrind
+ eina_ext_deps += valgrind
else
config_h.set('NVALGRIND', 1)
valgrind = []
@@ -261,14 +271,7 @@ if default_mempool
endif
if get_option('systemd') == true
- systemd = dependency('libsystemd')
- eina_deps += systemd
config_h.set('HAVE_SYSTEMD', '1')
- if systemd.version().version_compare('>=209')
- config_h.set('HAVE_SYSTEMD_LOGIN_209', '1')
- endif
-else
- systemd = []
endif
@@ -298,7 +301,7 @@ if cc.has_header_symbol(pthread_np_header_file, 'pthread_attr_setaffinity_np', a
eina_config.set('EINA_HAVE_PTHREAD_AFFINITY', '1')
endif
-if debug_threads or get_option('debug-threads')
+if debug_threads and get_option('debug-threads')
if cc.has_header_symbol('execinfo.h', 'backtrace')
eina_config.set('EINA_HAVE_DEBUG_THREADS', '1')
endif
@@ -353,6 +356,7 @@ unwind = dependency('libunwind-generic', required: false)
if unwind.found()
config_h.set('HAVE_UNWIND', 1)
eina_deps += unwind
+ config_h.set('EINA_LOG_BACKTRACE_ENABLE', 0)
endif
#for the case that the iconv library is not part of libc but rather libiconv or smth. like that
@@ -360,12 +364,20 @@ iconv = dependency('iconv', required: false)
if iconv.found() == false
iconv = cc.find_library('iconv', required: false)
endif
+eina_ext_deps += [iconv]
execinfo = cc.find_library('execinfo', required: false)
+eina_ext_deps += [execinfo]
-eina_lib = library('eina', sources,
+if sys_windows == true
+ bcrypt = cc.find_library('bcrypt', required: true)
+ eina_ext_deps += [bcrypt]
+endif
+
+eina_lib = library('eina', eina_src,
+ c_args : [package_c_args, '-DEINA_BUILD'],
include_directories : config_dir,
- dependencies: [m, rt, dl, execinfo, iconv, eina_deps, thread_dep, eina_mem_pools, evil],
+ dependencies: eina_ext_deps + [eina_deps, evil],
install: true,
version : meson.project_version()
)
@@ -385,11 +397,6 @@ install_headers(public_sub_headers,
install_dir : join_paths(dir_package_include, 'eina')
)
-automatic_pkgfile = false
-
-pkgconfig.generate(eina_lib,
- name : 'eina',
- subdirs : ['eina-'+version_major, 'efl-'+version_major, join_paths('eina-'+version_major, 'eina')],
- version : version_major + '.' + version_minor + '.' + version_micro,
- libraries : eina_pub_deps,
-)
+package_header_subdirs += 'eina'
+#special case here to support -lm -ldl -threads
+eina_pub_deps += eina_pc_deps
diff --git a/src/lib/eio/Eio.h b/src/lib/eio/Eio.h
index fb0fc64813..3e90cdaf94 100644
--- a/src/lib/eio/Eio.h
+++ b/src/lib/eio/Eio.h
@@ -32,33 +32,34 @@
#include <Eet.h>
#include <Efl_Config.h>
-#ifdef EAPI
-# undef EAPI
+#ifdef EIO_API
+#error EIO_API should not be already defined
#endif
#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
+# ifndef EIO_STATIC
+# ifdef EIO_BUILD
+# define EIO_API __declspec(dllexport)
# else
-# define EAPI
+# define EIO_API __declspec(dllimport)
# endif
# else
-# define EAPI __declspec(dllimport)
+# define EIO_API
# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
+# define EIO_API_WEAK
+#elif defined(__GNUC__)
+# if __GNUC__ >= 4
+# define EIO_API __attribute__ ((visibility("default")))
+# define EIO_API_WEAK __attribute__ ((weak))
# else
-# define EAPI
+# define EIO_API
+# define EIO_API_WEAK
# endif
+#else
+# define EIO_API
+# define EIO_API_WEAK
#endif
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -125,7 +126,7 @@ static inline Eina_Bool eio_file_is_lnk(const Eina_Stat *stat);
* @param interval The interval (in seconds) to poll
* @since 1.21
*/
-EAPI void eio_monitoring_interval_set(double interval);
+EIO_API void eio_monitoring_interval_set(double interval);
#include "eio_inline_helper.x"
@@ -136,7 +137,4 @@ EAPI void eio_monitoring_interval_set(double interval);
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/eio/Eio_Legacy.h b/src/lib/eio/Eio_Legacy.h
index c44340cac0..e492750f72 100644
--- a/src/lib/eio/Eio_Legacy.h
+++ b/src/lib/eio/Eio_Legacy.h
@@ -14,7 +14,11 @@ extern "C" {
int revision; /**< Revision number */
} Eio_Version;
- EAPI extern Eio_Version *eio_version;
+/**
+ * Eio Version Information
+ * @ingroup Eio
+ */
+EIO_API extern Eio_Version *eio_version;
/**
* @file
@@ -28,7 +32,7 @@ extern "C" {
*
* @date 2012 (created)
*
- * @section toc Table of Contents
+ * @section eio_toc Table of Contents
*
* @li @ref eio_main_intro
* @li @ref eio_main_compiling
@@ -202,7 +206,7 @@ struct _Eio_Progress
* @see eio_file_direct_ls()
* @see eio_file_stat_ls()
*/
-EAPI Eio_File *eio_file_ls(const char *dir,
+EIO_API Eio_File *eio_file_ls(const char *dir,
Eio_Filter_Cb filter_cb,
Eio_Main_Cb main_cb,
Eio_Done_Cb done_cb,
@@ -237,7 +241,7 @@ EAPI Eio_File *eio_file_ls(const char *dir,
* @see eina_file_direct_ls()
* @see ecore_thread_feedback_run()
*/
-EAPI Eio_File *eio_file_direct_ls(const char *dir,
+EIO_API Eio_File *eio_file_direct_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
Eio_Done_Cb done_cb,
@@ -268,7 +272,7 @@ EAPI Eio_File *eio_file_direct_ls(const char *dir,
* @see eina_file_stat_ls()
* @see ecore_thread_feedback_run()
*/
-EAPI Eio_File *eio_file_stat_ls(const char *dir,
+EIO_API Eio_File *eio_file_stat_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
Eio_Done_Cb done_cb,
@@ -297,7 +301,7 @@ EAPI Eio_File *eio_file_stat_ls(const char *dir,
* @see eina_file_stat_ls()
* @see ecore_thread_feedback_run()
*/
-EAPI Eio_File *eio_dir_stat_ls(const char *dir,
+EIO_API Eio_File *eio_dir_stat_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
Eio_Done_Cb done_cb,
@@ -325,7 +329,7 @@ EAPI Eio_File *eio_dir_stat_ls(const char *dir,
* @see eina_file_direct_ls()
* @see ecore_thread_feedback_run()
*/
-EAPI Eio_File *eio_dir_direct_ls(const char *dir,
+EIO_API Eio_File *eio_dir_direct_ls(const char *dir,
Eio_Filter_Dir_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
Eio_Done_Cb done_cb,
@@ -342,7 +346,7 @@ EAPI Eio_File *eio_dir_direct_ls(const char *dir,
*
* eio_file_direct_stat calls stat in another thread. This prevents any blocking in your apps.
*/
-EAPI Eio_File *eio_file_direct_stat(const char *path,
+EIO_API Eio_File *eio_file_direct_stat(const char *path,
Eio_Stat_Cb done_cb,
Eio_Error_Cb error_cb,
const void *data);
@@ -376,7 +380,7 @@ EAPI Eio_File *eio_file_direct_stat(const char *path,
* Set a new permission of a path changing it to the mode passed as argument.
* It's equivalent to the chmod command.
*/
-EAPI Eio_File *eio_file_chmod(const char *path,
+EIO_API Eio_File *eio_file_chmod(const char *path,
mode_t mode,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -398,7 +402,7 @@ EAPI Eio_File *eio_file_chmod(const char *path,
* @note Some platforms (including Windows) do not support chown(). In that
* case, this function returns @c NULL.
*/
-EAPI Eio_File *eio_file_chown(const char *path,
+EIO_API Eio_File *eio_file_chown(const char *path,
const char *user,
const char *group,
Eio_Done_Cb done_cb,
@@ -415,7 +419,7 @@ EAPI Eio_File *eio_file_chown(const char *path,
*
* This function will erase a file.
*/
-EAPI Eio_File *eio_file_unlink(const char *path,
+EIO_API Eio_File *eio_file_unlink(const char *path,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
const void *data);
@@ -431,7 +435,7 @@ EAPI Eio_File *eio_file_unlink(const char *path,
*
* Creates a new directory using the mode provided.
*/
-EAPI Eio_File *eio_file_mkdir(const char *path,
+EIO_API Eio_File *eio_file_mkdir(const char *path,
mode_t mode,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -453,7 +457,7 @@ EAPI Eio_File *eio_file_mkdir(const char *path,
* if possible, if not it will fallback to mmap/write. It will try to preserve
* access rights, but not user/group identification.
*/
-EAPI Eio_File *eio_file_move(const char *source,
+EIO_API Eio_File *eio_file_move(const char *source,
const char *dest,
Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb,
@@ -475,7 +479,7 @@ EAPI Eio_File *eio_file_move(const char *source,
* if possible, if not it will fallback to mmap/write. It will try to preserve
* access rights, but not user/group identification.
*/
-EAPI Eio_File *eio_file_copy(const char *source,
+EIO_API Eio_File *eio_file_copy(const char *source,
const char *dest,
Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb,
@@ -505,7 +509,7 @@ EAPI Eio_File *eio_file_copy(const char *source,
*
* @note if a rename occurs, the filter callback will not be called.
*/
-EAPI Eio_File *eio_dir_move(const char *source,
+EIO_API Eio_File *eio_dir_move(const char *source,
const char *dest,
Eio_Filter_Direct_Cb filter_cb,
Eio_Progress_Cb progress_cb,
@@ -533,7 +537,7 @@ EAPI Eio_File *eio_dir_move(const char *source,
* want to pass the file to the main_cb or not. Return EINA_TRUE to pass it to
* the main_cb or EINA_FALSE to ignore it.
*/
-EAPI Eio_File *eio_dir_copy(const char *source,
+EIO_API Eio_File *eio_dir_copy(const char *source,
const char *dest,
Eio_Filter_Direct_Cb filter_cb,
Eio_Progress_Cb progress_cb,
@@ -558,7 +562,7 @@ EAPI Eio_File *eio_dir_copy(const char *source,
* want to pass the file to the main_cb or not. Return EINA_TRUE to pass it to
* the main_cb or EINA_FALSE to ignore it.
*/
-EAPI Eio_File *eio_dir_unlink(const char *path,
+EIO_API Eio_File *eio_dir_unlink(const char *path,
Eio_Filter_Direct_Cb filter_cb,
Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb,
@@ -589,7 +593,7 @@ EAPI Eio_File *eio_dir_unlink(const char *path,
* @param data Unmodified user data passed to callbacks
* @return A reference to the I/O operation.
*/
-EAPI Eio_File *eio_file_xattr(const char *path,
+EIO_API Eio_File *eio_file_xattr(const char *path,
Eio_Filter_Cb filter_cb,
Eio_Main_Cb main_cb,
Eio_Done_Cb done_cb,
@@ -610,7 +614,7 @@ EAPI Eio_File *eio_file_xattr(const char *path,
* eio_file_xattr_int_set calls eina_xattr_int_set from another thread. This prevents blocking in your apps. If
* the writing succeeded, the done_cb will be called even if a cancel was requested, but came too late.
*/
-EAPI Eio_File *eio_file_xattr_int_set(const char *path,
+EIO_API Eio_File *eio_file_xattr_int_set(const char *path,
const char *attribute,
int xattr_int,
Eina_Xattr_Flags flags,
@@ -632,7 +636,7 @@ EAPI Eio_File *eio_file_xattr_int_set(const char *path,
* eio_file_xattr_double_set calls eina_xattr_double_set from another thread. This prevents blocking in your apps. If
* the writing succeeded, the done_cb will be called even if a cancel was requested, but came too late.
*/
-EAPI Eio_File *eio_file_xattr_double_set(const char *path,
+EIO_API Eio_File *eio_file_xattr_double_set(const char *path,
const char *attribute,
double xattr_double,
Eina_Xattr_Flags flags,
@@ -653,7 +657,7 @@ EAPI Eio_File *eio_file_xattr_double_set(const char *path,
* eio_file_xattr_string_set calls eina_xattr_string_set from another thread. This prevents blocking in your apps. If
* the writing succeeded, the done_cb will be called even if a cancel was requested, but came too late.
*/
-EAPI Eio_File *eio_file_xattr_string_set(const char *path,
+EIO_API Eio_File *eio_file_xattr_string_set(const char *path,
const char *attribute,
const char *xattr_string,
Eina_Xattr_Flags flags,
@@ -675,7 +679,7 @@ EAPI Eio_File *eio_file_xattr_string_set(const char *path,
* eio_file_xattr_set calls setxattr from another thread. This prevents blocking in your apps. If
* the writing succeeded, the done_cb will be called even if a cancel was requested, but came too late.
*/
-EAPI Eio_File *eio_file_xattr_set(const char *path,
+EIO_API Eio_File *eio_file_xattr_set(const char *path,
const char *attribute,
const char *xattr_data,
unsigned int xattr_size,
@@ -695,7 +699,7 @@ EAPI Eio_File *eio_file_xattr_set(const char *path,
*
* eio_file_xattr_get calls getxattr from another thread. This prevents blocking in your apps.
*/
-EAPI Eio_File *eio_file_xattr_get(const char *path,
+EIO_API Eio_File *eio_file_xattr_get(const char *path,
const char *attribute,
Eio_Done_Data_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -711,7 +715,7 @@ EAPI Eio_File *eio_file_xattr_get(const char *path,
*
* eio_file_xattr_int_get calls eina_xattr_int_get from another thread. This prevents blocking in your apps.
*/
-EAPI Eio_File *eio_file_xattr_int_get(const char *path,
+EIO_API Eio_File *eio_file_xattr_int_get(const char *path,
const char *attribute,
Eio_Done_Int_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -727,7 +731,7 @@ EAPI Eio_File *eio_file_xattr_int_get(const char *path,
*
* eio_file_xattr_double_get calls eina_xattr_double_get from another thread. This prevents blocking in your apps.
*/
-EAPI Eio_File *eio_file_xattr_double_get(const char *path,
+EIO_API Eio_File *eio_file_xattr_double_get(const char *path,
const char *attribute,
Eio_Done_Double_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -743,7 +747,7 @@ EAPI Eio_File *eio_file_xattr_double_get(const char *path,
*
* eio_file_xattr_string_get calls eina_xattr_string_get from another thread. This prevents blocking in your apps.
*/
-EAPI Eio_File *eio_file_xattr_string_get(const char *path,
+EIO_API Eio_File *eio_file_xattr_string_get(const char *path,
const char *attribute,
Eio_Done_String_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -770,13 +774,13 @@ EAPI Eio_File *eio_file_xattr_string_get(const char *path,
* @brief Initialize eio and all its required submodule.
* @return the current number of eio users.
*/
-EAPI int eio_init(void);
+EIO_API int eio_init(void);
/**
* @brief Shutdown eio and all its submodule if possible.
* @return the number of pending users of eio.
*/
-EAPI int eio_shutdown(void);
+EIO_API int eio_shutdown(void);
/**
* @brief Set the limit to the maximum amount of memory used
@@ -794,7 +798,7 @@ EAPI int eio_shutdown(void);
* the thread might stall.
* @since 1.10
*/
-EAPI void eio_memory_burst_limit_set(size_t limit);
+EIO_API void eio_memory_burst_limit_set(size_t limit);
/**
* @brief Get the actual limit to the maximum amount of memory used
@@ -803,7 +807,7 @@ EAPI void eio_memory_burst_limit_set(size_t limit);
* @since 1.10
* @see eio_memory_burst_limit_set
*/
-EAPI size_t eio_memory_burst_limit_get(void);
+EIO_API size_t eio_memory_burst_limit_get(void);
/**
* @brief Return the container during EIO operation
@@ -813,7 +817,7 @@ EAPI size_t eio_memory_burst_limit_get(void);
* This is only available and make sense in the thread callback, not in
* the mainloop.
*/
-EAPI void *eio_file_container_get(Eio_File *ls);
+EIO_API void *eio_file_container_get(Eio_File *ls);
/**
* @brief Cancel any Eio_File.
@@ -823,7 +827,7 @@ EAPI void *eio_file_container_get(Eio_File *ls);
* This will cancel any kind of I/O operation and cleanup the mess. This means
* that it could take time to cancel an I/O.
*/
-EAPI Eina_Bool eio_file_cancel(Eio_File *ls);
+EIO_API Eina_Bool eio_file_cancel(Eio_File *ls);
/**
* @brief Check if an Eio_File operation has been cancelled.
@@ -832,7 +836,7 @@ EAPI Eina_Bool eio_file_cancel(Eio_File *ls);
*
* In case of an error it also return EINA_TRUE.
*/
-EAPI Eina_Bool eio_file_check(Eio_File *ls);
+EIO_API Eina_Bool eio_file_check(Eio_File *ls);
/**
* @brief Associate data with the current filtered file.
@@ -847,7 +851,7 @@ EAPI Eina_Bool eio_file_check(Eio_File *ls);
* This function can only be safely called from within the filter callback.
* If you don't need to copy the key around you can use @ref eio_file_associate_direct_add
*/
-EAPI Eina_Bool eio_file_associate_add(Eio_File *ls,
+EIO_API Eina_Bool eio_file_associate_add(Eio_File *ls,
const char *key,
const void *data, Eina_Free_Cb free_cb);
@@ -863,7 +867,7 @@ EAPI Eina_Bool eio_file_associate_add(Eio_File *ls,
* If you need eio to make a proper copy of the @p key to be safe use
* @ref eio_file_associate_add instead.
*/
-EAPI Eina_Bool eio_file_associate_direct_add(Eio_File *ls,
+EIO_API Eina_Bool eio_file_associate_direct_add(Eio_File *ls,
const char *key,
const void *data, Eina_Free_Cb free_cb);
@@ -873,7 +877,7 @@ EAPI Eina_Bool eio_file_associate_direct_add(Eio_File *ls,
* @param key The key pointing to the data to retrieve.
* @return the data associated with the key or @p NULL if not found.
*/
-EAPI void *eio_file_associate_find(Eio_File *ls, const char *key);
+EIO_API void *eio_file_associate_find(Eio_File *ls, const char *key);
/**
* @}
@@ -905,7 +909,7 @@ EAPI void *eio_file_associate_find(Eio_File *ls, const char *key);
* @return Pointer to the file if successful or NULL otherwise.
*
*/
-EAPI Eio_File *eio_file_open(const char *name, Eina_Bool shared,
+EIO_API Eio_File *eio_file_open(const char *name, Eina_Bool shared,
Eio_Open_Cb open_cb,
Eio_Error_Cb error_cb,
const void *data);
@@ -918,7 +922,7 @@ EAPI Eio_File *eio_file_open(const char *name, Eina_Bool shared,
* @param data Unmodified user data passed to callbacks
* @return Pointer to the file if successful or NULL otherwise.
*/
-EAPI Eio_File *eio_file_close(Eina_File *f,
+EIO_API Eio_File *eio_file_close(Eina_File *f,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
const void *data);
@@ -935,7 +939,7 @@ EAPI Eio_File *eio_file_close(Eina_File *f,
*
* The container of the Eio_File is the Eina_File.
*/
-EAPI Eio_File *eio_file_map_all(Eina_File *f,
+EIO_API Eio_File *eio_file_map_all(Eina_File *f,
Eina_File_Populate rule,
Eio_Filter_Map_Cb filter_cb,
Eio_Map_Cb map_cb,
@@ -956,7 +960,7 @@ EAPI Eio_File *eio_file_map_all(Eina_File *f,
*
* The container of the Eio_File is the Eina_File.
*/
-EAPI Eio_File *eio_file_map_new(Eina_File *f,
+EIO_API Eio_File *eio_file_map_new(Eina_File *f,
Eina_File_Populate rule,
unsigned long int offset,
unsigned long int length,
@@ -990,7 +994,7 @@ EAPI Eio_File *eio_file_map_new(Eina_File *f,
*
* This function calls eet_open() from another thread using Ecore_Thread.
*/
-EAPI Eio_File *eio_eet_open(const char *filename,
+EIO_API Eio_File *eio_eet_open(const char *filename,
Eet_File_Mode mode,
Eio_Eet_Open_Cb eet_cb,
Eio_Error_Cb error_cb,
@@ -1007,7 +1011,7 @@ EAPI Eio_File *eio_eet_open(const char *filename,
* using Ecore_Thread. You should assume that the Eet_File is dead after this
* function is called.
*/
-EAPI Eio_File *eio_eet_close(Eet_File *ef,
+EIO_API Eio_File *eio_eet_close(Eet_File *ef,
Eio_Done_Cb done_cb,
Eio_Eet_Error_Cb error_cb,
const void *data);
@@ -1023,7 +1027,7 @@ EAPI Eio_File *eio_eet_close(Eet_File *ef,
* This function will call eet_sync() from another thread. As long as the done_cb or
* error_cb haven't be called, you must keep @p ef open.
*/
-EAPI Eio_File *eio_eet_sync(Eet_File *ef,
+EIO_API Eio_File *eio_eet_sync(Eet_File *ef,
Eio_Done_Cb done_cb,
Eio_Eet_Error_Cb error_cb,
const void *data);
@@ -1042,7 +1046,7 @@ EAPI Eio_File *eio_eet_sync(Eet_File *ef,
* @param user_data Private data given to each callback.
* @return NULL in case of a failure.
*/
-EAPI Eio_File *eio_eet_data_write_cipher(Eet_File *ef,
+EIO_API Eio_File *eio_eet_data_write_cipher(Eet_File *ef,
Eet_Data_Descriptor *edd,
const char *name,
const char *cipher_key,
@@ -1063,7 +1067,7 @@ EAPI Eio_File *eio_eet_data_write_cipher(Eet_File *ef,
* @param data Unmodified user data passed to callbacks
* @return NULL in case of a failure.
*/
-EAPI Eio_File *eio_eet_data_read_cipher(Eet_File *ef,
+EIO_API Eio_File *eio_eet_data_read_cipher(Eet_File *ef,
Eet_Data_Descriptor *edd,
const char *name,
const char *cipher_key,
@@ -1088,7 +1092,7 @@ EAPI Eio_File *eio_eet_data_read_cipher(Eet_File *ef,
* @param user_data Private data given to each callback.
* @return NULL in case of a failure.
*/
-EAPI Eio_File *eio_eet_data_image_write_cipher(Eet_File *ef,
+EIO_API Eio_File *eio_eet_data_image_write_cipher(Eet_File *ef,
const char *name,
const char *cipher_key,
void *write_data,
@@ -1111,7 +1115,7 @@ EAPI Eio_File *eio_eet_data_image_write_cipher(Eet_File *ef,
* @param data Unmodified user data passed to callbacks
* @return NULL in case of a failure.
*/
-EAPI Eio_File *eio_eet_read_direct(Eet_File *ef,
+EIO_API Eio_File *eio_eet_read_direct(Eet_File *ef,
const char *name,
Eio_Done_Data_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -1127,7 +1131,7 @@ EAPI Eio_File *eio_eet_read_direct(Eet_File *ef,
* @param data Unmodified user data passed to callbacks
* @return NULL in case of a failure.
*/
-EAPI Eio_File *eio_eet_read_cipher(Eet_File *ef,
+EIO_API Eio_File *eio_eet_read_cipher(Eet_File *ef,
const char *name,
const char *cipher_key,
Eio_Done_Read_Cb done_cb,
@@ -1147,7 +1151,7 @@ EAPI Eio_File *eio_eet_read_cipher(Eet_File *ef,
* @param user_data Private data given to each callback.
* @return NULL in case of a failure.
*/
-EAPI Eio_File *eio_eet_write_cipher(Eet_File *ef,
+EIO_API Eio_File *eio_eet_write_cipher(Eet_File *ef,
const char *name,
void *write_data,
int size,
@@ -1174,17 +1178,17 @@ EAPI Eio_File *eio_eet_write_cipher(Eet_File *ef,
* @{
*/
-EAPI extern int EIO_MONITOR_FILE_CREATED; /**< A new file was created in a watched directory */
-EAPI extern int EIO_MONITOR_FILE_DELETED; /**< A watched file was deleted, or a file in a watched directory was deleted */
-EAPI extern int EIO_MONITOR_FILE_MODIFIED; /**< A file was modified in a watched directory */
-EAPI extern int EIO_MONITOR_FILE_CLOSED; /**< A file was closed in a watched directory. This event is never sent on Windows and OSX, or for non-fallback monitors */
-EAPI extern int EIO_MONITOR_DIRECTORY_CREATED; /**< A new directory was created in a watched directory */
-EAPI extern int EIO_MONITOR_DIRECTORY_DELETED; /**< A directory has been deleted: this can be either a watched directory or one of its subdirectories */
-EAPI extern int EIO_MONITOR_DIRECTORY_MODIFIED; /**< A directory has been modified in a watched directory */
-EAPI extern int EIO_MONITOR_DIRECTORY_CLOSED; /**< A directory has been closed in a watched directory. This event is never sent on Windows and OSX, or for non-fallback monitors */
-EAPI extern int EIO_MONITOR_SELF_RENAME; /**< The monitored path has been renamed, an error could happen just after if the renamed path doesn't exist. This event is never sent on OSX, or for non-fallback monitors */
-EAPI extern int EIO_MONITOR_SELF_DELETED; /**< The monitored path has been removed. This event is never sent on OSX */
-EAPI extern int EIO_MONITOR_ERROR; /**< During operation the monitor failed and will no longer work. eio_monitor_del must be called on it. */
+EIO_API extern int EIO_MONITOR_FILE_CREATED; /**< A new file was created in a watched directory */
+EIO_API extern int EIO_MONITOR_FILE_DELETED; /**< A watched file was deleted, or a file in a watched directory was deleted */
+EIO_API extern int EIO_MONITOR_FILE_MODIFIED; /**< A file was modified in a watched directory */
+EIO_API extern int EIO_MONITOR_FILE_CLOSED; /**< A file was closed in a watched directory. This event is never sent on Windows and OSX, or for non-fallback monitors */
+EIO_API extern int EIO_MONITOR_DIRECTORY_CREATED; /**< A new directory was created in a watched directory */
+EIO_API extern int EIO_MONITOR_DIRECTORY_DELETED; /**< A directory has been deleted: this can be either a watched directory or one of its subdirectories */
+EIO_API extern int EIO_MONITOR_DIRECTORY_MODIFIED; /**< A directory has been modified in a watched directory */
+EIO_API extern int EIO_MONITOR_DIRECTORY_CLOSED; /**< A directory has been closed in a watched directory. This event is never sent on Windows and OSX, or for non-fallback monitors */
+EIO_API extern int EIO_MONITOR_SELF_RENAME; /**< The monitored path has been renamed, an error could happen just after if the renamed path doesn't exist. This event is never sent on OSX, or for non-fallback monitors */
+EIO_API extern int EIO_MONITOR_SELF_DELETED; /**< The monitored path has been removed. This event is never sent on OSX */
+EIO_API extern int EIO_MONITOR_ERROR; /**< During operation the monitor failed and will no longer work. eio_monitor_del must be called on it. */
typedef struct _Eio_Monitor Eio_Monitor;
@@ -1213,7 +1217,7 @@ struct _Eio_Monitor_Event
* list of files to monitor. It utilizes the inotify mechanism
* introduced in kernel 2.6.13 for passive monitoring.
*/
-EAPI Eio_Monitor *eio_monitor_add(const char *path);
+EIO_API Eio_Monitor *eio_monitor_add(const char *path);
/**
* @brief Adds a file/directory to monitor
@@ -1226,7 +1230,7 @@ EAPI Eio_Monitor *eio_monitor_add(const char *path);
* This function is just like eio_monitor_add(), however the string passed by
* argument must be created using eina_stringshare_add().
*/
-EAPI Eio_Monitor *eio_monitor_stringshared_add(const char *path);
+EIO_API Eio_Monitor *eio_monitor_stringshared_add(const char *path);
/**
* @brief Deletes a path from the “watched” list
@@ -1234,7 +1238,7 @@ EAPI Eio_Monitor *eio_monitor_stringshared_add(const char *path);
* It can only be an Eio_Monitor returned to you from calling
* eio_monitor_add() or eio_monitor_stringshared_add()
*/
-EAPI void eio_monitor_del(Eio_Monitor *monitor);
+EIO_API void eio_monitor_del(Eio_Monitor *monitor);
/**
* @brief returns the path being watched by the given
@@ -1242,7 +1246,7 @@ EAPI void eio_monitor_del(Eio_Monitor *monitor);
* @param monitor Eio_Monitor to return the path of
* @return The stringshared path belonging to @p monitor
*/
-EAPI const char *eio_monitor_path_get(Eio_Monitor *monitor);
+EIO_API const char *eio_monitor_path_get(Eio_Monitor *monitor);
#ifdef EFL_BETA_API_SUPPORT
/**
@@ -1254,9 +1258,8 @@ EAPI const char *eio_monitor_path_get(Eio_Monitor *monitor);
* to check whether a monitor is a fallback monitor before relying on these events.
*
* @since 1.21
- * @beta
*/
-EAPI Eina_Bool eio_monitor_fallback_check(const Eio_Monitor *monitor);
+EIO_API Eina_Bool eio_monitor_fallback_check(const Eio_Monitor *monitor);
/**
* @brief Check if a monitor has the context about a file or not
@@ -1272,9 +1275,8 @@ EAPI Eina_Bool eio_monitor_fallback_check(const Eio_Monitor *monitor);
* In case the monitor does not yet have context, you can be sure that the monitor will bring up an FILE_ADD event about that file.
*
* @since 1.23
- * @beta
*/
-EAPI Eina_Bool eio_monitor_has_context(const Eio_Monitor *monitor, const char *path);
+EIO_API Eina_Bool eio_monitor_has_context(const Eio_Monitor *monitor, const char *path);
#endif
/**
* @}
diff --git a/src/lib/eio/efl_io_manager.eo b/src/lib/eio/efl_io_manager.eo
index 9149595d3b..6d147d95b4 100644
--- a/src/lib/eio/efl_io_manager.eo
+++ b/src/lib/eio/efl_io_manager.eo
@@ -42,7 +42,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer
params {
@in path: string;[[Path we want to list entries for]]
@in recursive: bool; [[If $true, list entries recursively, $false otherwise]]
- info: EflIoDirectInfo; [[Callback called for each packet of @Eina.File_Direct_Info]]
+ info: EflIoDirectInfo; [[Callback called for each packet of @Eina.File_Direct_Info]]
}
return: future<uint64> @move; [[Amount of files found during the listing of the directory]]
}
@@ -52,7 +52,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer
params {
@in path: string;[[Path we want to list entries for]]
@in recursive: bool; [[If $true, list entries recursively, $false otherwise]]
- info: EflIoDirectInfo; [[Callback called for each packet of @Eina.File_Direct_Info]]
+ info: EflIoDirectInfo; [[Callback called for each packet of @Eina.File_Direct_Info]]
}
return: future<uint64> @move; [[Amount of files found during the listing of the directory]]
}
@@ -80,13 +80,13 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer
[[Retrieves or sets information of a given extended attribute.]]
set {
values {
- data: ptr(Eina.Binbuf); [[Data to set as information]]
+ data: binbuf; [[Data to set as information]]
flags: Eina.Xattr.Flags; [[Extended attributes flags]]
}
return: future<uint64> @move; [[Future for asynchronous set operation]]
}
get {
- return: future<Eina.Binbuf> @move; [[Information]]
+ return: future<binbuf> @move; [[Information]]
}
keys {
path: string; [[File path]]
diff --git a/src/lib/eio/eio_dir.c b/src/lib/eio/eio_dir.c
index 076d337764..435b712219 100644
--- a/src/lib/eio/eio_dir.c
+++ b/src/lib/eio/eio_dir.c
@@ -845,7 +845,7 @@ _eio_dir_stat_error(void *data, Ecore_Thread *thread EINA_UNUSED)
*============================================================================*/
-EAPI Eio_File *
+EIO_API Eio_File *
eio_dir_copy(const char *source,
const char *dest,
Eio_Filter_Direct_Cb filter_cb,
@@ -886,7 +886,7 @@ eio_dir_copy(const char *source,
return &copy->progress.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_dir_move(const char *source,
const char *dest,
Eio_Filter_Direct_Cb filter_cb,
@@ -927,7 +927,7 @@ eio_dir_move(const char *source,
return &move->progress.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_dir_unlink(const char *path,
Eio_Filter_Direct_Cb filter_cb,
Eio_Progress_Cb progress_cb,
@@ -1014,7 +1014,7 @@ _eio_dir_stat_internal_ls(const char *dir,
return &async->ls.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_dir_stat_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
@@ -1082,7 +1082,7 @@ _eio_dir_direct_internal_ls(const char *dir,
return &async->ls.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_dir_direct_ls(const char *dir,
Eio_Filter_Dir_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
diff --git a/src/lib/eio/eio_eet.c b/src/lib/eio/eio_eet.c
index 8abcf181c6..f007bec96c 100644
--- a/src/lib/eio/eio_eet.c
+++ b/src/lib/eio/eio_eet.c
@@ -307,7 +307,7 @@ _eio_eet_read_cipher_end(void *data, Ecore_Thread *thread EINA_UNUSED)
* API *
*============================================================================*/
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_open(const char *filename,
Eet_File_Mode mode,
Eio_Eet_Open_Cb eet_cb,
@@ -339,7 +339,7 @@ eio_eet_open(const char *filename,
return &eet->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_close(Eet_File *ef,
Eio_Done_Cb done_cb,
Eio_Eet_Error_Cb error_cb,
@@ -369,7 +369,7 @@ eio_eet_close(Eet_File *ef,
return &eet->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_flush(Eet_File *ef,
Eio_Done_Cb done_cb,
Eio_Eet_Error_Cb error_cb,
@@ -399,7 +399,7 @@ eio_eet_flush(Eet_File *ef,
return &eet->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_sync(Eet_File *ef,
Eio_Done_Cb done_cb,
Eio_Eet_Error_Cb error_cb,
@@ -408,7 +408,7 @@ eio_eet_sync(Eet_File *ef,
return eio_eet_flush(ef, done_cb, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_data_write_cipher(Eet_File *ef,
Eet_Data_Descriptor *edd,
const char *name,
@@ -450,7 +450,7 @@ eio_eet_data_write_cipher(Eet_File *ef,
return &ew->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_data_read_cipher(Eet_File *ef,
Eet_Data_Descriptor *edd,
const char *name,
@@ -488,7 +488,7 @@ eio_eet_data_read_cipher(Eet_File *ef,
return &er->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_data_image_write_cipher(Eet_File *ef,
const char *name,
const char *cipher_key,
@@ -537,7 +537,7 @@ eio_eet_data_image_write_cipher(Eet_File *ef,
return &eiw->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_read_direct(Eet_File *ef,
const char *name,
Eio_Done_Data_Cb done_cb,
@@ -572,7 +572,7 @@ eio_eet_read_direct(Eet_File *ef,
return &er->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_read_cipher(Eet_File *ef,
const char *name,
const char *cipher_key,
@@ -607,7 +607,7 @@ eio_eet_read_cipher(Eet_File *ef,
return &er->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_eet_write_cipher(Eet_File *ef,
const char *name,
void *write_data,
diff --git a/src/lib/eio/eio_file.c b/src/lib/eio/eio_file.c
index d66b035404..388fc52a61 100644
--- a/src/lib/eio/eio_file.c
+++ b/src/lib/eio/eio_file.c
@@ -573,7 +573,7 @@ _eio_file_internal_ls(const char *dir,
return &async->ls.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_ls(const char *dir,
Eio_Filter_Cb filter_cb,
Eio_Main_Cb main_cb,
@@ -641,7 +641,7 @@ _eio_file_direct_internal_ls(const char *dir,
return &async->ls.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_direct_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
@@ -709,7 +709,7 @@ _eio_file_stat_internal_ls(const char *dir,
return &async->ls.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_stat_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb,
@@ -734,7 +734,7 @@ _eio_file_stat_ls(const char *dir,
return _eio_file_stat_internal_ls(dir, NULL, NULL, main_internal_cb, done_cb, error_cb, data);
}
-EAPI Eina_Bool
+EIO_API Eina_Bool
eio_file_cancel(Eio_File *ls)
{
if (!ls) return EINA_FALSE;
@@ -748,28 +748,28 @@ eio_file_cancel(Eio_File *ls)
return ecore_thread_cancel(ls->thread);
}
-EAPI Eina_Bool
+EIO_API Eina_Bool
eio_file_check(Eio_File *ls)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ls, EINA_TRUE);
return ecore_thread_check(ls->thread);
}
-EAPI void *
+EIO_API void *
eio_file_container_get(Eio_File *ls)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ls, NULL);
return ls->container;
}
-EAPI Eina_Bool
+EIO_API Eina_Bool
eio_file_associate_add(Eio_File *ls,
const char *key,
const void *data, Eina_Free_Cb free_cb)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ls, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
- /* FIXME: Check if we are in the right worker thred */
+ /* FIXME: Check if we are in the right worker thread */
if (!ls->worker.associated)
ls->worker.associated = eina_hash_string_small_new(eio_associate_free);
@@ -778,14 +778,14 @@ eio_file_associate_add(Eio_File *ls,
eio_associate_malloc(data, free_cb));
}
-EAPI Eina_Bool
+EIO_API Eina_Bool
eio_file_associate_direct_add(Eio_File *ls,
const char *key,
const void *data, Eina_Free_Cb free_cb)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ls, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
- /* FIXME: Check if we are in the right worker thred */
+ /* FIXME: Check if we are in the right worker thread */
if (!ls->worker.associated)
ls->worker.associated = eina_hash_string_small_new(eio_associate_free);
@@ -794,7 +794,7 @@ eio_file_associate_direct_add(Eio_File *ls,
eio_associate_malloc(data, free_cb));
}
-EAPI void *
+EIO_API void *
eio_file_associate_find(Eio_File *ls, const char *key)
{
Eio_File_Associate *search;
@@ -809,7 +809,7 @@ eio_file_associate_find(Eio_File *ls, const char *key)
return search->data;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_copy(const char *source,
const char *dest,
Eio_Progress_Cb progress_cb,
@@ -845,7 +845,7 @@ eio_file_copy(const char *source,
return &copy->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_move(const char *source,
const char *dest,
Eio_Progress_Cb progress_cb,
diff --git a/src/lib/eio/eio_main.c b/src/lib/eio/eio_main.c
index 5c2141113d..b85e52b2c5 100644
--- a/src/lib/eio/eio_main.c
+++ b/src/lib/eio/eio_main.c
@@ -24,7 +24,7 @@
*============================================================================*/
static Eio_Version _version = { VMAJ, VMIN, VMIC, VREV };
-EAPI Eio_Version *eio_version = &_version;
+EIO_API Eio_Version *eio_version = &_version;
/**
* @cond LOCAL
@@ -272,7 +272,7 @@ eio_file_unregister(Eio_File *common)
* API *
*============================================================================*/
-EAPI int
+EIO_API int
eio_init(void)
{
if (++_eio_init_count != 1)
@@ -336,7 +336,7 @@ shutdown_eina:
return --_eio_init_count;
}
-EAPI int
+EIO_API int
eio_shutdown(void)
{
Eio_File_Direct_Info *info;
@@ -409,7 +409,7 @@ eio_shutdown(void)
return _eio_init_count;
}
-EAPI void
+EIO_API void
eio_memory_burst_limit_set(size_t limit)
{
eina_lock_take(&(memory_pool_mutex));
@@ -422,7 +422,7 @@ eio_memory_burst_limit_set(size_t limit)
eina_lock_release(&(memory_pool_mutex));
}
-EAPI size_t
+EIO_API size_t
eio_memory_burst_limit_get(void)
{
return memory_pool_limit;
diff --git a/src/lib/eio/eio_map.c b/src/lib/eio/eio_map.c
index 897519f966..61be9122d9 100644
--- a/src/lib/eio/eio_map.c
+++ b/src/lib/eio/eio_map.c
@@ -179,7 +179,7 @@ _eio_file_map_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
* API *
*============================================================================*/
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_open(const char *name, Eina_Bool shared,
Eio_Open_Cb open_cb,
Eio_Error_Cb error_cb,
@@ -211,7 +211,7 @@ eio_file_open(const char *name, Eina_Bool shared,
return &map->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_close(Eina_File *f,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -241,7 +241,7 @@ eio_file_close(Eina_File *f,
return &map->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_map_all(Eina_File *f,
Eina_File_Populate rule,
Eio_Filter_Map_Cb filter_cb,
@@ -277,7 +277,7 @@ eio_file_map_all(Eina_File *f,
return &map->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_map_new(Eina_File *f,
Eina_File_Populate rule,
unsigned long int offset,
diff --git a/src/lib/eio/eio_monitor.c b/src/lib/eio/eio_monitor.c
index 64eab219b2..09df78376c 100644
--- a/src/lib/eio/eio_monitor.c
+++ b/src/lib/eio/eio_monitor.c
@@ -302,19 +302,19 @@ _eio_monitor_rename(Eio_Monitor *monitor, const char *newpath)
* API *
*============================================================================*/
-EAPI int EIO_MONITOR_ERROR;
-EAPI int EIO_MONITOR_FILE_CREATED;
-EAPI int EIO_MONITOR_FILE_DELETED;
-EAPI int EIO_MONITOR_FILE_MODIFIED;
-EAPI int EIO_MONITOR_FILE_CLOSED;
-EAPI int EIO_MONITOR_DIRECTORY_CREATED;
-EAPI int EIO_MONITOR_DIRECTORY_DELETED;
-EAPI int EIO_MONITOR_DIRECTORY_MODIFIED;
-EAPI int EIO_MONITOR_DIRECTORY_CLOSED;
-EAPI int EIO_MONITOR_SELF_RENAME;
-EAPI int EIO_MONITOR_SELF_DELETED;
-
-EAPI Eio_Monitor *
+EIO_API int EIO_MONITOR_ERROR;
+EIO_API int EIO_MONITOR_FILE_CREATED;
+EIO_API int EIO_MONITOR_FILE_DELETED;
+EIO_API int EIO_MONITOR_FILE_MODIFIED;
+EIO_API int EIO_MONITOR_FILE_CLOSED;
+EIO_API int EIO_MONITOR_DIRECTORY_CREATED;
+EIO_API int EIO_MONITOR_DIRECTORY_DELETED;
+EIO_API int EIO_MONITOR_DIRECTORY_MODIFIED;
+EIO_API int EIO_MONITOR_DIRECTORY_CLOSED;
+EIO_API int EIO_MONITOR_SELF_RENAME;
+EIO_API int EIO_MONITOR_SELF_DELETED;
+
+EIO_API Eio_Monitor *
eio_monitor_add(const char *path)
{
const char *tmp;
@@ -327,7 +327,7 @@ eio_monitor_add(const char *path)
return ret;
}
-EAPI Eio_Monitor *
+EIO_API Eio_Monitor *
eio_monitor_stringshared_add(const char *path)
{
Eio_Monitor *monitor;
@@ -397,7 +397,7 @@ eio_monitor_stringshared_add(const char *path)
return monitor;
}
-EAPI void
+EIO_API void
eio_monitor_del(Eio_Monitor *monitor)
{
if (!monitor) return;
@@ -405,7 +405,7 @@ eio_monitor_del(Eio_Monitor *monitor)
_eio_monitor_free(monitor);
}
-EAPI const char *
+EIO_API const char *
eio_monitor_path_get(Eio_Monitor *monitor)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(monitor, NULL);
@@ -413,7 +413,7 @@ eio_monitor_path_get(Eio_Monitor *monitor)
}
-EAPI Eina_Bool
+EIO_API Eina_Bool
eio_monitor_has_context(const Eio_Monitor *monitor, const char *path)
{
if (monitor->fallback)
diff --git a/src/lib/eio/eio_monitor_kevent.c b/src/lib/eio/eio_monitor_kevent.c
index 1e6a97d11c..a99b27763f 100644
--- a/src/lib/eio/eio_monitor_kevent.c
+++ b/src/lib/eio/eio_monitor_kevent.c
@@ -195,7 +195,7 @@ _eio_kevent_handler(void *data EINA_UNUSED, Ecore_Fd_Handler *fdh)
_eio_monitor_send(backend->parent, backend->parent->path, event_code);
}
}
-
+
return ECORE_CALLBACK_RENEW;
}
@@ -242,7 +242,7 @@ void eio_monitor_backend_shutdown(void)
if (!_kqueue_fd) return;
eina_hash_free(_kevent_monitors);
-
+
fd = ecore_main_fd_handler_fd_get(_kqueue_fd);
ecore_main_fd_handler_del(_kqueue_fd);
_kqueue_fd = NULL;
@@ -267,7 +267,7 @@ void eio_monitor_backend_add(Eio_Monitor *monitor)
backend = calloc(1, sizeof (Eio_Monitor_Backend));
if (!backend) return;
-
+
res = stat(monitor->path, &st);
if (res) goto error;
@@ -292,7 +292,7 @@ void eio_monitor_backend_add(Eio_Monitor *monitor)
}
return;
-
+
error:
free(backend);
}
diff --git a/src/lib/eio/eio_monitor_poll.c b/src/lib/eio/eio_monitor_poll.c
index aae582f825..86b65aae5b 100644
--- a/src/lib/eio/eio_monitor_poll.c
+++ b/src/lib/eio/eio_monitor_poll.c
@@ -407,7 +407,7 @@ eio_monitor_fallback_del(Eio_Monitor *monitor)
*============================================================================*/
-EAPI void
+EIO_API void
eio_monitoring_interval_set(double interval)
{
Eina_Iterator *it;
@@ -422,7 +422,7 @@ eio_monitoring_interval_set(double interval)
eina_iterator_free(it);
}
-EAPI Eina_Bool
+EIO_API Eina_Bool
eio_monitor_fallback_check(const Eio_Monitor *monitor)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(monitor, EINA_FALSE);
diff --git a/src/lib/eio/eio_private.h b/src/lib/eio/eio_private.h
index e8f9c856a4..3fd2c09237 100644
--- a/src/lib/eio/eio_private.h
+++ b/src/lib/eio/eio_private.h
@@ -53,7 +53,7 @@ typedef struct stat _eio_stat_t;
# include <pwd.h>
#endif
-/* Keeping 8 Eio_File_Progress alive should be enought */
+/* Keeping 8 Eio_File_Progress alive should be enough */
#define EIO_PROGRESS_LIMIT 8
/* Huge TLB == 16M on most system */
diff --git a/src/lib/eio/eio_single.c b/src/lib/eio/eio_single.c
index c0c21a5979..43475ca3d8 100644
--- a/src/lib/eio/eio_single.c
+++ b/src/lib/eio/eio_single.c
@@ -418,7 +418,7 @@ eio_file_container_set(Eio_File *common, void *container)
* API *
*============================================================================*/
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_direct_stat(const char *path,
Eio_Stat_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -450,7 +450,7 @@ eio_file_direct_stat(const char *path,
return &s->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_direct_lstat(const char *path,
Eio_Stat_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -480,7 +480,7 @@ eio_file_direct_lstat(const char *path,
return &s->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_unlink(const char *path,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
@@ -509,7 +509,7 @@ eio_file_unlink(const char *path,
return &l->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_mkdir(const char *path,
mode_t mode,
Eio_Done_Cb done_cb,
@@ -540,7 +540,7 @@ eio_file_mkdir(const char *path,
return &r->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_chmod(const char *path,
mode_t mode,
Eio_Done_Cb done_cb,
@@ -571,7 +571,7 @@ eio_file_chmod(const char *path,
return &r->common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_chown(const char *path,
const char *user,
const char *group,
diff --git a/src/lib/eio/eio_xattr.c b/src/lib/eio/eio_xattr.c
index fdfb8990a6..484ecc120e 100644
--- a/src/lib/eio/eio_xattr.c
+++ b/src/lib/eio/eio_xattr.c
@@ -349,7 +349,7 @@ _eio_file_internal_xattr(const char *path,
return &async->ls.common;
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr(const char *path,
Eio_Filter_Cb filter_cb,
Eio_Main_Cb main_cb,
@@ -374,7 +374,7 @@ _eio_file_xattr(const char *path,
return _eio_file_internal_xattr(path, NULL, NULL, main_internal_cb, done_cb, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_get(const char *path,
const char *attribute,
Eio_Done_Data_Cb done_cb,
@@ -397,7 +397,7 @@ eio_file_xattr_get(const char *path,
return _eio_file_xattr_setup_get(async, path, attribute, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_string_get(const char *path,
const char *attribute,
Eio_Done_String_Cb done_cb,
@@ -420,7 +420,7 @@ eio_file_xattr_string_get(const char *path,
return _eio_file_xattr_setup_get(async, path, attribute, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_double_get(const char *path,
const char *attribute,
Eio_Done_Double_Cb done_cb,
@@ -443,7 +443,7 @@ eio_file_xattr_double_get(const char *path,
return _eio_file_xattr_setup_get(async, path, attribute, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_int_get(const char *path,
const char *attribute,
Eio_Done_Int_Cb done_cb,
@@ -466,7 +466,7 @@ eio_file_xattr_int_get(const char *path,
return _eio_file_xattr_setup_get(async, path, attribute, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_set(const char *path,
const char *attribute,
const char *xattr_data,
@@ -496,7 +496,7 @@ eio_file_xattr_set(const char *path,
return _eio_file_xattr_setup_set(async, path, attribute, flags, done_cb, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_string_set(const char *path,
const char *attribute,
const char *xattr_string,
@@ -531,7 +531,7 @@ eio_file_xattr_string_set(const char *path,
return _eio_file_xattr_setup_set(async, path, attribute, flags, done_cb, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_double_set(const char *path,
const char *attribute,
double xattr_double,
@@ -556,7 +556,7 @@ eio_file_xattr_double_set(const char *path,
return _eio_file_xattr_setup_set(async, path, attribute, flags, done_cb, error_cb, data);
}
-EAPI Eio_File *
+EIO_API Eio_File *
eio_file_xattr_int_set(const char *path,
const char *attribute,
int xattr_int,
diff --git a/src/lib/eio/meson.build b/src/lib/eio/meson.build
index f95a1e652c..869f62b586 100644
--- a/src/lib/eio/meson.build
+++ b/src/lib/eio/meson.build
@@ -18,6 +18,7 @@ foreach eo_file : pub_eo_files
meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EIO_API',
'-gchd', '@INPUT@'])
endforeach
@@ -32,7 +33,7 @@ eio_header_src = [
'eio_inline_helper.x'
]
-eio_src = [
+eio_src = files([
'eio_dir.c',
'eio_eet.c',
'eio_file.c',
@@ -48,30 +49,31 @@ eio_src = [
'efl_io_model_private.h',
'eio_private.h',
'eio_sentry_private.h'
-]
+])
linker_args = []
if sys_windows == true
- eio_src += ['eio_monitor_win32.c']
+ eio_src += files(['eio_monitor_win32.c'])
elif sys_osx == true
- eio_src += ['eio_monitor_cocoa.c']
+ eio_src += files(['eio_monitor_cocoa.c'])
linker_args = [['-framework', 'CoreServices']]
elif sys_linux == true
- eio_src += ['eio_monitor_inotify.c']
+ eio_src += files(['eio_monitor_inotify.c'])
elif sys_bsd == true
- eio_src += ['eio_monitor_kevent.c']
+ eio_src += files(['eio_monitor_kevent.c'])
endif
-eio_deps = [ecore, ecore_file, eet, eo, eina, efl, emile, efreet_mime]
+eio_deps = [ecore, ecore_file, eet, eo, eina, efl, emile, efreet]
eio_pub_deps = [eina, eet]
+eio_ext_deps = [m]
eio_lib = library('eio',
eio_src, pub_eo_file_target,
- dependencies: [eina, eo, efl, m, eio_deps],
+ dependencies: eio_deps + eio_pub_deps + eio_ext_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
- c_args : package_c_args,
+ c_args : [package_c_args, '-DEIO_BUILD'],
link_args : linker_args,
version : meson.project_version()
)
diff --git a/src/lib/eldbus/Eldbus.h b/src/lib/eldbus/Eldbus.h
index 18c3de5d1b..d307c384ed 100644
--- a/src/lib/eldbus/Eldbus.h
+++ b/src/lib/eldbus/Eldbus.h
@@ -3,7 +3,7 @@
*
* @date 2012 (created)
*
- * @section toc Table of Contents
+ * @section eldbus_toc Table of Contents
*
* @li @ref eldbus_main_intro
* @li @ref eldbus_main_compiling
@@ -21,7 +21,7 @@
*
* <ul>
* <li> @ref Eldbus_Core
- * <li> @ref Eldbus_Conneciton
+ * <li> @ref Eldbus_Connection
* <li> @ref Eldbus_Object_Mapper
* <li> @ref Eldbus_Proxy
* <li> @ref Eldbus_Message
diff --git a/src/lib/eldbus/eldbus_connection.h b/src/lib/eldbus/eldbus_connection.h
index 5615162028..df20c1726b 100644
--- a/src/lib/eldbus/eldbus_connection.h
+++ b/src/lib/eldbus/eldbus_connection.h
@@ -2,7 +2,7 @@
#define ELDBUS_CONNECTION_H 1
/**
- * @defgroup Eldbus_Conneciton Connection
+ * @defgroup Eldbus_Connection Connection
* @ingroup Eldbus
*
* @{
diff --git a/src/lib/eldbus/eldbus_core.c b/src/lib/eldbus/eldbus_core.c
index 7e79be5ddf..513314741a 100644
--- a/src/lib/eldbus/eldbus_core.c
+++ b/src/lib/eldbus/eldbus_core.c
@@ -75,7 +75,7 @@ static int _eldbus_init_count = 0;
int _eldbus_log_dom = -1;
int eldbus_model_log_dom = -1;
-/* We don't save ELDBUS_CONNECTION_TYPE_UNKNOWN in here so we need room for
+/* We don't save ELDBUS_CONNECTION_TYPE_UNKNOWN in here so we need room for
* last - 1 elements */
static void *shared_connections[ELDBUS_CONNECTION_TYPE_LAST - 1];
static Eina_Hash *address_connections = NULL;
diff --git a/src/lib/eldbus/eldbus_introspection.c b/src/lib/eldbus/eldbus_introspection.c
index 1e294a9224..1deb706d9c 100644
--- a/src/lib/eldbus/eldbus_introspection.c
+++ b/src/lib/eldbus/eldbus_introspection.c
@@ -1,3 +1,4 @@
+#include <Eldbus.h>
#include "eldbus_introspection.h"
typedef struct _Eldbus_Introspection_Element_Parse_Table Eldbus_Introspection_Element_Parse_Table;
diff --git a/src/lib/eldbus/eldbus_message.c b/src/lib/eldbus/eldbus_message.c
index e7295077ab..f31f8c4fcf 100644
--- a/src/lib/eldbus/eldbus_message.c
+++ b/src/lib/eldbus/eldbus_message.c
@@ -110,7 +110,7 @@ eldbus_message_method_call_new(const char *dest, const char *path, const char *i
#ifdef DBUS_SYNTAX_H
// added to libdbus:
- // f426c6cddd158d6324923f28117bc8e512d6f64f Fri Feb 24 12:43:55 2012 +0000
+ // f426c6cddd158d6324923f28117bc8e512d6f64f Fri Feb 24 12:43:55 2012 +0000
if (!dbus_validate_bus_name(dest, NULL))
{
ERR("Invalid bus name '%s'", dest);
@@ -619,32 +619,36 @@ eldbus_message_iter_next(Eldbus_Message_Iter *iter)
static void
get_basic(char type, DBusMessageIter *iter, va_list *vl)
{
+ DBusBasicValue val;
+
switch (type)
{
case DBUS_TYPE_BYTE:
{
uint8_t *byte = va_arg(*vl, uint8_t *);
- dbus_message_iter_get_basic(iter, byte);
+ dbus_message_iter_get_basic(iter, &val);
+ *byte = val.bool_val;
break;
}
case DBUS_TYPE_BOOLEAN:
{
Eina_Bool *boolean = va_arg(*vl, Eina_Bool *);
- dbus_bool_t val;
dbus_message_iter_get_basic(iter, &val);
- *boolean = val;
+ *boolean = val.bool_val;
break;
}
case DBUS_TYPE_INT16:
{
int16_t *int16 = va_arg(*vl, int16_t *);
- dbus_message_iter_get_basic(iter, int16);
+ dbus_message_iter_get_basic(iter, &val);
+ *int16 = val.i16;
break;
}
case DBUS_TYPE_UINT16:
{
uint16_t *uint16 = va_arg(*vl, uint16_t *);
- dbus_message_iter_get_basic(iter, uint16);
+ dbus_message_iter_get_basic(iter, &val);
+ *uint16 = val.u16;
break;
}
case DBUS_TYPE_INT32:
@@ -653,31 +657,36 @@ get_basic(char type, DBusMessageIter *iter, va_list *vl)
#endif
{
int32_t *int32 = va_arg(*vl, int32_t *);
- dbus_message_iter_get_basic(iter, int32);
+ dbus_message_iter_get_basic(iter, &val);
+ *int32 = val.i32;
break;
}
case DBUS_TYPE_UINT32:
{
uint32_t *uint32 = va_arg(*vl, uint32_t *);
- dbus_message_iter_get_basic(iter, uint32);
+ dbus_message_iter_get_basic(iter, &val);
+ *uint32 = val.u32;
break;
}
case DBUS_TYPE_INT64:
{
int64_t *int64 = va_arg(*vl, int64_t *);
- dbus_message_iter_get_basic(iter, int64);
+ dbus_message_iter_get_basic(iter, &val);
+ *int64 = val.i64;
break;
}
case DBUS_TYPE_UINT64:
{
uint64_t *uint64 = va_arg(*vl, uint64_t *);
- dbus_message_iter_get_basic(iter, uint64);
+ dbus_message_iter_get_basic(iter, &val);
+ *uint64 = val.u64;
break;
}
case DBUS_TYPE_DOUBLE:
{
double *double_ieee = va_arg(*vl, double *);
- dbus_message_iter_get_basic(iter, double_ieee);
+ dbus_message_iter_get_basic(iter, &val);
+ *double_ieee = val.dbl;
break;
}
case DBUS_TYPE_STRING:
@@ -685,7 +694,8 @@ get_basic(char type, DBusMessageIter *iter, va_list *vl)
case DBUS_TYPE_SIGNATURE:
{
char **string = va_arg(*vl, char**);
- dbus_message_iter_get_basic(iter, string);
+ dbus_message_iter_get_basic(iter, &val);
+ *string = val.str;
break;
}
default:
diff --git a/src/lib/eldbus/eldbus_message.h b/src/lib/eldbus/eldbus_message.h
index dbb9e0c919..7986d6911e 100644
--- a/src/lib/eldbus/eldbus_message.h
+++ b/src/lib/eldbus/eldbus_message.h
@@ -384,7 +384,7 @@ EAPI Eina_Bool eldbus_message_iter_fixed_array_get(Eldbus_Message_Iter *iter, in
* Eldbus_Message_Iter will be need.
*
* @param iter iterator
- * @param signature of the complete data types on interator
+ * @param signature of the complete data types on iterator
* @param ... pointers of where data will be stored
*
* @return EINA_FALSE if signature different from signature in iterator
@@ -397,7 +397,7 @@ EAPI Eina_Bool eldbus_message_iter_arguments_get(Eldbus_Message_It
* Eldbus_Message_Iter will be need.
*
* @param iter iterator
- * @param signature of the complete data types on interator
+ * @param signature of the complete data types on iterator
* @param ap va_list of the pointers of where data will be stored
*
* @return EINA_FALSE if signature different from signature in iterator
diff --git a/src/lib/eldbus/eldbus_pending.c b/src/lib/eldbus/eldbus_pending.c
index be42235a03..c9cecabde9 100644
--- a/src/lib/eldbus/eldbus_pending.c
+++ b/src/lib/eldbus/eldbus_pending.c
@@ -200,7 +200,7 @@ _eldbus_connection_send_and_block(Eldbus_Connection *conn, Eldbus_Message *msg,
WRN("Calling this function may result in dropped frames because the main loop is running");
dbus_error_init(&err);
- dbus_msg =
+ dbus_msg =
dbus_connection_send_with_reply_and_block(conn->dbus_conn,
msg->dbus_msg, timeout, &err);
EINA_SAFETY_ON_TRUE_GOTO(dbus_error_is_set(&err), dbus_error_set);
diff --git a/src/lib/eldbus/eldbus_service.c b/src/lib/eldbus/eldbus_service.c
index 4c7ed640d4..cde674ba58 100644
--- a/src/lib/eldbus/eldbus_service.c
+++ b/src/lib/eldbus/eldbus_service.c
@@ -365,7 +365,7 @@ cb_introspect(const Eldbus_Service_Interface *_iface, const Eldbus_Message *mess
eina_strbuf_reset(obj->introspection_data);
else
obj->introspection_data = eina_strbuf_new();
- EINA_SAFETY_ON_NULL_RETURN_VAL(obj->introspection_data, NULL);
+ EINA_SAFETY_ON_NULL_GOTO(obj->introspection_data, fail);
eina_strbuf_append(obj->introspection_data, "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\" \"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">");
eina_strbuf_append_printf(obj->introspection_data,
@@ -392,6 +392,9 @@ cb_introspect(const Eldbus_Service_Interface *_iface, const Eldbus_Message *mess
eldbus_message_arguments_append(reply, "s", eina_strbuf_string_get(obj->introspection_data));
return reply;
+fail:
+ if (reply) eldbus_message_unref(reply);
+ return NULL;
}
static const Eldbus_Method introspect = {
@@ -970,7 +973,7 @@ _eldbus_service_interface_register(Eldbus_Connection *conn, const char *path, co
for (method2 = desc2->methods2; method2 && method2->method.member; method2++)
_eldbus_service_method_add(iface, &method2->method);
}
-
+
iface->signals = desc->signals;
iface->sign_of_signals = signatures;
diff --git a/src/lib/eldbus/meson.build b/src/lib/eldbus/meson.build
index de9902757d..ea3d6930c9 100644
--- a/src/lib/eldbus/meson.build
+++ b/src/lib/eldbus/meson.build
@@ -1,5 +1,6 @@
eldbus_deps = [ecore]
eldbus_pub_deps = [eina, eo, efl]
+eldbus_ext_deps = []
pub_eo_files = [
'eldbus_model_connection.eo',
@@ -61,7 +62,7 @@ eldbus_header_src = [
'eldbus_message_eina_value.h'
]
-eldbus_src = [
+eldbus_src = files([
'eldbus_private.h',
'eldbus_private_types.h',
'eldbus_model_private.h',
@@ -90,13 +91,14 @@ eldbus_src = [
'eldbus_model_arguments.c',
'eldbus_model_signal.c',
'eldbus_introspection.c'
-]
+])
-eldbus_deps += dependency('dbus-1')
+eldbus_ext_deps += dependency('dbus-1')
eldbus_lib = library('eldbus',
eldbus_src, pub_eo_file_target,
- dependencies: eldbus_pub_deps + eldbus_deps,
+ c_args : package_c_args,
+ dependencies: eldbus_pub_deps + eldbus_deps + eldbus_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
@@ -109,12 +111,14 @@ eldbus = declare_dependency(
dependencies: eldbus_pub_deps,
)
-
-if get_option('install-eo-files')
- install_data(pub_eo_files + pub_eo_types_files,
- install_dir: join_paths(eolian_include_dir, package_version_name)
- )
-endif
+#
+# Only enable that again when the namespace problems are fixed. ref T8648
+#
+#if get_option('install-eo-files')
+# install_data(pub_eo_files + pub_eo_types_files,
+# install_dir: join_paths(eolian_include_dir, package_version_name)
+# )
+#endif
install_headers(eldbus_header_src,
install_dir : dir_package_include,
diff --git a/src/lib/elementary/Efl_Ui.h b/src/lib/elementary/Efl_Ui.h
index 209fa44f46..3a64e9fdb0 100644
--- a/src/lib/elementary/Efl_Ui.h
+++ b/src/lib/elementary/Efl_Ui.h
@@ -40,13 +40,6 @@
#include <alloca.h>
#endif
-#ifdef ELM_WIN32
-#include <malloc.h>
-#ifndef alloca
-#define alloca _alloca
-#endif
-#endif
-
#ifdef _WIN32
# define WIN32_LEAN_AND_MEAN
# include <winsock2.h>
@@ -112,15 +105,13 @@
extern "C" {
#endif
-extern EAPI double _efl_startup_time;
+EAPI extern double _efl_startup_time;
/** Successfully applied the requested style from the current theme. */
-extern EAPI Eina_Error EFL_UI_THEME_APPLY_ERROR_NONE;
+EAPI extern Eina_Error EFL_UI_THEME_APPLY_ERROR_NONE;
// EO types. Defined for legacy-only builds as legacy uses typedef of EO types.
#include "efl_ui.eot.h"
-#include "efl_ui_selection_types.eot.h"
-#include "efl_ui_dnd_types.eot.h"
//define focus manager earlier since focus object and manager is circular
typedef Eo Efl_Ui_Focus_Manager;
@@ -148,7 +139,6 @@ EAPI void efl_ui_focus_relation_free(Efl_Ui_Focus_Relations *rel);
# include <efl_access_component.eo.h>
# include <efl_access_editable_text.eo.h>
# include <efl_access_selection.eo.h>
-# include <efl_access_value.eo.h>
# include <efl_ui_theme.eo.h>
# include <efl_config_global.eo.h>
@@ -229,7 +219,7 @@ typedef void (*Context_Item_Clicked_Cb)(void *data, Eo *obj, void *event_info);
# include <efl_ui_textbox.eo.h>
# include <efl_ui_textbox_async.eo.h>
-# include <efl_ui_animation_view.eo.h>
+# include <efl_ui_vg_animation.eo.h>
# include <efl_ui_clock.eo.h>
# include <efl_ui_video.eo.h>
@@ -266,9 +256,10 @@ typedef Eo Efl_Ui_Spotlight_Indicator;
# include <efl_ui_spotlight_container.eo.h>
# include <efl_ui_spotlight_manager.eo.h>
# include <efl_ui_spotlight_indicator.eo.h>
-# include <efl_ui_spotlight_indicator_icon.eo.h>
-# include <efl_ui_spotlight_manager_scroll.eo.h>
-# include <efl_ui_spotlight_manager_stack.eo.h>
+# include <efl_ui_spotlight_icon_indicator.eo.h>
+# include <efl_ui_spotlight_scroll_manager.eo.h>
+# include <efl_ui_spotlight_fade_manager.eo.h>
+# include <efl_ui_spotlight_animation_manager.eo.h>
# include <efl_ui_spotlight_util.eo.h>
# include <efl_ui_stack.eo.h>
# include <efl_ui_pager.eo.h>
@@ -323,11 +314,11 @@ typedef Eo Efl_Ui_Spotlight_Indicator;
# include <efl_ui_widget_focus_manager.eo.h>
# include <efl_ui_selection.eo.h>
# include <efl_ui_dnd.eo.h>
-# include <efl_ui_dnd_container.eo.h>
# include <efl_ui_timepicker.eo.h>
# include <efl_ui_datepicker.eo.h>
# include <efl_ui_calendar.eo.h>
+# include <efl_ui_separator.eo.h>
/**
* Initialize Elementary
diff --git a/src/lib/elementary/Elementary.h b/src/lib/elementary/Elementary.h
index a3fa4f4412..8e8c198829 100644
--- a/src/lib/elementary/Elementary.h
+++ b/src/lib/elementary/Elementary.h
@@ -83,6 +83,9 @@
#ifdef EWAPI
# undef EWAPI
#endif
+#ifdef EAPI_WEAK
+# undef EAPI_WEAK
+#endif
#ifdef _WIN32
# ifdef EFL_BUILD
@@ -135,6 +138,11 @@ typedef struct _Elm_Version
int revision;
} Elm_Version;
+/**
+ * Elementary Version Information
+ *
+ * @ingroup Elm_General
+ */
EAPI extern Elm_Version *elm_version;
@@ -193,7 +201,7 @@ EAPI extern Elm_Version *elm_version;
#include <elm_cache.h>
#include <elm_calendar.h>
/* this is elm_animation_view */
-#include <efl_ui_animation_view.h>
+#include <efl_ui_vg_animation.h>
#include <elm_check.h>
#include <elm_clock.h>
#include <elm_cnp.h>
diff --git a/src/lib/elementary/efl_access_object.eo b/src/lib/elementary/efl_access_object.eo
index f3e70dee40..d077eaa481 100644
--- a/src/lib/elementary/efl_access_object.eo
+++ b/src/lib/elementary/efl_access_object.eo
@@ -1,3 +1,5 @@
+import eina_types;
+
enum @beta Efl.Access.Type
{
[[Type of accessibility object]]
diff --git a/src/lib/elementary/efl_access_text.c b/src/lib/elementary/efl_access_text.c
index 6f35f71471..1db4827c0d 100644
--- a/src/lib/elementary/efl_access_text.c
+++ b/src/lib/elementary/efl_access_text.c
@@ -18,7 +18,7 @@ EAPI elm_atspi_text_text_attribute_free(Efl_Access_Text_Attribute *attr)
EAPI void
elm_atspi_text_text_range_free(Efl_Access_Text_Range *range)
{
- free(range->content);
+ free((char*)range->content);
free(range);
}
diff --git a/src/lib/elementary/efl_access_text.eo b/src/lib/elementary/efl_access_text.eo
index fe76de5b6e..b40dc1a4eb 100644
--- a/src/lib/elementary/efl_access_text.eo
+++ b/src/lib/elementary/efl_access_text.eo
@@ -31,7 +31,7 @@ struct @beta @free(elm_atspi_text_text_range_free) Efl.Access.Text_Range
[[Text range]]
start_offset: int; [[Range start offset]]
end_offset : int; [[Range end offset]]
- content: ptr(char); [[Range content]]
+ content: string; [[Range content]]
}
struct @beta Efl.Access.Text_Change_Info
@@ -66,12 +66,12 @@ interface @beta Efl.Access.Text
}
keys {
granularity: Efl.Access.Text_Granularity; [[Text granularity]]
- start_offset: ptr(int); [[Offset indicating start of string according to given granularity.
- -1 in case of error.]]
- end_offset: ptr(int); [[Offset indicating end of string according to given granularity.
- -1 in case of error.]]
}
values {
+ start_offset: int; [[Offset indicating start of string according to given granularity.
+ -1 in case of error.]]
+ end_offset: int; [[Offset indicating end of string according to given granularity.
+ -1 in case of error.]]
string: mstring @move; [[Newly allocated UTF-8 encoded string. Must be free by a user.]]
}
}
@@ -105,10 +105,10 @@ interface @beta Efl.Access.Text
}
keys {
name: string; [[Text attribute name]]
- start_offset: ptr(int); [[Position in text from which given attribute is set.]]
- end_offset: ptr(int); [[Position in text to which given attribute is set.]]
}
values {
+ start_offset: int; [[Position in text from which given attribute is set.]]
+ end_offset: int; [[Position in text to which given attribute is set.]]
value: mstring @move; [[Value of text attribute. Should be free()]]
}
}
@@ -116,11 +116,9 @@ interface @beta Efl.Access.Text
[[Gets list of all text attributes.]]
get {
}
- keys {
- start_offset: ptr(int); [[Start offset]]
- end_offset: ptr(int); [[End offset]]
- }
values {
+ start_offset: int; [[Start offset]]
+ end_offset: int; [[End offset]]
attributes: list<Efl.Access.Text_Attribute> @move; [[List of text attributes]]
}
}
diff --git a/src/lib/elementary/efl_text_interactive.eo b/src/lib/elementary/efl_text_interactive.eo
index 85b5a811d7..5f463f3c41 100644
--- a/src/lib/elementary/efl_text_interactive.eo
+++ b/src/lib/elementary/efl_text_interactive.eo
@@ -1,18 +1,19 @@
import efl_text_types;
-interface @beta Efl.Text_Interactive extends Efl.Text, Efl.Text.Font.Properties,
+interface Efl.Text_Interactive extends Efl.Text, Efl.Text_Font_Properties,
Efl.Text_Format, Efl.Text_Style
{
[[Interface for interactive (editable) text inputs (text entries).
It handles cursors, edition and selection.
+ @since 1.24
]]
methods {
@property main_cursor {
[[The cursor used to insert new text, the one that's visible to the user.]]
get {}
values {
- cursor: Efl.Text.Cursor; [[The cursor visible to the user.]]
+ cursor: Efl.Text_Cursor.Object; [[The cursor visible to the user.]]
}
}
@property selection_allowed {
@@ -25,16 +26,20 @@ interface @beta Efl.Text_Interactive extends Efl.Text, Efl.Text.Font.Properties,
}
@property selection_cursors {
[[The cursors used for selection handling.
-
If the cursors are equal there's no selection.
-
- You are allowed to retain and modify them. Modifying them modifies
- the selection of the object.
]]
- get {}
+ get {
+ [[You are allowed to retain and modify them. Modifying them modifies
+ the selection of the object (recommended to extend selection range).]]
+ }
+ set {
+ [[The positions of passed cursors will be used to set selection cursors positions.
+ Further modification for passed @Efl.Text_Cursor.Object objects, will not affect selection.
+ Setter is recommended to set new range for selection.]]
+ }
values {
- start: Efl.Text.Cursor; [[The start of the selection.]]
- end: Efl.Text.Cursor; [[The end of the selection.]]
+ start: Efl.Text_Cursor.Object; [[The start of the selection.]]
+ end: Efl.Text_Cursor.Object; [[The end of the selection.]]
}
}
@property editable {
@@ -75,7 +80,7 @@ interface @beta Efl.Text_Interactive extends Efl.Text, Efl.Text.Font.Properties,
event but only the last one will emit a @[.changed,user] event.
]]
have_selection,changed: bool; [[Emitted when the @.have_selection property value changes.]]
- selection,changed: Efl.Text_Range; [[Emitted when selection has changed. Query using @.selection_cursors.]]
+ selection,changed: Eina.Range; [[Emitted when selection has changed. Query using @.selection_cursors.]]
redo,request: void; [[Emitted when a redo operation is requested.]]
undo,request: void; [[Emitted when a undo operation is requested.]]
changed,user: Efl.Text_Change_Info; [[Emitted when the text content has changed due to user interaction.]]
diff --git a/src/lib/elementary/efl_ui.eot b/src/lib/elementary/efl_ui.eot
index 29832b53ba..f8be696cc0 100644
--- a/src/lib/elementary/efl_ui.eot
+++ b/src/lib/elementary/efl_ui.eot
@@ -1,5 +1,4 @@
/* Efl.Ui enum and struct types */
-import eina_types;
/* FIXME: find a better way to express this */
error @extern Efl.Ui.Theme.Apply_Error.NONE = "Succcess"; [[Successfully applied the requested style from the current theme.]]
@@ -33,7 +32,7 @@ enum Efl.Ui.Focus.Direction
enum Efl.Ui.Focus.Move_Policy
{
[[Focus Movement Policy.
- @since 1.10]]
+ @since 1.22]]
click, [[Move focus by mouse click or touch. Elementary focus is set on mouse
click and this is checked at mouse up time. (default)]]
move_in, [[Move focus by mouse in. Elementary focus is set on mouse move when the
@@ -45,6 +44,8 @@ enum Efl.Ui.Focus.Move_Policy
enum @beta Efl.Ui.Focus.Autoscroll_Mode
{
[[Focus Autoscroll Mode
+
+ @since 1.22
]]
show, [[Directly show the focused region or item automatically.]]
none, [[Do not show the focused region or item automatically.]]
@@ -53,10 +54,7 @@ enum @beta Efl.Ui.Focus.Autoscroll_Mode
enum @beta Efl.Ui.Softcursor_Mode
{
- [[Software cursor mode.
-
- @since 1.7
- ]]
+ [[Software cursor mode.]]
auto, [[Auto-detect if a software cursor should be used (default).]]
on, [[Always use a softcursor.]]
off [[Never use a softcursor.]]
diff --git a/src/lib/elementary/efl_ui_alert_popup.c b/src/lib/elementary/efl_ui_alert_popup.c
index 65dcb4914c..bb3d26b8de 100644
--- a/src/lib/elementary/efl_ui_alert_popup.c
+++ b/src/lib/elementary/efl_ui_alert_popup.c
@@ -61,7 +61,7 @@ const char *
_efl_ui_alert_popup_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Alert_Popup_Data *pd, const char *part)
{
if (!_elm_layout_part_aliasing_eval(obj, &part, EINA_TRUE))
- return EINA_FALSE;
+ return NULL;
if (eina_streq(part, "efl.text.title"))
{
if (pd->title_text)
diff --git a/src/lib/elementary/efl_ui_animation_view.c b/src/lib/elementary/efl_ui_animation_view.c
deleted file mode 100644
index 074ebfdf8d..0000000000
--- a/src/lib/elementary/efl_ui_animation_view.c
+++ /dev/null
@@ -1,803 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "elementary_config.h"
-#endif
-
-#define EFL_ACCESS_OBJECT_PROTECTED
-
-#include <Elementary.h>
-
-#include "elm_priv.h"
-#include "efl_ui_animation_view_private.h"
-
-#define MY_CLASS EFL_UI_ANIMATION_VIEW_CLASS
-
-#define MY_CLASS_NAME "Efl_Ui_Animation_View"
-#define MY_CLASS_NAME_LEGACY "efl_ui_animation_view"
-
-static const char SIG_FOCUSED[] = "focused";
-static const char SIG_UNFOCUSED[] = "unfocused";
-static const char SIG_PLAY_START[] = "play,start";
-static const char SIG_PLAY_REPEAT[] = "play,repeat";
-static const char SIG_PLAY_DONE[] = "play,done";
-static const char SIG_PLAY_PAUSE[] = "play,pause";
-static const char SIG_PLAY_RESUME[] = "play,resume";
-static const char SIG_PLAY_STOP[] = "play,stop";
-static const char SIG_PLAY_UPDATE[] = "play,update";
-
-/* smart callbacks coming from Efl_Ui_Animation_View objects: */
-static const Evas_Smart_Cb_Description _smart_callbacks[] = {
- {SIG_FOCUSED, ""},
- {SIG_UNFOCUSED, ""},
- {SIG_WIDGET_LANG_CHANGED, ""}, /**< handled by elm_widget */
- {SIG_PLAY_START, ""},
- {SIG_PLAY_REPEAT, ""},
- {SIG_PLAY_DONE, ""},
- {SIG_PLAY_PAUSE, ""},
- {SIG_PLAY_RESUME, ""},
- {SIG_PLAY_STOP, ""},
- {NULL, NULL}
-};
-
-static void
-_sizing_eval(Eo *obj, void *data)
-{
- Efl_Ui_Animation_View_Data *pd = data;
- if (!efl_file_loaded_get(obj)) return;
-
- double hw,hh;
- efl_gfx_hint_weight_get(obj, &hw, &hh);
-
- Eina_Size2D size = efl_canvas_vg_object_default_size_get(pd->vg);
-
- Eina_Size2D min = {-1, -1};
- if (hw == 0) min.w = size.w;
- if (hh == 0) min.h = size.h;
-
- efl_gfx_hint_size_min_set(obj, min);
-}
-
-static void
-_size_hint_event_cb(void *data, const Efl_Event *event)
-{
- _sizing_eval(event->object, data);
-}
-
-static void
-_transit_go_facade(Eo* obj, Efl_Ui_Animation_View_Data *pd)
-{
- pd->repeat_times = 0;
- if (pd->play_back)
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK;
- else
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY;
- evas_object_smart_callback_call(obj, SIG_PLAY_START, NULL);
- if (pd->transit) elm_transit_go(pd->transit);
-}
-
-static Eina_Bool
-_visible_check(Eo *obj)
-{
- if (!efl_gfx_entity_visible_get(obj)) return EINA_FALSE;
-
- //TODO: Check Smart parents visibilities?
-
- Eina_Size2D size = efl_gfx_entity_size_get(obj);
- if (size.w == 0 || size.h == 0) return EINA_FALSE;
-
- Evas_Coord output_w, output_h;
- evas_output_size_get(evas_object_evas_get(obj), &output_w, &output_h);
-
- Eina_Position2D pos = efl_gfx_entity_position_get(obj);
-
- //Outside viewport
- if ((pos.x + size.w < 0) || (pos.x > output_w) ||
- (pos.y + size.h < 0) || (pos.y > output_h))
- return EINA_FALSE;
-
- //Inside viewport
- return EINA_TRUE;
-}
-
-static void
-_auto_play(Eo *obj, Efl_Ui_Animation_View_Data *pd, Eina_Bool vis)
-{
- if (!pd->auto_play || !pd->transit) return;
-
- //Resume Animation
- if (vis)
- {
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PAUSE && pd->auto_play_pause)
- {
- elm_transit_paused_set(pd->transit, EINA_FALSE);
- if (pd->play_back)
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK;
- else
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY;
- pd->auto_play_pause = EINA_FALSE;
- evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
- }
- }
- //Pause Animation
- else
- {
- if ((pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY) ||
- (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK))
- {
- elm_transit_paused_set(pd->transit, EINA_TRUE);
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PAUSE;
- pd->auto_play_pause = EINA_TRUE;
- evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
- }
- }
-}
-
-static void
-_transit_del_cb(Elm_Transit_Effect *effect, Elm_Transit *transit)
-{
- Eo *obj = (Eo *) effect;
- EFL_UI_ANIMATION_VIEW_DATA_GET(obj, pd);
- if (!pd) return;
-
- if ((pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY && pd->progress == 1) ||
- (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK && pd->progress == 0))
- evas_object_smart_callback_call(obj, SIG_PLAY_DONE, NULL);
-
- if (pd->transit != transit) return;
-
- Efl_Ui_Animation_View_State prev_state = pd->state;
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_STOP;
- pd->transit = NULL;
- pd->auto_play_pause = EINA_FALSE;
-
- if (prev_state != EFL_UI_ANIMATION_VIEW_STATE_STOP)
- {
- evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
- pd->progress = 0;
- }
-}
-
-static void
-_transit_cb(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
-{
- Eo *obj = (Eo *) effect;
- EFL_UI_ANIMATION_VIEW_DATA_GET(obj, pd);
-
- if (!pd || !pd->vg)
- {
- ERR("Vector Object is removed in wrong way!, Efl_Ui_Animation_View = %p", obj);
- elm_transit_del(transit);
- return;
- }
-
- if (pd->play_back)
- {
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK;
- progress = 1 - progress;
- }
- else pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY;
-
- pd->progress = progress;
- int minframe = (pd->frame_cnt - 1) * pd->min_progress;
- int maxframe = (pd->frame_cnt - 1) * pd->max_progress;
-
- int update_frame = (int)((maxframe - minframe) * progress) + minframe;
- int current_frame = evas_object_vg_animated_frame_get(pd->vg);
- evas_object_vg_animated_frame_set(pd->vg, update_frame);
-
- if (pd->auto_repeat)
- {
- int repeat_times = elm_transit_current_repeat_times_get(pd->transit);
- if (pd->repeat_times != repeat_times)
- {
- evas_object_smart_callback_call(obj, SIG_PLAY_REPEAT, NULL);
- pd->repeat_times = repeat_times;
- }
- }
-
- //transit_cb is always called with a progress value 0 ~ 1.
- //SIG_PLAY_UPDATE callback is called only when there is a real change.
- if (update_frame != current_frame)
- evas_object_smart_callback_call(obj, SIG_PLAY_UPDATE, NULL);
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Animation_View_Data *priv)
-{
- efl_canvas_group_add(efl_super(obj, MY_CLASS));
- elm_widget_sub_object_parent_add(obj);
-
- // Create vg to render vector animation
- Eo *vg = evas_object_vg_add(evas_object_evas_get(obj));
- elm_widget_resize_object_set(obj, vg);
- efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED, _size_hint_event_cb, priv);
-
- priv->vg = vg;
- priv->speed = 1;
- priv->frame_duration = 0;
- priv->min_progress = 0.0;
- priv->max_progress = 1.0;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Animation_View_Data *pd EINA_UNUSED)
-{
- if (pd->transit)
- {
- Elm_Transit *transit = pd->transit;
- pd->transit = NULL; //Skip perform transit_del_cb()
- elm_transit_del(transit);
- }
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_NOT_READY;
-
- efl_canvas_group_del(efl_super(obj, MY_CLASS));
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_object_destructor(Eo *obj,
- Efl_Ui_Animation_View_Data *pd EINA_UNUSED)
-{
- Efl_Gfx_Vg_Value_Provider *vp;
- EINA_LIST_FREE(pd->vp_list, vp)
- efl_unref(vp);
- eina_list_free(pd->vp_list);
-
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-EOLIAN static Eo *
-_efl_ui_animation_view_efl_object_constructor(Eo *obj,
- Efl_Ui_Animation_View_Data *pd EINA_UNUSED)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
- evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
-
- return obj;
-}
-
-static void
-_update_frame_duration(Efl_Ui_Animation_View_Data *pd)
-{
- int frame_count = evas_object_vg_animated_frame_count_get(pd->vg);
- int min_frame = (frame_count - 1) * pd->min_progress;
- int max_frame = (frame_count - 1) * pd->max_progress;
- double frame_rate = round((double)frame_count / evas_object_vg_animated_frame_duration_get(pd->vg, 0, 0));
-
- pd->frame_duration = (double)(max_frame - min_frame) / frame_rate;
- if (pd->transit)
- elm_transit_duration_set(pd->transit, pd->frame_duration * (1/pd->speed));
-}
-
-static Eina_Bool
-_ready_play(Eo *obj, Efl_Ui_Animation_View_Data *pd)
-{
- pd->auto_play_pause = EINA_FALSE;
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_STOP;
-
- if (pd->transit) elm_transit_del(pd->transit);
-
- pd->frame_cnt = (double) evas_object_vg_animated_frame_count_get(pd->vg);
- pd->frame_duration = evas_object_vg_animated_frame_duration_get(pd->vg, 0, 0);
- evas_object_vg_animated_frame_set(pd->vg, 0);
-
- if (pd->frame_duration > 0)
- {
- Elm_Transit *transit = elm_transit_add();
- elm_transit_object_add(transit, pd->vg);
- if (pd->auto_repeat) elm_transit_repeat_times_set(transit, -1);
- elm_transit_effect_add(transit, _transit_cb, obj, _transit_del_cb);
- elm_transit_progress_value_set(transit, pd->progress);
- elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
- pd->transit = transit;
- if (pd->min_progress != 0.0 || pd->max_progress != 1.0)
- _update_frame_duration(pd);
- else
- elm_transit_duration_set(transit, pd->frame_duration * (1/pd->speed));
-
- return EINA_TRUE;
- }
- return EINA_FALSE;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_file_unload(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_NOT_READY;
- pd->frame_cnt = 0;
- pd->frame_duration = 0;
- if (pd->transit) elm_transit_del(pd->transit);
-}
-
-EOLIAN static Eina_Error
-_efl_ui_animation_view_efl_file_load(Eo *obj, Efl_Ui_Animation_View_Data *pd)
-{
- Eina_Error err;
- Eina_Bool ret;
- const char *file;
- const char *key;
-
- if (efl_file_loaded_get(obj)) return 0;
-
- err = efl_file_load(efl_super(obj, MY_CLASS));
- if (err) return err;
-
- file = efl_file_get(obj);
- key = efl_file_key_get(obj);
- ret = efl_file_simple_load(pd->vg, file, key);
- if (!ret)
- {
- efl_file_unload(obj);
- return eina_error_get();
- }
-
- pd->progress = 0;
-
- _sizing_eval(obj, pd);
-
- if (!_ready_play(obj, pd)) return 1;
-
- if (pd->auto_play)
- {
- _transit_go_facade(obj, pd);
-
- if (!_visible_check(obj))
- {
- elm_transit_paused_set(pd->transit, EINA_TRUE);
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PAUSE;
- pd->auto_play_pause = EINA_TRUE;
- evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
- }
- }
- return 0;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_gfx_entity_position_set(Eo *obj,
- Efl_Ui_Animation_View_Data *pd,
- Eina_Position2D pos EINA_UNUSED)
-{
- if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y))
- return;
-
- efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
-
- _auto_play(obj, pd, _visible_check(obj));
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_gfx_entity_size_set(Eo *obj,
- Efl_Ui_Animation_View_Data *pd,
- Eina_Size2D size)
-{
- if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, size.w, size.h))
- return;
-
- efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), size);
-
- _sizing_eval(obj, pd);
-
- _auto_play(obj, pd, _visible_check(obj));
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_gfx_entity_visible_set(Eo *obj,
- Efl_Ui_Animation_View_Data *pd,
- Eina_Bool vis)
-{
- if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis))
- return;
-
- efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), vis);
-
- _auto_play(obj, pd, _visible_check(obj));
-}
-
-EOLIAN static void
-_efl_ui_animation_view_efl_gfx_view_view_size_set(Eo *obj EINA_UNUSED,
- Efl_Ui_Animation_View_Data *pd,
- Eina_Size2D size)
-{
- Eina_Rect viewbox;
- viewbox.x = viewbox.y =0;
- viewbox.w = size.w;
- viewbox.h = size.h;
-
- efl_canvas_vg_object_viewbox_set(pd->vg, viewbox);
-}
-
-EOLIAN Eina_Size2D
-_efl_ui_animation_view_efl_gfx_view_view_size_get(const Eo *obj EINA_UNUSED,
- Efl_Ui_Animation_View_Data *pd)
-{
- Eina_Rect viewbox = efl_canvas_vg_object_viewbox_get(pd->vg);
-
- return EINA_SIZE2D(viewbox.w, viewbox.h);
-}
-
-EOLIAN static void
-_efl_ui_animation_view_auto_repeat_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, Eina_Bool auto_repeat)
-{
- if (pd->auto_repeat == auto_repeat) return;
- pd->auto_repeat = auto_repeat;
- if (pd->transit)
- {
- if (auto_repeat) elm_transit_repeat_times_set(pd->transit, -1);
- else elm_transit_repeat_times_set(pd->transit, 0);
- }
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_auto_repeat_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->auto_repeat;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_auto_play_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd,
- Eina_Bool auto_play)
-{
- pd->auto_play = auto_play;
- if (!auto_play) pd->auto_play_pause = EINA_FALSE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_auto_play_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->auto_play;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_play(Eo *obj, Efl_Ui_Animation_View_Data *pd)
-{
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY) return EINA_FALSE;
-
- Eina_Bool rewind = EINA_FALSE;
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK) rewind = EINA_TRUE;
-
- pd->play_back = EINA_FALSE;
- pd->auto_play_pause = EINA_FALSE;
-
- if (!efl_file_loaded_get(obj)) return EINA_FALSE;
- if (!pd->transit && !_ready_play(obj, pd)) return EINA_FALSE;
-
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_STOP)
- _transit_go_facade(obj, pd);
- else if (rewind)
- elm_transit_progress_value_set(pd->transit, pd->progress);
-
- return EINA_TRUE;
-}
-
-Eina_Bool _efl_ui_animation_view_play_sector(Eo *obj, Efl_Ui_Animation_View_Data *pd, const char *start, const char *end)
-{
- int start_frame = 0;
- int end_frame = evas_object_vg_animated_frame_count_get(pd->vg) - 1;
-
- if (start && end)
- {
- efl_gfx_frame_controller_sector_get(pd->vg, start, &start_frame, NULL);
- efl_gfx_frame_controller_sector_get(pd->vg, end, &end_frame, NULL);
- }
- else
- {
- if (start)
- {
- efl_gfx_frame_controller_sector_get(pd->vg, start, &start_frame, &end_frame);
- }
- else if (end)
- {
- efl_gfx_frame_controller_sector_get(pd->vg, end, &end_frame, NULL);
- }
- }
-
- efl_ui_animation_view_min_frame_set(obj, start_frame);
- if (start_frame < end_frame)
- efl_ui_animation_view_max_frame_set(obj, end_frame);
-
- if (!efl_ui_animation_view_play(obj))
- return EINA_FALSE;
- return EINA_TRUE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_stop(Eo *obj, Efl_Ui_Animation_View_Data *pd)
-{
- if (!pd->transit) return EINA_FALSE;
-
- if ((pd->state == EFL_UI_ANIMATION_VIEW_STATE_NOT_READY) ||
- (pd->state == EFL_UI_ANIMATION_VIEW_STATE_STOP))
- return EINA_FALSE;
-
- evas_object_vg_animated_frame_set(pd->vg, 0);
- pd->progress = 0;
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_STOP;
- evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
- elm_transit_del(pd->transit);
-
- return EINA_TRUE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_pause(Eo *obj, Efl_Ui_Animation_View_Data *pd)
-{
- if (!pd->transit) return EINA_FALSE;
-
- if ((pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY) ||
- (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK))
- {
- elm_transit_paused_set(pd->transit, EINA_TRUE);
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PAUSE;
- pd->auto_play_pause = EINA_FALSE;
- evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_resume(Eo *obj, Efl_Ui_Animation_View_Data *pd)
-{
- if (!pd->transit) return EINA_FALSE;
-
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PAUSE)
- {
- elm_transit_paused_set(pd->transit, EINA_FALSE);
- if (pd->play_back)
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK;
- else
- pd->state = EFL_UI_ANIMATION_VIEW_STATE_PLAY;
- pd->auto_play_pause = EINA_FALSE;
-
- evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
-
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_play_back(Eo *obj, Efl_Ui_Animation_View_Data *pd)
-{
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY_BACK) return EINA_FALSE;
-
- Eina_Bool rewind = EINA_FALSE;
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_PLAY) rewind = EINA_TRUE;
-
- pd->play_back = EINA_TRUE;
- pd->auto_play_pause = EINA_FALSE;
-
- if (!efl_file_loaded_get(obj)) return EINA_FALSE;
- if (!pd->transit && !_ready_play(obj, pd)) return EINA_FALSE;
-
- if (pd->state == EFL_UI_ANIMATION_VIEW_STATE_STOP)
- {
- if (pd->progress == 0) pd->progress = 1.0;
- _transit_go_facade(obj, pd);
- }
- else if (rewind)
- elm_transit_progress_value_set(pd->transit, 1 - pd->progress);
-
- return EINA_TRUE;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_speed_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, double speed)
-{
- if (speed <= 0) return EINA_FALSE;
- pd->speed = speed;
-
- if (pd->transit)
- elm_transit_duration_set(pd->transit, pd->frame_duration * (1/pd->speed));
-
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, double progress)
-{
- if (progress < 0) progress = 0;
- else if (progress > 1) progress = 1;
- if (pd->progress == progress) return;
-
- pd->progress = progress;
-
- if (pd->frame_cnt > 0)
- evas_object_vg_animated_frame_set(pd->vg, (int) ((pd->frame_cnt - 1) * progress));
-
- if (pd->transit)
- {
- if (pd->play_back)
- elm_transit_progress_value_set(pd->transit, 1 - progress);
- else
- elm_transit_progress_value_set(pd->transit, progress);
- }
-}
-
-EOLIAN static double
-_efl_ui_animation_view_progress_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->progress;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_frame_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, int frame_num)
-{
- efl_ui_animation_view_progress_set(obj, (double) frame_num / (double) (evas_object_vg_animated_frame_count_get(pd->vg) - 1));
-}
-
-EOLIAN static int
-_efl_ui_animation_view_frame_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- double progress = (pd->progress * (pd->max_progress - pd->min_progress)) + pd->min_progress;
- return (int) ((double) (evas_object_vg_animated_frame_count_get(pd->vg) - 1) * progress);
-}
-
-EOLIAN static double
-_efl_ui_animation_view_speed_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->speed;
-}
-
-EOLIAN static double
-_efl_ui_animation_view_duration_time_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->frame_duration;
-}
-
-EOLIAN static Eina_Size2D
-_efl_ui_animation_view_default_view_size_get(const Eo *obj EINA_UNUSED,
- Efl_Ui_Animation_View_Data *pd EINA_UNUSED)
-{
- return efl_canvas_vg_object_default_size_get(pd->vg);
-}
-
-EOLIAN static Efl_Ui_Animation_View_State
-_efl_ui_animation_view_state_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->state;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_animation_view_is_playing_back(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->play_back;
-}
-
-EOLIAN static int
-_efl_ui_animation_view_frame_count_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return efl_gfx_frame_controller_frame_count_get(pd->vg);
-}
-
-EOLIAN static void
-_efl_ui_animation_view_min_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, double min_progress)
-{
- if (min_progress < 0.0 || min_progress > 1.0 || min_progress > pd->max_progress) return;
-
- pd->min_progress = min_progress;
- _update_frame_duration(pd);
-}
-
-EOLIAN static double
-_efl_ui_animation_view_min_progress_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->min_progress;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_max_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, double max_progress)
-{
- if (max_progress < 0.0 || max_progress > 1.0 || max_progress < pd->min_progress) return;
-
- pd->max_progress = max_progress;
- _update_frame_duration(pd);
-}
-
-EOLIAN static double
-_efl_ui_animation_view_max_progress_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->max_progress;
-}
-
-EOLIAN static void
-_efl_ui_animation_view_min_frame_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, int min_frame)
-{
- int frame_count = evas_object_vg_animated_frame_count_get(pd->vg);
- if (min_frame < 0) min_frame = 0;
- else
- {
- int max_frame = (frame_count - 1) * pd->max_progress;
- if (min_frame > max_frame) min_frame = max_frame;
- }
-
- pd->min_progress = (double)min_frame / (double)(frame_count - 1);
- _update_frame_duration(pd);
-}
-
-EOLIAN static int
-_efl_ui_animation_view_min_frame_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->min_progress * (evas_object_vg_animated_frame_count_get(pd->vg) - 1);
-}
-
-EOLIAN static void
-_efl_ui_animation_view_max_frame_set(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, int max_frame)
-{
- int frame_count = evas_object_vg_animated_frame_count_get(pd->vg);
- if (max_frame > frame_count - 1) max_frame = frame_count - 1;
- else
- {
- int min_frame = (frame_count - 1) * pd->min_progress;
- if (min_frame > max_frame) max_frame = min_frame;
- }
-
- pd->max_progress = (double)max_frame / (double)(frame_count - 1);
- _update_frame_duration(pd);
-}
-
-EOLIAN static int
-_efl_ui_animation_view_max_frame_get(const Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd)
-{
- return pd->max_progress * (evas_object_vg_animated_frame_count_get(pd->vg) - 1);
-}
-
-EOLIAN static void
-_efl_ui_animation_view_value_provider_override(Eo *obj EINA_UNUSED, Efl_Ui_Animation_View_Data *pd, Efl_Gfx_Vg_Value_Provider *value_provider)
-{
- if (!value_provider) return;
-
- if (pd->vp_list)
- {
- const char *keypath1 = efl_gfx_vg_value_provider_keypath_get(value_provider);
- if (!keypath1)
- {
- ERR("Couldn't override Value Provider(%p). Keypath is NULL.", value_provider);
- return;
- }
- const Eina_List *l;
- Efl_Gfx_Vg_Value_Provider *_vp;
- EINA_LIST_FOREACH(pd->vp_list, l, _vp)
- {
- const char *keypath2 = efl_gfx_vg_value_provider_keypath_get(_vp);
- if (!strcmp(keypath1, keypath2))
- {
- pd->vp_list = eina_list_remove(pd->vp_list, _vp);
- efl_unref(_vp);
- break;
- }
- }
- }
-
- efl_ref(value_provider);
- pd->vp_list = eina_list_append(pd->vp_list, value_provider);
- efl_key_data_set(pd->vg, "_vg_value_providers", pd->vp_list);
-}
-
-EAPI Elm_Animation_View*
-elm_animation_view_add(Evas_Object *parent)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
- return elm_legacy_add(MY_CLASS, parent);
-}
-
-EAPI Eina_Bool
-elm_animation_view_file_set(Elm_Animation_View *obj, const char *file, const char *key)
-{
- return efl_file_simple_load(obj, file, key);
-}
-
-EAPI Elm_Animation_View_State
-elm_animation_view_state_get(Elm_Animation_View *obj)
-{
- return efl_ui_animation_view_state_get(obj);
-}
-
-/* Internal EO APIs and hidden overrides */
-
-#define EFL_UI_ANIMATION_VIEW_EXTRA_OPS \
- EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_animation_view)
-
-#include "efl_ui_animation_view_eo.legacy.c"
-#include "efl_ui_animation_view.eo.c"
diff --git a/src/lib/elementary/efl_ui_animation_view.eo b/src/lib/elementary/efl_ui_animation_view.eo
deleted file mode 100644
index f06c9b1ce2..0000000000
--- a/src/lib/elementary/efl_ui_animation_view.eo
+++ /dev/null
@@ -1,313 +0,0 @@
-
-enum @beta Efl.Ui.Animation_View_State
-{
- [[State of animation view]]
- not_ready, [[Animation is not ready to play. (Probably, it didn't file set yet or failed to read file.]]
- play, [[Animation is playing. See @Efl.Ui.Animation_View.play.]]
- play_back, [[Animation is playing back (rewinding). See @Efl.Ui.Animation_View.play_back.]]
- pause, [[Animation has been paused. To continue animation call @Efl.Ui.Animation_View.resume.
- See @Efl.Ui.Animation_View.pause.]]
- stop [[Animation view successfully loaded a file then readied for playing.
- Otherwise after finished animation or stopped forcibly by request. See @Efl.Ui.Animation_View.stop.]]
-}
-
-class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget implements Efl.Gfx.View, Efl.File
-{
- [[Elementary Animation view class.
- Animation view is designed to show and play animation of
- vector graphics based content. It hides all @Efl.Canvas.Vg.Object details
- but just open an API to read vector data from file. Also, it implements
- details of animation control methods of Vector.
-
- Vector data could contain static or animatable vector elements including
- animation information. Available vector data file formats are SVG, JSON and EET.
- @Efl.Ui.Animation_View currently only supports the animation information contained in
- JSON (known as Lottie file as well) and EET files.
- ]]
- event_c_prefix: efl_ui_animation_view;
- methods {
- @property auto_play {
- [[Animation will be started automatically when it's possible.
-
- If @.auto_play is $true, animation will be started when it's readied.
- The condition of $auto play is when animation view opened file successfully,
- yet to play it plus when the object is visible.
- If animation view is disabled, invisible,
- it turns to pause state then resume animation when it's visible again.
-
- $true Enable auto play mode, disable otherwise.
-
- Warning: This auto play will be only affected to the next animation source.
- So must be called before setting animation file.
- ]]
- set {
- }
- get {
- }
- values {
- auto_play: bool(false); [[Auto play mode.]]
- }
- }
- @property auto_repeat {
- [[Turn on/off animation looping.
-
- If @.auto_repeat is $true, it repeats animation when animation frame is reached to
- end. This auto repeat mode is valid to both play and play_back cases.
-
- $true Enable auto play mode, disable otherwise.
- ]]
- set {
- }
- get {
- }
- values {
- auto_repeat: bool; [[Loop mode, Default is $false.]]
- }
- }
- @property speed {
- [[Control animation speed.
-
- Control animation speed by multiplying $speed value. If you want to play
- animation double-time faster, you can give $speed 2. If you want to play
- animation double-time slower, you can give $speed 0.5.
-
- Warning: speed must be greater than zero.
- ]]
- set {
- return: bool; [[$true when it's successful. $false otherwise.]]
- }
- get {
- }
- values {
- speed: double(1.0); [[Speed factor.]]
- }
- }
- @property duration_time {
- [[Get the duration of animation in seconds.
-
- This API returns total duration time of current animation in the seconds.
- If current animation source isn't animatable, it returns zero.
- ]]
- get {
- }
- values {
- frame_duration: double; [[duration time in the seconds]]
- }
- }
- @property progress {
- [[Set current progress position of animation view object.
-
- When you required to jump on a certain frame instantly,
- you can change current position by using this API.
-
- Warning: The range of progress is 0 ~ 1.
- ]]
- set {
- }
- get {
- }
- values {
- progress: double; [[Progress position. Value must be 0 ~ 1.]]
- }
- }
- @property frame {
- [[Number of current frame.
-
- Ranges from 0 to @.frame_count - 1.
- ]]
- set {
- }
- get {
- }
- values {
- frame_num: int; [[Current frame number.]]
- }
- }
- play {
- [[Play animation one time instantly when it's available.
-
- If current keyframe is on a certain position by playing back, this will
- play forward from there.
-
- Warning: Play request will be ignored if animation source is not set yet or
- animation is paused state or it's already on playing.
- ]]
-
- return: bool; [[$true when it's successful. $false otherwise.]]
- }
- play_sector {
- [[Play animation of sector one time instantly when it's available.
-
- If end sector is NULL, only start sector is referenced.
- If both the start and end sectors are valid,
- Play is played and stoped at starting point of each sector.
-
- If start is null and end is valid, playback starts from 0 frame to the start frame of the end sector.
- If both sectors start and end are invalid. Play from 0 frame to the last frame of animation view object.
-
- Note: This method use to @.min_frame, @.max_frame (@.min_progress, @.max_progress) internally.
- So if you have changed the min or max frame(progress) it can be changed to the sector frame.
- ]]
- params {
- @in start: string; [[ The name of start sector ]]
- @in end: string; [[ The name of end sector ]]
- }
- return: bool; [[$true when it's successful. $false otherwise.]]
- }
- play_back {
- [[Play back animation one time instantly when it's available.
-
- If current keyframe is on a certain position by playing, this will
- play backward from there.
-
- Warning: Play back request will be ignored if animation source is not set yet or
- animation is paused state or it's already on playing back.
- ]]
-
- return: bool; [[$true when it's successful. $false otherwise.]]
- }
- pause {
- [[Pause current animation instantly.
-
- Once animation is paused, animation view must get resume to play continue again.
-
- Warning: Animation must be on playing or playing back status.
- ]]
-
- return: bool; [[$true when it's successful. $false otherwise.]]
- }
- resume {
- [[Resume paused animation to continue animation.
-
- Warning: This resume must be called on animation paused status.
- ]]
-
- return: bool; [[$true when it's successful. $false otherwise.]]
- }
- stop {
- [[Stop playing animation.
-
- Stop animation instantly regardless of its status and reset to
- show first frame of animation. Even though current animation is paused,
- the animation status will be stopped.
- ]]
-
- return: bool; [[$true when it's successful. $false otherwise.]]
- }
- @property default_view_size {
- [[The default view size that specified from vector resource.
- ]]
- get {
- }
- values {
- size: Eina.Size2D;
- }
- }
- @property state {
- [[Current animation view state.
- See @Efl.Ui.Animation_View_State
- ]]
- get{
- }
- values {
- state: Efl.Ui.Animation_View_State; [[Current animation view state]]
- }
- }
- is_playing_back {
- [[Returns the status whether current animation is on playing forward or backward.
- Note: If animation view is not on playing, it will return $false.
- ]]
- return: bool; [[$true, if animation on playing back, $false otherwise.]]
- }
- @property frame_count {
- [[The index of end frame of the animation view, if it's animated.
- Note : frame number starts with 0.
- ]]
- get {
- }
- values {
- frame_count: int; [[The number of frames. 0, if it's not animated.]]
- }
- }
- @property min_progress {
- [[The start progress of the play.
- ]]
- set {
- }
- get {
- }
- values {
- min_progress: double(0.0); [[The minimum progress. Value must be 0 ~ 1.]]
- }
- }
- @property max_progress {
- [[The last progress of the play.
- ]]
- set {
- }
- get {
- }
- values {
- max_progress: double(1.0); [[The maximum progress. Value must be 0 ~ 1.]]
- }
- }
- @property min_frame {
- [[The start frame of the play.
- ]]
- set {
- }
- get {
- }
- values {
- min_frame: int(0); [[The minimum frame for play. Value must be 0 ~ @.max_frame]]
- }
- }
- @property max_frame {
- [[The last frame of the play.
- ]]
- set {
- }
- get {
- }
- values {
- max_frame: int; [[The maximum frame for play. Value must be @.min_frame ~ (@.frame_count - 1).
- The default value is @.frame_count - 1.
- ]]
- }
- }
- value_provider_override{
- [[Override each value of the animation object.
- Values can be properties of Efl.Gfx.Vg.Value_provider such as color and matrix information.
-
- Example:
- Eo *vp = efl_add(EFL_GFX_VG_VALUE_PROVIDER_CLASS, NULL);
- @Efl.Gfx.Vg.Value_Provider.keypath.set(vp, "SomeLayer:SomeObject:SomeContents");
- // Set vp property
- @.value_provider_override(target_animation_view, vg);
- See @Efl.Gfx.Vg.Value_Provider
- ]]
- params {
- value_provider: Efl.Gfx.Vg.Value_Provider; [[ Override the values of the animation object. this should have keypath infomation. See @Efl.Gfx.Vg.Value_Provider ]]
- }
- }
- }
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- Efl.File.load;
- Efl.File.unload;
- Efl.Gfx.Entity.visible { set; }
- Efl.Gfx.Entity.position { set; }
- Efl.Gfx.Entity.size { set; }
- Efl.Gfx.View.view_size { set; get; }
- }
- events {
- play,start: void; [[Called when animation is just started]]
- play,repeat: void; [[Called when animation is just repeated]]
- play,done: void; [[Called when animation is just finished]]
- play,pause: void; [[Called when animation is just paused]]
- play,resume: void; [[Called when animation is just resumed]]
- play,stop: void; [[Called when animation is just stopped]]
- play,update: void; [[Called when animation is just updated]]
- }
-}
diff --git a/src/lib/elementary/efl_ui_animation_view_eo.legacy.c b/src/lib/elementary/efl_ui_animation_view_eo.legacy.c
deleted file mode 100644
index 87ed3232d1..0000000000
--- a/src/lib/elementary/efl_ui_animation_view_eo.legacy.c
+++ /dev/null
@@ -1,162 +0,0 @@
-
-EAPI void
-elm_animation_view_auto_play_set(Efl_Ui_Animation_View *obj, Eina_Bool auto_play)
-{
- efl_ui_animation_view_auto_play_set(obj, auto_play);
-}
-
-EAPI Eina_Bool
-elm_animation_view_auto_play_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_auto_play_get(obj);
-}
-
-EAPI void
-elm_animation_view_auto_repeat_set(Efl_Ui_Animation_View *obj, Eina_Bool auto_repeat)
-{
- efl_ui_animation_view_auto_repeat_set(obj, auto_repeat);
-}
-
-EAPI Eina_Bool
-elm_animation_view_auto_repeat_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_auto_repeat_get(obj);
-}
-
-EAPI Eina_Bool
-elm_animation_view_speed_set(Efl_Ui_Animation_View *obj, double speed)
-{
- return efl_ui_animation_view_speed_set(obj, speed);
-}
-
-EAPI double
-elm_animation_view_speed_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_speed_get(obj);
-}
-
-EAPI double
-elm_animation_view_duration_time_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_duration_time_get(obj);
-}
-
-EAPI void
-elm_animation_view_progress_set(Efl_Ui_Animation_View *obj, double progress)
-{
- efl_ui_animation_view_progress_set(obj, progress);
-}
-
-EAPI double
-elm_animation_view_progress_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_progress_get(obj);
-}
-
-EAPI void
-elm_animation_view_frame_set(Efl_Ui_Animation_View *obj, int frame_num)
-{
- efl_ui_animation_view_frame_set(obj, frame_num);
-}
-
-EAPI int
-elm_animation_view_frame_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_frame_get(obj);
-}
-
-EAPI Eina_Bool
-elm_animation_view_play(Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_play(obj);
-}
-
-EAPI Eina_Bool
-elm_animation_view_play_back(Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_play_back(obj);
-}
-
-EAPI Eina_Bool
-elm_animation_view_pause(Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_pause(obj);
-}
-
-EAPI Eina_Bool
-elm_animation_view_resume(Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_resume(obj);
-}
-
-EAPI Eina_Bool
-elm_animation_view_stop(Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_stop(obj);
-}
-
-EAPI Eina_Size2D
-elm_animation_view_default_size_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_default_view_size_get(obj);
-}
-
-EAPI Eina_Bool
-elm_animation_view_is_playing_back(Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_is_playing_back(obj);
-}
-
-EAPI int
-elm_animation_view_frame_count_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_frame_count_get(obj);
-}
-
-EAPI void
-elm_animation_view_min_progress_set(Efl_Ui_Animation_View *obj, double min_progress)
-{
- efl_ui_animation_view_min_progress_set(obj, min_progress);
-}
-
-EAPI double
-elm_animation_view_min_progress_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_min_progress_get(obj);
-}
-
-EAPI void
-elm_animation_view_max_progress_set(Efl_Ui_Animation_View *obj, double max_progress)
-{
- efl_ui_animation_view_max_progress_set(obj, max_progress);
-}
-
-EAPI double
-elm_animation_view_max_progress_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_max_progress_get(obj);
-}
-
-EAPI void
-elm_animation_view_min_frame_set(Efl_Ui_Animation_View *obj, int min_frame)
-{
- efl_ui_animation_view_min_frame_set(obj, min_frame);
-}
-
-EAPI int
-elm_animation_view_min_frame_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_min_frame_get(obj);
-}
-
-EAPI void
-elm_animation_view_max_frame_set(Efl_Ui_Animation_View *obj, int max_frame)
-{
- efl_ui_animation_view_max_frame_set(obj, max_frame);
-}
-
-EAPI int
-elm_animation_view_max_frame_get(const Efl_Ui_Animation_View *obj)
-{
- return efl_ui_animation_view_max_frame_get(obj);
-}
diff --git a/src/lib/elementary/efl_ui_animation_view_private.h b/src/lib/elementary/efl_ui_animation_view_private.h
deleted file mode 100644
index 9199dc75ac..0000000000
--- a/src/lib/elementary/efl_ui_animation_view_private.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef EFL_UI_ANIMATION_VIEW_PRIVATE_H
-#define EFL_UI_ANIMATION_VIEW_PRIVATE_H
-
-#include "Elementary.h"
-#include "efl_ui_animation_view.eo.h"
-
-typedef struct _Efl_Ui_Animation_View_Data Efl_Ui_Animation_View_Data;
-
-struct _Efl_Ui_Animation_View_Data
-{
- Eo* vg; //Evas_Object_Vg
- Efl_Ui_Animation_View_State state;
- Elm_Transit *transit;
- Eina_Stringshare *file;
- double speed;
- double progress;
- double frame_cnt;
- int repeat_times;
- double frame_duration;
- double min_progress;
- double max_progress;
- Eina_List *vp_list;
-
- Eina_Bool play_back : 1;
- Eina_Bool auto_play : 1;
- Eina_Bool auto_play_pause: 1;
- Eina_Bool auto_repeat : 1;
-};
-
-#define EFL_UI_ANIMATION_VIEW_DATA_GET(o, sd) \
- Efl_Ui_Animation_View_Data * sd = efl_data_scope_safe_get(o, EFL_UI_ANIMATION_VIEW_CLASS)
-
-#define EFL_UI_ANIMATION_VIEW_DATA_GET_OR_RETURN(o, ptr) \
- EFL_UI_ANIMATION_VIEW_DATA_GET(o, ptr); \
- if (EINA_UNLIKELY(!ptr)) \
- { \
- ERR("No widget data for object %p (%s)", \
- o, evas_object_type_get(o)); \
- return; \
- }
-
-#endif
diff --git a/src/lib/elementary/efl_ui_bg.c b/src/lib/elementary/efl_ui_bg.c
index 51b12158db..56ccdbd72f 100644
--- a/src/lib/elementary/efl_ui_bg.c
+++ b/src/lib/elementary/efl_ui_bg.c
@@ -187,7 +187,11 @@ elm_bg_load_size_set(Evas_Object *obj, int w, int h)
EAPI Eina_Bool
elm_bg_file_set(Eo *obj, const char *file, const char *group)
{
- return efl_file_simple_load((Eo *) obj, file, group);
+ EFL_UI_BG_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+ Eina_Bool ret = efl_file_simple_load((Eo *) obj, file, group);
+ if (ret) elm_image_preload_disabled_set(sd->img, EINA_TRUE);
+
+ return ret;
}
EOLIAN static Eina_Error
diff --git a/src/lib/elementary/efl_ui_bg_legacy_eo.h b/src/lib/elementary/efl_ui_bg_legacy_eo.h
index ea3641dc2e..148db914b5 100644
--- a/src/lib/elementary/efl_ui_bg_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_bg_legacy_eo.h
@@ -26,7 +26,7 @@ typedef Eo Efl_Ui_Bg_Legacy;
*/
#define EFL_UI_BG_LEGACY_CLASS efl_ui_bg_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_bg_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_bg_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_button.c b/src/lib/elementary/efl_ui_button.c
index 7c0a13e478..d91b874422 100644
--- a/src/lib/elementary/efl_ui_button.c
+++ b/src/lib/elementary/efl_ui_button.c
@@ -397,24 +397,6 @@ _efl_ui_button_legacy_efl_object_constructor(Eo *obj, void *_pd EINA_UNUSED)
/* FIXME: replicated from elm_layout just because button's icon spot
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
* can changed the theme API */
-static void
-_icon_signal_emit(Evas_Object *obj)
-{
- char buf[64];
-
- if (!elm_widget_resize_object_get(obj)) return;
- if (!edje_object_part_exists(obj, "elm.swallow.content")) return;
- snprintf(buf, sizeof(buf), "elm,state,icon,%s",
- elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
-
- elm_layout_signal_emit(obj, buf, "elm");
- edje_object_message_signal_process(elm_layout_edje_get(obj));
- efl_canvas_group_change(obj);
-}
-
-/* FIXME: replicated from elm_layout just because button's icon spot
- * is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
- * can changed the theme API */
EOLIAN static Eina_Error
_efl_ui_button_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
{
@@ -422,7 +404,7 @@ _efl_ui_button_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
int_ret = efl_ui_widget_theme_apply(efl_super(obj, EFL_UI_BUTTON_LEGACY_CLASS));
if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret;
- _icon_signal_emit(obj);
+ if (efl_finalized_get(obj)) _elm_layout_legacy_icon_signal_emit(obj);
return int_ret;
}
@@ -438,7 +420,7 @@ _efl_ui_button_legacy_efl_ui_widget_widget_sub_object_del(Eo *obj, void *_pd EIN
int_ret = elm_widget_sub_object_del(efl_super(obj, EFL_UI_BUTTON_LEGACY_CLASS), sobj);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
@@ -454,7 +436,7 @@ _efl_ui_button_legacy_content_set(Eo *obj, void *_pd EINA_UNUSED, const char *pa
int_ret = efl_content_set(efl_part(efl_super(obj, EFL_UI_BUTTON_LEGACY_CLASS), part), content);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
diff --git a/src/lib/elementary/efl_ui_button_legacy_eo.h b/src/lib/elementary/efl_ui_button_legacy_eo.h
index 31630d64ef..d8c893016b 100644
--- a/src/lib/elementary/efl_ui_button_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_button_legacy_eo.h
@@ -24,7 +24,7 @@ typedef Eo Efl_Ui_Button_Legacy;
*/
#define EFL_UI_BUTTON_LEGACY_CLASS efl_ui_button_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_button_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_button_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_calendar_private.h b/src/lib/elementary/efl_ui_calendar_private.h
index 3d80b89305..9ee17465e3 100644
--- a/src/lib/elementary/efl_ui_calendar_private.h
+++ b/src/lib/elementary/efl_ui_calendar_private.h
@@ -10,17 +10,6 @@
*/
/**
- * @addtogroup Widget
- * @{
- *
- * @section elm-calendar-class The Elementary Calendar Class
- *
- * Elementary, besides having the @ref Calendar widget, exposes its
- * foundation -- the Elementary Calendar Class -- in order to create other
- * widgets which are a calendar with some more logic on top.
- */
-
-/**
* Base layout smart data extended with calendar instance data.
*/
typedef struct _Efl_Ui_Calendar_Data Efl_Ui_Calendar_Data;
@@ -47,10 +36,6 @@ struct _Efl_Ui_Calendar_Data
Eina_Bool weekdays_set : 1;
};
-/**
- * @}
- */
-
#define EFL_UI_CALENDAR_DATA_GET(o, sd) \
Efl_Ui_Calendar_Data * sd = efl_data_scope_get(o, EFL_UI_CALENDAR_CLASS)
diff --git a/src/lib/elementary/efl_ui_check.c b/src/lib/elementary/efl_ui_check.c
index 1ac817e29f..da51f880ce 100644
--- a/src/lib/elementary/efl_ui_check.c
+++ b/src/lib/elementary/efl_ui_check.c
@@ -453,26 +453,6 @@ _efl_ui_check_legacy_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
/* FIXME: replicated from elm_layout just because check's icon spot
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
* can changed the theme API */
-static void
-_icon_signal_emit(Evas_Object *obj)
-{
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
- char buf[64];
-
- if (!elm_widget_resize_object_get(obj)) return;
- if (!edje_object_part_exists(obj, "elm.swallow.content")) return;
- snprintf(buf, sizeof(buf), "elm,state,icon,%s",
- elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
-
- elm_layout_signal_emit(obj, buf, "elm");
- edje_object_message_signal_process(wd->resize_obj);
-
- efl_canvas_group_change(obj);
-}
-
-/* FIXME: replicated from elm_layout just because check's icon spot
- * is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
- * can changed the theme API */
EOLIAN static Eina_Error
_efl_ui_check_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
{
@@ -481,7 +461,7 @@ _efl_ui_check_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
int_ret = efl_ui_widget_theme_apply(efl_super(obj, EFL_UI_CHECK_LEGACY_CLASS));
if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret;
- _icon_signal_emit(obj);
+ if (efl_finalized_get(obj)) _elm_layout_legacy_icon_signal_emit(obj);
return int_ret;
}
@@ -497,7 +477,7 @@ _efl_ui_check_legacy_efl_ui_widget_widget_sub_object_del(Eo *obj, void *_pd EINA
int_ret = elm_widget_sub_object_del(efl_super(obj, EFL_UI_CHECK_LEGACY_CLASS), sobj);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
@@ -513,7 +493,7 @@ _efl_ui_check_legacy_content_set(Eo *obj, void *_pd EINA_UNUSED, const char *par
int_ret = efl_content_set(efl_part(efl_super(obj, EFL_UI_CHECK_LEGACY_CLASS), part), content);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
diff --git a/src/lib/elementary/efl_ui_check_legacy_eo.h b/src/lib/elementary/efl_ui_check_legacy_eo.h
index a8fb7f50e6..2cc1a576ab 100644
--- a/src/lib/elementary/efl_ui_check_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_check_legacy_eo.h
@@ -26,7 +26,7 @@ typedef Eo Efl_Ui_Check_Legacy;
*/
#define EFL_UI_CHECK_LEGACY_CLASS efl_ui_check_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_check_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_check_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_clock.h b/src/lib/elementary/efl_ui_clock.h
index c883db2eee..95849b1334 100644
--- a/src/lib/elementary/efl_ui_clock.h
+++ b/src/lib/elementary/efl_ui_clock.h
@@ -1,5 +1,5 @@
/**
- * @defgroup efl_ui_clock
+ * @defgroup efl_ui_clock EFL Ui Clock Widget
* @ingroup Elementary
*
* @image html clock_inheritance_tree.png
@@ -115,11 +115,11 @@
* The whole widget is left aligned and its size grows horizontally depending
* on the current format and each field's visible/disabled state.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for Clock objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @b "changed" - whenever Clock field value is changed, this
* signal is sent.
* @li @b "language,changed" - whenever system locale changes, this
diff --git a/src/lib/elementary/efl_ui_collection.c b/src/lib/elementary/efl_ui_collection.c
index 53eb344d4e..2161181687 100644
--- a/src/lib/elementary/efl_ui_collection.c
+++ b/src/lib/elementary/efl_ui_collection.c
@@ -86,7 +86,7 @@ static void
_fast_accessor_init(Fast_Accessor *accessor, Eina_List **items)
{
//this is the accessor for accessing the items
- //we have to workarround here the problem that
+ //we have to workaround here the problem that
//no accessor can be created for a not yet created list.
accessor->items = items;
}
@@ -146,6 +146,8 @@ typedef struct {
Fast_Accessor size_accessor;
Efl_Gfx_Entity *sizer;
unsigned int start_id, end_id;
+ Eina_Bool allow_manual_deselection : 1;
+ Eina_Bool api_selection_change : 1;
} Efl_Ui_Collection_Data;
static Eina_Bool register_item(Eo *obj, Efl_Ui_Collection_Data *pd, Efl_Ui_Item *item);
@@ -238,7 +240,7 @@ _item_scroll_internal(Eo *obj EINA_UNUSED,
ipos.x = ipos.x + vpos.x - view.x;
ipos.y = ipos.y + vpos.y - view.y;
- //FIXME scrollable needs some sort of align, the docs do not even garantee to completly move in the element
+ //FIXME scrollable needs some sort of align, the docs do not even garantee to completely move in the element
efl_ui_scrollable_scroll(pd->smanager, ipos, anim);
}
@@ -360,6 +362,8 @@ _efl_ui_collection_efl_object_constructor(Eo *obj, Efl_Ui_Collection_Data *pd EI
{
Eo *o;
+ efl_ui_selectable_allow_manual_deselection_set(obj, EINA_TRUE);
+
pd->dir = EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
_fast_accessor_init(&pd->obj_accessor, &pd->items);
@@ -566,7 +570,7 @@ _selection_changed(void *data, const Efl_Event *ev)
Efl_Ui_Selection *fallback;
//if this is the highest call in the tree of selection changes, safe the fallback and apply it later
- //this way we ensure that we are not accidently adding fallback even if we just want to have a empty selection list
+ //this way we ensure that we are not accidentally adding fallback even if we just want to have a empty selection list
fallback = pd->fallback;
pd->fallback = NULL;
@@ -576,7 +580,7 @@ _selection_changed(void *data, const Efl_Event *ev)
{
_single_selection_behaviour(obj, pd, ev->object);
}
- else if (pd->mode == EFL_UI_SELECT_MODE_MULTI && _elm_config->desktop_entry)
+ else if (pd->mode == EFL_UI_SELECT_MODE_MULTI && _elm_config->desktop_entry && !pd->api_selection_change)
{
const Evas_Modifier *mod = evas_key_modifier_get(evas_object_evas_get(ev->object));
if (!(efl_input_clickable_interaction_get(ev->object)
@@ -1087,7 +1091,7 @@ _efl_ui_collection_efl_ui_focus_manager_move(Eo *obj, Efl_Ui_Collection_Data *pd
}
else
{
- _item_scroll_internal(obj, pd, new_obj, .0, EINA_TRUE);
+ _item_scroll_internal(obj, pd, efl_provider_find(new_obj, EFL_UI_ITEM_CLASS), .0, EINA_TRUE);
}
return new_obj;
@@ -1108,13 +1112,17 @@ _selectable_range_apply(Eina_List *start, Eina_Bool flag)
EOLIAN static void
_efl_ui_collection_efl_ui_multi_selectable_all_select(Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd)
{
+ pd->api_selection_change = EINA_TRUE;
_selectable_range_apply(pd->items, EINA_TRUE);
+ pd->api_selection_change = EINA_FALSE;
}
EOLIAN static void
_efl_ui_collection_efl_ui_multi_selectable_all_unselect(Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd)
{
+ pd->api_selection_change = EINA_TRUE;
_selectable_range_apply(pd->items, EINA_FALSE);
+ pd->api_selection_change = EINA_FALSE;
}
static void
@@ -1176,6 +1184,19 @@ _efl_ui_collection_efl_ui_single_selectable_fallback_selection_get(const Eo *obj
return pd->fallback;
}
+EOLIAN static void
+_efl_ui_collection_efl_ui_single_selectable_allow_manual_deselection_set(Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd, Eina_Bool allow_manual_deselection)
+{
+ pd->allow_manual_deselection = !!allow_manual_deselection;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_collection_efl_ui_single_selectable_allow_manual_deselection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd)
+{
+ return pd->allow_manual_deselection;
+}
+
+
#include "efl_ui_collection.eo.c"
#define ITEM_IS_OUTSIDE_VISIBLE(id) id < collection_pd->start_id || id > collection_pd->end_id
diff --git a/src/lib/elementary/efl_ui_collection.eo b/src/lib/elementary/efl_ui_collection.eo
index 4a5a440002..d890b1656e 100644
--- a/src/lib/elementary/efl_ui_collection.eo
+++ b/src/lib/elementary/efl_ui_collection.eo
@@ -97,6 +97,7 @@ class Efl.Ui.Collection extends Efl.Ui.Layout_Base implements
Efl.Ui.Multi_Selectable_Object_Range.range_select;
Efl.Ui.Multi_Selectable_Object_Range.range_unselect;
Efl.Ui.Single_Selectable.fallback_selection {get; set;}
+ Efl.Ui.Single_Selectable.allow_manual_deselection {get; set;}
}
}
diff --git a/src/lib/elementary/efl_ui_collection_view.c b/src/lib/elementary/efl_ui_collection_view.c
index 433f5d3511..7eb6fe42d1 100644
--- a/src/lib/elementary/efl_ui_collection_view.c
+++ b/src/lib/elementary/efl_ui_collection_view.c
@@ -1685,7 +1685,7 @@ _item_scroll_internal(Eo *obj EINA_UNUSED,
ipos.x = ipos.x + vpos.x - view.x;
ipos.y = ipos.y + vpos.y - view.y;
- //FIXME scrollable needs some sort of align, the docs do not even garantee to completly move in the element
+ //FIXME scrollable needs some sort of align, the docs do not even garantee to completely move in the element
efl_ui_scrollable_scroll(pd->scroller, ipos, anim);
}
diff --git a/src/lib/elementary/efl_ui_datepicker.c b/src/lib/elementary/efl_ui_datepicker.c
index c52c43437f..78427ac21e 100644
--- a/src/lib/elementary/efl_ui_datepicker.c
+++ b/src/lib/elementary/efl_ui_datepicker.c
@@ -18,7 +18,7 @@
Efl_Time t = efl_datetime_manager_value_get(pd->dt_manager); \
pd->cur_date[DATEPICKER_YEAR] = t.tm_year + 1900; \
pd->cur_date[DATEPICKER_MONTH] = t.tm_mon + 1; \
- pd->cur_date[DATEPICKER_DAY] = t.tm_mday + 1; \
+ pd->cur_date[DATEPICKER_DAY] = t.tm_mday; \
} while (0)
#define DATE_SET() \
@@ -26,7 +26,7 @@
Efl_Time t = { 0 }; \
t.tm_year = pd->cur_date[DATEPICKER_YEAR] - 1900; \
t.tm_mon = pd->cur_date[DATEPICKER_MONTH] - 1; \
- t.tm_mday = pd->cur_date[DATEPICKER_DAY] - 1; \
+ t.tm_mday = pd->cur_date[DATEPICKER_DAY]; \
t.tm_sec = 0; \
efl_datetime_manager_value_set(pd->dt_manager, t); \
} while (0)
diff --git a/src/lib/elementary/efl_ui_dnd.c b/src/lib/elementary/efl_ui_dnd.c
index df79eb9762..efa0669d99 100644
--- a/src/lib/elementary/efl_ui_dnd.c
+++ b/src/lib/elementary/efl_ui_dnd.c
@@ -12,838 +12,146 @@
#include <Elementary_Cursor.h>
#include "elm_priv.h"
-typedef struct _Efl_Ui_Dnd_Container_Data Efl_Ui_Dnd_Container_Data;
-struct _Efl_Ui_Dnd_Container_Data
-{
- unsigned int drag_delay_time;
-};
-
-extern int _wl_default_seat_id_get(Evas_Object *obj);
-#ifdef HAVE_ELEMENTARY_WL2
-Ecore_Wl2_Window *_wl_window_get(const Evas_Object *obj);
-#endif
-
-Eo*
-_efl_ui_selection_manager_get(Eo *obj)
-{
- if (!efl_isa(obj, EFL_UI_WIDGET_CLASS)) return NULL;
- Eo *app = efl_app_main_get();
- Eo *sel_man = efl_key_data_get(app, "__selection_manager");
- if (!sel_man)
- {
- sel_man = efl_add(EFL_UI_SELECTION_MANAGER_CLASS, app);
- efl_key_data_set(app, "__selection_manager", sel_man);
- }
- return sel_man;
-}
-
-void
-_efl_ui_dnd_shutdown(void)
-{
- Eo *app = efl_app_main_get();
- Eo *sel_man = efl_key_data_get(app, "__selection_manager");
-
- efl_del(sel_man);
-}
-
-EOLIAN static void
-_efl_ui_dnd_drag_start(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Format format, Eina_Slice data,
- Efl_Ui_Selection_Action action, void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb,
- unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_drag_start(sel_man, obj, format, data, action,
- icon_func_data, icon_func, icon_func_free_cb,
- seat);
-}
-
-EOLIAN static void
-_efl_ui_dnd_drag_cancel(Eo *obj, void *pd EINA_UNUSED, unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_drag_cancel(sel_man, obj, seat);
-}
-
-EOLIAN static void
-_efl_ui_dnd_drag_action_set(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Action action, unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_drag_action_set(sel_man, obj, action, seat);
-}
-
-
-EOLIAN static void
-_efl_ui_dnd_drop_target_add(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Format format, unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_drop_target_add(sel_man, obj, format, seat);
-}
-
-EOLIAN static void
-_efl_ui_dnd_drop_target_del(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Format format, unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_drop_target_del(sel_man, obj, format, seat);
-}
-
-EOLIAN static double
-_efl_ui_dnd_container_drag_delay_time_get(const Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Container_Data *pd)
-{
- return pd->drag_delay_time;
-}
+typedef struct {
+ Ecore_Evas *ee;
+ Eina_Bool registered;
+} Efl_Ui_Dnd_Data;
-EOLIAN static void
-_efl_ui_dnd_container_drag_delay_time_set(Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Container_Data *pd, double drag_delay_time)
-{
- pd->drag_delay_time = drag_delay_time;
-}
-
-EOLIAN static void
-_efl_ui_dnd_container_drag_item_add(Eo *obj, Efl_Ui_Dnd_Container_Data *pd,
- void *data_func_data, Efl_Dnd_Drag_Data_Get data_func, Eina_Free_Cb data_func_free_cb,
- void *item_func_data, Efl_Dnd_Item_Get item_func, Eina_Free_Cb item_func_free_cb,
- void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb,
- void *icon_list_func_data, Efl_Dnd_Drag_Icon_List_Create icon_list_func, Eina_Free_Cb icon_list_func_free_cb,
- unsigned int seat)
-{
- double drag_delay_time = pd->drag_delay_time;
- double anim_time = elm_config_drag_anim_duration_get();
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_container_drag_item_add(sel_man, obj, drag_delay_time, anim_time,
- data_func_data, data_func, data_func_free_cb,
- item_func_data, item_func, item_func_free_cb,
- icon_func_data, icon_func, icon_func_free_cb,
- icon_list_func_data, icon_list_func, icon_list_func_free_cb,
- seat);
-}
+typedef struct {
+ Eo *win;
+ Efl_Ui_Dnd *obj;
+} Efl_Ui_Drag_Start;
static void
-_efl_ui_dnd_container_drag_item_del(Eo *obj, Efl_Ui_Dnd_Container_Data *pd EINA_UNUSED, unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_container_drag_item_del(sel_man, obj, seat);
-}
-EOLIAN static void
-_efl_ui_dnd_container_drop_item_add(Eo *obj, Efl_Ui_Dnd_Container_Data *pd EINA_UNUSED,
- Efl_Ui_Selection_Format format,
- void *item_func_data, Efl_Dnd_Item_Get item_func, Eina_Free_Cb item_func_free_cb,
- unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_container_drop_item_add(sel_man, obj, format, item_func_data, item_func, item_func_free_cb, seat);
-}
-
-EOLIAN static void
-_efl_ui_dnd_container_drop_item_del(Eo *obj, Efl_Ui_Dnd_Container_Data *pd EINA_UNUSED, unsigned int seat)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_container_drop_item_del(sel_man, obj, seat);
-}
-
-
-///////////
-typedef struct _Dnd_Icon_Create Dnd_Icon_Create;
-typedef struct _Dnd_Drag_Pos Dnd_Drag_Pos;
-typedef struct _Dnd_Drag_Accept Dnd_Drag_Accept;
-typedef struct _Dnd_Drag_Done Dnd_Drag_Done;
-typedef struct _Dnd_Drag_State Dnd_Drag_State;
-typedef struct _Dnd_Drop Dnd_Drop;
-typedef struct _Dnd_Cont_Drag_Pos Dnd_Cont_Drag_Pos;
-typedef struct _Dnd_Cont_Drop Dnd_Cont_Drop;
-typedef struct _Item_Container_Drag_Info Item_Container_Drag_Info;
-
-struct _Dnd_Icon_Create
-{
- void *icon_data;
- Elm_Drag_Icon_Create_Cb icon_cb;
-};
-
-struct _Dnd_Drag_Pos
-{
- void *pos_data;
- Elm_Drag_Pos pos_cb;
-};
-
-struct _Dnd_Drag_Accept
-{
- void *accept_data;
- Elm_Drag_Accept accept_cb;
-};
-
-struct _Dnd_Drag_Done
-{
- void *done_data;
- Elm_Drag_State done_cb;
-
- //for deleting
- Dnd_Drag_Pos *pos;
- Dnd_Drag_Accept *accept;
-};
-
-struct _Dnd_Drag_State
-{
- void *state_data;
- Elm_Drag_State state_cb;
-};
-
-struct _Dnd_Drop
-{
- Efl_Object *obj;
- Elm_Sel_Format format;
- void *drop_data;
- Elm_Drop_Cb drop_cb;
-
- //for deleting
- Dnd_Drag_State *enter;
- Dnd_Drag_State *leave;
- Dnd_Drag_Pos *pos;
-};
-
-struct _Dnd_Cont_Drag_Pos
-{
- void *pos_data;
- Elm_Drag_Item_Container_Pos pos_cb;
- Elm_Xy_Item_Get_Cb item_get_cb;
-};
-
-struct _Dnd_Cont_Drop
-{
- Efl_Object *obj;
- Elm_Sel_Format format;
- void *drop_data;
- Elm_Drop_Item_Container_Cb drop_cb;
- Elm_Xy_Item_Get_Cb item_get_cb;
-
- //for deleting
- Dnd_Drag_State *enter;
- Dnd_Drag_State *leave;
- Dnd_Cont_Drag_Pos *pos;
-};
-
-struct _Item_Container_Drag_Info
-{
- Elm_Drag_User_Info user_info;
- Elm_Object_Item *it;
- Elm_Item_Container_Data_Get_Cb data_get_cb;
- Elm_Xy_Item_Get_Cb item_get_cb;
-};
-
-static Efl_Object *
-_dnd_icon_create_cb(void *data, Efl_Object *win, Efl_Object *drag_obj EINA_UNUSED, Eina_Position2D *pos_ret)
-{
- Dnd_Icon_Create *ic = data;
- Efl_Object *ret = ic->icon_cb(ic->icon_data, win, &pos_ret->x, &pos_ret->y);
-
- free(ic);
- return ret;
-}
-
-static void
-_dnd_drag_pos_cb(void *data, const Efl_Event *event)
-{
- Dnd_Drag_Pos *pos = data;
- Efl_Dnd_Drag_Pos *ddata = event->info;
-
- if (pos->pos_cb)
- pos->pos_cb(pos->pos_data, event->object, ddata->pos.x, ddata->pos.y,
- (Elm_Xdnd_Action)ddata->action);
-}
-
-static void
-_dnd_drag_accept_cb(void *data, const Efl_Event *event)
-{
- Dnd_Drag_Accept *accept = data;
-
- if (accept->accept_cb)
- accept->accept_cb(accept->accept_data, event->object, *(Eina_Bool *)event->info);
-}
-
-static void
-_dnd_drag_done_cb(void *data, const Efl_Event *event)
-{
- Dnd_Drag_Done *done = data;
-
- if (done->done_cb)
- done->done_cb(done->done_data, event->object);
-
- efl_event_callback_del(event->object, EFL_UI_DND_EVENT_DRAG_POS,
- _dnd_drag_pos_cb, done->pos);
- efl_event_callback_del(event->object, EFL_UI_DND_EVENT_DRAG_ACCEPT,
- _dnd_drag_accept_cb, done->accept);
- efl_event_callback_del(event->object, EFL_UI_DND_EVENT_DRAG_DONE,
- _dnd_drag_done_cb, done);
- free(done->pos);
- free(done->accept);
- free(done);
-}
-
-static void
-_dnd_drag_enter_leave_cb(void *data, const Efl_Event *event)
-{
- Dnd_Drag_State *state = data;
-
- if (state->state_cb)
- state->state_cb(state->state_data, event->object);
-}
-
-static void
-_dnd_drop_cb(void *data, const Efl_Event *event)
-{
- Dnd_Drop *drop = data;
- Efl_Ui_Selection_Data *org_ddata = event->info;
- Elm_Selection_Data ddata;
-
- ddata.x = org_ddata->pos.x;
- ddata.y = org_ddata->pos.y;
- ddata.format = (Elm_Sel_Format)org_ddata->format;
- ddata.action = (Elm_Xdnd_Action)org_ddata->action;
- ddata.data = calloc(1, org_ddata->content.len);
- if (!ddata.data) return;
- ddata.data = memcpy(ddata.data, org_ddata->content.mem, org_ddata->content.len);
- ddata.len = org_ddata->content.len;
- if (drop->drop_cb)
- drop->drop_cb(drop->drop_data, event->object, &ddata);
- free(ddata.data);
-}
-
-EAPI Eina_Bool
-elm_drag_start(Evas_Object *obj, Elm_Sel_Format format, const char *data,
- Elm_Xdnd_Action action,
- Elm_Drag_Icon_Create_Cb icon_create_cb, void *icon_create_data,
- Elm_Drag_Pos drag_pos_cb, void *drag_pos_data,
- Elm_Drag_Accept drag_accept_cb, void *drag_accept_data,
- Elm_Drag_State drag_done_cb, void *drag_done_data)
-{
- if (!data) return EINA_FALSE;
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
- Eina_Slice sl;
- Dnd_Drag_Pos *pos = calloc(1, sizeof(Dnd_Drag_Pos));
- Dnd_Drag_Accept *accept = calloc(1, sizeof(Dnd_Drag_Accept));
- Dnd_Drag_Done *done = calloc(1, sizeof(Dnd_Drag_Done));
- Dnd_Icon_Create *ic = calloc(1, sizeof(Dnd_Icon_Create));
- if (!pos || !accept || !done || !ic) goto on_error;
-
- pos->pos_data = drag_pos_data;
- pos->pos_cb = drag_pos_cb;
-
- accept->accept_data = drag_accept_data;
- accept->accept_cb = drag_accept_cb;
-
- done->done_data = drag_done_data;
- done->done_cb = drag_done_cb;
- done->pos = pos;
- done->accept = accept;
-
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_POS, _dnd_drag_pos_cb, pos);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_ACCEPT, _dnd_drag_accept_cb, accept);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_DONE, _dnd_drag_done_cb, done);
- sl.mem = data;
- sl.len = strlen(data);
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
-
- ic->icon_data = icon_create_data;
- ic->icon_cb = icon_create_cb;
- efl_ui_selection_manager_drag_start(sel_man, obj, (Efl_Ui_Selection_Format)format, sl,
- (Efl_Ui_Selection_Action)action,
- ic, _dnd_icon_create_cb, NULL, seatid);
-
- return EINA_TRUE;
-
-on_error:
- if (pos) free(pos);
- if (accept) free(accept);
- if (done) free(done);
- if (ic) free(ic);
-
- return EINA_FALSE;
-}
-
-EAPI Eina_Bool
-elm_drag_action_set(Evas_Object *obj, Elm_Xdnd_Action action)
+_ecore_evas_drag_terminated(Ecore_Evas *ee EINA_UNUSED, unsigned int seat, void *data, Eina_Bool accepted)
{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
- efl_ui_selection_manager_drag_action_set(sel_man, obj, (Efl_Ui_Selection_Action)action, seatid);
-
- return EINA_TRUE;
+ Efl_Ui_Drag_Start *start = data;
+ Efl_Ui_Drag_Finished_Event ev = {seat, accepted};
+ efl_event_callback_call(start->obj, EFL_UI_DND_EVENT_DRAG_FINISHED, &ev);
+ efl_del(start->win);
+ free(start);
}
-EAPI Eina_Bool
-elm_drag_cancel(Evas_Object *obj)
+EOLIAN static Efl_Content*
+_efl_ui_dnd_drag_start(Eo *obj, Efl_Ui_Dnd_Data *pd, Eina_Content *content, const char* action, unsigned int seat)
{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
+ Eo *drag_win;
+ Efl_Ui_Drag_Start *start;
+ Efl_Ui_Drag_Started_Event ev = {seat};
+ Ecore_Evas *drag_ee;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->ee, NULL);
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
-
- efl_ui_selection_manager_drag_cancel(sel_man, obj, seatid);
-
- return EINA_TRUE;
-}
-
-static void
-_drop_obj_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Eina_List *drop_list;
- Dnd_Drop *drop;
+ start = calloc(1, sizeof(Efl_Ui_Drag_Start));
+ start->obj = obj;
+ start->win = drag_win = elm_win_add(NULL, "Elm-Drag", ELM_WIN_DND);
+ elm_win_alpha_set(drag_win, EINA_TRUE);
+ elm_win_override_set(drag_win, EINA_TRUE);
+ elm_win_borderless_set(drag_win, EINA_TRUE);
+ drag_ee = ecore_evas_ecore_evas_get(evas_object_evas_get(drag_win));
- drop_list = efl_key_data_get(obj, "__drop_list");
- EINA_LIST_FREE(drop_list, drop)
+ if (!ecore_evas_drag_start(pd->ee, seat, content, drag_ee, action, _ecore_evas_drag_terminated, start))
{
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_ENTER,
- _dnd_drag_enter_leave_cb, drop->enter);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_LEAVE,
- _dnd_drag_enter_leave_cb, drop->leave);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_POS,
- _dnd_drag_pos_cb, drop->pos);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_DROP,
- _dnd_drop_cb, drop);
- free(drop->enter);
- free(drop->leave);
- free(drop->pos);
- free(drop);
+ efl_del(drag_win);
+ free(start);
+ drag_win = NULL;
}
- efl_key_data_set(obj, "__drop_list", NULL);
-}
-
-EAPI Eina_Bool
-elm_drop_target_add(Evas_Object *obj, Elm_Sel_Format format,
- Elm_Drag_State enter_cb, void *enter_data,
- Elm_Drag_State leave_cb, void *leave_data,
- Elm_Drag_Pos pos_cb, void *pos_data,
- Elm_Drop_Cb drop_cb, void *drop_data)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
- Dnd_Drag_State *enter, *leave;
- Dnd_Drag_Pos *pos;
- Dnd_Drop *drop;
- Eina_List *drop_list;
-
- enter = calloc(1, sizeof(Dnd_Drag_State));
- leave = calloc(1, sizeof(Dnd_Drag_State));
- pos = calloc(1, sizeof(Dnd_Drag_Pos));
- drop = calloc(1, sizeof(Dnd_Drop));
- if (!enter || !leave || !pos || !drop) goto on_error;
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
- enter->state_cb = enter_cb;
- enter->state_data = enter_data;
- leave->state_cb = leave_cb;
- leave->state_data = leave_data;
- pos->pos_cb = pos_cb;
- pos->pos_data = pos_data;
- drop->obj = obj;
- drop->format = format;
- drop->drop_cb = drop_cb;
- drop->drop_data = drop_data;
- drop->enter = enter;
- drop->leave = leave;
- drop->pos = pos;
-
- drop_list = efl_key_data_get(obj, "__drop_list");
- drop_list = eina_list_append(drop_list, drop);
- efl_key_data_set(obj, "__drop_list", drop_list);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
- _drop_obj_del_cb, NULL);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_ENTER,
- _dnd_drag_enter_leave_cb, enter);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_LEAVE,
- _dnd_drag_enter_leave_cb, leave);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_POS,
- _dnd_drag_pos_cb, pos);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_DROP,
- _dnd_drop_cb, drop);
- efl_ui_selection_manager_drop_target_add(sel_man, obj, (Efl_Ui_Selection_Format)format, seatid);
-
- return EINA_TRUE;
-
-on_error:
- if (enter) free(enter);
- if (leave) free(leave);
- if (pos) free(pos);
- if (drop) free(drop);
-
- return EINA_FALSE;
-}
-
-EAPI Eina_Bool
-elm_drop_target_del(Evas_Object *obj, Elm_Sel_Format format,
- Elm_Drag_State enter_cb, void *enter_data,
- Elm_Drag_State leave_cb, void *leave_data,
- Elm_Drag_Pos pos_cb, void *pos_data,
- Elm_Drop_Cb drop_cb, void *drop_data)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
- //Eina_List *l, *l2;
- Eina_List *drop_list;
- Dnd_Drop *drop;
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
-
- drop_list = efl_key_data_get(obj, "__drop_list");
- drop = eina_list_data_get(drop_list);
- if (drop &&
- (drop->format == format) &&
- (drop->enter->state_cb == enter_cb) &&
- (drop->enter->state_data == enter_data) &&
- (drop->leave->state_cb == leave_cb) &&
- (drop->leave->state_data == leave_data) &&
- (drop->pos->pos_cb == pos_cb) &&
- (drop->pos->pos_data == pos_data) &&
- (drop->drop_cb == drop_cb) &&
- (drop->drop_data == drop_data))
+ else
{
- drop_list = eina_list_remove(drop_list, drop);
- efl_key_data_set(obj, "__drop_list", drop_list);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, _drop_obj_del_cb);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_ENTER,
- _dnd_drag_enter_leave_cb, drop->enter);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_LEAVE,
- _dnd_drag_enter_leave_cb, drop->leave);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_POS,
- _dnd_drag_pos_cb, drop->pos);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_DROP,
- _dnd_drop_cb, drop);
- free(drop->enter);
- free(drop->leave);
- free(drop->pos);
- free(drop);
+ evas_object_show(drag_win);
+ efl_event_callback_call(obj, EFL_UI_DND_EVENT_DRAG_STARTED, &ev);
}
- efl_ui_selection_manager_drop_target_del(sel_man, obj, (Efl_Ui_Selection_Format)format, seatid);
- return EINA_TRUE;
+ return drag_win;
}
-static Efl_Object *
-_dnd_item_func(void *data, Efl_Canvas_Object *item, Eina_Position2D pos, Eina_Position2D *pos_ret)
+EOLIAN static void
+_efl_ui_dnd_drag_cancel(Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Data *pd, unsigned int seat)
{
- Elm_Xy_Item_Get_Cb item_get_cb = data;
- Evas_Coord x, y;
- Efl_Object *obj = NULL;
-
- x = y = 0;
- if (item_get_cb)
- obj = item_get_cb(item, pos.x, pos.y, &x, &y);
- if (pos_ret)
- {
- pos_ret->x = x;
- pos_ret->y = y;
- }
-
- return obj;
+ ecore_evas_drag_cancel(pd->ee, seat);
}
-static void
-_dnd_cont_drag_pos_cb(void *data, const Efl_Event *event)
+EOLIAN static Eina_Future*
+_efl_ui_dnd_drop_data_get(Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Data *pd, unsigned int seat, Eina_Iterator *acceptable_types)
{
- Dnd_Cont_Drag_Pos *pos = data;
- Efl_Dnd_Drag_Pos *ddata = event->info;
- Evas_Coord xret = 0, yret = 0;
-
- if (pos->item_get_cb)
- {
- Evas_Coord x, y;
- evas_object_geometry_get(event->object, &x, &y, NULL, NULL);
- pos->item_get_cb(event->object, ddata->pos.x + x, ddata->pos.y + y,
- &xret, &yret);
- }
- if (pos->pos_cb)
- pos->pos_cb(pos->pos_data, event->object, ddata->item, ddata->pos.x, ddata->pos.y,
- xret, yret, (Elm_Xdnd_Action)ddata->action);
+ return ecore_evas_selection_get(pd->ee, seat, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER, acceptable_types);
}
-static void
-_dnd_cont_drop_cb(void *data, const Efl_Event *event)
+EOLIAN static Efl_Object *
+_efl_ui_dnd_efl_object_constructor(Eo *obj, Efl_Ui_Dnd_Data *pd)
{
- Dnd_Cont_Drop *drop = data;
- Efl_Ui_Selection_Data *org_ddata = event->info;
- Elm_Selection_Data ddata;
- Evas_Coord xret = 0, yret = 0;
+ if (!efl_constructor(efl_super(obj, EFL_UI_DND_MIXIN)))
+ return NULL;
- ddata.x = org_ddata->pos.x;
- ddata.y = org_ddata->pos.y;
- ddata.format = (Elm_Sel_Format)org_ddata->format;
- ddata.action = (Elm_Xdnd_Action)org_ddata->action;
- ddata.data = calloc(1, org_ddata->content.len);
- if (!ddata.data) return;
- ddata.data = memcpy(ddata.data, org_ddata->content.mem, org_ddata->content.len);
- ddata.len = org_ddata->content.len;
+ pd->ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
- if (drop->item_get_cb)
- {
- Evas_Coord x, y;
- evas_object_geometry_get(event->object, &x, &y, NULL, NULL);
- drop->item_get_cb(event->object, ddata.x + x, ddata.y + y,
- &xret, &yret);
- }
-
- if (drop->drop_cb)
- drop->drop_cb(drop->drop_data, event->object, org_ddata->item,
- &ddata, xret, yret);
- free(ddata.data);
+ return obj;
}
-static void
-_cont_drop_free_data(Evas_Object *obj)
+EOLIAN static void
+_efl_ui_dnd_efl_object_invalidate(Eo *obj, Efl_Ui_Dnd_Data *pd)
{
- Eina_List *cont_drop_list;
- Dnd_Cont_Drop *drop;
-
- cont_drop_list = efl_key_data_get(obj, "__cont_drop_item");
- drop = eina_list_data_get(cont_drop_list);
- if (drop)
+ if (pd->registered)
{
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_ENTER,
- _dnd_drag_enter_leave_cb, drop->enter);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_LEAVE,
- _dnd_drag_enter_leave_cb, drop->leave);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_POS,
- _dnd_cont_drag_pos_cb, drop->pos);
- efl_event_callback_del(drop->obj, EFL_UI_DND_EVENT_DRAG_DROP,
- _dnd_cont_drop_cb, drop);
- free(drop->enter);
- free(drop->leave);
- free(drop->pos);
- cont_drop_list = eina_list_remove(cont_drop_list, drop);
- efl_key_data_set(obj, "__cont_drop_item", cont_drop_list);
- free(drop);
+ _drop_event_unregister(obj);
}
-}
+ efl_invalidate(efl_super(obj, EFL_UI_DND_MIXIN));
-static void
-_cont_drop_obj_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *info EINA_UNUSED)
-{
- _cont_drop_free_data(obj);
}
-EAPI Eina_Bool
-elm_drop_item_container_add(Evas_Object *obj,
- Elm_Sel_Format format,
- Elm_Xy_Item_Get_Cb item_get_cb,
- Elm_Drag_State enter_cb, void *enter_data,
- Elm_Drag_State leave_cb, void *leave_data,
- Elm_Drag_Item_Container_Pos pos_cb, void *pos_data,
- Elm_Drop_Item_Container_Cb drop_cb, void *drop_data)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
- Dnd_Drag_State *enter = NULL, *leave = NULL;
- Dnd_Cont_Drag_Pos *pos = NULL;
- Dnd_Cont_Drop *drop = NULL;
- Eina_List *cont_drop_list;
-
- enter = calloc(1, sizeof(Dnd_Drag_State));
- leave = calloc(1, sizeof(Dnd_Drag_State));
- pos = calloc(1, sizeof(Dnd_Cont_Drag_Pos));
- drop = calloc(1, sizeof(Dnd_Cont_Drop));
- if (!enter || !leave || !pos || !drop) goto on_error;
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
-
- enter->state_cb = enter_cb;
- enter->state_data = enter_data;
- leave->state_cb = leave_cb;
- leave->state_data = leave_data;
- pos->pos_cb = pos_cb;
- pos->pos_data = pos_data;
- pos->item_get_cb = item_get_cb;
- drop->obj = obj;
- drop->format = format;
- drop->drop_cb = drop_cb;
- drop->drop_data = drop_data;
- drop->enter = enter;
- drop->leave = leave;
- drop->pos = pos;
+#define IS_DROP_EVENT(D) ( \
+(D == EFL_UI_DND_EVENT_DROP_POSITION_CHANGED) || \
+(D == EFL_UI_DND_EVENT_DROP_DROPPED) || \
+(D == EFL_UI_DND_EVENT_DROP_LEFT) || \
+(D == EFL_UI_DND_EVENT_DROP_ENTERED) \
+)
- cont_drop_list = efl_key_data_get(obj, "__cont_drop_item");
- cont_drop_list = eina_list_append(cont_drop_list, drop);
- efl_key_data_set(obj, "__cont_drop_item", cont_drop_list);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
- _cont_drop_obj_del_cb, NULL);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_ENTER,
- _dnd_drag_enter_leave_cb, enter);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_LEAVE,
- _dnd_drag_enter_leave_cb, leave);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_POS,
- _dnd_cont_drag_pos_cb, pos);
- efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_DROP,
- _dnd_cont_drop_cb, drop);
- efl_ui_selection_manager_container_drop_item_add(sel_man, obj, (Efl_Ui_Selection_Format)format,
- item_get_cb, _dnd_item_func, NULL,
- seatid);
-
- return EINA_TRUE;
-
-on_error:
- if (enter) free(enter);
- if (leave) free(leave);
- if (pos) free(pos);
- if (drop) free(drop);
-
- return EINA_FALSE;
-}
-
-EAPI Eina_Bool
-elm_drop_item_container_del(Evas_Object *obj)
+EOLIAN static Efl_Object*
+_efl_ui_dnd_efl_object_finalize(Eo *obj, Efl_Ui_Dnd_Data *pd)
{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
+ if (pd->registered)
+ _drop_event_register(obj);
- _cont_drop_free_data(obj);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, _cont_drop_obj_del_cb);
- efl_ui_selection_manager_container_drop_item_del(sel_man, obj, seatid);
-
- return EINA_TRUE;
+ return efl_finalize(efl_super(obj, EFL_UI_DND_MIXIN));
}
-static void
-_cont_drag_data_func(void *data, Efl_Object *obj, Efl_Ui_Selection_Format *format,
- Eina_Rw_Slice *drag_data, Efl_Ui_Selection_Action *action)
-{
- Item_Container_Drag_Info *di;
-
- di = data;
- if (!di) return;
- di->data_get_cb(obj, di->it, &di->user_info);
- if (format) *format = (Efl_Ui_Selection_Format)di->user_info.format;
- if (drag_data)
- {
- if (di->user_info.data)
- {
- drag_data->mem = (void *)di->user_info.data;
- drag_data->len = strlen(di->user_info.data);
- }
- }
- if (action) *action = (Efl_Ui_Selection_Action)di->user_info.action;
-}
-
-static Eina_List *
-_cont_drag_icon_list_create(void *data, Efl_Object *obj EINA_UNUSED)
-{
- Item_Container_Drag_Info *di;
-
- di = data;
- return di->user_info.icons;
-}
-static Efl_Object *
-_cont_drag_icon_create(void *data, Efl_Object *win, Efl_Object *drag_obj EINA_UNUSED, Eina_Position2D *pos_ret)
+EOLIAN static Eina_Bool
+_efl_ui_dnd_efl_object_event_callback_priority_add(Eo *obj, Efl_Ui_Dnd_Data *pd,
+ const Efl_Event_Description *desc,
+ Efl_Callback_Priority priority,
+ Efl_Event_Cb func,
+ const void *user_data)
{
- Item_Container_Drag_Info *di;
- Elm_Object_Item *it = NULL;
+ if (IS_DROP_EVENT(desc) && !pd->registered)
+ {
+ pd->registered = EINA_TRUE;
+ if (efl_finalized_get(obj))
+ _drop_event_register(obj);
+ }
- di = data;
- if (!di) return NULL;
- if (!di->user_info.createicon) return NULL;
- it = di->user_info.createicon(di->user_info.createdata, win, &pos_ret->x, &pos_ret->y);
- di->it = it;
- return it;
+ return efl_event_callback_priority_add(efl_super(obj, EFL_UI_DND_MIXIN), desc, priority, func, user_data);
}
-static Efl_Object *
-_cont_drag_item_func(void *data, Efl_Canvas_Object *item, Eina_Position2D pos, Eina_Position2D *pos_ret)
+EOLIAN static Eina_Bool
+_efl_ui_dnd_efl_object_event_callback_array_priority_add(Eo *obj, Efl_Ui_Dnd_Data *pd,
+ const Efl_Callback_Array_Item *array,
+ Efl_Callback_Priority priority,
+ const void *user_data)
{
- Item_Container_Drag_Info *di = data;
- Evas_Coord x, y;
- Efl_Object *obj = NULL;
-
- x = y = 0;
- if (di->item_get_cb)
- obj = di->item_get_cb(item, pos.x, pos.y, &x, &y);
- if (pos_ret)
+ for (int i = 0; array[i].desc; ++i)
{
- pos_ret->x = x;
- pos_ret->y = y;
+ if (IS_DROP_EVENT(array[i].desc) && !pd->registered)
+ {
+ pd->registered = EINA_TRUE;
+ if (efl_finalized_get(obj))
+ _drop_event_register(obj);
+ }
}
- di->it = obj;
-
- return obj;
-}
-
-static void
-_cont_drag_free_data(Evas_Object *obj)
-{
- Eina_List *di_list;
- Item_Container_Drag_Info *di;
-
- di_list = efl_key_data_get(obj, "__cont_drag_item");
- di = eina_list_data_get(di_list);
- di_list = eina_list_remove(di_list, di);
- efl_key_data_set(obj, "__cont_drag_item", di_list);
- free(di);
-}
-
-static void
-_cont_drag_obj_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
-{
- _cont_drag_free_data(obj);
-}
-
-EAPI Eina_Bool
-elm_drag_item_container_add(Evas_Object *obj, double anim_tm, double tm_to_drag,
- Elm_Xy_Item_Get_Cb item_get_cb, Elm_Item_Container_Data_Get_Cb data_get_cb)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
- Eina_List *di_list;
- Item_Container_Drag_Info *di;
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
-
- di = calloc(1, sizeof(Item_Container_Drag_Info));
- if (!di) return EINA_FALSE;
- di->data_get_cb = data_get_cb;
- di->item_get_cb = item_get_cb;
- di_list = efl_key_data_get(obj, "__cont_drag_item");
- di_list = eina_list_append(di_list, di);
- efl_key_data_set(obj, "__cont_drag_item", di_list);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _cont_drag_obj_del_cb, NULL);
- efl_ui_selection_manager_container_drag_item_add(sel_man, obj, tm_to_drag, anim_tm,
- di, _cont_drag_data_func, NULL,
- di, _cont_drag_item_func, NULL,
- di, _cont_drag_icon_create, NULL,
- di, _cont_drag_icon_list_create, NULL,
- seatid);
- return EINA_TRUE;
+ return efl_event_callback_array_priority_add(efl_super(obj, EFL_UI_DND_MIXIN), array, priority, user_data);
}
-EAPI Eina_Bool
-elm_drag_item_container_del(Evas_Object *obj)
-{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- int seatid = 1;
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
-
- _cont_drag_free_data(obj);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, _cont_drag_obj_del_cb);
- efl_ui_selection_manager_container_drag_item_del(sel_man, obj, seatid);
-
- return EINA_TRUE;
-}
+#define EFL_UI_DND_EXTRA_OPS \
+ EFL_OBJECT_OP_FUNC(efl_event_callback_priority_add, _efl_ui_dnd_efl_object_event_callback_priority_add), \
+ EFL_OBJECT_OP_FUNC(efl_event_callback_array_priority_add, _efl_ui_dnd_efl_object_event_callback_array_priority_add), \
#include "efl_ui_dnd.eo.c"
-#include "efl_ui_dnd_container.eo.c"
diff --git a/src/lib/elementary/efl_ui_dnd.eo b/src/lib/elementary/efl_ui_dnd.eo
index 08f668856b..49ef148723 100644
--- a/src/lib/elementary/efl_ui_dnd.eo
+++ b/src/lib/elementary/efl_ui_dnd.eo
@@ -1,63 +1,93 @@
-import efl_ui_dnd_types;
+import eina_types;
-mixin @beta Efl.Ui.Dnd {
- data: null;
+struct @beta Efl.Ui.Drop_Event {
+ [[Information sent along with Drag & Drop events.]]
+ position : Eina.Position2D; [[The position where the drop event occurred, in window coordinates.]]
+ seat : uint; [[Which seat triggered the event.]]
+ available_types : accessor<string>; [[Types with automatic conversion available. Use one of them in the call to
+ @Efl.Ui.Dnd.drop_data_get.
+
+ Types are IANA MIME types:
+ https://www.iana.org/assignments/media-types/media-types.xhtml
+ ]]
+}
+
+struct @beta Efl.Ui.Drop_Dropped_Event {
+ [[Information sent along with Drop events.]]
+ dnd : Efl.Ui.Drop_Event; [[Common information.]]
+ action : string; [[Requested action to perform upon reception of this data.]]
+}
+
+struct @beta Efl.Ui.Drag_Started_Event {
+ [[Information sent along with @Efl.Ui.Drag_Started_Event events.]]
+ seat : uint; [[Which seat triggered the event.]]
+}
+
+struct @beta Efl.Ui.Drag_Finished_Event {
+ [[Information sent along with @Efl.Ui.Drag_Finished_Event events.]]
+ seat : uint; [[Which seat triggered the event.]]
+ accepted : bool; [[$true if the operation completed with a Drop, or $false if it was cancelled.]]
+}
+
+mixin @beta Efl.Ui.Dnd requires Efl.Object {
+ [[This mixin provides the ability to interact with the system's Drag & Drop facilities.
+
+ Applications starting a Drag & Drop operation operation are said to perform a "Drag" and use
+ the methods prefixed "drag_".
+ On the other hand, applications receiving dragged content are said to perform a "Drop" operation and use
+ the methods prefixed "drop_".
+ ]]
methods {
drag_start {
- [[Start a drag and drop process at the drag side.
- During dragging, there are three events emitted as belows:
- - EFL_UI_DND_EVENT_DRAG_POS
- - EFL_UI_DND_EVENT_DRAG_ACCEPT
- - EFL_UI_DND_EVENT_DRAG_DONE
+ [[Starts a drag from this client.
+
+ @[Efl.Ui.Dnd.drag,started] is emitted each time a successful drag is started.
+ @[Efl.Ui.Dnd.drag,finished] is emitted every time a drag is finished.
]]
params {
- @in format: Efl.Ui.Selection_Format; [[The data format]]
- @in data: Eina.Slice; [[The drag data]]
- @in action: Efl.Ui.Selection_Action; [[Action when data is transferred]]
- @in icon_func: Efl.Dnd.Drag_Icon_Create; [[Function pointer to create icon]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- drag_action_set {
- [[Set the action for the drag]]
- params {
- @in action: Efl.Ui.Selection_Action; [[Drag action]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
+ content : Eina.Content @by_ref; [[The content being dragged.]]
+ @in action: string; [[Requested action to perform by the receiver once content is transferred.]]
+ @in seat: uint; [[Seat starting the drag operation. When in doubt use 0.]]
}
+ return : Efl.Content; [[An Efl.Ui element which you can use to render a visual representation
+ of the content being dragged (like a thumbnail, for example).
+ Use @Efl.Content.content.set on it to do so.]]
}
drag_cancel {
- [[Cancel the on-going drag]]
+ [[Cancels an on-going drag operation.]]
params {
- @in seat: uint; [[Specified seat for multiple seats case.]]
+ @in seat: uint; [[Seat that started the drag operation. When in doubt use 0.]]
}
}
- drop_target_add {
- [[Make the current object as drop target.
- There are four events emitted:
- - EFL_UI_DND_EVENT_DRAG_ENTER
- - EFL_UI_DND_EVENT_DRAG_LEAVE
- - EFL_UI_DND_EVENT_DRAG_POS
- - EFL_UI_DND_EVENT_DRAG_DROP.]]
+ drop_data_get {
+ [[Retrieves the dropped data.]]
params {
- @in format: Efl.Ui.Selection_Format; [[Accepted data format]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- drop_target_del {
- [[Delete the dropable status from object]]
- params {
- @in format: Efl.Ui.Selection_Format; [[Accepted data format]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
+ @in seat: uint; [[Seat that started the drag operation. When in doubt use 0.]]
+ @in acceptable_types : iterator<string>; [[List of strings describing the type of content the application
+ can accept. Types are IANA MIME types:
+ https://www.iana.org/assignments/media-types/media-types.xhtml.]]
}
+ return : future<Eina.Content> @move; [[This future is fulfilled when the content is received (asynchronously)
+ and ready to use.
+ The Eina.Content specifies the type of the data.
+ If no matching type was found it returns an error.
+ ]]
}
}
events {
- /* FIXME: This is not very future-proof. Better return a struct. */
- drag,accept: ptr(bool); [[accept drag data]]
- drag,done: void; [[drag is done (mouse up)]]
- drag,enter: void; [[called when the drag object enters this object]]
- drag,leave: void; [[called when the drag object leaves this object]]
- drag,pos: Efl.Dnd.Drag_Pos; [[called when the drag object changes drag position]]
- drag,drop: Efl.Ui.Selection_Data; [[called when the drag object dropped on this object]]
+ drop,entered : Efl.Ui.Drop_Event; [[Dragged content entered the window. Its type can already be checked with
+ @.drop_data_get to react before it is dropped, for example.]]
+ drop,left : Efl.Ui.Drop_Event; [[Dragged content left the window.]]
+ drop,position,changed : Efl.Ui.Drop_Event; [[Dragged content moved over the window. Its type can already be
+ checked with @.drop_data_get to react before it is dropped,
+ for example.]]
+ drop,dropped : Efl.Ui.Drop_Dropped_Event; [[Dragged content was dropped over the window.]]
+ drag,started : Efl.Ui.Drag_Started_Event; [[A Drag operation started.]]
+ drag,finished : Efl.Ui.Drag_Finished_Event;[[A Drag operation finished.]]
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Object.invalidate;
+ Efl.Object.finalize;
}
}
diff --git a/src/lib/elementary/efl_ui_dnd_container.eo b/src/lib/elementary/efl_ui_dnd_container.eo
deleted file mode 100644
index 0cc1f3f945..0000000000
--- a/src/lib/elementary/efl_ui_dnd_container.eo
+++ /dev/null
@@ -1,46 +0,0 @@
-import efl_ui_dnd_types;
-
-mixin @beta Efl.Ui.Dnd_Container {
- methods {
- @property drag_delay_time {
- [[The time since mouse down happens to drag starts.]]
- set {
- }
- get {
- }
- values {
- time: double; [[The drag delay time]]
- }
- }
- drag_item_add {
- [[This registers a drag for items in a container. Many items can be
- dragged at a time. During dragging, there are three events emitted:
- EFL_DND_EVENT_DRAG_POS, EFL_DND_EVENT_DRAG_ACCEPT, EFL_DND_EVENT_DRAG_DONE.]]
- params {
- @in data_func: Efl.Dnd.Drag_Data_Get; [[Data and its format]]
- @in item_func: Efl.Dnd.Item_Get; [[Item to determine drag start]]
- @in icon_func: Efl.Dnd.Drag_Icon_Create; [[Icon used during drag]]
- @in icon_list_func: Efl.Dnd.Drag_Icon_List_Create; [[Icons used for animations CHECKING ]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- drag_item_del {
- [[Remove drag function of items in the container object.]]
- params {
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- drop_item_add {
- params {
- @in format: Efl.Ui.Selection_Format; [[Accepted data formats]]
- @in item_func: Efl.Dnd.Item_Get; [[Get item at specific position]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- drop_item_del {
- params {
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- }
-}
diff --git a/src/lib/elementary/efl_ui_dnd_types.eot b/src/lib/elementary/efl_ui_dnd_types.eot
deleted file mode 100644
index ace1c8de7b..0000000000
--- a/src/lib/elementary/efl_ui_dnd_types.eot
+++ /dev/null
@@ -1,60 +0,0 @@
-import efl_ui_selection_types;
-
-function @beta Efl.Dnd.Drag_Icon_Create {
- [[Function pointer for creating icon at the drag side.]]
- params {
- @in win: Efl.Canvas.Object; [[The window to create the objects relative to]]
- @in drag_obj: Efl.Canvas.Object; [[The drag object]]
- @out off: Eina.Position2D; [[Offset from the icon position to the cursor]]
- }
- return: Efl.Canvas.Object; [[The drag icon object]]
-};
-
-function @beta Efl.Dnd.Drag_Data_Get {
- [[Function pointer for getting data and format at the drag side.]]
- params {
- @in obj: Efl.Canvas.Object; [[The container object]]
- @out format: Efl.Ui.Selection_Format; [[Data format]]
- @out drag_data: Eina.Rw_Slice; [[Data]]
- @out action: Efl.Ui.Selection_Action; [[The drag action]]
- }
-};
-
-function @beta Efl.Dnd.Item_Get {
- [[Function pointer to find out which item is under position (x, y)]]
- params {
- @in obj: Efl.Canvas.Object; [[The container object]]
- @in pos: Eina.Position2D; [[The coordinates to get item]]
- @out posret: Eina.Position2D; [[position relative to item (left (-1), middle (0), right (1)]]
- }
- return: Efl.Object; [[Object under x,y coordinates or NULL if not found]]
-};
-
-function @beta Efl.Dnd.Drag_Icon_List_Create {
- [[Function pointer to create list of icons at the drag side.
- These icons are used for animation on combining selection icons
- to one icon.]]
- params {
- @in obj: Efl.Canvas.Object; [[The container object]]
- }
- return: list<Efl.Canvas.Object>;
-};
-
-struct @beta Efl.Dnd.Drag_Accept {
- accepted: bool;
-}
-
-struct @beta Efl.Dnd.Drag_Pos {
- [[Dragging position information.]]
- pos: Eina.Position2D; [[Evas Coordinate]]
- action: Efl.Ui.Selection_Action; [[The drag action]]
- format: Efl.Ui.Selection_Format; [[The drag format]]
- item: Efl.Canvas.Object; [[The item object. It is only available for container object.]]
-}
-
-struct @beta Efl.Dnd.Drag_Item_Container_Drop {
- [[Drop information for a drag&drop operation.]]
- item: Efl.Canvas.Object; [[The item object]]
- data: Efl.Ui.Selection_Data; [[The selection data]]
- pos: Eina.Position2D; [[Position relative to item (left (-1), middle (0), right (1)]]
-}
diff --git a/src/lib/elementary/efl_ui_exact_model.c b/src/lib/elementary/efl_ui_exact_model.c
index b12cfba8bd..9c33709123 100644
--- a/src/lib/elementary/efl_ui_exact_model.c
+++ b/src/lib/elementary/efl_ui_exact_model.c
@@ -54,20 +54,6 @@ _efl_ui_exact_model_efl_object_constructor(Eo *obj, Efl_Ui_Exact_Model_Data *pd)
return efl_constructor(efl_super(obj, EFL_UI_EXACT_MODEL_CLASS));
}
-static unsigned int
-_efl_ui_exact_model_list_find(unsigned int list_index, Eina_List *start, Eina_List **l)
-{
- Eina_Binbuf *tbuf;
-
- EINA_LIST_FOREACH(start, *l, tbuf)
- {
- if (list_index == 0) break;
- list_index--;
- }
-
- return list_index;
-}
-
static Eina_List *
_efl_ui_exact_model_slot_compress(unsigned int index, Eina_List *compressed, unsigned int *buffer)
{
@@ -78,7 +64,7 @@ _efl_ui_exact_model_slot_compress(unsigned int index, Eina_List *compressed, uns
Eina_List *l = NULL;
unsigned int i;
- _efl_ui_exact_model_list_find(list_index, compressed, &l);
+ l = eina_list_nth_list(compressed, list_index);
tbuf = eina_binbuf_manage_new((unsigned char *) buffer, EFL_UI_EXACT_MODEL_CONTENT_LENGTH, EINA_TRUE);
if (!tbuf) return compressed;
@@ -136,16 +122,15 @@ _efl_ui_exact_model_slot_compress(unsigned int index, Eina_List *compressed, uns
static unsigned int *
_efl_ui_exact_model_buffer_expand(unsigned int list_index, unsigned int *buffer, Eina_List *list)
{
- unsigned int found;
Eina_Binbuf *tmp;
Eina_List *l = NULL;
if (!buffer) buffer = malloc(EFL_UI_EXACT_MODEL_CONTENT_LENGTH);
- found = _efl_ui_exact_model_list_find(list_index, list, &l);
+ l = eina_list_nth_list(list, list_index);
// Check if the data is in the list
- if (!found)
+ if (!l)
{
// Not found -> everything is assumed to be zero
memset(buffer, 0, EFL_UI_EXACT_MODEL_CONTENT_LENGTH);
@@ -219,7 +204,7 @@ _efl_ui_exact_model_slot_find(Efl_Ui_Exact_Model_Data *pd, unsigned int index,
pd->parent->slot[found].start_offset = index / EFL_UI_EXACT_MODEL_CONTENT;
}
- // Increase usage of the returnd slot for now
+ // Increase usage of the returned slot for now
pd->parent->slot[found].usage++;
// Unpack the data if requested
diff --git a/src/lib/elementary/efl_ui_flip.c b/src/lib/elementary/efl_ui_flip.c
index 26f8d848bf..b40e9d769c 100644
--- a/src/lib/elementary/efl_ui_flip.c
+++ b/src/lib/elementary/efl_ui_flip.c
@@ -536,7 +536,7 @@ _state_update(Evas_Object *obj)
if (mx < 1) mx = 1; // quick hack to keep curl line visible
- if (mgrad == 0.0) // special horizontal case
+ if (EINA_DBL_EQ(mgrad, 0.0)) // special horizontal case
mgrad = 0.001; // quick dirty hack for now
// else
{
@@ -1962,13 +1962,13 @@ _efl_ui_flip_go_to(Eo *obj, Efl_Ui_Flip_Data *sd, Eina_Bool front, Efl_Ui_Flip_M
{
if (sd->next_state == front) return;
- _internal_elm_flip_go_to(obj, sd, front, mode);
+ _internal_elm_flip_go_to(obj, sd, front, (Elm_Flip_Mode)mode);
}
EOLIAN static void
_efl_ui_flip_go(Eo *obj, Efl_Ui_Flip_Data *sd, Efl_Ui_Flip_Mode mode)
{
- _internal_elm_flip_go_to(obj, sd, !sd->state, mode);
+ _internal_elm_flip_go_to(obj, sd, !sd->state, (Elm_Flip_Mode)mode);
}
static void
@@ -2099,7 +2099,7 @@ _efl_ui_flip_interaction_direction_hitsize_set(Eo *obj, Efl_Ui_Flip_Data *sd, Ef
else if (hitsize > 1.0)
hitsize = 1.0;
- if (sd->dir_hitsize[i] == hitsize) return;
+ if (EINA_DBL_EQ(sd->dir_hitsize[i], hitsize)) return;
sd->dir_hitsize[i] = hitsize;
if (hitsize >= 0.0)
diff --git a/src/lib/elementary/efl_ui_flip_eo.legacy.c b/src/lib/elementary/efl_ui_flip_eo.legacy.c
index 9968236d88..9e7795664c 100644
--- a/src/lib/elementary/efl_ui_flip_eo.legacy.c
+++ b/src/lib/elementary/efl_ui_flip_eo.legacy.c
@@ -2,13 +2,13 @@
EAPI void
elm_flip_interaction_set(Elm_Flip *obj, Elm_Flip_Interaction mode)
{
- efl_ui_flip_interaction_set(obj, mode);
+ efl_ui_flip_interaction_set(obj, (Efl_Ui_Flip_Interaction)mode);
}
EAPI Elm_Flip_Interaction
elm_flip_interaction_get(const Elm_Flip *obj)
{
- return efl_ui_flip_interaction_get(obj);
+ return (Elm_Flip_Interaction)efl_ui_flip_interaction_get(obj);
}
EAPI Eina_Bool
@@ -20,11 +20,11 @@ elm_flip_front_visible_get(const Elm_Flip *obj)
EAPI void
elm_flip_go(Elm_Flip *obj, Elm_Flip_Mode mode)
{
- efl_ui_flip_go(obj, mode);
+ efl_ui_flip_go(obj, (Efl_Ui_Flip_Mode)mode);
}
EAPI void
elm_flip_go_to(Elm_Flip *obj, Eina_Bool front, Elm_Flip_Mode mode)
{
- efl_ui_flip_go_to(obj, front, mode);
+ efl_ui_flip_go_to(obj, front, (Efl_Ui_Flip_Mode)mode);
}
diff --git a/src/lib/elementary/efl_ui_flip_legacy_eo.h b/src/lib/elementary/efl_ui_flip_legacy_eo.h
index 8d578ddac5..a5b02aa7d4 100644
--- a/src/lib/elementary/efl_ui_flip_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_flip_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Flip_Legacy;
*/
#define EFL_UI_FLIP_LEGACY_CLASS efl_ui_flip_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_flip_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_flip_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_focus_layer.c b/src/lib/elementary/efl_ui_focus_layer.c
index ccbe1d31e8..a183c7e8a3 100644
--- a/src/lib/elementary/efl_ui_focus_layer.c
+++ b/src/lib/elementary/efl_ui_focus_layer.c
@@ -147,7 +147,17 @@ _efl_ui_focus_layer_enable_set(Eo *obj, Efl_Ui_Focus_Layer_Data *pd, Eina_Bool v
pd->old_focus = NULL;
if (fallback && efl_ui_focus_manager_redirect_get(pd->registered_manager) == obj)
- efl_ui_focus_manager_redirect_set(pd->registered_manager, NULL);
+ {
+ Efl_Ui_Focus_Manager *m = pd->registered_manager;
+
+ while (efl_ui_focus_manager_redirect_get(m))
+ {
+ Efl_Ui_Focus_Manager *old = m;
+
+ m = efl_ui_focus_manager_redirect_get(m);
+ efl_ui_focus_manager_redirect_set(old, NULL);
+ }
+ }
efl_ui_focus_manager_calc_unregister(pd->registered_manager, obj);
pd->registered_manager = NULL;
diff --git a/src/lib/elementary/efl_ui_focus_manager.c b/src/lib/elementary/efl_ui_focus_manager.c
index 31afb9dc98..8f63f8e25c 100644
--- a/src/lib/elementary/efl_ui_focus_manager.c
+++ b/src/lib/elementary/efl_ui_focus_manager.c
@@ -8,10 +8,10 @@
EAPI void
efl_ui_focus_relation_free(Efl_Ui_Focus_Relations *rel)
{
- eina_list_free(rel->right);
- eina_list_free(rel->left);
- eina_list_free(rel->top);
- eina_list_free(rel->down);
+ eina_iterator_free(rel->right);
+ eina_iterator_free(rel->left);
+ eina_iterator_free(rel->top);
+ eina_iterator_free(rel->down);
free(rel);
}
diff --git a/src/lib/elementary/efl_ui_focus_manager.eo b/src/lib/elementary/efl_ui_focus_manager.eo
index 5bb11e7036..080edaaf7a 100644
--- a/src/lib/elementary/efl_ui_focus_manager.eo
+++ b/src/lib/elementary/efl_ui_focus_manager.eo
@@ -4,10 +4,10 @@ import eina_types;
struct @beta @free(efl_ui_focus_relation_free) Efl.Ui.Focus.Relations {
[[Structure holding the graph of relations between focusable objects.
]]
- right : list<Efl.Ui.Focus.Object> @move; [[List of objects to the right.]]
- left : list<Efl.Ui.Focus.Object> @move; [[List of objects to the left.]]
- top : list<Efl.Ui.Focus.Object> @move; [[List of objects above.]]
- down : list<Efl.Ui.Focus.Object> @move; [[List of objects below.]]
+ right : iterator<Efl.Ui.Focus.Object> @move; [[List of objects to the right.]]
+ left : iterator<Efl.Ui.Focus.Object> @move; [[List of objects to the left.]]
+ top : iterator<Efl.Ui.Focus.Object> @move; [[List of objects above.]]
+ down : iterator<Efl.Ui.Focus.Object> @move; [[List of objects below.]]
next : Efl.Ui.Focus.Object; [[Next object.]]
prev : Efl.Ui.Focus.Object; [[Previous object.]]
parent : Efl.Ui.Focus.Object; [[Parent object.]]
@@ -96,6 +96,15 @@ interface Efl.Ui.Focus.Manager {
over the border objects.]]
}
}
+ @property border_elements_changed {
+ [[Return $true if the border elements have changed since the last invocation of @.border_elements.get]]
+ get {
+
+ }
+ values {
+ changed : bool; [[$true if there was a change, $false if not]]
+ }
+ }
@property viewport_elements {
[[Elements that are at the border of the viewport
diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c
index efb67fcabf..5b7589d95f 100644
--- a/src/lib/elementary/efl_ui_focus_manager_calc.c
+++ b/src/lib/elementary/efl_ui_focus_manager_calc.c
@@ -85,6 +85,7 @@ typedef struct {
int freeze;
Node *root;
+ Eina_Bool border_elements_changed;
} Efl_Ui_Focus_Manager_Calc_Data;
static Eina_Mempool *_node_mempool;
@@ -111,11 +112,11 @@ _focus_manager_active_get(Eo *obj)
{
Eo *root, *manager, *comp_parent, *redirect;
- if (efl_isa(obj, EFL_UI_FOCUS_MANAGER_WINDOW_ROOT_INTERFACE) ||
- (efl_composite_part_is(obj) && efl_isa(efl_parent_get(obj), EFL_UI_FOCUS_MANAGER_WINDOW_ROOT_INTERFACE)))
+ root = efl_ui_focus_manager_root_get(obj);
+
+ if (efl_isa(root, EFL_UI_FOCUS_MANAGER_WINDOW_ROOT_INTERFACE))
return EINA_TRUE;
- root = efl_ui_focus_manager_root_get(obj);
manager = efl_ui_focus_object_focus_manager_get(root);
if (!manager) return EINA_FALSE;
@@ -159,20 +160,25 @@ _manager_in_chain_set(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd)
efl_class_name_get(pd->root->focusable), root);
}
+
static void
border_onedirection_set(Node *node, Efl_Ui_Focus_Direction direction, Eina_List *list)
{
Node *partner;
Eina_List *lnode;
Border *border;
+ Efl_Ui_Focus_Direction complement;
EINA_SAFETY_ON_FALSE_RETURN(DIRECTION_IS_2D(direction));
+ complement = efl_ui_focus_util_direction_complement(direction);
+ //this is basically a nop. The complement of 2D will *always* be 2D
+ EINA_SAFETY_ON_FALSE_RETURN(DIRECTION_IS_2D(complement));
border = &DIRECTION_ACCESS(node, direction);
EINA_LIST_FREE(border->one_direction, partner)
{
- Border *b = &DIRECTION_ACCESS(partner, efl_ui_focus_util_direction_complement(direction));
+ Border *b = &DIRECTION_ACCESS(partner, complement);
b->cleanup_nodes = eina_list_remove(b->cleanup_nodes, node);
}
@@ -180,7 +186,7 @@ border_onedirection_set(Node *node, Efl_Ui_Focus_Direction direction, Eina_List
EINA_LIST_FOREACH(border->one_direction, lnode, partner)
{
- Border *comp_border = &DIRECTION_ACCESS(partner,efl_ui_focus_util_direction_complement(direction));
+ Border *comp_border = &DIRECTION_ACCESS(partner, complement);
comp_border->cleanup_nodes = eina_list_append(comp_border->cleanup_nodes, node);
}
@@ -191,14 +197,18 @@ border_onedirection_cleanup(Node *node, Efl_Ui_Focus_Direction direction)
{
Node *partner;
Border *border;
+ Efl_Ui_Focus_Direction complement;
EINA_SAFETY_ON_FALSE_RETURN(DIRECTION_IS_2D(direction));
+ complement = efl_ui_focus_util_direction_complement(direction);
+ //this is basically a nop. The complement of 2D will *always* be 2D
+ EINA_SAFETY_ON_FALSE_RETURN(DIRECTION_IS_2D(complement));
border = &DIRECTION_ACCESS(node, direction);
EINA_LIST_FREE(border->cleanup_nodes, partner)
{
- Border *b = &DIRECTION_ACCESS(partner, efl_ui_focus_util_direction_complement(direction));
+ Border *b = &DIRECTION_ACCESS(partner, complement);
b->one_direction = eina_list_remove(b->one_direction, node);
}
}
@@ -247,7 +257,6 @@ node_item_free(Node *item)
Eina_List *l;
Eo *obj = item->manager;
FOCUS_DATA(obj);
- Eina_Bool dirty_added = EINA_FALSE;
/*cleanup graph parts*/
@@ -264,7 +273,7 @@ node_item_free(Node *item)
if (partner->type != NODE_TYPE_ONLY_LOGICAL) \
{ \
dirty_add(obj, pd, partner); \
- dirty_added = EINA_TRUE; \
+ pd->border_elements_changed = EINA_TRUE; \
} \
}
@@ -278,7 +287,7 @@ node_item_free(Node *item)
}
//the unregistering of a item should ever result in atleast a coords_dirty call
- if (dirty_added)
+ if (pd->border_elements_changed)
efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY, NULL);
/*cleanup manager householdings*/
@@ -402,6 +411,8 @@ dirty_flush_node(Efl_Ui_Focus_Manager *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Cal
{
Efl_Ui_Focus_Direction direction = -1;
Efl_Ui_Focus_Graph_Calc_Direction_Result *res = NULL;
+ Node *partner;
+ Eina_List *n;
if (i == 0)
{
@@ -424,6 +435,9 @@ dirty_flush_node(Efl_Ui_Focus_Manager *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Cal
res = &result.bottom;
}
+ EINA_LIST_FOREACH(res->relation, n, partner)
+ partner->unused = EINA_FALSE;
+
border_onedirection_set(node, direction, res->relation);
}
@@ -470,7 +484,9 @@ dirty_add(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Node *dirty)
pd->dirty = eina_list_append(pd->dirty, dirty);
dirty->on_list = EINA_TRUE;
- efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY, NULL);
+ if (!pd->border_elements_changed)
+ efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY, NULL);
+ pd->border_elements_changed = EINA_TRUE;
}
@@ -776,10 +792,10 @@ _efl_ui_focus_manager_calc_update_children(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Man
}
static inline Node*
-_request_subchild_except(Node *n, Node *except)
+_request_subchild_except(Node *n, Eo *except)
{
n = _request_subchild(n);
- while (n == except)
+ while (n && n->focusable == except)
{
n = _next(n);
}
@@ -788,7 +804,7 @@ _request_subchild_except(Node *n, Node *except)
}
EOLIAN static void
-_efl_ui_focus_manager_calc_unregister(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Ui_Focus_Object *child)
+_efl_ui_focus_manager_calc_unregister(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Ui_Focus_Object *child)
{
Node *node;
@@ -800,7 +816,7 @@ _efl_ui_focus_manager_calc_unregister(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_
if (eina_list_last_data_get(pd->focus_stack) == node)
{
- if (!efl_invalidated_get(pd->root->focusable))
+ if (!efl_invalidated_get(pd->root->focusable) && _focus_manager_active_get(obj))
{
Node *n = NULL;
@@ -810,7 +826,7 @@ _efl_ui_focus_manager_calc_unregister(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_
{
n = eina_list_nth(pd->focus_stack, eina_list_count(pd->focus_stack) - 2);
if (!n)
- n = _request_subchild_except(pd->root, node);
+ n = _request_subchild_except(pd->root, node->focusable);
if (n)
efl_ui_focus_manager_focus_set(obj, n->focusable);
@@ -869,7 +885,7 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_redirect_set(Eo *obj, Efl_Ui_Foc
}
else
{
- n = _request_subchild(pd->root);
+ n = _request_subchild_except(pd->root, pd->redirect_entry);
if (n)
efl_ui_focus_manager_focus_set(obj, n->focusable);
}
@@ -919,6 +935,7 @@ _efl_ui_focus_manager_calc_efl_object_constructor(Eo *obj, Efl_Ui_Focus_Manager_
pd->node_hash = eina_hash_pointer_new(_free_node);
pd->graph_ctx.offset_focusable = offsetof(Node, focusable);
+ pd->border_elements_changed = EINA_TRUE;
return obj;
}
@@ -1105,9 +1122,18 @@ _elements_iterator_new(const Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd)
EOLIAN static Eina_Iterator*
_efl_ui_focus_manager_calc_efl_ui_focus_manager_border_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd)
{
+ pd->border_elements_changed = EINA_FALSE;
return (Eina_Iterator*) _elements_iterator_new(obj, pd);
}
+
+EOLIAN static Eina_Bool
+_efl_ui_focus_manager_calc_efl_ui_focus_manager_border_elements_changed_get(const Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Calc_Data *pd)
+{
+ return pd->border_elements_changed;
+}
+
+
EOLIAN static Eina_Iterator*
_efl_ui_focus_manager_calc_efl_ui_focus_manager_viewport_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Eina_Rect viewport)
{
@@ -1789,18 +1815,6 @@ _efl_ui_focus_manager_calc_efl_object_finalize(Eo *obj, Efl_Ui_Focus_Manager_Cal
return result;
}
-static Eina_List*
-_convert(Border b)
-{
- Eina_List *n, *par = NULL;
- Node *node;
-
- EINA_LIST_FOREACH(b.one_direction, n, node)
- par = eina_list_append(par, node->focusable);
-
- return par;
-}
-
EOLIAN static Efl_Ui_Focus_Object*
_efl_ui_focus_manager_calc_efl_ui_focus_manager_manager_focus_get(const Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Calc_Data *pd)
{
@@ -1815,6 +1829,63 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_manager_focus_get(const Eo *obj
return upper->focusable;
}
+typedef struct _Eina_Iterator_Focusable Eina_Iterator_Focusable;
+struct _Eina_Iterator_Focusable
+{
+ Eina_Iterator iterator;
+
+ Eina_Iterator *redirect;
+};
+
+static Eina_Bool
+_node_focusable_iterator_next(Eina_Iterator_Focusable *it, void **data)
+{
+ Node *node = NULL;
+ Eina_Bool r;
+
+ if (!it->redirect) return EINA_FALSE;
+
+ r = eina_iterator_next(it->redirect, (void **) &node);
+ if (r && data) *data = node->focusable;
+
+ return r;
+}
+
+static Eina_List *
+_node_focusable_iterator_get_container(Eina_Iterator_Focusable *it)
+{
+ if (!it->redirect) return NULL;
+
+ return eina_iterator_container_get(it->redirect);
+}
+
+static void
+_node_focusable_iterator_free(Eina_Iterator_Focusable *it)
+{
+ eina_iterator_free(it->redirect);
+ EINA_MAGIC_SET(&it->iterator, 0);
+ free(it);
+}
+
+static Eina_Iterator *
+_node_focusable_iterator_new(Eina_List *nodes)
+{
+ Eina_Iterator_Focusable *it;
+
+ it = calloc(1, sizeof (Eina_Iterator_Focusable));
+ if (!it) return NULL;
+
+ EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
+ it->redirect = eina_list_iterator_new(nodes);
+
+ it->iterator.version = EINA_ITERATOR_VERSION;
+ it->iterator.next = FUNC_ITERATOR_NEXT(_node_focusable_iterator_next);
+ it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_node_focusable_iterator_get_container);
+ it->iterator.free = FUNC_ITERATOR_FREE(_node_focusable_iterator_free);
+
+ return &it->iterator;
+}
+
EOLIAN static Efl_Ui_Focus_Relations*
_efl_ui_focus_manager_calc_efl_ui_focus_manager_fetch(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Ui_Focus_Object *child)
{
@@ -1834,12 +1905,14 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_fetch(Eo *obj, Efl_Ui_Focus_Mana
efl_ui_focus_object_setup_order(n->tree.parent->focusable);
efl_ui_focus_object_setup_order(n->focusable);
-#define DIR_CLONE(dir) _convert(DIRECTION_ACCESS(n,dir));
+ // FIXME: the iterator must actually return the (Node*)->focusable object in it
+ // Just redirect to default eina list iterator but offset the returned pointer?
+#define DIR_ITERATOR(dir) _node_focusable_iterator_new(DIRECTION_ACCESS(n,dir).one_direction);
- res->right = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_RIGHT);
- res->left = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_LEFT);
- res->top = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_UP);
- res->down = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_DOWN);
+ res->right = DIR_ITERATOR(EFL_UI_FOCUS_DIRECTION_RIGHT);
+ res->left = DIR_ITERATOR(EFL_UI_FOCUS_DIRECTION_LEFT);
+ res->top = DIR_ITERATOR(EFL_UI_FOCUS_DIRECTION_UP);
+ res->down = DIR_ITERATOR(EFL_UI_FOCUS_DIRECTION_DOWN);
res->next = (tmp = _next(n)) ? tmp->focusable : NULL;
res->prev = (tmp = _prev(n)) ? tmp->focusable : NULL;
res->position_in_history = eina_list_data_idx(pd->focus_stack, n);
@@ -1850,7 +1923,7 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_fetch(Eo *obj, Efl_Ui_Focus_Mana
if (T(n).parent)
res->parent = T(n).parent->focusable;
res->redirect = n->redirect_manager;
-#undef DIR_CLONE
+#undef DIR_ITERATOR
return res;
}
@@ -1951,7 +2024,7 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_pop_history_stack(Eo *obj EINA_U
}
else
{
- last = _request_subchild_except(pd->root, node_get(obj, pd, last_focusable));
+ last = _request_subchild_except(pd->root, last_focusable);
if (last)
efl_ui_focus_manager_focus_set(obj, last->focusable);
}
@@ -2014,7 +2087,27 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_dirty_logic_unfreeze(Eo *obj, Ef
}
}
+static void
+_efl_ui_focus_manager_calc_update_children_ownership_fallback(Efl_Ui_Focus_Object *parent, Eina_List *children)
+{
+ (void)parent;
+ eina_list_free(children);
+}
+
+EOAPI EFL_FUNC_BODYV_FALLBACK(efl_ui_focus_manager_calc_update_children, Eina_Bool, 0, _efl_ui_focus_manager_calc_update_children_ownership_fallback(parent, children);, EFL_FUNC_CALL(parent, children), Efl_Ui_Focus_Object *parent, Eina_List *children);
+
+static void
+_efl_ui_focus_manager_calc_update_order_ownership_fallback(Efl_Ui_Focus_Object *parent, Eina_List *children)
+{
+ (void)parent;
+ eina_list_free(children);
+}
+
+EOAPI EFL_VOID_FUNC_BODYV_FALLBACK(efl_ui_focus_manager_calc_update_order, _efl_ui_focus_manager_calc_update_order_ownership_fallback(parent, children);, EFL_FUNC_CALL(parent, children), Efl_Ui_Focus_Object *parent, Eina_List *children);
+
#define EFL_UI_FOCUS_MANAGER_CALC_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_ui_focus_manager_calc_efl_object_dbg_info_get)
+ EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_ui_focus_manager_calc_efl_object_dbg_info_get), \
+ EFL_OBJECT_OP_FUNC(efl_ui_focus_manager_calc_update_children, _efl_ui_focus_manager_calc_update_children), \
+ EFL_OBJECT_OP_FUNC(efl_ui_focus_manager_calc_update_order, _efl_ui_focus_manager_calc_update_order)
#include "efl_ui_focus_manager_calc.eo.c"
diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.eo b/src/lib/elementary/efl_ui_focus_manager_calc.eo
index cd9ad90fa5..d7f9124fe8 100644
--- a/src/lib/elementary/efl_ui_focus_manager_calc.eo
+++ b/src/lib/elementary/efl_ui_focus_manager_calc.eo
@@ -55,25 +55,6 @@ class @beta Efl.Ui.Focus.Manager_Calc extends Efl.Object implements Efl.Ui.Focus
}
return : bool; [[$true if successful, $false otherwise.]]
}
- update_children {
- [[Sets the list of children to a different order.]]
- params {
- parent : Efl.Ui.Focus.Object; [[The parent to update.]]
- children : list<Efl.Ui.Focus.Object> @move; [[The list of children with the new order.]]
- }
- return : bool; [[$true if successful, $false otherwise.]]
- }
- update_order {
- [[Sets the list of children to a different order.
-
- Objects in the list which are not children of $parent are ignored.
- Compare to @.update_children.
- ]]
- params {
- parent : Efl.Ui.Focus.Object; [[The parent to update.]]
- children : list<Efl.Ui.Focus.Object> @move; [[The list of objects with the new order.]]
- }
- }
unregister {
[[Unregister the given item from the focus graph.]]
params {
@@ -89,6 +70,7 @@ class @beta Efl.Ui.Focus.Manager_Calc extends Efl.Object implements Efl.Ui.Focus
Efl.Ui.Focus.Manager.manager_focus {get; set;}
Efl.Ui.Focus.Manager.redirect {set; get;}
Efl.Ui.Focus.Manager.border_elements {get;}
+ Efl.Ui.Focus.Manager.border_elements_changed {get;}
Efl.Ui.Focus.Manager.viewport_elements {get;}
Efl.Ui.Focus.Manager.root {set; get;}
Efl.Ui.Focus.Manager.request_subchild;
diff --git a/src/lib/elementary/efl_ui_focus_manager_sub.c b/src/lib/elementary/efl_ui_focus_manager_sub.c
index 7a2de74003..2d4a872d74 100644
--- a/src/lib/elementary/efl_ui_focus_manager_sub.c
+++ b/src/lib/elementary/efl_ui_focus_manager_sub.c
@@ -9,7 +9,6 @@
#define MY_DATA(o, p) Efl_Ui_Focus_Manager_Sub_Data *p = efl_data_scope_get(o, MY_CLASS);
typedef struct {
Efl_Ui_Focus_Manager *manager;//the manager where current_border is currently registered
- Eina_Bool self_dirty;
Eina_List *current_border; //the current set of widgets which is registered as borders
} Efl_Ui_Focus_Manager_Sub_Data;
@@ -94,7 +93,6 @@ _border_flush(Eo *obj, Efl_Ui_Focus_Manager_Sub_Data *pd)
eina_list_free(pd->current_border);
pd->current_border = selection;
- pd->self_dirty = EINA_FALSE;
}
static void
@@ -116,7 +114,7 @@ _parent_manager_pre_flush(void *data, const Efl_Event *ev EINA_UNUSED)
{
MY_DATA(data, pd);
- if (!pd->self_dirty) return; //we are not interested
+ if (!efl_ui_focus_manager_border_elements_changed_get(data)) return;
_border_flush(data, pd);
}
@@ -152,14 +150,6 @@ EFL_CALLBACKS_ARRAY_DEFINE(parent_manager,
);
static void
-_self_manager_dirty(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
-{
- MY_DATA(data, pd);
-
- pd->self_dirty = EINA_TRUE;
-}
-
-static void
_logical_manager_change(void *data EINA_UNUSED, const Efl_Event *ev)
{
MY_DATA(data, pd);
@@ -217,7 +207,6 @@ _manager_change(void *data, const Efl_Event *ev EINA_UNUSED)
}
EFL_CALLBACKS_ARRAY_DEFINE(self_manager,
- {EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY, _self_manager_dirty},
{EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_PARENT_CHANGED, _logical_manager_change},
{EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_MANAGER_CHANGED, _manager_change}
);
@@ -228,8 +217,6 @@ _efl_ui_focus_manager_sub_efl_object_constructor(Eo *obj, Efl_Ui_Focus_Manager_S
obj = efl_constructor(efl_super(obj, MY_CLASS));
efl_event_callback_array_add(obj, self_manager(), obj);
- pd->self_dirty = EINA_TRUE;
-
return obj;
}
diff --git a/src/lib/elementary/efl_ui_focus_parent_provider_gen_eo.h b/src/lib/elementary/efl_ui_focus_parent_provider_gen_eo.h
index 1200debba4..fdc5a98ab7 100644
--- a/src/lib/elementary/efl_ui_focus_parent_provider_gen_eo.h
+++ b/src/lib/elementary/efl_ui_focus_parent_provider_gen_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Focus_Parent_Provider_Gen;
*/
#define EFL_UI_FOCUS_PARENT_PROVIDER_GEN_CLASS efl_ui_focus_parent_provider_gen_class_get()
-EWAPI const Efl_Class *efl_ui_focus_parent_provider_gen_class_get(void);
+EWAPI const Efl_Class *efl_ui_focus_parent_provider_gen_class_get(void) EINA_CONST;
/**
* @brief Content item map property
diff --git a/src/lib/elementary/efl_ui_format.c b/src/lib/elementary/efl_ui_format.c
index c4dc85353d..c24111466c 100644
--- a/src/lib/elementary/efl_ui_format.c
+++ b/src/lib/elementary/efl_ui_format.c
@@ -336,15 +336,19 @@ _efl_ui_format_decimal_places_get(Eo *obj EINA_UNUSED, Efl_Ui_Format_Data *pd)
EOLIAN static void
_efl_ui_format_efl_object_destructor(Eo *obj, Efl_Ui_Format_Data *pd EINA_UNUSED)
{
- /* Legacy widgets keep their own formatting data and have their own destructors */
- if (!elm_widget_is_legacy(obj))
- {
- /* Otherwise, free formatting data */
- efl_ui_format_func_set(obj, NULL, NULL, NULL);
- efl_ui_format_values_set(obj, NULL);
- efl_ui_format_string_set(obj, NULL, 0);
- }
- efl_destructor(efl_super(obj, EFL_UI_FORMAT_MIXIN));
+ if (pd->format_func_free)
+ {
+ efl_ui_format_func_set(obj, NULL, NULL, NULL);
+ }
+ if (pd->format_values)
+ {
+ efl_ui_format_values_set(obj, NULL);
+ }
+ if (pd->format_string_type)
+ {
+ efl_ui_format_string_set(obj, NULL, 0);
+ }
+ efl_destructor(efl_super(obj, EFL_UI_FORMAT_MIXIN));
}
#include "efl_ui_format.eo.c"
diff --git a/src/lib/elementary/efl_ui_format.eo b/src/lib/elementary/efl_ui_format.eo
index 3e2bd287bb..e711537492 100644
--- a/src/lib/elementary/efl_ui_format.eo
+++ b/src/lib/elementary/efl_ui_format.eo
@@ -1,5 +1,3 @@
-import eina_types;
-
function Efl.Ui.Format_Func
{
[[A function taking an @Eina.Value and producing its textual representation.
diff --git a/src/lib/elementary/efl_ui_frame_legacy.h b/src/lib/elementary/efl_ui_frame_legacy.h
index 8d225885ae..c6328ce935 100644
--- a/src/lib/elementary/efl_ui_frame_legacy.h
+++ b/src/lib/elementary/efl_ui_frame_legacy.h
@@ -6,7 +6,7 @@ typedef Eo Elm_Frame;
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Frame
+ * @ingroup Elm_Frame_Group
*/
EAPI Evas_Object *elm_frame_add(Evas_Object *parent);
diff --git a/src/lib/elementary/efl_ui_frame_legacy_eo.h b/src/lib/elementary/efl_ui_frame_legacy_eo.h
index ea4b164ba8..8f741e8911 100644
--- a/src/lib/elementary/efl_ui_frame_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_frame_legacy_eo.h
@@ -25,7 +25,7 @@ typedef Eo Efl_Ui_Frame_Legacy;
*/
#define EFL_UI_FRAME_LEGACY_CLASS efl_ui_frame_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_frame_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_frame_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c
index 213d55edd2..4156728027 100644
--- a/src/lib/elementary/efl_ui_image.c
+++ b/src/lib/elementary/efl_ui_image.c
@@ -103,7 +103,11 @@ _on_image_preloaded(void *data,
if (sd->show) evas_object_show(obj);
_prev_img_del(sd);
err = evas_object_image_load_error_get(obj);
- if (!err) evas_object_smart_callback_call(sd->self, SIG_LOAD_READY, NULL);
+ if (!err)
+ {
+ evas_object_smart_callback_call(sd->self, SIG_LOAD_READY, NULL);
+ if (sd->autoplay) efl_player_playing_set(sd->self, EINA_TRUE);
+ }
else evas_object_smart_callback_call(sd->self, SIG_LOAD_ERROR, NULL);
}
@@ -133,7 +137,16 @@ _efl_ui_image_animate_cb(void *data)
sd->cur_frame++;
if ((sd->frame_count > 0) && (sd->cur_frame > sd->frame_count))
- sd->cur_frame = sd->cur_frame % sd->frame_count;
+ {
+ if (sd->playback_loop)
+ sd->cur_frame = sd->cur_frame % sd->frame_count;
+ else
+ {
+ sd->anim_timer = NULL;
+ sd->cur_frame = 0;
+ return EINA_FALSE;
+ }
+ }
evas_object_image_animated_frame_set(sd->img, sd->cur_frame);
@@ -168,6 +181,7 @@ _image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Object *img)
{
Evas_Coord x = 0, y = 0, w = 1, h = 1;
int ox, oy, ow, oh;
+ Eina_Bool img_no_resize = EINA_FALSE;
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
if (efl_isa(img, EFL_CANVAS_LAYOUT_CLASS))
@@ -189,9 +203,7 @@ _image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Object *img)
//Exception Case
if ((iw == 0) || (ih == 0) || (ow == 0) || (oh == 0))
{
- evas_object_resize(img, 0, 0);
- evas_object_resize(sd->hit_rect, 0, 0);
- return;
+ img_no_resize = EINA_TRUE;
}
iw = ((double)iw) * sd->scale;
@@ -230,12 +242,9 @@ _image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Object *img)
w = ((double)iw * h) / (double)ih;
break;
case EFL_GFX_IMAGE_SCALE_METHOD_EXPAND:
- if (iw < ih)
- {
- w = ow;
- h = ((double)ih * w) / (double)iw;
- }
- else
+ w = ow;
+ h = ((double)ih * w) / (double)iw;
+ if (h < oh)
{
h = oh;
w = ((double)iw * h) / (double)ih;
@@ -281,19 +290,22 @@ _image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Object *img)
evas_object_image_fill_set(img, offset_x, offset_y, w, h);
- if (offset_x < 0)
+ if (ow - w < 0)
{
x = ox;
w = ow;
}
- if (offset_y < 0)
+ if (oh - h < 0)
{
y = oy;
h = oh;
}
}
done:
- evas_object_geometry_set(img, x, y, w, h);
+ if (img_no_resize)
+ evas_object_geometry_set(img, 0, 0, 0, 0);
+ else
+ evas_object_geometry_set(img, x, y, w, h);
evas_object_geometry_set(sd->hit_rect, x, y, w, h);
}
@@ -436,7 +448,11 @@ _efl_ui_image_async_open_done(void *data, Ecore_Thread *thread)
ok = !_efl_ui_image_smart_internal_file_set(sd->self, sd);
}
}
- if (ok) evas_object_smart_callback_call(sd->self, SIG_LOAD_OPEN, NULL);
+ if (ok)
+ {
+ evas_object_smart_callback_call(sd->self, SIG_LOAD_OPEN, NULL);
+ if (sd->autoplay) efl_player_playing_set(sd->self, EINA_TRUE);
+ }
else evas_object_smart_callback_call(sd->self, SIG_LOAD_ERROR, NULL);
}
}
@@ -528,6 +544,7 @@ _efl_ui_image_edje_file_set(Evas_Object *obj)
}
else
return _efl_ui_image_async_file_set(obj, sd);
+ if (sd->autoplay) efl_player_playing_set(sd->self, EINA_TRUE);
/* FIXME: do i want to update icon on file change ? */
efl_canvas_group_change(obj);
@@ -584,6 +601,7 @@ _efl_ui_image_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Data *priv)
{
evas_object_event_callback_add
(priv->hit_rect, EVAS_CALLBACK_MOUSE_UP, _on_mouse_up, obj);
+ priv->playback_loop = EINA_TRUE;
}
else
{
@@ -919,7 +937,7 @@ _efl_ui_image_efl_file_load(Eo *obj, Efl_Ui_Image_Data *sd)
_async_cancel(sd);
/* stop preloading as it may hit to-be-freed memory */
- if (sd->img && sd->preload_status == EFL_UI_IMAGE_PRELOADING)
+ if ((sd->img) && (sd->preload_status == EFL_UI_IMAGE_PRELOADING) && (!sd->edje))
evas_object_image_preload(sd->img, EINA_TRUE);
if (sd->remote.copier) _efl_ui_image_remote_copier_cancel(obj, sd);
@@ -980,14 +998,6 @@ _efl_ui_image_efl_file_unload(Eo *obj, Efl_Ui_Image_Data *sd)
_efl_ui_image_file_set_do(obj);
efl_file_unload(sd->img);
efl_file_unload(efl_super(obj, MY_CLASS));
- if (sd->preload_status == EFL_UI_IMAGE_PRELOAD_DISABLED)
- _prev_img_del(sd);
- else
- {
- evas_object_hide(sd->img);
- sd->preload_status = EFL_UI_IMAGE_PRELOADING;
- evas_object_image_preload(sd->img, EINA_FALSE);
- }
efl_canvas_group_change(obj);
}
@@ -1036,7 +1046,10 @@ _efl_ui_image_smart_internal_file_set(Eo *obj, Efl_Ui_Image_Data *sd)
}
if (sd->preload_status == EFL_UI_IMAGE_PRELOAD_DISABLED)
- _prev_img_del(sd);
+ {
+ _prev_img_del(sd);
+ if (sd->autoplay) efl_player_playing_set(sd->self, EINA_TRUE);
+ }
else
{
evas_object_hide(sd->img);
@@ -1741,6 +1754,7 @@ _efl_ui_image_animated_set_internal(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool an
{
edje_object_animation_set(sd->img, anim);
sd->anim = anim;
+ efl_player_playback_loop_set(sd->img, sd->playback_loop);
return EINA_TRUE;
}
sd->img = elm_image_object_get(obj);
@@ -1809,6 +1823,42 @@ _efl_ui_image_efl_player_playing_get(const Eo *obj, Efl_Ui_Image_Data *sd)
}
EOLIAN static void
+_efl_ui_image_efl_player_playback_loop_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, Eina_Bool playback_loop)
+{
+ playback_loop = !!playback_loop;
+ sd->playback_loop = playback_loop;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_image_efl_player_playback_loop_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+{
+ return sd->playback_loop;
+}
+
+EOLIAN static void
+_efl_ui_image_efl_player_autoplay_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool autoplay)
+{
+ autoplay = !!autoplay;
+ if (sd->autoplay == autoplay) return;
+ sd->autoplay = autoplay;
+ if (sd->img && (!sd->edje))
+ {
+ /* filter cases where we aren't going to immediately start playing */
+ if (!autoplay) return;
+ if ((sd->preload_status != EFL_UI_IMAGE_PRELOADED) &&
+ (sd->preload_status != EFL_UI_IMAGE_PRELOAD_DISABLED))
+ return;
+ }
+ efl_player_playing_set(obj, EINA_TRUE);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_image_efl_player_autoplay_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+{
+ return sd->autoplay;
+}
+
+EOLIAN static void
_efl_ui_image_efl_player_playback_speed_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, double factor)
{
EINA_SAFETY_ON_TRUE_RETURN(factor < 0.0);
@@ -1859,11 +1909,23 @@ _efl_ui_image_efl_player_playback_progress_get(const Eo *obj EINA_UNUSED, Efl_Ui
{
if (sd->edje)
efl_player_playback_progress_get(sd->img);
- else if ((sd->frame_count > 0) && (sd->frame_duration > 0.0))
- return (sd->cur_frame * sd->frame_duration) / sd->frame_count;
+ else if (sd->frame_count > 1)
+ return ((double)sd->cur_frame - 1.0) / ((double)sd->frame_count - 1.0);
return 0.0;
}
+EOLIAN static void
+_efl_ui_image_efl_player_playback_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, double progress)
+{
+ EINA_SAFETY_ON_TRUE_RETURN(progress > 1 || progress < 0);
+ if (sd->edje)
+ efl_player_playback_progress_set(sd->img, progress);
+ else if (sd->frame_count > 0)
+ sd->cur_frame = (lround(progress * (sd->frame_count - 1)) + 1);
+ else
+ sd->cur_frame = 1;
+}
+
static Eina_Bool
_efl_ui_image_animated_paused_set_internal(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool paused)
{
@@ -2139,6 +2201,11 @@ _internal_efl_ui_image_icon_set(Evas_Object *obj, const char *name, Eina_Bool *f
{
ret = _icon_standard_set(obj, name);
if (ret && fdo) *fdo = EINA_FALSE;
+ if (!ret)
+ {
+ ret = _icon_freedesktop_set(obj, name, _icon_size_min_get(obj));
+ if (ret && fdo) *fdo = EINA_TRUE;
+ }
}
else
{
@@ -2375,6 +2442,20 @@ elm_image_file_set(Evas_Object *obj, const char *file, const char *group)
Eina_Bool ret = EINA_FALSE;
EFL_UI_IMAGE_CHECK(obj) EINA_FALSE;
+
+ /* check if previous path is same with new one.
+ and return true if they are same */
+ const char *cur_file_path = efl_file_get(obj);
+ if ((cur_file_path && file) && !strcmp(cur_file_path, file))
+ {
+ const char *cur_group = efl_file_key_get(obj);
+ if (!(cur_group && group && strcmp(cur_group, group)))
+ {
+ if (efl_file_loaded_get(obj)) return EINA_TRUE;
+ if (_efl_ui_image_is_remote(file)) return EINA_TRUE;
+ }
+ }
+
ret = efl_file_simple_load(obj, file, group);
efl_canvas_group_change(obj);
return ret;
@@ -2383,7 +2464,8 @@ elm_image_file_set(Evas_Object *obj, const char *file, const char *group)
EAPI void
elm_image_file_get(const Eo *obj, const char **file, const char **group)
{
- efl_file_simple_get((Eo *) obj, file, group);
+ EFL_UI_IMAGE_DATA_GET(obj, sd);
+ efl_file_simple_get(sd->img, file, group);
}
EAPI Eina_Bool
@@ -2403,13 +2485,19 @@ elm_image_memfile_set(Evas_Object *obj, const void *img, size_t size, const char
EFL_UI_IMAGE_CHECK(obj) EINA_FALSE;
EFL_UI_IMAGE_DATA_GET(obj, sd);
- _efl_ui_image_file_set_do(obj);
+ if (efl_file_loaded_get(obj))
+ efl_file_unload(obj);
+ else
+ _efl_ui_image_file_set_do(obj);
evas_object_image_memfile_set
(sd->img, (void *)img, size, (char *)format, (char *)key);
if (sd->preload_status == EFL_UI_IMAGE_PRELOAD_DISABLED)
- _prev_img_del(sd);
+ {
+ _prev_img_del(sd);
+ if (sd->autoplay) efl_player_playing_set(sd->self, EINA_TRUE);
+ }
else
{
sd->preload_status = EFL_UI_IMAGE_PRELOADING;
@@ -2472,7 +2560,13 @@ elm_image_preload_disabled_set(Evas_Object *obj, Eina_Bool disable)
EFL_UI_IMAGE_CHECK(obj);
EFL_UI_IMAGE_DATA_GET(obj, sd);
- if (sd->edje || !sd->img) return;
+ if (sd->edje) return;
+ if (!sd->img)
+ {
+ if (disable) sd->preload_status = EFL_UI_IMAGE_PRELOAD_DISABLED;
+ else sd->preload_status = EFL_UI_IMAGE_PRELOAD_ENABLED;
+ return;
+ }
if (disable)
{
@@ -2511,6 +2605,9 @@ elm_image_orient_set(Evas_Object *obj, Elm_Image_Orient elm_orient)
EINA_SAFETY_ON_FALSE_RETURN(elm_orient >= 0 && elm_orient < 8);
sd->image_orient = elm_orient;
efl_gfx_image_orientation_set(obj, efl_orient[elm_orient]);
+
+ // to keep behavior compatibility, update inlined image orientation
+ if (sd->img) efl_gfx_image_orientation_set(sd->img, efl_orient[elm_orient]);
}
EAPI Elm_Image_Orient
diff --git a/src/lib/elementary/efl_ui_image.eo b/src/lib/elementary/efl_ui_image.eo
index 207a264e70..9ebb14982c 100644
--- a/src/lib/elementary/efl_ui_image.eo
+++ b/src/lib/elementary/efl_ui_image.eo
@@ -52,8 +52,6 @@ class Efl.Ui.Image extends Efl.Ui.Widget implements Efl.Input.Clickable, Efl.Ui.
@Efl.File.load is called.
Note: This function does not accept relative icon paths.
-
- See also @.icon.get.
]]
set {
return: bool; [[$true on success, $false on error]]
@@ -103,8 +101,10 @@ class Efl.Ui.Image extends Efl.Ui.Widget implements Efl.Input.Clickable, Efl.Ui.
Efl.Player.playing { get; set; }
Efl.Player.paused { get; set; }
Efl.Player.playback_position { get; set; }
- Efl.Player.playback_progress { get; }
+ Efl.Player.playback_progress { get; set; }
Efl.Player.playback_speed { get; set; }
+ Efl.Player.autoplay { set; get; }
+ Efl.Player.playback_loop { set; get; }
Efl.Layout.Signal.signal_emit;
Efl.Layout.Signal.message_send;
Efl.Layout.Signal.signal_callback_add;
diff --git a/src/lib/elementary/efl_ui_image_legacy_eo.h b/src/lib/elementary/efl_ui_image_legacy_eo.h
index 204a09db05..2431a914b7 100644
--- a/src/lib/elementary/efl_ui_image_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_image_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Image_Legacy;
*/
#define EFL_UI_IMAGE_LEGACY_CLASS efl_ui_image_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_image_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_image_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_image_zoomable.c b/src/lib/elementary/efl_ui_image_zoomable.c
index 19d2e0155b..fb05a56115 100644
--- a/src/lib/elementary/efl_ui_image_zoomable.c
+++ b/src/lib/elementary/efl_ui_image_zoomable.c
@@ -728,6 +728,7 @@ _main_img_preloaded_cb(void *data,
ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
evas_object_show(sd->img);
sd->main_load_pending = 0;
+ if (sd->autoplay) efl_player_playing_set(obj, EINA_TRUE);
g = _grid_create(obj);
if (g)
{
@@ -1834,7 +1835,10 @@ _efl_ui_image_zoomable_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Zoomable
efl_ui_scroll_manager_pan_set(priv->smanager, priv->pan_obj);
if (elm_widget_is_legacy(obj))
- edje_object_part_swallow(edje, "elm.swallow.content", priv->pan_obj);
+ {
+ edje_object_part_swallow(edje, "elm.swallow.content", priv->pan_obj);
+ priv->playback_loop = EINA_TRUE;
+ }
else
edje_object_part_swallow(edje, "efl.content", priv->pan_obj);
@@ -1972,32 +1976,6 @@ _efl_ui_image_zoomable_efl_layout_group_group_size_max_get(const Eo *obj EINA_UN
return EINA_SIZE2D(0, 0);
}
-EOLIAN static Eina_Bool
-_efl_ui_image_zoomable_efl_layout_signal_signal_callback_add(Eo *obj, Efl_Ui_Image_Zoomable_Data *pd EINA_UNUSED,
- const char *emission, const char *source,
- void *func_data, EflLayoutSignalCb func, Eina_Free_Cb func_free_cb)
-{
- Eina_Bool ok;
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
-
- ok = efl_layout_signal_callback_add(wd->resize_obj, emission, source, func_data, func, func_free_cb);
-
- return ok;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_image_zoomable_efl_layout_signal_signal_callback_del(Eo *obj, Efl_Ui_Image_Zoomable_Data *pd EINA_UNUSED,
- const char *emission, const char *source,
- void *func_data, EflLayoutSignalCb func, Eina_Free_Cb func_free_cb)
-{
- Eina_Bool ok;
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
-
- ok = efl_layout_signal_callback_del(wd->resize_obj, emission, source, func_data, func, func_free_cb);
-
- return ok;
-}
-
static Eina_Error
_img_proxy_set(Evas_Object *obj, Efl_Ui_Image_Zoomable_Data *sd,
Eina_Bool resize)
@@ -2102,6 +2080,38 @@ _internal_file_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Evas_Load_Error *ret
evas_object_image_file_set(sd->img, NULL, NULL);
evas_object_image_load_scale_down_set(sd->img, 0);
_photocam_image_file_set(sd->img, sd);
+
+ //Check whether image size is bigger than maxium texture
+ evas_object_image_size_get(sd->img, &w, &h);
+ int maxw = 0, maxh = 0;
+ evas_image_max_size_get(evas_object_evas_get(sd->img), &maxw, &maxh);
+
+ /* Image is too large than system support,
+ This case it won't be available,
+ Alternatively, reduce size by half and make it visible at least.
+ Btw, is this the best solution for this?... */
+ if (maxw > 0 && maxh > 0)
+ {
+ int w2 = w;
+ int h2 = h;
+
+ if (w2 > maxw || h2 > maxh)
+ {
+ //Scale down by half
+ int scale_down = 1;
+
+ while (w2 > maxw || h2 > maxh)
+ {
+ w2 /= 2;
+ h2 /= 2;
+ scale_down *= 2;
+ }
+
+ //This might not work at some format...
+ evas_object_image_load_scale_down_set(sd->img, scale_down);
+ }
+ }
+
err = evas_object_image_load_error_get(sd->img);
if (err != EVAS_LOAD_ERROR_NONE)
{
@@ -2109,8 +2119,6 @@ _internal_file_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Evas_Load_Error *ret
if (ret) *ret = err;
return err;
}
- evas_object_image_size_get(sd->img, &w, &h);
-
sd->do_region = evas_object_image_region_support_get(sd->img);
sd->size.imw = w;
sd->size.imh = h;
@@ -2473,7 +2481,7 @@ _efl_ui_image_zoomable_efl_ui_zoom_zoom_level_set(Eo *obj, Efl_Ui_Image_Zoomable
z = (double)sd->size.imw / pw;
else
z = (double)sd->size.imh / ph;
- if (z != sd->zoom)
+ if (!EINA_DBL_EQ(z, sd->zoom))
zoom_changed = 1;
sd->zoom = z;
sd->size.nw = pw;
@@ -2632,7 +2640,7 @@ _efl_ui_image_zoomable_efl_ui_zoom_zoom_mode_set(Eo *obj, Efl_Ui_Image_Zoomable_
{
double tz;
if (sd->mode == (Elm_Photocam_Zoom_Mode)mode) return;
- sd->mode = mode;
+ sd->mode = (Elm_Photocam_Zoom_Mode)mode;
tz = sd->zoom;
sd->zoom = 0.0;
@@ -2642,7 +2650,7 @@ _efl_ui_image_zoomable_efl_ui_zoom_zoom_mode_set(Eo *obj, Efl_Ui_Image_Zoomable_
EOLIAN static Efl_Ui_Zoom_Mode
_efl_ui_image_zoomable_efl_ui_zoom_zoom_mode_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd)
{
- return sd->mode;
+ return (Efl_Ui_Zoom_Mode)sd->mode;
}
EOLIAN static Eina_Size2D
@@ -2927,6 +2935,11 @@ _internal_efl_ui_image_zoomable_icon_set(Evas_Object *obj, const char *name, Ein
{
ret = _icon_standard_set(obj, name, resize);
if (ret && fdo) *fdo = EINA_FALSE;
+ if (!ret)
+ {
+ ret = _icon_freedesktop_set(obj, name, _icon_size_min_get(obj));
+ if (ret && fdo) *fdo = EINA_TRUE;
+ }
}
else
{
@@ -3024,11 +3037,24 @@ _efl_ui_image_zoomable_animate_cb(void *data)
EFL_UI_IMAGE_ZOOMABLE_DATA_GET(data, sd);
_grid_clear_all(data);
- if (!sd->anim) return ECORE_CALLBACK_CANCEL;
+ if (!sd->anim)
+ {
+ sd->anim_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
sd->cur_frame++;
if ((sd->frame_count > 0) && (sd->cur_frame > sd->frame_count))
- sd->cur_frame = sd->cur_frame % sd->frame_count;
+ {
+ if (sd->playback_loop)
+ sd->cur_frame = sd->cur_frame % sd->frame_count;
+ else
+ {
+ sd->anim_timer = NULL;
+ sd->cur_frame = 0;
+ return EINA_FALSE;
+ }
+ }
evas_object_image_animated_frame_set(sd->img, sd->cur_frame);
sd->frame_duration = evas_object_image_animated_frame_duration_get
@@ -3040,7 +3066,7 @@ _efl_ui_image_zoomable_animate_cb(void *data)
return ECORE_CALLBACK_RENEW;
}
-static Eina_Bool
+static Eina_Bool
_efl_ui_image_zoomable_animated_set_internal(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd, Eina_Bool anim)
{
anim = !!anim;
@@ -3050,6 +3076,7 @@ _efl_ui_image_zoomable_animated_set_internal(Eo *obj EINA_UNUSED, Efl_Ui_Image_Z
{
sd->anim = anim;
edje_object_animation_set(sd->edje, anim);
+ efl_player_playback_loop_set(sd->edje, sd->playback_loop);
return EINA_TRUE;
}
@@ -3119,6 +3146,41 @@ _efl_ui_image_zoomable_efl_player_playing_get(const Eo *obj, Efl_Ui_Image_Zoomab
return _efl_ui_image_zoomable_animated_get_internal(obj, sd);
}
+EOLIAN static void
+_efl_ui_image_zoomable_efl_player_playback_loop_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd, Eina_Bool playback_loop)
+{
+ playback_loop = !!playback_loop;
+ sd->playback_loop = playback_loop;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_image_zoomable_efl_player_playback_loop_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd)
+{
+ return sd->playback_loop;
+}
+
+EOLIAN static void
+_efl_ui_image_zoomable_efl_player_autoplay_set(Eo *obj, Efl_Ui_Image_Zoomable_Data *sd, Eina_Bool autoplay)
+{
+ autoplay = !!autoplay;
+ if (sd->autoplay == autoplay) return;
+ sd->autoplay = autoplay;
+ if (!sd->edje)
+ {
+ /* filter cases where we aren't going to immediately start playing */
+ if (!autoplay) return;
+ if (sd->preload_num)
+ return;
+ }
+ efl_player_playing_set(obj, EINA_TRUE);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_image_zoomable_efl_player_autoplay_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd)
+{
+ return sd->autoplay;
+}
+
EOLIAN static Eina_Bool
_efl_ui_image_zoomable_efl_player_paused_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd)
{
@@ -3178,12 +3240,26 @@ _efl_ui_image_zoomable_efl_player_playback_progress_get(const Eo *obj EINA_UNUSE
{
if (sd->edje)
efl_player_playback_progress_get(sd->edje);
- else if ((sd->frame_count > 0) && (sd->frame_duration > 0.0))
- return (sd->cur_frame * sd->frame_duration) / sd->frame_count;
+ else if (sd->frame_count > 1)
+ return ((double)sd->cur_frame - 1.0) / ((double)sd->frame_count - 1.0);
return 0.0;
}
EOLIAN static void
+_efl_ui_image_zoomable_efl_player_playback_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd, double progress)
+{
+ EINA_SAFETY_ON_TRUE_RETURN(progress > 1 || progress < 0);
+ if (sd->edje)
+ {
+ efl_player_playback_progress_set(sd->img, progress);
+ }
+ else if (sd->frame_count > 0)
+ sd->cur_frame = (lround(progress * (sd->frame_count - 1)) + 1);
+ else
+ sd->cur_frame = 1;
+}
+
+EOLIAN static void
_efl_ui_image_zoomable_class_constructor(Efl_Class *klass EINA_UNUSED)
{
PHOTO_FILE_LOAD_ERROR_GENERIC = eina_error_msg_static_register("Generic load error");
@@ -3349,13 +3425,13 @@ elm_photocam_zoom_get(const Evas_Object *obj)
EAPI void
elm_photocam_zoom_mode_set(Evas_Object *obj, Elm_Photocam_Zoom_Mode mode)
{
- efl_ui_zoom_mode_set(obj, mode);
+ efl_ui_zoom_mode_set(obj, (Efl_Ui_Zoom_Mode)mode);
}
EAPI Elm_Photocam_Zoom_Mode
elm_photocam_zoom_mode_get(const Evas_Object *obj)
{
- return efl_ui_zoom_mode_get(obj);
+ return (Elm_Photocam_Zoom_Mode)efl_ui_zoom_mode_get(obj);
}
EAPI Evas_Load_Error
diff --git a/src/lib/elementary/efl_ui_image_zoomable.eo b/src/lib/elementary/efl_ui_image_zoomable.eo
index 5b097e1fab..20424a568d 100644
--- a/src/lib/elementary/efl_ui_image_zoomable.eo
+++ b/src/lib/elementary/efl_ui_image_zoomable.eo
@@ -50,8 +50,10 @@ class Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom
Efl.Player.playing { get; set; }
Efl.Player.paused { get; set; }
Efl.Player.playback_position { get; set; }
- Efl.Player.playback_progress { get; }
+ Efl.Player.playback_progress { get; set; }
Efl.Player.playback_speed { get; set; }
+ Efl.Player.autoplay { set; get; }
+ Efl.Player.playback_loop { set; get; }
Efl.Ui.Zoom.zoom_animation { set; get; }
Efl.Ui.Zoom.zoom_level { set; get; }
Efl.Ui.Zoom.zoom_mode { set; get; }
@@ -67,9 +69,6 @@ class Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom
Efl.Gfx.Image_Orientable.image_orientation { get; set; }
Efl.Layout.Group.group_size_min { get; }
Efl.Layout.Group.group_size_max { get; }
- Efl.Layout.Signal.signal_callback_add;
- Efl.Layout.Signal.signal_callback_del;
- //Efl.Canvas.Layout_Group.group_data { get; }
}
events {
press: void; [[Called when photocam got pressed]]
diff --git a/src/lib/elementary/efl_ui_image_zoomable_legacy_eo.h b/src/lib/elementary/efl_ui_image_zoomable_legacy_eo.h
index e18960f320..db71aead15 100644
--- a/src/lib/elementary/efl_ui_image_zoomable_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_image_zoomable_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Image_Zoomable_Legacy;
*/
#define EFL_UI_IMAGE_ZOOMABLE_LEGACY_CLASS efl_ui_image_zoomable_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_image_zoomable_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_image_zoomable_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_image_zoomable_private.h b/src/lib/elementary/efl_ui_image_zoomable_private.h
index e892c1f63c..296c98d481 100644
--- a/src/lib/elementary/efl_ui_image_zoomable_private.h
+++ b/src/lib/elementary/efl_ui_image_zoomable_private.h
@@ -142,6 +142,8 @@ struct _Efl_Ui_Image_Zoomable_Data
Eina_Bool paused : 1;
Eina_Bool orientation_changed : 1;
Eina_Bool anim : 1;
+ Eina_Bool autoplay : 1;
+ Eina_Bool playback_loop : 1;
Eina_Bool freeze_want : 1;
Eina_Bool show_item: 1;
};
diff --git a/src/lib/elementary/efl_ui_internal_text_interactive.c b/src/lib/elementary/efl_ui_internal_text_interactive.c
index a0bbba6469..d2220c451c 100644
--- a/src/lib/elementary/efl_ui_internal_text_interactive.c
+++ b/src/lib/elementary/efl_ui_internal_text_interactive.c
@@ -13,18 +13,22 @@
typedef struct _Efl_Ui_Internal_Text_Interactive_Data
{
- Efl_Text_Cursor *sel_start, *sel_end;
- Efl_Text_Cursor *main_cursor;
- Efl_Text_Cursor *preedit_start, *preedit_end;
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
+ Eina_Bool watch_selection;
+ Efl_Text_Cursor_Object *main_cursor;
+ Efl_Text_Cursor_Object *preedit_start, *preedit_end;
Ecore_Timer *pw_timer;
Eina_List *seq;
char *selection;
+ const char *file;
+ Elm_Text_Format format;
Eina_Bool composing : 1;
Eina_Bool selecting : 1;
Eina_Bool have_selection : 1;
Eina_Bool select_allow : 1;
Eina_Bool editable : 1;
Eina_Bool had_sel : 1;
+ Eina_Bool auto_save : 1;
Eina_Bool prediction_allow : 1;
Eina_Bool anchors_updated : 1;
Eina_Bool auto_return_key : 1;
@@ -33,7 +37,7 @@ typedef struct _Efl_Ui_Internal_Text_Interactive_Data
Efl_Input_Text_Capitalize_Type autocapital_type;
Efl_Input_Text_Panel_Language_Type input_panel_lang;
Efl_Input_Text_Panel_Return_Key_Type input_panel_return_key_type;
- Efl_Input_Text_Hints_Type input_hints;
+ Efl_Input_Text_Content_Type input_hints;
Efl_Input_Text_Panel_Return_Key_State input_panel_return_key_state;
#ifdef HAVE_ECORE_IMF
@@ -44,38 +48,60 @@ typedef struct _Efl_Ui_Internal_Text_Interactive_Data
} Efl_Ui_Internal_Text_Interactive_Data;
static void _sel_range_del_emit(Evas_Object *obj, Efl_Ui_Internal_Text_Interactive_Data *en);
-static void _sel_init(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en);
-static void _sel_enable(Efl_Text_Cursor *c EINA_UNUSED, Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en);
-static void _sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en);
+static void _sel_init(Efl_Text_Cursor_Object *c, Efl_Ui_Internal_Text_Interactive_Data *en);
+static void _sel_enable(Evas_Object *o,Efl_Ui_Internal_Text_Interactive_Data *en);
+static void _sel_extend(Efl_Text_Cursor_Object *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en);
static void _sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en);
+static void _emit_sel_state( Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en);
static const char *_entry_selection_get(Efl_Ui_Internal_Text_Interactive *obj, Efl_Ui_Internal_Text_Interactive_Data *en);
static void _entry_imf_cursor_info_set(Efl_Ui_Internal_Text_Interactive_Data *en);
+static void _sel_watch_freeze(Efl_Ui_Internal_Text_Interactive_Data *en);
+static void _sel_watch_thaw(Efl_Ui_Internal_Text_Interactive_Data *en);
+
static void
_text_filter_format_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c, const char *text);
+ Efl_Text_Cursor_Object *c, const char *text);
static Efl_Text_Change_Info *
_text_filter_text_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c,
+ Efl_Text_Cursor_Object *c,
const char *text,
const char *fmtpre, const char *fmtpost,
Eina_Bool clearsel, Eina_Bool changeinfo);
static Efl_Text_Change_Info *
_text_filter_markup_prepend_internal(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c,
+ Efl_Text_Cursor_Object *c,
char *text,
const char *fmtpre, const char *fmtpost,
Eina_Bool clearsel, Eina_Bool changeinfo);
static Efl_Text_Change_Info *
_text_filter_markup_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c,
+ Efl_Text_Cursor_Object *c,
const char *text,
const char *fmtpre, const char *fmtpost,
Eina_Bool clearsel, Eina_Bool changeinfo);
+static void
+_cur_pos_copy(Efl_Text_Cursor_Object *src, Efl_Text_Cursor_Object *dest)
+{
+ efl_text_cursor_object_position_set(dest, efl_text_cursor_object_position_get(src));
+}
+
+static void
+_sel_watch_freeze(Efl_Ui_Internal_Text_Interactive_Data *en)
+{
+ en->watch_selection = EINA_FALSE;
+}
+
+static void
+_sel_watch_thaw(Efl_Ui_Internal_Text_Interactive_Data *en)
+{
+ en->watch_selection = EINA_TRUE;
+}
+
#ifdef HAVE_ECORE_IMF
static void
_preedit_clear(Efl_Ui_Internal_Text_Interactive_Data *en)
@@ -100,17 +126,17 @@ _preedit_del(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
if (!en || !en->have_preedit) return;
if (!en->preedit_start || !en->preedit_end) return;
- if (efl_text_cursor_equal(en->preedit_start, en->preedit_end)) return;
+ if (efl_text_cursor_object_equal(en->preedit_start, en->preedit_end)) return;
/* delete the preedit characters */
- efl_text_cursor_range_delete(en->preedit_start, en->preedit_end);
+ efl_text_cursor_object_range_delete(en->preedit_start, en->preedit_end);
}
static Eina_Bool
_entry_imf_retrieve_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, char **text, int *cursor_pos)
{
Efl_Canvas_Textblock *obj = data;
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
const char *str;
if (text)
@@ -127,7 +153,7 @@ _entry_imf_retrieve_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSE
if (cursor_pos)
{
if (cur)
- *cursor_pos = efl_text_cursor_position_get(cur);
+ *cursor_pos = efl_text_cursor_object_position_get(cur);
else
*cursor_pos = 0;
}
@@ -236,7 +262,7 @@ _entry_imf_event_commit_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void
static Efl_Text_Change_Info *
_text_filter_markup_prepend_internal(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c,
+ Efl_Text_Cursor_Object *c,
char *text,
const char *fmtpre, const char *fmtpost,
Eina_Bool clearsel, Eina_Bool changeinfo)
@@ -263,7 +289,7 @@ _text_filter_markup_prepend_internal(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_
if (changeinfo)
{
info = calloc(1, sizeof(*info));
- info->insert = EINA_TRUE;
+ info->type = EFL_TEXT_CHANGE_TYPE_INSERT;
info->content = eina_stringshare_add(text);
info->length =
eina_unicode_utf8_get_len(info->content);
@@ -272,14 +298,14 @@ _text_filter_markup_prepend_internal(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_
{
if (have_sel)
{
- info->merge = EINA_TRUE;
+ info->mergeable = EINA_TRUE;
}
info->position =
- efl_text_cursor_position_get(efl_text_interactive_main_cursor_get(obj));
+ efl_text_cursor_object_position_get(efl_text_interactive_main_cursor_get(obj));
}
if (fmtpre) _text_filter_format_prepend(obj, en, efl_text_interactive_main_cursor_get(obj), fmtpre);
//evas_object_textblock_text_markup_prepend(c, text);
- efl_text_cursor_text_insert(c, text);
+ efl_text_cursor_object_text_insert(c, text);
free(text);
if (fmtpost) _text_filter_format_prepend(obj, en, efl_text_interactive_main_cursor_get(obj), fmtpost);
return info;
@@ -289,7 +315,7 @@ _text_filter_markup_prepend_internal(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_
static Efl_Text_Change_Info *
_text_filter_markup_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c,
+ Efl_Text_Cursor_Object *c,
const char *text,
const char *fmtpre, const char *fmtpost,
Eina_Bool clearsel, Eina_Bool changeinfo)
@@ -318,11 +344,14 @@ _text_filter_markup_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Inte
static Efl_Text_Change_Info *
_text_filter_text_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c,
+ Efl_Text_Cursor_Object *c,
const char *text,
const char *fmtpre, const char *fmtpost,
Eina_Bool clearsel, Eina_Bool changeinfo)
{
+ char *markup_text;
+ Efl_Text_Change_Info *info = NULL;
+
EINA_SAFETY_ON_NULL_RETURN_VAL(text, NULL);
if ((clearsel) && (en->have_selection))
@@ -330,24 +359,17 @@ _text_filter_text_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Intera
_sel_range_del_emit(obj, en);
}
- if (text)
- {
- char *markup_text;
- Efl_Text_Change_Info *info = NULL;
-
- markup_text = evas_textblock_text_utf8_to_markup(NULL, text);
- if (markup_text)
- info = _text_filter_markup_prepend_internal(obj, en, c, markup_text,
- fmtpre, fmtpost,
- clearsel, changeinfo);
- return info;
- }
- return NULL;
+ markup_text = evas_textblock_text_utf8_to_markup(NULL, text);
+ if (markup_text)
+ info = _text_filter_markup_prepend_internal(obj, en, c, markup_text,
+ fmtpre, fmtpost,
+ clearsel, changeinfo);
+ return info;
}
static void
_text_filter_format_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Interactive_Data *en,
- Efl_Text_Cursor *c, const char *text)
+ Efl_Text_Cursor_Object *c, const char *text)
{
EINA_SAFETY_ON_NULL_RETURN(text);
@@ -421,7 +443,7 @@ static void
_entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info EINA_UNUSED)
{
Efl_Canvas_Textblock *obj = data;
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Efl_Text_Change_Info *info = NULL;
int cursor_pos;
@@ -460,7 +482,7 @@ _entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUS
/* delete preedit characters */
_preedit_del(obj, en);
- preedit_start_pos = efl_text_cursor_position_get(cur);
+ preedit_start_pos = efl_text_cursor_object_position_get(cur);
/* insert preedit character(s) */
if (strlen(preedit_string) > 0)
@@ -523,24 +545,24 @@ _entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUS
/* set preedit start cursor */
if (!en->preedit_start)
en->preedit_start = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, en->preedit_start);
+ _cur_pos_copy(cur, en->preedit_start);
/* set preedit end cursor */
if (!en->preedit_end)
en->preedit_end = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, en->preedit_end);
+ _cur_pos_copy(cur, en->preedit_end);
- preedit_end_pos = efl_text_cursor_position_get(cur);
+ preedit_end_pos = efl_text_cursor_object_position_get(cur);
for (i = 0; i < (preedit_end_pos - preedit_start_pos); i++)
{
- efl_text_cursor_move(en->preedit_start, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV);
+ efl_text_cursor_object_move(en->preedit_start, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS);
}
en->have_preedit = EINA_TRUE;
/* set cursor position */
- efl_text_cursor_position_set(cur, preedit_start_pos + cursor_pos);
+ efl_text_cursor_object_position_set(cur, preedit_start_pos + cursor_pos);
}
if (info)
@@ -566,35 +588,35 @@ static void
_entry_imf_event_delete_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info)
{
Efl_Canvas_Textblock *obj = data;
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Ecore_IMF_Event_Delete_Surrounding *ev = event_info;
- Efl_Text_Cursor *del_start, *del_end;
+ Efl_Text_Cursor_Object *del_start, *del_end;
Efl_Text_Change_Info info = { NULL, 0, 0, 0, 0 };
int cursor_pos;
int start, end;
char *tmp;
- cursor_pos = efl_text_cursor_position_get(cur);
+ cursor_pos = efl_text_cursor_object_position_get(cur);
del_start = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_position_set(del_start, cursor_pos + ev->offset);
+ efl_text_cursor_object_position_set(del_start, cursor_pos + ev->offset);
del_end = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_position_set(del_end, cursor_pos + ev->offset + ev->n_chars);
+ efl_text_cursor_object_position_set(del_end, cursor_pos + ev->offset + ev->n_chars);
- start = efl_text_cursor_position_get(del_start);
- end = efl_text_cursor_position_get(del_end);
+ start = efl_text_cursor_object_position_get(del_start);
+ end = efl_text_cursor_object_position_get(del_end);
if (start == end) goto end;
- tmp = efl_text_cursor_range_text_get(del_start, del_end);
+ tmp = efl_text_cursor_object_range_text_get(del_start, del_end);
- info.insert = EINA_FALSE;
+ info.type = EFL_TEXT_CHANGE_TYPE_REMOVE;
info.position = start;
info.length = end - start;
info.content = tmp;
- efl_text_cursor_range_delete(del_start, del_end);
+ efl_text_cursor_object_range_delete(del_start, del_end);
efl_event_callback_call(obj, EFL_TEXT_INTERACTIVE_EVENT_CHANGED_USER, &info);
free(tmp);
@@ -610,21 +632,21 @@ static void
_entry_imf_event_selection_set_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info)
{
Efl_Canvas_Textblock *obj = data;
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Ecore_IMF_Event_Selection *ev = event_info;
if (ev->start == ev->end)
{
- efl_text_cursor_position_set(cur, ev->start);
+ efl_text_cursor_object_position_set(cur, ev->start);
}
else
{
_sel_clear(obj, en);
- efl_text_cursor_position_set(cur, ev->start);
- _sel_enable(cur, obj, en);
- _sel_init(cur, obj, en);
- efl_text_cursor_position_set(cur, ev->end);
+ efl_text_cursor_object_position_set(cur, ev->start);
+ _sel_enable(obj, en);
+ _sel_init(cur, en);
+ efl_text_cursor_object_position_set(cur, ev->end);
_sel_extend(cur, obj, en);
}
}
@@ -658,7 +680,7 @@ _entry_imf_cursor_location_set(Efl_Ui_Internal_Text_Interactive_Data *en)
Eina_Rect rect;
if (!en->imf_context) return;
- rect = efl_text_cursor_geometry_get(en->main_cursor ,EFL_TEXT_CURSOR_TYPE_BEFORE);
+ rect = efl_text_cursor_object_cursor_geometry_get(en->main_cursor ,EFL_TEXT_CURSOR_TYPE_BEFORE);
ecore_imf_context_cursor_location_set(en->imf_context, rect.x, rect.y, rect.w, rect.h);
// FIXME: ecore_imf_context_bidi_direction_set(en->imf_context, (Ecore_IMF_BiDi_Direction)dir);
#else
@@ -676,13 +698,13 @@ _entry_imf_cursor_info_set(Efl_Ui_Internal_Text_Interactive_Data *en)
if (en->have_selection)
{
- if (efl_text_cursor_compare(en->sel_start, en->sel_end) < 0)
- cursor_pos = efl_text_cursor_position_get(en->sel_start);
+ if (efl_text_cursor_object_compare(en->sel_start, en->sel_end) < 0)
+ cursor_pos = efl_text_cursor_object_position_get(en->sel_start);
else
- cursor_pos = efl_text_cursor_position_get(en->sel_end);
+ cursor_pos = efl_text_cursor_object_position_get(en->sel_end);
}
else
- cursor_pos = efl_text_cursor_position_get(en->main_cursor);
+ cursor_pos = efl_text_cursor_object_position_get(en->main_cursor);
ecore_imf_context_cursor_position_set(en->imf_context, cursor_pos);
@@ -736,24 +758,74 @@ static const char *
_entry_selection_get(Efl_Ui_Internal_Text_Interactive *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
if ((!en->selection) && (en->have_selection))
- en->selection = efl_text_cursor_range_text_get(en->sel_start, en->sel_end);
+ en->selection = efl_text_cursor_object_range_text_get(en->sel_start, en->sel_end);
return en->selection;
}
static void
+_sel_reset(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en){
+
+ if (!en->watch_selection)
+ return;
+
+ if (!en->have_selection && efl_text_cursor_object_equal(en->sel_start, en->sel_end))
+ return;
+
+ if (en->have_selection)
+ {
+ if (efl_text_cursor_object_equal(en->sel_start, en->sel_end))
+ {
+ _sel_clear(obj, en);
+ }
+ else
+ {
+ _entry_imf_cursor_info_set(en);
+ if (en->selection)
+ {
+ free(en->selection);
+ en->selection = NULL;
+ }
+ _emit_sel_state(obj, en);
+ }
+ }
+ else
+ {
+ if (!efl_text_cursor_object_equal(en->sel_start, en->sel_end))
+ {
+ _sel_enable(obj, en);
+ _entry_imf_cursor_info_set(en);
+ if (en->selection)
+ {
+ free(en->selection);
+ en->selection = NULL;
+ }
+ _emit_sel_state(obj, en);
+ }
+ }
+}
+
+static void
_sel_cursor_changed(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
-// Eo *obj = data;
+ Efl_Ui_Internal_Text_Interactive *obj = data;
+ Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
+
+ if (!efl_text_interactive_selection_allowed_get(obj))
+ return;
+
+ _sel_reset(obj, en);
}
static void
-_sel_init(Efl_Text_Cursor *c, Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_sel_init(Efl_Text_Cursor_Object *c, Efl_Ui_Internal_Text_Interactive_Data *en)
{
if (en->have_selection)
return;
- efl_text_cursor_copy(c, en->sel_start);
- efl_text_cursor_copy(c, en->sel_end);
+ _sel_watch_freeze(en);
+ _cur_pos_copy(c, en->sel_start);
+ _cur_pos_copy(c, en->sel_end);
+ _sel_watch_thaw(en);
en->have_selection = EINA_FALSE;
if (en->selection)
@@ -764,8 +836,7 @@ _sel_init(Efl_Text_Cursor *c, Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_I
}
static void
-_sel_enable(Efl_Text_Cursor *c EINA_UNUSED,
- Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_sel_enable(Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en)
{
if (en->have_selection) return;
en->have_selection = EINA_TRUE;
@@ -783,28 +854,27 @@ _sel_enable(Efl_Text_Cursor *c EINA_UNUSED,
static void
_emit_sel_state( Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en)
{
- if (!efl_text_cursor_compare(en->sel_start, en->sel_end))
+ if (!efl_text_cursor_object_compare(en->sel_start, en->sel_end))
{
- Eina_Bool b_value = EINA_FALSE;
- efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value);
+ _sel_clear(o, en);
}
else
{
- Efl_Text_Range range = {0};
- range.start = efl_text_cursor_position_get(en->sel_start);
- range.end = efl_text_cursor_position_get(en->sel_end);
+ Eina_Range range = eina_range_from_to(efl_text_cursor_object_position_get(en->sel_start),
+ efl_text_cursor_object_position_get(en->sel_end));
efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_SELECTION_CHANGED, &range);
}
}
static void
-_sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en)
+_sel_extend(Efl_Text_Cursor_Object *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en)
{
- if (!en->sel_end) return;
- _sel_enable(c, o, en);
- if (efl_text_cursor_equal(c, en->sel_end)) return;
+ _sel_enable(o, en);
+ if (efl_text_cursor_object_equal(c, en->sel_end)) return;
- efl_text_cursor_copy(c, en->sel_end);
+ _sel_watch_freeze(en);
+ _cur_pos_copy(c, en->sel_end);
+ _sel_watch_thaw(en);
_entry_imf_cursor_info_set(en);
@@ -830,7 +900,9 @@ _sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en
{
en->have_selection = EINA_FALSE;
Eina_Bool b_value = en->have_selection;
- efl_text_cursor_copy(en->sel_start, en->sel_end);
+ _sel_watch_freeze(en);
+ _cur_pos_copy(en->sel_start, en->sel_end);
+ _sel_watch_thaw(en);
efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value);
}
}
@@ -846,48 +918,51 @@ EOLIAN static Eina_Bool
_efl_ui_internal_text_interactive_efl_text_interactive_have_selection_get(
const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
- return !efl_text_cursor_equal(en->sel_start, en->sel_end);
+ if (!en->have_selection) return en->have_selection;
+ return !efl_text_cursor_object_equal(en->sel_start, en->sel_end);
}
EOLIAN static void
_efl_ui_internal_text_interactive_efl_text_interactive_all_select(
- Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
+ Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en EINA_UNUSED)
{
if (!efl_text_interactive_selection_allowed_get(obj))
return;
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
- _entry_imf_context_reset(en);
+ Eo *c1 = efl_canvas_textblock_cursor_create(obj);
+ Eo *c2 = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
- _entry_imf_context_reset(en);
- _sel_init(cur, obj, en);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
- _sel_extend(cur, obj, en);
+ efl_text_cursor_object_move(c1, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ efl_text_cursor_object_move(c2, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+
+ efl_text_interactive_selection_cursors_set(obj, c1, c2);
+
+ efl_del(c1);
+ efl_del(c2);
}
static void
-_range_del_emit(Evas_Object *obj, Efl_Text_Cursor *cur1, Efl_Text_Cursor *cur2)
+_range_del_emit(Evas_Object *obj, Efl_Text_Cursor_Object *cur1, Efl_Text_Cursor_Object *cur2)
{
size_t start, end;
char *tmp;
Efl_Text_Change_Info info = { NULL, 0, 0, 0, 0 };
- start = efl_text_cursor_position_get(cur1);
- end = efl_text_cursor_position_get(cur2);
+ start = efl_text_cursor_object_position_get(cur1);
+ end = efl_text_cursor_object_position_get(cur2);
if (start == end)
return;
- info.insert = EINA_FALSE;
+ info.type = EFL_TEXT_CHANGE_TYPE_REMOVE;
info.position = start;
info.length = end - start;
- tmp = efl_text_cursor_range_text_get(cur1, cur2);
+ tmp = efl_text_cursor_object_range_text_get(cur1, cur2);
info.content = tmp;
- efl_text_cursor_range_delete(cur1, cur2);
+ efl_text_cursor_object_range_delete(cur1, cur2);
efl_event_callback_call(obj, EFL_TEXT_INTERACTIVE_EVENT_CHANGED_USER, &info);
if (tmp) free(tmp);
@@ -901,37 +976,37 @@ _sel_range_del_emit(Evas_Object *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
}
static void
-_delete_emit(Eo *obj, Efl_Text_Cursor *c, Efl_Ui_Internal_Text_Interactive_Data *en EINA_UNUSED, size_t pos,
+_delete_emit(Eo *obj, Efl_Text_Cursor_Object *c, Efl_Ui_Internal_Text_Interactive_Data *en EINA_UNUSED, size_t pos,
Eina_Bool backspace)
{
Eo * cur = efl_duplicate(c);
if (backspace)
{
- if (!efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV))
+ if (!efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS))
{
return;
}
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT);
}
else
{
- if (!efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT))
+ if (!efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT))
{
return;
}
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS);
}
- efl_unref(cur);
+ efl_del(cur);
cur = NULL;
Efl_Text_Change_Info info = { NULL, 0, 0, 0, 0 };
char *tmp = NULL;
- info.insert = EINA_FALSE;
+ info.type = EFL_TEXT_CHANGE_TYPE_REMOVE;
if (backspace)
{
Evas_Textblock_Cursor *cc = evas_object_textblock_cursor_new(obj);
- evas_textblock_cursor_copy(efl_text_cursor_handle_get(c), cc);
+ evas_textblock_cursor_copy(efl_text_cursor_object_handle_get(c), cc);
Eina_Bool remove_cluster = evas_textblock_cursor_at_cluster_as_single_glyph(cc,EINA_FALSE);
if (remove_cluster)
{
@@ -945,14 +1020,14 @@ _delete_emit(Eo *obj, Efl_Text_Cursor *c, Efl_Ui_Internal_Text_Interactive_Data
info.position = evas_textblock_cursor_pos_get(cc);
info.length = pos -info.position;
- tmp = evas_textblock_cursor_range_text_get(efl_text_cursor_handle_get(c), cc, EVAS_TEXTBLOCK_TEXT_MARKUP);
- evas_textblock_cursor_range_delete(efl_text_cursor_handle_get(c), cc);
+ tmp = evas_textblock_cursor_range_text_get(efl_text_cursor_object_handle_get(c), cc, EVAS_TEXTBLOCK_TEXT_MARKUP);
+ evas_textblock_cursor_range_delete(efl_text_cursor_object_handle_get(c), cc);
evas_textblock_cursor_free(cc);
}
else
{
Evas_Textblock_Cursor *cc = evas_object_textblock_cursor_new(obj);
- evas_textblock_cursor_copy(efl_text_cursor_handle_get(c), cc);
+ evas_textblock_cursor_copy(efl_text_cursor_object_handle_get(c), cc);
Eina_Bool remove_cluster = evas_textblock_cursor_at_cluster_as_single_glyph(cc,EINA_TRUE);
if (remove_cluster)
@@ -967,12 +1042,12 @@ _delete_emit(Eo *obj, Efl_Text_Cursor *c, Efl_Ui_Internal_Text_Interactive_Data
info.position = pos;
info.length = evas_textblock_cursor_pos_get(cc) - info.position;
- tmp = evas_textblock_cursor_range_text_get(efl_text_cursor_handle_get(c), cc, EVAS_TEXTBLOCK_TEXT_MARKUP);
- evas_textblock_cursor_range_delete(efl_text_cursor_handle_get(c), cc);
+ tmp = evas_textblock_cursor_range_text_get(efl_text_cursor_object_handle_get(c), cc, EVAS_TEXTBLOCK_TEXT_MARKUP);
+ evas_textblock_cursor_range_delete(efl_text_cursor_object_handle_get(c), cc);
evas_textblock_cursor_free(cc);
}
- info.insert = EINA_FALSE;
+ info.type = EFL_TEXT_CHANGE_TYPE_REMOVE;
info.position = pos;
info.length = 1;
info.content = tmp;
@@ -1012,28 +1087,29 @@ _compose_seq_reset(Efl_Ui_Internal_Text_Interactive_Data *en)
* movement_forward: if the movement we are going to do is forward (towards the end of the textblock)
*/
static void
-_key_down_sel_pre(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor *cur, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool shift, Eina_Bool movement_forward)
+_key_down_sel_pre(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor_Object *cur, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool shift, Eina_Bool movement_forward)
{
if (en->select_allow)
{
if (shift)
{
- _sel_init(cur, obj, en);
+ _sel_init(cur, en);
}
else if (en->have_selection)
{
- Eina_Bool sel_forward = efl_text_cursor_compare(en->sel_start, en->sel_end);
+ Eina_Bool sel_forward = efl_text_cursor_object_compare(en->sel_start, en->sel_end);
if ((sel_forward && movement_forward) || (!sel_forward && !movement_forward))
- efl_text_cursor_copy(en->sel_end, cur);
+ _cur_pos_copy(en->sel_end, cur);
else
- efl_text_cursor_copy(en->sel_start, cur);
+ _cur_pos_copy(en->sel_start, cur);
+
_sel_clear(obj, en);
}
}
}
static void
-_key_down_sel_post(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor *cur, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool shift)
+_key_down_sel_post(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor_Object *cur, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool shift)
{
if (en->select_allow)
{
@@ -1046,7 +1122,7 @@ static void
_key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info)
{
Evas_Event_Key_Down *ev = event_info;
- Efl_Text_Cursor *cur;
+ Efl_Text_Cursor_Object *cur;
Eina_Bool control, alt, shift;
#if defined(__APPLE__) && defined(__MACH__)
Eina_Bool super, altgr;
@@ -1063,7 +1139,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
- /* FIXME: Maybe allow selctions to happen even when not editable. */
+ /* FIXME: Maybe allow selections to happen even when not editable. */
if (!en->editable) return;
#ifdef HAVE_ECORE_IMF
@@ -1086,7 +1162,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
#endif
cur = efl_text_interactive_main_cursor_get(obj);
- old_cur_pos = efl_text_cursor_position_get(cur);
+ old_cur_pos = efl_text_cursor_object_position_get(cur);
if (old_cur_pos < 0) return;
control = evas_key_modifier_is_set(ev->modifiers, "Control");
@@ -1137,8 +1213,10 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
{
_key_down_sel_pre(obj, cur, en, shift, EINA_FALSE);
- efl_text_cursor_line_jump_by(cur, -1);
- ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_interactive_have_selection_get(obj))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_cursor_object_line_jump_by(cur, -1))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
_key_down_sel_post(obj, cur, en, shift);
}
@@ -1151,8 +1229,10 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
{
_key_down_sel_pre(obj, cur, en, shift, EINA_TRUE);
- efl_text_cursor_line_jump_by(cur, 1);
- ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_interactive_have_selection_get(obj))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_cursor_object_line_jump_by(cur, 1))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
_key_down_sel_post(obj, cur, en, shift);
}
@@ -1163,14 +1243,16 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
_compose_seq_reset(en);
_key_down_sel_pre(obj, cur, en, shift, EINA_FALSE);
- efl_text_cursor_move(cur,EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV);
#if defined(__APPLE__) && defined(__MACH__)
- if (altgr) efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
+ if (altgr) efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
#else
/* If control is pressed, go to the start of the word */
- if (control) efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
+ if (control) efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
#endif
- ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_interactive_have_selection_get(obj))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_cursor_object_move(cur,EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREVIOUS))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
_key_down_sel_post(obj, cur, en, shift);
}
@@ -1181,13 +1263,15 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
_key_down_sel_pre(obj, cur, en, shift, EINA_TRUE);
#if defined(__APPLE__) && defined(__MACH__)
- if (altgr) efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
+ if (altgr) efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
#else
/* If control is pressed, go to the end of the word */
- if (control) efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
+ if (control) efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
#endif
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT);
- ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_interactive_have_selection_get(obj))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ if (efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT))
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
_key_down_sel_post(obj, cur, en, shift);
}
@@ -1197,11 +1281,10 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
if (control && !en->have_selection)
{
// del to start of previous word
- Efl_Text_Cursor *tc = efl_canvas_textblock_cursor_create(obj);
-
- efl_text_cursor_copy(tc, cur);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
+ Efl_Text_Cursor_Object *tc = efl_canvas_textblock_cursor_create(obj);
+ _cur_pos_copy(cur, tc);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
_range_del_emit(obj, cur, tc);
@@ -1232,11 +1315,11 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
if (control)
{
// del to end of next word
- Efl_Text_Cursor *tc = efl_canvas_textblock_cursor_create(obj);
+ Efl_Text_Cursor_Object *tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(tc, cur);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT);
+ _cur_pos_copy(cur, tc);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT);
_range_del_emit(obj, cur, tc);
@@ -1269,9 +1352,9 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
_key_down_sel_pre(obj, cur, en, shift, EINA_FALSE);
if ((control) && (multiline))
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
else
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
_key_down_sel_post(obj, cur, en, shift);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
@@ -1284,17 +1367,17 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
_key_down_sel_pre(obj, cur, en, shift, EINA_TRUE);
if ((control) && (multiline))
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
else
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
_key_down_sel_post(obj, cur, en, shift);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!strcmp(ev->keyname, "a")))
+ else if ((super) && (!strcmp(ev->key, "a")))
#else
- else if ((control) && (!strcmp(ev->keyname, "a")))
+ else if ((control) && (!strcmp(ev->key, "a")))
#endif
{
_compose_seq_reset(en);
@@ -1310,9 +1393,9 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
}
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!strcmp(ev->keyname, "z")))
+ else if ((super) && (!strcmp(ev->key, "z")))
#else
- else if ((control) && (!strcmp(ev->keyname, "z")))
+ else if ((control) && (!strcmp(ev->key, "z")))
#endif
{
_compose_seq_reset(en);
@@ -1329,9 +1412,9 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
}
#if defined(__APPLE__) && defined(__MACH__)
- else if ((super) && (!shift) && (!strcmp(ev->keyname, "y")))
+ else if ((super) && (!shift) && (!strcmp(ev->key, "y")))
#else
- else if ((control) && (!shift) && (!strcmp(ev->keyname, "y")))
+ else if ((control) && (!shift) && (!strcmp(ev->key, "y")))
#endif
{
_compose_seq_reset(en);
@@ -1359,7 +1442,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
_compose_seq_reset(en);
_key_down_sel_pre(obj, cur, en, shift, EINA_FALSE);
- efl_text_cursor_line_jump_by(cur, -10);
+ efl_text_cursor_object_line_jump_by(cur, -10);
_key_down_sel_post(obj, cur, en, shift);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
@@ -1370,7 +1453,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
_compose_seq_reset(en);
_key_down_sel_pre(obj, cur, en, shift, EINA_TRUE);
- efl_text_cursor_line_jump_by(cur, 10);
+ efl_text_cursor_object_line_jump_by(cur, 10);
_key_down_sel_post(obj, cur, en, shift);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
@@ -1444,16 +1527,14 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
if (en->have_selection)
{
_sel_range_del_emit(obj, en);
- info.merge = EINA_TRUE;
+ info.mergeable = EINA_TRUE;
}
- info.insert = EINA_TRUE;
+ info.type = EFL_TEXT_CHANGE_TYPE_INSERT;
info.content = string;
- info.position = efl_text_cursor_position_get(cur);
+ info.position = efl_text_cursor_object_position_get(cur);
info.length = eina_unicode_utf8_get_len(string);
- efl_event_freeze(obj);
- efl_text_cursor_text_insert(cur, string);
- efl_event_thaw(obj);
+ efl_text_cursor_object_text_insert(cur, string);
changed_user = EINA_TRUE;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
@@ -1470,29 +1551,29 @@ end:
}
static void
-_cursor_char_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor *cur, Evas_Coord canvasx, Evas_Coord canvasy, Evas_Coord *_cx, Evas_Coord *_cy)
+_cursor_cluster_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor_Object *cur, Evas_Coord canvasx, Evas_Coord canvasy, Evas_Coord *_cx, Evas_Coord *_cy)
{
Evas_Coord cx, cy;
Evas_Coord x, y, lh = 0, cly = 0;
- Efl_Text_Cursor *line_cur;
- Efl_Text_Cursor *tc;
+ Efl_Text_Cursor_Object *line_cur;
+ Efl_Text_Cursor_Object *tc;
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
cx = canvasx - x;
cy = canvasy - y;
line_cur = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_move(line_cur, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
- evas_textblock_cursor_line_geometry_get(efl_text_cursor_handle_get(line_cur), NULL, &cly, NULL, &lh);
+ efl_text_cursor_object_move(line_cur, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ evas_textblock_cursor_line_geometry_get(efl_text_cursor_object_handle_get(line_cur), NULL, &cly, NULL, &lh);
/* Consider a threshold of half the line height */
if (cy > (cly + lh) && cy < (cly + lh + lh / 2))
{
cy = cly + lh - 1; // Make it inside Textblock
}
- efl_text_cursor_move(line_cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
- evas_textblock_cursor_line_geometry_get(efl_text_cursor_handle_get(line_cur), NULL, &cly, NULL, NULL);
+ efl_text_cursor_object_move(line_cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ evas_textblock_cursor_line_geometry_get(efl_text_cursor_object_handle_get(line_cur), NULL, &cly, NULL, NULL);
if (cy < cly && cy > (cly - lh / 2))
{
@@ -1501,7 +1582,7 @@ _cursor_char_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor *cur, Evas_Coo
efl_del(line_cur);
/* No need to check return value if not able to set the char coord Textblock
* will take care */
- efl_text_cursor_char_coord_set(cur, EINA_POSITION2D(cx, cy));
+ efl_text_cursor_object_cluster_coord_set(cur, EINA_POSITION2D(cx, cy));
if (_cx) *_cx = cx;
if (_cy) *_cy = cy;
}
@@ -1512,8 +1593,8 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
Evas_Coord cx, cy;
Evas_Event_Mouse_Down *ev = event_info;
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
- Efl_Text_Cursor *tc = NULL;
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
+ Efl_Text_Cursor_Object *tc = NULL;
Eina_Bool dosel = EINA_FALSE;
Eina_Bool shift;
@@ -1543,11 +1624,11 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
if (shift)
{
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
- if (efl_text_cursor_compare(cur, en->sel_start) < 0)
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
+ _cur_pos_copy(cur, tc);
+ if (efl_text_cursor_object_compare(cur, en->sel_start) < 0)
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
else
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
_sel_extend(cur, obj, en);
}
else
@@ -1556,10 +1637,10 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
en->selecting = EINA_FALSE;
_sel_clear(obj, en);
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
- _sel_init(cur, obj, en);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
+ _cur_pos_copy(cur, tc);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
+ _sel_init(cur, en);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
_sel_extend(cur, obj, en);
}
goto end;
@@ -1569,13 +1650,13 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
if (shift)
{
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
- if (efl_text_cursor_compare(cur, en->sel_start) < 0)
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
+ _cur_pos_copy(cur, tc);
+ if (efl_text_cursor_object_compare(cur, en->sel_start) < 0)
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
else
{
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT);
}
_sel_extend(cur, obj, en);
}
@@ -1585,17 +1666,17 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
en->selecting = EINA_FALSE;
_sel_clear(obj, en);
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
- _sel_init(cur, obj, en);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT);
+ _cur_pos_copy(cur, tc);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
+ _sel_init(cur, en);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT);
_sel_extend(cur, obj, en);
}
goto end;
}
}
- _cursor_char_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy);
+ _cursor_cluster_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy);
if (dosel)
{
@@ -1607,7 +1688,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
{
en->selecting = EINA_TRUE;
_sel_clear(obj, en);
- _sel_init(cur, obj, en);
+ _sel_init(cur, en);
}
}
@@ -1620,7 +1701,7 @@ _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
{
Evas_Coord cx, cy;
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
Evas_Event_Mouse_Up *ev = event_info;
if ((!ev) || (ev->button != 1)) return;
@@ -1640,11 +1721,11 @@ _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
}
#endif
- _cursor_char_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy);
+ _cursor_cluster_coord_set(obj, cur, ev->canvas.x, ev->canvas.y, &cx, &cy);
if (en->select_allow)
{
- efl_text_cursor_copy(en->sel_end, cur);
+ _cur_pos_copy(en->sel_end, cur);
}
if (en->selecting)
{
@@ -1661,10 +1742,10 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
{
Evas_Coord cx, cy;
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
- Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj);
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
Evas_Event_Mouse_Move *ev = event_info;
Evas_Coord x, y, w, h;
- Efl_Text_Cursor *tc;
+ Efl_Text_Cursor_Object *tc;
Eina_Bool multiline;
multiline = efl_text_multiline_get(obj);
@@ -1684,35 +1765,35 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
if (en->selecting)
{
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
evas_object_geometry_get(obj, &x, &y, &w, &h);
cx = ev->cur.canvas.x - x;
cy = ev->cur.canvas.y - y;
if (multiline)
{
- efl_text_cursor_char_coord_set(cur, EINA_POSITION2D(cx, cy));
+ efl_text_cursor_object_char_coord_set(cur, EINA_POSITION2D(cx, cy));
}
else
{
Evas_Coord lx, ly, lw, lh;
- efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
- evas_textblock_cursor_line_geometry_get(efl_text_cursor_handle_get(cur), &lx, &ly, &lw, &lh);
- efl_text_cursor_char_coord_set(cur, EINA_POSITION2D(cx, ly + (lh / 2)));
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ evas_textblock_cursor_line_geometry_get(efl_text_cursor_object_handle_get(cur), &lx, &ly, &lw, &lh);
+ efl_text_cursor_object_char_coord_set(cur, EINA_POSITION2D(cx, ly + (lh / 2)));
}
if (en->select_allow)
{
_sel_extend(cur, obj, en);
- if (!efl_text_cursor_equal(en->sel_start, en->sel_end))
- _sel_enable(cur, obj, en);
+ if (!efl_text_cursor_object_equal(en->sel_start, en->sel_end))
+ _sel_enable(obj, en);
}
efl_del(tc);
}
}
-EOLIAN static Efl_Text_Cursor *
+EOLIAN static Efl_Text_Cursor_Object *
_efl_ui_internal_text_interactive_efl_text_interactive_main_cursor_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *pd)
{
return pd->main_cursor;
@@ -1724,9 +1805,18 @@ _efl_ui_internal_text_interactive_efl_object_constructor(Eo *obj, Efl_Ui_Interna
obj = efl_constructor(efl_super(obj, MY_CLASS));
en->select_allow = EINA_TRUE;
en->editable = EINA_TRUE;
+ en->watch_selection = EINA_TRUE;
return obj;
}
+EOLIAN static void
+_efl_ui_internal_text_interactive_efl_object_destructor(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *sd)
+{
+ eina_stringshare_del(sd->file);
+ sd->file = NULL;
+ efl_destructor(efl_super(obj, MY_CLASS));
+}
+
EOLIAN static Efl_Object *
_efl_ui_internal_text_interactive_efl_object_finalize(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
{
@@ -1741,7 +1831,9 @@ _efl_ui_internal_text_interactive_efl_object_finalize(Eo *obj, Efl_Ui_Internal_T
en->sel_start = efl_canvas_textblock_cursor_create(obj);
en->sel_end = efl_canvas_textblock_cursor_create(obj);
- efl_event_callback_add(efl_text_interactive_main_cursor_get(obj), EFL_TEXT_CURSOR_EVENT_CHANGED,
+ efl_event_callback_add(en->sel_start, EFL_TEXT_CURSOR_OBJECT_EVENT_CHANGED,
+ _sel_cursor_changed, obj);
+ efl_event_callback_add(en->sel_end, EFL_TEXT_CURSOR_OBJECT_EVENT_CHANGED,
_sel_cursor_changed, obj);
#ifdef HAVE_ECORE_IMF
@@ -1814,7 +1906,7 @@ _efl_ui_internal_text_interactive_efl_text_text_set(Eo *eo_obj, Efl_Ui_Internal_
const char *text)
{
efl_text_set(efl_super(eo_obj, MY_CLASS), text);
- efl_text_cursor_move(o->main_cursor, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ efl_text_cursor_object_move(o->main_cursor, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
}
EOLIAN void
@@ -1822,7 +1914,7 @@ _efl_ui_internal_text_interactive_efl_text_markup_markup_set(Eo *eo_obj, Efl_Ui_
const char *text)
{
efl_text_markup_set(efl_super(eo_obj, MY_CLASS), text);
- efl_text_cursor_move(o->main_cursor, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ efl_text_cursor_object_move(o->main_cursor, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
}
EOLIAN static void
@@ -1845,10 +1937,10 @@ _efl_ui_internal_text_interactive_efl_text_interactive_selection_allowed_get(con
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_text_interactive_selection_cursors_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *pd, Efl_Text_Cursor **start, Efl_Text_Cursor **end)
+_efl_ui_internal_text_interactive_efl_text_interactive_selection_cursors_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *pd, Efl_Text_Cursor_Object **start, Efl_Text_Cursor_Object **end)
{
- if (efl_text_cursor_position_get(pd->sel_start) >
- efl_text_cursor_position_get(pd->sel_end))
+ if (efl_text_cursor_object_position_get(pd->sel_start) >
+ efl_text_cursor_object_position_get(pd->sel_end))
{
if (start) *start = pd->sel_end;
if (end) *end = pd->sel_start;
@@ -1861,6 +1953,31 @@ _efl_ui_internal_text_interactive_efl_text_interactive_selection_cursors_get(con
}
EOLIAN static void
+_efl_ui_internal_text_interactive_efl_text_interactive_selection_cursors_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Text_Cursor_Object *start, Efl_Text_Cursor_Object *end)
+{
+ if (!efl_text_interactive_selection_allowed_get(obj))
+ return;
+
+ int new_sel_start_pos = efl_text_cursor_object_position_get(start);
+ int new_sel_end_pos = efl_text_cursor_object_position_get(end);
+
+ int current_sel_start_pos = efl_text_cursor_object_position_get(en->sel_start);
+ int current_sel_end_pos = efl_text_cursor_object_position_get(en->sel_end);
+
+ Eina_Bool b_start_changed = (new_sel_start_pos == current_sel_start_pos);
+ Eina_Bool b_end_changed = (new_sel_end_pos == current_sel_end_pos);
+
+ if (b_start_changed && b_end_changed)
+ return;
+
+ _sel_watch_freeze(en);
+ efl_text_cursor_object_position_set(en->sel_start, new_sel_start_pos);
+ efl_text_cursor_object_position_set(en->sel_end, new_sel_end_pos);
+ _sel_watch_thaw(en);
+ _sel_reset(obj, en);
+}
+
+EOLIAN static void
_efl_ui_internal_text_interactive_efl_text_interactive_editable_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, Eina_Bool editable)
{
sd->editable = editable;
@@ -1873,7 +1990,7 @@ _efl_ui_internal_text_interactive_efl_text_interactive_editable_get(const Eo *ob
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_hide(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_hide(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -1885,7 +2002,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_hide(Eo *obj EINA_U
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_language_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Panel_Language_Type lang)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_language_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Panel_Language_Type lang)
{
en->input_panel_lang = lang;
#ifdef HAVE_ECORE_IMF
@@ -1899,15 +2016,14 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_language_set(Eo *ob
EOLIAN static Efl_Input_Text_Panel_Language_Type
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_language_get(const Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_language_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
return en->input_panel_lang;
- (void)obj;
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_imdata_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Slice slice)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_imdata_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Slice slice)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -1921,7 +2037,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_imdata_set(Eo *obj
EOLIAN static Eina_Slice
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_imdata_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_imdata_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
Eina_Slice slice = {0};
@@ -1942,7 +2058,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_imdata_get(const Eo
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_return_key_type_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Panel_Return_Key_Type return_key_type)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_return_key_type_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Panel_Return_Key_Type return_key_type)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -1955,7 +2071,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_return_key_type_set
EOLIAN static Efl_Input_Text_Panel_Return_Key_Type
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_return_key_type_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_return_key_type_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -1968,7 +2084,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_return_key_type_get
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_return_key_state_set(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Panel_Return_Key_State state)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_return_key_state_set(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Panel_Return_Key_State state)
{
if (en->input_panel_return_key_state == state)
return;
@@ -2002,14 +2118,14 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_return_key_state_se
EOLIAN static Efl_Input_Text_Panel_Return_Key_State
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_return_key_state_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_return_key_state_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
return en->input_panel_return_key_state;
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_show_on_demand_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool ondemand)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_show_on_demand_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool ondemand)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -2021,7 +2137,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_show_on_demand_set(
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_layout_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, Efl_Input_Text_Panel_Layout_Type layout)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_layout_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, Efl_Input_Text_Panel_Layout_Type layout)
{
sd->input_panel_layout = layout;
@@ -2031,19 +2147,19 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_layout_set(Eo *obj
#endif
if (layout == EFL_INPUT_TEXT_PANEL_LAYOUT_TYPE_PASSWORD)
- efl_input_text_input_hint_set(obj, ((sd->input_hints & ~EFL_INPUT_TEXT_HINTS_TYPE_AUTO_COMPLETE) | EFL_INPUT_TEXT_HINTS_TYPE_SENSITIVE_DATA));
+ efl_input_text_input_content_type_set(obj, ((sd->input_hints & ~EFL_INPUT_TEXT_CONTENT_TYPE_AUTO_COMPLETE) | EFL_INPUT_TEXT_CONTENT_TYPE_SENSITIVE_DATA));
else if (layout == EFL_INPUT_TEXT_PANEL_LAYOUT_TYPE_TERMINAL)
- efl_input_text_input_hint_set(obj, (sd->input_hints & ~EFL_INPUT_TEXT_HINTS_TYPE_AUTO_COMPLETE));
+ efl_input_text_input_content_type_set(obj, (sd->input_hints & ~EFL_INPUT_TEXT_CONTENT_TYPE_AUTO_COMPLETE));
}
EOLIAN static Efl_Input_Text_Panel_Layout_Type
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_layout_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_layout_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd)
{
return sd->input_panel_layout;
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_layout_variation_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, int variation)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_layout_variation_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, int variation)
{
sd->input_panel_layout_variation = variation;
@@ -2053,16 +2169,20 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_layout_variation_se
#else
(void)variation;
#endif
+
+ if (sd->input_panel_layout == EFL_INPUT_TEXT_PANEL_LAYOUT_TYPE_NORMAL &&
+ variation == EFL_INPUT_TEXT_PANEL_LAYOUT_NORMAL_VARIATION_TYPE_PERSON_NAME)
+ efl_input_text_autocapitalization_set(obj, EFL_INPUT_TEXT_CAPITALIZE_TYPE_WORD);
}
EOLIAN static int
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_layout_variation_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_layout_variation_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd)
{
return sd->input_panel_layout_variation;
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_show(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_show(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -2073,7 +2193,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_show(Eo *obj EINA_U
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_autoshow_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool enabled)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_autoshow_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool enabled)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -2085,7 +2205,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_autoshow_set(Eo *ob
}
EOLIAN static Eina_Bool
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_autoshow_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_autoshow_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -2097,7 +2217,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_autoshow_get(const
}
EOLIAN static Eina_Bool
-_efl_ui_internal_text_interactive_efl_input_text_input_panel_show_on_demand_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_panel_show_on_demand_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -2113,7 +2233,7 @@ _efl_ui_internal_text_interactive_efl_input_text_input_panel_show_on_demand_get(
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_predictable_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool prediction)
+_efl_ui_internal_text_interactive_efl_input_text_entity_predictable_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool prediction)
{
en->prediction_allow = prediction;
#ifdef HAVE_ECORE_IMF
@@ -2127,15 +2247,14 @@ _efl_ui_internal_text_interactive_efl_input_text_predictable_set(Eo *obj EINA_UN
EOLIAN static Eina_Bool
-_efl_ui_internal_text_interactive_efl_input_text_predictable_get(const Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_predictable_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
return en->prediction_allow;
- (void)obj;
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_input_hint_set(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Hints_Type input_hints)
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_content_type_set(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Content_Type input_hints)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
@@ -2149,24 +2268,24 @@ _efl_ui_internal_text_interactive_efl_input_text_input_hint_set(Eo *obj, Efl_Ui_
}
-EOLIAN static Efl_Input_Text_Hints_Type
-_efl_ui_internal_text_interactive_efl_input_text_input_hint_get(const Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
+EOLIAN static Efl_Input_Text_Content_Type
+_efl_ui_internal_text_interactive_efl_input_text_entity_input_content_type_get(const Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
- return (Efl_Input_Text_Hints_Type)ecore_imf_context_input_hint_get(en->imf_context);
+ return (Efl_Input_Text_Content_Type)ecore_imf_context_input_hint_get(en->imf_context);
(void)obj;
#else
(void)obj;
(void)en;
#endif
- return ELM_INPUT_HINT_NONE;
+ return EFL_INPUT_TEXT_CONTENT_TYPE_NONE;
}
EOLIAN static void
-_efl_ui_internal_text_interactive_efl_input_text_autocapitalization_set(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Capitalize_Type autocapital_type)
+_efl_ui_internal_text_interactive_efl_input_text_entity_autocapitalization_set(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Input_Text_Capitalize_Type autocapital_type)
{
#ifdef HAVE_ECORE_IMF
if (efl_text_password_get(obj) == EINA_TRUE)
@@ -2174,8 +2293,6 @@ _efl_ui_internal_text_interactive_efl_input_text_autocapitalization_set(Eo *obj,
if (en->imf_context)
ecore_imf_context_autocapital_type_set(en->imf_context, (Ecore_IMF_Autocapital_Type)autocapital_type);
-
- (void)obj;
#else
(void)obj;
(void)en;
@@ -2185,19 +2302,166 @@ _efl_ui_internal_text_interactive_efl_input_text_autocapitalization_set(Eo *obj,
EOLIAN static Efl_Input_Text_Capitalize_Type
-_efl_ui_internal_text_interactive_efl_input_text_autocapitalization_get(const Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
+_efl_ui_internal_text_interactive_efl_input_text_entity_autocapitalization_get(const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en)
{
#ifdef HAVE_ECORE_IMF
if (en->imf_context)
return (Efl_Input_Text_Capitalize_Type)ecore_imf_context_autocapital_type_get(en->imf_context);
return EFL_INPUT_TEXT_CAPITALIZE_TYPE_NONE;
- (void)obj;
#else
- return EFL_INPUT_TEXT_CAPITALIZE_TYPE_NONE;
- (void)obj;
(void)en;
+ return EFL_INPUT_TEXT_CAPITALIZE_TYPE_NONE;
#endif
}
+
+static char *
+_file_load(Eo *obj)
+{
+ Eina_File *f;
+ char *text = NULL;
+ void *tmp = NULL;
+
+ f = eina_file_dup(efl_file_mmap_get(obj));
+
+ tmp = eina_file_map_all(f, EINA_FILE_SEQUENTIAL);
+ if (!tmp) goto on_error;
+
+ text = malloc(eina_file_size_get(f) + 1);
+ if (!text) goto on_error;
+
+ memcpy(text, tmp, eina_file_size_get(f));
+ text[eina_file_size_get(f)] = 0;
+
+ if (eina_file_map_faulted(f, tmp))
+ {
+ ELM_SAFE_FREE(text, free);
+ }
+
+ on_error:
+ if (tmp) eina_file_map_free(f, tmp);
+ eina_file_close(f);
+
+ return text;
+}
+
+static char *
+_plain_load(Eo *obj)
+{
+ return _file_load(obj);
+}
+
+static Eina_Error
+_load_do(Evas_Object *obj)
+{
+ char *text;
+ Eina_Error err = 0;
+
+ Efl_Ui_Internal_Text_Interactive_Data * sd = efl_data_scope_get(obj, MY_CLASS);
+
+ if (!sd->file)
+ {
+ efl_text_set(obj, "");
+ return 0;
+ }
+
+ switch (sd->format)
+ {
+ /* Only available format */
+ case ELM_TEXT_FORMAT_PLAIN_UTF8:
+ text = _plain_load(obj);
+ if (!text)
+ {
+ err = errno;
+ if (!err) err = ENOENT;
+ }
+ break;
+
+ default:
+ text = NULL;
+ break;
+ }
+
+ if (text)
+ {
+ efl_text_set(obj, text);
+ free(text);
+ return 0;
+ }
+ efl_text_set(obj, "");
+ return err;
+}
+
+static void
+_text_save(const char *file,
+ const char *text)
+{
+ FILE *f;
+
+ if (!text)
+ {
+ ecore_file_unlink(file);
+ return;
+ }
+
+ f = fopen(file, "wb");
+ if (!f)
+ {
+ ERR("Failed to open %s for writing", file);
+ return;
+ }
+
+ if (fputs(text, f) == EOF)
+ ERR("Failed to write text to file %s", file);
+ fclose(f);
+}
+
+static void
+_save_do(Evas_Object *obj)
+{
+ Efl_Ui_Internal_Text_Interactive_Data * sd = efl_data_scope_get(obj, MY_CLASS);
+
+ if (!sd->file) return;
+ switch (sd->format)
+ {
+ /* Only supported format */
+ case ELM_TEXT_FORMAT_PLAIN_UTF8:
+ _text_save(sd->file, efl_text_get(obj));
+ break;
+
+ case ELM_TEXT_FORMAT_MARKUP_UTF8:
+ default:
+ break;
+ }
+}
+
+
+EOLIAN static Eina_Error
+_efl_ui_internal_text_interactive_efl_file_file_set(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *sd, const char *file)
+{
+ eina_stringshare_replace(&sd->file, file);
+ return efl_file_set(efl_super(obj, MY_CLASS), file);
+}
+
+EOLIAN static void
+_efl_ui_internal_text_interactive_efl_file_unload(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *sd EINA_UNUSED)
+{
+ efl_file_unload(efl_super(obj, MY_CLASS));
+ efl_text_set(obj, "");
+}
+
+EOLIAN static Eina_Error
+_efl_ui_internal_text_interactive_efl_file_load(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *sd)
+{
+ Eina_Error err;
+
+ if (efl_file_loaded_get(obj)) return 0;
+ err = efl_file_load(efl_super(obj, MY_CLASS));
+ if (err) return err;
+ if (sd->auto_save) _save_do(obj);
+ return _load_do(obj);
+}
+
+
#include "efl_ui_internal_text_interactive.eo.c"
#include "efl_text_interactive.eo.c"
diff --git a/src/lib/elementary/efl_ui_internal_text_interactive.eo b/src/lib/elementary/efl_ui_internal_text_interactive.eo
index 44e871cb9b..7a9174822e 100644
--- a/src/lib/elementary/efl_ui_internal_text_interactive.eo
+++ b/src/lib/elementary/efl_ui_internal_text_interactive.eo
@@ -1,4 +1,4 @@
-class @beta Efl.Ui.Internal.Text.Interactive extends Efl.Canvas.Textblock implements Efl.Text_Interactive, Efl.Input_Text
+class @beta Efl.Ui.Internal.Text.Interactive extends Efl.Canvas.Textblock implements Efl.Text_Interactive, Efl.Input_Text.Entity, Efl.File
{
[[An internal object in charge of the interactive aspect of the text widget.
@@ -6,28 +6,33 @@ class @beta Efl.Ui.Internal.Text.Interactive extends Efl.Canvas.Textblock implem
]]
implements {
Efl.Object.constructor;
+ Efl.Object.destructor;
Efl.Object.finalize;
Efl.Text_Interactive.main_cursor { get; }
Efl.Text_Interactive.selection_allowed { get; set; }
- Efl.Text_Interactive.selection_cursors { get; }
+ Efl.Text_Interactive.selection_cursors { get; set; }
Efl.Text_Interactive.editable { get; set; }
Efl.Text_Interactive.all_unselect;
Efl.Text_Interactive.all_select;
Efl.Text_Interactive.have_selection {get; }
Efl.Text.text { set; }
Efl.Text_Markup.markup { set; }
- Efl.Input_Text.input_panel_show_on_demand { get; set; }
- Efl.Input_Text.input_panel_language { get; set; }
- Efl.Input_Text.input_panel_layout_variation { get; set; }
- Efl.Input_Text.autocapitalization { get; set; }
- Efl.Input_Text.input_panel_return_key_state { get; set; }
- Efl.Input_Text.predictable { get; set; }
- Efl.Input_Text.input_hint { get; set; }
- Efl.Input_Text.input_panel_layout { get; set; }
- Efl.Input_Text.input_panel_return_key_type { get; set; }
- Efl.Input_Text.input_panel_autoshow { get; set; }
- Efl.Input_Text.input_panel_show;
- Efl.Input_Text.input_panel_hide;
- Efl.Input_Text.input_panel_imdata { get; set; }
+ Efl.Input_Text.Entity.input_panel_show_on_demand { get; set; }
+ Efl.Input_Text.Entity.input_panel_language { get; set; }
+ Efl.Input_Text.Entity.input_panel_layout_variation { get; set; }
+ Efl.Input_Text.Entity.autocapitalization { get; set; }
+ Efl.Input_Text.Entity.input_panel_return_key_state { get; set; }
+ Efl.Input_Text.Entity.predictable { get; set; }
+ Efl.Input_Text.Entity.input_content_type { get; set; }
+ Efl.Input_Text.Entity.input_panel_layout { get; set; }
+ Efl.Input_Text.Entity.input_panel_return_key_type { get; set; }
+ Efl.Input_Text.Entity.input_panel_autoshow { get; set; }
+ Efl.Input_Text.Entity.input_panel_show;
+ Efl.Input_Text.Entity.input_panel_hide;
+ Efl.Input_Text.Entity.input_panel_imdata { get; set; }
+ //FIXME Efl.File should be implemented later at Efl.Ui.TextBox level
+ Efl.File.file { set; }
+ Efl.File.load;
+ Efl.File.unload;
}
}
diff --git a/src/lib/elementary/efl_ui_internal_text_scroller.c b/src/lib/elementary/efl_ui_internal_text_scroller.c
index 3387759e38..7f10c2989a 100644
--- a/src/lib/elementary/efl_ui_internal_text_scroller.c
+++ b/src/lib/elementary/efl_ui_internal_text_scroller.c
@@ -63,7 +63,6 @@ _efl_ui_internal_text_scroller_efl_object_constructor(Eo *obj,
Efl_Ui_Internal_Text_Scroller_Data *sd EINA_UNUSED)
{
obj = efl_constructor(efl_super(obj, MY_CLASS));
- //EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, psd, NULL);
efl_ui_scrollbar_bar_mode_set(obj,
EFL_UI_SCROLLBAR_MODE_OFF, EFL_UI_SCROLLBAR_MODE_OFF);
@@ -138,7 +137,6 @@ _efl_ui_internal_text_scroller_efl_object_finalize(Eo *obj,
efl_ui_scrollbar_bar_mode_set(obj,
EFL_UI_SCROLLBAR_MODE_OFF, EFL_UI_SCROLLBAR_MODE_OFF);
efl_content_set(obj, sd->text_table);
-
return obj;
}
@@ -170,16 +168,15 @@ _efl_ui_internal_text_scroller_scroller_mode_set(Eo *obj,
Efl_Ui_Internal_Text_Scroller_Data *sd,
Efl_Ui_Text_Scroller_Mode mode)
{
- EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, psd);
sd->mode = mode;
if (mode == EFL_UI_TEXT_SCROLLER_MODE_MULTILINE)
{
- efl_ui_scrollbar_bar_mode_set(psd->smanager,
+ efl_ui_scrollbar_bar_mode_set(obj,
EFL_UI_SCROLLBAR_MODE_AUTO, EFL_UI_SCROLLBAR_MODE_AUTO);
}
else // default (single-line)
{
- efl_ui_scrollbar_bar_mode_set(psd->smanager,
+ efl_ui_scrollbar_bar_mode_set(obj,
EFL_UI_SCROLLBAR_MODE_OFF, EFL_UI_SCROLLBAR_MODE_OFF);
}
}
diff --git a/src/lib/elementary/efl_ui_item.c b/src/lib/elementary/efl_ui_item.c
index 85b50ee758..2504f410e0 100644
--- a/src/lib/elementary/efl_ui_item.c
+++ b/src/lib/elementary/efl_ui_item.c
@@ -96,7 +96,10 @@ _item_unpressed(void *data, const Efl_Event *ev EINA_UNUSED)
m = _fetch_state(pd->container);
if (pd->selected)
- efl_ui_selectable_selected_set(obj, EINA_FALSE);
+ {
+ if (efl_ui_selectable_allow_manual_deselection_get(pd->container))
+ efl_ui_selectable_selected_set(obj, EINA_FALSE);
+ }
else if (m != EFL_UI_SELECT_MODE_NONE)
efl_ui_selectable_selected_set(obj, EINA_TRUE);
}
diff --git a/src/lib/elementary/efl_ui_layout.c b/src/lib/elementary/efl_ui_layout.c
index 9ab1ab3a4a..ae757b1bb4 100644
--- a/src/lib/elementary/efl_ui_layout.c
+++ b/src/lib/elementary/efl_ui_layout.c
@@ -179,11 +179,13 @@ _sizing_eval(Evas_Object *obj, Efl_Ui_Layout_Data *sd, Elm_Layout_Data *ld)
if (sd->calc_subobjs && !evas_smart_objects_calculating_get(evas_object_evas_get(obj)))
{
- Eina_List *l;
Eo *subobj;
/* user has manually triggered a smart calc and wants subobjs to also calc */
- EINA_LIST_FOREACH(wd->subobjs, l, subobj)
- efl_canvas_group_calculate(subobj);
+ for (unsigned int i = 0; i < eina_array_count(wd->children); ++i)
+ {
+ subobj = eina_array_data_get(wd->children, i);
+ efl_canvas_group_calculate(subobj);
+ }
}
elm_coords_finger_size_adjust(sd->finger_size_multiplier_x, &rest_w,
sd->finger_size_multiplier_y, &rest_h);
@@ -551,12 +553,30 @@ _efl_ui_layout_theme_internal(Eo *obj, Efl_Ui_Layout_Data *sd, Elm_Widget_Smart_
return ret;
}
+static void
+_deferred_signals_emit(Efl_Ui_Layout_Data *pd)
+{
+ do
+ {
+ Deferred_Version_Signal *dvs = eina_inarray_pop(pd->deferred_signals);
+
+ if (pd->version < dvs->version_threshold)
+ efl_layout_signal_emit(pd->obj, dvs->old_sig, "efl");
+ else
+ efl_layout_signal_emit(pd->obj, dvs->new_sig, "efl");
+ eina_stringshare_del(dvs->old_sig);
+ eina_stringshare_del(dvs->new_sig);
+ } while (eina_inarray_count(pd->deferred_signals));
+ ELM_SAFE_FREE(pd->deferred_signals, eina_inarray_free);
+}
+
EOLIAN static Eina_Error
_efl_ui_layout_base_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Layout_Data *sd)
{
Eina_Error theme_apply_ret, theme_apply_internal_ret;
Elm_Widget_Smart_Data *wd = NULL;
char buf[64];
+ Eina_Bool legacy;
static unsigned int version = 0;
sd->needs_theme_apply = EINA_FALSE;
@@ -572,9 +592,10 @@ _efl_ui_layout_base_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Layout_Data *sd)
(theme_apply_internal_ret == EFL_UI_THEME_APPLY_ERROR_DEFAULT))
return EFL_UI_THEME_APPLY_ERROR_DEFAULT;
+ legacy = elm_widget_is_legacy(obj);
/* unset existing size hints to force accurate recalc */
efl_gfx_hint_size_restricted_min_set(obj, EINA_SIZE2D(0, 0));
- if (elm_widget_is_legacy(obj))
+ if (legacy)
efl_gfx_hint_size_min_set(obj, EINA_SIZE2D(0, 0));
else
{
@@ -603,20 +624,9 @@ _efl_ui_layout_base_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Layout_Data *sd)
}
}
if (sd->deferred_signals)
- {
- do
- {
- Deferred_Version_Signal *dvs = eina_inarray_pop(sd->deferred_signals);
+ _deferred_signals_emit(sd);
+ if (legacy) return EFL_UI_THEME_APPLY_ERROR_NONE;
- if (sd->version < dvs->version_threshold)
- efl_layout_signal_emit(sd->obj, dvs->old_sig, "efl");
- else
- efl_layout_signal_emit(sd->obj, dvs->new_sig, "efl");
- eina_stringshare_del(dvs->old_sig);
- eina_stringshare_del(dvs->new_sig);
- } while (eina_inarray_count(sd->deferred_signals));
- ELM_SAFE_FREE(sd->deferred_signals, eina_inarray_free);
- }
if (!version)
{
snprintf(buf, sizeof(buf), "%d%d", EFL_VERSION_MAJOR, EFL_VERSION_MINOR + (EFL_VERSION_MICRO == 99 ? 1 : 0));
@@ -921,8 +931,6 @@ _efl_ui_layout_base_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Layout_Data *sd)
Efl_Ui_Layout_Sub_Object_Data *sub_d;
Efl_Ui_Layout_Sub_Object_Cursor *pc;
Edje_Signal_Data *esd;
- Evas_Object *child;
- Eina_List *l;
Efl_Model *model;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
@@ -977,28 +985,21 @@ _efl_ui_layout_base_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Layout_Data *sd)
/* let's make our Edje object the *last* to be processed, since it
* may (smart) parent other sub objects here */
- EINA_LIST_FOREACH(wd->subobjs, l, child)
- {
- if (child == wd->resize_obj)
- {
- wd->subobjs =
- eina_list_demote_list(wd->subobjs, l);
- break;
- }
- }
+ {
+ unsigned int resize_id = 0;
+ if (eina_array_find(wd->children, wd->resize_obj, &resize_id))
+ {
+ //exchange with last
+ eina_array_data_set(wd->children, resize_id, eina_array_data_get(wd->children, eina_array_count(wd->children) - 1));
+ eina_array_data_set(wd->children, eina_array_count(wd->children) - 1, wd->resize_obj);
+ }
+ }
sd->destructed_is = EINA_TRUE;
efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
-EOLIAN static void
-_efl_ui_layout_efl_canvas_group_group_calculate(Eo *obj, void *_pd EINA_UNUSED)
-{
- efl_canvas_group_need_recalculate_set(obj, EINA_FALSE);
- _sizing_eval(obj, efl_data_scope_get(obj, MY_CLASS), NULL);
-}
-
/* rewrite or extend this one on your derived class as to suit your
* needs */
EOLIAN static void
@@ -1462,9 +1463,10 @@ _efl_ui_layout_text_generic_set(Eo *obj, Efl_Ui_Layout_Data *sd, const char *par
{
if ((sub_d->type == TEXT) && (!strcmp(part, sub_d->part)))
{
- if (!text)
+ if ((!text) || (text[0] == 0))
{
- _text_signal_emit(sd, sub_d, EINA_FALSE);
+ if ((!strcmp(part, "elm.text") || !strcmp(part, "efl.text")))
+ _text_signal_emit(sd, sub_d, EINA_FALSE);
eina_stringshare_del(sub_d->part);
free(sub_d);
edje_object_part_text_escaped_set
@@ -1478,7 +1480,7 @@ _efl_ui_layout_text_generic_set(Eo *obj, Efl_Ui_Layout_Data *sd, const char *par
}
}
- if (!text) return EINA_TRUE;
+ if ((!text) || (text[0] == 0)) return EINA_TRUE;
if (elm_widget_is_legacy(obj))
{
@@ -1504,7 +1506,8 @@ _efl_ui_layout_text_generic_set(Eo *obj, Efl_Ui_Layout_Data *sd, const char *par
sd->subs = eina_list_append(sd->subs, sub_d);
}
- _text_signal_emit(sd, sub_d, EINA_TRUE);
+ if ((!strcmp(part, "elm.text") || !strcmp(part, "efl.text")))
+ _text_signal_emit(sd, sub_d, EINA_TRUE);
efl_canvas_group_change(obj);
@@ -1918,6 +1921,16 @@ _efl_ui_layout_base_efl_layout_group_part_exist_get(const Eo *obj, Efl_Ui_Layout
}
EOLIAN static void
+_efl_ui_layout_base_efl_canvas_group_group_change(Eo *obj, Efl_Ui_Layout_Data *sd)
+{
+ if (sd->frozen)
+ /* cleared in thaw */
+ sd->frozen_changed = EINA_TRUE;
+ else
+ efl_canvas_group_change(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
_elm_layout_efl_canvas_group_change(Eo *obj, Elm_Layout_Data *ld)
{
Efl_Ui_Layout_Data *sd;
@@ -1983,7 +1996,9 @@ _efl_ui_layout_base_efl_layout_calc_calc_thaw(Eo *obj, Efl_Ui_Layout_Data *sd)
if (!ret)
{
sd->frozen = EINA_FALSE;
- efl_canvas_group_change(obj);
+ if (sd->frozen_changed)
+ efl_canvas_group_change(obj);
+ sd->frozen_changed = EINA_FALSE;
}
return ret;
@@ -2018,10 +2033,13 @@ _efl_ui_layout_base_efl_layout_calc_calc_parts_extends(Eo *obj EINA_UNUSED, Efl_
}
EOLIAN void
-_efl_ui_layout_base_efl_layout_calc_calc_force(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Data *sd EINA_UNUSED)
+_efl_ui_layout_base_efl_layout_calc_calc_force(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Data *sd)
{
+ Eina_Bool prev_frozen = sd->frozen;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+ sd->frozen = EINA_FALSE;
efl_layout_calc_force(wd->resize_obj);
+ sd->frozen = prev_frozen;
}
static Eina_Bool
@@ -2730,6 +2748,8 @@ _efl_ui_layout_base_efl_object_finalize(Eo *obj, Efl_Ui_Layout_Data *pd)
/* handle case where subclass does not call into layout */
pd->needs_theme_apply = EINA_FALSE;
}
+ else if (pd->deferred_signals)
+ _deferred_signals_emit(pd);
efl_canvas_group_change(obj);
Elm_Layout_Data *ld = efl_data_scope_safe_get(obj, ELM_LAYOUT_MIXIN);
@@ -2840,7 +2860,7 @@ _efl_ui_layout_base_efl_part_part_get(const Eo *obj, Efl_Ui_Layout_Data *sd EINA
{
case EFL_CANVAS_LAYOUT_PART_TYPE_BOX:
case EFL_CANVAS_LAYOUT_PART_TYPE_TABLE:
- return _efl_ui_layout_pack_proxy_get((Eo *) obj, type, part);
+ return _efl_ui_layout_pack_proxy_get((Eo *) obj, (Edje_Part_Type)type, part);
case EFL_CANVAS_LAYOUT_PART_TYPE_TEXT:
case EFL_CANVAS_LAYOUT_PART_TYPE_TEXTBLOCK:
return ELM_PART_IMPLEMENT(EFL_UI_LAYOUT_PART_TEXT_CLASS, obj, part);
@@ -3272,6 +3292,26 @@ _elm_layout_signal_callback_add_legacy(Eo *obj, Eo *edje, Eina_List **p_edje_sig
_edje_signal_callback, esd);
}
+/* replicated from elm_layout just because legacy widget's icon spot
+ * is elm.swallow.content, not elm.swallow.icon.
+ */
+void
+_elm_layout_legacy_icon_signal_emit(Evas_Object *obj)
+{
+ char buf[63];
+ Eo *edje;
+
+ edje = elm_layout_edje_get(obj);
+ if (!edje) return;
+ if (!edje_object_part_exists(obj, "elm.swallow.content")) return;
+ snprintf(buf, sizeof(buf), "elm,state,icon,%s",
+ elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
+
+ elm_layout_signal_emit(obj, buf, "elm");
+ edje_object_message_signal_process(edje);
+ efl_canvas_group_change(obj);
+}
+
EAPI void
elm_layout_signal_callback_add(Eo *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
{
diff --git a/src/lib/elementary/efl_ui_layout.eo b/src/lib/elementary/efl_ui_layout.eo
index f8ff7a9e39..ab4d67c1e3 100644
--- a/src/lib/elementary/efl_ui_layout.eo
+++ b/src/lib/elementary/efl_ui_layout.eo
@@ -1,5 +1,3 @@
-import efl_ui;
-
class Efl.Ui.Layout extends Efl.Ui.Layout_Base implements Efl.File
{
[[EFL layout widget class.
@@ -21,6 +19,5 @@ class Efl.Ui.Layout extends Efl.Ui.Layout_Base implements Efl.File
Efl.File.load;
Efl.File.unload;
Efl.Object.constructor;
- Efl.Canvas.Group.group_calculate;
}
}
diff --git a/src/lib/elementary/efl_ui_layout_base.eo b/src/lib/elementary/efl_ui_layout_base.eo
index 8cd206c310..6cd8425276 100644
--- a/src/lib/elementary/efl_ui_layout_base.eo
+++ b/src/lib/elementary/efl_ui_layout_base.eo
@@ -1,5 +1,3 @@
-import efl_ui;
-
abstract Efl.Ui.Layout_Base extends Efl.Ui.Widget implements Efl.Container,
Efl.Ui.Factory_Bind,
Efl.Layout.Calc, Efl.Layout.Signal,
@@ -110,6 +108,7 @@ abstract Efl.Ui.Layout_Base extends Efl.Ui.Widget implements Efl.Container,
Efl.Object.finalize;
Efl.Object.invalidate;
Efl.Canvas.Group.group_calculate;
+ Efl.Canvas.Group.group_change;
Efl.Layout.Calc.calc_freeze;
Efl.Layout.Calc.calc_thaw;
Efl.Layout.Calc.calc_auto_update_hints { get; set; }
diff --git a/src/lib/elementary/efl_ui_layout_legacy_eo.h b/src/lib/elementary/efl_ui_layout_legacy_eo.h
index 687bd590c5..82ffd9e676 100644
--- a/src/lib/elementary/efl_ui_layout_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_layout_legacy_eo.h
@@ -21,8 +21,8 @@ typedef Eo Efl_Ui_Layout_Legacy;
#define EFL_UI_LAYOUT_LEGACY_CLASS efl_ui_layout_legacy_class_get()
#define ELM_LAYOUT_MIXIN elm_layout_mixin_get()
-EWAPI const Efl_Class *efl_ui_layout_legacy_class_get(void);
-EWAPI const Efl_Class *elm_layout_mixin_get(void);
+EWAPI const Efl_Class *efl_ui_layout_legacy_class_get(void) EINA_CONST;
+EWAPI const Efl_Class *elm_layout_mixin_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_multi_selectable_index_range.eo b/src/lib/elementary/efl_ui_multi_selectable_index_range.eo
index fd683fbd06..1a538beca3 100644
--- a/src/lib/elementary/efl_ui_multi_selectable_index_range.eo
+++ b/src/lib/elementary/efl_ui_multi_selectable_index_range.eo
@@ -1,5 +1,3 @@
-import efl_ui;
-
interface Efl.Ui.Multi_Selectable_Index_Range extends Efl.Ui.Multi_Selectable
{
[[Interface for getting access to a range of selected items through their indices.
diff --git a/src/lib/elementary/efl_ui_multi_selectable_object_range.eo b/src/lib/elementary/efl_ui_multi_selectable_object_range.eo
index 1f7db5e67a..deae601834 100644
--- a/src/lib/elementary/efl_ui_multi_selectable_object_range.eo
+++ b/src/lib/elementary/efl_ui_multi_selectable_object_range.eo
@@ -1,5 +1,3 @@
-import efl_ui;
-
interface Efl.Ui.Multi_Selectable_Object_Range extends Efl.Ui.Multi_Selectable
{
[[Interface for getting access to a range of selected items.
diff --git a/src/lib/elementary/efl_ui_pager.c b/src/lib/elementary/efl_ui_pager.c
index 8ac5a429cc..33ab9bf9bd 100644
--- a/src/lib/elementary/efl_ui_pager.c
+++ b/src/lib/elementary/efl_ui_pager.c
@@ -18,7 +18,7 @@ _efl_ui_pager_efl_object_constructor(Eo *obj, Efl_Ui_Pager_Data *sd EINA_UNUSED)
obj = efl_constructor(efl_super(obj, MY_CLASS));
- scroller = efl_new(EFL_UI_SPOTLIGHT_MANAGER_SCROLL_CLASS);
+ scroller = efl_new(EFL_UI_SPOTLIGHT_SCROLL_MANAGER_CLASS);
efl_ui_spotlight_manager_set(obj, scroller);
return obj;
diff --git a/src/lib/elementary/efl_ui_pager.eo b/src/lib/elementary/efl_ui_pager.eo
index 08840922e8..1f9a7a06e0 100644
--- a/src/lib/elementary/efl_ui_pager.eo
+++ b/src/lib/elementary/efl_ui_pager.eo
@@ -1,8 +1,10 @@
-class @beta Efl.Ui.Pager extends Efl.Ui.Spotlight.Container
+class Efl.Ui.Pager extends Efl.Ui.Spotlight.Container
{
[[A spotlight with predefined @Efl.Ui.Spotlight.Container.spotlight_manager
The container will slide in the content sideways, the old content will slide out.
+
+ @since 1.24
]]
implements {
Efl.Object.constructor;
diff --git a/src/lib/elementary/efl_ui_panel.c b/src/lib/elementary/efl_ui_panel.c
index c173224a5f..212ce3de5d 100644
--- a/src/lib/elementary/efl_ui_panel.c
+++ b/src/lib/elementary/efl_ui_panel.c
@@ -886,9 +886,6 @@ _efl_ui_panel_efl_object_constructor(Eo *obj, Efl_Ui_Panel_Data *_pd)
EOLIAN static void
_efl_ui_panel_efl_object_destructor(Eo *obj, Efl_Ui_Panel_Data *sd)
{
- Evas_Object *child;
- Eina_List *l;
-
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
sd->delete_me = EINA_TRUE;
@@ -897,15 +894,15 @@ _efl_ui_panel_efl_object_destructor(Eo *obj, Efl_Ui_Panel_Data *sd)
/* let's make our panel object the *last* to be processed, since it
* may (smart) parent other sub objects here */
- EINA_LIST_FOREACH(wd->subobjs, l, child)
- {
- if (child == sd->bx)
- {
- wd->subobjs =
- eina_list_demote_list(wd->subobjs, l);
- break;
- }
- }
+ {
+ unsigned int resize_id = 0;
+ if (eina_array_find(wd->children, wd->resize_obj, &resize_id))
+ {
+ //exchange with last
+ eina_array_data_set(wd->children, resize_id, eina_array_data_get(wd->children, eina_array_count(wd->children) - 1));
+ eina_array_data_set(wd->children, eina_array_count(wd->children) - 1, wd->resize_obj);
+ }
+ }
efl_destructor(efl_super(obj, MY_CLASS));
}
diff --git a/src/lib/elementary/efl_ui_panel_private.h b/src/lib/elementary/efl_ui_panel_private.h
index f1c3b93ae5..0e844181a1 100644
--- a/src/lib/elementary/efl_ui_panel_private.h
+++ b/src/lib/elementary/efl_ui_panel_private.h
@@ -12,17 +12,6 @@
*/
/**
- * @addtogroup Widget
- * @{
- *
- * @section elm-panel-class The Elementary Panel Class
- *
- * Elementary, besides having the @ref Panel widget, exposes its
- * foundation -- the Elementary Panel Class -- in order to create other
- * widgets which are a panel with some more logic on top.
- */
-
-/**
* Base layout smart data extended with panel instance data.
*/
typedef struct _Efl_Ui_Panel_Data Efl_Ui_Panel_Data;
@@ -50,10 +39,6 @@ struct _Efl_Ui_Panel_Data
Eina_Bool callback_added: 1;
};
-/**
- * @}
- */
-
#define EFL_UI_PANEL_DATA_GET(o, sd) \
Efl_Ui_Panel_Data * sd = efl_data_scope_get(o, EFL_UI_PANEL_CLASS)
diff --git a/src/lib/elementary/efl_ui_panes.c b/src/lib/elementary/efl_ui_panes.c
index 3047fb3052..1b2c765ee1 100644
--- a/src/lib/elementary/efl_ui_panes.c
+++ b/src/lib/elementary/efl_ui_panes.c
@@ -181,7 +181,7 @@ _on_pressed(void *data,
const char *emission EINA_UNUSED,
const char *source EINA_UNUSED)
{
- efl_event_callback_legacy_call(data, ELM_PANES_EVENT_PRESS, NULL);
+ evas_object_smart_callback_call(data, "press", NULL);
efl_input_clickable_press(data, 1);
}
@@ -192,7 +192,7 @@ _on_unpressed(void *data,
const char *source EINA_UNUSED)
{
EFL_UI_PANES_DATA_GET(data, sd);
- efl_event_callback_legacy_call(data, ELM_PANES_EVENT_UNPRESS, NULL);
+ evas_object_smart_callback_call(data, "unpress", NULL);
efl_input_clickable_unpress(data, 1);
if (sd->double_clicked)
{
diff --git a/src/lib/elementary/efl_ui_panes.eo b/src/lib/elementary/efl_ui_panes.eo
index 00d13530df..6c6402c356 100644
--- a/src/lib/elementary/efl_ui_panes.eo
+++ b/src/lib/elementary/efl_ui_panes.eo
@@ -53,8 +53,4 @@ class @beta Efl.Ui.Panes extends Efl.Ui.Layout_Base implements Efl.Ui.Layout_Ori
Default is $vertical.]] }
Efl.Part.part_get;
}
- events {
- press: void; [[Called when panes got pressed]]
- unpress: void; [[Called when panes are no longer pressed]]
- }
}
diff --git a/src/lib/elementary/efl_ui_panes_legacy_eo.h b/src/lib/elementary/efl_ui_panes_legacy_eo.h
index 692578c8ca..b4a63f4ca3 100644
--- a/src/lib/elementary/efl_ui_panes_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_panes_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Panes_Legacy;
*/
#define EFL_UI_PANES_LEGACY_CLASS efl_ui_panes_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_panes_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_panes_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_position_manager_list.c b/src/lib/elementary/efl_ui_position_manager_list.c
index 6424b4bf4d..dd90b12b2b 100644
--- a/src/lib/elementary/efl_ui_position_manager_list.c
+++ b/src/lib/elementary/efl_ui_position_manager_list.c
@@ -69,6 +69,7 @@ cache_require(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data *pd)
}
pd->size_cache = calloc(pd->size + 1, sizeof(int));
+ if (!pd->size_cache) return;
pd->size_cache[0] = 0;
pd->maximum_min_size = 0;
diff --git a/src/lib/elementary/efl_ui_progressbar.c b/src/lib/elementary/efl_ui_progressbar.c
index 61c6ece78b..bf0f14764a 100644
--- a/src/lib/elementary/efl_ui_progressbar.c
+++ b/src/lib/elementary/efl_ui_progressbar.c
@@ -4,7 +4,6 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define ELM_LAYOUT_PROTECTED
-#define EFL_ACCESS_VALUE_PROTECTED
#define EFL_PART_PROTECTED
#define EFL_UI_FORMAT_PROTECTED
@@ -134,62 +133,13 @@ _val_set(Evas_Object *obj)
}
}
-//TODO: efl_ui_slider also use this.
-static const char *
-_theme_group_modify_pos_get(const char *cur_group, const char *search, size_t len, Eina_Bool is_legacy)
-{
- const char *pos = NULL;
- const char *temp_str = NULL;
-
- if (is_legacy)
- return cur_group;
-
- temp_str = cur_group + len - strlen(search);
- if (temp_str >= cur_group)
- {
- if (!strcmp(temp_str, search))
- pos = temp_str;
- }
-
- return pos;
-}
-
-static char *
-_efl_ui_progressbar_theme_group_get(Evas_Object *obj, Efl_Ui_Progressbar_Data *sd)
+static void
+_sync_widget_theme_klass(Eo *obj, Efl_Ui_Progressbar_Data *pd)
{
- const char *pos = NULL;
- const char *cur_group = elm_widget_theme_element_get(obj);
- Eina_Strbuf *new_group = eina_strbuf_new();
- Eina_Bool is_legacy = elm_widget_is_legacy(obj);
- size_t len = 0;
-
- if (cur_group)
- {
- len = strlen(cur_group);
- pos = _theme_group_modify_pos_get(cur_group, "horizontal", len, is_legacy);
- if (!pos)
- pos = _theme_group_modify_pos_get(cur_group, "vertical", len, is_legacy);
-
-
- // TODO: change separator when it is decided.
- // can skip when prev_group == cur_group
- if (!pos)
- {
- eina_strbuf_append(new_group, cur_group);
- eina_strbuf_append(new_group, "/");
- }
- else
- {
- eina_strbuf_append_length(new_group, cur_group, pos - cur_group);
- }
- }
-
- if (_is_horizontal(sd->dir))
- eina_strbuf_append(new_group, "horizontal");
+ if (efl_ui_layout_orientation_is_horizontal(pd->dir, EINA_TRUE))
+ elm_widget_theme_element_set(obj, "horizontal");
else
- eina_strbuf_append(new_group, "vertical");
-
- return eina_strbuf_release(new_group);
+ elm_widget_theme_element_set(obj, "vertical");
}
EOLIAN static Eina_Error
@@ -197,7 +147,7 @@ _efl_ui_progressbar_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Progressbar_Data *
{
Eina_Error int_ret = EFL_UI_THEME_APPLY_ERROR_GENERIC;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EFL_UI_THEME_APPLY_ERROR_GENERIC);
- char *group;
+
const char *statuspart[] =
{
"efl.text.status",
@@ -208,13 +158,7 @@ _efl_ui_progressbar_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Progressbar_Data *
"efl.cur.progressbar",
"elm.cur.progressbar",
};
-
- group = _efl_ui_progressbar_theme_group_get(obj, sd);
- if (group)
- {
- elm_widget_theme_element_set(obj, group);
- free(group);
- }
+ _sync_widget_theme_klass(obj, sd);
int_ret = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS));
if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret;
@@ -284,6 +228,11 @@ _efl_ui_progressbar_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Progressbar_Data *
edje_object_message_signal_process(wd->resize_obj);
+ if (elm_widget_is_legacy(obj))
+ elm_layout_content_set(obj, "elm.swallow.bar", sd->spacer);
+ else
+ elm_layout_content_set(obj, "efl.bar", sd->spacer);
+
return int_ret;
}
@@ -330,10 +279,7 @@ EOLIAN static void
_efl_ui_progressbar_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Progressbar_Data *priv)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
- char *group;
- if (!elm_widget_theme_klass_get(obj))
- elm_widget_theme_klass_set(obj, "progressbar");
efl_canvas_group_add(efl_super(obj, MY_CLASS));
efl_ui_layout_finger_size_multiplier_set(obj, 0, 0);
@@ -341,14 +287,6 @@ _efl_ui_progressbar_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Progressbar_Data
priv->dir = EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
priv->val = MIN_RATIO_LVL;
priv->val_max = 1.0;
- group = _efl_ui_progressbar_theme_group_get(obj, priv);
-
- if (elm_widget_theme_object_set(obj, wd->resize_obj,
- elm_widget_theme_klass_get(obj),
- group,
- elm_widget_theme_style_get(obj)) == EFL_UI_THEME_APPLY_ERROR_GENERIC)
-
- free(group);
efl_ui_format_string_set(obj, "%.0f%%", EFL_UI_FORMAT_STRING_TYPE_SIMPLE);
@@ -356,11 +294,6 @@ _efl_ui_progressbar_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Progressbar_Data
evas_object_color_set(priv->spacer, 0, 0, 0, 0);
evas_object_pass_events_set(priv->spacer, EINA_TRUE);
- if (elm_widget_is_legacy(obj))
- elm_layout_content_set(obj, "elm.swallow.bar", priv->spacer);
- else
- elm_layout_content_set(obj, "efl.bar", priv->spacer);
-
_units_set(obj);
_val_set(obj);
@@ -398,6 +331,9 @@ _efl_ui_progressbar_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Progressbar_Data
EOLIAN static Eo *
_efl_ui_progressbar_efl_object_constructor(Eo *obj, Efl_Ui_Progressbar_Data *_pd EINA_UNUSED)
{
+ if (!elm_widget_theme_klass_get(obj))
+ elm_widget_theme_klass_set(obj, "progressbar");
+
obj = efl_constructor(efl_super(obj, MY_CLASS));
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
efl_access_object_role_set(obj, EFL_ACCESS_ROLE_PROGRESS_BAR);
@@ -407,23 +343,6 @@ _efl_ui_progressbar_efl_object_constructor(Eo *obj, Efl_Ui_Progressbar_Data *_pd
}
EOLIAN static void
-_efl_ui_progressbar_pulse_mode_set(Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *sd, Eina_Bool pulse)
-{
- pulse = !!pulse;
- if (sd->pulse == pulse) return;
-
- sd->pulse = pulse;
-
- efl_ui_widget_theme_apply(obj);
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_progressbar_pulse_mode_get(const Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *sd)
-{
- return sd->pulse;
-}
-
-EOLIAN static void
_efl_ui_progressbar_efl_ui_layout_orientable_orientation_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, Efl_Ui_Layout_Orientation dir)
{
if (sd->dir == dir) return;
@@ -514,6 +433,18 @@ _progress_part_min_max_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, const char *par
}
static void
+_internal_theme_mode_pulse_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, Eina_Bool pulse)
+{
+ if (elm_widget_is_legacy(obj))
+ return;
+ if (sd->pulse == pulse)
+ return;
+ sd->pulse = pulse;
+ efl_ui_widget_theme_apply(obj);
+}
+
+
+static void
_progressbar_part_value_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, const char *part_name, double val)
{
Efl_Ui_Progress_Status *ps;
@@ -527,6 +458,8 @@ _progressbar_part_value_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, const char *pa
};
Eina_Bool is_cur_progressbar = !strcmp(part_name, curprogresspart[elm_widget_is_legacy(obj)]);
+ _internal_theme_mode_pulse_set(obj, sd, EINA_FALSE);
+
if ((!is_cur_progressbar) || sd->has_cur_progressbar_part)
efl_ui_range_limits_get(efl_part(obj, part_name), &min, &max);
@@ -564,9 +497,9 @@ _progressbar_part_value_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, const char *pa
else
{
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
- if (sd->val == min)
+ if (EINA_DBL_EQ(sd->val, min))
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MIN_REACHED, NULL);
- if (sd->val == max)
+ if (EINA_DBL_EQ(sd->val, max))
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MAX_REACHED, NULL);
}
}
@@ -618,32 +551,34 @@ _efl_ui_progressbar_efl_ui_range_display_range_value_get(const Eo *obj, Efl_Ui_P
return efl_ui_range_value_get(efl_part(obj, "efl.cur.progressbar"));
}
+static void
+_apply_pulse_state(Eo *obj, Efl_Ui_Progressbar_Data *sd)
+{
+ Eina_Bool legacy = elm_widget_is_legacy(obj);
+ const char *emitter = legacy ? "elm" : "efl";
+ const char *signal = legacy ? "elm,state,pulse," : "efl,state,pulse,";
+ char signal_buffer[strlen(signal) + strlen("start") + 1];
+
+ snprintf(signal_buffer, sizeof(signal_buffer), "%s%s", signal, sd->pulse_state ? "start" : "stop");
+ elm_layout_signal_emit(obj, signal_buffer, emitter);
+}
+
EOLIAN static void
-_efl_ui_progressbar_pulse_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, Eina_Bool state)
+_efl_ui_progressbar_infinite_mode_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, Eina_Bool state)
{
state = !!state;
- if ((!sd->pulse) || (sd->pulse_state == state)) return;
+
+ if (sd->pulse_state == state)
+ return;
sd->pulse_state = state;
- if (elm_widget_is_legacy(obj))
- {
- if (sd->pulse_state)
- elm_layout_signal_emit(obj, "elm,state,pulse,start", "elm");
- else
- elm_layout_signal_emit(obj, "elm,state,pulse,stop", "elm");
- }
- else
- {
- if (sd->pulse_state)
- elm_layout_signal_emit(obj, "efl,state,pulse,start", "efl");
- else
- elm_layout_signal_emit(obj, "efl,state,pulse,stop", "efl");
- }
+ _internal_theme_mode_pulse_set(obj, sd, EINA_TRUE);
+ _apply_pulse_state(obj, sd);
}
EOLIAN static Eina_Bool
-_efl_ui_progressbar_pulse_get(const Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *sd)
+_efl_ui_progressbar_infinite_mode_get(const Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *sd)
{
return (sd->pulse_state && sd->pulse);
}
@@ -682,10 +617,17 @@ _efl_ui_progressbar_efl_part_part_get(const Eo *obj, Efl_Ui_Progressbar_Data *sd
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
- // Progress bars are dragable types
- if (edje_object_part_drag_dir_get(wd->resize_obj, part) != (Edje_Drag_Dir)EFL_UI_DRAG_DIR_NONE)
- return ELM_PART_IMPLEMENT(EFL_UI_PROGRESSBAR_PART_CLASS, obj, part);
-
+ if (elm_widget_is_legacy(obj))
+ {
+ // Progress bars are dragable types
+ if (edje_object_part_drag_dir_get(wd->resize_obj, part) != (Edje_Drag_Dir)EFL_UI_DRAG_DIR_NONE)
+ return ELM_PART_IMPLEMENT(EFL_UI_PROGRESSBAR_PART_CLASS, obj, part);
+ }
+ else
+ {
+ if (eina_streq(part, "efl.cur.progressbar"))
+ return ELM_PART_IMPLEMENT(EFL_UI_PROGRESSBAR_PART_CLASS, obj, part);
+ }
return efl_part_get(efl_super(obj, MY_CLASS), part);
}
@@ -708,12 +650,6 @@ _efl_ui_progressbar_part_efl_ui_range_display_range_value_get(const Eo *obj, voi
}
EOLIAN static void
-_efl_ui_progressbar_efl_access_value_value_and_text_get(const Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *_pd, double *value, const char **text EINA_UNUSED)
-{
- if (value) *value = _pd->val;
-}
-
-EOLIAN static void
_efl_ui_progressbar_part_efl_ui_range_display_range_limits_set(Eo *obj, void *_pd EINA_UNUSED, double min, double max)
{
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
@@ -811,23 +747,6 @@ _efl_ui_progressbar_legacy_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
/* FIXME: replicated from elm_layout just because progressbar's icon spot
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
* can changed the theme API */
-static void
-_icon_signal_emit(Evas_Object *obj)
-{
- char buf[64];
-
- if (!elm_widget_resize_object_get(obj)) return;
- snprintf(buf, sizeof(buf), "elm,state,icon,%s",
- elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
-
- elm_layout_signal_emit(obj, buf, "elm");
- edje_object_message_signal_process(elm_layout_edje_get(obj));
- efl_canvas_group_change(obj);
-}
-
-/* FIXME: replicated from elm_layout just because progressbar's icon spot
- * is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
- * can changed the theme API */
EOLIAN static Eina_Error
_efl_ui_progressbar_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
{
@@ -835,7 +754,7 @@ _efl_ui_progressbar_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNU
int_ret = efl_ui_widget_theme_apply(efl_super(obj, EFL_UI_PROGRESSBAR_LEGACY_CLASS));
if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret;
- _icon_signal_emit(obj);
+ if (efl_finalized_get(obj)) _elm_layout_legacy_icon_signal_emit(obj);
return int_ret;
}
@@ -851,7 +770,7 @@ _efl_ui_progressbar_legacy_efl_ui_widget_widget_sub_object_del(Eo *obj, void *_p
int_ret = elm_widget_sub_object_del(efl_super(obj, EFL_UI_PROGRESSBAR_LEGACY_CLASS), sobj);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
@@ -867,7 +786,7 @@ _efl_ui_progressbar_legacy_content_set(Eo *obj, void *_pd EINA_UNUSED, const cha
int_ret = efl_content_set(efl_part(efl_super(obj, EFL_UI_PROGRESSBAR_LEGACY_CLASS), part), content);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
@@ -899,25 +818,40 @@ elm_progressbar_add(Evas_Object *parent)
EAPI void
elm_progressbar_pulse_set(Evas_Object *obj, Eina_Bool pulse)
{
- efl_ui_progressbar_pulse_mode_set(obj, pulse);
+ EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(obj, sd);
+ pulse = !!pulse;
+ if (sd->pulse == pulse) return;
+
+ sd->pulse = pulse;
+
+ efl_ui_widget_theme_apply(obj);
}
EAPI Eina_Bool
elm_progressbar_pulse_get(const Evas_Object *obj)
{
- return efl_ui_progressbar_pulse_mode_get(obj);
+ EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(obj, sd, EINA_FALSE);
+ return sd->pulse;
}
EAPI void
elm_progressbar_pulse(Evas_Object *obj, Eina_Bool state)
{
- efl_ui_progressbar_pulse_set(obj, state);
+ EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(obj, sd);
+
+ state = !!state;
+ if ((!sd->pulse) || (sd->pulse_state == state)) return;
+
+ sd->pulse_state = state;
+
+ _apply_pulse_state(obj, sd);
}
EAPI Eina_Bool
elm_progressbar_is_pulsing_get(const Evas_Object *obj)
{
- return efl_ui_progressbar_pulse_get(obj);
+ EFL_UI_PROGRESSBAR_DATA_GET_OR_RETURN(obj, sd, EINA_FALSE);
+ return (sd->pulse_state && sd->pulse);
}
EAPI void
diff --git a/src/lib/elementary/efl_ui_progressbar.eo b/src/lib/elementary/efl_ui_progressbar.eo
index e2994a266f..abd4d9b49b 100644
--- a/src/lib/elementary/efl_ui_progressbar.eo
+++ b/src/lib/elementary/efl_ui_progressbar.eo
@@ -1,49 +1,44 @@
class @beta Efl.Ui.Progressbar extends Efl.Ui.Layout_Base implements Efl.Ui.Range_Display, Efl.Ui.Format,
- Efl.Ui.Layout_Orientable, Efl.Access.Value,
+ Efl.Ui.Layout_Orientable,
Efl.Text, Efl.Content, Efl.Text_Markup
{
- [[Elementary progressbar class]]
- methods {
- @property pulse_mode {
- [[Control whether a given progress bar widget is at "pulsing mode" or not.
+ [[Progress bar widget.
- By default progress bars display values from low to
- high boundaries. There are situations however in which the
- progress of a given task is unknown. In these cases,
- you can set a progress bar widget to a "pulsing state" to give
- the user an idea that some computation is being done
- without showing the precise progress rate. In the default theme, it will
- animate the bar with content, switching constantly between filling it and back
- to non-filled in a loop. To start and stop this pulsing
- animation you need to explicitly call @.pulse.set().
- ]]
+ It shows a graphical indication of the current progress of some lengthy operation,
+ typically as a bar that gradually fills or a pointer that moves from one side of the
+ bar to the other. The bar can be horizontal or vertical, controlled with @Efl.Ui.Layout_Orientable.
- set {
- }
- get {
- }
- values {
- pulse: bool; [[$true to put $obj in pulsing mode, $false to put it back to its default one]]
- }
- }
- @property pulse {
- [[Start/stop a given progress bar "pulsing" animation, if its under that mode.
+ The minimum and maximum values (or starting and ending values), along with the current
+ value can be set using the @Efl.Ui.Range_Display interface.
- Note: This call won't do anything if $obj is not under "pulsing mode". See @.pulse_mode.
+ @.infinite_mode can be set when the progress state is unknown.
+ An optional textual label can be shown to indicate the exact numerical value of the progress.
+
+ @since 1.24
+ ]]
+ methods {
+ @property infinite_mode {
+ [[When this mode is enabled the progress bar indicates that there is an operation
+ going on, but does not give information about its progress.
+ This is typically shown as a "pulsing" animation or an endless spinning bar,
+ depending on the theme.
]]
set {
}
get {
}
values {
- state: bool; [[$true, to start the pulsing animation, $false to stop it]]
+ state: bool; [[$true if the progress bar should animate infinitely.]]
}
}
@property show_progress_label {
- [[Whether a textual progress label is shown alongside the progressbar to give an exact
- numerical indication of the current progress.
+ [[Whether a textual progress label is shown alongside the progress bar to give an exact
+ numerical indication of the current progress. Control the conversion of the numerical
+ value to a text string using @Efl.Ui.Format.
Not to be confused with the widget label set through @Efl.Text.text.
+
+ The exact location and appearance of the progress label depend on the theme.
]]
values {
show: bool; [[$true to show the progress label.]]
@@ -58,7 +53,6 @@ class @beta Efl.Ui.Progressbar extends Efl.Ui.Layout_Base implements Efl.Ui.Rang
Efl.Ui.Layout_Orientable.orientation { get; set; }
Efl.Ui.Format.apply_formatted_value;
Efl.Part.part_get;
- Efl.Access.Value.value_and_text { get; }
Efl.Text.text { get; set; }
Efl.Text_Markup.markup { get; set; }
Efl.Content.content { get; set; }
diff --git a/src/lib/elementary/efl_ui_progressbar_legacy_eo.h b/src/lib/elementary/efl_ui_progressbar_legacy_eo.h
index 00807e3fc4..8606e2deaa 100644
--- a/src/lib/elementary/efl_ui_progressbar_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_progressbar_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Progressbar_Legacy;
*/
#define EFL_UI_PROGRESSBAR_LEGACY_CLASS efl_ui_progressbar_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_progressbar_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_progressbar_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_progressbar_private.h b/src/lib/elementary/efl_ui_progressbar_private.h
index 48b999b532..7d75ca38b2 100644
--- a/src/lib/elementary/efl_ui_progressbar_private.h
+++ b/src/lib/elementary/efl_ui_progressbar_private.h
@@ -32,7 +32,7 @@ struct _Efl_Ui_Progressbar_Data
Evas_Coord size; /**< Width or height of progressbar */
double val; /**< Value of progressbar */
-
+
double val_min;
double val_max;
diff --git a/src/lib/elementary/efl_ui_radio.c b/src/lib/elementary/efl_ui_radio.c
index e631cb81f3..e78168318c 100644
--- a/src/lib/elementary/efl_ui_radio.c
+++ b/src/lib/elementary/efl_ui_radio.c
@@ -336,25 +336,6 @@ _efl_ui_radio_legacy_efl_object_constructor(Eo *obj, void *_pd EINA_UNUSED)
return obj;
}
-/* FIXME: replicated from elm_layout just because radio's icon spot
- * is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
- * can changed the theme API */
-static void
-_icon_signal_emit(Evas_Object *obj)
-{
- char buf[63];
- Eo *edje;
-
- edje = elm_widget_resize_object_get(obj);
- if (!edje) return;
- snprintf(buf, sizeof(buf), "elm,state,icon,%s",
- elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
-
- elm_layout_signal_emit(obj, buf, "elm");
- edje_object_message_signal_process(edje);
- efl_canvas_group_change(obj);
-}
-
EOLIAN static Eina_Error
_efl_ui_radio_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
{
@@ -365,7 +346,7 @@ _efl_ui_radio_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
/* FIXME: replicated from elm_layout just because radio's icon
* spot is elm.swallow.content, not elm.swallow.icon. Fix that
* whenever we can changed the theme API */
- _icon_signal_emit(obj);
+ if (efl_finalized_get(obj)) _elm_layout_legacy_icon_signal_emit(obj);
return int_ret;
}
@@ -381,7 +362,7 @@ _efl_ui_radio_legacy_efl_ui_widget_widget_sub_object_del(Eo *obj, void *_pd EINA
int_ret = elm_widget_sub_object_del(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS), sobj);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
@@ -397,7 +378,7 @@ _efl_ui_radio_legacy_content_set(Eo *obj, void *_pd EINA_UNUSED, const char *par
int_ret = efl_content_set(efl_part(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS), part), content);
if (!int_ret) return EINA_FALSE;
- _icon_signal_emit(obj);
+ _elm_layout_legacy_icon_signal_emit(obj);
return EINA_TRUE;
}
diff --git a/src/lib/elementary/efl_ui_radio_group_impl.c b/src/lib/elementary/efl_ui_radio_group_impl.c
index 6a14f37115..ff1e085b8d 100644
--- a/src/lib/elementary/efl_ui_radio_group_impl.c
+++ b/src/lib/elementary/efl_ui_radio_group_impl.c
@@ -16,6 +16,18 @@ typedef struct {
Eina_Bool in_value_change;
} Efl_Ui_Radio_Group_Impl_Data;
+EOLIAN static void
+_efl_ui_radio_group_impl_efl_ui_single_selectable_allow_manual_deselection_set(Eo *obj EINA_UNUSED, Efl_Ui_Radio_Group_Impl_Data *pd EINA_UNUSED, Eina_Bool allow_manual_deselection EINA_UNUSED)
+{
+ if (allow_manual_deselection == EINA_FALSE)
+ ERR("This is right now not supported.");
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_radio_group_impl_efl_ui_single_selectable_allow_manual_deselection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Radio_Group_Impl_Data *pd EINA_UNUSED)
+{
+ return EINA_FALSE;
+}
EOLIAN static void
_efl_ui_radio_group_impl_efl_ui_single_selectable_fallback_selection_set(Eo *obj EINA_UNUSED, Efl_Ui_Radio_Group_Impl_Data *pd, Efl_Ui_Selectable *fallback)
diff --git a/src/lib/elementary/efl_ui_radio_group_impl.eo b/src/lib/elementary/efl_ui_radio_group_impl.eo
index 7e4fefe01b..6bc4379d39 100644
--- a/src/lib/elementary/efl_ui_radio_group_impl.eo
+++ b/src/lib/elementary/efl_ui_radio_group_impl.eo
@@ -12,5 +12,6 @@ class Efl.Ui.Radio_Group_Impl extends Efl.Object implements Efl.Ui.Radio_Group
Efl.Ui.Radio_Group.unregister;
Efl.Ui.Single_Selectable.last_selected {get;}
Efl.Ui.Single_Selectable.fallback_selection {set; get;}
+ Efl.Ui.Single_Selectable.allow_manual_deselection {set; get;}
}
}
diff --git a/src/lib/elementary/efl_ui_radio_legacy_eo.h b/src/lib/elementary/efl_ui_radio_legacy_eo.h
index 6e0cb00f12..6f37924eb6 100644
--- a/src/lib/elementary/efl_ui_radio_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_radio_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Radio_Legacy;
*/
#define EFL_UI_RADIO_LEGACY_CLASS efl_ui_radio_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_radio_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_radio_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_scroll_manager.c b/src/lib/elementary/efl_ui_scroll_manager.c
index 3d332e94fb..57edf11d65 100644
--- a/src/lib/elementary/efl_ui_scroll_manager.c
+++ b/src/lib/elementary/efl_ui_scroll_manager.c
@@ -1628,7 +1628,7 @@ _efl_ui_scroll_manager_post_event_move_on_hold_eval(Efl_Ui_Scroll_Manager_Data *
_elm_config->thumbscroll_hold_threshold;
}
- if ((vx != 0.0) || (vy != 0.0)) _scroll_manager_on_hold_animator_add(sd, vx*sx, vy*sy);
+ if (EINA_DBL_NONZERO(vx) || EINA_DBL_NONZERO(vy)) _scroll_manager_on_hold_animator_add(sd, vx*sx, vy*sy);
else _scroll_manager_on_hold_animator_del(sd);
}
@@ -2188,6 +2188,13 @@ _efl_ui_scrollbar_v_visibility_adjust(Eo *obj)
}
EOLIAN static void
+_efl_ui_scroll_manager_efl_ui_scrollbar_bar_visibility_get(const Eo *obj EINA_UNUSED, Efl_Ui_Scroll_Manager_Data *sd, Eina_Bool *hbar, Eina_Bool *vbar)
+{
+ if (hbar) *hbar = sd->hbar_visible;
+ if (vbar) *vbar = sd->vbar_visible;
+}
+
+EOLIAN static void
_efl_ui_scroll_manager_efl_ui_scrollbar_bar_visibility_update(Eo *obj, Efl_Ui_Scroll_Manager_Data *sd EINA_UNUSED)
{
_efl_ui_scrollbar_h_visibility_adjust(obj);
diff --git a/src/lib/elementary/efl_ui_scroll_manager.eo b/src/lib/elementary/efl_ui_scroll_manager.eo
index 957a4f4d4d..9dcd9f8a88 100644
--- a/src/lib/elementary/efl_ui_scroll_manager.eo
+++ b/src/lib/elementary/efl_ui_scroll_manager.eo
@@ -39,6 +39,7 @@ class @beta Efl.Ui.Scroll.Manager extends Efl.Object implements
Efl.Ui.Scrollbar.bar_mode { get; set; }
Efl.Ui.Scrollbar.bar_size { get; }
Efl.Ui.Scrollbar.bar_position { get; set; }
+ Efl.Ui.Scrollbar.bar_visibility { get; }
Efl.Ui.Scrollbar.bar_visibility_update;
Efl.Ui.Scrollable.scroll;
}
diff --git a/src/lib/elementary/efl_ui_scroll_util.c b/src/lib/elementary/efl_ui_scroll_util.c
index 673cac2eae..47d50165cd 100644
--- a/src/lib/elementary/efl_ui_scroll_util.c
+++ b/src/lib/elementary/efl_ui_scroll_util.c
@@ -14,9 +14,72 @@ typedef struct {
int freeze_want;
Eina_Bool scroll_count : 1;
Eina_Bool need_scroll : 1;
+ Eina_Bool show_up : 1;
+ Eina_Bool show_down : 1;
+ Eina_Bool show_left: 1;
+ Eina_Bool show_right : 1;
} Scroll_Connector_Context;
static void
+_scroll_connector_bar_direction_show_update(Scroll_Connector_Context *ctx)
+{
+ ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
+ Eina_Bool hbar_visible = EINA_FALSE, vbar_visible = EINA_FALSE;
+ Eina_Bool show_up = EINA_FALSE, show_down = EINA_FALSE, show_left = EINA_FALSE, show_right = EINA_FALSE;
+ double vx = 0.0, vy = 0.0;
+
+ edje_object_part_drag_value_get
+ (wd->resize_obj, "efl.draggable.vertical_bar", NULL, &vy);
+
+ edje_object_part_drag_value_get
+ (wd->resize_obj, "efl.draggable.horizontal_bar", &vx, NULL);
+
+ efl_ui_scrollbar_bar_visibility_get(ctx->smanager, &hbar_visible, &vbar_visible);
+ if (hbar_visible)
+ {
+ if (vx < 1.0) show_right = EINA_TRUE;
+ if (vx > 0.0) show_left = EINA_TRUE;
+ }
+ if (vbar_visible)
+ {
+ if (vy < 1.0) show_down = EINA_TRUE;
+ if (vy > 0.0) show_up = EINA_TRUE;
+ }
+ if (show_right != ctx->show_right)
+ {
+ if (show_right)
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,show,right", "efl");
+ else
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,hide,right", "efl");
+ ctx->show_right = show_right;
+ }
+ if (show_left != ctx->show_left)
+ {
+ if (show_left)
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,show,left", "efl");
+ else
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,hide,left", "efl");
+ ctx->show_left = show_left;
+ }
+ if (show_up != ctx->show_up)
+ {
+ if (show_up)
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,show,up", "efl");
+ else
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,hide,up", "efl");
+ ctx->show_up = show_up;
+ }
+ if (show_down != ctx->show_down)
+ {
+ if (show_down)
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,show,down", "efl");
+ else
+ efl_layout_signal_emit(wd->resize_obj, "efl,action,hide,down", "efl");
+ ctx->show_down = show_down;
+ }
+}
+
+static void
_scroll_connector_bar_read_and_update(Scroll_Connector_Context *ctx)
{
ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
@@ -29,6 +92,7 @@ _scroll_connector_bar_read_and_update(Scroll_Connector_Context *ctx)
(wd->resize_obj, "efl.draggable.horizontal_bar", &vx, NULL);
efl_ui_scrollbar_bar_position_set(ctx->smanager, vx, vy);
+ _scroll_connector_bar_direction_show_update(ctx);
}
static void
@@ -38,8 +102,23 @@ _scroll_connector_reload_cb(void *data,
const char *source EINA_UNUSED)
{
Scroll_Connector_Context *ctx = data;
+ ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
+ Eina_Bool hbar_visible = EINA_FALSE, vbar_visible = EINA_FALSE;
+
+ efl_ui_scrollbar_bar_visibility_get(ctx->smanager, &hbar_visible, &vbar_visible);
+
+ if (hbar_visible)
+ efl_layout_signal_emit(wd->resize_obj, "efl,horizontal_bar,visible,on", "efl");
+ else
+ efl_layout_signal_emit(wd->resize_obj, "efl,horizontal_bar,visible,off", "efl");
+
+ if (vbar_visible)
+ efl_layout_signal_emit(wd->resize_obj, "efl,vertical_bar,visible,on", "efl");
+ else
+ efl_layout_signal_emit(wd->resize_obj, "efl,vertical_bar,visible,off", "efl");
efl_ui_scrollbar_bar_visibility_update(ctx->smanager);
+ _scroll_connector_bar_direction_show_update(ctx);
}
@@ -230,6 +309,7 @@ _scroll_connector_bar_show_cb(void *data, const Efl_Event *event)
efl_layout_signal_emit(wd->resize_obj, "efl,horizontal_bar,visible,on", "efl");
else if (type == EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
efl_layout_signal_emit(wd->resize_obj, "efl,vertical_bar,visible,on", "efl");
+ _scroll_connector_bar_direction_show_update(ctx);
}
static void
@@ -243,6 +323,7 @@ _scroll_connector_bar_hide_cb(void *data, const Efl_Event *event)
efl_layout_signal_emit(wd->resize_obj, "efl,horizontal_bar,visible,off", "efl");
else if (type == EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
efl_layout_signal_emit(wd->resize_obj, "efl,vertical_bar,visible,off", "efl");
+ _scroll_connector_bar_direction_show_update(ctx);
}
void
diff --git a/src/lib/elementary/efl_ui_select_model.c b/src/lib/elementary/efl_ui_select_model.c
index 6852b50b40..683b6b2206 100644
--- a/src/lib/elementary/efl_ui_select_model.c
+++ b/src/lib/elementary/efl_ui_select_model.c
@@ -2,7 +2,7 @@
# include <config.h>
#endif
-// Note: we do not rely on reflection here to implement select as it require to asynchronously acces
+// Note: we do not rely on reflection here to implement select as it require to asynchronously access
// children. Could be done differently by implementing the children select in the parent instead of
// in the children. For later optimization.
@@ -24,18 +24,23 @@ struct _Efl_Ui_Select_Model_Data
Efl_Ui_Select_Model *last_model;
Efl_Ui_Select_Mode selection;
-
- Eina_Bool none : 1;
};
static void
+_efl_ui_select_model_apply_last_model(Eo *obj, Efl_Ui_Select_Model_Data *pd, Eo *last_model)
+{
+ efl_replace(&pd->last_model, last_model);
+ efl_model_properties_changed(obj, "child.selected");
+}
+
+static void
_efl_ui_select_model_child_removed(void *data, const Efl_Event *event)
{
Efl_Ui_Select_Model_Data *pd = data;
Efl_Model_Children_Event *ev = event->info;
if (ev->child == pd->last_model)
- efl_replace(&pd->last_model, NULL);
+ _efl_ui_select_model_apply_last_model(event->object, pd, NULL);
}
static Eo*
@@ -49,7 +54,6 @@ _efl_ui_select_model_efl_object_constructor(Eo *obj,
efl_boolean_model_boolean_add(obj, "selected", EINA_FALSE);
efl_event_callback_add(obj, EFL_MODEL_EVENT_CHILD_REMOVED, _efl_ui_select_model_child_removed, pd);
- pd->none = EINA_TRUE;
parent = efl_parent_get(obj);
if (efl_isa(parent, EFL_UI_SELECT_MODEL_CLASS))
@@ -64,7 +68,6 @@ _efl_ui_select_model_efl_object_invalidate(Eo *obj,
{
efl_replace(&pd->fallback_model, NULL);
efl_replace(&pd->last_model, NULL);
- pd->none = EINA_TRUE;
efl_invalidate(efl_super(obj, EFL_UI_SELECT_MODEL_CLASS));
}
@@ -75,7 +78,7 @@ _efl_ui_select_model_fallback(Efl_Ui_Select_Model_Data *pd)
Eina_Value selected;
if (!pd->parent) return;
- if (!pd->parent->none) return;
+ if (!pd->parent->last_model) return;
if (!pd->parent->fallback_model) return;
// I think it only make sense to trigger the fallback on single mode
if (pd->parent->selection != EFL_UI_SELECT_MODE_SINGLE) return;
@@ -129,8 +132,7 @@ _commit_change(Eo *child, void *data EINA_UNUSED, const Eina_Value v)
if (selflag)
{
// select case
- pd->none = EINA_FALSE;
- efl_replace(&pd->last_model, child);
+ _efl_ui_select_model_apply_last_model(parent, pd, child);
efl_event_callback_call(child, EFL_UI_SELECT_MODEL_EVENT_SELECTED, child);
}
else
@@ -139,8 +141,7 @@ _commit_change(Eo *child, void *data EINA_UNUSED, const Eina_Value v)
// There should only be one model which represent the same data at all in memory
if (pd->last_model == child) // direct comparison of pointer is ok
{
- efl_replace(&pd->last_model, NULL);
- pd->none = EINA_TRUE;
+ _efl_ui_select_model_apply_last_model(parent, pd, NULL);
// Just in case we need to refill the fallback
_efl_ui_select_model_fallback(pd);
@@ -401,13 +402,12 @@ _efl_ui_select_model_efl_model_property_set(Eo *obj,
{
if (pd->parent->last_model == obj && !newflag)
{
- efl_replace(&pd->last_model, NULL);
- pd->parent->none = EINA_TRUE;
+ _efl_ui_select_model_apply_last_model(efl_parent_get(obj), pd->parent, NULL);
_efl_ui_select_model_fallback(pd);
}
}
- else
+ else if (pd->parent->last_model)
{
Eo *parent;
unsigned long selected = 0;
@@ -431,6 +431,10 @@ _efl_ui_select_model_efl_model_property_set(Eo *obj,
.error = _untangle_error,
.free = _untangle_free);
}
+ else
+ {
+ _efl_ui_select_model_apply_last_model(efl_parent_get(obj), pd->parent, obj);
+ }
}
return efl_future_then(efl_ref(obj), chain,
@@ -450,10 +454,10 @@ _efl_ui_select_model_efl_model_property_get(const Eo *obj, Efl_Ui_Select_Model_D
// Last selected child
if (eina_streq("child.selected", property))
{
- if (pd->none)
- return eina_value_error_new(EFL_MODEL_ERROR_INCORRECT_VALUE);
- else if (pd->last_model)
+ if (pd->last_model)
return eina_value_ulong_new(efl_composite_model_index_get(pd->last_model));
+ else if (pd->fallback_model)
+ return eina_value_ulong_new(efl_composite_model_index_get(pd->fallback_model));
else // Nothing selected yet, try again later
return eina_value_error_new(EAGAIN);
}
@@ -539,7 +543,7 @@ _efl_ui_select_model_efl_ui_multi_selectable_all_select(Eo *obj,
unsigned int count, i;
// Not the fastest way to implement it, but will reuse more code and be easier as a v1.
- // It also make it not very async which could be noticable.
+ // It also make it not very async which could be noticeable.
count = efl_model_children_count_get(obj);
for (i = 0; i < count; i++)
@@ -569,7 +573,7 @@ _efl_ui_select_model_efl_ui_multi_selectable_index_range_ndx_range_select(Eo *ob
unsigned long count, i;
// Not the fastest way to implement it, but will reuse more code and be easier as a v1.
- // It also make it not very async which could be noticable.
+ // It also make it not very async which could be noticeable.
count = MIN(efl_model_children_count_get(obj), b + 1);
for (i = a; i < count; i++)
@@ -653,7 +657,7 @@ _efl_ui_select_model_efl_ui_single_selectable_fallback_selection_set(Eo *obj,
efl_replace(&pd->fallback_model, fallback);
- if (!pd->none) return ;
+ if (!pd->last_model) return ;
// When we provide a fallback, we should use it!
index = efl_model_property_get(fallback, EFL_COMPOSITE_MODEL_CHILD_INDEX);
diff --git a/src/lib/elementary/efl_ui_selection.c b/src/lib/elementary/efl_ui_selection.c
index 675eb0cf99..d67d1f3fef 100644
--- a/src/lib/elementary/efl_ui_selection.c
+++ b/src/lib/elementary/efl_ui_selection.c
@@ -9,278 +9,115 @@
#define MY_CLASS EFL_UI_SELECTION_MIXIN
#define MY_CLASS_NAME "Efl.Ui.Selection"
-#ifdef HAVE_ELEMENTARY_WL2
-Ecore_Wl2_Window *_wl_window_get(const Evas_Object *obj);
-#endif
+typedef struct {
+ Ecore_Evas *ee;
+ Eina_Bool registered : 1;
+} Efl_Ui_Selection_Data;
-EOLIAN static void
-_efl_ui_selection_selection_get(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Type type, Efl_Ui_Selection_Format format,
- void *data_func_data, Efl_Ui_Selection_Data_Ready data_func, Eina_Free_Cb data_func_free_cb, unsigned int seat)
+static inline Ecore_Evas_Selection_Buffer
+_ee_buffer_get(Efl_Ui_Cnp_Buffer buffer)
{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_selection_get(sel_man, obj, type, format,
- data_func_data, data_func,
- data_func_free_cb, seat);
+ if (buffer == EFL_UI_CNP_BUFFER_SELECTION)
+ return ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER;
+ else
+ return ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER;
}
-EOLIAN static Eina_Future *
-_efl_ui_selection_selection_set(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Type type, Efl_Ui_Selection_Format format, Eina_Slice data, unsigned int seat)
+EOLIAN static Eina_Future*
+_efl_ui_selection_selection_get(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Data *pd, Efl_Ui_Cnp_Buffer buffer, unsigned int seat, Eina_Iterator *acceptable_types)
{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- return efl_ui_selection_manager_selection_set(sel_man, obj, type, format, data, seat);
+ return ecore_evas_selection_get(pd->ee, seat, _ee_buffer_get(buffer), acceptable_types);
}
EOLIAN static void
-_efl_ui_selection_selection_clear(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Type type, unsigned int seat)
+_efl_ui_selection_selection_set(Eo *obj, Efl_Ui_Selection_Data *pd, Efl_Ui_Cnp_Buffer buffer, Eina_Content *content, unsigned int seat)
{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- efl_ui_selection_manager_selection_clear(sel_man, obj, type, seat);
+ _register_selection_changed(obj);
+ ecore_evas_selection_set(pd->ee, seat, _ee_buffer_get(buffer), content);
}
-EOLIAN static Eina_Bool
-_efl_ui_selection_has_owner(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Selection_Type type, unsigned int seat)
+EOLIAN static void
+_efl_ui_selection_selection_clear(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Data *pd, Efl_Ui_Cnp_Buffer buffer, unsigned int seat)
{
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- return efl_ui_selection_manager_selection_has_owner(sel_man, obj, type, seat);
+ ecore_evas_selection_set(pd->ee, seat, _ee_buffer_get(buffer), NULL);
}
+EOLIAN static Eina_Bool
+_efl_ui_selection_has_selection(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Data *pd, Efl_Ui_Cnp_Buffer buffer, unsigned int seat)
+{
+ return ecore_evas_selection_exists(pd->ee, seat, _ee_buffer_get(buffer));
+}
-////////// Support legacy APIs
-
-//TODO: Clear this list (when sel_man is deleted)
-Eina_List *lost_cb_list = NULL;
-
-#ifdef HAVE_ELEMENTARY_WL2
-static Ecore_Evas *
-_wl_is_wl(const Evas_Object *obj)
+EOLIAN static Efl_Object*
+_efl_ui_selection_efl_object_constructor(Eo *obj, Efl_Ui_Selection_Data *pd)
{
- Ecore_Evas *ee;
- Evas *evas;
- const char *engine_name;
+ if (!efl_constructor(efl_super(obj, EFL_UI_SELECTION_MIXIN)))
+ return NULL;
- if (!(evas = evas_object_evas_get(obj)))
- return NULL;
- if (!(ee = ecore_evas_ecore_evas_get(evas)))
- return NULL;
+ pd->ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
- engine_name = ecore_evas_engine_name_get(ee);
- if (!strcmp(engine_name, ELM_BUFFER))
- {
- ee = ecore_evas_buffer_ecore_evas_parent_get(ee);
- if (!ee) return NULL;
- engine_name = ecore_evas_engine_name_get(ee);
- }
- if (!strncmp(engine_name, "wayland", sizeof("wayland") - 1))
- return ee;
- return NULL;
+ return obj;
}
-int
-_wl_default_seat_id_get(Evas_Object *obj)
+EOLIAN static void
+_efl_ui_selection_efl_object_invalidate(Eo *obj, Efl_Ui_Selection_Data *pd)
{
- Ecore_Wl2_Window *win = _wl_window_get(obj);
- Eo *seat, *parent2, *ewin;
- Eina_Bool is_wl = EINA_FALSE;
-
- if (obj)
+ if (pd->registered)
{
- if (_wl_is_wl(obj)) is_wl = EINA_TRUE;
- if (efl_isa(obj, EFL_UI_WIDGET_CLASS))
- {
- Eo *top = elm_widget_top_get(obj);
- if (efl_isa(top, EFL_UI_WIN_INLINED_CLASS))
- {
- parent2 = efl_ui_win_inlined_parent_get(top);
- if (parent2) obj = elm_widget_top_get(parent2) ?: parent2;
- }
- /* fake win means canvas seat id will not match protocol seat id */
- ewin = elm_win_get(obj);
- if (elm_win_type_get(ewin) == ELM_WIN_FAKE) obj = NULL;
- }
- }
-
- if (!obj)
- {
- if (is_wl)
- {
- Ecore_Wl2_Input *input;
- Eina_Iterator *it;
-
- it = ecore_wl2_display_inputs_get(ecore_wl2_window_display_get(win));
- EINA_ITERATOR_FOREACH(it, input) break;
- eina_iterator_free(it);
- if (input)
- return ecore_wl2_input_seat_id_get(input);
- }
+ _selection_changed_event_unregister(obj);
}
-
- seat = evas_default_device_get(evas_object_evas_get(obj), EFL_INPUT_DEVICE_TYPE_SEAT);
- EINA_SAFETY_ON_NULL_RETURN_VAL(seat, 1);
- return evas_device_seat_id_get(seat);
+ efl_invalidate(efl_super(obj, EFL_UI_SELECTION_MIXIN));
}
-#endif
-typedef struct _Cnp_Data_Cb_Wrapper Cnp_Data_Cb_Wrapper;
-struct _Cnp_Data_Cb_Wrapper
+EOLIAN static Eina_Bool
+_efl_ui_selection_efl_object_event_callback_priority_add(Eo *obj, Efl_Ui_Selection_Data *pd,
+ const Efl_Event_Description *desc,
+ Efl_Callback_Priority priority,
+ Efl_Event_Cb func,
+ const void *user_data)
{
- void *udata;
- Elm_Drop_Cb datacb;
-};
+ if (desc == EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED && !pd->registered)
+ {
-static void
-_selection_data_ready_cb(void *data, Efl_Object *obj, Efl_Ui_Selection_Data *seldata)
-{
- Cnp_Data_Cb_Wrapper *wdata = data;
- if (!wdata) return;
- Elm_Selection_Data ddata;
+ pd->registered = EINA_TRUE;
+ if (efl_finalized_get(obj))
+ _selection_changed_event_register(obj);
+ }
- ddata.data = calloc(1, seldata->content.len + 1);
- if (!ddata.data) return;
- ddata.data = memcpy(ddata.data, seldata->content.mem, seldata->content.len);
- ddata.len = seldata->content.len;
- ddata.x = seldata->pos.x;
- ddata.y = seldata->pos.y;
- ddata.format = (Elm_Sel_Format)seldata->format;
- ddata.action = (Elm_Xdnd_Action)seldata->action;
- wdata->datacb(wdata->udata, obj, &ddata);
- free(ddata.data);
+ return efl_event_callback_priority_add(efl_super(obj, EFL_UI_SELECTION_MIXIN), desc, priority, func, user_data);
}
-typedef struct _Sel_Lost_Data Sel_Lost_Data;
-struct _Sel_Lost_Data
-{
- const Evas_Object *obj;
- Elm_Sel_Type type;
- void *udata;
- Elm_Selection_Loss_Cb loss_cb;
-};
-
-static Eina_Value
-_selection_lost_cb(void *data, const Eina_Value value)
+EOLIAN static Eina_Bool
+_efl_ui_selection_efl_object_event_callback_array_priority_add(Eo *obj, Efl_Ui_Selection_Data *pd,
+ const Efl_Callback_Array_Item *array,
+ Efl_Callback_Priority priority,
+ const void *user_data)
{
- Eina_List *l, *l2;
- Sel_Lost_Data *ldata, *ldata2;
-
- ldata = data;
- EINA_LIST_FOREACH_SAFE(lost_cb_list, l, l2, ldata2)
+ for (int i = 0; array[i].desc; ++i)
{
- if ((ldata->obj == ldata2->obj) &&
- (ldata->type == ldata2->type))
+ if (array[i].desc == EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED && !pd->registered)
{
- ldata2->loss_cb(ldata2->udata, ldata2->type);
- lost_cb_list = eina_list_remove(lost_cb_list, ldata2);
+ pd->registered = EINA_TRUE;
+ if (efl_finalized_get(obj))
+ _selection_changed_event_register(obj);
}
}
- free(ldata);
-
- return value;
+ return efl_event_callback_array_priority_add(efl_super(obj, EFL_UI_SELECTION_MIXIN), array, priority, user_data);
}
-EAPI Eina_Bool
-elm_cnp_selection_get(const Evas_Object *obj, Elm_Sel_Type type,
- Elm_Sel_Format format, Elm_Drop_Cb datacb, void *udata)
-{
- int seatid = 1;
- Eo *sel_man = _efl_ui_selection_manager_get((Evas_Object *)obj);
- Cnp_Data_Cb_Wrapper *wdata = calloc(1, sizeof(Cnp_Data_Cb_Wrapper));
-
- if (!wdata) return EINA_FALSE;
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get((Evas_Object *)obj);
-#endif
- wdata->udata = udata;
- wdata->datacb = datacb;
- efl_ui_selection_manager_selection_get(sel_man, (Evas_Object *)obj, (Efl_Ui_Selection_Type)type,
- (Efl_Ui_Selection_Format)format,
- wdata, _selection_data_ready_cb, NULL, seatid);
- return EINA_TRUE;
-}
-
-EAPI Eina_Bool
-elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type type,
- Elm_Sel_Format format, const void *selbuf, size_t buflen)
+EOLIAN static Efl_Object*
+_efl_ui_selection_efl_object_finalize(Eo *obj, Efl_Ui_Selection_Data *pd)
{
- int seatid = 1;
- Eina_Future *f;
- Sel_Lost_Data *ldata;
- Eo *sel_man = _efl_ui_selection_manager_get(obj);
- Eina_Slice data;
+ if (pd->registered)
+ _selection_changed_event_register(obj);
- ldata = calloc(1, sizeof(Sel_Lost_Data));
- if (!ldata) return EINA_FALSE;
- data.mem = selbuf;
- data.len = buflen;
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
- f = efl_ui_selection_manager_selection_set(sel_man, obj, (Efl_Ui_Selection_Type)type,
- (Efl_Ui_Selection_Format)format, data, seatid);
-
- ldata->obj = obj;
- ldata->type = type;
- eina_future_then_easy(f, _selection_lost_cb, NULL, NULL, EINA_VALUE_TYPE_UINT, ldata);
-
- return EINA_TRUE;
+ return efl_finalize(efl_super(obj, MY_CLASS));
}
-EAPI Eina_Bool
-elm_object_cnp_selection_clear(Evas_Object *obj, Elm_Sel_Type type)
-{
- int seatid = 1;
- Eo *sel_man = _efl_ui_selection_manager_get((Evas_Object *)obj);
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
- efl_ui_selection_manager_selection_clear(sel_man, obj, (Efl_Ui_Selection_Type)type, seatid);
-
- return EINA_TRUE;
-}
-EAPI void
-elm_cnp_selection_loss_callback_set(Evas_Object *obj, Elm_Sel_Type type,
- Elm_Selection_Loss_Cb func, const void *data)
-{
- Sel_Lost_Data *ldata = calloc(1, sizeof(Sel_Lost_Data));
-#if HAVE_ELEMENTARY_COCOA
- // Currently, we have no way to track changes in Cocoa pasteboard.
- // Therefore, don't track this...
- return;
-#endif
- if (!ldata) return;
- ldata->obj = obj;
- ldata->type = type;
- ldata->udata = (void *)data;
- ldata->loss_cb = func;
- lost_cb_list = eina_list_append(lost_cb_list, ldata);
-}
-
-EAPI Eina_Bool
-elm_selection_selection_has_owner(Evas_Object *obj)
-{
- int seatid = 1;
- Eo *sel_man = _efl_ui_selection_manager_get((Evas_Object *)obj);
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
-
- return efl_ui_selection_manager_selection_has_owner(sel_man, obj,
- EFL_UI_SELECTION_TYPE_CLIPBOARD, seatid);
-}
-
-EAPI Eina_Bool
-elm_cnp_clipboard_selection_has_owner(Evas_Object *obj)
-{
- int seatid = 1;
- Eo *sel_man = _efl_ui_selection_manager_get((Evas_Object *)obj);
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_wl_window_get(obj)) seatid = _wl_default_seat_id_get(obj);
-#endif
- return efl_ui_selection_manager_selection_has_owner(sel_man, obj,
- EFL_UI_SELECTION_TYPE_CLIPBOARD, seatid);
-}
+#define EFL_UI_SELECTION_EXTRA_OPS \
+ EFL_OBJECT_OP_FUNC(efl_event_callback_priority_add, _efl_ui_selection_efl_object_event_callback_priority_add), \
+ EFL_OBJECT_OP_FUNC(efl_event_callback_array_priority_add, _efl_ui_selection_efl_object_event_callback_array_priority_add), \
#include "efl_ui_selection.eo.c"
diff --git a/src/lib/elementary/efl_ui_selection.eo b/src/lib/elementary/efl_ui_selection.eo
index 20e42261d0..7e0814d348 100644
--- a/src/lib/elementary/efl_ui_selection.eo
+++ b/src/lib/elementary/efl_ui_selection.eo
@@ -1,45 +1,85 @@
-import efl_ui_selection_types;
-
-mixin @beta Efl.Ui.Selection {
- [[Efl Ui Selection class]]
- data: null;
- methods {
- selection_set {
- [[Set the selection data to the object]]
- params {
- @in type: Efl.Ui.Selection_Type; [[Selection Type]]
- @in format: Efl.Ui.Selection_Format; [[Selection Format]]
- @in data: Eina.Slice; [[Selection data]]
- @in seat: uint;[[Specified seat for multiple seats case.]]
- }
- return: future<void>; [[Future for tracking when the selection is lost]]
+import eina_types;
+
+enum @beta Efl.Ui.Cnp_Buffer {
+ [[System buffer to use in Copy & Paste operations.]]
+ selection = 0, [[Buffer typically used when the user selects (highlights) some text without explicitly
+ requesting to copy it.]]
+ copy_and_paste = 1, [[Buffer used when the user requests that the current selection is copied (using
+ Ctrl+C, for example).]]
+}
+
+struct @beta Efl.Ui.Wm_Selection_Changed {
+ [[Information sent along the @[Efl.Ui.Selection.wm_selection,changed] event.]]
+ buffer : Efl.Ui.Cnp_Buffer; [[The system buffer that has changed.]]
+ caused_by : Efl.Ui.Selection; [[The EFL widget that triggered the change. $NULL if it is not an EFL widget.]]
+ seat : uint; [[The seat that triggered the change.]]
+}
+
+mixin @beta Efl.Ui.Selection requires Efl.Object {
+ [[This mixin provides the ability to interact with the system's Copy & Paste facilities.
+ ]]
+ methods {
+ selection_set {
+ [[Sets the current selection.
+
+ This sends the selected data to the system's specified buffer, making it available to other
+ applications for "pasting" it.
+
+ This is typically used when the user requests a "copy" operation.
+ ]]
+ params {
+ buffer : Efl.Ui.Cnp_Buffer; [[System buffer to use.]]
+ content : Eina.Content @by_ref; [[Data to copy.]]
+ seat : uint; [[Seat the data comes from. Use 0 when in doubt.]]
}
- selection_get {
- [[Get the data from the object that has selection]]
- params {
- @in type: Efl.Ui.Selection_Type; [[Selection Type]]
- @in format: Efl.Ui.Selection_Format; [[Selection Format]]
- @in data_func: Efl.Ui.Selection_Data_Ready; [[Data ready function pointer]]
- @in seat: uint;[[Specified seat for multiple seats case.]]
- }
+ }
+ selection_clear {
+ [[Clears the current selection.
+
+ No data will be available to other applications to paste (until something else is selected).
+ ]]
+ params {
+ buffer : Efl.Ui.Cnp_Buffer; [[System buffer to clear.]]
+ seat : uint; [[Seat to clear. Use 0 when in doubt.]]
}
- selection_clear {
- [[Clear the selection data from the object]]
- params {
- @in type: Efl.Ui.Selection_Type; [[Selection Type]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
+ }
+ selection_get {
+ [[Retrieves the data currently held in the specified buffer.
+
+ This is typically used when the user requests a "paste" operation.
+
+ This method is time consuming (since data can potentially be provided by another application), therefore,
+ it is recommended to verify the existence of a selection using @.has_selection before calling it.
+ ]]
+ params {
+ buffer : Efl.Ui.Cnp_Buffer; [[System buffer to use.]]
+ seat : uint; [[Seat where the data should be pasted. Use 0 when in doubt.]]
+ acceptable_types : iterator<string>; [[List of accepted IANA MIME types:
+ https://www.iana.org/assignments/media-types/media-types.xhtml
+ If automatic conversion cannot be provided to any of the accepted
+ types, an error will be returned.
+ ]]
}
- has_owner {
- [[Determine whether the selection data has owner]]
- params {
- @in type: Efl.Ui.Selection_Type; [[Selection type]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- return: bool; [[EINA_TRUE if there is object owns selection, otherwise EINA_FALSE]]
+ return : future<Eina.Content> @move; [[A future that will be resolved to the requested content, or to an
+ error if type conversion is not available or the requested buffer
+ is empty.]]
+ }
+ has_selection {
+ [[Checks if the specified system buffer has content.]]
+ params {
+ buffer : Efl.Ui.Cnp_Buffer; [[System buffer to query.]]
+ seat : uint; [[Seat to query. Use 0 when in doubt.]]
}
- }
- events {
- wm_selection,changed: Efl.Ui.Selection_Changed; [[Called when display server's selection has changed]]
- }
+ return : bool; [[$true if there is data available in the requested buffer.]]
+ }
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Object.invalidate;
+ Efl.Object.finalize;
+ }
+ events {
+ wm_selection,changed : Efl.Ui.Wm_Selection_Changed; [[Event emitted when the content of one of the system's
+ buffers changes.]]
+ }
}
diff --git a/src/lib/elementary/efl_ui_selection_manager.c b/src/lib/elementary/efl_ui_selection_manager.c
deleted file mode 100644
index 3a5db9713c..0000000000
--- a/src/lib/elementary/efl_ui_selection_manager.c
+++ /dev/null
@@ -1,5678 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "elementary_config.h"
-#endif
-
-#include <Elementary.h>
-#include "elm_priv.h"
-
-#ifdef _WIN32
-# include <evil_private.h> /* mmap */
-#else
-# include <sys/mman.h>
-#endif
-
-#include "efl_ui_selection_manager_private.h"
-
-#define MY_CLASS EFL_UI_SELECTION_MANAGER_CLASS
-
-//#define DEBUGON 1
-#ifdef DEBUGON
-# define sel_debug(fmt, args...) fprintf(stderr, __FILE__":%s:%d : " fmt "\n", __FUNCTION__, __LINE__, ##args)
-#else
-# define sel_debug(x...) do { } while (0)
-#endif
-
-static void _anim_data_free(Sel_Manager_Drag_Container *dc);
-static void _cont_obj_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _cont_obj_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _item_container_del_internal(Sel_Manager_Drag_Container *dc, Eina_Bool full);
-
-void efl_ui_selection_manager_drop_target_del(Eo *obj, Efl_Object *target_obj, Efl_Ui_Selection_Format format, unsigned int seat);
-void efl_ui_selection_manager_selection_clear(Eo *obj, Efl_Object *owner, Efl_Ui_Selection_Type type, unsigned int seat);
-void efl_ui_selection_manager_drag_start(Eo *obj, Efl_Object *drag_obj, Efl_Ui_Selection_Format format, Eina_Slice data, Efl_Ui_Selection_Action action, void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb, unsigned int seat);
-
-static Eina_List *managers;
-
-#ifdef HAVE_ELEMENTARY_X
-static void _set_selection_list(Sel_Manager_Selection *sel_list, Sel_Manager_Seat_Selection *seat_sel);
-static Ecore_X_Atom _x11_dnd_action_rev_map(Efl_Ui_Selection_Action action);
-static Ecore_X_Window _x11_xwin_get(const Evas_Object *obj);
-#endif
-
-#ifdef HAVE_ELEMENTARY_WL2
-Ecore_Wl2_Window *_wl_window_get(const Evas_Object *obj);
-static Ecore_Wl2_Input *_wl_seat_get(Ecore_Wl2_Window *win, Evas_Object *obj, unsigned int seat_id);
-#endif
-
-#ifdef HAVE_ELEMENTARY_WIN32
-static void _set_selection_list(Sel_Manager_Selection *sel_list, Sel_Manager_Seat_Selection *seat_sel);
-#endif
-
-EAPI int ELM_CNP_EVENT_SELECTION_CHANGED = -1;
-
-static Sel_Manager_Seat_Selection *
-_sel_manager_seat_selection_get(Efl_Ui_Selection_Manager_Data *pd, unsigned int seat)
-{
- Eina_List *l = NULL;
- Sel_Manager_Seat_Selection *seat_sel = NULL;
-
- EINA_LIST_FOREACH(pd->seat_list, l, seat_sel)
- {
- if (seat_sel->seat == seat)
- break;
- }
- if (!seat_sel)
- ERR("Could not find request seat");
-
- return seat_sel;
-}
-
-static inline void
-_owner_change_check(Efl_Ui_Selection_Manager *manager, Efl_Object *owner,
- Sel_Manager_Seat_Selection *seat_sel,
- Sel_Manager_Selection *sel,
- Efl_Ui_Selection_Type type, Eina_Bool same_win)
-{
- if (!same_win)
- {
- Eina_List *l, *l_next;
- Eo *man;
-
- EINA_LIST_FOREACH_SAFE(managers, l, l_next, man)
- {
- if (man != manager)
- {
- Eina_List *l2, *l2_next, *l3, *l3_next;
- Sel_Manager_Selection_Lost *sel_lost;
- Sel_Manager_Seat_Selection *seat_sel2;
- Efl_Ui_Selection_Manager_Data *pd = efl_data_scope_get(man, MY_CLASS);
-
- if (!pd) continue;
- EINA_LIST_FOREACH_SAFE(pd->seat_list, l3, l3_next, seat_sel2)
- {
- EINA_LIST_FOREACH_SAFE(seat_sel2->sel_lost_list, l2, l2_next, sel_lost)
- {
- if ((sel_lost->request) &&
- (sel_lost->type == type))
- {
- eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
- }
- }
- seat_sel2->xwin = 0;
-#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_WIN32)
- if (seat_sel2->sel_list)
- {
- int i;
-
- for (i = 0;
- i < (EFL_UI_SELECTION_TYPE_CLIPBOARD + 1)
- ; i++)
- {
-#ifdef HAVE_ELEMENTARY_X
- seat_sel2->sel_list[i].xwin = 0;
-#elif defined (HAVE_ELEMENTARY_WIN32)
- seat_sel2->sel_list[i].win = NULL;
-#endif
- seat_sel2->sel_list[i].active = EINA_FALSE;
- }
- }
-#endif
-#if defined(HAVE_ELEMENTARY_WL2) || defined(HAVE_ELEMENTARY_COCOA)
- if (seat_sel2->sel)
- {
- seat_sel2->sel->win = 0;
- seat_sel2->sel->active = EINA_FALSE;
- }
-#endif
- }
- }
- }
- }
- if ((sel->owner != NULL) &&
- (sel->owner != owner) && same_win)
- {
- Eina_List *l, *l_next;
- Sel_Manager_Selection_Lost *sel_lost;
- EINA_LIST_FOREACH_SAFE(seat_sel->sel_lost_list, l, l_next, sel_lost)
- {
- if ((sel_lost->request == sel->owner) &&
- (sel_lost->type == type))
- {
- eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
- }
- }
- }
-}
-
-static Sel_Manager_Seat_Selection *
-_sel_manager_seat_selection_init(Efl_Ui_Selection_Manager_Data *pd, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- Eina_List *l = NULL;
-
- EINA_LIST_FOREACH(pd->seat_list, l, seat_sel)
- {
- if(seat_sel->seat == seat)
- break;
- }
- if (!seat_sel)
- {
- seat_sel = calloc(1, sizeof(Sel_Manager_Seat_Selection));
- if (!seat_sel)
- {
- ERR("Failed to allocate seat");
- return NULL;
- }
- seat_sel->saved_types = calloc(1, sizeof(Saved_Type));
- seat_sel->seat = seat;
- seat_sel->pd = pd;
- pd->seat_list = eina_list_append(pd->seat_list, seat_sel);
- }
-#ifdef HAVE_ELEMENTARY_X
- if (!seat_sel->sel_list)
- {
- seat_sel->sel_list = calloc(1, (EFL_UI_SELECTION_TYPE_CLIPBOARD + 1) * sizeof(Sel_Manager_Selection));
- if (!seat_sel->sel_list)
- {
- ERR("failed to allocate selection list");
- return NULL;
- }
- _set_selection_list(seat_sel->sel_list, seat_sel);
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- if (!seat_sel->sel)
- {
- Sel_Manager_Selection *sel = calloc(1, sizeof(Sel_Manager_Selection));
- if (!sel)
- {
- ERR("failed to allocate selection");
- return NULL;
- }
- sel->seat_sel = seat_sel;
- seat_sel->sel = sel;
- }
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
- if (!seat_sel->sel)
- {
- Sel_Manager_Selection *sel = calloc(1, sizeof(Sel_Manager_Selection));
- if (!sel)
- {
- ERR("failed to allocate selection");
- return NULL;
- }
- sel->seat_sel = seat_sel;
- seat_sel->sel = sel;
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- if (!seat_sel->sel_list)
- {
- seat_sel->sel_list = calloc(1, (EFL_UI_SELECTION_TYPE_CLIPBOARD + 1) * sizeof(Sel_Manager_Selection));
- if (!seat_sel->sel_list)
- {
- ERR("failed to allocate selection list");
- return NULL;
- }
- _set_selection_list(seat_sel->sel_list, seat_sel);
- }
-#endif
-
- return seat_sel;
-}
-
-static void
-_sel_manager_promise_cancel(Eo *obj EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED)
-{
- Sel_Manager_Selection_Lost *sel_lost = data;
- sel_lost->seat_sel->sel_lost_list = eina_list_remove(sel_lost->seat_sel->sel_lost_list, sel_lost);
- free(sel_lost);
-}
-
-static inline Eina_Future *
-_update_sel_lost_list(Efl_Object *obj, Efl_Ui_Selection_Type type,
- Sel_Manager_Seat_Selection *seat_sel)
-{
- Eina_Promise *p;
- Sel_Manager_Selection_Lost *sel_lost;
-
- sel_lost = calloc(1, sizeof(Sel_Manager_Selection_Lost));
- if (!sel_lost)
- return NULL;
- sel_lost->request = obj;
- sel_lost->type = type;
- sel_lost->seat_sel = seat_sel;
- seat_sel->sel_lost_list = eina_list_append(seat_sel->sel_lost_list, sel_lost);
-
- p = efl_loop_promise_new(obj);
- if (!p) return NULL;
- sel_lost->promise = p;
-
- return efl_future_then(obj, eina_future_new(p),
- .data = sel_lost,
- .free = _sel_manager_promise_cancel);
-}
-
-/* TODO: this should not be an actual tempfile, but rather encode the object
- * as http://dataurl.net/ if it's an image or similar. Evas should support
- * decoding it as memfile. */
-static Tmp_Info *
-_tempfile_new(int size)
-{
-#ifdef HAVE_MMAP
- Tmp_Info *info;
- const char *tmppath = NULL;
- mode_t cur_umask;
- int len;
-
- info = calloc(1, sizeof(Tmp_Info));
- if (!info) return NULL;
-#if defined(HAVE_GETUID) && defined(HAVE_GETEUID)
- if (getuid() == geteuid())
-#endif
- tmppath = getenv("TMP");
- if (!tmppath) tmppath = P_tmpdir;
- len = snprintf(NULL, 0, "%s/%sXXXXXX", tmppath, "elmcnpitem-");
- if (len < 0) goto on_error;
- len++;
- info->filename = malloc(len);
- if (!info->filename) goto on_error;
- snprintf(info->filename,len,"%s/%sXXXXXX", tmppath, "elmcnpitem-");
- cur_umask = umask(S_IRWXO | S_IRWXG);
- info->fd = mkstemp(info->filename);
- umask(cur_umask);
- if (info->fd < 0) goto on_error;
-# ifdef __linux__
- {
- char *tmp;
- /* And before someone says anything see POSIX 1003.1-2008 page 400 */
- long pid;
-
- pid = (long)getpid();
- /* Use pid instead of /proc/self: That way if can be passed around */
- len = snprintf(NULL,0,"/proc/%li/fd/%i", pid, info->fd);
- len++;
- tmp = malloc(len);
- if (tmp)
- {
- snprintf(tmp,len, "/proc/%li/fd/%i", pid, info->fd);
- unlink(info->filename);
- free(info->filename);
- info->filename = tmp;
- }
- }
-# endif
- sel_debug("filename is %s\n", info->filename);
- if (size < 1) goto on_error;
- /* Map it in */
- if (ftruncate(info->fd, size))
- {
- perror("ftruncate");
- goto on_error;
- }
- eina_mmap_safety_enabled_set(EINA_TRUE);
- info->map = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, info->fd, 0);
- if (info->map == MAP_FAILED)
- {
- perror("mmap");
- goto on_error;
- }
- return info;
-
- on_error:
- if (info->fd >= 0) close(info->fd);
- info->fd = -1;
- /* Set map to NULL and return */
- info->map = NULL;
- info->len = 0;
- free(info->filename);
- free(info);
- return NULL;
-#else
- (void) size;
- return NULL;
-#endif
-}
-
-static int
-_tmpinfo_free(Tmp_Info *info)
-{
- if (!info) return 0;
- free(info->filename);
- free(info);
- return 0;
-}
-
-static inline void
-_drop_target_cbs_del(Efl_Ui_Selection_Manager_Data *pd, Sel_Manager_Dropable *dropable, Efl_Object *obj)
-{
- if (dropable)
- {
- Drop_Format *df;
- while (dropable->format_list)
- {
- df = EINA_INLIST_CONTAINER_GET(dropable->format_list, Drop_Format);
- efl_ui_selection_manager_drop_target_del(pd->sel_man, obj,
- df->format, dropable->seat);
- // If drop_target_del() happened to delete dropabale, then
- // re-fetch it each loop to make sure it didn't
- dropable = efl_key_data_get(obj, "__elm_dropable");
- if (!dropable) break;
- }
- }
-}
-
-static void
-_all_drop_targets_cbs_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *info EINA_UNUSED)
-{
- Efl_Ui_Selection_Manager_Data *pd = data;
- Sel_Manager_Dropable *dropable = NULL;
-
- if (!pd) return;
- dropable = efl_key_data_get(obj, "__elm_dropable");
- _drop_target_cbs_del(pd, dropable, obj);
-}
-
-static void
-_dropable_coords_adjust(Sel_Manager_Dropable *dropable, Eina_Position2D *pos)
-{
- Ecore_Evas *ee;
- Evas *evas = evas_object_evas_get(dropable->obj);
- int ex = 0, ey = 0, ew = 0, eh = 0;
- Evas_Object *win;
-
- ee = ecore_evas_ecore_evas_get(evas);
- ecore_evas_geometry_get(ee, &ex, &ey, &ew, &eh);
- pos->x = pos->x - ex;
- pos->y = pos->y - ey;
-
- /* For Wayland, frame coords have to be subtracted. */
- Evas_Coord fx, fy;
- evas_output_framespace_get(evas, &fx, &fy, NULL, NULL);
- if (fx || fy) sel_debug("evas frame fx %d fy %d\n", fx, fy);
- pos->x = pos->x - fx;
- pos->y = pos->y - fy;
-
- if (elm_widget_is(dropable->obj))
- {
- win = elm_widget_top_get(dropable->obj);
- if (win && efl_isa(win, EFL_UI_WIN_CLASS))
- {
- Evas_Coord x2, y2;
- int rot = elm_win_rotation_get(win);
- switch (rot)
- {
- case 90:
- x2 = ew - pos->y;
- y2 = pos->x;
- break;
- case 180:
- x2 = ew - pos->x;
- y2 = eh - pos->y;
- break;
- case 270:
- x2 = pos->y;
- y2 = eh - pos->x;
- break;
- default:
- x2 = pos->x;
- y2 = pos->y;
- break;
- }
- sel_debug("rotation %d, w %d, h %d - x:%d->%d, y:%d->%d\n",
- rot, ew, eh, pos->x, x2, pos->y, y2);
- pos->x = x2;
- pos->y = y2;
- }
- }
-}
-
-static Eina_Bool
-_drag_cancel_animate(void *data, double pos)
-{ /* Animation to "move back" drag-window */
- Sel_Manager_Seat_Selection *seat_sel = data;
- sel_debug("in, pos: %f", pos);
- if (pos >= 0.99)
- {
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xdragwin = _x11_xwin_get(seat_sel->drag_win);
- ecore_x_window_ignore_set(xdragwin, 0);
-#endif
- sel_debug("Delete drag_win");
- evas_object_del(seat_sel->drag_win);
- seat_sel->drag_win = NULL;
- return ECORE_CALLBACK_CANCEL;
- }
- else
- {
- int x, y;
- x = seat_sel->drag_win_end.x - (pos * (seat_sel->drag_win_end.x - seat_sel->drag_win_start.x));
- y = seat_sel->drag_win_end.y - (pos * (seat_sel->drag_win_end.y - seat_sel->drag_win_start.y));
- evas_object_move(seat_sel->drag_win, x, y);
- }
-
- return ECORE_CALLBACK_RENEW;
-}
-
-static Efl_Ui_Selection_Format
-_dnd_types_to_format(Efl_Ui_Selection_Manager_Data *pd, const char **types, int ntypes)
-{
- Efl_Ui_Selection_Format ret_type = 0;
- int i;
- for (i = 0; i < ntypes; i++)
- {
- Sel_Manager_Atom *atom = eina_hash_find(pd->type_hash, types[i]);
- if (atom) ret_type |= atom->format;
- }
- return ret_type;
-}
-
-static Eina_List *
-_dropable_list_geom_find(Efl_Ui_Selection_Manager_Data *pd, Evas *evas, Evas_Coord px, Evas_Coord py)
-{
- Eina_List *itr, *top_objects_list = NULL, *dropable_list = NULL;
- Evas_Object *top_obj;
- Sel_Manager_Dropable *dropable = NULL;
-
- if (!pd->drop_list) return NULL;
-
- /* We retrieve the (non-smart) objects pointed by (px, py) */
- top_objects_list = evas_tree_objects_at_xy_get(evas, NULL, px, py);
- /* We walk on this list from the last because if the list contains more than one
- * element, all but the last will repeat events. The last one can repeat events
- * or not. Anyway, this last one is the first that has to be taken into account
- * for the determination of the drop target.
- */
- EINA_LIST_REVERSE_FOREACH(top_objects_list, itr, top_obj)
- {
- Evas_Object *object = top_obj;
- /* We search for the dropable data into the object. If not found, we search into its parent.
- * For example, if a button is a drop target, the first object will be an (internal) image.
- * The drop target is attached to the button, i.e to image's parent. That's why we need to
- * walk on the parents until NULL.
- * If we find this dropable data, we found our drop target.
- */
- while (object)
- {
- dropable = efl_key_data_get(object, "__elm_dropable");
- if (dropable)
- {
- Eina_Bool exist = EINA_FALSE;
- Eina_List *l;
- Sel_Manager_Dropable *d = NULL;
- EINA_LIST_FOREACH(dropable_list, l, d)
- {
- if (d == dropable)
- {
- exist = EINA_TRUE;
- break;
- }
- }
- if (!exist)
- dropable_list = eina_list_append(dropable_list, dropable);
- object = evas_object_smart_parent_get(object);
- if (dropable)
- sel_debug("Drop target %p of type %s found\n",
- dropable->obj, efl_class_name_get(efl_class_get(dropable->obj)));
- }
- else
- object = evas_object_smart_parent_get(object);
- }
- }
- eina_list_free(top_objects_list);
- return dropable_list;
-}
-
-#ifdef HAVE_ELEMENTARY_X
-static Ecore_X_Window
-_x11_xwin_get(const Efl_Object *obj)
-{
- if (!obj) return 0;
-
- Ecore_X_Window xwin = 0;
- //get top
- const Evas_Object *top = obj;
- const Evas_Object *parent = obj;
- while(parent)
- {
- top = parent;
- parent = efl_parent_get(parent);
- }
- if (efl_isa(top, EFL_UI_WIN_CLASS))
- {
- xwin = elm_win_xwindow_get(top);
- }
- if (!xwin)
- {
- Ecore_Evas *ee;
- Evas *evas = evas_object_evas_get(obj);
- if (!evas) return 0;
- ee = ecore_evas_ecore_evas_get(evas);
- if (!ee) return 0;
-
- while(!xwin)
- {
- const char *engine_name = ecore_evas_engine_name_get(ee);
- if (!strcmp(engine_name, ELM_BUFFER))
- {
- ee = ecore_evas_buffer_ecore_evas_parent_get(ee);
- if (!ee) return 0;
- xwin = _elm_ee_xwin_get(ee);
- }
- else
- {
- xwin = _elm_ee_xwin_get(ee);
- if (!xwin) return 0;
- }
- }
- }
-
- return xwin;
-}
-
-static Eina_Bool
-_x11_is_uri_type_data(Sel_Manager_Selection *sel EINA_UNUSED, Ecore_X_Event_Selection_Notify *notify)
-{
- Ecore_X_Selection_Data *data;
- char *p;
-
- data = notify->data;
- sel_debug("data->format is %d %p %p", data->format, notify, data);
- if (data->content == ECORE_X_SELECTION_CONTENT_FILES) return EINA_TRUE;
- p = (char *)data->data;
- if (!p) return EINA_TRUE;
- sel_debug("Got %s", p);
- if (strncmp(p, "file:/", 6))
- {
- if (*p != '/') return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static Sel_Manager_Seat_Selection *
-_x11_sel_manager_seat_selection_init(Efl_Ui_Selection_Manager_Data *pd, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- Eina_List *l = NULL;
-
- EINA_LIST_FOREACH(pd->seat_list, l, seat_sel)
- {
- if(seat_sel->seat == seat)
- break;
- }
- if (!seat_sel)
- {
- seat_sel = calloc(1, sizeof(Sel_Manager_Seat_Selection));
- if (!seat_sel)
- {
- ERR("Failed to allocate seat");
- return NULL;
- }
- seat_sel->saved_types = calloc(1, sizeof(Saved_Type));
- seat_sel->seat = seat;
- seat_sel->pd = pd;
- pd->seat_list = eina_list_append(pd->seat_list, seat_sel);
- }
- if (!seat_sel->sel_list)
- {
- //TODO: reduce memory (may be just need one common sel_list)
- seat_sel->sel_list = calloc(1, (EFL_UI_SELECTION_TYPE_CLIPBOARD + 1) * sizeof(Sel_Manager_Selection));
- if (!seat_sel->sel_list)
- {
- ERR("failed to allocate selection list");
- return NULL;
- }
- _set_selection_list(seat_sel->sel_list, seat_sel);
- }
-
- return seat_sel;
-}
-
-static Eina_Bool
-_x11_data_preparer_text(Sel_Manager_Seat_Selection *seat_sel EINA_UNUSED,
- Ecore_X_Event_Selection_Notify *notify,
- Efl_Ui_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
-{
- sel_debug("text data preparer");
- Ecore_X_Selection_Data *data = notify->data;
- ddata->format = EFL_UI_SELECTION_FORMAT_TEXT;
- ddata->content.mem = eina_memdup(data->data, data->length, EINA_TRUE);
- ddata->content.len = data->length;
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_data_preparer_markup(Sel_Manager_Seat_Selection *seat_sel EINA_UNUSED,
- Ecore_X_Event_Selection_Notify *notify,
- Efl_Ui_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
-{
- sel_debug("markup data preparer");
- Ecore_X_Selection_Data *data = notify->data;
- ddata->format = EFL_UI_SELECTION_FORMAT_MARKUP;
- ddata->content.mem = eina_memdup(data->data, data->length, EINA_TRUE);
- ddata->content.len = data->length;
- return EINA_TRUE;
-}
-
-/**
- * So someone is pasting an image into my entry or widget...
- */
-static Eina_Bool
-_x11_data_preparer_uri(Sel_Manager_Seat_Selection *seat_sel, Ecore_X_Event_Selection_Notify *notify,
- Efl_Ui_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
-{
- sel_debug("uri data preparer");
- Ecore_X_Selection_Data *data;
- Ecore_X_Selection_Data_Files *files;
- char *p, *stripstr = NULL;
-
- data = notify->data;
- sel_debug("data->format is %d %p %p\n", data->format, notify, data);
- if (data->content == ECORE_X_SELECTION_CONTENT_FILES)
- {
- Efreet_Uri *uri;
- Eina_Strbuf *strbuf;
- int i;
-
- sel_debug("got a files list\n");
- files = notify->data;
- /*
- if (files->num_files > 1)
- {
- // Don't handle many items <- this makes mr bigglesworth sad :(
- sel_debug("more then one file: Bailing\n");
- return EINA_FALSE;
- }
- stripstr = p = strdup(files->files[0]);
- */
-
- strbuf = eina_strbuf_new();
- if (!strbuf)
- return EINA_FALSE;
-
- for (i = 0; i < files->num_files ; i++)
- {
- uri = efreet_uri_decode(files->files[i]);
- if (uri)
- {
- eina_strbuf_append(strbuf, uri->path);
- efreet_uri_free(uri);
- }
- else
- {
- eina_strbuf_append(strbuf, files->files[i]);
- }
- if (i < (files->num_files - 1))
- eina_strbuf_append(strbuf, "\n");
- }
- stripstr = eina_strbuf_string_steal(strbuf);
- eina_strbuf_free(strbuf);
- }
- else
- {
- Efreet_Uri *uri;
-
- p = (char *)eina_memdup((unsigned char *)data->data, data->length, EINA_TRUE);
- if (!p) return EINA_FALSE;
- uri = efreet_uri_decode(p);
- if (!uri)
- {
- /* Is there any reason why we care of URI without scheme? */
- if (p[0] == '/') stripstr = p;
- else free(p);
- }
- else
- {
- free(p);
- stripstr = strdup(uri->path);
- efreet_uri_free(uri);
- }
- }
-
- if (!stripstr)
- {
- sel_debug("Couldn't find a file\n");
- return EINA_FALSE;
- }
- free(seat_sel->saved_types->imgfile);
-#if 0 // this seems to be broken - we should be handling uri lists as text
- if (seat_sel->saved_types->textreq)
- {
- seat_sel->saved_types->textreq = 0;
- seat_sel->saved_types->imgfile = stripstr;
- }
- else
-#endif
- {
- ddata->format = EFL_UI_SELECTION_FORMAT_TEXT;
- ddata->content.mem = stripstr;
- ddata->content.len = strlen(stripstr);
- seat_sel->saved_types->imgfile = NULL;
- }
- return EINA_TRUE;
-}
-
-/**
- * Just received an vcard, either through cut and paste, or dnd.
- */
-static Eina_Bool
-_x11_data_preparer_vcard(Sel_Manager_Seat_Selection *seat_sel EINA_UNUSED,
- Ecore_X_Event_Selection_Notify *notify,
- Efl_Ui_Selection_Data *ddata, Tmp_Info **tmp_info EINA_UNUSED)
-{
- sel_debug("vcard receive\n");
- Ecore_X_Selection_Data *data = notify->data;
- ddata->format = EFL_UI_SELECTION_FORMAT_VCARD;
- ddata->content.mem = eina_memdup(data->data, data->length, EINA_TRUE);
- ddata->content.len = data->length;
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_data_preparer_image(Sel_Manager_Seat_Selection *seat_sel EINA_UNUSED,
- Ecore_X_Event_Selection_Notify *notify,
- Efl_Ui_Selection_Data *ddata, Tmp_Info **tmp_info)
-{
- Ecore_X_Selection_Data *data = notify->data;
- sel_debug("got a image file!\n");
- sel_debug("Size if %d\n", data->length);
-
- ddata->format = EFL_UI_SELECTION_FORMAT_IMAGE;
- data = notify->data;
-
- Tmp_Info *tmp = _tempfile_new(data->length);
- if (!tmp) return EINA_FALSE;
- memcpy(tmp->map, data->data, data->length);
- munmap(tmp->map, data->length);
- ddata->content.mem = strdup(tmp->filename);
- ddata->content.len = strlen(tmp->filename);
- *tmp_info = tmp;
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_win_filter(Eo *manager EINA_UNUSED, Ecore_X_Window xwin)
-{
- Eo *win;
- const Eina_List *l;
-
- EINA_LIST_FOREACH(_elm_win_list, l, win)
- {
- if (elm_win_window_id_get(win) == xwin) return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-/*
- * Callback to handle a targets response on a selection request:
- * So pick the format we'd like; and then request it.
- */
-static Eina_Bool
-_x11_notify_handler_targets(Efl_Ui_Selection_Manager_Data *pd, Sel_Manager_Selection *sel, Ecore_X_Event_Selection_Notify *notify)
-{
- sel_debug("notify handler targets");
- Ecore_X_Selection_Data_Targets *targets;
- Ecore_X_Atom *atom_list;
- int i, j;
-
- targets = notify->data;
- atom_list = (Ecore_X_Atom *)(targets->data.data);
- for (j = (SELECTION_ATOM_LISTING_ATOMS + 1); j < SELECTION_N_ATOMS; j++)
- {
- sel_debug("\t%s %d", pd->atom_list[j].name, pd->atom_list[j].x_atom);
- if (!(pd->atom_list[j].format & sel->request_format)) continue;
- for (i = 0; i < targets->data.length; i++)
- {
- if ((pd->atom_list[j].x_atom == atom_list[i]) && (pd->atom_list[j].x_data_preparer))
- {
- if (j == SELECTION_ATOM_TEXT_URILIST)
- {
- if (!_x11_is_uri_type_data(sel, notify)) continue;
- }
- sel_debug("Atom %s matches", pd->atom_list[j].name);
- goto done;
- }
- }
- }
- sel_debug("Couldn't find anything that matches");
- return ECORE_CALLBACK_PASS_ON;
-done:
- sel_debug("Sending request for %s, xwin=%#llx",
- pd->atom_list[j].name, (unsigned long long)sel->xwin);
- sel->request(sel->xwin, pd->atom_list[j].name);
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_x11_fixes_selection_notify(void *data, int t EINA_UNUSED, void *event)
-{
- Efl_Ui_Selection_Manager_Data *pd = data;
- Efl_Ui_Selection_Changed e;
- Elm_Cnp_Event_Selection_Changed *_e;
- Ecore_X_Event_Fixes_Selection_Notify *ev = event;
- Sel_Manager_Seat_Selection *seat_sel;
- Efl_Ui_Selection_Type type;
- Sel_Manager_Selection *sel;
-
- if (_x11_win_filter(pd->sel_man, ev->win)) return ECORE_CALLBACK_PASS_ON;
-
- switch (ev->selection)
- {
- case ECORE_X_SELECTION_CLIPBOARD:
- type = EFL_UI_SELECTION_TYPE_CLIPBOARD;
- break;
- case ECORE_X_SELECTION_PRIMARY:
- type = EFL_UI_SELECTION_TYPE_PRIMARY;
- break;
- default: return ECORE_CALLBACK_RENEW;
- }
- seat_sel = _x11_sel_manager_seat_selection_init(pd, 1);
- if (!seat_sel) return ECORE_CALLBACK_RENEW;
- sel = seat_sel->sel_list + type;
- if (sel->active && (sel->xwin != ev->owner))
- efl_ui_selection_manager_selection_clear(pd->sel_man, sel->owner, type, seat_sel->seat);
- e.type = type;
- e.seat = 1; /* under x11 this is always the default seat */
- e.exist = !!ev->owner;
-
- _e = calloc(1, sizeof(Elm_Cnp_Event_Selection_Changed));
- EINA_SAFETY_ON_NULL_RETURN_VAL(_e, ECORE_CALLBACK_RENEW);
- _e->type = type;
- _e->seat_id = 1;
- _e->exists = e.exist;
-
- ecore_event_add(ELM_CNP_EVENT_SELECTION_CHANGED, _e, NULL, NULL);
- efl_event_callback_call(sel->owner, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, &e);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-/*
- * Response to a selection notify:
- * - So we have asked for the selection list.
- * - If it's the targets list, parse it, and fire of what we want,
- * else it's the data we want.
- */
-//NB: x11 does not have seat, use 1 as default
-static Eina_Bool
-_efl_sel_manager_x11_selection_notify(void *udata, int type EINA_UNUSED, void *event)
-{
- Efl_Ui_Selection_Manager_Data *pd = udata;
- Ecore_X_Event_Selection_Notify *ev = event;
- Sel_Manager_Selection *sel;
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- int i;
-
- if (_x11_win_filter(pd->sel_man, ev->win)) return ECORE_CALLBACK_PASS_ON;
-
- seat_sel = _sel_manager_seat_selection_get(pd, 1);
- if (!seat_sel)
- return EINA_FALSE;
-
- sel_debug("selection notify callback: %d", ev->selection);
- switch (ev->selection)
- {
- case ECORE_X_SELECTION_PRIMARY:
- sel = seat_sel->sel_list + EFL_UI_SELECTION_TYPE_PRIMARY;
- break;
- case ECORE_X_SELECTION_SECONDARY:
- sel = seat_sel->sel_list + EFL_UI_SELECTION_TYPE_SECONDARY;
- break;
- case ECORE_X_SELECTION_XDND:
- sel = seat_sel->sel_list + EFL_UI_SELECTION_TYPE_DND;
- break;
- case ECORE_X_SELECTION_CLIPBOARD:
- sel = seat_sel->sel_list + EFL_UI_SELECTION_TYPE_CLIPBOARD;
- break;
- default:
- return ECORE_CALLBACK_PASS_ON;
- }
- sel_debug("Target is %s", ev->target);
- if (!sel->asked) return ECORE_CALLBACK_PASS_ON;
- sel->asked--;
-
- if (ev->selection != ECORE_X_SELECTION_XDND &&
- (!strcmp(ev->target, "TARGETS") || !strcmp(ev->target, "ATOMS")))
- {
- _x11_notify_handler_targets(pd, sel, ev);
- return ECORE_CALLBACK_PASS_ON;
- }
- for (i = 0; i < SELECTION_N_ATOMS; i++)
- {
- if (!strcmp(ev->target, pd->atom_list[i].name))
- {
- if (pd->atom_list[i].x_data_preparer)
- {
- Efl_Ui_Selection_Data ddata = { 0 };
- Tmp_Info *tmp_info = NULL;
- Eina_Bool success;
- sel_debug("Found something: %s", pd->atom_list[i].name);
-
- success = pd->atom_list[i].x_data_preparer(seat_sel, ev, &ddata, &tmp_info);
- sel_debug("ddata: %s (%zd)", (const char *)ddata.content.mem, ddata.content.len);
- if ((pd->atom_list[i].format == EFL_UI_SELECTION_FORMAT_IMAGE) &&
- (seat_sel->saved_types->imgfile))
- break;
- if (ev->selection == ECORE_X_SELECTION_XDND)
- {
- if (success)
- {
- Sel_Manager_Dropable *dropable;
- Eina_List *l;
- sel_debug("drag & drop\n");
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- if (dropable->obj == sel->request_obj) break;
- dropable = NULL;
- }
- if (dropable)
- {
- Drop_Format *df;
- Eina_Inlist *itr;
-
- ddata.action = sel->action;
- if (!dropable->is_container)
- {
- sel_debug("normal dnd, not container");
- ddata.pos = seat_sel->saved_types->pos;
- }
- else
- {
- sel_debug("Drop on container");
- Eina_Position2D pos, posret = {0, 0};
- evas_object_geometry_get(dropable->obj, &pos.x, &pos.y, NULL, NULL);
- //get item
- pos = EINA_POSITION2D(seat_sel->saved_types->pos.x + pos.x,
- seat_sel->saved_types->pos.y + pos.y);
- Efl_Object *it = NULL;
- if (dropable->item_func)
- it = dropable->item_func(dropable->item_func_data,
- dropable->obj, pos, &posret);
- ddata.pos = posret;
- ddata.item = it;
- }
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format & dropable->last.format)
- {
- sel_debug("calling Drop event on: %p", dropable->obj);
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_DROP, &ddata);
- }
- }
- }
- else
- {
- sel_debug("dnd: has NO dropable");
- }
- }
- /* We have to finish DnD, no matter what */
- ecore_x_dnd_send_finished();
- }
- else if (sel->data_func && success)
- {
- ddata.pos.x = ddata.pos.y = 0;
- sel->data_func(sel->data_func_data, sel->request_obj, &ddata);
- }
- free((void *)ddata.content.mem);
- if (tmp_info) _tmpinfo_free(tmp_info);
- }
- else sel_debug("Ignored: No handler!");
- break;
- }
- }
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_x11_selection_clear(void *data, int type EINA_UNUSED, void *event)
-{
- Efl_Ui_Selection_Manager_Data *pd = data;
- Ecore_X_Event_Selection_Clear *ev = event;
- Sel_Manager_Selection *sel;
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- Eina_List *l, *l_next;
- Sel_Manager_Selection_Lost *sel_lost;
- unsigned int i;
-
- if (_x11_win_filter(pd->sel_man, ev->win)) return ECORE_CALLBACK_PASS_ON;
-
- seat_sel = _sel_manager_seat_selection_get(pd, 1);
- if (!seat_sel)
- return EINA_FALSE;
-
- for (i = EFL_UI_SELECTION_TYPE_PRIMARY; i <= EFL_UI_SELECTION_TYPE_CLIPBOARD; i++)
- {
- if (seat_sel->sel_list[i].ecore_sel == ev->selection) break;
- }
- sel_debug("selection %d clear", i);
- /* Not me... Don't care */
- if (i > EFL_UI_SELECTION_TYPE_CLIPBOARD) return ECORE_CALLBACK_PASS_ON;
-
- sel = seat_sel->sel_list + i;
-
- EINA_LIST_FOREACH_SAFE(seat_sel->sel_lost_list, l, l_next, sel_lost)
- {
- if ((sel_lost->request == sel->owner) &&
- (sel_lost->type == i))
- {
- sel_debug("resolve the promise: %p", sel_lost->promise);
- eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
- }
- }
- sel->active = EINA_FALSE;
- sel->owner = NULL;
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_x11_general_converter(char *target EINA_UNUSED, void *data, int size EINA_UNUSED, void **data_ret, int *size_ret, Ecore_X_Atom *ttype EINA_UNUSED, int *typesize EINA_UNUSED)
-{
- sel_debug("general converter");
- Sel_Manager_Selection *sel = *(Sel_Manager_Selection **)data;
- if (sel->format == EFL_UI_SELECTION_FORMAT_NONE)
- {
- if (data_ret)
- {
- *data_ret = malloc(sel->data.len * sizeof(char) + 1);
- if (!*data_ret) return EINA_FALSE;
- memcpy(*data_ret, sel->data.mem, sel->data.len);
- ((char**)(data_ret))[0][sel->data.len] = 0;
- }
- if (size_ret) *size_ret = sel->data.len;
- }
- else
- {
- if (sel->data.mem)
- {
- if (data_ret)
- *data_ret = eina_memdup(sel->data.mem, sel->data.len, 1);
- if (size_ret) *size_ret = sel->data.len;
- }
- else
- {
- if (data_ret) *data_ret = NULL;
- if (size_ret) *size_ret = 0;
- }
- }
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_targets_converter(char *target EINA_UNUSED, void *data, int size EINA_UNUSED, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *typesize)
-{
- int i, count;
- Ecore_X_Atom *aret;
- Sel_Manager_Selection *sel;
- Efl_Ui_Selection_Format seltype;
-
- sel_debug("target converter");
- if (!data_ret) return EINA_FALSE;
-
- sel = *(Sel_Manager_Selection **)data;
- seltype = sel->format;
- Sel_Manager_Seat_Selection *seat_sel = sel->seat_sel;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
-
- for (i = SELECTION_ATOM_LISTING_ATOMS + 1, count = 0; i < SELECTION_N_ATOMS ; i++)
- {
- if (seltype & pd->atom_list[i].format) count++;
- }
- aret = malloc(sizeof(Ecore_X_Atom) * count);
- if (!aret) return EINA_FALSE;
- for (i = SELECTION_ATOM_LISTING_ATOMS + 1, count = 0; i < SELECTION_N_ATOMS ; i++)
- {
- if (seltype & pd->atom_list[i].format)
- aret[count ++] = pd->atom_list[i].x_atom;
- }
-
- *data_ret = aret;
- if (typesize) *typesize = 32 /* urk */;
- if (ttype) *ttype = ECORE_X_ATOM_ATOM;
- if (size_ret) *size_ret = count;
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_image_converter(char *target EINA_UNUSED, void *data EINA_UNUSED, int size EINA_UNUSED, void **data_ret EINA_UNUSED, int *size_ret EINA_UNUSED, Ecore_X_Atom *ttype EINA_UNUSED, int *typesize EINA_UNUSED)
-{
- sel_debug("Image converter called");
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_vcard_send(char *target EINA_UNUSED, void *data EINA_UNUSED, int size EINA_UNUSED, void **data_ret, int *size_ret, Ecore_X_Atom *ttype EINA_UNUSED, int *typesize EINA_UNUSED)
-{
- Sel_Manager_Selection *sel;
-
- sel_debug("Vcard send called");
- sel = *(Sel_Manager_Selection **)data;
- if (data_ret)
- {
- char *s;
-
- s = malloc(sel->data.len + 1);
- if (!s) return EINA_FALSE;
- memcpy(s, sel->data.mem, sel->data.len);
- s[sel->data.len] = 0;
- *data_ret = s;
- }
-
- if (size_ret) *size_ret = sel->data.len;
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_text_converter(char *target, void *data, int size EINA_UNUSED, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *typesize)
-{
- Sel_Manager_Selection *sel;
-
- sel = *(Sel_Manager_Selection **)data;
- if (!sel) return EINA_FALSE;
-
- sel_debug("text converter");
- if (sel->format == EFL_UI_SELECTION_FORMAT_NONE)
- {
- sel_debug("none");
- if (data_ret)
- {
- *data_ret = malloc(sel->data.len * sizeof(char) + 1);
- if (!*data_ret) return EINA_FALSE;
- memcpy(*data_ret, data, sel->data.len);
- ((char**)(data_ret))[0][sel->data.len] = 0;
- }
- if (size_ret) *size_ret = sel->data.len;
- return EINA_TRUE;
- }
-
- if (!sel->active) return EINA_TRUE;
-
- if ((sel->format & EFL_UI_SELECTION_FORMAT_MARKUP) ||
- (sel->format & EFL_UI_SELECTION_FORMAT_HTML))
- {
- char *tmp = malloc(sel->data.len + 1);
- if (tmp)
- {
- strncpy(tmp, sel->data.mem, sel->data.len);
- tmp[sel->data.len] = 0;
- *data_ret = _elm_util_mkup_to_text(tmp);
- if (size_ret && *data_ret) *size_ret = strlen(*data_ret);
- free(tmp);
- sel_debug("markup or html: %s", (const char *)*data_ret);
- }
- else return EINA_FALSE;
- }
- else if (sel->format & EFL_UI_SELECTION_FORMAT_TEXT)
- {
- ecore_x_selection_converter_text(target, sel->data.mem,
- sel->data.len,
- data_ret, size_ret,
- ttype, typesize);
- sel_debug("text");
- }
- else if (sel->format & EFL_UI_SELECTION_FORMAT_IMAGE)
- {
- efl_file_simple_get(sel->request_obj, (const char **)data_ret, NULL);
- if (!*data_ret) *data_ret = strdup("No file");
- else *data_ret = strdup(*data_ret);
-
- if (!*data_ret)
- {
- ERR("Failed to allocate memory!");
- *size_ret = 0;
- return EINA_FALSE;
- }
-
- *size_ret = strlen(*data_ret);
- }
- return EINA_TRUE;
-}
-
-static Eina_Future *
-_x11_efl_sel_manager_selection_set(Efl_Ui_Selection_Manager_Data *pd, Efl_Object *owner,
- Efl_Ui_Selection_Type type, Efl_Ui_Selection_Format format, Eina_Slice data,
- Ecore_X_Window xwin, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- Eina_Bool same_win = EINA_FALSE;
-
- seat_sel = _x11_sel_manager_seat_selection_init(pd, seat);
- seat_sel->active_type = type;
- sel = seat_sel->sel_list + type;
- //support 1 app with multiple window, 1 selection manager
- if (seat_sel->xwin == xwin)
- same_win = EINA_TRUE;
- _owner_change_check(pd->sel_man, owner, seat_sel, sel, type, same_win);
- seat_sel->xwin = xwin;
-
- sel->owner = owner;
- free(sel->data.mem);
- sel->xwin = xwin;
- sel->data = eina_slice_dup(data);
- sel->active = EINA_TRUE;
- sel->format = format;
-
- sel->set(xwin, &sel, sizeof(Sel_Manager_Selection *));
- sel_debug("data: %p (%zu)", &sel, sizeof(Sel_Manager_Selection *));
-
- return _update_sel_lost_list(owner, type, seat_sel);
-}
-
-static void
-_x11_efl_sel_manager_selection_get(const Efl_Object *request, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Ui_Selection_Type type, Efl_Ui_Selection_Format format,
- void *data_func_data, Efl_Ui_Selection_Data_Ready data_func, Eina_Free_Cb data_func_free_cb,
- Ecore_X_Window xwin, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;;
-
- sel_debug("request: %p, seat: %u, type: %d, format: %d", request, seat, type, format);
- seat_sel = _sel_manager_seat_selection_init(pd, seat);
- sel = seat_sel->sel_list + type;
- sel->request_obj = (Efl_Object *)request;
- sel->data_func_data = data_func_data;
- sel->data_func = data_func;
- sel->data_func_free_cb = data_func_free_cb;
- sel->request_format = format;
- sel->xwin = xwin;
-
- if (sel->active)
- {
- if (sel->data.mem &&
- ((format == sel->format) || (xwin == 0)))
- {
- sel_debug("use local data");
- Efl_Ui_Selection_Data seldata;
-
- seldata.content.mem = sel->data.mem;
- seldata.content.len = sel->data.len;
- seldata.pos.x = seldata.pos.y = 0;
- seldata.format = sel->format;
- sel->data_func(sel->data_func_data, sel->request_obj, &seldata);
- return;
- }
- }
-
- sel->asked = 2;
- sel->request(xwin, ECORE_X_SELECTION_TARGET_TARGETS);
-}
-
-static void
-_x11_win_rotation_changed_cb(void *data, const Efl_Event *event)
-{
- Evas_Object *win = data;
- int rot = elm_win_rotation_get(event->object);
- elm_win_rotation_set(win, rot);
-}
-
-static Eina_Bool
-_x11_drag_mouse_up(void *data, int etype EINA_UNUSED, void *event)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
- Ecore_X_Window xwin = seat_sel->xwin;
- Ecore_Event_Mouse_Button *ev = event;
-
- if ((ev->buttons == 1) &&
- (ev->event_window == xwin))
- {
- Eina_Bool have_drop_list = EINA_FALSE;
- Eina_List *l;
- Sel_Manager_Dropable *dropable;
-
- ecore_x_pointer_ungrab();
- ELM_SAFE_FREE(seat_sel->mouse_up_handler, ecore_event_handler_del);
- ELM_SAFE_FREE(seat_sel->dnd_status_handler, ecore_event_handler_del);
- ecore_x_dnd_self_drop();
-
- sel_debug("mouse up, xwin=%#llx\n", (unsigned long long)xwin);
-
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- if (xwin == _x11_xwin_get(dropable->obj))
- {
- have_drop_list = EINA_TRUE;
- break;
- }
- }
- if (!have_drop_list) ecore_x_dnd_aware_set(xwin, EINA_FALSE);
- efl_event_callback_call(seat_sel->drag_obj, EFL_UI_DND_EVENT_DRAG_DONE, NULL);
- if (seat_sel->drag_win)
- {
- if (seat_sel->drag_obj)
- {
- if (elm_widget_is(seat_sel->drag_obj))
- {
- Evas_Object *win = elm_widget_top_get(seat_sel->drag_obj);
- if (win && efl_isa(win, EFL_UI_WIN_CLASS))
- efl_event_callback_del(win, EFL_UI_WIN_EVENT_WIN_ROTATION_CHANGED,
- _x11_win_rotation_changed_cb, seat_sel->drag_win);
- }
- }
-
- if (!seat_sel->accept)
- { /* Commit animation when drag cancelled */
- /* Record final position of dragwin, then do animation */
- ecore_evas_animator_timeline_add(seat_sel->drag_win, 0.3,
- _drag_cancel_animate, seat_sel);
- }
- else
- { /* No animation drop was committed */
- Ecore_X_Window xdragwin = _x11_xwin_get(seat_sel->drag_win);
- ecore_x_window_ignore_set(xdragwin, 0);
- evas_object_del(seat_sel->drag_win);
- seat_sel->drag_win = NULL;
- sel_debug("deleted drag_win");
- }
- }
-
- seat_sel->drag_obj = NULL;
- seat_sel->accept = EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static void
-_x11_drag_move(void *data, Ecore_X_Xdnd_Position *pos)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- Efl_Dnd_Drag_Pos dp;
-
- evas_object_move(seat_sel->drag_win,
- pos->position.x - seat_sel->drag_pos.x,
- pos->position.y - seat_sel->drag_pos.y);
- seat_sel->drag_win_end.x = pos->position.x - seat_sel->drag_pos.x;
- seat_sel->drag_win_end.y = pos->position.y - seat_sel->drag_pos.y;
- sel_debug("dragevas: %p -> %p\n",
- seat_sel->drag_obj,
- evas_object_evas_get(seat_sel->drag_obj));
- dp.pos.x = pos->position.x;
- dp.pos.y = pos->position.y;
- dp.action = seat_sel->drag_action;
- //for drag side
- efl_event_callback_call(seat_sel->drag_obj, EFL_UI_DND_EVENT_DRAG_POS, &dp);
-}
-
-static void
-_x11_drag_target_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *info EINA_UNUSED)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- Sel_Manager_Selection *sel = &seat_sel->sel_list[seat_sel->active_type];
-
- if (seat_sel->drag_obj == obj)
- {
- sel->request_obj = NULL;
- seat_sel->drag_obj = NULL;
- }
-}
-
-static Eina_Bool
-_x11_dnd_status(void *data, int etype EINA_UNUSED, void *ev)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- Ecore_X_Event_Xdnd_Status *status = ev;
-
- seat_sel->accept = EINA_FALSE;
-
- /* Only thing we care about: will accept */
- if ((status) && (status->will_accept))
- {
- sel_debug("Will accept\n");
- seat_sel->accept = EINA_TRUE;
- }
- /* Won't accept */
- else
- {
- sel_debug("Won't accept accept\n");
- }
- efl_event_callback_call(seat_sel->drag_obj, EFL_UI_DND_EVENT_DRAG_ACCEPT, &seat_sel->accept);
-
- return EINA_TRUE;
-}
-
-static void
-_x11_efl_sel_manager_drag_start(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *drag_obj, Efl_Ui_Selection_Format format,
- Eina_Slice data, Efl_Ui_Selection_Action action,
- void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func,
- Eina_Free_Cb icon_func_free_cb EINA_UNUSED,
- Ecore_X_Window xwin, unsigned int seat)
-{
- Ecore_X_Window xdragwin;
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- Ecore_Evas *ee;
- int x, y, x2 = 0, y2 = 0, x3, y3;
- Evas_Object *icon = NULL;
- int w = 0, h = 0;
- int ex, ey, ew, eh;
- Ecore_X_Atom actx;
- int i;
- int xr, yr, rot;
-
- seat_sel = _x11_sel_manager_seat_selection_init(pd, seat);
- if (!seat_sel) return;
- seat_sel->active_type = EFL_UI_SELECTION_TYPE_DND;
-
- sel = &seat_sel->sel_list[seat_sel->active_type];
- ecore_x_dnd_types_set(xwin, NULL, 0);
- for (i = SELECTION_ATOM_LISTING_ATOMS + 1; i < SELECTION_N_ATOMS; i++)
- {
- if (format == EFL_UI_SELECTION_FORMAT_TARGETS || (pd->atom_list[i].format & format))
- {
- ecore_x_dnd_type_set(xwin, pd->atom_list[i].name, EINA_TRUE);
- sel_debug("set dnd type: %s\n", pd->atom_list[i].name);
- }
- }
-
- sel->active = EINA_TRUE;
- sel->request_obj = drag_obj;
- sel->format = format;
- if (sel->data.mem) free(sel->data.mem);
- sel->data = eina_slice_dup(data);
- sel->action = action;
- seat_sel->drag_obj = drag_obj;
- seat_sel->drag_action = action;
- seat_sel->xwin = xwin;
-
- evas_object_event_callback_add(drag_obj, EVAS_CALLBACK_DEL,
- _x11_drag_target_del, seat_sel);
- /* TODO BUG: should increase dnd-awareness, in case it's drop target as well. See _x11_drag_mouse_up() */
- ecore_x_dnd_aware_set(xwin, EINA_TRUE);
- ecore_x_dnd_callback_pos_update_set(_x11_drag_move, seat_sel);
- ecore_x_dnd_self_begin(xwin, (unsigned char *)sel, sizeof(Sel_Manager_Selection));
- actx = _x11_dnd_action_rev_map(seat_sel->drag_action);
- ecore_x_dnd_source_action_set(actx);
- ecore_x_pointer_grab(xwin);
- seat_sel->mouse_up_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
- _x11_drag_mouse_up, seat_sel);
- seat_sel->dnd_status_handler = ecore_event_handler_add(ECORE_X_EVENT_XDND_STATUS,
- _x11_dnd_status, seat_sel);
- seat_sel->drag_win = elm_win_add(NULL, "Elm-Drag", ELM_WIN_DND);
- elm_win_alpha_set(seat_sel->drag_win, EINA_TRUE);
- elm_win_override_set(seat_sel->drag_win, EINA_TRUE);
- xdragwin = _x11_xwin_get(seat_sel->drag_win);
- ecore_x_window_ignore_set(xdragwin, 1);
-
- /* dragwin has to be rotated as the main window is */
- if (elm_widget_is(drag_obj))
- {
- Evas_Object *win = elm_widget_top_get(drag_obj);
- if (win && efl_isa(win, EFL_UI_WIN_CLASS))
- {
- elm_win_rotation_set(seat_sel->drag_win, elm_win_rotation_get(win));
- efl_event_callback_add(win, EFL_UI_WIN_EVENT_WIN_ROTATION_CHANGED,
- _x11_win_rotation_changed_cb, seat_sel->drag_win);
- }
- }
-
- if (icon_func)
- {
- Eina_Position2D off;
-
- icon = icon_func(icon_func_data, seat_sel->drag_win, drag_obj, &off);
- if (icon)
- {
- x2 = off.x;
- y2 = off.y;
- evas_object_geometry_get(icon, NULL, NULL, &w, &h);
- }
- }
- else
- {
- icon = elm_icon_add(seat_sel->drag_win);
- evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- // need to resize
- }
- elm_win_resize_object_add(seat_sel->drag_win, icon);
-
- /* Position subwindow appropriately */
- ee = ecore_evas_ecore_evas_get(evas_object_evas_get(drag_obj));
- ecore_evas_geometry_get(ee, &ex, &ey, &ew, &eh);
- evas_object_resize(seat_sel->drag_win, w, h);
-
- evas_object_show(icon);
- evas_object_show(seat_sel->drag_win);
- evas_pointer_canvas_xy_get(evas_object_evas_get(drag_obj), &x3, &y3);
-
- rot = ecore_evas_rotation_get(ee);
- switch (rot)
- {
- case 90:
- xr = y3;
- yr = ew - x3;
- seat_sel->drag_pos.x = y3 - y2;
- seat_sel->drag_pos.y = x3 - x2;
- break;
- case 180:
- xr = ew - x3;
- yr = eh - y3;
- seat_sel->drag_pos.x = x3 - x2;
- seat_sel->drag_pos.y = y3 - y2;
- break;
- case 270:
- xr = eh - y3;
- yr = x3;
- seat_sel->drag_pos.x = y3 - y2;
- seat_sel->drag_pos.y = x3 - x2;
- break;
- default:
- xr = x3;
- yr = y3;
- seat_sel->drag_pos.x = x3 - x2;
- seat_sel->drag_pos.y = y3 - y2;
- break;
- }
- x = ex + xr - seat_sel->drag_pos.x;
- y = ey + yr - seat_sel->drag_pos.y;
- evas_object_move(seat_sel->drag_win, x, y);
- seat_sel->drag_win_start = EINA_POSITION2D(x, y);
- seat_sel->drag_win_end = EINA_POSITION2D(x, y);
-}
-
-static void
-_x11_dnd_dropable_handle(Efl_Ui_Selection_Manager_Data *pd, Sel_Manager_Dropable *dropable, Eina_Position2D pos, Efl_Ui_Selection_Action action)
-{
- Sel_Manager_Dropable *d, *last_dropable = NULL;
- Eina_List *l;
- Eina_Inlist *itr;
-
- EINA_LIST_FOREACH(pd->drop_list, l, d)
- {
- if (d->last.in)
- {
- last_dropable = d;
- break;
- }
- }
- if (last_dropable)
- {
- if (last_dropable == dropable) // same
- {
- Evas_Coord ox, oy;
- Drop_Format *df;
-
- sel_debug("same obj dropable %p\n", dropable->obj);
- evas_object_geometry_get(dropable->obj, &ox, &oy, NULL, NULL);
- Efl_Dnd_Drag_Pos pos_data;
- if (!dropable->is_container)
- {
- pos_data.pos = EINA_POSITION2D(pos.x - ox, pos.y - oy);
- pos_data.item = NULL;
- }
- else
- {
- Eina_Position2D posret = {0, 0};
- Efl_Object *it = NULL;
-
- if (dropable->item_func)
- it = dropable->item_func(dropable->item_func_data, dropable->obj,
- pos, &posret);
- pos_data.pos = posret;
- pos_data.item = it;
- }
- pos_data.format = dropable->last.format;
- pos_data.action = action;
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format & dropable->last.format)
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_POS, &pos_data);
- }
- }
- else
- {
- if (dropable) // leave last obj and enter new one
- {
- sel_debug("leave %p\n", last_dropable->obj);
- sel_debug("enter %p\n", dropable->obj);
- last_dropable->last.in = EINA_FALSE;
- last_dropable->last.type = NULL;
- dropable->last.in = EINA_TRUE;
-
- Drop_Format *df;
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format &dropable->last.format)
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_ENTER, NULL);
- }
- EINA_INLIST_FOREACH_SAFE(last_dropable->format_list, itr, df)
- {
- if (df->format & last_dropable->last.format)
- efl_event_callback_call(last_dropable->obj, EFL_UI_DND_EVENT_DRAG_LEAVE, NULL);
- }
- }
- else // leave last obj
- {
- sel_debug("leave %p\n", last_dropable->obj);
- last_dropable->last.in = EINA_FALSE;
- last_dropable->last.type = NULL;
-
- Drop_Format *df;
- EINA_INLIST_FOREACH_SAFE(last_dropable->format_list, itr, df)
- {
- if (df->format & last_dropable->last.format)
- efl_event_callback_call(last_dropable->obj, EFL_UI_DND_EVENT_DRAG_LEAVE, NULL);
- }
- }
- }
- }
- else
- {
- if (dropable) // enter new obj
- {
- Evas_Coord ox, oy;
-
- sel_debug("enter %p\n", dropable->obj);
- evas_object_geometry_get(dropable->obj, &ox, &oy, NULL, NULL);
- dropable->last.in = EINA_TRUE;
-
- Drop_Format *df;
- Efl_Dnd_Drag_Pos pos_data;
- if (!dropable->is_container)
- {
- pos_data.pos = EINA_POSITION2D(pos.x - ox, pos.y - oy);
- pos_data.item = NULL;
- }
- else
- {
- Eina_Position2D posret = {0, 0};
- Efl_Object *it = NULL;
- if (dropable->item_func)
- it = dropable->item_func(dropable->item_func_data, dropable->obj,
- pos, &posret);
- pos_data.pos = posret;
- pos_data.item = it;
- }
- pos_data.format = dropable->last.format;
- pos_data.action = action;
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format & dropable->last.format)
- {
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_ENTER, NULL);
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_POS, &pos_data);
- }
- }
- }
- else
- {
- sel_debug("both dropable & last_dropable are null\n");
- }
- }
-}
-
-static Sel_Manager_Dropable *
-_x11_dropable_find(Efl_Ui_Selection_Manager_Data *pd, Ecore_X_Window win)
-{
- Eina_List *l;
- Sel_Manager_Dropable *dropable;
-
- if (!pd->drop_list) return NULL;
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- if (_x11_xwin_get(dropable->obj) == win) return dropable;
- }
- return NULL;
-}
-
-static Evas *
-_x11_evas_get_from_xwin(Efl_Ui_Selection_Manager_Data *pd, Ecore_X_Window win)
-{
- /* Find the Evas connected to the window */
- Sel_Manager_Dropable *dropable = _x11_dropable_find(pd, win);
- return dropable ? evas_object_evas_get(dropable->obj) : NULL;
-}
-
-static Efl_Ui_Selection_Action
-_x11_dnd_action_map(Ecore_X_Atom action)
-{
- Efl_Ui_Selection_Action act = EFL_UI_SELECTION_ACTION_UNKNOWN;
-
- if (action == ECORE_X_ATOM_XDND_ACTION_COPY)
- act = EFL_UI_SELECTION_ACTION_COPY;
- else if (action == ECORE_X_ATOM_XDND_ACTION_MOVE)
- act = EFL_UI_SELECTION_ACTION_MOVE;
- else if (action == ECORE_X_ATOM_XDND_ACTION_PRIVATE)
- act = EFL_UI_SELECTION_ACTION_PRIVATE;
- else if (action == ECORE_X_ATOM_XDND_ACTION_ASK)
- act = EFL_UI_SELECTION_ACTION_ASK;
- else if (action == ECORE_X_ATOM_XDND_ACTION_LIST)
- act = EFL_UI_SELECTION_ACTION_LIST;
- else if (action == ECORE_X_ATOM_XDND_ACTION_LINK)
- act = EFL_UI_SELECTION_ACTION_LINK;
- else if (action == ECORE_X_ATOM_XDND_ACTION_DESCRIPTION)
- act = EFL_UI_SELECTION_ACTION_DESCRIPTION;
- return act;
-}
-
-static Ecore_X_Atom
-_x11_dnd_action_rev_map(Efl_Ui_Selection_Action action)
-{
- Ecore_X_Atom act = ECORE_X_ATOM_XDND_ACTION_MOVE;
-
- if (action == EFL_UI_SELECTION_ACTION_COPY)
- act = ECORE_X_ATOM_XDND_ACTION_COPY;
- else if (action == EFL_UI_SELECTION_ACTION_MOVE)
- act = ECORE_X_ATOM_XDND_ACTION_MOVE;
- else if (action == EFL_UI_SELECTION_ACTION_PRIVATE)
- act = ECORE_X_ATOM_XDND_ACTION_PRIVATE;
- else if (action == EFL_UI_SELECTION_ACTION_ASK)
- act = ECORE_X_ATOM_XDND_ACTION_ASK;
- else if (action == EFL_UI_SELECTION_ACTION_LIST)
- act = ECORE_X_ATOM_XDND_ACTION_LIST;
- else if (action == EFL_UI_SELECTION_ACTION_LINK)
- act = ECORE_X_ATOM_XDND_ACTION_LINK;
- else if (action == EFL_UI_SELECTION_ACTION_DESCRIPTION)
- act = ECORE_X_ATOM_XDND_ACTION_DESCRIPTION;
- return act;
-}
-
-static Eina_Bool
-_x11_dnd_enter(void *data, int etype EINA_UNUSED, void *ev)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
- Ecore_X_Event_Xdnd_Enter *enter = ev;
- Sel_Manager_Dropable *dropable;
- int i;
-
- sel_debug("In");
- if (!enter) return EINA_TRUE;
- dropable = _x11_dropable_find(pd, enter->win);
- if (dropable)
- {
- sel_debug("Enter %x\n", enter->win);
- }
- /* Skip it */
- sel_debug("enter types=%p (%d)\n", enter->types, enter->num_types);
- if ((!enter->num_types) || (!enter->types)) return EINA_TRUE;
-
- sel_debug("Types\n");
- seat_sel->saved_types->ntypes = enter->num_types;
- free(seat_sel->saved_types->types);
- seat_sel->saved_types->types = malloc(sizeof(char *) * enter->num_types);
- if (!seat_sel->saved_types->types) return EINA_FALSE;
-
- for (i = 0; i < enter->num_types; i++)
- {
- seat_sel->saved_types->types[i] = eina_stringshare_add(enter->types[i]);
- sel_debug("Type is %s %p %p\n", enter->types[i],
- seat_sel->saved_types->types[i], pd->text_uri);
- if (seat_sel->saved_types->types[i] == pd->text_uri)
- {
- /* Request it, so we know what it is */
- sel_debug("Sending uri request\n");
- seat_sel->saved_types->textreq = 1;
- ELM_SAFE_FREE(seat_sel->saved_types->imgfile, free);
- ecore_x_selection_xdnd_request(enter->win, pd->text_uri);
- }
- }
-
- /* FIXME: Find an object and make it current */
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_dnd_position(void *data, int etype EINA_UNUSED, void *ev)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
- Ecore_X_Event_Xdnd_Position *xpos = ev;
- Ecore_X_Rectangle rect = { 0, 0, 0, 0 };
- Sel_Manager_Dropable *dropable;
- Efl_Ui_Selection_Action act;
-
- sel_debug("In");
- /* Need to send a status back */
- /* FIXME: Should check I can drop here */
- /* FIXME: Should highlight widget */
- dropable = _x11_dropable_find(pd, xpos->win);
- if (dropable)
- {
- Evas_Coord ox = 0, oy = 0;
- Eina_Position2D pos;
-
- act = _x11_dnd_action_map(xpos->action);
- pos.x = xpos->position.x;
- pos.y = xpos->position.y;
- _dropable_coords_adjust(dropable, &pos);
- Evas *evas = _x11_evas_get_from_xwin(pd, xpos->win);
- Eina_List *dropable_list = evas ? _dropable_list_geom_find(pd, evas, pos.x, pos.y) : NULL;
- /* check if there is dropable (obj) can accept this drop */
- if (dropable_list)
- {
- Efl_Ui_Selection_Format saved_format = _dnd_types_to_format(pd, seat_sel->saved_types->types, seat_sel->saved_types->ntypes);
- Eina_List *l;
- Eina_Bool found = EINA_FALSE;
-
- EINA_LIST_FOREACH(dropable_list, l, dropable)
- {
- Drop_Format *df;
- Eina_Inlist *itr;
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- Efl_Ui_Selection_Format common_fmt = saved_format & df->format;
- if (common_fmt)
- {
- //We found a target that can accept this type of data
- int i, min_index = SELECTION_N_ATOMS;
- //We have to find the first atom that corresponds to one
- //of the supported data types.
- for (i = 0; i < seat_sel->saved_types->ntypes; i++)
- {
- Sel_Manager_Atom *atom = eina_hash_find(pd->type_hash, seat_sel->saved_types->types[i]);
- if (atom && (atom->format & common_fmt))
- {
- int atom_idx = (atom - pd->atom_list);
- if (min_index > atom_idx) min_index = atom_idx;
- }
- }
- if (min_index != SELECTION_N_ATOMS)
- {
- sel_debug("Found atom %s\n", pd->atom_list[min_index].name);
- found = EINA_TRUE;
- dropable->last.type = pd->atom_list[min_index].name;
- dropable->last.format = common_fmt;
- break;
- }
- }
- }
- if (found) break;
- }
- if (found)
- {
- Sel_Manager_Dropable *d = NULL;
- Eina_Rectangle inter_rect = {0, 0, 0, 0};
- int idx = 0;
- EINA_LIST_FOREACH(dropable_list, l, d)
- {
- if (idx == 0)
- {
- evas_object_geometry_get(d->obj, &inter_rect.x, &inter_rect.y,
- &inter_rect.w, &inter_rect.h);
- }
- else
- {
- Eina_Rectangle cur_rect;
- evas_object_geometry_get(d->obj, &cur_rect.x, &cur_rect.y,
- &cur_rect.w, &cur_rect.h);
- if (!eina_rectangle_intersection(&inter_rect, &cur_rect)) continue;
- }
- idx++;
- }
- rect.x = inter_rect.x;
- rect.y = inter_rect.y;
- rect.width = inter_rect.w;
- rect.height = inter_rect.h;
- ecore_x_dnd_send_status(EINA_TRUE, EINA_FALSE, rect, xpos->action);
- sel_debug("dnd position %i %i %p\n", pos.x - ox, pos.y - oy, dropable);
- pos.x = pos.x - ox;
- pos.y = pos.y - oy;
- _x11_dnd_dropable_handle(pd, dropable, pos, act);
- // CCCCCCC: call dnd exit on last obj if obj != last
- // CCCCCCC: call drop position on obj
- }
- else
- {
- //if not: send false status
- ecore_x_dnd_send_status(EINA_FALSE, EINA_FALSE, rect, xpos->action);
- sel_debug("dnd position (%d, %d) not in obj\n", pos.x, pos.y);
- _x11_dnd_dropable_handle(pd, NULL, EINA_POSITION2D(0, 0), act);
- // CCCCCCC: call dnd exit on last obj
- }
- eina_list_free(dropable_list);
- }
- else
- {
- ecore_x_dnd_send_status(EINA_FALSE, EINA_FALSE, rect, xpos->action);
- sel_debug("dnd position (%d, %d) has no drop\n", pos.x, pos.y);
- _x11_dnd_dropable_handle(pd, NULL, EINA_POSITION2D(0, 0), act);
- }
- }
- else
- {
- ecore_x_dnd_send_status(EINA_FALSE, EINA_FALSE, rect, xpos->action);
- }
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_dnd_leave(void *data, int etype EINA_UNUSED, void *ev)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- Eina_Position2D pos = {0, 0};
-#ifdef DEBUGON
- sel_debug("Leave %x\n", ((Ecore_X_Event_Xdnd_Leave *)ev)->win);
-#else
- (void)ev;
-#endif
- _x11_dnd_dropable_handle(seat_sel->pd, NULL, pos, EFL_UI_SELECTION_ACTION_UNKNOWN);
- // CCCCCCC: call dnd exit on last obj if there was one
- // leave->win leave->source
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_dnd_drop(void *data, int etype EINA_UNUSED, void *ev)
-{
- sel_debug("In");
- Sel_Manager_Seat_Selection *seat_sel = data;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
- Ecore_X_Event_Xdnd_Drop *drop;
- Sel_Manager_Dropable *dropable = NULL;
- Evas_Coord x = 0, y = 0;
- Efl_Ui_Selection_Action act = EFL_UI_SELECTION_ACTION_UNKNOWN;
- Eina_List *l;
- Sel_Manager_Selection *sel;
-
- drop = ev;
- sel_debug("drop_list %p (%d)\n", pd->drop_list, eina_list_count(pd->drop_list));
- if (!(dropable = _x11_dropable_find(pd, drop->win))) return EINA_TRUE;
-
- /* Calculate real (widget relative) position */
- // - window position
- // - widget position
- seat_sel->saved_types->pos = EINA_POSITION2D(drop->position.x, drop->position.y);
- _dropable_coords_adjust(dropable, &seat_sel->saved_types->pos);
-
- sel_debug("Drop position is %d,%d\n", seat_sel->saved_types->pos.x, seat_sel->saved_types->pos.y);
-
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- if (dropable->last.in)
- {
- evas_object_geometry_get(dropable->obj, &x, &y, NULL, NULL);
- seat_sel->saved_types->pos.x -= x;
- seat_sel->saved_types->pos.y -= y;
- goto found;
- }
- }
-
- sel_debug("Didn't find a target\n");
- return EINA_TRUE;
-
-found:
- sel_debug("0x%x\n", drop->win);
-
- act = _x11_dnd_action_map(drop->action);
-
- dropable->last.in = EINA_FALSE;
- sel_debug("Last type: %s - Last format: %X\n", dropable->last.type, dropable->last.format);
-#if 0 // this seems to be broken and causes dnd to stop working e.g. to/from
- // rage even though iut used to work fine.
- Efl_Ui_Selection_Data ddata;
- Eina_Inlist *itr;
- if ((!strcmp(dropable->last.type, pd->text_uri)))
- {
- sel_debug("We found a URI... (%scached) %s\n",
- seat_sel->saved_types->imgfile ? "" : "not ",
- seat_sel->saved_types->imgfile);
- if (seat_sel->saved_types->imgfile)
- {
- Drop_Format *df;
-
- if (!dropable->is_container)
- {
- ddata.pos = seat_sel->saved_types->pos;
- ddata.item = NULL;
- }
- else
- {
- //for container
- Efl_Object *it = NULL;
- Evas_Coord x0 = 0, y0 = 0;
- Eina_Position2D pos, posret = {0, 0};
-
- evas_object_geometry_get(dropable->obj, &x0, &y0, NULL, NULL);
- pos = EINA_POSITION2D(seat_sel->saved_types->pos.x + x0,
- seat_sel->saved_types->pos.y + y0);
- if (dropable->item_func)
- it = dropable->item_func(dropable->item_func_data, dropable->obj,
- pos, &posret);
- ddata.pos = posret;
- ddata.item = it;
- }
- ddata.action = act;
-
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format & EFL_UI_SELECTION_FORMAT_IMAGE)
- {
- sel_debug("Doing image insert (%s)\n", seat_sel->saved_types->imgfile);
- ddata.format = EFL_UI_SELECTION_FORMAT_IMAGE;
- ddata.content.mem = (char *)seat_sel->saved_types->imgfile;
- ddata.content.len = strlen(ddata.content.mem);
- if (df->format & dropable->last.format)
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_DROP, &ddata);
- }
- else
- {
- sel_debug("Item doesn't support images... passing\n");
- }
- }
- ecore_x_dnd_send_finished();
- ELM_SAFE_FREE(seat_sel->saved_types->imgfile, free);
- return EINA_TRUE;
- }
- else if (seat_sel->saved_types->textreq)
- {
- /* Already asked: Pretend we asked now, and paste immediately when
- * it comes in */
- seat_sel->saved_types->textreq = 0;
- ecore_x_dnd_send_finished();
- return EINA_TRUE;
- }
- }
-#endif
- sel = seat_sel->sel_list + EFL_UI_SELECTION_TYPE_DND;
- sel_debug("doing a request then: %s\n", dropable->last.type);
- sel->xwin = drop->win;
- sel->request_obj = dropable->obj;
- sel->request_format = dropable->last.format;
- sel->active = EINA_TRUE;
- sel->action = act;
- sel->asked++;
- ecore_x_selection_xdnd_request(drop->win, dropable->last.type);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_x11_sel_manager_drop_target_add(Efl_Ui_Selection_Manager_Data *pd, Efl_Object *target_obj,
- Efl_Ui_Selection_Format format, Ecore_X_Window xwin,
- unsigned int seat)
-{
- Sel_Manager_Dropable *dropable = NULL;
- Eina_List *l;
- Eina_Bool have_drop_list = EINA_FALSE;
- Sel_Manager_Seat_Selection *seat_sel = NULL;
-
- /* Is this the first? */
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- if (xwin == _x11_xwin_get(dropable->obj))
- {
- have_drop_list = EINA_TRUE;
- break;
- }
- }
- dropable = NULL; // In case of error, we don't want to free it
-
-
- Drop_Format *df = calloc(1, sizeof(Drop_Format));
- if (!df) return EINA_FALSE;
- df->format = format;
-
- dropable = efl_key_data_get(target_obj, "__elm_dropable");
- if (!dropable)
- {
- /* Create new drop */
- dropable = calloc(1, sizeof(Sel_Manager_Dropable));
- if (!dropable) goto error;
- dropable->last.in = EINA_FALSE;
- pd->drop_list = eina_list_append(pd->drop_list, dropable);
- if (!pd->drop_list) goto error;
- dropable->obj = target_obj;
- efl_key_data_set(target_obj, "__elm_dropable", dropable);
- }
- dropable->format_list = eina_inlist_append(dropable->format_list, EINA_INLIST_GET(df));
- dropable->seat = seat;
-
- evas_object_event_callback_add(target_obj, EVAS_CALLBACK_DEL,
- _all_drop_targets_cbs_del, pd);
- if (!have_drop_list) ecore_x_dnd_aware_set(xwin, EINA_TRUE);
-
- seat_sel = _x11_sel_manager_seat_selection_init(pd, seat);
-
- if (seat_sel->enter_handler) return EINA_TRUE;
- sel_debug("Adding drop target calls xwin=%#llx", (unsigned long long)xwin);
- seat_sel->enter_handler = ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER,
- _x11_dnd_enter, seat_sel);
- seat_sel->leave_handler = ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE,
- _x11_dnd_leave, seat_sel);
- seat_sel->pos_handler = ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION,
- _x11_dnd_position, seat_sel);
- seat_sel->drop_handler = ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP,
- _x11_dnd_drop, seat_sel);
- return EINA_TRUE;
-error:
- free(df);
- free(dropable);
- return EINA_FALSE;
-}
-
-#endif
-
-//Wayland
-#ifdef HAVE_ELEMENTARY_WL2
-static Sel_Manager_Seat_Selection *
-_wl_sel_manager_seat_selection_init(Efl_Ui_Selection_Manager_Data *pd, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- Eina_List *l = NULL;
-
- EINA_LIST_FOREACH(pd->seat_list, l, seat_sel)
- {
- if(seat_sel->seat == seat)
- break;
- }
- if (!seat_sel)
- {
- seat_sel = calloc(1, sizeof(Sel_Manager_Seat_Selection));
- if (!seat_sel)
- {
- ERR("Failed to allocate seat");
- return NULL;
- }
- seat_sel->saved_types = calloc(1, sizeof(Saved_Type));
- seat_sel->seat = seat;
- seat_sel->pd = pd;
- pd->seat_list = eina_list_append(pd->seat_list, seat_sel);
- }
- if (!seat_sel->sel)
- {
- Sel_Manager_Selection *sel = calloc(1, sizeof(Sel_Manager_Selection));
- if (!sel)
- {
- ERR("failed to allocate selection");
- return NULL;
- }
- sel->seat_sel = seat_sel;
- seat_sel->sel = sel;
- }
-
- return seat_sel;
-}
-
-static void
-_wl_drag_source_del(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
-{
- Sel_Manager_Seat_Selection *seat_sel = data;
- if (seat_sel->drag_obj == obj)
- seat_sel->drag_obj = NULL;
-}
-
-static void
-_wl_efl_sel_manager_drag_start(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd, Efl_Object *drag_obj,
- Efl_Ui_Selection_Format format, Eina_Slice data,
- Efl_Ui_Selection_Action action, void *icon_func_data,
- Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb EINA_UNUSED,
- Ecore_Wl2_Window *win, unsigned int seat)
-{
- Ecore_Evas *ee;
- Evas_Object *icon = NULL;
- int x, y, x2 = 0, y2 = 0, x3, y3, w = 0, h = 0;
- const char *types[SELECTION_N_ATOMS + 1];
- int i, nb_types = 0;
- Ecore_Wl2_Window *parent = NULL;
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
-
- sel_debug("In");
- seat_sel = _wl_sel_manager_seat_selection_init(pd, seat);
- if (!seat_sel) return;
- seat_sel->active_type = EFL_UI_SELECTION_TYPE_DND;
- sel = seat_sel->sel;
-
- sel_debug("checking drag_win: %p", seat_sel->drag_win);
- /* if we already have a drag, get out */
- if (seat_sel->drag_win) return;
-
- for (i = SELECTION_ATOM_LISTING_ATOMS + 1; i < SELECTION_N_ATOMS; i++)
- {
- if (format == EFL_UI_SELECTION_FORMAT_TARGETS || (pd->atom_list[i].format & format))
- {
- types[nb_types++] = pd->atom_list[i].name;
- sel_debug("set dnd type: %s\n", pd->atom_list[i].name);
- }
- }
- types[nb_types] = NULL;
-
- ecore_wl2_dnd_drag_types_set(_wl_seat_get(win, drag_obj, seat), types);
-
- /* set the drag data used when a drop occurs */
- free(sel->data.mem);
- sel->data.len = 0;
- sel->data = eina_slice_dup(data);
-
- /* setup callback to notify if this object gets deleted */
- evas_object_event_callback_add(drag_obj, EVAS_CALLBACK_DEL,
- _wl_drag_source_del, sel);
-
- seat_sel->drag_obj = drag_obj;
- seat_sel->drag_action = action;
-
- seat_sel->drag_win = elm_win_add(NULL, "Elm-Drag", ELM_WIN_DND);
- elm_win_alpha_set(seat_sel->drag_win, EINA_TRUE);
- elm_win_borderless_set(seat_sel->drag_win, EINA_TRUE);
- elm_win_override_set(seat_sel->drag_win, EINA_TRUE);
-
- win = elm_win_wl_window_get(seat_sel->drag_win);
-
- if (icon_func)
- {
- Eina_Position2D off;
-
- icon = icon_func(icon_func_data, seat_sel->drag_win, drag_obj, &off);
- if (icon)
- {
- x2 = off.x;
- y2 = off.y;
- evas_object_geometry_get(icon, NULL, NULL, &w, &h);
- }
- }
- else
- {
- icon = elm_icon_add(seat_sel->drag_win);
- evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
- }
-
- elm_win_resize_object_add(seat_sel->drag_win, icon);
- evas_object_show(icon);
-
- /* Position subwindow appropriately */
- ee = ecore_evas_ecore_evas_get(evas_object_evas_get(drag_obj));
- ecore_evas_geometry_get(ee, &x, &y, NULL, NULL);
- x += x2;
- y += y2;
- seat_sel->drag_win_start.x = seat_sel->drag_win_end.x = x;
- seat_sel->drag_win_start.y = seat_sel->drag_win_end.y = y;
-
- evas_object_geometry_set(seat_sel->drag_win, x, y, w, h);
- evas_object_show(seat_sel->drag_win);
-
- evas_pointer_canvas_xy_get(evas_object_evas_get(drag_obj), &x3, &y3);
- seat_sel->drag_pos.x = x3 - x2;
- seat_sel->drag_pos.y = y3 - y2;
-
- if (elm_widget_is(drag_obj))
- {
- Evas_Object *top;
-
- top = elm_widget_top_get(drag_obj);
- if (!top) top = elm_widget_top_get(elm_widget_parent_widget_get(drag_obj));
- if (top && (efl_isa(top, EFL_UI_WIN_CLASS)))
- parent = elm_win_wl_window_get(top);
- }
- if (!parent)
- {
- Evas *evas;
-
- if (!(evas = evas_object_evas_get(drag_obj)))
- return;
- if (!(ee = ecore_evas_ecore_evas_get(evas)))
- return;
-
- parent = ecore_evas_wayland2_window_get(ee);
- }
-
- sel->drag_serial = ecore_wl2_dnd_drag_start(_wl_seat_get(win, drag_obj, seat), parent, win);
-}
-
-static Eina_Bool
-_wl_is_uri_type_data(const char *data, int len)
-{
- char *p;
- if (len < 6) return EINA_FALSE;
-
- p = (char *)data;
- if (!p) return EINA_FALSE;
- if (strncmp(p, "file:/", 6))
- {
- if (*p != '/') return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static Efl_Ui_Selection_Action
-_wl_to_elm(Ecore_Wl2_Drag_Action action)
-{
- #define CONV(wl, elm) if (action == wl) return elm;
- CONV(ECORE_WL2_DRAG_ACTION_COPY, EFL_UI_SELECTION_ACTION_COPY);
- CONV(ECORE_WL2_DRAG_ACTION_MOVE, EFL_UI_SELECTION_ACTION_MOVE);
- CONV(ECORE_WL2_DRAG_ACTION_ASK, EFL_UI_SELECTION_ACTION_ASK);
- #undef CONV
- return EFL_UI_SELECTION_ACTION_UNKNOWN;
-}
-
-static Eina_Bool
-_wl_targets_converter(char *target, Sel_Manager_Selection *sel, void *data EINA_UNUSED, int size EINA_UNUSED, void **data_ret, int *size_ret)
-{
- sel_debug("in\n");
- if (!data_ret) return EINA_FALSE;
-
- const char *sep = "\n";
- char *aret;
- int len = 0;
- int i = 0;
- Sel_Manager_Seat_Selection *seat_sel = sel->seat_sel;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
- Efl_Ui_Selection_Format format = EFL_UI_SELECTION_FORMAT_NONE;
- Eina_Bool is_uri = EINA_FALSE;
-
- if (sel->format)
- {
- format = sel->format;
- is_uri = _wl_is_uri_type_data(sel->data.mem, sel->data.len);
- }
- else
- {
- Sel_Manager_Atom *atom = eina_hash_find(pd->type_hash, target);
- if (atom)
- format = atom->format;
- }
- for (i = 0; i < SELECTION_N_ATOMS; i++)
- {
- if (format & pd->atom_list[i].format)
- {
- if ((is_uri) ||
- ((!is_uri) && strcmp(pd->atom_list[i].name, "text/uri-list")))
- len += strlen(pd->atom_list[i].name) + strlen(sep);
- }
- }
- len++; //terminating null byte
- aret = calloc(1, len * sizeof(char));
- if (!aret) return EINA_FALSE;
- for (i = 0; i < SELECTION_N_ATOMS; i++)
- {
- if (format & pd->atom_list[i].format)
- {
- if ((is_uri) ||
- ((!is_uri) && strcmp(pd->atom_list[i].name, "text/uri-list")))
- {
- aret = strcat(aret, pd->atom_list[i].name);
- aret = strcat(aret, sep);
- }
- }
- }
- *data_ret = aret;
- if (size_ret) *size_ret = len;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_wl_general_converter(char *target, Sel_Manager_Selection *sel, void *data, int size, void **data_ret, int *size_ret)
-{
- Efl_Ui_Selection_Format format = EFL_UI_SELECTION_FORMAT_NONE;
- Sel_Manager_Atom *atom = NULL;
- Sel_Manager_Seat_Selection *seat_sel = sel->seat_sel;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
-
- sel_debug("in\n");
-
- atom = eina_hash_find(pd->type_hash, target);
- if (atom)
- format = atom->format;
- if (format == EFL_UI_SELECTION_FORMAT_NONE)
- {
- if (data_ret)
- {
- *data_ret = malloc(size * sizeof(char) + 1);
- if (!*data_ret) return EINA_FALSE;
- memcpy(*data_ret, data, size);
- ((char**)(data_ret))[0][size] = 0;
- }
- if (size_ret) *size_ret = size;
- }
- else
- {
- if ((data) && (size > 0))
- {
- char *tmp = malloc(size);
- if (tmp)
- {
- memcpy(tmp, data, size);
- if (data_ret) *data_ret = tmp;
- if (size_ret) *size_ret = size;
- if (!data_ret) free(tmp);
- }
- }
- else
- {
- if (data_ret) *data_ret = NULL;
- if (size_ret) *size_ret = 0;
- }
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_wl_text_converter(char *target, Sel_Manager_Selection *sel, void *data, int size, void **data_ret, int *size_ret)
-{
- Efl_Ui_Selection_Format format = EFL_UI_SELECTION_FORMAT_NONE;
- Sel_Manager_Atom *atom = NULL;
- Sel_Manager_Seat_Selection *seat_sel = sel->seat_sel;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
-
- sel_debug("in\n");
-
- atom = eina_hash_find(pd->type_hash, target);
- if (atom)
- format = atom->format;
- if (format == EFL_UI_SELECTION_FORMAT_NONE)
- {
- if (data_ret)
- {
- *data_ret = malloc(size * sizeof(char) + 1);
- if (!*data_ret) return EINA_FALSE;
- memcpy(*data_ret, data, size);
- ((char**)(data_ret))[0][size] = 0;
- if (size_ret) *size_ret = size;
- return EINA_TRUE;
- }
- }
- else if ((format & EFL_UI_SELECTION_FORMAT_MARKUP) ||
- (format & EFL_UI_SELECTION_FORMAT_HTML))
- {
- char *tmp = malloc(size + 1);
- if (tmp)
- {
- strncpy(tmp, data, size);
- tmp[size] = 0;
- *data_ret = _elm_util_mkup_to_text(tmp);
- if (size_ret && *data_ret) *size_ret = strlen(*data_ret);
- free(tmp);
- }
- else return EINA_FALSE;
- }
- else if (format & EFL_UI_SELECTION_FORMAT_TEXT)
- {
- char *tmp = malloc(size + 1);
- if (tmp)
- {
- strncpy(tmp, data, size);
- tmp[size] = 0;
- *data_ret = tmp;
- if (size_ret && *data_ret) *size_ret = strlen(*data_ret);
- }
- else return EINA_FALSE;
- }
- else if (format & EFL_UI_SELECTION_FORMAT_IMAGE)
- {
- sel_debug("Image %s\n", evas_object_type_get(sel->request_obj));
- efl_file_simple_get(sel->request_obj, (const char **)data_ret, NULL);
- if (!*data_ret) *data_ret = strdup("No file");
- else *data_ret = strdup(*data_ret);
-
- if (!*data_ret)
- {
- ERR("Failed to allocate memory!");
- *size_ret = 0;
- return EINA_FALSE;
- }
-
- if (size_ret) *size_ret = strlen(*data_ret);
- }
- return EINA_TRUE;
-}
-
-static void
-_wl_sel_obj_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Sel_Manager_Selection *sel = data;
- if (sel->owner == obj)
- {
- sel->owner = NULL;
- }
- //if (dragwidget == obj) dragwidget = NULL;
-}
-
-static Eina_Future *
-_wl_efl_sel_manager_selection_set(Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *owner, Efl_Ui_Selection_Type type,
- Efl_Ui_Selection_Format format,
- Eina_Slice data,
- Ecore_Wl2_Window *win,
- unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- int i = 0, count = 0;
- Eina_Bool is_uri = EINA_FALSE;
- const char **types;
-
- if ((!data.mem) && (format != EFL_UI_SELECTION_FORMAT_IMAGE))
- {
- efl_ui_selection_manager_selection_clear(pd->sel_man, owner, type, seat);
- return NULL;
- }
-
- if (data.len <= 0)
- return NULL;
-
- seat_sel = _wl_sel_manager_seat_selection_init(pd, seat);
- seat_sel->active_type = type;
- sel = seat_sel->sel;
-
- if (sel->owner != owner)
- {
- Eina_List *l, *l_next;
- Sel_Manager_Selection_Lost *sel_lost;
-
- EINA_LIST_FOREACH_SAFE(seat_sel->sel_lost_list, l, l_next, sel_lost)
- {
- if ((sel_lost->request == sel->owner) &&
- (sel_lost->type == type))
- {
- eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
- }
- }
- }
-
- if (sel->owner)
- evas_object_event_callback_del_full(sel->owner, EVAS_CALLBACK_DEL,
- _wl_sel_obj_del, sel);
- sel->active = EINA_TRUE;
- sel->owner = owner;
- sel->win = win;
- /* sel->set(win, &selection, sizeof(Elm_Sel_Type)); */
- sel->format = format;
-
- evas_object_event_callback_add
- (sel->owner, EVAS_CALLBACK_DEL, _wl_sel_obj_del, &sel);
-
- sel->data = eina_slice_dup(data);
- if (!sel->data.mem)
- {
- efl_ui_selection_manager_selection_clear(pd->sel_man, owner, type, seat_sel->seat);
- return NULL;
- }
-
- is_uri = _wl_is_uri_type_data(sel->data.mem, sel->data.len);
- types = malloc(sizeof(char *));
- if (!types) return NULL;
- for (i = 0, count = 1; i < SELECTION_N_ATOMS; i++)
- {
- if (format & pd->atom_list[i].format)
- {
- if ((is_uri) ||
- ((!is_uri) && strcmp(pd->atom_list[i].name, "text/uri-list")))
- {
- const char **t = NULL;
-
- types[count - 1] = pd->atom_list[i].name;
- count++;
- t = realloc(types, sizeof(char *) * count);
- if (!t)
- {
- free(types);
- return NULL;
- }
- types = t;
- }
- }
- }
- types[count - 1] = 0;
-
- sel->selection_serial = ecore_wl2_dnd_selection_set(_wl_seat_get(win, owner, seat_sel->seat), types);
- DBG("serial: %d", sel->selection_serial);
-
- free(types);
- //return _local_elm_cnp_selection_set(obj, selection, format, buf, buflen);
-
- return _update_sel_lost_list(owner, type, seat_sel);
-}
-
-static void
-_wl_selection_changed_free(void *data, void *ev)
-{
- ecore_wl2_display_disconnect(data);
-
- free(ev);
-}
-
-static Eina_Bool
-_wl_selection_changed(void *data, int type EINA_UNUSED, void *event)
-{
- Efl_Ui_Selection_Manager_Data *pd = data;
- Elm_Cnp_Event_Selection_Changed *_e;
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- Efl_Ui_Selection_Changed e;
- Ecore_Wl2_Event_Seat_Selection *ev = event;
- Ecore_Wl2_Input *seat;
-
- seat_sel = _wl_sel_manager_seat_selection_init(pd, ev->seat);
- sel_debug("seat: %d", ev->seat);
- if (!seat_sel) return ECORE_CALLBACK_RENEW;
- sel = seat_sel->sel;
-
- seat = ecore_wl2_display_input_find(ev->display, ev->seat);
- EINA_SAFETY_ON_NULL_RETURN_VAL(seat, ECORE_CALLBACK_RENEW);
- e.type = EFL_UI_SELECTION_TYPE_CLIPBOARD;
- e.seat = ev->seat;
- /* connect again to add ref */
- e.display = ecore_wl2_display_connect(ecore_wl2_display_name_get(ev->display));
- e.exist = !!ecore_wl2_dnd_selection_get(seat);
-
- _e = calloc(1, sizeof(Elm_Cnp_Event_Selection_Changed));
- EINA_SAFETY_ON_NULL_RETURN_VAL(_e, ECORE_CALLBACK_RENEW);
- _e->type = e.type;
- _e->seat_id = e.seat;
- _e->display = e.display;
- _e->exists = e.exist;
-
- ecore_event_add(ELM_CNP_EVENT_SELECTION_CHANGED, _e, _wl_selection_changed_free, ev->display);
- efl_event_callback_call(sel->request_obj, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, &e);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-static Eina_Bool
-_wl_selection_send(void *data, int type EINA_UNUSED, void *event)
-{
- Efl_Ui_Selection_Manager_Data *pd = data;
- char *buf;
- int ret, len_remained;
- int len_written = 0;
- Ecore_Wl2_Event_Data_Source_Send *ev;
- int seat;
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- void *data_ret = NULL;
- int len_ret = 0;
- int i = 0;
-
- ev = event;
- seat = ev->seat;
- sel_debug("seat: %d, type: %d", seat, type);
- seat_sel = _wl_sel_manager_seat_selection_init(pd, seat);
- if (!seat_sel) return ECORE_CALLBACK_RENEW;
- sel = seat_sel->sel;
-
- if ((ev->serial != sel->selection_serial) &&
- (ev->serial != sel->drag_serial))
- return ECORE_CALLBACK_RENEW;
-
- for (i = 0; i < SELECTION_N_ATOMS; i++)
- {
- if (!strcmp(pd->atom_list[i].name, ev->type))
- {
- sel_debug("Found a type: %s\n", pd->atom_list[i].name);
- Sel_Manager_Dropable *drop;
- drop = efl_key_data_get(sel->request_obj, "__elm_dropable");
- if (drop)
- drop->last.type = pd->atom_list[i].name;
- if (pd->atom_list[i].wl_converter)
- {
- pd->atom_list[i].wl_converter(ev->type, sel, sel->data.mem,
- sel->data.len, &data_ret, &len_ret);
- }
- else
- {
- data_ret = eina_memdup(sel->data.mem, sel->data.len, 0);
- len_ret = sel->data.len;
- }
- break;
- }
- }
-
- len_remained = len_ret;
- buf = data_ret;
-
- while (len_written < len_ret)
- {
- ret = write(ev->fd, buf, len_remained);
- if (ret == -1) break;
- buf += ret;
- len_written += ret;
- len_remained -= ret;
- }
- free(data_ret);
-
- close(ev->fd);
- ecore_wl2_display_flush(ev->display);
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_wl_dnd_end(void *data, int type EINA_UNUSED, void *event)
-{
- sel_debug("In");
- Efl_Ui_Selection_Manager_Data *pd = data;
- Ecore_Wl2_Event_Data_Source_End *ev;
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
-
- ev = event;
- seat_sel = _wl_sel_manager_seat_selection_init(pd, ev->seat);
- sel = seat_sel->sel;
- if (ev->serial != sel->drag_serial)
- return ECORE_CALLBACK_RENEW;
-
- if (seat_sel->active_type != EFL_UI_SELECTION_TYPE_DND)
- return ECORE_CALLBACK_RENEW;
-
- efl_event_callback_call(seat_sel->drag_obj, EFL_UI_DND_EVENT_DRAG_DONE, NULL);
- if (seat_sel->drag_win)
- {
- if (!seat_sel->accept)
- {
- /* Commit animation when drag cancelled */
- /* Record final position of dragwin, then do animation */
- ecore_evas_animator_timeline_add(seat_sel->drag_win, 0.3, _drag_cancel_animate, seat_sel);
- }
- else
- {
- /* No animation drop was committed */
- evas_object_del(seat_sel->drag_win);
- seat_sel->drag_win = NULL;
- }
- }
-
- seat_sel->accept = EINA_FALSE;
-
- ecore_wl2_display_flush(ev->display);
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Ecore_Wl2_Input *
-_wl_seat_get(Ecore_Wl2_Window *win, Evas_Object *obj, unsigned int seat_id)
-{
- Eo *seat, *parent2, *ewin;
- Ecore_Wl2_Input *input = NULL;
-
- input = ecore_wl2_display_input_find(ecore_wl2_window_display_get(win), seat_id);
- if (input) return input;
-
- if (obj)
- {
- // FIXME (there might be a better solution):
- // In case of inwin, we want to use the main wl2 window for cnp, but obj
- // obj belongs to the buffer canvas, so the default seat for obj does not
- // match the window win.
- Eo *top = elm_widget_top_get(obj);
- if (efl_isa(top, EFL_UI_WIN_INLINED_CLASS))
- {
- parent2 = efl_ui_win_inlined_parent_get(top);
- if (parent2) obj = elm_widget_top_get(parent2) ?: parent2;
- }
- /* fake win means canvas seat id will not match protocol seat id */
- ewin = elm_win_get(obj);
- if (elm_win_type_get(ewin) == ELM_WIN_FAKE) obj = NULL;
- }
-
- if (!obj)
- {
- Eina_Iterator *it;
- it = ecore_wl2_display_inputs_get(ecore_wl2_window_display_get(win));
- EINA_ITERATOR_FOREACH(it, input) break;
- eina_iterator_free(it);
- return input;
- }
-
- seat = evas_default_device_get(evas_object_evas_get(obj), EFL_INPUT_DEVICE_TYPE_SEAT);
- EINA_SAFETY_ON_NULL_RETURN_VAL(seat, NULL);
- return ecore_wl2_display_input_find(ecore_wl2_window_display_get(win),
- evas_device_seat_id_get(seat));
-}
-
-Ecore_Wl2_Window *
-_wl_window_get(const Evas_Object *obj)
-{
- Evas_Object *top;
- Ecore_Wl2_Window *win = NULL;
-
- if (elm_widget_is(obj))
- {
- top = elm_widget_top_get(obj);
- if (!top) top = elm_widget_top_get(elm_widget_parent_widget_get(obj));
- if (top && (efl_isa(top, EFL_UI_WIN_CLASS)))
- win = elm_win_wl_window_get(top);
- }
- if (!win)
- {
- Ecore_Evas *ee;
- Evas *evas;
- const char *engine_name;
-
- if (!(evas = evas_object_evas_get(obj)))
- return NULL;
- if (!(ee = ecore_evas_ecore_evas_get(evas)))
- return NULL;
-
- engine_name = ecore_evas_engine_name_get(ee);
- if (!strcmp(engine_name, ELM_BUFFER))
- {
- ee = ecore_evas_buffer_ecore_evas_parent_get(ee);
- if (!ee) return NULL;
- engine_name = ecore_evas_engine_name_get(ee);
- }
- if (!strncmp(engine_name, "wayland", sizeof("wayland") - 1))
- {
- /* In case the engine is not a buffer, we want to check once. */
- win = ecore_evas_wayland2_window_get(ee);
- if (!win) return NULL;
- }
- }
-
- return win;
-}
-
-static void
-_wl_selection_receive_timeout(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Sel_Manager_Selection *sel = data;
-
- if (sel->request_obj != obj) return;
-
- ecore_event_handler_del(sel->offer_handler);
-}
-
-static Eina_Bool
-_wl_selection_receive(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Offer_Data_Ready *ev = event;
- Sel_Manager_Selection *sel = data;
-
- if (sel->sel_offer != ev->offer) return ECORE_CALLBACK_PASS_ON;
-
- if (sel->data_func)
- {
- Efl_Ui_Selection_Data sel_data;
-
- sel_data.pos.x = sel_data.pos.y = 0;
- if (((sel->format & EFL_UI_SELECTION_FORMAT_MARKUP) ||
- (sel->format & EFL_UI_SELECTION_FORMAT_HTML)) &&
- (sel->want_format == EFL_UI_SELECTION_FORMAT_TEXT))
- {
- char *tmp = malloc(ev->len + 1);
- sel_data.format = sel->format;
- sel_data.content.mem = NULL;
- sel_data.content.len = 0;
- if (tmp)
- {
- sel_data.format = sel->want_format;
- strncpy(tmp, ev->data, ev->len);
- tmp[ev->len] = 0;
- sel_data.content.mem = _elm_util_mkup_to_text(tmp);
- if (sel_data.content.mem)
- sel_data.content.len = strlen(sel_data.content.mem);
- free(tmp);
- }
- }
- else
- {
- sel_data.format = sel->format;
- sel_data.content.mem = ev->data;
- sel_data.content.len = ev->len;
- }
- sel_data.action = _wl_to_elm(ecore_wl2_offer_action_get(sel->sel_offer));
- sel->data_func(sel->data_func_data,
- sel->request_obj,
- &sel_data);
- }
- else
- {
- char *stripstr, *mkupstr;
-
- stripstr = malloc(ev->len + 1);
- if (!stripstr) return ECORE_CALLBACK_CANCEL;
- strncpy(stripstr, (char *)ev->data, ev->len);
- stripstr[ev->len] = '\0';
- mkupstr = _elm_util_text_to_mkup((const char *)stripstr);
- /* TODO BUG: should never NEVER assume it's an elm_entry! */
- _elm_entry_entry_paste(sel->request_obj, mkupstr);
- free(stripstr);
- free(mkupstr);
- }
-
- evas_object_event_callback_del_full(sel->request_obj,
- EVAS_CALLBACK_DEL,
- _wl_selection_receive_timeout, sel);
-
- ecore_event_handler_del(sel->offer_handler);
- return ECORE_CALLBACK_CANCEL;
-}
-
-static Eina_Bool
-_wl_efl_sel_manager_selection_get(const Efl_Object *request, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Ui_Selection_Type type, Efl_Ui_Selection_Format format,
- void *data_func_data, Efl_Ui_Selection_Data_Ready data_func, Eina_Free_Cb data_func_free_cb,
- Ecore_Wl2_Window *win, unsigned int seat)
-{
- sel_debug("In, format: %d", format);
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- Ecore_Wl2_Input *input;
- Ecore_Wl2_Offer *offer;
- int i = 0;
-
- if (type == EFL_UI_SELECTION_TYPE_DND) return EINA_FALSE;
-
- //if (sel->active)
- //return _local_elm_cnp_selection_get(obj, selection, format, datacb, udata);
- seat_sel = _sel_manager_seat_selection_init(pd, seat);
- sel = seat_sel->sel;
- sel->request_obj = (Efl_Object *)request;
- sel->data_func_data = data_func_data;
- sel->data_func = data_func;
- sel->data_func_free_cb = data_func_free_cb;
-
- input = _wl_seat_get(win, (Efl_Object *)request, seat_sel->seat);
- offer = ecore_wl2_dnd_selection_get(input);
-
- //there can be no selection available
- if (!offer) return EINA_FALSE;
-
- for (i = 0; sm_wl_convertion[i].translates; i++)
- {
- int j = 0;
-// if (!(format & sm_wl_convertion[i].format)) continue;
-
- for (j = 0; sm_wl_convertion[i].translates[j]; j++)
- {
- if (!ecore_wl2_offer_supports_mime(offer, sm_wl_convertion[i].translates[j])) continue;
-
- //we have found matching mimetypes
- sel->sel_offer = offer;
- sel->format = sm_wl_convertion[i].format;
- sel->want_format = format;
-
- sel_debug("request type: %s", (char *)sm_wl_convertion[i].translates[j]);
- evas_object_event_callback_add(sel->request_obj, EVAS_CALLBACK_DEL,
- _wl_selection_receive_timeout, sel);
- sel->offer_handler = ecore_event_handler_add(ECORE_WL2_EVENT_OFFER_DATA_READY,
- _wl_selection_receive, sel);
-
- ecore_wl2_offer_receive(offer, (char*)sm_wl_convertion[i].translates[j]);
- ecore_wl2_display_flush(ecore_wl2_input_display_get(input));
- return EINA_TRUE;
- }
- }
-
- sel_debug("no type match");
- return EINA_FALSE;
-}
-
-static void
-_wl_sel_obj_del2(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Sel_Manager_Selection *sel = data;
- if (sel->request_obj == obj) sel->request_obj = NULL;
-}
-
-static Sel_Manager_Dropable *
-_wl_dropable_find(Efl_Ui_Selection_Manager_Data *pd, Ecore_Wl2_Window *win)
-{
- Eina_List *l;
- Sel_Manager_Dropable *dropable;
-
- if (!pd->drop_list) return NULL;
-
- if (!win) return NULL;
-
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- if (_wl_window_get(dropable->obj) == win)
- return dropable;
-
- return NULL;
-}
-
-static Evas *
-_wl_evas_get_from_win(Efl_Ui_Selection_Manager_Data *pd, Ecore_Wl2_Window *win)
-{
- Sel_Manager_Dropable *dropable = _wl_dropable_find(pd, win);
- return dropable ? evas_object_evas_get(dropable->obj) : NULL;
-}
-
-static Eina_Bool
-_wl_drops_accept(Sel_Manager_Seat_Selection *seat_sel, const char *type)
-{
- Efl_Ui_Selection_Manager_Data *pd;
- Sel_Manager_Selection *sel;
- Eina_List *l;
- Sel_Manager_Dropable *drop;
- Eina_Bool will_accept = EINA_FALSE;
-
- if (!type) return EINA_FALSE;
-
- pd = seat_sel->pd;
- sel = seat_sel->sel;
- EINA_LIST_FOREACH(pd->drop_list, l, drop)
- {
- Drop_Format *df;
- EINA_INLIST_FOREACH(drop->format_list, df)
- {
- for (int i = 0; sm_wl_convertion[i].translates ; ++i)
- {
- if (!(sm_wl_convertion[i].format & df->format)) continue;
-
- for (int j = 0; sm_wl_convertion[i].translates[j]; ++j)
- {
- if (!strncmp(type, sm_wl_convertion[i].translates[j], strlen(sm_wl_convertion[i].translates[j])))
- {
- sel->request_obj = drop->obj;
- return EINA_TRUE;
- }
- }
- }
- }
- }
-
- return will_accept;
-}
-
-static void
-_wl_selection_parser(void *_data, int size, char ***ret_data, int *ret_count)
-{
- char **files = NULL;
- int num_files = 0;
- char *data = NULL;
-
- data = malloc(size);
- if (data && (size > 0))
- {
- int i, is;
- char *tmp;
- char **t2;
-
- memcpy(data, _data, size);
- if (data[size - 1])
- {
- char *t;
-
- /* Isn't nul terminated */
- size++;
- t = realloc(data, size);
- if (!t) goto done;
- data = t;
- data[size - 1] = 0;
- }
-
- tmp = malloc(size);
- if (!tmp) goto done;
- i = 0;
- is = 0;
- while ((is < size) && (data[is]))
- {
- if ((i == 0) && (data[is] == '#'))
- for (; ((data[is]) && (data[is] != '\n')); is++) ;
- else
- {
- if ((data[is] != '\r') && (data[is] != '\n'))
- tmp[i++] = data[is++];
- else
- {
- while ((data[is] == '\r') || (data[is] == '\n'))
- is++;
- tmp[i] = 0;
- num_files++;
- t2 = realloc(files, num_files * sizeof(char *));
- if (t2)
- {
- files = t2;
- files[num_files - 1] = strdup(tmp);
- }
- else
- {
- num_files--;
- goto freetmp;
- }
- tmp[0] = 0;
- i = 0;
- }
- }
- }
- if (i > 0)
- {
- tmp[i] = 0;
- num_files++;
- t2 = realloc(files, num_files * sizeof(char *));
- if (t2)
- {
- files = t2;
- files[num_files - 1] = strdup(tmp);
- }
- else
- {
- num_files--;
- goto freetmp;
- }
- }
-freetmp:
- free(tmp);
- }
-done:
- free(data);
- if (ret_data) *ret_data = files;
- else
- {
- int i;
-
- for (i = 0; i < num_files; i++) free(files[i]);
- free(files);
- }
- if (ret_count) *ret_count = num_files;
-}
-
-static Eina_Bool
-_wl_data_preparer_markup(Sel_Manager_Selection *sel, Efl_Ui_Selection_Data *ddata, Ecore_Wl2_Event_Offer_Data_Ready *ev, Tmp_Info **tmp_info EINA_UNUSED)
-{
- sel_debug("In\n");
-
- ddata->format = EFL_UI_SELECTION_FORMAT_MARKUP;
- ddata->content.mem = eina_memdup((unsigned char *)ev->data, ev->len, EINA_TRUE);
- ddata->content.len = ev->len;
- ddata->action = sel->action;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_wl_data_preparer_uri(Sel_Manager_Selection *sel, Efl_Ui_Selection_Data *ddata, Ecore_Wl2_Event_Offer_Data_Ready *ev, Tmp_Info **tmp_info EINA_UNUSED)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- char *p, *stripstr = NULL;
- char *data = ev->data;
- Sel_Manager_Dropable *drop;
- const char *type = NULL;
-
- sel_debug("In\n");
-
- seat_sel = sel->seat_sel;
- drop = efl_key_data_get(sel->request_obj, "__elm_dropable");
- if (drop) type = drop->last.type;
-
- if ((type) && (!strcmp(type, "text/uri-list")))
- {
- int num_files = 0;
- char **files = NULL;
- Efreet_Uri *uri;
- Eina_Strbuf *strbuf;
- int i;
-
- strbuf = eina_strbuf_new();
- if (!strbuf) return EINA_FALSE;
-
- _wl_selection_parser(ev->data, ev->len, &files, &num_files);
- sel_debug("got a files list\n");
-
- for (i = 0; i < num_files; i++)
- {
- uri = efreet_uri_decode(files[i]);
- if (uri)
- {
- eina_strbuf_append(strbuf, uri->path);
- efreet_uri_free(uri);
- }
- else
- {
- eina_strbuf_append(strbuf, files[i]);
- }
- if (i < (num_files - 1))
- eina_strbuf_append(strbuf, "\n");
- free(files[i]);
- }
- free(files);
- stripstr = eina_strbuf_string_steal(strbuf);
- eina_strbuf_free(strbuf);
- }
- else
- {
- Efreet_Uri *uri;
-
- p = (char *)eina_memdup((unsigned char *)data, ev->len, EINA_TRUE);
- if (!p) return EINA_FALSE;
- uri = efreet_uri_decode(p);
- if (!uri)
- {
- /* Is there any reason why we care of URI without scheme? */
- if (p[0] == '/') stripstr = p;
- else free(p);
- }
- else
- {
- free(p);
- stripstr = strdup(uri->path);
- efreet_uri_free(uri);
- }
- }
-
- if (!stripstr)
- {
- sel_debug("Couldn't find a file\n");
- return EINA_FALSE;
- }
- free(seat_sel->saved_types->imgfile);
-
- ddata->content.mem = stripstr;
- ddata->content.len = strlen(stripstr);
- ddata->action = sel->action;
- ddata->format = sel->request_format;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_wl_data_preparer_vcard(Sel_Manager_Selection *sel, Efl_Ui_Selection_Data *ddata, Ecore_Wl2_Event_Offer_Data_Ready *ev, Tmp_Info **tmp_info EINA_UNUSED)
-{
- sel_debug("In\n");
-
- ddata->format = EFL_UI_SELECTION_FORMAT_VCARD;
- ddata->content.mem = eina_memdup((unsigned char *)ev->data, ev->len, EINA_TRUE);
- ddata->content.len = ev->len;
- ddata->action = sel->action;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_wl_data_preparer_image(Sel_Manager_Selection *sel, Efl_Ui_Selection_Data *ddata, Ecore_Wl2_Event_Offer_Data_Ready *ev, Tmp_Info **tmp_info)
-{
- sel_debug("In\n");
- Tmp_Info *tmp;
- int len = 0;
-
- tmp = _tempfile_new(ev->len);
- if (!tmp)
- return EINA_FALSE;
- memcpy(tmp->map, ev->data, ev->len);
- munmap(tmp->map, ev->len);
-
- len = strlen(tmp->filename);
- ddata->format = EFL_UI_SELECTION_FORMAT_IMAGE;
- ddata->content.mem = eina_memdup((unsigned char*)tmp->filename, len, EINA_TRUE);
- ddata->content.len = len;
- ddata->action = sel->action;
- *tmp_info = tmp;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_wl_data_preparer_text(Sel_Manager_Selection *sel, Efl_Ui_Selection_Data *ddata, Ecore_Wl2_Event_Offer_Data_Ready *ev, Tmp_Info **tmp_info EINA_UNUSED)
-{
- sel_debug("In\n");
-
- ddata->format = EFL_UI_SELECTION_FORMAT_TEXT;
- ddata->content.mem = eina_memdup((unsigned char *)ev->data, ev->len, EINA_TRUE);
- ddata->content.len = ev->len;
- ddata->action = sel->action;
-
- return EINA_TRUE;
-}
-
-
-static void
-_wl_dropable_handle(Sel_Manager_Seat_Selection *seat_sel, Sel_Manager_Dropable *dropable, Evas_Coord x, Evas_Coord y)
-{
- Sel_Manager_Dropable *d, *last_dropable = NULL;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
- Sel_Manager_Selection *sel;
- Eina_Inlist *itr;
- Eina_List *l;
- Eina_Position2D pos;
-
- EINA_LIST_FOREACH(pd->drop_list, l, d)
- {
- if (d->last.in)
- {
- last_dropable = d;
- break;
- }
- }
-
- sel = seat_sel->sel;
- pos = EINA_POSITION2D(x, y);
- /* If we are on the same object, just update the position */
- if ((dropable) && (last_dropable == dropable))
- {
- Evas_Coord ox, oy;
- Efl_Dnd_Drag_Pos pos_data;
- Drop_Format *df;
-
- evas_object_geometry_get(dropable->obj, &ox, &oy, NULL, NULL);
- if (!dropable->is_container)
- {
- pos_data.pos = EINA_POSITION2D(x - ox, y - oy);
- pos_data.item = NULL;
- }
- else
- {
- Efl_Object *it = NULL;
-
- if (dropable->item_func)
- it = dropable->item_func(dropable->item_func_data, dropable->obj,
- pos, &pos_data.pos);
- pos_data.item = it;
- }
- pos_data.format = dropable->last.format;
- pos_data.action = sel->action;
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format & dropable->last.format)
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_POS, &pos_data);
- }
-
- return;
- }
- /* We leave the last dropable */
- if (last_dropable)
- {
- Drop_Format *df;
- sel_debug("leave %p\n", last_dropable->obj);
- last_dropable->last.in = EINA_FALSE;
-
- EINA_INLIST_FOREACH_SAFE(last_dropable->format_list, itr, df)
- {
- if (df->format & last_dropable->last.format)
- efl_event_callback_call(last_dropable->obj, EFL_UI_DND_EVENT_DRAG_LEAVE, NULL);
- }
- }
- /* We enter the new dropable */
- if (dropable)
- {
- sel_debug("enter %p\n", dropable->obj);
- Evas_Coord ox, oy;
- Efl_Dnd_Drag_Pos pos_data;
- Drop_Format *df;
-
- dropable->last.in = EINA_TRUE;
- evas_object_geometry_get(dropable->obj, &ox, &oy, NULL, NULL);
- if (!dropable->is_container)
- {
- pos_data.pos = EINA_POSITION2D(x - ox, y - oy);
- pos_data.item = NULL;
- }
- else
- {
- Efl_Object *it = NULL;
-
- if (dropable->item_func)
- it = dropable->item_func(dropable->item_func_data, dropable->obj,
- pos, &pos_data.pos);
- pos_data.item = it;
- }
- pos_data.format = dropable->last.format;
- pos_data.action = sel->action;
-
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format & dropable->last.format)
- {
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_ENTER, NULL);
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_POS, &pos_data);
- }
- }
- }
-}
-
-static void
-_wl_dropable_all_clean(Sel_Manager_Seat_Selection *seat_sel, Ecore_Wl2_Window *win)
-{
- Eina_List *l;
- Sel_Manager_Dropable *dropable;
-
- if (!win) return;
-
- EINA_LIST_FOREACH(seat_sel->pd->drop_list, l, dropable)
- {
- if (_wl_window_get(dropable->obj) == win)
- {
- dropable->last.pos.x = 0;
- dropable->last.pos.y = 0;
- dropable->last.in = EINA_FALSE;
- }
- }
-}
-
-static void
-_wl_dropable_data_handle(Sel_Manager_Selection *sel, Ecore_Wl2_Event_Offer_Data_Ready *ev)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Efl_Ui_Selection_Manager_Data *pd;
- Sel_Manager_Dropable *drop;
- Ecore_Wl2_Window *win;
-
- sel_debug("In\n");
- seat_sel = sel->seat_sel;
- pd = seat_sel->pd;
- drop = efl_key_data_get(sel->request_obj, "__elm_dropable");
- if (drop)
- {
- Sel_Manager_Atom *atom = NULL;
-
- atom = eina_hash_find(pd->type_hash, drop->last.type);
- if (atom && atom->wl_data_preparer)
- {
- Efl_Ui_Selection_Data ddata;
- Tmp_Info *tmp_info = NULL;
- Eina_Bool success;
-
- sel_debug("Call notify for: %s\n", atom->name);
- success = atom->wl_data_preparer(sel, &ddata, ev, &tmp_info);
- if (success)
- {
- Sel_Manager_Dropable *dropable;
- Eina_List *l;
-
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- if (dropable->obj == sel->request_obj) break;
- dropable = NULL;
- }
- if (dropable)
- {
- Drop_Format *df;
- Eina_Inlist *itr;
-
- if (!dropable->is_container)
- {
- ddata.pos.x = seat_sel->saved_types->pos.x;
- ddata.pos.y = seat_sel->saved_types->pos.y;
- }
- else
- {
- //for container
- Efl_Object *it = NULL;
- Evas_Coord x0 = 0, y0 = 0;
- Eina_Position2D pos, posret = {};
-
- evas_object_geometry_get(dropable->obj, &x0, &y0, NULL, NULL);
- pos = EINA_POSITION2D(seat_sel->saved_types->pos.x + x0,
- seat_sel->saved_types->pos.y + y0);
- if (dropable->item_func)
- it = dropable->item_func(dropable->item_func_data, dropable->obj,
- pos, &posret);
- ddata.pos = posret;
- ddata.item = it;
- }
- ddata.action = seat_sel->drag_action;
-
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format & dropable->last.format)
- efl_event_callback_call(dropable->obj, EFL_UI_DND_EVENT_DRAG_DROP, &ddata);
- }
- }
- }
- win = _wl_window_get(sel->request_obj);
- ecore_wl2_dnd_drag_end(_wl_seat_get(win, NULL, seat_sel->seat));
- if (tmp_info) _tmpinfo_free(tmp_info);
- return;
- }
- }
-
- win = _wl_window_get(sel->request_obj);
- ecore_wl2_dnd_drag_end(_wl_seat_get(win, NULL, seat_sel->seat));
- seat_sel->saved_types->textreq = 0;
-}
-
-static Eina_Bool
-_wl_dnd_enter(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Dnd_Enter *ev;
- Eina_Array *known, *available;
- Sel_Manager_Seat_Selection *seat_sel = data;
- unsigned int i = 0;
-
- ev = event;
-
- available = ecore_wl2_offer_mimes_get(ev->offer);
-
- free(seat_sel->saved_types->types);
-
- seat_sel->saved_types->ntypes = eina_array_count(available);
- seat_sel->saved_types->types = malloc(sizeof(char *) * seat_sel->saved_types->ntypes);
- if (!seat_sel->saved_types->types) return EINA_FALSE;
-
- known = eina_array_new(5);
-
- for (i = 0; i < eina_array_count(available); i++)
- {
- seat_sel->saved_types->types[i] =
- eina_stringshare_add(eina_array_data_get(available, i));
- if (seat_sel->saved_types->types[i] == seat_sel->pd->text_uri)
- {
- seat_sel->saved_types->textreq = 1;
- ELM_SAFE_FREE(seat_sel->saved_types->imgfile, free);
- }
- }
-
- seat_sel->accept = EINA_FALSE;
- for (i = 0; i < eina_array_count(available); i++)
- {
- if (_wl_drops_accept(seat_sel, eina_array_data_get(available, i)))
- {
- eina_array_push(known, strdup(eina_array_data_get(available, i)));
- }
- }
-
- ecore_wl2_offer_mimes_set(ev->offer, known);
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_wl_dnd_leave(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Dnd_Leave *ev;
- Sel_Manager_Seat_Selection *seat_sel = data;
- Sel_Manager_Dropable *drop;
- sel_debug("In\n");
-
- ev = event;
- if ((drop = _wl_dropable_find(seat_sel->pd, ev->win)))
- {
- _wl_dropable_handle(seat_sel, NULL, 0, 0);
- _wl_dropable_all_clean(seat_sel, ev->win);
- }
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_wl_dnd_position(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Dnd_Motion *ev;
- Sel_Manager_Seat_Selection *seat_sel = data;
- Efl_Ui_Selection_Manager_Data *pd = seat_sel->pd;
- Sel_Manager_Dropable *drop;
- Eina_Bool will_accept = EINA_FALSE;
-
- ev = event;
-
- sel_debug("mouse pos %i %i\n", ev->x, ev->y);
- seat_sel->drag_win_end.x = ev->x - seat_sel->drag_pos.x;
- seat_sel->drag_win_end.y = ev->y - seat_sel->drag_pos.y;
-
- drop = _wl_dropable_find(pd, ev->win);
-
- if (drop)
- {
- Eina_Position2D pos = EINA_POSITION2D(ev->x, ev->y);
- Evas *evas = NULL;
- Eina_List *dropable_list = NULL;
-
- _dropable_coords_adjust(drop, &pos);
- evas = _wl_evas_get_from_win(pd, ev->win);
- if (evas)
- dropable_list = _dropable_list_geom_find(pd, evas, pos.x, pos.y);
-
- /* check if there is dropable (obj) can accept this drop */
- if (dropable_list)
- {
- Efl_Ui_Selection_Format saved_format;
- Eina_List *l;
- Eina_Bool found = EINA_FALSE;
- Sel_Manager_Dropable *dropable = NULL;
-
- saved_format =
- _dnd_types_to_format(pd, seat_sel->saved_types->types, seat_sel->saved_types->ntypes);
-
- EINA_LIST_FOREACH(dropable_list, l, dropable)
- {
- Drop_Format *df;
- Eina_Inlist *itr;
-
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- Efl_Ui_Selection_Format common_fmt = saved_format & df->format;
-
- if (common_fmt)
- {
- /* We found a target that can accept this type of data */
- int i, min_index = SELECTION_N_ATOMS;
-
- /* We have to find the first atom that corresponds to one
- * of the supported data types. */
- for (i = 0; i < seat_sel->saved_types->ntypes; i++)
- {
- Sel_Manager_Atom *atom;
-
- atom = eina_hash_find(pd->type_hash,
- seat_sel->saved_types->types[i]);
-
- if (atom && (atom->format & common_fmt))
- {
- int atom_idx = (atom - pd->atom_list);
-
- if (min_index > atom_idx)
- min_index = atom_idx;
- }
- }
- if (min_index != SELECTION_N_ATOMS)
- {
- sel_debug("Found atom %s\n", pd->atom_list[min_index].name);
- found = EINA_TRUE;
- dropable->last.type = pd->atom_list[min_index].name;
- dropable->last.format = common_fmt;
- break;
- }
- }
- }
- if (found) break;
- }
- if (found)
- {
- Sel_Manager_Selection *sel = seat_sel->sel;
- Evas_Coord ox = 0, oy = 0;
-
- evas_object_geometry_get(dropable->obj, &ox, &oy, NULL, NULL);
-
- sel_debug("Candidate %p (%s)\n",
- dropable->obj, efl_class_name_get(efl_class_get(dropable->obj)));
- _wl_dropable_handle(seat_sel, dropable, pos.x - ox, pos.y - oy);
- sel->request_obj = dropable->obj;
- will_accept = EINA_TRUE;
- }
- else
- {
- //if not: send false status
- sel_debug("dnd position (%d, %d) not in obj\n", pos.x, pos.y);
- _wl_dropable_handle(seat_sel, NULL, 0, 0);
- // CCCCCCC: call dnd exit on last obj
- }
- eina_list_free(dropable_list);
- }
- }
-
- seat_sel->accept = will_accept;
- efl_event_callback_call(seat_sel->drag_obj, EFL_UI_DND_EVENT_DRAG_ACCEPT, &seat_sel->accept);
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_wl_dnd_receive(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Offer_Data_Ready *ev;
- Sel_Manager_Seat_Selection *seat_sel = data;
- Sel_Manager_Selection *sel;
- Ecore_Wl2_Offer *offer;
- sel_debug("In\n");
-
- ev = event;
- sel = seat_sel->sel;
- offer = sel->dnd_offer;
-
- if (offer != ev->offer) return ECORE_CALLBACK_PASS_ON;
-
- if (sel->request_obj)
- {
- Ecore_Wl2_Drag_Action action;
-
- action = ecore_wl2_offer_action_get(ev->offer);
- if (action == ECORE_WL2_DRAG_ACTION_ASK)
- ecore_wl2_offer_actions_set(ev->offer, ECORE_WL2_DRAG_ACTION_COPY, ECORE_WL2_DRAG_ACTION_COPY);
- action = ecore_wl2_offer_action_get(ev->offer);
- sel->action = _wl_to_elm(action);
-
- _wl_dropable_data_handle(sel, ev);
- evas_object_event_callback_del_full(sel->request_obj,
- EVAS_CALLBACK_DEL,
- _wl_sel_obj_del2, sel);
- sel->request_obj = NULL;
- }
-
- ecore_wl2_offer_finish(ev->offer);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static Eina_Bool
-_wl_dnd_drop(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Dnd_Drop *ev;
- Sel_Manager_Seat_Selection *seat_sel = data;
- Efl_Ui_Selection_Manager_Data *pd;
- Sel_Manager_Selection *sel;
- Sel_Manager_Dropable *drop;
- Eina_List *l;
-
- sel_debug("In\n");
- ev = event;
- seat_sel->saved_types->pos = EINA_POSITION2D(ev->x, ev->y);
- pd = seat_sel->pd;
- sel = seat_sel->sel;
- sel->dnd_offer = ev->offer;
-
- EINA_LIST_FOREACH(pd->drop_list, l, drop)
- {
- if (drop->last.in)
- {
- sel_debug("Request data of type %s; drop: %p\n", drop->last.type, drop);
- sel->request_obj = drop->obj;
- sel->request_format = drop->last.format;
- evas_object_event_callback_add(sel->request_obj,
- EVAS_CALLBACK_DEL, _wl_sel_obj_del2,
- sel);
- ecore_wl2_offer_receive(ev->offer, (char*)drop->last.type);
- ecore_event_handler_add(ECORE_WL2_EVENT_OFFER_DATA_READY, _wl_dnd_receive, seat_sel);
-
- return ECORE_CALLBACK_PASS_ON;
- }
- }
-
- ecore_wl2_dnd_drag_end(_wl_seat_get(ev->win, NULL, seat_sel->seat));
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_wl_sel_manager_drop_target_add(Efl_Ui_Selection_Manager_Data *pd, Efl_Object *target_obj,
- Efl_Ui_Selection_Format format, unsigned int seat)
-{
- Sel_Manager_Dropable *dropable = NULL;
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- Drop_Format *df;
-
- df = calloc(1, sizeof(Drop_Format));
- if (!df) return EINA_FALSE;
- df->format = format;
- dropable = efl_key_data_get(target_obj, "__elm_dropable");
- if (!dropable)
- {
- //Create new drop
- dropable = calloc(1, sizeof(Sel_Manager_Dropable));
- if (!dropable)
- {
- free(df);
- return EINA_FALSE;
- }
- pd->drop_list = eina_list_append(pd->drop_list, dropable);
- if (!pd->drop_list)
- {
- free(dropable);
- free(df);
- return EINA_FALSE;
- }
- dropable->obj = target_obj;
- efl_key_data_set(target_obj, "__elm_dropable", dropable);
- }
-
- dropable->format_list = eina_inlist_append(dropable->format_list, EINA_INLIST_GET(df));
- dropable->seat = seat;
- seat_sel = _wl_sel_manager_seat_selection_init(pd, seat);
-
- evas_object_event_callback_add(target_obj, EVAS_CALLBACK_DEL,
- _all_drop_targets_cbs_del, pd);
-
- if (!seat_sel->enter_handler)
- {
- seat_sel->enter_handler =
- ecore_event_handler_add(ECORE_WL2_EVENT_DND_ENTER,
- _wl_dnd_enter, seat_sel);
- seat_sel->leave_handler =
- ecore_event_handler_add(ECORE_WL2_EVENT_DND_LEAVE,
- _wl_dnd_leave, seat_sel);
- seat_sel->pos_handler =
- ecore_event_handler_add(ECORE_WL2_EVENT_DND_MOTION,
- _wl_dnd_position, seat_sel);
- seat_sel->drop_handler =
- ecore_event_handler_add(ECORE_WL2_EVENT_DND_DROP,
- _wl_dnd_drop, seat_sel);
- }
-
- return EINA_TRUE;
-}
-#endif
-
-#ifdef HAVE_ELEMENTARY_COCOA
-static Sel_Manager_Seat_Selection *
-_cocoa_sel_manager_seat_selection_init(Efl_Ui_Selection_Manager_Data *pd, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- Eina_List *l = NULL;
-
- EINA_LIST_FOREACH(pd->seat_list, l, seat_sel)
- {
- if(seat_sel->seat == seat)
- break;
- }
- if (!seat_sel)
- {
- seat_sel = calloc(1, sizeof(Sel_Manager_Seat_Selection));
- if (!seat_sel)
- {
- ERR("Failed to allocate seat");
- return NULL;
- }
- seat_sel->saved_types = calloc(1, sizeof(Saved_Type));
- seat_sel->seat = seat;
- seat_sel->pd = pd;
- pd->seat_list = eina_list_append(pd->seat_list, seat_sel);
- }
- if (!seat_sel->sel)
- {
- Sel_Manager_Selection *sel = calloc(1, sizeof(Sel_Manager_Selection));
- if (!sel)
- {
- ERR("failed to allocate selection");
- return NULL;
- }
- sel->seat_sel = seat_sel;
- seat_sel->sel = sel;
- }
-
- return seat_sel;
-}
-
-static Ecore_Cocoa_Window *
-_cocoa_window_get(const Evas_Object *obj)
-{
- Ecore_Cocoa_Window *win = NULL;
- Evas_Object *_win;
-
- _win = elm_win_get(obj);
- if (_win)
- {
- win = elm_win_cocoa_window_get(_win);
- }
-
- if (!win)
- {
- CRI("WIN has not been retrieved!!!");
- }
-
- return win;
-}
-
-static Ecore_Cocoa_Cnp_Type
-_sel_format_to_ecore_cocoa_cnp_type(Efl_Ui_Selection_Format fmt)
-{
- Ecore_Cocoa_Cnp_Type type = 0;
-
- if ((fmt & EFL_UI_SELECTION_FORMAT_TEXT) ||
- (fmt & EFL_UI_SELECTION_FORMAT_VCARD))
- type |= ECORE_COCOA_CNP_TYPE_STRING;
- if (fmt & EFL_UI_SELECTION_FORMAT_HTML)
- type |= ECORE_COCOA_CNP_TYPE_HTML;
- if (fmt & EFL_UI_SELECTION_FORMAT_IMAGE)
- type |= ECORE_COCOA_CNP_TYPE_IMAGE;
-
- return type;
-}
-
-static void
-_cocoa_sel_obj_del_req_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj,
- void *ev_info EINA_UNUSED)
-{
- Sel_Manager_Selection *sel = data;
- if (sel->request_obj == obj) sel->request_obj = NULL;
-}
-
-static void
-_cocoa_sel_obj_del_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj,
- void *ev_info EINA_UNUSED)
-{
- Sel_Manager_Selection *sel = data;
- if (sel->owner == obj)
- {
- sel->owner = NULL;
- }
- //if (dragwidget == obj) dragwidget = NULL;
-}
-
-static void
-_job_pb_cb(void *data)
-{
- Sel_Manager_Selection *sel = data;
- Efl_Ui_Selection_Data ddata;
- Ecore_Cocoa_Cnp_Type type, get_type;
- void *pbdata;
- int pbdata_len;
-
- if (sel->data_func)
- {
- ddata.pos.x = 0;
- ddata.pos.y = 0;
-
- /* Pass to cocoa clipboard */
- type = _sel_format_to_ecore_cocoa_cnp_type(sel->request_format);
- pbdata = ecore_cocoa_clipboard_get(&pbdata_len, type, &get_type);
-
- ddata.format = EFL_UI_SELECTION_FORMAT_NONE;
- if (get_type & ECORE_COCOA_CNP_TYPE_STRING)
- ddata.format |= EFL_UI_SELECTION_FORMAT_TEXT;
- if (get_type & ECORE_COCOA_CNP_TYPE_IMAGE)
- ddata.format |= EFL_UI_SELECTION_FORMAT_IMAGE;
- if (get_type & ECORE_COCOA_CNP_TYPE_HTML)
- ddata.format |= EFL_UI_SELECTION_FORMAT_HTML;
-
- ddata.content.mem = pbdata;
- ddata.content.len = pbdata_len;
- ddata.action = EFL_UI_SELECTION_ACTION_UNKNOWN;
- sel->data_func(sel->data_func_data, sel->request_obj, &ddata);
- free(pbdata);
- }
-}
-
-static Eina_Future *
-_cocoa_efl_sel_manager_selection_set(Efl_Ui_Selection_Manager_Data *pd,
- Evas_Object *owner,
- Efl_Ui_Selection_Type type,
- Efl_Ui_Selection_Format format,
- Eina_Slice data,
- Ecore_Cocoa_Window *win,
- unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- Ecore_Cocoa_Cnp_Type ecore_type;
- Eina_List *l, *l_next;
- Sel_Manager_Selection_Lost *sel_lost;
-
- seat_sel = _cocoa_sel_manager_seat_selection_init(pd, seat);
- seat_sel->active_type = type;
- sel = seat_sel->sel;
-
- if ((!data.mem) && (format != EFL_UI_SELECTION_FORMAT_IMAGE))
- {
- efl_ui_selection_manager_selection_clear(pd->sel_man, owner, type, seat);
- return NULL;
- }
- if (data.len <= 0) return NULL;
-
- EINA_LIST_FOREACH_SAFE(seat_sel->sel_lost_list, l, l_next, sel_lost)
- {
- if ((sel_lost->request == sel->owner) &&
- (sel_lost->type == type))
- {
- eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
- }
- }
- if (sel->owner)
- evas_object_event_callback_del_full(sel->owner, EVAS_CALLBACK_DEL,
- _cocoa_sel_obj_del_cb, sel);
-
- sel->owner = owner;
- sel->win = win;
- sel->format = format;
-
- evas_object_event_callback_add(sel->owner, EVAS_CALLBACK_DEL,
- _cocoa_sel_obj_del_cb, sel);
- ELM_SAFE_FREE(sel->data.mem, free);
-
- if (format == EFL_UI_SELECTION_FORMAT_MARKUP)
- {
- //FIXME this code assumes that sel->data.mem has a \0 at the end
- sel->data.mem = evas_textblock_text_markup_to_utf8(NULL, data.mem);
- sel->data.len = strlen(sel->data.mem);
- //set the new text
- format = EFL_UI_SELECTION_FORMAT_TEXT;
- }
- else
- {
- sel->data = eina_slice_dup(data);
- }
-
- if (sel->data.mem)
- {
- ecore_type = _sel_format_to_ecore_cocoa_cnp_type(format);
- ecore_cocoa_clipboard_set(sel->data.mem, sel->data.len, ecore_type);
- }
- else
- {
- CRI("Failed to allocate memory!");
- efl_ui_selection_manager_selection_clear(pd->sel_man, owner, type, seat_sel->seat);
- return NULL;
- }
-
- return _update_sel_lost_list(owner, type, seat_sel);
-}
-
-static void
-_cocoa_efl_sel_manager_selection_get(const Efl_Object *request,
- Efl_Ui_Selection_Manager_Data *pd,
- Efl_Ui_Selection_Type type EINA_UNUSED,
- Efl_Ui_Selection_Format format,
- void *data_func_data, Efl_Ui_Selection_Data_Ready data_func, Eina_Free_Cb data_func_free_cb,
- Ecore_Cocoa_Window *win, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
-
- seat_sel = _sel_manager_seat_selection_init(pd, seat);
- sel = seat_sel->sel;
- sel->request_format = format;
- sel->request_obj = (Efl_Object *)request;
- sel->data_func_data = data_func_data;
- sel->data_func = data_func;
- sel->data_func_free_cb = data_func_free_cb;
- if (sel->request_obj)
- evas_object_event_callback_del_full(sel->request_obj, EVAS_CALLBACK_DEL,
- _cocoa_sel_obj_del_req_cb, sel);
-
- sel->win = win;
- ecore_job_add(_job_pb_cb, sel);
-
- evas_object_event_callback_add(sel->request_obj, EVAS_CALLBACK_DEL,
- _cocoa_sel_obj_del_req_cb, sel);
-}
-
-#endif
-
-// win32 specific stuff
-////////////////////////////////////////////////////////////////////////////
-#ifdef HAVE_ELEMENTARY_WIN32
-static Sel_Manager_Seat_Selection *
-_win32_sel_manager_seat_selection_init(Efl_Ui_Selection_Manager_Data *pd, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel = NULL;
- Eina_List *l = NULL;
-
- EINA_LIST_FOREACH(pd->seat_list, l, seat_sel)
- {
- if(seat_sel->seat == seat)
- break;
- }
- if (!seat_sel)
- {
- seat_sel = calloc(1, sizeof(Sel_Manager_Seat_Selection));
- if (!seat_sel)
- {
- ERR("Failed to allocate seat");
- return NULL;
- }
- seat_sel->saved_types = calloc(1, sizeof(Saved_Type));
- seat_sel->seat = seat;
- seat_sel->pd = pd;
- pd->seat_list = eina_list_append(pd->seat_list, seat_sel);
- }
- if (!seat_sel->sel_list)
- {
- seat_sel->sel_list = calloc(1, (EFL_UI_SELECTION_TYPE_CLIPBOARD + 1) * sizeof(Sel_Manager_Selection));
- if (!seat_sel->sel_list)
- {
- ERR("failed to allocate selection list");
- return NULL;
- }
- _set_selection_list(seat_sel->sel_list, seat_sel);
- }
-
- return seat_sel;
-}
-
-static char *
-_win32_text_n_to_rn(char *intext)
-{
- size_t size = 0, newlines = 0;
- char *outtext = NULL, *p, *o;
-
- if (!intext) return NULL;
- for (p = intext; *p; p++)
- {
- if (*p == '\n') newlines++;
- size++;
- }
- outtext = malloc(size + newlines + 1);
- if (!outtext) return intext;
- for (p = intext, o = outtext; *p; p++, o++)
- {
- if (*p == '\n')
- {
- o++;
- *p = '\r';
- }
- *o = *p;
- }
- *o = '\0';
- free(intext);
- return outtext;
-}
-
-static void
-_win32_sel_obj_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Sel_Manager_Selection *sel = data;
- if (sel->owner == obj) sel->owner = NULL;
-}
-
-static void
-_win32_sel_obj_del2(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- Sel_Manager_Selection *sel = data;
- if (sel->request_obj == obj) sel->request_obj = NULL;
-}
-
-static Ecore_Win32_Window *
-_win32_window_get(const Evas_Object *obj)
-{
- Evas_Object *top;
- Ecore_Win32_Window *win = NULL;
-
- if (elm_widget_is(obj))
- {
- top = elm_widget_top_get(obj);
- if (!top)
- {
- Evas_Object *par;
- par = elm_widget_parent_widget_get(obj);
- if (par) top = elm_widget_top_get(par);
- }
- if (top && (efl_isa(top, EFL_UI_WIN_CLASS)))
- win = elm_win_win32_window_get(top);
- }
-
- if (!win)
- {
- Ecore_Evas *ee;
- Evas *evas;
- const char *engine_name;
-
- evas = evas_object_evas_get(obj);
- if (!evas) return NULL;
-
- ee = ecore_evas_ecore_evas_get(evas);
- if (!ee) return NULL;
-
- engine_name = ecore_evas_engine_name_get(ee);
- if (!strcmp(engine_name, ELM_BUFFER))
- {
- ee = ecore_evas_buffer_ecore_evas_parent_get(ee);
- if (!ee) return NULL;
- win = ecore_evas_win32_window_get(ee);
- }
- else
- {
- if ((strcmp(engine_name, ELM_SOFTWARE_WIN32) == 0) ||
- (strcmp(engine_name, ELM_SOFTWARE_DDRAW) == 0))
- return ecore_evas_win32_window_get(ee);
- }
- }
-
- return win;
-}
-
-static Eina_Future *
-_win32_efl_sel_manager_selection_set(Efl_Ui_Selection_Manager_Data *pd,
- Evas_Object *owner,
- Efl_Ui_Selection_Type type,
- Efl_Ui_Selection_Format format,
- Eina_Slice data,
- Ecore_Win32_Window *win,
- unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
-
- if (type != EFL_UI_SELECTION_TYPE_CLIPBOARD)
- return NULL;
-
- if ((!data.mem) && (format != EFL_UI_SELECTION_FORMAT_IMAGE))
- {
- efl_ui_selection_manager_selection_clear(pd->sel_man, owner, type, seat);
- return NULL;
- }
-
- seat_sel = _win32_sel_manager_seat_selection_init(pd, seat);
- seat_sel->active_type = type;
- sel = seat_sel->sel_list + type;
- if (sel->owner != owner)
- {
- Eina_List *l, *l_next;
- Sel_Manager_Selection_Lost *sel_lost;
-
- EINA_LIST_FOREACH_SAFE(seat_sel->sel_lost_list, l, l_next, sel_lost)
- {
- if ((sel_lost->request == sel->owner) &&
- (sel_lost->type == type))
- {
- eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
- }
- }
-
- }
- if (sel->owner)
- evas_object_event_callback_del_full(sel->owner, EVAS_CALLBACK_DEL,
- _win32_sel_obj_del, sel);
- sel->active = EINA_TRUE;
- sel->owner = owner;
- sel->win = win;
- if (sel->set) sel->set(win, sel->data.mem, sel->data.len);
- sel->format = format;
-
- evas_object_event_callback_add
- (sel->owner, EVAS_CALLBACK_DEL, _win32_sel_obj_del, sel);
-
- ELM_SAFE_FREE(sel->data.mem, free);
- sel->data = eina_slice_dup(data);
- if (!sel->data.mem)
- {
- efl_ui_selection_manager_selection_clear(pd->sel_man, owner, type, seat_sel->seat);
- return NULL;
- }
-
- return _update_sel_lost_list(owner, type, seat_sel);
-}
-
-static void
-_win32_efl_sel_manager_selection_clear(Efl_Ui_Selection_Manager_Data *pd,
- Evas_Object *owner,
- Efl_Ui_Selection_Type type,
- Sel_Manager_Seat_Selection *seat_sel)
-{
- Sel_Manager_Selection *sel;
- Ecore_Win32_Window *win;
-
- if (type != EFL_UI_SELECTION_TYPE_CLIPBOARD)
- return;
-
- sel = seat_sel->sel_list + type;
-
- /* No longer this selection: Consider it gone! */
- if ((!sel->active) || (sel->owner != owner))
- return;
-
- if (sel->owner)
- evas_object_event_callback_del_full(sel->owner, EVAS_CALLBACK_DEL,
- _win32_sel_obj_del, sel);
- if (sel->request_obj)
- evas_object_event_callback_del_full(sel->request_obj, EVAS_CALLBACK_DEL,
- _win32_sel_obj_del2, sel);
- sel->owner = NULL;
- sel->request_obj = NULL;
- sel->active = EINA_FALSE;
- ELM_SAFE_FREE(sel->data.mem, free);
- /* sel->clear(win); */
-}
-
-static Eina_Bool
-_win32_efl_sel_manager_selection_get(const Efl_Object *request,
- Efl_Ui_Selection_Manager_Data *pd,
- Efl_Ui_Selection_Type type, Efl_Ui_Selection_Format format,
- void *data_func_data, Efl_Ui_Selection_Data_Ready data_func,
- Eina_Free_Cb data_func_free_cb,
- Ecore_Win32_Window *win, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel;
- void *data;
- int size;
-
- if (type != EFL_UI_SELECTION_TYPE_CLIPBOARD)
- return EINA_FALSE;
-
- seat_sel = _sel_manager_seat_selection_init(pd, seat);
- sel = seat_sel->sel_list + type;
-
- if (sel->request_obj)
- evas_object_event_callback_del_full(sel->request_obj, EVAS_CALLBACK_DEL,
- _win32_sel_obj_del2, sel);
- sel->request_format = format;
- sel->request_obj = (Evas_Object *)request;
- sel->win = win;
- sel->data_func_data = data_func_data;
- sel->data_func = data_func;
- sel->data_func_free_cb = data_func_free_cb;
- sel->get(win, &data, &size);
-
- if (!data || (size <= 0))
- goto cb_add;
-
- if ((sel->format & EFL_UI_SELECTION_FORMAT_MARKUP) ||
- (sel->format & EFL_UI_SELECTION_FORMAT_HTML))
- {
- char *str;
-
- str = (char *)malloc(size + 1);
- if (str)
- {
- memcpy(str, data, size);
- str[size] = '\0';
- data = _win32_text_n_to_rn(_elm_util_mkup_to_text(str));
- free(str);
- if (data)
- size = strlen(data);
- else
- size = 0;
- }
- else
- {
- free(data);
- data = NULL;
- }
- }
-
- if (sel->data_func && data && (size > 0))
- {
- Efl_Ui_Selection_Data sdata;
-
- sdata.pos.x = sdata.pos.y = 0;
- sdata.format = EFL_UI_SELECTION_FORMAT_TEXT;
- sdata.content.mem = data;
- sdata.content.len = size;
- sdata.action = sel->action;
- sel->data_func(sel->data_func_data, sel->request_obj, &sdata);
- }
-
- if (data)
- free(data);
-
- cb_add:
- evas_object_event_callback_add
- (sel->request_obj, EVAS_CALLBACK_DEL, _win32_sel_obj_del2, sel);
-
- return EINA_TRUE;
-}
-
-#endif /* HAVE_ELEMENTARY_WIN32 */
-
-
-static int
-_drop_item_container_cmp(const void *d1, const void *d2)
-{
- const Item_Container_Drop_Info *di = d1;
- return (((uintptr_t)di->obj) - ((uintptr_t)d2));
-}
-
-static Eina_Bool
-_drop_item_container_del(Efl_Ui_Selection_Manager_Data *pd, Efl_Object *cont, Eina_Bool full)
-{
- Item_Container_Drop_Info *di;
-
- di = eina_list_search_unsorted(pd->drop_cont_list,
- _drop_item_container_cmp, cont);
- if (di)
- {
- _all_drop_targets_cbs_del(pd, NULL, cont, NULL);
- di->item_func_data = NULL;
- di->item_func = NULL;
-
- if (full)
- {
- pd->drop_cont_list = eina_list_remove(pd->drop_cont_list, di);
- free(di);
- }
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-}
-
-static inline Eina_List *
-_anim_icons_make(Sel_Manager_Drag_Container *dc)
-{
- Eina_List *list = NULL, *icon_list = NULL;
- Evas_Object *obj;
-
- if (dc->icon_list_func)
- {
- DBG("calling icon_list_func");
- icon_list = dc->icon_list_func(dc->icon_list_func_data, dc->cont);
- }
- EINA_LIST_FREE(icon_list, obj)
- {
- DBG("one obj in icon_list");
- Anim_Icon *ai = calloc(1, sizeof(Anim_Icon));
- if (!ai)
- {
- ERR("Failed to allocate for icon!");
- continue;
- }
-
- evas_object_geometry_get(obj, &ai->start.x, &ai->start.y, &ai->start.w, &ai->start.h);
- evas_object_show(obj);
- ai->obj = obj;
- list = eina_list_append(list, ai);
- }
- DBG("made icon list");
-
- return list;
-}
-
-static void
-_cont_obj_drag_done_cb(void *data, const Efl_Event *ev EINA_UNUSED)
-{
- Sel_Manager_Drag_Container *dc = data;
- elm_widget_scroll_freeze_pop(dc->cont);
-}
-
-static Eina_Bool
-_cont_obj_drag_start(void *data)
-{
- DBG("going to start draging");
- Sel_Manager_Drag_Container *dc = data;
-
- dc->timer = NULL;
- efl_event_callback_add(dc->cont, EFL_UI_DND_EVENT_DRAG_DONE, _cont_obj_drag_done_cb, dc);
- elm_widget_scroll_freeze_push(dc->cont);
- efl_ui_selection_manager_drag_start(dc->pd->sel_man, dc->cont, dc->format,
- eina_rw_slice_slice_get(dc->data), dc->action,
- dc->icon_func_data, dc->icon_func, dc->icon_func_free_cb,
- dc->seat);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static Eina_Bool
-_drag_anim_play(void *data, double pos)
-{
- Sel_Manager_Drag_Container *dc = data;
-
- if (dc->animator)
- {
- Eina_List *l;
- Anim_Icon *ai;
- Evas_Coord xm, ym;
-
- if (pos > 0.99)
- {
- dc->animator = NULL;
- EINA_LIST_FOREACH(dc->icons, l, ai)
- evas_object_hide(ai->obj);
-
- _cont_obj_drag_start(dc);
- return ECORE_CALLBACK_CANCEL;
- }
-
- evas_pointer_canvas_xy_get(dc->e, &xm, &ym);
- EINA_LIST_FOREACH(dc->icons, l, ai)
- {
- int x, y, w, h;
- w = ai->start.w - ((dc->final_icon.w - ai->start.w) * pos);
- h = ai->start.h - ((dc->final_icon.h - ai->start.h) * pos);
- x = ai->start.x - (pos * (ai->start.x + (w / 2) - xm));
- y = ai->start.y - (pos * (ai->start.y + (h / 2) - ym));
- evas_object_geometry_set(ai->obj, x, y, w, h);
- }
-
- return ECORE_CALLBACK_RENEW;
- }
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static inline void
-_drag_anim_start(Sel_Manager_Drag_Container *dc)
-{
-
- dc->timer = NULL;
- if (dc->icon_func)
- {
- Eina_Position2D pos_ret;
- Evas_Object *temp_win = elm_win_add(NULL, "Temp", ELM_WIN_DND);
- Evas_Object *final_icon = dc->icon_func(dc->icon_func_data, temp_win, dc->cont, &pos_ret);
- evas_object_geometry_get(final_icon, NULL, NULL, &dc->final_icon.w, &dc->final_icon.h);
- evas_object_del(final_icon);
- evas_object_del(temp_win);
- }
- dc->animator = ecore_evas_animator_timeline_add(dc->e, dc->anim_duration, _drag_anim_play, dc);
-}
-
-static Eina_Bool
-_cont_obj_anim_start(void *data)
-{
- sel_debug("In");
- Sel_Manager_Drag_Container *dc = data;
- Efl_Object *it = NULL;
- Eina_Position2D posret; //does not use
-
- if (dc->item_get_func)
- it = dc->item_get_func(dc->item_get_func_data, dc->cont, dc->down, &posret);
- dc->timer = NULL;
- dc->format = EFL_UI_SELECTION_FORMAT_TARGETS; //default
- dc->data.len = 0;
- dc->action = EFL_UI_SELECTION_ACTION_COPY; //default
- dc->icons = NULL;
-
- //failed to get mouse-down item, abort drag
- if (!it)
- return ECORE_CALLBACK_CANCEL;
-
- if (dc->drag_data_func)
- {
- dc->drag_data_func(dc->drag_data_func_data, dc->cont,
- &dc->format, &dc->data, &dc->action);
- if (EINA_DBL_EQ(dc->anim_duration, 0.0))
- {
- _cont_obj_drag_start(dc);
- }
- else
- {
- dc->icons = _anim_icons_make(dc);
- if (dc->icons)
- {
- _drag_anim_start(dc);
- }
- else
- {
- // even if we don't manage the icons animation, we have
- // to wait until it is finished before beginning drag.
- dc->timer = ecore_timer_add(dc->anim_duration,
- _cont_obj_drag_start, dc);
- }
- }
- }
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static void
-_abort_drag(Evas_Object *obj EINA_UNUSED, Sel_Manager_Drag_Container *dc)
-{
- evas_object_event_callback_del_full(dc->cont, EVAS_CALLBACK_MOUSE_MOVE,
- _cont_obj_mouse_move_cb, dc);
- evas_object_event_callback_del_full(dc->cont, EVAS_CALLBACK_MOUSE_UP,
- _cont_obj_mouse_up_cb, dc);
- _item_container_del_internal(dc, EINA_FALSE);
-
- ELM_SAFE_FREE(dc->timer, ecore_timer_del);
- _anim_data_free(dc);
-}
-
-static void
-_cont_obj_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info)
-{
- Sel_Manager_Drag_Container *dc = data;
- Evas_Event_Mouse_Move *ev = event_info;
-
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
- {
- _abort_drag(obj, dc);
- }
- if (dc &&
- (evas_device_class_get(ev->dev) == EVAS_DEVICE_CLASS_TOUCH))
- {
- int dx, dy;
- int fs = elm_config_finger_size_get();
-
- dx = ev->cur.canvas.x - dc->down.x;
- dy = ev->cur.canvas.y - dc->down.y;
- if ((dx * dx + dy * dy) > (fs * fs))
- {
- sel_debug("mouse moved too much - have to cancel DnD");
- _abort_drag(obj, dc);
- }
- }
-}
-
-static void
-_anim_data_free(Sel_Manager_Drag_Container *dc)
-{
- if (dc)
- {
- ELM_SAFE_FREE(dc->animator, ecore_animator_del);
- Anim_Icon *ai;
-
- EINA_LIST_FREE(dc->icons, ai)
- {
- evas_object_del(ai->obj);
- free(ai);
- }
- dc->icons = NULL;
- }
-}
-
-static void
-_cont_obj_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
-{
- Sel_Manager_Drag_Container *dc = data;
-
- if (((Evas_Event_Mouse_Up *)event_info)->button != 1)
- return;
-
- evas_object_event_callback_del_full(dc->cont, EVAS_CALLBACK_MOUSE_MOVE,
- _cont_obj_mouse_move_cb, dc);
- evas_object_event_callback_del_full(dc->cont, EVAS_CALLBACK_MOUSE_UP,
- _cont_obj_mouse_up_cb, dc);
- ELM_SAFE_FREE(dc->timer, ecore_timer_del);
-
- _anim_data_free(dc);
-}
-
-static void
-_cont_obj_mouse_down_cb(void *data, Evas *e, Evas_Object *obj EINA_UNUSED, void *event_info)
-{
- Sel_Manager_Drag_Container *dc = data;
- Evas_Event_Mouse_Down *ev = event_info;
- if (ev->button != 1)
- return;
-
- dc->e = e;
- dc->down.x = ev->canvas.x;
- dc->down.y = ev->canvas.y;
-
- evas_object_event_callback_add(dc->cont, EVAS_CALLBACK_MOUSE_UP,
- _cont_obj_mouse_up_cb, dc);
- ecore_timer_del(dc->timer);
- if (dc->time_to_drag)
- {
- dc->timer = ecore_timer_add(dc->time_to_drag, _cont_obj_anim_start, dc);
- evas_object_event_callback_add(dc->cont, EVAS_CALLBACK_MOUSE_MOVE,
- _cont_obj_mouse_move_cb, dc);
- }
- else
- {
- _cont_obj_anim_start(dc);
- }
-}
-
-static void
-_item_container_del_internal(Sel_Manager_Drag_Container *dc, Eina_Bool full)
-{
- if (dc)
- {
- ELM_SAFE_FREE(dc->timer, ecore_timer_del);
- if (dc->animator)
- _anim_data_free(dc);
- evas_object_event_callback_del_full(dc->cont, EVAS_CALLBACK_MOUSE_DOWN,
- _cont_obj_mouse_down_cb, dc);
- if (full)
- {
- dc->item_get_func = NULL;
- dc->item_get_func_data = NULL;
- free(dc);
- }
- }
-}
-
-static int
-_drag_item_container_cmp(const void *d1, const void *d2)
-{
- const Sel_Manager_Drag_Container *dc = d1;
- return (((uintptr_t)dc->cont) - ((uintptr_t)d2));
-}
-//exposed APIs
-EOLIAN static Eina_Future *
-_efl_ui_selection_manager_selection_set(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *owner, Efl_Ui_Selection_Type type,
- Efl_Ui_Selection_Format format,
- Eina_Slice data, unsigned int seat)
-{
- Eina_Future *p = NULL;
-
- sel_debug("owner: %p, seat: %d, type: %d, format: %d", owner, seat, type, format);
- if (type > EFL_UI_SELECTION_TYPE_CLIPBOARD)
- {
- ERR("Not supported format: %d", type);
- return NULL;
- }
-
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin = _x11_xwin_get(owner);
- if (xwin)
- p = _x11_efl_sel_manager_selection_set(pd, owner, type, format, data, xwin, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Ecore_Wl2_Window *win = _wl_window_get(owner);
- if (win)
- p = _wl_efl_sel_manager_selection_set(pd, owner, type, format, data, win, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
- Ecore_Cocoa_Window *win = _cocoa_window_get(owner);
- if (win)
- p = _cocoa_efl_sel_manager_selection_set(pd, owner, type, format, data, win, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- Ecore_Win32_Window *win = _win32_window_get(owner);
- if (win)
- p = _win32_efl_sel_manager_selection_set(pd, owner, type, format, data, win, seat);
-#endif
-
- return p;
-}
-
-//TODO: add support for local
-EOLIAN static void
-_efl_ui_selection_manager_selection_get(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- const Efl_Object *request, Efl_Ui_Selection_Type type,
- Efl_Ui_Selection_Format format,
- void *data_func_data, Efl_Ui_Selection_Data_Ready data_func,
- Eina_Free_Cb data_func_free_cb, unsigned int seat)
-{
- sel_debug("request: %p, seat: %d, type: %d, format: %d", request, seat, type, format);
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin = _x11_xwin_get(request);
- if (xwin)
- _x11_efl_sel_manager_selection_get(request, pd, type, format, data_func_data,
- data_func, data_func_free_cb, xwin, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Ecore_Wl2_Window *win = _wl_window_get(request);
- if (win)
- _wl_efl_sel_manager_selection_get(request, pd, type, format, data_func_data,
- data_func, data_func_free_cb, win, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
- Ecore_Cocoa_Window *win = _cocoa_window_get(request);
- if (win)
- _cocoa_efl_sel_manager_selection_get(request, pd, type, format, data_func_data,
- data_func, data_func_free_cb, win, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- Ecore_Win32_Window *win = _win32_window_get(request);
- if (win)
- _win32_efl_sel_manager_selection_get(request, pd, type, format, data_func_data,
- data_func, data_func_free_cb, win, seat);
-#endif
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_selection_clear(Eo *obj, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *owner, Efl_Ui_Selection_Type type, unsigned int seat)
-{
- Eina_Bool local = EINA_FALSE;
- Sel_Manager_Seat_Selection *seat_sel;
- Sel_Manager_Selection *sel = NULL;
-
- sel_debug("owner: %p, seat: %d, type: %d", owner, seat, type);
- seat_sel = _sel_manager_seat_selection_init(pd, seat);
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin = _x11_xwin_get(obj);
- if (xwin)
- {
- sel = seat_sel->sel_list + type;
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Ecore_Wl2_Window *win = _wl_window_get(obj);
- if (win)
- {
- sel = seat_sel->sel;
- }
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
- Ecore_Cocoa_Window *win = _cocoa_window_get(obj);
- if (win)
- {
- sel = seat_sel->sel;
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- Ecore_Win32_Window *win = _win32_window_get(obj);
- {
- sel = seat_sel->sel_list + type;
- }
-#endif
- if (!sel) return;
- if ((!sel->active) && (sel->owner != owner))
- {
- return;
- }
- sel->active = EINA_FALSE;
-#ifdef HAVE_ELEMENTARY_X
- if (xwin)
- {
- seat_sel->sel_list[type].data.len = 0;
- if (seat_sel->sel_list[type].data.mem)
- {
- free(seat_sel->sel_list[type].data.mem);
- seat_sel->sel_list[type].data.mem = NULL;
- }
- if (sel->xwin != 0) local = EINA_TRUE;
- if (!local) seat_sel->sel_list[type].clear();
- else
- {
- Eina_List *l, *l_next;
- Sel_Manager_Selection_Lost *sel_lost;
-
- EINA_LIST_FOREACH_SAFE(seat_sel->sel_lost_list, l, l_next, sel_lost)
- {
- if ((sel_lost->request == sel->owner) &&
- (sel_lost->type == type))
- {
- eina_promise_resolve(sel_lost->promise, eina_value_uint_init(sel_lost->type));
- }
- }
- seat_sel->sel_list[type].owner = NULL;
- }
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- if (win)
- {
- sel->selection_serial = ecore_wl2_dnd_selection_clear(_wl_seat_get(_wl_window_get(owner), owner, seat));
- }
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
- if (win)
- {
- if (sel->owner)
- evas_object_event_callback_del_full(sel->owner, EVAS_CALLBACK_DEL,
- _cocoa_sel_obj_del_cb, sel);
- if (sel->request_obj)
- evas_object_event_callback_del_full(sel->request_obj, EVAS_CALLBACK_DEL,
- _cocoa_sel_obj_del_req_cb, sel);
- sel->owner = NULL;
- sel->request_obj = NULL;
- ELM_SAFE_FREE(sel->data.mem, free);
- sel->data.len = 0;
-
- ecore_cocoa_clipboard_clear();
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- if (win)
- {
- _win32_efl_sel_manager_selection_clear(pd, owner, type, seat_sel);
- }
-#endif
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_selection_manager_selection_has_owner(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd EINA_UNUSED,
- Efl_Object *request, Efl_Ui_Selection_Type type,
- unsigned int seat)
-{
-#ifdef HAVE_ELEMENTARY_X
- (void)seat;
- if (_x11_xwin_get(request))
- {
- Ecore_X_Atom xtype;
- switch (type)
- {
- case EFL_UI_SELECTION_TYPE_PRIMARY:
- xtype = ECORE_X_ATOM_SELECTION_PRIMARY;
- break;
- case EFL_UI_SELECTION_TYPE_SECONDARY:
- xtype = ECORE_X_ATOM_SELECTION_SECONDARY;
- break;
- case EFL_UI_SELECTION_TYPE_DND:
- xtype = ECORE_X_ATOM_SELECTION_XDND;
- break;
- default:
- xtype = ECORE_X_ATOM_SELECTION_CLIPBOARD;
- }
- return !!ecore_x_selection_owner_get(xtype);
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Ecore_Wl2_Window *win;
-
- win = _wl_window_get(request);
- if (win)
- return !!ecore_wl2_dnd_selection_get(_wl_seat_get(win, request, seat));
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
- // FIXME: need to check if there is clipboard data. Paste always enabled.
- return EINA_TRUE;
-#endif
- return EINA_FALSE;
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_drag_start(Eo *obj, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *drag_obj, Efl_Ui_Selection_Format format,
- Eina_Slice data, Efl_Ui_Selection_Action action,
- void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func,
- Eina_Free_Cb icon_func_free_cb, unsigned int seat)
-{
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin = _x11_xwin_get(drag_obj);
- if (xwin)
- _x11_efl_sel_manager_drag_start(obj, pd, drag_obj, format, data, action,
- icon_func_data, icon_func, icon_func_free_cb,
- xwin, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Ecore_Wl2_Window *win = _wl_window_get(drag_obj);
- if (win)
- _wl_efl_sel_manager_drag_start(obj, pd, drag_obj, format, data, action,
- icon_func_data, icon_func, icon_func_free_cb,
- win, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
-#endif
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_drag_cancel(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *drag_obj, unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel = _sel_manager_seat_selection_init(pd, seat);
-
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin = _x11_xwin_get(drag_obj);
- if (xwin)
- {
- ecore_x_pointer_ungrab();
- ELM_SAFE_FREE(seat_sel->mouse_up_handler, ecore_event_handler_del);
- ELM_SAFE_FREE(seat_sel->dnd_status_handler, ecore_event_handler_del);
- ecore_x_dnd_abort(xwin);
- if (seat_sel->drag_obj)
- {
- if (elm_widget_is(seat_sel->drag_obj))
- {
- Evas_Object *win = elm_widget_top_get(seat_sel->drag_obj);
- if (win && efl_isa(win, EFL_UI_WIN_CLASS))
- efl_event_callback_del(win, EFL_UI_WIN_EVENT_WIN_ROTATION_CHANGED,
- _x11_win_rotation_changed_cb, seat_sel->drag_win);
- }
- }
- seat_sel->drag_obj = NULL;
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Ecore_Wl2_Window *win;
-
- win = _wl_window_get(drag_obj);
- if (win)
- ecore_wl2_dnd_drag_end(_wl_seat_get(win, drag_obj, seat));
-#endif
-
- ELM_SAFE_FREE(seat_sel->drag_win, evas_object_del);
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_drag_action_set(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *drag_obj, Efl_Ui_Selection_Action action,
- unsigned int seat)
-{
- Sel_Manager_Seat_Selection *seat_sel = _sel_manager_seat_selection_init(pd, seat);
- if (seat_sel->drag_action == action) return;
- seat_sel->drag_action = action;
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Atom actx;
- Ecore_X_Window xwin = _x11_xwin_get(drag_obj);
- if (xwin)
- {
- actx = _x11_dnd_action_rev_map(action);
- ecore_x_dnd_source_action_set(actx);
- }
-#endif
-}
-
-//drop side
-EOLIAN static Eina_Bool
-_efl_ui_selection_manager_drop_target_add(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *target_obj, Efl_Ui_Selection_Format format,
- unsigned int seat)
-{
- Eina_Bool ret = EINA_FALSE;
-#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin = _x11_xwin_get(target_obj);
- if (xwin)
- ret = _x11_sel_manager_drop_target_add(pd, target_obj, format, xwin, seat);
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Ecore_Wl2_Window *win = _wl_window_get(target_obj);
- if (win)
- ret = _wl_sel_manager_drop_target_add(pd, target_obj, format, seat);
-#endif
- return ret;
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_drop_target_del(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *target_obj, Efl_Ui_Selection_Format format,
- unsigned int seat)
-{
- Sel_Manager_Dropable *dropable = NULL;
- Sel_Manager_Seat_Selection *seat_sel;
- Eina_Bool remove_handler = EINA_FALSE;
-
- dropable = efl_key_data_get(target_obj, "__elm_dropable");
- if (dropable)
- {
- Eina_Inlist *itr;
- Drop_Format *df;
- EINA_INLIST_FOREACH_SAFE(dropable->format_list, itr, df)
- {
- if (df->format == format)
- {
- dropable->format_list = eina_inlist_remove(dropable->format_list,
- EINA_INLIST_GET(df));
- free(df);
- }
- }
- if (!dropable->format_list)
- {
- pd->drop_list = eina_list_remove(pd->drop_list, dropable);
- efl_key_data_set(target_obj, "__elm_dropable", NULL);
- free(dropable);
- evas_object_event_callback_del(target_obj, EVAS_CALLBACK_DEL,
- _all_drop_targets_cbs_del);
- }
- }
-
-#ifdef HAVE_ELEMENTARY_X
- if (pd->drop_list)
- {
- Eina_List *l;
- Ecore_X_Window xwin;
- Eina_Bool have_drop_list = EINA_FALSE;
-
- xwin = _x11_xwin_get(target_obj);
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- if (xwin == _x11_xwin_get(dropable->obj))
- {
- have_drop_list = EINA_TRUE;
- break;
- }
- }
- if (!have_drop_list)
- {
- ecore_x_dnd_aware_set(xwin, EINA_FALSE);
- remove_handler = EINA_TRUE;
- }
- }
- else remove_handler = EINA_TRUE;
-#endif
- if (remove_handler)
- {
- seat_sel = _sel_manager_seat_selection_init(pd, seat);
- ELM_SAFE_FREE(seat_sel->pos_handler, ecore_event_handler_del);
- ELM_SAFE_FREE(seat_sel->drop_handler, ecore_event_handler_del);
- ELM_SAFE_FREE(seat_sel->enter_handler, ecore_event_handler_del);
- ELM_SAFE_FREE(seat_sel->leave_handler, ecore_event_handler_del);
- }
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_container_drop_item_add(Eo *obj, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *cont, Efl_Ui_Selection_Format format,
- void *item_func_data, Efl_Dnd_Item_Get item_func,
- Eina_Free_Cb item_func_free_cb EINA_UNUSED,
- unsigned int seat)
-{
- Item_Container_Drop_Info *di;
- Sel_Manager_Dropable *dropable = NULL;
-
- if (_drop_item_container_del(pd, cont, EINA_FALSE))
- {
- di = eina_list_search_unsorted(pd->drop_cont_list, _drop_item_container_cmp, obj);
- if (!di) return;
- }
- else
- {
- di = calloc(1, sizeof(Item_Container_Drop_Info));
- if (!di) return;
-
- di->obj = obj;
- pd->drop_cont_list = eina_list_append(pd->drop_cont_list, di);
- }
- di->item_func = item_func;
- di->item_func_data = item_func_data;
-
- dropable = efl_key_data_get(cont, "__elm_dropable");
- if (!dropable)
- {
- dropable = calloc(1, sizeof(Sel_Manager_Dropable));
- if (!dropable) return;
- dropable->last.in = EINA_FALSE;
- pd->drop_list = eina_list_append(pd->drop_list, dropable);
- if (!pd->drop_list) return;
- dropable->obj = cont;
- efl_key_data_set(cont, "__elm_dropable", dropable);
- }
- dropable->is_container = EINA_TRUE;
- dropable->item_func = item_func;
- dropable->item_func_data = item_func_data;
- _efl_ui_selection_manager_drop_target_add(obj, pd, cont, format, seat);
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_container_drop_item_del(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *cont, unsigned int seat EINA_UNUSED)
-{
- _drop_item_container_del(pd, cont, EINA_TRUE);
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_container_drag_item_add(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *cont, double time_to_drag, double anim_duration,
- void *data_func_data, Efl_Dnd_Drag_Data_Get data_func, Eina_Free_Cb data_func_free_cb,
- void *item_get_func_data, Efl_Dnd_Item_Get item_get_func, Eina_Free_Cb item_get_func_free_cb,
- void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb,
- void *icon_list_func_data, Efl_Dnd_Drag_Icon_List_Create icon_list_func, Eina_Free_Cb icon_list_func_free_cb,
- unsigned int seat)
-{
- //TODO: remove previous drag one
- Sel_Manager_Drag_Container *dc = calloc(1, sizeof(Sel_Manager_Drag_Container));
- if (!dc)
- {
- ERR("Failed to allocate memory");
- return;
- }
- dc->cont = cont;
- dc->time_to_drag = time_to_drag;
- dc->anim_duration = anim_duration;
- dc->drag_data_func_data = data_func_data;
- dc->drag_data_func = data_func;
- dc->drag_data_func_free_cb = data_func_free_cb;
- dc->item_get_func_data = item_get_func_data;
- dc->item_get_func = item_get_func;
- dc->item_get_func_free_cb = item_get_func_free_cb;
- dc->icon_func_data = icon_func_data;
- dc->icon_func = icon_func;
- dc->icon_func_free_cb = icon_func_free_cb;
- dc->icon_list_func_data = icon_list_func_data;
- dc->icon_list_func = icon_list_func;
- dc->icon_list_func_free_cb = icon_list_func_free_cb;
- dc->seat = seat;
- dc->pd = pd;
-
- _sel_manager_seat_selection_init(pd, seat);
-
- pd->drag_cont_list = eina_list_append(pd->drag_cont_list, dc);
-
- evas_object_event_callback_add(cont, EVAS_CALLBACK_MOUSE_DOWN,
- _cont_obj_mouse_down_cb, dc);
-}
-
-EOLIAN static void
-_efl_ui_selection_manager_container_drag_item_del(Eo *obj EINA_UNUSED, Efl_Ui_Selection_Manager_Data *pd,
- Efl_Object *cont, unsigned int seat EINA_UNUSED)
-{
- Sel_Manager_Drag_Container *dc = eina_list_search_unsorted(pd->drag_cont_list,
- _drag_item_container_cmp, cont);
- if (dc)
- _item_container_del_internal(dc, EINA_TRUE);
-}
-
-static Eo *
-_efl_ui_selection_manager_efl_object_constructor(Eo *obj, Efl_Ui_Selection_Manager_Data *pd)
-{
-#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_WL2)
- const char *ev = getenv("ELM_DISPLAY");
-#endif
-
-#ifdef HAVE_ELEMENTARY_X
- Eina_Bool init_x = EINA_FALSE;
- Eina_Bool have_display = !!getenv("DISPLAY");
-
- if (ev) /* If ELM_DISPLAY is specified */
- {
- if (!strcmp(ev, "x11")) /* and it is X11 */
- {
- if (!have_display) /* if there is no $DISPLAY */
- {
- ERR("$ELM_DISPLAY is set to x11 but $DISPLAY is not set");
- init_x = EINA_FALSE;
- }
- else /* if there is */
- init_x = EINA_TRUE;
- }
- else /* not X11 */
- init_x = EINA_FALSE;
- }
- else /* ELM_DISPLAY not specified */
- {
- if (have_display) /* If there is a $DISPLAY */
- init_x = EINA_TRUE;
- else /* No $DISPLAY */
- init_x = EINA_FALSE;
- }
- if (init_x)
- {
- if (!ecore_x_init(NULL))
- {
- ERR("Could not initialize Ecore_X");
- return NULL;
- }
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Eina_Bool init_wl = EINA_FALSE;
- Eina_Bool have_wl_display = !!getenv("WAYLAND_DISPLAY");
-
- if (ev) /* If ELM_DISPLAY is specified */
- {
- if (!strcmp(ev, "wl")) /* and it is WL */
- {
- /* always try to connect to wl when it is enforced */
- init_wl = EINA_TRUE;
- }
- else /* not wl */
- init_wl = EINA_FALSE;
- }
- else /* ELM_DISPLAY not specified */
- {
- /* If there is a $WAYLAND_DISPLAY */
- if ((have_wl_display) && (!getenv("DISPLAY")))
- init_wl = EINA_TRUE;
- else /* No $WAYLAND_DISPLAY */
- init_wl = EINA_FALSE;
- }
- if (init_wl)
- {
- if (!ecore_wl2_init())
- {
- ERR("Could not initialize Ecore_Wl2");
- return NULL;
- }
- _elm_wl_display = ecore_wl2_display_connect(NULL);
- if (!_elm_wl_display)
- {
- ERR("Could not connect to Wayland Display");
- ecore_wl2_shutdown();
- return NULL;
- }
- }
-#endif
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
- pd->sel_man = obj;
- pd->atom_list = calloc(1, SELECTION_N_ATOMS * sizeof(Sel_Manager_Atom));
- if (!pd->atom_list)
- {
- ERR("failed to allocate atom_list");
- return NULL;
- }
- pd->atom_list[SELECTION_ATOM_TARGETS].name = "TARGETS";
- pd->atom_list[SELECTION_ATOM_TARGETS].format = EFL_UI_SELECTION_FORMAT_TARGETS;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_TARGETS].x_converter = _x11_targets_converter;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_TARGETS].wl_converter = _wl_targets_converter;
-#endif
- pd->atom_list[SELECTION_ATOM_ATOM].name = "ATOM"; // for opera browser
- pd->atom_list[SELECTION_ATOM_ATOM].format = EFL_UI_SELECTION_FORMAT_TARGETS;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_ATOM].x_converter = _x11_targets_converter;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_ATOM].wl_converter = _wl_targets_converter;
-#endif
-
- pd->atom_list[SELECTION_ATOM_ELM].name = "application/x-elementary-markup";
- pd->atom_list[SELECTION_ATOM_ELM].format = EFL_UI_SELECTION_FORMAT_MARKUP;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_ELM].x_converter = _x11_general_converter;
- pd->atom_list[SELECTION_ATOM_ELM].x_data_preparer = _x11_data_preparer_markup;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_ELM].wl_converter = _wl_general_converter;
- pd->atom_list[SELECTION_ATOM_ELM].wl_data_preparer = _wl_data_preparer_markup;
-#endif
-
- pd->atom_list[SELECTION_ATOM_TEXT_URILIST].name = "text/uri-list";
- pd->atom_list[SELECTION_ATOM_TEXT_URILIST].format = EFL_UI_SELECTION_FORMAT_TEXT;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_TEXT_URILIST].x_converter = _x11_general_converter;
- pd->atom_list[SELECTION_ATOM_TEXT_URILIST].x_data_preparer = _x11_data_preparer_uri;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_TEXT_URILIST].wl_converter = _wl_general_converter;
- pd->atom_list[SELECTION_ATOM_TEXT_URILIST].wl_data_preparer = _wl_data_preparer_uri;
-#endif
-
- pd->atom_list[SELECTION_ATOM_TEXT_X_VCARD].name = "text/x-vcard";
- pd->atom_list[SELECTION_ATOM_TEXT_X_VCARD].format = EFL_UI_SELECTION_FORMAT_VCARD;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_TEXT_X_VCARD].x_converter = _x11_vcard_send;
- pd->atom_list[SELECTION_ATOM_TEXT_X_VCARD].x_data_preparer = _x11_data_preparer_vcard;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_TEXT_X_VCARD].wl_data_preparer = _wl_data_preparer_vcard;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_PNG].name = "image/png";
- pd->atom_list[SELECTION_ATOM_IMAGE_PNG].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_PNG].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_PNG].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_PNG].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_JPEG].name = "image/jpeg";
- pd->atom_list[SELECTION_ATOM_IMAGE_JPEG].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_JPEG].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_JPEG].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_JPEG].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_BMP].name = "image/x-ms-bmp";
- pd->atom_list[SELECTION_ATOM_IMAGE_BMP].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_BMP].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_BMP].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_BMP].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_GIF].name = "image/gif";
- pd->atom_list[SELECTION_ATOM_IMAGE_GIF].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_GIF].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_GIF].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_GIF].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_TIFF].name = "image/tiff";
- pd->atom_list[SELECTION_ATOM_IMAGE_TIFF].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_TIFF].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_TIFF].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_TIFF].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_SVG].name = "image/svg+xml";
- pd->atom_list[SELECTION_ATOM_IMAGE_SVG].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_SVG].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_SVG].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_SVG].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_XPM].name = "image/x-xpixmap";
- pd->atom_list[SELECTION_ATOM_IMAGE_XPM].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_XPM].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_XPM].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_XPM].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_TGA].name = "image/x-tga";
- pd->atom_list[SELECTION_ATOM_IMAGE_TGA].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_TGA].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_TGA].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_TGA].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_IMAGE_PPM].name = "image/x-portable-pixmap";
- pd->atom_list[SELECTION_ATOM_IMAGE_PPM].format = EFL_UI_SELECTION_FORMAT_IMAGE;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_IMAGE_PPM].x_converter = _x11_image_converter;
- pd->atom_list[SELECTION_ATOM_IMAGE_PPM].x_data_preparer = _x11_data_preparer_image;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_IMAGE_PPM].wl_data_preparer = _wl_data_preparer_image;
-#endif
-
- pd->atom_list[SELECTION_ATOM_UTF8STRING].name = "UTF8_STRING";
- pd->atom_list[SELECTION_ATOM_UTF8STRING].format = EFL_UI_SELECTION_FORMAT_TEXT | EFL_UI_SELECTION_FORMAT_MARKUP | EFL_UI_SELECTION_FORMAT_HTML;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_UTF8STRING].x_converter = _x11_text_converter;
- pd->atom_list[SELECTION_ATOM_UTF8STRING].x_data_preparer = _x11_data_preparer_text;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_UTF8STRING].wl_converter = _wl_text_converter;
- pd->atom_list[SELECTION_ATOM_UTF8STRING].wl_data_preparer = _wl_data_preparer_text,
-#endif
-
- pd->atom_list[SELECTION_ATOM_STRING].name = "STRING";
- pd->atom_list[SELECTION_ATOM_STRING].format = EFL_UI_SELECTION_FORMAT_TEXT | EFL_UI_SELECTION_FORMAT_MARKUP | EFL_UI_SELECTION_FORMAT_HTML;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_STRING].x_converter = _x11_text_converter;
- pd->atom_list[SELECTION_ATOM_STRING].x_data_preparer = _x11_data_preparer_text;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_STRING].wl_converter = _wl_text_converter;
- pd->atom_list[SELECTION_ATOM_STRING].wl_data_preparer = _wl_data_preparer_text;
-#endif
-
- pd->atom_list[SELECTION_ATOM_COMPOUND_TEXT].name = "COMPOUND_TEXT";
- pd->atom_list[SELECTION_ATOM_COMPOUND_TEXT].format = EFL_UI_SELECTION_FORMAT_TEXT | EFL_UI_SELECTION_FORMAT_MARKUP | EFL_UI_SELECTION_FORMAT_HTML;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_COMPOUND_TEXT].x_converter = _x11_text_converter;
- pd->atom_list[SELECTION_ATOM_COMPOUND_TEXT].x_data_preparer = _x11_data_preparer_text;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_COMPOUND_TEXT].wl_converter = _wl_text_converter;
- pd->atom_list[SELECTION_ATOM_COMPOUND_TEXT].wl_data_preparer = _wl_data_preparer_text;
-#endif
-
- pd->atom_list[SELECTION_ATOM_TEXT].name = "TEXT";
- pd->atom_list[SELECTION_ATOM_TEXT].format = EFL_UI_SELECTION_FORMAT_TEXT | EFL_UI_SELECTION_FORMAT_MARKUP | EFL_UI_SELECTION_FORMAT_HTML;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_TEXT].x_converter = _x11_text_converter;
- pd->atom_list[SELECTION_ATOM_TEXT].x_data_preparer = _x11_data_preparer_text;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_TEXT].wl_converter = _wl_text_converter;
- pd->atom_list[SELECTION_ATOM_TEXT].wl_data_preparer = _wl_data_preparer_text;
-#endif
-
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].name = "text/plain;charset=utf-8";
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].format = EFL_UI_SELECTION_FORMAT_TEXT;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].x_converter = _x11_text_converter;
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].x_data_preparer = _x11_data_preparer_text;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].wl_converter = _wl_text_converter;
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].wl_data_preparer = _wl_data_preparer_text;
-#endif
-
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].name = "text/plain";
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].format = EFL_UI_SELECTION_FORMAT_TEXT;
-#ifdef HAVE_ELEMENTARY_X
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].x_converter = _x11_text_converter;
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].x_data_preparer = _x11_data_preparer_text;
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].wl_converter = _wl_text_converter;
- pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].wl_data_preparer = _wl_data_preparer_text;
-#endif
-
-
- int i;
-#ifdef HAVE_ELEMENTARY_X
- if (ecore_x_display_get())
- {
- for (i = 0; i < SELECTION_N_ATOMS; i++)
- {
- pd->atom_list[i].x_atom = ecore_x_atom_get(pd->atom_list[i].name);
- ecore_x_selection_converter_atom_add
- (pd->atom_list[i].x_atom, pd->atom_list[i].x_converter);
- }
- pd->notify_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY,
- _efl_sel_manager_x11_selection_notify, pd);
- pd->clear_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR,
- _x11_selection_clear, pd);
- if (ECORE_X_EVENT_FIXES_SELECTION_NOTIFY) // If XFIXES is not available ECORE_X_EVENT_FIXES_SELECTION_NOTIFY would be NULL
- pd->fix_handler = ecore_event_handler_add(ECORE_X_EVENT_FIXES_SELECTION_NOTIFY,
- _x11_fixes_selection_notify, pd);
- }
-#endif
-
- pd->type_hash = eina_hash_string_small_new(NULL);
- for (i = 0; i < SELECTION_N_ATOMS; i++)
- {
- eina_hash_add(pd->type_hash, pd->atom_list[i].name, &pd->atom_list[i]);
- }
- pd->text_uri = eina_stringshare_add("text/uri-list");
-
-#ifdef HAVE_ELEMENTARY_WL2
- if (_elm_wl_display)
- {
- pd->send_handler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_SEND,
- _wl_selection_send, pd);
- pd->changed_handler = ecore_event_handler_add(ECORE_WL2_EVENT_SEAT_SELECTION,
- _wl_selection_changed, pd);
- pd->end_handler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_END,
- _wl_dnd_end, pd);
- }
-#endif
- managers = eina_list_append(managers, obj);
- return obj;
-}
-
-static void
-_efl_ui_selection_manager_efl_object_destructor(Eo *obj, Efl_Ui_Selection_Manager_Data *pd)
-{
- Sel_Manager_Seat_Selection *seat_sel;
- Eina_List *l;
- Sel_Manager_Dropable *dropable;
-
- managers = eina_list_remove(managers, obj);
- EINA_LIST_FOREACH(pd->drop_list, l, dropable)
- {
- _drop_target_cbs_del(pd, dropable, dropable->obj);
- }
-#ifdef HAVE_ELEMENTARY_X
- ecore_event_handler_del(pd->notify_handler);
- ecore_event_handler_del(pd->clear_handler);
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- ecore_event_handler_del(pd->send_handler);
- ecore_event_handler_del(pd->changed_handler);
- ecore_event_handler_del(pd->end_handler);
-#endif
- free(pd->atom_list);
- EINA_LIST_FREE(pd->seat_list, seat_sel)
- {
- ecore_event_handler_del(seat_sel->pos_handler);
- ecore_event_handler_del(seat_sel->drop_handler);
- ecore_event_handler_del(seat_sel->enter_handler);
- ecore_event_handler_del(seat_sel->leave_handler);
-#ifdef HAVE_ELEMENTARY_X
- free(seat_sel->sel_list);
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- free(seat_sel->sel);
-#endif
-#ifdef HAVE_ELEMENTARY_COCOA
- free(seat_sel->sel);
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- free(seat_sel->sel_list);
-#endif
- free(seat_sel->saved_types->types);
- free(seat_sel->saved_types->imgfile);
- free(seat_sel->saved_types);
- }
- eina_hash_free(pd->type_hash);
- eina_stringshare_del(pd->text_uri);
-
- efl_destructor(efl_super(obj, MY_CLASS));
-#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_WL2) || defined(HAVE_ELEMENTARY_WIN32)
- const char *ev = getenv("ELM_DISPLAY");
-#endif
-
-#ifdef HAVE_ELEMENTARY_X
- Eina_Bool init_x = EINA_FALSE;
- Eina_Bool have_display = !!getenv("DISPLAY");
-
- if (ev) /* If ELM_DISPLAY is specified */
- {
- if (!strcmp(ev, "x11")) /* and it is X11 */
- {
- if (!have_display) /* if there is no $DISPLAY */
- {
- ERR("$ELM_DISPLAY is set to x11 but $DISPLAY is not set");
- init_x = EINA_FALSE;
- }
- else /* if there is */
- init_x = EINA_TRUE;
- }
- else /* not X11 */
- init_x = EINA_FALSE;
- }
- else /* ELM_DISPLAY not specified */
- {
- if (have_display) /* If there is a $DISPLAY */
- init_x = EINA_TRUE;
- else /* No $DISPLAY */
- init_x = EINA_FALSE;
- }
- if (init_x)
- {
- if (ecore_x_display_get())
- ecore_x_shutdown();
- }
-#endif
-#ifdef HAVE_ELEMENTARY_WL2
- Eina_Bool init_wl = EINA_FALSE;
- Eina_Bool have_wl_display = !!getenv("WAYLAND_DISPLAY");
-
- if (ev) /* If ELM_DISPLAY is specified */
- {
- if (!strcmp(ev, "wl")) /* and it is WL */
- {
- /* always try to connect to wl when it is enforced */
- init_wl = EINA_TRUE;
- }
- else /* not wl */
- init_wl = EINA_FALSE;
- }
- else /* ELM_DISPLAY not specified */
- {
- /* If there is a $WAYLAND_DISPLAY */
- if ((have_wl_display) && (!getenv("DISPLAY")))
- init_wl = EINA_TRUE;
- else /* No $WAYLAND_DISPLAY */
- init_wl = EINA_FALSE;
- }
- if (init_wl)
- {
- if (!managers) ecore_wl2_display_disconnect(_elm_wl_display);
- ecore_wl2_shutdown();
- }
-#endif
-}
-
-#ifdef HAVE_ELEMENTARY_X
-static void
-_set_selection_list(Sel_Manager_Selection *sel_list, Sel_Manager_Seat_Selection *seat_sel)
-{
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].debug = "Primary";
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].ecore_sel = ECORE_X_SELECTION_PRIMARY;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].set = ecore_x_selection_primary_set;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].clear = ecore_x_selection_primary_clear;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].request = ecore_x_selection_primary_request;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].seat_sel = seat_sel;
-
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].debug = "Secondary";
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].ecore_sel = ECORE_X_SELECTION_SECONDARY;
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].set = ecore_x_selection_secondary_set;
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].clear = ecore_x_selection_secondary_clear;
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].request = ecore_x_selection_secondary_request;
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].seat_sel = seat_sel;
-
- sel_list[EFL_UI_SELECTION_TYPE_DND].debug = "DnD";
- sel_list[EFL_UI_SELECTION_TYPE_DND].ecore_sel = ECORE_X_SELECTION_PRIMARY;
- sel_list[EFL_UI_SELECTION_TYPE_DND].request = ecore_x_selection_xdnd_request;
- sel_list[EFL_UI_SELECTION_TYPE_DND].seat_sel = seat_sel;
-
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].debug = "Clipboard";
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].ecore_sel = ECORE_X_SELECTION_CLIPBOARD;
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].set = ecore_x_selection_clipboard_set;
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].clear = ecore_x_selection_clipboard_clear;
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].request = ecore_x_selection_clipboard_request;
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].seat_sel = seat_sel;
-}
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
-static void
-_set_selection_list(Sel_Manager_Selection *sel_list, Sel_Manager_Seat_Selection *seat_sel)
-{
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].debug = "Primary";
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].ecore_sel = ECORE_WIN32_SELECTION_PRIMARY;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].set = ecore_win32_clipboard_set;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].clear = ecore_win32_clipboard_clear;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].get = ecore_win32_clipboard_get;
- sel_list[EFL_UI_SELECTION_TYPE_PRIMARY].seat_sel = seat_sel;
-
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].debug = "Secondary";
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].ecore_sel = ECORE_WIN32_SELECTION_OTHER;
- sel_list[EFL_UI_SELECTION_TYPE_SECONDARY].seat_sel = seat_sel;
-
- sel_list[EFL_UI_SELECTION_TYPE_DND].debug = "DnD";
- sel_list[EFL_UI_SELECTION_TYPE_DND].ecore_sel = ECORE_WIN32_SELECTION_OTHER;
- sel_list[EFL_UI_SELECTION_TYPE_DND].seat_sel = seat_sel;
-
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].debug = "Clipboard";
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].ecore_sel = ECORE_WIN32_SELECTION_CLIPBOARD;
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].set = ecore_win32_clipboard_set;
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].clear = ecore_win32_clipboard_clear;
- sel_list[EFL_UI_SELECTION_TYPE_CLIPBOARD].seat_sel = seat_sel;
-}
-#endif
-
-#include "efl_ui_selection_manager.eo.c"
diff --git a/src/lib/elementary/efl_ui_selection_manager.eo b/src/lib/elementary/efl_ui_selection_manager.eo
deleted file mode 100644
index e7df9cce77..0000000000
--- a/src/lib/elementary/efl_ui_selection_manager.eo
+++ /dev/null
@@ -1,139 +0,0 @@
-import efl_ui_dnd_types;
-
-class @beta Efl.Ui.Selection_Manager extends Efl.Object {
- methods {
- selection_set @beta {
- [[Set selection]]
- params {
- @in owner: Efl.Object; [[Seleciton owner]]
- @in type: Efl.Ui.Selection_Type; [[Selection type]]
- @in format: Efl.Ui.Selection_Format; [[Selection format]]
- @in data: Eina.Slice; [[Selection data]]
- @in seat: uint @optional;[[Specified seat for multiple seats case.]]
- }
- return: future<void>; [[Future for tracking when the selection is lost]]
- }
- selection_get @beta {
- [[Get selection]]
- params {
- @in request: const(Efl.Object); [[Seleciton owner]]
- @in type: Efl.Ui.Selection_Type; [[Selection type]]
- @in format: Efl.Ui.Selection_Format; [[Selection Format]]
- @in data_func: Efl.Ui.Selection_Data_Ready; [[Data ready function pointer]]
- @in seat: uint @optional;[[Specified seat for multiple seats case.]]
- }
- }
- selection_clear @beta {
- params {
- @in owner: Efl.Object; [[Seleciton owner]]
- @in type: Efl.Ui.Selection_Type; [[Selection type]]
- @in seat: uint @optional; [[Specified seat for multiple seats case.]]
- }
- }
- selection_has_owner @beta {
- [[Check if the request object has selection or not]]
- params {
- @in request: Efl.Object; [[Request object]]
- @in type: Efl.Ui.Selection_Type; [[Selection type]]
- @in seat: uint @optional; [[Specified seat for multiple seats case.]]
- }
- return: bool; [[EINA_TRUE if the request object has selection, otherwise, EINA_FALSE]]
- }
- drag_start @beta {
- [[This starts a drag and drop process at the drag side.
- During dragging, there are three events emitted as belows:
- - EFL_UI_DND_EVENT_DRAG_POS
- - EFL_UI_DND_EVENT_DRAG_ACCEPT
- - EFL_UI_DND_EVENT_DRAG_DONE
- ]]
- params {
- @in drag_obj: Efl.Object; [[Drag object]]
- @in format: Efl.Ui.Selection_Format; [[Data format]]
- @in data: Eina.Slice; [[Data to transfer]]
- @in action: Efl.Ui.Selection_Action; [[Action when data is transferred]]
- @in icon_func: Efl.Dnd.Drag_Icon_Create; [[Function pointer to create icon]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- drag_action_set @beta {
- [[This sets the action for the drag]]
- params {
- @in drag_obj: Efl.Object; [[Drag object]]
- @in action: Efl.Ui.Selection_Action; [[Drag action]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- drag_cancel @beta {
- [[This cancels the on-going drag]]
- params {
- @in drag_obj: Efl.Object; [[Drag object]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- container_drag_item_add @beta {
- [[This registers a drag for items in a container. Many items can be
- dragged at a time. During dragging, there are three events emitted:
- - EFL_UI_DND_EVENT_DRAG_POS
- - EFL_UI_DND_EVENT_DRAG_ACCEPT
- - EFL_UI_DND_EVENT_DRAG_DONE.]]
- params {
- @in cont: Efl.Object; [[Container object]]
- @in time_to_drag: double; [[Time since mouse down happens to drag starts]]
- @in anim_duration: double; [[animation duration]]
- @in data_func: Efl.Dnd.Drag_Data_Get; [[Data and its format]]
- @in item_func: Efl.Dnd.Item_Get; [[Item to determine drag start]]
- @in icon_func: Efl.Dnd.Drag_Icon_Create; [[Icon used during drag]]
- @in icon_list_func: Efl.Dnd.Drag_Icon_List_Create; [[Icons used for animations]]
- @in seat: uint; [[Specified seat for multiple seats case]]
- }
- }
- container_drag_item_del @beta {
- [[Remove drag function of items in the container object.]]
- params {
- @in cont: Efl.Object; [[Container object]]
- @in seat: uint; [[Specified seat for multiple seats case]]
- }
- }
- drop_target_add @beta {
- [[Add a dropable target. There are four events emitted:
- - EFL_UI_DND_DROP_DRAG_ENTER
- - EFL_UI_DND_DROP_DRAG_LEAVE
- - EFL_UI_DND_DROP_DRAG_POS
- - EFL_UI_DND_DROP_DRAG_DROP.]]
- params {
- @in target_obj: Efl.Object; [[Drop target]]
- @in format: Efl.Ui.Selection_Format; [[Accepted data format]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- return: bool; [[$true on success, $false otherwise]]
- }
- drop_target_del @beta {
- [[Remove a dropable target]]
- params {
- @in target_obj: Efl.Object; [[Drop target]]
- @in format: Efl.Ui.Selection_Format; [[Accepted data format]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- container_drop_item_add @beta {
- [[Add dropable target for a container in which items can drop to it]]
- params {
- @in cont: Efl.Object; [[Container object]]
- @in format: Efl.Ui.Selection_Format; [[Accepted data formats]]
- @in item_func: Efl.Dnd.Item_Get; [[Get item at specific position]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- container_drop_item_del @beta {
- [[Remove dropable target for the container]]
- params {
- @in cont: Efl.Object; [[Container object]]
- @in seat: uint; [[Specified seat for multiple seats case.]]
- }
- }
- }
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
-}
diff --git a/src/lib/elementary/efl_ui_selection_types.eot b/src/lib/elementary/efl_ui_selection_types.eot
deleted file mode 100644
index cbe5e0dc7b..0000000000
--- a/src/lib/elementary/efl_ui_selection_types.eot
+++ /dev/null
@@ -1,60 +0,0 @@
-enum @beta Efl.Ui.Selection_Type
-{
- [[Selection type]]
- primary, [[Primary text selection (highlighted or selected text)]]
- secondary, [[Used when primary selection is in use]]
- dnd, [[Drag and Drop]]
- clipboard [[Clipboard selection (ctrl+C)]]
-}
-
-enum @beta Efl.Ui.Selection_Format
-{
- [[Selection format]]
- targets = -1, [[For matching every possible atom]]
- none = 0x0, [[Content is from outside of EFL]]
- text = 0x01, [[Plain unformatted text: Used for things that don't want rich markup]]
- markup = 0x2, [[Edje textblock markup, including inline images]]
- image = 0x4, [[Images]]
- vcard = 0x08, [[Vcards]]
- html = 0x10 [[Raw HTML-like data (eg. webkit)]]
-}
-
-enum @beta Efl.Ui.Selection_Action
-{
- [[Defines the kind of action associated with the drop data]]
- unknown, [[Action type is unknown]]
- copy, [[Copy the data]]
- move, [[Move the data]]
- private, [[Private action type]]
- ask, [[Ask the user what to do]]
- list, [[List the data]]
- link, [[Link the data]]
- description [[Describe the data]]
-}
-
-struct @beta Efl.Ui.Selection_Data
-{
- [[Structure holding the info about selected data]]
- pos: Eina.Position2D; [[Coordinates of the drop (DND operations only)]]
- format: Efl.Ui.Selection_Format; [[Format of the selection]]
- content: Eina.Slice; [[Selection data]]
- action: Efl.Ui.Selection_Action; [[Action to perform with the data]]
- item: Efl.Object; [[Item under the drag position. It is only available for container]]
-}
-
-function @beta Efl.Ui.Selection_Data_Ready {
- [[Function pointer for getting selection]]
- params {
- @in obj: Efl.Object; [[Object which requested for the selection]]
- @in seldata: ptr(Efl.Ui.Selection_Data); [[Selection data]]
- }
-};
-
-struct @beta Efl.Ui.Selection_Changed
-{
- [[Selection-changed specific information.]] // TODO: This needs to be filled in.
- type: Efl.Ui.Selection_Type; [[Selection type]]
- seat: int; [[The seat on which the selection changed, or NULL for "default"]]
- display: void_ptr; [[The display connection object, NULL under X11]]
- exist: bool; [[EINA_TRUE if the selection has an owner]]
-}
diff --git a/src/lib/elementary/efl_ui_separator.c b/src/lib/elementary/efl_ui_separator.c
new file mode 100644
index 0000000000..887cfb3c40
--- /dev/null
+++ b/src/lib/elementary/efl_ui_separator.c
@@ -0,0 +1,46 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Efl_Ui.h>
+#include "elm_priv.h"
+
+typedef struct {
+ Efl_Ui_Layout_Orientation dir;
+} Efl_Ui_Separator_Data;
+
+#define MY_CLASS EFL_UI_SEPARATOR_CLASS
+
+
+EOLIAN static Efl_Object*
+_efl_ui_separator_efl_object_constructor(Eo *obj, Efl_Ui_Separator_Data *pd EINA_UNUSED)
+{
+ if (!elm_widget_theme_klass_get(obj))
+ elm_widget_theme_klass_set(obj, "separator");
+ return efl_constructor(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_ui_separator_efl_ui_layout_orientable_orientation_set(Eo *obj EINA_UNUSED, Efl_Ui_Separator_Data *pd, Efl_Ui_Layout_Orientation dir)
+{
+ pd->dir = dir;
+}
+
+EOLIAN static Efl_Ui_Layout_Orientation
+_efl_ui_separator_efl_ui_layout_orientable_orientation_get(const Eo *ob EINA_UNUSED, Efl_Ui_Separator_Data *pd)
+{
+ return pd->dir;
+}
+
+EOLIAN static Eina_Error
+_efl_ui_separator_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Separator_Data *pd)
+{
+ if (efl_ui_layout_orientation_is_horizontal(pd->dir, EINA_TRUE))
+ elm_widget_theme_element_set(obj, "horizontal");
+ else
+ elm_widget_theme_element_set(obj, "vertical");
+ return efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS));
+}
+
+
+#include "efl_ui_separator.eo.c"
diff --git a/src/lib/elementary/efl_ui_separator.eo b/src/lib/elementary/efl_ui_separator.eo
new file mode 100644
index 0000000000..9dd0ef4491
--- /dev/null
+++ b/src/lib/elementary/efl_ui_separator.eo
@@ -0,0 +1,20 @@
+class Efl.Ui.Separator extends Efl.Ui.Item implements Efl.Ui.Layout_Orientable
+{
+ [[Vertical or horizontal separator line.
+
+ Use it to separate groups of buttons in a toolbar, for example, or items on a list.
+ The length of the line adapts to the size of the container, and its width is
+ controlled by the theme.
+
+ @since 1.24
+ ]]
+
+ implements {
+ Efl.Object.constructor;
+ Efl.Ui.Widget.theme_apply;
+ Efl.Ui.Layout_Orientable.orientation { get; set; }
+ }
+ constructors {
+ Efl.Ui.Layout_Orientable.orientation;
+ }
+}
diff --git a/src/lib/elementary/efl_ui_single_selectable.eo b/src/lib/elementary/efl_ui_single_selectable.eo
index 1044082cc6..6e65c0a0ac 100644
--- a/src/lib/elementary/efl_ui_single_selectable.eo
+++ b/src/lib/elementary/efl_ui_single_selectable.eo
@@ -30,6 +30,12 @@ interface Efl.Ui.Single_Selectable {
fallback : Efl.Ui.Selectable;
}
}
+ @property allow_manual_deselection {
+ [[This controlls if a selected item can be deselected due to clicking]]
+ values {
+ allow_manual_deselection : bool; [[$true if clicking while selected results in a state change to unselected]]
+ }
+ }
}
events {
selection_changed : void; [[Emitted when there is a change in the selection state. This event will collect all
diff --git a/src/lib/elementary/efl_ui_slider.c b/src/lib/elementary/efl_ui_slider.c
index 920dcfada2..041316de68 100644
--- a/src/lib/elementary/efl_ui_slider.c
+++ b/src/lib/elementary/efl_ui_slider.c
@@ -4,7 +4,6 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
-#define EFL_ACCESS_VALUE_PROTECTED
#define ELM_LAYOUT_PROTECTED
#include <Elementary.h>
@@ -37,7 +36,7 @@ _delay_change(void *data)
efl_event_callback_call(data, EFL_UI_RANGE_EVENT_STEADY, NULL);
if (_elm_config->atspi_mode)
- efl_access_value_changed_signal_emit(data);
+ efl_access_object_event_emit(data, EFL_UI_RANGE_EVENT_CHANGED, NULL);
return ECORE_CALLBACK_CANCEL;
}
@@ -68,15 +67,15 @@ _emit_events(Eo *obj, Efl_Ui_Slider_Data *sd)
{
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
- if (sd->val == sd->val_min)
+ if (EINA_DBL_EQ(sd->val, sd->val_min))
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MIN_REACHED, NULL);
- if (sd->val == sd->val_max)
+ if (EINA_DBL_EQ(sd->val, sd->val_max))
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MAX_REACHED, NULL);
// emit accessibility event also if value was changed by API
if (_elm_config->atspi_mode)
- efl_access_value_changed_signal_emit(obj);
+ efl_access_object_event_emit(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
}
static void
@@ -134,7 +133,7 @@ _drag_value_fetch(Evas_Object *obj)
static void
_adjust_to_step(Efl_Ui_Slider *obj, Efl_Ui_Slider_Data *pd)
{
- if (pd->step)
+ if (EINA_DBL_NONZERO(pd->step))
{
double relative_step = pd->step/(pd->val_max - pd->val_min);
double new_value = (round(pd->val/relative_step))*relative_step;
@@ -778,7 +777,7 @@ _efl_ui_slider_efl_ui_range_interactive_range_step_set(Eo *obj EINA_UNUSED, Efl_
return;
}
- if (sd->step == step) return;
+ if (EINA_DBL_EQ(sd->step, step)) return;
sd->step = step;
}
@@ -795,45 +794,6 @@ _efl_ui_slider_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Slider_Data *
// A11Y Accessibility
-EOLIAN static void
-_efl_ui_slider_efl_access_value_value_and_text_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, double *value, const char **text)
-{
- if (value) *value = sd->val;
- if (text) *text = NULL;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_slider_efl_access_value_value_and_text_set(Eo *obj, Efl_Ui_Slider_Data *sd, double value, const char *text EINA_UNUSED)
-{
- if (value < sd->val_min) value = sd->val_min;
- if (value > sd->val_max) value = sd->val_max;
-
- efl_event_callback_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_START, NULL);
-
- if (fabs(value - sd->val) > DBL_EPSILON)
- {
- _user_value_update(obj, value);
- }
-
- efl_event_callback_call(obj, EFL_UI_SLIDER_EVENT_SLIDER_DRAG_STOP, NULL);
-
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_efl_ui_slider_efl_access_value_range_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, double *lower, double *upper, const char **descr)
-{
- if (lower) *lower = sd->val_min;
- if (upper) *upper = sd->val_max;
- if (descr) *descr = NULL;
-}
-
-EOLIAN static double
-_efl_ui_slider_efl_access_value_increment_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd)
-{
- return sd->step;
-}
-
EOLIAN const Efl_Access_Action_Data *
_efl_ui_slider_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *pd EINA_UNUSED)
{
diff --git a/src/lib/elementary/efl_ui_slider.eo b/src/lib/elementary/efl_ui_slider.eo
index 992a1308fd..7a7d6bd614 100644
--- a/src/lib/elementary/efl_ui_slider.eo
+++ b/src/lib/elementary/efl_ui_slider.eo
@@ -1,5 +1,4 @@
class Efl.Ui.Slider extends Efl.Ui.Layout_Base implements Efl.Ui.Range_Interactive, Efl.Ui.Layout_Orientable,
- Efl.Access.Value,
Efl.Access.Widget.Action
{
[[Elementary slider class
@@ -23,9 +22,6 @@ class Efl.Ui.Slider extends Efl.Ui.Layout_Base implements Efl.Ui.Range_Interacti
Efl.Ui.Range_Display.range_limits {get; set; }
Efl.Ui.Range_Interactive.range_step { get; set; }
Efl.Ui.Layout_Orientable.orientation { get; set; }
- Efl.Access.Value.value_and_text { get; set; }
- Efl.Access.Value.range { get; }
- Efl.Access.Value.increment { get; }
Efl.Access.Widget.Action.elm_actions { get; }
}
events {
diff --git a/src/lib/elementary/efl_ui_slider_interval.c b/src/lib/elementary/efl_ui_slider_interval.c
index e5fe1f5243..1c1070faa9 100644
--- a/src/lib/elementary/efl_ui_slider_interval.c
+++ b/src/lib/elementary/efl_ui_slider_interval.c
@@ -4,7 +4,6 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
-#define EFL_ACCESS_VALUE_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"
@@ -34,7 +33,7 @@ _delay_change(void *data)
efl_event_callback_call(data, EFL_UI_RANGE_EVENT_STEADY, NULL);
if (_elm_config->atspi_mode)
- efl_access_value_changed_signal_emit(data);
+ efl_access_object_event_emit(data, EFL_UI_RANGE_EVENT_CHANGED, NULL);
return ECORE_CALLBACK_CANCEL;
}
@@ -49,9 +48,9 @@ static void
_emit_events(Eo *obj, Efl_Ui_Slider_Interval_Data *sd)
{
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
- if (sd->val == sd->val_min)
+ if (EINA_DBL_EQ(sd->val, sd->val_min))
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MIN_REACHED, NULL);
- if (sd->val == sd->val_max)
+ if (EINA_DBL_EQ(sd->val, sd->val_max))
efl_event_callback_call(obj, EFL_UI_RANGE_EVENT_MAX_REACHED, NULL);
}
@@ -89,7 +88,7 @@ _val_set(Evas_Object *obj)
// emit accessibility event also if value was changed by API
if (_elm_config->atspi_mode)
- efl_access_value_changed_signal_emit(obj);
+ efl_access_object_event_emit(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
evas_object_smart_changed(obj);
}
@@ -851,7 +850,7 @@ _efl_ui_slider_interval_efl_ui_range_interactive_range_step_set(Eo *obj EINA_UNU
return;
}
- if (sd->step == step) return;
+ if (EINA_DBL_EQ(sd->step, step)) return;
sd->step = step;
}
@@ -871,44 +870,6 @@ _efl_ui_slider_interval_efl_ui_layout_orientable_orientation_get(const Eo *obj E
}
// A11Y Accessibility
-EOLIAN static void
-_efl_ui_slider_interval_efl_access_value_value_and_text_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Interval_Data *sd, double *value, const char **text)
-{
- if (value) *value = sd->val;
- if (text) *text = NULL;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_slider_interval_efl_access_value_value_and_text_set(Eo *obj, Efl_Ui_Slider_Interval_Data *sd, double value, const char *text EINA_UNUSED)
-{
- double oldval = sd->val;
-
- if (value < sd->val_min) value = sd->val_min;
- if (value > sd->val_max) value = sd->val_max;
-
- efl_event_callback_call(obj, EFL_UI_SLIDER_INTERVAL_EVENT_SLIDER_DRAG_START, NULL);
- sd->val = value;
- _val_set(obj);
- sd->val = oldval;
- _slider_update(obj, EINA_TRUE);
- efl_event_callback_call(obj, EFL_UI_SLIDER_INTERVAL_EVENT_SLIDER_DRAG_STOP, NULL);
-
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_efl_ui_slider_interval_efl_access_value_range_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Interval_Data *sd, double *lower, double *upper, const char **descr)
-{
- if (lower) *lower = sd->val_min;
- if (upper) *upper = sd->val_max;
- if (descr) *descr = NULL;
-}
-
-EOLIAN static double
-_efl_ui_slider_interval_efl_access_value_increment_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Interval_Data *sd)
-{
- return sd->step;
-}
EOLIAN const Efl_Access_Action_Data *
_efl_ui_slider_interval_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSED, Efl_Ui_Slider_Interval_Data *pd EINA_UNUSED)
diff --git a/src/lib/elementary/efl_ui_slider_interval.eo b/src/lib/elementary/efl_ui_slider_interval.eo
index d62726f2ee..4eab8cea5f 100644
--- a/src/lib/elementary/efl_ui_slider_interval.eo
+++ b/src/lib/elementary/efl_ui_slider_interval.eo
@@ -1,5 +1,5 @@
class @beta Efl.Ui.Slider_Interval extends Efl.Ui.Layout_Base implements Efl.Ui.Range_Interactive,
- Efl.Ui.Layout_Orientable, Efl.Access.Value, Efl.Access.Widget.Action
+ Efl.Ui.Layout_Orientable, Efl.Access.Widget.Action
{
[[An interval slider.
@@ -29,9 +29,6 @@ class @beta Efl.Ui.Slider_Interval extends Efl.Ui.Layout_Base implements Efl.Ui.
Efl.Ui.Range_Display.range_limits {get; set; }
Efl.Ui.Range_Interactive.range_step { get; set; }
Efl.Ui.Layout_Orientable.orientation { get; set; }
- Efl.Access.Value.value_and_text { get; set; }
- Efl.Access.Value.range { get; }
- Efl.Access.Value.increment { get; }
Efl.Access.Widget.Action.elm_actions { get; }
}
events {
diff --git a/src/lib/elementary/efl_ui_spin.c b/src/lib/elementary/efl_ui_spin.c
index 0cf72890b0..cbd1c95d66 100644
--- a/src/lib/elementary/efl_ui_spin.c
+++ b/src/lib/elementary/efl_ui_spin.c
@@ -3,7 +3,6 @@
#endif
#define EFL_ACCESS_OBJECT_PROTECTED
-#define EFL_ACCESS_VALUE_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_UI_FORMAT_PROTECTED
diff --git a/src/lib/elementary/efl_ui_spin.eo b/src/lib/elementary/efl_ui_spin.eo
index cb5c2cc898..2dac6ec69a 100644
--- a/src/lib/elementary/efl_ui_spin.eo
+++ b/src/lib/elementary/efl_ui_spin.eo
@@ -1,5 +1,5 @@
class Efl.Ui.Spin extends Efl.Ui.Layout_Base implements Efl.Ui.Range_Display,
-Efl.Ui.Format, Efl.Access.Value, Efl.Access.Widget.Action
+Efl.Ui.Format, Efl.Access.Widget.Action
{
[[A Spin.
diff --git a/src/lib/elementary/efl_ui_spin_button.c b/src/lib/elementary/efl_ui_spin_button.c
index 9be21373a1..b44a93f30b 100644
--- a/src/lib/elementary/efl_ui_spin_button.c
+++ b/src/lib/elementary/efl_ui_spin_button.c
@@ -3,7 +3,6 @@
#endif
#define EFL_ACCESS_OBJECT_PROTECTED
-#define EFL_ACCESS_VALUE_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_UI_FOCUS_COMPOSITION_PROTECTED
#define EFL_UI_FORMAT_PROTECTED
@@ -24,7 +23,7 @@
//when a item is pressed but not released, this time passes by
//until another step is added or removed from the current value.
//given in seconds
-#define REPEAT_INTERVAL 0.85
+#define REPEAT_INTERVAL 0.2
static const char PART_NAME_ENTRY[] = "entry";
static const char PART_NAME_DEC_BUTTON[] = "dec_button";
@@ -405,10 +404,11 @@ static void
_spin_value(Efl_Ui_Spin *obj, Eina_Bool inc)
{
Efl_Ui_Spin_Button_Data *pd = efl_data_scope_get(obj, EFL_UI_SPIN_BUTTON_CLASS);
+ double val = efl_ui_range_value_get(obj);
+ double step = inc ? pd->step : -pd->step;
- int absolut_value = efl_ui_range_value_get(obj) + (inc ? pd->step : -pd->step);
-
- _value_set(obj, absolut_value);
+ /* clamp to step before setting new value */
+ _value_set(obj, round((val + step) / step) * step);
}
static void
@@ -757,44 +757,6 @@ _efl_ui_spin_button_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_
// A11Y Accessibility
-EOLIAN static void
-_efl_ui_spin_button_efl_access_value_value_and_text_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spin_Button_Data *sd EINA_UNUSED, double *value, const char **text)
-{
- Efl_Ui_Spin_Data *pd = efl_data_scope_get(obj, EFL_UI_SPIN_CLASS);
-
- if (value) *value = pd->val;
- if (text) *text = NULL;
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_spin_button_efl_access_value_value_and_text_set(Eo *obj, Efl_Ui_Spin_Button_Data *sd EINA_UNUSED, double value, const char *text EINA_UNUSED)
-{
- Efl_Ui_Spin_Data *pd = efl_data_scope_get(obj, EFL_UI_SPIN_CLASS);
-
- if (pd->val_min > value) return EINA_FALSE;
- if (pd->val_max < value) return EINA_FALSE;
-
- efl_ui_range_value_set(obj, value);
-
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_efl_ui_spin_button_efl_access_value_range_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spin_Button_Data *sd EINA_UNUSED, double *lower, double *upper, const char **descr)
-{
- Efl_Ui_Spin_Data *pd = efl_data_scope_get(obj, EFL_UI_SPIN_CLASS);
-
- if (lower) *lower = pd->val_min;
- if (upper) *upper = pd->val_max;
- if (descr) *descr = NULL;
-}
-
-EOLIAN static double
-_efl_ui_spin_button_efl_access_value_increment_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spin_Button_Data *pd)
-{
- return pd->step;
-}
-
EOLIAN static const char*
_efl_ui_spin_button_efl_access_object_i18n_name_get(const Eo *obj, Efl_Ui_Spin_Button_Data *sd EINA_UNUSED)
{
diff --git a/src/lib/elementary/efl_ui_spin_button.eo b/src/lib/elementary/efl_ui_spin_button.eo
index f5e4a11c9c..5f41f48391 100644
--- a/src/lib/elementary/efl_ui_spin_button.eo
+++ b/src/lib/elementary/efl_ui_spin_button.eo
@@ -71,9 +71,6 @@ class Efl.Ui.Spin_Button extends Efl.Ui.Spin
Efl.Ui.Range_Display.range_value { set; }
Efl.Ui.Layout_Orientable.orientation { get; set; }
Efl.Access.Object.i18n_name { get; }
- Efl.Access.Value.value_and_text { get; set; }
- Efl.Access.Value.range { get; }
- Efl.Access.Value.increment { get; }
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Ui.Format.apply_formatted_value;
Efl.Ui.Range_Interactive.range_step { get; set; }
diff --git a/src/lib/elementary/efl_ui_spotlight_manager_stack.c b/src/lib/elementary/efl_ui_spotlight_animation_manager.c
index d7d6d94c62..cdf9846684 100644
--- a/src/lib/elementary/efl_ui_spotlight_manager_stack.c
+++ b/src/lib/elementary/efl_ui_spotlight_animation_manager.c
@@ -8,23 +8,25 @@
typedef struct {
Efl_Ui_Spotlight_Container * container;
- Efl_Canvas_Animation_Player *alpha_anim;
+ Efl_Canvas_Animation *jump_anim[2], *push_anim[2], *pop_anim[2];
Efl_Gfx_Entity *content[2];
+ Efl_Gfx_Entity *clipper;
int ids[2]; //only used when in animation
Eina_Size2D page_size;
Eina_Bool animation;
-} Efl_Ui_Spotlight_Manager_Stack_Data;
+} Efl_Ui_Spotlight_Animation_Manager_Data;
-#define MY_CLASS EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS
+#define MY_CLASS EFL_UI_SPOTLIGHT_ANIMATION_MANAGER_CLASS
static void
-_geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd)
+_geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd)
{
Eina_Rect group_pos = efl_gfx_entity_geometry_get(pd->container);
Eina_Rect goal = EINA_RECT_EMPTY();
goal.size = pd->page_size;
goal.y = (group_pos.y + group_pos.h/2)-pd->page_size.h/2;
goal.x = (group_pos.x + group_pos.w/2)-pd->page_size.w/2;
+ efl_gfx_entity_geometry_set(pd->clipper, group_pos);
for (int i = 0; i < 2; ++i)
{
if (pd->content[i])
@@ -35,7 +37,7 @@ _geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd)
static void
_running_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
- Efl_Ui_Spotlight_Manager_Stack_Data *pd = efl_data_scope_safe_get(data, MY_CLASS);
+ Efl_Ui_Spotlight_Animation_Manager_Data *pd = efl_data_scope_safe_get(data, MY_CLASS);
double absolut_position;
EINA_SAFETY_ON_NULL_RETURN(pd);
@@ -56,19 +58,21 @@ _hide_object_cb(void *data, const Efl_Event *ev)
}
EOLIAN static void
-_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
+_efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
{
if (spotlight)
{
pd->container = spotlight;
- pd->alpha_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, obj);
- efl_animation_alpha_set(pd->alpha_anim, 0.0, 1.0);
- efl_animation_duration_set(pd->alpha_anim, 0.5);
- efl_animation_final_state_keep_set(pd->alpha_anim, EINA_TRUE);
+ pd->clipper = efl_add(EFL_CANVAS_RECTANGLE_CLASS,
+ evas_object_evas_get(pd->container));
+ evas_object_static_clip_set(pd->clipper, EINA_TRUE);
+ efl_canvas_group_member_add(spotlight, pd->clipper);
for (int i = 0; i < efl_content_count(spotlight) ; ++i) {
Efl_Gfx_Entity *elem = efl_pack_content_get(spotlight, i);
+ efl_key_data_set(elem, "_elm_leaveme", spotlight);
+ efl_canvas_object_clipper_set(elem, pd->clipper);
efl_canvas_group_member_add(pd->container, elem);
efl_gfx_entity_visible_set(elem, EINA_FALSE);
}
@@ -82,7 +86,7 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp
}
static void
-_update_ids(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd, int avoid_index)
+_update_ids(Eo *obj, Efl_Ui_Spotlight_Animation_Manager_Data *pd, int avoid_index)
{
for (int i = 0; i < 2; ++i)
{
@@ -94,16 +98,20 @@ _update_ids(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd, int avoid_index)
}
EOLIAN static void
-_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_content_add(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
+_efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_content_add(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
{
+ efl_key_data_set(subobj, "_elm_leaveme", pd->container);
+ efl_canvas_object_clipper_set(subobj, pd->clipper);
efl_canvas_group_member_add(pd->container, subobj);
efl_gfx_entity_visible_set(subobj, EINA_FALSE);
_update_ids(obj, pd, -1);
}
EOLIAN static void
-_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_content_del(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd, Efl_Gfx_Entity *subobj, int index)
+_efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_content_del(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Gfx_Entity *subobj, int index)
{
+ efl_key_data_set(subobj, "_elm_leaveme", NULL);
+ efl_canvas_object_clipper_set(subobj, NULL);
efl_canvas_group_member_remove(pd->container, subobj);
for (int i = 0; i < 2; ++i)
{
@@ -123,27 +131,41 @@ is_valid(Eo *obj, int index)
}
EOLIAN static void
-_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd, int from, int to)
+_efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_Ui_Spotlight_Animation_Manager_Data *pd,
+ int from, int to,
+ Efl_Ui_Spotlight_Manager_Switch_Reason reason EINA_UNUSED)
{
+
if (efl_pack_content_get(pd->container, to) == pd->content[1])
return;
+
if (is_valid(pd->container, to) && is_valid(pd->container, from))
{
int tmp[2] = {from, to};
for (int i = 0; i < 2; ++i)
{
+ Efl_Canvas_Animation *animation = NULL;
pd->ids[i] = tmp[i];
pd->content[i] = efl_pack_content_get(pd->container, pd->ids[i]);
+ //when pushing, animate the *pushed in* content with the push animation
+ if (reason == EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_PUSH)
+ animation = pd->push_anim[i];
+ //when popping, animate the *popped in* content with the pop animation
+ else if (reason == EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_POP)
+ animation = pd->pop_anim[i];
+ if (!animation)
+ animation = pd->jump_anim[i];
if (pd->animation)
- efl_canvas_object_animation_start(pd->content[i], pd->alpha_anim, -1.0+2.0*i, 0.0);
+ efl_canvas_object_animation_start(pd->content[i], animation, -1.0+2.0*i, 0.0);
efl_gfx_entity_visible_set(pd->content[i], EINA_TRUE);
}
if (pd->animation)
{
efl_event_callback_add(pd->content[0], EFL_CANVAS_OBJECT_ANIMATION_EVENT_ANIMATION_CHANGED, _hide_object_cb, obj);
efl_event_callback_add(pd->content[0], EFL_CANVAS_OBJECT_ANIMATION_EVENT_ANIMATION_PROGRESS_UPDATED, _running_cb, obj);
+ efl_gfx_stack_above(pd->content[1], pd->content[0]); //Stack the "to content" above the "from content"
}
}
else
@@ -162,17 +184,19 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_
}
EOLIAN static void
-_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_size_set(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd, Eina_Size2D size)
+_efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_size_set(Eo *obj, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Eina_Size2D size)
{
pd->page_size = size;
_geom_sync(obj, pd);
}
EOLIAN static void
-_efl_ui_spotlight_manager_stack_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd EINA_UNUSED)
+_efl_ui_spotlight_animation_manager_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Animation_Manager_Data *pd)
{
efl_invalidate(efl_super(obj, MY_CLASS));
+ efl_del(pd->clipper);
+
for (int i = 0; i < efl_content_count(pd->container); ++i)
{
Efl_Gfx_Stack *elem = efl_pack_content_get(pd->container, i);
@@ -180,11 +204,13 @@ _efl_ui_spotlight_manager_stack_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_
{
efl_gfx_mapping_color_set(elem, d, 255, 255, 255, 255);
}
+
+ efl_canvas_object_clipper_set(elem, NULL);
}
}
EOLIAN static void
-_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_animated_transition_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd, Eina_Bool animation)
+_efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_animated_transition_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Eina_Bool animation)
{
for (int i = 0; i < 2; ++i)
{
@@ -195,10 +221,48 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_animated_transition_set
}
EOLIAN static Eina_Bool
-_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_animated_transition_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd)
+_efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_animated_transition_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd)
{
return pd->animation;
}
+EOLIAN static void
+_efl_ui_spotlight_animation_manager_push_setup_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *in, Efl_Canvas_Animation *out)
+{
+ EINA_SAFETY_ON_NULL_RETURN(out);
+ EINA_SAFETY_ON_NULL_RETURN(in);
+
+ efl_replace(&pd->push_anim[0], out);
+ efl_replace(&pd->push_anim[1], in);
+}
+
+EOLIAN static void
+_efl_ui_spotlight_animation_manager_pop_setup_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *in, Efl_Canvas_Animation *out)
+{
+ EINA_SAFETY_ON_NULL_RETURN(out);
+ EINA_SAFETY_ON_NULL_RETURN(in);
+
+ efl_replace(&pd->pop_anim[0], out);
+ efl_replace(&pd->pop_anim[1], in);
+}
+
+EOLIAN static void
+_efl_ui_spotlight_animation_manager_jump_setup_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *in, Efl_Canvas_Animation *out)
+{
+ EINA_SAFETY_ON_NULL_RETURN(out);
+ EINA_SAFETY_ON_NULL_RETURN(in);
+
+ efl_replace(&pd->jump_anim[0], out);
+ efl_replace(&pd->jump_anim[1], in);
+}
+
+EOLIAN static Efl_Object*
+_efl_ui_spotlight_animation_manager_efl_object_finalize(Eo *obj, Efl_Ui_Spotlight_Animation_Manager_Data *pd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->jump_anim[0], NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->jump_anim[1], NULL);
+
+ return efl_finalize(efl_super(obj, MY_CLASS));
+}
-#include "efl_ui_spotlight_manager_stack.eo.c"
+#include "efl_ui_spotlight_animation_manager.eo.c"
diff --git a/src/lib/elementary/efl_ui_spotlight_animation_manager.eo b/src/lib/elementary/efl_ui_spotlight_animation_manager.eo
new file mode 100644
index 0000000000..014141b28d
--- /dev/null
+++ b/src/lib/elementary/efl_ui_spotlight_animation_manager.eo
@@ -0,0 +1,75 @@
+class @beta Efl.Ui.Spotlight.Animation_Manager extends Efl.Ui.Spotlight.Manager
+{
+ [[A spotlight manager that uses animation objects to react to different @Efl.Ui.Spotlight.Manager.switch_to
+ situations.
+
+ Animations are played forward when they are on the $to argument and they are played backward when they are on the
+ $from argument.
+
+ Pop animations are always played backwards, Push animations are always played forward.
+ The reason for this is reusability: you can use the same animation in all situations and this covers the
+ inverted effect that "moving in" and "moving out" has.
+ For example, when you have an alpha channel animation, the Pop animation can be the same as the Jump-In and Out
+ animation, and both will look like fading out.
+ ]]
+ c_prefix: efl_ui_spotlight_manager_animation;
+ methods {
+ @property push_setup {
+ [[Animation that is used to animate the $to argument of a @Efl.Ui.Spotlight.Manager.switch_to request when
+ the passed $reason is @Efl.Ui.Spotlight.Manager_Switch_Reason.push.
+
+ If these animations are $null, then the $in and $out animation of @.jump_setup will be used instead.
+ ]]
+ values {
+ in : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference]]
+ out : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference.
+ Can be the same as $in.]]
+ }
+ set {}
+ }
+
+ @property pop_setup {
+ [[Animation that is used to animate the $from argument of a @Efl.Ui.Spotlight.Manager.switch_to request when
+ the passed $reason is @Efl.Ui.Spotlight.Manager_Switch_Reason.pop.
+
+ Note: These animations are always played backwards, see the class documentation for the reasoning.
+
+ If these animations are $null, then the $in and $out animation of @.jump_setup will be used instead.
+ ]]
+ values {
+ in : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference]]
+ out : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference.
+ Can be the same as $in.]]
+ }
+ set {}
+ }
+
+ @property jump_setup {
+ [[Sets the animation objects you want to play on a jump in or jump out.
+
+ When a @Efl.Ui.Spotlight.Manager.switch_to request is issued, two arguments are getting animated.
+ The $from object, and the $to object. The $from object will play the $out animation whereas the $to object
+ will play the $in animation.
+
+ The $out animation will always be played backwards. See the class documentation for the reasoning.
+ ]]
+ values {
+ in : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference]]
+ out : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference.
+ Can be the same as $in.]]
+ }
+ set {
+ }
+ }
+ }
+ implements {
+ Efl.Ui.Spotlight.Manager.bind;
+ Efl.Ui.Spotlight.Manager.content_add;
+ Efl.Ui.Spotlight.Manager.content_del;
+ Efl.Ui.Spotlight.Manager.switch_to;
+ Efl.Ui.Spotlight.Manager.size {set;}
+ Efl.Ui.Spotlight.Manager.animated_transition {set; get;}
+ Efl.Object.finalize;
+ Efl.Object.invalidate;
+ }
+}
diff --git a/src/lib/elementary/efl_ui_spotlight_container.c b/src/lib/elementary/efl_ui_spotlight_container.c
index a5f3c9e390..131f228562 100644
--- a/src/lib/elementary/efl_ui_spotlight_container.c
+++ b/src/lib/elementary/efl_ui_spotlight_container.c
@@ -4,7 +4,7 @@
#include <Efl_Ui.h>
#include "elm_priv.h"
-#include "efl_ui_spotlight_manager_plain.eo.h"
+#include "efl_ui_spotlight_plain_manager.eo.h"
typedef struct _Efl_Ui_Spotlight_Container_Data
{
@@ -144,7 +144,7 @@ _transition_event_emission(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data
pd->show_request.to = -1;
_transition_end(obj, pd);
}
- if (pd->position == pd->show_request.to)
+ if (EINA_DBL_EQ(pd->position, pd->show_request.to))
{
//successfully there
_transition_end(obj, pd);
@@ -236,7 +236,7 @@ _efl_ui_spotlight_container_efl_object_finalize(Eo *obj, Efl_Ui_Spotlight_Contai
//set a view manager in case nothing is here
if (!manager)
{
- efl_ui_spotlight_manager_set(obj, efl_new(EFL_UI_SPOTLIGHT_MANAGER_PLAIN_CLASS));
+ efl_ui_spotlight_manager_set(obj, efl_new(EFL_UI_SPOTLIGHT_PLAIN_MANAGER_CLASS));
}
else
{
@@ -437,10 +437,8 @@ _efl_ui_spotlight_container_efl_pack_linear_pack_index_get(Eo *obj EINA_UNUSED,
return eina_list_data_idx(pd->content_list, (void *)subobj);
}
-EOLIAN static void
-_efl_ui_spotlight_container_active_element_set(Eo *obj EINA_UNUSED,
- Efl_Ui_Spotlight_Container_Data *pd,
- Efl_Ui_Widget *new_page)
+static void
+_active_element_set(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd, Efl_Ui_Widget *new_page, Efl_Ui_Spotlight_Manager_Switch_Reason reason)
{
int before = -1;
int index;
@@ -463,7 +461,16 @@ _efl_ui_spotlight_container_active_element_set(Eo *obj EINA_UNUSED,
}
pd->curr.page = new_page;
- efl_ui_spotlight_manager_switch_to(pd->transition, before, index);
+ efl_ui_spotlight_manager_switch_to(pd->transition, before, index, reason);
+
+}
+
+EOLIAN static void
+_efl_ui_spotlight_container_active_element_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Spotlight_Container_Data *pd,
+ Efl_Ui_Widget *new_page)
+{
+ _active_element_set(obj, pd, new_page, EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_JUMP);
}
EOLIAN static Efl_Ui_Widget*
@@ -648,7 +655,7 @@ EOLIAN static void
_efl_ui_spotlight_container_spotlight_manager_set(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd, Efl_Ui_Spotlight_Manager *transition)
{
if (!transition)
- pd->transition = efl_add(EFL_UI_SPOTLIGHT_MANAGER_PLAIN_CLASS, obj);
+ pd->transition = efl_add(EFL_UI_SPOTLIGHT_PLAIN_MANAGER_CLASS, obj);
else
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(transition, EFL_UI_SPOTLIGHT_MANAGER_CLASS));
@@ -670,7 +677,7 @@ _efl_ui_spotlight_container_spotlight_manager_set(Eo *obj, Efl_Ui_Spotlight_Cont
_animated_transition_manager_eval(obj, pd);
efl_ui_spotlight_manager_animated_transition_set(pd->transition, efl_finalized_get(obj));
efl_ui_spotlight_manager_bind(pd->transition, obj);
- efl_ui_spotlight_manager_size_set(pd->transition, pd->page_spec.sz);
+ _emit_page_size(obj, pd);
efl_event_callback_add(pd->transition, EFL_UI_SPOTLIGHT_MANAGER_EVENT_POS_UPDATE, _pos_updated, obj);
}
@@ -679,7 +686,7 @@ _efl_ui_spotlight_container_spotlight_manager_set(Eo *obj, Efl_Ui_Spotlight_Cont
EOLIAN static Efl_Ui_Spotlight_Manager*
_efl_ui_spotlight_container_spotlight_manager_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd)
{
- if (efl_isa(pd->transition, EFL_UI_SPOTLIGHT_MANAGER_PLAIN_CLASS))
+ if (efl_isa(pd->transition, EFL_UI_SPOTLIGHT_PLAIN_MANAGER_CLASS))
return NULL;
else
return pd->transition;
@@ -700,7 +707,7 @@ _efl_ui_spotlight_container_indicator_set(Eo *obj, Efl_Ui_Spotlight_Container_Da
//the api indicates that the caller passes ownership to this function, so we need to unref here
efl_unref(pd->indicator);
efl_ui_spotlight_indicator_bind(pd->indicator, obj);
- if (pd->position != -1)
+ if (!EINA_DBL_EQ(pd->position, -1))
efl_ui_spotlight_indicator_position_update(pd->indicator, pd->position);
}
}
@@ -724,8 +731,7 @@ _efl_ui_spotlight_container_push(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd EI
if (!efl_pack_end(obj, view))
return;
}
-
- efl_ui_spotlight_active_element_set(obj, view);
+ _active_element_set(obj, pd, view, EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_PUSH);
}
static Eina_Value
@@ -780,7 +786,7 @@ _efl_ui_spotlight_container_pop(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd, Ei
if (del)
transition_done = eina_future_then(transition_done, _delete_obj, NULL);
- efl_ui_spotlight_active_element_set(obj, efl_pack_content_get(obj, new_index));
+ _active_element_set(obj, pd, efl_pack_content_get(obj, new_index), EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_POP);
return transition_done;
}
diff --git a/src/lib/elementary/efl_ui_spotlight_container.eo b/src/lib/elementary/efl_ui_spotlight_container.eo
index 857f2655e1..fc05047e9d 100644
--- a/src/lib/elementary/efl_ui_spotlight_container.eo
+++ b/src/lib/elementary/efl_ui_spotlight_container.eo
@@ -4,7 +4,7 @@ struct @beta Efl.Ui.Spotlight.Transition_Event {
to : int; [[The index to where the transition is headed, -1 if not known.]]
}
-class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Widget implements Efl.Pack_Linear
+class Efl.Ui.Spotlight.Container extends Efl.Ui.Widget implements Efl.Pack_Linear
{
[[The Spotlight widget is a container for other sub-widgets, where only one sub-widget is active at any given time.
@@ -25,10 +25,12 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Widget implements Efl.Pack
This class can be used to create other widgets like Pagers, Tabbed pagers or Stacks, where each sub-widget
represents a "page" full of other widgets. All these cases can be implemented with a different
@.spotlight_manager and use the same @Efl.Ui.Spotlight.Container.
+
+ @since 1.24
]]
c_prefix: efl_ui_spotlight;
methods {
- @property spotlight_manager {
+ @property spotlight_manager @beta {
[[This object defines how sub-widgets are rendered and animated.
If it is not set, only the active sub-widget is shown and transitions are instantaneous (not animated).
]]
@@ -42,7 +44,7 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Widget implements Efl.Pack
spotlight_manager : Efl.Ui.Spotlight.Manager @move; [[The Spotlight Manager object or $NULL.]]
}
}
- @property indicator {
+ @property indicator @beta {
[[An indicator object to use, which will display the current state of the spotlight (number of sub-widgets
and active one).
When this object is set, it is immediately updated to reflect the current state of the widget.
@@ -124,8 +126,8 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Widget implements Efl.Pack
}
}
events {
- transition,start : Efl.Ui.Spotlight.Transition_Event; [[A transition animation has started.]]
- transition,end : Efl.Ui.Spotlight.Transition_Event; [[A transition animation has ended.]]
+ transition,start @beta : Efl.Ui.Spotlight.Transition_Event; [[A transition animation has started.]]
+ transition,end @beta : Efl.Ui.Spotlight.Transition_Event; [[A transition animation has ended.]]
}
implements {
Efl.Object.constructor;
diff --git a/src/lib/elementary/efl_ui_spotlight_fade_manager.c b/src/lib/elementary/efl_ui_spotlight_fade_manager.c
new file mode 100644
index 0000000000..cb2fa5f0a4
--- /dev/null
+++ b/src/lib/elementary/efl_ui_spotlight_fade_manager.c
@@ -0,0 +1,30 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Efl_Ui.h>
+#include "elm_priv.h"
+
+typedef struct {
+
+} Efl_Ui_Spotlight_Fade_Manager_Data;
+
+EOLIAN static Efl_Object*
+_efl_ui_spotlight_fade_manager_efl_object_constructor(Eo *obj, Efl_Ui_Spotlight_Fade_Manager_Data *pd EINA_UNUSED)
+{
+ Efl_Canvas_Animation *animation;
+
+ obj = efl_constructor(efl_super(obj, EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS));
+
+ animation = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, obj);
+ efl_animation_alpha_set(animation, 0.0, 1.0);
+ efl_animation_duration_set(animation, 0.5);
+
+ efl_ui_spotlight_manager_animation_jump_setup_set(obj, animation, animation);
+ efl_unref(animation);
+
+ return obj;
+}
+
+
+#include "efl_ui_spotlight_fade_manager.eo.c"
diff --git a/src/lib/elementary/efl_ui_spotlight_fade_manager.eo b/src/lib/elementary/efl_ui_spotlight_fade_manager.eo
new file mode 100644
index 0000000000..6d0524fe0e
--- /dev/null
+++ b/src/lib/elementary/efl_ui_spotlight_fade_manager.eo
@@ -0,0 +1,7 @@
+class @beta Efl.Ui.Spotlight.Fade_Manager extends Efl.Ui.Spotlight.Animation_Manager
+{
+ c_prefix: efl_ui_spotlight_manager_fade;
+ implements {
+ Efl.Object.constructor;
+ }
+}
diff --git a/src/lib/elementary/efl_ui_spotlight_indicator_icon.c b/src/lib/elementary/efl_ui_spotlight_icon_indicator.c
index 4ac177580d..a4aa12ce25 100644
--- a/src/lib/elementary/efl_ui_spotlight_indicator_icon.c
+++ b/src/lib/elementary/efl_ui_spotlight_icon_indicator.c
@@ -13,7 +13,7 @@ typedef struct {
Efl_Canvas_Layout *layout;
double last_position;
Eina_Size2D min, max;
-} Efl_Ui_Spotlight_Indicator_Icon_Data;
+} Efl_Ui_Spotlight_Icon_Indicator_Data;
static void
_flush_state(Eo *item, double val)
@@ -24,7 +24,7 @@ _flush_state(Eo *item, double val)
}
static void
-_add_item(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Indicator_Icon_Data *pd)
+_add_item(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Icon_Indicator_Data *pd)
{
Efl_Canvas_Layout *item;
@@ -40,7 +40,7 @@ _add_item(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Indicator_Icon_Data *pd)
}
static void
-_flush_position(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Indicator_Icon_Data *pd)
+_flush_position(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Icon_Indicator_Data *pd)
{
int next = -1, closer;
double closer_val;
@@ -91,13 +91,13 @@ EFL_CALLBACKS_ARRAY_DEFINE(spotlight_resized,
)
EOLIAN static void
-_efl_ui_spotlight_indicator_icon_efl_ui_spotlight_indicator_bind(Eo *obj, Efl_Ui_Spotlight_Indicator_Icon_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
+_efl_ui_spotlight_icon_indicator_efl_ui_spotlight_indicator_bind(Eo *obj, Efl_Ui_Spotlight_Icon_Indicator_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
{
if (spotlight)
{
pd->container = spotlight;
- efl_event_callback_array_add(pd->container, spotlight_resized(), pd->layout);
pd->layout = efl_add(EFL_CANVAS_LAYOUT_CLASS, pd->container);
+ efl_event_callback_array_add(pd->container, spotlight_resized(), pd->layout);
if (elm_widget_theme_object_set(pd->container, pd->layout,
"spotlight",
@@ -122,7 +122,7 @@ _efl_ui_spotlight_indicator_icon_efl_ui_spotlight_indicator_bind(Eo *obj, Efl_Ui
}
EOLIAN static void
-_efl_ui_spotlight_indicator_icon_efl_ui_spotlight_indicator_content_add(Eo *obj, Efl_Ui_Spotlight_Indicator_Icon_Data *pd, Efl_Gfx_Entity *subobj EINA_UNUSED, int index EINA_UNUSED)
+_efl_ui_spotlight_icon_indicator_efl_ui_spotlight_indicator_content_add(Eo *obj, Efl_Ui_Spotlight_Icon_Indicator_Data *pd, Efl_Gfx_Entity *subobj EINA_UNUSED, int index EINA_UNUSED)
{
_add_item(obj, pd);
_flush_position(obj, pd);
@@ -130,29 +130,29 @@ _efl_ui_spotlight_indicator_icon_efl_ui_spotlight_indicator_content_add(Eo *obj,
}
EOLIAN static void
-_efl_ui_spotlight_indicator_icon_efl_ui_spotlight_indicator_content_del(Eo *obj, Efl_Ui_Spotlight_Indicator_Icon_Data *pd, Efl_Gfx_Entity *subobj EINA_UNUSED, int index EINA_UNUSED)
+_efl_ui_spotlight_icon_indicator_efl_ui_spotlight_indicator_content_del(Eo *obj, Efl_Ui_Spotlight_Icon_Indicator_Data *pd, Efl_Gfx_Entity *subobj EINA_UNUSED, int index EINA_UNUSED)
{
efl_del(efl_pack_content_get(pd->indicator, 0));
_flush_position(obj, pd);
}
EOLIAN static void
-_efl_ui_spotlight_indicator_icon_efl_ui_spotlight_indicator_position_update(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Indicator_Icon_Data *pd, double position)
+_efl_ui_spotlight_icon_indicator_efl_ui_spotlight_indicator_position_update(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Icon_Indicator_Data *pd, double position)
{
pd->last_position = position;
_flush_position(obj, pd);
}
EOLIAN static void
-_efl_ui_spotlight_indicator_icon_efl_object_destructor(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Indicator_Icon_Data *pd)
+_efl_ui_spotlight_icon_indicator_efl_object_destructor(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Icon_Indicator_Data *pd)
{
if (pd->layout)
efl_del(pd->layout);
if (pd->indicator)
efl_del(pd->indicator);
- efl_destructor(efl_super(obj, EFL_UI_SPOTLIGHT_INDICATOR_ICON_CLASS));
+ efl_destructor(efl_super(obj, EFL_UI_SPOTLIGHT_ICON_INDICATOR_CLASS));
}
-#include "efl_ui_spotlight_indicator_icon.eo.c"
+#include "efl_ui_spotlight_icon_indicator.eo.c"
diff --git a/src/lib/elementary/efl_ui_spotlight_indicator_icon.eo b/src/lib/elementary/efl_ui_spotlight_icon_indicator.eo
index de1d689d74..63ef0554fd 100644
--- a/src/lib/elementary/efl_ui_spotlight_indicator_icon.eo
+++ b/src/lib/elementary/efl_ui_spotlight_icon_indicator.eo
@@ -1,4 +1,5 @@
-class @beta Efl.Ui.Spotlight.Indicator_Icon extends Efl.Ui.Spotlight.Indicator {
+class @beta Efl.Ui.Spotlight.Icon_Indicator extends Efl.Ui.Spotlight.Indicator {
+ c_prefix: efl_ui_spotlight_indicator_icon;
implements {
Efl.Ui.Spotlight.Indicator.bind;
Efl.Ui.Spotlight.Indicator.content_del;
diff --git a/src/lib/elementary/efl_ui_spotlight_manager.eo b/src/lib/elementary/efl_ui_spotlight_manager.eo
index 6de4898a94..00e338443d 100644
--- a/src/lib/elementary/efl_ui_spotlight_manager.eo
+++ b/src/lib/elementary/efl_ui_spotlight_manager.eo
@@ -1,3 +1,10 @@
+enum @beta Efl.Ui.Spotlight.Manager_Switch_Reason {
+ [[Indicator for the reason of a @Efl.Ui.Spotlight.Manager.switch_to call]]
+ jump, [[The Reason for this switch is a casual jump caused by @Efl.Ui.Spotlight.Container.active_element]]
+ push, [[The Reason for this switch is a casual jump caused by @Efl.Ui.Spotlight.Container.push]]
+ pop [[The Reason for this switch is a casual jump caused by @Efl.Ui.Spotlight.Container.pop]]
+}
+
abstract @beta Efl.Ui.Spotlight.Manager extends Efl.Object {
[[Manager object used by @Efl.Ui.Spotlight.Container to handle rendering and animation of its sub-widgets,
and user interaction.
@@ -41,6 +48,7 @@ abstract @beta Efl.Ui.Spotlight.Manager extends Efl.Object {
params {
from : int; [[Index of the starting sub-widget in the container's list. Might be -1 if unknown.]]
to : int; [[Index of the target sub-widget in the container's list.]]
+ reason : Efl.Ui.Spotlight.Manager_Switch_Reason; [[The reason for this switch to call]]
}
}
@property size @pure_virtual {
diff --git a/src/lib/elementary/efl_ui_spotlight_manager_stack.eo b/src/lib/elementary/efl_ui_spotlight_manager_stack.eo
deleted file mode 100644
index 2275eb8ff0..0000000000
--- a/src/lib/elementary/efl_ui_spotlight_manager_stack.eo
+++ /dev/null
@@ -1,12 +0,0 @@
-class @beta Efl.Ui.Spotlight.Manager_Stack extends Efl.Ui.Spotlight.Manager
-{
- implements {
- Efl.Ui.Spotlight.Manager.bind;
- Efl.Ui.Spotlight.Manager.content_add;
- Efl.Ui.Spotlight.Manager.content_del;
- Efl.Ui.Spotlight.Manager.switch_to;
- Efl.Ui.Spotlight.Manager.size {set;}
- Efl.Ui.Spotlight.Manager.animated_transition {set; get;}
- Efl.Object.invalidate;
- }
-}
diff --git a/src/lib/elementary/efl_ui_spotlight_manager_plain.c b/src/lib/elementary/efl_ui_spotlight_plain_manager.c
index d9c52ab3db..e6cc6a065e 100644
--- a/src/lib/elementary/efl_ui_spotlight_manager_plain.c
+++ b/src/lib/elementary/efl_ui_spotlight_plain_manager.c
@@ -4,30 +4,31 @@
#include <Efl_Ui.h>
#include "elm_priv.h"
-#include "efl_ui_spotlight_manager_plain.eo.h"
+#include "efl_ui_spotlight_plain_manager.eo.h"
typedef struct {
Efl_Ui_Spotlight_Container * container;
Eina_Size2D page_size;
Efl_Ui_Widget *current_content;
+ Efl_Gfx_Entity *clipper;
Eina_Bool animation;
double last_pos;
-} Efl_Ui_Spotlight_Manager_Plain_Data;
+} Efl_Ui_Spotlight_Plain_Manager_Data;
-#define MY_CLASS EFL_UI_SPOTLIGHT_MANAGER_PLAIN_CLASS
+#define MY_CLASS EFL_UI_SPOTLIGHT_PLAIN_MANAGER_CLASS
static void
-_emit_position(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
+_emit_position(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Plain_Manager_Data *pd)
{
double absolut_position = efl_pack_index_get(pd->container, pd->current_content);
- if (pd->last_pos != absolut_position)
+ if (!EINA_DBL_EQ(pd->last_pos, absolut_position))
efl_event_callback_call(obj, EFL_UI_SPOTLIGHT_MANAGER_EVENT_POS_UPDATE, &absolut_position);
pd->last_pos = absolut_position;
}
static void
-_geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
+_geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Plain_Manager_Data *pd)
{
Efl_Gfx_Entity *entity = pd->current_content;
Eina_Rect group_pos = efl_gfx_entity_geometry_get(pd->container);
@@ -36,11 +37,12 @@ _geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
goal.size = pd->page_size;
goal.y = (group_pos.y + group_pos.h/2)-pd->page_size.h/2;
goal.x = (group_pos.x + group_pos.w/2)-pd->page_size.w/2;
+ efl_gfx_entity_geometry_set(pd->clipper, goal);
efl_gfx_entity_geometry_set(entity, goal);
}
EOLIAN static void
-_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
+_efl_ui_spotlight_plain_manager_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
{
if (spotlight)
{
@@ -48,8 +50,15 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp
pd->container = spotlight;
+ pd->clipper = efl_add(EFL_CANVAS_RECTANGLE_CLASS,
+ evas_object_evas_get(spotlight));
+ evas_object_static_clip_set(pd->clipper, EINA_TRUE);
+ efl_canvas_group_member_add(spotlight, pd->clipper);
+
for (int i = 0; i < efl_content_count(spotlight) ; ++i) {
Efl_Gfx_Entity *elem = efl_pack_content_get(spotlight, i);
+ efl_key_data_set(elem, "_elm_leaveme", spotlight);
+ efl_canvas_object_clipper_set(elem, pd->clipper);
efl_canvas_group_member_add(pd->container, elem);
efl_gfx_entity_visible_set(elem, EINA_FALSE);
}
@@ -65,7 +74,7 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp
}
static void
-_content_changed(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
+_content_changed(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd)
{
if (efl_ui_spotlight_active_element_get(pd->container) != pd->current_content)
{
@@ -79,23 +88,27 @@ _content_changed(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
}
EOLIAN static void
-_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_content_add(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
+_efl_ui_spotlight_plain_manager_efl_ui_spotlight_manager_content_add(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
{
+ efl_key_data_set(subobj, "_elm_leaveme", pd->container);
+ efl_canvas_object_clipper_set(subobj, pd->clipper);
efl_canvas_group_member_add(pd->container, subobj);
efl_gfx_entity_visible_set(subobj, EINA_FALSE);
_content_changed(obj, pd);
}
EOLIAN static void
-_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_content_del(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
+_efl_ui_spotlight_plain_manager_efl_ui_spotlight_manager_content_del(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
{
+ efl_key_data_set(subobj, "_elm_leaveme", NULL);
+ efl_canvas_object_clipper_set(subobj, NULL);
efl_canvas_group_member_remove(pd->container, subobj);
if (pd->current_content == subobj)
pd->current_content = NULL;
_content_changed(obj, pd);
}
EOLIAN static void
-_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd, int from EINA_UNUSED, int to)
+_efl_ui_spotlight_plain_manager_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd, int from EINA_UNUSED, int to, Efl_Ui_Spotlight_Manager_Switch_Reason reason EINA_UNUSED)
{
Efl_Gfx_Entity *to_obj, *from_obj;
to_obj = efl_pack_content_get(pd->container, to);
@@ -117,14 +130,14 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_
}
EOLIAN static void
-_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_size_set(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd, Eina_Size2D size)
+_efl_ui_spotlight_plain_manager_efl_ui_spotlight_manager_size_set(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd, Eina_Size2D size)
{
pd->page_size = size;
_geom_sync(obj, pd);
}
EOLIAN static void
-_efl_ui_spotlight_manager_plain_efl_object_destructor(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd EINA_UNUSED)
+_efl_ui_spotlight_plain_manager_efl_object_destructor(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd EINA_UNUSED)
{
efl_destructor(efl_super(obj, MY_CLASS));
@@ -136,16 +149,28 @@ _efl_ui_spotlight_manager_plain_efl_object_destructor(Eo *obj, Efl_Ui_Spotlight_
}
EOLIAN static void
-_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_animated_transition_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd, Eina_Bool animation)
+_efl_ui_spotlight_plain_manager_efl_ui_spotlight_manager_animated_transition_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Plain_Manager_Data *pd, Eina_Bool animation)
{
pd->animation = animation;
}
EOLIAN static Eina_Bool
-_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_animated_transition_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
+_efl_ui_spotlight_plain_manager_efl_ui_spotlight_manager_animated_transition_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Plain_Manager_Data *pd)
{
return pd->animation;
}
+EOLIAN static void
+_efl_ui_spotlight_plain_manager_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Plain_Manager_Data *pd)
+{
+ efl_del(pd->clipper);
+
+ for (int i = 0; i < efl_content_count(pd->container); ++i)
+ {
+ efl_canvas_object_clipper_set(efl_pack_content_get(pd->container, i), NULL);
+ }
+
+ efl_invalidate(efl_super(obj, MY_CLASS));
+}
-#include "efl_ui_spotlight_manager_plain.eo.c"
+#include "efl_ui_spotlight_plain_manager.eo.c"
diff --git a/src/lib/elementary/efl_ui_spotlight_manager_plain.eo b/src/lib/elementary/efl_ui_spotlight_plain_manager.eo
index fd4f5d9664..95464305ec 100644
--- a/src/lib/elementary/efl_ui_spotlight_manager_plain.eo
+++ b/src/lib/elementary/efl_ui_spotlight_plain_manager.eo
@@ -1,5 +1,6 @@
-class @beta Efl.Ui.Spotlight.Manager_Plain extends Efl.Ui.Spotlight.Manager
+class @beta Efl.Ui.Spotlight.Plain_Manager extends Efl.Ui.Spotlight.Manager
{
+ c_prefix: efl_ui_spotlight_manager_plain;
implements {
Efl.Ui.Spotlight.Manager.bind;
Efl.Ui.Spotlight.Manager.content_add;
@@ -8,5 +9,6 @@ class @beta Efl.Ui.Spotlight.Manager_Plain extends Efl.Ui.Spotlight.Manager
Efl.Ui.Spotlight.Manager.size {set;}
Efl.Ui.Spotlight.Manager.animated_transition {set; get;}
Efl.Object.destructor;
+ Efl.Object.invalidate;
}
}
diff --git a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c b/src/lib/elementary/efl_ui_spotlight_scroll_manager.c
index 1b5d974176..f6eb1323e6 100644
--- a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c
+++ b/src/lib/elementary/efl_ui_spotlight_scroll_manager.c
@@ -21,12 +21,13 @@ typedef struct {
Eina_Bool active;
int from;
Eina_Position2D mouse_start;
+ double start_time;
} mouse_move;
Eina_Bool animation;
Eina_Bool scroll_block;
-} Efl_Ui_Spotlight_Manager_Scroll_Data;
+} Efl_Ui_Spotlight_Scroll_Manager_Data;
-#define MY_CLASS EFL_UI_SPOTLIGHT_MANAGER_SCROLL_CLASS
+#define MY_CLASS EFL_UI_SPOTLIGHT_SCROLL_MANAGER_CLASS
static void _page_set_animation(void *data, const Efl_Event *event);
@@ -37,7 +38,7 @@ _propagate_progress(Eo *obj, double pos)
}
static void
-_apply_box_properties(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd)
+_apply_box_properties(Eo *obj, Efl_Ui_Spotlight_Scroll_Manager_Data *pd)
{
Eina_Rect geometry = EINA_RECT_EMPTY();
Eina_Rect group_pos = efl_gfx_entity_geometry_get(pd->container);
@@ -84,7 +85,7 @@ _mouse_down_cb(void *data,
{
Efl_Input_Pointer *ev = event->info;
Eo *obj = data;
- Efl_Ui_Spotlight_Manager_Scroll_Data *pd = efl_data_scope_get(obj, MY_CLASS);
+ Efl_Ui_Spotlight_Scroll_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS);
if (efl_input_pointer_button_get(ev) != 1) return;
if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return;
@@ -98,6 +99,7 @@ _mouse_down_cb(void *data,
pd->mouse_move.active = EINA_TRUE;
pd->mouse_move.from = efl_pack_index_get(pd->container, efl_ui_spotlight_active_element_get(pd->container));
pd->mouse_move.mouse_start = efl_input_pointer_position_get(ev);
+ pd->mouse_move.start_time = ecore_time_get();
pd->transition.from = pd->mouse_move.from;
pd->transition.to = pd->transition.from + 1;
@@ -110,7 +112,7 @@ _mouse_move_cb(void *data,
{
Efl_Input_Pointer *ev = event->info;
Eo *obj = data;
- Efl_Ui_Spotlight_Manager_Scroll_Data *pd = efl_data_scope_get(obj, MY_CLASS);
+ Efl_Ui_Spotlight_Scroll_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS);
Eina_Position2D pos;
int pos_y_diff;
@@ -125,12 +127,15 @@ _mouse_move_cb(void *data,
if (!efl_input_processed_get(ev))
efl_input_processed_set(ev, EINA_TRUE);
- pd->transition.active = EINA_TRUE;
- pd->transition.progress = (double)pos_y_diff / (double)pd->page_size.w;
-
- _propagate_progress(data, pd->transition.from + pd->transition.progress);
-
- _apply_box_properties(obj, pd);
+ if (pd->transition.active ||
+ EINA_POSITION2D_DISTANCE(pd->mouse_move.mouse_start, efl_input_pointer_position_get(ev)) > elm_config_finger_size_get() ||
+ ecore_time_get() - pd->mouse_move.start_time > 0.1)
+ {
+ pd->transition.active = EINA_TRUE;
+ pd->transition.progress = (double)pos_y_diff / (double)pd->page_size.w;
+ _propagate_progress(data, pd->transition.from + pd->transition.progress);
+ _apply_box_properties(obj, pd);
+ }
}
static void
@@ -139,7 +144,7 @@ _mouse_up_cb(void *data,
{
Efl_Input_Pointer *ev = event->info;
Eo *obj = data;
- Efl_Ui_Spotlight_Manager_Scroll_Data *pd = efl_data_scope_get(obj, MY_CLASS);
+ Efl_Ui_Spotlight_Scroll_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS);
if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return;
if (!pd->mouse_move.active) return;
@@ -150,6 +155,10 @@ _mouse_up_cb(void *data,
Efl_Ui_Widget *new_content = efl_pack_content_get(pd->container, MIN(MAX(result, 0), efl_content_count(pd->container) - 1));
efl_ui_spotlight_active_element_set(pd->container, new_content);
+
+ //Set input processed not to cause clicked event to content button.
+ if (EINA_POSITION2D_DISTANCE(pd->mouse_move.mouse_start, efl_input_pointer_position_get(ev)) > elm_config_finger_size_get())
+ efl_input_processed_set(ev, EINA_TRUE);
}
EFL_CALLBACKS_ARRAY_DEFINE(mouse_listeners,
@@ -159,7 +168,7 @@ EFL_CALLBACKS_ARRAY_DEFINE(mouse_listeners,
);
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
+_efl_ui_spotlight_scroll_manager_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, Efl_Ui_Spotlight_Container *spotlight)
{
if (spotlight)
{
@@ -185,6 +194,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_S
for (int i = 0; i < efl_content_count(spotlight) ; ++i) {
Efl_Gfx_Entity *elem = efl_pack_content_get(spotlight, i);
+ efl_key_data_set(elem, "_elm_leaveme", spotlight);
efl_canvas_object_clipper_set(elem, pd->backclip);
efl_canvas_group_member_add(pd->container, elem);
efl_gfx_entity_visible_set(elem, EINA_TRUE);
@@ -195,8 +205,9 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_S
}
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_add(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
+_efl_ui_spotlight_scroll_manager_efl_ui_spotlight_manager_content_add(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
{
+ efl_key_data_set(subobj, "_elm_leaveme", pd->container);
efl_gfx_entity_visible_set(subobj, EINA_TRUE);
efl_canvas_object_clipper_set(subobj, pd->backclip);
efl_canvas_group_member_add(pd->container, subobj);
@@ -207,8 +218,9 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_add(Eo *obj EI
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_del(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
+_efl_ui_spotlight_scroll_manager_efl_ui_spotlight_manager_content_del(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
{
+ efl_key_data_set(subobj, "_elm_leaveme", NULL);
efl_canvas_object_clipper_set(subobj, NULL);
efl_canvas_group_member_remove(pd->container, subobj);
@@ -219,7 +231,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_del(Eo *obj EI
static void
_page_set_animation(void *data, const Efl_Event *event EINA_UNUSED)
{
- Efl_Ui_Spotlight_Manager_Scroll_Data *pd = efl_data_scope_get(data, MY_CLASS);
+ Efl_Ui_Spotlight_Scroll_Manager_Data *pd = efl_data_scope_get(data, MY_CLASS);
double p = (ecore_loop_time_get() - pd->transition.start_time) / pd->transition.max_time;
if (p >= 1.0) p = 1.0;
@@ -238,7 +250,7 @@ _page_set_animation(void *data, const Efl_Event *event EINA_UNUSED)
}
static void
-_animation_request_switch(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, int from, int to)
+_animation_request_switch(Eo *obj, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, int from, int to)
{
//if there is already a transition ongoing, which is no mouse transition, but goes to the same position, then do nothing
if (pd->transition.active && !pd->mouse_move.active && pd->transition.to == to)
@@ -273,7 +285,7 @@ _animation_request_switch(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, int
}
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, int from, int to)
+_efl_ui_spotlight_scroll_manager_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, int from, int to, Efl_Ui_Spotlight_Manager_Switch_Reason reason EINA_UNUSED)
{
if (pd->animation)
{
@@ -289,7 +301,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl
}
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_size_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Eina_Size2D size)
+_efl_ui_spotlight_scroll_manager_efl_ui_spotlight_manager_size_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, Eina_Size2D size)
{
pd->page_size = size;
if (!pd->transition.active)
@@ -297,7 +309,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_size_set(Eo *obj EINA_
}
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_animated_transition_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Eina_Bool animation)
+_efl_ui_spotlight_scroll_manager_efl_ui_spotlight_manager_animated_transition_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, Eina_Bool animation)
{
pd->animation = animation;
if (pd->transition.active && !animation)
@@ -309,14 +321,14 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_animated_transition_se
}
EOLIAN static Eina_Bool
-_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_animated_transition_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd)
+_efl_ui_spotlight_scroll_manager_efl_ui_spotlight_manager_animated_transition_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Scroll_Manager_Data *pd)
{
return pd->animation;
}
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd EINA_UNUSED)
+_efl_ui_spotlight_scroll_manager_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Scroll_Manager_Data *pd EINA_UNUSED)
{
efl_del(pd->event);
efl_del(pd->backclip);
@@ -331,7 +343,7 @@ _efl_ui_spotlight_manager_scroll_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight
}
EOLIAN static void
-_efl_ui_spotlight_manager_scroll_scroll_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Eina_Bool scroll_block)
+_efl_ui_spotlight_scroll_manager_scroll_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Scroll_Manager_Data *pd, Eina_Bool scroll_block)
{
if (pd->scroll_block == scroll_block) return;
@@ -346,9 +358,9 @@ _efl_ui_spotlight_manager_scroll_scroll_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Sp
}
EOLIAN static Eina_Bool
-_efl_ui_spotlight_manager_scroll_scroll_block_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd)
+_efl_ui_spotlight_scroll_manager_scroll_block_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Scroll_Manager_Data *pd)
{
return pd->scroll_block;
}
-#include "efl_ui_spotlight_manager_scroll.eo.c"
+#include "efl_ui_spotlight_scroll_manager.eo.c"
diff --git a/src/lib/elementary/efl_ui_spotlight_manager_scroll.eo b/src/lib/elementary/efl_ui_spotlight_scroll_manager.eo
index c9a8e7ad34..b7101035cd 100644
--- a/src/lib/elementary/efl_ui_spotlight_manager_scroll.eo
+++ b/src/lib/elementary/efl_ui_spotlight_scroll_manager.eo
@@ -1,5 +1,6 @@
-class @beta Efl.Ui.Spotlight.Manager_Scroll extends Efl.Ui.Spotlight.Manager
+class @beta Efl.Ui.Spotlight.Scroll_Manager extends Efl.Ui.Spotlight.Manager
{
+ c_prefix: efl_ui_spotlight_manager_scroll;
methods {
@property scroll_block {
[[User scrolling forbidden.
diff --git a/src/lib/elementary/efl_ui_spotlight_util.c b/src/lib/elementary/efl_ui_spotlight_util.c
index c49ebd4d8c..c7c68da4e0 100644
--- a/src/lib/elementary/efl_ui_spotlight_util.c
+++ b/src/lib/elementary/efl_ui_spotlight_util.c
@@ -12,7 +12,7 @@ typedef struct {
EOLIAN static Efl_Ui_Spotlight_Container*
_efl_ui_spotlight_util_stack_gen(Efl_Ui_Widget *parent)
{
- Efl_Ui_Spotlight_Manager *manager = efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS);
+ Efl_Ui_Spotlight_Manager *manager = efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS);
return efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, parent,
efl_ui_spotlight_manager_set(efl_added, manager));
}
diff --git a/src/lib/elementary/efl_ui_stack.c b/src/lib/elementary/efl_ui_stack.c
index e1769b7603..7c9f72f95a 100644
--- a/src/lib/elementary/efl_ui_stack.c
+++ b/src/lib/elementary/efl_ui_stack.c
@@ -18,7 +18,7 @@ _efl_ui_stack_efl_object_constructor(Eo *obj, Efl_Ui_Stack_Data *sd EINA_UNUSED)
obj = efl_constructor(efl_super(obj, MY_CLASS));
- stack = efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS);
+ stack = efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS);
efl_ui_spotlight_manager_set(obj, stack);
return obj;
diff --git a/src/lib/elementary/efl_ui_stack.eo b/src/lib/elementary/efl_ui_stack.eo
index bdaaeed9a2..c60dffc37e 100644
--- a/src/lib/elementary/efl_ui_stack.eo
+++ b/src/lib/elementary/efl_ui_stack.eo
@@ -1,8 +1,9 @@
-class @beta Efl.Ui.Stack extends Efl.Ui.Spotlight.Container
+class Efl.Ui.Stack extends Efl.Ui.Spotlight.Container
{
[[A spotlight with predefined @Efl.Ui.Spotlight.Container.spotlight_manager
The container will alpha-blend the new content over the old content.
+ @since 1.24
]]
implements {
Efl.Object.constructor;
diff --git a/src/lib/elementary/efl_ui_tab_bar.c b/src/lib/elementary/efl_ui_tab_bar.c
index 34e37299e2..da5ca2c43d 100644
--- a/src/lib/elementary/efl_ui_tab_bar.c
+++ b/src/lib/elementary/efl_ui_tab_bar.c
@@ -26,6 +26,19 @@ _efl_ui_tab_bar_efl_ui_single_selectable_fallback_selection_set(Eo *obj EINA_UNU
efl_ui_selectable_selected_set(pd->fallback_selection, EINA_TRUE);
}
+EOLIAN static void
+_efl_ui_tab_bar_efl_ui_single_selectable_allow_manual_deselection_set(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Bar_Data *pd, Eina_Bool allow_manual_deselection)
+{
+ pd->allow_manual_deselection = !!allow_manual_deselection;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_tab_bar_efl_ui_single_selectable_allow_manual_deselection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Bar_Data *pd)
+{
+ return pd->allow_manual_deselection;
+}
+
+
EOLIAN static Efl_Ui_Selectable*
_efl_ui_tab_bar_efl_ui_single_selectable_fallback_selection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Bar_Data *pd)
{
diff --git a/src/lib/elementary/efl_ui_tab_bar.eo b/src/lib/elementary/efl_ui_tab_bar.eo
index cf06e0de47..c077cf0a57 100644
--- a/src/lib/elementary/efl_ui_tab_bar.eo
+++ b/src/lib/elementary/efl_ui_tab_bar.eo
@@ -15,6 +15,7 @@ class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base
Efl.Object.destructor;
Efl.Ui.Single_Selectable.last_selected {get;}
Efl.Ui.Single_Selectable.fallback_selection {get; set;}
+ Efl.Ui.Single_Selectable.allow_manual_deselection {get; set;}
Efl.Pack.pack;
Efl.Pack.pack_clear;
Efl.Pack.unpack_all;
diff --git a/src/lib/elementary/efl_ui_tab_bar_private.h b/src/lib/elementary/efl_ui_tab_bar_private.h
index 87763a9e87..02775c36a7 100644
--- a/src/lib/elementary/efl_ui_tab_bar_private.h
+++ b/src/lib/elementary/efl_ui_tab_bar_private.h
@@ -8,6 +8,7 @@ struct _Efl_Ui_Tab_Bar_Data
Efl_Ui_Box *bx;
Efl_Ui_Item *selected, *fallback_selection;
Eina_Bool in_value_change;
+ Eina_Bool allow_manual_deselection : 1;
};
#define EFL_UI_TAB_BAR_DATA_GET(o, sd) \
diff --git a/src/lib/elementary/efl_ui_tab_pager.c b/src/lib/elementary/efl_ui_tab_pager.c
index 73e7d22c48..82b4ac4c83 100644
--- a/src/lib/elementary/efl_ui_tab_pager.c
+++ b/src/lib/elementary/efl_ui_tab_pager.c
@@ -12,24 +12,25 @@
#define MY_CLASS EFL_UI_TAB_PAGER_CLASS
static void
-_select(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Page *page)
+_efl_ui_tab_pager_spotlight_manager_set(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Efl_Ui_Spotlight_Manager *manager)
{
- Efl_Ui_Tab_Bar_Default_Item *item = efl_ui_tab_page_tab_bar_item_get(page);
-
- if (!efl_ui_selectable_selected_get(item))
- efl_ui_selectable_selected_set(item, EINA_TRUE);
+ efl_ui_spotlight_manager_set(pd->spotlight, manager);
}
+
static void
_tab_select_cb(void *data, const Efl_Event *event)
{
Efl_Ui_Tab_Bar_Default_Item *selected;
Efl_Ui_Tab_Page *page;
+ Efl_Ui_Tab_Pager_Data *pd;
+ pd = efl_data_scope_get(data, MY_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN(pd);
selected = efl_ui_selectable_last_selected_get(event->object);
page = efl_parent_get(selected);
- if (efl_ui_spotlight_active_element_get(data))
- efl_ui_spotlight_active_element_set(data, page);
+ if (efl_ui_spotlight_active_element_get(pd->spotlight))
+ efl_ui_spotlight_active_element_set(pd->spotlight, page);
}
EOLIAN static Efl_Canvas_Object *
@@ -39,13 +40,6 @@ _efl_ui_tab_pager_tab_bar_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *
}
EOLIAN static void
-_efl_ui_tab_pager_efl_ui_spotlight_container_active_element_set(Eo *obj, Efl_Ui_Tab_Pager_Data *sd EINA_UNUSED, Efl_Ui_Widget *element)
-{
- efl_ui_spotlight_active_element_set(efl_super(obj, MY_CLASS), element);
- _select(obj, element);
-}
-
-EOLIAN static void
_efl_ui_tab_pager_efl_object_destructor(Eo *obj, Efl_Ui_Tab_Pager_Data *sd)
{
if (sd->tab_bar != NULL)
@@ -66,10 +60,26 @@ _efl_ui_tab_pager_efl_object_constructor(Eo *obj, Efl_Ui_Tab_Pager_Data *sd)
sd->tab_bar = efl_add(EFL_UI_TAB_BAR_CLASS, obj);
efl_event_callback_add(sd->tab_bar, EFL_UI_EVENT_ITEM_SELECTED, _tab_select_cb, obj);
+ efl_event_callback_forwarder_del(sd->tab_bar, EFL_UI_SELECTABLE_EVENT_SELECTION_CHANGED, obj);
+
+ sd->spotlight = efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, obj);
return obj;
}
+EOLIAN static Eina_Error
+_efl_ui_tab_pager_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Tab_Pager_Data *pd)
+{
+ Eina_Error err;
+
+ err = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS));
+
+ efl_content_set(efl_part(obj, "efl.tab_root"), pd->tab_bar);
+ efl_content_set(efl_part(obj, "efl.page_root"), pd->spotlight);
+
+ return err;
+}
+
EOLIAN static Efl_Object*
_efl_ui_tab_pager_efl_object_finalize(Eo *obj, Efl_Ui_Tab_Pager_Data *pd)
{
@@ -80,91 +90,157 @@ _efl_ui_tab_pager_efl_object_finalize(Eo *obj, Efl_Ui_Tab_Pager_Data *pd)
return obj;
}
+EOLIAN static int
+_efl_ui_tab_pager_efl_container_content_count(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd)
+{
+ return efl_content_count(pd->spotlight);
+}
+
+EOLIAN static Eina_Iterator*
+_efl_ui_tab_pager_efl_container_content_iterate(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd)
+{
+ return efl_content_iterate(pd->spotlight);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_tab_pager_efl_pack_pack(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Efl_Gfx_Entity *subobj)
+{
+ return efl_pack(pd->spotlight, subobj);
+}
+
+EOLIAN static Efl_Gfx_Entity*
+_efl_ui_tab_pager_efl_pack_linear_pack_content_get(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, int index)
+{
+ return efl_pack_content_get(pd->spotlight, index);
+}
+
+EOLIAN static int
+_efl_ui_tab_pager_efl_pack_linear_pack_index_get(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, const Efl_Gfx_Entity *subobj)
+{
+ return efl_pack_index_get(pd->spotlight, subobj);
+}
+
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_pack_clear(Eo *obj, Efl_Ui_Tab_Pager_Data *sd)
+_efl_ui_tab_pager_efl_pack_pack_clear(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd)
{
if (!efl_pack_clear(sd->tab_bar))
return EINA_FALSE;
- return efl_pack_clear(efl_super(obj, MY_CLASS));
+ return efl_pack_clear(sd->spotlight);
}
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_unpack_all(Eo *obj, Efl_Ui_Tab_Pager_Data *sd)
+_efl_ui_tab_pager_efl_pack_unpack_all(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd)
{
if (!efl_pack_unpack_all(sd->tab_bar))
return EINA_FALSE;
- return efl_pack_unpack_all(efl_super(obj, MY_CLASS));
+ return efl_pack_unpack_all(sd->spotlight);
}
#define ITEM(s) efl_ui_tab_page_tab_bar_item_get(s)
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_unpack(Eo *obj, Efl_Ui_Tab_Pager_Data *sd, Efl_Gfx_Entity *subobj)
+_efl_ui_tab_pager_efl_pack_unpack(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd, Efl_Gfx_Entity *subobj)
{
if (!efl_pack_unpack(sd->tab_bar, ITEM(subobj)))
return EINA_FALSE;
- return efl_pack_unpack(efl_super(obj, MY_CLASS), subobj);
+ return efl_pack_unpack(sd->spotlight, subobj);
}
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_linear_pack_begin(Eo *obj,
+_efl_ui_tab_pager_efl_pack_linear_pack_begin(Eo *obj EINA_UNUSED,
Efl_Ui_Tab_Pager_Data *sd,
Efl_Gfx_Entity *subobj)
{
if (!efl_pack_begin(sd->tab_bar, ITEM(subobj)))
return EINA_FALSE;
- return efl_pack_begin(efl_super(obj, MY_CLASS), subobj);
+ return efl_pack_begin(sd->spotlight, subobj);
}
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_linear_pack_end(Eo *obj,
+_efl_ui_tab_pager_efl_pack_linear_pack_end(Eo *obj EINA_UNUSED,
Efl_Ui_Tab_Pager_Data *sd,
Efl_Gfx_Entity *subobj)
{
if (!efl_pack_end(sd->tab_bar, ITEM(subobj)))
return EINA_FALSE;
- return efl_pack_end(efl_super(obj, MY_CLASS), subobj);
+ return efl_pack_end(sd->spotlight, subobj);
}
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_linear_pack_before(Eo *obj,
+_efl_ui_tab_pager_efl_pack_linear_pack_before(Eo *obj EINA_UNUSED,
Efl_Ui_Tab_Pager_Data *sd,
Efl_Gfx_Entity *subobj,
const Efl_Gfx_Entity *existing)
{
if (!efl_pack_before(sd->tab_bar, ITEM(subobj), ITEM(existing)))
return EINA_FALSE;
- return efl_pack_before(efl_super(obj, MY_CLASS), subobj, existing);
+ return efl_pack_before(sd->spotlight, subobj, existing);
}
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_linear_pack_after(Eo *obj,
+_efl_ui_tab_pager_efl_pack_linear_pack_after(Eo *obj EINA_UNUSED,
Efl_Ui_Tab_Pager_Data *sd,
Efl_Gfx_Entity *subobj,
const Efl_Gfx_Entity *existing)
{
if (!efl_pack_after(sd->tab_bar, ITEM(subobj), ITEM(existing)))
return EINA_FALSE;
- return efl_pack_after(efl_super(obj, MY_CLASS), subobj, existing);
+ return efl_pack_after(sd->spotlight, subobj, existing);
}
EOLIAN static Eina_Bool
-_efl_ui_tab_pager_efl_pack_linear_pack_at(Eo *obj,
+_efl_ui_tab_pager_efl_pack_linear_pack_at(Eo *obj EINA_UNUSED,
Efl_Ui_Tab_Pager_Data *sd,
Efl_Gfx_Entity *subobj,
int index)
{
if (!efl_pack_at(sd->tab_bar, ITEM(subobj), index))
return EINA_FALSE;
- return efl_pack_at(efl_super(obj, MY_CLASS), subobj, index);
+ return efl_pack_at(sd->spotlight, subobj, index);
}
EOLIAN static Efl_Gfx_Entity *
-_efl_ui_tab_pager_efl_pack_linear_pack_unpack_at(Eo *obj, Efl_Ui_Tab_Pager_Data *sd, int index)
+_efl_ui_tab_pager_efl_pack_linear_pack_unpack_at(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd, int index)
{
if (!efl_pack_unpack_at(sd->tab_bar, index))
return NULL;
- return efl_pack_unpack_at(efl_super(obj, MY_CLASS), index);
+ return efl_pack_unpack_at(sd->spotlight, index);
+}
+
+EOLIAN static Efl_Ui_Selectable*
+_efl_ui_tab_pager_efl_ui_single_selectable_last_selected_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd)
+{
+ Efl_Ui_Tab_Bar_Default_Item *item = efl_ui_selectable_last_selected_get(pd->tab_bar);
+
+ return efl_parent_get(item);
+}
+
+EOLIAN static void
+_efl_ui_tab_pager_efl_ui_single_selectable_fallback_selection_set(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Efl_Ui_Selectable *fallback)
+{
+ efl_ui_selectable_fallback_selection_set(pd->tab_bar, efl_ui_tab_page_tab_bar_item_get(fallback));
+}
+
+EOLIAN static Efl_Ui_Selectable*
+_efl_ui_tab_pager_efl_ui_single_selectable_fallback_selection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd)
+{
+ Efl_Ui_Tab_Bar_Default_Item *item = efl_ui_selectable_fallback_selection_get(pd->tab_bar);
+
+ return efl_parent_get(item);
+}
+
+EOLIAN static void
+_efl_ui_tab_pager_efl_ui_single_selectable_allow_manual_deselection_set(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd, Eina_Bool allow_manual_deselection)
+{
+ efl_ui_selectable_allow_manual_deselection_set(pd->tab_bar, allow_manual_deselection);
}
+
+EOLIAN static Eina_Bool
+_efl_ui_tab_pager_efl_ui_single_selectable_allow_manual_deselection_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *pd)
+{
+ return efl_ui_selectable_allow_manual_deselection_get(pd->tab_bar);
+}
+
+
#include "efl_ui_tab_pager.eo.c"
diff --git a/src/lib/elementary/efl_ui_tab_pager.eo b/src/lib/elementary/efl_ui_tab_pager.eo
index 9f4bb42d4f..8bf1a51fe3 100644
--- a/src/lib/elementary/efl_ui_tab_pager.eo
+++ b/src/lib/elementary/efl_ui_tab_pager.eo
@@ -1,9 +1,12 @@
-class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Spotlight.Container
+class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Layout_Base
+ implements Efl.Pack_Linear, Efl.Ui.Single_Selectable
{
[[Container for @Efl.Ui.Tab_Page
This container consists out of a Efl.Ui.Tab_Bar and a place to display the content of the pages.
The items that are generated out of the pages will be displayed in the tab bar of this pager.
+
+ The object has an internal @Efl.Ui.Spotlight.Container which displays the content of a item.
]]
methods {
@property tab_bar {
@@ -15,20 +18,37 @@ class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Spotlight.Container
tab_bar: Efl.Ui.Tab_Bar; [[Tab bar for the items of the @Efl.Ui.Tab_Page]]
}
}
+ @property spotlight_manager {
+ [[Spotlight manager of the internal spotlight container]]
+ set {
+
+ }
+ values {
+ manager : Efl.Ui.Spotlight.Manager @move; [[The @Efl.Ui.Spotlight.Manager to pass to the internal @Efl.Ui.Spotlight.Container]]
+ }
+ }
}
implements {
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Object.finalize;
+ Efl.Container.content_count;
+ Efl.Container.content_iterate;
Efl.Pack.pack_clear;
Efl.Pack.unpack_all;
Efl.Pack.unpack;
+ Efl.Pack.pack;
Efl.Pack_Linear.pack_begin;
Efl.Pack_Linear.pack_end;
Efl.Pack_Linear.pack_before;
Efl.Pack_Linear.pack_after;
Efl.Pack_Linear.pack_at;
+ Efl.Pack_Linear.pack_content_get;
+ Efl.Pack_Linear.pack_index_get;
Efl.Pack_Linear.pack_unpack_at;
- Efl.Ui.Spotlight.Container.active_element { set; }
+ Efl.Ui.Single_Selectable.last_selected {get;}
+ Efl.Ui.Single_Selectable.fallback_selection {set; get;}
+ Efl.Ui.Single_Selectable.allow_manual_deselection {set; get;}
+ Efl.Ui.Widget.theme_apply;
}
}
diff --git a/src/lib/elementary/efl_ui_tab_pager_private.h b/src/lib/elementary/efl_ui_tab_pager_private.h
index 1da72fe5ec..9ac7163286 100644
--- a/src/lib/elementary/efl_ui_tab_pager_private.h
+++ b/src/lib/elementary/efl_ui_tab_pager_private.h
@@ -6,6 +6,7 @@ typedef struct _Efl_Ui_Tab_Pager_Data Efl_Ui_Tab_Pager_Data;
struct _Efl_Ui_Tab_Pager_Data
{
Eo *tab_bar;
+ Eo *spotlight;
};
diff --git a/src/lib/elementary/efl_ui_table.c b/src/lib/elementary/efl_ui_table.c
index 861b78ab3a..12b8342c1e 100644
--- a/src/lib/elementary/efl_ui_table.c
+++ b/src/lib/elementary/efl_ui_table.c
@@ -640,28 +640,6 @@ _efl_ui_table_item_iterator_free(Table_Item_Iterator *it)
free(it);
}
-static inline Eina_Iterator *
-_efl_ui_table_item_iterator_create(Eo *obj, Eina_Inlist *list)
-{
- Table_Item_Iterator *it;
-
- it = calloc(1, sizeof(*it));
- if (!it) return NULL;
-
- EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
-
- it->object = obj;
- it->cur = list;
-
- it->iterator.version = EINA_ITERATOR_VERSION;
- it->iterator.next = FUNC_ITERATOR_NEXT(_efl_ui_table_item_iterator_next);
- it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
- _efl_ui_table_item_iterator_get_container);
- it->iterator.free = FUNC_ITERATOR_FREE(_efl_ui_table_item_iterator_free);
-
- return &it->iterator;
-}
-
EOLIAN static Eina_Iterator *
_efl_ui_table_efl_container_content_iterate(Eo *obj, Efl_Ui_Table_Data *pd)
{
diff --git a/src/lib/elementary/efl_ui_tags.c b/src/lib/elementary/efl_ui_tags.c
index 95c5ce59d7..5cc37badda 100644
--- a/src/lib/elementary/efl_ui_tags.c
+++ b/src/lib/elementary/efl_ui_tags.c
@@ -757,7 +757,7 @@ _view_init(Evas_Object *obj, Efl_Ui_Tags_Data *sd)
sd->entry = efl_add(EFL_UI_TEXTBOX_CLASS, sd->box,
efl_text_multiline_set(efl_added, EINA_FALSE),
efl_text_set(efl_added, ""),
- efl_ui_textbox_cnp_mode_set(efl_added, EFL_UI_SELECTION_FORMAT_MARKUP),
+ efl_ui_textbox_cnp_dnd_mode_set(efl_added, EFL_UI_TEXTBOX_CNP_CONTENT_MARKUP),
efl_input_text_input_panel_autoshow_set(efl_added, EINA_FALSE),
efl_text_interactive_editable_set(efl_added, EINA_TRUE),
efl_composite_attach(obj, efl_added));
diff --git a/src/lib/elementary/efl_ui_text_part.eo b/src/lib/elementary/efl_ui_text_part.eo
deleted file mode 100644
index f5d8c0e97e..0000000000
--- a/src/lib/elementary/efl_ui_text_part.eo
+++ /dev/null
@@ -1,8 +0,0 @@
-class @beta Efl.Ui.Text_Part extends Efl.Ui.Layout_Part_Text
-{
- [[Efl UI Text internal part class]]
- data: null;
- implements {
- Efl.Text.text { set; get; }
- }
-}
diff --git a/src/lib/elementary/efl_ui_textbox.c b/src/lib/elementary/efl_ui_textbox.c
index e96842dba7..165ef1f0e4 100644
--- a/src/lib/elementary/efl_ui_textbox.c
+++ b/src/lib/elementary/efl_ui_textbox.c
@@ -15,27 +15,23 @@
#include "elm_entry_common.h"
#include "elm_widget_entry.h"
-#include "elm_hoversel_eo.h"
-#include "efl_ui_text_part.eo.h"
+#include "efl_ui_textbox_part.eo.h"
#include "elm_part_helper.h"
#include "efl_canvas_textblock_internal.h"
typedef struct _Efl_Ui_Textbox_Data Efl_Ui_Textbox_Data;
typedef struct _Efl_Ui_Text_Rectangle Efl_Ui_Text_Rectangle;
typedef struct _Anchor Anchor;
-typedef struct _Selection_Loss_Data Selection_Loss_Data;
/**
* Base widget smart data extended with entry instance data.
*/
struct _Efl_Ui_Textbox_Data
{
- Evas_Object *hit_rect, *entry_edje, *scr_edje;
+ Evas_Object *hit_rect, *entry_edje;
- Evas_Object *hoversel;
- Evas_Object *mgf_bg;
- Evas_Object *mgf_clip;
- Evas_Object *mgf_proxy;
+ Eo *popup;
+ Eo *popup_list;
Eo *text_obj;
Eo *text_guide_obj;
Eo *text_table;
@@ -46,37 +42,24 @@ struct _Efl_Ui_Textbox_Data
Eo *cursor_bidi;
Evas_Object *start_handler;
Evas_Object *end_handler;
- Ecore_Job *deferred_decoration_job;
- Ecore_Timer *delay_write;
+ Eina_Future *deferred_decoration_job;
/* for deferred appending */
- Ecore_Idler *append_text_idler;
- char *append_text_left;
int append_text_position;
int append_text_len;
/* Only for clipboard */
- const char *cut_sel;
const char *text;
- const char *file;
- Elm_Text_Format format;
Evas_Coord ent_w, ent_h;
Evas_Coord downx, downy;
Evas_Coord ox, oy;
Eina_List *anchors;
int gen;
Eina_List *sel;
- Eina_List *items; /** context menu item list */
Efl_Canvas_Textblock_Factory *item_factory;
Efl_Canvas_Textblock_Factory *item_fallback_factory;
- Eina_List *markup_filters;
- Ecore_Job *hov_deljob;
Mod_Api *api; // module api if supplied
int cursor_pos;
Elm_Scroller_Policy policy_h, policy_v;
- Elm_Wrap_Type line_wrap;
- Efl_Text_Cursor *sel_handler_cursor;
- void *input_panel_imdata;
- int input_panel_imdata_len;
- int validators;
+ Efl_Text_Cursor_Object *sel_handler_cursor;
struct
{
Evas_Object *hover_parent; /**< hover parent object. entry is a hover parent object by default */
@@ -85,7 +68,7 @@ struct _Efl_Ui_Textbox_Data
const char *hover_style; /**< style of a hover object */
} anchor_hover;
- Efl_Ui_Selection_Format cnp_mode;
+ const char *cnp_mime_type;
Elm_Sel_Format drop_format;
struct {
@@ -97,12 +80,8 @@ struct _Efl_Ui_Textbox_Data
Eina_Size2D scroll;
Eina_Size2D layout;
} last;
- struct
- {
- Eina_Future *primary;
- Eina_Future *clipboard;
- } sel_future;
- Eina_Bool sel_handler_enabled : 1;
+ Efl_Ui_Textbox_Cnp_Content content;
+ Eina_Bool sel_handles_enabled : 1;
Eina_Bool start_handler_down : 1;
Eina_Bool start_handler_shown : 1;
Eina_Bool end_handler_down : 1;
@@ -112,7 +91,6 @@ struct _Efl_Ui_Textbox_Data
Eina_Bool deferred_decoration_anchor : 1;
Eina_Bool context_menu_enabled : 1;
Eina_Bool long_pressed : 1;
- Eina_Bool auto_save : 1;
Eina_Bool has_text : 1;
Eina_Bool use_down : 1;
Eina_Bool sel_mode : 1;
@@ -121,6 +99,7 @@ struct _Efl_Ui_Textbox_Data
Eina_Bool text_changed : 1;
Eina_Bool calc_force : 1;
Eina_Bool cursor_update : 1;
+ Eina_Bool color_is_set : 1;
};
struct _Anchor
@@ -142,7 +121,7 @@ struct _Anchor
if (EINA_UNLIKELY(!ptr)) \
{ \
ERR("No widget data for object %p (%s)", \
- o, evas_object_type_get(o)); \
+ o, efl_class_name_get(o)); \
return; \
}
@@ -151,7 +130,7 @@ struct _Anchor
if (EINA_UNLIKELY(!ptr)) \
{ \
ERR("No widget data for object %p (%s)", \
- o, evas_object_type_get(o)); \
+ o, efl_class_name_get(o)); \
return val; \
}
@@ -164,12 +143,6 @@ struct _Efl_Ui_Text_Rectangle
Evas_Object *obj_bg, *obj_fg, *obj;
};
-struct _Selection_Loss_Data
-{
- Eo *obj;
- Efl_Ui_Selection_Type stype;
-};
-
#define MY_CLASS EFL_UI_TEXTBOX_CLASS
#define MY_CLASS_PFX efl_ui_textbox
#define MY_CLASS_NAME "Efl.Ui.Textbox"
@@ -214,7 +187,7 @@ static void _efl_ui_textbox_cursor_changed_cb(void *data, const Efl_Event *event
static void _text_size_changed_cb(void *data, const Efl_Event *event EINA_UNUSED);
static void _scroller_size_changed_cb(void *data, const Efl_Event *event EINA_UNUSED);
static void _text_position_changed_cb(void *data, const Efl_Event *event EINA_UNUSED);
-static void _efl_ui_textbox_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _efl_ui_textbox_move_cb(void *data, const Efl_Event *event EINA_UNUSED);
static const char* _efl_ui_textbox_selection_get(const Eo *obj, Efl_Ui_Textbox_Data *sd);
static void _edje_signal_emit(Efl_Ui_Textbox_Data *obj, const char *sig, const char *src);
static void _decoration_defer_all(Eo *obj);
@@ -225,126 +198,20 @@ static void _anchors_free(Efl_Ui_Textbox_Data *sd);
static void _selection_defer(Eo *obj, Efl_Ui_Textbox_Data *sd);
static Eina_Position2D _decoration_calc_offset(Efl_Ui_Textbox_Data *sd);
static void _update_text_theme(Eo *obj, Efl_Ui_Textbox_Data *sd);
-
-static char *
-_file_load(Eo *obj)
-{
- Eina_File *f;
- char *text = NULL;
- void *tmp = NULL;
-
- f = eina_file_dup(efl_file_mmap_get(obj));
-
- tmp = eina_file_map_all(f, EINA_FILE_SEQUENTIAL);
- if (!tmp) goto on_error;
-
- text = malloc(eina_file_size_get(f) + 1);
- if (!text) goto on_error;
-
- memcpy(text, tmp, eina_file_size_get(f));
- text[eina_file_size_get(f)] = 0;
-
- if (eina_file_map_faulted(f, tmp))
- {
- ELM_SAFE_FREE(text, free);
- }
-
- on_error:
- if (tmp) eina_file_map_free(f, tmp);
- eina_file_close(f);
-
- return text;
-}
-
-static char *
-_plain_load(Eo *obj)
-{
- return _file_load(obj);
-}
-
-static Eina_Error
-_load_do(Evas_Object *obj)
-{
- char *text;
- Eina_Error err = 0;
-
- EFL_UI_TEXT_DATA_GET(obj, sd);
-
- if (!sd->file)
- {
- elm_object_text_set(obj, "");
- return 0;
- }
-
- switch (sd->format)
- {
- /* Only available format */
- case ELM_TEXT_FORMAT_PLAIN_UTF8:
- text = _plain_load(obj);
- if (!text)
- {
- err = errno;
- if (!err) err = ENOENT;
- }
- break;
-
- default:
- text = NULL;
- break;
- }
-
- if (text)
- {
- efl_text_set(obj, text);
- free(text);
- return 0;
- }
- efl_text_set(obj, "");
- return err;
-}
-
-static void
-_text_save(const char *file,
- const char *text)
-{
- FILE *f;
-
- if (!text)
- {
- ecore_file_unlink(file);
- return;
- }
-
- f = fopen(file, "wb");
- if (!f)
- {
- ERR("Failed to open %s for writing", file);
- return;
- }
-
- if (fputs(text, f) == EOF)
- ERR("Failed to write text to file %s", file);
- fclose(f);
-}
-
-static void
-_save_do(Evas_Object *obj)
-{
- EFL_UI_TEXT_DATA_GET(obj, sd);
-
- if (!sd->file) return;
- switch (sd->format)
- {
- /* Only supported format */
- case ELM_TEXT_FORMAT_PLAIN_UTF8:
- _text_save(sd->file, efl_text_get(obj));
- break;
-
- case ELM_TEXT_FORMAT_MARKUP_UTF8:
- default:
- break;
- }
-}
+static void _efl_ui_textbox_selection_paste_type(Eo *obj, Efl_Ui_Textbox_Data *sd, Efl_Ui_Cnp_Buffer type);
+
+static Eina_Bool _key_action_copy(Evas_Object *obj, const char *params);
+static Eina_Bool _key_action_paste(Evas_Object *obj, const char *params);
+static Eina_Bool _key_action_cut(Evas_Object *obj, const char *params);
+static Eina_Bool _key_action_menu(Evas_Object *obj, const char *params);
+
+static const Elm_Action key_actions[] = {
+ {"copy", _key_action_copy},
+ {"paste", _key_action_paste},
+ {"cut", _key_action_cut},
+ {"menu", _key_action_menu},
+ {NULL, NULL}
+};
static void
_efl_ui_textbox_guide_update(Evas_Object *obj,
@@ -353,44 +220,20 @@ _efl_ui_textbox_guide_update(Evas_Object *obj,
EFL_UI_TEXT_DATA_GET(obj, sd);
if ((has_text) && (!sd->has_text))
- edje_object_signal_emit(sd->entry_edje, "efl,guide,disabled", "efl");
+ efl_layout_signal_emit(sd->entry_edje, "efl,guide,disabled", "efl");
else if ((!has_text) && (sd->has_text))
- edje_object_signal_emit(sd->entry_edje, "efl,guide,enabled", "efl");
+ efl_layout_signal_emit(sd->entry_edje, "efl,guide,enabled", "efl");
sd->has_text = has_text;
}
static void
-_filter_free(Elm_Entry_Markup_Filter *tf)
-{
- if (tf->func == elm_entry_filter_limit_size)
- {
- Elm_Entry_Filter_Limit_Size *lim = tf->data;
-
- free(lim);
- }
- else if (tf->func == elm_entry_filter_accept_set)
- {
- Elm_Entry_Filter_Accept_Set *as = tf->data;
-
- if (as)
- {
- eina_stringshare_del(as->accepted);
- eina_stringshare_del(as->rejected);
-
- free(as);
- }
- }
- free(tf);
-}
-
-static void
_mirrored_set(Evas_Object *obj,
Eina_Bool rtl)
{
EFL_UI_TEXT_DATA_GET(obj, sd);
- edje_object_mirrored_set(sd->entry_edje, rtl);
+ efl_ui_mirrored_set(sd->entry_edje, rtl);
if (sd->anchor_hover.hover)
efl_ui_mirrored_set(sd->anchor_hover.hover, rtl);
@@ -405,12 +248,12 @@ _hide_selection_handler(Evas_Object *obj)
if (sd->start_handler_shown)
{
- edje_object_signal_emit(sd->start_handler, "efl,handler,hide", "efl");
+ efl_layout_signal_emit(sd->start_handler, "efl,handler,hide", "efl");
sd->start_handler_shown = EINA_FALSE;
}
if (sd->end_handler_shown)
{
- edje_object_signal_emit(sd->end_handler, "efl,handler,hide", "efl");
+ efl_layout_signal_emit(sd->end_handler, "efl,handler,hide", "efl");
sd->end_handler_shown = EINA_FALSE;
}
}
@@ -431,21 +274,19 @@ _viewport_region_get(Evas_Object *obj)
rect = efl_gfx_entity_geometry_get(sd->text_obj);
}
- parent = elm_widget_parent_get(obj);
+ parent = efl_ui_widget_parent_get(obj);
while (parent)
{
- if (efl_isa(parent, ELM_INTERFACE_SCROLLABLE_MIXIN))
+ if (efl_isa(parent, EFL_UI_SCROLLABLE_INTERFACE))
{
- Eina_Rectangle r;
- EINA_RECTANGLE_SET(&r, 0, 0, 0, 0);
- evas_object_geometry_get(parent, &r.x, &r.y, &r.w, &r.h);
- if (!eina_rectangle_intersection(&rect.rect, &r))
+ Eina_Rect r = efl_gfx_entity_geometry_get(parent);
+ if (!eina_rectangle_intersection(&rect.rect, &r.rect))
{
rect = EINA_RECT_EMPTY();
break;
}
}
- parent = elm_widget_parent_get(parent);
+ parent = efl_ui_widget_parent_get(parent);
}
return rect;
@@ -465,13 +306,13 @@ _update_selection_handler(Eo *obj)
return;
}
- if (sd->sel_handler_enabled)
+ if (sd->sel_handles_enabled)
{
Eina_Rect rect;
Eina_Position2D off;
Evas_Coord hx, hy;
Eina_Bool hidden = EINA_FALSE;
- Efl_Text_Cursor *sel_start, *sel_end;
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
Eina_Rect rc_tmp;
efl_text_interactive_selection_cursors_get(obj, &sel_start, &sel_end);
@@ -481,7 +322,7 @@ _update_selection_handler(Eo *obj)
//evas_object_geometry_get(sd->entry_edje, &ent_x, &ent_y, NULL, NULL);
- rc_tmp = efl_text_cursor_geometry_get(sel_start, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ rc_tmp = efl_text_cursor_object_cursor_geometry_get(sel_start, EFL_TEXT_CURSOR_TYPE_BEFORE);
sx = rc_tmp.x;
sy = rc_tmp.y;
sh = rc_tmp.h;
@@ -489,7 +330,7 @@ _update_selection_handler(Eo *obj)
off = _decoration_calc_offset(sd);
hx = off.x + sx;
hy = off.y + sy + sh;
- evas_object_move(sd->start_handler, hx, hy);
+ efl_gfx_entity_position_set(sd->start_handler, EINA_POSITION2D(hx, hy));
rect = _viewport_region_get(obj);
@@ -500,26 +341,26 @@ _update_selection_handler(Eo *obj)
}
if (!sd->start_handler_shown && !hidden)
{
- edje_object_signal_emit(sd->start_handler,
+ efl_layout_signal_emit(sd->start_handler,
"efl,handler,show", "efl");
sd->start_handler_shown = EINA_TRUE;
}
else if (sd->start_handler_shown && hidden)
{
- edje_object_signal_emit(sd->start_handler,
+ efl_layout_signal_emit(sd->start_handler,
"efl,handler,hide", "efl");
sd->start_handler_shown = EINA_FALSE;
}
hidden = EINA_FALSE;
- rc_tmp = efl_text_cursor_geometry_get(sel_end, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ rc_tmp = efl_text_cursor_object_cursor_geometry_get(sel_end, EFL_TEXT_CURSOR_TYPE_BEFORE);
ex = rc_tmp.x;
ey = rc_tmp.y;
eh = rc_tmp.h;
hx = off.x + ex;
hy = off.y + ey + eh;
- evas_object_move(sd->end_handler, hx, hy);
+ efl_gfx_entity_position_set(sd->end_handler, EINA_POSITION2D(hx, hy));
if (!eina_rectangle_xcoord_inside(&rect.rect, hx) ||
!eina_rectangle_ycoord_inside(&rect.rect, hy))
@@ -528,13 +369,13 @@ _update_selection_handler(Eo *obj)
}
if (!sd->end_handler_shown && !hidden)
{
- edje_object_signal_emit(sd->end_handler,
+ efl_layout_signal_emit(sd->end_handler,
"efl,handler,show", "efl");
sd->end_handler_shown = EINA_TRUE;
}
else if (sd->end_handler_shown && hidden)
{
- edje_object_signal_emit(sd->end_handler,
+ efl_layout_signal_emit(sd->end_handler,
"efl,handler,hide", "efl");
sd->end_handler_shown = EINA_FALSE;
}
@@ -543,117 +384,167 @@ _update_selection_handler(Eo *obj)
{
if (sd->start_handler_shown)
{
- edje_object_signal_emit(sd->start_handler,
+ efl_layout_signal_emit(sd->start_handler,
"efl,handler,hide", "efl");
sd->start_handler_shown = EINA_FALSE;
}
if (sd->end_handler_shown)
{
- edje_object_signal_emit(sd->end_handler,
+ efl_layout_signal_emit(sd->end_handler,
"efl,handler,hide", "efl");
sd->end_handler_shown = EINA_FALSE;
}
}
}
-static void
-_selection_data_cb(void *data EINA_UNUSED, Eo *obj,
- Efl_Ui_Selection_Data *sel_data)
+static Eina_Value
+_selection_data_cb(Efl_Ui_Textbox *obj, void *data EINA_UNUSED, const Eina_Value value)
{
- Efl_Text_Cursor *cur, *start, *end;
+ Eina_Content *content;
+ Eina_Slice slice;
+ Efl_Text_Cursor_Object *cur, *start, *end;
Efl_Text_Change_Info info = { NULL, 0, 0, 0, 0 };
- char *buf = eina_slice_strdup(sel_data->content);
- size_t len = sel_data->content.len;
+ if (eina_value_type_get(&value) != EINA_VALUE_TYPE_CONTENT)
+ return EINA_VALUE_EMPTY;
+ content = eina_value_to_content(&value);
+ slice = eina_content_data_get(content);
efl_text_interactive_selection_cursors_get(obj, &start, &end);
- if (!efl_text_cursor_equal(start, end))
+ if (!efl_text_cursor_object_equal(start, end))
{
- efl_text_cursor_range_delete(start, end);
+ efl_text_cursor_object_range_delete(start, end);
efl_text_interactive_all_unselect(obj);
}
cur = efl_text_interactive_main_cursor_get(obj);
- info.insert = EINA_TRUE;
- info.position = efl_text_cursor_position_get(cur);
- info.length = len;
- info.content = buf;
- if (sel_data->format == EFL_UI_SELECTION_FORMAT_MARKUP)
+ info.type = EFL_TEXT_CHANGE_TYPE_INSERT;
+ info.position = efl_text_cursor_object_position_get(cur);
+ info.length = slice.len;
+ info.content = slice.mem;
+ if (eina_streq(eina_content_type_get(content), "application/x-elementary-markup"))
{
- efl_text_cursor_markup_insert(cur, buf);
+ efl_text_cursor_object_markup_insert(cur, slice.mem);
+ }
+ else if (!strncmp(eina_content_type_get(content), "image/", strlen("image/")))
+ {
+ Eina_Strbuf *result = eina_strbuf_new();
+ eina_strbuf_append_printf(result, "<item absize=240x180 href=");
+ eina_strbuf_append_slice(result, slice);
+ eina_strbuf_append_printf(result, "></item>");
+ efl_text_cursor_object_markup_insert(cur, eina_strbuf_string_get(result));
+ eina_strbuf_free(result);
}
else // TEXT
{
- efl_text_cursor_text_insert(cur, buf);
+ efl_text_cursor_object_text_insert(cur, slice.mem);
}
efl_event_callback_call(obj, EFL_TEXT_INTERACTIVE_EVENT_CHANGED_USER, &info);
- free(buf);
+
+ return EINA_VALUE_EMPTY;
}
-static void
-_dnd_enter_cb(void *data EINA_UNUSED,
- Evas_Object *obj)
+static Eina_Array*
+_figure_out_types(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
{
- elm_object_focus_set(obj, EINA_TRUE);
+ Eina_Array *types = eina_array_new(10);
+
+ if (sd->content & EFL_UI_TEXTBOX_CNP_CONTENT_MARKUP)
+ eina_array_push(types, "application/x-elementary-markup");
+ if (sd->content & EFL_UI_TEXTBOX_CNP_CONTENT_IMAGE)
+ {
+ eina_array_push(types, "image/png");
+ eina_array_push(types, "image/jpeg");
+ eina_array_push(types, "image/x-ms-bmp");
+ eina_array_push(types, "image/gif");
+ eina_array_push(types, "image/tiff");
+ eina_array_push(types, "image/svg+xml");
+ eina_array_push(types, "image/x-xpixmap");
+ eina_array_push(types, "image/x-tga");
+ eina_array_push(types, "image/x-portable-pixmap");
+ }
+ if (sd->content & EFL_UI_TEXTBOX_CNP_CONTENT_TEXT)
+ eina_array_push(types, "text/plain;charset=utf-8");
+ return types;
+}
+
+static Eina_Bool
+_accepting_drops(Eo *obj, Efl_Ui_Textbox_Data *sd, Eina_Accessor *mime_types)
+{
+ int i = 0;
+ const char *mime_type;
+
+ if (efl_ui_widget_disabled_get(obj)) return EINA_FALSE;
+
+ EINA_ACCESSOR_FOREACH(mime_types, i, mime_type)
+ {
+ if (sd->content & EFL_UI_TEXTBOX_CNP_CONTENT_TEXT &&
+ eina_streq(mime_type, "text/plain;charset=utf-8"))
+ return EINA_TRUE;
+
+ if (sd->content & EFL_UI_TEXTBOX_CNP_CONTENT_IMAGE &&
+ strncmp(mime_type, "image/", strlen("image/")))
+ return EINA_TRUE;
+
+ if (sd->content & EFL_UI_TEXTBOX_CNP_CONTENT_MARKUP &&
+ eina_streq(mime_type, "application/x-elementary-markup"))
+ return EINA_TRUE;
+ }
+ return EINA_FALSE;
}
static void
-_dnd_leave_cb(void *data EINA_UNUSED,
- Evas_Object *obj)
+_dnd_enter_cb(void *data EINA_UNUSED,
+ const Efl_Event *ev)
{
- if (_elm_config->desktop_entry)
- elm_object_focus_set(obj, EINA_FALSE);
+ Efl_Ui_Drop_Event *dnd_enter = ev->info;
+ EFL_UI_TEXT_DATA_GET(ev->object, sd);
+ if (_accepting_drops(ev->object, sd, dnd_enter->available_types))
+ efl_ui_focus_util_focus(ev->object);
}
static void
-_dnd_pos_cb(void *data EINA_UNUSED,
- Evas_Object *obj,
- Evas_Coord x,
- Evas_Coord y,
- Elm_Xdnd_Action action EINA_UNUSED)
+_dnd_pos_cb(void *data EINA_UNUSED, const Efl_Event *ev)
{
- int pos;
- Evas_Coord ox, oy, ex, ey;
+ Efl_Ui_Drop_Event *dnd_pos = ev->info;
+ Eina_Position2D po, pe, pos;
+ EFL_UI_TEXT_DATA_GET(ev->object, sd);
+ int cursor_pos;
- EFL_UI_TEXT_DATA_GET(obj, sd);
+ if (!_accepting_drops(ev->object, sd, dnd_pos->available_types))
+ return;
- evas_object_geometry_get(obj, &ox, &oy, NULL, NULL);
- evas_object_geometry_get(sd->entry_edje, &ex, &ey, NULL, NULL);
- x = x + ox - ex;
- y = y + oy - ey;
+ po = efl_gfx_entity_position_get(ev->object);
+ pe = efl_gfx_entity_position_get(sd->entry_edje);
+ pos.x = dnd_pos->position.x + po.x - pe.x;
+ pos.y = dnd_pos->position.y + po.x - pe.y;
edje_object_part_text_cursor_coord_set
- (sd->entry_edje, "efl.text", EDJE_CURSOR_USER, x, y);
- pos = edje_object_part_text_cursor_pos_get
+ (sd->entry_edje, "efl.text", EDJE_CURSOR_USER, pos.x, pos.y);
+ cursor_pos = edje_object_part_text_cursor_pos_get
(sd->entry_edje, "efl.text", EDJE_CURSOR_USER);
edje_object_part_text_cursor_pos_set(sd->entry_edje, "efl.text",
- EDJE_CURSOR_MAIN, pos);
+ EDJE_CURSOR_MAIN, cursor_pos);
}
-static Eina_Bool
-_dnd_drop_cb(void *data EINA_UNUSED,
- Evas_Object *obj,
- Elm_Selection_Data *drop)
+static void
+_dnd_drop_cb(void *data EINA_UNUSED, const Efl_Event *ev)
{
- Eina_Bool rv;
-
- EFL_UI_TEXT_DATA_GET(obj, sd);
+ Efl_Ui_Drop_Event *drop = ev->info;
- rv = edje_object_part_text_cursor_coord_set
- (sd->entry_edje, "efl.text", EDJE_CURSOR_MAIN, drop->x, drop->y);
+ Eina_Array *types;
- if (!rv) WRN("Warning: Failed to position cursor: paste anyway");
+ EFL_UI_TEXT_DATA_GET(ev->object, sd);
+ types = _figure_out_types(ev->object, sd);
- //rv = _selection_data_cb(NULL, obj, drop);
+ if (_accepting_drops(ev->object, sd, drop->available_types))
+ {
+ Eina_Future *future;
- return rv;
-}
+ future = efl_ui_dnd_drop_data_get(ev->object, evas_device_seat_id_get(evas_default_device_get(evas_object_evas_get(ev->object), EVAS_DEVICE_CLASS_SEAT)), eina_array_iterator_new(types));
+ efl_future_then(ev->object, future, _selection_data_cb);
+ }
-static Elm_Sel_Format
-_get_drop_format(Evas_Object *obj)
-{
- if (efl_text_interactive_editable_get(obj) && (efl_text_multiline_get(obj)) && (!efl_text_password_get(obj)) && (!efl_ui_widget_disabled_get(obj)))
- return EFL_UI_SELECTION_FORMAT_MARKUP | EFL_UI_SELECTION_FORMAT_IMAGE;
- return EFL_UI_SELECTION_FORMAT_MARKUP;
+ eina_array_free(types);
}
/* we can't reuse layout's here, because it's on entry_edje only */
@@ -662,31 +553,18 @@ _efl_ui_textbox_efl_ui_widget_disabled_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Ein
{
const char *emission;
- efl_ui_widget_disabled_set(efl_super(obj, MY_CLASS), disabled);
+ if (efl_ui_widget_disabled_get(obj) == disabled)
+ return;
- elm_drop_target_del(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
+ efl_ui_widget_disabled_set(efl_super(obj, MY_CLASS), disabled);
emission = efl_ui_widget_disabled_get(obj) ? "efl,state,disabled" : "efl,state,enabled";
- edje_object_signal_emit(sd->entry_edje, emission, "efl");
+ efl_layout_signal_emit(sd->entry_edje, emission, "efl");
if (sd->scroll)
{
- edje_object_signal_emit(sd->scr_edje, emission, "efl");
- elm_interface_scrollable_freeze_set(obj, efl_ui_widget_disabled_get(obj));
+ efl_ui_scrollable_scroll_freeze_set(obj, efl_ui_widget_disabled_get(obj));
}
- if (!efl_ui_widget_disabled_get(obj))
- {
- sd->drop_format = _get_drop_format(obj);
- elm_drop_target_add(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
- }
_update_text_theme(obj, sd);
}
@@ -699,17 +577,17 @@ _efl_ui_textbox_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Textbox_Data *sd)
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
- // Note: We are skipping elm_layout here! This is by design.
- // This assumes the following inheritance: my_class -> layout -> widget ...
- theme_apply = efl_ui_widget_theme_apply(efl_cast(obj, EFL_UI_WIDGET_CLASS));
+ theme_apply = efl_ui_widget_theme_apply(efl_super(obj,MY_CLASS));
if (theme_apply == EFL_UI_THEME_APPLY_ERROR_GENERIC) return EFL_UI_THEME_APPLY_ERROR_GENERIC;
+ _update_text_theme(obj, sd);
+
efl_event_freeze(obj);
edje_object_mirrored_set
(wd->resize_obj, efl_ui_mirrored_get(obj));
- edje_object_scale_set
+ efl_gfx_entity_scale_set
(wd->resize_obj,
efl_gfx_entity_scale_get(obj) * elm_config_scale_get());
@@ -721,19 +599,17 @@ _efl_ui_textbox_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Textbox_Data *sd)
// elm_entry_cursor_pos_set -> cursor,changed -> widget_show_region_set
// -> smart_objects_calculate will call all smart calculate functions,
// and one of them can delete elm_entry.
- evas_object_ref(obj);
+ efl_ref(obj);
if (efl_ui_focus_object_focus_get(obj))
{
- edje_object_signal_emit(sd->entry_edje, "efl,action,focus", "efl");
- if (sd->scroll)
- edje_object_signal_emit(sd->scr_edje, "efl,action,focus", "efl");
+ efl_layout_signal_emit(sd->entry_edje, "efl,action,focus", "efl");
}
- edje_object_message_signal_process(sd->entry_edje);
+ efl_layout_signal_process(sd->entry_edje, EINA_FALSE);
- Evas_Object* clip = evas_object_clip_get(sd->entry_edje);
- evas_object_clip_set(sd->hit_rect, clip);
+ Evas_Object* clip = efl_canvas_object_clipper_get(sd->entry_edje);
+ efl_canvas_object_clipper_set(sd->hit_rect, clip);
if (sd->start_handler)
{
@@ -747,7 +623,17 @@ _efl_ui_textbox_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Textbox_Data *sd)
efl_event_callback_call(obj, EFL_UI_LAYOUT_EVENT_THEME_CHANGED, NULL);
- evas_object_unref(obj);
+ efl_unref(obj);
+
+ if (efl_content_get(efl_part(sd->entry_edje, "efl.text")) == NULL && !sd->scroller)
+ {
+ efl_pack_table(sd->text_table, sd->text_obj, 0, 0, 1, 1);
+ efl_pack_table(sd->text_table, sd->text_guide_obj, 0, 0, 1, 1);
+ efl_content_set(efl_part(sd->entry_edje, "efl.text"), sd->text_table);
+ }
+
+ if (!sd->cursor && !sd->cursor_bidi)
+ _create_text_cursors(obj, sd);
return theme_apply;
}
@@ -757,21 +643,17 @@ _cursor_geometry_recalc(Evas_Object *obj)
{
EFL_UI_TEXT_DATA_GET(obj, sd);
- Evas_Coord x, y, w, h;
- Evas_Coord x2, y2, w2, h2;
Evas_Coord cx, cy, cw, ch;
Eina_Rect rc;
if (!efl_text_interactive_editable_get(obj)) return;
cx = cy = cw = ch = 0;
- x2 = y2 = w2 = h2 = 0;
- x = y = w = h = 0;
- Efl_Text_Cursor *main_cur =
+ Efl_Text_Cursor_Object *main_cur =
efl_text_interactive_main_cursor_get(obj);
- rc = efl_text_cursor_geometry_get(main_cur, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ rc = efl_text_cursor_object_cursor_geometry_get(main_cur, EFL_TEXT_CURSOR_TYPE_BEFORE);
cx = rc.x;
cy = rc.y;
cw = rc.w;
@@ -781,10 +663,6 @@ _cursor_geometry_recalc(Evas_Object *obj)
if (cw < 1) cw = 1;
if (ch < 1) ch = 1;
edje_object_size_min_restricted_calc(sd->cursor, &cw, NULL, cw, 0);
- evas_object_geometry_get(sd->entry_edje, &x, &y, &w, &h);
- evas_object_geometry_get(
- sd->text_obj,
- &x2, &y2, &w2, &h2);
efl_ui_scrollable_scroll(sd->scroller, EINA_RECT(cx, cy, cw, ch), EINA_FALSE);
@@ -816,24 +694,10 @@ _efl_ui_textbox_efl_canvas_group_group_calculate(Eo *obj, Efl_Ui_Textbox_Data *s
if (sd->scroll)
{
- if (!efl_text_multiline_get(obj))
- {
- efl_ui_internal_text_scroller_mode_set(sd->scroller,
- EFL_UI_TEXT_SCROLLER_MODE_SINGLELINE);
- }
- else
- {
- efl_ui_internal_text_scroller_mode_set(sd->scroller,
- EFL_UI_TEXT_SCROLLER_MODE_MULTILINE);
-
- }
-
efl_canvas_group_calculate(sd->scroller);
min = efl_gfx_hint_size_min_get(sd->scroller);
if (!efl_text_multiline_get(obj))
{
- efl_ui_internal_text_scroller_mode_set(sd->scroller,
- EFL_UI_TEXT_SCROLLER_MODE_SINGLELINE);
edje_object_size_min_calc(wd->resize_obj, &edmin.w, &edmin.h);
min.w = edmin.w;
min.h = edmin.h;
@@ -865,24 +729,19 @@ _efl_ui_textbox_efl_canvas_group_group_calculate(Eo *obj, Efl_Ui_Textbox_Data *s
EOLIAN static Eina_Bool
_efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data *sd)
{
- Evas_Object *top;
- Eina_Bool top_is_win = EINA_FALSE;
+ Efl_Object *top;
if (!efl_text_interactive_editable_get(obj)) return EINA_FALSE;
- top = elm_widget_top_get(obj);
- if (top && efl_isa(top, EFL_UI_WIN_CLASS))
- top_is_win = EINA_TRUE;
+ top = efl_provider_find(obj, EFL_UI_WIN_CLASS);
if (efl_ui_focus_object_focus_get(obj))
{
- evas_object_focus_set(sd->text_obj, EINA_TRUE);
+ efl_canvas_object_key_focus_set(sd->text_obj, EINA_TRUE);
_edje_signal_emit(sd, "efl,action,focus", "efl");
- if (sd->scroll)
- edje_object_signal_emit(sd->scr_edje, "efl,action,focus", "efl");
- if (top && top_is_win && efl_input_text_input_panel_autoshow_get(obj) && !efl_input_text_input_panel_show_on_demand_get(obj))
+ if (efl_input_text_input_panel_autoshow_get(obj) && !efl_input_text_input_panel_show_on_demand_get(obj))
elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON);
if (_elm_config->atspi_mode)
efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_TYPE_FOCUSED, EINA_TRUE);
@@ -892,27 +751,24 @@ _efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data
Eo *sw = sd->text_obj;
_edje_signal_emit(sd, "efl,action,unfocus", "efl");
- if (sd->scroll)
- edje_object_signal_emit(sd->scr_edje, "efl,action,unfocus", "efl");
- evas_object_focus_set(sw, EINA_FALSE);
+ efl_canvas_object_key_focus_set(sw, EINA_FALSE);
- if (top && top_is_win && efl_input_text_input_panel_autoshow_get(obj))
+ if (efl_input_text_input_panel_autoshow_get(obj))
elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_OFF);
if (_elm_config->atspi_mode)
efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_TYPE_FOCUSED, EINA_FALSE);
if (_elm_config->selection_clear_enable)
{
- if ((efl_text_interactive_have_selection_get(obj)) && (!sd->hoversel))
+ if ((efl_text_interactive_have_selection_get(obj)) && (!sd->popup))
{
sd->sel_mode = EINA_FALSE;
- elm_widget_scroll_hold_pop(obj);
+ efl_ui_widget_scroll_hold_pop(obj);
edje_object_part_text_select_allow_set(sd->entry_edje, "efl.text", EINA_FALSE);
- edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl");
+ efl_layout_signal_emit(sd->entry_edje, "efl,state,select,off", "efl");
edje_object_part_text_select_none(sd->entry_edje, "efl.text");
}
}
- edje_object_signal_emit(sd->scr_edje, "validation,default", "efl");
}
return EINA_TRUE;
@@ -921,23 +777,24 @@ _efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data
EOLIAN static Eina_Rect
_efl_ui_textbox_efl_ui_widget_interest_region_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
{
- Evas_Coord edje_x, edje_y, elm_x, elm_y;
+ Eina_Rect edje, elm;
Eina_Rect r = {};
- r = efl_text_cursor_geometry_get(
+ r = efl_text_cursor_object_cursor_geometry_get(
efl_text_interactive_main_cursor_get(obj), EFL_TEXT_CURSOR_TYPE_BEFORE);
if (!efl_text_multiline_get(obj))
{
- evas_object_geometry_get(sd->entry_edje, NULL, NULL, NULL, &r.h);
+ Eina_Rect rr = efl_gfx_entity_geometry_get(sd->entry_edje);
+ r.h = rr.h;
r.y = 0;
}
- evas_object_geometry_get(sd->entry_edje, &edje_x, &edje_y, NULL, NULL);
- evas_object_geometry_get(obj, &elm_x, &elm_y, NULL, NULL);
+ edje = efl_gfx_entity_geometry_get(sd->entry_edje);
+ elm = efl_gfx_entity_geometry_get(obj);
- r.x += edje_x - elm_x;
- r.y += edje_y - elm_y;
+ r.x += edje.x - elm.x;
+ r.y += edje.y - elm.y;
if (r.w < 1) r.w = 1;
if (r.h < 1) r.h = 1;
@@ -945,19 +802,21 @@ _efl_ui_textbox_efl_ui_widget_interest_region_get(const Eo *obj EINA_UNUSED, Efl
}
static void
-_hoversel_position(Evas_Object *obj)
+_popup_position(Evas_Object *obj)
{
- Evas_Coord cx, cy, cw, ch, x, y, mw, mh, w, h;
+ Eina_Rect r;
+ Evas_Coord cx, cy, cw, ch;
+ Eina_Size2D m;
EFL_UI_TEXT_DATA_GET(obj, sd);
cx = cy = 0;
cw = ch = 1;
- evas_object_geometry_get(sd->entry_edje, &x, &y, &w, &h);
+ r = efl_gfx_entity_geometry_get(sd->entry_edje);
if (sd->use_down)
{
- cx = sd->downx - x;
- cy = sd->downy - y;
+ cx = sd->downx - r.x;
+ cy = sd->downy - r.y;
cw = 1;
ch = 1;
}
@@ -965,207 +824,105 @@ _hoversel_position(Evas_Object *obj)
edje_object_part_text_cursor_geometry_get
(sd->entry_edje, "efl.text", &cx, &cy, &cw, &ch);
- evas_object_size_hint_min_get(sd->hoversel, &mw, &mh);
- if (cx + mw > w)
- cx = w - mw;
- if (cy + mh > h)
- cy = h - mh;
- evas_object_geometry_set(sd->hoversel, x + cx, y + cy, mw, mh);
-}
-
-static void
-_hover_del_job(void *data)
-{
- EFL_UI_TEXT_DATA_GET(data, sd);
-
- ELM_SAFE_FREE(sd->hoversel, evas_object_del);
- sd->hov_deljob = NULL;
+ m = efl_gfx_hint_size_restricted_min_get(sd->popup);
+ if (cx + m.w > r.w)
+ cx = r.w - m.w;
+ if (cy + m.h > r.h)
+ cy = r.h - m.h;
+ efl_gfx_entity_geometry_set(sd->popup, EINA_RECT(r.x + cx, r.y + cy, m.w, m.h));
}
static void
-_hover_dismissed_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_selection_lost_cb(void *data EINA_UNUSED, const Efl_Event *ev)
{
- EFL_UI_TEXT_DATA_GET(data, sd);
+ Efl_Ui_Wm_Selection_Changed *changed = ev->info;
+ EFL_UI_TEXT_DATA_GET(ev->object, sd);
- sd->use_down = 0;
- if (sd->hoversel) evas_object_hide(sd->hoversel);
- if (sd->sel_mode)
+ if (changed->buffer == EFL_UI_CNP_BUFFER_SELECTION && changed->caused_by != ev->object)
{
- if (!_elm_config->desktop_entry)
- {
- if (!efl_text_password_get(data))
- edje_object_part_text_select_allow_set
- (sd->entry_edje, "efl.text", EINA_TRUE);
- }
+ efl_text_interactive_all_unselect(ev->object);
+ _selection_defer(ev->object, sd);
}
- elm_widget_scroll_freeze_pop(data);
- ecore_job_del(sd->hov_deljob);
- sd->hov_deljob = ecore_job_add(_hover_del_job, data);
}
static void
-_hover_selected_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_selection_store(Efl_Ui_Cnp_Buffer buffer,
+ Evas_Object *obj)
{
- EFL_UI_TEXT_DATA_GET(data, sd);
+ char *sel;
+ Efl_Text_Cursor_Object *start, *end;
+ Eina_Content *content;
- if (!efl_text_interactive_selection_allowed_get(obj)) return;
+ efl_text_interactive_selection_cursors_get(obj, &start, &end);
+ sel = efl_text_cursor_object_range_markup_get(start, end);
- sd->sel_mode = EINA_TRUE;
- edje_object_part_text_select_none(sd->entry_edje, "efl.text");
+ if ((!sel) || (!sel[0])) return; /* avoid deleting our own selection */
- if (!_elm_config->desktop_entry)
- {
- if (!efl_text_password_get(data))
- edje_object_part_text_select_allow_set
- (sd->entry_edje, "efl.text", EINA_TRUE);
- }
- edje_object_signal_emit(sd->entry_edje, "efl,state,select,on", "efl");
+ content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(sel), "application/x-elementary-markup");
- if (!_elm_config->desktop_entry)
- elm_widget_scroll_hold_push(data);
+ efl_ui_selection_set(obj, buffer, content, evas_device_seat_id_get(evas_default_device_get(evas_object_evas_get(obj), EVAS_DEVICE_CLASS_SEAT)));
+
+ free(sel);
}
static void
-_hoversel_item_paste_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_popup_dismiss( Efl_Ui_Textbox_Data *sd)
{
- efl_ui_textbox_selection_paste(data);
-}
-
-static Eina_Value
-_selection_lost_cb(void *data, const Eina_Value value)
-{
- Selection_Loss_Data *sdata = data;
- EFL_UI_TEXT_DATA_GET(sdata->obj, sd);
-
- efl_text_interactive_all_unselect(sdata->obj);
- _selection_defer(sdata->obj, sd);
- switch (sdata->stype)
- {
- case EFL_UI_SELECTION_TYPE_CLIPBOARD:
- sd->sel_future.clipboard = NULL;
- break;
- case EFL_UI_SELECTION_TYPE_PRIMARY:
- default:
- sd->sel_future.primary = NULL;
- break;
- }
-
- return value;
+ efl_del(sd->popup_list);
+ efl_del(sd->popup);
+ sd->popup = NULL;
+ sd->popup_list = NULL;
}
static void
-_selection_store(Efl_Ui_Selection_Type seltype,
- Evas_Object *obj)
+_backwall_clicked(void *data, const Efl_Event *ev EINA_UNUSED)
{
- char *sel;
- Efl_Text_Cursor *start, *end;
- Efl_Ui_Selection_Format selformat = EFL_UI_SELECTION_FORMAT_MARKUP;
- Eina_Slice slice;
- Selection_Loss_Data *ldata;
- Eina_Future *f;
-
- EFL_UI_TEXT_DATA_GET(obj, sd);
-
- efl_text_interactive_selection_cursors_get(obj, &start, &end);
- sel = efl_text_cursor_range_markup_get(start, end);
-
- if ((!sel) || (!sel[0])) return; /* avoid deleting our own selection */
-
- slice.len = strlen(sel);
- slice.mem = sel;
-
- switch (seltype)
- {
- case EFL_UI_SELECTION_TYPE_CLIPBOARD:
- if (sd->sel_future.clipboard)
- {
- eina_future_cancel(sd->sel_future.clipboard);
- }
-
- f = sd->sel_future.clipboard = efl_ui_selection_set(obj, seltype,
- selformat, slice, 1);
- break;
-
- case EFL_UI_SELECTION_TYPE_PRIMARY:
- default:
- if (sd->sel_future.primary)
- {
- eina_future_cancel(sd->sel_future.primary);
- }
-
- f = sd->sel_future.primary = efl_ui_selection_set(obj, seltype,
- selformat, slice, 1);
- break;
- }
-
- ldata = calloc(1, sizeof(Selection_Loss_Data));
- if (!ldata) goto end;
-
- ldata->obj = obj;
- eina_future_then_easy(f, _selection_lost_cb, NULL, NULL, EINA_VALUE_TYPE_UINT, ldata);
-
- //if (seltype == EFL_UI_SELECTION_TYPE_CLIPBOARD)
- // eina_stringshare_replace(&sd->cut_sel, sel);
-
-end:
- free(sel);
+ EFL_UI_TEXT_DATA_GET(data, sd);
+ _popup_dismiss(sd);
}
static void
-_hoversel_item_cut_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_popup_item_cut_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
+ EFL_UI_TEXT_DATA_GET(data, sd);
efl_ui_textbox_selection_cut(data);
+ _popup_dismiss(sd);
}
static void
-_hoversel_item_copy_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_popup_item_copy_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
+ EFL_UI_TEXT_DATA_GET(data, sd);
efl_ui_textbox_selection_copy(data);
+ _popup_dismiss(sd);
}
static void
-_hover_cancel_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_popup_item_cancel_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
EFL_UI_TEXT_DATA_GET(data, sd);
- sd->sel_mode = EINA_FALSE;
- if (!_elm_config->desktop_entry)
- edje_object_part_text_select_allow_set
- (sd->entry_edje, "efl.text", EINA_FALSE);
- edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl");
+ if (!efl_text_interactive_selection_allowed_get(data)) return;
+
if (!_elm_config->desktop_entry)
- elm_widget_scroll_hold_pop(data);
- edje_object_part_text_select_none(sd->entry_edje, "efl.text");
+ efl_ui_widget_scroll_hold_pop(data);
+
+ sd->sel_mode = EINA_FALSE;
+ efl_text_interactive_all_unselect(data);
+ _popup_dismiss(sd);
}
static void
-_hover_item_clicked_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_popup_item_paste_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
- Elm_Entry_Context_Menu_Item *it = data;
- if (!it) return;
-
- if (it->func) it->func(it->data, it->obj, it);
+ EFL_UI_TEXT_DATA_GET(data, sd);
+ efl_ui_textbox_selection_paste(data);
+ _popup_dismiss(sd);
}
static void
_menu_call(Evas_Object *obj)
{
- Evas_Object *top;
- const Eina_List *l;
- const Elm_Entry_Context_Menu_Item *it;
-
EFL_UI_TEXT_DATA_GET(obj, sd);
if (sd->anchor_hover.hover) return;
@@ -1178,102 +935,116 @@ _menu_call(Evas_Object *obj)
}
else if (sd->context_menu_enabled)
{
- const char *context_menu_orientation;
Eina_Bool ownersel;
- ownersel = elm_selection_selection_has_owner(obj);
- if (!sd->items)
- {
- /* prevent stupid blank hoversel */
- if (efl_text_interactive_have_selection_get(obj) && efl_text_password_get(obj)) return;
- if (_elm_config->desktop_entry && (!efl_text_interactive_have_selection_get(obj)) && ((!efl_text_interactive_editable_get(obj)) || (!ownersel)))
- return;
- }
- if (sd->hoversel) evas_object_del(sd->hoversel);
- else elm_widget_scroll_freeze_push(obj);
-
- sd->hoversel = elm_hoversel_add(obj);
- context_menu_orientation = edje_object_data_get
- (sd->entry_edje, "context_menu_orientation");
+ ownersel = elm_cnp_clipboard_selection_has_owner(obj);
+ /* prevent stupid blank hoversel */
+ if (efl_text_interactive_have_selection_get(obj) && efl_text_password_get(obj)) return;
+ if (_elm_config->desktop_entry && (!efl_text_interactive_have_selection_get(obj)) && ((!efl_text_interactive_editable_get(obj)) || (!ownersel)))
+ return;
+ if (sd->popup) _popup_dismiss(sd);
+ else efl_ui_widget_scroll_freeze_push(obj);
- if ((context_menu_orientation) &&
- (!strcmp(context_menu_orientation, "horizontal")))
- elm_hoversel_horizontal_set(sd->hoversel, EINA_TRUE);
+ sd->popup = efl_add(EFL_UI_POPUP_CLASS, obj);
- elm_object_style_set(sd->hoversel, "entry");
- elm_widget_sub_object_add(obj, sd->hoversel);
- elm_object_text_set(sd->hoversel, "Text");
- top = elm_widget_top_get(obj);
+ sd->popup_list = efl_add(EFL_UI_LIST_CLASS, sd->popup);
+ efl_content_set(sd->popup, sd->popup_list);
+ efl_gfx_hint_align_set(sd->popup_list, 1.0, 1.0);
+ efl_gfx_hint_weight_set(sd->popup_list, 1.0, 1.0);
- if (top) elm_hoversel_hover_parent_set(sd->hoversel, top);
+ efl_ui_widget_sub_object_add(obj, sd->popup);
+ efl_ui_popup_anchor_set(sd->popup, obj);
+ efl_event_callback_add(sd->popup, EFL_UI_POPUP_EVENT_BACKWALL_CLICKED, _backwall_clicked, obj);
- efl_event_callback_add
- (sd->hoversel, ELM_HOVERSEL_EVENT_DISMISSED, _hover_dismissed_cb, obj);
if (efl_text_interactive_have_selection_get(obj))
{
if (!efl_text_password_get(obj))
{
if (efl_text_interactive_editable_get(obj))
- elm_hoversel_item_add
- (sd->hoversel, E_("Cut"), NULL, ELM_ICON_NONE,
- _hoversel_item_cut_cb, obj);
- elm_hoversel_item_add
- (sd->hoversel, E_("Copy"), NULL, ELM_ICON_NONE,
- _hoversel_item_copy_cb, obj);
- if (efl_text_interactive_editable_get(obj) && ownersel)
- elm_hoversel_item_add
- (sd->hoversel, E_("Paste"), NULL, ELM_ICON_NONE,
- _hoversel_item_paste_cb, obj);
- elm_hoversel_item_add
- (sd->hoversel, E_("Cancel"), NULL, ELM_ICON_NONE,
- _hover_cancel_cb, obj);
+ {
+ Eo *il = NULL;
+ il = efl_add(EFL_UI_LIST_DEFAULT_ITEM_CLASS, sd->popup_list);
+ efl_text_set(il, E_("Cut"));
+ efl_gfx_hint_align_set(il, 1.0, 1.0);
+ efl_gfx_hint_weight_set(sd->popup_list, 1.0, 1.0);
+ efl_pack_end(sd->popup_list, il);
+ efl_event_callback_add(il, EFL_UI_EVENT_SELECTED_CHANGED, _popup_item_cut_cb, obj);
+
+ il = efl_add(EFL_UI_LIST_DEFAULT_ITEM_CLASS, sd->popup_list);
+ efl_text_set(il, E_("Copy"));
+ efl_gfx_hint_align_set(il, 1.0, 1.0);
+ efl_gfx_hint_weight_set(sd->popup_list, 1.0, 1.0);
+ efl_pack_end(sd->popup_list, il);
+ efl_event_callback_add(il, EFL_UI_EVENT_SELECTED_CHANGED, _popup_item_copy_cb, obj);
+
+ il = efl_add(EFL_UI_LIST_DEFAULT_ITEM_CLASS, sd->popup_list);
+ efl_text_set(il, E_("Paste"));
+ efl_gfx_hint_align_set(il, 1.0, 1.0);
+ efl_gfx_hint_weight_set(sd->popup_list, 1.0, 1.0);
+ efl_pack_end(sd->popup_list, il);
+ efl_event_callback_add(il, EFL_UI_EVENT_SELECTED_CHANGED, _popup_item_paste_cb, obj);
+
+ il = efl_add(EFL_UI_LIST_DEFAULT_ITEM_CLASS, sd->popup_list);
+ efl_text_set(il, E_("Cancel"));
+ efl_gfx_hint_align_set(il, 1.0, 1.0);
+ efl_gfx_hint_weight_set(sd->popup_list, 1.0, 1.0);
+ efl_pack_end(sd->popup_list, il);
+ efl_event_callback_add(il, EFL_UI_EVENT_SELECTED_CHANGED, _popup_item_cancel_cb, obj);
+ }
}
}
else
{
if (!sd->sel_mode)
{
- if (efl_text_interactive_selection_allowed_get(obj) && !_elm_config->desktop_entry)
- {
- if (!efl_text_password_get(obj))
- elm_hoversel_item_add
- (sd->hoversel, E_("Select"), NULL, ELM_ICON_NONE,
- _hover_selected_cb, obj);
- }
if (ownersel)
{
if (efl_text_interactive_editable_get(obj))
- elm_hoversel_item_add
- (sd->hoversel, E_("Paste"), NULL, ELM_ICON_NONE,
- _hoversel_item_paste_cb, obj);
+ {
+ Eo *il = NULL;
+ il = efl_add(EFL_UI_LIST_DEFAULT_ITEM_CLASS, sd->popup_list);
+ efl_text_set(il, E_("Paste"));
+ efl_gfx_hint_align_set(il, 1.0, 1.0);
+ efl_gfx_hint_weight_set(sd->popup_list, 1.0, 1.0);
+ efl_pack_end(sd->popup_list, il);
+ efl_event_callback_add(il, EFL_UI_EVENT_SELECTED_CHANGED, _popup_item_paste_cb, obj);
+ }
}
}
else
- elm_hoversel_item_add
- (sd->hoversel, E_("Cancel"), NULL, ELM_ICON_NONE,
- _hover_cancel_cb, obj);
- }
-
- EINA_LIST_FOREACH(sd->items, l, it)
- {
- elm_hoversel_item_add(sd->hoversel, it->label, it->icon_file,
- it->icon_type, _hover_item_clicked_cb, it);
+ {
+ Eo *il = NULL;
+ il = efl_add(EFL_UI_LIST_DEFAULT_ITEM_CLASS, sd->popup_list);
+ efl_text_set(il, E_("Cancel"));
+ efl_gfx_hint_align_set(il, 1.0, 1.0);
+ efl_gfx_hint_weight_set(sd->popup_list, 1.0, 1.0);
+ efl_pack_end(sd->popup_list, il);
+ efl_event_callback_add(il, EFL_UI_EVENT_SELECTED_CHANGED, _popup_item_cancel_cb, obj);
+ }
}
- if (sd->hoversel)
+ if (sd->popup)
{
- _hoversel_position(obj);
- evas_object_show(sd->hoversel);
- elm_hoversel_hover_begin(sd->hoversel);
+ _popup_position(obj);
}
+ }
+}
- if (!_elm_config->desktop_entry)
+static Eina_Bool
+_is_pointer_inside_viewport(Eo *textbox,Efl_Ui_Textbox_Data *sd)
+{
+ if (sd->scroller)
+ {
+ Eo *top = efl_provider_find(textbox, EFL_UI_WIN_CLASS);
+ Eina_Position2D pos = {0};
+ if (efl_canvas_scene_pointer_position_get(top, NULL, &pos))
{
- edje_object_part_text_select_allow_set
- (sd->entry_edje, "efl.text", EINA_FALSE);
- edje_object_part_text_select_abort(sd->entry_edje, "efl.text");
+ Eina_Rect rc = efl_ui_scrollable_viewport_geometry_get(sd->scroller);
+ if (!eina_rectangle_coords_inside(&rc.rect, pos.x, pos.y))
+ return EINA_FALSE;
}
}
+ return EINA_TRUE;
}
static void
@@ -1281,6 +1052,9 @@ _long_press_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{
EFL_UI_TEXT_DATA_GET(data, sd);
+ if (!_is_pointer_inside_viewport(data, sd))
+ return;
+
/* Context menu will not appear if context menu disabled is set
* as false on a long press callback */
if (!_elm_config->context_menu_disabled &&
@@ -1290,74 +1064,57 @@ _long_press_cb(void *data, const Efl_Event *ev EINA_UNUSED)
sd->long_pressed = EINA_TRUE;
}
-static void
-_key_down_cb(void *data,
- Evas *evas EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info)
+
+static Eina_Bool
+_key_action_copy(Evas_Object *obj, const char *params EINA_UNUSED)
{
- Evas_Event_Key_Down *ev = event_info;
- Eina_Bool on_hold = EINA_FALSE;
+ efl_ui_textbox_selection_copy(obj);
+ return EINA_TRUE;
+}
- /* First check if context menu disabled is false or not, and
- * then check for key id */
- if ((!_elm_config->context_menu_disabled) && !strcmp(ev->key, "Menu"))
- {
- _menu_call(data);
- on_hold = EINA_TRUE;
- }
- else
- {
-#if defined(__APPLE__) && defined(__MACH__)
- Eina_Bool control = evas_key_modifier_is_set(ev->modifiers, "Super");
-#else
- Eina_Bool control = evas_key_modifier_is_set(ev->modifiers, "Control");
-#endif
+static Eina_Bool
+_key_action_cut(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+ efl_ui_textbox_selection_cut(obj);
+ return EINA_TRUE;
+}
- /* Ctrl operations */
- if (control)
- {
- if (!strncmp(ev->key, "c", 1))
- {
- efl_ui_textbox_selection_copy(data);
- on_hold = EINA_TRUE;
- }
- else if (!strncmp(ev->key, "x", 1))
- {
- efl_ui_textbox_selection_cut(data);
- on_hold = EINA_TRUE;
- }
- else if (!strncmp(ev->key, "v", 1))
- {
- efl_ui_textbox_selection_paste(data);
- on_hold = EINA_TRUE;
- }
- }
- }
+static Eina_Bool
+_key_action_paste(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+ efl_ui_textbox_selection_paste(obj);
+ return EINA_TRUE;
+}
- if (on_hold) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+static Eina_Bool
+_key_action_menu(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+ Eina_Bool b_ret = EINA_FALSE;
+ if (!_elm_config->context_menu_disabled)
+ {
+ _menu_call(obj);
+ b_ret = EINA_TRUE;
+ }
+ return b_ret;
}
static void
-_mouse_down_cb(void *data,
- Evas *evas EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info)
+_mouse_down_cb(void *data, const Efl_Event *event)
{
- Evas_Event_Mouse_Down *ev = event_info;
-
+ Efl_Input_Pointer_Data *ev;
+ ev = efl_data_scope_get(event->info, EFL_INPUT_POINTER_CLASS);
EFL_UI_TEXT_DATA_GET(data, sd);
if (efl_ui_widget_disabled_get(data)) return;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
- sd->downx = ev->canvas.x;
- sd->downy = ev->canvas.y;
+ sd->downx = ev->cur.x;
+ sd->downy = ev->cur.y;
sd->long_pressed = EINA_FALSE;
if (ev->button == 2)
{
- efl_ui_textbox_selection_paste(data);
+ _efl_ui_textbox_selection_paste_type(data, sd, EFL_UI_CNP_BUFFER_SELECTION);
}
/* If right button is pressed and context menu disabled is true,
@@ -1366,6 +1123,8 @@ _mouse_down_cb(void *data,
{
if (_elm_config->desktop_entry)
{
+ if (!_is_pointer_inside_viewport(data, sd))
+ return;
sd->use_down = 1;
_menu_call(data);
}
@@ -1373,14 +1132,11 @@ _mouse_down_cb(void *data,
}
static void
-_mouse_up_cb(void *data,
- Evas *evas EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info)
+_mouse_up_cb(void *data, const Efl_Event *event)
{
- Evas_Event_Mouse_Up *ev = event_info;
- Eina_Bool top_is_win = EINA_FALSE;
- Evas_Object *top;
+ Efl_Input_Pointer_Data *ev;
+ ev = efl_data_scope_get(event->info, EFL_INPUT_POINTER_CLASS);
+ Efl_Object *top;
EFL_UI_TEXT_DATA_GET(data, sd);
@@ -1401,15 +1157,9 @@ _mouse_up_cb(void *data,
}
else
{
- top = elm_widget_top_get(data);
- if (top)
- {
- if (efl_isa(top, EFL_UI_WIN_CLASS))
- top_is_win = EINA_TRUE;
-
- if (top_is_win && efl_input_text_input_panel_autoshow_get(data) && efl_input_text_input_panel_show_on_demand_get(data))
- elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON);
- }
+ top = efl_provider_find(data, EFL_UI_WIN_CLASS);
+ if (efl_input_text_input_panel_autoshow_get(data) && efl_input_text_input_panel_show_on_demand_get(data))
+ elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON);
}
}
/* Since context menu disabled flag was checked at mouse right key down,
@@ -1423,28 +1173,26 @@ _mouse_up_cb(void *data,
}
static void
-_mouse_move_cb(void *data,
- Evas *evas EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info)
+_mouse_move_cb(void *data, const Efl_Event *event)
{
- Evas_Event_Mouse_Move *ev = event_info;
+ Efl_Input_Pointer_Data *ev;
+ ev = efl_data_scope_get(event->info, EFL_INPUT_POINTER_CLASS);
Evas_Coord dx, dy;
EFL_UI_TEXT_DATA_GET(data, sd);
if (efl_ui_widget_disabled_get(data)) return;
- if (ev->buttons == 1)
+ if (ev->pressed_buttons == 1)
{
if (sd->long_pressed)
{
- Evas_Coord x, y;
+ Eina_Rect r;
Eina_Bool rv;
- evas_object_geometry_get(sd->entry_edje, &x, &y, NULL, NULL);
+ r = efl_gfx_entity_geometry_get(sd->entry_edje);
rv = edje_object_part_text_cursor_coord_set
(sd->entry_edje, "efl.text", EDJE_CURSOR_USER,
- ev->cur.canvas.x - x, ev->cur.canvas.y - y);
+ ev->cur.x - r.x, ev->cur.y - r.y);
if (rv)
{
edje_object_part_text_cursor_copy
@@ -1463,9 +1211,9 @@ _mouse_move_cb(void *data,
}
}
- dx = sd->downx - ev->cur.canvas.x;
+ dx = sd->downx - ev->cur.x;
dx *= dx;
- dy = sd->downy - ev->cur.canvas.y;
+ dy = sd->downy - ev->cur.y;
dy *= dy;
if ((dx + dy) > ((_elm_config->finger_size / 2) *
(_elm_config->finger_size / 2)))
@@ -1496,46 +1244,6 @@ _item_get(void *data, const char *item)
return o;
}
-EOLIAN static void
-_efl_ui_textbox_efl_layout_signal_signal_emit(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, const char *emission, const char *source)
-{
- /* always pass to both edje objs */
- efl_layout_signal_emit(sd->entry_edje, emission, source);
-
- // FIXME: This should not be here!
- efl_layout_signal_process(sd->entry_edje, EINA_TRUE);
-
- if (sd->scr_edje)
- {
- efl_layout_signal_emit(sd->scr_edje, emission, source);
- efl_layout_signal_process(sd->scr_edje, EINA_TRUE); // FIXME
- }
-}
-
-static Eina_Bool
-_efl_ui_textbox_efl_layout_signal_signal_callback_add(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd, const char *emission, const char *source, void *func_data, EflLayoutSignalCb func, Eina_Free_Cb func_free_cb)
-{
- Eina_Bool ok;
-
- ok = efl_layout_signal_callback_add(pd->entry_edje, emission, source, func_data, func, func_free_cb);
- if (pd->scr_edje)
- ok = efl_layout_signal_callback_add(pd->scr_edje, emission, source, func_data, func, func_free_cb);
-
- return ok;
-}
-
-static Eina_Bool
-_efl_ui_textbox_efl_layout_signal_signal_callback_del(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd, const char *emission, const char *source, void *func_data, EflLayoutSignalCb func, Eina_Free_Cb func_free_cb)
-{
- Eina_Bool ok;
-
- ok = efl_layout_signal_callback_del(pd->entry_edje, emission, source, func_data, func, func_free_cb);
- if (pd->scr_edje)
- ok = efl_layout_signal_callback_del(pd->scr_edje, emission, source, func_data, func, func_free_cb);
-
- return ok;
-}
-
static void
_selection_handlers_offset_calc(Evas_Object *obj, Evas_Object *handler)
{
@@ -1547,7 +1255,7 @@ _selection_handlers_offset_calc(Evas_Object *obj, Evas_Object *handler)
EFL_UI_TEXT_DATA_GET(obj, sd);
pos = efl_gfx_entity_position_get(sd->text_obj);
- rc = efl_text_cursor_geometry_get(
+ rc = efl_text_cursor_object_cursor_geometry_get(
efl_text_interactive_main_cursor_get(obj), EFL_TEXT_CURSOR_TYPE_BEFORE);
cx = rc.x;
cy = rc.y;
@@ -1571,16 +1279,13 @@ _selection_handlers_offset_calc(Evas_Object *obj, Evas_Object *handler)
}
static void
-_start_handler_mouse_down_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_start_handler_mouse_down_cb(void *data, const Efl_Event *event EINA_UNUSED)
{
EFL_UI_TEXT_DATA_GET(data, sd);
int start_pos, end_pos, pos;
- Efl_Text_Cursor *sel_start, *sel_end;
- Efl_Text_Cursor *main_cur;
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
+ Efl_Text_Cursor_Object *main_cur;
Eo *text_obj = sd->text_obj;
@@ -1590,8 +1295,8 @@ _start_handler_mouse_down_cb(void *data,
efl_text_interactive_selection_cursors_get(text_obj, &sel_start, &sel_end);
main_cur = efl_text_interactive_main_cursor_get(text_obj);
- start_pos = efl_text_cursor_position_get(sel_start);
- end_pos = efl_text_cursor_position_get(sel_end);
+ start_pos = efl_text_cursor_object_position_get(sel_start);
+ end_pos = efl_text_cursor_object_position_get(sel_end);
if (start_pos <= end_pos)
{
@@ -1603,15 +1308,12 @@ _start_handler_mouse_down_cb(void *data,
pos = end_pos;
sd->sel_handler_cursor = sel_end;
}
- efl_text_cursor_position_set(main_cur, pos);
+ efl_text_cursor_object_position_set(main_cur, pos);
_selection_handlers_offset_calc(data, sd->start_handler);
}
static void
-_start_handler_mouse_up_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_start_handler_mouse_up_cb(void *data, const Efl_Event *event EINA_UNUSED)
{
EFL_UI_TEXT_DATA_GET(data, sd);
@@ -1624,29 +1326,27 @@ _start_handler_mouse_up_cb(void *data,
}
static void
-_start_handler_mouse_move_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info)
+_start_handler_mouse_move_cb(void *data, const Efl_Event *event)
{
EFL_UI_TEXT_DATA_GET(data, sd);
if (!sd->start_handler_down) return;
- Evas_Event_Mouse_Move *ev = event_info;
- Evas_Coord ex, ey;
+ Efl_Input_Pointer_Data *ev;
+ ev = efl_data_scope_get(event->info, EFL_INPUT_POINTER_CLASS);
+ Eina_Rect re;
Evas_Coord cx, cy;
int pos;
- evas_object_geometry_get(sd->entry_edje, &ex, &ey, NULL, NULL);
- cx = ev->cur.canvas.x - sd->ox - ex;
- cy = ev->cur.canvas.y - sd->oy - ey;
+ re = efl_gfx_entity_geometry_get(sd->entry_edje);
+ cx = ev->cur.x - sd->ox - re.x;
+ cy = ev->cur.y - sd->oy - re.y;
if (cx <= 0) cx = 1;
- efl_text_cursor_char_coord_set(sd->sel_handler_cursor, EINA_POSITION2D(cx, cy));
- pos = efl_text_cursor_position_get(sd->sel_handler_cursor);
+ efl_text_cursor_object_char_coord_set(sd->sel_handler_cursor, EINA_POSITION2D(cx, cy));
+ pos = efl_text_cursor_object_position_get(sd->sel_handler_cursor);
/* Set the main cursor. */
- efl_text_cursor_position_set(
+ efl_text_cursor_object_position_set(
efl_text_interactive_main_cursor_get(sd->text_obj), pos);
efl_input_clickable_longpress_abort(data, 1);
@@ -1654,15 +1354,12 @@ _start_handler_mouse_move_cb(void *data,
}
static void
-_end_handler_mouse_down_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_end_handler_mouse_down_cb(void *data, const Efl_Event *event EINA_UNUSED)
{
EFL_UI_TEXT_DATA_GET(data, sd);
- Efl_Text_Cursor *sel_start, *sel_end;
- Efl_Text_Cursor *main_cur;
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
+ Efl_Text_Cursor_Object *main_cur;
int pos, start_pos, end_pos;
sd->end_handler_down = EINA_TRUE;
@@ -1672,8 +1369,8 @@ _end_handler_mouse_down_cb(void *data,
efl_text_interactive_selection_cursors_get(text_obj, &sel_start, &sel_end);
main_cur = efl_text_interactive_main_cursor_get(text_obj);
- start_pos = efl_text_cursor_position_get(sel_start);
- end_pos = efl_text_cursor_position_get(sel_end);
+ start_pos = efl_text_cursor_object_position_get(sel_start);
+ end_pos = efl_text_cursor_object_position_get(sel_end);
if (start_pos < end_pos)
{
@@ -1686,15 +1383,12 @@ _end_handler_mouse_down_cb(void *data,
sd->sel_handler_cursor = sel_start;
}
- efl_text_cursor_position_set(main_cur, pos);
+ efl_text_cursor_object_position_set(main_cur, pos);
_selection_handlers_offset_calc(data, sd->end_handler);
}
static void
-_end_handler_mouse_up_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
+_end_handler_mouse_up_cb(void *data, const Efl_Event *event EINA_UNUSED)
{
EFL_UI_TEXT_DATA_GET(data, sd);
@@ -1707,28 +1401,26 @@ _end_handler_mouse_up_cb(void *data,
}
static void
-_end_handler_mouse_move_cb(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED,
- void *event_info)
+_end_handler_mouse_move_cb(void *data, const Efl_Event *event)
{
EFL_UI_TEXT_DATA_GET(data, sd);
+ Efl_Input_Pointer_Data *ev;
+ ev = efl_data_scope_get(event->info, EFL_INPUT_POINTER_CLASS);
if (!sd->end_handler_down) return;
- Evas_Event_Mouse_Move *ev = event_info;
- Evas_Coord ex, ey;
+ Eina_Rect re;
Evas_Coord cx, cy;
int pos;
- evas_object_geometry_get(sd->entry_edje, &ex, &ey, NULL, NULL);
- cx = ev->cur.canvas.x - sd->ox - ex;
- cy = ev->cur.canvas.y - sd->oy - ey;
+ re = efl_gfx_entity_geometry_get(sd->entry_edje);
+ cx = ev->cur.x - sd->ox - re.x;
+ cy = ev->cur.y - sd->oy - re.y;
if (cx <= 0) cx = 1;
- efl_text_cursor_char_coord_set(sd->sel_handler_cursor, EINA_POSITION2D(cx, cy));
- pos = efl_text_cursor_position_get(sd->sel_handler_cursor);
+ efl_text_cursor_object_char_coord_set(sd->sel_handler_cursor, EINA_POSITION2D(cx, cy));
+ pos = efl_text_cursor_object_position_get(sd->sel_handler_cursor);
/* Set the main cursor. */
- efl_text_cursor_position_set(efl_text_interactive_main_cursor_get(data), pos);
+ efl_text_cursor_object_position_set(efl_text_interactive_main_cursor_get(data), pos);
efl_input_clickable_longpress_abort(data, 1);
sd->long_pressed = EINA_FALSE;
}
@@ -1739,46 +1431,40 @@ _create_selection_handlers(Evas_Object *obj, Efl_Ui_Textbox_Data *sd)
Evas_Object *handle;
handle = _decoration_create(obj, sd, PART_NAME_HANDLER_START, EINA_TRUE);
- evas_object_pass_events_set(handle, EINA_FALSE);
+ efl_canvas_object_pass_events_set(handle, EINA_FALSE);
sd->start_handler = handle;
- evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_DOWN,
+ efl_event_callback_add(handle, EFL_EVENT_POINTER_DOWN,
_start_handler_mouse_down_cb, obj);
- evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_MOVE,
+ efl_event_callback_add(handle, EFL_EVENT_POINTER_MOVE,
_start_handler_mouse_move_cb, obj);
- evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_UP,
+ efl_event_callback_add(handle, EFL_EVENT_POINTER_UP,
_start_handler_mouse_up_cb, obj);
- evas_object_show(handle);
+ efl_gfx_entity_visible_set(handle, EINA_TRUE);
handle = _decoration_create(obj, sd, PART_NAME_HANDLER_END, EINA_TRUE);
- evas_object_pass_events_set(handle, EINA_FALSE);
+ efl_canvas_object_pass_events_set(handle, EINA_FALSE);
sd->end_handler = handle;
- evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_DOWN,
+ efl_event_callback_add(handle, EFL_EVENT_POINTER_DOWN,
_end_handler_mouse_down_cb, obj);
- evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_MOVE,
+ efl_event_callback_add(handle, EFL_EVENT_POINTER_MOVE,
_end_handler_mouse_move_cb, obj);
- evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_UP,
+ efl_event_callback_add(handle, EFL_EVENT_POINTER_UP,
_end_handler_mouse_up_cb, obj);
- evas_object_show(handle);
+ efl_gfx_entity_visible_set(handle, EINA_TRUE);
}
EOLIAN static void
_efl_ui_textbox_efl_gfx_entity_position_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Eina_Position2D pos)
{
- if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y))
- return;
-
efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
efl_gfx_entity_position_set(sd->hit_rect, pos);
- if (sd->hoversel) _hoversel_position(obj);
+ if (sd->popup) _popup_position(obj);
}
EOLIAN static void
_efl_ui_textbox_efl_gfx_entity_size_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Eina_Size2D sz)
{
- if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h))
- return;
-
efl_gfx_entity_size_set(sd->hit_rect, sz);
_update_selection_handler(obj);
@@ -1788,9 +1474,6 @@ _efl_ui_textbox_efl_gfx_entity_size_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Eina_S
EOLIAN static void
_efl_ui_textbox_efl_gfx_entity_visible_set(Eo *obj, Efl_Ui_Textbox_Data *sd EINA_UNUSED, Eina_Bool vis)
{
- if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis))
- return;
-
efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), vis);
if (vis) _update_selection_handler(obj);
}
@@ -1801,7 +1484,7 @@ _efl_ui_textbox_efl_canvas_group_group_member_add(Eo *obj, Efl_Ui_Textbox_Data *
efl_canvas_group_member_add(efl_super(obj, MY_CLASS), member);
if (sd->hit_rect)
- evas_object_raise(sd->hit_rect);
+ efl_gfx_stack_raise_to_top(sd->hit_rect);
}
static void
@@ -1912,35 +1595,52 @@ _update_text_theme(Eo *obj, Efl_Ui_Textbox_Data *sd)
// Main Text
// font_set
- font_name = edje_object_data_get(wd->resize_obj, "font.name");
- font_size = edje_object_data_get(wd->resize_obj, "font.size");
- font_size_n = font_size ? atoi(font_size) : 0;
- efl_text_font_family_set(sd->text_obj, font_name);
- efl_text_font_size_set(sd->text_obj, font_size_n);
+ if (!efl_text_font_family_get(sd->text_obj))
+ {
+ font_name = efl_layout_group_data_get(wd->resize_obj, "font.name");
+ efl_text_font_family_set(sd->text_obj, font_name);
+ }
+ if (!efl_text_font_size_get(sd->text_obj))
+ {
+ font_size = efl_layout_group_data_get(wd->resize_obj, "font.size");
+ font_size_n = font_size ? atoi(font_size) : 0;
+ efl_text_font_size_set(sd->text_obj, font_size_n);
+ }
// color
- if (disabled)
- colorcode = edje_object_data_get(wd->resize_obj, "style.color_disabled");
- if (!colorcode)
- colorcode = edje_object_data_get(wd->resize_obj, "style.color");
- if (colorcode && _format_color_parse(colorcode, strlen(colorcode), &r, &g, &b, &a))
- {
- efl_text_color_set(sd->text_obj, r, g, b, a);
+ if (!sd->color_is_set)
+ {
+ // If user set color by him self, we will not change it back even if
+ // control become disabled.
+ if (disabled)
+ colorcode = efl_layout_group_data_get(wd->resize_obj, "style.color_disabled");
+ if (!colorcode)
+ colorcode = efl_layout_group_data_get(wd->resize_obj, "style.color");
+ if (colorcode && _format_color_parse(colorcode, strlen(colorcode), &r, &g, &b, &a))
+ {
+ efl_text_color_set(sd->text_obj, r, g, b, a);
+ }
}
// Guide Text
- font_name = edje_object_data_get(wd->resize_obj, "guide.font.name");
- font_size = edje_object_data_get(wd->resize_obj, "guide.font.size");
- font_size_n = font_size ? atoi(font_size) : 0;
- efl_text_font_family_set(sd->text_guide_obj, font_name);
- efl_text_font_size_set(sd->text_guide_obj, font_size_n);
+ if (!efl_text_font_family_get(sd->text_guide_obj))
+ {
+ font_name = efl_layout_group_data_get(wd->resize_obj, "guide.font.name");
+ efl_text_font_family_set(sd->text_guide_obj, font_name);
+ }
+ if (!efl_text_font_size_get(sd->text_guide_obj))
+ {
+ font_size = efl_layout_group_data_get(wd->resize_obj, "guide.font.size");
+ font_size_n = font_size ? atoi(font_size) : 0;
+ efl_text_font_size_set(sd->text_guide_obj, font_size_n);
+ }
colorcode = NULL;
// color
if (disabled)
- colorcode = edje_object_data_get(wd->resize_obj, "guide.style.color_disabled");
+ colorcode = efl_layout_group_data_get(wd->resize_obj, "guide.style.color_disabled");
if (!colorcode)
- colorcode = edje_object_data_get(wd->resize_obj, "guide.style.color");
+ colorcode = efl_layout_group_data_get(wd->resize_obj, "guide.style.color");
if (colorcode && _format_color_parse(colorcode, strlen(colorcode), &r, &g, &b, &a))
{
efl_text_color_set(sd->text_guide_obj, r, g, b, a);
@@ -1952,10 +1652,18 @@ _efl_ui_textbox_efl_object_constructor(Eo *obj, Efl_Ui_Textbox_Data *sd)
{
Eo *text_obj;
+ sd->content = EFL_UI_TEXTBOX_CNP_CONTENT_MARKUP;
+
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
if (!elm_widget_theme_klass_get(obj))
elm_widget_theme_klass_set(obj, "text");
+
+ efl_event_callback_add(obj, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, _selection_lost_cb, NULL);
+ efl_event_callback_add(obj, EFL_UI_DND_EVENT_DROP_ENTERED, _dnd_enter_cb, NULL);
+ efl_event_callback_add(obj, EFL_UI_DND_EVENT_DROP_POSITION_CHANGED, _dnd_pos_cb, NULL);
+ efl_event_callback_add(obj, EFL_UI_DND_EVENT_DROP_DROPPED, _dnd_drop_cb, NULL);
+
obj = efl_constructor(efl_super(obj, MY_CLASS));
efl_event_callback_add(obj, EFL_INPUT_EVENT_LONGPRESSED, _long_press_cb, obj);
@@ -1972,15 +1680,11 @@ _efl_ui_textbox_efl_object_constructor(Eo *obj, Efl_Ui_Textbox_Data *sd)
efl_composite_attach(obj, text_obj);
sd->entry_edje = wd->resize_obj;
- sd->cnp_mode = EFL_UI_SELECTION_FORMAT_TEXT;
- sd->line_wrap = ELM_WRAP_WORD;
sd->context_menu_enabled = EINA_TRUE;
- sd->auto_save = EINA_TRUE;
efl_text_interactive_editable_set(obj, EINA_TRUE);
efl_text_interactive_selection_allowed_set(obj, EINA_TRUE);
- sd->drop_format = EFL_UI_SELECTION_FORMAT_MARKUP | EFL_UI_SELECTION_FORMAT_IMAGE;
sd->last.scroll = EINA_SIZE2D(0, 0);
- sd->sel_handler_enabled = EINA_FALSE;
+ sd->sel_handles_enabled = EINA_FALSE;
return obj;
}
@@ -1991,40 +1695,15 @@ _efl_ui_textbox_efl_object_finalize(Eo *obj,
{
obj = efl_finalize(efl_super(obj, MY_CLASS));
- ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
-
- elm_drop_target_add(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
-
- if (elm_widget_theme_object_set(obj, wd->resize_obj,
- elm_widget_theme_klass_get(obj),
- elm_widget_theme_element_get(obj),
- elm_widget_theme_style_get(obj)) == EFL_UI_THEME_APPLY_ERROR_GENERIC)
- CRI("Failed to set layout!");
-
efl_access_object_role_set(obj, EFL_ACCESS_ROLE_ENTRY);
- //TODO: complete the usage of the text theme
- _update_text_theme(obj, sd);
- //efl_text_font_set(sd->text_obj, "Sans", 12);
-
- efl_pack_table(sd->text_table, sd->text_obj, 0, 0, 1, 1);
- efl_pack_table(sd->text_table, sd->text_guide_obj, 0, 0, 1, 1);
-
- //edje_object_part_swallow(sd->entry_edje, "efl.text", sd->text_obj);
- //edje_object_part_swallow(sd->entry_edje, "efl.text_guide", sd->text_guide_obj);
- edje_object_part_swallow(sd->entry_edje, "efl.text", sd->text_table);
-
_update_guide_text(obj, sd);
sd->item_fallback_factory = efl_add(EFL_UI_TEXT_FACTORY_FALLBACK_CLASS, obj);
- evas_object_size_hint_weight_set
+ efl_gfx_hint_weight_set
(sd->entry_edje, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set
+ efl_gfx_hint_align_set
(sd->entry_edje, EVAS_HINT_FILL, EVAS_HINT_FILL);
efl_event_callback_add(sd->text_obj, EFL_TEXT_INTERACTIVE_EVENT_CHANGED_USER,
_efl_ui_textbox_changed_user_cb, obj);
@@ -2034,21 +1713,19 @@ _efl_ui_textbox_efl_object_finalize(Eo *obj,
_efl_ui_textbox_selection_start_clear_cb, obj);
efl_event_callback_add(sd->text_obj, EFL_TEXT_INTERACTIVE_EVENT_SELECTION_CHANGED,
_efl_ui_textbox_selection_changed_cb, obj);
- efl_event_callback_add(efl_text_interactive_main_cursor_get(sd->text_obj), EFL_TEXT_CURSOR_EVENT_CHANGED,
+ efl_event_callback_add(efl_text_interactive_main_cursor_get(sd->text_obj), EFL_TEXT_CURSOR_OBJECT_EVENT_CHANGED,
_efl_ui_textbox_cursor_changed_cb, obj);
efl_event_callback_add(sd->text_obj, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED,
_text_position_changed_cb, obj);
- evas_object_event_callback_add(sd->entry_edje, EVAS_CALLBACK_MOVE,
+ efl_event_callback_add(sd->entry_edje, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED,
_efl_ui_textbox_move_cb, obj);
- evas_object_event_callback_add
- (sd->entry_edje, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, obj);
- evas_object_event_callback_add
- (sd->entry_edje, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, obj);
- evas_object_event_callback_add
- (sd->entry_edje, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, obj);
- evas_object_event_callback_add
- (sd->entry_edje, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, obj);
+ efl_event_callback_add
+ (sd->entry_edje, EFL_EVENT_POINTER_DOWN, _mouse_down_cb, obj);
+ efl_event_callback_add
+ (sd->entry_edje, EFL_EVENT_POINTER_UP, _mouse_up_cb, obj);
+ efl_event_callback_add
+ (sd->entry_edje, EFL_EVENT_POINTER_MOVE, _mouse_move_cb, obj);
efl_ui_action_connector_bind_clickable_to_object(sd->entry_edje, obj);
efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
@@ -2059,11 +1736,7 @@ _efl_ui_textbox_efl_object_finalize(Eo *obj,
efl_input_text_input_panel_layout_set(obj, EFL_INPUT_TEXT_PANEL_LAYOUT_TYPE_NORMAL);
efl_input_text_input_panel_autoshow_set(obj, EINA_TRUE);
efl_input_text_predictable_set(obj, EINA_TRUE);
- efl_input_text_input_hint_set(obj, EFL_INPUT_TEXT_HINTS_TYPE_AUTO_COMPLETE);
-
- _mirrored_set(obj, efl_ui_mirrored_get(obj));
-
- _create_text_cursors(obj, sd);
+ efl_input_text_input_content_type_set(obj, EFL_INPUT_TEXT_CONTENT_TYPE_AUTO_COMPLETE);
sd->calc_force = EINA_TRUE;
@@ -2074,72 +1747,53 @@ _efl_ui_textbox_efl_object_finalize(Eo *obj,
EOLIAN static void
_efl_ui_textbox_efl_object_destructor(Eo *obj, Efl_Ui_Textbox_Data *sd)
{
- Elm_Entry_Context_Menu_Item *it;
- Elm_Entry_Markup_Filter *tf;
-
- if (sd->delay_write)
- {
- ELM_SAFE_FREE(sd->delay_write, ecore_timer_del);
- if (sd->auto_save) _save_do(obj);
- }
-
efl_event_freeze(obj);
- eina_stringshare_del(sd->file);
-
- ecore_job_del(sd->hov_deljob);
+ _popup_dismiss(sd);
if ((sd->api) && (sd->api->obj_unhook))
sd->api->obj_unhook(obj); // module - unhook
- evas_object_del(sd->mgf_proxy);
- evas_object_del(sd->mgf_bg);
- evas_object_del(sd->mgf_clip);
-
entries = eina_list_remove(entries, obj);
- eina_stringshare_del(sd->cut_sel);
eina_stringshare_del(sd->text);
- ecore_job_del(sd->deferred_decoration_job);
- if (sd->append_text_idler)
- {
- ecore_idler_del(sd->append_text_idler);
- ELM_SAFE_FREE(sd->append_text_left, free);
- sd->append_text_idler = NULL;
- }
- EINA_LIST_FREE(sd->items, it)
- {
- eina_stringshare_del(it->label);
- eina_stringshare_del(it->icon_file);
- eina_stringshare_del(it->icon_group);
- free(it);
- }
- EINA_LIST_FREE(sd->markup_filters, tf)
- {
- _filter_free(tf);
- }
- ELM_SAFE_FREE(sd->delay_write, ecore_timer_del);
- free(sd->input_panel_imdata);
eina_stringshare_del(sd->anchor_hover.hover_style);
efl_event_thaw(obj);
if (sd->start_handler)
{
- evas_object_del(sd->start_handler);
- evas_object_del(sd->end_handler);
+ efl_del(sd->start_handler);
+ efl_del(sd->end_handler);
}
_anchors_free(sd);
_clear_text_selection(sd);
- ecore_job_del(sd->deferred_decoration_job);
- sd->deferred_decoration_job = NULL;
-
if (sd->item_factory) efl_unref(sd->item_factory);
efl_destructor(efl_super(obj, MY_CLASS));
}
EOLIAN static void
+_efl_ui_textbox_efl_text_format_multiline_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Eina_Bool enabled)
+{
+ enabled = !!enabled;
+ if (efl_text_multiline_get(obj) == enabled) return;
+ efl_text_multiline_set(sd->text_obj, enabled);
+
+ if (sd->scroller)
+ {
+ if (enabled)
+ {
+ efl_ui_internal_text_scroller_mode_set(sd->scroller, EFL_UI_TEXT_SCROLLER_MODE_MULTILINE);
+ }
+ else
+ {
+ efl_ui_internal_text_scroller_mode_set(sd->scroller, EFL_UI_TEXT_SCROLLER_MODE_SINGLELINE);
+ }
+ }
+}
+
+EOLIAN static void
_efl_ui_textbox_efl_text_format_password_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Eina_Bool password)
{
password = !!password;
@@ -2149,34 +1803,26 @@ _efl_ui_textbox_efl_text_format_password_set(Eo *obj, Efl_Ui_Textbox_Data *sd, E
efl_text_replacement_char_set(obj, ENTRY_PASSWORD_MASK_CHARACTER_UTF8);
efl_text_password_set(sd->text_obj, password);
- elm_drop_target_del(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
if (password)
{
efl_text_multiline_set(obj, EINA_FALSE);
- sd->line_wrap = ELM_WRAP_NONE;
- efl_input_text_input_hint_set(obj, ((efl_input_text_input_hint_get(obj) & ~EFL_INPUT_TEXT_HINTS_TYPE_AUTO_COMPLETE) | EFL_INPUT_TEXT_HINTS_TYPE_SENSITIVE_DATA));
+ efl_input_text_input_content_type_set(obj, ((efl_input_text_input_content_type_get(obj) & ~EFL_INPUT_TEXT_CONTENT_TYPE_AUTO_COMPLETE) | EFL_INPUT_TEXT_CONTENT_TYPE_SENSITIVE_DATA));
efl_access_object_role_set(obj, EFL_ACCESS_ROLE_PASSWORD_TEXT);
}
else
{
efl_text_multiline_set(obj, EINA_TRUE);
- sd->drop_format = _get_drop_format(obj);
- elm_drop_target_add(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
- efl_input_text_input_hint_set(obj, ((efl_input_text_input_hint_get(obj) | EFL_INPUT_TEXT_HINTS_TYPE_AUTO_COMPLETE) & ~EFL_INPUT_TEXT_HINTS_TYPE_SENSITIVE_DATA));
+ efl_input_text_input_content_type_set(obj, ((efl_input_text_input_content_type_get(obj) | EFL_INPUT_TEXT_CONTENT_TYPE_AUTO_COMPLETE) & ~EFL_INPUT_TEXT_CONTENT_TYPE_SENSITIVE_DATA));
efl_access_object_role_set(obj, EFL_ACCESS_ROLE_ENTRY);
}
-
- efl_ui_widget_theme_apply(obj);
}
+EOLIAN static void
+_efl_ui_textbox_efl_text_style_text_color_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+ pd->color_is_set = EINA_TRUE;
+ efl_text_color_set(pd->text_obj, r, g, b, a);
+}
static void
_efl_ui_textbox_calc_force(Eo *obj, Efl_Ui_Textbox_Data *sd)
{
@@ -2188,47 +1834,41 @@ _efl_ui_textbox_calc_force(Eo *obj, Efl_Ui_Textbox_Data *sd)
static const char*
_efl_ui_textbox_selection_get(const Eo *obj, Efl_Ui_Textbox_Data *sd EINA_UNUSED)
{
- Efl_Text_Cursor *start_obj, *end_obj;
+ Efl_Text_Cursor_Object *start_obj, *end_obj;
if ((efl_text_password_get(obj))) return NULL;
efl_text_interactive_selection_cursors_get(obj, &start_obj, &end_obj);
- return efl_text_cursor_range_text_get(start_obj, end_obj);
+ return efl_text_cursor_object_range_text_get(start_obj, end_obj);
}
EOLIAN static void
-_efl_ui_textbox_selection_handler_enabled_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool enabled)
+_efl_ui_textbox_selection_handles_enabled_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool enabled)
{
- if (sd->sel_handler_enabled == enabled) return;
- sd->sel_handler_enabled = enabled;
+ if (sd->sel_handles_enabled == enabled) return;
+ sd->sel_handles_enabled = enabled;
}
EOLIAN static Eina_Bool
-_efl_ui_textbox_selection_handler_enabled_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+_efl_ui_textbox_selection_handles_enabled_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
{
- return sd->sel_handler_enabled;
+ return sd->sel_handles_enabled;
}
static void
_efl_ui_textbox_entry_insert(Eo *obj, Efl_Ui_Textbox_Data *sd, const char *entry)
{
- Efl_Text_Cursor *cur_obj = efl_text_interactive_main_cursor_get(obj);
- efl_text_cursor_text_insert(cur_obj, entry);
+ Efl_Text_Cursor_Object *cur_obj = efl_text_interactive_main_cursor_get(obj);
+ efl_text_cursor_object_text_insert(cur_obj, entry);
sd->text_changed = EINA_TRUE;
efl_canvas_group_change(obj);
}
-EOLIAN static void
-_efl_ui_textbox_cursor_add(Eo *obj, Efl_Ui_Textbox_Data *pd, Efl_Text_Cursor *cursor)
-{
- efl_text_cursor_text_object_set(cursor, pd->text_obj, obj);
-}
-
-EOLIAN static Efl_Text_Cursor *
+EOLIAN static Efl_Text_Cursor_Object *
_efl_ui_textbox_cursor_create(Eo *obj, Efl_Ui_Textbox_Data *pd)
{
- Eo* cursor = efl_add(EFL_TEXT_CURSOR_CLASS, pd->text_obj);
- efl_text_cursor_text_object_set(cursor, pd->text_obj, obj);
+ Eo* cursor = efl_text_cursor_object_create(pd->text_obj);;
+ efl_text_cursor_object_text_object_set(cursor, pd->text_obj, obj);
return cursor;
}
@@ -2239,52 +1879,51 @@ _efl_ui_textbox_efl_text_interactive_editable_set(Eo *obj, Efl_Ui_Textbox_Data *
efl_text_interactive_editable_set(efl_super(obj, MY_CLASS), editable);
- efl_ui_widget_theme_apply(obj);
efl_ui_widget_focus_allow_set(obj, editable);
- elm_drop_target_del(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
if (editable)
{
- sd->drop_format = _get_drop_format(obj);
- elm_drop_target_add(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
if (sd->cursor)
{
- evas_object_show(sd->cursor);
- evas_object_show(sd->cursor_bidi);
+ efl_gfx_entity_visible_set(sd->cursor, EINA_TRUE);
+ efl_gfx_entity_visible_set(sd->cursor_bidi, EINA_TRUE);
}
}
if (!editable && sd->cursor)
{
- evas_object_hide(sd->cursor);
- evas_object_hide(sd->cursor_bidi);
+ efl_gfx_entity_visible_set(sd->cursor, EINA_FALSE);
+ efl_gfx_entity_visible_set(sd->cursor_bidi, EINA_FALSE);
}
}
static void
_efl_ui_textbox_select_region_set(Eo *obj, Efl_Ui_Textbox_Data *sd EINA_UNUSED, int start, int end)
{
- Efl_Text_Cursor *sel_start, *sel_end;
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
if (efl_text_password_get(obj)) return;
efl_text_interactive_selection_cursors_get(obj, &sel_start, &sel_end);
- efl_text_cursor_position_set(sel_start, start);
- efl_text_cursor_position_set(sel_end, end);
+ efl_text_cursor_object_position_set(sel_start, start);
+ efl_text_cursor_object_position_set(sel_end, end);
+}
+
+static void
+_efl_ui_textbox_select_region_get(Eo *obj, int *start, int *end)
+{
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
+
+ efl_text_interactive_selection_cursors_get(obj, &sel_start, &sel_end);
+
+ if(start) *start = efl_text_cursor_object_position_get(sel_start);
+ if(end) *end = efl_text_cursor_object_position_get(sel_end);
}
EOLIAN static void
_efl_ui_textbox_selection_cut(Eo *obj, Efl_Ui_Textbox_Data *sd)
{
- Efl_Text_Cursor *start, *end;
+ Efl_Text_Cursor_Object *start, *end;
Efl_Text_Change_Info info = { NULL, 0, 0, 0, 0 };
char *tmp;
int end_pos, start_pos;
@@ -2294,24 +1933,24 @@ _efl_ui_textbox_selection_cut(Eo *obj, Efl_Ui_Textbox_Data *sd)
if (!_elm_config->desktop_entry)
edje_object_part_text_select_allow_set
(sd->entry_edje, "efl.text", EINA_FALSE);
- edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl");
+ efl_layout_signal_emit(sd->entry_edje, "efl,state,select,off", "efl");
if (!_elm_config->desktop_entry)
- elm_widget_scroll_hold_pop(obj);
+ efl_ui_widget_scroll_hold_pop(obj);
/*In password mode, cut will remove text only*/
if (!efl_text_password_get(obj))
- _selection_store(EFL_UI_SELECTION_TYPE_CLIPBOARD, obj);
+ _selection_store(EFL_UI_CNP_BUFFER_COPY_AND_PASTE, obj);
efl_text_interactive_selection_cursors_get(obj, &start, &end);
- start_pos = efl_text_cursor_position_get(start);
- end_pos = efl_text_cursor_position_get(end);
- tmp = efl_text_cursor_range_text_get(start, end);
- info.insert = EINA_FALSE;
+ start_pos = efl_text_cursor_object_position_get(start);
+ end_pos = efl_text_cursor_object_position_get(end);
+ tmp = efl_text_cursor_object_range_text_get(start, end);
+ info.type = EFL_TEXT_CHANGE_TYPE_REMOVE;
info.position = start_pos;
info.length = end_pos - start_pos;
info.content = tmp;
- efl_text_cursor_range_delete(start, end);
+ efl_text_cursor_object_range_delete(start, end);
efl_event_callback_call(obj, EFL_TEXT_INTERACTIVE_EVENT_CHANGED_USER, &info);
free(tmp);
tmp = NULL;
@@ -2330,22 +1969,30 @@ _efl_ui_textbox_selection_copy(Eo *obj, Efl_Ui_Textbox_Data *sd)
{
edje_object_part_text_select_allow_set
(sd->entry_edje, "efl.text", EINA_FALSE);
- edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl");
- elm_widget_scroll_hold_pop(obj);
+ efl_layout_signal_emit(sd->entry_edje, "efl,state,select,off", "efl");
+ efl_ui_widget_scroll_hold_pop(obj);
}
- _selection_store(EFL_UI_SELECTION_TYPE_CLIPBOARD, obj);
+ _selection_store(EFL_UI_CNP_BUFFER_COPY_AND_PASTE, obj);
efl_event_callback_call(obj, EFL_UI_TEXTBOX_EVENT_SELECTION_COPY, NULL);
}
-
-EOLIAN static void
-_efl_ui_textbox_selection_paste(Eo *obj, Efl_Ui_Textbox_Data *sd EINA_UNUSED)
+static void
+_efl_ui_textbox_selection_paste_type(Eo *obj, Efl_Ui_Textbox_Data *sd, Efl_Ui_Cnp_Buffer type)
{
- Efl_Ui_Selection_Format formats = EFL_UI_SELECTION_FORMAT_TEXT | EFL_UI_SELECTION_FORMAT_MARKUP;
+ Eina_Future *future;
+ Eina_Array *types = _figure_out_types(obj, sd);
- efl_ui_selection_get(obj, EFL_UI_SELECTION_TYPE_CLIPBOARD, formats,
- NULL, _selection_data_cb, NULL, 1);
+ future = efl_ui_selection_get(obj, type, evas_device_seat_id_get(evas_default_device_get(evas_object_evas_get(obj), EVAS_DEVICE_CLASS_SEAT)), eina_array_iterator_new(types));
+
+ efl_future_then(obj, future, _selection_data_cb);
efl_event_callback_call(obj, EFL_UI_TEXTBOX_EVENT_SELECTION_PASTE, NULL);
+ eina_array_free(types);
+}
+
+EOLIAN static void
+_efl_ui_textbox_selection_paste(Eo *obj, Efl_Ui_Textbox_Data *sd)
+{
+ _efl_ui_textbox_selection_paste_type(obj, sd, EFL_UI_CNP_BUFFER_COPY_AND_PASTE);
}
EOLIAN static void
@@ -2361,90 +2008,38 @@ _efl_ui_textbox_context_menu_enabled_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textb
return sd->context_menu_enabled;
}
-EOLIAN static Eina_Error
-_efl_ui_textbox_efl_file_file_set(Eo *obj, Efl_Ui_Textbox_Data *sd, const char *file)
-{
- eina_stringshare_replace(&sd->file, file);
- return efl_file_set(efl_super(obj, MY_CLASS), file);
-}
-
-EOLIAN static void
-_efl_ui_textbox_efl_file_unload(Eo *obj, Efl_Ui_Textbox_Data *sd)
-{
- efl_file_unload(efl_super(obj, MY_CLASS));
- ELM_SAFE_FREE(sd->delay_write, ecore_timer_del);
- elm_object_text_set(obj, "");
-}
-
-EOLIAN static Eina_Error
-_efl_ui_textbox_efl_file_load(Eo *obj, Efl_Ui_Textbox_Data *sd)
-{
- Eina_Error err;
-
- if (efl_file_loaded_get(obj)) return 0;
- err = efl_file_load(efl_super(obj, MY_CLASS));
- if (err) return err;
- ELM_SAFE_FREE(sd->delay_write, ecore_timer_del);
- if (sd->auto_save) _save_do(obj);
- return _load_do(obj);
-}
-
EOLIAN static void
-_efl_ui_textbox_cnp_mode_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Efl_Ui_Selection_Format cnp_mode)
+_efl_ui_textbox_cnp_dnd_mode_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Efl_Ui_Textbox_Cnp_Content content)
{
- Elm_Sel_Format dnd_format = EFL_UI_SELECTION_FORMAT_MARKUP;
-
- if (cnp_mode != EFL_UI_SELECTION_FORMAT_TARGETS)
- {
- if (cnp_mode & EFL_UI_SELECTION_FORMAT_VCARD)
- ERR("VCARD format not supported for copy & paste!");
- else if (cnp_mode & EFL_UI_SELECTION_FORMAT_HTML)
- ERR("HTML format not supported for copy & paste!");
- cnp_mode &= ~EFL_UI_SELECTION_FORMAT_VCARD;
- cnp_mode &= ~EFL_UI_SELECTION_FORMAT_HTML;
- }
-
- if (sd->cnp_mode == cnp_mode) return;
- sd->cnp_mode = cnp_mode;
- if (sd->cnp_mode == EFL_UI_SELECTION_FORMAT_TEXT)
- dnd_format = EFL_UI_SELECTION_FORMAT_TEXT;
- else if (cnp_mode == EFL_UI_SELECTION_FORMAT_IMAGE)
- dnd_format |= EFL_UI_SELECTION_FORMAT_IMAGE;
-
- elm_drop_target_del(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
- sd->drop_format = dnd_format;
- elm_drop_target_add(obj, sd->drop_format,
- _dnd_enter_cb, NULL,
- _dnd_leave_cb, NULL,
- _dnd_pos_cb, NULL,
- _dnd_drop_cb, NULL);
+ sd->content = content;
}
-EOLIAN static Efl_Ui_Selection_Format
-_efl_ui_textbox_cnp_mode_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+EOLIAN static Efl_Ui_Textbox_Cnp_Content
+_efl_ui_textbox_cnp_dnd_mode_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
{
- return sd->cnp_mode;
+ return sd->content;
}
EOLIAN static void
-_efl_ui_textbox_scrollable_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool scroll)
+_efl_ui_textbox_scrollable_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Eina_Bool scroll)
{
if (sd->scroll == scroll) return;
sd->scroll = scroll;
if (scroll)
{
- edje_object_part_swallow(sd->entry_edje, "efl.text", NULL);
+ efl_content_set(efl_part(sd->entry_edje, "efl.text"), NULL);
sd->scroller = efl_add(EFL_UI_INTERNAL_TEXT_SCROLLER_CLASS, obj,
efl_ui_internal_text_scroller_initialize(efl_added,
sd->text_obj, sd->text_table));
- efl_ui_scrollbar_bar_mode_set(sd->scroller, EFL_UI_SCROLLBAR_MODE_AUTO, EFL_UI_SCROLLBAR_MODE_AUTO);
- edje_object_part_swallow(sd->entry_edje, "efl.text", sd->scroller);
- evas_object_clip_set(sd->cursor,
+
+ if (efl_text_multiline_get(obj))
+ efl_ui_internal_text_scroller_mode_set(sd->scroller, EFL_UI_TEXT_SCROLLER_MODE_MULTILINE);
+ else
+ efl_ui_internal_text_scroller_mode_set(sd->scroller, EFL_UI_TEXT_SCROLLER_MODE_SINGLELINE);
+
+ efl_content_set(efl_part(sd->entry_edje, "efl.text"), sd->scroller);
+ efl_canvas_object_clipper_set(sd->cursor,
efl_ui_internal_text_scroller_viewport_clip_get(sd->scroller));
efl_event_callback_add(sd->scroller, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
_scroller_size_changed_cb, obj);
@@ -2455,7 +2050,7 @@ _efl_ui_textbox_scrollable_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Ein
* instead of efl_content_set(sd->scroller, NULL)
*/
efl_content_unset(sd->scroller);
- edje_object_part_swallow(sd->entry_edje, "efl.text", sd->text_table);
+ efl_content_set(efl_part(sd->entry_edje, "efl.text"), sd->text_table);
efl_del(sd->scroller);
sd->scroller = NULL;
}
@@ -2475,8 +2070,8 @@ _efl_ui_textbox_efl_ui_widget_on_access_activate(Eo *obj, Efl_Ui_Textbox_Data *_
EFL_UI_TEXT_DATA_GET(obj, sd);
- if (!elm_widget_disabled_get(obj) &&
- !evas_object_freeze_events_get(obj))
+ if (!efl_ui_widget_disabled_get(obj) &&
+ !(efl_event_freeze_count_get(obj) > 0))
{
efl_event_callback_call(obj, EFL_INPUT_EVENT_CLICKED, NULL);
if (efl_text_interactive_editable_get(obj) && efl_input_text_input_panel_autoshow_get(obj))
@@ -2516,11 +2111,13 @@ _efl_ui_textbox_efl_access_text_character_count_get(const Eo *obj, Efl_Ui_Textbo
return eina_unicode_utf8_get_len(txt);
}
-EOLIAN static char*
-_efl_ui_textbox_efl_access_text_string_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd, Efl_Access_Text_Granularity granularity, int *start_offset, int *end_offset)
+EOLIAN static void
+_efl_ui_textbox_efl_access_text_string_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd, Efl_Access_Text_Granularity granularity, int *start_offset, int *end_offset, char **ret EFL_TRANSFER_OWNERSHIP)
{
Evas_Textblock_Cursor *cur = NULL, *cur2 = NULL;
- char *ret = NULL;
+
+ EINA_SAFETY_ON_NULL_RETURN(ret);
+ *ret = NULL;
cur = evas_object_textblock_cursor_new(pd->text_obj);
cur2 = evas_object_textblock_cursor_new(pd->text_obj);
@@ -2575,26 +2172,26 @@ _efl_ui_textbox_efl_access_text_string_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tex
if (end_offset) *end_offset = evas_textblock_cursor_pos_get(cur2);
- ret = evas_textblock_cursor_range_text_get(cur, cur2, EVAS_TEXTBLOCK_TEXT_PLAIN);
+ *ret = evas_textblock_cursor_range_text_get(cur, cur2, EVAS_TEXTBLOCK_TEXT_PLAIN);
evas_textblock_cursor_free(cur);
evas_textblock_cursor_free(cur2);
- if (ret && efl_text_password_get(obj))
+ if (*ret && efl_text_password_get(obj))
{
int i = 0;
- while (ret[i] != '\0')
- ret[i++] = ENTRY_PASSWORD_MASK_CHARACTER;
+ while (*ret[i] != '\0')
+ *ret[i++] = ENTRY_PASSWORD_MASK_CHARACTER;
}
- return ret;
+ return;
fail:
if (start_offset) *start_offset = -1;
if (end_offset) *end_offset = -1;
if (cur) evas_textblock_cursor_free(cur);
if (cur2) evas_textblock_cursor_free(cur2);
- return NULL;
+ *ret = NULL;
}
EOLIAN static char*
@@ -2637,13 +2234,13 @@ fail:
EOLIAN static int
_efl_ui_textbox_efl_access_text_caret_offset_get(const Eo *obj, Efl_Ui_Textbox_Data *_pd EINA_UNUSED)
{
- return efl_text_cursor_position_get(efl_text_interactive_main_cursor_get(obj));
+ return efl_text_cursor_object_position_get(efl_text_interactive_main_cursor_get(obj));
}
EOLIAN static Eina_Bool
_efl_ui_textbox_efl_access_text_caret_offset_set(Eo *obj, Efl_Ui_Textbox_Data *_pd EINA_UNUSED, int offset)
{
- efl_text_cursor_position_set(efl_text_interactive_main_cursor_get(obj), offset);
+ efl_text_cursor_object_position_set(efl_text_interactive_main_cursor_get(obj), offset);
return EINA_TRUE;
}
@@ -2658,7 +2255,7 @@ _efl_ui_textbox_efl_access_text_access_selection_get(const Eo *obj, Efl_Ui_Textb
{
if (selection_number != 0) return;
- elm_obj_entry_select_region_get(obj, start_offset, end_offset);
+ _efl_ui_textbox_select_region_get((Eo *)obj, start_offset, end_offset);
}
EOLIAN static Eina_Bool
@@ -2827,7 +2424,7 @@ _textblock_node_format_to_atspi_text_attr(Efl_Text_Attribute_Handle *annotation)
EOLIAN static Eina_Bool
_efl_ui_textbox_efl_access_text_attribute_get(const Eo *obj, Efl_Ui_Textbox_Data *_pd EINA_UNUSED, const char *attr_name EINA_UNUSED, int *start_offset, int *end_offset, char **value)
{
- Efl_Text_Cursor *cur1, *cur2;
+ Efl_Text_Cursor_Object *cur1, *cur2;
Efl_Access_Text_Attribute *attr;
Eina_Iterator *annotations;
Efl_Text_Attribute_Handle *an;
@@ -2843,8 +2440,8 @@ _efl_ui_textbox_efl_access_text_attribute_get(const Eo *obj, Efl_Ui_Textbox_Data
return EINA_FALSE;
}
- efl_text_cursor_position_set(cur1, *start_offset);
- efl_text_cursor_position_set(cur2, *end_offset);
+ efl_text_cursor_object_position_set(cur1, *start_offset);
+ efl_text_cursor_object_position_set(cur2, *end_offset);
annotations = efl_text_formatter_range_attributes_get(cur1, cur2);
@@ -2870,44 +2467,45 @@ _efl_ui_textbox_efl_access_text_attribute_get(const Eo *obj, Efl_Ui_Textbox_Data
return EINA_FALSE;
}
-EOLIAN static Eina_List*
-_efl_ui_textbox_efl_access_text_text_attributes_get(const Eo *obj, Efl_Ui_Textbox_Data *pd EINA_UNUSED, int *start_offset, int *end_offset)
+EOLIAN static void
+_efl_ui_textbox_efl_access_text_text_attributes_get(const Eo *obj, Efl_Ui_Textbox_Data *pd EINA_UNUSED, int *start_offset, int *end_offset, Eina_List **ret EFL_TRANSFER_OWNERSHIP)
{
- Efl_Text_Cursor *cur1, *cur2;
- Eina_List *ret = NULL;
+ Efl_Text_Cursor_Object *cur1, *cur2;
Efl_Access_Text_Attribute *attr;
Eina_Iterator *annotations;
Efl_Text_Attribute_Handle *an;
Eo *mobj = (Eo *)obj;
+
+ EINA_SAFETY_ON_NULL_RETURN(ret);
+ *ret = NULL;
+
cur1 = efl_ui_textbox_cursor_create(mobj);
- if (!cur1) return NULL;
+ if (!cur1) return;
cur2 = efl_ui_textbox_cursor_create(mobj);
if (!cur2)
{
efl_del(cur1);
- return NULL;
+ return;
}
- efl_text_cursor_position_set(cur1, *start_offset);
- efl_text_cursor_position_set(cur2, *end_offset);
+ efl_text_cursor_object_position_set(cur1, *start_offset);
+ efl_text_cursor_object_position_set(cur2, *end_offset);
annotations = efl_text_formatter_range_attributes_get(cur1, cur2);
efl_del(cur1);
efl_del(cur2);
- if (!annotations) return NULL;
+ if (!annotations) return;
EINA_ITERATOR_FOREACH(annotations, an)
{
attr = _textblock_node_format_to_atspi_text_attr(an);
if (!attr) continue;
- ret = eina_list_append(ret, attr);
+ *ret = eina_list_append(*ret, attr);
}
eina_iterator_free(annotations);
-
- return ret;
}
EOLIAN static Eina_List*
@@ -2915,7 +2513,7 @@ _efl_ui_textbox_efl_access_text_default_attributes_get(const Eo *obj, Efl_Ui_Tex
{
Eina_List *ret = NULL;
Efl_Access_Text_Attribute *attr;
- Efl_Text_Cursor *start, *end;
+ Efl_Text_Cursor_Object *start, *end;
Eina_Iterator *annotations;
Efl_Text_Attribute_Handle *an;
@@ -2924,8 +2522,8 @@ _efl_ui_textbox_efl_access_text_default_attributes_get(const Eo *obj, Efl_Ui_Tex
start = efl_ui_textbox_cursor_create(mobj);
end = efl_ui_textbox_cursor_create(mobj);
- efl_text_cursor_move(start, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
- efl_text_cursor_move(end, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ efl_text_cursor_object_move(start, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ efl_text_cursor_object_move(end, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
annotations = efl_text_formatter_range_attributes_get(start, end);
@@ -2950,8 +2548,8 @@ _efl_ui_textbox_efl_access_editable_text_text_content_set(Eo *obj, Efl_Ui_Textbo
EOLIAN static Eina_Bool
_efl_ui_textbox_efl_access_editable_text_insert(Eo *obj, Efl_Ui_Textbox_Data *pd, const char *string, int position)
{
- Efl_Text_Cursor *cur_obj = efl_text_interactive_main_cursor_get(obj);
- efl_text_cursor_position_set(cur_obj, position);
+ Efl_Text_Cursor_Object *cur_obj = efl_text_interactive_main_cursor_get(obj);
+ efl_text_cursor_object_position_set(cur_obj, position);
_efl_ui_textbox_entry_insert(obj, pd, string);
return EINA_TRUE;
@@ -3000,8 +2598,8 @@ _efl_ui_textbox_efl_access_editable_text_delete(Eo *obj, Efl_Ui_Textbox_Data *pd
EOLIAN static Eina_Bool
_efl_ui_textbox_efl_access_editable_text_paste(Eo *obj, Efl_Ui_Textbox_Data *_pd EINA_UNUSED, int position)
{
- Efl_Text_Cursor *cur_obj = efl_text_interactive_main_cursor_get(obj);
- efl_text_cursor_position_set(cur_obj, position);
+ Efl_Text_Cursor_Object *cur_obj = efl_text_interactive_main_cursor_get(obj);
+ efl_text_cursor_object_position_set(cur_obj, position);
efl_ui_textbox_selection_paste(obj);
return EINA_TRUE;
}
@@ -3039,9 +2637,9 @@ _efl_ui_textbox_efl_access_object_i18n_name_get(const Eo *obj, Efl_Ui_Textbox_Da
static void
_edje_signal_emit(Efl_Ui_Textbox_Data *sd, const char *sig, const char *src)
{
- edje_object_signal_emit(sd->entry_edje, sig, src);
- edje_object_signal_emit(sd->cursor, sig, src);
- edje_object_signal_emit(sd->cursor_bidi, sig, src);
+ efl_layout_signal_emit(sd->entry_edje, sig, src);
+ efl_layout_signal_emit(sd->cursor, sig, src);
+ efl_layout_signal_emit(sd->cursor_bidi, sig, src);
}
static inline Eo *
@@ -3053,17 +2651,17 @@ _decoration_create(Eo *obj, Efl_Ui_Textbox_Data *sd,
ret = efl_add(EFL_CANVAS_LAYOUT_CLASS, obj);
elm_widget_element_update(obj, ret, group_name);
- evas_object_smart_member_add(ret, sd->entry_edje);
+ efl_canvas_group_member_add(sd->entry_edje, ret);
if (above)
{
- evas_object_stack_above(ret, sd->text_table);
+ efl_gfx_stack_above(ret, sd->text_table);
}
else
{
- evas_object_stack_below(ret, NULL);
+ efl_gfx_stack_below(ret, NULL);
}
- evas_object_clip_set(ret, clip);
- evas_object_pass_events_set(ret, EINA_TRUE);
+ efl_canvas_object_clipper_set(ret, clip);
+ efl_canvas_object_pass_events_set(ret, EINA_TRUE);
return ret;
}
@@ -3075,8 +2673,8 @@ _create_text_cursors(Eo *obj, Efl_Ui_Textbox_Data *sd)
if (!efl_text_interactive_editable_get(obj))
{
- evas_object_hide(sd->cursor);
- evas_object_hide(sd->cursor_bidi);
+ efl_gfx_entity_visible_set(sd->cursor, EINA_FALSE);
+ efl_gfx_entity_visible_set(sd->cursor_bidi, EINA_FALSE);
}
}
@@ -3113,8 +2711,8 @@ _update_text_cursors(Eo *obj)
xx = yy = ww = hh = -1;
off =_decoration_calc_offset(sd);
- rc_tmp1 = efl_text_cursor_geometry_get(efl_text_interactive_main_cursor_get(text_obj), EFL_TEXT_CURSOR_TYPE_BEFORE);
- bidi_cursor = efl_text_cursor_lower_cursor_geometry_get(efl_text_interactive_main_cursor_get(text_obj), &rc_tmp2);
+ rc_tmp1 = efl_text_cursor_object_cursor_geometry_get(efl_text_interactive_main_cursor_get(text_obj), EFL_TEXT_CURSOR_TYPE_BEFORE);
+ bidi_cursor = efl_text_cursor_object_lower_cursor_geometry_get(efl_text_interactive_main_cursor_get(text_obj), &rc_tmp2);
xx = rc_tmp1.x;
yy = rc_tmp1.y;
ww = rc_tmp1.w;
@@ -3124,21 +2722,21 @@ _update_text_cursors(Eo *obj)
if (hh < 1) hh = 1;
if (sd->cursor)
{
- evas_object_geometry_set(sd->cursor, off.x + xx, off.y + yy, ww, hh);
+ efl_gfx_entity_geometry_set(sd->cursor, EINA_RECT(off.x + xx, off.y + yy, ww, hh));
}
if (sd->cursor_bidi)
{
if (bidi_cursor)
{
- evas_object_geometry_set(sd->cursor_bidi,
- off.x + rc_tmp2.x, off.y + rc_tmp2.y + (hh / 2),
- ww, hh / 2);
- evas_object_resize(sd->cursor, ww, hh / 2);
- evas_object_show(sd->cursor_bidi);
+ efl_gfx_entity_geometry_set(sd->cursor_bidi,
+ EINA_RECT(off.x + rc_tmp2.x, off.y + rc_tmp2.y + (hh / 2),
+ ww, hh / 2));
+ efl_gfx_entity_size_set(sd->cursor, EINA_SIZE2D(ww, hh / 2));
+ efl_gfx_entity_visible_set(sd->cursor_bidi, EINA_TRUE);
}
else
{
- evas_object_hide(sd->cursor_bidi);
+ efl_gfx_entity_visible_set(sd->cursor_bidi, EINA_FALSE);
}
}
if (sd->cursor_update)
@@ -3164,7 +2762,7 @@ static void
_update_text_selection(Eo *obj, Eo *text_obj)
{
Eina_Position2D off;
- Efl_Text_Cursor *sel_start, *sel_end;
+ Efl_Text_Cursor_Object *sel_start, *sel_end;
Eina_List *l;
Eina_Iterator *range;
@@ -3180,7 +2778,7 @@ _update_text_selection(Eo *obj, Eo *text_obj)
efl_text_interactive_selection_cursors_get(text_obj, &sel_start, &sel_end);
- range = efl_text_cursor_range_geometry_get(sel_start, sel_end);
+ range = efl_text_cursor_object_range_geometry_get(sel_start, sel_end);
l = sd->sel;
EINA_ITERATOR_FOREACH(range, r)
@@ -3192,7 +2790,7 @@ _update_text_selection(Eo *obj, Eo *text_obj)
sd->sel = eina_list_append(sd->sel, rect);
rect->obj_bg = _decoration_create(obj, sd, PART_NAME_SELECTION, EINA_FALSE);
- evas_object_show(rect->obj_bg);
+ efl_gfx_entity_visible_set(rect->obj_bg, EINA_TRUE);
}
else
{
@@ -3202,8 +2800,8 @@ _update_text_selection(Eo *obj, Eo *text_obj)
if (rect->obj_bg)
{
- evas_object_geometry_set(rect->obj_bg, off.x + r->x, off.y + r->y,
- r->w, r->h);
+ efl_gfx_entity_geometry_set(rect->obj_bg, EINA_RECT(off.x + r->x, off.y + r->y,
+ r->w, r->h));
}
}
eina_iterator_free(range);
@@ -3330,7 +2928,7 @@ _anchors_update(Eo *obj, Efl_Ui_Textbox_Data *sd)
Evas_Object *smart, *clip;
Eina_Iterator *it;
Eina_Position2D off;
- Efl_Text_Cursor *start, *end;
+ Efl_Text_Cursor_Object *start, *end;
Efl_Text_Attribute_Handle *an;
Eina_List *i, *ii;
Anchor *anc;
@@ -3344,15 +2942,15 @@ _anchors_update(Eo *obj, Efl_Ui_Textbox_Data *sd)
end = efl_canvas_textblock_cursor_create(sd->text_obj);
/* Retrieve all annotations in the text. */
- efl_text_cursor_move(start, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
- efl_text_cursor_move(end, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ efl_text_cursor_object_move(start, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ efl_text_cursor_object_move(end, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
it = efl_text_formatter_range_attributes_get(start, end);
efl_del(start);
efl_del(end);
- smart = evas_object_smart_parent_get(obj);
- clip = evas_object_clip_get(sd->text_obj);
+ smart = efl_canvas_object_render_parent_get(obj);
+ clip = efl_canvas_object_clipper_get(sd->text_obj);
off = _decoration_calc_offset(sd);
EINA_ITERATOR_FOREACH(it, an)
@@ -3405,7 +3003,7 @@ _anchors_update(Eo *obj, Efl_Ui_Textbox_Data *sd)
end = efl_ui_textbox_cursor_create(obj);
efl_text_formatter_attribute_cursors_get(anc->annotation, start, end);
- range = efl_text_cursor_range_geometry_get(start, end);
+ range = efl_text_cursor_object_range_geometry_get(start, end);
count = eina_list_count(eina_iterator_container_get(range));
// Add additional rectangles if needed
@@ -3419,12 +3017,12 @@ _anchors_update(Eo *obj, Efl_Ui_Textbox_Data *sd)
ob = _decoration_create(obj, sd, PART_NAME_ANCHOR, EINA_TRUE);
rect->obj_fg = ob;
// hit-rectangle
- ob = evas_object_rectangle_add(obj);
- evas_object_color_set(ob, 0, 0, 0, 0);
- evas_object_smart_member_add(ob, smart);
- evas_object_stack_above(ob, obj);
- evas_object_clip_set(ob, clip);
- evas_object_repeat_events_set(ob, EINA_TRUE);
+ ob = efl_add(EFL_CANVAS_RECTANGLE_CLASS, obj);
+ efl_gfx_color_set(ob, 0, 0, 0, 0);
+ efl_canvas_group_member_add(smart, ob);
+ efl_gfx_stack_above(ob, obj);
+ efl_canvas_object_clipper_set(ob, clip);
+ efl_canvas_object_repeat_events_set(ob, EINA_TRUE);
rect->obj = ob;
//FIXME: add event handlers
}
@@ -3450,24 +3048,24 @@ _anchors_update(Eo *obj, Efl_Ui_Textbox_Data *sd)
rect = eina_list_data_get(l);
if (rect->obj_bg)
{
- evas_object_geometry_set(rect->obj_bg,
- off.x + r->x, off.y + r->y,
- r->w, r->h);
- evas_object_show(rect->obj_bg);
+ efl_gfx_entity_geometry_set(rect->obj_bg,
+ EINA_RECT(off.x + r->x, off.y + r->y,
+ r->w, r->h));
+ efl_gfx_entity_visible_set(rect->obj_bg, EINA_TRUE);
}
if (rect->obj_fg)
{
- evas_object_geometry_set(rect->obj_fg,
- off.x + r->x, off.y + r->y,
- r->w, r->h);
- evas_object_show(rect->obj_fg);
+ efl_gfx_entity_geometry_set(rect->obj_fg,
+ EINA_RECT(off.x + r->x, off.y + r->y,
+ r->w, r->h));
+ efl_gfx_entity_visible_set(rect->obj_fg, EINA_TRUE);
}
if (rect->obj)
{
- evas_object_geometry_set(rect->obj,
- off.x + r->x, off.y + r->y,
- r->w, r->h);
- evas_object_show(rect->obj);
+ efl_gfx_entity_geometry_set(rect->obj,
+ EINA_RECT(off.x + r->x, off.y + r->y,
+ r->w, r->h));
+ efl_gfx_entity_visible_set(rect->obj, EINA_TRUE);
}
l = eina_list_next(l);
@@ -3511,23 +3109,24 @@ _update_decorations(Eo *obj)
efl_event_thaw(sd->text_obj);
}
-static void
-_deferred_decoration_job(void *data)
+static Eina_Value
+_deferred_decoration_job(Eo *o, void *data EINA_UNUSED, const Eina_Value value EINA_UNUSED)
{
- EFL_UI_TEXT_DATA_GET(data, sd);
- _update_decorations(data);
+ EFL_UI_TEXT_DATA_GET(o, sd);
+ _update_decorations(o);
sd->deferred_decoration_job = NULL;
+
+ return EINA_VALUE_EMPTY;
}
static void
_decoration_defer(Eo *obj)
{
EFL_UI_TEXT_DATA_GET(obj, sd);
- if (!sd->deferred_decoration_job)
- {
- sd->deferred_decoration_job =
- ecore_job_add(_deferred_decoration_job, obj);
- }
+ if (sd->deferred_decoration_job) return;
+
+ Eina_Future *f = efl_loop_job(efl_main_loop_get());
+ sd->deferred_decoration_job = efl_future_then(obj, f, _deferred_decoration_job);
}
static void
@@ -3635,13 +3234,12 @@ _efl_ui_textbox_selection_changed_cb(void *data, const Efl_Event *event EINA_UNU
Eo *obj = data;
EFL_UI_TEXT_DATA_GET(obj, sd);
_edje_signal_emit(sd, "selection,changed", "efl.text");
- _selection_store(EFL_UI_SELECTION_TYPE_PRIMARY, obj);
+ _selection_store(EFL_UI_CNP_BUFFER_SELECTION, obj);
_selection_defer(obj, sd);
}
static void
-_efl_ui_textbox_move_cb(void *data, Evas *e EINA_UNUSED,
- Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+_efl_ui_textbox_move_cb(void *data, const Efl_Event *event EINA_UNUSED)
{
_decoration_defer_all(data);
}
@@ -3660,20 +3258,162 @@ _efl_ui_textbox_item_factory_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data
return pd->item_factory;
}
-/* Efl.Part begin */
+/*Efl.Ui.Scrollable*/
+EOLIAN static Eina_Size2D
+_efl_ui_textbox_efl_ui_scrollable_content_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_SIZE2D(0, 0));
+ return efl_ui_scrollable_content_size_get(sd->scroller);
+}
+
+EOLIAN static Eina_Rect
+_efl_ui_textbox_efl_ui_scrollable_viewport_geometry_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_RECT_EMPTY());
+ return efl_ui_scrollable_viewport_geometry_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_match_content_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool w, Eina_Bool h)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ return efl_ui_scrollable_match_content_set(sd->scroller, !!w, !!h);
+}
-#define STRCMP(X, Y) strncmp((X), (Y), strlen(X))
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_step_size_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Position2D step)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_step_size_set(sd->scroller, step);
+}
+
+EOLIAN static Eina_Position2D
+_efl_ui_textbox_efl_ui_scrollable_step_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_POSITION2D(0, 0));
+ return efl_ui_scrollable_step_size_get(sd->scroller);
+}
+
+EOLIAN static Eina_Position2D
+_efl_ui_textbox_efl_ui_scrollable_content_pos_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_POSITION2D(0, 0));
+ return efl_ui_scrollable_content_pos_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_content_pos_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Position2D pos)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_content_pos_set(sd->scroller, pos);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_textbox_efl_ui_scrollable_scroll_hold_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_FALSE);
+ return efl_ui_scrollable_scroll_hold_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_scroll_hold_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool hold)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_scroll_hold_set(sd->scroller, !!hold);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_textbox_efl_ui_scrollable_scroll_freeze_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EINA_FALSE);
+ return efl_ui_scrollable_scroll_freeze_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_scroll_freeze_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool freeze)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_scroll_freeze_set(sd->scroller, !!freeze);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_bounce_enabled_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool horiz, Eina_Bool vert)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_bounce_enabled_set(sd->scroller, !!horiz, !!vert);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_bounce_enabled_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool *horiz, Eina_Bool *vert)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_bounce_enabled_get(sd->scroller, horiz, vert);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_scroll(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Rect rect, Eina_Bool animation)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_scroll(sd->scroller, rect, animation);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_gravity_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, double *x, double *y)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_gravity_get(sd->scroller, x, y);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_gravity_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, double x, double y)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_gravity_set(sd->scroller, x, y);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_movement_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Efl_Ui_Layout_Orientation block)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_movement_block_set(sd->scroller, block);
+}
+
+EOLIAN static Efl_Ui_Layout_Orientation
+_efl_ui_textbox_efl_ui_scrollable_movement_block_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(sd->scroller, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
+ return efl_ui_scrollable_movement_block_get(sd->scroller);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_looping_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool loop_h, Eina_Bool loop_v)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_looping_set(sd->scroller, !!loop_h, !!loop_v);
+}
+
+EOLIAN static void
+_efl_ui_textbox_efl_ui_scrollable_looping_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool *loop_h, Eina_Bool *loop_v)
+{
+ EINA_SAFETY_ON_NULL_RETURN(sd->scroller);
+ efl_ui_scrollable_looping_get(sd->scroller, loop_h, loop_v);
+}
+
+/* Efl.Part begin */
static Eina_Bool
_efl_ui_textbox_text_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd,
const char *part, const char *text)
{
- if (!STRCMP("efl.text_guide", part))
+ if (!part) return EINA_FALSE;
+
+ if (!strcmp("efl.text_guide", part))
{
efl_text_set(pd->text_guide_obj, text);
return EINA_TRUE;
}
- else if (!STRCMP("efl.text", part))
+ else if (!strcmp("efl.text", part))
{
efl_text_set(pd->text_obj, text);
return EINA_TRUE;
@@ -3686,11 +3426,13 @@ static const char *
_efl_ui_textbox_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd,
const char *part)
{
- if (!STRCMP("efl.text_guide", part))
+ if (!part) return NULL;
+
+ if (!strcmp("efl.text_guide", part))
{
return efl_text_get(pd->text_guide_obj);
}
- else if (!STRCMP("efl.text", part))
+ else if (!strcmp("efl.text", part))
{
return efl_text_get(pd->text_obj);
}
@@ -3698,48 +3440,24 @@ _efl_ui_textbox_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *pd,
return NULL;
}
-#undef STRCMP
-
static Eina_Bool
-_part_is_efl_ui_text_part(const Eo *obj EINA_UNUSED, const char *part)
+_part_is_efl_ui_textbox_part(const Eo *obj EINA_UNUSED, const char *part)
{
- //Use Efl.Ui.Widget's "background" and "shadow" parts
- if (eina_streq(part, "background") || eina_streq(part, "shadow"))
- return EINA_FALSE;
+ if (eina_streq(part, "efl.text_guide") || eina_streq(part, "efl.text"))
+ return EINA_TRUE;
- return EINA_TRUE;
+ return EINA_FALSE;
}
-//FIXME
-//ELM_PART_OVERRIDE_PARTIAL(efl_ui_text, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data, _part_is_efl_ui_text_part)
-EOLIAN static Efl_Object *
-_efl_ui_textbox_efl_part_part_get(const Eo *obj, Efl_Ui_Textbox_Data *priv EINA_UNUSED, const char *part)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
- if (_part_is_efl_ui_text_part(obj, part)) return ELM_PART_IMPLEMENT(EFL_UI_TEXT_PART_CLASS, obj, part);
- return efl_part_get(efl_super(obj, EFL_UI_TEXTBOX_CLASS), part);
-}
+/* Standard widget overrides */
-//FIXME
-//ELM_PART_OVERRIDE_TEXT_SET(efl_ui_text, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data)
-EOLIAN static void
-_efl_ui_text_part_efl_text_text_set(Eo *obj, void *_pd EINA_UNUSED, const char *text)
-{
- Elm_Part_Data *pd = efl_data_scope_get(obj, efl_ui_widget_part_class_get());
- Efl_Ui_Textbox_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_TEXTBOX_CLASS);
- _efl_ui_textbox_text_set(pd->obj, sd, pd->part, text);
-}
+ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_textbox, Efl_Ui_Textbox_Data)
-//FIXME
-//ELM_PART_OVERRIDE_TEXT_GET(efl_ui_text, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data)
-EOLIAN static const char *
-_efl_ui_text_part_efl_text_text_get(const Eo *obj, void *_pd EINA_UNUSED)
-{
- Elm_Part_Data *pd = efl_data_scope_get(obj, efl_ui_widget_part_class_get());
- Efl_Ui_Textbox_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_TEXTBOX_CLASS);
- return _efl_ui_textbox_text_get(pd->obj, sd, pd->part);
-}
-#include "efl_ui_text_part.eo.c"
+ELM_PART_OVERRIDE_PARTIAL(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data, _part_is_efl_ui_textbox_part)
+ELM_PART_OVERRIDE_TEXT_SET(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data)
+ELM_PART_OVERRIDE_TEXT_GET(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data)
+
+#include "efl_ui_textbox_part.eo.c"
/* Efl.Part end */
diff --git a/src/lib/elementary/efl_ui_textbox.eo b/src/lib/elementary/efl_ui_textbox.eo
index 9104d436b2..1c63b602a1 100644
--- a/src/lib/elementary/efl_ui_textbox.eo
+++ b/src/lib/elementary/efl_ui_textbox.eo
@@ -1,62 +1,79 @@
-class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Clickable,
- Efl.Access.Text, Efl.Access.Editable.Text, Efl.File, Efl.Input_Text
+enum @beta Efl.Ui.Textbox_Cnp_Content {
+ [[What kind of content can be pasted into this widget using Copy & Paste or Drag & Drop functionality.
+
+ Multiple options can be OR-ed together.
+ ]]
+ Nothing = 0, [[Nothing can be pasted or dropped into this widget.]]
+ Text = 1, [[Plain text can be pasted or dropped into this widget.]]
+ Markup = 3, [[Markup text can be pasted or dropped into this widget
+ (This includes Plain text).]]
+ Image = 4, [[Images can be pasted or dropped into this widget.]]
+}
+
+class Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Clickable,
+ Efl.Access.Text, Efl.Access.Editable.Text, Efl.Ui.Scrollable
composites
- Efl.Text_Interactive, Efl.Text_Markup
+ Efl.Text_Interactive, Efl.Text_Markup, Efl.Input_Text.Entity
{
[[A flexible text widget which can be static (as a label) or editable by
the user (as a text entry). It provides all sorts of editing facilities
like automatic scrollbars, virtual keyboard, clipboard, configurable
- context menus or autocapitalization, for example.]]
+ context menus or auto-capitalization, for example.
+ @since 1.24]]
methods {
@property scrollable {
[[Enable or disable scrolling in the widget.
When scrolling is enabled scrollbars will appear if the text does
- not fit the widget size.]]
+ not fit the widget size.
+
+ Direct control of the scroll through the @Efl.Ui.Scrollable interface
+ is only possible when this property is enabled.
+ ]]
set {}
get {}
values {
- scroll: bool; [[$true to enable scrolling. Default is $false.]]
+ scroll: bool(false); [[$true to enable scrolling.]]
}
}
@property context_menu_enabled {
- [[This enables or disables the entry's contextual (longpress) menu.]]
+ [[This enables or disables the widget's contextual menu, typically
+ accessible through a long-press or a right-button click.
+ ]]
set {
}
get {
}
values {
- enabled: bool; [[If $true, the menu is enabled.]]
+ enabled: bool; [[$true to enable the contextual menu.]]
}
}
- @property cnp_mode {
- /* FIXME: Efl.Ui.Selection_Format does not allow markup without images! */
- [[Control pasting of text and images for the widget.
-
- Normally the entry allows both text and images to be pasted.
+ @property cnp_dnd_mode @beta {
+ [[Controls the type of content which can be pasted into the widget.
- Note: This only changes the behaviour of text.
+ By default, both text and images are allowed..
]]
set {
}
get {
}
values {
- format: Efl.Ui.Selection_Format; [[Format for copy & paste.]]
+ allowed_formats : Efl.Ui.Textbox_Cnp_Content; [[Allowed content types.]]
}
}
- @property selection_handler_enabled {
- [[This enables or disables the entry's selection handlers.]]
+ @property selection_handles_enabled {
+ [[This enables or disables the visual handles around selected text,
+ to allow simpler modification on touch screens.]]
set {
}
get {
}
values {
- enabled: bool; [[If $true, the selection handlers are enabled.]]
+ enabled: bool; [[$true to enable the selection handles.]]
}
}
- @property item_factory {
+ @property item_factory @beta {
[[The factory that provides item in the text e.g.
"emoticon/happy" or "href=file://image.jpg" etc.
]]
@@ -64,25 +81,18 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
item_factory: Efl.Canvas.Textblock_Factory; [[Factory to create items]]
}
}
- cursor_add {
- [[Add cursor that will manipulate and iterate content of the text object.
- It is typically more convenient to obtain a cursor directly from the text object using @.cursor_create.]]
- params {
- cursor: Efl.Text.Cursor; [[Text cursor.]]
- }
- }
cursor_create {
[[Creates and returns a new cursor for the text.]]
- return: Efl.Text.Cursor @move; [[Text cursor.]]
+ return: Efl.Text_Cursor.Object @move; [[Text cursor.]]
}
selection_copy {
- [[This executes a "copy" action on the selected text in the entry.]]
+ [[This executes a "copy" action on the selected text in the widget.]]
}
selection_paste {
- [[This executes a "paste" action in the entry.]]
+ [[This executes a "paste" action in the widget.]]
}
selection_cut {
- [[This executes a "cut" action on the selected text in the entry.]]
+ [[This executes a "cut" action on the selected text in the widget.]]
}
}
implements {
@@ -94,18 +104,15 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
Efl.Gfx.Entity.size { set; }
Efl.Canvas.Group.group_member_add;
Efl.Canvas.Group.group_calculate;
- Efl.Layout.Signal.signal_callback_add;
- Efl.Layout.Signal.signal_callback_del;
- Efl.Layout.Signal.signal_emit;
Efl.Ui.Widget.on_access_activate;
Efl.Ui.Widget.theme_apply;
+ Efl.Ui.Widget.widget_input_event_handler;
Efl.Ui.Focus.Object.on_focus_update;
Efl.Ui.Widget.interest_region { get; }
Efl.Ui.Widget.disabled {set;}
Efl.Text_Format.password {set;}
- //Efl.Ui.Widget.widget_sub_object_del;
- //Elm.Interface_Scrollable.policy { set; }
- //Elm.Interface_Scrollable.bounce_allow { set; }
+ Efl.Text_Format.multiline {set;}
+ Efl.Text_Style.text_color { set; }
Efl.Access.Object.state_set { get; }
Efl.Access.Object.i18n_name { get; }
Efl.Access.Text.access_text { get; }
@@ -130,11 +137,20 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
Efl.Access.Editable.Text.cut;
Efl.Access.Editable.Text.delete;
Efl.Access.Editable.Text.paste;
- Efl.File.file { set; }
- Efl.File.load;
- Efl.File.unload;
Efl.Text_Interactive.editable { set; }
Efl.Part.part_get;
+ Efl.Ui.Scrollable.content_pos { set; get; }
+ Efl.Ui.Scrollable.content_size{ get; }
+ Efl.Ui.Scrollable.viewport_geometry{ get; }
+ Efl.Ui.Scrollable.bounce_enabled { set; get; }
+ Efl.Ui.Scrollable.scroll_freeze { get; set; }
+ Efl.Ui.Scrollable.scroll_hold { get; set; }
+ Efl.Ui.Scrollable.looping { get; set; }
+ Efl.Ui.Scrollable.movement_block { get; set; }
+ Efl.Ui.Scrollable.gravity { get; set; }
+ Efl.Ui.Scrollable.match_content { set; }
+ Efl.Ui.Scrollable.step_size { set; get; }
+ Efl.Ui.Scrollable.scroll;
}
events {
selection,paste: void; [[Called when selection is pasted.]]
diff --git a/src/lib/elementary/efl_ui_textbox_part.eo b/src/lib/elementary/efl_ui_textbox_part.eo
new file mode 100644
index 0000000000..e05e89e525
--- /dev/null
+++ b/src/lib/elementary/efl_ui_textbox_part.eo
@@ -0,0 +1,8 @@
+class @beta Efl.Ui.Textbox_Part extends Efl.Ui.Layout_Part_Text
+{
+ [[Efl UI Textbox internal part class]]
+ data: null;
+ implements {
+ Efl.Text.text { set; get; }
+ }
+}
diff --git a/src/lib/elementary/efl_ui_textpath.c b/src/lib/elementary/efl_ui_textpath.c
index a3bac40522..6638de5456 100644
--- a/src/lib/elementary/efl_ui_textpath.c
+++ b/src/lib/elementary/efl_ui_textpath.c
@@ -15,6 +15,8 @@
#define MY_CLASS EFL_UI_TEXTPATH_CLASS
#define MY_CLASS_NAME "Efl.Ui.Textpath"
+#define LEGACY_TEXT_PART_NAME "elm.text"
+#define EFL_UI_TEXT_PART_NAME "efl.text"
#define SLICE_DEFAULT_NO 99
typedef struct _Efl_Ui_Textpath_Point Efl_Ui_Textpath_Point;
@@ -54,6 +56,7 @@ struct _Efl_Ui_Textpath_Data
{
Evas_Object *text_obj;
char *text;
+ Eina_Strbuf *user_style;
Efl_Gfx_Path *path;
struct {
double x, y;
@@ -66,10 +69,10 @@ struct _Efl_Ui_Textpath_Data
Eina_Inlist *segments;
int total_length;
- Ecore_Job *draw_text_job;
#ifdef EFL_UI_TEXTPATH_LINE_DEBUG
Eina_List *lines;
#endif
+ Eina_Bool need_redraw : 1;
Eina_Bool circular : 1; //TODO: Remove this flag when elm_textpath_circle_set() is removed.
};
@@ -82,12 +85,6 @@ _rad_to_deg(double rad)
return 180 * rad / M_PI;
}
-static inline double
-_deg_to_rad(double angle)
-{
- return angle / 180 * M_PI;
-}
-
static void
_segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, double dt, double dist,
int w1, int cmp, Evas_Map *map, Eina_Bezier bezier,
@@ -97,7 +94,6 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, double dt, double dist,
double u0, u1, v0, v1;
double t;
double px, py, px2, py2;
- double rad;
Eina_Rect r;
Eina_Vector2 vec, nvec, vec0, vec1, vec2, vec3;
Eina_Matrix2 mat;
@@ -107,9 +103,7 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, double dt, double dist,
#endif
r = efl_gfx_entity_geometry_get(pd->text_obj);
-
- rad = _deg_to_rad(90);
- eina_matrix2_values_set(&mat, cos(rad), -sin(rad), sin(rad), cos(rad));
+ eina_matrix2_values_set(&mat, 0.0, -1.0, 1.0, 0.0);
eina_bezier_values_get(&bezier, NULL, NULL, NULL, NULL, NULL, NULL, &px2, &py2);
t = 0;
@@ -270,7 +264,7 @@ static void
_text_on_line_draw(Efl_Ui_Textpath_Data *pd, int w1, int w2, int cmp, Evas_Map *map, Efl_Ui_Textpath_Line line)
{
double x1, x2, y1, y2;
- double line_len, len, sina, cosa;
+ double line_len_2, line_len, len, sina, cosa;
Eina_Rect r;
x1 = line.start.x;
@@ -278,15 +272,17 @@ _text_on_line_draw(Efl_Ui_Textpath_Data *pd, int w1, int w2, int cmp, Evas_Map *
x2 = line.end.x;
y2 = line.end.y;
- line_len = sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
+ line_len_2 = (x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1);
len = w2 - w1;
- if (line_len > len)
+ if (line_len_2 > (len * len))
{
+ line_len = sqrt(line_len_2);
x2 = x1 + len * (x2 - x1) / line_len;
y2 = y1 + len * (y2 - y1) / line_len;
+ line_len_2 = (x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1);
}
- len = sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
+ len = sqrt(line_len_2);
sina = (y2 - y1) / len;
cosa = (x2 - x1) / len;
@@ -329,9 +325,8 @@ _map_point_calc(Efl_Ui_Textpath_Data *pd)
}
static void
-_text_draw(void *data)
+_text_draw(Efl_Ui_Textpath_Data *pd)
{
- Efl_Ui_Textpath_Data *pd = data;
Efl_Ui_Textpath_Segment *seg;
Evas_Map *map;
int w1, w2;
@@ -399,7 +394,13 @@ _text_draw(void *data)
evas_object_map_set(pd->text_obj, map);
evas_map_free(map);
- pd->draw_text_job = NULL;
+ pd->need_redraw = EINA_FALSE;
+}
+
+static void
+_render_pre_cb(void *data, Evas *e EINA_UNUSED, void *ev EINA_UNUSED)
+{
+ _text_draw(data);
}
static void
@@ -523,18 +524,44 @@ _path_data_get(Eo *obj, Efl_Ui_Textpath_Data *pd)
static void
_sizing_eval(Efl_Ui_Textpath_Data *pd)
{
- ecore_job_del(pd->draw_text_job);
- pd->draw_text_job = ecore_job_add(_text_draw, pd);
+ pd->need_redraw = EINA_TRUE;
}
static void
-_textpath_ellipsis_set(Efl_Ui_Textpath_Data *pd, Eina_Bool enabled)
+_textpath_ellipsis_set(Eo *obj, Efl_Ui_Textpath_Data *pd, Eina_Bool enabled)
{
- edje_object_part_text_style_user_pop(pd->text_obj, "efl.text");
+ char *text_part;
+ if (elm_widget_is_legacy(obj))
+ text_part = LEGACY_TEXT_PART_NAME;
+ else
+ text_part = EFL_UI_TEXT_PART_NAME;
+
+ edje_object_part_text_style_user_pop(pd->text_obj, text_part);
if (enabled)
- edje_object_part_text_style_user_push(pd->text_obj, "efl.text",
- "DEFAULT='ellipsis=1.0'");
+ {
+ if (pd->user_style)
+ {
+ eina_strbuf_replace_first(pd->user_style, "DEFAULT='", "DEFAULT='ellipsis=1.0 ");
+ edje_object_part_text_style_user_push(pd->text_obj, text_part,
+ eina_strbuf_string_get(pd->user_style));
+ }
+ else
+ {
+ edje_object_part_text_style_user_push(pd->text_obj, text_part,
+ "DEFAULT='ellipsis=1.0 '");
+ return;
+ }
+ }
+ else
+ {
+ if (pd->user_style)
+ {
+ eina_strbuf_replace_first(pd->user_style, "DEFAULT='ellipsis=1.0 ", "DEFAULT='");
+ edje_object_part_text_style_user_push(pd->text_obj, text_part,
+ eina_strbuf_string_get(pd->user_style));
+ }
+ }
}
static void
@@ -562,7 +589,7 @@ _ellipsis_set(Efl_Ui_Textpath_Data *pd, Eo *obj)
}
}
efl_gfx_entity_size_set(pd->text_obj, EINA_SIZE2D(w, h));
- _textpath_ellipsis_set(pd, is_ellipsis);
+ _textpath_ellipsis_set(obj, pd, is_ellipsis);
}
static void
@@ -615,7 +642,7 @@ _path_start_angle_adjust(Eo *obj, Efl_Ui_Textpath_Data *pd)
eina_vector2_normalize(&first, &first);
eina_vector2_normalize(&last, &last);
rad = acos(eina_vector2_dot_product(&first, &last));
- if (rad == 0) return;
+ if (EINA_DBL_EQ(rad, 0)) return;
offset_angle = _rad_to_deg(rad);
if (r.w > pd->total_length / 2)
@@ -698,22 +725,26 @@ _efl_ui_textpath_efl_object_constructor(Eo *obj, Efl_Ui_Textpath_Data *pd)
pd->slice_no = SLICE_DEFAULT_NO;
pd->direction = EFL_UI_TEXTPATH_DIRECTION_CW;
+ evas_event_callback_add(evas_object_evas_get(obj), EVAS_CALLBACK_RENDER_PRE, _render_pre_cb, pd);
+
return obj;
}
EOLIAN static void
_efl_ui_textpath_efl_object_destructor(Eo *obj, Efl_Ui_Textpath_Data *pd)
{
+ evas_event_callback_del_full(evas_object_evas_get(obj), EVAS_CALLBACK_RENDER_PRE, _render_pre_cb, pd);
+
Efl_Ui_Textpath_Segment *seg;
if (pd->text) free(pd->text);
if (pd->text_obj) evas_object_del(pd->text_obj);
+ if (pd->user_style) eina_strbuf_free(pd->user_style);
EINA_INLIST_FREE(pd->segments, seg)
{
pd->segments = eina_inlist_remove(pd->segments, EINA_INLIST_GET(seg));
free(seg);
}
- ecore_job_del(pd->draw_text_job);
#ifdef EFL_UI_TEXTPATH_LINE_DEBUG
Evas_Object *line;
@@ -844,8 +875,8 @@ _efl_ui_textpath_circular_set(Eo *obj, Efl_Ui_Textpath_Data *pd, double radius,
Eina_Size2D text_size;
double sweep_length, x, y;
- if (pd->circle.radius == radius &&
- pd->circle.start_angle == start_angle &&
+ if (EINA_DBL_EQ(pd->circle.radius, radius) &&
+ EINA_DBL_EQ(pd->circle.start_angle, start_angle) &&
pd->direction == direction &&
_map_point_calc(pd) > 0)
return;
@@ -977,9 +1008,9 @@ elm_textpath_circle_set(Eo *obj, double x, double y, double radius, double start
EFL_UI_TEXTPATH_DATA_GET(obj, pd);
if (!pd) return;
- if (pd->circle.x == x && pd->circle.y == y &&
- pd->circle.radius == radius &&
- pd->circle.start_angle == start_angle &&
+ if (EINA_DBL_EQ(pd->circle.x, x) && EINA_DBL_EQ(pd->circle.y, y) &&
+ EINA_DBL_EQ(pd->circle.radius, radius) &&
+ EINA_DBL_EQ(pd->circle.start_angle, start_angle) &&
pd->direction == direction &&
_map_point_calc(pd) > 0)
return;
@@ -1009,5 +1040,37 @@ elm_textpath_circle_set(Eo *obj, double x, double y, double radius, double start
efl_gfx_hint_size_restricted_min_set(obj, EINA_SIZE2D(x * 2, y * 2));
}
+EAPI void
+elm_textpath_text_user_style_set(Eo *obj, const char *style)
+{
+ EFL_UI_TEXTPATH_DATA_GET(obj, pd);
+ if (!pd) return;
+
+ char *text_part;
+ if (elm_widget_is_legacy(obj))
+ text_part = LEGACY_TEXT_PART_NAME;
+ else
+ text_part = EFL_UI_TEXT_PART_NAME;
+
+ if (pd->user_style)
+ {
+ edje_object_part_text_style_user_pop(pd->text_obj, text_part);
+ eina_strbuf_free(pd->user_style);
+ pd->user_style = NULL;
+ }
+
+ if (style)
+ {
+ pd->user_style = eina_strbuf_new();
+ eina_strbuf_append(pd->user_style, style);
+
+ edje_object_part_text_style_user_pop(pd->text_obj, text_part);
+ edje_object_part_text_style_user_push(pd->text_obj, text_part, eina_strbuf_string_get(pd->user_style));
+ }
+
+ _ellipsis_set(pd, obj);
+ _sizing_eval(pd);
+}
+
#include "efl_ui_textpath_legacy_eo.c"
diff --git a/src/lib/elementary/efl_ui_textpath_legacy_eo.h b/src/lib/elementary/efl_ui_textpath_legacy_eo.h
index 9a721634b1..88962c270c 100644
--- a/src/lib/elementary/efl_ui_textpath_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_textpath_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Textpath_Legacy;
*/
#define EFL_UI_TEXTPATH_LEGACY_CLASS efl_ui_textpath_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_textpath_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_textpath_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_timepicker.c b/src/lib/elementary/efl_ui_timepicker.c
index 335e26230e..9dfcd89b14 100644
--- a/src/lib/elementary/efl_ui_timepicker.c
+++ b/src/lib/elementary/efl_ui_timepicker.c
@@ -71,6 +71,10 @@ _field_value_update(Eo *obj)
efl_ui_range_value_set(pd->hour, pd->cur_time[TIMEPICKER_HOUR]);
}
}
+ else
+ {
+ efl_ui_range_value_set(pd->hour, pd->cur_time[TIMEPICKER_HOUR]);
+ }
efl_ui_range_value_set(pd->min, pd->cur_time[TIMEPICKER_MIN]);
@@ -86,14 +90,14 @@ _field_changed_cb(void *data, const Efl_Event *ev)
if (ev->object == pd->hour)
{
pd->cur_time[TIMEPICKER_HOUR] = efl_ui_range_value_get(pd->hour);
- if (!pd->is_24hour && !strcmp(efl_text_get(pd->ampm), "PM"))
+ if (!pd->is_24hour && eina_streq(efl_text_get(pd->ampm), "PM"))
pd->cur_time[TIMEPICKER_HOUR] += 12;
}
else if (ev->object == pd->min)
pd->cur_time[TIMEPICKER_MIN] = efl_ui_range_value_get(pd->min);
else
{
- if (!strcmp(efl_text_get(pd->ampm), "PM"))
+ if (eina_streq(efl_text_get(pd->ampm), "PM"))
{
efl_text_set(pd->ampm, "AM");
pd->cur_time[TIMEPICKER_HOUR] -= 12;
@@ -112,12 +116,6 @@ _field_changed_cb(void *data, const Efl_Event *ev)
static void
_fields_init(Eo *obj)
{
- const char *fmt;
- char ch;
- int i;
- int field = 0;
- char buf[FMT_LEN_MAX];
-
Efl_Ui_Timepicker_Data *pd = efl_data_scope_get(obj, MY_CLASS);
//Field create.
@@ -147,6 +145,25 @@ _fields_init(Eo *obj)
_field_value_update(obj);
+}
+
+
+EOLIAN static Eina_Error
+_efl_ui_timepicker_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Timepicker_Data *pd)
+{
+ const char *fmt;
+ char ch;
+ int i;
+ char buf[FMT_LEN_MAX];
+ int field = 0;
+ Eina_Error ret = EFL_UI_THEME_APPLY_ERROR_NONE;
+
+ ret = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS));
+
+ if (ret != EFL_UI_THEME_APPLY_ERROR_NONE)
+ goto end;
+
+
fmt = efl_datetime_manager_format_get(pd->dt_manager);
if (!fmt)
{
@@ -171,7 +188,8 @@ _fields_init(Eo *obj)
else
{
//TODO: monitoring locale change and update field location.
- if (field == 0)
+ //FIXME: disabled this code, as it caused issues, see T8546
+ /*if (field == 0)
{
elm_object_signal_emit(obj, "efl,colon_field1,visible,on", "efl");
elm_object_signal_emit(obj, "efl,colon_field0,visible,off", "efl");
@@ -182,8 +200,11 @@ _fields_init(Eo *obj)
elm_object_signal_emit(obj, "efl,colon_field1,visible,off", "efl");
}
- elm_layout_signal_emit(obj, "efl,ampm,visible,on", "efl");
- edje_object_message_signal_process(elm_layout_edje_get(obj));
+ if (pd->is_24hour)
+ elm_layout_signal_emit(obj, "efl,ampm,visible,off", "efl");
+ else
+ elm_layout_signal_emit(obj, "efl,ampm,visible,on", "efl");
+ edje_object_message_signal_process(elm_layout_edje_get(obj));*/
efl_content_set(efl_part(obj, buf), pd->ampm);
}
@@ -193,8 +214,12 @@ _fields_init(Eo *obj)
}
fmt++;
}
+end:
+ return ret;
}
+
+
EOLIAN static Eo *
_efl_ui_timepicker_efl_object_constructor(Eo *obj, Efl_Ui_Timepicker_Data *pd EINA_UNUSED)
{
@@ -204,12 +229,6 @@ _efl_ui_timepicker_efl_object_constructor(Eo *obj, Efl_Ui_Timepicker_Data *pd EI
elm_widget_theme_klass_set(obj, "timepicker");
obj = efl_constructor(efl_super(obj, MY_CLASS));
- if (elm_widget_theme_object_set(obj, wd->resize_obj,
- elm_widget_theme_klass_get(obj),
- elm_widget_theme_element_get(obj),
- elm_widget_theme_style_get(obj)) == EFL_UI_THEME_APPLY_ERROR_GENERIC)
- CRI("Failed to set layout!");
-
_fields_init(obj);
elm_widget_can_focus_set(obj, EINA_TRUE);
@@ -250,10 +269,17 @@ _efl_ui_timepicker_is_24hour_set(Eo *obj, Efl_Ui_Timepicker_Data *pd, Eina_Bool
if (pd->is_24hour == is_24hour) return;
pd->is_24hour = is_24hour;
- if (pd->is_24hour == EINA_TRUE)
- elm_layout_signal_emit(obj, "efl,ampm,visible,off", "efl");
+ if (!pd->is_24hour)
+ {
+ efl_ui_widget_disabled_set(pd->ampm, EINA_FALSE);
+ efl_ui_range_limits_set(pd->hour, 1, 12);
+ }
else
- elm_layout_signal_emit(obj, "efl,ampm,visible,on", "efl");
+ {
+ efl_ui_widget_disabled_set(pd->ampm, EINA_TRUE);
+ efl_ui_range_limits_set(pd->hour, 0, 23);
+ }
+
_field_value_update(obj);
}
diff --git a/src/lib/elementary/efl_ui_timepicker.eo b/src/lib/elementary/efl_ui_timepicker.eo
index d7aa8fcc23..9ced109efb 100644
--- a/src/lib/elementary/efl_ui_timepicker.eo
+++ b/src/lib/elementary/efl_ui_timepicker.eo
@@ -40,6 +40,7 @@ class Efl.Ui.Timepicker extends Efl.Ui.Layout_Base
implements {
Efl.Object.constructor;
Efl.Object.destructor;
+ Efl.Ui.Widget.theme_apply;
}
events {
time,changed: void; [[Called when time is changed]]
diff --git a/src/lib/elementary/efl_ui_vg_animation.c b/src/lib/elementary/efl_ui_vg_animation.c
new file mode 100644
index 0000000000..7801d54654
--- /dev/null
+++ b/src/lib/elementary/efl_ui_vg_animation.c
@@ -0,0 +1,1592 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define EFL_ACCESS_OBJECT_PROTECTED
+#define EFL_PART_PROTECTED
+
+#include <Elementary.h>
+
+#include "elm_priv.h"
+#include "efl_ui_vg_animation_private.h"
+#include "efl_ui_vg_animation_part.eo.h"
+#include "elm_part_helper.h"
+
+#define MY_CLASS EFL_UI_VG_ANIMATION_CLASS
+
+#define MY_CLASS_NAME "Efl_Ui_Vg_Animation"
+
+#define GROW_SIZE 50
+#define QUEUE_SIZE 350
+#define T_SEGMENT_N 30
+#define C_SEGMENT_N 30
+
+
+static const char SIG_FOCUSED[] = "focused";
+static const char SIG_UNFOCUSED[] = "unfocused";
+static const char SIG_PLAY_START[] = "play,start";
+static const char SIG_PLAY_REPEAT[] = "play,repeat";
+static const char SIG_PLAY_DONE[] = "play,done";
+static const char SIG_PLAY_PAUSE[] = "play,pause";
+static const char SIG_PLAY_RESUME[] = "play,resume";
+static const char SIG_PLAY_STOP[] = "play,stop";
+static const char SIG_PLAY_UPDATE[] = "play,update";
+
+/* smart callbacks coming from Efl_Ui_Vg_Animation objects: */
+static const Evas_Smart_Cb_Description _smart_callbacks[] = {
+ {SIG_FOCUSED, ""},
+ {SIG_UNFOCUSED, ""},
+ {SIG_WIDGET_LANG_CHANGED, ""}, /**< handled by elm_widget */
+ {SIG_PLAY_START, ""},
+ {SIG_PLAY_REPEAT, ""},
+ {SIG_PLAY_DONE, ""},
+ {SIG_PLAY_PAUSE, ""},
+ {SIG_PLAY_RESUME, ""},
+ {SIG_PLAY_STOP, ""},
+ {NULL, NULL}
+};
+
+typedef struct
+{
+ Eina_Stringshare *part;
+ Eo *obj;
+ Eo *proxy;
+ const Efl_VG *node;
+} Efl_Ui_Vg_Animation_Sub_Obj_Data;
+
+typedef struct
+{
+ float x1, x2;
+ float y;
+} Efl_Ui_Vg_Animation_Span_Data;
+
+typedef struct
+{
+ float x, y;
+} Efl_Ui_Vg_Animation_Point;
+
+static Eo *
+_proxy_create(Eo *source)
+{
+ Eo *proxy = efl_add(EFL_CANVAS_PROXY_CLASS, source);
+ if (!proxy) return NULL;
+
+ efl_gfx_fill_auto_set(proxy, EINA_TRUE);
+ efl_canvas_proxy_source_clip_set(proxy, EINA_FALSE);
+ efl_canvas_proxy_source_set(proxy, source);
+
+ efl_gfx_entity_visible_set(proxy, EINA_FALSE);
+ efl_gfx_entity_visible_set(source, EINA_FALSE);
+
+ return proxy;
+}
+
+static void
+_proxy_map_disable(Efl_Ui_Vg_Animation_Data *pd)
+{
+ Eina_List *l;
+ Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d;
+
+ EINA_LIST_FOREACH(pd->subs, l, sub_d)
+ {
+ if (!sub_d->proxy) continue;
+ if (efl_gfx_mapping_has(sub_d->proxy))
+ efl_gfx_mapping_reset(sub_d->proxy);
+
+ //TODO: remove this call
+ evas_object_map_enable_set(sub_d->proxy, EINA_FALSE);
+ }
+}
+
+static Efl_VG *
+_node_get(Efl_VG *node, const char *part)
+{
+ if (!node) return NULL;
+
+ if (!efl_isa(node, EFL_CANVAS_VG_CONTAINER_CLASS)) return NULL;
+
+ char *name = efl_key_data_get(node, "_lot_node_name");
+
+ //Find the target recursiveldy
+ if (!name || strcmp(name, part))
+ {
+ Eina_Iterator *itr = efl_canvas_vg_container_children_get(node);
+ Efl_VG *child;
+ Efl_VG *ret;
+
+ EINA_ITERATOR_FOREACH(itr, child)
+ {
+ if (efl_isa(child, EFL_CANVAS_VG_CONTAINER_CLASS))
+ {
+ ret = _node_get(child, part);
+ if (ret) return ret;
+ }
+ }
+ return NULL;
+ }
+
+ //Find Shape
+ Eina_Iterator *itr = efl_canvas_vg_container_children_get(node);
+ Efl_VG *child;
+ const Efl_Gfx_Path_Command_Type *cmd;
+
+ EINA_ITERATOR_FOREACH(itr, child)
+ {
+ //Filter out unacceptable types
+ if (!efl_isa(child, EFL_CANVAS_VG_SHAPE_CLASS)) continue;
+ if (efl_gfx_shape_stroke_width_get(child) > 0) continue;
+ efl_gfx_path_get(child, &cmd, NULL);
+ if (!cmd) continue;
+ return child;
+ }
+ return NULL;
+}
+
+static Eina_Bool
+_part_draw(Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d, Eina_Position2D offset, Eina_Size2D tsize)
+{
+ const Efl_Gfx_Path_Command_Type *cmd, *tcmd;
+ const double *points;
+ int alpha, inarray_idx, inarray_size, i, pt_idx = 0, pt_cnt = 0;
+ double x, y;
+ Eina_Bezier bezier;
+ float t, min_y = 99999999, max_y = -1;
+ float inv_segment = (1 / (float) C_SEGMENT_N);
+ float u_segment, v_segment, x1_segment, x2_segment;
+ double begin_x = 0, begin_y = 0, end_x = 0, end_y = 0;
+ double ctrl[4];
+ Eina_Inarray *inarray;
+ Efl_Ui_Vg_Animation_Point *pt, *pt2;
+ Eo *target = sub_d->proxy;
+ Eina_Bool fast_path = EINA_TRUE;
+
+ efl_gfx_path_get(sub_d->node, &cmd, &points);
+ if (!cmd) return EINA_FALSE;
+
+ efl_gfx_entity_visible_set(target, EINA_TRUE);
+// efl_gfx_path_bounds_get(sub_d->node, &tbound);
+ efl_gfx_color_get(sub_d->node, NULL, NULL, NULL, &alpha);
+ efl_gfx_entity_size_set(target, tsize);
+
+ //TODO: Optimize it, scalable or not?
+ efl_gfx_entity_size_set(sub_d->obj, tsize);
+
+ //Fast Path? Shape outlines by consisted of straight lines.
+ tcmd = cmd;
+ if (*tcmd != EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO) fast_path = EINA_FALSE;
+ else
+ {
+ ++tcmd;
+ while (*tcmd == EFL_GFX_PATH_COMMAND_TYPE_LINE_TO)
+ {
+ ++tcmd;
+ if (++pt_cnt > 4)
+ {
+ fast_path = EINA_FALSE;
+ break;
+ }
+ }
+
+ if ((pt_cnt != 4) ||
+ (((*tcmd) != EFL_GFX_PATH_COMMAND_TYPE_END) && ((*tcmd) != EFL_GFX_PATH_COMMAND_TYPE_CLOSE)))
+ fast_path = EINA_FALSE;
+ }
+
+ pt_idx = 0;
+
+ //Fast Path: Rectangle Mapping
+ if (fast_path)
+ {
+ efl_gfx_mapping_point_count_set(target, pt_cnt);
+
+ //Point
+ efl_gfx_mapping_coord_absolute_set(target, 1, points[0] + offset.x, points[1] + offset.y, 0);
+ efl_gfx_mapping_coord_absolute_set(target, 2, points[2] + offset.x, points[3] + offset.y, 0);
+ efl_gfx_mapping_coord_absolute_set(target, 3, points[4] + offset.x, points[5] + offset.y, 0);
+ efl_gfx_mapping_coord_absolute_set(target, 0, points[6] + offset.x, points[7] + offset.y, 0);
+
+ //Color
+ efl_gfx_mapping_color_set(target, 0, alpha, alpha, alpha, alpha);
+ efl_gfx_mapping_color_set(target, 1, alpha, alpha, alpha, alpha);
+ efl_gfx_mapping_color_set(target, 2, alpha, alpha, alpha, alpha);
+ efl_gfx_mapping_color_set(target, 3, alpha, alpha, alpha, alpha);
+
+ //UV
+ efl_gfx_mapping_uv_set(target, 0, 0, 0);
+ efl_gfx_mapping_uv_set(target, 1, tsize.w, 0);
+ efl_gfx_mapping_uv_set(target, 2, tsize.w, tsize.h);
+ efl_gfx_mapping_uv_set(target, 3, 0, tsize.h);
+
+ return EINA_TRUE;
+ }
+
+ //Case 2. Arbitrary Geometry mapping
+ inarray = eina_inarray_new(sizeof(Efl_Ui_Vg_Animation_Point), GROW_SIZE);
+ if (!inarray) return EINA_FALSE;
+ eina_inarray_resize(inarray, QUEUE_SIZE);
+ inarray_size = QUEUE_SIZE;
+ inarray_idx = 0;
+
+ //end 0, move 1, line 2, cubic 3, close 4
+ while (*cmd != EFL_GFX_PATH_COMMAND_TYPE_END)
+ {
+ if (*cmd == EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO)
+ {
+ begin_x = points[pt_idx++] + offset.x;
+ begin_y = points[pt_idx++] + offset.y;
+ if (begin_y < min_y) min_y = begin_y;
+ if (begin_y > max_y) max_y = begin_y;
+ ++cmd;
+ continue;
+ }
+ else if (*cmd == EFL_GFX_PATH_COMMAND_TYPE_CUBIC_TO)
+ {
+
+ ctrl[0] = points[pt_idx++] + offset.x;
+ ctrl[1] = points[pt_idx++] + offset.y;
+ ctrl[2] = points[pt_idx++] + offset.x;
+ ctrl[3] = points[pt_idx++] + offset.y;
+ end_x = points[pt_idx++] + offset.x;
+ end_y = points[pt_idx++] + offset.y;
+
+ eina_bezier_values_set(&bezier,
+ begin_x, begin_y,
+ ctrl[0], ctrl[1], ctrl[2], ctrl[3],
+ end_x, end_y);
+
+ for (i = 0; i < C_SEGMENT_N; ++i)
+ {
+ if (inarray_idx >= inarray_size)
+ {
+ inarray_size += GROW_SIZE;
+ eina_inarray_grow(inarray, inarray_size);
+ }
+
+ t = inv_segment * (float) i;
+ eina_bezier_point_at(&bezier, t, &x, &y);
+ pt = eina_inarray_nth(inarray, inarray_idx);
+ pt->x = x;
+ pt->y = y;
+
+ if (y < min_y) min_y = y;
+ if (y > max_y) max_y = y;
+
+ ++inarray_idx;
+ }
+ }
+ else if (*cmd == EFL_GFX_PATH_COMMAND_TYPE_LINE_TO)
+ {
+ end_x = points[pt_idx++] + offset.x;
+ end_y = points[pt_idx++] + offset.y;
+
+ for (i = 0; i < C_SEGMENT_N; ++i)
+ {
+ if (inarray_idx >= inarray_size)
+ {
+ inarray_size += GROW_SIZE;
+ eina_inarray_grow(inarray, inarray_size);
+ }
+
+ t = inv_segment * (float) i;
+ pt = eina_inarray_nth(inarray, inarray_idx);
+ pt->x = begin_x + ((double) (end_x - begin_x)) * t;
+ pt->y = begin_y + ((double) (end_y - begin_y)) * t;
+ ++inarray_idx;
+ }
+ }
+
+ begin_x = end_x;
+ begin_y = end_y;
+
+ if (end_y < min_y) min_y = end_y;
+ if (end_y > max_y) max_y = end_y;
+
+ ++cmd;
+ }
+
+ if (inarray_idx >= inarray_size)
+ {
+ inarray_size += 1;
+ eina_inarray_grow(inarray, inarray_size);
+ }
+ pt = eina_inarray_nth(inarray, inarray_idx);
+ pt2 = eina_inarray_nth(inarray, 0);
+ pt->x = pt2->x;
+ pt->y = pt2->y;
+
+ float y_segment = (max_y - min_y) * inv_segment;
+ Efl_Ui_Vg_Animation_Span_Data spans[T_SEGMENT_N + 1];
+ float min_x, max_x;
+ float a, b;
+
+ y = min_y;
+
+ for (int i = 0; i <= T_SEGMENT_N; ++i)
+ {
+ min_x = 999999;
+ max_x = -1;
+
+ for (int j = 0; j < inarray_idx; ++j)
+ {
+ pt = eina_inarray_nth(inarray, j);
+ pt2 = pt + 1;
+
+ //Horizontal Line
+ if ((fabs(y - pt->y) < 0.5) &&
+ (fabs(pt->y - pt2->y) < 0.5))
+ {
+ if (pt->x < min_x) min_x = pt->x;
+ if (pt->x > max_x) max_x = pt->x;
+ if (pt2->x < min_x) min_x = pt2->x;
+ if (pt2->x > max_x) max_x = pt2->x;
+ continue;
+ }
+
+ //Out of Y range
+ if (((y < pt->y) && (y < pt2->y)) ||
+ ((y > pt->y) && (y > pt2->y)))
+ continue;
+
+ //Vertical Line
+ if (fabs(pt2->x - pt2->x) < 0.5)
+ x = pt->x;
+ //Diagonal Line
+ else
+ {
+ a = (pt2->y - pt->y) / (pt2->x - pt->x);
+ b = pt->y - (a * pt->x);
+ x = (y - b) / a;
+ }
+
+ if (x < min_x) min_x = x;
+ if (x > max_x) max_x = x;
+ }
+ spans[i].x1 = min_x;
+ spans[i].x2 = max_x;
+ spans[i].y = y;
+ y += y_segment;
+#if 0
+ static Eo *lines[T_SEGMENT_N + 1];
+ if (!lines[i]) lines[i] = evas_object_line_add(evas_object_evas_get(target));
+ evas_object_color_set(lines[i], 255, 255, 255, 255);
+ evas_object_resize(lines[i], 1000, 1000);
+ evas_object_line_xy_set(lines[i], spans[i].x1, spans[i].y, spans[i].x2, spans[i].y);
+ evas_object_show(lines[i]);
+#endif
+ }
+
+ u_segment = ((float) tsize.w) / ((float) T_SEGMENT_N);
+ v_segment = ((float) tsize.h) / ((float) T_SEGMENT_N);
+
+ Evas_Map *map = evas_map_new(T_SEGMENT_N * T_SEGMENT_N * 4);
+ pt_idx = 0;
+// efl_gfx_mapping_point_count_set(target, (4 * T_SEGMENT_N * T_SEGMENT_N));
+
+ for (int i = 0; i < T_SEGMENT_N; ++i)
+ {
+ x1_segment = (spans[i].x2 - spans[i].x1) / ((float) T_SEGMENT_N);
+ x2_segment = (spans[i + 1].x2 - spans[i + 1].x1) / ((float) T_SEGMENT_N);
+
+ for (int j = 0; j < T_SEGMENT_N; ++j)
+ {
+#if 0
+ //Point
+ efl_gfx_mapping_coord_absolute_set(target, pt_idx + 0, spans[i].x1 + ((float) j) * x1_segment, spans[i].y, 0);
+ efl_gfx_mapping_coord_absolute_set(target, pt_idx + 1, spans[i].x1 + ((float) j + 1) * x1_segment, spans[i].y, 0);
+ efl_gfx_mapping_coord_absolute_set(target, pt_idx + 2, spans[i + 1].x1 + ((float) j + 1) * x2_segment, spans[i + 1].y, 0);
+ efl_gfx_mapping_coord_absolute_set(target, pt_idx + 3, spans[i + 1].x1 + ((float) j) * x2_segment, spans[i + 1].y, 0);
+
+ //UV
+ efl_gfx_mapping_uv_set(target, pt_idx + 0, ((float) j) * u_segment, ((float) i) * v_segment);
+ efl_gfx_mapping_uv_set(target, pt_idx + 1, ((float) j + 1) * u_segment, ((float) i) * v_segment);
+ efl_gfx_mapping_uv_set(target, pt_idx + 2, ((float) j + 1) * u_segment, ((float) i + 1) * v_segment);
+ efl_gfx_mapping_uv_set(target, pt_idx + 3, ((float) j) * u_segment, ((float) i + 1) * v_segment);
+
+ //Color
+ efl_gfx_mapping_color_set(target, pt_idx + 0, alpha, alpha, alpha, alpha);
+ efl_gfx_mapping_color_set(target, pt_idx + 1, alpha, alpha, alpha, alpha);
+ efl_gfx_mapping_color_set(target, pt_idx + 2, alpha, alpha, alpha, alpha);
+ efl_gfx_mapping_color_set(target, pt_idx + 3, alpha, alpha, alpha, alpha);
+#endif
+ evas_map_point_coord_set(map, pt_idx + 0, spans[i].x1 + ((float) j) * x1_segment, spans[i].y, 0);
+ evas_map_point_coord_set(map, pt_idx + 1, spans[i].x1 + ((float) j + 1) * x1_segment, spans[i].y, 0);
+ evas_map_point_coord_set(map, pt_idx + 2, spans[i + 1].x1 + ((float) j + 1) * x2_segment, spans[i + 1].y, 0);
+ evas_map_point_coord_set(map, pt_idx + 3, spans[i + 1].x1 + ((float) j) * x2_segment, spans[i + 1].y, 0);
+
+ evas_map_point_image_uv_set(map, pt_idx + 0, ((float) j) * u_segment, ((float) i) * v_segment);
+ evas_map_point_image_uv_set(map, pt_idx + 1, ((float) j + 1) * u_segment, ((float) i) * v_segment);
+ evas_map_point_image_uv_set(map, pt_idx + 2, ((float) j + 1) * u_segment, ((float) i + 1) * v_segment);
+ evas_map_point_image_uv_set(map, pt_idx + 3, ((float) j) * u_segment, ((float) i + 1) * v_segment);
+
+ evas_map_point_color_set(map, pt_idx + 0, alpha, alpha, alpha, alpha);
+ evas_map_point_color_set(map, pt_idx + 1, alpha, alpha, alpha, alpha);
+ evas_map_point_color_set(map, pt_idx + 2, alpha, alpha, alpha, alpha);
+ evas_map_point_color_set(map, pt_idx + 3, alpha, alpha, alpha, alpha);
+
+ pt_idx += 4;
+ }
+ }
+ evas_object_map_enable_set(target, EINA_TRUE);
+ evas_object_map_set(target, map);
+
+ evas_map_free(map);
+ eina_inarray_free(inarray);
+
+ return EINA_TRUE;
+}
+
+static void
+_update_part_contents(Eo *obj, Efl_Ui_Vg_Animation_Data *pd)
+{
+ if (!pd->subs) return;
+
+ //TODO: Update to current frame's node tree immediately.
+
+ Efl_VG *root = evas_object_vg_root_node_get(pd->vg);
+ if (!root) return;
+
+ Eina_List *l;
+ Eina_Position2D pos = efl_gfx_entity_position_get(pd->vg);
+ Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d;
+ Eina_Size2D tsize = efl_gfx_entity_size_get(obj);
+
+ EINA_LIST_FOREACH(pd->subs, l, sub_d)
+ {
+ if (!sub_d->node)
+ sub_d->node = _node_get(root, sub_d->part);
+
+ if (sub_d->node)
+ _part_draw(sub_d, pos, tsize);
+ else
+ ERR("part(%s) is invalid in Efl_Ui_Vg_Animation(%p)", sub_d->part, obj);
+ }
+}
+
+static void
+_frame_set_facade(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, int frame)
+{
+ int pframe = evas_object_vg_animated_frame_get(pd->vg);
+ evas_object_vg_animated_frame_set(pd->vg, frame);
+ if (pframe != frame) _update_part_contents(obj, pd);
+}
+
+static void
+_eo_unparent_helper(Eo *child, Eo *parent)
+{
+ if (efl_parent_get(child) == parent)
+ efl_parent_set(child, evas_object_evas_get(parent));
+}
+
+static void
+_on_sub_object_size_hint_change(void *data,
+ Evas *e EINA_UNUSED,
+ Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ if (!efl_alive_get(data)) return;
+ ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
+ efl_canvas_group_change(data);
+ //TODO: Update part contents
+}
+
+static void
+_sizing_eval(Eo *obj, void *data)
+{
+ Efl_Ui_Vg_Animation_Data *pd = data;
+ if (!efl_file_loaded_get(obj)) return;
+
+ double hw,hh;
+ efl_gfx_hint_weight_get(obj, &hw, &hh);
+
+ Eina_Size2D size = efl_canvas_vg_object_default_size_get(pd->vg);
+
+ Eina_Size2D min = {-1, -1};
+ if (EINA_DBL_EQ(hw, 0)) min.w = size.w;
+ if (EINA_DBL_EQ(hh, 0)) min.h = size.h;
+
+ efl_gfx_hint_size_min_set(obj, min);
+}
+
+static void
+_size_hint_event_cb(void *data, const Efl_Event *event)
+{
+ _sizing_eval(event->object, data);
+}
+
+static void
+_transit_go_facade(Eo* obj, Efl_Ui_Vg_Animation_Data *pd)
+{
+ Eina_Bool playing = EINA_TRUE;
+ pd->repeat_times = 0;
+ if (pd->playing_reverse)
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS;
+ else
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_START, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYING_CHANGED, &playing);
+ if (pd->transit) elm_transit_go(pd->transit);}
+
+static Eina_Bool
+_visible_check(Eo *obj)
+{
+ if (!efl_gfx_entity_visible_get(obj)) return EINA_FALSE;
+
+ //TODO: Check Smart parents visibilities?
+
+ Eina_Size2D size = efl_gfx_entity_size_get(obj);
+ if (size.w == 0 || size.h == 0) return EINA_FALSE;
+
+ Evas_Coord output_w, output_h;
+ evas_output_size_get(evas_object_evas_get(obj), &output_w, &output_h);
+
+ Eina_Position2D pos = efl_gfx_entity_position_get(obj);
+
+ //Outside viewport
+ if ((pos.x + size.w < 0) || (pos.x > output_w) ||
+ (pos.y + size.h < 0) || (pos.y > output_h))
+ return EINA_FALSE;
+
+ //Inside viewport
+ return EINA_TRUE;
+}
+
+static void
+_autoplay(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, Eina_Bool vis)
+{
+ if (!pd->autoplay || !pd->transit) return;
+
+ //Resume Animation
+ if (vis)
+ {
+ if (pd->state == EFL_UI_VG_ANIMATION_STATE_PAUSED && pd->autoplay_pause)
+ {
+ Eina_Bool paused = EINA_FALSE;
+ elm_transit_paused_set(pd->transit, EINA_FALSE);
+ if (pd->playing_reverse)
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS;
+ else
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
+ pd->autoplay_pause = EINA_FALSE;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
+ }
+ }
+ //Pause Animation
+ else
+ {
+ Eina_Bool paused = EINA_TRUE;
+ if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING) ||
+ (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS))
+ {
+ elm_transit_paused_set(pd->transit, EINA_TRUE);
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PAUSED;
+ pd->autoplay_pause = EINA_TRUE;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
+ }
+ }
+}
+
+static void
+_transit_del_cb(Elm_Transit_Effect *effect, Elm_Transit *transit)
+{
+ Eo *obj = (Eo *) effect;
+ EFL_UI_VG_ANIMATION_DATA_GET(obj, pd);
+ if (!pd) return;
+
+ if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING && EINA_DBL_EQ(pd->progress, 1)) ||
+ (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS && EINA_DBL_EQ(pd->progress, 0)))
+ {
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_DONE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_FINISHED, NULL);
+ }
+
+ if (pd->transit != transit) return;
+
+ Efl_Ui_Vg_Animation_State prev_state = pd->state;
+ pd->state = EFL_UI_VG_ANIMATION_STATE_STOPPED;
+ pd->transit = NULL;
+ pd->autoplay_pause = EINA_FALSE;
+
+ if (prev_state != EFL_UI_VG_ANIMATION_STATE_STOPPED)
+ {
+ Eina_Bool playing = EINA_FALSE;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYING_CHANGED, &playing);
+ pd->progress = 0;
+ }
+}
+
+static void
+_transit_cb(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
+{
+ Eo *obj = (Eo *) effect;
+ EFL_UI_VG_ANIMATION_DATA_GET(obj, pd);
+
+ if (!pd || !pd->vg)
+ {
+ ERR("Vector Object is removed in wrong way!, Efl_Ui_Vg_Animation = %p", obj);
+ elm_transit_del(transit);
+ return;
+ }
+ if (pd->playback_direction_changed)
+ {
+ elm_transit_progress_value_set(pd->transit, 1 - progress);
+ progress = 1 - progress ;
+
+ if (pd->playback_speed <= 0) pd->playing_reverse = EINA_TRUE;
+ else pd->playing_reverse = EINA_FALSE;
+
+ pd->playback_direction_changed = EINA_FALSE;
+ }
+
+ if (pd->playing_reverse)
+ {
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS;
+ progress = 1 - progress;
+ }
+ else pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
+
+ pd->progress = progress;
+ int minframe = (pd->frame_cnt - 1) * pd->min_progress;
+ int maxframe = (pd->frame_cnt - 1) * pd->max_progress;
+
+ int update_frame = (int)((maxframe - minframe) * progress) + minframe;
+ int current_frame = evas_object_vg_animated_frame_get(pd->vg);
+
+ if (EINA_DBL_EQ(pd->playback_speed, 0))
+ update_frame = current_frame;
+
+ _frame_set_facade(obj, pd, update_frame);
+
+ if (pd->loop)
+ {
+ int repeat_times = elm_transit_current_repeat_times_get(pd->transit);
+ if (pd->repeat_times != repeat_times)
+ {
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_REPEAT, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_REPEATED, &repeat_times);
+ pd->repeat_times = repeat_times;
+ }
+ }
+
+ //transit_cb is always called with a progress value 0 ~ 1.
+ //SIG_PLAY_UPDATE callback is called only when there is a real change.
+ if (update_frame == current_frame) return;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_UPDATE, NULL);
+ else
+ {
+ double position = pd->frame_duration * pd->progress;
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_POSITION_CHANGED, &position);
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_PROGRESS_CHANGED, &pd->progress);
+ }
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Vg_Animation_Data *priv)
+{
+ efl_canvas_group_add(efl_super(obj, MY_CLASS));
+ elm_widget_sub_object_parent_add(obj);
+
+ // Create vg to render vector animation
+ Eo *vg = evas_object_vg_add(evas_object_evas_get(obj));
+ elm_widget_resize_object_set(obj, vg);
+ efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED, _size_hint_event_cb, priv);
+
+ priv->vg = vg;
+ priv->playback_speed = 1;
+ priv->frame_duration = 0;
+ priv->min_progress = 0.0;
+ priv->max_progress = 1.0;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED)
+{
+ if (pd->transit)
+ {
+ Elm_Transit *transit = pd->transit;
+ pd->transit = NULL; //Skip perform transit_del_cb()
+ elm_transit_del(transit);
+ }
+ pd->state = EFL_UI_VG_ANIMATION_STATE_NOT_READY;
+
+ efl_canvas_group_del(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_object_destructor(Eo *obj,
+ Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED)
+{
+ Efl_Gfx_Vg_Value_Provider *vp;
+ EINA_LIST_FREE(pd->vp_list, vp)
+ efl_unref(vp);
+ eina_list_free(pd->vp_list);
+
+ efl_destructor(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static Eo *
+_efl_ui_vg_animation_efl_object_constructor(Eo *obj,
+ Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED)
+{
+ obj = efl_constructor(efl_super(obj, MY_CLASS));
+ evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
+
+ return obj;
+}
+
+static void
+_update_frame_duration(Efl_Ui_Vg_Animation_Data *pd)
+{
+ int frame_count = evas_object_vg_animated_frame_count_get(pd->vg);
+ int min_frame = (frame_count - 1) * pd->min_progress;
+ int max_frame = (frame_count - 1) * pd->max_progress;
+ double frame_rate = round((double)frame_count / evas_object_vg_animated_frame_duration_get(pd->vg, 0, 0));
+ double speed = pd->playback_speed < 0 ? pd->playback_speed * -1 : pd->playback_speed;
+
+ pd->frame_duration = (double)(max_frame - min_frame) / frame_rate;
+ if (pd->transit)
+ elm_transit_duration_set(pd->transit, EINA_DBL_NONZERO(speed) ? pd->frame_duration * (1 / speed) : 0);
+}
+
+static Eina_Bool
+_ready_play(Eo *obj, Efl_Ui_Vg_Animation_Data *pd)
+{
+ pd->autoplay_pause = EINA_FALSE;
+ pd->state = EFL_UI_VG_ANIMATION_STATE_STOPPED;
+
+ if (pd->transit) elm_transit_del(pd->transit);
+
+ pd->frame_cnt = (double) evas_object_vg_animated_frame_count_get(pd->vg);
+ pd->frame_duration = evas_object_vg_animated_frame_duration_get(pd->vg, 0, 0);
+ _frame_set_facade(obj, pd, 0);
+
+ if (pd->frame_duration > 0)
+ {
+ double speed = pd->playback_speed < 0 ? pd->playback_speed * -1 : pd->playback_speed;
+ Elm_Transit *transit = elm_transit_add();
+ elm_transit_object_add(transit, obj);
+ if (pd->loop) elm_transit_repeat_times_set(transit, -1);
+ elm_transit_effect_add(transit, _transit_cb, obj, _transit_del_cb);
+ elm_transit_progress_value_set(transit, pd->progress);
+ elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
+ elm_transit_event_enabled_set(transit, EINA_TRUE);
+ pd->transit = transit;
+ if (EINA_DBL_NONZERO(pd->min_progress) || !EINA_DBL_EQ(pd->max_progress, 1.0))
+ _update_frame_duration(pd);
+ else
+ elm_transit_duration_set(transit, EINA_DBL_NONZERO(speed) ? pd->frame_duration * (1 / speed) : 0);
+
+ return EINA_TRUE;
+ }
+ return EINA_FALSE;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_file_unload(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ pd->state = EFL_UI_VG_ANIMATION_STATE_NOT_READY;
+ pd->frame_cnt = 0;
+ pd->frame_duration = 0;
+ if (pd->transit) elm_transit_del(pd->transit);
+
+ //Remove all part exising contents
+ Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d;
+ Eo *content;
+ Eina_List *l, *ll;
+
+ EINA_LIST_FOREACH_SAFE(pd->subs, l, ll, sub_d)
+ {
+ content = sub_d->obj;
+
+ /* sub_d will die in _widget_sub_object_del */
+ if (!_elm_widget_sub_object_redirect_to_top(obj, content))
+ {
+ ERR("could not remove sub object %p from %p", content, obj);
+ continue;
+ }
+ _eo_unparent_helper(content, obj);
+ }
+}
+
+EOLIAN static Eina_Error
+_efl_ui_vg_animation_efl_file_load(Eo *obj, Efl_Ui_Vg_Animation_Data *pd)
+{
+ Eina_Error err;
+ Eina_Bool ret;
+ const char *file;
+ const char *key;
+
+ if (efl_file_loaded_get(obj)) return 0;
+
+ err = efl_file_load(efl_super(obj, MY_CLASS));
+ if (err) return err;
+
+ file = efl_file_get(obj);
+ key = efl_file_key_get(obj);
+ ret = efl_file_simple_load(pd->vg, file, key);
+ if (!ret)
+ {
+ efl_file_unload(obj);
+ return eina_error_get();
+ }
+
+ pd->progress = 0;
+
+ _sizing_eval(obj, pd);
+
+ if (!_ready_play(obj, pd)) return 1;
+
+ if (pd->autoplay)
+ {
+ _transit_go_facade(obj, pd);
+
+ if (!_visible_check(obj))
+ {
+ Eina_Bool paused = EINA_TRUE;
+ elm_transit_paused_set(pd->transit, EINA_TRUE);
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PAUSED;
+ pd->autoplay_pause = EINA_TRUE;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
+ }
+ }
+ return 0;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_gfx_entity_position_set(Eo *obj,
+ Efl_Ui_Vg_Animation_Data *pd,
+ Eina_Position2D pos EINA_UNUSED)
+{
+ if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y))
+ return;
+
+ efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
+
+ Eina_Bool vis = _visible_check(obj);
+ if (!vis) _proxy_map_disable(pd);
+ _autoplay(obj, pd, vis);
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_gfx_entity_size_set(Eo *obj,
+ Efl_Ui_Vg_Animation_Data *pd,
+ Eina_Size2D size)
+{
+ if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, size.w, size.h))
+ return;
+
+ efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), size);
+
+ _sizing_eval(obj, pd);
+
+ _autoplay(obj, pd, _visible_check(obj));
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_gfx_entity_visible_set(Eo *obj,
+ Efl_Ui_Vg_Animation_Data *pd,
+ Eina_Bool vis)
+{
+ if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis))
+ return;
+
+ efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), vis);
+
+ vis = _visible_check(obj);
+ if (!vis) _proxy_map_disable(pd);
+ _autoplay(obj, pd, vis);
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_gfx_view_view_size_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Vg_Animation_Data *pd,
+ Eina_Size2D size)
+{
+ Eina_Rect viewbox;
+ viewbox.x = viewbox.y =0;
+ viewbox.w = size.w;
+ viewbox.h = size.h;
+
+ efl_canvas_vg_object_viewbox_set(pd->vg, viewbox);
+}
+
+EOLIAN Eina_Size2D
+_efl_ui_vg_animation_efl_gfx_view_view_size_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Vg_Animation_Data *pd)
+{
+ Eina_Rect viewbox = efl_canvas_vg_object_viewbox_get(pd->vg);
+
+ return EINA_SIZE2D(viewbox.w, viewbox.h);
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_player_playback_loop_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, Eina_Bool loop)
+{
+ if (pd->loop == loop) return;
+ pd->loop = loop;
+ if (pd->transit)
+ {
+ if (loop) elm_transit_repeat_times_set(pd->transit, -1);
+ else elm_transit_repeat_times_set(pd->transit, 0);
+ }
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_player_playback_loop_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->loop;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_player_autoplay_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd,
+ Eina_Bool autoplay)
+{
+ pd->autoplay = autoplay;
+ if (!autoplay) pd->autoplay_pause = EINA_FALSE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_player_autoplay_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->autoplay;
+}
+
+Eina_Bool _efl_ui_vg_animation_playing_sector(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, const char *start, const char *end)
+{
+ int start_frame = 0;
+ int end_frame = evas_object_vg_animated_frame_count_get(pd->vg) - 1;
+
+ if (start && end)
+ {
+ efl_gfx_frame_controller_sector_get(pd->vg, start, &start_frame, NULL);
+ efl_gfx_frame_controller_sector_get(pd->vg, end, &end_frame, NULL);
+ }
+ else
+ {
+ if (start)
+ {
+ efl_gfx_frame_controller_sector_get(pd->vg, start, &start_frame, &end_frame);
+ }
+ else if (end)
+ {
+ efl_gfx_frame_controller_sector_get(pd->vg, end, &end_frame, NULL);
+ }
+ }
+
+ efl_ui_vg_animation_min_frame_set(obj, start_frame);
+ if (start_frame < end_frame)
+ efl_ui_vg_animation_max_frame_set(obj, end_frame);
+
+ if (!efl_player_playing_set(obj, EINA_TRUE))
+ return EINA_FALSE;
+ return EINA_TRUE;
+}
+
+Eina_Bool
+_playing_stop(Eo* obj, Efl_Ui_Vg_Animation_Data *pd)
+{
+ Eina_Bool playing = EINA_FALSE;
+ if (!pd->transit) return EINA_FALSE;
+
+ if ((pd->state == EFL_UI_VG_ANIMATION_STATE_NOT_READY) ||
+ (pd->state == EFL_UI_VG_ANIMATION_STATE_STOPPED))
+ return EINA_FALSE;
+
+ _frame_set_facade(obj, pd, 0);
+
+ pd->progress = 0;
+ pd->state = EFL_UI_VG_ANIMATION_STATE_STOPPED;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYING_CHANGED, &playing);
+
+ elm_transit_del(pd->transit);
+ return EINA_TRUE;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_frame_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, int frame_num)
+{
+ efl_player_playback_progress_set(obj, (double) frame_num / (double) (evas_object_vg_animated_frame_count_get(pd->vg) - 1));
+}
+
+EOLIAN static int
+_efl_ui_vg_animation_frame_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ double progress = (pd->progress * (pd->max_progress - pd->min_progress)) + pd->min_progress;
+ return (int) ((double) (evas_object_vg_animated_frame_count_get(pd->vg) - 1) * progress);
+}
+
+EOLIAN static Eina_Size2D
+_efl_ui_vg_animation_default_view_size_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED)
+{
+ return efl_canvas_vg_object_default_size_get(pd->vg);
+}
+
+EOLIAN static Efl_Ui_Vg_Animation_State
+_efl_ui_vg_animation_state_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->state;
+}
+
+EOLIAN static int
+_efl_ui_vg_animation_frame_count_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return efl_gfx_frame_controller_frame_count_get(pd->vg);
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_min_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, double min_progress)
+{
+ if (min_progress < 0.0 || min_progress > 1.0 || min_progress > pd->max_progress) return;
+
+ pd->min_progress = min_progress;
+ _update_frame_duration(pd);
+}
+
+EOLIAN static double
+_efl_ui_vg_animation_min_progress_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->min_progress;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_max_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, double max_progress)
+{
+ if (max_progress < 0.0 || max_progress > 1.0 || max_progress < pd->min_progress) return;
+
+ pd->max_progress = max_progress;
+ _update_frame_duration(pd);
+}
+
+EOLIAN static double
+_efl_ui_vg_animation_max_progress_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->max_progress;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_min_frame_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, int min_frame)
+{
+ int frame_count = evas_object_vg_animated_frame_count_get(pd->vg);
+ if (min_frame < 0) min_frame = 0;
+ else
+ {
+ int max_frame = (frame_count - 1) * pd->max_progress;
+ if (min_frame > max_frame) min_frame = max_frame;
+ }
+
+ pd->min_progress = (double)min_frame / (double)(frame_count - 1);
+ _update_frame_duration(pd);
+}
+
+EOLIAN static int
+_efl_ui_vg_animation_min_frame_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->min_progress * (evas_object_vg_animated_frame_count_get(pd->vg) - 1);
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_max_frame_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, int max_frame)
+{
+ int frame_count = evas_object_vg_animated_frame_count_get(pd->vg);
+ if (max_frame > frame_count - 1) max_frame = frame_count - 1;
+ else
+ {
+ int min_frame = (frame_count - 1) * pd->min_progress;
+ if (min_frame > max_frame) max_frame = min_frame;
+ }
+
+ pd->max_progress = (double)max_frame / (double)(frame_count - 1);
+ _update_frame_duration(pd);
+}
+
+EOLIAN static int
+_efl_ui_vg_animation_max_frame_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->max_progress * (evas_object_vg_animated_frame_count_get(pd->vg) - 1);
+}
+
+EOLIAN static Efl_Object *
+_efl_ui_vg_animation_efl_part_part_get(const Eo* obj, Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED, const char *part)
+{
+ return ELM_PART_IMPLEMENT(EFL_UI_VG_ANIMATION_PART_CLASS, obj, part);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_ui_widget_widget_sub_object_add(Eo *obj, Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED, Evas_Object *sobj)
+{
+ Eina_Bool int_ret = EINA_FALSE;
+
+ if (evas_object_data_get(sobj, "elm-parent") == obj) return EINA_TRUE;
+
+ int_ret = elm_widget_sub_object_add(efl_super(obj, MY_CLASS), sobj);
+ if (!int_ret) return EINA_FALSE;
+
+ evas_object_event_callback_add
+ (sobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _on_sub_object_size_hint_change, obj);
+
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_ui_widget_widget_sub_object_del(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, Evas_Object *sobj)
+{
+ Eina_List *l;
+ Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d;
+ Eina_Bool int_ret = EINA_FALSE;
+
+ ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
+
+ evas_object_event_callback_del_full
+ (sobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _on_sub_object_size_hint_change, obj);
+
+ int_ret = elm_widget_sub_object_del(efl_super(obj, MY_CLASS), sobj);
+ if (!int_ret) return EINA_FALSE;
+// if (pd->destructed_is) return EINA_TRUE;
+
+ EINA_LIST_FOREACH(pd->subs, l, sub_d)
+ {
+ if (sub_d->obj != sobj) continue;
+ pd->subs = eina_list_remove_list(pd->subs, l);
+ if (sub_d->proxy) efl_del(sub_d->proxy);
+ eina_stringshare_del(sub_d->part);
+ free(sub_d);
+ break;
+ }
+
+ // No need to resize object during destruction
+ if (wd->resize_obj && efl_alive_get(obj))
+ efl_canvas_group_change(obj);
+
+ return EINA_TRUE;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_value_provider_override(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, Efl_Gfx_Vg_Value_Provider *value_provider)
+{
+ if (!value_provider) return;
+
+ if (pd->vp_list)
+ {
+ const char *keypath1 = efl_gfx_vg_value_provider_keypath_get(value_provider);
+ if (!keypath1)
+ {
+ ERR("Couldn't override Value Provider(%p). Keypath is NULL.", value_provider);
+ return;
+ }
+ const Eina_List *l;
+ Efl_Gfx_Vg_Value_Provider *_vp;
+ EINA_LIST_FOREACH(pd->vp_list, l, _vp)
+ {
+ const char *keypath2 = efl_gfx_vg_value_provider_keypath_get(_vp);
+ if (!strcmp(keypath1, keypath2))
+ {
+ pd->vp_list = eina_list_remove(pd->vp_list, _vp);
+ efl_unref(_vp);
+ break;
+ }
+ }
+ }
+
+ efl_ref(value_provider);
+ pd->vp_list = eina_list_append(pd->vp_list, value_provider);
+ efl_key_data_set(pd->vg, "_vg_value_providers", pd->vp_list);
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_player_playing_set(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, Eina_Bool playing)
+{
+ if (playing)
+ {
+ if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING && pd->playback_speed > 0)
+ || (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS && pd->playback_speed <= 0))
+ return EINA_FALSE;
+
+ Eina_Bool rewind = EINA_FALSE;
+ if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING && pd->playback_speed <= 0)
+ || (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS && pd->playback_speed > 0))
+ rewind = EINA_TRUE;
+
+ if (pd->playback_speed <= 0)
+ pd->playing_reverse = EINA_TRUE;
+ else
+ pd->playing_reverse = EINA_FALSE;
+ pd->autoplay_pause = EINA_FALSE;
+
+
+ if (!efl_file_loaded_get(obj)) return EINA_FALSE;
+ if (!pd->transit && !_ready_play(obj, pd)) return EINA_FALSE;
+
+
+ if (pd->state == EFL_UI_VG_ANIMATION_STATE_STOPPED)
+ {
+ if (pd->playing_reverse && EINA_DBL_EQ(pd->progress, 0)) pd->progress = 1.0;
+ _transit_go_facade(obj, pd);
+ }
+ else if (rewind)
+ {
+ elm_transit_progress_value_set(pd->transit, pd->playing_reverse ? 1 - pd->progress : pd->progress);
+ pd->playback_direction_changed = EINA_FALSE;
+ }
+ }
+ else
+ {
+ return _playing_stop(obj, pd);
+ }
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_player_playing_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ if (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING)
+ return EINA_TRUE;
+ return EINA_FALSE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_player_paused_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, Eina_Bool paused)
+{
+ paused = !!paused;
+ if (paused)
+ {
+ if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING) ||
+ (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS))
+ {
+ elm_transit_paused_set(pd->transit, paused);
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PAUSED;
+ pd->autoplay_pause = EINA_FALSE;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
+ }
+ }
+ else
+ {
+ if (pd->transit && pd->state == EFL_UI_VG_ANIMATION_STATE_PAUSED)
+ {
+ elm_transit_paused_set(pd->transit, paused);
+ if (pd->playing_reverse)
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS;
+ else
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
+ pd->autoplay_pause = EINA_FALSE;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
+ }
+ }
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_player_paused_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ if (pd->state == EFL_UI_VG_ANIMATION_STATE_PAUSED)
+ return EINA_TRUE;
+ return EINA_FALSE;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_player_playback_position_set(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, double sec)
+{
+ EINA_SAFETY_ON_TRUE_RETURN(sec < 0);
+ EINA_SAFETY_ON_TRUE_RETURN(sec > pd->frame_duration);
+
+ efl_player_playback_progress_set(obj, EINA_DBL_NONZERO(pd->frame_duration) ? sec / pd->frame_duration : 0);
+}
+
+EOLIAN static double
+_efl_ui_vg_animation_efl_player_playback_position_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->frame_duration * pd->progress;
+}
+
+EOLIAN static double
+_efl_ui_vg_animation_efl_player_playback_progress_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->progress;
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_player_playback_progress_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, double progress)
+{
+ if (progress < 0) progress = 0;
+ else if (progress > 1) progress = 1;
+ if (EINA_DBL_EQ(pd->progress, progress)) return;
+
+ pd->progress = progress;
+
+ if (pd->frame_cnt > 0)
+ evas_object_vg_animated_frame_set(pd->vg, (int) ((pd->frame_cnt - 1) * progress));
+
+ if (pd->transit)
+ {
+ if (pd->playing_reverse)
+ elm_transit_progress_value_set(pd->transit, 1 - progress);
+ else
+ elm_transit_progress_value_set(pd->transit, progress);
+ }
+}
+
+EOLIAN static void
+_efl_ui_vg_animation_efl_player_playback_speed_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, double speed)
+{
+ Eina_Bool rewind = EINA_FALSE;
+
+ if ((pd->playback_speed > 0 && speed < 0) || (pd->playback_speed < 0 && speed > 0))
+ rewind = EINA_TRUE;
+
+ // pd->playback_direction_changed is used only during playback.
+ if (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING && rewind)
+ {
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS;
+ pd->playback_direction_changed = EINA_TRUE;
+ }
+ else if (pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS && rewind)
+ {
+ pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
+ pd->playback_direction_changed = EINA_TRUE;
+ }
+
+ pd->playback_speed = speed;
+ speed = speed < 0 ? speed * -1 : speed;
+ if (pd->transit)
+ elm_transit_duration_set(pd->transit, EINA_DBL_NONZERO(pd->playback_speed) ? pd->frame_duration * (1 / speed) : 0);
+}
+
+EOLIAN static double
+_efl_ui_vg_animation_efl_player_playback_speed_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->playback_speed;
+}
+
+EOLIAN static double
+_efl_ui_vg_animation_efl_playable_length_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd)
+{
+ return pd->frame_duration;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_playable_playable_get(const Eo *obj, Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED)
+{
+ if (!efl_file_loaded_get(obj)) return EINA_FALSE;
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_vg_animation_efl_playable_seekable_get(const Eo *obj, Efl_Ui_Vg_Animation_Data *pd EINA_UNUSED)
+{
+ if (!efl_file_loaded_get(obj)) return EINA_FALSE;
+ return EINA_TRUE;
+}
+
+#define MY_CLASS_NAME_LEGACY "elm_animation_view"
+
+static void
+_efl_ui_vg_animation_legacy_class_constructor(Efl_Class *klass)
+{
+ evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
+}
+
+EOLIAN static Eo *
+_efl_ui_vg_animation_legacy_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
+{
+ obj = efl_constructor(efl_super(obj, EFL_UI_VG_ANIMATION_LEGACY_CLASS));
+ efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
+ return obj;
+}
+
+EAPI Elm_Animation_View*
+elm_animation_view_add(Evas_Object *parent)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
+ return elm_legacy_add(EFL_UI_VG_ANIMATION_LEGACY_CLASS, parent);
+}
+
+EAPI Eina_Bool
+elm_animation_view_file_set(Elm_Animation_View *obj, const char *file, const char *key)
+{
+ return efl_file_simple_load(obj, file, key);
+}
+
+EAPI Elm_Animation_View_State
+elm_animation_view_state_get(Elm_Animation_View *obj)
+{
+ Elm_Animation_View_State state = ELM_ANIMATION_VIEW_STATE_NOT_READY;
+
+ switch (efl_ui_vg_animation_state_get(obj))
+ {
+ case EFL_UI_VG_ANIMATION_STATE_PLAYING:
+ state = ELM_ANIMATION_VIEW_STATE_PLAY;
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS:
+ state = ELM_ANIMATION_VIEW_STATE_PLAY_BACK;
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_PAUSED:
+ state = ELM_ANIMATION_VIEW_STATE_PAUSE;
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_STOPPED:
+ state = ELM_ANIMATION_VIEW_STATE_STOP;
+ break;
+ case EFL_UI_VG_ANIMATION_STATE_NOT_READY:
+ default:
+ break;
+ }
+ return state;
+}
+
+static Eina_Bool
+_efl_ui_vg_animation_content_set(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, const char *part, Efl_Gfx_Entity *content)
+{
+ Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d;
+ Eina_List *l;
+
+ if (!efl_file_loaded_get(obj)) return EINA_FALSE;
+
+ EINA_LIST_FOREACH(pd->subs, l, sub_d)
+ {
+ if (!strcmp(part, sub_d->part))
+ {
+ if (content == sub_d->obj) goto end;
+ if (efl_alive_get(sub_d->obj))
+ {
+ if (sub_d->proxy) efl_del(sub_d->proxy);
+ _eo_unparent_helper(sub_d->obj, obj);
+ efl_del(sub_d->obj);
+ }
+ break;
+ }
+ else if (content == sub_d->obj)
+ {
+ pd->subs = eina_list_remove_list(pd->subs, l);
+ eina_stringshare_del(sub_d->part);
+ if (sub_d->proxy) efl_del(sub_d->proxy);
+ free(sub_d);
+ _elm_widget_sub_object_redirect_to_top(obj, content);
+ break;
+ }
+ }
+
+ if (content)
+ {
+ if (!elm_widget_sub_object_add(obj, content)) return EINA_FALSE;
+
+ sub_d = ELM_NEW(Efl_Ui_Vg_Animation_Sub_Obj_Data);
+ if (!sub_d)
+ {
+ ERR("failed to allocate memory!");
+ _elm_widget_sub_object_redirect_to_top(obj, content);
+ return EINA_FALSE;
+ }
+ sub_d->part = eina_stringshare_add(part);
+ sub_d->obj = content;
+ sub_d->proxy = _proxy_create(sub_d->obj);
+ pd->subs = eina_list_append(pd->subs, sub_d);
+ efl_parent_set(content, obj);
+ }
+
+ efl_canvas_group_change(obj);
+
+ _update_part_contents(obj, pd);
+
+end:
+ return EINA_TRUE;
+}
+
+static Efl_Gfx_Entity *
+_efl_ui_vg_animation_content_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, const char *part)
+{
+ const Eina_List *l;
+ Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d;
+
+ EINA_LIST_FOREACH(pd->subs, l, sub_d)
+ {
+ if (strcmp(part, sub_d->part)) continue;
+ return sub_d->obj;
+ }
+
+ return NULL;
+}
+
+static Efl_Gfx_Entity *
+_efl_ui_vg_animation_content_unset(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, const char *part)
+{
+ Efl_Ui_Vg_Animation_Sub_Obj_Data *sub_d;
+ Eina_List *l;
+ Eo *content;
+
+ ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
+
+ EINA_LIST_FOREACH(pd->subs, l, sub_d)
+ {
+ if (!strcmp(part, sub_d->part))
+ {
+ if (!sub_d->obj)
+ {
+ ERR("Sub Object Data doens't have valid object, Something wrong....");
+ return NULL;
+ }
+
+ content = sub_d->obj;
+
+ /* sub_d will die in _widget_sub_object_del */
+ if (!_elm_widget_sub_object_redirect_to_top(obj, content))
+ {
+ ERR("could not remove sub object %p from %p", content, obj);
+ return NULL;
+ }
+ _eo_unparent_helper(content, obj);
+
+ return content;
+ }
+ }
+
+ return NULL;
+}
+
+#undef GROW_SIZE
+#undef QUEUE_SIZE
+#undef T_SEGMENT_N
+#undef C_SEGMENT_N
+
+
+/* Efl.Part begin */
+ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_vg_animation, EFL_UI_VG_ANIMATION, Efl_Ui_Vg_Animation_Data)
+ELM_PART_OVERRIDE_CONTENT_GET(efl_ui_vg_animation, EFL_UI_VG_ANIMATION, Efl_Ui_Vg_Animation_Data)
+ELM_PART_OVERRIDE_CONTENT_UNSET(efl_ui_vg_animation, EFL_UI_VG_ANIMATION, Efl_Ui_Vg_Animation_Data)
+#include "efl_ui_vg_animation_part.eo.c"
+/* Efl.Part end */
+
+/* Internal EO APIs and hidden overrides */
+
+#define EFL_UI_VG_ANIMATION_EXTRA_OPS \
+ EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_vg_animation)
+
+#include "efl_ui_vg_animation_eo.legacy.c"
+#include "efl_ui_vg_animation.eo.c"
diff --git a/src/lib/elementary/efl_ui_vg_animation.eo b/src/lib/elementary/efl_ui_vg_animation.eo
new file mode 100644
index 0000000000..ca0adbb201
--- /dev/null
+++ b/src/lib/elementary/efl_ui_vg_animation.eo
@@ -0,0 +1,179 @@
+
+enum Efl.Ui.Vg_Animation_State
+{
+ [[State of vg_animation
+
+ @since 1.24
+ ]]
+ not_ready, [[Animation is not ready to play. (Probably, it didn't file set yet or failed to read file.]]
+ playing, [[Animation is playing.]]
+ playing_backwards, [[Animation is playing backwards (rewinding).]]
+ paused, [[Animation has been paused.]]
+ stopped [[Vg Animation successfully loaded a file then readied for playing.
+ Otherwise after finished animation or stopped forcibly by request.]]
+}
+
+class Efl.Ui.Vg_Animation extends Efl.Ui.Widget implements Efl.Gfx.View, Efl.File, Efl.Player, Efl.Playable, Efl.Part
+{
+ [[Elementary Vector Graphcis Animation class.
+ Vg Animation is designed to show and play animation of
+ vector graphics based content. It hides all @Efl.Canvas.Vg.Object details
+ but just open an API to read vector data from file. Also, it implements
+ details of animation control methods of Vector.
+
+ Vector data could contain static or animatable vector elements including
+ animation information. Available vector data file formats are SVG, JSON and EET.
+ @Efl.Ui.Vg_Animation currently only supports the animation information contained in
+ JSON (known as Lottie file as well) and EET files.
+
+ @since 1.24
+ ]]
+ event_c_prefix: efl_ui_vg_animation;
+ methods {
+ @property frame {
+ [[Number of current frame.
+
+ Ranges from 0 to @.frame_count - 1.
+ ]]
+ set {
+ }
+ get {
+ }
+ values {
+ frame_num: int; [[Current frame number.]]
+ }
+ }
+ @property default_view_size {
+ [[The default view size that specified from vector resource.
+ ]]
+ get {
+ }
+ values {
+ size: Eina.Size2D;
+ }
+ }
+ @property state {
+ [[Current vg animation state.
+ See @Efl.Ui.Vg_Animation_State
+ ]]
+ get{
+ }
+ values {
+ state: Efl.Ui.Vg_Animation_State; [[Current vg animation state]]
+ }
+ }
+ @property frame_count {
+ [[The index of end frame of the vg animation, if it's animated.
+ Note : frame number starts with 0.
+ ]]
+ get {
+ }
+ values {
+ frame_count: int; [[The number of frames. 0, if it's not animated.]]
+ }
+ }
+ @property min_progress {
+ [[The start progress of the play.
+ ]]
+ set {
+ }
+ get {
+ }
+ values {
+ min_progress: double(0.0); [[The minimum progress. Value must be 0 ~ 1.]]
+ }
+ }
+ @property max_progress {
+ [[The last progress of the play.
+ ]]
+ set {
+ }
+ get {
+ }
+ values {
+ max_progress: double(1.0); [[The maximum progress. Value must be 0 ~ 1.]]
+ }
+ }
+ @property min_frame {
+ [[The start frame of the play.
+ ]]
+ set {
+ }
+ get {
+ }
+ values {
+ min_frame: int(0); [[The minimum frame for play. Value must be 0 ~ @.max_frame]]
+ }
+ }
+ @property max_frame {
+ [[The last frame of the play.
+ ]]
+ set {
+ }
+ get {
+ }
+ values {
+ max_frame: int; [[The maximum frame for play. Value must be @.min_frame ~ (@.frame_count - 1).
+ The default value is @.frame_count - 1.
+ ]]
+ }
+ }
+ playing_sector @beta {
+ [[Play animation of sector one time instantly when it's available.
+
+ If end sector is NULL, only start sector is referenced.
+ If both the start and end sectors are valid,
+ Play is played and stoped at starting point of each sector.
+
+ If start is null and end is valid, playback starts from 0 frame to the start frame of the end sector.
+ If both sectors start and end are invalid. Play from 0 frame to the last frame of vg animation object.
+
+ Note: This method use to @.min_frame, @.max_frame (@.min_progress, @.max_progress) internally.
+ So if you have changed the min or max frame(progress) it can be changed to the sector frame.
+ ]]
+ params {
+ @in start: string; [[ The name of start sector ]]
+ @in end: string; [[ The name of end sector ]]
+ }
+ return: bool; [[$true when it's successful. $false otherwise.]]
+ }
+ value_provider_override @beta {
+ [[Override each value of the animation object.
+ Values can be properties of Efl.Gfx.Vg.Value_provider such as color and matrix information.
+
+ Example:
+ Eo *vp = efl_add(EFL_GFX_VG_VALUE_PROVIDER_CLASS, NULL);
+ @Efl.Gfx.Vg.Value_Provider.keypath.set(vp, "SomeLayer:SomeObject:SomeContents");
+ // Set vp property
+ @.value_provider_override(target_vg_animation, vg);
+ See @Efl.Gfx.Vg.Value_Provider
+ ]]
+ params {
+ value_provider: Efl.Gfx.Vg.Value_Provider; [[ Override the values of the animation object. this should have keypath infomation. See @Efl.Gfx.Vg.Value_Provider ]]
+ }
+ }
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Object.destructor;
+ Efl.File.load;
+ Efl.File.unload;
+ Efl.Gfx.Entity.visible { set; }
+ Efl.Gfx.Entity.position { set; }
+ Efl.Gfx.Entity.size { set; }
+ Efl.Gfx.View.view_size { set; get; }
+ Efl.Part.part_get;
+ Efl.Ui.Widget.widget_sub_object_add;
+ Efl.Ui.Widget.widget_sub_object_del;
+ Efl.Player.playing { set; get; }
+ Efl.Player.paused { set; get; }
+ Efl.Player.playback_position { set; get; }
+ Efl.Player.playback_progress { get; set; }
+ Efl.Player.playback_speed { set; get; }
+ Efl.Playable.length { get; }
+ Efl.Playable.playable { get; }
+ Efl.Playable.seekable { get; }
+ Efl.Player.autoplay { set; get; }
+ Efl.Player.playback_loop { set; get; }
+ }
+}
diff --git a/src/lib/elementary/efl_ui_animation_view.h b/src/lib/elementary/efl_ui_vg_animation.h
index 9241791bf4..1caaf29757 100644
--- a/src/lib/elementary/efl_ui_animation_view.h
+++ b/src/lib/elementary/efl_ui_vg_animation.h
@@ -26,7 +26,7 @@
* @ingroup Elm_Animation_View
*/
#ifndef EFL_NOLEGACY_API_SUPPORT
-#include "efl_ui_animation_view_legacy.h"
+#include "efl_ui_vg_animation_legacy.h"
#endif
/**
* @}
diff --git a/src/lib/elementary/efl_ui_vg_animation_eo.legacy.c b/src/lib/elementary/efl_ui_vg_animation_eo.legacy.c
new file mode 100644
index 0000000000..40b0b8fe81
--- /dev/null
+++ b/src/lib/elementary/efl_ui_vg_animation_eo.legacy.c
@@ -0,0 +1,200 @@
+
+EAPI void
+elm_animation_view_auto_play_set(Efl_Ui_Vg_Animation *obj, Eina_Bool auto_play)
+{
+ efl_player_autoplay_set(obj, auto_play);
+}
+
+EAPI Eina_Bool
+elm_animation_view_auto_play_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_player_autoplay_get(obj);
+}
+
+EAPI void
+elm_animation_view_auto_repeat_set(Efl_Ui_Vg_Animation *obj, Eina_Bool autorepeat)
+{
+ efl_player_playback_loop_set(obj, autorepeat);
+}
+
+EAPI Eina_Bool
+elm_animation_view_auto_repeat_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_player_playback_loop_get(obj);
+}
+
+EAPI Eina_Bool
+elm_animation_view_speed_set(Efl_Ui_Vg_Animation *obj, double speed)
+{
+ if (!obj) return EINA_FALSE;
+ efl_player_playback_speed_set(obj, speed);
+ return EINA_TRUE;
+}
+
+EAPI double
+elm_animation_view_speed_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_player_playback_speed_get(obj);
+}
+
+EAPI double
+elm_animation_view_duration_time_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_playable_length_get(obj);
+}
+
+EAPI void
+elm_animation_view_progress_set(Efl_Ui_Vg_Animation *obj, double progress)
+{
+ efl_player_playback_progress_set(obj, progress);
+}
+
+EAPI double
+elm_animation_view_progress_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_player_playback_progress_get(obj);
+}
+
+EAPI void
+elm_animation_view_frame_set(Efl_Ui_Vg_Animation *obj, int frame_num)
+{
+ efl_ui_vg_animation_frame_set(obj, frame_num);
+}
+
+EAPI int
+elm_animation_view_frame_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_ui_vg_animation_frame_get(obj);
+}
+
+EAPI Eina_Bool
+elm_animation_view_play(Efl_Ui_Vg_Animation *obj)
+{
+ double speed = efl_player_playback_speed_get(obj);
+ efl_player_playback_speed_set(obj, speed < 0 ? speed * -1 : speed);
+ return efl_player_playing_set(obj, EINA_TRUE);
+}
+
+EAPI Eina_Bool
+elm_animation_view_play_back(Efl_Ui_Vg_Animation *obj)
+{
+ double speed = efl_player_playback_speed_get(obj);
+ efl_player_playback_speed_set(obj, speed > 0 ? speed * -1 : speed);
+ return efl_player_playing_set(obj, EINA_TRUE);
+}
+
+EAPI Eina_Bool
+elm_animation_view_pause(Efl_Ui_Vg_Animation *obj)
+{
+ return efl_player_paused_set(obj, EINA_TRUE);
+}
+
+EAPI Eina_Bool
+elm_animation_view_resume(Efl_Ui_Vg_Animation *obj)
+{
+ return efl_player_paused_set(obj, EINA_FALSE);
+}
+
+EAPI Eina_Bool
+elm_animation_view_stop(Efl_Ui_Vg_Animation *obj)
+{
+ return efl_player_playing_set(obj, EINA_FALSE);
+}
+
+EAPI Eina_Size2D
+elm_animation_view_default_size_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_ui_vg_animation_default_view_size_get(obj);
+}
+
+EAPI Eina_Bool
+elm_animation_view_is_playing_back(Efl_Ui_Vg_Animation *obj)
+{
+ return (efl_ui_vg_animation_state_get(obj) == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS);
+}
+
+EAPI int
+elm_animation_view_frame_count_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_ui_vg_animation_frame_count_get(obj);
+}
+
+EAPI void
+elm_animation_view_min_progress_set(Efl_Ui_Vg_Animation *obj, double min_progress)
+{
+ efl_ui_vg_animation_min_progress_set(obj, min_progress);
+}
+
+EAPI double
+elm_animation_view_min_progress_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_ui_vg_animation_min_progress_get(obj);
+}
+
+EAPI void
+elm_animation_view_max_progress_set(Efl_Ui_Vg_Animation *obj, double max_progress)
+{
+ efl_ui_vg_animation_max_progress_set(obj, max_progress);
+}
+
+EAPI double
+elm_animation_view_max_progress_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_ui_vg_animation_max_progress_get(obj);
+}
+
+EAPI void
+elm_animation_view_min_frame_set(Efl_Ui_Vg_Animation *obj, int min_frame)
+{
+ efl_ui_vg_animation_min_frame_set(obj, min_frame);
+}
+
+EAPI int
+elm_animation_view_min_frame_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_ui_vg_animation_min_frame_get(obj);
+}
+
+EAPI void
+elm_animation_view_max_frame_set(Efl_Ui_Vg_Animation *obj, int max_frame)
+{
+ efl_ui_vg_animation_max_frame_set(obj, max_frame);
+}
+
+EAPI int
+elm_animation_view_max_frame_get(const Efl_Ui_Vg_Animation *obj)
+{
+ return efl_ui_vg_animation_max_frame_get(obj);
+}
+
+static Eina_Bool
+_efl_ui_vg_animation_legacy_class_initializer(Efl_Class *klass)
+{
+ const Efl_Object_Ops *opsp = NULL;
+
+ const Efl_Object_Property_Reflection_Ops *ropsp = NULL;
+
+#ifndef EFL_UI_VG_ANIMATION_LEGACY_EXTRA_OPS
+#define EFL_UI_VG_ANIMATION_LEGACY_EXTRA_OPS
+#endif
+
+ EFL_OPS_DEFINE(ops,
+ EFL_OBJECT_OP_FUNC(efl_constructor, _efl_ui_vg_animation_legacy_efl_object_constructor),
+ EFL_UI_VG_ANIMATION_LEGACY_EXTRA_OPS
+ );
+ opsp = &ops;
+
+ return efl_class_functions_set(klass, opsp, ropsp);
+}
+
+static const Efl_Class_Description _efl_ui_vg_animation_legacy_class_desc = {
+ EO_VERSION,
+ "Efl.Ui.VG_Animation_Legacy",
+ EFL_CLASS_TYPE_REGULAR,
+ 0,
+ _efl_ui_vg_animation_legacy_class_initializer,
+ _efl_ui_vg_animation_legacy_class_constructor,
+ NULL
+};
+
+EFL_DEFINE_CLASS(efl_ui_vg_animation_legacy_class_get, &_efl_ui_vg_animation_legacy_class_desc, EFL_UI_VG_ANIMATION_CLASS, EFL_UI_LEGACY_INTERFACE, NULL);
diff --git a/src/lib/elementary/efl_ui_animation_view_eo.legacy.h b/src/lib/elementary/efl_ui_vg_animation_eo.legacy.h
index 78dd2f1d5d..1545aeae43 100644
--- a/src/lib/elementary/efl_ui_animation_view_eo.legacy.h
+++ b/src/lib/elementary/efl_ui_vg_animation_eo.legacy.h
@@ -514,4 +514,14 @@ EAPI void elm_animation_view_max_frame_set(Elm_Animation_View *obj, int max_fram
*/
EAPI int elm_animation_view_max_frame_get(const Elm_Animation_View *obj);
+#ifdef EFL_BETA_API_SUPPORT
+/** Elementary vg_animation class
+ *
+ * @ingroup Efl_Ui_VG_Animation_Legacy
+ */
+#define EFL_UI_VG_ANIMATION_LEGACY_CLASS efl_ui_vg_animation_legacy_class_get()
+
+EWAPI const Efl_Class *efl_ui_vg_animation_legacy_class_get(void) EINA_CONST;
+#endif /* EFL_BETA_API_SUPPORT */
+
#endif
diff --git a/src/lib/elementary/efl_ui_animation_view_legacy.h b/src/lib/elementary/efl_ui_vg_animation_legacy.h
index 95054168c5..a25e8b5976 100644
--- a/src/lib/elementary/efl_ui_animation_view_legacy.h
+++ b/src/lib/elementary/efl_ui_vg_animation_legacy.h
@@ -1,5 +1,5 @@
-#include "efl_ui_animation_view_eo.legacy.h"
+#include "efl_ui_vg_animation_eo.legacy.h"
/**
* Add a new animation view widget to the parent's canvas
diff --git a/src/lib/elementary/efl_ui_vg_animation_part.eo b/src/lib/elementary/efl_ui_vg_animation_part.eo
new file mode 100644
index 0000000000..9927fad90d
--- /dev/null
+++ b/src/lib/elementary/efl_ui_vg_animation_part.eo
@@ -0,0 +1,9 @@
+class @beta Efl.Ui.Vg_Animation_Part extends Efl.Ui.Widget_Part implements Efl.Content
+{
+ [[Efl UI Vg_Animation internal part class]]
+ data: null;
+ implements {
+ Efl.Content.content { set; get; }
+ Efl.Content.content_unset;
+ }
+}
diff --git a/src/lib/elementary/efl_ui_vg_animation_private.h b/src/lib/elementary/efl_ui_vg_animation_private.h
new file mode 100644
index 0000000000..ace4c4a369
--- /dev/null
+++ b/src/lib/elementary/efl_ui_vg_animation_private.h
@@ -0,0 +1,44 @@
+#ifndef EFL_UI_VG_ANIMATION_PRIVATE_H
+#define EFL_UI_VG_ANIMATION_PRIVATE_H
+
+#include "Elementary.h"
+#include "efl_ui_vg_animation.eo.h"
+
+typedef struct _Efl_Ui_Vg_Animation_Data Efl_Ui_Vg_Animation_Data;
+
+struct _Efl_Ui_Vg_Animation_Data
+{
+ Eo* vg; //Evas_Object_Vg
+ Efl_Ui_Vg_Animation_State state;
+ Elm_Transit *transit;
+ Eina_Stringshare *file;
+ double playback_speed;
+ double progress;
+ double frame_cnt;
+ int repeat_times;
+ double frame_duration;
+ double min_progress;
+ double max_progress;
+ Eina_List *subs;
+ Eina_List *vp_list;
+
+ Eina_Bool playing_reverse : 1;
+ Eina_Bool autoplay : 1;
+ Eina_Bool autoplay_pause: 1;
+ Eina_Bool loop : 1;
+ Eina_Bool playback_direction_changed : 1;
+};
+
+#define EFL_UI_VG_ANIMATION_DATA_GET(o, sd) \
+ Efl_Ui_Vg_Animation_Data * sd = efl_data_scope_safe_get(o, EFL_UI_VG_ANIMATION_CLASS)
+
+#define EFL_UI_VG_ANIMATION_DATA_GET_OR_RETURN(o, ptr) \
+ EFL_UI_VG_ANIMATION_DATA_GET(o, ptr); \
+ if (EINA_UNLIKELY(!ptr)) \
+ { \
+ ERR("No widget data for object %p (%s)", \
+ o, evas_object_type_get(o)); \
+ return; \
+ }
+
+#endif
diff --git a/src/lib/elementary/efl_ui_video.h b/src/lib/elementary/efl_ui_video.h
index c4cfc55815..0db9b57cba 100644
--- a/src/lib/elementary/efl_ui_video.h
+++ b/src/lib/elementary/efl_ui_video.h
@@ -26,16 +26,16 @@
* linked Efl_Ui_Video so it will use the video decoder, if available. It also
* activates the "remember" function on the linked Efl_Ui_Video object.
*
- * Both widgets inherit from the @ref Layout one, so that all the
+ * Both widgets inherit from the @ref Elm_Layout one, so that all the
* functions acting on it also work for video objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "focused" : When the video has received focus. (since 1.8)
* @li @c "unfocused" : When the video has lost focus. (since 1.8)
*
* The player widget emits the following signals, besides the ones
- * sent from @ref Layout:
+ * sent from @ref Elm_Layout :
* - @c "forward,clicked" - the user clicked the forward button.
* - @c "info,clicked" - the user clicked the info button.
* - @c "next,clicked" - the user clicked the next button.
diff --git a/src/lib/elementary/efl_ui_video_legacy_eo.h b/src/lib/elementary/efl_ui_video_legacy_eo.h
index f6d5382e38..2e2a6250eb 100644
--- a/src/lib/elementary/efl_ui_video_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_video_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Video_Legacy;
*/
#define EFL_UI_VIDEO_LEGACY_CLASS efl_ui_video_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_video_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_video_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_widget.c b/src/lib/elementary/efl_ui_widget.c
index 768d934fae..553de7c3aa 100644
--- a/src/lib/elementary/efl_ui_widget.c
+++ b/src/lib/elementary/efl_ui_widget.c
@@ -186,8 +186,6 @@ _on_sub_obj_del(void *data, const Efl_Event *event);
static void _propagate_event(void *data, const Efl_Event *eo_event);
static void _elm_widget_shadow_update(Efl_Ui_Widget *obj);
-EFL_CALLBACKS_ARRAY_DEFINE(elm_widget_subitems_callbacks,
- { EFL_EVENT_DEL, _on_sub_obj_del });
EFL_CALLBACKS_ARRAY_DEFINE(efl_subitems_callbacks,
{ EFL_EVENT_DEL, _on_sub_obj_del });
EFL_CALLBACKS_ARRAY_DEFINE(focus_callbacks,
@@ -198,27 +196,13 @@ EFL_CALLBACKS_ARRAY_DEFINE(focus_callbacks,
static inline void
_callbacks_add(Eo *widget, void *data)
{
- if (_elm_widget_is(widget))
- {
- efl_event_callback_array_add(widget, elm_widget_subitems_callbacks(), data);
- }
- else
- {
- efl_event_callback_array_add(widget, efl_subitems_callbacks(), data);
- }
+ efl_event_callback_array_add(widget, efl_subitems_callbacks(), data);
}
static inline void
_callbacks_del(Eo *widget, void *data)
{
- if (_elm_widget_is(widget))
- {
- efl_event_callback_array_del(widget, elm_widget_subitems_callbacks(), data);
- }
- else
- {
- efl_event_callback_array_del(widget, efl_subitems_callbacks(), data);
- }
+ efl_event_callback_array_del(widget, efl_subitems_callbacks(), data);
}
void
@@ -525,13 +509,13 @@ _full_eval(Eo *obj, Elm_Widget_Smart_Data *pd)
{
//emit signal and focus eval old and new
ELM_WIDGET_DATA_GET(old_parent, old_pd);
- _full_eval(old_parent, old_pd);
+ if (old_pd) _full_eval(old_parent, old_pd);
}
if (efl_isa(pd->logical.parent, EFL_UI_WIDGET_CLASS))
{
ELM_WIDGET_DATA_GET(pd->logical.parent, new_pd);
- _full_eval(pd->logical.parent, new_pd);
+ if (new_pd) _full_eval(pd->logical.parent, new_pd);
}
}
@@ -562,8 +546,7 @@ void
_elm_widget_full_eval(Eo *obj)
{
ELM_WIDGET_DATA_GET(obj, pd);
-
- _full_eval(obj, pd);
+ if (pd) _full_eval(obj, pd);
}
/**
@@ -652,6 +635,7 @@ _obj_mouse_down(void *data,
Evas_Object *top;
ELM_WIDGET_DATA_GET(data, sd);
+ if (!sd) return;
Evas_Event_Mouse_Down *ev = event_info;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
@@ -667,6 +651,7 @@ _obj_mouse_move(void *data,
void *event_info)
{
ELM_WIDGET_DATA_GET(data, sd);
+ if (!sd) return;
Evas_Event_Mouse_Move *ev = event_info;
if (!sd->still_in) return;
@@ -688,6 +673,7 @@ _obj_mouse_up(void *data,
void *event_info)
{
ELM_WIDGET_DATA_GET(data, sd);
+ if (!sd) return;
Evas_Event_Mouse_Up *ev = event_info;
if (sd->still_in && (ev->flags == EVAS_BUTTON_NONE) &&
@@ -705,6 +691,7 @@ _obj_mouse_in(void *data,
void *event_info EINA_UNUSED)
{
ELM_WIDGET_DATA_GET(data, sd);
+ if (!sd) return;
if (sd->focus_move_policy == ELM_FOCUS_MOVE_POLICY_IN &&
!efl_invalidated_get(data))
elm_widget_focus_mouse_up_handle(evas_object_widget_parent_find(obj));
@@ -731,6 +718,14 @@ _efl_ui_widget_efl_canvas_group_group_add(Eo *obj, Elm_Widget_Smart_Data *priv)
_obj_mouse_in, obj);
}
+static Eina_Bool
+_keep(void *data, void *gdata)
+{
+ if (data == gdata)
+ return EINA_FALSE;
+ return EINA_TRUE;
+}
+
EOLIAN static void
_efl_ui_widget_efl_canvas_group_group_del(Eo *obj, Elm_Widget_Smart_Data *sd)
{
@@ -744,20 +739,18 @@ _efl_ui_widget_efl_canvas_group_group_del(Eo *obj, Elm_Widget_Smart_Data *sd)
_callbacks_del(sd->hover_obj, obj);
sd->hover_obj = NULL;
}
-
- while (sd->subobjs)
+ while(eina_array_count(sd->children))
{
- sobj = eina_list_data_get(sd->subobjs);
+ sobj = eina_array_data_get(sd->children, 0);
- /* let the objects clean-up themselves and get rid of this list */
if (!elm_widget_sub_object_del(obj, sobj))
{
ERR("failed to remove sub object %p from %p\n", sobj, obj);
- sd->subobjs = eina_list_remove_list
- (sd->subobjs, sd->subobjs);
+ eina_array_remove(sd->children, _keep, sobj);
}
// FIXME: is that a legacy or a new object ?
evas_object_del(sobj);
+ EINA_SAFETY_ON_TRUE_RETURN(eina_array_count(sd->children) && sobj == eina_array_data_get(sd->children, 0));
}
sd->tooltips = eina_list_free(sd->tooltips); /* should be empty anyway */
sd->cursors = eina_list_free(sd->cursors); /* should be empty anyway */
@@ -848,14 +841,14 @@ _efl_ui_widget_efl_gfx_entity_size_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Dat
void
_elm_widget_full_eval_children(Eo *obj, Elm_Widget_Smart_Data *sd)
{
- Eina_List *l;
Eo *child;
_full_eval(obj, sd);
- EINA_LIST_FOREACH(sd->subobjs , l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
Elm_Widget_Smart_Data *sd_child;
+ child = eina_array_data_get(sd->children, i);
if (!efl_isa(child, EFL_UI_WIDGET_CLASS)) continue;
@@ -951,12 +944,13 @@ EOLIAN static void
_efl_ui_widget_efl_canvas_object_is_frame_object_set(Eo *obj, Elm_Widget_Smart_Data *pd, Eina_Bool frame)
{
Evas_Object *o;
- Eina_List *li;
frame = !!frame;
efl_canvas_object_is_frame_object_set(efl_super(obj, MY_CLASS), frame);
- EINA_LIST_FOREACH(pd->subobjs, li, o)
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
{
+ o = eina_array_data_get(pd->children, i);
+
if (evas_object_data_get(o, "_elm_leaveme")) continue;
efl_canvas_object_is_frame_object_set(o, frame);
}
@@ -1094,7 +1088,7 @@ _propagate_event_legacy(Eo *parent, const Efl_Event *event, Eo *obj, Elm_Event_C
((*event_flags) & EVAS_EVENT_FLAG_ON_HOLD))
{
if (prev_flags != *event_flags)
- efl_input_event_flags_set(event->info, *event_flags);
+ efl_input_event_flags_set(event->info, (Efl_Input_Flags)*event_flags);
return EINA_TRUE;
}
@@ -1182,13 +1176,14 @@ EAPI Eina_Bool
elm_widget_access(Evas_Object *obj,
Eina_Bool is_access)
{
- const Eina_List *l;
Evas_Object *child;
Eina_Bool ret = EINA_TRUE;
API_ENTRY return EINA_FALSE;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
+
if (elm_widget_is(child))
ret &= elm_widget_access(child, is_access);
}
@@ -1224,10 +1219,12 @@ elm_widget_theme(Evas_Object *obj)
Eina_Bool err_generic = EINA_FALSE;
API_ENTRY return EFL_UI_THEME_APPLY_ERROR_GENERIC;
-
- EINA_LIST_FOREACH(sd->subobjs, l, child)
- if (_elm_widget_is(child))
- _elm_widget_theme_helper(elm_widget_theme(child), &err_default, &err_generic);
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
+ {
+ child = eina_array_data_get(sd->children, i);
+ if (_elm_widget_is(child))
+ _elm_widget_theme_helper(elm_widget_theme(child), &err_default, &err_generic);
+ }
if (sd->hover_obj)
_elm_widget_theme_helper(elm_widget_theme(sd->hover_obj), &err_default, &err_generic);
@@ -1275,8 +1272,9 @@ elm_widget_theme_specific(Evas_Object *obj,
}
}
if (!force) return;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
elm_widget_theme_specific(child, th, force);
}
@@ -1434,7 +1432,7 @@ _efl_ui_widget_widget_parent_set(Eo *obj, Elm_Widget_Smart_Data *pd, Efl_Ui_Widg
if (parent)
{
ELM_WIDGET_DATA_GET_OR_RETURN(parent, ppd);
- EINA_SAFETY_ON_FALSE_RETURN(eina_list_data_find(ppd->subobjs, obj));
+ EINA_SAFETY_ON_FALSE_RETURN(eina_array_find(ppd->children, obj, NULL));
if (ppd->parent_obj == parent)
{
CRI("ATTEMPTING TO SET CHILD OF PARENT AS PARENT OF ITS OWN PARENT. THIS IS A BUG.");
@@ -1468,7 +1466,7 @@ _efl_ui_widget_widget_parent_set(Eo *obj, Elm_Widget_Smart_Data *pd, Efl_Ui_Widg
if (!pd->on_create)
{
- if ((scale != prev_scale) || (th != prev_th) ||
+ if (!EINA_DBL_EQ(scale, prev_scale) || (th != prev_th) ||
(pmirrored != mirrored))
elm_widget_theme(obj);
}
@@ -1500,7 +1498,8 @@ _efl_ui_widget_widget_parent_set(Eo *obj, Elm_Widget_Smart_Data *pd, Efl_Ui_Widg
static void
_widget_add_sub(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
- sd->subobjs = eina_list_append(sd->subobjs, sobj);
+ if (!sd->children) sd->children = eina_array_new(1);
+ eina_array_push(sd->children, sobj);
evas_object_data_set(sobj, "elm-parent", obj);
_callbacks_add(sobj, obj);
}
@@ -1508,7 +1507,7 @@ _widget_add_sub(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
static void
_widget_del_sub(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
- sd->subobjs = eina_list_remove(sd->subobjs, sobj);
+ eina_array_remove(sd->children, _keep, sobj);
evas_object_data_del(sobj, "elm-parent");
_callbacks_del(sobj, obj);
}
@@ -1517,12 +1516,14 @@ EOLIAN static Eina_Bool
_efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
Efl_Ui_Widget *parent;
+ Eina_Bool is_widget;
EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_isa(sobj, EFL_GFX_ENTITY_INTERFACE), EINA_FALSE);
EINA_SAFETY_ON_TRUE_RETURN_VAL(obj == sobj, EINA_FALSE);
+ is_widget = elm_widget_is(sobj);
//first make sure that we unregister the sobj from the parent
- if (elm_widget_is(sobj))
+ if (is_widget)
parent = efl_ui_widget_parent_get(sobj);
else
parent = evas_object_data_get(sobj, "elm-parent");
@@ -1545,7 +1546,7 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
//and if it is a widget, please set the correct parent on the widget itself
//the parent set method will take care of the property syncing etc.
- if (elm_widget_is(sobj))
+ if (is_widget)
efl_ui_widget_parent_set(sobj, obj);
return EINA_TRUE;
@@ -1554,13 +1555,17 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
EOLIAN static Eina_Bool
_efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
- Evas_Object *sobj_parent;
+ Evas_Object *sobj_parent = NULL;
+ Eina_Bool is_widget;
if (!sobj) return EINA_FALSE;
EINA_SAFETY_ON_TRUE_RETURN_VAL(obj == sobj, EINA_FALSE);
- sobj_parent = evas_object_data_del(sobj, "elm-parent");
+ is_widget = _elm_widget_is(sobj);
+
+ if (!is_widget) sobj_parent = evas_object_data_del(sobj, "elm-parent");
+
if (sobj_parent && sobj_parent != obj)
{
static int abort_on_warn = -1;
@@ -1580,8 +1585,10 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
return EINA_FALSE;
}
- if (_elm_widget_is(sobj))
+ if (is_widget)
{
+ if (efl_ui_widget_parent_get(sobj) != obj)
+ return EINA_FALSE;
if (_is_focused(sobj))
{
elm_widget_tree_unfocusable_set(sobj, EINA_TRUE);
@@ -1713,6 +1720,51 @@ _tree_unfocusable_counter_get(Eo *widget)
}
/**
+ * Evalulate tree number.
+ *
+ * This is here to support properties which are propagating through the widget tree. If this property is set to true,
+ * every widget in the subtree, will also be automatically true.
+ * When one of the widgets in the subtree then seperatly will be set to true, the unsetting on the original widget will not unset the flag automatically in this tree.
+ *
+ * The basic idea here is:
+ * - The numeric number beeing bigger than 0, means that the property is true
+ * - The difference between the number of the parent, and the number of the object, represents the boolean flag
+ * (0 means that the flag is equal to the one of the parent, 1 means that if the parent is false, this child is true).
+ */
+static int
+_calculate_tree_number(int self_counter, int parent_counter, Eina_Bool flag)
+{
+ int distance = self_counter - parent_counter;
+
+ if (flag)
+ self_counter ++;
+ else
+ self_counter --;
+
+ distance = self_counter - parent_counter;
+
+ if ((distance < 0) || (distance > 1))
+ {
+ distance = MAX(MIN(flag, 1), 0);
+ self_counter = parent_counter + distance;
+ }
+
+ return self_counter;
+}
+
+static void
+_propagate_bool_property(Elm_Widget_Smart_Data *pd, Eina_Bool flag, void (*property_setting)(Eo *obj, Eina_Bool flag))
+{
+ Efl_Ui_Widget *subs;
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
+ {
+ subs = eina_array_data_get(pd->children, i);
+ if (efl_isa(subs, EFL_UI_WIDGET_CLASS))
+ property_setting(subs, flag);
+ }
+}
+
+/**
* @internal
*
* This API makes the widget object and its children to be unfocusable.
@@ -1730,33 +1782,21 @@ _tree_unfocusable_counter_get(Eo *widget)
EAPI void
elm_widget_tree_unfocusable_set(Eo *obj, Eina_Bool tree_unfocusable)
{
- Efl_Ui_Widget *subs;
- Eina_List *n;
Elm_Widget_Smart_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
EINA_SAFETY_ON_NULL_RETURN(pd);
- int distance, parent_counter = (pd->parent_obj ? _tree_unfocusable_counter_get(pd->parent_obj) : 0);
+ int old_tree_unfocusable;
- if (tree_unfocusable)
- pd->tree_unfocusable ++;
- else
- pd->tree_unfocusable --;
+ old_tree_unfocusable = pd->tree_unfocusable;
- distance = pd->tree_unfocusable - parent_counter;
+ pd->tree_unfocusable = _calculate_tree_number(pd->tree_unfocusable,
+ (pd->parent_obj ? _tree_unfocusable_counter_get(pd->parent_obj) : 0),
+ tree_unfocusable);
- if ((distance < 0) || (distance > 1))
+ if (old_tree_unfocusable != pd->tree_unfocusable)
{
- distance = MAX(MIN(tree_unfocusable, 1), 0);
- pd->tree_unfocusable = parent_counter + distance;
+ _full_eval(obj, pd);
+ _propagate_bool_property(pd, tree_unfocusable, elm_widget_tree_unfocusable_set);
}
-
- EINA_LIST_FOREACH(pd->subobjs, n, subs)
- {
- if (efl_isa(subs, EFL_UI_WIDGET_CLASS))
- elm_widget_tree_unfocusable_set(subs, elm_widget_tree_unfocusable_get(obj));
- }
-
- //focus state eval on all children
- _elm_widget_full_eval_children(obj, pd);
}
/**
@@ -1794,13 +1834,13 @@ EAPI Eina_List*
elm_widget_can_focus_child_list_get(const Eo *obj)
{
Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
- const Eina_List *l;
Eina_List *child_list = NULL;
Evas_Object *child;
if (!sd) return NULL;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (!_elm_widget_is(child)) continue;
if ((elm_widget_can_focus_get(child)) &&
(evas_object_visible_get(child)) &&
@@ -2065,13 +2105,13 @@ void
_elm_widget_top_win_focused_set(Evas_Object *obj,
Eina_Bool top_win_focused)
{
- const Eina_List *l;
Evas_Object *child;
API_ENTRY return;
if (sd->top_win_focused == top_win_focused) return;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
_elm_widget_top_win_focused_set(child, top_win_focused);
}
@@ -2091,31 +2131,17 @@ _elm_widget_top_win_focused_get(const Evas_Object *obj)
EOLIAN static void
_efl_ui_widget_disabled_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd, Eina_Bool disabled)
{
- Efl_Ui_Widget *subs;
- Eina_List *n;
- int distance, parent_counter = (pd->parent_obj ? _disabled_counter_get(pd->parent_obj) : 0);
-
- if (disabled)
- pd->disabled ++;
- else
- pd->disabled --;
+ int old_state;
- distance = pd->disabled - parent_counter;
-
- if ((distance < 0) || (distance > 1))
- {
- distance = MAX(MIN(disabled, 1), 0);
- pd->disabled = parent_counter + distance;
- }
+ old_state = pd->disabled;
- EINA_LIST_FOREACH(pd->subobjs, n, subs)
+ pd->disabled = _calculate_tree_number(pd->disabled, (pd->parent_obj ? _disabled_counter_get(pd->parent_obj) : 0), disabled);
+ if (old_state != pd->disabled)
{
- if (efl_isa(subs, EFL_UI_WIDGET_CLASS))
- efl_ui_widget_disabled_set(subs, efl_ui_widget_disabled_get(obj));
+ if (efl_finalized_get(obj))
+ _full_eval(obj, pd);
+ _propagate_bool_property(pd, disabled, efl_ui_widget_disabled_set);
}
-
- if (efl_finalized_get(obj))
- _elm_widget_full_eval_children(obj, pd);
}
EOLIAN static Eina_Bool
@@ -2166,10 +2192,10 @@ _efl_ui_widget_scroll_hold_push(Eo *obj, Elm_Widget_Smart_Data *sd)
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
@@ -2200,10 +2226,10 @@ _efl_ui_widget_scroll_hold_pop(Eo *obj, Elm_Widget_Smart_Data *sd)
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
@@ -2243,10 +2269,10 @@ _efl_ui_widget_scroll_freeze_push(Eo *obj, Elm_Widget_Smart_Data *sd)
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
@@ -2277,10 +2303,11 @@ _efl_ui_widget_scroll_freeze_pop(Eo *obj, Elm_Widget_Smart_Data *sd)
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
+
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
@@ -2308,7 +2335,7 @@ EOLIAN static void
_efl_ui_widget_efl_gfx_entity_scale_set(Eo *obj, Elm_Widget_Smart_Data *sd, double scale)
{
if (scale < 0.0) scale = 0.0;
- if (sd->scale != scale)
+ if (!EINA_DBL_EQ(sd->scale, scale))
{
sd->scale = scale;
elm_widget_theme(obj);
@@ -2319,9 +2346,9 @@ EOLIAN static double
_efl_ui_widget_efl_gfx_entity_scale_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
{
// FIXME: save walking up the tree by storing/caching parent scale
- if (sd->scale == 0.0)
+ if (EINA_DBL_EQ(sd->scale, 0.0))
{
- if (sd->parent_obj && elm_widget_is(sd->parent_obj))
+ if (sd->parent_obj)
{
return efl_gfx_entity_scale_get(sd->parent_obj);
}
@@ -2514,13 +2541,14 @@ elm_widget_part_translatable_text_get(const Eo *obj, const char *part, const cha
EOLIAN static void
_efl_ui_widget_efl_ui_l10n_translation_update(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
{
- const Eina_List *l;
Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
efl_ui_l10n_translation_update(child);
+
}
if (sd->hover_obj) efl_ui_l10n_translation_update(sd->hover_obj);
@@ -2585,7 +2613,7 @@ elm_widget_theme_get(const Evas_Object *obj)
if (!sd->theme)
{
- if (sd->parent_obj && elm_widget_is(sd->parent_obj))
+ if (sd->parent_obj)
return elm_widget_theme_get(sd->parent_obj);
else return NULL;
}
@@ -2776,7 +2804,7 @@ _efl_ui_widget_efl_object_dbg_info_get(Eo *eo_obj, Elm_Widget_Smart_Data *_pd EI
#define ADD_PTR_LIST(name) \
Efl_Dbg_Info* name = EFL_DBG_INFO_LIST_APPEND(focus, ""#name""); \
- _convert(name, eina_list_iterator_new(rel->name));
+ _convert(name, rel->name);
ADD_PTR_LIST(top)
ADD_PTR_LIST(down)
@@ -2787,7 +2815,7 @@ _efl_ui_widget_efl_object_dbg_info_get(Eo *eo_obj, Elm_Widget_Smart_Data *_pd EI
}
- //if thats a focus manager, give useful information like the border elements
+ //if that's a focus manager, give useful information like the border elements
if (efl_isa(eo_obj, EFL_UI_FOCUS_MANAGER_INTERFACE))
{
Efl_Dbg_Info *border;
@@ -2880,15 +2908,16 @@ elm_widget_type_check(const Evas_Object *obj,
EAPI Evas_Object *
elm_widget_name_find(const Eo *obj, const char *name, int recurse)
{
- Eina_List *l;
Evas_Object *child;
const char *s;
INTERNAL_ENTRY NULL;
if (!name) return NULL;
if (!_elm_widget_is(obj)) return NULL;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
s = evas_object_name_get(child);
if ((s) && (!strcmp(s, name))) return child;
if ((recurse != 0) &&
@@ -3113,7 +3142,6 @@ elm_widget_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode)
{
Evas_Display_Mode prev_dispmode;
Evas_Object *child;
- Eina_List *l;
API_ENTRY return;
prev_dispmode = evas_object_size_hint_display_mode_get(obj);
@@ -3123,8 +3151,9 @@ elm_widget_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode)
evas_object_size_hint_display_mode_set(obj, dispmode);
- EINA_LIST_FOREACH (sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
elm_widget_display_mode_set(child, dispmode);
}
@@ -3142,7 +3171,7 @@ elm_widget_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode)
EOLIAN static Efl_Ui_Focus_Move_Policy
_efl_ui_widget_focus_move_policy_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
{
- return sd->focus_move_policy;
+ return (Efl_Ui_Focus_Move_Policy)sd->focus_move_policy;
}
/**
@@ -3158,7 +3187,7 @@ EOLIAN static void
_efl_ui_widget_focus_move_policy_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, Efl_Ui_Focus_Move_Policy policy)
{
if (sd->focus_move_policy == (Elm_Focus_Move_Policy)policy) return;
- sd->focus_move_policy = policy;
+ sd->focus_move_policy = (Elm_Focus_Move_Policy)policy;
}
/**
@@ -3192,7 +3221,8 @@ _efl_ui_widget_focus_move_policy_automatic_set(Eo *obj, Elm_Widget_Smart_Data *s
if (automatic)
{
- efl_ui_widget_focus_move_policy_set(obj, elm_config_focus_move_policy_get());
+ efl_ui_widget_focus_move_policy_set
+ (obj, (Efl_Ui_Focus_Move_Policy)elm_config_focus_move_policy_get());
}
}
}
@@ -4698,8 +4728,11 @@ _sub_obj_tree_dump(const Evas_Object *obj,
DBG("+ %s(%p)\n",
elm_widget_type_get(obj),
obj);
- EINA_LIST_FOREACH(sd->subobjs, l, obj)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
+ {
+ obj = eina_array_data_get(sd->children, i);
_sub_obj_tree_dump(obj, lvl + 1);
+ }
}
else
DBG("+ %s(%p)\n", evas_object_type_get(obj), obj);
@@ -4750,8 +4783,12 @@ _sub_obj_tree_dot_dump(const Evas_Object *obj,
Eina_List *l;
Evas_Object *o;
- EINA_LIST_FOREACH(sd->subobjs, l, o)
- _sub_obj_tree_dot_dump(o, output);
+
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
+ {
+ o = eina_array_data_get(sd->children, i);
+ _sub_obj_tree_dot_dump(o, output);
+ }
}
#endif
@@ -4804,7 +4841,8 @@ _efl_ui_widget_efl_object_constructor(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UN
else
{
ELM_WIDGET_DATA_GET(parent, parent_sd);
- sd->shared_win_data = parent_sd->shared_win_data;
+ if (parent_sd)
+ sd->shared_win_data = parent_sd->shared_win_data;
}
}
else
@@ -4858,6 +4896,11 @@ _efl_ui_widget_efl_object_destructor(Eo *obj, Elm_Widget_Smart_Data *sd)
efl_weak_unref(&sd->logical.parent);
sd->logical.parent = NULL;
}
+ if (sd->children)
+ {
+ eina_array_free(sd->children);
+ sd->children = NULL;
+ }
sd->on_destroy = EINA_TRUE;
efl_destructor(efl_super(obj, EFL_UI_WIDGET_CLASS));
@@ -4946,12 +4989,14 @@ _efl_ui_widget_efl_access_object_i18n_name_get(const Eo *obj, Elm_Widget_Smart_D
EOLIAN static Eina_List*
_efl_ui_widget_efl_access_object_access_children_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd)
{
- Eina_List *l, *accs = NULL;
+ Eina_List *accs = NULL;
Evas_Object *widget;
Efl_Access_Type type;
- EINA_LIST_FOREACH(pd->subobjs, l, widget)
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
{
+ widget = eina_array_data_get(pd->children, i);
+
if (!elm_object_widget_check(widget)) continue;
if (!efl_isa(widget, EFL_ACCESS_OBJECT_MIXIN)) continue;
type = efl_access_object_access_type_get(widget);
@@ -5161,6 +5206,7 @@ elm_widget_on_show_region_hook_set(Eo *obj, void *data, Elm_Widget_On_Show_Regio
{
ELM_WIDGET_DATA_GET(obj, sd);
+ if (!sd) return;
if ((sd->on_show_region_data == data) && (sd->on_show_region == func))
return;
@@ -5210,7 +5256,7 @@ elm_widget_show_region_set(Eo *obj, Eina_Rect sr, Eina_Bool forceshow)
do
{
parent_obj = sd->parent_obj;
- if ((!parent_obj) || (!_elm_widget_is(parent_obj))) break;
+ if ((!parent_obj)) break;
sd = efl_data_scope_get(parent_obj, MY_CLASS);
if (!sd) break;
@@ -5617,7 +5663,7 @@ _efl_ui_widget_part_efl_object_destructor(Eo *obj, Elm_Part_Data *pd)
}
static Efl_Canvas_Layout_Part_Type
-_efl_ui_widget_part_efl_canvas_layout_part_type_get(const Eo *obj EINA_UNUSED, Elm_Part_Data *pd)
+_efl_ui_widget_part_efl_canvas_layout_part_type_provider_part_type_get(const Eo *obj EINA_UNUSED, Elm_Part_Data *pd)
{
Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(pd->obj, MY_CLASS);
EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EFL_CANVAS_LAYOUT_PART_TYPE_NONE);
@@ -5645,10 +5691,6 @@ _efl_ui_widget_part_efl_ui_property_bind_property_bind(Eo *obj, Elm_Part_Data *p
return _efl_ui_property_bind(widget, obj, pd, ppd->part, key, property);
}
-#define EFL_UI_WIDGET_PART_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_canvas_layout_part_type_get, _efl_ui_widget_part_efl_canvas_layout_part_type_get), \
- EFL_OBJECT_OP_FUNC(efl_gfx_entity_geometry_get, _efl_ui_widget_part_efl_gfx_entity_geometry_get)
-
#include "efl_ui_widget_part.eo.c"
/* Efl.Part end */
@@ -5854,6 +5896,7 @@ _efl_ui_model_property_bind_changed(void *data, const Efl_Event *event)
const char *prop;
unsigned int i;
+ if (!pd) return;
EINA_ARRAY_ITER_NEXT(evt->changed_properties, i, prop, it)
{
Efl_Ui_Property_Bound *lookup;
@@ -5872,6 +5915,7 @@ _efl_ui_view_property_bind_changed(void *data, const Efl_Event *event)
Eina_Stringshare *prop;
unsigned int i;
+ if (!pd) return;
EINA_ARRAY_ITER_NEXT(evt->changed_properties, i, prop, it)
{
Efl_Ui_Property_Bound *lookup;
@@ -5905,6 +5949,7 @@ _efl_ui_widget_model_provider_model_change(void *data, const Efl_Event *event)
{
ELM_WIDGET_DATA_GET(data, pd);
+ if (!pd) return;
efl_replace(&pd->properties.model,
efl_ui_view_model_get(pd->properties.provider));
_efl_ui_widget_model_update(data, pd);
@@ -5917,6 +5962,7 @@ _efl_ui_widget_model_provider_invalidate(void *data, const Efl_Event *event EINA
{
ELM_WIDGET_DATA_GET(data, pd);
+ if (!pd) return;
efl_event_callback_array_del(pd->properties.provider,
efl_ui_widget_model_provider_callbacks(),
data);
diff --git a/src/lib/elementary/efl_ui_widget_common.c b/src/lib/elementary/efl_ui_widget_common.c
index c83fd07c92..97313e2037 100644
--- a/src/lib/elementary/efl_ui_widget_common.c
+++ b/src/lib/elementary/efl_ui_widget_common.c
@@ -61,13 +61,14 @@ static Efl_Ui_Widget*
_next_widget(Efl_Gfx_Entity* o)
{
Efl_Ui_Widget *parent;
- Eina_List *rel;
parent = _fetch_parent_widget(o);
ELM_WIDGET_DATA_GET_OR_RETURN(parent, pd, NULL);
- rel = eina_list_data_find_list(pd->subobjs, o);
-
- return eina_list_data_get(eina_list_next(rel));
+ unsigned int id;
+ if (eina_array_find(pd->children, o, &id) && id + 1 < eina_array_count(pd->children))
+ return eina_array_data_get(pd->children, id + 1);
+ else
+ return NULL;
}
static Eina_Bool
@@ -90,9 +91,9 @@ _widget_next(Widget_Iterator *it, void **data)
}
//If there is a child, go there
- if (pd && pd->subobjs)
+ if (pd && eina_array_count(pd->children))
{
- it->current = eina_list_data_get(pd->subobjs);
+ it->current = eina_array_data_get(pd->children, 0);
goto deliver;
}
diff --git a/src/lib/elementary/efl_ui_widget_image.h b/src/lib/elementary/efl_ui_widget_image.h
index de625b28b4..e3d7264509 100644
--- a/src/lib/elementary/efl_ui_widget_image.h
+++ b/src/lib/elementary/efl_ui_widget_image.h
@@ -97,6 +97,8 @@ struct _Efl_Ui_Image_Data
Eina_Bool edit : 1;
Eina_Bool edje : 1;
Eina_Bool anim : 1;
+ Eina_Bool autoplay : 1;
+ Eina_Bool playback_loop : 1;
Eina_Bool paused : 1;
Eina_Bool async_enable : 1;
Eina_Bool scale_up : 1;
diff --git a/src/lib/elementary/efl_ui_widget_part.eo b/src/lib/elementary/efl_ui_widget_part.eo
index 75dbfceb53..5329f7c6c0 100644
--- a/src/lib/elementary/efl_ui_widget_part.eo
+++ b/src/lib/elementary/efl_ui_widget_part.eo
@@ -1,4 +1,4 @@
-class Efl.Ui.Widget_Part extends Efl.Object implements Efl.Ui.Property_Bind
+class Efl.Ui.Widget_Part extends Efl.Object implements Efl.Ui.Property_Bind, Efl.Gfx.Entity, Efl.Canvas.Layout_Part_Type_Provider
{
[[This is the base class for all "Part" handles in Efl.Ui widgets.
@@ -12,5 +12,11 @@ class Efl.Ui.Widget_Part extends Efl.Object implements Efl.Ui.Property_Bind
implements {
Efl.Object.destructor;
Efl.Ui.Property_Bind.property_bind;
+ @empty Efl.Gfx.Entity.visible { get; set; }
+ Efl.Gfx.Entity.geometry { get; set @empty ; }
+ @empty Efl.Gfx.Entity.position { get; set; }
+ @empty Efl.Gfx.Entity.size { get; set; }
+ @empty Efl.Gfx.Entity.scale { set; get; }
+ Efl.Canvas.Layout_Part_Type_Provider.part_type { get; }
}
}
diff --git a/src/lib/elementary/efl_ui_widget_scrollable_content.eo b/src/lib/elementary/efl_ui_widget_scrollable_content.eo
index 90bed2176d..82de9eae00 100644
--- a/src/lib/elementary/efl_ui_widget_scrollable_content.eo
+++ b/src/lib/elementary/efl_ui_widget_scrollable_content.eo
@@ -1,7 +1,7 @@
import eina_types;
parse efl_text_format;
-mixin @beta Efl.Ui.Widget_Scrollable_Content requires Efl.Object
+mixin Efl.Ui.Widget_Scrollable_Content requires Efl.Object
{
[[Mixin helper to add scrollable content to widgets.
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index e6fb0191b4..4ce4c0e809 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -40,6 +40,8 @@
#define FRAME_OBJ_THEME_MIN_VERSION 119
+extern void ecore_evas_dnd_mark_motion_used(Ecore_Evas *ee, unsigned int seat);
+
Ecore_Evas *_wayland_shm_new(const char *disp_name, Ecore_Window parent, int x, int y, int w, int h, Eina_Bool frame);
Ecore_Evas *_wayland_egl_new(const char *disp_name, Ecore_Window parent, int x, int y, int w, int h, Eina_Bool frame, const int *opt);
@@ -59,7 +61,7 @@ static int _paused_windows = 0;
while (0)
#define ELM_WIN_DATA_GET(o, sd) \
- Efl_Ui_Win_Data * sd = efl_data_scope_get(o, MY_CLASS)
+ Efl_Ui_Win_Data *sd = efl_data_scope_get(o, MY_CLASS)
#define ELM_WIN_DATA_GET_OR_RETURN(o, ptr, ...) \
ELM_WIN_DATA_GET(o, ptr); \
@@ -210,8 +212,12 @@ struct _Efl_Ui_Win_Data
int norender;
int modal_count;
int response;
+ int ignore_frame_resize;
Eina_Bool req_wh : 1;
Eina_Bool req_xy : 1;
+ Eina_Array *selection_changed;
+ Eina_Array *planned_changes;
+ Eina_Inarray *drop_target;
struct {
short pointer_move;
@@ -381,6 +387,8 @@ static void _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emi
static inline void _elm_win_need_frame_adjust(Efl_Ui_Win_Data *sd, const char *engine);
static void _elm_win_resize_objects_eval(Evas_Object *obj, Eina_Bool force_resize);
static void _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd, Eina_Bool force);
+static void _ee_backbone_init(Efl_Ui_Win *obj, Efl_Ui_Win_Data *pd);
+static void _ee_backbone_shutdown(Efl_Ui_Win *obj, Efl_Ui_Win_Data *pd);
static inline Efl_Ui_Win_Type
_elm_win_type_to_efl_ui_win_type(Elm_Win_Type type)
@@ -466,6 +474,69 @@ _elm_win_first_frame_do(void *data, Evas *e EINA_UNUSED, void *event_info EINA_U
evas_event_callback_del_full(e, EVAS_CALLBACK_RENDER_POST, _elm_win_first_frame_do, data);
}
+Ecore_X_Window
+_elm_ee_xwin_get(const Ecore_Evas *ee)
+{
+#ifdef HAVE_ELEMENTARY_X
+ const char *engine_name;
+ if (!ee) return 0;
+
+ engine_name = ecore_evas_engine_name_get(ee);
+ if (EINA_UNLIKELY(!engine_name)) return 0;
+
+ if (!strcmp(engine_name, ELM_SOFTWARE_X11))
+ {
+ return ecore_evas_software_x11_window_get(ee);
+ }
+ else if (!strcmp(engine_name, ELM_OPENGL_X11))
+ {
+ return ecore_evas_gl_x11_window_get(ee);
+ }
+#else
+ (void)ee;
+#endif
+ return 0;
+}
+
+#ifdef HAVE_ELEMENTARY_X
+static void
+_internal_elm_win_xwindow_get(Efl_Ui_Win_Data *sd)
+{
+ Ecore_X_Window pwin = sd->x.xwin;
+ sd->x.xwin = _elm_ee_xwin_get(sd->ee);
+ if (sd->x.xwin != pwin)
+ {
+ char buf[128];
+
+ snprintf(buf, sizeof(buf), "%x", sd->x.xwin);
+ eina_stringshare_del(sd->stack_id);
+ sd->stack_id = eina_stringshare_add(buf);
+ }
+}
+#endif
+
+Ecore_Wl2_Window *
+_elm_ee_wlwin_get(const Ecore_Evas *ee)
+{
+#ifdef HAVE_ELEMENTARY_WL2
+ const char *engine_name;
+
+ if (!ee) return NULL;
+
+ engine_name = ecore_evas_engine_name_get(ee);
+ if (EINA_UNLIKELY(!engine_name)) return NULL;
+
+ if ((!strcmp(engine_name, ELM_WAYLAND_SHM)) ||
+ (!strcmp(engine_name, ELM_WAYLAND_EGL)))
+ {
+ return ecore_evas_wayland2_window_get(ee);
+ }
+#else
+ (void)ee;
+#endif
+ return NULL;
+}
+
static void
_win_noblank_eval(void)
{
@@ -481,6 +552,7 @@ _win_noblank_eval(void)
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
if ((sd->noblank) && (!sd->minimized) && (!sd->withdrawn) &&
evas_object_visible_get(obj))
noblanks++;
@@ -525,6 +597,7 @@ _elm_win_apply_alpha(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd)
#ifdef HAVE_ELEMENTARY_X
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
enabled |= (sd->csd.need && !sd->fullscreen);
if (!ecore_x_screen_is_composited(0))
{
@@ -937,13 +1010,13 @@ _elm_win_obj_intercept_lower(void *data, Evas_Object *obj EINA_UNUSED)
static void
_elm_win_obj_intercept_stack_above(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Evas_Object *above EINA_UNUSED)
{
- INF("TODO: %s", __FUNCTION__);
+ INF("TODO: %s", __func__);
}
static void
_elm_win_obj_intercept_stack_below(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Evas_Object *below EINA_UNUSED)
{
- INF("TODO: %s", __FUNCTION__);
+ INF("TODO: %s", __func__);
}
static void
@@ -1082,7 +1155,10 @@ _elm_win_pre_render(Ecore_Evas *ee)
if (sd->pointer.obj) evas_object_show(sd->pointer.obj);
#ifdef ELEMENTARY_X
if (sd->type == ELM_WIN_TOOLTIP)
- ecore_x_window_shape_input_rectangle_set(sd->x.xwin, 0, 0, 0, 0);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ecore_x_window_shape_input_rectangle_set(sd->x.xwin, 0, 0, 0, 0);
+ }
#endif
sd->first_draw = EINA_TRUE;
/* set this to handle ecore-evas engine code which incorrectly
@@ -1558,16 +1634,25 @@ _elm_win_frame_geometry_adjust(Efl_Ui_Win_Data *sd)
{
int fw, fh, ox, oy, ow, oh;
evas_object_geometry_get(sd->frame_obj, NULL, NULL, &fw, &fh);
+ sd->ignore_frame_resize++;
+ evas_object_resize(sd->frame_obj, 1000, 1000);
if (elm_widget_is_legacy(sd->obj))
edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.opaque",
&ox, &oy, &ow, &oh);
else
edje_object_part_geometry_get(sd->frame_obj, "efl.spacer.opaque",
&ox, &oy, &ow, &oh);
+ evas_object_resize(sd->frame_obj, fw, fh);
+ sd->ignore_frame_resize--;
+ fw = 1000; fh = 1000;
l = ox;
t = oy;
r = fw - ow - l;
b = fh - oh - t;
+ if (l < 0) l = 0;
+ if (r < 0) r = 0;
+ if (t < 0) t = 0;
+ if (b < 0) b = 0;
}
ecore_evas_shadow_geometry_set(sd->ee, l, r, t, b);
}
@@ -1590,24 +1675,31 @@ _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd, Eina_Bool force)
int ox, oy, ow, oh;
int cx, cy, cw, ch;
int w, h;
+ int l, r, t, b;
if (!sd->frame_obj) return;
if (!sd->csd.need) return;
_elm_win_frame_geometry_adjust(sd);
+ ecore_evas_shadow_geometry_get(sd->ee, &l, &r, &t, &b);
+ sd->ignore_frame_resize++;
evas_object_geometry_get(sd->frame_obj, &ox, &oy, &ow, &oh);
+ evas_object_resize(sd->frame_obj, 1000, 1000);
if (elm_widget_is_legacy(sd->obj))
edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.content", &cx, &cy, &cw, &ch);
else
edje_object_part_geometry_get(sd->frame_obj, "efl.spacer.content", &cx, &cy, &cw, &ch);
-
- if (!_elm_win_framespace_set(sd, cx, cy, ow - cw, oh - ch) && (!force)) return;
+ evas_object_resize(sd->frame_obj, ow, oh);
+ sd->ignore_frame_resize--;
+ if (!_elm_win_framespace_set(sd, cx, cy, 1000 - cw, 1000 - ch) && (!force)) return;
_elm_win_frame_geometry_adjust(sd);
if (!sd->first_draw) return;
evas_object_geometry_get(sd->obj, NULL, NULL, &w, &h);
if (w && h)
- TRAP(sd, resize, w, h);
+ {
+ TRAP(sd, resize, w, h);
+ }
}
static int
@@ -1889,7 +1981,7 @@ _key_action_move(Evas_Object *obj, const char *params)
// The handling for legacy is different due to elm_object_next set
if (elm_widget_is_legacy(obj))
- elm_object_focus_next(obj, focus_dir);
+ elm_object_focus_next(obj, (Elm_Focus_Direction)focus_dir);
else
{
Efl_Ui_Widget *o;
@@ -3092,6 +3184,9 @@ _efl_ui_win_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Win_Data *sd)
eina_array_free(sd->profile.available);
sd->profile.available = NULL;
+ eina_array_free(sd->planned_changes);
+ sd->planned_changes = NULL;
+
free(sd->wm_rot.rots);
sd->wm_rot.rots = NULL;
@@ -3208,7 +3303,7 @@ _efl_ui_win_efl_gfx_entity_size_set(Eo *obj, Efl_Ui_Win_Data *sd, Eina_Size2D sz
evas_object_image_size_set(sd->img_obj, sz.w, sz.h);
}
- _elm_win_frame_geometry_adjust(sd);
+ _elm_win_frame_obj_update(sd, 1);
if (!sd->response)
{
sd->req_wh = EINA_TRUE;
@@ -3253,69 +3348,6 @@ _elm_win_delete_request(Ecore_Evas *ee)
evas_object_unref(obj);
}
-Ecore_X_Window
-_elm_ee_xwin_get(const Ecore_Evas *ee)
-{
-#ifdef HAVE_ELEMENTARY_X
- const char *engine_name;
- if (!ee) return 0;
-
- engine_name = ecore_evas_engine_name_get(ee);
- if (EINA_UNLIKELY(!engine_name)) return 0;
-
- if (!strcmp(engine_name, ELM_SOFTWARE_X11))
- {
- return ecore_evas_software_x11_window_get(ee);
- }
- else if (!strcmp(engine_name, ELM_OPENGL_X11))
- {
- return ecore_evas_gl_x11_window_get(ee);
- }
-#else
- (void)ee;
-#endif
- return 0;
-}
-
-#ifdef HAVE_ELEMENTARY_X
-static void
-_internal_elm_win_xwindow_get(Efl_Ui_Win_Data *sd)
-{
- Ecore_X_Window pwin = sd->x.xwin;
- sd->x.xwin = _elm_ee_xwin_get(sd->ee);
- if (sd->x.xwin != pwin)
- {
- char buf[128];
-
- snprintf(buf, sizeof(buf), "%x", sd->x.xwin);
- eina_stringshare_del(sd->stack_id);
- sd->stack_id = eina_stringshare_add(buf);
- }
-}
-#endif
-
-Ecore_Wl2_Window *
-_elm_ee_wlwin_get(const Ecore_Evas *ee)
-{
-#ifdef HAVE_ELEMENTARY_WL2
- const char *engine_name;
-
- if (!ee) return NULL;
-
- engine_name = ecore_evas_engine_name_get(ee);
- if (EINA_UNLIKELY(!engine_name)) return NULL;
-
- if ((!strcmp(engine_name, ELM_WAYLAND_SHM)) ||
- (!strcmp(engine_name, ELM_WAYLAND_EGL)))
- {
- return ecore_evas_wayland2_window_get(ee);
- }
-#else
- (void)ee;
-#endif
- return NULL;
-}
-
#ifdef HAVE_ELEMENTARY_WL2
static void
_elm_win_wlwindow_get(Efl_Ui_Win_Data *sd)
@@ -3476,6 +3508,7 @@ _elm_win_xwin_update(Efl_Ui_Win_Data *sd)
_internal_elm_win_xwindow_get(sd);
if (!sd->x.xwin) return; /* nothing more to do */
+ _internal_elm_win_xwindow_get(sd);
if (sd->stack_master_id)
{
@@ -3494,7 +3527,11 @@ _elm_win_xwin_update(Efl_Ui_Win_Data *sd)
if (sd->parent)
{
ELM_WIN_DATA_GET(sd->parent, sdp);
- if (sdp) ecore_x_icccm_transient_for_set(sd->x.xwin, sdp->x.xwin);
+ if (sdp)
+ {
+ _internal_elm_win_xwindow_get(sdp);
+ ecore_x_icccm_transient_for_set(sd->x.xwin, sdp->x.xwin);
+ }
}
}
@@ -3708,12 +3745,12 @@ _elm_win_resize_objects_eval(Evas_Object *obj, Eina_Bool force_resize)
maxh = sd->max_h;
// Compatibility hack (for E)
- if (sd->single_edje_content && !wx && !wy)
+ if (sd->single_edje_content && EINA_DBL_EQ(wx, 0) && EINA_DBL_EQ(wy, 0))
wx = wy = 1;
- if (!wx) maxw = minw;
+ if (EINA_DBL_EQ(wx, 0)) maxw = minw;
if (maxw < 1) maxw = 32767;
- if (!wy) maxh = minh;
+ if (EINA_DBL_EQ(wy, 0)) maxh = minh;
if (maxh < 1) maxh = 32767;
if (maxw < minw) maxw = minw;
if (maxh < minh) maxh = minh;
@@ -3733,10 +3770,10 @@ _elm_win_resize_objects_eval(Evas_Object *obj, Eina_Bool force_resize)
int fw, fh;
evas_output_framespace_get(sd->evas, NULL, NULL, &fw, &fh);
- minw += fw;
- minh += fh;
- maxw += fw;
- maxh += fh;
+// minw += fw;
+// minh += fh;
+// maxw += fw;
+// maxh += fh;
}
sd->tmp_updating_hints = 1;
@@ -3881,6 +3918,7 @@ _elm_win_client_message(void *data,
Ecore_X_Event_Client_Message *e = event;
if (e->format != 32) return ECORE_CALLBACK_PASS_ON;
+ _internal_elm_win_xwindow_get(sd);
if (e->message_type == ECORE_X_ATOM_E_COMP_FLUSH)
{
if ((unsigned int)e->data.l[0] == sd->x.xwin)
@@ -3983,6 +4021,7 @@ _elm_win_property_change(void *data,
if (e->atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE)
{
+ _internal_elm_win_xwindow_get(sd);
if (e->win == sd->x.xwin)
{
sd->legacy.indmode = (Elm_Win_Indicator_Mode)ecore_x_e_illume_indicator_state_get(e->win);
@@ -4215,6 +4254,7 @@ _elm_win_frame_obj_resize(void *data,
if (!(sd = data)) return;
if (!sd->legacy.edje) return;
+ if (sd->ignore_frame_resize > 0) return;
_elm_win_frame_obj_update(sd, 0);
}
@@ -4303,6 +4343,7 @@ _win_move_start(Efl_Ui_Win_Data *sd)
{
int x, y;
+ _internal_elm_win_xwindow_get(sd);
sd->resizing = EINA_TRUE;
ecore_x_pointer_ungrab();
ecore_x_pointer_root_xy_get(&x, &y);
@@ -4356,6 +4397,7 @@ _win_move_resize_start(Efl_Ui_Win_Data *sd, Efl_Ui_Win_Move_Resize_Mode mode)
if (sd->x.xwin)
{
int x, y;
+ _internal_elm_win_xwindow_get(sd);
ecore_x_pointer_ungrab();
ecore_x_pointer_root_xy_get(&x, &y);
ecore_x_netwm_moveresize_request_send(sd->x.xwin, x, y, ri->x_dir, 1);
@@ -4761,7 +4803,9 @@ _elm_win_frame_add(Efl_Ui_Win_Data *sd, const char *element, const char *style)
_elm_win_frame_geometry_adjust(sd);
ecore_evas_geometry_get(sd->ee, NULL, NULL, &w, &h);
if ((w > 1) && (h > 1))
- ecore_evas_resize(sd->ee, w, h);
+ {
+ ecore_evas_resize(sd->ee, w, h);
+ }
}
static void
@@ -4948,7 +4992,8 @@ _elm_x_io_err(void *data EINA_UNUSED)
EINA_LIST_FOREACH(_elm_win_list, l, obj)
evas_object_smart_callback_call(obj, "ioerr", NULL);
- elm_exit();
+ fprintf(stderr, "X I/O Error - fatal. Exiting\n");
+ exit(101);
}
#endif
@@ -5117,46 +5162,43 @@ static void
_gesture_manager_config_load(Eo *obj)
{
Eina_Value val;
- Efl_Canvas_Gesture_Manager *gm = efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS);
+ Eo *gm = efl_provider_find(obj, EFL_CONFIG_INTERFACE);
eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE);
eina_value_set(&val, _elm_config->glayer_long_tap_start_timeout);
- efl_gesture_manager_config_set(gm, "glayer_long_tap_start_timeout", &val);
+ efl_config_set(gm, "glayer_long_tap_start_timeout", &val);
eina_value_set(&val, _elm_config->glayer_double_tap_timeout);
- efl_gesture_manager_config_set(gm, "glayer_double_tap_timeout", &val);
-
- eina_value_set(&val, _elm_config->thumbscroll_friction);
- efl_gesture_manager_config_set(gm, "thumbscroll_friction", &val);
+ efl_config_set(gm, "glayer_double_tap_timeout", &val);
- eina_value_set(&val, _elm_config->thumbscroll_momentum_threshold);
- efl_gesture_manager_config_set(gm, "thumbscroll_momentum_threshold", &val);
+ elm_config_scroll_thumbscroll_friction_set(_elm_config->thumbscroll_friction);
+ elm_config_scroll_thumbscroll_momentum_threshold_set(_elm_config->thumbscroll_momentum_threshold);
eina_value_set(&val, _elm_config->glayer_line_min_length);
- efl_gesture_manager_config_set(gm, "glayer_line_min_length", &val);
+ efl_config_set(gm, "glayer_line_min_length", &val);
eina_value_set(&val, _elm_config->glayer_line_distance_tolerance);
- efl_gesture_manager_config_set(gm, "glayer_line_distance_tolerance", &val);
+ efl_config_set(gm, "glayer_line_distance_tolerance", &val);
eina_value_set(&val, _elm_config->glayer_line_angular_tolerance);
- efl_gesture_manager_config_set(gm, "glayer_line_angular_tolerance", &val);
+ efl_config_set(gm, "glayer_line_angular_tolerance", &val);
eina_value_set(&val, _elm_config->glayer_zoom_finger_factor);
- efl_gesture_manager_config_set(gm, "glayer_zoom_finger_factor", &val);
+ efl_config_set(gm, "glayer_zoom_finger_factor", &val);
eina_value_set(&val, _elm_config->glayer_zoom_distance_tolerance);
- efl_gesture_manager_config_set(gm, "glayer_zoom_distance_tolerance", &val);
+ efl_config_set(gm, "glayer_zoom_distance_tolerance", &val);
eina_value_setup(&val, EINA_VALUE_TYPE_UINT);
eina_value_set(&val, _elm_config->glayer_flick_time_limit_ms);
- efl_gesture_manager_config_set(gm, "glayer_flick_time_limit_ms", &val);
+ efl_config_set(gm, "glayer_flick_time_limit_ms", &val);
eina_value_setup(&val, EINA_VALUE_TYPE_UCHAR);
eina_value_set(&val, _elm_config->glayer_continues_enable);
- efl_gesture_manager_config_set(gm, "glayer_continues_enable", &val);
+ efl_config_set(gm, "glayer_continues_enable", &val);
eina_value_set(&val, _elm_config->glayer_zoom_finger_enable);
- efl_gesture_manager_config_set(gm, "glayer_zoom_finger_enable", &val);
+ efl_config_set(gm, "glayer_zoom_finger_enable", &val);
}
static Eo *
@@ -5567,7 +5609,7 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_U
else if ((engine) && (!strncmp(engine, "shot:", 5)))
_shot_init(sd);
- sd->kbdmode = ELM_WIN_KEYBOARD_UNKNOWN;
+ sd->kbdmode = EFL_UI_WIN_KEYBOARD_MODE_UNKNOWN;
sd->legacy.indmode = ELM_WIN_INDICATOR_UNKNOWN;
sd->indimode = EFL_UI_WIN_INDICATOR_MODE_OFF;
@@ -5902,6 +5944,7 @@ _efl_ui_win_efl_object_finalize(Eo *obj, Efl_Ui_Win_Data *sd)
efl_file_mmap_get(efl_super(efl_part(obj, "background"), EFL_UI_WIN_PART_CLASS)))
efl_file_load(efl_part(obj, "background"));
}
+ _ee_backbone_init(obj, sd);
return obj;
}
@@ -5937,6 +5980,8 @@ _efl_ui_win_efl_object_destructor(Eo *obj, Efl_Ui_Win_Data *pd EINA_UNUSED)
if (pd->finalize_future)
eina_future_cancel(pd->finalize_future);
+ _ee_backbone_shutdown(obj, pd);
+
efl_destructor(efl_super(obj, MY_CLASS));
efl_unref(pd->provider);
@@ -5953,6 +5998,7 @@ _efl_ui_win_efl_object_constructor(Eo *obj, Efl_Ui_Win_Data *pd)
pd->provider = efl_add_ref(EFL_UI_FOCUS_PARENT_PROVIDER_STANDARD_CLASS, NULL);
pd->profile.available = eina_array_new(4);
pd->max_w = pd->max_h = -1;
+ pd->planned_changes = eina_array_new(10);
// For bindings: if no parent, allow simple unref
if (!efl_parent_get(obj))
@@ -6224,6 +6270,7 @@ _efl_ui_win_center(Eo *obj, Efl_Ui_Win_Data *sd, Eina_Bool h, Eina_Bool v)
static Ecore_X_Atom state = 0;
static Ecore_X_Atom centered = 0;
+ _internal_elm_win_xwindow_get(sd);
if (!centered) centered = ecore_x_atom_get
("__E_ATOM_WINDOW_STATE_CENTERED");
if (!state) state = ecore_x_atom_get
@@ -6908,8 +6955,11 @@ _efl_ui_win_keyboard_mode_set(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd, Efl_Ui_W
sd->kbdmode = mode;
#ifdef HAVE_ELEMENTARY_X
if (sd->x.xwin)
- ecore_x_e_virtual_keyboard_state_set
- (sd->x.xwin, (Ecore_X_Virtual_Keyboard_State)sd->kbdmode);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ecore_x_e_virtual_keyboard_state_set
+ (sd->x.xwin, (Ecore_X_Virtual_Keyboard_State)sd->kbdmode);
+ }
#endif
}
@@ -7131,7 +7181,8 @@ _efl_ui_win_stack_master_id_set(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd, const
if (sd->shown) return;
eina_stringshare_replace(&(sd->stack_master_id), id);
#ifdef HAVE_ELEMENTARY_X
- if (sd->x.xwin) _elm_win_xwin_update(sd);
+ if (sd->x.xwin)
+ _elm_win_xwin_update(sd);
else
#endif
{
@@ -7214,6 +7265,7 @@ _efl_ui_win_stack_pop_to(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd)
int i, num = 0;
Eina_Bool del = EINA_FALSE;
+ _internal_elm_win_xwindow_get(sd);
ecore_x_grab();
_x_transients_for_list
(ecore_x_window_root_get(sd->x.xwin),
@@ -7269,6 +7321,7 @@ elm_win_floating_mode_set(Evas_Object *obj, Eina_Bool floating)
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
if (sd->floating)
ecore_x_e_illume_window_state_set
(sd->x.xwin, ECORE_X_ILLUME_WINDOW_STATE_FLOATING);
@@ -7544,29 +7597,28 @@ _elm_win_bg_set(Efl_Ui_Win_Data *sd, Eo *bg)
/* Legacy theme compatibility */
static Eina_Bool
-_elm_win_bg_must_swallow(Efl_Ui_Win_Data *sd)
+_elm_win_bg_must_swallow(Efl_Ui_Win_Data *sd, Eo **bg)
{
if (EINA_UNLIKELY(!sd->legacy.bg_must_swallow_init))
{
/* Overkill: check which theme version the standard elm_bg uses */
Elm_Widget_Smart_Data *wd;
const char *version;
- Eo *bg;
int v;
sd->legacy.bg_must_swallow = 1;
sd->legacy.bg_must_swallow_init = 1;
if (sd->legacy.ctor)
- bg = elm_bg_add(sd->obj);
+ *bg = elm_bg_add(sd->obj);
else
{
// Note: This code path is probably not necessary (custom legacy
// theme but efl_add'ed window -- all efl_add'ed widgets would
// use default theme)
- bg = efl_add(EFL_UI_BG_CLASS, sd->obj);
+ *bg = efl_add(EFL_UI_BG_CLASS, sd->obj);
}
- wd = efl_data_scope_get(bg, EFL_UI_WIDGET_CLASS);
+ wd = efl_data_scope_get(*bg, EFL_UI_WIDGET_CLASS);
if (wd)
{
version = edje_object_data_get(wd->resize_obj, "version");
@@ -7574,7 +7626,6 @@ _elm_win_bg_must_swallow(Efl_Ui_Win_Data *sd)
if (v >= FRAME_OBJ_THEME_MIN_VERSION)
sd->legacy.bg_must_swallow = 0;
}
- evas_object_del(bg);
}
return sd->legacy.bg_must_swallow;
@@ -7585,29 +7636,33 @@ _elm_win_standard_init(Eo *obj)
{
/* Support for elm_util_win_standard_add() and Efl.Ui.Win.Standard */
Efl_Ui_Win_Data *sd = efl_data_scope_get(obj, MY_CLASS);
+ Eo *bg = NULL;
ELM_SAFE_DEL(sd->bg);
sd->csd.need_bg_standard = 1;
- if (!_elm_win_bg_must_swallow(sd))
+ if (!_elm_win_bg_must_swallow(sd, &bg))
{
sd->csd.need_bg_solid = EINA_TRUE;
+ evas_object_del(bg);
}
else
{
- Eo *bg;
-
/* Legacy theme compatibility */
DBG("Detected legacy theme used for elm_bg. Swallowing object.");
sd->csd.need_bg_solid = EINA_FALSE;
- if (sd->legacy.ctor)
- bg = elm_bg_add(obj);
- else
+
+ if (!bg)
{
- // Note: This code path is probably not necessary (custom legacy
- // theme but efl_add'ed window -- all efl_add'ed widgets would
- // use default theme)
- bg = efl_add(EFL_UI_BG_CLASS, obj);
+ if (sd->legacy.ctor)
+ bg = elm_bg_add(obj);
+ else
+ {
+ // Note: This code path is probably not necessary (custom legacy
+ // theme but efl_add'ed window -- all efl_add'ed widgets would
+ // use default theme)
+ bg = efl_add(EFL_UI_BG_CLASS, obj);
+ }
}
_elm_win_bg_set(sd, bg);
}
@@ -7884,6 +7939,7 @@ elm_win_xwindow_get(const Evas_Object *obj)
if (!sd) return 0;
#ifdef HAVE_ELEMENTARY_X
+ _internal_elm_win_xwindow_get(sd);
if (sd->x.xwin) return sd->x.xwin;
if (sd->parent) return elm_win_xwindow_get(sd->parent);
#endif
@@ -8007,6 +8063,7 @@ elm_win_quickpanel_set(Evas_Object *obj, Eina_Bool quickpanel)
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
ecore_x_e_illume_quickpanel_set(sd->x.xwin, quickpanel);
if (quickpanel)
{
@@ -8033,7 +8090,10 @@ elm_win_quickpanel_get(const Evas_Object *obj)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- return ecore_x_e_illume_quickpanel_get(sd->x.xwin);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ return ecore_x_e_illume_quickpanel_get(sd->x.xwin);
+ }
#else
(void)sd;
#endif
@@ -8050,7 +8110,10 @@ elm_win_quickpanel_priority_major_set(Evas_Object *obj, int priority)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- ecore_x_e_illume_quickpanel_priority_major_set(sd->x.xwin, priority);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ecore_x_e_illume_quickpanel_priority_major_set(sd->x.xwin, priority);
+ }
#else
(void)sd;
(void)priority;
@@ -8066,7 +8129,10 @@ elm_win_quickpanel_priority_major_get(const Evas_Object *obj)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- return ecore_x_e_illume_quickpanel_priority_major_get(sd->x.xwin);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ return ecore_x_e_illume_quickpanel_priority_major_get(sd->x.xwin);
+ }
#else
(void)sd;
#endif
@@ -8083,7 +8149,10 @@ elm_win_quickpanel_priority_minor_set(Evas_Object *obj, int priority)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- ecore_x_e_illume_quickpanel_priority_minor_set(sd->x.xwin, priority);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ecore_x_e_illume_quickpanel_priority_minor_set(sd->x.xwin, priority);
+ }
#else
(void)sd;
(void)priority;
@@ -8099,7 +8168,10 @@ elm_win_quickpanel_priority_minor_get(const Evas_Object *obj)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- return ecore_x_e_illume_quickpanel_priority_minor_get(sd->x.xwin);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ return ecore_x_e_illume_quickpanel_priority_minor_get(sd->x.xwin);
+ }
#else
(void)sd;
#endif
@@ -8116,7 +8188,10 @@ elm_win_quickpanel_zone_set(Evas_Object *obj, int zone)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- ecore_x_e_illume_quickpanel_zone_set(sd->x.xwin, zone);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ecore_x_e_illume_quickpanel_zone_set(sd->x.xwin, zone);
+ }
#else
(void)sd;
(void)zone;
@@ -8132,7 +8207,10 @@ elm_win_quickpanel_zone_get(const Evas_Object *obj)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- return ecore_x_e_illume_quickpanel_zone_get(sd->x.xwin);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ return ecore_x_e_illume_quickpanel_zone_get(sd->x.xwin);
+ }
#else
(void)sd;
#endif
@@ -8160,6 +8238,7 @@ elm_win_indicator_mode_set(Evas_Object *obj, Elm_Win_Indicator_Mode mode)
#ifdef HAVE_ELEMENTARY_X
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
if (sd->legacy.indmode == ELM_WIN_INDICATOR_SHOW)
ecore_x_e_illume_indicator_state_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
@@ -8205,6 +8284,7 @@ elm_win_indicator_opacity_set(Evas_Object *obj, Elm_Win_Indicator_Opacity_Mode m
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
if (sd->legacy.ind_o_mode == ELM_WIN_INDICATOR_OPAQUE)
ecore_x_e_illume_indicator_opacity_set
(sd->x.xwin, ECORE_X_ILLUME_INDICATOR_OPAQUE);
@@ -8244,7 +8324,10 @@ elm_win_keyboard_win_set(Evas_Object *obj, Eina_Bool is_keyboard)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- ecore_x_e_virtual_keyboard_set(sd->x.xwin, is_keyboard);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ecore_x_e_virtual_keyboard_set(sd->x.xwin, is_keyboard);
+ }
#else
(void)sd;
(void)is_keyboard;
@@ -8259,7 +8342,11 @@ elm_win_keyboard_win_get(const Evas_Object *obj)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
- if (sd->x.xwin) return ecore_x_e_virtual_keyboard_get(sd->x.xwin);
+ if (sd->x.xwin)
+ {
+ _internal_elm_win_xwindow_get(sd);
+ return ecore_x_e_virtual_keyboard_get(sd->x.xwin);
+ }
#else
(void)sd;
#endif
@@ -8275,7 +8362,10 @@ elm_win_conformant_set(Evas_Object *obj, Eina_Bool conformant)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- ecore_x_e_illume_conformant_set(sd->x.xwin, conformant);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ecore_x_e_illume_conformant_set(sd->x.xwin, conformant);
+ }
#else
(void)sd;
(void)conformant;
@@ -8291,7 +8381,10 @@ elm_win_conformant_get(const Evas_Object *obj)
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- return ecore_x_e_illume_conformant_get(sd->x.xwin);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ return ecore_x_e_illume_conformant_get(sd->x.xwin);
+ }
#else
(void)sd;
#endif
@@ -8594,6 +8687,7 @@ elm_win_illume_command_send(Evas_Object *obj, Elm_Illume_Command command, void *
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
switch (command)
{
case ELM_ILLUME_COMMAND_FOCUS_BACK:
@@ -8703,7 +8797,11 @@ _elm_win_window_id_get(Efl_Ui_Win_Data *sd)
#endif
#ifdef HAVE_ELEMENTARY_X
_internal_elm_win_xwindow_get(sd);
- if (sd->x.xwin) return (Ecore_Window)sd->x.xwin;
+ if (sd->x.xwin)
+ {
+ _internal_elm_win_xwindow_get(sd);
+ return (Ecore_Window)sd->x.xwin;
+ }
if (sd->parent)
{
Ecore_Window xwin = elm_win_xwindow_get(sd->parent);
@@ -8772,6 +8870,7 @@ elm_win_main_menu_get(Evas_Object *obj)
#ifdef HAVE_ELEMENTARY_X
if (use_dbus && _elm_dbus_menu_register(sd->main_menu))
{
+ _internal_elm_win_xwindow_get(sd);
_elm_dbus_menu_app_menu_register(sd->x.xwin, sd->main_menu,
_dbus_menu_set, obj);
}
@@ -8954,6 +9053,7 @@ elm_win_keygrab_set(Elm_Win *obj, const char *key,
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
{
+ _internal_elm_win_xwindow_get(sd);
Ecore_X_Win_Keygrab_Mode x_grab_mode;
switch (grab_mode)
{
@@ -8994,7 +9094,10 @@ elm_win_keygrab_unset(Elm_Win *obj, const char *key,
EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EINA_FALSE);
_internal_elm_win_xwindow_get(sd);
if (sd->x.xwin)
- ret = ecore_x_window_keygrab_unset(sd->x.xwin, key, 0, 0);
+ {
+ _internal_elm_win_xwindow_get(sd);
+ ret = ecore_x_window_keygrab_unset(sd->x.xwin, key, 0, 0);
+ }
#else
(void)obj;
(void)key;
@@ -9060,47 +9163,322 @@ elm_win_available_profiles_set(Elm_Win *obj, const char **profiles, unsigned int
EAPI void
elm_win_fake_canvas_set(Evas_Object *obj EINA_UNUSED, Ecore_Evas *oee EINA_UNUSED)
{
- ERR("Calling deprecrated function '%s'", __FUNCTION__);
+ ERR("Calling deprecrated function '%s'", __func__);
}
EAPI void
elm_win_name_set(Evas_Object *obj, const char *name)
{
- ERR("Calling deprecrated function '%s'", __FUNCTION__);
+ ERR("Calling deprecrated function '%s'", __func__);
efl_ui_win_name_set(obj, name);
}
EAPI void
elm_win_type_set(Evas_Object *obj, Elm_Win_Type type)
{
- ERR("Calling deprecrated function '%s'", __FUNCTION__);
+ ERR("Calling deprecrated function '%s'", __func__);
efl_ui_win_type_set(obj, _elm_win_type_to_efl_ui_win_type(type));
}
EAPI void
elm_win_teamwork_uri_preload(Efl_Ui_Win *obj EINA_UNUSED, const char *uri EINA_UNUSED)
{
- ERR("Calling deprecrated function '%s'", __FUNCTION__);
+ ERR("Calling deprecrated function '%s'", __func__);
}
EAPI void
elm_win_teamwork_uri_show(Efl_Ui_Win *obj EINA_UNUSED, const char *uri EINA_UNUSED)
{
- ERR("Calling deprecrated function '%s'", __FUNCTION__);
+ ERR("Calling deprecrated function '%s'", __func__);
}
EAPI void
elm_win_teamwork_uri_hide(Efl_Ui_Win *obj EINA_UNUSED)
{
- ERR("Calling deprecrated function '%s'", __FUNCTION__);
+ ERR("Calling deprecrated function '%s'", __func__);
}
EAPI void
elm_win_teamwork_uri_open(Efl_Ui_Win *obj EINA_UNUSED, const char *uri EINA_UNUSED)
{
- ERR("Calling deprecrated function '%s'", __FUNCTION__);
+ ERR("Calling deprecrated function '%s'", __func__);
+}
+
+/* What here follows is code that implements the glue between ecore evas and efl_ui* side */
+typedef struct {
+ Eo *obj;
+ Eina_Bool currently_inside;
+} Ui_Dnd_Target;
+
+static inline Efl_Ui_Cnp_Buffer
+_ui_buffer_get(Ecore_Evas_Selection_Buffer buffer)
+{
+ if (buffer == ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER)
+ return EFL_UI_CNP_BUFFER_SELECTION;
+ else if (buffer == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ return EFL_UI_CNP_BUFFER_COPY_AND_PASTE;
+
+ return -1;
+}
+
+void
+_register_selection_changed(Efl_Ui_Selection *selection)
+{
+ ELM_WIN_DATA_GET(efl_provider_find(selection, EFL_UI_WIN_CLASS), pd);
+
+ eina_array_push(pd->planned_changes, selection);
+}
+
+static Eina_Bool
+_remove_object(void *data, void *gdata)
+{
+ if (data == gdata)
+ return EINA_FALSE;
+ return EINA_TRUE;
+}
+
+static void
+_selection_changed_cb(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection)
+{
+ Efl_Ui_Win_Data *pd = _elm_win_associate_get(ee);
+ Efl_Ui_Wm_Selection_Changed changed = {
+ .seat = seat,
+ .buffer = _ui_buffer_get(selection),
+ .caused_by = eina_array_count(pd->planned_changes) > 0 ? eina_array_data_get(pd->planned_changes, 0) : NULL,
+ };
+
+ for (unsigned int i = 0; i < eina_array_count(pd->selection_changed); ++i)
+ {
+ Eo *obj = eina_array_data_get(pd->selection_changed, i);
+
+ efl_event_callback_call(obj, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, &changed);
+ }
+
+ if (changed.caused_by)
+ eina_array_remove(pd->planned_changes, _remove_object, changed.caused_by);
+}
+
+static void
+_motion_cb(Ecore_Evas *ee, unsigned int seat, Eina_Position2D p)
+{
+ Efl_Ui_Win_Data *pd = _elm_win_associate_get(ee);
+ for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
+ {
+ Ui_Dnd_Target *target = eina_inarray_nth(pd->drop_target, i);
+ Eina_Rect rect = efl_gfx_entity_geometry_get(target->obj);
+ Eina_Bool inside = eina_rectangle_coords_inside(&rect.rect, p.x, p.y);
+ Efl_Ui_Drop_Event ev = {p, seat, ecore_evas_drop_available_types_get(ee, seat)};
+
+ if (target->currently_inside && !inside)
+ {
+ target->currently_inside = EINA_FALSE;
+ efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_LEFT, &ev);
+ ecore_evas_dnd_mark_motion_used(ee, seat);
+ }
+ else if (!target->currently_inside && inside)
+ {
+ target->currently_inside = EINA_TRUE;
+ efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_ENTERED, &ev);
+ ecore_evas_dnd_mark_motion_used(ee, seat);
+ }
+ else if (target->currently_inside && inside)
+ {
+ efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_POSITION_CHANGED, &ev);
+ ecore_evas_dnd_mark_motion_used(ee, seat);
+ }
+ eina_accessor_free(ev.available_types);
+ }
+}
+
+static void
+_enter_state_change_cb(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Position2D p, Eina_Bool move_inside)
+{
+ Efl_Ui_Win_Data *pd = _elm_win_associate_get(ee);
+ for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
+ {
+ Ui_Dnd_Target *target = eina_inarray_nth(pd->drop_target, i);
+ Eina_Rect rect = efl_gfx_entity_geometry_get(target->obj);
+ Eina_Bool inside = eina_rectangle_coords_inside(&rect.rect, p.x, p.y);
+ Efl_Ui_Drop_Event ev = {p, seat, ecore_evas_drop_available_types_get(ee, seat)};
+
+ if (inside && move_inside)
+ {
+ 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)
+ {
+ target->currently_inside = EINA_FALSE;
+ efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_LEFT, &ev);
+ }
+ }
}
+static void
+_drop_cb(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Position2D p, const char *action)
+{
+ Eina_List *itr, *top_objects_list = NULL;
+ Efl_Ui_Win_Data *pd = _elm_win_associate_get(ee);
+ Eina_Array *tmp = eina_array_new(10);
+ Eo *top_obj;
+
+ for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
+ {
+ Ui_Dnd_Target *target = eina_inarray_nth(pd->drop_target, i);
+ Eina_Rect rect = efl_gfx_entity_geometry_get(target->obj);
+ Eina_Bool inside = eina_rectangle_coords_inside(&rect.rect, p.x, p.y);
+
+ if (inside)
+ {
+ EINA_SAFETY_ON_FALSE_GOTO(target->currently_inside, end);
+ eina_array_push(tmp, target->obj);
+ }
+ }
+
+ /* We retrieve the (non-smart) objects pointed by (px, py) */
+ top_objects_list = evas_tree_objects_at_xy_get(ecore_evas_get(ee), NULL, p.x, p.y);
+ /* We walk on this list from the last because if the list contains more than one
+ * element, all but the last will repeat events. The last one can repeat events
+ * or not. Anyway, this last one is the first that has to be taken into account
+ * for the determination of the drop target.
+ */
+ EINA_LIST_REVERSE_FOREACH(top_objects_list, itr, top_obj)
+ {
+ Evas_Object *object = top_obj;
+ /* We search for the dropable data into the object. If not found, we search into its parent.
+ * For example, if a button is a drop target, the first object will be an (internal) image.
+ * The drop target is attached to the button, i.e to image's parent. That's why we need to
+ * walk on the parents until NULL.
+ * If we find this dropable data, we found our drop target.
+ */
+ while (object)
+ {
+ unsigned int out_idx;
+ if (!eina_array_find(tmp, object, &out_idx))
+ {
+ object = evas_object_smart_parent_get(object);
+ }
+ else
+ {
+ Efl_Ui_Drop_Dropped_Event ev = {{p, seat, ecore_evas_drop_available_types_get(ee, seat)}, action};
+ efl_event_callback_call(object, EFL_UI_DND_EVENT_DROP_DROPPED, &ev);
+ goto end;
+ }
+ }
+ }
+end:
+ eina_list_free(top_objects_list);
+ eina_array_free(tmp);
+}
+
+static void
+_ee_backbone_init(Efl_Ui_Win *obj EINA_UNUSED, Efl_Ui_Win_Data *pd)
+{
+ pd->selection_changed = eina_array_new(1);
+ pd->drop_target = eina_inarray_new(sizeof(Ui_Dnd_Target), 1);
+
+ ecore_evas_callback_selection_changed_set(pd->ee, _selection_changed_cb);
+ ecore_evas_callback_drop_drop_set(pd->ee, _drop_cb);
+ ecore_evas_callback_drop_motion_set(pd->ee, _motion_cb);
+ ecore_evas_callback_drop_state_changed_set(pd->ee, _enter_state_change_cb);
+}
+
+static void
+_ee_backbone_shutdown(Efl_Ui_Win *obj EINA_UNUSED, Efl_Ui_Win_Data *pd)
+{
+ ecore_evas_callback_selection_changed_set(pd->ee, NULL);
+ ecore_evas_callback_drop_drop_set(pd->ee, NULL);
+ ecore_evas_callback_drop_motion_set(pd->ee, NULL);
+ ecore_evas_callback_drop_state_changed_set(pd->ee, NULL);
+
+ eina_array_free(pd->selection_changed);
+ pd->selection_changed = NULL;
+ eina_inarray_free(pd->drop_target);
+ pd->drop_target = NULL;
+
+}
+
+static Eina_Bool
+_remove(void *data, void *gdata)
+{
+ if (data == gdata)
+ return EINA_FALSE;
+ return EINA_TRUE;
+}
+
+Efl_Ui_Win*
+efl_ui_win_get(Evas_Object *obj)
+{
+ Efl_Ui_Win *win = efl_provider_find(obj, MY_CLASS);
+ if (!win)
+ {
+ Evas *e = evas_object_evas_get(obj);
+ Ecore_Evas *ee = ecore_evas_ecore_evas_get(e);
+
+ win = ecore_evas_data_get(ee, "elm_win");
+ }
+ EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
+ return win;
+}
+
+static Efl_Ui_Win_Data*
+_fetch_win_data_from_arbitary_obj(Efl_Canvas_Object *obj)
+{
+ Efl_Ui_Win *win = efl_ui_win_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
+ Efl_Ui_Win_Data *pd = efl_data_scope_safe_get(win, MY_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL);
+ return pd;
+}
+
+void
+_drop_event_register(Eo *obj)
+{
+ Ui_Dnd_Target target = {obj, EINA_FALSE};
+ Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
+ if (!pd) return;
+
+ eina_inarray_push(pd->drop_target, &target);
+}
+
+void
+_drop_event_unregister(Eo *obj)
+{
+ int idx = -1;
+
+ Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
+ if (!pd) return;
+
+ for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
+ {
+ Ui_Dnd_Target *target = eina_inarray_nth(pd->drop_target, i);
+ if (target->obj == obj)
+ {
+ //FIXME emit drop
+ target->currently_inside = EINA_FALSE;
+ idx = i;
+ }
+ }
+ if (idx != -1)
+ eina_inarray_remove_at(pd->drop_target, idx);
+}
+
+void
+_selection_changed_event_register(Eo *obj)
+{
+ Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
+ if (!pd) return;
+
+ eina_array_push(pd->selection_changed, obj);
+}
+void
+_selection_changed_event_unregister(Eo *obj)
+{
+ Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
+ if (!pd) return;
+
+ eina_array_remove(pd->selection_changed, _remove, obj);
+}
/* Internal EO APIs and hidden overrides */
ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_win, Efl_Ui_Win_Data)
@@ -9172,14 +9550,19 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
switch ((int) type)
{
- case ELM_WIN_INLINED_IMAGE: klass = EFL_UI_WIN_INLINED_LEGACY_CLASS; break;
- case ELM_WIN_SOCKET_IMAGE: klass = EFL_UI_WIN_SOCKET_LEGACY_CLASS; break;
- default: break;
+ case ELM_WIN_INLINED_IMAGE:
+ klass = EFL_UI_WIN_INLINED_LEGACY_CLASS;
+ break;
+ case ELM_WIN_SOCKET_IMAGE:
+ klass = EFL_UI_WIN_SOCKET_LEGACY_CLASS;
+ break;
+ default:
+ break;
}
return elm_legacy_add(klass, parent,
efl_ui_win_name_set(efl_added, name),
- efl_ui_win_type_set(efl_added, type));
+ efl_ui_win_type_set(efl_added, (Efl_Ui_Win_Type)type));
}
@@ -9226,13 +9609,13 @@ elm_win_util_dialog_add(Evas_Object *parent, const char *name, const char *title
EAPI void
elm_win_keyboard_mode_set(Evas_Object *obj, Elm_Win_Keyboard_Mode mode)
{
- efl_ui_win_keyboard_mode_set(obj, mode);
+ efl_ui_win_keyboard_mode_set(obj, (Efl_Ui_Win_Keyboard_Mode)mode);
}
EAPI Elm_Win_Keyboard_Mode
elm_win_keyboard_mode_get(const Evas_Object *obj)
{
- return efl_ui_win_keyboard_mode_get(obj);
+ return (Elm_Win_Keyboard_Mode)efl_ui_win_keyboard_mode_get(obj);
}
EAPI void
@@ -9429,7 +9812,7 @@ elm_win_center(Evas_Object *obj, Eina_Bool h, Eina_Bool v)
EAPI Eina_Bool
elm_win_move_resize_start(Evas_Object *obj, Elm_Win_Move_Resize_Mode mode)
{
- return efl_ui_win_move_resize_start(obj, mode);
+ return efl_ui_win_move_resize_start(obj, (Efl_Ui_Win_Move_Resize_Mode)mode);
}
EAPI void
diff --git a/src/lib/elementary/efl_ui_win.eo b/src/lib/elementary/efl_ui_win.eo
index 602acf506b..54686b0bae 100644
--- a/src/lib/elementary/efl_ui_win.eo
+++ b/src/lib/elementary/efl_ui_win.eo
@@ -835,9 +835,9 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements Efl.Canvas.Scene, Efl.Access.W
Efl.Part.part_get;
}
constructors {
- .win_name @optional;
+ .win_name;
.win_type @optional;
- .accel_preference @optional;
+ .accel_preference;
}
events {
delete,request: void; [[Called when the window receives a delete request]]
diff --git a/src/lib/elementary/efl_ui_win_inlined_legacy_eo.h b/src/lib/elementary/efl_ui_win_inlined_legacy_eo.h
index acacc7be02..4f706d0cbc 100644
--- a/src/lib/elementary/efl_ui_win_inlined_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_win_inlined_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Win_Inlined_Legacy;
*/
#define EFL_UI_WIN_INLINED_LEGACY_CLASS efl_ui_win_inlined_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_win_inlined_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_win_inlined_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_win_legacy_eo.h b/src/lib/elementary/efl_ui_win_legacy_eo.h
index 70563cd14f..9d0ffb0303 100644
--- a/src/lib/elementary/efl_ui_win_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_win_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Win_Legacy;
*/
#define EFL_UI_WIN_LEGACY_CLASS efl_ui_win_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_win_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_win_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/efl_ui_win_socket_legacy_eo.h b/src/lib/elementary/efl_ui_win_socket_legacy_eo.h
index b89a58aad1..5ed538f715 100644
--- a/src/lib/elementary/efl_ui_win_socket_legacy_eo.h
+++ b/src/lib/elementary/efl_ui_win_socket_legacy_eo.h
@@ -20,7 +20,7 @@ typedef Eo Efl_Ui_Win_Socket_Legacy;
*/
#define EFL_UI_WIN_SOCKET_LEGACY_CLASS efl_ui_win_socket_legacy_class_get()
-EWAPI const Efl_Class *efl_ui_win_socket_legacy_class_get(void);
+EWAPI const Efl_Class *efl_ui_win_socket_legacy_class_get(void) EINA_CONST;
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/lib/elementary/elc_combobox.c b/src/lib/elementary/elc_combobox.c
index 200745a97b..49a91c0012 100644
--- a/src/lib/elementary/elc_combobox.c
+++ b/src/lib/elementary/elc_combobox.c
@@ -209,10 +209,8 @@ _table_resize(void *data)
else win_y_offset = obj_y;
if (current_height < win_y_offset)
- evas_object_size_hint_min_set(sd->spacer, obj_w * elm_config_scale_get(),
- current_height + (2 * elm_config_scale_get()));
- else evas_object_size_hint_min_set(sd->spacer, obj_w * elm_config_scale_get(),
- win_y_offset * elm_config_scale_get());
+ evas_object_size_hint_min_set(sd->spacer, obj_w, current_height);
+ else evas_object_size_hint_min_set(sd->spacer, obj_w, win_y_offset);
}
}
diff --git a/src/lib/elementary/elc_ctxpopup.c b/src/lib/elementary/elc_ctxpopup.c
index c99ccaeeed..fcf88e3b9d 100644
--- a/src/lib/elementary/elc_ctxpopup.c
+++ b/src/lib/elementary/elc_ctxpopup.c
@@ -681,7 +681,7 @@ _elm_ctxpopup_efl_ui_widget_theme_apply(Eo *obj, Elm_Ctxpopup_Data *sd)
if (sd->list)
{
- if (!strncmp(elm_object_style_get(obj), "default", strlen("default")))
+ if (eina_str_has_prefix(elm_object_style_get(obj),"default"))
elm_object_style_set(sd->list, "ctxpopup");
else
elm_object_style_set(sd->list, elm_object_style_get(obj));
@@ -1480,7 +1480,7 @@ _elm_ctxpopup_item_init(Eo *eo_item,
if (!sd->list)
{
sd->list = elm_list_add(obj);
- if (!strncmp(elm_object_style_get(obj), "default", strlen("default")))
+ if (eina_str_has_prefix(elm_object_style_get(obj),"default"))
elm_object_style_set(sd->list, "ctxpopup");
else elm_object_style_set(sd->list, elm_object_style_get(obj));
elm_list_mode_set(sd->list, ELM_LIST_EXPAND);
diff --git a/src/lib/elementary/elc_ctxpopup.h b/src/lib/elementary/elc_ctxpopup.h
index 6663f7e863..7008d58f6c 100644
--- a/src/lib/elementary/elc_ctxpopup.h
+++ b/src/lib/elementary/elc_ctxpopup.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Ctxpopup Ctxpopup
+ * @defgroup Elm_Ctxpopup_Group Ctxpopup
* @ingroup Elementary
*
* @image html ctxpopup_inheritance_tree.png
@@ -22,7 +22,7 @@
* functions acting on it also work for context popup objects (since 1.8).
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "dismissed" - This is called when 1. the outside of ctxpopup was clicked
* or 2. its parent area is changed or 3. the language is changed and also when
* 4. the parent object is resized due to the window rotation. Then ctxpopup is
@@ -60,9 +60,13 @@
* @li @ref elm_object_item_focus_get
*
* @ref tutorial_ctxpopup shows the usage of a good deal of the API.
- * @{
+ *
*/
+/**
+ * @addtogroup Elm_Ctxpopup_Group
+ * @{
+ */
#ifndef EFL_NOLEGACY_API_SUPPORT
#include "elc_ctxpopup_legacy.h"
#endif
diff --git a/src/lib/elementary/elc_ctxpopup_legacy.h b/src/lib/elementary/elc_ctxpopup_legacy.h
index d3181ed2cf..6c475515c9 100644
--- a/src/lib/elementary/elc_ctxpopup_legacy.h
+++ b/src/lib/elementary/elc_ctxpopup_legacy.h
@@ -4,7 +4,7 @@
* @param parent Parent object
* @return New object or @c NULL, if it cannot be created
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EAPI Evas_Object *elm_ctxpopup_add(Evas_Object *parent);
diff --git a/src/lib/elementary/elc_fileselector.c b/src/lib/elementary/elc_fileselector.c
index 39f1a7cd3d..a74bb3fe27 100644
--- a/src/lib/elementary/elc_fileselector.c
+++ b/src/lib/elementary/elc_fileselector.c
@@ -17,7 +17,7 @@
#include "elm_priv.h"
#include "eo_internal.h"
#include <Elementary.h>
-#include "Eio_Eo.h"
+#include "Eio.h"
#include "elm_fileselector_button_eo.h"
#include "elm_fileselector_entry_eo.h"
#include "elm_interface_fileselector.h"
@@ -880,7 +880,7 @@ _listing_request_cleanup(Listing_Request *lreq)
}
static void
-_process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
+_process_model(Elm_Fileselector_Data *sd, Efl_Model *child, Elm_Object_Item *fallback_parent_item)
{
Elm_Fileselector_Item_Data *it_data;
Elm_Object_Item *item, *it_parent;
@@ -927,6 +927,8 @@ _process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
it_data->is_dir = dir;
it_parent = efl_key_data_get(parent, ".item.data");
+ if (!it_parent)
+ it_parent = fallback_parent_item;
if (dir)
{
@@ -981,7 +983,9 @@ _process_children_cb(Eo *model EINA_UNUSED, void *data, const Eina_Value v)
if (!lreq->valid) goto end;
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
- _process_model(lreq->sd, child);
+ {
+ _process_model(lreq->sd, child, lreq->parent_it);
+ }
lreq->item_total = len;
@@ -1004,6 +1008,29 @@ _process_children_error(Eo *model EINA_UNUSED, void *data, Eina_Error error)
}
static void
+_count_changed_cb(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+ Listing_Request *lreq = data;
+ Eina_Future *future;
+
+ efl_event_callback_del(lreq->model, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, _count_changed_cb, lreq);
+
+ if (efl_model_children_count_get(lreq->model))
+ {
+ future = efl_model_children_slice_get(lreq->model, 0, efl_model_children_count_get(lreq->model));
+ future = efl_future_then(lreq->obj, future);
+ efl_future_then(lreq->model, future,
+ .success = _process_children_cb,
+ .error = _process_children_error,
+ .data = lreq);
+ }
+ else
+ {
+ _process_last(lreq);
+ }
+}
+
+static void
_populate(Evas_Object *obj,
Efl_Model *model,
Elm_Object_Item *parent_it,
@@ -1087,7 +1114,10 @@ _populate(Evas_Object *obj,
}
else
{
- _process_last(lreq);
+ if (parent_it)
+ efl_event_callback_add(lreq->model, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, _count_changed_cb, lreq);
+ else
+ _process_last(lreq);
}
}
@@ -1624,7 +1654,7 @@ _resource_created_then(Eo *model EINA_UNUSED, void *data, const Eina_Value v)
ELM_FILESELECTOR_DATA_GET(fs, sd);
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
- _process_model(sd, child);
+ _process_model(sd, child, NULL); //this function will always just work for the root model of the fileselector
return v;
}
@@ -2406,6 +2436,11 @@ _properties_ready(void *data, const Efl_Event *ev)
Eina_Bool is_dir = EINA_FALSE;
value = efl_model_property_get(ev->object, "is_dir");
+ if (!eina_value_type_get(value))
+ {
+ ERR("Empty type for 'is_dir'");
+ return;
+ }
if (eina_value_type_get(value) != EINA_VALUE_TYPE_BOOL)
{
ERR("Unexpected type for 'is_dir': '%s' with value '%s'.", eina_value_type_get(value)->name, eina_value_to_string(value));
@@ -2471,6 +2506,11 @@ _elm_fileselector_selected_set_internal(Evas_Object *obj, const char *path)
efl_event_callback_add(pd->target, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_ready, obj);
value = efl_model_property_get(pd->target, "is_dir");
+ if (!eina_value_type_get(value))
+ {
+ ERR("Empty type for 'is_dir'");
+ goto clean_up;
+ }
if (eina_value_type_get(value) == EINA_VALUE_TYPE_ERROR)
{
Eina_Error err = 0;
@@ -2507,6 +2547,11 @@ _elm_fileselector_elm_interface_fileselector_selected_model_set(Eo *obj, Elm_Fil
efl_event_callback_add(pd->target, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_ready, obj);
value = efl_model_property_get(pd->target, "is_dir");
+ if (!eina_value_type_get(value))
+ {
+ ERR("Empty type for 'is_dir'");
+ goto clean_up;
+ }
if (eina_value_type_get(value) == EINA_VALUE_TYPE_ERROR)
{
Eina_Error err = 0;
diff --git a/src/lib/elementary/elc_fileselector.h b/src/lib/elementary/elc_fileselector.h
index 32b8b566a0..9a936b3ec1 100644
--- a/src/lib/elementary/elc_fileselector.h
+++ b/src/lib/elementary/elc_fileselector.h
@@ -38,7 +38,7 @@
* functions acting on it also work for file selector objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "activated" - the user activated a file. This can happen by
* double-clicking or pressing Enter key. (@p event_info is a
* pointer to the activated file path)
diff --git a/src/lib/elementary/elc_fileselector_button.c b/src/lib/elementary/elc_fileselector_button.c
index 5e10e83063..e05fc4e181 100644
--- a/src/lib/elementary/elc_fileselector_button.c
+++ b/src/lib/elementary/elc_fileselector_button.c
@@ -5,7 +5,7 @@
#define EFL_ACCESS_OBJECT_PROTECTED
#include <Elementary.h>
-#include "Eio_Eo.h"
+#include "Eio.h"
#include "elm_priv.h"
#include "elm_fileselector_button_eo.h"
#include "elm_fileselector_entry_eo.h"
diff --git a/src/lib/elementary/elc_fileselector_entry.c b/src/lib/elementary/elc_fileselector_entry.c
index 52d901ba9b..f67990aadb 100644
--- a/src/lib/elementary/elc_fileselector_entry.c
+++ b/src/lib/elementary/elc_fileselector_entry.c
@@ -7,7 +7,7 @@
#define EFL_PART_PROTECTED
#include <Elementary.h>
-#include "Eio_Eo.h"
+#include "Eio.h"
#include "elm_priv.h"
#include "elm_fileselector_button_eo.h"
#include "elm_fileselector_entry_eo.h"
@@ -444,13 +444,13 @@ _elm_fileselector_entry_efl_ui_view_model_get(const Eo *obj, Elm_Fileselector_En
free(sd->path);
sd->path = elm_entry_markup_to_utf8(elm_object_text_get(sd->entry));
- if (!strcmp(sd->path, efl_io_model_path_get(bmodel)))
+ if (eina_streq(sd->path, efl_io_model_path_get(bmodel)))
return bmodel;
ret = efl_add_ref(efl_class_get(bmodel), (Eo*) obj,
efl_io_model_path_set(efl_added, sd->path),
efl_loop_model_volatile_make(efl_added));
- eina_freeq_ptr_add(postponed_fq, ret, EINA_FREE_CB(efl_unref), sizeof (void*));
+ eina_freeq_ptr_add(postponed_fq, ret, EINA_FREE_CB(efl_unref), 0);
return ret;
}
diff --git a/src/lib/elementary/elc_fileselector_entry.h b/src/lib/elementary/elc_fileselector_entry.h
index fe0dfde7e5..0085be89d7 100644
--- a/src/lib/elementary/elc_fileselector_entry.h
+++ b/src/lib/elementary/elc_fileselector_entry.h
@@ -20,7 +20,7 @@
* is closed and the selected file's path string is exposed both as
* a smart event and as the new text on the entry.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for file selector entry objects (since 1.8).
*
* This widget encapsulates operations on its internal file
diff --git a/src/lib/elementary/elc_hoversel.c b/src/lib/elementary/elc_hoversel.c
index 2f742f2051..6a9708c407 100644
--- a/src/lib/elementary/elc_hoversel.c
+++ b/src/lib/elementary/elc_hoversel.c
@@ -478,7 +478,7 @@ _activate(Evas_Object *obj)
sd->expanded = EINA_TRUE;
- sd->hover = elm_hover_add(sd->hover_parent);
+ efl_wref_add(elm_hover_add(sd->hover_parent), &sd->hover);
efl_event_callback_add(sd->hover, EFL_EVENT_KEY_DOWN, _hover_key_down, obj);
elm_widget_sub_object_add(obj, sd->hover);
@@ -523,6 +523,8 @@ _activate(Evas_Object *obj)
if (_elm_config->access_mode) _access_widget_item_register(sd);
efl_event_callback_legacy_call(obj, ELM_HOVERSEL_EVENT_EXPANDED, NULL);
+ efl_canvas_group_calculate(sd->hover);
+ _sizing_eval(obj);
evas_object_show(sd->hover);
}
@@ -667,7 +669,6 @@ _elm_hoversel_efl_canvas_group_group_del(Eo *obj, Elm_Hoversel_Data *sd)
{
Elm_Object_Item *eo_item;
- evas_object_event_callback_del(sd->hover, EVAS_CALLBACK_DEL, _auto_update);
EINA_LIST_FREE(sd->items, eo_item)
{
ELM_HOVERSEL_ITEM_DATA_GET(eo_item, it);
@@ -720,8 +721,11 @@ _elm_hoversel_efl_object_constructor(Eo *obj, Elm_Hoversel_Data *_pd EINA_UNUSED
}
EOLIAN static void
-_elm_hoversel_efl_object_destructor(Eo *obj, Elm_Hoversel_Data *_pd EINA_UNUSED)
+_elm_hoversel_efl_object_destructor(Eo *obj, Elm_Hoversel_Data *_pd)
{
+ if (_pd->resize_job)
+ ELM_SAFE_FREE(_pd->resize_job, ecore_job_del);
+
elm_obj_hoversel_clear(obj);
efl_destructor(efl_super(obj, MY_CLASS));
}
@@ -820,7 +824,6 @@ _elm_hoversel_clear(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd)
{
Elm_Object_Item *it;
- evas_object_event_callback_del(sd->hover, EVAS_CALLBACK_DEL, _auto_update);
EINA_LIST_FREE(sd->items, it)
{
efl_del(it);
diff --git a/src/lib/elementary/elc_multibuttonentry.h b/src/lib/elementary/elc_multibuttonentry.h
index e17c1c946f..491433b924 100644
--- a/src/lib/elementary/elc_multibuttonentry.h
+++ b/src/lib/elementary/elc_multibuttonentry.h
@@ -5,7 +5,7 @@
* @image html multibuttonentry_inheritance_tree.png
* @image latex multibuttonentry_inheritance_tree.eps
*
- * A multi-button entry is a widget letting an user enter text and
+ * A multi-button entry is a widget letting a user enter text and
* each chunk of text managed as a set of buttons. Each text button is
* inserted by pressing the "return" key. If there is no space in the
* current row, a new button is added to the next row. When a text
@@ -17,11 +17,11 @@
* emails/messages to a group of addresses, each of which is an item
* that can be clicked for further actions.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for multi-button entry objects (since 1.8).
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "item,selected" - this is called when an item is selected by
* api, user interaction, and etc. this is also called when a
* user press back space while cursor is on the first field of
diff --git a/src/lib/elementary/elc_naviframe.c b/src/lib/elementary/elc_naviframe.c
index 10368cb014..e68d5803b2 100644
--- a/src/lib/elementary/elc_naviframe.c
+++ b/src/lib/elementary/elc_naviframe.c
@@ -1088,6 +1088,13 @@ _on_item_push_finished(void *data,
ELM_NAVIFRAME_DATA_GET(WIDGET(it), sd);
+ /* If pushed item becomes top item, then do not hide pushed item view.
+ * If top item is deleted in "transition,finished" smart callback by user
+ * before this function is called, then pushed item becomes top item.
+ */
+ if (EO_OBJ(it) == elm_naviframe_top_item_get(WIDGET(it)))
+ return;
+
evas_object_hide(VIEW(it));
elm_object_signal_emit(VIEW(it), "elm,state,invisible", "elm");
@@ -1733,9 +1740,7 @@ _elm_naviframe_item_pop(Eo *obj, Elm_Naviframe_Data *sd)
if (!it->pop_cb(it->pop_data, eo_item))
{
efl_unref(eo_item);
- if (it->delete_me)
- efl_del(eo_item);
- else
+ if (!it->delete_me)
{
/* To avoid multiple item pops, the auto pushed button deletes
its clicked callback once it is called.
diff --git a/src/lib/elementary/elc_naviframe.h b/src/lib/elementary/elc_naviframe.h
index 71f213de85..02b1bced23 100644
--- a/src/lib/elementary/elc_naviframe.h
+++ b/src/lib/elementary/elc_naviframe.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Naviframe Naviframe
+ * @defgroup Elm_Naviframe_Group Naviframe
* @ingroup Elementary
*
* @image html naviframe_inheritance_tree.png
@@ -55,7 +55,7 @@
*
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "transition,finished" - When the transition is finished in
* changing the item
* @li @c "title,transition,finished" - When the title area's transition
@@ -85,7 +85,7 @@
*/
/**
- * @addtogroup Elm_Naviframe
+ * @addtogroup Elm_Naviframe_Group
* @{
*/
diff --git a/src/lib/elementary/elc_naviframe_common.h b/src/lib/elementary/elc_naviframe_common.h
index 453587e048..23174ffd9f 100644
--- a/src/lib/elementary/elc_naviframe_common.h
+++ b/src/lib/elementary/elc_naviframe_common.h
@@ -17,7 +17,7 @@ typedef Eina_Bool (*Elm_Naviframe_Item_Pop_Cb)(void *data, Elm_Object_Item *it);
* @param parent Parent object
* @return New object or @c NULL, if it cannot be created
*
- * @ingroup Elm_Naviframe
+ * @ingroup Elm_Naviframe_Group
*/
EAPI Evas_Object *elm_naviframe_add(Evas_Object *parent);
diff --git a/src/lib/elementary/elc_naviframe_legacy.h b/src/lib/elementary/elc_naviframe_legacy.h
index 38f06ca186..31c9f216e2 100644
--- a/src/lib/elementary/elc_naviframe_legacy.h
+++ b/src/lib/elementary/elc_naviframe_legacy.h
@@ -4,7 +4,7 @@
* @param[in] obj The object.
* @param[in] style The current item style name. @c null would be default
*
- * @ingroup Elm_Naviframe_Item
+ * @ingroup Elm_Naviframe_Item_Group
*/
EAPI void elm_naviframe_item_style_set(Elm_Object_Item *obj, const char *style);
@@ -15,7 +15,7 @@ EAPI void elm_naviframe_item_style_set(Elm_Object_Item *obj, const char *style);
*
* @return The current item style name. @c null would be default
*
- * @ingroup Elm_Naviframe_Item
+ * @ingroup Elm_Naviframe_Item_Group
*/
EAPI const char *elm_naviframe_item_style_get(const Elm_Object_Item *obj);
diff --git a/src/lib/elementary/elc_popup.h b/src/lib/elementary/elc_popup.h
index 5671369ab8..25b5a08eb4 100644
--- a/src/lib/elementary/elc_popup.h
+++ b/src/lib/elementary/elc_popup.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Popup Popup
+ * @defgroup Elm_Popup_Group Popup
* @ingroup Elementary
*
* @image html popup_inheritance_tree.png
@@ -68,11 +68,11 @@
* evas_object_show on popup should be called after setting all the contents
* and buttons of popup.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for popup objects (since 1.8).
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "timeout" - whenever popup is closed as a result of timeout.
* @li @c "block,clicked" - whenever user taps on Blocked Event area.
* @li @c "focused" - When the popup has received focus. (since 1.8)
diff --git a/src/lib/elementary/elc_popup_legacy.h b/src/lib/elementary/elc_popup_legacy.h
index 3312928593..dded76eefa 100644
--- a/src/lib/elementary/elc_popup_legacy.h
+++ b/src/lib/elementary/elc_popup_legacy.h
@@ -4,8 +4,8 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Popup
+ * @ingroup Elm_Popup_Group
*/
EAPI Evas_Object *elm_popup_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-#include "elm_popup_eo.legacy.h" \ No newline at end of file
+#include "elm_popup_eo.legacy.h"
diff --git a/src/lib/elementary/elementary_config.h b/src/lib/elementary/elementary_config.h
index 6074510b0d..16127cc934 100644
--- a/src/lib/elementary/elementary_config.h
+++ b/src/lib/elementary/elementary_config.h
@@ -7,6 +7,10 @@
* @brief Definition of special values for user configuration.
*/
+/**
+ * @def ELM_CONFIG_ICON_THEME_ELEMENTARY
+ * Name to use in elm_config_icon_theme_set() to use Elementary's own icon set.
+ */
#define ELM_CONFIG_ICON_THEME_ELEMENTARY "_Elementary_Icon_Theme"
#if defined(EFL_BUILD) || defined(ELM_INTERNAL_API_ARGESFSDFEFC)
diff --git a/src/lib/elementary/elm_access.c b/src/lib/elementary/elm_access.c
index 9b33f4de40..fc7c0ab262 100644
--- a/src/lib/elementary/elm_access.c
+++ b/src/lib/elementary/elm_access.c
@@ -520,6 +520,7 @@ _access_highlight_next_get(Evas_Object *obj, Elm_Focus_Direction dir)
if (ho)
{
Elm_Access_Info *info = _elm_access_info_get(ho);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(info, ret);
if (type == ELM_ACCESS_ACTION_HIGHLIGHT_NEXT && info->next)
target = info->next;
else if (type == ELM_ACCESS_ACTION_HIGHLIGHT_PREV && info->prev)
@@ -701,7 +702,8 @@ _elm_access_highlight_cycle(Evas_Object *obj, Elm_Focus_Direction dir)
else
{
efl_ui_focus_util_focus(obj);
- efl_ui_focus_manager_move(elm_widget_top_get(obj), dir);
+ efl_ui_focus_manager_move(elm_widget_top_get(obj),
+ (Efl_Ui_Focus_Direction)dir);
}
}
diff --git a/src/lib/elementary/elm_access_eo.h b/src/lib/elementary/elm_access_eo.h
index 75921b80f5..3828b5a31e 100644
--- a/src/lib/elementary/elm_access_eo.h
+++ b/src/lib/elementary/elm_access_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Access;
*/
#define ELM_ACCESS_CLASS elm_access_class_get()
-EWAPI const Efl_Class *elm_access_class_get(void);
+EWAPI const Efl_Class *elm_access_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_actionslider.h b/src/lib/elementary/elm_actionslider.h
index 55abc02138..f8129fc369 100644
--- a/src/lib/elementary/elm_actionslider.h
+++ b/src/lib/elementary/elm_actionslider.h
@@ -25,11 +25,11 @@
*
* @note By default all positions are set as enabled.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for actionslider objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "selected" - when user selects an enabled position (the
* label is passed as event info).
* @li @c "pos_changed" - when the indicator reaches any of the
diff --git a/src/lib/elementary/elm_actionslider_eo.h b/src/lib/elementary/elm_actionslider_eo.h
index 9a6b55d484..99ab3805fc 100644
--- a/src/lib/elementary/elm_actionslider_eo.h
+++ b/src/lib/elementary/elm_actionslider_eo.h
@@ -38,7 +38,7 @@ typedef enum
*/
#define ELM_ACTIONSLIDER_CLASS elm_actionslider_class_get()
-EWAPI const Efl_Class *elm_actionslider_class_get(void);
+EWAPI const Efl_Class *elm_actionslider_class_get(void) EINA_CONST;
/**
* @brief Actionslider position indicator
diff --git a/src/lib/elementary/elm_atspi_app_object_eo.h b/src/lib/elementary/elm_atspi_app_object_eo.h
index 0dff0ba000..1558c5b747 100644
--- a/src/lib/elementary/elm_atspi_app_object_eo.h
+++ b/src/lib/elementary/elm_atspi_app_object_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Atspi_App_Object;
*/
#define ELM_ATSPI_APP_OBJECT_CLASS elm_atspi_app_object_class_get()
-EWAPI const Efl_Class *elm_atspi_app_object_class_get(void);
+EWAPI const Efl_Class *elm_atspi_app_object_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c
index 6ec5fd7729..868a72ccf2 100644
--- a/src/lib/elementary/elm_atspi_bridge.c
+++ b/src/lib/elementary/elm_atspi_bridge.c
@@ -57,6 +57,10 @@
if (!(obj) || !efl_isa(obj, class)) \
return _dbus_invalid_ref_error_new(msg);
+#define ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg) \
+ if (!obj) \
+ return _dbus_invalid_ref_error_new(msg);
+
typedef struct Key_Event_Info {
Ecore_Event_Key event;
int type;
@@ -118,6 +122,7 @@ static int _init_count = 0;
static void _state_changed_signal_send(void *data, const Efl_Event *event);
static void _bounds_changed_signal_send(void *data, const Efl_Event *event);
static void _property_changed_signal_send(void *data, const Efl_Event *event);
+static void _value_property_changed_signal_send(void *data, const Efl_Event *event);
static void _children_changed_signal_send(void *data, const Efl_Event *event);
static void _window_signal_send(void *data, const Efl_Event *event);
static void _visible_data_changed_signal_send(void *data, const Efl_Event *event);
@@ -168,7 +173,8 @@ static const Elm_Atspi_Bridge_Event_Handler event_handlers[] = {
{ EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_CARET_MOVED, _text_caret_moved_send },
{ EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_INSERTED, _text_text_inserted_send },
{ EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_REMOVED, _text_text_removed_send },
- { EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_SELECTION_CHANGED, _text_selection_changed_send }
+ { EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_SELECTION_CHANGED, _text_selection_changed_send },
+ { EFL_UI_RANGE_EVENT_CHANGED, _value_property_changed_signal_send }
};
enum _Atspi_Object_Child_Event_Type
@@ -1297,25 +1303,76 @@ _text_string_at_offset_get(const Eldbus_Service_Interface *iface, const Eldbus_M
const char *obj_path = eldbus_message_path_get(msg);
char *str;
Efl_Access_Text_Granularity gran;
- int start, end;
+ int start = 0, end = 0;
Eldbus_Message *ret;
Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "iu", &start, &gran))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset and granularity expected.");
- ret = eldbus_message_method_return_new(msg);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Efl_Text_Cursor_Object *sel1 = efl_ui_textbox_cursor_create(obj);
+ Efl_Text_Cursor_Object *sel2 = efl_ui_textbox_cursor_create(obj);
+ efl_text_cursor_object_position_set(sel1, start);
+ efl_text_cursor_object_position_set(sel2, start);
+
+ switch(gran)
+ {
+ case EFL_ACCESS_TEXT_GRANULARITY_CHAR:
+ efl_text_cursor_object_move(sel2, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT);
+ break;
+
+ case EFL_ACCESS_TEXT_GRANULARITY_WORD:
+ efl_text_cursor_object_move(sel1, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
+ efl_text_cursor_object_move(sel2, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
+ break;
+
+ case EFL_ACCESS_TEXT_GRANULARITY_LINE:
+ efl_text_cursor_object_move(sel1, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
+ efl_text_cursor_object_move(sel2, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
+ break;
+
+ case EFL_ACCESS_TEXT_GRANULARITY_PARAGRAPH:
+ efl_text_cursor_object_move(sel1, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_START);
+ efl_text_cursor_object_move(sel2, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END);
+ break;
+
+ case EFL_ACCESS_TEXT_GRANULARITY_SENTENCE: /* this one is not supported by efl */
+ default:
+ efl_del(sel1);
+ efl_del(sel2);
+ return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Granularity not suported.");
+ }
+
+ str = efl_text_cursor_object_range_text_get(sel1, sel2);
+ start = efl_text_cursor_object_position_get(sel1);
+ end = efl_text_cursor_object_position_get(sel2);
+
+ efl_del(sel1);
+ efl_del(sel2);
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ efl_access_text_string_get(obj, gran, &start, &end, &str);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
- str = efl_access_text_string_get(obj, gran, &start, &end);
str = str ? str : strdup("");
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_GOTO(ret, cleanup);
+
eldbus_message_arguments_append(ret, "sii", str, start, end);
- free(str);
+cleanup:
+ free(str);
return ret;
}
@@ -1328,20 +1385,39 @@ _text_text_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
Eo *obj = _bridge_object_from_path(bridge, obj_path);
int start, end;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "ii", &start, &end))
- return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset and granularity expected.");
+ return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Start and end offset expected.");
- Eldbus_Message *ret = eldbus_message_method_return_new(msg);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Efl_Text_Cursor_Object *sel1 = efl_ui_textbox_cursor_create(obj);
+ Efl_Text_Cursor_Object *sel2 = efl_ui_textbox_cursor_create(obj);
+ efl_text_cursor_object_position_set(sel1, start);
+ efl_text_cursor_object_position_set(sel2, end);
+ str = efl_text_cursor_object_range_text_get(sel1, sel2);
+ efl_del(sel1);
+ efl_del(sel2);
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ str = efl_access_text_get(obj, start, end);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
- str = efl_access_text_get(obj, start, end);
str = str ? str : strdup("");
+ Eldbus_Message *ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_GOTO(ret, cleanup);
+
eldbus_message_arguments_append(ret, "s", str);
- free(str);
+cleanup:
+ free(str);
return ret;
}
@@ -1355,16 +1431,29 @@ _text_caret_offset_set(const Eldbus_Service_Interface *iface, const Eldbus_Messa
Eldbus_Message *ret;
Eina_Bool res;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "i", &offset))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset expected.");
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Efl_Text_Cursor_Object *cur = efl_text_interactive_main_cursor_get(obj);
+ efl_text_cursor_object_position_set(cur, offset);
+ res = EINA_TRUE;
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_caret_offset_set(obj, offset);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+
ret = eldbus_message_method_return_new(msg);
EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
- res = efl_access_text_caret_offset_set(obj, offset);
-
eldbus_message_arguments_append(ret, "b", res);
return ret;
@@ -1380,17 +1469,49 @@ _text_character_at_offset_get(const Eldbus_Service_Interface *iface, const Eldbu
Eldbus_Message *ret;
Eina_Unicode res;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "i", &offset))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset expected.");
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Efl_Text_Cursor_Object *cur = efl_ui_textbox_cursor_create(obj);
+ efl_text_cursor_object_position_set(cur, offset);
+ res = efl_text_cursor_object_content_get(cur);
+ efl_del(cur);
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_character_get(obj, offset);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+
ret = eldbus_message_method_return_new(msg);
EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
+ eldbus_message_arguments_append(ret, "i", res);
- res = efl_access_text_character_get(obj, offset);
+ return ret;
+}
- eldbus_message_arguments_append(ret, "i", res);
+static Efl_Access_Text_Attribute*
+_text_attribute_value_get_text_attribute(Efl_Text_Attribute_Handle *annotation)
+{
+ Efl_Access_Text_Attribute *ret;
+ const char *txt;
+
+ txt = efl_text_formatter_attribute_get(annotation);
+ if (!txt) return NULL;
+
+ ret = calloc(1, sizeof(Efl_Access_Text_Attribute));
+ if (!ret) return NULL;
+
+ ret->value = eina_stringshare_add(txt);
+ int size = strlen(txt);
+ ret->name = eina_stringshare_add_length(txt, size);
return ret;
}
@@ -1402,22 +1523,63 @@ _text_attribute_value_get(const Eldbus_Service_Interface *iface, const Eldbus_Me
char *value = NULL;
Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- int start, end;
+ int start = 0, end = 0;
Eldbus_Message *ret;
- Eina_Bool res;
+ Eina_Bool res = EINA_FALSE;
+ Eina_Iterator *annotations;
+ Efl_Access_Text_Attribute *attr;
+ Efl_Text_Attribute_Handle *an;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "is", &start, &name))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset and attribute name expected.");
- ret = eldbus_message_method_return_new(msg);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Efl_Text_Cursor_Object *sel1 = efl_ui_textbox_cursor_create(obj);
+ Efl_Text_Cursor_Object *sel2 = efl_ui_textbox_cursor_create(obj);
+ end = start+1;
+ efl_text_cursor_object_position_set(sel1, start);
+ efl_text_cursor_object_position_set(sel2, end);
+ annotations = efl_text_formatter_range_attributes_get(sel1, sel2);
+
+ if (annotations)
+ {
+ EINA_ITERATOR_FOREACH(annotations, an)
+ {
+ attr = _text_attribute_value_get_text_attribute(an);
+ if (!attr) continue;
+ if (!strcmp(attr->name, name))
+ {
+ value = attr->value ? eina_strdup(attr->value) : NULL;
+ res = EINA_TRUE;
+ }
+ elm_atspi_text_text_attribute_free(attr);
+ if (res)
+ break;
+ }
+ eina_iterator_free(annotations);
+ }
+
+ efl_del(sel1);
+ efl_del(sel2);
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_attribute_get(obj, name, &start, &end, &value);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
- res = efl_access_text_attribute_get(obj, name, &start, &end, &value);
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_GOTO(ret, cleanup);
eldbus_message_arguments_append(ret, "siib", value ? value : "", start, end, res);
- if (value) free(value);
+cleanup:
+ free(value);
return ret;
}
@@ -1427,13 +1589,12 @@ _text_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus_Message
const char *obj_path = eldbus_message_path_get(msg);
Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- int start, end;
+ int start = 0, end = 0;
Eldbus_Message *ret;
Eldbus_Message_Iter *iter, *iter_array;
- Eina_List *attrs;
Efl_Access_Text_Attribute *attr;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "i", &start))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset expected.");
@@ -1445,13 +1606,48 @@ _text_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus_Message
iter_array = eldbus_message_iter_container_new(iter, 'a', "{ss}");
EINA_SAFETY_ON_NULL_GOTO(iter_array, fail);
- attrs = efl_access_text_attributes_get(obj, &start, &end);
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Eina_Iterator *annotations;
+ Efl_Text_Attribute_Handle *an;
+ Efl_Text_Cursor_Object *sel1 = efl_ui_textbox_cursor_create(obj);
+ Efl_Text_Cursor_Object *sel2 = efl_ui_textbox_cursor_create(obj);
- EINA_LIST_FREE(attrs, attr)
- {
- eldbus_message_iter_arguments_append(iter_array, "ss", attr->name, attr->value);
- elm_atspi_text_text_attribute_free(attr);
- }
+ end = start+1;
+ efl_text_cursor_object_position_set(sel1, start);
+ efl_text_cursor_object_position_set(sel2, end);
+ annotations = efl_text_formatter_range_attributes_get(sel1, sel2);
+
+ efl_del(sel1);
+ efl_del(sel2);
+
+ if (annotations)
+ {
+ EINA_ITERATOR_FOREACH(annotations, an)
+ {
+ attr = _text_attribute_value_get_text_attribute(an);
+ if (!attr) continue;
+ eldbus_message_iter_arguments_append(iter_array, "ss", attr->name, attr->value);
+ elm_atspi_text_text_attribute_free(attr);
+ }
+ eina_iterator_free(annotations);
+ }
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ Eina_List *attrs = NULL;
+ efl_access_text_attributes_get(obj, &start, &end, &attrs);
+ EINA_LIST_FREE(attrs, attr)
+ {
+ eldbus_message_iter_arguments_append(iter_array, "ss", attr->name, attr->value);
+ elm_atspi_text_text_attribute_free(attr);
+ }
+ }
+ else
+ {
+ eldbus_message_iter_container_close(iter, iter_array);
+ goto fail;
+ }
eldbus_message_iter_container_close(iter, iter_array);
eldbus_message_iter_arguments_append(iter, "ii", start, end);
@@ -1471,10 +1667,10 @@ _text_default_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus
Eo *obj = _bridge_object_from_path(bridge, obj_path);
Eldbus_Message *ret;
Eldbus_Message_Iter *iter, *iter_array;
- Eina_List *attrs;
+ Eina_List *attrs = NULL;
Efl_Access_Text_Attribute *attr;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
ret = eldbus_message_method_return_new(msg);
EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
@@ -1483,7 +1679,38 @@ _text_default_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus
iter_array = eldbus_message_iter_container_new(iter, 'a', "{ss}");
EINA_SAFETY_ON_NULL_GOTO(iter_array, fail);
- attrs = efl_access_text_default_attributes_get(obj);
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Eina_Iterator *annotations;
+ Efl_Text_Attribute_Handle *an;
+ Efl_Text_Cursor_Object *sel1 = efl_ui_textbox_cursor_create(obj);
+ Efl_Text_Cursor_Object *sel2 = efl_ui_textbox_cursor_create(obj);
+
+ efl_text_cursor_object_move(sel1, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ efl_text_cursor_object_move(sel2, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ annotations = efl_text_formatter_range_attributes_get(sel1, sel2);
+
+ EINA_ITERATOR_FOREACH(annotations, an)
+ {
+ Efl_Access_Text_Attribute *attr = _text_attribute_value_get_text_attribute(an);
+ if (!attr) continue;
+ attrs = eina_list_append(attrs, attr);
+ }
+ eina_iterator_free(annotations);
+
+ efl_del(sel1);
+ efl_del(sel2);
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ attrs = efl_access_text_default_attributes_get(obj);
+ }
+ else
+ {
+ eldbus_message_unref(ret);
+ eldbus_message_iter_container_close(iter, iter_array);
+ return _dbus_invalid_ref_error_new(msg);
+ }
EINA_LIST_FREE(attrs, attr)
{
@@ -1500,6 +1727,59 @@ fail:
return NULL;
}
+static Eina_Rect
+_text_interactive_get_pos(Eo *obj, Eina_Rect rect, Eina_Bool screen_coords)
+{
+ Eina_Position2D scroller_shift = efl_ui_scrollable_content_pos_get(obj);
+ Eina_Rect viewport = efl_ui_scrollable_viewport_geometry_get(obj);
+ Eina_Rect r_obj = efl_access_component_extents_get(obj, EINA_TRUE);
+
+ /* In widget coords */
+ rect.x -= scroller_shift.x;
+ rect.y -= scroller_shift.y;
+ rect.x += viewport.x;
+ rect.y += viewport.y;
+
+
+ /* Is it still visible? */
+ if (rect.x < viewport.x)
+ {
+ rect.w += rect.x - viewport.x;
+ rect.x = viewport.x;
+ }
+
+ if (rect.y < viewport.y)
+ {
+ rect.h += rect.y - viewport.y;
+ rect.y = viewport.y;
+ }
+
+ rect.w = viewport.w < (rect.x + rect.w) ? viewport.w - rect.x : rect.w;
+ rect.h = viewport.h < (rect.y + rect.h) ? viewport.h - rect.y : rect.h;
+
+ /* If not visible set to 0 both sides */
+ if (rect.w <= 0 || rect.h <= 0)
+ {
+ rect.w = 0;
+ rect.h = 0;
+ }
+
+ /* Transform to screen coords */
+ rect.x += r_obj.x;
+ rect.y += r_obj.y;
+
+ /* Transform to window coords */
+ if (!screen_coords)
+ {
+ Eo *win = elm_object_top_widget_get(obj);
+ Eina_Rect r_win = efl_access_component_extents_get(win, EINA_TRUE);
+ rect.x -= r_win.x;
+ rect.y -= r_win.y;
+ }
+
+ return rect;
+}
+
static Eldbus_Message *
_text_character_extents_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
{
@@ -1512,23 +1792,36 @@ _text_character_extents_get(const Eldbus_Service_Interface *iface, const Eldbus_
Eina_Bool screen_coords, res;
Eldbus_Message *ret;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "iu", &offset, &type))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset and coordinates type expected.");
- ret = eldbus_message_method_return_new(msg);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
-
screen_coords = type == ATSPI_COORD_TYPE_SCREEN ? EINA_TRUE : EINA_FALSE;
- res = efl_access_text_character_extents_get(obj, offset, screen_coords, &rect);
-
- if (!res)
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
{
- eldbus_message_unref(ret);
- return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.Failed", "Unable to get character extents.");
+ Efl_Text_Cursor_Object *cur = efl_ui_textbox_cursor_create(obj);
+ efl_text_cursor_object_position_set(cur, offset);
+ rect = efl_text_cursor_object_cursor_geometry_get(cur, EFL_TEXT_CURSOR_TYPE_UNDER);
+ efl_del(cur);
+ rect = _text_interactive_get_pos(obj, rect, screen_coords);
+ res = rect.w != 0 ? EINA_TRUE : EINA_FALSE;
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_character_extents_get(obj, offset, screen_coords, &rect);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
}
+
+ if (!res)
+ return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.Failed", "Unable to get character extents.");
+
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
eldbus_message_arguments_append(ret, "iiii", rect.x, rect.y, rect.w, rect.h);
return ret;
@@ -1545,19 +1838,45 @@ _text_offset_at_point_get(const Eldbus_Service_Interface *iface, const Eldbus_Me
Eina_Bool screen_coords;
Eldbus_Message *ret;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "iiu", &x, &y, &type))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Offset and coordinates type expected.");
- ret = eldbus_message_method_return_new(msg);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
-
- x = y = -1;
screen_coords = type == ATSPI_COORD_TYPE_SCREEN ? EINA_TRUE : EINA_FALSE;
- offset = efl_access_text_offset_at_point_get(obj, screen_coords, x, y);
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ if (screen_coords)
+ {
+ Eina_Rect rect = efl_access_component_extents_get(obj, screen_coords);
+ x -= rect.x;
+ y -= rect.y;
+ }
+ else
+ {
+ Eo *win = elm_object_top_widget_get(obj);
+ Eina_Rect r_win = efl_access_component_extents_get(win, EINA_TRUE);
+ Eina_Rect r_obj = efl_access_component_extents_get(obj, EINA_TRUE);
+ x -= r_obj.x - r_win.x;
+ y -= r_obj.y - r_win.y;
+ }
+ Efl_Text_Cursor_Object *cur = efl_ui_textbox_cursor_create(obj);
+ efl_text_cursor_object_char_coord_set(cur, EINA_POSITION2D(x,y));
+ offset = efl_text_cursor_object_position_get(cur);
+ efl_del(cur);
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ offset = efl_access_text_offset_at_point_get(obj, screen_coords, x, y);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
eldbus_message_arguments_append(ret, "i", offset);
return ret;
@@ -1590,19 +1909,35 @@ _text_selection_get(const Eldbus_Service_Interface *iface, const Eldbus_Message
const char *obj_path = eldbus_message_path_get(msg);
Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- int sel_num, start, end;
+ int sel_num, start = 0, end = 0;
Eldbus_Message *ret;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "i", &sel_num))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Selection number expected.");
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ if (sel_num == 0)
+ {
+ Efl_Text_Cursor_Object *sel1, *sel2;
+ efl_text_interactive_selection_cursors_get(obj, &sel1, &sel2);
+ start = efl_text_cursor_object_position_get(sel1);
+ end = efl_text_cursor_object_position_get(sel2);
+ }
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ efl_access_text_access_selection_get(obj, sel_num, &start, &end);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+
ret = eldbus_message_method_return_new(msg);
EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
-
- efl_access_text_access_selection_get(obj, sel_num, &start, &end);
-
eldbus_message_arguments_append(ret, "ii", start, end);
return ret;
@@ -1618,16 +1953,30 @@ _text_selection_add(const Eldbus_Service_Interface *iface, const Eldbus_Message
Eina_Bool res;
Eldbus_Message *ret;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "ii", &start, &end))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Start and end text offset expected.");
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Efl_Text_Cursor_Object *sel1, *sel2;
+ efl_text_interactive_selection_cursors_get(obj, &sel1, &sel2);
+ efl_text_cursor_object_position_set(sel1, start);
+ efl_text_cursor_object_position_set(sel2, end);
+ res = EINA_TRUE;
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_selection_add(obj, start, end);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+
ret = eldbus_message_method_return_new(msg);
EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
-
- res = efl_access_text_selection_add(obj, start, end);
-
eldbus_message_arguments_append(ret, "b", res);
return ret;
@@ -1640,19 +1989,35 @@ _text_selection_remove(const Eldbus_Service_Interface *iface, const Eldbus_Messa
Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
int sel_num;
- Eina_Bool res;
+ Eina_Bool res = EINA_FALSE;
Eldbus_Message *ret;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "i", &sel_num))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Selection number expected.");
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ if (sel_num == 0)
+ {
+ Efl_Text_Cursor_Object *sel1, *sel2;
+ efl_text_interactive_selection_cursors_get(obj, &sel1, &sel2);
+ efl_text_cursor_object_range_delete(sel1, sel2);
+ res = EINA_TRUE;
+ }
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_selection_remove(obj, sel_num);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+
ret = eldbus_message_method_return_new(msg);
EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
-
- res = efl_access_text_selection_remove(obj, sel_num);
-
eldbus_message_arguments_append(ret, "b", res);
return ret;
@@ -1665,19 +2030,36 @@ _text_selection_set(const Eldbus_Service_Interface *iface, const Eldbus_Message
Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
int sel_num, start, end;
- Eina_Bool res;
+ Eina_Bool res = EINA_FALSE;
Eldbus_Message *ret;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "iii", &sel_num, &start, &end))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Selection number expected.");
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ if (sel_num == 0)
+ {
+ Efl_Text_Cursor_Object *sel1, *sel2;
+ efl_text_interactive_selection_cursors_get(obj, &sel1, &sel2);
+ efl_text_cursor_object_position_set(sel1, start);
+ efl_text_cursor_object_position_set(sel2, end);
+ res = EINA_TRUE;
+ }
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_access_selection_set(obj, sel_num, start, end);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+
ret = eldbus_message_method_return_new(msg);
EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
-
- res = efl_access_text_access_selection_set(obj, sel_num, start, end);
-
eldbus_message_arguments_append(ret, "b", res);
return ret;
@@ -1695,22 +2077,63 @@ _text_range_extents_get(const Eldbus_Service_Interface *iface, const Eldbus_Mess
AtspiCoordType type;
Eldbus_Message *ret;
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, msg);
+ ELM_ATSPI_ON_NULL_RETURN_DBUS_ERROR(obj, msg);
if (!eldbus_message_arguments_get(msg, "iiu", &start, &end, &type))
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Selection number expected.");
- ret = eldbus_message_method_return_new(msg);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
-
screen_coords = type == ATSPI_COORD_TYPE_SCREEN ? EINA_TRUE : EINA_FALSE;
- res = efl_access_text_range_extents_get(obj, screen_coords, start, end, &rect);
+
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
+ {
+ Eina_Rectangle *r;
+ Efl_Text_Cursor_Object *sel1 = efl_ui_textbox_cursor_create(obj);
+ Efl_Text_Cursor_Object *sel2 = efl_ui_textbox_cursor_create(obj);
+ efl_text_cursor_object_position_set(sel1, start);
+ efl_text_cursor_object_position_set(sel2, end);
+ Eina_Iterator *range = efl_text_cursor_object_range_precise_geometry_get(sel1, sel2);
+
+ /* This rect represent coordinates x1, y1, x2, y2 (not x,y,w,h).
+ * In this way we bypass corner cases
+ * (like range is empty or first rectangle is empty). */
+ rect = EINA_RECT(1000000, 1000000, 0, 0);
+
+ EINA_ITERATOR_FOREACH(range, r)
+ {
+ rect.x = r->x < rect.x ? r->x : rect.x;
+ rect.y = r->y < rect.y ? r->y : rect.y;
+ rect.w = r->x+r->w > rect.w ? r->x+r->w : rect.w;
+ rect.h = r->y+r->h > rect.h ? r->y+r->h : rect.h;
+ }
+ eina_iterator_free(range);
+
+ efl_del(sel1);
+ efl_del(sel2);
+
+ /* Let's change coordinates to x,y,w,h */
+ rect.w -= rect.x;
+ rect.h -= rect.y;
+
+ rect = _text_interactive_get_pos(obj, rect, screen_coords);
+
+ res = rect.w != 0 ? EINA_TRUE : EINA_FALSE;
+ }
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
+ {
+ res = efl_access_text_range_extents_get(obj, screen_coords, start, end, &rect);
+ }
+ else
+ {
+ return _dbus_invalid_ref_error_new(msg);
+ }
+
if (!res)
{
- eldbus_message_unref(ret);
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.Failed", "Can't get range extents.");
}
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
eldbus_message_arguments_append(ret, "iiii", rect.x, rect.y, rect.w, rect.h);
return ret;
@@ -1783,7 +2206,7 @@ _text_run_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus_Mes
const char *obj_path = eldbus_message_path_get(msg);
Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- int start, end;
+ int start = 0, end = 0;
Eldbus_Message *ret;
Eldbus_Message_Iter *iter, *iter_array;
Eina_List *attrs, *defaults;
@@ -1802,7 +2225,7 @@ _text_run_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus_Mes
iter_array = eldbus_message_iter_container_new(iter, 'a', "{ss}");
EINA_SAFETY_ON_NULL_GOTO(iter_array, fail);
- attrs = efl_access_text_attributes_get(obj, &start, &end);
+ efl_access_text_attributes_get(obj, &start, &end, &attrs);
if (incl_def)
{
@@ -2162,7 +2585,12 @@ _value_properties_set(const Eldbus_Service_Interface *interface, const char *pro
Eo *bridge = eldbus_service_object_data_get(interface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_VALUE_INTERFACE, request_msg);
+ if (elm_widget_is_legacy(obj)) {
+ ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_VALUE_INTERFACE, request_msg);
+ }
+ else if(efl_isa(obj, EFL_UI_RANGE_DISPLAY_INTERFACE)) {
+ ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_UI_RANGE_DISPLAY_INTERFACE, request_msg);
+ }
if (!eldbus_message_iter_arguments_get(iter, "d", &value))
{
@@ -2171,7 +2599,13 @@ _value_properties_set(const Eldbus_Service_Interface *interface, const char *pro
if (!strcmp(property, "CurrentValue"))
{
- ret = efl_access_value_and_text_set(obj, value, NULL);
+ if (elm_widget_is_legacy(obj))
+ ret = efl_access_value_and_text_set(obj, value, NULL);
+ else if(efl_isa(obj, EFL_UI_RANGE_DISPLAY_INTERFACE)) {
+ efl_ui_range_value_set(obj, value);
+ ret = EINA_DBL_EQ(efl_ui_range_value_get(obj), value);
+ }
+ else ret = EINA_FALSE;
Eldbus_Message *answer = eldbus_message_method_return_new(request_msg);
eldbus_message_arguments_append(answer, "b", ret);
return answer;
@@ -2190,29 +2624,32 @@ _value_properties_get(const Eldbus_Service_Interface *interface, const char *pro
Eo *bridge = eldbus_service_object_data_get(interface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- ELM_ATSPI_PROPERTY_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_VALUE_INTERFACE, request_msg, error);
+ ELM_ATSPI_PROPERTY_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_UI_RANGE_DISPLAY_INTERFACE, request_msg, error);
if (!strcmp(property, "CurrentValue"))
{
- efl_access_value_and_text_get(obj, &value, NULL);
+ value = efl_ui_range_value_get(obj);
eldbus_message_iter_basic_append(iter, 'd', value);
return EINA_TRUE;
}
if (!strcmp(property, "MinimumValue"))
{
- efl_access_value_range_get(obj, &value, NULL, NULL);
+ efl_ui_range_limits_get(obj, &value, NULL);
eldbus_message_iter_basic_append(iter, 'd', value);
return EINA_TRUE;
}
if (!strcmp(property, "MaximumValue"))
{
- efl_access_value_range_get(obj, NULL, &value, NULL);
+ efl_ui_range_limits_get(obj, NULL, &value);
eldbus_message_iter_basic_append(iter, 'd', value);
return EINA_TRUE;
}
if (!strcmp(property, "MinimumIncrement"))
{
- value = efl_access_value_increment_get(obj);
+ if(efl_isa(obj, EFL_UI_RANGE_INTERACTIVE_INTERFACE)) {
+ value = efl_ui_range_step_get(obj);
+ }
+ else { value = 0; }
eldbus_message_iter_basic_append(iter, 'd', value);
return EINA_TRUE;
}
@@ -2256,23 +2693,55 @@ _text_properties_get(const Eldbus_Service_Interface *interface, const char *prop
const char *obj_path = eldbus_message_path_get(request_msg);
Eo *bridge = eldbus_service_object_data_get(interface, ELM_ATSPI_BRIDGE_CLASS_NAME);
Eo *obj = _bridge_object_from_path(bridge, obj_path);
- int val;
+ int result;
+ Eina_Bool checkCarretOffset = EINA_FALSE;
+ Eina_Bool checkCharacterCount = EINA_FALSE;
- ELM_ATSPI_PROPERTY_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, EFL_ACCESS_TEXT_INTERFACE, request_msg, error);
+ if (!obj)
+ {
+ *(error) = _dbus_invalid_ref_error_new(request_msg);
+ return EINA_FALSE;
+ }
if (!strcmp(property, "CharacterCount"))
+ checkCharacterCount = EINA_TRUE;
+ else if (!strcmp(property, "CaretOffset"))
+ checkCarretOffset = EINA_TRUE;
+ else
+ return EINA_FALSE;
+
+ if (efl_isa(obj, EFL_TEXT_INTERACTIVE_INTERFACE))
{
- val = efl_access_text_character_count_get(obj);
- eldbus_message_iter_basic_append(iter, 'i', val);
- return EINA_TRUE;
+ if (checkCharacterCount)
+ {
+ Efl_Text_Cursor_Object *cur = efl_ui_textbox_cursor_create(obj);
+ efl_text_cursor_object_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ result = efl_text_cursor_object_position_get(cur);
+ efl_del(cur);
+ }
+
+ if (checkCarretOffset)
+ {
+ Efl_Text_Cursor_Object *main_cur = efl_text_interactive_main_cursor_get(obj);
+ result = efl_text_cursor_object_position_get(main_cur);
+ }
}
- if (!strcmp(property, "CaretOffset"))
+ else if (efl_isa(obj, EFL_ACCESS_TEXT_INTERFACE))
{
- val = efl_access_text_caret_offset_get(obj);
- eldbus_message_iter_basic_append(iter, 'i', val);
- return EINA_TRUE;
+ if (checkCharacterCount)
+ result = efl_access_text_character_count_get(obj);
+
+ if (checkCarretOffset)
+ result = efl_access_text_caret_offset_get(obj);
}
- return EINA_FALSE;
+ else
+ {
+ *(error) = _dbus_invalid_ref_error_new(request_msg);
+ return EINA_FALSE;
+ }
+
+ eldbus_message_iter_basic_append(iter, 'i', result);
+ return EINA_TRUE;
}
static Eldbus_Message*
@@ -2508,7 +2977,10 @@ _collection_iter_match_rule_get(Eldbus_Message_Iter *iter, struct collection_mat
else if (!strcmp(ifc_name, "image"))
class = EFL_ACCESS_SELECTION_INTERFACE;
else if (!strcmp(ifc_name, "value"))
- class = EFL_ACCESS_VALUE_INTERFACE;
+ {
+ class = EFL_ACCESS_VALUE_INTERFACE;
+ rule->ifaces = eina_list_append(rule->ifaces, EFL_UI_RANGE_DISPLAY_INTERFACE); //alternative interface
+ }
if (class)
rule->ifaces = eina_list_append(rule->ifaces, class);
@@ -3185,6 +3657,8 @@ _iter_interfaces_append(Eldbus_Message_Iter *iter, const Eo *obj)
eldbus_message_iter_basic_append(iter_array, 's', ATSPI_DBUS_INTERFACE_TEXT);
if (efl_isa(obj, EFL_ACCESS_VALUE_INTERFACE))
eldbus_message_iter_basic_append(iter_array, 's', ATSPI_DBUS_INTERFACE_VALUE);
+ if (efl_isa(obj, EFL_UI_RANGE_DISPLAY_INTERFACE))
+ eldbus_message_iter_basic_append(iter_array, 's', ATSPI_DBUS_INTERFACE_VALUE);
eldbus_message_iter_container_close(iter, iter_array);
}
@@ -3748,7 +4222,7 @@ _set_broadcast_flag(const char *event, Eo *bridge)
if (!strcmp(tokens[0], "Object"))
{
- if (!tokens[1] || *tokens[1] == '\0') return; // do not handle "Object:*"
+ if (!tokens[1] || *tokens[1] == '\0') goto end; // do not handle "Object:*"
else if (!strcmp(tokens[1], "StateChanged"))
{
if (!tokens[2] || *tokens[2] == '\0')
@@ -3823,6 +4297,7 @@ _set_broadcast_flag(const char *event, Eo *bridge)
STATE_TYPE_SET(pd->window_signal_broadcast_mask, ATSPI_WINDOW_EVENT_RESTORE);
}
+end:
free(tokens[0]);
free(tokens);
}
@@ -3970,6 +4445,15 @@ _property_changed_signal_send(void *data, const Efl_Event *event)
}
static void
+_value_property_changed_signal_send(void *data, const Efl_Event *event)
+{
+ ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(data, pd);
+
+ _bridge_signal_send(data, event->object, ATSPI_DBUS_INTERFACE_EVENT_OBJECT,
+ &_event_obj_signals[ATSPI_OBJECT_EVENT_PROPERTY_CHANGED], "accessible-value", 0, 0, NULL);
+}
+
+static void
_visible_data_changed_signal_send(void *data, const Efl_Event *event)
{
ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(data, pd);
diff --git a/src/lib/elementary/elm_atspi_bridge_eo.h b/src/lib/elementary/elm_atspi_bridge_eo.h
index 180544d25c..76cd68c690 100644
--- a/src/lib/elementary/elm_atspi_bridge_eo.h
+++ b/src/lib/elementary/elm_atspi_bridge_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Atspi_Bridge;
*/
#define ELM_ATSPI_BRIDGE_CLASS elm_atspi_bridge_class_get()
-EWAPI const Efl_Class *elm_atspi_bridge_class_get(void);
+EWAPI const Efl_Class *elm_atspi_bridge_class_get(void) EINA_CONST;
/**
* @brief Indicate if connection with AT-SPI2 bus has been established.
diff --git a/src/lib/elementary/elm_bg.h b/src/lib/elementary/elm_bg.h
index 030f83e53a..f6e1c0669b 100644
--- a/src/lib/elementary/elm_bg.h
+++ b/src/lib/elementary/elm_bg.h
@@ -17,7 +17,7 @@
* properties useful to a background, like setting it to tiled,
* centered, scaled or stretched.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for background objects.
*
* Default content parts of the bg widget that you can use for are:
diff --git a/src/lib/elementary/elm_bg_legacy.h b/src/lib/elementary/elm_bg_legacy.h
index 54f6b6aaf1..abbd0b3d2a 100644
--- a/src/lib/elementary/elm_bg_legacy.h
+++ b/src/lib/elementary/elm_bg_legacy.h
@@ -133,7 +133,7 @@ EAPI void elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option);
/**
* @brief Gets the mode of display of a given background widget's image
*
- * @return The background option Elm.Bg.Option Default is #Elm_Bg_SCALE.
+ * @return The background option Elm.Bg.Option Default is #ELM_BG_OPTION_SCALE.
*
* @see elm_bg_option_set()
*
diff --git a/src/lib/elementary/elm_box.c b/src/lib/elementary/elm_box.c
index 73a73092c1..ff0c32a3c5 100644
--- a/src/lib/elementary/elm_box.c
+++ b/src/lib/elementary/elm_box.c
@@ -337,9 +337,6 @@ _elm_box_efl_canvas_group_group_add(Eo *obj, Elm_Box_Data *_pd EINA_UNUSED)
EOLIAN static void
_elm_box_efl_canvas_group_group_del(Eo *obj, Elm_Box_Data *sd)
{
- Eina_List *l;
- Evas_Object *child;
-
sd->delete_me = EINA_TRUE;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
@@ -349,15 +346,15 @@ _elm_box_efl_canvas_group_group_del(Eo *obj, Elm_Box_Data *sd)
/* let's make our box object the *last* to be processed, since it
* may (smart) parent other sub objects here */
- EINA_LIST_FOREACH (wd->subobjs, l, child)
- {
- if (child == wd->resize_obj)
- {
- wd->subobjs =
- eina_list_demote_list(wd->subobjs, l);
- break;
- }
- }
+ {
+ unsigned int resize_id = 0;
+ if (eina_array_find(wd->children, wd->resize_obj, &resize_id))
+ {
+ //exchange with last
+ eina_array_data_set(wd->children, resize_id, eina_array_data_get(wd->children, eina_array_count(wd->children) - 1));
+ eina_array_data_set(wd->children, eina_array_count(wd->children) - 1, wd->resize_obj);
+ }
+ }
efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
diff --git a/src/lib/elementary/elm_box.h b/src/lib/elementary/elm_box.h
index c15eb01d21..24ab2e8017 100644
--- a/src/lib/elementary/elm_box.h
+++ b/src/lib/elementary/elm_box.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Box Box
+ * @defgroup Elm_Box_Group Box
* @ingroup Elementary
*
* @image html box_inheritance_tree.png
diff --git a/src/lib/elementary/elm_box_common.h b/src/lib/elementary/elm_box_common.h
index f16b72ce98..7eeb53b144 100644
--- a/src/lib/elementary/elm_box_common.h
+++ b/src/lib/elementary/elm_box_common.h
@@ -1,5 +1,5 @@
/**
- * @addtogroup Elm_Box
+ * @addtogroup Elm_Box_Group
*
* @{
*/
diff --git a/src/lib/elementary/elm_box_eo.h b/src/lib/elementary/elm_box_eo.h
index fb82524082..64c1174e35 100644
--- a/src/lib/elementary/elm_box_eo.h
+++ b/src/lib/elementary/elm_box_eo.h
@@ -15,11 +15,11 @@ typedef Eo Elm_Box;
#endif
/** Elementary box class
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
#define ELM_BOX_CLASS elm_box_class_get()
-EWAPI const Efl_Class *elm_box_class_get(void);
+EWAPI const Efl_Class *elm_box_class_get(void) EINA_CONST;
/**
* @brief Set the box to arrange its children homogeneously
@@ -32,7 +32,7 @@ EWAPI const Efl_Class *elm_box_class_get(void);
* @param[in] obj The object.
* @param[in] homogeneous The homogeneous flag
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_homogeneous_set(Eo *obj, Eina_Bool homogeneous);
@@ -44,7 +44,7 @@ EOAPI void elm_obj_box_homogeneous_set(Eo *obj, Eina_Bool homogeneous);
*
* @return The homogeneous flag
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI Eina_Bool elm_obj_box_homogeneous_get(const Eo *obj);
@@ -59,7 +59,7 @@ EOAPI Eina_Bool elm_obj_box_homogeneous_get(const Eo *obj);
* @param[in] horizontal The horizontal alignment of elements
* @param[in] vertical The vertical alignment of elements
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_align_set(Eo *obj, double horizontal, double vertical);
@@ -72,7 +72,7 @@ EOAPI void elm_obj_box_align_set(Eo *obj, double horizontal, double vertical);
* @param[out] horizontal The horizontal alignment of elements
* @param[out] vertical The vertical alignment of elements
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_align_get(const Eo *obj, double *horizontal, double *vertical);
@@ -88,7 +88,7 @@ EOAPI void elm_obj_box_align_get(const Eo *obj, double *horizontal, double *vert
* @param[in] obj The object.
* @param[in] horizontal The horizontal flag
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_horizontal_set(Eo *obj, Eina_Bool horizontal);
@@ -100,7 +100,7 @@ EOAPI void elm_obj_box_horizontal_set(Eo *obj, Eina_Bool horizontal);
*
* @return The horizontal flag
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI Eina_Bool elm_obj_box_horizontal_get(const Eo *obj);
@@ -116,7 +116,7 @@ EOAPI Eina_Bool elm_obj_box_horizontal_get(const Eo *obj);
* @param[in] horizontal The horizontal space between elements
* @param[in] vertical The vertical space between elements
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_padding_set(Eo *obj, int horizontal, int vertical);
@@ -129,7 +129,7 @@ EOAPI void elm_obj_box_padding_set(Eo *obj, int horizontal, int vertical);
* @param[out] horizontal The horizontal space between elements
* @param[out] vertical The vertical space between elements
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_padding_get(const Eo *obj, int *horizontal, int *vertical);
@@ -145,7 +145,7 @@ EOAPI void elm_obj_box_padding_get(const Eo *obj, int *horizontal, int *vertical
*
* @return List of children
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI Eina_List *elm_obj_box_children_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
@@ -164,7 +164,7 @@ EOAPI Eina_List *elm_obj_box_children_get(const Eo *obj) EINA_WARN_UNUSED_RESULT
* @param[in] obj The object.
* @param[in] subobj The object to add to the box
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_pack_end(Eo *obj, Efl_Canvas_Object *subobj);
@@ -180,7 +180,7 @@ EOAPI void elm_obj_box_pack_end(Eo *obj, Efl_Canvas_Object *subobj);
* See also @ref elm_obj_box_clear, @ref elm_obj_box_unpack.
* @param[in] obj The object.
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_unpack_all(Eo *obj);
@@ -195,7 +195,7 @@ EOAPI void elm_obj_box_unpack_all(Eo *obj);
* @param[in] obj The object.
* @param[in] subobj The object to unpack
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_unpack(Eo *obj, Efl_Canvas_Object *subobj);
@@ -215,7 +215,7 @@ EOAPI void elm_obj_box_unpack(Eo *obj, Efl_Canvas_Object *subobj);
* @param[in] subobj The object to add to the box
* @param[in] after The object after which to add it
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_pack_after(Eo *obj, Efl_Canvas_Object *subobj, Efl_Canvas_Object *after);
@@ -234,7 +234,7 @@ EOAPI void elm_obj_box_pack_after(Eo *obj, Efl_Canvas_Object *subobj, Efl_Canvas
* @param[in] obj The object.
* @param[in] subobj The object to add to the box
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_pack_start(Eo *obj, Efl_Canvas_Object *subobj);
@@ -247,7 +247,7 @@ EOAPI void elm_obj_box_pack_start(Eo *obj, Efl_Canvas_Object *subobj);
* position of a just added item you must force recalculate before doing so.
* @param[in] obj The object.
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_recalculate(Eo *obj);
@@ -267,7 +267,7 @@ EOAPI void elm_obj_box_recalculate(Eo *obj);
* @param[in] subobj The object to add to the box
* @param[in] before The object before which to add it
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_pack_before(Eo *obj, Efl_Canvas_Object *subobj, Efl_Canvas_Object *before);
@@ -280,7 +280,7 @@ EOAPI void elm_obj_box_pack_before(Eo *obj, Efl_Canvas_Object *subobj, Efl_Canva
* See also @ref elm_obj_box_unpack, @ref elm_obj_box_unpack_all.
* @param[in] obj The object.
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EOAPI void elm_obj_box_clear(Eo *obj);
@@ -289,7 +289,7 @@ EWAPI extern const Efl_Event_Description _ELM_BOX_EVENT_CHILD_ADDED;
/** Called when child was added
* @return Efl_Object *
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
#define ELM_BOX_EVENT_CHILD_ADDED (&(_ELM_BOX_EVENT_CHILD_ADDED))
@@ -298,7 +298,7 @@ EWAPI extern const Efl_Event_Description _ELM_BOX_EVENT_CHILD_REMOVED;
/** Called when child was removed
* @return Efl_Object *
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
#define ELM_BOX_EVENT_CHILD_REMOVED (&(_ELM_BOX_EVENT_CHILD_REMOVED))
diff --git a/src/lib/elementary/elm_box_legacy.h b/src/lib/elementary/elm_box_legacy.h
index 1afb296efd..ad8aaa91d0 100644
--- a/src/lib/elementary/elm_box_legacy.h
+++ b/src/lib/elementary/elm_box_legacy.h
@@ -6,7 +6,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Box
+ * @ingroup Elm_Box_Group
*/
EAPI Evas_Object *elm_box_add(Evas_Object *parent);
@@ -43,5 +43,7 @@ EAPI Evas_Object *elm_box_add(Evas_Object *parent);
* @param[in] cb The callback function used for layout
* @param[in] data Data that will be passed to layout function
* @param[in] free_data Function called to free @c data
+ *
+ * @ingroup Elm_Box_Group
*/
EAPI void elm_box_layout_set(Evas_Object *obj, Evas_Object_Box_Layout cb, const void *data, Ecore_Cb free_data);
diff --git a/src/lib/elementary/elm_bubble.h b/src/lib/elementary/elm_bubble.h
index 328540d9bb..522ee8a438 100644
--- a/src/lib/elementary/elm_bubble.h
+++ b/src/lib/elementary/elm_bubble.h
@@ -32,11 +32,11 @@
* @li "bottom_left"
* @li "bottom_right"
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for bubble objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "clicked" - This is called when a user has clicked the bubble.
* @li @c "focused" - When the bubble has received focus. (since 1.8)
* @li @c "unfocused" - When the bubble has lost focus. (since 1.8)
diff --git a/src/lib/elementary/elm_bubble_eo.h b/src/lib/elementary/elm_bubble_eo.h
index e94541d2c3..693bb98e60 100644
--- a/src/lib/elementary/elm_bubble_eo.h
+++ b/src/lib/elementary/elm_bubble_eo.h
@@ -40,7 +40,7 @@ typedef enum
*/
#define ELM_BUBBLE_CLASS elm_bubble_class_get()
-EWAPI const Efl_Class *elm_bubble_class_get(void);
+EWAPI const Efl_Class *elm_bubble_class_get(void) EINA_CONST;
/**
* @brief The corner of the bubble
diff --git a/src/lib/elementary/elm_calendar.c b/src/lib/elementary/elm_calendar.c
index e6de3373c6..c58fc1cc15 100644
--- a/src/lib/elementary/elm_calendar.c
+++ b/src/lib/elementary/elm_calendar.c
@@ -22,6 +22,8 @@
#define ELM_CALENDAR_BUTTON_RIGHT "elm,calendar,button,right"
#define ELM_CALENDAR_BUTTON_YEAR_LEFT "elm,calendar,button_year,left"
#define ELM_CALENDAR_BUTTON_YEAR_RIGHT "elm,calendar,button_year,right"
+#define ELM_CALENDAR_CH_WEEKEND "elm,calendar,ch_%d,weekend"
+#define ELM_CALENDAR_CH_WEEKDAY "elm,calendar,ch_%d,weekday"
#define ELM_CALENDAR_CH_TEXT_PART_STR "elm.ch_%d.text"
#define ELM_CALENDAR_CIT_TEXT_PART_STR "elm.cit_%d.text"
@@ -674,6 +676,7 @@ static void
_set_headers(Evas_Object *obj)
{
static char part[64];
+ static char emission[64];
int i;
struct tm *t;
time_t temp = 259200; // the first sunday since epoch
@@ -710,7 +713,15 @@ _set_headers(Evas_Object *obj)
for (i = 0; i < ELM_DAY_LAST; i++)
{
_part_name_snprintf(part, sizeof(part), obj, ELM_CALENDAR_CH_TEXT_PART_STR, i);
- elm_layout_text_set(obj, part, sd->weekdays[(i + sd->first_week_day) % ELM_DAY_LAST]);
+ int weekday_index = (i + sd->first_week_day) % ELM_DAY_LAST;
+ elm_layout_text_set(obj, part, sd->weekdays[weekday_index]);
+ // Signaling the theme about which days are weekdays and which weekend
+ if (weekday_index == ELM_DAY_SATURDAY || weekday_index == ELM_DAY_SUNDAY)
+ _part_name_snprintf(emission, sizeof(emission), obj, ELM_CALENDAR_CH_WEEKEND, i);
+ else
+ _part_name_snprintf(emission, sizeof(emission), obj, ELM_CALENDAR_CH_WEEKDAY, i);
+
+ elm_layout_signal_emit(obj, emission, "elm");
}
sd->filling = EINA_FALSE;
@@ -960,8 +971,11 @@ _spin_value(void *data)
if (_update_data(data, sd->month_btn_clicked, sd->spin_speed))
evas_object_smart_changed(data);
- sd->interval = sd->interval / 1.05;
- ecore_timer_interval_set(sd->spin_timer, sd->interval);
+ if (sd->spin_timer)
+ {
+ sd->interval = sd->interval / 1.05;
+ ecore_timer_interval_set(sd->spin_timer, sd->interval);
+ }
return ECORE_CALLBACK_RENEW;
}
diff --git a/src/lib/elementary/elm_calendar_eo.h b/src/lib/elementary/elm_calendar_eo.h
index 09a97eb868..a9cdaab195 100644
--- a/src/lib/elementary/elm_calendar_eo.h
+++ b/src/lib/elementary/elm_calendar_eo.h
@@ -128,7 +128,7 @@ typedef struct _Elm_Calendar_Mark Elm_Calendar_Mark;
*/
#define ELM_CALENDAR_CLASS elm_calendar_class_get()
-EWAPI const Efl_Class *elm_calendar_class_get(void);
+EWAPI const Efl_Class *elm_calendar_class_get(void) EINA_CONST;
/**
* @brief The first day of week to use on calendar widgets'.
@@ -189,7 +189,7 @@ EOAPI void elm_obj_calendar_selectable_set(Eo *obj, Elm_Calendar_Selectable sele
EOAPI Elm_Calendar_Selectable elm_obj_calendar_selectable_get(const Eo *obj);
/**
- * @brief The interval on time updates for an user mouse button hold on
+ * @brief The interval on time updates for a user mouse button hold on
* calendar widgets' month/year selection.
*
* This interval value is decreased while the user holds the mouse pointer
@@ -213,7 +213,7 @@ EOAPI Elm_Calendar_Selectable elm_obj_calendar_selectable_get(const Eo *obj);
EOAPI void elm_obj_calendar_interval_set(Eo *obj, double interval);
/**
- * @brief The interval on time updates for an user mouse button hold on
+ * @brief The interval on time updates for a user mouse button hold on
* calendar widgets' month/year selection.
*
* This interval value is decreased while the user holds the mouse pointer
diff --git a/src/lib/elementary/elm_calendar_eo.legacy.h b/src/lib/elementary/elm_calendar_eo.legacy.h
index d014445642..e2f903cb66 100644
--- a/src/lib/elementary/elm_calendar_eo.legacy.h
+++ b/src/lib/elementary/elm_calendar_eo.legacy.h
@@ -176,7 +176,7 @@ EAPI void elm_calendar_selectable_set(Elm_Calendar *obj, Elm_Calendar_Selectable
EAPI Elm_Calendar_Selectable elm_calendar_selectable_get(const Elm_Calendar *obj);
/**
- * @brief The interval on time updates for an user mouse button hold on
+ * @brief The interval on time updates for a user mouse button hold on
* calendar widgets' month/year selection.
*
* This interval value is decreased while the user holds the mouse pointer
@@ -200,7 +200,7 @@ EAPI Elm_Calendar_Selectable elm_calendar_selectable_get(const Elm_Calendar *obj
EAPI void elm_calendar_interval_set(Elm_Calendar *obj, double interval);
/**
- * @brief The interval on time updates for an user mouse button hold on
+ * @brief The interval on time updates for a user mouse button hold on
* calendar widgets' month/year selection.
*
* This interval value is decreased while the user holds the mouse pointer
diff --git a/src/lib/elementary/elm_calendar_item_eo.h b/src/lib/elementary/elm_calendar_item_eo.h
index 39f5c435bf..6e33610bd3 100644
--- a/src/lib/elementary/elm_calendar_item_eo.h
+++ b/src/lib/elementary/elm_calendar_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Calendar_Item;
*/
#define ELM_CALENDAR_ITEM_CLASS elm_calendar_item_class_get()
-EWAPI const Efl_Class *elm_calendar_item_class_get(void);
+EWAPI const Efl_Class *elm_calendar_item_class_get(void) EINA_CONST;
/**
* @brief Day number property
diff --git a/src/lib/elementary/elm_clock.h b/src/lib/elementary/elm_clock.h
index 8d6bff54e7..f3d4b10252 100644
--- a/src/lib/elementary/elm_clock.h
+++ b/src/lib/elementary/elm_clock.h
@@ -33,11 +33,11 @@
* am/pm indicator may be optionally shown, too, when it will
* switch to 12h.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for clock objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "changed" - the clock's user changed the time
* - @c "focused" - When the clock ehas received focus. (since 1.8)
* - @c "unfocused" - When the clock has lost focus. (since 1.8)
diff --git a/src/lib/elementary/elm_clock_eo.h b/src/lib/elementary/elm_clock_eo.h
index 0236dd26c4..829c161559 100644
--- a/src/lib/elementary/elm_clock_eo.h
+++ b/src/lib/elementary/elm_clock_eo.h
@@ -56,7 +56,7 @@ typedef enum
*/
#define ELM_CLOCK_CLASS elm_clock_class_get()
-EWAPI const Efl_Class *elm_clock_class_get(void);
+EWAPI const Efl_Class *elm_clock_class_get(void) EINA_CONST;
/**
* @brief If the given clock widget must show hours in military or am/pm mode
diff --git a/src/lib/elementary/elm_cnp.c b/src/lib/elementary/elm_cnp.c
new file mode 100644
index 0000000000..eb820766f0
--- /dev/null
+++ b/src/lib/elementary/elm_cnp.c
@@ -0,0 +1,302 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Elementary.h>
+#include <Ecore_Evas.h>
+
+#include "elm_priv.h"
+#include "elm_entry_eo.h"
+
+static inline Ecore_Evas_Selection_Buffer
+_elm_sel_type_to_ee_type(Elm_Sel_Type type)
+{
+ if (type == ELM_SEL_TYPE_PRIMARY)
+ return ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER;
+ if (type == ELM_SEL_TYPE_XDND)
+ return ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER;
+ if (type == ELM_SEL_TYPE_CLIPBOARD)
+ return ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER;
+ return ECORE_EVAS_SELECTION_BUFFER_LAST;
+}
+
+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_TEXT)
+ eina_array_push(ret, "text/plain;charset=utf-8");
+ if (format & ELM_SEL_FORMAT_MARKUP)
+ eina_array_push(ret, "application/x-elementary-markup");
+ if (format & ELM_SEL_FORMAT_IMAGE)
+ {
+ eina_array_push(ret, "image/png");
+ eina_array_push(ret, "image/jpeg");
+ eina_array_push(ret, "image/x-ms-bmp");
+ eina_array_push(ret, "image/gif");
+ eina_array_push(ret, "image/tiff");
+ eina_array_push(ret, "image/svg+xml");
+ eina_array_push(ret, "image/x-xpixmap");
+ eina_array_push(ret, "image/x-tga");
+ eina_array_push(ret, "image/x-portable-pixmap");
+ }
+ if (format & ELM_SEL_FORMAT_VCARD)
+ eina_array_push(ret, "text/vcard");
+ if (format & ELM_SEL_FORMAT_HTML)
+ eina_array_push(ret, "application/xhtml+xml");
+
+ if (eina_array_count(ret) == 0)
+ ERR("Specified mime type is not available");
+
+ return ret;
+}
+
+typedef struct {
+ const unsigned char image_sequence[16];
+ const size_t image_sequence_len;
+ const char *mimetype;
+} Mimetype_Content_Matcher;
+
+static const Mimetype_Content_Matcher matchers[] = {
+ {{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}, 8, "image/png"},
+ {{0xFF, 0xD8}, 2, "image/jpeg"},
+ {{0x42, 0x4D}, 2, "image/x-ms-bmp"},
+ {{0x47, 0x49, 0x46, 0x38, 0x37, 0x61}, 6, "image/gif"},
+ {{0x47, 0x49, 0x46, 0x38, 0x39, 0x61}, 6, "image/gif"},
+ {{0x49, 0x49, 0x2A, 00}, 4, "image/tiff"},
+ {{0x49, 0x4D, 0x00, 0x2A}, 4, "image/tiff"},
+ {{0},0, NULL}
+};
+
+static inline Eina_Array*
+_elm_sel_from_content_to_mime_type(const void *buf, size_t buflen)
+{
+ Eina_Array *ret = eina_array_new(10);
+
+ for (int i = 0; matchers[i].mimetype && eina_array_count(ret) == 0; ++i)
+ {
+ if (matchers[i].image_sequence_len >= buflen) continue;
+ for (size_t j = 0; j < matchers[i].image_sequence_len; ++j)
+ {
+ if (((const unsigned char*)buf)[j] == matchers[i].image_sequence[j])
+ {
+ eina_array_push(ret, matchers[i].mimetype);
+ break;
+ }
+ }
+ }
+
+ if (eina_array_count(ret) != 1)
+ ERR("Specified mime type is not available");
+
+ return ret;
+}
+
+static inline Elm_Sel_Format
+_mime_type_to_elm_sel_format(const char *mime_type)
+{
+ if (eina_streq(mime_type, "text/vcard"))
+ return ELM_SEL_FORMAT_VCARD;
+ else if (eina_streq(mime_type, "application/x-elementary-markup"))
+ return ELM_SEL_FORMAT_MARKUP;
+ else if (eina_streq(mime_type, "application/xhtml+xml"))
+ return ELM_SEL_FORMAT_HTML;
+ else if (!strncmp(mime_type, "text/", strlen("text/")))
+ return ELM_SEL_FORMAT_TEXT;
+ else if (!strncmp(mime_type, "image/", strlen("image/")))
+ return ELM_SEL_FORMAT_IMAGE;
+
+ return ELM_SEL_FORMAT_NONE;
+}
+
+static int
+_default_seat(const Eo *obj)
+{
+ return evas_device_seat_id_get(evas_default_device_get(evas_object_evas_get(obj), EVAS_DEVICE_CLASS_SEAT));
+}
+
+EAPI Eina_Bool
+elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection,
+ Elm_Sel_Format format,
+ const void *buf, size_t buflen)
+{
+ Eina_Content *content;
+ Ecore_Evas *ee;
+ const char *mime_type;
+ Eina_Slice data;
+ Eina_Array *tmp;
+ unsigned char *mem_buf = NULL;
+
+ 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;
+ data.len = buflen + 1;
+ }
+ else
+ {
+ data.mem = buf;
+ 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);
+ }
+ else
+ {
+ tmp = _elm_sel_format_to_mime_type(format);
+ }
+
+
+ if (eina_array_count(tmp) != 1)
+ {
+ ERR("You cannot specify more than one format when setting selection");
+ }
+ mime_type = eina_array_data_get(tmp, 0);
+ eina_array_free(tmp);
+ content = eina_content_new(data, mime_type);
+ _register_selection_changed(obj);
+
+ if (mem_buf != NULL)
+ free(mem_buf);
+
+ return ecore_evas_selection_set(ee, _default_seat(obj), _elm_sel_type_to_ee_type(selection), content);
+}
+
+EAPI Eina_Bool
+elm_object_cnp_selection_clear(Evas_Object *obj,
+ Elm_Sel_Type selection)
+{
+ Ecore_Evas *ee;
+
+ ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
+ return ecore_evas_selection_set(ee, _default_seat(obj), _elm_sel_type_to_ee_type(selection), NULL);
+}
+
+EAPI Eina_Bool
+elm_cnp_clipboard_selection_has_owner(Evas_Object *obj)
+{
+ Ecore_Evas *ee;
+
+ ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
+ return ecore_evas_selection_exists(ee, _default_seat(obj), ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER);
+
+}
+
+typedef struct _Sel_Lost_Data Sel_Lost_Data;
+struct _Sel_Lost_Data
+{
+ const Evas_Object *obj;
+ Elm_Sel_Type type;
+ void *udata;
+ Elm_Selection_Loss_Cb loss_cb;
+};
+
+static void
+_selection_changed_cb(void *data, const Efl_Event *ev)
+{
+ Sel_Lost_Data *ldata = data;
+ Efl_Ui_Wm_Selection_Changed *changed = ev->info;
+
+ if (changed->buffer == EFL_UI_CNP_BUFFER_SELECTION && ldata->type != ELM_SEL_TYPE_PRIMARY)
+ return;
+
+ if (changed->buffer == EFL_UI_CNP_BUFFER_COPY_AND_PASTE && ldata->type != ELM_SEL_TYPE_CLIPBOARD)
+ return;
+
+ if (ldata->obj == changed->caused_by)
+ return;
+
+ ldata->loss_cb(ldata->udata, ldata->type);
+ efl_event_callback_del(ev->object, ev->desc, _selection_changed_cb, data);
+ free(data);
+}
+
+EAPI void
+elm_cnp_selection_loss_callback_set(Evas_Object *obj, Elm_Sel_Type type, Elm_Selection_Loss_Cb func, const void *data)
+{
+ Sel_Lost_Data *ldata = calloc(1, sizeof(Sel_Lost_Data));
+
+ if (!ldata) return;
+ ldata->obj = obj;
+ ldata->type = type;
+ ldata->udata = (void *)data;
+ ldata->loss_cb = func;
+ efl_event_callback_add(obj, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, _selection_changed_cb, ldata);
+}
+
+typedef struct {
+ Elm_Drop_Cb data_cb;
+ void *data;
+ Elm_Sel_Format format;
+} Callback_Storage;
+
+static Eina_Value
+_callback_storage_deliver(Eo *obj, void *data, const Eina_Value value)
+{
+ Callback_Storage *cb_storage = data;
+ Eina_Content *content = eina_value_to_content(&value);
+ Elm_Sel_Format format = _mime_type_to_elm_sel_format(eina_content_type_get(content));
+ Eina_Slice cdata;
+
+ cdata = eina_content_data_get(content);
+ Elm_Selection_Data d = { 0 };
+ d.data = eina_memdup((unsigned char*)cdata.bytes, cdata.len, EINA_FALSE);
+ d.len = cdata.len;
+ d.format = _mime_type_to_elm_sel_format(eina_content_type_get(content));
+
+ if (cb_storage->data_cb)
+ {
+ cb_storage->data_cb(cb_storage->data, obj, &d);
+ }
+ else
+ {
+ EINA_SAFETY_ON_FALSE_GOTO(format == ELM_SEL_FORMAT_TEXT || format == ELM_SEL_FORMAT_MARKUP || format == ELM_SEL_FORMAT_HTML, end);
+
+ _elm_entry_entry_paste(obj, (const char *) d.data);
+ }
+
+end:
+ free(d.data);
+
+ return EINA_VALUE_EMPTY;
+}
+
+static Eina_Value
+_callback_storage_error(Eo *obj EINA_UNUSED, void *data EINA_UNUSED, Eina_Error error)
+{
+ ERR("Content cound not be received because of %s.", eina_error_msg_get(error));
+ return EINA_VALUE_EMPTY;
+}
+
+static void
+_callback_storage_free(Eo *obj EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED)
+{
+ free(data);
+}
+
+EAPI Eina_Bool
+elm_cnp_selection_get(const Evas_Object *obj, Elm_Sel_Type selection,
+ Elm_Sel_Format format,
+ Elm_Drop_Cb data_cb, void *udata)
+{
+ Ecore_Evas *ee;
+ Eina_Array *mime_types;
+ Eina_Future *future;
+ Callback_Storage *storage;
+
+ ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
+ mime_types = _elm_sel_format_to_mime_type(format);
+ future = ecore_evas_selection_get(ee, _default_seat(obj), _elm_sel_type_to_ee_type(selection), eina_array_iterator_new(mime_types));
+ storage = calloc(1,sizeof(Callback_Storage));
+ storage->data_cb = data_cb;
+ storage->data = udata;
+ storage->format = format;
+
+ efl_future_then(obj, future, _callback_storage_deliver, _callback_storage_error, _callback_storage_free, EINA_VALUE_TYPE_CONTENT, storage);
+
+ return EINA_TRUE;
+}
diff --git a/src/lib/elementary/elm_cnp.h b/src/lib/elementary/elm_cnp.h
index 5feda3acc0..06346e40a5 100644
--- a/src/lib/elementary/elm_cnp.h
+++ b/src/lib/elementary/elm_cnp.h
@@ -43,8 +43,6 @@
* @{
*/
-# include <efl_ui_selection_types.eot.h>
-
/**
* Event notifying that the selection has changed
* @see Elm_Cnp_Event_Selection_Changed
diff --git a/src/lib/elementary/elm_code_diff_widget.h b/src/lib/elementary/elm_code_diff_widget.h
index 7a6f2d6412..4387f9dbb2 100644
--- a/src/lib/elementary/elm_code_diff_widget.h
+++ b/src/lib/elementary/elm_code_diff_widget.h
@@ -12,7 +12,7 @@ extern "C" {
/**
* @brief UI Loading functions.
- * @defgroup Init Creating a diff widget to render an Elm Code backend
+ * @defgroup Elm_Code_Diff_Init Creating a diff widget to render an Elm Code backend
* when it's referencing a diff file
*
* @{
diff --git a/src/lib/elementary/elm_code_line.h b/src/lib/elementary/elm_code_line.h
index 8e832ff5ed..5f42174041 100644
--- a/src/lib/elementary/elm_code_line.h
+++ b/src/lib/elementary/elm_code_line.h
@@ -40,7 +40,7 @@ EAPI void elm_code_line_free(Elm_Code_Line *line);
/**
* @brief Line manipulation functions.
- * @defgroup Content
+ * @defgroup Elm_Code_Line_Content Elementary Code Line
* @{
*
* Functions for changing the content of lines in an Elm_Code_File
@@ -87,7 +87,7 @@ EAPI void elm_code_line_merge_down(Elm_Code_Line *line);
* @}
*
* @brief Line markup functions.
- * @defgroup Highlighting
+ * @defgroup Highlighting Elementary Code Highlighting
*
* @{
*
diff --git a/src/lib/elementary/elm_code_parse.h b/src/lib/elementary/elm_code_parse.h
index 4b53e0f2c9..ec86cc53b3 100644
--- a/src/lib/elementary/elm_code_parse.h
+++ b/src/lib/elementary/elm_code_parse.h
@@ -12,13 +12,13 @@ extern "C" {
typedef struct _Elm_Code_Parser Elm_Code_Parser;
-extern EAPI Elm_Code_Parser *ELM_CODE_PARSER_STANDARD_SYNTAX; /**< A provided parser to provide syntax highlighting */
-extern EAPI Elm_Code_Parser *ELM_CODE_PARSER_STANDARD_DIFF; /**< A provided parser that will mark up diff text */
-extern EAPI Elm_Code_Parser *ELM_CODE_PARSER_STANDARD_TODO; /**< A provided parser that will highlight TODO and FIXME lines */
+EAPI extern Elm_Code_Parser *ELM_CODE_PARSER_STANDARD_SYNTAX; /**< A provided parser to provide syntax highlighting */
+EAPI extern Elm_Code_Parser *ELM_CODE_PARSER_STANDARD_DIFF; /**< A provided parser that will mark up diff text */
+EAPI extern Elm_Code_Parser *ELM_CODE_PARSER_STANDARD_TODO; /**< A provided parser that will highlight TODO and FIXME lines */
/**
* @brief Parser helper functions.
- * @defgroup Parser Hooking in and launching parsers
+ * @defgroup Parser Hooking in and launching parsers
*
* @{
*
diff --git a/src/lib/elementary/elm_code_syntax.c b/src/lib/elementary/elm_code_syntax.c
index 856543146b..dbdf7d32f7 100644
--- a/src/lib/elementary/elm_code_syntax.c
+++ b/src/lib/elementary/elm_code_syntax.c
@@ -134,6 +134,28 @@ static Elm_Code_Syntax _elm_code_syntax_md =
{}
};
+static Elm_Code_Syntax _elm_code_syntax_csharp =
+{
+ "{}()[]:;%^/*+&|~!=<->,.",
+ ".",
+ "#",
+ "//",
+ "/*",
+ "*/",
+ _elm_code_syntax_scope_change_braces,
+ { "abstract","as","base","bool","break","byte","case","catch","char","checked", \
+ "class","const","continue","decimal","default","delegate","do","double","else","enum", \
+ "event","explicit","extern","false","finally","fixed","float","for","foreach","goto", \
+ "if","implicit","in","int","interface","internal","is","lock","long","namespace", \
+ "new","null","object","operator","out","override","params","private","protected","public", \
+ "readonly","ref","return","sbyte","sealed","short","sizeof","stackalloc","static","string", \
+ "struct","switch","this","throw","true","try","typeof","uint","ulong","unchecked","unsafe", \
+ "ushort","using","var","virtual","void","volatile","while","add","alias","async","await", \
+ "dynamic","get","global","nameof","partial","remove","set","value","when","where","yield", \
+ "ascending","by","descending","equals","from", "group","in","into","join","let","on", \
+ "orderby","select","where","unmanaged","var", NULL }
+};
+
EAPI Elm_Code_Syntax *
elm_code_syntax_for_mime_get(const char *mime)
{
@@ -151,6 +173,8 @@ elm_code_syntax_for_mime_get(const char *mime)
return &_elm_code_syntax_md;
if (!strcmp("text/x-go", mime))
return &_elm_code_syntax_go;
+ if (!strcmp("text/x-csharp", mime))
+ return &_elm_code_syntax_csharp;
return NULL;
}
diff --git a/src/lib/elementary/elm_code_text.c b/src/lib/elementary/elm_code_text.c
index d27081a251..56fc1a07c5 100644
--- a/src/lib/elementary/elm_code_text.c
+++ b/src/lib/elementary/elm_code_text.c
@@ -19,6 +19,9 @@ elm_code_line_text_get(Elm_Code_Line *line, unsigned int *length)
if (length)
*length = line->length;
+ if (!line->length)
+ return "";
+
if (line->modified)
return line->modified;
return line->content;
diff --git a/src/lib/elementary/elm_code_text.h b/src/lib/elementary/elm_code_text.h
index 97d67653fb..b79d30f3a5 100644
--- a/src/lib/elementary/elm_code_text.h
+++ b/src/lib/elementary/elm_code_text.h
@@ -14,7 +14,7 @@ extern "C" {
/**
* @brief Line text handling functions.
- * @defgroup Text access and manipulation within lines
+ * @defgroup Elm_Code_Text access and manipulation within lines
*
* @{
*
diff --git a/src/lib/elementary/elm_code_widget.c b/src/lib/elementary/elm_code_widget.c
index d18f6126a2..59298a0462 100644
--- a/src/lib/elementary/elm_code_widget.c
+++ b/src/lib/elementary/elm_code_widget.c
@@ -245,7 +245,7 @@ _elm_code_widget_fill_line_gutter(Elm_Code_Widget *widget, Evas_Textgrid_Cell *c
cursor_line = elm_code_file_line_get(line->file, pd->cursor_line);
if (_elm_code_widget_line_in_scope(line, cursor_line))
cells[gutter-1].bg = ELM_CODE_WIDGET_COLOR_GUTTER_SCOPE_BG;
- else
+ else if (pd->show_line_numbers)
cells[gutter-1].bg = ELM_CODE_WIDGET_COLOR_GUTTER_BG;
}
else
@@ -311,6 +311,7 @@ _elm_code_widget_fill_whitespace(Elm_Code_Widget *widget, Eina_Unicode character
static void
_elm_code_widget_cursor_update(Elm_Code_Widget *widget, Elm_Code_Widget_Data *pd)
{
+ Evas_Coord ox, oy, ow, oh;
Evas_Coord cx = 0, cy = 0, cw = 0, ch = 0;
elm_code_widget_geometry_for_position_get(widget, pd->cursor_line, pd->cursor_col, &cx, &cy, &cw, &ch);
@@ -324,8 +325,17 @@ _elm_code_widget_cursor_update(Elm_Code_Widget *widget, Elm_Code_Widget_Data *pd
elm_layout_signal_emit(pd->cursor_rect, "elm,action,focus", "elm");
}
- evas_object_geometry_set(pd->cursor_rect, cx, cy, cw/8, ch);
- evas_object_show(pd->cursor_rect);
+ evas_object_smart_calculate(pd->scroller);
+ evas_object_smart_calculate(pd->gridbox);
+ evas_object_geometry_get(widget, &ox, &oy, &ow, &oh);
+
+ if ((cx < ox) || (cx > (ox + ow)) || (cy < oy) || (cy > (oy + oh - ch)))
+ evas_object_hide(pd->cursor_rect);
+ else
+ {
+ evas_object_geometry_set(pd->cursor_rect, cx, cy, cw/8, ch);
+ evas_object_show(pd->cursor_rect);
+ }
}
static void
@@ -404,7 +414,6 @@ _elm_code_widget_fill_line(Elm_Code_Widget *widget, Elm_Code_Widget_Data *pd, El
w = elm_code_widget_columns_get(widget);
grid = eina_list_nth(pd->grids, line->number - 1);
cells = evas_object_textgrid_cellrow_get(grid, 0);
-
length = elm_code_widget_line_text_column_width_get(widget, line);
chrpos = 0;
chr = (char *)elm_code_line_text_get(line, NULL);
@@ -693,13 +702,27 @@ _elm_code_widget_cursor_move(Elm_Code_Widget *widget, Elm_Code_Widget_Data *pd,
{
Elm_Code *code;
Elm_Code_Line *line_obj;
- unsigned int oldrow, position, length;
const char *text;
+ unsigned int oldrow, position, length, first_row, last_row;
+ int cw = 0, ch = 0;
oldrow = pd->cursor_line;
+
pd->cursor_col = col;
pd->cursor_line = line;
+ if (line > elm_code_file_lines_get(pd->code->file))
+ return;
+
+ if ((line > eina_list_count(pd->grids)) && (!pd->selection))
+ {
+ if (_elm_code_widget_viewport_get(widget, pd, &first_row, &last_row))
+ {
+ _elm_code_widget_cell_size_get(widget, &cw, &ch);
+ _elm_code_widget_scroll_by(widget, 0, ch * (line - last_row));
+ }
+ }
+
code = pd->code;
line_obj = elm_code_file_line_get(code->file, line);
position = elm_code_widget_line_text_position_for_column_get(widget, line_obj, col);
@@ -719,7 +742,6 @@ _elm_code_widget_cursor_move(Elm_Code_Widget *widget, Elm_Code_Widget_Data *pd,
elm_layout_signal_emit(pd->cursor_rect, "elm,action,show,cursor", "elm");
}
-
EOLIAN static Eina_Bool
_elm_code_widget_position_at_coordinates_get(Eo *obj, Elm_Code_Widget_Data *pd,
Evas_Coord x, Evas_Coord y,
@@ -800,7 +822,6 @@ _elm_code_widget_geometry_for_position_get(Elm_Code_Widget *widget, Elm_Code_Wid
gutter = efl_ui_code_widget_text_left_gutter_width_get(widget);
grid = eina_list_nth(pd->grids, row - 1);
- evas_object_smart_calculate(pd->gridbox);
evas_object_geometry_get(grid, x, y, NULL, NULL);
if (x)
@@ -1109,7 +1130,7 @@ _elm_code_widget_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
_popup_menu_show(widget, event->canvas.x, event->canvas.y);
return;
}
- else if (event->button == 2)
+ else if (event->button == 2)
{
_mouse_selection_paste_at_position(widget, row, col);
return;
@@ -1177,7 +1198,6 @@ _elm_code_widget_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
_elm_code_widget_selection_type_set(widget, ELM_CODE_WIDGET_SELECTION_MOUSE);
_elm_code_widget_selection_in_progress_set(widget, EINA_TRUE);
-
elm_code_widget_selection_end(widget, row, col);
}
@@ -1505,6 +1525,18 @@ _elm_code_widget_tab_at_cursor_insert(Elm_Code_Widget *widget)
}
}
+static void
+_elm_code_widget_scroll_newline(Elm_Code_Widget *widget)
+{
+ Elm_Code_Widget_Data *pd;
+ Evas_Coord x, y, w, h;
+
+ pd = efl_data_scope_get(widget, ELM_CODE_WIDGET_CLASS);
+
+ elm_scroller_region_get(pd->scroller, &x, &y, &w, &h);
+ elm_scroller_region_show(pd->scroller, 0, y, w, h);
+}
+
void
_elm_code_widget_newline(Elm_Code_Widget *widget)
{
@@ -1554,6 +1586,8 @@ _elm_code_widget_newline(Elm_Code_Widget *widget)
_elm_code_widget_undo_change_add(widget, change);
_elm_code_widget_change_free(change);
free(text);
+
+ _elm_code_widget_scroll_newline(widget);
}
static void
@@ -1777,17 +1811,6 @@ _elm_code_widget_key_down_cb(void *data, Evas *evas EINA_UNUSED,
_elm_code_widget_selection_type_set(widget, ELM_CODE_WIDGET_SELECTION_KEYBOARD);
_elm_code_widget_selection_in_progress_set(widget, EINA_TRUE);
-
- if (pd->selection && pd->selection->start_line == pd->selection->end_line)
- {
- if ((pd->selection->end_col == pd->selection->start_col && !backwards) ||
- (pd->selection->end_col > pd->selection->start_col))
- elm_code_widget_cursor_position_set(widget, pd->selection->end_line, pd->selection->end_col+1);
- }
- else if (pd->selection && pd->selection->end_line > pd->selection->start_line)
- {
- elm_code_widget_cursor_position_set(widget, pd->selection->end_line, pd->selection->end_col+1);
- }
}
else
elm_code_widget_selection_clear(widget);
@@ -1819,6 +1842,20 @@ _elm_code_widget_key_down_cb(void *data, Evas *evas EINA_UNUSED,
elm_code_widget_selection_end(widget, pd->cursor_line, pd->cursor_col - (adjust?1:0));
_elm_code_widget_selection_in_progress_set(widget, EINA_FALSE);
+
+ if (pd->selection)
+ {
+ if (pd->selection->end_line < pd->selection->start_line)
+ {
+ elm_code_widget_cursor_position_set(widget, pd->selection->end_line, pd->selection->end_col);
+ }
+ else if ((pd->selection->end_col == pd->selection->start_col && !backwards) ||
+ (pd->selection->end_col > pd->selection->start_col) ||
+ (pd->selection->end_line > pd->selection->start_line))
+ {
+ elm_code_widget_cursor_position_set(widget, pd->selection->end_line, pd->selection->end_col+1);
+ }
+ }
}
}
@@ -2008,20 +2045,19 @@ _elm_code_widget_ensure_n_grid_rows(Elm_Code_Widget *widget, int rows)
evas_object_textgrid_font_set(grid, pd->font_name, pd->font_size * elm_config_scale_get());
}
-
- elm_box_recalculate(pd->gridbox);
}
static void
_elm_code_widget_resize(Elm_Code_Widget *widget, Elm_Code_Line *newline)
{
+ Eina_List *item, *lines;
+ Elm_Code_Widget_Data *pd;
Elm_Code_Line *line;
- Eina_List *item;
Evas_Object *grid;
Evas_Coord ww, wh, old_width, old_height;
- int w, h, cw = 0, ch = 0, gutter;
- unsigned int line_width;
- Elm_Code_Widget_Data *pd;
+ int w = 0, h, cw = 0, ch = 0, gutter;
+ unsigned int i, n, line_width, first_row = 1, last_row = 256;
+ Eina_Bool viewport = EINA_FALSE;
pd = efl_data_scope_get(widget, ELM_CODE_WIDGET_CLASS);
gutter = efl_ui_code_widget_text_left_gutter_width_get(widget);
@@ -2036,18 +2072,34 @@ _elm_code_widget_resize(Elm_Code_Widget *widget, Elm_Code_Line *newline)
old_width = ww;
old_height = wh;
- w = 0;
- h = elm_code_file_lines_get(pd->code->file);
- EINA_LIST_FOREACH(pd->code->file->lines, item, line)
+ n = h = elm_code_file_lines_get(pd->code->file);
+
+ if (_elm_code_widget_viewport_get(widget, pd, &first_row, &last_row))
+ viewport = EINA_TRUE;
+
+ /* Grow by one page at a time where possible. */
+ n = (last_row + (last_row - first_row)) < n ?
+ last_row + (last_row - first_row) : n;
+
+ /* Calculate the maximum width of our lines. */
+
+ lines = eina_list_nth_list(pd->code->file->lines, first_row - 1);
+ for (i = 0; i < n; i++)
{
+ line = eina_list_data_get(lines);
+ if (!line) break;
line_width = elm_code_widget_line_text_column_width_get(widget, line);
+
if ((int) line_width + gutter + 1 > w)
w = (int) line_width + gutter + 1;
+
+ lines = eina_list_next(lines);
}
- _elm_code_widget_ensure_n_grid_rows(widget, h);
+ _elm_code_widget_ensure_n_grid_rows(widget, n);
_elm_code_widget_cell_size_get(widget, &cw, &ch);
+
if (w*cw > ww)
ww = w*cw;
if (h*ch > wh)
@@ -2064,23 +2116,22 @@ _elm_code_widget_resize(Elm_Code_Widget *widget, Elm_Code_Line *newline)
evas_object_size_hint_min_set(grid, ww, ch);
}
- if (!newline)
- {
- unsigned int first_row, last_row;
-
- if (!_elm_code_widget_viewport_get(widget, pd, &first_row, &last_row))
- return ;
-
- _elm_code_widget_fill_range(widget, pd, first_row, last_row, NULL);
+ /* Here we expand our scroller when there are less grids than lines of text. */
+ elm_box_unpack(pd->gridbox, pd->expander);
+ evas_object_size_hint_min_set(pd->expander, ww, (h * ch) - (eina_list_count(pd->grids) * ch));
+ elm_box_pack_end(pd->gridbox, pd->expander);
+ if (!newline && viewport)
+ {
+ /* Where possible render additional lines to the viewport. */
+ _elm_code_widget_fill_range(widget, pd, first_row, last_row + 64, NULL);
return;
}
- if (pd->gravity_x == 1.0 || pd->gravity_y == 1.0)
+ if (EINA_DBL_EQ(pd->gravity_x, 1.0) || EINA_DBL_EQ(pd->gravity_y, 1.0))
_elm_code_widget_scroll_by(widget,
- (pd->gravity_x == 1.0 && ww > old_width) ? ww - old_width : 0,
- (pd->gravity_y == 1.0 && wh > old_height) ? wh - old_height : 0);
- elm_box_recalculate(pd->gridbox);
+ (EINA_DBL_EQ(pd->gravity_x, 1.0) && ww > old_width) ? ww - old_width : 0,
+ (EINA_DBL_EQ(pd->gravity_y, 1.0) && wh > old_height) ? wh - old_height : 0);
}
EOAPI void
@@ -2421,6 +2472,9 @@ _elm_code_widget_efl_canvas_group_group_add(Eo *obj, Elm_Code_Widget_Data *pd)
elm_object_content_set(scroller, gridrows);
pd->gridbox = gridrows;
+ pd->expander = evas_object_rectangle_add(evas_object_evas_get(scroller));
+ elm_box_pack_end(pd->gridbox, pd->expander);
+
_elm_code_widget_efl_ui_widget_theme_apply(obj, pd);
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _elm_code_widget_resize_cb, obj);
diff --git a/src/lib/elementary/elm_code_widget_legacy_eo.h b/src/lib/elementary/elm_code_widget_legacy_eo.h
index 4d2b5ffb26..eb1a9b6bae 100644
--- a/src/lib/elementary/elm_code_widget_legacy_eo.h
+++ b/src/lib/elementary/elm_code_widget_legacy_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Code_Widget_Legacy;
*/
#define ELM_CODE_WIDGET_LEGACY_CLASS elm_code_widget_legacy_class_get()
-EWAPI const Efl_Class *elm_code_widget_legacy_class_get(void);
+EWAPI const Efl_Class *elm_code_widget_legacy_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_code_widget_private.h b/src/lib/elementary/elm_code_widget_private.h
index 3398ad370f..d64e5d67c7 100644
--- a/src/lib/elementary/elm_code_widget_private.h
+++ b/src/lib/elementary/elm_code_widget_private.h
@@ -24,6 +24,7 @@ typedef struct
Eina_List *grids;
unsigned int col_count;
Evas_Object *scroller, *gridbox, *background;
+ Evas_Object *expander;
const char *font_name;
Evas_Font_Size font_size;
diff --git a/src/lib/elementary/elm_color_class.h b/src/lib/elementary/elm_color_class.h
index 97a503148d..8d97f2bce8 100644
--- a/src/lib/elementary/elm_color_class.h
+++ b/src/lib/elementary/elm_color_class.h
@@ -3,7 +3,6 @@
/**
* @defgroup Elm_Color_Class_Group Color Class Editor
- * @ingroup Elm_Color_Class_Group
* @brief This group provides a UI for editing color classes in applications.
*
* @{
diff --git a/src/lib/elementary/elm_color_item_eo.h b/src/lib/elementary/elm_color_item_eo.h
index 6fa8f14786..1c2f0ba06b 100644
--- a/src/lib/elementary/elm_color_item_eo.h
+++ b/src/lib/elementary/elm_color_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Color_Item;
*/
#define ELM_COLOR_ITEM_CLASS elm_color_item_class_get()
-EWAPI const Efl_Class *elm_color_item_class_get(void);
+EWAPI const Efl_Class *elm_color_item_class_get(void) EINA_CONST;
/**
* @brief Set Palette item's color.
diff --git a/src/lib/elementary/elm_colorselector.c b/src/lib/elementary/elm_colorselector.c
index 67d8d59715..5a53c69692 100644
--- a/src/lib/elementary/elm_colorselector.c
+++ b/src/lib/elementary/elm_colorselector.c
@@ -398,10 +398,10 @@ _rgb_to_hsl(Elm_Colorselector_Data *sd)
g2 = (v - g) / vm;
b2 = (v - b) / vm;
- if (r == v) sd->h = (g == m ? 5.0 + b2 : 1.0 - g2);
- else if (g == v)
- sd->h = (b == m ? 1.0 + r2 : 3.0 - b2);
- else sd->h = (r == m ? 3.0 + g2 : 5.0 - r2);
+ if (EINA_DBL_EQ(r, v)) sd->h = (EINA_DBL_EQ(g, m) ? 5.0 + b2 : 1.0 - g2);
+ else if (EINA_DBL_EQ(g, v))
+ sd->h = (EINA_DBL_EQ(b, m) ? 1.0 + r2 : 3.0 - b2);
+ else sd->h = (EINA_DBL_EQ(r, m) ? 3.0 + g2 : 5.0 - r2);
sd->h *= 60.0;
}
@@ -418,16 +418,16 @@ _hsl_to_rgb(Elm_Colorselector_Data *sd)
_s = sd->s;
_l = sd->l;
- if (_s == 0.0) r = g = b = _l;
+ if (EINA_DBL_EQ(_s, 0.0)) r = g = b = _l;
else
{
- if (_h == 360.0) _h = 0.0;
+ if (EINA_DBL_EQ(_h, 360.0)) _h = 0.0;
_h /= 60.0;
v = (_l <= 0.5) ? (_l * (1.0 + _s)) : (_l + _s - (_l * _s));
p = _l + _l - v;
- if (v) sv = (v - p) / v;
+ if (EINA_DBL_NONZERO(v)) sv = (v - p) / v;
else sv = 0;
i = (int)_h;
@@ -489,7 +489,7 @@ _hsl_to_rgb(Elm_Colorselector_Data *sd)
f = (b * 255.0) - i;
b = (f <= 0.5) ? i : (i + 1);
- if (sd->r == r && sd->g == g && sd->b == b) return EINA_FALSE;
+ if (EINA_DBL_EQ(sd->r, r) && EINA_DBL_EQ(sd->g, g) && EINA_DBL_EQ(sd->b, b)) return EINA_FALSE;
sd->r = r;
sd->g = g;
diff --git a/src/lib/elementary/elm_colorselector_eo.h b/src/lib/elementary/elm_colorselector_eo.h
index 84fe60a94a..88d7243fae 100644
--- a/src/lib/elementary/elm_colorselector_eo.h
+++ b/src/lib/elementary/elm_colorselector_eo.h
@@ -37,7 +37,7 @@ typedef enum
*/
#define ELM_COLORSELECTOR_CLASS elm_colorselector_class_get()
-EWAPI const Efl_Class *elm_colorselector_class_get(void);
+EWAPI const Efl_Class *elm_colorselector_class_get(void) EINA_CONST;
/**
* @brief Set color to colorselector.
diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c
index 476eb15c4d..79e0f9a998 100644
--- a/src/lib/elementary/elm_config.c
+++ b/src/lib/elementary/elm_config.c
@@ -42,10 +42,6 @@ static Eio_Monitor *_eio_profile_monitor = NULL;
Eina_Hash *_elm_key_bindings = NULL;
-#ifdef HAVE_ELEMENTARY_WL2
-Ecore_Wl2_Display *_elm_wl_display = NULL;
-#endif
-
const char *_elm_engines[] = {
"software_x11",
"fb",
@@ -1730,7 +1726,7 @@ _config_system_load(void)
{
Eina_Tmpstr* tmp;
ERR("System loading config failed! Check your setup! Falling back to compile time defaults");
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_file_mkstemp("/tmp/elementary_configXXXXXX", &tmp), NULL);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_file_mkstemp("elementary_configXXXXXX", &tmp), NULL);
ef = eet_open(tmp, EET_FILE_MODE_WRITE);
EINA_SAFETY_ON_FALSE_RETURN_VAL(eet_data_undump(ef, "config", embedded_config, strlen(embedded_config)-1, EINA_FALSE), NULL);
eet_close(ef);
@@ -2047,12 +2043,13 @@ _config_flush_get(void)
evas_font_reinit();
_elm_config_font_overlay_apply();
_elm_config_color_overlay_apply();
- if (pre_scale != _elm_config->scale)
+ if (!EINA_DBL_EQ(pre_scale, _elm_config->scale))
_elm_rescale();
_elm_old_clouseau_reload();
_elm_config_key_binding_hash();
_elm_win_access(_elm_config->access_mode);
ecore_event_add(ELM_EVENT_CONFIG_ALL_CHANGED, NULL, NULL, NULL);
+ efl_event_callback_call(_efl_config_obj, EFL_CONFIG_EVENT_CONFIG_CHANGED, NULL);
}
static const char *
@@ -2297,6 +2294,23 @@ _elm_key_bindings_update(Elm_Config *cfg, Elm_Config *syscfg EINA_UNUSED)
}
static void
+_elm_key_bindings_copy_missing_bindings_of_widget(Elm_Config *cfg, Elm_Config *syscfg, const char *widget_name)
+{
+ Elm_Config_Bindings_Widget *wd;
+ Eina_List *n, *nnext;
+
+ EINA_LIST_FOREACH_SAFE(syscfg->bindings, n, nnext, wd)
+ {
+ if (eina_streq(widget_name, wd->name))
+ {
+ syscfg->bindings = eina_list_remove_list(syscfg->bindings, n);
+ cfg->bindings = eina_list_append(cfg->bindings, wd);
+ printf("Upgraded keybindings for %s!\n", wd->name);
+ }
+ }
+}
+
+static void
_elm_key_bindings_copy_missing_bindings(Elm_Config *cfg, Elm_Config *syscfg)
{
Eina_Hash *safed_bindings = eina_hash_string_superfast_new(NULL);
@@ -2449,13 +2463,27 @@ _config_update(void)
_elm_config->win_no_border = EINA_FALSE;
IFCFGEND
- IFCFG(0x0022)
+ IFCFG(0x0016)
_elm_key_bindings_copy_missing_bindings(_elm_config, tcfg);
/* after this function call, the tcfg is partly invalidated, reload! */
_config_free(tcfg);
tcfg = _config_system_load();
IFCFGEND
+
+ IFCFG(0x0017)
+ _elm_key_bindings_copy_missing_bindings_of_widget(_elm_config, tcfg, "Efl.Ui.Textbox");
+ /* after this function call, the tcfg is partly invalidated, reload! */
+ _config_free(tcfg);
+ tcfg = _config_system_load();
+ IFCFGEND
+
+ IFCFG(0x0018)
+ if (!_elm_config->priv.thumbscroll_momentum_distance_max)
+ COPYVAL(thumbscroll_momentum_distance_max);
+ if (!_elm_config->priv.thumbscroll_momentum_friction)
+ COPYVAL(thumbscroll_momentum_friction);
+ IFCFGEND
/**
* Fix user config for current ELM_CONFIG_EPOCH here.
**/
@@ -2965,7 +2993,7 @@ elm_config_scale_set(double scale)
{
_elm_config->priv.scale = EINA_TRUE;
if (scale < 0.0) return;
- if (_elm_config->scale == scale) return;
+ if (EINA_DBL_EQ(_elm_config->scale, scale)) return;
_elm_config->scale = scale;
_elm_rescale();
}
@@ -3017,7 +3045,7 @@ elm_config_password_show_last_timeout_set(double password_show_last_timeout)
{
_elm_config->priv.password_show_last_timeout = EINA_TRUE;
if (password_show_last_timeout < 0.0) return;
- if (_elm_config->password_show_last_timeout == password_show_last_timeout) return;
+ if (EINA_DBL_EQ(_elm_config->password_show_last_timeout, password_show_last_timeout)) return;
_elm_config->password_show_last_timeout = password_show_last_timeout;
edje_password_show_last_timeout_set(_elm_config->password_show_last_timeout);
}
@@ -3489,7 +3517,6 @@ _efl_ui_widget_config_reload(Efl_Ui_Widget *obj)
Elm_Focus_Move_Policy focus_move_policy = elm_config_focus_move_policy_get();
ELM_WIDGET_DATA_GET_OR_RETURN(obj, sd);
Efl_Ui_Widget *w;
- Eina_List *n;
//reload focus move policy
if (efl_ui_widget_focus_move_policy_automatic_get(obj) &&
@@ -3498,8 +3525,9 @@ _efl_ui_widget_config_reload(Efl_Ui_Widget *obj)
sd->focus_move_policy = focus_move_policy;
}
- EINA_LIST_FOREACH(sd->subobjs, n, w)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ w = eina_array_data_get(sd->children, i);
if (efl_isa(w, EFL_UI_WIDGET_CLASS))
_efl_ui_widget_config_reload(w);
}
@@ -4286,12 +4314,6 @@ _elm_config_sub_shutdown(void)
{
ecore_event_type_flush(ELM_EVENT_CONFIG_ALL_CHANGED);
-#ifdef HAVE_ELEMENTARY_COCOA
- ecore_cocoa_shutdown();
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- ecore_win32_shutdown();
-#endif
ELM_SAFE_FREE(_eio_config_monitor, eio_monitor_del);
ELM_SAFE_FREE(_eio_profile_monitor, eio_monitor_del);
ELM_SAFE_FREE(_config_change_delay_timer, ecore_timer_del);
@@ -4382,12 +4404,6 @@ _elm_config_file_monitor_cb(void *data EINA_UNUSED,
void
_elm_config_sub_init(void)
{
-#ifdef HAVE_ELEMENTARY_COCOA
- ecore_cocoa_init();
-#endif
-#ifdef HAVE_ELEMENTARY_WIN32
- ecore_win32_init();
-#endif
char buf[PATH_MAX];
int ok = 0;
@@ -4428,6 +4444,7 @@ _elm_config_reload(void)
unsigned char ppassword_show_last;
double ppassword_show_last_timeout;
int pweek_start, pweekend_start, pweekend_len, pyear_min, pyear_max;
+ Eina_List *pfont_overlays;
#define STO(x) if (_elm_config->x) p##x = eina_stringshare_add(_elm_config->x)
STO(theme);
@@ -4446,6 +4463,7 @@ _elm_config_reload(void)
STO(weekend_len);
STO(year_min);
STO(year_max);
+ STO(font_overlays);
#undef STO
is_mirrored = _elm_config->is_mirrored;
@@ -4462,12 +4480,13 @@ _elm_config_reload(void)
_elm_config_font_overlay_apply();
_elm_config_color_overlay_apply();
#define CMP(x) (p##x != _elm_config->x)
+#define DBL_CMP(x) !EINA_DBL_EQ(p##x, _elm_config->x)
if (
- CMP(scale)
+ DBL_CMP(scale)
|| CMP(finger_size)
|| CMP(icon_size)
|| CMP(password_show_last)
- || CMP(password_show_last_timeout)
+ || DBL_CMP(password_show_last_timeout)
|| CMP(week_start)
|| CMP(weekend_start)
|| CMP(weekend_len)
@@ -4479,12 +4498,15 @@ _elm_config_reload(void)
|| CMP(theme)
|| CMP(modules)
|| CMP(icon_theme)
+ || CMP(font_overlays)
)
_elm_rescale();
+#undef DBL_CMP
#undef CMP
_elm_old_clouseau_reload();
_elm_config_key_binding_hash();
ecore_event_add(ELM_EVENT_CONFIG_ALL_CHANGED, NULL, NULL, NULL);
+ efl_event_callback_call(_efl_config_obj, EFL_CONFIG_EVENT_CONFIG_CHANGED, NULL);
if (ptheme) eina_stringshare_del(ptheme);
if (pmodules) eina_stringshare_del(pmodules);
if (picon_theme) eina_stringshare_del(picon_theme);
@@ -4662,7 +4684,7 @@ elm_config_transition_duration_factor_set(double factor)
{
_elm_config->priv.transition_duration_factor = EINA_TRUE;
if (factor < 0.0) return;
- if (_elm_config->transition_duration_factor == factor) return;
+ if (EINA_DBL_EQ(_elm_config->transition_duration_factor, factor)) return;
_elm_config->transition_duration_factor = factor;
edje_transition_duration_factor_set(_elm_config->transition_duration_factor);
}
@@ -4912,12 +4934,14 @@ _efl_config_global_efl_config_config_set(Eo *obj EINA_UNUSED, void *_pd EINA_UNU
return EINA_FALSE; \
} \
elm_config_ ## opt ## _set(v); \
+ efl_event_callback_call(_efl_config_obj, EFL_CONFIG_EVENT_CONFIG_CHANGED, (void*)name); \
return EINA_TRUE; \
} \
} while (0)
#define CONFIG_SETB(opt) CONFIG_SET(opt, Eina_Bool, UCHAR, int)
#define CONFIG_SETI(opt) CONFIG_SET(opt, int, INT, int)
+#define CONFIG_SETU(opt) CONFIG_SET(opt, unsigned int, UINT, int)
#define CONFIG_SETD(opt) CONFIG_SET(opt, double, DOUBLE, int)
#define CONFIG_SETS(opt) CONFIG_SET(opt, const char *, STRING, cstring)
@@ -4948,6 +4972,7 @@ _efl_config_global_efl_config_config_set(Eo *obj EINA_UNUSED, void *_pd EINA_UNU
return EINA_FALSE; \
} \
elm_config_ ## opt ## _set(v); \
+ efl_event_callback_call(_efl_config_obj, EFL_CONFIG_EVENT_CONFIG_CHANGED, (void*)name); \
return EINA_TRUE; \
} \
} while (0)
@@ -5015,8 +5040,7 @@ _efl_config_global_efl_config_config_set(Eo *obj EINA_UNUSED, void *_pd EINA_UNU
CONFIG_SETB(first_item_focus_on_first_focusin);
CONFIG_SETB(mirrored);
CONFIG_SETB(clouseau_enabled);
- CONFIG_SETD(glayer_long_tap_start_timeout);
- CONFIG_SETD(glayer_double_tap_timeout);
+
//color_overlay const char *color_class,
//elm_config.h:EAPI void elm_config_color_overlay_unset(const char *color_class);
CONFIG_SETB(magnifier_enable);
@@ -5030,6 +5054,65 @@ _efl_config_global_efl_config_config_set(Eo *obj EINA_UNUSED, void *_pd EINA_UNU
CONFIG_SETB(offline);
CONFIG_SETI(powersave);
+ CONFIG_SETD(glayer_long_tap_start_timeout);
+ CONFIG_SETD(glayer_double_tap_timeout);
+
+#undef CONFIG_SET
+#define CONFIG_SET(opt, primityp, valtyp, alttyp) do { \
+ if (!strcmp(name, #opt)) \
+ { \
+ primityp v = 0; \
+ alttyp alt = 0; \
+ const Eina_Value_Type *typ = EINA_VALUE_TYPE_ ## valtyp; \
+ if (eina_value_type_get(val) == typ) \
+ { \
+ if (!eina_value_get(val, &v)) return EINA_FALSE; \
+ } \
+ else if (_eina_value_to_ ## alttyp(val, &alt)) \
+ { \
+ v = alt; \
+ } \
+ else \
+ { \
+ ERR("Invalid value type for config '%s' (got %s wanted %s)", \
+ name, eina_value_type_name_get(eina_value_type_get(val)), \
+ eina_value_type_name_get(EINA_VALUE_TYPE_ ## valtyp)); \
+ return EINA_FALSE; \
+ } \
+ _elm_config->opt = v; \
+ _elm_config->priv.opt = EINA_TRUE; \
+ efl_event_callback_call(_efl_config_obj, EFL_CONFIG_EVENT_CONFIG_CHANGED, (void*)name); \
+ return EINA_TRUE; \
+ } \
+ } while (0)
+
+
+ CONFIG_SETB(glayer_zoom_finger_enable);
+ CONFIG_SETD(glayer_zoom_finger_factor);
+ CONFIG_SETD(glayer_zoom_wheel_factor);
+ CONFIG_SETD(glayer_zoom_distance_tolerance);
+ CONFIG_SETD(glayer_rotate_finger_enable);
+ CONFIG_SETD(glayer_rotate_angular_tolerance);
+ CONFIG_SETD(glayer_line_min_length);
+ CONFIG_SETD(glayer_line_distance_tolerance);
+ CONFIG_SETD(glayer_line_angular_tolerance);
+ CONFIG_SETU(glayer_flick_time_limit_ms);
+ CONFIG_SETD(glayer_long_tap_start_timeout);
+ CONFIG_SETD(glayer_double_tap_timeout);
+ CONFIG_SETI(glayer_tap_finger_size);
+ CONFIG_SETB(glayer_continues_enable);
+
+ CONFIG_SETI(thumbscroll_momentum_distance_max);
+ CONFIG_SETD(thumbscroll_momentum_friction);
+ CONFIG_SETD(thumbscroll_momentum_animation_duration_min_limit);
+ CONFIG_SETD(thumbscroll_momentum_animation_duration_max_limit);
+ CONFIG_SETD(thumbscroll_momentum_threshold);
+ CONFIG_SETD(thumbscroll_bounce_friction);
+ CONFIG_SETD(thumbscroll_acceleration_threshold);
+ CONFIG_SETD(thumbscroll_acceleration_time_limit);
+ CONFIG_SETD(thumbscroll_acceleration_weight);
+
+
const size_t len = sizeof("audio_mute") - 1;
if (!strncmp(name, "audio_mute", len))
{
@@ -5049,6 +5132,7 @@ _efl_config_global_efl_config_config_set(Eo *obj EINA_UNUSED, void *_pd EINA_UNU
}
elm_config_audio_mute_set(chan, !!v);
#ifdef ENABLE_MULTISENSE
+ efl_event_callback_call(_efl_config_obj, EFL_CONFIG_EVENT_CONFIG_CHANGED, (void*)name);
return EINA_TRUE;
#else
return EINA_FALSE;
@@ -5080,6 +5164,7 @@ _efl_config_global_efl_config_config_get(const Eo *obj EINA_UNUSED, void *_pd EI
#define CONFIG_GETB(opt) CONFIG_GET(opt, Eina_Bool, UCHAR)
#define CONFIG_GETI(opt) CONFIG_GET(opt, int, INT)
+#define CONFIG_GETU(opt) CONFIG_GET(opt, unsigned int, UINT)
#define CONFIG_GETD(opt) CONFIG_GET(opt, double, DOUBLE)
#define CONFIG_GETS(opt) CONFIG_GET(opt, const char *, STRING)
@@ -5158,8 +5243,7 @@ _efl_config_global_efl_config_config_get(const Eo *obj EINA_UNUSED, void *_pd EI
CONFIG_GETB(first_item_focus_on_first_focusin);
CONFIG_GETB(mirrored);
CONFIG_GETB(clouseau_enabled);
- CONFIG_GETD(glayer_long_tap_start_timeout);
- CONFIG_GETD(glayer_double_tap_timeout);
+
//color_overlay
//color_overlay_unset
CONFIG_GETB(magnifier_enable);
@@ -5174,6 +5258,42 @@ _efl_config_global_efl_config_config_get(const Eo *obj EINA_UNUSED, void *_pd EI
CONFIG_GETI(powersave);
CONFIG_GETD(drag_anim_duration);
+ CONFIG_GETD(glayer_long_tap_start_timeout);
+ CONFIG_GETD(glayer_double_tap_timeout);
+#undef CONFIG_GET
+#define CONFIG_GET(opt, primityp, valtyp) do { \
+ if (!strcmp(name, #opt)) \
+ { \
+ val = eina_value_new(EINA_VALUE_TYPE_ ## valtyp); \
+ eina_value_set(val, _elm_config->opt); \
+ return val; \
+ } \
+ } while (0)
+ CONFIG_GETB(glayer_zoom_finger_enable);
+ CONFIG_GETD(glayer_zoom_finger_factor);
+ CONFIG_GETD(glayer_zoom_wheel_factor);
+ CONFIG_GETD(glayer_zoom_distance_tolerance);
+ CONFIG_GETD(glayer_rotate_finger_enable);
+ CONFIG_GETD(glayer_rotate_angular_tolerance);
+ CONFIG_GETD(glayer_line_min_length);
+ CONFIG_GETD(glayer_line_distance_tolerance);
+ CONFIG_GETD(glayer_line_angular_tolerance);
+ CONFIG_GETU(glayer_flick_time_limit_ms);
+ CONFIG_GETD(glayer_long_tap_start_timeout);
+ CONFIG_GETD(glayer_double_tap_timeout);
+ CONFIG_GETI(glayer_tap_finger_size);
+ CONFIG_GETB(glayer_continues_enable);
+
+ CONFIG_GETI(thumbscroll_momentum_distance_max);
+ CONFIG_GETD(thumbscroll_momentum_friction);
+ CONFIG_GETD(thumbscroll_momentum_animation_duration_min_limit);
+ CONFIG_GETD(thumbscroll_momentum_animation_duration_max_limit);
+ CONFIG_GETD(thumbscroll_momentum_threshold);
+ CONFIG_GETD(thumbscroll_bounce_friction);
+ CONFIG_GETD(thumbscroll_acceleration_threshold);
+ CONFIG_GETD(thumbscroll_acceleration_time_limit);
+ CONFIG_GETD(thumbscroll_acceleration_weight);
+
const size_t len = sizeof("audio_mute") - 1;
if (!strncmp(name, "audio_mute", len))
{
diff --git a/src/lib/elementary/elm_config.h b/src/lib/elementary/elm_config.h
index 48f8778d75..429e6aa01f 100644
--- a/src/lib/elementary/elm_config.h
+++ b/src/lib/elementary/elm_config.h
@@ -3,7 +3,7 @@
* @ingroup Elementary
*
* Elementary configuration is formed by a set options bounded to a
- * given @ref Profile profile, like @ref Theme theme, @ref Fingers
+ * given @ref Elm_Profile, like @ref Elm_Theme, @ref Elm_Fingers
* "finger size", etc. These are functions with which one synchronizes
* changes made to those values to the configuration storing files, de
* facto. You most probably don't want to use the functions in this
@@ -142,7 +142,7 @@ EAPI void elm_config_profile_list_free(Eina_List *l);
/**
* Return if a profile of the given name exists
- *
+ *
* @return EINA_TRUE if the profile exists, or EINA_FALSE if not
* @param profile The profile's name
* @ingroup Elm_Profile
@@ -170,7 +170,7 @@ EAPI void elm_config_profile_set(const char *profile);
* This will take the current in-memory config and write it out to the named
* profile specified by @p profile. This will not change profile for the
* application or make other processes switch profile.
- *
+ *
* @param profile The profile's name
* @ingroup Elm_Profile
*
@@ -304,7 +304,7 @@ EAPI void elm_config_scroll_page_scroll_friction_set(double friction);
*
* @return @c EINA_TRUE if context menu is disabled, otherwise @c EINA_FALSE.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
* @since 1.17
*/
EAPI Eina_Bool elm_config_context_menu_disabled_get(void);
@@ -315,7 +315,7 @@ EAPI Eina_Bool elm_config_context_menu_disabled_get(void);
* @param disabled disable context menu if @c EINA_TRUE, enable otherwise
*
* @see elm_config_context_menu_disabled_get()
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
* @since 1.17
*/
EAPI void elm_config_context_menu_disabled_set(Eina_Bool disabled);
@@ -554,7 +554,7 @@ EAPI void elm_config_scroll_thumbscroll_sensitivity_friction_set(double
* Get the smooth start mode for scrolling with your finger
*
* @return smooth scroll flag
- *
+ *
* @see elm_config_scroll_thumbscroll_smooth_start_set()
*
* @since 1.16
@@ -568,9 +568,9 @@ EAPI Eina_Bool elm_config_scroll_thumbscroll_smooth_start_get(void);
* This enabled finger scrolling to scroll from the currunt point rather than
* jumping and playing catch-up to make start of scrolling look smoother once
* the finger or mouse goes past the threshold.
- *
+ *
* @param enable The enabled state of the smooth scroller
- *
+ *
* @see elm_config_scroll_thumbscroll_smooth_start_get()
*
* @since 1.16
@@ -582,7 +582,7 @@ EAPI void elm_config_scroll_thumbscroll_smooth_start_set(Eina_Bool enabl
* Get the value of this option
*
* @return State of this option
- *
+ *
* @see elm_config_scroll_animation_disabled_set()
*
* @since 1.18
@@ -595,21 +595,21 @@ EAPI Eina_Bool elm_config_scroll_animation_disabled_get(void);
*
* This option disables timed animations during scrolling and forces scroll actions
* to be performed immediately.
- *
+ *
* @param disable The state of this option
- *
+ *
* @see elm_config_scroll_animation_disabled_get()
*
* @since 1.18
* @ingroup Elm_Scrolling
*/
-EAPI void elm_config_scroll_animation_disabled_set(Eina_Bool enable);
+EAPI void elm_config_scroll_animation_disabled_set(Eina_Bool disable);
/**
* Get the value of this option
*
* @return State of this option
- *
+ *
* @see elm_config_scroll_accel_factor_set()
*
* @since 1.18
@@ -623,12 +623,12 @@ EAPI double elm_config_scroll_accel_factor_get(void);
* Using a mouse wheel or touchpad to scroll will result in events
* being processed. If events occur quickly, the scroll amount will
* be multiplied by this value to accelerate the scrolling.
- *
+ *
* @param factor The value of this option from 0.0 to 10.0
*
* @see elm_config_scroll_accel_factor_get()
* @note Set 0.0 to disable acceleration
- *
+ *
* @since 1.18
* @ingroup Elm_Scrolling
*/
@@ -652,11 +652,11 @@ EAPI double elm_config_scroll_thumbscroll_smooth_amount_get(void);
* Scrolling with your finger can be smoothed out and the amount to smooth
* is determined by this parameter. 0.0 means to not smooth at all and
* 1.0 is to smooth as much as possible.
- *
+ *
* @param amount the amount to smooth from 0.0 to 1.0 with 0.0 being none
*
* @see elm_config_thumbscroll_acceleration_threshold_set()
- *
+ *
* @since 1.16
* @ingroup Elm_Scrolling
*/
@@ -680,11 +680,11 @@ EAPI double elm_config_scroll_thumbscroll_smooth_time_window_get(void);
* Scrolling with your finger can be smoothed out and the window of time
* to look at is determined by this config. The value is in seconds and
* is from 0.0 to 1.0
- *
+ *
* @param amount the time window in seconds (between 0.0 and 1.0)
*
* @see elm_config_scroll_thumbscroll_smooth_time_window_get()
- *
+ *
* @since 1.16
* @ingroup Elm_Scrolling
*/
@@ -763,7 +763,7 @@ EAPI double elm_config_scroll_thumbscroll_momentum_animation_duration_min_
/**
* Set the min limit for the momentum animation duration(unit:second)
*
- * @param the thumb scroll momentum animation duration min limit
+ * @param min the thumb scroll momentum animation duration min limit
*
* @see elm_config_scroll_thumbscroll_acceleration_weight_set()
* @ingroup Elm_Scrolling
@@ -782,7 +782,7 @@ EAPI double elm_config_scroll_thumbscroll_momentum_animation_duration_max_
/**
* Set the max limit for the momentum animation duration(unit:second)
*
- * @param the thumb scroll momentum animation duration max limit
+ * @param max the thumb scroll momentum animation duration max limit
*
* @see elm_config_scroll_thumbscroll_momentum_animation_duration_max_limit_get()
* @ingroup Elm_Scrolling
@@ -931,7 +931,6 @@ EAPI void elm_config_focus_autoscroll_mode_set(Elm_Focus_Autoscroll_Mode
/**
* Sets the slider's indicator visible mode.
*
- * @param obj The slider object.
* @param mode Elm_Slider_Indicator_Visible_Mode.
* viewport.
*
@@ -943,7 +942,6 @@ EAPI void elm_config_slider_indicator_visible_mode_set(Elm_Slider_Indicator_Visi
/**
* Get the slider's indicator visible mode.
*
- * @param obj The slider object.
* @return @c ELM_SLIDER_INDICATOR_VISIBLE_MODE_DEFAULT if not set anything by the user.
* @c ELM_SLIDER_INDICATOR_VISIBLE_MODE_ALWAYS, ELM_SLIDER_INDICATOR_VISIBLE_MODE_ON_FOCUS,
* ELM_SLIDER_INDICATOR_VISIBLE_MODE_NONE if any of the above is set by user.
@@ -1097,7 +1095,7 @@ EAPI void elm_config_scale_set(double scale);
* Get the icon theme the user has set.
*
* This gets the global icon theme currently set or the default value
- * ELM_CONFIG_ICON_THEME_ELEMENTARY.
+ * #ELM_CONFIG_ICON_THEME_ELEMENTARY.
*
* @return the icon theme to use
* @ingroup Elm_Icon
@@ -1110,9 +1108,9 @@ EAPI const char *elm_config_icon_theme_get(void);
*
* This method will set the icon theme for all elm_icon_standard_set calls.
* Valid parameters are the name of an installed freedesktop.org icon theme
- * or ELM_CONFIG_ICON_THEME_ELEMENTARY for the built in theme.
+ * or #ELM_CONFIG_ICON_THEME_ELEMENTARY for the built in theme.
*
- * @param the name of a freedesktop.org icon theme or ELM_CONFIG_ICON_THEME_ELEMENTARY
+ * @param theme the name of a freedesktop.org icon theme or #ELM_CONFIG_ICON_THEME_ELEMENTARY
* @ingroup Elm_Icon
* @since 1.18
*/
@@ -1929,7 +1927,7 @@ EAPI const char *elm_config_indicator_service_get(int rotation);
* Get the duration for occurring long tap event of gesture layer.
*
* @return Timeout for long tap event of gesture layer.
- * @ingroup Elm_Gesture_Layer
+ * @ingroup Elm_Gesture_Layer_Group
* @since 1.8
*/
EAPI double elm_config_glayer_long_tap_start_timeout_get(void);
@@ -1938,7 +1936,7 @@ EAPI double elm_config_glayer_long_tap_start_timeout_get(void);
* Set the duration for occurring long tap event of gesture layer.
*
* @param long_tap_timeout Timeout for long tap event of gesture layer.
- * @ingroup Elm_Gesture_Layer
+ * @ingroup Elm_Gesture_Layer_Group
* @since 1.8
*/
EAPI void elm_config_glayer_long_tap_start_timeout_set(double long_tap_timeout);
@@ -1947,7 +1945,7 @@ EAPI void elm_config_glayer_long_tap_start_timeout_set(double long_tap_timeout
* Get the duration for occurring double tap event of gesture layer.
*
* @return Timeout for double tap event of gesture layer.
- * @ingroup Elm_Gesture_Layer
+ * @ingroup Elm_Gesture_Layer_Group
* @since 1.8
*/
EAPI double elm_config_glayer_double_tap_timeout_get(void);
@@ -1956,7 +1954,7 @@ EAPI double elm_config_glayer_double_tap_timeout_get(void);
* Set the duration for occurring double tap event of gesture layer.
*
* @param double_tap_timeout Timeout for double tap event of gesture layer.
- * @ingroup Elm_Gesture_Layer
+ * @ingroup Elm_Gesture_Layer_Group
* @since 1.8
*/
EAPI void elm_config_glayer_double_tap_timeout_set(double double_tap_timeout);
@@ -2370,104 +2368,6 @@ EAPI double elm_config_drag_anim_duration_get(void);
*/
EAPI void elm_config_drag_anim_duration_set(double set);
-/* new efl.config interface helpers in C */
-
-/* FIXME these depend on stuff from Efl.h but this is included before that */
-#ifdef EFL_BETA_API_SUPPORT
-
-static inline Eina_Bool
-efl_config_bool_set(Efl_Config *obj, const char * name, Eina_Bool val)
-{
- Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_UCHAR);
- Eina_Bool b;
- eina_value_set(v, val);
- b = efl_config_set(obj, name, v);
- eina_value_free(v);
- return b;
-}
-
-static inline Eina_Bool
-efl_config_bool_get(const Efl_Config *obj, const char * name)
-{
- Eina_Value *v = efl_config_get(obj, name);
- Eina_Bool b = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_UCHAR)
- eina_value_get(v, &b);
- eina_value_free(v);
- return b;
-}
-
-static inline Eina_Bool
-efl_config_int_set(Efl_Config *obj, const char * name, int val)
-{
- Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_INT);
- Eina_Bool b;
- eina_value_set(v, val);
- b = efl_config_set(obj, name, v);
- eina_value_free(v);
- return b;
-}
-
-static inline int
-efl_config_int_get(const Efl_Config *obj, const char * name)
-{
- Eina_Value *v = efl_config_get(obj, name);
- int b = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_INT)
- eina_value_get(v, &b);
- eina_value_free(v);
- return b;
-}
-
-static inline Eina_Bool
-efl_config_double_set(Efl_Config *obj, const char * name, double val)
-{
- Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_DOUBLE);
- Eina_Bool b;
- eina_value_set(v, val);
- b = efl_config_set(obj, name, v);
- eina_value_free(v);
- return b;
-}
-
-static inline double
-efl_config_double_get(const Efl_Config *obj, const char * name)
-{
- Eina_Value *v = efl_config_get(obj, name);
- double b = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_DOUBLE)
- eina_value_get(v, &b);
- eina_value_free(v);
- return b;
-}
-
-static inline Eina_Bool
-efl_config_string_set(Efl_Config *obj, const char *name, const char *val)
-{
- Eina_Value *v = eina_value_new(EINA_VALUE_TYPE_STRING);
- Eina_Bool b;
- eina_value_set(v, val);
- b = efl_config_set(obj, name, v);
- eina_value_free(v);
- return b;
-}
-
-static inline Eina_Stringshare *
-efl_config_string_get(const Efl_Config *obj, const char *name)
-{
- Eina_Value *v = efl_config_get(obj, name);
- Eina_Stringshare *s = 0;
- if (eina_value_type_get(v) == EINA_VALUE_TYPE_STRING)
- {
- const char *b = 0;
- eina_value_get(v, &b);
- s = eina_stringshare_add(b);
- }
- eina_value_free(v);
- return s;
-}
-
-#endif
/**
* @}
diff --git a/src/lib/elementary/elm_conformant_eo.h b/src/lib/elementary/elm_conformant_eo.h
index e3f449f4e4..7860da1862 100644
--- a/src/lib/elementary/elm_conformant_eo.h
+++ b/src/lib/elementary/elm_conformant_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Conformant;
*/
#define ELM_CONFORMANT_CLASS elm_conformant_class_get()
-EWAPI const Efl_Class *elm_conformant_class_get(void);
+EWAPI const Efl_Class *elm_conformant_class_get(void) EINA_CONST;
EWAPI extern const Efl_Event_Description _ELM_CONFORMANT_EVENT_VIRTUALKEYPAD_STATE_ON;
diff --git a/src/lib/elementary/elm_ctxpopup_eo.h b/src/lib/elementary/elm_ctxpopup_eo.h
index 78e8ad0a11..44a78d88b1 100644
--- a/src/lib/elementary/elm_ctxpopup_eo.h
+++ b/src/lib/elementary/elm_ctxpopup_eo.h
@@ -13,7 +13,7 @@ typedef Eo Elm_Ctxpopup;
/** Direction in which to show the popup.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
typedef enum
{
@@ -33,11 +33,11 @@ typedef enum
#endif
/** Elementary context popup class
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
#define ELM_CTXPOPUP_CLASS elm_ctxpopup_class_get()
-EWAPI const Efl_Class *elm_ctxpopup_class_get(void);
+EWAPI const Efl_Class *elm_ctxpopup_class_get(void) EINA_CONST;
/**
* @brief Get the selected item in the widget.
@@ -46,7 +46,7 @@ EWAPI const Efl_Class *elm_ctxpopup_class_get(void);
*
* @return The selected item or @c null.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_selected_item_get(const Eo *obj);
@@ -57,7 +57,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_selected_item_get(const Eo *obj);
*
* @return The first item or @c null.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_first_item_get(const Eo *obj);
@@ -68,7 +68,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_first_item_get(const Eo *obj);
*
* @return The last item or @c null.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_last_item_get(const Eo *obj);
@@ -79,7 +79,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_last_item_get(const Eo *obj);
*
* @return const list to widget items
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI const Eina_List *elm_obj_ctxpopup_items_get(const Eo *obj);
@@ -89,7 +89,7 @@ EOAPI const Eina_List *elm_obj_ctxpopup_items_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] horizontal @c true for horizontal mode, @c false for vertical.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI void elm_obj_ctxpopup_horizontal_set(Eo *obj, Eina_Bool horizontal);
@@ -102,7 +102,7 @@ EOAPI void elm_obj_ctxpopup_horizontal_set(Eo *obj, Eina_Bool horizontal);
*
* @return @c true for horizontal mode, @c false for vertical.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Eina_Bool elm_obj_ctxpopup_horizontal_get(const Eo *obj);
@@ -124,7 +124,7 @@ EOAPI Eina_Bool elm_obj_ctxpopup_horizontal_get(const Eo *obj);
*
* @since 1.9
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI void elm_obj_ctxpopup_auto_hide_disabled_set(Eo *obj, Eina_Bool disabled);
@@ -139,7 +139,7 @@ EOAPI void elm_obj_ctxpopup_auto_hide_disabled_set(Eo *obj, Eina_Bool disabled);
*
* @since 1.9
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Eina_Bool elm_obj_ctxpopup_auto_hide_disabled_get(const Eo *obj);
@@ -156,7 +156,7 @@ EOAPI Eina_Bool elm_obj_ctxpopup_auto_hide_disabled_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] parent The parent to use.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI void elm_obj_ctxpopup_hover_parent_set(Eo *obj, Efl_Canvas_Object *parent);
@@ -169,7 +169,7 @@ EOAPI void elm_obj_ctxpopup_hover_parent_set(Eo *obj, Efl_Canvas_Object *parent)
*
* @return The parent to use.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Efl_Canvas_Object *elm_obj_ctxpopup_hover_parent_get(const Eo *obj);
@@ -188,7 +188,7 @@ EOAPI Efl_Canvas_Object *elm_obj_ctxpopup_hover_parent_get(const Eo *obj);
* @param[in] third 3th priority of direction
* @param[in] fourth 4th priority of direction
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI void elm_obj_ctxpopup_direction_priority_set(Eo *obj, Elm_Ctxpopup_Direction first, Elm_Ctxpopup_Direction second, Elm_Ctxpopup_Direction third, Elm_Ctxpopup_Direction fourth);
@@ -203,7 +203,7 @@ EOAPI void elm_obj_ctxpopup_direction_priority_set(Eo *obj, Elm_Ctxpopup_Directi
* @param[out] third 3th priority of direction
* @param[out] fourth 4th priority of direction
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI void elm_obj_ctxpopup_direction_priority_get(const Eo *obj, Elm_Ctxpopup_Direction *first, Elm_Ctxpopup_Direction *second, Elm_Ctxpopup_Direction *third, Elm_Ctxpopup_Direction *fourth);
@@ -216,7 +216,7 @@ EOAPI void elm_obj_ctxpopup_direction_priority_get(const Eo *obj, Elm_Ctxpopup_D
*
* @return Direction
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Ctxpopup_Direction elm_obj_ctxpopup_direction_get(const Eo *obj);
@@ -228,13 +228,13 @@ EOAPI Elm_Ctxpopup_Direction elm_obj_ctxpopup_direction_get(const Eo *obj);
* be emitted.
* @param[in] obj The object.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI void elm_obj_ctxpopup_dismiss(Eo *obj);
/** Clear all items in the given ctxpopup object.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI void elm_obj_ctxpopup_clear(Eo *obj);
@@ -254,7 +254,7 @@ EOAPI void elm_obj_ctxpopup_clear(Eo *obj);
*
* @since 1.21
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_insert_before(Eo *obj, Elm_Widget_Item *before, const char *label, Efl_Canvas_Object *icon, Evas_Smart_Cb func, const void *data);
@@ -274,7 +274,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_insert_before(Eo *obj, Elm_Widget_I
*
* @since 1.21
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_insert_after(Eo *obj, Elm_Widget_Item *after, const char *label, Efl_Canvas_Object *icon, Evas_Smart_Cb func, const void *data);
@@ -294,7 +294,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_insert_after(Eo *obj, Elm_Widget_It
*
* @return A handle to the item added or @c null, on errors.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_append(Eo *obj, const char *label, Efl_Canvas_Object *icon, Evas_Smart_Cb func, const void *data);
@@ -316,7 +316,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_append(Eo *obj, const char *label,
*
* @since 1.11
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_prepend(Eo *obj, const char *label, Efl_Canvas_Object *icon, Evas_Smart_Cb func, const void *data);
@@ -324,7 +324,7 @@ EWAPI extern const Efl_Event_Description _ELM_CTXPOPUP_EVENT_DISMISSED;
/** Called when context popup was dismissed
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
#define ELM_CTXPOPUP_EVENT_DISMISSED (&(_ELM_CTXPOPUP_EVENT_DISMISSED))
@@ -333,7 +333,7 @@ EWAPI extern const Efl_Event_Description _ELM_CTXPOPUP_EVENT_GEOMETRY_UPDATE;
/** Called when context popup geometry was updated
* @return const Eina_Rect *
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
#define ELM_CTXPOPUP_EVENT_GEOMETRY_UPDATE (&(_ELM_CTXPOPUP_EVENT_GEOMETRY_UPDATE))
diff --git a/src/lib/elementary/elm_ctxpopup_eo.legacy.h b/src/lib/elementary/elm_ctxpopup_eo.legacy.h
index 74422ac22e..1754b76dd2 100644
--- a/src/lib/elementary/elm_ctxpopup_eo.legacy.h
+++ b/src/lib/elementary/elm_ctxpopup_eo.legacy.h
@@ -13,7 +13,7 @@ typedef Eo Elm_Ctxpopup;
/** Direction in which to show the popup.
*
- * @ingroup Elm_Ctxpopup
+ * @ingroup Elm_Ctxpopup_Group
*/
typedef enum
{
diff --git a/src/lib/elementary/elm_ctxpopup_item_eo.h b/src/lib/elementary/elm_ctxpopup_item_eo.h
index 1e8d30d650..aeb5141fa7 100644
--- a/src/lib/elementary/elm_ctxpopup_item_eo.h
+++ b/src/lib/elementary/elm_ctxpopup_item_eo.h
@@ -13,13 +13,21 @@ typedef Eo Elm_Ctxpopup_Item;
#endif
-/** Elementary context popup item class
+/**
+ * Elementary context popup item class
+ *
+ * @defgroup Elm_Ctxpopup_Item_Group
+ * @ingroup Elm_Ctxpopup_Group
+ */
+
+/**
+ * @brief Get the context popup item class
*
- * @ingroup Elm_Ctxpopup_Item
+ * @ingroup Elm_Ctxpopup_Item_Group
*/
#define ELM_CTXPOPUP_ITEM_CLASS elm_ctxpopup_item_class_get()
-EWAPI const Efl_Class *elm_ctxpopup_item_class_get(void);
+EWAPI const Efl_Class *elm_ctxpopup_item_class_get(void) EINA_CONST;
/**
* @brief Get the item before this one in the widget's list of items.
@@ -31,7 +39,7 @@ EWAPI const Efl_Class *elm_ctxpopup_item_class_get(void);
* @return The item before the object in its parent's list. If there is no
* previous item or in case of error, @c null is returned.
*
- * @ingroup Elm_Ctxpopup_Item
+ * @ingroup Elm_Ctxpopup_Item_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_prev_get(const Eo *obj);
@@ -45,7 +53,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_prev_get(const Eo *obj);
* @return The item after the object in its parent's list. If there is no next
* item or in case of error, @c null is returned.
*
- * @ingroup Elm_Ctxpopup_Item
+ * @ingroup Elm_Ctxpopup_Item_Group
*/
EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_next_get(const Eo *obj);
@@ -66,7 +74,7 @@ EOAPI Elm_Widget_Item *elm_obj_ctxpopup_item_next_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] selected The selection state.
*
- * @ingroup Elm_Ctxpopup_Item
+ * @ingroup Elm_Ctxpopup_Item_Group
*/
EOAPI void elm_obj_ctxpopup_item_selected_set(Eo *obj, Eina_Bool selected);
@@ -79,7 +87,7 @@ EOAPI void elm_obj_ctxpopup_item_selected_set(Eo *obj, Eina_Bool selected);
*
* @return The selection state.
*
- * @ingroup Elm_Ctxpopup_Item
+ * @ingroup Elm_Ctxpopup_Item_Group
*/
EOAPI Eina_Bool elm_obj_ctxpopup_item_selected_get(const Eo *obj);
@@ -90,7 +98,7 @@ EOAPI Eina_Bool elm_obj_ctxpopup_item_selected_get(const Eo *obj);
* @param[in] func Smart callback function
* @param[in] data Data pointer
*
- * @ingroup Elm_Ctxpopup_Item
+ * @ingroup Elm_Ctxpopup_Item_Group
*/
EOAPI void elm_obj_ctxpopup_item_init(Eo *obj, Evas_Smart_Cb func, const void *data);
diff --git a/src/lib/elementary/elm_datetime.h b/src/lib/elementary/elm_datetime.h
index 73855925e1..e88a896b76 100644
--- a/src/lib/elementary/elm_datetime.h
+++ b/src/lib/elementary/elm_datetime.h
@@ -174,11 +174,11 @@
*
* <b>export ELM_MODULES="datetime_input_ctxpopup>datetime/api"</b>
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for datetime objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @b "changed" - whenever Datetime field value is changed, this
* signal is sent.
* @li @b "language,changed" - whenever system locale changes, this
@@ -274,7 +274,7 @@ EAPI const char *elm_datetime_format_get(const Evas_Object *obj);
*
* There is no provision to set the limits of AM/PM field.
*
- * @param[in] fieldtype Type of the field. #ELM_DATETIME_YEAR etc.
+ * @param[in] type Type of the field. #ELM_DATETIME_YEAR etc.
* @param[in] min Reference to field's minimum value.
* @param[in] max Reference to field's maximum value.
*
diff --git a/src/lib/elementary/elm_dayselector.h b/src/lib/elementary/elm_dayselector.h
index b96967d194..b6de2b599b 100644
--- a/src/lib/elementary/elm_dayselector.h
+++ b/src/lib/elementary/elm_dayselector.h
@@ -54,11 +54,11 @@
* the elm_object_part_content_set/get APIs thus providing a way to handle
* the different check styles for individual days.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for dayselector objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "dayselector,changed" - when the user changes the state of a day.
* @li @c "language,changed" - the program's language changed
*
diff --git a/src/lib/elementary/elm_dayselector_eo.h b/src/lib/elementary/elm_dayselector_eo.h
index 02e3d6fd10..23d5f368e5 100644
--- a/src/lib/elementary/elm_dayselector_eo.h
+++ b/src/lib/elementary/elm_dayselector_eo.h
@@ -41,7 +41,7 @@ typedef enum
*/
#define ELM_DAYSELECTOR_CLASS elm_dayselector_class_get()
-EWAPI const Efl_Class *elm_dayselector_class_get(void);
+EWAPI const Efl_Class *elm_dayselector_class_get(void) EINA_CONST;
/**
* @brief Set the starting day of Dayselector.
diff --git a/src/lib/elementary/elm_dayselector_item_eo.h b/src/lib/elementary/elm_dayselector_item_eo.h
index 192c5b41a4..6cc03613f8 100644
--- a/src/lib/elementary/elm_dayselector_item_eo.h
+++ b/src/lib/elementary/elm_dayselector_item_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Dayselector_Item;
*/
#define ELM_DAYSELECTOR_ITEM_CLASS elm_dayselector_item_class_get()
-EWAPI const Efl_Class *elm_dayselector_item_class_get(void);
+EWAPI const Efl_Class *elm_dayselector_item_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_dbus_menu.c b/src/lib/elementary/elm_dbus_menu.c
index 7d1d950986..96f863079a 100644
--- a/src/lib/elementary/elm_dbus_menu.c
+++ b/src/lib/elementary/elm_dbus_menu.c
@@ -213,7 +213,6 @@ _property_exists(Elm_Menu_Item_Data *item,
return EINA_FALSE;
}
- ERR("Invalid code path");
return EINA_FALSE;
}
diff --git a/src/lib/elementary/elm_deprecated.h b/src/lib/elementary/elm_deprecated.h
index a8dd8e2ed7..f9955f2ec4 100644
--- a/src/lib/elementary/elm_deprecated.h
+++ b/src/lib/elementary/elm_deprecated.h
@@ -68,7 +68,7 @@ EINA_DEPRECATED EAPI Eina_Bool elm_scrolled_entry_autosave_get(const Evas_Obj
*
* @deprecated
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EINA_DEPRECATED EAPI void elm_scrolled_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly);
@@ -81,7 +81,7 @@ EINA_DEPRECATED EAPI void elm_scrolled_entry_cnp_textonly_set(Evas_Objec
*
* @deprecated
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EINA_DEPRECATED EAPI Eina_Bool elm_scrolled_entry_cnp_textonly_get(Evas_Object *obj);
@@ -309,7 +309,7 @@ EINA_DEPRECATED EAPI void elm_map_markers_list_show(Eina_List *
* elm_map_marker_class_get_cb_set() should be used.
*
* This content is what will be inside the bubble that will be displayed
- * when an user clicks over the marker.
+ * when a user clicks over the marker.
*
* This returns the actual Evas object used to be placed inside
* the bubble. This may be @c NULL, as it may
@@ -680,7 +680,7 @@ EINA_DEPRECATED EAPI void elm_genlist_scroller_policy_get(const Evas_Ob
*
* @deprecated Use elm_scroller_policy_set() instead.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EINA_DEPRECATED EAPI void elm_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v);
@@ -696,7 +696,7 @@ EINA_DEPRECATED EAPI void elm_entry_scrollbar_policy_set(Evas_Object *obj, Elm_S
*
* @deprecated Use elm_scroller_bounce_set() instead.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EINA_DEPRECATED EAPI void elm_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
@@ -709,7 +709,7 @@ EINA_DEPRECATED EAPI void elm_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bou
*
* @deprecated Use elm_scroller_bounce_get() instead.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EINA_DEPRECATED EAPI void elm_entry_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
diff --git a/src/lib/elementary/elm_diskselector.h b/src/lib/elementary/elm_diskselector.h
index a6b40fb984..b2791a99c4 100644
--- a/src/lib/elementary/elm_diskselector.h
+++ b/src/lib/elementary/elm_diskselector.h
@@ -15,7 +15,7 @@
* It can act like a circular list with round mode and labels can be
* reduced for a defined length for side items.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for diskselectors.
*
@@ -26,7 +26,7 @@
* major release).
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "selected" - when item is selected, i.e. scroller stops.
* @li @c "clicked" - This is called when a user clicks an item (since 1.8)
* @li @c "scroll,anim,start" - scrolling animation has started
diff --git a/src/lib/elementary/elm_diskselector_eo.h b/src/lib/elementary/elm_diskselector_eo.h
index 1c95bc125c..1b8195d4a6 100644
--- a/src/lib/elementary/elm_diskselector_eo.h
+++ b/src/lib/elementary/elm_diskselector_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Diskselector;
*/
#define ELM_DISKSELECTOR_CLASS elm_diskselector_class_get()
-EWAPI const Efl_Class *elm_diskselector_class_get(void);
+EWAPI const Efl_Class *elm_diskselector_class_get(void) EINA_CONST;
/**
* @brief Set the side labels max length.
diff --git a/src/lib/elementary/elm_diskselector_item_eo.h b/src/lib/elementary/elm_diskselector_item_eo.h
index d322b4630a..f59515e3d2 100644
--- a/src/lib/elementary/elm_diskselector_item_eo.h
+++ b/src/lib/elementary/elm_diskselector_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Diskselector_Item;
*/
#define ELM_DISKSELECTOR_ITEM_CLASS elm_diskselector_item_class_get()
-EWAPI const Efl_Class *elm_diskselector_item_class_get(void);
+EWAPI const Efl_Class *elm_diskselector_item_class_get(void) EINA_CONST;
/**
* @brief Get the item before @c item in diskselector.
diff --git a/src/lib/elementary/elm_dnd.c b/src/lib/elementary/elm_dnd.c
new file mode 100644
index 0000000000..d0c309a84e
--- /dev/null
+++ b/src/lib/elementary/elm_dnd.c
@@ -0,0 +1,827 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+
+#include <Elementary.h>
+#include "elm_priv.h"
+
+int ELM_CNP_EVENT_SELECTION_CHANGED;
+
+typedef struct {
+ void *enter_data, *leave_data, *pos_data, *drop_data;
+ Elm_Drag_State enter_cb;
+ Elm_Drag_State leave_cb;
+ Elm_Drag_Pos pos_cb;
+ Elm_Drop_Cb drop_cb;
+ Eina_Array *mime_types;
+ Elm_Sel_Format format;
+ Elm_Xdnd_Action action;
+} Elm_Drop_Target;
+
+static int
+_default_seat(const Eo *obj)
+{
+ return evas_device_seat_id_get(evas_default_device_get(evas_object_evas_get(obj), EVAS_DEVICE_CLASS_SEAT));
+}
+
+static const char*
+_action_to_string(Elm_Xdnd_Action action)
+{
+ if (action == ELM_XDND_ACTION_COPY) return "copy";
+ if (action == ELM_XDND_ACTION_MOVE) return "move";
+ if (action == ELM_XDND_ACTION_PRIVATE) return "private";
+ if (action == ELM_XDND_ACTION_ASK) return "ask";
+ if (action == ELM_XDND_ACTION_LIST) return "list";
+ if (action == ELM_XDND_ACTION_LINK) return "link";
+ if (action == ELM_XDND_ACTION_DESCRIPTION) return "description";
+ return "unknown";
+}
+
+static Elm_Xdnd_Action
+_string_to_action(const char* action)
+{
+ if (eina_streq(action, "copy")) return ELM_XDND_ACTION_COPY;
+ else if (eina_streq(action, "move")) return ELM_XDND_ACTION_MOVE;
+ else if (eina_streq(action, "private")) return ELM_XDND_ACTION_PRIVATE;
+ else if (eina_streq(action, "ask")) return ELM_XDND_ACTION_ASK;
+ else if (eina_streq(action, "list")) return ELM_XDND_ACTION_LIST;
+ else if (eina_streq(action, "link")) return ELM_XDND_ACTION_LINK;
+ else if (eina_streq(action, "description")) return ELM_XDND_ACTION_DESCRIPTION;
+ return ELM_XDND_ACTION_UNKNOWN;
+}
+
+static void
+_enter_cb(void *data, const Efl_Event *ev)
+{
+ Elm_Drop_Target *target = data;
+
+ if (target->enter_cb)
+ target->enter_cb(target->enter_data, ev->object);
+}
+
+static void
+_leave_cb(void *data, const Efl_Event *ev)
+{
+ Elm_Drop_Target *target = data;
+
+ if (target->leave_cb)
+ target->leave_cb(target->leave_data, ev->object);
+}
+
+static void
+_pos_cb(void *data, const Efl_Event *ev)
+{
+ Elm_Drop_Target *target = data;
+ Efl_Ui_Drop_Event *event = ev->info;
+
+ if (target->pos_cb)
+ target->pos_cb(target->pos_data, ev->object, event->position.x, event->position.y, target->action); //FIXME action
+}
+
+static Eina_Value
+_deliver_content(Eo *obj, void *data, const Eina_Value value)
+{
+ Elm_Drop_Target *target = data;
+ Elm_Selection_Data sel_data;
+ Eina_Content *content = eina_value_to_content(&value);
+
+ sel_data.data = (void*)eina_content_data_get(content).mem;
+ sel_data.len = eina_content_data_get(content).len;
+ sel_data.action = target->action;
+ sel_data.format = target->format;
+
+ if (target->drop_cb)
+ target->drop_cb(target->drop_data, obj, &sel_data);
+
+ return EINA_VALUE_EMPTY;
+}
+
+static void
+_drop_cb(void *data, const Efl_Event *ev)
+{
+ Efl_Ui_Drop_Dropped_Event *event = ev->info;
+ Elm_Drop_Target *target = data;
+ target->action = _string_to_action(event->action);
+ efl_future_then(ev->object, efl_ui_dnd_drop_data_get(elm_widget_is(ev->object) ? ev->object : efl_ui_win_get(ev->object), _default_seat(ev->object), eina_array_iterator_new(target->mime_types)),
+ .success = _deliver_content,
+ .data = target
+ );
+}
+
+static void
+_inv_cb(void *data, const Efl_Event *ev)
+{
+ Elm_Drop_Target *target = data;
+ elm_drop_target_del(ev->object, target->format, target->enter_cb, target->enter_data, target->leave_cb,
+ target->leave_data, target->pos_cb, target->pos_data, target->drop_cb, target->drop_data);
+}
+
+EFL_CALLBACKS_ARRAY_DEFINE(drop_target_cb,
+ {EFL_UI_DND_EVENT_DROP_ENTERED, _enter_cb},
+ {EFL_UI_DND_EVENT_DROP_LEFT, _leave_cb},
+ {EFL_UI_DND_EVENT_DROP_POSITION_CHANGED, _pos_cb},
+ {EFL_UI_DND_EVENT_DROP_DROPPED, _drop_cb},
+ {EFL_EVENT_INVALIDATE, _inv_cb}
+)
+
+static Eina_Hash *target_register = NULL;
+
+static Eina_Array*
+_format_to_mime_array(Elm_Sel_Format format)
+{
+ Eina_Array *ret = eina_array_new(10);
+
+ if (format & ELM_SEL_FORMAT_TEXT)
+ {
+ eina_array_push(ret, "text/plain");
+ eina_array_push(ret, "text/plain;charset=utf-8");
+ eina_array_push(ret, "text/uri-list");
+ }
+ if (format & ELM_SEL_FORMAT_MARKUP)
+ eina_array_push(ret, "application/x-elementary-markup");
+ if (format & ELM_SEL_FORMAT_IMAGE)
+ {
+ eina_array_push(ret, "image/png");
+ eina_array_push(ret, "image/jpeg");
+ eina_array_push(ret, "image/x-ms-bmp");
+ eina_array_push(ret, "image/gif");
+ eina_array_push(ret, "image/tiff");
+ eina_array_push(ret, "image/svg+xml");
+ eina_array_push(ret, "image/x-xpixmap");
+ eina_array_push(ret, "image/x-tga");
+ eina_array_push(ret, "image/x-portable-pixmap");
+ }
+ if (format & ELM_SEL_FORMAT_VCARD)
+ eina_array_push(ret, "text/vcard");
+ if (format & ELM_SEL_FORMAT_HTML)
+ eina_array_push(ret, "text/html");
+
+ return ret;
+}
+
+EAPI Eina_Bool
+elm_drop_target_add(Evas_Object *obj, Elm_Sel_Format format,
+ Elm_Drag_State enter_cb, void *enter_data,
+ Elm_Drag_State leave_cb, void *leave_data,
+ Elm_Drag_Pos pos_cb, void *pos_data,
+ Elm_Drop_Cb drop_cb, void *drop_data)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+
+ Elm_Drop_Target *target = calloc(1, sizeof(Elm_Drop_Target));
+ target->enter_cb = enter_cb;
+ target->enter_data = enter_data;
+ target->leave_cb = leave_cb;
+ target->leave_data = leave_data;
+ target->pos_cb = pos_cb;
+ target->pos_data = pos_data;
+ target->drop_cb = drop_cb;
+ target->drop_data = drop_data;
+ target->mime_types = _format_to_mime_array(format);
+ target->format = format;
+
+ efl_event_callback_array_add(obj, drop_target_cb(), target);
+ if (!efl_isa(obj, EFL_UI_WIDGET_CLASS))
+ _drop_event_register(obj); //this is ensuring that we are also supporting none widgets
+ if (!target_register)
+ target_register = eina_hash_pointer_new(NULL);
+ eina_hash_list_append(target_register, &obj, target);
+
+ return EINA_TRUE;
+}
+
+EAPI Eina_Bool
+elm_drop_target_del(Evas_Object *obj, Elm_Sel_Format format,
+ Elm_Drag_State enter_cb, void *enter_data,
+ Elm_Drag_State leave_cb, void *leave_data,
+ Elm_Drag_Pos pos_cb, void *pos_data,
+ Elm_Drop_Cb drop_cb, void *drop_data)
+{
+ Elm_Drop_Target *target;
+ Eina_List *n, *found = NULL;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+
+ if (!target_register)
+ return EINA_TRUE;
+ Eina_List *targets = eina_hash_find(target_register, &obj);
+
+ if (!targets)
+ return EINA_TRUE;
+
+ EINA_LIST_FOREACH(targets, n, target)
+ {
+ if (target->enter_cb == enter_cb && target->enter_data == enter_data &&
+ target->leave_cb == leave_cb && target->leave_data == leave_data &&
+ target->pos_cb == pos_cb && target->pos_data == pos_data &&
+ target->drop_cb == drop_cb && target->drop_data == drop_data &&
+ target->format == format)
+ {
+
+ found = n;
+ break;
+ }
+ }
+ if (found)
+ {
+ efl_event_callback_array_del(obj, drop_target_cb(), eina_list_data_get(found));
+ eina_hash_list_remove(target_register, &obj, target);
+ eina_array_free(target->mime_types);
+ _drop_event_unregister(obj); //this is ensuring that we are also supporting none widgets
+ free(target);
+ }
+
+ return EINA_TRUE;
+}
+
+struct _Item_Container_Drag_Info
+{ /* Info kept for containers to support drag */
+ Evas_Object *obj;
+ Ecore_Timer *tm; /* When this expires, start drag */
+ double anim_tm; /* Time period to set tm */
+ double tm_to_drag; /* Time period to set tm */
+ Elm_Xy_Item_Get_Cb itemgetcb;
+ Elm_Item_Container_Data_Get_Cb data_get;
+
+ Evas_Coord x_down; /* Mouse down x cord when drag starts */
+ Evas_Coord y_down; /* Mouse down y cord when drag starts */
+
+ /* Some extra information needed to impl default anim */
+ Evas *e;
+ Eina_List *icons; /* List of icons to animate (Anim_Icon) */
+ int final_icon_w; /* We need the w and h of the final icon for the animation */
+ int final_icon_h;
+ Ecore_Animator *ea;
+
+ Elm_Drag_User_Info user_info;
+};
+typedef struct _Item_Container_Drag_Info Item_Container_Drag_Info;
+
+struct _Anim_Icon
+{
+ int start_x;
+ int start_y;
+ int start_w;
+ int start_h;
+ Evas_Object *o;
+};
+typedef struct _Anim_Icon Anim_Icon;
+static Eina_List *cont_drag_tg = NULL; /* List of Item_Container_Drag_Info */
+
+static Eina_Bool elm_drag_item_container_del_internal(Evas_Object *obj, Eina_Bool full);
+static void _cont_obj_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info);
+static void _cont_obj_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info);
+static void _cont_obj_mouse_down(void *data, Evas *e, Evas_Object *obj EINA_UNUSED, void *event_info);
+
+static void
+_cont_drag_done_cb(void *data, Evas_Object *obj EINA_UNUSED)
+{
+ Item_Container_Drag_Info *st = data;
+ elm_widget_scroll_freeze_pop(st->obj);
+ if (st->user_info.dragdone)
+ st->user_info.dragdone(st->user_info.donecbdata, NULL, EINA_FALSE); /*FIXME*/
+}
+
+static Eina_Bool
+_cont_obj_drag_start(void *data)
+{ /* Start a drag-action when timer expires */
+ Item_Container_Drag_Info *st = data;
+ st->tm = NULL;
+ Elm_Drag_User_Info *info = &st->user_info;
+ if (info->dragstart) info->dragstart(info->startcbdata, st->obj);
+ elm_widget_scroll_freeze_push(st->obj);
+ evas_object_event_callback_del_full
+ (st->obj, EVAS_CALLBACK_MOUSE_MOVE, _cont_obj_mouse_move, st);
+ elm_drag_start( /* Commit the start only if data_get successful */
+ st->obj, info->format,
+ info->data, info->action,
+ info->createicon, info->createdata,
+ info->dragpos, info->dragdata,
+ info->acceptcb, info->acceptdata,
+ _cont_drag_done_cb, st);
+ ELM_SAFE_FREE(info->data, free);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static inline Eina_List *
+_anim_icons_make(Eina_List *icons)
+{ /* Make local copies of all icons, add them to list */
+ Eina_List *list = NULL, *itr;
+ Evas_Object *o;
+
+ EINA_LIST_FOREACH(icons, itr, o)
+ { /* Now add icons to animation window */
+ Anim_Icon *st = calloc(1, sizeof(*st));
+
+ if (!st)
+ {
+ ERR("Failed to allocate memory for icon!");
+ continue;
+ }
+
+ evas_object_geometry_get(o, &st->start_x, &st->start_y, &st->start_w, &st->start_h);
+ evas_object_show(o);
+ st->o = o;
+ list = eina_list_append(list, st);
+ }
+
+ return list;
+}
+
+static Eina_Bool
+_drag_anim_play(void *data, double pos)
+{ /* Impl of the animation of icons, called on frame time */
+ Item_Container_Drag_Info *st = data;
+ Eina_List *l;
+ Anim_Icon *sti;
+
+ if (st->ea)
+ {
+ if (pos > 0.99)
+ {
+ st->ea = NULL; /* Avoid deleting on mouse up */
+ EINA_LIST_FOREACH(st->icons, l, sti)
+ evas_object_hide(sti->o);
+
+ _cont_obj_drag_start(st); /* Start dragging */
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ Evas_Coord xm, ym;
+ evas_pointer_canvas_xy_get(st->e, &xm, &ym);
+ EINA_LIST_FOREACH(st->icons, l, sti)
+ {
+ int x, y, h, w;
+ w = sti->start_w + ((st->final_icon_w - sti->start_w) * pos);
+ h = sti->start_h + ((st->final_icon_h - sti->start_h) * pos);
+ x = sti->start_x - (pos * ((sti->start_x + (w/2) - xm)));
+ y = sti->start_y - (pos * ((sti->start_y + (h/2) - ym)));
+ evas_object_move(sti->o, x, y);
+ evas_object_resize(sti->o, w, h);
+ }
+
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static inline Eina_Bool
+_drag_anim_start(void *data)
+{ /* Start default animation */
+ Item_Container_Drag_Info *st = data;
+
+ st->tm = NULL;
+ /* Now we need to build an (Anim_Icon *) list */
+ st->icons = _anim_icons_make(st->user_info.icons);
+ if (st->user_info.createicon)
+ {
+ Evas_Object *temp_win = elm_win_add(NULL, "Temp", ELM_WIN_DND);
+ Evas_Object *final_icon = st->user_info.createicon(st->user_info.createdata, temp_win, NULL, NULL);
+ evas_object_geometry_get(final_icon, NULL, NULL, &st->final_icon_w, &st->final_icon_h);
+ evas_object_del(final_icon);
+ evas_object_del(temp_win);
+ }
+ st->ea = ecore_animator_timeline_add(st->anim_tm, _drag_anim_play, st);
+
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_cont_obj_anim_start(void *data)
+{ /* Start a drag-action when timer expires */
+ Item_Container_Drag_Info *st = data;
+ int xposret, yposret; /* Unused */
+ Elm_Object_Item *it = (st->itemgetcb) ?
+ (st->itemgetcb(st->obj, st->x_down, st->y_down, &xposret, &yposret))
+ : NULL;
+
+ st->tm = NULL;
+ st->user_info.format = ELM_SEL_FORMAT_TARGETS; /* Default */
+ st->icons = NULL;
+ st->user_info.data = NULL;
+ st->user_info.action = ELM_XDND_ACTION_COPY; /* Default */
+
+ if (!it) /* Failed to get mouse-down item, abort drag */
+ return ECORE_CALLBACK_CANCEL;
+
+ if (st->data_get)
+ { /* collect info then start animation or start dragging */
+ if (st->data_get( /* Collect drag info */
+ st->obj, /* The container object */
+ it, /* Drag started on this item */
+ &st->user_info))
+ {
+ if (st->user_info.icons)
+ _drag_anim_start(st);
+ else
+ {
+ if (EINA_DBL_NONZERO(st->anim_tm))
+ {
+ // even if we don't manage the icons animation, we have
+ // to wait until it is finished before beginning drag.
+ st->tm = ecore_timer_add(st->anim_tm, _cont_obj_drag_start, st);
+ }
+ else
+ _cont_obj_drag_start(st); /* Start dragging, no anim */
+ }
+ }
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static int
+_drag_item_container_cmp(const void *d1,
+ const void *d2)
+{
+ const Item_Container_Drag_Info *st = d1;
+ return (((uintptr_t) (st->obj)) - ((uintptr_t) d2));
+}
+
+void
+_anim_st_free(Item_Container_Drag_Info *st)
+{ /* Stops and free mem of ongoing animation */
+ if (st)
+ {
+ ELM_SAFE_FREE(st->ea, ecore_animator_del);
+ Anim_Icon *sti;
+
+ EINA_LIST_FREE(st->icons, sti)
+ {
+ evas_object_del(sti->o);
+ free(sti);
+ }
+
+ st->icons = NULL;
+ }
+}
+
+static void
+_cont_obj_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+{ /* Cancel any drag waiting to start on timeout */
+ Item_Container_Drag_Info *st = data;
+
+ if (((Evas_Event_Mouse_Up *)event_info)->button != 1)
+ return; /* We only process left-click at the moment */
+
+ evas_object_event_callback_del_full
+ (st->obj, EVAS_CALLBACK_MOUSE_MOVE, _cont_obj_mouse_move, st);
+ evas_object_event_callback_del_full
+ (st->obj, EVAS_CALLBACK_MOUSE_UP, _cont_obj_mouse_up, st);
+
+ ELM_SAFE_FREE(st->tm, ecore_timer_del);
+
+ _anim_st_free(st);
+}
+
+static void
+_cont_obj_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+{ /* Cancel any drag waiting to start on timeout */
+ if (((Evas_Event_Mouse_Move *)event_info)->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+ {
+ Item_Container_Drag_Info *st = data;
+
+ evas_object_event_callback_del_full
+ (st->obj, EVAS_CALLBACK_MOUSE_MOVE, _cont_obj_mouse_move, st);
+ evas_object_event_callback_del_full
+ (st->obj, EVAS_CALLBACK_MOUSE_UP, _cont_obj_mouse_up, st);
+ elm_drag_item_container_del_internal(obj, EINA_FALSE);
+
+ ELM_SAFE_FREE(st->tm, ecore_timer_del);
+
+ _anim_st_free(st);
+ }
+}
+
+static Eina_Bool
+elm_drag_item_container_del_internal(Evas_Object *obj, Eina_Bool full)
+{
+ Item_Container_Drag_Info *st =
+ eina_list_search_unsorted(cont_drag_tg, _drag_item_container_cmp, obj);
+
+ if (st)
+ {
+ ELM_SAFE_FREE(st->tm, ecore_timer_del); /* Cancel drag-start timer */
+
+ if (st->ea) /* Cancel ongoing default animation */
+ _anim_st_free(st);
+
+ if (full)
+ {
+ st->itemgetcb = NULL;
+ st->data_get = NULL;
+ evas_object_event_callback_del_full
+ (obj, EVAS_CALLBACK_MOUSE_DOWN, _cont_obj_mouse_down, st);
+
+ cont_drag_tg = eina_list_remove(cont_drag_tg, st);
+ ELM_SAFE_FREE(st->user_info.data, free);
+ free(st);
+ }
+
+ return EINA_TRUE;
+ }
+ return EINA_FALSE;
+}
+
+static void
+_cont_obj_mouse_down(void *data, Evas *e, Evas_Object *obj EINA_UNUSED, void *event_info)
+{ /* Launch a timer to start dragging */
+ Evas_Event_Mouse_Down *ev = event_info;
+ if (ev->button != 1)
+ return; /* We only process left-click at the moment */
+
+ Item_Container_Drag_Info *st = data;
+ evas_object_event_callback_add(st->obj, EVAS_CALLBACK_MOUSE_MOVE,
+ _cont_obj_mouse_move, st);
+
+ evas_object_event_callback_add(st->obj, EVAS_CALLBACK_MOUSE_UP,
+ _cont_obj_mouse_up, st);
+
+ ecore_timer_del(st->tm);
+
+ st->e = e;
+ st->x_down = ev->canvas.x;
+ st->y_down = ev->canvas.y;
+ st->tm = ecore_timer_add(st->tm_to_drag, _cont_obj_anim_start, st);
+}
+EAPI Eina_Bool
+elm_drag_item_container_del(Evas_Object *obj)
+{
+ return elm_drag_item_container_del_internal(obj, EINA_TRUE);
+}
+
+EAPI Eina_Bool
+elm_drag_item_container_add(Evas_Object *obj,
+ double anim_tm,
+ double tm_to_drag,
+ Elm_Xy_Item_Get_Cb itemgetcb,
+ Elm_Item_Container_Data_Get_Cb data_get)
+{
+ Item_Container_Drag_Info *st;
+
+ if (elm_drag_item_container_del_internal(obj, EINA_FALSE))
+ { /* Updating info of existing obj */
+ st = eina_list_search_unsorted(cont_drag_tg, _drag_item_container_cmp, obj);
+ if (!st) return EINA_FALSE;
+ }
+ else
+ {
+ st = calloc(1, sizeof(*st));
+ if (!st) return EINA_FALSE;
+
+ st->obj = obj;
+ cont_drag_tg = eina_list_append(cont_drag_tg, st);
+
+ /* Register for mouse callback for container to start/abort drag */
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
+ _cont_obj_mouse_down, st);
+ }
+
+ st->tm = NULL;
+ st->anim_tm = anim_tm;
+ st->tm_to_drag = tm_to_drag;
+ st->itemgetcb = itemgetcb;
+ st->data_get = data_get;
+ return EINA_TRUE;
+}
+
+static Eina_List *cont_drop_tg = NULL; /* List of Item_Container_Drop_Info */
+
+struct _Item_Container_Drop_Info
+{ /* Info kept for containers to support drop */
+ Evas_Object *obj;
+ Elm_Xy_Item_Get_Cb itemgetcb;
+ Elm_Drop_Item_Container_Cb dropcb;
+ Elm_Drag_Item_Container_Pos poscb;
+};
+typedef struct _Item_Container_Drop_Info Item_Container_Drop_Info;
+
+
+typedef struct
+{
+ Evas_Object *obj;
+ /* FIXME: Cache window */
+ Eina_Inlist *cbs_list; /* List of Dropable_Cbs * */
+ struct {
+ Evas_Coord x, y;
+ Eina_Bool in : 1;
+ const char *type;
+ Elm_Sel_Format format;
+ } last;
+} Dropable;
+
+static int
+_drop_item_container_cmp(const void *d1,
+ const void *d2)
+{
+ const Item_Container_Drop_Info *st = d1;
+ return (((uintptr_t) (st->obj)) - ((uintptr_t) d2));
+}
+
+static void
+_elm_item_container_pos_cb(void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y, Elm_Xdnd_Action action)
+{ /* obj is the container pointer */
+ Elm_Object_Item *it = NULL;
+ int xposret = 0;
+ int yposret = 0;
+
+ Item_Container_Drop_Info *st =
+ eina_list_search_unsorted(cont_drop_tg, _drop_item_container_cmp, obj);
+
+ if (st && st->poscb)
+ { /* Call container drop func with specific item pointer */
+ int xo = 0;
+ int yo = 0;
+
+ evas_object_geometry_get(obj, &xo, &yo, NULL, NULL);
+ if (st->itemgetcb)
+ it = st->itemgetcb(obj, x+xo, y+yo, &xposret, &yposret);
+
+ st->poscb(data, obj, it, x, y, xposret, yposret, action);
+ }
+}
+
+static Eina_Bool
+_elm_item_container_drop_cb(void *data, Evas_Object *obj , Elm_Selection_Data *ev)
+{ /* obj is the container pointer */
+ Elm_Object_Item *it = NULL;
+ int xposret = 0;
+ int yposret = 0;
+
+ Item_Container_Drop_Info *st =
+ eina_list_search_unsorted(cont_drop_tg, _drop_item_container_cmp, obj);
+
+ if (st && st->dropcb)
+ { /* Call container drop func with specific item pointer */
+ int xo = 0;
+ int yo = 0;
+
+ evas_object_geometry_get(obj, &xo, &yo, NULL, NULL);
+ if (st->itemgetcb)
+ it = st->itemgetcb(obj, ev->x+xo, ev->y+yo, &xposret, &yposret);
+
+ return st->dropcb(data, obj, it, ev, xposret, yposret);
+ }
+
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+elm_drop_item_container_del_internal(Evas_Object *obj, Eina_Bool full)
+{
+ Item_Container_Drop_Info *st =
+ eina_list_search_unsorted(cont_drop_tg, _drop_item_container_cmp, obj);
+
+ if (st)
+ {
+ // temp until st is stored inside data of obj.
+ //FIXME delete this drop container
+ st->itemgetcb= NULL;
+ st->poscb = NULL;
+ st->dropcb = NULL;
+
+ if (full)
+ {
+ cont_drop_tg = eina_list_remove(cont_drop_tg, st);
+ free(st);
+ }
+
+ return EINA_TRUE;
+ }
+
+ return EINA_FALSE;
+}
+
+EAPI Eina_Bool
+elm_drop_item_container_add(Evas_Object *obj,
+ Elm_Sel_Format format,
+ Elm_Xy_Item_Get_Cb itemgetcb,
+ Elm_Drag_State entercb, void *enterdata,
+ Elm_Drag_State leavecb, void *leavedata,
+ Elm_Drag_Item_Container_Pos poscb, void *posdata,
+ Elm_Drop_Item_Container_Cb dropcb, void *dropdata)
+{
+ Item_Container_Drop_Info *st;
+
+ if (elm_drop_item_container_del_internal(obj, EINA_FALSE))
+ { /* Updating info of existing obj */
+ st = eina_list_search_unsorted(cont_drop_tg, _drop_item_container_cmp, obj);
+ if (!st) return EINA_FALSE;
+ }
+ else
+ {
+ st = calloc(1, sizeof(*st));
+ if (!st) return EINA_FALSE;
+
+ st->obj = obj;
+ cont_drop_tg = eina_list_append(cont_drop_tg, st);
+ }
+
+ st->itemgetcb = itemgetcb;
+ st->poscb = poscb;
+ st->dropcb = dropcb;
+ elm_drop_target_add(obj, format,
+ entercb, enterdata,
+ leavecb, leavedata,
+ _elm_item_container_pos_cb, posdata,
+ _elm_item_container_drop_cb, dropdata);
+ return EINA_TRUE;
+}
+
+
+EAPI Eina_Bool
+elm_drop_item_container_del(Evas_Object *obj)
+{
+ return elm_drop_item_container_del_internal(obj, EINA_TRUE);
+}
+
+typedef struct {
+ void *dragdata, *acceptdata, *donecbdata;
+ Elm_Drag_Pos dragposcb;
+ Elm_Drag_Accept acceptcb;
+ Elm_Drag_State dragdonecb;
+} Elm_Drag_Data;
+
+static void
+_drag_finished_cb(void *data, const Efl_Event *ev)
+{
+ Elm_Drag_Data *dd = data;
+ Eina_Bool *accepted = ev->info;
+
+ if (dd->acceptcb)
+ dd->acceptcb(dd->acceptdata, ev->object, *accepted);
+
+ if (dd->dragdonecb)
+ dd->dragdonecb(dd->donecbdata, ev->object);
+
+ efl_event_callback_del(ev->object, EFL_UI_DND_EVENT_DRAG_FINISHED, _drag_finished_cb, dd);
+ free(dd);
+}
+
+EAPI Eina_Bool
+elm_drag_start(Evas_Object *obj, Elm_Sel_Format format,
+ const char *data, Elm_Xdnd_Action action,
+ Elm_Drag_Icon_Create_Cb createicon,
+ void *createdata,
+ Elm_Drag_Pos dragpos, void *dragdata,
+ Elm_Drag_Accept acceptcb, void *acceptdata,
+ Elm_Drag_State dragdone, void *donecbdata)
+{
+ Eina_Array *mime_types;
+ Eina_Content *content;
+ Efl_Content *ui;
+ int x, y, w, h;
+ Efl_Ui_Widget *widget;
+ Elm_Drag_Data *dd;
+ const char *str_action;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+
+ //it should return EINA_TRUE to keep backward compatibility
+ if (!data)
+ return EINA_TRUE;
+
+ str_action = _action_to_string(action);
+ dd = calloc(1, sizeof(Elm_Drag_Data));
+ dd->dragposcb = dragpos;
+ dd->dragdata = dragdata;
+ dd->acceptcb = acceptcb;
+ dd->acceptdata = acceptdata;
+ dd->dragdonecb = dragdone;
+ dd->donecbdata = donecbdata;
+ mime_types = _format_to_mime_array(format);
+ if (eina_array_count(mime_types) != 1)
+ {
+ WRN("You passed more than one format, this is not going to work well");
+ }
+ 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_object_geometry_get(widget, NULL, NULL, &w, &h);
+ evas_object_show(widget);
+ efl_content_set(ui, widget);
+ efl_gfx_entity_size_set(ui, EINA_SIZE2D(w, h));
+ eina_array_free(mime_types);
+
+ efl_event_callback_add(obj, EFL_UI_DND_EVENT_DRAG_FINISHED, _drag_finished_cb, dd);
+
+ return EINA_TRUE;
+}
+
+EAPI Eina_Bool
+elm_drag_cancel(Evas_Object *obj)
+{
+ efl_ui_dnd_drag_cancel(obj, _default_seat(obj));
+
+ return EINA_TRUE;
+}
+
+EAPI Eina_Bool
+elm_drag_action_set(Evas_Object *obj EINA_UNUSED, Elm_Xdnd_Action action EINA_UNUSED)
+{
+ ERR("This operation is not supported anymore.");
+ return EINA_FALSE;
+}
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index 826e2e0c91..6a82bff2e1 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -1628,7 +1628,7 @@ _selection_store(Elm_Sel_Type seltype,
if ((!sel) || (!sel[0])) return; /* avoid deleting our own selection */
elm_cnp_selection_set
- (obj, seltype, ELM_SEL_FORMAT_MARKUP, sel, strlen(sel));
+ (obj, seltype, ELM_SEL_FORMAT_MARKUP, sel, strlen(sel) + 1);
elm_cnp_selection_loss_callback_set(obj, seltype, _selection_clear, obj);
if (seltype == ELM_SEL_TYPE_CLIPBOARD)
eina_stringshare_replace(&sd->cut_sel, sel);
@@ -1731,7 +1731,7 @@ _menu_call(Evas_Object *obj)
const char *context_menu_orientation;
Eina_Bool ownersel;
- ownersel = elm_selection_selection_has_owner(obj);
+ ownersel = elm_cnp_clipboard_selection_has_owner(obj);
if (!sd->items)
{
/* prevent stupid blank hoversel */
@@ -2263,17 +2263,19 @@ _entry_changed_user_signal_cb(void *data,
Efl_Access_Text_Change_Info atspi_info;
if (edje_info && edje_info->insert)
{
- atspi_info.content = edje_info->change.insert.content;
+ atspi_info.content = elm_entry_markup_to_utf8(edje_info->change.insert.content);
atspi_info.pos = edje_info->change.insert.pos;
atspi_info.len = edje_info->change.insert.plain_length;
- efl_access_object_event_emit( data, EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_INSERTED, &atspi_info);
+ efl_access_object_event_emit(data, EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_INSERTED, &atspi_info);
+ free((void *)atspi_info.content);
}
else if (edje_info && !edje_info->insert)
{
- atspi_info.content = edje_info->change.del.content;
+ atspi_info.content = elm_entry_markup_to_utf8(edje_info->change.del.content);
atspi_info.pos = MIN(edje_info->change.del.start, edje_info->change.del.end);
atspi_info.len = MAX(edje_info->change.del.start, edje_info->change.del.end) - atspi_info.pos;
- efl_access_object_event_emit( data, EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_REMOVED, &atspi_info);
+ efl_access_object_event_emit(data, EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_REMOVED, &atspi_info);
+ free((void *)atspi_info.content);
}
}
}
@@ -2339,9 +2341,7 @@ _entry_selection_start_signal_cb(void *data,
if (entry != data) elm_entry_select_none(entry);
}
- Eina_Bool b_value = EINA_TRUE;
- efl_event_callback_legacy_call
- (data, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value);
+ evas_object_smart_callback_call(data, "selection,start", NULL);
elm_object_focus_set(data, EINA_TRUE);
}
@@ -2384,10 +2384,8 @@ _entry_selection_changed_signal_cb(void *data,
if (!sd) return;
sd->have_selection = EINA_TRUE;
- Efl_Text_Range range = {0};
//FIXME how to get selection range in legacy !?
- range.start = 0;
- range.end = 0;
+ Eina_Range range = EINA_RANGE_EMPTY();
efl_event_callback_legacy_call
(data, EFL_TEXT_INTERACTIVE_EVENT_SELECTION_CHANGED, &range);
// XXX: still try primary selection even if on wl in case it's
@@ -2411,9 +2409,7 @@ _entry_selection_cleared_signal_cb(void *data,
if (!sd->have_selection) return;
sd->have_selection = EINA_FALSE;
- Eina_Bool b_value = sd->have_selection;
- efl_event_callback_legacy_call
- (data, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value);
+ evas_object_smart_callback_call(data, "selection,cleared", NULL);
// XXX: still try primary selection even if on wl in case it's
// supported
// if (!_entry_win_is_wl(data))
@@ -4450,9 +4446,7 @@ _elm_entry_select_none(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd)
}
if (sd->have_selection)
{
- Eina_Bool b_value = sd->have_selection;
- efl_event_callback_legacy_call
- (obj, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value);
+ evas_object_smart_callback_call(obj, "selection,cleared", NULL);
}
sd->have_selection = EINA_FALSE;
@@ -5691,12 +5685,14 @@ _elm_entry_efl_access_text_character_count_get(const Eo *obj, Elm_Entry_Data *_p
return ret;
}
-EOLIAN static char*
-_elm_entry_efl_access_text_string_get(const Eo *obj, Elm_Entry_Data *_pd EINA_UNUSED, Efl_Access_Text_Granularity granularity, int *start_offset, int *end_offset)
+EOLIAN static void
+_elm_entry_efl_access_text_string_get(const Eo *obj, Elm_Entry_Data *_pd EINA_UNUSED, Efl_Access_Text_Granularity granularity, int *start_offset, int *end_offset, char **ret EFL_TRANSFER_OWNERSHIP)
{
Evas_Textblock_Cursor *cur = NULL, *cur2 = NULL;
Evas_Object *tblk;
- char *ret = NULL;
+
+ EINA_SAFETY_ON_NULL_RETURN(ret);
+ *ret = NULL;
tblk = elm_entry_textblock_get(obj);
if (!tblk) goto fail;
@@ -5754,26 +5750,26 @@ _elm_entry_efl_access_text_string_get(const Eo *obj, Elm_Entry_Data *_pd EINA_UN
if (end_offset) *end_offset = evas_textblock_cursor_pos_get(cur2);
- ret = evas_textblock_cursor_range_text_get(cur, cur2, EVAS_TEXTBLOCK_TEXT_PLAIN);
+ *ret = evas_textblock_cursor_range_text_get(cur, cur2, EVAS_TEXTBLOCK_TEXT_PLAIN);
evas_textblock_cursor_free(cur);
evas_textblock_cursor_free(cur2);
- if (ret && _pd->password)
+ if (*ret && _pd->password)
{
int i = 0;
- while (ret[i] != '\0')
- ret[i++] = ENTRY_PASSWORD_MASK_CHARACTER;
+ while (*ret[i] != '\0')
+ *ret[i++] = ENTRY_PASSWORD_MASK_CHARACTER;
}
- return ret;
+ return;
fail:
if (start_offset) *start_offset = -1;
if (end_offset) *end_offset = -1;
if (cur) evas_textblock_cursor_free(cur);
if (cur2) evas_textblock_cursor_free(cur2);
- return NULL;
+ *ret = NULL;
}
EOLIAN static char*
@@ -6067,26 +6063,29 @@ _elm_entry_efl_access_text_attribute_get(const Eo *obj, Elm_Entry_Data *_pd EINA
return EINA_FALSE;
}
-EOLIAN static Eina_List*
-_elm_entry_efl_access_text_text_attributes_get(const Eo *obj, Elm_Entry_Data *_pd EINA_UNUSED, int *start_offset, int *end_offset)
+EOLIAN static void
+_elm_entry_efl_access_text_text_attributes_get(const Eo *obj, Elm_Entry_Data *_pd EINA_UNUSED, int *start_offset, int *end_offset, Eina_List **ret EFL_TRANSFER_OWNERSHIP)
{
Evas_Object *txtblk;
Evas_Textblock_Cursor *cur1, *cur2;
- Eina_List *formats, *ret = NULL, *l;
+ Eina_List *formats, *l;
Evas_Object_Textblock_Node_Format *format;
Efl_Access_Text_Attribute *attr;
+ EINA_SAFETY_ON_NULL_RETURN(ret);
+ *ret = NULL;
+
txtblk = elm_entry_textblock_get(obj);
- if (!txtblk) return NULL;
+ if (!txtblk) return;
cur1 = evas_object_textblock_cursor_new(txtblk);
- if (!cur1) return NULL;
+ if (!cur1) return;
cur2 = evas_object_textblock_cursor_new(txtblk);
if (!cur2)
{
evas_textblock_cursor_free(cur1);
- return NULL;
+ return;
}
evas_textblock_cursor_pos_set(cur1, *start_offset);
@@ -6097,16 +6096,14 @@ _elm_entry_efl_access_text_text_attributes_get(const Eo *obj, Elm_Entry_Data *_p
evas_textblock_cursor_free(cur1);
evas_textblock_cursor_free(cur2);
- if (!formats) return NULL;
+ if (!formats) return;
EINA_LIST_FOREACH(formats, l , format)
{
attr = _textblock_node_format_to_atspi_text_attr(format);
if (!attr) continue;
- ret = eina_list_append(ret, attr);
+ *ret = eina_list_append(*ret, attr);
}
-
- return ret;
}
EOLIAN static Eina_List*
diff --git a/src/lib/elementary/elm_entry.h b/src/lib/elementary/elm_entry.h
index ba41964082..e4ce22b3d8 100644
--- a/src/lib/elementary/elm_entry.h
+++ b/src/lib/elementary/elm_entry.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Entry Entry
+ * @defgroup Elm_Entry_Group Entry
* @ingroup Elementary
*
* @image html entry_inheritance_tree.png
@@ -30,7 +30,7 @@
* This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for entry objects (since 1.8).
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base
* @ref Elm_Scroller widget also work for entries (since 1.8).
*
diff --git a/src/lib/elementary/elm_entry_common.h b/src/lib/elementary/elm_entry_common.h
index 4e807a3b32..6178cecb85 100644
--- a/src/lib/elementary/elm_entry_common.h
+++ b/src/lib/elementary/elm_entry_common.h
@@ -2,7 +2,7 @@
#define ELM_ENTRY_COMMON_H_
/**
- * @addtogroup Elm_Entry
+ * @addtogroup Elm_Entry_Group
*
* @{
*/
diff --git a/src/lib/elementary/elm_entry_eo.c b/src/lib/elementary/elm_entry_eo.c
index 2cdebe49ba..b993fd5fd7 100644
--- a/src/lib/elementary/elm_entry_eo.c
+++ b/src/lib/elementary/elm_entry_eo.c
@@ -904,13 +904,13 @@ const char *_elm_entry_efl_access_object_i18n_name_get(const Eo *obj, Elm_Entry_
char *_elm_entry_efl_access_text_access_text_get(const Eo *obj, Elm_Entry_Data *pd, int start_offset, int end_offset);
-char *_elm_entry_efl_access_text_string_get(const Eo *obj, Elm_Entry_Data *pd, Efl_Access_Text_Granularity granularity, int *start_offset, int *end_offset);
+void _elm_entry_efl_access_text_string_get(const Eo *obj, Elm_Entry_Data *pd, Efl_Access_Text_Granularity granularity, int *start_offset, int *end_offset, char **ret EFL_TRANSFER_OWNERSHIP);
Eina_Bool _elm_entry_efl_access_text_attribute_get(const Eo *obj, Elm_Entry_Data *pd, const char *name, int *start_offset, int *end_offset, char **value);
-Eina_List *_elm_entry_efl_access_text_text_attributes_get(const Eo *obj, Elm_Entry_Data *pd, int *start_offset, int *end_offset);
+void _elm_entry_efl_access_text_text_attributes_get(const Eo *obj, Elm_Entry_Data *pd, int *start_offset, int *end_offset, Eina_List **attributes);
Eina_List *_elm_entry_efl_access_text_default_attributes_get(const Eo *obj, Elm_Entry_Data *pd);
diff --git a/src/lib/elementary/elm_entry_eo.h b/src/lib/elementary/elm_entry_eo.h
index f762563fa7..43960893ba 100644
--- a/src/lib/elementary/elm_entry_eo.h
+++ b/src/lib/elementary/elm_entry_eo.h
@@ -15,11 +15,11 @@ typedef Eo Elm_Entry;
#endif
/** Elementary entry class
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_CLASS elm_entry_class_get()
-EWAPI const Efl_Class *elm_entry_class_get(void);
+EWAPI const Efl_Class *elm_entry_class_get(void) EINA_CONST;
/**
* @brief Enable or disable scrolling in entry
@@ -29,7 +29,7 @@ EWAPI const Efl_Class *elm_entry_class_get(void);
* @param[in] obj The object.
* @param[in] scroll @c true if it is to be scrollable, @c false otherwise.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_scrollable_set(Eo *obj, Eina_Bool scroll);
@@ -43,12 +43,12 @@ EOAPI void elm_obj_entry_scrollable_set(Eo *obj, Eina_Bool scroll);
*
* @return @c true if it is to be scrollable, @c false otherwise.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_scrollable_get(const Eo *obj);
/**
- * @brief Set the attribute to show the input panel in case of only an user's
+ * @brief Set the attribute to show the input panel in case of only a user's
* explicit Mouse Up event. It doesn't request to show the input panel even
* though it has focus.
*
@@ -58,12 +58,12 @@ EOAPI Eina_Bool elm_obj_entry_scrollable_get(const Eo *obj);
*
* @since 1.9
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_show_on_demand_set(Eo *obj, Eina_Bool ondemand);
/**
- * @brief Get the attribute to show the input panel in case of only an user's
+ * @brief Get the attribute to show the input panel in case of only a user's
* explicit Mouse Up event.
*
* @param[in] obj The object.
@@ -73,7 +73,7 @@ EOAPI void elm_obj_entry_input_panel_show_on_demand_set(Eo *obj, Eina_Bool ondem
*
* @since 1.9
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_input_panel_show_on_demand_get(const Eo *obj);
@@ -83,7 +83,7 @@ EOAPI Eina_Bool elm_obj_entry_input_panel_show_on_demand_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] disabled If @c true, the menu is disabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_context_menu_disabled_set(Eo *obj, Eina_Bool disabled);
@@ -95,7 +95,7 @@ EOAPI void elm_obj_entry_context_menu_disabled_set(Eo *obj, Eina_Bool disabled);
*
* @return If @c true, the menu is disabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_context_menu_disabled_get(const Eo *obj);
@@ -113,7 +113,7 @@ EOAPI Eina_Bool elm_obj_entry_context_menu_disabled_get(const Eo *obj);
* @param[in] cnp_mode One of #Elm_Cnp_Mode: #ELM_CNP_MODE_MARKUP,
* #ELM_CNP_MODE_NO_IMAGE, #ELM_CNP_MODE_PLAINTEXT.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cnp_mode_set(Eo *obj, Elm_Cnp_Mode cnp_mode);
@@ -128,7 +128,7 @@ EOAPI void elm_obj_entry_cnp_mode_set(Eo *obj, Elm_Cnp_Mode cnp_mode);
* @return One of #Elm_Cnp_Mode: #ELM_CNP_MODE_MARKUP, #ELM_CNP_MODE_NO_IMAGE,
* #ELM_CNP_MODE_PLAINTEXT.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Elm_Cnp_Mode elm_obj_entry_cnp_mode_get(const Eo *obj);
@@ -148,7 +148,7 @@ EOAPI Elm_Cnp_Mode elm_obj_entry_cnp_mode_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] format The file format
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_file_text_format_set(Eo *obj, Elm_Text_Format format);
@@ -160,7 +160,7 @@ EOAPI void elm_obj_entry_file_text_format_set(Eo *obj, Elm_Text_Format format);
* @param[in] obj The object.
* @param[in] lang Language to be set to the input panel.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_language_set(Eo *obj, Elm_Input_Panel_Lang lang);
@@ -171,7 +171,7 @@ EOAPI void elm_obj_entry_input_panel_language_set(Eo *obj, Elm_Input_Panel_Lang
*
* @return Language to be set to the input panel.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Elm_Input_Panel_Lang elm_obj_entry_input_panel_language_get(const Eo *obj);
@@ -181,7 +181,7 @@ EOAPI Elm_Input_Panel_Lang elm_obj_entry_input_panel_language_get(const Eo *obj)
* @param[in] obj The object.
* @param[in] disabled If @c true, the selection handlers are disabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_selection_handler_disabled_set(Eo *obj, Eina_Bool disabled);
@@ -192,7 +192,7 @@ EOAPI void elm_obj_entry_selection_handler_disabled_set(Eo *obj, Eina_Bool disab
*
* @return If @c true, the selection handlers are disabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_selection_handler_disabled_get(const Eo *obj);
@@ -204,7 +204,7 @@ EOAPI Eina_Bool elm_obj_entry_selection_handler_disabled_get(const Eo *obj);
*
* @since 1.8
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_layout_variation_set(Eo *obj, int variation);
@@ -217,7 +217,7 @@ EOAPI void elm_obj_entry_input_panel_layout_variation_set(Eo *obj, int variation
*
* @since 1.8
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI int elm_obj_entry_input_panel_layout_variation_get(const Eo *obj);
@@ -227,7 +227,7 @@ EOAPI int elm_obj_entry_input_panel_layout_variation_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] autocapital_type The type of autocapitalization.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_autocapital_type_set(Eo *obj, Elm_Autocapital_Type autocapital_type);
@@ -238,7 +238,7 @@ EOAPI void elm_obj_entry_autocapital_type_set(Eo *obj, Elm_Autocapital_Type auto
*
* @return The type of autocapitalization.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Elm_Autocapital_Type elm_obj_entry_autocapital_type_get(const Eo *obj);
@@ -258,7 +258,7 @@ EOAPI Elm_Autocapital_Type elm_obj_entry_autocapital_type_get(const Eo *obj);
* @param[in] editable If @c true, user input will be inserted in the entry, if
* not, the entry is read-only and no user input is allowed.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_editable_set(Eo *obj, Eina_Bool editable);
@@ -270,7 +270,7 @@ EOAPI void elm_obj_entry_editable_set(Eo *obj, Eina_Bool editable);
* @return If @c true, user input will be inserted in the entry, if not, the
* entry is read-only and no user input is allowed.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_editable_get(const Eo *obj);
@@ -285,7 +285,7 @@ EOAPI Eina_Bool elm_obj_entry_editable_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] style The style to use for the underlying hover.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_anchor_hover_style_set(Eo *obj, const char *style);
@@ -296,7 +296,7 @@ EOAPI void elm_obj_entry_anchor_hover_style_set(Eo *obj, const char *style);
*
* @return The style to use for the underlying hover.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI const char *elm_obj_entry_anchor_hover_style_get(const Eo *obj);
@@ -315,7 +315,7 @@ EOAPI const char *elm_obj_entry_anchor_hover_style_get(const Eo *obj);
* @param[in] single_line If @c true, the text in the entry will be on a single
* line.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_single_line_set(Eo *obj, Eina_Bool single_line);
@@ -326,7 +326,7 @@ EOAPI void elm_obj_entry_single_line_set(Eo *obj, Eina_Bool single_line);
*
* @return If @c true, the text in the entry will be on a single line.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_single_line_get(const Eo *obj);
@@ -339,7 +339,7 @@ EOAPI Eina_Bool elm_obj_entry_single_line_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] password If @c true, password mode is enabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_password_set(Eo *obj, Eina_Bool password);
@@ -350,7 +350,7 @@ EOAPI void elm_obj_entry_password_set(Eo *obj, Eina_Bool password);
*
* @return If @c true, password mode is enabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_password_get(const Eo *obj);
@@ -361,7 +361,7 @@ EOAPI Eina_Bool elm_obj_entry_password_get(const Eo *obj);
* @param[in] disabled The state to put in in: @c true for disabled, @c false
* for enabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_return_key_disabled_set(Eo *obj, Eina_Bool disabled);
@@ -373,7 +373,7 @@ EOAPI void elm_obj_entry_input_panel_return_key_disabled_set(Eo *obj, Eina_Bool
*
* @return The state to put in in: @c true for disabled, @c false for enabled.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_input_panel_return_key_disabled_get(const Eo *obj);
@@ -383,7 +383,7 @@ EOAPI Eina_Bool elm_obj_entry_input_panel_return_key_disabled_get(const Eo *obj)
* @param[in] obj The object.
* @param[in] auto_save Autosave the loaded file or not.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_autosave_set(Eo *obj, Eina_Bool auto_save);
@@ -394,7 +394,7 @@ EOAPI void elm_obj_entry_autosave_set(Eo *obj, Eina_Bool auto_save);
*
* @return Autosave the loaded file or not.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_autosave_get(const Eo *obj);
@@ -407,7 +407,7 @@ EOAPI Eina_Bool elm_obj_entry_autosave_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] parent The object to use as parent for the hover.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_anchor_hover_parent_set(Eo *obj, Efl_Canvas_Object *parent);
@@ -421,7 +421,7 @@ EOAPI void elm_obj_entry_anchor_hover_parent_set(Eo *obj, Efl_Canvas_Object *par
*
* @return The object to use as parent for the hover.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Efl_Canvas_Object *elm_obj_entry_anchor_hover_parent_get(const Eo *obj);
@@ -432,7 +432,7 @@ EOAPI Efl_Canvas_Object *elm_obj_entry_anchor_hover_parent_get(const Eo *obj);
* @param[in] prediction Whether the entry should allow to use the text
* prediction.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_prediction_allow_set(Eo *obj, Eina_Bool prediction);
@@ -443,7 +443,7 @@ EOAPI void elm_obj_entry_prediction_allow_set(Eo *obj, Eina_Bool prediction);
*
* @return Whether the entry should allow to use the text prediction.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_prediction_allow_get(const Eo *obj);
@@ -454,7 +454,7 @@ EOAPI Eina_Bool elm_obj_entry_prediction_allow_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] hints Input hint.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_hint_set(Eo *obj, Elm_Input_Hints hints);
@@ -465,7 +465,7 @@ EOAPI void elm_obj_entry_input_hint_set(Eo *obj, Elm_Input_Hints hints);
*
* @return Input hint.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Elm_Input_Hints elm_obj_entry_input_hint_get(const Eo *obj);
@@ -475,7 +475,7 @@ EOAPI Elm_Input_Hints elm_obj_entry_input_hint_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] layout Layout type.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_layout_set(Eo *obj, Elm_Input_Panel_Layout layout);
@@ -486,7 +486,7 @@ EOAPI void elm_obj_entry_input_panel_layout_set(Eo *obj, Elm_Input_Panel_Layout
*
* @return Layout type.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Elm_Input_Panel_Layout elm_obj_entry_input_panel_layout_get(const Eo *obj);
@@ -502,7 +502,7 @@ EOAPI Elm_Input_Panel_Layout elm_obj_entry_input_panel_layout_get(const Eo *obj)
* @param[in] obj The object.
* @param[in] return_key_type The type of "return" key on the input panel.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_return_key_type_set(Eo *obj, Elm_Input_Panel_Return_Key_Type return_key_type);
@@ -513,7 +513,7 @@ EOAPI void elm_obj_entry_input_panel_return_key_type_set(Eo *obj, Elm_Input_Pane
*
* @return The type of "return" key on the input panel.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Elm_Input_Panel_Return_Key_Type elm_obj_entry_input_panel_return_key_type_get(const Eo *obj);
@@ -524,7 +524,7 @@ EOAPI Elm_Input_Panel_Return_Key_Type elm_obj_entry_input_panel_return_key_type_
* @param[in] enabled If @c true, the input panel is appeared when entry is
* clicked or has a focus.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_enabled_set(Eo *obj, Eina_Bool enabled);
@@ -536,7 +536,7 @@ EOAPI void elm_obj_entry_input_panel_enabled_set(Eo *obj, Eina_Bool enabled);
* @return If @c true, the input panel is appeared when entry is clicked or has
* a focus.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_input_panel_enabled_get(const Eo *obj);
@@ -554,7 +554,7 @@ EOAPI Eina_Bool elm_obj_entry_input_panel_enabled_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] wrap The wrap mode to use. See Elm_Wrap_Type for details on them.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_line_wrap_set(Eo *obj, Elm_Wrap_Type wrap);
@@ -565,7 +565,7 @@ EOAPI void elm_obj_entry_line_wrap_set(Eo *obj, Elm_Wrap_Type wrap);
*
* @return The wrap mode to use. See Elm_Wrap_Type for details on them.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Elm_Wrap_Type elm_obj_entry_line_wrap_get(const Eo *obj);
@@ -578,7 +578,7 @@ EOAPI Elm_Wrap_Type elm_obj_entry_line_wrap_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] pos The position of the cursor.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cursor_pos_set(Eo *obj, int pos);
@@ -589,7 +589,7 @@ EOAPI void elm_obj_entry_cursor_pos_set(Eo *obj, int pos);
*
* @return The position of the cursor.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI int elm_obj_entry_cursor_pos_get(const Eo *obj);
@@ -601,13 +601,13 @@ EOAPI int elm_obj_entry_cursor_pos_get(const Eo *obj);
* @param[in] setting @c true if the object should be displayed, @c false if
* not.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_icon_visible_set(Eo *obj, Eina_Bool setting);
/** This moves the cursor to the end of the current line.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cursor_line_end_set(Eo *obj);
@@ -620,7 +620,7 @@ EOAPI void elm_obj_entry_cursor_line_end_set(Eo *obj);
*
* @since 1.9
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_select_region_set(Eo *obj, int start, int end);
@@ -633,7 +633,7 @@ EOAPI void elm_obj_entry_select_region_set(Eo *obj, int start, int end);
*
* @since 1.18
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_select_region_get(const Eo *obj, int *start, int *end);
@@ -649,7 +649,7 @@ EOAPI void elm_obj_entry_select_region_get(const Eo *obj, int *start, int *end);
* @param[in] enabled If @c enabled is @c true, the return key is automatically
* disabled when the entry has no text.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_return_key_autoenabled_set(Eo *obj, Eina_Bool enabled);
@@ -660,25 +660,25 @@ EOAPI void elm_obj_entry_input_panel_return_key_autoenabled_set(Eo *obj, Eina_Bo
* @param[in] obj The object.
* @param[in] setting @c true if the object should be displayed, false if not.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_end_visible_set(Eo *obj, Eina_Bool setting);
/** This moves the cursor to the beginning of the entry.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cursor_begin_set(Eo *obj);
/** This moves the cursor to the beginning of the current line.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cursor_line_begin_set(Eo *obj);
/** This moves the cursor to the end of the entry.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cursor_end_set(Eo *obj);
@@ -709,7 +709,7 @@ EOAPI void elm_obj_entry_cursor_end_set(Eo *obj);
*
* @return Textblock object
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Efl_Canvas_Object *elm_obj_entry_textblock_get(const Eo *obj);
@@ -727,7 +727,7 @@ EOAPI Efl_Canvas_Object *elm_obj_entry_textblock_get(const Eo *obj);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_textblock_cursor_geometry_get(const Eo *obj, int *x, int *y, int *w, int *h);
@@ -743,7 +743,7 @@ EOAPI Eina_Bool elm_obj_entry_textblock_cursor_geometry_get(const Eo *obj, int *
*
* @return Input method context
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void *elm_obj_entry_imf_context_get(const Eo *obj);
@@ -759,7 +759,7 @@ EOAPI void *elm_obj_entry_imf_context_get(const Eo *obj);
*
* @return @c true if format node exists, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_cursor_is_format_get(const Eo *obj);
@@ -775,7 +775,7 @@ EOAPI Eina_Bool elm_obj_entry_cursor_is_format_get(const Eo *obj);
*
* @return Character
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI char *elm_obj_entry_textblock_cursor_content_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
@@ -794,7 +794,7 @@ EOAPI char *elm_obj_entry_textblock_cursor_content_get(const Eo *obj) EINA_WARN_
*
* @return Selected string
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI const char *elm_obj_entry_selection_get(const Eo *obj);
@@ -805,7 +805,7 @@ EOAPI const char *elm_obj_entry_selection_get(const Eo *obj);
*
* @return @c true if position has a visible format, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_cursor_is_visible_format_get(const Eo *obj);
@@ -817,7 +817,7 @@ EOAPI Eina_Bool elm_obj_entry_cursor_is_visible_format_get(const Eo *obj);
*
* @since 1.18
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_select_allow_set(Eo *obj, Eina_Bool allow);
@@ -830,7 +830,7 @@ EOAPI void elm_obj_entry_select_allow_set(Eo *obj, Eina_Bool allow);
*
* @since 1.18
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_select_allow_get(const Eo *obj);
@@ -841,7 +841,7 @@ EOAPI Eina_Bool elm_obj_entry_select_allow_get(const Eo *obj);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_cursor_prev(Eo *obj);
@@ -849,7 +849,7 @@ EOAPI Eina_Bool elm_obj_entry_cursor_prev(Eo *obj);
*
* @since 1.7
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_text_style_user_pop(Eo *obj);
@@ -862,7 +862,7 @@ EOAPI void elm_obj_entry_text_style_user_pop(Eo *obj);
* @param[in] func The function called to provide the item object.
* @param[in] data The data passed to @c func.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_item_provider_prepend(Eo *obj, Elm_Entry_Item_Provider_Cb func, void *data);
@@ -876,7 +876,7 @@ EOAPI void elm_obj_entry_item_provider_prepend(Eo *obj, Elm_Entry_Item_Provider_
* @c false).
* @param[in] obj The object.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_show(Eo *obj);
@@ -888,7 +888,7 @@ EOAPI void elm_obj_entry_input_panel_show(Eo *obj);
* Context to clear the preedit state.
* @param[in] obj The object.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_imf_context_reset(Eo *obj);
@@ -900,14 +900,14 @@ EOAPI void elm_obj_entry_imf_context_reset(Eo *obj);
* popup, returning the entry to its normal state.
* @param[in] obj The object.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_anchor_hover_end(Eo *obj);
/** This begins a selection within the entry as though the user were holding
* down the mouse button to make a selection.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cursor_selection_begin(Eo *obj);
@@ -918,20 +918,20 @@ EOAPI void elm_obj_entry_cursor_selection_begin(Eo *obj);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_cursor_down(Eo *obj);
/** This function writes any changes made to the file set with @ref
* elm_entry_file_set.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_file_save(Eo *obj);
/** This executes a "copy" action on the selected text in the entry.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_selection_copy(Eo *obj);
@@ -947,7 +947,7 @@ EOAPI void elm_obj_entry_selection_copy(Eo *obj);
*
* @since 1.7
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_text_style_user_push(Eo *obj, const char *style);
@@ -961,7 +961,7 @@ EOAPI void elm_obj_entry_text_style_user_push(Eo *obj, const char *style);
* @param[in] func The function called to provide the item object.
* @param[in] data The data passed to @c func.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_item_provider_remove(Eo *obj, Elm_Entry_Item_Provider_Cb func, void *data);
@@ -976,7 +976,7 @@ EOAPI void elm_obj_entry_item_provider_remove(Eo *obj, Elm_Entry_Item_Provider_C
*
* @since 1.7
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI const char *elm_obj_entry_text_style_user_peek(const Eo *obj);
@@ -987,7 +987,7 @@ EOAPI const char *elm_obj_entry_text_style_user_peek(const Eo *obj);
* See also @ref elm_obj_entry_context_menu_item_add.
* @param[in] obj The object.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_context_menu_clear(Eo *obj);
@@ -998,7 +998,7 @@ EOAPI void elm_obj_entry_context_menu_clear(Eo *obj);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_cursor_up(Eo *obj);
@@ -1020,7 +1020,7 @@ EOAPI Eina_Bool elm_obj_entry_cursor_up(Eo *obj);
* @param[in] obj The object.
* @param[in] entry The text to insert.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_insert(Eo *obj, const char *entry);
@@ -1035,7 +1035,7 @@ EOAPI void elm_obj_entry_insert(Eo *obj, const char *entry);
* @param[in] data The specific data to be set to the input panel.
* @param[in] len The length of data, in bytes, to send to the input panel.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_imdata_set(Eo *obj, const void *data, int len);
@@ -1046,13 +1046,13 @@ EOAPI void elm_obj_entry_input_panel_imdata_set(Eo *obj, const void *data, int l
* @param[out] data The specific data to be got from the input panel.
* @param[out] len The length of data.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_imdata_get(const Eo *obj, void *data, int *len);
/** This executes a "paste" action in the entry.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_selection_paste(Eo *obj);
@@ -1063,13 +1063,13 @@ EOAPI void elm_obj_entry_selection_paste(Eo *obj);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_cursor_next(Eo *obj);
/** This drops any existing text selection within the entry.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_select_none(Eo *obj);
@@ -1082,26 +1082,26 @@ EOAPI void elm_obj_entry_select_none(Eo *obj);
* @c false)
* @param[in] obj The object.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_input_panel_hide(Eo *obj);
/** This selects all text within the entry.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_select_all(Eo *obj);
/** This ends a selection within the entry as though the user had just released
* the mouse button while making a selection.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_cursor_selection_end(Eo *obj);
/** This executes a "cut" action on the selected text in the entry.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_selection_cut(Eo *obj);
@@ -1116,7 +1116,7 @@ EOAPI void elm_obj_entry_selection_cut(Eo *obj);
*
* @return @c true if empty, @c false otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_is_empty(const Eo *obj);
@@ -1130,7 +1130,7 @@ EOAPI Eina_Bool elm_obj_entry_is_empty(const Eo *obj);
* @param[in] func The filter function to remove.
* @param[in] data The user data passed when adding the function.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_markup_filter_remove(Eo *obj, Elm_Entry_Filter_Cb func, void *data);
@@ -1150,7 +1150,7 @@ EOAPI void elm_obj_entry_markup_filter_remove(Eo *obj, Elm_Entry_Filter_Cb func,
* @param[in] func The function called to provide the item object.
* @param[in] data The data passed to @c func.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_item_provider_append(Eo *obj, Elm_Entry_Item_Provider_Cb func, void *data);
@@ -1169,7 +1169,7 @@ EOAPI void elm_obj_entry_item_provider_append(Eo *obj, Elm_Entry_Item_Provider_C
* @param[in] func The function to use as text filter.
* @param[in] data User data to pass to @c func.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_markup_filter_append(Eo *obj, Elm_Entry_Filter_Cb func, void *data);
@@ -1186,7 +1186,7 @@ EOAPI void elm_obj_entry_markup_filter_append(Eo *obj, Elm_Entry_Filter_Cb func,
* @param[in] obj The object.
* @param[in] str The text to be appended.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_append(Eo *obj, const char *str);
@@ -1209,7 +1209,7 @@ EOAPI void elm_obj_entry_append(Eo *obj, const char *str);
* @param[in] func The callback to execute when the item is clicked.
* @param[in] data The data to associate with the item for related functions.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_context_menu_item_add(Eo *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data);
@@ -1222,7 +1222,7 @@ EOAPI void elm_obj_entry_context_menu_item_add(Eo *obj, const char *label, const
* @param[in] func The function to use as text filter.
* @param[in] data User data to pass to @c func.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_markup_filter_prepend(Eo *obj, Elm_Entry_Filter_Cb func, void *data);
@@ -1235,7 +1235,7 @@ EOAPI void elm_obj_entry_markup_filter_prepend(Eo *obj, Elm_Entry_Filter_Cb func
*
* @since 1.20
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI void elm_obj_entry_prediction_hint_set(Eo *obj, const char *prediction_hint);
@@ -1250,7 +1250,7 @@ EOAPI void elm_obj_entry_prediction_hint_set(Eo *obj, const char *prediction_hin
*
* @since 1.21
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_prediction_hint_hash_set(Eo *obj, const char *key, const char *value);
@@ -1264,7 +1264,7 @@ EOAPI Eina_Bool elm_obj_entry_prediction_hint_hash_set(Eo *obj, const char *key,
*
* @since 1.21
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EOAPI Eina_Bool elm_obj_entry_prediction_hint_hash_del(Eo *obj, const char *key);
@@ -1272,7 +1272,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ACTIVATED;
/** Called when entry got activated
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ACTIVATED (&(_ELM_ENTRY_EVENT_ACTIVATED))
@@ -1280,7 +1280,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_CHANGED;
/** Called when entry changed
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_CHANGED (&(_ELM_ENTRY_EVENT_CHANGED))
@@ -1289,7 +1289,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_CHANGED_USER;
/** Called when the object changed due to user interaction
* @return Elm_Entry_Change_Info
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_CHANGED_USER (&(_ELM_ENTRY_EVENT_CHANGED_USER))
@@ -1298,7 +1298,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_VALIDATE;
/** Called when validating
* @return Elm_Validate_Content
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_VALIDATE (&(_ELM_ENTRY_EVENT_VALIDATE))
@@ -1306,7 +1306,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_CONTEXT_OPEN;
/** Called when context menu was opened
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_CONTEXT_OPEN (&(_ELM_ENTRY_EVENT_CONTEXT_OPEN))
@@ -1315,7 +1315,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ANCHOR_CLICKED;
/** Called when anchor was clicked
* @return Elm_Entry_Anchor_Info
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ANCHOR_CLICKED (&(_ELM_ENTRY_EVENT_ANCHOR_CLICKED))
@@ -1323,7 +1323,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_REJECTED;
/** Called when entry was rejected
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_REJECTED (&(_ELM_ENTRY_EVENT_REJECTED))
@@ -1331,7 +1331,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_MAXLENGTH_REACHED;
/** Called when maximum entry length has been reached
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_MAXLENGTH_REACHED (&(_ELM_ENTRY_EVENT_MAXLENGTH_REACHED))
@@ -1339,7 +1339,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_PREEDIT_CHANGED;
/** Called when entry preedit changed
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_PREEDIT_CHANGED (&(_ELM_ENTRY_EVENT_PREEDIT_CHANGED))
@@ -1347,7 +1347,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_PRESS;
/** Called when entry pressed
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_PRESS (&(_ELM_ENTRY_EVENT_PRESS))
@@ -1355,7 +1355,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_REDO_REQUEST;
/** Called when redo was requested
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_REDO_REQUEST (&(_ELM_ENTRY_EVENT_REDO_REQUEST))
@@ -1363,7 +1363,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_UNDO_REQUEST;
/** Called when undo was requested
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_UNDO_REQUEST (&(_ELM_ENTRY_EVENT_UNDO_REQUEST))
@@ -1371,7 +1371,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_TEXT_SET_DONE;
/** Called when text set finished
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_TEXT_SET_DONE (&(_ELM_ENTRY_EVENT_TEXT_SET_DONE))
@@ -1379,7 +1379,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ABORTED;
/** Called when entry was aborted
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ABORTED (&(_ELM_ENTRY_EVENT_ABORTED))
@@ -1388,7 +1388,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ANCHOR_DOWN;
/** Called on anchor down
* @return Elm_Entry_Anchor_Info
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ANCHOR_DOWN (&(_ELM_ENTRY_EVENT_ANCHOR_DOWN))
@@ -1397,7 +1397,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ANCHOR_HOVER_OPENED;
/** Called when hover opened
* @return Elm_Entry_Anchor_Hover_Info
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ANCHOR_HOVER_OPENED (&(_ELM_ENTRY_EVENT_ANCHOR_HOVER_OPENED))
@@ -1406,7 +1406,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ANCHOR_IN;
/** Called on anchor in
* @return Elm_Entry_Anchor_Info
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ANCHOR_IN (&(_ELM_ENTRY_EVENT_ANCHOR_IN))
@@ -1415,7 +1415,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ANCHOR_OUT;
/** Called on anchor out
* @return Elm_Entry_Anchor_Info
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ANCHOR_OUT (&(_ELM_ENTRY_EVENT_ANCHOR_OUT))
@@ -1424,7 +1424,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_ANCHOR_UP;
/** called on anchor up
* @return Elm_Entry_Anchor_Info
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_ANCHOR_UP (&(_ELM_ENTRY_EVENT_ANCHOR_UP))
@@ -1432,7 +1432,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_CURSOR_CHANGED;
/** Called on cursor changed
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_CURSOR_CHANGED (&(_ELM_ENTRY_EVENT_CURSOR_CHANGED))
@@ -1440,7 +1440,7 @@ EWAPI extern const Efl_Event_Description _ELM_ENTRY_EVENT_CURSOR_CHANGED_MANUAL;
/** Called on manual cursor change
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
#define ELM_ENTRY_EVENT_CURSOR_CHANGED_MANUAL (&(_ELM_ENTRY_EVENT_CURSOR_CHANGED_MANUAL))
diff --git a/src/lib/elementary/elm_entry_eo.legacy.h b/src/lib/elementary/elm_entry_eo.legacy.h
index 6fe06089be..a08522a328 100644
--- a/src/lib/elementary/elm_entry_eo.legacy.h
+++ b/src/lib/elementary/elm_entry_eo.legacy.h
@@ -41,7 +41,7 @@ EAPI void elm_entry_scrollable_set(Elm_Entry *obj, Eina_Bool scroll);
EAPI Eina_Bool elm_entry_scrollable_get(const Elm_Entry *obj);
/**
- * @brief Set the attribute to show the input panel in case of only an user's
+ * @brief Set the attribute to show the input panel in case of only a user's
* explicit Mouse Up event. It doesn't request to show the input panel even
* though it has focus.
*
@@ -56,7 +56,7 @@ EAPI Eina_Bool elm_entry_scrollable_get(const Elm_Entry *obj);
EAPI void elm_entry_input_panel_show_on_demand_set(Elm_Entry *obj, Eina_Bool ondemand);
/**
- * @brief Get the attribute to show the input panel in case of only an user's
+ * @brief Get the attribute to show the input panel in case of only a user's
* explicit Mouse Up event.
*
* @param[in] obj The object.
diff --git a/src/lib/elementary/elm_entry_legacy.h b/src/lib/elementary/elm_entry_legacy.h
index 06b3f76eb7..9d87e54e54 100644
--- a/src/lib/elementary/elm_entry_legacy.h
+++ b/src/lib/elementary/elm_entry_legacy.h
@@ -12,7 +12,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EAPI Evas_Object *elm_entry_add(Evas_Object *parent);
@@ -24,7 +24,7 @@ EAPI Evas_Object *elm_entry_add(Evas_Object *parent);
*
* @note Using this function bypasses text filters
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry);
@@ -35,7 +35,7 @@ EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry)
* @param obj The entry object
* @return The currently displayed text or NULL on failure
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EAPI const char *elm_entry_entry_get(const Evas_Object *obj);
@@ -51,7 +51,7 @@ EAPI const char *elm_entry_entry_get(const Evas_Object *obj);
*
* @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*
* @param[in] obj The entry object
* @param[in] file The path to the file to load and save
@@ -66,7 +66,7 @@ EAPI Eina_Bool elm_entry_file_set(Evas_Object *obj, const char *file, E
* This function can be used to retrieve any file set on the entry for
* edition, along with the format used to load and save it.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*
* @param[in] obj The entry object
* @param[out] file The path to the file to load and save
@@ -82,6 +82,6 @@ EAPI void elm_entry_file_get(const Evas_Object *obj, const char **
* @ref elm_entry_textblock_get for more information.
* @param[in] obj The object.
*
- * @ingroup Elm_Entry
+ * @ingroup Elm_Entry_Group
*/
EAPI void elm_entry_calc_force(Evas_Object *obj);
diff --git a/src/lib/elementary/elm_factory.c b/src/lib/elementary/elm_factory.c
index 7bbeccfb2e..56e7bd4f06 100644
--- a/src/lib/elementary/elm_factory.c
+++ b/src/lib/elementary/elm_factory.c
@@ -117,7 +117,7 @@ _eval(Evas_Object *obj)
evas_output_viewport_get(evas_object_evas_get(obj),
&cvx, &cvy, &cvw, &cvh);
if ((cvw < 1) || (cvh < 1)) return;
- // need some fuzz value thats beyond the current viewport
+ // need some fuzz value that's beyond the current viewport
// for now just make it the viewport * 3 in size (so 1 vp in each direction)
/*
cvx -= cvw;
diff --git a/src/lib/elementary/elm_fileselector_button_eo.h b/src/lib/elementary/elm_fileselector_button_eo.h
index d130945e40..b551e25318 100644
--- a/src/lib/elementary/elm_fileselector_button_eo.h
+++ b/src/lib/elementary/elm_fileselector_button_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Fileselector_Button;
*/
#define ELM_FILESELECTOR_BUTTON_CLASS elm_fileselector_button_class_get()
-EWAPI const Efl_Class *elm_fileselector_button_class_get(void);
+EWAPI const Efl_Class *elm_fileselector_button_class_get(void) EINA_CONST;
EWAPI extern const Efl_Event_Description _ELM_FILESELECTOR_BUTTON_EVENT_FILE_CHOSEN;
diff --git a/src/lib/elementary/elm_fileselector_entry_eo.h b/src/lib/elementary/elm_fileselector_entry_eo.h
index b343a7e212..8ee352d387 100644
--- a/src/lib/elementary/elm_fileselector_entry_eo.h
+++ b/src/lib/elementary/elm_fileselector_entry_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Fileselector_Entry;
*/
#define ELM_FILESELECTOR_ENTRY_CLASS elm_fileselector_entry_class_get()
-EWAPI const Efl_Class *elm_fileselector_entry_class_get(void);
+EWAPI const Efl_Class *elm_fileselector_entry_class_get(void) EINA_CONST;
EWAPI extern const Efl_Event_Description _ELM_FILESELECTOR_ENTRY_EVENT_CHANGED;
diff --git a/src/lib/elementary/elm_fileselector_eo.h b/src/lib/elementary/elm_fileselector_eo.h
index 74ce3f1984..719c53dcb8 100644
--- a/src/lib/elementary/elm_fileselector_eo.h
+++ b/src/lib/elementary/elm_fileselector_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Fileselector;
*/
#define ELM_FILESELECTOR_CLASS elm_fileselector_class_get()
-EWAPI const Efl_Class *elm_fileselector_class_get(void);
+EWAPI const Efl_Class *elm_fileselector_class_get(void) EINA_CONST;
/**
* @brief Enable/disable the "ok" and "cancel" buttons on a given file selector
diff --git a/src/lib/elementary/elm_flipselector.c b/src/lib/elementary/elm_flipselector.c
index d7c5741221..51481a9ad0 100644
--- a/src/lib/elementary/elm_flipselector.c
+++ b/src/lib/elementary/elm_flipselector.c
@@ -476,7 +476,7 @@ _items_add(Evas_Object *obj)
EOLIAN static void
_elm_flipselector_efl_ui_range_display_range_limits_set(Eo *obj, Elm_Flipselector_Data *sd, double min, double max)
{
- if ((sd->val_min == min) && (sd->val_max == max)) return;
+ if (EINA_DBL_EQ(sd->val_min, min) && EINA_DBL_EQ(sd->val_max, max)) return;
sd->val_min = min;
sd->val_max = max;
@@ -494,9 +494,9 @@ _elm_flipselector_efl_ui_range_display_range_limits_get(const Eo *obj EINA_UNUSE
EOLIAN static void
_elm_flipselector_efl_ui_range_interactive_range_step_set(Eo *obj EINA_UNUSED, Elm_Flipselector_Data *sd, double step)
{
- if (sd->step == step) return;
+ if (EINA_DBL_EQ(sd->step, step)) return;
- if (step == 0.0) step = 1.0;
+ if (EINA_DBL_EQ(step, 0.0)) step = 1.0;
else if (step < 0.0) step *= -1;
sd->step = step;
@@ -512,7 +512,7 @@ _elm_flipselector_efl_ui_range_interactive_range_step_get(const Eo *obj EINA_UNU
EOLIAN static double
_elm_flipselector_efl_ui_range_display_range_value_get(const Eo *obj EINA_UNUSED, Elm_Flipselector_Data *sd)
{
- if (sd->val_min == 0 && sd->val_max == 0)
+ if (EINA_DBL_EQ(sd->val_min, 0) && EINA_DBL_EQ(sd->val_max, 0))
{
WRN("This API can be used only if you set min and max and flipselector values are numericals");
return 0;
diff --git a/src/lib/elementary/elm_flipselector.h b/src/lib/elementary/elm_flipselector.h
index 40e8d07e7c..dc36f2fc05 100644
--- a/src/lib/elementary/elm_flipselector.h
+++ b/src/lib/elementary/elm_flipselector.h
@@ -16,11 +16,11 @@
* so that it helps the user to reach an item which is distant from
* the current selection.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for flip selector objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "selected" - when the widget's selected text item is changed. The @c
* event_info parameter is the item that was selected.
* - @c "overflowed" - when the widget's current selection is changed
diff --git a/src/lib/elementary/elm_flipselector_eo.h b/src/lib/elementary/elm_flipselector_eo.h
index 59b3c483e3..ce996b494c 100644
--- a/src/lib/elementary/elm_flipselector_eo.h
+++ b/src/lib/elementary/elm_flipselector_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Flipselector;
*/
#define ELM_FLIPSELECTOR_CLASS elm_flipselector_class_get()
-EWAPI const Efl_Class *elm_flipselector_class_get(void);
+EWAPI const Efl_Class *elm_flipselector_class_get(void) EINA_CONST;
/**
* @brief Get the internal list of items in a given flip selector widget.
@@ -108,7 +108,7 @@ EOAPI Elm_Widget_Item *elm_obj_flipselector_selected_item_get(const Eo *obj);
EOAPI void elm_obj_flipselector_first_interval_set(Eo *obj, double interval);
/**
- * @brief Get the interval on time updates for an user mouse button hold on a
+ * @brief Get the interval on time updates for a user mouse button hold on a
* flip selector widget.
*
* See also @ref elm_obj_flipselector_first_interval_set for more details.
diff --git a/src/lib/elementary/elm_flipselector_eo.legacy.h b/src/lib/elementary/elm_flipselector_eo.legacy.h
index 707d7a3d5e..321a7447ed 100644
--- a/src/lib/elementary/elm_flipselector_eo.legacy.h
+++ b/src/lib/elementary/elm_flipselector_eo.legacy.h
@@ -101,7 +101,7 @@ EAPI Elm_Widget_Item *elm_flipselector_selected_item_get(const Elm_Flipselector
EAPI void elm_flipselector_first_interval_set(Elm_Flipselector *obj, double interval);
/**
- * @brief Get the interval on time updates for an user mouse button hold on a
+ * @brief Get the interval on time updates for a user mouse button hold on a
* flip selector widget.
*
* See also @ref elm_flipselector_first_interval_set for more details.
diff --git a/src/lib/elementary/elm_flipselector_item_eo.h b/src/lib/elementary/elm_flipselector_item_eo.h
index ad156fe753..2a4059d069 100644
--- a/src/lib/elementary/elm_flipselector_item_eo.h
+++ b/src/lib/elementary/elm_flipselector_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Flipselector_Item;
*/
#define ELM_FLIPSELECTOR_ITEM_CLASS elm_flipselector_item_class_get()
-EWAPI const Efl_Class *elm_flipselector_item_class_get(void);
+EWAPI const Efl_Class *elm_flipselector_item_class_get(void) EINA_CONST;
/**
* @brief Set whether a given flip selector widget's item should be the
diff --git a/src/lib/elementary/elm_focus_item.h b/src/lib/elementary/elm_focus_item.h
index 71c068a12c..aff1dfbfdf 100644
--- a/src/lib/elementary/elm_focus_item.h
+++ b/src/lib/elementary/elm_focus_item.h
@@ -9,8 +9,8 @@
* The focused item can be unfocused with function
* elm_object_item_focus_set().
*
- * see @elm_object_item_focus_set()
- * see @elm_object_item_focus_get()
+ * @see elm_object_item_focus_set()
+ * @see elm_object_item_focus_get()
*
* @ingroup Elm_Focus
* @since 1.10
diff --git a/src/lib/elementary/elm_focus_legacy.c b/src/lib/elementary/elm_focus_legacy.c
index c43fe6d8de..30f8c09e2c 100644
--- a/src/lib/elementary/elm_focus_legacy.c
+++ b/src/lib/elementary/elm_focus_legacy.c
@@ -51,12 +51,18 @@ _flush_manager(Efl_Ui_Widget *obj, Elm_Widget_Smart_Data *pd)
manager = efl_ui_focus_object_focus_manager_get(obj);
if (manager)
{
- Eina_List *order;
+ Eina_List *order = NULL;
if (pd->legacy_focus.custom_chain)
order = eina_list_clone(pd->legacy_focus.custom_chain);
else
- order = eina_list_clone(pd->subobjs);
+ {
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
+ {
+ Eo *sobj = eina_array_data_get(pd->children, i);
+ order = eina_list_append(order, sobj);
+ }
+ }
efl_ui_focus_manager_calc_update_order(manager, obj, order);
}
@@ -115,7 +121,7 @@ elm_object_focus_next_object_set(Evas_Object *obj,
#define MAP(direction, field) if ((Efl_Ui_Focus_Direction)dir == EFL_UI_FOCUS_DIRECTION_ ##direction) pd->legacy_focus.field = next;
MAPPING()
#undef MAP
- dir = efl_ui_focus_util_direction_complement(dir);
+ dir = (Elm_Focus_Direction)efl_ui_focus_util_direction_complement((Efl_Ui_Focus_Direction)dir);
#define MAP(direction, field) if ((Efl_Ui_Focus_Direction)dir == EFL_UI_FOCUS_DIRECTION_ ##direction) next_pd->legacy_focus.field = obj;
MAPPING()
#undef MAP
@@ -241,7 +247,7 @@ elm_object_focus_next(Evas_Object *obj,
if (!legacy_target)
{
Eina_Array *old_chain = _focus_parent_chain_gen(logical);
- Eina_Array *new_chain = _focus_parent_chain_gen(efl_ui_focus_manager_request_move(top, dir, NULL, EINA_FALSE));
+ Eina_Array *new_chain = _focus_parent_chain_gen(efl_ui_focus_manager_request_move(top, (Efl_Ui_Focus_Direction)dir, NULL, EINA_FALSE));
//first pop off all elements that are the same
while (eina_array_count(new_chain) > 0 && eina_array_count(old_chain) > 0 &&
@@ -280,7 +286,7 @@ elm_object_focus_next(Evas_Object *obj,
}
if (!legacy_focus_move)
- o = efl_ui_focus_manager_move(top, dir);
+ o = efl_ui_focus_manager_move(top, (Efl_Ui_Focus_Direction)dir);
if (!o)
{
if ((Efl_Ui_Focus_Direction)dir == EFL_UI_FOCUS_DIRECTION_NEXT || (Efl_Ui_Focus_Direction)dir == EFL_UI_FOCUS_DIRECTION_PREVIOUS)
@@ -288,7 +294,7 @@ elm_object_focus_next(Evas_Object *obj,
Efl_Ui_Focus_Object *root;
root = efl_ui_focus_manager_root_get(top);
- efl_ui_focus_manager_setup_on_first_touch(top, dir, root);
+ efl_ui_focus_manager_setup_on_first_touch(top, (Efl_Ui_Focus_Direction)dir, root);
}
}
}
@@ -304,7 +310,7 @@ elm_object_focus_next_object_get(const Evas_Object *obj,
MAPPING()
#undef MAP
- return efl_ui_focus_manager_request_move(efl_ui_focus_util_active_manager(top), dir, NULL, EINA_FALSE);
+ return efl_ui_focus_manager_request_move(efl_ui_focus_util_active_manager(top), (Efl_Ui_Focus_Direction)dir, NULL, EINA_FALSE);
}
EAPI Elm_Object_Item *
diff --git a/src/lib/elementary/elm_frame.h b/src/lib/elementary/elm_frame.h
index 3ae891cb98..a5c3c921c0 100644
--- a/src/lib/elementary/elm_frame.h
+++ b/src/lib/elementary/elm_frame.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Frame Frame
+ * @defgroup Elm_Frame_Group Frame
* @ingroup Elementary
*
* @image html frame_inheritance_tree.png
@@ -22,11 +22,11 @@
*
* Of all this styles only default shows the title.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for frame objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "clicked" - The user has clicked the frame's label
* - @c "language,changed" - the program's language changed (since 1.9)
*
diff --git a/src/lib/elementary/elm_general.eot b/src/lib/elementary/elm_general.eot
index 1d6bf4024c..4a8a928936 100644
--- a/src/lib/elementary/elm_general.eot
+++ b/src/lib/elementary/elm_general.eot
@@ -3,158 +3,3 @@
*/
/* Legacy-only function pointer types, for the legacy EO classes (genlist, etc...) */
-type @beta Evas_Smart_Cb: __undefined_type; [[Evas smart callback type]]
-
-/* FIXME: Move to Efl.Ui namespace after Efl.Ui.List gets merged! */
-enum @beta @extern Elm.Object.Select_Mode
-{
- [[Possible values for the #ELM_OBJECT_SELECT_MODE policy.
-
- @since 1.7
- ]]
- default = 0, [[default select mode. Once an item is selected, it would stay
- highlighted and not going to call selected callback again
- even it was clicked. Items can get focus.]]
- always, [[always select mode. Item selected callbacks will be called every
- time for click events, even after the item was already selected.
- Items can get focus.]]
- none, [[no select mode. Items will never be highlighted and selected but
- the size will be adjusted by the finger size configuration. Items
- can't get focus.]]
- display_only, [[no select mode with no finger size rule. Items will never
- be highlighted and selected and ignore the finger size. So
- the item size can be reduced below than the finger size
- configuration. Items can't get focus.]]
- max [[canary value: any value greater or equal to ELM_OBJECT_SELECT_MODE_MAX
- is forbidden.]]
-}
-
-enum @beta @extern Elm.Icon.Type
-{
- [[Elementary icon types]]
- legacy: elm_icon;
- none, [[Icon has no type set]]
- file, [[Icon is of type file]]
- standard [[Icon is of type standard]]
-}
-
-/* FIXME: shouldn't exist, they are unusable by the bindings */
-struct @beta @extern Elm.Entry_Anchor_Info; [[The info sent in the callback for the "anchor,clicked" signals emitted
- by entries.]]
-struct @beta @extern Elm.Entry_Anchor_Hover_Info; [[The info sent in the callback for "anchor,hover" signals emitted
- by the Anchor_Hover widget]]
-
-enum @beta @extern Elm.Input.Panel.Layout
-{
- [[Input panel (virtual keyboard) layout types.
- Type of input panel (virtual keyboard) to use - this is a hint and may not provide exactly what is desired.
- ]]
- normal, [[Default layout.]]
- number, [[Number layout.]]
- email, [[Email layout.]]
- url, [[URL layout.]]
- phonenumber, [[Phone Number layout.]]
- ip, [[IP layout.]]
- month, [[Month layout.]]
- numberonly, [[Number Only layout.]]
- invalid, [[Never use this.]]
- hex, [[Hexadecimal layout.]]
- terminal, [[Command-line terminal layout including esc, alt, ctrl key, so on (no auto-correct, no auto-capitalization).]]
- password, [[Like normal, but no auto-correct, no auto-capitalization etc.]]
- datetime, [[Date and time layout
-
- @since 1.8]]
- emoticon, [[Emoticon layout
-
- @since 1.10]]
- voice [[Voice layout, but if the IME does not support voice layout, then normal layout will be shown.
-
- @since 1.19]]
-}
-
-enum @beta @extern Elm.Input.Panel.Lang
-{
- [[Input panel (virtual keyboard) language modes.
- ]]
- automatic, [[Automatic]]
- alphabet [[Alphabet]]
-}
-
-enum @beta @extern Elm.Autocapital.Type
-{
- [[Autocapitalization Types.
- Choose method of auto-capitalization.
- ]]
- none, [[No auto-capitalization when typing.]]
- word, [[Autocapitalize each word typed.]]
- sentence, [[Autocapitalize the start of each sentence.]]
- allcharacter [[Autocapitalize all letters.]]
-}
-
-enum @beta @extern Elm.Input.Panel.Return_Key.Type
-{
- [["Return" Key types on the input panel (virtual keyboard).
- ]]
- default, [[Default.]]
- done, [[Done.]]
- go, [[Go.]]
- join, [[Join.]]
- login, [[Login.]]
- next, [[Next.]]
- search, [[Search string or magnifier icon.]]
- send, [[Send.]]
- signin [[Sign-in
-
- @since 1.8]]
-}
-
-enum @beta @extern Elm.Input.Hints
-{
- [[Enumeration that defines the types of Input Hints.
-
- @since 1.12
- ]]
- legacy: elm_input_hint;
- none = 0, [[No active hints
-
- @since 1.12]]
- auto_complete = 1 << 0, [[Suggest word auto completion
-
- @since 1.12]]
- sensitive_data = 1 << 1, [[Typed text should not be stored.
-
- @since 1.12]]
- autofill_credit_card_expiration_date = 0x100, [[ Autofill hint for a credit card expiration date
-
- @since 1.21]]
- autofill_credit_card_expiration_day = 0x200, [[Autofill hint for a credit card expiration day
-
- @since 1.21]]
- autofill_credit_card_expiration_month = 0x300, [[ Autofill hint for a credit card expiration month
-
- @since 1.21]]
- autofill_credit_card_expiration_year = 0x400, [[ Autofill hint for a credit card expiration year
-
- @since 1.21]]
- autofill_credit_card_number = 0x500, [[ Autofill hint for a credit card number
-
- @since 1.21]]
- autofill_email_address = 0x600, [[ Autofill hint for an email address
-
- @since 1.21]]
- autofill_name = 0x700, [[ Autofill hint for a user's real name
-
- @since 1.21]]
- autofill_phone = 0x800, [[ Autofill hint for a phone number
-
- @since 1.21]]
- autofill_postal_address = 0x900, [[ Autofill hint for a postal address
-
- @since 1.21]]
- autofill_postal_code = 0xA00, [[ Autofill hint for a postal code
-
- @since 1.21]]
- autofill_id = 0xB00 [[ Autofill hint for a user's ID
-
- @since 1.21]]
-}
diff --git a/src/lib/elementary/elm_general.h b/src/lib/elementary/elm_general.h
index 8bc0ba695a..b0708e11c3 100644
--- a/src/lib/elementary/elm_general.h
+++ b/src/lib/elementary/elm_general.h
@@ -23,7 +23,7 @@
// Legacy types
#include "elm_general.eot.h"
-/** Possible values for the #ELM_OBJECT_SELECT_MODE policy.
+/** Possible values for the selection policy of some widgets.
*
* @since 1.7
*
@@ -282,7 +282,7 @@ typedef enum
* regardless of config settings */
} Elm_Policy_Throttle;
-/** Possible values for the #ELM_OBJECT_MULTI_SELECT_MODE policy.
+/** Possible values for the multi-selection policy of some widgets.
*
* @since 1.8
*
@@ -291,7 +291,7 @@ typedef enum
typedef enum
{
ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT = 0, /**< default multiple select mode */
- ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL, /**< disallow mutiple selection
+ ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL, /**< disallow multiple selection
* when clicked without control
* key pressed */
ELM_OBJECT_MULTI_SELECT_MODE_MAX /**< canary value: any value greater or equal
@@ -342,7 +342,7 @@ typedef enum
/** Defines if the item is of any special type (has subitems or it's the index
* of a group), or is just a simple item.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
typedef enum
{
@@ -359,7 +359,7 @@ typedef enum
/** Defines the type of the item part Used while updating item's parts It can
* be used at updating multi fields.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
typedef enum
{
@@ -371,7 +371,7 @@ typedef enum
/** Defines where to position the item in the genlist.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
typedef enum
{
@@ -389,7 +389,7 @@ typedef enum
/** Defines where to position the item in the genlist.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
typedef enum
{
@@ -407,7 +407,7 @@ typedef enum
/** Defines the type of the item part Used while updating item's parts. It can
* be used at updating multi fields.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
typedef enum
{
@@ -522,7 +522,7 @@ EAPI extern int ELM_EVENT_PROCESS_FOREGROUND;
typedef Eina_Bool (*Elm_Event_Cb)(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); /**< Function prototype definition for callbacks on input events happening on Elementary widgets. @a data will receive the user data pointer passed to elm_object_event_callback_add(). @a src will be a pointer to the widget on which the input event took place. @a type will get the type of this event and @a event_info, the struct with details on this event. */
-extern EAPI double _elm_startup_time;
+EAPI extern double _elm_startup_time;
#ifndef ELM_LIB_QUICKLAUNCH
#define ELM_MAIN() int main(int argc, char **argv) { int ret__; _elm_startup_time = ecore_time_unix_get(); elm_init(argc, argv); ret__ = elm_main(argc, argv); elm_shutdown(); return ret__; } /**< macro to be used after the elm_main() function */
diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c
index 36206fd375..132b7aa14f 100644
--- a/src/lib/elementary/elm_gengrid.c
+++ b/src/lib/elementary/elm_gengrid.c
@@ -165,8 +165,10 @@ _item_cache_free(Item_Cache *itc)
/* does not exist if cache item has just been reused */
if (itc->base_view)
{
+ Evas_Object *view = itc->base_view;
efl_wref_del(itc->base_view, &itc->base_view);
- efl_del(itc->base_view);
+ efl_del(view);
+ itc->base_view = NULL;
}
eina_stringshare_del(itc->item_style);
EINA_LIST_FREE(itc->contents, c)
@@ -785,7 +787,7 @@ _item_mouse_move_cb(void *data,
if ((it->dragging) && (it->down))
{
ELM_SAFE_FREE(it->long_timer, ecore_timer_del);
- efl_event_callback_legacy_call(WIDGET(it), EFL_UI_EVENT_DRAG, eo_it);
+ evas_object_smart_callback_call(WIDGET(it), "drag", eo_it);
return;
}
@@ -834,17 +836,17 @@ _item_mouse_move_cb(void *data,
if ((adx > minw) || (ady > minh))
{
- const Efl_Event_Description *left_drag, *right_drag;
+ const char *left_drag, *right_drag;
if (!efl_ui_mirrored_get(WIDGET(it)))
{
- left_drag = EFL_UI_EVENT_DRAG_START_LEFT;
- right_drag = EFL_UI_EVENT_DRAG_START_RIGHT;
+ left_drag = "drag,start,left";
+ right_drag = "drag,start,right";
}
else
{
- left_drag = EFL_UI_EVENT_DRAG_START_RIGHT;
- right_drag = EFL_UI_EVENT_DRAG_START_LEFT;
+ right_drag = "drag,start,left";
+ left_drag = "drag,start,right";
}
it->dragging = 1;
@@ -858,25 +860,23 @@ _item_mouse_move_cb(void *data,
if (dy < 0)
{
if (ady > adx)
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_UP, eo_it);
+ evas_object_smart_callback_call(WIDGET(it), "drag,start,up", eo_it);
else
{
if (dx < 0)
- efl_event_callback_legacy_call(WIDGET(it), left_drag, eo_it);
+ evas_object_smart_callback_call(WIDGET(it), left_drag, eo_it);
}
}
else
{
if (ady > adx)
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_DOWN, eo_it);
+ evas_object_smart_callback_call(WIDGET(it), "drag,start,down", eo_it);
else
{
if (dx < 0)
- efl_event_callback_legacy_call(WIDGET(it), left_drag, eo_it);
+ evas_object_smart_callback_call(WIDGET(it), left_drag, eo_it);
else
- efl_event_callback_legacy_call(WIDGET(it), right_drag, eo_it);
+ evas_object_smart_callback_call(WIDGET(it), right_drag, eo_it);
}
}
}
@@ -1263,12 +1263,16 @@ _elm_gengrid_item_unrealize(Elm_Gen_Item *it,
ELM_SAFE_FREE(it->states, elm_widget_stringlist_free);
elm_wdg_item_track_cancel(EO_OBJ(it));
+ if (!calc)
+ {
+ efl_event_callback_legacy_call(WIDGET(it), ELM_GENGRID_EVENT_UNREALIZED, EO_OBJ(it));
+ if (it->base->func.unrealized) it->base->func.unrealized(EO_OBJ(it));
+ }
+
it->unrealize_cb(it);
it->realized = EINA_FALSE;
it->want_unrealize = EINA_FALSE;
- if (!calc)
- efl_event_callback_legacy_call(WIDGET(it), ELM_GENGRID_EVENT_UNREALIZED, EO_OBJ(it));
{
ELM_GENGRID_DATA_GET_FROM_ITEM(it, sd);
@@ -1320,8 +1324,8 @@ _item_mouse_up_cb(void *data,
if (it->dragging)
{
it->dragging = EINA_FALSE;
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_STOP, eo_it);
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,stop", eo_it);
dragged = EINA_TRUE;
}
@@ -1495,7 +1499,10 @@ _item_unrealize_cb(Elm_Gen_Item *it)
Evas_Object *c;
if (!_item_cache_add(it, _content_cache_add(it, &cache)))
{
- ELM_SAFE_FREE(VIEW(it), evas_object_del);
+ Evas_Object *view = VIEW(it);
+ efl_wref_del(VIEW(it), &VIEW(it));
+ ELM_SAFE_FREE(view, evas_object_del);
+ VIEW(it) = NULL;
ELM_SAFE_FREE(it->spacer, evas_object_del);
EINA_LIST_FREE(cache, c)
evas_object_del(c);
@@ -1971,6 +1978,7 @@ _item_place(Elm_Gen_Item *it,
_elm_gengrid_item_index_update(it);
efl_event_callback_legacy_call
(WIDGET(it), ELM_GENGRID_EVENT_REALIZED, EO_OBJ(it));
+ if (it->base->func.realized) it->base->func.realized(EO_OBJ(it));
_flush_focus_on_realization(WIDGET(it), it);
}
if (it->parent)
@@ -2177,6 +2185,7 @@ _group_item_place(Elm_Gengrid_Pan_Data *psd)
_elm_gengrid_item_index_update(it);
efl_event_callback_legacy_call
(WIDGET(it), ELM_GENGRID_EVENT_REALIZED, EO_OBJ(it));
+ if (it->base->func.realized) it->base->func.realized(EO_OBJ(it));
_flush_focus_on_realization(WIDGET(it), it);
}
evas_object_geometry_set(VIEW(it), GG_IT(it)->gx, GG_IT(it)->gy,
@@ -2840,6 +2849,7 @@ _item_move_cb(void *data, double pos)
double frame = pos;
Evas_Coord xx1, yy1, xx2, yy2;
double dx, dy;
+ Eina_Bool ret = EINA_TRUE;
switch (sd->reorder.tween_mode)
{
@@ -2901,10 +2911,11 @@ _item_move_cb(void *data, double pos)
efl_event_callback_legacy_call
(sd->obj, ELM_GENGRID_EVENT_MOVED, EO_OBJ(sd->reorder.it1));
sd->reorder.running = EINA_FALSE;
+ ret = EINA_FALSE;
}
_elm_widget_focus_highlight_start(sd->obj);
- return EINA_TRUE;
+ return ret;
}
static void
@@ -3449,7 +3460,11 @@ _key_action_select(Evas_Object *obj, const char *params)
it->highlight_cb(it);
it->sel_cb(it);
}
- else it->unsel_cb(it);
+ else
+ {
+ it->unhighlight_cb(it);
+ it->unsel_cb(it);
+ }
}
else
{
@@ -3989,7 +4004,7 @@ _item_select(Elm_Gen_Item *it)
efl_access_state_changed_signal_emit(eo_it, EFL_ACCESS_STATE_TYPE_SELECTED, EINA_TRUE);
}
- efl_ref(eo_it);
+ efl_unref(eo_it);
sd->walking--;
if ((sd->clear_me) && (!sd->walking))
_internal_elm_gengrid_clear(WIDGET(it), EINA_TRUE);
@@ -4045,7 +4060,7 @@ _elm_gengrid_item_new(Elm_Gengrid_Data *sd,
GG_IT(it) = ELM_NEW(Elm_Gen_Item_Type);
GG_IT(it)->wsd = sd;
- /* for non homogenous items */
+ /* for non homogeneous items */
it->item->w = sd->item_width;
it->item->h = sd->item_height;
@@ -4163,7 +4178,7 @@ _elm_gengrid_efl_canvas_group_group_add(Eo *obj, Elm_Gengrid_Data *priv)
elm_interface_scrollable_extern_pan_set(obj, priv->pan_obj);
- /* for non homogenous mode */
+ /* for non homogeneous mode */
priv->custom_size_mode = EINA_FALSE;
priv->custom_size_sum = NULL;
priv->custom_tot_sum = NULL;
@@ -4181,6 +4196,8 @@ _elm_gengrid_efl_canvas_group_group_del(Eo *obj, Elm_Gengrid_Data *sd)
_item_cache_zero(sd);
ecore_job_del(sd->calc_job);
+ eina_hash_free(sd->content_item_map);
+
efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
@@ -4453,7 +4470,7 @@ _elm_gengrid_align_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, double align_x
align_y = 0.0;
sd->align_y = align_y;
- if ((old_h != sd->align_x) || (old_y != sd->align_y))
+ if (!EINA_DBL_EQ(old_h, sd->align_x) || !EINA_DBL_EQ(old_y, sd->align_y))
evas_object_smart_calculate(sd->pan_obj);
}
diff --git a/src/lib/elementary/elm_gengrid.h b/src/lib/elementary/elm_gengrid.h
index 9485b7781e..c45854e7ab 100644
--- a/src/lib/elementary/elm_gengrid.h
+++ b/src/lib/elementary/elm_gengrid.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Gengrid Gengrid (Generic grid)
+ * @defgroup Elm_Gengrid_Group Gengrid (Generic grid)
* @ingroup Elementary
*
* @image html gengrid_inheritance_tree.png
@@ -16,10 +16,10 @@
* view) or via the keyboard, navigating through item with the
* arrow keys.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for gengrid objects.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for gengrids.
*
@@ -162,7 +162,7 @@
* @section Gengrid_Smart_Events Gengrid smart events
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "activated" - The user has double-clicked or pressed
* (enter|return|spacebar) on an item. The @p event_info parameter
* is the gengrid item that was activated.
@@ -271,7 +271,7 @@
*/
/**
- * @addtogroup Elm_Gengrid
+ * @addtogroup Elm_Gengrid_Group
* @{
*/
diff --git a/src/lib/elementary/elm_gengrid_common.h b/src/lib/elementary/elm_gengrid_common.h
index cd08c037c6..1ce05dcae3 100644
--- a/src/lib/elementary/elm_gengrid_common.h
+++ b/src/lib/elementary/elm_gengrid_common.h
@@ -35,7 +35,7 @@ typedef Elm_Gen_Item_Del_Cb Elm_Gengrid_Item_Del_Cb;
* @see elm_gengrid_item_class_free()
* @see elm_gengrid_item_append()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI Elm_Gengrid_Item_Class *elm_gengrid_item_class_new(void);
@@ -52,7 +52,7 @@ EAPI Elm_Gengrid_Item_Class *elm_gengrid_item_class_new(void);
* @see elm_gengrid_item_class_ref()
* @see elm_gengrid_item_class_unref()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_class_free(Elm_Gengrid_Item_Class *itc);
@@ -65,7 +65,7 @@ EAPI void elm_gengrid_item_class_free(Elm_Gengrid_Item_Class *itc);
*
* @see elm_gengrid_item_class_unref()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_class_ref(Elm_Gengrid_Item_Class *itc);
@@ -80,7 +80,7 @@ EAPI void elm_gengrid_item_class_ref(Elm_Gengrid_Item_Class *itc);
* @see elm_gengrid_item_class_ref()
* @see elm_gengrid_item_class_free()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_class_unref(Elm_Gengrid_Item_Class *itc);
@@ -99,7 +99,7 @@ EAPI void elm_gengrid_item_class_unref(Elm_Gengrid_Item_Class *itc);
* In order to set a content or something else as a tooltip, look at
* elm_gengrid_item_tooltip_content_cb_set().
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_tooltip_text_set(Elm_Object_Item *it, const char *text);
@@ -167,7 +167,7 @@ EAPI void elm_gengrid_item_tooltip_unset(Elm_Object_Ite
*
* @see elm_gengrid_item_tooltip_style_get()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_tooltip_style_set(Elm_Object_Item *it, const char *style);
@@ -181,7 +181,7 @@ EAPI void elm_gengrid_item_tooltip_style_set(Elm_Object
*
* @see elm_gengrid_item_tooltip_style_set() for more details
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI const char *elm_gengrid_item_tooltip_style_get(const Elm_Object_Item *it);
@@ -243,7 +243,7 @@ EAPI void elm_gengrid_item_cursor_set(Elm_Object_Item *
* @see elm_gengrid_item_cursor_set() for more details
* @see elm_gengrid_item_cursor_unset()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI const char *elm_gengrid_item_cursor_get(const Elm_Object_Item *it);
@@ -260,7 +260,7 @@ EAPI const char *elm_gengrid_item_cursor_get(const Elm_Object_
* @see elm_object_cursor_unset()
* @see elm_gengrid_item_cursor_set() for more details
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_cursor_unset(Elm_Object_Item *it);
@@ -285,7 +285,7 @@ EAPI void elm_gengrid_item_cursor_unset(Elm_Object_Item
* @see elm_gengrid_item_cursor_engine_only_set()
* @see elm_gengrid_item_cursor_style_get()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_cursor_style_set(Elm_Object_Item *it, const char *style);
@@ -299,7 +299,7 @@ EAPI void elm_gengrid_item_cursor_style_set(Elm_Object_
*
* @see elm_gengrid_item_cursor_style_set() for more details
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI const char *elm_gengrid_item_cursor_style_get(const Elm_Object_Item *it);
@@ -319,7 +319,7 @@ EAPI const char *elm_gengrid_item_cursor_style_get(const Elm_O
* @note By default, cursors will only be looked for between those
* provided by the rendering engine.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only);
@@ -335,7 +335,7 @@ EAPI void elm_gengrid_item_cursor_engine_only_set(Elm_O
*
* @see elm_gengrid_item_cursor_engine_only_set(), for more details
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI Eina_Bool elm_gengrid_item_cursor_engine_only_get(const Elm_Object_Item *it);
@@ -351,7 +351,7 @@ EAPI Eina_Bool elm_gengrid_item_cursor_engine_only_get(const
* gengrid. For example, @c (0, 1) would stand for first row,
* second column.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_pos_get(const Elm_Object_Item *it, unsigned int *x, unsigned int *y);
@@ -379,7 +379,7 @@ EAPI void elm_gengrid_item_pos_get(const Elm_Object_Ite
*
* @see elm_gengrid_item_select_mode_get()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_item_select_mode_set(Elm_Object_Item *it, Elm_Object_Select_Mode mode);
@@ -392,7 +392,7 @@ EAPI void elm_gengrid_item_select_mode_set(Elm_Object_I
*
* @see elm_gengrid_item_select_mode_set()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI Elm_Object_Select_Mode elm_gengrid_item_select_mode_get(const Elm_Object_Item *it);
diff --git a/src/lib/elementary/elm_gengrid_eo.h b/src/lib/elementary/elm_gengrid_eo.h
index 340a273cd8..040feaa069 100644
--- a/src/lib/elementary/elm_gengrid_eo.h
+++ b/src/lib/elementary/elm_gengrid_eo.h
@@ -13,7 +13,7 @@ typedef Eo Elm_Gengrid;
/** Gengrid reorder modes
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
typedef enum
{
@@ -25,11 +25,11 @@ typedef enum
#endif
/** Elementary gengrid class
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_CLASS elm_gengrid_class_get()
-EWAPI const Efl_Class *elm_gengrid_class_get(void);
+EWAPI const Efl_Class *elm_gengrid_class_get(void) EINA_CONST;
/**
* @brief Set the items grid's alignment within a given gengrid widget.
@@ -46,7 +46,7 @@ EWAPI const Efl_Class *elm_gengrid_class_get(void);
* @param[in] align_x Alignment in the horizontal axis (0 <= align_x <= 1).
* @param[in] align_y Alignment in the vertical axis (0 <= align_y <= 1).
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_align_set(Eo *obj, double align_x, double align_y);
@@ -60,7 +60,7 @@ EOAPI void elm_obj_gengrid_align_set(Eo *obj, double align_x, double align_y);
* @param[out] align_x Alignment in the horizontal axis (0 <= align_x <= 1).
* @param[out] align_y Alignment in the vertical axis (0 <= align_y <= 1).
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_align_get(const Eo *obj, double *align_x, double *align_y);
@@ -75,7 +75,7 @@ EOAPI void elm_obj_gengrid_align_get(const Eo *obj, double *align_x, double *ali
* @param[in] obj The object.
* @param[in] fill @c true if the grid is filled, @c false otherwise
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_filled_set(Eo *obj, Eina_Bool fill);
@@ -89,7 +89,7 @@ EOAPI void elm_obj_gengrid_filled_set(Eo *obj, Eina_Bool fill);
*
* @return @c true if the grid is filled, @c false otherwise
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Eina_Bool elm_obj_gengrid_filled_get(const Eo *obj);
@@ -107,7 +107,7 @@ EOAPI Eina_Bool elm_obj_gengrid_filled_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] multi @c true if multislect is enabled, @c false otherwise
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_multi_select_set(Eo *obj, Eina_Bool multi);
@@ -119,7 +119,7 @@ EOAPI void elm_obj_gengrid_multi_select_set(Eo *obj, Eina_Bool multi);
*
* @return @c true if multislect is enabled, @c false otherwise
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Eina_Bool elm_obj_gengrid_multi_select_get(const Eo *obj);
@@ -135,7 +135,7 @@ EOAPI Eina_Bool elm_obj_gengrid_multi_select_get(const Eo *obj);
* @param[in] w The group items' width.
* @param[in] h The group items' height.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_group_item_size_set(Eo *obj, int w, int h);
@@ -149,7 +149,7 @@ EOAPI void elm_obj_gengrid_group_item_size_set(Eo *obj, int w, int h);
* @param[out] w The group items' width.
* @param[out] h The group items' height.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_group_item_size_get(const Eo *obj, int *w, int *h);
@@ -168,7 +168,7 @@ EOAPI void elm_obj_gengrid_group_item_size_get(const Eo *obj, int *w, int *h);
* @param[in] obj The object.
* @param[in] mode The select mode.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_select_mode_set(Eo *obj, Elm_Object_Select_Mode mode);
@@ -179,7 +179,7 @@ EOAPI void elm_obj_gengrid_select_mode_set(Eo *obj, Elm_Object_Select_Mode mode)
*
* @return The select mode.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Object_Select_Mode elm_obj_gengrid_select_mode_get(const Eo *obj);
@@ -199,7 +199,7 @@ EOAPI Elm_Object_Select_Mode elm_obj_gengrid_select_mode_get(const Eo *obj);
* @param[in] reorder_mode Use @c true to turn reordering on, @c false to turn
* it off.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_reorder_mode_set(Eo *obj, Eina_Bool reorder_mode);
@@ -211,7 +211,7 @@ EOAPI void elm_obj_gengrid_reorder_mode_set(Eo *obj, Eina_Bool reorder_mode);
*
* @return Use @c true to turn reordering on, @c false to turn it off.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Eina_Bool elm_obj_gengrid_reorder_mode_get(const Eo *obj);
@@ -222,7 +222,7 @@ EOAPI Eina_Bool elm_obj_gengrid_reorder_mode_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] highlight @c true if item will be highlighted, @c false otherwise
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_highlight_mode_set(Eo *obj, Eina_Bool highlight);
@@ -234,7 +234,7 @@ EOAPI void elm_obj_gengrid_highlight_mode_set(Eo *obj, Eina_Bool highlight);
*
* @return @c true if item will be highlighted, @c false otherwise
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Eina_Bool elm_obj_gengrid_highlight_mode_get(const Eo *obj);
@@ -246,7 +246,7 @@ EOAPI Eina_Bool elm_obj_gengrid_highlight_mode_get(const Eo *obj);
*
* @since 1.11
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_reorder_type_set(Eo *obj, Elm_Gengrid_Reorder_Type type);
@@ -262,7 +262,7 @@ EOAPI void elm_obj_gengrid_reorder_type_set(Eo *obj, Elm_Gengrid_Reorder_Type ty
* @param[in] w The items' width.
* @param[in] h The items' height.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_item_size_set(Eo *obj, int w, int h);
@@ -276,7 +276,7 @@ EOAPI void elm_obj_gengrid_item_size_set(Eo *obj, int w, int h);
* @param[out] w The items' width.
* @param[out] h The items' height.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_item_size_get(const Eo *obj, int *w, int *h);
@@ -294,7 +294,7 @@ EOAPI void elm_obj_gengrid_item_size_get(const Eo *obj, int *w, int *h);
*
* @since 1.8
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_multi_select_mode_set(Eo *obj, Elm_Object_Multi_Select_Mode mode);
@@ -309,7 +309,7 @@ EOAPI void elm_obj_gengrid_multi_select_mode_set(Eo *obj, Elm_Object_Multi_Selec
*
* @since 1.8
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Object_Multi_Select_Mode elm_obj_gengrid_multi_select_mode_get(const Eo *obj);
@@ -330,7 +330,7 @@ EOAPI Elm_Object_Multi_Select_Mode elm_obj_gengrid_multi_select_mode_get(const E
* @param[in] horizontal @c true to make the gengrid expand horizontally,
* @c false to expand vertically.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_horizontal_set(Eo *obj, Eina_Bool horizontal);
@@ -343,7 +343,7 @@ EOAPI void elm_obj_gengrid_horizontal_set(Eo *obj, Eina_Bool horizontal);
* @return @c true to make the gengrid expand horizontally, @c false to expand
* vertically.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Eina_Bool elm_obj_gengrid_horizontal_get(const Eo *obj);
@@ -360,7 +360,7 @@ EOAPI Eina_Bool elm_obj_gengrid_horizontal_get(const Eo *obj);
* @return The selected item's handle or @c null if none is selected at the
* moment (and on errors).
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_selected_item_get(const Eo *obj);
@@ -376,7 +376,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_selected_item_get(const Eo *obj);
*
* @return The list of realized items or @c null if none are realized.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Eina_List *elm_obj_gengrid_realized_items_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
@@ -390,7 +390,7 @@ EOAPI Eina_List *elm_obj_gengrid_realized_items_get(const Eo *obj) EINA_WARN_UNU
* @return The first item's handle or @c null, if there are no items in @c obj
* (and on errors)
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_first_item_get(const Eo *obj);
@@ -407,7 +407,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_first_item_get(const Eo *obj);
* @return The list of selected items or @c null, if none is selected at the
* moment (and on errors).
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI const Eina_List *elm_obj_gengrid_selected_items_get(const Eo *obj);
@@ -421,7 +421,7 @@ EOAPI const Eina_List *elm_obj_gengrid_selected_items_get(const Eo *obj);
* @return The last item's handle or @c null if there are no items in @c obj
* (and on errors).
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_last_item_get(const Eo *obj);
@@ -439,7 +439,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_last_item_get(const Eo *obj);
*
* @return A handle to the item added or @c null on errors.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_item_insert_before(Eo *obj, const Elm_Gengrid_Item_Class *itc, const void *data, Elm_Widget_Item *relative, Evas_Smart_Cb func, const void *func_data);
@@ -453,7 +453,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_item_insert_before(Eo *obj, const Elm_Gen
* To update just one item, use @ref elm_gengrid_item_update.
* @param[in] obj The object.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_realized_items_update(Eo *obj);
@@ -471,7 +471,7 @@ EOAPI void elm_obj_gengrid_realized_items_update(Eo *obj);
*
* @return A handle to the item added or @c null on error.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_item_insert_after(Eo *obj, const Elm_Gengrid_Item_Class *itc, const void *data, Elm_Widget_Item *relative, Evas_Smart_Cb func, const void *func_data);
@@ -484,7 +484,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_item_insert_after(Eo *obj, const Elm_Geng
*
* @return Items in list
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI unsigned int elm_obj_gengrid_items_count(const Eo *obj);
@@ -512,7 +512,7 @@ EOAPI unsigned int elm_obj_gengrid_items_count(const Eo *obj);
*
* @return The item at the coordinates or @c null if none.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_at_xy_item_get(const Eo *obj, int x, int y, int *xposret, int *yposret);
@@ -529,7 +529,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_at_xy_item_get(const Eo *obj, int x, int
*
* @return A handle to the item added or @c null on errors.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_item_append(Eo *obj, const Elm_Gengrid_Item_Class *itc, const void *data, Evas_Smart_Cb func, const void *func_data);
@@ -546,7 +546,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_item_append(Eo *obj, const Elm_Gengrid_It
*
* @return A handle to the item added or @c null on errors.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_item_prepend(Eo *obj, const Elm_Gengrid_Item_Class *itc, const void *data, Evas_Smart_Cb func, const void *func_data);
@@ -558,7 +558,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_item_prepend(Eo *obj, const Elm_Gengrid_I
* See @ref elm_gengrid_item_del to remove just one item.
* @param[in] obj The object.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_clear(Eo *obj);
@@ -580,7 +580,7 @@ EOAPI void elm_obj_gengrid_clear(Eo *obj);
*
* @return A handle to the item added or @c null on errors.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_item_sorted_insert(Eo *obj, const Elm_Gengrid_Item_Class *itc, const void *data, Eina_Compare_Cb comp, Evas_Smart_Cb func, const void *func_data);
@@ -607,7 +607,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_item_sorted_insert(Eo *obj, const Elm_Gen
*
* @since 1.11
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_search_by_text_item_get(Eo *obj, Elm_Widget_Item *item_to_search_from, const char *part_name, const char *pattern, Elm_Glob_Match_Flags flags);
@@ -619,7 +619,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_search_by_text_item_get(Eo *obj, Elm_Widg
*
* @since 1.10
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_reorder_mode_start(Eo *obj, Ecore_Pos_Map tween_mode);
@@ -627,7 +627,7 @@ EOAPI void elm_obj_gengrid_reorder_mode_start(Eo *obj, Ecore_Pos_Map tween_mode)
*
* @since 1.10
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EOAPI void elm_obj_gengrid_reorder_mode_stop(Eo *obj);
@@ -636,7 +636,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_REALIZED;
/** Called when gengrid realized
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_REALIZED (&(_ELM_GENGRID_EVENT_REALIZED))
@@ -645,7 +645,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_UNREALIZED;
/** Called when gengrid unrealized
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_UNREALIZED (&(_ELM_GENGRID_EVENT_UNREALIZED))
@@ -654,7 +654,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_INDEX_UPDATE;
/** Called on gengrid index update
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_INDEX_UPDATE (&(_ELM_GENGRID_EVENT_INDEX_UPDATE))
@@ -662,7 +662,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_SCROLL_PAGE_CHANGED;
/** Called when scroll page changed
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_SCROLL_PAGE_CHANGED (&(_ELM_GENGRID_EVENT_SCROLL_PAGE_CHANGED))
@@ -670,7 +670,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_EDGE_BOTTOM;
/** Called when bottom edge is reached
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_EDGE_BOTTOM (&(_ELM_GENGRID_EVENT_EDGE_BOTTOM))
@@ -678,7 +678,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_EDGE_TOP;
/** Called when top edge is reached
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_EDGE_TOP (&(_ELM_GENGRID_EVENT_EDGE_TOP))
@@ -686,7 +686,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_EDGE_RIGHT;
/** Called when right edge is reached
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_EDGE_RIGHT (&(_ELM_GENGRID_EVENT_EDGE_RIGHT))
@@ -694,7 +694,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_EDGE_LEFT;
/** Called when left edge is reached
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_EDGE_LEFT (&(_ELM_GENGRID_EVENT_EDGE_LEFT))
@@ -703,7 +703,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_ITEM_FOCUSED;
/** Called when item got focus
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_ITEM_FOCUSED (&(_ELM_GENGRID_EVENT_ITEM_FOCUSED))
@@ -712,7 +712,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_ITEM_UNFOCUSED;
/** Called when item no longer has focus
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_ITEM_UNFOCUSED (&(_ELM_GENGRID_EVENT_ITEM_UNFOCUSED))
@@ -721,7 +721,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_ITEM_REORDER_ANIM_ST
/** Called when item reorder animation started
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_ITEM_REORDER_ANIM_START (&(_ELM_GENGRID_EVENT_ITEM_REORDER_ANIM_START))
@@ -730,7 +730,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_ITEM_REORDER_ANIM_ST
/** Called when item reorder animation stopped
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_ITEM_REORDER_ANIM_STOP (&(_ELM_GENGRID_EVENT_ITEM_REORDER_ANIM_STOP))
@@ -739,7 +739,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_ACTIVATED;
/** Called when gengrid got activated
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_ACTIVATED (&(_ELM_GENGRID_EVENT_ACTIVATED))
@@ -748,7 +748,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_HIGHLIGHTED;
/** Called when gengrid is highlighted
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_HIGHLIGHTED (&(_ELM_GENGRID_EVENT_HIGHLIGHTED))
@@ -757,7 +757,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_UNHIGHLIGHTED;
/** Called when gengrid is no longer highlighted
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_UNHIGHLIGHTED (&(_ELM_GENGRID_EVENT_UNHIGHLIGHTED))
@@ -766,7 +766,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_RELEASED;
/** Called when gengrid is released
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_RELEASED (&(_ELM_GENGRID_EVENT_RELEASED))
@@ -775,7 +775,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENGRID_EVENT_MOVED;
/** Called when gengrid item moved
* @return Efl_Object *
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
#define ELM_GENGRID_EVENT_MOVED (&(_ELM_GENGRID_EVENT_MOVED))
diff --git a/src/lib/elementary/elm_gengrid_eo.legacy.h b/src/lib/elementary/elm_gengrid_eo.legacy.h
index b454ac0653..e069502d68 100644
--- a/src/lib/elementary/elm_gengrid_eo.legacy.h
+++ b/src/lib/elementary/elm_gengrid_eo.legacy.h
@@ -13,7 +13,7 @@ typedef Eo Elm_Gengrid;
/** Gengrid reorder modes
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
typedef enum
{
diff --git a/src/lib/elementary/elm_gengrid_item_eo.h b/src/lib/elementary/elm_gengrid_item_eo.h
index b11d264b81..d386de11af 100644
--- a/src/lib/elementary/elm_gengrid_item_eo.h
+++ b/src/lib/elementary/elm_gengrid_item_eo.h
@@ -13,13 +13,21 @@ typedef Eo Elm_Gengrid_Item;
#endif
-/** Elementary gengrid item class
+/**
+ * Elementary gengrid item class
+ *
+ * @defgroup Elm_Gengrid_Item_Group Gengrid Item
+ * @ingroup Elm_Gengrid_Group
+ */
+
+/**
+ * @brief Get gengrid item class
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
#define ELM_GENGRID_ITEM_CLASS elm_gengrid_item_class_get()
-EWAPI const Efl_Class *elm_gengrid_item_class_get(void);
+EWAPI const Efl_Class *elm_gengrid_item_class_get(void) EINA_CONST;
/**
* @brief Get the previous item in a gengrid widget's internal list of items,
@@ -31,7 +39,7 @@ EWAPI const Efl_Class *elm_gengrid_item_class_get(void);
*
* @return The item before @c item, or @c NULL if there's none (and on errors)
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_item_prev_get(const Eo *obj);
@@ -45,7 +53,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_item_prev_get(const Eo *obj);
*
* @return The item after @c item, or @c NULL if there's none (and on errors)
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI Elm_Widget_Item *elm_obj_gengrid_item_next_get(const Eo *obj);
@@ -63,7 +71,7 @@ EOAPI Elm_Widget_Item *elm_obj_gengrid_item_next_get(const Eo *obj);
* @param[in] selected The selected state ($true selected, @c false not
* selected)
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_selected_set(Eo *obj, Eina_Bool selected);
@@ -81,7 +89,7 @@ EOAPI void elm_obj_gengrid_item_selected_set(Eo *obj, Eina_Bool selected);
*
* @return The selected state ($true selected, @c false not selected)
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI Eina_Bool elm_obj_gengrid_item_selected_get(const Eo *obj);
@@ -95,7 +103,7 @@ EOAPI Eina_Bool elm_obj_gengrid_item_selected_get(const Eo *obj);
*
* @return Gengrid Item class for the given item
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI const Elm_Gengrid_Item_Class *elm_obj_gengrid_item_class_get(const Eo *obj);
@@ -106,7 +114,7 @@ EOAPI const Elm_Gengrid_Item_Class *elm_obj_gengrid_item_class_get(const Eo *obj
*
* @return The position inside the list of item.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI int elm_obj_gengrid_item_index_get(const Eo *obj);
@@ -121,7 +129,7 @@ EOAPI int elm_obj_gengrid_item_index_get(const Eo *obj);
* @param[out] x Pointer to variable to store the item's <b>row number</b>.
* @param[out] y Pointer to variable to store the item's <b>column number</b>.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_pos_get(const Eo *obj, unsigned int *x, unsigned int *y);
@@ -147,7 +155,7 @@ EOAPI void elm_obj_gengrid_item_pos_get(const Eo *obj, unsigned int *x, unsigned
* @param[in] obj The object.
* @param[in] mode The selected mode
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_select_mode_set(Eo *obj, Elm_Object_Select_Mode mode);
@@ -174,7 +182,7 @@ EOAPI void elm_obj_gengrid_item_select_mode_set(Eo *obj, Elm_Object_Select_Mode
*
* @return The selected mode
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI Elm_Object_Select_Mode elm_obj_gengrid_item_select_mode_get(const Eo *obj);
@@ -196,7 +204,7 @@ EOAPI Elm_Object_Select_Mode elm_obj_gengrid_item_select_mode_get(const Eo *obj)
*
* @since 1.19
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_custom_size_set(Eo *obj, int w, int h);
@@ -215,7 +223,7 @@ EOAPI void elm_obj_gengrid_item_custom_size_set(Eo *obj, int w, int h);
*
* @since 1.19
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_custom_size_get(const Eo *obj, int *w, int *h);
@@ -229,7 +237,7 @@ EOAPI void elm_obj_gengrid_item_custom_size_get(const Eo *obj, int *w, int *h);
* @param[in] obj The object.
* @param[in] type Where to position the item in the viewport.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_show(Eo *obj, Elm_Gengrid_Item_Scrollto_Type type);
@@ -244,7 +252,7 @@ EOAPI void elm_obj_gengrid_item_show(Eo *obj, Elm_Gengrid_Item_Scrollto_Type typ
* @param[in] obj The object.
* @param[in] type Where to position the item in the viewport.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_bring_in(Eo *obj, Elm_Gengrid_Item_Scrollto_Type type);
@@ -256,7 +264,7 @@ EOAPI void elm_obj_gengrid_item_bring_in(Eo *obj, Elm_Gengrid_Item_Scrollto_Type
* changed and you want the changes to be reflected.
* @param[in] obj The object.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_update(Eo *obj);
@@ -277,7 +285,7 @@ EOAPI void elm_obj_gengrid_item_update(Eo *obj);
*
* @since 1.15
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_fields_update(Eo *obj, const char *parts, Elm_Gengrid_Item_Field_Type itf);
@@ -292,7 +300,7 @@ EOAPI void elm_obj_gengrid_item_fields_update(Eo *obj, const char *parts, Elm_Ge
* @param[in] itc The gengrid item class describing the function pointers and
* the item style.
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_class_update(Eo *obj, const Elm_Gengrid_Item_Class *itc);
@@ -308,7 +316,7 @@ EOAPI void elm_obj_gengrid_item_class_update(Eo *obj, const Elm_Gengrid_Item_Cla
*
* @since 1.18
*
- * @ingroup Elm_Gengrid_Item
+ * @ingroup Elm_Gengrid_Item_Group
*/
EOAPI void elm_obj_gengrid_item_all_contents_unset(Eo *obj, Eina_List **l);
diff --git a/src/lib/elementary/elm_gengrid_item_eo.legacy.h b/src/lib/elementary/elm_gengrid_item_eo.legacy.h
index 01f1a634db..e8c6eea0a6 100644
--- a/src/lib/elementary/elm_gengrid_item_eo.legacy.h
+++ b/src/lib/elementary/elm_gengrid_item_eo.legacy.h
@@ -15,6 +15,11 @@ typedef Eo Elm_Gengrid_Item;
#endif
/**
+ * @defgroup Elm_Gengrid_Item_Group Gengrid Item
+ * @ingroup Elm_Gengrid_Group
+ */
+
+/**
* @brief Get the previous item in a gengrid widget's internal list of items,
* given a handle to one of those items.
*
diff --git a/src/lib/elementary/elm_gengrid_legacy.h b/src/lib/elementary/elm_gengrid_legacy.h
index 720563b896..492537e8e3 100644
--- a/src/lib/elementary/elm_gengrid_legacy.h
+++ b/src/lib/elementary/elm_gengrid_legacy.h
@@ -14,7 +14,7 @@
* @see elm_object_item_del()
* @see elm_gengrid_clear()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI Evas_Object *elm_gengrid_add(Evas_Object *parent);
@@ -28,7 +28,7 @@ EAPI Evas_Object *elm_gengrid_add(Evas_Object *parent);
* @return The item stored in @p obj at position @p nth or @c NULL, if there's
* no item with that index (and on errors)
*
- * @ingroup Genilst
+ * @ingroup Elm_Gengrid_Group
* @since 1.8
*/
EAPI Elm_Object_Item *elm_gengrid_nth_item_get(const Evas_Object *obj, unsigned int nth);
@@ -80,7 +80,7 @@ EINA_DEPRECATED EAPI void elm_gengrid_page_show(const E
*
* @see elm_gengrid_scroller_policy_get()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EINA_DEPRECATED EAPI void elm_gengrid_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v);
@@ -97,7 +97,7 @@ EINA_DEPRECATED EAPI void elm_gengrid_scroller_policy_set(Evas_Object *
*
* @see elm_gengrid_scroller_policy_set()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EINA_DEPRECATED EAPI void elm_gengrid_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v);
@@ -121,7 +121,7 @@ EINA_DEPRECATED EAPI void elm_gengrid_scroller_policy_get(const Evas_Ob
*
* @see elm_scroller_bounce_set()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EINA_DEPRECATED EAPI void elm_gengrid_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
@@ -139,7 +139,7 @@ EINA_DEPRECATED EAPI void elm_gengrid_bounce_set(Evas_Object *obj, Eina
*
* @see elm_scroller_bounce_get()
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EINA_DEPRECATED EAPI void elm_gengrid_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
@@ -218,7 +218,7 @@ EINA_DEPRECATED EAPI void elm_gengrid_page_bring_in(const Evas_Object *
* @param[in] h_pagesize Page size horizontal
* @param[in] v_pagesize Page size vertical
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_page_size_set(Evas_Object *obj, int h_pagesize, int v_pagesize);
@@ -230,7 +230,7 @@ EAPI void elm_gengrid_page_size_set(Evas_Object *obj, int h_pagesize, int v_page
* @param[in] h_pagerel Page relation horizontal
* @param[in] v_pagerel Page relation vertical
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel);
@@ -242,7 +242,7 @@ EAPI void elm_gengrid_page_relative_set(Evas_Object *obj, double h_pagerel, doub
* @param[out] h_pagerel Page relation horizontal
* @param[out] v_pagerel Page relation vertical
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_page_relative_get(const Evas_Object *obj, double *h_pagerel, double *v_pagerel);
@@ -258,7 +258,7 @@ EAPI void elm_gengrid_page_relative_get(const Evas_Object *obj, double *h_pagere
* @param[in] disabled Use @c true to disable mouse wheel or @c false to enable
* it.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI void elm_gengrid_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled);
@@ -271,7 +271,7 @@ EAPI void elm_gengrid_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled);
*
* @return Use @c true to disable mouse wheel or @c false to enable it.
*
- * @ingroup Elm_Gengrid
+ * @ingroup Elm_Gengrid_Group
*/
EAPI Eina_Bool elm_gengrid_wheel_disabled_get(const Evas_Object *obj);
diff --git a/src/lib/elementary/elm_gengrid_pan_eo.h b/src/lib/elementary/elm_gengrid_pan_eo.h
index 277f40676d..39778b645b 100644
--- a/src/lib/elementary/elm_gengrid_pan_eo.h
+++ b/src/lib/elementary/elm_gengrid_pan_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Gengrid_Pan;
*/
#define ELM_GENGRID_PAN_CLASS elm_gengrid_pan_class_get()
-EWAPI const Efl_Class *elm_gengrid_pan_class_get(void);
+EWAPI const Efl_Class *elm_gengrid_pan_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c
index b84e830545..342d26e0d3 100644
--- a/src/lib/elementary/elm_genlist.c
+++ b/src/lib/elementary/elm_genlist.c
@@ -372,7 +372,6 @@ static void
_widget_calculate_recursive(Eo *obj)
{
Elm_Widget_Smart_Data *pd = NULL;
- Eina_List *l;
Evas_Object *child;
if (!efl_isa(obj, EFL_UI_WIDGET_CLASS)) return;
@@ -388,8 +387,11 @@ _widget_calculate_recursive(Eo *obj)
return;
}
- EINA_LIST_FOREACH(pd->subobjs, l, child)
- _widget_calculate_recursive(child);
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
+ {
+ child = eina_array_data_get(pd->children, i);
+ _widget_calculate_recursive(child);
+ }
efl_canvas_group_calculate(obj);
}
@@ -713,9 +715,13 @@ _elm_genlist_item_unrealize(Elm_Gen_Item *it,
elm_wdg_item_track_cancel(EO_OBJ(it));
- _item_unrealize(it);
if (!calc)
- efl_event_callback_legacy_call(WIDGET(it), ELM_GENLIST_EVENT_UNREALIZED, EO_OBJ(it));
+ {
+ efl_event_callback_legacy_call(WIDGET(it), ELM_GENLIST_EVENT_UNREALIZED, EO_OBJ(it));
+ if (it->base->func.unrealized) it->base->func.unrealized(EO_OBJ(it));
+ }
+
+ _item_unrealize(it);
evas_event_thaw(e);
evas_event_thaw_eval(e);
@@ -1552,8 +1558,10 @@ _item_cache_free(Item_Cache *itc)
/* does not exist if cache item has just been reused */
if (itc->base_view)
{
+ Evas_Object *view = itc->base_view;
efl_wref_del(itc->base_view, &itc->base_view);
- efl_del(itc->base_view);
+ efl_del(view);
+ itc->base_view = NULL;
}
itc->item_class = NULL;
EINA_LIST_FREE(itc->contents, c)
@@ -1661,7 +1669,8 @@ _item_cache_add(Elm_Gen_Item *it, Eina_List *contents)
efl_wref_del(it->base->view, &it->base->view);
VIEW(it) = NULL;
evas_object_hide(itc->base_view);
- evas_object_move(itc->base_view, -9999, -9999);
+// lower eocalloverhead - no need to do this
+// evas_object_move(itc->base_view, -9999, -9999);
_item_cache_clean(sd);
@@ -2049,6 +2058,7 @@ _item_realize(Elm_Gen_Item *it, const int index, Eina_Bool calc)
}
efl_event_callback_legacy_call(WIDGET(it), ELM_GENLIST_EVENT_REALIZED, EO_OBJ(it));
+ if (it->base->func.realized) it->base->func.realized(EO_OBJ(it));
}
//Send a signal so that an item changes its style according to its expand depth
@@ -4096,31 +4106,31 @@ _item_mouse_move_cb(void *data,
if (dy < 0)
{
if (ady > adx)
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_UP, eo_it);
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,start,up", eo_it);
else
{
if (dx < 0)
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_LEFT, eo_it);
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,start,left", eo_it);
else
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_RIGHT, eo_it);
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,start,right", eo_it);
}
}
else
{
if (ady > adx)
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_DOWN, eo_it);
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,start,down", eo_it);
else
{
if (dx < 0)
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_LEFT, eo_it);
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,start,left", eo_it);
else
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_START_RIGHT, eo_it);
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,start,right", eo_it);
}
}
}
@@ -4316,8 +4326,8 @@ _item_multi_down_cb(void *data,
if (it->dragging)
{
it->dragging = EINA_FALSE;
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_STOP, EO_OBJ(it));
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,stop", EO_OBJ(it));
}
ELM_SAFE_FREE(it->item->swipe_timer, ecore_timer_del);
if (sd->on_hold)
@@ -5112,8 +5122,8 @@ _item_mouse_up_cb(void *data,
if (it->dragging)
{
it->dragging = EINA_FALSE;
- efl_event_callback_legacy_call
- (WIDGET(it), EFL_UI_EVENT_DRAG_STOP, EO_OBJ(it));
+ evas_object_smart_callback_call
+ (WIDGET(it), "drag,stop", EO_OBJ(it));
dragged = 1;
}
ELM_SAFE_FREE(it->item->swipe_timer, ecore_timer_del);
@@ -5383,7 +5393,10 @@ _item_unrealize(Elm_Gen_Item *it)
if (!_item_cache_add(it, _content_cache_add(it, &cache)))
{
- ELM_SAFE_FREE(VIEW(it), efl_del);
+ Evas_Object *view = VIEW(it);
+ efl_wref_del(VIEW(it), &VIEW(it));
+ ELM_SAFE_FREE(view, efl_del);
+ VIEW(it) = NULL;
it->callbacks = EINA_FALSE;
ELM_SAFE_FREE(it->spacer, evas_object_del);
EINA_LIST_FREE(cache, c)
@@ -5912,6 +5925,7 @@ _elm_genlist_efl_canvas_group_group_del(Eo *obj, Elm_Genlist_Data *sd)
eina_stringshare_replace(&sd->decorate_it_type, NULL);
+ eina_hash_free(sd->content_item_map);
_elm_genlist_tree_effect_stop(sd);
}
@@ -7396,6 +7410,7 @@ _elm_genlist_item_all_contents_unset(Eo *eo_item EINA_UNUSED, Elm_Gen_Item *it,
Evas_Object *content;
ELM_GENLIST_ITEM_CHECK_OR_RETURN(it);
+ ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd);
EINA_LIST_FREE(it->contents, content)
{
@@ -7403,6 +7418,7 @@ _elm_genlist_item_all_contents_unset(Eo *eo_item EINA_UNUSED, Elm_Gen_Item *it,
edje_object_part_unswallow(VIEW(it), content);
evas_object_hide(content);
if (l) *l = eina_list_append(*l, content);
+ eina_hash_del_by_key(sd->content_item_map, &content);
}
}
diff --git a/src/lib/elementary/elm_genlist.h b/src/lib/elementary/elm_genlist.h
index e060a685e7..0a42f84e67 100644
--- a/src/lib/elementary/elm_genlist.h
+++ b/src/lib/elementary/elm_genlist.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Genlist Genlist (Generic list)
+ * @defgroup Elm_Genlist_Group Genlist (Generic list)
* @ingroup Elementary
*
* @image html genlist_inheritance_tree.png
@@ -19,10 +19,10 @@
* trying to be both expansive, powerful and efficient. First we will begin
* an overview on the theory behind genlist.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for genlist objects.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for genlists.
*
@@ -250,7 +250,7 @@
* @section Genlist_Smart_Events Genlist smart events
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "activated" - The user has double-clicked or pressed
* (enter|return|spacebar) on an item. The @p event_info parameter is the
* item that was activated.
@@ -393,7 +393,7 @@
*/
/**
- * @addtogroup Elm_Genlist
+ * @addtogroup Elm_Genlist_Group
* @{
*/
diff --git a/src/lib/elementary/elm_genlist_common.h b/src/lib/elementary/elm_genlist_common.h
index 0b56d0e60c..3ab889fdca 100644
--- a/src/lib/elementary/elm_genlist_common.h
+++ b/src/lib/elementary/elm_genlist_common.h
@@ -44,7 +44,7 @@ typedef Elm_Gen_Item_Reusable_Content_Get_Cb Elm_Genlist_Reusable_Content_Get_Cb
* @see elm_genlist_item_class_free()
* @see elm_genlist_item_append()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI Elm_Genlist_Item_Class *elm_genlist_item_class_new(void);
@@ -61,7 +61,7 @@ EAPI Elm_Genlist_Item_Class *elm_genlist_item_class_new(void);
* @see elm_genlist_item_class_ref()
* @see elm_genlist_item_class_unref()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_class_free(Elm_Genlist_Item_Class *itc);
@@ -74,7 +74,7 @@ EAPI void elm_genlist_item_class_free(Elm_Genlist_Item_Class *itc);
*
* @see elm_genlist_item_class_unref()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_class_ref(Elm_Genlist_Item_Class *itc);
@@ -89,7 +89,7 @@ EAPI void elm_genlist_item_class_ref(Elm_Genlist_Item_Class *itc);
* @see elm_genlist_item_class_ref()
* @see elm_genlist_item_class_free()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_class_unref(Elm_Genlist_Item_Class *itc);
@@ -108,7 +108,7 @@ EAPI void elm_genlist_item_class_unref(Elm_Genlist_Item_Class *itc);
* In order to set a content or something else as a tooltip, look at
* elm_genlist_item_tooltip_content_cb_set().
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_tooltip_text_set(Elm_Object_Item *it, const char *text);
@@ -136,7 +136,7 @@ EAPI void elm_genlist_item_tooltip_text_set(Elm_Object_
* In order to set just a text as a tooltip, look at
* elm_genlist_item_tooltip_text_set().
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_tooltip_content_cb_set(Elm_Object_Item *it, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb);
@@ -153,7 +153,7 @@ EAPI void elm_genlist_item_tooltip_content_cb_set(Elm_O
*
* @see elm_genlist_item_tooltip_content_cb_set()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_tooltip_unset(Elm_Object_Item *it);
@@ -176,7 +176,7 @@ EAPI void elm_genlist_item_tooltip_unset(Elm_Object_Ite
*
* @see elm_genlist_item_tooltip_style_get()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_tooltip_style_set(Elm_Object_Item *it, const char *style);
@@ -190,7 +190,7 @@ EAPI void elm_genlist_item_tooltip_style_set(Elm_Object
*
* @see elm_genlist_item_tooltip_style_set() for more details
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI const char *elm_genlist_item_tooltip_style_get(const Elm_Object_Item *it);
@@ -236,7 +236,7 @@ EAPI Eina_Bool elm_genlist_item_tooltip_window_mode_get(cons
* @see elm_genlist_item_cursor_get()
* @see elm_genlist_item_cursor_unset()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_cursor_set(Elm_Object_Item *it, const char *cursor);
@@ -252,7 +252,7 @@ EAPI void elm_genlist_item_cursor_set(Elm_Object_Item *
* @see elm_genlist_item_cursor_set() for more details
* @see elm_genlist_item_cursor_unset()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI const char *elm_genlist_item_cursor_get(const Elm_Object_Item *it);
@@ -269,7 +269,7 @@ EAPI const char *elm_genlist_item_cursor_get(const Elm_Object_
* @see elm_object_cursor_unset()
* @see elm_genlist_item_cursor_set() for more details
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_cursor_unset(Elm_Object_Item *it);
@@ -294,7 +294,7 @@ EAPI void elm_genlist_item_cursor_unset(Elm_Object_Item
* @see elm_genlist_item_cursor_engine_only_set()
* @see elm_genlist_item_cursor_style_get()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_cursor_style_set(Elm_Object_Item *it, const char *style);
@@ -308,7 +308,7 @@ EAPI void elm_genlist_item_cursor_style_set(Elm_Object_
*
* @see elm_genlist_item_cursor_style_set() for more details
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI const char *elm_genlist_item_cursor_style_get(const Elm_Object_Item *it);
@@ -328,7 +328,7 @@ EAPI const char *elm_genlist_item_cursor_style_get(const Elm_O
* @note By default, cursors will only be looked for between those
* provided by the rendering engine.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI void elm_genlist_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only);
@@ -344,7 +344,7 @@ EAPI void elm_genlist_item_cursor_engine_only_set(Elm_O
*
* @see elm_genlist_item_cursor_engine_only_set(), for more details
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI Eina_Bool elm_genlist_item_cursor_engine_only_get(const Elm_Object_Item *it);
diff --git a/src/lib/elementary/elm_genlist_eo.h b/src/lib/elementary/elm_genlist_eo.h
index f132027980..a66cfc89da 100644
--- a/src/lib/elementary/elm_genlist_eo.h
+++ b/src/lib/elementary/elm_genlist_eo.h
@@ -15,11 +15,11 @@ typedef Eo Elm_Genlist;
#endif
/** Elementary genlist class
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_CLASS elm_genlist_class_get()
-EWAPI const Efl_Class *elm_genlist_class_get(void);
+EWAPI const Efl_Class *elm_genlist_class_get(void) EINA_CONST;
/**
* @brief Enable/disable homogeneous mode.
@@ -38,7 +38,7 @@ EWAPI const Efl_Class *elm_genlist_class_get(void);
* @param[in] homogeneous Assume the items within the genlist are of the same
* height and width. Default is @c false.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_homogeneous_set(Eo *obj, Eina_Bool homogeneous);
@@ -50,7 +50,7 @@ EOAPI void elm_obj_genlist_homogeneous_set(Eo *obj, Eina_Bool homogeneous);
* @return Assume the items within the genlist are of the same height and
* width. Default is @c false.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Bool elm_obj_genlist_homogeneous_get(const Eo *obj);
@@ -68,7 +68,7 @@ EOAPI Eina_Bool elm_obj_genlist_homogeneous_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] mode The select mode.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_select_mode_set(Eo *obj, Elm_Object_Select_Mode mode);
@@ -79,7 +79,7 @@ EOAPI void elm_obj_genlist_select_mode_set(Eo *obj, Elm_Object_Select_Mode mode)
*
* @return The select mode.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Object_Select_Mode elm_obj_genlist_select_mode_get(const Eo *obj);
@@ -95,7 +95,7 @@ EOAPI Elm_Object_Select_Mode elm_obj_genlist_select_mode_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] enabled The tree effect status.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_focus_on_selection_set(Eo *obj, Eina_Bool enabled);
@@ -106,7 +106,7 @@ EOAPI void elm_obj_genlist_focus_on_selection_set(Eo *obj, Eina_Bool enabled);
*
* @return The tree effect status.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Bool elm_obj_genlist_focus_on_selection_get(const Eo *obj);
@@ -124,7 +124,7 @@ EOAPI Eina_Bool elm_obj_genlist_focus_on_selection_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] timeout Timeout in seconds. Default is elm config value (1.0).
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_longpress_timeout_set(Eo *obj, double timeout);
@@ -135,7 +135,7 @@ EOAPI void elm_obj_genlist_longpress_timeout_set(Eo *obj, double timeout);
*
* @return Timeout in seconds. Default is elm config value (1.0).
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI double elm_obj_genlist_longpress_timeout_get(const Eo *obj);
@@ -149,7 +149,7 @@ EOAPI double elm_obj_genlist_longpress_timeout_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] multi Multi-select enable/disable. Default is disabled.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_multi_select_set(Eo *obj, Eina_Bool multi);
@@ -160,7 +160,7 @@ EOAPI void elm_obj_genlist_multi_select_set(Eo *obj, Eina_Bool multi);
*
* @return Multi-select enable/disable. Default is disabled.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Bool elm_obj_genlist_multi_select_get(const Eo *obj);
@@ -174,7 +174,7 @@ EOAPI Eina_Bool elm_obj_genlist_multi_select_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] reorder_mode The reorder mode.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_reorder_mode_set(Eo *obj, Eina_Bool reorder_mode);
@@ -185,7 +185,7 @@ EOAPI void elm_obj_genlist_reorder_mode_set(Eo *obj, Eina_Bool reorder_mode);
*
* @return The reorder mode.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Bool elm_obj_genlist_reorder_mode_get(const Eo *obj);
@@ -197,7 +197,7 @@ EOAPI Eina_Bool elm_obj_genlist_reorder_mode_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] decorated The decorate mode status.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_decorate_mode_set(Eo *obj, Eina_Bool decorated);
@@ -208,7 +208,7 @@ EOAPI void elm_obj_genlist_decorate_mode_set(Eo *obj, Eina_Bool decorated);
*
* @return The decorate mode status.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Bool elm_obj_genlist_decorate_mode_get(const Eo *obj);
@@ -226,7 +226,7 @@ EOAPI Eina_Bool elm_obj_genlist_decorate_mode_get(const Eo *obj);
*
* @since 1.8
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_multi_select_mode_set(Eo *obj, Elm_Object_Multi_Select_Mode mode);
@@ -239,7 +239,7 @@ EOAPI void elm_obj_genlist_multi_select_mode_set(Eo *obj, Elm_Object_Multi_Selec
*
* @since 1.8
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Object_Multi_Select_Mode elm_obj_genlist_multi_select_mode_get(const Eo *obj);
@@ -262,7 +262,7 @@ EOAPI Elm_Object_Multi_Select_Mode elm_obj_genlist_multi_select_mode_get(const E
* @param[in] count Maximum number of items within an item block. Default is
* 32.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_block_count_set(Eo *obj, int count);
@@ -273,7 +273,7 @@ EOAPI void elm_obj_genlist_block_count_set(Eo *obj, int count);
*
* @return Maximum number of items within an item block. Default is 32.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI int elm_obj_genlist_block_count_get(const Eo *obj);
@@ -283,7 +283,7 @@ EOAPI int elm_obj_genlist_block_count_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] enabled The tree effect status.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_tree_effect_enabled_set(Eo *obj, Eina_Bool enabled);
@@ -294,7 +294,7 @@ EOAPI void elm_obj_genlist_tree_effect_enabled_set(Eo *obj, Eina_Bool enabled);
*
* @return The tree effect status.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Bool elm_obj_genlist_tree_effect_enabled_get(const Eo *obj);
@@ -311,7 +311,7 @@ EOAPI Eina_Bool elm_obj_genlist_tree_effect_enabled_get(const Eo *obj);
* @param[in] highlight @c true to enable highlighting or @c false to disable
* it.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_highlight_mode_set(Eo *obj, Eina_Bool highlight);
@@ -323,7 +323,7 @@ EOAPI void elm_obj_genlist_highlight_mode_set(Eo *obj, Eina_Bool highlight);
*
* @return @c true to enable highlighting or @c false to disable it.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Bool elm_obj_genlist_highlight_mode_get(const Eo *obj);
@@ -355,7 +355,7 @@ EOAPI Eina_Bool elm_obj_genlist_highlight_mode_get(const Eo *obj);
* @param[in] mode The mode to use (one of @ref ELM_LIST_SCROLL or
* @ref ELM_LIST_LIMIT).
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_mode_set(Eo *obj, Elm_List_Mode mode);
@@ -367,7 +367,7 @@ EOAPI void elm_obj_genlist_mode_set(Eo *obj, Elm_List_Mode mode);
* @return The mode to use (one of @ref ELM_LIST_SCROLL or
* @ref ELM_LIST_LIMIT).
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_List_Mode elm_obj_genlist_mode_get(const Eo *obj);
@@ -382,7 +382,7 @@ EOAPI Elm_List_Mode elm_obj_genlist_mode_get(const Eo *obj);
* @return The active item for that current mode. Or @c null if no item is
* activated with any mode.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_decorated_item_get(const Eo *obj);
@@ -400,7 +400,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_decorated_item_get(const Eo *obj);
*
* @return The selected item, or @c null if none is selected.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_selected_item_get(const Eo *obj);
@@ -415,7 +415,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_selected_item_get(const Eo *obj);
*
* @return The first item or @c null.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_first_item_get(const Eo *obj);
@@ -431,7 +431,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_first_item_get(const Eo *obj);
*
* @return List of realized items
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_List *elm_obj_genlist_realized_items_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
@@ -452,7 +452,7 @@ EOAPI Eina_List *elm_obj_genlist_realized_items_get(const Eo *obj) EINA_WARN_UNU
*
* @return List of selected items
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI const Eina_List *elm_obj_genlist_selected_items_get(const Eo *obj);
@@ -467,7 +467,7 @@ EOAPI const Eina_List *elm_obj_genlist_selected_items_get(const Eo *obj);
*
* @return Last item in list
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_last_item_get(const Eo *obj);
@@ -488,7 +488,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_last_item_get(const Eo *obj);
*
* @return Handle to inserted item
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_insert_before(Eo *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Widget_Item *parent, Elm_Widget_Item *before_it, Elm_Genlist_Item_Type type, Evas_Smart_Cb func, const void *func_data);
@@ -502,7 +502,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_insert_before(Eo *obj, const Elm_Gen
* To update just one item, use @ref elm_genlist_item_update.
* @param[in] obj The object.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_realized_items_update(Eo *obj);
@@ -523,7 +523,7 @@ EOAPI void elm_obj_genlist_realized_items_update(Eo *obj);
*
* @return Handle to inserted item
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_insert_after(Eo *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Widget_Item *parent, Elm_Widget_Item *after_it, Elm_Genlist_Item_Type type, Evas_Smart_Cb func, const void *func_data);
@@ -546,7 +546,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_insert_after(Eo *obj, const Elm_Genl
*
* @return Item at position
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_at_xy_item_get(const Eo *obj, int x, int y, int *posret);
@@ -562,7 +562,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_at_xy_item_get(const Eo *obj, int x, int
* @param[in] obj The object.
* @param[in] key Filter key
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_filter_set(Eo *obj, void *key);
@@ -576,7 +576,7 @@ EOAPI void elm_obj_genlist_filter_set(Eo *obj, void *key);
*
* @return Iterator on genlist
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Eina_Iterator *elm_obj_genlist_filter_iterator_new(Eo *obj);
@@ -593,7 +593,7 @@ EOAPI Eina_Iterator *elm_obj_genlist_filter_iterator_new(Eo *obj);
*
* @since 1.18
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI unsigned int elm_obj_genlist_filtered_items_count(const Eo *obj);
@@ -606,7 +606,7 @@ EOAPI unsigned int elm_obj_genlist_filtered_items_count(const Eo *obj);
*
* @return Item in list
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI unsigned int elm_obj_genlist_items_count(const Eo *obj);
@@ -626,7 +626,7 @@ EOAPI unsigned int elm_obj_genlist_items_count(const Eo *obj);
*
* @return Handle to prepended item
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_prepend(Eo *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Widget_Item *parent, Elm_Genlist_Item_Type type, Evas_Smart_Cb func, const void *func_data);
@@ -636,7 +636,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_prepend(Eo *obj, const Elm_Genlist_I
* This removes (and deletes) all items in @c obj, leaving it empty.
* @param[in] obj The object.
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI void elm_obj_genlist_clear(Eo *obj);
@@ -656,7 +656,7 @@ EOAPI void elm_obj_genlist_clear(Eo *obj);
*
* @return Handle to appended item
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_append(Eo *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Widget_Item *parent, Elm_Genlist_Item_Type type, Evas_Smart_Cb func, const void *func_data);
@@ -678,7 +678,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_append(Eo *obj, const Elm_Genlist_It
*
* @return Handle to inserted item
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_sorted_insert(Eo *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Widget_Item *parent, Elm_Genlist_Item_Type type, Eina_Compare_Cb comp, Evas_Smart_Cb func, const void *func_data);
@@ -704,7 +704,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_sorted_insert(Eo *obj, const Elm_Gen
*
* @since 1.11
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_search_by_text_item_get(Eo *obj, Elm_Widget_Item *item_to_search_from, const char *part_name, const char *pattern, Elm_Glob_Match_Flags flags);
@@ -713,7 +713,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_ITEM_FOCUSED;
/** Called when genlist item got focus
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_ITEM_FOCUSED (&(_ELM_GENLIST_EVENT_ITEM_FOCUSED))
@@ -722,7 +722,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_ITEM_UNFOCUSED;
/** Called when genlist item lost focus
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_ITEM_UNFOCUSED (&(_ELM_GENLIST_EVENT_ITEM_UNFOCUSED))
@@ -730,7 +730,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_VBAR_DRAG;
/** Called when vertical bar is dragged
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_VBAR_DRAG (&(_ELM_GENLIST_EVENT_VBAR_DRAG))
@@ -738,7 +738,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_VBAR_PRESS;
/** Called when vertical bar is pressed
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_VBAR_PRESS (&(_ELM_GENLIST_EVENT_VBAR_PRESS))
@@ -746,7 +746,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_VBAR_UNPRESS;
/** Called when vertical bar is no longer pressed
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_VBAR_UNPRESS (&(_ELM_GENLIST_EVENT_VBAR_UNPRESS))
@@ -754,7 +754,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_HBAR_DRAG;
/** Called when horizontal bar is dragged
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_HBAR_DRAG (&(_ELM_GENLIST_EVENT_HBAR_DRAG))
@@ -762,7 +762,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_HBAR_PRESS;
/** Called when horizontal bar is pressed
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_HBAR_PRESS (&(_ELM_GENLIST_EVENT_HBAR_PRESS))
@@ -770,7 +770,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_HBAR_UNPRESS;
/** Called when horizontal bar is no longer pressed
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_HBAR_UNPRESS (&(_ELM_GENLIST_EVENT_HBAR_UNPRESS))
@@ -778,7 +778,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_EDGE_TOP;
/** Called when top edge is reached
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_EDGE_TOP (&(_ELM_GENLIST_EVENT_EDGE_TOP))
@@ -786,7 +786,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_EDGE_BOTTOM;
/** Called when bottom edge is reached
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_EDGE_BOTTOM (&(_ELM_GENLIST_EVENT_EDGE_BOTTOM))
@@ -794,7 +794,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_EDGE_LEFT;
/** Called when left edge is reached
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_EDGE_LEFT (&(_ELM_GENLIST_EVENT_EDGE_LEFT))
@@ -802,7 +802,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_EDGE_RIGHT;
/** Called when right edge is reached
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_EDGE_RIGHT (&(_ELM_GENLIST_EVENT_EDGE_RIGHT))
@@ -811,7 +811,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MOVED;
/** Called when genlist item moved
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MOVED (&(_ELM_GENLIST_EVENT_MOVED))
@@ -820,7 +820,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MOVED_BEFORE;
/** Called when genlist item moved before
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MOVED_BEFORE (&(_ELM_GENLIST_EVENT_MOVED_BEFORE))
@@ -829,7 +829,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MOVED_AFTER;
/** Called when genlist item moved after
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MOVED_AFTER (&(_ELM_GENLIST_EVENT_MOVED_AFTER))
@@ -838,7 +838,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_SWIPE;
/** Called when swipe is detected
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_SWIPE (&(_ELM_GENLIST_EVENT_SWIPE))
@@ -847,7 +847,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MULTI_PINCH_IN;
/** Called when multitouch pinch in detected
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MULTI_PINCH_IN (&(_ELM_GENLIST_EVENT_MULTI_PINCH_IN))
@@ -856,7 +856,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MULTI_PINCH_OUT;
/** Called when multitouch pinch out detected
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MULTI_PINCH_OUT (&(_ELM_GENLIST_EVENT_MULTI_PINCH_OUT))
@@ -865,7 +865,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MULTI_SWIPE_DOWN;
/** Called when multitouch swipe down detected
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MULTI_SWIPE_DOWN (&(_ELM_GENLIST_EVENT_MULTI_SWIPE_DOWN))
@@ -874,7 +874,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MULTI_SWIPE_UP;
/** Called when multitouch swipe up detected
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MULTI_SWIPE_UP (&(_ELM_GENLIST_EVENT_MULTI_SWIPE_UP))
@@ -883,7 +883,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MULTI_SWIPE_RIGHT;
/** Called when multitouch swipe right detected
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MULTI_SWIPE_RIGHT (&(_ELM_GENLIST_EVENT_MULTI_SWIPE_RIGHT))
@@ -892,7 +892,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_MULTI_SWIPE_LEFT;
/** Called when multitouch swipe left detected
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_MULTI_SWIPE_LEFT (&(_ELM_GENLIST_EVENT_MULTI_SWIPE_LEFT))
@@ -901,7 +901,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_RELEASED;
/** Called when genlist is released
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_RELEASED (&(_ELM_GENLIST_EVENT_RELEASED))
@@ -910,7 +910,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_ACTIVATED;
/** called when genlist is activated
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_ACTIVATED (&(_ELM_GENLIST_EVENT_ACTIVATED))
@@ -919,7 +919,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_HIGHLIGHTED;
/** Called when genlist is highlighted
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_HIGHLIGHTED (&(_ELM_GENLIST_EVENT_HIGHLIGHTED))
@@ -928,7 +928,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_UNHIGHLIGHTED;
/** Called when genlist is no longer highlighted
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_UNHIGHLIGHTED (&(_ELM_GENLIST_EVENT_UNHIGHLIGHTED))
@@ -937,7 +937,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_REALIZED;
/** Called when genlist is realized
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_REALIZED (&(_ELM_GENLIST_EVENT_REALIZED))
@@ -946,7 +946,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_UNREALIZED;
/** Called when genlist is unrealized
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_UNREALIZED (&(_ELM_GENLIST_EVENT_UNREALIZED))
@@ -955,7 +955,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_CONTRACT_REQUEST;
/** Called when contract is requested
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_CONTRACT_REQUEST (&(_ELM_GENLIST_EVENT_CONTRACT_REQUEST))
@@ -964,7 +964,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_EXPAND_REQUEST;
/** Called when expand is requested
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_EXPAND_REQUEST (&(_ELM_GENLIST_EVENT_EXPAND_REQUEST))
@@ -973,7 +973,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_CONTRACTED;
/** called when genlist is contracted
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_CONTRACTED (&(_ELM_GENLIST_EVENT_CONTRACTED))
@@ -982,7 +982,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_EXPANDED;
/** Called when genlist is expanded
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_EXPANDED (&(_ELM_GENLIST_EVENT_EXPANDED))
@@ -991,7 +991,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_INDEX_UPDATE;
/** Called when genlist index updated
* @return Efl_Object *
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_INDEX_UPDATE (&(_ELM_GENLIST_EVENT_INDEX_UPDATE))
@@ -999,7 +999,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_TREE_EFFECT_FINISHED
/** Called when genlist tree effect finished
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_TREE_EFFECT_FINISHED (&(_ELM_GENLIST_EVENT_TREE_EFFECT_FINISHED))
@@ -1007,7 +1007,7 @@ EWAPI extern const Efl_Event_Description _ELM_GENLIST_EVENT_FILTER_DONE;
/** Called when genlist filter is done
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
#define ELM_GENLIST_EVENT_FILTER_DONE (&(_ELM_GENLIST_EVENT_FILTER_DONE))
diff --git a/src/lib/elementary/elm_genlist_item_eo.h b/src/lib/elementary/elm_genlist_item_eo.h
index ef73deb4d2..372248923d 100644
--- a/src/lib/elementary/elm_genlist_item_eo.h
+++ b/src/lib/elementary/elm_genlist_item_eo.h
@@ -13,13 +13,21 @@ typedef Eo Elm_Genlist_Item;
#endif
-/** Elementary genlist item class
+/**
+ * Elementary genlist item class
+ *
+ * @defgroup Elm_Genlist_Item_Group Genlist Item
+ * @ingroup Elm_Genlist_Group
+ */
+
+/**
+ * @brief Get genlist item class
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
#define ELM_GENLIST_ITEM_CLASS elm_genlist_item_class_get()
-EWAPI const Efl_Class *elm_genlist_item_class_get(void);
+EWAPI const Efl_Class *elm_genlist_item_class_get(void) EINA_CONST;
/**
* @brief Get the previous item in a genlist widget's internal list of items,
@@ -40,7 +48,7 @@ EWAPI const Efl_Class *elm_genlist_item_class_get(void);
*
* @return The item before @c item, or @c null if there's none (and on errors).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_prev_get(const Eo *obj);
@@ -63,7 +71,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_prev_get(const Eo *obj);
*
* @return The item after @c item, or @c null if there's none (and on errors).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_next_get(const Eo *obj);
@@ -77,7 +85,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_next_get(const Eo *obj);
*
* @return The parent of the item or @c null if it has no parent.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Elm_Widget_Item *elm_obj_genlist_item_parent_item_get(const Eo *obj);
@@ -93,7 +101,7 @@ EOAPI Elm_Widget_Item *elm_obj_genlist_item_parent_item_get(const Eo *obj);
*
* @since 1.9
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI const Eina_List *elm_obj_genlist_item_subitems_get(const Eo *obj);
@@ -108,7 +116,7 @@ EOAPI const Eina_List *elm_obj_genlist_item_subitems_get(const Eo *obj);
* @param[in] selected The selected state ($true selected, @c false not
* selected).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_selected_set(Eo *obj, Eina_Bool selected);
@@ -119,7 +127,7 @@ EOAPI void elm_obj_genlist_item_selected_set(Eo *obj, Eina_Bool selected);
*
* @return The selected state ($true selected, @c false not selected).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Eina_Bool elm_obj_genlist_item_selected_get(const Eo *obj);
@@ -141,7 +149,7 @@ EOAPI Eina_Bool elm_obj_genlist_item_selected_get(const Eo *obj);
* @param[in] expanded The expanded state ($true expanded, @c false not
* expanded).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_expanded_set(Eo *obj, Eina_Bool expanded);
@@ -154,7 +162,7 @@ EOAPI void elm_obj_genlist_item_expanded_set(Eo *obj, Eina_Bool expanded);
*
* @return The expanded state ($true expanded, @c false not expanded).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Eina_Bool elm_obj_genlist_item_expanded_get(const Eo *obj);
@@ -165,7 +173,7 @@ EOAPI Eina_Bool elm_obj_genlist_item_expanded_get(const Eo *obj);
*
* @return The depth of expanded item.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI int elm_obj_genlist_item_expanded_depth_get(const Eo *obj);
@@ -179,7 +187,7 @@ EOAPI int elm_obj_genlist_item_expanded_depth_get(const Eo *obj);
*
* @return Genlist Item class for the given item.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI const Elm_Genlist_Item_Class *elm_obj_genlist_item_class_get(const Eo *obj);
@@ -192,7 +200,7 @@ EOAPI const Elm_Genlist_Item_Class *elm_obj_genlist_item_class_get(const Eo *obj
*
* @return The position inside the list of item.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI int elm_obj_genlist_item_index_get(const Eo *obj);
@@ -205,7 +213,7 @@ EOAPI int elm_obj_genlist_item_index_get(const Eo *obj);
*
* @return Name of the item's decorate mode.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI const char *elm_obj_genlist_item_decorate_mode_get(const Eo *obj);
@@ -219,7 +227,7 @@ EOAPI const char *elm_obj_genlist_item_decorate_mode_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] flip The flip mode.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_flip_set(Eo *obj, Eina_Bool flip);
@@ -233,7 +241,7 @@ EOAPI void elm_obj_genlist_item_flip_set(Eo *obj, Eina_Bool flip);
*
* @return The flip mode.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Eina_Bool elm_obj_genlist_item_flip_get(const Eo *obj);
@@ -261,7 +269,7 @@ EOAPI Eina_Bool elm_obj_genlist_item_flip_get(const Eo *obj);
* @param[in] obj The object.
* @param[in] mode The selected mode.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_select_mode_set(Eo *obj, Elm_Object_Select_Mode mode);
@@ -274,7 +282,7 @@ EOAPI void elm_obj_genlist_item_select_mode_set(Eo *obj, Elm_Object_Select_Mode
*
* @return The selected mode.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Elm_Object_Select_Mode elm_obj_genlist_item_select_mode_get(const Eo *obj);
@@ -288,7 +296,7 @@ EOAPI Elm_Object_Select_Mode elm_obj_genlist_item_select_mode_get(const Eo *obj)
*
* @return Item type.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Elm_Genlist_Item_Type elm_obj_genlist_item_type_get(const Eo *obj);
@@ -304,7 +312,7 @@ EOAPI Elm_Genlist_Item_Type elm_obj_genlist_item_type_get(const Eo *obj);
* @param[in] pin The item pin state state ($true pin item, @c false unpin
* item).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_pin_set(Eo *obj, Eina_Bool pin);
@@ -315,7 +323,7 @@ EOAPI void elm_obj_genlist_item_pin_set(Eo *obj, Eina_Bool pin);
*
* @return The item pin state state ($true pin item, @c false unpin item).
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI Eina_Bool elm_obj_genlist_item_pin_get(const Eo *obj);
@@ -330,7 +338,7 @@ EOAPI Eina_Bool elm_obj_genlist_item_pin_get(const Eo *obj);
*
* @since 1.9
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI unsigned int elm_obj_genlist_item_subitems_count(Eo *obj);
@@ -341,19 +349,19 @@ EOAPI unsigned int elm_obj_genlist_item_subitems_count(Eo *obj);
* given item @c it.
* @param[in] obj The object.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_subitems_clear(Eo *obj);
/** Promote an item to the top of the list.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_promote(Eo *obj);
/** Demote an item to the end of the list.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_demote(Eo *obj);
@@ -368,7 +376,7 @@ EOAPI void elm_obj_genlist_item_demote(Eo *obj);
* @param[in] type The position to bring in, the given item to. @ref
* Elm_Genlist_Item_Scrollto_Type.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_show(Eo *obj, Elm_Genlist_Item_Scrollto_Type type);
@@ -384,7 +392,7 @@ EOAPI void elm_obj_genlist_item_show(Eo *obj, Elm_Genlist_Item_Scrollto_Type typ
* @param[in] type The position to bring in, the given item to. @ref
* Elm_Genlist_Item_Scrollto_Type.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_bring_in(Eo *obj, Elm_Genlist_Item_Scrollto_Type type);
@@ -398,7 +406,7 @@ EOAPI void elm_obj_genlist_item_bring_in(Eo *obj, Elm_Genlist_Item_Scrollto_Type
* @param[in] obj The object.
* @param[out] l The contents list to return.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_all_contents_unset(Eo *obj, Eina_List **l);
@@ -419,7 +427,7 @@ EOAPI void elm_obj_genlist_item_all_contents_unset(Eo *obj, Eina_List **l);
* elm_genlist_item_fields_update.
* @param[in] obj The object.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_update(Eo *obj);
@@ -438,7 +446,7 @@ EOAPI void elm_obj_genlist_item_update(Eo *obj);
* @param[in] parts The name of item's part.
* @param[in] itf The type of item's part type.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_fields_update(Eo *obj, const char *parts, Elm_Genlist_Item_Field_Type itf);
@@ -452,7 +460,7 @@ EOAPI void elm_obj_genlist_item_fields_update(Eo *obj, const char *parts, Elm_Ge
* @param[in] obj The object.
* @param[in] itc The item class for the item.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_class_update(Eo *obj, const Elm_Genlist_Item_Class *itc);
@@ -489,7 +497,7 @@ EOAPI void elm_obj_genlist_item_class_update(Eo *obj, const Elm_Genlist_Item_Cla
* @param[in] decorate_it_type Mode name.
* @param[in] decorate_it_set Boolean to define set or unset mode.
*
- * @ingroup Elm_Genlist_Item
+ * @ingroup Elm_Genlist_Item_Group
*/
EOAPI void elm_obj_genlist_item_decorate_mode_set(Eo *obj, const char *decorate_it_type, Eina_Bool decorate_it_set);
diff --git a/src/lib/elementary/elm_genlist_item_eo.legacy.h b/src/lib/elementary/elm_genlist_item_eo.legacy.h
index 7ef94fcb32..587e45c212 100644
--- a/src/lib/elementary/elm_genlist_item_eo.legacy.h
+++ b/src/lib/elementary/elm_genlist_item_eo.legacy.h
@@ -15,6 +15,11 @@ typedef Eo Elm_Genlist_Item;
#endif
/**
+ * @defgroup Elm_Genlist_Item_Group Genlist Item
+ * @ingroup Elm_Genlist_Group
+ */
+
+/**
* @brief Get the previous item in a genlist widget's internal list of items,
* given a handle to one of those items.
*
diff --git a/src/lib/elementary/elm_genlist_legacy.h b/src/lib/elementary/elm_genlist_legacy.h
index 938c6b8f29..1109c88c4a 100644
--- a/src/lib/elementary/elm_genlist_legacy.h
+++ b/src/lib/elementary/elm_genlist_legacy.h
@@ -11,7 +11,7 @@
* @see elm_object_item_del()
* @see elm_genlist_clear()
*
- * @ingroup Elm_Genlist
+ * @ingroup Elm_Genlist_Group
*/
EAPI Evas_Object *elm_genlist_add(Evas_Object *parent);
@@ -25,7 +25,7 @@ EAPI Evas_Object *elm_genlist_add(Evas_Object *parent);
* @return The item stored in @p obj at position @p nth or @c NULL, if there's
* no item with that index (and on errors)
*
- * @ingroup Genilst
+ * @ingroup Elm_Genlist_Group
* @since 1.8
*/
EAPI Elm_Object_Item *
diff --git a/src/lib/elementary/elm_genlist_pan_eo.h b/src/lib/elementary/elm_genlist_pan_eo.h
index 1826f84584..0b1ba2601f 100644
--- a/src/lib/elementary/elm_genlist_pan_eo.h
+++ b/src/lib/elementary/elm_genlist_pan_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Genlist_Pan;
*/
#define ELM_GENLIST_PAN_CLASS elm_genlist_pan_class_get()
-EWAPI const Efl_Class *elm_genlist_pan_class_get(void);
+EWAPI const Efl_Class *elm_genlist_pan_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_gesture_layer.c b/src/lib/elementary/elm_gesture_layer.c
index de1fe793e3..2fb1a43e2b 100644
--- a/src/lib/elementary/elm_gesture_layer.c
+++ b/src/lib/elementary/elm_gesture_layer.c
@@ -614,8 +614,10 @@ _state_report(Gesture_Info *gesture,
* send ptr to user
* callback */
{
+ Eina_Inlist *itr;
Func_Data *cb_info;
- EINA_INLIST_FOREACH(gesture->cbs[gesture->state], cb_info)
+ /* elm_gesture_layer_cb_del can be called in Elm_Gesture_Event_Cb cb */
+ EINA_INLIST_FOREACH_SAFE(gesture->cbs[gesture->state], itr, cb_info)
flags |= cb_info->cb(cb_info->user_data, info);
}
@@ -1145,11 +1147,12 @@ _pending_device_add(Eina_List *list,
* user may cancel refeed of events by setting repeat events.
*
* @param obj The gesture-layer object.
+ * @param need_reset Clear all gestures data or not.
*
* @ingroup Elm_Gesture_Layer
*/
static Eina_Bool
-_event_history_clear(Evas_Object *obj)
+_event_history_clear(Evas_Object *obj, Eina_Bool need_reset)
{
int i;
Gesture_Info *p;
@@ -1179,16 +1182,17 @@ _event_history_clear(Evas_Object *obj)
_states_reset(sd); /* we are ready to start testing for gestures again */
/* Clear all gestures intermediate data */
- {
- /* FIXME: +1 because of the mistake in the enum. */
- Gesture_Info **gitr = sd->gesture + 1;
- Tests_Array_Funcs *fitr = _glayer_tests_array + 1;
- for (; fitr->reset; fitr++, gitr++)
- {
- if (IS_TESTED_GESTURE(*gitr))
- fitr->reset(*gitr);
- }
- }
+ if (need_reset)
+ {
+ /* FIXME: +1 because of the mistake in the enum. */
+ Gesture_Info **gitr = sd->gesture + 1;
+ Tests_Array_Funcs *fitr = _glayer_tests_array + 1;
+ for (; fitr->reset; fitr++, gitr++)
+ {
+ if (IS_TESTED_GESTURE(*gitr))
+ fitr->reset(*gitr);
+ }
+ }
/* Disable gesture layer so refeeded events won't be consumed by it */
_callbacks_unregister(obj);
@@ -1263,7 +1267,7 @@ _clear_if_finished(Evas_Object *obj)
}
if (reset_s && (!all_undefined))
- return _event_history_clear(obj);
+ return _event_history_clear(obj, EINA_TRUE);
return EINA_FALSE;
}
@@ -1348,6 +1352,7 @@ _event_process(void *data,
ELM_GESTURE_LAYER_DATA_GET(data, sd);
+ evas_object_ref(sd->target);
/* Start testing candidate gesture from here */
if (_pointer_event_make(data, event_info, event_type, &_pe))
pe = &_pe;
@@ -1386,6 +1391,8 @@ _event_process(void *data,
Eina_Bool states_reset = _clear_if_finished(data);
if (sd->glayer_continues_enable)
_continues_gestures_restart(data, states_reset);
+
+ evas_object_unref(sd->target);
}
static Eina_Bool
@@ -3182,7 +3189,7 @@ _zoom_compute(Zoom_Type *st,
* @internal
*
* This function handles zoom with mouse wheel.
- * thats a combination of wheel + CTRL key.
+ * that's a combination of wheel + CTRL key.
* @param obj The gesture-layer object.
* @param event_info Original input event pointer.
* @param event_type Type of original input event.
@@ -3812,7 +3819,7 @@ _elm_gesture_layer_efl_canvas_group_group_del(Eo *obj, Elm_Gesture_Layer_Data *s
ecore_timer_del(sd->gest_taps_timeout);
/* Then take care of clearing events */
- _event_history_clear(obj);
+ _event_history_clear(obj, EINA_FALSE);
sd->pending = eina_list_free(sd->pending);
EINA_LIST_FREE(sd->touched, data)
diff --git a/src/lib/elementary/elm_gesture_layer.h b/src/lib/elementary/elm_gesture_layer.h
index 5987f89765..919d19af04 100644
--- a/src/lib/elementary/elm_gesture_layer.h
+++ b/src/lib/elementary/elm_gesture_layer.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Gesture_Layer Gesture Layer
+ * @defgroup Elm_Gesture_Layer_Group Gesture Layer
* @ingroup Elementary
*
* @image html gesture_layer_inheritance_tree.png
diff --git a/src/lib/elementary/elm_gesture_layer_eo.h b/src/lib/elementary/elm_gesture_layer_eo.h
index 2f15a10660..ce2fa70a75 100644
--- a/src/lib/elementary/elm_gesture_layer_eo.h
+++ b/src/lib/elementary/elm_gesture_layer_eo.h
@@ -52,7 +52,7 @@ typedef enum
*/
#define ELM_GESTURE_LAYER_CLASS elm_gesture_layer_class_get()
-EWAPI const Efl_Class *elm_gesture_layer_class_get(void);
+EWAPI const Efl_Class *elm_gesture_layer_class_get(void) EINA_CONST;
/**
* @brief Control step value for zoom action.
diff --git a/src/lib/elementary/elm_gesture_layer_extra_gestures.c b/src/lib/elementary/elm_gesture_layer_extra_gestures.c
index b7bce1926c..dd663a8e79 100644
--- a/src/lib/elementary/elm_gesture_layer_extra_gestures.c
+++ b/src/lib/elementary/elm_gesture_layer_extra_gestures.c
@@ -50,7 +50,7 @@ _tap_long_single_tap_start_cb(void *data, void *event_info)
Evas_Event_Flags flags = EVAS_EVENT_FLAG_NONE;
if (!info->nb_taps_on_single)
{
- gl_debug("\n%s\n", __FUNCTION__);
+ gl_debug("\n%s\n", __func__);
_cb_call(info, ELM_GESTURE_STATE_START, event_info);
}
return flags;
@@ -63,7 +63,7 @@ _tap_long_single_tap_abort_cb(void *data, void *event_info EINA_UNUSED)
Evas_Event_Flags flags = EVAS_EVENT_FLAG_NONE;
if (!info->long_tap_started)
{
- gl_debug("%s\n", __FUNCTION__);
+ gl_debug("%s\n", __func__);
_cb_call(info, ELM_GESTURE_STATE_ABORT, NULL);
info->nb_taps_on_single = 0;
}
@@ -73,7 +73,7 @@ _tap_long_single_tap_abort_cb(void *data, void *event_info EINA_UNUSED)
static Eina_Bool
_tap_long_timeout(void *data)
{
- gl_debug("%s\n", __FUNCTION__);
+ gl_debug("%s\n", __func__);
Tap_Longpress_Info *info = data;
_tap_long_single_tap_abort_cb(info, NULL);
info->timer_between_taps = NULL;
@@ -83,7 +83,7 @@ _tap_long_timeout(void *data)
static Evas_Event_Flags
_tap_long_single_tap_end_cb(void *data, void *event_info)
{
- gl_debug("%s\n", __FUNCTION__);
+ gl_debug("%s\n", __func__);
Tap_Longpress_Info *info = data;
Evas_Event_Flags flags = EVAS_EVENT_FLAG_NONE;
double timeout_between_taps = elm_gesture_layer_double_tap_timeout_get(info->obj);
@@ -100,7 +100,7 @@ _tap_long_long_tap_start_cb(void *data, void *event_info EINA_UNUSED)
Evas_Event_Flags flags = EVAS_EVENT_FLAG_NONE;
if (info->nb_taps_on_single && info->timer_between_taps)
{
- gl_debug("%s\n", __FUNCTION__);
+ gl_debug("%s\n", __func__);
info->long_tap_started = EINA_TRUE;
ecore_timer_del(info->timer_between_taps);
info->timer_between_taps = NULL;
@@ -115,7 +115,7 @@ _tap_long_long_tap_abort_cb(void *data, void *event_info EINA_UNUSED)
Evas_Event_Flags flags = EVAS_EVENT_FLAG_NONE;
if (info->long_tap_started)
{
- gl_debug("%s\n", __FUNCTION__);
+ gl_debug("%s\n", __func__);
_cb_call(info, ELM_GESTURE_STATE_ABORT, NULL);
info->nb_taps_on_single = 0;
info->long_tap_started = EINA_FALSE;
@@ -136,7 +136,7 @@ _tap_long_long_tap_move_cb(void *data, void *event_info)
}
else
{
- gl_debug("%s\n", __FUNCTION__);
+ gl_debug("%s\n", __func__);
_cb_call(info, ELM_GESTURE_STATE_MOVE, event_info);
}
}
@@ -150,7 +150,7 @@ _tap_long_long_tap_end_cb(void *data, void *event_info)
Evas_Event_Flags flags = EVAS_EVENT_FLAG_NONE;
if (info->long_tap_started)
{
- gl_debug("%s\n", __FUNCTION__);
+ gl_debug("%s\n", __func__);
_cb_call(info, ELM_GESTURE_STATE_END, event_info);
info->long_tap_started = EINA_FALSE;
info->nb_taps_on_single = 0;
diff --git a/src/lib/elementary/elm_gesture_layer_legacy.h b/src/lib/elementary/elm_gesture_layer_legacy.h
index 7c67737e93..a77ae588ec 100644
--- a/src/lib/elementary/elm_gesture_layer_legacy.h
+++ b/src/lib/elementary/elm_gesture_layer_legacy.h
@@ -10,7 +10,7 @@
* This does not activate the gesture layer. You have to
* call elm_gesture_layer_attach() in order to 'activate' gesture-layer.
*
- * @ingroup Elm_Gesture_Layer
+ * @ingroup Elm_Gesture_Layer_Group
*/
EAPI Evas_Object *elm_gesture_layer_add(Evas_Object *parent);
@@ -32,7 +32,7 @@ EAPI Evas_Object *elm_gesture_layer_add(Evas_Object *parent);
*
* @see elm_gesture_layer_tap_longpress_cb_del
* @since 1.8
- * @ingroup Elm_Gesture_Layer
+ * @ingroup Elm_Gesture_Layer_Group
*/
EAPI void elm_gesture_layer_tap_longpress_cb_add(Evas_Object *obj, Elm_Gesture_State state, Elm_Gesture_Event_Cb cb, void *data);
@@ -49,6 +49,6 @@ EAPI void elm_gesture_layer_tap_longpress_cb_add(Evas_Object *obj, Elm_Gesture_S
*
* @see elm_gesture_layer_tap_longpress_cb_add
* @since 1.8
- * @ingroup Elm_Gesture_Layer
+ * @ingroup Elm_Gesture_Layer_Group
*/
EAPI void elm_gesture_layer_tap_longpress_cb_del(Evas_Object *obj, Elm_Gesture_State state, Elm_Gesture_Event_Cb cb, void *data);
diff --git a/src/lib/elementary/elm_glview.c b/src/lib/elementary/elm_glview.c
index a33921a4c9..eaa01f0cf0 100644
--- a/src/lib/elementary/elm_glview.c
+++ b/src/lib/elementary/elm_glview.c
@@ -53,7 +53,8 @@ _glview_update_surface(Evas_Object *obj)
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
if (!sd) return;
- evas_gl_make_current(sd->evasgl, NULL, NULL);
+ if (!evas_gl_make_current(sd->evasgl, NULL, NULL))
+ return;
if (sd->surface)
{
diff --git a/src/lib/elementary/elm_glview.h b/src/lib/elementary/elm_glview.h
index 5829354760..227d3aac16 100644
--- a/src/lib/elementary/elm_glview.h
+++ b/src/lib/elementary/elm_glview.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_GLView GLView
+ * @defgroup Elm_Glview_Group GLView
* @ingroup Elementary
*
* @image html glview_inheritance_tree.png
@@ -23,7 +23,8 @@
*/
/**
- * @ingroup Elm_GLView
+ * @addtogroup Elm_Glview_Group
+ * @{
*/
#include "elm_glview_common.h"
diff --git a/src/lib/elementary/elm_glview_common.h b/src/lib/elementary/elm_glview_common.h
index c84d49bef4..6ebea9054f 100644
--- a/src/lib/elementary/elm_glview_common.h
+++ b/src/lib/elementary/elm_glview_common.h
@@ -1,5 +1,5 @@
/**
- * @addtogroup Elm_GLView
+ * @addtogroup Elm_Glview_Group
*
* @{
*/
diff --git a/src/lib/elementary/elm_glview_eo.h b/src/lib/elementary/elm_glview_eo.h
index 9e8879b805..b693e19587 100644
--- a/src/lib/elementary/elm_glview_eo.h
+++ b/src/lib/elementary/elm_glview_eo.h
@@ -26,7 +26,7 @@ typedef Eo Elm_Glview;
*
* See @ref elm_obj_glview_mode_set See elm_opengl_page
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
typedef enum
{
@@ -118,7 +118,7 @@ typedef enum
*/
#define ELM_GLVIEW_CLASS elm_glview_class_get()
-EWAPI const Efl_Class *elm_glview_class_get(void);
+EWAPI const Efl_Class *elm_glview_class_get(void) EINA_CONST;
/**
* @brief Constructor with context version number.
diff --git a/src/lib/elementary/elm_glview_eo.legacy.h b/src/lib/elementary/elm_glview_eo.legacy.h
index 562b31207d..e3ac066d5c 100644
--- a/src/lib/elementary/elm_glview_eo.legacy.h
+++ b/src/lib/elementary/elm_glview_eo.legacy.h
@@ -26,7 +26,7 @@ typedef Eo Elm_Glview;
*
* See @ref elm_glview_mode_set See elm_opengl_page
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
typedef enum
{
diff --git a/src/lib/elementary/elm_glview_legacy.h b/src/lib/elementary/elm_glview_legacy.h
index 84e148c511..a5f66aaa65 100644
--- a/src/lib/elementary/elm_glview_legacy.h
+++ b/src/lib/elementary/elm_glview_legacy.h
@@ -4,7 +4,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
EAPI Evas_Object *elm_glview_add(Evas_Object *parent);
@@ -25,7 +25,7 @@ EAPI Evas_Object *elm_glview_version_add(Evas_Object *parent, Evas_GL_Context_Ve
*
* @param obj The GLView object
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
EAPI void elm_glview_changed_set(Evas_Object *obj);
@@ -36,7 +36,7 @@ EAPI void elm_glview_changed_set(Evas_Object *obj);
* @param w pointer of int width
* @param h pointer of int height
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
EAPI void elm_glview_size_get(const Evas_Object *obj, int *w, int *h);
@@ -47,7 +47,7 @@ EAPI void elm_glview_size_get(const Evas_Object *obj, int *w, int *h);
* @param w width of GLView
* @param h height of GLView
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
EAPI void elm_glview_size_set(Evas_Object *obj, int w, int h);
@@ -66,7 +66,7 @@ EAPI void elm_glview_init_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func);
* @param obj The GLView object
* @param func The callback function
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
EAPI void elm_glview_del_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func);
@@ -76,7 +76,7 @@ EAPI void elm_glview_del_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func);
* @param obj The GLView object
* @param func The callback function
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
EAPI void elm_glview_resize_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func);
@@ -86,7 +86,7 @@ EAPI void elm_glview_resize_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func);
* @param obj The GLView object
* @param func The callback function
*
- * @ingroup Elm_GLView
+ * @ingroup Elm_Glview_Group
*/
EAPI void elm_glview_render_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func);
#include "elm_glview_eo.legacy.h"
diff --git a/src/lib/elementary/elm_grid.c b/src/lib/elementary/elm_grid.c
index 6548f21e16..39a7b9cbc8 100644
--- a/src/lib/elementary/elm_grid.c
+++ b/src/lib/elementary/elm_grid.c
@@ -73,22 +73,19 @@ _elm_grid_efl_canvas_group_group_add(Eo *obj, void *_pd EINA_UNUSED)
EOLIAN static void
_elm_grid_efl_canvas_group_group_del(Eo *obj, void *_pd EINA_UNUSED)
{
- Eina_List *l;
- Evas_Object *child;
-
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
/* let's make our grid object the *last* to be processed, since it
* may (smart) parent other sub objects here */
- EINA_LIST_FOREACH(wd->subobjs, l, child)
- {
- if (child == wd->resize_obj)
- {
- wd->subobjs =
- eina_list_demote_list(wd->subobjs, l);
- break;
- }
- }
+ {
+ unsigned int resize_id = 0;
+ if (eina_array_find(wd->children, wd->resize_obj, &resize_id))
+ {
+ //exchange with last
+ eina_array_data_set(wd->children, resize_id, eina_array_data_get(wd->children, eina_array_count(wd->children) - 1));
+ eina_array_data_set(wd->children, eina_array_count(wd->children) - 1, wd->resize_obj);
+ }
+ }
efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
diff --git a/src/lib/elementary/elm_grid.h b/src/lib/elementary/elm_grid.h
index 0888ac4dff..f928c586af 100644
--- a/src/lib/elementary/elm_grid.h
+++ b/src/lib/elementary/elm_grid.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Grid Grid
+ * @defgroup Elm_Grid_Group Grid
* @ingroup Elementary
*
* @image html grid_inheritance_tree.png
diff --git a/src/lib/elementary/elm_grid_eo.h b/src/lib/elementary/elm_grid_eo.h
index d9ae0a821e..6b71e0855f 100644
--- a/src/lib/elementary/elm_grid_eo.h
+++ b/src/lib/elementary/elm_grid_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Grid;
*/
#define ELM_GRID_CLASS elm_grid_class_get()
-EWAPI const Efl_Class *elm_grid_class_get(void);
+EWAPI const Efl_Class *elm_grid_class_get(void) EINA_CONST;
/**
* @brief Set the virtual size of the grid
diff --git a/src/lib/elementary/elm_grid_legacy.h b/src/lib/elementary/elm_grid_legacy.h
index 6884fb1c06..f3ded0dffc 100644
--- a/src/lib/elementary/elm_grid_legacy.h
+++ b/src/lib/elementary/elm_grid_legacy.h
@@ -4,7 +4,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Grid
+ * @ingroup Elm_Grid_Group
*/
EAPI Evas_Object *elm_grid_add(Evas_Object *parent);
@@ -17,7 +17,7 @@ EAPI Evas_Object *elm_grid_add(Evas_Object *parent);
* @param w The virtual width at which to pack it
* @param h The virtual height at which to pack it
*
- * @ingroup Elm_Grid
+ * @ingroup Elm_Grid_Group
*/
EAPI void elm_grid_pack_set(Evas_Object *subobj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
@@ -30,8 +30,8 @@ EAPI void elm_grid_pack_set(Evas_Object *subobj, Evas_Coord x, Evas_Coor
* @param w Pointer to integer to store the virtual width
* @param h Pointer to integer to store the virtual height
*
- * @ingroup Elm_Grid
+ * @ingroup Elm_Grid_Group
*/
EAPI void elm_grid_pack_get(Evas_Object *subobj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
-#include "elm_grid_eo.legacy.h" \ No newline at end of file
+#include "elm_grid_eo.legacy.h"
diff --git a/src/lib/elementary/elm_helper.h b/src/lib/elementary/elm_helper.h
index 488372939a..a0ae990a81 100644
--- a/src/lib/elementary/elm_helper.h
+++ b/src/lib/elementary/elm_helper.h
@@ -68,7 +68,7 @@ elm_validator_regexp_free(Elm_Validator_Regexp *validator) EINA_ARG_NONNULL(1);
/**
* @brief Get the validation status.
*
- * @param The given validator
+ * @param validator The given validator
*
* @note All return value see here: http://www.gnu.org/software/libc/manual/html_node/Regular-Expressions.html
*
diff --git a/src/lib/elementary/elm_hover.h b/src/lib/elementary/elm_hover.h
index 342b3e3ba6..eeac7708c9 100644
--- a/src/lib/elementary/elm_hover.h
+++ b/src/lib/elementary/elm_hover.h
@@ -27,11 +27,11 @@
* @li menu
* @li hoversel_vertical
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for hover objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "clicked" - the user clicked the empty space in the hover to dismiss
* @li @c "dismissed" - the user clicked the empty space in the hover to dismiss (since 1.8)
* @li @c "smart,changed" - a content object placed under the "smart"
diff --git a/src/lib/elementary/elm_hover_eo.h b/src/lib/elementary/elm_hover_eo.h
index 8030a27851..60275fd9c5 100644
--- a/src/lib/elementary/elm_hover_eo.h
+++ b/src/lib/elementary/elm_hover_eo.h
@@ -32,7 +32,7 @@ typedef enum
*/
#define ELM_HOVER_CLASS elm_hover_class_get()
-EWAPI const Efl_Class *elm_hover_class_get(void);
+EWAPI const Efl_Class *elm_hover_class_get(void) EINA_CONST;
/**
* @brief Sets the target object for the hover.
diff --git a/src/lib/elementary/elm_hoversel_eo.h b/src/lib/elementary/elm_hoversel_eo.h
index cdbf7fcc42..ac4180b5dd 100644
--- a/src/lib/elementary/elm_hoversel_eo.h
+++ b/src/lib/elementary/elm_hoversel_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Hoversel;
*/
#define ELM_HOVERSEL_CLASS elm_hoversel_class_get()
-EWAPI const Efl_Class *elm_hoversel_class_get(void);
+EWAPI const Efl_Class *elm_hoversel_class_get(void) EINA_CONST;
/**
* @brief Control if the hoversel should expand horizontally.
diff --git a/src/lib/elementary/elm_hoversel_item_eo.h b/src/lib/elementary/elm_hoversel_item_eo.h
index 13953aef0c..f8645bd831 100644
--- a/src/lib/elementary/elm_hoversel_item_eo.h
+++ b/src/lib/elementary/elm_hoversel_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Hoversel_Item;
*/
#define ELM_HOVERSEL_ITEM_CLASS elm_hoversel_item_class_get()
-EWAPI const Efl_Class *elm_hoversel_item_class_get(void);
+EWAPI const Efl_Class *elm_hoversel_item_class_get(void) EINA_CONST;
/**
* @brief This controls the icon for the given hoversel item.
diff --git a/src/lib/elementary/elm_icon.c b/src/lib/elementary/elm_icon.c
index 910933d22f..b6aeff0135 100644
--- a/src/lib/elementary/elm_icon.c
+++ b/src/lib/elementary/elm_icon.c
@@ -85,9 +85,16 @@ _icon_thumb_display(Elm_Icon_Data *sd)
int prefix_size;
const char **ext, *ptr;
static const char *extensions[] =
- {
- ".avi", ".mp4", ".ogv", ".mov", ".mpg", ".wmv", NULL
- };
+ {
+ ".asf", ".avi", ".bdm", ".bdmv", ".clpi", ".cpi", ".dv", ".fla",
+ ".flv", ".m1v", ".m2t", ".m2v", ".m4v", ".mkv", ".mov", ".mp2",
+ ".mp2ts", ".mp4", ".mpe", ".mpeg", ".mpg", ".mpl", ".mpls", ".mts",
+ ".mxf", ".nut", ".nuv", ".ogg", ".ogm", ".ogv", ".qt", ".rm", ".rmj",
+ ".rmm", ".rms", ".rmvb", ".rmx", ".rv", ".swf", ".ts", ".weba",
+ ".webm", ".wmv", ".3g2", ".3gp", ".3gp2", ".3gpp", ".3gpp2", ".3p2",
+ ".264",
+ NULL
+ };
prefix_size = eina_stringshare_strlen(sd->thumb.file.path) - 4;
if (prefix_size >= 0)
@@ -322,7 +329,7 @@ _elm_icon_efl_file_load(Eo *obj, Elm_Icon_Data *sd)
if (efl_file_loaded_get(obj)) return 0;
err = efl_file_load(efl_super(obj, MY_CLASS));
if (err) return err;
-
+
Efl_Ui_Image_Data *id = efl_data_scope_get(obj, EFL_UI_IMAGE_CLASS);
_edje_signals_free(sd);
diff --git a/src/lib/elementary/elm_icon_eo.h b/src/lib/elementary/elm_icon_eo.h
index b53fed2b44..42e175a8be 100644
--- a/src/lib/elementary/elm_icon_eo.h
+++ b/src/lib/elementary/elm_icon_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Icon;
*/
#define ELM_ICON_CLASS elm_icon_class_get()
-EWAPI const Efl_Class *elm_icon_class_get(void);
+EWAPI const Efl_Class *elm_icon_class_get(void) EINA_CONST;
EWAPI extern const Efl_Event_Description _ELM_ICON_EVENT_THUMB_DONE;
diff --git a/src/lib/elementary/elm_index.c b/src/lib/elementary/elm_index.c
index 00ac57c711..6a4751c6e2 100644
--- a/src/lib/elementary/elm_index.c
+++ b/src/lib/elementary/elm_index.c
@@ -517,6 +517,17 @@ _elm_index_efl_ui_widget_theme_apply(Eo *obj, Elm_Index_Data *sd)
}
EOLIAN static void
+_elm_index_efl_canvas_group_group_calculate(Eo *obj, Elm_Index_Data *_pd EINA_UNUSED)
+{
+ Evas_Coord minw = -1, minh = -1;
+ ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+
+ edje_object_size_min_calc(wd->resize_obj, &minw, &minh);
+ evas_object_size_hint_min_set(obj, minw, minh);
+ evas_object_size_hint_max_set(obj, -1, -1);
+}
+
+EOLIAN static void
_elm_index_item_efl_object_destructor(Eo *eo_item EINA_UNUSED, Elm_Index_Item_Data *it)
{
ELM_INDEX_DATA_GET(WIDGET(it), sd);
@@ -1693,6 +1704,7 @@ _elm_index_item_efl_access_widget_action_elm_actions_get(const Eo *eo_it EINA_UN
/* Internal EO APIs and hidden overrides */
#define ELM_INDEX_EXTRA_OPS \
+ EFL_CANVAS_GROUP_CALC_OPS(elm_index), \
EFL_CANVAS_GROUP_ADD_DEL_OPS(elm_index)
#include "elm_index_item_eo.c"
diff --git a/src/lib/elementary/elm_index.h b/src/lib/elementary/elm_index.h
index 6ede67b8d5..69f2b9a719 100644
--- a/src/lib/elementary/elm_index.h
+++ b/src/lib/elementary/elm_index.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Index Index
+ * @defgroup Elm_Index_Group Index
* @ingroup Elementary
*
* @image html index_inheritance_tree.png
@@ -55,7 +55,7 @@
*/
/**
- * @addtogroup Elm_Index
+ * @addtogroup Elm_Index_Group
* @{
*/
diff --git a/src/lib/elementary/elm_index_eo.h b/src/lib/elementary/elm_index_eo.h
index 32af5b1d7b..c7fc586465 100644
--- a/src/lib/elementary/elm_index_eo.h
+++ b/src/lib/elementary/elm_index_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Index;
*/
#define ELM_INDEX_CLASS elm_index_class_get()
-EWAPI const Efl_Class *elm_index_class_get(void);
+EWAPI const Efl_Class *elm_index_class_get(void) EINA_CONST;
/**
* @brief Enable or disable auto hiding feature for a given index widget.
diff --git a/src/lib/elementary/elm_index_item_eo.h b/src/lib/elementary/elm_index_item_eo.h
index 39c8a9e0be..e4dbbf820b 100644
--- a/src/lib/elementary/elm_index_item_eo.h
+++ b/src/lib/elementary/elm_index_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Index_Item;
*/
#define ELM_INDEX_ITEM_CLASS elm_index_item_class_get()
-EWAPI const Efl_Class *elm_index_item_class_get(void);
+EWAPI const Efl_Class *elm_index_item_class_get(void) EINA_CONST;
/**
* @brief Set the selected state of an item.
diff --git a/src/lib/elementary/elm_index_item_eo.legacy.h b/src/lib/elementary/elm_index_item_eo.legacy.h
index d4286f7cef..184401d018 100644
--- a/src/lib/elementary/elm_index_item_eo.legacy.h
+++ b/src/lib/elementary/elm_index_item_eo.legacy.h
@@ -15,6 +15,11 @@ typedef Eo Elm_Index_Item;
#endif
/**
+ * @defgroup Elm_Index_Item_Group Index Item
+ * @ingroup Elm_Index_Group
+ */
+
+/**
* @brief Set the selected state of an item.
*
* This sets the selected state of the given item @c it. @c true for selected,
diff --git a/src/lib/elementary/elm_index_legacy.h b/src/lib/elementary/elm_index_legacy.h
index 7f8e7df2eb..d570262f0c 100644
--- a/src/lib/elementary/elm_index_legacy.h
+++ b/src/lib/elementary/elm_index_legacy.h
@@ -7,7 +7,7 @@
*
* This function inserts a new index widget on the canvas.
*
- * @ingroup Elm_Index
+ * @ingroup Elm_Index_Group
*/
EAPI Evas_Object *elm_index_add(Evas_Object *parent);
@@ -23,7 +23,7 @@ EAPI Evas_Object *elm_index_add(Evas_Object *parent);
* it, i.e., to enable vertical mode. it's an area one Fingers "finger" wide on
* the bottom side of the index widget's container.
*
- * @ingroup Elm_Index
+ * @ingroup Elm_Index_Group
*/
EAPI void elm_index_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
@@ -39,7 +39,7 @@ EAPI void elm_index_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
* @return Current status of horizontal mode on index object.
* @c true if horizontal mode is enabled or @c false if disabled.
*
- * @ingroup Elm_Index
+ * @ingroup Elm_Index_Group
*/
EAPI Eina_Bool elm_index_horizontal_get(const Evas_Object *obj);
diff --git a/src/lib/elementary/elm_interface_fileselector.c b/src/lib/elementary/elm_interface_fileselector.c
index 98d6552c70..bec043a88f 100644
--- a/src/lib/elementary/elm_interface_fileselector.c
+++ b/src/lib/elementary/elm_interface_fileselector.c
@@ -4,7 +4,7 @@
#include "elm_priv.h"
-#include "Eio_Eo.h"
+#include "Eio.h"
#include "elm_interface_fileselector.h"
diff --git a/src/lib/elementary/elm_interface_fileselector_eo.h b/src/lib/elementary/elm_interface_fileselector_eo.h
index f0996f18ae..dece644a6f 100644
--- a/src/lib/elementary/elm_interface_fileselector_eo.h
+++ b/src/lib/elementary/elm_interface_fileselector_eo.h
@@ -53,7 +53,7 @@ typedef enum
*/
#define ELM_INTERFACE_FILESELECTOR_INTERFACE elm_interface_fileselector_interface_get()
-EWAPI const Efl_Class *elm_interface_fileselector_interface_get(void);
+EWAPI const Efl_Class *elm_interface_fileselector_interface_get(void) EINA_CONST;
/**
* @brief Enable/disable folder-only view for a given file selector widget
diff --git a/src/lib/elementary/elm_interface_scrollable.c b/src/lib/elementary/elm_interface_scrollable.c
index 7130efbd94..0721f94030 100644
--- a/src/lib/elementary/elm_interface_scrollable.c
+++ b/src/lib/elementary/elm_interface_scrollable.c
@@ -946,8 +946,8 @@ _elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
-((double)sid->page.y * ((double)vh / (double)h)) / 100.0);
elm_obj_pan_pos_get(sid->pan_obj, &px, &py);
- if (vx != mx) x = px;
- if (vy != my) y = py;
+ if (!EINA_DBL_EQ(vx, mx)) x = px;
+ if (!EINA_DBL_EQ(vy, my)) y = py;
elm_obj_pan_pos_set(sid->pan_obj, x, y);
if (mx > 0) vx = (double)(x - minx) / (double)mx;
@@ -2052,10 +2052,11 @@ _scroll_wheel_post_event_cb(void *data, Evas *e EINA_UNUSED)
Evas_Coord x = 0, y = 0, vw = 0, vh = 0, cw = 0, ch = 0;
int pagenumber_h = 0, pagenumber_v = 0;
- int mx = 0, my = 0, minx = 0, miny = 0;
+ int mx = 0, my = 0, minx = 0, miny = 0, panw = 0, panh = 0;
Eina_Bool hold = EINA_FALSE;
Evas_Coord pwx, pwy;
double t;
+ long long lx, ly;
int direction;
EINA_SAFETY_ON_NULL_RETURN_VAL(ev, EINA_TRUE);
@@ -2075,6 +2076,7 @@ _scroll_wheel_post_event_cb(void *data, Evas *e EINA_UNUSED)
if (sid->scrollto.y.animator) y = sid->scrollto.y.end;
elm_obj_pan_pos_max_get(sid->pan_obj, &mx, &my);
elm_obj_pan_pos_min_get(sid->pan_obj, &minx, &miny);
+ elm_pan_content_size_get(sid->pan_obj, &panw, &panh);
if (x < minx) x = minx;
if (x > mx) x = mx;
if (y < miny) y = miny;
@@ -2109,7 +2111,7 @@ _scroll_wheel_post_event_cb(void *data, Evas *e EINA_UNUSED)
elm_obj_pan_content_size_get(sid->pan_obj, &cw, &ch);
if (!_paging_is_enabled(sid))
{
- int d = ev->z;
+ long long d = ev->z;
double delta_t = (double)(ev->timestamp - sid->last_wheel) / 1000.0;
double mul;
@@ -2117,31 +2119,40 @@ _scroll_wheel_post_event_cb(void *data, Evas *e EINA_UNUSED)
if (delta_t > 0.2) delta_t = 0.2;
mul = 1.0 + (_elm_config->scroll_accel_factor * ((0.2 - delta_t) / 0.2));
mul = mul * (1.0 + (0.15 * sid->last_wheel_mul));
+ if (d > 1000) d = 1000;
+ else if (d < -1000) d = -1000;
+ if (mul > 100000.0) mul = 100000.0;
d *= mul;
sid->last_wheel = ev->timestamp;
sid->last_wheel_mul = mul;
+ lx = x;
+ ly = y;
if (!direction)
{
if ((ch > vh) || (cw <= vw))
- y += d * sid->step.y;
+ ly += d * (long long)sid->step.y;
else
{
- x += d * sid->step.x;
+ lx += d * (long long)sid->step.x;
direction = 1;
}
}
else
{
if ((cw > vw) || (ch <= vh))
- x += d * sid->step.x;
+ lx += d * (long long)sid->step.x;
else
{
- y += d * sid->step.y;
+ ly += d * (long long)sid->step.y;
direction = 0;
}
}
- _scroll_wheel_post_event_go(sid, x, y);
+ if (ly < (0 - panh)) ly = 0 - panh;
+ else if (ly > (my + panh)) ly = my + panh;
+ if (lx < (0 - panw)) lx = 0 - panw;
+ else if (lx > (mx + panw)) lx = mx + panw;
+ _scroll_wheel_post_event_go(sid, lx, ly);
}
else
{
@@ -2281,8 +2292,8 @@ _elm_scroll_post_event_up(void *data,
static Eina_Bool
_paging_is_enabled(Elm_Scrollable_Smart_Interface_Data *sid)
{
- if ((sid->pagerel_h == 0.0) && (!sid->pagesize_h) &&
- (sid->pagerel_v == 0.0) && (!sid->pagesize_v))
+ if (EINA_DBL_EQ(sid->pagerel_h, 0.0) && (!sid->pagesize_h) &&
+ EINA_DBL_EQ(sid->pagerel_v, 0.0) && (!sid->pagesize_v))
return EINA_FALSE;
return EINA_TRUE;
}
@@ -2303,7 +2314,7 @@ _elm_scroll_momentum_animator(void *data, const Efl_Event *event EINA_UNUSED)
t = ecore_loop_time_get();
- if (sid->down.anim_dur == 0) dt = 1.0;
+ if (EINA_DBL_EQ(sid->down.anim_dur, 0)) dt = 1.0;
else dt = (t - sid->down.anim_start) / sid->down.anim_dur;
if (dt >= 0.0)
@@ -2664,7 +2675,7 @@ _elm_scroll_momentum_calc(int dx, int dy, double dt, double *vx, double *vy, int
double r = _elm_config->thumbscroll_momentum_friction;
const int min_px = 3;
- if ( dt == 0 ) return EINA_FALSE;
+ if (EINA_DBL_EQ(dt, 0)) return EINA_FALSE;
// store sign value of distance
sign_dx = (dx > 0) - (dx < 0);
@@ -3738,7 +3749,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
else
vy = 1.0;
}
- if ((vx != 0.0) || (vy != 0.0))
+ if (EINA_DBL_NONZERO(vx) || EINA_DBL_NONZERO(vy))
{
sid->down.onhold_vx = vx;
sid->down.onhold_vy = vy;
@@ -4032,6 +4043,9 @@ _elm_interface_scrollable_reset_signals(Eo *obj EINA_UNUSED, Elm_Scrollable_Smar
{
sid->go_up = sid->go_down = sid->go_right = sid->go_left = EINA_FALSE;
+ if (!sid->edje_obj)
+ return;
+
edje_object_signal_emit(sid->edje_obj, "elm,action,hide,up", "elm");
edje_object_signal_emit(sid->edje_obj, "elm,action,hide,down", "elm");
edje_object_signal_emit(sid->edje_obj, "elm,action,hide,right", "elm");
diff --git a/src/lib/elementary/elm_interface_scrollable.h b/src/lib/elementary/elm_interface_scrollable.h
index 93a5f66dcd..29079e3bac 100644
--- a/src/lib/elementary/elm_interface_scrollable.h
+++ b/src/lib/elementary/elm_interface_scrollable.h
@@ -74,7 +74,7 @@ struct _Elm_Scrollable_Smart_Interface_Data
Elm_Scroller_Policy hbar_flags, vbar_flags;
Elm_Scroller_Single_Direction one_direction_at_a_time;
- Elm_Scroller_Movement_Block block;
+ Efl_Ui_Layout_Orientation block;
struct
{
diff --git a/src/lib/elementary/elm_inwin.h b/src/lib/elementary/elm_inwin.h
index d5fba32e52..bb5c08ef07 100644
--- a/src/lib/elementary/elm_inwin.h
+++ b/src/lib/elementary/elm_inwin.h
@@ -1,6 +1,6 @@
/**
- * @defgroup Elm_Inwin Inwin
- * @ingroup Elm_Win
+ * @defgroup Elm_Inwin_Group Inwin
+ * @ingroup Elm_Win_Group
*
* @image html inwin_inheritance_tree.png
* @image latex inwin_inheritance_tree.eps
@@ -31,9 +31,9 @@
* possible, but it's sized vertically the most it needs to fit its\
* contents.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for inner windown objects. It also
- * emits the signals inherited from @ref Layout.
+ * emits the signals inherited from @ref Elm_Layout.
*
* Default content parts of the inwin that you can use for are:
* @li "default" A content of the inwin
diff --git a/src/lib/elementary/elm_inwin_eo.h b/src/lib/elementary/elm_inwin_eo.h
index cb6ad90fd7..ee475538da 100644
--- a/src/lib/elementary/elm_inwin_eo.h
+++ b/src/lib/elementary/elm_inwin_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Inwin;
*/
#define ELM_INWIN_CLASS elm_inwin_class_get()
-EWAPI const Efl_Class *elm_inwin_class_get(void);
+EWAPI const Efl_Class *elm_inwin_class_get(void) EINA_CONST;
/**
* @brief Activates an inwin object, ensuring its visibility
diff --git a/src/lib/elementary/elm_inwin_legacy.h b/src/lib/elementary/elm_inwin_legacy.h
index 0f672e9886..50a7653770 100644
--- a/src/lib/elementary/elm_inwin_legacy.h
+++ b/src/lib/elementary/elm_inwin_legacy.h
@@ -14,7 +14,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Inwin
+ * @ingroup Elm_Inwin_Group
*/
EAPI Evas_Object *elm_win_inwin_add(Evas_Object *parent);
@@ -28,7 +28,7 @@ EAPI Evas_Object *elm_win_inwin_add(Evas_Object *parent);
* @param obj The inwin object
* @param content The object to set as content
*
- * @ingroup Elm_Inwin
+ * @ingroup Elm_Inwin_Group
*/
EAPI void elm_win_inwin_content_set(Evas_Object *obj, Evas_Object *content);
@@ -47,7 +47,7 @@ EAPI void elm_win_inwin_content_set(Evas_Object *obj, Evas_Object *conte
* @param obj The inwin object
* @return The content that is being used
*
- * @ingroup Elm_Inwin
+ * @ingroup Elm_Inwin_Group
*/
EAPI Evas_Object *elm_win_inwin_content_get(const Evas_Object *obj);
@@ -59,7 +59,7 @@ EAPI Evas_Object *elm_win_inwin_content_get(const Evas_Object *obj);
* @param obj The inwin object
* @return The content that was being used
*
- * @ingroup Elm_Inwin
+ * @ingroup Elm_Inwin_Group
*/
EAPI Evas_Object *elm_win_inwin_content_unset(Evas_Object *obj);
diff --git a/src/lib/elementary/elm_label.h b/src/lib/elementary/elm_label.h
index 13b52124dc..4157a27af4 100644
--- a/src/lib/elementary/elm_label.h
+++ b/src/lib/elementary/elm_label.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Label Label
+ * @defgroup Elm_Label_Group Label
* @ingroup Elementary
*
* @image html label_inheritance_tree.png
@@ -28,11 +28,11 @@
* Custom themes can of course invent new markup tags and style them any way
* they like.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for label objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "language,changed": The program's language changed.
* @li @c "slide,end": The slide is end.
*
diff --git a/src/lib/elementary/elm_label_eo.c b/src/lib/elementary/elm_label_eo.c
index de24d9b94f..39fb7ff2e7 100644
--- a/src/lib/elementary/elm_label_eo.c
+++ b/src/lib/elementary/elm_label_eo.c
@@ -216,6 +216,6 @@ static const Efl_Class_Description _elm_label_class_desc = {
NULL
};
-EFL_DEFINE_CLASS(elm_label_class_get, &_elm_label_class_desc, EFL_UI_LAYOUT_BASE_CLASS, ELM_LAYOUT_MIXIN, EFL_UI_LEGACY_INTERFACE, NULL);
+EFL_DEFINE_CLASS(elm_label_class_get, &_elm_label_class_desc, EFL_UI_LAYOUT_BASE_CLASS, ELM_LAYOUT_MIXIN, EFL_UI_LEGACY_INTERFACE, EFL_ACCESS_WIDGET_ACTION_MIXIN, NULL);
#include "elm_label_eo.legacy.c"
diff --git a/src/lib/elementary/elm_label_eo.h b/src/lib/elementary/elm_label_eo.h
index 56a0016f76..91f1c15fc0 100644
--- a/src/lib/elementary/elm_label_eo.h
+++ b/src/lib/elementary/elm_label_eo.h
@@ -31,7 +31,7 @@ typedef enum
*/
#define ELM_LABEL_CLASS elm_label_class_get()
-EWAPI const Efl_Class *elm_label_class_get(void);
+EWAPI const Efl_Class *elm_label_class_get(void) EINA_CONST;
/**
* @brief Control wrap width of the label
diff --git a/src/lib/elementary/elm_label_eo.legacy.h b/src/lib/elementary/elm_label_eo.legacy.h
index 126207a228..524e8f2ac9 100644
--- a/src/lib/elementary/elm_label_eo.legacy.h
+++ b/src/lib/elementary/elm_label_eo.legacy.h
@@ -13,7 +13,7 @@ typedef Eo Elm_Label;
/** Slide mode of a label widget
*
- * @ingroup Elm_Label
+ * @ingroup Elm_Label_Group
*/
typedef enum
{
diff --git a/src/lib/elementary/elm_label_legacy.h b/src/lib/elementary/elm_label_legacy.h
index afd0927945..abc7248615 100644
--- a/src/lib/elementary/elm_label_legacy.h
+++ b/src/lib/elementary/elm_label_legacy.h
@@ -4,7 +4,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Label
+ * @ingroup Elm_Label_Group
*/
EAPI Evas_Object *elm_label_add(Evas_Object *parent);
diff --git a/src/lib/elementary/elm_list.c b/src/lib/elementary/elm_list.c
index 7414bd2559..6936cb2e85 100644
--- a/src/lib/elementary/elm_list.c
+++ b/src/lib/elementary/elm_list.c
@@ -1060,6 +1060,8 @@ _items_fix(Evas_Object *obj)
//focus highlight in_theme is set by list item theme.
_elm_widget_item_highlight_in_theme(
obj, elm_list_first_item_get(obj));
+
+ eina_array_flush(&walk);
}
static void
@@ -2328,8 +2330,11 @@ _item_new(Evas_Object *obj,
evas_object_event_callback_add
(it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb,
obj);
- efl_access_object_access_type_set(it->icon, EFL_ACCESS_TYPE_DISABLED);
- elm_widget_tree_unfocusable_set(it->icon, EINA_TRUE);
+ if (elm_widget_is(it->icon))
+ {
+ efl_access_object_access_type_set(it->icon, EFL_ACCESS_TYPE_DISABLED);
+ elm_widget_tree_unfocusable_set(it->icon, EINA_TRUE);
+ }
}
if (it->end)
{
@@ -2337,8 +2342,11 @@ _item_new(Evas_Object *obj,
evas_object_event_callback_add
(it->end, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb,
obj);
- efl_access_object_access_type_set(it->end, EFL_ACCESS_TYPE_DISABLED);
- elm_widget_tree_unfocusable_set(it->end, EINA_TRUE);
+ if (elm_widget_is(it->end))
+ {
+ efl_access_object_access_type_set(it->end, EFL_ACCESS_TYPE_DISABLED);
+ elm_widget_tree_unfocusable_set(it->end, EINA_TRUE);
+ }
}
if (_elm_config->atspi_mode)
diff --git a/src/lib/elementary/elm_list.h b/src/lib/elementary/elm_list.h
index 72f5a1084f..e98b336001 100644
--- a/src/lib/elementary/elm_list.h
+++ b/src/lib/elementary/elm_list.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_List List
+ * @defgroup Elm_List_Group List
* @ingroup Elementary
*
* @image html list_inheritance_tree.png
@@ -19,11 +19,11 @@
* A list is a very simple type of list widget. For more robust lists,
* @ref Genlist should probably be used.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for list objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "activated" - The user has double-clicked or pressed
* (enter|return|spacebar) on an item. The @p event_info parameter
* is the item that was activated.
@@ -75,7 +75,7 @@
* @li @ref elm_object_item_del
* @li @ref elm_object_item_signal_emit
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for lists.
*
@@ -92,7 +92,7 @@
*/
/**
- * @addtogroup Elm_List
+ * @addtogroup Elm_List_Group
* @{
*/
diff --git a/src/lib/elementary/elm_list_eo.h b/src/lib/elementary/elm_list_eo.h
index 4587ed0744..ee3e72f908 100644
--- a/src/lib/elementary/elm_list_eo.h
+++ b/src/lib/elementary/elm_list_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_List;
*/
#define ELM_LIST_CLASS elm_list_class_get()
-EWAPI const Efl_Class *elm_list_class_get(void);
+EWAPI const Efl_Class *elm_list_class_get(void) EINA_CONST;
/**
* @brief Control horizontal mode on the list object.
@@ -270,7 +270,7 @@ EOAPI Elm_Widget_Item *elm_obj_list_selected_item_get(const Eo *obj);
*
* @param[in] obj The object.
*
- * @return A @c list of list items, #Elm.Widget.Item, or @c NULL on failure.
+ * @return A @c list of list items, #Elm_Widget_Item, or @c NULL on failure.
*
* @ingroup Elm_List
*/
@@ -297,7 +297,7 @@ EOAPI Elm_Widget_Item *elm_obj_list_first_item_get(const Eo *obj);
*
* @param[in] obj The object.
*
- * @return An @c list of list items, #Elm.Widget.Item, or @c NULL on failure.
+ * @return An @c list of list items, #Elm_Widget_Item, or @c NULL on failure.
*
* @ingroup Elm_List
*/
@@ -541,7 +541,7 @@ EOAPI void elm_obj_list_clear(Eo *obj);
* @param[in] func The function to call when the item is clicked.
* @param[in] data The data to associate with the item for related callbacks.
* @param[in] cmp_func The comparing function to be used to sort list items by
- * #Elm.Widget.Item item handles. This function will receive two items and
+ * #Elm_Widget_Item item handles. This function will receive two items and
* compare them, returning a non-negative integer if the second item should be
* place after the first, or negative value if should be placed before.
*
diff --git a/src/lib/elementary/elm_list_eo.legacy.h b/src/lib/elementary/elm_list_eo.legacy.h
index 6885674baf..3a2e019c3a 100644
--- a/src/lib/elementary/elm_list_eo.legacy.h
+++ b/src/lib/elementary/elm_list_eo.legacy.h
@@ -263,7 +263,7 @@ EAPI Elm_Widget_Item *elm_list_selected_item_get(const Elm_List *obj);
*
* @param[in] obj The object.
*
- * @return A @c list of list items, #Elm.Widget.Item, or @c NULL on failure.
+ * @return A @c list of list items, #Elm_Widget_Item, or @c NULL on failure.
*
* @ingroup Elm_List_Group
*/
@@ -290,7 +290,7 @@ EAPI Elm_Widget_Item *elm_list_first_item_get(const Elm_List *obj);
*
* @param[in] obj The object.
*
- * @return An @c list of list items, #Elm.Widget.Item, or @c NULL on failure.
+ * @return An @c list of list items, #Elm_Widget_Item, or @c NULL on failure.
*
* @ingroup Elm_List_Group
*/
@@ -534,7 +534,7 @@ EAPI void elm_list_clear(Elm_List *obj);
* @param[in] func The function to call when the item is clicked.
* @param[in] data The data to associate with the item for related callbacks.
* @param[in] cmp_func The comparing function to be used to sort list items by
- * #Elm.Widget.Item item handles. This function will receive two items and
+ * #Elm_Widget_Item item handles. This function will receive two items and
* compare them, returning a non-negative integer if the second item should be
* place after the first, or negative value if should be placed before.
*
diff --git a/src/lib/elementary/elm_list_item_eo.h b/src/lib/elementary/elm_list_item_eo.h
index 8aef9230a9..0b3800a893 100644
--- a/src/lib/elementary/elm_list_item_eo.h
+++ b/src/lib/elementary/elm_list_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_List_Item;
*/
#define ELM_LIST_ITEM_CLASS elm_list_item_class_get()
-EWAPI const Efl_Class *elm_list_item_class_get(void);
+EWAPI const Efl_Class *elm_list_item_class_get(void) EINA_CONST;
/**
* @brief Set or unset item as a separator.
diff --git a/src/lib/elementary/elm_list_legacy.h b/src/lib/elementary/elm_list_legacy.h
index 0cdb591984..1bb601541d 100644
--- a/src/lib/elementary/elm_list_legacy.h
+++ b/src/lib/elementary/elm_list_legacy.h
@@ -7,7 +7,7 @@
*
* This function inserts a new list widget on the canvas.
*
- * @ingroup Elm_List
+ * @ingroup Elm_List_Group
*/
EAPI Evas_Object *elm_list_add(Evas_Object *parent);
diff --git a/src/lib/elementary/elm_macros.h b/src/lib/elementary/elm_macros.h
index 0ce9b6c5db..4c81567699 100644
--- a/src/lib/elementary/elm_macros.h
+++ b/src/lib/elementary/elm_macros.h
@@ -9,8 +9,8 @@
// check if the rect (x, y, w, h) includes whole body of rect (xx, yy, ww, hh)
#define ELM_RECTS_INCLUDE(x, y, w, h, xx, yy, ww, hh) (((x) <= (xx)) && (((x) + (w)) >= ((xx + (ww))) && ((y) <= (yy)) && (((y) + (h)) >= ((yy) + (hh)))))
-// check if the rect (x,y,w,h) is either left of or stays out of body of rect(xx,yy,ww,hh)
+// check if the rect (x,y,w,h) is either left of or stays out of body of rect(xx,yy,ww,hh)
#define ELM_RECTS_X_AXIS_OUT(x, y, w, h, xx, yy, ww, hh) (((x) < (xx)) || (((x) + (w)) > ((xx) + (ww))) || (((y) + (h)) > ((yy) + (hh))))
-// check if the rect (x,y,w,h) is either top of or stays out of body of rect(xx,yy,ww,hh)
+// check if the rect (x,y,w,h) is either top of or stays out of body of rect(xx,yy,ww,hh)
#define ELM_RECTS_Y_AXIS_OUT(x, y, w, h, xx, yy, ww, hh) (((y) < (yy)) || (((x) + (w)) > ((xx) + (ww))) || (((y) + (h)) > ((yy) + (hh))))
diff --git a/src/lib/elementary/elm_main.c b/src/lib/elementary/elm_main.c
index d6c2b2a82f..d6a4b5dac4 100644
--- a/src/lib/elementary/elm_main.c
+++ b/src/lib/elementary/elm_main.c
@@ -910,7 +910,6 @@ elm_quicklaunch_sub_shutdown(void)
_elm_module_shutdown();
if (_elm_prefs_initted)
_elm_prefs_shutdown();
- _efl_ui_dnd_shutdown();
elm_color_class_shutdown();
}
@@ -1347,7 +1346,6 @@ elm_quicklaunch_exe_path_get(const char *exe, const char *cwd)
}
else
{
- if (!*p) break;
p++;
}
}
@@ -1700,14 +1698,14 @@ elm_object_focus_move_policy_set(Evas_Object *obj,
Elm_Focus_Move_Policy policy)
{
EINA_SAFETY_ON_NULL_RETURN(obj);
- efl_ui_widget_focus_move_policy_set(obj, policy);
+ efl_ui_widget_focus_move_policy_set(obj, (Efl_Ui_Focus_Move_Policy)policy);
}
EAPI Elm_Focus_Move_Policy
elm_object_focus_move_policy_get(const Evas_Object *obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
- return efl_ui_widget_focus_move_policy_get(obj);
+ return (Elm_Focus_Move_Policy)efl_ui_widget_focus_move_policy_get(obj);
}
EAPI Eina_Bool
diff --git a/src/lib/elementary/elm_map.c b/src/lib/elementary/elm_map.c
index 6a37e59cb2..6d287fef5e 100644
--- a/src/lib/elementary/elm_map.c
+++ b/src/lib/elementary/elm_map.c
@@ -4170,8 +4170,6 @@ _elm_map_efl_canvas_group_group_add(Eo *obj, Elm_Map_Data *priv)
// FIXME: Tile Provider is better to provide tile size!
priv->tsize = DEFAULT_TILE_SIZE;
- srand(time(NULL));
-
priv->id = ((int)getpid() << 16) | id_num;
id_num++;
_grid_all_create(priv);
@@ -4331,7 +4329,7 @@ _elm_map_efl_ui_zoom_zoom_level_set(Eo *obj, Elm_Map_Data *sd, double zoom)
if (sd->mode != EFL_UI_ZOOM_MODE_MANUAL) return;
if (zoom < 0) zoom = 0;
- if (sd->zoom == zoom) return;
+ if (EINA_DBL_EQ(sd->zoom, zoom)) return;
sd->calc_job.zoom = zoom;
sd->calc_job.zoom_mode_set = _zoom_mode_set;
diff --git a/src/lib/elementary/elm_map.h b/src/lib/elementary/elm_map.h
index bf257309ef..dd766b0049 100644
--- a/src/lib/elementary/elm_map.h
+++ b/src/lib/elementary/elm_map.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Map Map
+ * @defgroup Elm_Map_Group Map
* @ingroup Elementary
*
* @image html map_inheritance_tree.png
@@ -18,7 +18,7 @@
* @li group of markers and
* @li routes.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for map objects.
*
diff --git a/src/lib/elementary/elm_map_common.h b/src/lib/elementary/elm_map_common.h
index 625094a305..3fa3dcc34b 100644
--- a/src/lib/elementary/elm_map_common.h
+++ b/src/lib/elementary/elm_map_common.h
@@ -1,5 +1,5 @@
/**
- * @addtogroup Elm_Map
+ * @addtogroup Elm_Map_Group
*
* @{
*/
@@ -472,8 +472,8 @@ EAPI int elm_map_overlay_class_zoom_max_get(const Elm_Map_Over
* is clicked, callback will be called and return a virtual group overlays.
*
* You can change the state (hidden, paused, etc.) or set the content
- * or icon of the group overlays by chaning the state of the class overlay.
- * Do not modifty the group overlay itself.
+ * or icon of the group overlays by changing the state of the class overlay.
+ * Do not modify the group overlay itself.
*
* @see elm_map_overlay_class_add()
*/
diff --git a/src/lib/elementary/elm_map_eo.h b/src/lib/elementary/elm_map_eo.h
index d33e955cc4..d560228be9 100644
--- a/src/lib/elementary/elm_map_eo.h
+++ b/src/lib/elementary/elm_map_eo.h
@@ -69,7 +69,7 @@ typedef enum
*/
#define ELM_MAP_CLASS elm_map_class_get()
-EWAPI const Efl_Class *elm_map_class_get(void);
+EWAPI const Efl_Class *elm_map_class_get(void) EINA_CONST;
/**
* @brief Set the minimum zoom of the source.
@@ -339,7 +339,7 @@ EOAPI Elm_Map_Overlay *elm_obj_map_overlay_circle_add(Eo *obj, double lon, doubl
* have default style layouts at first.
*
* You can change the state (hidden, paused, etc.) or set the content or icon
- * of the group overlays by chaning the state of the class overlay. Do not
+ * of the group overlays by changing the state of the class overlay. Do not
* modify the group overlay itself.
*
* Also these changes have a influence on the overlays in the same class even
diff --git a/src/lib/elementary/elm_map_eo.legacy.h b/src/lib/elementary/elm_map_eo.legacy.h
index cd51009b02..4e8968a578 100644
--- a/src/lib/elementary/elm_map_eo.legacy.h
+++ b/src/lib/elementary/elm_map_eo.legacy.h
@@ -17,7 +17,7 @@ typedef Eo Elm_Map;
* See @ref elm_map_sources_get() See @ref elm_map_source_get() See
* @ref elm_map_source_set()
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
typedef enum
{
@@ -33,7 +33,7 @@ typedef enum
*
* See @ref elm_map_route_add()
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
typedef enum
{
@@ -51,7 +51,7 @@ typedef enum
*
* See @ref elm_map_route_add()
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
typedef enum
{
@@ -332,7 +332,7 @@ EAPI Elm_Map_Overlay *elm_map_overlay_circle_add(Elm_Map *obj, double lon, doubl
* have default style layouts at first.
*
* You can change the state (hidden, paused, etc.) or set the content or icon
- * of the group overlays by chaning the state of the class overlay. Do not
+ * of the group overlays by changing the state of the class overlay. Do not
* modify the group overlay itself.
*
* Also these changes have a influence on the overlays in the same class even
diff --git a/src/lib/elementary/elm_map_legacy.h b/src/lib/elementary/elm_map_legacy.h
index 37fffcb737..309b56076b 100644
--- a/src/lib/elementary/elm_map_legacy.h
+++ b/src/lib/elementary/elm_map_legacy.h
@@ -11,7 +11,7 @@
*
* See @ref elm_map_zoom_mode_set() See @ref elm_map_zoom_mode_get()
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
typedef enum
{
@@ -33,7 +33,7 @@ typedef enum
*
* This function inserts a new map widget on the canvas.
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
EAPI Evas_Object *elm_map_add(Evas_Object *parent);
@@ -55,7 +55,7 @@ EAPI Evas_Object *elm_map_add(Evas_Object *parent);
* @param[in] obj The object.
* @param[in] zoom The zoom level.
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
EAPI void elm_map_zoom_set(Evas_Object *obj, int zoom);
@@ -72,7 +72,7 @@ EAPI void elm_map_zoom_set(Evas_Object *obj, int zoom);
*
* @return The zoom level.
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
EAPI int elm_map_zoom_get(const Evas_Object *obj);
@@ -97,7 +97,7 @@ EAPI int elm_map_zoom_get(const Evas_Object *obj);
* #ELM_MAP_ZOOM_MODE_MANUAL (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT, or
* #ELM_MAP_ZOOM_MODE_AUTO_FILL.
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
EAPI void elm_map_zoom_mode_set(Evas_Object *obj, Elm_Map_Zoom_Mode mode);
@@ -111,7 +111,7 @@ EAPI void elm_map_zoom_mode_set(Evas_Object *obj, Elm_Map_Zoom_Mode mode);
* @return The zoom mode of the map, being it one of #ELM_MAP_ZOOM_MODE_MANUAL
* (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT, or #ELM_MAP_ZOOM_MODE_AUTO_FILL.
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
EAPI Elm_Map_Zoom_Mode elm_map_zoom_mode_get(const Evas_Object *obj);
@@ -124,7 +124,7 @@ EAPI Elm_Map_Zoom_Mode elm_map_zoom_mode_get(const Evas_Object *obj);
* @param[in] disabled Use @c true to disable mouse wheel or @c false to enable
* it.
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
EAPI void elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled);
@@ -137,7 +137,7 @@ EAPI void elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled);
*
* @return Use @c true to disable mouse wheel or @c false to enable it.
*
- * @ingroup Elm_Map
+ * @ingroup Elm_Map_Group
*/
EAPI Eina_Bool elm_map_wheel_disabled_get(const Evas_Object *obj);
diff --git a/src/lib/elementary/elm_map_pan_eo.h b/src/lib/elementary/elm_map_pan_eo.h
index be8be64595..a452f88fe1 100644
--- a/src/lib/elementary/elm_map_pan_eo.h
+++ b/src/lib/elementary/elm_map_pan_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Map_Pan;
*/
#define ELM_MAP_PAN_CLASS elm_map_pan_class_get()
-EWAPI const Efl_Class *elm_map_pan_class_get(void);
+EWAPI const Efl_Class *elm_map_pan_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_mapbuf.h b/src/lib/elementary/elm_mapbuf.h
index 2eed3a1fc4..0506b164ea 100644
--- a/src/lib/elementary/elm_mapbuf.h
+++ b/src/lib/elementary/elm_mapbuf.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Mapbuf Mapbuf
+ * @defgroup Elm_Mapbuf_Group Mapbuf
* @ingroup Elementary
*
* @image html mapbuf_inheritance_tree.png
@@ -32,7 +32,7 @@
*/
/**
- * @addtogroup Elm_Mapbuf
+ * @addtogroup Elm_Mapbuf_Group
* @{
*/
diff --git a/src/lib/elementary/elm_mapbuf_eo.h b/src/lib/elementary/elm_mapbuf_eo.h
index b9ba3f2630..039a8f4313 100644
--- a/src/lib/elementary/elm_mapbuf_eo.h
+++ b/src/lib/elementary/elm_mapbuf_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Mapbuf;
*/
#define ELM_MAPBUF_CLASS elm_mapbuf_class_get()
-EWAPI const Efl_Class *elm_mapbuf_class_get(void);
+EWAPI const Efl_Class *elm_mapbuf_class_get(void) EINA_CONST;
/**
* @brief Set or unset auto flag for map rendering.
diff --git a/src/lib/elementary/elm_mapbuf_legacy.h b/src/lib/elementary/elm_mapbuf_legacy.h
index 5c659a8951..69ce7aab20 100644
--- a/src/lib/elementary/elm_mapbuf_legacy.h
+++ b/src/lib/elementary/elm_mapbuf_legacy.h
@@ -7,8 +7,8 @@
*
* This function inserts a new mapbuf widget on the canvas.
*
- * @ingroup Elm_Mapbuf
+ * @ingroup Elm_Mapbuf_Group
*/
EAPI Evas_Object *elm_mapbuf_add(Evas_Object *parent);
-#include "elm_mapbuf_eo.legacy.h" \ No newline at end of file
+#include "elm_mapbuf_eo.legacy.h"
diff --git a/src/lib/elementary/elm_menu.c b/src/lib/elementary/elm_menu.c
index 7da2e551bd..5914a82eff 100644
--- a/src/lib/elementary/elm_menu.c
+++ b/src/lib/elementary/elm_menu.c
@@ -43,17 +43,31 @@ _elm_menu_efl_ui_l10n_translation_update(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd)
elm_wdg_item_translate(EO_OBJ(it));
}
+static void _item_del(Elm_Object_Item *eo_item);
+
+static void
+_elm_menu_subitems_clear(Elm_Menu_Item_Data *it)
+{
+ Elm_Object_Item *sub_it;
+
+ EINA_LIST_FREE(it->submenu.items, sub_it)
+ {
+ ELM_MENU_ITEM_DATA_GET(sub_it, item);
+
+ if (item)
+ {
+ item->parent = NULL;
+ _item_del(sub_it);
+ }
+ }
+}
+
static void
_item_del(Elm_Object_Item *eo_item)
{
- Elm_Object_Item *child;
ELM_MENU_ITEM_DATA_GET(eo_item, item);
- Eina_List *itr, *itr2;
- EINA_LIST_FOREACH_SAFE(item->submenu.items, itr, itr2, child)
- _item_del(child);
- eina_list_free(item->submenu.items);
-
+ _elm_menu_subitems_clear(item);
efl_del(eo_item);
}
@@ -391,12 +405,10 @@ _parent_del_cb(void *data,
Evas_Object *obj,
void *event_info EINA_UNUSED)
{
- ELM_MENU_DATA_GET(data, sd);
ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
evas_object_event_callback_del_full
(obj, EVAS_CALLBACK_RESIZE, _parent_resize_cb, data);
- sd->parent = NULL;
}
static void
@@ -1013,7 +1025,7 @@ _elm_menu_item_efl_object_destructor(Eo *eo_item, Elm_Menu_Item_Data *item)
{
ELM_MENU_DATA_GET(WIDGET(item), sd);
- elm_menu_item_subitems_clear(eo_item);
+ _elm_menu_subitems_clear(item);
eina_stringshare_del(item->label);
eina_stringshare_del(item->icon_str);
evas_object_del(item->content);
@@ -1147,19 +1159,10 @@ _elm_menu_item_separator_add(Eo *obj, Elm_Menu_Data *sd, Elm_Object_Item *eo_p_i
subitem = efl_data_scope_get(eo_subitem, ELM_MENU_ITEM_CLASS);
subitem->separator = EINA_TRUE;
+ subitem->parent = efl_data_scope_get(eo_p_item, ELM_MENU_ITEM_CLASS);
+
_item_separator_obj_create(subitem);
- if (!eo_p_item)
- {
- elm_box_pack_end(sd->bx, VIEW(subitem));
- sd->items = eina_list_append(sd->items, eo_subitem);
- }
- else
- {
- if (!p_item->submenu.bx) _item_submenu_obj_create(p_item);
- elm_box_pack_end(p_item->submenu.bx, VIEW(subitem));
- p_item->submenu.items = eina_list_append
- (p_item->submenu.items, eo_subitem);
- }
+ _elm_menu_item_add_helper(obj, subitem->parent, subitem, sd);
_sizing_eval(obj);
@@ -1190,12 +1193,7 @@ _elm_menu_item_subitems_get(const Eo *eo_item EINA_UNUSED, Elm_Menu_Item_Data *i
EOLIAN static void
_elm_menu_item_subitems_clear(Eo *eo_item EINA_UNUSED, Elm_Menu_Item_Data *it)
{
- Elm_Object_Item *sub_it;
- Eina_List *l, *l_next;
-
- EINA_LIST_FOREACH_SAFE(it->submenu.items,
- l, l_next, sub_it)
- efl_del(sub_it);
+ _elm_menu_subitems_clear(it);
}
EOLIAN static const Eina_List *
diff --git a/src/lib/elementary/elm_menu_eo.h b/src/lib/elementary/elm_menu_eo.h
index 1c4a8111eb..259982ead5 100644
--- a/src/lib/elementary/elm_menu_eo.h
+++ b/src/lib/elementary/elm_menu_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Menu;
*/
#define ELM_MENU_CLASS elm_menu_class_get()
-EWAPI const Efl_Class *elm_menu_class_get(void);
+EWAPI const Efl_Class *elm_menu_class_get(void) EINA_CONST;
/**
* @brief Get the selected item in the widget.
diff --git a/src/lib/elementary/elm_menu_item_eo.h b/src/lib/elementary/elm_menu_item_eo.h
index 708e77ed6d..1d9a4d8b55 100644
--- a/src/lib/elementary/elm_menu_item_eo.h
+++ b/src/lib/elementary/elm_menu_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Menu_Item;
*/
#define ELM_MENU_ITEM_CLASS elm_menu_item_class_get()
-EWAPI const Efl_Class *elm_menu_item_class_get(void);
+EWAPI const Efl_Class *elm_menu_item_class_get(void) EINA_CONST;
/**
* @brief Set the icon of a menu item to the standard icon with the given name.
diff --git a/src/lib/elementary/elm_multibuttonentry_eo.h b/src/lib/elementary/elm_multibuttonentry_eo.h
index cac86fc139..095e37f373 100644
--- a/src/lib/elementary/elm_multibuttonentry_eo.h
+++ b/src/lib/elementary/elm_multibuttonentry_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Multibuttonentry;
*/
#define ELM_MULTIBUTTONENTRY_CLASS elm_multibuttonentry_class_get()
-EWAPI const Efl_Class *elm_multibuttonentry_class_get(void);
+EWAPI const Efl_Class *elm_multibuttonentry_class_get(void) EINA_CONST;
/**
* @brief Control if the multibuttonentry is to be editable or not.
diff --git a/src/lib/elementary/elm_multibuttonentry_item_eo.h b/src/lib/elementary/elm_multibuttonentry_item_eo.h
index c1f5484cce..cac6b15c09 100644
--- a/src/lib/elementary/elm_multibuttonentry_item_eo.h
+++ b/src/lib/elementary/elm_multibuttonentry_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Multibuttonentry_Item;
*/
#define ELM_MULTIBUTTONENTRY_ITEM_CLASS elm_multibuttonentry_item_class_get()
-EWAPI const Efl_Class *elm_multibuttonentry_item_class_get(void);
+EWAPI const Efl_Class *elm_multibuttonentry_item_class_get(void) EINA_CONST;
/**
* @brief Control the selected state of an item
diff --git a/src/lib/elementary/elm_naviframe_eo.h b/src/lib/elementary/elm_naviframe_eo.h
index 8b4f4d8c0e..75981dcbb7 100644
--- a/src/lib/elementary/elm_naviframe_eo.h
+++ b/src/lib/elementary/elm_naviframe_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Naviframe;
*/
#define ELM_NAVIFRAME_CLASS elm_naviframe_class_get()
-EWAPI const Efl_Class *elm_naviframe_class_get(void);
+EWAPI const Efl_Class *elm_naviframe_class_get(void) EINA_CONST;
/**
* @brief Control the event enabled when pushing/popping items
diff --git a/src/lib/elementary/elm_naviframe_item_eo.h b/src/lib/elementary/elm_naviframe_item_eo.h
index d5b86840f3..bc83d099dd 100644
--- a/src/lib/elementary/elm_naviframe_item_eo.h
+++ b/src/lib/elementary/elm_naviframe_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Naviframe_Item;
*/
#define ELM_NAVIFRAME_ITEM_CLASS elm_naviframe_item_class_get()
-EWAPI const Efl_Class *elm_naviframe_item_class_get(void);
+EWAPI const Efl_Class *elm_naviframe_item_class_get(void) EINA_CONST;
/**
* @brief Pop the top item and delete the items between the top and the above
diff --git a/src/lib/elementary/elm_notify.c b/src/lib/elementary/elm_notify.c
index ee734b9e39..f4cc7ad4e1 100644
--- a/src/lib/elementary/elm_notify.c
+++ b/src/lib/elementary/elm_notify.c
@@ -32,29 +32,29 @@ _notify_theme_apply(Evas_Object *obj)
ax = sd->horizontal_align;
ay = sd->vertical_align;
- if (ay == 0.0)
+ if (EINA_DBL_EQ(ay, 0.0))
{
- if (ax == 0.0)
+ if (EINA_DBL_EQ(ax, 0.0))
position = "top_left";
- else if (ax == 1.0)
+ else if (EINA_DBL_EQ(ax, 1.0))
position = "top_right";
else
position = "top";
}
- else if (ay == 1.0)
+ else if (EINA_DBL_EQ(ay, 1.0))
{
- if (ax == 0.0)
+ if (EINA_DBL_EQ(ax, 0.0))
position = "bottom_left";
- else if (ax == 1.0)
+ else if (EINA_DBL_EQ(ax, 1.0))
position = "bottom_right";
else
position = "bottom";
}
else
{
- if (ax == 0.0)
+ if (EINA_DBL_EQ(ax, 0.0))
position = "left";
- else if (ax == 1.0)
+ else if (EINA_DBL_EQ(ax, 1.0))
position = "right";
else
position = "center";
@@ -88,10 +88,10 @@ _notify_move_to_orientation(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_C
ax = sd->horizontal_align;
ay = sd->vertical_align;
- if ((efl_ui_mirrored_get(obj)) && (ax != ELM_NOTIFY_ALIGN_FILL)) ax = 1.0 - ax;
+ if ((efl_ui_mirrored_get(obj)) && (!EINA_DBL_EQ(ax, ELM_NOTIFY_ALIGN_FILL))) ax = 1.0 - ax;
- if (ax == ELM_NOTIFY_ALIGN_FILL) minw = w;
- if (ay == ELM_NOTIFY_ALIGN_FILL) minh = h;
+ if (EINA_DBL_EQ(ax, ELM_NOTIFY_ALIGN_FILL)) minw = w;
+ if (EINA_DBL_EQ(ay, ELM_NOTIFY_ALIGN_FILL)) minh = h;
x = x + ((w - minw) * ax);
y = y + ((h - minh) * ay);
@@ -609,23 +609,23 @@ elm_notify_orient_get(const Evas_Object *obj)
elm_notify_align_get(obj, &horizontal, &vertical);
- if ((horizontal == 0.5) && (vertical == 0.0))
+ if (EINA_DBL_EQ(horizontal, 0.5) && EINA_DBL_EQ(vertical, 0.0))
orient = ELM_NOTIFY_ORIENT_TOP;
- else if ((horizontal == 0.5) && (vertical == 0.5))
+ else if (EINA_DBL_EQ(horizontal, 0.5) && EINA_DBL_EQ(vertical, 0.5))
orient = ELM_NOTIFY_ORIENT_CENTER;
- else if ((horizontal == 0.5) && (vertical == 1.0))
+ else if (EINA_DBL_EQ(horizontal, 0.5) && EINA_DBL_EQ(vertical, 1.0))
orient = ELM_NOTIFY_ORIENT_BOTTOM;
- else if ((horizontal == 0.0) && (vertical == 0.5))
+ else if (EINA_DBL_EQ(horizontal, 0.0) && EINA_DBL_EQ(vertical, 0.5))
orient = ELM_NOTIFY_ORIENT_LEFT;
- else if ((horizontal == 1.0) && (vertical == 0.5))
+ else if (EINA_DBL_EQ(horizontal, 1.0) && EINA_DBL_EQ(vertical, 0.5))
orient = ELM_NOTIFY_ORIENT_RIGHT;
- else if ((horizontal == 0.0) && (vertical == 0.0))
+ else if (EINA_DBL_EQ(horizontal, 0.0) && EINA_DBL_EQ(vertical, 0.0))
orient = ELM_NOTIFY_ORIENT_TOP_LEFT;
- else if ((horizontal == 1.0) && (vertical == 0.0))
+ else if (EINA_DBL_EQ(horizontal, 1.0) && EINA_DBL_EQ(vertical, 0.0))
orient = ELM_NOTIFY_ORIENT_TOP_RIGHT;
- else if ((horizontal == 0.0) && (vertical == 1.0))
+ else if (EINA_DBL_EQ(horizontal, 0.0) && EINA_DBL_EQ(vertical, 1.0))
orient = ELM_NOTIFY_ORIENT_BOTTOM_LEFT;
- else if ((horizontal == 1.0) && (vertical == 1.0))
+ else if (EINA_DBL_EQ(horizontal, 1.0) && EINA_DBL_EQ(vertical, 1.0))
orient = ELM_NOTIFY_ORIENT_BOTTOM_RIGHT;
else
orient = ELM_NOTIFY_ORIENT_TOP;
diff --git a/src/lib/elementary/elm_notify.h b/src/lib/elementary/elm_notify.h
index 88a2c5cfd3..660cd17233 100644
--- a/src/lib/elementary/elm_notify.h
+++ b/src/lib/elementary/elm_notify.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Notify Notify
+ * @defgroup Elm_Notify_Group Notify
* @ingroup Elementary
*
* @image html notify_inheritance_tree.png
diff --git a/src/lib/elementary/elm_notify_eo.h b/src/lib/elementary/elm_notify_eo.h
index 37b0598982..8055f02143 100644
--- a/src/lib/elementary/elm_notify_eo.h
+++ b/src/lib/elementary/elm_notify_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Notify;
*/
#define ELM_NOTIFY_CLASS elm_notify_class_get()
-EWAPI const Efl_Class *elm_notify_class_get(void);
+EWAPI const Efl_Class *elm_notify_class_get(void) EINA_CONST;
/**
* @brief Set the alignment of the notify object
diff --git a/src/lib/elementary/elm_notify_legacy.h b/src/lib/elementary/elm_notify_legacy.h
index ceb39a9dfe..b1d67ad430 100644
--- a/src/lib/elementary/elm_notify_legacy.h
+++ b/src/lib/elementary/elm_notify_legacy.h
@@ -4,7 +4,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Notify
+ * @ingroup Elm_Notify_Group
*/
EAPI Evas_Object *elm_notify_add(Evas_Object *parent);
@@ -17,7 +17,7 @@ EAPI Evas_Object *elm_notify_add(Evas_Object *parent);
* Once the parent object is set, a previously set one will be disconnected
* and replaced.
*
- * @ingroup Elm_Notify
+ * @ingroup Elm_Notify_Group
*/
EAPI void elm_notify_parent_set(Evas_Object *obj, Evas_Object *parent);
@@ -29,8 +29,8 @@ EAPI void elm_notify_parent_set(Evas_Object *obj, Evas_O
*
* @see elm_notify_parent_set()
*
- * @ingroup Elm_Notify
+ * @ingroup Elm_Notify_Group
*/
EAPI Evas_Object *elm_notify_parent_get(const Evas_Object *obj);
-#include "elm_notify_eo.legacy.h" \ No newline at end of file
+#include "elm_notify_eo.legacy.h"
diff --git a/src/lib/elementary/elm_pan_eo.h b/src/lib/elementary/elm_pan_eo.h
index a09652a4c8..d73afa2f8d 100644
--- a/src/lib/elementary/elm_pan_eo.h
+++ b/src/lib/elementary/elm_pan_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Pan;
*/
#define ELM_PAN_CLASS elm_pan_class_get()
-EWAPI const Efl_Class *elm_pan_class_get(void);
+EWAPI const Efl_Class *elm_pan_class_get(void) EINA_CONST;
/**
* @brief Position
diff --git a/src/lib/elementary/elm_panel.c b/src/lib/elementary/elm_panel.c
index 97f4267b2b..ef93c71996 100644
--- a/src/lib/elementary/elm_panel.c
+++ b/src/lib/elementary/elm_panel.c
@@ -868,9 +868,6 @@ _elm_panel_efl_canvas_group_group_add(Eo *obj, Elm_Panel_Data *priv)
EOLIAN static void
_elm_panel_efl_canvas_group_group_del(Eo *obj, Elm_Panel_Data *sd)
{
- Evas_Object *child;
- Eina_List *l;
-
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
sd->delete_me = EINA_TRUE;
@@ -879,15 +876,15 @@ _elm_panel_efl_canvas_group_group_del(Eo *obj, Elm_Panel_Data *sd)
/* let's make our panel object the *last* to be processed, since it
* may (smart) parent other sub objects here */
- EINA_LIST_FOREACH(wd->subobjs, l, child)
- {
- if (child == sd->bx)
- {
- wd->subobjs =
- eina_list_demote_list(wd->subobjs, l);
- break;
- }
- }
+ {
+ unsigned int resize_id = 0;
+ if (eina_array_find(wd->children, wd->resize_obj, &resize_id))
+ {
+ //exchange with last
+ eina_array_data_set(wd->children, resize_id, eina_array_data_get(wd->children, eina_array_count(wd->children) - 1));
+ eina_array_data_set(wd->children, eina_array_count(wd->children) - 1, wd->resize_obj);
+ }
+ }
efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
diff --git a/src/lib/elementary/elm_panel.h b/src/lib/elementary/elm_panel.h
index c94d9fc584..12bd651240 100644
--- a/src/lib/elementary/elm_panel.h
+++ b/src/lib/elementary/elm_panel.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Panel Panel
+ * @defgroup Elm_Panel_Group Panel
* @ingroup Elementary
*
* @image html panel_inheritance_tree.png
@@ -18,11 +18,11 @@
* @li #ELM_PANEL_ORIENT_RIGHT
* @li #ELM_PANEL_ORIENT_BOTTOM
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for panel objects (since 1.8).
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "toggled" : When the panel has been toggled. (since 1.18)
* @li @c "scroll" : When the content has been scrolled (moved). (since 1.10)
* This signal is emitted only when the panel is scrollable.
diff --git a/src/lib/elementary/elm_panel_common.h b/src/lib/elementary/elm_panel_common.h
index 236c83dab7..82ec280d7e 100644
--- a/src/lib/elementary/elm_panel_common.h
+++ b/src/lib/elementary/elm_panel_common.h
@@ -1,5 +1,5 @@
/**
- * @addtogroup Elm_Panel
+ * @addtogroup Elm_Panel_Group
*
* @{
*/
diff --git a/src/lib/elementary/elm_panel_eo.h b/src/lib/elementary/elm_panel_eo.h
index 5e045de3ef..7c199a1e39 100644
--- a/src/lib/elementary/elm_panel_eo.h
+++ b/src/lib/elementary/elm_panel_eo.h
@@ -31,7 +31,7 @@ typedef enum
*/
#define ELM_PANEL_CLASS elm_panel_class_get()
-EWAPI const Efl_Class *elm_panel_class_get(void);
+EWAPI const Efl_Class *elm_panel_class_get(void) EINA_CONST;
/**
* @brief Set the orientation of the panel
diff --git a/src/lib/elementary/elm_panel_eo.legacy.h b/src/lib/elementary/elm_panel_eo.legacy.h
index d6b8b49d7a..ae99939681 100644
--- a/src/lib/elementary/elm_panel_eo.legacy.h
+++ b/src/lib/elementary/elm_panel_eo.legacy.h
@@ -13,7 +13,7 @@ typedef Eo Elm_Panel;
/** Panel orientation mode
*
- * @ingroup Elm_Panel
+ * @ingroup Elm_Panel_Group
*/
typedef enum
{
diff --git a/src/lib/elementary/elm_panel_legacy.h b/src/lib/elementary/elm_panel_legacy.h
index a95c31046f..6d23e336d7 100644
--- a/src/lib/elementary/elm_panel_legacy.h
+++ b/src/lib/elementary/elm_panel_legacy.h
@@ -5,8 +5,8 @@
*
* @return The panel object, or NULL on failure
*
- * @ingroup Elm_Panel
+ * @ingroup Elm_Panel_Group
*/
EAPI Evas_Object *elm_panel_add(Evas_Object *parent);
-#include "elm_panel_eo.legacy.h" \ No newline at end of file
+#include "elm_panel_eo.legacy.h"
diff --git a/src/lib/elementary/elm_panes.h b/src/lib/elementary/elm_panes.h
index 9704b39c4d..fb510b7e0a 100644
--- a/src/lib/elementary/elm_panes.h
+++ b/src/lib/elementary/elm_panes.h
@@ -17,11 +17,11 @@
* Panes can be split vertically or horizontally, and contents
* size proportion can be customized (homogeneous by default).
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for panes objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "press" - The panes has been pressed (button wasn't released yet).
* - @c "unpress" - The panes was released after being pressed.
* - @c "clicked" - The panes has been clicked>
diff --git a/src/lib/elementary/elm_photo.c b/src/lib/elementary/elm_photo.c
index 9fc593392f..5f8660352c 100644
--- a/src/lib/elementary/elm_photo.c
+++ b/src/lib/elementary/elm_photo.c
@@ -125,7 +125,7 @@ _drag_done_cb(void *unused EINA_UNUSED,
ELM_PHOTO_DATA_GET(obj, sd);
elm_object_scroll_freeze_pop(obj);
- efl_event_callback_legacy_call(obj, EFL_UI_EVENT_DRAG_END, NULL);
+ evas_object_smart_callback_call(obj, "drag,end", NULL);
sd->drag_started = EINA_FALSE;
}
@@ -189,8 +189,8 @@ _long_press_cb(void *obj)
_drag_done_cb, NULL))
{
elm_object_scroll_freeze_push(obj);
- efl_event_callback_legacy_call
- (obj, EFL_UI_EVENT_DRAG_START, NULL);
+ evas_object_smart_callback_call
+ (obj, "drag,start", NULL);
sd->drag_started = EINA_TRUE;
}
}
diff --git a/src/lib/elementary/elm_photo_eo.h b/src/lib/elementary/elm_photo_eo.h
index 50cdb235b5..a624ca96d1 100644
--- a/src/lib/elementary/elm_photo_eo.h
+++ b/src/lib/elementary/elm_photo_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Photo;
*/
#define ELM_PHOTO_CLASS elm_photo_class_get()
-EWAPI const Efl_Class *elm_photo_class_get(void);
+EWAPI const Efl_Class *elm_photo_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_photocam.h b/src/lib/elementary/elm_photocam.h
index 7286366711..fed819a9af 100644
--- a/src/lib/elementary/elm_photocam.h
+++ b/src/lib/elementary/elm_photocam.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Photocam Photocam
+ * @defgroup Elm_Photocam_Group Photocam
* @ingroup Elementary
*
* @image html photocam_inheritance_tree.png
@@ -42,7 +42,7 @@
* @li @c "focused" - When the photocam has received focus. (since 1.8)
* @li @c "unfocused" - When the photocam has lost focus. (since 1.8)
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base @ref
* Scroller widget also work for photocam objects.
*
@@ -69,7 +69,7 @@ struct _Elm_Photocam_Progress
};
/**
- * Structre associated with smart callback 'download,error'
+ * Structure associated with smart callback 'download,error'
* @since 1.8
*/
typedef struct _Elm_Photocam_Error Elm_Photocam_Error;
diff --git a/src/lib/elementary/elm_photocam_legacy.h b/src/lib/elementary/elm_photocam_legacy.h
index f80d8ac49b..9719c30166 100644
--- a/src/lib/elementary/elm_photocam_legacy.h
+++ b/src/lib/elementary/elm_photocam_legacy.h
@@ -6,7 +6,7 @@ typedef Eo Elm_Photocam;
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI Evas_Object *elm_photocam_add(Evas_Object *parent);
@@ -21,7 +21,7 @@ EAPI Evas_Object *elm_photocam_add(Evas_Object *parent);
*
* This shows the region of the image using animation.
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI void elm_photocam_image_region_bring_in(Evas_Object *obj, int x, int y, int w, int h);
@@ -38,7 +38,7 @@ EAPI void elm_photocam_image_region_bring_in(Evas_Object *obj,
* photo that at some time in the future will be displayed at the full
* quality needed.
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*
* @param[in] file The photo file
*/
@@ -52,7 +52,7 @@ EAPI Evas_Load_Error elm_photocam_file_set(Evas_Object *obj, const char *file);
*
* @see elm_photocam_file_set()
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*
*/
EAPI const char *elm_photocam_file_get(const Evas_Object *obj);
@@ -67,7 +67,7 @@ EAPI const char *elm_photocam_file_get(const Evas_Object *obj);
*
* @since 1.14
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI void elm_photocam_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient);
@@ -79,7 +79,7 @@ EAPI void elm_photocam_image_orient_set(Evas_Object *obj, Evas_Image_Orient orie
*
* @since 1.14
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI Evas_Image_Orient elm_photocam_image_orient_get(const Evas_Object *obj);
@@ -92,7 +92,7 @@ EAPI Evas_Image_Orient elm_photocam_image_orient_get(const Evas_Object *obj);
*
* @return The internal image object handle or @c null
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI Evas_Object* elm_photocam_internal_image_get(const Evas_Object *obj);
@@ -106,7 +106,7 @@ EAPI Evas_Object* elm_photocam_internal_image_get(const Evas_Object *obj);
* @param[in] w Width of region in image original pixels
* @param[in] h Height of region in image original pixels
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI void elm_photocam_image_region_show(Evas_Object *obj, int x, int y, int w, int h);
@@ -119,7 +119,7 @@ EAPI void elm_photocam_image_region_show(Evas_Object *obj, int x, i
* @param[out] w A pointer to the width return
* @param[out] h A pointer to the height return
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI void elm_photocam_image_size_get(const Evas_Object *obj, int *w, int *h);
@@ -130,7 +130,7 @@ EAPI void elm_photocam_image_size_get(const Evas_Object *obj, int *
*
* @return The pause state.
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI Eina_Bool elm_photocam_paused_get(const Evas_Object *obj);
@@ -143,7 +143,7 @@ EAPI Eina_Bool elm_photocam_paused_get(const Evas_Object *obj);
*
* @param[in] paused The pause state.
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI void elm_photocam_paused_set(Evas_Object *obj, Eina_Bool paused);
@@ -160,7 +160,7 @@ EAPI void elm_photocam_paused_set(Evas_Object *obj, Eina_Bool paused
*
* @param[in] zoom The zoom level to set
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI void elm_photocam_zoom_set(Evas_Object *obj, double zoom);
@@ -174,7 +174,7 @@ EAPI void elm_photocam_zoom_set(Evas_Object *obj, double zoom);
*
* @return The zoom level to set
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI double elm_photocam_zoom_get(const Evas_Object *obj);
@@ -207,7 +207,7 @@ typedef enum
*
* @param[in] mode The zoom mode.
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI void elm_photocam_zoom_mode_set(Evas_Object *obj, Elm_Photocam_Zoom_Mode mode);
@@ -218,7 +218,7 @@ EAPI void elm_photocam_zoom_mode_set(Evas_Object *obj, Elm_Photoca
*
* @return The zoom mode.
*
- * @ingroup Elm_Photocam
+ * @ingroup Elm_Photocam_Group
*/
EAPI Elm_Photocam_Zoom_Mode elm_photocam_zoom_mode_get(const Evas_Object *obj);
diff --git a/src/lib/elementary/elm_player_eo.h b/src/lib/elementary/elm_player_eo.h
index 8efee210e8..c0b909863c 100644
--- a/src/lib/elementary/elm_player_eo.h
+++ b/src/lib/elementary/elm_player_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Player;
*/
#define ELM_PLAYER_CLASS elm_player_class_get()
-EWAPI const Efl_Class *elm_player_class_get(void);
+EWAPI const Efl_Class *elm_player_class_get(void) EINA_CONST;
EWAPI extern const Efl_Event_Description _ELM_PLAYER_EVENT_FORWARD_CLICKED;
diff --git a/src/lib/elementary/elm_plug.h b/src/lib/elementary/elm_plug.h
index 88ff450217..d57883d5d4 100644
--- a/src/lib/elementary/elm_plug.h
+++ b/src/lib/elementary/elm_plug.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Plug Plug
+ * @defgroup Elm_Plug_Group Plug
* @ingroup Elementary
*
* @image html plug_inheritance_tree.png
@@ -27,7 +27,7 @@
/**
- * @addtogroup Plug
+ * @addtogroup Elm_Plug_Group
* @{
*/
diff --git a/src/lib/elementary/elm_plug_eo.h b/src/lib/elementary/elm_plug_eo.h
index f27785ff88..96a2efe46e 100644
--- a/src/lib/elementary/elm_plug_eo.h
+++ b/src/lib/elementary/elm_plug_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Plug;
*/
#define ELM_PLUG_CLASS elm_plug_class_get()
-EWAPI const Efl_Class *elm_plug_class_get(void);
+EWAPI const Efl_Class *elm_plug_class_get(void) EINA_CONST;
/**
* @brief Get the basic Evas_Image object from this object (widget).
diff --git a/src/lib/elementary/elm_plug_legacy.h b/src/lib/elementary/elm_plug_legacy.h
index 58bc85424b..fae24d3a4e 100644
--- a/src/lib/elementary/elm_plug_legacy.h
+++ b/src/lib/elementary/elm_plug_legacy.h
@@ -4,8 +4,8 @@
* @param parent The parent object
* @return The new plug image object or NULL if it cannot be created
*
- * @ingroup Plug
+ * @ingroup Elm_Plug_Group
*/
EAPI Evas_Object *elm_plug_add(Evas_Object *parent);
-#include "elm_plug_eo.legacy.h" \ No newline at end of file
+#include "elm_plug_eo.legacy.h"
diff --git a/src/lib/elementary/elm_popup_eo.h b/src/lib/elementary/elm_popup_eo.h
index e040fe6dbc..f8055dda93 100644
--- a/src/lib/elementary/elm_popup_eo.h
+++ b/src/lib/elementary/elm_popup_eo.h
@@ -49,7 +49,7 @@ typedef enum
*/
#define ELM_POPUP_CLASS elm_popup_class_get()
-EWAPI const Efl_Class *elm_popup_class_get(void);
+EWAPI const Efl_Class *elm_popup_class_get(void) EINA_CONST;
/**
* @brief Set the alignment of the popup object.
diff --git a/src/lib/elementary/elm_popup_eo.legacy.h b/src/lib/elementary/elm_popup_eo.legacy.h
index debf944357..a02e667cfe 100644
--- a/src/lib/elementary/elm_popup_eo.legacy.h
+++ b/src/lib/elementary/elm_popup_eo.legacy.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Popup;
* conjunction with elm_popup_orient_get() to know where the popup is
* appearing.
*
- * @ingroup Elm_Popup
+ * @ingroup Elm_Popup_Group
*/
typedef enum
{
diff --git a/src/lib/elementary/elm_popup_item_eo.h b/src/lib/elementary/elm_popup_item_eo.h
index 46d6534289..d5ba854a3a 100644
--- a/src/lib/elementary/elm_popup_item_eo.h
+++ b/src/lib/elementary/elm_popup_item_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Popup_Item;
*/
#define ELM_POPUP_ITEM_CLASS elm_popup_item_class_get()
-EWAPI const Efl_Class *elm_popup_item_class_get(void);
+EWAPI const Efl_Class *elm_popup_item_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_prefs.h b/src/lib/elementary/elm_prefs.h
index 37f76e57d6..ecc1a25ef9 100644
--- a/src/lib/elementary/elm_prefs.h
+++ b/src/lib/elementary/elm_prefs.h
@@ -34,7 +34,7 @@
*
* Once a prefs widget is created, after elm_prefs_file_set() is
* issued on it, all of its UI elements will get default values,
- * declared on that file. To fetch an user's own, personal set of
+ * declared on that file. To fetch a user's own, personal set of
* those values, one gets to pair an <b>@ref elm-prefs-data</b> handle
* to the prefs widget.
*
diff --git a/src/lib/elementary/elm_prefs_eo.h b/src/lib/elementary/elm_prefs_eo.h
index 5f6fad3bf2..08c70b50fb 100644
--- a/src/lib/elementary/elm_prefs_eo.h
+++ b/src/lib/elementary/elm_prefs_eo.h
@@ -19,14 +19,14 @@ typedef Eo Elm_Prefs;
*/
#define ELM_PREFS_CLASS elm_prefs_class_get()
-EWAPI const Efl_Class *elm_prefs_class_get(void);
+EWAPI const Efl_Class *elm_prefs_class_get(void) EINA_CONST;
/**
* @brief Set user data for a given prefs widget
*
* Once a prefs widget is created, after elm_prefs_file_set() is issued on it,
* all of its UI elements will get default values, when declared on that file.
- * To fetch an user's own, personal set of those values, one gets to pair a
+ * To fetch a user's own, personal set of those values, one gets to pair a
* prefs data handle to the prefs widget. This is what this call is intended
* for.
*
@@ -59,7 +59,7 @@ EOAPI Eina_Bool elm_obj_prefs_data_set(Eo *obj, Elm_Prefs_Data *data);
*
* Once a prefs widget is created, after elm_prefs_file_set() is issued on it,
* all of its UI elements will get default values, when declared on that file.
- * To fetch an user's own, personal set of those values, one gets to pair a
+ * To fetch a user's own, personal set of those values, one gets to pair a
* prefs data handle to the prefs widget. This is what this call is intended
* for.
*
@@ -147,7 +147,7 @@ EOAPI void elm_obj_prefs_reset(Eo *obj, Elm_Prefs_Reset_Mode mode);
/**
* @brief Set the value on a given prefs widget's item.
*
- * This will change the value of item named @c name programatically.
+ * This will change the value of item named @c name programmatically.
*
* @param[in] obj The object.
* @param[in] name The name of the item (as declared in the prefs collection)
@@ -304,7 +304,7 @@ EOAPI Efl_Canvas_Object *elm_obj_prefs_item_unswallow(Eo *obj, const char *name)
*
* Each prefs item may have a default visibility state, declared on the $.epb
* @c prefs it was loaded with. By this call one may alter that state,
- * programatically.
+ * programmatically.
*
* @param[in] obj The object.
* @param[in] name The name of the item (as declared in the prefs collection)
diff --git a/src/lib/elementary/elm_prefs_eo.legacy.h b/src/lib/elementary/elm_prefs_eo.legacy.h
index 47fb914d56..85a8f5dd7d 100644
--- a/src/lib/elementary/elm_prefs_eo.legacy.h
+++ b/src/lib/elementary/elm_prefs_eo.legacy.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Prefs;
*
* Once a prefs widget is created, after elm_prefs_file_set() is issued on it,
* all of its UI elements will get default values, when declared on that file.
- * To fetch an user's own, personal set of those values, one gets to pair a
+ * To fetch a user's own, personal set of those values, one gets to pair a
* prefs data handle to the prefs widget. This is what this call is intended
* for.
*
@@ -52,7 +52,7 @@ EAPI Eina_Bool elm_prefs_data_set(Elm_Prefs *obj, Elm_Prefs_Data *data);
*
* Once a prefs widget is created, after elm_prefs_file_set() is issued on it,
* all of its UI elements will get default values, when declared on that file.
- * To fetch an user's own, personal set of those values, one gets to pair a
+ * To fetch a user's own, personal set of those values, one gets to pair a
* prefs data handle to the prefs widget. This is what this call is intended
* for.
*
@@ -140,7 +140,7 @@ EAPI void elm_prefs_reset(Elm_Prefs *obj, Elm_Prefs_Reset_Mode mode);
/**
* @brief Set the value on a given prefs widget's item.
*
- * This will change the value of item named @c name programatically.
+ * This will change the value of item named @c name programmatically.
*
* @param[in] obj The object.
* @param[in] name The name of the item (as declared in the prefs collection)
@@ -297,7 +297,7 @@ EAPI Efl_Canvas_Object *elm_prefs_item_unswallow(Elm_Prefs *obj, const char *nam
*
* Each prefs item may have a default visibility state, declared on the $.epb
* @c prefs it was loaded with. By this call one may alter that state,
- * programatically.
+ * programmatically.
*
* @param[in] obj The object.
* @param[in] name The name of the item (as declared in the prefs collection)
diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h
index ca3ab0620f..aee4b4d8d6 100644
--- a/src/lib/elementary/elm_priv.h
+++ b/src/lib/elementary/elm_priv.h
@@ -8,6 +8,7 @@
# endif
# ifdef HAVE_ELEMENTARY_WL2
# include <Ecore_Wl2.h>
+# include "ecore_wl2_internal.h"
# endif
# ifdef HAVE_ELEMENTARY_DRM
# include <Ecore_Drm2.h>
@@ -164,7 +165,6 @@
# include "efl_ui_focus_parent_provider.eo.h"
# include "efl_ui_focus_parent_provider_standard.eo.h"
-# include "efl_ui_selection_manager.eo.h"
# include "efl_datetime_manager.eo.h"
extern const char *_efl_model_property_itemw;
@@ -270,7 +270,7 @@ struct _Efl_Ui_Theme_Data
* the users config doesn't need to be wiped - simply new values need
* to be put in
*/
-# define ELM_CONFIG_FILE_GENERATION 0x0016
+# define ELM_CONFIG_FILE_GENERATION 0x0018
# define ELM_CONFIG_VERSION_EPOCH_OFFSET 16
# define ELM_CONFIG_VERSION ((ELM_CONFIG_EPOCH << ELM_CONFIG_VERSION_EPOCH_OFFSET) | \
ELM_CONFIG_FILE_GENERATION)
@@ -550,7 +550,7 @@ struct _Elm_Config
double glayer_zoom_finger_factor;
double glayer_zoom_wheel_factor;
double glayer_zoom_distance_tolerance;
- double glayer_rotate_finger_enable;
+ unsigned char glayer_rotate_finger_enable;
double glayer_rotate_angular_tolerance;
double glayer_line_min_length;
double glayer_line_distance_tolerance;
@@ -667,9 +667,6 @@ void _elm_prefs_data_init(void);
void _elm_prefs_data_shutdown(void);
/* init functions for dnd and cnp */
-Eo* _efl_ui_selection_manager_get(Eo *obj);
-void _efl_ui_dnd_shutdown(void);
-
int _elm_ews_wm_init(void);
void _elm_ews_wm_shutdown(void);
void _elm_ews_wm_rescale(Elm_Theme *th,
@@ -851,6 +848,10 @@ void _elm_win_wl_cursor_set(Evas_Object *obj, const char *cursor
void _efl_ui_focus_manager_redirect_events_del(Efl_Ui_Focus_Manager *manager, Eo *obj);
void _efl_ui_focus_manager_redirect_events_add(Efl_Ui_Focus_Manager *manager, Eo *obj);
+EOAPI Eina_Bool efl_ui_focus_manager_calc_update_children(Eo *obj, Efl_Ui_Focus_Object *parent, Eina_List *children EFL_TRANSFER_OWNERSHIP);
+EOAPI void efl_ui_focus_manager_calc_update_order(Eo *obj, Efl_Ui_Focus_Object *parent, Eina_List *children EFL_TRANSFER_OWNERSHIP);
+
+
void _efl_access_shutdown(void);
/* Combobox: no proper support for Efl.Part API yet. */
@@ -903,10 +904,6 @@ extern Eina_Bool _config_profile_lock;
extern Eina_FreeQ *postponed_fq;
-# ifdef HAVE_ELEMENTARY_WL2
-extern Ecore_Wl2_Display *_elm_wl_display;
-# endif
-
# ifdef ENABLE_NLS
/* Our gettext wrapper, used to disable translation of elm if the app
* is not translated. */
@@ -930,6 +927,7 @@ void _elm_entry_entry_paste(Evas_Object *obj, const char *entry);
double _elm_atof(const char *s);
+void _elm_layout_legacy_icon_signal_emit(Evas_Object *obj);
// elm_layout and elm_entry LEGACY signal API (returned the user data pointer)
void _elm_layout_signal_callback_add_legacy(Eo *obj, Eo *edje, Eina_List **p_edje_signals, const char *emission, const char *source, Edje_Signal_Cb func, void *data);
void *_elm_layout_signal_callback_del_legacy(Eo *obj, Eo *edje, Eina_List **p_edje_signals, const char *emission, const char *source, Edje_Signal_Cb func);
@@ -1055,4 +1053,11 @@ typedef struct
Efl_Ui_Shared_Win_Data* efl_ui_win_shared_data_get(Efl_Ui_Win *win);
+void _selection_changed_event_register(Eo *obj);
+void _selection_changed_event_unregister(Eo *obj);
+void _drop_event_register(Eo *obj);
+void _drop_event_unregister(Eo *obj);
+void _register_selection_changed(Efl_Ui_Selection *selection);
+Efl_Ui_Win* efl_ui_win_get(Evas_Object *obj);
+
#endif
diff --git a/src/lib/elementary/elm_progressbar.h b/src/lib/elementary/elm_progressbar.h
index 8c57fcf76a..bd051e39e6 100644
--- a/src/lib/elementary/elm_progressbar.h
+++ b/src/lib/elementary/elm_progressbar.h
@@ -30,11 +30,11 @@
* Applications can query the progress bar for its value with
* elm_progressbar_value_get().
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for progress bar objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "changed" - when the value is changed (since 1.7)
* @li @c "focused" - When the progressbar has received focus. (since 1.8)
* @li @c "unfocused" - When the progressbar has lost focus. (since 1.8)
diff --git a/src/lib/elementary/elm_radio.h b/src/lib/elementary/elm_radio.h
index dfedb190c9..87903d60f7 100644
--- a/src/lib/elementary/elm_radio.h
+++ b/src/lib/elementary/elm_radio.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Radio Radio
+ * @defgroup Elm_Radio_Group Radio
* @ingroup Elementary
*
* @image html radio_inheritance_tree.png
@@ -33,11 +33,11 @@
* The radio objects will modify this directly. That implies the pointer must
* point to valid memory for as long as the radio objects exist.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for radio objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* @li @c "changed" - This is called when the radio object is selected. If you
* want to trace the state change of a radio group, you should add this callback
* to all the radio objects in that group.
diff --git a/src/lib/elementary/elm_radio_legacy.h b/src/lib/elementary/elm_radio_legacy.h
index 35a4741ad1..39e1613537 100644
--- a/src/lib/elementary/elm_radio_legacy.h
+++ b/src/lib/elementary/elm_radio_legacy.h
@@ -6,7 +6,7 @@ typedef Eo Elm_Radio;
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Radio
+ * @ingroup Elm_Radio_Group
*/
EAPI Evas_Object *elm_radio_add(Evas_Object *parent);
@@ -18,7 +18,7 @@ EAPI Evas_Object *elm_radio_add(Evas_Object *parent);
*
* @param[in] value The value to use for the group
*
- * @ingroup Elm_Radio
+ * @ingroup Elm_Radio_Group
*/
EAPI void elm_radio_value_set(Evas_Object *obj, int value);
@@ -27,7 +27,7 @@ EAPI void elm_radio_value_set(Evas_Object *obj, int value)
*
* @return The value to use for the group
*
- * @ingroup Elm_Radio
+ * @ingroup Elm_Radio_Group
*/
EAPI int elm_radio_value_get(const Evas_Object *obj);
diff --git a/src/lib/elementary/elm_removed.h b/src/lib/elementary/elm_removed.h
index e6e9795135..1e126c578a 100644
--- a/src/lib/elementary/elm_removed.h
+++ b/src/lib/elementary/elm_removed.h
@@ -1976,7 +1976,7 @@ EINA_DEPRECATED EAPI void elm_flipselector_item_del(Elm_Object_Item *it);
EINA_DEPRECATED EAPI void elm_flipselector_interval_set(Evas_Object *obj, double interval);
/**
- * Get the interval on time updates for an user mouse button hold
+ * Get the interval on time updates for a user mouse button hold
* on a flip selector widget.
*
* @param obj The flip selector object
diff --git a/src/lib/elementary/elm_route_eo.h b/src/lib/elementary/elm_route_eo.h
index a1946233e8..64208eda8f 100644
--- a/src/lib/elementary/elm_route_eo.h
+++ b/src/lib/elementary/elm_route_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Route;
*/
#define ELM_ROUTE_CLASS elm_route_class_get()
-EWAPI const Efl_Class *elm_route_class_get(void);
+EWAPI const Efl_Class *elm_route_class_get(void) EINA_CONST;
/**
* @brief Set map widget for this route
diff --git a/src/lib/elementary/elm_scroller.c b/src/lib/elementary/elm_scroller.c
index 8d20030a91..95643ce772 100644
--- a/src/lib/elementary/elm_scroller.c
+++ b/src/lib/elementary/elm_scroller.c
@@ -328,6 +328,7 @@ _elm_scroller_efl_ui_widget_on_access_activate(Eo *obj, Elm_Scroller_Data *_pd E
EOLIAN static void
_elm_scroller_efl_canvas_group_group_calculate(Eo *obj, Elm_Scroller_Data *sd)
{
+ Evas_Coord ovw, ovh;
Evas_Coord vw = 0, vh = 0, minw = 0, minh = 0, maxw = 0, maxh = 0, w, h,
vmw, vmh;
Evas_Coord h_pagesize, v_pagesize;
@@ -345,6 +346,10 @@ _elm_scroller_efl_canvas_group_group_calculate(Eo *obj, Elm_Scroller_Data *sd)
elm_interface_scrollable_content_viewport_geometry_get
(obj, NULL, NULL, &vw, &vh);
+
+ ovw = vw;
+ ovh = vh;
+
if (xw > 0.0)
{
if ((minw > 0) && (vw < minw))
@@ -372,7 +377,8 @@ _elm_scroller_efl_canvas_group_group_calculate(Eo *obj, Elm_Scroller_Data *sd)
{
if (!sd->proxy_content[i]) continue;
elm_interface_scrollable_paging_get((Eo *)obj, NULL, NULL, &h_pagesize, &v_pagesize);
- evas_object_image_fill_set(sd->proxy_content[i], 0, 0, vw, vh);
+ evas_object_image_fill_set(sd->proxy_content[i], 0, 0, ovw, ovh);
+ evas_object_image_load_region_set(sd->proxy_content[i], 0, 0, ovw, ovh);
evas_object_size_hint_min_set(sd->proxy_content[i],
h_pagesize, v_pagesize);
}
@@ -1208,10 +1214,10 @@ elm_scroller_movement_block_set(Evas_Object *obj,
Efl_Ui_Layout_Orientation mode = EFL_UI_LAYOUT_ORIENTATION_DEFAULT;
// legacy -> eo
- if (block == ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL)
- mode = EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
- else if (block == ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL)
- mode = EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
+ if (block & ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL)
+ mode |= EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
+ if (block & ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL)
+ mode |= EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
elm_interface_scrollable_movement_block_set(obj, mode);
}
@@ -1220,18 +1226,20 @@ EAPI Elm_Scroller_Movement_Block
elm_scroller_movement_block_get(const Evas_Object *obj)
{
Efl_Ui_Layout_Orientation mode;
+ Elm_Scroller_Movement_Block mode2 = 0;
ELM_SCROLLABLE_CHECK(obj, ELM_SCROLLER_MOVEMENT_NO_BLOCK);
mode = elm_interface_scrollable_movement_block_get(obj);
// eo -> legacy
- if (mode == EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL)
- return ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL;
- else if (mode == EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
- return ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL;
+ if (mode & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL)
+ mode2 |= ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL;
+ else if (mode & EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
+ mode2 |= ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL;
- return ELM_SCROLLER_MOVEMENT_NO_BLOCK;
+ if (mode2 == 0) return ELM_SCROLLER_MOVEMENT_NO_BLOCK;
+ return mode2;
}
EAPI void
diff --git a/src/lib/elementary/elm_scroller.h b/src/lib/elementary/elm_scroller.h
index b12de04b6c..1dc44075db 100644
--- a/src/lib/elementary/elm_scroller.h
+++ b/src/lib/elementary/elm_scroller.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Scroller Scroller
+ * @defgroup Elm_Scroller_Group Scroller
* @ingroup Elementary
*
* @image html scroller_inheritance_tree.png
@@ -12,7 +12,7 @@
* always have a small minimum size by default as it won't be limited
* by the contents of the scroller.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for scroller objects.
*
* This widget emits the following signals, besides the ones sent from
diff --git a/src/lib/elementary/elm_scroller_eo.h b/src/lib/elementary/elm_scroller_eo.h
index 6d4dd6ce38..29f6bef140 100644
--- a/src/lib/elementary/elm_scroller_eo.h
+++ b/src/lib/elementary/elm_scroller_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Scroller;
*/
#define ELM_SCROLLER_CLASS elm_scroller_class_get()
-EWAPI const Efl_Class *elm_scroller_class_get(void);
+EWAPI const Efl_Class *elm_scroller_class_get(void) EINA_CONST;
/**
* @brief Set custom theme elements for the scroller
diff --git a/src/lib/elementary/elm_scroller_legacy.h b/src/lib/elementary/elm_scroller_legacy.h
index 76748986c4..2ecfd05f3e 100644
--- a/src/lib/elementary/elm_scroller_legacy.h
+++ b/src/lib/elementary/elm_scroller_legacy.h
@@ -8,7 +8,7 @@
*
* See also @ref elm_interface_scrollable_policy_set.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
typedef enum
{
@@ -24,7 +24,7 @@ typedef enum
*
* See also @ref elm_interface_scrollable_single_direction_set.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
typedef enum
{
@@ -46,7 +46,7 @@ typedef enum
*
* @since 1.8
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
typedef enum
{
@@ -61,7 +61,7 @@ typedef enum
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI Evas_Object *elm_scroller_add(Evas_Object *parent);
@@ -77,7 +77,7 @@ EAPI Evas_Object *elm_scroller_add(Evas_Object *parent);
* right size horizontally and/or vertically to perfectly fit its content in
* that direction.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_content_min_limit(Evas_Object *obj, Eina_Bool w, Eina_Bool h);
@@ -94,7 +94,7 @@ EAPI void elm_scroller_content_min_limit(Evas_Object *o
* region in the virtual content object (0, 0 starting at the top-left of the
* virtual content object) is shown within the scroller.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
@@ -111,7 +111,7 @@ EAPI void elm_scroller_region_show(Evas_Object *obj, Ev
* the time, and #ELM_SCROLLER_POLICY_OFF always keeps it off. This applies
* respectively for the horizontal and vertical scrollbars.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v);
@@ -124,7 +124,7 @@ EAPI void elm_scroller_policy_set(Evas_Object *obj, Elm
*
* @see elm_scroller_policy_set()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v);
@@ -138,7 +138,7 @@ EAPI void elm_scroller_policy_get(const Evas_Object *ob
*
* @since 1.8
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_single_direction_set(Evas_Object *obj, Elm_Scroller_Single_Direction single_dir);
@@ -152,7 +152,7 @@ EAPI void elm_scroller_single_direction_set(Evas_Object
*
* @since 1.8
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI Elm_Scroller_Single_Direction elm_scroller_single_direction_get(const Evas_Object *obj);
@@ -173,7 +173,7 @@ EAPI Elm_Scroller_Single_Direction elm_scroller_single_direction_get(const Evas_
*
* @see elm_scroller_region_show()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_region_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
@@ -186,7 +186,7 @@ EAPI void elm_scroller_region_get(const Evas_Object *ob
*
* This gets the size of the content object of the scroller.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_child_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
@@ -209,7 +209,7 @@ EAPI void elm_scroller_child_size_get(const Evas_Object
*
* @since 1.8
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_snap_set(Evas_Object *obj, Eina_Bool page_h_snap, Eina_Bool page_v_snap);
@@ -224,7 +224,7 @@ EAPI void elm_scroller_page_snap_set(Evas_Object *obj,
*
* @since 1.8
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_snap_get(const Evas_Object *obj, Eina_Bool *page_h_snap, Eina_Bool *page_v_snap);
@@ -240,7 +240,7 @@ EAPI void elm_scroller_page_snap_get(const Evas_Object
* This is enabled by default for both axis. This API will set if it is enabled
* for the given axis with the boolean parameters for each axis.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
@@ -253,7 +253,7 @@ EAPI void elm_scroller_bounce_set(Evas_Object *obj, Ein
*
* @see elm_scroller_bounce_set()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
@@ -275,7 +275,7 @@ EAPI void elm_scroller_bounce_get(const Evas_Object *ob
* including 1.0. If you only want 1 axis to be page "limited", use 0.0 for
* the other axis.
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel);
@@ -293,7 +293,7 @@ EAPI void elm_scroller_page_relative_set(Evas_Object *o
*
* @since 1.7
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_relative_get(const Evas_Object *obj, double *h_pagerel, double *v_pagerel);
@@ -310,7 +310,7 @@ EAPI void elm_scroller_page_relative_get(const Evas_Obj
* @see elm_scroller_page_relative_set()
* @see elm_scroller_page_size_get()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize);
@@ -326,7 +326,7 @@ EAPI void elm_scroller_page_size_set(Evas_Object *obj,
*
* @since 1.7
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_size_get(const Evas_Object *obj, Evas_Coord *h_pagesize, Evas_Coord *v_pagesize);
@@ -346,7 +346,7 @@ EAPI void elm_scroller_page_size_get(const Evas_Object
* @see elm_scroller_page_show()
* @see elm_scroller_page_bring_in()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_current_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber);
@@ -364,7 +364,7 @@ EAPI void elm_scroller_current_page_get(const Evas_Obje
* @see elm_scroller_page_show()
* @see elm_scroller_page_bring_in()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_last_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber);
@@ -390,7 +390,7 @@ EAPI void elm_scroller_last_page_get(const Evas_Object
*
* @see elm_scroller_page_bring_in()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber);
@@ -416,7 +416,7 @@ EAPI void elm_scroller_page_show(Evas_Object *obj, int
*
* @see elm_scroller_page_show()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber);
@@ -439,7 +439,7 @@ EAPI void elm_scroller_page_bring_in(Evas_Object *obj,
*
* @see elm_scroller_region_show()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
@@ -462,7 +462,7 @@ EAPI void elm_scroller_region_bring_in(Evas_Object *obj
*
* Default values for x and y are 0.0
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_gravity_set(Evas_Object *obj, double x, double y);
@@ -477,7 +477,7 @@ EAPI void elm_scroller_gravity_set(Evas_Object *obj, do
*
* @see elm_scroller_gravity_set()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_gravity_get(const Evas_Object *obj, double *x, double *y);
@@ -501,21 +501,21 @@ EAPI void elm_scroller_gravity_get(const Evas_Object *o
*
* @since 1.8
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_movement_block_set(Evas_Object *obj, Elm_Scroller_Movement_Block block);
/**
* @brief Get a scroller's scroll blocking state
*
- * @param parent The scroller object
+ * @param obj The scroller object
* @return The blocking state
*
* @since 1.8
*
* @see elm_scroller_movement_block_set() for more details
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI Elm_Scroller_Movement_Block elm_scroller_movement_block_get(const Evas_Object *obj);
@@ -532,7 +532,7 @@ EAPI Elm_Scroller_Movement_Block elm_scroller_movement_block_get(const Evas_Obj
*
* @since 1.13
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_step_size_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
@@ -547,7 +547,7 @@ EAPI void elm_scroller_step_size_set(Evas_Object *obj,
*
* @since 1.13
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_step_size_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
@@ -563,7 +563,7 @@ EAPI void elm_scroller_step_size_get(const Evas_Object
*
* @since 1.14
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_loop_set(Evas_Object *obj, Eina_Bool loop_h, Eina_Bool loop_v);
@@ -578,7 +578,7 @@ EAPI void elm_scroller_loop_set(Evas_Object *obj, Eina_
*
* @see elm_scroller_loop_set() for more details
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_loop_get(const Evas_Object *obj, Eina_Bool *loop_h, Eina_Bool *loop_v);
@@ -595,7 +595,7 @@ EAPI void elm_scroller_loop_get(const Evas_Object *obj,
*
* @see elm_scroller_wheel_disabled_get()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled);
@@ -611,7 +611,7 @@ EAPI void elm_scroller_wheel_disabled_set(Evas_Object *
*
* @see elm_scroller_wheel_disabled_set()
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI Eina_Bool elm_scroller_wheel_disabled_get(const Evas_Object *obj);
@@ -624,7 +624,7 @@ EAPI Eina_Bool elm_scroller_wheel_disabled_get(const Evas_Ob
* @param[in] obj The scroller object
* @param[in] propagation The propagation state
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI void elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagation);
@@ -636,7 +636,7 @@ EAPI void elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagat
* @param[in] obj The scroller object
* @return The propagation state
*
- * @ingroup Elm_Scroller
+ * @ingroup Elm_Scroller_Group
*/
EAPI Eina_Bool elm_scroller_propagate_events_get(const Evas_Object *obj);
#endif
diff --git a/src/lib/elementary/elm_segment_control.h b/src/lib/elementary/elm_segment_control.h
index fdfa2dd79d..1ad286b050 100644
--- a/src/lib/elementary/elm_segment_control.h
+++ b/src/lib/elementary/elm_segment_control.h
@@ -21,11 +21,11 @@
* Only one segment item can be at selected state. A segment item can display
* combination of Text and any Evas_Object like Images or other widget.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for segment control objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "changed" - When the user clicks on a segment item which is not
* previously selected and get selected. The event_info parameter is the
* segment item pointer.
diff --git a/src/lib/elementary/elm_segment_control_eo.h b/src/lib/elementary/elm_segment_control_eo.h
index 36c78056d1..6c8b8f4bb9 100644
--- a/src/lib/elementary/elm_segment_control_eo.h
+++ b/src/lib/elementary/elm_segment_control_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Segment_Control;
*/
#define ELM_SEGMENT_CONTROL_CLASS elm_segment_control_class_get()
-EWAPI const Efl_Class *elm_segment_control_class_get(void);
+EWAPI const Efl_Class *elm_segment_control_class_get(void) EINA_CONST;
/**
* @brief Get the Segment items count from segment control.
diff --git a/src/lib/elementary/elm_segment_control_item_eo.h b/src/lib/elementary/elm_segment_control_item_eo.h
index b61ba74a05..e6894161cf 100644
--- a/src/lib/elementary/elm_segment_control_item_eo.h
+++ b/src/lib/elementary/elm_segment_control_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Segment_Control_Item;
*/
#define ELM_SEGMENT_CONTROL_ITEM_CLASS elm_segment_control_item_class_get()
-EWAPI const Efl_Class *elm_segment_control_item_class_get(void);
+EWAPI const Efl_Class *elm_segment_control_item_class_get(void) EINA_CONST;
/**
* @brief Get the index of an item.
diff --git a/src/lib/elementary/elm_separator.h b/src/lib/elementary/elm_separator.h
index 40d39dce13..5a46b76f8c 100644
--- a/src/lib/elementary/elm_separator.h
+++ b/src/lib/elementary/elm_separator.h
@@ -9,10 +9,10 @@
*
* A separator can be vertical or horizontal.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for separator objects.
*
- * This widget emits the signals coming from @ref Layout.
+ * This widget emits the signals coming from @ref Elm_Layout.
*
* @ref tutorial_separator is a good example of how to use a separator.
* @{
diff --git a/src/lib/elementary/elm_separator_eo.h b/src/lib/elementary/elm_separator_eo.h
index ce4d5e0539..7c0375acf6 100644
--- a/src/lib/elementary/elm_separator_eo.h
+++ b/src/lib/elementary/elm_separator_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Separator;
*/
#define ELM_SEPARATOR_CLASS elm_separator_class_get()
-EWAPI const Efl_Class *elm_separator_class_get(void);
+EWAPI const Efl_Class *elm_separator_class_get(void) EINA_CONST;
/**
* @brief Set the horizontal mode of a separator object
diff --git a/src/lib/elementary/elm_slider.c b/src/lib/elementary/elm_slider.c
index 2c6c26b84d..e5bd17711b 100644
--- a/src/lib/elementary/elm_slider.c
+++ b/src/lib/elementary/elm_slider.c
@@ -102,7 +102,7 @@ _units_set(Evas_Object *obj)
{
Eina_Value val;
- eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE);
+ if (!eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE)) return;
eina_strbuf_reset(sd->format_strbuf);
if (!sd->intvl_enable)
@@ -147,7 +147,7 @@ _indicator_set(Evas_Object *obj)
if (!sd->indi_format_cb) return;
- eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE);
+ if (!eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE)) return;
eina_strbuf_reset(sd->indi_format_strbuf);
eina_value_set(&val, sd->val);
@@ -180,7 +180,7 @@ _min_max_set(Evas_Object *obj)
Eina_Value val;
if (!sd->format_cb) return;
- eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE);
+ if (!eina_value_setup(&val, EINA_VALUE_TYPE_DOUBLE)) return;
str = eina_strbuf_new();
@@ -630,9 +630,6 @@ _elm_slider_efl_ui_widget_widget_input_event_handler(Eo *obj, Elm_Slider_Data *s
else
_drag_down(obj, NULL, NULL, NULL);
efl_input_processed_set(ev, EINA_TRUE);
- ELM_SAFE_FREE(sd->wheel_indicator_timer, ecore_timer_del);
- sd->wheel_indicator_timer =
- ecore_timer_add(0.5, _wheel_indicator_timer_cb, obj);
}
else return EINA_FALSE;
@@ -640,6 +637,13 @@ _elm_slider_efl_ui_widget_widget_input_event_handler(Eo *obj, Elm_Slider_Data *s
_val_fetch(obj, EINA_TRUE);
evas_object_smart_changed(obj);
+ if (eo_event->desc == EFL_EVENT_POINTER_WHEEL)
+ {
+ ELM_SAFE_FREE(sd->wheel_indicator_timer, ecore_timer_del);
+ sd->wheel_indicator_timer =
+ ecore_timer_add(0.5, _wheel_indicator_timer_cb, obj);
+ }
+
return EINA_TRUE;
}
@@ -1266,6 +1270,9 @@ _elm_slider_efl_ui_format_format_cb_set(Eo *obj, Elm_Slider_Data *sd, void *func
if (sd->format_cb_data && sd->format_free_cb)
sd->format_free_cb(sd->format_cb_data);
+// sd->format_cb = NULL;
+// sd->format_cb_data = NULL;
+// sd->format_free_cb = NULL;
if (efl_invalidated_get(obj)) return;
@@ -1357,7 +1364,7 @@ _indi_default_format_cb(void *data, Eina_Strbuf *str, const Eina_Value value)
if (type != EINA_VALUE_TYPE_DOUBLE) return EINA_FALSE;
- eina_value_get(&value, &v);
+ if (!eina_value_get(&value, &v)) return EINA_FALSE;
eina_strbuf_append_printf(str, sd->indi_template, v);
return EINA_TRUE;
@@ -1497,7 +1504,7 @@ elm_slider_step_set(Evas_Object *obj, double step)
ERR("Wrong param. The step(%lf) should be greater than 0.0", step);
return;
}
- if (sd->step == step) return;
+ if (EINA_DBL_EQ(sd->step, step)) return;
sd->step = step;
}
@@ -1567,7 +1574,9 @@ _format_legacy_to_format_eo_cb(void *data, Eina_Strbuf *str, const Eina_Value va
const Eina_Value_Type *type = eina_value_type_get(&value);
if (type == EINA_VALUE_TYPE_DOUBLE)
- eina_value_get(&value, &val);
+ {
+ if (!eina_value_get(&value, &val)) return EINA_FALSE;
+ }
if (sfwd->format_cb)
buf = sfwd->format_cb(val);
diff --git a/src/lib/elementary/elm_slider.h b/src/lib/elementary/elm_slider.h
index 2895342fcd..edcc03b803 100644
--- a/src/lib/elementary/elm_slider.h
+++ b/src/lib/elementary/elm_slider.h
@@ -29,11 +29,11 @@
* the object or applications scaling factor. At any point code can query the
* slider for its value with elm_slider_value_get().
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for slider objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "changed" - Whenever the slider value is changed by the user.
* - @c "slider,drag,start" - dragging the slider indicator around has started.
* - @c "slider,drag,stop" - dragging the slider indicator around has stopped.
diff --git a/src/lib/elementary/elm_slider_eo.h b/src/lib/elementary/elm_slider_eo.h
index 1f95ec1770..6e21209c4b 100644
--- a/src/lib/elementary/elm_slider_eo.h
+++ b/src/lib/elementary/elm_slider_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Slider;
*/
#define ELM_SLIDER_CLASS elm_slider_class_get()
-EWAPI const Efl_Class *elm_slider_class_get(void);
+EWAPI const Efl_Class *elm_slider_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_slider_legacy.h b/src/lib/elementary/elm_slider_legacy.h
index aa32dec6b1..60d29de304 100644
--- a/src/lib/elementary/elm_slider_legacy.h
+++ b/src/lib/elementary/elm_slider_legacy.h
@@ -256,7 +256,7 @@ EAPI void elm_slider_range_get(const Evas_Object *obj, double *from, double *to)
* @ingroup Elm_Slider
*/
EAPI void elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator);
-
+
/**
* @brief Get the indicator label format of the slider.
*
diff --git a/src/lib/elementary/elm_slider_part_indicator_eo.h b/src/lib/elementary/elm_slider_part_indicator_eo.h
index 058a44a356..7fb6d4397c 100644
--- a/src/lib/elementary/elm_slider_part_indicator_eo.h
+++ b/src/lib/elementary/elm_slider_part_indicator_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Slider_Part_Indicator;
*/
#define ELM_SLIDER_PART_INDICATOR_CLASS elm_slider_part_indicator_class_get()
-EWAPI const Efl_Class *elm_slider_part_indicator_class_get(void);
+EWAPI const Efl_Class *elm_slider_part_indicator_class_get(void) EINA_CONST;
/**
* @brief Set/Get the visible mode of indicator.
diff --git a/src/lib/elementary/elm_slideshow.c b/src/lib/elementary/elm_slideshow.c
index 5ab5e662f6..7b2d7810de 100644
--- a/src/lib/elementary/elm_slideshow.c
+++ b/src/lib/elementary/elm_slideshow.c
@@ -63,7 +63,7 @@ _key_action_pause(Evas_Object *obj, const char *params EINA_UNUSED)
{
ELM_SLIDESHOW_DATA_GET(obj, sd);
- if (sd->timeout)
+ if (EINA_DBL_NONZERO(sd->timeout))
{
if (sd->timer)
ELM_SAFE_FREE(sd->timer, ecore_timer_del);
diff --git a/src/lib/elementary/elm_slideshow.h b/src/lib/elementary/elm_slideshow.h
index b13edf960e..70954dba98 100644
--- a/src/lib/elementary/elm_slideshow.h
+++ b/src/lib/elementary/elm_slideshow.h
@@ -48,11 +48,11 @@
* cached @b before and @b after the current item, in the widget's
* item list.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for slideshow objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "changed" - when the slideshow switches its view to a new
* item. event_info parameter in callback contains the current visible item
* - @c "transition,end" - when a slide transition ends. event_info parameter
diff --git a/src/lib/elementary/elm_slideshow_eo.h b/src/lib/elementary/elm_slideshow_eo.h
index 00dd7aeeb8..c0cc60d30e 100644
--- a/src/lib/elementary/elm_slideshow_eo.h
+++ b/src/lib/elementary/elm_slideshow_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Slideshow;
*/
#define ELM_SLIDESHOW_CLASS elm_slideshow_class_get()
-EWAPI const Efl_Class *elm_slideshow_class_get(void);
+EWAPI const Efl_Class *elm_slideshow_class_get(void) EINA_CONST;
/**
* @brief Set the number of items to cache, on a given slideshow widget, after
@@ -200,7 +200,7 @@ EOAPI double elm_obj_slideshow_timeout_get(const Eo *obj);
*
* @param[in] obj The object.
*
- * @return The list of items (#Elm.Widget.Item as data) or @c null on errors.
+ * @return The list of items (#Elm_Widget_Item as data) or @c null on errors.
*
* @ingroup Elm_Slideshow
*/
diff --git a/src/lib/elementary/elm_slideshow_eo.legacy.h b/src/lib/elementary/elm_slideshow_eo.legacy.h
index 3670d7c913..ee1d6f7597 100644
--- a/src/lib/elementary/elm_slideshow_eo.legacy.h
+++ b/src/lib/elementary/elm_slideshow_eo.legacy.h
@@ -192,7 +192,7 @@ EAPI double elm_slideshow_timeout_get(const Elm_Slideshow *obj);
*
* @param[in] obj The object.
*
- * @return The list of items (#Elm.Widget.Item as data) or @c null on errors.
+ * @return The list of items (#Elm_Widget_Item as data) or @c null on errors.
*
* @ingroup Elm_Slideshow_Group
*/
diff --git a/src/lib/elementary/elm_slideshow_item_eo.h b/src/lib/elementary/elm_slideshow_item_eo.h
index 065a7f6b83..131e572dc6 100644
--- a/src/lib/elementary/elm_slideshow_item_eo.h
+++ b/src/lib/elementary/elm_slideshow_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Slideshow_Item;
*/
#define ELM_SLIDESHOW_ITEM_CLASS elm_slideshow_item_class_get()
-EWAPI const Efl_Class *elm_slideshow_item_class_get(void);
+EWAPI const Efl_Class *elm_slideshow_item_class_get(void) EINA_CONST;
/**
* @brief Display a given slideshow widget's item, programmatically.
diff --git a/src/lib/elementary/elm_spinner.c b/src/lib/elementary/elm_spinner.c
index 355b9469fb..7441cbd338 100644
--- a/src/lib/elementary/elm_spinner.c
+++ b/src/lib/elementary/elm_spinner.c
@@ -134,7 +134,7 @@ _entry_show(Elm_Spinner_Data *sd)
EINA_LIST_FOREACH(sd->special_values, l, sv)
{
- if (sv->value == sd->val)
+ if (EINA_DBL_EQ(sv->value, sd->val))
{
snprintf(buf, sizeof(buf), "%s", sv->label);
goto apply;
@@ -196,7 +196,7 @@ _label_write(Evas_Object *obj)
EINA_LIST_FOREACH(sd->special_values, l, sv)
{
- if (sv->value == sd->val)
+ if (EINA_DBL_EQ(sv->value, sd->val))
{
snprintf(buf, sizeof(buf), "%s", sv->label);
goto apply;
@@ -245,7 +245,7 @@ _value_set(Evas_Object *obj,
if (sd->round > 0)
{
//Spin value changed by entry input.
- if (changed != 0)
+ if (EINA_DBL_NONZERO(changed))
new_val = sd->val_base +
(double)((((int)((val + changed) - sd->val_base)) / sd->round) * sd->round);
else
@@ -270,16 +270,17 @@ _value_set(Evas_Object *obj,
new_val = sd->val_max;
}
- if (new_val == sd->val) return EINA_FALSE;
+ if (EINA_DBL_EQ(new_val, sd->val)) return EINA_FALSE;
sd->val = new_val;
- if (sd->val == sd->val_min)
+ if (EINA_DBL_EQ(sd->val, sd->val_min))
efl_event_callback_legacy_call(obj, ELM_SPINNER_EVENT_MIN_REACHED, NULL);
- else if (sd->val == sd->val_max)
+ else if (EINA_DBL_EQ(sd->val, sd->val_max))
efl_event_callback_legacy_call(obj, ELM_SPINNER_EVENT_MAX_REACHED, NULL);
efl_event_callback_legacy_call(obj, ELM_SPINNER_EVENT_CHANGED, NULL);
efl_access_value_changed_signal_emit(obj);
+ efl_access_object_event_emit(obj, EFL_UI_RANGE_EVENT_CHANGED, NULL);
ecore_timer_del(sd->delay_change_timer);
sd->delay_change_timer = ecore_timer_add(ELM_SPINNER_DELAY_CHANGE_TIME,
_delay_change_timer_cb, obj);
@@ -333,7 +334,7 @@ _drag_cb(void *data,
else
efl_ui_drag_value_get(efl_part(wd->resize_obj, "elm.dragable.slider"), &pos, NULL);
- if (sd->drag_prev_pos != 0)
+ if (EINA_DBL_NONZERO(sd->drag_prev_pos))
sd->drag_val_step = pow((pos - sd->drag_prev_pos), 2);
else
sd->drag_val_step = 1;
@@ -687,7 +688,7 @@ _spin_value(void *data)
double real_speed = sd->spin_speed;
/* Sanity check: our step size should be at least as large as our rounding value */
- if ((sd->spin_speed != 0.0) && (fabs(sd->spin_speed) < sd->round))
+ if (EINA_DBL_NONZERO(sd->spin_speed) && (fabs(sd->spin_speed) < sd->round))
{
WRN("The spinning step is smaller than the rounding value, please check your code");
real_speed = sd->spin_speed > 0 ? sd->round : -sd->round;
@@ -799,11 +800,11 @@ _button_inc_dec_start_cb(void *data,
{
if (sd->inc_btn_activated)
{
- if (sd->val == sd->val_min) return;
+ if (EINA_DBL_EQ(sd->val, sd->val_min)) return;
}
else
{
- if (sd->val == sd->val_max) return;
+ if (EINA_DBL_EQ(sd->val, sd->val_max)) return;
}
}
}
@@ -1437,7 +1438,7 @@ _elm_spinner_label_format_get(const Eo *obj EINA_UNUSED, Elm_Spinner_Data *sd)
EOLIAN static void
_elm_spinner_efl_ui_range_display_range_limits_set(Eo *obj, Elm_Spinner_Data *sd, double min, double max)
{
- if ((sd->val_min == min) && (sd->val_max == max)) return;
+ if (EINA_DBL_EQ(sd->val_min, min) && EINA_DBL_EQ(sd->val_max, max)) return;
sd->val_min = min;
sd->val_max = max;
@@ -1471,7 +1472,7 @@ _elm_spinner_efl_ui_range_interactive_range_step_get(const Eo *obj EINA_UNUSED,
EOLIAN static void
_elm_spinner_efl_ui_range_display_range_value_set(Eo *obj, Elm_Spinner_Data *sd, double val)
{
- if (sd->val == val) return;
+ if (EINA_DBL_EQ(sd->val, val)) return;
sd->val = (sd->round <= 0) ? val : sd->val_base +
(double)((((int)(val - sd->val_base + (sd->round / 2))) / sd->round) * sd->round);
@@ -1519,7 +1520,7 @@ _elm_spinner_special_value_add(Eo *obj, Elm_Spinner_Data *sd, double value, cons
EINA_LIST_FOREACH(sd->special_values, l, sv)
{
- if (sv->value != value)
+ if (!EINA_DBL_EQ(sv->value, value))
continue;
eina_stringshare_replace(&sv->label, label);
@@ -1548,7 +1549,7 @@ elm_spinner_special_value_del(Evas_Object *obj,
EINA_LIST_FOREACH(sd->special_values, l, sv)
{
- if (sv->value != value)
+ if (!EINA_DBL_EQ(sv->value, value))
continue;
sd->special_values = eina_list_remove_list(sd->special_values, l);
@@ -1571,7 +1572,7 @@ elm_spinner_special_value_get(Evas_Object *obj,
EINA_LIST_FOREACH(sd->special_values, l, sv)
{
- if (sv->value == value)
+ if (EINA_DBL_EQ(sv->value, value))
return sv->label;
}
diff --git a/src/lib/elementary/elm_spinner.h b/src/lib/elementary/elm_spinner.h
index bbfe2f2fa4..689183fbc1 100644
--- a/src/lib/elementary/elm_spinner.h
+++ b/src/lib/elementary/elm_spinner.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Spinner Spinner
+ * @defgroup Elm_Spinner_Group Spinner
* @ingroup Elementary
*
* @image html spinner_inheritance_tree.png
@@ -21,11 +21,11 @@
*
* It also allows specific values to be replaced by pre-defined labels.
*
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
* functions acting on it also work for spinner objects.
*
* This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
* - @c "changed" - Whenever the spinner value is changed.
* - @c "delay,changed" - A short time after the value is changed by
* the user. This will be called only when the user stops dragging
@@ -53,7 +53,7 @@
*/
/**
- * @addtogroup Elm_Spinner
+ * @addtogroup Elm_Spinner_Group
* @{
*/
diff --git a/src/lib/elementary/elm_spinner_eo.h b/src/lib/elementary/elm_spinner_eo.h
index ff9205c262..2c0be0fe88 100644
--- a/src/lib/elementary/elm_spinner_eo.h
+++ b/src/lib/elementary/elm_spinner_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Spinner;
*/
#define ELM_SPINNER_CLASS elm_spinner_class_get()
-EWAPI const Efl_Class *elm_spinner_class_get(void);
+EWAPI const Efl_Class *elm_spinner_class_get(void) EINA_CONST;
/**
* @brief Control whether the spinner should wrap when it reaches its minimum
@@ -79,7 +79,7 @@ EOAPI void elm_obj_spinner_wrap_set(Eo *obj, Eina_Bool wrap);
EOAPI Eina_Bool elm_obj_spinner_wrap_get(const Eo *obj);
/**
- * @brief Control the interval on time updates for an user mouse button hold on
+ * @brief Control the interval on time updates for a user mouse button hold on
* spinner widgets' arrows.
*
* This interval value is decreased while the user holds the mouse pointer
@@ -103,7 +103,7 @@ EOAPI Eina_Bool elm_obj_spinner_wrap_get(const Eo *obj);
EOAPI void elm_obj_spinner_interval_set(Eo *obj, double interval);
/**
- * @brief Control the interval on time updates for an user mouse button hold on
+ * @brief Control the interval on time updates for a user mouse button hold on
* spinner widgets' arrows.
*
* This interval value is decreased while the user holds the mouse pointer
diff --git a/src/lib/elementary/elm_spinner_eo.legacy.h b/src/lib/elementary/elm_spinner_eo.legacy.h
index 798ec39d37..38ae87a832 100644
--- a/src/lib/elementary/elm_spinner_eo.legacy.h
+++ b/src/lib/elementary/elm_spinner_eo.legacy.h
@@ -72,7 +72,7 @@ EAPI void elm_spinner_wrap_set(Elm_Spinner *obj, Eina_Bool wrap);
EAPI Eina_Bool elm_spinner_wrap_get(const Elm_Spinner *obj);
/**
- * @brief Control the interval on time updates for an user mouse button hold on
+ * @brief Control the interval on time updates for a user mouse button hold on
* spinner widgets' arrows.
*
* This interval value is decreased while the user holds the mouse pointer
@@ -96,7 +96,7 @@ EAPI Eina_Bool elm_spinner_wrap_get(const Elm_Spinner *obj);
EAPI void elm_spinner_interval_set(Elm_Spinner *obj, double interval);
/**
- * @brief Control the interval on time updates for an user mouse button hold on
+ * @brief Control the interval on time updates for a user mouse button hold on
* spinner widgets' arrows.
*
* This interval value is decreased while the user holds the mouse pointer
diff --git a/src/lib/elementary/elm_spinner_legacy.h b/src/lib/elementary/elm_spinner_legacy.h
index 1b4e241c0c..0774983451 100644
--- a/src/lib/elementary/elm_spinner_legacy.h
+++ b/src/lib/elementary/elm_spinner_legacy.h
@@ -7,7 +7,7 @@
*
* This function inserts a new spinner widget on the canvas.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
*
*/
EAPI Evas_Object *elm_spinner_add(Evas_Object *parent);
@@ -23,7 +23,7 @@ EAPI Evas_Object *elm_spinner_add(Evas_Object *parent);
*
* @see elm_spinner_special_value_add() for more details.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
* @since 1.8
*/
EAPI void elm_spinner_special_value_del(Evas_Object *obj, double value);
@@ -37,7 +37,7 @@ EAPI void elm_spinner_special_value_del(Evas_Object *obj, double value);
*
* @see elm_spinner_special_value_add() for more details.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
* @since 1.8
*/
EAPI const char *elm_spinner_special_value_get(Evas_Object *obj, double value);
@@ -58,7 +58,7 @@ EAPI const char *elm_spinner_special_value_get(Evas_Object *obj, double value);
* @param[in] min The minimum value.
* @param[in] max The maximum value.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
*/
EAPI void elm_spinner_min_max_set(Evas_Object *obj, double min, double max);
@@ -78,7 +78,7 @@ EAPI void elm_spinner_min_max_set(Evas_Object *obj, double min, double max);
* @param[out] min The minimum value.
* @param[out] max The maximum value.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
*/
EAPI void elm_spinner_min_max_get(const Evas_Object *obj, double *min, double *max);
@@ -96,7 +96,7 @@ EAPI void elm_spinner_min_max_get(const Evas_Object *obj, double *min, double *m
*
* @param[in] step The step value.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
*/
EAPI void elm_spinner_step_set(Evas_Object *obj, double step);
@@ -114,7 +114,7 @@ EAPI void elm_spinner_step_set(Evas_Object *obj, double step);
*
* @return The step value.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
*/
EAPI double elm_spinner_step_get(const Evas_Object *obj);
@@ -129,7 +129,7 @@ EAPI double elm_spinner_step_get(const Evas_Object *obj);
*
* @param[in] val The value to be displayed.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
*/
EAPI void elm_spinner_value_set(Evas_Object *obj, double val);
@@ -144,7 +144,7 @@ EAPI void elm_spinner_value_set(Evas_Object *obj, double val);
*
* @return The value to be displayed.
*
- * @ingroup Elm_Spinner
+ * @ingroup Elm_Spinner_Group
*/
EAPI double elm_spinner_value_get(const Evas_Object *obj);
diff --git a/src/lib/elementary/elm_sys_notify_dbus_eo.h b/src/lib/elementary/elm_sys_notify_dbus_eo.h
index c5976e4450..82b8adfe5b 100644
--- a/src/lib/elementary/elm_sys_notify_dbus_eo.h
+++ b/src/lib/elementary/elm_sys_notify_dbus_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Sys_Notify_Dbus;
*/
#define ELM_SYS_NOTIFY_DBUS_CLASS elm_sys_notify_dbus_class_get()
-EWAPI const Efl_Class *elm_sys_notify_dbus_class_get(void);
+EWAPI const Efl_Class *elm_sys_notify_dbus_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_sys_notify_eo.c b/src/lib/elementary/elm_sys_notify_eo.c
index 7b57eca751..aede576b2f 100644
--- a/src/lib/elementary/elm_sys_notify_eo.c
+++ b/src/lib/elementary/elm_sys_notify_eo.c
@@ -11,12 +11,14 @@ Elm_Sys_Notify *_elm_sys_notify_singleton_get(void);
EOAPI Elm_Sys_Notify * elm_obj_sys_notify_singleton_get(void)
{
- elm_sys_notify_class_get();
+ const Efl_Class *klass = elm_sys_notify_class_get();
+ EINA_SAFETY_ON_NULL_RETURN_VAL(klass, NULL);
return _elm_sys_notify_singleton_get();
}
EOAPI Elm_Sys_Notify * elm_sys_notify_singleton_get(void)
{
- elm_sys_notify_class_get();
+ const Efl_Class *klass = elm_sys_notify_class_get();
+ EINA_SAFETY_ON_NULL_RETURN_VAL(klass, NULL);
return _elm_sys_notify_singleton_get();
}
diff --git a/src/lib/elementary/elm_sys_notify_eo.h b/src/lib/elementary/elm_sys_notify_eo.h
index 0f1f194f07..4094fc6f9c 100644
--- a/src/lib/elementary/elm_sys_notify_eo.h
+++ b/src/lib/elementary/elm_sys_notify_eo.h
@@ -73,7 +73,7 @@ typedef struct _Elm_Sys_Notify_Action_Invoked
*/
#define ELM_SYS_NOTIFY_CLASS elm_sys_notify_class_get()
-EWAPI const Efl_Class *elm_sys_notify_class_get(void);
+EWAPI const Efl_Class *elm_sys_notify_class_get(void) EINA_CONST;
/**
* @brief Set the notifications server to be used.
diff --git a/src/lib/elementary/elm_sys_notify_interface_eo.h b/src/lib/elementary/elm_sys_notify_interface_eo.h
index 0c91b0135d..f850399def 100644
--- a/src/lib/elementary/elm_sys_notify_interface_eo.h
+++ b/src/lib/elementary/elm_sys_notify_interface_eo.h
@@ -32,7 +32,7 @@ typedef enum
*/
#define ELM_SYS_NOTIFY_INTERFACE_INTERFACE elm_sys_notify_interface_interface_get()
-EWAPI const Efl_Class *elm_sys_notify_interface_interface_get(void);
+EWAPI const Efl_Class *elm_sys_notify_interface_interface_get(void) EINA_CONST;
/**
* @brief Causes a notification to be forcefully closed and removed from the
diff --git a/src/lib/elementary/elm_systray_eo.h b/src/lib/elementary/elm_systray_eo.h
index d50dc412b8..46486c02a9 100644
--- a/src/lib/elementary/elm_systray_eo.h
+++ b/src/lib/elementary/elm_systray_eo.h
@@ -47,7 +47,7 @@ typedef enum
*/
#define ELM_SYSTRAY_CLASS elm_systray_class_get()
-EWAPI const Efl_Class *elm_systray_class_get(void);
+EWAPI const Efl_Class *elm_systray_class_get(void) EINA_CONST;
/**
* @brief Set the id of the Status Notifier Item.
diff --git a/src/lib/elementary/elm_table.c b/src/lib/elementary/elm_table.c
index 39c1031536..c34a0b3095 100644
--- a/src/lib/elementary/elm_table.c
+++ b/src/lib/elementary/elm_table.c
@@ -109,9 +109,6 @@ _elm_table_efl_canvas_group_group_add(Eo *obj, void *_pd EINA_UNUSED)
EOLIAN static void
_elm_table_efl_canvas_group_group_del(Eo *obj, void *_pd EINA_UNUSED)
{
- Eina_List *l;
- Evas_Object *child;
-
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
evas_object_event_callback_del_full
@@ -120,15 +117,15 @@ _elm_table_efl_canvas_group_group_del(Eo *obj, void *_pd EINA_UNUSED)
/* let's make our table object the *last* to be processed, since it
* may (smart) parent other sub objects here */
- EINA_LIST_FOREACH(wd->subobjs, l, child)
- {
- if (child == wd->resize_obj)
- {
- wd->subobjs =
- eina_list_demote_list(wd->subobjs, l);
- break;
- }
- }
+ {
+ unsigned int resize_id = 0;
+ if (eina_array_find(wd->children, wd->resize_obj, &resize_id))
+ {
+ //exchange with last
+ eina_array_data_set(wd->children, resize_id, eina_array_data_get(wd->children, eina_array_count(wd->children) - 1));
+ eina_array_data_set(wd->children, eina_array_count(wd->children) - 1, wd->resize_obj);
+ }
+ }
efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
diff --git a/src/lib/elementary/elm_table.h b/src/lib/elementary/elm_table.h
index ec9266e786..7cabd06bcd 100644
--- a/src/lib/elementary/elm_table.h
+++ b/src/lib/elementary/elm_table.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Table Table
+ * @defgroup Elm_Table_Group Table
* @ingroup Elementary
*
* @image html table_inheritance_tree.png
diff --git a/src/lib/elementary/elm_table_eo.h b/src/lib/elementary/elm_table_eo.h
index b203ddce63..6075383f19 100644
--- a/src/lib/elementary/elm_table_eo.h
+++ b/src/lib/elementary/elm_table_eo.h
@@ -19,10 +19,10 @@ typedef Eo Elm_Table;
*/
#define ELM_TABLE_CLASS elm_table_class_get()
-EWAPI const Efl_Class *elm_table_class_get(void);
+EWAPI const Efl_Class *elm_table_class_get(void) EINA_CONST;
/**
- * @brief Control the homogenous state in a table.
+ * @brief Control the homogeneous state in a table.
*
* @param[in] obj The object.
* @param[in] homogeneous A boolean to set if the layout is homogeneous in the
@@ -33,7 +33,7 @@ EWAPI const Efl_Class *elm_table_class_get(void);
EOAPI void elm_obj_table_homogeneous_set(Eo *obj, Eina_Bool homogeneous);
/**
- * @brief Control the homogenous state in a table.
+ * @brief Control the homogeneous state in a table.
*
* @param[in] obj The object.
*
diff --git a/src/lib/elementary/elm_table_eo.legacy.h b/src/lib/elementary/elm_table_eo.legacy.h
index 507465310e..0c7ab3fcd8 100644
--- a/src/lib/elementary/elm_table_eo.legacy.h
+++ b/src/lib/elementary/elm_table_eo.legacy.h
@@ -15,7 +15,7 @@ typedef Eo Elm_Table;
#endif
/**
- * @brief Control the homogenous state in a table.
+ * @brief Control the homogeneous state in a table.
*
* @param[in] obj The object.
* @param[in] homogeneous A boolean to set if the layout is homogeneous in the
@@ -26,7 +26,7 @@ typedef Eo Elm_Table;
EAPI void elm_table_homogeneous_set(Elm_Table *obj, Eina_Bool homogeneous);
/**
- * @brief Control the homogenous state in a table.
+ * @brief Control the homogeneous state in a table.
*
* @param[in] obj The object.
*
diff --git a/src/lib/elementary/elm_table_legacy.h b/src/lib/elementary/elm_table_legacy.h
index 314cf0ef39..b9b955a499 100644
--- a/src/lib/elementary/elm_table_legacy.h
+++ b/src/lib/elementary/elm_table_legacy.h
@@ -4,7 +4,7 @@
* @param parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Table
+ * @ingroup Elm_Table_Group
*/
EAPI Evas_Object *elm_table_add(Evas_Object *parent);
@@ -23,7 +23,7 @@ EAPI Evas_Object *elm_table_add(Evas_Object *parent);
* a value of 0 for col and row, means the top left cell of the table, and a
* value of 1 for colspan and rowspan means @p subobj only takes that 1 cell.
*
- * @ingroup Elm_Table
+ * @ingroup Elm_Table_Group
*/
EAPI void elm_table_pack_set(Evas_Object *subobj, int col, int row, int colspan, int rowspan);
@@ -38,8 +38,8 @@ EAPI void elm_table_pack_set(Evas_Object *subobj, int col, int row, int col
*
* @see elm_table_pack_set()
*
- * @ingroup Elm_Table
+ * @ingroup Elm_Table_Group
*/
EAPI void elm_table_pack_get(Evas_Object *subobj, int *col, int *row, int *colspan, int *rowspan);
-#include "elm_table_eo.legacy.h" \ No newline at end of file
+#include "elm_table_eo.legacy.h"
diff --git a/src/lib/elementary/elm_textpath_legacy.h b/src/lib/elementary/elm_textpath_legacy.h
index 1795bdfa60..633dca328b 100644
--- a/src/lib/elementary/elm_textpath_legacy.h
+++ b/src/lib/elementary/elm_textpath_legacy.h
@@ -6,10 +6,25 @@ typedef Eo Elm_Textpath;
* @param[in] parent The parent object
* @return The new object or NULL if it cannot be created
*
- * @ingroup Elm_Textpath
+ * @ingroup Elm_Textpath_Group
*
* @since 1.22
*/
EAPI Evas_Object *elm_textpath_add(Evas_Object *parent);
+/**
+ * @brief Set the user text style
+ *
+ * @param[in] obj The textpath object
+ * @param[in] style The user text style. If the sytle is $null, the default style will be applied
+ *
+ * @note ellipsis in the style will be ignored since textpath supports ellipsis API.
+ * @see elm_textpath_ellipsis_set()
+ *
+ * @ingroup Elm_Textpath_Group
+ *
+ * @since 1.25
+ */
+EAPI void elm_textpath_text_user_style_set(Evas_Object *obj, const char *style);
+
#include "efl_ui_textpath_eo.legacy.h"
diff --git a/src/lib/elementary/elm_theme.c b/src/lib/elementary/elm_theme.c
index 13f41e1abc..8625cb6147 100644
--- a/src/lib/elementary/elm_theme.c
+++ b/src/lib/elementary/elm_theme.c
@@ -911,7 +911,7 @@ elm_theme_name_available_list_new(void)
snprintf(buf, sizeof(buf), "%s/"ELEMENTARY_BASE_DIR"/themes/%s", home, file);
if ((!ecore_file_is_dir(buf)) && (ecore_file_size(buf) > 0))
{
- if (eina_str_has_extension(file, "edj"))
+ if (eina_str_has_extension(file, ".edj"))
{
th = strdup(file);
s = strrchr(th, '.');
@@ -929,7 +929,7 @@ elm_theme_name_available_list_new(void)
snprintf(buf, sizeof(buf), "%s/themes/%s", _elm_data_dir, file);
if ((!ecore_file_is_dir(buf)) && (ecore_file_size(buf) > 0))
{
- if (eina_str_has_extension(file, "edj"))
+ if (eina_str_has_extension(file, ".edj"))
{
int dupp;
diff --git a/src/lib/elementary/elm_thumb.c b/src/lib/elementary/elm_thumb.c
index 555ff01635..f883e183ed 100644
--- a/src/lib/elementary/elm_thumb.c
+++ b/src/lib/elementary/elm_thumb.c
@@ -670,9 +670,16 @@ _elm_thumb_efl_file_load(Eo *obj, Elm_Thumb_Data *sd)
int prefix_size;
const char **ext, *ptr;
static const char *extensions[] =
- {
- ".avi", ".mp4", ".ogv", ".mov", ".mpg", ".wmv", NULL
- };
+ {
+ ".asf", ".avi", ".bdm", ".bdmv", ".clpi", ".cpi", ".dv", ".fla",
+ ".flv", ".m1v", ".m2t", ".m2v", ".m4v", ".mkv", ".mov", ".mp2",
+ ".mp2ts", ".mp4", ".mpe", ".mpeg", ".mpg", ".mpl", ".mpls", ".mts",
+ ".mxf", ".nut", ".nuv", ".ogg", ".ogm", ".ogv", ".qt", ".rm", ".rmj",
+ ".rmm", ".rms", ".rmvb", ".rmx", ".rv", ".swf", ".ts", ".weba",
+ ".webm", ".wmv", ".3g2", ".3gp", ".3gp2", ".3gpp", ".3gpp2", ".3p2",
+ ".264",
+ NULL
+ };
if (efl_file_loaded_get(obj)) return 0;
prefix_size = eina_stringshare_strlen(sd->file) - 4;
diff --git a/src/lib/elementary/elm_thumb_eo.h b/src/lib/elementary/elm_thumb_eo.h
index 09eed0a0ba..01c20b037a 100644
--- a/src/lib/elementary/elm_thumb_eo.h
+++ b/src/lib/elementary/elm_thumb_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Thumb;
*/
#define ELM_THUMB_CLASS elm_thumb_class_get()
-EWAPI const Efl_Class *elm_thumb_class_get(void);
+EWAPI const Efl_Class *elm_thumb_class_get(void) EINA_CONST;
EWAPI extern const Efl_Event_Description _ELM_THUMB_EVENT_GENERATE_ERROR;
diff --git a/src/lib/elementary/elm_thumb_legacy.h b/src/lib/elementary/elm_thumb_legacy.h
index 48fcc1a262..4a8965732e 100644
--- a/src/lib/elementary/elm_thumb_legacy.h
+++ b/src/lib/elementary/elm_thumb_legacy.h
@@ -28,9 +28,9 @@ EAPI Evas_Object *elm_thumb_add(Evas_Object *parent);
*
* Set the file that will be used as thumbnail @b source.
*
- * The file can be an image or a video (in that case, acceptable
- * extensions are: avi, mp4, ogv, mov, mpg and wmv). To start the
- * video animation, use the function elm_thumb_animate().
+ * The file can be an image or a video (in that case extension will e used
+ * to guess if it is a video or not). To start the video animation, use the
+ * function elm_thumb_animate().
*
* @see elm_thumb_file_get()
* @see elm_thumb_reload()
diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c
index d6763cebb6..d2f363035a 100644
--- a/src/lib/elementary/elm_toolbar.c
+++ b/src/lib/elementary/elm_toolbar.c
@@ -127,7 +127,7 @@ _items_visibility_fix(Elm_Toolbar *obj,
evas_object_geometry_get(VIEW(it), NULL, NULL, &ciw, &cih);
if (!efl_ui_layout_orientation_is_horizontal(sd->dir, EINA_TRUE)) *iw += cih;
else *iw += ciw;
- //expand is the case where the bx_more stuff is used and the prio.visible is completly ignored.
+ //expand is the case where the bx_more stuff is used and the prio.visible is completely ignored.
//if this is the case - then every item in there is just visible in the box - nothing (beside the items in the other box is hidden)
if (!usage_bx_more)
{
@@ -2436,23 +2436,19 @@ _item_new(Evas_Object *obj,
evas_object_data_set(VIEW(it), "item", it);
efl_access_object_access_type_set(VIEW(it), EFL_ACCESS_TYPE_DISABLED);
- icon_obj = elm_icon_add(VIEW(it));
- efl_parent_set(icon_obj, eo_it);
-
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
_access_widget_item_register(it);
- if (_item_icon_set(icon_obj, "toolbar/", icon))
+ if (icon)
{
+ icon_obj = elm_icon_add(VIEW(it));
+ efl_parent_set(icon_obj, eo_it);
+ evas_object_size_hint_min_set(icon_obj, sd->icon_size, sd->icon_size);
+ evas_object_size_hint_max_set(icon_obj, sd->icon_size, sd->icon_size);
+ _item_icon_set(icon_obj, "toolbar/", icon);
it->icon = icon_obj;
it->icon_str = eina_stringshare_add(icon);
}
- else
- {
- it->icon = NULL;
- it->icon_str = NULL;
- evas_object_del(icon_obj);
- }
if (!elm_layout_theme_set
(VIEW(it), "toolbar", "item", elm_widget_style_get(obj)))
@@ -2473,8 +2469,6 @@ _item_new(Evas_Object *obj,
if (it->icon)
{
- evas_object_size_hint_min_set(it->icon, sd->icon_size, sd->icon_size);
- evas_object_size_hint_max_set(it->icon, sd->icon_size, sd->icon_size);
elm_layout_content_set(VIEW(it), "elm.swallow.icon", it->icon);
elm_layout_signal_emit(VIEW(it), "elm,state,icon,visible", "elm");
elm_layout_signal_emit(VIEW(it), "elm,icon,visible", "elm");
@@ -3400,7 +3394,7 @@ _elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_M
elm_toolbar_homogeneous_set(obj, EINA_FALSE);
elm_interface_scrollable_policy_set
(obj, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
- sd->more_item = _item_new(obj, "go-down", "More", NULL, NULL);
+ sd->more_item = _item_new(obj, "toolbar/more_menu", "More", NULL, NULL);
_resizing_eval_item(sd->more_item);
}
else if (shrink_mode == ELM_TOOLBAR_SHRINK_HIDE)
@@ -3414,7 +3408,7 @@ _elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_M
elm_toolbar_homogeneous_set(obj, EINA_FALSE);
elm_interface_scrollable_policy_set
(obj, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
- sd->more_item = _item_new(obj, "go-down", "More", NULL, NULL);
+ sd->more_item = _item_new(obj, "toolbar/more_menu", "More", NULL, NULL);
_resizing_eval_item(sd->more_item);
}
else if (shrink_mode == ELM_TOOLBAR_SHRINK_SCROLL)
@@ -3504,12 +3498,12 @@ _elm_toolbar_align_set(Eo *obj EINA_UNUSED, Elm_Toolbar_Data *sd, double align)
{
if (!efl_ui_layout_orientation_is_horizontal(sd->dir, EINA_TRUE))
{
- if (sd->align != align)
+ if (!EINA_DBL_EQ(sd->align, align))
evas_object_box_align_set(sd->bx, 0.5, align);
}
else
{
- if (sd->align != align)
+ if (!EINA_DBL_EQ(sd->align, align))
evas_object_box_align_set(sd->bx, align, 0.5);
}
sd->align = align;
diff --git a/src/lib/elementary/elm_toolbar.h b/src/lib/elementary/elm_toolbar.h
index 5dcfaa838f..fc88da16ad 100644
--- a/src/lib/elementary/elm_toolbar.h
+++ b/src/lib/elementary/elm_toolbar.h
@@ -19,7 +19,7 @@
*
* Items can have multiple states, or show menus when selected by the user.
*
- * This widget implements the @b @ref elm-scrollable-interface
+ * This widget implements the @ref elm-scrollable-interface
* interface, so that all (non-deprecated) functions for the base
* @ref Scroller widget also work for toolbars (since 1.8)
*
diff --git a/src/lib/elementary/elm_toolbar_eo.h b/src/lib/elementary/elm_toolbar_eo.h
index ae7d8ae467..8d6fcaa0b6 100644
--- a/src/lib/elementary/elm_toolbar_eo.h
+++ b/src/lib/elementary/elm_toolbar_eo.h
@@ -47,7 +47,7 @@ typedef enum
*/
#define ELM_TOOLBAR_CLASS elm_toolbar_class_get()
-EWAPI const Efl_Class *elm_toolbar_class_get(void);
+EWAPI const Efl_Class *elm_toolbar_class_get(void) EINA_CONST;
/**
* @brief Get the selected item in the widget.
diff --git a/src/lib/elementary/elm_toolbar_eo.legacy.h b/src/lib/elementary/elm_toolbar_eo.legacy.h
index d16a3b2ba5..004ac0e744 100644
--- a/src/lib/elementary/elm_toolbar_eo.legacy.h
+++ b/src/lib/elementary/elm_toolbar_eo.legacy.h
@@ -21,7 +21,7 @@ typedef Eo Elm_Toolbar;
*
* See also @ref elm_toolbar_shrink_mode_set, @ref elm_toolbar_shrink_mode_get.
*
- * @ingroup Elm
+ * @ingroup Elm_Toolbar
*/
typedef enum
{
@@ -48,7 +48,7 @@ typedef enum
*
* @return The selected item or @c null.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_selected_item_get(const Elm_Toolbar *obj);
@@ -59,7 +59,7 @@ EAPI Elm_Widget_Item *elm_toolbar_selected_item_get(const Elm_Toolbar *obj);
*
* @return The first item or @c null.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_first_item_get(const Elm_Toolbar *obj);
@@ -70,7 +70,7 @@ EAPI Elm_Widget_Item *elm_toolbar_first_item_get(const Elm_Toolbar *obj);
*
* @return The last item or @c null.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_last_item_get(const Elm_Toolbar *obj);
@@ -81,7 +81,7 @@ EAPI Elm_Widget_Item *elm_toolbar_last_item_get(const Elm_Toolbar *obj);
*
* @return iterator to widget items
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Eina_Iterator *elm_toolbar_items_get(const Elm_Toolbar *obj) EINA_WARN_UNUSED_RESULT;
@@ -94,7 +94,7 @@ EAPI Eina_Iterator *elm_toolbar_items_get(const Elm_Toolbar *obj) EINA_WARN_UNUS
* @param[in] homogeneous Assume the items within the toolbar are of the same
* size (true = on, false = off). Default is @c false.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI void elm_toolbar_homogeneous_set(Elm_Toolbar *obj, Eina_Bool homogeneous);
@@ -108,7 +108,7 @@ EAPI void elm_toolbar_homogeneous_set(Elm_Toolbar *obj, Eina_Bool homogeneous);
* @return Assume the items within the toolbar are of the same size (true = on,
* false = off). Default is @c false.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Eina_Bool elm_toolbar_homogeneous_get(const Elm_Toolbar *obj);
@@ -123,7 +123,7 @@ EAPI Eina_Bool elm_toolbar_homogeneous_get(const Elm_Toolbar *obj);
* @param[in] obj The object.
* @param[in] align The new alignment, a float between 0.0 and 1.0.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI void elm_toolbar_align_set(Elm_Toolbar *obj, double align);
@@ -139,7 +139,7 @@ EAPI void elm_toolbar_align_set(Elm_Toolbar *obj, double align);
*
* @return The new alignment, a float between 0.0 and 1.0.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI double elm_toolbar_align_get(const Elm_Toolbar *obj);
@@ -160,7 +160,7 @@ EAPI double elm_toolbar_align_get(const Elm_Toolbar *obj);
* @param[in] mode The select mode If getting mode fails, it returns
* #ELM_OBJECT_SELECT_MODE_MAX
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI void elm_toolbar_select_mode_set(Elm_Toolbar *obj, Elm_Object_Select_Mode mode);
@@ -182,7 +182,7 @@ EAPI void elm_toolbar_select_mode_set(Elm_Toolbar *obj, Elm_Object_Select_Mode m
* @return The select mode If getting mode fails, it returns
* #ELM_OBJECT_SELECT_MODE_MAX
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Object_Select_Mode elm_toolbar_select_mode_get(const Elm_Toolbar *obj);
@@ -194,7 +194,7 @@ EAPI Elm_Object_Select_Mode elm_toolbar_select_mode_get(const Elm_Toolbar *obj);
* @param[in] obj The object.
* @param[in] icon_size The icon size in pixels
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI void elm_toolbar_icon_size_set(Elm_Toolbar *obj, int icon_size);
@@ -207,7 +207,7 @@ EAPI void elm_toolbar_icon_size_set(Elm_Toolbar *obj, int icon_size);
*
* @return The icon size in pixels
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI int elm_toolbar_icon_size_get(const Elm_Toolbar *obj);
@@ -232,7 +232,7 @@ EAPI int elm_toolbar_icon_size_get(const Elm_Toolbar *obj);
* @param[in] obj The object.
* @param[in] shrink_mode Toolbar's items display behavior
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI void elm_toolbar_shrink_mode_set(Elm_Toolbar *obj, Elm_Toolbar_Shrink_Mode shrink_mode);
@@ -258,7 +258,7 @@ EAPI void elm_toolbar_shrink_mode_set(Elm_Toolbar *obj, Elm_Toolbar_Shrink_Mode
*
* @return Toolbar's items display behavior
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Toolbar_Shrink_Mode elm_toolbar_shrink_mode_get(const Elm_Toolbar *obj);
@@ -276,7 +276,7 @@ EAPI Elm_Toolbar_Shrink_Mode elm_toolbar_shrink_mode_get(const Elm_Toolbar *obj)
* @param[in] obj The object.
* @param[in] parent The parent of the menu objects.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI void elm_toolbar_menu_parent_set(Elm_Toolbar *obj, Efl_Canvas_Object *parent);
@@ -295,7 +295,7 @@ EAPI void elm_toolbar_menu_parent_set(Elm_Toolbar *obj, Efl_Canvas_Object *paren
*
* @return The parent of the menu objects.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Efl_Canvas_Object *elm_toolbar_menu_parent_get(const Elm_Toolbar *obj);
@@ -311,7 +311,7 @@ EAPI Efl_Canvas_Object *elm_toolbar_menu_parent_get(const Elm_Toolbar *obj);
*
* @since 1.7
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI void elm_toolbar_standard_priority_set(Elm_Toolbar *obj, int priority);
@@ -328,7 +328,7 @@ EAPI void elm_toolbar_standard_priority_set(Elm_Toolbar *obj, int priority);
*
* @since 1.7
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI int elm_toolbar_standard_priority_get(const Elm_Toolbar *obj);
@@ -344,7 +344,7 @@ EAPI int elm_toolbar_standard_priority_get(const Elm_Toolbar *obj);
*
* @return The toolbar more item.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_more_item_get(const Elm_Toolbar *obj);
@@ -382,7 +382,7 @@ EAPI Elm_Widget_Item *elm_toolbar_more_item_get(const Elm_Toolbar *obj);
*
* @return The created item or @c NULL upon failure.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_item_insert_before(Elm_Toolbar *obj, Elm_Widget_Item *before, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
@@ -420,7 +420,7 @@ EAPI Elm_Widget_Item *elm_toolbar_item_insert_before(Elm_Toolbar *obj, Elm_Widge
*
* @return The created item or @c NULL upon failure.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_item_insert_after(Elm_Toolbar *obj, Elm_Widget_Item *after, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
@@ -457,7 +457,7 @@ EAPI Elm_Widget_Item *elm_toolbar_item_insert_after(Elm_Toolbar *obj, Elm_Widget
*
* @return The created item or @c NULL upon failure.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_item_append(Elm_Toolbar *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
@@ -468,7 +468,7 @@ EAPI Elm_Widget_Item *elm_toolbar_item_append(Elm_Toolbar *obj, const char *icon
*
* @return The number of items in @c obj toolbar
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI unsigned int elm_toolbar_items_count(const Elm_Toolbar *obj);
@@ -505,7 +505,7 @@ EAPI unsigned int elm_toolbar_items_count(const Elm_Toolbar *obj);
*
* @return The created item or @c NULL upon failure.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_item_prepend(Elm_Toolbar *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data);
@@ -518,7 +518,7 @@ EAPI Elm_Widget_Item *elm_toolbar_item_prepend(Elm_Toolbar *obj, const char *ico
* @return The pointer to the toolbar item matching @c label or @c NULL on
* failure.
*
- * @ingroup Elm_Toolbar_Group
+ * @ingroup Elm_Toolbar
*/
EAPI Elm_Widget_Item *elm_toolbar_item_find_by_label(const Elm_Toolbar *obj, const char *label);
diff --git a/src/lib/elementary/elm_toolbar_item_eo.h b/src/lib/elementary/elm_toolbar_item_eo.h
index 44bb2d9810..c78b62e623 100644
--- a/src/lib/elementary/elm_toolbar_item_eo.h
+++ b/src/lib/elementary/elm_toolbar_item_eo.h
@@ -49,7 +49,7 @@ typedef struct _Elm_Toolbar_Item_State
*/
#define ELM_TOOLBAR_ITEM_CLASS elm_toolbar_item_class_get()
-EWAPI const Efl_Class *elm_toolbar_item_class_get(void);
+EWAPI const Efl_Class *elm_toolbar_item_class_get(void) EINA_CONST;
/**
* @brief Get the item before this one in the widget's list of items.
diff --git a/src/lib/elementary/elm_transit.c b/src/lib/elementary/elm_transit.c
index 39dc755604..a0813791f4 100644
--- a/src/lib/elementary/elm_transit.c
+++ b/src/lib/elementary/elm_transit.c
@@ -95,6 +95,7 @@ struct _Elm_Transit_Obj_Data
Eina_Bool map_enabled : 1;
Eina_Bool visible : 1;
Eina_Bool freeze_events : 1;
+ Eina_Bool anti_alias : 1;
} state;
int ref;
};
@@ -104,7 +105,7 @@ typedef struct _Elm_Transit_Obj_Data Elm_Transit_Obj_Data;
static void _transit_obj_data_save(Evas_Object *obj);
static void _transit_obj_data_recover(Elm_Transit *transit, Evas_Object *obj);
-static void _transit_obj_remove_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED);
+static void _transit_obj_remove_cb(void *data, const Efl_Event *ev);
static void _transit_obj_remove(Elm_Transit *transit, Evas_Object *obj);
static void _transit_effect_del(Elm_Transit *transit, Elm_Transit_Effect_Module *effect_module);
static void _transit_remove_dead_effects(Elm_Transit *transit);
@@ -140,6 +141,7 @@ _transit_obj_data_save(Evas_Object *obj)
obj_data->state.visible = evas_object_visible_get(obj);
obj_data->state.freeze_events = evas_object_freeze_events_get(obj);
obj_data->state.map_enabled = evas_object_map_enable_get(obj);
+ obj_data->state.anti_alias = evas_object_anti_alias_get(obj);
ELM_SAFE_FREE(obj_data->state.map, evas_map_free);
@@ -161,15 +163,16 @@ _remove_obj_from_list(Elm_Transit *transit, Evas_Object *obj)
if (!eina_list_data_find_list(transit->objs, obj))
break;
transit->objs = eina_list_remove(transit->objs, obj);
- evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
- _transit_obj_remove_cb,
- transit);
+ efl_event_callback_del(obj, EFL_EVENT_DEL,
+ _transit_obj_remove_cb,
+ transit);
}
}
static void
-_transit_obj_remove_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+_transit_obj_remove_cb(void *data, const Efl_Event *ev)
{
+ Eo* obj = ev->object;
Elm_Transit *transit = data;
Elm_Transit_Obj_Data *obj_data = evas_object_data_get(obj, _transit_key);
if (obj_data)
@@ -204,6 +207,7 @@ _transit_obj_data_recover(Elm_Transit *transit, Evas_Object *obj)
obj_data->state.b, obj_data->state.a);
if (obj_data->state.visible) evas_object_show(obj);
else evas_object_hide(obj);
+ evas_object_anti_alias_set(obj, obj_data->state.anti_alias);
evas_object_map_enable_set(obj, obj_data->state.map_enabled);
evas_object_map_set(obj, obj_data->state.map);
}
@@ -345,7 +349,7 @@ _transit_animate_cb(void *data)
duration = transit->time.duration;
transit->progress = elapsed_time / duration;
- if (transit->revert_mode && transit->revert_begin_progress == 0)
+ if (transit->revert_mode && EINA_DBL_EQ(transit->revert_begin_progress, 0))
{
transit->revert_begin_progress = transit->progress;
transit->time.revert_start = transit->time.current;
@@ -651,6 +655,13 @@ elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj)
ELM_TRANSIT_CHECK_OR_RETURN(transit);
EINA_SAFETY_ON_NULL_RETURN(obj);
+ // Prevent adding duplicates
+ if (eina_list_data_find_list(transit->objs, obj))
+ {
+ WRN("Object(%p) is already added", obj);
+ return;
+ }
+
if (transit->animator)
{
if (!evas_object_data_get(obj, _transit_key))
@@ -660,9 +671,9 @@ elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj)
}
}
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
- _transit_obj_remove_cb,
- transit);
+ efl_event_callback_add(obj, EFL_EVENT_DEL,
+ _transit_obj_remove_cb,
+ transit);
transit->objs = eina_list_append(transit->objs, obj);
}
@@ -924,14 +935,14 @@ elm_transit_paused_set(Elm_Transit *transit, Eina_Bool paused)
{
if (transit->revert_mode)
{
- if (transit->time.revert_paused == 0) return;
+ if (EINA_DBL_EQ(transit->time.revert_paused, 0)) return;
ecore_animator_thaw(transit->animator);
transit->time.revert_delayed += (ecore_loop_time_get() - transit->time.revert_paused);
transit->time.revert_paused = 0;
}
else
{
- if (transit->time.paused == 0) return;
+ if (EINA_DBL_EQ(transit->time.paused, 0)) return;
ecore_animator_thaw(transit->animator);
transit->time.delayed += (ecore_loop_time_get() - transit->time.paused);
transit->time.paused = 0;
@@ -944,7 +955,7 @@ elm_transit_paused_get(const Elm_Transit *transit)
{
ELM_TRANSIT_CHECK_OR_RETURN(transit, EINA_FALSE);
- if (transit->time.paused == 0)
+ if (EINA_DBL_EQ(transit->time.paused, 0))
return EINA_FALSE;
return EINA_TRUE;
@@ -1124,8 +1135,9 @@ struct _Elm_Transit_Effect_Translation
};
static void
-_translation_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+_translation_object_del_cb(void *data, const Efl_Event *ev)
{
+ Eo* obj = ev->object;
Elm_Transit_Effect_Translation *translation = data;
Eina_List *elist;
Elm_Transit_Effect_Translation_Node *translation_node;
@@ -1160,8 +1172,8 @@ _translation_nodes_build(Elm_Transit *transit, Elm_Transit_Effect_Translation *t
evas_object_geometry_get(obj, &(translation_node->x),
&(translation_node->y), NULL, NULL);
data_list = eina_list_append(data_list, translation_node);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
- _translation_object_del_cb, translation);
+ efl_event_callback_add(obj, EFL_EVENT_DEL,
+ _translation_object_del_cb, translation);
}
return data_list;
}
@@ -1177,8 +1189,8 @@ _transit_effect_translation_context_free(Elm_Transit_Effect *effect, Elm_Transit
EINA_LIST_FOREACH_SAFE(translation->nodes,
elist, elist_next, translation_node)
{
- evas_object_event_callback_del(translation_node->obj,
- EVAS_CALLBACK_DEL, _translation_object_del_cb);
+ efl_event_callback_del(translation_node->obj,
+ EFL_EVENT_DEL, _translation_object_del_cb, translation);
translation->nodes = eina_list_remove_list(translation->nodes, elist);
free(translation_node);
}
@@ -1273,6 +1285,9 @@ _transit_effect_zoom_op(Elm_Transit_Effect *effect, Elm_Transit *transit , doubl
EINA_LIST_FOREACH(transit->objs, elist, obj)
{
+ //Turn on for fixing jiggling by sub-pixel rendering
+ evas_object_anti_alias_set(obj, EINA_TRUE);
+
obj_data = evas_object_data_get(obj, _transit_key);
if (obj_data && obj_data->state.map_enabled)
{
@@ -1512,8 +1527,9 @@ struct _Elm_Transit_Effect_Resizable_Flip
};
static void
-_resizable_flip_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+_resizable_flip_object_del_cb(void *data, const Efl_Event *ev)
{
+ Eo* obj = ev->object;
Elm_Transit_Effect_ResizableFlip *resizable_flip = data;
Eina_List *elist;
Elm_Transit_Effect_ResizableFlip_Node *resizable_flip_node;
@@ -1521,11 +1537,11 @@ _resizable_flip_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
EINA_LIST_FOREACH(resizable_flip->nodes, elist, resizable_flip_node)
{
if (resizable_flip_node->front == obj)
- evas_object_event_callback_del(resizable_flip_node->back,
- EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
+ efl_event_callback_del(resizable_flip_node->back,
+ EFL_EVENT_DEL, _resizable_flip_object_del_cb, resizable_flip);
else if (resizable_flip_node->back == obj)
- evas_object_event_callback_del(resizable_flip_node->front,
- EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
+ efl_event_callback_del(resizable_flip_node->front,
+ EFL_EVENT_DEL, _resizable_flip_object_del_cb, resizable_flip);
else continue;
resizable_flip->nodes = eina_list_remove_list(resizable_flip->nodes,
@@ -1574,10 +1590,10 @@ _resizable_flip_nodes_build(Elm_Transit *transit, Elm_Transit_Effect_ResizableFl
data_list = eina_list_append(data_list, resizable_flip_node);
- evas_object_event_callback_add(resizable_flip_node->back,
- EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb, resizable_flip);
- evas_object_event_callback_add(resizable_flip_node->front,
- EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb, resizable_flip);
+ efl_event_callback_add(resizable_flip_node->back,
+ EFL_EVENT_DEL, _resizable_flip_object_del_cb, resizable_flip);
+ efl_event_callback_add(resizable_flip_node->front,
+ EFL_EVENT_DEL, _resizable_flip_object_del_cb, resizable_flip);
}
return data_list;
@@ -1651,10 +1667,10 @@ _transit_effect_resizable_flip_context_free(Elm_Transit_Effect *effect, Elm_Tran
resizable_flip->nodes = eina_list_remove_list(resizable_flip->nodes,
elist);
- evas_object_event_callback_del(resizable_flip_node->back,
- EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
- evas_object_event_callback_del(resizable_flip_node->front,
- EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
+ efl_event_callback_del(resizable_flip_node->back,
+ EFL_EVENT_DEL, _resizable_flip_object_del_cb, resizable_flip);
+ efl_event_callback_del(resizable_flip_node->front,
+ EFL_EVENT_DEL, _resizable_flip_object_del_cb, resizable_flip);
free(resizable_flip_node);
}
free(resizable_flip);
@@ -2124,8 +2140,9 @@ struct _Elm_Transit_Effect_Fade
};
static void
-_fade_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+_fade_object_del_cb(void *data, const Efl_Event *ev)
{
+ Eo* obj = ev->object;
Elm_Transit_Effect_Fade *fade = data;
Eina_List *elist;
Elm_Transit_Effect_Fade_Node *fade_node;
@@ -2133,11 +2150,11 @@ _fade_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *eve
EINA_LIST_FOREACH(fade->nodes, elist, fade_node)
{
if (fade_node->before == obj)
- evas_object_event_callback_del(fade_node->after,
- EVAS_CALLBACK_DEL, _fade_object_del_cb);
+ efl_event_callback_del(fade_node->after,
+ EFL_EVENT_DEL, _fade_object_del_cb, fade);
else if (fade_node->after == obj)
- evas_object_event_callback_del(fade_node->before,
- EVAS_CALLBACK_DEL, _fade_object_del_cb);
+ efl_event_callback_del(fade_node->before,
+ EFL_EVENT_DEL, _fade_object_del_cb, fade);
else continue;
fade->nodes = eina_list_remove_list(fade->nodes, elist);
@@ -2178,10 +2195,10 @@ _fade_nodes_build(Elm_Transit *transit, Elm_Transit_Effect_Fade *fade_data)
data_list = eina_list_append(data_list, fade);
- evas_object_event_callback_add(fade->before,
- EVAS_CALLBACK_DEL, _fade_object_del_cb, fade_data);
- evas_object_event_callback_add(fade->after,
- EVAS_CALLBACK_DEL, _fade_object_del_cb, fade_data);
+ efl_event_callback_add(fade->before,
+ EFL_EVENT_DEL, _fade_object_del_cb, fade_data);
+ efl_event_callback_add(fade->after,
+ EFL_EVENT_DEL, _fade_object_del_cb, fade_data);
}
return data_list;
}
@@ -2206,10 +2223,10 @@ _transit_effect_fade_context_free(Elm_Transit_Effect *effect, Elm_Transit *trans
fade_node->after_color.a);
fade->nodes = eina_list_remove_list(fade->nodes, elist);
- evas_object_event_callback_del(fade_node->before,
- EVAS_CALLBACK_DEL, _fade_object_del_cb);
- evas_object_event_callback_del(fade_node->after,
- EVAS_CALLBACK_DEL, _fade_object_del_cb);
+ efl_event_callback_del(fade_node->before,
+ EFL_EVENT_DEL, _fade_object_del_cb, fade);
+ efl_event_callback_del(fade_node->after,
+ EFL_EVENT_DEL, _fade_object_del_cb, fade);
free(fade_node);
}
@@ -2315,8 +2332,9 @@ struct _Elm_Transit_Effect_Blend
};
static void
-_blend_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+_blend_object_del_cb(void *data, const Efl_Event *ev)
{
+ Eo* obj = ev->object;
Elm_Transit_Effect_Blend *blend = data;
Eina_List *elist;
Elm_Transit_Effect_Blend_Node *blend_node;
@@ -2324,11 +2342,11 @@ _blend_object_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *ev
EINA_LIST_FOREACH(blend->nodes, elist, blend_node)
{
if (blend_node->after == obj)
- evas_object_event_callback_del(blend_node->before,
- EVAS_CALLBACK_DEL, _blend_object_del_cb);
+ efl_event_callback_del(blend_node->before,
+ EFL_EVENT_DEL, _blend_object_del_cb, blend);
else if (blend_node->before == obj)
- evas_object_event_callback_del(blend_node->after,
- EVAS_CALLBACK_DEL, _blend_object_del_cb);
+ efl_event_callback_del(blend_node->after,
+ EFL_EVENT_DEL, _blend_object_del_cb, blend);
else continue;
blend->nodes = eina_list_remove_list(blend->nodes, elist);
@@ -2368,10 +2386,10 @@ _blend_nodes_build(Elm_Transit *transit, Elm_Transit_Effect_Blend *blend)
data_list = eina_list_append(data_list, blend_node);
- evas_object_event_callback_add(blend_node->before,
- EVAS_CALLBACK_DEL, _blend_object_del_cb, blend);
- evas_object_event_callback_add(blend_node->after,
- EVAS_CALLBACK_DEL, _blend_object_del_cb, blend);
+ efl_event_callback_add(blend_node->before,
+ EFL_EVENT_DEL, _blend_object_del_cb, blend);
+ efl_event_callback_add(blend_node->after,
+ EFL_EVENT_DEL, _blend_object_del_cb, blend);
}
return data_list;
}
@@ -2400,10 +2418,10 @@ _transit_effect_blend_context_free(Elm_Transit_Effect *effect, Elm_Transit *tran
blend->nodes = eina_list_remove_list(blend->nodes, elist);
- evas_object_event_callback_del(blend_node->before,
- EVAS_CALLBACK_DEL, _blend_object_del_cb);
- evas_object_event_callback_del(blend_node->after,
- EVAS_CALLBACK_DEL, _blend_object_del_cb);
+ efl_event_callback_del(blend_node->before,
+ EFL_EVENT_DEL, _blend_object_del_cb, blend);
+ efl_event_callback_del(blend_node->after,
+ EFL_EVENT_DEL, _blend_object_del_cb, blend);
free(blend_node);
}
free(blend);
@@ -2621,8 +2639,8 @@ _transit_effect_image_animation_op(Elm_Transit_Effect *effect, Elm_Transit *tran
const char *file = eina_list_nth(image_animation->images,
idx);
- elm_image_file_set(obj, file, NULL);
elm_image_preload_disabled_set(obj, EINA_TRUE);
+ elm_image_file_set(obj, file, NULL);
}
}
diff --git a/src/lib/elementary/elm_view_form_eo.h b/src/lib/elementary/elm_view_form_eo.h
index 83dbe7e6c2..75560de31a 100644
--- a/src/lib/elementary/elm_view_form_eo.h
+++ b/src/lib/elementary/elm_view_form_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_View_Form;
*/
#define ELM_VIEW_FORM_CLASS elm_view_form_class_get()
-EWAPI const Efl_Class *elm_view_form_class_get(void);
+EWAPI const Efl_Class *elm_view_form_class_get(void) EINA_CONST;
/**
* @brief Set model
diff --git a/src/lib/elementary/elm_view_list_eo.h b/src/lib/elementary/elm_view_list_eo.h
index f35c275c3b..2688b4f6cb 100644
--- a/src/lib/elementary/elm_view_list_eo.h
+++ b/src/lib/elementary/elm_view_list_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_View_List;
*/
#define ELM_VIEW_LIST_CLASS elm_view_list_class_get()
-EWAPI const Efl_Class *elm_view_list_class_get(void);
+EWAPI const Efl_Class *elm_view_list_class_get(void) EINA_CONST;
/**
* @brief Constructor wrapper
diff --git a/src/lib/elementary/elm_web_eo.h b/src/lib/elementary/elm_web_eo.h
index 0407b40188..73f4311dfe 100644
--- a/src/lib/elementary/elm_web_eo.h
+++ b/src/lib/elementary/elm_web_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Web;
*/
#define ELM_WEB_CLASS elm_web_class_get()
-EWAPI const Efl_Class *elm_web_class_get(void);
+EWAPI const Efl_Class *elm_web_class_get(void) EINA_CONST;
/**
* @brief Sets whether to highlight the matched marks.
diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h
index ab8ea9a215..233c526ddc 100644
--- a/src/lib/elementary/elm_widget.h
+++ b/src/lib/elementary/elm_widget.h
@@ -301,7 +301,7 @@
#include "efl_ui.eot.h"
typedef Eo Efl_Ui_Focus_Manager;
-extern EAPI Eina_Error EFL_UI_THEME_APPLY_ERROR_NONE;
+EAPI extern Eina_Error EFL_UI_THEME_APPLY_ERROR_NONE;
#define _EFL_UI_FOCUS_MANAGER_EO_CLASS_TYPE
#include "efl_ui_focus_object.eo.h"
@@ -332,7 +332,7 @@ typedef void (*Elm_Widget_On_Show_Region_Cb)(void *data, Evas_Object *obj, Eina_
typedef struct _Elm_Widget_Smart_Data
{
Evas_Object *parent_obj; /**< parent object of a widget in the elementary tree */
- Eina_List *subobjs; /**< list of widgets' sub objects in the elementary tree */
+ Eina_Array *children;
Evas_Object *resize_obj; /**< an unique object for each widget that shows the look of a widget. Resize object's geometry is same as the widget. This resize object is different from that of window's resize object. */
Evas_Object *hover_obj;
Evas_Object *bg;
@@ -585,6 +585,11 @@ struct _Elm_Widget_Item_Data
Eina_Hash *labels;
Evas_Object *track_obj;
+ struct {
+ void (*realized) (Eo *obj);
+ void (*unrealized) (Eo *obj);
+ } func;
+
Eina_Bool disabled : 1;
Eina_Bool on_deletion : 1;
Eina_Bool on_translate : 1;
diff --git a/src/lib/elementary/elm_widget_combobox.h b/src/lib/elementary/elm_widget_combobox.h
index 889f97b28b..2fe0ce8bcb 100644
--- a/src/lib/elementary/elm_widget_combobox.h
+++ b/src/lib/elementary/elm_widget_combobox.h
@@ -81,6 +81,6 @@ struct _Elm_Combobox_Data
#define ELM_COMBOBOX_CLASS elm_combobox_class_get()
-EWAPI const Efl_Class *elm_combobox_class_get(void);
+EWAPI const Efl_Class *elm_combobox_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_widget_gengrid.h b/src/lib/elementary/elm_widget_gengrid.h
index dc93910041..8f55c4b73f 100644
--- a/src/lib/elementary/elm_widget_gengrid.h
+++ b/src/lib/elementary/elm_widget_gengrid.h
@@ -174,7 +174,7 @@ struct Elm_Gen_Item_Type
* this item only once */
Eina_Bool nocache : 1; /* do not use cache for this item */
- /* for non homogenous items */
+ /* for non homogeneous items */
Evas_Coord w, h, sw, sh;
};
diff --git a/src/lib/elementary/elm_widget_item_container_eo.h b/src/lib/elementary/elm_widget_item_container_eo.h
index 066876e5cd..e5966ba51e 100644
--- a/src/lib/elementary/elm_widget_item_container_eo.h
+++ b/src/lib/elementary/elm_widget_item_container_eo.h
@@ -15,7 +15,7 @@ typedef Eo Elm_Widget_Item_Container;
#endif
#define ELM_WIDGET_ITEM_CONTAINER_INTERFACE elm_widget_item_container_interface_get()
-EWAPI const Efl_Class *elm_widget_item_container_interface_get(void);
+EWAPI const Efl_Class *elm_widget_item_container_interface_get(void) EINA_CONST;
/**
* @brief Get the focused widget item.
diff --git a/src/lib/elementary/elm_widget_item_eo.h b/src/lib/elementary/elm_widget_item_eo.h
index f077e2152d..d6486e6e5a 100644
--- a/src/lib/elementary/elm_widget_item_eo.h
+++ b/src/lib/elementary/elm_widget_item_eo.h
@@ -19,7 +19,7 @@ typedef Eo Elm_Widget_Item;
*/
#define ELM_WIDGET_ITEM_CLASS elm_widget_item_class_get()
-EWAPI const Efl_Class *elm_widget_item_class_get(void);
+EWAPI const Efl_Class *elm_widget_item_class_get(void) EINA_CONST;
/**
* @brief Control size restriction state of an object's tooltip
@@ -677,7 +677,7 @@ EOAPI void elm_wdg_item_domain_part_text_translatable_set(Eo *obj, const char *p
* items may/may not have the internal object so this api may return @c NULL if
* the widget item doesn't have it. Additionally, the widget item is
* managed/controlled by the widget, the widget item could be changed(moved,
- * resized even deleted) anytime by it's own widget's decision. So please dont'
+ * resized even deleted) anytime by it's own widget's decision. So please don't
* change the track object as well as don't keep the track object in your side
* as possible but get the track object at the moment you need to refer.
* Otherwise, you need to add some callbacks to the track object to track it's
diff --git a/src/lib/elementary/elm_widget_item_eo.legacy.h b/src/lib/elementary/elm_widget_item_eo.legacy.h
index 2937be3df0..7efaae6374 100644
--- a/src/lib/elementary/elm_widget_item_eo.legacy.h
+++ b/src/lib/elementary/elm_widget_item_eo.legacy.h
@@ -625,7 +625,7 @@ EAPI void elm_object_item_domain_part_text_translatable_set(Elm_Widget_Item *obj
* items may/may not have the internal object so this api may return @c NULL if
* the widget item doesn't have it. Additionally, the widget item is
* managed/controlled by the widget, the widget item could be changed(moved,
- * resized even deleted) anytime by it's own widget's decision. So please dont'
+ * resized even deleted) anytime by it's own widget's decision. So please don't
* change the track object as well as don't keep the track object in your side
* as possible but get the track object at the moment you need to refer.
* Otherwise, you need to add some callbacks to the track object to track it's
diff --git a/src/lib/elementary/elm_widget_item_static_focus.c b/src/lib/elementary/elm_widget_item_static_focus.c
index f040cbcf4c..cb8d10bcd0 100644
--- a/src/lib/elementary/elm_widget_item_static_focus.c
+++ b/src/lib/elementary/elm_widget_item_static_focus.c
@@ -27,43 +27,35 @@ _realized_set(Elm_Widget_Item_Static_Focus *f)
}
static void
-_list_realized_cb(void *data, const Efl_Event *ev)
+_list_realized_cb(Eo *obj)
{
- if (ev->info != data) return;
+ _realized_set(obj);
- _realized_set(data);
-
- if (!elm_object_item_disabled_get(data) &&
- elm_genlist_item_type_get(data) != ELM_GENLIST_ITEM_GROUP)
- efl_ui_focus_object_setup_order(data);
+ if (!elm_object_item_disabled_get(obj) &&
+ elm_genlist_item_type_get(obj) != ELM_GENLIST_ITEM_GROUP)
+ efl_ui_focus_object_setup_order(obj);
}
static void
-_grid_realized_cb(void *data, const Efl_Event *ev)
+_grid_realized_cb(Eo *obj)
{
const Elm_Gen_Item_Class *itc;
Eina_Bool is_group = EINA_FALSE;
- if (ev->info != data) return;
-
- _realized_set(data);
+ _realized_set(obj);
- itc = elm_gengrid_item_item_class_get(data);
+ itc = elm_gengrid_item_item_class_get(obj);
is_group = (itc && itc->item_style && !strcmp(itc->item_style, "group_index"));
- if (!elm_object_item_disabled_get(data) && !is_group)
- {
- efl_ui_focus_object_setup_order(data);
- }
+ if (!elm_object_item_disabled_get(obj) && !is_group)
+ efl_ui_focus_object_setup_order(obj);
}
static void
-_unrealized_cb(void *data, const Efl_Event *ev EINA_UNUSED)
+_unrealized_cb(Eo *obj)
{
- Elm_Widget_Item_Static_Focus_Data *pd = efl_data_scope_get(data, MY_CLASS);
-
- if (ev->info != data) return;
+ Elm_Widget_Item_Static_Focus_Data *pd = efl_data_scope_get(obj, MY_CLASS);
if (pd) /* if the obect is dead pd is NULL */
{
@@ -145,15 +137,10 @@ _elm_widget_item_static_focus_efl_object_constructor(Eo *obj, Elm_Widget_Item_St
Eo *ret = efl_constructor(efl_super(obj, MY_CLASS));
if (efl_isa(wpd->widget, ELM_GENLIST_CLASS))
- {
- efl_event_callback_add(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _list_realized_cb, obj);
- efl_event_callback_add(wpd->widget, ELM_GENLIST_EVENT_UNREALIZED, _unrealized_cb, obj);
- }
+ wpd->func.realized = _list_realized_cb;
else
- {
- efl_event_callback_add(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _grid_realized_cb, obj);
- efl_event_callback_add(wpd->widget, ELM_GENGRID_EVENT_UNREALIZED, _unrealized_cb, obj);
- }
+ wpd->func.realized = _grid_realized_cb;
+ wpd->func.unrealized = _unrealized_cb;
return ret;
}
@@ -161,17 +148,8 @@ EOLIAN static void
_elm_widget_item_static_focus_efl_object_destructor(Eo *obj, Elm_Widget_Item_Static_Focus_Data *pd EINA_UNUSED)
{
Elm_Widget_Item_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS);
- if (efl_isa(wpd->widget, ELM_GENLIST_CLASS))
- {
- efl_event_callback_del(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _list_realized_cb, obj);
- efl_event_callback_del(wpd->widget, ELM_GENLIST_EVENT_UNREALIZED, _unrealized_cb, obj);
- }
- else
- {
- efl_event_callback_del(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _grid_realized_cb, obj);
- efl_event_callback_del(wpd->widget, ELM_GENGRID_EVENT_UNREALIZED, _unrealized_cb, obj);
- }
-
+ wpd->func.realized = NULL;
+ wpd->func.unrealized = NULL;
if (pd->adapter)
efl_del(pd->adapter);
diff --git a/src/lib/elementary/elm_widget_item_static_focus_eo.h b/src/lib/elementary/elm_widget_item_static_focus_eo.h
index c1f058f042..d5173d06b8 100644
--- a/src/lib/elementary/elm_widget_item_static_focus_eo.h
+++ b/src/lib/elementary/elm_widget_item_static_focus_eo.h
@@ -21,6 +21,6 @@ typedef Eo Elm_Widget_Item_Static_Focus;
*/
#define ELM_WIDGET_ITEM_STATIC_FOCUS_CLASS elm_widget_item_static_focus_class_get()
-EWAPI const Efl_Class *elm_widget_item_static_focus_class_get(void);
+EWAPI const Efl_Class *elm_widget_item_static_focus_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/elementary/elm_widget_layout.h b/src/lib/elementary/elm_widget_layout.h
index 69565b6fd9..461962ca53 100644
--- a/src/lib/elementary/elm_widget_layout.h
+++ b/src/lib/elementary/elm_widget_layout.h
@@ -15,7 +15,7 @@
*
* @section elm-layout-class The Elementary Layout Class
*
- * Elementary, besides having the @ref Layout widget, exposes its
+ * Elementary, besides having the @ref Elm_Layout widget, exposes its
* foundation -- the Elementary Layout Class -- in order to create
* other widgets which are, basically, a certain layout with some more
* logic on top.
@@ -76,6 +76,7 @@ typedef struct _Efl_Ui_Layout_Data
Eina_Bool calc_subobjs : 1; /**< Set to true if group_calc should also handle subobjs during manual calc */
Eina_Bool cb_theme_changed : 1; /**< if theme,changed event subscriber has been added */
Eina_Bool needs_theme_apply : 1; /**< if theme has not been manually set during construction */
+ Eina_Bool frozen_changed : 1; /**< only set if object was changed while frozen */
} Efl_Ui_Layout_Data;
typedef struct _Elm_Layout_Data
diff --git a/src/lib/elementary/elm_win.h b/src/lib/elementary/elm_win.h
index 3e45dd15ff..5e272edebc 100644
--- a/src/lib/elementary/elm_win.h
+++ b/src/lib/elementary/elm_win.h
@@ -1,5 +1,5 @@
/**
- * @defgroup Elm_Win Win
+ * @defgroup Elm_Win_Group Win
* @ingroup Elementary
*
* @image html win_inheritance_tree.png
diff --git a/src/lib/elementary/elm_win_common.h b/src/lib/elementary/elm_win_common.h
index a0d4fef44b..9f337f3758 100644
--- a/src/lib/elementary/elm_win_common.h
+++ b/src/lib/elementary/elm_win_common.h
@@ -1,5 +1,5 @@
/**
- * @addtogroup Elm_Win
+ * @addtogroup Elm_Win_Group
*
* @{
*/
diff --git a/src/lib/elementary/elm_win_eo.h b/src/lib/elementary/elm_win_eo.h
index 6643fc59bb..d6d4ed5fa3 100644
--- a/src/lib/elementary/elm_win_eo.h
+++ b/src/lib/elementary/elm_win_eo.h
@@ -2,7 +2,7 @@
# define ELM_WIN_EO_H
/**
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*
* @{
*/
diff --git a/src/lib/elementary/elm_win_legacy.h b/src/lib/elementary/elm_win_legacy.h
index 613e0eb74b..3e0cc3722d 100644
--- a/src/lib/elementary/elm_win_legacy.h
+++ b/src/lib/elementary/elm_win_legacy.h
@@ -8,7 +8,7 @@
* phones, default is to have the indicator shown. But like TV, default is to
* have the indicator hidden.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
typedef enum
{
@@ -19,7 +19,7 @@ typedef enum
/** Defines the opacity modes of indicator that can be shown
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
typedef enum
{
@@ -57,7 +57,7 @@ typedef enum
*
* Currently, only the X11 backed engines use them.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
typedef enum
{
@@ -92,13 +92,13 @@ typedef enum
* usually used in the EFL. */
/**
-* Used to indicate the window is a representation of an object being
-* dragged across different windows, or even applications. Typically
-* used with elm_win_override_set().
-*/
+ * Used to indicate the window is a representation of an object being
+ * dragged across different windows, or even applications. Typically
+ * used with elm_win_override_set().
+ */
ELM_WIN_DND,
- ELM_WIN_INLINED_IMAGE,
- ELM_WIN_SOCKET_IMAGE,
+ ELM_WIN_INLINED_IMAGE, /**< The window is an image. */
+ ELM_WIN_SOCKET_IMAGE, /**< The window is an image received through a socket. */
ELM_WIN_FAKE, /**< See elm_win_fake_add(). @since 1.13 */
ELM_WIN_NAVIFRAME_BASIC, /**< Used for naviframe style replacement with
@@ -113,7 +113,7 @@ typedef enum
* When the application window is being managed by Illume it may request any of
* the following layouts for the virtual keyboard.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
typedef enum
{
@@ -138,7 +138,7 @@ typedef enum
/** Define the keygrab modes of window. A window may send commands to the
* Keyrouter according this mode, and perform different actions.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
typedef enum
{
@@ -172,7 +172,7 @@ typedef enum
*
* @since 1.19
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
typedef enum
{
@@ -202,7 +202,7 @@ typedef enum
*
* @return The created object, or @c NULL on failure
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Evas_Object *elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type);
@@ -221,7 +221,7 @@ typedef Evas_Object Elm_Win;
*
* @return The created object, or @c NULL on failure
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*
* @since 1.13
*/
@@ -242,7 +242,7 @@ EAPI Evas_Object *elm_win_fake_add(Ecore_Evas *ee);
*
* @see elm_win_add()
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Evas_Object *elm_win_util_standard_add(const char *name, const char *title);
@@ -263,7 +263,7 @@ EAPI Evas_Object *elm_win_util_standard_add(const char *name, const cha
*
* @see elm_win_add()
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @since 1.13
*/
EAPI Evas_Object *elm_win_util_dialog_add(Evas_Object *parent, const char *name, const char *title);
@@ -286,7 +286,7 @@ EAPI Evas_Object *elm_win_util_dialog_add(Evas_Object *parent, const ch
* @param[in] autodel If @c true, the window will automatically delete itself
* when closed.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_autodel_set(Evas_Object *obj, Eina_Bool autodel);
@@ -297,7 +297,7 @@ EAPI void elm_win_autodel_set(Evas_Object *obj, Eina_Bool autodel);
*
* @return If @c true, the window will automatically delete itself when closed.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_autodel_get(const Evas_Object *obj);
@@ -313,7 +313,7 @@ EAPI Eina_Bool elm_win_autodel_get(const Evas_Object *obj);
* a multi window concept in a mobile phone. The way of handling floating mode
* window is decided by enlightenment window manager.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @see elm_win_floating_mode_get()
* @since 1.8
*/
@@ -325,7 +325,7 @@ EAPI void elm_win_floating_mode_set(Evas_Object *obj, Eina_Bool
* @param obj The window object
* @return If true, the window is floating mode
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @see elm_win_floating_mode_set()
* @since 1.8
*/
@@ -352,7 +352,7 @@ EAPI Eina_Bool elm_win_floating_mode_get(const Evas_Object *obj);
* @see elm_win_norender_pop()
* @see elm_win_norender_get()
* @see elm_win_render()
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @since 1.7
*/
EAPI void elm_win_norender_push(Evas_Object *obj);
@@ -368,7 +368,7 @@ EAPI void elm_win_norender_push(Evas_Object *obj);
* @see elm_win_norender_push()
* @see elm_win_norender_get()
* @see elm_win_render()
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @since 1.7
*/
EAPI void elm_win_norender_pop(Evas_Object *obj);
@@ -381,7 +381,7 @@ EAPI void elm_win_norender_pop(Evas_Object *obj);
* @see elm_win_norender_push()
* @see elm_win_norender_pop()
* @see elm_win_render()
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @since 1.7
*/
EAPI int elm_win_norender_get(const Evas_Object *obj);
@@ -400,7 +400,7 @@ EAPI int elm_win_norender_get(const Evas_Object *obj);
* @see elm_win_norender_push()
* @see elm_win_norender_pop()
* @see elm_win_norender_get()
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @since 1.7
*/
EAPI void elm_win_render(Evas_Object *obj);
@@ -416,7 +416,7 @@ EAPI void elm_win_render(Evas_Object *obj);
*
* @return The Ecore_Wl_Window of @p obj
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Ecore_Wl2_Window *elm_win_wl_window_get(const Evas_Object *obj);
@@ -431,7 +431,7 @@ EAPI Ecore_Wl2_Window *elm_win_wl_window_get(const Evas_Object *obj);
*
* @return The Ecore_Win32_Window of @p obj
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*
* @since 1.16
*/
@@ -448,7 +448,7 @@ EAPI Ecore_Win32_Window *elm_win_win32_window_get(const Evas_Object *obj);
*
* @see elm_win_wm_rotation_preferred_rotation_get()
*
- * ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @since 1.9
*/
EAPI void elm_win_wm_rotation_preferred_rotation_set(Evas_Object *obj, int rotation);
@@ -477,7 +477,7 @@ EAPI void elm_win_wm_rotation_preferred_rotation_set(Evas_Objec
*
* @param[in] subobj The resize object to add.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj);
@@ -491,13 +491,13 @@ EAPI void elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj);
*
* @param[in] subobj The resize object to add.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_resize_object_del(Evas_Object *obj, Evas_Object *subobj);
/** Get the Ecore_X_Window of an Evas_Object.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Ecore_X_Window elm_win_xwindow_get(const Evas_Object *obj);
@@ -506,7 +506,7 @@ EAPI Ecore_X_Window elm_win_xwindow_get(const Evas_Object *obj);
*
* @return The Ecore_Wl2_Window of @c obj.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Ecore_Wl2_Window *elm_win_wl_window_get(const Evas_Object *obj);
@@ -518,7 +518,7 @@ EAPI Ecore_Wl2_Window *elm_win_wl_window_get(const Evas_Object *obj);
*
* @since 1.17
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Ecore_Win32_Window *elm_win_win32_window_get(const Evas_Object *obj);
@@ -529,7 +529,7 @@ EAPI Ecore_Win32_Window *elm_win_win32_window_get(const Evas_Object *obj);
*
* @since 1.17
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Ecore_Cocoa_Window *elm_win_cocoa_window_get(const Evas_Object *obj);
@@ -540,7 +540,7 @@ EAPI Ecore_Cocoa_Window *elm_win_cocoa_window_get(const Evas_Object *obj);
*
* @since 1.12
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void *elm_win_trap_data_get(const Evas_Object *obj);
@@ -559,7 +559,7 @@ EAPI void *elm_win_trap_data_get(const Evas_Object *obj);
*
* @param[in] override If true, the window is overridden.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_override_set(Evas_Object *obj, Eina_Bool override);
@@ -568,7 +568,7 @@ EAPI void elm_win_override_set(Evas_Object *obj, Eina_Bool override);
*
* @return If true, the window is overridden.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_override_get(const Evas_Object *obj);
@@ -581,7 +581,7 @@ EAPI Eina_Bool elm_win_override_get(const Evas_Object *obj);
* If @ref elm_win_override_set is not set, the Window Manager may ignore this
* request.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_lower(Evas_Object *obj);
@@ -592,7 +592,7 @@ EAPI void elm_win_lower(Evas_Object *obj);
*
* @param[in] quickpanel The quickpanel flag.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_quickpanel_set(Evas_Object *obj, Eina_Bool quickpanel);
@@ -601,7 +601,7 @@ EAPI void elm_win_quickpanel_set(Evas_Object *obj, Eina_Bool quickpanel);
*
* @return The quickpanel flag.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_quickpanel_get(const Evas_Object *obj);
/**
@@ -609,7 +609,7 @@ EAPI Eina_Bool elm_win_quickpanel_get(const Evas_Object *obj);
*
* @param[in] zone The requested zone for this quickpanel.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_quickpanel_zone_set(Evas_Object *obj, int zone);
@@ -618,7 +618,7 @@ EAPI void elm_win_quickpanel_zone_set(Evas_Object *obj, int zone);
*
* @return The requested zone for this quickpanel.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI int elm_win_quickpanel_zone_get(const Evas_Object *obj);
/**
@@ -626,7 +626,7 @@ EAPI int elm_win_quickpanel_zone_get(const Evas_Object *obj);
*
* @param[in] priority The major priority for this quickpanel or -1.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_quickpanel_priority_major_set(Evas_Object *obj, int priority);
@@ -635,7 +635,7 @@ EAPI void elm_win_quickpanel_priority_major_set(Evas_Object *obj, int priority);
*
* @return The major priority for this quickpanel or -1.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI int elm_win_quickpanel_priority_major_get(const Evas_Object *obj);
@@ -644,7 +644,7 @@ EAPI int elm_win_quickpanel_priority_major_get(const Evas_Object *obj);
*
* @param[in] priority The minor priority for this quickpanel.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_quickpanel_priority_minor_set(Evas_Object *obj, int priority);
@@ -653,7 +653,7 @@ EAPI void elm_win_quickpanel_priority_minor_set(Evas_Object *obj, int priority);
*
* @return The minor priority for this quickpanel.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI int elm_win_quickpanel_priority_minor_get(const Evas_Object *obj);
@@ -662,7 +662,7 @@ EAPI int elm_win_quickpanel_priority_minor_get(const Evas_Object *obj);
*
* @param[in] mode The mode, one of #Elm_Win_Indicator_Mode.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_indicator_mode_set(Evas_Object *obj, Elm_Win_Indicator_Mode mode);
@@ -671,7 +671,7 @@ EAPI void elm_win_indicator_mode_set(Evas_Object *obj, Elm_Win_Indicator_Mode mo
*
* @return The mode, one of #Elm_Win_Indicator_Mode.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Elm_Win_Indicator_Mode elm_win_indicator_mode_get(const Evas_Object *obj);
@@ -680,7 +680,7 @@ EAPI Elm_Win_Indicator_Mode elm_win_indicator_mode_get(const Evas_Object *obj);
*
* @param[in] mode The mode, one of #Elm_Win_Indicator_Opacity_Mode.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_indicator_opacity_set(Evas_Object *obj, Elm_Win_Indicator_Opacity_Mode mode);
@@ -689,16 +689,16 @@ EAPI void elm_win_indicator_opacity_set(Evas_Object *obj, Elm_Win_Indicator_Opac
*
* @return The mode, one of #Elm_Win_Indicator_Opacity_Mode.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Elm_Win_Indicator_Opacity_Mode elm_win_indicator_opacity_get(const Evas_Object *obj);
/**
* @brief Sets whether the window is a keyboard.
*
- * @param[in] mode If true, the window is a virtual keyboard..
+ * @param[in] is_keyboard If true, the window is a virtual keyboard..
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_keyboard_win_set(Evas_Object *obj, Eina_Bool is_keyboard);
@@ -707,7 +707,7 @@ EAPI void elm_win_keyboard_win_set(Evas_Object *obj, Eina_Bool is_keyboard);
*
* @return The mode, If true, the window is a virtual keyboard..
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_keyboard_win_get(const Evas_Object *obj);
@@ -716,7 +716,7 @@ EAPI Eina_Bool elm_win_keyboard_win_get(const Evas_Object *obj);
*
* @param[in] conformant The conformant flag.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_conformant_set(Evas_Object *obj, Eina_Bool conformant);
@@ -725,7 +725,7 @@ EAPI void elm_win_conformant_set(Evas_Object *obj, Eina_Bool conformant);
*
* @return The conformant flag.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_conformant_get(const Evas_Object *obj);
@@ -741,7 +741,7 @@ EAPI Eina_Bool elm_win_conformant_get(const Evas_Object *obj);
*
* @since 1.9
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_wm_rotation_manual_rotation_done_set(Evas_Object *obj, Eina_Bool set);
@@ -754,7 +754,7 @@ EAPI void elm_win_wm_rotation_manual_rotation_done_set(Evas_Object *obj, Eina_Bo
*
* @since 1.9
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_wm_rotation_manual_rotation_done_get(const Evas_Object *obj);
@@ -765,7 +765,7 @@ EAPI Eina_Bool elm_win_wm_rotation_manual_rotation_done_get(const Evas_Object *o
*
* @since 1.9
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_wm_rotation_manual_rotation_done(Evas_Object *obj);
@@ -782,7 +782,7 @@ EAPI void elm_win_wm_rotation_manual_rotation_done(Evas_Object *obj);
* @param[in] rotation The rotation of the window, in degrees (0-360),
* counter-clockwise.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_rotation_set(Evas_Object *obj, int rotation);
@@ -791,7 +791,7 @@ EAPI void elm_win_rotation_set(Evas_Object *obj, int rotation);
*
* @return The rotation of the window, in degrees (0-360), counter-clockwise.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI int elm_win_rotation_get(const Evas_Object *obj);
@@ -804,7 +804,7 @@ EAPI int elm_win_rotation_get(const Evas_Object *obj);
* @param[in] rotation The rotation of the window in degrees (0-360),
* counter-clockwise.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_rotation_with_resize_set(Evas_Object *obj, int rotation);
@@ -820,7 +820,7 @@ EAPI void elm_win_rotation_with_resize_set(Evas_Object *obj, int rotation);
*
* @since 1.9
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_wm_rotation_supported_get(const Evas_Object *obj);
@@ -834,7 +834,7 @@ EAPI Eina_Bool elm_win_wm_rotation_supported_get(const Evas_Object *obj);
*
* @since 1.9
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI int elm_win_wm_rotation_preferred_rotation_get(const Evas_Object *obj);
@@ -845,7 +845,7 @@ EAPI int elm_win_wm_rotation_preferred_rotation_get(const Evas_Object *obj);
* @param[out] x The int to store the x coordinate to.
* @param[out] y The int to store the y coordinate to.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_screen_position_get(const Evas_Object *obj, int *x, int *y);
@@ -857,7 +857,7 @@ EAPI void elm_win_screen_position_get(const Evas_Object *obj, int *x, int *y);
* @param[out] w Where to return the width value. May be @c null.
* @param[out] h Where to return the height value. May be @c null.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_screen_size_get(const Evas_Object *obj, int *x, int *y, int *w, int *h);
@@ -871,7 +871,7 @@ EAPI void elm_win_screen_size_get(const Evas_Object *obj, int *x, int *y, int *w
*
* @since 1.7
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_screen_dpi_get(const Evas_Object *obj, int *xdpi, int *ydpi);
@@ -880,7 +880,7 @@ EAPI void elm_win_screen_dpi_get(const Evas_Object *obj, int *xdpi, int *ydpi);
*
* @param[in] icon_name The icon name to set.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_icon_name_set(Evas_Object *obj, const char *icon_name);
@@ -893,7 +893,7 @@ EAPI void elm_win_icon_name_set(Evas_Object *obj, const char *icon_name);
*
* @return The icon name to set.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI const char *elm_win_icon_name_get(const Evas_Object *obj);
@@ -902,7 +902,7 @@ EAPI const char *elm_win_icon_name_get(const Evas_Object *obj);
*
* @param[in] withdrawn If true, the window is withdrawn.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_withdrawn_set(Evas_Object *obj, Eina_Bool withdrawn);
@@ -911,7 +911,7 @@ EAPI void elm_win_withdrawn_set(Evas_Object *obj, Eina_Bool withdrawn);
*
* @return If true, the window is withdrawn.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_withdrawn_get(const Evas_Object *obj);
@@ -920,7 +920,7 @@ EAPI Eina_Bool elm_win_withdrawn_get(const Evas_Object *obj);
*
* @param[in] urgent If true, the window is urgent.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_urgent_set(Evas_Object *obj, Eina_Bool urgent);
@@ -929,7 +929,7 @@ EAPI void elm_win_urgent_set(Evas_Object *obj, Eina_Bool urgent);
*
* @return If true, the window is urgent.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_urgent_get(const Evas_Object *obj);
@@ -938,7 +938,7 @@ EAPI Eina_Bool elm_win_urgent_get(const Evas_Object *obj);
*
* @param[in] demand_attention If true, the window is demand_attention.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_demand_attention_set(Evas_Object *obj, Eina_Bool demand_attention);
@@ -947,7 +947,7 @@ EAPI void elm_win_demand_attention_set(Evas_Object *obj, Eina_Bool demand_attent
*
* @return If true, the window is demand_attention.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_demand_attention_get(const Evas_Object *obj);
@@ -956,7 +956,7 @@ EAPI Eina_Bool elm_win_demand_attention_get(const Evas_Object *obj);
*
* @param[in] modal If true, the window is modal.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_modal_set(Evas_Object *obj, Eina_Bool modal);
@@ -965,7 +965,7 @@ EAPI void elm_win_modal_set(Evas_Object *obj, Eina_Bool modal);
*
* @return If true, the window is modal.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_modal_get(const Evas_Object *obj);
@@ -981,7 +981,7 @@ EAPI Eina_Bool elm_win_modal_get(const Evas_Object *obj);
*
* @param[in] shaped If @c true, the window is shaped.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_shaped_set(Evas_Object *obj, Eina_Bool shaped);
@@ -990,7 +990,7 @@ EAPI void elm_win_shaped_set(Evas_Object *obj, Eina_Bool shaped);
*
* @return If @c true, the window is shaped.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_shaped_get(const Evas_Object *obj);
@@ -999,7 +999,7 @@ EAPI Eina_Bool elm_win_shaped_get(const Evas_Object *obj);
*
* @param[in] title The title.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_title_set(Evas_Object *obj, const char *title);
@@ -1011,7 +1011,7 @@ EAPI void elm_win_title_set(Evas_Object *obj, const char *title);
*
* @return The title.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI const char *elm_win_title_get(const Evas_Object *obj);
@@ -1025,7 +1025,7 @@ EAPI const char *elm_win_title_get(const Evas_Object *obj);
*
* @since 1.7
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_size_base_set(Evas_Object *obj, int w, int h);
@@ -1037,7 +1037,7 @@ EAPI void elm_win_size_base_set(Evas_Object *obj, int w, int h);
*
* @since 1.7
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_size_base_get(const Evas_Object *obj, int *w, int *h);
@@ -1051,7 +1051,7 @@ EAPI void elm_win_size_base_get(const Evas_Object *obj, int *w, int *h);
*
* @since 1.7
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_size_step_set(Evas_Object *obj, int w, int h);
@@ -1063,7 +1063,7 @@ EAPI void elm_win_size_step_set(Evas_Object *obj, int w, int h);
*
* @since 1.7
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_size_step_get(const Evas_Object *obj, int *w, int *h);
@@ -1078,7 +1078,7 @@ EAPI void elm_win_size_step_get(const Evas_Object *obj, int *w, int *h);
*
* @param[in] params Optional parameters for the command.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_illume_command_send(Evas_Object *obj, Elm_Illume_Command command, void *params);
@@ -1089,7 +1089,7 @@ EAPI void elm_win_illume_command_send(Evas_Object *obj, Elm_Illume_Command comma
*
* @since 1.8
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_profile_set(Evas_Object *obj, const char *profile);
@@ -1100,7 +1100,7 @@ EAPI void elm_win_profile_set(Evas_Object *obj, const char *profile);
*
* @since 1.8
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI const char *elm_win_profile_get(const Evas_Object *obj);
@@ -1116,7 +1116,7 @@ EAPI const char *elm_win_profile_get(const Evas_Object *obj);
*
* @param[in] layer The layer of the window.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_layer_set(Evas_Object *obj, int layer);
@@ -1125,7 +1125,7 @@ EAPI void elm_win_layer_set(Evas_Object *obj, int layer);
*
* @return The layer of the window.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI int elm_win_layer_get(const Evas_Object *obj);
@@ -1140,7 +1140,7 @@ EAPI int elm_win_layer_get(const Evas_Object *obj);
*
* @return The inlined image object or @c null if none exists.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Evas_Object *elm_win_inlined_image_object_get(const Evas_Object *obj);
@@ -1149,7 +1149,7 @@ EAPI Evas_Object *elm_win_inlined_image_object_get(const Evas_Object *obj);
*
* @param[in] oee
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*
* @deprecated
*/
@@ -1163,7 +1163,7 @@ EAPI void elm_win_fake_canvas_set(Evas_Object *obj, Ecore_Evas *oee) EINA_DEPREC
* @param obj The window object
* @return The Ecore_Window of an Evas_Object
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
* @since 1.8
* @note Unless you are getting the window id for the purpose of communicating between client<->compositor over dbus,
* this is definitely not the function you are looking for.
@@ -1175,7 +1175,7 @@ EAPI Ecore_Window elm_win_window_id_get(const Evas_Object *obj);
*
* @return The Main Menu of the window ($null on error).
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Evas_Object *elm_win_main_menu_get(Evas_Object *obj);
@@ -1184,7 +1184,7 @@ EAPI Evas_Object *elm_win_main_menu_get(Evas_Object *obj);
*
* @param[in] mode The mode, one of #Elm_Win_Keyboard_Mode.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_keyboard_mode_set(Elm_Win *obj, Elm_Win_Keyboard_Mode mode);
@@ -1193,7 +1193,7 @@ EAPI void elm_win_keyboard_mode_set(Elm_Win *obj, Elm_Win_Keyboard_Mode mode);
*
* @return The mode, one of #Elm_Win_Keyboard_Mode.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Elm_Win_Keyboard_Mode elm_win_keyboard_mode_get(const Elm_Win *obj);
@@ -1267,7 +1267,7 @@ EAPI Evas_Object *elm_win_get(Evas_Object *obj);
*
* @return @c true on success, @c false otherwise
*
- * @ingroup Efl_Ui_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_socket_listen(Elm_Win *obj, const char *svcname, int svcnum, Eina_Bool svcsys);
@@ -1276,7 +1276,7 @@ EAPI Eina_Bool elm_win_socket_listen(Elm_Win *obj, const char *svcname, int svcn
*
* @return @c true if window has focus, @c false otherwise
*
- * @ingroup Efl_Ui_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_focus_get(const Elm_Win *obj);
@@ -1286,7 +1286,7 @@ EAPI Eina_Bool elm_win_focus_get(const Elm_Win *obj);
* Places the window pointed by @c obj at the top of the stack, so that it's
* not covered by any other window.
*
- * @ingroup Efl_Ui_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_raise(Elm_Win *obj);
@@ -1298,7 +1298,7 @@ EAPI void elm_win_raise(Elm_Win *obj);
*
* @since 1.8
*
- * @ingroup Efl_Ui_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_available_profiles_set(Elm_Win *obj, const char **profiles, unsigned int count);
@@ -1312,7 +1312,7 @@ EAPI void elm_win_available_profiles_set(Elm_Win *obj, const char **profiles, un
*
* @since 1.8
*
- * @ingroup Efl_Ui_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_available_profiles_get(const Elm_Win *obj, char ***profiles, unsigned int *count);
@@ -1328,7 +1328,7 @@ EAPI Eina_Bool elm_win_available_profiles_get(const Elm_Win *obj, char ***profil
*
* @since 1.9
*
- * @ingroup Efl_Ui_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_wm_rotation_available_rotations_set(Elm_Win *obj, const int *rotations, unsigned int count);
@@ -1345,7 +1345,7 @@ EAPI void elm_win_wm_rotation_available_rotations_set(Elm_Win *obj, const int *r
*
* @since 1.9
*
- * @ingroup Efl_Ui_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_wm_rotation_available_rotations_get(const Elm_Win *obj, int **rotations, unsigned int *count);
@@ -1893,7 +1893,7 @@ EAPI Eina_Bool elm_win_move_resize_start(Evas_Object *obj, Elm_Win_Move_Resize_M
*
* @param[in] animate The enabled value for the highlight animation.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_focus_highlight_animate_set(Elm_Win *obj, Eina_Bool animate);
@@ -1902,7 +1902,7 @@ EAPI void elm_win_focus_highlight_animate_set(Elm_Win *obj, Eina_Bool animate);
*
* @return The enabled value for the highlight animation.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_focus_highlight_animate_get(const Elm_Win *obj);
@@ -1914,7 +1914,7 @@ EAPI Eina_Bool elm_win_focus_highlight_animate_get(const Elm_Win *obj);
*
* @param[in] enabled The enabled value for the highlight.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI void elm_win_focus_highlight_enabled_set(Elm_Win *obj, Eina_Bool enabled);
@@ -1923,7 +1923,7 @@ EAPI void elm_win_focus_highlight_enabled_set(Elm_Win *obj, Eina_Bool enabled);
*
* @return The enabled value for the highlight.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_focus_highlight_enabled_get(const Elm_Win *obj);
@@ -1935,7 +1935,7 @@ EAPI Eina_Bool elm_win_focus_highlight_enabled_get(const Elm_Win *obj);
*
* @param[in] style The style or @c null if none.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI Eina_Bool elm_win_focus_highlight_style_set(Elm_Win *obj, const char *style);
@@ -1944,6 +1944,6 @@ EAPI Eina_Bool elm_win_focus_highlight_style_set(Elm_Win *obj, const char *style
*
* @return The style or @c null if none.
*
- * @ingroup Elm_Win
+ * @ingroup Elm_Win_Group
*/
EAPI const char *elm_win_focus_highlight_style_get(const Elm_Win *obj);
diff --git a/src/lib/elementary/els_box.c b/src/lib/elementary/els_box.c
index de39796d57..73ff133824 100644
--- a/src/lib/elementary/els_box.c
+++ b/src/lib/elementary/els_box.c
@@ -246,7 +246,7 @@ _smart_extents_calculate(Evas_Object *box, Evas_Object_Box_Data *priv, int w, in
EINA_LIST_FOREACH(priv->children, l, opt)
{
Evas_Aspect_Control aspect = EVAS_ASPECT_CONTROL_NONE;
- int asx, asy, ow = 0, oh = 0, fw, fh, ww, hh;
+ int asx, asy, ow = 0, oh = 0, fw = 0, fh = 0, ww, hh;
double ax, ay;
evas_object_size_hint_align_get(opt->obj, &ax, &ay);
@@ -329,17 +329,22 @@ _smart_extents_calculate(Evas_Object *box, Evas_Object_Box_Data *priv, int w, in
else
{
/* returns true if at least one item has aspect hint */
- if (_smart_extents_non_homogeneous_calc(priv, w, h, &minw, &minh, &maxw, &maxh, expand, horizontal, 0))
+ if (_smart_extents_non_homogeneous_calc(priv, w, h, &minw, &minh,
+ &maxw, &maxh, expand,
+ horizontal, EINA_FALSE))
{
/* aspect can only be accurately calculated after the full (non-aspected) min size of the box has
* been calculated due to the use of this min size during aspect calculations
*/
int aminw = minw;
int aminh = minh;
- _smart_extents_padding_calc(priv, &minw, &minh, &maxw, &maxh, horizontal);
- _smart_extents_non_homogeneous_calc(priv, w, h, &aminw, &aminh, &maxw, &maxh, expand, horizontal, 1);
- if (horizontal) minh = aminh;
- else minw = aminw;
+ _smart_extents_padding_calc(priv, &minw, &minh, &maxw, &maxh,
+ horizontal);
+ _smart_extents_non_homogeneous_calc(priv, w, h, &aminw, &aminh,
+ &maxw, &maxh, expand,
+ horizontal, EINA_TRUE);
+ if (horizontal) minw = aminw;
+ else minh = aminh;
}
}
_smart_extents_padding_calc(priv, &minw, &minh, &maxw, &maxh, horizontal);
@@ -390,7 +395,7 @@ _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, Eina_Bool horizontal
}
count = eina_list_count(priv->children);
- if (!expand)
+ if (EINA_DBL_EQ(expand, 0))
{
if (rtl) ax = 1.0 - ax;
if (horizontal)
@@ -430,8 +435,8 @@ _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, Eina_Bool horizontal
fw = fh = 0;
xw = xh = 0;
/* align(-1) means fill to maximum apportioned size */
- if (ax == -1.0) {fw = 1; ax = 0.5;}
- if (ay == -1.0) {fh = 1; ay = 0.5;}
+ if (EINA_DBL_EQ(ax, -1.0)) {fw = 1; ax = 0.5;}
+ if (EINA_DBL_EQ(ay, -1.0)) {fh = 1; ay = 0.5;}
if (rtl) ax = 1.0 - ax;
if (wx > 0.0) xw = 1;
if (wy > 0.0) xh = 1;
@@ -454,11 +459,13 @@ _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, Eina_Bool horizontal
}
hh = h;
- _box_object_aspect_calc(&ow, &oh, mnw, mnh, mxw, mxh, fw, fh, ww, hh, aspect, asx / (double)asy);
- /* non-homogeneous, aspected, expending items are calculated based on object size
- * during extents calc, so use this for positioning during layout as well
+ _box_object_aspect_calc(&ow, &oh, mnw, mnh, mxw, mxh, fw, fh,
+ ww, hh, aspect, asx / (double)asy);
+ /* non-homogeneous, aspected, expending items are calculated
+ * based on object size during extents calc, so use this for
+ * positioning during layout as well
*/
- if (xw && aspect && (!homogeneous))
+ if (aspect && (!homogeneous))
ww = ow;
evas_object_move(obj,
((!rtl) ? (xx + pad_l) : (x + (w - (xx - x) - ww) + pad_r))
@@ -489,8 +496,9 @@ _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, Eina_Bool horizontal
}
ww = w;
- _box_object_aspect_calc(&ow, &oh, mnw, mnh, mxw, mxh, fw, fh, ww, hh, aspect, asx / (double)asy);
- if (xh && aspect && (!homogeneous))
+ _box_object_aspect_calc(&ow, &oh, mnw, mnh, mxw, mxh, fw, fh,
+ ww, hh, aspect, asx / (double)asy);
+ if (aspect && (!homogeneous))
hh = oh;
evas_object_move(obj,
xx + (Evas_Coord)(((double)(ww - ow)) * ax) + pad_l,
diff --git a/src/lib/elementary/els_cursor.c b/src/lib/elementary/els_cursor.c
index eeb1d18f85..4b3622a39e 100644
--- a/src/lib/elementary/els_cursor.c
+++ b/src/lib/elementary/els_cursor.c
@@ -42,6 +42,7 @@ struct _Cursor_Id
# define CURSOR(_name, _id, _cid) { _name }
#endif
+#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_COCOA) || defined(HAVE_ELEMENTARY_WIN32)
/* Please keep order in sync with Ecore_X_Cursor.h values! */
static struct _Cursor_Id _cursors[] =
{
@@ -124,7 +125,6 @@ static struct _Cursor_Id _cursors[] =
CURSOR(ELM_CURSOR_XTERM , XTERM , ECORE_COCOA_CURSOR_IBEAM)
};
-#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_COCOA) || defined(HAVE_ELEMENTARY_WIN32)
static const int _cursors_count = sizeof(_cursors)/sizeof(struct _Cursor_Id);
#endif
diff --git a/src/lib/elementary/els_tooltip.c b/src/lib/elementary/els_tooltip.c
index 78b09e8373..6613745653 100644
--- a/src/lib/elementary/els_tooltip.c
+++ b/src/lib/elementary/els_tooltip.c
@@ -385,7 +385,7 @@ _elm_tooltip_reconfigure_orient(Elm_Tooltip *tt,
{
dx = -mx;
mx = -(px / 2);
- if (tt->rel_pos.x == 0.5)
+ if (EINA_DBL_EQ(tt->rel_pos.x, 0.5))
{
tt->rel_pos.x = 0.5 - dx / (double)tcw;
if (tt->rel_pos.x < 0.0) tt->rel_pos.x = 0.0;
@@ -395,7 +395,7 @@ _elm_tooltip_reconfigure_orient(Elm_Tooltip *tt,
{
dx = mx + tw - cw;
mx = cw - tw + px / 2;
- if (tt->rel_pos.x == 0.5)
+ if (EINA_DBL_EQ(tt->rel_pos.x, 0.5))
{
tt->rel_pos.x = 0.5 + dx / (double)tcw;
if (tt->rel_pos.x > 1.0) tt->rel_pos.x = 1.0;
@@ -406,7 +406,7 @@ _elm_tooltip_reconfigure_orient(Elm_Tooltip *tt,
{
dy = -my;
my = -(py / 2);
- if (tt->rel_pos.y == 0.5)
+ if (EINA_DBL_EQ(tt->rel_pos.y, 0.5))
{
tt->rel_pos.y = 0.5 - dy / (double)tch;
if (tt->rel_pos.y < 0.0) tt->rel_pos.y = 0.0;
@@ -416,7 +416,7 @@ _elm_tooltip_reconfigure_orient(Elm_Tooltip *tt,
{
dy = my + th - ch;
my = ch - th + py / 2;
- if (tt->rel_pos.y == 0.5)
+ if (EINA_DBL_EQ(tt->rel_pos.y, 0.5))
{
tt->rel_pos.y = 0.5 + dy / (double)tch;
if (tt->rel_pos.y > 1.0) tt->rel_pos.y = 1.0;
diff --git a/src/lib/elementary/meson.build b/src/lib/elementary/meson.build
index 8872c2c25c..6076e21f8a 100644
--- a/src/lib/elementary/meson.build
+++ b/src/lib/elementary/meson.build
@@ -17,6 +17,9 @@ pub_legacy_eo_files = [
'elm_actionslider_part.eo',
'elm_bubble_part.eo',
'elm_fileselector_part.eo',
+ 'elm_multibuttonentry_part.eo',
+ 'elm_interface_scrollable.eo',
+ 'elm_code_widget.eo',
]
pub_eo_file_target = []
@@ -39,7 +42,8 @@ endforeach
pub_eo_files = [
'efl_ui_widget.eo',
'efl_ui_widget_scrollable_content.eo',
- 'efl_ui_animation_view.eo',
+ 'efl_ui_vg_animation.eo',
+ 'efl_ui_vg_animation_part.eo',
'efl_ui_bg.eo',
'efl_ui_button.eo',
'efl_ui_calendar.eo',
@@ -139,17 +143,15 @@ pub_eo_files = [
'efl_access_window.eo',
'efl_ui_theme.eo',
'efl_config_global.eo',
- 'elm_code_widget.eo',
'efl_ui_selection.eo',
'efl_ui_dnd.eo',
- 'efl_ui_dnd_container.eo',
'efl_ui_focus_manager_window_root.eo',
'efl_ui_spotlight_container.eo',
'efl_ui_spotlight_manager.eo',
- 'efl_ui_spotlight_manager_scroll.eo',
- 'efl_ui_spotlight_manager_stack.eo',
+ 'efl_ui_spotlight_scroll_manager.eo',
+ 'efl_ui_spotlight_fade_manager.eo',
'efl_ui_spotlight_indicator.eo',
- 'efl_ui_spotlight_indicator_icon.eo',
+ 'efl_ui_spotlight_icon_indicator.eo',
'efl_ui_spotlight_util.eo',
'efl_ui_tab_pager.eo',
'efl_ui_tab_bar.eo',
@@ -160,10 +162,8 @@ pub_eo_files = [
'efl_ui_radio_legacy_part.eo',
'efl_ui_check_legacy_part.eo',
'efl_ui_progressbar_legacy_part.eo',
- 'elm_multibuttonentry_part.eo',
- 'elm_interface_scrollable.eo',
'efl_ui_image_zoomable_pan.eo',
- 'efl_ui_text_part.eo',
+ 'efl_ui_textbox_part.eo',
'efl_ui_caching_factory.eo',
'efl_ui_widget_factory.eo',
'efl_ui_property_bind_part.eo',
@@ -189,6 +189,8 @@ pub_eo_files = [
'efl_ui_grid_view.eo',
'efl_ui_pager.eo',
'efl_ui_stack.eo',
+ 'efl_ui_separator.eo',
+ 'efl_ui_spotlight_animation_manager.eo',
]
foreach eo_file : pub_eo_files
@@ -209,8 +211,6 @@ endforeach
pub_eo_types_files = [
'elm_general.eot',
'efl_ui.eot',
- 'efl_ui_selection_types.eot',
- 'efl_ui_dnd_types.eot'
]
foreach eo_file : pub_eo_types_files
@@ -234,13 +234,12 @@ priv_eo_files = [
'efl_ui_focus_parent_provider.eo',
'efl_ui_focus_parent_provider_standard.eo',
'efl_ui_state_model.eo',
- 'efl_ui_selection_manager.eo',
'efl_datetime_manager.eo',
'efl_ui_size_model.eo',
'efl_ui_homogeneous_model.eo',
'efl_ui_exact_model.eo',
'efl_ui_average_model.eo',
- 'efl_ui_spotlight_manager_plain.eo',
+ 'efl_ui_spotlight_plain_manager.eo',
'efl_ui_collection_focus_manager.eo',
]
@@ -301,7 +300,7 @@ elementary_headers_unstable = [
'efl_ui_widget_flip.h',
'elm_widget_flipselector.h',
'efl_ui_widget_frame.h',
- 'efl_ui_animation_view_private.h',
+ 'efl_ui_vg_animation_private.h',
'elm_widget_gengrid.h',
'elm_widget_genlist.h',
'elm_widget_glview.h',
@@ -401,8 +400,8 @@ elementary_pub_headers = [
'elc_naviframe_common.h',
'elc_popup.h',
'elc_popup_legacy.h',
- 'efl_ui_animation_view.h',
- 'efl_ui_animation_view_legacy.h',
+ 'efl_ui_vg_animation.h',
+ 'efl_ui_vg_animation_legacy.h',
'elm_access.h',
'elm_actionslider.h',
'elm_actionslider_legacy.h',
@@ -592,7 +591,7 @@ elementary_pub_headers = [
'elm_win_legacy.h',
'elm_helper.h',
'elm_part_helper.h',
- 'efl_ui_animation_view_eo.legacy.h',
+ 'efl_ui_vg_animation_eo.legacy.h',
'efl_ui_bg_eo.legacy.h',
'efl_ui_bg_legacy_eo.legacy.h',
'efl_ui_button_eo.legacy.h',
@@ -714,7 +713,7 @@ elementary_header_src = [
'Elementary_Cursor.h'
] + elementary_pub_headers + elementary_headers_unstable
-elementary_src = [
+elementary_src = files([
'elm_priv.h',
'elementary_config.h',
'els_box.h',
@@ -731,7 +730,7 @@ elementary_src = [
'elc_popup.c',
'elc_scrolled_entry.c',
'elm_access.c',
- 'efl_ui_animation_view.c',
+ 'efl_ui_vg_animation.c',
'elm_actionslider.c',
'elm_atspi_app_object.c',
'elm_atspi_bridge.c',
@@ -784,6 +783,8 @@ elementary_src = [
'elm_icon.c',
'efl_ui_image.c',
'elm_index.c',
+ 'elm_cnp.c',
+ 'elm_dnd.c',
'efl_access_object.c',
'efl_access_action.c',
'efl_access_component.c',
@@ -906,7 +907,6 @@ elementary_src = [
'efl_ui_scroller.c',
'efl_ui_scroll_manager.c',
'efl_ui_pan.c',
- 'efl_ui_selection_manager.c',
'efl_ui_selection_manager_private.h',
'efl_ui_selection.c',
'efl_datetime_manager.c',
@@ -914,11 +914,11 @@ elementary_src = [
'elm_focus_legacy.c',
'efl_ui_spotlight_container.c',
'efl_ui_spotlight_manager.c',
- 'efl_ui_spotlight_manager_plain.c',
- 'efl_ui_spotlight_manager_scroll.c',
- 'efl_ui_spotlight_manager_stack.c',
+ 'efl_ui_spotlight_plain_manager.c',
+ 'efl_ui_spotlight_scroll_manager.c',
+ 'efl_ui_spotlight_fade_manager.c',
'efl_ui_spotlight_indicator.c',
- 'efl_ui_spotlight_indicator_icon.c',
+ 'efl_ui_spotlight_icon_indicator.c',
'efl_ui_spotlight_util.c',
'efl_ui_focus_graph.h',
'efl_ui_focus_graph.c',
@@ -945,13 +945,15 @@ elementary_src = [
'efl_ui_view_model.c',
'efl_ui_collection_view.c',
'efl_ui_pager.c',
- 'efl_ui_stack.c'
-]
+ 'efl_ui_stack.c',
+ 'efl_ui_separator.c',
+ 'efl_ui_spotlight_animation_manager.c',
+])
-elementary_deps = [emile, eo, efl, edje, ethumb, ethumb_client, emotion, ecore_imf, ecore_con, eldbus, efreet, efreet_mime, efreet_trash, eio, atspi, dl, intl]
+elementary_deps = [emile, eo, efl, edje, ethumb, ethumb_client, emotion, ecore_imf, ecore_con, eldbus, efreet, eio, buildsystem]
elementary_pub_deps = [eina, eet, evas, ecore, ecore_evas, ecore_file, ecore_input, ecore_imf, ecore_con,
- edje, eldbus, efreet, efreet_mime, efreet_trash, ethumb_client, efl]
-
+ edje, eldbus, efreet, ethumb_client, efl]
+elementary_ext_deps = [atspi, dl, intl, buildsystem_simple]
elm_options = configuration_data()
config_h.set_quoted('ELM_TOP_BUILD_DIR', meson.build_root())
@@ -961,8 +963,6 @@ config_h.set_quoted('ICON_DIR', join_paths(dir_lib, 'icons'))
if sys_windows == false
elm_options.set('ELM_UNIX', '1')
-else
- elm_options.set('DLL_EXPORT', '1')
endif
elm_options.set('ELM_EFREET', '1')
@@ -987,6 +987,10 @@ endif
if get_option('wl')
config_h.set('HAVE_ELEMENTARY_WL2', '1')
elementary_deps += ecore_wl2
+ elementary_ext_deps += declare_dependency(
+ include_directories: include_directories([join_paths('..', '..', 'modules', 'ecore_evas', 'engines', 'wayland'), join_paths('..', '..', 'lib', 'ecore_wl2')]),
+ dependencies : ecore_wl2_internal_headers
+ )
endif
if get_option('drm')
@@ -1009,12 +1013,13 @@ c = configure_file(
install_dir : dir_package_include,
configuration: elm_options)
-elm_package_c_args = package_c_args + ['-DELEMENTARY_BUILD=1']
+# Save in extra variable here to pass to edje_external
+elm_package_c_args = package_c_args
elementary_lib = library('elementary',
elementary_src, pub_eo_file_target, priv_eo_file_target, c, embed_config,
- dependencies: elementary_pub_deps + elementary_deps,
- include_directories : config_dir + [include_directories('.')] + [include_directories(join_paths('..', '..', '..'))] + [ecore_evas_wayland_engine_include_dir],
+ dependencies: elementary_pub_deps + elementary_deps + elementary_ext_deps,
+ include_directories : config_dir + [include_directories('.')] + [include_directories(join_paths('..', '..', '..'))],
install: true,
c_args : elm_package_c_args,
version : meson.project_version()
@@ -1027,7 +1032,6 @@ elementary = declare_dependency(
dependencies: elementary_pub_deps,
)
-
if get_option('install-eo-files')
install_data(pub_eo_files + pub_eo_types_files,
install_dir: join_paths(eolian_include_dir, package_version_name)
diff --git a/src/lib/elput/Elput.h b/src/lib/elput/Elput.h
index 14a706949d..7a05f8e795 100644
--- a/src/lib/elput/Elput.h
+++ b/src/lib/elput/Elput.h
@@ -2,22 +2,21 @@
# define _ELPUT_H
# ifdef EFL_BETA_API_SUPPORT
-# include <Eina.h>
+# include <Eina.h>
-# ifdef EAPI
-# undef EAPI
-# endif
+# ifdef EAPI
+# undef EAPI
+# endif
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
+# ifdef __GNUC__
+# if __GNUC__ >= 4
+# define EAPI __attribute__ ((visibility("default")))
+# else
+# define EAPI
+# endif
# else
# define EAPI
# endif
-# else
-# define EAPI
-# endif
-
typedef enum
{
@@ -183,7 +182,7 @@ EAPI int elput_init(void);
EAPI int elput_shutdown(void);
/**
- * @defgroup Elput_Manager_Group
+ * @defgroup Elput_Manager_Group Elput Manager
*
* Functions that deal with connecting, disconnecting, opening, closing
* of input devices.
@@ -194,7 +193,6 @@ EAPI int elput_shutdown(void);
*
* @param seat
* @param tty
- * @param sync
*
* @return A Elput_Manager on success, NULL on failure
*
diff --git a/src/lib/elput/elput_evdev.c b/src/lib/elput/elput_evdev.c
index 635061a08c..3ca7f824c3 100644
--- a/src/lib/elput/elput_evdev.c
+++ b/src/lib/elput/elput_evdev.c
@@ -317,7 +317,7 @@ _keyboard_key_send(Elput_Device *dev, enum libinput_key_state state, const char
{
Ecore_Event_Key *ev;
- ev = calloc(1, sizeof(Ecore_Event_Key) + strlen(key) + strlen(keyname) +
+ ev = calloc(1, sizeof(Ecore_Event_Key) + strlen(key) + strlen(keyname) +
((compose[0] != '\0') ? strlen(compose) : 0) + 3);
if (!ev) return;
diff --git a/src/lib/elput/elput_logind.c b/src/lib/elput/elput_logind.c
index cca5ea7eb7..8a69da963f 100644
--- a/src/lib/elput/elput_logind.c
+++ b/src/lib/elput/elput_logind.c
@@ -1,6 +1,114 @@
#include "elput_private.h"
-#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
+#ifdef HAVE_SYSTEMD
+
+# ifdef major
+# define MAJOR(x) major(x)
+# else
+# define MAJOR(x) ((((x) >> 8) & 0xfff) | (((x) >> 32) & ~0xfff))
+# endif
+
+# ifdef minor
+# define MINOR(x) minor(x)
+# else
+# define MINOR(x) (((x) & 0xff) | (((x) >> 12) & ~0xff))
+# endif
+
+static Eina_Module *_libsystemd = NULL;
+static Eina_Bool _libsystemd_broken = EINA_FALSE;
+
+static int (*_elput_sd_session_get_vt) (const char *session, unsigned *vtnr) = NULL;
+static int (*_elput_sd_session_get_tty) (const char *session, char **display) = NULL;
+static int (*_elput_sd_pid_get_session) (pid_t pid, char **session) = NULL;
+static int (*_elput_sd_session_get_seat) (const char *session, char **seat) = NULL;
+static int (*_elput_sd_seat_can_tty) (const char *seat) = NULL;
+
+void
+_elput_sd_init(void)
+{
+ if (_libsystemd_broken) return;
+ _libsystemd = eina_module_new("libsystemd.so.0");
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ if (!_libsystemd)
+ {
+ const char *s = getenv("EFL_ELOGIND_LIB");
+
+ if (s)
+ {
+ _libsystemd = eina_module_new(s);
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ }
+ if (!_libsystemd)
+ {
+ _libsystemd = eina_module_new("libelogind-shared.so.0");
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ }
+ if (!_libsystemd)
+ {
+ _libsystemd = eina_module_new("libelogind.so.0");
+ if (_libsystemd)
+ {
+ if (!eina_module_load(_libsystemd))
+ {
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ }
+ }
+ }
+ }
+ if (!_libsystemd)
+ {
+ _libsystemd_broken = EINA_TRUE;
+ return;
+ }
+ // sd_session_get_vt == newer in systemd 207
+ _elput_sd_session_get_vt =
+ eina_module_symbol_get(_libsystemd, "sd_session_get_vt");
+ // sd_session_get_tty == older api in ssystemd 198
+ _elput_sd_session_get_tty =
+ eina_module_symbol_get(_libsystemd, "sd_session_get_tty");
+ _elput_sd_pid_get_session =
+ eina_module_symbol_get(_libsystemd, "sd_pid_get_session");
+ _elput_sd_session_get_seat =
+ eina_module_symbol_get(_libsystemd, "sd_session_get_seat");
+ _elput_sd_seat_can_tty =
+ eina_module_symbol_get(_libsystemd, "sd_seat_can_tty");
+ if (((!_elput_sd_session_get_vt) && (!_elput_sd_session_get_tty)) ||
+ (!_elput_sd_pid_get_session) ||
+ (!_elput_sd_session_get_seat) || (!_elput_sd_seat_can_tty))
+ {
+ _elput_sd_session_get_vt = NULL;
+ _elput_sd_session_get_tty = NULL;
+ _elput_sd_pid_get_session = NULL;
+ _elput_sd_session_get_seat = NULL;
+ _elput_sd_seat_can_tty = NULL;
+ eina_module_free(_libsystemd);
+ _libsystemd = NULL;
+ _libsystemd_broken = EINA_TRUE;
+ }
+}
+
static void
_logind_session_active_cb_free(void *data EINA_UNUSED, void *event)
@@ -140,13 +248,16 @@ _cb_device_resumed(void *data, const Eldbus_Message *msg)
static Eina_Bool
_logind_session_vt_get(const char *sid, unsigned int *vt)
{
-# ifdef HAVE_SYSTEMD_LOGIN_209
- return (sd_session_get_vt(sid, vt) >= 0);
-# else
int ret = 0;
char *tty;
- ret = sd_session_get_tty(sid, &tty);
+ _elput_sd_init();
+ if ((!_elput_sd_session_get_vt) && (!_elput_sd_session_get_tty))
+ return EINA_FALSE;
+ if (_elput_sd_session_get_vt)
+ return (_elput_sd_session_get_vt(sid, vt) >= 0);
+
+ ret = _elput_sd_session_get_tty(sid, &tty);
if (ret < 0) return ret;
ret = sscanf(tty, "tty%u", vt);
@@ -154,7 +265,6 @@ _logind_session_vt_get(const char *sid, unsigned int *vt)
if (ret != 1) return EINA_FALSE;
return EINA_TRUE;
-# endif
}
static Eina_Bool
@@ -489,13 +599,16 @@ _logind_connect(Elput_Manager **manager, const char *seat, unsigned int tty)
int ret = 0;
char *s = NULL;
+ _elput_sd_init();
+ if (!_elput_sd_pid_get_session) return EINA_FALSE;
+
em = calloc(1, sizeof(Elput_Manager));
if (!em) return EINA_FALSE;
em->interface = &_logind_interface;
em->seat = eina_stringshare_add(seat);
- ret = sd_pid_get_session(getpid(), &em->sid);
+ ret = _elput_sd_pid_get_session(getpid(), &em->sid);
if (ret < 0)
{
@@ -508,7 +621,7 @@ _logind_connect(Elput_Manager **manager, const char *seat, unsigned int tty)
if (!em->sid) goto session_err;
- ret = sd_session_get_seat(em->sid, &s);
+ ret = _elput_sd_session_get_seat(em->sid, &s);
if (ret < 0)
{
ERR("Failed to get session seat");
@@ -522,7 +635,7 @@ _logind_connect(Elput_Manager **manager, const char *seat, unsigned int tty)
goto seat_err;
}
- if ((seat) && (!strcmp(seat, "seat0")))
+ if ((seat) && (_elput_sd_seat_can_tty(seat)))
{
if (!_logind_session_vt_get(em->sid, &em->vt_num))
{
@@ -606,7 +719,7 @@ _logind_open_async(Elput_Manager *em, const char *path, int flags)
if ((stat(path, &st) < 0) || (!S_ISCHR(st.st_mode)))
_logind_pipe_write_fd(em, fd);
else
- _logind_device_take_async(em, flags, major(st.st_rdev), minor(st.st_rdev));
+ _logind_device_take_async(em, flags, MAJOR(st.st_rdev), MINOR(st.st_rdev));
}
static int
@@ -621,10 +734,10 @@ _logind_open(Elput_Manager *em, const char *path, int flags)
if (!S_ISCHR(st.st_mode)) return -1;
- fd = _logind_device_take(em, major(st.st_rdev), minor(st.st_rdev));
+ fd = _logind_device_take(em, MAJOR(st.st_rdev), MINOR(st.st_rdev));
if (fd < 0) return fd;
- if (major(st.st_rdev) == 226) //DRM_MAJOR
+ if (MAJOR(st.st_rdev) == 226) //DRM_MAJOR
em->drm_opens++;
fl = fcntl(fd, F_GETFL);
@@ -640,7 +753,7 @@ _logind_open(Elput_Manager *em, const char *path, int flags)
err:
close(fd);
- _logind_device_release(em, major(st.st_rdev), minor(st.st_rdev));
+ _logind_device_release(em, MAJOR(st.st_rdev), MINOR(st.st_rdev));
return -1;
}
@@ -656,7 +769,7 @@ _logind_close(Elput_Manager *em, int fd)
if (!S_ISCHR(st.st_mode)) return;
- _logind_device_release(em, major(st.st_rdev), minor(st.st_rdev));
+ _logind_device_release(em, MAJOR(st.st_rdev), MINOR(st.st_rdev));
}
static Eina_Bool
diff --git a/src/lib/elput/elput_manager.c b/src/lib/elput/elput_manager.c
index 987e73759b..93f39ea261 100644
--- a/src/lib/elput/elput_manager.c
+++ b/src/lib/elput/elput_manager.c
@@ -2,7 +2,7 @@
static Elput_Interface *_ifaces[] =
{
-#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
+#ifdef HAVE_SYSTEMD
&_logind_interface,
#endif
NULL,
diff --git a/src/lib/elput/elput_private.h b/src/lib/elput/elput_private.h
index 744c5a92e3..fd7d843d2e 100644
--- a/src/lib/elput/elput_private.h
+++ b/src/lib/elput/elput_private.h
@@ -23,14 +23,6 @@
# include <xkbcommon/xkbcommon.h>
# include <xkbcommon/xkbcommon-compose.h>
-# ifdef HAVE_SYSTEMD
-# include <systemd/sd-login.h>
-# endif
-
-# ifdef HAVE_ELOGIND
-# include <elogind/sd-login.h>
-# endif
-
#ifndef ELPUT_NODEFS
# ifdef ELPUT_DEFAULT_LOG_COLOR
# undef ELPUT_DEFAULT_LOG_COLOR
diff --git a/src/lib/elput/meson.build b/src/lib/elput/meson.build
index 2aa3590d2b..639840e424 100644
--- a/src/lib/elput/meson.build
+++ b/src/lib/elput/meson.build
@@ -1,12 +1,12 @@
elput_deps = [ecore, ecore_input, eeze, eo, m]
elput_pub_deps = [eina, eldbus]
-pub_eo_file_target = []
+elput_ext_deps = []
elput_header_src = [
'Elput.h'
]
-elput_src = [
+elput_src = files([
'elput_touch.c',
'elput_evdev.c',
'elput_input.c',
@@ -14,21 +14,16 @@ elput_src = [
'elput_manager.c',
'elput.c',
'elput_private.h'
-]
+])
-elput_deps += dependency('libinput', version : ['>=1.7.0'])
-elput_deps += dependency('xkbcommon', version : ['>=0.3.0'])
-elput_deps += dependency('libudev')
-if get_option('systemd')
- elput_deps += systemd
-endif
-if get_option('elogind')
- elput_deps += dependency('libelogind')
-endif
+elput_ext_deps += dependency('libinput', version : ['>=1.7.0'])
+elput_ext_deps += dependency('xkbcommon', version : ['>=0.3.0'])
+elput_ext_deps += dependency('libudev')
elput_lib = library('elput',
elput_src, pub_eo_file_target,
- dependencies: elput_pub_deps + elput_deps,
+ c_args : package_c_args,
+ dependencies: elput_pub_deps + elput_deps + elput_ext_deps,
include_directories : config_dir,
install: true,
version : meson.project_version()
diff --git a/src/lib/elua/Elua.h b/src/lib/elua/Elua.h
index 2d13df5c77..cf93d65e53 100644
--- a/src/lib/elua/Elua.h
+++ b/src/lib/elua/Elua.h
@@ -7,7 +7,7 @@
/**
*
- * @section intro Elua library
+ * @section elua_intro Elua library
*
* The Elua library was created to ease integration of EFL Lua into other EFL
* libraries or applications. Using the Elua library you can easily create a
@@ -18,6 +18,14 @@
#ifndef _ELUA_H
#define _ELUA_H
+#ifdef EFL_BETA_API_SUPPORT
+
+#include <Eina.h>
+
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
#ifdef EAPI
# undef EAPI
#endif
@@ -53,7 +61,7 @@ extern "C" {
*
* @date 2015 (created)
*
- * @section toc Table of Contents
+ * @section elua_toc Table of Contents
*
* @li @ref elua_main_intro
* @li @ref elua_main_compiling
@@ -92,14 +100,6 @@ extern "C" {
* @{
*/
-#ifdef EFL_BETA_API_SUPPORT
-
-#include <Eina.h>
-
-#include <lua.h>
-#include <lualib.h>
-#include <lauxlib.h>
-
/** Opaque Elua state
*
* @ingroup Elua
@@ -456,6 +456,10 @@ EAPI Eina_Bool elua_util_script_run(Elua_State *es, int argc, char **argv,
*/
EAPI int elua_util_error_report(const Elua_State *es, int status);
+/**
+ * @}
+ */
+
#endif
#ifdef __cplusplus
diff --git a/src/lib/elua/cache.c b/src/lib/elua/cache.c
index b18d690569..bb20c9ac3b 100644
--- a/src/lib/elua/cache.c
+++ b/src/lib/elua/cache.c
@@ -1,12 +1,18 @@
-#include "elua_private.h"
-
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+#include "elua_private.h"
+
/* bytecode caching */
+#if LUA_VERSION_NUM > 501
+# define elua_load(L, reader, data, chunkname) lua_load(L, reader, data, chunkname, NULL)
+#else
+# define elua_load(L, reader, data, chunkname) lua_load(L, reader, data, chunkname)
+#endif
+
static Eina_File *
check_bc(Eina_File *of, const char *fname, Eina_Bool *bc)
{
@@ -108,7 +114,7 @@ static int
elua_loadstdin(lua_State *L)
{
char buff[LUAL_BUFFERSIZE];
- int status = lua_load(L, getf, &buff, "=stdin");
+ int status = elua_load(L, getf, &buff, "=stdin");
if (ferror(stdin))
{
lua_pop(L, 1);
@@ -130,7 +136,7 @@ getf_map(lua_State *L EINA_UNUSED, void *ud, size_t *size)
Map_Stream *s = ud;
const char *fmap = s->fmap;
*size = s->flen;
- /* gotta null it - tell luajit to terminate reading */
+ /* gotta null it - tell lua to terminate reading */
s->fmap = NULL;
return fmap;
}
@@ -163,7 +169,7 @@ elua_io_loadfile(const Elua_State *es, const char *fname)
lua_remove(L, -2);
return LUA_ERRFILE;
}
- status = lua_load(L, getf_map, &s, chname);
+ status = elua_load(L, getf_map, &s, chname);
eina_file_map_free(f, s.fmap);
eina_file_close(f);
if (status)
@@ -186,7 +192,7 @@ elua_io_loadfile(const Elua_State *es, const char *fname)
}
/* loaded original file, pop old error and load again */
lua_pop(L, 1);
- status = lua_load(L, getf_map, &s, chname);
+ status = elua_load(L, getf_map, &s, chname);
eina_file_map_free(f, s.fmap);
eina_file_close(f);
/* force write new bytecode */
@@ -215,7 +221,12 @@ loadfile(lua_State *L)
if (hasenv)
{
lua_pushvalue(L, 3);
+#if LUA_VERSION_NUM < 502
lua_setfenv(L, -2);
+#else
+ if (!lua_setupvalue(L, -2, 1))
+ lua_pop(L, 1);
+#endif
}
return 1;
}
diff --git a/src/lib/elua/elua.c b/src/lib/elua/elua.c
index baaed81721..6fa856372e 100644
--- a/src/lib/elua/elua.c
+++ b/src/lib/elua/elua.c
@@ -66,6 +66,65 @@ elua_shutdown(void)
return _elua_init_counter;
}
+#ifdef ENABLE_LUA_OLD
+static int
+_ffi_loader(lua_State *L)
+{
+ lua_pushvalue(L, lua_upvalueindex(1));
+ lua_pushliteral(L, "cffi");
+ lua_pushvalue(L, lua_upvalueindex(2));
+ lua_call(L, 2, 1);
+ return 1;
+}
+
+#if LUA_VERSION_NUM < 502
+/* adapted from lua 5.2 source */
+static const char *
+_push_next_template(lua_State *L, const char *path)
+{
+ while (*path == *LUA_PATHSEP) ++path;
+ if (!*path)
+ return NULL;
+ const char *l = strchr(path, *LUA_PATHSEP);
+ if (!l)
+ l = path + strlen(path);
+ lua_pushlstring(L, path, l - path);
+ return l;
+}
+
+static int
+_elua_searchpath(lua_State *L)
+{
+ const char *name = luaL_checkstring(L, 1);
+ const char *path = luaL_checkstring(L, 2);
+ const char *sep = luaL_optstring(L, 3, ".");
+ const char *dsep = luaL_optstring(L, 4, LUA_DIRSEP);
+ luaL_Buffer msg;
+ luaL_buffinit(L, &msg);
+ if (*sep)
+ name = luaL_gsub(L, name, sep, dsep);
+ while ((path = _push_next_template(L, path)))
+ {
+ const char *fname = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name);
+ lua_remove(L, -2);
+ FILE *rf = fopen(fname, "r");
+ if (rf)
+ {
+ fclose(rf);
+ return 1; /* found */
+ }
+ lua_pushfstring(L, "\n\tno file " LUA_QS, fname);
+ lua_remove(L, -2);
+ luaL_addvalue(&msg);
+ }
+ luaL_pushresult(&msg);
+ lua_pushnil(L);
+ lua_insert(L, -2);
+ return 2; /* nil plus error message */
+}
+#endif
+#endif
+
EAPI Elua_State *
elua_state_new(const char *progname)
{
@@ -77,6 +136,47 @@ elua_state_new(const char *progname)
ret->luastate = L;
if (progname) ret->progname = eina_stringshare_add(progname);
luaL_openlibs(L);
+#ifdef ENABLE_LUA_OLD
+ /* search for cffi-lua early, and pass it through as ffi */
+ lua_getglobal(L, "package");
+#if LUA_VERSION_NUM < 502
+ /* lua 5.1 does not have package.searchpath, we rely on having that */
+ lua_getfield(L, -1, "searchpath");
+ if (lua_isnil(L, -1))
+ {
+ lua_pushcfunction(L, _elua_searchpath);
+ lua_setfield(L, -3, "searchpath");
+ }
+ lua_pop(L, 1);
+#endif
+ lua_getfield(L, -1, "preload");
+ lua_getfield(L, -2, "searchers");
+ if (lua_isnil(L, -1))
+ {
+ lua_pop(L, 1);
+ lua_getfield(L, -2, "loaders");
+ }
+ if (lua_isnil(L, -1))
+ {
+ ERR("could not find a module searcher");
+ goto err;
+ }
+ lua_rawgeti(L, -1, 3);
+ lua_pushliteral(L, "cffi");
+ if (lua_pcall(L, 1, 2, 0))
+ {
+ ERR("could not find the cffi module");
+ goto err;
+ }
+ if (!lua_isfunction(L, -2))
+ {
+ ERR("could not find the cffi module: %s", lua_tostring(L, -2));
+ goto err;
+ }
+ lua_pushcclosure(L, _ffi_loader, 2);
+ lua_setfield(L, -3, "ffi");
+ lua_pop(L, 3);
+#endif
/* on 64-bit, split the state pointer into two and reconstruct later */
size_t retn = (size_t)ret;
if (sizeof(void *) < sizeof(lua_Number))
@@ -93,6 +193,11 @@ elua_state_new(const char *progname)
lua_setfield(L, LUA_REGISTRYINDEX, "elua_ptr1");
lua_setfield(L, LUA_REGISTRYINDEX, "elua_ptr2");
return ret;
+err:
+ lua_close(L);
+ eina_stringshare_del(ret->progname);
+ free(ret);
+ return NULL;
}
EAPI void
@@ -424,7 +529,7 @@ _elua_state_i18n_setup(Elua_State *es)
if (elua_util_error_report(es, elua_io_loadfile(es, buf)))
return EINA_FALSE;
lua_createtable(es->luastate, 0, 0);
- luaL_register(es->luastate, NULL, gettextlib);
+ elua_register(es->luastate, gettextlib);
lua_call(es->luastate, 1, 0);
return EINA_TRUE;
}
@@ -507,7 +612,7 @@ _elua_state_modules_setup(const Elua_State *es)
return EINA_FALSE;
lua_pushcfunction(es->luastate, _elua_module_system_init);
lua_createtable(es->luastate, 0, 0);
- luaL_register(es->luastate, NULL, _elua_cutillib);
+ elua_register(es->luastate, _elua_cutillib);
lua_call(es->luastate, 2, 0);
return EINA_TRUE;
}
diff --git a/src/lib/elua/elua_private.h b/src/lib/elua/elua_private.h
index 6ecd7a80f0..72d43c3b33 100644
--- a/src/lib/elua/elua_private.h
+++ b/src/lib/elua/elua_private.h
@@ -50,4 +50,16 @@ extern int _elua_log_dom;
int _elua_io_popen(lua_State *L);
Eina_Bool _elua_state_io_setup(const Elua_State *es);
+#if LUA_VERSION_NUM < 502
+
+#define elua_register(L, lib) luaL_register(L, NULL, lib)
+#define elua_strlen(L, i) lua_strlen(L, i)
+
+#else
+
+#define elua_register(L, lib) luaL_setfuncs(L, lib, 0)
+#define elua_strlen(L, i) lua_rawlen(L, i)
+
+#endif
+
#endif
diff --git a/src/lib/elua/io.c b/src/lib/elua/io.c
index 77ac3df94c..0bf978d6c6 100644
--- a/src/lib/elua/io.c
+++ b/src/lib/elua/io.c
@@ -1,9 +1,9 @@
-#include "elua_private.h"
-
#ifdef _WIN32
# include <evil_private.h> /* realpath */
#endif
+#include "elua_private.h"
+
/* expand fname to full path name (so that PATH is ignored) plus turn
* stuff into a command, and also verify whether the path exists */
static char *
@@ -167,7 +167,7 @@ read_line(lua_State *L, FILE *f)
if (fgets(p, LUAL_BUFFERSIZE, f) == NULL)
{
luaL_pushresult(&b);
- return (lua_strlen(L, -1) > 0);
+ return (elua_strlen(L, -1) > 0);
}
l = strlen(p);
if (!l || p[l - 1] != '\n')
@@ -198,7 +198,7 @@ read_chars(lua_State *L, FILE *f, size_t n)
n -= nr;
} while (n > 0 && nr == rlen);
luaL_pushresult(&b);
- return (n == 0 || lua_strlen(L, -1) > 0);
+ return (n == 0 || elua_strlen(L, -1) > 0);
}
static int
@@ -338,7 +338,7 @@ elua_newfile(lua_State *L)
{
lua_pushvalue(L, -1);
lua_setfield (L, -2, "__index");
- luaL_register(L, NULL, elua_popenlib);
+ elua_register(L, elua_popenlib);
}
lua_setmetatable(L, -2);
return f;
diff --git a/src/lib/embryo/Embryo.h b/src/lib/embryo/Embryo.h
index 51d626b362..4d02007dd4 100644
--- a/src/lib/embryo/Embryo.h
+++ b/src/lib/embryo/Embryo.h
@@ -1,6 +1,6 @@
-/**
+/**
@brief Embryo Library
-
+
These routines are used for Embryo.
@page embryo_main Embryo
@@ -8,7 +8,7 @@ These routines are used for Embryo.
@date 2004 (created)
@note based on Compuphase (http://www.compuphase.com) PAWN language.
-@section toc Table of Contents
+@section embryo_toc Table of Contents
@li @ref embryo_main_intro
@li @ref embryo_main_compiling
@@ -22,7 +22,7 @@ up and smaller version of the original Small abstract machine. The
compiler is mostly untouched.
Small was renamed to Pawn.
-For more information about the Pawn language, see
+For more information about the Pawn language, see
@htmlonly <a href=http://www.compuphase.com/pawn/pawn.htm>Pawn</a>
@endhtmlonly
@latexonly http://www.compuphase.com/pawn/pawn.htm @endlatexonly
@@ -190,7 +190,7 @@ The following preprocessor directives are available:
// Various bits of code
#else
// Other bits of code
-#endif
+#endif
@endcode
@li @code #undef pattern @endcode
@@ -201,7 +201,7 @@ Embryo provides a minimal set of native calls that can be used within
any Embryo script. Those calls are detailed here.
@note Some of the "core" functions here are also described in the full
- Small documentation given
+ Small documentation given
@todo Finish this section.
@@ -304,7 +304,7 @@ This is the @e only file you need to include.
// mess up the formatting of the file
/**
- @def EMBRYO_FUNCTION_NONE
+ @def EMBRYO_FUNCTION_NONE
An invalid/non-existent function.
*/
@@ -382,9 +382,9 @@ extern "C" {
int micro; /** < micro (bugfix, internal improvements, no new features version) */
int revision; /** < git revision (0 if a proper release or the git revision number Embryo is built from) */
} Embryo_Version;
-
+
EAPI extern Embryo_Version *embryo_version;
-
+
/* potential error values */
typedef enum _Embryo_Error
{
@@ -425,12 +425,12 @@ extern "C" {
EMBRYO_PROGRAM_BUSY = 3,
EMBRYO_PROGRAM_TOOLONG = 4
} Embryo_Status;
-
+
typedef unsigned int Embryo_UCell;
typedef int Embryo_Cell;
/** An invalid cell reference */
#define EMBRYO_CELL_NONE 0x7fffffff
-
+
typedef struct _Embryo_Program Embryo_Program;
typedef int Embryo_Function;
/* possible function type values that are enumerated */
@@ -462,8 +462,8 @@ extern "C" {
*
* Functions that start up and shutdown the Embryo library.
*/
-
-
+
+
/**
* Initialises the Embryo library.
* @return The number of times the library has been initialised without being
@@ -471,7 +471,7 @@ extern "C" {
* @ingroup Embryo_Library_Group
*/
EAPI int embryo_init(void);
-
+
/**
* Shuts down the Embryo library.
* @return The number of times the library has been initialised without being
@@ -486,7 +486,7 @@ EAPI int embryo_shutdown(void);
*
* Functions that set up programs, and destroy them.
*/
-
+
/**
* Creates a new Embryo program, with bytecode data that can be freed.
* @param data Pointer to the bytecode of the program.
@@ -495,7 +495,7 @@ EAPI int embryo_shutdown(void);
* @ingroup Embryo_Program_Creation_Group
*/
EAPI Embryo_Program *embryo_program_new(void *data, int size);
-
+
/**
* Creates a new Embryo program, with bytecode data that cannot be
* freed.
@@ -505,7 +505,7 @@ EAPI Embryo_Program *embryo_program_new(void *data, int size);
* @ingroup Embryo_Program_Creation_Group
*/
EAPI Embryo_Program *embryo_program_const_new(void *data, int size);
-
+
/**
* Creates a new Embryo program based on the bytecode data stored in the
* given file.
@@ -514,21 +514,13 @@ EAPI Embryo_Program *embryo_program_const_new(void *data, int size);
* @ingroup Embryo_Program_Creation_Group
*/
EAPI Embryo_Program *embryo_program_load(const char *file);
-
+
/**
* Frees the given Embryo program.
* @param ep The given program.
* @ingroup Embryo_Program_Creation_Group
*/
EAPI void embryo_program_free(Embryo_Program *ep);
-
-/**
- * Adds a native program call to the given Embryo program.
- * @param ep The given Embryo program.
- * @param name The name for the call used in the script.
- * @param func The function to use when the call is made.
- * @ingroup Embryo_Func_Group
- */
/**
* @defgroup Embryo_Func_Group Function Functions
@@ -536,13 +528,15 @@ EAPI void embryo_program_free(Embryo_Program *ep);
*
* Functions that deal with Embryo program functions.
*/
-EAPI void embryo_program_native_call_add(Embryo_Program *ep, const char *name, Embryo_Cell (*func) (Embryo_Program *ep, Embryo_Cell *params));
-
+
/**
- * Resets the current virtual machine session of the given program.
- * @param ep The given program.
- * @ingroup Embryo_Program_VM_Group
+ * Adds a native program call to the given Embryo program.
+ * @param ep The given Embryo program.
+ * @param name The name for the call used in the script.
+ * @param func The function to use when the call is made.
+ * @ingroup Embryo_Func_Group
*/
+EAPI void embryo_program_native_call_add(Embryo_Program *ep, const char *name, Embryo_Cell (*func) (Embryo_Program *ep, Embryo_Cell *params));
/**
* @defgroup Embryo_Program_VM_Group Virtual Machine Functions
@@ -563,8 +557,14 @@ EAPI void embryo_program_native_call_add(Embryo_Program *ep, const c
* The current virtual machine session can be destroyed by calling
* @ref embryo_program_vm_pop.
*/
+
+/**
+ * Resets the current virtual machine session of the given program.
+ * @param ep The given program.
+ * @ingroup Embryo_Program_VM_Group
+ */
EAPI void embryo_program_vm_reset(Embryo_Program *ep);
-
+
/**
* Starts a new virtual machine session for the given program.
*
@@ -574,7 +574,7 @@ EAPI void embryo_program_vm_reset(Embryo_Program *ep);
* @ingroup Embryo_Program_VM_Group
*/
EAPI void embryo_program_vm_push(Embryo_Program *ep);
-
+
/**
* Frees the current virtual machine session associated with the given program.
*
@@ -586,13 +586,6 @@ EAPI void embryo_program_vm_push(Embryo_Program *ep);
* @ingroup Embryo_Program_VM_Group
*/
EAPI void embryo_program_vm_pop(Embryo_Program *ep);
-
-/**
- * Ensures that the given unsigned short integer is in the small
- * endian format.
- * @param v Pointer to the given integer.
- * @ingroup Embryo_Swap_Group
- */
/**
* @defgroup Embryo_Swap_Group Byte Swapping Functions
@@ -603,8 +596,15 @@ EAPI void embryo_program_vm_pop(Embryo_Program *ep);
* used to ensure that the virtual machine operates correctly on big
* endian machines.
*/
+
+/**
+ * Ensures that the given unsigned short integer is in the small
+ * endian format.
+ * @param v Pointer to the given integer.
+ * @ingroup Embryo_Swap_Group
+ */
EAPI void embryo_swap_16(unsigned short *v);
-
+
/**
* Ensures that the given unsigned integer is in the small endian
* format.
@@ -612,7 +612,7 @@ EAPI void embryo_swap_16(unsigned short *v);
* @ingroup Embryo_Swap_Group
*/
EAPI void embryo_swap_32(unsigned int *v);
-
+
/**
* Returns the function in the given program with the given name.
* @param ep The given program.
@@ -621,16 +621,6 @@ EAPI void embryo_swap_32(unsigned int *v);
* @ingroup Embryo_Func_Group
*/
EAPI Embryo_Function embryo_program_function_find(Embryo_Program *ep, const char *name);
-
-/**
- * Retrieves the location of the public variable in the given program
- * with the given name.
- * @param ep The given program.
- * @param name The given name.
- * @return The address of the variable if found. @c EMBRYO_CELL_NONE
- * otherwise.
- * @ingroup Embryo_Public_Variable_Group
- */
/**
* @defgroup Embryo_Public_Variable_Group Public Variable Access Functions
@@ -640,8 +630,18 @@ EAPI Embryo_Function embryo_program_function_find(Embryo_Program *ep, const cha
* described in @ref Small_Scope_Subsection. The functions here allow
* the host program to access these public variables.
*/
+
+/**
+ * Retrieves the location of the public variable in the given program
+ * with the given name.
+ * @param ep The given program.
+ * @param name The given name.
+ * @return The address of the variable if found. @c EMBRYO_CELL_NONE
+ * otherwise.
+ * @ingroup Embryo_Public_Variable_Group
+ */
EAPI Embryo_Cell embryo_program_variable_find(Embryo_Program *ep, const char *name);
-
+
/**
* Retrieves the number of public variables in the given program.
* @param ep The given program.
@@ -649,7 +649,7 @@ EAPI Embryo_Cell embryo_program_variable_find(Embryo_Program *ep, const cha
* @ingroup Embryo_Public_Variable_Group
*/
EAPI int embryo_program_variable_count_get(Embryo_Program *ep);
-
+
/**
* Retrieves the location of the public variable in the given program
* with the given identifier.
@@ -660,13 +660,6 @@ EAPI int embryo_program_variable_count_get(Embryo_Program *ep);
* @ingroup Embryo_Public_Variable_Group
*/
EAPI Embryo_Cell embryo_program_variable_get(Embryo_Program *ep, int num);
-
-/**
- * Sets the error code for the given program to the given code.
- * @param ep The given program.
- * @param error The given error code.
- * @ingroup Embryo_Error_Group
- */
/**
* @defgroup Embryo_Error_Group Error Functions
@@ -674,8 +667,15 @@ EAPI Embryo_Cell embryo_program_variable_get(Embryo_Program *ep, int num);
*
* Functions that set and retrieve error codes in Embryo programs.
*/
+
+/**
+ * Sets the error code for the given program to the given code.
+ * @param ep The given program.
+ * @param error The given error code.
+ * @ingroup Embryo_Error_Group
+ */
EAPI void embryo_program_error_set(Embryo_Program *ep, Embryo_Error error);
-
+
/**
* Retrieves the current error code for the given program.
* @param ep The given program.
@@ -683,13 +683,6 @@ EAPI void embryo_program_error_set(Embryo_Program *ep, Embryo_Error
* @ingroup Embryo_Error_Group
*/
EAPI Embryo_Error embryo_program_error_get(Embryo_Program *ep);
-
-/**
- * Sets the data associated to the given program.
- * @param ep The given program.
- * @param data New bytecode data.
- * @ingroup Embryo_Program_Data_Group
- */
/**
* @defgroup Embryo_Program_Data_Group Program Data Functions
@@ -698,15 +691,22 @@ EAPI Embryo_Error embryo_program_error_get(Embryo_Program *ep);
* Functions that set and retrieve data associated with the given
* program.
*/
+
+/**
+ * Sets the data associated to the given program.
+ * @param ep The given program.
+ * @param data New bytecode data.
+ * @ingroup Embryo_Program_Data_Group
+ */
EAPI void embryo_program_data_set(Embryo_Program *ep, void *data);
-
+
/**
* Retrieves the data associated to the given program.
* @param ep The given program.
* @ingroup Embryo_Program_Data_Group
*/
EAPI void *embryo_program_data_get(Embryo_Program *ep);
-
+
/**
* Retrieves a string describing the given error code.
* @param error The given error code.
@@ -715,14 +715,6 @@ EAPI void *embryo_program_data_get(Embryo_Program *ep);
* @ingroup Embryo_Error_Group
*/
EAPI const char *embryo_error_string_get(Embryo_Error error);
-
-/**
- * Retrieves the length of the string starting at the given cell.
- * @param ep The program the cell is part of.
- * @param str_cell Pointer to the first cell of the string.
- * @return The length of the string. @c 0 is returned if there is an error.
- * @ingroup Embryo_Data_String_Group
- */
/**
* @defgroup Embryo_Data_String_Group Embryo Data String Functions
@@ -730,8 +722,16 @@ EAPI const char *embryo_error_string_get(Embryo_Error error);
*
* Functions that operate on strings in the memory of a virtual machine.
*/
+
+/**
+ * Retrieves the length of the string starting at the given cell.
+ * @param ep The program the cell is part of.
+ * @param str_cell Pointer to the first cell of the string.
+ * @return The length of the string. @c 0 is returned if there is an error.
+ * @ingroup Embryo_Data_String_Group
+ */
EAPI int embryo_data_string_length_get(Embryo_Program *ep, Embryo_Cell *str_cell);
-
+
/**
* Copies the string starting at the given cell to the given buffer.
* @param ep The program the cell is part of.
@@ -740,7 +740,7 @@ EAPI int embryo_data_string_length_get(Embryo_Program *ep, Embryo_C
* @ingroup Embryo_Data_String_Group
*/
EAPI void embryo_data_string_get(Embryo_Program *ep, Embryo_Cell *str_cell, char *dst);
-
+
/**
* Copies string in the given buffer into the virtual machine memory
* starting at the given cell.
@@ -750,7 +750,7 @@ EAPI void embryo_data_string_get(Embryo_Program *ep, Embryo_Cell *st
* @ingroup Embryo_Data_String_Group
*/
EAPI void embryo_data_string_set(Embryo_Program *ep, const char *src, Embryo_Cell *str_cell);
-
+
/**
* Retreives a pointer to the address in the virtual machine given by the
* given cell.
@@ -760,16 +760,6 @@ EAPI void embryo_data_string_set(Embryo_Program *ep, const char *src
* @ingroup Embryo_Data_String_Group
*/
EAPI Embryo_Cell *embryo_data_address_get(Embryo_Program *ep, Embryo_Cell addr);
-
-/**
- * Increases the size of the heap of the given virtual machine by the given
- * number of Embryo_Cells.
- * @param ep The program with the given virtual machine.
- * @param cells The given number of Embryo_Cells.
- * @return The address of the new memory region on success.
- * @c EMBRYO_CELL_NONE otherwise.
- * @ingroup Embryo_Heap_Group
- */
/**
* @defgroup Embryo_Heap_Group Heap Functions
@@ -779,8 +769,18 @@ EAPI Embryo_Cell *embryo_data_address_get(Embryo_Program *ep, Embryo_Cell ad
* use at runtime. The heap functions here change the amount of heap
* memory available.
*/
+
+/**
+ * Increases the size of the heap of the given virtual machine by the given
+ * number of Embryo_Cells.
+ * @param ep The program with the given virtual machine.
+ * @param cells The given number of Embryo_Cells.
+ * @return The address of the new memory region on success.
+ * @c EMBRYO_CELL_NONE otherwise.
+ * @ingroup Embryo_Heap_Group
+ */
EAPI Embryo_Cell embryo_data_heap_push(Embryo_Program *ep, int cells);
-
+
/**
* Decreases the size of the heap of the given virtual machine down to the
* given size.
@@ -789,13 +789,6 @@ EAPI Embryo_Cell embryo_data_heap_push(Embryo_Program *ep, int cells);
* @ingroup Embryo_Heap_Group
*/
EAPI void embryo_data_heap_pop(Embryo_Program *ep, Embryo_Cell down_to);
-
-/**
- * Returns the number of virtual machines are running for the given program.
- * @param ep The given program.
- * @return The number of virtual machines running.
- * @ingroup Embryo_Run_Group
- */
/**
* @defgroup Embryo_Run_Group Program Run Functions
@@ -804,8 +797,15 @@ EAPI void embryo_data_heap_pop(Embryo_Program *ep, Embryo_Cell down_
* Functions that are involved in actually running functions in an
* Embryo program.
*/
+
+/**
+ * Returns the number of virtual machines are running for the given program.
+ * @param ep The given program.
+ * @return The number of virtual machines running.
+ * @ingroup Embryo_Run_Group
+ */
EAPI int embryo_program_recursion_get(Embryo_Program *ep);
-
+
/**
* Runs the given function of the given Embryo program in the current
* virtual machine. The parameter @p fn can be found using
@@ -825,7 +825,7 @@ EAPI int embryo_program_recursion_get(Embryo_Program *ep);
* @ingroup Embryo_Run_Group
*/
EAPI Embryo_Status embryo_program_run(Embryo_Program *ep, Embryo_Function func);
-
+
/**
* Retreives the return value of the last called function of the given
* program.
@@ -835,7 +835,7 @@ EAPI Embryo_Status embryo_program_run(Embryo_Program *ep, Embryo_Function fun
* @ingroup Embryo_Run_Group
*/
EAPI Embryo_Cell embryo_program_return_value_get(Embryo_Program *ep);
-
+
/**
* Sets the maximum number of abstract machine cycles any given program run
* can execute before being put to sleep and returning.
@@ -901,6 +901,13 @@ EAPI void embryo_program_max_cycle_run_set(Embryo_Program *ep, int m
EAPI int embryo_program_max_cycle_run_get(Embryo_Program *ep);
/**
+ * @defgroup Embryo_Parameter_Group Function Parameter Functions
+ * @ingroup Embryo
+ *
+ * Functions that set parameters for the next function that is called.
+ */
+
+/**
* Pushes an Embryo_Cell onto the function stack to use as a parameter for
* the next function that is called in the given program.
* @param ep The given program.
@@ -908,13 +915,6 @@ EAPI int embryo_program_max_cycle_run_get(Embryo_Program *ep);
* @return @c 1 if successful. @c 0 otherwise.
* @ingroup Embryo_Parameter_Group
*/
-
-/**
- * @defgroup Embryo_Parameter_Group Function Parameter Functions
- * @ingroup Embryo
- *
- * Functions that set parameters for the next function that is called.
- */
EAPI int embryo_parameter_cell_push(Embryo_Program *ep, Embryo_Cell cell);
/**
diff --git a/src/lib/embryo/embryo_main.c b/src/lib/embryo/embryo_main.c
index 4b2af3c5e5..6bbac5891e 100644
--- a/src/lib/embryo/embryo_main.c
+++ b/src/lib/embryo/embryo_main.c
@@ -6,6 +6,8 @@
#include <stdlib.h>
#include <time.h>
+#include <Eina.h>
+
#include "Embryo.h"
#include "embryo_private.h"
@@ -23,8 +25,6 @@ embryo_init(void)
if (++_embryo_init_count != 1)
return _embryo_init_count;
- srand(time(NULL));
-
if (!eina_init())
return --_embryo_init_count;
@@ -52,7 +52,7 @@ embryo_shutdown(void)
{
if (_embryo_init_count <= 0)
{
- printf("%s:%i Init count not greater than 0 in shutdown.", __FUNCTION__, __LINE__);
+ printf("%s:%i Init count not greater than 0 in shutdown.", __func__, __LINE__);
return 0;
}
if (--_embryo_init_count != 0)
diff --git a/src/lib/embryo/embryo_private.h b/src/lib/embryo/embryo_private.h
index 4bf8ceb2c6..e63351b2c7 100644
--- a/src/lib/embryo/embryo_private.h
+++ b/src/lib/embryo/embryo_private.h
@@ -1,8 +1,6 @@
#ifndef _EMBRYO_PRIVATE_H
#define _EMBRYO_PRIVATE_H
-#include <Eina.h>
-
typedef enum _Embryo_Opcode Embryo_Opcode;
enum _Embryo_Opcode
diff --git a/src/lib/embryo/embryo_str.c b/src/lib/embryo/embryo_str.c
index d7da4e0dd3..6fafa83db0 100644
--- a/src/lib/embryo/embryo_str.c
+++ b/src/lib/embryo/embryo_str.c
@@ -16,6 +16,8 @@
#include <string.h>
#include <fnmatch.h>
+#include <Eina.h>
+
#include "Embryo.h"
#include "embryo_private.h"
diff --git a/src/lib/embryo/meson.build b/src/lib/embryo/meson.build
index 6ab8af8fe7..e0bb2385f9 100644
--- a/src/lib/embryo/meson.build
+++ b/src/lib/embryo/meson.build
@@ -1,12 +1,12 @@
-embryo_deps = [ecore]
+embryo_deps = [eina, ecore, buildsystem]
embryo_pub_deps = [eina, eo, efl]
-
+embryo_ext_deps = [buildsystem_simple, m]
embryo_header_src = [
'Embryo.h'
]
-embryo_src = [
+embryo_src = files([
'embryo_amx.c',
'embryo_args.c',
'embryo_float.c',
@@ -15,13 +15,11 @@ embryo_src = [
'embryo_str.c',
'embryo_time.c',
'embryo_private.h'
-]
-
-embryo_deps = [eina, m]
+])
embryo_lib = library('embryo',
embryo_src,
- dependencies: [m, buildsystem] + embryo_deps,
+ dependencies: [embryo_deps, embryo_pub_deps, embryo_ext_deps],
include_directories : config_dir + [include_directories(join_paths('..','..'))],
install: true,
c_args : package_c_args,
diff --git a/src/lib/emile/emile_base64.c b/src/lib/emile/emile_base64.c
index 2f041fec04..7ff1c130b0 100644
--- a/src/lib/emile/emile_base64.c
+++ b/src/lib/emile/emile_base64.c
@@ -170,6 +170,10 @@ emile_base64_decode_common(const Eina_Strbuf *in, Eina_Bool is_base64url_decode)
return eina_binbuf_manage_new(dest, l, EINA_FALSE);
}
+/**
+ * @endcond
+ */
+
/*============================================================================*
* Global *
*============================================================================*/
diff --git a/src/lib/emile/emile_base64.h b/src/lib/emile/emile_base64.h
index 7e677458a2..0502031fbc 100644
--- a/src/lib/emile/emile_base64.h
+++ b/src/lib/emile/emile_base64.h
@@ -23,7 +23,7 @@ EAPI Eina_Strbuf *emile_base64_encode(const Eina_Binbuf *in);
/**
* @brief base64 url and filename safe encoding function.
- * @param src The buffer to be encoded.
+ * @param in The buffer to be encoded.
* @return the base64 url encoded string.
*
* This will create a string which is base64 encoded with url and
@@ -37,7 +37,7 @@ EAPI Eina_Strbuf *emile_base64url_encode(const Eina_Binbuf *in);
/**
* @brief base64 decoding function.
- * @param src The string to be decoded.
+ * @param in The string to be decoded.
* @return the base64 decoded buffer.
*
* This will create a buffer which is base64 decode of the src.
@@ -49,7 +49,7 @@ EAPI Eina_Binbuf* emile_base64_decode(const Eina_Strbuf *in);
/**
* @brief decoding function for base64 url and filename safe encoding.
- * @param src The string to be decoded.
+ * @param in The string to be decoded.
* @return the base64 url decoded buffer.
*
* This will create a buffer which is base64 url decode of the src.
diff --git a/src/lib/emile/emile_cipher_openssl.c b/src/lib/emile/emile_cipher_openssl.c
index 84b024465e..e5a1ed4135 100644
--- a/src/lib/emile/emile_cipher_openssl.c
+++ b/src/lib/emile/emile_cipher_openssl.c
@@ -75,10 +75,16 @@ emile_binbuf_sha1(const Eina_Binbuf * data, unsigned char digest[20])
Eina_Slice slice = eina_binbuf_slice_get(data);
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
+ if (!ctx) return EINA_FALSE;
EVP_DigestInit_ex(ctx, md, NULL);
- EVP_DigestUpdate(ctx, slice.mem, slice.len);
+ if (!EVP_DigestUpdate(ctx, slice.mem, slice.len))
+ {
+ EVP_MD_CTX_free(ctx);
+ return EINA_FALSE;
+ }
+
EVP_DigestFinal_ex(ctx, digest, NULL);
EVP_MD_CTX_free(ctx);
@@ -193,8 +199,14 @@ on_error:
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
if (ctx)
EVP_CIPHER_CTX_cleanup(ctx);
+#else
+ if (ctx) {
+ EVP_CIPHER_CTX_cleanup(ctx);
+ EVP_CIPHER_CTX_free(ctx);
+ }
#endif /* if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) */
+
free(buffer);
/* General error */
@@ -588,7 +600,6 @@ _emile_cipher_session_print(SSL *ssl)
eina_strbuf_append_length(str, bptr->data, bptr->length);
DBG("%s", eina_strbuf_string_get(str));
eina_strbuf_reset(str);
- BIO_free(b);
}
}
diff --git a/src/lib/emile/meson.build b/src/lib/emile/meson.build
index 4ae888c42a..fb5822836b 100644
--- a/src/lib/emile/meson.build
+++ b/src/lib/emile/meson.build
@@ -1,5 +1,6 @@
-emile_deps = [jpeg, crypto, dependency('zlib')]
+emile_deps = []
emile_pub_deps = [eina, efl]
+emile_ext_deps = [jpeg, crypto, dependency('zlib'), lz4, rg_etc, m]
emile_headers = [
'Emile.h',
@@ -9,24 +10,25 @@ emile_headers = [
'emile_base64.h'
]
-emile_src = [
+emile_src = files([
'emile_private.h',
'emile_main.c',
'emile_compress.c',
'emile_image.c',
'emile_base64.c',
-]
+])
if (get_option('crypto') == 'gnutls')
- emile_src += 'emile_cipher_gnutls.c'
+ emile_src += files('emile_cipher_gnutls.c')
elif (get_option('crypto') == 'openssl')
- emile_src += 'emile_cipher_openssl.c'
+ emile_src += files('emile_cipher_openssl.c')
endif
emile_lib = library('emile',
emile_src,
+ c_args : package_c_args,
include_directories: config_dir,
- dependencies: emile_pub_deps + emile_deps + [lz4, rg_etc, m],
+ dependencies: emile_pub_deps + emile_deps + emile_ext_deps,
install: true,
version : meson.project_version()
)
diff --git a/src/lib/emotion/Emotion.h b/src/lib/emotion/Emotion.h
index e67d9a2026..b4495c12f2 100644
--- a/src/lib/emotion/Emotion.h
+++ b/src/lib/emotion/Emotion.h
@@ -14,7 +14,7 @@
*
* @date 2003 (created)
*
- * @section toc Table of Contents
+ * @section emotion_toc Table of Contents
*
* @li @ref emotion_main_intro
* @li @ref emotion_main_work
@@ -26,8 +26,7 @@
*
* A media object library for Evas and Ecore.
*
- * Emotion is a library that allows playing audio and video files, using one of
- * its backends (gstreamer, xine or generic shm player).
+ * Emotion is a library that allows playing audio and video files.
*
* It is integrated into Ecore through its mainloop, and is transparent to the
* user of the library how the decoding of audio and video is being done. Once
@@ -94,31 +93,7 @@
#include <Evas.h>
#include <Efl_Config.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <emotion_api.h>
#ifdef __cplusplus
extern "C" {
@@ -135,12 +110,6 @@ extern "C" {
* play, seek, change volume, etc.
*/
-enum _Emotion_Module
-{
- EMOTION_MODULE_XINE,
- EMOTION_MODULE_GSTREAMER
-};
-
enum _Emotion_Event
{
EMOTION_EVENT_MENU1, // Escape Menu
@@ -265,7 +234,6 @@ enum _Emotion_Aspect
EMOTION_ASPECT_CUSTOM, /**< use custom borders/crop for the video */
};
-typedef enum _Emotion_Module Emotion_Module;
typedef enum _Emotion_Event Emotion_Event;
typedef enum _Emotion_Meta_Info Emotion_Meta_Info; /**< Meta info type to be retrieved. */
typedef enum _Emotion_Vis Emotion_Vis; /**< Type of visualization. */
@@ -290,7 +258,7 @@ typedef struct _Emotion_Version
int revision; /** < git revision (0 if a proper release or the git revision number Emotion is built from) */
} Emotion_Version;
-EAPI extern Emotion_Version *emotion_version;
+EMOTION_API extern Emotion_Version *emotion_version;
/* api calls available */
@@ -336,7 +304,7 @@ EAPI extern Emotion_Version *emotion_version;
* @li "position_update" - Emitted when emotion_object_position_set is called
* @li "decode_stop" - Emitted after the last frame is decoded
*
- * @section Examples
+ * @section Emotion_Examples
*
* The following examples exemplify the emotion usage. There's also the
* emotion_test binary that is distributed with this library and cover the
@@ -379,14 +347,14 @@ EAPI extern Emotion_Version *emotion_version;
* Initialise needed libraries like eina ecore eet
* Initialise needed modules like webcam
*/
-EAPI Eina_Bool emotion_init(void);
+EMOTION_API Eina_Bool emotion_init(void);
/**
* @brief Shutdown Emotion library
*
* Proper shutdown of all loaded modules and initialised libraries.
*/
-EAPI Eina_Bool emotion_shutdown(void);
+EMOTION_API Eina_Bool emotion_shutdown(void);
/**
* @brief Add an emotion object to the canvas.
@@ -413,7 +381,7 @@ EAPI Eina_Bool emotion_shutdown(void);
*
* @ingroup Emotion_Init
*/
-EAPI Evas_Object *emotion_object_add (Evas *evas);
+EMOTION_API Evas_Object *emotion_object_add (Evas *evas);
/**
* @brief Set borders for the emotion object.
@@ -443,7 +411,7 @@ EAPI Evas_Object *emotion_object_add (Evas *evas);
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b);
+EMOTION_API void emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b);
/**
* @brief Get the borders set for the emotion object.
@@ -458,7 +426,7 @@ EAPI void emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b);
+EMOTION_API void emotion_object_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b);
/**
* @brief Set a color for the background rectangle of this emotion object.
@@ -479,7 +447,7 @@ EAPI void emotion_object_border_get(const Evas_Object *obj, int *l, int *r, int
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_bg_color_set(Evas_Object *obj, int r, int g, int b, int a);
+EMOTION_API void emotion_object_bg_color_set(Evas_Object *obj, int r, int g, int b, int a);
/**
* @brief Get the background color set for the emotion object.
@@ -494,7 +462,7 @@ EAPI void emotion_object_bg_color_set(Evas_Object *obj, int r, int g, int b, int
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a);
+EMOTION_API void emotion_object_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a);
/**
* @brief Set whether emotion should keep the aspect ratio of the video.
@@ -538,7 +506,7 @@ EAPI void emotion_object_bg_color_get(const Evas_Object *obj, int *r, int *g, in
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_keep_aspect_set(Evas_Object *obj, Emotion_Aspect a);
+EMOTION_API void emotion_object_keep_aspect_set(Evas_Object *obj, Emotion_Aspect a);
/**
* @brief Get the current emotion aspect ratio policy.
@@ -551,7 +519,7 @@ EAPI void emotion_object_keep_aspect_set(Evas_Object *obj, Emotion_Aspect a);
*
* @ingroup Emotion_Video
*/
-EAPI Emotion_Aspect emotion_object_keep_aspect_get(const Evas_Object *obj);
+EMOTION_API Emotion_Aspect emotion_object_keep_aspect_get(const Evas_Object *obj);
/**
* @brief Set the file to be played in the Emotion object.
@@ -582,7 +550,7 @@ EAPI Emotion_Aspect emotion_object_keep_aspect_get(const Evas_Object *obj);
*
* @ingroup Emotion_Init
*/
-EAPI Eina_Bool emotion_object_file_set (Evas_Object *obj, const char *filename);
+EMOTION_API Eina_Bool emotion_object_file_set (Evas_Object *obj, const char *filename);
/**
* @brief Get the filename of the file associated with the emotion object.
@@ -600,7 +568,7 @@ EAPI Eina_Bool emotion_object_file_set (Evas_Object *obj, const
*
* @ingroup Emotion_Init
*/
-EAPI const char *emotion_object_file_get (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_file_get (const Evas_Object *obj);
/**
* @defgroup Emotion_Play Play control functions
* @ingroup Emotion
@@ -617,14 +585,14 @@ EAPI const char *emotion_object_file_get (const Evas_Object *obj);
* This functions sets the currently playing status of the video. Using this
* function to play or pause the video doesn't alter it's current position.
*/
-EAPI void emotion_object_play_set (Evas_Object *obj, Eina_Bool play);
+EMOTION_API void emotion_object_play_set (Evas_Object *obj, Eina_Bool play);
/**
* @brief Get play/pause state of the media file.
*
* @param obj The emotion object from which the state will be retrieved.
* @return EINA_TRUE if playing. EINA_FALSE if not playing.
*/
-EAPI Eina_Bool emotion_object_play_get (const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_play_get (const Evas_Object *obj);
/**
* @brief Set the position in the media file.
*
@@ -637,7 +605,7 @@ EAPI Eina_Bool emotion_object_play_get (const Evas_Object *obj);
*
* @see emotion_object_seekable_get
*/
-EAPI void emotion_object_position_set (Evas_Object *obj, double sec);
+EMOTION_API void emotion_object_position_set (Evas_Object *obj, double sec);
/**
* @brief Get the position in the media file.
*
@@ -647,7 +615,7 @@ EAPI void emotion_object_position_set (Evas_Object *obj, double
* The position is returned as the number of seconds since the beginning of the
* media file.
*/
-EAPI double emotion_object_position_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_position_get (const Evas_Object *obj);
/**
* @brief Get the percentual size of the buffering cache.
@@ -663,7 +631,7 @@ EAPI double emotion_object_position_get (const Evas_Object *obj);
*
* @warning Generic backend don't implement this (will return 1.0).
*/
-EAPI double emotion_object_buffer_size_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_buffer_size_get (const Evas_Object *obj);
/**
* @brief Get whether the media file is seekable.
@@ -672,7 +640,7 @@ EAPI double emotion_object_buffer_size_get (const Evas_Object *obj);
* retrieved.
* @return EINA_TRUE if the media file is seekable, EINA_FALSE otherwise.
*/
-EAPI Eina_Bool emotion_object_seekable_get (const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_seekable_get (const Evas_Object *obj);
/**
* @brief Get the length of play for the media file.
*
@@ -684,7 +652,7 @@ EAPI Eina_Bool emotion_object_seekable_get (const Evas_Object *obj);
* @warning This will return 0 if called before the "length_change" signal has,
* been emitted.
*/
-EAPI double emotion_object_play_length_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_play_length_get (const Evas_Object *obj);
/**
* @brief Set the play speed of the media file.
@@ -698,7 +666,7 @@ EAPI double emotion_object_play_length_get (const Evas_Object *obj);
* @warning The only backend that implements this is the experimental VLC
* backend.
*/
-EAPI void emotion_object_play_speed_set (Evas_Object *obj, double speed);
+EMOTION_API void emotion_object_play_speed_set (Evas_Object *obj, double speed);
/**
* @brief Get the play speed of the media file.
*
@@ -707,7 +675,7 @@ EAPI void emotion_object_play_speed_set (Evas_Object *obj, double
*
* @see emotion_object_play_speed_set
*/
-EAPI double emotion_object_play_speed_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_play_speed_get (const Evas_Object *obj);
/**
* @brief Get how much of the file has been played.
*
@@ -717,7 +685,7 @@ EAPI double emotion_object_play_speed_get (const Evas_Object *obj);
* @warning Don't change of free the returned string.
* @warning gstreamer xine backends don't implement this(will return NULL).
*/
-EAPI const char *emotion_object_progress_info_get (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_progress_info_get (const Evas_Object *obj);
/**
* @brief Get how much of the file has been played.
*
@@ -729,12 +697,12 @@ EAPI const char *emotion_object_progress_info_get (const Evas_Object *obj);
*
* @warning gstreamer xine backends don't implement this(will return 0).
*/
-EAPI double emotion_object_progress_status_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_progress_status_get (const Evas_Object *obj);
/**
* @}
*/
-EAPI Eina_Bool emotion_object_video_handled_get (const Evas_Object *obj);
-EAPI Eina_Bool emotion_object_audio_handled_get (const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_video_handled_get (const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_audio_handled_get (const Evas_Object *obj);
/**
* @brief Retrieve the video aspect ratio of the media file loaded.
@@ -817,7 +785,7 @@ EAPI Eina_Bool emotion_object_audio_handled_get (const Evas_Object *obj);
*
* @ingroup Emotion_Video
*/
-EAPI double emotion_object_ratio_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_ratio_get (const Evas_Object *obj);
/**
* @brief Retrieve the video size of the loaded file.
@@ -841,7 +809,7 @@ EAPI double emotion_object_ratio_get (const Evas_Object *obj);
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_size_get (const Evas_Object *obj, int *iw, int *ih);
+EMOTION_API void emotion_object_size_get (const Evas_Object *obj, int *iw, int *ih);
/**
* @brief Sets whether to use of high-quality image scaling algorithm
@@ -858,7 +826,7 @@ EAPI void emotion_object_size_get (const Evas_Object *obj,
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_smooth_scale_set (Evas_Object *obj, Eina_Bool smooth);
+EMOTION_API void emotion_object_smooth_scale_set (Evas_Object *obj, Eina_Bool smooth);
/**
* @brief Gets whether the high-quality image scaling algorithm
@@ -871,7 +839,7 @@ EAPI void emotion_object_smooth_scale_set (Evas_Object *obj, Eina_B
*
* @ingroup Emotion_Video
*/
-EAPI Eina_Bool emotion_object_smooth_scale_get (const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_smooth_scale_get (const Evas_Object *obj);
/**
* @brief Send an Emotion Event to an Evas object
@@ -881,7 +849,7 @@ EAPI Eina_Bool emotion_object_smooth_scale_get (const Evas_Object *obj);
*
* @see Emotion_Event
*/
-EAPI void emotion_object_event_simple_send (Evas_Object *obj, Emotion_Event ev);
+EMOTION_API void emotion_object_event_simple_send (Evas_Object *obj, Emotion_Event ev);
/**
* @brief Set the audio volume.
@@ -901,7 +869,7 @@ EAPI void emotion_object_event_simple_send (Evas_Object *obj, Emotio
*
* @ingroup Emotion_Audio
*/
-EAPI void emotion_object_audio_volume_set (Evas_Object *obj, double vol);
+EMOTION_API void emotion_object_audio_volume_set (Evas_Object *obj, double vol);
/**
* @brief Get the audio volume.
@@ -916,7 +884,7 @@ EAPI void emotion_object_audio_volume_set (Evas_Object *obj, double
*
* @ingroup Emotion_Audio
*/
-EAPI double emotion_object_audio_volume_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_audio_volume_get (const Evas_Object *obj);
/**
* @brief Set the mute audio option for this object.
@@ -934,7 +902,7 @@ EAPI double emotion_object_audio_volume_get (const Evas_Object *obj);
*
* @ingroup Emotion_Audio
*/
-EAPI void emotion_object_audio_mute_set (Evas_Object *obj, Eina_Bool mute);
+EMOTION_API void emotion_object_audio_mute_set (Evas_Object *obj, Eina_Bool mute);
/**
* @brief Get the mute audio option of this object.
@@ -949,11 +917,11 @@ EAPI void emotion_object_audio_mute_set (Evas_Object *obj, Eina_B
*
* @ingroup Emotion_Audio
*/
-EAPI Eina_Bool emotion_object_audio_mute_get (const Evas_Object *obj);
-EAPI int emotion_object_audio_channel_count (const Evas_Object *obj);
-EAPI const char *emotion_object_audio_channel_name_get(const Evas_Object *obj, int channel);
-EAPI void emotion_object_audio_channel_set (Evas_Object *obj, int channel);
-EAPI int emotion_object_audio_channel_get (const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_audio_mute_get (const Evas_Object *obj);
+EMOTION_API int emotion_object_audio_channel_count (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_audio_channel_name_get(const Evas_Object *obj, int channel);
+EMOTION_API void emotion_object_audio_channel_set (Evas_Object *obj, int channel);
+EMOTION_API int emotion_object_audio_channel_get (const Evas_Object *obj);
/**
* @brief Set the mute video option for this object.
@@ -971,7 +939,7 @@ EAPI int emotion_object_audio_channel_get (const Evas_Object *obj);
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_video_mute_set (Evas_Object *obj, Eina_Bool mute);
+EMOTION_API void emotion_object_video_mute_set (Evas_Object *obj, Eina_Bool mute);
/**
* @brief Get the mute video option of this object.
@@ -986,7 +954,7 @@ EAPI void emotion_object_video_mute_set (Evas_Object *obj, Eina_B
*
* @ingroup Emotion_Video
*/
-EAPI Eina_Bool emotion_object_video_mute_get (const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_video_mute_get (const Evas_Object *obj);
/**
* @brief Set the video's subtitle file path.
@@ -1002,7 +970,7 @@ EAPI Eina_Bool emotion_object_video_mute_get (const Evas_Object *obj);
* @ingroup Emotion_Video
* @since 1.8
*/
-EAPI void emotion_object_video_subtitle_file_set (Evas_Object *obj, const char *filepath);
+EMOTION_API void emotion_object_video_subtitle_file_set (Evas_Object *obj, const char *filepath);
/**
* @brief Get the video's subtitle file path.
@@ -1018,7 +986,7 @@ EAPI void emotion_object_video_subtitle_file_set (Evas_Object *obj, cons
* @ingroup Emotion_Video
* @since 1.8
*/
-EAPI const char *emotion_object_video_subtitle_file_get (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_video_subtitle_file_get (const Evas_Object *obj);
/**
* @brief Get the number of available video channel
@@ -1030,7 +998,7 @@ EAPI const char *emotion_object_video_subtitle_file_get (const Evas_Object *ob
*
* @ingroup Emotion_Video
*/
-EAPI int emotion_object_video_channel_count (const Evas_Object *obj);
+EMOTION_API int emotion_object_video_channel_count (const Evas_Object *obj);
/**
* @brief Get the name of a given video channel
@@ -1043,7 +1011,7 @@ EAPI int emotion_object_video_channel_count (const Evas_Object *obj);
*
* @ingroup Emotion_Video
*/
-EAPI const char *emotion_object_video_channel_name_get(const Evas_Object *obj, int channel);
+EMOTION_API const char *emotion_object_video_channel_name_get(const Evas_Object *obj, int channel);
/**
* @brief Set the channel for a given video object
@@ -1053,7 +1021,7 @@ EAPI const char *emotion_object_video_channel_name_get(const Evas_Object *obj,
*
* @ingroup Emotion_Video
*/
-EAPI void emotion_object_video_channel_set (Evas_Object *obj, int channel);
+EMOTION_API void emotion_object_video_channel_set (Evas_Object *obj, int channel);
/**
* @brief Get the channel for a given video object
@@ -1063,18 +1031,18 @@ EAPI void emotion_object_video_channel_set (Evas_Object *obj, int ch
*
* @ingroup Emotion_Video
*/
-EAPI int emotion_object_video_channel_get (const Evas_Object *obj);
-EAPI void emotion_object_spu_mute_set (Evas_Object *obj, Eina_Bool mute);
-EAPI Eina_Bool emotion_object_spu_mute_get (const Evas_Object *obj);
-EAPI int emotion_object_spu_channel_count (const Evas_Object *obj);
-EAPI const char *emotion_object_spu_channel_name_get (const Evas_Object *obj, int channel);
-EAPI void emotion_object_spu_channel_set (Evas_Object *obj, int channel);
-EAPI int emotion_object_spu_channel_get (const Evas_Object *obj);
-EAPI int emotion_object_chapter_count (const Evas_Object *obj);
-EAPI void emotion_object_chapter_set (Evas_Object *obj, int chapter);
-EAPI int emotion_object_chapter_get (const Evas_Object *obj);
-EAPI const char *emotion_object_chapter_name_get (const Evas_Object *obj, int chapter);
-EAPI void emotion_object_eject (Evas_Object *obj);
+EMOTION_API int emotion_object_video_channel_get (const Evas_Object *obj);
+EMOTION_API void emotion_object_spu_mute_set (Evas_Object *obj, Eina_Bool mute);
+EMOTION_API Eina_Bool emotion_object_spu_mute_get (const Evas_Object *obj);
+EMOTION_API int emotion_object_spu_channel_count (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_spu_channel_name_get (const Evas_Object *obj, int channel);
+EMOTION_API void emotion_object_spu_channel_set (Evas_Object *obj, int channel);
+EMOTION_API int emotion_object_spu_channel_get (const Evas_Object *obj);
+EMOTION_API int emotion_object_chapter_count (const Evas_Object *obj);
+EMOTION_API void emotion_object_chapter_set (Evas_Object *obj, int chapter);
+EMOTION_API int emotion_object_chapter_get (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_chapter_name_get (const Evas_Object *obj, int chapter);
+EMOTION_API void emotion_object_eject (Evas_Object *obj);
/**
* @brief Get the dvd title from this emotion object.
@@ -1088,11 +1056,11 @@ EAPI void emotion_object_eject (Evas_Object *obj);
*
* @ingroup Emotion_Info
*/
-EAPI const char *emotion_object_title_get (const Evas_Object *obj);
-EAPI const char *emotion_object_ref_file_get (const Evas_Object *obj);
-EAPI int emotion_object_ref_num_get (const Evas_Object *obj);
-EAPI int emotion_object_spu_button_count_get (const Evas_Object *obj);
-EAPI int emotion_object_spu_button_get (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_title_get (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_ref_file_get (const Evas_Object *obj);
+EMOTION_API int emotion_object_ref_num_get (const Evas_Object *obj);
+EMOTION_API int emotion_object_spu_button_count_get (const Evas_Object *obj);
+EMOTION_API int emotion_object_spu_button_get (const Evas_Object *obj);
/**
* @brief Retrieve meta information from this file being played.
@@ -1114,7 +1082,7 @@ EAPI int emotion_object_spu_button_get (const Evas_Object *obj);
*
* @ingroup Emotion_Info
*/
-EAPI const char *emotion_object_meta_info_get (const Evas_Object *obj, Emotion_Meta_Info meta);
+EMOTION_API const char *emotion_object_meta_info_get (const Evas_Object *obj, Emotion_Meta_Info meta);
/**
* @brief Set the visualization to be used with this object.
@@ -1133,7 +1101,7 @@ EAPI const char *emotion_object_meta_info_get (const Evas_Object *obj,
*
* @ingroup Emotion_Visualization
*/
-EAPI void emotion_object_vis_set (Evas_Object *obj, Emotion_Vis visualization);
+EMOTION_API void emotion_object_vis_set (Evas_Object *obj, Emotion_Vis visualization);
/**
* @brief Get the type of visualization in use by this emotion object.
@@ -1150,7 +1118,7 @@ EAPI void emotion_object_vis_set (Evas_Object *obj, Emotio
*
* @ingroup Emotion_Visualization
*/
-EAPI Emotion_Vis emotion_object_vis_get (const Evas_Object *obj);
+EMOTION_API Emotion_Vis emotion_object_vis_get (const Evas_Object *obj);
/**
* @brief Query whether a type of visualization is supported by this object.
@@ -1168,7 +1136,7 @@ EAPI Emotion_Vis emotion_object_vis_get (const Evas_Object *obj);
*
* @ingroup Emotion_Visualization
*/
-EAPI Eina_Bool emotion_object_vis_supported (const Evas_Object *obj, Emotion_Vis visualization);
+EMOTION_API Eina_Bool emotion_object_vis_supported (const Evas_Object *obj, Emotion_Vis visualization);
/**
* @brief Raise priority of an object so it will have a priviledged access to hardware resources.
@@ -1188,7 +1156,7 @@ EAPI Eina_Bool emotion_object_vis_supported (const Evas_Object *obj,
*
* @ingroup Emotion_Ressource
*/
-EAPI void emotion_object_priority_set(Evas_Object *obj, Eina_Bool priority);
+EMOTION_API void emotion_object_priority_set(Evas_Object *obj, Eina_Bool priority);
/**
* @brief Get the actual priority of an object.
@@ -1203,7 +1171,7 @@ EAPI void emotion_object_priority_set(Evas_Object *obj, Eina_Bool priori
*
* @ingroup Emotion_Ressource
*/
-EAPI Eina_Bool emotion_object_priority_get(const Evas_Object *obj);
+EMOTION_API Eina_Bool emotion_object_priority_get(const Evas_Object *obj);
/**
* @brief Change the state of an object pipeline.
@@ -1220,7 +1188,7 @@ EAPI Eina_Bool emotion_object_priority_get(const Evas_Object *obj);
*
* @ingroup Emotion_Ressource
*/
-EAPI void emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state);
+EMOTION_API void emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state);
/**
* @brief Get the current state of the pipeline
@@ -1233,7 +1201,7 @@ EAPI void emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend s
*
* @ingroup Emotion_Ressource
*/
-EAPI Emotion_Suspend emotion_object_suspend_get(Evas_Object *obj);
+EMOTION_API Emotion_Suspend emotion_object_suspend_get(Evas_Object *obj);
/**
* @brief Load the last known position if available
@@ -1249,7 +1217,7 @@ EAPI Emotion_Suspend emotion_object_suspend_get(Evas_Object *obj);
*
* @ingroup Emotion_Info
*/
-EAPI void emotion_object_last_position_load(Evas_Object *obj);
+EMOTION_API void emotion_object_last_position_load(Evas_Object *obj);
/**
* @brief Save the lastest position if possible
@@ -1265,7 +1233,7 @@ EAPI void emotion_object_last_position_load(Evas_Object *obj);
*
* @ingroup Emotion_Info
*/
-EAPI void emotion_object_last_position_save(Evas_Object *obj);
+EMOTION_API void emotion_object_last_position_save(Evas_Object *obj);
/**
* @brief Do we have a chance to play that file
@@ -1277,7 +1245,7 @@ EAPI void emotion_object_last_position_save(Evas_Object *obj);
*
* @see emotion_object_extension_may_play_get()
*/
-EAPI Eina_Bool emotion_object_extension_may_play_fast_get(const char *file);
+EMOTION_API Eina_Bool emotion_object_extension_may_play_fast_get(const char *file);
/**
* @brief Do we have a chance to play that file
@@ -1289,7 +1257,7 @@ EAPI Eina_Bool emotion_object_extension_may_play_fast_get(const char *file);
*
* @see emotion_object_extension_may_play_fast_get()
*/
-EAPI Eina_Bool emotion_object_extension_may_play_get(const char *file);
+EMOTION_API Eina_Bool emotion_object_extension_may_play_get(const char *file);
/**
* @brief Get the actual image object that contains the pixels of the video stream
@@ -1300,7 +1268,7 @@ EAPI Eina_Bool emotion_object_extension_may_play_get(const char *file);
*
* @see emotion_object_image_get()
*/
-EAPI Evas_Object *emotion_object_image_get(const Evas_Object *obj);
+EMOTION_API Evas_Object *emotion_object_image_get(const Evas_Object *obj);
/**
* @defgroup Emotion_Webcam API available for accessing webcam
@@ -1309,9 +1277,9 @@ EAPI Evas_Object *emotion_object_image_get(const Evas_Object *obj);
typedef struct _Emotion_Webcam Emotion_Webcam; /**< Webcam description */
-EAPI extern int EMOTION_WEBCAM_UPDATE; /**< Ecore_Event triggered when a new webcam is plugged or unplugged */
-EAPI extern int EMOTION_WEBCAM_ADD; /**< Ecore_Event triggered when a new webcam is plugged in @since 1.8*/
-EAPI extern int EMOTION_WEBCAM_DEL; /**< Ecore_Event triggered when a webcam is unplugged @since 1.8 */
+EMOTION_API extern int EMOTION_WEBCAM_UPDATE; /**< Ecore_Event triggered when a new webcam is plugged or unplugged */
+EMOTION_API extern int EMOTION_WEBCAM_ADD; /**< Ecore_Event triggered when a new webcam is plugged in @since 1.8*/
+EMOTION_API extern int EMOTION_WEBCAM_DEL; /**< Ecore_Event triggered when a webcam is unplugged @since 1.8 */
/**
* @brief Get a list of active and available webcam
@@ -1323,7 +1291,7 @@ EAPI extern int EMOTION_WEBCAM_DEL; /**< Ecore_Event triggered when a webcam is
*
* @ingroup Emotion_Webcam
*/
-EAPI const Eina_List *emotion_webcams_get(void);
+EMOTION_API const Eina_List *emotion_webcams_get(void);
/**
* @brief Get the human understandable name of a Webcam
@@ -1333,7 +1301,7 @@ EAPI const Eina_List *emotion_webcams_get(void);
*
* @ingroup Emotion_Webcam
*/
-EAPI const char *emotion_webcam_name_get(const Emotion_Webcam *ew);
+EMOTION_API const char *emotion_webcam_name_get(const Emotion_Webcam *ew);
/**
* @brief Get the uri of a Webcam that will be understood by emotion
@@ -1343,7 +1311,7 @@ EAPI const char *emotion_webcam_name_get(const Emotion_Webcam *ew);
*
* @ingroup Emotion_Webcam
*/
-EAPI const char *emotion_webcam_device_get(const Emotion_Webcam *ew);
+EMOTION_API const char *emotion_webcam_device_get(const Emotion_Webcam *ew);
/**
* @brief Get the album artwork from file meta data tags.
@@ -1357,7 +1325,7 @@ EAPI const char *emotion_webcam_device_get(const Emotion_Webcam *ew);
* @since 1.19
*/
-EAPI Evas_Object *emotion_file_meta_artwork_get(const Evas_Object *obj, const char *path, Emotion_Artwork_Info type);
+EMOTION_API Evas_Object *emotion_file_meta_artwork_get(const Evas_Object *obj, const char *path, Emotion_Artwork_Info type);
/**
* @}
*/
@@ -1366,7 +1334,4 @@ EAPI Evas_Object *emotion_file_meta_artwork_get(const Evas_Object *obj, cons
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/emotion/efl_canvas_video.eo b/src/lib/emotion/efl_canvas_video.eo
index 162e0fcc27..33549391a9 100644
--- a/src/lib/emotion/efl_canvas_video.eo
+++ b/src/lib/emotion/efl_canvas_video.eo
@@ -60,7 +60,7 @@ class @beta Efl.Canvas.Video extends Efl.Canvas.Group
Efl.Player.playing { get; set; }
Efl.Player.paused { get; set; }
Efl.Player.playback_position { get; set; }
- Efl.Player.playback_progress { get; }
+ Efl.Player.playback_progress { get; set; }
Efl.Audio_Control.volume { get; set; }
Efl.Audio_Control.mute { get; set; }
Efl.Playable.length { get; }
@@ -92,14 +92,14 @@ class @beta Efl.Canvas.Video extends Efl.Canvas.Group
}
/* FIXME: Need to be added:
-EAPI double emotion_object_buffer_size_get (const Evas_Object *obj);
-EAPI const char *emotion_object_progress_info_get (const Evas_Object *obj);
+EMOTION_API double emotion_object_buffer_size_get (const Evas_Object *obj);
+EMOTION_API const char *emotion_object_progress_info_get (const Evas_Object *obj);
Everything starting from (needs to be added):
-EAPI int emotion_object_audio_channel_count (const Evas_Object *obj);
+EMOTION_API int emotion_object_audio_channel_count (const Evas_Object *obj);
Should this be part of player or emotion object?
-EAPI void emotion_object_event_simple_send (Evas_Object *obj, Emotion_Event ev);
+EMOTION_API void emotion_object_event_simple_send (Evas_Object *obj, Emotion_Event ev);
Deliberations:
Should this really implement the image interface?
diff --git a/src/lib/emotion/efl_canvas_video_eo.legacy.c b/src/lib/emotion/efl_canvas_video_eo.legacy.c
index e7e0dcee67..987408dd7b 100644
--- a/src/lib/emotion/efl_canvas_video_eo.legacy.c
+++ b/src/lib/emotion/efl_canvas_video_eo.legacy.c
@@ -1,11 +1,11 @@
-EAPI void
+EMOTION_API void
emotion_object_module_option_set(Efl_Canvas_Video *obj, const char *opt, const char *val)
{
efl_canvas_video_option_set(obj, opt, val);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_init(Efl_Canvas_Video *obj, const char *module_filename)
{
return efl_canvas_video_engine_set(obj, module_filename);
diff --git a/src/lib/emotion/efl_canvas_video_eo.legacy.h b/src/lib/emotion/efl_canvas_video_eo.legacy.h
index 205c305aea..19a8a33270 100644
--- a/src/lib/emotion/efl_canvas_video_eo.legacy.h
+++ b/src/lib/emotion/efl_canvas_video_eo.legacy.h
@@ -29,7 +29,7 @@ typedef Eo Efl_Canvas_Video;
*
* @ingroup (null)_Group
*/
-EAPI void emotion_object_module_option_set(Efl_Canvas_Video *obj, const char *opt, const char *val);
+EMOTION_API void emotion_object_module_option_set(Efl_Canvas_Video *obj, const char *opt, const char *val);
/**
* @brief Initializes an emotion object with the specified module.
@@ -55,6 +55,6 @@ EAPI void emotion_object_module_option_set(Efl_Canvas_Video *obj, const char *op
*
* @ingroup (null)_Group
*/
-EAPI Eina_Bool emotion_object_init(Efl_Canvas_Video *obj, const char *module_filename);
+EMOTION_API Eina_Bool emotion_object_init(Efl_Canvas_Video *obj, const char *module_filename);
#endif
diff --git a/src/lib/emotion/emotion_api.h b/src/lib/emotion/emotion_api.h
new file mode 100644
index 0000000000..fc4d7704fa
--- /dev/null
+++ b/src/lib/emotion/emotion_api.h
@@ -0,0 +1,32 @@
+#ifndef _EFL_EMOTION_API_H
+#define _EFL_EMOTION_API_H
+
+#ifdef EMOTION_API
+#error EMOTION_API should not be already defined
+#endif
+
+#ifdef _WIN32
+# ifndef EMOTION_STATIC
+# ifdef EMOTION_BUILD
+# define EMOTION_API __declspec(dllexport)
+# else
+# define EMOTION_API __declspec(dllimport)
+# endif
+# else
+# define EMOTION_API
+# endif
+# define EMOTION_API_WEAK
+#elif defined(__GNUC__)
+# if __GNUC__ >= 4
+# define EMOTION_API __attribute__ ((visibility("default")))
+# define EMOTION_API_WEAK __attribute__ ((weak))
+# else
+# define EMOTION_API
+# define EMOTION_API_WEAK
+# endif
+#else
+# define EMOTION_API
+# define EMOTION_API_WEAK
+#endif
+
+#endif
diff --git a/src/lib/emotion/emotion_main.c b/src/lib/emotion/emotion_main.c
index d641621105..8ad5877f70 100644
--- a/src/lib/emotion/emotion_main.c
+++ b/src/lib/emotion/emotion_main.c
@@ -20,7 +20,7 @@
static Emotion_Version _version = { VMAJ, VMIN, VMIC, VREV };
static int emotion_pending_objects = 0;
static Eina_Lock emotion_pending_lock;
-EAPI Emotion_Version *emotion_version = &_version;
+EMOTION_API Emotion_Version *emotion_version = &_version;
Eina_Prefix *_emotion_pfx = NULL;
int _emotion_log_domain = -1;
@@ -115,14 +115,14 @@ _emotion_object_extension_can_play_generic_get(const void *data EINA_UNUSED, con
return EINA_FALSE;
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_extension_may_play_fast_get(const char *file)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE);
return _emotion_object_extension_can_play_generic_get(NULL, file);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_extension_may_play_get(const char *file)
{
const char *tmp;
@@ -138,7 +138,7 @@ emotion_object_extension_may_play_get(const char *file)
static int _emotion_init_count = 0;
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_init(void)
{
char buffer[PATH_MAX];
@@ -173,7 +173,6 @@ emotion_init(void)
_emotion_config_file = eet_open(buffer, EET_FILE_MODE_READ);
if (!emotion_webcam_init()) goto error_webcam;
- emotion_webcam_config_load(_emotion_config_file);
if (!emotion_modules_init()) goto error_modules;
@@ -197,7 +196,7 @@ emotion_init(void)
static int emotion_pendig_events = 0;
-EAPI void
+EMOTION_API void
_emotion_pending_ecore_begin(void)
{
eina_lock_take(&emotion_pending_lock);
@@ -205,7 +204,7 @@ _emotion_pending_ecore_begin(void)
eina_lock_release(&emotion_pending_lock);
}
-EAPI void
+EMOTION_API void
_emotion_pending_ecore_end(void)
{
eina_lock_take(&emotion_pending_lock);
@@ -213,7 +212,7 @@ _emotion_pending_ecore_end(void)
eina_lock_release(&emotion_pending_lock);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_shutdown(void)
{
double start;
@@ -273,7 +272,7 @@ emotion_shutdown(void)
return EINA_TRUE;
}
-EAPI void
+EMOTION_API void
_emotion_pending_object_ref(void)
{
eina_lock_take(&emotion_pending_lock);
@@ -281,7 +280,7 @@ _emotion_pending_object_ref(void)
eina_lock_release(&emotion_pending_lock);
}
-EAPI void
+EMOTION_API void
_emotion_pending_object_unref(void)
{
eina_lock_take(&emotion_pending_lock);
diff --git a/src/lib/emotion/emotion_modules.c b/src/lib/emotion/emotion_modules.c
index c23d0bb69d..0662556868 100644
--- a/src/lib/emotion/emotion_modules.c
+++ b/src/lib/emotion/emotion_modules.c
@@ -11,22 +11,10 @@
#include "../../static_libs/buildsystem/buildsystem.h"
#include <unistd.h>
-#ifdef EMOTION_STATIC_BUILD_XINE
-Eina_Bool xine_module_init(void);
-void xine_module_shutdown(void);
-#endif
-#if defined(EMOTION_STATIC_BUILD_GSTREAMER) || defined(EMOTION_STATIC_BUILD_GSTREAMER1)
+#if defined(EMOTION_STATIC_BUILD_GSTREAMER1)
Eina_Bool gstreamer_module_init(void);
void gstreamer_module_shutdown(void);
#endif
-#ifdef EMOTION_STATIC_BUILD_LIBVLC
-Eina_Bool libvlc_module_init(void);
-void libvlc_module_shutdown(void);
-#endif
-#ifdef EMOTION_STATIC_BUILD_GENERIC
-Eina_Bool generic_module_init(void);
-void generic_module_shutdown(void);
-#endif
typedef struct _Emotion_Engine_Registry_Entry
{
@@ -81,15 +69,7 @@ _emotion_modules_load(void)
if (stat(buf, &st) == 0)
{
const char *built_modules[] = {
-#ifdef EMOTION_BUILD_GSTREAMER1
"gstreamer1",
-#endif
-#ifdef EMOTION_BUILD_XINE
- "xine",
-#endif
-#ifdef EMOTION_BUILD_LIBVLC
- "libvlc",
-#endif
NULL
};
const char **itr;
@@ -128,18 +108,9 @@ _emotion_modules_load(void)
Eina_Bool
emotion_modules_init(void)
{
-#ifdef EMOTION_STATIC_BUILD_XINE
- xine_module_init();
-#endif
-#if defined(EMOTION_STATIC_BUILD_GSTREAMER) || defined(EMOTION_STATIC_BUILD_GSTREAMER1)
+#if defined(EMOTION_STATIC_BUILD_GSTREAMER1)
gstreamer_module_init();
#endif
-#ifdef EMOTION_STATIC_BUILD_LIBVLC
- libvlc_module_init();
-#endif
-#ifdef EMOTION_STATIC_BUILD_GENERIC
- generic_module_init();
-#endif
return EINA_TRUE;
}
@@ -149,18 +120,9 @@ emotion_modules_shutdown(void)
{
Emotion_Engine_Registry_Entry *re;
-#ifdef EMOTION_STATIC_BUILD_XINE
- xine_module_shutdown();
-#endif
-#if defined(EMOTION_STATIC_BUILD_GSTREAMER) || defined(EMOTION_STATIC_BUILD_GSTREAMER1)
+#if defined(EMOTION_STATIC_BUILD_GSTREAMER1)
gstreamer_module_shutdown();
#endif
-#ifdef EMOTION_STATIC_BUILD_LIBVLC
- libvlc_module_shutdown();
-#endif
-#ifdef EMOTION_STATIC_BUILD_GENERIC
- generic_module_shutdown();
-#endif
if (_emotion_modules)
{
@@ -178,7 +140,7 @@ emotion_modules_shutdown(void)
_emotion_modules_loaded = EINA_FALSE;
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
_emotion_module_register(const Emotion_Engine *api)
{
Emotion_Engine_Registry_Entry *re;
@@ -209,7 +171,7 @@ _emotion_module_register(const Emotion_Engine *api)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
_emotion_module_unregister(const Emotion_Engine *api)
{
Eina_List *n;
@@ -403,11 +365,7 @@ emotion_engine_instance_new(const char *name, Evas_Object *obj, Emotion_Module_O
if (!_emotion_engine_registry)
{
- m = _find_mod("generic");
- if (!m) m = _find_mod("xine");
- if (!m) m = _find_mod("gstreamer");
- if (!m) m = _find_mod("gstreamer1");
- if (!m) m = _find_mod("libvlc");
+ m = _find_mod("gstreamer1");
if (!eina_module_load(m))
ERR("Cannot load module %s", eina_module_file_get(m));
}
diff --git a/src/lib/emotion/emotion_modules.h b/src/lib/emotion/emotion_modules.h
index 8e41121796..3d05ff795c 100644
--- a/src/lib/emotion/emotion_modules.h
+++ b/src/lib/emotion/emotion_modules.h
@@ -3,31 +3,7 @@
#include "Emotion.h"
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <emotion_api.h>
#define META_TRACK_TITLE 1
#define META_TRACK_ARTIST 2
@@ -132,38 +108,35 @@ struct _Emotion_Engine
void * (*meta_artwork_get)(void *ef, Evas_Object *img, const char *path, Emotion_Artwork_Info type);
};
-EAPI void *_emotion_video_get(const Evas_Object *obj);
-EAPI void _emotion_frame_new(Evas_Object *obj);
-EAPI void _emotion_video_pos_update(Evas_Object *obj, double pos, double len);
-EAPI void _emotion_frame_resize(Evas_Object *obj, int w, int h, double ratio);
-EAPI void _emotion_frame_refill(Evas_Object *obj, double w, double h);
-EAPI void _emotion_decode_stop(Evas_Object *obj);
-EAPI void _emotion_open_done(Evas_Object *obj);
-EAPI void _emotion_playback_started(Evas_Object *obj);
-EAPI void _emotion_playback_finished(Evas_Object *obj);
-EAPI void _emotion_audio_level_change(Evas_Object *obj);
-EAPI void _emotion_channels_change(Evas_Object *obj);
-EAPI void _emotion_title_set(Evas_Object *obj, char *title);
-EAPI void _emotion_progress_set(Evas_Object *obj, char *info, double stat);
-EAPI void _emotion_file_ref_set(Evas_Object *obj, const char *file, int num);
-EAPI void _emotion_spu_button_num_set(Evas_Object *obj, int num);
-EAPI void _emotion_spu_button_set(Evas_Object *obj, int button);
-EAPI void _emotion_seek_done(Evas_Object *obj);
-EAPI void _emotion_image_reset(Evas_Object *obj);
-
-EAPI void _emotion_pending_object_ref(void);
-EAPI void _emotion_pending_object_unref(void);
-
-EAPI void _emotion_pending_ecore_begin(void);
-EAPI void _emotion_pending_ecore_end(void);
-
-
-EAPI const char *emotion_webcam_custom_get(const char *device);
-
-EAPI Eina_Bool _emotion_module_register(const Emotion_Engine *api);
-EAPI Eina_Bool _emotion_module_unregister(const Emotion_Engine *api);
-
-#undef EAPI
-#define EAPI
+EMOTION_API void *_emotion_video_get(const Evas_Object *obj);
+EMOTION_API void _emotion_frame_new(Evas_Object *obj);
+EMOTION_API void _emotion_video_pos_update(Evas_Object *obj, double pos, double len);
+EMOTION_API void _emotion_frame_resize(Evas_Object *obj, int w, int h, double ratio);
+EMOTION_API void _emotion_frame_refill(Evas_Object *obj, double w, double h);
+EMOTION_API void _emotion_decode_stop(Evas_Object *obj);
+EMOTION_API void _emotion_open_done(Evas_Object *obj);
+EMOTION_API void _emotion_playback_started(Evas_Object *obj);
+EMOTION_API void _emotion_playback_finished(Evas_Object *obj);
+EMOTION_API void _emotion_audio_level_change(Evas_Object *obj);
+EMOTION_API void _emotion_channels_change(Evas_Object *obj);
+EMOTION_API void _emotion_title_set(Evas_Object *obj, char *title);
+EMOTION_API void _emotion_progress_set(Evas_Object *obj, char *info, double stat);
+EMOTION_API void _emotion_file_ref_set(Evas_Object *obj, const char *file, int num);
+EMOTION_API void _emotion_spu_button_num_set(Evas_Object *obj, int num);
+EMOTION_API void _emotion_spu_button_set(Evas_Object *obj, int button);
+EMOTION_API void _emotion_seek_done(Evas_Object *obj);
+EMOTION_API void _emotion_image_reset(Evas_Object *obj);
+
+EMOTION_API void _emotion_pending_object_ref(void);
+EMOTION_API void _emotion_pending_object_unref(void);
+
+EMOTION_API void _emotion_pending_ecore_begin(void);
+EMOTION_API void _emotion_pending_ecore_end(void);
+
+
+EMOTION_API const char *emotion_webcam_custom_get(const char *device);
+
+EMOTION_API Eina_Bool _emotion_module_register(const Emotion_Engine *api);
+EMOTION_API Eina_Bool _emotion_module_unregister(const Emotion_Engine *api);
#endif
diff --git a/src/lib/emotion/emotion_private.h b/src/lib/emotion/emotion_private.h
index 34e2bc3c9b..972224e5d1 100644
--- a/src/lib/emotion/emotion_private.h
+++ b/src/lib/emotion/emotion_private.h
@@ -7,7 +7,6 @@
Eina_Bool emotion_webcam_init(void);
void emotion_webcam_shutdown(void);
-Eina_Bool emotion_webcam_config_load(Eet_File *ef);
Eina_Bool emotion_modules_init(void);
void emotion_modules_shutdown(void);
diff --git a/src/lib/emotion/emotion_smart.c b/src/lib/emotion/emotion_smart.c
index a642386fbe..e8c22e912c 100644
--- a/src/lib/emotion/emotion_smart.c
+++ b/src/lib/emotion/emotion_smart.c
@@ -233,7 +233,7 @@ _clipper_position_size_update(Evas_Object *obj, int x, int y, int w, int h, int
-EAPI Evas_Object *
+EMOTION_API Evas_Object *
emotion_object_add(Evas *evas)
{
evas = evas_find(evas);
@@ -251,7 +251,7 @@ _efl_canvas_video_efl_object_constructor(Eo *obj, Efl_Canvas_Video_Data *pd EINA
return obj;
}
-EAPI Evas_Object *
+EMOTION_API Evas_Object *
emotion_object_image_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
@@ -346,7 +346,7 @@ _efl_canvas_video_engine_set(Eo *obj, Efl_Canvas_Video_Data *pd, const char *eng
return EINA_TRUE;
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_file_set(Evas_Object *obj, const char *file)
{
return efl_file_simple_load(obj, file, NULL);
@@ -439,7 +439,7 @@ _efl_canvas_video_efl_file_load(Eo *obj EINA_UNUSED, Efl_Canvas_Video_Data *sd)
return 0;
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_file_get(const Evas_Object *obj)
{
return efl_file_get(obj);
@@ -574,7 +574,7 @@ _efl_canvas_video_aspect_border_apply(Evas_Object *obj, Efl_Canvas_Video_Data *s
_emotion_aspect_borders_apply(obj, sd, w, h, iw, ih);
}
-EAPI void
+EMOTION_API void
emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b)
{
Efl_Canvas_Video_Data *sd;
@@ -591,7 +591,7 @@ emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b)
_efl_canvas_video_aspect_border_apply(obj, sd, w, h);
}
-EAPI void
+EMOTION_API void
emotion_object_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b)
{
Efl_Canvas_Video_Data *sd;
@@ -603,7 +603,7 @@ emotion_object_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b
*b = -sd->crop.b;
}
-EAPI void
+EMOTION_API void
emotion_object_bg_color_set(Evas_Object *obj, int r, int g, int b, int a)
{
Efl_Canvas_Video_Data *sd;
@@ -612,7 +612,7 @@ emotion_object_bg_color_set(Evas_Object *obj, int r, int g, int b, int a)
evas_object_color_set(sd->bg, r, g, b, a);
}
-EAPI void
+EMOTION_API void
emotion_object_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a)
{
Efl_Canvas_Video_Data *sd;
@@ -621,7 +621,7 @@ emotion_object_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b, int
evas_object_color_get(sd->bg, r, g, b, a);
}
-EAPI void
+EMOTION_API void
emotion_object_keep_aspect_set(Evas_Object *obj, Emotion_Aspect a)
{
Efl_Canvas_Video_Data *sd;
@@ -635,7 +635,7 @@ emotion_object_keep_aspect_set(Evas_Object *obj, Emotion_Aspect a)
_efl_canvas_video_aspect_border_apply(obj, sd, w, h);
}
-EAPI Emotion_Aspect
+EMOTION_API Emotion_Aspect
emotion_object_keep_aspect_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -644,7 +644,7 @@ emotion_object_keep_aspect_get(const Evas_Object *obj)
return sd->aspect;
}
-EAPI void
+EMOTION_API void
emotion_object_play_set(Evas_Object *obj, Eina_Bool play)
{
/* avoid calling playback_position_set(0) for legacy */
@@ -705,7 +705,7 @@ _efl_canvas_video_efl_player_paused_set(Eo *obj, Efl_Canvas_Video_Data *sd, Eina
return EINA_TRUE;
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_play_get(const Evas_Object *obj)
{
return efl_player_playing_get(obj) && !efl_player_paused_get(obj);
@@ -726,7 +726,7 @@ _efl_canvas_video_efl_player_paused_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Vi
return sd->pause;
}
-EAPI void
+EMOTION_API void
emotion_object_position_set(Evas_Object *obj, double sec)
{
efl_player_playback_position_set(obj, sec);
@@ -751,7 +751,7 @@ _efl_canvas_video_efl_player_playback_position_set(Eo *obj, Efl_Canvas_Video_Dat
sd->job = ecore_job_add(_pos_set_job, obj);
}
-EAPI double
+EMOTION_API double
emotion_object_position_get(const Evas_Object *obj)
{
return efl_player_playback_position_get(obj);
@@ -765,7 +765,7 @@ _efl_canvas_video_efl_player_playback_position_get(const Eo *obj EINA_UNUSED, Ef
return sd->pos;
}
-EAPI double
+EMOTION_API double
emotion_object_buffer_size_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -775,13 +775,13 @@ emotion_object_buffer_size_get(const Evas_Object *obj)
return emotion_engine_instance_buffer_size_get(sd->engine_instance);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_seekable_get(const Evas_Object *obj)
{
return efl_playable_seekable_get(obj);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_video_handled_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -791,7 +791,7 @@ emotion_object_video_handled_get(const Evas_Object *obj)
return emotion_engine_instance_video_handled(sd->engine_instance);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_audio_handled_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -801,13 +801,13 @@ emotion_object_audio_handled_get(const Evas_Object *obj)
return emotion_engine_instance_audio_handled(sd->engine_instance);
}
-EAPI double
+EMOTION_API double
emotion_object_play_length_get(const Evas_Object *obj)
{
return efl_playable_length_get(obj);
}
-EAPI void
+EMOTION_API void
emotion_object_size_get(const Evas_Object *obj, int *iw, int *ih)
{
Eina_Size2D sz;
@@ -824,7 +824,7 @@ _efl_canvas_video_efl_gfx_image_load_controller_load_size_get(const Eo *obj EINA
return EINA_SIZE2D(sd->video.w, sd->video.h);
}
-EAPI void
+EMOTION_API void
emotion_object_smooth_scale_set(Evas_Object *obj, Eina_Bool smooth)
{
efl_gfx_image_smooth_scale_set(obj, smooth);
@@ -836,7 +836,7 @@ _efl_canvas_video_efl_gfx_image_smooth_scale_set(Eo *obj EINA_UNUSED, Efl_Canvas
evas_object_image_smooth_scale_set(sd->obj, smooth);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_smooth_scale_get(const Evas_Object *obj)
{
return efl_gfx_image_smooth_scale_get(obj);
@@ -848,7 +848,7 @@ _efl_canvas_video_efl_gfx_image_smooth_scale_get(const Eo *obj EINA_UNUSED, Efl_
return evas_object_image_smooth_scale_get(sd->obj);
}
-EAPI double
+EMOTION_API double
emotion_object_ratio_get(const Evas_Object *obj)
{
return efl_gfx_image_ratio_get(obj);
@@ -864,7 +864,7 @@ _efl_canvas_video_efl_gfx_image_ratio_get(const Eo *obj EINA_UNUSED, Efl_Canvas_
/*
* Send a control event to the DVD.
*/
-EAPI void
+EMOTION_API void
emotion_object_event_simple_send(Evas_Object *obj, Emotion_Event ev)
{
Efl_Canvas_Video_Data *sd;
@@ -874,7 +874,7 @@ emotion_object_event_simple_send(Evas_Object *obj, Emotion_Event ev)
emotion_engine_instance_event_feed(sd->engine_instance, ev);
}
-EAPI void
+EMOTION_API void
emotion_object_audio_volume_set(Evas_Object *obj, double vol)
{
efl_audio_control_volume_set(obj, vol);
@@ -888,7 +888,7 @@ _efl_canvas_video_efl_audio_control_volume_set(Eo *obj EINA_UNUSED, Efl_Canvas_V
emotion_engine_instance_audio_channel_volume_set(sd->engine_instance, vol);
}
-EAPI double
+EMOTION_API double
emotion_object_audio_volume_get(const Evas_Object *obj)
{
return efl_audio_control_volume_get(obj);
@@ -901,7 +901,7 @@ _efl_canvas_video_efl_audio_control_volume_get(const Eo *obj EINA_UNUSED, Efl_Ca
return emotion_engine_instance_audio_channel_volume_get(sd->engine_instance);
}
-EAPI void
+EMOTION_API void
emotion_object_audio_mute_set(Evas_Object *obj, Eina_Bool mute)
{
efl_audio_control_mute_set(obj, mute);
@@ -915,7 +915,7 @@ _efl_canvas_video_efl_audio_control_mute_set(Eo *obj EINA_UNUSED, Efl_Canvas_Vid
emotion_engine_instance_audio_channel_mute_set(sd->engine_instance, mute);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_audio_mute_get(const Evas_Object *obj)
{
return efl_audio_control_mute_get(obj);
@@ -928,7 +928,7 @@ _efl_canvas_video_efl_audio_control_mute_get(const Eo *obj EINA_UNUSED, Efl_Canv
return emotion_engine_instance_audio_channel_mute_get(sd->engine_instance);
}
-EAPI int
+EMOTION_API int
emotion_object_audio_channel_count(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -938,7 +938,7 @@ emotion_object_audio_channel_count(const Evas_Object *obj)
return emotion_engine_instance_audio_channel_count(sd->engine_instance);
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_audio_channel_name_get(const Evas_Object *obj, int channel)
{
Efl_Canvas_Video_Data *sd;
@@ -948,7 +948,7 @@ emotion_object_audio_channel_name_get(const Evas_Object *obj, int channel)
return emotion_engine_instance_audio_channel_name_get(sd->engine_instance, channel);
}
-EAPI void
+EMOTION_API void
emotion_object_audio_channel_set(Evas_Object *obj, int channel)
{
Efl_Canvas_Video_Data *sd;
@@ -959,7 +959,7 @@ emotion_object_audio_channel_set(Evas_Object *obj, int channel)
emotion_engine_instance_audio_channel_set(sd->engine_instance, channel);
}
-EAPI int
+EMOTION_API int
emotion_object_audio_channel_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -969,7 +969,7 @@ emotion_object_audio_channel_get(const Evas_Object *obj)
return emotion_engine_instance_audio_channel_get(sd->engine_instance);
}
-EAPI void
+EMOTION_API void
emotion_object_video_mute_set(Evas_Object *obj, Eina_Bool mute)
{
Efl_Canvas_Video_Data *sd;
@@ -980,7 +980,7 @@ emotion_object_video_mute_set(Evas_Object *obj, Eina_Bool mute)
emotion_engine_instance_video_channel_mute_set(sd->engine_instance, mute);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_video_mute_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -990,7 +990,7 @@ emotion_object_video_mute_get(const Evas_Object *obj)
return emotion_engine_instance_video_channel_mute_get(sd->engine_instance);
}
-EAPI void
+EMOTION_API void
emotion_object_video_subtitle_file_set(Evas_Object *obj, const char *filepath)
{
Efl_Canvas_Video_Data *sd;
@@ -1002,7 +1002,7 @@ emotion_object_video_subtitle_file_set(Evas_Object *obj, const char *filepath)
emotion_engine_instance_video_subtitle_file_set(sd->engine_instance, filepath);
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_video_subtitle_file_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1012,7 +1012,7 @@ emotion_object_video_subtitle_file_get(const Evas_Object *obj)
return emotion_engine_instance_video_subtitle_file_get(sd->engine_instance);
}
-EAPI int
+EMOTION_API int
emotion_object_video_channel_count(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1022,7 +1022,7 @@ emotion_object_video_channel_count(const Evas_Object *obj)
return emotion_engine_instance_video_channel_count(sd->engine_instance);
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_video_channel_name_get(const Evas_Object *obj, int channel)
{
Efl_Canvas_Video_Data *sd;
@@ -1032,7 +1032,7 @@ emotion_object_video_channel_name_get(const Evas_Object *obj, int channel)
return emotion_engine_instance_video_channel_name_get(sd->engine_instance, channel);
}
-EAPI void
+EMOTION_API void
emotion_object_video_channel_set(Evas_Object *obj, int channel)
{
Efl_Canvas_Video_Data *sd;
@@ -1043,7 +1043,7 @@ emotion_object_video_channel_set(Evas_Object *obj, int channel)
emotion_engine_instance_video_channel_set(sd->engine_instance, channel);
}
-EAPI int
+EMOTION_API int
emotion_object_video_channel_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1053,7 +1053,7 @@ emotion_object_video_channel_get(const Evas_Object *obj)
return emotion_engine_instance_video_channel_get(sd->engine_instance);
}
-EAPI void
+EMOTION_API void
emotion_object_spu_mute_set(Evas_Object *obj, Eina_Bool mute)
{
Efl_Canvas_Video_Data *sd;
@@ -1064,7 +1064,7 @@ emotion_object_spu_mute_set(Evas_Object *obj, Eina_Bool mute)
emotion_engine_instance_spu_channel_mute_set(sd->engine_instance, mute);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_spu_mute_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1074,7 +1074,7 @@ emotion_object_spu_mute_get(const Evas_Object *obj)
return emotion_engine_instance_spu_channel_mute_get(sd->engine_instance);
}
-EAPI int
+EMOTION_API int
emotion_object_spu_channel_count(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1084,7 +1084,7 @@ emotion_object_spu_channel_count(const Evas_Object *obj)
return emotion_engine_instance_spu_channel_count(sd->engine_instance);
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_spu_channel_name_get(const Evas_Object *obj, int channel)
{
Efl_Canvas_Video_Data *sd;
@@ -1094,7 +1094,7 @@ emotion_object_spu_channel_name_get(const Evas_Object *obj, int channel)
return emotion_engine_instance_spu_channel_name_get(sd->engine_instance, channel);
}
-EAPI void
+EMOTION_API void
emotion_object_spu_channel_set(Evas_Object *obj, int channel)
{
Efl_Canvas_Video_Data *sd;
@@ -1105,7 +1105,7 @@ emotion_object_spu_channel_set(Evas_Object *obj, int channel)
emotion_engine_instance_spu_channel_set(sd->engine_instance, channel);
}
-EAPI int
+EMOTION_API int
emotion_object_spu_channel_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1115,7 +1115,7 @@ emotion_object_spu_channel_get(const Evas_Object *obj)
return emotion_engine_instance_spu_channel_get(sd->engine_instance);
}
-EAPI int
+EMOTION_API int
emotion_object_chapter_count(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1125,7 +1125,7 @@ emotion_object_chapter_count(const Evas_Object *obj)
return emotion_engine_instance_chapter_count(sd->engine_instance);
}
-EAPI void
+EMOTION_API void
emotion_object_chapter_set(Evas_Object *obj, int chapter)
{
Efl_Canvas_Video_Data *sd;
@@ -1136,7 +1136,7 @@ emotion_object_chapter_set(Evas_Object *obj, int chapter)
emotion_engine_instance_chapter_set(sd->engine_instance, chapter);
}
-EAPI int
+EMOTION_API int
emotion_object_chapter_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1146,7 +1146,7 @@ emotion_object_chapter_get(const Evas_Object *obj)
return emotion_engine_instance_chapter_get(sd->engine_instance);
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_chapter_name_get(const Evas_Object *obj, int chapter)
{
Efl_Canvas_Video_Data *sd;
@@ -1156,7 +1156,7 @@ emotion_object_chapter_name_get(const Evas_Object *obj, int chapter)
return emotion_engine_instance_chapter_name_get(sd->engine_instance, chapter);
}
-EAPI void
+EMOTION_API void
emotion_object_play_speed_set(Evas_Object *obj, double speed)
{
Efl_Canvas_Video_Data *sd;
@@ -1167,7 +1167,7 @@ emotion_object_play_speed_set(Evas_Object *obj, double speed)
emotion_engine_instance_speed_set(sd->engine_instance, speed);
}
-EAPI double
+EMOTION_API double
emotion_object_play_speed_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1177,7 +1177,7 @@ emotion_object_play_speed_get(const Evas_Object *obj)
return emotion_engine_instance_speed_get(sd->engine_instance);
}
-EAPI void
+EMOTION_API void
emotion_object_eject(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1187,7 +1187,7 @@ emotion_object_eject(Evas_Object *obj)
emotion_engine_instance_eject(sd->engine_instance);
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_title_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1196,7 +1196,7 @@ emotion_object_title_get(const Evas_Object *obj)
return sd->title;
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_progress_info_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1205,7 +1205,7 @@ emotion_object_progress_info_get(const Evas_Object *obj)
return sd->progress.info;
}
-EAPI double
+EMOTION_API double
emotion_object_progress_status_get(const Evas_Object *obj)
{
return efl_player_playback_progress_get(obj);
@@ -1217,6 +1217,13 @@ _efl_canvas_video_efl_player_playback_progress_get(const Eo *obj EINA_UNUSED, Ef
return sd->progress.stat;
}
+EOLIAN static void
+_efl_canvas_video_efl_player_playback_progress_set(Eo *obj, Efl_Canvas_Video_Data *sd EINA_UNUSED, double progress)
+{
+ const char *info = emotion_object_progress_info_get((const Evas_Object*)obj);
+ _emotion_progress_set(obj, (char*)info, progress);
+}
+
EOLIAN static double
_efl_canvas_video_efl_playable_length_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Video_Data *sd)
{
@@ -1232,7 +1239,7 @@ _efl_canvas_video_efl_playable_seekable_get(const Eo *obj EINA_UNUSED, Efl_Canva
return emotion_engine_instance_seekable(sd->engine_instance);
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_ref_file_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1241,7 +1248,7 @@ emotion_object_ref_file_get(const Evas_Object *obj)
return sd->ref.file;
}
-EAPI int
+EMOTION_API int
emotion_object_ref_num_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1250,7 +1257,7 @@ emotion_object_ref_num_get(const Evas_Object *obj)
return sd->ref.num;
}
-EAPI int
+EMOTION_API int
emotion_object_spu_button_count_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1259,7 +1266,7 @@ emotion_object_spu_button_count_get(const Evas_Object *obj)
return sd->spu.button_num;
}
-EAPI int
+EMOTION_API int
emotion_object_spu_button_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1268,7 +1275,7 @@ emotion_object_spu_button_get(const Evas_Object *obj)
return sd->spu.button;
}
-EAPI const char *
+EMOTION_API const char *
emotion_object_meta_info_get(const Evas_Object *obj, Emotion_Meta_Info meta)
{
Efl_Canvas_Video_Data *sd;
@@ -1308,7 +1315,7 @@ emotion_object_meta_info_get(const Evas_Object *obj, Emotion_Meta_Info meta)
}
-EAPI Evas_Object *
+EMOTION_API Evas_Object *
emotion_file_meta_artwork_get(const Evas_Object *obj, const char *path, Emotion_Artwork_Info type)
{
Efl_Canvas_Video_Data *sd;
@@ -1327,7 +1334,7 @@ emotion_file_meta_artwork_get(const Evas_Object *obj, const char *path, Emotion_
return result;
}
-EAPI void
+EMOTION_API void
emotion_object_vis_set(Evas_Object *obj, Emotion_Vis visualization)
{
Efl_Canvas_Video_Data *sd;
@@ -1338,7 +1345,7 @@ emotion_object_vis_set(Evas_Object *obj, Emotion_Vis visualization)
emotion_engine_instance_vis_set(sd->engine_instance, visualization);
}
-EAPI Emotion_Vis
+EMOTION_API Emotion_Vis
emotion_object_vis_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1348,7 +1355,7 @@ emotion_object_vis_get(const Evas_Object *obj)
return emotion_engine_instance_vis_get(sd->engine_instance);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_vis_supported(const Evas_Object *obj, Emotion_Vis visualization)
{
Efl_Canvas_Video_Data *sd;
@@ -1358,7 +1365,7 @@ emotion_object_vis_supported(const Evas_Object *obj, Emotion_Vis visualization)
return emotion_engine_instance_vis_supported(sd->engine_instance, visualization);
}
-EAPI void
+EMOTION_API void
emotion_object_priority_set(Evas_Object *obj, Eina_Bool priority)
{
Efl_Canvas_Video_Data *sd;
@@ -1368,7 +1375,7 @@ emotion_object_priority_set(Evas_Object *obj, Eina_Bool priority)
emotion_engine_instance_priority_set(sd->engine_instance, priority);
}
-EAPI Eina_Bool
+EMOTION_API Eina_Bool
emotion_object_priority_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1408,7 +1415,7 @@ _eio_load_xattr_error(void *data, Eio_File *handler, int err EINA_UNUSED)
}
#endif
-EAPI void
+EMOTION_API void
emotion_object_last_position_load(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1479,7 +1486,7 @@ _eio_save_xattr_error(void *data, Eio_File *handler, int err EINA_UNUSED)
}
#endif
-EAPI void
+EMOTION_API void
emotion_object_last_position_save(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1518,7 +1525,7 @@ emotion_object_last_position_save(Evas_Object *obj)
#endif
}
-EAPI void
+EMOTION_API void
emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state)
{
Efl_Canvas_Video_Data *sd;
@@ -1540,7 +1547,7 @@ emotion_object_suspend_set(Evas_Object *obj, Emotion_Suspend state)
sd->state = state;
}
-EAPI Emotion_Suspend
+EMOTION_API Emotion_Suspend
emotion_object_suspend_get(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1553,7 +1560,7 @@ emotion_object_suspend_get(Evas_Object *obj)
/* Utility calls for modules */
/*****************************/
-EAPI void *
+EMOTION_API void *
_emotion_video_get(const Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1580,7 +1587,7 @@ _emotion_frame_anim(void *data)
return EINA_FALSE;
}
-EAPI void
+EMOTION_API void
_emotion_frame_new(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1590,7 +1597,7 @@ _emotion_frame_new(Evas_Object *obj)
sd->anim = ecore_evas_animator_add(obj, _emotion_frame_anim, obj);
}
-EAPI void
+EMOTION_API void
_emotion_video_pos_update(Evas_Object *obj, double pos, double len)
{
Efl_Canvas_Video_Data *sd;
@@ -1613,7 +1620,7 @@ _emotion_video_pos_update(Evas_Object *obj, double pos, double len)
}
}
-EAPI void
+EMOTION_API void
_emotion_frame_resize(Evas_Object *obj, int w, int h, double ratio)
{
Efl_Canvas_Video_Data *sd;
@@ -1646,7 +1653,7 @@ _emotion_frame_resize(Evas_Object *obj, int w, int h, double ratio)
}
}
-EAPI void
+EMOTION_API void
_emotion_image_reset(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1655,7 +1662,7 @@ _emotion_image_reset(Evas_Object *obj)
_emotion_image_data_zero(sd->obj);
}
-EAPI void
+EMOTION_API void
_emotion_decode_stop(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1668,7 +1675,7 @@ _emotion_decode_stop(Evas_Object *obj)
}
}
-EAPI void
+EMOTION_API void
_emotion_open_done(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1689,14 +1696,14 @@ _emotion_open_done(Evas_Object *obj)
evas_object_smart_callback_call(obj, "open_done", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_playback_started(Evas_Object *obj)
{
efl_event_callback_call(obj, EFL_CANVAS_VIDEO_EVENT_PLAYBACK_START, NULL);
evas_object_smart_callback_call(obj, "playback_started", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_playback_finished(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1706,14 +1713,14 @@ _emotion_playback_finished(Evas_Object *obj)
evas_object_smart_callback_call(obj, "playback_finished", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_audio_level_change(Evas_Object *obj)
{
efl_event_callback_call(obj, EFL_CANVAS_VIDEO_EVENT_VOLUME_CHANGE, NULL);
evas_object_smart_callback_call(obj, "audio_level_change", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_channels_change(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1723,7 +1730,7 @@ _emotion_channels_change(Evas_Object *obj)
evas_object_smart_callback_call(obj, "channels_change", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_title_set(Evas_Object *obj, char *title)
{
Efl_Canvas_Video_Data *sd;
@@ -1734,7 +1741,7 @@ _emotion_title_set(Evas_Object *obj, char *title)
evas_object_smart_callback_call(obj, "title_change", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_progress_set(Evas_Object *obj, char *info, double st)
{
Efl_Canvas_Video_Data *sd;
@@ -1746,7 +1753,7 @@ _emotion_progress_set(Evas_Object *obj, char *info, double st)
evas_object_smart_callback_call(obj, "progress_change", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_file_ref_set(Evas_Object *obj, const char *file, int num)
{
Efl_Canvas_Video_Data *sd;
@@ -1758,7 +1765,7 @@ _emotion_file_ref_set(Evas_Object *obj, const char *file, int num)
evas_object_smart_callback_call(obj, "ref_change", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_spu_button_num_set(Evas_Object *obj, int num)
{
Efl_Canvas_Video_Data *sd;
@@ -1769,7 +1776,7 @@ _emotion_spu_button_num_set(Evas_Object *obj, int num)
evas_object_smart_callback_call(obj, "button_num_change", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_spu_button_set(Evas_Object *obj, int button)
{
Efl_Canvas_Video_Data *sd;
@@ -1780,7 +1787,7 @@ _emotion_spu_button_set(Evas_Object *obj, int button)
evas_object_smart_callback_call(obj, "button_change", NULL);
}
-EAPI void
+EMOTION_API void
_emotion_seek_done(Evas_Object *obj)
{
Efl_Canvas_Video_Data *sd;
@@ -1793,7 +1800,7 @@ _emotion_seek_done(Evas_Object *obj)
}
}
-EAPI void
+EMOTION_API void
_emotion_frame_refill(Evas_Object *obj, double w, double h)
{
Efl_Canvas_Video_Data *sd;
diff --git a/src/lib/emotion/emotion_webcam.c b/src/lib/emotion/emotion_webcam.c
index d29110aa23..65a012c6f5 100644
--- a/src/lib/emotion/emotion_webcam.c
+++ b/src/lib/emotion/emotion_webcam.c
@@ -18,20 +18,18 @@
#include "emotion_private.h"
-EAPI int EMOTION_WEBCAM_UPDATE = 0;
-EAPI int EMOTION_WEBCAM_ADD = 0;
-EAPI int EMOTION_WEBCAM_DEL = 0;
+EMOTION_API int EMOTION_WEBCAM_UPDATE = 0;
+EMOTION_API int EMOTION_WEBCAM_ADD = 0;
+EMOTION_API int EMOTION_WEBCAM_DEL = 0;
typedef struct _Emotion_Webcams Emotion_Webcams;
struct _Emotion_Webcams
{
Eina_List *webcams;
-
Ecore_Idler *idler;
Eina_List *check_list;
-
- Eina_Bool init;
+ Eina_Bool init : 1;
};
struct _Emotion_Webcam
@@ -41,56 +39,18 @@ struct _Emotion_Webcam
const char *syspath;
const char *device;
const char *name;
-
- const char *custom;
-
const char *filename;
+ Eina_Bool in_list : 1;
};
-static Eet_Data_Descriptor *_webcam_edd;
-static Eet_Data_Descriptor *_webcams_edd;
-
static Emotion_Webcams *_emotion_webcams = NULL;
-static Eet_Data_Descriptor *
-_emotion_webcams_edds_new(void)
-{
- Eet_Data_Descriptor_Class eddc;
-
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Emotion_Webcam);
- _webcam_edd = eet_data_descriptor_file_new(&eddc);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_webcam_edd, Emotion_Webcam, "device", device, EET_T_STRING);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_webcam_edd, Emotion_Webcam, "name", name, EET_T_STRING);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_webcam_edd, Emotion_Webcam, "custom", custom, EET_T_STRING);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_webcam_edd, Emotion_Webcam, "filename", filename, EET_T_STRING);
-
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Emotion_Webcams);
- _webcams_edd = eet_data_descriptor_file_new(&eddc);
- EET_DATA_DESCRIPTOR_ADD_LIST(_webcams_edd, Emotion_Webcams, "webcams", webcams, _webcam_edd);
- EET_DATA_DESCRIPTOR_ADD_BASIC(_webcam_edd, Emotion_Webcams, "init", init, EET_T_CHAR);
-
- return _webcams_edd;
-}
-
-static void
-_emotion_webcams_edds_free(void)
-{
- eet_data_descriptor_free(_webcams_edd);
- _webcams_edd = NULL;
-
- eet_data_descriptor_free(_webcam_edd);
- _webcam_edd = NULL;
-}
-
static void
emotion_webcam_destroy(Emotion_Webcam *ew)
{
- if (!ew->custom)
- {
- eina_stringshare_del(ew->syspath);
- eina_stringshare_del(ew->device);
- eina_stringshare_del(ew->name);
- }
+ eina_stringshare_del(ew->syspath);
+ eina_stringshare_del(ew->device);
+ eina_stringshare_del(ew->name);
free(ew);
}
@@ -116,33 +76,25 @@ _emotion_check_device(Emotion_Webcam *ew)
if (ioctl(fd, VIDIOC_QUERYCAP, &caps) == -1) goto on_error;
- /* Likely not a webcam */
+ // Likely not a webcam
if (!(caps.capabilities & V4L2_CAP_VIDEO_CAPTURE)) goto on_error;
- if (caps.capabilities & V4L2_CAP_TUNER
- || caps.capabilities & V4L2_CAP_RADIO
- || caps.capabilities & V4L2_CAP_MODULATOR)
+ if (caps.capabilities &
+ (V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_MODULATOR))
goto on_error;
EINA_LIST_FOREACH(_emotion_webcams->webcams, l, check)
- if (check->device == ew->device)
- goto on_error;
-
+ {
+ if (check->device == ew->device) goto on_error;
+ }
_emotion_webcams->webcams = eina_list_append(_emotion_webcams->webcams, ew);
-
- EINA_REFCOUNT_INIT(ew);
-
+ ew->in_list = EINA_TRUE;
if (fd >= 0) close(fd);
-
return EINA_TRUE;
on_error:
#endif
INF("'%s' is not a webcam ['%s']", ew->name, strerror(errno));
- _emotion_webcams->webcams = eina_list_remove(_emotion_webcams->webcams, ew);
- eina_stringshare_del(ew->syspath);
- eina_stringshare_del(ew->device);
- eina_stringshare_del(ew->name);
- free(ew);
+ emotion_webcam_destroy(ew);
#ifdef HAVE_V4L2
if (fd >= 0) close(fd);
#endif
@@ -152,109 +104,113 @@ _emotion_check_device(Emotion_Webcam *ew)
static Emotion_Webcam *
_emotion_webcam_new(const char *syspath)
{
- Emotion_Webcam *test;
+ Emotion_Webcam *ew;
const char *device;
char *local;
- test = malloc(sizeof (Emotion_Webcam));
- if (!test) return NULL;
+ ew = calloc(1, sizeof(Emotion_Webcam));
+ if (!ew) return NULL;
- test->custom = NULL;
- test->syspath = eina_stringshare_ref(syspath);
- test->name = eeze_udev_syspath_get_sysattr(syspath, "name");
+ EINA_REFCOUNT_INIT(ew);
+ ew->syspath = eina_stringshare_ref(syspath);
+ ew->name = eeze_udev_syspath_get_sysattr(syspath, "name");
device = eeze_udev_syspath_get_property(syspath, "DEVNAME");
local = alloca(eina_stringshare_strlen(device) + 8);
snprintf(local, eina_stringshare_strlen(device) + 8, "v4l2://%s", device);
- test->device = eina_stringshare_add(local);
+ ew->device = eina_stringshare_add(local);
eina_stringshare_del(device);
- test->filename = test->device + 7;
+ ew->filename = ew->device + 7;
- return test;
+ return ew;
}
static void
-_emotion_webcam_remove_cb(void *user_data, void *func_data EINA_UNUSED)
+_emotion_webcam_unref(Emotion_Webcam *ew)
{
- Emotion_Webcam *webcam;
-
- /* called at the end of EMOTION_WEBCAM_ADD event, to prevent the free */
- if (!user_data)
- return;
-
- webcam = user_data;
-
- EINA_REFCOUNT_UNREF(webcam)
+ EINA_REFCOUNT_UNREF(ew)
{
- if (_emotion_webcams)
- _emotion_webcams->webcams =
- eina_list_remove(_emotion_webcams->webcams, webcam);
- emotion_webcam_destroy(webcam);
+ if ((ew->in_list) && (_emotion_webcams))
+ {
+ _emotion_webcams->webcams =
+ eina_list_remove(_emotion_webcams->webcams, ew);
+ ew->in_list = EINA_FALSE;
+ }
+ emotion_webcam_destroy(ew);
}
}
+static void
+_emotion_eeze_event_free(void *data EINA_UNUSED, void *ev)
+{
+ _emotion_webcam_unref(ev);
+}
+
+static void
+_emotion_webcam_ev_add(const char *syspath)
+{
+ Emotion_Webcam *ew = _emotion_webcam_new(syspath);
+ if (!ew) return;
+ if (!_emotion_check_device(ew)) return;
+ EINA_REFCOUNT_REF(ew);
+ ecore_event_add(EMOTION_WEBCAM_ADD, ew, _emotion_eeze_event_free, NULL);
+}
+
static Eina_Bool
_emotion_process_webcam(void *data)
{
- Emotion_Webcams *webcams;
- Emotion_Webcam *test;
+ Emotion_Webcams *webcams = data;
const char *syspath;
- webcams = data;
syspath = eina_list_data_get(webcams->check_list);
if (!syspath)
{
- webcams->idler = NULL;
- webcams->init = EINA_TRUE;
- return EINA_FALSE;
+ webcams->idler = NULL;
+ webcams->init = EINA_TRUE;
+ return EINA_FALSE;
}
-
webcams->check_list = eina_list_remove_list(webcams->check_list,
- webcams->check_list);
-
- test = _emotion_webcam_new(syspath);
- if (test)
- {
- if (_emotion_check_device(test))
- ecore_event_add(EMOTION_WEBCAM_ADD, test, NULL, NULL);
- }
-
+ webcams->check_list);
+ _emotion_webcam_ev_add(syspath);
eina_stringshare_del(syspath);
-
return EINA_TRUE;
}
static void
-_emotion_eeze_events(const char *syspath,
- Eeze_Udev_Event ev,
+_emotion_webcam_remove_cb(void *data EINA_UNUSED, void *ev)
+{
+ _emotion_webcam_unref(ev);
+}
+
+static void
+_emotion_eeze_events(const char *syspath, Eeze_Udev_Event ev,
void *data EINA_UNUSED,
Eeze_Udev_Watch *watcher EINA_UNUSED)
{
if (ev == EEZE_UDEV_EVENT_REMOVE)
{
- Emotion_Webcam *check;
- Eina_List *l;
-
- EINA_LIST_FOREACH(_emotion_webcams->webcams, l, check)
- if (check->syspath == syspath)
- {
- _emotion_webcams->webcams =
- eina_list_remove_list(_emotion_webcams->webcams, l);
- ecore_event_add(EMOTION_WEBCAM_DEL, check,
- _emotion_webcam_remove_cb, check);
- break ;
- }
+ Emotion_Webcam *ew;
+ Eina_List *l;
+
+ EINA_LIST_FOREACH(_emotion_webcams->webcams, l, ew)
+ {
+ if (ew->syspath == syspath)
+ {
+ if (ew->in_list)
+ {
+ _emotion_webcams->webcams =
+ eina_list_remove_list(_emotion_webcams->webcams, l);
+ ew->in_list = EINA_FALSE;
+ }
+ ecore_event_add(EMOTION_WEBCAM_DEL, ew,
+ _emotion_webcam_remove_cb, NULL);
+ break;
+ }
+ }
}
else if (ev == EEZE_UDEV_EVENT_ADD)
{
- Emotion_Webcam *test;
-
- test = _emotion_webcam_new(syspath);
- if (test)
- {
- if (_emotion_check_device(test))
- ecore_event_add(EMOTION_WEBCAM_ADD, test, NULL, NULL);
- }
+ _emotion_webcam_ev_add(syspath);
}
ecore_event_add(EMOTION_WEBCAM_UPDATE, NULL, NULL, NULL);
}
@@ -266,12 +222,11 @@ _emotion_enumerate_all_webcams(void)
{
#ifdef HAVE_EEZE
Eina_List *devices;
- if (_emotion_webcams->init) return ;
+ if (_emotion_webcams->init) return;
devices = eeze_udev_find_by_type(EEZE_UDEV_TYPE_V4L, NULL);
-
_emotion_webcams->check_list = devices;
_emotion_webcams->idler = ecore_idler_add(_emotion_process_webcam,
- _emotion_webcams);
+ _emotion_webcams);
#endif
}
@@ -282,9 +237,6 @@ Eina_Bool emotion_webcam_init(void)
EMOTION_WEBCAM_ADD = ecore_event_type_new();
EMOTION_WEBCAM_DEL = ecore_event_type_new();
- eet_init();
- _emotion_webcams_edds_new();
-
if (!_emotion_webcams)
{
_emotion_webcams = calloc(1, sizeof (Emotion_Webcams));
@@ -293,10 +245,9 @@ Eina_Bool emotion_webcam_init(void)
#ifdef HAVE_EEZE
eeze_init();
-
- eeze_watcher = eeze_udev_watch_add(EEZE_UDEV_TYPE_V4L,
- (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE),
- _emotion_eeze_events, NULL);
+ eeze_watcher = eeze_udev_watch_add
+ (EEZE_UDEV_TYPE_V4L, (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE),
+ _emotion_eeze_events, NULL);
#endif
return EINA_TRUE;
@@ -308,8 +259,7 @@ emotion_webcam_shutdown(void)
Emotion_Webcam *ew;
const char *syspath;
- ecore_event_type_flush(EMOTION_WEBCAM_UPDATE,
- EMOTION_WEBCAM_ADD,
+ ecore_event_type_flush(EMOTION_WEBCAM_UPDATE, EMOTION_WEBCAM_ADD,
EMOTION_WEBCAM_DEL);
if (_emotion_webcams->idler)
@@ -319,15 +269,21 @@ emotion_webcam_shutdown(void)
}
EINA_LIST_FREE(_emotion_webcams->check_list, syspath)
- eina_stringshare_del(syspath);
+ {
+ eina_stringshare_del(syspath);
+ }
_emotion_webcams->init = EINA_FALSE;
EINA_LIST_FREE(_emotion_webcams->webcams, ew)
{
- /* There is currently no way to refcount from the outside, this help, but could lead to some issue */
+ ew->in_list = EINA_FALSE;
+ // There is currently no way to refcount from the outside, this helps
+ // but could lead to some issues
EINA_REFCOUNT_UNREF(ew)
- emotion_webcam_destroy(ew);
+ {
+ emotion_webcam_destroy(ew);
+ }
}
free(_emotion_webcams);
_emotion_webcams = NULL;
@@ -335,84 +291,34 @@ emotion_webcam_shutdown(void)
#ifdef HAVE_EEZE
eeze_udev_watch_del(eeze_watcher);
eeze_watcher = NULL;
-
eeze_shutdown();
#endif
-
- _emotion_webcams_edds_free();
- eet_shutdown();
-}
-
-Eina_Bool
-emotion_webcam_config_load(Eet_File *ef)
-{
- Emotion_Webcams *emotion_webcams = NULL;
-
- if (ef)
- {
- emotion_webcams = eet_data_read(ef, _webcams_edd, "config");
- INF("Loaded config %p from eet %s", _emotion_webcams, eet_file_get(ef));
- }
-
- if (emotion_webcams)
- {
- if (_emotion_webcams)
- {
- emotion_webcam_shutdown();
- _emotion_webcams = emotion_webcams;
- emotion_webcam_init();
- }
- else
- _emotion_webcams = emotion_webcams;
- }
-
- if (!_emotion_webcams)
- {
- DBG("No config, create empty");
- _emotion_webcams = calloc(1, sizeof (Emotion_Webcams));
- EINA_SAFETY_ON_NULL_RETURN_VAL(_emotion_webcams, EINA_FALSE);
- }
-
- return EINA_TRUE;
}
-EAPI const Eina_List *
+EMOTION_API const Eina_List *
emotion_webcams_get(void)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(_emotion_webcams, NULL);
-
_emotion_enumerate_all_webcams();
-
return _emotion_webcams->webcams;
}
-EAPI const char *
+EMOTION_API const char *
emotion_webcam_name_get(const Emotion_Webcam *ew)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ew, NULL);
return ew->name;
}
-EAPI const char *
+EMOTION_API const char *
emotion_webcam_device_get(const Emotion_Webcam *ew)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ew, NULL);
return ew->device;
}
-EAPI const char *
-emotion_webcam_custom_get(const char *device)
+EMOTION_API const char *
+emotion_webcam_custom_get(const char *device EINA_UNUSED)
{
- const Emotion_Webcam *ew;
- const Eina_List *l;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(_emotion_webcams, NULL);
-
- _emotion_enumerate_all_webcams();
-
- EINA_LIST_FOREACH(_emotion_webcams->webcams, l, ew)
- if (ew->device && strcmp(device, ew->device) == 0)
- return ew->custom;
-
return NULL;
}
diff --git a/src/lib/emotion/meson.build b/src/lib/emotion/meson.build
index 6f2717dfa6..21e50df4bc 100644
--- a/src/lib/emotion/meson.build
+++ b/src/lib/emotion/meson.build
@@ -16,6 +16,7 @@ foreach eo_file : pub_eo_file
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EMOTION_API',
'-gchd', '@INPUT@'])
endforeach
@@ -26,35 +27,38 @@ emotion_header_src = [
'Emotion_Legacy.h',
'Emotion_Eo.h',
'efl_canvas_video_eo.legacy.h',
+ 'emotion_api.h',
]
-emotion_src = [
+emotion_src = files([
'emotion_modules.h',
'emotion_private.h',
'emotion_smart.c',
'emotion_webcam.c',
'emotion_modules.c',
'emotion_main.c'
-]
+])
-emotion_deps = [ecore, eet, evas, eio, emile]
+emotion_deps = [ecore, eet, evas, eio, emile, buildsystem]
emotion_pub_deps = [eina, eo, efl]
+emotion_ext_deps = [buildsystem_simple]
if get_option('eeze') == true
emotion_deps += [eeze]
endif
+# Save in extra variable here to pass to edje_externa
+emotion_package_c_args = package_c_args
+
emotion_lib = library('emotion',
emotion_src, pub_eo_file_target, priv_eo_file_target,
- dependencies: emotion_deps + emotion_pub_deps,
+ dependencies: emotion_deps + emotion_pub_deps + emotion_ext_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
- c_args : package_c_args,
+ c_args : [emotion_package_c_args, '-DEMOTION_BUILD'],
version : meson.project_version()
)
-emotion_package_c_args = package_c_args
-
emotion = declare_dependency(
include_directories: [include_directories('.')],
link_with: emotion_lib,
diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h
index 178372efed..968ffae303 100644
--- a/src/lib/eo/Eo.h
+++ b/src/lib/eo/Eo.h
@@ -4,41 +4,38 @@
#include <stdarg.h>
#include <Eina.h>
-#ifdef EAPI
-# undef EAPI
+#ifdef EO_API
+#error EO_API should not be already defined
#endif
#define EOLIAN
#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
+# ifndef EO_STATIC
+# ifdef EO_BUILD
+# define EO_API __declspec(dllexport)
# else
-# define EAPI
+# define EO_API __declspec(dllimport)
# endif
# else
-# define EAPI __declspec(dllimport)
+# define EO_API
# endif
-# define EAPI_WEAK
+# define EO_API_WEAK
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# define EAPI_WEAK __attribute__ ((weak))
+# define EO_API __attribute__ ((visibility("default")))
+# define EO_API_WEAK __attribute__ ((weak))
# else
-# define EAPI
-# define EAPI_WEAK
+# define EO_API
+# define EO_API_WEAK
# endif
# else
-# define EAPI
-# define EAPI_WEAK
+# define EO_API
+# define EO_API_WEAK
# endif
#endif
-/* When used, this indicates that the function is an Eo API. */
-#define EOAPI EAPI EAPI_WEAK
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -48,7 +45,7 @@ extern "C" {
*
* @date 2012 (created)
*
- * @section toc Table of Contents
+ * @section eo_toc Table of Contents
*
* @li @ref eo_main_intro
* @li @ref eo_main_compiling
@@ -191,7 +188,7 @@ typedef Eo Efl_Object;
* Don't touch it if you don't know what you are doing.
* @internal
*/
-EAPI extern Eina_Lock _efl_class_creation_lock;
+EO_API extern Eina_Lock _efl_class_creation_lock;
/**
* @var _efl_object_init_generation
@@ -200,7 +197,7 @@ EAPI extern Eina_Lock _efl_class_creation_lock;
* every call to shutdown that actually shuts down eo.
* @internal
*/
-EAPI extern unsigned int _efl_object_init_generation;
+EO_API extern unsigned int _efl_object_init_generation;
/**
* @typedef Efl_Del_Intercept
@@ -301,7 +298,7 @@ typedef struct _Efl_Callback_Array_Item_Full
*
* @return Return @c true when the callback has been successfully added.
*/
-EOAPI Eina_Bool efl_event_callback_priority_add(Eo *obj, const Efl_Event_Description *desc, Efl_Callback_Priority priority, Efl_Event_Cb cb, const void *data);
+EO_API Eina_Bool efl_event_callback_priority_add(Eo *obj, const Efl_Event_Description *desc, Efl_Callback_Priority priority, Efl_Event_Cb cb, const void *data);
/**
* @brief Delete a callback with a specific data associated with it for an event.
@@ -315,7 +312,7 @@ EOAPI Eina_Bool efl_event_callback_priority_add(Eo *obj, const Efl_Event_Descrip
*
* @return Return @c true when the callback has been successfully removed.
*/
-EOAPI Eina_Bool efl_event_callback_del(Eo *obj, const Efl_Event_Description *desc, Efl_Event_Cb func, const void *user_data);
+EO_API Eina_Bool efl_event_callback_del(Eo *obj, const Efl_Event_Description *desc, Efl_Event_Cb func, const void *user_data);
/**
* @brief Get the Eina_Future scheduler that trigger them on a specific set of events on an object.
@@ -327,7 +324,7 @@ EOAPI Eina_Bool efl_event_callback_del(Eo *obj, const Efl_Event_Description *des
*
* @note You must use EFL_SCHEDULER_ARRAY_DEFINE() to create the @p array.
*/
-EOAPI Eina_Future_Scheduler *efl_event_future_scheduler_get(const Eo *obj, Efl_Callback_Array_Item *array);
+EO_API Eina_Future_Scheduler *efl_event_future_scheduler_get(const Eo *obj, Efl_Callback_Array_Item *array);
/**
* @brief Add an array of callbacks created by @ref EFL_CALLBACKS_ARRAY_DEFINE
@@ -346,7 +343,7 @@ EOAPI Eina_Future_Scheduler *efl_event_future_scheduler_get(const Eo *obj, Efl_C
*
* @return Return @c true when the callback has been successfully added.
*/
-EOAPI Eina_Bool efl_event_callback_array_priority_add(Eo *obj, const Efl_Callback_Array_Item *array, Efl_Callback_Priority priority, const void *data);
+EO_API Eina_Bool efl_event_callback_array_priority_add(Eo *obj, const Efl_Callback_Array_Item *array, Efl_Callback_Priority priority, const void *data);
/**
* @brief Del a callback array with a specific data associated to it for an
@@ -358,7 +355,7 @@ EOAPI Eina_Bool efl_event_callback_array_priority_add(Eo *obj, const Efl_Callbac
*
* @return Return @c true when the callback has been successfully removed.
*/
-EOAPI Eina_Bool efl_event_callback_array_del(Eo *obj, const Efl_Callback_Array_Item *array, const void *user_data);
+EO_API Eina_Bool efl_event_callback_array_del(Eo *obj, const Efl_Callback_Array_Item *array, const void *user_data);
/**
* @brief Call the callbacks for an event of an object.
@@ -371,7 +368,7 @@ EOAPI Eina_Bool efl_event_callback_array_del(Eo *obj, const Efl_Callback_Array_I
*
* @return @c false If one of the callbacks aborted the call, @c true otherwise
*/
-EOAPI Eina_Bool efl_event_callback_call(Eo *obj, const Efl_Event_Description *desc, void *event_info);
+EO_API Eina_Bool efl_event_callback_call(Eo *obj, const Efl_Event_Description *desc, void *event_info);
/**
* @brief Call the callbacks for an event of an object.
@@ -386,7 +383,7 @@ EOAPI Eina_Bool efl_event_callback_call(Eo *obj, const Efl_Event_Description *de
*
* @since 1.19
*/
-EOAPI Eina_Bool efl_event_callback_legacy_call(Eo *obj, const Efl_Event_Description *desc, void *event_info);
+EO_API Eina_Bool efl_event_callback_legacy_call(Eo *obj, const Efl_Event_Description *desc, void *event_info);
/**
@@ -578,7 +575,7 @@ typedef struct _Efl_Future_Cb_Desc {
* @see #Efl_Future_Cb_Desc
* @see efl_key_data_set()
*/
-EOAPI Eina_Future_Desc efl_future_cb_from_desc(const Eo *obj, const Efl_Future_Cb_Desc desc) EINA_ARG_NONNULL(1);
+EO_API Eina_Future_Desc efl_future_cb_from_desc(const Eo *obj, const Efl_Future_Cb_Desc desc) EINA_ARG_NONNULL(1);
/**
* Syntax suger over efl_future_cb_from_desc()
@@ -625,7 +622,7 @@ EOAPI Eina_Future_Desc efl_future_cb_from_desc(const Eo *obj, const Efl_Future_C
* @see eina_future_then_from_desc()
* @see #Efl_Future_Cb_Desc
*/
-EOAPI Eina_Future *efl_future_chain_array(Eo *obj, Eina_Future *prev, const Efl_Future_Cb_Desc descs[]) EINA_ARG_NONNULL(1, 2);
+EO_API Eina_Future *efl_future_chain_array(Eo *obj, Eina_Future *prev, const Efl_Future_Cb_Desc descs[]) EINA_ARG_NONNULL(1, 2);
/**
* Syntax suger over efl_future_chain_array()
@@ -659,13 +656,13 @@ typedef struct _Efl_Dbg_Info
*
* @param[in] root_node the tree Node
*/
-EOAPI void efl_dbg_info_get(Eo *obj, Efl_Dbg_Info *root_node);
+EO_API void efl_dbg_info_get(Eo *obj, Efl_Dbg_Info *root_node);
/**
* @var EFL_DBG_INFO_TYPE
* The Eina_Value_Type for the debug info.
*/
-EAPI extern const Eina_Value_Type *EFL_DBG_INFO_TYPE;
+EO_API extern const Eina_Value_Type *EFL_DBG_INFO_TYPE;
/**
* Creates a list inside debug info list.
@@ -715,7 +712,7 @@ do { \
* Frees the Efl_Dbg_Info tree. (The whole tree recursively).
* @param[in] info The tree to delete.
*/
-EAPI void efl_dbg_info_free(Efl_Dbg_Info *info);
+EO_API void efl_dbg_info_free(Efl_Dbg_Info *info);
/**
* @}
@@ -850,7 +847,7 @@ typedef enum _Efl_Class_Type Efl_Class_Type;
typedef struct _Efl_Op_Description
{
- void *api_func; /**< The EAPI function offering this op. (The name of the func on windows) */
+ void *api_func; /**< The EO_API function offering this op. (The name of the func on windows) */
void *func; /**< The static function to call for the op. */
} Efl_Op_Description;
@@ -937,7 +934,7 @@ typedef struct _Efl_Class_Description Efl_Class_Description;
*
* @see #EFL_DEFINE_CLASS
*/
-EAPI const Efl_Class *efl_class_new(const Efl_Class_Description *desc, const Efl_Class *parent, ...);
+EO_API const Efl_Class *efl_class_new(const Efl_Class_Description *desc, const Efl_Class *parent, ...);
/**
* @brief Set the functions of a class
@@ -952,7 +949,7 @@ EAPI const Efl_Class *efl_class_new(const Efl_Class_Description *desc, const Efl
* efl_property_reflection_set() or efl_property_reflection_get() is called.
* @see #EFL_DEFINE_CLASS
*/
-EAPI Eina_Bool efl_class_functions_set(const Efl_Class *klass_id, const Efl_Object_Ops *object_ops, const Efl_Object_Property_Reflection_Ops *reflection_table);
+EO_API Eina_Bool efl_class_functions_set(const Efl_Class *klass_id, const Efl_Object_Ops *object_ops, const Efl_Object_Property_Reflection_Ops *reflection_table);
/**
* @brief Override Eo functions of this object.
@@ -976,7 +973,7 @@ EAPI Eina_Bool efl_class_functions_set(const Efl_Class *klass_id, const Efl_Obje
*
* @see EFL_OPS_DEFINE
*/
-EAPI Eina_Bool efl_object_override(Eo *obj, const Efl_Object_Ops *ops);
+EO_API Eina_Bool efl_object_override(Eo *obj, const Efl_Object_Ops *ops);
/**
* @brief Define an array of override functions for @ref efl_object_override
@@ -1007,7 +1004,7 @@ EAPI Eina_Bool efl_object_override(Eo *obj, const Efl_Object_Ops *ops);
* Note: that an Efl_Class is also an Efl_Object, so if you pass an Efl_Class
* as obj, it will check if that class contain klass.
*/
-EAPI Eina_Bool efl_isa(const Eo *obj, const Efl_Class *klass);
+EO_API Eina_Bool efl_isa(const Eo *obj, const Efl_Class *klass);
/**
* @brief Gets the name of the passed class.
@@ -1016,7 +1013,7 @@ EAPI Eina_Bool efl_isa(const Eo *obj, const Efl_Class *klass);
*
* @see efl_class_get()
*/
-EAPI const char *efl_class_name_get(const Efl_Class *klass);
+EO_API const char *efl_class_name_get(const Efl_Class *klass);
/**
* @brief Gets the amount of memory this class object would use.
@@ -1025,7 +1022,7 @@ EAPI const char *efl_class_name_get(const Efl_Class *klass);
*
* @see efl_class_get()
*/
-EAPI size_t efl_class_memory_size_get(const Efl_Class *klass);
+EO_API size_t efl_class_memory_size_get(const Efl_Class *klass);
/**
* @brief Gets a debug name for this object
@@ -1042,7 +1039,7 @@ EAPI size_t efl_class_memory_size_get(const Efl_Class *klass);
*
* @since 1.21
*/
-EAPI const char *efl_debug_name_get(const Eo *obj_id);
+EO_API const char *efl_debug_name_get(const Eo *obj_id);
/**
* @}
@@ -1054,7 +1051,7 @@ EAPI const char *efl_debug_name_get(const Eo *obj_id);
*
* @see eo_shutdown()
*/
-EAPI Eina_Bool efl_object_init(void);
+EO_API Eina_Bool efl_object_init(void);
/**
* @brief Shutdown the eo subsystem
@@ -1062,7 +1059,7 @@ EAPI Eina_Bool efl_object_init(void);
*
* @see efl_object_init()
*/
-EAPI Eina_Bool efl_object_shutdown(void);
+EO_API Eina_Bool efl_object_shutdown(void);
#ifdef EFL_BETA_API_SUPPORT
@@ -1110,7 +1107,7 @@ typedef struct _Efl_Domain_Data Efl_Domain_Data;
* @see efl_domain_data_return()
* @see efl_compatible()
*/
-EAPI Efl_Id_Domain efl_domain_get(void);
+EO_API Efl_Id_Domain efl_domain_get(void);
/**
* @brief Switch the native domain for the current thread.
@@ -1125,7 +1122,7 @@ EAPI Efl_Id_Domain efl_domain_get(void);
*
* @see efl_domain_get()
*/
-EAPI Eina_Bool efl_domain_switch(Efl_Id_Domain domain);
+EO_API Eina_Bool efl_domain_switch(Efl_Id_Domain domain);
/**
* @brief Get the current domain used for allocating new objects
@@ -1138,7 +1135,7 @@ EAPI Eina_Bool efl_domain_switch(Efl_Id_Domain domain);
*
* @see efl_domain_get()
*/
-EAPI Efl_Id_Domain efl_domain_current_get(void);
+EO_API Efl_Id_Domain efl_domain_current_get(void);
/**
* @brief Set the current domain used for allocating new objects.
@@ -1152,7 +1149,7 @@ EAPI Efl_Id_Domain efl_domain_current_get(void);
*
* @see efl_domain_get()
*/
-EAPI Eina_Bool efl_domain_current_set(Efl_Id_Domain domain);
+EO_API Eina_Bool efl_domain_current_set(Efl_Id_Domain domain);
/**
* @brief Push a new domain onto the domain stack.
@@ -1165,7 +1162,7 @@ EAPI Eina_Bool efl_domain_current_set(Efl_Id_Domain domain);
*
* @see efl_domain_get()
*/
-EAPI Eina_Bool efl_domain_current_push(Efl_Id_Domain domain);
+EO_API Eina_Bool efl_domain_current_push(Efl_Id_Domain domain);
/**
* @brief Pop a previously pushed domain from the domain stack
@@ -1175,7 +1172,7 @@ EAPI Eina_Bool efl_domain_current_push(Efl_Id_Domain domain);
*
* @see efl_domain_get()
*/
-EAPI void efl_domain_current_pop(void);
+EO_API void efl_domain_current_pop(void);
/**
* @brief Get an opaque handle to the local native domain eoid data
@@ -1191,7 +1188,7 @@ EAPI void efl_domain_current_pop(void);
*
* @see efl_domain_get()
*/
-EAPI Efl_Domain_Data *efl_domain_data_get(void);
+EO_API Efl_Domain_Data *efl_domain_data_get(void);
/**
* @brief Adopt a single extra domain to be the current domain
@@ -1214,7 +1211,7 @@ EAPI Efl_Domain_Data *efl_domain_data_get(void);
*
* @see efl_domain_get()
*/
-EAPI Efl_Id_Domain efl_domain_data_adopt(Efl_Domain_Data *data_in);
+EO_API Efl_Id_Domain efl_domain_data_adopt(Efl_Domain_Data *data_in);
/**
* @brief Return a domain to its original owning thread
@@ -1230,10 +1227,10 @@ EAPI Efl_Id_Domain efl_domain_data_adopt(Efl_Domain_Data *data_in);
*
* @see efl_domain_get()
*/
-EAPI Eina_Bool efl_domain_data_return(Efl_Id_Domain domain);
+EO_API Eina_Bool efl_domain_data_return(Efl_Id_Domain domain);
/**
- * @prief Check if 2 objects are compatible
+ * @brief Check if 2 objects are compatible
* @param obj The basic object
* @param obj_target The alternate object that may be referenced by @p obj
* @return EINA_TRUE if compatible, EINA_FALSE if not
@@ -1246,7 +1243,7 @@ EAPI Eina_Bool efl_domain_data_return(Efl_Id_Domain domain);
*
* @see efl_domain_get()
*/
-EAPI Eina_Bool efl_compatible(const Eo *obj, const Eo *obj_target);
+EO_API Eina_Bool efl_compatible(const Eo *obj, const Eo *obj_target);
#endif
@@ -1315,7 +1312,7 @@ __##Name##_failed: EINA_COLD; \
#define _EFL_OBJECT_API_AFTER_HOOK
#define _EFL_OBJECT_API_CALL_HOOK(x) x
-// to define an EAPI function
+// to define an EO_API function
#define _EFL_OBJECT_FUNC_BODY(Name, ObjType, Ret, DefRet, ErrorCase) \
Ret \
Name(ObjType obj) \
@@ -1406,17 +1403,17 @@ __##Name##_failed: EINA_COLD; \
#define EFL_OBJECT_OP_FUNC(_api, _private) { _EFL_OBJECT_OP_API_ENTRY(_api), (void*)_private }
// returns the OP id corresponding to the given api_func
-EAPI Efl_Object_Op _efl_object_api_op_id_get(const void *api_func) EINA_DEPRECATED;
-EAPI Efl_Object_Op _efl_object_op_api_id_get(const void *api_func, const Eo *obj, const char *api_func_name, const char *file, int line) EINA_ARG_NONNULL(1, 2, 3, 4) EINA_WARN_UNUSED_RESULT;
+EO_API Efl_Object_Op _efl_object_api_op_id_get(const void *api_func) EINA_DEPRECATED;
+EO_API Efl_Object_Op _efl_object_op_api_id_get(const void *api_func, const Eo *obj, const char *api_func_name, const char *file, int line) EINA_ARG_NONNULL(1, 2, 3, 4) EINA_WARN_UNUSED_RESULT;
// gets the real function pointer and the object data
-EAPI Eina_Bool _efl_object_call_resolve(Eo *obj, const char *func_name, Efl_Object_Op_Call_Data *call, Efl_Object_Op op, const char *file, int line);
+EO_API Eina_Bool _efl_object_call_resolve(Eo *obj, const char *func_name, Efl_Object_Op_Call_Data *call, Efl_Object_Op op, const char *file, int line);
// end of the eo call barrier, unref the obj
-EAPI void _efl_object_call_end(Efl_Object_Op_Call_Data *call);
+EO_API void _efl_object_call_end(Efl_Object_Op_Call_Data *call);
// end of the efl_add. Calls finalize among others
-EAPI Eo * _efl_add_end(Eo *obj, Eina_Bool is_ref, Eina_Bool is_fallback);
+EO_API Eo * _efl_add_end(Eo *obj, Eina_Bool is_ref, Eina_Bool is_fallback);
/*****************************************************************************/
@@ -1457,7 +1454,7 @@ EAPI Eo * _efl_add_end(Eo *obj, Eina_Bool is_ref, Eina_Bool is_fallback);
*
* @see efl_cast
*/
-EAPI Eo *efl_super(const Eo *obj, const Efl_Class *cur_klass);
+EO_API Eo *efl_super(const Eo *obj, const Efl_Class *cur_klass);
/**
* @brief Prepare a call to cast to a parent class implementation of a function.
@@ -1489,7 +1486,7 @@ EAPI Eo *efl_super(const Eo *obj, const Efl_Class *cur_klass);
*
* @since 1.20
*/
-EAPI Eo *efl_cast(const Eo *obj, const Efl_Class *cur_klass);
+EO_API Eo *efl_cast(const Eo *obj, const Efl_Class *cur_klass);
/*****************************************************************************/
@@ -1500,9 +1497,9 @@ EAPI Eo *efl_cast(const Eo *obj, const Efl_Class *cur_klass);
*
* @see efl_class_name_get()
*/
-EAPI const Efl_Class *efl_class_get(const Eo *obj);
+EO_API const Efl_Class *efl_class_get(const Eo *obj);
-EAPI Eo *_efl_added_get(void);
+EO_API Eo *_efl_added_get(void);
/* Check if GCC compatible (both GCC and clang define this) */
#if defined(__GNUC__) && !defined(_EO_ADD_FALLBACK_FORCE)
@@ -1590,7 +1587,7 @@ EAPI Eo *_efl_added_get(void);
*/
#define efl_new(klass, ...) efl_add_ref(klass, NULL, ##__VA_ARGS__)
-EAPI Eo * _efl_add_internal_start(const char *file, int line, const Efl_Class *klass_id, Eo *parent, Eina_Bool ref, Eina_Bool is_fallback);
+EO_API Eo * _efl_add_internal_start(const char *file, int line, const Efl_Class *klass_id, Eo *parent, Eina_Bool ref, Eina_Bool is_fallback);
/**
* @typedef Efl_Substitute_Ctor_Cb
@@ -1619,7 +1616,7 @@ typedef Eo *(*Efl_Substitute_Ctor_Cb)(void *data, Eo *obj_id);
* @param sub_ctor_data Additional data to be passed to the @p substitute_ctor callback.
* @return An handle to the new object on success, NULL otherwise.
*/
-EAPI Eo * _efl_add_internal_start_bindings(const char *file, int line, const Efl_Class *klass_id, Eo *parent, Eina_Bool ref, Eina_Bool is_fallback, Efl_Substitute_Ctor_Cb substitute_ctor, void *sub_ctor_data);
+EO_API Eo * _efl_add_internal_start_bindings(const char *file, int line, const Efl_Class *klass_id, Eo *parent, Eina_Bool ref, Eina_Bool is_fallback, Efl_Substitute_Ctor_Cb substitute_ctor, void *sub_ctor_data);
/**
* @brief Unrefs the object and reparents it to NULL.
@@ -1633,7 +1630,7 @@ EAPI Eo * _efl_add_internal_start_bindings(const char *file, int line, const Efl
*
* @ingroup Efl_Object
*/
-EAPI void efl_del(const Eo *obj);
+EO_API void efl_del(const Eo *obj);
/**
* @brief Set an override for a class
@@ -1647,7 +1644,7 @@ EAPI void efl_del(const Eo *obj);
*
* @ingroup Efl_Object
*/
-EAPI Eina_Bool efl_class_override_register(const Efl_Class *klass, const Efl_Class *override);
+EO_API Eina_Bool efl_class_override_register(const Efl_Class *klass, const Efl_Class *override);
/**
* @brief Unset an override for a class
@@ -1661,7 +1658,7 @@ EAPI Eina_Bool efl_class_override_register(const Efl_Class *klass, const Efl_Cla
*
* @ingroup Efl_Object
*/
-EAPI Eina_Bool efl_class_override_unregister(const Efl_Class *klass, const Efl_Class *override);
+EO_API Eina_Bool efl_class_override_unregister(const Efl_Class *klass, const Efl_Class *override);
/**
* @brief Get a pointer to the data of an object for a specific class.
*
@@ -1676,7 +1673,7 @@ EAPI Eina_Bool efl_class_override_unregister(const Efl_Class *klass, const Efl_C
* @see efl_data_unref()
* @see efl_data_scope_safe_get()
*/
-EAPI void *efl_data_scope_get(const Eo *obj, const Efl_Class *klass);
+EO_API void *efl_data_scope_get(const Eo *obj, const Efl_Class *klass);
/**
* @brief Safely get a pointer to the data of an object for a specific class.
@@ -1702,7 +1699,7 @@ EAPI void *efl_data_scope_get(const Eo *obj, const Efl_Class *klass);
*
* @since 1.20
*/
-EAPI void *efl_data_scope_safe_get(const Eo *obj, const Efl_Class *klass);
+EO_API void *efl_data_scope_safe_get(const Eo *obj, const Efl_Class *klass);
/**
* @def efl_data_xref(obj, klass, ref_obj)
@@ -1730,7 +1727,7 @@ EAPI void *efl_data_scope_safe_get(const Eo *obj, const Efl_Class *klass);
*
* @see efl_data_xunref_internal()
*/
-EAPI void *efl_data_xref_internal(const char *file, int line, const Eo *obj, const Efl_Class *klass, const Eo *ref_obj);
+EO_API void *efl_data_xref_internal(const char *file, int line, const Eo *obj, const Efl_Class *klass, const Eo *ref_obj);
/**
* @def efl_data_xunref(obj, data, ref_obj)
@@ -1757,7 +1754,7 @@ EAPI void *efl_data_xref_internal(const char *file, int line, const Eo *obj, con
*
* @see efl_data_xref_internal()
*/
-EAPI void efl_data_xunref_internal(const Eo *obj, void *data, const Eo *ref_obj);
+EO_API void efl_data_xunref_internal(const Eo *obj, void *data, const Eo *ref_obj);
/**
* @brief Increment the object's reference count by 1.
@@ -1774,7 +1771,7 @@ EAPI void efl_data_xunref_internal(const Eo *obj, void *data, const Eo *ref_obj)
* @see efl_unref()
* @see efl_ref_count()
*/
-EAPI Eo *efl_ref(const Eo *obj);
+EO_API Eo *efl_ref(const Eo *obj);
/**
* @brief Decrement the object's reference count by 1 and free it if needed.
@@ -1783,7 +1780,7 @@ EAPI Eo *efl_ref(const Eo *obj);
* @see efl_ref()
* @see efl_ref_count()
*/
-EAPI void efl_unref(const Eo *obj);
+EO_API void efl_unref(const Eo *obj);
/**
* @brief Return the ref count of the object passed.
@@ -1793,7 +1790,7 @@ EAPI void efl_unref(const Eo *obj);
* @see efl_ref()
* @see efl_unref()
*/
-EAPI int efl_ref_count(const Eo *obj);
+EO_API int efl_ref_count(const Eo *obj);
/**
* @brief Set a deletion interceptor function.
@@ -1824,7 +1821,7 @@ EAPI int efl_ref_count(const Eo *obj);
* @see efl_unref()
* @see efl_del()
*/
-EAPI void efl_del_intercept_set(Eo *obj, Efl_Del_Intercept del_intercept_func);
+EO_API void efl_del_intercept_set(Eo *obj, Efl_Del_Intercept del_intercept_func);
/**
* @brief Get the deletion interceptor function
@@ -1841,7 +1838,7 @@ EAPI void efl_del_intercept_set(Eo *obj, Efl_Del_Intercept del_intercept_func);
*
* @see efl_del_intercept_set()
*/
-EAPI Efl_Del_Intercept efl_del_intercept_get(const Eo *obj);
+EO_API Efl_Del_Intercept efl_del_intercept_get(const Eo *obj);
/**
* @brief Clears the object so it can be reused (for example in a cache).
@@ -1852,7 +1849,7 @@ EAPI Efl_Del_Intercept efl_del_intercept_get(const Eo *obj);
*
* @see efl_del_intercept_set()
*/
-EAPI void efl_reuse(const Eo *obj);
+EO_API void efl_reuse(const Eo *obj);
/**
* @def efl_xref(obj, ref_obj)
@@ -1875,7 +1872,7 @@ EAPI void efl_reuse(const Eo *obj);
*
* @see efl_xunref()
*/
-EAPI Eo *efl_xref_internal(const char *file, int line, Eo *obj, const Eo *ref_obj);
+EO_API Eo *efl_xref_internal(const char *file, int line, Eo *obj, const Eo *ref_obj);
/**
* @brief Decrement the object's reference count by 1 and free it if needed. Will free the ref associated with ref_obj).
@@ -1888,7 +1885,7 @@ EAPI Eo *efl_xref_internal(const char *file, int line, Eo *obj, const Eo *ref_ob
*
* @see efl_xref_internal()
*/
-EAPI void efl_xunref(Eo *obj, const Eo *ref_obj);
+EO_API void efl_xunref(Eo *obj, const Eo *ref_obj);
/**
* @brief Add a new weak reference to obj.
@@ -1900,7 +1897,7 @@ EAPI void efl_xunref(Eo *obj, const Eo *ref_obj);
*
* @param[in] wref The weak ref
*/
-EOAPI void efl_wref_add(Eo *obj, Efl_Object **wref);
+EO_API void efl_wref_add(Eo *obj, Efl_Object **wref);
/**
* @brief Delete the weak reference passed.
@@ -1909,7 +1906,7 @@ EOAPI void efl_wref_add(Eo *obj, Efl_Object **wref);
*
* @param[in] wref The weak ref
*/
-EOAPI void efl_wref_del(Eo *obj, Efl_Object **wref);
+EO_API void efl_wref_del(Eo *obj, Efl_Object **wref);
/**
* @brief Generic data with string key on an object.
@@ -1919,7 +1916,7 @@ EOAPI void efl_wref_del(Eo *obj, Efl_Object **wref);
* @param[in] key The key associated with the data
* @param[in] data The data to set
*/
-EOAPI void efl_key_data_set(Eo *obj, const char * key, const void *data);
+EO_API void efl_key_data_set(Eo *obj, const char * key, const void *data);
/**
* @brief Generic data with string key on an object.
@@ -1930,7 +1927,7 @@ EOAPI void efl_key_data_set(Eo *obj, const char * key, const void *data);
*
* @return The data to set
*/
-EOAPI void *efl_key_data_get(const Eo *obj, const char * key);
+EO_API void *efl_key_data_get(const Eo *obj, const char * key);
/**
* @brief Generic object reference with string key to object.
@@ -1945,7 +1942,7 @@ EOAPI void *efl_key_data_get(const Eo *obj, const char * key);
* @param[in] key The key associated with the object ref
* @param[in] objdata The object to set
*/
-EOAPI void efl_key_ref_set(Eo *obj, const char * key, const Efl_Object *objdata);
+EO_API void efl_key_ref_set(Eo *obj, const char * key, const Efl_Object *objdata);
/**
* @brief Generic object reference with string key to object.
@@ -1961,7 +1958,7 @@ EOAPI void efl_key_ref_set(Eo *obj, const char * key, const Efl_Object *objdata)
*
* @return The object to set
*/
-EOAPI Efl_Object *efl_key_ref_get(const Eo *obj, const char * key);
+EO_API Efl_Object *efl_key_ref_get(const Eo *obj, const char * key);
/**
* @brief Generic weak object reference with string key to object.
@@ -1975,7 +1972,7 @@ EOAPI Efl_Object *efl_key_ref_get(const Eo *obj, const char * key);
* @param[in] key The key associated with the object ref
* @param[in] objdata The object to set
*/
-EOAPI void efl_key_wref_set(Eo *obj, const char * key, const Efl_Object *objdata);
+EO_API void efl_key_wref_set(Eo *obj, const char * key, const Efl_Object *objdata);
/**
* @brief Generic weak object reference with string key to object.
@@ -1990,7 +1987,7 @@ EOAPI void efl_key_wref_set(Eo *obj, const char * key, const Efl_Object *objdata
*
* @return The object to set
*/
-EOAPI Efl_Object *efl_key_wref_get(const Eo *obj, const char * key);
+EO_API Efl_Object *efl_key_wref_get(const Eo *obj, const char * key);
/**
* @brief Value on with string key on the object.
@@ -2004,7 +2001,7 @@ EOAPI Efl_Object *efl_key_wref_get(const Eo *obj, const char * key);
* @param[in] key The key associated with the value
* @param[in] value The value to set
*/
-EOAPI void efl_key_value_set(Eo *obj, const char * key, Eina_Value *value);
+EO_API void efl_key_value_set(Eo *obj, const char * key, Eina_Value *value);
/**
* @brief Value on with string key on the object.
@@ -2019,7 +2016,7 @@ EOAPI void efl_key_value_set(Eo *obj, const char * key, Eina_Value *value);
*
* @return The value to set
*/
-EOAPI Eina_Value *efl_key_value_get(const Eo *obj, const char * key);
+EO_API Eina_Value *efl_key_value_get(const Eo *obj, const char * key);
/**
* @brief Enable or disable the manual free feature.
@@ -2036,7 +2033,7 @@ EOAPI Eina_Value *efl_key_value_get(const Eo *obj, const char * key);
*
* @see efl_manual_free()
*/
-EAPI void efl_manual_free_set(Eo *obj, Eina_Bool manual_free);
+EO_API void efl_manual_free_set(Eo *obj, Eina_Bool manual_free);
/**
* @brief Frees the object.
@@ -2049,7 +2046,7 @@ EAPI void efl_manual_free_set(Eo *obj, Eina_Bool manual_free);
*
* @see efl_manual_free_set()
*/
-EAPI Eina_Bool efl_manual_free(Eo *obj);
+EO_API Eina_Bool efl_manual_free(Eo *obj);
/**
* @brief Checks if the object was already descructed (only relevant for manual_free objects).
@@ -2060,7 +2057,7 @@ EAPI Eina_Bool efl_manual_free(Eo *obj);
*
* @see efl_manual_free_set()
*/
-EAPI Eina_Bool efl_destructed_is(const Eo *obj);
+EO_API Eina_Bool efl_destructed_is(const Eo *obj);
/**
* @brief Set the given #Eina_Value to the property with the specified \c property_name.
@@ -2070,7 +2067,7 @@ EAPI Eina_Bool efl_destructed_is(const Eo *obj);
*
* @see efl_property_reflection_get() and efl_property_reflection_exist()
*/
-EAPI Eina_Error efl_property_reflection_set(Eo *obj, const char *property_name, Eina_Value value);
+EO_API Eina_Error efl_property_reflection_set(Eo *obj, const char *property_name, Eina_Value value);
/**
* @brief Retrieve an #Eina_Value containing the current value of the property specified with \c property_name.
@@ -2081,7 +2078,7 @@ EAPI Eina_Error efl_property_reflection_set(Eo *obj, const char *property_name,
*
* @see efl_property_reflection_set() and efl_property_reflection_exist()
*/
-EAPI Eina_Value efl_property_reflection_get(const Eo *obj, const char *property_name);
+EO_API Eina_Value efl_property_reflection_get(const Eo *obj, const char *property_name);
/**
* @brief Check if a property exist for reflection.
@@ -2092,7 +2089,7 @@ EAPI Eina_Value efl_property_reflection_get(const Eo *obj, const char *property_
*
* @see efl_property_reflection_set() and efl_property_reflection_get()
*/
-EAPI Eina_Bool efl_property_reflection_exist(Eo *obj, const char *property_name);
+EO_API Eina_Bool efl_property_reflection_exist(Eo *obj, const char *property_name);
/**
* @addtogroup Efl_Class_Class Eo's Class class.
@@ -2107,7 +2104,7 @@ EAPI Eina_Bool efl_property_reflection_exist(Eo *obj, const char *property_name)
*
* @return The type of this class or INVALID if the klass parameter was invalid.
*/
-EAPI Efl_Class_Type efl_class_type_get(const Efl_Class *klass);
+EO_API Efl_Class_Type efl_class_type_get(const Efl_Class *klass);
/**
* @}
@@ -2162,6 +2159,10 @@ typedef void (*efl_key_data_free_func)(void *);
#define efl_wref_del_safe(wref) efl_weak_unref(wref)
/**
+ * @}
+ */
+
+/**
* @addtogroup Efl_Events Eo's Event Handling
* @{
*/
@@ -2170,7 +2171,7 @@ typedef void (*efl_key_data_free_func)(void *);
* Helper for sorting callbacks array. Automatically used by
* @ref EFL_CALLBACKS_ARRAY_DEFINE
*/
-EAPI int efl_callbacks_cmp(const Efl_Callback_Array_Item *a, const Efl_Callback_Array_Item *b);
+EO_API int efl_callbacks_cmp(const Efl_Callback_Array_Item *a, const Efl_Callback_Array_Item *b);
/**
* Helper for creating global callback arrays.
@@ -2276,10 +2277,10 @@ EAPI int efl_callbacks_cmp(const Efl_Callback_Array_Item *a, const Efl_Callback_
*
* @ingroup Efl_Object
*/
-EOAPI unsigned int efl_event_callback_count(const Eo *obj, const Efl_Event_Description *desc);
+EO_API unsigned int efl_event_callback_count(const Eo *obj, const Efl_Event_Description *desc);
/**
- * @def Replace the previous Eo pointer with new content.
+ * @brief Replace the previous Eo pointer with new content.
*
* @param storage Pointer to the space holding the object to be replaced.
* It can not be @c NULL.
@@ -2310,7 +2311,7 @@ efl_replace(Eo **storage, const Eo *new_obj)
return EINA_TRUE;
}
-EOAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_OBJECT;
+EO_API extern const Eina_Value_Type *EINA_VALUE_TYPE_OBJECT;
/**
* @brief Create a new #Eina_Value containing the passed parameter.
@@ -2386,13 +2387,13 @@ efl_alive_get(const Eo *obj)
* @brief Event triggered when a callback was added to the object
*/
#define EFL_EVENT_CALLBACK_ADD (&(_EFL_EVENT_CALLBACK_ADD))
-EAPI extern const Efl_Event_Description _EFL_EVENT_CALLBACK_ADD;
+EO_API extern const Efl_Event_Description _EFL_EVENT_CALLBACK_ADD;
/**
* @brief Event triggered when a callback was removed from the object
*/
#define EFL_EVENT_CALLBACK_DEL (&(_EFL_EVENT_CALLBACK_DEL))
-EAPI extern const Efl_Event_Description _EFL_EVENT_CALLBACK_DEL;
+EO_API extern const Efl_Event_Description _EFL_EVENT_CALLBACK_DEL;
/**
* @}
@@ -2410,7 +2411,7 @@ EAPI extern const Efl_Event_Description _EFL_EVENT_CALLBACK_DEL;
*
* @return an iterator on success, NULL otherwise
*/
-EAPI Eina_Iterator *eo_classes_iterator_new(void);
+EO_API Eina_Iterator *eo_classes_iterator_new(void);
/**
* @brief Get an iterator on the Eo objects
@@ -2419,7 +2420,7 @@ EAPI Eina_Iterator *eo_classes_iterator_new(void);
*
* @return an iterator on success, NULL otherwise
*/
-EAPI Eina_Iterator *eo_objects_iterator_new(void);
+EO_API Eina_Iterator *eo_objects_iterator_new(void);
/**
* @brief Check if a object can be owned
@@ -2429,7 +2430,7 @@ EAPI Eina_Iterator *eo_objects_iterator_new(void);
*
* @return EINA_TRUE if the object is ownable. EINA_FALSE if not.
*/
-EAPI Eina_Bool efl_ownable_get(const Eo *obj);
+EO_API Eina_Bool efl_ownable_get(const Eo *obj);
/**
* @}
@@ -2444,10 +2445,4 @@ EAPI Eina_Bool efl_ownable_get(const Eo *obj);
}
#endif
-#undef EAPI
-#define EAPI
-
-#undef EOAPI
-#define EOAPI
-
#endif
diff --git a/src/lib/eo/efl_object.eo b/src/lib/eo/efl_object.eo
index b336a4ee65..34460473ef 100644
--- a/src/lib/eo/efl_object.eo
+++ b/src/lib/eo/efl_object.eo
@@ -1,5 +1,3 @@
-import eina_types;
-
struct Efl.Event_Description {
[[This struct holds the description of a specific event.
@@ -434,6 +432,9 @@ abstract Efl.Object
class.constructor;
class.destructor;
}
+ constructors {
+ .parent @optional;
+ }
events {
del @hot: void; [[Object is being deleted. See @.destructor.]]
invalidate @hot: void; [[Object is being invalidated and losing its parent. See @.invalidate.]]
diff --git a/src/lib/eo/eina_types.eot b/src/lib/eo/eina_types.eot
index 5c31e5b219..cbb0981dc7 100644
--- a/src/lib/eo/eina_types.eot
+++ b/src/lib/eo/eina_types.eot
@@ -43,24 +43,69 @@ struct @extern Eina.Vector2 {
}
struct @extern Eina.Matrix3 {
- [[Eina 3x3 Matrix
+ [[A bidimensional array of floating point values with 3 rows and 3 columns.
@since 1.22
]]
- xx: double; [[XX matrix value]]
- xy: double; [[XY matrix value]]
- xz: double; [[XZ matrix value]]
+ xx: double; [[XX value.]]
+ xy: double; [[XY value.]]
+ xz: double; [[XZ value.]]
- yx: double; [[YX matrix value]]
- yy: double; [[YY matrix value]]
- yz: double; [[YZ matrix value]]
+ yx: double; [[YX value.]]
+ yy: double; [[YY value.]]
+ yz: double; [[YZ value.]]
- zx: double; [[ZX matrix value]]
- zy: double; [[ZY matrix value]]
- zz: double; [[ZZ matrix value]]
+ zx: double; [[ZX value.]]
+ zy: double; [[ZY value.]]
+ zz: double; [[ZZ value.]]
}
-type @extern @beta Eina.Unicode: uint32; [[Eina unicode type]]
+struct @extern Eina.Content; [[
+ Container for any type of content.
+
+ Each @Eina.Content is made of an @Eina.Slice of memory and an IANA MIME type:
+ https://www.iana.org/assignments/media-types/media-types.xhtml
+
+ If the type is a text-style type, the last byte of the slice must be \0.
+
+ @since 1.24
+]]
+
+struct @extern Eina.Matrix4 {
+ [[A bidimensional array of floating point values with 4 rows and 4 columns.
+
+ @since 1.24
+ ]]
+ xx: double; [[XX value.]]
+ xy: double; [[XY value.]]
+ xz: double; [[XZ value.]]
+ xw: double; [[XW value.]]
+
+ yx: double; [[YX value.]]
+ yy: double; [[YY value.]]
+ yz: double; [[YZ value.]]
+ yw: double; [[YW value.]]
+
+ zx: double; [[ZX value.]]
+ zy: double; [[ZY value.]]
+ zz: double; [[ZZ value.]]
+ zw: double; [[ZW value.]]
+
+ wx: double; [[WX value.]]
+ wy: double; [[WY value.]]
+ wz: double; [[WZ value.]]
+ ww: double; [[WW value.]]
+}
+
+struct @extern Eina.Range {
+ [[A range sequence of values.
+ @since 1.24
+ ]]
+ start: size; [[Start of the range.]]
+ length: size; [[Length of the range.]]
+}
+
+type @extern Eina.Unicode: uint32; [[Eina unicode type. @since 1.24]]
struct @extern @beta Eina.File_Direct_Info; [[Eina file direct information data structure]]
/*{
@@ -83,9 +128,6 @@ type @extern Eina.Error: int; [[Eina error type
@since 1.22
]]
-struct @extern @beta @free(eina_binbuf_free) Eina.Binbuf; [[Eina binbuf data structure]]
-struct @extern @beta @free(eina_strbuf_free) Eina.Strbuf; [[Eina strbuf data structure]]
-
struct @extern @beta Eina.Slice {
[[A linear, read-only, memory segment]]
len: size; [[Length of the memory segment]]
@@ -129,3 +171,7 @@ struct @extern @free(eina_promise_free) Eina.Promise; [[Eina promise type
/* FIXME: This definitely shouldn't be here. */
type @beta Efl.Event_Cb: __undefined_type; [[Efl event callback type]]
+type @extern Eina.Success_Flag: char; [[Eina error type
+
+ @since 1.24
+]]
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
index 55479009c8..b7f10faad8 100644
--- a/src/lib/eo/eo.c
+++ b/src/lib/eo/eo.c
@@ -38,8 +38,8 @@ static Eina_Bool _eo_trash_bypass = EINA_FALSE;
#define EFL_OBJECT_OP_IDS_FIRST 1
/* Used inside the class_get functions of classes, see #EFL_DEFINE_CLASS */
-EAPI Eina_Lock _efl_class_creation_lock;
-EAPI unsigned int _efl_object_init_generation = 1;
+EO_API Eina_Lock _efl_class_creation_lock;
+EO_API unsigned int _efl_object_init_generation = 1;
int _eo_log_dom = -1;
Eina_Thread _efl_object_main_thread;
static unsigned int efl_del_api_generation = 0;
@@ -90,7 +90,6 @@ static _Efl_Class **_eo_classes = NULL;
static Eo_Id _eo_classes_last_id = 0;
static Eo_Id _eo_classes_alloc = 0;
static int _efl_object_init_count = 0;
-static Efl_Object_Op _eo_ops_last_id = 0;
static Eina_Hash *_ops_storage = NULL;
static Eina_Spinlock _ops_storage_lock;
@@ -104,7 +103,6 @@ static void _eo_condtor_reset(_Eo_Object *obj);
static inline void *_efl_data_scope_get(const _Eo_Object *obj, const _Efl_Class *klass);
static inline void *_efl_data_xref_internal(const char *file, int line, _Eo_Object *obj, const _Efl_Class *klass, const _Eo_Object *ref_obj);
static inline void _efl_data_xunref_internal(_Eo_Object *obj, void *data, const _Eo_Object *ref_obj);
-static void _vtable_init(Eo_Vtable *vtable, size_t size);
static inline Efl_Object_Op _efl_object_api_op_id_get_internal(const void *api_func);
@@ -120,96 +118,210 @@ static inline Efl_Object_Op _efl_object_api_op_id_get_internal(const void *api_f
(_eo_classes[_UNMASK_ID(id) - 1]) : NULL); \
})
-static inline void
-_vtable_chain2_unref(Dich_Chain2 *chain)
+#define EFL_OBJECT_OP_CLASS_PART(op) op >> 16
+#define EFL_OBJECT_OP_FUNC_PART(op) op & 0xffff
+#define EFL_OBJECT_OP_CREATE_OP_ID(class_id, func_id) ((unsigned short)class_id)<<16|((unsigned short)func_id&0xffff)
+
+static const _Efl_Class *
+_eo_op_class_get(Efl_Object_Op op)
{
- if (--(chain->refcount) == 0)
- {
- free(chain);
- }
+ short class_id = EFL_OBJECT_OP_CLASS_PART(op);
+ return _eo_classes[class_id];
}
+#if defined(DEBUG_VTABLE_ALLOCATION)
+static int _allocated_memory = 0;
-static inline void
-_vtable_chain_alloc(Dich_Chain1 *chain1)
+static inline void*
+_vtable_alloc(unsigned long n, size_t elem)
{
- chain1->chain2 = calloc(1, sizeof(*(chain1->chain2)));
- chain1->chain2->refcount = 1;
+ _allocated_memory += n*elem;
+ return calloc(n, elem);
}
+#else
+static inline void*
+_vtable_alloc(unsigned long n, size_t elem)
+{
+ return calloc(n, elem);
+}
+#endif
-static inline void _vtable_chain_write_prepare(Dich_Chain1 *dst);
-static inline void
-_vtable_chain_merge(Dich_Chain1 *dst, const Dich_Chain1 *src)
+/**
+ * This inits the vtable with a given size
+ */
+static void
+_vtable_init_size(Eo_Vtable *vtable, unsigned int size)
{
- size_t j;
- const op_type_funcs *sf = src->chain2->funcs;
- op_type_funcs *df = dst->chain2->funcs;
+ //we assume here that _eo_classes_last_id was called before
+ vtable->size = size;
+ vtable->chain = _vtable_alloc(vtable->size, sizeof(Eo_Vtable_Node));
+}
- if (df == sf)
- {
- /* Skip if the chain is the same. */
- return;
- }
+/**
+ * This inits the vtable wit hthe current size of allocated tables
+ */
+static void
+_vtable_init(Eo_Vtable *vtable)
+{
+ //we assume here that _eo_classes_last_id was called before
+ _vtable_init_size(vtable, _eo_classes_last_id);
+}
- for (j = 0 ; j < DICH_CHAIN_LAST_SIZE ; j++, df++, sf++)
+/**
+ * This removes all nodes from the klass that are copied from mro
+ */
+static void
+_vtable_mro_free(const _Efl_Class *klass)
+{
+ const _Efl_Class **mro_itr = klass->mro;
+ const Eo_Vtable *vtable = &klass->vtable;
+ for ( ; *mro_itr ; mro_itr++)
{
- if (sf->func && memcmp(df, sf, sizeof(*df)))
+ const Eo_Vtable *mro_vtable = &(*mro_itr)->vtable;
+ if ((*mro_itr) == klass)
+ continue;
+ for (unsigned int i = 0; i < mro_vtable->size; ++i)
{
- _vtable_chain_write_prepare(dst);
- df = dst->chain2->funcs + j;
- memcpy(df, sf, sizeof(*df));
+ if (i == klass->class_id)
+ continue;
+ if (vtable->chain[i].funcs && mro_vtable->chain[i].funcs == vtable->chain[i].funcs)
+ {
+ vtable->chain[i].funcs = NULL;
+ }
}
}
}
-static inline void
-_vtable_chain_write_prepare(Dich_Chain1 *dst)
+static void
+_vtable_free(Eo_Vtable *vtable, const Eo_Vtable *root)
{
- if (!dst->chain2)
+ if (root)
{
- _vtable_chain_alloc(dst);
- return;
+ EINA_SAFETY_ON_FALSE_RETURN(vtable->size == root->size);
}
- else if (dst->chain2->refcount == 1)
+
+ for (int i = 0; i < vtable->size; ++i)
{
- /* We own it, no need to duplicate */
- return;
+ if (root && root->chain[i].funcs == vtable->chain[i].funcs)
+ vtable->chain[i].count = 0;
+
+ if (vtable->chain[i].count)
+ {
+ free(vtable->chain[i].funcs);
+ }
}
+ free(vtable->chain);
+}
- Dich_Chain1 old;
- old.chain2 = dst->chain2;
+/**
+ * This takes over all set chains of the src to dest.
+ * This should only be called on Eo_Vtables, which are initialized with this value.
+ * Previous setted values are going to be overwritten.
+ */
+static void
+_vtable_take_over(Eo_Vtable *dest, const Eo_Vtable *src)
+{
+ for (int i = 0; i < src->size; ++i)
+ {
+ if (src->chain[i].funcs)
+ {
+ dest->chain[i] = src->chain[i];
+ }
+ }
+}
- _vtable_chain_alloc(dst);
- _vtable_chain_merge(dst, &old);
+/**
+ * Fills the node of the passed class id with a empty none NULL pointer.
+ * This is used to indicate that a specific node has a normal 0 size, but is set.
+ */
+static void
+_vtable_insert_empty_funcs(Eo_Vtable *vtable, unsigned short class_id)
+{
+ vtable->chain[class_id].funcs = (void*)0x1010101;
+ vtable->chain[class_id].count = 0;
+}
- _vtable_chain2_unref(old.chain2);
+/**
+ * duplicate the source node, and write the duplicated values to the destination
+ * No logical changes are applied to src.
+ */
+static void
+_vtable_copy_node(Eo_Vtable_Node *dest, const Eo_Vtable_Node *src)
+{
+ dest->count = src->count;
+ dest->funcs = _vtable_alloc(sizeof(op_type_funcs), src->count);
+ memcpy(dest->funcs, src->funcs, sizeof(op_type_funcs) * src->count);
}
-static inline void
-_vtable_chain_copy_ref(Dich_Chain1 *dst, const Dich_Chain1 *src)
+/**
+ * Initialize a node with a empty funcs array of the passed length
+ */
+static void
+_vtable_prepare_empty_node(Eo_Vtable *dest, unsigned int length, unsigned int class_id)
{
- if (dst->chain2)
- {
- _vtable_chain_merge(dst, src);
- }
- else
+ dest->chain[class_id].count = length;
+ dest->chain[class_id].funcs = _vtable_alloc(sizeof(op_type_funcs), dest->chain[class_id].count);
+}
+
+/**
+ * Copy all setted APIs from src to dest.
+ * Already set function slots are going to be replaced.
+ */
+static void
+_vtable_merge_defined_api(Eo_Vtable *dest, const Eo_Vtable *src, Eina_Bool *hitmap)
+{
+ for (unsigned int i = 0; i < src->size; ++i)
{
- dst->chain2 = src->chain2;
- dst->chain2->refcount++;
+ //if there is a source node evalulate if we need to copy it
+ if (src->chain[i].funcs)
+ {
+ if (!dest->chain[i].funcs)
+ {
+ dest->chain[i] = src->chain[i];
+ EINA_SAFETY_ON_FALSE_RETURN(hitmap[i] == EINA_FALSE);
+ }
+ else
+ {
+ if (!hitmap[i])
+ {
+ const Eo_Vtable_Node node = dest->chain[i];
+ if (!node.count)
+ _vtable_insert_empty_funcs(dest, i);
+ else
+ _vtable_copy_node(&dest->chain[i], &node); //we copy what we have, and overwrite in the later for loop
+ hitmap[i] = EINA_TRUE;
+ }
+ for (int j = 0; j < src->chain[i].count; ++j)
+ {
+ if (src->chain[i].funcs[j].func)
+ dest->chain[i].funcs[j] = src->chain[i].funcs[j];
+ }
+ }
+ }
}
}
-static inline void
-_vtable_copy_all(Eo_Vtable *dst, const Eo_Vtable *src)
+/**
+ * Ensure that all set nodes from src are also set on dest.
+ * No real values are copied, the newly taken or allocated slots will be empty.
+ */
+static void
+_vtable_merge_empty(Eo_Vtable *dest, const Eo_Vtable *src, Eina_Bool *hitmap)
{
- Efl_Object_Op i;
- const Dich_Chain1 *sc1 = src->chain;
- Dich_Chain1 *dc1 = dst->chain;
- for (i = 0 ; i < src->size ; i++, sc1++, dc1++)
+ for (unsigned int i = 0; i < src->size; ++i)
{
- if (sc1->chain2)
+ if (src->chain[i].funcs && !dest->chain[i].funcs)
{
- _vtable_chain_copy_ref(dc1, sc1);
+ if (!src->chain[i].count)
+ {
+ dest->chain[i].funcs = src->chain[i].funcs;
+ dest->chain[i].count = src->chain[i].count;
+ }
+ else
+ {
+ _vtable_prepare_empty_node(dest, src->chain[i].count, i);
+ hitmap[i] = EINA_TRUE;
+ }
}
}
}
@@ -217,37 +329,15 @@ _vtable_copy_all(Eo_Vtable *dst, const Eo_Vtable *src)
static inline const op_type_funcs *
_vtable_func_get(const Eo_Vtable *vtable, Efl_Object_Op op)
{
- size_t idx1 = DICH_CHAIN1(op);
- if (EINA_UNLIKELY(idx1 >= vtable->size))
- return NULL;
- Dich_Chain1 *chain1 = &vtable->chain[idx1];
- if (EINA_UNLIKELY(!chain1->chain2))
- return NULL;
- return &chain1->chain2->funcs[DICH_CHAIN_LAST(op)];
-}
-
-/* XXX: Only used for a debug message below. Doesn't matter that it's slow. */
-static const _Efl_Class *
-_eo_op_class_get(Efl_Object_Op op)
-{
- _Efl_Class **itr = _eo_classes;
- int mid, max, min;
+ unsigned short class_id = EFL_OBJECT_OP_CLASS_PART(op);
+ unsigned short func_id = EFL_OBJECT_OP_FUNC_PART(op);
- min = 0;
- max = _eo_classes_last_id - 1;
- while (min <= max)
- {
- mid = (min + max) / 2;
+ if (EINA_UNLIKELY(vtable->size <= class_id))
+ return NULL;
+ if (EINA_UNLIKELY(vtable->chain[class_id].count <= func_id))
+ return NULL;
- if (itr[mid]->base_id + itr[mid]->ops_count < op)
- min = mid + 1;
- else if (itr[mid]->base_id > op)
- max = mid - 1;
- else
- return itr[mid];
- }
-
- return NULL;
+ return &vtable->chain[class_id].funcs[func_id];
}
static inline Eina_Bool
@@ -256,24 +346,30 @@ _vtable_func_set(Eo_Vtable *vtable, const _Efl_Class *klass,
Eo_Op_Func_Type func, Eina_Bool allow_same_override)
{
op_type_funcs *fsrc;
- size_t idx1 = DICH_CHAIN1(op);
- Dich_Chain1 *chain1;
+ unsigned short class_id = EFL_OBJECT_OP_CLASS_PART(op);
+ unsigned short func_id = EFL_OBJECT_OP_FUNC_PART(op);
+ Eo_Vtable_Node *hirachy_node = NULL;
+ Eo_Vtable_Node *node = NULL;
+
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(vtable->size >= class_id, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(idx1 < vtable->size, EINA_FALSE);
- chain1 = &vtable->chain[idx1];
- _vtable_chain_write_prepare(chain1);
- fsrc = &chain1->chain2->funcs[DICH_CHAIN_LAST(op)];
+ if (klass->parent && klass->parent->vtable.size > class_id)
+ hirachy_node = &klass->parent->vtable.chain[class_id];
if (hierarchy_klass)
+ hirachy_node = &hierarchy_klass->vtable.chain[class_id];
+ node = &vtable->chain[class_id];
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(node->funcs, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(node->count >= func_id, EINA_FALSE);
+ fsrc = &node->funcs[func_id];
+
+ if (hierarchy_klass && !func)
{
if (!func)
{
- op_type_funcs *fsrc_orig;
- Dich_Chain1 *chain1_orig;
-
- chain1_orig = &hierarchy_klass->vtable.chain[idx1];
- fsrc_orig = &chain1_orig->chain2->funcs[DICH_CHAIN_LAST(op)];
- func = fsrc_orig->func;
- klass = fsrc_orig->src;
+ op_type_funcs funcs = hirachy_node->funcs[func_id];
+ klass = funcs.src;
+ func = funcs.func;
}
}
else
@@ -287,27 +383,12 @@ _vtable_func_set(Eo_Vtable *vtable, const _Efl_Class *klass,
}
}
- fsrc->func = func;
fsrc->src = klass;
+ fsrc->func = func;
return EINA_TRUE;
}
-void
-_vtable_func_clean_all(Eo_Vtable *vtable)
-{
- size_t i;
- Dich_Chain1 *chain1 = vtable->chain;
-
- for (i = 0 ; i < vtable->size ; i++, chain1++)
- {
- if (chain1->chain2)
- _vtable_chain2_unref(chain1->chain2);
- }
- free(vtable->chain);
- vtable->chain = NULL;
-}
-
/* END OF DICH */
#define _EO_ID_GET(Id) ((Eo_Id) (Id))
@@ -443,19 +524,19 @@ err_obj_hierarchy:
return NULL;
}
-EAPI Eo *
+EO_API Eo *
efl_super(const Eo *eo_id, const Efl_Class *cur_klass)
{
return _efl_super_cast(eo_id, cur_klass, EINA_TRUE);
}
-EAPI Eo *
+EO_API Eo *
efl_cast(const Eo *eo_id, const Efl_Class *cur_klass)
{
return _efl_super_cast(eo_id, cur_klass, EINA_FALSE);
}
-EAPI Eina_Bool
+EO_API Eina_Bool
_efl_object_call_resolve(Eo *eo_id, const char *func_name, Efl_Object_Op_Call_Data *call, Efl_Object_Op op, const char *file, int line)
{
const _Efl_Class *klass, *main_klass;
@@ -463,42 +544,25 @@ _efl_object_call_resolve(Eo *eo_id, const char *func_name, Efl_Object_Op_Call_Da
_Eo_Object *obj = NULL;
const Eo_Vtable *vtable = NULL;
const op_type_funcs *func;
- Eina_Bool is_obj;
Eina_Bool super = EINA_TRUE;
if (EINA_UNLIKELY(!eo_id)) goto on_null;
- call->eo_id = eo_id;
- is_obj = _eo_is_a_obj(eo_id);
+ EO_OBJ_POINTER_RETURN_VAL_PROXY(eo_id, _obj, EINA_FALSE);
- if (EINA_LIKELY(is_obj == EINA_TRUE))
- {
- EO_OBJ_POINTER_RETURN_VAL_PROXY(eo_id, _obj, EINA_FALSE);
-
- obj = _obj;
- klass = _obj->klass;
- vtable = EO_VTABLE(obj);
- if (EINA_UNLIKELY(_obj->cur_klass != NULL))
- {
- // YES this is a goto with a label to return. this is a
- // micro-optimization to move infrequent code out of the
- // hot path of the function
- goto obj_super;
- }
-
-obj_super_back:
- call->obj = obj;
- _efl_ref(_obj);
- }
- else
+ obj = _obj;
+ klass = _obj->klass;
+ vtable = EO_VTABLE2(obj);
+ if (EINA_UNLIKELY(_obj->cur_klass != NULL))
{
// YES this is a goto with a label to return. this is a
// micro-optimization to move infrequent code out of the
// hot path of the function
- goto ok_klass;
+ goto obj_super;
}
-ok_klass_back:
+obj_super_back:
+ _efl_ref(_obj);
main_klass = klass;
@@ -513,6 +577,7 @@ ok_klass_back:
else
{
func = _vtable_func_get(vtable, op);
+ EINA_PREFETCH_NOCACHE(func);
// this is not very likely to happen - but may if its an invalid
// call or a composite object, but either way, it's not very likely
// so make it a goto to save on instruction cache
@@ -522,9 +587,10 @@ ok_cur_klass_back:
if (EINA_LIKELY(func->func && func->src))
{
+ call->eo_id = eo_id;
+ call->obj = obj;
call->func = func->func;
-
- if (is_obj) call->data = _efl_data_scope_get(obj, func->src);
+ call->data = _efl_data_scope_get(obj, func->src);
return EINA_TRUE;
}
@@ -535,7 +601,6 @@ ok_cur_klass_back:
end:
/* Try composite objects */
- if (is_obj)
{
Eina_List *itr;
Eo *emb_obj_id;
@@ -544,7 +609,7 @@ end:
EO_OBJ_POINTER_PROXY(emb_obj_id, emb_obj);
if (EINA_UNLIKELY(!emb_obj)) continue;
- func = _vtable_func_get(EO_VTABLE(emb_obj), op);
+ func = _vtable_func_get(&emb_obj->klass->vtable, op);
if (func == NULL) goto composite_continue;
if (EINA_LIKELY(func->func && func->src))
@@ -567,16 +632,16 @@ composite_continue:
// If it's a do_super call.
if (cur_klass)
{
- ERR("in %s:%d: func '%s' (%d) could not be resolved for class '%s' for super of '%s'.",
- file, line, func_name, op, main_klass->desc->name,
+ ERR("in %s:%d: func '%s' (%d) could not be resolved on %s for class '%s' for super of '%s'.",
+ file, line, func_name, op, efl_debug_name_get(eo_id), main_klass->desc->name,
cur_klass->desc->name);
goto err;
}
else
{
/* we should not be able to take this branch */
- ERR("in %s:%d: func '%s' (%d) could not be resolved for class '%s'.",
- file, line, func_name, op, main_klass->desc->name);
+ ERR("in %s:%d: func '%s' (%d) could not be resolved on %s for class '%s'.",
+ file, line, func_name, op, efl_debug_name_get(eo_id), main_klass->desc->name);
goto err;
}
@@ -584,12 +649,10 @@ err_func_src:
ERR("in %s:%d: you called a pure virtual func '%s' (%d) of class '%s'.",
file, line, func_name, op, klass->desc->name);
err:
- if (is_obj)
- {
- _apply_auto_unref(obj, eo_id);
- _efl_unref(obj);
- _eo_obj_pointer_done((Eo_Id)eo_id);
- }
+ _apply_auto_unref(obj, eo_id);
+ _efl_unref(obj);
+ _eo_obj_pointer_done((Eo_Id)eo_id);
+
return EINA_FALSE;
// yes - special "move out of hot path" code blobs with goto's for
@@ -600,18 +663,6 @@ ok_cur_klass:
klass = func->src;
goto ok_cur_klass_back;
-ok_klass:
- {
- EO_CLASS_POINTER_GOTO_PROXY(eo_id, _klass, err_klass);
- klass = _klass;
- vtable = &klass->vtable;
- cur_klass = _super_klass;
- if (cur_klass) _super_klass = NULL;
- call->obj = NULL;
- call->data = NULL;
- }
- goto ok_klass_back;
-
obj_super:
{
cur_klass = obj->cur_klass;
@@ -630,10 +681,6 @@ obj_super:
}
goto obj_super_back;
-err_klass:
- _EO_POINTER_ERR(eo_id, "in %s:%d: func '%s': obj_id=%p is an invalid ref.", file, line, func_name, eo_id);
- return EINA_FALSE;
-
on_null:
if (EINA_UNLIKELY(efl_del_api_generation != _efl_object_init_generation))
{
@@ -645,7 +692,7 @@ on_null:
return EINA_FALSE;
}
-EAPI void
+EO_API void
_efl_object_call_end(Efl_Object_Op_Call_Data *call)
{
if (EINA_LIKELY(!!call->obj))
@@ -688,7 +735,7 @@ _efl_object_api_op_id_get_internal(const void *api_func)
}
/* LEGACY, should be removed before next release */
-EAPI Efl_Object_Op
+EO_API Efl_Object_Op
_efl_object_api_op_id_get(const void *api_func)
{
Efl_Object_Op op = _efl_object_api_op_id_get_internal(api_func);
@@ -701,7 +748,7 @@ _efl_object_api_op_id_get(const void *api_func)
return op;
}
-EAPI Efl_Object_Op
+EO_API Efl_Object_Op
_efl_object_op_api_id_get(const void *api_func, const Eo *eo_obj, const char *api_func_name, const char *file, int line)
{
Efl_Object_Op op;
@@ -727,23 +774,25 @@ _efl_object_op_api_id_get(const void *api_func, const Eo *eo_obj, const char *ap
/* klass is the klass we are working on. hierarchy_klass is the class whe should
* use when validating. */
static Eina_Bool
-_eo_class_funcs_set(Eo_Vtable *vtable, const Efl_Object_Ops *ops, const _Efl_Class *hierarchy_klass, const _Efl_Class *klass, Efl_Object_Op id_offset, Eina_Bool override_only)
+_eo_class_funcs_set(Eo_Vtable *vtable, const Efl_Object_Ops *ops, const _Efl_Class *hierarchy_klass, const _Efl_Class *klass, Eina_Bool override_only, unsigned int class_id, Eina_Bool *hitmap)
{
unsigned int i, j;
- Efl_Object_Op op_id;
+ unsigned int number_of_new_functions = 0;
const Efl_Op_Description *op_desc;
const Efl_Op_Description *op_descs;
const _Efl_Class *override_class;
const void **api_funcs;
Eina_Bool check_equal;
- op_id = hierarchy_klass->base_id + id_offset;
op_descs = ops->descs;
override_class = override_only ? hierarchy_klass : NULL;
DBG("Set functions for class '%s':%p", klass->desc->name, klass);
- if (!op_descs || !ops->count) return EINA_TRUE;
+ if (!override_only)
+ _vtable_insert_empty_funcs(vtable, class_id);
+ if (!op_descs || !ops->count)
+ return EINA_TRUE;
#ifdef EO_DEBUG
check_equal = EINA_TRUE;
@@ -776,51 +825,73 @@ _eo_class_funcs_set(Eo_Vtable *vtable, const Efl_Object_Ops *ops, const _Efl_Cla
api_funcs[i] = op_desc->api_func;
}
+ if (_efl_object_api_op_id_get_internal(op_desc->api_func) == EFL_NOOP)
+ {
+ number_of_new_functions ++;
+ }
}
- for (i = 0, op_desc = op_descs; i < ops->count; i++, op_desc++)
+ if (!override_only)
+ {
+ if (number_of_new_functions)
+ {
+ //Before setting any real functions, allocate the node that will contain all the functions
+ _vtable_prepare_empty_node(vtable, number_of_new_functions, class_id);
+ }
+ hitmap[class_id] = EINA_TRUE;
+ }
+
+ for (i = 0, j = 0, op_desc = op_descs; i < ops->count; i++, op_desc++)
{
- Efl_Object_Op op = EFL_NOOP;
+ Efl_Object_Op op2 = EFL_NOOP;
+ short op2_class_id;
/* Get the opid for the function. */
- op = _efl_object_api_op_id_get_internal(op_desc->api_func);
+ op2 = _efl_object_api_op_id_get_internal(op_desc->api_func);
- if (op == EFL_NOOP)
+ if (op2 == EFL_NOOP)
{
+ //functions that do not have a op yet, are considered to be belonging to this class
if (override_only)
{
ERR("Class '%s': Tried overriding a previously undefined function.", klass->desc->name);
return EINA_FALSE;
}
- op = op_id;
+ op2 = EFL_OBJECT_OP_CREATE_OP_ID(class_id, j);
eina_spinlock_take(&_ops_storage_lock);
#ifndef _WIN32
- eina_hash_add(_ops_storage, &op_desc->api_func, (void *) (uintptr_t) op);
+ eina_hash_add(_ops_storage, &op_desc->api_func, (void *) (uintptr_t) op2);
#else
- eina_hash_add(_ops_storage, op_desc->api_func, (void *) (uintptr_t) op);
+ eina_hash_add(_ops_storage, op_desc->api_func, (void *) (uintptr_t) op2);
#endif
eina_spinlock_release(&_ops_storage_lock);
-
- op_id++;
+ j ++;
}
#ifdef EO_DEBUG
DBG("%p->%p '%s'", op_desc->api_func, op_desc->func, _eo_op_desc_name_get(op_desc));
#endif
-
- if (!_vtable_func_set(vtable, klass, override_class, op, op_desc->func, EINA_TRUE))
+ op2_class_id = EFL_OBJECT_OP_CLASS_PART(op2);
+ //in case we are having a function overwrite for a specific type, copy the relevant vtable
+ if (!hitmap[op2_class_id])
+ {
+ const Eo_Vtable_Node node = vtable->chain[op2_class_id];
+ _vtable_copy_node(&vtable->chain[op2_class_id], &node);
+ hitmap[op2_class_id] = EINA_TRUE;
+ }
+ if (!_vtable_func_set(vtable, klass, override_class, op2, op_desc->func, EINA_TRUE))
return EINA_FALSE;
}
-
return EINA_TRUE;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_class_functions_set(const Efl_Class *klass_id, const Efl_Object_Ops *object_ops, const Efl_Object_Property_Reflection_Ops *reflection_table)
{
EO_CLASS_POINTER_GOTO(klass_id, klass, err_klass);
Efl_Object_Ops empty_ops = { 0 };
+ Eina_Bool *hitmap;
// not likely so use goto to alleviate l1 instruction cache of rare code
if (klass->functions_set) goto err_funcs;
@@ -832,35 +903,93 @@ efl_class_functions_set(const Efl_Class *klass_id, const Efl_Object_Ops *object_
klass->ops_count = object_ops->count;
- klass->base_id = _eo_ops_last_id;
- _eo_ops_last_id += klass->ops_count + 1;
+ klass->class_id = _UNMASK_ID(klass->header.id) - 1;
- _vtable_init(&klass->vtable, DICH_CHAIN1(_eo_ops_last_id) + 1);
+ _vtable_init(&klass->vtable);
+ if (!klass->vtable.chain) goto err_vtable;
- /* Flatten the function array */
+ hitmap = alloca(klass->vtable.size);
+ memset(hitmap, 0, klass->vtable.size);
+ /* Merge in all required vtable entries */
{
const _Efl_Class **mro_itr = klass->mro;
- for ( ; *mro_itr ; mro_itr++) ;
-
- /* Skip ourselves. */
+ /* take over everything from the parent */
+ if (klass->parent)
+ {
+ _vtable_take_over(&klass->vtable, &klass->parent->vtable);
+ }
+ /*
+ * - jump to the mro entry containing the parent
+ * - everything further from the parent to the next elements is already
+ * represented in the vtable of the parent.
+ */
+ for ( ; *mro_itr ; mro_itr++)
+ {
+ if (*mro_itr == klass->parent)
+ break;
+ }
+ /**
+ * merge in all the APIs that are extended in the current klass for this first time.
+ * That means, they are not extended anywhere from the parent further up.
+ */
for ( mro_itr-- ; mro_itr > klass->mro ; mro_itr--)
- _vtable_copy_all(&klass->vtable, &(*mro_itr)->vtable);
+ {
+ _vtable_merge_defined_api(&klass->vtable, &(*mro_itr)->vtable, hitmap);
+ }
+ /*
+ * add slots for the interfaces and mixins we are inheriting from
+ */
+ for (int i = 0; klass->extensions[i]; i++)
+ {
+ const _Efl_Class *ext = klass->extensions[i];
+ /*for all extensions of the class, ensure that *at least* empty vtables are available, so the efl_isa calls do succeed*/
+ _vtable_merge_empty(&klass->vtable, &ext->vtable, hitmap);
+ }
}
+ {
+ unsigned int i;
- return _eo_class_funcs_set(&klass->vtable, object_ops, klass, klass, 0, EINA_FALSE);
+ for (i = 0; i < object_ops->count; i++)
+ {
+ Efl_Object_Op op = _efl_object_api_op_id_get_internal(object_ops->descs[i].api_func);
+ if (op == EFL_NOOP) continue; //EFL_NOOP means that this function is not yet defined, this will be handled later
+ short class_id = EFL_OBJECT_OP_CLASS_PART(op);
+ if (klass->vtable.chain[class_id].count == 0)
+ {
+ const _Efl_Class *required_klass = _eo_classes[class_id];
+ /* in case this type is not already inherited, error on everything that is not a mixin */
+ if (klass->desc->type == EFL_CLASS_TYPE_MIXIN)
+ {
+ /* this is when a mixin implemets a regular api, we just prepare a empty node, the rest will be implemented later */
+ _vtable_prepare_empty_node(&klass->vtable, required_klass->vtable.chain[class_id].count, class_id);
+ hitmap[class_id] = EINA_TRUE;
+ }
+ else
+ {
+ ERR("There is an API implemented, whoms type is not part of this class. %s vs. %s", klass->desc->name, required_klass->desc->name);
+ _vtable_prepare_empty_node(&klass->vtable, required_klass->vtable.chain[class_id].count, class_id);
+ hitmap[class_id] = EINA_TRUE;
+ }
+ }
+ }
+ }
+ return _eo_class_funcs_set(&klass->vtable, object_ops, klass, klass, EINA_FALSE, klass->class_id, hitmap);
err_funcs:
ERR("Class %s already had its functions set..", klass->desc->name);
return EINA_FALSE;
err_klass:
_EO_POINTER_ERR(klass_id, "Class (%p) is an invalid ref.", klass_id);
return EINA_FALSE;
+err_vtable:
+ ERR("failed to allocate vtable for class '%s'", klass->desc->name);
+ return EINA_FALSE;
}
static Eo *
_efl_add_internal_start_do(const char *file, int line, const Efl_Class *klass_id, Eo *parent_id, Eina_Bool ref, Eina_Bool is_fallback, Efl_Substitute_Ctor_Cb substitute_ctor, void *sub_ctor_data)
{
- const char *func_name = __FUNCTION__;
+ const char *func_name = __func__;
_Eo_Object *obj;
Eo_Stack_Frame *fptr = NULL;
@@ -963,13 +1092,13 @@ err_parent:
return NULL;
}
-EAPI Eo *
+EO_API Eo *
_efl_add_internal_start(const char *file, int line, const Efl_Class *klass_id, Eo *parent_id, Eina_Bool ref, Eina_Bool is_fallback)
{
return _efl_add_internal_start_do(file, line, klass_id, parent_id, ref, is_fallback, NULL, NULL);
}
-EAPI Eo * _efl_add_internal_start_bindings(const char *file, int line, const Efl_Class *klass_id, Eo *parent_id, Eina_Bool ref, Eina_Bool is_fallback, Efl_Substitute_Ctor_Cb substitute_ctor, void *sub_ctor_data)
+EO_API Eo * _efl_add_internal_start_bindings(const char *file, int line, const Efl_Class *klass_id, Eo *parent_id, Eina_Bool ref, Eina_Bool is_fallback, Efl_Substitute_Ctor_Cb substitute_ctor, void *sub_ctor_data)
{
return _efl_add_internal_start_do(file, line, klass_id, parent_id, ref, is_fallback, substitute_ctor, sub_ctor_data);
}
@@ -1016,7 +1145,7 @@ cleanup:
return NULL;
}
-EAPI Eo *
+EO_API Eo *
_efl_add_end(Eo *eo_id, Eina_Bool is_ref, Eina_Bool is_fallback)
{
if (!eo_id) return NULL;
@@ -1036,7 +1165,7 @@ _efl_add_end(Eo *eo_id, Eina_Bool is_ref, Eina_Bool is_fallback)
return ret;
}
-EAPI void
+EO_API void
efl_reuse(const Eo *eo_id)
{
Eo *obj = (Eo *) eo_id;
@@ -1096,10 +1225,9 @@ _eo_free(_Eo_Object *obj, Eina_Bool manual_free EINA_UNUSED)
}
}
#endif
- if (_obj_is_override(obj))
+ if (obj->opt && _obj_is_override(obj))
{
- _vtable_func_clean_all(obj->opt->vtable);
- eina_freeq_ptr_main_add(obj->opt->vtable, free, 0);
+ _vtable_free(obj->opt->vtable, &obj->klass->vtable);
EO_OPTIONAL_COW_SET(obj, vtable, NULL);
}
@@ -1120,7 +1248,7 @@ _eo_free(_Eo_Object *obj, Eina_Bool manual_free EINA_UNUSED)
}
/*****************************************************************************/
-EAPI const Efl_Class *
+EO_API const Efl_Class *
efl_class_get(const Eo *eo_id)
{
const Efl_Class *klass;
@@ -1142,7 +1270,7 @@ err_obj:
return NULL;
}
-EAPI const char *
+EO_API const char *
efl_class_name_get(const Efl_Class *eo_id)
{
const _Efl_Class *klass;
@@ -1166,7 +1294,7 @@ err_obj:
return NULL;
}
-EAPI size_t
+EO_API size_t
efl_class_memory_size_get(const Efl_Class *eo_id)
{
const _Efl_Class *klass;
@@ -1190,22 +1318,6 @@ err_obj:
return 0;
}
-
-static void
-_vtable_init(Eo_Vtable *vtable, size_t size)
-{
- vtable->size = size;
- vtable->chain = calloc(vtable->size, sizeof(*vtable->chain));
-}
-
-static void
-_vtable_free(Eo_Vtable *vtable)
-{
- if (!vtable) return;
- _vtable_func_clean_all(vtable);
- eina_freeq_ptr_main_add(vtable, free, sizeof(*vtable));
-}
-
static Eina_Bool
_eo_class_mro_has(const _Efl_Class *klass, const _Efl_Class *find)
{
@@ -1360,8 +1472,8 @@ eo_class_free(_Efl_Class *klass)
{
if (klass->desc->class_destructor)
klass->desc->class_destructor(_eo_class_id_get(klass));
-
- _vtable_func_clean_all(&klass->vtable);
+ _vtable_mro_free(klass);
+ _vtable_free(&klass->vtable, NULL);
}
EINA_TRASH_CLEAN(&klass->objects.trash, data)
@@ -1376,32 +1488,6 @@ eo_class_free(_Efl_Class *klass)
eina_freeq_ptr_main_add(klass, free, 0);
}
-/* Not really called, just used for the ptr... */
-static void
-_eo_class_isa_func(Eo *eo_id EINA_UNUSED, void *class_data EINA_UNUSED)
-{
- /* Do nonthing. */
-}
-
-static void
-_eo_class_isa_recursive_set(_Efl_Class *klass, const _Efl_Class *cur)
-{
- const _Efl_Class **extn_itr;
-
- _vtable_func_set(&klass->vtable, klass, NULL, cur->base_id + cur->ops_count,
- _eo_class_isa_func, EINA_TRUE);
-
- for (extn_itr = cur->extensions ; *extn_itr ; extn_itr++)
- {
- _eo_class_isa_recursive_set(klass, *extn_itr);
- }
-
- if (cur->parent)
- {
- _eo_class_isa_recursive_set(klass, cur->parent);
- }
-}
-
static inline void
_eo_classes_release(void)
{
@@ -1475,7 +1561,7 @@ _eo_classes_expand(void)
_eo_classes = (_Efl_Class **)ptr;
}
-EAPI const Efl_Class *
+EO_API const Efl_Class *
efl_class_new(const Efl_Class_Description *desc, const Efl_Class *parent_id, ...)
{
_Efl_Class *klass;
@@ -1635,7 +1721,9 @@ efl_class_new(const Efl_Class_Description *desc, const Efl_Class *parent_id, ...
mro = eina_list_remove(mro, NULL);
mro = eina_list_prepend(mro, klass);
if ((desc->type == EFL_CLASS_TYPE_MIXIN) && (desc->data_size > 0))
- mixins = eina_list_prepend(mixins, klass);
+ {
+ mixins = eina_list_prepend(mixins, klass);
+ }
/* Copy the extensions and free the list */
{
@@ -1665,7 +1753,9 @@ efl_class_new(const Efl_Class_Description *desc, const Efl_Class *parent_id, ...
size_t extn_data_off = klass->data_offset;
if (klass->desc->type != EFL_CLASS_TYPE_MIXIN)
+ {
extn_data_off += EO_ALIGN_SIZE(klass->desc->data_size);
+ }
/* Feed the mixins data offsets and free the mixins list. */
{
@@ -1710,12 +1800,6 @@ efl_class_new(const Efl_Class_Description *desc, const Efl_Class *parent_id, ...
efl_class_functions_set(_eo_class_id_get(klass), NULL, NULL);
}
- /* Mark which classes we implement */
- if (klass->vtable.size)
- {
- _eo_class_isa_recursive_set(klass, klass);
- }
-
_eo_class_constructor(klass);
DBG("Finished building class '%s'", klass->desc->name);
@@ -1723,7 +1807,7 @@ efl_class_new(const Efl_Class_Description *desc, const Efl_Class *parent_id, ...
return _eo_class_id_get(klass);
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_object_override(Eo *eo_id, const Efl_Object_Ops *ops)
{
EO_OBJ_POINTER_RETURN_VAL(eo_id, obj, EINA_FALSE);
@@ -1732,32 +1816,42 @@ efl_object_override(Eo *eo_id, const Efl_Object_Ops *ops)
if (ops)
{
Eo_Vtable *vtable = obj->opt->vtable;
+ //copy all the vtable nodes that we are going to change later on
+ Eina_Bool *hitmap;
if (!vtable)
{
vtable = calloc(1, sizeof(*vtable));
- _vtable_init(vtable, obj->klass->vtable.size);
- _vtable_copy_all(vtable, &obj->klass->vtable);
+ _vtable_init_size(vtable, obj->klass->vtable.size);
+ _vtable_take_over(vtable, &obj->klass->vtable);
}
- if (!_eo_class_funcs_set(vtable, ops, obj->klass, klass, 0, EINA_TRUE))
+ hitmap = alloca(vtable->size * sizeof(Eina_Bool));
+ memset(hitmap, 0, vtable->size);
+
+ if (!_eo_class_funcs_set(vtable, ops, obj->klass, klass, EINA_TRUE, obj->klass->class_id, hitmap))
{
ERR("Failed to override functions for %s@%p. All previous "
"overrides have been reset.", obj->klass->desc->name, eo_id);
if (obj->opt->vtable == vtable)
- EO_OPTIONAL_COW_SET(obj, vtable, NULL);
+ {
+ EO_OPTIONAL_COW_SET(obj, vtable, NULL);
+ }
else
- _vtable_free(vtable);
+ {
+ _vtable_free(vtable, &obj->klass->vtable);
+ free(vtable);
+ }
+
goto err;
}
-
EO_OPTIONAL_COW_SET(obj, vtable, vtable);
}
else
{
if (obj->opt->vtable)
{
- _vtable_free(obj->opt->vtable);
+ _vtable_free(obj->opt->vtable, &obj->klass->vtable);
EO_OPTIONAL_COW_SET(obj, vtable, NULL);
}
}
@@ -1770,7 +1864,7 @@ err:
return EINA_FALSE;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_isa(const Eo *eo_id, const Efl_Class *klass_id)
{
Efl_Id_Domain domain;
@@ -1791,10 +1885,10 @@ efl_isa(const Eo *eo_id, const Efl_Class *klass_id)
EO_CLASS_POINTER_GOTO(klass_id, klass, err_class);
EO_CLASS_POINTER_GOTO(eo_id, lookinto, err_class0);
- const op_type_funcs *func = _vtable_func_get
- (&lookinto->vtable, klass->base_id + klass->ops_count);
+ if (EINA_UNLIKELY(lookinto->vtable.size <= klass->class_id))
+ return EINA_FALSE;
- return (func && (func->func == _eo_class_isa_func));;
+ return !!lookinto->vtable.chain[klass->class_id].funcs;
}
domain = ((Eo_Id)eo_id >> SHIFT_DOMAIN) & MASK_DOMAIN;
@@ -1813,15 +1907,17 @@ efl_isa(const Eo *eo_id, const Efl_Class *klass_id)
EO_OBJ_POINTER_GOTO(eo_id, obj, err_obj);
EO_CLASS_POINTER_GOTO(klass_id, klass, err_class);
- const op_type_funcs *func = _vtable_func_get
- (EO_VTABLE(obj), klass->base_id + klass->ops_count);
+
+ const Eo_Vtable vtable = obj->klass->vtable;
+ if (EINA_UNLIKELY(vtable.size <= klass->class_id))
+ return EINA_FALSE;
+
+ isa = !!vtable.chain[klass->class_id].funcs;
// Caching the result as we do a lot of serial efl_isa due to evas_object_image using it.
tdata->cache.isa_id = eo_id;
tdata->cache.klass = klass_id;
- // Currently implemented by reusing the LAST op id. Just marking it with
- // _eo_class_isa_func.
- isa = tdata->cache.isa = (func && (func->func == _eo_class_isa_func));
+ tdata->cache.isa = isa;
}
else
{
@@ -1841,15 +1937,16 @@ efl_isa(const Eo *eo_id, const Efl_Class *klass_id)
EO_OBJ_POINTER_GOTO(eo_id, obj, err_shared_obj);
EO_CLASS_POINTER_GOTO(klass_id, klass, err_shared_class);
- const op_type_funcs *func = _vtable_func_get
- (EO_VTABLE(obj), klass->base_id + klass->ops_count);
+ if (EINA_UNLIKELY(obj->klass->vtable.size <= klass->class_id))
+ goto err_vtable;
+
+ isa = !!obj->klass->vtable.chain[klass->class_id].funcs;
// Caching the result as we do a lot of serial efl_isa due to evas_object_image using it.
tdata->cache.isa_id = eo_id;
tdata->cache.klass = klass_id;
- // Currently implemented by reusing the LAST op id. Just marking it with
- // _eo_class_isa_func.
- isa = tdata->cache.isa = (func && (func->func == _eo_class_isa_func));
+ tdata->cache.isa = isa;
+err_vtable:
EO_OBJ_DONE(eo_id);
eina_lock_release(&(_eo_table_data_shared_data->obj_lock));
}
@@ -1882,13 +1979,13 @@ err: EINA_COLD
return EINA_FALSE;
}
-EAPI Eo *
+EO_API Eo *
efl_xref_internal(const char *file, int line, Eo *obj_id, const Eo *ref_obj_id)
{
efl_ref(obj_id);
#ifdef EO_DEBUG
- const char *func_name = __FUNCTION__;
+ const char *func_name = __func__;
EO_OBJ_POINTER_RETURN_VAL_PROXY(obj_id, obj, obj_id);
Eo_Xref_Node *xref = calloc(1, sizeof(*xref));
@@ -1907,7 +2004,7 @@ efl_xref_internal(const char *file, int line, Eo *obj_id, const Eo *ref_obj_id)
return obj_id;
}
-EAPI void
+EO_API void
efl_xunref(Eo *obj_id, const Eo *ref_obj_id)
{
EO_OBJ_POINTER_RETURN(obj_id, obj);
@@ -1937,7 +2034,7 @@ efl_xunref(Eo *obj_id, const Eo *ref_obj_id)
efl_unref(obj_id);
}
-EAPI Eo *
+EO_API Eo *
efl_ref(const Eo *obj_id)
{
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, (Eo *)obj_id);
@@ -1955,7 +2052,7 @@ efl_ref(const Eo *obj_id)
return (Eo *)obj_id;
}
-EAPI void
+EO_API void
efl_unref(const Eo *obj_id)
{
EO_OBJ_POINTER_RETURN(obj_id, obj);
@@ -1999,7 +2096,7 @@ efl_unref(const Eo *obj_id)
{
ERR("Obj:%s@%p. User refcount (%d) < 0. Too many unrefs.",
obj->klass->desc->name, obj_id, obj->user_refcount);
- _eo_log_obj_report((Eo_Id)obj_id, EINA_LOG_LEVEL_ERR, __FUNCTION__, __FILE__, __LINE__);
+ _eo_log_obj_report((Eo_Id)obj_id, EINA_LOG_LEVEL_ERR, __func__, __FILE__, __LINE__);
EO_OBJ_DONE(obj_id);
_efl_unref(obj);
return;
@@ -2017,7 +2114,7 @@ efl_unref(const Eo *obj_id)
EO_OBJ_DONE(obj_id);
}
-EAPI int
+EO_API int
efl_ref_count(const Eo *obj_id)
{
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, 0);
@@ -2027,7 +2124,7 @@ efl_ref_count(const Eo *obj_id)
return ref;
}
-EAPI int
+EO_API int
___efl_ref2_count(const Eo *obj_id)
{
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, 0);
@@ -2037,7 +2134,7 @@ ___efl_ref2_count(const Eo *obj_id)
return ref;
}
-EAPI void
+EO_API void
___efl_ref2_reset(const Eo *obj_id)
{
EO_OBJ_POINTER_RETURN(obj_id, obj);
@@ -2046,7 +2143,7 @@ ___efl_ref2_reset(const Eo *obj_id)
}
-EAPI void
+EO_API void
efl_del_intercept_set(Eo *obj_id, Efl_Del_Intercept del_intercept_func)
{
EO_OBJ_POINTER_RETURN(obj_id, obj);
@@ -2054,7 +2151,7 @@ efl_del_intercept_set(Eo *obj_id, Efl_Del_Intercept del_intercept_func)
EO_OBJ_DONE(obj_id);
}
-EAPI Efl_Del_Intercept
+EO_API Efl_Del_Intercept
efl_del_intercept_get(const Eo *obj_id)
{
Efl_Del_Intercept func;
@@ -2185,7 +2282,7 @@ _efl_data_xunref_internal(_Eo_Object *obj EINA_UNUSED, void *data EINA_UNUSED, c
#endif
}
-EAPI void *
+EO_API void *
efl_data_scope_get(const Eo *obj_id, const Efl_Class *klass_id)
{
void *ret = NULL;
@@ -2213,7 +2310,7 @@ err_klass:
return ret;
}
-EAPI void *
+EO_API void *
efl_data_scope_safe_get(const Eo *obj_id, const Efl_Class *klass_id)
{
void *ret = NULL;
@@ -2238,12 +2335,12 @@ err_klass:
return ret;
}
-EAPI void *
+EO_API void *
efl_data_xref_internal(const char *file, int line, const Eo *obj_id, const Efl_Class *klass_id, const Eo *ref_obj_id)
{
void *ret = NULL;
_Efl_Class *klass = NULL;
- const char *func_name = __FUNCTION__;
+ const char *func_name = __func__;
EO_OBJ_POINTER_RETURN_VAL_PROXY(obj_id, obj, NULL);
EO_OBJ_POINTER_PROXY(ref_obj_id, ref_obj);
if (ref_obj)
@@ -2281,7 +2378,7 @@ err:
#endif
}
-EAPI void
+EO_API void
efl_data_xunref_internal(const Eo *obj_id, void *data, const Eo *ref_obj_id)
{
EO_OBJ_POINTER_RETURN(obj_id, obj);
@@ -2306,7 +2403,7 @@ _eo_table_del_cb(void *in)
* This is used by the gdb debug helper script */
Eo_Id_Data *_eo_gdb_main_domain = NULL;
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_object_init(void)
{
const char *log_dom = "eo";
@@ -2326,7 +2423,6 @@ efl_object_init(void)
_eo_classes = NULL;
_eo_classes_last_id = EO_CLASS_IDS_FIRST - 1;
- _eo_ops_last_id = EFL_OBJECT_OP_IDS_FIRST;
_eo_log_dom = eina_log_domain_register(log_dom, EINA_COLOR_LIGHTBLUE);
if (_eo_log_dom < 0)
{
@@ -2384,12 +2480,6 @@ efl_object_init(void)
eina_tls_set(_eo_table_data, data);
_efl_object_main_thread = eina_thread_self();
-#ifdef EO_DEBUG
- /* Call it just for coverage purposes. Ugly I know, but I like it better than
- * casting everywhere else. */
- _eo_class_isa_func(NULL, NULL);
-#endif
-
efl_object_optional_cow =
eina_cow_add("Efl Object Optional Data", sizeof(Efl_Object_Optional),
64, &efl_object_optional_cow_default, EINA_TRUE);
@@ -2401,14 +2491,14 @@ efl_object_init(void)
EINA_LOG_STATE_INIT);
/* bootstrap EFL_CLASS_CLASS */
- (void) EFL_CLASS_CLASS;
+ const Eo *efl_klass = EFL_CLASS_CLASS;
/* bootstrap EFL_OBJECT_CLASS */
- (void) EFL_OBJECT_CLASS;
+ const Eo *efl_object = EFL_OBJECT_CLASS;
- return EINA_TRUE;
+ return efl_klass && efl_object;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_object_shutdown(void)
{
size_t i;
@@ -2479,21 +2569,21 @@ efl_object_shutdown(void)
}
-EAPI Efl_Id_Domain
+EO_API Efl_Id_Domain
efl_domain_get(void)
{
Eo_Id_Data *data = _eo_table_data_get();
return data->local_domain;
}
-EAPI Efl_Id_Domain
+EO_API Efl_Id_Domain
efl_domain_current_get(void)
{
Eo_Id_Data *data = _eo_table_data_get();
return data->domain_stack[data->stack_top];
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_domain_switch(Efl_Id_Domain domain)
{
Eo_Id_Data *data = _eo_table_data_get();
@@ -2540,21 +2630,21 @@ _efl_domain_pop(Eo_Id_Data *data)
if (data->stack_top > 0) data->stack_top--;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_domain_current_push(Efl_Id_Domain domain)
{
Eo_Id_Data *data = _eo_table_data_get();
return _efl_domain_push(data, domain);
}
-EAPI void
+EO_API void
efl_domain_current_pop(void)
{
Eo_Id_Data *data = _eo_table_data_get();
_efl_domain_pop(data);
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_domain_current_set(Efl_Id_Domain domain)
{
Eo_Id_Data *data = _eo_table_data_get();
@@ -2567,14 +2657,14 @@ efl_domain_current_set(Efl_Id_Domain domain)
return EINA_TRUE;
}
-EAPI Efl_Domain_Data *
+EO_API Efl_Domain_Data *
efl_domain_data_get(void)
{
Eo_Id_Data *data = _eo_table_data_get();
return (Efl_Domain_Data *)data;
}
-EAPI Efl_Id_Domain
+EO_API Efl_Id_Domain
efl_domain_data_adopt(Efl_Domain_Data *data_in)
{
Eo_Id_Data *data = _eo_table_data_get();
@@ -2602,7 +2692,7 @@ efl_domain_data_adopt(Efl_Domain_Data *data_in)
return data->domain_stack[data->stack_top];
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_domain_data_return(Efl_Id_Domain domain)
{
Eo_Id_Data *data = _eo_table_data_get();
@@ -2622,7 +2712,7 @@ efl_domain_data_return(Efl_Id_Domain domain)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_compatible(const Eo *obj, const Eo *obj_target)
{
Efl_Id_Domain domain1 = ((Eo_Id)obj >> SHIFT_DOMAIN) & MASK_DOMAIN;
@@ -2633,7 +2723,7 @@ efl_compatible(const Eo *obj, const Eo *obj_target)
return EINA_FALSE;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_class_override_register(const Efl_Class *klass, const Efl_Class *override)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(klass, EINA_FALSE);
@@ -2647,7 +2737,7 @@ efl_class_override_register(const Efl_Class *klass, const Efl_Class *override)
return EINA_TRUE;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_class_override_unregister(const Efl_Class *klass, const Efl_Class *override)
{
const Efl_Class *set;
@@ -2660,7 +2750,7 @@ efl_class_override_unregister(const Efl_Class *klass, const Efl_Class *override)
return eina_hash_del_by_key(class_overrides, &klass);
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_destructed_is(const Eo *obj_id)
{
Eina_Bool is;
@@ -2670,7 +2760,7 @@ efl_destructed_is(const Eo *obj_id)
return is;
}
-EAPI void
+EO_API void
efl_manual_free_set(Eo *obj_id, Eina_Bool manual_free)
{
EO_OBJ_POINTER_RETURN(obj_id, obj);
@@ -2678,7 +2768,7 @@ efl_manual_free_set(Eo *obj_id, Eina_Bool manual_free)
EO_OBJ_DONE(obj_id);
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_manual_free(Eo *obj_id)
{
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, EINA_FALSE);
@@ -2702,7 +2792,7 @@ err:
return EINA_FALSE;
}
-EAPI const char *
+EO_API const char *
efl_debug_name_get(const Eo *obj_id)
{
const char *override = "";
@@ -2762,7 +2852,7 @@ efl_debug_name_get(const Eo *obj_id)
return eina_slstr_strbuf_new(sb);
}
-EAPI int
+EO_API int
efl_callbacks_cmp(const Efl_Callback_Array_Item *a, const Efl_Callback_Array_Item *b)
{
if (a->desc == b->desc) return 0;
@@ -2892,7 +2982,7 @@ _eo_log_obj_entry_show(const Eo_Log_Obj_Entry *entry, int log_level, const char
entry->timestamp - _eo_log_time_start, now - entry->timestamp,
entry->bt_hits);
- // Skip EAPI and _eo_log_obj_ref_op()
+ // Skip EO_API and _eo_log_obj_ref_op()
for (i = 2; i < entry->bt_size; i++)
{
#ifdef HAVE_DLADDR
@@ -3390,7 +3480,7 @@ _eo_log_obj_shutdown(void)
entry->klass,
entry->klass->desc->name,
entry->timestamp - _eo_log_time_start, now - entry->timestamp);
- _eo_log_obj_entry_show(entry, EINA_LOG_LEVEL_DBG, __FUNCTION__, __FILE__, __LINE__, now);
+ _eo_log_obj_entry_show(entry, EINA_LOG_LEVEL_DBG, __func__, __FILE__, __LINE__, now);
leaks++;
}
}
@@ -3435,7 +3525,7 @@ _eo_classes_iterator_free(Eina_Iterator *it)
free(it);
}
-EAPI Eina_Iterator *
+EO_API Eina_Iterator *
eo_classes_iterator_new(void)
{
_Eo_Classes_Iterator *it;
@@ -3512,7 +3602,7 @@ _eo_objects_iterator_free(Eina_Iterator *it)
free(it);
}
-EAPI Eina_Iterator *
+EO_API Eina_Iterator *
eo_objects_iterator_new(void)
{
_Eo_Objects_Iterator *it;
@@ -3627,7 +3717,7 @@ static const Eina_Value_Type _EINA_VALUE_TYPE_OBJECT = {
.pget = _eo_value_pget
};
-EOAPI const Eina_Value_Type *EINA_VALUE_TYPE_OBJECT = &_EINA_VALUE_TYPE_OBJECT;
+EO_API const Eina_Value_Type *EINA_VALUE_TYPE_OBJECT = &_EINA_VALUE_TYPE_OBJECT;
static const Efl_Object_Property_Reflection*
_efl_class_reflection_find(const _Efl_Class *klass, const char *property_name)
@@ -3661,7 +3751,7 @@ _efl_class_reflection_find(const _Efl_Class *klass, const char *property_name)
return NULL;
}
-EAPI Eina_Error
+EO_API Eina_Error
efl_property_reflection_set(Eo *obj_id, const char *property_name, Eina_Value value)
{
Eina_Error r = EINA_ERROR_NOT_IMPLEMENTED;
@@ -3682,7 +3772,7 @@ efl_property_reflection_set(Eo *obj_id, const char *property_name, Eina_Value va
return r;
}
-EAPI Eina_Value
+EO_API Eina_Value
efl_property_reflection_get(const Eo *obj_id, const char *property_name)
{
Eina_Value r = eina_value_error_init(EINA_ERROR_NOT_IMPLEMENTED);
@@ -3699,7 +3789,7 @@ efl_property_reflection_get(const Eo *obj_id, const char *property_name)
return r;
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_property_reflection_exist(Eo *obj_id, const char *property_name)
{
Eina_Bool r = EINA_FALSE;
@@ -3712,7 +3802,7 @@ efl_property_reflection_exist(Eo *obj_id, const char *property_name)
return r;
}
-EAPI Efl_Class_Type
+EO_API Efl_Class_Type
efl_class_type_get(const Efl_Class *klass_id)
{
EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, EFL_CLASS_TYPE_INVALID);
@@ -3721,7 +3811,7 @@ efl_class_type_get(const Efl_Class *klass_id)
}
-EAPI Eina_Bool
+EO_API Eina_Bool
efl_ownable_get(const Eo *obj)
{
int ref = efl_ref_count(obj);
diff --git a/src/lib/eo/eo_add_fallback.c b/src/lib/eo/eo_add_fallback.c
index f3a82f25d6..f349b336b4 100644
--- a/src/lib/eo/eo_add_fallback.c
+++ b/src/lib/eo/eo_add_fallback.c
@@ -130,7 +130,7 @@ _eo_call_stack_get_thread(void)
return stack;
}
-EAPI Eo *
+EO_API Eo *
_efl_added_get(void)
{
return _EFL_OBJECT_CALL_STACK_GET()->frame_ptr->obj;
diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c
index 9fd4d2b08b..546b5d3999 100644
--- a/src/lib/eo/eo_base_class.c
+++ b/src/lib/eo/eo_base_class.c
@@ -13,10 +13,10 @@
#include "eo_private.h"
#include "eina_promise_private.h"
-EAPI const Efl_Event_Description _EFL_EVENT_CALLBACK_ADD =
+EO_API const Efl_Event_Description _EFL_EVENT_CALLBACK_ADD =
EFL_EVENT_DESCRIPTION_HOT("callback,add");
-EAPI const Efl_Event_Description _EFL_EVENT_CALLBACK_DEL =
+EO_API const Efl_Event_Description _EFL_EVENT_CALLBACK_DEL =
EFL_EVENT_DESCRIPTION_HOT("callback,del");
static int event_freeze_count = 0;
@@ -38,6 +38,7 @@ struct _Efl_Event_Forwarder
struct _Efl_Event_Callback_Frame
{
+ const Efl_Event_Description *desc;
Efl_Event_Callback_Frame *next;
unsigned int idx;
unsigned int inserted_before;
@@ -65,8 +66,6 @@ struct _Efl_Object_Data
Efl_Object_Extension *ext;
- Eina_Inlist *current;
-
Efl_Event_Callback_Frame *event_frame;
Eo_Callback_Description **callbacks;
#ifdef EFL64
@@ -238,9 +237,9 @@ _efl_invalidate(_Eo_Object *obj)
id = _eo_obj_id_get(obj);
- efl_event_callback_call(id, EFL_EVENT_INVALIDATE, NULL);
-
pd = efl_data_scope_get(id, EFL_OBJECT_CLASS);
+ if (pd->event_cb_EFL_EVENT_INVALIDATE)
+ efl_event_callback_call(id, EFL_EVENT_INVALIDATE, NULL);
efl_invalidate(id);
@@ -363,6 +362,8 @@ _key_generic_set(const Eo *obj, Efl_Object_Data *pd, const char *key, const void
}
}
}
+ else
+ if (!data) return NULL;
ext = _efl_object_extension_need(pd);
if (ext)
@@ -415,7 +416,7 @@ _key_generic_cb_del(void *data, const Efl_Event *event EINA_UNUSED)
{
Eo_Generic_Data_Node *node = data;
Efl_Object_Data *pd = efl_data_scope_get(node->obj, EFL_OBJECT_CLASS);
- _eo_key_generic_direct_del(pd, node, EINA_FALSE);
+ _eo_key_generic_direct_del(pd, node, EINA_TRUE);
}
EOLIAN static void
@@ -424,7 +425,7 @@ _efl_object_key_data_set(Eo *obj, Efl_Object_Data *pd, const char *key, const vo
_key_generic_set(obj, pd, key, data, DATA_PTR, EINA_TRUE);
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_key_data_set, EFL_FUNC_CALL(key, data),
+EO_API EFL_VOID_FUNC_BODYV(efl_key_data_set, EFL_FUNC_CALL(key, data),
const char *key, const void *data);
EOLIAN static void *
@@ -433,7 +434,7 @@ _efl_object_key_data_get(Eo *obj, Efl_Object_Data *pd, const char *key)
return _key_generic_get(obj, pd, key, DATA_PTR);
}
-EOAPI EFL_FUNC_BODYV_CONST(efl_key_data_get, void *, NULL, EFL_FUNC_CALL(key),
+EO_API EFL_FUNC_BODYV_CONST(efl_key_data_get, void *, NULL, EFL_FUNC_CALL(key),
const char *key);
EOLIAN static void
@@ -450,7 +451,7 @@ _efl_object_key_ref_set(Eo *obj EINA_UNUSED, Efl_Object_Data *pd, const char *ke
}
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_key_ref_set, EFL_FUNC_CALL(key, objdata),
+EO_API EFL_VOID_FUNC_BODYV(efl_key_ref_set, EFL_FUNC_CALL(key, objdata),
const char *key, const Efl_Object *objdata);
EOLIAN static Eo *
@@ -459,7 +460,7 @@ _efl_object_key_ref_get(Eo *obj, Efl_Object_Data *pd, const char *key)
return _key_generic_get(obj, pd, key, DATA_OBJ);
}
-EOAPI EFL_FUNC_BODYV_CONST(efl_key_ref_get, Efl_Object *, NULL,
+EO_API EFL_FUNC_BODYV_CONST(efl_key_ref_get, Efl_Object *, NULL,
EFL_FUNC_CALL(key), const char *key);
EOLIAN static void
@@ -475,7 +476,7 @@ _efl_object_key_wref_set(Eo *obj, Efl_Object_Data *pd, const char * key, const E
}
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_key_wref_set, EFL_FUNC_CALL(key, objdata),
+EO_API EFL_VOID_FUNC_BODYV(efl_key_wref_set, EFL_FUNC_CALL(key, objdata),
const char *key, const Efl_Object *objdata);
EOLIAN static Eo *
@@ -484,7 +485,7 @@ _efl_object_key_wref_get(Eo *obj, Efl_Object_Data *pd, const char * key)
return _key_generic_get(obj, pd, key, DATA_OBJ_WEAK);
}
-EOAPI EFL_FUNC_BODYV_CONST(efl_key_wref_get, Efl_Object *, NULL,
+EO_API EFL_FUNC_BODYV_CONST(efl_key_wref_get, Efl_Object *, NULL,
EFL_FUNC_CALL(key), const char *key);
EOLIAN static void
@@ -493,7 +494,7 @@ _efl_object_key_value_set(Eo *obj EINA_UNUSED, Efl_Object_Data *pd, const char *
_key_generic_set(obj, pd, key, value, DATA_VAL, EINA_TRUE);
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_key_value_set, EFL_FUNC_CALL(key, value),
+EO_API EFL_VOID_FUNC_BODYV(efl_key_value_set, EFL_FUNC_CALL(key, value),
const char *key, Eina_Value *value);
EOLIAN static Eina_Value *
@@ -502,7 +503,7 @@ _efl_object_key_value_get(Eo *obj, Efl_Object_Data *pd, const char *key)
return _key_generic_get(obj, pd, key, DATA_VAL);
}
-EOAPI EFL_FUNC_BODYV_CONST(efl_key_value_get, Eina_Value *, NULL,
+EO_API EFL_FUNC_BODYV_CONST(efl_key_value_get, Eina_Value *, NULL,
EFL_FUNC_CALL(key), const char *key);
EOLIAN static void
@@ -718,7 +719,7 @@ _efl_object_debug_name_override(Eo *obj_id EINA_UNUSED, Efl_Object_Data *pd EINA
{
}
-EAPI void
+EO_API void
efl_del(const Eo *obj)
{
if (!obj) return ;
@@ -1034,7 +1035,7 @@ _efl_object_dbg_info_get(Eo *obj EINA_UNUSED, Efl_Object_Data *pd EINA_UNUSED, E
return;
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_dbg_info_get, EFL_FUNC_CALL(root_node), Efl_Dbg_Info *root_node);
+EO_API EFL_VOID_FUNC_BODYV(efl_dbg_info_get, EFL_FUNC_CALL(root_node), Efl_Dbg_Info *root_node);
/* Weak reference. */
@@ -1075,7 +1076,7 @@ _efl_object_wref_add(Eo *obj, Efl_Object_Data *pd, Eo **wref)
}
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_wref_add, EFL_FUNC_CALL(wref), Efl_Object **wref);
+EO_API EFL_VOID_FUNC_BODYV(efl_wref_add, EFL_FUNC_CALL(wref), Efl_Object **wref);
EOLIAN static void
_efl_object_wref_del(Eo *obj, Efl_Object_Data *pd, Eo **wref)
@@ -1141,7 +1142,7 @@ err_wref_not_obj:
return;
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_wref_del, EFL_FUNC_CALL(wref), Efl_Object **wref);
+EO_API EFL_VOID_FUNC_BODYV(efl_wref_del, EFL_FUNC_CALL(wref), Efl_Object **wref);
static inline void
_wref_destruct(Efl_Object_Data *pd)
@@ -1164,7 +1165,7 @@ _wref_destruct(Efl_Object_Data *pd)
/* XXX: Legacy support, remove when legacy is dead. */
static Eina_Hash *_legacy_events_hash = NULL;
-EAPI const Efl_Event_Description *
+EO_API const Efl_Event_Description *
efl_object_legacy_only_event_description_get(const char *_event_name)
{
Eina_Stringshare *event_name = eina_stringshare_add(_event_name);
@@ -1576,7 +1577,8 @@ _efl_object_event_callback_priority_add(Eo *obj, Efl_Object_Data *pd,
_eo_callbacks_sorted_insert(pd, cb);
_special_event_count_inc(obj, pd, &(cb->items.item));
- efl_event_callback_call(obj, EFL_EVENT_CALLBACK_ADD, (void *)arr);
+ if (pd->event_cb_EFL_EVENT_CALLBACK_ADD)
+ efl_event_callback_call(obj, EFL_EVENT_CALLBACK_ADD, (void *)arr);
return EINA_TRUE;
@@ -1586,7 +1588,7 @@ err: EINA_COLD
return EINA_FALSE;
}
-EOAPI EFL_FUNC_BODYV(efl_event_callback_priority_add,
+EO_API EFL_FUNC_BODYV(efl_event_callback_priority_add,
Eina_Bool, 0, EFL_FUNC_CALL(desc, priority, cb, data),
const Efl_Event_Description *desc,
Efl_Callback_Priority priority,
@@ -1602,8 +1604,8 @@ _efl_object_event_callback_clean(Eo *obj, Efl_Object_Data *pd,
pd->need_cleaning = EINA_TRUE;
else
_eo_callback_remove(obj, pd, cb);
-
- efl_event_callback_call(obj, EFL_EVENT_CALLBACK_DEL, (void *)array);
+ if (pd->event_cb_EFL_EVENT_CALLBACK_DEL)
+ efl_event_callback_call(obj, EFL_EVENT_CALLBACK_DEL, (void *)array);
}
EOLIAN static Eina_Bool
@@ -1636,7 +1638,7 @@ _efl_object_event_callback_del(Eo *obj, Efl_Object_Data *pd,
return EINA_FALSE;
}
-EOAPI EFL_FUNC_BODYV(efl_event_callback_del,
+EO_API EFL_FUNC_BODYV(efl_event_callback_del,
Eina_Bool, 0, EFL_FUNC_CALL(desc, func, user_data),
const Efl_Event_Description *desc,
Efl_Event_Cb func, const void *user_data);
@@ -1730,7 +1732,8 @@ _efl_object_event_callback_array_priority_add(Eo *obj, Efl_Object_Data *pd,
ev_array[i].priority = 0;
ev_array[i].func = NULL;
ev_array[i].user_data = NULL;
- efl_event_callback_call(obj, EFL_EVENT_CALLBACK_ADD, ev_array);
+ if (pd->event_cb_EFL_EVENT_CALLBACK_ADD)
+ efl_event_callback_call(obj, EFL_EVENT_CALLBACK_ADD, ev_array);
return EINA_TRUE;
@@ -1740,7 +1743,7 @@ err:
return EINA_FALSE;
}
-EOAPI EFL_FUNC_BODYV(efl_event_callback_array_priority_add,
+EO_API EFL_FUNC_BODYV(efl_event_callback_array_priority_add,
Eina_Bool, 0, EFL_FUNC_CALL(array, priority, data),
const Efl_Callback_Array_Item *array,
Efl_Callback_Priority priority, const void *data);
@@ -1788,7 +1791,7 @@ _efl_object_event_callback_array_del(Eo *obj, Efl_Object_Data *pd,
return EINA_FALSE;
}
-EOAPI EFL_FUNC_BODYV(efl_event_callback_array_del,
+EO_API EFL_FUNC_BODYV(efl_event_callback_array_del,
Eina_Bool, 0, EFL_FUNC_CALL(array, user_data),
const Efl_Callback_Array_Item *array,
const void *user_data);
@@ -1939,6 +1942,7 @@ _efl_object_event_future_scheduler_get(const Eo *obj, Efl_Object_Data *pd, Efl_C
if (!array) return NULL;
ext = _efl_object_extension_need(pd);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ext, NULL);
// First lookup for an existing scheduler that match the provided array
if (!ext->schedulers) ext->schedulers = eina_hash_pointer_new(_futures_cancel_cb);
@@ -1971,11 +1975,11 @@ _efl_object_event_future_scheduler_get(const Eo *obj, Efl_Object_Data *pd, Efl_C
return &sched->scheduler;
}
-EOAPI EFL_FUNC_BODYV_CONST(efl_event_future_scheduler_get,
+EO_API EFL_FUNC_BODYV_CONST(efl_event_future_scheduler_get,
Eina_Future_Scheduler *, 0, EFL_FUNC_CALL(array),
Efl_Callback_Array_Item *array);
-EOAPI unsigned int
+EO_API unsigned int
_efl_object_event_callback_count(const Eo *obj EINA_UNUSED,
Efl_Object_Data *pd,
const Efl_Event_Description *desc)
@@ -2007,7 +2011,7 @@ _efl_object_event_callback_count(const Eo *obj EINA_UNUSED,
return r;
}
-EOAPI EFL_FUNC_BODYV_CONST(efl_event_callback_count,
+EO_API EFL_FUNC_BODYV_CONST(efl_event_callback_count,
unsigned int, 0, EFL_FUNC_CALL(desc),
const Efl_Event_Description *desc);
@@ -2034,11 +2038,12 @@ _event_callback_call(Eo *obj_id, Efl_Object_Data *pd,
Eina_Bool legacy_compare)
{
Eo_Callback_Description **cb;
- Eo_Current_Callback_Description *lookup, saved;
+ Efl_Event_Callback_Frame *restart_lookup = NULL; //a pointer to a frame, which is high up the stack, which we use to restore
Efl_Event ev;
unsigned int idx;
Eina_Bool callback_already_stopped, ret;
Efl_Event_Callback_Frame frame = {
+ .desc = desc,
.next = NULL,
.idx = 0,
.inserted_before = 0,
@@ -2068,7 +2073,6 @@ _event_callback_call(Eo *obj_id, Efl_Object_Data *pd,
EVENT_STACK_PUSH(pd, &frame);
- lookup = NULL;
callback_already_stopped = pd->callback_stopped;
pd->callback_stopped = EINA_FALSE;
ret = EINA_TRUE;
@@ -2108,9 +2112,6 @@ restart_back:
(event_freeze_count || pd->event_freeze_count))
continue;
- // Handle nested restart of walking list
- if (lookup) lookup->current = idx - 1;
-
it->func((void *) (*cb)->func_data, &ev);
/* Abort callback calling if the func says so. */
if (pd->callback_stopped)
@@ -2118,10 +2119,6 @@ restart_back:
ret = EINA_FALSE;
goto end;
}
- // We have actually walked this list during a nested call
- if (lookup &&
- lookup->current == 0)
- goto end;
}
}
else
@@ -2132,9 +2129,6 @@ restart_back:
(event_freeze_count || pd->event_freeze_count))
continue;
- // Handle nested restart of walking list
- if (lookup) lookup->current = idx - 1;
-
(*cb)->items.item.func((void *) (*cb)->func_data, &ev);
/* Abort callback calling if the func says so. */
if (pd->callback_stopped)
@@ -2142,23 +2136,21 @@ restart_back:
ret = EINA_FALSE;
goto end;
}
- // We have actually walked this list during a nested call
- if (lookup &&
- lookup->current == 0)
- goto end;
}
}
- idx += frame.inserted_before;
+ /*
+ * copy back the idx that might have changed due to restarts, (theoretically only needed with restarts, condition made everything slower)
+ * additionally adjust to event subscriptions that have been added in a event callback
+ */
+ idx = frame.idx + frame.inserted_before;
frame.inserted_before = 0;
}
end:
// Handling restarting list walking complete exit.
- if (lookup) lookup->current = 0;
- if (lookup == &saved)
- {
- pd->current = eina_inlist_remove(pd->current, EINA_INLIST_GET(lookup));
- }
+ // This must be 1, we copy back the frame idx at the end of the for loop.
+ // The next iteration then decrements the idx by 1 which results in the effective running idx of that frame beeing 0
+ if (restart_lookup) restart_lookup->idx = 1;
EVENT_STACK_POP(pd);
@@ -2168,26 +2160,22 @@ end:
return ret;
restart:
- EINA_INLIST_FOREACH(pd->current, lookup)
+ // Search for the next frame that has the same event description
+ for (restart_lookup = frame.next; restart_lookup; restart_lookup = restart_lookup->next)
{
- if (lookup->desc == desc) break;
+ if (restart_lookup->desc == desc) break;
}
- // This is the first event to trigger it, so register it here
- if (!lookup)
- {
- // This following trick get us a zero allocation list
- saved.desc = desc;
- saved.current = 0;
- lookup = &saved;
- // Ideally there will most of the time be only one item in this list
- // But just to speed up things, prepend so we find it fast at the end
- // of this function
- pd->current = eina_inlist_prepend(pd->current, EINA_INLIST_GET(lookup));
- }
+ // Ensure that the idx is the next from the previous run, minimum number 0
+ if (restart_lookup) {
+ idx = restart_lookup->idx - 1;
+ } else {
+ idx = 0;
+ }
+ // If this is 0, then we are restarting
+ if (!idx)
+ idx = pd->callbacks_count;
- if (!lookup->current) lookup->current = pd->callbacks_count;
- idx = lookup->current;
goto restart_back;
}
@@ -2199,7 +2187,7 @@ _efl_object_event_callback_call(Eo *obj_id, Efl_Object_Data *pd,
return _event_callback_call(obj_id, pd, desc, event_info, EINA_FALSE);
}
-EOAPI EFL_FUNC_BODYV(efl_event_callback_call,
+EO_API EFL_FUNC_BODYV(efl_event_callback_call,
Eina_Bool, 0, EFL_FUNC_CALL(desc, event_info),
const Efl_Event_Description *desc, void *event_info);
@@ -2211,7 +2199,7 @@ _efl_object_event_callback_legacy_call(Eo *obj_id, Efl_Object_Data *pd,
return _event_callback_call(obj_id, pd, desc, event_info, EINA_TRUE);
}
-EOAPI EFL_FUNC_BODYV(efl_event_callback_legacy_call,
+EO_API EFL_FUNC_BODYV(efl_event_callback_legacy_call,
Eina_Bool, 0, EFL_FUNC_CALL(desc, event_info),
const Efl_Event_Description *desc, void *event_info);
@@ -2324,7 +2312,7 @@ _efl_object_event_callback_forwarder_del(Eo *obj, Efl_Object_Data *pd EINA_UNUSE
dpd = efl_data_scope_safe_get(new_obj, EFL_OBJECT_CLASS);
if (!dpd) return ;
- ext = _efl_object_extension_need(dpd);
+ ext = dpd->ext;
if (!ext) return ;
EINA_LIST_FOREACH(eina_hash_find(ext->forwarders, desc), l, forwarder)
@@ -2485,7 +2473,7 @@ _efl_object_composite_part_is(Eo *comp_obj_id EINA_UNUSED, Efl_Object_Data *pd)
}
/* Eo_Dbg */
-EAPI void
+EO_API void
efl_dbg_info_free(Efl_Dbg_Info *info)
{
eina_value_flush(&(info->value));
@@ -2575,7 +2563,7 @@ static const Eina_Value_Type _EFL_DBG_INFO_TYPE = {
_eo_dbg_info_pget
};
-EAPI const Eina_Value_Type *EFL_DBG_INFO_TYPE = &_EFL_DBG_INFO_TYPE;
+EO_API const Eina_Value_Type *EFL_DBG_INFO_TYPE = &_EFL_DBG_INFO_TYPE;
/* EOF event callbacks */
@@ -2611,7 +2599,7 @@ _efl_future_cb(void *data, const Eina_Value value, const Eina_Future *dead_futur
return ret;
}
-EOAPI Eina_Future_Desc
+EO_API Eina_Future_Desc
efl_future_cb_from_desc(const Eo *o, const Efl_Future_Cb_Desc desc)
{
Efl_Future_Pending *pending = NULL;
@@ -2639,7 +2627,7 @@ efl_future_cb_from_desc(const Eo *o, const Efl_Future_Cb_Desc desc)
return (Eina_Future_Desc){ .cb = _efl_future_cb, .data = pending, .storage = storage };
}
-EOAPI Eina_Future *
+EO_API Eina_Future *
efl_future_chain_array(Eo *obj,
Eina_Future *prev,
const Efl_Future_Cb_Desc descs[])
@@ -2797,7 +2785,7 @@ _efl_object_allow_parent_unref_get(const Eo *obj_id EINA_UNUSED, Efl_Object_Data
return pd->allow_parent_unref;
}
-EAPI void
+EO_API void
___efl_auto_unref_set(Eo *obj_id, Eina_Bool enable)
{
// Write-only property
diff --git a/src/lib/eo/eo_internal.h b/src/lib/eo/eo_internal.h
index 9e2980914a..bbbc502eb4 100644
--- a/src/lib/eo/eo_internal.h
+++ b/src/lib/eo/eo_internal.h
@@ -1,31 +1,7 @@
#ifndef _EO_INTERNAL_H_
#define _EO_INTERNAL_H_
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <Eo.h>
typedef unsigned char Eina_Bool;
typedef struct _Eo_Opaque Eo;
@@ -37,12 +13,12 @@ typedef struct _Efl_Event_Description Efl_Event_Description;
* anything about them.
* @internal
*/
-EAPI const Efl_Event_Description *efl_object_legacy_only_event_description_get(const char *_event_name);
+EO_API const Efl_Event_Description *efl_object_legacy_only_event_description_get(const char *_event_name);
-EAPI void ___efl_auto_unref_set(Eo *obj_id, Eina_Bool enable);
+EO_API void ___efl_auto_unref_set(Eo *obj_id, Eina_Bool enable);
-EAPI int ___efl_ref2_count(const Eo *obj_id);
-EAPI void ___efl_ref2_reset(const Eo *obj_id);
+EO_API int ___efl_ref2_count(const Eo *obj_id);
+EO_API void ___efl_ref2_reset(const Eo *obj_id);
#define EFL_CLASS_SIMPLE_CLASS(FUNC, NAME, ABSTRACT_CLASS) \
static const Efl_Class_Description FUNC ##_realized_class_desc = { \
@@ -53,7 +29,4 @@ static const Efl_Class_Description FUNC ##_realized_class_desc = { \
}; \
EFL_DEFINE_CLASS(FUNC ##_realized_class_get, &FUNC ##_realized_class_desc, ABSTRACT_CLASS, NULL)
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/eo/eo_private.h b/src/lib/eo/eo_private.h
index c64dee5f5e..c719cb4c54 100644
--- a/src/lib/eo/eo_private.h
+++ b/src/lib/eo/eo_private.h
@@ -70,17 +70,14 @@ static inline void _eo_id_release(const Eo_Id obj_id);
void _eo_condtor_done(Eo *obj);
-typedef struct _Dich_Chain1 Dich_Chain1;
+typedef struct _Eo_Vtable_Node Eo_Vtable_Node;
typedef struct _Eo_Vtable
{
- Dich_Chain1 *chain;
- unsigned int size;
+ Eo_Vtable_Node *chain;
+ unsigned short size;
} Eo_Vtable;
-/* Clean the vtable. */
-void _vtable_func_clean_all(Eo_Vtable *vtable);
-
struct _Eo_Header
{
Eo_Id id;
@@ -88,7 +85,7 @@ struct _Eo_Header
struct _Efl_Object_Optional
{
- Eo_Vtable *vtable;
+ Eo_Vtable *vtable;
Eina_List *composite_objects;
Efl_Del_Intercept del_intercept;
};
@@ -129,12 +126,6 @@ struct _Eo_Object
Eina_Bool ownership_track:1;
};
-/* How we search and store the implementations in classes. */
-#define DICH_CHAIN_LAST_BITS 5
-#define DICH_CHAIN_LAST_SIZE (1 << DICH_CHAIN_LAST_BITS)
-#define DICH_CHAIN1(x) ((x) >> DICH_CHAIN_LAST_BITS)
-#define DICH_CHAIN_LAST(x) ((x) & ((1 << DICH_CHAIN_LAST_BITS) - 1))
-
extern Eina_Cow *efl_object_optional_cow;
#define EO_OPTIONAL_COW_WRITE(_obj) ({ Efl_Object_Optional *_cow = eina_cow_write(efl_object_optional_cow, (const Eina_Cow_Data**)&(_obj->opt)); _cow; })
#define EO_OPTIONAL_COW_END(_cow, _obj) eina_cow_done(efl_object_optional_cow, (const Eina_Cow_Data**)&(_obj->opt), _cow, EINA_TRUE)
@@ -146,6 +137,7 @@ extern Eina_Cow *efl_object_optional_cow;
EO_OPTIONAL_COW_END(_obj##_cow, _obj); \
}} while (0)
#define EO_VTABLE(_obj) ((_obj)->opt->vtable ?: &((_obj)->klass->vtable))
+#define EO_VTABLE2(_obj) ((_obj)->opt->vtable ?: &((_obj)->klass->vtable))
typedef void (*Eo_Op_Func_Type)(Eo *, void *class_data);
@@ -155,15 +147,9 @@ typedef struct
const _Efl_Class *src;
} op_type_funcs;
-typedef struct _Dich_Chain2
-{
- op_type_funcs funcs[DICH_CHAIN_LAST_SIZE];
- unsigned short refcount;
-} Dich_Chain2;
-
-struct _Dich_Chain1
-{
- Dich_Chain2 *chain2;
+struct _Eo_Vtable_Node{
+ op_type_funcs *funcs;
+ unsigned short count;
};
typedef struct
@@ -203,7 +189,7 @@ struct _Efl_Class
} iterators;
unsigned int obj_size; /**< size of an object of this class */
- unsigned int base_id;
+ unsigned int class_id; /**< the id which can be used to find the slot in _eo_classes and vtables chains */
unsigned int data_offset; /* < Offset of the data within object data. */
unsigned int ops_count; /* < Offset of the data within object data. */
@@ -337,7 +323,7 @@ _efl_ref(_Eo_Object *obj)
return obj;
}
-#define _efl_unref(obj) _efl_unref_internal(obj, __FUNCTION__, __FILE__, __LINE__)
+#define _efl_unref(obj) _efl_unref_internal(obj, __func__, __FILE__, __LINE__)
static inline void
_efl_unref_internal(_Eo_Object *obj, const char *func_name, const char *file, int line)
{
@@ -347,27 +333,27 @@ _efl_unref_internal(_Eo_Object *obj, const char *func_name, const char *file, in
if (obj->user_refcount > 0)
{
ERR("Object %p is still refcounted %i by users, but internal refcount reached 0. This should never happen. Please report a bug and send a backtrace to EFL developer.", (Eo*) obj->header.id, obj->user_refcount);
- _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __FUNCTION__, __FILE__, __LINE__);
+ _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __func__, __FILE__, __LINE__);
return;
}
if (obj->refcount < 0)
{
ERR("in %s:%d: func '%s' Obj:%p. Refcount (%d) < 0. Too many unrefs.", file, line, func_name, obj, obj->refcount);
- _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __FUNCTION__, __FILE__, __LINE__);
+ _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __func__, __FILE__, __LINE__);
return;
}
if (obj->destructed)
{
ERR("in %s:%d: func '%s' Object %p already destructed.", file, line, func_name, _eo_obj_id_get(obj));
- _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __FUNCTION__, __FILE__, __LINE__);
+ _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __func__, __FILE__, __LINE__);
return;
}
if (obj->del_triggered)
{
ERR("in %s:%d: func '%s' Object %p deletion already triggered. You wrongly call efl_unref() within a destructor.", file, line, func_name, _eo_obj_id_get(obj));
- _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __FUNCTION__, __FILE__, __LINE__);
+ _eo_log_obj_report((Eo_Id)_eo_obj_id_get(obj), EINA_LOG_LEVEL_ERR, __func__, __FILE__, __LINE__);
return;
}
diff --git a/src/lib/eo/eo_ptr_indirection.c b/src/lib/eo/eo_ptr_indirection.c
index 01db8a289a..cd578a5a2a 100644
--- a/src/lib/eo/eo_ptr_indirection.c
+++ b/src/lib/eo/eo_ptr_indirection.c
@@ -104,8 +104,9 @@ _eo_obj_pointer_get(const Eo_Id obj_id, const char *func_name, const char *file,
return tdata->cache.object;
mid_table_id = (obj_id >> SHIFT_MID_TABLE_ID) & MASK_MID_TABLE_ID;
- EINA_PREFETCH(&(tdata->eo_ids_tables[mid_table_id]));
+ EINA_PREFETCH_NOCACHE(&(tdata->eo_ids_tables[mid_table_id])); //prefetch for line 119
table_id = (obj_id >> SHIFT_TABLE_ID) & MASK_TABLE_ID;
+ EINA_PREFETCH_NOCACHE((tdata->eo_ids_tables[mid_table_id] + table_id)); //prefetch for line 121
entry_id = (obj_id >> SHIFT_ENTRY_ID) & MASK_ENTRY_ID;
generation = obj_id & MASK_GENERATIONS;
@@ -118,7 +119,7 @@ _eo_obj_pointer_get(const Eo_Id obj_id, const char *func_name, const char *file,
if (tdata->eo_ids_tables[mid_table_id])
{
_Eo_Ids_Table *tab = TABLE_FROM_IDS;
-
+ EINA_PREFETCH_NOCACHE(tab); //prefetch for line 125
if (tab)
{
entry = &(tab->entries[entry_id]);
@@ -137,14 +138,15 @@ _eo_obj_pointer_get(const Eo_Id obj_id, const char *func_name, const char *file,
{
eina_lock_take(&(_eo_table_data_shared_data->obj_lock));
if (obj_id == tdata->cache.id)
- // yes we return keeping the lock locked. thats why
+ // yes we return keeping the lock locked. that's why
// you must call _eo_obj_pointer_done() wrapped
// by EO_OBJ_DONE() to release
return tdata->cache.object;
mid_table_id = (obj_id >> SHIFT_MID_TABLE_ID) & MASK_MID_TABLE_ID;
- EINA_PREFETCH(&(tdata->eo_ids_tables[mid_table_id]));
+ EINA_PREFETCH_NOCACHE(&(tdata->eo_ids_tables[mid_table_id]));
table_id = (obj_id >> SHIFT_TABLE_ID) & MASK_TABLE_ID;
+ EINA_PREFETCH_NOCACHE((tdata->eo_ids_tables[mid_table_id] + table_id));
entry_id = (obj_id >> SHIFT_ENTRY_ID) & MASK_ENTRY_ID;
generation = obj_id & MASK_GENERATIONS;
@@ -157,6 +159,7 @@ _eo_obj_pointer_get(const Eo_Id obj_id, const char *func_name, const char *file,
if (tdata->eo_ids_tables[mid_table_id])
{
_Eo_Ids_Table *tab = TABLE_FROM_IDS;
+ EINA_PREFETCH_NOCACHE(tab);
if (tab)
{
@@ -166,7 +169,7 @@ _eo_obj_pointer_get(const Eo_Id obj_id, const char *func_name, const char *file,
// Cache the result of that lookup
tdata->cache.object = entry->ptr;
tdata->cache.id = obj_id;
- // yes we return keeping the lock locked. thats why
+ // yes we return keeping the lock locked. that's why
// you must call _eo_obj_pointer_done() wrapped
// by EO_OBJ_DONE() to release
return entry->ptr;
diff --git a/src/lib/eo/eo_ptr_indirection.h b/src/lib/eo/eo_ptr_indirection.h
index 33dc709d42..cb811404bc 100644
--- a/src/lib/eo/eo_ptr_indirection.h
+++ b/src/lib/eo/eo_ptr_indirection.h
@@ -9,12 +9,12 @@
void _eo_pointer_error(const Eo *obj_id, const char *func_name, const char *file, int line, const char *fmt, ...);
#define _EO_POINTER_ERR(obj_id, fmt, ...) \
- _eo_pointer_error(obj_id, __FUNCTION__, __FILE__, __LINE__, fmt, __VA_ARGS__)
+ _eo_pointer_error(obj_id, __func__, __FILE__, __LINE__, fmt, __VA_ARGS__)
#define EO_OBJ_POINTER(obj_id, obj) \
_Eo_Object *obj; \
do { \
- obj = _eo_obj_pointer_get((Eo_Id)obj_id, __FUNCTION__, __FILE__, __LINE__); \
+ obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \
} while (0)
#define EO_OBJ_POINTER_PROXY(obj_id, obj) \
@@ -26,7 +26,7 @@ void _eo_pointer_error(const Eo *obj_id, const char *func_name, const char *file
#define EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, ret) \
_Eo_Object *obj; \
do { \
- obj = _eo_obj_pointer_get((Eo_Id)obj_id, __FUNCTION__, __FILE__, __LINE__); \
+ obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \
if (!obj) return (ret); \
} while (0)
@@ -41,7 +41,7 @@ void _eo_pointer_error(const Eo *obj_id, const char *func_name, const char *file
#define EO_OBJ_POINTER_RETURN(obj_id, obj) \
_Eo_Object *obj; \
do { \
- obj = _eo_obj_pointer_get((Eo_Id)obj_id, __FUNCTION__, __FILE__, __LINE__); \
+ obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \
if (!obj) return; \
} while (0)
@@ -55,7 +55,7 @@ void _eo_pointer_error(const Eo *obj_id, const char *func_name, const char *file
#define EO_OBJ_POINTER_GOTO(obj_id, obj, label) \
_Eo_Object *obj; \
do { \
- obj = _eo_obj_pointer_get((Eo_Id)obj_id, __FUNCTION__, __FILE__, __LINE__); \
+ obj = _eo_obj_pointer_get((Eo_Id)obj_id, __func__, __FILE__, __LINE__); \
if (!obj) goto label; \
} while (0)
diff --git a/src/lib/eo/eo_ptr_indirection.x b/src/lib/eo/eo_ptr_indirection.x
index 2b3fa5a467..f0f34e0bc6 100644
--- a/src/lib/eo/eo_ptr_indirection.x
+++ b/src/lib/eo/eo_ptr_indirection.x
@@ -247,7 +247,12 @@ _eo_id_mem_protect(void *ptr, Eina_Bool may_not_write)
# define UNPROTECT(_ptr_)
#endif
-#define EO_ALIGN_SIZE(size) eina_mempool_alignof(size)
+#if __WORDSIZE == 32
+# define EO_ALIGN 16
+#else // __WORDSIZE == 64
+# define EO_ALIGN 8
+#endif
+#define EO_ALIGN_SIZE(size) (((size + EO_ALIGN - 1) / EO_ALIGN) * EO_ALIGN)
/* Entry */
typedef struct
diff --git a/src/lib/eo/meson.build b/src/lib/eo/meson.build
index abc563ff60..61027926b3 100644
--- a/src/lib/eo/meson.build
+++ b/src/lib/eo/meson.build
@@ -1,5 +1,6 @@
eo_deps = []
eo_pub_deps = [eina]
+eo_ext_deps = [valgrind, dl, execinfo]
pub_eo_files = [
'efl_object.eo',
@@ -7,7 +8,7 @@ pub_eo_files = [
'efl_object_override.eo'
]
-eo_src = [
+eo_src = files([
'eo.c',
'eo_ptr_indirection.c',
'eo_ptr_indirection.h',
@@ -17,16 +18,32 @@ eo_src = [
'eo_add_fallback.h',
'eo_private.h',
'eo_internal.h'
-]
+])
pub_eo_types_files = [
'eina_types.eot'
]
-eo_header = ['Eo.h']
-
pub_eo_file_target = []
priv_eo_file_target = []
+
+foreach eo_file : pub_eo_types_files
+ pub_eo_file_target += custom_target('eolian_gen_' + eo_file,
+ input : eo_file,
+ output : [eo_file + '.h'],
+ depfile : eo_file + '.d',
+ install : true,
+ install_dir : dir_package_include,
+ command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
+ '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
+ '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
+ '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EO_API',
+ '-gchd', '@INPUT@'])
+endforeach
+
+eo_header = ['Eo.h']
+
foreach eo_file : pub_eo_files
pub_eo_file_target += custom_target('eolian_gen_' + eo_file,
input : eo_file,
@@ -38,6 +55,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EO_API',
'-gchd', '@INPUT@'])
endforeach
@@ -45,16 +63,17 @@ eolian_include_directories += ['-I', meson.current_source_dir()]
eo_lib = library('eo',
eo_src, pub_eo_file_target,
- dependencies: [eina, valgrind, dl, execinfo],
+ c_args : [package_c_args, '-DEO_BUILD'],
+ dependencies: [eo_deps, eo_pub_deps, eo_ext_deps],
install: true,
version : meson.project_version()
)
eo_lib_dbg = library('eo_dbg',
eo_src, pub_eo_file_target,
- dependencies: [eina, valgrind, dl, execinfo],
+ c_args : [package_c_args, '-DEO_DEBUG', '-DEO_BUILD'],
+ dependencies: [eo_deps, eo_pub_deps, eo_ext_deps],
install: true,
- c_args : '-DEO_DEBUG',
version : meson.project_version()
)
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index db0421634a..d6099a6433 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -1,31 +1,7 @@
#ifndef EOLIAN_H
#define EOLIAN_H
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include "eolian_api.h"
#ifdef __cplusplus
extern "C" {
@@ -38,7 +14,7 @@ extern "C" {
*
* @date 2014 (created)
*
- * @section toc Table of Contents
+ * @section eolian_toc Table of Contents
*
* @li @ref eolian_main_intro
* @li @ref eolian_main_compiling
@@ -336,7 +312,12 @@ typedef enum
EOLIAN_TYPE_BUILTIN_ARRAY,
EOLIAN_TYPE_BUILTIN_FUTURE,
EOLIAN_TYPE_BUILTIN_ITERATOR,
+#ifdef EFL_BETA_API_SUPPORT
EOLIAN_TYPE_BUILTIN_LIST,
+#else
+ // Placeholder when using release API only. Done to prevent offsetting the value below.
+ EOLIAN_TYPE_BUILTIN_BETA_PLACEHOLDER1,
+#endif
EOLIAN_TYPE_BUILTIN_ANY_VALUE,
EOLIAN_TYPE_BUILTIN_ANY_VALUE_REF,
@@ -472,14 +453,14 @@ typedef struct _Eolian_Doc_Token
*
* @ingroup Eolian
*/
-EAPI int eolian_init(void);
+EOLIAN_API int eolian_init(void);
/*
* @brief Shutdown Eolian.
*
* @ingroup Eolian
*/
-EAPI int eolian_shutdown(void);
+EOLIAN_API int eolian_shutdown(void);
/*
* @brief Get the Eolian file format version.
@@ -488,7 +469,7 @@ EAPI int eolian_shutdown(void);
* retrieval of the version at runtime, so it can be used by FFI based
* bindings in dynamic languages to do runtime checks and so on.
*/
-EAPI unsigned short eolian_file_format_version_get(void);
+EOLIAN_API unsigned short eolian_file_format_version_get(void);
/*
* @brief Create a new Eolian state.
@@ -508,7 +489,7 @@ EAPI unsigned short eolian_file_format_version_get(void);
*
* @ingroup Eolian
*/
-EAPI Eolian_State *eolian_state_new(void);
+EOLIAN_API Eolian_State *eolian_state_new(void);
/*
* @brief Free an Eolian state.
@@ -520,7 +501,7 @@ EAPI Eolian_State *eolian_state_new(void);
* @param[in] state the state to free
*
*/
-EAPI void eolian_state_free(Eolian_State *state);
+EOLIAN_API void eolian_state_free(Eolian_State *state);
/*
* @brief Set the panic function for the state.
@@ -550,7 +531,7 @@ EAPI void eolian_state_free(Eolian_State *state);
*
* @see eolian_state_error_cb_set
*/
-EAPI Eolian_Panic_Cb eolian_state_panic_cb_set(Eolian_State *state, Eolian_Panic_Cb cb);
+EOLIAN_API Eolian_Panic_Cb eolian_state_panic_cb_set(Eolian_State *state, Eolian_Panic_Cb cb);
/*
* @brief Set the error function for the state.
@@ -567,7 +548,7 @@ EAPI Eolian_Panic_Cb eolian_state_panic_cb_set(Eolian_State *state, Eolian_Panic
* @see eolian_state_panic_cb_set
* @see eolian_state_error_data_set
*/
-EAPI Eolian_Error_Cb eolian_state_error_cb_set(Eolian_State *state, Eolian_Error_Cb cb);
+EOLIAN_API Eolian_Error_Cb eolian_state_error_cb_set(Eolian_State *state, Eolian_Error_Cb cb);
/*
* @brief Set a data pointer to be passed to the error function.
@@ -580,7 +561,7 @@ EAPI Eolian_Error_Cb eolian_state_error_cb_set(Eolian_State *state, Eolian_Error
*
* @see eolian_state_error_cb_set
*/
-EAPI void *eolian_state_error_data_set(Eolian_State *state, void *data);
+EOLIAN_API void *eolian_state_error_data_set(Eolian_State *state, void *data);
/*
* @brief Get the type of an Eolian object.
@@ -598,7 +579,7 @@ EAPI void *eolian_state_error_data_set(Eolian_State *state, void *data);
*
* @ingroup Eolian
*/
-EAPI Eolian_Object_Type eolian_object_type_get(const Eolian_Object *obj);
+EOLIAN_API Eolian_Object_Type eolian_object_type_get(const Eolian_Object *obj);
/*
* @brief Get the unit the object comes from.
@@ -614,7 +595,7 @@ EAPI Eolian_Object_Type eolian_object_type_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Unit *eolian_object_unit_get(const Eolian_Object *obj);
+EOLIAN_API const Eolian_Unit *eolian_object_unit_get(const Eolian_Object *obj);
/*
* @brief Get the name of the file the object comes from.
@@ -631,7 +612,7 @@ EAPI const Eolian_Unit *eolian_object_unit_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_object_file_get(const Eolian_Object *obj);
+EOLIAN_API const char *eolian_object_file_get(const Eolian_Object *obj);
/*
* @brief Get the line the object was declared at.
@@ -647,7 +628,7 @@ EAPI const char *eolian_object_file_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI int eolian_object_line_get(const Eolian_Object *obj);
+EOLIAN_API int eolian_object_line_get(const Eolian_Object *obj);
/*
* @brief Get the column the object was declared at.
@@ -666,7 +647,7 @@ EAPI int eolian_object_line_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI int eolian_object_column_get(const Eolian_Object *obj);
+EOLIAN_API int eolian_object_column_get(const Eolian_Object *obj);
/*
* @brief Get the name of an object.
@@ -686,7 +667,7 @@ EAPI int eolian_object_column_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_object_name_get(const Eolian_Object *obj);
+EOLIAN_API const char *eolian_object_name_get(const Eolian_Object *obj);
/*
* @brief Get the C name of an object.
@@ -708,7 +689,7 @@ EAPI const char *eolian_object_name_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_object_c_name_get(const Eolian_Object *obj);
+EOLIAN_API const char *eolian_object_c_name_get(const Eolian_Object *obj);
/*
* @brief Get the short name of an object.
@@ -722,7 +703,7 @@ EAPI const char *eolian_object_c_name_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_object_short_name_get(const Eolian_Object *obj);
+EOLIAN_API const char *eolian_object_short_name_get(const Eolian_Object *obj);
/*
* @brief Get a list of namespaces for the object.
@@ -736,7 +717,7 @@ EAPI const char *eolian_object_short_name_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_object_namespaces_get(const Eolian_Object *obj);
+EOLIAN_API Eina_Iterator *eolian_object_namespaces_get(const Eolian_Object *obj);
/*
* @brief Get whether an object is beta.
@@ -749,7 +730,7 @@ EAPI Eina_Iterator *eolian_object_namespaces_get(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_object_is_beta(const Eolian_Object *obj);
+EOLIAN_API Eina_Bool eolian_object_is_beta(const Eolian_Object *obj);
/*
* @brief Scan the given directory for .eo and .eot files.
@@ -766,7 +747,7 @@ EAPI Eina_Bool eolian_object_is_beta(const Eolian_Object *obj);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_state_directory_add(Eolian_State *state, const char *dir);
+EOLIAN_API Eina_Bool eolian_state_directory_add(Eolian_State *state, const char *dir);
/*
* @brief Scan the system directory for .eo and .eot files.
@@ -783,7 +764,7 @@ EAPI Eina_Bool eolian_state_directory_add(Eolian_State *state, const char *dir);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_state_system_directory_add(Eolian_State *state);
+EOLIAN_API Eina_Bool eolian_state_system_directory_add(Eolian_State *state);
/*
* @brief Get an iterator to all .eo file names with paths.
@@ -796,7 +777,7 @@ EAPI Eina_Bool eolian_state_system_directory_add(Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_eo_file_paths_get(const Eolian_State *state);
+EOLIAN_API Eina_Iterator *eolian_state_eo_file_paths_get(const Eolian_State *state);
/*
* @brief Get an iterator to all .eot file names with paths.
@@ -809,7 +790,7 @@ EAPI Eina_Iterator *eolian_state_eo_file_paths_get(const Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_eot_file_paths_get(const Eolian_State *state);
+EOLIAN_API Eina_Iterator *eolian_state_eot_file_paths_get(const Eolian_State *state);
/*
* @brief Get an iterator to all .eo file names (without paths).
@@ -822,7 +803,7 @@ EAPI Eina_Iterator *eolian_state_eot_file_paths_get(const Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_eo_files_get(const Eolian_State *state);
+EOLIAN_API Eina_Iterator *eolian_state_eo_files_get(const Eolian_State *state);
/*
* @brief Get an iterator to all .eot file names (without paths).
@@ -835,7 +816,7 @@ EAPI Eina_Iterator *eolian_state_eo_files_get(const Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_eot_files_get(const Eolian_State *state);
+EOLIAN_API Eina_Iterator *eolian_state_eot_files_get(const Eolian_State *state);
/*
* @brief Parse the given .eo or .eot file and fill the database.
@@ -852,7 +833,7 @@ EAPI Eina_Iterator *eolian_state_eot_files_get(const Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Unit *eolian_state_file_parse(Eolian_State *state, const char *filename);
+EOLIAN_API const Eolian_Unit *eolian_state_file_parse(Eolian_State *state, const char *filename);
/*
* @brief Parse the given .eo or .eot file and fill the database.
@@ -868,7 +849,7 @@ EAPI const Eolian_Unit *eolian_state_file_parse(Eolian_State *state, const char
*
* @ingroup Eolian
*/
-EAPI const Eolian_Unit *eolian_state_file_path_parse(Eolian_State *state, const char *filepath);
+EOLIAN_API const Eolian_Unit *eolian_state_file_path_parse(Eolian_State *state, const char *filepath);
/*
* @brief Parse all known eo files.
@@ -882,7 +863,7 @@ EAPI const Eolian_Unit *eolian_state_file_path_parse(Eolian_State *state, const
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_state_all_eo_files_parse(Eolian_State *state);
+EOLIAN_API Eina_Bool eolian_state_all_eo_files_parse(Eolian_State *state);
/*
* @brief Parse all known eot files.
@@ -896,12 +877,12 @@ EAPI Eina_Bool eolian_state_all_eo_files_parse(Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_state_all_eot_files_parse(Eolian_State *state);
+EOLIAN_API Eina_Bool eolian_state_all_eot_files_parse(Eolian_State *state);
/*
* @brief Perform additional checks on the state.
*
- * This funciton performs additional checks that aren't crucial for the
+ * This function performs additional checks that aren't crucial for the
* database integrity (that's checked as a part of the regular parse process,
* so the database is guaranteed to be valid), but are important for proper
* correctness. It is recommended that all available .eot and .eo files are
@@ -913,7 +894,7 @@ EAPI Eina_Bool eolian_state_all_eot_files_parse(Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_state_check(const Eolian_State *state);
+EOLIAN_API Eina_Bool eolian_state_check(const Eolian_State *state);
/*
* @brief Get an Eolian unit by file name.
@@ -931,7 +912,7 @@ EAPI Eina_Bool eolian_state_check(const Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Unit *eolian_state_unit_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API const Eolian_Unit *eolian_state_unit_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief Get an iterator to all Eolian units in a state.
@@ -942,7 +923,7 @@ EAPI const Eolian_Unit *eolian_state_unit_by_file_get(const Eolian_State *state,
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_units_get(const Eolian_State *state);
+EOLIAN_API Eina_Iterator *eolian_state_units_get(const Eolian_State *state);
/*
* @brief Get the state associated with the unit.
@@ -956,7 +937,7 @@ EAPI Eina_Iterator *eolian_state_units_get(const Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI const Eolian_State *eolian_unit_state_get(const Eolian_Unit *unit);
+EOLIAN_API const Eolian_State *eolian_unit_state_get(const Eolian_Unit *unit);
/*
* @brief Get the children (dependencies) of a unit.
@@ -967,7 +948,7 @@ EAPI const Eolian_State *eolian_unit_state_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_children_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_children_get(const Eolian_Unit *unit);
/*
* @brief Get the file name a unit is associated with.
@@ -981,7 +962,7 @@ EAPI Eina_Iterator *eolian_unit_children_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_unit_file_get(const Eolian_Unit *unit);
+EOLIAN_API const char *eolian_unit_file_get(const Eolian_Unit *unit);
/*
* @brief Get the full file path a unit is associated with.
@@ -995,7 +976,7 @@ EAPI const char *eolian_unit_file_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_unit_file_path_get(const Eolian_Unit *unit);
+EOLIAN_API const char *eolian_unit_file_path_get(const Eolian_Unit *unit);
/*
* @brief Get the version of the unit.
@@ -1007,7 +988,7 @@ EAPI const char *eolian_unit_file_path_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI unsigned short eolian_unit_version_get(const Eolian_Unit *unit);
+EOLIAN_API unsigned short eolian_unit_version_get(const Eolian_Unit *unit);
/*
* @brief Get an object in a unit by name.
@@ -1020,7 +1001,7 @@ EAPI unsigned short eolian_unit_version_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Object *eolian_unit_object_by_name_get(const Eolian_Unit *unit, const char *name);
+EOLIAN_API const Eolian_Object *eolian_unit_object_by_name_get(const Eolian_Unit *unit, const char *name);
/*
* @brief Get all objects in the unit.
@@ -1033,7 +1014,7 @@ EAPI const Eolian_Object *eolian_unit_object_by_name_get(const Eolian_Unit *unit
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_objects_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_objects_get(const Eolian_Unit *unit);
/*
* @brief Get a class within a unit by name.
@@ -1043,7 +1024,7 @@ EAPI Eina_Iterator *eolian_unit_objects_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_unit_class_by_name_get(const Eolian_Unit *unit, const char *class_name);
+EOLIAN_API const Eolian_Class *eolian_unit_class_by_name_get(const Eolian_Unit *unit, const char *class_name);
/*
* @brief Get an iterator to all the classes stored into a unit.
@@ -1052,7 +1033,7 @@ EAPI const Eolian_Class *eolian_unit_class_by_name_get(const Eolian_Unit *unit,
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_classes_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_classes_get(const Eolian_Unit *unit);
/*
* @brief Get a constant in a unit by name.
@@ -1062,7 +1043,7 @@ EAPI Eina_Iterator *eolian_unit_classes_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Constant *eolian_unit_constant_by_name_get(const Eolian_Unit *unit, const char *name);
+EOLIAN_API const Eolian_Constant *eolian_unit_constant_by_name_get(const Eolian_Unit *unit, const char *name);
/*
* @brief Get an error declaration in a unit by name.
@@ -1072,7 +1053,7 @@ EAPI const Eolian_Constant *eolian_unit_constant_by_name_get(const Eolian_Unit *
*
* @ingroup Eolian
*/
-EAPI const Eolian_Error *eolian_unit_error_by_name_get(const Eolian_Unit *unit, const char *name);
+EOLIAN_API const Eolian_Error *eolian_unit_error_by_name_get(const Eolian_Unit *unit, const char *name);
/*
* @brief Get an iterator to all constants in the Eolian database.
@@ -1083,7 +1064,7 @@ EAPI const Eolian_Error *eolian_unit_error_by_name_get(const Eolian_Unit *unit,
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_constants_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_constants_get(const Eolian_Unit *unit);
/*
* @brief Get an iterator to all error declarations in the Eolian database.
@@ -1094,7 +1075,7 @@ EAPI Eina_Iterator *eolian_unit_constants_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_errors_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_errors_get(const Eolian_Unit *unit);
/*
* @brief Get an alias type declaration within a unit by name.
@@ -1104,7 +1085,7 @@ EAPI Eina_Iterator *eolian_unit_errors_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Typedecl *eolian_unit_alias_by_name_get(const Eolian_Unit *unit, const char *name);
+EOLIAN_API const Eolian_Typedecl *eolian_unit_alias_by_name_get(const Eolian_Unit *unit, const char *name);
/*
* @brief Get a struct declaration within a unit by name.
@@ -1114,7 +1095,7 @@ EAPI const Eolian_Typedecl *eolian_unit_alias_by_name_get(const Eolian_Unit *uni
*
* @ingroup Eolian
*/
-EAPI const Eolian_Typedecl *eolian_unit_struct_by_name_get(const Eolian_Unit *unit, const char *name);
+EOLIAN_API const Eolian_Typedecl *eolian_unit_struct_by_name_get(const Eolian_Unit *unit, const char *name);
/*
* @brief Get an enum declaration within a unit by name.
@@ -1124,7 +1105,7 @@ EAPI const Eolian_Typedecl *eolian_unit_struct_by_name_get(const Eolian_Unit *un
*
* @ingroup Eolian
*/
-EAPI const Eolian_Typedecl *eolian_unit_enum_by_name_get(const Eolian_Unit *unit, const char *name);
+EOLIAN_API const Eolian_Typedecl *eolian_unit_enum_by_name_get(const Eolian_Unit *unit, const char *name);
/*
* @brief Get an iterator to all aliases in the Eolian database.
@@ -1135,7 +1116,7 @@ EAPI const Eolian_Typedecl *eolian_unit_enum_by_name_get(const Eolian_Unit *unit
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_aliases_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_aliases_get(const Eolian_Unit *unit);
/*
* @brief Get an iterator to all structs in the Eolian database.
@@ -1146,7 +1127,7 @@ EAPI Eina_Iterator *eolian_unit_aliases_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_structs_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_structs_get(const Eolian_Unit *unit);
/*
* @brief Get an iterator to all enums in the Eolian database.
@@ -1157,7 +1138,7 @@ EAPI Eina_Iterator *eolian_unit_structs_get(const Eolian_Unit *unit);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_unit_enums_get(const Eolian_Unit *unit);
+EOLIAN_API Eina_Iterator *eolian_unit_enums_get(const Eolian_Unit *unit);
/*
* @brief A helper function to get an object in a state by name.
@@ -1184,7 +1165,7 @@ eolian_state_object_by_name_get(const Eolian_State *state, const char *name)
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_objects_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API Eina_Iterator *eolian_state_objects_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief A helper function to get all objects in a state.
@@ -1220,7 +1201,7 @@ eolian_state_class_by_name_get(const Eolian_State *state, const char *class_name
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_state_class_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API const Eolian_Class *eolian_state_class_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief A helper function to get all classes in a state.
@@ -1272,7 +1253,7 @@ eolian_state_error_by_name_get(const Eolian_State *state, const char *name)
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_constants_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API Eina_Iterator *eolian_state_constants_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief Get an iterator to all error declarations contained in a file.
@@ -1285,7 +1266,7 @@ EAPI Eina_Iterator *eolian_state_constants_by_file_get(const Eolian_State *state
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_errors_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API Eina_Iterator *eolian_state_errors_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief A helper function to get all constants in a state.
@@ -1362,7 +1343,7 @@ eolian_state_enum_by_name_get(const Eolian_State *state, const char *name)
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_aliases_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API Eina_Iterator *eolian_state_aliases_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief Get an iterator to all named structs contained in a file.
@@ -1374,7 +1355,7 @@ EAPI Eina_Iterator *eolian_state_aliases_by_file_get(const Eolian_State *state,
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_structs_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API Eina_Iterator *eolian_state_structs_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief Get an iterator to all enums contained in a file.
@@ -1386,7 +1367,7 @@ EAPI Eina_Iterator *eolian_state_structs_by_file_get(const Eolian_State *state,
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_state_enums_by_file_get(const Eolian_State *state, const char *file_name);
+EOLIAN_API Eina_Iterator *eolian_state_enums_by_file_get(const Eolian_State *state, const char *file_name);
/*
* @brief A helper function to get all aliases in a state.
@@ -1487,7 +1468,7 @@ eolian_class_namespaces_get(const Eolian_Class *klass)
*
* @ingroup Eolian
*/
-EAPI Eolian_Class_Type eolian_class_type_get(const Eolian_Class *klass);
+EOLIAN_API Eolian_Class_Type eolian_class_type_get(const Eolian_Class *klass);
/*
* @brief Returns the documentation of a class.
@@ -1497,7 +1478,7 @@ EAPI Eolian_Class_Type eolian_class_type_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_class_documentation_get(const Eolian_Class *klass);
+EOLIAN_API const Eolian_Documentation *eolian_class_documentation_get(const Eolian_Class *klass);
/*
* @brief Returns the C function prefix of a class
@@ -1507,7 +1488,7 @@ EAPI const Eolian_Documentation *eolian_class_documentation_get(const Eolian_Cla
*
* @ingroup Eolian
*/
-EAPI const char *eolian_class_c_prefix_get(const Eolian_Class *klass);
+EOLIAN_API const char *eolian_class_c_prefix_get(const Eolian_Class *klass);
/*
* @brief Returns the C event prefix of a class
@@ -1517,7 +1498,7 @@ EAPI const char *eolian_class_c_prefix_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_class_event_c_prefix_get(const Eolian_Class *klass);
+EOLIAN_API const char *eolian_class_event_c_prefix_get(const Eolian_Class *klass);
/*
* @brief Returns the data type of a class
@@ -1527,7 +1508,7 @@ EAPI const char *eolian_class_event_c_prefix_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_class_data_type_get(const Eolian_Class *klass);
+EOLIAN_API const char *eolian_class_data_type_get(const Eolian_Class *klass);
/*
* @brief Get the parent class of a class
@@ -1543,12 +1524,12 @@ EAPI const char *eolian_class_data_type_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_class_parent_get(const Eolian_Class *klass);
+EOLIAN_API const Eolian_Class *eolian_class_parent_get(const Eolian_Class *klass);
/*
* @brief Returns an iterator to the required classes of this mixin
*
- * For none mixins this will return an empty iterator, for mixins this retuns a iterator that
+ * For none mixins this will return an empty iterator, for mixins this returns a iterator that
* carries all the classes that are required by this passed mixin.
*
* @param[in] klass the class
@@ -1556,7 +1537,7 @@ EAPI const Eolian_Class *eolian_class_parent_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_class_requires_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Iterator *eolian_class_requires_get(const Eolian_Class *klass);
/*
* @brief Returns an iterator to the class extensions
@@ -1572,7 +1553,7 @@ EAPI Eina_Iterator *eolian_class_requires_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_class_extensions_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Iterator *eolian_class_extensions_get(const Eolian_Class *klass);
/*
* @brief Returns an iterator to functions of a class.
@@ -1585,7 +1566,7 @@ EAPI Eina_Iterator *eolian_class_extensions_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_class_functions_get(const Eolian_Class *klass, Eolian_Function_Type func_type);
+EOLIAN_API Eina_Iterator *eolian_class_functions_get(const Eolian_Class *klass, Eolian_Function_Type func_type);
/*
* @brief Returns the type of a function
@@ -1595,7 +1576,7 @@ EAPI Eina_Iterator *eolian_class_functions_get(const Eolian_Class *klass, Eolian
*
* @ingroup Eolian
*/
-EAPI Eolian_Function_Type eolian_function_type_get(const Eolian_Function *function_id);
+EOLIAN_API Eolian_Function_Type eolian_function_type_get(const Eolian_Function *function_id);
/*
* @brief Returns the scope of a function
@@ -1608,7 +1589,7 @@ EAPI Eolian_Function_Type eolian_function_type_get(const Eolian_Function *functi
*
* @ingroup Eolian
*/
-EAPI Eolian_Object_Scope eolian_function_scope_get(const Eolian_Function *function_id, Eolian_Function_Type ftype);
+EOLIAN_API Eolian_Object_Scope eolian_function_scope_get(const Eolian_Function *function_id, Eolian_Function_Type ftype);
/*
* @brief A helper function to get the name of a function.
@@ -1641,7 +1622,7 @@ eolian_function_name_get(const Eolian_Function *fid)
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_function_full_c_name_get(const Eolian_Function *function_id, Eolian_Function_Type ftype);
+EOLIAN_API Eina_Stringshare *eolian_function_full_c_name_get(const Eolian_Function *function_id, Eolian_Function_Type ftype);
/*
* @brief Get a function in a class by its name and type
@@ -1657,7 +1638,7 @@ EAPI Eina_Stringshare *eolian_function_full_c_name_get(const Eolian_Function *fu
*
* @ingroup Eolian
*/
-EAPI const Eolian_Function *eolian_class_function_by_name_get(const Eolian_Class *klass, const char *func_name, Eolian_Function_Type f_type);
+EOLIAN_API const Eolian_Function *eolian_class_function_by_name_get(const Eolian_Class *klass, const char *func_name, Eolian_Function_Type f_type);
/*
* @brief Returns the implement for a function.
@@ -1667,7 +1648,7 @@ EAPI const Eolian_Function *eolian_class_function_by_name_get(const Eolian_Class
*
* @ingroup Eolian
*/
-EAPI const Eolian_Implement *eolian_function_implement_get(const Eolian_Function *function_id);
+EOLIAN_API const Eolian_Implement *eolian_function_implement_get(const Eolian_Function *function_id);
/*
* @brief Get whether a function is a static method/property.
@@ -1677,7 +1658,7 @@ EAPI const Eolian_Implement *eolian_function_implement_get(const Eolian_Function
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_function_is_static(const Eolian_Function *function_id);
+EOLIAN_API Eina_Bool eolian_function_is_static(const Eolian_Function *function_id);
/*
* @brief Get whether a function is beta.
@@ -1701,7 +1682,7 @@ eolian_function_is_beta(const Eolian_Function *function_id)
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_function_is_constructor(const Eolian_Function *function_id, const Eolian_Class *klass);
+EOLIAN_API Eina_Bool eolian_function_is_constructor(const Eolian_Function *function_id, const Eolian_Class *klass);
/*
* @brief Returns an iterator to the parameter handles for a method/ctor/dtor.
@@ -1711,7 +1692,7 @@ EAPI Eina_Bool eolian_function_is_constructor(const Eolian_Function *function_id
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *function_id);
+EOLIAN_API Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *function_id);
/*
* @brief Returns an iterator to the keys params of a given function.
@@ -1724,7 +1705,7 @@ EAPI Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *functi
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
+EOLIAN_API Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
* @brief Returns an iterator to the values params of a given function.
@@ -1737,7 +1718,7 @@ EAPI Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id, Eoli
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
+EOLIAN_API Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
* @brief Get direction of a parameter
@@ -1747,7 +1728,7 @@ EAPI Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id, Eo
*
* @ingroup Eolian
*/
-EAPI Eolian_Parameter_Direction eolian_parameter_direction_get(const Eolian_Function_Parameter *param);
+EOLIAN_API Eolian_Parameter_Direction eolian_parameter_direction_get(const Eolian_Function_Parameter *param);
/*
* @brief Get type of a parameter
@@ -1757,7 +1738,7 @@ EAPI Eolian_Parameter_Direction eolian_parameter_direction_get(const Eolian_Func
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_parameter_type_get(const Eolian_Function_Parameter *param);
+EOLIAN_API const Eolian_Type *eolian_parameter_type_get(const Eolian_Function_Parameter *param);
/*
* @brief Get the default value of a parameter
@@ -1767,7 +1748,7 @@ EAPI const Eolian_Type *eolian_parameter_type_get(const Eolian_Function_Paramete
*
* @ingroup Eolian
*/
-EAPI const Eolian_Expression *eolian_parameter_default_value_get(const Eolian_Function_Parameter *param);
+EOLIAN_API const Eolian_Expression *eolian_parameter_default_value_get(const Eolian_Function_Parameter *param);
/*
* @brief A helper function to get the name of a function parameter.
@@ -1790,7 +1771,7 @@ eolian_parameter_name_get(const Eolian_Function_Parameter *param)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_parameter_documentation_get(const Eolian_Function_Parameter *param);
+EOLIAN_API const Eolian_Documentation *eolian_parameter_documentation_get(const Eolian_Function_Parameter *param);
/*
* @brief Indicates if a parameter is optional.
@@ -1800,7 +1781,7 @@ EAPI const Eolian_Documentation *eolian_parameter_documentation_get(const Eolian
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_parameter_is_optional(const Eolian_Function_Parameter *param_desc);
+EOLIAN_API Eina_Bool eolian_parameter_is_optional(const Eolian_Function_Parameter *param_desc);
/*
* @brief Get whether a parameter is by reference.
@@ -1810,7 +1791,7 @@ EAPI Eina_Bool eolian_parameter_is_optional(const Eolian_Function_Parameter *par
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_parameter_is_by_ref(const Eolian_Function_Parameter *param_desc);
+EOLIAN_API Eina_Bool eolian_parameter_is_by_ref(const Eolian_Function_Parameter *param_desc);
/*
* @brief Get whether a parameter is moved into the callee.
@@ -1820,7 +1801,7 @@ EAPI Eina_Bool eolian_parameter_is_by_ref(const Eolian_Function_Parameter *param
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_parameter_is_move(const Eolian_Function_Parameter *param_desc);
+EOLIAN_API Eina_Bool eolian_parameter_is_move(const Eolian_Function_Parameter *param_desc);
/*
* @brief Get the full C type name of the given parameter.
@@ -1837,7 +1818,7 @@ EAPI Eina_Bool eolian_parameter_is_move(const Eolian_Function_Parameter *param_d
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_parameter_c_type_get(const Eolian_Function_Parameter *param_desc, Eina_Bool as_return);
+EOLIAN_API Eina_Stringshare *eolian_parameter_c_type_get(const Eolian_Function_Parameter *param_desc, Eina_Bool as_return);
/*
* @brief Get the return type of a function.
@@ -1853,7 +1834,7 @@ EAPI Eina_Stringshare *eolian_parameter_c_type_get(const Eolian_Function_Paramet
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_function_return_type_get(const Eolian_Function *function_id, Eolian_Function_Type ftype);
+EOLIAN_API const Eolian_Type *eolian_function_return_type_get(const Eolian_Function *function_id, Eolian_Function_Type ftype);
/*
* @brief Get the return default value of a function.
@@ -1870,7 +1851,7 @@ EAPI const Eolian_Type *eolian_function_return_type_get(const Eolian_Function *f
*
* @ingroup Eolian
*/
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_function_return_default_value_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
@@ -1887,7 +1868,7 @@ eolian_function_return_default_value_get(const Eolian_Function *foo_id, Eolian_F
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_function_return_documentation_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
+EOLIAN_API const Eolian_Documentation *eolian_function_return_documentation_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
* @brief Indicates if a function return should allow being unused.
@@ -1903,7 +1884,7 @@ EAPI const Eolian_Documentation *eolian_function_return_documentation_get(const
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_function_return_allow_unused(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
+EOLIAN_API Eina_Bool eolian_function_return_allow_unused(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
* @brief Get whether a parameter is by reference.
@@ -1919,7 +1900,7 @@ EAPI Eina_Bool eolian_function_return_allow_unused(const Eolian_Function *foo_id
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_function_return_is_by_ref(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
+EOLIAN_API Eina_Bool eolian_function_return_is_by_ref(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
* @brief Get whether a parameter is moved into the callee.
@@ -1935,7 +1916,7 @@ EAPI Eina_Bool eolian_function_return_is_by_ref(const Eolian_Function *foo_id, E
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_function_return_is_move(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
+EOLIAN_API Eina_Bool eolian_function_return_is_move(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
* @brief Get the full C type name of the return value.
@@ -1950,7 +1931,7 @@ EAPI Eina_Bool eolian_function_return_is_move(const Eolian_Function *foo_id, Eol
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_function_return_c_type_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
+EOLIAN_API Eina_Stringshare *eolian_function_return_c_type_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
/*
* @brief Indicates if a function object is const.
@@ -1960,7 +1941,7 @@ EAPI Eina_Stringshare *eolian_function_return_c_type_get(const Eolian_Function *
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_function_object_is_const(const Eolian_Function *function_id);
+EOLIAN_API Eina_Bool eolian_function_object_is_const(const Eolian_Function *function_id);
/*
* @brief Return the Eolian class associated to the function.
@@ -1970,7 +1951,7 @@ EAPI Eina_Bool eolian_function_object_is_const(const Eolian_Function *function_i
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_function_class_get(const Eolian_Function *function_id);
+EOLIAN_API const Eolian_Class *eolian_function_class_get(const Eolian_Function *function_id);
/*
* @brief A helper function to get the full name of an implement.
@@ -1999,7 +1980,7 @@ eolian_implement_name_get(const Eolian_Implement *impl)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_implement_class_get(const Eolian_Implement *impl);
+EOLIAN_API const Eolian_Class *eolian_implement_class_get(const Eolian_Implement *impl);
/*
* @brief Get the implementing class of an overriding function (implement).
@@ -2015,7 +1996,7 @@ EAPI const Eolian_Class *eolian_implement_class_get(const Eolian_Implement *impl
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_implement_implementing_class_get(const Eolian_Implement *impl);
+EOLIAN_API const Eolian_Class *eolian_implement_implementing_class_get(const Eolian_Implement *impl);
/*
* @brief Get the function of an implement.
@@ -2026,7 +2007,7 @@ EAPI const Eolian_Class *eolian_implement_implementing_class_get(const Eolian_Im
*
* @ingroup Eolian
*/
-EAPI const Eolian_Function *eolian_implement_function_get(const Eolian_Implement *impl, Eolian_Function_Type *func_type);
+EOLIAN_API const Eolian_Function *eolian_implement_function_get(const Eolian_Implement *impl, Eolian_Function_Type *func_type);
/*
* @brief Returns a documentation for an implement.
@@ -2039,7 +2020,7 @@ EAPI const Eolian_Function *eolian_implement_function_get(const Eolian_Implement
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_implement_documentation_get(const Eolian_Implement *impl, Eolian_Function_Type f_type);
+EOLIAN_API const Eolian_Documentation *eolian_implement_documentation_get(const Eolian_Implement *impl, Eolian_Function_Type f_type);
/*
* @brief Get whether an implement is tagged with @auto.
@@ -2052,7 +2033,7 @@ EAPI const Eolian_Documentation *eolian_implement_documentation_get(const Eolian
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_implement_is_auto(const Eolian_Implement *impl, Eolian_Function_Type f_type);
+EOLIAN_API Eina_Bool eolian_implement_is_auto(const Eolian_Implement *impl, Eolian_Function_Type f_type);
/*
* @brief Get whether an implement is tagged with @empty.
@@ -2065,7 +2046,7 @@ EAPI Eina_Bool eolian_implement_is_auto(const Eolian_Implement *impl, Eolian_Fun
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_implement_is_empty(const Eolian_Implement *impl, Eolian_Function_Type f_type);
+EOLIAN_API Eina_Bool eolian_implement_is_empty(const Eolian_Implement *impl, Eolian_Function_Type f_type);
/*
* @brief Get whether an implement is pure virtual.
@@ -2078,7 +2059,7 @@ EAPI Eina_Bool eolian_implement_is_empty(const Eolian_Implement *impl, Eolian_Fu
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_implement_is_pure_virtual(const Eolian_Implement *impl, Eolian_Function_Type f_type);
+EOLIAN_API Eina_Bool eolian_implement_is_pure_virtual(const Eolian_Implement *impl, Eolian_Function_Type f_type);
/*
* @brief Get whether an implement references a property getter.
@@ -2088,7 +2069,7 @@ EAPI Eina_Bool eolian_implement_is_pure_virtual(const Eolian_Implement *impl, Eo
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_implement_is_prop_get(const Eolian_Implement *impl);
+EOLIAN_API Eina_Bool eolian_implement_is_prop_get(const Eolian_Implement *impl);
/*
* @brief Get whether an implement references a property setter.
@@ -2098,7 +2079,7 @@ EAPI Eina_Bool eolian_implement_is_prop_get(const Eolian_Implement *impl);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_implement_is_prop_set(const Eolian_Implement *impl);
+EOLIAN_API Eina_Bool eolian_implement_is_prop_set(const Eolian_Implement *impl);
/*
* @brief Get an iterator to implements of a class.
@@ -2113,7 +2094,7 @@ EAPI Eina_Bool eolian_implement_is_prop_set(const Eolian_Implement *impl);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_class_implements_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Iterator *eolian_class_implements_get(const Eolian_Class *klass);
/*
* @brief A helper function to get the full name of a constructor.
@@ -2136,7 +2117,7 @@ eolian_constructor_name_get(const Eolian_Constructor *ctor)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_constructor_class_get(const Eolian_Constructor *ctor);
+EOLIAN_API const Eolian_Class *eolian_constructor_class_get(const Eolian_Constructor *ctor);
/*
* @brief Get the function of a constructing function.
@@ -2146,7 +2127,7 @@ EAPI const Eolian_Class *eolian_constructor_class_get(const Eolian_Constructor *
*
* @ingroup Eolian
*/
-EAPI const Eolian_Function *eolian_constructor_function_get(const Eolian_Constructor *ctor);
+EOLIAN_API const Eolian_Function *eolian_constructor_function_get(const Eolian_Constructor *ctor);
/*
* @brief Checks if a constructor is tagged optional.
@@ -2156,7 +2137,7 @@ EAPI const Eolian_Function *eolian_constructor_function_get(const Eolian_Constru
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_constructor_is_optional(const Eolian_Constructor *ctor);
+EOLIAN_API Eina_Bool eolian_constructor_is_optional(const Eolian_Constructor *ctor);
/*
* @brief Get an iterator to the constructing functions defined in a class.
@@ -2166,7 +2147,7 @@ EAPI Eina_Bool eolian_constructor_is_optional(const Eolian_Constructor *ctor);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_class_constructors_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Iterator *eolian_class_constructors_get(const Eolian_Class *klass);
/*
* @brief Get an iterator to the events defined in a class.
@@ -2176,7 +2157,7 @@ EAPI Eina_Iterator *eolian_class_constructors_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_class_events_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Iterator *eolian_class_events_get(const Eolian_Class *klass);
/*
* @brief A helper function to get the name of an event.
@@ -2199,7 +2180,7 @@ eolian_event_name_get(const Eolian_Event *event)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_event_type_get(const Eolian_Event *event);
+EOLIAN_API const Eolian_Type *eolian_event_type_get(const Eolian_Event *event);
/*
* @brief Get the class of an event.
@@ -2209,7 +2190,7 @@ EAPI const Eolian_Type *eolian_event_type_get(const Eolian_Event *event);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_event_class_get(const Eolian_Event *event);
+EOLIAN_API const Eolian_Class *eolian_event_class_get(const Eolian_Event *event);
/*
* @brief Get the documentation of an event.
@@ -2219,7 +2200,7 @@ EAPI const Eolian_Class *eolian_event_class_get(const Eolian_Event *event);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_event_documentation_get(const Eolian_Event *event);
+EOLIAN_API const Eolian_Documentation *eolian_event_documentation_get(const Eolian_Event *event);
/*
* @brief Returns the scope of an event
@@ -2229,7 +2210,7 @@ EAPI const Eolian_Documentation *eolian_event_documentation_get(const Eolian_Eve
*
* @ingroup Eolian
*/
-EAPI Eolian_Object_Scope eolian_event_scope_get(const Eolian_Event *event);
+EOLIAN_API Eolian_Object_Scope eolian_event_scope_get(const Eolian_Event *event);
/*
* @brief Get whether an event is beta.
@@ -2252,7 +2233,7 @@ eolian_event_is_beta(const Eolian_Event *event)
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_event_is_hot(const Eolian_Event *event);
+EOLIAN_API Eina_Bool eolian_event_is_hot(const Eolian_Event *event);
/*
* @brief Get whether an event is a restartable event.
@@ -2266,7 +2247,7 @@ EAPI Eina_Bool eolian_event_is_hot(const Eolian_Event *event);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_event_is_restart(const Eolian_Event *event);
+EOLIAN_API Eina_Bool eolian_event_is_restart(const Eolian_Event *event);
/*
* @brief Get an iterator to the parts defined in a class.
@@ -2276,7 +2257,7 @@ EAPI Eina_Bool eolian_event_is_restart(const Eolian_Event *event);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_class_parts_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Iterator *eolian_class_parts_get(const Eolian_Class *klass);
/*
* @brief Returns the C macro name used to refer to an event
@@ -2288,7 +2269,7 @@ EAPI Eina_Iterator *eolian_class_parts_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_event_c_macro_get(const Eolian_Event *event);
+EOLIAN_API Eina_Stringshare *eolian_event_c_macro_get(const Eolian_Event *event);
/*
* @brief A helper function to get the name of a part.
@@ -2311,7 +2292,7 @@ eolian_part_name_get(const Eolian_Part *part)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_part_class_get(const Eolian_Part *part);
+EOLIAN_API const Eolian_Class *eolian_part_class_get(const Eolian_Part *part);
/*
* @brief Get the documentation of an part.
@@ -2321,7 +2302,7 @@ EAPI const Eolian_Class *eolian_part_class_get(const Eolian_Part *part);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_part_documentation_get(const Eolian_Part *part);
+EOLIAN_API const Eolian_Documentation *eolian_part_documentation_get(const Eolian_Part *part);
/*
* @brief Get whether a part is beta.
@@ -2345,7 +2326,7 @@ eolian_part_is_beta(const Eolian_Part *part)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Event *eolian_class_event_by_name_get(const Eolian_Class *klass, const char *event_name);
+EOLIAN_API const Eolian_Event *eolian_class_event_by_name_get(const Eolian_Class *klass, const char *event_name);
/*
* @brief Indicates if the class constructor has to invoke
@@ -2356,7 +2337,7 @@ EAPI const Eolian_Event *eolian_class_event_by_name_get(const Eolian_Class *klas
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass);
/*
* @brief Indicates if the class destructor has to invoke
@@ -2367,7 +2348,7 @@ EAPI Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
/*
* @brief Returns the name of the C function used to get the Efl_Class pointer.
@@ -2381,7 +2362,7 @@ EAPI Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_class_c_get_function_name_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Stringshare *eolian_class_c_get_function_name_get(const Eolian_Class *klass);
/*
* @brief Get the C macro of the class.
@@ -2397,7 +2378,7 @@ EAPI Eina_Stringshare *eolian_class_c_get_function_name_get(const Eolian_Class *
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_class_c_macro_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Stringshare *eolian_class_c_macro_get(const Eolian_Class *klass);
/*
* @brief Get the C data type of the class.
@@ -2415,7 +2396,7 @@ EAPI Eina_Stringshare *eolian_class_c_macro_get(const Eolian_Class *klass);
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_class_c_data_type_get(const Eolian_Class *klass);
+EOLIAN_API Eina_Stringshare *eolian_class_c_data_type_get(const Eolian_Class *klass);
/*
* @brief Get whether a class is beta.
@@ -2438,7 +2419,7 @@ eolian_class_is_beta(const Eolian_Class *klass)
*
* @ingroup Eolian
*/
-EAPI Eolian_Typedecl_Type eolian_typedecl_type_get(const Eolian_Typedecl *tp);
+EOLIAN_API Eolian_Typedecl_Type eolian_typedecl_type_get(const Eolian_Typedecl *tp);
/*
* @brief Get an iterator to all fields of a struct type.
@@ -2448,7 +2429,7 @@ EAPI Eolian_Typedecl_Type eolian_typedecl_type_get(const Eolian_Typedecl *tp);
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp);
+EOLIAN_API Eina_Iterator *eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp);
/*
* @brief Get a field of a struct type.
@@ -2460,7 +2441,7 @@ EAPI Eina_Iterator *eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Struct_Type_Field *eolian_typedecl_struct_field_get(const Eolian_Typedecl *tp, const char *field);
+EOLIAN_API const Eolian_Struct_Type_Field *eolian_typedecl_struct_field_get(const Eolian_Typedecl *tp, const char *field);
/*
* @brief A helper function to get the name of a struct field.
@@ -2483,7 +2464,7 @@ eolian_typedecl_struct_field_name_get(const Eolian_Struct_Type_Field *field)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_typedecl_struct_field_documentation_get(const Eolian_Struct_Type_Field *fl);
+EOLIAN_API const Eolian_Documentation *eolian_typedecl_struct_field_documentation_get(const Eolian_Struct_Type_Field *fl);
/*
* @brief Get the type of a field of a struct type.
@@ -2493,7 +2474,7 @@ EAPI const Eolian_Documentation *eolian_typedecl_struct_field_documentation_get(
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_typedecl_struct_field_type_get(const Eolian_Struct_Type_Field *fl);
+EOLIAN_API const Eolian_Type *eolian_typedecl_struct_field_type_get(const Eolian_Struct_Type_Field *fl);
/*
* @brief Get whether a struct field is by reference.
@@ -2503,7 +2484,7 @@ EAPI const Eolian_Type *eolian_typedecl_struct_field_type_get(const Eolian_Struc
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_typedecl_struct_field_is_by_ref(const Eolian_Struct_Type_Field *fl);
+EOLIAN_API Eina_Bool eolian_typedecl_struct_field_is_by_ref(const Eolian_Struct_Type_Field *fl);
/*
* @brief Get whether a struct field is moved with the struct.
@@ -2513,7 +2494,7 @@ EAPI Eina_Bool eolian_typedecl_struct_field_is_by_ref(const Eolian_Struct_Type_F
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_typedecl_struct_field_is_move(const Eolian_Struct_Type_Field *fl);
+EOLIAN_API Eina_Bool eolian_typedecl_struct_field_is_move(const Eolian_Struct_Type_Field *fl);
/*
* @brief Get the full C type name of the struct field.
@@ -2527,7 +2508,7 @@ EAPI Eina_Bool eolian_typedecl_struct_field_is_move(const Eolian_Struct_Type_Fie
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_typedecl_struct_field_c_type_get(const Eolian_Struct_Type_Field *fl);
+EOLIAN_API Eina_Stringshare *eolian_typedecl_struct_field_c_type_get(const Eolian_Struct_Type_Field *fl);
/*
* @brief Get an iterator to all fields of an enum type.
@@ -2537,7 +2518,7 @@ EAPI Eina_Stringshare *eolian_typedecl_struct_field_c_type_get(const Eolian_Stru
*
* @ingroup Eolian
*/
-EAPI Eina_Iterator *eolian_typedecl_enum_fields_get(const Eolian_Typedecl *tp);
+EOLIAN_API Eina_Iterator *eolian_typedecl_enum_fields_get(const Eolian_Typedecl *tp);
/*
* @brief Get a field of an enum type.
@@ -2552,7 +2533,7 @@ EAPI Eina_Iterator *eolian_typedecl_enum_fields_get(const Eolian_Typedecl *tp);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Enum_Type_Field *eolian_typedecl_enum_field_get(const Eolian_Typedecl *tp, const char *field);
+EOLIAN_API const Eolian_Enum_Type_Field *eolian_typedecl_enum_field_get(const Eolian_Typedecl *tp, const char *field);
/*
* @brief A helper function to get the name of an enum field.
@@ -2577,7 +2558,7 @@ eolian_typedecl_enum_field_name_get(const Eolian_Enum_Type_Field *field)
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_typedecl_enum_field_c_constant_get(const Eolian_Enum_Type_Field *fl);
+EOLIAN_API Eina_Stringshare *eolian_typedecl_enum_field_c_constant_get(const Eolian_Enum_Type_Field *fl);
/*
* @brief Get the documentation of a field of an enum type.
@@ -2587,7 +2568,7 @@ EAPI Eina_Stringshare *eolian_typedecl_enum_field_c_constant_get(const Eolian_En
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_typedecl_enum_field_documentation_get(const Eolian_Enum_Type_Field *fl);
+EOLIAN_API const Eolian_Documentation *eolian_typedecl_enum_field_documentation_get(const Eolian_Enum_Type_Field *fl);
/*
* @brief Get the value of a field of an enum type.
@@ -2602,7 +2583,7 @@ EAPI const Eolian_Documentation *eolian_typedecl_enum_field_documentation_get(co
*
* @ingroup Eolian
*/
-EAPI const Eolian_Expression *eolian_typedecl_enum_field_value_get(const Eolian_Enum_Type_Field *fl, Eina_Bool force);
+EOLIAN_API const Eolian_Expression *eolian_typedecl_enum_field_value_get(const Eolian_Enum_Type_Field *fl, Eina_Bool force);
/*
* @brief Get the documentation of a struct/alias type.
@@ -2613,7 +2594,7 @@ EAPI const Eolian_Expression *eolian_typedecl_enum_field_value_get(const Eolian_
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_typedecl_documentation_get(const Eolian_Typedecl *tp);
+EOLIAN_API const Eolian_Documentation *eolian_typedecl_documentation_get(const Eolian_Typedecl *tp);
/*
* @brief Get the base type of an alias declaration.
@@ -2623,7 +2604,7 @@ EAPI const Eolian_Documentation *eolian_typedecl_documentation_get(const Eolian_
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_typedecl_base_type_get(const Eolian_Typedecl *tp);
+EOLIAN_API const Eolian_Type *eolian_typedecl_base_type_get(const Eolian_Typedecl *tp);
/*
* @brief Get the lowest base type of an alias stack.
@@ -2636,7 +2617,7 @@ EAPI const Eolian_Type *eolian_typedecl_base_type_get(const Eolian_Typedecl *tp)
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_typedecl_aliased_base_get(const Eolian_Typedecl *tp);
+EOLIAN_API const Eolian_Type *eolian_typedecl_aliased_base_get(const Eolian_Typedecl *tp);
/*
* @brief Check if a struct or alias type declaration is extern.
@@ -2646,7 +2627,7 @@ EAPI const Eolian_Type *eolian_typedecl_aliased_base_get(const Eolian_Typedecl *
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_typedecl_is_extern(const Eolian_Typedecl *tp);
+EOLIAN_API Eina_Bool eolian_typedecl_is_extern(const Eolian_Typedecl *tp);
/*
* @brief Get whether a typedecl is beta.
@@ -2673,7 +2654,7 @@ eolian_typedecl_is_beta(const Eolian_Typedecl *tp)
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_typedecl_c_type_get(const Eolian_Typedecl *tp);
+EOLIAN_API Eina_Stringshare *eolian_typedecl_c_type_get(const Eolian_Typedecl *tp);
/*
* @brief A helper function to get the full name of a typedecl.
@@ -2735,7 +2716,7 @@ eolian_typedecl_namespaces_get(const Eolian_Typedecl *tp)
*
* @ingroup Eolian
*/
-EAPI const char *eolian_typedecl_free_func_get(const Eolian_Typedecl *tp);
+EOLIAN_API const char *eolian_typedecl_free_func_get(const Eolian_Typedecl *tp);
/*
* @brief Get the function object for this function pointer type.
@@ -2745,7 +2726,7 @@ EAPI const char *eolian_typedecl_free_func_get(const Eolian_Typedecl *tp);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Function *eolian_typedecl_function_pointer_get(const Eolian_Typedecl *tp);
+EOLIAN_API const Eolian_Function *eolian_typedecl_function_pointer_get(const Eolian_Typedecl *tp);
/*
* @brief Get the type of a type.
@@ -2755,7 +2736,7 @@ EAPI const Eolian_Function *eolian_typedecl_function_pointer_get(const Eolian_Ty
*
* @ingroup Eolian
*/
-EAPI Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp);
+EOLIAN_API Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp);
/*
* @brief Get the builtin type of a type.
@@ -2768,7 +2749,7 @@ EAPI Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI Eolian_Type_Builtin_Type eolian_type_builtin_type_get(const Eolian_Type *tp);
+EOLIAN_API Eolian_Type_Builtin_Type eolian_type_builtin_type_get(const Eolian_Type *tp);
/*
* @brief Get the base type of a type.
@@ -2781,7 +2762,7 @@ EAPI Eolian_Type_Builtin_Type eolian_type_builtin_type_get(const Eolian_Type *tp
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_type_base_type_get(const Eolian_Type *tp);
+EOLIAN_API const Eolian_Type *eolian_type_base_type_get(const Eolian_Type *tp);
/*
* @brief Get the next inner type of a complex type.
@@ -2796,7 +2777,7 @@ EAPI const Eolian_Type *eolian_type_base_type_get(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_type_next_type_get(const Eolian_Type *tp);
+EOLIAN_API const Eolian_Type *eolian_type_next_type_get(const Eolian_Type *tp);
/*
* @brief Get the declaration a regular type points to.
@@ -2808,7 +2789,7 @@ EAPI const Eolian_Type *eolian_type_next_type_get(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Typedecl *eolian_type_typedecl_get(const Eolian_Type *tp);
+EOLIAN_API const Eolian_Typedecl *eolian_type_typedecl_get(const Eolian_Type *tp);
/*
* @brief Get the lowest base type of an alias stack.
@@ -2825,7 +2806,7 @@ EAPI const Eolian_Typedecl *eolian_type_typedecl_get(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_type_aliased_base_get(const Eolian_Type *tp);
+EOLIAN_API const Eolian_Type *eolian_type_aliased_base_get(const Eolian_Type *tp);
/*
* @brief Get the class associated with an EOLIAN_TYPE_CLASS type.
@@ -2835,7 +2816,7 @@ EAPI const Eolian_Type *eolian_type_aliased_base_get(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Class *eolian_type_class_get(const Eolian_Type *tp);
+EOLIAN_API const Eolian_Class *eolian_type_class_get(const Eolian_Type *tp);
/*
* @brief Get the error declaration associated with an EOLIAN_TYPE_ERROR type.
@@ -2845,22 +2826,22 @@ EAPI const Eolian_Class *eolian_type_class_get(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Error *eolian_type_error_get(const Eolian_Type *tp);
+EOLIAN_API const Eolian_Error *eolian_type_error_get(const Eolian_Type *tp);
/*
* @brief Get whether the given type is moved with its parent type.
*
- * This is only used for inner types of complex types, i.e. the types
- * inside the brackets of lists, arrays, hashes and so on. You can use
- * this to tell whether they belong to their parent type (i.e. whether
- * they are marked @move).
+ * This is only used for inner types of owning containers, i.e. arrays,
+ * lists, hashes and futures. View containers (accessors and iterators)
+ * are not allowed to own their contents (the Eolian syntax will not let
+ * you use the <tt>@move</tt> tag there).
*
* @param[in] tp the type.
* @return EINA_TRUE when the type is marked move, EINA_FALSE otherwise.
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_type_is_move(const Eolian_Type *tp);
+EOLIAN_API Eina_Bool eolian_type_is_move(const Eolian_Type *tp);
/*
* @brief Get whether the given type is const.
@@ -2870,7 +2851,7 @@ EAPI Eina_Bool eolian_type_is_move(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_type_is_const(const Eolian_Type *tp);
+EOLIAN_API Eina_Bool eolian_type_is_const(const Eolian_Type *tp);
/*
* @brief Get the full C type name of the given type.
@@ -2884,7 +2865,7 @@ EAPI Eina_Bool eolian_type_is_const(const Eolian_Type *tp);
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_type_c_type_get(const Eolian_Type *tp);
+EOLIAN_API Eina_Stringshare *eolian_type_c_type_get(const Eolian_Type *tp);
/*
* @brief A helper function to get the full name of a type.
@@ -2950,7 +2931,25 @@ eolian_type_namespaces_get(const Eolian_Type *tp)
*
* @ingroup Eolian
*/
-EAPI Eolian_Value eolian_expression_eval(const Eolian_Expression *expr, Eolian_Expression_Mask m);
+EOLIAN_API Eolian_Value eolian_expression_eval(const Eolian_Expression *expr, Eolian_Expression_Mask m);
+
+/*
+ * @brief Evaluate an Eolian expression into an out-param.
+ *
+ * @param[in] expr the expression.
+ * @param[in] mask the mask of allowed values (can combine with bitwise OR).
+ * @param[out] the value to fill
+ * @return EINA_TRUE on success, EINA_FALSE on failure
+ *
+ * This is like eolian_expression_eval, except it writes into an out-param
+ * and returns whether it succeeded or failed. On failure, no write is
+ * guaranteed.
+ *
+ * @since 1.25
+ *
+ * @ingroup Eolian
+ */
+EOLIAN_API Eina_Bool eolian_expression_eval_fill(const Eolian_Expression *expr, Eolian_Expression_Mask m, Eolian_Value *val);
/*
* @brief Convert the result of expression evaluation to a literal as in how
@@ -2968,7 +2967,7 @@ EAPI Eolian_Value eolian_expression_eval(const Eolian_Expression *expr, Eolian_E
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_expression_value_to_literal(const Eolian_Value *v);
+EOLIAN_API Eina_Stringshare *eolian_expression_value_to_literal(const Eolian_Value *v);
/*
* @brief Serialize an expression.
@@ -2984,7 +2983,7 @@ EAPI Eina_Stringshare *eolian_expression_value_to_literal(const Eolian_Value *v)
*
* @ingroup Eolian
*/
-EAPI Eina_Stringshare *eolian_expression_serialize(const Eolian_Expression *expr);
+EOLIAN_API Eina_Stringshare *eolian_expression_serialize(const Eolian_Expression *expr);
/*
* @brief Get the type of an expression.
@@ -2994,7 +2993,7 @@ EAPI Eina_Stringshare *eolian_expression_serialize(const Eolian_Expression *expr
*
* @ingroup Eolian
*/
-EAPI Eolian_Expression_Type eolian_expression_type_get(const Eolian_Expression *expr);
+EOLIAN_API Eolian_Expression_Type eolian_expression_type_get(const Eolian_Expression *expr);
/*
* @brief Get the binary operator of an expression.
@@ -3007,7 +3006,7 @@ EAPI Eolian_Expression_Type eolian_expression_type_get(const Eolian_Expression *
*
* @ingroup Eolian
*/
-EAPI Eolian_Binary_Operator eolian_expression_binary_operator_get(const Eolian_Expression *expr);
+EOLIAN_API Eolian_Binary_Operator eolian_expression_binary_operator_get(const Eolian_Expression *expr);
/*
* @brief Get the lhs (left hand side) of a binary expression.
@@ -3019,7 +3018,7 @@ EAPI Eolian_Binary_Operator eolian_expression_binary_operator_get(const Eolian_E
*
* @ingroup Eolian
*/
-EAPI const Eolian_Expression *eolian_expression_binary_lhs_get(const Eolian_Expression *expr);
+EOLIAN_API const Eolian_Expression *eolian_expression_binary_lhs_get(const Eolian_Expression *expr);
/*
* @brief Get the rhs (right hand side) of a binary expression.
@@ -3031,7 +3030,7 @@ EAPI const Eolian_Expression *eolian_expression_binary_lhs_get(const Eolian_Expr
*
* @ingroup Eolian
*/
-EAPI const Eolian_Expression *eolian_expression_binary_rhs_get(const Eolian_Expression *expr);
+EOLIAN_API const Eolian_Expression *eolian_expression_binary_rhs_get(const Eolian_Expression *expr);
/*
* @brief Get the unary operator of an expression.
@@ -3044,7 +3043,7 @@ EAPI const Eolian_Expression *eolian_expression_binary_rhs_get(const Eolian_Expr
*
* @ingroup Eolian
*/
-EAPI Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Expression *expr);
+EOLIAN_API Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Expression *expr);
/*
* @brief Get the expression of an unary expression.
@@ -3056,7 +3055,7 @@ EAPI Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Exp
*
* @ingroup Eolian
*/
-EAPI const Eolian_Expression *eolian_expression_unary_expression_get(const Eolian_Expression *expr);
+EOLIAN_API const Eolian_Expression *eolian_expression_unary_expression_get(const Eolian_Expression *expr);
/*
* @brief Get the value of an expression.
@@ -3072,7 +3071,23 @@ EAPI const Eolian_Expression *eolian_expression_unary_expression_get(const Eolia
*
* @ingroup Eolian
*/
-EAPI Eolian_Value eolian_expression_value_get(const Eolian_Expression *expr);
+EOLIAN_API Eolian_Value eolian_expression_value_get(const Eolian_Expression *expr);
+
+/*
+ * @brief Get the value of an expression into an out-param.
+ *
+ * @param[in] expr the expression.
+ * @param[out] val the value to fill.
+ * @return EINA_TRUE on success, EINA_FALSE on failure
+ *
+ * This is like eolian_expression_value_get, but it fills an out-param. On
+ * failure, nothing is guaranteed to be filled.
+ *
+ * @since 1.25
+ *
+ * @ingroup Eolian
+ */
+EOLIAN_API Eina_Bool eolian_expression_value_get_fill(const Eolian_Expression *expr, Eolian_Value *val);
/*
* @brief Get the documentation of a constant.
@@ -3082,7 +3097,7 @@ EAPI Eolian_Value eolian_expression_value_get(const Eolian_Expression *expr);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_constant_documentation_get(const Eolian_Constant *var);
+EOLIAN_API const Eolian_Documentation *eolian_constant_documentation_get(const Eolian_Constant *var);
/*
* @brief Get the base type of a constant.
@@ -3092,7 +3107,7 @@ EAPI const Eolian_Documentation *eolian_constant_documentation_get(const Eolian_
*
* @ingroup Eolian
*/
-EAPI const Eolian_Type *eolian_constant_type_get(const Eolian_Constant *var);
+EOLIAN_API const Eolian_Type *eolian_constant_type_get(const Eolian_Constant *var);
/*
* @brief Get the value of a constant.
@@ -3102,7 +3117,7 @@ EAPI const Eolian_Type *eolian_constant_type_get(const Eolian_Constant *var);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Expression *eolian_constant_value_get(const Eolian_Constant *var);
+EOLIAN_API const Eolian_Expression *eolian_constant_value_get(const Eolian_Constant *var);
/*
* @brief A helper function to get the full name of a constant.
@@ -3164,7 +3179,7 @@ eolian_constant_namespaces_get(const Eolian_Constant *tp)
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_constant_is_extern(const Eolian_Constant *var);
+EOLIAN_API Eina_Bool eolian_constant_is_extern(const Eolian_Constant *var);
/*
* @brief Get whether a constant is beta.
@@ -3187,7 +3202,7 @@ eolian_constant_is_beta(const Eolian_Constant *var)
*
* @ingroup Eolian
*/
-EAPI const char *eolian_error_message_get(const Eolian_Error *err);
+EOLIAN_API const char *eolian_error_message_get(const Eolian_Error *err);
/*
* @brief Get the documentation of an error declaration.
@@ -3197,7 +3212,7 @@ EAPI const char *eolian_error_message_get(const Eolian_Error *err);
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_error_documentation_get(const Eolian_Error *err);
+EOLIAN_API const Eolian_Documentation *eolian_error_documentation_get(const Eolian_Error *err);
/*
* @brief A helper function to get the full name of an error declaration.
@@ -3272,7 +3287,7 @@ eolian_error_is_beta(const Eolian_Error *err)
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_error_is_extern(const Eolian_Error *err);
+EOLIAN_API Eina_Bool eolian_error_is_extern(const Eolian_Error *err);
/*
* @brief Get the summary of the documentation.
@@ -3284,7 +3299,7 @@ EAPI Eina_Bool eolian_error_is_extern(const Eolian_Error *err);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_documentation_summary_get(const Eolian_Documentation *doc);
+EOLIAN_API const char *eolian_documentation_summary_get(const Eolian_Documentation *doc);
/*
* @brief Get the description of the documentation.
@@ -3297,7 +3312,7 @@ EAPI const char *eolian_documentation_summary_get(const Eolian_Documentation *do
*
* @ingroup Eolian
*/
-EAPI const char *eolian_documentation_description_get(const Eolian_Documentation *doc);
+EOLIAN_API const char *eolian_documentation_description_get(const Eolian_Documentation *doc);
/*
* @brief Get the "since" tag of the documentation.
@@ -3310,7 +3325,7 @@ EAPI const char *eolian_documentation_description_get(const Eolian_Documentation
*
* @ingroup Eolian
*/
-EAPI const char *eolian_documentation_since_get(const Eolian_Documentation *doc);
+EOLIAN_API const char *eolian_documentation_since_get(const Eolian_Documentation *doc);
/*
* @brief Split a documentation string into individual paragraphs.
@@ -3322,7 +3337,7 @@ EAPI const char *eolian_documentation_since_get(const Eolian_Documentation *doc)
*
* @ingroup Eolian
*/
-EAPI Eina_List *eolian_documentation_string_split(const char *doc);
+EOLIAN_API Eina_List *eolian_documentation_string_split(const char *doc);
/*
* @brief Tokenize a documentation paragraph.
@@ -3347,7 +3362,7 @@ EAPI Eina_List *eolian_documentation_string_split(const char *doc);
*
* @ingroup Eolian
*/
-EAPI const char *eolian_documentation_tokenize(const char *doc, Eolian_Doc_Token *ret);
+EOLIAN_API const char *eolian_documentation_tokenize(const char *doc, Eolian_Doc_Token *ret);
/*
* @brief Initialize a documentation token into an empty state.
@@ -3355,7 +3370,7 @@ EAPI const char *eolian_documentation_tokenize(const char *doc, Eolian_Doc_Token
* @param[in] tok the token
* @return the token type
*/
-EAPI void eolian_doc_token_init(Eolian_Doc_Token *tok);
+EOLIAN_API void eolian_doc_token_init(Eolian_Doc_Token *tok);
/*
* @brief Get the type of a documentation token.
@@ -3363,7 +3378,7 @@ EAPI void eolian_doc_token_init(Eolian_Doc_Token *tok);
* @param[in] tok the token
* @return the token type
*/
-EAPI Eolian_Doc_Token_Type eolian_doc_token_type_get(const Eolian_Doc_Token *tok);
+EOLIAN_API Eolian_Doc_Token_Type eolian_doc_token_type_get(const Eolian_Doc_Token *tok);
/*
* @brief Get the text of a documentation token.
@@ -3376,7 +3391,7 @@ EAPI Eolian_Doc_Token_Type eolian_doc_token_type_get(const Eolian_Doc_Token *tok
* @param[in] tok the token
* @return the token text
*/
-EAPI char *eolian_doc_token_text_get(const Eolian_Doc_Token *tok);
+EOLIAN_API char *eolian_doc_token_text_get(const Eolian_Doc_Token *tok);
/*
* @brief Get the thing that a reference token references.
@@ -3396,7 +3411,7 @@ EAPI char *eolian_doc_token_text_get(const Eolian_Doc_Token *tok);
* @param[out] data2 the secondary data
* @return the kind of reference this is
*/
-EAPI Eolian_Object_Type eolian_doc_token_ref_resolve(const Eolian_Doc_Token *tok, const Eolian_State *state, const Eolian_Object **data, const Eolian_Object **data2);
+EOLIAN_API Eolian_Object_Type eolian_doc_token_ref_resolve(const Eolian_Doc_Token *tok, const Eolian_State *state, const Eolian_Object **data, const Eolian_Object **data2);
#ifdef EFL_BETA_API_SUPPORT
@@ -3409,7 +3424,7 @@ EAPI Eolian_Object_Type eolian_doc_token_ref_resolve(const Eolian_Doc_Token *tok
*
* @ingroup Eolian
*/
-EAPI const char *eolian_typedecl_enum_legacy_prefix_get(const Eolian_Typedecl *tp);
+EOLIAN_API const char *eolian_typedecl_enum_legacy_prefix_get(const Eolian_Typedecl *tp);
/*
* @brief Get whether the given type is a reference.
@@ -3419,7 +3434,7 @@ EAPI const char *eolian_typedecl_enum_legacy_prefix_get(const Eolian_Typedecl *t
*
* @ingroup Eolian
*/
-EAPI Eina_Bool eolian_type_is_ptr(const Eolian_Type *tp);
+EOLIAN_API Eina_Bool eolian_type_is_ptr(const Eolian_Type *tp);
#endif /* EFL_BETA_API_SUPPORT */
@@ -3431,7 +3446,4 @@ EAPI Eina_Bool eolian_type_is_ptr(const Eolian_Type *tp);
} // extern "C" {
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/eolian/Eolian_Aux.h b/src/lib/eolian/Eolian_Aux.h
index 3c025ccd6a..ea83d39814 100644
--- a/src/lib/eolian/Eolian_Aux.h
+++ b/src/lib/eolian/Eolian_Aux.h
@@ -3,32 +3,6 @@
#include <Eolian.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -38,11 +12,11 @@ extern "C" {
*
* @date 2018 (created)
*
- * @section toc Table of Contents
+ * @section eolian_aux_toc Table of Contents
*
* @li @ref eolian_aux_main_intro
*
- * @section eolian_main_intro Introduction
+ * @section eolian_aux_main_intro Introduction
*
* This is the Eolian auxiliary library, providing API to support generators
* and other utilities which do not fit into the primary Eolian library. All
@@ -73,7 +47,7 @@ extern "C" {
*
* @ingroup Eolian
*/
-EAPI Eina_Hash *eolian_aux_state_class_children_find(const Eolian_State *state);
+EOLIAN_API Eina_Hash *eolian_aux_state_class_children_find(const Eolian_State *state);
/**
* @brief Get all APIs that are usable on the class.
@@ -100,7 +74,7 @@ EAPI Eina_Hash *eolian_aux_state_class_children_find(const Eolian_State *state);
*
* @ingroup Eolian
*/
-EAPI size_t eolian_aux_class_callables_get(const Eolian_Class *klass, Eina_List **funcs, Eina_List **events, size_t *ownfuncs, size_t *ownevs);
+EOLIAN_API size_t eolian_aux_class_callables_get(const Eolian_Class *klass, Eina_List **funcs, Eina_List **events, size_t *ownfuncs, size_t *ownevs);
/**
* @brief Get all implementations of a function in a state.
@@ -117,7 +91,7 @@ EAPI size_t eolian_aux_class_callables_get(const Eolian_Class *klass, Eina_List
*
* @ingroup Eolian
*/
-EAPI Eina_List *eolian_aux_function_all_implements_get(const Eolian_Function *func, Eina_Hash *class_children);
+EOLIAN_API Eina_List *eolian_aux_function_all_implements_get(const Eolian_Function *func, Eina_Hash *class_children);
/**
* @brief Get previous implementation in the inheritance hierarchy.
@@ -131,7 +105,7 @@ EAPI Eina_List *eolian_aux_function_all_implements_get(const Eolian_Function *fu
*
* @ingroup Eolian
*/
-EAPI const Eolian_Implement *eolian_aux_implement_parent_get(const Eolian_Implement *impl);
+EOLIAN_API const Eolian_Implement *eolian_aux_implement_parent_get(const Eolian_Implement *impl);
/**
* @brief Get documentation for an implementation.
@@ -147,7 +121,7 @@ EAPI const Eolian_Implement *eolian_aux_implement_parent_get(const Eolian_Implem
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_aux_implement_documentation_get(const Eolian_Implement *impl, Eolian_Function_Type ftype);
+EOLIAN_API const Eolian_Documentation *eolian_aux_implement_documentation_get(const Eolian_Implement *impl, Eolian_Function_Type ftype);
/**
* @brief Get documentation fallback for an implementation.
@@ -162,7 +136,7 @@ EAPI const Eolian_Documentation *eolian_aux_implement_documentation_get(const Eo
*
* @ingroup Eolian
*/
-EAPI const Eolian_Documentation *eolian_aux_implement_documentation_fallback_get(const Eolian_Implement *impl);
+EOLIAN_API const Eolian_Documentation *eolian_aux_implement_documentation_fallback_get(const Eolian_Implement *impl);
#endif
@@ -174,7 +148,4 @@ EAPI const Eolian_Documentation *eolian_aux_implement_documentation_fallback_get
} // extern "C" {
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/eolian/database_check.c b/src/lib/eolian/database_check.c
index 0626512076..96ea24d984 100644
--- a/src/lib/eolian/database_check.c
+++ b/src/lib/eolian/database_check.c
@@ -130,6 +130,11 @@ _check_class(const Eolian_Class *cl, Eina_Hash *depset, Eina_Hash *chash)
_add_dep(depset, icl->base.unit);
eina_iterator_free(itr);
+ itr = eina_list_iterator_new(cl->composite);
+ EINA_ITERATOR_FOREACH(itr, icl)
+ _add_dep(depset, icl->base.unit);
+ eina_iterator_free(itr);
+
const Eolian_Function *fid;
itr = eina_list_iterator_new(cl->properties);
EINA_ITERATOR_FOREACH(itr, fid)
@@ -207,10 +212,9 @@ _check_constant(const Eolian_Constant *v, Eina_Hash *depset, Eina_Hash *chash)
_check_expr(v->value, depset);
}
-static Eina_Bool
+static void
_check_unit(const Eolian_Unit *unit)
{
- Eina_Bool ret = EINA_TRUE;
Eina_Hash *depset = eina_hash_pointer_new(NULL);
/* collect all real dependencies of the unit */
@@ -248,13 +252,11 @@ _check_unit(const Eolian_Unit *unit)
{
eolian_state_log(unit->state, "%s: unused dependency %s",
unit->file, cunit->file);
- ret = EINA_FALSE;
}
}
eina_iterator_free(citr);
eina_hash_free(depset);
- return ret;
}
static Eina_Bool
@@ -263,6 +265,9 @@ _check_namespaces(const Eolian_Unit *src)
Eina_Bool ret = EINA_TRUE;
Eina_Iterator *itr = eina_hash_iterator_data_new(src->objects);
const Eolian_Object *obj;
+
+ Eina_Bool check_beta = !!getenv("EOLIAN_CHECK_NAMESPACES_BETA");
+
EINA_ITERATOR_FOREACH(itr, obj)
{
char const *dot = strrchr(obj->name, '.');
@@ -272,7 +277,7 @@ _check_namespaces(const Eolian_Unit *src)
dot - obj->name);
const Eolian_Object *cobj = eina_hash_find(src->objects, ssr);
eina_stringshare_del(ssr);
- if (cobj)
+ if (cobj && (check_beta || !eolian_object_is_beta(cobj)))
{
eolian_state_log_obj(src->state, obj,
"the namespace of object '%s' conflicts with %s:%d:%d",
@@ -293,10 +298,7 @@ database_check(const Eolian_State *state)
Eina_Iterator *itr = eolian_state_units_get(state);
const Eolian_Unit *unit;
EINA_ITERATOR_FOREACH(itr, unit)
- {
- if (!_check_unit(unit))
- ret = EINA_FALSE;
- }
+ _check_unit(unit);
eina_iterator_free(itr);
/* namespace checks */
diff --git a/src/lib/eolian/database_class_api.c b/src/lib/eolian/database_class_api.c
index 971c0bacb1..2860eaf49c 100644
--- a/src/lib/eolian/database_class_api.c
+++ b/src/lib/eolian/database_class_api.c
@@ -6,76 +6,76 @@
#include "eolian_database.h"
#include "eolian_priv.h"
-EAPI Eolian_Class_Type
+EOLIAN_API Eolian_Class_Type
eolian_class_type_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EOLIAN_CLASS_UNKNOWN_TYPE);
return cl->type;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_class_documentation_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return cl->doc;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_class_c_prefix_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return cl->c_prefix;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_class_event_c_prefix_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return cl->ev_prefix;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_class_data_type_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return cl->data_type;
}
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_class_parent_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return cl->parent;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_class_requires_get(const Eolian_Class *cl)
{
return eina_list_iterator_new(cl->requires);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_class_extensions_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return (cl->extends ? eina_list_iterator_new(cl->extends) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_class_implements_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return (cl->implements ? eina_list_iterator_new(cl->implements) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_class_constructors_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return (cl->constructors ? eina_list_iterator_new(cl->constructors) : NULL);
}
-EAPI const Eolian_Function *
+EOLIAN_API const Eolian_Function *
eolian_class_function_by_name_get(const Eolian_Class *cl, const char *func_name, Eolian_Function_Type f_type)
{
Eina_List *itr;
@@ -106,7 +106,7 @@ eolian_class_function_by_name_get(const Eolian_Class *cl, const char *func_name,
return NULL;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_class_functions_get(const Eolian_Class *cl, Eolian_Function_Type foo_type)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
@@ -120,35 +120,35 @@ eolian_class_functions_get(const Eolian_Class *cl, Eolian_Function_Type foo_type
}
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_class_events_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return (cl->events ? eina_list_iterator_new(cl->events) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_class_parts_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return (cl->parts ? eina_list_iterator_new(cl->parts) : NULL);
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_class_ctor_enable_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
return cl->class_ctor_enable;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_class_dtor_enable_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
return cl->class_dtor_enable;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_class_c_get_function_name_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
@@ -176,7 +176,7 @@ eolian_class_c_get_function_name_get(const Eolian_Class *cl)
return ret;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_class_c_macro_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
@@ -204,7 +204,7 @@ eolian_class_c_macro_get(const Eolian_Class *cl)
return ret;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_class_c_data_type_get(const Eolian_Class *cl)
{
char buf[512];
diff --git a/src/lib/eolian/database_constructor_api.c b/src/lib/eolian/database_constructor_api.c
index bedf9ab7da..f1794df409 100644
--- a/src/lib/eolian/database_constructor_api.c
+++ b/src/lib/eolian/database_constructor_api.c
@@ -5,14 +5,14 @@
#include <Eina.h>
#include "eolian_database.h"
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_constructor_class_get(const Eolian_Constructor *ctor)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ctor, NULL);
return ctor->klass;
}
-EAPI const Eolian_Function *
+EOLIAN_API const Eolian_Function *
eolian_constructor_function_get(const Eolian_Constructor *ctor)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ctor, NULL);
@@ -23,7 +23,7 @@ eolian_constructor_function_get(const Eolian_Constructor *ctor)
ctor->base.name + strlen(klass->base.name) + 1, EOLIAN_UNRESOLVED);
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_constructor_is_optional(const Eolian_Constructor *ctor)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ctor, EINA_FALSE);
diff --git a/src/lib/eolian/database_event_api.c b/src/lib/eolian/database_event_api.c
index 2c0647d5c9..cde812fdc8 100644
--- a/src/lib/eolian/database_event_api.c
+++ b/src/lib/eolian/database_event_api.c
@@ -5,7 +5,7 @@
#include <Eina.h>
#include "eolian_database.h"
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_event_type_get(const Eolian_Event *event)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(event, NULL);
@@ -14,42 +14,42 @@ eolian_event_type_get(const Eolian_Event *event)
return event->type;
}
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_event_class_get(const Eolian_Event *event)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(event, NULL);
return event->klass;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_event_documentation_get(const Eolian_Event *event)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(event, NULL);
return event->doc;
}
-EAPI Eolian_Object_Scope
+EOLIAN_API Eolian_Object_Scope
eolian_event_scope_get(const Eolian_Event *event)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(event, EOLIAN_SCOPE_UNKNOWN);
return event->scope;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_event_is_hot(const Eolian_Event *event)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(event, EINA_FALSE);
return event->is_hot;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_event_is_restart(const Eolian_Event *event)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(event, EINA_FALSE);
return event->is_restart;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_event_c_macro_get(const Eolian_Event *event)
{
char buf[512];
@@ -63,7 +63,7 @@ eolian_event_c_macro_get(const Eolian_Event *event)
return eina_stringshare_add(buf);
}
-EAPI const Eolian_Event *
+EOLIAN_API const Eolian_Event *
eolian_class_event_by_name_get(const Eolian_Class *klass, const char *event_name)
{
Eina_List *itr;
diff --git a/src/lib/eolian/database_expr.c b/src/lib/eolian/database_expr.c
index 38794a2f3c..b6d79bb19c 100644
--- a/src/lib/eolian/database_expr.c
+++ b/src/lib/eolian/database_expr.c
@@ -529,7 +529,10 @@ eval_exp(const Eolian_Unit *unit, Eolian_Expression *expr,
/* assert int here, as we're clearly dealing with enum */
if (!(mask & EOLIAN_MASK_INT))
- return expr_type_error(expr, EOLIAN_MASK_INT, mask);
+ {
+ free(fulln);
+ return expr_type_error(expr, EOLIAN_MASK_INT, mask);
+ }
etpd = eolian_unit_alias_by_name_get(unit, fulln);
if (etpd && cb) cb((const Eolian_Object *)etpd, data);
diff --git a/src/lib/eolian/database_expr_api.c b/src/lib/eolian/database_expr_api.c
index 2d3f81c73d..2917107c6d 100644
--- a/src/lib/eolian/database_expr_api.c
+++ b/src/lib/eolian/database_expr_api.c
@@ -6,7 +6,7 @@
#include "eolian_database.h"
-EAPI Eolian_Value
+EOLIAN_API Eolian_Value
eolian_expression_eval(const Eolian_Expression *expr, Eolian_Expression_Mask m)
{
Eolian_Value err;
@@ -15,6 +15,19 @@ eolian_expression_eval(const Eolian_Expression *expr, Eolian_Expression_Mask m)
return database_expr_eval(NULL, (Eolian_Expression *)expr, m, NULL, NULL);
}
+EOLIAN_API Eina_Bool
+eolian_expression_eval_fill(const Eolian_Expression *expr,
+ Eolian_Expression_Mask m, Eolian_Value *val)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(expr, EINA_FALSE);
+ Eolian_Value ret = database_expr_eval(NULL, (Eolian_Expression *)expr, m,
+ NULL, NULL);
+ if (ret.type == EOLIAN_EXPR_UNKNOWN)
+ return EINA_FALSE;
+ *val = ret;
+ return EINA_TRUE;
+}
+
static void
_append_char_escaped(Eina_Strbuf *buf, char c)
{
@@ -67,7 +80,7 @@ _number_to_str(const Eolian_Value *v, Eina_Strbuf *buf)
}
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_expression_value_to_literal(const Eolian_Value *val)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(val, NULL);
@@ -192,7 +205,7 @@ _expr_serialize(const Eolian_Expression *expr, Eina_Strbuf *buf, Eina_Bool outer
return EINA_TRUE;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_expression_serialize(const Eolian_Expression *expr)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, NULL);
@@ -207,14 +220,14 @@ eolian_expression_serialize(const Eolian_Expression *expr)
return ret;
}
-EAPI Eolian_Expression_Type
+EOLIAN_API Eolian_Expression_Type
eolian_expression_type_get(const Eolian_Expression *expr)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, EOLIAN_EXPR_UNKNOWN);
return expr->type;
}
-EAPI Eolian_Binary_Operator
+EOLIAN_API Eolian_Binary_Operator
eolian_expression_binary_operator_get(const Eolian_Expression *expr)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, EOLIAN_BINOP_INVALID);
@@ -223,7 +236,7 @@ eolian_expression_binary_operator_get(const Eolian_Expression *expr)
return expr->binop;
}
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_expression_binary_lhs_get(const Eolian_Expression *expr)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, NULL);
@@ -231,7 +244,7 @@ eolian_expression_binary_lhs_get(const Eolian_Expression *expr)
return expr->lhs;
}
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_expression_binary_rhs_get(const Eolian_Expression *expr)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, NULL);
@@ -239,7 +252,7 @@ eolian_expression_binary_rhs_get(const Eolian_Expression *expr)
return expr->rhs;
}
-EAPI Eolian_Unary_Operator
+EOLIAN_API Eolian_Unary_Operator
eolian_expression_unary_operator_get(const Eolian_Expression *expr)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, EOLIAN_UNOP_INVALID);
@@ -248,7 +261,7 @@ eolian_expression_unary_operator_get(const Eolian_Expression *expr)
return expr->unop;
}
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_expression_unary_expression_get(const Eolian_Expression *expr)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, NULL);
@@ -256,7 +269,7 @@ eolian_expression_unary_expression_get(const Eolian_Expression *expr)
return expr->expr;
}
-EAPI Eolian_Value
+EOLIAN_API Eolian_Value
eolian_expression_value_get(const Eolian_Expression *expr)
{
Eolian_Value v;
@@ -269,3 +282,15 @@ eolian_expression_value_get(const Eolian_Expression *expr)
v.value = expr->value;
return v;
}
+
+EOLIAN_API Eina_Bool
+eolian_expression_value_get_fill(const Eolian_Expression *expr, Eolian_Value *val)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(expr, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(expr->type != EOLIAN_EXPR_UNKNOWN
+ && expr->type != EOLIAN_EXPR_BINARY
+ && expr->type != EOLIAN_EXPR_UNARY, EINA_FALSE);
+ val->type = expr->type;
+ val->value = expr->value;
+ return EINA_TRUE;
+}
diff --git a/src/lib/eolian/database_function_api.c b/src/lib/eolian/database_function_api.c
index ca9454449b..9fa41bf73b 100644
--- a/src/lib/eolian/database_function_api.c
+++ b/src/lib/eolian/database_function_api.c
@@ -5,7 +5,7 @@
#include <Eina.h>
#include "eolian_database.h"
-EAPI Eolian_Object_Scope
+EOLIAN_API Eolian_Object_Scope
eolian_function_scope_get(const Eolian_Function *fid, Eolian_Function_Type ftype)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EOLIAN_SCOPE_UNKNOWN);
@@ -30,7 +30,7 @@ eolian_function_scope_get(const Eolian_Function *fid, Eolian_Function_Type ftype
}
}
-EAPI Eolian_Function_Type
+EOLIAN_API Eolian_Function_Type
eolian_function_type_get(const Eolian_Function *fid)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EOLIAN_UNRESOLVED);
@@ -80,7 +80,7 @@ _get_abbreviated_name(const char *prefix, const char *fname)
return ret;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_function_full_c_name_get(const Eolian_Function *foo_id,
Eolian_Function_Type ftype)
{
@@ -109,21 +109,21 @@ eolian_function_full_c_name_get(const Eolian_Function *foo_id,
return ret;
}
-EAPI const Eolian_Implement *
+EOLIAN_API const Eolian_Implement *
eolian_function_implement_get(const Eolian_Function *fid)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
return fid->impl;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_function_is_static(const Eolian_Function *fid)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
return fid->is_static;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_function_is_constructor(const Eolian_Function *fid, const Eolian_Class *klass)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
@@ -152,7 +152,7 @@ _get_prop_values(const Eolian_Function *fid, Eolian_Function_Type ftype)
return l;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_property_keys_get(const Eolian_Function *fid, Eolian_Function_Type ftype)
{
Eina_List *l = NULL;
@@ -163,7 +163,7 @@ eolian_property_keys_get(const Eolian_Function *fid, Eolian_Function_Type ftype)
return (l ? eina_list_iterator_new(l) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_property_values_get(const Eolian_Function *fid, Eolian_Function_Type ftype)
{
Eina_List *l = NULL;
@@ -174,7 +174,7 @@ eolian_property_values_get(const Eolian_Function *fid, Eolian_Function_Type ftyp
return (l ? eina_list_iterator_new(l) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_function_parameters_get(const Eolian_Function *fid)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
@@ -183,7 +183,7 @@ eolian_function_parameters_get(const Eolian_Function *fid)
return (fid->params ? eina_list_iterator_new(fid->params) : NULL);
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_function_return_type_get(const Eolian_Function *fid, Eolian_Function_Type ftype)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
@@ -209,7 +209,7 @@ eolian_function_return_type_get(const Eolian_Function *fid, Eolian_Function_Type
}
}
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_function_return_default_value_get(const Eolian_Function *fid, Eolian_Function_Type ftype)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
@@ -235,7 +235,7 @@ eolian_function_return_default_value_get(const Eolian_Function *fid, Eolian_Func
}
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_function_return_documentation_get(const Eolian_Function *fid, Eolian_Function_Type ftype)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
@@ -261,7 +261,7 @@ eolian_function_return_documentation_get(const Eolian_Function *fid, Eolian_Func
}
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_function_return_allow_unused(const Eolian_Function *fid,
Eolian_Function_Type ftype)
{
@@ -288,7 +288,7 @@ eolian_function_return_allow_unused(const Eolian_Function *fid,
}
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_function_return_is_by_ref(const Eolian_Function *fid,
Eolian_Function_Type ftype)
{
@@ -315,7 +315,7 @@ eolian_function_return_is_by_ref(const Eolian_Function *fid,
}
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_function_return_is_move(const Eolian_Function *fid,
Eolian_Function_Type ftype)
{
@@ -342,7 +342,7 @@ eolian_function_return_is_move(const Eolian_Function *fid,
}
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_function_return_c_type_get(const Eolian_Function *fid,
Eolian_Function_Type ftype)
{
@@ -382,14 +382,14 @@ eolian_function_return_c_type_get(const Eolian_Function *fid,
return ret;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_function_object_is_const(const Eolian_Function *fid)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
return fid->obj_is_const;
}
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_function_class_get(const Eolian_Function *fid)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
diff --git a/src/lib/eolian/database_function_parameter_api.c b/src/lib/eolian/database_function_parameter_api.c
index f3b03388d8..80d7dbf7f3 100644
--- a/src/lib/eolian/database_function_parameter_api.c
+++ b/src/lib/eolian/database_function_parameter_api.c
@@ -5,56 +5,56 @@
#include <Eina.h>
#include "eolian_database.h"
-EAPI Eolian_Parameter_Direction
+EOLIAN_API Eolian_Parameter_Direction
eolian_parameter_direction_get(const Eolian_Function_Parameter *param)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(param, EOLIAN_PARAMETER_UNKNOWN);
return param->param_dir;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_parameter_type_get(const Eolian_Function_Parameter *param)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(param, NULL);
return param->type;
}
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_parameter_default_value_get(const Eolian_Function_Parameter *param)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(param, NULL);
return param->value;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_parameter_documentation_get(const Eolian_Function_Parameter *param)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(param, NULL);
return param->doc;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_parameter_is_optional(const Eolian_Function_Parameter *param)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(param, EINA_FALSE);
return param->optional;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_parameter_is_move(const Eolian_Function_Parameter *param)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(param, EINA_FALSE);
return param->move;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_parameter_is_by_ref(const Eolian_Function_Parameter *param)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(param, EINA_FALSE);
return param->by_ref;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_parameter_c_type_get(const Eolian_Function_Parameter *param_desc,
Eina_Bool as_return)
{
diff --git a/src/lib/eolian/database_implement_api.c b/src/lib/eolian/database_implement_api.c
index a373a77911..6f7ce79f0a 100644
--- a/src/lib/eolian/database_implement_api.c
+++ b/src/lib/eolian/database_implement_api.c
@@ -5,21 +5,21 @@
#include <Eina.h>
#include "eolian_database.h"
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_implement_class_get(const Eolian_Implement *impl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(impl, NULL);
return impl->klass;
}
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_implement_implementing_class_get(const Eolian_Implement *impl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(impl, NULL);
return impl->implklass;
}
-EAPI const Eolian_Function *
+EOLIAN_API const Eolian_Function *
eolian_implement_function_get(const Eolian_Implement *impl,
Eolian_Function_Type *func_type)
{
@@ -43,7 +43,7 @@ eolian_implement_function_get(const Eolian_Implement *impl,
return impl->foo_id;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_implement_documentation_get(const Eolian_Implement *impl,
Eolian_Function_Type ftype)
{
@@ -56,7 +56,7 @@ eolian_implement_documentation_get(const Eolian_Implement *impl,
}
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_implement_is_auto(const Eolian_Implement *impl, Eolian_Function_Type ftype)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE);
@@ -75,7 +75,7 @@ eolian_implement_is_auto(const Eolian_Implement *impl, Eolian_Function_Type ftyp
}
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_implement_is_empty(const Eolian_Implement *impl, Eolian_Function_Type ftype)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE);
@@ -94,7 +94,7 @@ eolian_implement_is_empty(const Eolian_Implement *impl, Eolian_Function_Type fty
}
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_implement_is_pure_virtual(const Eolian_Implement *impl, Eolian_Function_Type ftype)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE);
@@ -113,14 +113,14 @@ eolian_implement_is_pure_virtual(const Eolian_Implement *impl, Eolian_Function_T
}
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_implement_is_prop_get(const Eolian_Implement *impl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE);
return impl->is_prop_get;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_implement_is_prop_set(const Eolian_Implement *impl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE);
diff --git a/src/lib/eolian/database_part_api.c b/src/lib/eolian/database_part_api.c
index 4fcd7c63fd..0b6225f275 100644
--- a/src/lib/eolian/database_part_api.c
+++ b/src/lib/eolian/database_part_api.c
@@ -5,14 +5,14 @@
#include <Eina.h>
#include "eolian_database.h"
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_part_class_get(const Eolian_Part *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
return part->klass;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_part_documentation_get(const Eolian_Part *part)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c
index 53d531cc54..0df427bf62 100644
--- a/src/lib/eolian/database_type.c
+++ b/src/lib/eolian/database_type.c
@@ -121,6 +121,8 @@ database_type_to_str(const Eolian_Type *tp,
else
eina_strbuf_append(buf, tp->base.c_name);
}
+ else if (tp->type == EOLIAN_TYPE_ERROR)
+ eina_strbuf_append(buf, "Eina_Error");
else if (tp->type == EOLIAN_TYPE_VOID)
eina_strbuf_append(buf, "void");
else if (tp->type == EOLIAN_TYPE_UNDEFINED)
diff --git a/src/lib/eolian/database_type_api.c b/src/lib/eolian/database_type_api.c
index b5507fd504..14f1b088ab 100644
--- a/src/lib/eolian/database_type_api.c
+++ b/src/lib/eolian/database_type_api.c
@@ -6,28 +6,28 @@
#include "eolian_database.h"
#include "eo_lexer.h"
-EAPI Eolian_Type_Type
+EOLIAN_API Eolian_Type_Type
eolian_type_type_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EOLIAN_TYPE_UNKNOWN_TYPE);
return tp->type;
}
-EAPI Eolian_Type_Builtin_Type
+EOLIAN_API Eolian_Type_Builtin_Type
eolian_type_builtin_type_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EOLIAN_TYPE_BUILTIN_INVALID);
return tp->btype;
}
-EAPI Eolian_Typedecl_Type
+EOLIAN_API Eolian_Typedecl_Type
eolian_typedecl_type_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EOLIAN_TYPEDECL_UNKNOWN);
return tp->type;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
@@ -36,7 +36,7 @@ eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp)
return eina_list_iterator_new(tp->field_list);
}
-EAPI const Eolian_Struct_Type_Field *
+EOLIAN_API const Eolian_Struct_Type_Field *
eolian_typedecl_struct_field_get(const Eolian_Typedecl *tp, const char *field)
{
Eolian_Struct_Type_Field *sf = NULL;
@@ -49,35 +49,35 @@ eolian_typedecl_struct_field_get(const Eolian_Typedecl *tp, const char *field)
return sf;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_typedecl_struct_field_documentation_get(const Eolian_Struct_Type_Field *fl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
return fl->doc;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_typedecl_struct_field_type_get(const Eolian_Struct_Type_Field *fl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
return fl->type;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_typedecl_struct_field_is_by_ref(const Eolian_Struct_Type_Field *fl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, EINA_FALSE);
return fl->by_ref;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_typedecl_struct_field_is_move(const Eolian_Struct_Type_Field *fl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, EINA_FALSE);
return fl->move;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_typedecl_struct_field_c_type_get(const Eolian_Struct_Type_Field *fl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
@@ -88,7 +88,7 @@ eolian_typedecl_struct_field_c_type_get(const Eolian_Struct_Type_Field *fl)
return ret;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_typedecl_enum_fields_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
@@ -97,7 +97,7 @@ eolian_typedecl_enum_fields_get(const Eolian_Typedecl *tp)
return eina_list_iterator_new(tp->field_list);
}
-EAPI const Eolian_Enum_Type_Field *
+EOLIAN_API const Eolian_Enum_Type_Field *
eolian_typedecl_enum_field_get(const Eolian_Typedecl *tp, const char *field)
{
Eolian_Enum_Type_Field *ef = NULL;
@@ -110,7 +110,7 @@ eolian_typedecl_enum_field_get(const Eolian_Typedecl *tp, const char *field)
return ef;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_typedecl_enum_field_c_constant_get(const Eolian_Enum_Type_Field *fl)
{
Eina_Stringshare *ret;
@@ -121,7 +121,7 @@ eolian_typedecl_enum_field_c_constant_get(const Eolian_Enum_Type_Field *fl)
if (fl->base_enum->legacy)
eina_strbuf_append(buf, fl->base_enum->legacy);
else
- eina_strbuf_append(buf, fl->base_enum->base.name);
+ eina_strbuf_append(buf, fl->base_enum->base.c_name);
eina_strbuf_append_char(buf, '_');
eina_strbuf_append(buf, fl->base.name);
bufp = eina_strbuf_string_steal(buf);
@@ -133,14 +133,14 @@ eolian_typedecl_enum_field_c_constant_get(const Eolian_Enum_Type_Field *fl)
return ret;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_typedecl_enum_field_documentation_get(const Eolian_Enum_Type_Field *fl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
return fl->doc;
}
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_typedecl_enum_field_value_get(const Eolian_Enum_Type_Field *fl, Eina_Bool force)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
@@ -148,7 +148,7 @@ eolian_typedecl_enum_field_value_get(const Eolian_Enum_Type_Field *fl, Eina_Bool
return fl->value;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_typedecl_enum_legacy_prefix_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
@@ -157,28 +157,28 @@ eolian_typedecl_enum_legacy_prefix_get(const Eolian_Typedecl *tp)
return tp->legacy;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_typedecl_documentation_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
return tp->doc;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_type_base_type_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
return tp->base_type;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_type_next_type_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
return tp->next_type;
}
-EAPI const Eolian_Typedecl *
+EOLIAN_API const Eolian_Typedecl *
eolian_type_typedecl_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
@@ -187,14 +187,14 @@ eolian_type_typedecl_get(const Eolian_Type *tp)
return tp->tdecl;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_typedecl_base_type_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
return tp->base_type;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_type_aliased_base_get(const Eolian_Type *tp)
{
if (!tp || tp->type != EOLIAN_TYPE_REGULAR || tp->is_ptr)
@@ -205,7 +205,7 @@ eolian_type_aliased_base_get(const Eolian_Type *tp)
return tp;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_typedecl_aliased_base_get(const Eolian_Typedecl *tp)
{
if (!tp || tp->type != EOLIAN_TYPEDECL_ALIAS)
@@ -213,7 +213,7 @@ eolian_typedecl_aliased_base_get(const Eolian_Typedecl *tp)
return eolian_type_aliased_base_get(tp->base_type);
}
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_type_class_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
@@ -222,7 +222,7 @@ eolian_type_class_get(const Eolian_Type *tp)
return tp->klass;
}
-EAPI const Eolian_Error *
+EOLIAN_API const Eolian_Error *
eolian_type_error_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
@@ -231,35 +231,35 @@ eolian_type_error_get(const Eolian_Type *tp)
return tp->error;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_type_is_move(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
return tp->move;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_type_is_const(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
return tp->is_const;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_type_is_ptr(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
return tp->is_ptr;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_typedecl_is_extern(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
return tp->is_extern;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_type_c_type_get(const Eolian_Type *tp)
{
Eina_Stringshare *ret;
@@ -272,7 +272,7 @@ eolian_type_c_type_get(const Eolian_Type *tp)
return ret;
}
-EAPI Eina_Stringshare *
+EOLIAN_API Eina_Stringshare *
eolian_typedecl_c_type_get(const Eolian_Typedecl *tp)
{
Eina_Stringshare *ret;
@@ -285,14 +285,14 @@ eolian_typedecl_c_type_get(const Eolian_Typedecl *tp)
return ret;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_typedecl_free_func_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
return tp->freefunc;
}
-EAPI const Eolian_Function *
+EOLIAN_API const Eolian_Function *
eolian_typedecl_function_pointer_get(const Eolian_Typedecl *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c
index b1af2185ef..91a679bc33 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -15,7 +15,6 @@ typedef struct _Validate_State
Eina_Bool stable;
Eina_Bool in_tree;
Eina_Bool unimplemented_beta;
- Eina_Bool verify_since;
const char *since_ver;
} Validate_State;
@@ -94,7 +93,7 @@ _validate_docstr(Eina_Stringshare *str, const Eolian_Object *info, Eina_List **r
static Eina_Bool
_validate_doc_since(Validate_State *vals, Eolian_Documentation *doc)
{
- if (!doc || !vals->stable || !vals->verify_since)
+ if (!doc || !vals->stable)
return EINA_TRUE;
if (doc->since)
@@ -286,7 +285,8 @@ _validate_typedecl(Validate_State *vals, Eolian_Typedecl *tp)
}
static Eina_Bool
-_validate_by_ref(Eolian_Type *tp, Eina_Bool by_ref, Eina_Bool move)
+_validate_by_ref(Validate_State *vals, Eolian_Type *tp, Eina_Bool by_ref,
+ Eina_Bool move)
{
Eina_Bool maybe_ownable =
database_type_is_ownable(tp->base.unit, tp, EINA_FALSE, NULL);
@@ -302,6 +302,15 @@ _validate_by_ref(Eolian_Type *tp, Eina_Bool by_ref, Eina_Bool move)
if (tp->btype == EOLIAN_TYPE_BUILTIN_FUTURE)
return EINA_TRUE;
+ if (tp->tdecl && (tp->tdecl->type == EOLIAN_TYPEDECL_STRUCT_OPAQUE))
+ {
+ if (vals->stable && !maybe_ownable && !by_ref)
+ {
+ _eo_parser_log(&tp->base, "opaque structs must be by reference");
+ return EINA_FALSE;
+ }
+ }
+
/* not marked @move, or marked @by_ref; just validate */
if (!move || by_ref)
return EINA_TRUE;
@@ -323,7 +332,7 @@ _validate_type_by_ref(Validate_State *vals, Eolian_Type *tp,
if (!_validate_type(vals, tp, by_ref, is_ret))
return EINA_FALSE;
- return _validate_by_ref(tp, by_ref, move);
+ return _validate_by_ref(vals, tp, by_ref, move);
}
static Eina_Bool
@@ -400,9 +409,9 @@ _validate_type(Validate_State *vals, Eolian_Type *tp, Eina_Bool by_ref,
int kwid = eo_lexer_keyword_str_to_id(tp->base.name);
if (kwid > KW_void)
tp->ownable = EINA_TRUE;
- if (kwid == KW_hash && vals->stable)
+ if ((kwid == KW_hash || kwid == KW_list) && vals->stable)
{
- _eo_parser_log(&tp->base, "hashes not allowed in stable context");
+ _eo_parser_log(&tp->base, "hashes and lists not allowed in stable context");
return EINA_FALSE;
}
Eolian_Type *itp = tp->base_type;
@@ -1680,7 +1689,6 @@ database_validate(const Eolian_Unit *src)
EINA_TRUE,
!!getenv("EFL_RUN_IN_TREE"),
!!getenv("EOLIAN_CLASS_UNIMPLEMENTED_BETA_WARN"),
- !!getenv("EOLIAN_ENFORCE_SINCE")
};
/* do an initial pass to refill inherits */
diff --git a/src/lib/eolian/database_var_api.c b/src/lib/eolian/database_var_api.c
index b6f2d1f1bc..18eaa69e21 100644
--- a/src/lib/eolian/database_var_api.c
+++ b/src/lib/eolian/database_var_api.c
@@ -5,28 +5,28 @@
#include <Eina.h>
#include "eolian_database.h"
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_constant_documentation_get(const Eolian_Constant *var)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(var, NULL);
return var->doc;
}
-EAPI const Eolian_Type *
+EOLIAN_API const Eolian_Type *
eolian_constant_type_get(const Eolian_Constant *var)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(var, NULL);
return var->base_type;
}
-EAPI const Eolian_Expression *
+EOLIAN_API const Eolian_Expression *
eolian_constant_value_get(const Eolian_Constant *var)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(var, NULL);
return var->value;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_constant_is_extern(const Eolian_Constant *var)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(var, EINA_FALSE);
diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c
index 365ff34303..ce54877747 100644
--- a/src/lib/eolian/eo_lexer.c
+++ b/src/lib/eolian/eo_lexer.c
@@ -80,7 +80,7 @@ static const char * const ctypes[] =
"Eina_Value", "Eina_Value *", "Eina_Binbuf *", "Efl_Event *",
"char *", "const char *", "Eina_Stringshare *", "Eina_Strbuf *",
- "Eina_Hash *",
+ "Eina_Hash *",
"void *",
"function",
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 253e99e929..e6d80dd611 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -219,6 +219,7 @@ parse_c_name(Eo_Lexer *ls)
check_match(ls, ')', '(', pline, pcol);
return NULL; /* unreachable */
}
+ eo_lexer_get(ls);
return cname;
}
@@ -481,10 +482,7 @@ parse_struct(Eo_Lexer *ls, const char *name, Eina_Bool is_extern,
def->ownable = EINA_TRUE;
}
if (cname)
- {
- def->base.c_name = cname;
- eo_lexer_dtor_pop(ls);
- }
+ def->base.c_name = eina_stringshare_ref(cname);
else
def->base.c_name = make_c_name(name);
/* we can't know the order, pop when both are filled */
@@ -566,7 +564,7 @@ parse_enum(Eo_Lexer *ls, const char *name, Eina_Bool is_extern,
def->base.name = name;
if (cname)
{
- def->base.c_name = cname;
+ def->base.c_name = eina_stringshare_ref(cname);
eo_lexer_dtor_pop(ls);
}
else
@@ -865,7 +863,7 @@ tags_done:
def->base.name = eina_stringshare_add(eina_strbuf_string_get(buf));
if (cname)
{
- def->base.c_name = cname;
+ def->base.c_name = eina_stringshare_ref(cname);
eo_lexer_dtor_pop(ls);
}
else
@@ -922,7 +920,7 @@ tags_done:
def->base.name = eina_stringshare_add(eina_strbuf_string_get(buf));
if (cname)
{
- def->base.c_name = cname;
+ def->base.c_name = eina_stringshare_ref(cname);
eo_lexer_dtor_pop(ls);
}
else
@@ -986,7 +984,7 @@ tags_done:
def->base.name = eina_stringshare_add(eina_strbuf_string_get(buf));
if (cname)
{
- def->base.c_name = cname;
+ def->base.c_name = eina_stringshare_ref(cname);
eo_lexer_dtor_pop(ls);
}
else
@@ -1448,7 +1446,7 @@ tags_done:
def->base.name = eina_stringshare_add(eina_strbuf_string_get(buf));
if (cname)
{
- def->base.c_name = cname;
+ def->base.c_name = eina_stringshare_ref(cname);
eo_lexer_dtor_pop(ls);
}
else
@@ -2263,7 +2261,7 @@ tags_done:
ls->klass->base.name = eina_stringshare_add(eina_strbuf_string_get(buf));
if (cname)
{
- ls->klass->base.c_name = cname;
+ ls->klass->base.c_name = eina_stringshare_ref(cname);
eo_lexer_dtor_pop(ls);
}
else
@@ -2490,7 +2488,7 @@ postparams:
}
def->base.name = name;
if (cname)
- def->base.c_name = cname;
+ def->base.c_name = eina_stringshare_ref(cname);
/* we can't know the order, pop when both are filled */
if (freefunc && cname)
{
diff --git a/src/lib/eolian/eo_parser.h b/src/lib/eolian/eo_parser.h
index 52029138fc..084d8b822b 100644
--- a/src/lib/eolian/eo_parser.h
+++ b/src/lib/eolian/eo_parser.h
@@ -1,8 +1,9 @@
#ifndef __EO_PARSER_H__
#define __EO_PARSER_H__
+#include "eolian_api.h"
#include "eo_lexer.h"
Eolian_Unit *eo_parser_database_fill(Eolian_Unit *parent, const char *filename, Eina_Bool eot);
-#endif /* __EO_PARSER_H__ */ \ No newline at end of file
+#endif /* __EO_PARSER_H__ */
diff --git a/src/lib/eolian/eolian.c b/src/lib/eolian/eolian.c
index 81067ebf44..00a96a5ce3 100644
--- a/src/lib/eolian/eolian.c
+++ b/src/lib/eolian/eolian.c
@@ -9,7 +9,7 @@ static int _eolian_init_counter = 0;
int _eolian_log_dom = -1;
Eina_Prefix *_eolian_prefix = NULL;
-EAPI int eolian_init(void)
+EOLIAN_API int eolian_init(void)
{
const char *log_dom = "eolian";
if (_eolian_init_counter > 0) return ++_eolian_init_counter;
@@ -40,7 +40,7 @@ EAPI int eolian_init(void)
return ++_eolian_init_counter;
}
-EAPI int eolian_shutdown(void)
+EOLIAN_API int eolian_shutdown(void)
{
if (_eolian_init_counter <= 0)
{
@@ -68,7 +68,7 @@ EAPI int eolian_shutdown(void)
return _eolian_init_counter;
}
-EAPI unsigned short eolian_file_format_version_get(void)
+EOLIAN_API unsigned short eolian_file_format_version_get(void)
{
return EOLIAN_FILE_FORMAT_VERSION;
}
diff --git a/src/lib/eolian/eolian_api.h b/src/lib/eolian/eolian_api.h
new file mode 100644
index 0000000000..e2cfa7a524
--- /dev/null
+++ b/src/lib/eolian/eolian_api.h
@@ -0,0 +1,34 @@
+#ifndef _EFL_EOLIAN_API_H
+#define _EFL_EOLIAN_API_H
+
+#ifdef EOLIAN_API
+#error EOLIAN_API should not be already defined
+#endif
+
+#ifdef _WIN32
+# ifndef EOLIAN_STATIC
+# ifdef EOLIAN_BUILD
+# define EOLIAN_API __declspec(dllexport)
+# else
+# define EOLIAN_API __declspec(dllimport)
+# endif
+# else
+# define EOLIAN_API
+# endif
+# define EOLIAN_API_WEAK
+#else
+# ifdef __GNUC__
+# if __GNUC__ >= 4
+# define EOLIAN_API __attribute__ ((visibility("default")))
+# define EOLIAN_API_WEAK __attribute__ ((weak))
+# else
+# define EOLIAN_API
+# define EOLIAN_API_WEAK
+# endif
+# else
+# define EOLIAN_API
+# define EOLIAN_API_WEAK
+# endif
+#endif
+
+#endif
diff --git a/src/lib/eolian/eolian_aux.c b/src/lib/eolian/eolian_aux.c
index 400a82ac1c..6e592706d0 100644
--- a/src/lib/eolian/eolian_aux.c
+++ b/src/lib/eolian/eolian_aux.c
@@ -10,7 +10,7 @@ _hashlist_free(void *ptr)
eina_list_free((Eina_List *)ptr);
}
-EAPI Eina_Hash *
+EOLIAN_API Eina_Hash *
eolian_aux_state_class_children_find(const Eolian_State *state)
{
if (!state)
@@ -105,7 +105,7 @@ _callables_find(const Eolian_Class *cl, Eina_List **funcs,
return total;
}
-EAPI size_t
+EOLIAN_API size_t
eolian_aux_class_callables_get(const Eolian_Class *klass,
Eina_List **funcs, Eina_List **events,
size_t *ownfuncs, size_t *ownevs)
@@ -178,7 +178,7 @@ _all_impls_find(Eina_List **l, const Eolian_Class *cl,
_all_impls_find(l, icl, func, got, children);
}
-EAPI Eina_List *
+EOLIAN_API Eina_List *
eolian_aux_function_all_implements_get(const Eolian_Function *func,
Eina_Hash *class_children)
{
@@ -239,7 +239,7 @@ _parent_impl_find(const char *fulln, const Eolian_Class *cl)
return NULL;
}
-EAPI const Eolian_Implement *
+EOLIAN_API const Eolian_Implement *
eolian_aux_implement_parent_get(const Eolian_Implement *impl)
{
return _parent_impl_find(eolian_implement_name_get(impl),
@@ -262,7 +262,7 @@ _parent_documentation_find(const Eolian_Implement *impl,
return pdoc;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_aux_implement_documentation_get(const Eolian_Implement *impl,
Eolian_Function_Type ftype)
{
@@ -286,7 +286,7 @@ eolian_aux_implement_documentation_get(const Eolian_Implement *impl,
return _parent_documentation_find(impl, ftype);
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_aux_implement_documentation_fallback_get(const Eolian_Implement *impl)
{
Eina_Bool ig = eolian_implement_is_prop_get(impl),
diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c
index 14b0a9a4cc..b2542434a3 100644
--- a/src/lib/eolian/eolian_database.c
+++ b/src/lib/eolian/eolian_database.c
@@ -18,49 +18,49 @@ database_object_add(Eolian_Unit *unit, const Eolian_Object *obj)
((Eina_List *)eina_hash_find(unit->state->staging.objects_f, obj->file), obj));
}
-EAPI Eolian_Object_Type
+EOLIAN_API Eolian_Object_Type
eolian_object_type_get(const Eolian_Object *obj)
{
if (!obj) return EOLIAN_OBJECT_UNKNOWN;
return obj->type;
}
-EAPI const Eolian_Unit *
+EOLIAN_API const Eolian_Unit *
eolian_object_unit_get(const Eolian_Object *obj)
{
if (!obj) return NULL;
return obj->unit;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_object_file_get(const Eolian_Object *obj)
{
if (!obj) return NULL;
return obj->file;
}
-EAPI int
+EOLIAN_API int
eolian_object_line_get(const Eolian_Object *obj)
{
if (!obj) return 0;
return obj->line;
}
-EAPI int
+EOLIAN_API int
eolian_object_column_get(const Eolian_Object *obj)
{
if (!obj) return 0;
return obj->column;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_object_name_get(const Eolian_Object *obj)
{
if (!obj) return NULL;
return obj->name;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_object_c_name_get(const Eolian_Object *obj)
{
if (!obj) return NULL;
@@ -95,7 +95,7 @@ _nmsp_container_get(Eina_Iterator *it EINA_UNUSED)
return NULL;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_object_short_name_get(const Eolian_Object *obj)
{
if (!obj || !obj->name) return NULL;
@@ -105,7 +105,7 @@ eolian_object_short_name_get(const Eolian_Object *obj)
return obj->name;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_object_namespaces_get(const Eolian_Object *obj)
{
if (!obj || !obj->name || !strchr(obj->name, '.')) return NULL;
@@ -126,7 +126,7 @@ eolian_object_namespaces_get(const Eolian_Object *obj)
return &it->itr;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_object_is_beta(const Eolian_Object *obj)
{
if (!obj) return EINA_FALSE;
@@ -143,28 +143,28 @@ void database_doc_del(Eolian_Documentation *doc)
free(doc);
}
-EAPI const char *
+EOLIAN_API const char *
eolian_documentation_summary_get(const Eolian_Documentation *doc)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(doc, NULL);
return doc->summary;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_documentation_description_get(const Eolian_Documentation *doc)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(doc, NULL);
return doc->description;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_documentation_since_get(const Eolian_Documentation *doc)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(doc, NULL);
return doc->since;
}
-EAPI Eina_List *
+EOLIAN_API Eina_List *
eolian_documentation_string_split(const char *doc)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(doc, NULL);
@@ -259,7 +259,7 @@ _get_ref_token(const char *doc, const char **doc_end)
return EOLIAN_DOC_TOKEN_REF;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_documentation_tokenize(const char *doc, Eolian_Doc_Token *ret)
{
/* token is used for statekeeping, so force it */
@@ -393,7 +393,7 @@ mloop:
return ret->text_end;
}
-EAPI void
+EOLIAN_API void
eolian_doc_token_init(Eolian_Doc_Token *tok)
{
if (!tok)
@@ -402,14 +402,14 @@ eolian_doc_token_init(Eolian_Doc_Token *tok)
tok->text = tok->text_end = NULL;
}
-EAPI Eolian_Doc_Token_Type
+EOLIAN_API Eolian_Doc_Token_Type
eolian_doc_token_type_get(const Eolian_Doc_Token *tok)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tok, EOLIAN_DOC_TOKEN_UNKNOWN);
return tok->type;
}
-EAPI char *
+EOLIAN_API char *
eolian_doc_token_text_get(const Eolian_Doc_Token *tok)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tok, NULL);
@@ -574,7 +574,7 @@ database_doc_token_ref_resolve(const Eolian_Doc_Token *tok,
return EOLIAN_OBJECT_FUNCTION;
}
-EAPI Eolian_Object_Type
+EOLIAN_API Eolian_Object_Type
eolian_doc_token_ref_resolve(const Eolian_Doc_Token *tok, const Eolian_State *state,
const Eolian_Object **data, const Eolian_Object **data2)
{
@@ -704,7 +704,7 @@ _default_error_cb(const Eolian_Object *obj, const char *msg, void *data EINA_UNU
_eolian_log(msg);
}
-EAPI Eolian_State *
+EOLIAN_API Eolian_State *
eolian_state_new(void)
{
Eolian_State *state = calloc(1, sizeof(Eolian_State));
@@ -733,7 +733,7 @@ eolian_state_new(void)
return state;
}
-EAPI void
+EOLIAN_API void
eolian_state_free(Eolian_State *state)
{
if (!state)
@@ -750,7 +750,7 @@ eolian_state_free(Eolian_State *state)
free(state);
}
-EAPI Eolian_Panic_Cb
+EOLIAN_API Eolian_Panic_Cb
eolian_state_panic_cb_set(Eolian_State *state, Eolian_Panic_Cb cb)
{
Eolian_Panic_Cb old_cb = state->panic;
@@ -758,7 +758,7 @@ eolian_state_panic_cb_set(Eolian_State *state, Eolian_Panic_Cb cb)
return old_cb;
}
-EAPI Eolian_Error_Cb
+EOLIAN_API Eolian_Error_Cb
eolian_state_error_cb_set(Eolian_State *state, Eolian_Error_Cb cb)
{
Eolian_Error_Cb old_cb = state->error;
@@ -766,7 +766,7 @@ eolian_state_error_cb_set(Eolian_State *state, Eolian_Error_Cb cb)
return old_cb;
}
-EAPI void *
+EOLIAN_API void *
eolian_state_error_data_set(Eolian_State *state, void *data)
{
void *old_data = state->error_data;
@@ -822,7 +822,7 @@ _scan_cb(const char *name, const char *path, void *data)
eina_hash_add(fh, name, newpath);
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_state_directory_add(Eolian_State *state, const char *dir)
{
if (!dir || !state) return EINA_FALSE;
@@ -830,7 +830,7 @@ eolian_state_directory_add(Eolian_State *state, const char *dir)
return eina_file_dir_list(dir, EINA_TRUE, _scan_cb, &sst) && sst.succ;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_state_system_directory_add(Eolian_State *state)
{
Eina_Bool ret;
@@ -842,28 +842,28 @@ eolian_state_system_directory_add(Eolian_State *state)
return ret;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_eot_files_get(const Eolian_State *state)
{
if (!state) return NULL;
return eina_hash_iterator_key_new(state->filenames_eot);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_eo_files_get(const Eolian_State *state)
{
if (!state) return NULL;
return eina_hash_iterator_key_new(state->filenames_eo);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_eot_file_paths_get(const Eolian_State *state)
{
if (!state) return NULL;
return eina_hash_iterator_data_new(state->filenames_eot);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_eo_file_paths_get(const Eolian_State *state)
{
if (!state) return NULL;
@@ -1074,7 +1074,7 @@ _merge_staging(Eolian_State *state)
_state_clean(state);
}
-EAPI const Eolian_Unit *
+EOLIAN_API const Eolian_Unit *
eolian_state_file_parse(Eolian_State *state, const char *filename)
{
if (!state)
@@ -1093,7 +1093,7 @@ eolian_state_file_parse(Eolian_State *state, const char *filename)
return ret;
}
-EAPI const Eolian_Unit *
+EOLIAN_API const Eolian_Unit *
eolian_state_file_path_parse(Eolian_State *state, const char *filepath)
{
const Eolian_Unit *unit;
@@ -1146,7 +1146,7 @@ static Eina_Bool _tfile_parse(const Eina_Hash *hash EINA_UNUSED, const void *key
return pd->ret;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_state_all_eot_files_parse(Eolian_State *state)
{
Parse_Data pd = { state, EINA_TRUE };
@@ -1177,7 +1177,7 @@ static Eina_Bool _file_parse(const Eina_Hash *hash EINA_UNUSED, const void *key
return pd->ret;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_state_all_eo_files_parse(Eolian_State *state)
{
Parse_Data pd = { state, EINA_TRUE };
@@ -1196,13 +1196,13 @@ eolian_state_all_eo_files_parse(Eolian_State *state)
return pd.ret;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_state_check(const Eolian_State *state)
{
return database_check(state);
}
-EAPI const Eolian_Unit *
+EOLIAN_API const Eolian_Unit *
eolian_state_unit_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1212,14 +1212,14 @@ eolian_state_unit_by_file_get(const Eolian_State *state, const char *file_name)
return unit;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_units_get(const Eolian_State *state)
{
if (!state) return NULL;
return eina_hash_iterator_data_new(state->main.units);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_objects_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1230,7 +1230,7 @@ eolian_state_objects_by_file_get(const Eolian_State *state, const char *file_nam
return eina_list_iterator_new(l);
}
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_state_class_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1240,7 +1240,7 @@ eolian_state_class_by_file_get(const Eolian_State *state, const char *file_name)
return cl;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_constants_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1251,7 +1251,7 @@ eolian_state_constants_by_file_get(const Eolian_State *state, const char *file_n
return eina_list_iterator_new(l);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_errors_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1262,7 +1262,7 @@ eolian_state_errors_by_file_get(const Eolian_State *state, const char *file_name
return eina_list_iterator_new(l);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_aliases_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1273,7 +1273,7 @@ eolian_state_aliases_by_file_get(const Eolian_State *state, const char *file_nam
return eina_list_iterator_new(l);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_structs_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1284,7 +1284,7 @@ eolian_state_structs_by_file_get(const Eolian_State *state, const char *file_nam
return eina_list_iterator_new(l);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_state_enums_by_file_get(const Eolian_State *state, const char *file_name)
{
if (!state) return NULL;
@@ -1295,28 +1295,28 @@ eolian_state_enums_by_file_get(const Eolian_State *state, const char *file_name)
return eina_list_iterator_new(l);
}
-EAPI const Eolian_State *
+EOLIAN_API const Eolian_State *
eolian_unit_state_get(const Eolian_Unit *unit)
{
if (!unit) return NULL;
return unit->state;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_unit_children_get(const Eolian_Unit *unit)
{
if (!unit) return NULL;
return eina_hash_iterator_data_new(unit->children);
}
-EAPI const char *
+EOLIAN_API const char *
eolian_unit_file_get(const Eolian_Unit *unit)
{
if (!unit) return NULL;
return unit->file;
}
-EAPI const char *
+EOLIAN_API const char *
eolian_unit_file_path_get(const Eolian_Unit *unit)
{
if (!unit || !unit->file) return NULL;
@@ -1326,14 +1326,14 @@ eolian_unit_file_path_get(const Eolian_Unit *unit)
: unit->state->filenames_eot, unit->file);
}
-EAPI unsigned short
+EOLIAN_API unsigned short
eolian_unit_version_get(const Eolian_Unit *unit)
{
if (!unit) return 0;
return unit->version;
}
-EAPI const Eolian_Object *
+EOLIAN_API const Eolian_Object *
eolian_unit_object_by_name_get(const Eolian_Unit *unit, const char *name)
{
if (!unit) return NULL;
@@ -1343,12 +1343,12 @@ eolian_unit_object_by_name_get(const Eolian_Unit *unit, const char *name)
return o;
}
-EAPI Eina_Iterator *eolian_unit_objects_get(const Eolian_Unit *unit)
+EOLIAN_API Eina_Iterator *eolian_unit_objects_get(const Eolian_Unit *unit)
{
return (unit ? eina_hash_iterator_data_new(unit->objects) : NULL);
}
-EAPI const Eolian_Class *
+EOLIAN_API const Eolian_Class *
eolian_unit_class_by_name_get(const Eolian_Unit *unit, const char *class_name)
{
if (!unit) return NULL;
@@ -1358,13 +1358,13 @@ eolian_unit_class_by_name_get(const Eolian_Unit *unit, const char *class_name)
return cl;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_unit_classes_get(const Eolian_Unit *unit)
{
return (unit ? eina_hash_iterator_data_new(unit->classes) : NULL);
}
-EAPI const Eolian_Constant *
+EOLIAN_API const Eolian_Constant *
eolian_unit_constant_by_name_get(const Eolian_Unit *unit, const char *name)
{
if (!unit) return NULL;
@@ -1374,7 +1374,7 @@ eolian_unit_constant_by_name_get(const Eolian_Unit *unit, const char *name)
return v;
}
-EAPI const Eolian_Error *
+EOLIAN_API const Eolian_Error *
eolian_unit_error_by_name_get(const Eolian_Unit *unit, const char *name)
{
if (!unit) return NULL;
@@ -1384,19 +1384,19 @@ eolian_unit_error_by_name_get(const Eolian_Unit *unit, const char *name)
return v;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_unit_constants_get(const Eolian_Unit *unit)
{
return (unit ? eina_hash_iterator_data_new(unit->constants) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_unit_errors_get(const Eolian_Unit *unit)
{
return (unit ? eina_hash_iterator_data_new(unit->errors) : NULL);
}
-EAPI const Eolian_Typedecl *
+EOLIAN_API const Eolian_Typedecl *
eolian_unit_alias_by_name_get(const Eolian_Unit *unit, const char *name)
{
if (!unit) return NULL;
@@ -1407,7 +1407,7 @@ eolian_unit_alias_by_name_get(const Eolian_Unit *unit, const char *name)
return tp;
}
-EAPI const Eolian_Typedecl *
+EOLIAN_API const Eolian_Typedecl *
eolian_unit_struct_by_name_get(const Eolian_Unit *unit, const char *name)
{
if (!unit) return NULL;
@@ -1418,7 +1418,7 @@ eolian_unit_struct_by_name_get(const Eolian_Unit *unit, const char *name)
return tp;
}
-EAPI const Eolian_Typedecl *
+EOLIAN_API const Eolian_Typedecl *
eolian_unit_enum_by_name_get(const Eolian_Unit *unit, const char *name)
{
if (!unit) return NULL;
@@ -1429,39 +1429,39 @@ eolian_unit_enum_by_name_get(const Eolian_Unit *unit, const char *name)
return tp;
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_unit_aliases_get(const Eolian_Unit *unit)
{
return (unit ? eina_hash_iterator_data_new(unit->aliases) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_unit_structs_get(const Eolian_Unit *unit)
{
return (unit ? eina_hash_iterator_data_new(unit->structs) : NULL);
}
-EAPI Eina_Iterator *
+EOLIAN_API Eina_Iterator *
eolian_unit_enums_get(const Eolian_Unit *unit)
{
return (unit ? eina_hash_iterator_data_new(unit->enums) : NULL);
}
-EAPI const char *
+EOLIAN_API const char *
eolian_error_message_get(const Eolian_Error *err)
{
if (!err) return NULL;
return err->msg;
}
-EAPI Eina_Bool
+EOLIAN_API Eina_Bool
eolian_error_is_extern(const Eolian_Error *err)
{
if (!err) return EINA_FALSE;
return err->is_extern;
}
-EAPI const Eolian_Documentation *
+EOLIAN_API const Eolian_Documentation *
eolian_error_documentation_get(const Eolian_Error *err)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(err, NULL);
diff --git a/src/lib/eolian/eolian_priv.h b/src/lib/eolian/eolian_priv.h
index a49e50e7f2..0143183ca1 100644
--- a/src/lib/eolian/eolian_priv.h
+++ b/src/lib/eolian/eolian_priv.h
@@ -1,6 +1,7 @@
#ifndef EOLIAN_PRIV_H
#define EOLIAN_PRIV_H
+#include "eolian_api.h"
#include <Eina.h>
#include <stdio.h>
#include <stdarg.h>
diff --git a/src/lib/eolian/meson.build b/src/lib/eolian/meson.build
index 083d5cdaa5..0099c18192 100644
--- a/src/lib/eolian/meson.build
+++ b/src/lib/eolian/meson.build
@@ -39,7 +39,7 @@ eolian_lib = library('eolian', eolian_src,
include_directories: config_dir,
dependencies: eina,
install: true,
- c_args : package_c_args,
+ c_args : [package_c_args, '-DEOLIAN_BUILD'],
version : meson.project_version()
)
@@ -52,6 +52,7 @@ eolian = declare_dependency(
eolian_include_dir = join_paths(dir_data, 'eolian', 'include')
eolian_header_src = [
+'eolian_api.h',
'Eolian.h',
'Eolian_Aux.h'
]
diff --git a/src/lib/eolian_cxx/grammar/context.hpp b/src/lib/eolian_cxx/grammar/context.hpp
index 9e175a8ee5..e7bc014acb 100644
--- a/src/lib/eolian_cxx/grammar/context.hpp
+++ b/src/lib/eolian_cxx/grammar/context.hpp
@@ -40,28 +40,25 @@ context_add_tag(NewTag const& tag, context_null context)
return context_cons<NewTag, context_null>{tag, context};
}
-template <typename Tag, typename SameTag, typename Tail>
-constexpr context_cons<SameTag, Tail>
-context_replace_tag(Tag const& tag, context_cons<SameTag, Tail> const& context
- , typename std::enable_if<std::is_same<Tag, SameTag>::value>::type* = nullptr)
+template <typename Tag, typename Tail>
+constexpr context_cons<Tag, Tail>
+context_replace_tag(Tag const& tag, context_cons<Tag, Tail> const& context)
{
return {tag, context.tail};
}
-template <typename Tag, typename OtherTag, typename Tail>
-constexpr context_cons<OtherTag, Tail>
-context_replace_tag(Tag const& tag, context_cons<OtherTag, Tail> const& context
- , typename std::enable_if<!std::is_same<Tag, OtherTag>::value>::type* = nullptr)
+template <typename Tag>
+constexpr context_cons<Tag, context_null>
+context_replace_tag(Tag const& tag, context_null const&)
{
- return {context.tag, context_replace_tag(tag, context.tail)};
+ return context_cons<Tag, context_null>{tag, context_null{}};
}
-template <typename Tag>
-constexpr context_null
-context_replace_tag(Tag const& tag, context_null const&)
+template <typename Tag, typename OtherTag, typename Tail>
+constexpr context_cons<OtherTag, decltype(context_replace_tag(std::declval<Tag>(), std::declval<Tail>()))>
+context_replace_tag(Tag const& tag, context_cons<OtherTag, Tail> const& context)
{
- static_assert(std::is_same<Tag, context_null>::value, "Tag type not available in this generation context");
- return tag;
+ return {context.tag, context_replace_tag(tag, context.tail)};
}
template <typename Tag, typename Context>
diff --git a/src/lib/eolian_cxx/grammar/eps.hpp b/src/lib/eolian_cxx/grammar/eps.hpp
index 6416bc918f..354c8d7cdb 100644
--- a/src/lib/eolian_cxx/grammar/eps.hpp
+++ b/src/lib/eolian_cxx/grammar/eps.hpp
@@ -22,11 +22,17 @@ namespace efl { namespace eolian { namespace grammar {
struct eps_generator
{
+ eps_generator () : r(true) {}
+ eps_generator (bool r) : r(r) {}
+ bool r;
+
template <typename OutputIterator, typename Attribute, typename Context>
bool generate(OutputIterator, Attribute const&, Context const&) const
{
- return true;
+ return r;
}
+
+ eps_generator operator()(bool r) const { return {r}; }
};
template <>
diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp
index 48b8b52c80..86fb61e8a3 100644
--- a/src/lib/eolian_cxx/grammar/klass_def.hpp
+++ b/src/lib/eolian_cxx/grammar/klass_def.hpp
@@ -897,7 +897,7 @@ struct function_def
}
else if(type == EOLIAN_PROP_GET)
{
- for(auto v : values)
+ for(auto&& v : values)
{
v.direction = parameter_direction::out;
parameters.push_back(v);
diff --git a/src/lib/eolian_cxx/grammar/type_impl.hpp b/src/lib/eolian_cxx/grammar/type_impl.hpp
index 29d28857f9..547132a31b 100644
--- a/src/lib/eolian_cxx/grammar/type_impl.hpp
+++ b/src/lib/eolian_cxx/grammar/type_impl.hpp
@@ -174,10 +174,10 @@ struct visitor_generate
if (r.base_qualifier.qualifier & qualifier_info::is_const)
{
r.base_qualifier.qualifier ^= qualifier_info::is_const;
- return replace_base_type(r, " Eina_Binbuf*");
+ return replace_base_type(r, " ::efl::eina::strbuf");
}
else
- return replace_base_type(r, " Eina_Binbuf const*");
+ return replace_base_type(r, " ::efl::eina::strbuf_view");
}}
/* FIXME: handle any_value_ref */
, {"any_value", true, nullptr, nullptr, [&]
@@ -283,7 +283,14 @@ struct visitor_generate
}
else
{
- if(as_generator
+ if(regular.type_type == attributes::typedecl_type::struct_
+ || regular.type_type == attributes::typedecl_type::struct_opaque)
+ {
+ std::copy (c_type.begin(), c_type.end(), sink);
+ return true;
+ }
+ else
+ if(as_generator
(
*(string << "_")
<< string
diff --git a/src/lib/ephysics/EPhysics.h b/src/lib/ephysics/EPhysics.h
index cc5d221156..dbfe1938e8 100644
--- a/src/lib/ephysics/EPhysics.h
+++ b/src/lib/ephysics/EPhysics.h
@@ -6,7 +6,7 @@
*
* @date 2012 (created)
*
- * @section toc Table of Contents
+ * @section ephysics_toc Table of Contents
*
* @li @ref ephysics_main_intro
* @li @ref ephysics_main_compiling
diff --git a/src/lib/ephysics/meson.build b/src/lib/ephysics/meson.build
index ad1a168ae5..6233f58885 100644
--- a/src/lib/ephysics/meson.build
+++ b/src/lib/ephysics/meson.build
@@ -1,13 +1,13 @@
bullet = dependency('bullet')
-ephysics_deps = [evas, bullet]
+ephysics_deps = [evas]
ephysics_pub_deps = [eina, eo, efl]
-
+ephysics_ext_deps = [m, bullet]
ephysics_header_src = [
'EPhysics.h'
]
-ephysics_src = [
+ephysics_src = files([
'ephysics_private.h',
'ephysics_trimesh.h',
'ephysics_body_materials.h',
@@ -18,11 +18,11 @@ ephysics_src = [
'ephysics_quaternion.cpp',
'ephysics_shape.cpp',
'ephysics_world.cpp'
-]
+])
ephysics_lib = library('ephysics',
ephysics_src,
- dependencies: ephysics_pub_deps + [m] + ephysics_deps,
+ dependencies: ephysics_pub_deps + ephysics_deps + ephysics_ext_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
c_args : package_c_args,
diff --git a/src/lib/ethumb/Ethumb.h b/src/lib/ethumb/Ethumb.h
index 9d3357d824..5626d5e539 100644
--- a/src/lib/ethumb/Ethumb.h
+++ b/src/lib/ethumb/Ethumb.h
@@ -55,7 +55,7 @@ extern "C" {
*
* @date 2009 (created)
*
- * @section toc Table of Contents
+ * @section ethumb_toc Table of Contents
*
* @li @ref ethumb_main_intro
* @li @ref ethumb_main_compiling
@@ -407,18 +407,18 @@ EAPI float ethumb_video_start_get(const Ethumb *e) EINA_WARN_UNUSED_RESUL
/**
* @brief Set the video time (duration) in seconds.
- *
+ *
* @param e handle of the current thumbnailer.
* @param time the video duration in seconds
- */
+ */
EAPI void ethumb_video_time_set(Ethumb *e, float time) EINA_ARG_NONNULL(1);
/**
* @brief Get the video time (duration) in seconds.
- *
+ *
* @param e handle of the current thumbnailer.
* @return the video duration in seconds
- */
+ */
EAPI float ethumb_video_time_get(const Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
/**
diff --git a/src/lib/ethumb/ethumb.c b/src/lib/ethumb/ethumb.c
index ca019823ae..aa4e824c28 100644
--- a/src/lib/ethumb/ethumb.c
+++ b/src/lib/ethumb/ethumb.c
@@ -256,8 +256,6 @@ ethumb_init(void)
_plugins_ext = eina_hash_string_small_new(NULL);
EINA_SAFETY_ON_NULL_GOTO(_plugins_ext, error_plugins_ext);
- evas_init();
- ecore_init();
ecore_evas_init();
edje_init();
@@ -285,6 +283,8 @@ ethumb_init(void)
return ++initcount;
error_plugins_ext:
+ edje_shutdown();
+ ecore_evas_shutdown();
eina_prefix_free(_pfx);
_pfx = NULL;
@@ -312,10 +312,8 @@ ethumb_shutdown(void)
eina_stringshare_del(_home_thumb_dir);
eina_stringshare_del(_thumb_category_normal);
eina_stringshare_del(_thumb_category_large);
- evas_shutdown();
- ecore_shutdown();
- ecore_evas_shutdown();
edje_shutdown();
+ ecore_evas_shutdown();
eina_prefix_free(_pfx);
_pfx = NULL;
eina_log_domain_unregister(_log_dom);
@@ -878,7 +876,7 @@ ethumb_file_get(const Ethumb *e, const char **path, const char **key)
}
static const char ACCEPTABLE_URI_CHARS[96] = {
- /* ! " # $ % & ' ( ) * + , - . / */
+ /* ! " # $ % & ' ( ) * + , - . / */
0x00,0x3F,0x20,0x20,0x28,0x00,0x2C,0x3F,0x3F,0x3F,0x3F,0x2A,0x28,0x3F,0x3F,0x1C,
/* 0 1 2 3 4 5 6 7 8 9 : ; < = > ? */
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x38,0x20,0x20,0x2C,0x20,0x20,
diff --git a/src/lib/ethumb/md5.c b/src/lib/ethumb/md5.c
index d43716672f..b346a46202 100644
--- a/src/lib/ethumb/md5.c
+++ b/src/lib/ethumb/md5.c
@@ -106,7 +106,7 @@ void MD5Update(MD5_CTX *ctx, unsigned char const *buf, unsigned len)
}
/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
+ * Final wrapup - pad to 64-byte boundary with the bit pattern
* 1 0* (64-bit count of bits processed, MSB-first)
*/
void MD5Final(unsigned char digest[16], MD5_CTX *ctx)
diff --git a/src/lib/ethumb/meson.build b/src/lib/ethumb/meson.build
index ffc62e91e5..9e39a7ab77 100644
--- a/src/lib/ethumb/meson.build
+++ b/src/lib/ethumb/meson.build
@@ -2,19 +2,20 @@ ethumb_header_src = [
'Ethumb.h'
]
-ethumb_src = [
+ethumb_src = files([
'ethumb.c',
'ethumb_private.h',
'md5.h',
'md5.c',
-]
+])
-ethumb_deps = [eet, evas, ecore, ecore_evas, ecore_file, ecore_imf, edje, emile]
+ethumb_deps = [eet, evas, ecore, ecore_evas, ecore_file, ecore_imf, edje, emile, buildsystem]
ethumb_pub_deps = [eina, eo, efl]
+ethumb_ext_deps = [m, buildsystem_simple]
ethumb_lib = library('ethumb',
ethumb_src,
- dependencies: ethumb_pub_deps + [m] + ethumb_deps,
+ dependencies: ethumb_pub_deps + ethumb_ext_deps + ethumb_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
c_args : package_c_args,
diff --git a/src/lib/ethumb_client/ethumb_client.c b/src/lib/ethumb_client/ethumb_client.c
index e5919f7dbf..70e56bce94 100644
--- a/src/lib/ethumb_client/ethumb_client.c
+++ b/src/lib/ethumb_client/ethumb_client.c
@@ -204,6 +204,7 @@ _ethumb_client_free(Ethumb_Client *client)
if (client->invalid)
return;
+ if (client->dbus_pending)
{
Eldbus_Pending *pending;
EINA_LIST_FREE(client->dbus_pending, pending)
@@ -216,8 +217,11 @@ _ethumb_client_free(Ethumb_Client *client)
struct _ethumb_pending_add *pending = data;
if (pending->pending_call)
{
- eldbus_pending_cancel(pending->pending_call);
+ Eldbus_Pending *call = pending->pending_call;
+
+ pending->pending_call = NULL;
pending->client = NULL;
+ eldbus_pending_cancel(call);
}
else
{
@@ -245,8 +249,11 @@ _ethumb_client_free(Ethumb_Client *client)
pending->free_data(pending->data);
if (pending->pending_call)
{
- eldbus_pending_cancel(pending->pending_call);
+ Eldbus_Pending *call = pending->pending_call;
+
+ pending->pending_call = NULL;
pending->client = NULL;
+ eldbus_pending_cancel(call);
}
else
{
@@ -983,7 +990,7 @@ _ethumb_client_queue_add_cb(void *data, const Eldbus_Message *msg, Eldbus_Pendin
pending->pending_call = NULL;
if (!client) goto end;
client->pending_add = eina_list_remove(client->pending_add, pending);
-
+
if (eldbus_message_error_get(msg, &errname, &errmsg))
{
ERR("Error: %s %s", errname, errmsg);
@@ -996,7 +1003,7 @@ _ethumb_client_queue_add_cb(void *data, const Eldbus_Message *msg, Eldbus_Pendin
goto end;
}
-
+
generating = calloc(1, sizeof(*generating));
generating->id = id;
generating->file = pending->file;
@@ -1050,7 +1057,7 @@ _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *ke
_ethumb_client_dbus_append_bytearray(main_itr, thumb_key);
client->pending_add = eina_list_append(client->pending_add, pending);
-
+
pending->pending_call = eldbus_proxy_send(client->proxy, msg,
_ethumb_client_queue_add_cb,
pending, -1);
diff --git a/src/lib/ethumb_client/meson.build b/src/lib/ethumb_client/meson.build
index bddbab1d8d..1326fee995 100644
--- a/src/lib/ethumb_client/meson.build
+++ b/src/lib/ethumb_client/meson.build
@@ -2,9 +2,9 @@ ethumb_client_header_src = [
'Ethumb_Client.h'
]
-ethumb_client_src = [
+ethumb_client_src = files([
'ethumb_client.c'
-]
+])
ethumb_client_deps = [
eldbus,
@@ -12,10 +12,11 @@ ethumb_client_deps = [
]
ethumb_client_pub_deps = [eina, eo, efl, ethumb]
+ethumb_client_ext_deps = []
ethumb_client_lib = library('ethumb_client',
ethumb_client_src,
- dependencies: ethumb_client_pub_deps + ethumb_client_deps,
+ dependencies: ethumb_client_pub_deps + ethumb_client_deps + ethumb_client_ext_deps,
include_directories : config_dir + [include_directories('.')],
install: true,
c_args : package_c_args,
diff --git a/src/lib/evas/Efl_Canvas.h b/src/lib/evas/Efl_Canvas.h
index 1963aa2a55..2254992063 100644
--- a/src/lib/evas/Efl_Canvas.h
+++ b/src/lib/evas/Efl_Canvas.h
@@ -8,31 +8,8 @@
#include <Eo.h>
/* This include has been added to support Eo in Evas */
#include <Efl.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
#ifdef __cplusplus
extern "C" {
@@ -58,20 +35,20 @@ extern "C" {
#include "canvas/efl_input_focus.eo.h"
#include "canvas/efl_input_clickable.eo.h"
+#include <canvas/efl_canvas_object.eo.h>
#include <gesture/efl_canvas_gesture.eo.h>
#include <gesture/efl_canvas_gesture_touch.eo.h>
#include <gesture/efl_canvas_gesture_recognizer.eo.h>
#include <gesture/efl_canvas_gesture_manager.eo.h>
-#include <canvas/efl_canvas_object.eo.h>
-#include <canvas/efl_canvas_animation_alpha.eo.h>
+#include <canvas/efl_canvas_alpha_animation.eo.h>
#include <canvas/efl_canvas_animation.eo.h>
-#include <canvas/efl_canvas_animation_group.eo.h>
-#include <canvas/efl_canvas_animation_group_parallel.eo.h>
-#include <canvas/efl_canvas_animation_group_sequential.eo.h>
-#include <canvas/efl_canvas_animation_rotate.eo.h>
-#include <canvas/efl_canvas_animation_scale.eo.h>
-#include <canvas/efl_canvas_animation_translate.eo.h>
+#include <canvas/efl_canvas_group_animation.eo.h>
+#include <canvas/efl_canvas_parallel_group_animation.eo.h>
+#include <canvas/efl_canvas_sequential_group_animation.eo.h>
+#include <canvas/efl_canvas_rotate_animation.eo.h>
+#include <canvas/efl_canvas_scale_animation.eo.h>
+#include <canvas/efl_canvas_translate_animation.eo.h>
#include <canvas/efl_canvas_event_grabber.eo.h>
#include <canvas/efl_canvas_group.eo.h>
#include <canvas/efl_canvas_image.eo.h>
@@ -83,7 +60,7 @@ extern "C" {
#include <canvas/efl_canvas_scene3d.eo.h>
*/
#include <canvas/efl_canvas_snapshot.eo.h>
-#include <canvas/efl_text_cursor.eo.h>
+#include <canvas/efl_text_cursor_object.eo.h>
#include <canvas/efl_text_formatter.eo.h>
#include <canvas/efl_canvas_textblock.eo.h>
#include <canvas/efl_canvas_textblock_factory.eo.h>
@@ -109,23 +86,27 @@ extern "C" {
#include <gesture/efl_canvas_gesture_double_tap.eo.h>
#include <gesture/efl_canvas_gesture_flick.eo.h>
-#include <gesture/efl_canvas_gesture_long_tap.eo.h>
+#include <gesture/efl_canvas_gesture_long_press.eo.h>
#include <gesture/efl_canvas_gesture_momentum.eo.h>
#include <gesture/efl_canvas_gesture_recognizer_double_tap.eo.h>
#include <gesture/efl_canvas_gesture_recognizer_flick.eo.h>
-#include <gesture/efl_canvas_gesture_recognizer_long_tap.eo.h>
+#include <gesture/efl_canvas_gesture_recognizer_long_press.eo.h>
#include <gesture/efl_canvas_gesture_recognizer_momentum.eo.h>
#include <gesture/efl_canvas_gesture_recognizer_tap.eo.h>
#include <gesture/efl_canvas_gesture_recognizer_triple_tap.eo.h>
+#include <gesture/efl_canvas_gesture_recognizer_rotate.eo.h>
#include <gesture/efl_canvas_gesture_recognizer_zoom.eo.h>
+#include <gesture/efl_canvas_gesture_recognizer_custom.eo.h>
#include <gesture/efl_canvas_gesture_tap.eo.h>
#include <gesture/efl_canvas_gesture_triple_tap.eo.h>
+#include <gesture/efl_canvas_gesture_rotate.eo.h>
#include <gesture/efl_canvas_gesture_zoom.eo.h>
-#include <gesture/efl_gesture_events.eo.h>
+#include <gesture/efl_canvas_gesture_custom.eo.h>
+#include <gesture/efl_canvas_gesture_events.eo.h>
#ifdef __cplusplus
}
#endif
-#undef EAPI
+
#endif
diff --git a/src/lib/evas/Evas.h b/src/lib/evas/Evas.h
index e00d1b3916..000625afb4 100644
--- a/src/lib/evas/Evas.h
+++ b/src/lib/evas/Evas.h
@@ -3,7 +3,7 @@
@date 2000 (created)
- @section toc Table of Contents
+ @section evas_toc Table of Contents
@li @ref evas_main_intro
@li @ref evas_main_work
@@ -33,7 +33,7 @@
requirements.
Evas can serve as a base for widget sets or toolkits
- (e.g. Elementary, http://docs.enlightenment.org/auto/elementary/) by
+ (e.g. @ref elementary_main) by
handling pixel drawing and regional change reporting, but does not
manage windows itself, nor deal with input or window update event
propagation. In other words, it is intended for use in drawing
@@ -135,13 +135,13 @@
type on Evas -- the rectangle.
@li @ref Evas_Object_Polygon, to learn how to create polygon elements
on the canvas.
- @li @ref Evas_Line_Group, to learn how to create line elements on the
+ @li @ref Evas_Object_Line_Group, to learn how to create line elements on the
canvas.
@li @ref Evas_Object_Image, to learn about image objects, over which
Evas can do a plethora of operations.
- @li @ref Evas_Object_Text, to learn how to create textual elements on
+ @li @ref Evas_Object_Text_Group, to learn how to create textual elements on
the canvas.
- @li @ref Evas_Object_Textblock, to learn how to create multiline
+ @li @ref Evas_Object_Textblock_Group, to learn how to create multiline
textual elements on the canvas.
@li @ref Evas_Smart_Object_Group and @ref Evas_Smart_Group, to define
@@ -174,31 +174,7 @@
#include <Evas_Loader.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
#ifdef __cplusplus
extern "C" {
@@ -221,7 +197,4 @@ extern "C" {
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/evas/Evas_Common.h b/src/lib/evas/Evas_Common.h
index 7c5efc3f45..35b18f59d1 100644
--- a/src/lib/evas/Evas_Common.h
+++ b/src/lib/evas/Evas_Common.h
@@ -44,7 +44,12 @@ typedef struct _Evas_Version
int revision; /**< git revision (0 if a proper release or the git revision number Evas is built from) */
} Evas_Version;
-EAPI extern Evas_Version * evas_version;
+/**
+ * Evas Version Information
+ * @ingroup Evas_Main_Group
+ */
+
+EVAS_API extern Evas_Version * evas_version;
/**
* @file
@@ -302,7 +307,12 @@ typedef enum _Evas_Engine_Render_Mode
EVAS_RENDER_MODE_NONBLOCKING = 1, /**< The rendering is non blocking mode*/
} Evas_Engine_Render_Mode; /**< behaviour of the renderer*/
-typedef Efl_Gfx_Event_Render_Post Evas_Event_Render_Post; /**< Event info sent after a frame was rendered. @since 1.18 */
+typedef struct _Evas_Event_Render_Post Evas_Event_Render_Post; /**< Event info sent after a frame was rendered. @since 1.18 */
+struct _Evas_Event_Render_Post
+{
+ Eina_List *updated_area; /**< A list of rectangles that were updated in the
+ * canvas. */
+};
typedef enum _Evas_Device_Class
{
@@ -375,6 +385,12 @@ typedef Efl_Text_Bidirectional_Type Evas_BiDi_Direction;
#define EVAS_BIDI_DIRECTION_RTL EFL_TEXT_BIDIRECTIONAL_TYPE_RTL
#define EVAS_BIDI_DIRECTION_INHERIT EFL_TEXT_BIDIRECTIONAL_TYPE_INHERIT
+typedef enum _Evas_Font_Data_Cache
+{
+ EVAS_FONT_DATA_CACHE_TEXTURE = 0x01,/**< Texture caching (in case of accelerated rendering) */
+} Evas_Font_Data_Cache; /**< font caching options, used for evas_font_data_cache_set()/evas_font_data_cache_get()*/
+
+
/**
* How the mouse pointer should be handled by Evas.
*
@@ -472,7 +488,7 @@ typedef void (*Evas_Async_Events_Put_Cb)(void *target, Evas_Callback_Type t
* @since 1.8
*/
EINA_DEPRECATED
-EAPI const char *evas_cserve_path_get(void);
+EVAS_API const char *evas_cserve_path_get(void);
/**
* @brief Directly initialize Evas and its required dependencies.
@@ -504,7 +520,7 @@ EAPI const char *evas_cserve_path_get(void);
*
* @ingroup Evas_Main_Group
*/
-EAPI int evas_init(void);
+EVAS_API int evas_init(void);
/**
* @brief Directly shutdown Evas.
@@ -530,7 +546,7 @@ EAPI int evas_init(void);
*
* @ingroup Evas_Main_Group
*/
-EAPI int evas_shutdown(void);
+EVAS_API int evas_shutdown(void);
/**
* @brief Get the error status of the most recent memory allocation call
@@ -578,7 +594,7 @@ EAPI int evas_shutdown(void);
*
* @ingroup Evas_Main_Group
*/
-EAPI Evas_Alloc_Error evas_alloc_error(void);
+EVAS_API Evas_Alloc_Error evas_alloc_error(void);
/**
* @brief Access the canvas' asynchronous event queue.
@@ -597,7 +613,7 @@ EAPI Evas_Alloc_Error evas_alloc_error(void);
*
* @ingroup Evas_Main_Group
*/
-EAPI int evas_async_events_fd_get(void) EINA_WARN_UNUSED_RESULT;
+EVAS_API int evas_async_events_fd_get(void) EINA_WARN_UNUSED_RESULT;
/**
* @brief Process the asynchronous event queue.
@@ -610,7 +626,7 @@ EAPI int evas_async_events_fd_get(void) EINA_WARN_UNUSED_RESULT;
*
* @ingroup Evas_Main_Group
*/
-EAPI int evas_async_events_process(void);
+EVAS_API int evas_async_events_process(void);
/**
* @brief Insert asynchronous events on the canvas.
@@ -628,7 +644,7 @@ EAPI int evas_async_events_process(void);
*
* @ingroup Evas_Main_Group
*/
-EAPI Eina_Bool evas_async_events_put(const void *target, Evas_Callback_Type type, void *event_info, Evas_Async_Events_Put_Cb func) EINA_ARG_NONNULL(1, 4);
+EVAS_API Eina_Bool evas_async_events_put(const void *target, Evas_Callback_Type type, void *event_info, Evas_Async_Events_Put_Cb func) EINA_ARG_NONNULL(1, 4);
/**
* @defgroup Evas_Canvas Canvas Functions
@@ -735,7 +751,7 @@ EAPI Eina_Bool evas_async_events_put(const void *target, Evas_Callback_T
* evas_output_method_set(evas, engine_id);
* @endcode
*/
-EAPI int evas_render_method_lookup(const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API int evas_render_method_lookup(const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* List all the rendering engines compiled into the copy of the Evas library
@@ -768,7 +784,7 @@ EAPI int evas_render_method_lookup(const char *name) EINA_WARN_UNU
* evas_render_method_list_free(engine_list);
* @endcode
*/
-EAPI Eina_List *evas_render_method_list(void) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_render_method_list(void) EINA_WARN_UNUSED_RESULT;
/**
* This function should be called to free a list of engine names
@@ -798,7 +814,7 @@ EAPI Eina_List *evas_render_method_list(void) EINA_WARN_UNUSED_RESULT;
* evas_render_method_list_free(engine_list);
* @endcode
*/
-EAPI void evas_render_method_list_free(Eina_List *list);
+EVAS_API void evas_render_method_list_free(Eina_List *list);
/**
* @}
@@ -847,7 +863,7 @@ EAPI void evas_render_method_list_free(Eina_List *list);
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_render_updates_free(Eina_List *updates);
+EVAS_API void evas_render_updates_free(Eina_List *updates);
/**
@@ -921,7 +937,7 @@ EAPI void evas_render_updates_free(Eina_List *updates);
* @see evas_device_add_full
* @since 1.8
*/
-EAPI Evas_Device *evas_device_add(Evas *e);
+EVAS_API Evas_Device *evas_device_add(Evas *e);
/**
* Add a new device type
@@ -943,12 +959,12 @@ EAPI Evas_Device *evas_device_add(Evas *e);
* @see evas_device_del
* @since 1.19
*/
-EAPI Evas_Device *evas_device_add_full(Evas *e, const char *name,
+EVAS_API Evas_Device *evas_device_add_full(Evas *e, const char *name,
const char *desc,
Evas_Device *parent_dev,
Evas_Device *emulation_dev,
Evas_Device_Class clas,
- Evas_Device_Subclass sub_clas);
+ Evas_Device_Subclass sub_class);
/**
* Delete a new device type
@@ -960,7 +976,7 @@ EAPI Evas_Device *evas_device_add_full(Evas *e, const char *name,
* @see evas_device_pop
* @since 1.8
*/
-EAPI void evas_device_del(Evas_Device *dev);
+EVAS_API void evas_device_del(Evas_Device *dev);
/**
* Push the current context device onto the device stack
@@ -989,7 +1005,7 @@ EAPI void evas_device_del(Evas_Device *dev);
* @see evas_device_pop
* @since 1.8
*/
-EAPI void evas_device_push(Evas *e, Evas_Device *dev);
+EVAS_API void evas_device_push(Evas *e, Evas_Device *dev);
/**
* This pops the top of the device stack for the canvas
@@ -1003,7 +1019,7 @@ EAPI void evas_device_push(Evas *e, Evas_Device *dev);
* @see evas_device_push
* @since 1.8
*/
-EAPI void evas_device_pop(Evas *e);
+EVAS_API void evas_device_pop(Evas *e);
/**
* List all current devices attached to the given canvas and/or device
@@ -1029,7 +1045,7 @@ EAPI void evas_device_pop(Evas *e);
* @see evas_device_emulation_source_get
* @since 1.8
*/
-EAPI const Eina_List *evas_device_list(Evas *e, const Evas_Device *dev);
+EVAS_API const Eina_List *evas_device_list(Evas *e, const Evas_Device *dev);
/**
* Get a device by its name
@@ -1045,12 +1061,12 @@ EAPI const Eina_List *evas_device_list(Evas *e, const Evas_Device *dev);
*
* @since 1.19
*/
-EAPI Evas_Device *evas_device_get(Evas *e, const char *name);
+EVAS_API Evas_Device *evas_device_get(Evas *e, const char *name);
/**
* Get a device by its seat id
*
- * @param e The canvas to find the device on
+ * @param eo_e The canvas to find the device on
* @param id The seat id of the device.
*
* Gets the device with id @p id on Evas @p e list of devices.
@@ -1059,7 +1075,7 @@ EAPI Evas_Device *evas_device_get(Evas *e, const char *name);
*
* @since 1.20
*/
-EAPI Evas_Device *evas_device_get_by_seat_id(Evas *eo_e, unsigned int id);
+EVAS_API Evas_Device *evas_device_get_by_seat_id(Evas *eo_e, unsigned int id);
/**
* Set the name of a device as a string
@@ -1069,7 +1085,7 @@ EAPI Evas_Device *evas_device_get_by_seat_id(Evas *eo_e, unsigned int id);
*
* @since 1.8
*/
-EAPI void evas_device_name_set(Evas_Device *dev, const char *name);
+EVAS_API void evas_device_name_set(Evas_Device *dev, const char *name);
/**
* Get the name of a device
@@ -1085,7 +1101,7 @@ EAPI void evas_device_name_set(Evas_Device *dev, const char *name);
*
* @since 1.8
*/
-EAPI const char *evas_device_name_get(const Evas_Device *dev);
+EVAS_API const char *evas_device_name_get(const Evas_Device *dev);
/**
* Set the seat id of a device
@@ -1095,7 +1111,7 @@ EAPI const char *evas_device_name_get(const Evas_Device *dev);
*
* @since 1.20
*/
-EAPI void evas_device_seat_id_set(Evas_Device *dev, unsigned int id);
+EVAS_API void evas_device_seat_id_set(Evas_Device *dev, unsigned int id);
/**
* Get the seat id of a device
@@ -1109,7 +1125,7 @@ EAPI void evas_device_seat_id_set(Evas_Device *dev, unsigned int id);
*
* @since 1.20
*/
-EAPI unsigned int evas_device_seat_id_get(const Evas_Device *dev);
+EVAS_API unsigned int evas_device_seat_id_get(const Evas_Device *dev);
/**
* Set the description of a device as a string
@@ -1119,7 +1135,7 @@ EAPI unsigned int evas_device_seat_id_get(const Evas_Device *dev);
*
* @since 1.8
*/
-EAPI void evas_device_description_set(Evas_Device *dev, const char *desc);
+EVAS_API void evas_device_description_set(Evas_Device *dev, const char *desc);
/**
* Get the description of a device
@@ -1137,7 +1153,7 @@ EAPI void evas_device_description_set(Evas_Device *dev, const char *desc);
*
* @since 1.8
*/
-EAPI const char *evas_device_description_get(const Evas_Device *dev);
+EVAS_API const char *evas_device_description_get(const Evas_Device *dev);
/**
* Set the parent of a device
@@ -1159,7 +1175,7 @@ EAPI const char *evas_device_description_get(const Evas_Device *dev);
*
* @since 1.8
*/
-EAPI void evas_device_parent_set(Evas_Device *dev, Evas_Device *parent) EINA_DEPRECATED;
+EVAS_API void evas_device_parent_set(Evas_Device *dev, Evas_Device *parent) EINA_DEPRECATED;
/**
* Get the parent of a device
@@ -1172,7 +1188,7 @@ EAPI void evas_device_parent_set(Evas_Device *dev, Evas_Device *parent) EINA_DEP
*
* @since 1.8
*/
-EAPI const Evas_Device *evas_device_parent_get(const Evas_Device *dev);
+EVAS_API const Evas_Device *evas_device_parent_get(const Evas_Device *dev);
/**
* Set the major class of device
@@ -1187,7 +1203,7 @@ EAPI const Evas_Device *evas_device_parent_get(const Evas_Device *dev);
*
* @since 1.8
*/
-EAPI void evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas) EINA_DEPRECATED;
+EVAS_API void evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas) EINA_DEPRECATED;
/**
* Get the major class of a device
@@ -1199,7 +1215,7 @@ EAPI void evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas) EINA_D
*
* @since 1.8
*/
-EAPI Evas_Device_Class evas_device_class_get(const Evas_Device *dev);
+EVAS_API Evas_Device_Class evas_device_class_get(const Evas_Device *dev);
/**
* Set the sub-class of a device
@@ -1212,7 +1228,7 @@ EAPI Evas_Device_Class evas_device_class_get(const Evas_Device *dev);
*
* @since 1.8
*/
-EAPI void evas_device_subclass_set(Evas_Device *dev, Evas_Device_Subclass clas);
+EVAS_API void evas_device_subclass_set(Evas_Device *dev, Evas_Device_Subclass clas);
/**
* Get the device sub-class
@@ -1222,7 +1238,7 @@ EAPI void evas_device_subclass_set(Evas_Device *dev, Evas_Device_Subclass clas);
*
* @since 1.8
*/
-EAPI Evas_Device_Subclass evas_device_subclass_get(const Evas_Device *dev);
+EVAS_API Evas_Device_Subclass evas_device_subclass_get(const Evas_Device *dev);
/**
* Set the emulation source device
@@ -1239,7 +1255,7 @@ EAPI Evas_Device_Subclass evas_device_subclass_get(const Evas_Device *dev);
*
* @since 1.8
*/
-EAPI void evas_device_emulation_source_set(Evas_Device *dev, Evas_Device *src);
+EVAS_API void evas_device_emulation_source_set(Evas_Device *dev, Evas_Device *src);
/**
* Get the emulation source device
@@ -1249,16 +1265,17 @@ EAPI void evas_device_emulation_source_set(Evas_Device *dev, Evas_Device *src);
*
* @since 1.8
*/
-EAPI const Evas_Device *evas_device_emulation_source_get(const Evas_Device *dev);
+EVAS_API const Evas_Device *evas_device_emulation_source_get(const Evas_Device *dev);
/**
* @}
*/
/**
- * @defgroup Evas_Image_Group Image Functions
+ * @defgroup Evas_Image Image Functions
*
- * Functions that deal with images at canvas level.
+ * Functions that deal with images at canvas level. Compare with
+ * @ref Evas_Object_Image functions which deal with images at the object level.
*
* @ingroup Evas_Canvas
*/
@@ -1760,7 +1777,7 @@ typedef void (*Evas_Object_Image_Pixels_Get_Cb)(void *data, Evas_Object *o);
*
* This functions is threadsafe.
*/
-EAPI Eina_Bool evas_object_image_extension_can_load_get(const char *file);
+EVAS_API Eina_Bool evas_object_image_extension_can_load_get(const char *file);
/**
* Check if a file extension may be supported by @ref Evas_Object_Image.
@@ -1772,17 +1789,17 @@ EAPI Eina_Bool evas_object_image_extension_can_load_get(cons
*
* This functions is threadsafe.
*/
-EAPI Eina_Bool evas_object_image_extension_can_load_fast_get(const char *file);
+EVAS_API Eina_Bool evas_object_image_extension_can_load_fast_get(const char *file);
/**
* @}
*/
/**
- * @defgroup Evas_Object_Text Text Object Functions
+ * @defgroup Evas_Object_Text_Group Text Object Functions
*
* Functions that operate on single line, single style text objects.
*
- * For multiline and multiple style text, see @ref Evas_Object_Textblock.
+ * For multiline and multiple style text, see @ref Evas_Object_Textblock_Group.
*
* See some @ref Example_Evas_Text "examples" on this group of functions.
*
@@ -1818,7 +1835,7 @@ EAPI Eina_Bool evas_object_image_extension_can_load_fast_get
*/
/**
- * @defgroup Evas_Object_Textgrid Textgrid Object Functions
+ * @defgroup Evas_Object_Textgrid_Group Textgrid Object Functions
*
* Textgrid objects manage chunks of text as a 2D grid of cells, each of
* which contains a single unicode character with color and style
@@ -1862,7 +1879,7 @@ struct _Evas_Textgrid_Cell
*/
/**
- * @defgroup Evas_Line_Group Line Object Functions
+ * @defgroup Evas_Object_Line_Group Line Object Functions
*
* Functions used to deal with evas line objects.
*
@@ -1901,7 +1918,7 @@ struct _Evas_Textgrid_Cell
* Evas_Object_Group and the extensions defined in @ref
* Evas_Smart_Object_Group. There are a couple of existent smart
* objects in Evas itself (see @ref Evas_Object_Box, @ref
- * Evas_Object_Table and @ref Evas_Smart_Object_Clipped).
+ * Evas_Object_Table_Group and @ref Evas_Smart_Object_Clipped).
*
* See also some @ref Example_Evas_Smart_Objects "examples" of this
* group of functions.
@@ -2319,7 +2336,7 @@ struct _Evas_Smart_Cb_Description
* when they are not referenced anymore. Thus, this function is of no use
* for Evas users, most probably.
*/
-EAPI void evas_smart_free(Evas_Smart *s) EINA_ARG_NONNULL(1);
+EVAS_API void evas_smart_free(Evas_Smart *s) EINA_ARG_NONNULL(1);
/**
* Creates a new #Evas_Smart from a given #Evas_Smart_Class struct
@@ -2336,7 +2353,7 @@ EAPI void evas_smart_free(Evas_Smart *s) EINA_ARG_N
* construct yours, consider using the #EVAS_SMART_SUBCLASS_NEW macro,
* which will make use of this function automatically for you.
*/
-EAPI Evas_Smart *evas_smart_class_new(const Evas_Smart_Class *sc) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Smart *evas_smart_class_new(const Evas_Smart_Class *sc) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Get the #Evas_Smart_Class handle of an #Evas_Smart struct
@@ -2344,7 +2361,7 @@ EAPI Evas_Smart *evas_smart_class_new(const Evas_Smart_Cla
* @param s a valid #Evas_Smart pointer
* @return the #Evas_Smart_Class in it
*/
-EAPI const Evas_Smart_Class *evas_smart_class_get(const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API const Evas_Smart_Class *evas_smart_class_get(const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Get the data pointer set on an #Evas_Smart struct
@@ -2354,7 +2371,7 @@ EAPI const Evas_Smart_Class *evas_smart_class_get(const Evas_Smart *s)
* This data pointer is set as the data field in the #Evas_Smart_Class
* passed in to evas_smart_class_new().
*/
-EAPI void *evas_smart_data_get(const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API void *evas_smart_data_get(const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Get the smart callbacks known by this #Evas_Smart handle's smart
@@ -2393,7 +2410,7 @@ EAPI void *evas_smart_data_get(const Evas_Smart *s)
* as well.
* @see evas_object_smart_callbacks_descriptions_get()
*/
-EAPI const Evas_Smart_Cb_Description **evas_smart_callbacks_descriptions_get(const Evas_Smart *s, unsigned int *count) EINA_ARG_NONNULL(1, 1);
+EVAS_API const Evas_Smart_Cb_Description **evas_smart_callbacks_descriptions_get(const Evas_Smart *s, unsigned int *count) EINA_ARG_NONNULL(1, 1);
/**
* Find a callback description for the callback named @a name.
@@ -2408,7 +2425,7 @@ EAPI const Evas_Smart_Cb_Description **evas_smart_callbacks_descriptions_get(con
*
* @see evas_smart_callbacks_descriptions_get()
*/
-EAPI const Evas_Smart_Cb_Description *evas_smart_callback_description_find(const Evas_Smart *s, const char *name) EINA_ARG_NONNULL(1, 2);
+EVAS_API const Evas_Smart_Cb_Description *evas_smart_callback_description_find(const Evas_Smart *s, const char *name) EINA_ARG_NONNULL(1, 2);
/**
* Sets one class to inherit from the other.
@@ -2427,7 +2444,7 @@ EAPI const Evas_Smart_Cb_Description *evas_smart_callback_description_find(cons
* this size. Everything after @c Evas_Smart_Class size is copied
* using regular memcpy().
*/
-EAPI Eina_Bool evas_smart_class_inherit_full(Evas_Smart_Class *sc, const Evas_Smart_Class *parent_sc, unsigned int parent_sc_size) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_smart_class_inherit_full(Evas_Smart_Class *sc, const Evas_Smart_Class *parent_sc, unsigned int parent_sc_size) EINA_ARG_NONNULL(1, 2);
/**
* Get the number of uses of the smart instance
@@ -2448,7 +2465,7 @@ EAPI Eina_Bool evas_smart_class_inherit_full(Evas_Smart_
* Evas_Smart_Class data from memory (have it be a constant structure and
* data), or use this API call and be very careful.
*/
-EAPI int evas_smart_usage_get(const Evas_Smart *s);
+EVAS_API int evas_smart_usage_get(const Evas_Smart *s);
/**
* @def evas_smart_class_inherit
@@ -2526,7 +2543,7 @@ EAPI int evas_smart_usage_get(const Evas_Smart *s)
*
* @ingroup Evas_Smart_Object_Group
*/
-EAPI void evas_smart_legacy_type_register(const char *type, const Efl_Class *klass) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_smart_legacy_type_register(const char *type, const Efl_Class *klass) EINA_ARG_NONNULL(1, 2);
/**
* @}
@@ -2617,7 +2634,7 @@ struct _Evas_Object_Smart_Clipped_Data
* child ones, like the #EVAS_SMART_SUBCLASS_NEW macro or the
* evas_smart_class_inherit_full() function.
*/
-EAPI void evas_object_smart_clipped_smart_set(Evas_Smart_Class *sc) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_smart_clipped_smart_set(Evas_Smart_Class *sc) EINA_ARG_NONNULL(1);
/**
* Get a pointer to the <b>clipped smart object's</b> class, to use
@@ -2626,13 +2643,13 @@ EAPI void evas_object_smart_clipped_smart_set(Evas_Smart_Clas
* @see #Evas_Smart_Object_Clipped for more information on this smart
* class
*/
-EAPI const Evas_Smart_Class *evas_object_smart_clipped_class_get(void) EINA_CONST;
+EVAS_API const Evas_Smart_Class *evas_object_smart_clipped_class_get(void) EINA_CONST;
/**
* @}
*/
/**
- * @defgroup Evas_Object_Box Box Smart Object
+ * @defgroup Evas_Object_Box_Group Box Smart Object
*
* A box is a convenience smart object that packs children inside it
* in @b sequence, using a layouting function specified by the
@@ -2656,7 +2673,7 @@ EAPI const Evas_Smart_Class *evas_object_smart_clipped_class_get(void) EINA_CONS
*
* Smart class extension, providing extra box object requirements.
*
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
typedef struct _Evas_Object_Box_Api Evas_Object_Box_Api;
@@ -2665,7 +2682,7 @@ typedef struct _Evas_Object_Box_Api Evas_Object_Box_Api;
*
* Smart object instance data, providing box object requirements.
*
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
typedef struct _Evas_Object_Box_Data Evas_Object_Box_Data;
@@ -2691,7 +2708,7 @@ typedef struct _Evas_Object_Box_Data Evas_Object_Box_Data;
* a name string. Their values are open to any data. See the API on
* option properties for more details.
*
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
typedef struct _Evas_Object_Box_Option Evas_Object_Box_Option;
@@ -2704,7 +2721,7 @@ typedef struct _Evas_Object_Box_Option Evas_Object_Box_Option;
* passed any custom data one could have set to a given box layouting
* function, with evas_object_box_layout_set().
*
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
typedef void (*Evas_Object_Box_Layout)(Evas_Object *o, Evas_Object_Box_Data *priv, void *user_data);
@@ -2714,7 +2731,7 @@ typedef void (*Evas_Object_Box_Layout)(Evas_Object *o, Evas_Object_Box_Data *pri
* Current version for Evas box object smart class, a value that goes
* to _Evas_Object_Box_Api::version.
*
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
#define EVAS_OBJECT_BOX_API_VERSION 1
@@ -2727,7 +2744,7 @@ typedef void (*Evas_Object_Box_Layout)(Evas_Object *o, Evas_Object_Box_Data *pri
* evas_object_box_layout_set().
*
* @extends Evas_Smart_Class
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
struct _Evas_Object_Box_Api
{
@@ -2763,7 +2780,7 @@ struct _Evas_Object_Box_Api
* @see EVAS_OBJECT_BOX_API_INIT_NULL
* @see EVAS_OBJECT_BOX_API_INIT_VERSION
* @see EVAS_OBJECT_BOX_API_INIT_NAME_VERSION
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
#define EVAS_OBJECT_BOX_API_INIT(smart_class_init) {smart_class_init, EVAS_OBJECT_BOX_API_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
@@ -2775,7 +2792,7 @@ struct _Evas_Object_Box_Api
* @see EVAS_OBJECT_BOX_API_INIT_VERSION
* @see EVAS_OBJECT_BOX_API_INIT_NAME_VERSION
* @see EVAS_OBJECT_BOX_API_INIT
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
#define EVAS_OBJECT_BOX_API_INIT_NULL EVAS_OBJECT_BOX_API_INIT(EVAS_SMART_CLASS_INIT_NULL)
@@ -2792,7 +2809,7 @@ struct _Evas_Object_Box_Api
* @see EVAS_OBJECT_BOX_API_INIT_NULL
* @see EVAS_OBJECT_BOX_API_INIT_NAME_VERSION
* @see EVAS_OBJECT_BOX_API_INIT
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
#define EVAS_OBJECT_BOX_API_INIT_VERSION EVAS_OBJECT_BOX_API_INIT(EVAS_SMART_CLASS_INIT_VERSION)
@@ -2813,7 +2830,7 @@ struct _Evas_Object_Box_Api
* @see EVAS_OBJECT_BOX_API_INIT_NULL
* @see EVAS_OBJECT_BOX_API_INIT_VERSION
* @see EVAS_OBJECT_BOX_API_INIT
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
#define EVAS_OBJECT_BOX_API_INIT_NAME_VERSION(name) EVAS_OBJECT_BOX_API_INIT(EVAS_SMART_CLASS_INIT_NAME_VERSION(name))
@@ -2826,7 +2843,7 @@ struct _Evas_Object_Box_Api
* #Evas_Object_Box_Data to fit its own needs.
*
* @extends Evas_Object_Smart_Clipped_Data
- * @ingroup Evas_Object_Box
+ * @ingroup Evas_Object_Box_Group
*/
struct _Evas_Object_Box_Data
{
@@ -2866,7 +2883,7 @@ struct _Evas_Object_Box_Option
* @param api The box API struct to set back, most probably with
* overridden fields (on class extensions scenarios)
*/
-EAPI void evas_object_box_smart_set(Evas_Object_Box_Api *api) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_box_smart_set(Evas_Object_Box_Api *api) EINA_ARG_NONNULL(1);
/**
* Get the Evas box smart class, for inheritance purposes.
@@ -2876,14 +2893,14 @@ EAPI void evas_object_box_smart_set(Evas_Object_Box_Api *a
* The returned value is @b not to be modified, just use it as your
* parent class.
*/
-EAPI const Evas_Object_Box_Api *evas_object_box_smart_class_get(void) EINA_CONST;
+EVAS_API const Evas_Object_Box_Api *evas_object_box_smart_class_get(void) EINA_CONST;
/**
* @}
*/
/**
- * @defgroup Evas_Object_Table Table Smart Object.
+ * @defgroup Evas_Object_Table_Group Table Smart Object.
*
* Convenience smart object that packs children using a tabular
* layout using children size hints to define their size and
@@ -2898,7 +2915,7 @@ EAPI const Evas_Object_Box_Api *evas_object_box_smart_class_get(void) EINA_CONST
*/
/**
- * @defgroup Evas_Object_Grid Grid Smart Object.
+ * @defgroup Evas_Object_Grid_Group Grid Smart Object.
*
* Convenience smart object that packs children under a regular grid
* layout, using their virtual grid location and size to determine
@@ -2991,7 +3008,7 @@ struct _Evas_Cserve_Config
* @return @c EINA_TRUE if it wants, @c EINA_FALSE otherwise.
* @ingroup Evas_Cserve
*/
-EAPI Eina_Bool evas_cserve_want_get(void) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_cserve_want_get(void) EINA_WARN_UNUSED_RESULT;
/**
* Retrieves if the system is connected to the server used to share
@@ -3000,7 +3017,7 @@ EAPI Eina_Bool evas_cserve_want_get(void) EINA_WARN_UNUSED_RESULT;
* @return @c EINA_TRUE if it's connected, @c EINA_FALSE otherwise.
* @ingroup Evas_Cserve
*/
-EAPI Eina_Bool evas_cserve_connected_get(void) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_cserve_connected_get(void) EINA_WARN_UNUSED_RESULT;
/**
* Retrieves statistics from a running bitmap sharing server.
@@ -3011,14 +3028,14 @@ EAPI Eina_Bool evas_cserve_connected_get(void) EINA_WARN_UNUSED_RESULT;
* @c EINA_FALSE otherwise (when @p stats is untouched)
* @ingroup Evas_Cserve
*/
-EAPI Eina_Bool evas_cserve_stats_get(Evas_Cserve_Stats *stats) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_cserve_stats_get(Evas_Cserve_Stats *stats) EINA_WARN_UNUSED_RESULT;
/**
* Completely discard/clean a given images cache, thus re-setting it.
*
* @param cache A handle to the given images cache.
*/
-EAPI void evas_cserve_image_cache_contents_clean(Evas_Cserve_Image_Cache *cache);
+EVAS_API void evas_cserve_image_cache_contents_clean(Evas_Cserve_Image_Cache *cache);
/**
* Retrieves the current configuration of the Evas image caching
@@ -3037,7 +3054,7 @@ EAPI void evas_cserve_image_cache_contents_clean(Evas_Cserve_Image_Cache
*
* @ingroup Evas_Cserve
*/
-EAPI Eina_Bool evas_cserve_config_get(Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_cserve_config_get(Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT;
/**
* Changes the configurations of the Evas image caching server.
@@ -3051,14 +3068,14 @@ EAPI Eina_Bool evas_cserve_config_get(Evas_Cserve_Config *config) EINA_WARN_UN
*
* @ingroup Evas_Cserve
*/
-EAPI Eina_Bool evas_cserve_config_set(const Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_cserve_config_set(const Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT;
/**
* Force the system to disconnect from the bitmap caching server.
*
* @ingroup Evas_Cserve
*/
-EAPI void evas_cserve_disconnect(void);
+EVAS_API void evas_cserve_disconnect(void);
/**
* @defgroup Evas_Utils General Utilities
@@ -3097,7 +3114,7 @@ EAPI void evas_cserve_disconnect(void);
*
* @ingroup Evas_Utils
*/
-EAPI const char *evas_load_error_str(Evas_Load_Error error);
+EVAS_API const char *evas_load_error_str(Evas_Load_Error error);
/* Evas utility routines for color space conversions */
/* hsv color space has h in the range 0.0 to 360.0, and s,v in the range 0.0 to 1.0 */
@@ -3118,7 +3135,7 @@ EAPI const char *evas_load_error_str(Evas_Load_Error error);
*
* @ingroup Evas_Utils
**/
-EAPI void evas_color_hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b);
+EVAS_API void evas_color_hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b);
/**
* Convert a given color from RGB to HSV format.
@@ -3135,7 +3152,7 @@ EAPI void evas_color_hsv_to_rgb(float h, float s, float v, int *r, int *g, int *
*
* @ingroup Evas_Utils
**/
-EAPI void evas_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v);
+EVAS_API void evas_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v);
/* argb color space has a,r,g,b in the range 0 to 255 */
@@ -3152,7 +3169,7 @@ EAPI void evas_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, float *
*
* @ingroup Evas_Utils
**/
-EAPI void evas_color_argb_premul(int a, int *r, int *g, int *b);
+EVAS_API void evas_color_argb_premul(int a, int *r, int *g, int *b);
/**
* Undo pre-multiplication of a rgb triplet by an alpha factor.
@@ -3169,7 +3186,7 @@ EAPI void evas_color_argb_premul(int a, int *r, int *g, int *b);
*
* @ingroup Evas_Utils
**/
-EAPI void evas_color_argb_unpremul(int a, int *r, int *g, int *b);
+EVAS_API void evas_color_argb_unpremul(int a, int *r, int *g, int *b);
/**
* Pre-multiplies data by an alpha factor.
@@ -3182,7 +3199,7 @@ EAPI void evas_color_argb_unpremul(int a, int *r, int *g, int *b);
*
* @ingroup Evas_Utils
**/
-EAPI void evas_data_argb_premul(unsigned int *data, unsigned int len);
+EVAS_API void evas_data_argb_premul(unsigned int *data, unsigned int len);
/**
* Undo pre-multiplication data by an alpha factor.
@@ -3195,7 +3212,7 @@ EAPI void evas_data_argb_premul(unsigned int *data, unsigned int len);
*
* @ingroup Evas_Utils
**/
-EAPI void evas_data_argb_unpremul(unsigned int *data, unsigned int len);
+EVAS_API void evas_data_argb_unpremul(unsigned int *data, unsigned int len);
/* string and font handling */
@@ -3218,7 +3235,7 @@ EAPI void evas_data_argb_unpremul(unsigned int *data, unsigned int len);
*
* @ingroup Evas_Utils
*/
-EAPI int evas_string_char_next_get(const char *str, int pos, int *decoded) EINA_ARG_NONNULL(1);
+EVAS_API int evas_string_char_next_get(const char *str, int pos, int *decoded) EINA_ARG_NONNULL(1);
/**
* Gets the previous character in the string
@@ -3239,7 +3256,7 @@ EAPI int evas_string_char_next_get(const char *str, int pos, int *decoded) EINA
*
* @ingroup Evas_Utils
*/
-EAPI int evas_string_char_prev_get(const char *str, int pos, int *decoded) EINA_ARG_NONNULL(1);
+EVAS_API int evas_string_char_prev_get(const char *str, int pos, int *decoded) EINA_ARG_NONNULL(1);
/**
* Get the length in characters of the string.
@@ -3249,7 +3266,7 @@ EAPI int evas_string_char_prev_get(const char *str, int pos, int *decoded) EINA
*
* @ingroup Evas_Utils
*/
-EAPI int evas_string_char_len_get(const char *str) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API int evas_string_char_len_get(const char *str) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Get language direction.
@@ -3257,7 +3274,7 @@ EAPI int evas_string_char_len_get(const char *str) EINA_WARN_UNUSED_RESULT EINA
* @ingroup Evas_Utils
* @since 1.20
*/
-EAPI Evas_BiDi_Direction evas_language_direction_get(void);
+EVAS_API Evas_BiDi_Direction evas_language_direction_get(void);
/**
* Reinitialize language from the environment.
@@ -3268,7 +3285,7 @@ EAPI Evas_BiDi_Direction evas_language_direction_get(void);
* @ingroup Evas_Utils
* @since 1.18
*/
-EAPI void evas_language_reinit(void);
+EVAS_API void evas_language_reinit(void);
/**
* @defgroup Evas_Keys Key Input Functions
@@ -3306,7 +3323,7 @@ EAPI void evas_language_reinit(void);
*/
/**
- * @ingroup Evas_Font_Group
+ * @addtogroup Evas_Font_Group
*
* @{
*/
@@ -3316,165 +3333,77 @@ EAPI void evas_language_reinit(void);
*
* Functions that edit the paths being used to load fonts.
*
- * @ingroup Evas_Font_Group
+ * @{
*/
/**
* Removes all font paths loaded into memory by evas_font_path_app_* APIs
* for the application.
- * @ingroup Evas_Font_Path_Group
* @since 1.9
*/
-EAPI void evas_font_path_global_clear(void);
+EVAS_API void evas_font_path_global_clear(void);
/**
* Appends a font path to the list of font paths used by the application.
* @param path The new font path.
- * @ingroup Evas_Font_Path_Group
* @since 1.9
*/
-EAPI void evas_font_path_global_append(const char *path) EINA_ARG_NONNULL(1);
+EVAS_API void evas_font_path_global_append(const char *path) EINA_ARG_NONNULL(1);
/**
* Prepends a font path to the list of font paths used by the application.
* @param path The new font path.
- * @ingroup Evas_Font_Path_Group
* @since 1.9
*/
-EAPI void evas_font_path_global_prepend(const char *path) EINA_ARG_NONNULL(1);
+EVAS_API void evas_font_path_global_prepend(const char *path) EINA_ARG_NONNULL(1);
/**
* Retrieves the list of font paths used by the application.
* @return The list of font paths used.
- * @ingroup Evas_Font_Path_Group
* @since 1.9
*/
-EAPI const Eina_List *evas_font_path_global_list(void) EINA_WARN_UNUSED_RESULT;
+EVAS_API const Eina_List *evas_font_path_global_list(void) EINA_WARN_UNUSED_RESULT;
+
+/**
+ * @}
+ */
/**
* Reinitialize FontConfig. If FontConfig has to be reinitialized
* according to changes of system environments (e.g. Changing font config files), it will be useful.
*
- * @ingroup Evas_Font_Path_Group
* @since 1.14
*/
-EAPI void evas_font_reinit(void);
+EVAS_API void evas_font_reinit(void);
-
-/* this is now public, non-beta api forever because someone didn't add a beta
- api guard.
+/**
+ * @}
*/
-#ifndef _EFL_ANIMATION_EO_CLASS_TYPE
-#define _EFL_ANIMATION_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation;
-
-#endif
-
-#ifndef _EFL_ANIMATION_ALPHA_EO_CLASS_TYPE
-#define _EFL_ANIMATION_ALPHA_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Alpha;
-
-#endif
-
-#ifndef _EFL_ANIMATION_ROTATE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_ROTATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Rotate;
-
-#endif
-
-#ifndef _EFL_ANIMATION_SCALE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_SCALE_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Scale;
-
-#endif
-
-#ifndef _EFL_ANIMATION_TRANSLATE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_TRANSLATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Translate;
-
-#endif
-
-#ifndef _EFL_ANIMATION_GROUP_EO_CLASS_TYPE
-#define _EFL_ANIMATION_GROUP_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Group;
-
-#endif
-
-#ifndef _EFL_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-#define _EFL_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Group_Parallel;
-
-#endif
-
-#ifndef _EFL_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
-#define _EFL_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
-typedef Eo Efl_Animation_Group_Sequential;
-
-#endif
-
-#ifndef _EFL_ANIMATION_PLAYER_EO_CLASS_TYPE
-#define _EFL_ANIMATION_PLAYER_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Player;
-
-#endif
-
-#ifndef _EFL_ANIMATION_PLAYER_ALPHA_EO_CLASS_TYPE
-#define _EFL_ANIMATION_PLAYER_ALPHA_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Player_Alpha;
-
-#endif
-
-#ifndef _EFL_ANIMATION_PLAYER_ROTATE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_PLAYER_ROTATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Player_Rotate;
-
-#endif
-
-#ifndef _EFL_ANIMATION_PLAYER_SCALE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_PLAYER_SCALE_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Player_Scale;
-
-#endif
-
-#ifndef _EFL_ANIMATION_PLAYER_TRANSLATE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_PLAYER_TRANSLATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Player_Translate;
-
-#endif
-
-#ifndef _EFL_ANIMATION_PLAYER_GROUP_EO_CLASS_TYPE
-#define _EFL_ANIMATION_PLAYER_GROUP_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Player_Group;
-
-#endif
-
-#ifndef _EFL_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-#define _EFL_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-
-typedef Eo Efl_Animation_Group_Parallel;
-
-#endif
+/**
+ * Set the limit in bytes for memory allocated by font glyphs in evas.
+ * @param[in] options for caching.
+ * @param[in] bytes cache size in bytes, pass negative value to ignore the limit.
+ *
+ * @since 1.24
+ */
+EVAS_API void evas_font_data_cache_set(Evas_Font_Data_Cache options, int byte);
-#ifndef _EFL_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
-#define _EFL_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
+/**
+ * @}
+ */
-typedef Eo Efl_Animation_Group_Sequential;
+/**
+ * Get the limit in bytes for memory allocated by font glyphs in evas.
+ * @param[in] options for caching.
+ * @return Returns font allocated memory cache limit, if value is negative this means no limit.
+ * @since 1.24
+ */
+EVAS_API int evas_font_data_cache_get(Evas_Font_Data_Cache options);
-#endif
+/**
+ * @}
+ */
// The below type are necessary for legacy API and need to be manually kept in sync with .eo file.
#ifndef _EFL_INPUT_DEVICE_EO_CLASS_TYPE
@@ -3508,7 +3437,3 @@ typedef Eo Efl_Gfx_Entity;
#endif
#endif
-
-/**
- * @}
- */
diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h
index 1137426a30..bd62df03ab 100644
--- a/src/lib/evas/Evas_Eo.h
+++ b/src/lib/evas/Evas_Eo.h
@@ -9,119 +9,6 @@ typedef Eo Efl_Canvas_Vg_Node;
#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_ALPHA_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_ALPHA_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Alpha;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_ROTATE_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_ROTATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Rotate;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_SCALE_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_SCALE_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Scale;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_TRANSLATE_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_TRANSLATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Translate;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_GROUP_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_GROUP_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Group;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Group_Parallel;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Group_Sequential;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_PLAYER_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_PLAYER_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Player;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_PLAYER_ALPHA_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_PLAYER_ALPHA_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Player_Alpha;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_PLAYER_ROTATE_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_PLAYER_ROTATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Player_Rotate;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_PLAYER_SCALE_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_PLAYER_SCALE_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Player_Scale;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_PLAYER_TRANSLATE_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_PLAYER_TRANSLATE_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Player_Translate;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_PLAYER_GROUP_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_PLAYER_GROUP_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Player_Group;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_GROUP_PARALLEL_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Group_Parallel;
-
-#endif
-
-#ifndef _EFL_CANVAS_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
-#define _EFL_CANVAS_ANIMATION_GROUP_SEQUENTIAL_EO_CLASS_TYPE
-
-typedef Eo Efl_Canvas_Animation_Group_Sequential;
-
-#endif
-
struct _Efl_Canvas_Animation_Player_Event_Running
{
double progress;
@@ -147,7 +34,7 @@ struct _Efl_Canvas_Object_Animation_Event
*
* @{
*/
-#include "canvas/efl_text_cursor.eo.h"
+#include "canvas/efl_text_cursor_object.eo.h"
#include "canvas/efl_text_formatter.eo.h"
#include "canvas/efl_canvas_textblock.eo.h"
#include "canvas/efl_canvas_textblock_factory.eo.h"
@@ -199,247 +86,39 @@ struct _Efl_Canvas_Object_Animation_Event
#include "gesture/efl_canvas_gesture_touch.eo.h"
#include "gesture/efl_canvas_gesture.eo.h"
#include "gesture/efl_canvas_gesture_tap.eo.h"
-#include "gesture/efl_canvas_gesture_long_tap.eo.h"
+#include "gesture/efl_canvas_gesture_long_press.eo.h"
#include "gesture/efl_canvas_gesture_double_tap.eo.h"
#include "gesture/efl_canvas_gesture_triple_tap.eo.h"
#include "gesture/efl_canvas_gesture_momentum.eo.h"
#include "gesture/efl_canvas_gesture_flick.eo.h"
+#include "gesture/efl_canvas_gesture_rotate.eo.h"
#include "gesture/efl_canvas_gesture_zoom.eo.h"
+#include "gesture/efl_canvas_gesture_custom.eo.h"
#include "gesture/efl_canvas_gesture_recognizer.eo.h"
#include "gesture/efl_canvas_gesture_recognizer_tap.eo.h"
-#include "gesture/efl_canvas_gesture_recognizer_long_tap.eo.h"
+#include "gesture/efl_canvas_gesture_recognizer_long_press.eo.h"
#include "gesture/efl_canvas_gesture_recognizer_double_tap.eo.h"
#include "gesture/efl_canvas_gesture_recognizer_triple_tap.eo.h"
#include "gesture/efl_canvas_gesture_recognizer_momentum.eo.h"
#include "gesture/efl_canvas_gesture_recognizer_flick.eo.h"
+#include "gesture/efl_canvas_gesture_recognizer_rotate.eo.h"
#include "gesture/efl_canvas_gesture_recognizer_zoom.eo.h"
+#include "gesture/efl_canvas_gesture_recognizer_custom.eo.h"
#include "gesture/efl_canvas_gesture_manager.eo.h"
-#include "gesture/efl_gesture_events.eo.h"
+#include "gesture/efl_canvas_gesture_events.eo.h"
#include "canvas/efl_canvas_object.eo.h"
-#include "canvas/efl_canvas_object_animation.eo.h"
#include "canvas/efl_canvas_animation.eo.h"
-#include "canvas/efl_canvas_animation_alpha.eo.h"
-#include "canvas/efl_canvas_animation_rotate.eo.h"
-#include "canvas/efl_canvas_animation_scale.eo.h"
-#include "canvas/efl_canvas_animation_translate.eo.h"
-#include "canvas/efl_canvas_animation_group.eo.h"
-#include "canvas/efl_canvas_animation_group_parallel.eo.h"
-#include "canvas/efl_canvas_animation_group_sequential.eo.h"
+#include "canvas/efl_canvas_alpha_animation.eo.h"
+#include "canvas/efl_canvas_rotate_animation.eo.h"
+#include "canvas/efl_canvas_scale_animation.eo.h"
+#include "canvas/efl_canvas_translate_animation.eo.h"
+#include "canvas/efl_canvas_group_animation.eo.h"
+#include "canvas/efl_canvas_parallel_group_animation.eo.h"
+#include "canvas/efl_canvas_sequential_group_animation.eo.h"
+#include "canvas/efl_canvas_object_animation.eo.h"
#include "canvas/efl_canvas_event_grabber.eo.h"
- /**
- * @defgroup Evas_3D Evas 3D Extensions
- *
- * Evas extension to support 3D rendering.
- *
- * @ingroup Evas
- */
-
-#include "canvas/evas_canvas3d_types.eot.h"
-
-/**
- * @page evas_canvas3d_main Evas 3D
- *
- * @since 1.10
- *
- * @section toc Table of Contents
- *
- * @li @ref evas_canvas3d_intro
- * @li @ref evas_canvas3d_example
- *
- * @section evas_canvas3d_intro Introduction
- *
- * Evas 3D is an extension to support 3D scene graph rendering into 2D Evas
- * canvases, with tree-based scene graph manipulation and other typical 3D
- * rendering techniques.
- *
- * 3D objects are used to describe three dimensional scenes and to provide
- * interfaces to connect the scene to an Evas image object for rendering.
- *
- * Scenes are constructed by locating cameras and lights and selecting desired
- * meshes, and organizing Node objects into hierarchical n-ary tree data structures.
- * The scene is stacked on the canvas with existing Evas objects, which permits
- * intermingling 3D rendered content in existing 2D application layouts.
- *
- * Rendering techniques supported by Evas 3D include flat and phong
- * shading, normal and texture mapping, and triangle meshes. Existing
- * Evas objects may also be used as textures inside the 3D scene,
- * including EFL widgets and even application windows. This latter
- * capability makes it possible to create a 3D version of an arbitrary
- * EFL application with minimal code changes.
- *
- * @section evas_canvas3d_example Introductory Example
- *
- * @include evas-3d-cube.c
- */
-
-/**
- * @defgroup Evas_Canvas3D_Types Types & Enums
- * @ingroup Evas_3D
- *
- * Primitive type definitions and enumerations.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Object Generic 3D Object Descriptions
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Object structure is an abstract base for other Evas
- * 3D objects (scenes, nodes, lights, meshes, textures, and materials)
- * with reference counting and propagation of modifications via
- * reference tracking. This permits, for example, when a scene object
- * is modified (marked dirty), a number of image objects rendering that
- * object to be notified to update themselves, without needing to call
- * update functions manually.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Scene Scene Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Scene structure represents a captured image of a
- * scene graph through its viewing camera. A scene can be associated
- * with an image object for canvas display via the
- * evas_object_image_scene_set() function.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Node Node Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Node structure defines the position, orientation,
- * and scale of canvas objects (cameras, lights, meshes, etc.) in a 3D
- * space. These nodes can be organized into a hierarchical n-ary tree
- * structure to construct a scene graph.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Camera Camera Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Camera structure defines properties used to
- * generate 2D pictures of a given scene graph, similar in concept to
- * focus length and film size for a real world camera.
- *
- * A given camera definition can be used to take multiple pictures of
- * the scene by establishing multiple nodes for the
- * Evas_Canvas3D_Camera, each of which are located at different
- * positions and with different orientations. Convenience routines
- * evas_canvas3d_node_position_set() and
- * evas_canvas3d_node_look_at_set() are provided to adjust the position
- * and viewing direction for these nodes.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Light Light Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Light structure defines various light source
- * properties. Reflection models include: Ambient, diffuse, and
- * specular. Light models include directional, point, and spot. The
- * position and direction for the light is tracked by the node that
- * contains the light.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Mesh Mesh Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Mesh structure manages key-frame based mesh
- * animations for geometrical objects like character models, terrain,
- * buildings, and other such visible objects. Each mesh frame can have
- * its own material and geometric data. Blending functions, fog
- * effects, level of detail boundaries, and shadow properties are also
- * supported.
- *
- * Like other data objects, a mesh definition is located and oriented in
- * the canvas with one or more nodes, with the mesh transformed from its
- * modeling coordinate space to the node's coordinate space. The frame
- * number is also tracked by the node, permitting creation of multiple
- * nodes in the canvas each set to a different animation frame, for
- * example.
- *
- * Unlike camera and light objects, multiple meshes can be contained in
- * a single node.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Primitive Primitive Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Primitive structure defines the data for
- * generating meshes for various types of primitive shapes such as
- * cubes, cylinders, spheres, surfaces, terrain, etc. Use the
- * evas_canvas3d_mesh_from_primitive_set() function to generate a
- * mesh's frame of this primitive.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Texture Texture Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Texture structure associates a 2D bitmap image to a
- * material for a surface. Image data for the texture can be loaded
- * from memory, a file, or an Evas_Object. Use the
- * evas_canvas3d_material_texture_set() function to add the texture to
- * an Evas_Canvas3DMaterial's slot.
- */
-
-/**
- * @defgroup Evas_Canvas3D_Material Material Object
- * @ingroup Evas_3D
- *
- * The Evas_Canvas3D_Material structure defines a set of material
- * attributes used for determining the color of mesh surfaces. Each
- * attribute is defined by a color value and texture map. The five
- * attributes are: ambient, diffuse, specular, emission, and normal.
- */
-
-/**
- * @typedef Evas_Canvas3D_Surface_Func
- *
- * The Evas_Canvas3D_Surface_Func type of functions are used to
- * create parametric surfaces as primitives. These compute the
- * vertex x,y,z values for given v,u values.
- *
- * @param out_x The x component of the calculated value.
- * @param out_y The y component of the calculated value.
- * @param out_z The z component of the calculated value.
- * @param a is the v value.
- * @param b is the u value.
-
- * @see Evas_Canvas3D_Primitive
- *
- * @since 1.15
- * @ingroup Evas_Canvas3D_Primitive
- */
-typedef void (Evas_Canvas3D_Surface_Func)(Evas_Real *out_x,
- Evas_Real *out_y,
- Evas_Real *out_z,
- Evas_Real a,
- Evas_Real b);
-
-#include "canvas/evas_canvas3d_object.eo.h"
-
-#include "canvas/evas_canvas3d_texture.eo.h"
-
-#include "canvas/evas_canvas3d_material.eo.h"
-
-#include "canvas/evas_canvas3d_light.eo.h"
-
-#include "canvas/evas_canvas3d_primitive.eo.h"
-
-#include "canvas/evas_canvas3d_mesh.eo.h"
-
-#include "canvas/evas_canvas3d_node.eo.h"
-
-#include "canvas/evas_canvas3d_camera.eo.h"
-
-#include "canvas/evas_canvas3d_scene.eo.h"
-
-#include "canvas/efl_canvas_scene3d.eo.h"
-
#include "canvas/efl_canvas_image_internal.eo.h"
#include "canvas/efl_canvas_image.eo.h"
#include "canvas/efl_canvas_snapshot.eo.h"
diff --git a/src/lib/evas/Evas_GL.h b/src/lib/evas/Evas_GL.h
index d06e88a053..614fef9334 100644
--- a/src/lib/evas/Evas_GL.h
+++ b/src/lib/evas/Evas_GL.h
@@ -4,31 +4,7 @@
#include <Evas.h>
//#include <GL/gl.h>
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
#ifdef __cplusplus
extern "C" {
@@ -581,7 +557,7 @@ struct _Evas_GL_Config
*
* @return The created Evas_GL object, or @c NULL in case of failure
*/
-EAPI Evas_GL *evas_gl_new (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Evas_GL *evas_gl_new (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Frees an Evas_GL object.
@@ -590,7 +566,7 @@ EAPI Evas_GL *evas_gl_new (Evas *e) EINA_WARN_UNU
*
* @see evas_gl_new
*/
-EAPI void evas_gl_free (Evas_GL *evas_gl) EINA_ARG_NONNULL(1);
+EVAS_API void evas_gl_free (Evas_GL *evas_gl) EINA_ARG_NONNULL(1);
/**
* @brief Allocates a new config object for the user to fill out.
@@ -600,7 +576,7 @@ EAPI void evas_gl_free (Evas_GL *evas_gl) EINA
*
* @see evas_gl_config_free
*/
-EAPI Evas_GL_Config *evas_gl_config_new (void);
+EVAS_API Evas_GL_Config *evas_gl_config_new (void);
/**
* @brief Frees a config object created from evas_gl_config_new.
@@ -612,7 +588,7 @@ EAPI Evas_GL_Config *evas_gl_config_new (void);
*
* @see evas_gl_config_new
*/
-EAPI void evas_gl_config_free (Evas_GL_Config *cfg) EINA_ARG_NONNULL(1);
+EVAS_API void evas_gl_config_free (Evas_GL_Config *cfg) EINA_ARG_NONNULL(1);
/**
* @brief Creates and returns a new @ref Evas_GL_Surface object for GL Rendering.
@@ -627,7 +603,7 @@ EAPI void evas_gl_config_free (Evas_GL_Config *cfg) E
*
* @see evas_gl_surface_destroy
*/
-EAPI Evas_GL_Surface *evas_gl_surface_create (Evas_GL *evas_gl, Evas_GL_Config *cfg, int w, int h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1,2);
+EVAS_API Evas_GL_Surface *evas_gl_surface_create (Evas_GL *evas_gl, Evas_GL_Config *cfg, int w, int h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1,2);
/**
* @brief Create a pixel buffer surface
@@ -660,7 +636,7 @@ EAPI Evas_GL_Surface *evas_gl_surface_create (Evas_GL *evas_gl, Evas
*
* @since 1.12
*/
-EAPI Evas_GL_Surface *evas_gl_pbuffer_surface_create(Evas_GL *evas_gl, Evas_GL_Config *cfg, int w, int h, const int *attrib_list) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1,2);
+EVAS_API Evas_GL_Surface *evas_gl_pbuffer_surface_create(Evas_GL *evas_gl, Evas_GL_Config *cfg, int w, int h, const int *attrib_list) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1,2);
/**
* @brief Destroys an Evas GL Surface.
@@ -670,7 +646,7 @@ EAPI Evas_GL_Surface *evas_gl_pbuffer_surface_create(Evas_GL *evas_gl, E
*
* @note This function can also destroy pbuffer surfaces.
*/
-EAPI void evas_gl_surface_destroy (Evas_GL *evas_gl, Evas_GL_Surface *surf) EINA_ARG_NONNULL(1,2);
+EVAS_API void evas_gl_surface_destroy (Evas_GL *evas_gl, Evas_GL_Surface *surf) EINA_ARG_NONNULL(1,2);
/**
* @brief Creates and returns a new Evas GL context object.
@@ -681,7 +657,7 @@ EAPI void evas_gl_surface_destroy (Evas_GL *evas_gl, Evas
* @return The created context,
* otherwise @c NULL on failure
*/
-EAPI Evas_GL_Context *evas_gl_context_create (Evas_GL *evas_gl, Evas_GL_Context *share_ctx) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Evas_GL_Context *evas_gl_context_create (Evas_GL *evas_gl, Evas_GL_Context *share_ctx) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Creates and returns a new Evas GL context object for OpenGL-ES 1.1 or 2.0.
@@ -706,7 +682,7 @@ EAPI Evas_GL_Context *evas_gl_context_create (Evas_GL *evas_gl, Evas
*
* @since 1.12
*/
-EAPI Evas_GL_Context *evas_gl_context_version_create(Evas_GL *evas_gl, Evas_GL_Context *share_ctx, Evas_GL_Context_Version version) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Evas_GL_Context *evas_gl_context_version_create(Evas_GL *evas_gl, Evas_GL_Context *share_ctx, Evas_GL_Context_Version version) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Destroys the given Evas GL context object.
@@ -717,7 +693,7 @@ EAPI Evas_GL_Context *evas_gl_context_version_create(Evas_GL *evas_gl, E
* @see evas_gl_context_create
* @see evas_gl_context_version_create
*/
-EAPI void evas_gl_context_destroy (Evas_GL *evas_gl, Evas_GL_Context *ctx) EINA_ARG_NONNULL(1,2);
+EVAS_API void evas_gl_context_destroy (Evas_GL *evas_gl, Evas_GL_Context *ctx) EINA_ARG_NONNULL(1,2);
/**
* @brief Sets the given context as the current context for the given surface.
@@ -728,7 +704,7 @@ EAPI void evas_gl_context_destroy (Evas_GL *evas_gl, Evas
* @return @c EINA_TRUE if successful,
* otherwise @c EINA_FALSE if not
*/
-EAPI Eina_Bool evas_gl_make_current (Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_GL_Context *ctx) EINA_ARG_NONNULL(1,2);
+EVAS_API Eina_Bool evas_gl_make_current (Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_GL_Context *ctx) EINA_ARG_NONNULL(1,2);
/**
* @brief Returns a pointer to a static, null-terminated string describing some aspect of Evas GL.
@@ -736,7 +712,7 @@ EAPI Eina_Bool evas_gl_make_current (Evas_GL *evas_gl, Evas
* @param[in] evas_gl The given Evas_GL object
* @param[in] name A symbolic constant, only @ref EVAS_GL_EXTENSIONS is supported for now
*/
-EAPI const char *evas_gl_string_query (Evas_GL *evas_gl, int name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
+EVAS_API const char *evas_gl_string_query (Evas_GL *evas_gl, int name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
/**
* @brief Returns a extension function from OpenGL or the Evas_GL glue layer.
@@ -749,7 +725,7 @@ EAPI const char *evas_gl_string_query (Evas_GL *evas_gl, int
*
* @return A function pointer to the Evas_GL extension.
*/
-EAPI Evas_GL_Func evas_gl_proc_address_get (Evas_GL *evas_gl, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1,2) EINA_PURE;
+EVAS_API Evas_GL_Func evas_gl_proc_address_get (Evas_GL *evas_gl, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1,2) EINA_PURE;
/**
* @brief Fills in the Native Surface information from a given Evas GL surface.
@@ -768,7 +744,7 @@ EAPI Evas_GL_Func evas_gl_proc_address_get (Evas_GL *evas_gl, cons
* since its properties are internal to Evas and are not meant to be
* tampered with in any way or form from outside Evas.
*/
-EAPI Eina_Bool evas_gl_native_surface_get (Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_Native_Surface *ns) EINA_ARG_NONNULL(1,2,3);
+EVAS_API Eina_Bool evas_gl_native_surface_get (Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_Native_Surface *ns) EINA_ARG_NONNULL(1,2,3);
/**
* @brief Gets the API for rendering using OpenGL.
@@ -790,7 +766,7 @@ EAPI Eina_Bool evas_gl_native_surface_get (Evas_GL *evas_gl, Evas
* @see evas_gl_context_api_get
*
*/
-EAPI Evas_GL_API *evas_gl_api_get (Evas_GL *evas_gl) EINA_ARG_NONNULL(1);
+EVAS_API Evas_GL_API *evas_gl_api_get (Evas_GL *evas_gl) EINA_ARG_NONNULL(1);
/**
* @brief Gets the API for rendering using OpenGL with non standard contexts.
@@ -817,7 +793,7 @@ EAPI Evas_GL_API *evas_gl_api_get (Evas_GL *evas_gl) EINA
*
* @since 1.12
*/
-EAPI Evas_GL_API *evas_gl_context_api_get (Evas_GL *evas_gl, Evas_GL_Context *ctx) EINA_ARG_NONNULL(1);
+EVAS_API Evas_GL_API *evas_gl_context_api_get (Evas_GL *evas_gl, Evas_GL_Context *ctx) EINA_ARG_NONNULL(1);
/**
* @brief Get the current rotation of the view, in degrees.
@@ -842,7 +818,7 @@ EAPI Evas_GL_API *evas_gl_context_api_get (Evas_GL *evas_gl, Evas
*
* @since 1.12
*/
-EAPI int evas_gl_rotation_get (Evas_GL *evas_gl) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+EVAS_API int evas_gl_rotation_get (Evas_GL *evas_gl) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
/**
* @brief Query a surface for its properties
@@ -862,7 +838,7 @@ EAPI int evas_gl_rotation_get (Evas_GL *evas_gl) EINA
*
* @since 1.12
*/
-EAPI Eina_Bool evas_gl_surface_query (Evas_GL *evas_gl, Evas_GL_Surface *surface, int attribute, void *value) EINA_ARG_NONNULL(1,2);
+EVAS_API Eina_Bool evas_gl_surface_query (Evas_GL *evas_gl, Evas_GL_Surface *surface, int attribute, void *value) EINA_ARG_NONNULL(1,2);
/**
* @brief Returns the last error of any evas_gl function called in the current thread.
@@ -886,7 +862,7 @@ EAPI Eina_Bool evas_gl_surface_query (Evas_GL *evas_gl, Evas
*
* @since 1.12
*/
-EAPI int evas_gl_error_get (Evas_GL *evas_gl) EINA_ARG_NONNULL(1);
+EVAS_API int evas_gl_error_get (Evas_GL *evas_gl) EINA_ARG_NONNULL(1);
/**
* @brief Returns the Evas GL context object in use or set by @ref evas_gl_make_current.
@@ -898,7 +874,7 @@ EAPI int evas_gl_error_get (Evas_GL *evas_gl) EINA
*
* @since 1.12
*/
-EAPI Evas_GL_Context *evas_gl_current_context_get (Evas_GL *evas_gl) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Evas_GL_Context *evas_gl_current_context_get (Evas_GL *evas_gl) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Returns the Evas GL surface object in use or set by @ref evas_gl_make_current
@@ -916,7 +892,7 @@ EAPI Evas_GL_Context *evas_gl_current_context_get (Evas_GL *evas_gl) EIN
*
* @since 1.12
*/
-EAPI Evas_GL_Surface *evas_gl_current_surface_get (Evas_GL *evas_gl) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Evas_GL_Surface *evas_gl_current_surface_get (Evas_GL *evas_gl) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Get current Evas GL
@@ -934,7 +910,7 @@ EAPI Evas_GL_Surface *evas_gl_current_surface_get (Evas_GL *evas_gl) EIN
*
* @since 1.16
*/
-EAPI Evas_GL *evas_gl_current_evas_gl_get (Evas_GL_Context **context, Evas_GL_Surface **surface) EINA_WARN_UNUSED_RESULT;
+EVAS_API Evas_GL *evas_gl_current_evas_gl_get (Evas_GL_Context **context, Evas_GL_Surface **surface) EINA_WARN_UNUSED_RESULT;
/*-------------------------------------------------------------------------
@@ -950,7 +926,7 @@ EAPI Evas_GL *evas_gl_current_evas_gl_get (Evas_GL_Context **con
/*
* This document is licensed under the SGI Free Software B License Version
- * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
+ * 2.0. For details, see https://spdx.org/licenses/SGI-B-2.0.html .
*/
/*-------------------------------------------------------------------------
@@ -5990,7 +5966,7 @@ EvasGLImage *img = glapi->evasglCreateImageForContext
void (*glWaitSync) (GLsync sync, GLbitfield flags, uint64_t timeout);
/** @} */
/**
- * @anchor gles3.1
+ * @anchor gles3_1
* @name OpenGL-ES 3.1.
*
* Evas_GL_API version 5.
@@ -6070,7 +6046,7 @@ EvasGLImage *img = glapi->evasglCreateImageForContext
/** @} */
/**
- * @anchor gles3.2
+ * @anchor gles3_2
* @name OpenGL-ES 3.2.
*
* Evas_GL_API version 6.
@@ -6140,7 +6116,4 @@ EvasGLImage *img = glapi->evasglCreateImageForContext
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h
index 4282488644..ef6d64ea18 100644
--- a/src/lib/evas/Evas_Internal.h
+++ b/src/lib/evas/Evas_Internal.h
@@ -2,31 +2,7 @@
#ifndef _EVAS_INTERNAL_H
#define _EVAS_INTERNAL_H
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
#ifdef __cplusplus
extern "C" {
@@ -40,16 +16,16 @@ extern "C" {
typedef struct _Evas_Object_Pointer_Data Evas_Object_Pointer_Data;
-EOAPI const Eina_List *efl_input_device_children_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK const Eina_List *efl_input_device_children_get(const Eo *obj);
-EOAPI void efl_input_device_evas_set(Eo *obj, Evas *e);
-EOAPI Evas *efl_input_device_evas_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK void efl_input_device_evas_set(Eo *obj, Evas *e);
+EVAS_API EVAS_API_WEAK Evas *efl_input_device_evas_get(const Eo *obj);
-EOAPI void efl_input_device_subclass_set(Eo *obj, Evas_Device_Subclass sub_clas);
-EOAPI Evas_Device_Subclass efl_input_device_subclass_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK void efl_input_device_subclass_set(Eo *obj, Evas_Device_Subclass sub_clas);
+EVAS_API EVAS_API_WEAK Evas_Device_Subclass efl_input_device_subclass_get(const Eo *obj);
-EOAPI void efl_input_device_grab_register(Eo *obj, Efl_Canvas_Object *grab, Evas_Object_Pointer_Data *pdata);
-EOAPI void efl_input_device_grab_unregister(Eo *obj, Efl_Canvas_Object *grab, Evas_Object_Pointer_Data *pdata);
+EVAS_API EVAS_API_WEAK void efl_input_device_grab_register(Eo *obj, Efl_Canvas_Object *grab, Evas_Object_Pointer_Data *pdata);
+EVAS_API EVAS_API_WEAK void efl_input_device_grab_unregister(Eo *obj, Efl_Canvas_Object *grab, Evas_Object_Pointer_Data *pdata);
typedef struct _Efl_Input_Pointer_Data Efl_Input_Pointer_Data;
typedef struct _Efl_Input_Key_Data Efl_Input_Key_Data;
@@ -193,23 +169,23 @@ _efl_input_value_mark(Efl_Input_Pointer_Data *pd, Efl_Input_Value key)
typedef struct _Efl_Canvas_Output Efl_Canvas_Output;
-EAPI Efl_Canvas_Output *efl_canvas_output_add(Evas *canvas);
-EAPI void efl_canvas_output_del(Efl_Canvas_Output *output);
-EAPI void efl_canvas_output_view_set(Efl_Canvas_Output *output,
+EVAS_API Efl_Canvas_Output *efl_canvas_output_add(Evas *canvas);
+EVAS_API void efl_canvas_output_del(Efl_Canvas_Output *output);
+EVAS_API void efl_canvas_output_view_set(Efl_Canvas_Output *output,
Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
-EAPI void efl_canvas_output_view_get(Efl_Canvas_Output *output,
+EVAS_API void efl_canvas_output_view_get(Efl_Canvas_Output *output,
Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
-EAPI Eina_Bool efl_canvas_output_engine_info_set(Efl_Canvas_Output *output,
+EVAS_API Eina_Bool efl_canvas_output_engine_info_set(Efl_Canvas_Output *output,
Evas_Engine_Info *info);
-EAPI Evas_Engine_Info *efl_canvas_output_engine_info_get(Efl_Canvas_Output *output);
-EAPI Eina_Bool efl_canvas_output_lock(Efl_Canvas_Output *output);
-EAPI Eina_Bool efl_canvas_output_unlock(Efl_Canvas_Output *output);
+EVAS_API Evas_Engine_Info *efl_canvas_output_engine_info_get(Efl_Canvas_Output *output);
+EVAS_API Eina_Bool efl_canvas_output_lock(Efl_Canvas_Output *output);
+EVAS_API Eina_Bool efl_canvas_output_unlock(Efl_Canvas_Output *output);
-EAPI void evas_render_pending_objects_flush(Evas *eo_evas);
+EVAS_API void evas_render_pending_objects_flush(Evas *eo_evas);
-EAPI void efl_input_pointer_finalize(Efl_Input_Pointer *obj);
+EVAS_API void efl_input_pointer_finalize(Efl_Input_Pointer *obj);
-EAPI Eina_Iterator *efl_canvas_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List *list);
+EVAS_API Eina_Iterator *efl_canvas_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List *list);
static inline void
evas_object_size_hint_combined_min_get(const Eo *obj, int *w, int *h)
@@ -230,23 +206,23 @@ evas_object_size_hint_combined_max_get(const Eo *obj, int *w, int *h)
}
/* Internal EO APIs */
-EAPI Eo *evas_find(const Eo *obj);
-EOAPI void efl_canvas_object_legacy_ctor(Eo *obj);
-EOAPI void efl_canvas_object_type_set(Eo *obj, const char *type);
-EOAPI void efl_canvas_group_add(Eo *obj);
-EOAPI void efl_canvas_group_del(Eo *obj);
-EOAPI void efl_canvas_group_clipped_set(Eo *obj, Eina_Bool unclipped);
-EOAPI void evas_canvas_touch_point_list_nth_xy_get(Eo *obj, unsigned int n, double *x, double *y);
-EOAPI void evas_canvas_seat_focus_in(Eo *obj, Efl_Input_Device *seat);
-EOAPI void evas_canvas_seat_focus_out(Eo *obj, Efl_Input_Device *seat);
-EOAPI Eo* evas_canvas_seat_focus_get(const Eo *obj, Efl_Input_Device *seat);
-
-EOAPI void *efl_input_legacy_info_get(const Eo *obj);
-
-EOAPI Eo *efl_input_focus_instance_get(Efl_Object *owner, void **priv);
-EOAPI Eo *efl_input_hold_instance_get(Efl_Object *owner, void **priv);
-EOAPI Eo *efl_input_key_instance_get(Efl_Object *owner, void **priv);
-EOAPI Eo *efl_input_pointer_instance_get(Efl_Object *owner, void **priv);
+EVAS_API Eo *evas_find(const Eo *obj);
+EVAS_API EVAS_API_WEAK void efl_canvas_object_legacy_ctor(Eo *obj);
+EVAS_API EVAS_API_WEAK void efl_canvas_object_type_set(Eo *obj, const char *type);
+EVAS_API EVAS_API_WEAK void efl_canvas_group_add(Eo *obj);
+EVAS_API EVAS_API_WEAK void efl_canvas_group_del(Eo *obj);
+EVAS_API EVAS_API_WEAK void efl_canvas_group_clipped_set(Eo *obj, Eina_Bool unclipped);
+EVAS_API EVAS_API_WEAK void evas_canvas_touch_point_list_nth_xy_get(Eo *obj, unsigned int n, double *x, double *y);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_focus_in(Eo *obj, Efl_Input_Device *seat);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_focus_out(Eo *obj, Efl_Input_Device *seat);
+EVAS_API EVAS_API_WEAK Eo* evas_canvas_seat_focus_get(const Eo *obj, Efl_Input_Device *seat);
+
+EVAS_API EVAS_API_WEAK void *efl_input_legacy_info_get(const Eo *obj);
+
+EVAS_API EVAS_API_WEAK Eo *efl_input_focus_instance_get(Efl_Object *owner, void **priv);
+EVAS_API EVAS_API_WEAK Eo *efl_input_hold_instance_get(Efl_Object *owner, void **priv);
+EVAS_API EVAS_API_WEAK Eo *efl_input_key_instance_get(Efl_Object *owner, void **priv);
+EVAS_API EVAS_API_WEAK Eo *efl_input_pointer_instance_get(Efl_Object *owner, void **priv);
/**
* @brief If @c true the object belongs to the window border decorations.
*
@@ -264,7 +240,7 @@ EOAPI Eo *efl_input_pointer_instance_get(Efl_Object *owner, void **priv);
*
* @ingroup Efl_Canvas_Object
*/
-EOAPI void efl_canvas_object_is_frame_object_set(Eo *obj, Eina_Bool is_frame);
+EVAS_API EVAS_API_WEAK void efl_canvas_object_is_frame_object_set(Eo *obj, Eina_Bool is_frame);
/**
* @brief If @c true the object belongs to the window border decorations.
@@ -284,18 +260,18 @@ EOAPI void efl_canvas_object_is_frame_object_set(Eo *obj, Eina_Bool is_frame);
*
* @ingroup Efl_Canvas_Object
*/
-EOAPI Eina_Bool efl_canvas_object_is_frame_object_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Eina_Bool efl_canvas_object_is_frame_object_get(const Eo *obj);
-EWAPI extern const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_PRE;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_PRE;
#define EVAS_CANVAS_EVENT_RENDER_FLUSH_PRE (&(_EVAS_CANVAS_EVENT_RENDER_FLUSH_PRE))
-EWAPI extern const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_POST;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_POST;
#define EVAS_CANVAS_EVENT_RENDER_FLUSH_POST (&(_EVAS_CANVAS_EVENT_RENDER_FLUSH_POST))
-EWAPI extern const Efl_Event_Description _EVAS_CANVAS_EVENT_AXIS_UPDATE;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EVAS_CANVAS_EVENT_AXIS_UPDATE;
#define EVAS_CANVAS_EVENT_AXIS_UPDATE (&(_EVAS_CANVAS_EVENT_AXIS_UPDATE))
-EWAPI extern const Efl_Event_Description _EVAS_CANVAS_EVENT_VIEWPORT_RESIZE;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EVAS_CANVAS_EVENT_VIEWPORT_RESIZE;
#define EVAS_CANVAS_EVENT_VIEWPORT_RESIZE (&(_EVAS_CANVAS_EVENT_VIEWPORT_RESIZE))
#define EFL_CANVAS_GROUP_DEL_OPS(kls) EFL_OBJECT_OP_FUNC(efl_canvas_group_del, _##kls##_efl_canvas_group_group_del)
@@ -303,7 +279,7 @@ EWAPI extern const Efl_Event_Description _EVAS_CANVAS_EVENT_VIEWPORT_RESIZE;
#define EFL_CANVAS_GROUP_ADD_DEL_OPS(kls) EFL_CANVAS_GROUP_ADD_OPS(kls), EFL_CANVAS_GROUP_DEL_OPS(kls)
/* Efl.Animation.Player */
-EWAPI extern const Efl_Event_Description _EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED;
#define EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED (&(_EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED))
/* Efl.Animation.Player END */
@@ -316,24 +292,21 @@ EWAPI extern const Efl_Event_Description _EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED
* @param cur the cursor.
* @param forward if Eina_True check cluster after cusror position, else before cursor position.
*/
-EAPI Eina_Bool evas_textblock_cursor_at_cluster_as_single_glyph(Evas_Textblock_Cursor *cur,Eina_Bool forward);
+EVAS_API Eina_Bool evas_textblock_cursor_at_cluster_as_single_glyph(Evas_Textblock_Cursor *cur,Eina_Bool forward);
/*Attribute Factory Internal function*/
-EAPI const char * efl_text_formatter_attribute_get(Efl_Text_Attribute_Handle *annotation);
-EAPI Eina_Iterator * efl_text_formatter_range_attributes_get(const Efl_Text_Cursor *start, const Efl_Text_Cursor *end);
-EAPI void efl_text_formatter_attribute_cursors_get(const Efl_Text_Attribute_Handle *handle, Efl_Text_Cursor *start, Efl_Text_Cursor *end);
-EAPI void efl_text_formatter_remove(Efl_Text_Attribute_Handle *annotation);
-EAPI Eina_Bool efl_text_formatter_attribute_is_item(Efl_Text_Attribute_Handle *annotation);
-EAPI Eina_Bool efl_text_formatter_item_geometry_get(const Efl_Text_Attribute_Handle *annotation, int *x, int *y, int *w, int *h);
+EVAS_API const char * efl_text_formatter_attribute_get(Efl_Text_Attribute_Handle *annotation);
+EVAS_API Eina_Iterator * efl_text_formatter_range_attributes_get(const Efl_Text_Cursor_Object *start, const Efl_Text_Cursor_Object *end);
+EVAS_API void efl_text_formatter_attribute_cursors_get(const Efl_Text_Attribute_Handle *handle, Efl_Text_Cursor_Object *start, Efl_Text_Cursor_Object *end);
+EVAS_API void efl_text_formatter_remove(Efl_Text_Attribute_Handle *annotation);
+EVAS_API Eina_Bool efl_text_formatter_attribute_is_item(Efl_Text_Attribute_Handle *annotation);
+EVAS_API Eina_Bool efl_text_formatter_item_geometry_get(const Efl_Text_Attribute_Handle *annotation, int *x, int *y, int *w, int *h);
#ifdef __cplusplus
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/evas/Evas_Legacy.h b/src/lib/evas/Evas_Legacy.h
index ff92ad8bbe..4affbb99ae 100644
--- a/src/lib/evas/Evas_Legacy.h
+++ b/src/lib/evas/Evas_Legacy.h
@@ -30,7 +30,7 @@
* @return A new uninitialised Evas canvas on success. Otherwise, @c NULL.
* @ingroup Evas_Canvas
*/
-EAPI Evas *evas_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
+EVAS_API Evas *evas_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
/**
* Frees the given evas and any objects created on it.
@@ -42,7 +42,7 @@ EAPI Evas *evas_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_free(Evas *e) EINA_ARG_NONNULL(1);
+EVAS_API void evas_free(Evas *e) EINA_ARG_NONNULL(1);
typedef struct _Evas_Engine_Info /** Generic engine information. Generic info is useless */
{
@@ -69,7 +69,7 @@ typedef struct _Evas_Engine_Info /** Generic engine information. Generic info is
*
* @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_engine_info_set(Evas *obj, Evas_Engine_Info *info);
+EVAS_API Eina_Bool evas_engine_info_set(Evas *obj, Evas_Engine_Info *info);
/**
* @brief Retrieves the current render engine info struct from the given evas.
@@ -83,7 +83,7 @@ EAPI Eina_Bool evas_engine_info_set(Evas *obj, Evas_Engine_Info *info);
*
* @ingroup Evas_Canvas
*/
-EAPI Evas_Engine_Info *evas_engine_info_get(const Evas *obj);
+EVAS_API Evas_Engine_Info *evas_engine_info_get(const Evas *obj);
/**
* @brief Get the maximum image size evas can possibly handle.
@@ -99,7 +99,7 @@ EAPI Evas_Engine_Info *evas_engine_info_get(const Evas *obj);
*
* @return @c true on success, @c false otherwise
*/
-EAPI Eina_Bool evas_image_max_size_get(Eo *eo_e, int *w, int *h);
+EVAS_API Eina_Bool evas_image_max_size_get(Eo *eo_e, int *w, int *h);
#include "canvas/evas_canvas_eo.legacy.h"
@@ -137,7 +137,7 @@ typedef unsigned long long Evas_Modifier_Mask;
/**
- * @ingroup Evas_Canvas_Events
+ * @addtogroup Evas_Canvas_Events
*
* @{
*/
@@ -455,7 +455,7 @@ struct _Evas_Event_Axis_Update
* it more than once on the event, in this case). This would make
* sense if you passed different functions and/or callback data, only.
*/
-EAPI void evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
+EVAS_API void evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
/**
* Add (register) a callback function to a given canvas event with a
@@ -472,7 +472,7 @@ EAPI void evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_
* @see evas_event_callback_add
* @since 1.1
*/
-EAPI void evas_event_callback_priority_add(Evas *e, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4);
+EVAS_API void evas_event_callback_priority_add(Evas *e, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4);
/**
* Delete a callback function from the canvas.
@@ -498,7 +498,7 @@ EAPI void evas_event_callback_priority_add(Evas *e, Evas_Callback_Type type, Ev
* my_data = evas_event_callback_del(ebject, EVAS_CALLBACK_CANVAS_FOCUS_IN, focus_in_callback);
* @endcode
*/
-EAPI void *evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) EINA_ARG_NONNULL(1, 3);
+EVAS_API void *evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) EINA_ARG_NONNULL(1, 3);
/**
* Delete (unregister) a callback function registered to a given
@@ -530,7 +530,7 @@ EAPI void *evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_
* @note For deletion of canvas events callbacks filtering by just
* type and function pointer, user evas_event_callback_del().
*/
-EAPI void *evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
+EVAS_API void *evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
/**
* Push a callback on the post-event callback stack
@@ -563,7 +563,7 @@ EAPI void *evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_E
* @warning Only use this function if you know exactly what you are doing!
*
*/
-EAPI void evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
+EVAS_API void evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
/**
* Remove a callback from the post-event callback stack
@@ -576,7 +576,7 @@ EAPI void evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func
* the callback stack is removed from being executed when the stack is
* unwound. Further instances may still be run on unwind.
*/
-EAPI void evas_post_event_callback_remove(Evas *e, Evas_Object_Event_Post_Cb func);
+EVAS_API void evas_post_event_callback_remove(Evas *e, Evas_Object_Event_Post_Cb func);
/**
* Remove a callback from the post-event callback stack
@@ -590,7 +590,7 @@ EAPI void evas_post_event_callback_remove(Evas *e, Evas_Object_Event_Post_Cb fu
* in the callback stack is removed from being executed when the stack is
* unwound. Further instances may still be run on unwind.
*/
-EAPI void evas_post_event_callback_remove_full(Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
+EVAS_API void evas_post_event_callback_remove_full(Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
/**
* @}
@@ -631,7 +631,7 @@ EAPI void evas_post_event_callback_remove_full(Evas *e, Evas_Object_Event_Post_
* realistic code we would be freezing while a toolkit or Edje was
* doing some UI changes, thawing it back afterwards.
*/
-EAPI void evas_event_freeze(Evas *e) EINA_ARG_NONNULL(1);
+EVAS_API void evas_event_freeze(Evas *e) EINA_ARG_NONNULL(1);
/**
* Thaw a canvas out after freezing (for input events).
@@ -646,7 +646,7 @@ EAPI void evas_event_freeze(Evas *e) EINA_ARG_NONNULL(1);
*
* See evas_event_freeze() for an example.
*/
-EAPI void evas_event_thaw(Evas *e) EINA_ARG_NONNULL(1);
+EVAS_API void evas_event_thaw(Evas *e) EINA_ARG_NONNULL(1);
/**
* Return the freeze count on input events of a given canvas.
@@ -668,7 +668,7 @@ EAPI void evas_event_thaw(Evas *e) EINA_ARG_NONNULL(1);
* @endcode
*
*/
-EAPI int evas_event_freeze_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API int evas_event_freeze_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* After thaw of a canvas, re-evaluate the state of objects and call callbacks
@@ -679,7 +679,7 @@ EAPI int evas_event_freeze_get(const Evas *e) EINA_WARN_UNUSED_RESU
* containment and other states and thus also call callbacks for mouse in and
* out on new objects if the state change demands it.
*/
-EAPI void evas_event_thaw_eval(Evas *e) EINA_ARG_NONNULL(1);
+EVAS_API void evas_event_thaw_eval(Evas *e) EINA_ARG_NONNULL(1);
/**
* @brief Mouse move event feed.
@@ -692,7 +692,7 @@ EAPI void evas_event_thaw_eval(Evas *e) EINA_ARG_NONNULL(1);
* @param[in] timestamp The timestamp of the mouse up event.
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data);
/**
* @brief Mouse move event feed from input.
@@ -710,7 +710,7 @@ EAPI void evas_event_feed_mouse_move(Evas *obj, int x, int y, unsign
*
* @since 1.8
*/
-EAPI void evas_event_input_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_input_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data);
/**
* @brief Mouse up event feed.
@@ -723,7 +723,7 @@ EAPI void evas_event_input_mouse_move(Evas *obj, int x, int y, unsig
* @param[in] timestamp The timestamp of the mouse up event.
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_mouse_up(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_mouse_up(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
/**
* @brief Mouse down event feed.
@@ -736,7 +736,7 @@ EAPI void evas_event_feed_mouse_up(Evas *obj, int b, Evas_Button_Fla
* @param[in] timestamp The timestamp of the mouse up event.
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_mouse_down(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_mouse_down(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
/**
* @brief Mouse wheel event feed.
@@ -749,7 +749,7 @@ EAPI void evas_event_feed_mouse_down(Evas *obj, int b, Evas_Button_F
* @param[in] timestamp The timestamp of the mouse up event.
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_mouse_wheel(Evas *obj, int direction, int z, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_mouse_wheel(Evas *obj, int direction, int z, unsigned int timestamp, const void *data);
/**
* @brief Mouse in event feed.
@@ -760,7 +760,7 @@ EAPI void evas_event_feed_mouse_wheel(Evas *obj, int direction, int
*
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_mouse_in(Evas *obj, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_mouse_in(Evas *obj, unsigned int timestamp, const void *data);
/**
* @brief Mouse out event feed.
@@ -771,7 +771,7 @@ EAPI void evas_event_feed_mouse_in(Evas *obj, unsigned int timestamp
*
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_mouse_out(Evas *obj, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_mouse_out(Evas *obj, unsigned int timestamp, const void *data);
/**
* @brief Mouse cancel event feed.
@@ -780,15 +780,15 @@ EAPI void evas_event_feed_mouse_out(Evas *obj, unsigned int timestam
*
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_mouse_cancel(Evas *obj, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_mouse_cancel(Evas *obj, unsigned int timestamp, const void *data);
/* multi touch events - no doc */
-EAPI void evas_event_input_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
-EAPI void evas_event_input_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data);
-EAPI void evas_event_input_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
-EAPI void evas_event_feed_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
-EAPI void evas_event_feed_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data);
-EAPI void evas_event_feed_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_input_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_input_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_input_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
/**
* @brief Key down event feed.
@@ -802,7 +802,7 @@ EAPI void evas_event_feed_multi_up(Evas *obj, int d, int x, int y, d
* @param[in] timestamp Timestamp of the mouse up event.
* @param[in] data Data for canvas.
*/
-EAPI void evas_event_feed_key_down(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_key_down(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data);
/**
* @brief Key up event feed.
@@ -816,7 +816,7 @@ EAPI void evas_event_feed_key_down(Evas *obj, const char *keyname, c
* @param[in] timestamp Timestamp of the mouse up event.
* @param[in] data Data for canvas.
*/
-EAPI void evas_event_feed_key_up(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_key_up(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data);
/**
* @brief Key down event feed with keycode.
@@ -833,7 +833,7 @@ EAPI void evas_event_feed_key_up(Evas *obj, const char *keyname, con
*
* @since 1.10
*/
-EAPI void evas_event_feed_key_down_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode);
+EVAS_API void evas_event_feed_key_down_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode);
/**
* @brief Key up event feed with keycode.
@@ -850,7 +850,7 @@ EAPI void evas_event_feed_key_down_with_keycode(Evas *obj, const cha
*
* @since 1.10
*/
-EAPI void evas_event_feed_key_up_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode);
+EVAS_API void evas_event_feed_key_up_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode);
/**
* @brief Input device axis update event feed.
@@ -867,7 +867,7 @@ EAPI void evas_event_feed_key_up_with_keycode(Evas *obj, const char
*
* @since 1.13
*/
-EAPI void evas_event_feed_axis_update(Evas *obj, unsigned int timestamp, int device, int toolid, int naxes, const Evas_Axis *axis, const void *data);
+EVAS_API void evas_event_feed_axis_update(Evas *obj, unsigned int timestamp, int device, int toolid, int naxes, const Evas_Axis *axis, const void *data);
/**
* @brief Hold event feed.
@@ -877,7 +877,7 @@ EAPI void evas_event_feed_axis_update(Evas *obj, unsigned int timest
* @param[in] timestamp The timestamp of the mouse up event.
* @param[in] data The data for canvas.
*/
-EAPI void evas_event_feed_hold(Evas *obj, int hold, unsigned int timestamp, const void *data);
+EVAS_API void evas_event_feed_hold(Evas *obj, int hold, unsigned int timestamp, const void *data);
/**
* @brief Re feed event.
@@ -889,7 +889,7 @@ EAPI void evas_event_feed_hold(Evas *obj, int hold, unsigned int tim
*
* @param[in] event_type Event type.
*/
-EAPI void evas_event_refeed_event(Evas *obj, void *event_copy, Evas_Callback_Type event_type);
+EVAS_API void evas_event_refeed_event(Evas *obj, void *event_copy, Evas_Callback_Type event_type);
/**
* @}
@@ -917,7 +917,7 @@ EAPI void evas_event_refeed_event(Evas *obj, void *event_copy, Evas_
*
* @ingroup Evas_Canvas
*/
-EAPI const Evas_Modifier *evas_key_modifier_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API const Evas_Modifier *evas_key_modifier_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Creates a bit mask from the @c keyname modifier key. Values returned
@@ -939,7 +939,7 @@ EAPI const Evas_Modifier *evas_key_modifier_get(const Evas *obj) EINA_WARN_UNUSE
*
* @ingroup Evas_Canvas
*/
-EAPI Evas_Modifier_Mask evas_key_modifier_mask_get(const Evas *evas, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
+EVAS_API Evas_Modifier_Mask evas_key_modifier_mask_get(const Evas *evas, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
/**
* Checks the state of a given modifier of the default seat, at the time of the
@@ -960,7 +960,7 @@ EAPI Evas_Modifier_Mask evas_key_modifier_mask_get(const Evas *evas, const char
* @see evas_key_modifier_off
* @see evas_seat_key_modifier_is_set
*/
-EAPI Eina_Bool evas_key_modifier_is_set(const Evas_Modifier *m, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_key_modifier_is_set(const Evas_Modifier *m, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Checks the state of a given modifier key of a given seat, at the time of the
@@ -985,7 +985,7 @@ EAPI Eina_Bool evas_key_modifier_is_set(const Evas_Modifier *m, const
* @see evas_key_modifier_is_set
* @since 1.19
*/
-EAPI Eina_Bool evas_seat_key_modifier_is_set(const Evas_Modifier *m, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_seat_key_modifier_is_set(const Evas_Modifier *m, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Checks the state of a given lock key of the default seat, at the time of the call. If
@@ -1007,7 +1007,7 @@ EAPI Eina_Bool evas_seat_key_modifier_is_set(const Evas_Modifier *m,
* @see evas_seat_key_lock_off
* @see evas_seat_key_lock_is_set
*/
-EAPI Eina_Bool evas_key_lock_is_set(const Evas_Lock *l, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_key_lock_is_set(const Evas_Lock *l, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Checks the state of a given lock key of a given seat, at the time of the call. If
@@ -1029,7 +1029,7 @@ EAPI Eina_Bool evas_key_lock_is_set(const Evas_Lock *l, const char *k
* @see evas_key_lock_is_set
* @since 1.19
*/
-EAPI Eina_Bool evas_seat_key_lock_is_set(const Evas_Lock *l, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_seat_key_lock_is_set(const Evas_Lock *l, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* @brief Returns a handle to the list of lock keys registered in the canvas
@@ -1043,7 +1043,7 @@ EAPI Eina_Bool evas_seat_key_lock_is_set(const Evas_Lock *l, const ch
*
* @ingroup Evas_Canvas
*/
-EAPI const Evas_Lock *evas_key_lock_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API const Evas_Lock *evas_key_lock_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @}
@@ -1061,7 +1061,7 @@ EAPI const Evas_Lock *evas_key_lock_get(const Evas *obj) EINA_WARN_UNUSED_RESULT
*
* @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_pointer_inside_by_device_get(const Evas *obj, Efl_Input_Device *dev);
+EVAS_API Eina_Bool evas_pointer_inside_by_device_get(const Evas *obj, Efl_Input_Device *dev);
/**
* @brief Returns whether the default mouse pointer is logically inside the
@@ -1085,7 +1085,7 @@ EAPI Eina_Bool evas_pointer_inside_by_device_get(const Evas *obj, Efl_Input_Devi
*
* @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_pointer_inside_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_pointer_inside_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @defgroup Evas_Touch_Point_List Touch Point List Functions
@@ -1122,7 +1122,7 @@ typedef enum
*
* @return The number of touched point on the evas.
*/
-EAPI unsigned int evas_touch_point_list_count(Evas *obj);
+EVAS_API unsigned int evas_touch_point_list_count(Evas *obj);
/**
* @brief This function returns the @c id of nth touch point.
@@ -1134,7 +1134,7 @@ EAPI unsigned int evas_touch_point_list_count(Evas *obj);
*
* @return id of nth touch point, if the call succeeded, -1 otherwise.
*/
-EAPI int evas_touch_point_list_nth_id_get(Evas *obj, unsigned int n);
+EVAS_API int evas_touch_point_list_nth_id_get(Evas *obj, unsigned int n);
/**
* @brief This function returns the @c state of nth touch point.
@@ -1149,7 +1149,7 @@ EAPI int evas_touch_point_list_nth_id_get(Evas *obj, unsigned int n);
* @return @c state of nth touch point, if the call succeeded,
* EVAS_TOUCH_POINT_CANCEL otherwise.
*/
-EAPI Evas_Touch_Point_State evas_touch_point_list_nth_state_get(Evas *obj, unsigned int n);
+EVAS_API Evas_Touch_Point_State evas_touch_point_list_nth_state_get(Evas *obj, unsigned int n);
/**
* @brief This function returns the nth touch point's coordinates.
@@ -1161,14 +1161,14 @@ EAPI Evas_Touch_Point_State evas_touch_point_list_nth_state_get(Evas *obj, unsig
* @param[out] x The pointer to a Evas_Coord to be filled in.
* @param[out] y The pointer to a Evas_Coord to be filled in.
*/
-EAPI void evas_touch_point_list_nth_xy_get(Evas *eo_e, unsigned int n, Evas_Coord *x, Evas_Coord *y);
+EVAS_API void evas_touch_point_list_nth_xy_get(Evas *eo_e, unsigned int n, Evas_Coord *x, Evas_Coord *y);
/**
* @}
*/
/**
- * @ingroup Evas_Font_Group
+ * @addtogroup Evas_Font_Group
*
* @{
*/
@@ -1178,14 +1178,10 @@ EAPI void evas_touch_point_list_nth_xy_get(Evas *eo_e, unsigned int n, Evas_Coor
*
* @param e The evas instance that returned such list.
* @param available the list returned by evas_font_dir_available_list().
- *
- * @ingroup Evas_Font_Group
*/
-EAPI void evas_font_available_list_free(Evas *e, Eina_List *available) EINA_ARG_NONNULL(1);
+EVAS_API void evas_font_available_list_free(Evas *e, Eina_List *available) EINA_ARG_NONNULL(1);
/** Flags for Font Hinting
- *
- * @ingroup Evas_Font
*/
typedef enum
{
@@ -1201,20 +1197,16 @@ typedef enum
*
* @param[in] hinting The used hinting, one of #EVAS_FONT_HINTING_NONE,
* #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE.
- *
- * @ingroup Evas_Font_Group
*/
-EAPI void evas_font_hinting_set(Evas *e, Evas_Font_Hinting_Flags hinting);
+EVAS_API void evas_font_hinting_set(Evas *e, Evas_Font_Hinting_Flags hinting);
/**
* @brief Retrieves the font hinting used by the given evas.
*
* @return The used hinting, one of #EVAS_FONT_HINTING_NONE,
* #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE.
- *
- * @ingroup Evas_Font_Group
*/
-EAPI Evas_Font_Hinting_Flags evas_font_hinting_get(const Evas *e);
+EVAS_API Evas_Font_Hinting_Flags evas_font_hinting_get(const Evas *e);
/**
* @brief Checks if the font hinting is supported by the given evas.
@@ -1228,7 +1220,7 @@ EAPI Evas_Font_Hinting_Flags evas_font_hinting_get(const Evas *e);
*
* @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_font_hinting_can_hint(const Evas *e, Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_font_hinting_can_hint(const Evas *e, Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT;
/**
* @}
@@ -1278,7 +1270,7 @@ EAPI Eina_Bool evas_font_hinting_can_hint(const Evas *e, Evas_Font_Hinting_Flags
* @ingroup Evas_Object_Group_Basic
* @since 1.1
*/
-EAPI void evas_object_ref(Evas_Object *obj);
+EVAS_API void evas_object_ref(Evas_Object *obj);
/**
* Decrements object reference count.
@@ -1296,7 +1288,7 @@ EAPI void evas_object_ref(Evas_Object *obj);
* @ingroup Evas_Object_Group_Basic
* @since 1.1
*/
-EAPI void evas_object_unref(Evas_Object *obj);
+EVAS_API void evas_object_unref(Evas_Object *obj);
/**
* Get the object reference count.
@@ -1315,7 +1307,7 @@ EAPI void evas_object_unref(Evas_Object *obj);
* @ingroup Evas_Object_Group_Basic
* @since 1.2
*/
-EAPI int evas_object_ref_get(const Evas_Object *obj);
+EVAS_API int evas_object_ref_get(const Evas_Object *obj);
/**
* Marks the given Evas object for deletion (when Evas will free its
@@ -1337,7 +1329,7 @@ EAPI int evas_object_ref_get(const Evas_Object *obj);
*
* @ingroup Evas_Object_Group_Basic
*/
-EAPI void evas_object_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* @brief Retrieves the type of the given Evas object.
@@ -1356,7 +1348,7 @@ EAPI void evas_object_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
* @ingroup Evas_Object_Group_Basic
* @since 1.18
*/
-EAPI const char *evas_object_type_get(const Evas_Object *obj);
+EVAS_API const char *evas_object_type_get(const Evas_Object *obj);
/**
* @brief Sets the name of the given Evas object to the given name.
@@ -1367,7 +1359,7 @@ EAPI const char *evas_object_type_get(const Evas_Object *obj);
*
* @ingroup Evas_Object_Group_Basic
*/
-EAPI void evas_object_name_set(Evas_Object *obj, const char *name);
+EVAS_API void evas_object_name_set(Evas_Object *obj, const char *name);
/**
* @brief Retrieves the name of the given Evas object.
@@ -1378,7 +1370,7 @@ EAPI void evas_object_name_set(Evas_Object *obj, const char *name);
*
* @ingroup Evas_Object_Group_Basic
*/
-EAPI const char *evas_object_name_get(const Evas_Object *obj);
+EVAS_API const char *evas_object_name_get(const Evas_Object *obj);
/**
* @brief Retrieves the object from children of the given object with the given
@@ -1402,7 +1394,7 @@ EAPI const char *evas_object_name_get(const Evas_Object *obj);
*
* @ingroup Evas_Object_Group_Basic
*/
-EAPI Evas_Object *evas_object_name_child_find(const Evas_Object *obj, const char *name, int recurse) EINA_WARN_UNUSED_RESULT;
+EVAS_API Evas_Object *evas_object_name_child_find(const Evas_Object *obj, const char *name, int recurse) EINA_WARN_UNUSED_RESULT;
/**
* Retrieves the position and (rectangular) size of the given Evas
@@ -1433,7 +1425,7 @@ EAPI Evas_Object *evas_object_name_child_find(const Evas_Object *obj, const char
*
* @ingroup Evas_Object_Group_Basic
*/
-EAPI void evas_object_geometry_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_geometry_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
/**
* Set the position and (rectangular) size of the given Evas object.
@@ -1460,7 +1452,7 @@ EAPI void evas_object_geometry_get(const Evas_Object *obj, Evas_Coor
* @since 1.8
* @ingroup Evas_Object_Group_Basic
*/
-EAPI void evas_object_geometry_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_geometry_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
/**
@@ -1476,7 +1468,7 @@ EAPI void evas_object_geometry_set(Evas_Object *obj, Evas_Coord x, E
*
* @ingroup Evas_Object_Group_Basic
*/
-EAPI void evas_object_show(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_show(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Makes the given Evas object invisible.
@@ -1508,7 +1500,7 @@ EAPI void evas_object_show(Evas_Object *obj) EINA_ARG_NONNULL(1);
*
* @ingroup Evas_Object_Group_Basic
*/
-EAPI void evas_object_hide(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_hide(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
*
@@ -1525,7 +1517,7 @@ EAPI void evas_object_hide(Evas_Object *obj) EINA_ARG_NONNULL(1);
* @param[in] b The blue component of the given color.
* @param[in] a The alpha component of the given color.
*/
-EAPI void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a);
+EVAS_API void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a);
/**
*
@@ -1562,7 +1554,11 @@ EAPI void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a);
* @param[out] b The blue component of the given color.
* @param[out] a The alpha component of the given color.
*/
-EAPI void evas_object_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a);
+EVAS_API void evas_object_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a);
+
+/**
+ * @}
+ */
/**
*
@@ -1570,8 +1566,9 @@ EAPI void evas_object_color_get(const Evas_Object *obj, int *r, int *g, int *b,
*
* @param[in] x in
* @param[in] y in
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
+EVAS_API void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
/**
*
@@ -1579,15 +1576,17 @@ EAPI void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
*
* @param[in] w in
* @param[in] h in
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
/**
*
* Retrieves whether or not the given Evas object is visible.
*
+ * @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_visible_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_visible_get(const Evas_Object *obj);
/**
* @brief Sets the hints for an object's maximum size.
@@ -1604,9 +1603,9 @@ EAPI Eina_Bool evas_object_visible_get(const Evas_Object *obj);
* @param[in] w Integer to use as the maximum width hint.
* @param[in] h Integer to use as the maximum height hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_max_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_object_size_hint_max_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
/**
* @brief Retrieves the hints for an object's maximum size.
@@ -1621,9 +1620,9 @@ EAPI void evas_object_size_hint_max_set(Evas_Object *obj, Evas_Coord w, Evas_Coo
* @param[out] w Integer to use as the maximum width hint.
* @param[out] h Integer to use as the maximum height hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_max_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
+EVAS_API void evas_object_size_hint_max_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Sets the hints for an object's optimum size.
@@ -1639,9 +1638,9 @@ EAPI void evas_object_size_hint_max_get(const Evas_Object *obj, Evas_Coord *w, E
* @param[in] w Integer to use as the preferred width hint.
* @param[in] h Integer to use as the preferred height hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_request_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_object_size_hint_request_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
/**
* @brief Retrieves the hints for an object's optimum size.
@@ -1656,9 +1655,9 @@ EAPI void evas_object_size_hint_request_set(Evas_Object *obj, Evas_Coord w, Evas
* @param[out] w Integer to use as the preferred width hint.
* @param[out] h Integer to use as the preferred height hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_request_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
+EVAS_API void evas_object_size_hint_request_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Sets the hints for an object's minimum size.
@@ -1674,9 +1673,9 @@ EAPI void evas_object_size_hint_request_get(const Evas_Object *obj, Evas_Coord *
* @param[in] w Integer to use as the minimum width hint.
* @param[in] h Integer to use as the minimum height hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_min_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_object_size_hint_min_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
/**
* @brief Disable/cease clipping on a clipped @c obj object.
@@ -1689,9 +1688,9 @@ EAPI void evas_object_size_hint_min_set(Evas_Object *obj, Evas_Coord w, Evas_Coo
* See also @ref evas_object_clip_set, @ref evas_object_clipees_get and
* @ref evas_object_clip_get.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_clip_unset(Evas_Object *obj);
+EVAS_API void evas_object_clip_unset(Evas_Object *obj);
/**
* @brief Retrieves the hints for an object's minimum size.
@@ -1706,9 +1705,9 @@ EAPI void evas_object_clip_unset(Evas_Object *obj);
* @param[out] w Integer to use as the minimum width hint.
* @param[out] h Integer to use as the minimum height hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_min_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
+EVAS_API void evas_object_size_hint_min_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Sets the hints for an object's padding space.
@@ -1724,9 +1723,9 @@ EAPI void evas_object_size_hint_min_get(const Evas_Object *obj, Evas_Coord *w, E
* @param[in] t Integer to specify top padding.
* @param[in] b Integer to specify bottom padding.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_padding_set(Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b);
+EVAS_API void evas_object_size_hint_padding_set(Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b);
/**
* @brief Retrieves the hints for an object's padding space.
@@ -1745,9 +1744,9 @@ EAPI void evas_object_size_hint_padding_set(Evas_Object *obj, Evas_Coord l, Evas
* @param[out] t Integer to specify top padding.
* @param[out] b Integer to specify bottom padding.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b);
+EVAS_API void evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b);
/**
* @brief Sets the hints for an object's weight.
@@ -1761,7 +1760,7 @@ EAPI void evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *
* weight macro) or the complete one of taking each child's weight hint as real
* weights to how much of its size to allocate for them in each axis. A
* container is supposed to, after normalizing the weights of its children
- * (with weight hints), distribut the space it has to layout them by those
+ * (with weight hints), distribute the space it has to layout them by those
* factors -- most weighted children get larger in this process than the least
* ones.
*
@@ -1770,9 +1769,9 @@ EAPI void evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *
* @param[in] x Non-negative double value to use as horizontal weight hint.
* @param[in] y Non-negative double value to use as vertical weight hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y);
+EVAS_API void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y);
/**
* @brief Retrieves the hints for an object's weight.
@@ -1780,7 +1779,7 @@ EAPI void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y)
* Accepted values are zero or positive values. Some users might use this hint
* as a boolean, but some might consider it as a proportion, see documentation
* of possible users, which in Evas are the @ref Evas_Object_Box "box" and @ref
- * Evas_Object_Table "table" smart objects.
+ * Evas_Object_Table_Group "table" smart objects.
*
* This is not a size enforcement in any way, it's just a hint that should be
* used whenever appropriate.
@@ -1793,9 +1792,9 @@ EAPI void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y)
* @param[out] x Non-negative double value to use as horizontal weight hint.
* @param[out] y Non-negative double value to use as vertical weight hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, double *y);
+EVAS_API void evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, double *y);
/**
* @brief Sets the hints for an object's alignment.
@@ -1808,7 +1807,7 @@ EAPI void evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, do
* up to the alignment space on the final scene composition.
*
* See documentation of possible users: in Evas, they are the @ref
- * Evas_Object_Box "box" and @ref Evas_Object_Table "table" smart objects.
+ * Evas_Object_Box "box" and @ref Evas_Object_Table_Group "table" smart objects.
*
* For the horizontal component, 0.0 means to the left, 1.0 means to the right.
* Analogously, for the vertical component, 0.0 to the top, 1.0 means to the
@@ -1824,9 +1823,9 @@ EAPI void evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, do
* @param[in] y Double, ranging from 0.0 to 1.0 or with the special value
* #EVAS_HINT_FILL, to use as vertical alignment hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_align_set(Evas_Object *obj, double x, double y);
+EVAS_API void evas_object_size_hint_align_set(Evas_Object *obj, double x, double y);
/**
* @brief Retrieves the hints for on object's alignment.
@@ -1844,9 +1843,9 @@ EAPI void evas_object_size_hint_align_set(Evas_Object *obj, double x, double y);
* @param[out] y Double, ranging from 0.0 to 1.0 or with the special value
* #EVAS_HINT_FILL, to use as vertical alignment hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_align_get(const Evas_Object *obj, double *x, double *y);
+EVAS_API void evas_object_size_hint_align_get(const Evas_Object *obj, double *x, double *y);
/**
* @brief Sets the hints for an object's aspect ratio.
@@ -1865,9 +1864,9 @@ EAPI void evas_object_size_hint_align_get(const Evas_Object *obj, double *x, dou
* @param[in] w Integer to use as aspect width ratio term.
* @param[in] h Integer to use as aspect height ratio term.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h);
/**
* @brief Retrieves the hints for an object's aspect ratio.
@@ -1888,9 +1887,9 @@ EAPI void evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control
* @param[out] w Integer to use as aspect width ratio term.
* @param[out] h Integer to use as aspect height ratio term.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_aspect_get(const Evas_Object *obj, Evas_Aspect_Control *aspect, Evas_Coord *w, Evas_Coord *h);
+EVAS_API void evas_object_size_hint_aspect_get(const Evas_Object *obj, Evas_Aspect_Control *aspect, Evas_Coord *w, Evas_Coord *h);
/** Display mode size hint. */
typedef enum
@@ -1919,22 +1918,22 @@ typedef Efl_Gfx_Hint_Mode Evas_Display_Mode;
*
* @param[in] dispmode Display mode hint.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_size_hint_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode);
+EVAS_API void evas_object_size_hint_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode);
/**
* @brief Retrieves the hints for an object's display mode
*
* These are hints on the display mode @c obj. This is not a size enforcement
* in any way, it's just a hint that can be used whenever appropriate. This
- * mode can be used object's display mode like commpress or expand.
+ * mode can be used object's display mode like compress or expand.
*
* @return Display mode hint.
*
- * @ingroup Evas_Objects
+ * @ingroup Evas_Object_Group
*/
-EAPI Evas_Display_Mode evas_object_size_hint_display_mode_get(const Evas_Object *obj);
+EVAS_API Evas_Display_Mode evas_object_size_hint_display_mode_get(const Evas_Object *obj);
/**
*
@@ -1957,8 +1956,9 @@ EAPI Evas_Display_Mode evas_object_size_hint_display_mode_get(const Evas_Object
*
* @param[in] l The number of the layer to place the object on.
Must be between #EVAS_LAYER_MIN and #EVAS_LAYER_MAX.
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_layer_set(Evas_Object *obj, short l);
+EVAS_API void evas_object_layer_set(Evas_Object *obj, short l);
/**
*
@@ -1968,8 +1968,9 @@ EAPI void evas_object_layer_set(Evas_Object *obj, short l);
*
* @see evas_object_layer_set()
*
+ * @ingroup Evas_Object_Group
*/
-EAPI short evas_object_layer_get(const Evas_Object *obj);
+EVAS_API short evas_object_layer_get(const Evas_Object *obj);
/**
*
@@ -1985,8 +1986,9 @@ EAPI short evas_object_layer_get(const Evas_Object *obj);
* @see evas_object_layer_set()
* @see evas_object_below_get()
*
+ * @ingroup Evas_Object_Group
*/
-EAPI Evas_Object *evas_object_below_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Evas_Object *evas_object_below_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
*
@@ -2002,8 +2004,9 @@ EAPI Evas_Object *evas_object_below_get(const Evas_Object *obj) EINA_WARN_UNUSED
* @see evas_object_layer_set()
* @see evas_object_below_get()
*
+ * @ingroup Evas_Object_Group
*/
-EAPI Evas_Object *evas_object_above_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Evas_Object *evas_object_above_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
*
@@ -2031,8 +2034,9 @@ EAPI Evas_Object *evas_object_above_get(const Evas_Object *obj) EINA_WARN_UNUSED
*
*
* @param[in] below the object below which to stack
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_stack_below(Evas_Object *obj, Evas_Object *below) EINA_ARG_NONNULL(2);
+EVAS_API void evas_object_stack_below(Evas_Object *obj, Evas_Object *below) EINA_ARG_NONNULL(2);
/**
*
@@ -2045,9 +2049,10 @@ EAPI void evas_object_stack_below(Evas_Object *obj, Evas_Object *below) EINA_ARG
* @see evas_object_stack_below()
* @see evas_object_lower()
*
+ * @ingroup Evas_Object_Group
*
*/
-EAPI void evas_object_raise(Evas_Object *obj);
+EVAS_API void evas_object_raise(Evas_Object *obj);
/**
*
@@ -2075,8 +2080,9 @@ EAPI void evas_object_raise(Evas_Object *obj);
*
*
* @param[in] above the object above which to stack
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_stack_above(Evas_Object *obj, Evas_Object *above) EINA_ARG_NONNULL(2);
+EVAS_API void evas_object_stack_above(Evas_Object *obj, Evas_Object *above) EINA_ARG_NONNULL(2);
/**
*
@@ -2089,9 +2095,10 @@ EAPI void evas_object_stack_above(Evas_Object *obj, Evas_Object *above) EINA_ARG
* @see evas_object_stack_below()
* @see evas_object_raise()
*
+ * @ingroup Evas_Object_Group
*
*/
-EAPI void evas_object_lower(Evas_Object *obj);
+EVAS_API void evas_object_lower(Evas_Object *obj);
/**
* @brief Set a hint flag on the given Evas object that it's used as a "static
@@ -2104,9 +2111,9 @@ EAPI void evas_object_lower(Evas_Object *obj);
* @param[in] is_static_clip @c true if it's to be used as a static clipper,
* @c false otherwise.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_static_clip_set(Evas_Object *obj, Eina_Bool is_static_clip);
+EVAS_API void evas_object_static_clip_set(Evas_Object *obj, Eina_Bool is_static_clip);
/**
* @brief Return a list of objects currently clipped by @c obj.
@@ -2126,9 +2133,9 @@ EAPI void evas_object_static_clip_set(Evas_Object *obj, Eina_Bool is_static_clip
*
* @return A list of objects being clipped by @c obj.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI const Eina_List *evas_object_clipees_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API const Eina_List *evas_object_clipees_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Test if any object is clipped by @c obj.
@@ -2139,34 +2146,34 @@ EAPI const Eina_List *evas_object_clipees_get(const Evas_Object *obj) EINA_WARN_
*
* @since 1.8
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_clipees_has(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_object_clipees_has(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/** How the object should be rendered to output.
*
- * @ingroup Evas
+ * @ingroup Evas_Object_Group
*/
typedef enum
{
- EVAS_RENDER_BLEND = 0, /** Default render operation: d = d*(1-sa) + s. The
+ EVAS_RENDER_BLEND = 0, /**< Default render operation: d = d*(1-sa) + s. The
* object will be merged onto the bottom objects using
* simple alpha compositing (a over b). */
- EVAS_RENDER_BLEND_REL = 1, /** DEPRECATED. d = d*(1 - sa) + s*da */
- EVAS_RENDER_COPY = 2, /** Copy mode, d = s. The object's pixels will replace
+ EVAS_RENDER_BLEND_REL = 1, /**< DEPRECATED. d = d*(1 - sa) + s*da */
+ EVAS_RENDER_COPY = 2, /**< Copy mode, d = s. The object's pixels will replace
* everything that was below, effectively hiding them.
*/
- EVAS_RENDER_COPY_REL = 3, /** DEPRECATED. d = s*da */
- EVAS_RENDER_ADD = 4, /** DEPRECATED. d = d + s */
- EVAS_RENDER_ADD_REL = 5, /** DEPRECATED. d = d + s*da */
- EVAS_RENDER_SUB = 6, /** DEPRECATED. d = d - s */
- EVAS_RENDER_SUB_REL = 7, /** DEPRECATED. d = d - s*da */
- EVAS_RENDER_TINT = 8, /** DEPRECATED. d = d*s + d*(1 - sa) + s*(1 - da) */
- EVAS_RENDER_TINT_REL = 9, /** DEPRECATED. d = d*(1 - sa + s) */
- EVAS_RENDER_MASK = 10, /** DEPRECATED. d = d*sa. For masking support, please
+ EVAS_RENDER_COPY_REL = 3, /**< DEPRECATED. d = s*da */
+ EVAS_RENDER_ADD = 4, /**< DEPRECATED. d = d + s */
+ EVAS_RENDER_ADD_REL = 5, /**< DEPRECATED. d = d + s*da */
+ EVAS_RENDER_SUB = 6, /**< DEPRECATED. d = d - s */
+ EVAS_RENDER_SUB_REL = 7, /**< DEPRECATED. d = d - s*da */
+ EVAS_RENDER_TINT = 8, /**< DEPRECATED. d = d*s + d*(1 - sa) + s*(1 - da) */
+ EVAS_RENDER_TINT_REL = 9, /**< DEPRECATED. d = d*(1 - sa + s) */
+ EVAS_RENDER_MASK = 10, /**< DEPRECATED. d = d*sa. For masking support, please
* use Efl.Canvas.Object.clip_set or EDC "clip_to" instead.
*/
- EVAS_RENDER_MUL = 11 /** DEPRECATED. d = d*s */
+ EVAS_RENDER_MUL = 11 /**< DEPRECATED. d = d*s */
} Evas_Render_Op;
/**
@@ -2187,9 +2194,9 @@ typedef enum
* @param[in] render_op One of the Evas_Render_Op values. Only blend (default)
* and copy modes are supported.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_render_op_set(Evas_Object *obj, Evas_Render_Op render_op);
+EVAS_API void evas_object_render_op_set(Evas_Object *obj, Evas_Render_Op render_op);
/**
* @brief Retrieves the current value of the operation used for rendering the
@@ -2198,18 +2205,18 @@ EAPI void evas_object_render_op_set(Evas_Object *obj, Evas_Render_Op render_op);
* @return One of the Evas_Render_Op values. Only blend (default) and copy
* modes are supported.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI Evas_Render_Op evas_object_render_op_get(const Evas_Object *obj);
+EVAS_API Evas_Render_Op evas_object_render_op_get(const Evas_Object *obj);
/**
* @brief Get the "static clipper" hint flag for a given Evas object.
*
* @return @c true if it's to be used as a static clipper, @c false otherwise.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_static_clip_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_static_clip_get(const Evas_Object *obj);
/**
* @brief Sets the scaling factor for an Evas object. Does not affect all
@@ -2225,9 +2232,9 @@ EAPI Eina_Bool evas_object_static_clip_get(const Evas_Object *obj);
* @param[in] obj The object.
* @param[in] scale The scaling factor. 1.0 means no scaling, default size.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_scale_set(Evas_Object *obj, double scale);
+EVAS_API void evas_object_scale_set(Evas_Object *obj, double scale);
/**
* @brief Retrieves the scaling factor for the given Evas object.
@@ -2236,9 +2243,9 @@ EAPI void evas_object_scale_set(Evas_Object *obj, double scale);
*
* @return The scaling factor. 1.0 means no scaling, default size.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI double evas_object_scale_get(const Evas_Object *obj);
+EVAS_API double evas_object_scale_get(const Evas_Object *obj);
/**
* @brief Returns whether the mouse pointer is logically inside the object.
@@ -2249,9 +2256,9 @@ EAPI double evas_object_scale_get(const Evas_Object *obj);
*
* @since 1.20
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_pointer_inside_by_device_get(const Evas_Object *obj, Efl_Input_Device * dev);
+EVAS_API Eina_Bool evas_object_pointer_inside_by_device_get(const Evas_Object *obj, Efl_Input_Device * dev);
/**
* @brief Returns whether the default mouse pointer is logically inside the
@@ -2269,9 +2276,9 @@ EAPI Eina_Bool evas_object_pointer_inside_by_device_get(const Evas_Object *obj,
* @return @c true if the mouse pointer is inside the object, @c false
* otherwise
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_pointer_inside_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_object_pointer_inside_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns whether the coords are logically inside the object.
@@ -2290,10 +2297,10 @@ EAPI Eina_Bool evas_object_pointer_inside_get(const Evas_Object *obj) EINA_WARN_
*
* @return @c true if the coords are inside the object, @c false otherwise
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_pointer_coords_inside_get(const Evas_Object *eo_obj, int x, int y) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_object_pointer_coords_inside_get(const Evas_Object *eo_obj, int x, int y) EINA_WARN_UNUSED_RESULT;
#include "canvas/efl_canvas_object_eo.legacy.h"
@@ -2302,8 +2309,9 @@ EAPI Eina_Bool evas_object_pointer_coords_inside_get(const Evas_Object *eo_obj,
*
* The object may be an evas object, an elementary object or window, or an
* evas 3D / VG object.
+ * @ingroup Evas_Object_Group
*/
-EAPI Evas *evas_object_evas_get(const Eo *obj);
+EVAS_API Evas *evas_object_evas_get(const Eo *obj);
/**
* @brief Retrieve a list of objects lying over a given position in a canvas.
@@ -2326,9 +2334,9 @@ EAPI Evas *evas_object_evas_get(const Eo *obj);
*
* @return The list of objects that are over the given position in @c e.
*
- * @ingroup Efl_Canvas
+ * @ingroup Evas_Canvas
*/
- EAPI Eina_List *evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects);
+ EVAS_API Eina_List *evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects);
/**
@@ -2353,8 +2361,9 @@ EAPI Evas *evas_object_evas_get(const Eo *obj);
*
* @return The Evas object that is over all other objects at the given
* position.
+ * @ingroup Evas_Canvas
*/
- EAPI Evas_Object* evas_object_top_at_xy_get(Eo *eo_e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects);
+ EVAS_API Evas_Object* evas_object_top_at_xy_get(Eo *eo_e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects);
/**
@@ -2371,8 +2380,9 @@ EAPI Evas *evas_object_evas_get(const Eo *obj);
* objects
*
* @return List of objects
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_List *evas_objects_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_objects_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieve the Evas object stacked at the top of a given rectangular
@@ -2403,10 +2413,7 @@ EAPI Eina_List *evas_objects_in_rectangle_get(const Eo *obj, int x, int y, int w
*
* @ingroup Evas_Canvas
*/
-EAPI Evas_Object *evas_object_top_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT;
-/**
- * @}
- */
+EVAS_API Evas_Object *evas_object_top_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT;
/**
* @ingroup Evas_Object_Group_Events
@@ -2603,7 +2610,7 @@ EAPI Evas_Object *evas_object_top_in_rectangle_get(const Eo *obj, int x, int y,
* See the full example @ref Example_Evas_Events "here".
*
*/
-EAPI void evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
+EVAS_API void evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
/**
* Add (register) a callback function to a given Evas object event with a
@@ -2619,7 +2626,7 @@ EAPI void evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Ty
* @see evas_object_event_callback_add
* @since 1.1
*/
-EAPI void evas_object_event_callback_priority_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4);
+EVAS_API void evas_object_event_callback_priority_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4);
/**
* Delete a callback function from an object
@@ -2645,7 +2652,7 @@ EAPI void evas_object_event_callback_priority_add(Evas_Object *obj, Evas_Ca
* my_data = evas_object_event_callback_del(object, EVAS_CALLBACK_MOUSE_UP, up_callback);
* @endcode
*/
-EAPI void *evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func) EINA_ARG_NONNULL(1, 3);
+EVAS_API void *evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func) EINA_ARG_NONNULL(1, 3);
/**
* Delete (unregister) a callback function registered to a given
@@ -2679,7 +2686,7 @@ EAPI void *evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Ty
* my_data = evas_object_event_callback_del_full(object, EVAS_CALLBACK_MOUSE_UP, up_callback, data);
* @endcode
*/
-EAPI void *evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
+EVAS_API void *evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
/**
* @brief Requests @c keyname key events be directed to @c obj.
@@ -2716,7 +2723,7 @@ EAPI void *evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callba
*
* @return @c true if the call succeeded, @c false otherwise.
*/
-EAPI Eina_Bool evas_object_key_grab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers, Eina_Bool exclusive) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_key_grab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers, Eina_Bool exclusive) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
/**
* @brief Removes the grab on @c keyname key events by @c obj.
@@ -2733,7 +2740,7 @@ EAPI Eina_Bool evas_object_key_grab(Evas_Object *obj, const char *keyname, Evas_
* @param[in] not_modifiers A mask of modifiers that mus not not be present to
* trigger the event.
*/
-EAPI void evas_object_key_ungrab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers) EINA_ARG_NONNULL(2);
+EVAS_API void evas_object_key_ungrab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers) EINA_ARG_NONNULL(2);
/**
* @}
@@ -2783,7 +2790,7 @@ EAPI void evas_object_key_ungrab(Evas_Object *obj, const char *keyname, Evas_Mod
* printf("The data that was attached was %p\n", evas_object_data_get(obj, "name_of_data"));
* @endcode
*/
-EAPI void evas_object_data_set(Evas_Object *obj, const char *key, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_data_set(Evas_Object *obj, const char *key, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Return an attached data pointer on an Evas object by its given
@@ -2814,7 +2821,7 @@ EAPI void evas_object_data_set(Evas_Object *obj, const char
* else printf("No data was stored on the object\n");
* @endcode
*/
-EAPI void *evas_object_data_get(const Evas_Object *obj, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_data_get(const Evas_Object *obj, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Delete an attached data pointer from an object.
@@ -2836,7 +2843,7 @@ EAPI void *evas_object_data_get(const Evas_Object *obj, const
* my_data = evas_object_data_del(obj, "name_of_my_data");
* @endcode
*/
-EAPI void *evas_object_data_del(Evas_Object *obj, const char *key) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_data_del(Evas_Object *obj, const char *key) EINA_ARG_NONNULL(1, 2);
/**
* @}
@@ -2864,7 +2871,7 @@ EAPI void *evas_object_data_del(Evas_Object *obj, const char
* objects, acting only on the ones at the "top level", with regard to
* object parenting.
*/
-EAPI Evas_Object *evas_object_top_at_pointer_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Evas_Object *evas_object_top_at_pointer_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @}
@@ -3085,7 +3092,7 @@ typedef void (*Evas_Object_Intercept_Clip_Unset_Cb)(void *data, Evas_Object *obj
* @see evas_object_intercept_show_callback_del().
*
*/
-EAPI void evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a show event of a object.
@@ -3099,7 +3106,7 @@ EAPI void evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object
* @see evas_object_intercept_show_callback_add().
*
*/
-EAPI void *evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a hide event of a object.
@@ -3114,7 +3121,7 @@ EAPI void *evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object
* @see evas_object_intercept_hide_callback_del().
*
*/
-EAPI void evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a hide event of a object.
@@ -3128,7 +3135,7 @@ EAPI void evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object
* @see evas_object_intercept_hide_callback_add().
*
*/
-EAPI void *evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a move event of an object.
@@ -3143,7 +3150,7 @@ EAPI void *evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object
* @see evas_object_intercept_move_callback_del().
*
*/
-EAPI void evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a move event of an object.
@@ -3157,7 +3164,7 @@ EAPI void evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object
* @see evas_object_intercept_move_callback_add().
*
*/
-EAPI void *evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a resize event of an object.
@@ -3172,7 +3179,7 @@ EAPI void *evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object
* @see evas_object_intercept_resize_callback_del().
*
*/
-EAPI void evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a resize event of an object.
@@ -3186,7 +3193,7 @@ EAPI void evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Obje
* @see evas_object_intercept_resize_callback_add().
*
*/
-EAPI void *evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a raise event of an object.
@@ -3201,7 +3208,7 @@ EAPI void *evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Obje
* @see evas_object_intercept_raise_callback_del().
*
*/
-EAPI void evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a raise event of an object.
@@ -3215,7 +3222,7 @@ EAPI void evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Objec
* @see evas_object_intercept_raise_callback_add().
*
*/
-EAPI void *evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a lower event of an object.
@@ -3230,7 +3237,7 @@ EAPI void *evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Objec
* @see evas_object_intercept_lower_callback_del().
*
*/
-EAPI void evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a lower event of an object.
@@ -3244,7 +3251,7 @@ EAPI void evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Objec
* @see evas_object_intercept_lower_callback_add().
*
*/
-EAPI void *evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a stack above event of an object.
@@ -3259,7 +3266,7 @@ EAPI void *evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Objec
* @see evas_object_intercept_stack_above_callback_del().
*
*/
-EAPI void evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a stack above event of an object.
@@ -3273,7 +3280,7 @@ EAPI void evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas
* @see evas_object_intercept_stack_above_callback_add().
*
*/
-EAPI void *evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a stack below event of an object.
@@ -3288,7 +3295,7 @@ EAPI void *evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas
* @see evas_object_intercept_stack_below_callback_del().
*
*/
-EAPI void evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a stack below event of an object.
@@ -3302,7 +3309,7 @@ EAPI void evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas
* @see evas_object_intercept_stack_below_callback_add().
*
*/
-EAPI void *evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a layer set event of an object.
@@ -3317,7 +3324,7 @@ EAPI void *evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas
* @see evas_object_intercept_layer_set_callback_del().
*
*/
-EAPI void evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a layer set event of an object.
@@ -3331,7 +3338,7 @@ EAPI void evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_O
* @see evas_object_intercept_layer_set_callback_add().
*
*/
-EAPI void *evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a color set event of an object.
@@ -3346,7 +3353,7 @@ EAPI void *evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_O
* @see evas_object_intercept_color_set_callback_del().
*
*/
-EAPI void evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a color set event of an object.
@@ -3360,7 +3367,7 @@ EAPI void evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_O
* @see evas_object_intercept_color_set_callback_add().
*
*/
-EAPI void *evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a clip set event of an object.
@@ -3375,7 +3382,7 @@ EAPI void *evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_O
* @see evas_object_intercept_clip_set_callback_del().
*
*/
-EAPI void evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a clip set event of an object.
@@ -3389,7 +3396,7 @@ EAPI void evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Ob
* @see evas_object_intercept_clip_set_callback_add().
*
*/
-EAPI void *evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a clip unset event of an object.
@@ -3404,7 +3411,7 @@ EAPI void *evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Ob
* @see evas_object_intercept_clip_unset_callback_del().
*
*/
-EAPI void evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a clip unset event of an object.
@@ -3418,7 +3425,7 @@ EAPI void evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_
* @see evas_object_intercept_clip_unset_callback_add().
*
*/
-EAPI void *evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a focus set event of an object.
@@ -3433,7 +3440,7 @@ EAPI void *evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_
* @see evas_object_intercept_focus_set_callback_del().
*
*/
-EAPI void evas_object_intercept_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a focus set event of an object.
@@ -3447,7 +3454,7 @@ EAPI void evas_object_intercept_focus_set_callback_add(Evas_Object *obj, Evas_O
* @see evas_object_intercept_focus_set_callback_add().
*
*/
-EAPI void *evas_object_intercept_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2);
/**
* Set the callback function that intercepts a focus set event of an object.
@@ -3464,7 +3471,7 @@ EAPI void *evas_object_intercept_focus_set_callback_del(Evas_Object *obj, Evas_O
* @since 1.20
*
*/
-EAPI void evas_object_intercept_device_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_intercept_device_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
/**
* Unset the callback function that intercepts a focus set event of an object.
@@ -3480,7 +3487,7 @@ EAPI void evas_object_intercept_device_focus_set_callback_add(Evas_Object *obj,
* @since 1.20
*
*/
-EAPI void *evas_object_intercept_device_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2);
+EVAS_API void *evas_object_intercept_device_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2);
/* Internal APIs for legacy compatibility */
#ifdef EFL_CANVAS_OBJECT_PROTECTED
@@ -3502,7 +3509,7 @@ enum _Evas_Object_Intercept_Cb_Type
};
typedef enum _Evas_Object_Intercept_Cb_Type Evas_Object_Intercept_Cb_Type;
-EWAPI Eina_Bool _evas_object_intercept_call(Evas_Object *obj, Evas_Object_Intercept_Cb_Type type, int internal, ...);
+EVAS_API EVAS_API_WEAK Eina_Bool _evas_object_intercept_call(Evas_Object *obj, Evas_Object_Intercept_Cb_Type type, int internal, ...);
#endif
@@ -3524,41 +3531,39 @@ EWAPI Eina_Bool _evas_object_intercept_call(Evas_Object *obj, Evas_Object_Interc
*
* @ingroup Evas_Object_Rectangle
*/
-EAPI Evas_Object *evas_object_rectangle_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_rectangle_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @}
*/
/**
- * @defgroup Evas_Object_Vg
+ * @defgroup Evas_Object_Vg_Group Vector Graphics Object
* @ingroup Evas
*
- * Evas_Object_Vg is the scene graph for managing vector graphics objects.
- * User can create shape objects as well as fill objects and give it to the
+ * @ref Evas_Object_Vg_Group is the scene graph for managing vector graphics objects.
+ * User can create shape objects as well as fill objects and give them to the
* Evas_Object_Vg for drawing on the screen as well as managing the lifecycle
- * of the objects. enabling reuse of shape objects.
+ * of the objects, enabling reuse of shape objects.
*
- * As Evas_Object_Vg is a Evas_Object all the operation that applicable to
- * a Evas_Object can be performed on it(clipping , map, etc).
+ * Since Evas_Object_Vg is an Evas_Object all operations applicable to
+ * an Evas_Object can be performed on it (clipping, mapping, etc).
*
- * To create any complex vector graphics you can create a hirarchy of shape
- * and fill objects and give the hirarchy to Evas_Object which will be
+ * To create complex vector graphics you can create a hierarchy of shape
+ * and fill objects and give the hierarchy to Evas_Object which will be
* responsible for drawing and showing on the screen.
*
- * As the shape object and fill object (linear and radial gradient) have
+ * As the shape object and fill object (linear and radial gradients) have
* retain mode API, you only have to create it once and set the properties
- * and give it to evas_object_vg.
+ * and give it to Evas_Object_Vg.
*
- * Any change in the property of shape/fill object will automaticaly notified
- * to the evas_object_vg which will trigger a redrawing to reflect the change.
+ * Any change in the properties of a shape or fill object are automatically
+ * notified to Evas_Object_Vg triggering a redraw to reflect the changes.
*
- * To create a vector path, you can give list of path commands to the shape
+ * To create a vector path, you can give a list of path commands to the shape
* object using efl_gfx_shape_path_set() API.
*
- * Enabling graphical shapes to be constructed and reused.
- *
- * Below are the list of feature currently supported by Vector object.
+ * Below are the list of features currently supported by Vector object.
*
* @li Drawing SVG Path.
* You can construct a path by using api in efl_gfx_utils.h
@@ -3568,11 +3573,11 @@ EAPI Evas_Object *evas_object_rectangle_add(Evas *e) EINA_WARN_UNUSED_RESULT EIN
* @see Evas_Vg_Gradient_Linear and Evas_Vg_Gradient_Radial
*
* @li Transformation support for path and gradient fill. You can apply
- affin transformation on path object.
+ affine transforms to path objects.
* @see Eina_Matrix.
*
- * @note Below are the list of interface, classes can be used to draw vector
- * graphics using vector object.
+ * @note Below are the list of interfaces and classes that can be used
+ * to draw vector graphics using vector objects.
*
* @li Efl.Gfx.Shape
* @li Evas.VG_Shape
@@ -3592,26 +3597,29 @@ EAPI Evas_Object *evas_object_rectangle_add(Evas *e) EINA_WARN_UNUSED_RESULT EIN
* * evas_vg_node_origin_set(shape, 10, 10);
* * efl_gfx_shape_stroke_width_set(shape, 1.0);
* * evas_vg_node_color_set(shape, 128, 128, 128, 80);
- * * efl_gfx_shape_path_set(shape, path_cmd, points);
+ * * efl_gfx_shape_path_set(shape, path_cmd, points);
* @endcode
*
* @since 1.14
+ *
+ * @{
*/
/**
- * Creates a new vector object on the given Evas @p e canvas.
- *
- * @param e The given canvas.
- * @return The created vector object handle.
+ * @brief Creates a new vector object on the given Evas @p e canvas.
*
* The shape object hierarchy can be added to the evas_object_vg by accessing
* the root node of the vg canvas and adding the hierarchy as child to the root
* node.
*
+ * @param[in] e The given canvas.
+ * @return The created vector object handle.
+ *
* @see evas_obj_vg_root_node_get()
+ *
* @since 1.14
*/
-EAPI Evas_Object *evas_object_vg_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_vg_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Get the total number of frames of the vector, if it's animated.
@@ -3620,7 +3628,7 @@ EAPI Evas_Object *evas_object_vg_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_N
*
* @since 1.23
*/
-EAPI int evas_object_vg_animated_frame_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API int evas_object_vg_animated_frame_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Get the duration of a sequence of frames.
@@ -3640,7 +3648,7 @@ EAPI int evas_object_vg_animated_frame_count_get(const Evas_Object *obj) EINA_AR
* @see evas_object_vg_animated_frame_count_get()
* @since 1.23
*/
-EAPI double evas_object_vg_animated_frame_duration_get(const Evas_Object *obj, int start_frame EINA_UNUSED, int frame_num EINA_UNUSED) EINA_ARG_NONNULL(1);
+EVAS_API double evas_object_vg_animated_frame_duration_get(const Evas_Object *obj, int start_frame EINA_UNUSED, int frame_num EINA_UNUSED) EINA_ARG_NONNULL(1);
/**
*
@@ -3659,7 +3667,7 @@ NULL, otherwise.
*
* @since 1.23
*/
-EAPI Eina_Bool evas_object_vg_file_set(Evas_Object *obj, const char *file, const char *key);
+EVAS_API Eina_Bool evas_object_vg_file_set(Evas_Object *obj, const char *file, const char *key);
/**
* Set current frame of animated vector object.
@@ -3674,7 +3682,7 @@ EAPI Eina_Bool evas_object_vg_file_set(Evas_Object *obj, const char *file, const
*
* @since 1.23
*/
-EAPI Eina_Bool evas_object_vg_animated_frame_set(Evas_Object *obj, int frame_index) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_object_vg_animated_frame_set(Evas_Object *obj, int frame_index) EINA_ARG_NONNULL(1, 2);
/**
* Get the current frame number of animated vector object.
@@ -3686,53 +3694,167 @@ EAPI Eina_Bool evas_object_vg_animated_frame_set(Evas_Object *obj, int frame_ind
*
* @since 1.23
*/
-EAPI int evas_object_vg_animated_frame_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API int evas_object_vg_animated_frame_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
#include "canvas/efl_canvas_vg_node_eo.legacy.h"
#include "canvas/efl_canvas_vg_object_eo.legacy.h"
#include "canvas/efl_canvas_vg_container_eo.legacy.h"
+#include "canvas/efl_canvas_vg_shape_eo.legacy.h"
+#include "canvas/efl_canvas_vg_gradient_eo.legacy.h"
+
/**
- * Creates a new vector shape object.
+ * @brief These values determine how the end of opened sub-paths are rendered in a
+ * stroke. @ref evas_vg_shape_stroke_cap_set
*
- * @param parent The given vector container object.
+ * @since 1.24
+ */
+typedef enum Evas_Vg_Cap_Type
+{
+ EVAS_VG_CAP_BUTT = 0, /**< The end of lines is rendered as a full stop on the
+ * last point itself */
+ EVAS_VG_CAP_ROUND, /**< The end of lines is rendered as a half-circle
+ * around */
+ EVAS_VG_CAP_SQUARE, /**< The end of lines is rendered as a square around
+ * the last point */
+ EVAS_VG_CAP_LAST /**< Sentinel value to indicate last enum field during
+ * iteration */
+} Evas_Vg_Cap;
+
+
+/**
+ * @brief These values determine how two joining lines are rendered in a stroker.
+ * @ref evas_vg_shape_stroke_join_set
+ *
+ * @since 1.24
+ */
+typedef enum Evas_Vg_Join_Type
+{
+ EVAS_VG_JOIN_MITER = 0, /**< Used to render mitered line joins. The intersection
+ * of the strokes is clipped at a line perpendicular to
+ * the bisector of the angle between the strokes, at the
+ * distance from the intersection of the segments equal
+ * to the product of the miter limit value and the border
+ * radius. This prevents long spikes being created */
+ EVAS_VG_JOIN_ROUND, /**< Used to render rounded line joins. Circular arcs
+ * are used to join two lines smoothly */
+ EVAS_VG_JOIN_BEVEL, /**< Used to render beveled line joins. The outer corner
+ * of the joined lines is filled by enclosing the
+ * triangular region of the corner with a straight line
+ * between the outer corners of each stroke */
+ EVAS_VG_JOIN_LAST /**< Sentinel value to indicate last enum field during
+ * iteration */
+} Evas_Vg_Join;
+
+/**
+ * @brief These values determine how the points are interpreted in a stream of points.
+ *
+ * @since 1.24
+ */
+typedef enum Evas_Vg_Path_Command_Type
+{
+ EVAS_VG_PATH_COMMAND_END = 0, /**< The end of stream , no more points to process */
+ EVAS_VG_PATH_COMMAND_MOVE_TO, /**< The next point is the start point of a sub path */
+ EVAS_VG_PATH_COMMAND_LINE_TO, /**< The next point is used to draw a line from
+ * current point */
+ EVAS_VG_PATH_COMMAND_CUBIC_TO, /**< The next three point is used to draw
+ * a cubic bezier curve from current point */
+ EVAS_VG_PATH_COMMAND_CLOSE, /**< Close the current subpath by drawing a line
+ * between current point and the first point of
+ * current subpath */
+ EVAS_VG_PATH_COMMAND_LAST /**< Sentinel value to indicate last enum field
+ * during iteration */
+} Evas_Vg_Path_Command;
+
+/**
+ * @brief Type defining gradient stops. Describes the location and color of a
+ * transition point in a gradient.
+ *
+ * @since 1.24
+ */
+typedef struct _Evas_Vg_Gradient_Stop
+{
+ double offset; /**< The location of the gradient stop within the gradient
+ * vector */
+ int r; /**< The component R color of the gradient stop */
+ int g; /**< The component G color of the gradient stop */
+ int b; /**< The component B color of the gradient stop */
+ int a; /**< The component A color of the gradient stop */
+} Evas_Vg_Gradient_Stop;
+
+/**
+ * @brief Specifies how the area outside the gradient area should be filled.
+ * @ref evas_vg_gradient_spread_set
+ *
+ * @since 1.24
+ */
+typedef enum Evas_Vg_Gradient_Spread_Type
+{
+ EVAS_VG_GRADIENT_SPREAD_PAD = 0, /**< The area is filled with the closest stop
+ * color. This is the default */
+ EVAS_VG_GRADIENT_SPREAD_REFLECT, /**< The gradient is reflected outside the
+ * gradient area */
+ EVAS_VG_GRADIENT_SPREAD_REPEAT, /**< The gradient is repeated outside the
+ * gradient area */
+ EVAS_VG_GRADIENT_SPREAD_LAST /**< Sentinel value to indicate last enum field
+ * during iteration */
+} Evas_Vg_Gradient_Spread;
+
+/**
+ * @brief Type describing dash.
+ * @ref evas_vg_shape_stroke_dash_set
+ *
+ * @since 1.24
+ */
+typedef struct _Evas_Vg_Dash
+{
+ double length; /**< Dash drawing length */
+ double gap; /**< Distance between two dashes */
+} Evas_Vg_Dash;
+
+/**
+ * @brief Creates a new vector shape object.
+ *
+ * @param[in] parent The given vector container object.
* @return The created vector shape object handle.
*
* @since 1.14
*/
-EAPI Efl_VG* evas_vg_shape_add(Efl_VG *parent);
+EVAS_API Evas_Vg_Shape* evas_vg_shape_add(Evas_Vg_Container *parent);
/**
- * Creates a new vector container object.
+ * @brief Creates a new vector container object.
*
- * @param parent The given vector container object.
+ * @param[in] parent The given vector container object.
* @return The created vector container object handle.
*
* @since 1.14
*/
-EAPI Efl_VG* evas_vg_container_add(Efl_VG *parent);
+EVAS_API Evas_Vg_Container* evas_vg_container_add(Evas_Object *parent);
/**
+ * @brief Retrieves whether or not the given Evas_Vg_Node object is visible.
*
- * Retrieves whether or not the given Efl_Vg object is visible.
- *
+ * @param[in] obj The object.
+ * @return @c EINA_TRUE if the object is visible, @c EINA_FALSE otherwise.
*
+ * @since 1.24
*/
-EAPI Eina_Bool evas_vg_node_visible_get(Eo *obj);
+EVAS_API Eina_Bool evas_vg_node_visible_get(Evas_Vg_Node *obj);
/**
+ * @brief Makes the given Evas_Vg_Node object visible or invisible.
*
- * Makes the given Efl_Vg object visible or invisible.
- *
- * @param[in] v @c EINA_TRUE if to make the object visible, @c EINA_FALSE otherwise
+ * @param[in] obj The object.
+ * @param[in] v @c EINA_TRUE if to make the object visible, @c EINA_FALSE otherwise.
*
+ * @since 1.24
*/
-EAPI void evas_vg_node_visible_set(Eo *obj, Eina_Bool v);
+EVAS_API void evas_vg_node_visible_set(Evas_Vg_Node *obj, Eina_Bool v);
/**
- *
- * Retrieves the general/main color of the given Efl_Vg object.
+ * @brief Retrieves the general/main color of the given Evas_Vg_Node object.
*
* Retrieves the “main” color's RGB component (and alpha channel)
* values, <b>which range from 0 to 255</b>. For the alpha channel,
@@ -3744,59 +3866,62 @@ EAPI void evas_vg_node_visible_set(Eo *obj, Eina_Bool v);
* @note Use @c NULL pointers on the components you're not interested
* in: they'll be ignored by the function.
*
+ * @param[in] obj The object.
* @param[out] r The red component of the given color.
* @param[out] g The green component of the given color.
* @param[out] b The blue component of the given color.
* @param[out] a The alpha component of the given color.
*
+ * @since 1.24
*/
-EAPI void evas_vg_node_color_get(Eo *obj, int *r, int *g, int *b, int *a);
+EVAS_API void evas_vg_node_color_get(Evas_Vg_Node *obj, int *r, int *g, int *b, int *a);
/**
- *
- * Sets the general/main color of the given Efl_Vg object to the given
+ * @brief Sets the general/main color of the given Evas_Vg_Node object to the given
* one.
*
* @see evas_vg_node_color_get() (for an example)
* @note These color values are expected to be premultiplied by @p a.
*
- * @ingroup Evas_Object_Group_Basic
- *
+ * @param[in] obj The object.
* @param[in] r The red component of the given color.
* @param[in] g The green component of the given color.
* @param[in] b The blue component of the given color.
* @param[in] a The alpha component of the given color.
*
+ * @since 1.24
*/
-EAPI void evas_vg_node_color_set(Eo *obj, int r, int g, int b, int a);
+EVAS_API void evas_vg_node_color_set(Evas_Vg_Node *obj, int r, int g, int b, int a);
/**
+ * @brief Retrieves the geometry of the given Evas_Vg_Node object.
*
- * Retrieves the geometry of the given Efl_Vg object.
- *
- * @param[out] x in
- * @param[out] y in
- * @param[out] w in
- * @param[out] h in
+ * @param[in] obj The object.
+ * @param[out] x The x geometry of the given object.
+ * @param[out] y The y geometry of the given object.
+ * @param[out] w The w geometry of the given object.
+ * @param[out] h The h geometry of the given object.
*
+ * @since 1.24
*/
-EAPI void evas_vg_node_geometry_get(Eo *obj, int *x, int *y, int *w, int *h);
+EVAS_API void evas_vg_node_geometry_get(Evas_Vg_Node *obj, int *x, int *y, int *w, int *h);
/**
+ * @brief Changes the geometry of the given Evas_Vg_Node object.
*
- * Changes the geometry of the given Efl_Vg object.
- *
- * @param[in] x in
- * @param[in] y in
- * @param[in] w in
- * @param[in] h in
+ * @param[in] obj The object.
+ * @param[in] x The x geometry of the given object.
+ * @param[in] y The y geometry of the given object.
+ * @param[in] w The w geometry of the given object.
+ * @param[in] h The h geometry of the given object.
*
+ * @since 1.24
+ * @deprecated
*/
-EAPI void evas_vg_node_geometry_set(Eo *obj, int x, int y, int w, int h);
+EVAS_API void evas_vg_node_geometry_set(Evas_Vg_Node *obj, int x, int y, int w, int h) EINA_DEPRECATED;
/**
- *
- * Stack @p obj immediately below @p below
+ * @brief Stack @p obj immediately below @p below.
*
* Objects, in a given canvas, are stacked in the order they get added
* to it. This means that, if they overlap, the highest ones will
@@ -3817,16 +3942,16 @@ EAPI void evas_vg_node_geometry_set(Eo *obj, int x, int y, int w, int h);
* @see evas_object_layer_get()
* @see evas_object_layer_set()
* @see evas_object_stack_below()
- *
*
- * @param[in] below the object below which to stack
+ * @param[in] obj The object.
+ * @param[in] below The object below which to stack.
*
+ * @since 1.24
*/
-EAPI void evas_vg_node_stack_below(Eo *obj, Eo *below);
+EVAS_API void evas_vg_node_stack_below(Evas_Vg_Node *obj, Evas_Vg_Node *below);
/**
- *
- * Stack @p obj immediately above @p above
+ * @brief Stack @p obj immediately above @p above.
*
* Objects, in a given canvas, are stacked in the order they get added
* to it. This means that, if they overlap, the highest ones will
@@ -3847,16 +3972,16 @@ EAPI void evas_vg_node_stack_below(Eo *obj, Eo *below);
* @see evas_object_layer_get()
* @see evas_object_layer_set()
* @see evas_object_stack_below()
- *
*
- * @param[in] above the object above which to stack
+ * @param[in] obj The object.
+ * @param[in] above The object above which to stack.
*
+ * @since 1.24
*/
-EAPI void evas_vg_node_stack_above(Eo *obj, Eo *above);
+EVAS_API void evas_vg_node_stack_above(Evas_Vg_Node *obj, Evas_Vg_Node *above);
/**
- *
- * Raise @p obj to the top of its layer.
+ * @brief Raise @p obj to the top of its layer.
*
* @p obj will, then, be the highest one in the layer it belongs
* to. Object on other layers won't get touched.
@@ -3864,13 +3989,15 @@ EAPI void evas_vg_node_stack_above(Eo *obj, Eo *above);
* @see evas_object_stack_above()
* @see evas_object_stack_below()
* @see evas_object_lower()
- *
+ *
+ * @param[in] obj The object.
+ *
+ * @since 1.24
*/
-EAPI void evas_vg_node_raise(Eo *obj);
+EVAS_API void evas_vg_node_raise(Evas_Vg_Node *obj);
/**
- *
- * Lower @p obj to the bottom of its layer.
+ * @brief Lower @p obj to the bottom of its layer.
*
* @p obj will, then, be the lowest one in the layer it belongs
* to. Objects on other layers won't get touched.
@@ -3878,620 +4005,697 @@ EAPI void evas_vg_node_raise(Eo *obj);
* @see evas_object_stack_above()
* @see evas_object_stack_below()
* @see evas_object_raise()
- *
*
+ * @param[in] obj The object.
*
+ * @since 1.24
*/
-EAPI void evas_vg_node_lower(Eo *obj);
+EVAS_API void evas_vg_node_lower(Evas_Vg_Node *obj);
#include "canvas/efl_canvas_vg_node_eo.legacy.h"
/**
+ * @brief Get the stroke scaling factor used for stroking this path.
*
- * Get the stroke scaling factor used for stroking this path.
- * @since 1.14
- *
+ * @param[in] obj The object.
+ * @return The stroke scale of the given object.
*
+ * @since 1.14
*/
-EAPI double evas_vg_shape_stroke_scale_get(Eo *obj);
+EVAS_API double evas_vg_shape_stroke_scale_get(Evas_Vg_Shape *obj);
/**
- *
- * Sets the stroke scale to be used for stroking the path.
+ * @brief Sets the stroke scale to be used for stroking the path.
* the scale property will be used along with stroke width property.
- * @since 1.14
*
- * @param[in] s stroke scale value
+ * @param[in] obj The object.
+ * @param[in] s The stroke scale value.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_stroke_scale_set(Eo *obj, double s);
+EVAS_API void evas_vg_shape_stroke_scale_set(Evas_Vg_Shape *obj, double s);
/**
+ * @brief Gets the color used for stroking the path.
*
- * Gets the color used for stroking the path.
- * @since 1.14
- *
+ * @param[in] obj The object.
* @param[out] r The red component of the given color.
* @param[out] g The green component of the given color.
* @param[out] b The blue component of the given color.
* @param[out] a The alpha component of the given color.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_stroke_color_get(Eo *obj, int *r, int *g, int *b, int *a);
+EVAS_API void evas_vg_shape_stroke_color_get(Evas_Vg_Shape *obj, int *r, int *g, int *b, int *a);
/**
+ * @brief Sets the color to be used for stroking the path.
*
- * Sets the color to be used for stroking the path.
- * @since 1.14
- *
+ * @param[in] obj The object.
* @param[in] r The red component of the given color.
* @param[in] g The green component of the given color.
* @param[in] b The blue component of the given color.
* @param[in] a The alpha component of the given color.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_stroke_color_set(Eo *obj, int r, int g, int b, int a);
+EVAS_API void evas_vg_shape_stroke_color_set(Evas_Vg_Shape *obj, int r, int g, int b, int a);
/**
+ * @brief Gets the stroke width to be used for stroking the path.
*
- * Gets the stroke width to be used for stroking the path.
- * @since 1.14
- *
+ * @param[in] obj The object.
+ * @return The stroke width of the given object.
*
+ * @since 1.14
*/
-EAPI double evas_vg_shape_stroke_width_get(Eo *obj);
+EVAS_API double evas_vg_shape_stroke_width_get(Evas_Vg_Shape *obj);
/**
+ * @brief Sets the stroke width to be used for stroking the path.
*
- * Sets the stroke width to be used for stroking the path.
- * @since 1.14
- *
- * @param[in] w stroke width to be used
+ * @param[in] obj The object.
+ * @param[in] w The stroke width to be used.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_stroke_width_set(Eo *obj, double w);
+EVAS_API void evas_vg_shape_stroke_width_set(Evas_Vg_Shape *obj, double w);
/**
+ * @brief Gets the stroke location to be used for stroking the path.
*
- * Not Implemented
- *
+ * @param[in] obj The object.
+ * @return The stroke location.
*
+ * @since 1.24
*/
-EAPI double evas_vg_shape_stroke_location_get(Eo *obj);
+EVAS_API double evas_vg_shape_stroke_location_get(Evas_Vg_Shape *obj);
/**
+ * @brief Sets the stroke location to be used for stroking the path.
*
- * Not Implemented
- *
- * @param[in] centered
+ * @param[in] obj The object.
+ * @param[in] centered The stroke location.
*
+ * @since 1.24
*/
-EAPI void evas_vg_shape_stroke_location_set(Eo *obj, double centered);
+EVAS_API void evas_vg_shape_stroke_location_set(Evas_Vg_Shape *obj, double centered);
/**
+ * @brief Gets the stroke dash type used for stroking path.
*
- * Not Implemented
- *
- * @param[out] dash
- * @param[out] length
+ * @param[in] obj The object.
+ * @param[out] dash The dash types.
+ * @param[out] length The length of dash types.
*
+ * @since 1.24
*/
-EAPI void evas_vg_shape_stroke_dash_get(Eo *obj, const Efl_Gfx_Dash **dash, unsigned int *length);
+EVAS_API void evas_vg_shape_stroke_dash_get(Evas_Vg_Shape *obj, const Evas_Vg_Dash **dash, unsigned int *length);
/**
+ * @brief Sets the stroke dash type to be used for stroking the path.
*
- * Not Implemented
- *
- * @param[in] dash
- * @param[in] length
+ * @param[in] obj The object.
+ * @param[in] dash The dash types.
+ * @param[in] length The length of dash types.
*
+ * @since 1.24
*/
-EAPI void evas_vg_shape_stroke_dash_set(Eo *obj, const Efl_Gfx_Dash *dash, unsigned int length);
+EVAS_API void evas_vg_shape_stroke_dash_set(Evas_Vg_Shape *obj, const Evas_Vg_Dash *dash, unsigned int length);
/**
+ * @brief Gets the cap style used for stroking path.
*
- * Gets the cap style used for stroking path.
- * @since 1.14
- *
+ * @param[in] obj The object.
+ * @return The cap style of the given object.
*
+ * @since 1.14
*/
-EAPI Efl_Gfx_Cap evas_vg_shape_stroke_cap_get(Eo *obj);
+EVAS_API Evas_Vg_Cap evas_vg_shape_stroke_cap_get(Evas_Vg_Shape *obj);
/**
+ * @brief Sets the cap style to be used for stroking the path.
*
- * Sets the cap style to be used for stroking the path.
- * The cap will be used for capping the end point of a
+ * The cap will be used for capping the end point of a
* open subpath.
*
- * @see Efl_Gfx_Cap
- * @since 1.14
+ * @see Evas_Vg_Cap
*
- * @param[in] c cap style to use , default is EFL_GFX_CAP_BUTT
+ * @param[in] obj The object.
+ * @param[in] c The cap style to use , default is EVAS_VG_CAP_BUTT
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_stroke_cap_set(Eo *obj, Efl_Gfx_Cap c);
+EVAS_API void evas_vg_shape_stroke_cap_set(Evas_Vg_Shape *obj, Evas_Vg_Cap c);
/**
+ * @brief Gets the join style used for stroking path.
*
- * Gets the join style used for stroking path.
- * @since 1.14
- *
+ * @param[in] obj The object.
+ * @return The join style of the given object.
*
+ * @since 1.14
*/
-EAPI Efl_Gfx_Join evas_vg_shape_stroke_join_get(Eo *obj);
+EVAS_API Evas_Vg_Join evas_vg_shape_stroke_join_get(Evas_Vg_Shape *obj);
/**
+ * @brief Sets the join style to be used for stroking the path.
*
- * Sets the join style to be used for stroking the path.
* The join style will be used for joining the two line segment
* while stroking the path.
*
- * @see Efl_Gfx_Join
- * @since 1.14
+ * @see Evas_Vg_Join
*
- * @param[in] j join style to use , default is
-EFL_GFX_JOIN_MITER
+ * @param[in] obj The object.
+ * @param[in] j The join style to use, default is EVAS_VG_JOIN_MITER.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_stroke_join_set(Eo *obj, Efl_Gfx_Join j);
+EVAS_API void evas_vg_shape_stroke_join_set(Evas_Vg_Shape *obj, Evas_Vg_Join j);
/**
- *
- * Set the list of commands and points to be used to create the
+ * @brief Set the list of commands and points to be used to create the
* content of shape.
*
- * @note see efl_gfx_path interface for how to create a command list.
- * @see Efl_Gfx_Path_Command
- * @since 1.14
+ * @see Evas_Vg_Path_Command
*
- * @param[in] op command list
- * @param[in] points point list
+ * @param[in] obj The object.
+ * @param[in] op The command list.
+ * @param[in] points The point list.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_path_set(Eo *obj, const Efl_Gfx_Path_Command *op, const double *points);
+EVAS_API void evas_vg_shape_path_set(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command *op, const double *points);
/**
+ * @brief Gets the command and points list.
*
- * Gets the command and points list
- * @since 1.14
- *
- * @param[out] op command list
- * @param[out] points point list
+ * @param[in] obj The object.
+ * @param[out] op The command list.
+ * @param[out] points The point list.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_path_get(Eo *obj, const Efl_Gfx_Path_Command **op, const double **points);
-EAPI void evas_vg_shape_path_length_get(Eo *obj, unsigned int *commands, unsigned int *points);
-EAPI void evas_vg_shape_current_get(Eo *obj, double *x, double *y);
-EAPI void evas_vg_shape_current_ctrl_get(Eo *obj, double *x, double *y);
+EVAS_API void evas_vg_shape_path_get(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command **op, const double **points);
/**
+ * @brief Gets the command and points length.
*
- * Copy the shape data from the object specified .
+ * @param[in] obj The object.
+ * @param[out] commands The command length.
+ * @param[out] points The points length.
*
* @since 1.14
+ */
+EVAS_API void evas_vg_shape_path_length_get(Evas_Vg_Shape *obj, unsigned int *commands, unsigned int *points);
+
+/**
+ * @brief Gets the current points.
*
+ * @param[in] obj The object.
+ * @param[out] x The x co-ordinate of current point.
+ * @param[out] y The y co-ordinate of current point.
*
- * @param[in] dup_from Shape object from where data will be copied.
- *
+ * @since 1.14
*/
-EAPI void evas_vg_shape_dup(Eo *obj, Eo *dup_from);
+EVAS_API void evas_vg_shape_current_get(Evas_Vg_Shape *obj, double *x, double *y);
/**
+ * @brief Gets the current control points.
*
- * Reset the shape data of the shape object.
+ * @param[in] obj The object.
+ * @param[out] x The x co-ordinate of control point.
+ * @param[out] y The y co-ordinate of control point.
*
* @since 1.14
- *
+ */
+EVAS_API void evas_vg_shape_current_ctrl_get(Evas_Vg_Shape *obj, double *x, double *y);
+
+/**
+ * @brief Copy the shape data from the object specified.
*
+ * @param[in] obj The object.
+ * @param[in] dup_from The Shape object from where data will be copied.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_reset(Eo *obj);
+EVAS_API void evas_vg_shape_dup(Evas_Vg_Shape *obj, Evas_Vg_Shape *dup_from);
/**
+ * @brief Reset the shape data of the shape object.
*
- * Moves the current point to the given point,
- * implicitly starting a new subpath and closing the previous one.
+ * @param[in] obj The object.
*
- * @see efl_gfx_path_append_close()
* @since 1.14
+ */
+EVAS_API void evas_vg_shape_reset(Evas_Vg_Shape *obj);
+
+/**
+ * @brief Moves the current point to the given point,
+ * implicitly starting a new subpath and closing the previous one.
*
+ * @see evas_vg_shape_append_close()
*
- * @param[in] x X co-ordinate of the current point.
- * @param[in] y Y co-ordinate of the current point.
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of the current point.
+ * @param[in] y The y co-ordinate of the current point.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_move_to(Eo *obj, double x, double y);
+EVAS_API void evas_vg_shape_append_move_to(Evas_Vg_Shape *obj, double x, double y);
/**
- *
- * Adds a straight line from the current position to the given endPoint.
+ * @brief Adds a straight line from the current position to the given endPoint.
* After the line is drawn, the current position is updated to be at the end
* point of the line.
*
* @note if no current position present, it draws a line to itself, basically
* a point.
*
- * @see efl_gfx_path_append_move_to()
- * @since 1.14
- *
+ * @see evas_vg_shape_append_move_to()
*
- * @param[in] x X co-ordinate of end point of the line.
- * @param[in] y Y co-ordinate of end point of the line.
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of end point of the line.
+ * @param[in] y The y co-ordinate of end point of the line.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_line_to(Eo *obj, double x, double y);
+EVAS_API void evas_vg_shape_append_line_to(Evas_Vg_Shape *obj, double x, double y);
/**
- *
- * Adds a quadratic Bezier curve between the current position and the
+ * @brief Adds a quadratic Bezier curve between the current position and the
* given end point (x,y) using the control points specified by (ctrl_x, ctrl_y).
* After the path is drawn, the current position is updated to be at the end
* point of the path.
*
- * @since 1.14
- *
- *
- * @param[in] x X co-ordinate of end point of the line.
- * @param[in] y Y co-ordinate of end point of the line.
- * @param[in] ctrl_x X co-ordinate of control point.
- * @param[in] ctrl_y Y co-ordinate of control point.
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of end point of the line.
+ * @param[in] y The y co-ordinate of end point of the line.
+ * @param[in] ctrl_x The x co-ordinate of control point.
+ * @param[in] ctrl_y The y co-ordinate of control point.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_quadratic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y);
+EVAS_API void evas_vg_shape_append_quadratic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y);
/**
- *
- * Same as efl_gfx_path_append_quadratic_to() api only difference is that it
+ * @brief Same as evas_vg_shape_append_quadratic_to() api only difference is that it
* uses the current control point to draw the bezier.
*
- * @see efl_gfx_path_append_quadratic_to()
- * @since 1.14
- *
+ * @see evas_vg_shape_append_quadratic_to()
*
- * @param[in] x X co-ordinate of end point of the line.
- * @param[in] y Y co-ordinate of end point of the line.
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of end point of the line.
+ * @param[in] y The y co-ordinate of end point of the line.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_squadratic_to(Eo *obj, double x, double y);
+EVAS_API void evas_vg_shape_append_squadratic_to(Evas_Vg_Shape *obj, double x, double y);
/**
- *
- * Adds a cubic Bezier curve between the current position and the
+ * @brief Adds a cubic Bezier curve between the current position and the
* given end point (x,y) using the control points specified by
* (ctrl_x0, ctrl_y0), and (ctrl_x1, ctrl_y1). After the path is drawn,
* the current position is updated to be at the end point of the path.
*
- * @since 1.14
- *
- *
- * @param[in] x X co-ordinate of end point of the line.
- * @param[in] y Y co-ordinate of end point of the line.
- * @param[in] ctrl_x0 X co-ordinate of 1st control point.
- * @param[in] ctrl_y0 Y co-ordinate of 1st control point.
- * @param[in] ctrl_x1 X co-ordinate of 2nd control point.
- * @param[in] ctrl_y1 Y co-ordinate of 2nd control point.
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of end point of the line.
+ * @param[in] y The y co-ordinate of end point of the line.
+ * @param[in] ctrl_x0 The x co-ordinate of 1st control point.
+ * @param[in] ctrl_y0 The y co-ordinate of 1st control point.
+ * @param[in] ctrl_x1 The x co-ordinate of 2nd control point.
+ * @param[in] ctrl_y1 The y co-ordinate of 2nd control point.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_cubic_to(Eo *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1);
+EVAS_API void evas_vg_shape_append_cubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1);
/**
- *
- * Same as efl_gfx_path_append_cubic_to() api only difference is that it uses
+ * @brief Same as evas_vg_shape_append_cubic_to() api only difference is that it uses
* the current control point to draw the bezier.
*
- * @see efl_gfx_path_append_cubic_to()
- *
- * @since 1.14
+ * @see evas_vg_shape_append_cubic_to()
*
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of end point of the line.
+ * @param[in] y The x co-ordinate of end point of the line.
+ * @param[in] ctrl_x The x co-ordinate of 2nd control point.
+ * @param[in] ctrl_y The y co-ordinate of 2nd control point.
*
- * @param[in] x X co-ordinate of end point of the line.
- * @param[in] y Y co-ordinate of end point of the line.
- * @param[in] ctrl_x X co-ordinate of 2nd control point.
- * @param[in] ctrl_y Y co-ordinate of 2nd control point.
- *
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_scubic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y);
+EVAS_API void evas_vg_shape_append_scubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y);
/**
- *
- * Append an arc that connects from the current point int the point list
- * to the given point (x,y). The arc is defined by the given radius in
- * x-direction (rx) and radius in y direction (ry) .
+ * @brief Append an arc that connects from the current point int the point list
+ * to the given point (x,y). The arc is defined by the given radius in
+ * x-direction (rx) and radius in y direction (ry).
*
* @note Use this api if you know the end point's of the arc otherwise
- * use more convenient function efl_gfx_path_append_arc_to()
- *
- * @see efl_gfx_path_append_arc_to()
- * @since 1.14
+ * use more convenient function evas_vg_shape_append_arc_to()
*
+ * @see evas_vg_shape_append_arc_to()
*
- * @param[in] x X co-ordinate of end point of the arc.
- * @param[in] y Y co-ordinate of end point of the arc.
- * @param[in] rx radius of arc in x direction.
- * @param[in] ry radius of arc in y direction.
- * @param[in] angle x-axis rotation , normally 0.
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of end point of the arc.
+ * @param[in] y The y co-ordinate of end point of the arc.
+ * @param[in] rx The radius of arc in x direction.
+ * @param[in] ry The radius of arc in y direction.
+ * @param[in] angle The x-axis rotation , normally 0.
* @param[in] large_arc Defines whether to draw the larger arc or smaller arc joining two point.
* @param[in] sweep Defines whether the arc will be drawn counter-clockwise or clockwise from current point to the end point taking into account the large_arc property.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_arc_to(Eo *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep);
+EVAS_API void evas_vg_shape_append_arc_to(Evas_Vg_Shape *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep);
/**
* @brief Append an arc that enclosed in the given rectangle (x, y, w, h). The
* angle is defined in counter clock wise , use -ve angle for clockwise arc.
*
- * @param[in] y Y co-ordinate of the rect.
- * @param[in] w width of the rect.
- * @param[in] h height of the rect.
- * @param[in] start_angle Angle at which the arc will start
- * @param[in] sweep_length @ Length of the arc.
+ * @param[in] obj The object.
+ * @param[in] y The x co-ordinate of the rect.
+ * @param[in] y The y co-ordinate of the rect.
+ * @param[in] w The width of the rect.
+ * @param[in] h The height of the rect.
+ * @param[in] start_angle The angle at which the arc will start.
+ * @param[in] sweep_length The length of the arc.
*
* @since 1.18
- *
- * @ingroup Efl_Gfx_Shape
*/
-EAPI void evas_vg_shape_append_arc(Eo *obj, double x, double y, double w, double h, double start_angle, double sweep_length);
+EVAS_API void evas_vg_shape_append_arc(Evas_Vg_Shape *obj, double x, double y, double w, double h, double start_angle, double sweep_length);
/**
- *
- * Closes the current subpath by drawing a line to the beginning of the subpath,
+ * @brief Closes the current subpath by drawing a line to the beginning of the subpath,
* automatically starting a new path. The current point of the new path is
* (0, 0).
*
* @note If the subpath does not contain any points, this function does nothing.
*
- * @since 1.14
- *
- *
+ * @param[in] obj The object.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_close(Eo *obj);
+EVAS_API void evas_vg_shape_append_close(Evas_Vg_Shape *obj);
/**
+ * @brief Append a circle with given center and radius.
*
- * Append a circle with given center and radius.
- *
- * @see efl_gfx_path_append_arc()
- * @since 1.14
- *
+ * @see evas_vg_shape_append_arc()
*
- * @param[in] x X co-ordinate of the center of the circle.
- * @param[in] y Y co-ordinate of the center of the circle.
- * @param[in] radius radius of the circle.
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of the center of the circle.
+ * @param[in] y The y co-ordinate of the center of the circle.
+ * @param[in] radius The radius of the circle.
*
+ * @since 1.14
*/
-EAPI void evas_vg_shape_append_circle(Eo *obj, double x, double y, double radius);
+EVAS_API void evas_vg_shape_append_circle(Evas_Vg_Shape *obj, double x, double y, double radius);
/**
- *
- * Append the given rectangle with rounded corner to the path.
+ * @brief Append the given rectangle with rounded corner to the path.
*
* The xr and yr arguments specify the radii of the ellipses defining the
* corners of the rounded rectangle.
*
* @note xr and yr are specified in terms of width and height respectively.
- *
* @note if xr and yr are 0, then it will draw a rectangle without rounded corner.
*
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of the rectangle.
+ * @param[in] y The y co-ordinate of the rectangle.
+ * @param[in] w The width of the rectangle.
+ * @param[in] h The height of the rectangle.
+ * @param[in] rx The x radius of the rounded corner and should be in range [0 to w/2].
+ * @param[in] ry The y radius of the rounded corner and should be in range [0 to h/2].
+ *
* @since 1.14
+ */
+EVAS_API void evas_vg_shape_append_rect(Evas_Vg_Shape *obj, double x, double y, double w, double h, double rx, double ry);
+
+/**
+ * @brief Append the SVG path data.
*
+ * @param[in] obj The object.
+ * @param[in] svg_path_data The svg path data to append.
*
- * @param[in] x X co-ordinate of the rectangle.
- * @param[in] y Y co-ordinate of the rectangle.
- * @param[in] w Width of the rectangle.
- * @param[in] h Height of the rectangle.
- * @param[in] rx The x radius of the rounded corner and should be in range [ 0 to w/2 ]
- * @param[in] ry The y radius of the rounded corner and should be in range [ 0 to h/2 ]
+ * @since 1.24
+ */
+EVAS_API void evas_vg_shape_append_svg_path(Evas_Vg_Shape *obj, const char *svg_path_data);
+
+/**
+ * @brief Creates intermediary path part-way between two paths
+ *
+ * Sets the points of the @c obj as the linear interpolation of the points in
+ * the @c from and @c to paths. The path's x,y position and control point
+ * coordinates are likewise interpolated.
+ *
+ * The @c from and @c to paths must not already have equivalent points, and
+ * @c to must contain at least as many points as @c from, else the function
+ * returns @c false with no interpolation performed. If @c to has more points
+ * than @c from, the excess points are ignored.
+ *
+ * @param[in] obj The object.
+ * @param[in] from The source path.
+ * @param[in] to The destination path.
+ * @param[in] pos_map The position map in range 0.0 to 1.0.
*
+ * @since 1.24
*/
-EAPI void evas_vg_shape_append_rect(Eo *obj, double x, double y, double w, double h, double rx, double ry);
+EVAS_API Eina_Bool evas_vg_shape_interpolate(Evas_Vg_Shape *obj, const Eo *from, const Eo *to, double pos_map);
-EAPI void evas_vg_shape_append_svg_path(Eo *obj, const char *svg_path_data);
-EAPI Eina_Bool evas_vg_shape_interpolate(Eo *obj, const Eo *from, const Eo *to, double pos_map);
-EAPI Eina_Bool evas_vg_shape_equal_commands(Eo *obj, const Eo *with);
+/**
+ * @brief Check if the given objects have equal commands.
+ *
+ * @param[in] obj The object.
+ * @param[in] with The target object.
+ *
+ * @return True on equal, @c false otherwise.
+ *
+ * @since 1.24
+ */
+EVAS_API Eina_Bool evas_vg_shape_equal_commands(Evas_Vg_Shape *obj, const Eo *with);
/**
- * set a vg object as the fill property
+ * @brief Set a vg object as the fill property.
*
- * @param obj The object whose fill property gets modified.
- * @param f The object content will be used for filling.
+ * @param[in] obj The object whose fill property gets modified.
+ * @param[in] f The object content to be used for filling.
*
+ * @since 1.24
*/
-EAPI void evas_vg_shape_fill_set(Eo *obj, Efl_VG *f);
+EVAS_API void evas_vg_shape_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f);
/**
- * returns the object that is set for the fill property
+ * @brief Returns the object that is set for the fill property.
*
- * @param obj The object whose fill property is inspected.
+ * @param[in] obj The object whose fill property is inspected.
* @return The object that is set as fill property.
*
+ * @since 1.24
*/
-EAPI Efl_VG* evas_vg_shape_fill_get(const Eo *obj);
+EVAS_API Evas_Vg_Node* evas_vg_shape_fill_get(const Evas_Vg_Shape *obj);
/**
- * set a vg object as the stroke fill property
+ * @brief Set a vg object as the stroke fill property.
*
- * @param obj The object whose stroke fill property gets modified.
- * @param f The object content will be used for stroke filling.
+ * @param[in] obj The object whose stroke fill property gets modified.
+ * @param[in] f The object content will be used for stroke filling.
*
+ * @since 1.24
*/
-EAPI void evas_vg_shape_stroke_fill_set(Eo *obj, Efl_VG *f);
+EVAS_API void evas_vg_shape_stroke_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f);
/**
- * returns the object that is set for the stroke fill property
+ * @brief Returns the object that is set for the stroke fill property.
*
- * @param obj The object whose stroke fill property is inspected.
+ * @param[in] obj The object whose stroke fill property is inspected.
* @return The object that is set as stroke fill property.
*
+ * @since 1.24
*/
-EAPI Efl_VG* evas_vg_shape_stroke_fill_get(const Eo *obj);
+EVAS_API Evas_Vg_Node* evas_vg_shape_stroke_fill_get(const Evas_Vg_Shape *obj);
#include "canvas/efl_canvas_vg_shape_eo.legacy.h"
/**
+ * @brief Set the list of color stops for the gradient.
*
- * Set the list of color stops for the gradient
- * @since 1.14
- *
- * @param[in] colors color stops list
- * @param[in] length length of the list
+ * @param[in] obj The object.
+ * @param[in] colors The color stops list.
+ * @param[in] length The length of the list.
*
+ * @since 1.14
*/
-EAPI void evas_vg_gradient_stop_set(Eo *obj, const Efl_Gfx_Gradient_Stop *colors, unsigned int length);
+EVAS_API void evas_vg_gradient_stop_set(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop *colors, unsigned int length);
/**
+ * @brief Get the list of color stops.
*
- * get the list of color stops.
- * @since 1.14
- *
- * @param[out] colors color stops list
- * @param[out] length length of the list
+ * @param[in] obj The object.
+ * @param[out] colors The color stops list.
+ * @param[out] length The length of the list.
*
+ * @since 1.14
*/
-EAPI void evas_vg_gradient_stop_get(Eo *obj, const Efl_Gfx_Gradient_Stop **colors, unsigned int *length);
+EVAS_API void evas_vg_gradient_stop_get(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop **colors, unsigned int *length);
/**
+ * @brief Specifies the spread method that should be used for this gradient.
*
- * Specifies the spread method that should be used for this gradient.
- * @since 1.14
- *
- * @param[in] s spread type to be used
+ * @param[in] obj The object.
+ * @param[in] s The spread type to be used.
*
+ * @since 1.14
*/
-EAPI void evas_vg_gradient_spread_set(Eo *obj, Efl_Gfx_Gradient_Spread s);
+EVAS_API void evas_vg_gradient_spread_set(Evas_Vg_Gradient *obj, Evas_Vg_Gradient_Spread s);
/**
+ * @brief Returns the spread method use by this gradient. The default is
+ * EVAS_VG_GRADIENT_SPREAD_PAD.
*
- * Returns the spread method use by this gradient. The default is
- * EFL_GFX_GRADIENT_SPREAD_PAD.
- * @since 1.14
- *
+ * @param[in] obj The object.
+ * @return The spread type of the given object.
*
+ * @since 1.14
*/
-EAPI Efl_Gfx_Gradient_Spread evas_vg_gradient_spread_get(Eo *obj);
+EVAS_API Evas_Vg_Gradient_Spread evas_vg_gradient_spread_get(Evas_Vg_Gradient *obj);
/**
- * Creates a new linear gradient object \.
+ * @brief Creates a new linear gradient object.
*
- * @param parent The given vector container object.
+ * @param[in] parent The given vector container object.
* @return The created linear gradient object handle.
*
+ * @since 1.24
*/
-EAPI Efl_VG* evas_vg_gradient_linear_add(Efl_VG *parent);
+EVAS_API Evas_Vg_Gradient_Linear* evas_vg_gradient_linear_add(Evas_Vg_Container *parent);
/**
+ * @brief Sets the start point of this linear gradient.
*
- * Sets the start point of this linear gradient.
- *
- * @param[in] x x co-ordinate of start point
- * @param[in] y y co-ordinate of start point
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of start point.
+ * @param[in] y The y co-ordinate of start point
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_linear_start_set(Eo *obj, double x, double y);
+EVAS_API void evas_vg_gradient_linear_start_set(Evas_Vg_Gradient_Linear *obj, double x, double y);
/**
+ * @brief Gets the start point of this linear gradient.
*
- * Gets the start point of this linear gradient.
- *
- * @param[out] x x co-ordinate of start point
- * @param[out] y y co-ordinate of start point
+ * @param[in] obj The object.
+ * @param[out] x The x co-ordinate of start point.
+ * @param[out] y The y co-ordinate of start point.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_linear_start_get(Eo *obj, double *x, double *y);
+EVAS_API void evas_vg_gradient_linear_start_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y);
/**
+ * @brief Sets the end point of this linear gradient.
*
- * Sets the end point of this linear gradient.
- *
- * @param[in] x x co-ordinate of end point
- * @param[in] y y co-ordinate of end point
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of end point.
+ * @param[in] y The y co-ordinate of end point.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_linear_end_set(Eo *obj, double x, double y);
+EVAS_API void evas_vg_gradient_linear_end_set(Evas_Vg_Gradient_Linear *obj, double x, double y);
/**
+ * @brief Gets the end point of this linear gradient.
*
- * Gets the end point of this linear gradient.
- *
- * @param[out] x x co-ordinate of end point
- * @param[out] y y co-ordinate of end point
+ * @param[in] obj The object.
+ * @param[out] x The x co-ordinate of end point.
+ * @param[out] y The y co-ordinate of end point.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_linear_end_get(Eo *obj, double *x, double *y);
+EVAS_API void evas_vg_gradient_linear_end_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y);
/**
- * Creates a new radial gradient object \.
+ * @brief Creates a new radial gradient object.
*
- * @param parent The given vector container object.
+ * @param[in] parent The given vector container object.
* @return The created radial gradient object handle.
*
+ * @since 1.24
*/
-EAPI Efl_VG* evas_vg_gradient_radial_add(Efl_VG *parent);
+EVAS_API Evas_Vg_Gradient_Radial* evas_vg_gradient_radial_add(Evas_Vg_Container *parent);
/**
+ * @brief Sets the center of this radial gradient.
*
- * Sets the center of this radial gradient.
- *
- * @param[in] x x co-ordinate of center point
- * @param[in] y y co-ordinate of center point
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of center point.
+ * @param[in] y The y co-ordinate of center point.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_radial_center_set(Eo *obj, double x, double y);
+EVAS_API void evas_vg_gradient_radial_center_set(Evas_Vg_Gradient_Radial *obj, double x, double y);
/**
+ * @brief Gets the center of this radial gradient.
*
- * Gets the center of this radial gradient.
- *
- * @param[out] x x co-ordinate of center point
- * @param[out] y y co-ordinate of center point
+ * @param[in] obj The object.
+ * @param[out] x The x co-ordinate of center point.
+ * @param[out] y The y co-ordinate of center point.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_radial_center_get(Eo *obj, double *x, double *y);
+EVAS_API void evas_vg_gradient_radial_center_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y);
/**
+ * @brief Sets the center radius of this radial gradient.
*
- * Sets the center radius of this radial gradient.
- *
- * @param[in] r center radius
+ * @param[in] obj The object.
+ * @param[in] r The center radius.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_radial_radius_set(Eo *obj, double r);
+EVAS_API void evas_vg_gradient_radial_radius_set(Evas_Vg_Gradient_Radial *obj, double r);
/**
+ * @brief Gets the center radius of this radial gradient.
*
- * Gets the center radius of this radial gradient.
- *
+ * @param[in] obj The object.
+ * @return The center radius of the given object.
*
+ * @since 1.24
*/
-EAPI double evas_vg_gradient_radial_radius_get(Eo *obj);
+EVAS_API double evas_vg_gradient_radial_radius_get(Evas_Vg_Gradient_Radial *obj);
/**
+ * @brief Sets the focal point of this radial gradient.
*
- * Sets the focal point of this radial gradient.
- *
- * @param[in] x x co-ordinate of focal point
- * @param[in] y y co-ordinate of focal point
+ * @param[in] obj The object.
+ * @param[in] x The x co-ordinate of focal point.
+ * @param[in] y The y co-ordinate of focal point.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_radial_focal_set(Eo *obj, double x, double y);
+EVAS_API void evas_vg_gradient_radial_focal_set(Evas_Vg_Gradient_Radial *obj, double x, double y);
/**
+ * @brief Gets the focal point of this radial gradient.
*
- * Gets the focal point of this radial gradient.
- *
- * @param[out] x x co-ordinate of focal point
- * @param[out] y y co-ordinate of focal point
+ * @param[in] obj The object.
+ * @param[out] x The x co-ordinate of focal point.
+ * @param[out] y The y co-ordinate of focal point.
*
+ * @since 1.24
*/
-EAPI void evas_vg_gradient_radial_focal_get(Eo *obj, double *x, double *y);
+EVAS_API void evas_vg_gradient_radial_focal_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y);
/**
* @}
*/
/**
- * @ingroup Evas_Object_Image
+ * @addtogroup Evas_Object_Image
*
* @{
*/
@@ -4518,7 +4722,7 @@ EAPI void evas_vg_gradient_radial_focal_get(Eo *obj, double *x, double *y);
* evas_object_image_file_set(img, "/path/to/img", NULL);
* @endcode
*/
-EAPI Evas_Object *evas_object_image_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_image_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Creates a new image object that @b automatically scales its bound
@@ -4538,7 +4742,7 @@ EAPI Evas_Object *evas_object_image_add(Evas *e) EINA_WARN_UNUS
* @see evas_object_image_filled_set()
* @see evas_object_image_fill_set()
*/
-EAPI Evas_Object *evas_object_image_filled_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_image_filled_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Sets the data for an image from memory to be loaded
@@ -4563,7 +4767,7 @@ EAPI Evas_Object *evas_object_image_filled_add(Evas *e) EINA_WA
* @param format The format of the file (optional), or @c NULL if not needed
* @param key The image key in file, or @c NULL.
*/
-EAPI void evas_object_image_memfile_set(Evas_Object *obj, void *data, int size, char *format, char *key) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_image_memfile_set(Evas_Object *obj, void *data, int size, char *format, char *key) EINA_ARG_NONNULL(1, 2);
/**
* @def EVAS_NATIVE_SURFACE_VERSION
@@ -4688,7 +4892,7 @@ typedef struct _Evas_Native_Surface
* This function sets a native surface of a given canvas image.
*
*/
-EAPI void evas_object_image_native_surface_set(Evas_Object *obj, Evas_Native_Surface *surf) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_image_native_surface_set(Evas_Object *obj, Evas_Native_Surface *surf) EINA_ARG_NONNULL(1, 2);
/**
* @brief Get the native surface of a given image of the canvas
@@ -4697,7 +4901,7 @@ EAPI void evas_object_image_native_surface_set(Evas_Obj
*
* @return The native surface.
*/
-EAPI Evas_Native_Surface *evas_object_image_native_surface_get(const Evas_Object *obj);
+EVAS_API Evas_Native_Surface *evas_object_image_native_surface_get(const Evas_Object *obj);
/**
* Possible orientation options for evas_object_image_orient_set().
@@ -4742,7 +4946,7 @@ typedef enum
* then, that the user preload an image with it being @b hidden, just
* to be shown on the #EVAS_CALLBACK_IMAGE_PRELOADED event's callback.
*/
-EAPI void evas_object_image_preload(Evas_Object *obj, Eina_Bool cancel) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_image_preload(Evas_Object *obj, Eina_Bool cancel) EINA_ARG_NONNULL(1);
/**
* Clear the source object on a proxy image object.
@@ -4753,7 +4957,7 @@ EAPI void evas_object_image_preload(Evas_Object *obj, E
* This is equivalent to calling evas_object_image_source_set() with a
* @c NULL source.
*/
-EAPI Eina_Bool evas_object_image_source_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_object_image_source_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
*
@@ -4782,11 +4986,12 @@ EAPI Eina_Bool evas_object_image_source_unset(Evas_Object *o
* }
* @endcode
*
+ * @param[in] obj The object
* @param[in] file The image file path.
* @param[in] key The image key in @p file (if its an Eet one), or @c
-NULL, otherwise.
+ * NULL, otherwise.
*/
-EAPI void evas_object_image_file_set(Eo *obj, const char *file, const char *key);
+EVAS_API void evas_object_image_file_set(Eo *obj, const char *file, const char *key);
/**
*
@@ -4798,11 +5003,12 @@ EAPI void evas_object_image_file_set(Eo *obj, const char *file, const char *key)
* @note Use @c NULL pointers on the file components you're not
* interested in: they'll be ignored by the function.
*
+ * @param[in] obj The object
* @param[out] file The image file path.
* @param[out] key The image key in @p file (if its an Eet one), or @c
-NULL, otherwise.
+ * NULL, otherwise.
*/
-EAPI void evas_object_image_file_get(const Eo *obj, const char **file, const char **key);
+EVAS_API void evas_object_image_file_get(const Eo *obj, const char **file, const char **key);
/**
*
@@ -4815,11 +5021,12 @@ EAPI void evas_object_image_file_get(const Eo *obj, const char **file, const cha
*
* @since 1.8
*
+ * @param[in] obj The object
* @param[in] f The mmaped file
* @param[in] key The image key in @p file (if its an Eet one), or @c
-NULL, otherwise.
+ * NULL, otherwise.
*/
-EAPI void evas_object_image_mmap_set(Eo *obj, const Eina_File *f, const char *key);
+EVAS_API void evas_object_image_mmap_set(Eo *obj, const Eina_File *f, const char *key);
/**
*
@@ -4832,11 +5039,12 @@ EAPI void evas_object_image_mmap_set(Eo *obj, const Eina_File *f, const char *ke
*
* @since 1.10
*
+ * @param[in] obj The object
* @param[out] f The mmaped file
* @param[out] key The image key in @p file (if its an Eet one), or @c
-NULL, otherwise.
+ * NULL, otherwise.
*/
-EAPI void evas_object_image_mmap_get(const Eo *obj, const Eina_File **f, const char **key);
+EVAS_API void evas_object_image_mmap_get(const Eo *obj, const Eina_File **f, const char **key);
/**
*
@@ -4858,19 +5066,21 @@ EAPI void evas_object_image_mmap_get(const Eo *obj, const Eina_File **f, const c
* compress is hint for the compression modes (Eet ones) or for the compression flags (Png one)
* (1 == compress, 0 = don't compress).
*
+ * @param[in] obj The object
* @param[in] file The filename to be used to save the image (extension
-obligatory).
+ * obligatory).
* @param[in] key The image key in the file (if an Eet one), or @c NULL,
-otherwise.
+ * otherwise.
* @param[in] flags String containing the flags to be used (@c NULL for
none).
*/
-EAPI Eina_Bool evas_object_image_save(const Eo *obj, const char *file, const char *key, const char *flags) EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_image_save(const Eo *obj, const char *file, const char *key, const char *flags) EINA_ARG_NONNULL(2);
/**
*
* Check if an image object can be animated (have multiple frames)
*
+ * @param[in] obj The object
* @return whether obj support animation
*
* This returns if the image file of an image object is capable of animation
@@ -4919,7 +5129,7 @@ EAPI Eina_Bool evas_object_image_save(const Eo *obj, const char *file, const cha
* @since 1.1
*
*/
-EAPI Eina_Bool evas_object_image_animated_get(const Eo *obj);
+EVAS_API Eina_Bool evas_object_image_animated_get(const Eo *obj);
/**
* @brief Set the frame to current frame of an image object.
@@ -4932,12 +5142,33 @@ EAPI Eina_Bool evas_object_image_animated_get(const Eo *obj);
* @ref evas_object_image_animated_loop_type_get,
* @ref evas_object_image_animated_loop_count_get,
* @ref evas_object_image_animated_frame_duration_get.
+ * @ref evas_object_image_animated_frame_get.
*
+ * @param[in] obj The object
* @param[in] frame_index The index of current frame.
*
* @since 1.1
*/
-EAPI void evas_object_image_animated_frame_set(Evas_Object *obj, int frame_index);
+EVAS_API void evas_object_image_animated_frame_set(Evas_Object *obj, int frame_index);
+
+/**
+ * @brief Get the frame to current frame of an image object.
+ *
+ * This returns image object's current frame.
+ *
+ * See also @ref evas_object_image_animated_get,
+ * @ref evas_object_image_animated_frame_count_get,
+ * @ref evas_object_image_animated_loop_type_get,
+ * @ref evas_object_image_animated_loop_count_get,
+ * @ref evas_object_image_animated_frame_duration_get.
+ * @ref evas_object_image_animated_frame_set.
+ *
+ * @param[in] obj The object
+ * @return The index of current frame.
+ *
+ * @since 1.24
+ */
+EVAS_API int evas_object_image_animated_frame_get(Evas_Object *obj);
/**
* @brief Get the total number of frames of the image object.
@@ -4953,7 +5184,7 @@ EAPI void evas_object_image_animated_frame_set(Evas_Object *obj, int frame_index
*
* @since 1.1
*/
-EAPI int evas_object_image_animated_frame_count_get(const Evas_Object *obj);
+EVAS_API int evas_object_image_animated_frame_count_get(const Evas_Object *obj);
/**
* @brief Get the kind of looping the image object does.
@@ -4973,11 +5204,12 @@ EAPI int evas_object_image_animated_frame_count_get(const Evas_Object *obj);
* @ref evas_object_image_animated_loop_count_get,
* @ref evas_object_image_animated_frame_duration_get.
*
+ * @param[in] obj The object
* @return Loop type of the image object.
*
* @since 1.1
*/
-EAPI Evas_Image_Animated_Loop_Hint evas_object_image_animated_loop_type_get(const Evas_Object *obj);
+EVAS_API Evas_Image_Animated_Loop_Hint evas_object_image_animated_loop_type_get(const Evas_Object *obj);
/**
* @brief Get the number times the animation of the object loops.
@@ -4994,11 +5226,12 @@ EAPI Evas_Image_Animated_Loop_Hint evas_object_image_animated_loop_type_get(cons
* @ref evas_object_image_animated_loop_type_get,
* @ref evas_object_image_animated_frame_duration_get.
*
+ * @param[in] obj The object
* @return The number of loop of an animated image object.
*
* @since 1.1
*/
-EAPI int evas_object_image_animated_loop_count_get(const Evas_Object *obj);
+EVAS_API int evas_object_image_animated_loop_count_get(const Evas_Object *obj);
/**
* @brief Get the duration of a sequence of frames.
@@ -5015,11 +5248,12 @@ EAPI int evas_object_image_animated_loop_count_get(const Evas_Object *obj);
* @ref evas_object_image_animated_loop_type_get,
* @ref evas_object_image_animated_loop_count_get,
*
+ * @param[in] obj The object
* @param[in] frame_num Number of frames in the sequence.
*
* @since 1.1
*/
-EAPI double evas_object_image_animated_frame_duration_get(const Evas_Object *obj, int start_frame, int frame_num);
+EVAS_API double evas_object_image_animated_frame_duration_get(const Evas_Object *obj, int start_frame, int frame_num);
/**
* @brief Set the DPI resolution of an image object's source image.
@@ -5027,18 +5261,20 @@ EAPI double evas_object_image_animated_frame_duration_get(const Evas_Object *obj
* This function sets the DPI resolution of a given loaded canvas image. Most
* useful for the SVG image loader.
*
+ * @param[in] obj The object
* @param[in] dpi The DPI resolution.
*/
-EAPI void evas_object_image_load_dpi_set(Evas_Object *obj, double dpi);
+EVAS_API void evas_object_image_load_dpi_set(Evas_Object *obj, double dpi);
/**
* @brief Get the DPI resolution of a loaded image object in the canvas.
*
* This function returns the DPI resolution of the given canvas image.
*
+ * @param[in] obj The object
* @return The DPI resolution.
*/
-EAPI double evas_object_image_load_dpi_get(const Evas_Object *obj);
+EVAS_API double evas_object_image_load_dpi_get(const Evas_Object *obj);
/**
*
@@ -5053,10 +5289,11 @@ EAPI double evas_object_image_load_dpi_get(const Evas_Object *obj);
*
* @see evas_object_image_load_size_get()
*
+ * @param[in] obj The object
* @param[in] w The new width of the image's load size.
* @param[in] h The new height of the image's load size.
*/
-EAPI void evas_object_image_load_size_set(Eo *obj, int w, int h);
+EVAS_API void evas_object_image_load_size_set(Eo *obj, int w, int h);
/**
*
@@ -5072,10 +5309,11 @@ EAPI void evas_object_image_load_size_set(Eo *obj, int w, int h);
*
* @see evas_object_image_load_size_set() for more details
*
+ * @param[in] obj The object
* @param[out] w The new width of the image's load size.
* @param[out] h The new height of the image's load size.
*/
-EAPI void evas_object_image_load_size_get(const Eo *obj, int *w, int *h);
+EVAS_API void evas_object_image_load_size_get(const Eo *obj, int *w, int *h);
/**
* @brief Inform a given image object to load a selective region of its source
@@ -5087,12 +5325,13 @@ EAPI void evas_object_image_load_size_get(const Eo *obj, int *w, int *h);
* @note The image loader for the image format in question has to support
* selective region loading in order to this function to take effect.
*
+ * @param[in] obj The object
* @param[in] x X-offset of the region to be loaded.
* @param[in] y Y-offset of the region to be loaded.
* @param[in] w Width of the region to be loaded.
* @param[in] h Height of the region to be loaded.
*/
-EAPI void evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h);
+EVAS_API void evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h);
/**
* @brief Retrieve the coordinates of a given image object's selective (source
@@ -5101,44 +5340,48 @@ EAPI void evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int
* @note Use @c null pointers on the coordinates you're not interested in:
* they'll be ignored by the function.
*
+ * @param[in] obj The object
* @param[out] x X-offset of the region to be loaded.
* @param[out] y Y-offset of the region to be loaded.
* @param[out] w Width of the region to be loaded.
* @param[out] h Height of the region to be loaded.
*/
-EAPI void evas_object_image_load_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h);
+EVAS_API void evas_object_image_load_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h);
/**
* @brief Get the support state of a given image.
*
+ * @param[in] obj The object
* @return The region support state.
*
* @since 1.2
*
* @ingroup Evas_Image
*/
-EAPI Eina_Bool evas_object_image_region_support_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_object_image_region_support_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Define if the orientation information in the image file should be
* honored.
*
+ * @param[in] obj The object
* @param[in] enable @c true means that it should honor the orientation
* information.
*
* @since 1.1
*/
-EAPI void evas_object_image_load_orientation_set(Evas_Object *obj, Eina_Bool enable);
+EVAS_API void evas_object_image_load_orientation_set(Evas_Object *obj, Eina_Bool enable);
/**
* @brief Get if the orientation information in the image file should be
* honored.
*
+ * @param[in] obj The object
* @return @c true means that it should honor the orientation information.
*
* @since 1.1
*/
-EAPI Eina_Bool evas_object_image_load_orientation_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_load_orientation_get(const Evas_Object *obj);
/**
* @brief Set the scale down factor of a given image object's source image,
@@ -5147,21 +5390,23 @@ EAPI Eina_Bool evas_object_image_load_orientation_get(const Evas_Object *obj);
* This function sets the scale down factor of a given canvas image. Most
* useful for the SVG image loader.
*
+ * @param[in] obj The object
* @param[in] scale_down The scale down factor.
*/
-EAPI void evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down);
+EVAS_API void evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down);
/**
* @brief Get the scale down factor of a given image object's source image,
* when loading it.
*
+ * @param[in] obj The object
* @return The scale down factor.
*/
-EAPI int evas_object_image_load_scale_down_get(const Evas_Object *obj);
+EVAS_API int evas_object_image_load_scale_down_get(const Evas_Object *obj);
/**
* @brief Set a load option to skip initial header load and defer to preload
- *
+ *
* This is meant to be used in conjunction with evas_object_image_file_set()
* and evas_object_image_preload() by deferring any header loading until
* a evas_object_image_preload() is issued making the file file set simply
@@ -5169,30 +5414,33 @@ EAPI int evas_object_image_load_scale_down_get(const Evas_Object *obj);
* file existence or even inspecting the image header to get size or alpha
* channel flags etc. All of this will then be done as part of the preload
* stage.
- *
+ * @param[in] obj The object
+ *
* @since 1.19
*/
-EAPI void evas_object_image_load_head_skip_set(Evas_Object *obj, Eina_Bool skip);
+EVAS_API void evas_object_image_load_head_skip_set(Evas_Object *obj, Eina_Bool skip);
/**
* @brief Get the load option to skip header loads before preload
- *
- * This gets the heade skip value set by evas_object_image_load_head_skip_set()
- *
+ *
+ * This gets the head skip value set by evas_object_image_load_head_skip_set()
+ * @param[in] obj The object
+ *
* @see evas_object_image_load_head_skip_set
* @since 1.19
*/
-EAPI Eina_Bool evas_object_image_load_head_skip_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_load_head_skip_get(const Evas_Object *obj);
/**
* @brief Retrieves a number representing any error that occurred during the
* last loading of the given image object's source image.
*
+ * @param[in] obj The object
* @return A value giving the last error that occurred. It should be one of the
* @ref Evas_Load_Error values. #EVAS_LOAD_ERROR_NONE is returned if there was
* no error.
*/
-EAPI Evas_Load_Error evas_object_image_load_error_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Evas_Load_Error evas_object_image_load_error_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
*
@@ -5209,9 +5457,10 @@ EAPI Evas_Load_Error evas_object_image_load_error_get(const Evas_Object *obj) EI
*
* @see evas_object_image_smooth_scale_get()
*
+ * @param[in] obj The object
* @param[in] smooth_scale Whether to use smooth scale or not.
*/
-EAPI void evas_object_image_smooth_scale_set(Eo *obj, Eina_Bool smooth_scale);
+EVAS_API void evas_object_image_smooth_scale_set(Eo *obj, Eina_Bool smooth_scale);
/**
*
@@ -5223,7 +5472,7 @@ EAPI void evas_object_image_smooth_scale_set(Eo *obj, Eina_Bool smooth_scale);
* See @ref evas_object_image_smooth_scale_set() for more details.
*
*/
-EAPI Eina_Bool evas_object_image_smooth_scale_get(const Eo *obj);
+EVAS_API Eina_Bool evas_object_image_smooth_scale_get(const Eo *obj);
/* not implemented! removed from the interface, kept as legacy only */
typedef enum _Efl_Gfx_Fill_Spread {
@@ -5250,19 +5499,21 @@ typedef Efl_Gfx_Fill_Spread Evas_Fill_Spread;
* Sets the tiling mode for the given evas image object's fill.
* EVAS_TEXTURE_RESTRICT, or EVAS_TEXTURE_PAD.
*
+ * @param[in] obj The object
* @param[in] spread One of EVAS_TEXTURE_REFLECT, EVAS_TEXTURE_REPEAT,
*/
-EAPI void evas_object_image_fill_spread_set(Evas_Object *obj, Evas_Fill_Spread spread) EINA_DEPRECATED;
+EVAS_API void evas_object_image_fill_spread_set(Evas_Object *obj, Evas_Fill_Spread spread) EINA_DEPRECATED;
/**
*
* Retrieves the spread (tiling mode) for the given image object's
* fill.
*
+ * @param[in] obj The object
* @return The current spread mode of the image object.
*
*/
-EAPI Evas_Fill_Spread evas_object_image_fill_spread_get(const Evas_Object *obj) EINA_DEPRECATED;
+EVAS_API Evas_Fill_Spread evas_object_image_fill_spread_get(const Evas_Object *obj) EINA_DEPRECATED;
/**
*
@@ -5294,6 +5545,7 @@ EAPI Evas_Fill_Spread evas_object_image_fill_spread_get(const Evas_Object *obj)
* will @b override the values set here automatically, for you, in a
* given way.
*
+ * @param[in] obj The object
* @param[in] x The x coordinate (from the top left corner of the bound
image) to start drawing from.
* @param[in] y The y coordinate (from the top left corner of the bound
@@ -5301,7 +5553,7 @@ image) to start drawing from.
* @param[in] w The width the bound image will be displayed at.
* @param[in] h The height the bound image will be displayed at.
*/
-EAPI void evas_object_image_fill_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_object_image_fill_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
/**
*
@@ -5313,6 +5565,7 @@ EAPI void evas_object_image_fill_set(Evas_Object *obj, Evas_Coord x, Evas_Coord
*
* See @ref evas_object_image_fill_set() for more details.
*
+ * @param[in] obj The object
* @param[out] x The x coordinate (from the top left corner of the bound
image) to start drawing from.
* @param[out] y The y coordinate (from the top left corner of the bound
@@ -5320,7 +5573,7 @@ image) to start drawing from.
* @param[out] w The width the bound image will be displayed at.
* @param[out] h The height the bound image will be displayed at.
*/
-EAPI void evas_object_image_fill_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
+EVAS_API void evas_object_image_fill_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Set whether the image object's fill property should track the
@@ -5331,22 +5584,24 @@ EAPI void evas_object_image_fill_get(const Evas_Object *obj, Evas_Coord *x, Evas
* that new size (and 0, 0 as source image's origin), so the bound image will
* fill the whole object's area.
*
+ * @param[in] obj The object
* @param[in] filled @c true to make the fill property follow object size or
* @c false otherwise.
*/
-EAPI void evas_object_image_filled_set(Evas_Object *obj, Eina_Bool filled);
+EVAS_API void evas_object_image_filled_set(Evas_Object *obj, Eina_Bool filled);
/**
* @brief Retrieve whether the image object's fill property should track the
* object's size.
*
* Returns @c true if it is tracking, @c false if not (and @ref
- * evas_object_fill_set must be called manually).
+ * evas_object_image_fill_set must be called manually).
*
+ * @param[in] obj The object
* @return @c true to make the fill property follow object size or @c false
* otherwise.
*/
-EAPI Eina_Bool evas_object_image_filled_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_filled_get(const Evas_Object *obj);
/**
* @brief Retrieve whether alpha channel data is being used on the given image
@@ -5355,11 +5610,12 @@ EAPI Eina_Bool evas_object_image_filled_get(const Evas_Object *obj);
* This function returns @c true if the image object's alpha channel is being
* used, or @c false otherwise.
*
+ * @param[in] obj The object
* @return Whether to use alpha channel ($true) data or not ($false).
*
* @ingroup Evas_Image
*/
-EAPI Eina_Bool evas_object_image_alpha_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_alpha_get(const Evas_Object *obj);
/**
* @brief Enable or disable alpha channel usage on the given image object.
@@ -5369,9 +5625,10 @@ EAPI Eina_Bool evas_object_image_alpha_get(const Evas_Object *obj);
* and @c false makes it ignore that data. Note that this has nothing to do
* with an object's color as manipulated by @ref evas_object_color_set.
*
+ * @param[in] obj The object
* @param[in] alpha Whether to use alpha channel ($true) data or not ($false).
*/
-EAPI void evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool alpha);
+EVAS_API void evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool alpha);
/**
* @brief Dimensions of this image's border, a region that does not scale with
@@ -5393,12 +5650,13 @@ EAPI void evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool alpha);
*
* @note Similar to the concepts of 9-patch images or cap insets.
*
+ * @param[in] obj The object
* @param[in] l The border's left width.
* @param[in] r The border's right width.
* @param[in] t The border's top height.
* @param[in] b The border's bottom height.
*/
-EAPI void evas_object_image_border_set(Evas_Object *obj, int l, int r, int t, int b);
+EVAS_API void evas_object_image_border_set(Evas_Object *obj, int l, int r, int t, int b);
/**
* @brief Dimensions of this image's border, a region that does not scale with
@@ -5420,12 +5678,13 @@ EAPI void evas_object_image_border_set(Evas_Object *obj, int l, int r, int t, in
*
* @note Similar to the concepts of 9-patch images or cap insets.
*
+ * @param[in] obj The object
* @param[out] l The border's left width.
* @param[out] r The border's right width.
* @param[out] t The border's top height.
* @param[out] b The border's bottom height.
*/
-EAPI void evas_object_image_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b);
+EVAS_API void evas_object_image_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b);
/**
* @brief Scaling factor applied to the image borders.
@@ -5435,9 +5694,10 @@ EAPI void evas_object_image_border_get(const Evas_Object *obj, int *l, int *r, i
*
* Default value is 1.0 (no scaling).
*
+ * @param[in] obj The object
* @param[in] scale The scale factor.
*/
-EAPI void evas_object_image_border_scale_set(Evas_Object *obj, double scale);
+EVAS_API void evas_object_image_border_scale_set(Evas_Object *obj, double scale);
/**
* @brief Scaling factor applied to the image borders.
@@ -5447,9 +5707,10 @@ EAPI void evas_object_image_border_scale_set(Evas_Object *obj, double scale);
*
* Default value is 1.0 (no scaling).
*
+ * @param[in] obj The object
* @return The scale factor.
*/
-EAPI double evas_object_image_border_scale_get(const Evas_Object *obj);
+EVAS_API double evas_object_image_border_scale_get(const Evas_Object *obj);
/**
* How an image's center region (the complement to the border region) should
@@ -5474,15 +5735,13 @@ typedef enum
* to be drawn, which must be one of the values in @ref Evas_Border_Fill_Mode.
* By center we mean the complementary part of that defined by
* @ref evas_object_image_border_set. This one is very useful for making frames
- * and decorations. You would most probably also be using a filled image (as in
- * @ref Efl.Gfx.Fill.fill_auto) to use as a frame.
- *
- * The default value is
+ * and decorations.
*
+ * @param[in] obj The object
* @param[in] fill Fill mode of the center region of @c obj (a value in
* #Evas_Border_Fill_Mode).
*/
-EAPI void evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border_Fill_Mode fill);
+EVAS_API void evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border_Fill_Mode fill);
/**
* @brief Specifies how the center part of the object (not the borders) should
@@ -5492,21 +5751,22 @@ EAPI void evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border
* to be drawn, which must be one of the values in @ref Evas_Border_Fill_Mode.
* By center we mean the complementary part of that defined by
* @ref evas_object_image_border_set. This one is very useful for making frames
- * and decorations. You would most probably also be using a filled image (as in
- * @ref Efl.Gfx.Fill.fill_auto) to use as a frame.
+ * and decorations.
*
* The default value is
*
+ * @param[in] obj The object
* @return Fill mode of the center region of @c obj (a value in
* #Evas_Border_Fill_Mode).
*/
-EAPI Evas_Border_Fill_Mode evas_object_image_border_center_fill_get(const Evas_Object *obj);
+EVAS_API Evas_Border_Fill_Mode evas_object_image_border_center_fill_get(const Evas_Object *obj);
/**
* @brief Set the image orientation.
*
* This function allows to rotate or flip the image.
*
+ * @param[in] obj The object
* @param[in] orient The image orientation @ref Evas_Image_Orient. Default is
* #EVAS_IMAGE_ORIENT_NONE.
*
@@ -5514,11 +5774,12 @@ EAPI Evas_Border_Fill_Mode evas_object_image_border_center_fill_get(const Evas_O
*
* @ingroup Evas_Image
*/
-EAPI void evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient);
+EVAS_API void evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient);
/**
* @brief Get the image orientation.
*
+ * @param[in] obj The object
* @return The image orientation @ref Evas_Image_Orient. Default is
* #EVAS_IMAGE_ORIENT_NONE.
*
@@ -5526,7 +5787,7 @@ EAPI void evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orien
*
* @ingroup Evas_Image
*/
-EAPI Evas_Image_Orient evas_object_image_orient_get(const Evas_Object *obj);
+EVAS_API Evas_Image_Orient evas_object_image_orient_get(const Evas_Object *obj);
/**
* @brief Set the content hint setting of a given image object of the canvas.
@@ -5537,20 +5798,22 @@ EAPI Evas_Image_Orient evas_object_image_orient_get(const Evas_Object *obj);
* it need zero copies at texture upload time, which is an "expensive"
* operation.
*
+ * @param[in] obj The object
* @param[in] hint The content hint value, one of the
* @ref Evas_Image_Content_Hint ones.
*/
-EAPI void evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hint);
+EVAS_API void evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hint);
/**
* @brief Get the content hint setting of a given image object of the canvas.
*
* This returns #EVAS_IMAGE_CONTENT_HINT_NONE on error.
*
+ * @param[in] obj The object
* @return The content hint value, one of the @ref Evas_Image_Content_Hint
* ones.
*/
-EAPI Evas_Image_Content_Hint evas_object_image_content_hint_get(const Evas_Object *obj);
+EVAS_API Evas_Image_Content_Hint evas_object_image_content_hint_get(const Evas_Object *obj);
/**
* @brief Set the scale hint of a given image of the canvas.
@@ -5559,11 +5822,12 @@ EAPI Evas_Image_Content_Hint evas_object_image_content_hint_get(const Evas_Objec
* canvas, which will affect how Evas is to cache scaled versions of its
* original source image.
*
+ * @param[in] obj The object
* @param[in] hint The scale hint, a value in @ref Evas_Image_Scale_Hint.
*
* @ingroup Evas_Image
*/
-EAPI void evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint);
+EVAS_API void evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint);
/**
* @brief Get the scale hint of a given image of the canvas.
@@ -5571,11 +5835,12 @@ EAPI void evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hi
* This function returns the scale hint value of the given image object of the
* canvas.
*
+ * @param[in] obj The object
* @return The scale hint, a value in @ref Evas_Image_Scale_Hint.
*
* @ingroup Evas_Image
*/
-EAPI Evas_Image_Scale_Hint evas_object_image_scale_hint_get(const Evas_Object *obj);
+EVAS_API Evas_Image_Scale_Hint evas_object_image_scale_hint_get(const Evas_Object *obj);
/**
*
@@ -5587,10 +5852,11 @@ EAPI Evas_Image_Scale_Hint evas_object_image_scale_hint_get(const Evas_Object *o
* larger, then the image will be treated as if it were in the upper
* left hand corner of a larger image that is otherwise transparent.
*
+ * @param[in] obj The object
* @param[in] w The new width of the image.
* @param[in] h The new height of the image.
*/
-EAPI void evas_object_image_size_set(Evas_Object *obj, int w, int h);
+EVAS_API void evas_object_image_size_set(Evas_Object *obj, int w, int h);
/**
*
@@ -5598,32 +5864,35 @@ EAPI void evas_object_image_size_set(Evas_Object *obj, int w, int h);
*
* See @ref evas_object_image_size_set() for more details.
*
+ * @param[in] obj The object
* @param[out] w The new width of the image.
* @param[out] h The new height of the image.
*/
-EAPI void evas_object_image_size_get(const Evas_Object *obj, int *w, int *h);
+EVAS_API void evas_object_image_size_get(const Evas_Object *obj, int *w, int *h);
/**
* @brief Set the colorspace of a given image of the canvas.
*
* This function sets the colorspace of given canvas image.
*
+ * @param[in] obj The object
* @param[in] cspace The new color space.
*
* @ingroup Evas_Image
*/
-EAPI void evas_object_image_colorspace_set(Evas_Object *obj, Evas_Colorspace cspace);
+EVAS_API void evas_object_image_colorspace_set(Evas_Object *obj, Evas_Colorspace cspace);
/**
* @brief Get the colorspace of a given image of the canvas.
*
* This function returns the colorspace of given canvas image.
*
+ * @param[in] obj The object
* @return The new color space.
*
* @ingroup Evas_Image
*/
-EAPI Evas_Colorspace evas_object_image_colorspace_get(const Evas_Object *obj);
+EVAS_API Evas_Colorspace evas_object_image_colorspace_get(const Evas_Object *obj);
/**
* @brief Retrieves the row stride of the given image object.
@@ -5631,17 +5900,18 @@ EAPI Evas_Colorspace evas_object_image_colorspace_get(const Evas_Object *obj);
* The row stride is the number of bytes between the start of a row and the
* start of the next row for image data.
*
+ * @param[in] obj The object
* @return The stride of the image (in bytes).
*
* @ingroup Evas_Image
*/
-EAPI int evas_object_image_stride_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API int evas_object_image_stride_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Replaces the raw image data of the given image object.
*
* This function lets the application replace an image object's internal pixel
- * buffer with an user-allocated one. For best results, you should generally
+ * buffer with a user-allocated one. For best results, you should generally
* first call @ref evas_object_image_size_set with the width and height for the
* new buffer.
*
@@ -5654,27 +5924,29 @@ EAPI int evas_object_image_stride_get(const Evas_Object *obj) EINA_WARN_UNUSED_R
* with it, as user-set image data will not be automatically freed when the
* image object is deleted.
*
+ * @param[in] obj The object
* @param[in] data The raw data to replace.
*
* @ingroup Evas_Image
*/
-EAPI void evas_object_image_data_copy_set(Evas_Object *obj, void *data);
+EVAS_API void evas_object_image_data_copy_set(Evas_Object *obj, void *data);
/**
* @brief Sets the raw image data of the given image object.
*
* Note that the raw data must be of the same size (see @ref
* evas_object_image_size_set, which has to be called before this one) and
- * colorspace (see @Evas.Image.colorspace.set) of the image. If data is
+ * colorspace (see @ref evas_object_image_colorspace_set) of the image. If data is
* @c null, the current image data will be freed. Naturally, if one does not
* set an image object's data manually, it will still have one, allocated by
* Evas.
*
+ * @param[in] obj The object
* @param[in] data The raw data, or @c null.
*
* @ingroup Evas_Image
*/
-EAPI void evas_object_image_data_set(Evas_Object *obj, void *data);
+EVAS_API void evas_object_image_data_set(Evas_Object *obj, void *data);
/**
* @brief Get a pointer to the raw image data of the given image object.
@@ -5693,9 +5965,10 @@ EAPI void evas_object_image_data_set(Evas_Object *obj, void *data);
* @note The contents' format returned by it depend on the color space of the
* given image object.
*
- * @note You may want to use @Evas.Image.data_update_add to inform data
+ * @note You may want to use @ref evas_object_image_data_update_add to inform data
* changes, if you did any.
*
+ * @param[in] obj The object
* @param[in] for_writing Whether the data being retrieved will be modified
* ($true) or not ($false).
*
@@ -5703,7 +5976,7 @@ EAPI void evas_object_image_data_set(Evas_Object *obj, void *data);
*
* @ingroup Evas_Image
*/
-EAPI void *evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing) EINA_WARN_UNUSED_RESULT;
+EVAS_API void *evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing) EINA_WARN_UNUSED_RESULT;
/**
* @brief Mark a sub-region of the given image object to be redrawn.
@@ -5711,33 +5984,36 @@ EAPI void *evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writ
* This function schedules a particular rectangular region of an image object
* to be updated (redrawn) at the next rendering cycle.
*
+ * @param[in] obj The object
* @param[in] y Y-offset of the region to be updated.
* @param[in] w Width of the region to be updated.
* @param[in] h Height of the region to be updated.
*/
-EAPI void evas_object_image_data_update_add(Evas_Object *obj, int x, int y, int w, int h);
+EVAS_API void evas_object_image_data_update_add(Evas_Object *obj, int x, int y, int w, int h);
/**
* @brief The content below the Evas_Object_Image will be rendered inside it
* and you can reuse it as a source for any kind of effect.
*
- * @param[in] s Wether to put the content of the canvas below inside the
+ * @param[in] obj The object
+ * @param[in] s Whether to put the content of the canvas below inside the
* Evas_Object_Image.
*
* @since 1.15
*/
-EAPI void evas_object_image_snapshot_set(Evas_Object *obj, Eina_Bool s);
+EVAS_API void evas_object_image_snapshot_set(Evas_Object *obj, Eina_Bool s);
/**
- * @brief Determine wether the Evas_Object_Image replicate the content of the
+ * @brief Determine whether the Evas_Object_Image replicate the content of the
* canvas below.
*
+ * @param[in] obj The object
* @return Wether to put the content of the canvas below inside the
* Evas_Object_Image.
*
* @since 1.15
*/
-EAPI Eina_Bool evas_object_image_snapshot_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_snapshot_get(const Evas_Object *obj);
/**
* @brief Set the source object on an image object to used as a proxy.
@@ -5755,36 +6031,40 @@ EAPI Eina_Bool evas_object_image_snapshot_get(const Evas_Object *obj);
*
* @warning You cannot set a proxy as another proxy's source.
*
+ * @param[in] obj The object
* @param[in] src Source object to use for the proxy.
*/
-EAPI Eina_Bool evas_object_image_source_set(Evas_Object *obj, Evas_Object *src);
+EVAS_API Eina_Bool evas_object_image_source_set(Evas_Object *obj, Evas_Object *src);
/**
* @brief Get the current source object of an image object.
*
+ * @param[in] obj The object
* @return Source object to use for the proxy.
*/
-EAPI Evas_Object *evas_object_image_source_get(const Evas_Object *obj);
+EVAS_API Evas_Object *evas_object_image_source_get(const Evas_Object *obj);
/**
* @brief Clip the proxy object with the source object's clipper.
*
+ * @param[in] obj The object
* @param[in] source_clip Whether @c obj is clipped by the source clipper
* ($true) or not ($false).
*
* @since 1.8
*/
-EAPI void evas_object_image_source_clip_set(Evas_Object *obj, Eina_Bool source_clip);
+EVAS_API void evas_object_image_source_clip_set(Evas_Object *obj, Eina_Bool source_clip);
/**
* @brief Determine whether an object is clipped by source object's clipper.
*
+ * @param[in] obj The object
* @return Whether @c obj is clipped by the source clipper ($true) or not
* ($false).
*
* @since 1.8
*/
-EAPI Eina_Bool evas_object_image_source_clip_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_source_clip_get(const Evas_Object *obj);
/**
* @brief Set whether an Evas object is to source events.
@@ -5799,20 +6079,22 @@ EAPI Eina_Bool evas_object_image_source_clip_get(const Evas_Object *obj);
* If @c repeat is @c false, events occurring on @c obj will be processed only
* on it.
*
- * @param[in] source Whether @c obj is to pass events ($true) or not ($false).
+ * @param[in] obj The object
+ * @param[in] repeat Whether @c obj is to pass events ($true) or not ($false).
*
* @since 1.8
*/
-EAPI void evas_object_image_source_events_set(Evas_Object *obj, Eina_Bool repeat);
+EVAS_API void evas_object_image_source_events_set(Evas_Object *obj, Eina_Bool repeat);
/**
* @brief Determine whether an object is set to source events.
*
+ * @param[in] obj The object
* @return Whether @c obj is to pass events ($true) or not ($false).
*
* @since 1.8
*/
-EAPI Eina_Bool evas_object_image_source_events_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_source_events_get(const Evas_Object *obj);
/**
* @brief Set the source object to be visible or not.
@@ -5831,24 +6113,26 @@ EAPI Eina_Bool evas_object_image_source_events_get(const Evas_Object *obj);
* @warning If the all of proxies are deleted, then the source visibility of
* the source object will be cancelled.
*
+ * @param[in] obj The object
* @param[in] visible @c true is source object to be shown, @c false otherwise.
*
* @deprecated Please use evas_object_norender_get() on the source instead.
*
* @since 1.8
*/
-EAPI void evas_object_image_source_visible_set(Evas_Object *obj, Eina_Bool visible);
+EVAS_API void evas_object_image_source_visible_set(Evas_Object *obj, Eina_Bool visible);
/**
* @brief Get the state of the source object visibility.
*
+ * @param[in] obj The object
* @return @c true is source object to be shown, @c false otherwise.
*
* @deprecated Please use evas_object_norender_get() on the source instead.
*
* @since 1.8
*/
-EAPI Eina_Bool evas_object_image_source_visible_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_source_visible_get(const Evas_Object *obj);
/**
* @brief Mark whether the given image object is dirty and needs to request its
@@ -5858,17 +6142,19 @@ EAPI Eina_Bool evas_object_image_source_visible_get(const Evas_Object *obj);
*
* @warning Use this function if you really know what you are doing.
*
+ * @param[in] obj The object
* @param[in] dirty Whether the image is dirty.
*/
-EAPI void evas_object_image_pixels_dirty_set(Evas_Object *obj, Eina_Bool dirty);
+EVAS_API void evas_object_image_pixels_dirty_set(Evas_Object *obj, Eina_Bool dirty);
/**
* @brief Retrieves whether the given image object is dirty (needs to be
* redrawn).
*
+ * @param[in] obj The object
* @return Whether the image is dirty.
*/
-EAPI Eina_Bool evas_object_image_pixels_dirty_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_image_pixels_dirty_get(const Evas_Object *obj);
/**
* @brief Set the callback function to get pixels from a canvas' image.
@@ -5876,10 +6162,11 @@ EAPI Eina_Bool evas_object_image_pixels_dirty_get(const Evas_Object *obj);
* This functions sets a function to be the callback function that get pixels
* from a image of the canvas.
*
+ * @param[in] obj The object
* @param[in] func The callback function.
* @param[in] data The data pointer to be passed to @c func.
*/
-EAPI void evas_object_image_pixels_get_callback_set(Evas_Object *obj, Evas_Object_Image_Pixels_Get_Cb func, void *data) EINA_ARG_NONNULL(2);
+EVAS_API void evas_object_image_pixels_get_callback_set(Evas_Object *obj, Evas_Object_Image_Pixels_Get_Cb func, void *data) EINA_ARG_NONNULL(2);
/**
@@ -5935,31 +6222,36 @@ typedef enum _Evas_Video_Surface_Caps
/**
* @brief Set the video surface linked to a given image of the canvas.
*
+ * @param[in] obj The object
* @param[in] surf The new video surface.
*
* @since 1.1
*/
-EAPI void evas_object_image_video_surface_set(Evas_Object *obj, Evas_Video_Surface *surf);
+EVAS_API void evas_object_image_video_surface_set(Evas_Object *obj, Evas_Video_Surface *surf);
/**
- * @brief Get the video surface linekd to a given image of the canvas.
+ * @brief Get the video surface linked to a given image of the canvas.
*
+ * @param[in] obj The object
* @return The new video surface.
*
* @since 1.1
*/
-EAPI const Evas_Video_Surface *evas_object_image_video_surface_get(const Evas_Object *obj);
+EVAS_API const Evas_Video_Surface *evas_object_image_video_surface_get(const Evas_Object *obj);
/**
* @brief Set the video surface capabilities to a given image of the canvas.
*
- * @param[in] caps
+ * @param[in] obj The object
+ * @param[in] caps Surface capabilities
*/
-EAPI void evas_object_image_video_surface_caps_set(Evas_Object *obj, unsigned int caps);
+EVAS_API void evas_object_image_video_surface_caps_set(Evas_Object *obj, unsigned int caps);
/** Get the video surface capabilities to a given image of the canvas.
+ * @param[in] obj The object
+ * @return Surface capabilities
*/
-EAPI unsigned int evas_object_image_video_surface_caps_get(const Evas_Object *obj);
+EVAS_API unsigned int evas_object_image_video_surface_caps_get(const Evas_Object *obj);
/*
@@ -5976,20 +6268,22 @@ EAPI unsigned int evas_object_image_video_surface_caps_get(const Evas_Object *ob
*
* @return data A newly allocated data in the format specified by to_cspace.
*
+ * @param[in] obj The object
* @param[in] to_cspace The colorspace to which the image raw data will be converted.
*/
/** @deprecated evas_object_image_data_convert */
-EAPI void *evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace) EINA_WARN_UNUSED_RESULT EINA_DEPRECATED;
+EVAS_API void *evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace) EINA_WARN_UNUSED_RESULT EINA_DEPRECATED;
/*
* Import pixels from given source to a given canvas image object.
*
* This function imports pixels from a given source to a given canvas image.
*
+ * @param[in] obj The object
* @param[in] pixels The pixel's source to be imported.
*/
/** @deprecated evas_object_image_pixels_import */
-EAPI Eina_Bool evas_object_image_pixels_import(Evas_Object *obj, Evas_Pixel_Import_Source *pixels) EINA_ARG_NONNULL(2) EINA_DEPRECATED;
+EVAS_API Eina_Bool evas_object_image_pixels_import(Evas_Object *obj, Evas_Pixel_Import_Source *pixels) EINA_ARG_NONNULL(2) EINA_DEPRECATED;
/*
* Reload an image object's image data.
@@ -5997,14 +6291,14 @@ EAPI Eina_Bool evas_object_image_pixels_import(Evas_Object *obj, Evas_Pixel_Impo
* This function reloads the image data bound to image object @p obj.
*/
/** @deprecated evas_object_image_reload */
-EAPI void evas_object_image_reload(Evas_Object *obj) EINA_DEPRECATED;
+EVAS_API void evas_object_image_reload(Evas_Object *obj) EINA_DEPRECATED;
/**
* @deprecated This function has never been implemented. Please use
* evas_object_clip_set() with an alpha or RGBA image instead
* of setting this flag.
*/
-EAPI void evas_object_image_alpha_mask_set(Evas_Object *obj, Eina_Bool ismask) EINA_ARG_NONNULL(1) EINA_DEPRECATED;
+EVAS_API void evas_object_image_alpha_mask_set(Evas_Object *obj, Eina_Bool ismask) EINA_ARG_NONNULL(1) EINA_DEPRECATED;
#include "canvas/evas_image_eo.legacy.h"
@@ -6013,7 +6307,7 @@ EAPI void evas_object_image_alpha_mask_set(Evas_Object *obj, Eina_Bool ismask) E
*/
/**
- * @ingroup Evas_Object_Text
+ * @addtogroup Evas_Object_Text_Group
*
* @{
*/
@@ -6026,13 +6320,13 @@ EAPI void evas_object_image_alpha_mask_set(Evas_Object *obj, Eina_Bool ismask) E
* success.
*
* Text objects are for simple, single line text elements. If you want
- * more elaborated text blocks, see @ref Evas_Object_Textblock.
+ * more elaborated text blocks, see @ref Evas_Object_Textblock_Group.
*
* @see evas_object_text_font_source_set()
* @see evas_object_text_font_set()
* @see evas_object_text_text_set()
*/
-EAPI Evas_Object *evas_object_text_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_text_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
*
@@ -6042,7 +6336,7 @@ EAPI Evas_Object *evas_object_text_add(Evas *e) EINA_WARN_UNUSED_RESULT
*
* @param[in] text Text string to display on it.
*/
-EAPI void evas_object_text_text_set(Eo *obj, const char *text);
+EVAS_API void evas_object_text_text_set(Eo *obj, const char *text);
/**
*
@@ -6056,7 +6350,7 @@ EAPI void evas_object_text_text_set(Eo *obj, const char *text);
* @see evas_object_text_text_set()
*
*/
-EAPI const char *evas_object_text_text_get(const Eo *obj);
+EVAS_API const char *evas_object_text_text_get(const Eo *obj);
/**
* Types of styles to be applied on text objects. The
@@ -6104,7 +6398,7 @@ typedef enum
*
* @param[in] font_source The font file's path.
*/
-EAPI void evas_object_text_font_source_set(Eo *obj, const char *font_source);
+EVAS_API void evas_object_text_font_source_set(Eo *obj, const char *font_source);
/**
*
@@ -6116,7 +6410,7 @@ EAPI void evas_object_text_font_source_set(Eo *obj, const char *font_source);
* @see evas_object_text_font_get() for more details
*
*/
-EAPI const char *evas_object_text_font_source_get(const Eo *obj);
+EVAS_API const char *evas_object_text_font_source_get(const Eo *obj);
/**
*
@@ -6134,7 +6428,7 @@ EAPI const char *evas_object_text_font_source_get(const Eo *obj);
* @param[in] font The font family name or filename.
* @param[in] size The font size, in points.
*/
-EAPI void evas_object_text_font_set(Eo *obj, const char *font, Evas_Font_Size size);
+EVAS_API void evas_object_text_font_set(Eo *obj, const char *font, Evas_Font_Size size);
/**
*
@@ -6150,7 +6444,7 @@ EAPI void evas_object_text_font_set(Eo *obj, const char *font, Evas_Font_Size si
* @param[out] font The font family name or filename.
* @param[out] size The font size, in points.
*/
-EAPI void evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_Size *size);
+EVAS_API void evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_Size *size);
/**
@@ -6160,7 +6454,7 @@ EAPI void evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_
#include "canvas/evas_textblock_legacy.h"
/**
- * @ingroup Evas_Object_Grid
+ * @ingroup Evas_Object_Grid_Group
*
* @{
*/
@@ -6174,7 +6468,7 @@ EAPI void evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_
*
* @since 1.7
*/
-EAPI Evas_Object *evas_object_textgrid_add(Evas *e);
+EVAS_API Evas_Object *evas_object_textgrid_add(Evas *e);
#include "canvas/evas_textgrid_eo.legacy.h"
@@ -6196,7 +6490,7 @@ EAPI Evas_Object *evas_object_textgrid_add(Evas *e);
*
* @param[in] font_source The font file's path.
*/
-EAPI void evas_object_textgrid_font_source_set(Eo *obj, const char *font_source);
+EVAS_API void evas_object_textgrid_font_source_set(Eo *obj, const char *font_source);
/**
*
@@ -6215,7 +6509,7 @@ EAPI void evas_object_textgrid_font_source_set(Eo *obj, const char *font_source)
* @since 1.7
*
*/
-EAPI const char *evas_object_textgrid_font_source_get(const Eo *obj);
+EVAS_API const char *evas_object_textgrid_font_source_get(const Eo *obj);
/**
*
@@ -6239,7 +6533,7 @@ EAPI const char *evas_object_textgrid_font_source_get(const Eo *obj);
* @param[in] font_name The font (family) name.
* @param[in] font_size The font size, in points.
*/
-EAPI void evas_object_textgrid_font_set(Eo *obj, const char *font_name, Evas_Font_Size font_size);
+EVAS_API void evas_object_textgrid_font_set(Eo *obj, const char *font_name, Evas_Font_Size font_size);
/**
*
@@ -6262,14 +6556,14 @@ EAPI void evas_object_textgrid_font_set(Eo *obj, const char *font_name, Evas_Fon
* @param[out] font_name The font (family) name.
* @param[out] font_size The font size, in points.
*/
-EAPI void evas_object_textgrid_font_get(const Eo *obj, const char **font_name, Evas_Font_Size *font_size);
+EVAS_API void evas_object_textgrid_font_get(const Eo *obj, const char **font_name, Evas_Font_Size *font_size);
/**
* @}
*/
/**
- * @ingroup Evas_Object_Line
+ * @addtogroup Evas_Object_Line_Group
*
* @{
*/
@@ -6278,7 +6572,7 @@ EAPI void evas_object_textgrid_font_get(const Eo *obj, const char **font_name, E
* @param e The given evas.
* @return The new evas line object.
*/
-EAPI Evas_Object *evas_object_line_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_line_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
#include "canvas/evas_line_eo.legacy.h"
@@ -6287,7 +6581,7 @@ EAPI Evas_Object *evas_object_line_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG
*/
/**
- * @ingroup Evas_Object_Polygon
+ * @addtogroup Evas_Object_Polygon
*
* @{
*/
@@ -6296,22 +6590,20 @@ EAPI Evas_Object *evas_object_line_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG
* @param e The given evas.
* @return A new evas polygon object.
*/
-EAPI Evas_Object *evas_object_polygon_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_polygon_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Adds the given point to the given evas polygon object.
*
+ * @param[in] obj The object
* @param[in] y The Y coordinate of the given point.
- *
- * @ingroup Evas_Polygon
*/
-EAPI void evas_object_polygon_point_add(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
+EVAS_API void evas_object_polygon_point_add(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
/** Removes all of the points from the given evas polygon object.
- *
- * @ingroup Evas_Polygon
+ * @param[in] obj The object
*/
-EAPI void evas_object_polygon_points_clear(Evas_Object *obj);
+EVAS_API void evas_object_polygon_points_clear(Evas_Object *obj);
/**
* @}
@@ -6324,7 +6616,7 @@ EAPI void evas_object_polygon_points_clear(Evas_Object *obj);
/**
- * @ingroup Evas_Smart_Object_Group
+ * @addtogroup Evas_Smart_Object_Group
*
* @{
*/
@@ -6333,10 +6625,8 @@ EAPI void evas_object_polygon_points_clear(Evas_Object *obj);
/** Call user-provided @c calculate smart functions and unset the flag
* signalling that the object needs to get recalculated to all smart objects in
* the canvas.
- *
- * @ingroup Evas_Canvas
*/
-EAPI void evas_smart_objects_calculate(Eo *obj);
+EVAS_API void evas_smart_objects_calculate(Eo *obj);
/**
* @brief Get if the canvas is currently calculating smart objects.
@@ -6344,10 +6634,8 @@ EAPI void evas_smart_objects_calculate(Eo *obj);
* @param[in] obj The object.
*
* @return @c true if currently calculating smart objects.
- *
- * @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_smart_objects_calculating_get(const Eo *obj);
+EVAS_API Eina_Bool evas_smart_objects_calculating_get(const Eo *obj);
/**
* Instantiates a new smart object described by @p s.
@@ -6361,10 +6649,8 @@ EAPI Eina_Bool evas_smart_objects_calculating_get(const Eo *obj);
* canvas. It will take care of setting all of its internals to work
* as they should, if the user set things properly, as seem on the
* #EVAS_SMART_SUBCLASS_NEW, for example.
- *
- * @ingroup Evas_Smart_Object_Group
*/
-EAPI Evas_Object *evas_object_smart_add(Evas *e, Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_smart_add(Evas *e, Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_MALLOC;
/**
* Set an Evas object as a member of a given smart object.
@@ -6383,16 +6669,13 @@ EAPI Evas_Object *evas_object_smart_add(Evas *e, Evas_Smart *s) EINA_WARN_UNUSED
*
* @see evas_object_smart_member_del()
* @see evas_object_smart_members_get()
- *
- * @ingroup Evas_Smart_Object_Group
*/
-EAPI void evas_object_smart_member_add(Evas_Object *obj, Evas_Object *smart_obj) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_smart_member_add(Evas_Object *obj, Evas_Object *smart_obj) EINA_ARG_NONNULL(1, 2);
/**
* Removes a member object from a given smart object.
*
* @param obj the member object
- * @ingroup Evas_Smart_Object_Group
*
* This removes a member object from a smart object, if it was added
* to any. The object will still be on the canvas, but no longer
@@ -6401,7 +6684,7 @@ EAPI void evas_object_smart_member_add(Evas_Object *obj, Evas_Object *sm
* @see evas_object_smart_member_add() for more details
* @see evas_object_smart_members_get()
*/
-EAPI void evas_object_smart_member_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_smart_member_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Add (register) a callback function to the smart event specified by
@@ -6439,9 +6722,8 @@ EAPI void evas_object_smart_member_del(Evas_Object *obj) EINA_ARG_NONNUL
* @see @ref Evas_Smart_Object_Group_Callbacks for more details.
*
* @see evas_object_smart_callback_del()
- * @ingroup Evas_Smart_Object_Group
*/
-EAPI void evas_object_smart_callback_add(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+EVAS_API void evas_object_smart_callback_add(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
/**
* Add (register) a callback function to the smart event specified by
@@ -6456,9 +6738,8 @@ EAPI void evas_object_smart_callback_add(Evas_Object *obj, const char *e
*
* @see evas_object_smart_callback_add
* @since 1.1
- * @ingroup Evas_Smart_Object_Group
*/
-EAPI void evas_object_smart_callback_priority_add(Evas_Object *obj, const char *event, Evas_Callback_Priority priority, Evas_Smart_Cb func, const void *data);
+EVAS_API void evas_object_smart_callback_priority_add(Evas_Object *obj, const char *event, Evas_Callback_Priority priority, Evas_Smart_Cb func, const void *data);
/**
* Delete (unregister) a callback function from the smart event
@@ -6478,10 +6759,8 @@ EAPI void evas_object_smart_callback_priority_add(Evas_Object *obj, cons
* not successful @c NULL will be returned.
*
* @see evas_object_smart_callback_add() for more details.
- *
- * @ingroup Evas_Smart_Object_Group
*/
-EAPI void *evas_object_smart_callback_del(Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3);
+EVAS_API void *evas_object_smart_callback_del(Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3);
/**
* Delete (unregister) a callback function from the smart event
@@ -6504,12 +6783,11 @@ EAPI void *evas_object_smart_callback_del(Evas_Object *obj, const char *e
*
* @see evas_object_smart_callback_add() for more details.
* @since 1.2
- * @ingroup Evas_Smart_Object_Group
*
* @note To delete all smart event callbacks which match @p type and @p func,
* use evas_object_smart_callback_del().
*/
-EAPI void *evas_object_smart_callback_del_full(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
+EVAS_API void *evas_object_smart_callback_del_full(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
/**
* Call a given smart callback on the smart object @p obj.
@@ -6529,10 +6807,8 @@ EAPI void *evas_object_smart_callback_del_full(Evas_Object *obj, const ch
* encouraged to properly set the Evas_Smart_Class::callbacks
* callbacks description array, so that the users of the smart object
* can have introspection on its events API <b>at run time</b>.
- *
- * @ingroup Evas_Smart_Object_Group
*/
-EAPI void evas_object_smart_callback_call(Evas_Object *obj, const char *event, void *event_info) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_smart_callback_call(Evas_Object *obj, const char *event, void *event_info) EINA_ARG_NONNULL(1, 2);
/**
* Retrieve an Evas smart object's interface, by name string pointer.
@@ -6547,7 +6823,7 @@ EAPI void evas_object_smart_callback_call(Evas_Object *obj, const char *
* @return The interface's handle pointer, if found, @c NULL
* otherwise.
*/
-EAPI const void *evas_object_smart_interface_get(const Evas_Object *obj, const char *name);
+EVAS_API const void *evas_object_smart_interface_get(const Evas_Object *obj, const char *name);
/**
* Retrieve an Evas smart object interface's <b>private data</b>.
@@ -6560,7 +6836,7 @@ EAPI const void *evas_object_smart_interface_get(const Evas_Object *obj, c
* @return The object interface's private data blob pointer, if found,
* @c NULL otherwise.
*/
-EAPI void *evas_object_smart_interface_data_get(const Evas_Object *obj, const Evas_Smart_Interface *iface);
+EVAS_API void *evas_object_smart_interface_data_get(const Evas_Object *obj, const Evas_Smart_Interface *iface);
/**
* @brief Checks whether a given smart object or any of its smart object
@@ -6568,10 +6844,6 @@ EAPI void *evas_object_smart_interface_data_get(const Evas_Object *o
*
* If @c obj is not a smart object, this call will fail immediately.
*
- * This function supports Eo and legacy inheritance mechanisms. However, it is
- * recommended to use @ref efl_isa instead if your object is using Eo from top
- * to bottom.
- *
* The checks use smart classes names and string comparison. There is a version
* of this same check using pointer comparison, since a smart class' name is a
* single string in Evas.
@@ -6579,10 +6851,8 @@ EAPI void *evas_object_smart_interface_data_get(const Evas_Object *o
* See also @ref evas_object_smart_type_check_ptr.
*
* @param[in] type The name (type) of the smart class to check for.
- *
- * @ingroup Evas_Object
*/
-EAPI Eina_Bool evas_object_smart_type_check(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_smart_type_check(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
/**
* @brief Checks whether a given smart object or any of its smart object
@@ -6592,10 +6862,8 @@ EAPI Eina_Bool evas_object_smart_type_check(const Evas_Object *obj, const char *
*
* @return @c true if @c obj or any of its parents is of type @c type, @c false
* otherwise.
- *
- * @ingroup Evas_Object
*/
-EAPI Eina_Bool evas_object_smart_type_check_ptr(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_smart_type_check_ptr(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
/**
* @brief Set an smart object instance's smart callbacks descriptions.
@@ -6624,10 +6892,8 @@ EAPI Eina_Bool evas_object_smart_type_check_ptr(const Evas_Object *obj, const ch
* made, so this array should be kept alive during the whole object's lifetime.
*
* @return @c true on success, @c false on failure.
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI Eina_Bool evas_object_smart_callbacks_descriptions_set(Evas_Object *obj, const Evas_Smart_Cb_Description *descriptions);
+EVAS_API Eina_Bool evas_object_smart_callbacks_descriptions_set(Evas_Object *obj, const Evas_Smart_Cb_Description *descriptions);
/**
* @brief Retrieve an smart object's know smart callback descriptions (both
@@ -6656,10 +6922,8 @@ EAPI Eina_Bool evas_object_smart_callbacks_descriptions_set(Evas_Object *obj, co
* is returned.
* @param[out] instance_count Returns how many instance callbacks descriptions
* are known.
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI void evas_object_smart_callbacks_descriptions_get(const Evas_Object *obj, const Evas_Smart_Cb_Description ***class_descriptions, unsigned int *class_count, const Evas_Smart_Cb_Description ***instance_descriptions, unsigned int *instance_count);
+EVAS_API void evas_object_smart_callbacks_descriptions_get(const Evas_Object *obj, const Evas_Smart_Cb_Description ***class_descriptions, unsigned int *class_count, const Evas_Smart_Cb_Description ***instance_descriptions, unsigned int *instance_count);
/**
* @brief Find callback description for callback called name or @c null if not
@@ -6675,17 +6939,15 @@ EAPI void evas_object_smart_callbacks_descriptions_get(const Evas_Object *obj, c
* if not found. If parameter is @c null, no search will be done on class
* descriptions.
* @param[out] instance_description pointer to return instance description.
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI void evas_object_smart_callback_description_find(const Evas_Object *obj, const char *name, const Evas_Smart_Cb_Description **class_description, const Evas_Smart_Cb_Description **instance_description) EINA_ARG_NONNULL(2);
+EVAS_API void evas_object_smart_callback_description_find(const Evas_Object *obj, const char *name, const Evas_Smart_Cb_Description **class_description, const Evas_Smart_Cb_Description **instance_description) EINA_ARG_NONNULL(2);
/**
* @brief Get the @ref Evas_Smart from which @c obj smart object was created.
*
* @return the @ref Evas_Smart handle or @c null, on errors.
*/
-EAPI Evas_Smart *evas_object_smart_smart_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Evas_Smart *evas_object_smart_smart_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Store a pointer to user data for a given smart object.
@@ -6695,22 +6957,31 @@ EAPI Evas_Smart *evas_object_smart_smart_get(const Evas_Object *obj) EINA_WARN_U
*
* See also @ref evas_object_smart_data_get.
*
+ * @param[in] obj The object
* @param[in] data A pointer to user data.
+ */
+EVAS_API void evas_object_smart_data_set(Evas_Object *obj, void *data);
+
+/**
+ * @brief Retrieves the pointer to user data for a given smart object.
*
- * @ingroup Evas_Object_Smart
+ * This data is stored independently of the one set by evas_object_data_set(),
+ * naturally.
+ *
+ * See also @ref evas_object_smart_data_set.
+ *
+ * @param[in] obj The object
+ * @return A pointer to user data.
*/
-EAPI void evas_object_smart_data_set(Evas_Object *obj, void *data);
-EAPI void *evas_object_smart_data_get(const Evas_Object *obj);
+EVAS_API void *evas_object_smart_data_get(const Evas_Object *obj);
/**
* @brief Get the clipper object for the given clipped smart object.
*
* Use this function if you want to change any of this clipper's properties,
* like colors.
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI Evas_Object *evas_object_smart_clipped_clipper_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Evas_Object *evas_object_smart_clipped_clipper_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves the list of the member objects of a given Evas smart
@@ -6721,16 +6992,14 @@ EAPI Evas_Object *evas_object_smart_clipped_clipper_get(const Evas_Object *obj)
*
* This function will return @c null when a non-smart object is passed.
*
- * See also @ref Efl.Canvas.Group.group_member_add,
- * @ref Efl.Canvas.Group.group_member_remove and @ref evas_object_smart_iterator_new.
+ * See also @ref evas_object_smart_member_add,
+ * @ref evas_object_smart_member_del and @ref evas_object_smart_iterator_new.
*
* @return Returns the list of the member objects of @c obj.
*
* @since 1.7
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI Eina_List *evas_object_smart_members_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_object_smart_members_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Set or unset the flag signalling that a given smart object needs to
@@ -6753,10 +7022,8 @@ EAPI Eina_List *evas_object_smart_members_get(const Evas_Object *obj) EINA_WARN_
*
* @param[in] value whether one wants to set ($true) or to unset ($false) the
* flag.
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI void evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value);
+EVAS_API void evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value);
/**
* @brief Get the value of the flag signalling that a given smart object needs
@@ -6769,25 +7036,21 @@ EAPI void evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool val
* See also @ref evas_object_smart_need_recalculate_set, for more details.
*
* @return whether one wants to set ($true) or to unset ($false) the flag.
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI Eina_Bool evas_object_smart_need_recalculate_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_smart_need_recalculate_get(const Evas_Object *obj);
/**
* @brief Retrieves an iterator of the member objects of a given Evas smart
* object.
*
- * See also @ref Efl.Canvas.Group.group_member_add and
- * @ref Efl.Canvas.Group.group_member_remove
+ * See also @ref evas_object_smart_member_add and
+ * @ref evas_object_smart_member_del
*
* @return Returns the iterator of the member objects of @c obj.
*
* @since 1.8
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI Eina_Iterator *evas_object_smart_iterator_new(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Iterator *evas_object_smart_iterator_new(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Call the calculate() smart function immediately on a given smart
@@ -6798,10 +7061,8 @@ EAPI Eina_Iterator *evas_object_smart_iterator_new(const Evas_Object *obj) EINA_
* needs recalculation for the next rendering phase.
*
* See also @ref evas_object_smart_need_recalculate_set
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI void evas_object_smart_calculate(Evas_Object *obj);
+EVAS_API void evas_object_smart_calculate(Evas_Object *obj);
/**
* @brief Mark smart object as changed, dirty.
@@ -6812,10 +7073,8 @@ EAPI void evas_object_smart_calculate(Evas_Object *obj);
*
* See also @ref evas_object_smart_need_recalculate_set and
* @ref evas_object_smart_calculate.
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI void evas_object_smart_changed(Evas_Object *obj);
+EVAS_API void evas_object_smart_changed(Evas_Object *obj);
/**
* @brief Moves all children objects of a given smart object relative to a
@@ -6831,10 +7090,8 @@ EAPI void evas_object_smart_changed(Evas_Object *obj);
*
* @param[in] dx Horizontal offset (delta).
* @param[in] dy Vertical offset (delta).
- *
- * @ingroup Evas_Object_Smart
*/
-EAPI void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord dx, Evas_Coord dy);
+EVAS_API void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord dx, Evas_Coord dy);
#include "canvas/efl_canvas_group_eo.legacy.h"
@@ -6843,11 +7100,11 @@ EAPI void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord
*/
/**
- * @ingroup Evas_Object_Box
+ * @addtogroup Evas_Object_Box_Group
*
* @{
*/
-
+
/**
* Add a new box object on the provided canvas.
*
@@ -6861,7 +7118,7 @@ EAPI void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord
* properties of the box must be set/retrieved via
* <c>evas_object_box_{h,v}_{align,padding}_{get,set)()</c>.
*/
-EAPI Evas_Object *evas_object_box_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_box_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Get a property's value (by its given numerical identifier), on a
@@ -6880,7 +7137,7 @@ EAPI Evas_Object *evas_object_box_add(Evas *evas) EINA_WARN_UNUSED
* evas_object_box_option_property_get(). See its documentation for
* more details.
*/
-EAPI Eina_Bool evas_object_box_option_property_vget(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_object_box_option_property_vget(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2);
/**
* Set a property value (by its given numerical identifier), on a
@@ -6899,7 +7156,7 @@ EAPI Eina_Bool evas_object_box_option_property_vget(const Evas_
* evas_object_box_option_property_set(). See its documentation for
* more details.
*/
-EAPI Eina_Bool evas_object_box_option_property_vset(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_object_box_option_property_vset(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2);
/**
* Set a property value (by its given numerical identifier), on a
@@ -6926,7 +7183,7 @@ EAPI Eina_Bool evas_object_box_option_property_vset(Evas_Object
* evas_object_box_option_property_vset() with this list and the same
* previous arguments.
*/
-EAPI Eina_Bool evas_object_box_option_property_set(Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_object_box_option_property_set(Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
/**
* Get a property's value (by its given numerical identifier), on a
@@ -6953,7 +7210,7 @@ EAPI Eina_Bool evas_object_box_option_property_set(Evas_Object
* evas_object_box_option_property_vget() with this list and the same
* previous arguments.
*/
-EAPI Eina_Bool evas_object_box_option_property_get(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_object_box_option_property_get(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
/**
* Get the list of children objects in a given box object.
@@ -6970,7 +7227,7 @@ EAPI Eina_Bool evas_object_box_option_property_get(const Evas_O
* It's possible to remove objects from the box when walking
* this list, but these removals won't be reflected on it.
*/
-EAPI Eina_List *evas_object_box_children_get(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Eina_List *evas_object_box_children_get(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
#include "canvas/evas_box_eo.legacy.h"
@@ -6979,7 +7236,7 @@ EAPI Eina_List *evas_object_box_children_get(const Evas_Object *
*/
/**
- * @ingroup Evas_Object_Table
+ * @addtogroup Evas_Object_Table_Group
*
* @{
*/
@@ -6988,7 +7245,7 @@ EAPI Eina_List *evas_object_box_children_get(const Evas_Object *
*
* @param evas Canvas in which table will be added.
*/
-EAPI Evas_Object *evas_object_table_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_table_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* @brief Control the mirrored mode of the table. In mirrored mode, the table
@@ -7002,7 +7259,7 @@ EAPI Evas_Object *evas_object_table_add(Evas *evas) EINA_W
*
* @ingroup Evas_Table
*/
-EAPI void evas_object_table_mirrored_set(Eo *obj, Eina_Bool mirrored);
+EVAS_API void evas_object_table_mirrored_set(Eo *obj, Eina_Bool mirrored);
/**
* @brief Control the mirrored mode of the table. In mirrored mode, the table
@@ -7017,7 +7274,7 @@ EAPI void evas_object_table_mirrored_set(Eo *obj, Eina_Bool mirrored);
*
* @ingroup Evas_Table
*/
-EAPI Eina_Bool evas_object_table_mirrored_get(const Eo *obj);
+EVAS_API Eina_Bool evas_object_table_mirrored_get(const Eo *obj);
#include "canvas/evas_table_eo.legacy.h"
@@ -7026,7 +7283,7 @@ EAPI Eina_Bool evas_object_table_mirrored_get(const Eo *obj);
*/
/**
- * @ingroup Evas_Object_Grid
+ * @addtogroup Evas_Object_Grid_Group
*
* @{
*/
@@ -7037,7 +7294,7 @@ EAPI Eina_Bool evas_object_table_mirrored_get(const Eo *obj);
* evas_object_grid_pack().
* @since 1.1
*/
-EAPI Evas_Object *evas_object_grid_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_grid_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
@@ -7052,7 +7309,7 @@ EAPI Evas_Object *evas_object_grid_add(Evas *evas) EINA_WARN_UNUSED_RESULT EIN
*
* @ingroup Evas_Grid
*/
-EAPI void evas_object_grid_mirrored_set(Eo *obj, Eina_Bool mirrored);
+EVAS_API void evas_object_grid_mirrored_set(Eo *obj, Eina_Bool mirrored);
/**
* @brief Gets the mirrored mode of the grid.
@@ -7067,7 +7324,7 @@ EAPI void evas_object_grid_mirrored_set(Eo *obj, Eina_Bool mirrored);
*
* @ingroup Evas_Grid
*/
-EAPI Eina_Bool evas_object_grid_mirrored_get(const Eo *obj);
+EVAS_API Eina_Bool evas_object_grid_mirrored_get(const Eo *obj);
#include "canvas/evas_grid_eo.legacy.h"
@@ -7094,7 +7351,7 @@ EAPI Eina_Bool evas_object_grid_mirrored_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_output_framespace_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_output_framespace_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
/**
* @brief Get the render engine's output framespace coordinates in canvas
@@ -7109,7 +7366,7 @@ EAPI void evas_output_framespace_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_C
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_output_framespace_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
+EVAS_API void evas_output_framespace_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Sets the output viewport of the given evas in evas units.
@@ -7128,7 +7385,7 @@ EAPI void evas_output_framespace_get(const Evas *e, Evas_Coord *x, Evas_Coord *y
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_output_viewport_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
+EVAS_API void evas_output_viewport_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
/**
* @brief Get the render engine's output viewport coordinates in canvas units.
@@ -7146,7 +7403,7 @@ EAPI void evas_output_viewport_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coo
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_output_viewport_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
+EVAS_API void evas_output_viewport_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Sets the output engine for the given evas.
@@ -7162,7 +7419,7 @@ EAPI void evas_output_viewport_get(const Evas *e, Evas_Coord *x, Evas_Coord *y,
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_output_method_set(Evas *e, int render_method);
+EVAS_API void evas_output_method_set(Evas *e, int render_method);
/**
* @brief Retrieves the number of the output engine used for the given evas.
@@ -7171,7 +7428,7 @@ EAPI void evas_output_method_set(Evas *e, int render_method);
*
* @ingroup Evas_Canvas
*/
-EAPI int evas_output_method_get(const Evas *e);
+EVAS_API int evas_output_method_get(const Evas *e);
/**
* @brief Sets the output size of the render engine of the given evas.
@@ -7187,7 +7444,7 @@ EAPI int evas_output_method_get(const Evas *e);
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_output_size_set(Evas *e, int w, int h);
+EVAS_API void evas_output_size_set(Evas *e, int w, int h);
/**
* @brief Retrieve the output size of the render engine of the given evas.
@@ -7202,7 +7459,7 @@ EAPI void evas_output_size_set(Evas *e, int w, int h);
*
* @ingroup Evas_Canvas
*/
-EAPI void evas_output_size_get(const Evas *e, int *w, int *h);
+EVAS_API void evas_output_size_get(const Evas *e, int *w, int *h);
typedef struct _Evas_Map Evas_Map;
@@ -7556,7 +7813,7 @@ typedef struct _Evas_Map Evas_Map;
* @see evas_map_point_coord_set()
* @see evas_map_point_image_uv_set()
*/
-EAPI void evas_map_util_points_populate_from_object_full(Evas_Map *m, const Evas_Object *obj, Evas_Coord z);
+EVAS_API void evas_map_util_points_populate_from_object_full(Evas_Map *m, const Evas_Object *obj, Evas_Coord z);
/**
* Populate source and destination map points to match exactly object.
@@ -7577,7 +7834,7 @@ EAPI void evas_map_util_points_populate_from_object_full(Evas_Map *m,
* @see evas_map_point_coord_set()
* @see evas_map_point_image_uv_set()
*/
-EAPI void evas_map_util_points_populate_from_object(Evas_Map *m, const Evas_Object *obj);
+EVAS_API void evas_map_util_points_populate_from_object(Evas_Map *m, const Evas_Object *obj);
/**
* Populate source and destination map points to match given geometry.
@@ -7600,7 +7857,7 @@ EAPI void evas_map_util_points_populate_from_object(Evas_Map *m, cons
* @see evas_map_point_coord_set()
* @see evas_map_point_image_uv_set()
*/
-EAPI void evas_map_util_points_populate_from_geometry(Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Evas_Coord z);
+EVAS_API void evas_map_util_points_populate_from_geometry(Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Evas_Coord z);
/**
* Set color of all points to given color.
@@ -7616,7 +7873,7 @@ EAPI void evas_map_util_points_populate_from_geometry(Evas_Map *m, Ev
*
* @see evas_map_point_color_set()
*/
-EAPI void evas_map_util_points_color_set(Evas_Map *m, int r, int g, int b, int a);
+EVAS_API void evas_map_util_points_color_set(Evas_Map *m, int r, int g, int b, int a);
/**
* Change the map to apply the given rotation.
@@ -7635,7 +7892,7 @@ EAPI void evas_map_util_points_color_set(Evas_Map *m, int r, int g, i
* @see evas_map_point_coord_set()
* @see evas_map_util_zoom()
*/
-EAPI void evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy);
+EVAS_API void evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy);
/**
* Change the map to apply the given zooming.
@@ -7655,7 +7912,7 @@ EAPI void evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coor
* @see evas_map_point_coord_set()
* @see evas_map_util_rotate()
*/
-EAPI void evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy);
+EVAS_API void evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy);
/**
* Rotate the map around 3 axes in 3D
@@ -7675,7 +7932,7 @@ EAPI void evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy,
* @param cy rotation's center vertical position.
* @param cz rotation's center vertical position.
*/
-EAPI void evas_map_util_3d_rotate(Evas_Map *m, double dx, double dy, double dz, Evas_Coord cx, Evas_Coord cy, Evas_Coord cz);
+EVAS_API void evas_map_util_3d_rotate(Evas_Map *m, double dx, double dy, double dz, Evas_Coord cx, Evas_Coord cy, Evas_Coord cz);
/**
* Rotate the map in 3D using a unit quaternion.
@@ -7699,7 +7956,7 @@ EAPI void evas_map_util_3d_rotate(Evas_Map *m, double dx, double dy,
*
* @since 1.8
*/
-EAPI void evas_map_util_quat_rotate(Evas_Map *m, double qx, double qy, double qz, double qw, double cx, double cy, double cz);
+EVAS_API void evas_map_util_quat_rotate(Evas_Map *m, double qx, double qy, double qz, double qw, double cx, double cy, double cz);
/**
* Perform lighting calculations on the given Map
@@ -7755,7 +8012,7 @@ EAPI void evas_map_util_quat_rotate(Evas_Map *m, double qx, double qy
* @param ag ambient color green value (0 - 255)
* @param ab ambient color blue value (0 - 255)
*/
-EAPI void evas_map_util_3d_lighting(Evas_Map *m, Evas_Coord lx, Evas_Coord ly, Evas_Coord lz, int lr, int lg, int lb, int ar, int ag, int ab);
+EVAS_API void evas_map_util_3d_lighting(Evas_Map *m, Evas_Coord lx, Evas_Coord ly, Evas_Coord lz, int lr, int lg, int lb, int ar, int ag, int ab);
/**
* Apply a perspective transform to the map
@@ -7779,7 +8036,7 @@ EAPI void evas_map_util_3d_lighting(Evas_Map *m, Evas_Coord lx, Evas_
* @param z0 The "0" z plane value
* @param foc The focal distance
*/
-EAPI void evas_map_util_3d_perspective(Evas_Map *m, Evas_Coord px, Evas_Coord py, Evas_Coord z0, Evas_Coord foc);
+EVAS_API void evas_map_util_3d_perspective(Evas_Map *m, Evas_Coord px, Evas_Coord py, Evas_Coord z0, Evas_Coord foc);
/**
* Get the clockwise state of a map
@@ -7792,7 +8049,7 @@ EAPI void evas_map_util_3d_perspective(Evas_Map *m, Evas_Coord px, Ev
* @param m map to query.
* @return 1 if clockwise, 0 otherwise
*/
-EAPI Eina_Bool evas_map_util_clockwise_get(Evas_Map *m);
+EVAS_API Eina_Bool evas_map_util_clockwise_get(Evas_Map *m);
/**
* Create map of transformation points to be later used with an Evas object.
@@ -7813,7 +8070,7 @@ EAPI Eina_Bool evas_map_util_clockwise_get(Evas_Map *m);
*
* @see evas_object_map_set()
*/
-EAPI Evas_Map *evas_map_new(int count);
+EVAS_API Evas_Map *evas_map_new(int count);
/**
* Set the smoothing for map rendering
@@ -7825,7 +8082,7 @@ EAPI Evas_Map *evas_map_new(int count);
* @param m map to modify. Must not be NULL.
* @param enabled enable or disable smooth map rendering
*/
-EAPI void evas_map_smooth_set(Evas_Map *m, Eina_Bool enabled);
+EVAS_API void evas_map_smooth_set(Evas_Map *m, Eina_Bool enabled);
/**
* Get the smoothing for map rendering
@@ -7835,7 +8092,7 @@ EAPI void evas_map_smooth_set(Evas_Map *m, Eina_Bool enabled);
* @param m map to get the smooth from. Must not be NULL.
* @return @c EINA_TRUE if the smooth is enabled, @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool evas_map_smooth_get(const Evas_Map *m);
+EVAS_API Eina_Bool evas_map_smooth_get(const Evas_Map *m);
/**
* Set the alpha flag for map rendering
@@ -7849,7 +8106,7 @@ EAPI Eina_Bool evas_map_smooth_get(const Evas_Map *m);
* @param m map to modify. Must not be NULL.
* @param enabled enable or disable alpha map rendering
*/
-EAPI void evas_map_alpha_set(Evas_Map *m, Eina_Bool enabled);
+EVAS_API void evas_map_alpha_set(Evas_Map *m, Eina_Bool enabled);
/**
* Get the alpha flag for map rendering
@@ -7859,7 +8116,7 @@ EAPI void evas_map_alpha_set(Evas_Map *m, Eina_Bool enabled);
* @param m map to get the alpha from. Must not be NULL.
* @return EINA_FALSE if map is NULL EINA_TRUE otherwise.
*/
-EAPI Eina_Bool evas_map_alpha_get(const Evas_Map *m);
+EVAS_API Eina_Bool evas_map_alpha_get(const Evas_Map *m);
/**
* Set the flag of the object move synchronization for map rendering
@@ -7874,7 +8131,7 @@ EAPI Eina_Bool evas_map_alpha_get(const Evas_Map *m);
* rendering.
* @since 1.13
*/
-EAPI void evas_map_util_object_move_sync_set(Evas_Map *m, Eina_Bool enabled);
+EVAS_API void evas_map_util_object_move_sync_set(Evas_Map *m, Eina_Bool enabled);
/**
* Get the flag of the object move synchronization for map rendering
@@ -7886,7 +8143,7 @@ EAPI void evas_map_util_object_move_sync_set(Evas_Map *m, Eina_Bool e
* @return EINA_FALSE if map is NULL EINA_TRUE otherwise.
* @since 1.13
*/
-EAPI Eina_Bool evas_map_util_object_move_sync_get(const Evas_Map *m);
+EVAS_API Eina_Bool evas_map_util_object_move_sync_get(const Evas_Map *m);
/**
* Copy a previously allocated map.
@@ -7896,7 +8153,7 @@ EAPI Eina_Bool evas_map_util_object_move_sync_get(const Evas_Map *m);
* @param m map to copy. Must not be NULL.
* @return newly allocated map with the same count and contents as @p m.
*/
-EAPI Evas_Map *evas_map_dup(const Evas_Map *m);
+EVAS_API Evas_Map *evas_map_dup(const Evas_Map *m);
/**
* Free a previously allocated map.
@@ -7906,7 +8163,7 @@ EAPI Evas_Map *evas_map_dup(const Evas_Map *m);
*
* @param m map to free.
*/
-EAPI void evas_map_free(Evas_Map *m);
+EVAS_API void evas_map_free(Evas_Map *m);
/**
* Get a maps size.
@@ -7916,7 +8173,7 @@ EAPI void evas_map_free(Evas_Map *m);
* @param m map to get size.
* @return -1 on error, points otherwise.
*/
-EAPI int evas_map_count_get(const Evas_Map *m) EINA_CONST;
+EVAS_API int evas_map_count_get(const Evas_Map *m) EINA_CONST;
/**
* Apply a map transformation on given coordinate
@@ -7927,10 +8184,10 @@ EAPI int evas_map_count_get(const Evas_Map *m) EINA_CONST;
* @param mx point x after transformation by m
* @param my point y after transformation by m
* @param grab
- * @return #EINA_TRUE on success interpolation, @EINA_FALSE otherwise
+ * @return #EINA_TRUE on success interpolation, #EINA_FALSE otherwise
* @since 1.20
*/
-EAPI Eina_Bool evas_map_coords_get(const Evas_Map *m, double x, double y,
+EVAS_API Eina_Bool evas_map_coords_get(const Evas_Map *m, double x, double y,
double *mx, double *my, int grab);
/**
@@ -7962,7 +8219,7 @@ EAPI Eina_Bool evas_map_coords_get(const Evas_Map *m, double x, double y,
* @see evas_map_util_points_populate_from_object_full()
* @see evas_map_util_points_populate_from_object()
*/
-EAPI void evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x, Evas_Coord y, Evas_Coord z);
+EVAS_API void evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x, Evas_Coord y, Evas_Coord z);
/**
* Get the map point's coordinate.
@@ -7975,7 +8232,7 @@ EAPI void evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x
* @param y where to return the Y coordinate.
* @param z where to return the Z coordinate.
*/
-EAPI void evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z);
+EVAS_API void evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z);
/**
* Change the map point's U and V texture source point
@@ -7996,7 +8253,7 @@ EAPI void evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_C
* @see evas_map_util_points_populate_from_object_full()
* @see evas_map_util_points_populate_from_object()
*/
-EAPI void evas_map_point_image_uv_set(Evas_Map *m, int idx, double u, double v);
+EVAS_API void evas_map_point_image_uv_set(Evas_Map *m, int idx, double u, double v);
/**
* Get the map point's U and V texture source points
@@ -8008,7 +8265,7 @@ EAPI void evas_map_point_image_uv_set(Evas_Map *m, int idx, double u,
* @param u where to write the X coordinate within the image/texture source
* @param v where to write the Y coordinate within the image/texture source
*/
-EAPI void evas_map_point_image_uv_get(const Evas_Map *m, int idx, double *u, double *v);
+EVAS_API void evas_map_point_image_uv_get(const Evas_Map *m, int idx, double *u, double *v);
/**
* Set the color of a vertex in the map
@@ -8030,7 +8287,7 @@ EAPI void evas_map_point_image_uv_get(const Evas_Map *m, int idx, dou
* @see evas_map_point_coord_set()
* @see evas_object_map_set()
*/
-EAPI void evas_map_point_color_set(Evas_Map *m, int idx, int r, int g, int b, int a);
+EVAS_API void evas_map_point_color_set(Evas_Map *m, int idx, int r, int g, int b, int a);
/**
* Get the color set on a vertex in the map
@@ -8048,7 +8305,7 @@ EAPI void evas_map_point_color_set(Evas_Map *m, int idx, int r, int g
* @see evas_map_point_coord_set()
* @see evas_object_map_set()
*/
-EAPI void evas_map_point_color_get(const Evas_Map *m, int idx, int *r, int *g, int *b, int *a);
+EVAS_API void evas_map_point_color_get(const Evas_Map *m, int idx, int *r, int *g, int *b, int *a);
/**
* @}
*/
@@ -8073,9 +8330,9 @@ EAPI void evas_map_point_color_get(const Evas_Map *m, int idx, int *r
*
* @param[in] map The map.
*
- * @ingroup Efl_Canvas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_map_set(Evas_Object *obj, const Evas_Map *map);
+EVAS_API void evas_object_map_set(Evas_Object *obj, const Evas_Map *map);
/**
* @brief Get current object transformation map.
@@ -8086,9 +8343,9 @@ EAPI void evas_object_map_set(Evas_Object *obj, const Evas_Map *map);
*
* @return The map.
*
- * @ingroup Efl_Canvas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI const Evas_Map *evas_object_map_get(const Evas_Object *obj);
+EVAS_API const Evas_Map *evas_object_map_get(const Evas_Object *obj);
/**
* @brief Enable or disable the map that is set.
@@ -8103,9 +8360,9 @@ EAPI const Evas_Map *evas_object_map_get(const Evas_Object *obj);
*
* @param[in] enabled Enabled state.
*
- * @ingroup Evas_Object
+ * @ingroup Evas_Object_Group
*/
-EAPI void evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled);
+EVAS_API void evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled);
/**
* @brief Whether the map is enabled or not
@@ -8115,18 +8372,19 @@ EAPI void evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled);
* @return The value of @c enabled as passed to evas_object_map_enable_set().
*
* @see evas_object_map_enable_set
+ * @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_map_enable_get(const Evas_Object *obj);
+EVAS_API Eina_Bool evas_object_map_enable_get(const Evas_Object *obj);
/**
* @brief Apply an evas filter program on this text object.
*
* Note: the preferred method for filters is to edit EDC styles, rather than
* calling this API directly.
- *
+ *
* @since 1.18
*/
-EAPI void evas_object_text_filter_program_set(Evas_Object *obj, const char *code) EINA_DEPRECATED;
+EVAS_API void evas_object_text_filter_program_set(Evas_Object *obj, const char *code) EINA_DEPRECATED;
/**
* @brief Set a named source object for an evas filter program.
@@ -8135,7 +8393,7 @@ EAPI void evas_object_text_filter_program_set(Evas_Object *obj, const char *code
* calling this API directly.
* @since 1.18
*/
-EAPI void evas_object_text_filter_source_set(Evas_Object *obj, const char *name, Evas_Object *source) EINA_DEPRECATED;
+EVAS_API void evas_object_text_filter_source_set(Evas_Object *obj, const char *name, Evas_Object *source) EINA_DEPRECATED;
/**
* Creates a new smart rectangle object on the given Evas @p e canvas.
@@ -8159,7 +8417,7 @@ EAPI void evas_object_text_filter_source_set(Evas_Object *obj, const char *name,
*
* @since 1.20
*/
-EAPI Evas_Object *evas_object_event_grabber_add(Evas *e);
+EVAS_API Evas_Object *evas_object_event_grabber_add(Evas *e);
/**
* @brief If @c true the object belongs to the window border decorations.
@@ -8178,7 +8436,7 @@ EAPI Evas_Object *evas_object_event_grabber_add(Evas *e);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_is_frame_object_set(Efl_Canvas_Object *obj, Eina_Bool is_frame);
+EVAS_API void evas_object_is_frame_object_set(Efl_Canvas_Object *obj, Eina_Bool is_frame);
/**
* @brief If @c true the object belongs to the window border decorations.
@@ -8198,7 +8456,7 @@ EAPI void evas_object_is_frame_object_set(Efl_Canvas_Object *obj, Eina_Bool is_f
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_is_frame_object_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_is_frame_object_get(const Efl_Canvas_Object *obj);
/**
* @brief Set whether an Evas object is to freeze (discard) events.
@@ -8221,7 +8479,7 @@ EAPI Eina_Bool evas_object_is_frame_object_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_freeze_events_set(Efl_Canvas_Object *obj, Eina_Bool freeze);
+EVAS_API void evas_object_freeze_events_set(Efl_Canvas_Object *obj, Eina_Bool freeze);
/**
* @brief Determine whether an object is set to freeze (discard) events.
@@ -8234,6 +8492,6 @@ EAPI void evas_object_freeze_events_set(Efl_Canvas_Object *obj, Eina_Bool freeze
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_freeze_events_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_freeze_events_get(const Efl_Canvas_Object *obj);
#include "canvas/efl_canvas_event_grabber_eo.legacy.h"
diff --git a/src/lib/evas/Evas_Loader.h b/src/lib/evas/Evas_Loader.h
index 94ec424209..5aeea0bf78 100644
--- a/src/lib/evas/Evas_Loader.h
+++ b/src/lib/evas/Evas_Loader.h
@@ -9,11 +9,11 @@
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
+ * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
@@ -39,31 +39,7 @@
#include "Eina.h"
#include "Emile.h"
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
#ifdef __cplusplus
extern "C" {
@@ -119,6 +95,11 @@ struct _Evas_Module
unsigned char loaded : 1;
};
+/**
+ * @addtogroup Evas_Image
+ * @{
+ */
+
typedef struct _Evas_Image_Load_Opts Evas_Image_Load_Opts;
struct _Evas_Image_Load_Opts
@@ -152,16 +133,19 @@ struct _Evas_Image_Property
typedef struct _Evas_Image_Load_Func Evas_Image_Load_Func;
+/**
+ * @brief Possible outcomes of a load operation
+ */
typedef enum
{
- EVAS_LOAD_ERROR_NONE = 0,
- EVAS_LOAD_ERROR_GENERIC,
- EVAS_LOAD_ERROR_DOES_NOT_EXIST,
- EVAS_LOAD_ERROR_PERMISSION_DENIED,
- EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED,
- EVAS_LOAD_ERROR_CORRUPT_FILE,
- EVAS_LOAD_ERROR_UNKNOWN_FORMAT,
- EVAS_LOAD_ERROR_CANCELLED,
+ EVAS_LOAD_ERROR_NONE = 0, /**< No error on load */
+ EVAS_LOAD_ERROR_GENERIC, /**< A non-specific error occurred */
+ EVAS_LOAD_ERROR_DOES_NOT_EXIST, /**< File (or file path) does not exist */
+ EVAS_LOAD_ERROR_PERMISSION_DENIED, /**< Permission denied to an existing file (or path) */
+ EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED, /**< Allocation of resources failure prevented load */
+ EVAS_LOAD_ERROR_CORRUPT_FILE, /**< File corrupt (but was detected as a known format) */
+ EVAS_LOAD_ERROR_UNKNOWN_FORMAT, /**< File is not a known format */
+ EVAS_LOAD_ERROR_CANCELLED, /**< File loading has been cancelled */
} Evas_Load_Error;
typedef Emile_Image_Animated_Loop_Hint Evas_Image_Animated_Loop_Hint;
@@ -231,10 +215,10 @@ struct _Evas_Image_Load_Func
Eina_Bool do_region;
};
-EAPI Eina_Bool evas_module_register (const Evas_Module_Api *module, Evas_Module_Type type);
-EAPI Eina_Bool evas_module_unregister (const Evas_Module_Api *module, Evas_Module_Type type);
+EVAS_API Eina_Bool evas_module_register (const Evas_Module_Api *module, Evas_Module_Type type);
+EVAS_API Eina_Bool evas_module_unregister (const Evas_Module_Api *module, Evas_Module_Type type);
-EAPI Eina_Bool evas_module_task_cancelled (void); /**< @since 1.19 */
+EVAS_API Eina_Bool evas_module_task_cancelled (void); /**< @since 1.19 */
#define EVAS_MODULE_TASK_CHECK(Count, Mask, Error, Error_Handler) \
do { \
@@ -290,11 +274,12 @@ evas_loader_helper_stretch_region_push(uint8_t **region,
return EINA_TRUE;
}
+/**
+ * @}
+ */
+
#ifdef __cplusplus
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/evas/cache/evas_cache.h b/src/lib/evas/cache/evas_cache.h
index b7bcb7d660..3debcae634 100644
--- a/src/lib/evas/cache/evas_cache.h
+++ b/src/lib/evas/cache/evas_cache.h
@@ -113,60 +113,62 @@ extern "C" {
#endif
-EAPI Evas_Cache_Image* evas_cache_image_init(const Evas_Cache_Image_Func *cb);
-EAPI void evas_cache_image_shutdown(Evas_Cache_Image *cache);
-EAPI Image_Entry* evas_cache_image_mmap_request(Evas_Cache_Image *cache, Eina_File *f, const char *key, Evas_Image_Load_Opts *lo, int *error);
-EAPI void evas_cache_image_ref(Image_Entry *im);
-EAPI void evas_cache_image_drop(Image_Entry *im);
-EAPI void evas_cache_image_data_not_needed(Image_Entry *im);
-EAPI int evas_cache_image_flush(Evas_Cache_Image *cache);
-EAPI void evas_cache_private_set(Evas_Cache_Image *cache, const void *data);
-EAPI void* evas_cache_private_get(Evas_Cache_Image *cache);
-EAPI void* evas_cache_private_from_image_entry_get(Image_Entry *im);
-
-EAPI int evas_cache_image_usage_get(Evas_Cache_Image *cache);
-EAPI int evas_cache_image_get(Evas_Cache_Image *cache);
-EAPI void evas_cache_image_set(Evas_Cache_Image *cache, unsigned int size);
-
-EAPI Image_Entry* evas_cache_image_alone(Image_Entry *im);
-EAPI Image_Entry* evas_cache_image_dirty(Image_Entry *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
-EAPI int evas_cache_image_load_data(Image_Entry *im);
-EAPI void evas_cache_image_unload_data(Image_Entry *im);
-EAPI Eina_Bool evas_cache_image_is_loaded(Image_Entry *im);
-EAPI void evas_cache_image_unload_all(Evas_Cache_Image *cache);
-EAPI void evas_cache_image_surface_alloc(Image_Entry *im, unsigned int w, unsigned int h);
-EAPI DATA32* evas_cache_image_pixels(Image_Entry *im);
-EAPI Image_Entry* evas_cache_image_copied_data(Evas_Cache_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
-EAPI Image_Entry* evas_cache_image_data(Evas_Cache_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
-EAPI void evas_cache_image_colorspace(Image_Entry *im, Evas_Colorspace cspace);
-EAPI Image_Entry* evas_cache_image_empty(Evas_Cache_Image *cache);
-EAPI Image_Entry* evas_cache_image_size_set(Image_Entry *im, unsigned int w, unsigned int h);
-
-EAPI Evas_Cache_Engine_Image* evas_cache_engine_image_init(const Evas_Cache_Engine_Image_Func *cb, Evas_Cache_Image *parent);
-EAPI void evas_cache_engine_image_shutdown(Evas_Cache_Engine_Image *cache);
-
-EAPI int evas_cache_engine_image_usage_get(Evas_Cache_Engine_Image *cache);
-EAPI int evas_cache_engine_image_get(Evas_Cache_Engine_Image *cache);
-EAPI void evas_cache_engine_image_set(Evas_Cache_Engine_Image *cache, int limit);
-
-EAPI void evas_cache_engine_parent_not_needed(Engine_Image_Entry *eim);
-EAPI Engine_Image_Entry* evas_cache_engine_image_engine(Evas_Cache_Engine_Image *cache, void *engine_data);
-EAPI void evas_cache_engine_image_drop(Engine_Image_Entry *eim);
-EAPI Engine_Image_Entry* evas_cache_engine_image_alone(Engine_Image_Entry *eim, void *data);
-EAPI Engine_Image_Entry* evas_cache_engine_image_dirty(Engine_Image_Entry *eim, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
-EAPI Engine_Image_Entry* evas_cache_engine_image_copied_data(Evas_Cache_Engine_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace, void *engine_data);
-EAPI Engine_Image_Entry* evas_cache_engine_image_data(Evas_Cache_Engine_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace, void *engine_data);
-EAPI void evas_cache_engine_image_colorspace(Engine_Image_Entry *eim, Evas_Colorspace cspace, void *engine_data);
-EAPI Engine_Image_Entry* evas_cache_engine_image_size_set(Engine_Image_Entry *eim, unsigned int w, unsigned int h);
-
-EAPI void evas_cache_engine_image_load_data(Engine_Image_Entry *eim);
-
-EAPI void evas_cache_image_preload_data(Image_Entry *im, const Eo *target, void (*preloaded_cb)(void *data), void *preloaded_data);
-EAPI void evas_cache_image_preload_cancel(Image_Entry *im, const Eo *target, Eina_Bool force);
-
-EAPI int evas_cache_async_frozen_get(void);
-EAPI void evas_cache_async_freeze(void);
-EAPI void evas_cache_async_thaw(void);
+EVAS_API Evas_Cache_Image* evas_cache_image_init(const Evas_Cache_Image_Func *cb);
+EVAS_API void evas_cache_image_shutdown(Evas_Cache_Image *cache);
+EVAS_API Image_Entry* evas_cache_image_request(Evas_Cache_Image *cache, const char *file, const char *key, Evas_Image_Load_Opts *lo, int *error);
+EVAS_API Image_Entry* evas_cache_image_mmap_request(Evas_Cache_Image *cache, Eina_File *f, const char *key, Evas_Image_Load_Opts *lo, int *error);
+EVAS_API void evas_cache_image_ref(Image_Entry *im);
+EVAS_API void evas_cache_image_drop(Image_Entry *im);
+EVAS_API void evas_cache_image_data_not_needed(Image_Entry *im);
+EVAS_API int evas_cache_image_flush(Evas_Cache_Image *cache);
+EVAS_API void evas_cache_private_set(Evas_Cache_Image *cache, const void *data);
+EVAS_API void* evas_cache_private_get(Evas_Cache_Image *cache);
+EVAS_API void* evas_cache_private_from_image_entry_get(Image_Entry *im);
+
+EVAS_API int evas_cache_image_usage_get(Evas_Cache_Image *cache);
+EVAS_API int evas_cache_image_get(Evas_Cache_Image *cache);
+EVAS_API void evas_cache_image_set(Evas_Cache_Image *cache, unsigned int size);
+
+EVAS_API Image_Entry* evas_cache_image_alone(Image_Entry *im);
+EVAS_API Image_Entry* evas_cache_image_dirty(Image_Entry *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
+EVAS_API int evas_cache_image_load_data(Image_Entry *im);
+EVAS_API void evas_cache_image_unload_data(Image_Entry *im);
+EVAS_API Eina_Bool evas_cache_image_is_loaded(Image_Entry *im);
+EVAS_API void evas_cache_image_unload_all(Evas_Cache_Image *cache);
+EVAS_API void evas_cache_image_surface_alloc(Image_Entry *im, unsigned int w, unsigned int h);
+EVAS_API DATA32* evas_cache_image_pixels(Image_Entry *im);
+EVAS_API Image_Entry* evas_cache_image_copied_data(Evas_Cache_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
+EVAS_API Image_Entry* evas_cache_image_data(Evas_Cache_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
+EVAS_API void evas_cache_image_colorspace(Image_Entry *im, Evas_Colorspace cspace);
+EVAS_API Image_Entry* evas_cache_image_empty(Evas_Cache_Image *cache);
+EVAS_API Image_Entry* evas_cache_image_size_set(Image_Entry *im, unsigned int w, unsigned int h);
+
+EVAS_API Evas_Cache_Engine_Image* evas_cache_engine_image_init(const Evas_Cache_Engine_Image_Func *cb, Evas_Cache_Image *parent);
+EVAS_API void evas_cache_engine_image_shutdown(Evas_Cache_Engine_Image *cache);
+
+EVAS_API int evas_cache_engine_image_usage_get(Evas_Cache_Engine_Image *cache);
+EVAS_API int evas_cache_engine_image_get(Evas_Cache_Engine_Image *cache);
+EVAS_API void evas_cache_engine_image_set(Evas_Cache_Engine_Image *cache, int limit);
+
+EVAS_API Engine_Image_Entry* evas_cache_engine_image_request(Evas_Cache_Engine_Image *cache, const char *file, const char *key, Evas_Image_Load_Opts *lo, void *engine_data, int *error);
+EVAS_API void evas_cache_engine_parent_not_needed(Engine_Image_Entry *eim);
+EVAS_API Engine_Image_Entry* evas_cache_engine_image_engine(Evas_Cache_Engine_Image *cache, void *engine_data);
+EVAS_API void evas_cache_engine_image_drop(Engine_Image_Entry *eim);
+EVAS_API Engine_Image_Entry* evas_cache_engine_image_alone(Engine_Image_Entry *eim, void *data);
+EVAS_API Engine_Image_Entry* evas_cache_engine_image_dirty(Engine_Image_Entry *eim, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
+EVAS_API Engine_Image_Entry* evas_cache_engine_image_copied_data(Evas_Cache_Engine_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace, void *engine_data);
+EVAS_API Engine_Image_Entry* evas_cache_engine_image_data(Evas_Cache_Engine_Image *cache, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace, void *engine_data);
+EVAS_API void evas_cache_engine_image_colorspace(Engine_Image_Entry *eim, Evas_Colorspace cspace, void *engine_data);
+EVAS_API Engine_Image_Entry* evas_cache_engine_image_size_set(Engine_Image_Entry *eim, unsigned int w, unsigned int h);
+
+EVAS_API void evas_cache_engine_image_load_data(Engine_Image_Entry *eim);
+
+EVAS_API void evas_cache_image_preload_data(Image_Entry *im, const Eo *target, void (*preloaded_cb)(void *data), void *preloaded_data);
+EVAS_API void evas_cache_image_preload_cancel(Image_Entry *im, const Eo *target, Eina_Bool force);
+
+EVAS_API int evas_cache_async_frozen_get(void);
+EVAS_API void evas_cache_async_freeze(void);
+EVAS_API void evas_cache_async_thaw(void);
#ifdef __cplusplus
}
diff --git a/src/lib/evas/cache/evas_cache_engine_image.c b/src/lib/evas/cache/evas_cache_engine_image.c
index 65d073aa71..bf455f381a 100644
--- a/src/lib/evas/cache/evas_cache_engine_image.c
+++ b/src/lib/evas/cache/evas_cache_engine_image.c
@@ -137,28 +137,28 @@ _evas_cache_engine_image_dealloc(Evas_Cache_Engine_Image *cache,
}
}
-EAPI int
+EVAS_API int
evas_cache_engine_image_usage_get(Evas_Cache_Engine_Image *cache)
{
assert(cache != NULL);
return cache->usage;
}
-EAPI int
+EVAS_API int
evas_cache_engine_image_get(Evas_Cache_Engine_Image *cache)
{
assert(cache != NULL);
return cache->limit;
}
-EAPI void
+EVAS_API void
evas_cache_engine_image_set(Evas_Cache_Engine_Image *cache, int limit)
{
assert(cache != NULL);
cache->limit = limit;
}
-EAPI Evas_Cache_Engine_Image *
+EVAS_API Evas_Cache_Engine_Image *
evas_cache_engine_image_init(const Evas_Cache_Engine_Image_Func *cb,
Evas_Cache_Image *parent)
{
@@ -185,7 +185,7 @@ evas_cache_engine_image_init(const Evas_Cache_Engine_Image_Func *cb,
return new;
}
-EAPI Evas_Cache_Engine_Image *
+EVAS_API Evas_Cache_Engine_Image *
evas_cache_engine_image_dup(const Evas_Cache_Engine_Image_Func *cb,
Evas_Cache_Engine_Image *brother)
{
@@ -236,7 +236,7 @@ _evas_cache_engine_image_free_cb(EINA_UNUSED const Eina_Hash *hash,
return EINA_TRUE;
}
-EAPI void
+EVAS_API void
evas_cache_engine_image_flush(Evas_Cache_Engine_Image *cache)
{
assert(cache != NULL);
@@ -250,7 +250,7 @@ evas_cache_engine_image_flush(Evas_Cache_Engine_Image *cache)
}
}
-EAPI void
+EVAS_API void
evas_cache_engine_image_shutdown(Evas_Cache_Engine_Image *cache)
{
Engine_Image_Entry *eim;
@@ -288,7 +288,76 @@ evas_cache_engine_image_shutdown(Evas_Cache_Engine_Image *cache)
free(cache);
}
-EAPI void
+EVAS_API Engine_Image_Entry *
+evas_cache_engine_image_request(Evas_Cache_Engine_Image *cache,
+ const char *file, const char *key,
+ Evas_Image_Load_Opts *lo, void *data,
+ int *error)
+{
+ Engine_Image_Entry *eim;
+ Image_Entry *im;
+ const char *ekey;
+
+ assert(cache != NULL);
+
+ *error = EVAS_LOAD_ERROR_NONE;
+
+ ekey = NULL;
+ eim = NULL;
+
+ im = evas_cache_image_request(cache->parent, file, key, lo, error);
+ if (!im) goto on_error;
+
+ if (cache->func.key) ekey = cache->func.key(im, file, key, lo, data);
+ else ekey = eina_stringshare_add(im->cache_key);
+ if (!ekey)
+ {
+ *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ goto on_error;
+ }
+
+ eim = eina_hash_find(cache->activ, ekey);
+ if (eim)
+ {
+ evas_cache_image_drop(im);
+ goto on_ok;
+ }
+
+ eim = eina_hash_find(cache->inactiv, ekey);
+ if (eim)
+ {
+ _evas_cache_engine_image_remove_activ(cache, eim);
+ _evas_cache_engine_image_make_active(cache, eim, ekey);
+ evas_cache_image_drop(im);
+ goto on_ok;
+ }
+
+ eim = _evas_cache_engine_image_alloc(cache, im, ekey);
+ if (!eim)
+ {
+ *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ return NULL;
+ }
+
+ *error = cache->func.constructor(eim, data);
+ if (*error != EVAS_LOAD_ERROR_NONE) goto on_error;
+ if (cache->func.debug) cache->func.debug("constructor-engine", eim);
+
+on_ok:
+ eim->references++;
+ return eim;
+
+on_error:
+ if (!eim)
+ {
+ if (im) evas_cache_image_drop(im);
+ }
+ else _evas_cache_engine_image_dealloc(cache, eim);
+
+ return NULL;
+}
+
+EVAS_API void
evas_cache_engine_image_drop(Engine_Image_Entry *eim)
{
Evas_Cache_Engine_Image *cache;
@@ -314,7 +383,7 @@ evas_cache_engine_image_drop(Engine_Image_Entry *eim)
}
}
-EAPI Engine_Image_Entry *
+EVAS_API Engine_Image_Entry *
evas_cache_engine_image_dirty(Engine_Image_Entry *eim,
unsigned int x, unsigned int y,
unsigned int w, unsigned int h)
@@ -397,7 +466,7 @@ on_error:
return NULL;
}
-EAPI Engine_Image_Entry *
+EVAS_API Engine_Image_Entry *
evas_cache_engine_image_alone(Engine_Image_Entry *eim, void *data)
{
Evas_Cache_Engine_Image *cache;
@@ -448,7 +517,7 @@ on_error:
return NULL;
}
-EAPI Engine_Image_Entry *
+EVAS_API Engine_Image_Entry *
evas_cache_engine_image_copied_data(Evas_Cache_Engine_Image *cache,
unsigned int w, unsigned int h,
DATA32 *image_data, int alpha,
@@ -462,7 +531,7 @@ evas_cache_engine_image_copied_data(Evas_Cache_Engine_Image *cache,
return _evas_cache_engine_image_push_dirty(cache, im, engine_data);
}
-EAPI Engine_Image_Entry *
+EVAS_API Engine_Image_Entry *
evas_cache_engine_image_data(Evas_Cache_Engine_Image *cache,
unsigned int w, unsigned int h,
DATA32 *image_data, int alpha,
@@ -475,7 +544,7 @@ evas_cache_engine_image_data(Evas_Cache_Engine_Image *cache,
return _evas_cache_engine_image_push_dirty(cache, im, engine_data);
}
-EAPI Engine_Image_Entry *
+EVAS_API Engine_Image_Entry *
evas_cache_engine_image_size_set(Engine_Image_Entry *eim,
unsigned int w, unsigned int h)
{
@@ -527,7 +596,7 @@ on_error:
return NULL;
}
-EAPI void
+EVAS_API void
evas_cache_engine_image_load_data(Engine_Image_Entry *eim)
{
Evas_Cache_Engine_Image *cache;
@@ -552,7 +621,7 @@ evas_cache_engine_image_load_data(Engine_Image_Entry *eim)
eim->flags.loaded = 1;
}
-EAPI Engine_Image_Entry *
+EVAS_API Engine_Image_Entry *
evas_cache_engine_image_engine(Evas_Cache_Engine_Image *cache,
void *engine_data)
{
@@ -581,7 +650,7 @@ on_error:
return NULL;
}
-EAPI void
+EVAS_API void
evas_cache_engine_image_colorspace(Engine_Image_Entry *eim,
Evas_Colorspace cspace, void *engine_data)
{
@@ -596,7 +665,7 @@ evas_cache_engine_image_colorspace(Engine_Image_Entry *eim,
cache->func.debug("cosntructor-colorspace-engine", eim);
}
-EAPI void
+EVAS_API void
evas_cache_engine_parent_not_needed(Engine_Image_Entry *eim)
{
assert(eim);
diff --git a/src/lib/evas/cache/evas_cache_image.c b/src/lib/evas/cache/evas_cache_image.c
index 9608c2188a..8844ad95f9 100644
--- a/src/lib/evas/cache/evas_cache_image.c
+++ b/src/lib/evas/cache/evas_cache_image.c
@@ -194,7 +194,6 @@ _evas_cache_image_entry_delete(Evas_Cache_Image *cache, Image_Entry *ie)
if ((cache) && (cache->func.dealloc)) cache->func.dealloc(ie);
}
-#if 0
static Eina_Bool
_timestamp_compare(Image_Timestamp *tstamp, struct stat *st)
{
@@ -227,7 +226,6 @@ _timestamp_build(Image_Timestamp *tstamp, struct stat *st)
#endif
#endif
}
-#endif
static Image_Entry *
_evas_cache_image_entry_new(Evas_Cache_Image *cache,
@@ -388,6 +386,8 @@ _evas_cache_image_preloaded_notify(Image_Entry *ie)
ie->targets = (Evas_Cache_Target *)
eina_inlist_remove(EINA_INLIST_GET(ie->targets),
EINA_INLIST_GET(ie->targets));
+ if (ie->load_opts.skip_head && !tmp->delete_me && !tmp->preload_cancel)
+ _evas_image_preload_update((void*)tmp->target, ie->f);
if (!tmp->delete_me && tmp->preloaded_cb)
tmp->preloaded_cb(tmp->preloaded_data);
if (!tmp->preload_cancel)
@@ -547,21 +547,21 @@ _evas_cache_image_entry_preload_remove(Image_Entry *ie, const Eo *target, Eina_B
// evas_cache_image_drop(ie);
}
-EAPI int
+EVAS_API int
evas_cache_image_usage_get(Evas_Cache_Image *cache)
{
if (!cache) return 0;
return cache->usage;
}
-EAPI int
+EVAS_API int
evas_cache_image_get(Evas_Cache_Image *cache)
{
if (!cache) return 0;
return cache->limit;
}
-EAPI void
+EVAS_API void
evas_cache_image_set(Evas_Cache_Image *cache, unsigned int limit)
{
if (!cache) return;
@@ -573,7 +573,7 @@ evas_cache_image_set(Evas_Cache_Image *cache, unsigned int limit)
evas_cache_image_flush(cache);
}
-EAPI Evas_Cache_Image *
+EVAS_API Evas_Cache_Image *
evas_cache_image_init(const Evas_Cache_Image_Func *cb)
{
Evas_Cache_Image *cache;
@@ -602,7 +602,7 @@ _evas_cache_image_free_cb(EINA_UNUSED const Eina_Hash *hash, EINA_UNUSED const v
return EINA_TRUE;
}
-EAPI void
+EVAS_API void
evas_cache_image_shutdown(Evas_Cache_Image *cache)
{
Eina_List *delete_list;
@@ -750,7 +750,7 @@ _evas_cache_image_loadopts_append(char *hkey, Evas_Image_Load_Opts **plo)
return offset;
}
-EAPI Image_Entry *
+EVAS_API Image_Entry *
evas_cache_image_mmap_request(Evas_Cache_Image *cache,
Eina_File *f, const char *key,
Evas_Image_Load_Opts *lo, int *error)
@@ -777,7 +777,7 @@ evas_cache_image_mmap_request(Evas_Cache_Image *cache,
/* generate hkey from file+key+load opts */
file_length = sizeof (Eina_File*) * 2;
key_length = key ? strlen(key) : 6;
- size = file_length + key_length + 132;
+ size = file_length + key_length + 400; // enough padding for loadopts_append
hkey = alloca(sizeof (char) * size);
pf = (char*) &f;
for (size = 0, i = 0; i < sizeof (Eina_File*); i++)
@@ -848,7 +848,158 @@ evas_cache_image_mmap_request(Evas_Cache_Image *cache,
return im;
}
-EAPI void
+
+EVAS_API Image_Entry *
+evas_cache_image_request(Evas_Cache_Image *cache, const char *file,
+ const char *key, Evas_Image_Load_Opts *lo, int *error)
+{
+ const char *ckey = "(null)";
+ char *hkey;
+ Image_Entry *im;
+ size_t size;
+ int stat_done = 0, stat_failed = 0;
+ size_t file_length;
+ size_t key_length;
+ struct stat st;
+ Image_Timestamp tstamp;
+ Evas_Image_Load_Opts tlo;
+ Eina_Bool skip = lo->skip_head;
+
+ if (!file)
+ {
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ return NULL;
+ }
+
+ /* generate hkey from file+key+load opts */
+ file_length = strlen(file);
+ key_length = key ? strlen(key) : 6;
+ size = file_length + key_length + 132;
+ hkey = alloca(sizeof (char) * size);
+ memcpy(hkey, file, file_length);
+ size = file_length;
+ memcpy(hkey + size, "//://", 5);
+ size += 5;
+ if (key) ckey = key;
+ memcpy(hkey + size, ckey, key_length);
+ size += key_length;
+ size += _evas_cache_image_loadopts_append(hkey + size, &lo);
+ tlo = *lo;
+ tlo.skip_head = skip;
+
+ /* find image by key in active hash */
+ SLKL(engine_lock);
+ im = eina_hash_find(cache->activ, hkey);
+ if ((im) && (!im->load_failed))
+ {
+ int ok = 1;
+
+ stat_done = 1;
+ if (stat(file, &st) < 0)
+ {
+ stat_failed = 1;
+ ok = 0;
+ }
+ else if (!_timestamp_compare(&(im->tstamp), &st)) ok = 0;
+
+ if (ok) goto on_ok;
+ /* image we found doesn't match what's on disk (stat info wise)
+ * so dirty the active cache entry so we never find it again. this
+ * also implicitly guarantees that we only have 1 active copy
+ * of an image at a given key. we wither find it and keep re-reffing
+ * it or we dirty it and get it out */
+ _evas_cache_image_dirty_add(im);
+ im = NULL;
+ }
+ else if ((im) && (im->load_failed))
+ {
+ _evas_cache_image_dirty_add(im);
+ im = NULL;
+ }
+
+ /* find image by key in inactive/lru hash */
+ im = eina_hash_find(cache->inactiv, hkey);
+ if ((im) && (!im->load_failed))
+ {
+ int ok = 1;
+
+ if (!stat_done)
+ {
+ stat_done = 1;
+ if (stat(file, &st) < 0)
+ {
+ stat_failed = 1;
+ ok = 0;
+ }
+ else if (!_timestamp_compare(&(im->tstamp), &st)) ok = 0;
+ }
+ else if (!_timestamp_compare(&(im->tstamp), &st)) ok = 0;
+
+ if (ok)
+ {
+ /* remove from lru and make it active again */
+ _evas_cache_image_lru_del(im);
+ _evas_cache_image_activ_add(im);
+ goto on_ok;
+ }
+ /* as active cache find - if we match in lru and its invalid, dirty */
+ _evas_cache_image_dirty_add(im);
+ /* this image never used, so it have to be deleted */
+ _evas_cache_image_entry_delete(cache, im);
+ im = NULL;
+ }
+ else if ((im) && (im->load_failed))
+ {
+ /* as active cache find - if we match in lru and its invalid, dirty */
+ _evas_cache_image_dirty_add(im);
+ /* this image never used, so it have to be deleted */
+ _evas_cache_image_entry_delete(cache, im);
+ im = NULL;
+ }
+ if (stat_failed) goto on_stat_error;
+
+ if (!stat_done)
+ {
+ if (stat(file, &st) < 0) goto on_stat_error;
+ }
+ _timestamp_build(&tstamp, &st);
+ im = _evas_cache_image_entry_new(cache, hkey, &tstamp, NULL,
+ file, key, &tlo, error);
+ if (!im) goto on_stat_error;
+ if (cache->func.debug) cache->func.debug("request", im);
+
+on_ok:
+ *error = EVAS_LOAD_ERROR_NONE;
+//// SLKL(im->lock);
+ im->references++;
+//// SLKU(im->lock);
+ SLKU(engine_lock);
+ return im;
+
+on_stat_error:
+#ifndef _WIN32
+ if ((errno == ENOENT) || (errno == ENOTDIR) ||
+ (errno == ENAMETOOLONG) || (errno == ELOOP))
+#else
+ if (errno == ENOENT)
+#endif
+ *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST;
+#ifndef _WIN32
+ else if ((errno == ENOMEM) || (errno == EOVERFLOW))
+#else
+ else if (errno == ENOMEM)
+#endif
+ *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ else if (errno == EACCES)
+ *error = EVAS_LOAD_ERROR_PERMISSION_DENIED;
+ else
+ *error = EVAS_LOAD_ERROR_GENERIC;
+
+ SLKU(engine_lock);
+ return NULL;
+}
+
+EVAS_API void
evas_cache_image_ref(Image_Entry *im)
{
SLKL(engine_lock);
@@ -856,7 +1007,7 @@ evas_cache_image_ref(Image_Entry *im)
SLKU(engine_lock);
}
-EAPI void
+EVAS_API void
evas_cache_image_drop(Image_Entry *im)
{
Evas_Cache_Image *cache;
@@ -897,7 +1048,7 @@ evas_cache_image_drop(Image_Entry *im)
}
}
-EAPI void
+EVAS_API void
evas_cache_image_data_not_needed(Image_Entry *im)
{
int references;
@@ -910,7 +1061,7 @@ evas_cache_image_data_not_needed(Image_Entry *im)
SLKU(engine_lock);
}
-EAPI Image_Entry *
+EVAS_API Image_Entry *
evas_cache_image_dirty(Image_Entry *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h)
{
Image_Entry *im_dirty = im;
@@ -949,7 +1100,7 @@ on_error:
return NULL;
}
-EAPI Image_Entry *
+EVAS_API Image_Entry *
evas_cache_image_alone(Image_Entry *im)
{
Evas_Cache_Image *cache;
@@ -968,9 +1119,9 @@ evas_cache_image_alone(Image_Entry *im)
}
else
{
- im_dirty = evas_cache_image_copied_data(cache, im->w, im->h,
- evas_cache_image_pixels(im),
- im->flags.alpha,
+ im_dirty = evas_cache_image_copied_data(cache, im->w, im->h,
+ evas_cache_image_pixels(im),
+ im->flags.alpha,
im->space);
if (!im_dirty) goto on_error;
if (cache->func.debug) cache->func.debug("dirty-src", im);
@@ -986,9 +1137,9 @@ on_error:
return NULL;
}
-EAPI Image_Entry *
-evas_cache_image_copied_data(Evas_Cache_Image *cache,
- unsigned int w, unsigned int h,
+EVAS_API Image_Entry *
+evas_cache_image_copied_data(Evas_Cache_Image *cache,
+ unsigned int w, unsigned int h,
DATA32 *image_data, int alpha,
Evas_Colorspace cspace)
{
@@ -1021,7 +1172,7 @@ evas_cache_image_copied_data(Evas_Cache_Image *cache,
return im;
}
-EAPI Image_Entry *
+EVAS_API Image_Entry *
evas_cache_image_data(Evas_Cache_Image *cache, unsigned int w, unsigned int h,
DATA32 *image_data, int alpha, Evas_Colorspace cspace)
{
@@ -1054,7 +1205,7 @@ evas_cache_image_data(Evas_Cache_Image *cache, unsigned int w, unsigned int h,
return im;
}
-EAPI void
+EVAS_API void
evas_cache_image_surface_alloc(Image_Entry *im, unsigned int w, unsigned int h)
{
Evas_Cache_Image *cache = im->cache;
@@ -1069,7 +1220,7 @@ evas_cache_image_surface_alloc(Image_Entry *im, unsigned int w, unsigned int h)
if (cache->func.debug) cache->func.debug("surface-alloc", im);
}
-EAPI Image_Entry *
+EVAS_API Image_Entry *
evas_cache_image_size_set(Image_Entry *im, unsigned int w, unsigned int h)
{
Evas_Cache_Image *cache;
@@ -1120,7 +1271,7 @@ on_error:
return NULL;
}
-EAPI int
+EVAS_API int
evas_cache_image_load_data(Image_Entry *im)
{
Eina_Bool preload = EINA_FALSE;
@@ -1178,7 +1329,7 @@ evas_cache_image_load_data(Image_Entry *im)
return error;
}
-EAPI void
+EVAS_API void
evas_cache_image_unload_data(Image_Entry *im)
{
if (!im->cache) return;
@@ -1200,7 +1351,7 @@ evas_cache_image_unload_data(Image_Entry *im)
}
SLKL(im->lock_cancel);
- if ((!im->flags.loaded) || (!im->file && !im->f) || (!im->info.module) ||
+ if ((!im->flags.loaded) || (!im->file && !im->f) || (!im->info.module) ||
(im->flags.dirty))
{
SLKU(im->lock_cancel);
@@ -1222,7 +1373,7 @@ _evas_cache_image_unload_cb(EINA_UNUSED const Eina_Hash *hash, EINA_UNUSED const
return EINA_TRUE;
}
-EAPI void
+EVAS_API void
evas_cache_image_unload_all(Evas_Cache_Image *cache)
{
Image_Entry *im;
@@ -1240,32 +1391,32 @@ evas_cache_image_unload_all(Evas_Cache_Image *cache)
static int async_frozen = 0;
-EAPI int
+EVAS_API int
evas_cache_async_frozen_get(void)
{
return async_frozen;
}
-EAPI void
+EVAS_API void
evas_cache_async_freeze(void)
{
async_frozen++;
}
-EAPI void
+EVAS_API void
evas_cache_async_thaw(void)
{
async_frozen--;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_cache_image_is_loaded(Image_Entry *im)
{
if (im->flags.loaded) return EINA_TRUE;
return EINA_FALSE;
}
-EAPI void
+EVAS_API void
evas_cache_image_preload_data(Image_Entry *im, const Eo *target, void (*preloaded_cb)(void *), void *preloaded_data)
{
RGBA_Image *img = (RGBA_Image *)im;
@@ -1287,7 +1438,7 @@ evas_cache_image_preload_data(Image_Entry *im, const Eo *target, void (*preloade
evas_cache_image_drop(im);
}
-EAPI void
+EVAS_API void
evas_cache_image_preload_cancel(Image_Entry *im, const Eo *target, Eina_Bool force)
{
if (!target) return;
@@ -1346,13 +1497,13 @@ _dump_cache(Evas_Cache_Image *cache)
}
#endif
-EAPI int
+EVAS_API int
evas_cache_image_flush(Evas_Cache_Image *cache)
{
if (!cache) return 0;
#ifdef CACHEDUMP
_dump_cache(cache);
-#endif
+#endif
if (cache->limit == (unsigned int)-1) return -1;
SLKL(engine_lock);
@@ -1380,7 +1531,7 @@ evas_cache_image_flush(Evas_Cache_Image *cache)
return cache->usage;
}
-EAPI Image_Entry *
+EVAS_API Image_Entry *
evas_cache_image_empty(Evas_Cache_Image *cache)
{
int err;
@@ -1395,7 +1546,7 @@ evas_cache_image_empty(Evas_Cache_Image *cache)
return im;
}
-EAPI void
+EVAS_API void
evas_cache_image_colorspace(Image_Entry *im, Evas_Colorspace cspace)
{
if (!im->cache) return;
@@ -1408,7 +1559,7 @@ done:
evas_cache_image_drop(im);
}
-EAPI void *
+EVAS_API void *
evas_cache_private_from_image_entry_get(Image_Entry *im)
{
void *data;
@@ -1419,21 +1570,21 @@ evas_cache_private_from_image_entry_get(Image_Entry *im)
return data;
}
-EAPI void *
+EVAS_API void *
evas_cache_private_get(Evas_Cache_Image *cache)
{
if (!cache) return NULL;
return cache->data;
}
-EAPI void
+EVAS_API void
evas_cache_private_set(Evas_Cache_Image *cache, const void *data)
{
if (!cache) return;
cache->data = (void *)data;
}
-EAPI DATA32 *
+EVAS_API DATA32 *
evas_cache_image_pixels(Image_Entry *im)
{
if (!im->cache) return NULL;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_alpha.c b/src/lib/evas/canvas/efl_canvas_alpha_animation.c
index c0bca11101..913a826a04 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_alpha.c
+++ b/src/lib/evas/canvas/efl_canvas_alpha_animation.c
@@ -1,10 +1,10 @@
-#include "efl_canvas_animation_alpha_private.h"
+#include "efl_canvas_alpha_animation_private.h"
-#define MY_CLASS EFL_CANVAS_ANIMATION_ALPHA_CLASS
+#define MY_CLASS EFL_CANVAS_ALPHA_ANIMATION_CLASS
EOLIAN static void
-_efl_canvas_animation_alpha_alpha_set(Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Alpha_Data *pd,
+_efl_canvas_alpha_animation_alpha_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Alpha_Animation_Data *pd,
double from_alpha,
double to_alpha)
{
@@ -13,8 +13,8 @@ _efl_canvas_animation_alpha_alpha_set(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_alpha_alpha_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Alpha_Data *pd,
+_efl_canvas_alpha_animation_alpha_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Alpha_Animation_Data *pd,
double *from_alpha,
double *to_alpha)
{
@@ -26,8 +26,8 @@ _efl_canvas_animation_alpha_alpha_get(const Eo *eo_obj EINA_UNUSED,
EOLIAN static double
-_efl_canvas_animation_alpha_efl_canvas_animation_animation_apply(Eo *eo_obj,
- Efl_Canvas_Animation_Alpha_Data *pd EINA_UNUSED,
+_efl_canvas_alpha_animation_efl_canvas_animation_animation_apply(Eo *eo_obj,
+ Efl_Canvas_Alpha_Animation_Data *pd EINA_UNUSED,
double progress,
Efl_Canvas_Object *target)
{
@@ -50,8 +50,8 @@ _efl_canvas_animation_alpha_efl_canvas_animation_animation_apply(Eo *eo_obj,
}
EOLIAN static Efl_Object *
-_efl_canvas_animation_alpha_efl_object_constructor(Eo *eo_obj,
- Efl_Canvas_Animation_Alpha_Data *pd)
+_efl_canvas_alpha_animation_efl_object_constructor(Eo *eo_obj,
+ Efl_Canvas_Alpha_Animation_Data *pd)
{
eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
@@ -61,4 +61,4 @@ _efl_canvas_animation_alpha_efl_object_constructor(Eo *eo_obj,
return eo_obj;
}
-#include "efl_canvas_animation_alpha.eo.c"
+#include "efl_canvas_alpha_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_animation_alpha.eo b/src/lib/evas/canvas/efl_canvas_alpha_animation.eo
index d0b18f4afc..f466c00e79 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_alpha.eo
+++ b/src/lib/evas/canvas/efl_canvas_alpha_animation.eo
@@ -1,4 +1,4 @@
-class Efl.Canvas.Animation_Alpha extends Efl.Canvas.Animation
+class Efl.Canvas.Alpha_Animation extends Efl.Canvas.Animation
{
[[Animated alpha blending effect.
@@ -9,7 +9,7 @@ class Efl.Canvas.Animation_Alpha extends Efl.Canvas.Animation
@since 1.24
]]
c_prefix: efl_animation_alpha;
- data: Efl_Canvas_Animation_Alpha_Data;
+ data: Efl_Canvas_Alpha_Animation_Data;
methods {
@property alpha {
[[Alpha range to animate. $[0.0] means the object is transparent and $[1.0] means
diff --git a/src/lib/evas/canvas/efl_canvas_alpha_animation_private.h b/src/lib/evas/canvas/efl_canvas_alpha_animation_private.h
new file mode 100644
index 0000000000..d167f458f7
--- /dev/null
+++ b/src/lib/evas/canvas/efl_canvas_alpha_animation_private.h
@@ -0,0 +1,19 @@
+#define EFL_ANIMATION_PROTECTED
+
+#include "evas_common_private.h"
+#include <Ecore.h>
+#include "efl_canvas_animation_private.h"
+
+#define EFL_ALPHA_ANIMATION_DATA_GET(o, pd) \
+ Efl_Canvas_Alpha_Animation_Data *pd = efl_data_scope_get(o, EFL_CANVAS_ALPHA_ANIMATION_CLASS)
+
+typedef struct _Efl_Canvas_Alpha_Animation_Property
+{
+ double alpha;
+} Efl_Canvas_Alpha_Animation_Property;
+
+typedef struct _Efl_Canvas_Alpha_Animation_Data
+{
+ Efl_Canvas_Alpha_Animation_Property from;
+ Efl_Canvas_Alpha_Animation_Property to;
+} Efl_Canvas_Alpha_Animation_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_animation.eo b/src/lib/evas/canvas/efl_canvas_animation.eo
index 665b3b509e..b7bcb0452f 100644
--- a/src/lib/evas/canvas/efl_canvas_animation.eo
+++ b/src/lib/evas/canvas/efl_canvas_animation.eo
@@ -9,7 +9,7 @@ class Efl.Canvas.Animation extends Efl.Object implements Efl.Playable
The value of the changed properties moves smoothly as the provided progress value
evolves from $[0] to $[1].
- For example implementations see @Efl.Canvas.Animation_Translate or @Efl.Canvas.Animation_Scale.
+ For example implementations see @Efl.Canvas.Translate_Animation or @Efl.Canvas.Scale_Animation.
Note: Unless @.final_state_keep is used, when an animation finishes any effect it introduced on the object is
removed. This means that if the animation does not end in the object's initial state there will be a noticeable
@@ -103,7 +103,7 @@ class Efl.Canvas.Animation extends Efl.Object implements Efl.Playable
animation_apply {
[[Overwrite this method to implement your own animation subclasses.
- This is used for example by @Efl.Canvas.Animation_Translate or @Efl.Canvas.Animation_Scale.
+ This is used for example by @Efl.Canvas.Translate_Animation or @Efl.Canvas.Scale_Animation.
Subclasses should call their parent's @.animation_apply to get the adjusted $progress value
and then perform the animation by modifying the $target's properties.
diff --git a/src/lib/evas/canvas/efl_canvas_animation_alpha_private.h b/src/lib/evas/canvas/efl_canvas_animation_alpha_private.h
deleted file mode 100644
index fc0b9e655f..0000000000
--- a/src/lib/evas/canvas/efl_canvas_animation_alpha_private.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#define EFL_ANIMATION_PROTECTED
-
-#include "evas_common_private.h"
-#include <Ecore.h>
-#include "efl_canvas_animation_private.h"
-
-#define EFL_ANIMATION_ALPHA_DATA_GET(o, pd) \
- Efl_Canvas_Animation_Alpha_Data *pd = efl_data_scope_get(o, EFL_CANVAS_ANIMATION_ALPHA_CLASS)
-
-typedef struct _Efl_Canvas_Animation_Alpha_Property
-{
- double alpha;
-} Efl_Canvas_Animation_Alpha_Property;
-
-typedef struct _Efl_Canvas_Animation_Alpha_Data
-{
- Efl_Canvas_Animation_Alpha_Property from;
- Efl_Canvas_Animation_Alpha_Property to;
-} Efl_Canvas_Animation_Alpha_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group_private.h b/src/lib/evas/canvas/efl_canvas_animation_group_private.h
deleted file mode 100644
index 685e8f6063..0000000000
--- a/src/lib/evas/canvas/efl_canvas_animation_group_private.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#define EFL_ANIMATION_PROTECTED
-
-#include "evas_common_private.h"
-#include <Ecore.h>
-
-#define MY_CLASS EFL_CANVAS_ANIMATION_GROUP_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
-#define EFL_ANIMATION_GROUP_DATA_GET(o, pd) \
- Efl_Canvas_Animation_Group_Data *pd = efl_data_scope_get(o, EFL_CANVAS_ANIMATION_GROUP_CLASS)
-
-typedef struct _Efl_Canvas_Animation_Group_Data
-{
- Eina_List *animations;
-} Efl_Canvas_Animation_Group_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_rotate_private.h b/src/lib/evas/canvas/efl_canvas_animation_rotate_private.h
deleted file mode 100644
index 64c5887959..0000000000
--- a/src/lib/evas/canvas/efl_canvas_animation_rotate_private.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#define EFL_ANIMATION_PROTECTED
-
-#include "evas_common_private.h"
-#include <Ecore.h>
-#include "efl_canvas_animation_private.h"
-
-#define EFL_ANIMATION_ROTATE_DATA_GET(o, pd) \
- Efl_Canvas_Animation_Rotate_Data *pd = efl_data_scope_get(o, EFL_CANVAS_ANIMATION_ROTATE_CLASS)
-
-typedef struct _Efl_Canvas_Animation_Rotate_Property
-{
- double degree;
-} Efl_Canvas_Animation_Rotate_Property;
-
-typedef struct _Efl_Canvas_Animation_Rotate_Relative_Pivot
-{
- Efl_Canvas_Object *obj;
- Eina_Vector2 pos;
-} Efl_Canvas_Animation_Rotate_Relative_Pivot;
-
-typedef struct _Efl_Canvas_Animation_Rotate_Data
-{
- Efl_Canvas_Animation_Rotate_Property from;
- Efl_Canvas_Animation_Rotate_Property to;
-
- Eina_Position2D abs_pivot;
- Efl_Canvas_Animation_Rotate_Relative_Pivot rel_pivot;
-
- Eina_Bool use_rel_pivot;
-} Efl_Canvas_Animation_Rotate_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_scale_private.h b/src/lib/evas/canvas/efl_canvas_animation_scale_private.h
deleted file mode 100644
index 57dc40d725..0000000000
--- a/src/lib/evas/canvas/efl_canvas_animation_scale_private.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#define EFL_ANIMATION_PROTECTED
-
-#include "evas_common_private.h"
-#include <Ecore.h>
-#include "efl_canvas_animation_private.h"
-
-#define EFL_ANIMATION_SCALE_DATA_GET(o, pd) \
- Efl_Canvas_Animation_Scale_Data *pd = efl_data_scope_get(o, EFL_CANVAS_ANIMATION_SCALE_CLASS)
-
-typedef struct _Efl_Canvas_Animation_Scale_Relative_Pivot
-{
- Efl_Canvas_Object *obj;
- Eina_Vector2 pos;
-} Efl_Canvas_Animation_Scale_Relative_Pivot;
-
-typedef struct _Efl_Canvas_Animation_Scale_Data
-{
- Eina_Vector2 from;
- Eina_Vector2 to;
-
- Eina_Position2D pos;
- Efl_Canvas_Animation_Scale_Relative_Pivot rel_pivot;
-
- Eina_Bool use_rel_pivot;
-} Efl_Canvas_Animation_Scale_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_translate_private.h b/src/lib/evas/canvas/efl_canvas_animation_translate_private.h
deleted file mode 100644
index 47665a5984..0000000000
--- a/src/lib/evas/canvas/efl_canvas_animation_translate_private.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#define EFL_ANIMATION_PROTECTED
-
-#include "evas_common_private.h"
-#include <Ecore.h>
-#include "efl_canvas_animation_private.h"
-
-#define EFL_ANIMATION_TRANSLATE_DATA_GET(o, pd) \
- Efl_Canvas_Animation_Translate_Data *pd = efl_data_scope_get(o, EFL_CANVAS_ANIMATION_TRANSLATE_CLASS)
-
-typedef struct _Efl_Canvas_Animation_Translate_Data
-{
- Eina_Position2D from;
- Eina_Position2D to;
-
- Eina_Bool use_rel_move;
-} Efl_Canvas_Animation_Translate_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_types.eot b/src/lib/evas/canvas/efl_canvas_animation_types.eot
index 819b24bcf6..b9387855c1 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_types.eot
+++ b/src/lib/evas/canvas/efl_canvas_animation_types.eot
@@ -1,8 +1,3 @@
-// ----------------------------------------------------------------------------
-// All the below types are for Efl Animation
-
-struct @beta Efl.Canvas.Animation_Player_Event_Running; [[Information of event running]]
-
enum Efl.Canvas.Animation_Repeat_Mode
{
[[Animation repeat mode. @since 1.24]]
diff --git a/src/lib/evas/canvas/efl_canvas_event_grabber.c b/src/lib/evas/canvas/efl_canvas_event_grabber.c
index cea6d86a13..60e44a3d72 100644
--- a/src/lib/evas/canvas/efl_canvas_event_grabber.c
+++ b/src/lib/evas/canvas/efl_canvas_event_grabber.c
@@ -400,7 +400,7 @@ _efl_canvas_event_grabber_freeze_when_visible_get(const Eo *eo_obj EINA_UNUSED,
return pd->freeze;
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_event_grabber_add(Evas *eo_e)
{
eo_e = evas_find(eo_e);
diff --git a/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.c
index ff954ebf02..e6437c8a18 100644
--- a/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.c
@@ -1,11 +1,11 @@
-EAPI void
+EVAS_API void
evas_object_event_grabber_freeze_when_visible_set(Efl_Canvas_Event_Grabber *obj, Eina_Bool set)
{
efl_canvas_event_grabber_freeze_when_visible_set(obj, set);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_event_grabber_freeze_when_visible_get(const Efl_Canvas_Event_Grabber *obj)
{
return efl_canvas_event_grabber_freeze_when_visible_get(obj);
diff --git a/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.h
index 3f1b146196..a226f63ad0 100644
--- a/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_event_grabber_eo.legacy.h
@@ -25,7 +25,7 @@ typedef Eo Efl_Canvas_Event_Grabber;
*
* @ingroup Evas_Object_Event_Grabber_Group
*/
-EAPI void evas_object_event_grabber_freeze_when_visible_set(Efl_Canvas_Event_Grabber *obj, Eina_Bool set);
+EVAS_API void evas_object_event_grabber_freeze_when_visible_set(Efl_Canvas_Event_Grabber *obj, Eina_Bool set);
/**
* @brief Stops the grabber from updating its internal stacking order while
@@ -39,6 +39,6 @@ EAPI void evas_object_event_grabber_freeze_when_visible_set(Efl_Canvas_Event_Gra
*
* @ingroup Evas_Object_Event_Grabber_Group
*/
-EAPI Eina_Bool evas_object_event_grabber_freeze_when_visible_get(const Efl_Canvas_Event_Grabber *obj);
+EVAS_API Eina_Bool evas_object_event_grabber_freeze_when_visible_get(const Efl_Canvas_Event_Grabber *obj);
#endif
diff --git a/src/lib/evas/canvas/efl_canvas_group.eo b/src/lib/evas/canvas/efl_canvas_group.eo
index 500b521f88..31105a0fc6 100644
--- a/src/lib/evas/canvas/efl_canvas_group.eo
+++ b/src/lib/evas/canvas/efl_canvas_group.eo
@@ -1,4 +1,4 @@
-class Efl.Canvas.Group extends Efl.Canvas.Object
+class Efl.Canvas.Group extends Efl.Canvas.Object implements Efl.Gfx.Filter
{
[[A group object is a container for other canvas objects. Its children
move along their parent and are often clipped with a common clipper.
@@ -127,6 +127,8 @@ class Efl.Canvas.Group extends Efl.Canvas.Object
Efl.Gfx.Color.color { set; }
Efl.Gfx.Entity.visible { set; }
Efl.Gfx.Entity.position { set; }
+ Efl.Gfx.Entity.size { set; }
+ Efl.Gfx.Filter.filter_program { set; }
Efl.Canvas.Object.clipper { set; }
Efl.Canvas.Object.no_render { set; }
Efl.Canvas.Object.paragraph_direction { get; set; }
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group.c b/src/lib/evas/canvas/efl_canvas_group_animation.c
index b6a771501f..f2e068c8d1 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group.c
+++ b/src/lib/evas/canvas/efl_canvas_group_animation.c
@@ -1,14 +1,20 @@
-#include "efl_canvas_animation_group_private.h"
+#include "efl_canvas_group_animation_private.h"
EOLIAN static void
-_efl_canvas_animation_group_animation_add(Eo *eo_obj,
- Efl_Canvas_Animation_Group_Data *pd,
+_efl_canvas_group_animation_animation_add(Eo *eo_obj,
+ Efl_Canvas_Group_Animation_Data *pd,
Efl_Canvas_Animation *animation)
{
if (!animation) return;
- double duration = efl_animation_duration_get(efl_super(eo_obj, MY_CLASS));
- efl_animation_duration_set(animation, duration);
+ /* To preserve each animation's duration, group animation's duration is
+ * copied to each animation's duration only if group animation's duration is
+ * set. */
+ if (pd->is_duration_set)
+ {
+ double duration = efl_animation_duration_get(efl_super(eo_obj, MY_CLASS));
+ efl_animation_duration_set(animation, duration);
+ }
Eina_Bool keep_final_state = efl_animation_final_state_keep_get(eo_obj);
efl_animation_final_state_keep_set(animation, keep_final_state);
@@ -18,8 +24,8 @@ _efl_canvas_animation_group_animation_add(Eo *eo_obj,
}
EOLIAN static void
-_efl_canvas_animation_group_animation_del(Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Group_Data *pd,
+_efl_canvas_group_animation_animation_del(Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Group_Animation_Data *pd,
Efl_Canvas_Animation *animation)
{
Eina_List *list;
@@ -39,17 +45,19 @@ _efl_canvas_animation_group_animation_del(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static Eina_Iterator*
-_efl_canvas_animation_group_animations_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Group_Data *pd)
+_efl_canvas_group_animation_animations_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Group_Animation_Data *pd)
{
return eina_list_iterator_new(pd->animations);
}
EOLIAN static void
-_efl_canvas_animation_group_efl_canvas_animation_duration_set(Eo *eo_obj,
- Efl_Canvas_Animation_Group_Data *pd,
+_efl_canvas_group_animation_efl_canvas_animation_duration_set(Eo *eo_obj,
+ Efl_Canvas_Group_Animation_Data *pd,
double duration)
{
+ EINA_SAFETY_ON_FALSE_RETURN(duration >= 0.0);
+
efl_animation_duration_set(efl_super(eo_obj, MY_CLASS), duration);
duration = efl_animation_duration_get(eo_obj);
@@ -59,11 +67,13 @@ _efl_canvas_animation_group_efl_canvas_animation_duration_set(Eo *eo_obj,
{
efl_animation_duration_set(anim, duration);
}
+
+ pd->is_duration_set = EINA_TRUE;
}
EOLIAN static void
-_efl_canvas_animation_group_efl_canvas_animation_final_state_keep_set(Eo *eo_obj,
- Efl_Canvas_Animation_Group_Data *pd,
+_efl_canvas_group_animation_efl_canvas_animation_final_state_keep_set(Eo *eo_obj,
+ Efl_Canvas_Group_Animation_Data *pd,
Eina_Bool keep_final_state)
{
Eina_List *l;
@@ -77,8 +87,8 @@ _efl_canvas_animation_group_efl_canvas_animation_final_state_keep_set(Eo *eo_obj
}
EOLIAN static void
-_efl_canvas_animation_group_efl_canvas_animation_interpolator_set(Eo *eo_obj,
- Efl_Canvas_Animation_Group_Data *pd,
+_efl_canvas_group_animation_efl_canvas_animation_interpolator_set(Eo *eo_obj,
+ Efl_Canvas_Group_Animation_Data *pd,
Efl_Interpolator *interpolator)
{
Eina_List *l;
@@ -92,19 +102,18 @@ _efl_canvas_animation_group_efl_canvas_animation_interpolator_set(Eo *eo_obj,
}
EOLIAN static Efl_Object *
-_efl_canvas_animation_group_efl_object_constructor(Eo *eo_obj,
- Efl_Canvas_Animation_Group_Data *pd)
+_efl_canvas_group_animation_efl_object_constructor(Eo *eo_obj,
+ Efl_Canvas_Group_Animation_Data *pd)
{
eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
pd->animations = NULL;
return eo_obj;
}
EOLIAN static void
-_efl_canvas_animation_group_efl_object_destructor(Eo *eo_obj,
- Efl_Canvas_Animation_Group_Data *pd)
+_efl_canvas_group_animation_efl_object_destructor(Eo *eo_obj,
+ Efl_Canvas_Group_Animation_Data *pd)
{
Efl_Canvas_Animation *anim;
@@ -114,4 +123,4 @@ _efl_canvas_animation_group_efl_object_destructor(Eo *eo_obj,
efl_destructor(efl_super(eo_obj, MY_CLASS));
}
-#include "efl_canvas_animation_group.eo.c"
+#include "efl_canvas_group_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group.eo b/src/lib/evas/canvas/efl_canvas_group_animation.eo
index b4fe40a294..65d2fbd12f 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group.eo
+++ b/src/lib/evas/canvas/efl_canvas_group_animation.eo
@@ -1,15 +1,15 @@
-abstract Efl.Canvas.Animation_Group extends Efl.Canvas.Animation
+abstract Efl.Canvas.Group_Animation extends Efl.Canvas.Animation
{
[[Base class for combined animations (groups of animations that are played together).
This class provides methods to add, remove and retrieve individual animations from the group.
- See for example @Efl.Canvas.Animation_Group_Parallel and @Efl.Canvas.Animation_Group_Sequential.
+ See for example @Efl.Canvas.Parallel_Group_Animation and @Efl.Canvas.Sequential_Group_Animation.
@since 1.24
]]
c_prefix: efl_animation_group;
- data: Efl_Canvas_Animation_Group_Data;
+ data: Efl_Canvas_Group_Animation_Data;
methods {
animation_add {
[[Adds the given animation to the animation group.]]
diff --git a/src/lib/evas/canvas/efl_canvas_group_animation_private.h b/src/lib/evas/canvas/efl_canvas_group_animation_private.h
new file mode 100644
index 0000000000..38b7804533
--- /dev/null
+++ b/src/lib/evas/canvas/efl_canvas_group_animation_private.h
@@ -0,0 +1,16 @@
+#define EFL_ANIMATION_PROTECTED
+
+#include "evas_common_private.h"
+#include <Ecore.h>
+
+#define MY_CLASS EFL_CANVAS_GROUP_ANIMATION_CLASS
+#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
+
+#define EFL_GROUP_ANIMATION_DATA_GET(o, pd) \
+ Efl_Canvas_Group_Animation_Data *pd = efl_data_scope_get(o, EFL_CANVAS_GROUP_ANIMATION_CLASS)
+
+typedef struct _Efl_Canvas_Group_Animation_Data
+{
+ Eina_List *animations;
+ Eina_Bool is_duration_set : 1; //EINA_TRUE if duration is set
+} Efl_Canvas_Group_Animation_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_group_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_group_eo.legacy.c
index 1144c0a22b..3d0fea1308 100644
--- a/src/lib/evas/canvas/efl_canvas_group_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_group_eo.legacy.c
@@ -1,29 +1,29 @@
-EAPI void
+EVAS_API void
evas_object_smart_need_recalculate_set(Efl_Canvas_Group *obj, Eina_Bool value)
{
efl_canvas_group_need_recalculate_set(obj, value);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_smart_need_recalculate_get(const Efl_Canvas_Group *obj)
{
return efl_canvas_group_need_recalculate_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_smart_changed(Efl_Canvas_Group *obj)
{
efl_canvas_group_change(obj);
}
-EAPI void
+EVAS_API void
evas_object_smart_calculate(Efl_Canvas_Group *obj)
{
efl_canvas_group_calculate(obj);
}
-EAPI Eina_Iterator *
+EVAS_API Eina_Iterator *
evas_object_smart_iterator_new(const Efl_Canvas_Group *obj)
{
return efl_canvas_group_members_iterate(obj);
diff --git a/src/lib/evas/canvas/efl_canvas_group_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_group_eo.legacy.h
index f8f45ed286..fed6d7f8a5 100644
--- a/src/lib/evas/canvas/efl_canvas_group_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_group_eo.legacy.h
@@ -34,7 +34,7 @@ typedef Eo Efl_Canvas_Group;
*
* @ingroup Evas_Object_Smart_Group
*/
-EAPI void evas_object_smart_need_recalculate_set(Efl_Canvas_Group *obj, Eina_Bool value);
+EVAS_API void evas_object_smart_need_recalculate_set(Efl_Canvas_Group *obj, Eina_Bool value);
/**
* @brief Indicates that the group's layout needs to be recalculated.
@@ -57,7 +57,7 @@ EAPI void evas_object_smart_need_recalculate_set(Efl_Canvas_Group *obj, Eina_Boo
*
* @ingroup Evas_Object_Smart_Group
*/
-EAPI Eina_Bool evas_object_smart_need_recalculate_get(const Efl_Canvas_Group *obj);
+EVAS_API Eina_Bool evas_object_smart_need_recalculate_get(const Efl_Canvas_Group *obj);
/**
* @brief Marks the object as dirty.
@@ -69,7 +69,7 @@ EAPI Eina_Bool evas_object_smart_need_recalculate_get(const Efl_Canvas_Group *ob
*
* @ingroup Evas_Object_Smart_Group
*/
-EAPI void evas_object_smart_changed(Efl_Canvas_Group *obj);
+EVAS_API void evas_object_smart_changed(Efl_Canvas_Group *obj);
/**
* @brief Triggers an immediate recalculation of this object's geometry.
@@ -79,7 +79,7 @@ EAPI void evas_object_smart_changed(Efl_Canvas_Group *obj);
*
* @ingroup Evas_Object_Smart_Group
*/
-EAPI void evas_object_smart_calculate(Efl_Canvas_Group *obj);
+EVAS_API void evas_object_smart_calculate(Efl_Canvas_Group *obj);
/**
* @brief Returns an iterator over the children of this object, which are
@@ -95,7 +95,7 @@ EAPI void evas_object_smart_calculate(Efl_Canvas_Group *obj);
*
* @ingroup Evas_Object_Smart_Group
*/
-EAPI Eina_Iterator *evas_object_smart_iterator_new(const Efl_Canvas_Group *obj);
+EVAS_API Eina_Iterator *evas_object_smart_iterator_new(const Efl_Canvas_Group *obj);
diff --git a/src/lib/evas/canvas/efl_canvas_image.c b/src/lib/evas/canvas/efl_canvas_image.c
index 1bdd5329ec..d78f1f675b 100644
--- a/src/lib/evas/canvas/efl_canvas_image.c
+++ b/src/lib/evas/canvas/efl_canvas_image.c
@@ -19,19 +19,33 @@ _evas_image_file_unload(Eo *eo_obj)
_evas_image_done_set(eo_obj, obj, o);
o->load_error = EFL_GFX_IMAGE_LOAD_ERROR_NONE;
}
+
+void
+_evas_image_preload_update(Eo *eo_obj, Eina_File *f)
+{
+ Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ if (o->cur->f) return;
+ EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, cur)
+ {
+ cur->f = eina_file_dup(f);
+ }
+ EINA_COW_IMAGE_STATE_WRITE_END(o, cur)
+}
+
Eina_Bool
-_evas_image_file_load(Eo *eo_obj)
+_evas_image_file_load(Eo *eo_obj, Evas_Image_Data *o)
{
Evas_Object_Protected_Data *obj;
- Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
Evas_Image_Load_Opts lo;
const Eina_File *f = efl_file_mmap_get(eo_obj);
const char *key = efl_file_key_get(eo_obj);
int load_error;
+ int frame_index;
- EINA_SAFETY_ON_NULL_RETURN_VAL(f, EINA_FALSE);
+ if (!o->skip_head)
+ EINA_SAFETY_ON_NULL_RETURN_VAL(f, EINA_FALSE);
- if (o->cur->f == f)
+ if (f && (o->cur->f == f))
{
if ((!o->cur->key) && (!key))
return EINA_TRUE;
@@ -42,7 +56,17 @@ _evas_image_file_load(Eo *eo_obj)
obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
evas_object_async_block(obj);
_evas_image_init_set(f, key, eo_obj, obj, o, &lo);
- o->engine_data = ENFN->image_mmap(ENC, o->cur->f, o->cur->key, &load_error, &lo);
+ if (f)
+ o->engine_data = ENFN->image_mmap(ENC, o->cur->f, o->cur->key, &load_error, &lo);
+ else
+ o->engine_data = ENFN->image_load(ENC, efl_file_get(eo_obj), o->cur->key, &load_error, &lo);
+
+ if (_evas_image_animated_get(eo_obj))
+ {
+ frame_index = ENFN->image_animated_frame_get(ENC, o->engine_data);
+ _evas_image_animated_frame_set(eo_obj, frame_index);
+ }
+
o->load_error = _evas_load_error_to_efl_gfx_image_load_error(load_error);
o->buffer_data_set = EINA_FALSE;
_evas_image_done_set(eo_obj, obj, o);
@@ -52,13 +76,35 @@ _evas_image_file_load(Eo *eo_obj)
return EINA_TRUE;
}
+EOLIAN static Eina_Bool
+_efl_canvas_image_efl_file_loaded_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
+{
+ Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ if (!o->skip_head)
+ return efl_file_loaded_get(efl_super(eo_obj, MY_CLASS));
+ return !!o->cur->f;
+}
+
+EOLIAN static const Eina_File *
+_efl_canvas_image_efl_file_mmap_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
+{
+ Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ if (!o->skip_head)
+ return efl_file_mmap_get(efl_super(eo_obj, MY_CLASS));
+ return o->cur->f;
+}
+
EOLIAN static Eina_Error
_efl_canvas_image_efl_file_load(Eo *eo_obj, void *_pd EINA_UNUSED)
{
if (efl_file_loaded_get(eo_obj)) return 0;
- Eina_Error err = efl_file_load(efl_super(eo_obj, MY_CLASS));
+ Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ Eina_Error err = 0;
+
+ if (!o->skip_head)
+ err = efl_file_load(efl_super(eo_obj, MY_CLASS));
if (err) return err;
- if (_evas_image_file_load(eo_obj))
+ if (_evas_image_file_load(eo_obj, o))
return 0;
return EFL_GFX_IMAGE_LOAD_ERROR_DOES_NOT_EXIST;
}
@@ -654,14 +700,14 @@ _image_pixels_set(Evas_Object_Protected_Data *obj,
// note: we release all planes at once
if (o->engine_data)
ENFN->image_free(ENC, o->engine_data);
- o->engine_data = ENFN->image_new_from_copied_data(ENC, w, h, NULL, o->cur->has_alpha, cspace);
+ o->engine_data = ENFN->image_new_from_copied_data(ENC, w, h, NULL, o->cur->has_alpha, (Evas_Colorspace)cspace);
}
else
{
o->buffer_data_set = EINA_TRUE;
o->engine_data = ENFN->image_data_slice_add(ENC, o->engine_data,
slice, copy, w, h, stride,
- cspace, plane, o->cur->has_alpha);
+ (Evas_Colorspace)cspace, plane, o->cur->has_alpha);
}
if (!o->engine_data)
@@ -689,7 +735,7 @@ _image_pixels_set(Evas_Object_Protected_Data *obj,
{
cur->f = NULL;
cur->key = NULL;
- cur->cspace = cspace;
+ cur->cspace = (Evas_Colorspace)cspace;
cur->image.w = w;
cur->image.h = h;
cur->image.stride = int_stride;
@@ -797,7 +843,7 @@ _efl_canvas_image_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED,
goto end;
}
- if (ENFN->image_data_map(ENC, &o->engine_data, &slice, &s, x, y, w, h, cspace, mode, plane))
+ if (ENFN->image_data_map(ENC, &o->engine_data, &slice, &s, x, y, w, h, (Evas_Colorspace)cspace, mode, plane))
{
DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT,
eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(slice));
diff --git a/src/lib/evas/canvas/efl_canvas_image.eo b/src/lib/evas/canvas/efl_canvas_image.eo
index 72e1894f61..230b84a9bc 100644
--- a/src/lib/evas/canvas/efl_canvas_image.eo
+++ b/src/lib/evas/canvas/efl_canvas_image.eo
@@ -16,6 +16,8 @@ class @beta Efl.Canvas.Image extends Efl.Canvas.Image_Internal implements
Efl.Gfx.Buffer.buffer_size { get; }
Efl.Gfx.Buffer.buffer_map;
Efl.Gfx.Buffer.buffer_unmap;
+ Efl.File.loaded { get; }
+ Efl.File.mmap { get; }
Efl.File.load;
Efl.File.unload;
Efl.Gfx.Frame_Controller.animated { get; }
diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo
index dbee3db658..64aad581ea 100644
--- a/src/lib/evas/canvas/efl_canvas_object.eo
+++ b/src/lib/evas/canvas/efl_canvas_object.eo
@@ -1,6 +1,5 @@
import efl_text_types;
-struct @beta Efl.Canvas.Object_Animation_Event; [[Information of animation events]]
struct Efl.Event_Animator_Tick {
[[EFL event animator tick data structure
@@ -11,7 +10,7 @@ struct Efl.Event_Animator_Tick {
abstract Efl.Canvas.Object extends Efl.Loop_Consumer implements Efl.Gfx.Entity, Efl.Gfx.Color, Efl.Gfx.Stack,
Efl.Input.Interface, Efl.Gfx.Hint,
- Efl.Gfx.Mapping, Efl.Canvas.Pointer, Efl.Gesture.Events, Efl.Canvas.Object_Animation
+ Efl.Gfx.Mapping, Efl.Canvas.Pointer, Efl.Canvas.Object_Animation
{
[[Efl canvas object abstract class
@@ -483,10 +482,9 @@ abstract Efl.Canvas.Object extends Efl.Loop_Consumer implements Efl.Gfx.Entity,
return: bool; [[$true if the coordinates are inside the object, $false otherwise]]
}
}
- gesture_manager_get @beta {
- [[Returns current canvas's gesture manager]]
- return: const(Efl.Canvas.Gesture_Manager); [[The gesture manager]]
- }
+ }
+ constructors {
+ Efl.Object.parent;
}
implements {
Efl.Object.constructor;
diff --git a/src/lib/evas/canvas/efl_canvas_object_animation.c b/src/lib/evas/canvas/efl_canvas_object_animation.c
index 3069d067ba..a017f73b96 100644
--- a/src/lib/evas/canvas/efl_canvas_object_animation.c
+++ b/src/lib/evas/canvas/efl_canvas_object_animation.c
@@ -148,7 +148,7 @@ _efl_canvas_object_animation_animation_pause_set(Eo *obj, Efl_Canvas_Object_Anim
_end(obj, pd);
else
_start(obj, pd,(pd->in->speed < 0) ? 1.0 - pd->in->progress : pd->in->progress);
- pd->in->pause_state = pause;
+ if (pd->in) pd->in->pause_state = pause;
}
EOLIAN static Eina_Bool
diff --git a/src/lib/evas/canvas/efl_canvas_object_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_object_eo.legacy.c
index 853f7da502..2d9a5a0682 100644
--- a/src/lib/evas/canvas/efl_canvas_object_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_object_eo.legacy.c
@@ -1,102 +1,102 @@
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_pointer_mode_set(Efl_Canvas_Object *obj, Evas_Object_Pointer_Mode pointer_mode)
{
return efl_canvas_object_pointer_mode_set(obj, (Efl_Input_Object_Pointer_Mode)pointer_mode);
}
-EAPI Evas_Object_Pointer_Mode
+EVAS_API Evas_Object_Pointer_Mode
evas_object_pointer_mode_get(const Efl_Canvas_Object *obj)
{
return (Evas_Object_Pointer_Mode)efl_canvas_object_pointer_mode_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_clip_set(Efl_Canvas_Object *obj, Efl_Canvas_Object *clipper)
{
efl_canvas_object_clipper_set(obj, clipper);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_clip_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_clipper_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_repeat_events_set(Efl_Canvas_Object *obj, Eina_Bool repeat)
{
efl_canvas_object_repeat_events_set(obj, repeat);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_repeat_events_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_repeat_events_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_focus_set(Efl_Canvas_Object *obj, Eina_Bool focus)
{
efl_canvas_object_key_focus_set(obj, focus);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_focus_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_key_focus_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_precise_is_inside_set(Efl_Canvas_Object *obj, Eina_Bool precise)
{
efl_canvas_object_precise_is_inside_set(obj, precise);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_precise_is_inside_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_precise_is_inside_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_propagate_events_set(Efl_Canvas_Object *obj, Eina_Bool propagate)
{
efl_canvas_object_propagate_events_set(obj, propagate);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_propagate_events_get(const Efl_Canvas_Object *obj)
{
if (!efl_isa(obj, EFL_CANVAS_OBJECT_CLASS)) return EINA_FALSE;
return efl_canvas_object_propagate_events_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_pass_events_set(Efl_Canvas_Object *obj, Eina_Bool pass)
{
efl_canvas_object_pass_events_set(obj, pass);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_pass_events_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_pass_events_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_anti_alias_set(Efl_Canvas_Object *obj, Eina_Bool anti_alias)
{
efl_canvas_object_anti_alias_set(obj, anti_alias);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_anti_alias_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_anti_alias_get(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_smart_parent_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_render_parent_get(obj);
@@ -134,13 +134,13 @@ _efl_text_bidirectional_type_to_evas_bidi_direction_type(Efl_Text_Bidirectional_
#undef CONVERT_TYPE
}
-EAPI void
+EVAS_API void
evas_object_paragraph_direction_set(Efl_Canvas_Object *obj, Evas_BiDi_Direction dir)
{
efl_canvas_object_paragraph_direction_set(obj, _evas_bidi_direction_type_to_efl_text_bidirectional_type(dir));
}
-EAPI Evas_BiDi_Direction
+EVAS_API Evas_BiDi_Direction
evas_object_paragraph_direction_get(const Efl_Canvas_Object *obj)
{
return _efl_text_bidirectional_type_to_evas_bidi_direction_type(efl_canvas_object_paragraph_direction_get(obj));
diff --git a/src/lib/evas/canvas/efl_canvas_object_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_object_eo.legacy.h
index b8cd72787f..c78d89d48c 100644
--- a/src/lib/evas/canvas/efl_canvas_object_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_object_eo.legacy.h
@@ -58,7 +58,7 @@ typedef struct _Efl_Event_Animator_Tick
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_pointer_mode_set(Efl_Canvas_Object *obj, Evas_Object_Pointer_Mode pointer_mode);
+EVAS_API Eina_Bool evas_object_pointer_mode_set(Efl_Canvas_Object *obj, Evas_Object_Pointer_Mode pointer_mode);
/**
* @brief Low-level pointer behaviour.
@@ -85,7 +85,7 @@ EAPI Eina_Bool evas_object_pointer_mode_set(Efl_Canvas_Object *obj, Evas_Object_
*
* @ingroup Evas_Object_Group
*/
-EAPI Evas_Object_Pointer_Mode evas_object_pointer_mode_get(const Efl_Canvas_Object *obj);
+EVAS_API Evas_Object_Pointer_Mode evas_object_pointer_mode_get(const Efl_Canvas_Object *obj);
@@ -131,7 +131,7 @@ EAPI Evas_Object_Pointer_Mode evas_object_pointer_mode_get(const Efl_Canvas_Obje
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_clip_set(Efl_Canvas_Object *obj, Efl_Canvas_Object *clip) EINA_ARG_NONNULL(2);
+EVAS_API void evas_object_clip_set(Efl_Canvas_Object *obj, Efl_Canvas_Object *clip) EINA_ARG_NONNULL(2);
/**
* @brief Get the object clipping @c obj (if any).
@@ -146,7 +146,7 @@ EAPI void evas_object_clip_set(Efl_Canvas_Object *obj, Efl_Canvas_Object *clip)
*
* @ingroup Evas_Object_Group
*/
-EAPI Efl_Canvas_Object *evas_object_clip_get(const Efl_Canvas_Object *obj);
+EVAS_API Efl_Canvas_Object *evas_object_clip_get(const Efl_Canvas_Object *obj);
/**
* @brief Set whether an Evas object is to repeat events.
@@ -164,7 +164,7 @@ EAPI Efl_Canvas_Object *evas_object_clip_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_repeat_events_set(Efl_Canvas_Object *obj, Eina_Bool repeat);
+EVAS_API void evas_object_repeat_events_set(Efl_Canvas_Object *obj, Eina_Bool repeat);
/**
* @brief Determine whether an object is set to repeat events.
@@ -175,7 +175,7 @@ EAPI void evas_object_repeat_events_set(Efl_Canvas_Object *obj, Eina_Bool repeat
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_repeat_events_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_repeat_events_get(const Efl_Canvas_Object *obj);
/**
* @brief Indicates that this object is the keyboard event receiver on its
@@ -194,7 +194,7 @@ EAPI Eina_Bool evas_object_repeat_events_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_focus_set(Efl_Canvas_Object *obj, Eina_Bool focus);
+EVAS_API void evas_object_focus_set(Efl_Canvas_Object *obj, Eina_Bool focus);
/**
* @brief Indicates that this object is the keyboard event receiver on its
@@ -214,7 +214,7 @@ EAPI void evas_object_focus_set(Efl_Canvas_Object *obj, Eina_Bool focus);
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_focus_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_focus_get(const Efl_Canvas_Object *obj);
@@ -237,7 +237,7 @@ EAPI Eina_Bool evas_object_focus_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_precise_is_inside_set(Efl_Canvas_Object *obj, Eina_Bool precise);
+EVAS_API void evas_object_precise_is_inside_set(Efl_Canvas_Object *obj, Eina_Bool precise);
/**
* @brief Determine whether an object is set to use precise point collision
@@ -250,7 +250,7 @@ EAPI void evas_object_precise_is_inside_set(Efl_Canvas_Object *obj, Eina_Bool pr
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_precise_is_inside_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_precise_is_inside_get(const Efl_Canvas_Object *obj);
/**
* @brief Set whether events on a smart object's member should be propagated up
@@ -271,7 +271,7 @@ EAPI Eina_Bool evas_object_precise_is_inside_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_propagate_events_set(Efl_Canvas_Object *obj, Eina_Bool propagate);
+EVAS_API void evas_object_propagate_events_set(Efl_Canvas_Object *obj, Eina_Bool propagate);
/**
* @brief Retrieve whether an Evas object is set to propagate events.
@@ -285,7 +285,7 @@ EAPI void evas_object_propagate_events_set(Efl_Canvas_Object *obj, Eina_Bool pro
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_propagate_events_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_propagate_events_get(const Efl_Canvas_Object *obj);
/**
* @brief Set whether an Evas object is to pass (ignore) events.
@@ -304,7 +304,7 @@ EAPI Eina_Bool evas_object_propagate_events_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_pass_events_set(Efl_Canvas_Object *obj, Eina_Bool pass);
+EVAS_API void evas_object_pass_events_set(Efl_Canvas_Object *obj, Eina_Bool pass);
/**
* @brief Determine whether an object is set to pass (ignore) events.
@@ -318,7 +318,7 @@ EAPI void evas_object_pass_events_set(Efl_Canvas_Object *obj, Eina_Bool pass);
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_pass_events_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_pass_events_get(const Efl_Canvas_Object *obj);
/**
* @brief Sets whether or not the given Evas object is to be drawn
@@ -330,7 +330,7 @@ EAPI Eina_Bool evas_object_pass_events_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_anti_alias_set(Efl_Canvas_Object *obj, Eina_Bool anti_alias);
+EVAS_API void evas_object_anti_alias_set(Efl_Canvas_Object *obj, Eina_Bool anti_alias);
/**
* @brief Retrieves whether or not the given Evas object is to be drawn
@@ -342,7 +342,7 @@ EAPI void evas_object_anti_alias_set(Efl_Canvas_Object *obj, Eina_Bool anti_alia
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_anti_alias_get(const Efl_Canvas_Object *obj);
+EVAS_API Eina_Bool evas_object_anti_alias_get(const Efl_Canvas_Object *obj);
/**
@@ -360,7 +360,7 @@ EAPI Eina_Bool evas_object_anti_alias_get(const Efl_Canvas_Object *obj);
*
* @ingroup Evas_Object_Group
*/
-EAPI Efl_Canvas_Object *evas_object_smart_parent_get(const Efl_Canvas_Object *obj);
+EVAS_API Efl_Canvas_Object *evas_object_smart_parent_get(const Efl_Canvas_Object *obj);
/**
* @brief This handles text paragraph direction of the given object. Even if
@@ -373,7 +373,7 @@ EAPI Efl_Canvas_Object *evas_object_smart_parent_get(const Efl_Canvas_Object *ob
*
* @ingroup Evas_Object_Group
*/
-EAPI void evas_object_paragraph_direction_set(Efl_Canvas_Object *obj, Evas_BiDi_Direction dir);
+EVAS_API void evas_object_paragraph_direction_set(Efl_Canvas_Object *obj, Evas_BiDi_Direction dir);
/**
* @brief This handles text paragraph direction of the given object. Even if
@@ -387,7 +387,7 @@ EAPI void evas_object_paragraph_direction_set(Efl_Canvas_Object *obj, Evas_BiDi_
*
* @ingroup Evas_Object_Group
*/
-EAPI Evas_BiDi_Direction evas_object_paragraph_direction_get(const Efl_Canvas_Object *obj);
+EVAS_API Evas_BiDi_Direction evas_object_paragraph_direction_get(const Efl_Canvas_Object *obj);
/**
* @brief Test if any object is clipped by @c obj.
@@ -400,7 +400,7 @@ EAPI Evas_BiDi_Direction evas_object_paragraph_direction_get(const Efl_Canvas_Ob
*
* @ingroup Evas_Object_Group
*/
-EAPI Eina_Bool evas_object_clipees_has(const Efl_Canvas_Object *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Bool evas_object_clipees_has(const Efl_Canvas_Object *obj) EINA_WARN_UNUSED_RESULT;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group_parallel.c b/src/lib/evas/canvas/efl_canvas_parallel_group_animation.c
index 9960e4105e..3d811fb738 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group_parallel.c
+++ b/src/lib/evas/canvas/efl_canvas_parallel_group_animation.c
@@ -1,9 +1,9 @@
-#include "efl_canvas_animation_group_parallel_private.h"
+#include "efl_canvas_parallel_group_animation_private.h"
-#define MY_CLASS EFL_CANVAS_ANIMATION_GROUP_PARALLEL_CLASS
+#define MY_CLASS EFL_CANVAS_PARALLEL_GROUP_ANIMATION_CLASS
EOLIAN static double
-_efl_canvas_animation_group_parallel_efl_canvas_animation_animation_apply(Eo *eo_obj,
+_efl_canvas_parallel_group_animation_efl_canvas_animation_animation_apply(Eo *eo_obj,
void *_pd EINA_UNUSED,
double progress,
Efl_Canvas_Object *target)
@@ -53,7 +53,7 @@ _efl_canvas_animation_group_parallel_efl_canvas_animation_animation_apply(Eo *eo
}
EOLIAN static double
-_efl_canvas_animation_group_parallel_efl_canvas_animation_duration_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
+_efl_canvas_parallel_group_animation_efl_canvas_animation_duration_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
{
double child_total_duration;
double total_duration = 0.0;
@@ -74,4 +74,4 @@ _efl_canvas_animation_group_parallel_efl_canvas_animation_duration_get(const Eo
return total_duration;
}
-#include "efl_canvas_animation_group_parallel.eo.c"
+#include "efl_canvas_parallel_group_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group_parallel.eo b/src/lib/evas/canvas/efl_canvas_parallel_group_animation.eo
index e109a00baa..9f38769f66 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group_parallel.eo
+++ b/src/lib/evas/canvas/efl_canvas_parallel_group_animation.eo
@@ -1,4 +1,4 @@
-class Efl.Canvas.Animation_Group_Parallel extends Efl.Canvas.Animation_Group
+class Efl.Canvas.Parallel_Group_Animation extends Efl.Canvas.Group_Animation
{
[[Combined animation which plays its individual animations in parallel
(all of them simultaneously).
@@ -6,11 +6,10 @@ class Efl.Canvas.Animation_Group_Parallel extends Efl.Canvas.Animation_Group
For instance, this could be used to move an @Efl.Canvas.Object from one position to another
while rotating it along the way.
- Use @Efl.Canvas.Animation_Group.animation_add to append individual animations.
+ Use @Efl.Canvas.Group_Animation.animation_add to append individual animations.
@since 1.24
]]
- c_prefix: efl_animation_group_parallel;
data: null;
methods {
}
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group_parallel_private.h b/src/lib/evas/canvas/efl_canvas_parallel_group_animation_private.h
index 332e3b673c..332e3b673c 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group_parallel_private.h
+++ b/src/lib/evas/canvas/efl_canvas_parallel_group_animation_private.h
diff --git a/src/lib/evas/canvas/efl_canvas_proxy.c b/src/lib/evas/canvas/efl_canvas_proxy.c
index c8368eaed6..9f626868e9 100644
--- a/src/lib/evas/canvas/efl_canvas_proxy.c
+++ b/src/lib/evas/canvas/efl_canvas_proxy.c
@@ -322,7 +322,7 @@ _efl_canvas_proxy_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED,
goto end;
}
- if (ENFN->image_data_map(ENC, &o->engine_data, &slice, &s, x, y, w, h, cspace, mode, plane))
+ if (ENFN->image_data_map(ENC, &o->engine_data, &slice, &s, x, y, w, h, (Evas_Colorspace)cspace, mode, plane))
{
DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT,
eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(slice));
diff --git a/src/lib/evas/canvas/efl_canvas_animation_rotate.c b/src/lib/evas/canvas/efl_canvas_rotate_animation.c
index ba07733275..4fb029dd37 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_rotate.c
+++ b/src/lib/evas/canvas/efl_canvas_rotate_animation.c
@@ -1,10 +1,10 @@
-#include "efl_canvas_animation_rotate_private.h"
+#include "efl_canvas_rotate_animation_private.h"
-#define MY_CLASS EFL_CANVAS_ANIMATION_ROTATE_CLASS
+#define MY_CLASS EFL_CANVAS_ROTATE_ANIMATION_CLASS
EOLIAN static void
-_efl_canvas_animation_rotate_rotate_set(Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Rotate_Data *pd,
+_efl_canvas_rotate_animation_rotate_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Rotate_Animation_Data *pd,
double from_degree,
double to_degree,
Efl_Canvas_Object *pivot,
@@ -20,8 +20,8 @@ _efl_canvas_animation_rotate_rotate_set(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_rotate_rotate_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Rotate_Data *pd,
+_efl_canvas_rotate_animation_rotate_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Rotate_Animation_Data *pd,
double *from_degree,
double *to_degree,
Efl_Canvas_Object **pivot,
@@ -47,8 +47,8 @@ _efl_canvas_animation_rotate_rotate_get(const Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_rotate_rotate_absolute_set(Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Rotate_Data *pd,
+_efl_canvas_rotate_animation_rotate_absolute_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Rotate_Animation_Data *pd,
double from_degree,
double to_degree,
Eina_Position2D abs)
@@ -61,8 +61,8 @@ _efl_canvas_animation_rotate_rotate_absolute_set(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_rotate_rotate_absolute_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Rotate_Data *pd,
+_efl_canvas_rotate_animation_rotate_absolute_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Rotate_Animation_Data *pd,
double *from_degree,
double *to_degree,
Eina_Position2D *abs)
@@ -84,8 +84,8 @@ _efl_canvas_animation_rotate_rotate_absolute_get(const Eo *eo_obj EINA_UNUSED,
}
EOLIAN static double
-_efl_canvas_animation_rotate_efl_canvas_animation_animation_apply(Eo *eo_obj,
- Efl_Canvas_Animation_Rotate_Data *pd,
+_efl_canvas_rotate_animation_efl_canvas_animation_animation_apply(Eo *eo_obj,
+ Efl_Canvas_Rotate_Animation_Data *pd,
double progress,
Efl_Canvas_Object *target)
{
@@ -114,8 +114,8 @@ _efl_canvas_animation_rotate_efl_canvas_animation_animation_apply(Eo *eo_obj,
}
EOLIAN static Efl_Object *
-_efl_canvas_animation_rotate_efl_object_constructor(Eo *eo_obj,
- Efl_Canvas_Animation_Rotate_Data *pd)
+_efl_canvas_rotate_animation_efl_object_constructor(Eo *eo_obj,
+ Efl_Canvas_Rotate_Animation_Data *pd)
{
eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
@@ -134,4 +134,4 @@ _efl_canvas_animation_rotate_efl_object_constructor(Eo *eo_obj,
return eo_obj;
}
-#include "efl_canvas_animation_rotate.eo.c"
+#include "efl_canvas_rotate_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_animation_rotate.eo b/src/lib/evas/canvas/efl_canvas_rotate_animation.eo
index c81f6eeaea..aa79e28a2f 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_rotate.eo
+++ b/src/lib/evas/canvas/efl_canvas_rotate_animation.eo
@@ -1,4 +1,6 @@
-class Efl.Canvas.Animation_Rotate extends Efl.Canvas.Animation
+import eina_types;
+
+class Efl.Canvas.Rotate_Animation extends Efl.Canvas.Animation
{
[[Animated rotation effect.
@@ -12,7 +14,7 @@ class Efl.Canvas.Animation_Rotate extends Efl.Canvas.Animation
@since 1.24
]]
c_prefix: efl_animation_rotate;
- data: Efl_Canvas_Animation_Rotate_Data;
+ data: Efl_Canvas_Rotate_Animation_Data;
methods {
@property rotate {
[[Degree range to animate and pivot object.
diff --git a/src/lib/evas/canvas/efl_canvas_rotate_animation_private.h b/src/lib/evas/canvas/efl_canvas_rotate_animation_private.h
new file mode 100644
index 0000000000..459997cf77
--- /dev/null
+++ b/src/lib/evas/canvas/efl_canvas_rotate_animation_private.h
@@ -0,0 +1,30 @@
+#define EFL_ANIMATION_PROTECTED
+
+#include "evas_common_private.h"
+#include <Ecore.h>
+#include "efl_canvas_animation_private.h"
+
+#define EFL_ROTATE_ANIMATION_DATA_GET(o, pd) \
+ Efl_Canvas_Rotate_Animation_Data *pd = efl_data_scope_get(o, EFL_CANVAS_ROTATE_ANIMATION_CLASS)
+
+typedef struct _Efl_Canvas_Rotate_Animation_Property
+{
+ double degree;
+} Efl_Canvas_Rotate_Animation_Property;
+
+typedef struct _Efl_Canvas_Rotate_Animation_Relative_Pivot
+{
+ Efl_Canvas_Object *obj;
+ Eina_Vector2 pos;
+} Efl_Canvas_Rotate_Animation_Relative_Pivot;
+
+typedef struct _Efl_Canvas_Rotate_Animation_Data
+{
+ Efl_Canvas_Rotate_Animation_Property from;
+ Efl_Canvas_Rotate_Animation_Property to;
+
+ Eina_Position2D abs_pivot;
+ Efl_Canvas_Rotate_Animation_Relative_Pivot rel_pivot;
+
+ Eina_Bool use_rel_pivot;
+} Efl_Canvas_Rotate_Animation_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_animation_scale.c b/src/lib/evas/canvas/efl_canvas_scale_animation.c
index e8a13233d6..68abf64b2b 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_scale.c
+++ b/src/lib/evas/canvas/efl_canvas_scale_animation.c
@@ -1,10 +1,10 @@
-#include "efl_canvas_animation_scale_private.h"
+#include "efl_canvas_scale_animation_private.h"
-#define MY_CLASS EFL_CANVAS_ANIMATION_SCALE_CLASS
+#define MY_CLASS EFL_CANVAS_SCALE_ANIMATION_CLASS
EOLIAN static void
-_efl_canvas_animation_scale_scale_set(Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Scale_Data *pd,
+_efl_canvas_scale_animation_scale_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Scale_Animation_Data *pd,
Eina_Vector2 from_scale,
Eina_Vector2 to_scale,
Efl_Canvas_Object *pivot,
@@ -21,8 +21,8 @@ _efl_canvas_animation_scale_scale_set(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_scale_scale_get(const Eo *obj EINA_UNUSED,
- Efl_Canvas_Animation_Scale_Data *pd,
+_efl_canvas_scale_animation_scale_get(const Eo *obj EINA_UNUSED,
+ Efl_Canvas_Scale_Animation_Data *pd,
Eina_Vector2 *from_scale, Eina_Vector2 *to_scale,
Efl_Canvas_Object **pivot, Eina_Vector2 *pivot_pos)
{
@@ -46,8 +46,8 @@ _efl_canvas_animation_scale_scale_get(const Eo *obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_scale_scale_absolute_set(Eo *obj EINA_UNUSED,
- Efl_Canvas_Animation_Scale_Data *pd,
+_efl_canvas_scale_animation_scale_absolute_set(Eo *obj EINA_UNUSED,
+ Efl_Canvas_Scale_Animation_Data *pd,
Eina_Vector2 from_scale, Eina_Vector2 to_scale,
Eina_Position2D pos)
{
@@ -61,8 +61,8 @@ _efl_canvas_animation_scale_scale_absolute_set(Eo *obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_scale_scale_absolute_get(const Eo *obj EINA_UNUSED,
- Efl_Canvas_Animation_Scale_Data *pd,
+_efl_canvas_scale_animation_scale_absolute_get(const Eo *obj EINA_UNUSED,
+ Efl_Canvas_Scale_Animation_Data *pd,
Eina_Vector2 *from_scale, Eina_Vector2 *to_scale,
Eina_Position2D *pos)
{
@@ -83,8 +83,8 @@ _efl_canvas_animation_scale_scale_absolute_get(const Eo *obj EINA_UNUSED,
}
EOLIAN static double
-_efl_canvas_animation_scale_efl_canvas_animation_animation_apply(Eo *eo_obj,
- Efl_Canvas_Animation_Scale_Data *pd,
+_efl_canvas_scale_animation_efl_canvas_animation_animation_apply(Eo *eo_obj,
+ Efl_Canvas_Scale_Animation_Data *pd,
double progress,
Efl_Canvas_Object *target)
{
@@ -114,8 +114,8 @@ _efl_canvas_animation_scale_efl_canvas_animation_animation_apply(Eo *eo_obj,
}
EOLIAN static Efl_Object *
-_efl_canvas_animation_scale_efl_object_constructor(Eo *eo_obj,
- Efl_Canvas_Animation_Scale_Data *pd)
+_efl_canvas_scale_animation_efl_object_constructor(Eo *eo_obj,
+ Efl_Canvas_Scale_Animation_Data *pd)
{
eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
@@ -130,4 +130,4 @@ _efl_canvas_animation_scale_efl_object_constructor(Eo *eo_obj,
return eo_obj;
}
-#include "efl_canvas_animation_scale.eo.c"
+#include "efl_canvas_scale_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_animation_scale.eo b/src/lib/evas/canvas/efl_canvas_scale_animation.eo
index 58a44f132f..d0b890a2f4 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_scale.eo
+++ b/src/lib/evas/canvas/efl_canvas_scale_animation.eo
@@ -1,4 +1,6 @@
-class Efl.Canvas.Animation_Scale extends Efl.Canvas.Animation
+import eina_types;
+
+class Efl.Canvas.Scale_Animation extends Efl.Canvas.Animation
{
[[Animated scaling effect.
@@ -13,7 +15,7 @@ class Efl.Canvas.Animation_Scale extends Efl.Canvas.Animation
@since 1.24
]]
c_prefix: efl_animation_scale;
- data: Efl_Canvas_Animation_Scale_Data;
+ data: Efl_Canvas_Scale_Animation_Data;
methods {
@property scale {
[[Scale range and pivot object.
@@ -48,7 +50,9 @@ class Efl.Canvas.Animation_Scale extends Efl.Canvas.Animation
values {
from_scale: Eina.Vector2; [[Initial scale value.]]
to_scale: Eina.Vector2; [[Ending scale value.]]
- pivot_point: Eina.Position2D; [[Position of the pivot point relative to the canvas.]]
+ pivot_point: Eina.Position2D; [[Position of the pivot point relative to the canvas.
+ If $null the target passed to @Efl.Canvas.Animation.animation_apply
+ is used as pivot element.]]
}
}
}
diff --git a/src/lib/evas/canvas/efl_canvas_scale_animation_private.h b/src/lib/evas/canvas/efl_canvas_scale_animation_private.h
new file mode 100644
index 0000000000..85363ba490
--- /dev/null
+++ b/src/lib/evas/canvas/efl_canvas_scale_animation_private.h
@@ -0,0 +1,25 @@
+#define EFL_ANIMATION_PROTECTED
+
+#include "evas_common_private.h"
+#include <Ecore.h>
+#include "efl_canvas_animation_private.h"
+
+#define EFL_SCALE_ANIMATION_DATA_GET(o, pd) \
+ Efl_Canvas_Scale_Animation_Data *pd = efl_data_scope_get(o, EFL_CANVAS_SCALE_ANIMATION_CLASS)
+
+typedef struct _Efl_Canvas_Scale_Animation_Relative_Pivot
+{
+ Efl_Canvas_Object *obj;
+ Eina_Vector2 pos;
+} Efl_Canvas_Scale_Animation_Relative_Pivot;
+
+typedef struct _Efl_Canvas_Scale_Animation_Data
+{
+ Eina_Vector2 from;
+ Eina_Vector2 to;
+
+ Eina_Position2D pos;
+ Efl_Canvas_Scale_Animation_Relative_Pivot rel_pivot;
+
+ Eina_Bool use_rel_pivot;
+} Efl_Canvas_Scale_Animation_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_scene3d.c b/src/lib/evas/canvas/efl_canvas_scene3d.c
deleted file mode 100644
index 513a68ba94..0000000000
--- a/src/lib/evas/canvas/efl_canvas_scene3d.c
+++ /dev/null
@@ -1,310 +0,0 @@
-#include "evas_image_private.h"
-#include "efl_canvas_scene3d.eo.h"
-
-#define MY_CLASS EFL_CANVAS_SCENE3D_CLASS
-
-EOLIAN static void
-_efl_canvas_scene3d_scene3d_set(Eo *eo_obj, void *pd EINA_UNUSED, Evas_Canvas3D_Scene *scene)
-{
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
- Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
- Evas_Image_Load_Opts lo;
- int load_error;
-
- if (o->cur->scene == scene) return;
-
- evas_object_async_block(obj);
- _evas_image_init_set(NULL, NULL, eo_obj, obj, o, &lo);
- o->engine_data = ENFN->image_mmap(ENC, o->cur->f, o->cur->key, &load_error, &lo);
- o->load_error = _evas_load_error_to_efl_gfx_image_load_error(load_error);
- _evas_image_done_set(eo_obj, obj, o);
-
- if (scene) _evas_image_3d_set(eo_obj, scene);
- else _evas_image_3d_unset(eo_obj, obj, o);
-}
-
-EOLIAN static Evas_Canvas3D_Scene *
-_efl_canvas_scene3d_scene3d_get(const Eo *eo_obj, void *pd EINA_UNUSED)
-{
- Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
- return o->cur->scene;
-}
-
-void
-_evas_image_3d_render(Evas *eo_e, Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj, Evas_Image_Data *o EINA_UNUSED,
- Evas_Canvas3D_Scene *scene, void *engine, void *output)
-{
- Evas_Public_Data *e;
- Eina_Bool need_native_set = EINA_FALSE;
- Evas_Canvas3D_Scene_Public_Data scene_data;
- Evas_Canvas3D_Scene_Data *pd_scene = NULL;
-
- pd_scene = efl_data_scope_get(scene, EVAS_CANVAS3D_SCENE_CLASS);
-
- if ((pd_scene->w == 0) || (pd_scene->h == 0)) return;
- if (!pd_scene->camera_node)
- {
- WRN("Camera has not been set to scene(%p)", scene);
- return;
- }
-
- e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
-
- if (pd_scene->surface)
- {
- int w = 0;
- int h = 0;
-
- if (e->engine.func->drawable_size_get)
- {
- e->engine.func->drawable_size_get(engine,
- pd_scene->surface, &w, &h);
- }
- if ((w != pd_scene->w) || (h != pd_scene->h))
- {
- if (e->engine.func->drawable_free)
- {
- e->engine.func->drawable_free(engine,
- pd_scene->surface);
- }
- pd_scene->surface = NULL;
- need_native_set = EINA_TRUE;
- }
- }
- else
- {
- /* TODO: Hard-coded alpha on. */
- if (e->engine.func->drawable_new)
- {
- pd_scene->surface =
- e->engine.func->drawable_new(engine,
- pd_scene->w, pd_scene->h, 1);
- }
- need_native_set = EINA_TRUE;
- }
-
- EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data,
- data)
- {
- if (need_native_set)
- {
- if (e->engine.func->image_drawable_set)
- {
- data->surface =
- e->engine.func->image_drawable_set(engine,
- data->surface,
- pd_scene->surface);
- }
- }
- data->w = pd_scene->w;
- data->h = pd_scene->h;
- }
- EINA_COW_WRITE_END(evas_object_3d_cow, obj->data_3d, data);
-
- evas_canvas3d_scene_data_init(&scene_data);
-
- scene_data.bg_color = pd_scene->bg_color;
- scene_data.shadows_enabled = pd_scene->shadows_enabled;
- scene_data.camera_node = pd_scene->camera_node;
- scene_data.depth_offset = pd_scene->depth_offset;
- scene_data.depth_constant = pd_scene->depth_constant;
- if (evas_object_anti_alias_get(eo_obj))
- {
- /*Use post processing render*/
- scene_data.post_processing = EINA_TRUE;
- scene_data.color_pick_enabled = EINA_FALSE;
- scene_data.render_to_texture = EINA_TRUE;
- scene_data.post_processing_type = EVAS_CANVAS3D_SHADER_MODE_POST_PROCESSING_FXAA;
- }
- /* Phase 1 - Update scene graph tree. */
- evas_canvas3d_object_update(scene);
-
- /* Phase 2 - Do frustum culling and get visible model nodes. */
- evas_canvas3d_node_tree_traverse(pd_scene->root_node,
- EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE,
- evas_canvas3d_node_mesh_collect, &scene_data);
-
- /* Phase 3 - Collect active light nodes in the scene graph tree. */
- evas_canvas3d_node_tree_traverse(pd_scene->root_node,
- EVAS_CANVAS3D_TREE_TRAVERSE_ANY_ORDER, EINA_FALSE,
- evas_canvas3d_node_light_collect, &scene_data);
-
- /* Phase 5 - Draw the scene. */
- if (e->engine.func->drawable_scene_render)
- {
- e->engine.func->drawable_scene_render(engine, output,
- pd_scene->surface, &scene_data);
- }
- /* Clean up temporary resources. */
- evas_canvas3d_scene_data_fini(&scene_data);
-}
-
-void
-_evas_image_3d_set(Evas_Object *eo_obj, Evas_Canvas3D_Scene *scene)
-{
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
- Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
- Evas_Canvas3D_Scene_Data *pd_scene = efl_data_scope_get(scene,
- EVAS_CANVAS3D_SCENE_CLASS);
- EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data,
- data)
- {
- data->surface = NULL;
- data->w = 0;
- data->h = 0;
- efl_ref(scene);
- }
- EINA_COW_WRITE_END(evas_object_3d_cow, obj->data_3d, data);
-
- EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
- {
- state_write->scene = scene;
- }
- EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
-
- pd_scene->images = eina_list_append(pd_scene->images, eo_obj);
-}
-
-void
-_evas_image_3d_unset(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj,
- Evas_Image_Data *o)
-{
- Evas_Public_Data *e;
-
- if (!o->cur->scene) return;
-
- Evas_Canvas3D_Scene_Data *pd_scene =
- efl_data_scope_get(o->cur->scene, EVAS_CANVAS3D_SCENE_CLASS);
-
- EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
- {
- pd_scene->images = eina_list_remove(pd_scene->images, eo_obj);
- efl_unref(state_write->scene);
- state_write->scene = NULL;
- }
- EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
-
- if (o->cur->defmap)
- {
- EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
- {
- evas_map_free(state_write->defmap);
- state_write->defmap = NULL;
- }
- EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
- }
-
- EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data,
- data)
- {
- e = obj->layer->evas;
-
- if (data->surface)
- e->engine.func->image_free(_evas_engine_context(e), data->surface);
-
- data->surface = NULL;
- data->w = 0;
- data->h = 0;
- }
- EINA_COW_WRITE_END(evas_object_3d_cow, obj->data_3d, data);
-}
-
-EOLIAN static Eina_Rw_Slice
-_efl_canvas_scene3d_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED,
- Efl_Gfx_Buffer_Access_Mode mode,
- const Eina_Rect *region,
- Efl_Gfx_Colorspace cspace, int plane,
- int *stride)
-{
- Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
- Evas_Public_Data *e;
- Evas_Canvas3D_Object_Data *pd_parent;
- Evas_Canvas3D_Scene_Data *pd_scene;
- int width = -1, height = -1, ntex = -1;
- unsigned char *pixels = NULL;
- Eina_Rw_Slice slice = {};
- int x, y, w, h;
- size_t len = 0;
-
- if (!o->cur->scene)
- {
- ERR("invalid scene data");
- return slice;
- }
- if (mode & EFL_GFX_BUFFER_ACCESS_MODE_WRITE)
- {
- ERR("invalid map access mode");
- return slice;
- }
- if (cspace != EFL_GFX_COLORSPACE_ARGB8888)
- {
- ERR("invalid map colorspace. Only ARGB is supported");
- return slice;
- }
-
- pd_parent = efl_data_scope_get(o->cur->scene, EVAS_CANVAS3D_OBJECT_CLASS);
- e = efl_data_scope_get(pd_parent->evas, EVAS_CANVAS_CLASS);
- pd_scene = efl_data_scope_get(o->cur->scene, EVAS_CANVAS3D_SCENE_CLASS);
-
- if (e->engine.func->drawable_size_get)
- {
- e->engine.func->drawable_size_get(_evas_engine_context(e),
- pd_scene->surface, &width, &height);
- }
-
- if (region)
- {
- x = region->x;
- y = region->y;
- w = region->w;
- h = region->h;
- }
- else
- {
- x = y = 0;
- w = width;
- h = height;
- }
-
- if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) || ((x + w) > width) || ((y + h) > height))
- {
- ERR("Invalid map dimensions : %dx%d +%d,%d. Image is %dx%d.",
- w, h, x, y, width, height);
- return slice;
- }
-
- if (e->engine.func->drawable_texture_target_id_get)
- {
- ntex = e->engine.func->drawable_texture_target_id_get(pd_scene->surface);
-
- if (e->engine.func->drawable_texture_rendered_pixels_get)
- {
- len = w * h * sizeof(DATA32); //four component texture
- pixels = malloc(len + sizeof(slice) + 8);
- e->engine.func->drawable_texture_rendered_pixels_get(ntex, x, y, w, h,
- pd_scene->surface, pixels);
- }
- else
- return slice;
- }
- else
- return slice;
-
- if (stride) *stride = w * sizeof(DATA32);
- slice.mem = pixels;
- slice.len = len;
- DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT,
- eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(slice));
-
- return slice;
-}
-EOLIAN static Eina_Bool
-_efl_canvas_scene3d_efl_gfx_buffer_buffer_unmap(Eo *eo_obj EINA_UNUSED, void *_pd EINA_UNUSED,
- const Eina_Rw_Slice slice)
-{
- free(slice.mem);
- return EINA_TRUE;
-}
-
-#include "efl_canvas_scene3d.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_scene3d.eo b/src/lib/evas/canvas/efl_canvas_scene3d.eo
deleted file mode 100644
index 8d506be64c..0000000000
--- a/src/lib/evas/canvas/efl_canvas_scene3d.eo
+++ /dev/null
@@ -1,20 +0,0 @@
-class @beta Efl.Canvas.Scene3d extends Efl.Canvas.Image_Internal
-{
- [[A UI view for EFL Canvas 3D.]]
- data: null;
- methods {
- @property scene3d {
- [[The 3d scene to display in this view.
- ]]
- set {}
- get {}
- values {
- scene: Evas.Canvas3D.Scene; [[3D scene.]]
- }
- }
- }
- implements {
- Efl.Gfx.Buffer.buffer_map;
- Efl.Gfx.Buffer.buffer_unmap;
- }
-}
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group_sequential.c b/src/lib/evas/canvas/efl_canvas_sequential_group_animation.c
index 26edb21355..16234471ae 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group_sequential.c
+++ b/src/lib/evas/canvas/efl_canvas_sequential_group_animation.c
@@ -1,9 +1,9 @@
-#include "efl_canvas_animation_group_sequential_private.h"
+#include "efl_canvas_sequential_group_animation_private.h"
-#define MY_CLASS EFL_CANVAS_ANIMATION_GROUP_SEQUENTIAL_CLASS
+#define MY_CLASS EFL_CANVAS_SEQUENTIAL_GROUP_ANIMATION_CLASS
EOLIAN static double
-_efl_canvas_animation_group_sequential_efl_canvas_animation_animation_apply(Eo *eo_obj,
+_efl_canvas_sequential_group_animation_efl_canvas_animation_animation_apply(Eo *eo_obj,
void *_pd EINA_UNUSED,
double progress,
Efl_Canvas_Object *target)
@@ -58,7 +58,7 @@ _efl_canvas_animation_group_sequential_efl_canvas_animation_animation_apply(Eo *
}
EOLIAN static double
-_efl_canvas_animation_group_sequential_efl_canvas_animation_duration_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
+_efl_canvas_sequential_group_animation_efl_canvas_animation_duration_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
{
double total_duration = 0.0;
double child_total_duration;
@@ -78,4 +78,4 @@ _efl_canvas_animation_group_sequential_efl_canvas_animation_duration_get(const E
return total_duration;
}
-#include "efl_canvas_animation_group_sequential.eo.c"
+#include "efl_canvas_sequential_group_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group_sequential.eo b/src/lib/evas/canvas/efl_canvas_sequential_group_animation.eo
index 09f9e2178e..01417b4b41 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group_sequential.eo
+++ b/src/lib/evas/canvas/efl_canvas_sequential_group_animation.eo
@@ -1,4 +1,4 @@
-class Efl.Canvas.Animation_Group_Sequential extends Efl.Canvas.Animation_Group
+class Efl.Canvas.Sequential_Group_Animation extends Efl.Canvas.Group_Animation
{
[[Combined animation which plays its individual animations in a sequential order
(one after the other).
@@ -6,7 +6,7 @@ class Efl.Canvas.Animation_Group_Sequential extends Efl.Canvas.Animation_Group
For instance, this could be used to move an @Efl.Canvas.Object from one position to another
and then start rotating it once it reaches its destination.
- Use @Efl.Canvas.Animation_Group.animation_add to append individual animations.
+ Use @Efl.Canvas.Group_Animation.animation_add to append individual animations.
Animations are played in the order in which they are added.
@since 1.24
diff --git a/src/lib/evas/canvas/efl_canvas_animation_group_sequential_private.h b/src/lib/evas/canvas/efl_canvas_sequential_group_animation_private.h
index 332e3b673c..332e3b673c 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_group_sequential_private.h
+++ b/src/lib/evas/canvas/efl_canvas_sequential_group_animation_private.h
diff --git a/src/lib/evas/canvas/efl_canvas_textblock.eo b/src/lib/evas/canvas/efl_canvas_textblock.eo
index 724103040a..b4ef328c14 100644
--- a/src/lib/evas/canvas/efl_canvas_textblock.eo
+++ b/src/lib/evas/canvas/efl_canvas_textblock.eo
@@ -1,7 +1,5 @@
-import efl_text_types;
-
-class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
- Efl.Canvas.Filter.Internal, Efl.Text.Font.Properties,
+class Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
+ Efl.Canvas.Filter.Internal, Efl.Text_Font_Properties,
Efl.Text_Style, Efl.Text_Format,
Efl.Text_Markup, Efl.Ui.I18n
{
@@ -9,9 +7,11 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
if you need user interaction consider the classes in $[Efl.Ui].
Note: No text will be rendered until a font, a font size and a font color are specified.
- This can be accomplished using @Efl.Text.Font.Properties.font_family, @Efl.Text.Font.Properties.font_size and
+ This can be accomplished using @Efl.Text_Font_Properties.font_family, @Efl.Text_Font_Properties.font_size and
@Efl.Text_Style.text_color.
Alternatively, @.style_apply can be used providing the attributes $font, $font_size and $color.
+
+ @since 1.24
]]
methods {
@property is_empty {
@@ -23,20 +23,11 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
is_empty: bool; [[$true if empty.]]
}
}
- cursor_add {
- [[Adds an existing cursor to the text object.
- If the cursor already belonged to another text object it will be reassigned to the new one.
- It is typically more convenient to obtain a cursor directly from the text object using @.cursor_create.
- ]]
- params {
- cursor: Efl.Text.Cursor; [[The text cursor to use.]]
- }
- }
cursor_create {
[[Creates a new cursor and adds it to the text object.
This cursor can be used to manipulate and iterate the content of the text object.
]]
- return: Efl.Text.Cursor @move; [[The created text cursor.]]
+ return: Efl.Text_Cursor.Object @move; [[The created text cursor.]]
}
visible_range_get {
[[Returns the currently visible range.
@@ -47,8 +38,8 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
]]
return: bool; [[$true on success.]]
params {
- @in start: Efl.Text.Cursor; [[Range start position.]]
- @in end: Efl.Text.Cursor; [[Range end position.]]
+ @in start: Efl.Text_Cursor.Object; [[Range start position.]]
+ @in end: Efl.Text_Cursor.Object; [[Range end position.]]
}
}
@property style_insets {
@@ -80,7 +71,7 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
@property newline_as_paragraph_separator {
[[When $true, the newline character will behave as a paragraph separator.
Paragraph separator equal U+2029, and new line equal U+000A.
- This will effect a lot of text behaviour like @Efl.Text.Cursor.move method.
+ This will effect a lot of text behaviour like @Efl.Text_Cursor.Object.move method.
]]
set {}
get {}
@@ -92,7 +83,7 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
[[Applies several style attributes at once using a formatting string.
Given style attributes override previous values, leaving other attributes unaffected.
This is akin to setting individual style attributes using properties like
- @Efl.Text.Font.Properties.font_slant or @Efl.Text_Format.wrap, for example.
+ @Efl.Text_Font_Properties.font_slant or @Efl.Text_Format.wrap, for example.
The formatting string is a whitespace-separated list of $[attribute=value] pairs.
@@ -101,43 +92,43 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
- $font: Name of the font to use.
Default value is empty, meaning that no text will be rendered.
Requires $font_size and $font_color.
- See @Efl.Text.Font.Properties.font_family.
+ See @Efl.Text_Font_Properties.font_family.
- $font_fallbacks: Comma-delimited list of fonts to try if finding the primary font fails.
Example: $[font_fallbacks=consolas,courier,monospace].
Default value is empty.
- See @Efl.Text.Font.Properties.font_fallbacks.
+ See @Efl.Text_Font_Properties.font_fallbacks.
- $font_size: Height of font, in points.
Default value is 0.
Requires $font and $font_color.
- See @Efl.Text.Font.Properties.font_size.
+ See @Efl.Text_Font_Properties.font_size.
- $font_source: Path to the file containing the font to use.
Example: $[font_source=/usr/share/fonts/Sans.ttf].
Default value is empty.
- See @Efl.Text.Font.Properties.font_source.
+ See @Efl.Text_Font_Properties.font_source.
- $font_weight: Thickness of the font. The value must be one of: $normal, $thin, $ultralight, $extralight,
$light, $book, $medium, $semibold, $bold, $ultrabold, $extrabold, $black and $extrablack.
Default value is $normal.
- See @Efl.Text.Font.Properties.font_weight.
+ See @Efl.Text_Font_Properties.font_weight.
- $font_style: Style of the font. The value must be one of: $normal, $oblique and $italic.
Default value is $normal.
- See @Efl.Text.Font.Properties.font_slant.
+ See @Efl.Text_Font_Properties.font_slant.
- $font_width: How wide the font is, relative to its height. The value must be one of:
$normal, $ultracondensed, $extracondensed, $condensed, $semicondensed, $semiexpanded, $expanded,
$extraexpanded and $ultraexpanded.
Default value is $normal.
- See @Efl.Text.Font.Properties.font_weight.
+ See @Efl.Text_Font_Properties.font_weight.
- $lang: A 2-letter ISO 639-1 language code, $auto (to use the system locale setting) or $none (to disable
language support).
Example: $[lang=he].
Default value is empty.
- See @Efl.Text.Font.Properties.font_lang.
+ See @Efl.Text_Font_Properties.font_lang.
- $color: Color code for the text (See bottom for the complete list of supported codes).
Default value is $[rgba(0,0,0,0)] meaning that no text will be rendered.
@@ -146,47 +137,47 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
- $underline_color: Color code for the text underline (See bottom for the complete list of supported codes).
Default value is $[rgba(0,0,0,0)] meaning that no underline will be rendered.
- Requires $underline.
+ Requires $underline_type.
See @Efl.Text_Style.text_underline_color.
- - $underline2_color: Color code for the secondary text underline (See bottom for the complete list of
- supported codes). Only valid when $[underline=double].
+ - $secondary_underline_color: Color code for the secondary text underline (See bottom for the complete list
+ of supported codes). Only valid when $[underline_type=double].
Default value is $[rgba(0,0,0,0)] meaning that secondary underline will not be rendered.
- See @Efl.Text_Style.text_underline2_color.
+ See @Efl.Text_Style.text_secondary_underline_color.
- - $underline_dash_color: Color code for the dashed underline (See bottom for the complete list of supported
- codes). Only valid when $[underline=dashed].
+ - $underline_dashed_color: Color code for the dashed underline (See bottom for the complete list of supported
+ codes). Only valid when $[underline_type=dashed].
Default value is $[rgba(0,0,0,0)] meaning that dashed underline will not be rendered.
See @Efl.Text_Style.text_underline_dashed_color.
- $outline_color: Color code for the text outline (See bottom for the complete list of supported codes).
- Only valid when the $style attribute includes an outline.
+ Only valid when the $effect_type attribute includes an outline.
Default value is $[rgba(0,0,0,0)] meaning that no outline will be rendered.
See @Efl.Text_Style.text_outline_color.
- $shadow_color: Color code for the text shadow (See bottom for the complete list of supported codes).
- Only valid when the $style attribute includes a shadow.
+ Only valid when the $effect_type attribute includes a shadow.
Default value is $[rgba(0,0,0,0)] meaning that no shadow will be rendered.
See @Efl.Text_Style.text_shadow_color.
- $glow_color: Color code for the glow component of the text (See bottom for the complete list of supported
- codes). Only valid when the $style attribute includes a glow.
+ codes). Only valid when the $effect_type attribute includes a glow.
Default value is $[rgba(0,0,0,0)] meaning that no glow will be rendered.
See @Efl.Text_Style.text_glow_color.
- - $glow2_color: Color code for the secondary (inner) glow component of the text (See bottom for the complete
- list of supported codes). Only valid when the $style attribute includes a glow.
+ - $secondary_glow_color: Color code for the secondary (inner) glow component of the text (See bottom for
+ the complete list of supported codes). Only valid when the $effect_type attribute includes a glow.
Default value is $[rgba(0,0,0,0)] meaning that only the primary $glow_color will be used.
- See @Efl.Text_Style.text_glow2_color.
+ See @Efl.Text_Style.text_secondary_glow_color.
- - $backing_color: Color code for the background of the text (See bottom for the complete list of supported
+ - $background_color: Color code for the background of the text (See bottom for the complete list of supported
codes). Use a fully transparent color to disable the background.
- Default value is $[rgba(0,0,0,0)] meaning that no backing will be rendered.
- Requires $backing.
+ Default value is $[rgba(0,0,0,0)] meaning that no background will be rendered.
+ Requires $background_type.
See @Efl.Text_Style.text_background_color.
- $strikethrough_color: Color code for the line striking through the text (See bottom for the complete list
- of supported codes). Only valid when $[strikethrough=on]
+ of supported codes). Only valid when $[strikethrough_type=single]
Default value is $[rgba(0,0,0,0)] meaning that no strike-through line will be rendered.
See @Efl.Text_Style.text_strikethrough_color.
@@ -228,66 +219,67 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
Default value is $[0].
Examples: $[right_margin=10], $[right_margin=+10], $[right_margin=reset].
- - $underline: Style of the underline. The value must be one of $off (No underlining),
- $single (A single line under the text), $on (Alias for $single), $double (Two lines under the text),
+ - $underline_type: Style of the underline. The value must be one of $none (No underlining),
+ $single (A single line under the text) , $double (Two lines under the text),
$dashed (A dashed line under the text).
- Default value is $off.
- Requires either $underline_color, $underline2_color or $underline_dash_color.
+ Default value is $none.
+ Requires either $underline_color, $secondary_underline_color or $underline_dashed_color.
See @Efl.Text_Style.text_underline_type.
- - $strikethrough: Enables crossed-out text. Possible values are $on and $off.
- Default value is $off.
+ - $strikethrough_type: Enables crossed-out text. Possible values are $single and $none.
+ Default value is $none.
Requires $strikethrough_color.
See @Efl.Text_Style.text_strikethrough_type.
- - $backing: Enables background color for the text. Possible values are $on and $off.
- Default value is $off.
- Requires $backing_color.
+ - $background_type: Enables background color for the text. Possible values are $solid and $none.
+ Default value is $none.
+ Requires $background_color.
See @Efl.Text_Style.text_background_type.
- - $style: Controls a number of decorations around the text, like shadow, outline and glow, including
- combinations of them. Possible values are $plain (No decoration, alias for $off and $none),
+ - $effect_type: Controls a number of decorations around the text, like shadow, outline and glow, including
+ combinations of them. Possible values are $none (No decoration),
$shadow, $outline, $soft_outline, $outline_shadow, $outline_soft_shadow, $glow (alias for $soft_outline),
$far_shadow, $soft_shadow and $far_soft_shadow.
- All values involving a shadow accept a second parameter, separated by a comma, to indicate the shadow
- direction. Valid positions are $bottom_right, $bottom, $bottom_left, $left, $top_left, $top, $top_right
- and $right.
- Default value is $plain.
+ Default value is $none.
Requires either $shadow_color, $glow_color or $outline_color.
- Examples: $[style=outline], $[style=shadow,bottom_right], $[style=outline_shadow,bottom].
- See @Efl.Text_Style.text_effect_type and @Efl.Text_Style.text_shadow_direction.
+ See @Efl.Text_Style.text_effect_type
- - $tabstops: Size (in pixels) of the tab character. The value must be a number greater than one.
+ - $shadow_direction: Indicate the shadow direction. Valid positions are $bottom_right, $bottom, $bottom_left, $left, $top_left, $top, $top_right
+ and $right.
+ Requires either $effect_type.
+ See @Efl.Text_Style.text_shadow_direction.
+
+ - $tab_stops: Size (in pixels) of the tab character. The value must be a number greater than one.
Default value is $[32].
See @Efl.Text_Format.tab_stops.
- - $linesize: Distance (in pixels) from the baseline of one line of text to the next. This is, a value of
+ - $line_size: Distance (in pixels) from the baseline of one line of text to the next. This is, a value of
$[0] would render all lines on top of each other (However, this value will be ignored if it results in
overlapping lines of text).
- Setting this value sets $linerelsize to $[0%] (disables it).
+ Setting this value sets $line_rel_size to $[0%] (disables it).
Default value is $[0].
- - $linerelsize: Distance (in percentage over the natural line height) from the baseline of one line of
+ - $line_rel_size: Distance (in percentage over the natural line height) from the baseline of one line of
text to the next. A value of $[100%] does not have any impact, smaller values render lines closer together
and bigger values render them further apart.
- Setting this value sets $linesize to $[0] (disables it).
+ Setting this value sets $line_size to $[0] (disables it).
Default value is $[0%].
- - $linegap: Additional empty space (in pixels) between the bottom of one line of text and the top of the
- next. Setting this value sets $linerelgap to $[0%] (disables it).
+ - $line_gap: Additional empty space (in pixels) between the bottom of one line of text and the top of the
+ next. Setting this value sets $line_rel_gap to $[0%] (disables it).
Default value is $[0].
See @Efl.Text_Format.line_gap.
- - $linerelgap: Additional empty space (in percentage over the natural line height) between the bottom of
+ - $line_rel_gap: Additional empty space (in percentage over the natural line height) between the bottom of
one line of text and the top of the next.
- Setting this value sets $linegap to $[0] (disables it).
+ Setting this value sets $line_gap to $[0] (disables it).
Default value is $[0%].
See @Efl.Text_Format.line_rel_gap.
- - $linefill: An alternate way to specify the $linesize as a percentage of the canvas height.
+ - $line_fill: An alternate way to specify the $line_size as a percentage of the canvas height.
A value of $[100%] means that a single line fills the canvas, whereas $[25%] means that 4 lines
fit in the same height.
- When both $linefill and $linesize are specified the one resulting in the smallest line size is used.
+ When both $line_fill and $line_size are specified the one resulting in the smallest line size is used.
Default value is $[0].
- $ellipsis: Controls automatic addition of ellipsis "..." to replace text which cannot be shown.
@@ -312,15 +304,15 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
Examples: $[replacement_char=*].
See @Efl.Text_Format.replacement_char.
- - $underline_dash_width: Length (in pixels) of the dashes when $underline is $dashed.
+ - $underline_dashed_width: Length (in pixels) of the dashes when $underline_type is $dashed.
Default value is $[6].
See @Efl.Text_Style.text_underline_dashed_width.
- - $underline_dash_gap: Length (in pixels) of the gaps between the dashes when $underline is $dashed.
+ - $underline_dashed_gap: Length (in pixels) of the gaps between the dashes when $underline_type is $dashed.
Default value is $[2].
See @Efl.Text_Style.text_underline_dashed_gap.
- - $underline_height: Width (in pixels) of the single underline when $underline is $single.
+ - $underline_height: Width (in pixels) of the single underline when $underline_type is $single.
Default value is $[1].
See @Efl.Text_Style.text_underline_height.
@@ -340,7 +332,7 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
@property all_styles {
[[A string representing the complete set of attributes applied to this text object.
This includes the default attributes plus any additional style applied with @.style_apply
- or individual style properties like @Efl.Text.Font.Properties.font_slant or @Efl.Text_Format.wrap.
+ or individual style properties like @Efl.Text_Font_Properties.font_slant or @Efl.Text_Format.wrap.
See @.style_apply for the description of all attributes.
]]
@@ -363,6 +355,10 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
size after wrapping text according to the size restrictions of the
object.
+ The formatted width and height do not include padding size.
+ To get the total size of text with style, you need to query padding size
+ from @.style_insets.
+
For example a text block containing the text:
"You shall not pass!" with no margins or padding and assuming
a monospace font and a size of 7x10 char widths (for simplicity)
@@ -386,6 +382,10 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
size after wrapping text according to the size restrictions of the
object.
+ The native width and height do not include padding size.
+ To get the total size of text with style, you need to query padding size
+ from @.style_insets.
+
For example a text block containing the text:
"You shall not pass!" with no margins or padding and assuming
a monospace font and a size of 7x10 char widths (for simplicity)
@@ -397,8 +397,8 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
}
}
// Obstacles
- obstacle_add {
- [[Add obstacle evas object $eo_obs to be observed during layout
+ obstacle_add @beta {
+ [[Add obstacle object $eo_obs to be avoided during layout
of text.
The textblock does the layout of the text according to the
@@ -409,7 +409,7 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
}
return: bool; [[$true on success.]]
}
- obstacle_del {
+ obstacle_del @beta {
[[Removes $eo_obs from observation during text layout.
]]
params {
@@ -417,7 +417,7 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
}
return: bool; [[$true on success.]]
}
- obstacles_update {
+ obstacles_update @beta {
[[Triggers for relayout due to obstacles' state change.
The obstacles alone don't affect the layout, until this is
@@ -455,15 +455,15 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
Efl.Canvas.Filter.Internal.filter_dirty;
Efl.Canvas.Filter.Internal.filter_input_render;
Efl.Canvas.Filter.Internal.filter_state_prepare;
- Efl.Text.Font.Properties.font_family { get; set; }
- Efl.Text.Font.Properties.font_size { get; set; }
- Efl.Text.Font.Properties.font_source { get; set; }
- Efl.Text.Font.Properties.font_fallbacks { get; set; }
- Efl.Text.Font.Properties.font_lang { get; set; }
- Efl.Text.Font.Properties.font_weight { get; set; }
- Efl.Text.Font.Properties.font_slant { get; set; }
- Efl.Text.Font.Properties.font_width { get; set; }
- Efl.Text.Font.Properties.font_bitmap_scalable { get; set; }
+ Efl.Text_Font_Properties.font_family { get; set; }
+ Efl.Text_Font_Properties.font_size { get; set; }
+ Efl.Text_Font_Properties.font_source { get; set; }
+ Efl.Text_Font_Properties.font_fallbacks { get; set; }
+ Efl.Text_Font_Properties.font_lang { get; set; }
+ Efl.Text_Font_Properties.font_weight { get; set; }
+ Efl.Text_Font_Properties.font_slant { get; set; }
+ Efl.Text_Font_Properties.font_width { get; set; }
+ Efl.Text_Font_Properties.font_bitmap_scalable { get; set; }
Efl.Text_Style.text_color { get; set; }
Efl.Text_Style.text_background_type { get; set; }
Efl.Text_Style.text_background_color { get; set; }
@@ -473,7 +473,7 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
Efl.Text_Style.text_underline_dashed_color { get; set; }
Efl.Text_Style.text_underline_dashed_width { get; set; }
Efl.Text_Style.text_underline_dashed_gap { get; set; }
- Efl.Text_Style.text_underline2_color { get; set; }
+ Efl.Text_Style.text_secondary_underline_color { get; set; }
Efl.Text_Style.text_strikethrough_type { get; set; }
Efl.Text_Style.text_strikethrough_color { get; set; }
Efl.Text_Style.text_effect_type { get; set; }
@@ -481,7 +481,7 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
Efl.Text_Style.text_shadow_direction { get; set; }
Efl.Text_Style.text_shadow_color { get; set; }
Efl.Text_Style.text_glow_color { get; set; }
- Efl.Text_Style.text_glow2_color { get; set; }
+ Efl.Text_Style.text_secondary_glow_color { get; set; }
Efl.Text_Style.text_gfx_filter { get; set; }
Efl.Text_Format.ellipsis { get; set; }
Efl.Text_Format.wrap { get; set; }
diff --git a/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.c
index 26c9341695..d5a63999aa 100644
--- a/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.c
@@ -1,41 +1,41 @@
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_textblock_visible_range_get(Efl_Canvas_Textblock *obj EINA_UNUSED, Efl_Text_Cursor_Handle *start, Efl_Text_Cursor_Handle *end)
{
return evas_textblock_cursor_visible_range_get(start, end);
}
-EAPI void
+EVAS_API void
evas_object_textblock_style_insets_get(const Efl_Canvas_Textblock *obj, int *l, int *r, int *t, int *b)
{
efl_canvas_textblock_style_insets_get(obj, l, r, t, b);
}
-EAPI void
+EVAS_API void
evas_object_textblock_bidi_delimiters_set(Efl_Canvas_Textblock *obj, const char *delim)
{
efl_canvas_textblock_bidi_delimiters_set(obj, delim);
}
-EAPI const char *
+EVAS_API const char *
evas_object_textblock_bidi_delimiters_get(const Efl_Canvas_Textblock *obj)
{
return efl_canvas_textblock_bidi_delimiters_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_textblock_legacy_newline_set(Efl_Canvas_Textblock *obj, Eina_Bool mode)
{
efl_canvas_textblock_newline_as_paragraph_separator_set(obj, mode);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_textblock_legacy_newline_get(const Efl_Canvas_Textblock *obj)
{
return efl_canvas_textblock_newline_as_paragraph_separator_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_textblock_size_formatted_get(const Efl_Canvas_Textblock *obj, int *w, int *h)
{
Eina_Size2D size;
@@ -44,7 +44,7 @@ evas_object_textblock_size_formatted_get(const Efl_Canvas_Textblock *obj, int *w
if (h) *h = size.h;
}
-EAPI void
+EVAS_API void
evas_object_textblock_size_native_get(const Efl_Canvas_Textblock *obj, int *w, int *h)
{
Eina_Size2D size;
@@ -53,19 +53,19 @@ evas_object_textblock_size_native_get(const Efl_Canvas_Textblock *obj, int *w, i
if (h) *h = size.h;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_textblock_obstacle_add(Efl_Canvas_Textblock *obj, Efl_Canvas_Object *eo_obs)
{
return efl_canvas_textblock_obstacle_add(obj, eo_obs);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_textblock_obstacle_del(Efl_Canvas_Textblock *obj, Efl_Canvas_Object *eo_obs)
{
return efl_canvas_textblock_obstacle_del(obj, eo_obs);
}
-EAPI void
+EVAS_API void
evas_object_textblock_obstacles_update(Efl_Canvas_Textblock *obj)
{
efl_canvas_textblock_obstacles_update(obj);
diff --git a/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.h
index 6b33674194..e4b903ec78 100644
--- a/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.h
@@ -5,6 +5,7 @@
#define _EFL_CANVAS_TEXTBLOCK_EO_CLASS_TYPE
typedef Eo Efl_Canvas_Textblock;
+typedef Efl_Canvas_Textblock Efl_Canvas_Text;
#endif
@@ -32,7 +33,7 @@ typedef Eo Efl_Canvas_Textblock;
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI Eina_Bool evas_object_textblock_visible_range_get(Efl_Canvas_Textblock *obj, Efl_Text_Cursor_Handle *start, Efl_Text_Cursor_Handle *end);
+EVAS_API Eina_Bool evas_object_textblock_visible_range_get(Efl_Canvas_Textblock *obj, Efl_Text_Cursor_Handle *start, Efl_Text_Cursor_Handle *end);
/**
* @brief Gets the left, right, top and bottom insets of the text.
@@ -49,7 +50,7 @@ EAPI Eina_Bool evas_object_textblock_visible_range_get(Efl_Canvas_Textblock *obj
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI void evas_object_textblock_style_insets_get(const Efl_Canvas_Textblock *obj, int *left, int *right, int *top, int *bottom);
+EVAS_API void evas_object_textblock_style_insets_get(const Efl_Canvas_Textblock *obj, int *left, int *right, int *top, int *bottom);
/**
* @brief BiDi delimiters are used for in-paragraph separation of bidi
@@ -64,7 +65,7 @@ EAPI void evas_object_textblock_style_insets_get(const Efl_Canvas_Textblock *obj
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI void evas_object_textblock_bidi_delimiters_set(Efl_Canvas_Textblock *obj, const char *delim);
+EVAS_API void evas_object_textblock_bidi_delimiters_set(Efl_Canvas_Textblock *obj, const char *delim);
/**
* @brief BiDi delimiters are used for in-paragraph separation of bidi
@@ -79,7 +80,7 @@ EAPI void evas_object_textblock_bidi_delimiters_set(Efl_Canvas_Textblock *obj, c
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI const char *evas_object_textblock_bidi_delimiters_get(const Efl_Canvas_Textblock *obj);
+EVAS_API const char *evas_object_textblock_bidi_delimiters_get(const Efl_Canvas_Textblock *obj);
/**
* @brief When @c true, newline character will behave as a paragraph separator.
@@ -91,7 +92,7 @@ EAPI const char *evas_object_textblock_bidi_delimiters_get(const Efl_Canvas_Text
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI void evas_object_textblock_legacy_newline_set(Efl_Canvas_Textblock *obj, Eina_Bool mode);
+EVAS_API void evas_object_textblock_legacy_newline_set(Efl_Canvas_Textblock *obj, Eina_Bool mode);
/**
* @brief When @c true, newline character will behave as a paragraph separator.
@@ -104,7 +105,7 @@ EAPI void evas_object_textblock_legacy_newline_set(Efl_Canvas_Textblock *obj, Ei
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI Eina_Bool evas_object_textblock_legacy_newline_get(const Efl_Canvas_Textblock *obj);
+EVAS_API Eina_Bool evas_object_textblock_legacy_newline_get(const Efl_Canvas_Textblock *obj);
@@ -133,7 +134,7 @@ EAPI Eina_Bool evas_object_textblock_legacy_newline_get(const Efl_Canvas_Textblo
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI void evas_object_textblock_size_formatted_get(const Efl_Canvas_Textblock *obj, int *width, int *height);
+EVAS_API void evas_object_textblock_size_formatted_get(const Efl_Canvas_Textblock *obj, int *width, int *height);
/**
* @brief The native width and height.
@@ -161,7 +162,7 @@ EAPI void evas_object_textblock_size_formatted_get(const Efl_Canvas_Textblock *o
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI void evas_object_textblock_size_native_get(const Efl_Canvas_Textblock *obj, int *width, int *height);
+EVAS_API void evas_object_textblock_size_native_get(const Efl_Canvas_Textblock *obj, int *width, int *height);
@@ -183,7 +184,7 @@ EAPI void evas_object_textblock_size_native_get(const Efl_Canvas_Textblock *obj,
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI Eina_Bool evas_object_textblock_obstacle_add(Efl_Canvas_Textblock *obj, Efl_Canvas_Object *eo_obs);
+EVAS_API Eina_Bool evas_object_textblock_obstacle_add(Efl_Canvas_Textblock *obj, Efl_Canvas_Object *eo_obs);
/**
* @brief Removes @c eo_obs from observation during text layout.
@@ -197,7 +198,7 @@ EAPI Eina_Bool evas_object_textblock_obstacle_add(Efl_Canvas_Textblock *obj, Efl
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI Eina_Bool evas_object_textblock_obstacle_del(Efl_Canvas_Textblock *obj, Efl_Canvas_Object *eo_obs);
+EVAS_API Eina_Bool evas_object_textblock_obstacle_del(Efl_Canvas_Textblock *obj, Efl_Canvas_Object *eo_obs);
/**
* @brief Triggers for relayout due to obstacles' state change.
@@ -216,7 +217,7 @@ EAPI Eina_Bool evas_object_textblock_obstacle_del(Efl_Canvas_Textblock *obj, Efl
*
* @ingroup Evas_Object_Textblock_Group
*/
-EAPI void evas_object_textblock_obstacles_update(Efl_Canvas_Textblock *obj);
+EVAS_API void evas_object_textblock_obstacles_update(Efl_Canvas_Textblock *obj);
#endif
diff --git a/src/lib/evas/canvas/efl_canvas_textblock_internal.h b/src/lib/evas/canvas/efl_canvas_textblock_internal.h
index a4f03fcef8..3db3e7ab17 100644
--- a/src/lib/evas/canvas/efl_canvas_textblock_internal.h
+++ b/src/lib/evas/canvas/efl_canvas_textblock_internal.h
@@ -257,31 +257,7 @@ _evas_textblock_annotations_node_format_remove(Evas_Object *o, Evas_Object_Textb
void
_evas_textblock_relayout_if_needed(Evas_Object *o);
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
/**
* Internally sets given text_object into cursor object.
@@ -290,7 +266,15 @@ _evas_textblock_relayout_if_needed(Evas_Object *o);
* @param canvas_text_obj the canvas text object, where cursor methods will take effect.
* @param text_obj the text_object that user can get using cursor text_object property.
*/
-EAPI void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_obj);
+EVAS_API void efl_text_cursor_object_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_obj);
+
+
+/**
+ * Internally create instance of cursor object.
+ *
+ * @param parent the parent of the cursor object.
+ */
+EVAS_API Eo* efl_text_cursor_object_create(Eo *parent);
/**
@@ -299,7 +283,7 @@ EAPI void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *t
* @param obj the cursor object.
* @param handle the text cursor handle.
*/
-EAPI void efl_text_cursor_handle_set(Eo *obj, Efl_Text_Cursor_Handle *handle);
+EVAS_API void efl_text_cursor_object_handle_set(Eo *obj, Efl_Text_Cursor_Handle *handle);
/**
* Internally gets cursor handle(legacy textblock cursor) from cursor object.
@@ -307,9 +291,6 @@ EAPI void efl_text_cursor_handle_set(Eo *obj, Efl_Text_Cursor_Handle *handle);
* @param obj the cursor object.
* @return the internal text cursor handle.
*/
-EAPI Efl_Text_Cursor_Handle *efl_text_cursor_handle_get(const Eo *obj);
-
-#undef EAPI
-#define EAPI
+EVAS_API Efl_Text_Cursor_Handle *efl_text_cursor_object_handle_get(const Eo *obj);
#endif//#ifndef _EFL_CANVAS_TEXTBLOCK_INTERNAL_H
diff --git a/src/lib/evas/canvas/efl_canvas_animation_translate.c b/src/lib/evas/canvas/efl_canvas_translate_animation.c
index 1a98daa60d..51e22d5446 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_translate.c
+++ b/src/lib/evas/canvas/efl_canvas_translate_animation.c
@@ -1,6 +1,6 @@
-#include "efl_canvas_animation_translate_private.h"
+#include "efl_canvas_translate_animation_private.h"
-#define MY_CLASS EFL_CANVAS_ANIMATION_TRANSLATE_CLASS
+#define MY_CLASS EFL_CANVAS_TRANSLATE_ANIMATION_CLASS
typedef struct __Translate_Property_Double
{
@@ -9,8 +9,8 @@ typedef struct __Translate_Property_Double
} _Translate_Property_Double;
EOLIAN static void
-_efl_canvas_animation_translate_translate_set(Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Translate_Data *pd,
+_efl_canvas_translate_animation_translate_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Translate_Animation_Data *pd,
Eina_Position2D from,
Eina_Position2D to)
{
@@ -22,8 +22,8 @@ _efl_canvas_animation_translate_translate_set(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_translate_translate_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Translate_Data *pd,
+_efl_canvas_translate_animation_translate_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Translate_Animation_Data *pd,
Eina_Position2D *from,
Eina_Position2D *to)
{
@@ -41,8 +41,8 @@ _efl_canvas_animation_translate_translate_get(const Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_translate_translate_absolute_set(Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Translate_Data *pd,
+_efl_canvas_translate_animation_translate_absolute_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Translate_Animation_Data *pd,
Eina_Position2D from,
Eina_Position2D to)
{
@@ -54,8 +54,8 @@ _efl_canvas_animation_translate_translate_absolute_set(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_canvas_animation_translate_translate_absolute_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Canvas_Animation_Translate_Data *pd,
+_efl_canvas_translate_animation_translate_absolute_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Translate_Animation_Data *pd,
Eina_Position2D *from,
Eina_Position2D *to)
{
@@ -73,8 +73,8 @@ _efl_canvas_animation_translate_translate_absolute_get(const Eo *eo_obj EINA_UNU
}
EOLIAN static double
-_efl_canvas_animation_translate_efl_canvas_animation_animation_apply(Eo *eo_obj,
- Efl_Canvas_Animation_Translate_Data *pd,
+_efl_canvas_translate_animation_efl_canvas_animation_animation_apply(Eo *eo_obj,
+ Efl_Canvas_Translate_Animation_Data *pd,
double progress,
Efl_Canvas_Object *target)
{
@@ -102,8 +102,8 @@ _efl_canvas_animation_translate_efl_canvas_animation_animation_apply(Eo *eo_obj,
}
EOLIAN static Efl_Object *
-_efl_canvas_animation_translate_efl_object_constructor(Eo *eo_obj,
- Efl_Canvas_Animation_Translate_Data *pd)
+_efl_canvas_translate_animation_efl_object_constructor(Eo *eo_obj,
+ Efl_Canvas_Translate_Animation_Data *pd)
{
eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
@@ -115,4 +115,4 @@ _efl_canvas_animation_translate_efl_object_constructor(Eo *eo_obj,
return eo_obj;
}
-#include "efl_canvas_animation_translate.eo.c"
+#include "efl_canvas_translate_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_animation_translate.eo b/src/lib/evas/canvas/efl_canvas_translate_animation.eo
index fdb3883156..23e9fe09b8 100644
--- a/src/lib/evas/canvas/efl_canvas_animation_translate.eo
+++ b/src/lib/evas/canvas/efl_canvas_translate_animation.eo
@@ -1,4 +1,6 @@
-class Efl.Canvas.Animation_Translate extends Efl.Canvas.Animation
+import eina_types;
+
+class Efl.Canvas.Translate_Animation extends Efl.Canvas.Animation
{
[[Animated translation effect.
@@ -12,7 +14,7 @@ class Efl.Canvas.Animation_Translate extends Efl.Canvas.Animation
@since 1.24
]]
c_prefix: efl_animation_translate;
- data: Efl_Canvas_Animation_Translate_Data;
+ data: Efl_Canvas_Translate_Animation_Data;
methods {
@property translate {
[[Translation vector, relative to the starting position of the object.
diff --git a/src/lib/evas/canvas/efl_canvas_translate_animation_private.h b/src/lib/evas/canvas/efl_canvas_translate_animation_private.h
new file mode 100644
index 0000000000..ba67bb2b9d
--- /dev/null
+++ b/src/lib/evas/canvas/efl_canvas_translate_animation_private.h
@@ -0,0 +1,16 @@
+#define EFL_ANIMATION_PROTECTED
+
+#include "evas_common_private.h"
+#include <Ecore.h>
+#include "efl_canvas_animation_private.h"
+
+#define EFL_TRANSLATE_ANIMATION_DATA_GET(o, pd) \
+ Efl_Canvas_Translate_Animation_Data *pd = efl_data_scope_get(o, EFL_CANVAS_TRANSLATE_ANIMATION_CLASS)
+
+typedef struct _Efl_Canvas_Translate_Animation_Data
+{
+ Eina_Position2D from;
+ Eina_Position2D to;
+
+ Eina_Bool use_rel_move;
+} Efl_Canvas_Translate_Animation_Data;
diff --git a/src/lib/evas/canvas/efl_canvas_vg_container.c b/src/lib/evas/canvas/efl_canvas_vg_container.c
index 9c7061b010..4ba1d96bfe 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_container.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_container.c
@@ -192,6 +192,14 @@ _efl_canvas_vg_container_render_pre(Evas_Object_Protected_Data *vg_pd,
ptransform, ctransform, p_opacity, c_a, comp, comp_method);
}
+ //If the container has transparency, it internally alpha blends with ector buffer.
+ //So ector buffer must be created synchronously.
+ if (c_a < 255 && vg_pd && vg_pd->object)
+ {
+ Efl_Canvas_Vg_Object_Data *od = efl_data_scope_get(vg_pd->object, EFL_CANVAS_VG_OBJECT_CLASS);
+ od->sync_render = EINA_TRUE;
+ }
+
EINA_LIST_FOREACH(pd->children, l, child)
{
//Don't need to update composite nodes.
@@ -212,6 +220,13 @@ _efl_canvas_vg_container_render_pre(Evas_Object_Protected_Data *vg_pd,
if (flag & EFL_GFX_CHANGE_FLAG_MATRIX)
child_nd->flags |= EFL_GFX_CHANGE_FLAG_MATRIX;
+ // Note: If Vg.Container has transparency, this is calculated by _evas_vg_render in Efl.Canvas.Vg.Object.
+ // Therefore, there is no need to propagate the transparency of the container to the child.
+ // However, if there is a composition target, the child must refer to the parent's opacity.
+ // Because _evas_vg_render does not support opacity calculation for containers that need to be composited.
+ // These things need to be refactored in a better way later.
+ c_a = !comp ? 255 : c_a;
+
_evas_vg_render_pre(vg_pd, child,
engine, output, context, surface,
ctransform, c_a, comp, comp_method);
@@ -273,15 +288,46 @@ _efl_canvas_vg_container_efl_gfx_path_bounds_get(const Eo *obj EINA_UNUSED,
EINA_LIST_FOREACH(pd->children, l, child)
{
+ Eina_Position2D pos = efl_gfx_entity_position_get(child);
+ double miterlimit = 0.0, stroke_gap = 0.0;
+ if (efl_isa(child, EFL_CANVAS_VG_SHAPE_CLASS))
+ {
+ miterlimit = efl_gfx_shape_stroke_miterlimit_get(child);
+ stroke_gap = efl_gfx_shape_stroke_width_get(child) * (miterlimit <= 0 ? 1 : miterlimit);
+ }
if (first)
{
efl_gfx_path_bounds_get(child, r);
- first = EINA_FALSE;
+ if (r->size.w != 0 && r->size.h != 0)
+ {
+ r->pos.x += pos.x;
+ r->pos.y += pos.y;
+ if (stroke_gap > 1.0)
+ {
+ r->pos.x -= (int)(stroke_gap/2.0);
+ r->pos.y -= (int)(stroke_gap/2.0);
+ r->size.w += (int)(stroke_gap);
+ r->size.h += (int)(stroke_gap);
+ }
+ first = EINA_FALSE;
+ }
}
else
{
efl_gfx_path_bounds_get(child, &s);
- eina_rectangle_union(&r->rect, &s.rect);
+ if (s.size.w != 0 && s.size.h != 0)
+ {
+ s.pos.x += pos.x;
+ s.pos.y += pos.y;
+ if (stroke_gap > 1.0)
+ {
+ s.pos.x -= (int)(stroke_gap/2.0);
+ s.pos.y -= (int)(stroke_gap/2.0);
+ s.size.w += (int)(stroke_gap);
+ s.size.h += (int)(stroke_gap);
+ }
+ eina_rectangle_union(&r->rect, &s.rect);
+ }
}
}
}
@@ -304,6 +350,12 @@ _efl_canvas_vg_container_children_get(Eo *obj EINA_UNUSED, Efl_Canvas_Vg_Contain
return eina_list_iterator_new(pd->children);
}
+static const Eina_List *
+_efl_canvas_vg_container_children_direct_get(Eo *obj EINA_UNUSED, Efl_Canvas_Vg_Container_Data *pd)
+{
+ return pd->children;
+}
+
static Eina_Bool
_efl_canvas_vg_container_efl_gfx_path_interpolate(Eo *obj, Efl_Canvas_Vg_Container_Data *pd, const Efl_VG *from, const Efl_VG *to, double pos_map)
{
@@ -475,12 +527,16 @@ efl_canvas_vg_container_blend_buffer_clear(Efl_VG *obj EINA_UNUSED, Efl_Canvas_V
cd->blend.buffer = NULL;
}
-EAPI Efl_VG*
-evas_vg_container_add(Efl_VG *parent)
+EVAS_API Evas_Vg_Container *
+evas_vg_container_add(Evas_Object *parent)
{
/* Warn it because the usage has been changed.
We can remove this message after v1.21. */
- if (!parent) CRI("Efl_VG Container doesn't allow null parent!");
+ if (!parent)
+ {
+ ERR("Efl_VG Container doesn't allow null parent!");
+ return NULL;
+ }
return efl_add(MY_CLASS, parent);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_container.eo b/src/lib/evas/canvas/efl_canvas_vg_container.eo
index 0290cf4848..6865ecdd24 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_container.eo
+++ b/src/lib/evas/canvas/efl_canvas_vg_container.eo
@@ -13,6 +13,10 @@ class @beta Efl.Canvas.Vg.Container extends Efl.Canvas.Vg.Node
[[Get all children of container]]
return: iterator<Efl.Canvas.Vg.Node> @move @no_unused; [[Iterator to children]]
}
+ children_direct_get {
+ [[Get all children of container]]
+ return: const(list<Efl.Canvas.Vg.Node>) @no_unused; [[List to children]]
+ }
}
implements {
Efl.Object.constructor;
diff --git a/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.c
index a31fc33d44..5928ac17ee 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.c
@@ -1,12 +1,12 @@
-EAPI Efl_Canvas_Vg_Node *
-evas_vg_container_child_get(Efl_Canvas_Vg_Container *obj, const char *name)
+EVAS_API Evas_Vg_Node *
+evas_vg_container_child_get(Evas_Vg_Container *obj, const char *name)
{
return efl_canvas_vg_container_child_get(obj, name);
}
-EAPI Eina_Iterator *
-evas_vg_container_children_get(Efl_Canvas_Vg_Container *obj)
+EVAS_API Eina_Iterator *
+evas_vg_container_children_get(Evas_Vg_Container *obj)
{
return efl_canvas_vg_container_children_get(obj);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.h
index 691a93b3c4..235462a987 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_vg_container_eo.legacy.h
@@ -1,40 +1,44 @@
-#ifndef _EFL_CANVAS_VG_CONTAINER_EO_LEGACY_H_
-#define _EFL_CANVAS_VG_CONTAINER_EO_LEGACY_H_
+#ifndef _EVAS_VG_CONTAINER_EO_LEGACY_H_
+#define _EVAS_VG_CONTAINER_EO_LEGACY_H_
-#ifndef _EFL_CANVAS_VG_CONTAINER_EO_CLASS_TYPE
-#define _EFL_CANVAS_VG_CONTAINER_EO_CLASS_TYPE
+#ifndef _EVAS_VG_CONTAINER_EO_CLASS_TYPE
+#define _EVAS_VG_CONTAINER_EO_CLASS_TYPE
-typedef Eo Efl_Canvas_Vg_Container;
+typedef Eo Evas_Vg_Container;
#endif
-#ifndef _EFL_CANVAS_VG_CONTAINER_EO_TYPES
-#define _EFL_CANVAS_VG_CONTAINER_EO_TYPES
+#ifndef _EVAS_VG_CONTAINER_EO_TYPES
+#define _EVAS_VG_CONTAINER_EO_TYPES
#endif
/**
- * @brief Get child of container
+ * @brief Get child of container.
*
* @param[in] obj The object.
- * @param[in] name Child node name
+ * @param[in] name The Child node name.
*
- * @return Child object
+ * @return The child object.
+ *
+ * @since 1.24
*
* @ingroup Evas_Vg_Container_Group
*/
-EAPI Efl_Canvas_Vg_Node *evas_vg_container_child_get(Efl_Canvas_Vg_Container *obj, const char *name);
+EVAS_API Evas_Vg_Node *evas_vg_container_child_get(Evas_Vg_Container *obj, const char *name);
/**
- * @brief Get all children of container
+ * @brief Get all children of container.
*
* @param[in] obj The object.
*
- * @return Iterator to children
+ * @return The iterator to children.
+ *
+ * @since 1.24
*
* @ingroup Evas_Vg_Container_Group
*/
-EAPI Eina_Iterator *evas_vg_container_children_get(Efl_Canvas_Vg_Container *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Iterator *evas_vg_container_children_get(Evas_Vg_Container *obj) EINA_WARN_UNUSED_RESULT;
#endif
diff --git a/src/lib/evas/canvas/efl_canvas_vg_gradient.c b/src/lib/evas/canvas/efl_canvas_vg_gradient.c
index 3bc4ec80a8..d254888631 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_gradient.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_gradient.c
@@ -117,28 +117,28 @@ _efl_canvas_vg_gradient_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Gra
return cn;
}
-EAPI void
-evas_vg_gradient_stop_set(Eo *obj, const Efl_Gfx_Gradient_Stop *colors, unsigned int length)
+EVAS_API void
+evas_vg_gradient_stop_set(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop *colors, unsigned int length)
{
- efl_gfx_gradient_stop_set(obj, colors, length);
+ efl_gfx_gradient_stop_set(obj, (const Efl_Gfx_Gradient_Stop *)colors, length);
}
-EAPI void
-evas_vg_gradient_stop_get(Eo *obj, const Efl_Gfx_Gradient_Stop **colors, unsigned int *length)
+EVAS_API void
+evas_vg_gradient_stop_get(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop **colors, unsigned int *length)
{
- efl_gfx_gradient_stop_get(obj, colors, length);
+ efl_gfx_gradient_stop_get(obj, (const Efl_Gfx_Gradient_Stop **)colors, length);
}
-EAPI void
-evas_vg_gradient_spread_set(Eo *obj, Efl_Gfx_Gradient_Spread s)
+EVAS_API void
+evas_vg_gradient_spread_set(Evas_Vg_Gradient *obj, Evas_Vg_Gradient_Spread s)
{
- efl_gfx_gradient_spread_set(obj, s);
+ efl_gfx_gradient_spread_set(obj, (Efl_Gfx_Gradient_Spread)s);
}
-EAPI Efl_Gfx_Gradient_Spread
-evas_vg_gradient_spread_get(Eo *obj)
+EVAS_API Evas_Vg_Gradient_Spread
+evas_vg_gradient_spread_get(Evas_Vg_Gradient *obj)
{
- return efl_gfx_gradient_spread_get(obj);
+ return (Evas_Vg_Gradient_Spread)efl_gfx_gradient_spread_get(obj);
}
#include "efl_canvas_vg_gradient.eo.c"
diff --git a/src/lib/evas/canvas/efl_canvas_vg_gradient_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_vg_gradient_eo.legacy.h
new file mode 100644
index 0000000000..01ebdc32cb
--- /dev/null
+++ b/src/lib/evas/canvas/efl_canvas_vg_gradient_eo.legacy.h
@@ -0,0 +1,21 @@
+#ifndef _EVAS_VG_GRADIENT_EO_LEGACY_H_
+#define _EVAS_VG_GRADIENT_EO_LEGACY_H_
+
+typedef Eo Evas_Vg_Gradient;
+
+#endif
+
+#ifndef _EVAS_VG_GRADIENT_LINEAR_EO_LEGACY_H_
+#define _EVAS_VG_GRADIENT_LINEAR_EO_LEGACY_H_
+
+typedef Eo Evas_Vg_Gradient_Linear;
+
+#endif
+
+#ifndef _EVAS_VG_GRADIENT_RADIAL_EO_LEGACY_H_
+#define _EVAS_VG_GRADIENT_RADIAL_EO_LEGACY_H_
+
+typedef Eo Evas_Vg_Gradient_Radial;
+
+#endif
+
diff --git a/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c b/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c
index fd681eda38..01ba7cf843 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c
@@ -171,32 +171,32 @@ _efl_canvas_vg_gradient_linear_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas
return cn;
}
-EAPI void
-evas_vg_gradient_linear_start_set(Eo *obj, double x, double y)
+EVAS_API void
+evas_vg_gradient_linear_start_set(Evas_Vg_Gradient_Linear *obj, double x, double y)
{
efl_gfx_gradient_linear_start_set(obj, x, y);
}
-EAPI void
-evas_vg_gradient_linear_start_get(Eo *obj, double *x, double *y)
+EVAS_API void
+evas_vg_gradient_linear_start_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y)
{
efl_gfx_gradient_linear_start_get(obj, x, y);
}
-EAPI void
-evas_vg_gradient_linear_end_set(Eo *obj, double x, double y)
+EVAS_API void
+evas_vg_gradient_linear_end_set(Evas_Vg_Gradient_Linear *obj, double x, double y)
{
efl_gfx_gradient_linear_end_set(obj, x, y);
}
-EAPI void
-evas_vg_gradient_linear_end_get(Eo *obj, double *x, double *y)
+EVAS_API void
+evas_vg_gradient_linear_end_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y)
{
efl_gfx_gradient_linear_end_get(obj, x, y);
}
-EAPI Efl_VG*
-evas_vg_gradient_linear_add(Efl_VG *parent)
+EVAS_API Evas_Vg_Gradient_Linear *
+evas_vg_gradient_linear_add(Evas_Vg_Container *parent)
{
return efl_add(EFL_CANVAS_VG_GRADIENT_LINEAR_CLASS, parent);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c b/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c
index 8cbffa6e66..d35f35f92f 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c
@@ -193,44 +193,44 @@ _efl_canvas_vg_gradient_radial_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas
return cn;
}
-EAPI void
-evas_vg_gradient_radial_center_set(Eo *obj, double x, double y)
+EVAS_API void
+evas_vg_gradient_radial_center_set(Evas_Vg_Gradient_Radial *obj, double x, double y)
{
efl_gfx_gradient_radial_center_set(obj, x, y);
}
-EAPI void
-evas_vg_gradient_radial_center_get(Eo *obj, double *x, double *y)
+EVAS_API void
+evas_vg_gradient_radial_center_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y)
{
efl_gfx_gradient_radial_center_get(obj, x, y);
}
-EAPI void
-evas_vg_gradient_radial_radius_set(Eo *obj, double r)
+EVAS_API void
+evas_vg_gradient_radial_radius_set(Evas_Vg_Gradient_Radial *obj, double r)
{
efl_gfx_gradient_radial_radius_set(obj, r);
}
-EAPI double
-evas_vg_gradient_radial_radius_get(Eo *obj)
+EVAS_API double
+evas_vg_gradient_radial_radius_get(Evas_Vg_Gradient_Radial *obj)
{
return efl_gfx_gradient_radial_radius_get(obj);
}
-EAPI void
-evas_vg_gradient_radial_focal_set(Eo *obj, double x, double y)
+EVAS_API void
+evas_vg_gradient_radial_focal_set(Evas_Vg_Gradient_Radial *obj, double x, double y)
{
efl_gfx_gradient_radial_focal_set(obj, x, y);
}
-EAPI void
-evas_vg_gradient_radial_focal_get(Eo *obj, double *x, double *y)
+EVAS_API void
+evas_vg_gradient_radial_focal_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y)
{
efl_gfx_gradient_radial_focal_get(obj, x, y);
}
-EAPI Efl_VG*
-evas_vg_gradient_radial_add(Efl_VG *parent)
+EVAS_API Evas_Vg_Gradient_Radial*
+evas_vg_gradient_radial_add(Evas_Vg_Container *parent)
{
return efl_add(EFL_CANVAS_VG_GRADIENT_RADIAL_CLASS, parent);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_image.c b/src/lib/evas/canvas/efl_canvas_vg_image.c
index 1d0ba1772a..eb5c306ba3 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_image.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_image.c
@@ -49,7 +49,6 @@ _efl_canvas_vg_image_render_pre(Evas_Object_Protected_Data *vg_pd,
if (!pd->buffer && pd->image)
{
Evas_Object_Protected_Data *obj = vg_pd;
- if (pd->buffer) efl_unref(pd->buffer);
pd->buffer = ENFN->ector_buffer_new(ENC, obj->layer->evas->evas,
pd->w, pd->h,
EFL_GFX_COLORSPACE_ARGB8888,
diff --git a/src/lib/evas/canvas/efl_canvas_vg_node.c b/src/lib/evas/canvas/efl_canvas_vg_node.c
index 72d0265908..342c2106a3 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_node.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_node.c
@@ -19,7 +19,15 @@ static const Efl_Canvas_Vg_Interpolation interpolation_identity = {
static void
_node_change(Efl_VG *obj, Efl_Canvas_Vg_Node_Data *nd)
{
- if (!nd || nd->flags != EFL_GFX_CHANGE_FLAG_NONE) return;
+ if (!nd) return;
+ if (nd->flags != EFL_GFX_CHANGE_FLAG_NONE)
+ {
+ if ((nd->vd && nd->vd->obj) &&
+ (!nd->vd->obj || !nd->vd->obj->changed))
+ efl_canvas_vg_object_change(nd->vd);
+
+ return;
+ }
nd->flags = EFL_GFX_CHANGE_FLAG_ALL;
Eo *p = obj;
@@ -391,29 +399,15 @@ _efl_canvas_vg_node_efl_object_parent_set(Eo *obj,
static void
_efl_canvas_vg_node_efl_gfx_stack_raise_to_top(Eo *obj, Efl_Canvas_Vg_Node_Data *pd EINA_UNUSED)
{
- Efl_Canvas_Vg_Container_Data *cd;
- Eina_List *lookup, *next;
- Eo *parent;
-
- parent = efl_parent_get(obj);
- if (!efl_isa(parent, EFL_CANVAS_VG_CONTAINER_CLASS)) goto on_error;
- cd = efl_data_scope_get(parent, EFL_CANVAS_VG_CONTAINER_CLASS);
-
- // FIXME: this could become slow with to much object
- lookup = eina_list_data_find_list(cd->children, obj);
- if (!lookup) goto on_error;
-
- next = eina_list_next(lookup);
- if (!next) return ;
-
- cd->children = eina_list_remove_list(cd->children, lookup);
- cd->children = eina_list_append_relative_list(cd->children, obj, next);
+ Efl_Canvas_Vg_Node *parent = efl_parent_get(obj);
+ if (!efl_isa(parent, EFL_CANVAS_VG_CONTAINER_CLASS)) return;
+ Efl_Canvas_Vg_Container_Data *cd = efl_data_scope_get(parent, EFL_CANVAS_VG_CONTAINER_CLASS);
+ if (!cd->children) return;
+ if (eina_list_data_get(eina_list_last(cd->children)) == obj) return;
+ cd->children = eina_list_remove(cd->children, obj);
+ cd->children = eina_list_append(cd->children, obj);
_node_change(parent, efl_data_scope_get(parent, MY_CLASS));
- return;
-
- on_error:
- ERR("Err");
}
static void
@@ -479,132 +473,67 @@ _efl_canvas_vg_node_efl_gfx_stack_stack_below(Eo *obj,
static void
_efl_canvas_vg_node_efl_gfx_stack_lower_to_bottom(Eo *obj, Efl_Canvas_Vg_Node_Data *pd EINA_UNUSED)
{
- Efl_Canvas_Vg_Container_Data *cd;
- Eina_List *lookup, *prev;
- Eo *parent;
-
- parent = efl_parent_get(obj);
- if (!efl_isa(parent, EFL_CANVAS_VG_CONTAINER_CLASS)) goto on_error;
- cd = efl_data_scope_get(parent, EFL_CANVAS_VG_CONTAINER_CLASS);
-
- // FIXME: this could become slow with to much object
- lookup = eina_list_data_find_list(cd->children, obj);
- if (!lookup) goto on_error;
-
- prev = eina_list_prev(lookup);
- if (!prev) return;
-
- cd->children = eina_list_remove_list(cd->children, lookup);
- cd->children = eina_list_prepend_relative_list(cd->children, obj, prev);
+ Efl_Canvas_Vg_Node *parent = efl_parent_get(obj);
+ if (!efl_isa(parent, EFL_CANVAS_VG_CONTAINER_CLASS)) return;
+ Efl_Canvas_Vg_Container_Data *cd = efl_data_scope_get(parent, EFL_CANVAS_VG_CONTAINER_CLASS);
+ if (!cd->children) return;
+ if (eina_list_data_get(cd->children) == obj) return;
+ cd->children = eina_list_remove(cd->children, obj);
+ cd->children = eina_list_prepend(cd->children, obj);
_node_change(parent, efl_data_scope_get(parent, MY_CLASS));
- return;
-
- on_error:
- ERR("Err");
-}
-
-static const Eo *
-_efl_canvas_vg_node_root_parent_get(const Eo *obj)
-{
- const Eo *parent;
-
- parent = efl_parent_get(obj);
-
- if (!parent) return obj;
- return _efl_canvas_vg_node_root_parent_get(parent);
-}
-
-static void
-_efl_canvas_vg_node_walk_down_at(const Eo *root, Eina_Array *a, Eina_Rectangle *r)
-{
- Eina_Rect bounds;
-
- efl_gfx_path_bounds_get(root, &bounds);
- if (!eina_rectangles_intersect(&bounds.rect, r)) return ;
-
- eina_array_push(a, root);
-
- if (efl_isa(root, EFL_CANVAS_VG_CONTAINER_CLASS))
- {
- Efl_Canvas_Vg_Container_Data *cd;
- Eina_List *l;
- Eo *child;
-
- cd = efl_data_scope_get(root, EFL_CANVAS_VG_CONTAINER_CLASS);
- EINA_LIST_FOREACH(cd->children, l, child)
- _efl_canvas_vg_node_walk_down_at(child, a, r);
- }
-}
-
-static void
-_efl_canvas_vg_node_object_at(const Eo *obj, Eina_Array *a, Eina_Rectangle *r)
-{
- const Eo *root;
-
- root = _efl_canvas_vg_node_root_parent_get(obj);
- if (!root) return ;
-
- _efl_canvas_vg_node_walk_down_at(root, a, r);
}
static Efl_Gfx_Stack *
_efl_canvas_vg_node_efl_gfx_stack_below_get(const Eo *obj, Efl_Canvas_Vg_Node_Data *pd EINA_UNUSED)
{
- Eina_Rect r;
- Eina_Array a;
- Eo *current;
- Eo *below = NULL;
- Eina_Array_Iterator iterator;
- unsigned int i;
+ Eo *parent, *below;
+ const Eina_List *list;
- efl_gfx_path_bounds_get(obj, &r);
+ parent = efl_parent_get(obj);
+ if (!efl_isa(parent, EFL_CANVAS_VG_CONTAINER_CLASS)) goto on_error;
- eina_array_step_set(&a, sizeof (Eina_Array), 8);
+ list = efl_canvas_vg_container_children_direct_get(parent);
+ if (list == NULL) goto on_error;
- _efl_canvas_vg_node_object_at(obj, &a, &r.rect);
+ list = eina_list_data_find_list(list, obj);
+ if (list == NULL) goto on_error;
- EINA_ARRAY_ITER_NEXT(&a, i, current, iterator)
- if (current == obj)
- {
- i++;
- if (i < eina_array_count(&a))
- below = eina_array_data_get(&a, i);
- break;
- }
+ list = eina_list_prev(list);
+ if (list == NULL) goto on_error;
- eina_array_flush(&a);
+ below = list->data;
return below;
+
+ on_error:
+ return NULL;
}
static Efl_Gfx_Stack *
_efl_canvas_vg_node_efl_gfx_stack_above_get(const Eo *obj, Efl_Canvas_Vg_Node_Data *pd EINA_UNUSED)
{
- Eina_Rect r;
- Eina_Array a;
- Eo *current;
- Eo *above = NULL;
- Eina_Array_Iterator iterator;
- unsigned int i;
+ Eo *parent, *above;
+ const Eina_List *list;
- efl_gfx_path_bounds_get(obj, &r);
+ parent = efl_parent_get(obj);
+ if (!efl_isa(parent, EFL_CANVAS_VG_CONTAINER_CLASS)) goto on_error;
- eina_array_step_set(&a, sizeof (Eina_Array), 8);
+ list = efl_canvas_vg_container_children_direct_get(parent);
+ if (list == NULL) goto on_error;
- _efl_canvas_vg_node_object_at(obj, &a, &r.rect);
+ list = eina_list_data_find_list(list, obj);
+ if (list == NULL) goto on_error;
- EINA_ARRAY_ITER_NEXT(&a, i, current, iterator)
- if (current == obj)
- {
- if (i > 0)
- above = eina_array_data_get(&a, i - 1);
- break;
- }
+ list = eina_list_next(list);
+ if (list == NULL) goto on_error;
- eina_array_flush(&a);
+ above = list->data;
return above;
+
+ on_error:
+ return NULL;
}
static Efl_Canvas_Vg_Interpolation *
@@ -780,32 +709,32 @@ _efl_canvas_vg_node_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Node_Da
return node;
}
-EAPI Eina_Bool
-evas_vg_node_visible_get(Eo *obj)
+EVAS_API Eina_Bool
+evas_vg_node_visible_get(Evas_Vg_Node *obj)
{
return efl_gfx_entity_visible_get(obj);
}
-EAPI void
-evas_vg_node_visible_set(Eo *obj, Eina_Bool v)
+EVAS_API void
+evas_vg_node_visible_set(Evas_Vg_Node *obj, Eina_Bool v)
{
efl_gfx_entity_visible_set(obj, v);
}
-EAPI void
-evas_vg_node_color_get(Eo *obj, int *r, int *g, int *b, int *a)
+EVAS_API void
+evas_vg_node_color_get(Evas_Vg_Node *obj, int *r, int *g, int *b, int *a)
{
efl_gfx_color_get(obj, r, g, b, a);
}
-EAPI void
-evas_vg_node_color_set(Eo *obj, int r, int g, int b, int a)
+EVAS_API void
+evas_vg_node_color_set(Evas_Vg_Node *obj, int r, int g, int b, int a)
{
efl_gfx_color_set(obj, r, g, b, a);
}
-EAPI void
-evas_vg_node_geometry_get(Eo *obj, int *x, int *y, int *w, int *h)
+EVAS_API void
+evas_vg_node_geometry_get(Evas_Vg_Node *obj, int *x, int *y, int *w, int *h)
{
Eina_Rect r;
r.pos = efl_gfx_entity_position_get(obj);
@@ -816,33 +745,34 @@ evas_vg_node_geometry_get(Eo *obj, int *x, int *y, int *w, int *h)
if (h) *h = r.h;
}
-EAPI void
-evas_vg_node_geometry_set(Eo *obj, int x, int y, int w, int h)
+/* deprecated */
+EVAS_API void
+evas_vg_node_geometry_set(Evas_Vg_Node *obj, int x, int y, int w, int h)
{
efl_gfx_entity_position_set(obj, EINA_POSITION2D(x, y));
efl_gfx_entity_size_set(obj, EINA_SIZE2D(w, h));
}
-EAPI void
-evas_vg_node_stack_below(Eo *obj, Eo *below)
+EVAS_API void
+evas_vg_node_stack_below(Evas_Vg_Node *obj, Eo *below)
{
efl_gfx_stack_below(obj, below);
}
-EAPI void
-evas_vg_node_stack_above(Eo *obj, Eo *above)
+EVAS_API void
+evas_vg_node_stack_above(Evas_Vg_Node *obj, Eo *above)
{
efl_gfx_stack_above(obj, above);
}
-EAPI void
-evas_vg_node_raise(Eo *obj)
+EVAS_API void
+evas_vg_node_raise(Evas_Vg_Node *obj)
{
efl_gfx_stack_raise_to_top(obj);
}
-EAPI void
-evas_vg_node_lower(Eo *obj)
+EVAS_API void
+evas_vg_node_lower(Evas_Vg_Node *obj)
{
efl_gfx_stack_lower_to_bottom(obj);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.c
index 559434b294..89e615ccf0 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.c
@@ -1,30 +1,30 @@
-EAPI void
-evas_vg_node_transformation_set(Efl_Canvas_Vg_Node *obj, const Eina_Matrix3 *m)
+EVAS_API void
+evas_vg_node_transformation_set(Evas_Vg_Node *obj, const Eina_Matrix3 *m)
{
efl_canvas_vg_node_transformation_set(obj, m);
}
-EAPI const Eina_Matrix3 *
-evas_vg_node_transformation_get(const Efl_Canvas_Vg_Node *obj)
+EVAS_API const Eina_Matrix3 *
+evas_vg_node_transformation_get(const Evas_Vg_Node *obj)
{
return efl_canvas_vg_node_transformation_get(obj);
}
-EAPI void
-evas_vg_node_origin_set(Efl_Canvas_Vg_Node *obj, double x, double y)
+EVAS_API void
+evas_vg_node_origin_set(Evas_Vg_Node *obj, double x, double y)
{
efl_canvas_vg_node_origin_set(obj, x, y);
}
-EAPI void
-evas_vg_node_origin_get(const Efl_Canvas_Vg_Node *obj, double *x, double *y)
+EVAS_API void
+evas_vg_node_origin_get(const Evas_Vg_Node *obj, double *x, double *y)
{
efl_canvas_vg_node_origin_get(obj, x, y);
}
-EAPI void
-evas_vg_node_mask_set(Efl_Canvas_Vg_Node *obj, Efl_Canvas_Vg_Node *mask, int op EINA_UNUSED)
+EVAS_API void
+evas_vg_node_mask_set(Evas_Vg_Node *obj, Evas_Vg_Node *mask, int op EINA_UNUSED)
{
efl_canvas_vg_node_comp_method_set(obj, mask, 0);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.h
index ee3b407331..14681b077d 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_vg_node_eo.legacy.h
@@ -1,45 +1,49 @@
-#ifndef _EFL_CANVAS_VG_NODE_EO_LEGACY_H_
-#define _EFL_CANVAS_VG_NODE_EO_LEGACY_H_
+#ifndef _EVAS_VG_NODE_EO_LEGACY_H_
+#define _EVAS_VG_NODE_EO_LEGACY_H_
-#ifndef _EFL_CANVAS_VG_NODE_EO_CLASS_TYPE
-#define _EFL_CANVAS_VG_NODE_EO_CLASS_TYPE
+#ifndef _EVAS_VG_NODE_EO_CLASS_TYPE
+#define _EVAS_VG_NODE_EO_CLASS_TYPE
-typedef Eo Efl_Canvas_Vg_Node;
+typedef Eo Evas_Vg_Node;
#endif
-#ifndef _EFL_CANVAS_VG_NODE_EO_TYPES
-#define _EFL_CANVAS_VG_NODE_EO_TYPES
+#ifndef _EVAS_VG_NODE_EO_TYPES
+#define _EVAS_VG_NODE_EO_TYPES
#endif
/**
+ * @defgroup Evas_Vg_Node_Group Vector Graphics Node Functions
+ * @ingroup Evas_Object_Vg_Group
+ */
+
+/**
* @brief Sets the transformation matrix to be used for this node object.
*
* @note Pass @c null to cancel the applied transformation.
*
* @param[in] obj The object.
- * @param[in] m Transformation matrix.
+ * @param[in] m The transformation matrix.
*
* @since 1.14
*
* @ingroup Evas_Vg_Node_Group
*/
-EAPI void evas_vg_node_transformation_set(Efl_Canvas_Vg_Node *obj, const Eina_Matrix3 *m);
+EVAS_API void evas_vg_node_transformation_set(Evas_Vg_Node *obj, const Eina_Matrix3 *m);
/**
* @brief Gets the transformation matrix used for this node object.
*
* @param[in] obj The object.
- *
- * @return Transformation matrix.
+ * @return The transformation matrix.
*
* @since 1.14
*
* @ingroup Evas_Vg_Node_Group
*/
-EAPI const Eina_Matrix3 *evas_vg_node_transformation_get(const Efl_Canvas_Vg_Node *obj);
+EVAS_API const Eina_Matrix3 *evas_vg_node_transformation_get(const Evas_Vg_Node *obj);
/**
* @brief Sets the origin position of the node object.
@@ -54,7 +58,7 @@ EAPI const Eina_Matrix3 *evas_vg_node_transformation_get(const Efl_Canvas_Vg_Nod
*
* @ingroup Evas_Vg_Node_Group
*/
-EAPI void evas_vg_node_origin_set(Efl_Canvas_Vg_Node *obj, double x, double y);
+EVAS_API void evas_vg_node_origin_set(Evas_Vg_Node *obj, double x, double y);
/**
* @brief Gets the origin position of the node object.
@@ -67,7 +71,7 @@ EAPI void evas_vg_node_origin_set(Efl_Canvas_Vg_Node *obj, double x, double y);
*
* @ingroup Evas_Vg_Node_Group
*/
-EAPI void evas_vg_node_origin_get(const Efl_Canvas_Vg_Node *obj, double *x, double *y);
+EVAS_API void evas_vg_node_origin_get(const Evas_Vg_Node *obj, double *x, double *y);
/**
* @brief Set Mask Node to this renderer
@@ -76,8 +80,10 @@ EAPI void evas_vg_node_origin_get(const Efl_Canvas_Vg_Node *obj, double *x, doub
* @param[in] mask Mask object
* @param[in] op Masking Option. Reserved
*
+ * @since 1.24
+ *
* @ingroup Evas_Vg_Node_Group
*/
-EAPI void evas_vg_node_mask_set(Efl_Canvas_Vg_Node *obj, Efl_Canvas_Vg_Node *mask, int op);
+EVAS_API void evas_vg_node_mask_set(Evas_Vg_Node *obj, Evas_Vg_Node *mask, int op);
#endif
diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.c b/src/lib/evas/canvas/efl_canvas_vg_object.c
index 83a59bd6fe..7ebb1f4143 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_object.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_object.c
@@ -263,11 +263,13 @@ _efl_canvas_vg_object_efl_file_file_set(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *p
evas_object_change(eo_obj, obj);
pd->vg_entry = NULL;
evas_object_change(eo_obj, obj);
+ pd->changed = EINA_TRUE;
}
}
Eina_Error err;
err = efl_file_set(efl_super(eo_obj, MY_CLASS), file);
+
if (err) return err;
return 0;
@@ -291,7 +293,14 @@ _efl_canvas_vg_object_efl_file_load(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd)
file, key,
obj->cur->geometry.w,
obj->cur->geometry.h, NULL);
+
+ // NOTE: Update object's viewbox. In this case, there is no need to update
+ // the root of tree. That's why We don't use viewbox_set.
+ if (pd->vg_entry && pd->vg_entry->vfd)
+ pd->viewbox.rect = pd->vg_entry->vfd->view_box;
+
evas_object_change(eo_obj, obj);
+ pd->changed = EINA_TRUE;
return 0;
}
@@ -346,9 +355,19 @@ _efl_canvas_vg_object_efl_object_invalidate(Eo *eo_obj, Efl_Canvas_Vg_Object_Dat
{
Vg_User_Entry *user_entry = pd->user_entry;
ENFN->ector_surface_cache_drop(ENC, user_entry->root);
+ if (pd->user_entry->root) efl_unref(pd->user_entry->root);
free(pd->user_entry);
}
pd->user_entry = NULL;
+
+ //Drop cache buffers
+ if (pd->vg_entry)
+ {
+ if (pd->ckeys[0])
+ ENFN->ector_surface_cache_drop(_evas_engine_context(obj->layer->evas), pd->ckeys[0]);
+ if (pd->ckeys[1])
+ ENFN->ector_surface_cache_drop(_evas_engine_context(obj->layer->evas), pd->ckeys[1]);
+ }
evas_cache_vg_entry_del(pd->vg_entry);
efl_invalidate(efl_super(eo_obj, MY_CLASS));
@@ -365,11 +384,14 @@ _efl_canvas_vg_object_efl_object_constructor(Eo *eo_obj, Efl_Canvas_Vg_Object_Da
obj->func = &object_func;
obj->private_data = efl_data_ref(eo_obj, MY_CLASS);
obj->type = o_type;
+ obj->is_vg_object = EINA_TRUE;
/* default root node */
pd->obj = obj;
pd->root = efl_add_ref(EFL_CANVAS_VG_CONTAINER_CLASS, NULL);
+ pd->sync_render = EINA_FALSE;
+
eina_array_step_set(&pd->cleanup, sizeof(pd->cleanup), 8);
return eo_obj;
@@ -381,7 +403,7 @@ _efl_canvas_vg_object_efl_object_finalize(Eo *obj, Efl_Canvas_Vg_Object_Data *pd
Evas *e = evas_object_evas_get(obj);
/* Container must have a set parent after construction.
- efl_add_ref() with a parent won't work this case
+ efl_add_ref() with a parent won't work this case
because container needs some jobs in overriding parent_set()
after proper intialization. */
efl_parent_set(pd->root, obj);
@@ -448,9 +470,9 @@ _evas_vg_render(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd,
//For recovery context
//FIXME: It may occur async issue?
int px, py, pw, ph, pstride;
- void *ppixels;
+ void *ppixels = NULL;
ector_buffer_size_get(ector, &pw, &ph);
- ector_buffer_pixels_get(ector, &ppixels, &px, &ph, &pstride);
+ ector_buffer_pixels_get(ector, &ppixels, &pw, &ph, &pstride);
Efl_Gfx_Colorspace pcspace = ector_buffer_cspace_get(ector);
ector_surface_reference_point_get(ector, &px, &py);
@@ -491,7 +513,7 @@ _evas_vg_render(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd,
//renders a vg_tree to an offscreen buffer and push it to the cache.
static void *
_render_to_buffer(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd,
- void *engine, Efl_VG *root, int w, int h, void *buffer, void *ckey,
+ void *engine, Efl_VG *root, int x, int y, int w, int h, void *buffer, void *ckey,
Eina_Bool do_async)
{
Ector_Surface *ector;
@@ -518,8 +540,14 @@ _render_to_buffer(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd
//ector begin - end for drawing composite images.
_evas_vg_render_pre(obj, root, engine, buffer, context, ector, NULL, 255, NULL, 0);
+ if (pd->sync_render) do_async = EINA_FALSE;
+
//Actual content drawing
- ENFN->ector_begin(engine, buffer, context, ector, 0, 0, do_async);
+ if (!ENFN->ector_begin(engine, buffer, context, ector, x, y, do_async))
+ {
+ ERR("Failed ector begin!");
+ return NULL;
+ }
//draw on buffer
_evas_vg_render(obj, pd,
@@ -534,7 +562,23 @@ _render_to_buffer(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd
evas_common_draw_context_free(context);
if (buffer_created && ckey)
- ENFN->ector_surface_cache_set(engine, ckey, buffer);
+ {
+ //Drop ex invalid cache buffers.
+ if (pd->frame_idx == 0 && ckey != pd->ckeys[0])
+ {
+ if (pd->ckeys[0])
+ ENFN->ector_surface_cache_drop(engine, pd->ckeys[0]);
+ pd->ckeys[0] = ckey;
+ }
+ else if (pd->frame_idx == (int) (evas_cache_vg_anim_frame_count_get(pd->vg_entry) - 1)
+ && ckey != pd->ckeys[1])
+ {
+ if (pd->ckeys[1])
+ ENFN->ector_surface_cache_drop(engine, pd->ckeys[1]);
+ pd->ckeys[1] = ckey;
+ }
+ ENFN->ector_surface_cache_set(engine, ckey, buffer);
+ }
return buffer;
}
@@ -546,6 +590,8 @@ _render_buffer_to_screen(Evas_Object_Protected_Data *obj,
int x, int y, int w, int h,
Eina_Bool do_async, Eina_Bool cacheable)
{
+ if (!buffer) return;
+
Eina_Bool async_unref;
//Draw the buffer as image to canvas
@@ -585,28 +631,30 @@ _cache_vg_entry_render(Evas_Object_Protected_Data *obj,
(vg_entry->h != h))
{
Eina_Size2D size = evas_cache_vg_entry_default_size_get(pd->vg_entry);
-
- //adjust size for aspect ratio.
- if (size.w > 0 && size.h > 0)
+ if (!vg_entry->vfd->is_wrap)
{
- float rw = (float) w / (float) size.w;
- float rh = (float) h / (float) size.h;
-
- if (rw < rh)
+ //adjust size for aspect ratio.
+ if (size.w > 0 && size.h > 0)
{
- size.w = w;
- size.h = (int) ((float) size.h * rw);
+ float rw = (float) w / (float) size.w;
+ float rh = (float) h / (float) size.h;
+
+ if (rw < rh)
+ {
+ size.w = w;
+ size.h = (int) ((float) size.h * rw);
+ }
+ else
+ {
+ size.w = (int) ((float) size.w * rh);
+ size.h = h;
+ }
}
else
{
- size.w = (int) ((float) size.w * rh);
- size.h = h;
- }
- }
- else
- {
- size.w = w;
- size.h = h;
+ size.w = w;
+ size.h = h;
+ }
}
//Size is changed, cached data is invalid.
@@ -635,10 +683,11 @@ _cache_vg_entry_render(Evas_Object_Protected_Data *obj,
}
//update for adjusted pos and size.
- offset.x = w - size.w;
+ offset.x = vg_entry->vfd->is_wrap?0:(w - size.w);
if (offset.x > 0) offset.x /= 2;
- offset.y = h - size.h;
+ offset.y = vg_entry->vfd->is_wrap?0:(h - size.h);
if (offset.y > 0) offset.y /= 2;
+
w = size.w;
h = size.h;
}
@@ -653,7 +702,7 @@ _cache_vg_entry_render(Evas_Object_Protected_Data *obj,
if (!buffer)
{
- buffer = _render_to_buffer(obj, pd, engine, root, w, h, NULL, key, do_async);
+ buffer = _render_to_buffer(obj, pd, engine, root, 0, 0, w, h, NULL, key, do_async);
}
else
{
@@ -675,26 +724,52 @@ _user_vg_entry_render(Evas_Object_Protected_Data *obj,
int x, int y, int w, int h, Eina_Bool do_async)
{
Vg_User_Entry *user_entry = pd->user_entry;
+ Eina_Rect render_rect = EINA_RECT(x, y, w, h);
+
+ // Get changed boundary and fit the size.
+ if (pd->changed)
+ efl_gfx_path_bounds_get(user_entry->root, &user_entry->path_bounds);
+
+ if (user_entry->path_bounds.w != 0 && user_entry->path_bounds.h != 0)
+ {
+ EINA_RECTANGLE_SET(&render_rect, user_entry->path_bounds.x,
+ user_entry->path_bounds.y,
+ user_entry->path_bounds.w,
+ user_entry->path_bounds.h);
+ }
+ // If size of the drawing area is 0, no render.
+ else return;
+
+ if (pd->viewbox.w != 0 && pd->viewbox.h !=0)
+ {
+ double sx = 0, sy= 0;
+ sx = (double)w / (double)pd->viewbox.w;
+ sy = (double)h / (double)pd->viewbox.h;
+ render_rect.x = (render_rect.x - pd->viewbox.x) * sx;
+ render_rect.y = (render_rect.y - pd->viewbox.y) * sy;
+ render_rect.w *= sx;
+ render_rect.h *= sy;
+ }
//if the size doesn't match, drop previous cache surface.
- if ((user_entry->w != w ) ||
- (user_entry->h != h))
+ if ((user_entry->w != render_rect.w ) ||
+ (user_entry->h != render_rect.h))
{
- ENFN->ector_surface_cache_drop(engine, user_entry->root);
- user_entry->w = w;
- user_entry->h = h;
+ ENFN->ector_surface_cache_drop(engine, user_entry->root);
+ user_entry->w = render_rect.w;
+ user_entry->h = render_rect.h;
}
//if the buffer is not created yet
void *buffer = NULL;
- buffer = ENFN->ector_surface_cache_get(engine, user_entry->root);
+ buffer = ENFN->ector_surface_cache_get(engine, user_entry->root);
if (!buffer)
{
// render to the buffer
buffer = _render_to_buffer(obj, pd, engine, user_entry->root,
- w, h, buffer, user_entry->root, do_async);
+ render_rect.x, render_rect.y, render_rect.w, render_rect.h, buffer, user_entry->root, do_async);
}
else
{
@@ -702,7 +777,7 @@ _user_vg_entry_render(Evas_Object_Protected_Data *obj,
if (pd->changed)
buffer = _render_to_buffer(obj, pd, engine,
user_entry->root,
- w, h, buffer, NULL,
+ render_rect.x, render_rect.y, render_rect.w, render_rect.h, buffer, NULL,
do_async);
//cache reference was increased when we get the cache.
ENFN->ector_surface_cache_drop(engine, user_entry->root);
@@ -711,7 +786,9 @@ _user_vg_entry_render(Evas_Object_Protected_Data *obj,
_render_buffer_to_screen(obj,
engine, output, context, surface,
buffer,
- x, y, w, h,
+ x + render_rect.x,
+ y + render_rect.y,
+ render_rect.w, render_rect.h,
do_async, EINA_TRUE);
}
@@ -769,7 +846,6 @@ _efl_canvas_vg_object_render_pre(Evas_Object *eo_obj,
{
Efl_Canvas_Vg_Object_Data *pd = type_private_data;
int is_v, was_v;
- Ector_Surface *s;
if (obj->pre_render_done) return;
obj->pre_render_done = EINA_TRUE;
@@ -789,12 +865,6 @@ _efl_canvas_vg_object_render_pre(Evas_Object *eo_obj,
obj->cur->clipper->private_data);
}
- // FIXME: handle damage only on changed renderer.
- // FIXME: Move this render_pre to efl_canvas_vg_render()
- s = evas_ector_get(obj->layer->evas);
- if (pd->root && s)
- _evas_vg_render_pre(obj, pd->root, NULL, NULL, NULL, s, NULL, 255, NULL, 0);
-
/* now figure what changed and add draw rects */
/* if it just became visible or invisible */
is_v = evas_object_is_visible(obj);
@@ -985,6 +1055,17 @@ Eina_Bool _efl_canvas_vg_object_efl_gfx_frame_controller_sector_get(const Eo *ob
return EINA_TRUE;
}
+EOLIAN static Eina_Iterator *
+_efl_canvas_vg_object_efl_gfx_frame_controller_sector_list_get(const Eo *obj EINA_UNUSED,
+ Efl_Canvas_Vg_Object_Data *pd)
+{
+ if (!pd->vg_entry) return EINA_FALSE;
+
+ Eina_Inarray* markers = evas_cache_vg_anim_sector_list_get(pd->vg_entry);
+ if (!markers) return NULL;
+ return eina_inarray_iterator_new(markers);
+}
+
EOLIAN static Eina_Bool
_efl_canvas_vg_object_efl_gfx_frame_controller_frame_set(Eo *eo_obj,
Efl_Canvas_Vg_Object_Data *pd,
@@ -1015,8 +1096,29 @@ _efl_canvas_vg_object_default_size_get(const Eo *eo_obj EINA_UNUSED,
return evas_cache_vg_entry_default_size_get(pd->vg_entry);
}
+EOLIAN static Eina_Position2D
+_efl_canvas_vg_object_default_position_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Vg_Object_Data *pd EINA_UNUSED)
+{
+ return evas_cache_vg_entry_default_position_get(pd->vg_entry);
+}
+
+EOLIAN static Eina_Size2D
+_efl_canvas_vg_object_default_min_size_get(const Eo *eo_obj EINA_UNUSED,
+ Efl_Canvas_Vg_Object_Data *pd EINA_UNUSED)
+{
+ return evas_cache_vg_entry_default_min_size_get(pd->vg_entry);
+}
+
+EOLIAN static void
+_efl_canvas_vg_object_wrap_mode_set(Eo *obj EINA_UNUSED,
+ Efl_Canvas_Vg_Object_Data *pd, Eina_Bool wrap_mode)
+{
+ evas_cache_vg_entry_wrap_mode_set(pd->vg_entry, wrap_mode);
+}
+
/* the actual api call to add a vector graphic object */
-EAPI Evas_Object *
+EVAS_API Eo *
evas_object_vg_add(Evas *e)
{
e = evas_find(e);
@@ -1025,31 +1127,31 @@ evas_object_vg_add(Evas *e)
return efl_add(MY_CLASS, e, efl_canvas_object_legacy_ctor(efl_added));
}
-EAPI int
+EVAS_API int
evas_object_vg_animated_frame_get(const Evas_Object *obj)
{
return efl_gfx_frame_controller_frame_get(obj);
}
-EAPI double
+EVAS_API double
evas_object_vg_animated_frame_duration_get(const Evas_Object *obj, int start_frame, int frame_num)
{
return efl_gfx_frame_controller_frame_duration_get(obj, start_frame, frame_num);
}
-EAPI int
+EVAS_API int
evas_object_vg_animated_frame_count_get(const Evas_Object *obj)
{
return efl_gfx_frame_controller_frame_count_get(obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_vg_animated_frame_set(Evas_Object *obj, int frame_index)
{
return efl_gfx_frame_controller_frame_set(obj, frame_index);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_vg_file_set(Evas_Object *obj, const char *file, const char *key)
{
return efl_file_simple_load(obj, file, key);
@@ -1087,17 +1189,24 @@ _efl_ui_canvas_object_vg_fill_mode_to_evas_object_vg_fill_mode(Efl_Canvas_Vg_Fil
return EVAS_OBJECT_VG_FILL_MODE_NONE;
}
-EAPI void
-evas_object_vg_fill_mode_set(Efl_VG *obj, Evas_Object_Vg_Fill_Mode fill_mode)
+EVAS_API void
+evas_object_vg_fill_mode_set(Evas_Object *obj, Evas_Object_Vg_Fill_Mode fill_mode)
{
efl_canvas_vg_object_fill_mode_set(obj, _evas_object_vg_fill_mode_to_efl_ui_canvas_object_vg_fill_mode(fill_mode));
}
-EAPI Evas_Object_Vg_Fill_Mode
-evas_object_vg_fill_mode_get(const Efl_VG *obj)
+EVAS_API Evas_Object_Vg_Fill_Mode
+evas_object_vg_fill_mode_get(const Evas_Object *obj)
{
return _efl_ui_canvas_object_vg_fill_mode_to_evas_object_vg_fill_mode(efl_canvas_vg_object_fill_mode_get(obj));
}
+Eina_Bool
+evas_object_vg_changed_get(Evas_Object_Protected_Data *obj)
+{
+ Efl_Canvas_Vg_Object_Data *pd = obj->private_data;
+ return pd->changed;
+}
+
#include "efl_canvas_vg_object.eo.c"
#include "efl_canvas_vg_object_eo.legacy.c"
diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.eo b/src/lib/evas/canvas/efl_canvas_vg_object.eo
index 51eded82d5..ee63bc19a7 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_object.eo
+++ b/src/lib/evas/canvas/efl_canvas_vg_object.eo
@@ -74,6 +74,27 @@ class @beta Efl.Canvas.Vg.Object extends Efl.Canvas.Object implements Efl.File,
size: Eina.Size2D;
}
}
+ @property default_position {
+ get {
+ }
+ values {
+ size: Eina.Position2D;
+ }
+ }
+ @property default_min_size {
+ get {
+ }
+ values {
+ size: Eina.Size2D;
+ }
+ }
+ @property wrap_mode {
+ set {
+ }
+ values {
+ wrap_mode: bool;
+ }
+ }
}
implements {
Efl.Object.constructor;
@@ -90,5 +111,6 @@ class @beta Efl.Canvas.Vg.Object extends Efl.Canvas.Object implements Efl.File,
Efl.Gfx.Frame_Controller.loop_count { get; }
Efl.Gfx.Frame_Controller.frame_duration { get; }
Efl.Gfx.Frame_Controller.sector { set; get; }
+ Efl.Gfx.Frame_Controller.sector_list { get; }
}
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.c
index 936ae0b512..58770b39aa 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.c
@@ -1,36 +1,36 @@
-EAPI void
-evas_object_vg_viewbox_set(Efl_VG *obj, Eina_Rect viewbox)
+EVAS_API void
+evas_object_vg_viewbox_set(Evas_Object *obj, Eina_Rect viewbox)
{
efl_canvas_vg_object_viewbox_set(obj, viewbox);
}
-EAPI Eina_Rect
-evas_object_vg_viewbox_get(const Efl_VG *obj)
+EVAS_API Eina_Rect
+evas_object_vg_viewbox_get(const Evas_Object *obj)
{
return efl_canvas_vg_object_viewbox_get(obj);
}
-EAPI void
-evas_object_vg_viewbox_align_set(Efl_VG *obj, double align_x, double align_y)
+EVAS_API void
+evas_object_vg_viewbox_align_set(Evas_Object *obj, double align_x, double align_y)
{
efl_canvas_vg_object_viewbox_align_set(obj, align_x, align_y);
}
-EAPI void
-evas_object_vg_viewbox_align_get(const Efl_VG *obj, double *align_x, double *align_y)
+EVAS_API void
+evas_object_vg_viewbox_align_get(const Evas_Object *obj, double *align_x, double *align_y)
{
efl_canvas_vg_object_viewbox_align_get(obj, align_x, align_y);
}
-EAPI void
-evas_object_vg_root_node_set(Efl_VG *obj, Efl_Canvas_Vg_Node *root)
+EVAS_API void
+evas_object_vg_root_node_set(Evas_Object *obj, Efl_Canvas_Vg_Node *root)
{
efl_canvas_vg_object_root_node_set(obj, root);
}
-EAPI Efl_Canvas_Vg_Node *
-evas_object_vg_root_node_get(const Efl_VG *obj)
+EVAS_API Efl_Canvas_Vg_Node *
+evas_object_vg_root_node_get(const Evas_Object *obj)
{
return efl_canvas_vg_object_root_node_get(obj);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.h
index 319305f8c6..fdbe083bd3 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.h
@@ -4,9 +4,11 @@
#ifndef _EVAS_OBJECT_VG_EO_LEGACY_TYPES
#define _EVAS_OBJECT_VG_EO_LEGACY_TYPES
-/** Enumeration that defines how viewbox will be filled int the vg canvs's
+/**
+ * @brief Enumeration that defines how viewbox will be filled int the vg canvs's
* viewport. default Fill_Mode is @c none
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
typedef enum
@@ -38,9 +40,10 @@ typedef enum
* @param[in] obj The object.
* @param[in] fill_mode Fill mode type
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
-EAPI void evas_object_vg_fill_mode_set(Efl_VG *obj, Evas_Object_Vg_Fill_Mode fill_mode);
+EVAS_API void evas_object_vg_fill_mode_set(Evas_Object *obj, Evas_Object_Vg_Fill_Mode fill_mode);
/**
* @brief Control how the viewbox is mapped to the vg canvas's viewport.
@@ -49,9 +52,10 @@ EAPI void evas_object_vg_fill_mode_set(Efl_VG *obj, Evas_Object_Vg_Fill_Mode fil
*
* @return Fill mode type
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
-EAPI Evas_Object_Vg_Fill_Mode evas_object_vg_fill_mode_get(const Efl_VG *obj);
+EVAS_API Evas_Object_Vg_Fill_Mode evas_object_vg_fill_mode_get(const Evas_Object *obj);
/**
* @brief Sets the viewbox for the evas vg canvas. viewbox if set should be
@@ -60,9 +64,10 @@ EAPI Evas_Object_Vg_Fill_Mode evas_object_vg_fill_mode_get(const Efl_VG *obj);
* @param[in] obj The object.
* @param[in] viewbox viewbox for the vg canvas
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
-EAPI void evas_object_vg_viewbox_set(Efl_VG *obj, Eina_Rect viewbox);
+EVAS_API void evas_object_vg_viewbox_set(Evas_Object *obj, Eina_Rect viewbox);
/**
* @brief Get the current viewbox from the evas_object_vg
@@ -71,9 +76,10 @@ EAPI void evas_object_vg_viewbox_set(Efl_VG *obj, Eina_Rect viewbox);
*
* @return viewbox for the vg canvas
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
-EAPI Eina_Rect evas_object_vg_viewbox_get(const Efl_VG *obj);
+EVAS_API Eina_Rect evas_object_vg_viewbox_get(const Evas_Object *obj);
/**
* @brief Control how the viewbox is positioned inside the viewport.
@@ -82,9 +88,10 @@ EAPI Eina_Rect evas_object_vg_viewbox_get(const Efl_VG *obj);
* @param[in] align_x Alignment in the horizontal axis (0 <= align_x <= 1).
* @param[in] align_y Alignment in the vertical axis (0 <= align_y <= 1).
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
-EAPI void evas_object_vg_viewbox_align_set(Efl_VG *obj, double align_x, double align_y);
+EVAS_API void evas_object_vg_viewbox_align_set(Evas_Object *obj, double align_x, double align_y);
/**
* @brief Control how the viewbox is positioned inside the viewport.
@@ -93,9 +100,10 @@ EAPI void evas_object_vg_viewbox_align_set(Efl_VG *obj, double align_x, double a
* @param[out] align_x Alignment in the horizontal axis (0 <= align_x <= 1).
* @param[out] align_y Alignment in the vertical axis (0 <= align_y <= 1).
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
-EAPI void evas_object_vg_viewbox_align_get(const Efl_VG *obj, double *align_x, double *align_y);
+EVAS_API void evas_object_vg_viewbox_align_get(const Evas_Object *obj, double *align_x, double *align_y);
/**
* @brief Set the root node of the evas_object_vg.
@@ -106,11 +114,12 @@ EAPI void evas_object_vg_viewbox_align_get(const Efl_VG *obj, double *align_x, d
* It takes the ownership of the root node.
*
* @param[in] obj The object.
- * @param[in] root Root node(Efl_Canvas_Vg_Container) of the VG canvas.
+ * @param[in] root Root node(Evas_Vg_Container) of the VG canvas.
*
+ * @since 1.24
* @ingroup Evas_Object_Vg_Group
*/
-EAPI void evas_object_vg_root_node_set(Efl_VG *obj, Efl_Canvas_Vg_Node *root);
+EVAS_API void evas_object_vg_root_node_set(Evas_Object *obj, Evas_Vg_Node *root);
/**
* @brief Get the root node of the evas_object_vg.
@@ -123,6 +132,6 @@ EAPI void evas_object_vg_root_node_set(Efl_VG *obj, Efl_Canvas_Vg_Node *root);
*
* @ingroup Evas_Object_Vg_Group
*/
-EAPI Efl_Canvas_Vg_Node *evas_object_vg_root_node_get(const Efl_VG *obj);
+EVAS_API Evas_Vg_Node *evas_object_vg_root_node_get(const Evas_Object *obj);
#endif
diff --git a/src/lib/evas/canvas/efl_canvas_vg_shape.c b/src/lib/evas/canvas/efl_canvas_vg_shape.c
index 5ddff89350..a698e9aeae 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_shape.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_shape.c
@@ -235,246 +235,251 @@ _efl_canvas_vg_shape_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Shape_
return node;
}
-EAPI double
-evas_vg_shape_stroke_scale_get(Eo *obj)
+EVAS_API double
+evas_vg_shape_stroke_scale_get(Evas_Vg_Shape *obj)
{
return efl_gfx_shape_stroke_scale_get(obj);
}
-EAPI void
-evas_vg_shape_stroke_scale_set(Eo *obj, double s)
+EVAS_API void
+evas_vg_shape_stroke_scale_set(Evas_Vg_Shape *obj, double s)
{
efl_gfx_shape_stroke_scale_set(obj, s);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_stroke_color_get(Eo *obj, int *r, int *g, int *b, int *a)
+EVAS_API void
+evas_vg_shape_stroke_color_get(Evas_Vg_Shape *obj, int *r, int *g, int *b, int *a)
{
efl_gfx_shape_stroke_color_get(obj, r, g, b, a);
}
-EAPI void
-evas_vg_shape_stroke_color_set(Eo *obj, int r, int g, int b, int a)
+EVAS_API void
+evas_vg_shape_stroke_color_set(Evas_Vg_Shape *obj, int r, int g, int b, int a)
{
efl_gfx_shape_stroke_color_set(obj, r, g, b, a);
efl_canvas_vg_node_change(obj);
}
-EAPI double
-evas_vg_shape_stroke_width_get(Eo *obj)
+EVAS_API double
+evas_vg_shape_stroke_width_get(Evas_Vg_Shape *obj)
{
return efl_gfx_shape_stroke_width_get(obj);
}
-EAPI void
-evas_vg_shape_stroke_width_set(Eo *obj, double w)
+EVAS_API void
+evas_vg_shape_stroke_width_set(Evas_Vg_Shape *obj, double w)
{
efl_gfx_shape_stroke_width_set(obj, w);
efl_canvas_vg_node_change(obj);
}
-EAPI double
-evas_vg_shape_stroke_location_get(Eo *obj)
+EVAS_API double
+evas_vg_shape_stroke_location_get(Evas_Vg_Shape *obj)
{
return efl_gfx_shape_stroke_location_get(obj);
}
-EAPI void
-evas_vg_shape_stroke_location_set(Eo *obj, double centered)
+EVAS_API void
+evas_vg_shape_stroke_location_set(Evas_Vg_Shape *obj, double centered)
{
efl_gfx_shape_stroke_location_set(obj, centered);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_stroke_dash_get(Eo *obj, const Efl_Gfx_Dash **dash, unsigned int *length)
+EVAS_API void
+evas_vg_shape_stroke_dash_get(Evas_Vg_Shape *obj, const Evas_Vg_Dash **dash, unsigned int *length)
{
- efl_gfx_shape_stroke_dash_get(obj, dash, length);
+ efl_gfx_shape_stroke_dash_get(obj, (const Efl_Gfx_Dash **)dash, length);
}
-EAPI void
-evas_vg_shape_stroke_dash_set(Eo *obj, const Efl_Gfx_Dash *dash, unsigned int length)
+EVAS_API void
+evas_vg_shape_stroke_dash_set(Evas_Vg_Shape *obj, const Evas_Vg_Dash *dash, unsigned int length)
{
- efl_gfx_shape_stroke_dash_set(obj, dash, length);
+ efl_gfx_shape_stroke_dash_set(obj, (const Efl_Gfx_Dash *)dash, length);
efl_canvas_vg_node_change(obj);
}
-EAPI Efl_Gfx_Cap
-evas_vg_shape_stroke_cap_get(Eo *obj)
+EVAS_API Evas_Vg_Cap
+evas_vg_shape_stroke_cap_get(Evas_Vg_Shape *obj)
{
- return efl_gfx_shape_stroke_cap_get(obj);
+ return (Evas_Vg_Cap)efl_gfx_shape_stroke_cap_get(obj);
}
-EAPI void
-evas_vg_shape_stroke_cap_set(Eo *obj, Efl_Gfx_Cap c)
+EVAS_API void
+evas_vg_shape_stroke_cap_set(Evas_Vg_Shape *obj, Evas_Vg_Cap c)
{
- efl_gfx_shape_stroke_cap_set(obj, c);
+ efl_gfx_shape_stroke_cap_set(obj, (Efl_Gfx_Cap)c);
efl_canvas_vg_node_change(obj);
}
-EAPI Efl_Gfx_Join
-evas_vg_shape_stroke_join_get(Eo *obj)
+EVAS_API Evas_Vg_Join
+evas_vg_shape_stroke_join_get(Evas_Vg_Shape *obj)
{
- return efl_gfx_shape_stroke_join_get(obj);
+ return (Evas_Vg_Join)efl_gfx_shape_stroke_join_get(obj);
}
-EAPI void
-evas_vg_shape_stroke_join_set(Eo *obj, Efl_Gfx_Join j)
+EVAS_API void
+evas_vg_shape_stroke_join_set(Evas_Vg_Shape *obj, Evas_Vg_Join j)
{
- efl_gfx_shape_stroke_join_set(obj, j);
+ efl_gfx_shape_stroke_join_set(obj, (Efl_Gfx_Join)j);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_path_set(Eo *obj, const Efl_Gfx_Path_Command *op, const double *points)
+EVAS_API void
+evas_vg_shape_path_set(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command *op, const double *points)
{
- efl_gfx_path_set(obj, op, points);
+ efl_gfx_path_set(obj, (const Efl_Gfx_Path_Command *)op, points);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_path_get(Eo *obj, const Efl_Gfx_Path_Command **op, const double **points)
+EVAS_API void
+evas_vg_shape_path_get(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command **op, const double **points)
{
- efl_gfx_path_get(obj, op, points);
+ efl_gfx_path_get(obj, (const Efl_Gfx_Path_Command **)op, points);
}
-EAPI void
-evas_vg_shape_path_length_get(Eo *obj, unsigned int *commands, unsigned int *points)
+EVAS_API void
+evas_vg_shape_path_length_get(Evas_Vg_Shape *obj, unsigned int *commands, unsigned int *points)
{
efl_gfx_path_length_get(obj, commands, points);
}
-EAPI void
-evas_vg_shape_current_get(Eo *obj, double *x, double *y)
+EVAS_API void
+evas_vg_shape_current_get(Evas_Vg_Shape *obj, double *x, double *y)
{
efl_gfx_path_current_get(obj, x, y);
}
-EAPI void
-evas_vg_shape_current_ctrl_get(Eo *obj, double *x, double *y)
+EVAS_API void
+evas_vg_shape_current_ctrl_get(Evas_Vg_Shape *obj, double *x, double *y)
{
efl_gfx_path_current_ctrl_get(obj, x, y);
}
-EAPI void
-evas_vg_shape_dup(Eo *obj, Eo *dup_from)
+EVAS_API void
+evas_vg_shape_dup(Evas_Vg_Shape *obj, Evas_Vg_Shape *dup_from)
{
efl_gfx_path_copy_from(obj, dup_from);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_reset(Eo *obj)
+EVAS_API void
+evas_vg_shape_reset(Evas_Vg_Shape *obj)
{
efl_gfx_path_reset(obj);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_move_to(Eo *obj, double x, double y)
+EVAS_API void
+evas_vg_shape_append_move_to(Evas_Vg_Shape *obj, double x, double y)
{
efl_gfx_path_append_move_to(obj, x, y);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_line_to(Eo *obj, double x, double y)
+EVAS_API void
+evas_vg_shape_append_line_to(Evas_Vg_Shape *obj, double x, double y)
{
efl_gfx_path_append_line_to(obj, x, y);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_quadratic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y)
+EVAS_API void
+evas_vg_shape_append_quadratic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y)
{
efl_gfx_path_append_quadratic_to(obj, x, y, ctrl_x, ctrl_y);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_squadratic_to(Eo *obj, double x, double y)
+EVAS_API void
+evas_vg_shape_append_squadratic_to(Evas_Vg_Shape *obj, double x, double y)
{
efl_gfx_path_append_squadratic_to(obj, x, y);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_cubic_to(Eo *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1)
+EVAS_API void
+evas_vg_shape_append_cubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1)
{
- efl_gfx_path_append_cubic_to(obj, x, y, ctrl_x0, ctrl_y0, ctrl_x1, ctrl_y1);
+ efl_gfx_path_append_cubic_to(obj, ctrl_x0, ctrl_y0, ctrl_x1, ctrl_y1, x, y);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_scubic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y)
+EVAS_API void
+evas_vg_shape_append_scubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y)
{
efl_gfx_path_append_scubic_to(obj, x, y, ctrl_x, ctrl_y);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_arc_to(Eo *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep)
+EVAS_API void
+evas_vg_shape_append_arc_to(Evas_Vg_Shape *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep)
{
efl_gfx_path_append_arc_to(obj, x, y, rx, ry, angle, large_arc, sweep);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_arc(Eo *obj, double x, double y, double w, double h, double start_angle, double sweep_length)
+EVAS_API void
+evas_vg_shape_append_arc(Evas_Vg_Shape *obj, double x, double y, double w, double h, double start_angle, double sweep_length)
{
efl_gfx_path_append_arc(obj, x, y, w, h, start_angle, sweep_length);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_close(Eo *obj)
+EVAS_API void
+evas_vg_shape_append_close(Evas_Vg_Shape *obj)
{
efl_gfx_path_append_close(obj);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_circle(Eo *obj, double x, double y, double radius)
+EVAS_API void
+evas_vg_shape_append_circle(Evas_Vg_Shape *obj, double x, double y, double radius)
{
efl_gfx_path_append_circle(obj, x, y, radius);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_rect(Eo *obj, double x, double y, double w, double h, double rx, double ry)
+EVAS_API void
+evas_vg_shape_append_rect(Evas_Vg_Shape *obj, double x, double y, double w, double h, double rx, double ry)
{
efl_gfx_path_append_rect(obj, x, y, w, h, rx, ry);
efl_canvas_vg_node_change(obj);
}
-EAPI void
-evas_vg_shape_append_svg_path(Eo *obj, const char *svg_path_data)
+EVAS_API void
+evas_vg_shape_append_svg_path(Evas_Vg_Shape *obj, const char *svg_path_data)
{
efl_gfx_path_append_svg_path(obj, svg_path_data);
efl_canvas_vg_node_change(obj);
}
-EAPI Eina_Bool
-evas_vg_shape_interpolate(Eo *obj, const Eo *from, const Eo *to, double pos_map)
+EVAS_API Eina_Bool
+evas_vg_shape_interpolate(Evas_Vg_Shape *obj, const Evas_Vg_Shape *from, const Evas_Vg_Shape *to, double pos_map)
{
Eina_Bool ret = efl_gfx_path_interpolate(obj, from, to, pos_map);
efl_canvas_vg_node_change(obj);
return ret;
}
-EAPI Eina_Bool
-evas_vg_shape_equal_commands(Eo *obj, const Eo *with)
+EVAS_API Eina_Bool
+evas_vg_shape_equal_commands(Evas_Vg_Shape *obj, const Evas_Vg_Shape *with)
{
return efl_gfx_path_equal_commands(obj, with);
}
-EAPI Efl_Canvas_Vg_Shape*
+EVAS_API Efl_Canvas_Vg_Shape*
evas_vg_shape_add(Efl_Canvas_Vg_Node *parent)
{
/* Warn it because the usage has been changed.
We can remove this message after v1.21. */
- if (!parent) CRI("Efl_Canvas_Vg_Shape only allow Efl_Canvas_Vg_Node as the parent");
+ if (!parent)
+ {
+ ERR("Efl_Canvas_Vg_Shape only allow Efl_Canvas_Vg_Node as the parent");
+ return NULL;
+ }
+
return efl_add(MY_CLASS, parent);
}
diff --git a/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.c b/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.c
index 5630fe5f63..3dd3088a4c 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.c
@@ -1,35 +1,35 @@
-EAPI void
+EVAS_API void
evas_vg_shape_fill_set(Efl_Canvas_Vg_Shape *obj, Efl_Canvas_Vg_Node *f)
{
efl_canvas_vg_shape_fill_set(obj, f);
}
-EAPI Efl_Canvas_Vg_Node *
+EVAS_API Efl_Canvas_Vg_Node *
evas_vg_shape_fill_get(const Efl_Canvas_Vg_Shape *obj)
{
return efl_canvas_vg_shape_fill_get(obj);
}
-EAPI void
+EVAS_API void
evas_vg_shape_stroke_fill_set(Efl_Canvas_Vg_Shape *obj, Efl_Canvas_Vg_Node *f)
{
efl_canvas_vg_shape_stroke_fill_set(obj, f);
}
-EAPI Efl_Canvas_Vg_Node *
+EVAS_API Efl_Canvas_Vg_Node *
evas_vg_shape_stroke_fill_get(const Efl_Canvas_Vg_Shape *obj)
{
return efl_canvas_vg_shape_stroke_fill_get(obj);
}
-EAPI void
+EVAS_API void
evas_vg_shape_stroke_marker_set(Efl_Canvas_Vg_Shape *obj, Efl_Canvas_Vg_Node *m)
{
efl_canvas_vg_shape_stroke_marker_set(obj, m);
}
-EAPI Efl_Canvas_Vg_Node *
+EVAS_API Efl_Canvas_Vg_Node *
evas_vg_shape_stroke_marker_get(const Efl_Canvas_Vg_Shape *obj)
{
return efl_canvas_vg_shape_stroke_marker_get(obj);
diff --git a/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.h b/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.h
index 444acd2334..51612b7a12 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.h
+++ b/src/lib/evas/canvas/efl_canvas_vg_shape_eo.legacy.h
@@ -1,60 +1,70 @@
-#ifndef _EFL_CANVAS_VG_SHAPE_EO_LEGACY_H_
-#define _EFL_CANVAS_VG_SHAPE_EO_LEGACY_H_
+#ifndef _EVAS_VG_SHAPE_EO_LEGACY_H_
+#define _EVAS_VG_SHAPE_EO_LEGACY_H_
-#ifndef _EFL_CANVAS_VG_SHAPE_EO_CLASS_TYPE
-#define _EFL_CANVAS_VG_SHAPE_EO_CLASS_TYPE
+#ifndef _EVAS_VG_SHAPE_EO_CLASS_TYPE
+#define _EVAS_VG_SHAPE_EO_CLASS_TYPE
-typedef Eo Efl_Canvas_Vg_Shape;
+typedef Eo Evas_Vg_Shape;
#endif
-#ifndef _EFL_CANVAS_VG_SHAPE_EO_TYPES
-#define _EFL_CANVAS_VG_SHAPE_EO_TYPES
-
+#ifndef _EVAS_VG_SHAPE_EO_TYPES
+#define _EVAS_VG_SHAPE_EO_TYPES
#endif
/**
- * @brief Fill of the shape object
+ * @defgroup Evas_Vg_Shape_Group Vector Graphics Shape Functions
+ * @ingroup Evas_Object_Vg_Group
+ */
+
+/**
+ * @brief Fill of the shape object.
*
* @param[in] obj The object.
- * @param[in] f Fill object
+ * @param[in] f The fill object.
+ *
+ * @since 1.24
*
* @ingroup Evas_Vg_Shape_Group
*/
-EAPI void evas_vg_shape_fill_set(Efl_Canvas_Vg_Shape *obj, Efl_Canvas_Vg_Node *f);
+EVAS_API void evas_vg_shape_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f);
/**
- * @brief Fill of the shape object
+ * @brief Fill of the shape object.
*
* @param[in] obj The object.
+ * @return The fill object.
*
- * @return Fill object
+ * @since 1.24
*
* @ingroup Evas_Vg_Shape_Group
*/
-EAPI Efl_Canvas_Vg_Node *evas_vg_shape_fill_get(const Efl_Canvas_Vg_Shape *obj);
+EVAS_API Evas_Vg_Node *evas_vg_shape_fill_get(const Evas_Vg_Shape *obj);
/**
- * @brief Stroke fill of the shape object
+ * @brief Stroke fill of the shape object.
*
* @param[in] obj The object.
- * @param[in] f Stroke fill object
+ * @param[in] f The stroke fill object.
+ *
+ * @since 1.24
*
* @ingroup Evas_Vg_Shape_Group
*/
-EAPI void evas_vg_shape_stroke_fill_set(Efl_Canvas_Vg_Shape *obj, Efl_Canvas_Vg_Node *f);
+EVAS_API void evas_vg_shape_stroke_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f);
/**
- * @brief Stroke fill of the shape object
+ * @brief Stroke fill of the shape object.
*
* @param[in] obj The object.
+ * @return The stroke fill object.
*
- * @return Stroke fill object
+ * @since 1.24
*
* @ingroup Evas_Vg_Shape_Group
*/
-EAPI Efl_Canvas_Vg_Node *evas_vg_shape_stroke_fill_get(const Efl_Canvas_Vg_Shape *obj);
+EVAS_API Evas_Vg_Node *evas_vg_shape_stroke_fill_get(const Evas_Vg_Shape *obj);
/**
* @brief Stroke marker of the shape object
@@ -62,19 +72,22 @@ EAPI Efl_Canvas_Vg_Node *evas_vg_shape_stroke_fill_get(const Efl_Canvas_Vg_Shape
* @param[in] obj The object.
* @param[in] m Stroke marker object
*
+ * @since 1.24
+ *
* @ingroup Evas_Vg_Shape_Group
*/
-EAPI void evas_vg_shape_stroke_marker_set(Efl_Canvas_Vg_Shape *obj, Efl_Canvas_Vg_Node *m);
+EVAS_API void evas_vg_shape_stroke_marker_set(Evas_Vg_Shape *obj, Evas_Vg_Node *m);
/**
* @brief Stroke marker of the shape object
*
* @param[in] obj The object.
- *
* @return Stroke marker object
*
+ * @since 1.24
+ *
* @ingroup Evas_Vg_Shape_Group
*/
-EAPI Efl_Canvas_Vg_Node *evas_vg_shape_stroke_marker_get(const Efl_Canvas_Vg_Shape *obj);
+EVAS_API Evas_Vg_Node *evas_vg_shape_stroke_marker_get(const Evas_Vg_Shape *obj);
#endif
diff --git a/src/lib/evas/canvas/efl_gfx_mapping.c b/src/lib/evas/canvas/efl_gfx_mapping.c
index b05239b369..49b450ede4 100644
--- a/src/lib/evas/canvas/efl_gfx_mapping.c
+++ b/src/lib/evas/canvas/efl_gfx_mapping.c
@@ -305,6 +305,7 @@ _map_calc(const Eo *eo_obj, Evas_Object_Protected_Data *obj, Efl_Gfx_Mapping_Dat
if (!m)
{
m = evas_map_new(count);
+ if (!m) return NULL;
map_alloc = EINA_TRUE;
}
else _evas_map_reset(m);
diff --git a/src/lib/evas/canvas/efl_gfx_vg_value_provider.c b/src/lib/evas/canvas/efl_gfx_vg_value_provider.c
index ccf334924f..b22232a6f4 100644
--- a/src/lib/evas/canvas/efl_gfx_vg_value_provider.c
+++ b/src/lib/evas/canvas/efl_gfx_vg_value_provider.c
@@ -8,7 +8,7 @@ _efl_gfx_vg_value_provider_efl_object_constructor(Eo *obj,
{
obj = efl_constructor(efl_super(obj, MY_CLASS));
- pd->flag = EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_NONE;
+ pd->flag = EFL_GFX_VG_VALUE_PROVIDER_FLAGS_NONE;
return obj;
}
@@ -35,17 +35,17 @@ _efl_gfx_vg_value_provider_keypath_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Val
}
EOLIAN void
-_efl_gfx_vg_value_provider_transform_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd, Eina_Matrix3 *m)
+_efl_gfx_vg_value_provider_transform_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd, Eina_Matrix4 *m)
{
if (m)
{
if (!pd->m)
{
- pd->m = malloc(sizeof (Eina_Matrix3));
+ pd->m = malloc(sizeof (Eina_Matrix4));
if (!pd->m) return;
}
- pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_TRANSFORM_MATRIX;
- memcpy(pd->m, m, sizeof (Eina_Matrix3));
+ pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_FLAGS_TRANSFORM_MATRIX;
+ memcpy(pd->m, m, sizeof (Eina_Matrix4));
}
else
{
@@ -54,16 +54,16 @@ _efl_gfx_vg_value_provider_transform_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_P
}
}
-EOLIAN Eina_Matrix3*
+EOLIAN Eina_Matrix4*
_efl_gfx_vg_value_provider_transform_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd)
{
return pd->m;
}
-EOAPI void
+EVAS_API EVAS_API_WEAK void
_efl_gfx_vg_value_provider_fill_color_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd, int r, int g, int b, int a)
{
- pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_FILL_COLOR;
+ pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_FLAGS_FILL_COLOR;
pd->fill.r = r;
pd->fill.g = g;
@@ -71,7 +71,7 @@ _efl_gfx_vg_value_provider_fill_color_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_
pd->fill.a = a;
}
-EOAPI void
+EVAS_API EVAS_API_WEAK void
_efl_gfx_vg_value_provider_fill_color_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd, int *r, int *g, int *b, int *a)
{
if (r) *r = pd->fill.r;
@@ -80,10 +80,10 @@ _efl_gfx_vg_value_provider_fill_color_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Vg_
if (a) *a = pd->fill.a;
}
-EOAPI void
+EVAS_API EVAS_API_WEAK void
_efl_gfx_vg_value_provider_stroke_color_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd, int r, int g, int b, int a)
{
- pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_STROKE_COLOR;
+ pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_FLAGS_STROKE_COLOR;
pd->stroke.r = r;
pd->stroke.g = g;
@@ -91,7 +91,7 @@ _efl_gfx_vg_value_provider_stroke_color_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Valu
pd->stroke.a = a;
}
-EOAPI void
+EVAS_API EVAS_API_WEAK void
_efl_gfx_vg_value_provider_stroke_color_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd, int *r, int *g, int *b, int *a)
{
if (r) *r = pd->stroke.r;
@@ -100,28 +100,24 @@ _efl_gfx_vg_value_provider_stroke_color_get(const Eo *obj EINA_UNUSED, Efl_Gfx_V
if (a) *a = pd->stroke.a;
}
-EOAPI void
+EVAS_API EVAS_API_WEAK void
_efl_gfx_vg_value_provider_stroke_width_set(Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd, double w)
{
if (w < 0) return ;
- pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_STROKE_WIDTH;
+ pd->flag = pd->flag | EFL_GFX_VG_VALUE_PROVIDER_FLAGS_STROKE_WIDTH;
pd->stroke.width = w;
}
-EOAPI double
+EVAS_API EVAS_API_WEAK double
_efl_gfx_vg_value_provider_stroke_width_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd)
{
return pd->stroke.width;
}
-/* This function only use in internal */
-Efl_Gfx_Vg_Value_Provider_Change_Flag
-efl_gfx_vg_value_provider_changed_flag_get(Eo *obj)
+EVAS_API EVAS_API_WEAK Efl_Gfx_Vg_Value_Provider_Flags
+_efl_gfx_vg_value_provider_updated_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Vg_Value_Provider_Data *pd)
{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_isa(obj, MY_CLASS), EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_NONE);
- Efl_Gfx_Vg_Value_Provider_Data *pd = efl_data_scope_get(obj, MY_CLASS);
- if (!pd) return EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_NONE;
return pd->flag;
}
diff --git a/src/lib/evas/canvas/efl_gfx_vg_value_provider.eo b/src/lib/evas/canvas/efl_gfx_vg_value_provider.eo
index 2e21774a2f..2fe2516aad 100644
--- a/src/lib/evas/canvas/efl_gfx_vg_value_provider.eo
+++ b/src/lib/evas/canvas/efl_gfx_vg_value_provider.eo
@@ -1,3 +1,16 @@
+import eina_types;
+
+enum @beta Efl.Gfx.Vg_Value_Provider_Flags {
+ [[ Property information applied to value provider.
+ @since 1.24
+ ]]
+ none = 0, [[ Nothing changed.]]
+ fill_color = 1, [[ Fill color changed. ]]
+ stroke_color = 2, [[ Stroke color changed. ]]
+ stroke_width = 4, [[ Stroke width changed. ]]
+ transform_matrix = 8, [[ Transform matrix changed. ]]
+}
+
class @beta Efl.Gfx.Vg.Value_Provider extends Efl.Object
{
[[Efl Vector Value Provider class.
@@ -25,7 +38,7 @@ class @beta Efl.Gfx.Vg.Value_Provider extends Efl.Object
get {
}
values {
- m: ptr(Eina.Matrix3); [[ Matrix Value. ]]
+ m: ptr(Eina.Matrix4); [[ Matrix Value. ]]
}
}
@property fill_color {
@@ -64,6 +77,14 @@ class @beta Efl.Gfx.Vg.Value_Provider extends Efl.Object
width: double; [[ Width value of stroke. ]]
}
}
+ @property updated {
+ [[ Flag of properties updated in value provider object. ]]
+ get {
+ }
+ values {
+ flag: Efl.Gfx.Vg_Value_Provider_Flags; [[ Flag of the changed property. ]]
+ }
+ }
}
implements {
Efl.Object.constructor;
diff --git a/src/lib/evas/canvas/efl_gfx_vg_value_provider.h b/src/lib/evas/canvas/efl_gfx_vg_value_provider.h
index 5b4b806000..afcf72eba9 100644
--- a/src/lib/evas/canvas/efl_gfx_vg_value_provider.h
+++ b/src/lib/evas/canvas/efl_gfx_vg_value_provider.h
@@ -8,11 +8,11 @@
struct _Efl_Gfx_Vg_Value_Provider_Data
{
Eo* obj;
- Efl_Gfx_Vg_Value_Provider_Change_Flag flag;
+ Efl_Gfx_Vg_Value_Provider_Flags flag;
Eina_Stringshare *keypath;
- Eina_Matrix3 *m;
+ Eina_Matrix4 *m;
struct {
int r;
int g;
diff --git a/src/lib/evas/canvas/efl_input_device.c b/src/lib/evas/canvas/efl_input_device.c
index 52eae92cbb..3b6f3599c9 100644
--- a/src/lib/evas/canvas/efl_input_device.c
+++ b/src/lib/evas/canvas/efl_input_device.c
@@ -255,7 +255,7 @@ _efl_input_device_children_get(const Eo *obj EINA_UNUSED, Efl_Input_Device_Data
return pd->children;
}
-EOAPI EFL_FUNC_BODY_CONST(efl_input_device_children_get, const Eina_List *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(efl_input_device_children_get, const Eina_List *, NULL);
static Evas *
_efl_input_device_evas_get(const Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd)
@@ -263,7 +263,7 @@ _efl_input_device_evas_get(const Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd)
return pd->evas;
}
-EOAPI EFL_FUNC_BODY_CONST(efl_input_device_evas_get, Evas *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(efl_input_device_evas_get, Evas *, NULL);
static void
_efl_input_device_evas_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd, Evas *e)
@@ -271,7 +271,7 @@ _efl_input_device_evas_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd, Evas
pd->evas = e;
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_input_device_evas_set, EFL_FUNC_CALL(e), Evas *e);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(efl_input_device_evas_set, EFL_FUNC_CALL(e), Evas *e);
static Evas_Device_Subclass
_efl_input_device_subclass_get(const Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd)
@@ -279,7 +279,7 @@ _efl_input_device_subclass_get(const Eo *obj EINA_UNUSED, Efl_Input_Device_Data
return pd->subclass;
}
-EOAPI EFL_FUNC_BODY_CONST(efl_input_device_subclass_get, Evas_Device_Subclass, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(efl_input_device_subclass_get, Evas_Device_Subclass, 0);
static void
_efl_input_device_subclass_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd,
@@ -288,7 +288,7 @@ _efl_input_device_subclass_set(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd,
pd->subclass = sub_clas;
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_input_device_subclass_set, EFL_FUNC_CALL(sub_clas), Evas_Device_Subclass sub_clas);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(efl_input_device_subclass_set, EFL_FUNC_CALL(sub_clas), Evas_Device_Subclass sub_clas);
static void
_grab_del(void *data)
@@ -306,7 +306,7 @@ _efl_input_device_grab_register(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd,
eina_hash_add(pd->grabs, &grab, pdata);
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_input_device_grab_register, EFL_FUNC_CALL(grab, pdata),
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(efl_input_device_grab_register, EFL_FUNC_CALL(grab, pdata),
Efl_Canvas_Object *grab, Evas_Object_Pointer_Data *pdata);
static void
@@ -316,7 +316,7 @@ _efl_input_device_grab_unregister(Eo *obj EINA_UNUSED, Efl_Input_Device_Data *pd
eina_hash_del(pd->grabs, &grab, pdata);
}
-EOAPI EFL_VOID_FUNC_BODYV(efl_input_device_grab_unregister, EFL_FUNC_CALL(grab, pdata),
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(efl_input_device_grab_unregister, EFL_FUNC_CALL(grab, pdata),
Efl_Canvas_Object *grab, Evas_Object_Pointer_Data *pdata);
#define EFL_INPUT_DEVICE_EXTRA_OPS \
diff --git a/src/lib/evas/canvas/efl_input_event.c b/src/lib/evas/canvas/efl_input_event.c
index 90bddde143..f839127015 100644
--- a/src/lib/evas/canvas/efl_input_event.c
+++ b/src/lib/evas/canvas/efl_input_event.c
@@ -133,7 +133,7 @@ efl_input_event_instance_clean(Eo *klass)
/* Internal EO APIs */
-EOAPI EFL_FUNC_BODY_CONST(efl_input_legacy_info_get, void *, NULL)
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(efl_input_legacy_info_get, void *, NULL)
#define EFL_INPUT_EVENT_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_input_legacy_info_get, NULL)
diff --git a/src/lib/evas/canvas/efl_input_focus.c b/src/lib/evas/canvas/efl_input_focus.c
index cb154a0017..9a65e88fbf 100644
--- a/src/lib/evas/canvas/efl_input_focus.c
+++ b/src/lib/evas/canvas/efl_input_focus.c
@@ -97,7 +97,7 @@ _efl_input_focus_efl_duplicate_duplicate(const Eo *obj, Efl_Input_Focus_Data *pd
}
-EOAPI Eo*
+EVAS_API EVAS_API_WEAK Eo*
efl_input_focus_instance_get(Efl_Object *owner, void **priv)
{
Efl_Input_Focus_Data *ev;
diff --git a/src/lib/evas/canvas/efl_input_hold.c b/src/lib/evas/canvas/efl_input_hold.c
index b5ad65b644..926a2f5fe4 100644
--- a/src/lib/evas/canvas/efl_input_hold.c
+++ b/src/lib/evas/canvas/efl_input_hold.c
@@ -80,7 +80,7 @@ _efl_input_hold_efl_object_destructor(Eo *obj, Efl_Input_Hold_Data *pd)
}
-EOAPI Eo*
+EVAS_API EVAS_API_WEAK Eo*
efl_input_hold_instance_get(Efl_Object *owner, void **priv)
{
Efl_Input_Event *evt = efl_input_event_instance_get(EFL_INPUT_HOLD_CLASS, owner);;
diff --git a/src/lib/evas/canvas/efl_input_key.c b/src/lib/evas/canvas/efl_input_key.c
index 79c833ccda..24dfd21d6d 100644
--- a/src/lib/evas/canvas/efl_input_key.c
+++ b/src/lib/evas/canvas/efl_input_key.c
@@ -9,7 +9,7 @@
#define MY_CLASS EFL_INPUT_KEY_CLASS
-EOAPI Eo*
+EVAS_API EVAS_API_WEAK Eo*
efl_input_key_instance_get(Efl_Object *owner, void **priv)
{
Efl_Input_Key_Data *ev;
diff --git a/src/lib/evas/canvas/efl_input_pointer.c b/src/lib/evas/canvas/efl_input_pointer.c
index 33cb80ce68..f0e11fd959 100644
--- a/src/lib/evas/canvas/efl_input_pointer.c
+++ b/src/lib/evas/canvas/efl_input_pointer.c
@@ -21,7 +21,7 @@
*/
/* internal eo */
-EOAPI Eo*
+EVAS_API EVAS_API_WEAK Eo*
efl_input_pointer_instance_get(Efl_Object *owner, void **priv)
{
Efl_Input_Pointer_Data *ev;
@@ -43,7 +43,7 @@ _efl_input_pointer_class_destructor(Efl_Class *klass)
efl_input_event_instance_clean(klass);
}
-EAPI void
+EVAS_API void
efl_input_pointer_finalize(Efl_Input_Pointer *obj)
{
const Evas_Pointer_Data *pdata;
diff --git a/src/lib/evas/canvas/efl_input_pointer.eo b/src/lib/evas/canvas/efl_input_pointer.eo
index a9558def3d..32d5d4a84d 100644
--- a/src/lib/evas/canvas/efl_input_pointer.eo
+++ b/src/lib/evas/canvas/efl_input_pointer.eo
@@ -1,4 +1,5 @@
import efl_input_types;
+import eina_types;
class Efl.Input.Pointer extends Efl.Object implements Efl.Input.Event, Efl.Input.State
{
diff --git a/src/lib/evas/canvas/efl_input_types.eot b/src/lib/evas/canvas/efl_input_types.eot
index a716686528..ccd4b1e484 100644
--- a/src/lib/evas/canvas/efl_input_types.eot
+++ b/src/lib/evas/canvas/efl_input_types.eot
@@ -2,7 +2,7 @@ enum Efl.Pointer.Action
{
[[Pointer event type. Represents which kind of event this is.
- @since 1.19
+ @since 1.24
]]
none, [[Not a valid event, or nothing new happened (eg. when querying
current state of touch points).]]
@@ -22,7 +22,7 @@ enum Efl.Pointer.Flags
{
[[Pointer flags indicating whether a double or triple click is under way.
- @since 1.19
+ @since 1.22
]]
none = 0, [[No extra mouse button data]]
double_click = (1 << 0), [[This mouse button press was the 2nd press of a double click]]
@@ -33,7 +33,7 @@ enum Efl.Input.Flags
{
[[Special flags set during an input event propagation.
- @since 1.19
+ @since 1.22
]]
none = 0, [[No fancy flags set]]
processed = (1 << 0), [[This event is being delivered and has been processed,
@@ -60,8 +60,7 @@ enum @beta Efl.Input.Object_Pointer_Mode {
In the mode $nograb, the pointer will always be bound to the object
right below it.
-
- @since 1.19
+ @since 1.22
]]
auto_grab, [[Default, X11-like.]]
no_grab, [[Pointer always bound to the object right below it.]]
@@ -69,15 +68,13 @@ enum @beta Efl.Input.Object_Pointer_Mode {
where mouse/touch up and down events WON'T be
repeated to objects and these objects wont be
auto-grabbed.
-
- @since 1.2
]]
}
enum @beta Efl.Input.Value {
[[Keys for the generic values of all events.
- @since 1.19
+ @since 1.22
]]
none, [[Not a valid value type.]]
timestamp, [[Timestamp of this event in seconds.]]
@@ -147,7 +144,7 @@ enum Efl.Input.Modifier {
The available keys may vary depending on the physical keyboard layout, or
language and keyboard settings, or depending on the platform.
- @since 1.20
+ @since 1.22
]]
none = 0, [[No key modifier]]
alt = 1 << 0, [[Alt key modifier]]
@@ -168,7 +165,7 @@ enum Efl.Input.Lock {
The available keys may vary depending on the physical keyboard layout, or
language and keyboard settings, or depending on the platform.
- @since 1.20
+ @since 1.22
]]
none = 0, [[No key modifier]]
num = 1 << 0, [[Num Lock for numeric key pad use]]
diff --git a/src/lib/evas/canvas/efl_text_cursor.c b/src/lib/evas/canvas/efl_text_cursor_object.c
index b52298c1c0..070a2521af 100644
--- a/src/lib/evas/canvas/efl_text_cursor.c
+++ b/src/lib/evas/canvas/efl_text_cursor_object.c
@@ -1,15 +1,16 @@
#include "evas_common_private.h"
#include "evas_private.h"
#include "efl_canvas_textblock_internal.h"
+#include "eo_internal.h"
-#define MY_CLASS EFL_TEXT_CURSOR_CLASS
+#define MY_CLASS EFL_TEXT_CURSOR_OBJECT_CLASS
#define MY_CLASS_NAME "Efl.Text.Cursor"
typedef struct
{
Efl_Text_Cursor_Handle *handle;
Efl_Canvas_Object *text_obj;
-} Efl_Text_Cursor_Data;
+} Efl_Text_Cursor_Object_Data;
struct _Evas_Textblock_Selection_Iterator
{
@@ -20,20 +21,22 @@ struct _Evas_Textblock_Selection_Iterator
typedef struct _Evas_Textblock_Selection_Iterator Evas_Textblock_Selection_Iterator;
+EFL_CLASS_SIMPLE_CLASS(efl_text_cursor_object, "Efl.Text.Cursor", EFL_TEXT_CURSOR_OBJECT_CLASS)
+
EOLIAN static void
-_efl_text_cursor_position_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, int position)
+_efl_text_cursor_object_position_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, int position)
{
evas_textblock_cursor_pos_set(pd->handle, position);
}
EOLIAN static int
-_efl_text_cursor_position_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd)
+_efl_text_cursor_object_position_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd)
{
return evas_textblock_cursor_pos_get(pd->handle);
}
EOLIAN static Eina_Unicode
-_efl_text_cursor_content_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd)
+_efl_text_cursor_object_content_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd)
{
if (pd->handle && pd->handle->node)
return eina_ustrbuf_string_get(pd->handle->node->unicode)[pd->handle->pos];
@@ -42,7 +45,7 @@ _efl_text_cursor_content_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd
}
EOLIAN static Eina_Rect
-_efl_text_cursor_content_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd)
+_efl_text_cursor_object_content_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd)
{
Eina_Rect rect = {0};
Eina_Bool item_is = evas_textblock_cursor_format_item_geometry_get(pd->handle, &(rect.x), &(rect.y), &(rect.w), &(rect.h));
@@ -55,13 +58,13 @@ _efl_text_cursor_content_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor
}
EOLIAN static void
-_efl_text_cursor_line_number_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, int line_number)
+_efl_text_cursor_object_line_number_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, int line_number)
{
evas_textblock_cursor_line_set(pd->handle, line_number);
}
EOLIAN static int
-_efl_text_cursor_line_number_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd)
+_efl_text_cursor_object_line_number_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd)
{
Eina_Rect rect = {0};
@@ -69,7 +72,7 @@ _efl_text_cursor_line_number_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data
}
EOLIAN static Eina_Rect
-_efl_text_cursor_cursor_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor_Type ctype)
+_efl_text_cursor_object_cursor_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Efl_Text_Cursor_Type ctype)
{
Eina_Rect rc = {0};
Evas_Textblock_Cursor_Type cursor_type = (ctype == EFL_TEXT_CURSOR_TYPE_BEFORE) ? EVAS_TEXTBLOCK_CURSOR_BEFORE : EVAS_TEXTBLOCK_CURSOR_UNDER;
@@ -78,7 +81,7 @@ _efl_text_cursor_cursor_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_
}
EOLIAN static Eina_Bool
-_efl_text_cursor_lower_cursor_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Eina_Rect *geometry2)
+_efl_text_cursor_object_lower_cursor_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Eina_Rect *geometry2)
{
Eina_Rect rc = {0};
Eina_Bool b_ret = EINA_FALSE;
@@ -91,58 +94,62 @@ _efl_text_cursor_lower_cursor_geometry_get(const Eo *obj EINA_UNUSED, Efl_Text_C
}
EOLIAN static Eina_Bool
-_efl_text_cursor_equal(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, const Efl_Text_Cursor *dst)
+_efl_text_cursor_object_equal(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, const Efl_Text_Cursor_Object *dst)
{
- return evas_textblock_cursor_equal(pd->handle, efl_text_cursor_handle_get(dst));
+ return evas_textblock_cursor_equal(pd->handle, efl_text_cursor_object_handle_get(dst));
}
EOLIAN static int
-_efl_text_cursor_compare(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, const Efl_Text_Cursor *dst)
+_efl_text_cursor_object_compare(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, const Efl_Text_Cursor_Object *dst)
{
- return evas_textblock_cursor_compare(pd->handle, efl_text_cursor_handle_get(dst));
+ return evas_textblock_cursor_compare(pd->handle, efl_text_cursor_object_handle_get(dst));
}
-EOLIAN static void
-_efl_text_cursor_copy(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *dst)
+static void
+_efl_text_cursor_object_copy(const Efl_Text_Cursor_Object *obj, Efl_Text_Cursor_Object *dst)
{
- Efl_Text_Cursor_Data *pd_dest = efl_data_scope_safe_get(dst, MY_CLASS);
+ Efl_Text_Cursor_Object_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN(pd);
+
+ Efl_Text_Cursor_Object_Data *pd_dest = efl_data_scope_safe_get(dst, MY_CLASS);
EINA_SAFETY_ON_NULL_RETURN(pd_dest);
+
if (!pd->handle) return;
Efl_Text_Cursor_Handle *handle = evas_object_textblock_cursor_new(pd->handle->obj);
evas_textblock_cursor_copy(pd->handle, handle);
pd_dest->text_obj = pd->text_obj;
- efl_text_cursor_handle_set(dst, handle);
+ efl_text_cursor_object_handle_set(dst, handle);
evas_textblock_cursor_unref(handle, NULL);
}
-EOLIAN static Efl_Text_Cursor *
-_efl_text_cursor_efl_duplicate_duplicate(const Eo *obj, Efl_Text_Cursor_Data *pd EINA_UNUSED)
+EOLIAN static Efl_Text_Cursor_Object *
+_efl_text_cursor_object_efl_duplicate_duplicate(const Eo *obj, Efl_Text_Cursor_Object_Data *pd EINA_UNUSED)
{
- Efl_Text_Cursor *dup = efl_new(MY_CLASS);
+ Efl_Text_Cursor_Object *dup = efl_text_cursor_object_create(efl_parent_get(obj));
- efl_text_cursor_copy(obj, dup);
+ _efl_text_cursor_object_copy(obj, dup);
return dup;
}
EOLIAN static Eina_Bool
-_efl_text_cursor_move(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor_Move_Type type)
+_efl_text_cursor_object_move(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Efl_Text_Cursor_Move_Type type)
{
Eina_Bool moved = EINA_FALSE;
int pos = evas_textblock_cursor_pos_get(pd->handle);
switch (type) {
- case EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT :
+ case EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT :
moved = evas_textblock_cursor_char_next(pd->handle);
break;
- case EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV :
+ case EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS :
moved = evas_textblock_cursor_char_prev(pd->handle);
break;
case EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT :
moved = evas_textblock_cursor_cluster_next(pd->handle);
break;
- case EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREV :
+ case EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREVIOUS :
moved = evas_textblock_cursor_cluster_prev(pd->handle);
break;
case EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_START :
@@ -184,7 +191,7 @@ _efl_text_cursor_move(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cu
case EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT :
moved = evas_textblock_cursor_paragraph_next(pd->handle);
break;
- case EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_PREV :
+ case EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_PREVIOUS :
moved = evas_textblock_cursor_paragraph_prev(pd->handle);
break;
}
@@ -193,13 +200,13 @@ _efl_text_cursor_move(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cu
}
EOLIAN static void
-_efl_text_cursor_char_delete(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd)
+_efl_text_cursor_object_char_delete(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd)
{
evas_textblock_cursor_char_delete(pd->handle);
}
EOLIAN static Eina_Bool
-_efl_text_cursor_line_jump_by(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, int by)
+_efl_text_cursor_object_line_jump_by(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, int by)
{
if (!pd->handle) return EINA_FALSE;
@@ -211,13 +218,13 @@ _efl_text_cursor_line_jump_by(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, int
}
EOLIAN static void
-_efl_text_cursor_char_coord_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Eina_Position2D coord)
+_efl_text_cursor_object_char_coord_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Eina_Position2D coord)
{
evas_textblock_cursor_char_coord_set(pd->handle, coord.x, coord.y);
}
EOLIAN static void
-_efl_text_cursor_cluster_coord_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Eina_Position2D coord)
+_efl_text_cursor_object_cluster_coord_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Eina_Position2D coord)
{
evas_textblock_cursor_cluster_coord_set(pd->handle, coord.x, coord.y);
}
@@ -246,7 +253,8 @@ _cursor_text_append(Efl_Text_Cursor_Handle *cur,
const char *off = text;
int len = 0;
- Evas_Object_Protected_Data *obj = efl_data_scope_get(cur->obj, EFL_CANVAS_OBJECT_CLASS);
+ Evas_Object_Protected_Data *obj = efl_data_scope_safe_get(cur->obj, EFL_CANVAS_OBJECT_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0);
evas_object_async_block(obj);
while (*off)
@@ -286,33 +294,33 @@ _cursor_text_append(Efl_Text_Cursor_Handle *cur,
}
EOLIAN static void
-_efl_text_cursor_text_insert(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, const char *text)
+_efl_text_cursor_object_text_insert(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, const char *text)
{
_cursor_text_append(pd->handle, text);
}
EOLIAN static char *
-_efl_text_cursor_range_text_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *cur2)
+_efl_text_cursor_object_range_text_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Efl_Text_Cursor_Object *cur2)
{
- return evas_textblock_cursor_range_text_get(pd->handle, efl_text_cursor_handle_get(cur2), EVAS_TEXTBLOCK_TEXT_PLAIN);
+ return evas_textblock_cursor_range_text_get(pd->handle, efl_text_cursor_object_handle_get(cur2), EVAS_TEXTBLOCK_TEXT_PLAIN);
}
EOLIAN static void
-_efl_text_cursor_markup_insert(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, const char *markup)
+_efl_text_cursor_object_markup_insert(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, const char *markup)
{
evas_object_textblock_text_markup_prepend(pd->handle, markup);
}
EOLIAN static char *
-_efl_text_cursor_range_markup_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *cur2)
+_efl_text_cursor_object_range_markup_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Efl_Text_Cursor_Object *cur2)
{
- return evas_textblock_cursor_range_text_get(pd->handle,efl_text_cursor_handle_get(cur2), EVAS_TEXTBLOCK_TEXT_MARKUP);
+ return evas_textblock_cursor_range_text_get(pd->handle,efl_text_cursor_object_handle_get(cur2), EVAS_TEXTBLOCK_TEXT_MARKUP);
}
EOLIAN static Eina_Iterator *
-_efl_text_cursor_range_geometry_get(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *cur2)
+_efl_text_cursor_object_range_geometry_get(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Efl_Text_Cursor_Object *cur2)
{
- return evas_textblock_cursor_range_simple_geometry_get(pd->handle, efl_text_cursor_handle_get(cur2));
+ return evas_textblock_cursor_range_simple_geometry_get(pd->handle, efl_text_cursor_object_handle_get(cur2));
}
/** selection iterator */
@@ -397,22 +405,23 @@ _evas_textblock_selection_iterator_new(Eina_List *list)
}
EOLIAN static Eina_Iterator *
-_efl_text_cursor_range_precise_geometry_get(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *cur2)
+_efl_text_cursor_object_range_precise_geometry_get(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Efl_Text_Cursor_Object *cur2)
{
- Eina_List *rects = evas_textblock_cursor_range_geometry_get(pd->handle, efl_text_cursor_handle_get(cur2));
+ Eina_List *rects = evas_textblock_cursor_range_geometry_get(pd->handle, efl_text_cursor_object_handle_get(cur2));
return _evas_textblock_selection_iterator_new(rects);
}
EOLIAN static void
-_efl_text_cursor_range_delete(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *cur2)
+_efl_text_cursor_object_range_delete(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd, Efl_Text_Cursor_Object *cur2)
{
- evas_textblock_cursor_range_delete(pd->handle, efl_text_cursor_handle_get(cur2));
+ evas_textblock_cursor_range_delete(pd->handle, efl_text_cursor_object_handle_get(cur2));
}
-EAPI void
-efl_text_cursor_handle_set(Eo *obj, Efl_Text_Cursor_Handle *handle)
+EVAS_API void
+efl_text_cursor_object_handle_set(Eo *obj, Efl_Text_Cursor_Handle *handle)
{
- Efl_Text_Cursor_Data *pd = efl_data_scope_get(obj, MY_CLASS);
+ Efl_Text_Cursor_Object_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN(pd);
if (handle == pd->handle)
return;
@@ -426,16 +435,22 @@ efl_text_cursor_handle_set(Eo *obj, Efl_Text_Cursor_Handle *handle)
}
}
-EAPI Efl_Text_Cursor_Handle *
-efl_text_cursor_handle_get(const Eo *obj)
+EVAS_API Efl_Text_Cursor_Handle *
+efl_text_cursor_object_handle_get(const Eo *obj)
{
- Efl_Text_Cursor_Data *pd = efl_data_scope_get(obj, MY_CLASS);
+ Efl_Text_Cursor_Object_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL);
return pd->handle;
}
-void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_obj)
+Eo* efl_text_cursor_object_create(Eo *parent)
+{
+ return efl_add(efl_text_cursor_object_realized_class_get(), parent);
+}
+
+void efl_text_cursor_object_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_obj)
{
- Efl_Text_Cursor_Data *pd = efl_data_scope_safe_get(cursor, MY_CLASS);
+ Efl_Text_Cursor_Object_Data *pd = efl_data_scope_safe_get(cursor, MY_CLASS);
EINA_SAFETY_ON_NULL_RETURN(pd);
Efl_Text_Cursor_Handle *handle = NULL;
if (efl_isa(canvas_text_obj, EFL_CANVAS_TEXTBLOCK_CLASS))
@@ -450,19 +465,19 @@ void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_o
if (handle)
{
- efl_text_cursor_handle_set(cursor, handle);
+ efl_text_cursor_object_handle_set(cursor, handle);
evas_textblock_cursor_unref(handle, NULL);
}
}
EOLIAN static Efl_Canvas_Object *
-_efl_text_cursor_text_object_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd)
+_efl_text_cursor_object_text_object_get(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Object_Data *pd)
{
return pd->text_obj;
}
EOLIAN static void
-_efl_text_cursor_efl_object_destructor(Eo *obj, Efl_Text_Cursor_Data *pd)
+_efl_text_cursor_object_efl_object_destructor(Eo *obj, Efl_Text_Cursor_Object_Data *pd)
{
if (pd->handle)
{
@@ -479,4 +494,4 @@ _efl_text_cursor_efl_object_destructor(Eo *obj, Efl_Text_Cursor_Data *pd)
}
-#include "efl_text_cursor.eo.c"
+#include "efl_text_cursor_object.eo.c"
diff --git a/src/lib/evas/canvas/efl_text_cursor.eo b/src/lib/evas/canvas/efl_text_cursor_object.eo
index 70cfdfad21..9c936047c9 100644
--- a/src/lib/evas/canvas/efl_text_cursor.eo
+++ b/src/lib/evas/canvas/efl_text_cursor_object.eo
@@ -1,34 +1,42 @@
-enum @beta Efl.Text.Cursor_Type
+enum Efl.Text_Cursor.Type
{
- [[Text cursor types.]]
- before, [[Cursor type before.]]
- under [[Cursor type under.]]
+ [[Shape of the text cursor.
+ This is normally used in @Efl.Text_Cursor.Object methods to retrieve the cursor's geometry.
+ @since 1.24
+ ]]
+ before, [[Cursor is a vertical bar (I-beam) placed before the selected character.]]
+ under [[Cursor is an horizontal line (underscore) placed under the selected character.]]
}
-enum @beta Efl.Text.Cursor_Move_Type
+enum Efl.Text_Cursor.Move_Type
{
- [[Text cursor movement types.]]
- char_next, [[Advances to the next character.]]
- char_prev, [[Advances to the previous character.]]
- cluster_next, [[Advances to the next grapheme cluster
+ [[Text cursor movement types.
+
+ @since 1.24
+ ]]
+ character_next, [[Advances to the next character.]]
+ character_previous, [[Advances to the previous character.]]
+ cluster_next, [[Advances to the next grapheme cluster
(A character sequence rendered together. See https://unicode.org/reports/tr29/).]]
- cluster_prev, [[Advances to the previous grapheme cluster
+ cluster_previous, [[Advances to the previous grapheme cluster
(A character sequence rendered together. See https://unicode.org/reports/tr29/).]]
- paragraph_start, [[Advances to the first character in current paragraph.]]
- paragraph_end, [[Advances to the last character in current paragraph.]]
- word_start, [[Advance to current word start.]]
- word_end, [[Advance to current word end.]]
- line_start, [[Advance to current line first character.]]
- line_end, [[Advance to current line last character.]]
- first, [[Advance to first character in the first paragraph.]]
- last, [[Advance to last character in the last paragraph.]]
- paragraph_next, [[Advances to the start of the next paragraph.]]
- paragraph_prev [[Advances to the end of the previous paragraph.]]
+ paragraph_start, [[Advances to the first character in current paragraph.]]
+ paragraph_end, [[Advances to the last character in current paragraph.]]
+ word_start, [[Advance to current word start.]]
+ word_end, [[Advance to current word end.]]
+ line_start, [[Advance to current line first character.]]
+ line_end, [[Advance to current line last character.]]
+ first, [[Advance to first character in the first paragraph.]]
+ last, [[Advance to last character in the last paragraph.]]
+ paragraph_next, [[Advances to the start of the next paragraph.]]
+ paragraph_previous [[Advances to the end of the previous paragraph.]]
}
-class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
- [[Cursor API.]]
- c_prefix: efl_text_cursor;
+abstract Efl.Text_Cursor.Object extends Efl.Object implements Efl.Duplicate{
+ [[Cursor API.
+
+ @since 1.24
+ ]]
methods {
@property position {
@@ -67,15 +75,15 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
}
@property cursor_geometry {
- [[Returns the geometry of cursor, if cursor is shown for the text
- of the same direction as paragraph,else ("split cursor") will return
+ [[Returns the geometry of cursor, if cursor is shown for the text
+ of the same direction as paragraph,else ("split cursor") will return
and you need to consider the lower ("split cursor") @.lower_cursor_geometry
- Split cursor geometry is valid only in @Efl.Text.Cursor_Type.before cursor mode.]]
+ Split cursor geometry is valid only in @Efl.Text_Cursor.Type.before cursor mode.]]
get {
}
keys {
- ctype: Efl.Text.Cursor_Type; [[The type of the cursor.]]
+ ctype: Efl.Text_Cursor.Type; [[The type of the cursor.]]
}
values {
geometry: Eina.Rect; [[The geometry of the cursor (or upper cursor) in pixels.]]
@@ -86,7 +94,7 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
[[Returns the geometry of the lower ("split cursor"), if logical cursor is
between LTR/RTL text.
- To get the upper ("split cursor") @.cursor_geometry with @Efl.Text.Cursor_Type.before cursor mode.]]
+ To get the upper ("split cursor") @.cursor_geometry with @Efl.Text_Cursor.Type.before cursor mode.]]
get {
return: bool; [[$true if split cursor, $false otherwise.]]
}
@@ -98,7 +106,7 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
equal @const {
[[Check if two cursors are equal - faster than compare if all you want is equality.]]
params {
- dst: const(Efl.Text.Cursor); [[Destination Cursor.]]
+ dst: const(Efl.Text_Cursor.Object); [[Destination Cursor.]]
}
return: bool; [[$true if cursors are equal, $false otherwise.]]
}
@@ -107,22 +115,15 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
[[Compare two cursors
Return <0 if cursor position less than dst, 0 if cursor == dest and >0 otherwise.]]
params {
- dst: const(Efl.Text.Cursor); [[Destination Cursor.]]
+ dst: const(Efl.Text_Cursor.Object); [[Destination Cursor.]]
}
return: int; [[Difference between cursors.]]
}
- copy @const {
- [[Copy existing cursor to destination cursor, like position and cursor text object.]]
- params {
- dst: Efl.Text.Cursor; [[Destination Cursor.]]
- }
- }
-
move {
[[Move the cursor.]]
params {
- @in type: Efl.Text.Cursor_Move_Type; [[The type of movement.]]
+ @in type: Efl.Text_Cursor.Move_Type; [[The type of movement.]]
}
return: bool; [[True if actually moved.]]
}
@@ -173,7 +174,7 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
[[Markup of a given range in the text.]]
return: mstring @move; [[The markup in the given range.]]
params {
- cur2: Efl.Text.Cursor; [[End of range.]]
+ cur2: Efl.Text_Cursor.Object; [[End of range.]]
}
}
@@ -181,7 +182,7 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
[[Returns the text in the range between cursor and $cur2.]]
return: mstring @move; [[The text in the given range.]]
params {
- cur2: Efl.Text.Cursor; [[End of range.]]
+ cur2: Efl.Text_Cursor.Object; [[End of range.]]
}
}
@@ -192,10 +193,10 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
range are merged into one big rectangle. This is an optimized
version of @.range_precise_geometry_get.]]
params {
- cur2: Efl.Text.Cursor; [[End of range.]]
+ cur2: Efl.Text_Cursor.Object; [[End of range.]]
}
return: iterator<Eina.Rect> @move; [[
- Iterator on all geoemtries of the given range.]]
+ Iterator on all geometries of the given range.]]
}
range_precise_geometry_get {
@@ -204,7 +205,7 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
The geometry is represented as rectangles for each of the line
segments in the given range [$cur1, $cur2].]]
params {
- cur2: Efl.Text.Cursor; [[End of range.]]
+ cur2: Efl.Text_Cursor.Object; [[End of range.]]
}
return: iterator<Eina.Rect> @move; [[
Iterator on all simple geometries of the given range.]]
@@ -215,7 +216,7 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
This removes all the text in given range [$start,$end].]]
params {
- @in cur2: Efl.Text.Cursor; [[Range end position.]]
+ @in cur2: Efl.Text_Cursor.Object; [[Range end position.]]
}
}
diff --git a/src/lib/evas/canvas/efl_text_formatter.c b/src/lib/evas/canvas/efl_text_formatter.c
index 8325245cd2..96eab7ad9f 100644
--- a/src/lib/evas/canvas/efl_text_formatter.c
+++ b/src/lib/evas/canvas/efl_text_formatter.c
@@ -2,7 +2,7 @@
#include "evas_common_private.h"
#include "evas_private.h"
#include "efl_canvas_textblock_internal.h"
-#include "efl_text_cursor.eo.h"
+#include "efl_text_cursor_object.eo.h"
#define MY_CLASS EFL_TEXT_FORMATTER_CLASS
@@ -12,22 +12,22 @@ typedef struct
} Efl_Text_Formatter_Data;
EOLIAN static void
-_efl_text_formatter_attribute_insert(const Efl_Text_Cursor *start, const Efl_Text_Cursor *end, const char *format)
+_efl_text_formatter_attribute_insert(const Efl_Text_Cursor_Object *start, const Efl_Text_Cursor_Object *end, const char *format)
{
- EINA_SAFETY_ON_TRUE_RETURN(!efl_text_cursor_handle_get(start) ||
- !efl_text_cursor_handle_get(end) ||
- efl_text_cursor_handle_get(start)->obj != efl_text_cursor_handle_get(end)->obj);
+ EINA_SAFETY_ON_TRUE_RETURN(!efl_text_cursor_object_handle_get(start) ||
+ !efl_text_cursor_object_handle_get(end) ||
+ efl_text_cursor_object_handle_get(start)->obj != efl_text_cursor_object_handle_get(end)->obj);
- Eo *eo_obj= efl_text_cursor_handle_get(start)->obj;
+ Eo *eo_obj= efl_text_cursor_object_handle_get(start)->obj;
evas_textblock_async_block(eo_obj);
- _evas_textblock_annotations_insert(eo_obj, efl_text_cursor_handle_get(start), efl_text_cursor_handle_get(end), format,
+ _evas_textblock_annotations_insert(eo_obj, efl_text_cursor_object_handle_get(start), efl_text_cursor_object_handle_get(end), format,
EINA_FALSE);
efl_event_callback_legacy_call(eo_obj, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, NULL);
}
EOLIAN static unsigned int
-_efl_text_formatter_attribute_clear(const Efl_Text_Cursor *start, const Efl_Text_Cursor *end)
+_efl_text_formatter_attribute_clear(const Efl_Text_Cursor_Object *start, const Efl_Text_Cursor_Object *end)
{
unsigned int ret = 0;
Eina_Iterator *annotations;
@@ -55,29 +55,29 @@ efl_text_formatter_attribute_get(Efl_Text_Attribute_Handle *annotation)
}
Eina_Iterator *
-efl_text_formatter_range_attributes_get(const Efl_Text_Cursor *start, const Efl_Text_Cursor *end)
+efl_text_formatter_range_attributes_get(const Efl_Text_Cursor_Object *start, const Efl_Text_Cursor_Object *end)
{
Eina_List *lst = NULL;
Efl_Text_Attribute_Handle *it;
- EINA_SAFETY_ON_TRUE_RETURN_VAL(!efl_text_cursor_handle_get(start) ||
- !efl_text_cursor_handle_get(end) ||
- efl_text_cursor_handle_get(start)->obj != efl_text_cursor_handle_get(end)->obj, NULL);
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(!efl_text_cursor_object_handle_get(start) ||
+ !efl_text_cursor_object_handle_get(end) ||
+ efl_text_cursor_object_handle_get(start)->obj != efl_text_cursor_object_handle_get(end)->obj, NULL);
- Eina_Inlist *annotations = _evas_textblock_annotations_get(efl_text_cursor_handle_get(start)->obj);
+ Eina_Inlist *annotations = _evas_textblock_annotations_get(efl_text_cursor_object_handle_get(start)->obj);
EINA_INLIST_FOREACH(annotations, it)
{
Efl_Text_Cursor_Handle start2, end2;
- _evas_textblock_cursor_init(&start2, efl_text_cursor_handle_get(start)->obj);
- _evas_textblock_cursor_init(&end2, efl_text_cursor_handle_get(start)->obj);
+ _evas_textblock_cursor_init(&start2, efl_text_cursor_object_handle_get(start)->obj);
+ _evas_textblock_cursor_init(&end2, efl_text_cursor_object_handle_get(start)->obj);
if (!it->start_node || !it->end_node) continue;
_textblock_cursor_pos_at_fnode_set(&start2, it->start_node);
_textblock_cursor_pos_at_fnode_set(&end2, it->end_node);
evas_textblock_cursor_char_prev(&end2);
- if (!((evas_textblock_cursor_compare(&start2, efl_text_cursor_handle_get(end)) > 0) ||
- (evas_textblock_cursor_compare(&end2, efl_text_cursor_handle_get(start)) < 0)))
+ if (!((evas_textblock_cursor_compare(&start2, efl_text_cursor_object_handle_get(end)) > 0) ||
+ (evas_textblock_cursor_compare(&end2, efl_text_cursor_object_handle_get(start)) < 0)))
{
lst = eina_list_append(lst, it);
}
@@ -86,14 +86,14 @@ efl_text_formatter_range_attributes_get(const Efl_Text_Cursor *start, const Efl_
}
void
-efl_text_formatter_attribute_cursors_get(const Efl_Text_Attribute_Handle *handle, Efl_Text_Cursor *start, Efl_Text_Cursor *end)
+efl_text_formatter_attribute_cursors_get(const Efl_Text_Attribute_Handle *handle, Efl_Text_Cursor_Object *start, Efl_Text_Cursor_Object *end)
{
EINA_SAFETY_ON_TRUE_RETURN (!handle || !(handle->obj));
- efl_text_cursor_text_object_set(start, handle->obj, handle->obj);
- efl_text_cursor_text_object_set(end, handle->obj, handle->obj);
- _textblock_cursor_pos_at_fnode_set(efl_text_cursor_handle_get(start), handle->start_node);
- _textblock_cursor_pos_at_fnode_set(efl_text_cursor_handle_get(end), handle->end_node);
+ efl_text_cursor_object_text_object_set(start, handle->obj, handle->obj);
+ efl_text_cursor_object_text_object_set(end, handle->obj, handle->obj);
+ _textblock_cursor_pos_at_fnode_set(efl_text_cursor_object_handle_get(start), handle->start_node);
+ _textblock_cursor_pos_at_fnode_set(efl_text_cursor_object_handle_get(end), handle->end_node);
}
void
@@ -121,7 +121,8 @@ efl_text_formatter_item_geometry_get(const Efl_Text_Attribute_Handle *annotation
Efl_Text_Cursor_Handle cur;
Eo *eo_obj = annotation->obj;
- Evas_Object_Protected_Data *obj_data = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ Evas_Object_Protected_Data *obj_data = efl_data_scope_safe_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj_data, EINA_FALSE);
evas_object_async_block(obj_data);
_evas_textblock_relayout_if_needed(eo_obj);
diff --git a/src/lib/evas/canvas/efl_text_formatter.eo b/src/lib/evas/canvas/efl_text_formatter.eo
index fca4e84b3b..a34ce640f5 100644
--- a/src/lib/evas/canvas/efl_text_formatter.eo
+++ b/src/lib/evas/canvas/efl_text_formatter.eo
@@ -1,14 +1,15 @@
-import efl_text_types;
-
-abstract @beta Efl.Text.Formatter extends Efl.Object {
+abstract Efl.Text_Formatter extends Efl.Object {
[[Text Formatter API to manage text formatting(attributes).
- Use it to insert and remove style attributes (font, size, color, ...) using @Efl.Text.Cursor on EFL Widgets.
+ Use it to insert and remove style attributes (font, size, color, ...) using @Efl.Text_Cursor.Object on EFL Widgets.
- Attributes can be assigned to character ranges, selected using two @Efl.Text.Cursor instances.
+ Attributes can be assigned to character ranges, selected using two @Efl.Text_Cursor.Object instances.
Cursor instances are already bound to a text object so there's no need to provide it to this class.
Style is specified using format strings as described in @Efl.Canvas.Textblock.style_apply.
- There is no need to instantiate this class. Use directly the @.attribute_insert and @.attribute_clear static methods.]]
+ There is no need to instantiate this class. Use directly the @.attribute_insert and @.attribute_clear static methods.
+
+ @since 1.24
+ ]]
methods {
attribute_insert @static {
[[Inserts an attribute format in a specified range [$start, $end - 1].
@@ -17,8 +18,8 @@ abstract @beta Efl.Text.Formatter extends Efl.Object {
The passed cursors must belong to same text object, otherwise insertion will be ignored.
]]
params {
- start: const(Efl.Text.Cursor); [[Start of range.]]
- end: const(Efl.Text.Cursor); [[End of range.]]
+ start: const(Efl.Text_Cursor.Object); [[Start of range.]]
+ end: const(Efl.Text_Cursor.Object); [[End of range.]]
format: string; [[Format string. Uses same format as $style in @Efl.Canvas.Textblock.style_apply.]]
}
}
@@ -27,8 +28,8 @@ abstract @beta Efl.Text.Formatter extends Efl.Object {
[[Clear (remove) attributes in the specified range [$start, $end - 1].
]]
params {
- start: const(Efl.Text.Cursor); [[Start of range.]]
- end: const(Efl.Text.Cursor); [[End of range.]]
+ start: const(Efl.Text_Cursor.Object); [[Start of range.]]
+ end: const(Efl.Text_Cursor.Object); [[End of range.]]
}
return: uint; [[Number of removed attributes.]]
}
diff --git a/src/lib/evas/canvas/evas_async_events.c b/src/lib/evas/canvas/evas_async_events.c
index 9e19c3d38d..9b9e6714e8 100644
--- a/src/lib/evas/canvas/evas_async_events.c
+++ b/src/lib/evas/canvas/evas_async_events.c
@@ -171,13 +171,13 @@ evas_async_events_shutdown(void)
return _init_evas_event;
}
-EAPI int
+EVAS_API int
evas_async_events_fd_get(void)
{
return -1;
}
-EAPI int
+EVAS_API int
evas_async_events_process(void)
{
int count = 0;
@@ -207,7 +207,7 @@ _evas_async_events_fd_blocking_set(Eina_Bool blocking)
#endif
}
-EAPI int
+EVAS_API int
evas_async_events_process_blocking(void)
{
int ret;
@@ -224,7 +224,7 @@ evas_async_events_process_blocking(void)
return ret;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_async_events_put(const void *target, Evas_Callback_Type type, void *event_info, Evas_Async_Events_Put_Cb func)
{
Evas_Event_Async *ev;
@@ -295,7 +295,7 @@ _evas_thread_main_loop_lock(void *target EINA_UNUSED,
free(call);
}
-EAPI int
+EVAS_API int
evas_thread_main_loop_begin(void)
{
Evas_Safe_Call *order;
@@ -334,7 +334,7 @@ evas_thread_main_loop_begin(void)
return _thread_loop;
}
-EAPI int
+EVAS_API int
evas_thread_main_loop_end(void)
{
int current_id;
diff --git a/src/lib/evas/canvas/evas_box_eo.c b/src/lib/evas/canvas/evas_box_eo.c
index 80bcd33f89..5c2b39f08c 100644
--- a/src/lib/evas/canvas/evas_box_eo.c
+++ b/src/lib/evas/canvas/evas_box_eo.c
@@ -1,163 +1,163 @@
-EWAPI const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_ADDED =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_ADDED =
EFL_EVENT_DESCRIPTION("child,added");
-EWAPI const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_REMOVED =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_REMOVED =
EFL_EVENT_DESCRIPTION("child,removed");
void _evas_box_align_set(Eo *obj, Evas_Object_Box_Data *pd, double horizontal, double vertical);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_align_set, EFL_FUNC_CALL(horizontal, vertical), double horizontal, double vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_align_set, EFL_FUNC_CALL(horizontal, vertical), double horizontal, double vertical);
void _evas_box_align_get(const Eo *obj, Evas_Object_Box_Data *pd, double *horizontal, double *vertical);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_box_align_get, EFL_FUNC_CALL(horizontal, vertical), double *horizontal, double *vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_box_align_get, EFL_FUNC_CALL(horizontal, vertical), double *horizontal, double *vertical);
void _evas_box_padding_set(Eo *obj, Evas_Object_Box_Data *pd, int horizontal, int vertical);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_padding_set, EFL_FUNC_CALL(horizontal, vertical), int horizontal, int vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_padding_set, EFL_FUNC_CALL(horizontal, vertical), int horizontal, int vertical);
void _evas_box_padding_get(const Eo *obj, Evas_Object_Box_Data *pd, int *horizontal, int *vertical);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_box_padding_get, EFL_FUNC_CALL(horizontal, vertical), int *horizontal, int *vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_box_padding_get, EFL_FUNC_CALL(horizontal, vertical), int *horizontal, int *vertical);
void _evas_box_layout_set(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_set, EFL_FUNC_CALL(cb, data, free_data), Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_set, EFL_FUNC_CALL(cb, data, free_data), Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data);
void _evas_box_layout_horizontal(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
void _evas_box_layout_vertical(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
void _evas_box_layout_homogeneous_max_size_horizontal(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_max_size_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_max_size_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
Efl_Canvas_Object *_evas_box_internal_remove(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_remove, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_remove, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
void _evas_box_layout_flow_vertical(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_flow_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_flow_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
void _evas_box_internal_option_free(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Option *opt);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_internal_option_free, EFL_FUNC_CALL(opt), Evas_Object_Box_Option *opt);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_internal_option_free, EFL_FUNC_CALL(opt), Evas_Object_Box_Option *opt);
Evas_Object_Box_Option *_evas_box_insert_after(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_insert_after, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_insert_after, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
Eina_Bool _evas_box_remove_all(Eo *obj, Evas_Object_Box_Data *pd, Eina_Bool clear);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_remove_all, Eina_Bool, 0, EFL_FUNC_CALL(clear), Eina_Bool clear);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_remove_all, Eina_Bool, 0, EFL_FUNC_CALL(clear), Eina_Bool clear);
Eina_Iterator *_evas_box_iterator_new(const Eo *obj, Evas_Object_Box_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_box_iterator_new, Eina_Iterator *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_box_iterator_new, Eina_Iterator *, NULL);
Efl_Canvas_Object *_evas_box_add_to(Eo *obj, Evas_Object_Box_Data *pd);
-EOAPI EFL_FUNC_BODY(evas_obj_box_add_to, Efl_Canvas_Object *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY(evas_obj_box_add_to, Efl_Canvas_Object *, NULL);
Evas_Object_Box_Option *_evas_box_append(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_append, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_append, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
int _evas_box_option_property_id_get(const Eo *obj, Evas_Object_Box_Data *pd, const char *name);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_box_option_property_id_get, int, 0, EFL_FUNC_CALL(name), const char *name);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_box_option_property_id_get, int, 0, EFL_FUNC_CALL(name), const char *name);
Evas_Object_Box_Option *_evas_box_prepend(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_prepend, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_prepend, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
Eina_Accessor *_evas_box_accessor_new(const Eo *obj, Evas_Object_Box_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_box_accessor_new, Eina_Accessor *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_box_accessor_new, Eina_Accessor *, NULL);
Evas_Object_Box_Option *_evas_box_internal_append(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_append, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_append, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
Eina_Bool _evas_box_option_property_vset(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Option *opt, int property, va_list *args);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_option_property_vset, Eina_Bool, 0, EFL_FUNC_CALL(opt, property, args), Evas_Object_Box_Option *opt, int property, va_list *args);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_option_property_vset, Eina_Bool, 0, EFL_FUNC_CALL(opt, property, args), Evas_Object_Box_Option *opt, int property, va_list *args);
Efl_Canvas_Object *_evas_box_internal_remove_at(Eo *obj, Evas_Object_Box_Data *pd, unsigned int pos);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_remove_at, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(pos), unsigned int pos);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_remove_at, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(pos), unsigned int pos);
Eina_Bool _evas_box_remove_at(Eo *obj, Evas_Object_Box_Data *pd, unsigned int pos);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_remove_at, Eina_Bool, 0, EFL_FUNC_CALL(pos), unsigned int pos);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_remove_at, Eina_Bool, 0, EFL_FUNC_CALL(pos), unsigned int pos);
Eina_Bool _evas_box_option_property_vget(const Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Option *opt, int property, va_list *args);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_box_option_property_vget, Eina_Bool, 0, EFL_FUNC_CALL(opt, property, args), Evas_Object_Box_Option *opt, int property, va_list *args);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_box_option_property_vget, Eina_Bool, 0, EFL_FUNC_CALL(opt, property, args), Evas_Object_Box_Option *opt, int property, va_list *args);
Evas_Object_Box_Option *_evas_box_internal_insert_at(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child, unsigned int pos);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_insert_at, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, pos), Efl_Canvas_Object *child, unsigned int pos);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_insert_at, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, pos), Efl_Canvas_Object *child, unsigned int pos);
Evas_Object_Box_Option *_evas_box_insert_before(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_insert_before, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_insert_before, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
const char *_evas_box_option_property_name_get(const Eo *obj, Evas_Object_Box_Data *pd, int property);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_box_option_property_name_get, const char *, NULL, EFL_FUNC_CALL(property), int property);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_box_option_property_name_get, const char *, NULL, EFL_FUNC_CALL(property), int property);
Evas_Object_Box_Option *_evas_box_internal_insert_before(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_insert_before, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_insert_before, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
void _evas_box_layout_homogeneous_horizontal(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
Evas_Object_Box_Option *_evas_box_internal_option_new(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_option_new, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_option_new, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
void _evas_box_layout_homogeneous_max_size_vertical(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_max_size_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_max_size_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
Evas_Object_Box_Option *_evas_box_internal_insert_after(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_insert_after, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_insert_after, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, reference), Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
Evas_Object_Box_Option *_evas_box_insert_at(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child, unsigned int pos);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_insert_at, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, pos), Efl_Canvas_Object *child, unsigned int pos);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_insert_at, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child, pos), Efl_Canvas_Object *child, unsigned int pos);
Evas_Object_Box_Option *_evas_box_internal_prepend(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_internal_prepend, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_internal_prepend, Evas_Object_Box_Option *, NULL, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
Eina_Bool _evas_box_remove(Eo *obj, Evas_Object_Box_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_box_remove, Eina_Bool, 0, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_box_remove, Eina_Bool, 0, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
void _evas_box_layout_stack(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_stack, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_stack, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
void _evas_box_layout_homogeneous_vertical(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_homogeneous_vertical, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
void _evas_box_layout_flow_horizontal(Eo *obj, Evas_Object_Box_Data *pd, Evas_Object_Box_Data *priv, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_box_layout_flow_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_box_layout_flow_horizontal, EFL_FUNC_CALL(priv, data), Evas_Object_Box_Data *priv, void *data);
int _evas_box_count(Eo *obj, Evas_Object_Box_Data *pd);
-EOAPI EFL_FUNC_BODY(evas_obj_box_count, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY(evas_obj_box_count, int, 0);
Efl_Object *_evas_box_efl_object_constructor(Eo *obj, Evas_Object_Box_Data *pd);
diff --git a/src/lib/evas/canvas/evas_box_eo.h b/src/lib/evas/canvas/evas_box_eo.h
index 2f36d7c490..d9134cf5c5 100644
--- a/src/lib/evas/canvas/evas_box_eo.h
+++ b/src/lib/evas/canvas/evas_box_eo.h
@@ -19,7 +19,7 @@ typedef Eo Evas_Box;
*/
#define EVAS_BOX_CLASS evas_box_class_get()
-EWAPI const Efl_Class *evas_box_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_box_class_get(void) EINA_CONST;
/**
* @brief Set the alignment of the whole bounding box of contents, for a given
@@ -41,7 +41,7 @@ EWAPI const Efl_Class *evas_box_class_get(void);
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_align_set(Eo *obj, double horizontal, double vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_box_align_set(Eo *obj, double horizontal, double vertical);
/**
* @brief Get the alignment of the whole bounding box of contents, for a given
@@ -55,7 +55,7 @@ EOAPI void evas_obj_box_align_set(Eo *obj, double horizontal, double vertical);
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_align_get(const Eo *obj, double *horizontal, double *vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_box_align_get(const Eo *obj, double *horizontal, double *vertical);
/**
* @brief Set the (space) padding between cells set for a given box object.
@@ -70,7 +70,7 @@ EOAPI void evas_obj_box_align_get(const Eo *obj, double *horizontal, double *ver
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_padding_set(Eo *obj, int horizontal, int vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_box_padding_set(Eo *obj, int horizontal, int vertical);
/**
* @brief Get the (space) padding between cells set for a given box object.
@@ -83,7 +83,7 @@ EOAPI void evas_obj_box_padding_set(Eo *obj, int horizontal, int vertical);
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_padding_get(const Eo *obj, int *horizontal, int *vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_box_padding_get(const Eo *obj, int *horizontal, int *vertical);
/**
* @brief Set a new layouting function to a given box object
@@ -110,7 +110,7 @@ EOAPI void evas_obj_box_padding_get(const Eo *obj, int *horizontal, int *vertica
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_set(Eo *obj, Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_set(Eo *obj, Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data) EINA_ARG_NONNULL(2);
/**
* @brief Layout function which sets the box o to a (basic) horizontal box
@@ -161,7 +161,7 @@ EOAPI void evas_obj_box_layout_set(Eo *obj, Evas_Object_Box_Layout cb, const voi
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a (basic) vertical box
@@ -176,7 +176,7 @@ EOAPI void evas_obj_box_layout_horizontal(Eo *obj, Evas_Object_Box_Data *priv, v
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a maximum size, homogeneous
@@ -221,10 +221,10 @@ EOAPI void evas_obj_box_layout_vertical(Eo *obj, Evas_Object_Box_Data *priv, voi
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_homogeneous_max_size_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_homogeneous_max_size_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] child Child object to be removed
@@ -233,7 +233,7 @@ EOAPI void evas_obj_box_layout_homogeneous_max_size_horizontal(Eo *obj, Evas_Obj
*
* @ingroup Evas_Box
*/
-EOAPI Efl_Canvas_Object *evas_obj_box_internal_remove(Eo *obj, Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_obj_box_internal_remove(Eo *obj, Efl_Canvas_Object *child);
/**
* @brief Layout function which sets the box o to a flow vertical box.
@@ -248,17 +248,17 @@ EOAPI Efl_Canvas_Object *evas_obj_box_internal_remove(Eo *obj, Efl_Canvas_Object
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_flow_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_flow_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] opt Box option to be freed
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_internal_option_free(Eo *obj, Evas_Object_Box_Option *opt);
+EVAS_API EVAS_API_WEAK void evas_obj_box_internal_option_free(Eo *obj, Evas_Object_Box_Option *opt);
/**
* @brief Insert a new child object after another existing one, in a given box
@@ -283,7 +283,7 @@ EOAPI void evas_obj_box_internal_option_free(Eo *obj, Evas_Object_Box_Option *op
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_insert_after(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_insert_after(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
/**
* @brief Remove all child objects from a box object, unparenting them again.
@@ -299,7 +299,7 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_insert_after(Eo *obj, Efl_Canvas_Obje
*
* @ingroup Evas_Box
*/
-EOAPI Eina_Bool evas_obj_box_remove_all(Eo *obj, Eina_Bool clear);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_box_remove_all(Eo *obj, Eina_Bool clear);
/**
* @brief Get an iterator to walk the list of children of a given box object.
@@ -313,7 +313,7 @@ EOAPI Eina_Bool evas_obj_box_remove_all(Eo *obj, Eina_Bool clear);
*
* @ingroup Evas_Box
*/
-EOAPI Eina_Iterator *evas_obj_box_iterator_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_Iterator *evas_obj_box_iterator_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Add a new box as a child of a given smart object.
@@ -327,7 +327,7 @@ EOAPI Eina_Iterator *evas_obj_box_iterator_new(const Eo *obj) EINA_WARN_UNUSED_R
*
* @ingroup Evas_Box
*/
-EOAPI Efl_Canvas_Object *evas_obj_box_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_obj_box_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Append a new child object to the given box object o.
@@ -349,7 +349,7 @@ EOAPI Efl_Canvas_Object *evas_obj_box_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_append(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_append(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Get the numerical identifier of the property of the child elements of
@@ -369,7 +369,7 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_append(Eo *obj, Efl_Canvas_Object *ch
*
* @ingroup Evas_Box
*/
-EOAPI int evas_obj_box_option_property_id_get(const Eo *obj, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK int evas_obj_box_option_property_id_get(const Eo *obj, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
/**
* @brief Prepend a new child object to the given box object o.
@@ -391,7 +391,7 @@ EOAPI int evas_obj_box_option_property_id_get(const Eo *obj, const char *name) E
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_prepend(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_prepend(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Get an accessor (a structure providing random items access) to the
@@ -406,10 +406,10 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_prepend(Eo *obj, Efl_Canvas_Object *c
*
* @ingroup Evas_Box
*/
-EOAPI Eina_Accessor *evas_obj_box_accessor_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_Accessor *evas_obj_box_accessor_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] child Child object to be appended
@@ -418,7 +418,7 @@ EOAPI Eina_Accessor *evas_obj_box_accessor_new(const Eo *obj) EINA_WARN_UNUSED_R
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_internal_append(Eo *obj, Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_internal_append(Eo *obj, Efl_Canvas_Object *child);
/**
* @brief Set a property value (by its given numerical identifier), on a given
@@ -438,10 +438,10 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_internal_append(Eo *obj, Efl_Canvas_O
*
* @ingroup Evas_Box
*/
-EOAPI Eina_Bool evas_obj_box_option_property_vset(Eo *obj, Evas_Object_Box_Option *opt, int property, va_list *args) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_box_option_property_vset(Eo *obj, Evas_Object_Box_Option *opt, int property, va_list *args) EINA_ARG_NONNULL(2);
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] pos Position of object to be removed
@@ -450,7 +450,7 @@ EOAPI Eina_Bool evas_obj_box_option_property_vset(Eo *obj, Evas_Object_Box_Optio
*
* @ingroup Evas_Box
*/
-EOAPI Efl_Canvas_Object *evas_obj_box_internal_remove_at(Eo *obj, unsigned int pos);
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_obj_box_internal_remove_at(Eo *obj, unsigned int pos);
/**
* @brief Remove an object, bound to a given position in a box object,
@@ -475,7 +475,7 @@ EOAPI Efl_Canvas_Object *evas_obj_box_internal_remove_at(Eo *obj, unsigned int p
*
* @ingroup Evas_Box
*/
-EOAPI Eina_Bool evas_obj_box_remove_at(Eo *obj, unsigned int pos);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_box_remove_at(Eo *obj, unsigned int pos);
/**
* @brief Get a property's value (by its given numerical identifier), on a
@@ -496,10 +496,10 @@ EOAPI Eina_Bool evas_obj_box_remove_at(Eo *obj, unsigned int pos);
*
* @ingroup Evas_Box
*/
-EOAPI Eina_Bool evas_obj_box_option_property_vget(const Eo *obj, Evas_Object_Box_Option *opt, int property, va_list *args) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_box_option_property_vget(const Eo *obj, Evas_Object_Box_Option *opt, int property, va_list *args) EINA_ARG_NONNULL(2);
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] child Child object to be inserted
@@ -509,7 +509,7 @@ EOAPI Eina_Bool evas_obj_box_option_property_vget(const Eo *obj, Evas_Object_Box
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_internal_insert_at(Eo *obj, Efl_Canvas_Object *child, unsigned int pos);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_internal_insert_at(Eo *obj, Efl_Canvas_Object *child, unsigned int pos);
/**
* @brief Insert a new child object before another existing one, in a given box
@@ -534,7 +534,7 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_internal_insert_at(Eo *obj, Efl_Canva
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_insert_before(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_insert_before(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
/**
* @brief Get the name of the property of the child elements of the box o which
@@ -555,10 +555,10 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_insert_before(Eo *obj, Efl_Canvas_Obj
*
* @ingroup Evas_Box
*/
-EOAPI const char *evas_obj_box_option_property_name_get(const Eo *obj, int property) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK const char *evas_obj_box_option_property_name_get(const Eo *obj, int property) EINA_WARN_UNUSED_RESULT;
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] child Object to be inserted
@@ -568,7 +568,7 @@ EOAPI const char *evas_obj_box_option_property_name_get(const Eo *obj, int prope
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_internal_insert_before(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_internal_insert_before(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
/**
* @brief Layout function which sets the box o to a homogeneous horizontal box
@@ -605,10 +605,10 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_internal_insert_before(Eo *obj, Efl_C
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_homogeneous_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_homogeneous_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] child New box object
@@ -617,7 +617,7 @@ EOAPI void evas_obj_box_layout_homogeneous_horizontal(Eo *obj, Evas_Object_Box_D
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_internal_option_new(Eo *obj, Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_internal_option_new(Eo *obj, Efl_Canvas_Object *child);
/**
* @brief Layout function which sets the box o to a maximum size, homogeneous
@@ -633,10 +633,10 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_internal_option_new(Eo *obj, Efl_Canv
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_homogeneous_max_size_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_homogeneous_max_size_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] child Object to be inserted
@@ -646,7 +646,7 @@ EOAPI void evas_obj_box_layout_homogeneous_max_size_vertical(Eo *obj, Evas_Objec
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_internal_insert_after(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_internal_insert_after(Eo *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference);
/**
* @brief Insert a new child object at a given position, in a given box object
@@ -673,10 +673,10 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_internal_insert_after(Eo *obj, Efl_Ca
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_insert_at(Eo *obj, Efl_Canvas_Object *child, unsigned int pos) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_insert_at(Eo *obj, Efl_Canvas_Object *child, unsigned int pos) EINA_ARG_NONNULL(2);
/**
- * @brief No description supplied by the EAPI.
+ * @brief No description supplied by the EVAS_API.
*
* @param[in] obj The object.
* @param[in] child Object to be prepended
@@ -685,7 +685,7 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_insert_at(Eo *obj, Efl_Canvas_Object
*
* @ingroup Evas_Box
*/
-EOAPI Evas_Object_Box_Option *evas_obj_box_internal_prepend(Eo *obj, Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK Evas_Object_Box_Option *evas_obj_box_internal_prepend(Eo *obj, Efl_Canvas_Object *child);
/**
* @brief Remove a given object from a box object, unparenting it again.
@@ -705,7 +705,7 @@ EOAPI Evas_Object_Box_Option *evas_obj_box_internal_prepend(Eo *obj, Efl_Canvas_
*
* @ingroup Evas_Box
*/
-EOAPI Eina_Bool evas_obj_box_remove(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_box_remove(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Layout function which sets the box o to a stacking box
@@ -731,7 +731,7 @@ EOAPI Eina_Bool evas_obj_box_remove(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_stack(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_stack(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a homogeneous vertical box.
@@ -746,7 +746,7 @@ EOAPI void evas_obj_box_layout_stack(Eo *obj, Evas_Object_Box_Data *priv, void *
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_homogeneous_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_homogeneous_vertical(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a flow horizontal box.
@@ -784,7 +784,7 @@ EOAPI void evas_obj_box_layout_homogeneous_vertical(Eo *obj, Evas_Object_Box_Dat
*
* @ingroup Evas_Box
*/
-EOAPI void evas_obj_box_layout_flow_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API EVAS_API_WEAK void evas_obj_box_layout_flow_horizontal(Eo *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Returns the number of items in the box.
@@ -795,9 +795,9 @@ EOAPI void evas_obj_box_layout_flow_horizontal(Eo *obj, Evas_Object_Box_Data *pr
*
* @ingroup Evas_Box
*/
-EOAPI int evas_obj_box_count(Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_box_count(Eo *obj);
-EWAPI extern const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_ADDED;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_ADDED;
/** Called when a child object was added to the box
* @return Evas_Object_Box_Option *
@@ -806,7 +806,7 @@ EWAPI extern const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_ADDED;
*/
#define EVAS_BOX_EVENT_CHILD_ADDED (&(_EVAS_BOX_EVENT_CHILD_ADDED))
-EWAPI extern const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_REMOVED;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EVAS_BOX_EVENT_CHILD_REMOVED;
/** Called when a child object was removed from the box
* @return Efl_Canvas_Object *
diff --git a/src/lib/evas/canvas/evas_box_eo.legacy.c b/src/lib/evas/canvas/evas_box_eo.legacy.c
index c2ac6b840c..1eedf18f37 100644
--- a/src/lib/evas/canvas/evas_box_eo.legacy.c
+++ b/src/lib/evas/canvas/evas_box_eo.legacy.c
@@ -1,161 +1,161 @@
-EAPI void
+EVAS_API void
evas_object_box_align_set(Evas_Box *obj, double horizontal, double vertical)
{
evas_obj_box_align_set(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_box_align_get(const Evas_Box *obj, double *horizontal, double *vertical)
{
evas_obj_box_align_get(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_box_padding_set(Evas_Box *obj, int horizontal, int vertical)
{
evas_obj_box_padding_set(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_box_padding_get(const Evas_Box *obj, int *horizontal, int *vertical)
{
evas_obj_box_padding_get(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_set(Evas_Box *obj, Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data)
{
evas_obj_box_layout_set(obj, cb, data, free_data);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_horizontal(obj, priv, data);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_vertical(obj, priv, data);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_homogeneous_max_size_horizontal(obj, priv, data);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_flow_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_flow_vertical(obj, priv, data);
}
-EAPI Evas_Object_Box_Option *
+EVAS_API Evas_Object_Box_Option *
evas_object_box_insert_after(Evas_Box *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference)
{
return evas_obj_box_insert_after(obj, child, reference);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_box_remove_all(Evas_Box *obj, Eina_Bool clear)
{
return evas_obj_box_remove_all(obj, clear);
}
-EAPI Eina_Iterator *
+EVAS_API Eina_Iterator *
evas_object_box_iterator_new(const Evas_Box *obj)
{
return evas_obj_box_iterator_new(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_box_add_to(Evas_Box *obj)
{
return evas_obj_box_add_to(obj);
}
-EAPI Evas_Object_Box_Option *
+EVAS_API Evas_Object_Box_Option *
evas_object_box_append(Evas_Box *obj, Efl_Canvas_Object *child)
{
return evas_obj_box_append(obj, child);
}
-EAPI int
+EVAS_API int
evas_object_box_option_property_id_get(const Evas_Box *obj, const char *name)
{
return evas_obj_box_option_property_id_get(obj, name);
}
-EAPI Evas_Object_Box_Option *
+EVAS_API Evas_Object_Box_Option *
evas_object_box_prepend(Evas_Box *obj, Efl_Canvas_Object *child)
{
return evas_obj_box_prepend(obj, child);
}
-EAPI Eina_Accessor *
+EVAS_API Eina_Accessor *
evas_object_box_accessor_new(const Evas_Box *obj)
{
return evas_obj_box_accessor_new(obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_box_remove_at(Evas_Box *obj, unsigned int pos)
{
return evas_obj_box_remove_at(obj, pos);
}
-EAPI Evas_Object_Box_Option *
+EVAS_API Evas_Object_Box_Option *
evas_object_box_insert_before(Evas_Box *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference)
{
return evas_obj_box_insert_before(obj, child, reference);
}
-EAPI const char *
+EVAS_API const char *
evas_object_box_option_property_name_get(const Evas_Box *obj, int property)
{
return evas_obj_box_option_property_name_get(obj, property);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_homogeneous_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_homogeneous_horizontal(obj, priv, data);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_homogeneous_max_size_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_homogeneous_max_size_vertical(obj, priv, data);
}
-EAPI Evas_Object_Box_Option *
+EVAS_API Evas_Object_Box_Option *
evas_object_box_insert_at(Evas_Box *obj, Efl_Canvas_Object *child, unsigned int pos)
{
return evas_obj_box_insert_at(obj, child, pos);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_box_remove(Evas_Box *obj, Efl_Canvas_Object *child)
{
return evas_obj_box_remove(obj, child);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_stack(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_stack(obj, priv, data);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_homogeneous_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_homogeneous_vertical(obj, priv, data);
}
-EAPI void
+EVAS_API void
evas_object_box_layout_flow_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data)
{
evas_obj_box_layout_flow_horizontal(obj, priv, data);
diff --git a/src/lib/evas/canvas/evas_box_eo.legacy.h b/src/lib/evas/canvas/evas_box_eo.legacy.h
index ba67589525..71c0d8ff4e 100644
--- a/src/lib/evas/canvas/evas_box_eo.legacy.h
+++ b/src/lib/evas/canvas/evas_box_eo.legacy.h
@@ -34,7 +34,7 @@ typedef Eo Evas_Box;
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_align_set(Evas_Box *obj, double horizontal, double vertical);
+EVAS_API void evas_object_box_align_set(Evas_Box *obj, double horizontal, double vertical);
/**
* @brief Get the alignment of the whole bounding box of contents, for a given
@@ -48,7 +48,7 @@ EAPI void evas_object_box_align_set(Evas_Box *obj, double horizontal, double ver
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_align_get(const Evas_Box *obj, double *horizontal, double *vertical);
+EVAS_API void evas_object_box_align_get(const Evas_Box *obj, double *horizontal, double *vertical);
/**
* @brief Set the (space) padding between cells set for a given box object.
@@ -63,7 +63,7 @@ EAPI void evas_object_box_align_get(const Evas_Box *obj, double *horizontal, dou
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_padding_set(Evas_Box *obj, int horizontal, int vertical);
+EVAS_API void evas_object_box_padding_set(Evas_Box *obj, int horizontal, int vertical);
/**
* @brief Get the (space) padding between cells set for a given box object.
@@ -76,7 +76,7 @@ EAPI void evas_object_box_padding_set(Evas_Box *obj, int horizontal, int vertica
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_padding_get(const Evas_Box *obj, int *horizontal, int *vertical);
+EVAS_API void evas_object_box_padding_get(const Evas_Box *obj, int *horizontal, int *vertical);
/**
* @brief Set a new layouting function to a given box object
@@ -105,7 +105,7 @@ EAPI void evas_object_box_padding_get(const Evas_Box *obj, int *horizontal, int
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_set(Evas_Box *obj, Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data) EINA_ARG_NONNULL(2);
+EVAS_API void evas_object_box_layout_set(Evas_Box *obj, Evas_Object_Box_Layout cb, const void *data, Eina_Free_Cb free_data) EINA_ARG_NONNULL(2);
/**
* @brief Layout function which sets the box o to a (basic) horizontal box
@@ -156,7 +156,7 @@ EAPI void evas_object_box_layout_set(Evas_Box *obj, Evas_Object_Box_Layout cb, c
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a (basic) vertical box
@@ -171,7 +171,7 @@ EAPI void evas_object_box_layout_horizontal(Evas_Box *obj, Evas_Object_Box_Data
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a maximum size, homogeneous
@@ -216,7 +216,7 @@ EAPI void evas_object_box_layout_vertical(Evas_Box *obj, Evas_Object_Box_Data *p
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
@@ -232,7 +232,7 @@ EAPI void evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Box *obj,
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_flow_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_flow_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
@@ -258,7 +258,7 @@ EAPI void evas_object_box_layout_flow_vertical(Evas_Box *obj, Evas_Object_Box_Da
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Evas_Object_Box_Option *evas_object_box_insert_after(Evas_Box *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
+EVAS_API Evas_Object_Box_Option *evas_object_box_insert_after(Evas_Box *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
/**
* @brief Remove all child objects from a box object, unparenting them again.
@@ -274,7 +274,7 @@ EAPI Evas_Object_Box_Option *evas_object_box_insert_after(Evas_Box *obj, Efl_Can
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Eina_Bool evas_object_box_remove_all(Evas_Box *obj, Eina_Bool clear);
+EVAS_API Eina_Bool evas_object_box_remove_all(Evas_Box *obj, Eina_Bool clear);
/**
* @brief Get an iterator to walk the list of children of a given box object.
@@ -288,7 +288,7 @@ EAPI Eina_Bool evas_object_box_remove_all(Evas_Box *obj, Eina_Bool clear);
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Eina_Iterator *evas_object_box_iterator_new(const Evas_Box *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Iterator *evas_object_box_iterator_new(const Evas_Box *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Add a new box as a child of a given smart object.
@@ -302,7 +302,7 @@ EAPI Eina_Iterator *evas_object_box_iterator_new(const Evas_Box *obj) EINA_WARN_
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Efl_Canvas_Object *evas_object_box_add_to(Evas_Box *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Efl_Canvas_Object *evas_object_box_add_to(Evas_Box *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Append a new child object to the given box object o.
@@ -324,7 +324,7 @@ EAPI Efl_Canvas_Object *evas_object_box_add_to(Evas_Box *obj) EINA_WARN_UNUSED_R
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Evas_Object_Box_Option *evas_object_box_append(Evas_Box *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API Evas_Object_Box_Option *evas_object_box_append(Evas_Box *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Get the numerical identifier of the property of the child elements of
@@ -344,7 +344,7 @@ EAPI Evas_Object_Box_Option *evas_object_box_append(Evas_Box *obj, Efl_Canvas_Ob
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI int evas_object_box_option_property_id_get(const Evas_Box *obj, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
+EVAS_API int evas_object_box_option_property_id_get(const Evas_Box *obj, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
/**
* @brief Prepend a new child object to the given box object o.
@@ -366,7 +366,7 @@ EAPI int evas_object_box_option_property_id_get(const Evas_Box *obj, const char
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Evas_Object_Box_Option *evas_object_box_prepend(Evas_Box *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API Evas_Object_Box_Option *evas_object_box_prepend(Evas_Box *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Get an accessor (a structure providing random items access) to the
@@ -381,7 +381,7 @@ EAPI Evas_Object_Box_Option *evas_object_box_prepend(Evas_Box *obj, Efl_Canvas_O
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Eina_Accessor *evas_object_box_accessor_new(const Evas_Box *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Accessor *evas_object_box_accessor_new(const Evas_Box *obj) EINA_WARN_UNUSED_RESULT;
@@ -409,7 +409,7 @@ EAPI Eina_Accessor *evas_object_box_accessor_new(const Evas_Box *obj) EINA_WARN_
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Eina_Bool evas_object_box_remove_at(Evas_Box *obj, unsigned int pos);
+EVAS_API Eina_Bool evas_object_box_remove_at(Evas_Box *obj, unsigned int pos);
@@ -436,7 +436,7 @@ EAPI Eina_Bool evas_object_box_remove_at(Evas_Box *obj, unsigned int pos);
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Evas_Object_Box_Option *evas_object_box_insert_before(Evas_Box *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
+EVAS_API Evas_Object_Box_Option *evas_object_box_insert_before(Evas_Box *obj, Efl_Canvas_Object *child, const Efl_Canvas_Object *reference) EINA_ARG_NONNULL(2, 3);
/**
* @brief Get the name of the property of the child elements of the box o which
@@ -457,7 +457,7 @@ EAPI Evas_Object_Box_Option *evas_object_box_insert_before(Evas_Box *obj, Efl_Ca
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI const char *evas_object_box_option_property_name_get(const Evas_Box *obj, int property) EINA_WARN_UNUSED_RESULT;
+EVAS_API const char *evas_object_box_option_property_name_get(const Evas_Box *obj, int property) EINA_WARN_UNUSED_RESULT;
/**
@@ -495,7 +495,7 @@ EAPI const char *evas_object_box_option_property_name_get(const Evas_Box *obj, i
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_homogeneous_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_homogeneous_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
@@ -512,7 +512,7 @@ EAPI void evas_object_box_layout_homogeneous_horizontal(Evas_Box *obj, Evas_Obje
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_homogeneous_max_size_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_homogeneous_max_size_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
@@ -540,7 +540,7 @@ EAPI void evas_object_box_layout_homogeneous_max_size_vertical(Evas_Box *obj, Ev
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Evas_Object_Box_Option *evas_object_box_insert_at(Evas_Box *obj, Efl_Canvas_Object *child, unsigned int pos) EINA_ARG_NONNULL(2);
+EVAS_API Evas_Object_Box_Option *evas_object_box_insert_at(Evas_Box *obj, Efl_Canvas_Object *child, unsigned int pos) EINA_ARG_NONNULL(2);
/**
@@ -561,7 +561,7 @@ EAPI Evas_Object_Box_Option *evas_object_box_insert_at(Evas_Box *obj, Efl_Canvas
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI Eina_Bool evas_object_box_remove(Evas_Box *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_box_remove(Evas_Box *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Layout function which sets the box o to a stacking box
@@ -587,7 +587,7 @@ EAPI Eina_Bool evas_object_box_remove(Evas_Box *obj, Efl_Canvas_Object *child) E
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_stack(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_stack(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a homogeneous vertical box.
@@ -602,7 +602,7 @@ EAPI void evas_object_box_layout_stack(Evas_Box *obj, Evas_Object_Box_Data *priv
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_homogeneous_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_homogeneous_vertical(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
/**
* @brief Layout function which sets the box o to a flow horizontal box.
@@ -640,7 +640,7 @@ EAPI void evas_object_box_layout_homogeneous_vertical(Evas_Box *obj, Evas_Object
*
* @ingroup Evas_Object_Box_Group
*/
-EAPI void evas_object_box_layout_flow_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
+EVAS_API void evas_object_box_layout_flow_horizontal(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
#endif
diff --git a/src/lib/evas/canvas/evas_callbacks.c b/src/lib/evas/canvas/evas_callbacks.c
index d9aac154f8..39bf42c6d5 100644
--- a/src/lib/evas/canvas/evas_callbacks.c
+++ b/src/lib/evas/canvas/evas_callbacks.c
@@ -193,7 +193,8 @@ _eo_evas_object_cb(void *data, const Efl_Event *event)
if (event_flags) evflags = *event_flags;
info->func.object_cb(info->data, evas, event->object, event_info);
if (event_flags && (evflags != *event_flags))
- efl_input_event_flags_set(efl_event_info, *event_flags);
+ efl_input_event_flags_set(efl_event_info,
+ (Efl_Input_Flags)*event_flags);
}
static void
@@ -403,7 +404,7 @@ evas_object_event_callback_call(Evas_Object *eo_obj, Evas_Object_Protected_Data
if ((type == EVAS_CALLBACK_MOUSE_DOWN) || (type == EVAS_CALLBACK_MOUSE_UP))
{
- flags = efl_input_pointer_button_flags_get(event_info);
+ flags = (Evas_Button_Flags)efl_input_pointer_button_flags_get(event_info);
if (flags & CLICK_MASK)
{
if (obj->last_mouse_down_counter < (e->last_mouse_down_counter - 1))
@@ -432,7 +433,7 @@ evas_object_event_callback_call(Evas_Object *eo_obj, Evas_Object_Protected_Data
e->current_event = EVAS_CALLBACK_MULTI_DOWN;
efl_event_callback_call(eo_obj, EFL_EVENT_FINGER_DOWN, event_info);
}
- efl_input_pointer_button_flags_set(event_info, flags);
+ efl_input_pointer_button_flags_set(event_info, (Efl_Pointer_Flags) flags);
}
else if (type == EVAS_CALLBACK_MOUSE_UP)
{
@@ -441,7 +442,7 @@ evas_object_event_callback_call(Evas_Object *eo_obj, Evas_Object_Protected_Data
e->current_event = EVAS_CALLBACK_MULTI_UP;
efl_event_callback_call(eo_obj, EFL_EVENT_FINGER_UP, event_info);
}
- efl_input_pointer_button_flags_set(event_info, flags);
+ efl_input_pointer_button_flags_set(event_info, (Efl_Pointer_Flags)flags);
}
else if (type == EVAS_CALLBACK_MOUSE_MOVE)
{
@@ -473,14 +474,14 @@ nothing_here:
_evas_unwalk(e);
}
-EAPI void
+EVAS_API void
evas_object_event_callback_add(Evas_Object *eo_obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data)
{
evas_object_event_callback_priority_add(eo_obj, type,
EVAS_CALLBACK_PRIORITY_DEFAULT, func, data);
}
-EAPI void
+EVAS_API void
evas_object_event_callback_priority_add(Evas_Object *eo_obj, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Object_Event_Cb func, const void *data)
{
Evas_Object_Protected_Data *obj;
@@ -508,7 +509,7 @@ evas_object_event_callback_priority_add(Evas_Object *eo_obj, Evas_Callback_Type
eina_inlist_append(obj->callbacks, EINA_INLIST_GET(cb_info));
}
-EAPI void *
+EVAS_API void *
evas_object_event_callback_del(Evas_Object *eo_obj, Evas_Callback_Type type, Evas_Object_Event_Cb func)
{
Evas_Object_Protected_Data *obj;
@@ -538,7 +539,7 @@ evas_object_event_callback_del(Evas_Object *eo_obj, Evas_Callback_Type type, Eva
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_object_event_callback_del_full(Evas_Object *eo_obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data)
{
Evas_Object_Protected_Data *obj;
@@ -568,7 +569,7 @@ evas_object_event_callback_del_full(Evas_Object *eo_obj, Evas_Callback_Type type
return NULL;
}
-EAPI void
+EVAS_API void
evas_event_callback_add(Evas *eo_e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data)
{
evas_event_callback_priority_add(eo_e, type, EVAS_CALLBACK_PRIORITY_DEFAULT,
@@ -593,7 +594,7 @@ _deferred_callbacks_process(Evas *eo_e, Evas_Public_Data *e)
}
}
-EAPI void
+EVAS_API void
evas_event_callback_priority_add(Evas *eo_e, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Event_Cb func, const void *data)
{
Evas_Public_Data *e;
@@ -629,7 +630,7 @@ evas_event_callback_priority_add(Evas *eo_e, Evas_Callback_Type type, Evas_Callb
}
}
-EAPI void *
+EVAS_API void *
evas_event_callback_del(Evas *eo_e, Evas_Callback_Type type, Evas_Event_Cb func)
{
Evas_Public_Data *e;
@@ -673,7 +674,7 @@ evas_event_callback_del(Evas *eo_e, Evas_Callback_Type type, Evas_Event_Cb func)
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_event_callback_del_full(Evas *eo_e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data)
{
Evas_Public_Data *e;
@@ -717,7 +718,7 @@ evas_event_callback_del_full(Evas *eo_e, Evas_Callback_Type type, Evas_Event_Cb
return NULL;
}
-EAPI void
+EVAS_API void
evas_post_event_callback_push(Evas *eo_e, Evas_Object_Event_Post_Cb func, const void *data)
{
Evas_Public_Data *e;
@@ -731,7 +732,7 @@ evas_post_event_callback_push(Evas *eo_e, Evas_Object_Event_Post_Cb func, const
if (e->delete_me) return;
if (e->current_event == EVAS_CALLBACK_LAST)
{
- ERR("%s() can only be called from an input event callback!", __FUNCTION__);
+ ERR("%s() can only be called from an input event callback!", __func__);
return;
}
EVAS_MEMPOOL_INIT(_mp_pc, "evas_post_callback", Evas_Post_Callback, 64, );
@@ -746,7 +747,7 @@ evas_post_event_callback_push(Evas *eo_e, Evas_Object_Event_Post_Cb func, const
e->post_events = eina_list_prepend(e->post_events, pc);
}
-EAPI void
+EVAS_API void
evas_post_event_callback_remove(Evas *eo_e, Evas_Object_Event_Post_Cb func)
{
Evas_Public_Data *e;
@@ -767,7 +768,7 @@ evas_post_event_callback_remove(Evas *eo_e, Evas_Object_Event_Post_Cb func)
}
}
-EAPI void
+EVAS_API void
evas_post_event_callback_remove_full(Evas *eo_e, Evas_Object_Event_Post_Cb func, const void *data)
{
Evas_Public_Data *e;
@@ -872,3 +873,10 @@ evas_object_callbacks_event_catcher_del(Eo *eo_obj EINA_UNUSED, Evas_Object_Prot
}
}
+void
+evas_object_callbacks_shutdown(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
+{
+ if (obj->animator_ref > 0)
+ efl_event_callback_del(obj->layer->evas->evas, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _animator_repeater, obj);
+ obj->animator_ref = 0;
+}
diff --git a/src/lib/evas/canvas/evas_canvas3d_camera.c b/src/lib/evas/canvas/evas_canvas3d_camera.c
deleted file mode 100644
index 97f0576431..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_camera.c
+++ /dev/null
@@ -1,203 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_CAMERA_CLASS
-
-static Eina_Bool
-_camera_node_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Node *n = *(Evas_Canvas3D_Node **)key;
- evas_canvas3d_object_change(n, EVAS_CANVAS3D_STATE_NODE_CAMERA, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_evas_canvas3d_object_change_notify(Eo *obj,Evas_Canvas3D_Camera_Data *pd, Evas_Canvas3D_State state EINA_UNUSED, Evas_Canvas3D_Object *ref EINA_UNUSED)
-{
- if (pd->nodes) eina_hash_foreach(pd->nodes, _camera_node_change_notify, obj);
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_evas_canvas3d_object_update_notify(Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Camera_Data *pd EINA_UNUSED)
-{
-
-}
-
-void
-evas_canvas3d_camera_node_add(Evas_Canvas3D_Camera *camera, Evas_Canvas3D_Node *node)
-{
- Evas_Canvas3D_Camera_Data *pd = efl_data_scope_get(camera, MY_CLASS);
- int count = 0;
-
- if (!pd->nodes)
- {
- pd->nodes = eina_hash_pointer_new(NULL);
-
- if (!pd->nodes)
- {
- ERR("Failed to create hash table. camera(%p)", camera);
- return;
- }
- }
- else count = (int)(uintptr_t)eina_hash_find(pd->nodes, &node);
- eina_hash_set(pd->nodes, &node, (const void *)(uintptr_t)(count + 1));
-}
-
-void
-evas_canvas3d_camera_node_del(Evas_Canvas3D_Camera *camera, Evas_Canvas3D_Node *node)
-{
- Evas_Canvas3D_Camera_Data *pd = efl_data_scope_get(camera, MY_CLASS);
- int count = 0;
-
- if (!pd->nodes)
- {
- ERR("No node to delete.");
- return;
- }
-
- count = (int)(uintptr_t)eina_hash_find(pd->nodes, &node);
- if (count == 1) eina_hash_del(pd->nodes, &node, NULL);
- else eina_hash_set(pd->nodes, &node, (const void *)(uintptr_t)(count - 1));
-}
-
-EOLIAN static Eo *
-_evas_canvas3d_camera_efl_object_constructor(Eo *obj,
- Evas_Canvas3D_Camera_Data *pd EINA_UNUSED)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_CAMERA);
-
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_efl_object_destructor(Eo *obj,
- Evas_Canvas3D_Camera_Data *pd)
-{
- Eina_Iterator *it = NULL;
- void *data = NULL;
- Evas_Canvas3D_Node_Data *node = NULL;
-
- if (pd->nodes)
- {
- it = eina_hash_iterator_key_new(pd->nodes);
- while (eina_iterator_next(it, &data))
- {
- node = efl_data_scope_get(data, EVAS_CANVAS3D_NODE_CLASS);
- node->data.camera.camera = NULL;
- }
-
- eina_hash_free(pd->nodes);
- }
-
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-EAPI Evas_Canvas3D_Camera *
-evas_canvas3d_camera_add(Evas *e)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e);
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_projection_matrix_set(Eo *obj, Evas_Canvas3D_Camera_Data *pd,
- const Evas_Real *matrix)
-{
- eina_matrix4_array_set(&pd->projection, matrix);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_CAMERA_PROJECTION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_projection_matrix_get(const Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Camera_Data *pd,
- Evas_Real *matrix)
-{
- memcpy(matrix, &pd->projection.xx, sizeof(Evas_Real) * 16);
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_projection_perspective_set(Eo *obj, Evas_Canvas3D_Camera_Data *pd,
- Evas_Real fovy, Evas_Real aspect,
- Evas_Real dnear, Evas_Real dfar)
-{
- Evas_Real xmax;
- Evas_Real ymax;
-
- ymax = dnear * (Evas_Real)tan((double)fovy * M_PI / 360.0);
- xmax = ymax * aspect;
-
- evas_mat4_frustum_set(&pd->projection, -xmax, xmax, -ymax, ymax, dnear, dfar);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_CAMERA_PROJECTION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_projection_frustum_set(Eo *obj, Evas_Canvas3D_Camera_Data *pd,
- Evas_Real left, Evas_Real right,
- Evas_Real bottom, Evas_Real top,
- Evas_Real dnear, Evas_Real dfar)
-{
- evas_mat4_frustum_set(&pd->projection, left, right, bottom, top, dnear, dfar);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_CAMERA_PROJECTION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_camera_projection_ortho_set(Eo *obj, Evas_Canvas3D_Camera_Data *pd,
- Evas_Real left, Evas_Real right,
- Evas_Real bottom, Evas_Real top,
- Evas_Real dnear, Evas_Real dfar)
-{
- eina_matrix4_ortho_set(&pd->projection, left, right, bottom, top, dnear, dfar);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_CAMERA_PROJECTION, NULL);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_camera_node_visible_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Camera_Data *pd, Evas_Canvas3D_Node *camera_node, Evas_Canvas3D_Node *node, Evas_Canvas3D_Frustum_Mode key)
-{
- Eina_Matrix4 matrix_vp;
- Eina_Quaternion planes[6];
- Evas_Canvas3D_Node_Data *pd_node = efl_data_scope_get(node, EVAS_CANVAS3D_NODE_CLASS);
- Evas_Canvas3D_Node_Data *pd_camera = efl_data_scope_get(camera_node, EVAS_CANVAS3D_NODE_CLASS);
- Eina_Vector3 central_point;
-
- if (!node || pd_node->type != EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- ERR("Mesh node %p type mismatch.", node);
- return EINA_FALSE;
- }
-
- if (!camera_node || pd_camera->type != EVAS_CANVAS3D_NODE_TYPE_CAMERA)
- {
- ERR("Camera node %p type mismatch.", camera_node);
- return EINA_FALSE;
- }
-
- /*get need matrix like multiply projection matrix with view matrix*/
- eina_matrix4_multiply(&matrix_vp, &pd->projection, &pd_camera->data.camera.matrix_world_to_eye);
-
- evas_frustum_calculate(planes, &matrix_vp);
-
- if (key == EVAS_CANVAS3D_FRUSTUM_MODE_BSPHERE)
- return evas_is_sphere_in_frustum(&pd_node->bsphere, planes);
- else if (key == EVAS_CANVAS3D_FRUSTUM_MODE_AABB)
- return evas_is_box_in_frustum(&pd_node->aabb, planes);
- else if (key == EVAS_CANVAS3D_FRUSTUM_MODE_CENTRAL_POINT)
- {
- central_point.x = (pd_node->aabb.p0.x + pd_node->aabb.p1.x) / 2;
- central_point.y = (pd_node->aabb.p0.y + pd_node->aabb.p1.y) / 2;
- central_point.z = (pd_node->aabb.p0.z + pd_node->aabb.p1.z) / 2;
- return evas_is_point_in_frustum(&central_point, planes);
- }
- else
- {
- ERR("Unknown frustun mode.");
- return EINA_TRUE;
- }
-}
-
-#include "canvas/evas_canvas3d_camera.eo.c"
-
diff --git a/src/lib/evas/canvas/evas_canvas3d_camera.eo b/src/lib/evas/canvas/evas_canvas3d_camera.eo
deleted file mode 100644
index 9cd98007f2..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_camera.eo
+++ /dev/null
@@ -1,89 +0,0 @@
-import evas_canvas3d_types;
-
-class @beta Evas.Canvas3D.Camera extends Evas.Canvas3D.Object
-{
- [[Evas 3D canvas camera class]]
- data: Evas_Canvas3D_Camera_Data;
- methods {
- projection_matrix_set {
- [[Set the projection matrix of the given camera.
-
- Default projection matrix is identity matrix.
-
- See also @.projection_perspective_set, @.projection_ortho_set and @.projection_frustum_set.]]
- params {
- @in matrix: ptr(const(Evas.Real)); [[Projection Matrix]]
- }
- }
-
- projection_matrix_get @const {
- [[Get the projection matrix of the given camera.
-
- See also @.projection_matrix_set.]]
- params {
- @out matrix: Evas.Real; [[Projection Matrix]]
- }
- }
-
- projection_perspective_set {
- [[Set the projection matrix of the given camera with perspective projection.
-
- See also @.projection_matrix_set.]]
-
- params {
- fovy: Evas.Real; [[Field of view angle in Y direction.]]
- aspect: Evas.Real; [[Aspect ratio.]]
- dnear: Evas.Real; [[Distance to near clipping plane.]]
- dfar: Evas.Real; [[Distance to far clipping plane.]]
- }
- }
-
- projection_frustum_set {
- [[Set the projection matrix of the given camera with frustum projection.
-
- See also @.projection_matrix_set.]]
- params {
- left: Evas.Real; [[Left X coordinate of the near clipping plane.]]
- right: Evas.Real; [[Right X coordinate of the near clipping plane..]]
- bottom: Evas.Real; [[Bottom Y coordinate of the near clipping plane.]]
- top: Evas.Real; [[Top Y coordinate of the near clipping plane]]
- dnear: Evas.Real; [[Distance to near clipping plane.]]
- dfar: Evas.Real; [[Distance to far clipping plane.]]
- }
- }
- projection_ortho_set {
- [[Set the projection matrix of the given camera with orthogonal projection.
-
- See also @.projection_matrix_set.]]
- params {
- left: Evas.Real; [[Left X coordinate of the near clipping plane.]]
- right: Evas.Real; [[Right X coordinate of the near clipping plane..]]
- bottom: Evas.Real; [[Bottom Y coordinate of the near clipping plane.]]
- top: Evas.Real; [[Top Y coordinate of the near clipping plane]]
- dnear: Evas.Real; [[Distance to near clipping plane.]]
- dfar: Evas.Real; [[Distance to far clipping plane.]]
- }
- }
- node_visible_get {
- [[Check is bounding sphere of given node inside frustum of camera node.
-
- If the nodes are $null or nodes type mismatch error wrong type of nodes will be generated and returned $false.]]
- return: bool; [[$true in frustum, $false otherwise]]
- params {
- @in camera_node: Evas.Canvas3D.Node; [[The given camera node.]]
- @in node: Evas.Canvas3D.Node; [[The given node.]]
- @in key: Evas.Canvas3D.Frustum_Mode; [[The given key]]
- }
- }
- }
-
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- Evas.Canvas3D.Object.update_notify;
- Evas.Canvas3D.Object.change_notify;
- @empty Evas.Canvas3D.Object.callback_register;
- @empty Evas.Canvas3D.Object.callback_unregister;
- }
-
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_eet.c b/src/lib/evas/canvas/evas_canvas3d_eet.c
deleted file mode 100644
index ca24450626..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_eet.c
+++ /dev/null
@@ -1,211 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-static Eet_Data_Descriptor *_vec2_descriptor = NULL;
-static Eet_Data_Descriptor *_vec3_descriptor = NULL;
-static Eet_Data_Descriptor *_vertex_descriptor = NULL;
-static Eet_Data_Descriptor *_geometry_descriptor = NULL;
-static Eet_Data_Descriptor *_color_descriptor = NULL;
-static Eet_Data_Descriptor *_material_descriptor = NULL;
-static Eet_Data_Descriptor *_frame_descriptor = NULL;
-static Eet_Data_Descriptor *_mesh_descriptor = NULL;
-static Eet_Data_Descriptor *_header_descriptor = NULL;
-static Eet_Data_Descriptor *_file_descriptor = NULL;
-
-Evas_Canvas3D_File_Eet *
-_evas_canvas3d_eet_file_new(void)
-{
- Evas_Canvas3D_File_Eet *creating_file = calloc(1, sizeof(Evas_Canvas3D_File_Eet));
-
- if (!creating_file)
- {
- ERR("Could not calloc Evas_Canvas3D_File_Eet");
- return NULL;
- }
-
- return creating_file;
-}
-
-Eet_Data_Descriptor*
-_evas_canvas3d_eet_file_get(void)
-{
- if(_file_descriptor == NULL)
- _evas_canvas3d_eet_file_init();
-
- return _file_descriptor;
-}
-void
-_evas_canvas3d_eet_file_init(void)
-{
-/* initialization of bonding between structure units in eet file */
- Eet_Data_Descriptor_Class eddc;
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Vec2_Eet);
- _vec2_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Vec3_Eet);
- _vec3_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Vertex_Eet);
- _vertex_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Geometry_Eet);
- _geometry_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Color_Eet);
- _color_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Frame_Eet);
- _frame_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Material_Eet);
- _material_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Mesh_Eet);
- _mesh_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_Header_Eet);
- _header_descriptor = eet_data_descriptor_file_new(&eddc);
- EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Evas_Canvas3D_File_Eet);
- _file_descriptor = eet_data_descriptor_file_new(&eddc);
-
-/* Vec_2 */
-#define ADD_BASIC(member, eet_type) EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_vec2_descriptor, Evas_Canvas3D_Vec3_Eet, # member, member, eet_type);
- ADD_BASIC(x, EET_T_FLOAT);
- ADD_BASIC(y, EET_T_FLOAT);
-#undef ADD_BASIC
-
-/* Vec_3 */
-#define ADD_BASIC(member, eet_type) EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_vec3_descriptor, Evas_Canvas3D_Vec3_Eet, # member, member, eet_type);
- ADD_BASIC(x, EET_T_FLOAT);
- ADD_BASIC(y, EET_T_FLOAT);
- ADD_BASIC(z, EET_T_FLOAT);
-#undef ADD_BASIC
-
-/* Vertex */
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_vertex_descriptor, Evas_Canvas3D_Vertex_Eet,
- "position", position, _vec3_descriptor);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_vertex_descriptor, Evas_Canvas3D_Vertex_Eet,
- "normal", normal, _vec3_descriptor);
- EET_DATA_DESCRIPTOR_ADD_SUB_NESTED(_vertex_descriptor, Evas_Canvas3D_Vertex_Eet,
- "texcoord", texcoord, _vec2_descriptor);
-
-/* Geometry */
- EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_geometry_descriptor, Evas_Canvas3D_Geometry_Eet,
- "vertices", vertices, _vertex_descriptor);
-#define ADD_BASIC(member, eet_type) \
- EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_geometry_descriptor, Evas_Canvas3D_Geometry_Eet, # member, member, eet_type);
- ADD_BASIC(vertices_count, EET_T_UINT);
- ADD_BASIC(id, EET_T_UINT);
-#undef ADD_BASIC
-
-/* Color */
-#define ADD_BASIC(member, eet_type) EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_color_descriptor, Evas_Canvas3D_Color_Eet, # member, member, eet_type);
- ADD_BASIC(r, EET_T_FLOAT);
- ADD_BASIC(g, EET_T_FLOAT);
- ADD_BASIC(b, EET_T_FLOAT);
- ADD_BASIC(a, EET_T_FLOAT);
-#undef ADD_BASIC
-
-/* Material */
- EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_material_descriptor, Evas_Canvas3D_Material_Eet,
- "colors", colors, _color_descriptor);
-#define ADD_BASIC(member, eet_type) \
- EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_material_descriptor, Evas_Canvas3D_Material_Eet, # member, member, eet_type);
- ADD_BASIC(id, EET_T_UINT);
- ADD_BASIC(colors_count, EET_T_UINT);
- ADD_BASIC(shininess, EET_T_FLOAT);
-#undef ADD_BASIC
-
-/* Frame */
-#define ADD_BASIC(member, eet_type) EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_frame_descriptor, Evas_Canvas3D_Frame_Eet, # member, member, eet_type);
- ADD_BASIC(id, EET_T_UINT);
- ADD_BASIC(geometry_id, EET_T_UINT);
- ADD_BASIC(material_id, EET_T_UINT);
-#undef ADD_BASIC
-
-/* Mesh */
- EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_mesh_descriptor, Evas_Canvas3D_Mesh_Eet,
- "frames", frames, _frame_descriptor);
- EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_mesh_descriptor, Evas_Canvas3D_Mesh_Eet,
- "geometries", geometries, _geometry_descriptor);
- EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_mesh_descriptor, Evas_Canvas3D_Mesh_Eet,
- "materials", materials, _material_descriptor);
-#define ADD_BASIC(member, eet_type) \
- EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_mesh_descriptor, Evas_Canvas3D_Mesh_Eet, # member, member, eet_type);
- ADD_BASIC(materials_count, EET_T_UINT);
- ADD_BASIC(frames_count, EET_T_UINT);
- ADD_BASIC(geometries_count, EET_T_UINT);
-#undef ADD_BASIC
-
-/* Header */
- EET_DATA_DESCRIPTOR_ADD_BASIC_VAR_ARRAY(_header_descriptor, Evas_Canvas3D_Header_Eet,
- "materials", materials, EET_T_UINT);
- EET_DATA_DESCRIPTOR_ADD_BASIC_VAR_ARRAY(_header_descriptor, Evas_Canvas3D_Header_Eet,
- "geometries", geometries, EET_T_UINT);
-#define ADD_BASIC(member, eet_type) \
- EET_DATA_DESCRIPTOR_ADD_BASIC \
- (_header_descriptor, Evas_Canvas3D_Header_Eet, # member, member, eet_type);
- ADD_BASIC(version, EET_T_UINT);
- ADD_BASIC(materials_count, EET_T_UINT);
- ADD_BASIC(frames, EET_T_UINT);
- ADD_BASIC(geometries_count, EET_T_UINT);
-#undef ADD_BASIC
-
-/* File */
- EET_DATA_DESCRIPTOR_ADD_SUB(_file_descriptor, Evas_Canvas3D_File_Eet,
- "mesh", mesh, _mesh_descriptor);
- EET_DATA_DESCRIPTOR_ADD_SUB(_file_descriptor, Evas_Canvas3D_File_Eet,
- "header", header, _header_descriptor);
-}
-
-void
-_evas_canvas3d_eet_descriptor_shutdown(void)
-{
- eet_data_descriptor_free(_geometry_descriptor);
- _geometry_descriptor = NULL;
- eet_data_descriptor_free(_vertex_descriptor);
- _vertex_descriptor = NULL;
- eet_data_descriptor_free(_vec2_descriptor);
- _vec2_descriptor = NULL;
- eet_data_descriptor_free(_vec3_descriptor);
- _vec3_descriptor = NULL;
- eet_data_descriptor_free(_color_descriptor);
- _color_descriptor = NULL;
- eet_data_descriptor_free(_material_descriptor);
- _material_descriptor = NULL;
- eet_data_descriptor_free(_frame_descriptor);
- _frame_descriptor = NULL;
- eet_data_descriptor_free(_mesh_descriptor);
- _mesh_descriptor = NULL;
- eet_data_descriptor_free(_header_descriptor);
- _header_descriptor = NULL;
- eet_data_descriptor_free(_file_descriptor);
- _file_descriptor = NULL;
-}
-
-void
-_evas_canvas3d_eet_file_free(Evas_Canvas3D_File_Eet* eet_file)
-{
- if (eet_file)
- {
- if (eet_file->mesh)
- {
- free(eet_file->mesh->geometries[0].vertices);
- free(eet_file->mesh->geometries);
- free(eet_file->mesh->frames);
- free(eet_file->mesh->materials[0].colors);
- free(eet_file->mesh->materials);
- free(eet_file->mesh);
- }
-
- if (eet_file->header)
- {
- free(eet_file->header->materials);
- free(eet_file->header->geometries);
- free(eet_file->header);
- }
-
- free(eet_file);
- }
-
- _evas_canvas3d_eet_descriptor_shutdown();
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_light.c b/src/lib/evas/canvas/evas_canvas3d_light.c
deleted file mode 100644
index 887f3abb6c..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_light.c
+++ /dev/null
@@ -1,309 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_LIGHT_CLASS
-
-static Eina_Bool
-_light_node_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Node *n = *(Evas_Canvas3D_Node **)key;
- evas_canvas3d_object_change(n, EVAS_CANVAS3D_STATE_NODE_LIGHT, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_evas_canvas3d_object_change_notify(Eo *obj, Evas_Canvas3D_Light_Data *pd, Evas_Canvas3D_State state EINA_UNUSED, Evas_Canvas3D_Object *ref EINA_UNUSED)
-{
- if (pd->nodes)
- eina_hash_foreach(pd->nodes, _light_node_change_notify, obj);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_evas_canvas3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd EINA_UNUSED)
-{
-
-}
-
-void
-evas_canvas3d_light_node_add(Evas_Canvas3D_Light *light, Evas_Canvas3D_Node *node)
-{
- int count = 0;
- Evas_Canvas3D_Light_Data *pd = efl_data_scope_get(light, MY_CLASS);
- if (pd->nodes == NULL)
- {
- pd->nodes = eina_hash_pointer_new(NULL);
-
- if (pd->nodes == NULL)
- {
- ERR("Failed to create hash table.");
- return;
- }
- }
- else
- count = (int)(uintptr_t)eina_hash_find(pd->nodes, &node);
-
- eina_hash_set(pd->nodes, &node, (const void *)(uintptr_t)(count + 1));
-}
-
-void
-evas_canvas3d_light_node_del(Evas_Canvas3D_Light *light, Evas_Canvas3D_Node *node)
-{
- int count = 0;
- Evas_Canvas3D_Light_Data *pd = efl_data_scope_get(light, MY_CLASS);
- if (pd->nodes == NULL)
- {
- ERR("No node to delete.");
- return;
- }
-
- count = (int)(uintptr_t)eina_hash_find(pd->nodes, &node);
-
- if (count == 1)
- eina_hash_del(pd->nodes, &node, NULL);
- else
- eina_hash_set(pd->nodes, &node, (const void *)(uintptr_t)(count - 1));
-}
-
-
-EAPI Evas_Canvas3D_Light *
-evas_canvas3d_light_add(Evas *e)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e);
-}
-
-EOLIAN static Eo *
-_evas_canvas3d_light_efl_object_constructor(Eo *obj, Evas_Canvas3D_Light_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_LIGHT);
- evas_color_set(&pd->ambient, 0.0, 0.0, 0.0, 1.0);
- evas_color_set(&pd->diffuse, 1.0, 1.0, 1.0, 1.0);
- evas_color_set(&pd->specular, 1.0, 1.0, 1.0, 1.0);
-
- pd->spot_exp = 0.0;
- pd->spot_cutoff = 180.0;
- pd->spot_cutoff_cos = -1.0;
-
- pd->atten_const = 1.0;
- pd->atten_linear = 0.0;
- pd->atten_quad = 0.0;
-
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_efl_object_destructor(Eo *obj, Evas_Canvas3D_Light_Data *pd)
-{
- Eina_Iterator *it = NULL;
- void *data = NULL;
- Evas_Canvas3D_Node_Data *node = NULL;
-
- if (pd->nodes)
- {
- it = eina_hash_iterator_key_new(pd->nodes);
- while (eina_iterator_next(it, &data))
- {
- node = efl_data_scope_get(data, EVAS_CANVAS3D_NODE_CLASS);
- node->data.light.light = NULL;
- }
-
- eina_hash_free(pd->nodes);
- }
-
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-
-EOLIAN static void
-_evas_canvas3d_light_directional_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Eina_Bool directional)
-{
- if (pd->directional != directional)
- {
- pd->directional = directional;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_ANY, NULL);
- }
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_light_directional_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd)
-{
- return pd->directional;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_ambient_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
-{
- pd->ambient.r = r;
- pd->ambient.g = g;
- pd->ambient.b = b;
- pd->ambient.a = a;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_AMBIENT, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_ambient_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a)
-{
- if (r) *r = pd->ambient.r;
- if (g) *g = pd->ambient.g;
- if (b) *b = pd->ambient.b;
- if (a) *a = pd->ambient.a;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_diffuse_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
-{
- pd->diffuse.r = r;
- pd->diffuse.g = g;
- pd->diffuse.b = b;
- pd->diffuse.a = a;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_DIFFUSE, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_diffuse_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a)
-{
- if (r) *r = pd->diffuse.r;
- if (g) *g = pd->diffuse.g;
- if (b) *b = pd->diffuse.b;
- if (a) *a = pd->diffuse.a;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_specular_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
-{
- pd->specular.r = r;
- pd->specular.g = g;
- pd->specular.b = b;
- pd->specular.a = a;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_SPECULAR, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_specular_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a)
-{
- if (r) *r = pd->specular.r;
- if (g) *g = pd->specular.g;
- if (b) *b = pd->specular.b;
- if (a) *a = pd->specular.a;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_spot_exponent_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Evas_Real exponent)
-{
- pd->spot_exp = exponent;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_SPOT_EXP, NULL);
-}
-
-EOLIAN static Evas_Real
-_evas_canvas3d_light_spot_exponent_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd)
-{
- return pd->spot_exp;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_spot_cutoff_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Evas_Real cutoff)
-{
- pd->spot_cutoff = cutoff;
- pd->spot_cutoff_cos = cos(cutoff * M_PI / 180.0);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_SPOT_CUTOFF, NULL);
-}
-
-EOLIAN static Evas_Real
-_evas_canvas3d_light_spot_cutoff_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd)
-{
- return pd->spot_cutoff;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_attenuation_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Evas_Real constant, Evas_Real linear, Evas_Real quadratic)
-{
- pd->atten_const = constant;
- pd->atten_linear = linear;
- pd->atten_quad = quadratic;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_ATTENUATION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_attenuation_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd, Evas_Real *constant, Evas_Real *linear, Evas_Real *quadratic)
-{
- if (constant) *constant = pd->atten_const;
- if (linear) *linear = pd->atten_linear;
- if (quadratic) *quadratic = pd->atten_quad;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_attenuation_enable_set(Eo *obj, Evas_Canvas3D_Light_Data *pd, Eina_Bool enable)
-{
- if (pd->enable_attenuation != enable)
- {
- pd->enable_attenuation = enable;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_ATTENUATION, NULL);
- }
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_light_attenuation_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Light_Data *pd)
-{
- return pd->enable_attenuation;
-}
-
-EOLIAN static void
-_evas_canvas3d_light_projection_matrix_set(Eo *obj, Evas_Canvas3D_Light_Data *pd,
- const Evas_Real *matrix)
-{
- eina_matrix4_array_set(&pd->projection, matrix);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_PROJECTION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_projection_matrix_get(const Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Light_Data *pd,
- Evas_Real *matrix)
-{
- memcpy(matrix, &pd->projection.xx, sizeof(Evas_Real) * 16);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_projection_perspective_set(Eo *obj, Evas_Canvas3D_Light_Data *pd,
- Evas_Real fovy, Evas_Real aspect,
- Evas_Real dnear, Evas_Real dfar)
-{
- Evas_Real xmax;
- Evas_Real ymax;
-
- ymax = dnear * (Evas_Real)tan((double)fovy * M_PI / 360.0);
- xmax = ymax * aspect;
-
- evas_mat4_frustum_set(&pd->projection, -xmax, xmax, -ymax, ymax, dnear, dfar);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_PROJECTION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_projection_frustum_set(Eo *obj, Evas_Canvas3D_Light_Data *pd,
- Evas_Real left, Evas_Real right,
- Evas_Real bottom, Evas_Real top,
- Evas_Real dnear, Evas_Real dfar)
-{
- evas_mat4_frustum_set(&pd->projection, left, right, bottom, top, dnear, dfar);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_PROJECTION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_light_projection_ortho_set(Eo *obj, Evas_Canvas3D_Light_Data *pd,
- Evas_Real left, Evas_Real right,
- Evas_Real bottom, Evas_Real top,
- Evas_Real dnear, Evas_Real dfar)
-{
- eina_matrix4_ortho_set(&pd->projection, left, right, bottom, top, dnear, dfar);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_LIGHT_PROJECTION, NULL);
-}
-
-
-#include "canvas/evas_canvas3d_light.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_light.eo b/src/lib/evas/canvas/evas_canvas3d_light.eo
deleted file mode 100644
index f15a088f17..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_light.eo
+++ /dev/null
@@ -1,249 +0,0 @@
-import evas_canvas3d_types;
-
-class @beta Evas.Canvas3D.Light extends Evas.Canvas3D.Object
-{
- [[Evas 3D canvas light class]]
-
- data: Evas_Canvas3D_Light_Data;
-
- methods {
- @property directional {
- [[The directional flag of the given light.
-
- Directional light is a type of light which is infinitely far away with no
- attenuation. The light direction is determined by the containing node's
- forward vector (negative Z-axis).
-
- By default, directional is not enabled.
-
- \@ref evas_canvas3d_node_look_at_set]]
- set {
- }
- get {
- }
- values {
- directional: bool; [[Whether the light is directional ($true), or not ($false).]]
- }
- }
-
- @property spot_exponent {
- [[The spot exponent of the given light.
-
- Higher spot exponent means intensity at the center of the cone is relatively
- stronger. Zero exponent means the light intensity is evenly distributed. The
- spot exponent has no effect when the light is not spot light (spot cutoff
- angle is less than 180 degree).
-
- Default spot exponent is 0.
-
- See also @.spot_cutoff.set]]
- set {
- }
- get {
- }
- values {
- exponent: Evas.Real; [[Spot exponent value.]]
- }
- }
-
- @property spot_cutoff {
- [[The spot cutoff angle of the given light.
-
- Only angle less than 180 degree will make it spot light, so that other spot
- light attribute will take effect.
-
- Default spot cutoff angle is 180.]]
- set {
- }
- get {
- }
- values {
- cutoff: Evas.Real; [[Cutoff angle in degree..]]
- }
- }
-
- @property attenuation_enable {
- [[The attenuation enable flag of the given light.
-
- By default, light attenuation is not enabled.
-
- See also @.attenuation_set]]
- set {
- }
- get {
- }
- values {
- enable: bool; [[Whether to enable attenuation ($true), or not ($false)..]]
- }
- }
-
- ambient_set {
- [[Set the ambient color of the given light.
-
- Default ambient color is (0.0, 0.0, 0.0, 1.0).]]
- params {
- @in r: Evas.Real; [[Red component of the ambient color between [0.0, 1.0].]]
- @in g: Evas.Real; [[Green component of the ambient color between [0.0, 1.0].]]
- @in b: Evas.Real; [[Blue component of the ambient color between [0.0, 1.0].]]
- @in a: Evas.Real; [[Alpha component of the ambient color between [0.0, 1.0].]]
- }
- }
- ambient_get @const {
- [[Get the ambient color of the given light.
-
- See also @.ambient_set]]
- params {
- @out r: Evas.Real; [[Red component of the ambient color between [0.0, 1.0].]]
- @out g: Evas.Real; [[Green component of the ambient color between [0.0, 1.0].]]
- @out b: Evas.Real; [[Blue component of the ambient color between [0.0, 1.0].]]
- @out a: Evas.Real; [[Alpha component of the ambient color between [0.0, 1.0].]]
- }
- }
-
- diffuse_set {
- [[Set the diffuse color of the given light.
-
- Default diffuse color is (1.0, 1.0, 1.0, 1.0).]]
- params {
- @in r: Evas.Real; [[Red component of the diffuse color between [0.0, 1.0].]]
- @in g: Evas.Real; [[Green component of the diffuse color between [0.0, 1.0].]]
- @in b: Evas.Real; [[Blue component of the diffuse color between [0.0, 1.0].]]
- @in a: Evas.Real; [[Alpha component of the diffuse color between [0.0, 1.0].]]
- }
- }
- diffuse_get @const {
- [[Get the diffuse color of the given light.
-
- See also @.diffuse_set]]
- params {
- @out r: Evas.Real; [[Red component of the diffuse color between [0.0, 1.0].]]
- @out g: Evas.Real; [[Green component of the diffuse color between [0.0, 1.0].]]
- @out b: Evas.Real; [[Blue component of the diffuse color between [0.0, 1.0].]]
- @out a: Evas.Real; [[Alpha component of the diffuse color between [0.0, 1.0].]]
- }
- }
-
- specular_set {
- [[Set the specular color of the given light.
-
- Default specular color is (1.0, 1.0, 1.0, 1.0).]]
- params {
- @in r: Evas.Real; [[Red component of the specular color between [0.0, 1.0].]]
- @in g: Evas.Real; [[Green component of the specular color between [0.0, 1.0].]]
- @in b: Evas.Real; [[Blue component of the specular color between [0.0, 1.0].]]
- @in a: Evas.Real; [[Alpha component of the specular color between [0.0, 1.0].]]
- }
- }
- specular_get @const {
- [[Get the specular color of the given light.
-
- See also @.specular_set]]
- params {
- @out r: Evas.Real; [[Red component of the specular color between [0.0, 1.0].]]
- @out g: Evas.Real; [[Green component of the specular color between [0.0, 1.0].]]
- @out b: Evas.Real; [[Blue component of the specular color between [0.0, 1.0].]]
- @out a: Evas.Real; [[Alpha component of the specular color between [0.0, 1.0].]]
- }
- }
-
- attenuation_set {
- [[Set the attenuation of the given light.
-
- Light attenuation has no effect with directional light. And the attenuation
- should be enabled first to take effect. The attenuation factor is calculated
- as follows.
-
- atten = 1.0 / constant + linear * distance + quadratic * distance * distance
-
- Default attenuation is constant = 1.0, linear = 0.0, quadratic = 0.0.
-
- See also @.attenuation_enable.set]]
- params {
- @in constant: Evas.Real; [[Constant attenuation term..]]
- @in linear: Evas.Real; [[Linear attenuation term..]]
- @in quadratic: Evas.Real; [[Quadratic attenuation term..]]
- }
- }
-
- attenuation_get @const {
- [[Get the attenuation of the given light.
-
- See also @.attenuation_set]]
- params {
- @out constant: Evas.Real; [[Constant attenuation term..]]
- @out linear: Evas.Real; [[Linear attenuation term..]]
- @out quadratic: Evas.Real; [[Quadratic attenuation term..]]
- }
- }
-
- projection_matrix_set {
- [[Set the projection matrix of the given light source.
-
- Default projection matrix is identity matrix.
-
- See also @.projection_perspective_set, @.projection_ortho_set and @.projection_frustum_set]]
- params {
- @in matrix: ptr(const(Evas.Real)); [[Projection Matrix. Pointer to the array of 16 Evas.Real values in column major order.]]
- }
- }
-
- projection_matrix_get @const {
- [[Get the projection matrix of the given light source.
-
- See also @.projection_matrix_set]]
- params {
- @out matrix: Evas.Real; [[Projection Matrix]]
- }
- }
-
- projection_perspective_set {
- [[Set the projection matrix of the given light source with perspective projection.
-
- See also @.projection_matrix_set]]
-
- params {
- fovy: Evas.Real; [[Field of view angle in Y direction.]]
- aspect: Evas.Real; [[Aspect ratio.]]
- dnear: Evas.Real; [[Distance to near clipping plane.]]
- dfar: Evas.Real; [[Distance to far clipping plane.]]
- }
- }
-
- projection_frustum_set {
- [[Set the projection matrix of the given light source with frustum projection.
-
- @Evas.Canvas3D.Light.projection_matrix_set]]
- params {
- left: Evas.Real; [[Left X coordinate of the near clipping plane.]]
- right: Evas.Real; [[Right X coordinate of the near clipping plane.]]
- bottom: Evas.Real; [[Bottom Y coordinate of the near clipping plane.]]
- top: Evas.Real; [[Top Y coordinate of the near clipping plane]]
- dnear: Evas.Real; [[Distance to near clipping plane.]]
- dfar: Evas.Real; [[Distance to far clipping plane.]]
- }
- }
- projection_ortho_set {
- [[Set the projection matrix of the given light source with orthogonal projection.
-
- See also @.projection_matrix_set]]
- params {
- left: Evas.Real; [[Left X coordinate of the near clipping plane.]]
- right: Evas.Real; [[Right X coordinate of the near clipping plane.]]
- bottom: Evas.Real; [[Bottom Y coordinate of the near clipping plane.]]
- top: Evas.Real; [[Top Y coordinate of the near clipping plane]]
- dnear: Evas.Real; [[Distance to near clipping plane.]]
- dfar: Evas.Real; [[Distance to far clipping plane.]]
- }
- }
- }
-
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- Evas.Canvas3D.Object.update_notify;
- Evas.Canvas3D.Object.change_notify;
- @empty Evas.Canvas3D.Object.callback_register;
- @empty Evas.Canvas3D.Object.callback_unregister;
- }
-
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_material.c b/src/lib/evas/canvas/evas_canvas3d_material.c
deleted file mode 100644
index 48f6ce1e5a..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_material.c
+++ /dev/null
@@ -1,206 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_MATERIAL_CLASS
-
-static Eina_Bool
-_material_mesh_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Mesh *m = *(Evas_Canvas3D_Mesh **)key;
- evas_canvas3d_object_change(m, EVAS_CANVAS3D_STATE_MESH_MATERIAL, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_material_evas_canvas3d_object_change_notify(Eo *obj, Evas_Canvas3D_Material_Data *pd, Evas_Canvas3D_State state EINA_UNUSED, Evas_Canvas3D_Object *ref EINA_UNUSED)
-{
- if (pd->meshes)
- eina_hash_foreach(pd->meshes, _material_mesh_change_notify, obj);
-}
-
-EOLIAN static void
-_evas_canvas3d_material_evas_canvas3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd)
-{
- int i;
- for (i = 0; i < EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT; i++)
- {
- if (pd->attribs[i].enable)
- {
- if (pd->attribs[i].texture)
- {
- evas_canvas3d_object_update(pd->attribs[i].texture);
- }
- }
- }
-}
-
-void
-evas_canvas3d_material_mesh_add(Evas_Canvas3D_Material *material, Evas_Canvas3D_Mesh *mesh)
-{
- int count = 0;
- Evas_Canvas3D_Material_Data *pd = efl_data_scope_get(material, MY_CLASS);
-
- if (pd->meshes == NULL)
- {
- pd->meshes = eina_hash_pointer_new(NULL);
-
- if (pd->meshes == NULL)
- {
- ERR("Failed to create hash table.");
- return;
- }
- }
- else
- count = (int)(uintptr_t)eina_hash_find(pd->meshes, &mesh);
-
- eina_hash_set(pd->meshes, &mesh, (const void *)(uintptr_t)(count + 1));
-}
-
-void
-evas_canvas3d_material_mesh_del(Evas_Canvas3D_Material *material, Evas_Canvas3D_Mesh *mesh)
-{
- int count = 0;
- Evas_Canvas3D_Material_Data *pd = efl_data_scope_get(material, MY_CLASS);
-
- if (pd->meshes == NULL)
- {
- ERR("No mesh to delete.");
- return;
- }
-
- count = (int)(uintptr_t)eina_hash_find(pd->meshes, &mesh);
-
- if (count == 1)
- eina_hash_del(pd->meshes, &mesh, NULL);
- else
- eina_hash_set(pd->meshes, &mesh, (const void *)(uintptr_t)(count - 1));
-}
-
-
-EAPI Evas_Canvas3D_Material *
-evas_canvas3d_material_add(Evas *e)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e);
-}
-
-EOLIAN static Eo *
-_evas_canvas3d_material_efl_object_constructor(Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_MATERIAL);
-
- evas_color_set(&pd->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color, 0.2, 0.2, 0.2, 1.0);
- evas_color_set(&pd->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color, 0.8, 0.8, 0.8, 1.0);
- evas_color_set(&pd->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color, 1.0, 1.0, 1.0, 1.0);
- evas_color_set(&pd->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].color, 0.0, 0.0, 0.0, 1.0);
- pd->shininess = 150.0;
-
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_material_efl_object_destructor(Eo *obj, Evas_Canvas3D_Material_Data *pd)
-{
- int i = 0;
- Eina_Iterator *it = NULL;
- void *data = NULL;
- Evas_Canvas3D_Mesh_Data *mesh = NULL;
- Eina_List *l = NULL;
- Evas_Canvas3D_Mesh_Frame *f = NULL;
-
- if (pd->meshes)
- {
- it = eina_hash_iterator_key_new(pd->meshes);
- while (eina_iterator_next(it, &data))
- {
- mesh = efl_data_scope_get(data, EVAS_CANVAS3D_MESH_CLASS);
- if (mesh->frames)
- {
- EINA_LIST_FOREACH(mesh->frames, l, f)
- f->material = NULL;
- }
- }
- eina_iterator_free(it);
- eina_hash_free(pd->meshes);
- }
-
- for (i = 0; i < EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT; i++)
- {
- if (pd->attribs[i].texture)
- {
- evas_canvas3d_texture_material_del(pd->attribs[i].texture, obj);
- }
- }
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-EOLIAN static void
-_evas_canvas3d_material_enable_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd, Evas_Canvas3D_Material_Attrib attrib, Eina_Bool enable)
-{
- pd->attribs[attrib].enable = enable;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_material_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd, Evas_Canvas3D_Material_Attrib attrib)
-{
- return pd->attribs[attrib].enable;
-}
-
-EOLIAN static void
-_evas_canvas3d_material_color_set(Eo *obj, Evas_Canvas3D_Material_Data *pd, Evas_Canvas3D_Material_Attrib attrib, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
-{
- evas_color_set(&pd->attribs[attrib].color, r, g, b, a);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MATERIAL_COLOR, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_material_color_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd, Evas_Canvas3D_Material_Attrib attrib, Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a)
-{
- if (r) *r = pd->attribs[attrib].color.r;
- if (g) *g = pd->attribs[attrib].color.g;
- if (b) *b = pd->attribs[attrib].color.b;
- if (a) *a = pd->attribs[attrib].color.a;
-}
-
-EOLIAN static void
-_evas_canvas3d_material_shininess_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd, Evas_Real shininess)
-{
- pd->shininess = shininess;
-}
-
-EOLIAN static Evas_Real
-_evas_canvas3d_material_shininess_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd)
-{
- return pd->shininess;
-}
-
-EOLIAN static void
-_evas_canvas3d_material_texture_set(Eo *obj, Evas_Canvas3D_Material_Data *pd, Evas_Canvas3D_Material_Attrib attrib, Evas_Canvas3D_Texture *texture)
-{
- if (pd->attribs[attrib].texture != texture)
- {
- if (pd->attribs[attrib].texture)
- {
- evas_canvas3d_texture_material_del(pd->attribs[attrib].texture, obj);
- efl_unref(pd->attribs[attrib].texture);
- }
-
- pd->attribs[attrib].texture = texture;
- evas_canvas3d_texture_material_add(texture, obj);
- efl_ref(texture);
- }
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MATERIAL_TEXTURE, NULL);
-}
-
-EOLIAN static Evas_Canvas3D_Texture *
-_evas_canvas3d_material_texture_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Material_Data *pd, Evas_Canvas3D_Material_Attrib attrib)
-{
- return pd->attribs[attrib].texture;
-}
-
-#include "canvas/evas_canvas3d_material.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_material.eo b/src/lib/evas/canvas/evas_canvas3d_material.eo
deleted file mode 100644
index 3576de1dcc..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_material.eo
+++ /dev/null
@@ -1,116 +0,0 @@
-class @beta Evas.Canvas3D.Material extends Evas.Canvas3D.Object
-{
- [[Evas 3D canvas material class]]
- data: Evas_Canvas3D_Material_Data;
- methods {
- color_set {
- [[Set the material attribute color of the given material.
-
- Material color is used also when texture map is enabled. The colors
- will be modulated (multiplied). To control the color contribution
- of a material attribute, use gray color. Setting color value for
- normal attribute has no effect.
-
- Default color is as follows.
-
- Ambient : (0.2, 0.2, 0.2, 1.0)
- Diffuse : (0.8, 0.8, 0.8, 1.0)
- Specular : (1.0, 1.0, 1.0, 1.0)
- Emission : (0.0, 0.0, 0.0, 1.0)
- Normal : Not used
- ]]
-
- params {
- @in attrib: Evas.Canvas3D.Material_Attrib; [[Material attribute ID.]]
- @in r: Evas.Real; [[Red component of the color.]]
- @in g: Evas.Real; [[Green component of the color.]]
- @in b: Evas.Real; [[Blue component of the color.]]
- @in a: Evas.Real; [[Alpha component of the color.]]
- }
- }
-
- color_get @const {
- [[Get the material attribute color of the given material.
-
- See also @.color_set.
- ]]
- params {
- @in attrib: Evas.Canvas3D.Material_Attrib; [[Material attribute ID.]]
- @out r: Evas.Real; [[Pointer to receive red component of the color.]]
- @out g: Evas.Real; [[Pointer to receive green component of the color.]]
- @out b: Evas.Real; [[Pointer to receive blue component of the color.]]
- @out a: Evas.Real; [[Pointer to receive alpha component of the color.]]
- }
- }
-
- @property enable {
- [[The material attribute enable flag of the given material.
-
- You might want to disable some material reflection contribution.
- For example, Emission attribute is rarely used. Disabling unused
- attributes might help the shading less complex so that can get
- speed up.
-
- By default, diffuse and specular is enabled.
- ]]
- set {
- }
- get {
- }
- keys {
- attrib: Evas.Canvas3D.Material_Attrib; [[Material attribute ID.]]
- }
- values {
- enable: bool; [[Whether to enable the attribute or not.]]
- }
- }
-
- @property shininess {
- [[The shininess of the given material.
-
- Shininess is only used when specular attribute is enabled. Higher shininess
- value will make the object more shiny.
-
- Default shininess value is 150.0.
-
- See also @.enable.set.
- ]]
- set {
- }
- get {
- }
- values {
- shininess: Evas.Real; [[Shininess value.]]
- }
- }
-
- @property texture {
- [[The texture of the given material.
-
- You have to enable the desired attribute first.
-
- See also @.enable.set.
- ]]
- set {
- }
- get {
- }
-
- keys {
- attrib: Evas.Canvas3D.Material_Attrib; [[Material attribute ID.]]
- }
- values {
- texture: Evas.Canvas3D.Texture; [[The texture set to the attribute.]]
- }
- }
- }
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- Evas.Canvas3D.Object.update_notify;
- Evas.Canvas3D.Object.change_notify;
- @empty Evas.Canvas3D.Object.callback_register;
- @empty Evas.Canvas3D.Object.callback_unregister;
- }
-
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_mesh.c b/src/lib/evas/canvas/evas_canvas3d_mesh.c
deleted file mode 100644
index 0bea10eb21..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_mesh.c
+++ /dev/null
@@ -1,1172 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_MESH_CLASS
-
-static Evas_Canvas3D_Mesh_Frame *
-evas_canvas3d_mesh_frame_new(Evas_Canvas3D_Mesh *mesh)
-{
- Evas_Canvas3D_Mesh_Frame *frame = NULL;
- frame = (Evas_Canvas3D_Mesh_Frame *)calloc(1, sizeof(Evas_Canvas3D_Mesh_Frame));
-
- if (frame == NULL)
- {
- ERR("Failed to allocate memory.");
- return NULL;
- }
-
- frame->mesh = mesh;
- evas_box3_empty_set(&frame->aabb);
-
- return frame;
-}
-
-static void
-evas_canvas3d_mesh_frame_free(Evas_Canvas3D_Mesh_Frame *frame)
-{
- int i;
-
- if (frame->material)
- evas_canvas3d_material_mesh_del(frame->material, frame->mesh);
-
- for (i = 0; i < EVAS_CANVAS3D_VERTEX_ATTRIB_COUNT; i++)
- {
- if (frame->vertices[i].owns_data)
- free(frame->vertices[i].data);
- }
-
- free(frame);
-}
-
-Evas_Canvas3D_Mesh_Frame *
-evas_canvas3d_mesh_frame_find(Evas_Canvas3D_Mesh_Data *pd, int frame)
-{
- Eina_List *l;
- Evas_Canvas3D_Mesh_Frame *f;
-
- EINA_LIST_FOREACH(pd->frames, l, f)
- {
- if (f->frame == frame)
- return f;
- }
-
- return NULL;
-}
-
-Eina_Bool
-evas_canvas3d_mesh_aabb_add_to_frame(Evas_Canvas3D_Mesh_Data *pd, int frame, int stride)
-{
- Evas_Canvas3D_Mesh_Frame *curframe = evas_canvas3d_mesh_frame_find(pd, frame);
- int i = 0, j = 0, step = 0, size = 0, max;
- float vxmin, vymin, vzmin, vxmax, vymax, vzmax;
- float *minmaxdata = NULL;
- Evas_Box3 box3;
-
- if (stride <= 0) return EINA_FALSE;
-
- if (!curframe)
- {
- ERR("Invalid frame %i.", frame);
- return EINA_FALSE;
- }
-
- step = curframe->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].element_count;
- size = curframe->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].size;
- minmaxdata = (float *)curframe->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].data;
-
- if (!minmaxdata)
- {
- ERR("Invalid vertex data.");
- return EINA_FALSE;
- }
-
- vxmax = vxmin = minmaxdata[0];
- vymax = vymin = minmaxdata[1];
- vzmax = vzmin = minmaxdata[2];
- j += step;
-
- max = size / stride;
- for (i = 1; i < max; ++i)
- {
- vxmin > minmaxdata[j] ? vxmin = minmaxdata[j] : 0;
- vxmax < minmaxdata[j] ? vxmax = minmaxdata[j] : 0;
- vymin > minmaxdata[j + 1] ? vymin = minmaxdata[j + 1] : 0;
- vymax < minmaxdata[j + 1] ? vymax = minmaxdata[j + 1] : 0;
- vzmin > minmaxdata[j + 2] ? vzmin = minmaxdata[j + 2] : 0;
- vzmax < minmaxdata[j + 2] ? vzmax = minmaxdata[j + 2] : 0;
- j += step;
- }
-
- evas_box3_empty_set(&box3);
- evas_box3_set(&box3, vxmin, vymin, vzmin, vxmax, vymax, vzmax);
- curframe->aabb = box3;
- return EINA_TRUE;
-}
-
-static inline void
-_mesh_init(Evas_Canvas3D_Mesh_Data *pd)
-{
- pd->vertex_count = 0;
- pd->frame_count = 0;
- pd->frames = NULL;
-
- pd->index_format = EVAS_CANVAS3D_INDEX_FORMAT_NONE;
- pd->index_count = 0;
- pd->indices = NULL;
- pd->owns_indices = EINA_FALSE;
- pd->assembly = EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES;
-
- pd->nodes = NULL;
- pd->blend_sfactor = EVAS_CANVAS3D_BLEND_FUNC_ONE;
- pd->blend_dfactor = EVAS_CANVAS3D_BLEND_FUNC_ZERO;
- pd->blending = EINA_FALSE;
-
- pd->alpha_comparison = EVAS_CANVAS3D_COMPARISON_ALWAYS;
- pd->alpha_ref_value = 0.0f;
- pd->alpha_test_enabled = EINA_FALSE;
-
- pd->color_pick_key.r = 0.0;
- pd->color_pick_key.g = 0.0;
- pd->color_pick_key.b = 0.0;
- pd->color_pick_enabled = EINA_FALSE;
-
- pd->shadows_edges_filtering_level = 4;
- pd->shadows_edges_size = 300.0;
- pd->shadows_constant_bias = 0.00015;
- pd->near_lod_boundary = 0.0;
- pd->far_lod_boundary = 0.0;
-}
-
-static inline void
-_mesh_fini(Evas_Canvas3D_Mesh_Data *pd)
-{
- Eina_List *l;
- Evas_Canvas3D_Mesh_Frame *f;
-
- if (pd->frames)
- {
- EINA_LIST_FOREACH(pd->frames, l, f)
- {
- evas_canvas3d_mesh_frame_free(f);
- }
-
- eina_list_free(pd->frames);
- }
-
- if (pd->indices && pd->owns_indices)
- {
- free(pd->indices);
- pd->indices = NULL;
- }
-
- if (pd->nodes)
- eina_hash_free(pd->nodes);
-}
-
-static Eina_Bool
-_mesh_node_geometry_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Node *n = *(Evas_Canvas3D_Node **)key;
- evas_canvas3d_object_change(n, EVAS_CANVAS3D_STATE_NODE_MESH_GEOMETRY, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_mesh_node_material_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Node *n = *(Evas_Canvas3D_Node **)key;
- evas_canvas3d_object_change(n, EVAS_CANVAS3D_STATE_NODE_MESH_MATERIAL, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-static void
-_evas_canvas3d_mesh_evas_canvas3d_object_change_notify(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_State state, Evas_Canvas3D_Object *ref EINA_UNUSED)
-{
- if (state == EVAS_CANVAS3D_STATE_MESH_MATERIAL)
- {
- if (pd->nodes)
- eina_hash_foreach(pd->nodes, _mesh_node_material_change_notify, obj);
- }
- else
- {
- if (pd->nodes)
- eina_hash_foreach(pd->nodes, _mesh_node_geometry_change_notify, obj);
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_evas_canvas3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- Eina_List *l;
- Evas_Canvas3D_Mesh_Frame *f;
-
- EINA_LIST_FOREACH(pd->frames, l, f)
- {
- if (f->material)
- {
- evas_canvas3d_object_update(f->material);
- }
- }
-}
-
-
-void
-evas_canvas3d_mesh_node_add(Evas_Canvas3D_Mesh *mesh, Evas_Canvas3D_Node *node)
-{
- int count = 0;
- Evas_Canvas3D_Mesh_Data *pd = efl_data_scope_get(mesh, MY_CLASS);
- if (pd->nodes == NULL)
- {
- pd->nodes = eina_hash_pointer_new(NULL);
-
- if (pd->nodes == NULL)
- {
- ERR("Failed to create hash table.");
- return;
- }
- }
- else
- count = (int)(uintptr_t)eina_hash_find(pd->nodes, &node);
-
- eina_hash_set(pd->nodes, &node, (const void *)(uintptr_t)(count + 1));
-}
-
-void
-evas_canvas3d_mesh_node_del(Evas_Canvas3D_Mesh *mesh, Evas_Canvas3D_Node *node)
-{
- int count = 0;
- Evas_Canvas3D_Mesh_Data *pd = efl_data_scope_get(mesh, MY_CLASS);
- if (pd->nodes == NULL)
- {
- ERR("No node to delete.");
- return;
- }
-
- count = (int)(uintptr_t)eina_hash_find(pd->nodes, &node);
-
- if (count == 1)
- eina_hash_del(pd->nodes, &node, NULL);
- else
- eina_hash_set(pd->nodes, &node, (const void *)(uintptr_t)(count - 1));
-}
-
-
-EAPI Evas_Canvas3D_Mesh *
-evas_canvas3d_mesh_add(Evas *e)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e);
-}
-
-EOLIAN static Eo *
-_evas_canvas3d_mesh_efl_object_constructor(Eo *obj, Evas_Canvas3D_Mesh_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_MESH);
- _mesh_init(pd);
-
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_efl_object_destructor(Eo *obj, Evas_Canvas3D_Mesh_Data *pd)
-{
- _mesh_fini(pd);
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_shader_mode_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Shader_Mode mode)
-{
- if (pd->shader_mode != mode)
- {
- pd->shader_mode = mode;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_SHADER_MODE, NULL);
- }
-}
-
-EOLIAN static Evas_Canvas3D_Shader_Mode
-_evas_canvas3d_mesh_shader_mode_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->shader_mode;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_vertex_count_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, unsigned int count)
-{
- pd->vertex_count = count;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_VERTEX_COUNT, NULL);
-}
-
-EOLIAN static unsigned int
-_evas_canvas3d_mesh_vertex_count_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->vertex_count;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_mesh_frame_exist(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, int frame)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f)
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_frame_add(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, int frame)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f != NULL)
- {
- ERR("Already existing frame.");
- return;
- }
-
- f = evas_canvas3d_mesh_frame_new(obj);
-
- if (f == NULL)
- return;
-
- f->frame = frame;
- pd->frames = eina_list_append(pd->frames, f);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_FRAME, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_frame_del(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, int frame)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return;
- }
-
- pd->frames = eina_list_remove(pd->frames, f);
- evas_canvas3d_mesh_frame_free(f);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_FRAME, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_frame_material_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, int frame, Evas_Canvas3D_Material *material)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return;
- }
-
- if (f->material == material)
- return;
-
- if (f->material)
- {
- evas_canvas3d_material_mesh_del(f->material, obj);
- efl_unref(f->material);
- }
-
- f->material = material;
- efl_ref(material);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_MATERIAL, NULL);
- evas_canvas3d_material_mesh_add(material, obj);
-}
-
-EOLIAN static Evas_Canvas3D_Material *
-_evas_canvas3d_mesh_frame_material_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, int frame)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return NULL;
- }
-
- return f->material;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_frame_vertex_data_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, int frame, Evas_Canvas3D_Vertex_Attrib attrib, int stride, const void *data)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
- int element_count;
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return;
- }
-
- if (stride < (int)sizeof(float))
- {
- ERR("Stride too small");
- return;
- }
-
- if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION)
- {
- int i = 0, j = 0, size = stride/sizeof(float);
- float vxmin, vymin, vzmin, vxmax, vymax, vzmax;
- float *minmaxdata = (float *)data;
- Evas_Box3 box3;
-
- element_count = 3;
-
- if (minmaxdata)
- {
- vxmax = vxmin = minmaxdata[0];
- vymax = vymin = minmaxdata[1];
- vzmax = vzmin = minmaxdata[2];
- j += size;
-
- for (i = 1; i < size; ++i)
- {
- vxmin > minmaxdata[j] ? vxmin = minmaxdata[j] : 0;
- vxmax < minmaxdata[j] ? vxmax = minmaxdata[j] : 0;
- vymin > minmaxdata[j + 1] ? vymin = minmaxdata[j + 1] : 0;
- vymax < minmaxdata[j + 1] ? vymax = minmaxdata[j + 1] : 0;
- vzmin > minmaxdata[j + 2] ? vzmin = minmaxdata[j + 2] : 0;
- vzmax < minmaxdata[j + 2] ? vzmax = minmaxdata[j + 2] : 0;
- j += size;
- }
-
- evas_box3_empty_set(&box3);
- evas_box3_set(&box3, vxmin, vymin, vzmin, vxmax, vymax, vzmax);
- f->aabb = box3;
- }
- else
- {
- ERR("Axis-Aligned Bounding Box wasn't added in frame %d ", frame);
- }
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL)
- {
- element_count = 3;
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT)
- {
- element_count = 3;
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR)
- {
- element_count = 4;
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD)
- {
- element_count = 2;
- }
- else
- {
- ERR("Invalid vertex attrib.");
- return;
- }
-
- if (f->vertices[attrib].owns_data && f->vertices[attrib].data)
- free(f->vertices[attrib].data);
-
- f->vertices[attrib].size = 0;
- f->vertices[attrib].stride = stride;
- f->vertices[attrib].data = (void *)data;
- f->vertices[attrib].owns_data = EINA_FALSE;
- f->vertices[attrib].element_count = element_count;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_VERTEX_DATA, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_frame_vertex_data_copy_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, int frame, Evas_Canvas3D_Vertex_Attrib attrib, int stride, const void *data)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
- Evas_Canvas3D_Vertex_Buffer *vb;
- int size, element_count;
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return;
- }
-
- if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION)
- {
- element_count = 3;
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL)
- {
- element_count = 3;
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT)
- {
- element_count = 3;
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR)
- {
- element_count = 4;
- }
- else if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD)
- {
- element_count = 2;
- }
- else
- {
- ERR("Invalid vertex attrib.");
- return;
- }
-
- vb = &f->vertices[attrib];
- size = element_count * sizeof(float) * pd->vertex_count;
-
- if (!vb->owns_data || vb->size < size)
- {
- if (vb->owns_data && vb->data)
- free(vb->data);
-
- vb->data = malloc(size);
-
- if (vb->data == NULL)
- {
- vb->element_count = 0;
- vb->size = 0;
- vb->stride = 0;
- vb->owns_data = EINA_FALSE;
-
- ERR("Failed to allocate memory.");
- return;
- }
-
- vb->size = size;
- vb->owns_data = EINA_TRUE;
- }
-
- vb->element_count = element_count;
- vb->stride = 0;
-
- if (data == NULL)
- return;
-
- if (stride == 0 || stride == (int)(element_count * sizeof(float)))
- {
- memcpy(vb->data, data, size);
- }
- else
- {
- int i;
- float *dst = (float *)vb->data;
- float *src = (float *)data;
-
- if (element_count == 2)
- {
- for (i = 0; i <pd->vertex_count; i++)
- {
- *dst++ = src[0];
- *dst++ = src[1];
-
- src = (float *)((char *)src + stride);
- }
- }
- else if (element_count == 3)
- {
- for (i = 0; i <pd->vertex_count; i++)
- {
- *dst++ = src[0];
- *dst++ = src[1];
- *dst++ = src[2];
-
- src = (float *)((char *)src + stride);
- }
- }
- else if (element_count == 4)
- {
- for (i = 0; i <pd->vertex_count; i++)
- {
- *dst++ = src[0];
- *dst++ = src[1];
- *dst++ = src[2];
- *dst++ = src[3];
-
- src = (float *)((char *)src + stride);
- }
- }
- }
-
- if (attrib == EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION &&
- !evas_canvas3d_mesh_aabb_add_to_frame(pd, frame, stride))
- {
- ERR("Axis-Aligned Bounding Box wasn't added in frame %d ", frame);
- }
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_VERTEX_DATA, NULL);
-}
-
-EOLIAN static void *
-_evas_canvas3d_mesh_frame_vertex_data_map(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, int frame, Evas_Canvas3D_Vertex_Attrib attrib)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return NULL;
- }
-
- if (f->vertices[attrib].mapped)
- {
- ERR("Try to map already mapped data.");
- return NULL;
- }
-
- f->vertices[attrib].mapped = EINA_TRUE;
- return f->vertices[attrib].data;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_frame_vertex_data_unmap(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, int frame, Evas_Canvas3D_Vertex_Attrib attrib)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return;
- }
-
- if (!f->vertices[attrib].mapped)
- {
- ERR("Try to unmap data which is not mapped yet.");
- return;
- }
-
- f->vertices[attrib].mapped = EINA_FALSE;
-}
-
-EOLIAN static int
-_evas_canvas3d_mesh_frame_vertex_stride_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, int frame, Evas_Canvas3D_Vertex_Attrib attrib)
-{
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return 0;
- }
-
- return f->vertices[attrib].stride;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_index_data_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Index_Format format, int count, const void *indices)
-{
- if (pd->owns_indices && pd->indices)
- free(pd->indices);
-
- pd->index_format = format;
- pd->index_count = count;
- pd->index_size = 0;
- pd->indices = (void *)indices;
- pd->owns_indices = EINA_FALSE;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_INDEX_DATA, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_index_data_copy_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Index_Format format, int count, const void *indices)
-{
- int size;
-
- if (format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_BYTE)
- {
- size = count * sizeof(unsigned char);
- }
- else if (format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- {
- size = count * sizeof(unsigned short);
- }
- else
- {
- ERR("Invalid index format.");
- return;
- }
-
- if (!pd->owns_indices || pd->index_size < size)
- {
- if (pd->owns_indices && pd->indices)
- free(pd->indices);
-
- pd->indices = malloc(size);
-
- if (pd->indices == NULL)
- {
- ERR("Failed to allocate memory.");
- return;
- }
-
- pd->index_size = size;
- pd->owns_indices = EINA_TRUE;
- }
-
- pd->index_format = format;
- pd->index_count = count;
-
- if (indices)
- memcpy(pd->indices, indices, size);
-}
-
-EOLIAN static Evas_Canvas3D_Index_Format
-_evas_canvas3d_mesh_index_format_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->index_format;
-}
-
-EOLIAN static int
-_evas_canvas3d_mesh_index_count_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->index_count;
-}
-
-EOLIAN static void *
-_evas_canvas3d_mesh_index_data_map(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- if (pd->index_mapped)
- {
- ERR("Try to map already mapped data.");
- return NULL;
- }
-
- pd->index_mapped = EINA_TRUE;
- return pd->indices;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_index_data_unmap(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- if (!pd->index_mapped)
- {
- ERR("Try to unmap data which is not mapped yet.");
- return;
- }
-
- pd->index_mapped = EINA_FALSE;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_vertex_assembly_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Vertex_Assembly assembly)
-{
- pd->assembly = assembly;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_VERTEX_ASSEMBLY, NULL);
-}
-
-EOLIAN static Evas_Canvas3D_Vertex_Assembly
-_evas_canvas3d_mesh_vertex_assembly_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->assembly;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_fog_color_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
-{
- evas_color_set(&pd->fog_color, r, g, b, a);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_FOG, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_fog_color_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a)
-{
- if (r) *r = pd->fog_color.r;
- if (g) *g = pd->fog_color.g;
- if (b) *b = pd->fog_color.b;
- if (a) *a = pd->fog_color.a;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_fog_enable_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Eina_Bool enabled)
-{
- pd->fog_enabled = enabled;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_FOG, NULL);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_mesh_fog_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->fog_enabled;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_blending_enable_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Eina_Bool blending)
-{
- pd->blending = blending;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_BLENDING, NULL);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_mesh_blending_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->blending;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_blending_func_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Blend_Func sfactor, Evas_Canvas3D_Blend_Func dfactor)
-{
- pd->blend_sfactor = sfactor;
- pd->blend_dfactor = dfactor;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_BLENDING, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_blending_func_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- Evas_Canvas3D_Blend_Func *sfactor, Evas_Canvas3D_Blend_Func *dfactor)
-{
- if (sfactor) *sfactor = pd->blend_sfactor;
- if (dfactor) *dfactor = pd->blend_dfactor;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_alpha_func_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Comparison comparison,
- Evas_Real ref_value)
-{
- if (pd->alpha_comparison == comparison &&
- (EINA_DBL_EQ(pd->alpha_ref_value, ref_value)))
- return;
- pd->alpha_comparison = comparison;
- pd->alpha_ref_value = ref_value;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_ALPHA_TEST, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_alpha_func_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- Evas_Canvas3D_Comparison *comparison,
- Evas_Real *ref_value)
-{
- if (comparison) *comparison = pd->alpha_comparison;
- if (ref_value) *ref_value = pd->alpha_ref_value;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_alpha_test_enable_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Eina_Bool enabled)
-{
- pd->alpha_test_enabled = enabled;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_ALPHA_TEST, NULL);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_mesh_alpha_test_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->alpha_test_enabled;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_efl_file_unload(Eo *obj, Evas_Canvas3D_Mesh_Data *pd)
-{
- efl_file_unload(efl_super(obj, MY_CLASS));
- _mesh_fini(pd);
-}
-
-EOLIAN static Eina_Error
-_evas_canvas3d_mesh_efl_file_load(Eo *obj, Evas_Canvas3D_Mesh_Data *pd)
-{
- const Eina_File *f;
- Eina_Error err;
-
- if (efl_file_loaded_get(obj)) return 0;
-
- err = efl_file_load(efl_super(obj, MY_CLASS));
- if (err) return err;
-
- _mesh_fini(pd);
- _mesh_init(pd);
-
- f = efl_file_mmap_get(obj);
- if (f == NULL) return EFL_GFX_IMAGE_LOAD_ERROR_DOES_NOT_EXIST;
-
- evas_common_load_model_from_eina_file(obj, f);
-
- return 0;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_mesh_efl_file_save_save(const Eo *obj, Evas_Canvas3D_Mesh_Data *pd,
- const char *file,
- const char *key EINA_UNUSED,
- const Efl_File_Save_Info *info EINA_UNUSED)
-{
- if ((file == NULL) || (obj == NULL) || (pd == NULL)) return EINA_FALSE;
-
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, 0);
-
- if (f == NULL)
- {
- ERR("Not existing mesh frame.");
- return EINA_FALSE;
- }
-
- evas_common_save_model_to_file(obj, file, f);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_from_primitive_set(Eo *obj,
- Evas_Canvas3D_Mesh_Data *pd EINA_UNUSED,
- int frame,
- Eo *primitive)
-{
- if ((primitive == NULL) || (obj == NULL)) return;
-
- Evas_Canvas3D_Primitive_Data *ppd = efl_data_scope_get(primitive, EVAS_CANVAS3D_PRIMITIVE_CLASS);
-
- evas_common_set_model_from_primitive(obj, frame, ppd);
-}
-
-void
-evas_canvas3d_mesh_interpolate_position_get(Eina_Vector3 *out, const Evas_Canvas3D_Vertex_Buffer *pos0, const Evas_Canvas3D_Vertex_Buffer *pos1,
- Evas_Real weight, int index)
-{
- if (pos1->data == NULL)
- {
- float *ptr;
-
- if (pos0->stride != 0)
- ptr = (float *)((char *)pos0->data + pos0->stride * index);
- else
- ptr = (float *)pos0->data + 3 * index;
-
- out->x = ptr[0];
- out->y = ptr[1];
- out->z = ptr[2];
- }
- else
- {
- float *ptr0, *ptr1;
-
- if (pos0->stride != 0)
- ptr0 = (float *)((char *)pos0->data + pos0->stride * index);
- else
- ptr0 = (float *)pos0->data + 3 * index;
-
- if (pos1->stride != 0)
- ptr1 = (float *)((char *)pos1->data + pos1->stride * index);
- else
- ptr1 = (float *)pos1->data + 3 * index;
-
- out->x = ptr0[0] * weight + ptr1[0] * (1.0 - weight);
- out->y = ptr0[1] * weight + ptr1[1] * (1.0 - weight);
- out->z = ptr0[2] * weight + ptr1[2] * (1.0 - weight);
- }
-}
-
-static inline void
-_mesh_frame_find(Evas_Canvas3D_Mesh *mesh, int frame,
- Eina_List **l, Eina_List **r)
-{
- Eina_List *left, *right;
- Evas_Canvas3D_Mesh_Frame *f0 = NULL, *f1;
- Evas_Canvas3D_Mesh_Data *pdmesh = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
-
- left = pdmesh->frames;
- right = eina_list_next(left);
-
- while (right)
- {
- f0 = (Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(left);
- f1 = (Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(right);
-
- if (frame >= f0->frame && frame <= f1->frame)
- break;
-
- left = right;
- right = eina_list_next(left);
- }
-
- if (right == NULL)
- {
- if (f0 && frame <= f0->frame)
- {
- *l = NULL;
- *r = left;
- }
- else
- {
- *l = left;
- *r = NULL;
- }
- return;
- }
-
- *l = left;
- *r = right;
-}
-
-void
-evas_canvas3d_mesh_interpolate_vertex_buffer_get(Evas_Canvas3D_Mesh *mesh, int frame,
- Evas_Canvas3D_Vertex_Attrib attrib,
- Evas_Canvas3D_Vertex_Buffer *buf0,
- Evas_Canvas3D_Vertex_Buffer *buf1,
- Evas_Real *weight)
-{
- Eina_List *l, *r;
- const Evas_Canvas3D_Mesh_Frame *f0 = NULL, *f1 = NULL;
- _mesh_frame_find(mesh, frame, &l, &r);
-
- while (l)
- {
- f0 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(l);
-
- if (f0->vertices[attrib].data != NULL)
- break;
-
- l = eina_list_prev(l);
- f0 = NULL;
- }
-
- while (r)
- {
- f1 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(r);
-
- if (f1->vertices[attrib].data != NULL)
- break;
-
- r = eina_list_next(r);
- f1 = NULL;
- }
-
- if (f0 == NULL && f1 == NULL)
- return;
-
- if (f0 == NULL)
- {
- f0 = f1;
- }
- else if (f1 != NULL)
- {
- if (frame == f0->frame)
- {
- f1 = NULL;
- }
- else if (frame == f1->frame)
- {
- f0 = f1;
- f1 = NULL;
- }
- }
-
- buf0->data = f0->vertices[attrib].data;
- buf0->stride = f0->vertices[attrib].stride;
- buf0->size = f0->vertices[attrib].size;
-
- if (f1)
- {
- buf1->data = f1->vertices[attrib].data;
- buf1->stride = f1->vertices[attrib].stride;
- buf1->size = f1->vertices[attrib].size;
-
- *weight = (f1->frame - frame) / (Evas_Real)(f1->frame - f0->frame);
- }
- else
- {
- buf1->data = NULL;
- buf1->stride = 0;
- buf1->size = 0;
-
- *weight = 1.0;
- }
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_mesh_color_pick_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->color_pick_enabled;
-}
-EOLIAN static void
-_evas_canvas3d_mesh_color_pick_enable_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, Eina_Bool enabled)
-{
- if (pd->color_pick_enabled != enabled)
- pd->color_pick_enabled = enabled;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_COLOR_PICK, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_shadows_edges_filtering_set(Eo *obj, Evas_Canvas3D_Mesh_Data *pd,
- int blur_level, Evas_Real edges_size)
-{
- if (blur_level > 0)
- pd->shadows_edges_filtering_level = blur_level;
- if (edges_size >= 0)
- pd->shadows_edges_size = edges_size;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_SHADOWS_EDGES_FILTERING, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_shadows_edges_filtering_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- int *blur_level, Evas_Real *edges_size)
-{
- if (blur_level) *blur_level = pd->shadows_edges_filtering_level;
- if (edges_size) *edges_size = pd->shadows_edges_size;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_shadows_constant_bias_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- Evas_Real bias)
-{
- if (!EINA_DBL_EQ(pd->shadows_constant_bias, bias))
- {
- pd->shadows_constant_bias = bias;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_MESH_SHADOWS_CONSTANT_BIAS, NULL);
- }
-}
-
-EOLIAN static Evas_Real
-_evas_canvas3d_mesh_shadows_constant_bias_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd)
-{
- return pd->shadows_constant_bias;
-}
-EOLIAN static void
-_evas_canvas3d_mesh_convex_hull_data_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- int frame, Eina_Inarray *vertex, Eina_Inarray *index)
-{
- int stride;
-
- Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame);
-
- if (!f)
- {
- ERR("Not existing mesh frame %d %s", __LINE__, __FILE__);
- return;
- }
-
- if (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].stride != 0)
- stride = f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].stride / sizeof(float);
- else
- stride = 3;
-
- float *data = (float *)f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].data;
-
- evas_convex_hull_get(data, pd->vertex_count, stride, vertex, index);
-
- return;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_lod_boundary_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- Evas_Real near_lod, Evas_Real far_lod)
-{
- pd->near_lod_boundary = near_lod;
- pd->far_lod_boundary = far_lod;
-}
-
-EOLIAN static void
-_evas_canvas3d_mesh_lod_boundary_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd,
- Evas_Real *near_lod, Evas_Real *far_lod)
-{
- *near_lod = pd->near_lod_boundary;
- *far_lod = pd->far_lod_boundary;
-}
-#include "canvas/evas_canvas3d_mesh.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_mesh.eo b/src/lib/evas/canvas/evas_canvas3d_mesh.eo
deleted file mode 100644
index 364390d18f..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_mesh.eo
+++ /dev/null
@@ -1,421 +0,0 @@
-import evas_canvas3d_types;
-
-struct @beta @extern Eina.Inarray; [[Eina inarray data structure]]
-
-class @beta Evas.Canvas3D.Mesh extends Evas.Canvas3D.Object implements Efl.File, Efl.File_Save
-{
- [[Evas 3D canvas mesh class]]
- data: Evas_Canvas3D_Mesh_Data;
-
- methods {
- frame_vertex_data_set {
- [[Set the vertex data of the key frame of the given mesh.
-
- This function make evas read from the given buffer whenever it
- requires. If you want to release the buffer after calling this
- function, use @.frame_vertex_data_copy_set instead.
-
- After setting the vertex data, further modifications should be
- protected by map/unmap pair.
-
- See also @.frame_vertex_data_map, @.frame_vertex_data_unmap.
- ]]
- params {
- @in frame: int; [[The number of the key frame.]]
- @in attrib: Evas.Canvas3D.Vertex_Attrib; [[Vertex attribute ID.]]
- @in stride: int; [[Stride to go to the next vertex (in bytes).]]
- @in data: const(void_ptr); [[Pointer to the vertex data buffer.]]
- }
- }
-
- frame_vertex_data_copy_set {
- [[Set the vertex data of the key frame of the given mesh by copying
- from a buffer. This function allocates internal vertex buffer and
- copy from the given buffer. So you can release the buffer. If you
- want to modify the vertex data use @.frame_vertex_data_map. After
- finishing the modifications, you should call @.frame_vertex_data_unmap.
-
- See also @.frame_vertex_data_set.
- ]]
- params {
- @in frame: int; [[The number of the key frame.]]
- @in attrib: Evas.Canvas3D.Vertex_Attrib; [[Vertex attribute ID.]]
- @in stride: int; [[Stride to go to the next vertex (in bytes).]]
- @in data: const(void_ptr); [[Pointer to the vertex data buffer.]]
- }
- }
-
- frame_vertex_data_map {
- [[Map the vertex buffer of the key frame of the given mesh.
-
- After manipulating the mapped buffer, @.frame_vertex_data_unmap
- should be called to properly download the data to the engine. If
- the data was set using @.frame_vertex_data_set, pointer to the
- original buffer will be returned. Otherwise, the returned pointer
- can differ every time calling this function.
- ]]
- return: void_ptr; [[Starting address of the mapped vertex buffer.]]
- params {
- @in frame: int; [[The number of the key frame.]]
- @in attrib: Evas.Canvas3D.Vertex_Attrib; [[Vertex attribute ID.]]
- }
- }
-
- frame_vertex_data_unmap {
- [[Unmap the vertex buffer of the key frame of the given mesh.
-
- See also @.frame_vertex_data_map.
- ]]
- params {
- @in frame: int; [[The number of the key frame.]]
- @in attrib: Evas.Canvas3D.Vertex_Attrib; [[Vertex attribute ID.]]
- }
- }
-
- frame_vertex_stride_get @const {
- [[Get the vertex buffer stride of the key frame of the given mesh.
-
- This function returns valid stride only when the vertex buffer
- is mapped. If the data was set with @.frame_vertex_data_set, the
- original stride will be returned unchanged.
- ]]
- return: int; [[Stride to go to the next vertex (in bytes).]]
- params {
- @in frame: int; [[The number of the key frame.]]
- @in attrib: Evas.Canvas3D.Vertex_Attrib; [[Vertex attribute ID.]]
- }
- }
-
- index_data_set {
- [[Set the vertex index data of the given mesh.
-
- When the index data is set, Evas 3D assembles vertices using the
- index data. If you want to free the data buffer, use
- @.index_data_copy_set. Further modifications should be made
- within map/unmap pair.
- ]]
- params {
- @in format: Evas.Canvas3D.Index_Format; [[Vertex index data format.]]
- @in count: int; [[Vertex index count.]]
- @in indices: const(void_ptr); [[Pointer to the index data.]]
- }
- }
-
- convex_hull_data_get {
- [[Get the vertex and index data of convex hull around the given mesh.
- ]]
- params {
- @in frame: int; [[ The number of the key frame.]]
- @in vertex: ptr(Eina.Inarray); [[Vertex data pointer]]
- @in index: ptr(Eina.Inarray); [[Index data pointer]]
- }
- }
-
- index_data_copy_set {
- [[Set the vertex index data of the given mesh by copying from a
- buffer.
-
- This function allocates internal index buffer any copy data from
- the given buffer. Further modifications can be made within
- map/unmap pair.
-
- See also @.index_data_set.
- ]]
- params {
- @in format: Evas.Canvas3D.Index_Format; [[Vertex index data format.]]
- @in count: int; [[Vertex index count.]]
- @in indices: const(void_ptr); [[Pointer to the index data.]]
- }
- }
-
- index_format_get @const {
- [[Get the format of the index data of the given mesh.
-
- Returns valid format only when the index buffer is mapped. First
- map the index buffer and then query the properties of the mapped
- buffer. If the index data was set by @.index_data_set, the
- original format will be returned. Otherwise the format can differ
- every time you call the @.index_data_map function.
- ]]
- return: Evas.Canvas3D.Index_Format; [[Format of the index data.]]
- }
-
- index_count_get @const {
- [[Get the count of the index data of the given mesh.
-
- This function returns the index count of the last called data_set
- function.
- ]]
- return: int; [[Index data count.]]
- }
-
- index_data_map {
- [[Map the index buffer of the given mesh.
-
- @.index_data_unmap should be called after modifications. If the
- data was set using @.index_data_set, the original pointer will
- be returned, otherwise, the returned pointer may differ every
- time you call this function.
- ]]
- return: void_ptr; [[Pointer to the mapped buffer.]]
- }
-
- index_data_unmap {
- [[Unmap the index buffer of the given mesh.
-
- See also @.index_data_map.
- ]]
- }
-
- frame_exist {
- [[Returns $true if frame was added and $false in other case.]]
- params {
- @in frame: int; [[Frame number.]]
- }
- return: bool; [[$true ifr frame was added, $false otherwise]]
- }
-
- frame_add {
- [[Add a key frame to the given mesh.
-
- If specified frame is already exist, error message will be generated.
- ]]
- params {
- @in frame: int; [[The number of the key frame to be added.]]
- }
- }
-
- frame_del {
- [[Delete a key frame from the given mesh.]]
- params {
- @in frame: int; [[The number of the key frame to be added.]]
- }
- }
-
- fog_color_set {
- [[Set the fog color and density for the given mesh.]]
- params {
- @in r: Evas.Real; [[The red component of the fog color.]]
- @in g: Evas.Real; [[The green component of the fog color.]]
- @in b: Evas.Real; [[The blue component of the fog color.]]
- @in a: Evas.Real; [[The transparency of fog.]]
- }
- }
- fog_color_get {
- [[Set the fog color and density for the given mesh.]]
- params {
- @out r: Evas.Real; [[Pointer to receive red component of the fog color.]]
- @out g: Evas.Real; [[Pointer to receive green component of the fog color.]]
- @out b: Evas.Real; [[Pointer to receive blue component of the fog color.]]
- @out a: Evas.Real; [[Pointer to receive transparency of fog.]]
- }
- }
- blending_func_set {
- [[Set the blending function for given mesh.]]
- params {
- @in sfactor: Evas.Canvas3D.Blend_Func; [[Specifies how the red, green, blue,
- and alpha source blending factors
- are computed.
- ]]
- @in dfactor: Evas.Canvas3D.Blend_Func; [[Specifies how the red, green, blue,
- and alpha destination blending
- factors are computed.
- ]]
- }
- }
- blending_func_get {
- [[Get blending function for given mesh.]]
- params {
- @out sfactor: Evas.Canvas3D.Blend_Func; [[Pointer to receive source blending factors key.]]
- @out dfactor: Evas.Canvas3D.Blend_Func; [[Pointer to receive destination blending factors key.]]
- }
- }
- from_primitive_set {
- [[Set the data of given mesh frame from the given primitive.]]
- params {
- @in frame: int; [[Specifies data of which frame of given mesh will be set.]]
- @in primitive: Evas.Canvas3D.Primitive; [[Specifies which data will be set.]]
- }
- }
- @property shader_mode {
- [[Set the shader mode of the given mesh.
-
- Default shader mode is EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR.
- ]]
- set {
- }
- get {
- }
- values {
- mode: Evas.Canvas3D.Shader_Mode; [[The shader mode.]]
- }
- }
- @property color_pick_enable {
- [[Set possibility color picking.]]
- set {
- }
- get {
- }
- values {
- enabled: bool; [[Possibility flag.]]
- }
- }
- @property vertex_count {
- [[The vertex count of the given mesh.
-
- Each key frame should have same vertex count to be properly
- interpolated. Key frames have their own vertex data and the
- data should have more vertices than the mesh's vertex count.
-
- Default vertex count is 0.
- ]]
- set {
- }
- get {
- }
- values {
- count: uint; [[Vertex count.]]
- }
- }
- @property fog_enable {
- [[Enable or disable fog effect for given mesh.
-
- Default fog is disabled.
- ]]
- set {
- }
- get {
- }
- values {
- enabled: bool; [[Fog enabled status.]]
- }
- }
-
- @property alpha_test_enable {
- [[The enable status of alpha test for given mesh.
-
- Default alpha test disabled.
- ]]
- set {
- }
- get {
- [[Get the enable status of alpha test for given mesh.]]
- }
- values {
- enabled: bool; [[The alpha test status.]]
- }
- }
-
- @property alpha_func {
- [[The alpha function.
-
- The alpha test discards fragments depending on the outcome of
- a comparison between an incoming fragment's alpha value and a
- constant reference value. This function specifies the reference
- value and the comparison function.
- ]]
- set {
- }
- get {
- }
- values {
- comparison_func: Evas.Canvas3D.Comparison; [[The alpha comparison function.]]
- ref_value: Evas.Real; [[The reference value that incoming alpha values are compared to.]]
- }
- }
-
- @property blending_enable {
- [[Enable or disable blending for given mesh.]]
- set {
- }
- get {
- }
- values {
- blending: bool; [[The blending state.]]
- }
- }
-
- @property frame_material {
- [[The material of the key frame of the given mesh.
-
- Setting different materials for each key frame is useful for
- doing animations like GIF images or color changing animations.
- ]]
- set {
- }
- get {
- }
- keys {
- frame: int; [[The number of the key frame.]]
- }
- values {
- material: Evas.Canvas3D.Material; [[The material to be set to the key frame.]]
- }
- }
-
- @property vertex_assembly {
- [[The vertex assembly of the given mesh.
-
- Vertex assembly defines how the engine organizes vertices into
- geometric primitives.
-
- Default vertex assembly is EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES.
- ]]
- set {
- }
- get {
- }
- values {
- assembly: Evas.Canvas3D.Vertex_Assembly; [[The vertex assembly.]]
- }
- }
- @property shadows_edges_filtering {
- [[The shadow edges blur parameters.
-
- The averaging values in window is used for blurring.
- User can set the size of window and num of points in window.
- ]]
- set {
- }
- get {
- }
- values {
- blur_level: int; [[Number of points within a bluring radius.]]
- edges_size: Evas.Real; [[The bluring radius.]]
- }
- }
- @property shadows_constant_bias {
- [[The offset shadow toward object.]]
- set {
- }
- get {
- }
- values {
- bias: Evas.Real; [[Offset.]]
- }
- }
- @property lod_boundary {
- [[The LOD boundary distances.]]
- set {
- }
- get {
- }
- values {
- near_lod: Evas.Real; [[Up boundary]]
- far_lod: Evas.Real; [[Down boundary]]
- }
- }
- }
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- Evas.Canvas3D.Object.update_notify;
- Evas.Canvas3D.Object.change_notify;
- Efl.File.load;
- Efl.File.unload;
- Efl.File_Save.save;
- @empty Evas.Canvas3D.Object.callback_register;
- @empty Evas.Canvas3D.Object.callback_unregister;
- }
-
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_node.c b/src/lib/evas/canvas/evas_canvas3d_node.c
deleted file mode 100644
index 98492fa502..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_node.c
+++ /dev/null
@@ -1,1695 +0,0 @@
-#include "eo_internal.h"
-#include "evas_common_private.h"
-#include "evas_private.h"
-#include "evas_canvas3d_node_callback.h"
-
-#define MY_CLASS EVAS_CANVAS3D_NODE_CLASS
-#define MY_CLASS_NAME "Evas_Canvas3D_Node"
-
-Evas_Canvas3D_Mesh_Frame *evas_canvas3d_mesh_frame_find(Evas_Canvas3D_Mesh_Data *pd, int frame);
-
-static void
-_look_at_set(Evas_Canvas3D_Node_Data *pd, Eina_Vector3 *target, Eina_Vector3 *up);
-
-static Eina_Stringshare *
-_generate_unic_color_key(Evas_Color *color, Evas_Color *bg_color, Evas_Canvas3D_Node *node, Evas_Canvas3D_Mesh *mesh,
- Eina_Bool init)
-{
- static unsigned char red = 0;
- static unsigned char green = 0;
- static unsigned char blue = 0;
- if (init) red = green = blue = 0;
-
-#define GET_NEXT_COLOR \
- red++; \
- if (red == 255) \
- { \
- red = 0; \
- green++; \
- if (green == 255) \
- { \
- green = 0; \
- blue++; \
- } \
- }
-
- GET_NEXT_COLOR
- /*Get another color if color equal with background color*/
- if ((EINA_DBL_EQ(bg_color->r, (double)red)) &&
- (EINA_DBL_EQ(bg_color->g, (double)green)) &&
- (EINA_DBL_EQ(bg_color->b, (double)blue)))
- {
- GET_NEXT_COLOR
- }
-
- color->r = (double)red / 255;
- color->g = (double)green / 255;
- color->b = (double)blue / 255;
-
-#undef GET_NEXT_COLOR
-
- return eina_stringshare_printf("%p %p", node, mesh);
-}
-
-static void
-_evas_canvas3d_node_private_callback_collision(void *data, const Efl_Event *event)
-{
- Eina_List *collision_list = NULL, *l = NULL;
- Evas_Canvas3D_Node *target_node = NULL, *n = NULL;
- Evas_Canvas3D_Node_Data *pd_target = NULL, *pd = NULL;
- const Efl_Event_Description *eo_desc = NULL;
- Eina_Bool ret = EINA_FALSE;
-
- target_node = (Evas_Canvas3D_Node *)event->info;
- pd_target = efl_data_scope_get(target_node, EVAS_CANVAS3D_NODE_CLASS);
- collision_list = (Eina_List *)data;
- eo_desc = efl_object_legacy_only_event_description_get("collision");
-
- if (collision_list)
- {
- EINA_LIST_FOREACH(collision_list, l, n)
- {
- pd = efl_data_scope_get(n, EVAS_CANVAS3D_NODE_CLASS);
- if (box_intersection_box(&pd_target->aabb, &pd->aabb))
- ret = efl_event_callback_legacy_call(target_node, eo_desc, n);
- }
- if (!ret)
- {
- /* XXX: Putting it like this because that's how the logic was,
- * but it seems absolutely wrong that it only checks the last
- * and decides based on that. */
- efl_event_callback_stop(event->object);
- }
- }
-}
-static void
-_evas_canvas3d_node_private_callback_clicked(void *data EINA_UNUSED, const Efl_Event *event)
-{
- Eina_Bool ret = EINA_FALSE;
- const Efl_Event_Description *eo_desc = efl_object_legacy_only_event_description_get("clicked");
- ret = efl_event_callback_legacy_call((Eo *)event->info, eo_desc, event->info);
-
- if (!ret)
- efl_event_callback_stop(event->object);
-}
-
-static inline Evas_Canvas3D_Node_Mesh *
-_node_mesh_new(Evas_Canvas3D_Node *node, Evas_Canvas3D_Mesh *mesh)
-{
- Evas_Canvas3D_Node_Mesh *nm = (Evas_Canvas3D_Node_Mesh *)malloc(sizeof(Evas_Canvas3D_Node_Mesh));
-
- if (nm == NULL)
- {
- ERR("Failed to allocate memory.");
- return NULL;
- }
-
- nm->node = node;
- nm->mesh = mesh;
- nm->frame = 0;
-
- return nm;
-}
-
-static inline void
-_node_mesh_free(Evas_Canvas3D_Node_Mesh *nm)
-{
- free(nm);
-}
-
-static void
-_node_mesh_free_func(void *data)
-{
- _node_mesh_free((Evas_Canvas3D_Node_Mesh *)data);
-}
-
-static Eina_Bool
-_node_scene_root_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Scene *s = *(Evas_Canvas3D_Scene **)key;
- evas_canvas3d_object_change(s, EVAS_CANVAS3D_STATE_SCENE_ROOT_NODE, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_node_scene_camera_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Scene *s = *(Evas_Canvas3D_Scene **)key;
- evas_canvas3d_object_change(s, EVAS_CANVAS3D_STATE_SCENE_CAMERA_NODE, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_evas_canvas3d_object_change_notify(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_State state EINA_UNUSED , Evas_Canvas3D_Object *ref EINA_UNUSED)
-{
- Eina_List *l;
- Evas_Canvas3D_Node *n;
- Eina_Bool orientation;
- Eina_Bool position;
- Eina_Bool scale;
- Eina_Bool parent_change;
-
- /* Notify all scenes using this node that it has changed. */
- if (pd->scenes_root)
- eina_hash_foreach(pd->scenes_root, _node_scene_root_change_notify, obj);
-
- if (pd->scenes_camera)
- eina_hash_foreach(pd->scenes_camera, _node_scene_camera_change_notify, obj);
-
- parent_change = (state == EVAS_CANVAS3D_STATE_NODE_PARENT_ORIENTATION)
- || (state == EVAS_CANVAS3D_STATE_NODE_PARENT_POSITION)
- || (state == EVAS_CANVAS3D_STATE_NODE_PARENT_SCALE);
-
- /* Notify parent that a member has changed. */
- if (pd->parent && !parent_change)
- {
- evas_canvas3d_object_change(pd->parent, EVAS_CANVAS3D_STATE_NODE_MEMBER, obj);
- }
-
- orientation = (state == EVAS_CANVAS3D_STATE_NODE_TRANSFORM_ORIENTATION)
- || (state == EVAS_CANVAS3D_STATE_NODE_PARENT_ORIENTATION);
- position = (state == EVAS_CANVAS3D_STATE_NODE_TRANSFORM_POSITION)
- || (state == EVAS_CANVAS3D_STATE_NODE_PARENT_POSITION);
- scale = (state == EVAS_CANVAS3D_STATE_NODE_TRANSFORM_SCALE)
- || (state == EVAS_CANVAS3D_STATE_NODE_PARENT_SCALE);
-
- /* Notify members that the parent has changed. */
- if (scale)
- EINA_LIST_FOREACH(pd->members, l, n)
- {
- evas_canvas3d_object_change(n, EVAS_CANVAS3D_STATE_NODE_PARENT_SCALE, obj);
- }
- if (orientation && !(pd->billboard_target))
- EINA_LIST_FOREACH(pd->members, l, n)
- {
- /*Skip change orientation if node is billboard*/
- Evas_Canvas3D_Node_Data *pdm = efl_data_scope_get(n, EVAS_CANVAS3D_NODE_CLASS);
- if (pdm->billboard_target)
- continue;
- evas_canvas3d_object_change(n, EVAS_CANVAS3D_STATE_NODE_PARENT_ORIENTATION, obj);
- }
- if (position)
- EINA_LIST_FOREACH(pd->members, l, n)
- {
- evas_canvas3d_object_change(n, EVAS_CANVAS3D_STATE_NODE_PARENT_POSITION, obj);
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_node_evas_canvas3d_object_callback_register(Eo *obj, Evas_Canvas3D_Node_Data *pd EINA_UNUSED,
- const char *event, const void *data)
-{
- Evas_Canvas3D_Node_Private_Callback_Type tcb;
-
- GET_CALLBACK_TYPE(tcb, event)
-
- if (tcb != PRIVATE_CALLBACK_NONE)
- efl_event_callback_add(obj, &evas_canvas3d_node_private_event_desc[tcb], evas_canvas3d_node_private_callback_functions[tcb], data);
-
-}
-
-EOLIAN static void
-_evas_canvas3d_node_evas_canvas3d_object_callback_unregister(Eo *obj, Evas_Canvas3D_Node_Data *pd EINA_UNUSED,
- const char *event)
-{
- Evas_Canvas3D_Node_Private_Callback_Type tcb;
-
- GET_CALLBACK_TYPE(tcb, event)
-
- if (tcb != PRIVATE_CALLBACK_NONE)
- efl_event_callback_del(obj, &evas_canvas3d_node_private_event_desc[tcb], evas_canvas3d_node_private_callback_functions[tcb], NULL);
-}
-
-static Eina_Bool
-_node_transform_update(Evas_Canvas3D_Node *node, void *data EINA_UNUSED)
-{
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- Eina_Bool transform_dirty = EINA_FALSE, parent_dirty = EINA_FALSE;
-
- transform_dirty = evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_ORIENTATION);
- transform_dirty|= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_POSITION);
- transform_dirty|= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_SCALE);
- parent_dirty = evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_PARENT_ORIENTATION);
- parent_dirty |= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_PARENT_POSITION);
- parent_dirty |= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_PARENT_SCALE);
-
- if (transform_dirty || parent_dirty)
- {
- if (pd->parent)
- {
- Evas_Canvas3D_Node_Data *pdparent = efl_data_scope_get(pd->parent, MY_CLASS);
- const Eina_Vector3 *scale_parent = &pdparent->scale_world;
- const Eina_Quaternion *orientation_parent = &pdparent->orientation_world;
-
- /* Orienatation */
- if (pd->orientation_inherit)
- {
- eina_quaternion_mul(&pd->orientation_world,
- orientation_parent, &pd->orientation);
- }
- else
- {
- pd->orientation_world = pd->orientation;
- }
-
- /* Scale */
- if (pd->scale_inherit)
- eina_vector3_multiply(&pd->scale_world, scale_parent, &pd->scale);
- else
- pd->scale_world = pd->scale;
-
- /* Position */
- if (pd->position_inherit)
- {
- eina_vector3_multiply(&pd->position_world, &pd->position, scale_parent);
- eina_vector3_quaternion_rotate(&pd->position_world, &pd->position_world,
- orientation_parent);
- eina_vector3_add(&pd->position_world, &pd->position_world,
- &pdparent->position_world);
- }
- else
- {
- pd->position_world = pd->position;
- }
- }
- else
- {
- pd->position_world = pd->position;
- pd->orientation_world = pd->orientation;
- pd->scale_world = pd->scale;
- }
-
- if (pd->type == EVAS_CANVAS3D_NODE_TYPE_CAMERA)
- {
- evas_mat4_inverse_build(&pd->data.camera.matrix_world_to_eye,
- &pd->position_world, &pd->orientation_world,
- &pd->scale_world);
- }
- else if (pd->type == EVAS_CANVAS3D_NODE_TYPE_LIGHT)
- {
- }
- else if (pd->type == EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- evas_mat4_build(&pd->data.mesh.matrix_local_to_world,
- &pd->position_world, &pd->orientation_world, &pd->scale_world);
- }
-/*
- if (pd->parent)
- {
- evas_mat4_nocheck_multiply(&pd->matrix_local_to_world,
- &pd->parent->matrix_local_to_world,
- &pd->matrix_local_to_parent);
- }
- else
- {
- evas_mat4_copy(&pd->matrix_local_to_world, &pd->matrix_local_to_parent);
- }*/
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_node_billboard_update(Evas_Canvas3D_Node *node, void *data EINA_UNUSED)
-{
- Eina_Vector3 target;
- Eina_Vector3 up;
- Evas_Canvas3D_Node_Data *pd_node = efl_data_scope_get(node, MY_CLASS);
- if (pd_node->billboard_target)
- {
- Evas_Canvas3D_Node_Data *pd_target = efl_data_scope_get(pd_node->billboard_target,
- MY_CLASS);
- eina_vector3_set(&target, pd_target->position.x, pd_target->position.y,
- pd_target->position.z);
- eina_vector3_set(&up, 0, 1, 0);
-
- _look_at_set(pd_node, &target, &up);
-
- if (pd_node->type == EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- evas_mat4_build(&pd_node->data.mesh.matrix_local_to_world,
- &pd_node->position, &pd_node->orientation,
- &pd_node->scale);
- }
- else if (pd_node->type == EVAS_CANVAS3D_NODE_TYPE_LIGHT)
- {
- evas_mat4_build(&pd_node->data.light.matrix_local_to_world,
- &pd_node->position, &pd_node->orientation,
- &pd_node->scale);
- }
- else if (pd_node->type == EVAS_CANVAS3D_NODE_TYPE_CAMERA)
- {
- evas_mat4_inverse_build(&pd_node->data.light.matrix_local_to_world,
- &pd_node->position, &pd_node->orientation,
- &pd_node->scale);
- }
- else
- ERR("Not supported type of node: line %d in file %s", __LINE__ , __FILE__);
- }
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_node_item_update(Evas_Canvas3D_Node *node, void *data EINA_UNUSED)
-{
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, EVAS_CANVAS3D_NODE_CLASS);
- if (pd->type == EVAS_CANVAS3D_NODE_TYPE_CAMERA)
- {
- if (pd->data.camera.camera)
- {
- evas_canvas3d_object_update(pd->data.camera.camera);
- }
- }
- else if (pd->type == EVAS_CANVAS3D_NODE_TYPE_LIGHT)
- {
- if (pd->data.light.light)
- {
- evas_canvas3d_object_update(pd->data.light.light);
- }
- }
- else if (pd->type == EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- Eina_List *l;
- Evas_Canvas3D_Mesh *m;
- EINA_LIST_FOREACH(pd->data.mesh.meshes, l, m)
- {
- evas_canvas3d_object_update(m);
- }
- }
-
- return EINA_TRUE;
-}
-
-static void
-_pack_meshes_vertex_data(Evas_Canvas3D_Node *node, Eina_Vector3 **vertices, int *count)
-{
- const Eina_List *m, *l;
- Evas_Canvas3D_Mesh *mesh;
- int j;
- int frame;
- Eina_Vector3 *it;
- Evas_Canvas3D_Vertex_Buffer pos0, pos1;
- Evas_Real pos_weight;
-
- *count = 0;
- m = (Eina_List *)evas_canvas3d_node_mesh_list_get(node);
- EINA_LIST_FOREACH(m, l, mesh)
- {
- frame = evas_canvas3d_node_mesh_frame_get(node, mesh);
- evas_canvas3d_mesh_interpolate_vertex_buffer_get(mesh, frame, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION,
- &pos0, &pos1, &pos_weight);
- if(!pos0.data) continue;
- if(!pos0.stride)
- {
- *count += pos0.size / (sizeof(float) * 3);
- }
- else
- {
- *count += pos0.size / pos0.stride;
- }
- }
- *vertices = (Eina_Vector3*)malloc(*count * sizeof(Eina_Vector3));
- it = *vertices;
- if(!*vertices)
- {
- ERR("Not enough memory.");
- return;
- }
-
- EINA_LIST_FOREACH(m, l, mesh)
- {
- frame = evas_canvas3d_node_mesh_frame_get(node, mesh);
- evas_canvas3d_mesh_interpolate_vertex_buffer_get(mesh, frame, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION,
- &pos0, &pos1, &pos_weight);
- if(!pos0.data) continue;
- int stride = 0;
- if(!pos0.stride)
- {
- stride = sizeof(float) * 3;
- }
- else
- {
- stride = pos0.stride;
- }
- for (j = 0; j < pos0.size / stride; j++)
- {
- evas_canvas3d_mesh_interpolate_position_get(it, &pos0, &pos1, pos_weight, j);
- it++;
- }
- }
-}
-
-static void
-_update_node_shapes(Evas_Canvas3D_Node *node)
-{
- int i;
- int count;
- Eina_Vector3 *vertices = NULL;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, EVAS_CANVAS3D_NODE_CLASS);
- Eina_Bool transform_orientation_dirty;
- Eina_Bool transform_position_dirty;
- Eina_Bool transform_scale_dirty;
- Eina_Bool mesh_geom_dirty;
- Eina_Vector3 position = pd->position_world;
-
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- pd->aabb.p0 = position;
- pd->aabb.p1 = position;
- pd->obb.p0 = position;
- pd->obb.p1 = position;
- pd->bsphere.radius = 0;
- pd->bsphere.center = position;
- return;
- }
-
- transform_orientation_dirty = evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_ORIENTATION);
- transform_orientation_dirty |= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_PARENT_ORIENTATION);
- transform_position_dirty = evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_POSITION);
- transform_position_dirty |= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_PARENT_POSITION);
- transform_scale_dirty = evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_SCALE);
- transform_scale_dirty |= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_PARENT_SCALE);
- mesh_geom_dirty = evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_MESH_GEOMETRY);
- mesh_geom_dirty |= evas_canvas3d_object_dirty_get(node, EVAS_CANVAS3D_STATE_NODE_MESH_FRAME);
-
-
- _pack_meshes_vertex_data(node, &vertices, &count);
- if (count > 0)
- {
- calculate_box(&pd->obb, count, vertices);
- for (i = 0; i < count; i++)
- {
- eina_vector3_homogeneous_position_transform(&vertices[i], &pd->data.mesh.matrix_local_to_world, &vertices[i]);
- }
- calculate_box(&pd->aabb, count, vertices);
- if (transform_position_dirty || transform_scale_dirty || mesh_geom_dirty)
- {
- calculate_sphere(&pd->bsphere, count, vertices);
- }
- eina_vector3_homogeneous_position_transform(&pd->obb.p0, &pd->data.mesh.matrix_local_to_world, &pd->obb.p0);
- eina_vector3_homogeneous_position_transform(&pd->obb.p0, &pd->data.mesh.matrix_local_to_world, &pd->obb.p0);
- }
- free(vertices);
-
-}
-
-Eina_Bool
-node_aabb_update(Evas_Canvas3D_Node *node, void *data EINA_UNUSED)
-{
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, EVAS_CANVAS3D_NODE_CLASS);
- Eina_List *current;
- Evas_Canvas3D_Node *datanode;
- const Efl_Event_Description *eo_desc = NULL;
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_MESH &&
- pd->type != EVAS_CANVAS3D_NODE_TYPE_NODE)
- return EINA_TRUE;
- _update_node_shapes(node);
- EINA_LIST_FOREACH(pd->members, current, datanode)
- {
- Evas_Canvas3D_Node_Data *datapd = efl_data_scope_get(datanode, EVAS_CANVAS3D_NODE_CLASS);
- evas_box3_union(&pd->obb, &pd->obb, &datapd->obb);
- evas_box3_union(&pd->aabb, &pd->aabb, &datapd->aabb);
- }
-
- evas_build_sphere(&pd->aabb, &pd->bsphere);
- eo_desc = efl_object_legacy_only_event_description_get("collision,private");
- efl_event_callback_legacy_call(node, eo_desc, (void *)node);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_node_update_done(Evas_Canvas3D_Node *obj, void *data EINA_UNUSED)
-{
- //@FIXME
- Evas_Canvas3D_Object_Data *pdobject = efl_data_scope_get(obj, EVAS_CANVAS3D_OBJECT_CLASS);
- memset(&pdobject->dirty[0], 0x00, sizeof(Eina_Bool) * EVAS_CANVAS3D_STATE_MAX);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_evas_canvas3d_object_update_notify(Eo *obj, Evas_Canvas3D_Node_Data *pd EINA_UNUSED)
-{
- /* Update transform. */
- evas_canvas3d_node_tree_traverse(obj, EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_FALSE,
- _node_transform_update, NULL);
- /*Update billboard*/
- evas_canvas3d_node_tree_traverse(obj, EVAS_CANVAS3D_TREE_TRAVERSE_ANY_ORDER, EINA_FALSE,
- _node_billboard_update, NULL);
- /* Update AABB. */
- if(efl_object_legacy_only_event_description_get("collision,private"))
- {
- evas_canvas3d_node_tree_traverse(obj, EVAS_CANVAS3D_TREE_TRAVERSE_POST_ORDER, EINA_FALSE,
- node_aabb_update, NULL);
- }
-
- /* Update node item. */
- evas_canvas3d_node_tree_traverse(obj, EVAS_CANVAS3D_TREE_TRAVERSE_ANY_ORDER, EINA_FALSE,
- _node_item_update, NULL);
-
- /* Mark all nodes in the tree as up-to-date. */
- evas_canvas3d_node_tree_traverse(obj, EVAS_CANVAS3D_TREE_TRAVERSE_ANY_ORDER, EINA_FALSE,
- _node_update_done, NULL);
-}
-
-static void
-_node_free(Evas_Canvas3D_Object *obj)
-{
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(obj, MY_CLASS);
-
- if (pd->members)
- {
- Eina_List *l;
- Evas_Canvas3D_Node *n;
-
- EINA_LIST_FOREACH(pd->members, l, n)
- {
- efl_unref(n);
- }
-
- eina_list_free(pd->members);
- }
-
- if (pd->parent)
- {
- evas_canvas3d_node_member_del(pd->parent, obj);
- }
-
- if (pd->type == EVAS_CANVAS3D_NODE_TYPE_MESH && pd->data.mesh.meshes)
- {
- Eina_List *l;
- Evas_Canvas3D_Mesh *m;
-
- EINA_LIST_FOREACH(pd->data.mesh.meshes, l, m)
- {
- efl_unref(m);
- }
-
- eina_list_free(pd->data.mesh.meshes);
-
- if (pd->data.mesh.node_meshes)
- eina_hash_free(pd->data.mesh.node_meshes);
- }
-
- if (pd->scenes_root)
- eina_hash_free(pd->scenes_root);
-
- if (pd->scenes_camera)
- eina_hash_free(pd->scenes_camera);
-}
-
-void
-evas_canvas3d_node_scene_root_add(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene)
-{
- int count = 0;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- if (pd->scenes_root == NULL)
- {
- pd->scenes_root = eina_hash_pointer_new(NULL);
-
- if (pd->scenes_root == NULL)
- {
- ERR("Failed to create hash table.");
- return;
- }
- }
- else
- count = (int)(uintptr_t)eina_hash_find(pd->scenes_root, &scene);
-
- eina_hash_set(pd->scenes_root, &scene, (const void *)(uintptr_t)(count + 1));
-}
-
-void
-evas_canvas3d_node_scene_root_del(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene)
-{
- int count = 0;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- if (pd->scenes_root == NULL)
- {
- ERR("No scene to delete.");
- return;
- }
-
- count = (int)(uintptr_t)eina_hash_find(pd->scenes_root, &scene);
-
- if (count == 1)
- eina_hash_del(pd->scenes_root, &scene, NULL);
- else
- eina_hash_set(pd->scenes_root, &scene, (const void *)(uintptr_t)(count - 1));
-}
-
-EOLIAN static Eina_Hash*
-_evas_canvas3d_node_scene_root_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->scenes_root;
-}
-
-void
-evas_canvas3d_node_scene_camera_add(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene)
-{
- int count = 0;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- if (pd->scenes_camera == NULL)
- {
- pd->scenes_camera = eina_hash_pointer_new(NULL);
-
- if (pd->scenes_camera == NULL)
- {
- ERR("Failed to create hash table.");
- return;
- }
- }
- else
- count = (int)(uintptr_t)eina_hash_find(pd->scenes_camera, &scene);
-
- eina_hash_set(pd->scenes_camera, &scene, (const void *)(uintptr_t)(count + 1));
-}
-
-void
-evas_canvas3d_node_scene_camera_del(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene)
-{
- int count = 0;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- if (pd->scenes_camera == NULL)
- {
- ERR("No scene to delete.");
- return;
- }
-
- count = (int)(uintptr_t)eina_hash_find(pd->scenes_camera, &scene);
-
- if (count == 1)
- eina_hash_del(pd->scenes_camera, &scene, NULL);
- else
- eina_hash_set(pd->scenes_camera, &scene, (const void *)(uintptr_t)(count - 1));
-}
-
-void
-evas_canvas3d_node_traverse(Evas_Canvas3D_Node *from, Evas_Canvas3D_Node *to, Evas_Canvas3D_Node_Traverse_Type type,
- Eina_Bool skip, Evas_Canvas3D_Node_Func func, void *data)
-{
- Eina_List *nodes = NULL, *n;
- Evas_Canvas3D_Node *node = NULL;
-
- if (from == NULL || func == NULL)
- goto error;
-
- if (type == EVAS_CANVAS3D_NODE_TRAVERSE_DOWNWARD)
- {
- if (to == NULL)
- goto error;
-
- node = to;
-
- do {
- nodes = eina_list_prepend(nodes, (const void *)node);
-
- if (node == from)
- break;
- Evas_Canvas3D_Node_Data *pdnode = efl_data_scope_get(node, MY_CLASS);
- node = pdnode->parent;
-
- if (node == NULL)
- goto error;
- } while (1);
- }
- else if (type == EVAS_CANVAS3D_NODE_TRAVERSE_UPWARD)
- {
- node = from;
-
- do {
- nodes = eina_list_append(nodes, (const void *)node);
-
- if (node == to)
- break;
- Evas_Canvas3D_Node_Data *pdnode = efl_data_scope_get(node, MY_CLASS);
- node = pdnode->parent;
-
- if (node == NULL)
- {
- if (to == NULL)
- break;
-
- goto error;
- }
- } while (1);
- }
-
- EINA_LIST_FOREACH(nodes, n, node)
- {
- if (!func(node, data) && skip)
- break;
- }
-
- eina_list_free(nodes);
- return;
-
-error:
- ERR("Node traverse error.");
-
- if (nodes)
- eina_list_free(nodes);
-}
-
-void
-evas_canvas3d_node_tree_traverse(Evas_Canvas3D_Node *root, Evas_Canvas3D_Tree_Traverse_Type type,
- Eina_Bool skip, Evas_Canvas3D_Node_Func func, void *data)
-{
- Eina_List *nodes = NULL, *l;
- Evas_Canvas3D_Node *node = NULL, *n, *last;
-
- if (root == NULL || func == NULL)
- return;
-
- if (type == EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER)
- {
- /* Put the root node in the queue. */
- nodes = eina_list_append(nodes, root);
-
- while (eina_list_count(nodes) > 0)
- {
- /* Dequeue a node. */
- node = eina_list_data_get(nodes);
- Evas_Canvas3D_Node_Data *pdnode = efl_data_scope_get(node, MY_CLASS);
-
- nodes = eina_list_remove_list(nodes, nodes);
-
- /* Call node function on the node. */
- if (func(node, data) || !skip)
- {
- /* Enqueue member nodes. */
- EINA_LIST_FOREACH(pdnode->members, l, n)
- {
- nodes = eina_list_append(nodes, n);
- }
- }
- }
- }
- else if (type == EVAS_CANVAS3D_TREE_TRAVERSE_PRE_ORDER)
- {
- /* Put the root node in the stack. */
- nodes = eina_list_append(nodes, root);
-
- while (eina_list_count(nodes) > 0)
- {
- /* Pop a node from the stack. */
- node = eina_list_data_get(nodes);
- Evas_Canvas3D_Node_Data *pdnode = efl_data_scope_get(node, MY_CLASS);
- nodes = eina_list_remove_list(nodes, nodes);
-
- /* Call node function on the node. */
- if (func(node, data) || !skip)
- {
- /* Push member nodes into the stack. */
- EINA_LIST_REVERSE_FOREACH(pdnode->members, l, n)
- {
- nodes = eina_list_prepend(nodes, n);
- }
- }
- }
- }
- else if (type == EVAS_CANVAS3D_TREE_TRAVERSE_POST_ORDER)
- {
- if (skip)
- {
- ERR("Using skip with post order traversal has no effect.");
- return;
- }
-
- /* Put the root node in the stack. */
- nodes = eina_list_append(nodes, root);
- last = NULL;
-
- while (eina_list_count(nodes) > 0)
- {
- /* Peek a node from the stack. */
- node = eina_list_data_get(nodes);
- Evas_Canvas3D_Node_Data *pdnode = efl_data_scope_get(node, MY_CLASS);
- if (eina_list_count(pdnode->members) == 0)
- {
- /* The peeked node is a leaf node,
- * so visit it and pop from the stack. */
- func(node, data);
- nodes = eina_list_remove_list(nodes, nodes);
-
- /* Save the last visited node. */
- last = node;
- }
- else
- {
- /* If the peeked node is not a leaf node,
- * there can be only two possible cases.
- *
- * 1. the parent of the last visited node.
- * 2. a sibling of the last visited node.
- *
- * If the last visited node is a direct child of the peeked node,
- * we have no unvisted child nodes for the peeked node, so we have to visit
- * the peeked node and pop from the stack.
- *
- * Otherwise it should be a sibling of the peeked node, so we have to push
- * its childs into the stack. */
- Evas_Canvas3D_Node_Data *pdlast;
- if (last )
- pdlast= efl_data_scope_get(last, MY_CLASS);
- if (last && pdlast->parent == node)
- {
- /* Visit the node as it doesn't have any unvisited child node. */
- func(node, data);
- nodes = eina_list_remove_list(nodes, nodes);
-
- /* Save the last visited node. */
- last = node;
- }
- else
- {
- /* Push child nodes into the stack. */
- EINA_LIST_REVERSE_FOREACH(pdnode->members, l, n)
- {
- nodes = eina_list_prepend(nodes, n);
- }
- }
- }
- }
- }
-
- if (nodes != NULL)
- eina_list_free(nodes);
-}
-
-Eina_Bool
-_node_is_visible(Evas_Canvas3D_Node *node EINA_UNUSED, Evas_Canvas3D_Node *camera_node EINA_UNUSED)
-{
- /* TODO: */
- return EINA_TRUE;
-}
-
-Eina_Bool
-evas_canvas3d_node_mesh_collect(Evas_Canvas3D_Node *node, void *data)
-{
- Eina_List *list_meshes, *l;
- Evas_Canvas3D_Mesh *mesh = NULL;
- Evas_Canvas3D_Mesh_Data *mesh_pd;
- Evas_Canvas3D_Mesh_Frame *f;
- Evas_Canvas3D_Scene_Public_Data *scene_data = (Evas_Canvas3D_Scene_Public_Data *)data;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- unsigned short int *index;
- int stride, tex_stride, normal_stride;
-
- if (pd->type == EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- scene_data->mesh_nodes = eina_list_append(scene_data->mesh_nodes, node);
- /*In case LOD calculate distance to the camera node*/
- if (pd->lod)
- {
- Evas_Canvas3D_Node_Data *pd_camera = efl_data_scope_get(scene_data->camera_node, MY_CLASS);
- scene_data->lod_distance = eina_vector3_distance_get(&pd_camera->position, &pd->position_world);
- }
- /* calculation of tangent space for all meshes */
- list_meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(node);
- EINA_LIST_FOREACH(list_meshes, l, mesh)
- {
- mesh_pd = efl_data_scope_get(mesh, MY_CLASS);
- f = evas_canvas3d_mesh_frame_find(mesh_pd, 0);
- if (!f)
- {
- ERR("Not existing mesh frame.");
- continue;
- }
-
- float *tangent_data = (float *)f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT].data;
- if (!tangent_data && ((mesh_pd->shader_mode == EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP) ||
- (mesh_pd->shader_mode == EVAS_CANVAS3D_SHADER_MODE_PARALLAX_OCCLUSION)))
- {
- index = (unsigned short int *)mesh_pd->indices;
- tangent_data = (float*) malloc((3 * mesh_pd->vertex_count) * sizeof(float));
-
- float *vertex_data = (float *)f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].data;
- if (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].stride != 0)
- stride = f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].stride / sizeof(float);
- else
- stride = 3;
-
- float *tex_data = (float *)f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD].data;
- if (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD].stride != 0)
- tex_stride = f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD].stride / sizeof(float);
- else
- tex_stride = 2;
-
- float *normal_data = (float *)f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL].data;
- if (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL].stride != 0)
- normal_stride = f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL].stride / sizeof(float);
- else
- normal_stride = 2;
-
- evas_tangent_space_get(vertex_data, tex_data, normal_data, index, mesh_pd->vertex_count,
- mesh_pd->index_count, stride, tex_stride, normal_stride, &tangent_data);
-
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT, 3 * sizeof(float), tangent_data);
- free(tangent_data);
- }
- }
- }
- if (!_node_is_visible(node, scene_data->camera_node))
- {
- /* Skip entire sub-tree of this node. */
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-Eina_Bool
-evas_canvas3d_node_color_node_mesh_collect(Evas_Canvas3D_Node *node, void *data)
-{
- Evas_Canvas3D_Scene_Public_Data *scene_data = (Evas_Canvas3D_Scene_Public_Data *)data;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- Evas_Canvas3D_Node_Data *pd_camera = efl_data_scope_get(scene_data->camera_node, MY_CLASS);
- Evas_Canvas3D_Camera *camera = (Evas_Canvas3D_Camera*)pd_camera->data.camera.camera;
-
- Eina_List *list_meshes, *l;
- Evas_Canvas3D_Mesh *mesh;
- Eina_Stringshare *key, *datakey;
- Evas_Color *color;
- Eina_Bool visible = EINA_FALSE;
- Eina_Array *arr;
- if (pd->type == EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- visible = evas_canvas3d_camera_node_visible_get(camera, scene_data->camera_node, node, EVAS_CANVAS3D_FRUSTUM_MODE_BSPHERE);
- if (visible)
- {
- list_meshes = (Eina_List *)evas_canvas3d_node_mesh_list_get(node);
- EINA_LIST_FOREACH(list_meshes, l, mesh)
- {
- if (evas_canvas3d_mesh_color_pick_enable_get(mesh))
- {
- color = calloc(1, sizeof(Evas_Color));
-
- if (!eina_hash_population(scene_data->node_mesh_colors))
- key = _generate_unic_color_key(color, &scene_data->bg_color,
- node, mesh, EINA_TRUE);
- else
- key = _generate_unic_color_key(color, &scene_data->bg_color,
- node, mesh, EINA_FALSE);
-
- datakey = eina_stringshare_printf("%f %f %f", color->r, color->g, color->b);
- eina_hash_add(scene_data->node_mesh_colors, key, color);
- arr = eina_array_new(2);
- eina_array_push(arr, (void *)node);
- eina_array_push(arr, (void *)mesh);
- eina_hash_add(scene_data->colors_node_mesh, datakey, arr);
- }
- }
- }
- else
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-Eina_Bool
-evas_canvas3d_node_light_collect(Evas_Canvas3D_Node *node, void *data)
-{
- Evas_Canvas3D_Scene_Public_Data *scene_data = (Evas_Canvas3D_Scene_Public_Data *)data;
- Evas_Canvas3D_Node_Data *pd = efl_data_scope_get(node, MY_CLASS);
- if (pd->type == EVAS_CANVAS3D_NODE_TYPE_LIGHT)
- scene_data->light_nodes = eina_list_append(scene_data->light_nodes, node);
-
- return EINA_TRUE;
-}
-
-EAPI Evas_Canvas3D_Node *
-evas_canvas3d_node_add(Evas *e, Evas_Canvas3D_Node_Type type)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e, evas_canvas3d_node_type_set(efl_added, type));
-}
-
-EOLIAN static Efl_Object *
-_evas_canvas3d_node_efl_object_finalize(Eo *obj, Evas_Canvas3D_Node_Data *pd)
-{
- if (pd->type == EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- pd->data.mesh.node_meshes = eina_hash_pointer_new(_node_mesh_free_func);
- if (pd->data.mesh.node_meshes == NULL)
- {
- ERR("Failed to create node mesh table.");
- _node_free(obj);
- return NULL;
- }
- }
- return obj;
-}
-
-EOLIAN static Efl_Object *
-_evas_canvas3d_node_efl_object_constructor(Eo *obj, Evas_Canvas3D_Node_Data *pd)
-{
- efl_constructor(efl_super(obj, MY_CLASS));
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_NODE);
-
- eina_vector3_set(&pd->position, 0.0, 0.0, 0.0);
- eina_quaternion_set(&pd->orientation, 0.0, 0.0, 0.0, 1.0);
- eina_vector3_set(&pd->scale, 1.0, 1.0, 1.0);
-
- eina_vector3_set(&pd->position_world, 0.0, 0.0, 0.0);
- eina_quaternion_set(&pd->orientation_world, 0.0, 0.0, 0.0, 1.0);
- eina_vector3_set(&pd->scale_world, 1.0, 1.0, 1.0);
-
- pd->position_inherit = EINA_TRUE;
- pd->orientation_inherit = EINA_TRUE;
- pd->scale_inherit = EINA_TRUE;
- pd->data.mesh.node_meshes = 0;
- pd->billboard_target = NULL;
- pd->lod = EINA_FALSE;
-
- evas_box3_set(&pd->aabb, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_efl_object_destructor(Eo *obj, Evas_Canvas3D_Node_Data *pd EINA_UNUSED)
-{
- _node_free(obj);
-
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-EOLIAN static Evas_Canvas3D_Node_Type
-_evas_canvas3d_node_node_type_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->type;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_node_type_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Node_Type type)
-{
- pd->type = type;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_member_add(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Node *member)
-{
- if (obj == member)
- {
- ERR("Failed to add a member node (adding to itself).");
- return;
- }
- Evas_Canvas3D_Node_Data *pdmember = efl_data_scope_get(member, MY_CLASS);
- if (!pdmember || pdmember->parent == obj)
- return;
-
- if (pdmember->parent)
- {
- /* Detaching from previous parent. */
- Evas_Canvas3D_Node_Data *pdmemberparent = efl_data_scope_get(pdmember->parent, MY_CLASS);
- pdmemberparent->members = eina_list_remove(pdmemberparent->members, member);
-
- /* Mark changed. */
- evas_canvas3d_object_change(pdmember->parent, EVAS_CANVAS3D_STATE_NODE_MEMBER, NULL);
- }
- else
- {
- /* Should get a new reference. */
- efl_ref(member);
- }
-
- /* Add the member node. */
- pd->members = eina_list_append(pd->members, (const void *)member);
- pdmember->parent = obj;
-
- /* Mark changed. */
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_MEMBER, NULL);
- evas_canvas3d_object_change(member, EVAS_CANVAS3D_STATE_NODE_PARENT_ORIENTATION, NULL);
- evas_canvas3d_object_change(member, EVAS_CANVAS3D_STATE_NODE_PARENT_POSITION, NULL);
- evas_canvas3d_object_change(member, EVAS_CANVAS3D_STATE_NODE_PARENT_SCALE, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_member_del(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Node *member)
-{
- Evas_Canvas3D_Node_Data *pdmember = efl_data_scope_get(member, MY_CLASS);
- if (!pdmember || pdmember->parent != obj)
- {
- ERR("Failed to delete a member node (not a member of the given node)");
- return;
- }
-
- /* Delete the member node. */
- pd->members = eina_list_remove(pd->members, member);
- pdmember->parent = NULL;
-
- /* Mark modified object as changed. */
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_MEMBER, NULL);
- evas_canvas3d_object_change(member, EVAS_CANVAS3D_STATE_NODE_PARENT_ORIENTATION, NULL);
- evas_canvas3d_object_change(member, EVAS_CANVAS3D_STATE_NODE_PARENT_POSITION, NULL);
- evas_canvas3d_object_change(member, EVAS_CANVAS3D_STATE_NODE_PARENT_SCALE, NULL);
-
- /* Decrease reference count. */
- efl_unref(member);
-}
-
-EOLIAN static Evas_Canvas3D_Node *
-_evas_canvas3d_node_parent_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->parent;
-}
-
-EOLIAN static const Eina_List *
-_evas_canvas3d_node_member_list_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->members;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_position_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z)
-{
- pd->position.x = x;
- pd->position.y = y;
- pd->position.z = z;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_POSITION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_orientation_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z, Evas_Real w)
-{
- pd->orientation.x = x;
- pd->orientation.y = y;
- pd->orientation.z = z;
- pd->orientation.w = w;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_ORIENTATION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_orientation_angle_axis_set(Eo *obj, Evas_Canvas3D_Node_Data *pd,
- Evas_Real angle, Evas_Real x, Evas_Real y, Evas_Real z)
-{
- Evas_Real half_angle = 0.5 * DEGREE_TO_RADIAN(angle);
- Evas_Real s = sin(half_angle);
- Eina_Vector3 axis;
-
- eina_vector3_set(&axis, x, y, z);
- eina_vector3_normalize(&axis, &axis);
-
- pd->orientation.w = cos(half_angle);
- pd->orientation.x = s * axis.x;
- pd->orientation.y = s * axis.y;
- pd->orientation.z = s * axis.z;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_ORIENTATION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_scale_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z)
-{
- pd->scale.x = x;
- pd->scale.y = y;
- pd->scale.z = z;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_SCALE, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_position_get(const Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Space space,
- Evas_Real *x, Evas_Real *y, Evas_Real *z)
-{
- if (space == EVAS_CANVAS3D_SPACE_LOCAL)
- {
- if (x) *x = 0.0;
- if (y) *y = 0.0;
- if (z) *z = 0.0;
- }
- else if (space == EVAS_CANVAS3D_SPACE_PARENT)
- {
- if (x) *x = pd->position.x;
- if (y) *y = pd->position.y;
- if (z) *z = pd->position.z;
- }
- else if (space == EVAS_CANVAS3D_SPACE_WORLD)
- {
- evas_canvas3d_object_update((Eo *) obj);
-
- if (x) *x = pd->position_world.x;
- if (y) *y = pd->position_world.y;
- if (z) *z = pd->position_world.z;
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_node_orientation_get(const Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Space space,
- Evas_Real *x, Evas_Real *y, Evas_Real *z, Evas_Real *w)
-{
- if (space == EVAS_CANVAS3D_SPACE_LOCAL)
- {
- if (x) *x = 0.0;
- if (y) *y = 0.0;
- if (z) *z = 0.0;
- if (w) *w = 0.0;
- }
- else if (space == EVAS_CANVAS3D_SPACE_PARENT)
- {
- if (x) *x = pd->orientation.x;
- if (y) *y = pd->orientation.y;
- if (z) *z = pd->orientation.z;
- if (w) *w = pd->orientation.w;
- }
- else if (space == EVAS_CANVAS3D_SPACE_WORLD)
- {
- evas_canvas3d_object_update((Eo *) obj);
-
- if (x) *x = pd->orientation_world.x;
- if (y) *y = pd->orientation_world.y;
- if (z) *z = pd->orientation_world.z;
- if (w) *w = pd->orientation_world.w;
- }
-
-}
-
-EOLIAN static void
-_evas_canvas3d_node_scale_get(const Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Space space,
- Evas_Real *x, Evas_Real *y, Evas_Real *z)
-{
- if (space == EVAS_CANVAS3D_SPACE_LOCAL)
- {
- if (x) *x = 0.0;
- if (y) *y = 0.0;
- if (z) *z = 0.0;
- }
- else if (space == EVAS_CANVAS3D_SPACE_PARENT)
- {
- if (x) *x = pd->scale.x;
- if (y) *y = pd->scale.y;
- if (z) *z = pd->scale.z;
- }
- else if (space == EVAS_CANVAS3D_SPACE_WORLD)
- {
- evas_canvas3d_object_update((Eo *) obj);
-
- if (x) *x = pd->scale_world.x;
- if (y) *y = pd->scale_world.y;
- if (z) *z = pd->scale_world.z;
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_node_position_inherit_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Eina_Bool inherit)
-{
- pd->position_inherit = inherit;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_POSITION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_orientation_inherit_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Eina_Bool inherit)
-{
- pd->orientation_inherit = inherit;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_ORIENTATION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_scale_inherit_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Eina_Bool inherit)
-{
- pd->scale_inherit = inherit;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_SCALE, NULL);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_node_position_inherit_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->position_inherit;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_node_orientation_inherit_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->orientation_inherit;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_node_scale_inherit_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->scale_inherit;
-}
-
-static void
-_look_at_set(Evas_Canvas3D_Node_Data *pd, Eina_Vector3 *target, Eina_Vector3 *up)
-{
- Eina_Vector3 x, y, z;
-
- eina_vector3_subtract(&z, &pd->position, target);
- eina_vector3_normalize(&z, &z);
-
- eina_vector3_cross_product(&x, up, &z);
- eina_vector3_normalize(&x, &x);
-
- eina_vector3_cross_product(&y, &z, &x);
- eina_vector3_normalize(&y, &y);
-
- /* Below matrix to quaternion conversion code taken from
- * http://fabiensanglard.net/doom3_documentation/37726-293748.pdf
- * When any license issue occurs, use ken shoemake's algorithm instead.
- */
-
- if (x.x + y.y + z.z > 0.0)
- {
- Evas_Real t = x.x + y.y + z.z + 1.0;
- Evas_Real s = evas_reciprocal_sqrt(t) * 0.5;
-
- pd->orientation.w = s * t;
- pd->orientation.z = (x.y - y.x) * s;
- pd->orientation.y = (z.x - x.z) * s;
- pd->orientation.x = (y.z - z.y) * s;
- }
- else if (x.x > y.y && x.x > z.z)
- {
- Evas_Real t = x.x - y.y - z.z + 1.0;
- Evas_Real s = evas_reciprocal_sqrt(t) * 0.5;
-
- pd->orientation.x = s * t;
- pd->orientation.y = (x.y + y.x) * s;
- pd->orientation.z = (z.x + x.z) * s;
- pd->orientation.w = (y.z - z.y) * s;
- }
- else if (y.y > z.z)
- {
- Evas_Real t = -x.x + y.y - z.z + 1.0;
- Evas_Real s = evas_reciprocal_sqrt(t) * 0.5;
-
- pd->orientation.y = s * t;
- pd->orientation.x = (x.y + y.x) * s;
- pd->orientation.w = (z.x - x.z) * s;
- pd->orientation.z = (y.z + z.y) * s;
- }
- else
- {
- Evas_Real t = -x.x - y.y + z.z + 1.0;
- Evas_Real s = evas_reciprocal_sqrt(t) * 0.5;
-
- pd->orientation.z = s * t;
- pd->orientation.w = (x.y - y.x) * s;
- pd->orientation.x = (z.x + x.z) * s;
- pd->orientation.y = (y.z + z.y) * s;
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_node_look_at_set(Eo *obj, Evas_Canvas3D_Node_Data *pd,
- Evas_Canvas3D_Space target_space, Evas_Real tx, Evas_Real ty, Evas_Real tz,
- Evas_Canvas3D_Space up_space, Evas_Real ux, Evas_Real uy, Evas_Real uz)
-{
- Eina_Vector3 target;
- Eina_Vector3 up;
-
- /* Target position in parent space. */
- if (target_space == EVAS_CANVAS3D_SPACE_LOCAL)
- {
- ERR("TODO:");
- return;
- }
- else if (target_space == EVAS_CANVAS3D_SPACE_PARENT)
- {
- eina_vector3_set(&target, tx, ty, tz);
- }
- else if (target_space == EVAS_CANVAS3D_SPACE_WORLD)
- {
- ERR("TODO:");
- return;
-
- }
- else
- {
- ERR("Invalid coordinate space.");
- return;
- }
-
- if (up_space == EVAS_CANVAS3D_SPACE_LOCAL)
- {
- eina_vector3_set(&up, ux, uy, uz);
- //ERR("TODO:");
- //return;
- }
- else if (up_space == EVAS_CANVAS3D_SPACE_PARENT)
- {
- eina_vector3_set(&up, ux, uy, uz);
- }
- else if (up_space == EVAS_CANVAS3D_SPACE_WORLD)
- {
- ERR("TODO:");
- return;
- }
- else
- {
- ERR("Invalid coordinate space.");
- return;
- }
-
- _look_at_set(pd, &target, &up);
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_TRANSFORM_ORIENTATION, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_camera_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Camera *camera)
-{
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_CAMERA)
- {
- ERR("Node type mismatch.");
- return;
- }
-
- if (pd->data.camera.camera == camera)
- return;
-
- if (pd->data.camera.camera)
- {
- /* Detach previous camera object. */
- evas_canvas3d_camera_node_del(pd->data.camera.camera, obj);
- efl_unref(pd->data.camera.camera);
- }
-
- pd->data.camera.camera = camera;
- efl_ref(camera);
-
- /* Register change notification on the camera for this node. */
- evas_canvas3d_camera_node_add(camera, obj);
-
- /* Mark changed. */
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_CAMERA, NULL);
-}
-
-EOLIAN static Evas_Canvas3D_Camera *
-_evas_canvas3d_node_camera_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->data.camera.camera;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_light_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Light *light)
-{
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_LIGHT)
- {
- ERR("Node type mismatch.");
- return;
- }
-
- if (pd->data.light.light == light)
- return;
-
- if (pd->data.light.light)
- {
- /* Detach previous light object. */
- evas_canvas3d_light_node_del(pd->data.light.light, obj);
- efl_unref(pd->data.light.light);
- }
-
- pd->data.light.light = light;
- efl_ref(light);
-
- /* Register change notification on the light for this node. */
- evas_canvas3d_light_node_add(light, obj);
-
- /* Mark changed. */
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_LIGHT, NULL);
-}
-
-EOLIAN static Evas_Canvas3D_Light *
-_evas_canvas3d_node_light_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->data.light.light;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_mesh_add(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Mesh *mesh)
-{
- Evas_Canvas3D_Node_Mesh *nm = NULL;
-
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- ERR("Node type mismatch.");
- return;
- }
-
- if (eina_hash_find(pd->data.mesh.node_meshes, &mesh) != NULL)
- {
- ERR("The mesh is already added to the node.");
- return;
- }
-
- if ((nm = _node_mesh_new(obj, mesh)) == NULL)
- {
- ERR("Failed to create node mesh.");
- return;
- }
-
- /* TODO: Find node mesh and add if it does not exist. */
- if (!eina_hash_add(pd->data.mesh.node_meshes, &mesh, nm))
- {
- ERR("Failed to add a mesh to mesh table.");
- _node_mesh_free(nm);
- return;
- }
-
- pd->data.mesh.meshes = eina_list_append(pd->data.mesh.meshes, mesh);
- efl_ref(mesh);
-
- /* Register change notification. */
- evas_canvas3d_mesh_node_add(mesh, obj);
-
- /* Mark changed. */
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_MESH_GEOMETRY, NULL);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_MESH_MATERIAL, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_node_mesh_del(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Mesh *mesh)
-{
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- ERR("Node type mismatch.");
- return;
- }
-
- if (!eina_hash_del(pd->data.mesh.node_meshes, &mesh, NULL))
- {
- ERR("The given mesh doesn't belong to this node.");
- return;
- }
-
- pd->data.mesh.meshes = eina_list_remove(pd->data.mesh.meshes, mesh);
- evas_canvas3d_mesh_node_del(mesh, obj);
- efl_unref(mesh);
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_MESH_GEOMETRY, NULL);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_MESH_MATERIAL, NULL);
-}
-
-EOLIAN static const Eina_List *
-_evas_canvas3d_node_mesh_list_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->data.mesh.meshes;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_mesh_frame_set(Eo *obj, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Mesh *mesh, int frame)
-{
- Evas_Canvas3D_Node_Mesh *nm = NULL;
-
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- ERR("Node type mismatch.");
- return;
- }
-
- if ((nm = eina_hash_find(pd->data.mesh.node_meshes, &mesh)) == NULL)
- {
- ERR("The given mesh doesn't belongs to this node.");
- return;
- }
-
- nm->frame = frame;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_MESH_FRAME, NULL);
-}
-
-EOLIAN static int
-_evas_canvas3d_node_mesh_frame_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd, Evas_Canvas3D_Mesh *mesh)
-{
- Evas_Canvas3D_Node_Mesh *nm = NULL;
-
- if (pd->type != EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- ERR("Node type mismatch.");
- return 0;
- }
-
- if ((nm = eina_hash_find(pd->data.mesh.node_meshes, &mesh)) == NULL)
- {
- ERR("The given mesh doesn't belongs to this node.");
- return 0;
- }
-
- return nm->frame;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_bounding_box_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd, Evas_Real *x, Evas_Real *y, Evas_Real *z, Evas_Real *x2, Evas_Real *y2, Evas_Real *z2)
-{
- evas_canvas3d_object_update(obj);
- evas_canvas3d_node_tree_traverse(obj, EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_FALSE,
- node_aabb_update, NULL);
-
- if (x) *x = pd->aabb.p0.x;
- if (y) *y = pd->aabb.p0.y;
- if (z) *z = pd->aabb.p0.z;
- if (x2) *x2 = pd->aabb.p1.x;
- if (y2) *y2 = pd->aabb.p1.y;
- if (z2) *z2 = pd->aabb.p1.z;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_bounding_sphere_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd, Evas_Real *x, Evas_Real *y, Evas_Real *z, Evas_Real *r)
-{
- evas_canvas3d_object_update(obj);
- evas_canvas3d_node_tree_traverse(obj, EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_FALSE,
- node_aabb_update, NULL);
-
- if (x) *x = pd->bsphere.center.x;
- if (y) *y = pd->bsphere.center.y;
- if (z) *z = pd->bsphere.center.z;
- if (r) *r = pd->bsphere.radius;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_billboard_target_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd,
- Eo *target)
-{
- if (pd->billboard_target != target)
- {
- pd->billboard_target = target;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_PARENT_BILLBOARD, NULL);
- }
-}
-
-EOLIAN static Evas_Canvas3D_Node *
-_evas_canvas3d_node_billboard_target_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->billboard_target;
-}
-
-EOLIAN static void
-_evas_canvas3d_node_lod_enable_set(Eo *obj, Evas_Canvas3D_Node_Data *pd,
- Eina_Bool enable)
-{
- pd->lod = enable;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_NODE_LOD, NULL);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_node_lod_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Node_Data *pd)
-{
- return pd->lod;
-}
-#include "canvas/evas_canvas3d_node.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_node.eo b/src/lib/evas/canvas/evas_canvas3d_node.eo
deleted file mode 100644
index 900bbd6b53..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_node.eo
+++ /dev/null
@@ -1,368 +0,0 @@
-import evas_canvas3d_types;
-
-class @beta Evas.Canvas3D.Node extends Evas.Canvas3D.Object
-{
- [[Evas 3D canvas node class]]
- data: Evas_Canvas3D_Node_Data;
- methods {
- @property node_type {
- [[Get the type of the given node.
-
- See also @Evas.Canvas3D.Node.member_add.]]
- set {
- [[Type can only be set before finalize.]]
- }
- get {
- [[If the object is not node object, returns $unknown.]]
- }
- values {
- type: Evas.Canvas3D.Node_Type(Evas.Canvas3D.Node_Type.unknown); [[Node type]]
- }
- }
- member_add {
- [[Add a member node to the given node.
-
- Nodes can be constructed into N-ary tree structure like other ordinary scene
- graphs. A node inherit transforms from its parent.
-
- See also @Evas.Canvas3D.Node.parent_get.]]
-
- params {
- @in member: Evas.Canvas3D.Node; [[Node object to be added.]]
- }
- }
- member_del {
- [[Delete a member node from the given node.
-
- See also @Evas.Canvas3D.Node.member_add.]]
- params {
- @in member: Evas.Canvas3D.Node; [[Member node to be deleted from the given node.]]
- }
- }
-
- parent_get @const {
- [[Get the parent node of the given node.
-
- See also @Evas.Canvas3D.Node.member_add.]]
- return: Evas.Canvas3D.Node; [[The parent node of the given node.]]
- }
-
- member_list_get @const {
- [[Get the list of member nodes of the given node.
-
- See also @Evas.Canvas3D.Node.member_add.]]
- return: const(list<Evas.Canvas3D.Node>); [[The list of member nodes if any or $null if there are none.]]
- }
- scene_root_get {
- [[Get hash table of scenes using this node as root.]]
- /* FIXME: void_ptr is actually uintptr and that is also wrong */
- return: hash<Evas.Canvas3D.Object, void_ptr>; [[ scenes using this node as root. FIXME: Actually a scene, not object.]]
- }
- position_set {
- [[Set the position of the given node.
-
- According to the inheritance flag, (x, y, z) can be a world space position or
- parent space position.
-
- Default position is (0.0, 0.0, 0.0).
-
- See also @Evas.Canvas3D.Node.position_inherit.set.]]
- params {
- @in x: Evas.Real; [[X coordinate of the position.]]
- @in y: Evas.Real; [[Y coordinate of the position.]]
- @in z: Evas.Real; [[Z coordinate of the position.]]
- }
- }
- orientation_set {
- [[Set the orientation of the given node using quaternion.
-
- According the the inheritance flag, (w, x, y, z) can be a world space
- orientation or parent space orientation.
-
- Default orientation is (1.0, 0.0, 0.0, 0.0) (identity quaternion).
-
- See also @Evas.Canvas3D.Node.orientation_inherit.set.]]
- params {
- @in x: Evas.Real; [[X term of the orientation quaternion (w, x, y, z.]]
- @in y: Evas.Real; [[Y term of the orientation quaternion (w, x, y, z.]]
- @in z: Evas.Real; [[Z term of the orientation quaternion (w, x, y, z.]]
- @in w: Evas.Real; [[W term of the orientation quaternion (w, x, y, z.]]
- }
- }
-
- orientation_angle_axis_set {
- [[Set the orientation of the given node using axis-angle.
-
- See also @Evas.Canvas3D.Node.orientation_set.]]
- params {
- @in angle: Evas.Real; [[Rotation angle.]]
- @in x: Evas.Real; [[X term of the rotation axis.]]
- @in y: Evas.Real; [[Y term of the rotation axis.]]
- @in z: Evas.Real; [[Z term of the rotation axis.]]
- }
- }
-
- scale_set {
- [[Set the scale of the given node.
-
- According to the inheritance flag, (x, y, z) can be a world space scale or
- parent space scale. Be careful when using non-uniform scale factor with
- inheritance, each transform attributes are not affected by other attributes.
-
- Default scale is (1.0, 1.0, 1.0).
-
- See also @Evas.Canvas3D.Node.scale_inherit.set.]]
- params {
- @in x: Evas.Real; [[Scale factor along X-axis.]]
- @in y: Evas.Real; [[Scale factor along Y-axis.]]
- @in z: Evas.Real; [[Scale factor along Z-axis.]]
- }
- }
-
- position_get @const {
- [[Get the position of the given node.
-
- See also @Evas.Canvas3D.Node.position_set.]]
- params {
- @in space: Evas.Canvas3D.Space; [[The given node.]]
- @out x: Evas.Real; [[Pointer to receive X coordinate of the position.]]
- @out y: Evas.Real; [[Pointer to receive Y coordinate of the position.]]
- @out z: Evas.Real; [[Pointer to receive Z coordinate of the position.]]
- }
- }
-
- orientation_get @const {
- [[Get the orientation of the given node as quaternion.
-
- See also @Evas.Canvas3D.Node.orientation_set.]]
- params {
- @in space: Evas.Canvas3D.Space; [[The given node.]]
- @out x: Evas.Real; [[Pointer to receive X term of the orientation quaternion.]]
- @out y: Evas.Real; [[Pointer to receive Y term of the orientation quaternion.]]
- @out z: Evas.Real; [[Pointer to receive Z term of the orientation quaternion.]]
- @out w: Evas.Real; [[Pointer to receive W term of the orientation quaternion.]]
- }
- }
-
- scale_get @const {
- [[Get the scale of the given node.
-
- See also @Evas.Canvas3D.Node.scale_get.]]
- params {
- @in space: Evas.Canvas3D.Space; [[The given node.]]
- @out x: Evas.Real; [[Pointer to receive Scale factor along X-axis.]]
- @out y: Evas.Real; [[Pointer to receive Scale factor along X-axis.]]
- @out z: Evas.Real; [[Pointer to receive Scale factor along X-axis.]]
- }
- }
-
- look_at_set {
- [[Rotate the given node to look at desired position.
-
- This function rotate the given node so that its forward vector (negative
- Z-axis) points to the desired position and the up vector coincide with the
- given up vector.
-
- See also @Evas.Canvas3D.Node.orientation_set.]]
- params {
- @in target_space: Evas.Canvas3D.Space; [[Space where the target position belongs to.]]
- @in x: Evas.Real; [[X coordinate of the target position.]]
- @in y: Evas.Real; [[Y coordinate of the target position.]]
- @in z: Evas.Real; [[Z coordinate of the target position.]]
- @in up_space: Evas.Canvas3D.Space; [[Space where the up vector belongs to.]]
- @in ux: Evas.Real; [[X term of the up vector.]]
- @in uy: Evas.Real; [[Y term of the up vector.]]
- @in uz: Evas.Real; [[Z term of the up vector.]]
- }
- }
-
- mesh_add {
- [[Add a mesh to the given node.
-
- If the node is not of type EVAS_CANVAS3D_NODE_TYPE_MESH, error message will be
- generated and nothing happens.
-
- See also @Evas.Canvas3D.Node.member_add.]]
- params {
- @in mesh: Evas.Canvas3D.Mesh; [[The mesh to be added.]]
- }
- }
-
- mesh_del {
- [[Delete a mesh from the given node.
-
- If the node is not of type EVAS_CANVAS3D_NODE_TYPE_MESH or the given mesh does not
- belong to the given node, error message will be gnerated and nothing happens.
-
- See also @Evas.Canvas3D.Node.mesh_add.]]
- params {
- @in mesh: Evas.Canvas3D.Mesh; [[The mesh to be deleted.]]
- }
- }
-
- mesh_list_get @const {
- [[Get the list of meshes of the given node.
-
- If the node is not of type EVAS_CANVAS3D_NODE_TYPE_MESH, error message will be
- generated and $null will be returned. If there're no meshes in the given
- node, $null will be returned.
-
- See also @Evas.Canvas3D.Node.mesh_add.]]
- return: const(list<Evas.Canvas3D.Mesh>); [[The list of meshes if any, or $null if there're none.]]
- }
-
- bounding_box_get{
- [[Get axis-aligned bounding box (AABB) of the given node.]]
- params {
- @in x: ptr(Evas.Real); [[Pointer to receive X coordinate of the first point of AABB.]]
- @in y: ptr(Evas.Real); [[Pointer to receive Y coordinate of the first point of AABB.]]
- @in z: ptr(Evas.Real); [[Pointer to receive Z coordinate of the first point of AABB.]]
- @in x2: ptr(Evas.Real); [[Pointer to receive X coordinate of the second point of AABB.]]
- @in y2: ptr(Evas.Real); [[Pointer to receive Y coordinate of the second point of AABB.]]
- @in z2: ptr(Evas.Real); [[Pointer to receive Z coordinate of the second point of AABB.]]
- }
- }
-
- bounding_sphere_get {
- [[Get bounding sphere of the given node.]]
- params {
-
- @in x: ptr(Evas.Real); [[Pointer to receive X coordinate of the center of sphere.]]
- @in y: ptr(Evas.Real); [[Pointer to receive Y coordinate of the center of sphere.]]
- @in z: ptr(Evas.Real); [[Pointer to receive Z coordinate of center of sphere.]]
- @in r: ptr(Evas.Real); [[Pointer to receive radius of center of sphere.]]
- }
- }
-
- @property position_inherit {
- [[The position inheritance flag of the given node.
-
- When inheritance is enabled, a node's world space position is determined by
- adding the parent node's world position and the node's position. Otherwise
- the node's position will be the world space position.]]
- set {
- }
- get {
- }
- values {
- inherit: bool; [[Whether to inherit parent position.]]
- }
- }
-
- @property orientation_inherit {
- [[The orientation inheritance flag of the given node.
-
- When inheritance is enabled, a node's world space orientation is determined
- by multiplying the parent node's world orientation and the node's
- orientation. Otherwise the node's orientation will be the world space
- orientation.]]
- set {
- }
- get {
- }
- values {
- inherit: bool; [[Whether to inherit parent orientation.]]
- }
- }
-
- @property scale_inherit {
- [[The scale inheritance flag of the given node.
-
- When inheritance is enabled, a node's world space scale is determined by
- multiplying the parent node's world scale and the node's scale. Otherwise
- the node's scale will be the world space scale.]]
- set {
- }
- get {
- }
- values {
- inherit: bool; [[Whether to inherit parent scale.]]
- }
- }
-
- @property camera {
- [[A camera attached to the given node.
-
- If the node is not of type EVAS_CANVAS3D_NODE_TYPE_CAMERA, error message will be
- generated and nothing happens.
-
- See also @Evas.Canvas3D.Node.member_add.]]
- set {
- }
- get {
- }
- values {
- // FIXME: Evas_Canvas3D_Camera is necessary, but that introduces a cycle
- camera: Evas.Canvas3D.Object; [[The camera of the given node if any, or $null if there're none.]]
- }
- }
-
- @property light {
- [[A light attached to the given node.
-
- If the node is not of type EVAS_CANVAS3D_NODE_TYPE_LIGHT, error message will be
- generated and nothing happens.
-
- See also @Evas.Canvas3D.Node.member_add.]]
- set {
- }
- get {
- }
- values {
- light: Evas.Canvas3D.Light; [[The light of the given node if any, or $null if there're none.]]
- }
- }
-
- @property mesh_frame {
- [[The animation frame number of the given node for the given mesh.
-
- If the node is not of type EVAS_CANVAS3D_NODE_TYPE_MESH or the given mesh does not
- belong to the given mesh error mesh will be generated and nothing happens.
-
- Default mesh frame is 0.
-
- See also @Evas.Canvas3D.Node.mesh_add.]]
- set {
- }
- get {
- }
- keys {
- mesh: Evas.Canvas3D.Mesh; [[The given mesh.]]
- }
- values {
- frame: int; [[The animation frame number.]]
- }
- }
-
- @property billboard_target {
- [[Set behavior of node like billboard object.]]
- set {
- }
- get {
- }
- values {
- target: Evas.Canvas3D.Node; [[The pointer to target node for billboard object,
- or $null if there're none.]]
- }
- }
- @property lod_enable {
- [[Enable behavior of node like LOD object.]]
- set {
- }
- get {
- }
- values {
- enable: bool; [[status property (true/false)]]
- }
- }
- }
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- Efl.Object.finalize;
- Evas.Canvas3D.Object.update_notify;
- Evas.Canvas3D.Object.change_notify;
- Evas.Canvas3D.Object.callback_register;
- Evas.Canvas3D.Object.callback_unregister;
- }
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_node_callback.h b/src/lib/evas/canvas/evas_canvas3d_node_callback.h
deleted file mode 100644
index d310ade12a..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_node_callback.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*Type of events and callbacks for object Evas_Canvas3D_Node*/
-
-#define GET_CALLBACK_TYPE(check, type) \
- if (!(strcmp(type, "clicked"))) \
- check = PRIVATE_CALLBACK_CLICKED; \
- else if (!(strcmp(type, "collision"))) \
- check = PRIVATE_CALLBACK_COLLISION; \
- else \
- check = PRIVATE_CALLBACK_NONE;
-
-typedef enum _Evas_Canvas3D_Node_Private_Callback_Type
-{
- PRIVATE_CALLBACK_CLICKED = 0,
- PRIVATE_CALLBACK_COLLISION,
- /*Insert here new type of callback*/
- PRIVATE_CALLBACK_NONE
-} Evas_Canvas3D_Node_Private_Callback_Type;
-
-const Efl_Event_Description evas_canvas3d_node_private_event_desc[] =
-{
- EFL_EVENT_DESCRIPTION("clicked,private"),
- EFL_EVENT_DESCRIPTION("collision,private")
-};
-
-/*Private callbacks */
-static void
-_evas_canvas3d_node_private_callback_clicked(void *data, const Efl_Event *event);
-static void
-_evas_canvas3d_node_private_callback_collision(void *data, const Efl_Event *event);
-
-Efl_Event_Cb evas_canvas3d_node_private_callback_functions[] =
-{
- _evas_canvas3d_node_private_callback_clicked,
- _evas_canvas3d_node_private_callback_collision,
-};
-
diff --git a/src/lib/evas/canvas/evas_canvas3d_object.c b/src/lib/evas/canvas/evas_canvas3d_object.c
deleted file mode 100644
index aca9839e51..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_object.c
+++ /dev/null
@@ -1,101 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_OBJECT_CLASS
-
-EOLIAN static Eo *
-_evas_canvas3d_object_efl_object_constructor(Eo *obj, Evas_Canvas3D_Object_Data *pd)
-{
- Eo *e = NULL;
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- e = efl_parent_get(obj);
- pd->evas = e;
- pd->type = EVAS_CANVAS3D_OBJECT_TYPE_INVALID;
- memset(&pd->dirty[0], 0x00, sizeof(Eina_Bool) * EVAS_CANVAS3D_STATE_MAX);
-
- return obj;
-}
-
-EOLIAN static Evas *
- _evas_canvas3d_object_efl_object_provider_find(const Eo *obj, Evas_Canvas3D_Object_Data *pd, const Efl_Class *klass)
-{
- if (klass == EVAS_CANVAS_CLASS)
- return pd->evas;
- return efl_provider_find(efl_super(obj, MY_CLASS), klass);
-}
-
-EOLIAN static void
-_evas_canvas3d_object_type_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Object_Data *pd, Evas_Canvas3D_Object_Type type)
-{
- pd->type = type;
-}
-
-EOLIAN static Evas_Canvas3D_Object_Type
-_evas_canvas3d_object_type_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Object_Data *pd)
-{
- return pd->type;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_object_dirty_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Object_Data *pd, Evas_Canvas3D_State state)
-{
- return pd->dirty[state];
-}
-
-EOLIAN static void
-_evas_canvas3d_object_change(Eo *obj, Evas_Canvas3D_Object_Data *pd, Evas_Canvas3D_State state, Evas_Canvas3D_Object *ref)
-{
- /* Skip already dirty properties. */
- if (pd->dirty[state])
- return;
-
- pd->dirty[state] = EINA_TRUE;
- pd->dirty[EVAS_CANVAS3D_STATE_ANY] = EINA_TRUE;
-
- evas_canvas3d_object_change_notify(obj, state, ref);
-}
-
-EOLIAN static void
-_evas_canvas3d_object_update(Eo *obj, Evas_Canvas3D_Object_Data *pd)
-{
- if (!pd->dirty[EVAS_CANVAS3D_STATE_ANY])
- return;
-
- evas_canvas3d_object_update_notify(obj);
-
- memset(&pd->dirty[0], 0x00, sizeof(Eina_Bool) * EVAS_CANVAS3D_STATE_MAX);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_object_efl_object_event_callback_priority_add(Eo *obj,
- Evas_Canvas3D_Object_Data *pd EINA_UNUSED,
- const Efl_Event_Description *desc,
- Efl_Callback_Priority priority,
- Efl_Event_Cb func,
- const void *user_data)
-{
- Eina_Bool r = EINA_FALSE;
-
- r = efl_event_callback_priority_add(efl_super(obj, MY_CLASS), desc, priority, func, user_data);
- evas_canvas3d_object_callback_register(obj, desc->name, user_data);
-
- return r;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_object_efl_object_event_callback_del(Eo *obj, Evas_Canvas3D_Object_Data *pd EINA_UNUSED,
- const Efl_Event_Description *desc,
- Efl_Event_Cb func,
- const void *user_data)
-{
- Eina_Bool r = EINA_FALSE;
- r = efl_event_callback_del(efl_super(obj, MY_CLASS), desc, func, user_data);
- if (r) evas_canvas3d_object_callback_unregister(obj, desc->name);
- return r;
-}
-
-#define EVAS_CANVAS3D_OBJECT_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_event_callback_priority_add, _evas_canvas3d_object_efl_object_event_callback_priority_add), \
- EFL_OBJECT_OP_FUNC(efl_event_callback_del, _evas_canvas3d_object_efl_object_event_callback_del)
-
-#include "canvas/evas_canvas3d_object.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_object.eo b/src/lib/evas/canvas/evas_canvas3d_object.eo
deleted file mode 100644
index c058cda77f..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_object.eo
+++ /dev/null
@@ -1,77 +0,0 @@
-import evas_canvas3d_types;
-
-abstract @beta Evas.Canvas3D.Object extends Efl.Object
-{
- [[Evas 3D canvas object class]]
- data: Evas_Canvas3D_Object_Data;
- methods {
- change {
- [[Notify the object regarding its state change.]]
- params {
- @in state: Evas.Canvas3D.State; [[State that is changed.]]
- @in ref: Evas.Canvas3D.Object; [[The Object that caused the change.]]
- }
- }
- type_get @const {
- [[Returns the type of the object.]]
- return: Evas.Canvas3D.Object_Type; [[Object type]]
- }
-
- type_set {
- [[Sets the type of the object.]]
- params{
- @in type: Evas.Canvas3D.Object_Type; [[Object type]]
- }
- }
-
- dirty_get @const {
- [[Returns the status of a particular state of the object.]]
- return: bool; [[$true if the status is dirty, $false otherwise]]
- params {
- @in state: Evas.Canvas3D.State; [[State whose status is being asked.]]
- }
- }
-
- update {
- [[Update request for the object.]]
- }
- update_notify @pure_virtual {
- [[Pure virtual update_notify function.
-
- Update request for the object.]]
- }
-
- change_notify @pure_virtual {
- [[Pure virtual change_notify function.
-
- Update request for the object.]]
- params {
- @in state: Evas.Canvas3D.State; [[State that is changed.]]
- @in ref: Evas.Canvas3D.Object; [[The Object that caused the change.]]
- }
- }
- callback_register @pure_virtual {
- [[Pure virtual register samrt callback function.]]
- params {
- @in event: string; [[Event type.]]
- @in data: const(void_ptr); [[User data.]]
- }
- }
- callback_unregister @pure_virtual {
- [[Pure virtual unregister smart callback function.]]
- params {
- @in event: string; [[Event type.]]
- }
- }
- }
-
- implements {
- Efl.Object.constructor;
- Efl.Object.provider_find;
- }
- events {
- /* FIXME: Make sure that these two events are actually being emitted */
- clicked: Evas.Canvas3D.Node; [[Clicked Event.]]
- collision: Evas.Canvas3D.Node; [[Collision Event.]]
- }
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_primitive.c b/src/lib/evas/canvas/evas_canvas3d_primitive.c
deleted file mode 100644
index 45625df424..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_primitive.c
+++ /dev/null
@@ -1,152 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_PRIMITIVE_CLASS
-
-static inline void
-_primitive_init(Evas_Canvas3D_Primitive_Data *pd)
-{
- pd->form = EVAS_CANVAS3D_MESH_PRIMITIVE_NONE;
- pd->ratio = 3.0;
- pd->precision = 10;
- pd->surface = NULL;
- pd->tex_scale.x = 1.0;
- pd->tex_scale.y = 1.0;
-}
-
-EAPI Evas_Canvas3D_Primitive *
-evas_canvas3d_primitive_add(Evas *e)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e);
-}
-
-EOLIAN static Eo *
-_evas_canvas3d_primitive_efl_object_constructor(Eo *obj, Evas_Canvas3D_Primitive_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_PRIMITIVE);
- _primitive_init(pd);
-
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_efl_object_destructor(Eo *obj, Evas_Canvas3D_Primitive_Data *pd EINA_UNUSED)
-{
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_form_set(Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd,
- Evas_Canvas3D_Mesh_Primitive form)
-{
- if (form >= EVAS_CANVAS3D_MESH_PRIMITIVE_COUNT)
- {
- ERR("Wrong form of primitive.");
- return;
- }
-
- if (pd->form != form)
- pd->form = form;
-}
-
-EOLIAN static Evas_Canvas3D_Mesh_Primitive
-_evas_canvas3d_primitive_form_get(const Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd)
-{
- return pd->form;
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_mode_set(Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd,
- Evas_Canvas3D_Primitive_Mode mode)
-{
- if (pd->mode != mode)
- pd->mode = mode;
-}
-
-EOLIAN static Evas_Canvas3D_Primitive_Mode
-_evas_canvas3d_primitive_mode_get(const Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd)
-{
- return pd->mode;
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_ratio_set(Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd,
- Evas_Real ratio)
-{
- pd->ratio = ratio;
-}
-
-EOLIAN static Evas_Real
-_evas_canvas3d_primitive_ratio_get(const Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd)
-{
- return pd->ratio;
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_precision_set(Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd,
- int precision)
-{
- if ((precision < 3))
- {
- ERR("Precision of Evas_Canvas3D_Primitive cannot be less than 3.");
- return;
- }
-
- if ((precision >= 100))
- {
- ERR("%s\n%s",
- "Be careful with precision of Evas_Canvas3D_Primitive more than 100.",
- "It can give unacceptable result.");
- }
-
- if (pd->precision != precision)
- pd->precision = precision;
-}
-
-EOLIAN static int
-_evas_canvas3d_primitive_precision_get(const Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd)
-{
- return pd->precision;
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_surface_set(Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd,
- Evas_Canvas3D_Surface_Func surface_func)
-{
- pd->surface = surface_func;
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_tex_scale_set(Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd,
- Evas_Real x,
- Evas_Real y)
-{
- if (!EINA_DBL_EQ(x, 0.0)) pd->tex_scale.x = x;
- if (!EINA_DBL_EQ(y, 0.0)) pd->tex_scale.y = y;
-}
-
-EOLIAN static void
-_evas_canvas3d_primitive_tex_scale_get(const Eo *obj EINA_UNUSED,
- Evas_Canvas3D_Primitive_Data *pd,
- Evas_Real *x,
- Evas_Real *y)
-{
- if (x) *x = pd->tex_scale.x;
- if (y) *y = pd->tex_scale.y;
-}
-
-#include "canvas/evas_canvas3d_primitive.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_primitive.eo b/src/lib/evas/canvas/evas_canvas3d_primitive.eo
deleted file mode 100644
index 3e21f0e4d5..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_primitive.eo
+++ /dev/null
@@ -1,130 +0,0 @@
-import evas_canvas3d_types;
-
-class @beta Evas.Canvas3D.Primitive extends Evas.Canvas3D.Object
-{
- [[Evas 3D canvas primitive class]]
- data: Evas_Canvas3D_Primitive_Data;
-
- methods {
- @property form {
- [[The form of the given primitive.
-
- Form defines which function will be chosen to set data to mesh
- on call of evas_canvas3d_mesh_primitive_set.
-
- Now available next forms of primitives are tabulated primitives (SQUARE and CUBE),
- solids of revolution (CYLINDER, CONE, SPHERE and TORUS) and surfaces (SURFACE and TERRAIN).
-
- Default form is EVAS_CANVAS3D_MESH_PRIMITIVE_NONE.]]
- set {
- }
- get {
- }
- values {
- form: Evas.Canvas3D.Mesh_Primitive; [[Form of primitive.]]
- }
- }
- @property mode {
- [[The mode of the given primitive.
-
- Mode defines which function will be chosen to set data to mesh
- on call of evas_canvas3d_mesh_primitive_set. It helps to choose
- an alternative algorithm for primitives with a given form,
- such as a cone without a base or sphere textured in alternative way.
-
- Mods of primitives are now available
- without base (bases) (supported for cylinder and cone) and
- with alternative UV (supported by sphere).
-
- Default form is EVAS_CANVAS3D_PRIMITIVE_MODE_DEFAULT.]]
- set {
- }
- get {
- }
- values {
- mode: Evas.Canvas3D.Primitive_Mode; [[Mode of primitive.]]
- }
- }
- @property ratio {
- [[The ratio of the given primitive.
-
- Ratio is used only in torus as the ratio of the
- major radius and minor radius. For this usage
- Available values is from 1.0 to infinity.
- If ratio for torus has a bad value,
- 3.0 will be used as the ratio.
-
- Default ratio is 3.0.]]
- set {
- }
- get {
- }
- values {
- ratio: Evas.Real; [[Ratio of primitive.]]
- }
- }
- @property precision {
- [[The precision of the given primitive.
-
- Precision is used in all non tabulated primitives and defines
- the precision of created primitives.
- Available values range from 3 to infinity.
- If the value is more than 100, you may see a warning
- about possibility of incorrect values or slow processing.
-
- Default ratio is 10.]]
- set {
- }
- get {
- }
- values {
- precision: int; [[Precision of primitive.]]
- }
- }
- @property surface {
- [[The surface of the given primitive.
-
- Surface is used only in surface primitives and defines
- the equation of filling mesh data on call of
- evas_canvas3d_mesh_primitive_set.
-
- This allows you to create customers primitives like
- shell, heart, hyperbolic paraboloid etc. See _shell_func in
- examples/evas/evas-3d-visual-test.c or _perlin_terrain in
- modules/evas/primitives/surfaces/terrain.c for usage examples.
-
- Default surface is $null]]
- set {
- }
- values {
- surface: ptr(Evas.Canvas3D.Surface_Func); [[Pointer to customers surface function.]]
- }
- }
- @property tex_scale {
- [[The texture scale of the given primitive.
-
- Texture scale uses in all non tabulated primitives
- and defines scale of texture coordinates or primitives.
-
- It uses to create periodical textured meshes.
-
- Default tex_scale is {1.0, 1.0}]]
- set {
- }
- get {
- }
- values {
- tex_scale_x: Evas.Real; [[Texture scale X coordinate]]
- tex_scale_y: Evas.Real; [[Texture scale Y coordinate]]
- }
- }
- }
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- @empty Evas.Canvas3D.Object.update_notify;
- @empty Evas.Canvas3D.Object.change_notify;
- @empty Evas.Canvas3D.Object.callback_register;
- @empty Evas.Canvas3D.Object.callback_unregister;
- }
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_scene.c b/src/lib/evas/canvas/evas_canvas3d_scene.c
deleted file mode 100644
index 725996ee96..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_scene.c
+++ /dev/null
@@ -1,839 +0,0 @@
-#include "eo_internal.h"
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_SCENE_CLASS
-
-void
-evas_canvas3d_scene_data_init(Evas_Canvas3D_Scene_Public_Data *data)
-{
- data->camera_node = NULL;
- data->light_nodes = NULL;
- data->mesh_nodes = NULL;
- data->node_mesh_colors = NULL;
- data->colors_node_mesh = NULL;
- data->render_to_texture = EINA_FALSE;
- data->lod_distance = 0;
- data->post_processing = EINA_FALSE;
- data->post_processing_type = EVAS_CANVAS3D_SHADER_MODE_POST_PROCESSING_FXAA;
-}
-
-void
-evas_canvas3d_scene_data_fini(Evas_Canvas3D_Scene_Public_Data *data)
-{
- if (data->light_nodes)
- eina_list_free(data->light_nodes);
-
- if (data->mesh_nodes)
- eina_list_free(data->mesh_nodes);
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_evas_canvas3d_object_change_notify(Eo *eo_obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd,
- Evas_Canvas3D_State state EINA_UNUSED,
- Evas_Canvas3D_Object *ref EINA_UNUSED)
-{
- Eina_List *l;
- Evas_Object *eo;
-
- EINA_LIST_FOREACH(pd->images, l, eo)
- {
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
- evas_object_change(eo, obj);
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_evas_canvas3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd)
-{
- if (pd->root_node)
- {
- evas_canvas3d_object_update(pd->root_node);
- }
-
- if (pd->camera_node)
- {
- evas_canvas3d_object_update(pd->camera_node);
- }
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_UPDATED, NULL);
-}
-
-EAPI Evas_Canvas3D_Scene *
-evas_canvas3d_scene_add(Evas *e)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e);
-}
-
-EOLIAN static Eo *
-_evas_canvas3d_scene_efl_object_constructor(Eo *obj, Evas_Canvas3D_Scene_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_SCENE);
- evas_color_set(&pd->bg_color, 0.0, 0.0, 0.0, 0.0);
- pd->shadows_enabled = EINA_FALSE;
- pd->color_pick_enabled = EINA_FALSE;
- pd->node_mesh_colors = NULL;
- pd->colors_node_mesh = NULL;
- pd->depth_offset = 4.0;
- pd->depth_constant = 100.0;
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_root_node_set(Eo *obj, Evas_Canvas3D_Scene_Data *pd, Evas_Canvas3D_Node *node)
-{
- if (pd->root_node == node)
- return;
-
- if (pd->root_node)
- {
- evas_canvas3d_node_scene_root_del(pd->root_node, obj);
- efl_unref(pd->root_node);
- }
-
- pd->root_node = node;
-
- if (node)
- {
- efl_ref(node);
- evas_canvas3d_node_scene_root_add(node, obj);
- }
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_ROOT_NODE, NULL);
-}
-
-EOLIAN static Evas_Canvas3D_Node *
-_evas_canvas3d_scene_root_node_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd)
-{
- return pd->root_node;
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_camera_node_set(Eo *obj, Evas_Canvas3D_Scene_Data *pd, Evas_Canvas3D_Node *node)
-{
- if (pd->camera_node == node)
- return;
-
- if (pd->camera_node)
- {
- evas_canvas3d_node_scene_camera_del(pd->camera_node, obj);
- }
-
- pd->camera_node = node;
-
- if (node)
- {
- evas_canvas3d_node_scene_camera_add(node, obj);
- }
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_CAMERA_NODE, NULL);
-}
-
-EOLIAN static Evas_Canvas3D_Node *
-_evas_canvas3d_scene_camera_node_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd)
-{
- return pd->camera_node;
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_size_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd, int w, int h)
-{
- pd->w = w;
- pd->h = h;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_SIZE, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_size_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd, int *w, int *h)
-{
- if (w) *w = pd->w;
- if (h) *h = pd->h;
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_background_color_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd,
- Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
-{
- evas_color_set(&pd->bg_color, r, g, b, a);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_BACKGROUND_COLOR, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_background_color_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd,
- Evas_Real *r, Evas_Real *g, Evas_Real *b, Evas_Real *a)
-{
- if (r) *r = pd->bg_color.r;
- if (g) *g = pd->bg_color.g;
- if (b) *b = pd->bg_color.b;
- if (a) *a = pd->bg_color.a;
-}
-
-static inline Eina_Bool
-_pick_data_triangle_add(Evas_Canvas3D_Pick_Data *data, const Evas_Ray3 *ray,
- const Evas_Triangle3 *tri)
-{
- Eina_Vector3 e1, e2, tvec, pvec, qvec;
- Evas_Real det, inv_det, u, v, t;
-
- eina_vector3_subtract(&e1, &tri->p1, &tri->p0);
- eina_vector3_subtract(&e2, &tri->p2, &tri->p0);
-
- eina_vector3_cross_product(&pvec, &ray->dir, &e2);
- det = eina_vector3_dot_product(&e1, &pvec);
-
- /* If determinant is near zero, ray lies in plane of triangle. */
- if (det > -0.0000001 && det < 0.0000001)
- return EINA_FALSE;
-
- inv_det = 1.0 / det;
-
- /* Calculate distance from p0 to ray origin. */
- eina_vector3_subtract(&tvec, &ray->org, &tri->p0);
-
- /* Calculate U parameter and test bounds. */
- u = eina_vector3_dot_product(&tvec, &pvec) * inv_det;
-
- if (u < 0.0 || u > 1.0)
- return EINA_FALSE;
-
- /* Prepare to tst V parameter. */
- eina_vector3_cross_product(&qvec, &tvec, &e1);
-
- /* Calculate V parameter and test bounds. */
- v = eina_vector3_dot_product(&ray->dir, &qvec) * inv_det;
-
- if (v < 0.0 || u + v > 1.0)
- return EINA_FALSE;
-
- /* Calculate T parameter and test bounds. */
- t = eina_vector3_dot_product(&e2, &qvec) * inv_det;
-
- if (t >= 0.0 && t <= 1.0)
- {
- if (!data->picked || t < data->z)
- {
- data->picked = EINA_TRUE;
- data->z = t;
- data->u = u;
- data->v = v;
- return EINA_TRUE;
- }
- }
-
- return EINA_FALSE;
-}
-
-static inline void
-_pick_data_texcoord_update(Evas_Canvas3D_Pick_Data *data,
- const Evas_Canvas3D_Vertex_Buffer *tex0, const Evas_Canvas3D_Vertex_Buffer *tex1,
- Evas_Real weight, unsigned int i0, unsigned int i1, unsigned int i2)
-{
- Evas_Real s0, s1, s2;
- Evas_Real t0, t1, t2;
-
- if (tex1->data == NULL)
- {
- float *ptr;
-
- ptr = (float *)((char *)tex0->data + tex0->stride * i0);
-
- s0 = ptr[0];
- t0 = ptr[1];
-
- ptr = (float *)((char *)tex0->data + tex0->stride * i1);
-
- s1 = ptr[0];
- t1 = ptr[1];
-
- ptr = (float *)((char *)tex0->data + tex0->stride * i2);
-
- s2 = ptr[0];
- t2 = ptr[1];
- }
- else
- {
- float *ptr0, *ptr1;
-
- ptr0 = (float *)((char *)tex0->data + tex0->stride * i0);
- ptr1 = (float *)((char *)tex1->data + tex1->stride * i0);
-
- s0 = ptr0[0] * weight + ptr1[0] * (1.0 - weight);
- t0 = ptr0[1] * weight + ptr1[1] * (1.0 - weight);
-
- ptr0 = (float *)((char *)tex0->data + tex0->stride * i1);
- ptr1 = (float *)((char *)tex1->data + tex1->stride * i1);
-
- s1 = ptr0[0] * weight + ptr1[0] * (1.0 - weight);
- t1 = ptr0[1] * weight + ptr1[1] * (1.0 - weight);
-
- ptr0 = (float *)((char *)tex0->data + tex0->stride * i2);
- ptr1 = (float *)((char *)tex1->data + tex1->stride * i2);
-
- s2 = ptr0[0] * weight + ptr1[0] * (1.0 - weight);
- t2 = ptr0[1] * weight + ptr1[1] * (1.0 - weight);
- }
-
- data->s = s0 * (1 - data->u - data->v) + s1 * data->u + s2 * data->v;
- data->t = t0 * (1 - data->u - data->v) + t1 * data->u + t2 * data->v;
-}
-
-
-static inline Eina_Bool
-_pick_data_mesh_add(Evas_Canvas3D_Pick_Data *data, const Evas_Ray3 *ray,
- Evas_Canvas3D_Mesh *mesh, int frame, Evas_Canvas3D_Node *node)
-{
- Evas_Canvas3D_Vertex_Buffer pos0, pos1, tex0, tex1;
- Evas_Real pos_weight, tex_weight;
- Evas_Triangle3 tri;
- int i;
-
- memset(&pos0, 0x00, sizeof(Evas_Canvas3D_Vertex_Buffer));
- memset(&pos1, 0x00, sizeof(Evas_Canvas3D_Vertex_Buffer));
- memset(&tex0, 0x00, sizeof(Evas_Canvas3D_Vertex_Buffer));
- memset(&tex1, 0x00, sizeof(Evas_Canvas3D_Vertex_Buffer));
-
- evas_canvas3d_mesh_interpolate_vertex_buffer_get(mesh, frame, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION,
- &pos0, &pos1, &pos_weight);
-
- evas_canvas3d_mesh_interpolate_vertex_buffer_get(mesh, frame, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD,
- &tex0, &tex1, &tex_weight);
- Evas_Canvas3D_Mesh_Data *pdmesh = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
- if (pdmesh->indices)
- {
- unsigned int i0, i1, i2;
-
- if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES)
- {
- for (i = 0; i < pdmesh->index_count; i += 3)
- {
- if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- {
- i0 = ((unsigned short *)pdmesh->indices)[i];
- i1 = ((unsigned short *)pdmesh->indices)[i + 1];
- i2 = ((unsigned short *)pdmesh->indices)[i + 2];
- }
- else
- {
- i0 = ((unsigned char *)pdmesh->indices)[i];
- i1 = ((unsigned char *)pdmesh->indices)[i + 1];
- i2 = ((unsigned char *)pdmesh->indices)[i + 2];
- }
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p0, &pos0, &pos1, pos_weight, i0);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p1, &pos0, &pos1, pos_weight, i1);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i2);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i0, i1, i2);
- data->mesh = mesh;
- data->node = node;
- return EINA_TRUE;
- }
- }
- }
- else if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_STRIP)
- {
- if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- {
- i1 = ((unsigned short *)pdmesh->indices)[0];
- i2 = ((unsigned short *)pdmesh->indices)[1];
- }
- else
- {
- i1 = ((unsigned char *)pdmesh->indices)[0];
- i2 = ((unsigned char *)pdmesh->indices)[1];
- }
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p1, &pos0, &pos1, pos_weight, i1);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i2);
-
- for (i = 0; i < pdmesh->index_count - 2; i++)
- {
- tri.p0 = tri.p1;
- tri.p1 = tri.p2;
-
- if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- i2 = ((unsigned short *)pdmesh->indices)[i + 2];
- else
- i2 = ((unsigned char *)pdmesh->indices)[i + 2];
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i2);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- {
- i0 = ((unsigned short *)pdmesh->indices)[i];
- i1 = ((unsigned short *)pdmesh->indices)[i + 1];
- }
- else
- {
- i0 = ((unsigned char *)pdmesh->indices)[i];
- i1 = ((unsigned char *)pdmesh->indices)[i + 1];
- }
-
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i0, i1, i2);
- data->mesh = mesh;
- data->node = node;
- return EINA_TRUE;
- }
- }
- }
- else if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_FAN)
- {
- if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- {
- i0 = ((unsigned short *)pdmesh->indices)[0];
- i2 = ((unsigned short *)pdmesh->indices)[1];
- }
- else
- {
- i0 = ((unsigned char *)pdmesh->indices)[0];
- i2 = ((unsigned char *)pdmesh->indices)[1];
- }
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p0, &pos0, &pos1, pos_weight, i0);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i2);
-
- for (i = 1; i < pdmesh->index_count - 1; i++)
- {
- tri.p1 = tri.p2;
-
- if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- i2 = ((unsigned short *)pdmesh->indices)[i + 1];
- else
- i2 = ((unsigned char *)pdmesh->indices)[i + 1];
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i2);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- i1 = ((unsigned short *)pdmesh->indices)[i];
- else
- i1 = ((unsigned char *)pdmesh->indices)[i];
-
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i0, i1, i2);
- data->mesh = mesh;
- data->node = node;
- }
- }
- }
- }
- else if (pdmesh->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_BYTE)
- {
- if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES)
- {
- for (i = 0; i < pdmesh->index_count; i += 3)
- {
- evas_canvas3d_mesh_interpolate_position_get(&tri.p0, &pos0, &pos1, pos_weight, i);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p1, &pos0, &pos1, pos_weight, i + 1);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i + 2);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
- data->mesh = mesh;
- data->node = node;
- }
- }
- }
- else if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_STRIP)
- {
- evas_canvas3d_mesh_interpolate_position_get(&tri.p1, &pos0, &pos1, pos_weight, 0);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, 1);
-
- for (i = 0; i < pdmesh->index_count - 2; i++)
- {
- tri.p0 = tri.p1;
- tri.p1 = tri.p2;
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i + 2);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
- data->mesh = mesh;
- data->node = node;
- }
- }
- }
- else if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_FAN)
- {
- evas_canvas3d_mesh_interpolate_position_get(&tri.p0, &pos0, &pos1, pos_weight, 0);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, 1);
-
- for (i = 1; i < pdmesh->index_count - 1; i++)
- {
- tri.p1 = tri.p2;
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i + 1);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, 0, i, i + 1);
- data->mesh = mesh;
- data->node = node;
- }
- }
- }
- }
- else if ((EINA_DBL_EQ(pdmesh->index_count, 0.0)) &&
- pdmesh->vertex_count != 0)
- {
- if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES)
- {
- for (i = 0; i < pdmesh->vertex_count; i += 3)
- {
- evas_canvas3d_mesh_interpolate_position_get(&tri.p0, &pos0, &pos1, pos_weight, i);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p1, &pos0, &pos1, pos_weight, i + 1);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i + 2);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
- data->mesh = mesh;
- data->node = node;
- }
- }
- }
- else if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_STRIP)
- {
- evas_canvas3d_mesh_interpolate_position_get(&tri.p1, &pos0, &pos1, pos_weight, 0);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, 1);
-
- for (i = 0; i < pdmesh->vertex_count - 2; i++)
- {
- tri.p0 = tri.p1;
- tri.p1 = tri.p2;
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i + 2);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, i, i + 1, i + 2);
- data->mesh = mesh;
- data->node = node;
- return EINA_TRUE;
- }
- }
- }
- else if (pdmesh->assembly == EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_FAN)
- {
- evas_canvas3d_mesh_interpolate_position_get(&tri.p0, &pos0, &pos1, pos_weight, 0);
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, 1);
-
- for (i = 1; i < pdmesh->vertex_count - 1; i++)
- {
- tri.p1 = tri.p2;
-
- evas_canvas3d_mesh_interpolate_position_get(&tri.p2, &pos0, &pos1, pos_weight, i + 1);
-
- if (_pick_data_triangle_add(data, ray, &tri))
- {
- if (tex0.data)
- _pick_data_texcoord_update(data, &tex0, &tex1, tex_weight, 0, i, i + 1);
- data->mesh = mesh;
- data->node = node;
- return EINA_TRUE;
- }
- }
- }
- }
- return EINA_FALSE;
-}
-
-Eina_Bool
-_node_pick(Evas_Canvas3D_Node *node, void *data)
-{
- Evas_Ray3 ray;
- Evas_Canvas3D_Pick_Data *pick = (Evas_Canvas3D_Pick_Data *)data;
- Eina_Matrix4 mvp;
- Evas_Canvas3D_Node_Data *pd_node = efl_data_scope_get(node, EVAS_CANVAS3D_NODE_CLASS);
-
- evas_canvas3d_node_tree_traverse(node, EVAS_CANVAS3D_TREE_TRAVERSE_POST_ORDER, EINA_FALSE,
- node_aabb_update, NULL);
-
- if (! evas_box3_ray3_intersect(&pd_node->aabb, &pick->ray_world))
- {
- /* Skip entire subtree. */
- return EINA_FALSE;
- }
-
- if (pd_node->type == EVAS_CANVAS3D_NODE_TYPE_MESH)
- {
- Eina_Iterator *itr;
- void *ptr;
-
- /* Transform ray into local coordinate space. */
- eina_matrix4_multiply(&mvp, &pick->matrix_vp, &pd_node->data.mesh.matrix_local_to_world);
- evas_ray3_init(&ray, pick->x, pick->y, &mvp);
-
- itr = eina_hash_iterator_data_new(pd_node->data.mesh.node_meshes);
-
- while (eina_iterator_next(itr, &ptr))
- {
- Evas_Canvas3D_Node_Mesh *nm = (Evas_Canvas3D_Node_Mesh *)ptr;
- if(_pick_data_mesh_add(pick, &ray, nm->mesh, nm->frame, node))
- break;
- }
- }
-
- return EINA_TRUE;
-}
-
-static void _node_mesh_colors_free_cb(void *data)
-{
- if (data) free(data);
-}
-
-static inline void
-_pick_data_init(Evas_Canvas3D_Pick_Data *data, Evas_Public_Data *e, Evas_Real x, Evas_Real y)
-{
- data->x = ((x * 2.0) / ((Evas_Real)e->viewport.w)) - 1.0;
- data->y = ((((Evas_Real)e->viewport.h - y - 1) * 2.0) / ((Evas_Real)e->viewport.h)) - 1.0;
- data->picked = EINA_FALSE;
- data->z = 1.0;
- data->node = NULL;
- data->mesh = NULL;
- data->s = 0.0;
- data->t = 0.0;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_scene_pick(const Eo *obj, Evas_Canvas3D_Scene_Data *pd, Evas_Real x, Evas_Real y,
- Evas_Canvas3D_Node **node, Evas_Canvas3D_Mesh **mesh,
- Evas_Real *s, Evas_Real *t)
-{
- Evas_Canvas3D_Pick_Data data;
- Evas_Canvas3D_Node_Data *pd_camera_node;
- Evas_Canvas3D_Camera_Data *pd_camera;
- Evas_Canvas3D_Object_Data *pd_parent;
- Evas_Public_Data *e;
- int tex = 0, px, py;;
- Evas_Color color = {0.0, 0.0, 0.0, 0.0};
- Eina_Stringshare *tmp;
- Eina_Array *arr = NULL;
- Eina_Bool update_scene = EINA_FALSE;
- Evas_Canvas3D_Node *picked_node = NULL;
- const Efl_Event_Description *eo_desc = NULL;
-
- pd_parent = efl_data_scope_get(obj, EVAS_CANVAS3D_OBJECT_CLASS);
- e = efl_data_scope_get(pd_parent->evas, EVAS_CANVAS_CLASS);
-
- _pick_data_init(&data, e, x, y);
- px = round(x * pd->w / e->viewport.w);
- py = round((pd->h - (y * pd->h / e->viewport.h) - 1));
-
- /*Use color pick mechanism finding node and mesh*/
- if (pd->color_pick_enabled)
- {
- Evas_Canvas3D_Scene_Public_Data scene_data;
-
- scene_data.bg_color = pd->bg_color;
- scene_data.shadows_enabled = pd->shadows_enabled;
- scene_data.camera_node = pd->camera_node;
- scene_data.color_pick_enabled = pd->color_pick_enabled;
- update_scene = evas_canvas3d_object_dirty_get(obj, EVAS_CANVAS3D_STATE_SCENE_UPDATED);
- scene_data.post_processing = EINA_FALSE;
- if (update_scene)
- {
- if (pd->node_mesh_colors)
- {
- eina_hash_free(pd->node_mesh_colors);
- eina_hash_free(pd->colors_node_mesh);
- pd->node_mesh_colors = NULL;
- pd->colors_node_mesh = NULL;
- }
- pd->node_mesh_colors = eina_hash_stringshared_new(_node_mesh_colors_free_cb);
- pd->colors_node_mesh = eina_hash_stringshared_new(_node_mesh_colors_free_cb);
- }
- scene_data.node_mesh_colors = pd->node_mesh_colors;
- scene_data.colors_node_mesh = pd->colors_node_mesh;
- evas_canvas3d_node_tree_traverse(pd->root_node,
- EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE,
- evas_canvas3d_node_color_node_mesh_collect, &scene_data);
-
- if (e->engine.func->drawable_scene_render_to_texture)
- {
- if (e->engine.func->drawable_scene_render_to_texture(_evas_engine_context(e),
- pd->surface, &scene_data))
- {
- if (e->engine.func->drawable_texture_color_pick_id_get)
- tex = e->engine.func->drawable_texture_color_pick_id_get(pd->surface);
- if (e->engine.func->drawable_texture_pixel_color_get)
- {
- e->engine.func->drawable_texture_pixel_color_get(tex, px, py, &color, pd->surface);
- tmp = eina_stringshare_printf("%f %f %f", color.r, color.g, color.b);
- arr = (Eina_Array *)eina_hash_find(pd->colors_node_mesh, tmp);
- if (arr)
- {
- picked_node = (Evas_Canvas3D_Node *)eina_array_data_get(arr, 0);
- if (mesh) *mesh = (Evas_Canvas3D_Mesh *)eina_array_data_get(arr, 1);
- if (node) *node = picked_node;
- eina_stringshare_del(tmp);
-
- /*Calling callback clicked*/
- eo_desc = efl_object_legacy_only_event_description_get("clicked,private");
- efl_event_callback_legacy_call(picked_node, eo_desc, picked_node);
-
- return EINA_TRUE;
- }
- else
- {
- eina_stringshare_del(tmp);
- if (mesh) *mesh = NULL;
- if (node) *node = NULL;
- }
- }
- }
- }
- return EINA_FALSE;
- }
- /* Update the scene graph. */
- evas_canvas3d_object_update((Eo *) obj);
- pd_camera_node = efl_data_scope_get(pd->camera_node, EVAS_CANVAS3D_NODE_CLASS);
- pd_camera = efl_data_scope_get(pd_camera_node->data.camera.camera, EVAS_CANVAS3D_CAMERA_CLASS);
- eina_matrix4_multiply(&data.matrix_vp,
- &pd_camera->projection,
- &pd_camera_node->data.camera.matrix_world_to_eye);
-
- evas_ray3_init(&data.ray_world, data.x, data.y, &data.matrix_vp);
-
- /* Traverse tree while adding meshes into pick data structure. */
- evas_canvas3d_node_tree_traverse(pd->root_node, EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE,
- _node_pick, &data);
-
- if (!data.picked)
- return EINA_FALSE;
-
- if (s) *s = data.s;
- if (t) *t = data.t;
- if (node) *node = data.node;
- if (mesh) *mesh = data.mesh;
-
- /*Calling callback clicked*/
- eo_desc = efl_object_legacy_only_event_description_get("clicked,private");
- efl_event_callback_legacy_call(data.node, eo_desc, data.node);
-
- return EINA_TRUE;
-}
-
-EOLIAN static Evas_Canvas3D_Node *
-_evas_canvas3d_scene_exist(const Eo *obj, Evas_Canvas3D_Scene_Data *pd, Evas_Real x, Evas_Real y, Evas_Canvas3D_Node *node)
-{
- Evas_Canvas3D_Pick_Data data;
- Evas_Canvas3D_Node_Data *pd_camera_node;
- Evas_Canvas3D_Camera_Data *pd_camera;
- Evas_Canvas3D_Object_Data *pd_parent;
- Evas_Public_Data *e;
-
- pd_parent = efl_data_scope_get(obj, EVAS_CANVAS3D_OBJECT_CLASS);
- e = efl_data_scope_get(pd_parent->evas, EVAS_CANVAS_CLASS);
-
- _pick_data_init(&data, e, x, y);
-
- /* Update the scene graph. */
- evas_canvas3d_object_update((Eo *) obj);
- pd_camera_node = efl_data_scope_get(pd->camera_node, EVAS_CANVAS3D_NODE_CLASS);
- pd_camera = efl_data_scope_get(pd_camera_node->data.camera.camera, EVAS_CANVAS3D_CAMERA_CLASS);
- eina_matrix4_multiply(&data.matrix_vp,
- &pd_camera->projection,
- &pd_camera_node->data.camera.matrix_world_to_eye);
-
- evas_ray3_init(&data.ray_world, data.x, data.y, &data.matrix_vp);
-
- /* Check pick for given node. */
- _node_pick(node, &data);
-
- if (!data.picked || data.node != node) node = NULL;
-
- return node;
-}
-
-EOLIAN static Eina_List *
-_evas_canvas3d_scene_pick_member_list_get(const Eo *obj, Evas_Canvas3D_Scene_Data *pd, Evas_Real x, Evas_Real y)
-{
- const Eina_List *list = NULL, *l = NULL;
- Eina_List *picked_nodes = NULL;
- void *node;
- Eina_Bool pick = EINA_FALSE;
-
- /* Check pick for given scene. */
- pick = evas_canvas3d_scene_pick(obj, x, y, NULL, NULL, NULL, NULL);
-
- if (!pick)
- return NULL;
-
- /* Get all members from root node. */
- list = evas_canvas3d_node_member_list_get(pd->root_node);
-
- EINA_LIST_FOREACH(list, l, node)
- {
- if (evas_canvas3d_scene_exist(obj, x, y, node))
- picked_nodes = eina_list_append(picked_nodes, l);
- }
-
- return picked_nodes;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_scene_shadows_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd)
-{
- return pd->shadows_enabled;
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_shadows_enable_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd, Eina_Bool _shadows_enabled)
-{
- pd->shadows_enabled = _shadows_enabled;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_SHADOWS_ENABLED, NULL);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_scene_color_pick_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd)
-{
- return pd->color_pick_enabled;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_scene_color_pick_enable_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd, Eina_Bool _enabled)
-{
- if (pd->color_pick_enabled != _enabled)
- pd->color_pick_enabled = _enabled;
-
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_UPDATED, NULL);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_shadows_depth_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd,
- Evas_Real depth_offset, Evas_Real depth_constant)
-{
- pd->depth_offset = depth_offset;
- pd->depth_constant = depth_constant;
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_SCENE_SHADOWS_DEPTH, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_scene_shadows_depth_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd,
- Evas_Real *depth_offset, Evas_Real *depth_constant)
-{
- if (depth_offset) *depth_offset = pd->depth_offset;
- if (depth_constant) *depth_constant = pd->depth_constant;
-}
-
-#include "canvas/evas_canvas3d_scene.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_scene.eo b/src/lib/evas/canvas/evas_canvas3d_scene.eo
deleted file mode 100644
index 86b14ecd8d..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_scene.eo
+++ /dev/null
@@ -1,168 +0,0 @@
-import evas_canvas3d_types;
-
-class @beta Evas.Canvas3D.Scene extends Evas.Canvas3D.Object
-{
- [[Efl 3D canvas scene class]]
- data: Evas_Canvas3D_Scene_Data;
- methods {
- size_set {
- [[Set the resolution of a scene.
-
- A scene should be rendered to be displayed through image
- objects. The resolution defines the size of the internal surface
- holding the rendered result.
- ]]
- params {
- @in w: int; [[Width of the resolution.]]
- @in h: int; [[Height of the resolution.]]
- }
- }
-
- size_get @const {
- [[Get the internal resolution of a scene.]]
- params {
- @out w: int; [[Pointer to receive width of the resolution.]]
- @out h: int; [[Pointer to receive height of the resolution.]]
- }
- }
-
- background_color_set {
- [[Set the background color of a scene.
-
- Background color defines the initial color of pixels before a scene
- is rendered. If you want to display a scene with background evas
- objects as if they're part of the background, set
- the alpha term to 0.0.
-
- Default background color is (0.0, 0.0, 0.0, 0.0).
- ]]
- params {
- @in r: Evas.Real; [[Red component of the background color.]]
- @in g: Evas.Real; [[Green component of the background color.]]
- @in b: Evas.Real; [[Blue component of the background color.]]
- @in a: Evas.Real; [[Alpha component of the background color.]]
- }
- }
-
- background_color_get @const {
- [[Get the background color of a scene.]]
- params {
- @out r: Evas.Real; [[Pointer to receive red component of the background color.]]
- @out g: Evas.Real; [[Pointer to receive green component of the background color.]]
- @out b: Evas.Real; [[Pointer to receive blue component of the background color.]]
- @out a: Evas.Real; [[Pointer to receive alpha component of the background color.]]
- }
- }
-
- pick @const {
- [[Get information on the most front visible mesh for the given
- position.
-
- (x, y) is the screen coordinate of the given scene. That is,
- left-top is (0, 0) and right-bottom is (w, h) where (w, h) is
- the size of the scene. The texture coordinate is useful when
- using proxy texture source.
- ]]
- return: bool; [[$true on success, $false otherwise]]
- params {
- @in x: Evas.Real; [[X coordinate of the picking position.]]
- @in y: Evas.Real; [[Y coordinate of the picking position.]]
- @out node: Evas.Canvas3D.Node; [[Pointer to receive the node contains the picked mesh.]]
- @out mesh: Evas.Canvas3D.Mesh; [[Pointer to receive the picked mesh.]]
- @out s: Evas.Real; [[Pointer to receive the texture "s" coordinate.]]
- @out t: Evas.Real; [[Pointer to receive the texture "t" coordinate.]]
- }
- }
-
- exist @const {
- [[Search given node in the given position.]]
- return: Evas.Canvas3D.Node; [[Node at the given position]]
- params {
- @in x: Evas.Real; [[X coordinate of the picking position.]]
- @in y: Evas.Real; [[Y coordinate of the picking position.]]
- @in node: Evas.Canvas3D.Node; [[Node for search.]]
- }
- }
-
- pick_member_list_get @const {
- [[Get list of the all root members from scene in the given position.]]
- return: list<Evas.Canvas3D.Node>; [[List of all root members from scene]]
- params {
- @in x: Evas.Real; [[X coordinate of the picking position.]]
- @in y: Evas.Real; [[Y coordinate of the picking position.]]
- }
- }
- shadows_enable_set {
- [[Enable or disable shadows on given scene
-
- If shadows_enabled is $true, the objects in the scene can throw
- shadow to another objects located behind them. The depth map used
- for shading. Directed and projective light sources are supported.
- ]]
- params {
- @in shadows_enabled: bool; [[Shadows enabled status.]]
- }
- }
-
- shadows_enable_get @const {
- [[Get shadows enabled status for given scene.]]
- return: bool; [[The shadows enabled status.]]
- }
- color_pick_enable_get @const {
- [[Get status of color picking of the scene.]]
- return: bool; [[The pick enabled status]]
- }
- color_pick_enable_set {
- [[Set possibility color picking.]]
- return: bool; [[$true on success, $false otherwise]]
- params {
- @in color_pick: bool; [[Possibility flag]]
- }
- }
-
- @property root_node {
- [[The root node of a scene.]]
- set {
- }
- get {
- }
- values {
- node: Evas.Canvas3D.Node; [[A node which will be used as a
- root node for the scene.]]
- }
- }
-
- @property camera_node {
- [[The camera node of a scene.]]
- set {
- }
- get {
- }
- values {
- node: Evas.Canvas3D.Node; [[A node which will be used as a
- camera node for the scene.]]
- }
- }
- @property shadows_depth {
- [[Scale and units used to calculate depth values.]]
- set {
- }
- get {
- }
- values {
- depth_offset: Evas.Real; [[Scale factor that is used to
- create a variable depth offset
- for each polygon.]]
- depth_constant: Evas.Real; [[Value to create a constant
- depth offset]]
- }
- }
-}
- implements {
- Efl.Object.constructor;
- Evas.Canvas3D.Object.update_notify;
- Evas.Canvas3D.Object.change_notify;
- @empty Evas.Canvas3D.Object.callback_register;
- @empty Evas.Canvas3D.Object.callback_unregister;
- }
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_texture.c b/src/lib/evas/canvas/evas_canvas3d_texture.c
deleted file mode 100644
index 0381c87275..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_texture.c
+++ /dev/null
@@ -1,606 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define MY_CLASS EVAS_CANVAS3D_TEXTURE_CLASS
-
-static inline void
-_texture_proxy_set(Evas_Canvas3D_Texture *texture, Evas_Object *eo_src, Evas_Object_Protected_Data *src)
-{
- Evas_Canvas3D_Texture_Data *pd = efl_data_scope_get(texture, MY_CLASS);
- EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src->proxy, Evas_Object_Proxy_Data, proxy_src)
- {
- proxy_src->proxy_textures = eina_list_append(proxy_src->proxy_textures, texture);
- proxy_src->redraw = EINA_TRUE;
- }
- EINA_COW_WRITE_END(evas_object_proxy_cow, src->proxy, proxy_src);
-
- pd->source = eo_src;
-}
-
-static inline void
-_texture_proxy_unset(Evas_Canvas3D_Texture_Data *texture)
-{
- Evas_Object_Protected_Data *src = efl_data_scope_get(texture->source, EFL_CANVAS_OBJECT_CLASS);
-
- EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src->proxy, Evas_Object_Proxy_Data, proxy_src);
- {
- proxy_src->proxy_textures = eina_list_remove(proxy_src->proxy_textures, texture);
-
- if (eina_list_count(proxy_src->proxy_textures) == 0 &&
- eina_list_count(proxy_src->proxies) == 0 &&
- proxy_src->surface != NULL)
- {
- Evas_Public_Data *e = src->layer->evas;
- e->engine.func->image_free(_evas_engine_context(e), proxy_src->surface);
- proxy_src->surface = NULL;
- }
-
- if (proxy_src->src_invisible)
- {
- proxy_src->src_invisible = EINA_FALSE;
- src->changed_src_visible = EINA_TRUE;
- evas_object_change(texture->source, src);
- evas_object_smart_member_cache_invalidate(texture->source,
- EINA_FALSE, EINA_FALSE, EINA_TRUE);
- }
- }
- EINA_COW_WRITE_END(evas_object_proxy_cow, src->proxy, proxy_src);
-
- texture->source = NULL;
-}
-
-static inline void
-_texture_proxy_subrender(Evas_Canvas3D_Texture *obj, void *engine)
-{
- /* Code taken from _proxy_subrender() in file evas_object_image.c */
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- Evas_Canvas3D_Texture_Data *pd = efl_data_scope_get(obj, MY_CLASS);
- Evas_Object_Protected_Data *source;
- void *ctx;
- int w, h;
- Eina_Bool is_image;
-
- if (!pd->source)
- return;
-
- // TODO: replace this function by evas_render_proxy_subrender (as appropriate)
-
- source = efl_data_scope_get(pd->source, EFL_CANVAS_OBJECT_CLASS);
-
- is_image = efl_isa(pd->source, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
-
- EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, source->proxy, Evas_Object_Proxy_Data, proxy_write)
- {
- proxy_write->redraw = EINA_FALSE;
-
- if (is_image)
- {
- void *image = source->func->engine_data_get(pd->source);
- e->engine.func->image_size_get(engine, image, &w, &h);
- }
- else
- {
- w = source->cur->geometry.w;
- h = source->cur->geometry.h;
- }
-
- /* We need to redraw surface then */
- if ((proxy_write->surface) &&
- ((proxy_write->w != w) || (proxy_write->h != h)))
- {
- e->engine.func->image_free(engine, proxy_write->surface);
- proxy_write->surface = NULL;
- }
-
- /* FIXME: Hardcoded alpha 'on' */
- /* FIXME (cont): Should see if the object has alpha */
- if (!proxy_write->surface)
- {
- proxy_write->surface = e->engine.func->image_map_surface_new
- (engine, w, h, 1);
- if (!proxy_write->surface) goto end;
- proxy_write->w = w;
- proxy_write->h = h;
- }
-
- ctx = e->engine.func->context_new(engine);
- e->engine.func->context_color_set(engine, ctx, 0, 0,
- 0, 0);
- e->engine.func->context_render_op_set(engine, ctx,
- EVAS_RENDER_COPY);
- e->engine.func->rectangle_draw(engine, _evas_default_output_get(e), ctx,
- proxy_write->surface, 0, 0, w, h,
- EINA_FALSE);
- e->engine.func->context_free(engine, ctx);
-
- ctx = e->engine.func->context_new(engine);
-
- if (is_image)
- {
- void *image = source->func->engine_data_get(pd->source);
-
- if (image)
- {
- int imagew, imageh;
- e->engine.func->image_size_get(engine, image,
- &imagew, &imageh);
- e->engine.func->image_draw(engine, _evas_default_output_get(e), ctx,
- proxy_write->surface, image,
- 0, 0, imagew, imageh, 0, 0, w, h, 0, EINA_FALSE);
- }
- }
- else
- {
- Evas_Proxy_Render_Data proxy_render_data = {
- .eo_proxy = NULL,
- .proxy_obj = NULL,
- .eo_src = pd->source,
- .src_obj = source,
- .source_clip = EINA_FALSE
- };
-
- evas_render_mapped(e, pd->source, source, ctx,
- _evas_default_output_get(e),
- proxy_write->surface,
- -source->cur->geometry.x,
- -source->cur->geometry.y,
- 2, 0, 0, e->output.w, e->output.h,
- &proxy_render_data, 1, EINA_FALSE);
- }
-
- e->engine.func->context_free(engine, ctx);
- proxy_write->surface = e->engine.func->image_dirty_region
- (engine, proxy_write->surface, 0, 0, w, h);
- }
- end:
- EINA_COW_WRITE_END(evas_object_proxy_cow, source->proxy, proxy_write);
-}
-
-static void
-_texture_fini(Evas_Canvas3D_Texture *obj)
-{
- Eo *evas = NULL;
- int i = 0;
- Eina_Iterator *it = NULL;
- void *data = NULL;
- Evas_Canvas3D_Material_Data *material = NULL;
-
- evas = evas_object_evas_get(obj);
- Evas_Canvas3D_Texture_Data *pd = efl_data_scope_get(obj, MY_CLASS);
-
- if (pd->engine_data)
- {
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- if (e->engine.func->texture_free)
- e->engine.func->texture_free(_evas_engine_context(e), pd->engine_data);
- pd->engine_data = NULL;
- }
-
- if (pd->materials)
- {
- it = eina_hash_iterator_key_new(pd->materials);
- EINA_ITERATOR_FOREACH(it, data)
- {
- material = efl_data_scope_get(data, EVAS_CANVAS3D_MATERIAL_CLASS);
- if (!material) continue;
- for (i = 0; i < EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT; i++)
- {
- if (material->attribs[i].texture)
- evas_canvas3d_texture_material_del(material->attribs[i].texture, data);
- }
- }
- eina_iterator_free(it);
-
- eina_hash_free(pd->materials);
- pd->materials = NULL;
- }
-
- if (pd->source)
- {
- _texture_proxy_unset(pd);
- }
-}
-
-static Eina_Bool
-_texture_material_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
- void *data EINA_UNUSED, void *fdata)
-{
- Evas_Canvas3D_Material *m = *(Evas_Canvas3D_Material **)key;
- evas_canvas3d_object_change(m, EVAS_CANVAS3D_STATE_MATERIAL_TEXTURE, (Evas_Canvas3D_Object *)fdata);
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_evas_canvas3d_object_change_notify(Eo *obj, Evas_Canvas3D_Texture_Data *pd, Evas_Canvas3D_State state EINA_UNUSED, Evas_Canvas3D_Object *ref EINA_UNUSED)
-{
-
- if (pd->materials)
- eina_hash_foreach(pd->materials, _texture_material_change_notify, obj);
-}
-
-/* FIXME: This code is problematic as it actually does rendering and rely on the output before we start rendering. */
-EOLIAN static void
-_evas_canvas3d_texture_evas_canvas3d_object_update_notify(Eo *obj, Evas_Canvas3D_Texture_Data *pd)
-{
- if (pd->source)
- {
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- Evas_Object_Protected_Data *src = efl_data_scope_get(pd->source, EFL_CANVAS_OBJECT_CLASS);
-
- if (pd->engine_data == NULL)
- {
- if (e->engine.func->texture_new)
- {
- pd->engine_data =
- e->engine.func->texture_new(_evas_engine_context(e), pd->atlas_enable);
- }
-
- if (pd->engine_data == NULL)
- {
- ERR("Failed to create engine-side texture object.");
- return;
- }
- }
-
- if (src->proxy->surface && !src->proxy->redraw)
- {
- if (e->engine.func->texture_image_set)
- {
- e->engine.func->texture_image_set(_evas_engine_context(e),
- pd->engine_data,
- src->proxy->surface);
- }
- return;
-
- }
-
- pd->proxy_rendering = EINA_TRUE;
- _texture_proxy_subrender(obj, _evas_engine_context(e));
-
- if (e->engine.func->texture_image_set)
- e->engine.func->texture_image_set(_evas_engine_context(e),
- pd->engine_data,
- src->proxy->surface);
- pd->proxy_rendering = EINA_FALSE;
- }
-}
-
-void
-evas_canvas3d_texture_material_add(Evas_Canvas3D_Texture *texture, Evas_Canvas3D_Material *material)
-{
- int count = 0;
- Evas_Canvas3D_Texture_Data *pd = efl_data_scope_get(texture, MY_CLASS);
- if (pd->materials == NULL)
- {
- pd->materials = eina_hash_pointer_new(NULL);
-
- if (pd->materials == NULL)
- {
- ERR("Failed to create hash table.");
- return;
- }
- }
- else
- count = (int)(uintptr_t)eina_hash_find(pd->materials, &material);
-
- /* Increase reference count or add new one if not exist. */
- eina_hash_set(pd->materials, &material, (const void *)(uintptr_t)(count + 1));
-}
-
-void
-evas_canvas3d_texture_material_del(Evas_Canvas3D_Texture *texture, Evas_Canvas3D_Material *material)
-{
- int count = 0;
- Evas_Canvas3D_Texture_Data *pd = efl_data_scope_get(texture, MY_CLASS);
- if (pd->materials == NULL)
- {
- ERR("No material to delete.");
- return;
- }
-
- count = (int)(uintptr_t)eina_hash_find(pd->materials, &material);
-
- if (count == 1)
- eina_hash_del(pd->materials, &material, NULL);
- else
- eina_hash_set(pd->materials, &material, (const void *)(uintptr_t)(count - 1));
-}
-
-EAPI Evas_Canvas3D_Texture *
-evas_canvas3d_texture_add(Evas *e)
-{
- MAGIC_CHECK(e, Evas, MAGIC_EVAS);
- return NULL;
- MAGIC_CHECK_END();
- return efl_add(MY_CLASS, e);
-}
-
-
-EOLIAN static Eo *
-_evas_canvas3d_texture_efl_object_constructor(Eo *obj, Evas_Canvas3D_Texture_Data *pd EINA_UNUSED)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- pd->atlas_enable = EINA_TRUE;
-
- evas_canvas3d_object_type_set(obj, EVAS_CANVAS3D_OBJECT_TYPE_TEXTURE);
-
- return obj;
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_efl_object_destructor(Eo *obj, Evas_Canvas3D_Texture_Data *pd)
-{
- eina_file_close(pd->f); // close matching open (matches open in _evas_canvas3d_texture_efl_file_load) OK
- pd->f = NULL;
- _texture_fini(obj);
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_data_set(Eo *obj, Evas_Canvas3D_Texture_Data *pd,
- Evas_Colorspace color_format,
- int w, int h, const void *data)
-{
- Eo *evas = NULL;
- void *image = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
-
- if (!pd->engine_data && e->engine.func->texture_new)
- pd->engine_data = e->engine.func->texture_new(_evas_engine_context(e), pd->atlas_enable);
- if (!data)
- {
- ERR("Failure, image data is empty");
- return;
- }
-
- image = e->engine.func->image_new_from_data(_evas_engine_context(e), w, h, (DATA32 *)data, EINA_TRUE, color_format);
- if (!image)
- {
- ERR("Can't load image from data");
- return;
- }
-
- if (e->engine.func->texture_image_set)
- e->engine.func->texture_image_set(_evas_engine_context(e),
- pd->engine_data,
- image);
- e->engine.func->image_free(_evas_engine_context(e), image);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_TEXTURE_DATA, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_efl_file_unload(Eo *obj, Evas_Canvas3D_Texture_Data *pd)
-{
- efl_file_unload(efl_super(obj, MY_CLASS));
- eina_file_close(pd->f); // close matching open (matches open in _evas_canvas3d_texture_efl_file_load) OK
- pd->f = NULL;
- _texture_fini(obj);
-}
-
-EOLIAN static Eina_Error
-_evas_canvas3d_texture_efl_file_load(Eo *obj, Evas_Canvas3D_Texture_Data *pd)
-{
- Evas_Image_Load_Opts lo;
- int load_error;
- Eo *evas = NULL;
- void *image;
- const Eina_File *f;
- const char *key;
-
- if (efl_file_loaded_get(obj)) return 0;
-
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
-
- Eina_Error err = efl_file_load(efl_super(obj, MY_CLASS));
- if (err) return err;
-
- f = efl_file_mmap_get(obj);
- key = efl_file_key_get(obj);
-
- if (!pd->engine_data && e->engine.func->texture_new)
- pd->engine_data = e->engine.func->texture_new(_evas_engine_context(e), pd->atlas_enable);
-
- memset(&lo, 0x0, sizeof(Evas_Image_Load_Opts));
- image = e->engine.func->image_mmap(_evas_engine_context(e),
- (Eina_File *) f, key, &load_error, &lo);
- if (!image)
- {
- ERR("Can't load image from file");
- return EINA_FALSE;
- }
-
- if (e->engine.func->texture_image_set)
- e->engine.func->texture_image_set(_evas_engine_context(e),
- pd->engine_data,
- image);
-
- e->engine.func->image_free(_evas_engine_context(e), image);
-
- pd->f = eina_file_dup(f);
- pd->key = eina_stringshare_add(key);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_TEXTURE_DATA, NULL);
-
- return EINA_TRUE;
-}
-
-EAPI void
-_evas_canvas3d_texture_source_set(Eo *obj , Evas_Canvas3D_Texture_Data *pd, Evas_Object *source)
-{
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- Evas_Object_Protected_Data *src;
-
- if (source == pd->source)
- return;
-
- _texture_fini(obj);
-
- if (source == NULL)
- return;
-
- if (evas_object_evas_get(source) != evas)
- {
- ERR("Not matching canvas.");
- return;
- }
-
- src = efl_data_scope_get(source, EFL_CANVAS_OBJECT_CLASS);
-
- if (src->delete_me)
- {
- ERR("Source object is deleted.");
- return;
- }
-
- if (src->layer == NULL)
- {
- ERR("No evas surface associated with the source object.");
- return;
- }
- if (!pd->engine_data && e->engine.func->texture_new)
- pd->engine_data = e->engine.func->texture_new(_evas_engine_context(e), pd->atlas_enable);
-
- _texture_proxy_set(obj, source, src);
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_TEXTURE_DATA, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_source_visible_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Texture_Data *pd, Eina_Bool visible)
-{
- Evas_Object_Protected_Data *src_obj;
-
- if (pd->source == NULL)
- return;
-
- src_obj = efl_data_scope_get(pd->source, EFL_CANVAS_OBJECT_CLASS);
-
- if (src_obj->proxy->src_invisible == !visible)
- return;
-
- EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src_obj->proxy, Evas_Object_Proxy_Data, proxy_write)
- proxy_write->src_invisible = !visible;
- EINA_COW_WRITE_END(evas_object_proxy_cow, src_obj->proxy, proxy_write);
-
- src_obj->changed_src_visible = EINA_TRUE;
- evas_object_smart_member_cache_invalidate(pd->source, EINA_FALSE, EINA_FALSE, EINA_TRUE);
- evas_object_change(pd->source, src_obj);
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_texture_source_visible_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Texture_Data *pd)
-{
- Evas_Object_Protected_Data *src_obj;
-
- if (pd->source == NULL)
- return EINA_FALSE;
-
- src_obj = efl_data_scope_get(pd->source, EFL_CANVAS_OBJECT_CLASS);
- return !src_obj->proxy->src_invisible;
-}
-
-EOLIAN static Evas_Colorspace
-_evas_canvas3d_texture_color_format_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Texture_Data *pd)
-{
- Evas_Colorspace format = -1;
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
-
- if (e->engine.func->image_colorspace_get &&
- e->engine.func->texture_image_get)
- {
- void *image;
-
- image = e->engine.func->texture_image_get(_evas_engine_context(e), pd->engine_data);
- format = e->engine.func->image_colorspace_get(_evas_engine_context(e), image);
- }
-
- return format;
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_size_get(const Eo *obj, Evas_Canvas3D_Texture_Data *pd, int *w, int *h)
-{
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- if (e->engine.func->texture_size_get)
- {
- e->engine.func->texture_size_get(_evas_engine_context(e),
- pd->engine_data, w, h);
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_wrap_set(Eo *obj, Evas_Canvas3D_Texture_Data *pd, Evas_Canvas3D_Wrap_Mode s, Evas_Canvas3D_Wrap_Mode t)
-{
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- if (e->engine.func->texture_wrap_set)
- {
- e->engine.func->texture_wrap_set(_evas_engine_context(e),
- pd->engine_data, s, t);
- }
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_TEXTURE_WRAP, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_wrap_get(Eo *obj, Evas_Canvas3D_Texture_Data *pd, Evas_Canvas3D_Wrap_Mode *s, Evas_Canvas3D_Wrap_Mode *t)
-{
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- if (e->engine.func->texture_wrap_set)
- {
- e->engine.func->texture_wrap_get(_evas_engine_context(e),
- pd->engine_data, s, t);
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_filter_set(Eo *obj, Evas_Canvas3D_Texture_Data *pd, Evas_Canvas3D_Texture_Filter min, Evas_Canvas3D_Texture_Filter mag)
-{
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- if (e->engine.func->texture_filter_set)
- {
- e->engine.func->texture_filter_set(_evas_engine_context(e),
- pd->engine_data, min, mag);
- }
- evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_TEXTURE_FILTER, NULL);
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_filter_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Texture_Data *pd, Evas_Canvas3D_Texture_Filter *min, Evas_Canvas3D_Texture_Filter *mag)
-{
- Eo *evas = NULL;
- evas = evas_object_evas_get(obj);
- Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS);
- if (e->engine.func->texture_filter_get)
- {
- e->engine.func->texture_filter_get(_evas_engine_context(e),
- pd->engine_data, min, mag);
- }
-}
-
-EOLIAN static void
-_evas_canvas3d_texture_atlas_enable_set(Eo *obj EINA_UNUSED, Evas_Canvas3D_Texture_Data *pd, Eina_Bool use_atlas)
-{
- if (pd->atlas_enable != use_atlas) pd->atlas_enable = use_atlas;
-}
-
-EOLIAN static Eina_Bool
-_evas_canvas3d_texture_atlas_enable_get(const Eo *obj EINA_UNUSED, Evas_Canvas3D_Texture_Data *pd)
-{
- return pd->atlas_enable;
-}
-#include "canvas/evas_canvas3d_texture.eo.c"
diff --git a/src/lib/evas/canvas/evas_canvas3d_texture.eo b/src/lib/evas/canvas/evas_canvas3d_texture.eo
deleted file mode 100644
index a680d299cc..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_texture.eo
+++ /dev/null
@@ -1,159 +0,0 @@
-type @beta @extern Evas_Colorspace: int; [[Evas colorspace type]] /* FIXME: Need to get emile migrated. */
-
-class @beta Evas.Canvas3D.Texture extends Evas.Canvas3D.Object implements Efl.File
-{
- [[Evas 3d canvas texture class]]
- data : Evas_Canvas3D_Texture_Data;
- methods {
- @property source_visible {
- [[The visibility flag of the source evas object of the given
- texture.
-
- Call \@ref evas_object_show on the source object
- and control the visibility using this function.
-
- By default the source object is visible.
-
- See also @.source_set.
- ]]
- set {
- }
- get {
- }
- values {
- visible: bool; [[$true for visible, $false for invisible.]]
- }
- }
- @property atlas_enable {
- [[Enable flag to generation texture unit with support atlas.
-
- Use this flag only when you cannot normalize texture coordinates.
-
- By default it is enabled.
- ]]
- set {
- }
- get {
- }
- values {
- use_atlas: bool; [[$true for enable, $false for disable.]]
- }
- }
- data_set {
- [[Set the data of the given texture.
-
- See also @Efl.File.file.set.
- ]]
-
- params {
- @in color_format: Evas_Colorspace; [[Color format of the texture.]]
- @in w: int; [[Width of the data.]]
- @in h: int; [[Height of the data.]]
- @in data: const(void_ptr); [[Pointer to the data.]]
- }
- }
-
- source_set {
- [[Set the data of the given texture from an evas object.
-
- Evas 3D support using existing evas object as a texture source.
- This feature make it possible using any existing evas object
- inside 3D scene.
-
- See also @.source_visible.set.
- ]]
-
- params {
- @in source: Efl.Canvas.Object; [[Source evas object to be used as
- the texture data.]]
- }
- }
-
- color_format_get @const {
- [[Get the color format of the given texture.
-
- EVAS_CANVAS3D_COLOR_FORMAT_RGBA will be returned if the texture
- has source object. Otherwise, the color format of the data will
- be returned.
-
- See also @.data_set, @Efl.File.file.set, @.source_set.
- ]]
- return: Evas_Colorspace; [[Color format of the given texture]]
- }
-
- size_get @const {
- [[Get the size of the given texture.
-
- If the texture has a source object, the size of the source object
- will be returned. Otherwise the size of the data (or image file)
- will be returned.
-
- See also @.data_set, @Efl.File.file.set, @.source_set.
- ]]
- params {
- @out w: int; [[Pointer to receive the width of the texture size.]]
- @out h: int; [[Pointer to receive the height of the texture size.]]
- }
- }
-
- wrap_set {
- [[Set the wrap mode of the given texture.
-
- If the texture coordinate exceed range [0.0, 1.0] the values are
- modified according to the wrap mode.
-
- Default wrap modes are both EVAS_CANVAS3D_WRAP_MODE_CLAMP for s and t.
- ]]
- params {
- @in s: Evas.Canvas3D.Wrap_Mode; [[Wrap mode for S-axis.]]
- @in t: Evas.Canvas3D.Wrap_Mode; [[Wrap mode for T-axis.]]
- }
- }
-
- wrap_get {
- [[Get the wrap mode of the given texture.
-
- See also @.wrap_set.
- ]]
- params {
- @out s: Evas.Canvas3D.Wrap_Mode; [[Pointer to receive S-axis wrap mode.]]
- @out t: Evas.Canvas3D.Wrap_Mode; [[Pointer to receive T-axis wrap mode.]]
- }
- }
-
- filter_set {
- [[Set the filter of the given texture.
-
- Default filters are both EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST for
- s and t.
- ]]
-
- params {
- @in min: Evas.Canvas3D.Texture_Filter; [[Minification filter used when down-scaling.]]
- @in mag: Evas.Canvas3D.Texture_Filter; [[Magnification filter used when up-scaling.]]
- }
- }
-
- filter_get @const {
- [[Get the filter of the given texture.
-
- See also @.filter_set.
- ]]
- params {
- @out min: Evas.Canvas3D.Texture_Filter; [[Pointer to receive the minification filter.]]
- @out mag: Evas.Canvas3D.Texture_Filter; [[Pointer to receive the magnification filter.]]
- }
- }
- }
-
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- Evas.Canvas3D.Object.update_notify;
- Evas.Canvas3D.Object.change_notify;
- Efl.File.load;
- Efl.File.unload;
- @empty Evas.Canvas3D.Object.callback_register;
- @empty Evas.Canvas3D.Object.callback_unregister;
- }
-}
diff --git a/src/lib/evas/canvas/evas_canvas3d_types.eot b/src/lib/evas/canvas/evas_canvas3d_types.eot
deleted file mode 100644
index 81e3030e19..0000000000
--- a/src/lib/evas/canvas/evas_canvas3d_types.eot
+++ /dev/null
@@ -1,293 +0,0 @@
-// ----------------------------------------------------------------------------
-// All the below types are for Evas 3D
-
-type @beta Evas.Real: double; [[A type for floating value]]
-
-enum @beta Evas.Canvas3D.Object_Type
-{
- [[Type of 3D Object
-
- @since 1.10]]
- invalid = 0, [[Evas 3D type: invalid]]
- scene, [[Evas 3D type: scene]]
- node, [[Evas 3D type: node]]
- camera, [[Evas 3D type: camera]]
- light, [[Evas 3D type: light]]
- model, [[Evas 3D type: model]]
- mesh, [[Evas 3D type: mesh]]
- texture, [[Evas 3D type: texture]]
- material, [[Evas 3D type: material]]
- primitive [[Evas 3D type: primitive
- @since 1.15]]
-}
-
-enum @beta Evas.Canvas3D.State
-{
- [[State of the Evas 3D
-
- @since 1.10]]
- max = 16, [[Evas 3D state: max]]
-
- any = 0, [[Evas 3D state: any]]
-
- scene_root_node = 1, [[Evas 3D state: scene root node]]
- scene_camera_node, [[Evas 3D state: scene camera node]]
- scene_background_color, [[Evas 3D state: scene background color]]
- scene_size, [[Evas 3D state: scene size]]
- scene_shadows_enabled, [[Evas 3D state: scene shadows enabled]]
- scene_updated, [[Evas 3D state: scene updated
- @since 1.14]]
- scene_shadows_depth, [[Evas 3D state: scene shadows depth]]
- scene_render_to_texture, [[Evas 3D state: scene render to texture]]
-
- texture_data = 1, [[Evas 3D state: texture data]]
- texture_wrap, [[Evas 3D state: texture wrap]]
- texture_filter, [[Evas 3D state: texture filter]]
-
- material_id = 1, [[Evas 3D state: material ID]]
- material_color, [[Evas 3D state: material color]]
- material_texture, [[Evas 3D state: material texture]]
-
- mesh_vertex_count = 1, [[Evas 3D state: mesh vertex count]]
- mesh_frame, [[Evas 3D state: mesh frame]]
- mesh_material, [[Evas 3D state: mesh material]]
- mesh_transform, [[Evas 3D state: mesh transform]]
- mesh_vertex_data, [[Evas 3D state: mesh vertex data]]
- mesh_index_data, [[Evas 3D state: mesh index data]]
- mesh_vertex_assembly, [[Evas 3D state: mesh vertex assembly]]
- mesh_shader_mode, [[Evas 3D state: mesh shader mode]]
- mesh_fog, [[Evas 3D state: mesh fog]]
- mesh_blending, [[Evas 3D state: mesh blending]]
- mesh_alpha_test, [[Evas 3D state: mesh alpha test]]
- mesh_color_pick, [[Evas 3D state: mesh color pick]]
- mesh_shadows_edges_filtering, [[Evas 3D state: mesh shadows edges filtering]]
- mesh_shadows_constant_bias, [[Evas 3D state: mesh shadows constant bias]]
-
- camera_projection = 1, [[Evas 3D state: camera projection]]
-
- light_ambient = 1, [[Evas 3D state: light ambient]]
- light_diffuse, [[Evas 3D state: light diffuse]]
- light_specular, [[Evas 3D state: light specular]]
- light_spot_dir, [[Evas 3D state: light spot dir]]
- light_spot_exp, [[Evas 3D state: light spot exp]]
- light_spot_cutoff, [[Evas 3D state: light spot cutoff]]
- light_attenuation, [[Evas 3D state: light attenuation]]
- light_projection, [[Evas 3D state: light projection]]
-
- node_transform_position = 1, [[Evas 3D state: node transform position]]
- node_transform_orientation, [[Evas 3D state: node transform orientation]]
- node_transform_scale, [[Evas 3D state: node transform scale]]
- node_mesh_geometry, [[Evas 3D state: node mesh geometry]]
- node_mesh_material, [[Evas 3D state: node mesh material]]
- node_mesh_frame, [[Evas 3D state: node mesh frame]]
- node_mesh_shader_mode, [[Evas 3D state: node mesh shader mode]]
- node_mesh_material_id, [[Evas 3D state: node mesh material ID]]
- node_light, [[Evas 3D state: node light]]
- node_camera, [[Evas 3D state: node camera]]
- node_parent_position, [[Evas 3D state: node parent position]]
- node_parent_orientation, [[Evas 3D state: node parent orientation]]
- node_parent_scale, [[Evas 3D state: node parent scale]]
- node_member, [[Evas 3D state: node member]]
- node_parent_billboard, [[Evas 3D state: node parent billboard
- @since 1.14]]
- node_lod [[Evas 3D state: node lod
- @since 1.18]]
-}
-
-enum @beta Evas.Canvas3D.Space
-{
- [[Transform space
-
- @since 1.10]]
- local = 0, [[Local coordinate space]]
- parent, [[Parent coordinate space]]
- world [[World coordinate space]]
-}
-
-enum @beta Evas.Canvas3D.Node_Type
-{
- [[Types of a node
-
- @since 1.10]]
- unknown = -1, [[Unknown node type @since 1.21]]
- node = 0, [[Node with no items]]
- camera, [[Node which can contain camera object]]
- light, [[Node which can contain light object]]
- mesh [[Node which can contain mesh objects]]
-}
-
-enum @beta Evas.Canvas3D.Node_Orientation_Type
-{
- [[Types of node orientation
-
- @since 1.13]]
- none = 0, [[Node with no orientation properties]]
- look_at, [[Node orientation is given as a point to look at and a vector that indicates the angle at which the subject is looking at the point]]
- look_to, [[Node orientation is given as id of another part to look at and a vector that indicates the angle at which the subject is looking at the part]]
- angle_axis, [[Node orientation is given as an angle and an axis to rotate around]]
- quaternion [[Node orientation is given as a quaternion]]
-}
-
-enum @beta Evas.Canvas3D.Index_Format
-{
- [[Index formats
-
- @since 1.10]]
- none = 0, [[Indexing is not used]]
- unsigned_byte, [[Index is of type unsigned byte]]
- unsigned_short [[Index is of type unsigned short]]
-}
-
-enum @beta Evas.Canvas3D.Frustum_Mode
-{
- [[Frustum modes
-
- @since 1.12]]
- bsphere, [[Bounding sphere]]
- aabb, [[Axis-aligned bounding box]]
- central_point [[Central point]]
-}
-
-enum @beta Evas.Canvas3D.Vertex_Assembly
-{
- [[Vertex assembly modes. Vertex assembly represents how the vertices are organized into geometric primitives.
-
- @since 1.10]]
- points = 0, [[A vertex is rendered as a point]]
- lines, [[Two vertices are organized as a line]]
- line_strip, [[Vertices are organized as a connected line path]]
- line_loop, [[Vertices are organized as a closed line path]]
- triangles, [[Three vertices are organized as a triangle]]
- triangle_strip, [[Vertices are organized as connected triangles]]
- triangle_fan [[Vertices are organized as a triangle fan]]
-}
-
-enum @beta Evas.Canvas3D.Comparison
-{
- [[Comparsion functions for testing(alpha, depth, stencil) in fragment shader
-
- @since 1.14]]
- never, [[Never passes]]
- less, [[Passes if the incoming value is less than the reference value]]
- equal, [[Passes if the incoming value is equal to the reference value]]
- lequal, [[Passes if the incoming value is less than or equal to the reference value]]
- greater, [[Passes if the incoming value is greater than the reference value]]
- notequal, [[Passes if the incoming value is not equal to the reference value]]
- gequal, [[Passes if the incoming value is greater than or equal to the reference value]]
- always [[Always passes (initial value)]]
-}
-
-enum @beta Evas.Canvas3D.Wrap_Mode
-{
- [[Wrap modes for texture units
-
- @since 1.14]]
- clamp = 0, [[Values will be clamped to be in range (min, max)]]
- repeat, [[Values will be repeated]]
- reflect [[Values will be repeated in a reflected manner]]
-}
-
-enum @beta Evas.Canvas3D.Texture_Filter
-{
- [[Filters for texture units
-
- @since 1.14]]
- nearest = 0, [[Samples nearest texel]]
- linear, [[Lineary interpolate nearby texels]]
- nearest_mipmap_nearest, [[Nearest sampling mipmap]]
- linear_mipmap_nearest, [[Nearest sampling mipmap and interpolate]]
- nearest_mipmap_linear, [[Linear sampling in nearest mipmap]]
- linear_mipmap_linear [[Linear sampling in mipmap and interpolate]]
-}
-
-enum @beta Evas.Canvas3D.Mesh_Primitive
-{
- [[Mesh primitive
-
- @since 1.12]]
- none = 0, [[An empty space]]
- square, [[One sided square]]
- cube, [[Cube primitive]]
- cylinder, [[Cylinder (can use precision and texture scale)]]
- cone, [[Cone (can use precision and texture scale)]]
- sphere, [[Sphere (can use precision and texture scale)]]
- torus, [[Torus (can use ratio, precision and texture scale)]]
- surface, [[Custom surface (can use pointer to users function, precision and texture scale)]]
- terrain, [[Terrain as surface with pointer to perlin's noise function]]
- count [[Sentinel value to indicate last enum field during iteration]]
-}
-
-enum @beta Evas.Canvas3D.Primitive_Mode
-{
- [[Mode of mesh primitive
-
- @since 1.15]]
- default = 0, [[Default mode of primitive]]
- without_base, [[Primitive without base (supported for cylinder and cone)]]
- alternative_uv [[Ptimitive with alternative uv (supported for sphere)]]
-}
-
-enum @beta Evas.Canvas3D.Shader_Mode
-{
- [[Shader shade modes
-
- @since 1.10]]
- vertex_color = 0, [[Shaded using vertex color attribute]]
- diffuse, [[Shaded using material diffuse term]]
- flat, [[Per-vertex flat lighting]]
- phong, [[Per-pixel phong shading]]
- normal_map, [[Per-pixel normal map shading]]
- shadow_map_render, [[Fragment color is defined by its z-coord]]
- color_pick, [[Rendering to additional frame bufer]]
- parallax_occlusion, [[Per-pixel parallax occlusion map shading]]
- post_processing_FXAA [[Render full screen quard]]
-}
-
-enum @beta Evas.Canvas3D.Vertex_Attrib
-{
- [[Vertex attribute IDs
-
- @since 1.10]]
- position = 0, [[vertex position]]
- normal, [[vertex normal]]
- tangent, [[vertex tangent (for normal mapping)]]
- color, [[vertex color]]
- texcoord [[vertex texture coordinate]]
-}
-
-enum @beta Evas.Canvas3D.Blend_Func
-{
- [[Blending function
-
- @since 1.14]]
-
- zero = 0, [[The scale factors for color components is (0, 0, 0, 0)]]
- one, [[The scale factors for color components is (1, 1, 1, 1)]]
- src_color, [[The scale factors for color components is (rs/kr, gs/kg, bs/kb, as/ka)]]
- one_minus_src_color, [[The scale factors for color components is (1, 1, 1, 1) - (rs/kr, gs/kg, bs/kb, as/ka)]]
- dst_color, [[The scale factors for color components is (rd/kr, gd/kg, bd/kb, ad/ka)]]
- one_minus_dst_color, [[The scale factors for color components is (1, 1, 1, 1) - (rd/kr, gd/kg, bd/kb, ad/ka)]]
- src_alpha, [[The scale factors for color components is (as/ka, as/ka, as/ka, as/ka)]]
- one_minus_src_alpha, [[The scale factors for color components is (1, 1, 1, 1) - (as/ka, as/ka, as/ka, as/ka)]]
- dst_alpha, [[The scale factors for color components is (ad/ka, ad/ka, ad/ka, ad/ka)]]
- one_minus_dst_alpha, [[The scale factors for color components is (1, 1, 1, 1) - (ad/ka, ad/ka, ad/ka, ad/ka)]]
- constant_color, [[The scale factors for color components is (rc, gc, bc, ac)]]
- one_minus_constant_color, [[The scale factors for color components is (1, 1, 1, 1) - (rc, gc, bc, ac)]]
- constant_alpha, [[The scale factors for color components is (ac, ac, ac, ac)]]
- one_minus_constant_alpha, [[The scale factors for color components is (1, 1, 1, 1) - (ac, ac, ac, ac)]]
- src_alpha_saturate [[The scale factors for color components is (i, i, i, 1) where i = min(as, ka, ad)/ka]]
-}
-
-enum @beta Evas.Canvas3D.Material_Attrib
-{
- [[Material attributes
-
- @since 1.10]]
- ambient = 0, [[ambient term]]
- diffuse, [[diffuse term]]
- specular, [[specular term]]
- emission, [[emission term]]
- normal [[Normal map term]]
-}
-
-type @beta Evas.Canvas3D.Surface_Func: __undefined_type; [[Evas 3D canvas surface function type]]
diff --git a/src/lib/evas/canvas/evas_canvas_eo.c b/src/lib/evas/canvas/evas_canvas_eo.c
index 2f618ce37c..3b7357f54e 100644
--- a/src/lib/evas/canvas/evas_canvas_eo.c
+++ b/src/lib/evas/canvas/evas_canvas_eo.c
@@ -17,7 +17,7 @@ __eolian_evas_canvas_image_cache_set_reflect(Eo *obj, Eina_Value val)
return r;
}
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_image_cache_set, EFL_FUNC_CALL(size), int size);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_image_cache_set, EFL_FUNC_CALL(size), int size);
int _evas_canvas_image_cache_get(const Eo *obj, Evas_Public_Data *pd);
@@ -29,15 +29,15 @@ __eolian_evas_canvas_image_cache_get_reflect(const Eo *obj)
return eina_value_int_init(val);
}
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_image_cache_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_image_cache_get, int, 0);
void _evas_canvas_event_default_flags_set(Eo *obj, Evas_Public_Data *pd, Evas_Event_Flags flags);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_event_default_flags_set, EFL_FUNC_CALL(flags), Evas_Event_Flags flags);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_event_default_flags_set, EFL_FUNC_CALL(flags), Evas_Event_Flags flags);
Evas_Event_Flags _evas_canvas_event_default_flags_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_event_default_flags_get, Evas_Event_Flags, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_event_default_flags_get, Evas_Event_Flags, 0);
void _evas_canvas_font_cache_set(Eo *obj, Evas_Public_Data *pd, int size);
@@ -57,7 +57,7 @@ __eolian_evas_canvas_font_cache_set_reflect(Eo *obj, Eina_Value val)
return r;
}
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_font_cache_set, EFL_FUNC_CALL(size), int size);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_font_cache_set, EFL_FUNC_CALL(size), int size);
int _evas_canvas_font_cache_get(const Eo *obj, Evas_Public_Data *pd);
@@ -69,251 +69,251 @@ __eolian_evas_canvas_font_cache_get_reflect(const Eo *obj)
return eina_value_int_init(val);
}
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_font_cache_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_font_cache_get, int, 0);
void _evas_canvas_data_attach_set(Eo *obj, Evas_Public_Data *pd, void *data);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_data_attach_set, EFL_FUNC_CALL(data), void *data);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_data_attach_set, EFL_FUNC_CALL(data), void *data);
void *_evas_canvas_data_attach_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_data_attach_get, void *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_data_attach_get, void *, NULL);
Efl_Canvas_Object *_evas_canvas_focus_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_focus_get, Efl_Canvas_Object *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_focus_get, Efl_Canvas_Object *, NULL);
Efl_Canvas_Object *_evas_canvas_seat_focus_get(const Eo *obj, Evas_Public_Data *pd, Evas_Device *seat);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_seat_focus_get, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(seat), Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_seat_focus_get, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(seat), Evas_Device *seat);
Efl_Canvas_Object *_evas_canvas_object_top_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_object_top_get, Efl_Canvas_Object *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_object_top_get, Efl_Canvas_Object *, NULL);
void _evas_canvas_pointer_canvas_xy_by_device_get(const Eo *obj, Evas_Public_Data *pd, Evas_Device *dev, int *x, int *y);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_canvas_xy_by_device_get, EFL_FUNC_CALL(dev, x, y), Evas_Device *dev, int *x, int *y);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_canvas_xy_by_device_get, EFL_FUNC_CALL(dev, x, y), Evas_Device *dev, int *x, int *y);
void _evas_canvas_pointer_canvas_xy_get(const Eo *obj, Evas_Public_Data *pd, int *x, int *y);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_canvas_xy_get, EFL_FUNC_CALL(x, y), int *x, int *y);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_canvas_xy_get, EFL_FUNC_CALL(x, y), int *x, int *y);
int _evas_canvas_event_down_count_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_event_down_count_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_event_down_count_get, int, 0);
int _evas_canvas_smart_objects_calculate_count_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_smart_objects_calculate_count_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_smart_objects_calculate_count_get, int, 0);
Eina_Bool _evas_canvas_focus_state_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_focus_state_get, Eina_Bool, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_focus_state_get, Eina_Bool, 0);
Eina_Bool _evas_canvas_seat_focus_state_get(const Eo *obj, Evas_Public_Data *pd, Evas_Device *seat);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_seat_focus_state_get, Eina_Bool, 0, EFL_FUNC_CALL(seat), Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_seat_focus_state_get, Eina_Bool, 0, EFL_FUNC_CALL(seat), Evas_Device *seat);
Eina_Bool _evas_canvas_changed_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_changed_get, Eina_Bool, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_changed_get, Eina_Bool, 0);
void _evas_canvas_pointer_output_xy_by_device_get(const Eo *obj, Evas_Public_Data *pd, Evas_Device *dev, int *x, int *y);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_output_xy_by_device_get, EFL_FUNC_CALL(dev, x, y), Evas_Device *dev, int *x, int *y);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_output_xy_by_device_get, EFL_FUNC_CALL(dev, x, y), Evas_Device *dev, int *x, int *y);
void _evas_canvas_pointer_output_xy_get(const Eo *obj, Evas_Public_Data *pd, int *x, int *y);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_output_xy_get, EFL_FUNC_CALL(x, y), int *x, int *y);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_canvas_pointer_output_xy_get, EFL_FUNC_CALL(x, y), int *x, int *y);
Efl_Canvas_Object *_evas_canvas_object_bottom_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_object_bottom_get, Efl_Canvas_Object *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_object_bottom_get, Efl_Canvas_Object *, NULL);
unsigned int _evas_canvas_pointer_button_down_mask_by_device_get(const Eo *obj, Evas_Public_Data *pd, Evas_Device *dev);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_pointer_button_down_mask_by_device_get, unsigned int, 0, EFL_FUNC_CALL(dev), Evas_Device *dev);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_pointer_button_down_mask_by_device_get, unsigned int, 0, EFL_FUNC_CALL(dev), Evas_Device *dev);
unsigned int _evas_canvas_pointer_button_down_mask_get(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_pointer_button_down_mask_get, unsigned int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_pointer_button_down_mask_get, unsigned int, 0);
Eina_List *_evas_canvas_tree_objects_at_xy_get(Eo *obj, Evas_Public_Data *pd, Efl_Canvas_Object *stop, int x, int y);
-EOAPI EFL_FUNC_BODYV(evas_canvas_tree_objects_at_xy_get, Eina_List *, NULL, EFL_FUNC_CALL(stop, x, y), Efl_Canvas_Object *stop, int x, int y);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_canvas_tree_objects_at_xy_get, Eina_List *, NULL, EFL_FUNC_CALL(stop, x, y), Efl_Canvas_Object *stop, int x, int y);
void _evas_canvas_key_lock_on(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_on, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_on, EFL_FUNC_CALL(keyname), const char *keyname);
void _evas_canvas_seat_key_lock_on(Eo *obj, Evas_Public_Data *pd, const char *keyname, Evas_Device *seat);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_lock_on, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_lock_on, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
void _evas_canvas_seat_key_lock_off(Eo *obj, Evas_Public_Data *pd, const char *keyname, Evas_Device *seat);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_lock_off, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_lock_off, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
void _evas_canvas_key_modifier_add(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_add, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_add, EFL_FUNC_CALL(keyname), const char *keyname);
void _evas_canvas_key_modifier_off(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_off, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_off, EFL_FUNC_CALL(keyname), const char *keyname);
Eina_Bool _evas_canvas_render_async(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY(evas_canvas_render_async, Eina_Bool, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY(evas_canvas_render_async, Eina_Bool, 0);
void _evas_canvas_focus_out(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_focus_out);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_focus_out);
void _evas_canvas_norender(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_norender);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_norender);
void _evas_canvas_nochange_pop(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_nochange_pop);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_nochange_pop);
void _evas_canvas_key_lock_off(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_off, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_off, EFL_FUNC_CALL(keyname), const char *keyname);
void _evas_canvas_nochange_push(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_nochange_push);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_nochange_push);
void _evas_canvas_font_cache_flush(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_font_cache_flush);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_font_cache_flush);
void _evas_canvas_key_modifier_on(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_on, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_on, EFL_FUNC_CALL(keyname), const char *keyname);
void _evas_canvas_seat_key_modifier_on(Eo *obj, Evas_Public_Data *pd, const char *keyname, Evas_Device *seat);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_modifier_on, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_modifier_on, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
void _evas_canvas_seat_key_modifier_off(Eo *obj, Evas_Public_Data *pd, const char *keyname, Evas_Device *seat);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_modifier_off, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_seat_key_modifier_off, EFL_FUNC_CALL(keyname, seat), const char *keyname, Evas_Device *seat);
Eina_List *_evas_canvas_font_available_list(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_font_available_list, Eina_List *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_font_available_list, Eina_List *, NULL);
Efl_Canvas_Object *_evas_canvas_object_name_find(const Eo *obj, Evas_Public_Data *pd, const char *name);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_object_name_find, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(name), const char *name);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_object_name_find, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(name), const char *name);
void _evas_canvas_font_path_append(Eo *obj, Evas_Public_Data *pd, const char *path);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_font_path_append, EFL_FUNC_CALL(path), const char *path);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_font_path_append, EFL_FUNC_CALL(path), const char *path);
void _evas_canvas_font_path_clear(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_font_path_clear);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_font_path_clear);
void _evas_canvas_touch_point_list_nth_xy_get(Eo *obj, Evas_Public_Data *pd, unsigned int n, double *x, double *y);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_touch_point_list_nth_xy_get, EFL_FUNC_CALL(n, x, y), unsigned int n, double *x, double *y);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_touch_point_list_nth_xy_get, EFL_FUNC_CALL(n, x, y), unsigned int n, double *x, double *y);
void _evas_canvas_key_lock_del(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_del, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_del, EFL_FUNC_CALL(keyname), const char *keyname);
void _evas_canvas_damage_rectangle_add(Eo *obj, Evas_Public_Data *pd, int x, int y, int w, int h);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_damage_rectangle_add, EFL_FUNC_CALL(x, y, w, h), int x, int y, int w, int h);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_damage_rectangle_add, EFL_FUNC_CALL(x, y, w, h), int x, int y, int w, int h);
void _evas_canvas_sync(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_sync);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_sync);
const Eina_List *_evas_canvas_font_path_list(const Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_canvas_font_path_list, const Eina_List *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_canvas_font_path_list, const Eina_List *, NULL);
void _evas_canvas_image_cache_reload(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_image_cache_reload);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_image_cache_reload);
int _evas_canvas_coord_world_x_to_screen(const Eo *obj, Evas_Public_Data *pd, int x);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_coord_world_x_to_screen, int, 0, EFL_FUNC_CALL(x), int x);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_coord_world_x_to_screen, int, 0, EFL_FUNC_CALL(x), int x);
Eina_List *_evas_canvas_render_updates(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_FUNC_BODY(evas_canvas_render_updates, Eina_List *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY(evas_canvas_render_updates, Eina_List *, NULL);
void _evas_canvas_image_cache_flush(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_image_cache_flush);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_image_cache_flush);
int _evas_canvas_coord_screen_y_to_world(const Eo *obj, Evas_Public_Data *pd, int y);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_coord_screen_y_to_world, int, 0, EFL_FUNC_CALL(y), int y);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_coord_screen_y_to_world, int, 0, EFL_FUNC_CALL(y), int y);
void _evas_canvas_key_modifier_del(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_del, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_modifier_del, EFL_FUNC_CALL(keyname), const char *keyname);
void _evas_canvas_focus_in(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_focus_in);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_focus_in);
void _evas_canvas_seat_focus_in(Eo *obj, Evas_Public_Data *pd, Evas_Device *seat);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_seat_focus_in, EFL_FUNC_CALL(seat), Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_seat_focus_in, EFL_FUNC_CALL(seat), Evas_Device *seat);
void _evas_canvas_seat_focus_out(Eo *obj, Evas_Public_Data *pd, Evas_Device *seat);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_seat_focus_out, EFL_FUNC_CALL(seat), Evas_Device *seat);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_seat_focus_out, EFL_FUNC_CALL(seat), Evas_Device *seat);
void _evas_canvas_obscured_rectangle_add(Eo *obj, Evas_Public_Data *pd, int x, int y, int w, int h);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_obscured_rectangle_add, EFL_FUNC_CALL(x, y, w, h), int x, int y, int w, int h);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_obscured_rectangle_add, EFL_FUNC_CALL(x, y, w, h), int x, int y, int w, int h);
void _evas_canvas_render_dump(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_render_dump);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_render_dump);
void _evas_canvas_render(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_render);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_render);
void _evas_canvas_font_path_prepend(Eo *obj, Evas_Public_Data *pd, const char *path);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_font_path_prepend, EFL_FUNC_CALL(path), const char *path);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_font_path_prepend, EFL_FUNC_CALL(path), const char *path);
void _evas_canvas_obscured_clear(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_obscured_clear);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_obscured_clear);
int _evas_canvas_coord_screen_x_to_world(const Eo *obj, Evas_Public_Data *pd, int x);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_coord_screen_x_to_world, int, 0, EFL_FUNC_CALL(x), int x);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_coord_screen_x_to_world, int, 0, EFL_FUNC_CALL(x), int x);
void _evas_canvas_key_lock_add(Eo *obj, Evas_Public_Data *pd, const char *keyname);
-EOAPI EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_add, EFL_FUNC_CALL(keyname), const char *keyname);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_canvas_key_lock_add, EFL_FUNC_CALL(keyname), const char *keyname);
void _evas_canvas_render_idle_flush(Eo *obj, Evas_Public_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY(evas_canvas_render_idle_flush);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(evas_canvas_render_idle_flush);
Evas_Device *_evas_canvas_default_device_get(const Eo *obj, Evas_Public_Data *pd, Evas_Device_Class type);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_default_device_get, Evas_Device *, NULL, EFL_FUNC_CALL(type), Evas_Device_Class type);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_default_device_get, Evas_Device *, NULL, EFL_FUNC_CALL(type), Evas_Device_Class type);
int _evas_canvas_coord_world_y_to_screen(const Eo *obj, Evas_Public_Data *pd, int y);
-EOAPI EFL_FUNC_BODYV_CONST(evas_canvas_coord_world_y_to_screen, int, 0, EFL_FUNC_CALL(y), int y);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_canvas_coord_world_y_to_screen, int, 0, EFL_FUNC_CALL(y), int y);
Efl_Object *_evas_canvas_efl_object_constructor(Eo *obj, Evas_Public_Data *pd);
diff --git a/src/lib/evas/canvas/evas_canvas_eo.h b/src/lib/evas/canvas/evas_canvas_eo.h
index 938d59fcee..241ad9ccff 100644
--- a/src/lib/evas/canvas/evas_canvas_eo.h
+++ b/src/lib/evas/canvas/evas_canvas_eo.h
@@ -19,7 +19,7 @@ typedef Eo Evas_Canvas;
*/
#define EVAS_CANVAS_CLASS evas_canvas_class_get()
-EWAPI const Efl_Class *evas_canvas_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_canvas_class_get(void) EINA_CONST;
/**
* @brief Set the image cache.
@@ -31,7 +31,7 @@ EWAPI const Efl_Class *evas_canvas_class_get(void);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_image_cache_set(Eo *obj, int size);
+EVAS_API EVAS_API_WEAK void evas_canvas_image_cache_set(Eo *obj, int size);
/**
* @brief Get the image cache.
@@ -44,7 +44,7 @@ EOAPI void evas_canvas_image_cache_set(Eo *obj, int size);
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_image_cache_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_canvas_image_cache_get(const Eo *obj);
/**
* @brief Set the default set of flags an event begins with
@@ -60,7 +60,7 @@ EOAPI int evas_canvas_image_cache_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_event_default_flags_set(Eo *obj, Evas_Event_Flags flags);
+EVAS_API EVAS_API_WEAK void evas_canvas_event_default_flags_set(Eo *obj, Evas_Event_Flags flags);
/**
* @brief Get the default set of flags an event begins with
@@ -75,7 +75,7 @@ EOAPI void evas_canvas_event_default_flags_set(Eo *obj, Evas_Event_Flags flags);
*
* @ingroup Evas_Canvas
*/
-EOAPI Evas_Event_Flags evas_canvas_event_default_flags_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Evas_Event_Flags evas_canvas_event_default_flags_get(const Eo *obj);
/**
* @brief Changes the size of font cache of the given evas.
@@ -85,7 +85,7 @@ EOAPI Evas_Event_Flags evas_canvas_event_default_flags_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_font_cache_set(Eo *obj, int size);
+EVAS_API EVAS_API_WEAK void evas_canvas_font_cache_set(Eo *obj, int size);
/**
* @brief Get the size of font cache of the given evas in bytes.
@@ -96,7 +96,7 @@ EOAPI void evas_canvas_font_cache_set(Eo *obj, int size);
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_font_cache_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_canvas_font_cache_get(const Eo *obj);
/**
* @brief Attaches a specific pointer to the evas for fetching later.
@@ -106,7 +106,7 @@ EOAPI int evas_canvas_font_cache_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_data_attach_set(Eo *obj, void *data);
+EVAS_API EVAS_API_WEAK void evas_canvas_data_attach_set(Eo *obj, void *data);
/**
* @brief Returns the pointer attached by @ref evas_canvas_data_attach_set.
@@ -117,7 +117,7 @@ EOAPI void evas_canvas_data_attach_set(Eo *obj, void *data);
*
* @ingroup Evas_Canvas
*/
-EOAPI void *evas_canvas_data_attach_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK void *evas_canvas_data_attach_get(const Eo *obj);
/**
* @brief Retrieve the object focused by the default seat.
@@ -135,9 +135,7 @@ EOAPI void *evas_canvas_data_attach_get(const Eo *obj);
*
* See also @ref evas_object_focus_set, @ref evas_object_focus_get, @ref
* evas_object_key_grab, @ref evas_object_key_ungrab,
- * @ref evas_canvas_seat_focus_get, @ref efl_canvas_object_seat_focus_check,
- * @ref efl_canvas_object_seat_focus_add,
- * @ref efl_canvas_object_seat_focus_del.
+ * @ref evas_canvas_seat_focus_get
*
* @param[in] obj The object.
*
@@ -145,7 +143,7 @@ EOAPI void *evas_canvas_data_attach_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI Efl_Canvas_Object *evas_canvas_focus_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_canvas_focus_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Return the focused object by a given seat.
@@ -161,7 +159,7 @@ EOAPI Efl_Canvas_Object *evas_canvas_focus_get(const Eo *obj) EINA_WARN_UNUSED_R
*
* @ingroup Evas_Canvas
*/
-EOAPI Efl_Canvas_Object *evas_canvas_seat_focus_get(const Eo *obj, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_canvas_seat_focus_get(const Eo *obj, Evas_Device *seat);
/**
* @brief Get the highest (stacked) Evas object on the canvas @c e.
@@ -181,7 +179,7 @@ EOAPI Efl_Canvas_Object *evas_canvas_seat_focus_get(const Eo *obj, Evas_Device *
*
* @ingroup Evas_Canvas
*/
-EOAPI Efl_Canvas_Object *evas_canvas_object_top_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_canvas_object_top_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief This function returns the current known default pointer coordinates.
@@ -195,7 +193,7 @@ EOAPI Efl_Canvas_Object *evas_canvas_object_top_get(const Eo *obj) EINA_WARN_UNU
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_pointer_canvas_xy_by_device_get(const Eo *obj, Evas_Device *dev, int *x, int *y);
+EVAS_API EVAS_API_WEAK void evas_canvas_pointer_canvas_xy_by_device_get(const Eo *obj, Evas_Device *dev, int *x, int *y);
/**
* @brief This function returns the current known default pointer coordinates
@@ -211,7 +209,7 @@ EOAPI void evas_canvas_pointer_canvas_xy_by_device_get(const Eo *obj, Evas_Devic
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_pointer_canvas_xy_get(const Eo *obj, int *x, int *y);
+EVAS_API EVAS_API_WEAK void evas_canvas_pointer_canvas_xy_get(const Eo *obj, int *x, int *y);
/**
* @brief Get the number of mouse or multi presses currently active.
@@ -224,7 +222,7 @@ EOAPI void evas_canvas_pointer_canvas_xy_get(const Eo *obj, int *x, int *y);
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_event_down_count_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_canvas_event_down_count_get(const Eo *obj);
/**
* @brief This gets the internal counter that counts the number of smart
@@ -246,7 +244,7 @@ EOAPI int evas_canvas_event_down_count_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_smart_objects_calculate_count_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_canvas_smart_objects_calculate_count_get(const Eo *obj);
/**
* @brief Get the focus state for the default seat.
@@ -257,7 +255,7 @@ EOAPI int evas_canvas_smart_objects_calculate_count_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI Eina_Bool evas_canvas_focus_state_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_canvas_focus_state_get(const Eo *obj);
/**
* @brief Get the focus state by a given seat.
@@ -270,7 +268,7 @@ EOAPI Eina_Bool evas_canvas_focus_state_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI Eina_Bool evas_canvas_seat_focus_state_get(const Eo *obj, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_canvas_seat_focus_state_get(const Eo *obj, Evas_Device *seat);
/**
* @brief Get the changed marker for the canvas.
@@ -283,7 +281,7 @@ EOAPI Eina_Bool evas_canvas_seat_focus_state_get(const Eo *obj, Evas_Device *sea
*
* @ingroup Evas_Canvas
*/
-EOAPI Eina_Bool evas_canvas_changed_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_canvas_changed_get(const Eo *obj);
/**
* @brief This function returns the current known pointer coordinates.
@@ -297,7 +295,7 @@ EOAPI Eina_Bool evas_canvas_changed_get(const Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_pointer_output_xy_by_device_get(const Eo *obj, Evas_Device *dev, int *x, int *y);
+EVAS_API EVAS_API_WEAK void evas_canvas_pointer_output_xy_by_device_get(const Eo *obj, Evas_Device *dev, int *x, int *y);
/**
* @brief This function returns the current known default pointer coordinates.
@@ -313,7 +311,7 @@ EOAPI void evas_canvas_pointer_output_xy_by_device_get(const Eo *obj, Evas_Devic
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_pointer_output_xy_get(const Eo *obj, int *x, int *y);
+EVAS_API EVAS_API_WEAK void evas_canvas_pointer_output_xy_get(const Eo *obj, int *x, int *y);
/**
* @brief Get the lowest (stacked) Evas object on the canvas @c e.
@@ -325,7 +323,7 @@ EOAPI void evas_canvas_pointer_output_xy_get(const Eo *obj, int *x, int *y);
* only on the ones at the "top level", with regard to object parenting.
*
* See also @ref evas_object_layer_get, @ref evas_object_layer_set, @ref
- * evas_object_below_get, @ref evas_object_below_set.
+ * evas_object_below_get.
*
* @param[in] obj The object.
*
@@ -333,7 +331,7 @@ EOAPI void evas_canvas_pointer_output_xy_get(const Eo *obj, int *x, int *y);
*
* @ingroup Evas_Canvas
*/
-EOAPI Efl_Canvas_Object *evas_canvas_object_bottom_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_canvas_object_bottom_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns a bitmask with the mouse buttons currently pressed, set to 1.
@@ -345,7 +343,7 @@ EOAPI Efl_Canvas_Object *evas_canvas_object_bottom_get(const Eo *obj) EINA_WARN_
*
* @ingroup Evas_Canvas
*/
-EOAPI unsigned int evas_canvas_pointer_button_down_mask_by_device_get(const Eo *obj, Evas_Device *dev);
+EVAS_API EVAS_API_WEAK unsigned int evas_canvas_pointer_button_down_mask_by_device_get(const Eo *obj, Evas_Device *dev);
/**
* @brief Returns a bitmask with the default mouse buttons currently pressed,
@@ -371,7 +369,7 @@ EOAPI unsigned int evas_canvas_pointer_button_down_mask_by_device_get(const Eo *
*
* @ingroup Evas_Canvas
*/
-EOAPI unsigned int evas_canvas_pointer_button_down_mask_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK unsigned int evas_canvas_pointer_button_down_mask_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieve a list of Evas objects lying over a given position in a
@@ -391,7 +389,7 @@ EOAPI unsigned int evas_canvas_pointer_button_down_mask_get(const Eo *obj) EINA_
*
* @ingroup Evas_Canvas
*/
-EOAPI Eina_List *evas_canvas_tree_objects_at_xy_get(Eo *obj, Efl_Canvas_Object *stop, int x, int y) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_List *evas_canvas_tree_objects_at_xy_get(Eo *obj, Efl_Canvas_Object *stop, int x, int y) EINA_WARN_UNUSED_RESULT;
/**
* @brief Enables or turns on programmatically the lock key with name
@@ -409,7 +407,7 @@ EOAPI Eina_List *evas_canvas_tree_objects_at_xy_get(Eo *obj, Efl_Canvas_Object *
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_lock_on(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_lock_on(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Enables or turns on programmatically the lock key with name
@@ -431,7 +429,7 @@ EOAPI void evas_canvas_key_lock_on(Eo *obj, const char *keyname) EINA_ARG_NONNUL
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_seat_key_lock_on(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_key_lock_on(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief Disables or turns off programmatically the lock key with name
@@ -452,7 +450,7 @@ EOAPI void evas_canvas_seat_key_lock_on(Eo *obj, const char *keyname, Evas_Devic
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_seat_key_lock_off(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_key_lock_off(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief Adds the @c keyname key to the current list of modifier keys.
@@ -478,7 +476,7 @@ EOAPI void evas_canvas_seat_key_lock_off(Eo *obj, const char *keyname, Evas_Devi
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_modifier_add(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_modifier_add(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Disables or turns off programmatically the modifier key with name
@@ -494,7 +492,7 @@ EOAPI void evas_canvas_key_modifier_add(Eo *obj, const char *keyname) EINA_ARG_N
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_modifier_off(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_modifier_off(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Render the given Evas canvas asynchronously.
@@ -519,13 +517,13 @@ EOAPI void evas_canvas_key_modifier_off(Eo *obj, const char *keyname) EINA_ARG_N
*
* @ingroup Evas_Canvas
*/
-EOAPI Eina_Bool evas_canvas_render_async(Eo *obj);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_canvas_render_async(Eo *obj);
/** Inform the evas that it lost the focus from the default seat.
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_focus_out(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_focus_out(Eo *obj);
/**
* @brief Update the canvas internal objects but not triggering immediate
@@ -538,7 +536,7 @@ EOAPI void evas_canvas_focus_out(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_norender(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_norender(Eo *obj);
/**
* @brief Pop the nochange flag down 1.
@@ -552,7 +550,7 @@ EOAPI void evas_canvas_norender(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_nochange_pop(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_nochange_pop(Eo *obj);
/**
* @brief Disables or turns off programmatically the lock key with name
@@ -569,7 +567,7 @@ EOAPI void evas_canvas_nochange_pop(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_lock_off(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_lock_off(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Push the nochange flag up 1
@@ -583,13 +581,13 @@ EOAPI void evas_canvas_key_lock_off(Eo *obj, const char *keyname) EINA_ARG_NONNU
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_nochange_push(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_nochange_push(Eo *obj);
/** Force the given evas and associated engine to flush its font cache.
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_font_cache_flush(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_font_cache_flush(Eo *obj);
/**
* @brief Enables or turns on programmatically the modifier key with name
@@ -607,7 +605,7 @@ EOAPI void evas_canvas_font_cache_flush(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_modifier_on(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_modifier_on(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Enables or turns on programmatically the modifier key with name
@@ -629,7 +627,7 @@ EOAPI void evas_canvas_key_modifier_on(Eo *obj, const char *keyname) EINA_ARG_NO
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_seat_key_modifier_on(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_key_modifier_on(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief Disables or turns off programmatically the modifier key with name
@@ -649,7 +647,7 @@ EOAPI void evas_canvas_seat_key_modifier_on(Eo *obj, const char *keyname, Evas_D
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_seat_key_modifier_off(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_key_modifier_off(Eo *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief List of available font descriptions known or found by this evas.
@@ -665,7 +663,7 @@ EOAPI void evas_canvas_seat_key_modifier_off(Eo *obj, const char *keyname, Evas_
*
* @ingroup Evas_Canvas
*/
-EOAPI Eina_List *evas_canvas_font_available_list(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_List *evas_canvas_font_available_list(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves the object on the given evas with the given name.
@@ -683,7 +681,7 @@ EOAPI Eina_List *evas_canvas_font_available_list(const Eo *obj) EINA_WARN_UNUSED
*
* @ingroup Evas_Canvas
*/
-EOAPI Efl_Canvas_Object *evas_canvas_object_name_find(const Eo *obj, const char *name) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_canvas_object_name_find(const Eo *obj, const char *name) EINA_WARN_UNUSED_RESULT;
/**
* @brief Appends a font path to the list of font paths used by the given evas.
@@ -693,13 +691,13 @@ EOAPI Efl_Canvas_Object *evas_canvas_object_name_find(const Eo *obj, const char
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_font_path_append(Eo *obj, const char *path) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_font_path_append(Eo *obj, const char *path) EINA_ARG_NONNULL(2);
/** Removes all font paths loaded into memory for the given evas.
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_font_path_clear(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_font_path_clear(Eo *obj);
/**
* @brief This function returns the nth touch point's coordinates.
@@ -714,7 +712,7 @@ EOAPI void evas_canvas_font_path_clear(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_touch_point_list_nth_xy_get(Eo *obj, unsigned int n, double *x, double *y);
+EVAS_API EVAS_API_WEAK void evas_canvas_touch_point_list_nth_xy_get(Eo *obj, unsigned int n, double *x, double *y);
/**
* @brief Removes the @c keyname key from the current list of lock keys on
@@ -725,7 +723,7 @@ EOAPI void evas_canvas_touch_point_list_nth_xy_get(Eo *obj, unsigned int n, doub
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_lock_del(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_lock_del(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Add a damage rectangle.
@@ -744,13 +742,13 @@ EOAPI void evas_canvas_key_lock_del(Eo *obj, const char *keyname) EINA_ARG_NONNU
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_damage_rectangle_add(Eo *obj, int x, int y, int w, int h);
+EVAS_API EVAS_API_WEAK void evas_canvas_damage_rectangle_add(Eo *obj, int x, int y, int w, int h);
/** Sync evas canvas
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_sync(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_sync(Eo *obj);
/**
* @brief Retrieves the list of font paths used by the given evas.
@@ -761,7 +759,7 @@ EOAPI void evas_canvas_sync(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI const Eina_List *evas_canvas_font_path_list(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK const Eina_List *evas_canvas_font_path_list(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Reload the image cache.
@@ -771,7 +769,7 @@ EOAPI const Eina_List *evas_canvas_font_path_list(const Eo *obj) EINA_WARN_UNUSE
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_image_cache_reload(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_image_cache_reload(Eo *obj);
/**
* @brief Convert/scale a canvas coordinate into output screen coordinates.
@@ -788,7 +786,7 @@ EOAPI void evas_canvas_image_cache_reload(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_coord_world_x_to_screen(const Eo *obj, int x) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK int evas_canvas_coord_world_x_to_screen(const Eo *obj, int x) EINA_WARN_UNUSED_RESULT;
/**
* @brief Force immediate renderization of the given Evas canvas.
@@ -808,11 +806,11 @@ EOAPI int evas_canvas_coord_world_x_to_screen(const Eo *obj, int x) EINA_WARN_UN
* @param[in] obj The object.
*
* @return A newly allocated list of updated rectangles of the canvas
- * (@Eina.Rect structs). Free this list with @ref evas_render_updates_free.
+ * (@ref Eina_Rect structs). Free this list with @ref evas_render_updates_free.
*
* @ingroup Evas_Canvas
*/
-EOAPI Eina_List *evas_canvas_render_updates(Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_List *evas_canvas_render_updates(Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Flush the image cache of the canvas.
@@ -822,7 +820,7 @@ EOAPI Eina_List *evas_canvas_render_updates(Eo *obj) EINA_WARN_UNUSED_RESULT;
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_image_cache_flush(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_image_cache_flush(Eo *obj);
/**
* @brief Convert/scale an output screen coordinate into canvas coordinates.
@@ -839,7 +837,7 @@ EOAPI void evas_canvas_image_cache_flush(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_coord_screen_y_to_world(const Eo *obj, int y) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK int evas_canvas_coord_screen_y_to_world(const Eo *obj, int y) EINA_WARN_UNUSED_RESULT;
/**
* @brief Removes the @c keyname key from the current list of modifier keys on
@@ -852,13 +850,13 @@ EOAPI int evas_canvas_coord_screen_y_to_world(const Eo *obj, int y) EINA_WARN_UN
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_modifier_del(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_modifier_del(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/** Inform to the evas that it got the focus from the default seat.
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_focus_in(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_focus_in(Eo *obj);
/**
* @brief Inform to the evas that it got the focus from a given seat.
@@ -870,7 +868,7 @@ EOAPI void evas_canvas_focus_in(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_seat_focus_in(Eo *obj, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_focus_in(Eo *obj, Evas_Device *seat);
/**
* @brief Inform to the evas that it lost the focus from a given seat.
@@ -882,7 +880,7 @@ EOAPI void evas_canvas_seat_focus_in(Eo *obj, Evas_Device *seat);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_seat_focus_out(Eo *obj, Evas_Device *seat);
+EVAS_API EVAS_API_WEAK void evas_canvas_seat_focus_out(Eo *obj, Evas_Device *seat);
/**
* @brief Add an "obscured region" to an Evas canvas.
@@ -923,7 +921,7 @@ EOAPI void evas_canvas_seat_focus_out(Eo *obj, Evas_Device *seat);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_obscured_rectangle_add(Eo *obj, int x, int y, int w, int h);
+EVAS_API EVAS_API_WEAK void evas_canvas_obscured_rectangle_add(Eo *obj, int x, int y, int w, int h);
/**
* @brief Make the canvas discard as much data as possible used by the engine
@@ -938,13 +936,13 @@ EOAPI void evas_canvas_obscured_rectangle_add(Eo *obj, int x, int y, int w, int
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_render_dump(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_render_dump(Eo *obj);
/** Force renderization of the given canvas.
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_render(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_render(Eo *obj);
/**
* @brief Prepends a font path to the list of font paths used by the given
@@ -955,7 +953,7 @@ EOAPI void evas_canvas_render(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_font_path_prepend(Eo *obj, const char *path) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_font_path_prepend(Eo *obj, const char *path) EINA_ARG_NONNULL(2);
/**
* @brief Remove all "obscured regions" from an Evas canvas.
@@ -975,7 +973,7 @@ EOAPI void evas_canvas_font_path_prepend(Eo *obj, const char *path) EINA_ARG_NON
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_obscured_clear(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_obscured_clear(Eo *obj);
/**
* @brief Convert/scale an output screen coordinate into canvas coordinates.
@@ -992,7 +990,7 @@ EOAPI void evas_canvas_obscured_clear(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_coord_screen_x_to_world(const Eo *obj, int x) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK int evas_canvas_coord_screen_x_to_world(const Eo *obj, int x) EINA_WARN_UNUSED_RESULT;
/**
* @brief Adds the @c keyname key to the current list of lock keys.
@@ -1018,7 +1016,7 @@ EOAPI int evas_canvas_coord_screen_x_to_world(const Eo *obj, int x) EINA_WARN_UN
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_key_lock_add(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK void evas_canvas_key_lock_add(Eo *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Make the canvas discard internally cached data used for rendering.
@@ -1030,7 +1028,7 @@ EOAPI void evas_canvas_key_lock_add(Eo *obj, const char *keyname) EINA_ARG_NONNU
*
* @ingroup Evas_Canvas
*/
-EOAPI void evas_canvas_render_idle_flush(Eo *obj);
+EVAS_API EVAS_API_WEAK void evas_canvas_render_idle_flush(Eo *obj);
/**
* @brief Return the default device of a given type.
@@ -1046,7 +1044,7 @@ EOAPI void evas_canvas_render_idle_flush(Eo *obj);
*
* @ingroup Evas_Canvas
*/
-EOAPI Evas_Device *evas_canvas_default_device_get(const Eo *obj, Evas_Device_Class type);
+EVAS_API EVAS_API_WEAK Evas_Device *evas_canvas_default_device_get(const Eo *obj, Evas_Device_Class type);
/**
* @brief Convert/scale a canvas coordinate into output screen coordinates.
@@ -1063,6 +1061,6 @@ EOAPI Evas_Device *evas_canvas_default_device_get(const Eo *obj, Evas_Device_Cla
*
* @ingroup Evas_Canvas
*/
-EOAPI int evas_canvas_coord_world_y_to_screen(const Eo *obj, int y) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK int evas_canvas_coord_world_y_to_screen(const Eo *obj, int y) EINA_WARN_UNUSED_RESULT;
#endif
diff --git a/src/lib/evas/canvas/evas_canvas_eo.legacy.c b/src/lib/evas/canvas/evas_canvas_eo.legacy.c
index b864c2f6d4..767d0e46f6 100644
--- a/src/lib/evas/canvas/evas_canvas_eo.legacy.c
+++ b/src/lib/evas/canvas/evas_canvas_eo.legacy.c
@@ -1,383 +1,383 @@
-EAPI void
+EVAS_API void
evas_image_cache_set(Evas_Canvas *obj, int size)
{
evas_canvas_image_cache_set(obj, size);
}
-EAPI int
+EVAS_API int
evas_image_cache_get(const Evas_Canvas *obj)
{
return evas_canvas_image_cache_get(obj);
}
-EAPI void
+EVAS_API void
evas_event_default_flags_set(Evas_Canvas *obj, Evas_Event_Flags flags)
{
- evas_canvas_event_default_flags_set(obj, (Efl_Input_Flags)flags);
+ evas_canvas_event_default_flags_set(obj, flags);
}
-EAPI Evas_Event_Flags
+EVAS_API Evas_Event_Flags
evas_event_default_flags_get(const Evas_Canvas *obj)
{
return (Evas_Event_Flags)evas_canvas_event_default_flags_get(obj);
}
-EAPI void
+EVAS_API void
evas_font_cache_set(Evas_Canvas *obj, int size)
{
evas_canvas_font_cache_set(obj, size);
}
-EAPI int
+EVAS_API int
evas_font_cache_get(const Evas_Canvas *obj)
{
return evas_canvas_font_cache_get(obj);
}
-EAPI void
+EVAS_API void
evas_data_attach_set(Evas_Canvas *obj, void *data)
{
evas_canvas_data_attach_set(obj, data);
}
-EAPI void *
+EVAS_API void *
evas_data_attach_get(const Evas_Canvas *obj)
{
return evas_canvas_data_attach_get(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_focus_get(const Evas_Canvas *obj)
{
return evas_canvas_focus_get(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_seat_focus_get(const Evas_Canvas *obj, Evas_Device *seat)
{
return evas_canvas_seat_focus_get(obj, seat);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_top_get(const Evas_Canvas *obj)
{
return evas_canvas_object_top_get(obj);
}
-EAPI void
+EVAS_API void
evas_pointer_canvas_xy_by_device_get(const Evas_Canvas *obj, Evas_Device *dev, int *x, int *y)
{
evas_canvas_pointer_canvas_xy_by_device_get(obj, dev, x, y);
}
-EAPI void
+EVAS_API void
evas_pointer_canvas_xy_get(const Evas_Canvas *obj, int *x, int *y)
{
evas_canvas_pointer_canvas_xy_get(obj, x, y);
}
-EAPI int
+EVAS_API int
evas_event_down_count_get(const Evas_Canvas *obj)
{
return evas_canvas_event_down_count_get(obj);
}
-EAPI int
+EVAS_API int
evas_smart_objects_calculate_count_get(const Evas_Canvas *obj)
{
return evas_canvas_smart_objects_calculate_count_get(obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_focus_state_get(const Evas_Canvas *obj)
{
return evas_canvas_focus_state_get(obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_seat_focus_state_get(const Evas_Canvas *obj, Evas_Device *seat)
{
return evas_canvas_seat_focus_state_get(obj, seat);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_changed_get(const Evas_Canvas *obj)
{
return evas_canvas_changed_get(obj);
}
-EAPI void
+EVAS_API void
evas_pointer_output_xy_by_device_get(const Evas_Canvas *obj, Evas_Device *dev, int *x, int *y)
{
evas_canvas_pointer_output_xy_by_device_get(obj, dev, x, y);
}
-EAPI void
+EVAS_API void
evas_pointer_output_xy_get(const Evas_Canvas *obj, int *x, int *y)
{
evas_canvas_pointer_output_xy_get(obj, x, y);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_bottom_get(const Evas_Canvas *obj)
{
return evas_canvas_object_bottom_get(obj);
}
-EAPI unsigned int
+EVAS_API unsigned int
evas_pointer_button_down_mask_by_device_get(const Evas_Canvas *obj, Evas_Device *dev)
{
return evas_canvas_pointer_button_down_mask_by_device_get(obj, dev);
}
-EAPI unsigned int
+EVAS_API unsigned int
evas_pointer_button_down_mask_get(const Evas_Canvas *obj)
{
return evas_canvas_pointer_button_down_mask_get(obj);
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_tree_objects_at_xy_get(Evas_Canvas *obj, Efl_Canvas_Object *stop, int x, int y)
{
return evas_canvas_tree_objects_at_xy_get(obj, stop, x, y);
}
-EAPI void
+EVAS_API void
evas_key_lock_on(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_lock_on(obj, keyname);
}
-EAPI void
+EVAS_API void
evas_seat_key_lock_on(Evas_Canvas *obj, const char *keyname, Evas_Device *seat)
{
evas_canvas_seat_key_lock_on(obj, keyname, seat);
}
-EAPI void
+EVAS_API void
evas_seat_key_lock_off(Evas_Canvas *obj, const char *keyname, Evas_Device *seat)
{
evas_canvas_seat_key_lock_off(obj, keyname, seat);
}
-EAPI void
+EVAS_API void
evas_key_modifier_add(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_modifier_add(obj, keyname);
}
-EAPI void
+EVAS_API void
evas_key_modifier_off(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_modifier_off(obj, keyname);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_render_async(Evas_Canvas *obj)
{
return evas_canvas_render_async(obj);
}
-EAPI void
+EVAS_API void
evas_focus_out(Evas_Canvas *obj)
{
evas_canvas_focus_out(obj);
}
-EAPI void
+EVAS_API void
evas_norender(Evas_Canvas *obj)
{
evas_canvas_norender(obj);
}
-EAPI void
+EVAS_API void
evas_nochange_pop(Evas_Canvas *obj)
{
evas_canvas_nochange_pop(obj);
}
-EAPI void
+EVAS_API void
evas_key_lock_off(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_lock_off(obj, keyname);
}
-EAPI void
+EVAS_API void
evas_nochange_push(Evas_Canvas *obj)
{
evas_canvas_nochange_push(obj);
}
-EAPI void
+EVAS_API void
evas_font_cache_flush(Evas_Canvas *obj)
{
evas_canvas_font_cache_flush(obj);
}
-EAPI void
+EVAS_API void
evas_key_modifier_on(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_modifier_on(obj, keyname);
}
-EAPI void
+EVAS_API void
evas_seat_key_modifier_on(Evas_Canvas *obj, const char *keyname, Evas_Device *seat)
{
evas_canvas_seat_key_modifier_on(obj, keyname, seat);
}
-EAPI void
+EVAS_API void
evas_seat_key_modifier_off(Evas_Canvas *obj, const char *keyname, Evas_Device *seat)
{
evas_canvas_seat_key_modifier_off(obj, keyname, seat);
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_font_available_list(const Evas_Canvas *obj)
{
return evas_canvas_font_available_list(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_name_find(const Evas_Canvas *obj, const char *name)
{
return evas_canvas_object_name_find(obj, name);
}
-EAPI void
+EVAS_API void
evas_font_path_append(Evas_Canvas *obj, const char *path)
{
evas_canvas_font_path_append(obj, path);
}
-EAPI void
+EVAS_API void
evas_font_path_clear(Evas_Canvas *obj)
{
evas_canvas_font_path_clear(obj);
}
-EAPI void
+EVAS_API void
evas_key_lock_del(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_lock_del(obj, keyname);
}
-EAPI void
+EVAS_API void
evas_damage_rectangle_add(Evas_Canvas *obj, int x, int y, int w, int h)
{
evas_canvas_damage_rectangle_add(obj, x, y, w, h);
}
-EAPI void
+EVAS_API void
evas_sync(Evas_Canvas *obj)
{
evas_canvas_sync(obj);
}
-EAPI const Eina_List *
+EVAS_API const Eina_List *
evas_font_path_list(const Evas_Canvas *obj)
{
return evas_canvas_font_path_list(obj);
}
-EAPI void
+EVAS_API void
evas_image_cache_reload(Evas_Canvas *obj)
{
evas_canvas_image_cache_reload(obj);
}
-EAPI int
+EVAS_API int
evas_coord_world_x_to_screen(const Evas_Canvas *obj, int x)
{
return evas_canvas_coord_world_x_to_screen(obj, x);
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_render_updates(Evas_Canvas *obj)
{
return evas_canvas_render_updates(obj);
}
-EAPI void
+EVAS_API void
evas_image_cache_flush(Evas_Canvas *obj)
{
evas_canvas_image_cache_flush(obj);
}
-EAPI int
+EVAS_API int
evas_coord_screen_y_to_world(const Evas_Canvas *obj, int y)
{
return evas_canvas_coord_screen_y_to_world(obj, y);
}
-EAPI void
+EVAS_API void
evas_key_modifier_del(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_modifier_del(obj, keyname);
}
-EAPI void
+EVAS_API void
evas_focus_in(Evas_Canvas *obj)
{
evas_canvas_focus_in(obj);
}
-EAPI void
+EVAS_API void
evas_obscured_rectangle_add(Evas_Canvas *obj, int x, int y, int w, int h)
{
evas_canvas_obscured_rectangle_add(obj, x, y, w, h);
}
-EAPI void
+EVAS_API void
evas_render_dump(Evas_Canvas *obj)
{
evas_canvas_render_dump(obj);
}
-EAPI void
+EVAS_API void
evas_render(Evas_Canvas *obj)
{
evas_canvas_render(obj);
}
-EAPI void
+EVAS_API void
evas_font_path_prepend(Evas_Canvas *obj, const char *path)
{
evas_canvas_font_path_prepend(obj, path);
}
-EAPI void
+EVAS_API void
evas_obscured_clear(Evas_Canvas *obj)
{
evas_canvas_obscured_clear(obj);
}
-EAPI int
+EVAS_API int
evas_coord_screen_x_to_world(const Evas_Canvas *obj, int x)
{
return evas_canvas_coord_screen_x_to_world(obj, x);
}
-EAPI void
+EVAS_API void
evas_key_lock_add(Evas_Canvas *obj, const char *keyname)
{
evas_canvas_key_lock_add(obj, keyname);
}
-EAPI void
+EVAS_API void
evas_render_idle_flush(Evas_Canvas *obj)
{
evas_canvas_render_idle_flush(obj);
}
-EAPI Evas_Device *
+EVAS_API Evas_Device *
evas_default_device_get(const Evas_Canvas *obj, Evas_Device_Class type)
{
return evas_canvas_default_device_get(obj, type);
}
-EAPI int
+EVAS_API int
evas_coord_world_y_to_screen(const Evas_Canvas *obj, int y)
{
return evas_canvas_coord_world_y_to_screen(obj, y);
diff --git a/src/lib/evas/canvas/evas_canvas_eo.legacy.h b/src/lib/evas/canvas/evas_canvas_eo.legacy.h
index 88a6591168..caf497e6bf 100644
--- a/src/lib/evas/canvas/evas_canvas_eo.legacy.h
+++ b/src/lib/evas/canvas/evas_canvas_eo.legacy.h
@@ -22,9 +22,9 @@ typedef Eo Evas_Canvas;
* @param[in] obj The object.
* @param[in] size The cache size.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_image_cache_set(Evas_Canvas *obj, int size);
+EVAS_API void evas_image_cache_set(Evas_Canvas *obj, int size);
/**
* @brief Get the image cache.
@@ -35,9 +35,9 @@ EAPI void evas_image_cache_set(Evas_Canvas *obj, int size);
*
* @return The cache size.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_image_cache_get(const Evas_Canvas *obj);
+EVAS_API int evas_image_cache_get(const Evas_Canvas *obj);
/**
* @brief Set the default set of flags an event begins with
@@ -51,9 +51,9 @@ EAPI int evas_image_cache_get(const Evas_Canvas *obj);
*
* @since 1.2
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_event_default_flags_set(Evas_Canvas *obj, Evas_Event_Flags flags);
+EVAS_API void evas_event_default_flags_set(Evas_Canvas *obj, Evas_Event_Flags flags);
/**
* @brief Get the default set of flags an event begins with
@@ -66,9 +66,9 @@ EAPI void evas_event_default_flags_set(Evas_Canvas *obj, Evas_Event_Flags flags)
*
* @since 1.2
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Evas_Event_Flags evas_event_default_flags_get(const Evas_Canvas *obj);
+EVAS_API Evas_Event_Flags evas_event_default_flags_get(const Evas_Canvas *obj);
/**
* @brief Changes the size of font cache of the given evas.
@@ -76,9 +76,9 @@ EAPI Evas_Event_Flags evas_event_default_flags_get(const Evas_Canvas *obj);
* @param[in] obj The object.
* @param[in] size The size in bytes.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_font_cache_set(Evas_Canvas *obj, int size);
+EVAS_API void evas_font_cache_set(Evas_Canvas *obj, int size);
/**
* @brief Get the size of font cache of the given evas in bytes.
@@ -87,9 +87,9 @@ EAPI void evas_font_cache_set(Evas_Canvas *obj, int size);
*
* @return The size in bytes.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_font_cache_get(const Evas_Canvas *obj);
+EVAS_API int evas_font_cache_get(const Evas_Canvas *obj);
/**
* @brief Attaches a specific pointer to the evas for fetching later.
@@ -97,9 +97,9 @@ EAPI int evas_font_cache_get(const Evas_Canvas *obj);
* @param[in] obj The object.
* @param[in] data The attached pointer.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_data_attach_set(Evas_Canvas *obj, void *data);
+EVAS_API void evas_data_attach_set(Evas_Canvas *obj, void *data);
/**
* @brief Returns the pointer attached by @ref evas_data_attach_set.
@@ -108,9 +108,9 @@ EAPI void evas_data_attach_set(Evas_Canvas *obj, void *data);
*
* @return The attached pointer.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void *evas_data_attach_get(const Evas_Canvas *obj);
+EVAS_API void *evas_data_attach_get(const Evas_Canvas *obj);
/**
* @brief Retrieve the object focused by the default seat.
@@ -127,18 +127,15 @@ EAPI void *evas_data_attach_get(const Evas_Canvas *obj);
* @c null, if none.
*
* See also @ref evas_object_focus_set, @ref evas_object_focus_get, @ref
- * evas_object_key_grab, @ref evas_object_key_ungrab, @ref evas_seat_focus_get,
- * @ref Efl.Canvas.Object.seat_focus_check,
- * @ref Efl.Canvas.Object.seat_focus_add,
- * @ref Efl.Canvas.Object.seat_focus_del.
+ * evas_object_key_grab, @ref evas_object_key_ungrab, @ref evas_seat_focus_get.
*
* @param[in] obj The object.
*
* @return The object that has focus or @c null if there is not one.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Efl_Canvas_Object *evas_focus_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Efl_Canvas_Object *evas_focus_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Return the focused object by a given seat.
@@ -152,9 +149,9 @@ EAPI Efl_Canvas_Object *evas_focus_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Efl_Canvas_Object *evas_seat_focus_get(const Evas_Canvas *obj, Evas_Device *seat);
+EVAS_API Efl_Canvas_Object *evas_seat_focus_get(const Evas_Canvas *obj, Evas_Device *seat);
/**
* @brief Get the highest (stacked) Evas object on the canvas @c e.
@@ -172,9 +169,9 @@ EAPI Efl_Canvas_Object *evas_seat_focus_get(const Evas_Canvas *obj, Evas_Device
*
* @return A pointer to the highest object on it (if any) or @c null otherwise.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Efl_Canvas_Object *evas_object_top_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Efl_Canvas_Object *evas_object_top_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief This function returns the current known default pointer coordinates.
@@ -186,9 +183,9 @@ EAPI Efl_Canvas_Object *evas_object_top_get(const Evas_Canvas *obj) EINA_WARN_UN
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_pointer_canvas_xy_by_device_get(const Evas_Canvas *obj, Evas_Device *dev, int *x, int *y);
+EVAS_API void evas_pointer_canvas_xy_by_device_get(const Evas_Canvas *obj, Evas_Device *dev, int *x, int *y);
/**
* @brief This function returns the current known default pointer coordinates
@@ -202,9 +199,9 @@ EAPI void evas_pointer_canvas_xy_by_device_get(const Evas_Canvas *obj, Evas_Devi
* @param[out] x The pointer to a Evas_Coord to be filled in.
* @param[out] y The pointer to a Evas_Coord to be filled in.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_pointer_canvas_xy_get(const Evas_Canvas *obj, int *x, int *y);
+EVAS_API void evas_pointer_canvas_xy_get(const Evas_Canvas *obj, int *x, int *y);
/**
* @brief Get the number of mouse or multi presses currently active.
@@ -215,9 +212,9 @@ EAPI void evas_pointer_canvas_xy_get(const Evas_Canvas *obj, int *x, int *y);
*
* @since 1.2
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_event_down_count_get(const Evas_Canvas *obj);
+EVAS_API int evas_event_down_count_get(const Evas_Canvas *obj);
/**
* @brief This gets the internal counter that counts the number of smart
@@ -237,9 +234,9 @@ EAPI int evas_event_down_count_get(const Evas_Canvas *obj);
*
* @since 1.1
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_smart_objects_calculate_count_get(const Evas_Canvas *obj);
+EVAS_API int evas_smart_objects_calculate_count_get(const Evas_Canvas *obj);
/**
* @brief Get the focus state for the default seat.
@@ -248,9 +245,9 @@ EAPI int evas_smart_objects_calculate_count_get(const Evas_Canvas *obj);
*
* @return @c true if focused, @c false otherwise
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_focus_state_get(const Evas_Canvas *obj);
+EVAS_API Eina_Bool evas_focus_state_get(const Evas_Canvas *obj);
/**
* @brief Get the focus state by a given seat.
@@ -261,9 +258,9 @@ EAPI Eina_Bool evas_focus_state_get(const Evas_Canvas *obj);
*
* @return @c true if the seat has the canvas focus, @c false otherwise.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_seat_focus_state_get(const Evas_Canvas *obj, Evas_Device *seat);
+EVAS_API Eina_Bool evas_seat_focus_state_get(const Evas_Canvas *obj, Evas_Device *seat);
/**
* @brief Get the changed marker for the canvas.
@@ -274,9 +271,9 @@ EAPI Eina_Bool evas_seat_focus_state_get(const Evas_Canvas *obj, Evas_Device *se
*
* @since 1.11
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_changed_get(const Evas_Canvas *obj);
+EVAS_API Eina_Bool evas_changed_get(const Evas_Canvas *obj);
/**
* @brief This function returns the current known pointer coordinates.
@@ -288,9 +285,9 @@ EAPI Eina_Bool evas_changed_get(const Evas_Canvas *obj);
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_pointer_output_xy_by_device_get(const Evas_Canvas *obj, Evas_Device *dev, int *x, int *y);
+EVAS_API void evas_pointer_output_xy_by_device_get(const Evas_Canvas *obj, Evas_Device *dev, int *x, int *y);
/**
* @brief This function returns the current known default pointer coordinates.
@@ -304,9 +301,9 @@ EAPI void evas_pointer_output_xy_by_device_get(const Evas_Canvas *obj, Evas_Devi
* @param[out] x The pointer to an integer to be filled in.
* @param[out] y The pointer to an integer to be filled in.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_pointer_output_xy_get(const Evas_Canvas *obj, int *x, int *y);
+EVAS_API void evas_pointer_output_xy_get(const Evas_Canvas *obj, int *x, int *y);
/**
* @brief Get the lowest (stacked) Evas object on the canvas @c e.
@@ -318,15 +315,15 @@ EAPI void evas_pointer_output_xy_get(const Evas_Canvas *obj, int *x, int *y);
* only on the ones at the "top level", with regard to object parenting.
*
* See also @ref evas_object_layer_get, @ref evas_object_layer_set, @ref
- * evas_object_below_get, @ref evas_object_below_set.
+ * evas_object_below_get.
*
* @param[in] obj The object.
*
* @return A pointer to the lowest object on it, if any, or @c null otherwise.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Efl_Canvas_Object *evas_object_bottom_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Efl_Canvas_Object *evas_object_bottom_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Returns a bitmask with the mouse buttons currently pressed, set to 1.
@@ -336,9 +333,9 @@ EAPI Efl_Canvas_Object *evas_object_bottom_get(const Evas_Canvas *obj) EINA_WARN
*
* @return A bitmask of the currently depressed buttons on the canvas.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI unsigned int evas_pointer_button_down_mask_by_device_get(const Evas_Canvas *obj, Evas_Device *dev);
+EVAS_API unsigned int evas_pointer_button_down_mask_by_device_get(const Evas_Canvas *obj, Evas_Device *dev);
/**
* @brief Returns a bitmask with the default mouse buttons currently pressed,
@@ -362,9 +359,9 @@ EAPI unsigned int evas_pointer_button_down_mask_by_device_get(const Evas_Canvas
*
* @return A bitmask of the currently depressed buttons on the canvas.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI unsigned int evas_pointer_button_down_mask_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API unsigned int evas_pointer_button_down_mask_get(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieve a list of Evas objects lying over a given position in a
@@ -382,9 +379,9 @@ EAPI unsigned int evas_pointer_button_down_mask_get(const Evas_Canvas *obj) EINA
*
* @return List of objects
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_List *evas_tree_objects_at_xy_get(Evas_Canvas *obj, Efl_Canvas_Object *stop, int x, int y) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_tree_objects_at_xy_get(Evas_Canvas *obj, Efl_Canvas_Object *stop, int x, int y) EINA_WARN_UNUSED_RESULT;
/**
* @brief Enables or turns on programmatically the lock key with name
@@ -400,9 +397,9 @@ EAPI Eina_List *evas_tree_objects_at_xy_get(Evas_Canvas *obj, Efl_Canvas_Object
* @param[in] obj The object.
* @param[in] keyname The name of the lock to enable.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_lock_on(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_lock_on(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Enables or turns on programmatically the lock key with name
@@ -422,9 +419,9 @@ EAPI void evas_key_lock_on(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNU
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_seat_key_lock_on(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API void evas_seat_key_lock_on(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief Disables or turns off programmatically the lock key with name
@@ -443,9 +440,9 @@ EAPI void evas_seat_key_lock_on(Evas_Canvas *obj, const char *keyname, Evas_Devi
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_seat_key_lock_off(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API void evas_seat_key_lock_off(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief Adds the @c keyname key to the current list of modifier keys.
@@ -469,9 +466,9 @@ EAPI void evas_seat_key_lock_off(Evas_Canvas *obj, const char *keyname, Evas_Dev
* @param[in] keyname The name of the modifier key to add to the list of Evas
* modifiers.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_modifier_add(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_modifier_add(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Disables or turns off programmatically the modifier key with name
@@ -485,9 +482,9 @@ EAPI void evas_key_modifier_add(Evas_Canvas *obj, const char *keyname) EINA_ARG_
* @param[in] obj The object.
* @param[in] keyname The name of the modifier to disable.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_modifier_off(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_modifier_off(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Render the given Evas canvas asynchronously.
@@ -510,15 +507,15 @@ EAPI void evas_key_modifier_off(Evas_Canvas *obj, const char *keyname) EINA_ARG_
*
* @since 1.8
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_Bool evas_render_async(Evas_Canvas *obj);
+EVAS_API Eina_Bool evas_render_async(Evas_Canvas *obj);
/** Inform the evas that it lost the focus from the default seat.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_focus_out(Evas_Canvas *obj);
+EVAS_API void evas_focus_out(Evas_Canvas *obj);
/**
* @brief Update the canvas internal objects but not triggering immediate
@@ -529,9 +526,24 @@ EAPI void evas_focus_out(Evas_Canvas *obj);
* used.
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_norender(Evas_Canvas *obj);
+EVAS_API void evas_norender(Evas_Canvas *obj);
+
+/**
+ * @brief Update the canvas internal objects but not triggering immediate
+ * renderization and producing update regions in post-render event.
+ *
+ * This function updates the canvas internal objects not triggering
+ * renderization. To force renderization function @ref evas_render should be
+ * used.
+ * @param[in] eo_e The object.
+ *
+ * @since 1.24
+ *
+ * @ingroup Evas_Canvas
+ */
+EVAS_API void evas_norender_with_updates(Eo *eo_e);
/**
* @brief Pop the nochange flag down 1.
@@ -543,9 +555,9 @@ EAPI void evas_norender(Evas_Canvas *obj);
* with "changed" state.
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_nochange_pop(Evas_Canvas *obj);
+EVAS_API void evas_nochange_pop(Evas_Canvas *obj);
/**
* @brief Disables or turns off programmatically the lock key with name
@@ -560,9 +572,9 @@ EAPI void evas_nochange_pop(Evas_Canvas *obj);
* @param[in] obj The object.
* @param[in] keyname The name of the lock to disable.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_lock_off(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_lock_off(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Push the nochange flag up 1
@@ -574,15 +586,15 @@ EAPI void evas_key_lock_off(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONN
* with "changed" state.
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_nochange_push(Evas_Canvas *obj);
+EVAS_API void evas_nochange_push(Evas_Canvas *obj);
/** Force the given evas and associated engine to flush its font cache.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_font_cache_flush(Evas_Canvas *obj);
+EVAS_API void evas_font_cache_flush(Evas_Canvas *obj);
/**
* @brief Enables or turns on programmatically the modifier key with name
@@ -597,9 +609,9 @@ EAPI void evas_font_cache_flush(Evas_Canvas *obj);
* @param[in] obj The object.
* @param[in] keyname The name of the modifier to enable.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_modifier_on(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_modifier_on(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Enables or turns on programmatically the modifier key with name
@@ -618,9 +630,9 @@ EAPI void evas_key_modifier_on(Evas_Canvas *obj, const char *keyname) EINA_ARG_N
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_seat_key_modifier_on(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API void evas_seat_key_modifier_on(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief Disables or turns off programmatically the modifier key with name
@@ -638,9 +650,9 @@ EAPI void evas_seat_key_modifier_on(Evas_Canvas *obj, const char *keyname, Evas_
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_seat_key_modifier_off(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
+EVAS_API void evas_seat_key_modifier_off(Evas_Canvas *obj, const char *keyname, Evas_Device *seat) EINA_ARG_NONNULL(2);
/**
* @brief List of available font descriptions known or found by this evas.
@@ -654,9 +666,9 @@ EAPI void evas_seat_key_modifier_off(Evas_Canvas *obj, const char *keyname, Evas
* @return A newly allocated list of strings. Do not change the strings. Be
* sure to call @ref evas_font_available_list_free after you're done.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_List *evas_font_available_list(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_font_available_list(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieves the object on the given evas with the given name.
@@ -672,9 +684,9 @@ EAPI Eina_List *evas_font_available_list(const Evas_Canvas *obj) EINA_WARN_UNUSE
* @return If successful, the Evas object with the given name. Otherwise,
* @c null.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Efl_Canvas_Object *evas_object_name_find(const Evas_Canvas *obj, const char *name) EINA_WARN_UNUSED_RESULT;
+EVAS_API Efl_Canvas_Object *evas_object_name_find(const Evas_Canvas *obj, const char *name) EINA_WARN_UNUSED_RESULT;
/**
* @brief Appends a font path to the list of font paths used by the given evas.
@@ -682,15 +694,15 @@ EAPI Efl_Canvas_Object *evas_object_name_find(const Evas_Canvas *obj, const char
* @param[in] obj The object.
* @param[in] path The new font path.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_font_path_append(Evas_Canvas *obj, const char *path) EINA_ARG_NONNULL(2);
+EVAS_API void evas_font_path_append(Evas_Canvas *obj, const char *path) EINA_ARG_NONNULL(2);
/** Removes all font paths loaded into memory for the given evas.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_font_path_clear(Evas_Canvas *obj);
+EVAS_API void evas_font_path_clear(Evas_Canvas *obj);
/**
@@ -700,9 +712,9 @@ EAPI void evas_font_path_clear(Evas_Canvas *obj);
* @param[in] obj The object.
* @param[in] keyname The name of the key to remove from the locks list.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_lock_del(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_lock_del(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Add a damage rectangle.
@@ -719,15 +731,15 @@ EAPI void evas_key_lock_del(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONN
* @param[in] w The rectangle's width.
* @param[in] h The rectangle's height.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_damage_rectangle_add(Evas_Canvas *obj, int x, int y, int w, int h);
+EVAS_API void evas_damage_rectangle_add(Evas_Canvas *obj, int x, int y, int w, int h);
/** Sync evas canvas
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_sync(Evas_Canvas *obj);
+EVAS_API void evas_sync(Evas_Canvas *obj);
/**
* @brief Retrieves the list of font paths used by the given evas.
@@ -736,9 +748,9 @@ EAPI void evas_sync(Evas_Canvas *obj);
*
* @return The list of font paths used.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI const Eina_List *evas_font_path_list(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API const Eina_List *evas_font_path_list(const Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Reload the image cache.
@@ -746,9 +758,9 @@ EAPI const Eina_List *evas_font_path_list(const Evas_Canvas *obj) EINA_WARN_UNUS
* This function reloads the image cache of canvas.
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_image_cache_reload(Evas_Canvas *obj);
+EVAS_API void evas_image_cache_reload(Evas_Canvas *obj);
/**
* @brief Convert/scale a canvas coordinate into output screen coordinates.
@@ -763,9 +775,9 @@ EAPI void evas_image_cache_reload(Evas_Canvas *obj);
*
* @return The output/screen coordinate translated to output coordinates.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_coord_world_x_to_screen(const Evas_Canvas *obj, int x) EINA_WARN_UNUSED_RESULT;
+EVAS_API int evas_coord_world_x_to_screen(const Evas_Canvas *obj, int x) EINA_WARN_UNUSED_RESULT;
/**
* @brief Force immediate renderization of the given Evas canvas.
@@ -785,11 +797,11 @@ EAPI int evas_coord_world_x_to_screen(const Evas_Canvas *obj, int x) EINA_WARN_U
* @param[in] obj The object.
*
* @return A newly allocated list of updated rectangles of the canvas
- * (@Eina.Rect structs). Free this list with @ref evas_render_updates_free.
+ * (@ref Eina_Rect structs). Free this list with @ref evas_render_updates_free.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Eina_List *evas_render_updates(Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_render_updates(Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Flush the image cache of the canvas.
@@ -797,9 +809,9 @@ EAPI Eina_List *evas_render_updates(Evas_Canvas *obj) EINA_WARN_UNUSED_RESULT;
* This function flushes image cache of canvas.
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_image_cache_flush(Evas_Canvas *obj);
+EVAS_API void evas_image_cache_flush(Evas_Canvas *obj);
/**
* @brief Convert/scale an output screen coordinate into canvas coordinates.
@@ -814,9 +826,9 @@ EAPI void evas_image_cache_flush(Evas_Canvas *obj);
*
* @return The screen coordinate translated to canvas unit coordinates.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_coord_screen_y_to_world(const Evas_Canvas *obj, int y) EINA_WARN_UNUSED_RESULT;
+EVAS_API int evas_coord_screen_y_to_world(const Evas_Canvas *obj, int y) EINA_WARN_UNUSED_RESULT;
/**
* @brief Removes the @c keyname key from the current list of modifier keys on
@@ -827,15 +839,15 @@ EAPI int evas_coord_screen_y_to_world(const Evas_Canvas *obj, int y) EINA_WARN_U
* @param[in] obj The object.
* @param[in] keyname The name of the key to remove from the modifiers list.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_modifier_del(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_modifier_del(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/** Inform to the evas that it got the focus from the default seat.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_focus_in(Evas_Canvas *obj);
+EVAS_API void evas_focus_in(Evas_Canvas *obj);
@@ -876,9 +888,9 @@ EAPI void evas_focus_in(Evas_Canvas *obj);
* @param[in] w The rectangle's width.
* @param[in] h The rectangle's height.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_obscured_rectangle_add(Evas_Canvas *obj, int x, int y, int w, int h);
+EVAS_API void evas_obscured_rectangle_add(Evas_Canvas *obj, int x, int y, int w, int h);
/**
* @brief Make the canvas discard as much data as possible used by the engine
@@ -891,15 +903,15 @@ EAPI void evas_obscured_rectangle_add(Evas_Canvas *obj, int x, int y, int w, int
* too.
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_render_dump(Evas_Canvas *obj);
+EVAS_API void evas_render_dump(Evas_Canvas *obj);
/** Force renderization of the given canvas.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_render(Evas_Canvas *obj);
+EVAS_API void evas_render(Evas_Canvas *obj);
/**
* @brief Prepends a font path to the list of font paths used by the given
@@ -908,9 +920,9 @@ EAPI void evas_render(Evas_Canvas *obj);
* @param[in] obj The object.
* @param[in] path The new font path.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_font_path_prepend(Evas_Canvas *obj, const char *path) EINA_ARG_NONNULL(2);
+EVAS_API void evas_font_path_prepend(Evas_Canvas *obj, const char *path) EINA_ARG_NONNULL(2);
/**
* @brief Remove all "obscured regions" from an Evas canvas.
@@ -928,9 +940,9 @@ EAPI void evas_font_path_prepend(Evas_Canvas *obj, const char *path) EINA_ARG_NO
* "damage" regions yourself (see @ref evas_damage_rectangle_add).
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_obscured_clear(Evas_Canvas *obj);
+EVAS_API void evas_obscured_clear(Evas_Canvas *obj);
/**
* @brief Convert/scale an output screen coordinate into canvas coordinates.
@@ -945,9 +957,9 @@ EAPI void evas_obscured_clear(Evas_Canvas *obj);
*
* @return The screen coordinate translated to canvas unit coordinates.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_coord_screen_x_to_world(const Evas_Canvas *obj, int x) EINA_WARN_UNUSED_RESULT;
+EVAS_API int evas_coord_screen_x_to_world(const Evas_Canvas *obj, int x) EINA_WARN_UNUSED_RESULT;
/**
* @brief Adds the @c keyname key to the current list of lock keys.
@@ -971,9 +983,9 @@ EAPI int evas_coord_screen_x_to_world(const Evas_Canvas *obj, int x) EINA_WARN_U
* @param[in] obj The object.
* @param[in] keyname The name of the key to add to the locks list.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_key_lock_add(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
+EVAS_API void evas_key_lock_add(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONNULL(2);
/**
* @brief Make the canvas discard internally cached data used for rendering.
@@ -983,9 +995,9 @@ EAPI void evas_key_lock_add(Evas_Canvas *obj, const char *keyname) EINA_ARG_NONN
* buffers, cached data to avoid re-compute of that data etc.
* @param[in] obj The object.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI void evas_render_idle_flush(Evas_Canvas *obj);
+EVAS_API void evas_render_idle_flush(Evas_Canvas *obj);
/**
* @brief Return the default device of a given type.
@@ -999,9 +1011,9 @@ EAPI void evas_render_idle_flush(Evas_Canvas *obj);
*
* @since 1.19
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI Evas_Device *evas_default_device_get(const Evas_Canvas *obj, Evas_Device_Class type);
+EVAS_API Evas_Device *evas_default_device_get(const Evas_Canvas *obj, Evas_Device_Class type);
/**
* @brief Convert/scale a canvas coordinate into output screen coordinates.
@@ -1016,8 +1028,8 @@ EAPI Evas_Device *evas_default_device_get(const Evas_Canvas *obj, Evas_Device_Cl
*
* @return The output/screen coordinate translated to output coordinates.
*
- * @ingroup Evas_Group
+ * @ingroup Evas_Canvas
*/
-EAPI int evas_coord_world_y_to_screen(const Evas_Canvas *obj, int y) EINA_WARN_UNUSED_RESULT;
+EVAS_API int evas_coord_world_y_to_screen(const Evas_Canvas *obj, int y) EINA_WARN_UNUSED_RESULT;
#endif
diff --git a/src/lib/evas/canvas/evas_clip.c b/src/lib/evas/canvas/evas_clip.c
index 476183d55d..1c3206e8a0 100644
--- a/src/lib/evas/canvas/evas_clip.c
+++ b/src/lib/evas/canvas/evas_clip.c
@@ -58,7 +58,7 @@ evas_object_recalc_clippees(Evas_Object_Protected_Data *obj)
* or any change in clipper of an object or any change in smart object
* membership needs to walk the obj tree both up and down from the changed
* object and probably walk entire object trees to find these and mark them.
- * thats silly-expensive and i was about to fix it that way but it has since
+ * that's silly-expensive and i was about to fix it that way but it has since
* dawned on me that that is just going to kill performance in some critical
* areas like during object setup and manipulation, as well as teardown.
*
@@ -74,30 +74,30 @@ evas_object_recalc_clippees(Evas_Object_Protected_Data *obj)
#define MAP_ACROSS 1
static void
-evas_object_child_map_across_mark(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *map_obj, Eina_Bool force, Eina_Hash *visited)
+evas_object_child_map_across_mark(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *map_obj, Eina_Bool force, Eina_Array* visited)
{
#ifdef MAP_ACROSS
Eina_Bool clear_visited = EINA_FALSE;
-
if (!visited)
{
- visited = eina_hash_pointer_new(NULL);
+ visited = &obj->layer->evas->map_clip_objects;
clear_visited = EINA_TRUE;
}
- if (eina_hash_find(visited, &eo_obj) == (void *)1) goto end;
- else eina_hash_add(visited, &eo_obj, (void *)1);
-
+
+ if (eina_array_find(visited, (void*) eo_obj, NULL)) goto end;
+ else eina_array_push(visited, (void*) eo_obj);
+
if ((obj->map->cur.map_parent != map_obj) || force)
{
EINA_COW_WRITE_BEGIN(evas_object_map_cow, obj->map, Evas_Object_Map_Data, map_write)
map_write->cur.map_parent = map_obj;
EINA_COW_WRITE_END(evas_object_map_cow, obj->map, map_write);
- EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
- {
- state_write->cache.clip.dirty = 1;
- }
- EINA_COW_STATE_WRITE_END(obj, state_write, cur);
+ EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
+ {
+ state_write->cache.clip.dirty = 1;
+ }
+ EINA_COW_STATE_WRITE_END(obj, state_write, cur);
evas_object_clip_recalc(obj);
if (obj->is_smart)
@@ -125,8 +125,9 @@ evas_object_child_map_across_mark(Evas_Object *eo_obj, Evas_Object_Protected_Dat
}
}
}
-end:
- if (clear_visited) eina_hash_free(visited);
+
+end:
+ if (clear_visited) eina_array_clean(visited);
#endif
}
@@ -458,12 +459,10 @@ _clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
evas_object_clip_across_check(eo_obj, obj);
}
-EAPI void
+EVAS_API void
evas_object_clip_unset(Evas_Object *eo_obj)
{
- Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
- EVAS_OBJECT_DATA_ALIVE_CHECK(obj);
- _clip_unset(eo_obj, obj);
+ efl_canvas_object_clipper_set(eo_obj, NULL);
}
static void
@@ -503,7 +502,7 @@ _efl_canvas_object_clipper_prev_reset(Evas_Object_Protected_Data *obj, Eina_Bool
}
}
-EAPI const Eina_List *
+EVAS_API const Eina_List *
evas_object_clipees_get(const Evas_Object *eo_obj)
{
const Evas_Object_Protected_Data *tmp;
@@ -520,7 +519,7 @@ evas_object_clipees_get(const Evas_Object *eo_obj)
return answer;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_clipees_has(const Evas_Object *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, EINA_FALSE);
diff --git a/src/lib/evas/canvas/evas_data.c b/src/lib/evas/canvas/evas_data.c
index f6b83e7215..a2282b20ea 100644
--- a/src/lib/evas/canvas/evas_data.c
+++ b/src/lib/evas/canvas/evas_data.c
@@ -1,21 +1,21 @@
#include "evas_common_private.h"
#include "evas_private.h"
-EAPI void
+EVAS_API void
evas_object_data_set(Evas_Object *eo_obj, const char *key, const void *data)
{
if (!efl_isa(eo_obj, EFL_CANVAS_OBJECT_CLASS)) return;
efl_key_data_set(eo_obj, key, data);
}
-EAPI void *
+EVAS_API void *
evas_object_data_get(const Evas_Object *eo_obj, const char *key)
{
if (!efl_isa(eo_obj, EFL_CANVAS_OBJECT_CLASS)) return NULL;
return efl_key_data_get(eo_obj, key);
}
-EAPI void *
+EVAS_API void *
evas_object_data_del(Evas_Object *eo_obj, const char *key)
{
void *data;
diff --git a/src/lib/evas/canvas/evas_device.c b/src/lib/evas/canvas/evas_device.c
index 112132574d..baad7522a2 100644
--- a/src/lib/evas/canvas/evas_device.c
+++ b/src/lib/evas/canvas/evas_device.c
@@ -38,7 +38,7 @@ _new_default_device_find(Evas_Public_Data *e, Evas_Device *old_dev)
{
Eina_List *l;
Evas_Device *dev, *def, *old_parent;
- Evas_Device_Class old_class;
+ Efl_Input_Device_Type old_class;
if (e->cleanup) return NULL;
old_class = efl_input_device_type_get(old_dev);
@@ -47,7 +47,7 @@ _new_default_device_find(Evas_Public_Data *e, Evas_Device *old_dev)
EINA_LIST_FOREACH(e->devices, l, dev)
{
- if ((Evas_Device_Class)efl_input_device_type_get(dev) != old_class)
+ if (efl_input_device_type_get(dev) != old_class)
continue;
def = dev;
@@ -59,9 +59,9 @@ _new_default_device_find(Evas_Public_Data *e, Evas_Device *old_dev)
if (!def)
{
const char *class_str;
- if (old_class == EVAS_DEVICE_CLASS_SEAT)
+ if (old_class == EFL_INPUT_DEVICE_TYPE_SEAT)
class_str = "seat";
- else if (old_class == EVAS_DEVICE_CLASS_KEYBOARD)
+ else if (old_class == EFL_INPUT_DEVICE_TYPE_KEYBOARD)
class_str = "keyboard";
else
class_str = "mouse";
@@ -108,7 +108,9 @@ _del_cb(void *data, const Efl_Event *ev)
}
if (devtype == EFL_INPUT_DEVICE_TYPE_MOUSE)
- _evas_pointer_data_remove(e, ev->object);
+ {
+ _evas_pointer_data_remove(e, ev->object, EINA_TRUE);
+ }
eina_hash_del_by_key(e->locks.masks, &ev->object);
eina_hash_del_by_key(e->modifiers.masks, &ev->object);
efl_event_callback_call(e->evas, EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED,
@@ -135,7 +137,7 @@ _evas_canvas_efl_canvas_scene_device_get(Evas *eo_e EINA_UNUSED, Evas_Public_Dat
return NULL;
}
-EAPI Evas_Device *
+EVAS_API Evas_Device *
evas_device_get(Evas *eo_e, const char *name)
{
return efl_canvas_scene_device_get(eo_e, name);
@@ -165,13 +167,13 @@ _evas_canvas_efl_canvas_scene_seat_get(Evas *eo_e EINA_UNUSED, Evas_Public_Data
return NULL;
}
-EAPI Evas_Device *
+EVAS_API Evas_Device *
evas_device_get_by_seat_id(Evas *eo_e, unsigned int id)
{
return efl_canvas_scene_seat_get(eo_e, id);
}
-EAPI Evas_Device *
+EVAS_API Evas_Device *
evas_device_add(Evas *eo_e)
{
return evas_device_add_full(eo_e, NULL, NULL, NULL, NULL,
@@ -179,7 +181,7 @@ evas_device_add(Evas *eo_e)
EVAS_DEVICE_SUBCLASS_NONE);
}
-EAPI Evas_Device *
+EVAS_API Evas_Device *
evas_device_add_full(Evas *eo_e, const char *name, const char *desc,
Evas_Device *parent_dev, Evas_Device *emulation_dev,
Evas_Device_Class clas, Evas_Device_Subclass sub_clas)
@@ -192,7 +194,7 @@ evas_device_add_full(Evas *eo_e, const char *name, const char *desc,
dev = efl_add_ref(EFL_INPUT_DEVICE_CLASS, parent_dev ?: eo_e,
efl_name_set(efl_added, name),
efl_comment_set(efl_added, desc),
- efl_input_device_type_set(efl_added, clas),
+ efl_input_device_type_set(efl_added, (Efl_Input_Device_Type)clas),
efl_input_device_source_set(efl_added, emulation_dev),
efl_input_device_evas_set(efl_added, eo_e),
efl_input_device_subclass_set(efl_added, sub_clas));
@@ -261,7 +263,7 @@ evas_device_add_full(Evas *eo_e, const char *name, const char *desc,
return dev;
}
-EAPI void
+EVAS_API void
evas_device_del(Evas_Device *dev)
{
if (!efl_invalidated_get(dev))
@@ -269,7 +271,7 @@ evas_device_del(Evas_Device *dev)
efl_unref(dev);
}
-EAPI void
+EVAS_API void
evas_device_push(Evas *eo_e, Evas_Device *dev)
{
Evas_Public_Data *e = efl_data_scope_safe_get(eo_e, EVAS_CANVAS_CLASS);
@@ -283,7 +285,7 @@ evas_device_push(Evas *eo_e, Evas_Device *dev)
eina_array_push(e->cur_device, dev);
}
-EAPI void
+EVAS_API void
evas_device_pop(Evas *eo_e)
{
Evas_Device *dev;
@@ -294,7 +296,7 @@ evas_device_pop(Evas *eo_e)
if (dev) efl_unref(dev);
}
-EAPI const Eina_List *
+EVAS_API const Eina_List *
evas_device_list(Evas *eo_e, const Evas_Device *dev)
{
if (dev) return efl_input_device_children_get(dev);
@@ -303,33 +305,33 @@ evas_device_list(Evas *eo_e, const Evas_Device *dev)
return e ? e->devices : NULL;
}
-EAPI void
+EVAS_API void
evas_device_name_set(Evas_Device *dev, const char *name)
{
efl_name_set(dev, name);
evas_event_callback_call(efl_input_device_evas_get(dev), EVAS_CALLBACK_DEVICE_CHANGED, dev);
}
-EAPI const char *
+EVAS_API const char *
evas_device_name_get(const Evas_Device *dev)
{
return efl_name_get(dev);
}
-EAPI void
+EVAS_API void
evas_device_description_set(Evas_Device *dev, const char *desc)
{
efl_comment_set(dev, desc);
evas_event_callback_call(efl_input_device_evas_get(dev), EVAS_CALLBACK_DEVICE_CHANGED, dev);
}
-EAPI const char *
+EVAS_API const char *
evas_device_description_get(const Evas_Device *dev)
{
return efl_comment_get(dev);
}
-EAPI void
+EVAS_API void
evas_device_parent_set(Evas_Device *dev EINA_UNUSED, Evas_Device *parent EINA_UNUSED)
{
// Note: This function should be deprecated. parent_set doesn't make sense
@@ -338,7 +340,7 @@ evas_device_parent_set(Evas_Device *dev EINA_UNUSED, Evas_Device *parent EINA_UN
ERR("It is not advised and possible anymore to changed the parent of an Evas_Device.");
}
-EAPI const Evas_Device *
+EVAS_API const Evas_Device *
evas_device_parent_get(const Evas_Device *dev)
{
Eo *parent = efl_parent_get(dev);
@@ -349,7 +351,7 @@ evas_device_parent_get(const Evas_Device *dev)
return parent;
}
-EAPI void
+EVAS_API void
evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas)
{
EINA_SAFETY_ON_TRUE_RETURN(efl_finalized_get(dev));
@@ -362,10 +364,10 @@ evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas)
if ((Evas_Device_Class)klass == clas)
return;
- if (_is_pointer(klass))
- _evas_pointer_data_remove(edata, dev);
+ if (_is_pointer((Evas_Device_Class)klass))
+ _evas_pointer_data_remove(edata, dev, EINA_FALSE);
- efl_input_device_type_set(dev, clas);
+ efl_input_device_type_set(dev, (Efl_Input_Device_Type)clas);
if (_is_pointer(clas))
_evas_pointer_data_add(edata, dev);
@@ -373,45 +375,45 @@ evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas)
evas_event_callback_call(efl_input_device_evas_get(dev), EVAS_CALLBACK_DEVICE_CHANGED, dev);
}
-EAPI Evas_Device_Class
+EVAS_API Evas_Device_Class
evas_device_class_get(const Evas_Device *dev)
{
- return efl_input_device_type_get(dev);
+ return (Evas_Device_Class)efl_input_device_type_get(dev);
}
-EAPI void
+EVAS_API void
evas_device_subclass_set(Evas_Device *dev, Evas_Device_Subclass clas)
{
efl_input_device_subclass_set(dev, clas);
evas_event_callback_call(efl_input_device_evas_get(dev), EVAS_CALLBACK_DEVICE_CHANGED, dev);
}
-EAPI Evas_Device_Subclass
+EVAS_API Evas_Device_Subclass
evas_device_subclass_get(const Evas_Device *dev)
{
return efl_input_device_subclass_get(dev);
}
-EAPI void
+EVAS_API void
evas_device_emulation_source_set(Evas_Device *dev, Evas_Device *src)
{
efl_input_device_source_set(dev, src);
evas_event_callback_call(efl_input_device_evas_get(dev), EVAS_CALLBACK_DEVICE_CHANGED, dev);
}
-EAPI const Evas_Device *
+EVAS_API const Evas_Device *
evas_device_emulation_source_get(const Evas_Device *dev)
{
return efl_input_device_source_get(dev);
}
-EAPI void
+EVAS_API void
evas_device_seat_id_set(Evas_Device *dev, unsigned int id)
{
efl_input_device_seat_id_set(dev, id);
}
-EAPI unsigned int
+EVAS_API unsigned int
evas_device_seat_id_get(const Evas_Device *dev)
{
return efl_input_device_seat_id_get(dev);
@@ -469,7 +471,7 @@ Evas_Device *
_evas_device_top_get(const Evas *eo_e)
{
int num;
-
+
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
if (!e->cur_device) return NULL;
num = eina_array_count(e->cur_device);
@@ -496,7 +498,7 @@ _evas_canvas_efl_canvas_scene_pointer_position_get(const Eo *eo_e, Evas_Public_D
EINA_SAFETY_ON_NULL_RETURN_VAL(it, EINA_FALSE);
EINA_ITERATOR_FOREACH(it, child)
- if (_is_pointer(efl_input_device_type_get(child)))
+ if (_is_pointer((Evas_Device_Class)efl_input_device_type_get(child)))
break;
if (child)
*pos = efl_input_pointer_position_get(child);
diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c
index 12b38f1621..c76fb52de1 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -87,7 +87,7 @@ _evas_event_havemap_adjust_f(Evas_Object_Protected_Data *obj, Eina_Vector2 *cur_
if (!_evas_event_havemap_adjust_f_inline(obj, &tmp_pt, mouse_grabbed)) return;
prev_pt->x += (tmp_pt.x - cur_pt->x);
- prev_pt->y += (tmp_pt.x - cur_pt->y);
+ prev_pt->y += (tmp_pt.y - cur_pt->y);
*cur_pt = tmp_pt;
}
@@ -815,7 +815,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e,
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_IN, evt,
event_id2, EFL_EVENT_POINTER_IN);
- if ((cur_pt.x != prev_pt.x) && (cur_pt.y != prev_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, evt,
@@ -1037,7 +1037,35 @@ _evas_event_source_multi_down_events(Evas_Object_Protected_Data *obj, Evas_Publi
if (pdata->seat->mouse_grabbed == 0)
{
- if (pdata->seat->downs > 1) addgrab = pdata->seat->downs - 1;
+ if (pdata->seat->downs > 1)
+ addgrab = pdata->seat->downs - 1;
+ else /* this is the first touch, which means it's also a move event, which means we need to redo this */
+ {
+ Eina_List *ins = NULL;
+
+ if (src->is_smart)
+ {
+ int no_rep = 0;
+ ins = _evas_event_object_list_raw_in_get
+ (e->evas, ins, evas_object_smart_members_get_direct(eo_src), NULL, NULL,
+ ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE, EINA_FALSE);
+ }
+ if (src->is_event_parent)
+ {
+ int no_rep = 0;
+ ins = _evas_event_object_list_raw_in_get
+ (e->evas, ins, NULL, evas_object_event_grabber_members_list(eo_src), NULL,
+ ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE, EINA_FALSE);
+ }
+ else
+ ins = eina_list_append(ins, eo_src);
+ EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src->proxy, Evas_Object_Proxy_Data, proxy_write)
+ {
+ eina_list_free(proxy_write->src_event_in);
+ proxy_write->src_event_in = ins;
+ }
+ EINA_COW_WRITE_END(evas_object_proxy_cow, src->proxy, proxy_write);
+ }
}
EINA_LIST_FOREACH(src->proxy->src_event_in, l, eo_child)
@@ -1340,7 +1368,7 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas *eo_e,
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((cur_pt.x != prev_pt.x) || (cur_pt.y != prev_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_child, child, EVAS_CALLBACK_MOUSE_MOVE, evt,
@@ -1508,13 +1536,13 @@ _canvas_event_thaw_eval_internal(Eo *eo_e, Evas_Public_Data *e)
e->last_timestamp, NULL);
}
-EAPI void
+EVAS_API void
evas_event_freeze(Evas *eo_e)
{
efl_event_freeze(eo_e);
}
-EAPI void
+EVAS_API void
evas_event_thaw(Evas *eo_e)
{
efl_event_thaw(eo_e);
@@ -1553,13 +1581,13 @@ _evas_canvas_efl_object_event_thaw(Eo *eo_e, Evas_Public_Data *e)
}
}
-EAPI int
+EVAS_API int
evas_event_freeze_get(const Evas *eo_e)
{
return efl_event_freeze_count_get(eo_e);
}
-EAPI void
+EVAS_API void
evas_event_thaw_eval(Evas *eo_e)
{
if (!evas_event_freeze_get(eo_e))
@@ -1614,7 +1642,7 @@ _canvas_event_feed_mouse_down_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
ev->cur.y = pdata->seat->y;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->touch_id = 0;
ev->action = EFL_POINTER_ACTION_DOWN;
ev->value_flags |= value_flags;
@@ -1885,7 +1913,7 @@ _canvas_event_feed_mouse_up_internal(Evas_Public_Data *e, Efl_Input_Pointer_Data
ev->cur.y = pdata->seat->y;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->touch_id = 0;
ev->value_flags |= value_flags;
if (ev->device) efl_ref(ev->device);
@@ -2020,7 +2048,7 @@ _canvas_event_feed_mouse_updown(Eo *eo_e, int b, Evas_Button_Flags flags,
else
ev->action = down ? EFL_POINTER_ACTION_DOWN : EFL_POINTER_ACTION_UP;
ev->button = b;
- ev->button_flags = flags;
+ ev->button_flags = (Efl_Pointer_Flags)flags;
ev->radius = 1;
ev->radius_x = 1;
ev->radius_y = 1;
@@ -2054,14 +2082,14 @@ _canvas_event_feed_mouse_updown_legacy(Eo *eo_e, int b, Evas_Button_Flags flags,
_canvas_event_feed_mouse_updown(eo_e, b, flags, timestamp, data, down, NULL, EINA_FALSE);
}
-EAPI void
+EVAS_API void
evas_event_feed_mouse_down(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
_canvas_event_feed_mouse_updown_legacy(eo_e, b, flags, timestamp, data, 1);
}
-EAPI void
+EVAS_API void
evas_event_feed_mouse_up(Eo *eo_e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -2107,7 +2135,7 @@ _canvas_event_feed_mouse_cancel_internal(Evas_Public_Data *e, Efl_Input_Pointer_
ev->action = EFL_POINTER_ACTION_CANCEL;
ev->value_flags |= value_flags;
- ev->event_flags = flags;
+ ev->event_flags = (Efl_Input_Flags)flags;
EINA_LIST_FOREACH_SAFE(e->touch_points, l, ll, point)
{
if ((point->state == EVAS_TOUCH_POINT_DOWN) ||
@@ -2127,7 +2155,7 @@ _canvas_event_feed_mouse_cancel_internal(Evas_Public_Data *e, Efl_Input_Pointer_
*ev = save;
}
-EAPI void
+EVAS_API void
evas_event_feed_mouse_cancel(Eo *eo_e, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -2184,7 +2212,7 @@ _canvas_event_feed_mouse_wheel_internal(Eo *eo_e, Efl_Input_Pointer_Data *pe)
ev->cur.y = pdata->seat->y;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->action = EFL_POINTER_ACTION_WHEEL;
ev->value_flags |= value_flags;
@@ -2225,7 +2253,7 @@ _canvas_event_feed_mouse_wheel_internal(Eo *eo_e, Efl_Input_Pointer_Data *pe)
_evas_unwalk(e);
}
-EAPI void
+EVAS_API void
evas_event_feed_mouse_wheel(Eo *eo_e, int direction, int z, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -2314,7 +2342,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
evt = ev->eo;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->pressed_buttons = pdata->button;
ev->touch_id = 0;
ev->value_flags |= value_flags;
@@ -2322,7 +2350,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
_evas_walk(e);
/* update moved touch point */
- if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
_evas_touch_point_update(eo_e, 0, pdata->seat->x, pdata->seat->y, EVAS_TOUCH_POINT_MOVE);
/* if our mouse button is grabbed to any objects */
if (pdata->seat->mouse_grabbed > 0)
@@ -2359,7 +2387,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
ev->cur = cur_pt;
ev->prev = prev_pt;
- if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
{
_evas_event_havemap_adjust_f(obj, &ev->cur, &ev->prev, obj_pdata->mouse_grabbed);
@@ -2457,7 +2485,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
_evas_event_object_pointer_allow_precise(eo_obj, obj, ev->cur.x, ev->cur.y, ins) &&
(obj_pdata->mouse_grabbed || !evas_object_is_source_invisible(eo_obj, obj)))
{
- if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
@@ -2512,7 +2540,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
@@ -2605,7 +2633,7 @@ nogrep:
_evas_event_object_pointer_allow_precise(eo_obj, obj, ev->cur.x, ev->cur.y, newin) &&
(obj_pdata->mouse_grabbed || !evas_object_is_source_invisible(eo_obj, obj)))
{
- if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
@@ -2659,7 +2687,7 @@ nogrep:
ev->action = EFL_POINTER_ACTION_IN;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((prev_pt.x != cur_pt.x) || (prev_pt.y != cur_pt.y))
+ if (!EINA_DBL_EQ(cur_pt.x, prev_pt.x) || !EINA_DBL_EQ(cur_pt.y, prev_pt.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
@@ -2703,7 +2731,7 @@ _canvas_event_feed_mouse_move_legacy(Evas *eo_e, Evas_Public_Data *e, int x, int
efl_unref(evt);
}
-EAPI void
+EVAS_API void
evas_event_input_mouse_move(Eo *eo_e, int x, int y, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -2711,7 +2739,7 @@ evas_event_input_mouse_move(Eo *eo_e, int x, int y, unsigned int timestamp, cons
_canvas_event_feed_mouse_move_legacy(eo_e, e, x - e->framespace.x, y - e->framespace.y, timestamp, data);
}
-EAPI void
+EVAS_API void
evas_event_feed_mouse_move(Eo *eo_e, int x, int y, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -2767,7 +2795,7 @@ _canvas_event_feed_mouse_in_internal(Evas *eo_e, Efl_Input_Pointer_Data *ev)
ev->cur.y = pdata->seat->y;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->value_flags |= value_flags;
if (ev->device) efl_ref(ev->device);
@@ -2803,8 +2831,8 @@ _canvas_event_feed_mouse_in_internal(Evas *eo_e, Efl_Input_Pointer_Data *ev)
efl_ref(eo_obj);
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_IN, evt,
event_id, EFL_EVENT_POINTER_IN);
- if ((pdata->seat->x != ev->prev.x) &&
- (pdata->seat->y != ev->prev.y))
+ if (!EINA_DBL_EQ(pdata->seat->x, ev->prev.x) &&
+ !EINA_DBL_EQ(pdata->seat->y, ev->prev.y))
{
ev->action = EFL_POINTER_ACTION_MOVE;
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, evt,
@@ -2873,7 +2901,7 @@ _canvas_event_feed_mouse_out_internal(Evas *eo_e, Efl_Input_Pointer_Data *ev)
ev->cur.y = pdata->seat->y;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->value_flags |= value_flags;
if (ev->device) efl_ref(ev->device);
@@ -2944,14 +2972,14 @@ _canvas_event_feed_mouse_inout_legacy(Eo *eo_e, unsigned int timestamp,
efl_unref(evt);
}
-EAPI void
+EVAS_API void
evas_event_feed_mouse_in(Eo *eo_e, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
_canvas_event_feed_mouse_inout_legacy(eo_e, timestamp, data, EINA_TRUE);
}
-EAPI void
+EVAS_API void
evas_event_feed_mouse_out(Eo *eo_e, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -2997,7 +3025,7 @@ _canvas_event_feed_multi_down_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
ev->action = EFL_POINTER_ACTION_DOWN;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->value_flags |= value_flags;
if (ev->device) efl_ref(ev->device);
@@ -3006,7 +3034,17 @@ _canvas_event_feed_multi_down_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
_evas_touch_point_append(eo_e, ev->touch_id, ev->cur.x, ev->cur.y);
if (pdata->seat->mouse_grabbed == 0)
{
- if (pdata->seat->downs > 1) addgrab = pdata->seat->downs - 1;
+ if (pdata->seat->downs > 1)
+ addgrab = pdata->seat->downs - 1;
+ else /* this is the first touch, which means it's also a move event, which means we need to redo this */
+ {
+ /* get all new in objects */
+ Eina_List *ins = evas_event_objects_event_list(eo_e, NULL, ev->cur.x, ev->cur.y);
+ /* free our old list of ins */
+ eina_list_free(pdata->seat->object.in);
+ /* and set up the new one */
+ pdata->seat->object.in = ins;
+ }
}
copy = evas_event_list_copy(pdata->seat->object.in);
EINA_LIST_FOREACH(copy, l, eo_obj)
@@ -3093,7 +3131,7 @@ _canvas_event_feed_multi_up_internal(Evas_Public_Data *e, Efl_Input_Pointer_Data
ev->action = EFL_POINTER_ACTION_UP;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->value_flags |= value_flags;
if (ev->device) efl_ref(ev->device);
@@ -3173,7 +3211,7 @@ _canvas_event_feed_multi_internal(Evas *eo_e, Evas_Public_Data *e,
ev->radius = rad;
ev->radius_x = radx;
ev->radius_y = rady;
- ev->button_flags = flags;
+ ev->button_flags = (Efl_Pointer_Flags)flags;
ev->timestamp = timestamp;
ev->data = (void *) data;
ev->device = efl_ref(_evas_event_legacy_device_get(eo_e, EINA_TRUE));
@@ -3198,7 +3236,7 @@ _canvas_event_feed_multi_internal(Evas *eo_e, Evas_Public_Data *e,
efl_unref(evt);
}
-EAPI void
+EVAS_API void
evas_event_input_multi_down(Eo *eo_e, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3209,7 +3247,7 @@ evas_event_input_multi_down(Eo *eo_e, int d, int x, int y, double rad, double ra
fx, fy, flags, timestamp, data, EFL_POINTER_ACTION_DOWN);
}
-EAPI void
+EVAS_API void
evas_event_feed_multi_down(Eo *eo_e, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3218,7 +3256,7 @@ evas_event_feed_multi_down(Eo *eo_e, int d, int x, int y, double rad, double rad
fx, fy, flags, timestamp, data, EFL_POINTER_ACTION_DOWN);
}
-EAPI void
+EVAS_API void
evas_event_input_multi_up(Eo *eo_e, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3229,7 +3267,7 @@ evas_event_input_multi_up(Eo *eo_e, int d, int x, int y, double rad, double radx
fx, fy, flags, timestamp, data, EFL_POINTER_ACTION_UP);
}
-EAPI void
+EVAS_API void
evas_event_feed_multi_up(Eo *eo_e, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3273,7 +3311,7 @@ _canvas_event_feed_multi_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
evt = ev->eo;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->action = EFL_POINTER_ACTION_MOVE;
ev->value_flags |= value_flags;
if (ev->device) efl_ref(ev->device);
@@ -3377,7 +3415,7 @@ _canvas_event_feed_multi_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
if (ev->device) efl_unref(ev->device);
}
-EAPI void
+EVAS_API void
evas_event_input_multi_move(Eo *eo_e, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3388,7 +3426,7 @@ evas_event_input_multi_move(Eo *eo_e, int d, int x, int y, double rad, double ra
EFL_POINTER_ACTION_MOVE);
}
-EAPI void
+EVAS_API void
evas_event_feed_multi_move(Eo *eo_e, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3463,7 +3501,7 @@ _canvas_event_feed_key_down_internal(Evas_Public_Data *e, Efl_Input_Key_Data *ev
evt = ev->eo;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
if (ev->device) efl_ref(ev->device);
if (e->grabs)
@@ -3556,7 +3594,7 @@ _canvas_event_feed_key_up_internal(Evas_Public_Data *e, Efl_Input_Key_Data *ev)
evt = ev->eo;
ev->modifiers = &(e->modifiers);
ev->locks = &(e->locks);
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
if (ev->device) efl_ref(ev->device);
if (e->grabs)
@@ -3664,7 +3702,7 @@ _canvas_event_feed_key_legacy(Eo *eo_e, Evas_Public_Data *e,
efl_unref(evt);
}
-EAPI void
+EVAS_API void
evas_event_feed_key_down(Eo *eo_e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3673,7 +3711,7 @@ evas_event_feed_key_down(Eo *eo_e, const char *keyname, const char *key, const c
compose, timestamp, data, 0, 1);
}
-EAPI void
+EVAS_API void
evas_event_feed_key_up(Eo *eo_e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3682,7 +3720,7 @@ evas_event_feed_key_up(Eo *eo_e, const char *keyname, const char *key, const cha
compose, timestamp, data, 0, 0);
}
-EAPI void
+EVAS_API void
evas_event_feed_key_down_with_keycode(Eo *eo_e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3691,7 +3729,7 @@ evas_event_feed_key_down_with_keycode(Eo *eo_e, const char *keyname, const char
compose, timestamp, data, keycode, 1);
}
-EAPI void
+EVAS_API void
evas_event_feed_key_up_with_keycode(Eo *eo_e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3700,7 +3738,7 @@ evas_event_feed_key_up_with_keycode(Eo *eo_e, const char *keyname, const char *k
compose, timestamp, data, keycode, 0);
}
-EAPI void
+EVAS_API void
evas_event_feed_hold(Eo *eo_e, int hold, unsigned int timestamp, const void *data)
{
Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
@@ -3723,7 +3761,7 @@ evas_event_feed_hold(Eo *eo_e, int hold, unsigned int timestamp, const void *dat
ev->hold = !!hold;
ev->data = (void *) data;
ev->timestamp = timestamp;
- ev->event_flags = e->default_event_flags;
+ ev->event_flags = (Efl_Input_Flags)e->default_event_flags;
ev->device = efl_ref(_evas_event_legacy_device_get(eo_e, EINA_TRUE));
pdata = _evas_pointer_data_by_device_get(e, ev->device);
@@ -3802,7 +3840,7 @@ _canvas_event_feed_axis_update_internal(Evas_Public_Data *e, Efl_Input_Pointer_D
if (ev->device) efl_unref(ev->device);
}
-EAPI void
+EVAS_API void
evas_event_feed_axis_update(Evas *eo_e, unsigned int timestamp, int device, int toolid, int naxis, const Evas_Axis *axes, const void *data)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
@@ -3966,7 +4004,7 @@ _efl_canvas_object_efl_object_event_thaw(Eo *obj, Evas_Object_Protected_Data *pd
efl_event_thaw(efl_super(obj, EFL_CANVAS_OBJECT_CLASS));
}
-EAPI void
+EVAS_API void
evas_object_freeze_events_set(Eo *eo_obj, Eina_Bool freeze)
{
Evas_Object_Protected_Data *pd = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
@@ -3984,7 +4022,7 @@ evas_object_freeze_events_set(Eo *eo_obj, Eina_Bool freeze)
efl_event_thaw(eo_obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_freeze_events_get(const Eo *eo_obj EINA_UNUSED)
{
return (efl_event_freeze_count_get(eo_obj) > 0);
@@ -4197,7 +4235,7 @@ _efl_canvas_object_efl_canvas_pointer_pointer_inside_get(const Eo *eo_obj,
return EINA_FALSE;
}
-EAPI void
+EVAS_API void
evas_event_refeed_event(Eo *eo_e, void *event_copy, Evas_Callback_Type event_type)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(eo_e, EVAS_CANVAS_CLASS));
diff --git a/src/lib/evas/canvas/evas_events_legacy.c b/src/lib/evas/canvas/evas_events_legacy.c
index 1204800631..5511741dc3 100644
--- a/src/lib/evas/canvas/evas_events_legacy.c
+++ b/src/lib/evas/canvas/evas_events_legacy.c
@@ -34,15 +34,18 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
{
Efl_Input_Pointer_Data *ev = efl_data_scope_get(eo_ev, EFL_INPUT_POINTER_CLASS);
Evas_Public_Data *evas;
+ Evas_Pointer_Data *pdata;
if (!ev) return NULL;
if (!eo_evas) eo_evas = efl_provider_find(eo_ev, EVAS_CANVAS_CLASS);
evas = efl_data_scope_get(eo_evas, EVAS_CANVAS_CLASS);
if (!evas) return NULL;
+ pdata = _evas_pointer_data_by_device_get(evas, ev->device);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pdata, NULL);
-#define COORD_DUP(e) do { (e)->output.x = (e)->canvas.x; (e)->output.y = (e)->canvas.y; } while (0)
-#define COORD_DUP_CUR(e) do { (e)->cur.output.x = (e)->cur.canvas.x; (e)->cur.output.y = (e)->cur.canvas.y; } while (0)
-#define COORD_DUP_PREV(e) do { (e)->prev.output.x = (e)->prev.canvas.x; (e)->prev.output.y = (e)->prev.canvas.y; } while (0)
+#define COORD_DUP(e) do { (e)->output.x = pdata->seat->x; (e)->output.y = pdata->seat->y; } while (0)
+#define COORD_DUP_CUR(e) do { (e)->cur.output.x = pdata->seat->x; (e)->cur.output.y = pdata->seat->y; } while (0)
+#define COORD_DUP_PREV(e) do { (e)->prev.output.x = pdata->seat->prev.x; (e)->prev.output.y = pdata->seat->prev.y; } while (0)
#define TYPE_CHK(typ) do { if ((type != EVAS_CALLBACK_LAST) && (type != EVAS_CALLBACK_ ## typ)) return NULL; } while (0)
switch (ev->action)
@@ -56,7 +59,7 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
COORD_DUP(e);
e->data = ev->data;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->event_src = ev->source;
e->modifiers = ev->modifiers;
@@ -75,7 +78,7 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
COORD_DUP(e);
e->data = ev->data;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->event_src = ev->source;
e->modifiers = ev->modifiers;
@@ -98,9 +101,9 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
e->canvas.y = ev->cur.y;
COORD_DUP(e);
e->data = ev->data;
- e->flags = ev->button_flags;
+ e->flags = (Evas_Button_Flags)ev->button_flags;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->event_src = ev->source;
e->modifiers = ev->modifiers;
@@ -125,9 +128,9 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
e->canvas.y = ev->cur.y;
COORD_DUP(e);
e->data = ev->data;
- e->flags = ev->button_flags;
+ e->flags = (Evas_Button_Flags)ev->button_flags;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->modifiers = ev->modifiers;
e->locks = ev->locks;
@@ -149,9 +152,9 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
e->canvas.y = ev->cur.y;
COORD_DUP(e);
e->data = ev->data;
- e->flags = ev->button_flags;
+ e->flags = (Evas_Button_Flags)ev->button_flags;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->event_src = ev->source;
e->modifiers = ev->modifiers;
@@ -176,9 +179,9 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
e->canvas.y = ev->cur.y;
COORD_DUP(e);
e->data = ev->data;
- e->flags = ev->button_flags;
+ e->flags = (Evas_Button_Flags)ev->button_flags;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->modifiers = ev->modifiers;
e->locks = ev->locks;
@@ -204,7 +207,7 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
COORD_DUP_PREV(e);
e->data = ev->data;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->event_src = ev->source;
e->modifiers = ev->modifiers;
@@ -230,7 +233,7 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
COORD_DUP_CUR(e);
e->data = ev->data;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->modifiers = ev->modifiers;
e->locks = ev->locks;
@@ -250,7 +253,7 @@ efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Cal
COORD_DUP(e);
e->data = ev->data;
e->timestamp = ev->timestamp;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
e->modifiers = ev->modifiers;
e->locks = ev->locks;
@@ -359,7 +362,7 @@ efl_input_key_legacy_info_fill(Efl_Input_Key *evt, Evas_Event_Flags **pflags)
e->data = ev->data;
e->modifiers = ev->modifiers;
e->locks = ev->locks;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
if (pflags) *pflags = &e->event_flags;
ev->legacy = e;
@@ -377,7 +380,7 @@ efl_input_key_legacy_info_fill(Efl_Input_Key *evt, Evas_Event_Flags **pflags)
e->data = ev->data;
e->modifiers = ev->modifiers;
e->locks = ev->locks;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
e->dev = ev->device;
if (pflags) *pflags = &e->event_flags;
ev->legacy = e;
@@ -397,7 +400,7 @@ efl_input_hold_legacy_info_fill(Efl_Input_Hold *evt, Evas_Event_Flags **pflags)
e->timestamp = ev->timestamp;
e->dev = ev->device;
e->hold = ev->hold;
- e->event_flags = ev->event_flags;
+ e->event_flags = (Evas_Event_Flags)ev->event_flags;
if (pflags) *pflags = &e->event_flags;
ev->legacy = e;
diff --git a/src/lib/evas/canvas/evas_filter_mixin.c b/src/lib/evas/canvas/evas_filter_mixin.c
index 00942628f1..11a3fe45b5 100644
--- a/src/lib/evas/canvas/evas_filter_mixin.c
+++ b/src/lib/evas/canvas/evas_filter_mixin.c
@@ -1,9 +1,7 @@
#define EFL_CANVAS_FILTER_INTERNAL_PROTECTED
-#include "evas_common_private.h"
-#include "evas_private.h"
-#include "../../lib/efl/interfaces/efl_gfx_filter.eo.h"
-#include "efl_canvas_filter_internal.eo.h"
+#include <Evas.h>
+
#include "evas_filter.h"
#define MY_CLASS EFL_CANVAS_FILTER_INTERNAL_MIXIN
diff --git a/src/lib/evas/canvas/evas_font_dir.c b/src/lib/evas/canvas/evas_font_dir.c
index 5b945dcb27..2d98916ee6 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -187,6 +187,9 @@ evas_font_set_get(const char *name)
Eina_List *fonts = NULL;
char *p;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
+ if (!*name) return NULL;
+
p = strchr(name, ',');
if (!p)
{
@@ -751,6 +754,13 @@ evas_font_load(const Eina_List *font_paths, int hinting, Evas_Font_Description *
{
if (l == fonts || !font) /* First iteration OR no font */
{
+ /*This will suppress warnings for resource leak*/
+ if (font)
+ {
+ evas_common_font_free((RGBA_Font*)font);
+ font = NULL;
+ }
+
if (source) /* Load Font from "eet" source */
{
Eet_File *ef;
@@ -1415,7 +1425,7 @@ evas_object_text_font_string_parse(char *buffer, char dest[14][256])
return n;
}
-EAPI void
+EVAS_API void
evas_font_path_global_append(const char *path)
{
if (!path) return;
@@ -1426,7 +1436,7 @@ evas_font_path_global_append(const char *path)
#endif
}
-EAPI void
+EVAS_API void
evas_font_path_global_prepend(const char *path)
{
if (!path) return;
@@ -1437,7 +1447,7 @@ evas_font_path_global_prepend(const char *path)
#endif
}
-EAPI void
+EVAS_API void
evas_font_path_global_clear(void)
{
while (global_font_path)
@@ -1451,13 +1461,13 @@ evas_font_path_global_clear(void)
#endif
}
-EAPI const Eina_List *
+EVAS_API const Eina_List *
evas_font_path_global_list(void)
{
return global_font_path;
}
-EAPI void
+EVAS_API void
evas_font_reinit(void)
{
#ifdef HAVE_FONTCONFIG
diff --git a/src/lib/evas/canvas/evas_gl.c b/src/lib/evas/canvas/evas_gl.c
index 62b7a3fa0f..db4066a0e6 100644
--- a/src/lib/evas/canvas/evas_gl.c
+++ b/src/lib/evas/canvas/evas_gl.c
@@ -121,7 +121,7 @@ _evas_gl_internal_error_get(Evas_GL *evas_gl)
return tls_data->error_state;
}
-EAPI Evas_GL *
+EVAS_API Evas_GL *
evas_gl_new(Evas *e)
{
Evas_GL *evas_gl;
@@ -171,7 +171,7 @@ evas_gl_new(Evas *e)
return evas_gl;
}
-EAPI void
+EVAS_API void
evas_gl_free(Evas_GL *evas_gl)
{
MAGIC_CHECK(evas_gl, Evas_GL, MAGIC_EVAS_GL);
@@ -199,7 +199,7 @@ evas_gl_free(Evas_GL *evas_gl)
free(evas_gl);
}
-EAPI Evas_GL_Config *
+EVAS_API Evas_GL_Config *
evas_gl_config_new(void)
{
Evas_GL_Config *cfg;
@@ -211,13 +211,13 @@ evas_gl_config_new(void)
return cfg;
}
-EAPI void
+EVAS_API void
evas_gl_config_free(Evas_GL_Config *cfg)
{
if (cfg) free(cfg);
}
-EAPI Evas_GL_Surface *
+EVAS_API Evas_GL_Surface *
evas_gl_surface_create(Evas_GL *evas_gl, Evas_GL_Config *config, int width, int height)
{
Evas_GL_Surface *surf;
@@ -265,7 +265,7 @@ evas_gl_surface_create(Evas_GL *evas_gl, Evas_GL_Config *config, int width, int
return surf;
}
-EAPI Evas_GL_Surface *
+EVAS_API Evas_GL_Surface *
evas_gl_pbuffer_surface_create(Evas_GL *evas_gl, Evas_GL_Config *cfg,
int w, int h, const int *attrib_list)
{
@@ -321,7 +321,7 @@ evas_gl_pbuffer_surface_create(Evas_GL *evas_gl, Evas_GL_Config *cfg,
return surf;
}
-EAPI void
+EVAS_API void
evas_gl_surface_destroy(Evas_GL *evas_gl, Evas_GL_Surface *surf)
{
// Magic
@@ -369,7 +369,7 @@ evas_gl_engine_data_get(void *evgl)
return _evas_engine_context(evasgl->evas);
}
-EAPI Evas_GL_Context *
+EVAS_API Evas_GL_Context *
evas_gl_context_version_create(Evas_GL *evas_gl, Evas_GL_Context *share_ctx,
Evas_GL_Context_Version version)
{
@@ -419,13 +419,13 @@ evas_gl_context_version_create(Evas_GL *evas_gl, Evas_GL_Context *share_ctx,
return ctx;
}
-EAPI Evas_GL_Context *
+EVAS_API Evas_GL_Context *
evas_gl_context_create(Evas_GL *evas_gl, Evas_GL_Context *share_ctx)
{
return evas_gl_context_version_create(evas_gl, share_ctx, EVAS_GL_GLES_2_X);
}
-EAPI void
+EVAS_API void
evas_gl_context_destroy(Evas_GL *evas_gl, Evas_GL_Context *ctx)
{
@@ -453,7 +453,7 @@ evas_gl_context_destroy(Evas_GL *evas_gl, Evas_GL_Context *ctx)
ctx = NULL;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_gl_make_current(Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_GL_Context *ctx)
{
Eina_Bool ret;
@@ -481,7 +481,7 @@ evas_gl_make_current(Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_GL_Context *c
return ret;
}
-EAPI Evas_GL_Context *
+EVAS_API Evas_GL_Context *
evas_gl_current_context_get(Evas_GL *evas_gl)
{
Evas_GL_Context *comp;
@@ -519,7 +519,7 @@ evas_gl_current_context_get(Evas_GL *evas_gl)
return NULL;
}
-EAPI Evas_GL_Surface *
+EVAS_API Evas_GL_Surface *
evas_gl_current_surface_get(Evas_GL *evas_gl)
{
Evas_GL_Surface *comp;
@@ -557,7 +557,7 @@ evas_gl_current_surface_get(Evas_GL *evas_gl)
return NULL;
}
-EAPI Evas_GL *
+EVAS_API Evas_GL *
evas_gl_current_evas_gl_get(Evas_GL_Context **context, Evas_GL_Surface **surface)
{
Evas_GL *evasgl = NULL;
@@ -577,7 +577,7 @@ evas_gl_current_evas_gl_get(Evas_GL_Context **context, Evas_GL_Surface **surface
return evasgl;
}
-EAPI const char *
+EVAS_API const char *
evas_gl_string_query(Evas_GL *evas_gl, int name)
{
MAGIC_CHECK(evas_gl, Evas_GL, MAGIC_EVAS_GL);
@@ -587,7 +587,7 @@ evas_gl_string_query(Evas_GL *evas_gl, int name)
return evas_gl->evas->engine.func->gl_string_query(_evas_engine_context(evas_gl->evas), name);
}
-EAPI Evas_GL_Func
+EVAS_API Evas_GL_Func
evas_gl_proc_address_get(Evas_GL *evas_gl, const char *name)
{
MAGIC_CHECK(evas_gl, Evas_GL, MAGIC_EVAS_GL);
@@ -597,7 +597,7 @@ evas_gl_proc_address_get(Evas_GL *evas_gl, const char *name)
return (Evas_GL_Func)evas_gl->evas->engine.func->gl_proc_address_get(_evas_engine_context(evas_gl->evas), name);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_gl_native_surface_get(Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_Native_Surface *ns)
{
MAGIC_CHECK(evas_gl, Evas_GL, MAGIC_EVAS_GL);
@@ -622,7 +622,7 @@ evas_gl_native_surface_get(Evas_GL *evas_gl, Evas_GL_Surface *surf, Evas_Native_
}
-EAPI Evas_GL_API *
+EVAS_API Evas_GL_API *
evas_gl_api_get(Evas_GL *evas_gl)
{
MAGIC_CHECK(evas_gl, Evas_GL, MAGIC_EVAS_GL);
@@ -632,7 +632,7 @@ evas_gl_api_get(Evas_GL *evas_gl)
return (Evas_GL_API*)evas_gl->evas->engine.func->gl_api_get(_evas_engine_context(evas_gl->evas), EVAS_GL_GLES_2_X);
}
-EAPI Evas_GL_API *
+EVAS_API Evas_GL_API *
evas_gl_context_api_get(Evas_GL *evas_gl, Evas_GL_Context *ctx)
{
MAGIC_CHECK(evas_gl, Evas_GL, MAGIC_EVAS_GL);
@@ -648,7 +648,7 @@ evas_gl_context_api_get(Evas_GL *evas_gl, Evas_GL_Context *ctx)
return (Evas_GL_API*)evas_gl->evas->engine.func->gl_api_get(_evas_engine_context(evas_gl->evas), ctx->version);
}
-EAPI int
+EVAS_API int
evas_gl_rotation_get(Evas_GL *evas_gl)
{
MAGIC_CHECK(evas_gl, Evas_GL, MAGIC_EVAS_GL);
@@ -661,7 +661,7 @@ evas_gl_rotation_get(Evas_GL *evas_gl)
return evas_gl->evas->engine.func->gl_rotation_angle_get(_evas_engine_context(evas_gl->evas));
}
-EAPI int
+EVAS_API int
evas_gl_error_get(Evas_GL *evas_gl)
{
int err;
@@ -684,7 +684,7 @@ end:
return err;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_gl_surface_query(Evas_GL *evas_gl, Evas_GL_Surface *surface, int attribute, void *value)
{
if (!evas_gl) return EINA_FALSE;
diff --git a/src/lib/evas/canvas/evas_grid_eo.c b/src/lib/evas/canvas/evas_grid_eo.c
index 331cd0f9ef..0a6218a865 100644
--- a/src/lib/evas/canvas/evas_grid_eo.c
+++ b/src/lib/evas/canvas/evas_grid_eo.c
@@ -1,43 +1,43 @@
void _evas_grid_grid_size_set(Eo *obj, Evas_Grid_Data *pd, int w, int h);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_grid_size_set, EFL_FUNC_CALL(w, h), int w, int h);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_grid_size_set, EFL_FUNC_CALL(w, h), int w, int h);
void _evas_grid_grid_size_get(const Eo *obj, Evas_Grid_Data *pd, int *w, int *h);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_grid_size_get, EFL_FUNC_CALL(w, h), int *w, int *h);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_grid_size_get, EFL_FUNC_CALL(w, h), int *w, int *h);
Eina_List *_evas_grid_children_get(const Eo *obj, Evas_Grid_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_grid_children_get, Eina_List *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_grid_children_get, Eina_List *, NULL);
Eina_Accessor *_evas_grid_accessor_new(const Eo *obj, Evas_Grid_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_grid_accessor_new, Eina_Accessor *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_grid_accessor_new, Eina_Accessor *, NULL);
void _evas_grid_clear(Eo *obj, Evas_Grid_Data *pd, Eina_Bool clear);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_grid_clear, EFL_FUNC_CALL(clear), Eina_Bool clear);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_grid_clear, EFL_FUNC_CALL(clear), Eina_Bool clear);
Eina_Iterator *_evas_grid_iterator_new(const Eo *obj, Evas_Grid_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_grid_iterator_new, Eina_Iterator *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_grid_iterator_new, Eina_Iterator *, NULL);
Efl_Canvas_Object *_evas_grid_add_to(Eo *obj, Evas_Grid_Data *pd);
-EOAPI EFL_FUNC_BODY(evas_obj_grid_add_to, Efl_Canvas_Object *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY(evas_obj_grid_add_to, Efl_Canvas_Object *, NULL);
Eina_Bool _evas_grid_unpack(Eo *obj, Evas_Grid_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_grid_unpack, Eina_Bool, 0, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_grid_unpack, Eina_Bool, 0, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
Eina_Bool _evas_grid_pack_get(const Eo *obj, Evas_Grid_Data *pd, Efl_Canvas_Object *child, int *x, int *y, int *w, int *h);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_grid_pack_get, Eina_Bool, 0, EFL_FUNC_CALL(child, x, y, w, h), Efl_Canvas_Object *child, int *x, int *y, int *w, int *h);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_grid_pack_get, Eina_Bool, 0, EFL_FUNC_CALL(child, x, y, w, h), Efl_Canvas_Object *child, int *x, int *y, int *w, int *h);
Eina_Bool _evas_grid_pack(Eo *obj, Evas_Grid_Data *pd, Efl_Canvas_Object *child, int x, int y, int w, int h);
-EOAPI EFL_FUNC_BODYV(evas_obj_grid_pack, Eina_Bool, 0, EFL_FUNC_CALL(child, x, y, w, h), Efl_Canvas_Object *child, int x, int y, int w, int h);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_grid_pack, Eina_Bool, 0, EFL_FUNC_CALL(child, x, y, w, h), Efl_Canvas_Object *child, int x, int y, int w, int h);
Efl_Object *_evas_grid_efl_object_constructor(Eo *obj, Evas_Grid_Data *pd);
@@ -90,6 +90,6 @@ static const Efl_Class_Description _evas_grid_class_desc = {
NULL
};
-EFL_DEFINE_CLASS(evas_grid_class_get, &_evas_grid_class_desc, EFL_CANVAS_GROUP_CLASS, NULL);
+EFL_DEFINE_CLASS(evas_grid_class_get, &_evas_grid_class_desc, EFL_CANVAS_GROUP_CLASS, EFL_UI_I18N_INTERFACE, NULL);
#include "evas_grid_eo.legacy.c"
diff --git a/src/lib/evas/canvas/evas_grid_eo.h b/src/lib/evas/canvas/evas_grid_eo.h
index 4064c62e1d..f6ce03d5b5 100644
--- a/src/lib/evas/canvas/evas_grid_eo.h
+++ b/src/lib/evas/canvas/evas_grid_eo.h
@@ -19,7 +19,7 @@ typedef Eo Evas_Grid;
*/
#define EVAS_GRID_CLASS evas_grid_class_get()
-EWAPI const Efl_Class *evas_grid_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_grid_class_get(void) EINA_CONST;
/**
* @brief Set the virtual resolution for the grid
@@ -32,7 +32,7 @@ EWAPI const Efl_Class *evas_grid_class_get(void);
*
* @ingroup Evas_Grid
*/
-EOAPI void evas_obj_grid_size_set(Eo *obj, int w, int h);
+EVAS_API EVAS_API_WEAK void evas_obj_grid_size_set(Eo *obj, int w, int h);
/**
* @brief Get the current virtual resolution
@@ -47,7 +47,7 @@ EOAPI void evas_obj_grid_size_set(Eo *obj, int w, int h);
*
* @ingroup Evas_Grid
*/
-EOAPI void evas_obj_grid_size_get(const Eo *obj, int *w, int *h);
+EVAS_API EVAS_API_WEAK void evas_obj_grid_size_get(const Eo *obj, int *w, int *h);
/**
* @brief Get the list of children for the grid.
@@ -65,7 +65,7 @@ EOAPI void evas_obj_grid_size_get(const Eo *obj, int *w, int *h);
*
* @ingroup Evas_Grid
*/
-EOAPI Eina_List *evas_obj_grid_children_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_List *evas_obj_grid_children_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get an accessor to get random access to the list of children for the
@@ -81,7 +81,7 @@ EOAPI Eina_List *evas_obj_grid_children_get(const Eo *obj) EINA_WARN_UNUSED_RESU
*
* @ingroup Evas_Grid
*/
-EOAPI Eina_Accessor *evas_obj_grid_accessor_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_Accessor *evas_obj_grid_accessor_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Faster way to remove all child objects from a grid object.
@@ -93,7 +93,7 @@ EOAPI Eina_Accessor *evas_obj_grid_accessor_new(const Eo *obj) EINA_WARN_UNUSED_
*
* @ingroup Evas_Grid
*/
-EOAPI void evas_obj_grid_clear(Eo *obj, Eina_Bool clear);
+EVAS_API EVAS_API_WEAK void evas_obj_grid_clear(Eo *obj, Eina_Bool clear);
/**
* @brief Get an iterator to walk the list of children for the grid.
@@ -108,7 +108,7 @@ EOAPI void evas_obj_grid_clear(Eo *obj, Eina_Bool clear);
*
* @ingroup Evas_Grid
*/
-EOAPI Eina_Iterator *evas_obj_grid_iterator_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_Iterator *evas_obj_grid_iterator_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Create a grid that is child of a given element parent.
@@ -123,7 +123,7 @@ EOAPI Eina_Iterator *evas_obj_grid_iterator_new(const Eo *obj) EINA_WARN_UNUSED_
*
* @ingroup Evas_Grid
*/
-EOAPI Efl_Canvas_Object *evas_obj_grid_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_obj_grid_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Remove child from grid.
@@ -141,7 +141,7 @@ EOAPI Efl_Canvas_Object *evas_obj_grid_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
*
* @ingroup Evas_Grid
*/
-EOAPI Eina_Bool evas_obj_grid_unpack(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_grid_unpack(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Get the pack options for a grid child
@@ -162,7 +162,7 @@ EOAPI Eina_Bool evas_obj_grid_unpack(Eo *obj, Efl_Canvas_Object *child) EINA_ARG
*
* @ingroup Evas_Grid
*/
-EOAPI Eina_Bool evas_obj_grid_pack_get(const Eo *obj, Efl_Canvas_Object *child, int *x, int *y, int *w, int *h);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_grid_pack_get(const Eo *obj, Efl_Canvas_Object *child, int *x, int *y, int *w, int *h);
/**
* @brief Add a new child to a grid object.
@@ -180,6 +180,6 @@ EOAPI Eina_Bool evas_obj_grid_pack_get(const Eo *obj, Efl_Canvas_Object *child,
*
* @ingroup Evas_Grid
*/
-EOAPI Eina_Bool evas_obj_grid_pack(Eo *obj, Efl_Canvas_Object *child, int x, int y, int w, int h) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_grid_pack(Eo *obj, Efl_Canvas_Object *child, int x, int y, int w, int h) EINA_ARG_NONNULL(2);
#endif
diff --git a/src/lib/evas/canvas/evas_grid_eo.legacy.c b/src/lib/evas/canvas/evas_grid_eo.legacy.c
index 5447f1c390..44738579ef 100644
--- a/src/lib/evas/canvas/evas_grid_eo.legacy.c
+++ b/src/lib/evas/canvas/evas_grid_eo.legacy.c
@@ -1,59 +1,59 @@
-EAPI void
+EVAS_API void
evas_object_grid_size_set(Evas_Grid *obj, int w, int h)
{
evas_obj_grid_size_set(obj, w, h);
}
-EAPI void
+EVAS_API void
evas_object_grid_size_get(const Evas_Grid *obj, int *w, int *h)
{
evas_obj_grid_size_get(obj, w, h);
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_object_grid_children_get(const Evas_Grid *obj)
{
return evas_obj_grid_children_get(obj);
}
-EAPI Eina_Accessor *
+EVAS_API Eina_Accessor *
evas_object_grid_accessor_new(const Evas_Grid *obj)
{
return evas_obj_grid_accessor_new(obj);
}
-EAPI void
+EVAS_API void
evas_object_grid_clear(Evas_Grid *obj, Eina_Bool clear)
{
evas_obj_grid_clear(obj, clear);
}
-EAPI Eina_Iterator *
+EVAS_API Eina_Iterator *
evas_object_grid_iterator_new(const Evas_Grid *obj)
{
return evas_obj_grid_iterator_new(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_grid_add_to(Evas_Grid *obj)
{
return evas_obj_grid_add_to(obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_grid_unpack(Evas_Grid *obj, Efl_Canvas_Object *child)
{
return evas_obj_grid_unpack(obj, child);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_grid_pack_get(const Evas_Grid *obj, Efl_Canvas_Object *child, int *x, int *y, int *w, int *h)
{
return evas_obj_grid_pack_get(obj, child, x, y, w, h);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_grid_pack(Evas_Grid *obj, Efl_Canvas_Object *child, int x, int y, int w, int h)
{
return evas_obj_grid_pack(obj, child, x, y, w, h);
diff --git a/src/lib/evas/canvas/evas_grid_eo.legacy.h b/src/lib/evas/canvas/evas_grid_eo.legacy.h
index 9b48bf9b18..4b1e89c32e 100644
--- a/src/lib/evas/canvas/evas_grid_eo.legacy.h
+++ b/src/lib/evas/canvas/evas_grid_eo.legacy.h
@@ -25,7 +25,7 @@ typedef Eo Evas_Grid;
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI void evas_object_grid_size_set(Evas_Grid *obj, int w, int h);
+EVAS_API void evas_object_grid_size_set(Evas_Grid *obj, int w, int h);
/**
* @brief Get the current virtual resolution
@@ -40,7 +40,7 @@ EAPI void evas_object_grid_size_set(Evas_Grid *obj, int w, int h);
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI void evas_object_grid_size_get(const Evas_Grid *obj, int *w, int *h);
+EVAS_API void evas_object_grid_size_get(const Evas_Grid *obj, int *w, int *h);
/**
* @brief Get the list of children for the grid.
@@ -58,7 +58,7 @@ EAPI void evas_object_grid_size_get(const Evas_Grid *obj, int *w, int *h);
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI Eina_List *evas_object_grid_children_get(const Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_object_grid_children_get(const Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get an accessor to get random access to the list of children for the
@@ -74,7 +74,7 @@ EAPI Eina_List *evas_object_grid_children_get(const Evas_Grid *obj) EINA_WARN_UN
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI Eina_Accessor *evas_object_grid_accessor_new(const Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Accessor *evas_object_grid_accessor_new(const Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Faster way to remove all child objects from a grid object.
@@ -86,7 +86,7 @@ EAPI Eina_Accessor *evas_object_grid_accessor_new(const Evas_Grid *obj) EINA_WAR
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI void evas_object_grid_clear(Evas_Grid *obj, Eina_Bool clear);
+EVAS_API void evas_object_grid_clear(Evas_Grid *obj, Eina_Bool clear);
/**
* @brief Get an iterator to walk the list of children for the grid.
@@ -101,7 +101,7 @@ EAPI void evas_object_grid_clear(Evas_Grid *obj, Eina_Bool clear);
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI Eina_Iterator *evas_object_grid_iterator_new(const Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Iterator *evas_object_grid_iterator_new(const Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Create a grid that is child of a given element parent.
@@ -116,7 +116,7 @@ EAPI Eina_Iterator *evas_object_grid_iterator_new(const Evas_Grid *obj) EINA_WAR
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI Efl_Canvas_Object *evas_object_grid_add_to(Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Efl_Canvas_Object *evas_object_grid_add_to(Evas_Grid *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Remove child from grid.
@@ -134,7 +134,7 @@ EAPI Efl_Canvas_Object *evas_object_grid_add_to(Evas_Grid *obj) EINA_WARN_UNUSED
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI Eina_Bool evas_object_grid_unpack(Evas_Grid *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_grid_unpack(Evas_Grid *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Get the pack options for a grid child
@@ -155,7 +155,7 @@ EAPI Eina_Bool evas_object_grid_unpack(Evas_Grid *obj, Efl_Canvas_Object *child)
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI Eina_Bool evas_object_grid_pack_get(const Evas_Grid *obj, Efl_Canvas_Object *child, int *x, int *y, int *w, int *h);
+EVAS_API Eina_Bool evas_object_grid_pack_get(const Evas_Grid *obj, Efl_Canvas_Object *child, int *x, int *y, int *w, int *h);
/**
* @brief Add a new child to a grid object.
@@ -173,6 +173,6 @@ EAPI Eina_Bool evas_object_grid_pack_get(const Evas_Grid *obj, Efl_Canvas_Object
*
* @ingroup Evas_Object_Grid_Group
*/
-EAPI Eina_Bool evas_object_grid_pack(Evas_Grid *obj, Efl_Canvas_Object *child, int x, int y, int w, int h) EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_grid_pack(Evas_Grid *obj, Efl_Canvas_Object *child, int x, int y, int w, int h) EINA_ARG_NONNULL(2);
#endif
diff --git a/src/lib/evas/canvas/evas_image_eo.c b/src/lib/evas/canvas/evas_image_eo.c
index 2d4f39ff39..4eeac15542 100644
--- a/src/lib/evas/canvas/evas_image_eo.c
+++ b/src/lib/evas/canvas/evas_image_eo.c
@@ -14,6 +14,8 @@ _evas_image_class_initializer(Efl_Class *klass)
#endif
EFL_OPS_DEFINE(ops,
+ EFL_OBJECT_OP_FUNC(efl_file_loaded_get, _evas_image_efl_file_loaded_get),
+ EFL_OBJECT_OP_FUNC(efl_file_mmap_get, _evas_image_efl_file_mmap_get),
EFL_OBJECT_OP_FUNC(efl_file_load, _evas_image_efl_file_load),
EFL_OBJECT_OP_FUNC(efl_file_unload, _evas_image_efl_file_unload),
EVAS_IMAGE_EXTRA_OPS
diff --git a/src/lib/evas/canvas/evas_image_eo.h b/src/lib/evas/canvas/evas_image_eo.h
index af9f1a038a..6b75ffa11d 100644
--- a/src/lib/evas/canvas/evas_image_eo.h
+++ b/src/lib/evas/canvas/evas_image_eo.h
@@ -19,6 +19,6 @@ typedef Eo Evas_Image;
*/
#define EVAS_IMAGE_CLASS evas_image_class_get()
-EWAPI const Efl_Class *evas_image_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_image_class_get(void) EINA_CONST;
#endif
diff --git a/src/lib/evas/canvas/evas_image_legacy.c b/src/lib/evas/canvas/evas_image_legacy.c
index dca17462b9..d02cd3220b 100644
--- a/src/lib/evas/canvas/evas_image_legacy.c
+++ b/src/lib/evas/canvas/evas_image_legacy.c
@@ -21,7 +21,7 @@ struct _Evas_Image_Legacy_Pixels_Entry
void *image;
};
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_image_add(Evas *eo_e)
{
eo_e = evas_find(eo_e);
@@ -31,7 +31,7 @@ evas_object_image_add(Evas *eo_e)
efl_canvas_object_legacy_ctor(efl_added));
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_image_filled_add(Evas *eo_e)
{
eo_e = evas_find(eo_e);
@@ -40,7 +40,7 @@ evas_object_image_filled_add(Evas *eo_e)
efl_canvas_object_legacy_ctor(efl_added));
}
-EAPI void
+EVAS_API void
evas_object_image_memfile_set(Evas_Object *eo_obj, void *data, int size, char *format EINA_UNUSED, char *key)
{
Eina_File *f;
@@ -53,7 +53,7 @@ evas_object_image_memfile_set(Evas_Object *eo_obj, void *data, int size, char *f
eina_file_close(f); // close matching open OK
}
-EAPI void
+EVAS_API void
evas_object_image_fill_set(Evas_Object *obj,
Evas_Coord x, Evas_Coord y,
Evas_Coord w, Evas_Coord h)
@@ -62,7 +62,7 @@ evas_object_image_fill_set(Evas_Object *obj,
_evas_image_fill_set(obj, efl_data_scope_get(obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS), x, y, w, h);
}
-EAPI void
+EVAS_API void
evas_object_image_preload(Evas_Object *eo_obj, Eina_Bool cancel)
{
EVAS_IMAGE_API(eo_obj);
@@ -70,21 +70,21 @@ evas_object_image_preload(Evas_Object *eo_obj, Eina_Bool cancel)
else _evas_image_load_async_start(eo_obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_filled_get(const Evas_Object *eo_obj)
{
EVAS_IMAGE_API(eo_obj, EINA_FALSE);
return efl_gfx_fill_auto_get(eo_obj);
}
-EAPI void
+EVAS_API void
evas_object_image_filled_set(Evas_Object *eo_obj, Eina_Bool value)
{
EVAS_IMAGE_API(eo_obj);
efl_gfx_fill_auto_set(eo_obj, value);
}
-EAPI void
+EVAS_API void
evas_object_image_fill_get(const Evas_Object *obj,
Evas_Coord *x, Evas_Coord *y,
Evas_Coord *w, Evas_Coord *h)
@@ -99,63 +99,63 @@ evas_object_image_fill_get(const Evas_Object *obj,
if (h) *h = r.h;
}
-EAPI void
+EVAS_API void
evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool alpha)
{
EVAS_IMAGE_API(obj);
efl_gfx_buffer_alpha_set(obj, alpha);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_alpha_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EINA_FALSE);
return efl_gfx_buffer_alpha_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_border_set(Evas_Object *obj, int l, int r, int t, int b)
{
EVAS_IMAGE_API(obj);
efl_gfx_image_border_insets_set(obj, l, r, t, b);
}
-EAPI void
+EVAS_API void
evas_object_image_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b)
{
EVAS_IMAGE_API(obj);
efl_gfx_image_border_insets_get(obj, l, r, t, b);
}
-EAPI void
+EVAS_API void
evas_object_image_border_scale_set(Evas_Object *obj, double scale)
{
EVAS_IMAGE_API(obj);
efl_gfx_image_border_insets_scale_set(obj, scale);
}
-EAPI double
+EVAS_API double
evas_object_image_border_scale_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, 0.0);
return efl_gfx_image_border_insets_scale_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border_Fill_Mode fill)
{
EVAS_IMAGE_API(obj);
efl_gfx_image_center_fill_mode_set(obj, (Efl_Gfx_Center_Fill_Mode) fill);
}
-EAPI Evas_Border_Fill_Mode
+EVAS_API Evas_Border_Fill_Mode
evas_object_image_border_center_fill_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EVAS_BORDER_FILL_NONE);
return (Evas_Border_Fill_Mode) efl_gfx_image_center_fill_mode_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_size_get(const Evas_Object *obj, int *w, int *h)
{
Eina_Size2D sz;
@@ -165,14 +165,14 @@ evas_object_image_size_get(const Evas_Object *obj, int *w, int *h)
if (h) *h = sz.h;
}
-EAPI Evas_Colorspace
+EVAS_API Evas_Colorspace
evas_object_image_colorspace_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EVAS_COLORSPACE_ARGB8888);
return (Evas_Colorspace) efl_gfx_buffer_colorspace_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_image_stride_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, 0);
@@ -180,7 +180,7 @@ evas_object_image_stride_get(const Evas_Object *obj)
return o->cur->image.stride;
}
-EAPI void
+EVAS_API void
evas_object_image_data_update_add(Evas_Object *obj, int x, int y, int w, int h)
{
Eina_Rect r;
@@ -190,35 +190,35 @@ evas_object_image_data_update_add(Evas_Object *obj, int x, int y, int w, int h)
efl_gfx_buffer_update_add(obj, &r);
}
-EAPI void
+EVAS_API void
evas_object_image_file_set(Evas_Object *obj, const char *file, const char *key)
{
EVAS_IMAGE_API(obj);
efl_file_simple_load(obj, file, key);
}
-EAPI void
+EVAS_API void
evas_object_image_file_get(const Evas_Object *obj, const char **file, const char **key)
{
EVAS_IMAGE_API(obj);
efl_file_simple_get(obj, file, key);
}
-EAPI void
+EVAS_API void
evas_object_image_mmap_set(Evas_Object *obj, const Eina_File *f, const char *key)
{
EVAS_IMAGE_API(obj);
efl_file_simple_mmap_load(obj, f, key);
}
-EAPI void
+EVAS_API void
evas_object_image_mmap_get(const Evas_Object *obj, const Eina_File **f, const char **key)
{
EVAS_IMAGE_API(obj);
efl_file_simple_mmap_get(obj, f, key);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_save(const Evas_Object *obj, const char *file, const char *key, const char *flags)
{
char *encoding = NULL;
@@ -226,7 +226,7 @@ evas_object_image_save(const Evas_Object *obj, const char *file, const char *key
Eina_Error ret;
EVAS_IMAGE_API(obj, EINA_FALSE);
-
+
if (flags)
{
char *p, *pp;
@@ -256,161 +256,168 @@ evas_object_image_save(const Evas_Object *obj, const char *file, const char *key
return ret;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_animated_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EINA_FALSE);
return _evas_image_animated_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_animated_frame_set(Evas_Object *obj, int frame_index)
{
EVAS_IMAGE_API(obj);
_evas_image_animated_frame_set(obj, frame_index);
}
-EAPI int
+EVAS_API int
+evas_object_image_animated_frame_get(Evas_Object *obj)
+{
+ EVAS_IMAGE_API(obj, 0);
+ return _evas_image_animated_frame_get(obj);
+}
+
+EVAS_API int
evas_object_image_animated_frame_count_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, 0);
return _evas_image_animated_frame_count_get(obj);
}
-EAPI Evas_Image_Animated_Loop_Hint
+EVAS_API Evas_Image_Animated_Loop_Hint
evas_object_image_animated_loop_type_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EVAS_IMAGE_ANIMATED_HINT_NONE);
return (Evas_Image_Animated_Loop_Hint) _evas_image_animated_loop_type_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_image_animated_loop_count_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, 0);
return _evas_image_animated_loop_count_get(obj);
}
-EAPI double
+EVAS_API double
evas_object_image_animated_frame_duration_get(const Evas_Object *obj, int start_frame, int frame_num)
{
EVAS_IMAGE_API(obj, 0.0);
return _evas_image_animated_frame_duration_get(obj, start_frame, frame_num);
}
-EAPI void
+EVAS_API void
evas_object_image_load_size_set(Evas_Object *obj, int w, int h)
{
EVAS_IMAGE_API(obj);
_evas_image_load_size_set(obj, w, h);
}
-EAPI void
+EVAS_API void
evas_object_image_load_size_get(const Evas_Object *obj, int *w, int *h)
{
EVAS_IMAGE_API(obj);
_evas_image_load_size_get(obj, w, h);
}
-EAPI void
+EVAS_API void
evas_object_image_load_dpi_set(Evas_Object *obj, double dpi)
{
EVAS_IMAGE_API(obj);
_evas_image_load_dpi_set(obj, dpi);
}
-EAPI double
+EVAS_API double
evas_object_image_load_dpi_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, 0.0);
return _evas_image_load_dpi_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h)
{
EVAS_IMAGE_API(obj);
_evas_image_load_region_set(obj, x, y, w, h);
}
-EAPI void
+EVAS_API void
evas_object_image_load_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h)
{
EVAS_IMAGE_API(obj);
_evas_image_load_region_get(obj, x, y, w, h);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_region_support_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EINA_FALSE);
return _evas_image_load_region_support_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_load_orientation_set(Evas_Object *obj, Eina_Bool enable)
{
EVAS_IMAGE_API(obj);
_evas_image_load_orientation_set(obj, enable);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_load_orientation_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EINA_FALSE);
return _evas_image_load_orientation_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down)
{
EVAS_IMAGE_API(obj);
_evas_image_load_scale_down_set(obj, scale_down);
}
-EAPI int
+EVAS_API int
evas_object_image_load_scale_down_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, 1);
return _evas_image_load_scale_down_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_load_head_skip_set(Evas_Object *obj, Eina_Bool skip)
{
EVAS_IMAGE_API(obj);
_evas_image_load_head_skip_set(obj, skip);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_load_head_skip_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EINA_FALSE);
return _evas_image_load_head_skip_get(obj);
}
-EAPI Evas_Load_Error
+EVAS_API Evas_Load_Error
evas_object_image_load_error_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EVAS_LOAD_ERROR_GENERIC);
return _efl_gfx_image_load_error_to_evas_load_error(efl_gfx_image_load_error_get(obj));
}
-EAPI void
+EVAS_API void
evas_object_image_smooth_scale_set(Evas_Object *obj, Eina_Bool smooth_scale)
{
EVAS_IMAGE_API(obj);
efl_gfx_image_smooth_scale_set(obj, smooth_scale);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_smooth_scale_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EINA_FALSE);
return efl_gfx_image_smooth_scale_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient)
{
EVAS_IMAGE_API(obj);
@@ -419,7 +426,7 @@ evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient)
_evas_image_orientation_set(obj, o, orient);
}
-EAPI Evas_Image_Orient
+EVAS_API Evas_Image_Orient
evas_object_image_orient_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EVAS_IMAGE_ORIENT_NONE);
@@ -429,7 +436,7 @@ evas_object_image_orient_get(const Evas_Object *obj)
return o->cur->orient;
}
-EAPI void
+EVAS_API void
evas_object_image_snapshot_set(Evas_Object *eo, Eina_Bool s)
{
EVAS_IMAGE_API(eo);
@@ -443,7 +450,7 @@ evas_object_image_snapshot_set(Evas_Object *eo, Eina_Bool s)
EINA_COW_STATE_WRITE_END(obj, state_write, cur);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_snapshot_get(const Evas_Object *eo)
{
EVAS_IMAGE_API(eo, EINA_FALSE);
@@ -452,84 +459,84 @@ evas_object_image_snapshot_get(const Evas_Object *eo)
return obj->cur->snapshot;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_source_set(Evas_Object *eo, Evas_Object *src)
{
EVAS_IMAGE_API(eo, EINA_FALSE);
return _evas_image_proxy_source_set(eo, src);
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_image_source_get(const Evas_Object *eo)
{
EVAS_IMAGE_API(eo, NULL);
return _evas_image_proxy_source_get(eo);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_source_unset(Evas_Object *eo_obj)
{
EVAS_IMAGE_API(eo_obj, EINA_FALSE);
return _evas_image_proxy_source_set(eo_obj, NULL);
}
-EAPI void
+EVAS_API void
evas_object_image_source_clip_set(Evas_Object *eo, Eina_Bool source_clip)
{
EVAS_IMAGE_API(eo);
_evas_image_proxy_source_clip_set(eo, source_clip);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_source_clip_get(const Evas_Object *eo)
{
EVAS_IMAGE_API(eo, EINA_FALSE);
return _evas_image_proxy_source_clip_get(eo);
}
-EAPI void
+EVAS_API void
evas_object_image_source_events_set(Evas_Object *eo, Eina_Bool repeat)
{
EVAS_IMAGE_API(eo);
_evas_image_proxy_source_events_set(eo, repeat);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_source_events_get(const Evas_Object *eo)
{
EVAS_IMAGE_API(eo, EINA_FALSE);
return _evas_image_proxy_source_events_get(eo);
}
-EAPI void
+EVAS_API void
evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hint)
{
EVAS_IMAGE_API(obj);
- return efl_gfx_image_content_hint_set(obj, hint);
+ efl_gfx_image_content_hint_set(obj, (Efl_Gfx_Image_Content_Hint)hint);
}
-EAPI Evas_Image_Content_Hint
+EVAS_API Evas_Image_Content_Hint
evas_object_image_content_hint_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EVAS_IMAGE_CONTENT_HINT_NONE);
- return efl_gfx_image_content_hint_get(obj);
+ return (Evas_Image_Content_Hint)efl_gfx_image_content_hint_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint)
{
EVAS_IMAGE_API(obj);
return efl_gfx_image_scale_hint_set(obj, (Efl_Gfx_Image_Scale_Hint) hint);
}
-EAPI Evas_Image_Scale_Hint
+EVAS_API Evas_Image_Scale_Hint
evas_object_image_scale_hint_get(const Evas_Object *obj)
{
EVAS_IMAGE_API(obj, EVAS_IMAGE_SCALE_HINT_NONE);
return (Evas_Image_Scale_Hint) efl_gfx_image_scale_hint_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_image_native_surface_set(Evas_Object *eo_obj, Evas_Native_Surface *surf)
{
EVAS_IMAGE_API(eo_obj);
@@ -546,14 +553,14 @@ evas_object_image_native_surface_set(Evas_Object *eo_obj, Evas_Native_Surface *s
}
}
-EAPI Evas_Native_Surface *
+EVAS_API Evas_Native_Surface *
evas_object_image_native_surface_get(const Evas_Object *eo_obj)
{
EVAS_IMAGE_API(eo_obj, NULL);
return _evas_image_native_surface_get(eo_obj);
}
-EAPI void
+EVAS_API void
evas_object_image_pixels_get_callback_set(Eo *eo_obj, Evas_Object_Image_Pixels_Get_Cb func, void *data)
{
EVAS_IMAGE_API(eo_obj);
@@ -570,7 +577,7 @@ evas_object_image_pixels_get_callback_set(Eo *eo_obj, Evas_Object_Image_Pixels_G
EINA_COW_PIXEL_WRITE_END(o, pixi_write);
}
-EAPI void
+EVAS_API void
evas_object_image_pixels_dirty_set(Eo *eo_obj, Eina_Bool dirty)
{
EVAS_IMAGE_API(eo_obj);
@@ -589,7 +596,7 @@ evas_object_image_pixels_dirty_set(Eo *eo_obj, Eina_Bool dirty)
evas_object_change(eo_obj, obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_pixels_dirty_get(const Eo *eo_obj)
{
EVAS_IMAGE_API(eo_obj, EINA_FALSE);
@@ -599,7 +606,7 @@ evas_object_image_pixels_dirty_get(const Eo *eo_obj)
return (o->dirty_pixels ? 1 : 0);
}
-EAPI void
+EVAS_API void
evas_object_image_data_set(Eo *eo_obj, void *data)
{
EVAS_IMAGE_API(eo_obj);
@@ -666,6 +673,7 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
if (o->engine_data)
{
ENFN->image_free(ENC, o->engine_data);
+ o->engine_data = NULL;
o->changed = EINA_TRUE;
evas_object_change(eo_obj, obj);
}
@@ -680,8 +688,6 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
state_write->image.stride = 0;
}
EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
-
- o->engine_data = NULL;
}
/* FIXME - in engine call above
if (o->engine_data)
@@ -707,7 +713,7 @@ _image_to_free_del_cb(void *data)
free(px_entry);
}
-EAPI void*
+EVAS_API void*
evas_object_image_data_get(const Eo *eo_obj, Eina_Bool for_writing)
{
EVAS_IMAGE_API(eo_obj, NULL);
@@ -789,7 +795,7 @@ error:
return NULL;
}
-EAPI void
+EVAS_API void
evas_object_image_data_copy_set(Eo *eo_obj, void *data)
{
EVAS_IMAGE_API(eo_obj);
@@ -837,7 +843,7 @@ evas_object_image_data_copy_set(Eo *eo_obj, void *data)
}
/* Evas_Object equivalent: pixels_set(null, w, h, cspace) to (re)allocate an image */
-EAPI void
+EVAS_API void
evas_object_image_size_set(Evas_Object *eo_obj, int w, int h)
{
EVAS_IMAGE_API(eo_obj);
@@ -846,8 +852,6 @@ evas_object_image_size_set(Evas_Object *eo_obj, int w, int h)
Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
int stride = 0;
- if (o->cur->scene) return;
-
evas_object_async_block(obj);
_evas_image_cleanup(eo_obj, obj, o);
if (w < 1) w = 1;
@@ -904,7 +908,7 @@ evas_object_image_size_set(Evas_Object *eo_obj, int w, int h)
}
/* Evas_Object equivalent: pixels_set(null, w, h, cspace) to (re)allocate an image */
-EAPI void
+EVAS_API void
evas_object_image_colorspace_set(Evas_Object *eo_obj, Evas_Colorspace cspace)
{
EVAS_IMAGE_API(eo_obj);
@@ -925,7 +929,7 @@ evas_object_image_colorspace_set(Evas_Object *eo_obj, Evas_Colorspace cspace)
/* old video surfaces */
-EAPI void
+EVAS_API void
evas_object_image_video_surface_set(Evas_Object *eo_obj, Evas_Video_Surface *surf)
{
EVAS_IMAGE_LEGACY_API(eo_obj);
@@ -986,7 +990,7 @@ evas_object_image_video_surface_set(Evas_Object *eo_obj, Evas_Video_Surface *sur
}
}
-EAPI const Evas_Video_Surface*
+EVAS_API const Evas_Video_Surface*
evas_object_image_video_surface_get(const Evas_Object *eo_obj)
{
EVAS_IMAGE_LEGACY_API(eo_obj, NULL);
@@ -995,7 +999,7 @@ evas_object_image_video_surface_get(const Evas_Object *eo_obj)
return (!o->video_surface ? NULL : &o->pixels->video);
}
-EAPI void
+EVAS_API void
evas_object_image_video_surface_caps_set(Evas_Object *eo_obj, unsigned int caps)
{
EVAS_IMAGE_LEGACY_API(eo_obj);
@@ -1014,7 +1018,7 @@ evas_object_image_video_surface_caps_set(Evas_Object *eo_obj, unsigned int caps)
EINA_COW_PIXEL_WRITE_END(o, pixi_write)
}
-EAPI unsigned int
+EVAS_API unsigned int
evas_object_image_video_surface_caps_get(const Evas_Object *eo_obj)
{
EVAS_IMAGE_LEGACY_API(eo_obj, 0);
@@ -1028,7 +1032,7 @@ evas_object_image_video_surface_caps_get(const Evas_Object *eo_obj)
}
/* deprecated */
-EAPI void
+EVAS_API void
evas_object_image_fill_spread_set(Evas_Object *obj EINA_UNUSED, Evas_Fill_Spread spread)
{
/* not implemented! */
@@ -1037,14 +1041,14 @@ evas_object_image_fill_spread_set(Evas_Object *obj EINA_UNUSED, Evas_Fill_Spread
}
/* deprecated */
-EAPI Evas_Fill_Spread
+EVAS_API Evas_Fill_Spread
evas_object_image_fill_spread_get(const Evas_Object *obj EINA_UNUSED)
{
return EFL_GFX_FILL_REPEAT;
}
/* deprecated */
-EAPI void
+EVAS_API void
evas_object_image_source_visible_set(Evas_Object *eo, Eina_Bool visible)
{
/* FIXME: I'd love to remove this feature and replace by no_render.
@@ -1081,7 +1085,7 @@ evas_object_image_source_visible_set(Evas_Object *eo, Eina_Bool visible)
}
/* deprecated */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_source_visible_get(const Evas_Object *eo)
{
/* FIXME: see evas_object_image_source_visible_set */
@@ -1102,7 +1106,7 @@ evas_object_image_source_visible_get(const Evas_Object *eo)
}
/* deprecated */
-EAPI void*
+EVAS_API void*
evas_object_image_data_convert(Evas_Object *eo_obj, Evas_Colorspace to_cspace)
{
EVAS_IMAGE_LEGACY_API(eo_obj, NULL);
@@ -1117,7 +1121,7 @@ evas_object_image_data_convert(Evas_Object *eo_obj, Evas_Colorspace to_cspace)
static int warned = 0;
if (!warned)
{
- ERR("%s is deprecated and shouldn't be called", __FUNCTION__);
+ ERR("%s is deprecated and shouldn't be called", __func__);
warned = 1;
}
@@ -1143,7 +1147,7 @@ evas_object_image_data_convert(Evas_Object *eo_obj, Evas_Colorspace to_cspace)
}
/* deprecated */
-EAPI void
+EVAS_API void
evas_object_image_reload(Evas_Object *eo_obj)
{
EVAS_IMAGE_LEGACY_API(eo_obj);
@@ -1181,7 +1185,7 @@ evas_object_image_reload(Evas_Object *eo_obj)
}
/* deprecated */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_pixels_import(Evas_Object *eo_obj, Evas_Pixel_Import_Source *pixels)
{
EVAS_IMAGE_LEGACY_API(eo_obj, EINA_FALSE);
@@ -1193,7 +1197,7 @@ evas_object_image_pixels_import(Evas_Object *eo_obj, Evas_Pixel_Import_Source *p
static int warned = 0;
if (!warned)
{
- ERR("%s is deprecated and shouldn't be called", __FUNCTION__);
+ ERR("%s is deprecated and shouldn't be called", __func__);
warned = 1;
}
@@ -1258,7 +1262,7 @@ evas_object_image_pixels_import(Evas_Object *eo_obj, Evas_Pixel_Import_Source *p
return EINA_TRUE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_image_max_size_get(Eo *eo_e, int *w, int *h)
{
Eina_Size2D size;
@@ -1274,19 +1278,41 @@ evas_image_max_size_get(Eo *eo_e, int *w, int *h)
}
/* deprecated */
-EAPI void
+EVAS_API void
evas_object_image_alpha_mask_set(Evas_Object *eo_obj EINA_UNUSED, Eina_Bool ismask EINA_UNUSED)
{
WRN("This function is not implemented, has never been and never will be.");
EVAS_IMAGE_LEGACY_API(eo_obj);
}
+EOLIAN static Eina_Bool
+_evas_image_efl_file_loaded_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
+{
+ Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ if (!o->skip_head)
+ return efl_file_loaded_get(efl_super(eo_obj, EVAS_IMAGE_CLASS));
+ return !!o->cur->f;
+}
+
+EOLIAN static const Eina_File *
+_evas_image_efl_file_mmap_get(const Eo *eo_obj, void *_pd EINA_UNUSED)
+{
+ Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ if (!o->skip_head)
+ return efl_file_mmap_get(efl_super(eo_obj, EVAS_IMAGE_CLASS));
+ return o->cur->f;
+}
+
EOLIAN static Eina_Error
_evas_image_efl_file_load(Eo *obj, void *pd EINA_UNUSED)
{
EVAS_IMAGE_API(obj, EINA_FALSE);
if (efl_file_loaded_get(obj)) return 0;
- Eina_Error err = efl_file_load(efl_super(obj, EVAS_IMAGE_CLASS));
+ Evas_Image_Data *o = efl_data_scope_get(obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ Eina_Error err = 0;
+
+ if (!o->skip_head)
+ err = efl_file_load(efl_super(obj, EVAS_IMAGE_CLASS));
if (err)
{
if (err == ENOENT)
@@ -1299,7 +1325,7 @@ _evas_image_efl_file_load(Eo *obj, void *pd EINA_UNUSED)
_efl_canvas_image_load_error_set(obj, EFL_GFX_IMAGE_LOAD_ERROR_GENERIC);
return err;
}
- if (_evas_image_file_load(obj))
+ if (_evas_image_file_load(obj, o))
return 0;
return EFL_GFX_IMAGE_LOAD_ERROR_DOES_NOT_EXIST;
}
diff --git a/src/lib/evas/canvas/evas_image_private.h b/src/lib/evas/canvas/evas_image_private.h
index 6d18205d1f..693125fb84 100644
--- a/src/lib/evas/canvas/evas_image_private.h
+++ b/src/lib/evas/canvas/evas_image_private.h
@@ -82,7 +82,6 @@ struct _Evas_Object_Image_State
Evas_Object *source;
Evas_Map *defmap;
- Evas_Canvas3D_Scene *scene;
Eina_File *f;
const char *key;
@@ -168,7 +167,7 @@ void *_evas_image_pixels_get(Eo *eo_obj, Evas_Object_Protected_Data *obj, void *
void _evas_image_fill_set(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w, int h);
/* Efl.File */
-Eina_Bool _evas_image_file_load(Eo *eo_obj);
+Eina_Bool _evas_image_file_load(Eo *eo_obj, Evas_Image_Data *o);
void _evas_image_file_unload(Eo *eo_obj);
const Eina_File *_evas_image_mmap_get(const Eo *eo_obj);
const char *_evas_image_key_get(const Eo *eo_obj);
@@ -213,11 +212,6 @@ Eina_Bool _evas_image_proxy_source_clip_get(const Eo *eo_obj);
void _evas_image_proxy_source_events_set(Eo *eo_obj, Eina_Bool source_events);
Eina_Bool _evas_image_proxy_source_events_get(const Eo *eo_obj);
-/* Efl.Canvas.Scene3d */
-void _evas_image_3d_render(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Data *o, Evas_Canvas3D_Scene *scene, void *engine, void *output);
-void _evas_image_3d_set(Evas_Object *eo_obj, Evas_Canvas3D_Scene *scene);
-void _evas_image_3d_unset(Evas_Object *eo_obj, Evas_Object_Protected_Data *image, Evas_Image_Data *o);
-
/* Efl.Canvas.Surface */
Eina_Bool _evas_image_native_surface_set(Eo *eo_obj, Evas_Native_Surface *surf);
Evas_Native_Surface *_evas_image_native_surface_get(const Evas_Object *eo_obj);
diff --git a/src/lib/evas/canvas/evas_key.c b/src/lib/evas/canvas/evas_key.c
index 5a86a92ea7..624899d910 100644
--- a/src/lib/evas/canvas/evas_key.c
+++ b/src/lib/evas/canvas/evas_key.c
@@ -31,14 +31,14 @@ evas_key_lock_number(const Evas_Lock *l, const char *keyname)
/* public calls */
-EAPI const Evas_Modifier*
+EVAS_API const Evas_Modifier*
evas_key_modifier_get(const Evas *eo_e)
{
EVAS_LEGACY_API(eo_e, e, NULL);
return &(e->modifiers);
}
-EAPI const Evas_Lock*
+EVAS_API const Evas_Lock*
evas_key_lock_get(const Evas *eo_e)
{
EVAS_LEGACY_API(eo_e, e, NULL);
@@ -60,7 +60,7 @@ _key_is_set(int n, Eina_Hash *masks, const Evas_Device *seat)
return 0;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_seat_key_modifier_is_set(const Evas_Modifier *m, const char *keyname,
const Evas_Device *seat)
{
@@ -72,21 +72,21 @@ evas_seat_key_modifier_is_set(const Evas_Modifier *m, const char *keyname,
return _key_is_set(evas_key_modifier_number(m, keyname), m->masks, seat);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_key_modifier_is_set(const Evas_Modifier *m, const char *keyname)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
return evas_seat_key_modifier_is_set(m, keyname, NULL);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_key_lock_is_set(const Evas_Lock *l, const char *keyname)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(l, EINA_FALSE);
return evas_seat_key_lock_is_set(l, keyname, NULL);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_seat_key_lock_is_set(const Evas_Lock *l, const char *keyname,
const Evas_Device *seat)
{
@@ -267,7 +267,7 @@ _evas_canvas_key_lock_off(Eo *eo_e, Evas_Public_Data *e, const char *keyname)
/* errr need to add key grabbing/ungrabbing calls - missing modifier stuff. */
-EAPI Evas_Modifier_Mask
+EVAS_API Evas_Modifier_Mask
evas_key_modifier_mask_get(const Evas *eo_e, const char *keyname)
{
int n;
diff --git a/src/lib/evas/canvas/evas_key_grab.c b/src/lib/evas/canvas/evas_key_grab.c
index 5c8969ccb4..82292666a6 100644
--- a/src/lib/evas/canvas/evas_key_grab.c
+++ b/src/lib/evas/canvas/evas_key_grab.c
@@ -106,7 +106,7 @@ evas_object_grabs_cleanup(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected
while (obj->grabs)
{
Evas_Key_Grab *g = obj->grabs->data;
- obj->layer->evas->grabs =
+ obj->layer->evas->grabs =
eina_list_remove(obj->layer->evas->grabs, g);
obj->grabs = eina_list_remove(obj->grabs, g);
if (g->keyname) free(g->keyname);
@@ -243,7 +243,7 @@ _efl_canvas_object_key_ungrab(Eo *eo_obj, Evas_Object_Protected_Data *obj,
// Legacy API
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_key_grab(Evas_Object *eo_obj, const char *keyname,
Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers,
Eina_Bool exclusive)
@@ -256,7 +256,7 @@ evas_object_key_grab(Evas_Object *eo_obj, const char *keyname,
return _object_key_grab(eo_obj, obj, keyname, modifiers, not_modifiers, exclusive);
}
-EAPI void
+EVAS_API void
evas_object_key_ungrab(Efl_Canvas_Object *eo_obj, const char *keyname,
Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers)
{
diff --git a/src/lib/evas/canvas/evas_layer.c b/src/lib/evas/canvas/evas_layer.c
index d4e2eb3469..3c0898d0ab 100644
--- a/src/lib/evas/canvas/evas_layer.c
+++ b/src/lib/evas/canvas/evas_layer.c
@@ -208,7 +208,7 @@ _evas_object_layer_set_child(Evas_Object_Protected_Data *obj, Evas_Object_Protec
/* public functions */
-EAPI void
+EVAS_API void
evas_object_layer_set(Evas_Object *obj, short l)
{
efl_gfx_stack_layer_set((Evas_Object *)obj, l);
@@ -265,7 +265,7 @@ _efl_canvas_object_efl_gfx_stack_layer_set(Eo *eo_obj, Evas_Object_Protected_Dat
evas_object_inform_call_restack(eo_obj, obj);
}
-EAPI short
+EVAS_API short
evas_object_layer_get(const Evas_Object *obj)
{
return efl_gfx_stack_layer_get((Evas_Object *)obj);
diff --git a/src/lib/evas/canvas/evas_line_eo.c b/src/lib/evas/canvas/evas_line_eo.c
index 3199d53e2d..8b6ff5ca21 100644
--- a/src/lib/evas/canvas/evas_line_eo.c
+++ b/src/lib/evas/canvas/evas_line_eo.c
@@ -1,11 +1,11 @@
void _evas_line_xy_set(Eo *obj, Evas_Line_Data *pd, int x1, int y1, int x2, int y2);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_line_xy_set, EFL_FUNC_CALL(x1, y1, x2, y2), int x1, int y1, int x2, int y2);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_line_xy_set, EFL_FUNC_CALL(x1, y1, x2, y2), int x1, int y1, int x2, int y2);
void _evas_line_xy_get(const Eo *obj, Evas_Line_Data *pd, int *x1, int *y1, int *x2, int *y2);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_line_xy_get, EFL_FUNC_CALL(x1, y1, x2, y2), int *x1, int *y1, int *x2, int *y2);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_line_xy_get, EFL_FUNC_CALL(x1, y1, x2, y2), int *x1, int *y1, int *x2, int *y2);
Efl_Object *_evas_line_efl_object_constructor(Eo *obj, Evas_Line_Data *pd);
diff --git a/src/lib/evas/canvas/evas_line_eo.h b/src/lib/evas/canvas/evas_line_eo.h
index bcdebcddef..9504881ced 100644
--- a/src/lib/evas/canvas/evas_line_eo.h
+++ b/src/lib/evas/canvas/evas_line_eo.h
@@ -19,7 +19,7 @@ typedef Eo Evas_Line;
*/
#define EVAS_LINE_CLASS evas_line_class_get()
-EWAPI const Efl_Class *evas_line_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_line_class_get(void) EINA_CONST;
/**
* @brief Sets the coordinates of the end points of the given evas line object.
@@ -34,7 +34,7 @@ EWAPI const Efl_Class *evas_line_class_get(void);
*
* @ingroup Evas_Line
*/
-EOAPI void evas_obj_line_xy_set(Eo *obj, int x1, int y1, int x2, int y2);
+EVAS_API EVAS_API_WEAK void evas_obj_line_xy_set(Eo *obj, int x1, int y1, int x2, int y2);
/**
* @brief Retrieves the coordinates of the end points of the given evas line
@@ -48,6 +48,6 @@ EOAPI void evas_obj_line_xy_set(Eo *obj, int x1, int y1, int x2, int y2);
*
* @ingroup Evas_Line
*/
-EOAPI void evas_obj_line_xy_get(const Eo *obj, int *x1, int *y1, int *x2, int *y2);
+EVAS_API EVAS_API_WEAK void evas_obj_line_xy_get(const Eo *obj, int *x1, int *y1, int *x2, int *y2);
#endif
diff --git a/src/lib/evas/canvas/evas_line_eo.legacy.c b/src/lib/evas/canvas/evas_line_eo.legacy.c
index 5c879056ed..9307c34526 100644
--- a/src/lib/evas/canvas/evas_line_eo.legacy.c
+++ b/src/lib/evas/canvas/evas_line_eo.legacy.c
@@ -1,11 +1,11 @@
-EAPI void
+EVAS_API void
evas_object_line_xy_set(Evas_Line *obj, int x1, int y1, int x2, int y2)
{
evas_obj_line_xy_set(obj, x1, y1, x2, y2);
}
-EAPI void
+EVAS_API void
evas_object_line_xy_get(const Evas_Line *obj, int *x1, int *y1, int *x2, int *y2)
{
evas_obj_line_xy_get(obj, x1, y1, x2, y2);
diff --git a/src/lib/evas/canvas/evas_line_eo.legacy.h b/src/lib/evas/canvas/evas_line_eo.legacy.h
index 556174c8b2..9fc3218338 100644
--- a/src/lib/evas/canvas/evas_line_eo.legacy.h
+++ b/src/lib/evas/canvas/evas_line_eo.legacy.h
@@ -27,7 +27,7 @@ typedef Eo Evas_Line;
*
* @ingroup Evas_Object_Line_Group
*/
-EAPI void evas_object_line_xy_set(Evas_Line *obj, int x1, int y1, int x2, int y2);
+EVAS_API void evas_object_line_xy_set(Evas_Line *obj, int x1, int y1, int x2, int y2);
/**
* @brief Retrieves the coordinates of the end points of the given evas line
@@ -41,6 +41,6 @@ EAPI void evas_object_line_xy_set(Evas_Line *obj, int x1, int y1, int x2, int y2
*
* @ingroup Evas_Object_Line_Group
*/
-EAPI void evas_object_line_xy_get(const Evas_Line *obj, int *x1, int *y1, int *x2, int *y2);
+EVAS_API void evas_object_line_xy_get(const Evas_Line *obj, int *x1, int *y1, int *x2, int *y2);
#endif
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 86a7881473..4bdc7e36dd 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -19,24 +19,24 @@
#define MY_CLASS EVAS_CANVAS_CLASS
#ifdef LKDEBUG
-EAPI Eina_Bool lockdebug = EINA_FALSE;
-EAPI int lockmax = 0;
+EVAS_API Eina_Bool lockdebug = EINA_FALSE;
+EVAS_API int lockmax = 0;
#endif
static int _evas_init_count = 0;
int _evas_log_dom_global = -1;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_NONE = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_GENERIC = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_DOES_NOT_EXIST = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_PERMISSION_DENIED = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_CORRUPT_FILE = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_UNKNOWN_FORMAT = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_CANCELLED = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_INCOMPATIBLE_FILE = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_UNKNOWN_COLLECTION = 0;
-EAPI Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_RECURSIVE_REFERENCE = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_NONE = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_GENERIC = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_DOES_NOT_EXIST = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_PERMISSION_DENIED = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_CORRUPT_FILE = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_UNKNOWN_FORMAT = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_CANCELLED = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_INCOMPATIBLE_FILE = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_UNKNOWN_COLLECTION = 0;
+EVAS_API Eina_Error EFL_GFX_IMAGE_LOAD_ERROR_RECURSIVE_REFERENCE = 0;
#define NUM_ERRORS 11
@@ -51,7 +51,7 @@ const char *efl_gfx_image_load_error_msgs[] = {
"Reading operation has been cancelled during decoding" ,
"(Edje only) The file pointed to is incompatible, i.e., it doesn't match the library's current version's format." ,
"(Edje only) The group/collection set to load from was not found in the file" ,
- "(Edje only) The group/collection set to load from had recursive references on its components"
+ "(Edje only) The group/collection set to load from had recursive references on its components"
};
static void
@@ -120,8 +120,35 @@ _efl_gfx_image_load_error_to_evas_load_error(Eina_Error err)
return EVAS_LOAD_ERROR_GENERIC;
}
+static Eina_Content*
+_markup_to_utf8(Eina_Content *from, const char *to_type)
+{
+ Eina_Content *ret = NULL;
+ Eina_Slice slice = eina_content_data_get(from);
+ char *utf8 = evas_textblock_text_markup_to_utf8(NULL, slice.mem);
+ if (utf8)
+ {
+ ret = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(utf8), to_type);
+ free(utf8);
+ }
+ return ret;
+}
-EAPI int
+static Eina_Content*
+_utf8_to_markup(Eina_Content *from, const char *to_type)
+{
+ Eina_Content *ret = NULL;
+ Eina_Slice slice = eina_content_data_get(from);
+ char *markup = evas_textblock_text_utf8_to_markup(NULL, slice.mem);
+ if (markup)
+ {
+ ret = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(markup), to_type);
+ free(markup);
+ }
+ return ret;
+}
+
+EVAS_API int
evas_init(void)
{
if (++_evas_init_count != 1)
@@ -179,6 +206,9 @@ evas_init(void)
_efl_gfx_image_load_error_init();
+ eina_content_converter_conversion_register("application/x-elementary-markup", "text/plain;charset=utf-8", _markup_to_utf8);
+ eina_content_converter_conversion_register("text/plain;charset=utf-8", "application/x-elementary-markup", _utf8_to_markup);
+
return _evas_init_count;
shutdown_filter:
@@ -205,7 +235,7 @@ shutdown_evil:
return --_evas_init_count;
}
-EAPI int
+EVAS_API int
evas_shutdown(void)
{
if (_evas_init_count <= 0)
@@ -222,6 +252,8 @@ evas_shutdown(void)
evas_focus_shutdown();
+ evas_fonts_zero_free();
+
evas_cache_vg_shutdown();
evas_font_path_global_clear();
@@ -273,7 +305,7 @@ evas_shutdown(void)
}
-EAPI Evas *
+EVAS_API Evas *
evas_new(void)
{
Evas_Object *eo_obj = efl_add(EVAS_CANVAS_CLASS, efl_main_loop_get());
@@ -331,6 +363,9 @@ _evas_canvas_efl_object_constructor(Eo *eo_obj, Evas_Public_Data *e)
EVAS_ARRAY_SET(e, glyph_unref_queue);
EVAS_ARRAY_SET(e, texts_unref_queue);
+ eina_array_step_set(&e->render_post_change_objects, sizeof(e->render_post_change_objects), 10);
+ eina_array_step_set(&e->map_clip_objects, sizeof(e->map_clip_objects), 64);
+
e->active_objects.version = EINA_ARRAY_VERSION;
eina_inarray_step_set(&e->active_objects,
sizeof(Eina_Inarray),
@@ -352,7 +387,7 @@ _evas_canvas_efl_object_constructor(Eo *eo_obj, Evas_Public_Data *e)
return eo_obj;
}
-EAPI void
+EVAS_API void
evas_free(Evas *eo_e)
{
if (!eo_e) return;
@@ -612,7 +647,9 @@ _evas_canvas_efl_object_destructor(Eo *eo_e, Evas_Public_Data *e)
eina_array_flush(&e->image_unref_queue);
eina_array_flush(&e->glyph_unref_queue);
eina_array_flush(&e->texts_unref_queue);
+ eina_array_flush(&e->map_clip_objects);
eina_hash_free(e->focused_objects);
+ eina_array_flush(&e->render_post_change_objects);
SLKL(e->post_render.lock);
EINA_INLIST_FREE(e->post_render.jobs, job)
@@ -636,7 +673,7 @@ _evas_canvas_efl_object_destructor(Eo *eo_e, Evas_Public_Data *e)
// It is now expected that the first output in the list is the default one
// manipulated by this set of legacy API
-EAPI Evas_Engine_Info *
+EVAS_API Evas_Engine_Info *
evas_engine_info_get(const Evas *obj)
{
if (!obj) return NULL;
@@ -655,7 +692,7 @@ evas_engine_info_get(const Evas *obj)
return efl_canvas_output_engine_info_get(output);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_engine_info_set(Evas *obj, Evas_Engine_Info *info)
{
if (!obj) return EINA_FALSE;
@@ -713,7 +750,7 @@ _evas_canvas_default_device_get(const Eo *eo_e EINA_UNUSED,
return NULL;
}
-EAPI int
+EVAS_API int
evas_render_method_lookup(const char *name)
{
Evas_Module *em;
@@ -726,13 +763,13 @@ evas_render_method_lookup(const char *name)
return em->id_engine;
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_render_method_list(void)
{
return evas_module_engine_list();
}
-EAPI void
+EVAS_API void
evas_render_method_list_free(Eina_List *list)
{
const char *s;
@@ -740,7 +777,7 @@ evas_render_method_list_free(Eina_List *list)
EINA_LIST_FREE(list, s) eina_stringshare_del(s);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_extension_can_load_get(const char *file)
{
const char *tmp;
@@ -753,7 +790,7 @@ evas_object_image_extension_can_load_get(const char *file)
return result;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_image_extension_can_load_fast_get(const char *file)
{
return evas_common_extension_can_load_get(file);
@@ -933,7 +970,7 @@ _evas_unwalk(Evas_Public_Data *e)
efl_unref(e->evas);
}
-EAPI const char *
+EVAS_API const char *
evas_load_error_str(Evas_Load_Error error)
{
switch (error)
@@ -957,38 +994,38 @@ evas_load_error_str(Evas_Load_Error error)
}
}
-EAPI void
+EVAS_API void
evas_color_hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b)
{
evas_common_convert_color_hsv_to_rgb(h, s, v, r, g, b);
}
-EAPI void
+EVAS_API void
evas_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v)
{
evas_common_convert_color_rgb_to_hsv(r, g, b, h, s, v);
}
-EAPI void
+EVAS_API void
evas_color_argb_premul(int a, int *r, int *g, int *b)
{
evas_common_convert_color_argb_premul(a, r, g, b);
}
-EAPI void
+EVAS_API void
evas_color_argb_unpremul(int a, int *r, int *g, int *b)
{
evas_common_convert_color_argb_unpremul(a, r, g, b);
}
-EAPI void
+EVAS_API void
evas_data_argb_premul(unsigned int *data, unsigned int len)
{
if (!data || (len < 1)) return;
evas_common_convert_argb_premul(data, len);
}
-EAPI void
+EVAS_API void
evas_data_argb_unpremul(unsigned int *data, unsigned int len)
{
if (!data || (len < 1)) return;
@@ -1023,13 +1060,13 @@ evas_ector_get(Evas_Public_Data *e)
return e->ector;
}
-EAPI Evas_BiDi_Direction
+EVAS_API Evas_BiDi_Direction
evas_language_direction_get(void)
{
return evas_common_language_direction_get();
}
-EAPI void
+EVAS_API void
evas_language_reinit(void)
{
evas_common_language_reinit();
@@ -1059,16 +1096,13 @@ _image_data_unset(Evas_Object_Protected_Data *obj, Eina_List **list)
data->engine_data =
obj->layer->evas->engine.func->polygon_points_clear(ENC,
data->engine_data))
- else CHECK(EVAS_CANVAS3D_TEXTURE_CLASS, Evas_Canvas3D_Texture_Data,
- if (obj->layer->evas->engine.func->texture_free)
- obj->layer->evas->engine.func->texture_free(ENC, data->engine_data))
else return;
#undef CHECK
evas_object_ref(obj->object);
*list = eina_list_append(*list, obj->object);
}
-EAPI Eina_List *
+EVAS_API Eina_List *
_evas_canvas_image_data_unset(Evas *eo_e)
{
Evas_Public_Data *e = efl_data_scope_get(eo_e, MY_CLASS);
@@ -1118,13 +1152,11 @@ _image_data_regenerate(Evas_Object *eo_obj)
}
CHECK(EFL_CANVAS_IMAGE_INTERNAL_CLASS, Evas_Image_Data, _image_image_data_regenerate(eo_obj, obj, data))
else CHECK(EFL_CANVAS_IMAGE_CLASS, Evas_Image_Data, _image_image_data_regenerate(eo_obj, obj, data))
- else CHECK(EFL_CANVAS_SCENE3D_CLASS, Evas_Image_Data, _image_image_data_regenerate(eo_obj, obj, data))
//else CHECK(EFL_CANVAS_VG_OBJECT_CLASS, Efl_Canvas_Vg_Object_Data,)
//else CHECK(EFL_CANVAS_POLYGON_CLASS, Efl_Canvas_Polygon_Data,)
- //else CHECK(EVAS_CANVAS3D_TEXTURE_CLASS, Evas_Canvas3D_Texture_Data,
}
-EAPI void
+EVAS_API void
_evas_canvas_image_data_regenerate(Eina_List *list)
{
Evas_Object *eo_obj;
@@ -1224,7 +1256,7 @@ _evas_canvas_efl_canvas_scene_image_max_size_get(const Eo *eo_e EINA_UNUSED, Eva
/* Legacy deprecated functions */
-EAPI void
+EVAS_API void
evas_output_framespace_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1243,7 +1275,7 @@ evas_output_framespace_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w,
e->changed = 1;
}
-EAPI void
+EVAS_API void
evas_output_framespace_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1256,7 +1288,7 @@ evas_output_framespace_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_
if (h) *h = e->framespace.h;
}
-EAPI void
+EVAS_API void
evas_output_method_set(Evas *eo_e, int render_method)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1328,7 +1360,7 @@ evas_output_method_set(Evas *eo_e, int render_method)
EVAS_DEVICE_SUBCLASS_NONE);
}
-EAPI int
+EVAS_API int
evas_output_method_get(const Evas *eo_e)
{
EVAS_TYPE_CHECK(eo_e, RENDER_METHOD_INVALID);
@@ -1338,7 +1370,7 @@ evas_output_method_get(const Evas *eo_e)
return e->output.render_method;
}
-EAPI void
+EVAS_API void
evas_output_size_set(Evas *eo_e, int w, int h)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1366,7 +1398,7 @@ evas_output_size_set(Evas *eo_e, int w, int h)
evas_render_invalidate(eo_e);
}
-EAPI void
+EVAS_API void
evas_output_size_get(const Evas *eo_e, int *w, int *h)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1377,7 +1409,7 @@ evas_output_size_get(const Evas *eo_e, int *w, int *h)
if (h) *h = e->output.h;
}
-EAPI void
+EVAS_API void
evas_output_viewport_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1405,7 +1437,7 @@ evas_output_viewport_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, E
evas_event_callback_call(e->evas, EVAS_CALLBACK_CANVAS_VIEWPORT_RESIZE, NULL);
}
-EAPI void
+EVAS_API void
evas_output_viewport_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1480,7 +1512,7 @@ _evas_pointer_data_add(Evas_Public_Data *edata, Evas_Device *pointer)
}
void
-_evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer)
+_evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer, Eina_Bool nofree)
{
Evas_Pointer_Data *pdata;
Evas_Pointer_Seat *pseat;
@@ -1491,17 +1523,23 @@ _evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer)
EINA_INLIST_FOREACH(pseat->pointers, pdata)
if (pdata->pointer == pointer)
{
- pseat->pointers = eina_inlist_remove(pseat->pointers, EINA_INLIST_GET(pdata));
- free(pdata);
+ if (!nofree)
+ {
+ pseat->pointers = eina_inlist_remove(pseat->pointers, EINA_INLIST_GET(pdata));
+ free(pdata);
+ }
hit = pseat;
break;
}
}
EINA_SAFETY_ON_NULL_RETURN(hit);
if (hit->pointers) return;
- eina_list_free(hit->object.in);
- edata->seats = eina_inlist_remove(edata->seats, EINA_INLIST_GET(hit));
- free(hit);
+ hit->object.in = eina_list_free(hit->object.in);
+ if (!nofree)
+ {
+ edata->seats = eina_inlist_remove(edata->seats, EINA_INLIST_GET(hit));
+ free(hit);
+ }
}
Eina_List *
@@ -1568,7 +1606,7 @@ _efl_canvas_iterator_free(Efl_Canvas_Iterator *it)
free(it);
}
-EAPI Eina_Iterator *
+EVAS_API Eina_Iterator *
efl_canvas_iterator_create(Eo *obj, Eina_Iterator *real_iterator, Eina_List *list)
{
Efl_Canvas_Iterator *it;
@@ -1624,14 +1662,14 @@ _evas_canvas_efl_canvas_scene_object_top_at_xy_get(const Eo *eo_e EINA_UNUSED, E
return NULL;
}
-EAPI Evas_Object*
+EVAS_API Evas_Object*
evas_object_top_at_xy_get(Eo *eo_e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects)
{
Eina_Position2D pos = {x, y};
return efl_canvas_scene_object_top_at_xy_get(eo_e, pos, include_pass_events_objects, include_hidden_objects);
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_top_at_pointer_get(const Evas *eo_e)
{
Evas_Public_Data *e = efl_isa(eo_e, EVAS_CANVAS_CLASS) ?
@@ -1683,7 +1721,7 @@ _evas_canvas_efl_canvas_scene_object_top_in_rectangle_get(const Eo *eo_e EINA_UN
return NULL;
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_top_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects)
{
return efl_canvas_scene_object_top_in_rectangle_get(obj, EINA_RECT(x, y, w, h), include_pass_events_objects, include_hidden_objects);
@@ -1810,7 +1848,7 @@ _evas_canvas_efl_canvas_scene_objects_in_rectangle_get(Eo *eo_e EINA_UNUSED, Eva
return efl_canvas_iterator_create(eo_e, eina_list_iterator_new(l), l);
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_objects_in_rectangle_get(const Evas_Canvas *eo_e, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects)
{
EVAS_LEGACY_API(eo_e, e, NULL);
@@ -1903,7 +1941,7 @@ evas_font_object_rehint(Evas_Object *eo_obj)
}
}
-EAPI void
+EVAS_API void
evas_font_hinting_set(Eo *eo_e, Evas_Font_Hinting_Flags hinting)
{
Evas_Layer *lay;
@@ -1922,14 +1960,14 @@ evas_font_hinting_set(Eo *eo_e, Evas_Font_Hinting_Flags hinting)
}
}
-EAPI Evas_Font_Hinting_Flags
+EVAS_API Evas_Font_Hinting_Flags
evas_font_hinting_get(const Evas *eo_e)
{
EVAS_LEGACY_API(eo_e, e, EVAS_FONT_HINTING_NONE);
return e->hinting;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_font_hinting_can_hint(const Evas *eo_e, Evas_Font_Hinting_Flags hinting)
{
EVAS_LEGACY_API(eo_e, e, EINA_FALSE);
@@ -1939,7 +1977,7 @@ evas_font_hinting_can_hint(const Evas *eo_e, Evas_Font_Hinting_Flags hinting)
else return EINA_FALSE;
}
-EAPI void
+EVAS_API void
evas_font_available_list_free(Evas *eo_e, Eina_List *available)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1954,7 +1992,7 @@ _evas_canvas_efl_canvas_scene_group_objects_calculate(Eo *eo_e, Evas_Public_Data
evas_call_smarts_calculate(eo_e);
}
-EAPI void
+EVAS_API void
evas_smart_objects_calculate(Eo *eo_e)
{
EVAS_TYPE_CHECK(eo_e);
@@ -1967,7 +2005,7 @@ _evas_canvas_efl_canvas_scene_group_objects_calculating_get(const Eo *eo_e EINA_
return !!e->in_smart_calc;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_smart_objects_calculating_get(const Eo *obj)
{
EVAS_TYPE_CHECK(obj, EINA_FALSE);
@@ -1979,23 +2017,23 @@ _evas_canvas_smart_objects_calculate_count_get(const Eo *eo_e EINA_UNUSED, Evas_
{
return e->smart_calc_count;
}
-/* Legacy EAPI */
+/* Legacy EVAS_API */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_pointer_inside_get(const Evas *obj)
{
EVAS_TYPE_CHECK(obj, EINA_FALSE);
return efl_canvas_pointer_inside_get(obj, NULL);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_pointer_inside_by_device_get(const Evas *obj, Eo *dev)
{
EVAS_TYPE_CHECK(obj, EINA_FALSE);
return efl_canvas_pointer_inside_get(obj, dev);
}
-EAPI Eina_List*
+EVAS_API Eina_List*
evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects)
{
EVAS_TYPE_CHECK(eo_e, NULL);
@@ -2003,13 +2041,13 @@ evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_obj
}
/* Internal EO APIs */
-EWAPI const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_PRE =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_PRE =
EFL_EVENT_DESCRIPTION("render,flush,pre");
-EWAPI const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_POST =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EVAS_CANVAS_EVENT_RENDER_FLUSH_POST =
EFL_EVENT_DESCRIPTION("render,flush,post");
-EWAPI const Efl_Event_Description _EVAS_CANVAS_EVENT_AXIS_UPDATE =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EVAS_CANVAS_EVENT_AXIS_UPDATE =
EFL_EVENT_DESCRIPTION("axis,update");
-EWAPI const Efl_Event_Description _EVAS_CANVAS_EVENT_VIEWPORT_RESIZE =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EVAS_CANVAS_EVENT_VIEWPORT_RESIZE =
EFL_EVENT_DESCRIPTION("viewport,resize");
#define CHECK_ADD(var, ev, member) \
diff --git a/src/lib/evas/canvas/evas_map.c b/src/lib/evas/canvas/evas_map.c
index 0ac75c7a07..4669595c7c 100644
--- a/src/lib/evas/canvas/evas_map.c
+++ b/src/lib/evas/canvas/evas_map.c
@@ -38,7 +38,7 @@ _evas_map_calc_map_geometry(Evas_Object *eo_obj)
if (obj->map->prev.map->count == obj->map->cur.map->count)
{
const Evas_Map_Point *p2;
-
+
p = obj->map->cur.map->points;
p2 = obj->map->prev.map->points;
if (memcmp(p, p2, sizeof(Evas_Map_Point) *
@@ -48,7 +48,7 @@ _evas_map_calc_map_geometry(Evas_Object *eo_obj)
{
EINA_COW_WRITE_BEGIN(evas_object_map_cow, obj->map, Evas_Object_Map_Data, map_write)
{
- if (map_write->cache_map) evas_map_free(map_write->cache_map);
+ if (map_write->cache_map) evas_map_free(map_write->cache_map);
map_write->cache_map = map_write->cur.map;
map_write->cur.map = map_write->prev.map;
}
@@ -61,7 +61,7 @@ _evas_map_calc_map_geometry(Evas_Object *eo_obj)
}
else
ch = EINA_TRUE;
-
+
p = obj->map->cur.map->points;
p_end = p + obj->map->cur.map->count;
x1 = x2 = lround(p->x);
@@ -70,7 +70,7 @@ _evas_map_calc_map_geometry(Evas_Object *eo_obj)
for (; p < p_end; p++)
{
Evas_Coord x, y;
-
+
x = lround(p->x);
y = lround(p->y);
if (x < x1) x1 = x;
@@ -78,7 +78,7 @@ _evas_map_calc_map_geometry(Evas_Object *eo_obj)
if (y < yy1) yy1 = y;
if (y > yy2) yy2 = y;
}
-// this causes clip-out bugs now mapped objs canbe opaque!!!
+// this causes clip-out bugs now mapped objs canbe opaque!!!
// // add 1 pixel of fuzz around the map region to ensure updates are correct
// x1 -= 1; yy1 -= 1;
// x2 += 1; yy2 += 1;
@@ -238,13 +238,13 @@ _evas_map_free(Evas_Object *eo_obj, Evas_Map *m)
map_write->spans = NULL;
}
EINA_COW_WRITE_END(evas_object_map_cow, obj->map, map_write);
- }
+ }
}
m->magic = 0;
free(m);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_map_coords_get(const Evas_Map *m, double x, double y,
double *mx, double *my, int grab)
{
@@ -512,7 +512,7 @@ _evas_object_map_enable_set(Eo *eo_obj, Evas_Object_Protected_Data *obj,
}
}
-EAPI void
+EVAS_API void
evas_object_map_enable_set(Eo *eo_obj, Eina_Bool enabled)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
@@ -520,7 +520,7 @@ evas_object_map_enable_set(Eo *eo_obj, Eina_Bool enabled)
_evas_object_map_enable_set(eo_obj, obj, enabled);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_map_enable_get(const Eo *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, EINA_FALSE);
@@ -528,7 +528,7 @@ evas_object_map_enable_get(const Eo *eo_obj)
return obj->map->cur.usemap;
}
-EAPI void
+EVAS_API void
evas_object_map_set(Evas_Object *eo_obj, const Evas_Map *map)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
@@ -552,7 +552,7 @@ evas_object_map_set(Evas_Object *eo_obj, const Evas_Map *map)
return;
}
/* changed_pchange means map's change.
- * This flag will be used to decide whether to redraw the map surface.
+ * This flag will be used to decide whether to redraw the map surface.
* And value of flag would be EINA_FALSE after rendering. */
obj->changed_pchange = EINA_TRUE;
@@ -645,7 +645,7 @@ evas_object_map_set(Evas_Object *eo_obj, const Evas_Map *map)
_evas_map_calc_map_geometry(eo_obj);
}
-EAPI const Evas_Map *
+EVAS_API const Evas_Map *
evas_object_map_get(const Evas_Object *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN((Eo *) eo_obj, NULL);
@@ -654,7 +654,7 @@ evas_object_map_get(const Evas_Object *eo_obj)
return obj->map->cur.map;
}
-EAPI Evas_Map *
+EVAS_API Evas_Map *
evas_map_new(int count)
{
if ((count <= 0) || (count % 4 != 0))
@@ -666,7 +666,7 @@ evas_map_new(int count)
return _evas_map_new(count, EINA_FALSE);
}
-EAPI void
+EVAS_API void
evas_map_smooth_set(Evas_Map *m, Eina_Bool enabled)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -676,7 +676,7 @@ evas_map_smooth_set(Evas_Map *m, Eina_Bool enabled)
m->smooth = enabled;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_map_smooth_get(const Evas_Map *m)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -686,7 +686,7 @@ evas_map_smooth_get(const Evas_Map *m)
return m->smooth;
}
-EAPI void
+EVAS_API void
evas_map_alpha_set(Evas_Map *m, Eina_Bool enabled)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -696,7 +696,7 @@ evas_map_alpha_set(Evas_Map *m, Eina_Bool enabled)
m->alpha = enabled;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_map_alpha_get(const Evas_Map *m)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -706,7 +706,7 @@ evas_map_alpha_get(const Evas_Map *m)
return m->alpha;
}
-EAPI void
+EVAS_API void
evas_map_util_object_move_sync_set(Evas_Map *m, Eina_Bool enabled)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -721,7 +721,7 @@ evas_map_util_object_move_sync_set(Evas_Map *m, Eina_Bool enabled)
m->move_sync.enabled = !!enabled;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_map_util_object_move_sync_get(const Evas_Map *m)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -731,7 +731,7 @@ evas_map_util_object_move_sync_get(const Evas_Map *m)
return m->move_sync.enabled;
}
-EAPI Evas_Map *
+EVAS_API Evas_Map *
evas_map_dup(const Evas_Map *m)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -741,14 +741,14 @@ evas_map_dup(const Evas_Map *m)
return _evas_map_dup(m);
}
-EAPI void
+EVAS_API void
evas_map_free(Evas_Map *m)
{
if (!m) return;
_evas_map_free(NULL, m);
}
-EAPI int
+EVAS_API int
evas_map_count_get(const Evas_Map *m)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -762,7 +762,7 @@ evas_map_count_get(const Evas_Map *m)
Rotation center position will be flickered by rounding problem.
Now fixed in EO APIs.
*/
-EAPI void
+EVAS_API void
evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x, Evas_Coord y, Evas_Coord z)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -772,7 +772,7 @@ evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x, Evas_Coord y, Evas_
_map_point_coord_set(m, idx, x, y, z);
}
-EAPI void
+EVAS_API void
evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z)
{
double dx, dy, dz;
@@ -783,7 +783,7 @@ evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *
if (z) *z = lround(dz);
}
-EAPI void
+EVAS_API void
evas_map_point_image_uv_set(Evas_Map *m, int idx, double u, double v)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -798,7 +798,7 @@ evas_map_point_image_uv_set(Evas_Map *m, int idx, double u, double v)
p->v = v;
}
-EAPI void
+EVAS_API void
evas_map_point_image_uv_get(const Evas_Map *m, int idx, double *u, double *v)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -818,7 +818,7 @@ evas_map_point_image_uv_get(const Evas_Map *m, int idx, double *u, double *v)
if (v) *v = 0.0;
}
-EAPI void
+EVAS_API void
evas_map_point_color_set(Evas_Map *m, int idx, int r, int g, int b, int a)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -835,7 +835,7 @@ evas_map_point_color_set(Evas_Map *m, int idx, int r, int g, int b, int a)
p->a = a;
}
-EAPI void
+EVAS_API void
evas_map_point_color_get(const Evas_Map *m, int idx, int *r, int *g, int *b, int *a)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -859,7 +859,7 @@ error:
if (a) *a = 255;
}
-EAPI void
+EVAS_API void
evas_map_util_points_populate_from_object_full(Evas_Map *m, const Evas_Object *eo_obj, Evas_Coord z)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -881,7 +881,7 @@ evas_map_util_points_populate_from_object_full(Evas_Map *m, const Evas_Object *e
obj->cur->geometry.w, obj->cur->geometry.h, z);
}
-EAPI void
+EVAS_API void
evas_map_util_points_populate_from_object(Evas_Map *m, const Evas_Object *eo_obj)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -903,7 +903,7 @@ evas_map_util_points_populate_from_object(Evas_Map *m, const Evas_Object *eo_obj
obj->cur->geometry.w, obj->cur->geometry.h, 0);
}
-EAPI void
+EVAS_API void
evas_map_util_points_populate_from_geometry(Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Evas_Coord z)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -918,7 +918,7 @@ evas_map_util_points_populate_from_geometry(Evas_Map *m, Evas_Coord x, Evas_Coor
_evas_map_util_points_populate(m, x, y, w, h, z);
}
-EAPI void
+EVAS_API void
evas_map_util_points_color_set(Evas_Map *m, int r, int g, int b, int a)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -964,7 +964,7 @@ _map_util_rotate(Evas_Map *m, double degrees, double cx, double cy)
}
}
-EAPI void
+EVAS_API void
evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -997,7 +997,7 @@ _map_util_zoom(Evas_Map *m, double zoomx, double zoomy, double cx, double cy)
}
}
-EAPI void
+EVAS_API void
evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
@@ -1073,7 +1073,7 @@ _map_util_3d_rotate(Evas_Map *m, double dx, double dy, double dz,
}
}
-EAPI void
+EVAS_API void
evas_map_util_3d_rotate(Evas_Map *m, double dx, double dy, double dz,
Evas_Coord cx, Evas_Coord cy, Evas_Coord cz)
{
@@ -1125,7 +1125,7 @@ _map_util_quat_rotate(Evas_Map *m, double qx, double qy, double qz,
}
}
-EAPI void
+EVAS_API void
evas_map_util_quat_rotate(Evas_Map *m, double qx, double qy, double qz,
double qw, double cx, double cy, double cz)
{
@@ -1211,7 +1211,7 @@ _map_util_3d_lighting(Evas_Map *m,
}
}
-EAPI void
+EVAS_API void
evas_map_util_3d_lighting(Evas_Map *m,
Evas_Coord lx, Evas_Coord ly, Evas_Coord lz,
int lr, int lg, int lb, int ar, int ag, int ab)
@@ -1259,7 +1259,7 @@ _map_util_3d_perspective(Evas_Map *m, double px, double py, double z0, double fo
}
}
-EAPI void
+EVAS_API void
evas_map_util_3d_perspective(Evas_Map *m,
Evas_Coord px, Evas_Coord py,
Evas_Coord z0, Evas_Coord foc)
@@ -1271,7 +1271,7 @@ evas_map_util_3d_perspective(Evas_Map *m,
_map_util_3d_perspective(m, (double) px, (double) py, (double) z0, (double) foc);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_map_util_clockwise_get(Evas_Map *m)
{
MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
diff --git a/src/lib/evas/canvas/evas_name.c b/src/lib/evas/canvas/evas_name.c
index 7c432e84d1..4ebf604cfc 100644
--- a/src/lib/evas/canvas/evas_name.c
+++ b/src/lib/evas/canvas/evas_name.c
@@ -1,7 +1,7 @@
#include "evas_common_private.h"
#include "evas_private.h"
-EAPI void
+EVAS_API void
evas_object_name_set(Evas_Object *eo_obj, const char *name)
{
Evas_Object_Protected_Data *obj = efl_isa(eo_obj, EFL_CANVAS_OBJECT_CLASS) ?
@@ -22,7 +22,7 @@ evas_object_name_set(Evas_Object *eo_obj, const char *name)
}
}
-EAPI const char *
+EVAS_API const char *
evas_object_name_get(const Evas_Object *eo_obj)
{
Evas_Object_Protected_Data *obj = efl_isa(eo_obj, EFL_CANVAS_OBJECT_CLASS) ?
@@ -60,7 +60,7 @@ _priv_evas_object_name_child_find(const Evas_Object *eo_obj, const char *name, i
return NULL;
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_name_child_find(const Evas_Object *eo_obj, const char *name, int recurse)
{
return (!name ? NULL : _priv_evas_object_name_child_find(eo_obj, name, recurse));
@@ -74,7 +74,11 @@ _efl_canvas_object_efl_object_debug_name_override(Eo *eo_obj, Evas_Object_Protec
const char *clip = obj->clip.clipees ? ":clipper" : "";
efl_debug_name_override(efl_super(eo_obj, EFL_CANVAS_OBJECT_CLASS), sb);
- if (obj->cur->visible)
+ if (!obj->cur)
+ {
+ eina_strbuf_append_printf(sb, ":nostate");
+ }
+ else if (obj->cur->visible)
{
eina_strbuf_append_printf(sb, "%s%s:(%d,%d %dx%d)", norend, clip,
obj->cur->geometry.x, obj->cur->geometry.y,
diff --git a/src/lib/evas/canvas/evas_object_box.c b/src/lib/evas/canvas/evas_object_box.c
index 7a7173eb25..ca6a822360 100644
--- a/src/lib/evas/canvas/evas_object_box.c
+++ b/src/lib/evas/canvas/evas_object_box.c
@@ -334,7 +334,7 @@ _evas_box_internal_insert_at(Eo *o, Evas_Object_Box_Data *priv, Evas_Object *chi
return new_opt;
}
}
- return NULL;
+ return NULL;
}
EOLIAN static Evas_Object *
@@ -390,7 +390,7 @@ _evas_box_efl_canvas_group_group_add(Eo *eo_obj, Evas_Object_Box_Data *priv)
Evas_Object_Smart_Clipped_Data *cso;
efl_canvas_group_add(efl_super(eo_obj, MY_CLASS));
-
+
evas_object_event_callback_add
(eo_obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _on_hints_changed, eo_obj);
priv->children = NULL;
@@ -412,18 +412,16 @@ _evas_box_efl_canvas_group_group_add(Eo *eo_obj, Evas_Object_Box_Data *priv)
EOLIAN static void
_evas_box_efl_canvas_group_group_del(Eo *o, Evas_Object_Box_Data *priv)
{
- Eina_List *l;
-
- l = priv->children;
- while (l)
+ while (priv->children)
{
- Evas_Object_Box_Option *opt = l->data;
+ Evas_Object_Box_Option *opt = eina_list_data_get(priv->children);
_evas_object_box_child_callbacks_unregister(opt->obj, o);
evas_obj_box_internal_option_free(o, opt);
- l = eina_list_remove_list(l, l);
+ priv->children = eina_list_remove_list(priv->children, priv->children);
}
+
if (priv->layout.data && priv->layout.free_data)
priv->layout.free_data(priv->layout.data);
@@ -447,7 +445,9 @@ _evas_box_efl_gfx_entity_position_set(Eo *o, Evas_Object_Box_Data *_pd EINA_UNUS
if (_evas_object_intercept_call(o, EVAS_OBJECT_INTERCEPT_CB_MOVE , 0, pos.x, pos.y))
return;
- efl_gfx_entity_position_set(cso->clipper, pos);
+ if (!evas_object_static_clip_get(cso->clipper))
+ efl_gfx_entity_position_set(cso->clipper, pos);
+
/* this skips the call to _evas_object_smart_clipped_smart_move_internal
* since box internals will automatically recalc all the child positions
* at a later point
@@ -477,7 +477,7 @@ _evas_box_efl_canvas_group_group_calculate(Eo *o, Evas_Object_Box_Data *priv)
ERR("No layout function set for %p box.", o);
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_box_add(Evas *evas)
{
evas = evas_find(evas);
@@ -509,13 +509,13 @@ _evas_box_add_to(Eo *parent, Evas_Object_Box_Data *_pd EINA_UNUSED)
return o;
}
-EAPI void
+EVAS_API void
evas_object_box_smart_set(Evas_Object_Box_Api *api EINA_UNUSED)
{
return;
}
-EAPI const Evas_Object_Box_Api *
+EVAS_API const Evas_Object_Box_Api *
evas_object_box_smart_class_get(void)
{
return NULL;
@@ -1880,7 +1880,7 @@ EOLIAN static Eina_Iterator*
_evas_box_iterator_new(const Eo *o, Evas_Object_Box_Data *priv)
{
Evas_Object_Box_Iterator *it;
-
+
if (!priv->children) return NULL;
it = calloc(1, sizeof(Evas_Object_Box_Iterator));
@@ -1920,7 +1920,7 @@ _evas_box_accessor_new(const Eo *o, Evas_Object_Box_Data *priv)
return &it->accessor;
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_object_box_children_get(const Evas_Object *o)
{
Eina_List *new_list = NULL, *l;
@@ -1953,7 +1953,7 @@ _evas_box_option_property_id_get(const Eo *o EINA_UNUSED, Evas_Object_Box_Data *
return -1;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_box_option_property_set(Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...)
{
Eina_Bool ret;
@@ -1967,7 +1967,7 @@ evas_object_box_option_property_set(Evas_Object *o, Evas_Object_Box_Option *opt,
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_box_option_property_vset(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args)
{
return evas_obj_box_option_property_vset(o, opt, property, (va_list *) &args);
@@ -1979,7 +1979,7 @@ _evas_box_option_property_vset(Eo *o EINA_UNUSED, Evas_Object_Box_Data *_pd EINA
return EINA_FALSE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_box_option_property_get(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...)
{
Eina_Bool ret;
@@ -1992,7 +1992,7 @@ evas_object_box_option_property_get(const Evas_Object *o, Evas_Object_Box_Option
return ret;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_box_option_property_vget(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args)
{
return evas_obj_box_option_property_vget((Eo *)o, opt, property, (va_list *) &args);
diff --git a/src/lib/evas/canvas/evas_object_grid.c b/src/lib/evas/canvas/evas_object_grid.c
index 5dd69e10a9..6509b0762c 100644
--- a/src/lib/evas/canvas/evas_object_grid.c
+++ b/src/lib/evas/canvas/evas_object_grid.c
@@ -176,17 +176,20 @@ static void
_evas_object_grid_smart_del(Evas_Object *o)
{
EVAS_OBJECT_GRID_DATA_GET(o, priv);
- Eina_List *l;
- l = priv->children;
- while (l)
+ while (priv->children)
{
- Evas_Object_Grid_Option *opt = l->data;
- _evas_object_grid_child_disconnect(o, opt->obj);
- _evas_object_grid_option_del(opt->obj);
- free(opt);
- l = eina_list_remove_list(l, l);
+ Evas_Object_Grid_Option *opt = priv->children->data;
+ _evas_object_grid_child_disconnect(o, opt->obj);
+ _evas_object_grid_option_del(opt->obj);
+ free(opt);
+ priv->children = eina_list_remove_list(priv->children, priv->children);
}
+ //Free the clipper resource properly,
+ Eo *clipper = evas_object_smart_clipped_clipper_get(o);
+ if (clipper) evas_object_del(clipper);
+ /* below deletion occurs the recursive member remove hell. */
+ // _evas_object_grid_parent_sc->del(o);
}
static void
@@ -270,7 +273,7 @@ _evas_object_grid_smart_set_user(Evas_Smart_Class *sc)
sc->calculate = _evas_object_grid_smart_calculate;
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_grid_add(Evas *evas)
{
evas = evas_find(evas);
@@ -350,7 +353,7 @@ _evas_grid_pack(Eo *o, Evas_Grid_Data *priv, Evas_Object *child, int x, int y, i
}
// FIXME: we could keep a changed list
evas_object_smart_changed(o);
-
+
return EINA_TRUE;
}
@@ -383,7 +386,7 @@ _evas_grid_unpack(Eo *o, Evas_Grid_Data *priv, Evas_Object *child)
_evas_object_grid_remove_opt(priv, opt);
evas_object_smart_member_del(child);
free(opt);
-
+
return EINA_TRUE;
}
@@ -495,13 +498,13 @@ _evas_grid_efl_ui_i18n_mirrored_set(Eo *o EINA_UNUSED, Evas_Grid_Data *priv, Ein
}
}
-EAPI void
+EVAS_API void
evas_object_grid_mirrored_set(Evas_Grid *obj, Eina_Bool mirrored)
{
efl_ui_mirrored_set(obj, mirrored);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_grid_mirrored_get(const Evas_Grid *obj)
{
return efl_ui_mirrored_get(obj);
diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c
index fa3a4a8462..84e08fcce1 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -96,7 +96,7 @@ static const Evas_Object_Image_State default_state = {
{ 0, 0, 0 }, // image
{ 1.0, 0, 0, 0, 0, 1 }, // border
{ { NULL, 0, 0 }, { NULL, 0, 0 } },
- NULL, NULL, NULL, //source, defmap, scene
+ NULL, NULL, //source, defmap
NULL, //f
NULL, //key
0, //frame
@@ -171,7 +171,6 @@ _evas_image_cleanup(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_I
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj, EINA_FALSE);
}
if (o->cur->source) _evas_image_proxy_unset(eo_obj, obj, o);
- if (o->cur->scene) _evas_image_3d_unset(eo_obj, obj, o);
}
static Eina_Bool
@@ -252,7 +251,6 @@ _evas_image_init_set(const Eina_File *f, const char *key,
Evas_Image_Load_Opts *lo)
{
if (o->cur->source) _evas_image_proxy_unset(eo_obj, obj, o);
- if (o->cur->scene) _evas_image_3d_unset(eo_obj, obj, o);
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
{
@@ -286,8 +284,8 @@ _evas_image_init_set(const Eina_File *f, const char *key,
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj, EINA_FALSE);
}
ENFN->image_free(ENC, o->engine_data);
+ o->engine_data = NULL;
}
- o->engine_data = NULL;
o->load_error = EFL_GFX_IMAGE_LOAD_ERROR_NONE;
if (!lo) return;
lo->emile.scale_down_by = o->load_opts->scale_down_by;
@@ -1033,22 +1031,15 @@ _efl_canvas_image_internal_efl_gfx_image_image_size_get(const Eo *eo_obj EINA_UN
}
EOLIAN static Eina_Size2D
-_efl_canvas_image_internal_efl_gfx_view_view_size_get(const Eo *eo_obj, Evas_Image_Data *o)
+_efl_canvas_image_internal_efl_gfx_view_view_size_get(const Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
{
int uvw, uvh;
Evas_Object_Protected_Data *source = NULL;
- Evas_Object_Protected_Data *obj;
- obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
if (o->cur->source)
source = efl_data_scope_get(o->cur->source, EFL_CANVAS_OBJECT_CLASS);
- if (o->cur->scene)
- {
- uvw = obj->data_3d->w;
- uvh = obj->data_3d->h;
- }
- else if (!o->cur->source)
+ if (!o->cur->source)
{
uvw = o->cur->image.w;
uvh = o->cur->image.h;
@@ -1151,6 +1142,10 @@ _efl_canvas_image_internal_efl_gfx_buffer_alpha_set(Eo *eo_obj, Evas_Image_Data
{
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ has_alpha = !!has_alpha;
+ if (has_alpha == o->cur->has_alpha)
+ return;
+
evas_object_async_block(obj);
if ((o->preload & EVAS_IMAGE_PRELOADING) && (o->engine_data))
{
@@ -1158,10 +1153,6 @@ _efl_canvas_image_internal_efl_gfx_buffer_alpha_set(Eo *eo_obj, Evas_Image_Data
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj, EINA_TRUE);
}
- has_alpha = !!has_alpha;
- if (has_alpha == o->cur->has_alpha)
- return;
-
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
{
state_write->has_alpha = has_alpha;
@@ -1727,18 +1718,11 @@ evas_object_image_free(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
}
if (o->cur->source)
{
- if (o->cur->source) _evas_image_proxy_unset(eo_obj, obj, o);
+ _evas_image_proxy_unset(eo_obj, obj, o);
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
state_write->source = NULL;
EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
}
- if (o->cur->scene)
- {
- if (o->cur->scene) _evas_image_3d_unset(eo_obj, obj, o);
- EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
- state_write->scene = NULL;
- EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
- }
if (o->cur->f)
{
eina_file_close(o->cur->f); // close matching open (dup in _evas_image_init_set) OK
@@ -2044,7 +2028,8 @@ _efl_canvas_image_internal_efl_canvas_filter_internal_filter_input_render(
H = obj->cur->geometry.h;
// FIXME: In GL we could use the image even if scaled
- if (!_image_has_border(obj, o) && _image_is_filled(obj, o) && !_image_is_scaled(obj, o))
+ if (!(ENFN->image_native_get && ENFN->image_native_get(engine, o->engine_data)) &&
+ !_image_has_border(obj, o) && _image_is_filled(obj, o) && !_image_is_scaled(obj, o))
{
int imagew, imageh, uvw, uvh;
@@ -2301,6 +2286,8 @@ _evas_image_pixels_get(Eo *eo_obj, Evas_Object_Protected_Data *obj,
if (filtered && o->has_filter)
pixels = evas_filter_output_buffer_get(eo_obj);
+ else
+ needs_post_render = EINA_FALSE;
if (!pixels && o->cur->source)
{
@@ -2315,15 +2302,6 @@ _evas_image_pixels_get(Eo *eo_obj, Evas_Object_Protected_Data *obj,
*uvw = *imagew;
*uvh = *imageh;
}
- else if (o->cur->scene)
- {
- _evas_image_3d_render(obj->layer->evas->evas, eo_obj, obj, o, o->cur->scene, engine, output);
- pixels = obj->data_3d->surface;
- *imagew = obj->data_3d->w;
- *imageh = obj->data_3d->h;
- *uvw = *imagew;
- *uvh = *imageh;
- }
else if (obj->cur->snapshot)
{
pixels = o->engine_data;
@@ -2353,7 +2331,8 @@ _evas_image_pixels_get(Eo *eo_obj, Evas_Object_Protected_Data *obj,
*uvw = *imagew;
*uvh = *imageh;
}
- else if (oi && oi->engine_data)
+ else if (oi && oi->engine_data &&
+ (!o->cur->source || o->load_opts->region.w == 0 || o->load_opts->region.h == 0))
{
if (oi->has_filter)
pixels = evas_filter_output_buffer_get(source->object);
@@ -2864,18 +2843,6 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
goto done;
}
}
- else if (o->cur->scene)
- {
- Evas_Canvas3D_Scene *scene = o->cur->scene;
- Eina_Bool dirty;
-
- dirty = evas_canvas3d_object_dirty_get(scene, EVAS_CANVAS3D_STATE_ANY);
- if (dirty)
- {
- evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj, obj);
- goto done;
- }
- }
/* now figure what changed and add draw rects */
/* if it just became visible or invisible */
@@ -3289,7 +3256,7 @@ evas_object_image_render_post(Evas_Object *eo_obj EINA_UNUSED,
/* FIXME: copy strings across */
//Somehow(preloading cancelled) image has been changed, need to redraw.
- if (o->changed) evas_object_change(eo_obj, obj);
+ if (o->changed) evas_render_post_change_object_push(obj);
}
static void *
@@ -3547,6 +3514,9 @@ evas_object_image_is_inside(Evas_Object *eo_obj,
o->pixels->func.get_pixels(o->pixels->func.get_pixels_data, eo_obj);
if (ENFN->gl_get_pixels_post)
ENFN->gl_get_pixels_post(ENC, output);
+ pixels = _evas_image_pixels_get(eo_obj, obj, ENC, output, NULL, NULL, 0, 0,
+ &imagew, &imageh, &uvw, &uvh, EINA_TRUE, EINA_FALSE);
+ if (!pixels) return is_inside;
}
}
diff --git a/src/lib/evas/canvas/evas_object_inform.c b/src/lib/evas/canvas/evas_object_inform.c
index ef5ee4051f..b1a54f9f50 100644
--- a/src/lib/evas/canvas/evas_object_inform.c
+++ b/src/lib/evas/canvas/evas_object_inform.c
@@ -3,13 +3,13 @@
#include "evas_private.h"
/* BEGIN: events to maintain compatibility with legacy */
-EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_SHOW =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_SHOW =
EFL_EVENT_DESCRIPTION("show");
-EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_HIDE =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_HIDE =
EFL_EVENT_DESCRIPTION("hide");
-EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_PRELOAD =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_PRELOAD =
EFL_EVENT_DESCRIPTION("preload");
-EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_UNLOAD =
+EVAS_API EVAS_API_WEAK const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_UNLOAD =
EFL_EVENT_DESCRIPTION("unload");
/* END: events to maintain compatibility with legacy */
diff --git a/src/lib/evas/canvas/evas_object_intercept.c b/src/lib/evas/canvas/evas_object_intercept.c
index 9911a5b1f3..53eb6af75d 100644
--- a/src/lib/evas/canvas/evas_object_intercept.c
+++ b/src/lib/evas/canvas/evas_object_intercept.c
@@ -9,22 +9,21 @@
/* local calls */
-static void evas_object_intercept_init(Evas_Object *eo_obj);
-static void evas_object_intercept_deinit(Evas_Object *eo_obj);
+static void evas_object_intercept_init(Evas_Object_Protected_Data *obj);
+static void evas_object_intercept_deinit(Evas_Object_Protected_Data *obj);
static void
-evas_object_intercept_init(Evas_Object *eo_obj)
+evas_object_intercept_init(Evas_Object_Protected_Data *obj)
{
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ if (!obj) return;
if (!obj->interceptors)
obj->interceptors = calloc(1, sizeof(Evas_Intercept_Func));
}
static void
-evas_object_intercept_deinit(Evas_Object *eo_obj)
+evas_object_intercept_deinit(Evas_Object_Protected_Data *obj)
{
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
- if (!obj->interceptors) return;
+ if (!obj || !obj->interceptors) return;
if ((obj->interceptors->show.func) ||
(obj->interceptors->hide.func) ||
(obj->interceptors->move.func) ||
@@ -220,7 +219,7 @@ _evas_object_intercept_call_internal(Evas_Object *eo_obj,
/* This is a legacy-only compatibility function.
* Made public for other parts of EFL (elm, ecore_evas).
*/
-EWAPI Eina_Bool
+EVAS_API EVAS_API_WEAK Eina_Bool
_evas_object_intercept_call(Evas_Object *eo_obj, Evas_Object_Intercept_Cb_Type cb_type,
int internal, ...)
{
@@ -257,22 +256,22 @@ _evas_object_intercept_call_evas(Evas_Object_Protected_Data *obj,
/* public calls */
#define EVAS_OBJECT_INTERCEPT_CALLBACK_DEFINE(Up_Type, Lower_Type) \
- EAPI void \
+ EVAS_API void \
evas_object_intercept_##Lower_Type##_callback_add(Evas_Object *eo_obj,\
Evas_Object_Intercept_##Up_Type##_Cb func, const void *data) \
{ \
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ); \
return; \
MAGIC_CHECK_END(); \
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); \
- if (!func) return; \
- evas_object_intercept_init(eo_obj); \
+ Evas_Object_Protected_Data *obj = efl_data_scope_safe_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); \
+ if ((!obj) || (!func)) return; \
+ evas_object_intercept_init(obj); \
if (!obj->interceptors) return; \
obj->interceptors->Lower_Type.func = func; \
obj->interceptors->Lower_Type.data = (void *)data; \
} \
\
- EAPI void * \
+ EVAS_API void * \
evas_object_intercept_##Lower_Type##_callback_del(Evas_Object *eo_obj,\
Evas_Object_Intercept_##Up_Type##_Cb func) \
{ \
@@ -281,13 +280,13 @@ _evas_object_intercept_call_evas(Evas_Object_Protected_Data *obj,
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ); \
return NULL; \
MAGIC_CHECK_END(); \
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); \
- if (!func) return NULL; \
+ Evas_Object_Protected_Data *obj = efl_data_scope_safe_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); \
+ if ((!obj) || (!func)) return NULL; \
if (!obj->interceptors) return NULL; \
obj->interceptors->Lower_Type.func = NULL; \
data = obj->interceptors->Lower_Type.data; \
obj->interceptors->Lower_Type.data = NULL; \
- evas_object_intercept_deinit(eo_obj); \
+ evas_object_intercept_deinit(obj); \
return data; \
}
diff --git a/src/lib/evas/canvas/evas_object_line.c b/src/lib/evas/canvas/evas_object_line.c
index ee085dcc5b..09aee281a9 100644
--- a/src/lib/evas/canvas/evas_object_line.c
+++ b/src/lib/evas/canvas/evas_object_line.c
@@ -84,7 +84,7 @@ static const Evas_Object_Func object_func =
/* the actual api call to add a rect */
/* it has no other api calls as all properties are standard */
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_line_add(Evas *e)
{
e = evas_find(e);
diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c
index 6b78b581e7..e1b5839957 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -13,7 +13,7 @@ EVAS_MEMPOOL(_mp_sh);
/* evas internal stuff */
static const Evas_Object_Proxy_Data default_proxy = {
- NULL, NULL, NULL, 0, 0, NULL, 0, 0, 0, 0
+ NULL, NULL, 0, 0, NULL, 0, 0, 0, 0
};
static const Evas_Object_Map_Data default_map = {
{ NULL, NULL, 0, 0 }, { NULL, NULL, 0, 0 }, NULL, 0, 0, NULL, NULL
@@ -34,7 +34,6 @@ static const Evas_Object_Events_Data default_events = {
Eina_Cow *evas_object_proxy_cow = NULL;
Eina_Cow *evas_object_map_cow = NULL;
Eina_Cow *evas_object_state_cow = NULL;
-Eina_Cow *evas_object_3d_cow = NULL;
Eina_Cow *evas_object_mask_cow = NULL;
Eina_Cow *evas_object_events_cow = NULL;
@@ -49,29 +48,26 @@ typedef struct _Event_Animation
static Eina_Bool
_init_cow(void)
{
- if (evas_object_map_cow && evas_object_proxy_cow && evas_object_state_cow && evas_object_3d_cow) return EINA_TRUE;
+ if (evas_object_map_cow && evas_object_proxy_cow && evas_object_state_cow) return EINA_TRUE;
evas_object_proxy_cow = eina_cow_add("Evas Object Proxy", sizeof (Evas_Object_Proxy_Data), 8, &default_proxy, EINA_TRUE);
evas_object_map_cow = eina_cow_add("Evas Object Map", sizeof (Evas_Object_Map_Data), 8, &default_map, EINA_TRUE);
evas_object_state_cow = eina_cow_add("Evas Object State", sizeof (Evas_Object_Protected_State), 64, &default_state, EINA_FALSE);
- evas_object_3d_cow = eina_cow_add("Evas Object 3D", sizeof (Evas_Object_3D_Data), 8, &default_proxy, EINA_TRUE);
evas_object_mask_cow = eina_cow_add("Evas Mask Data", sizeof (Evas_Object_Mask_Data), 8, &default_mask, EINA_TRUE);
evas_object_events_cow = eina_cow_add("Evas Events Data", sizeof (Evas_Object_Events_Data), 8, &default_events, EINA_TRUE);
if (!(evas_object_map_cow && evas_object_proxy_cow && evas_object_state_cow &&
- evas_object_3d_cow && evas_object_mask_cow && evas_object_events_cow))
+ evas_object_mask_cow && evas_object_events_cow))
{
eina_cow_del(evas_object_proxy_cow);
eina_cow_del(evas_object_map_cow);
eina_cow_del(evas_object_state_cow);
- eina_cow_del(evas_object_3d_cow);
eina_cow_del(evas_object_mask_cow);
eina_cow_del(evas_object_events_cow);
evas_object_proxy_cow = NULL;
evas_object_map_cow = NULL;
evas_object_state_cow = NULL;
- evas_object_3d_cow = NULL;
evas_object_mask_cow = NULL;
evas_object_events_cow = NULL;
@@ -135,7 +131,7 @@ evas_object_pointer_grab_del(Evas_Object_Protected_Data *obj,
if (obj->proxy->is_proxy && obj->proxy->src_events)
_evas_object_proxy_grab_del(obj, pdata);
}
- if (obj->events->pointer_grabs)
+ if ((obj->events) && (obj->events->pointer_grabs))
{
EINA_COW_WRITE_BEGIN(evas_object_events_cow, obj->events, Evas_Object_Events_Data, events)
events->pointer_grabs = eina_inlist_remove(events->pointer_grabs, EINA_INLIST_GET(pdata));
@@ -171,6 +167,8 @@ _evas_object_pointer_data_get(Evas_Pointer_Data *evas_pdata,
{
Evas_Object_Pointer_Data *pdata;
+ if (!obj) return NULL;
+
pdata = evas_object_pointer_data_find(obj, evas_pdata->pointer);
//The pointer does not exist yet - create one.
@@ -204,7 +202,6 @@ _efl_canvas_object_efl_object_constructor(Eo *eo_obj, Evas_Object_Protected_Data
obj->map = eina_cow_alloc(evas_object_map_cow);
obj->cur = eina_cow_alloc(evas_object_state_cow);
obj->prev = eina_cow_alloc(evas_object_state_cow);
- obj->data_3d = eina_cow_alloc(evas_object_3d_cow);
obj->mask = eina_cow_alloc(evas_object_mask_cow);
obj->events = eina_cow_alloc(evas_object_events_cow);
@@ -242,15 +239,6 @@ end:
return efl_finalize(efl_super(eo_obj, MY_CLASS));
}
-EOLIAN const Efl_Canvas_Gesture_Manager *
-_efl_canvas_object_gesture_manager_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *pd)
-{
- if (!pd->layer || !pd->layer->evas)
- return NULL;
-
- return (pd->layer->evas)->gesture_manager;
-}
-
void
evas_object_change_reset(Evas_Object_Protected_Data *obj)
{
@@ -526,7 +514,6 @@ evas_object_free(Evas_Object_Protected_Data *obj, Eina_Bool clean_layer)
eina_cow_free(evas_object_map_cow, (const Eina_Cow_Data**) &obj->map);
eina_cow_free(evas_object_state_cow, (const Eina_Cow_Data**) &obj->cur);
eina_cow_free(evas_object_state_cow, (const Eina_Cow_Data**) &obj->prev);
- eina_cow_free(evas_object_3d_cow, (const Eina_Cow_Data**) &obj->data_3d);
eina_cow_free(evas_object_mask_cow, (const Eina_Cow_Data**) &obj->mask);
eina_cow_free(evas_object_events_cow, (const Eina_Cow_Data**) &obj->events);
@@ -546,7 +533,6 @@ evas_object_change(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *
Evas_Object_Protected_Data *obj2;
Evas_Object *eo_obj2;
Eina_Bool movch = EINA_FALSE;
- Evas_Canvas3D_Texture *texture;
if ((!obj->layer) || (!obj->layer->evas)) return;
if (obj->layer->evas->nochange) return;
@@ -577,10 +563,6 @@ evas_object_change(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *
if (!obj2) continue;
evas_object_change(eo_obj2, obj2);
}
- EINA_LIST_FOREACH(obj->proxy->proxy_textures, l, texture)
- {
- evas_canvas3d_object_change(texture, EVAS_CANVAS3D_STATE_TEXTURE_DATA, NULL);
- }
if (obj->smart.parent)
{
Evas_Object_Protected_Data *smart_parent = efl_data_scope_get(obj->smart.parent, MY_CLASS);
@@ -899,7 +881,7 @@ evas_object_was_inside(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Eva
}
/* routines apps will call */
-EAPI void
+EVAS_API void
evas_object_ref(Evas_Object *eo_obj)
{
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
@@ -913,7 +895,7 @@ evas_object_ref(Evas_Object *eo_obj)
obj->ref++;
}
-EAPI void
+EVAS_API void
evas_object_unref(Evas_Object *eo_obj)
{
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
@@ -930,7 +912,7 @@ evas_object_unref(Evas_Object *eo_obj)
}
-EAPI int
+EVAS_API int
evas_object_ref_get(const Evas_Object *eo_obj)
{
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
@@ -942,7 +924,7 @@ evas_object_ref_get(const Evas_Object *eo_obj)
return obj->ref;
}
-EAPI void
+EVAS_API void
evas_object_del(Evas_Object *obj)
{
Evas_Object_Protected_Data *pd;
@@ -951,7 +933,7 @@ evas_object_del(Evas_Object *obj)
if (!efl_isa(obj, MY_CLASS))
{
ERR("Called %s on a non-evas object: %s@%p",
- __FUNCTION__, efl_class_name_get(obj), obj);
+ __func__, efl_class_name_get(obj), obj);
return;
}
pd = efl_data_scope_get(obj, MY_CLASS);
@@ -1110,21 +1092,6 @@ _efl_canvas_object_efl_object_invalidate(Eo *eo_obj, Evas_Object_Protected_Data
if (efl_isa(proxy, EFL_GFX_FILTER_INTERFACE))
efl_gfx_filter_source_set(proxy, NULL, eo_obj);
}
-
- /* Eina_Cow has no way to know if we are going to really change something
- or not. So before calling the cow, let's check if we want to do something */
- if (obj->proxy->proxy_textures)
- {
- EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, obj->proxy,
- Evas_Object_Proxy_Data, proxy_src)
- {
- Evas_Canvas3D_Texture *texture;
-
- EINA_LIST_FREE(proxy_src->proxy_textures, texture)
- evas_canvas3d_texture_source_set(texture, NULL);
- }
- EINA_COW_WRITE_END_NOGC(evas_object_proxy_cow, obj->proxy, proxy_src);
- }
}
if (obj->cur)
@@ -1179,7 +1146,7 @@ _efl_canvas_object_efl_object_destructor(Eo *eo_obj, Evas_Object_Protected_Data
end:
evas_object_event_callback_all_del(eo_obj);
evas_object_event_callback_cleanup(eo_obj);
-
+ evas_object_callbacks_shutdown(eo_obj, obj);
efl_destructor(efl_super(eo_obj, MY_CLASS));
}
@@ -1191,7 +1158,7 @@ _efl_canvas_object_efl_gfx_entity_geometry_set(Eo *obj, Evas_Object_Protected_Da
efl_gfx_entity_size_set(obj, EINA_SIZE2D(r.w, r.h));
}
-EAPI void
+EVAS_API void
evas_object_geometry_set(Evas_Object *eo_obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
@@ -1200,7 +1167,7 @@ evas_object_geometry_set(Evas_Object *eo_obj, Evas_Coord x, Evas_Coord y, Evas_C
efl_gfx_entity_geometry_set(eo_obj, EINA_RECT(x, y, w, h));
}
-EAPI void
+EVAS_API void
evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
{
efl_gfx_entity_position_set(obj, EINA_POSITION2D(x, y));
@@ -1265,7 +1232,7 @@ _efl_canvas_object_efl_gfx_entity_position_set(Eo *eo_obj, Evas_Object_Protected
evas_object_inform_call_move(eo_obj, obj);
}
-EAPI void
+EVAS_API void
evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
efl_gfx_entity_size_set((Evas_Object *)obj, EINA_SIZE2D(w, h));
@@ -1364,7 +1331,7 @@ _efl_canvas_object_efl_gfx_entity_geometry_get(const Eo *eo_obj EINA_UNUSED, Eva
return (Eina_Rect) obj->cur->geometry;
}
-EAPI void
+EVAS_API void
evas_object_geometry_get(const Evas_Object *eo_obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
{
Eina_Rect r = efl_gfx_entity_geometry_get(eo_obj);
@@ -1415,7 +1382,7 @@ _evas_object_size_hint_alloc(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protec
}
/* Legacy only */
-EAPI Evas_Display_Mode
+EVAS_API Evas_Display_Mode
evas_object_size_hint_display_mode_get(const Evas_Object *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
@@ -1425,7 +1392,7 @@ evas_object_size_hint_display_mode_get(const Evas_Object *eo_obj)
}
/* Legacy only */
-EAPI void
+EVAS_API void
evas_object_size_hint_display_mode_set(Eo *eo_obj, Evas_Display_Mode dispmode)
{
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
@@ -1589,7 +1556,7 @@ _efl_canvas_object_efl_gfx_hint_hint_size_max_set(Eo *eo_obj, Evas_Object_Protec
evas_object_inform_call_changed_size_hints(eo_obj, obj);
}
-EAPI void
+EVAS_API void
evas_object_size_hint_request_get(const Eo *eo_obj, Evas_Coord *w, Evas_Coord *h)
{
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
@@ -1605,7 +1572,7 @@ evas_object_size_hint_request_get(const Eo *eo_obj, Evas_Coord *w, Evas_Coord *h
if (h) *h = obj->size_hints->request.h;
}
-EAPI void
+EVAS_API void
evas_object_size_hint_request_set(Eo *eo_obj, Evas_Coord w, Evas_Coord h)
{
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
@@ -1656,11 +1623,11 @@ _efl_canvas_object_efl_gfx_hint_hint_aspect_get(const Eo *eo_obj EINA_UNUSED, Ev
{
if ((!obj->size_hints) || obj->delete_me)
{
- if (aspect) *aspect = EVAS_ASPECT_CONTROL_NONE;
+ if (aspect) *aspect = EFL_GFX_HINT_ASPECT_NONE;
if (sz) *sz = EINA_SIZE2D(0, 0);
return;
}
- if (aspect) *aspect = obj->size_hints->aspect.mode;
+ if (aspect) *aspect = (Efl_Gfx_Hint_Aspect)obj->size_hints->aspect.mode;
if (sz)
{
sz->w = obj->size_hints->aspect.size.w;
@@ -1684,7 +1651,7 @@ _efl_canvas_object_efl_gfx_hint_hint_aspect_set(Eo *eo_obj, Evas_Object_Protecte
if ((obj->size_hints->aspect.mode == (Evas_Aspect_Control)aspect) &&
(obj->size_hints->aspect.size.w == sz.w) &&
(obj->size_hints->aspect.size.h == sz.h)) return;
- obj->size_hints->aspect.mode = aspect;
+ obj->size_hints->aspect.mode = (Evas_Aspect_Control)aspect;
obj->size_hints->aspect.size = sz;
evas_object_inform_call_changed_size_hints(eo_obj, obj);
@@ -1843,7 +1810,7 @@ _efl_canvas_object_efl_gfx_hint_hint_fill_set(Eo *eo_obj, Evas_Object_Protected_
evas_object_inform_call_changed_size_hints(eo_obj, obj);
}
-EAPI void
+EVAS_API void
evas_object_show(Evas_Object *eo_obj)
{
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
@@ -1852,14 +1819,14 @@ evas_object_show(Evas_Object *eo_obj)
efl_gfx_entity_visible_set(eo_obj, EINA_TRUE);
}
-EAPI void
+EVAS_API void
evas_object_hide(Evas_Object *eo_obj)
{
if (!eo_obj) return;
efl_gfx_entity_visible_set(eo_obj, EINA_FALSE);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_visible_get(const Evas_Object *obj)
{
return efl_gfx_entity_visible_get((Evas_Object *)obj);
@@ -2053,7 +2020,7 @@ _efl_canvas_object_efl_gfx_entity_visible_get(const Eo *eo_obj EINA_UNUSED,
return obj->cur->visible;
}
-EAPI void
+EVAS_API void
evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a)
{
efl_gfx_color_set((Evas_Object *)obj, r, g, b, a);
@@ -2100,7 +2067,7 @@ _efl_canvas_object_efl_gfx_color_color_set(Eo *eo_obj, Evas_Object_Protected_Dat
evas_object_change(eo_obj, obj);
}
-EAPI void
+EVAS_API void
evas_object_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a)
{
efl_gfx_color_get((Evas_Object *)obj, r, g, b, a);
@@ -2193,7 +2160,7 @@ _efl_canvas_object_render_op_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_D
_render_op_set(obj, _gfx_to_evas_render_op(rop));
}
-EAPI void
+EVAS_API void
evas_object_render_op_set(Evas_Object *eo_obj, Evas_Render_Op render_op)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
@@ -2206,7 +2173,7 @@ _efl_canvas_object_render_op_get(const Eo *eo_obj EINA_UNUSED, Evas_Object_Prote
return _evas_to_gfx_render_op(obj->cur->render_op);
}
-EAPI Evas_Render_Op
+EVAS_API Evas_Render_Op
evas_object_render_op_get(const Evas_Object *eo_obj)
{
return _gfx_to_evas_render_op(efl_canvas_object_render_op_get(eo_obj));
@@ -2566,7 +2533,7 @@ _efl_canvas_object_legacy_ctor(Eo *eo_obj, Evas_Object_Protected_Data *obj)
obj->legacy.ctor = EINA_TRUE;
}
-EAPI Eo *
+EVAS_API Eo *
evas_find(const Eo *obj)
{
if (efl_isa(obj, EVAS_CANVAS_CLASS))
@@ -2587,7 +2554,7 @@ _efl_canvas_object_event_animation_cancel(Eo *eo_obj)
/* legacy */
-EAPI const char *
+EVAS_API const char *
evas_object_type_get(const Evas_Object *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, NULL);
@@ -2595,7 +2562,7 @@ evas_object_type_get(const Evas_Object *eo_obj)
return obj->type;
}
-EAPI void
+EVAS_API void
evas_object_static_clip_set(Evas_Object *eo_obj, Eina_Bool is_static_clip)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
@@ -2603,35 +2570,35 @@ evas_object_static_clip_set(Evas_Object *eo_obj, Eina_Bool is_static_clip)
obj->is_static_clip = is_static_clip;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_static_clip_get(const Evas_Object *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, EINA_FALSE);
return obj->is_static_clip;
}
-EAPI void
+EVAS_API void
evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h)
{
- efl_gfx_hint_aspect_set(obj, aspect, EINA_SIZE2D(w, h));
+ efl_gfx_hint_aspect_set(obj, (Efl_Gfx_Hint_Aspect)aspect, EINA_SIZE2D(w, h));
}
-EAPI void
+EVAS_API void
evas_object_size_hint_aspect_get(const Evas_Object *obj, Evas_Aspect_Control *aspect, Evas_Coord *w, Evas_Coord *h)
{
Eina_Size2D sz = { 0, 0 };
- efl_gfx_hint_aspect_get(obj, (Efl_Gfx_Hint_Aspect*)aspect, &sz);
+ efl_gfx_hint_aspect_get(obj, (Efl_Gfx_Hint_Aspect *)aspect, &sz);
if (w) *w = sz.w;
if (h) *h = sz.h;
}
-EAPI void
+EVAS_API void
evas_object_size_hint_max_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
efl_gfx_hint_size_max_set(obj, EINA_SIZE2D(w, h));
}
-EAPI void
+EVAS_API void
evas_object_size_hint_max_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h)
{
Eina_Size2D sz;
@@ -2640,13 +2607,13 @@ evas_object_size_hint_max_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord
if (h) *h = sz.h;
}
-EAPI void
+EVAS_API void
evas_object_size_hint_min_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
efl_gfx_hint_size_restricted_min_set(obj, EINA_SIZE2D(w, h));
}
-EAPI void
+EVAS_API void
evas_object_size_hint_min_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h)
{
Eina_Size2D sz;
@@ -2655,43 +2622,43 @@ evas_object_size_hint_min_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord
if (h) *h = sz.h;
}
-EAPI void
+EVAS_API void
evas_object_size_hint_padding_set(Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b)
{
efl_gfx_hint_margin_set(obj, l, r, t, b);
}
-EAPI void
+EVAS_API void
evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b)
{
efl_gfx_hint_margin_get(obj, l, r, t, b);
}
-EAPI void
+EVAS_API void
evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y)
{
efl_gfx_hint_weight_set(obj, x, y);
}
-EAPI void
+EVAS_API void
evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, double *y)
{
efl_gfx_hint_weight_get(obj, x, y);
}
-EAPI void
+EVAS_API void
evas_object_size_hint_align_set(Evas_Object *obj, double x, double y)
{
efl_gfx_hint_align_set(obj, x, y);
}
-EAPI void
+EVAS_API void
evas_object_size_hint_align_get(const Evas_Object *obj, double *x, double *y)
{
efl_gfx_hint_align_get(obj, x, y);
}
-EAPI Evas *
+EVAS_API Evas *
evas_object_evas_get(const Eo *eo_obj)
{
if (efl_isa(eo_obj, EFL_CANVAS_OBJECT_CLASS))
@@ -2704,19 +2671,19 @@ evas_object_evas_get(const Eo *eo_obj)
return efl_provider_find((Eo *) eo_obj, EVAS_CANVAS_CLASS);
}
-EAPI void
+EVAS_API void
evas_object_scale_set(Evas_Object *obj, double scale)
{
efl_gfx_entity_scale_set(obj, scale);
}
-EAPI double
+EVAS_API double
evas_object_scale_get(const Evas_Object *obj)
{
return efl_gfx_entity_scale_get(obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_pointer_inside_by_device_get(const Evas_Object *eo_obj, Efl_Input_Device *dev)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, EINA_FALSE);
@@ -2725,7 +2692,7 @@ evas_object_pointer_inside_by_device_get(const Evas_Object *eo_obj, Efl_Input_De
return efl_canvas_pointer_inside_get(eo_obj, dev);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_pointer_coords_inside_get(const Evas_Object *eo_obj, int x, int y)
{
Eina_Position2D pos = EINA_POSITION2D(x, y);
@@ -2733,19 +2700,19 @@ evas_object_pointer_coords_inside_get(const Evas_Object *eo_obj, int x, int y)
return efl_canvas_object_coords_inside_get(eo_obj, pos);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_pointer_inside_get(const Evas_Object *eo_obj)
{
return evas_object_pointer_inside_by_device_get(eo_obj, NULL);
}
-EAPI void
+EVAS_API void
evas_object_is_frame_object_set(Efl_Canvas_Object *obj, Eina_Bool is_frame)
{
efl_canvas_object_is_frame_object_set(obj, is_frame);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_is_frame_object_get(const Efl_Canvas_Object *obj)
{
return efl_canvas_object_is_frame_object_get(obj);
@@ -2754,10 +2721,10 @@ evas_object_is_frame_object_get(const Efl_Canvas_Object *obj)
/* Internal EO APIs and hidden overrides */
-EOAPI EFL_VOID_FUNC_BODYV(efl_canvas_object_is_frame_object_set, EFL_FUNC_CALL(is_frame), Eina_Bool is_frame);
-EOAPI EFL_FUNC_BODY_CONST(efl_canvas_object_is_frame_object_get, Eina_Bool, 0);
-EOAPI EFL_VOID_FUNC_BODY(efl_canvas_object_legacy_ctor)
-EOAPI EFL_VOID_FUNC_BODYV(efl_canvas_object_type_set, EFL_FUNC_CALL(type), const char *type)
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(efl_canvas_object_is_frame_object_set, EFL_FUNC_CALL(is_frame), Eina_Bool is_frame);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(efl_canvas_object_is_frame_object_get, Eina_Bool, 0);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(efl_canvas_object_legacy_ctor)
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(efl_canvas_object_type_set, EFL_FUNC_CALL(type), const char *type)
#define EFL_CANVAS_OBJECT_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_canvas_object_efl_object_dbg_info_get), \
diff --git a/src/lib/evas/canvas/evas_object_polygon.c b/src/lib/evas/canvas/evas_object_polygon.c
index f37b9f5b25..55addf00f2 100644
--- a/src/lib/evas/canvas/evas_object_polygon.c
+++ b/src/lib/evas/canvas/evas_object_polygon.c
@@ -74,7 +74,7 @@ static const Evas_Object_Func object_func =
/* the actual api call to add a rect */
/* it has no other api calls as all properties are standard */
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_polygon_add(Evas *e)
{
e = evas_find(e);
@@ -507,13 +507,13 @@ evas_object_polygon_was_inside(Evas_Object *eo_obj EINA_UNUSED,
return 1;
}
-EAPI void
+EVAS_API void
evas_object_polygon_point_add(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
{
efl_canvas_polygon_point_add(obj, EINA_POSITION2D(x, y));
}
-EAPI void
+EVAS_API void
evas_object_polygon_points_clear(Evas_Object *obj)
{
efl_canvas_polygon_points_clear(obj);
diff --git a/src/lib/evas/canvas/evas_object_rectangle.c b/src/lib/evas/canvas/evas_object_rectangle.c
index 222effe942..8e27f61e90 100644
--- a/src/lib/evas/canvas/evas_object_rectangle.c
+++ b/src/lib/evas/canvas/evas_object_rectangle.c
@@ -74,7 +74,7 @@ static const Evas_Object_Func object_func =
/* the actual api call to add a rect */
/* it has no other api calls as all properties are standard */
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_rectangle_add(Evas *e)
{
e = evas_find(e);
diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c
index 7f07d826e3..a9e654bdcb 100644
--- a/src/lib/evas/canvas/evas_object_smart.c
+++ b/src/lib/evas/canvas/evas_object_smart.c
@@ -23,6 +23,7 @@ struct _Evas_Smart_Data
Eina_Rectangle bounding_box;
} cur, prev;
Evas_Object *object;
+ Evas_Object *filter_img;
void *engine_data;
void *data;
Eina_Inlist *callbacks;
@@ -131,7 +132,7 @@ _smart_clipper_get(Evas_Smart_Data *o)
}
/* public funcs */
-EAPI void
+EVAS_API void
evas_object_smart_data_set(Evas_Object *eo_obj, void *data)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj);
@@ -144,14 +145,14 @@ evas_object_smart_data_set(Evas_Object *eo_obj, void *data)
}
}
-EAPI void *
+EVAS_API void *
evas_object_smart_data_get(const Evas_Object *eo_obj)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj, NULL);
return o->data;
}
-EAPI const void *
+EVAS_API const void *
evas_object_smart_interface_get(const Evas_Object *eo_obj,
const char *name)
{
@@ -175,7 +176,7 @@ evas_object_smart_interface_get(const Evas_Object *eo_obj,
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_object_smart_interface_data_get(const Evas_Object *eo_obj,
const Evas_Smart_Interface *iface)
{
@@ -198,14 +199,14 @@ evas_object_smart_interface_data_get(const Evas_Object *eo_obj,
return NULL;
}
-EAPI Evas_Smart*
+EVAS_API Evas_Smart*
evas_object_smart_smart_get(const Efl_Canvas_Group *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, NULL);
return obj->smart.smart;
}
-EAPI void
+EVAS_API void
evas_object_smart_member_add(Evas_Object *eo_obj, Evas_Object *smart_obj)
{
efl_canvas_group_member_add(smart_obj, eo_obj);
@@ -339,7 +340,7 @@ _efl_canvas_group_group_member_add(Eo *smart_obj, Evas_Smart_Data *o, Evas_Objec
efl_event_callback_call(smart_obj, EFL_CANVAS_GROUP_EVENT_MEMBER_ADDED, eo_obj);
}
-EAPI void
+EVAS_API void
evas_object_smart_member_del(Evas_Object *eo_obj)
{
Evas_Object_Protected_Data *obj;
@@ -425,7 +426,7 @@ _efl_canvas_group_group_member_remove(Eo *smart_obj, Evas_Smart_Data *sd, Evas_O
evas_object_mapped_clip_across_mark(eo_obj, obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_smart_type_check(const Evas_Object *eo_obj, const char *type)
{
const Evas_Smart_Class *sc;
@@ -454,7 +455,7 @@ evas_object_smart_type_check(const Evas_Object *eo_obj, const char *type)
return type_check;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_smart_type_check_ptr(const Eo *eo_obj, const char* type)
{
Efl_Class *klass;
@@ -483,7 +484,7 @@ evas_object_smart_type_check_ptr(const Eo *eo_obj, const char* type)
return type_check;
}
-EAPI void
+EVAS_API void
evas_smart_legacy_type_register(const char *type, const Efl_Class *klass)
{
eina_hash_set(_evas_smart_class_names_hash_table, type, klass);
@@ -554,7 +555,7 @@ _efl_canvas_group_group_member_is(const Eo *eo_obj, Evas_Smart_Data *pd EINA_UNU
return (sub->smart.parent == eo_obj);
}
-EAPI Eina_List*
+EVAS_API Eina_List*
evas_object_smart_members_get(const Evas_Object *eo_obj)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj, NULL);
@@ -697,7 +698,7 @@ _evas_smart_class_ifaces_private_data_alloc(Evas_Object *eo_obj,
}
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_smart_add(Evas *eo_e, Evas_Smart *s)
{
Evas_Object *eo_obj;
@@ -785,7 +786,7 @@ _evas_object_smart_move_relative_internal(Evas_Smart_Data *o, Evas_Coord dx, Eva
}
}
-EAPI void
+EVAS_API void
evas_object_smart_move_children_relative(Eo *eo_obj, Evas_Coord dx, Evas_Coord dy)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj);
@@ -909,6 +910,9 @@ _efl_canvas_group_efl_gfx_entity_visible_set(Eo *eo_obj, Evas_Smart_Data *o, Ein
efl_gfx_entity_visible_set(clipper, vis);
}
+
+ if (o->filter_img)
+ efl_gfx_entity_visible_set(o->filter_img, vis);
}
EOLIAN static void
@@ -927,6 +931,55 @@ _efl_canvas_group_efl_gfx_entity_position_set(Eo *eo_obj, Evas_Smart_Data *o, Ei
if (o->clipped && !is_overridden)
_evas_object_smart_clipped_smart_move_internal(eo_obj, pos.x, pos.y);
efl_gfx_entity_position_set(efl_super(eo_obj, MY_CLASS), pos);
+ if (o->filter_img) efl_gfx_entity_position_set(o->filter_img, pos);
+}
+
+EOLIAN static void
+_efl_canvas_group_efl_gfx_entity_size_set(Eo *obj, Evas_Smart_Data *o, Eina_Size2D size)
+{
+ if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, size.w, size.h))
+ return;
+
+ efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), size);
+ if (o->filter_img) efl_gfx_entity_size_set(o->filter_img, size);
+}
+
+EOLIAN static void
+_efl_canvas_group_efl_gfx_filter_filter_program_set(Eo *eo_obj, Evas_Smart_Data *o,
+ const char *code, const char *name)
+{
+ Evas_Object_Protected_Data *obj, *fobj;
+ obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
+
+ if (!code && !name)
+ {
+ if (o->filter_img)
+ {
+ evas_object_del(o->filter_img);
+ o->filter_img = NULL;
+ }
+ return;
+ }
+
+ if (o->filter_img)
+ {
+ efl_gfx_filter_program_set(o->filter_img, code, name);
+ return;
+ }
+
+ o->filter_img = efl_add(EFL_CANVAS_PROXY_CLASS, eo_obj,
+ efl_gfx_fill_auto_set(efl_added, EINA_TRUE),
+ efl_canvas_group_member_add(obj->object, efl_added),
+ efl_canvas_proxy_source_events_set(efl_added, EINA_TRUE),
+ efl_canvas_proxy_source_set(efl_added, eo_obj),
+ evas_object_repeat_events_set(efl_added, EINA_TRUE),
+ efl_gfx_filter_program_set(efl_added, code, name),
+ efl_gfx_entity_geometry_set(efl_added, (Eina_Rect)obj->cur->geometry),
+ efl_gfx_entity_visible_set(efl_added, obj->cur->visible));
+
+ fobj = efl_data_scope_get(o->filter_img, EFL_CANVAS_OBJECT_CLASS);
+ if (!fobj) return;
+ fobj->is_filter_object = EINA_TRUE;
}
EOLIAN static void
@@ -983,7 +1036,7 @@ evas_object_smart_attach(Evas_Object *eo_obj, Evas_Smart *s)
if (s->smart_class->add) s->smart_class->add(eo_obj);
}
-EAPI void
+EVAS_API void
evas_object_smart_callback_add(Evas_Object *eo_obj, const char *event, Evas_Smart_Cb func, const void *data)
{
evas_object_smart_callback_priority_add(eo_obj, event,
@@ -1019,7 +1072,7 @@ _smart_cb_check(Evas_Smart_Data *o, const char *event)
}
}
-EAPI void
+EVAS_API void
evas_object_smart_callback_priority_add(Evas_Object *eo_obj, const char *event, Evas_Callback_Priority priority, Evas_Smart_Cb func, const void *data)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj);
@@ -1040,7 +1093,7 @@ evas_object_smart_callback_priority_add(Evas_Object *eo_obj, const char *event,
efl_event_callback_priority_add(eo_obj, eo_desc, priority, _eo_evas_smart_cb, cb_info);
}
-EAPI void *
+EVAS_API void *
evas_object_smart_callback_del(Evas_Object *eo_obj, const char *event, Evas_Smart_Cb func)
{
_eo_evas_smart_cb_info *info;
@@ -1067,7 +1120,7 @@ evas_object_smart_callback_del(Evas_Object *eo_obj, const char *event, Evas_Smar
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_object_smart_callback_del_full(Evas_Object *eo_obj, const char *event, Evas_Smart_Cb func, const void *data)
{
_eo_evas_smart_cb_info *info;
@@ -1094,7 +1147,7 @@ evas_object_smart_callback_del_full(Evas_Object *eo_obj, const char *event, Evas
return NULL;
}
-EAPI void
+EVAS_API void
evas_object_smart_callback_call(Evas_Object *eo_obj, const char *event, void *event_info)
{
MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
@@ -1133,7 +1186,7 @@ _evas_object_smart_callback_call_internal(Evas_Object *eo_obj, const Efl_Event_D
efl_event_callback_legacy_call(eo_obj, eo_desc, NULL);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_smart_callbacks_descriptions_set(Eo *eo_obj, const Evas_Smart_Cb_Description *descriptions)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj, EINA_FALSE);
@@ -1160,7 +1213,7 @@ evas_object_smart_callbacks_descriptions_set(Eo *eo_obj, const Evas_Smart_Cb_Des
return EINA_TRUE;
}
-EAPI void
+EVAS_API void
evas_object_smart_callbacks_descriptions_get(const Eo *eo_obj, const Evas_Smart_Cb_Description ***class_descriptions, unsigned int *class_count, const Evas_Smart_Cb_Description ***instance_descriptions, unsigned int *instance_count)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj);
@@ -1179,7 +1232,7 @@ evas_object_smart_callbacks_descriptions_get(const Eo *eo_obj, const Evas_Smart_
*instance_count = o->callbacks_descriptions.size;
}
-EAPI void
+EVAS_API void
evas_object_smart_callback_description_find(const Eo *eo_obj, const char *name, const Evas_Smart_Cb_Description **class_description, const Evas_Smart_Cb_Description **instance_description)
{
EVAS_OBJECT_SMART_GET_OR_RETURN(eo_obj);
@@ -1324,12 +1377,27 @@ evas_object_smart_changed_get(Evas_Object_Protected_Data *obj)
return EINA_FALSE;
//b. Object clipper visibility
- if ((obj->prev->clipper && obj->cur->clipper) &&
- ((!obj->prev->clipper->cur->visible &&
- !obj->cur->clipper->cur->visible) ||
- ((obj->prev->clipper->cur->color.a == 0) &&
- (obj->cur->clipper->cur->color.a == 0))))
- return EINA_FALSE;
+ if (obj->prev->clipper && obj->cur->clipper)
+ {
+ if (obj->prev->clipper != obj->cur->clipper)
+ {
+ /* check between prev clipper and current clipper */
+ if ((!obj->prev->clipper->cur->visible &&
+ !obj->cur->clipper->cur->visible) ||
+ ((obj->prev->clipper->cur->color.a == 0) &&
+ (obj->cur->clipper->cur->color.a == 0)))
+ return EINA_FALSE;
+ }
+ else
+ {
+ /* check between prev value and current value of clipper */
+ if ((!obj->cur->clipper->prev->visible &&
+ !obj->cur->clipper->cur->visible) ||
+ ((obj->cur->clipper->prev->color.a == 0) &&
+ (obj->cur->clipper->cur->color.a == 0)))
+ return EINA_FALSE;
+ }
+ }
if (!obj->clip.clipees)
{
@@ -1339,7 +1407,10 @@ evas_object_smart_changed_get(Evas_Object_Protected_Data *obj)
if (has_map)
{
if ((obj->need_surface_clear && obj->changed && !obj->is_smart) ||
- ((obj->changed_pchange) && (obj->changed_map)))
+ ((obj->changed_pchange) && (obj->changed_map)) ||
+ /* A condition for a rare case which has obj->changed is FALSE,
+ but Efl_Canvas_Vg_Object_Data.changed is TRUE. */
+ (obj->is_vg_object && evas_object_vg_changed_get(obj)))
return EINA_TRUE;
}
}
@@ -1955,9 +2026,9 @@ _efl_canvas_group_efl_object_event_callback_array_priority_add(Eo *obj, Evas_Sma
}
return efl_event_callback_array_priority_add(efl_super(obj, MY_CLASS), array, priority, user_data);
}
-EOAPI EFL_VOID_FUNC_BODY(efl_canvas_group_add)
-EOAPI EFL_VOID_FUNC_BODY(efl_canvas_group_del)
-EOAPI EFL_VOID_FUNC_BODYV(efl_canvas_group_clipped_set, EFL_FUNC_CALL(enable), Eina_Bool enable)
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(efl_canvas_group_add)
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODY(efl_canvas_group_del)
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(efl_canvas_group_clipped_set, EFL_FUNC_CALL(enable), Eina_Bool enable)
#define EFL_CANVAS_GROUP_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_canvas_group_add, _efl_canvas_group_group_add), \
diff --git a/src/lib/evas/canvas/evas_object_smart_clipped.c b/src/lib/evas/canvas/evas_object_smart_clipped.c
index a904479c01..41633c8df3 100644
--- a/src/lib/evas/canvas/evas_object_smart_clipped.c
+++ b/src/lib/evas/canvas/evas_object_smart_clipped.c
@@ -10,7 +10,7 @@
CSO_DATA_GET(eo_obj, ptr) \
if (!ptr) return __VA_ARGS__;
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_smart_clipped_clipper_get(const Evas_Object *eo_obj)
{
CSO_DATA_GET_OR_RETURN(eo_obj, cso, NULL);
@@ -98,7 +98,7 @@ evas_object_smart_clipped_smart_member_del(Evas_Object *eo_obj, Evas_Object *mem
evas_object_hide(cso->clipper);
}
-EAPI void
+EVAS_API void
evas_object_smart_clipped_smart_set(Evas_Smart_Class *sc)
{
if (!sc)
@@ -117,7 +117,7 @@ evas_object_smart_clipped_smart_set(Evas_Smart_Class *sc)
sc->member_del = evas_object_smart_clipped_smart_member_del;
}
-EAPI const Evas_Smart_Class *
+EVAS_API const Evas_Smart_Class *
evas_object_smart_clipped_class_get(void)
{
static Evas_Smart_Class _sc = EVAS_SMART_CLASS_INIT_NAME_VERSION("EvasObjectSmartClipped");
diff --git a/src/lib/evas/canvas/evas_object_table.c b/src/lib/evas/canvas/evas_object_table.c
index e07496adb1..d9be88351d 100644
--- a/src/lib/evas/canvas/evas_object_table.c
+++ b/src/lib/evas/canvas/evas_object_table.c
@@ -328,7 +328,6 @@ _evas_object_table_calculate_hints_homogeneous(Evas_Object *o, Evas_Table_Data *
Evas_Object_Table_Option *opt;
Evas_Coord minw, minh, o_minw, o_minh;
Eina_Bool expand_h, expand_v;
- Eina_Bool fill_h, fill_v;
o_minw = 0;
o_minh = 0;
@@ -349,8 +348,6 @@ _evas_object_table_calculate_hints_homogeneous(Evas_Object *o, Evas_Table_Data *
(child, &opt->pad.l, &opt->pad.r, &opt->pad.t, &opt->pad.b);
evas_object_size_hint_align_get(child, &opt->align.h, &opt->align.v);
evas_object_size_hint_weight_get(child, &weightw, &weighth);
- //only for Efl.Ui.Table
- efl_gfx_hint_fill_get(child, &fill_h, &fill_v);
child_minw = opt->min.w + opt->pad.l + opt->pad.r;
child_minh = opt->min.h + opt->pad.t + opt->pad.b;
@@ -376,13 +373,13 @@ _evas_object_table_calculate_hints_homogeneous(Evas_Object *o, Evas_Table_Data *
expand_v = 1;
}
- opt->fill_h = fill_h;
+ opt->fill_h = 0;
if (opt->align.h < 0.0)
{
opt->align.h = 0.5;
opt->fill_h = 1;
}
- opt->fill_v = fill_v;
+ opt->fill_v = 0;
if (opt->align.v < 0.0)
{
opt->align.v = 0.5;
@@ -968,7 +965,7 @@ _evas_table_efl_canvas_group_group_calculate(Eo *o, Evas_Table_Data *priv)
evas_event_thaw_eval(e);
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_table_add(Evas *evas)
{
evas = evas_find(evas);
@@ -1085,7 +1082,7 @@ _evas_table_pack_get(const Eo *o EINA_UNUSED, Evas_Table_Data *_pd EINA_UNUSED,
if (row) *row = opt->row;
if (colspan) *colspan = opt->colspan;
if (rowspan) *rowspan = opt->rowspan;
-
+
return EINA_TRUE;
}
@@ -1124,7 +1121,7 @@ _evas_table_pack(Eo *o, Evas_Table_Data *priv, Evas_Object *child, unsigned shor
{
WRN("row + rowspan getting rather large (>32767)");
}
-
+
opt = _evas_object_table_option_get(child);
if (opt)
{
@@ -1414,7 +1411,7 @@ _evas_table_efl_ui_i18n_mirrored_get(const Eo *o EINA_UNUSED, Evas_Table_Data *p
return priv->is_mirrored;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_table_mirrored_get(const Eo *obj)
{
return efl_ui_mirrored_get(obj);
@@ -1430,7 +1427,7 @@ _evas_table_efl_ui_i18n_mirrored_set(Eo *o, Evas_Table_Data *priv, Eina_Bool mir
}
}
-EAPI void
+EVAS_API void
evas_object_table_mirrored_set(Eo *obj, Eina_Bool mirrored)
{
efl_ui_mirrored_set(obj, mirrored);
diff --git a/src/lib/evas/canvas/evas_object_text.c b/src/lib/evas/canvas/evas_object_text.c
index 6cacf8e899..66fa5020d4 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -362,7 +362,7 @@ _evas_object_text_vert_advance_get(const Evas_Object *obj EINA_UNUSED,
return o->max_ascent + o->max_descent;
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_text_add(Evas *e)
{
e = evas_find(e);
@@ -410,6 +410,8 @@ _evas_text_font_reload(Eo *eo_obj, Evas_Text_Data *o)
Eina_Bool source_invisible = EINA_FALSE;
Eina_List *was = NULL;
+ if (o->cur.size == 0 || (!o->cur.font && !o->cur.source)) return ;
+
if (!(obj->layer->evas->is_frozen))
{
pass = evas_event_passes_through(eo_obj, obj);
@@ -1152,6 +1154,8 @@ _evas_text_direction_get(const Eo *eo_obj, Evas_Text_Data *o)
evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes,
(Evas_Object *)eo_obj, obj);
}
+#else
+ (void)eo_obj;
#endif
return (Efl_Text_Bidirectional_Type)o->bidi_dir;
@@ -1453,7 +1457,7 @@ _evas_text_style_pad_get(const Eo *eo_obj, Evas_Text_Data *o, int *l, int *r, in
_evas_object_text_pad_get(eo_obj, o, l, r, t, b);
}
-EAPI int
+EVAS_API int
evas_string_char_next_get(const char *str, int pos, int *decoded)
{
int p, d;
@@ -1469,7 +1473,7 @@ evas_string_char_next_get(const char *str, int pos, int *decoded)
return p;
}
-EAPI int
+EVAS_API int
evas_string_char_prev_get(const char *str, int pos, int *decoded)
{
int p, d;
@@ -1482,7 +1486,7 @@ evas_string_char_prev_get(const char *str, int pos, int *decoded)
return p;
}
-EAPI int
+EVAS_API int
evas_string_char_len_get(const char *str)
{
if (!str) return 0;
@@ -2063,22 +2067,6 @@ evas_object_text_render_pre(Evas_Object *eo_obj,
obj->cur->clipper->private_data);
}
-#ifdef BIDI_SUPPORT
- if (o->inherit_paragraph_direction)
- {
- Evas_BiDi_Direction parent_dir = EVAS_BIDI_DIRECTION_NEUTRAL;
-
- if (obj->smart.parent)
- parent_dir = evas_object_paragraph_direction_get(obj->smart.parent);
-
- if (parent_dir != o->paragraph_direction)
- {
- o->paragraph_direction = parent_dir;
- o->changed_paragraph_direction = EINA_TRUE;
- }
- }
-#endif
-
/* If object size changed and ellipsis is set */
if (((o->cur.ellipsis >= 0.0) &&
((obj->cur->geometry.w != o->last_computed.w) ||
@@ -2334,13 +2322,13 @@ _evas_object_text_recalc(Evas_Object *eo_obj, Eina_Unicode *text)
#endif
}
-EAPI void
+EVAS_API void
evas_object_text_font_source_set(Eo *obj, const char *font_source)
{
efl_text_font_source_set((Eo *) obj, font_source);
}
-EAPI const char *
+EVAS_API const char *
evas_object_text_font_source_get(const Eo *obj)
{
const char *font_source = 0;
@@ -2348,7 +2336,7 @@ evas_object_text_font_source_get(const Eo *obj)
return font_source;
}
-EAPI void
+EVAS_API void
evas_object_text_font_set(Eo *obj, const char *font, Evas_Font_Size size)
{
if (!font || size <= 0) return; /*Condition for legacy object*/
@@ -2357,20 +2345,20 @@ evas_object_text_font_set(Eo *obj, const char *font, Evas_Font_Size size)
efl_text_font_size_set((Eo *) obj, size);
}
-EAPI void
+EVAS_API void
evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_Size *size)
{
if (font) *font = efl_text_font_family_get((Eo *) obj);
if (size) *size = efl_text_font_size_get((Eo *) obj);
}
-EAPI void
+EVAS_API void
evas_object_text_text_set(Eo *obj, const char *text)
{
efl_text_set((Eo *) obj, text);
}
-EAPI const char *
+EVAS_API const char *
evas_object_text_text_get(const Eo *obj)
{
return efl_text_get((Eo *) obj);
@@ -2384,14 +2372,14 @@ _evas_text_efl_gfx_filter_filter_program_set(Eo *obj, Evas_Text_Data *pd EINA_UN
}
/* deprecated */
-EAPI void
+EVAS_API void
evas_object_text_filter_program_set(Evas_Object *obj, const char *code)
{
efl_gfx_filter_program_set(obj, code, NULL);
}
/* deprecated */
-EAPI void
+EVAS_API void
evas_object_text_filter_source_set(Evas_Object *obj, const char *name, Evas_Object *source)
{
efl_gfx_filter_source_set(obj, name, source);
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index 48857a5a32..f44dfaab5c 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -66,7 +66,7 @@
#include "evas_common_private.h"
#include "evas_private.h"
-#include "efl_text_cursor.eo.h"
+#include "efl_text_cursor_object.eo.h"
#include "Efl.h"
#include "efl_canvas_textblock_internal.h"
@@ -311,7 +311,6 @@ struct _Evas_Object_Textblock_Text_Item
{
Evas_Object_Textblock_Item parent; /**< Textblock item. */
Evas_Text_Props text_props; /**< Props for this item. */
- Evas_Coord x_adjustment; /**< Used to indicate by how much we adjusted sizes */
Text_Item_Filter *gfx_filter;
};
@@ -500,6 +499,7 @@ struct _Evas_Object_Textblock
} default_format;
double valign;
Eina_Stringshare *markup_text;
+ Evas_Object_Textblock_Format *main_fmt;
char *utf8;
void *engine_data;
const char *repch;
@@ -531,6 +531,7 @@ struct _Evas_Object_Textblock
Eina_Bool wrap_changed : 1;
Eina_Bool auto_styles : 1;
Eina_Bool fit_in_progress : 1;
+ Eina_Bool is_legacy : 1;
};
struct _Evas_Textblock_Selection_Iterator
@@ -556,24 +557,24 @@ static void evas_object_textblock_render(Evas_Object *eo_obj,
int x, int y, Eina_Bool do_async);
static void evas_object_textblock_free(Evas_Object *eo_obj);
static void evas_object_textblock_render_pre(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static void evas_object_textblock_render_post(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static Evas_Object_Textblock_Node_Text *_evas_textblock_node_text_new(void);
static void *evas_object_textblock_engine_data_get(Evas_Object *eo_obj);
static int evas_object_textblock_is_opaque(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static int evas_object_textblock_was_opaque(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static void evas_object_textblock_coords_recalc(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data);
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data);
static void _canvas_text_format_changed(Eo *eo_obj, Efl_Canvas_Textblock_Data *o);
static const Evas_Object_Func object_func =
@@ -632,7 +633,7 @@ static const char *_textblock_format_node_from_style_tag(Efl_Canvas_Textblock_Da
#endif
static Eina_Bool _evas_textblock_cursor_format_append(Efl_Text_Cursor_Handle *cur, const char *format, Evas_Object_Textblock_Node_Format **_fnode, Eina_Bool is_item);
-EAPI Eina_Bool evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur);
+EVAS_API Eina_Bool evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur);
static Eina_Bool _evas_textblock_cursor_format_is_visible_get(const Efl_Text_Cursor_Handle *cur);
static void _find_layout_item_line_match(Evas_Object *eo_obj, Evas_Object_Textblock_Node_Text *n, size_t pos, Evas_Object_Textblock_Line **lnr, Evas_Object_Textblock_Item **itr);
static Evas_Object_Textblock_Node_Format *_evas_textblock_cursor_node_format_at_pos_get(const Efl_Text_Cursor_Handle *cur);
@@ -895,8 +896,7 @@ _image_safe_unref(Evas_Public_Data *e, void *image, Eina_Bool async)
* @param it the layout item to be freed
*/
static void
-_item_free(Evas_Public_Data *evas,
- Efl_Canvas_Textblock_Data *o,
+_item_free(Efl_Canvas_Textblock_Data *o,
Evas_Object_Protected_Data *evas_o,
Evas_Object_Textblock_Line *ln, Evas_Object_Textblock_Item *it)
{
@@ -913,7 +913,7 @@ _item_free(Evas_Public_Data *evas,
//Evas_Public_Data *evas = efl_data_scope_get(eo_evas, EVAS_CANVAS_CLASS);
Eina_Bool async = ti->gfx_filter->do_async;
- _image_safe_unref(evas, ti->gfx_filter->output, async);
+ _image_safe_unref(evas_o->layer->evas, ti->gfx_filter->output, async);
ti->gfx_filter->output = NULL;
}
EINA_INLIST_REMOVE(o->gfx_filter.text_items, ti->gfx_filter);
@@ -965,12 +965,6 @@ _line_free(Evas_Object_Textblock_Line *ln)
*/
-/**
- * @internal
- * @var escape_values_e_sorted[]
- * This array consists of Escape_Value structure sorted by escape string
- * And new added value must be placed sorted position, and reflected on escape_values_v_sorted
- */
typedef struct _Escape_Value Escape_Value;
struct _Escape_Value
@@ -983,7 +977,27 @@ struct _Escape_Value
#define ESCAPE_VALUE(e,v) {e,v,strlen(e),strlen(v)}
-static const Escape_Value escape_values_e_sorted[] = {
+/**
+ * @internal
+ * @var html_common_escapes[]
+ * This array consists of most common html escapes values as _Escape_Value structure
+ */
+static const Escape_Value html_common_escapes[] = {
+ ESCAPE_VALUE("&amp;", "\x26"),
+ ESCAPE_VALUE("&apos;", "\x27"),
+ ESCAPE_VALUE("&gt;", "\x3e"),
+ ESCAPE_VALUE("&lt;", "\x3c"),
+ ESCAPE_VALUE("&quot;", "\x22"),
+};
+
+
+/**
+ * @internal
+ * @var escape_values_e_common_sorted[]
+ * This array consists of rest html escapes values as _Escape_Value structure
+ */
+
+static const Escape_Value html_escapes[] = {
ESCAPE_VALUE("&Aacute;", "\xc3\x81"),
ESCAPE_VALUE("&Acirc;", "\xc3\x82"),
ESCAPE_VALUE("&Aelig;", "\xc3\x86"),
@@ -1101,7 +1115,7 @@ static const Escape_Value escape_values_e_sorted[] = {
ESCAPE_VALUE("&psi;", "\xce\xa8"),
ESCAPE_VALUE("&raquo;", "\xc2\xbb"),
ESCAPE_VALUE("&rarr;", "\xe2\x86\x92"),
- ESCAPE_VALUE("&rarr;", "\xe2\x87\x92"),
+ ESCAPE_VALUE("&rArr;", "\xe2\x87\x92"),
ESCAPE_VALUE("&reg;", "\xc2\xae"),
ESCAPE_VALUE("&rho;", "\xce\xa1"),
ESCAPE_VALUE("&rlm;", "\xe2\x80\x8f"),
@@ -1133,190 +1147,182 @@ static const Escape_Value escape_values_e_sorted[] = {
ESCAPE_VALUE("&zwnj;", "\xe2\x80\x8c"),
};
+static int
+_escape_key_sort(const void *a, const void *b)
+{
+ const char *k_a = (*(const Escape_Value **) a)->escape;
+ const char *k_b = (*(const Escape_Value **) b)->escape;
+ return strcmp(k_a, k_b);
+}
-/**
- * @internal
- * @var escape_values_e_common_sorted[]
- * same as escape_values_e_sorted with small subset of common escapes
- */
-static const Escape_Value escape_values_e_common_sorted[] = {
- ESCAPE_VALUE("&amp;", "\x26"),
- ESCAPE_VALUE("&apos;", "\x27"),
- ESCAPE_VALUE("&gt;", "\x3e"),
- ESCAPE_VALUE("&lt;", "\x3c"),
- ESCAPE_VALUE("&quot;", "\x22"),
-};
+static int
+_escape_value_sort(const void *a, const void *b)
+{
+ const char *v_a = (*(const Escape_Value **) a)->value;
+ const char *v_b = (*(const Escape_Value **) b)->value;
+ return strcmp(v_a, v_b);
+}
-/**
- * @internal
- * @var escape_values_v_sorted[]
- * This array consists of Escape_Value structure sorted by escape value
- * And new added value must be placed sorted position, and reflected on escape_values_e_sorted
- */
-static const Escape_Value escape_values_v_sorted[] = {
- ESCAPE_VALUE("&nbsp;", "\xc2\xa0"),
- ESCAPE_VALUE("&iexcl;", "\xc2\xa1"),
- ESCAPE_VALUE("&cent;", "\xc2\xa2"),
- ESCAPE_VALUE("&pound;", "\xc2\xa3"),
- ESCAPE_VALUE("&curren;", "\xc2\xa4"),
- ESCAPE_VALUE("&yen;", "\xc2\xa5"),
- ESCAPE_VALUE("&brvbar;", "\xc2\xa6"),
- ESCAPE_VALUE("&sect;", "\xc2\xa7"),
- ESCAPE_VALUE("&uml;", "\xc2\xa8"),
- ESCAPE_VALUE("&copy;", "\xc2\xa9"),
- ESCAPE_VALUE("&ordf;", "\xc2\xaa"),
- ESCAPE_VALUE("&laquo;", "\xc2\xab"),
- ESCAPE_VALUE("&not;", "\xc2\xac"),
- ESCAPE_VALUE("&shy;", "\xc2\xad"),
- ESCAPE_VALUE("&reg;", "\xc2\xae"),
- ESCAPE_VALUE("&macr;", "\xc2\xaf"),
- ESCAPE_VALUE("&deg;", "\xc2\xb0"),
- ESCAPE_VALUE("&plusmn;", "\xc2\xb1"),
- ESCAPE_VALUE("&sup2;", "\xc2\xb2"),
- ESCAPE_VALUE("&sup3;", "\xc2\xb3"),
- ESCAPE_VALUE("&acute;", "\xc2\xb4"),
- ESCAPE_VALUE("&micro;", "\xc2\xb5"),
- ESCAPE_VALUE("&para;", "\xc2\xb6"),
- ESCAPE_VALUE("&middot;", "\xc2\xb7"),
- ESCAPE_VALUE("&cedil;", "\xc2\xb8"),
- ESCAPE_VALUE("&sup1;", "\xc2\xb9"),
- ESCAPE_VALUE("&ordm;", "\xc2\xba"),
- ESCAPE_VALUE("&raquo;", "\xc2\xbb"),
- ESCAPE_VALUE("&frac14;", "\xc2\xbc"),
- ESCAPE_VALUE("&frac12;", "\xc2\xbd"),
- ESCAPE_VALUE("&frac34;", "\xc2\xbe"),
- ESCAPE_VALUE("&iquest;", "\xc2\xbf"),
- ESCAPE_VALUE("&Agrave;", "\xc3\x80"),
- ESCAPE_VALUE("&Aacute;", "\xc3\x81"),
- ESCAPE_VALUE("&Acirc;", "\xc3\x82"),
- ESCAPE_VALUE("&Atilde;", "\xc3\x83"),
- ESCAPE_VALUE("&Auml;", "\xc3\x84"),
- ESCAPE_VALUE("&Aring;", "\xc3\x85"),
- ESCAPE_VALUE("&Aelig;", "\xc3\x86"),
- ESCAPE_VALUE("&Ccedil;", "\xc3\x87"),
- ESCAPE_VALUE("&Egrave;", "\xc3\x88"),
- ESCAPE_VALUE("&Eacute;", "\xc3\x89"),
- ESCAPE_VALUE("&Ecirc;", "\xc3\x8a"),
- ESCAPE_VALUE("&Euml;", "\xc3\x8b"),
- ESCAPE_VALUE("&Igrave;", "\xc3\x8c"),
- ESCAPE_VALUE("&Iacute;", "\xc3\x8d"),
- ESCAPE_VALUE("&Icirc;", "\xc3\x8e"),
- ESCAPE_VALUE("&Iuml;", "\xc3\x8f"),
- ESCAPE_VALUE("&Eth;", "\xc3\x90"),
- ESCAPE_VALUE("&Ntilde;", "\xc3\x91"),
- ESCAPE_VALUE("&Ograve;", "\xc3\x92"),
- ESCAPE_VALUE("&Oacute;", "\xc3\x93"),
- ESCAPE_VALUE("&Ocirc;", "\xc3\x94"),
- ESCAPE_VALUE("&Otilde;", "\xc3\x95"),
- ESCAPE_VALUE("&Ouml;", "\xc3\x96"),
- ESCAPE_VALUE("&times;", "\xc3\x97"),
- ESCAPE_VALUE("&Oslash;", "\xc3\x98"),
- ESCAPE_VALUE("&Ugrave;", "\xc3\x99"),
- ESCAPE_VALUE("&Uacute;", "\xc3\x9a"),
- ESCAPE_VALUE("&Ucirc;", "\xc3\x9b"),
- ESCAPE_VALUE("&Yacute;", "\xc3\x9d"),
- ESCAPE_VALUE("&Thorn;", "\xc3\x9e"),
- ESCAPE_VALUE("&szlig;", "\xc3\x9f"),
- ESCAPE_VALUE("&agrave;", "\xc3\xa0"),
- ESCAPE_VALUE("&aacute;", "\xc3\xa1"),
- ESCAPE_VALUE("&acirc;", "\xc3\xa2"),
- ESCAPE_VALUE("&atilde;", "\xc3\xa3"),
- ESCAPE_VALUE("&auml;", "\xc3\xa4"),
- ESCAPE_VALUE("&aring;", "\xc3\xa5"),
- ESCAPE_VALUE("&aelig;", "\xc3\xa6"),
- ESCAPE_VALUE("&ccedil;", "\xc3\xa7"),
- ESCAPE_VALUE("&egrave;", "\xc3\xa8"),
- ESCAPE_VALUE("&eacute;", "\xc3\xa9"),
- ESCAPE_VALUE("&ecirc;", "\xc3\xaa"),
- ESCAPE_VALUE("&euml;", "\xc3\xab"),
- ESCAPE_VALUE("&igrave;", "\xc3\xac"),
- ESCAPE_VALUE("&iacute;", "\xc3\xad"),
- ESCAPE_VALUE("&icirc;", "\xc3\xae"),
- ESCAPE_VALUE("&iuml;", "\xc3\xaf"),
- ESCAPE_VALUE("&eth;", "\xc3\xb0"),
- ESCAPE_VALUE("&ntilde;", "\xc3\xb1"),
- ESCAPE_VALUE("&ograve;", "\xc3\xb2"),
- ESCAPE_VALUE("&oacute;", "\xc3\xb3"),
- ESCAPE_VALUE("&ocirc;", "\xc3\xb4"),
- ESCAPE_VALUE("&otilde;", "\xc3\xb5"),
- ESCAPE_VALUE("&ouml;", "\xc3\xb6"),
- ESCAPE_VALUE("&divide;", "\xc3\xb7"),
- ESCAPE_VALUE("&oslash;", "\xc3\xb8"),
- ESCAPE_VALUE("&ugrave;", "\xc3\xb9"),
- ESCAPE_VALUE("&uacute;", "\xc3\xba"),
- ESCAPE_VALUE("&ucirc;", "\xc3\xbb"),
- ESCAPE_VALUE("&uuml;", "\xc3\xbc"),
- ESCAPE_VALUE("&yacute;", "\xc3\xbd"),
- ESCAPE_VALUE("&thorn;", "\xc3\xbe"),
- ESCAPE_VALUE("&yuml;", "\xc3\xbf"),
- ESCAPE_VALUE("&alpha;", "\xce\x91"),
- ESCAPE_VALUE("&beta;", "\xce\x92"),
- ESCAPE_VALUE("&gamma;", "\xce\x93"),
- ESCAPE_VALUE("&delta;", "\xce\x94"),
- ESCAPE_VALUE("&epsilon;", "\xce\x95"),
- ESCAPE_VALUE("&zeta;", "\xce\x96"),
- ESCAPE_VALUE("&eta;", "\xce\x97"),
- ESCAPE_VALUE("&theta;", "\xce\x98"),
- ESCAPE_VALUE("&iota;", "\xce\x99"),
- ESCAPE_VALUE("&kappa;", "\xce\x9a"),
- ESCAPE_VALUE("&lambda;", "\xce\x9b"),
- ESCAPE_VALUE("&mu;", "\xce\x9c"),
- ESCAPE_VALUE("&nu;", "\xce\x9d"),
- ESCAPE_VALUE("&xi;", "\xce\x9e"),
- ESCAPE_VALUE("&omicron;", "\xce\x9f"),
- ESCAPE_VALUE("&pi;", "\xce\xa0"),
- ESCAPE_VALUE("&rho;", "\xce\xa1"),
- ESCAPE_VALUE("&sigma;", "\xce\xa3"),
- ESCAPE_VALUE("&tau;", "\xce\xa4"),
- ESCAPE_VALUE("&upsilon;", "\xce\xa5"),
- ESCAPE_VALUE("&phi;", "\xce\xa6"),
- ESCAPE_VALUE("&chi;", "\xce\xa7"),
- ESCAPE_VALUE("&psi;", "\xce\xa8"),
- ESCAPE_VALUE("&omega;", "\xce\xa9"),
- ESCAPE_VALUE("&zwnj;", "\xe2\x80\x8c"),
- ESCAPE_VALUE("&zwj;", "\xe2\x80\x8d"),
- ESCAPE_VALUE("&lrm;", "\xe2\x80\x8e"),
- ESCAPE_VALUE("&rlm;", "\xe2\x80\x8f"),
- ESCAPE_VALUE("&dagger;", "\xe2\x80\xa0"),
- ESCAPE_VALUE("&Dagger;", "\xe2\x80\xa1"),
- ESCAPE_VALUE("&bull;", "\xe2\x80\xa2"),
- ESCAPE_VALUE("&hellip;", "\xe2\x80\xa6"),
- ESCAPE_VALUE("&euro;", "\xe2\x82\xac"),
- ESCAPE_VALUE("&larr;", "\xe2\x86\x90"),
- ESCAPE_VALUE("&uarr;", "\xe2\x86\x91"),
- ESCAPE_VALUE("&rarr;", "\xe2\x86\x92"),
- ESCAPE_VALUE("&darr;", "\xe2\x86\x93"),
- ESCAPE_VALUE("&harr;", "\xe2\x86\x94"),
- ESCAPE_VALUE("&larr;", "\xe2\x87\x90"),
- ESCAPE_VALUE("&rarr;", "\xe2\x87\x92"),
- ESCAPE_VALUE("&forall;", "\xe2\x88\x80"),
- ESCAPE_VALUE("&exist;", "\xe2\x88\x83"),
- ESCAPE_VALUE("&nabla;", "\xe2\x88\x87"),
- ESCAPE_VALUE("&prod;", "\xe2\x88\x8f"),
- ESCAPE_VALUE("&sum;", "\xe2\x88\x91"),
- ESCAPE_VALUE("&and;", "\xe2\x88\xa7"),
- ESCAPE_VALUE("&or;", "\xe2\x88\xa8"),
- ESCAPE_VALUE("&int;", "\xe2\x88\xab"),
- ESCAPE_VALUE("&ne;", "\xe2\x89\xa0"),
- ESCAPE_VALUE("&equiv;", "\xe2\x89\xa1"),
- ESCAPE_VALUE("&oplus;", "\xe2\x8a\x95"),
- ESCAPE_VALUE("&perp;", "\xe2\x8a\xa5"),
-};
+static Escape_Value **
+escape_sorted_common_key_copy()
+{
+ int i;
+ int len;
+ const Escape_Value *source;
+ int (*compare_fun)(const void*,const void*);
-/**
- * @internal
- * @var escape_values_v_common_sorted[]
- * same as escape_values_v_sorted with small subset of common escapes
- */
-static const Escape_Value escape_values_v_common_sorted[] = {
- ESCAPE_VALUE("&quot;", "\x22"),
- ESCAPE_VALUE("&amp;", "\x26"),
- ESCAPE_VALUE("&apos;", "\x27"),
- ESCAPE_VALUE("&lt;", "\x3c"),
- ESCAPE_VALUE("&gt;", "\x3e"),
-};
+ len = sizeof(html_common_escapes) / sizeof(Escape_Value);
+ source = html_common_escapes;
+
+ compare_fun = _escape_key_sort;
+
+ Escape_Value **ret_list = malloc(len * sizeof(Escape_Value *));
+ for (i = 0 ; i < len ; i++)
+ {
+ ret_list[i] = (Escape_Value *)(&source[i]);
+ }
+
+ qsort(&ret_list[0], len, sizeof(Escape_Value *), compare_fun);
+ return ret_list;
+}
+
+static Escape_Value **
+escape_sorted_common_value_copy()
+{
+ int i;
+ int len;
+ const Escape_Value *source;
+ int (*compare_fun)(const void*,const void*);
+
+ len = sizeof(html_common_escapes) / sizeof(Escape_Value);
+ source = html_common_escapes;
+
+ compare_fun = _escape_value_sort;
+
+ Escape_Value **ret_list = malloc(len * sizeof(Escape_Value *));
+ for (i = 0 ; i < len ; i++)
+ {
+ ret_list[i] = (Escape_Value *)(&source[i]);
+ }
+
+ qsort(&ret_list[0], len, sizeof(Escape_Value *), compare_fun);
+ return ret_list;
+}
+
+static Escape_Value **
+escape_sorted_rest_key_copy()
+{
+ int i;
+ int len;
+ const Escape_Value *source;
+ int (*compare_fun)(const void*,const void*);
+
+ len = sizeof(html_escapes) / sizeof(Escape_Value);
+ source = html_escapes;
+
+ compare_fun = _escape_key_sort;
+
+ Escape_Value **ret_list = malloc(len * sizeof(Escape_Value *));
+ for (i = 0 ; i < len ; i++)
+ {
+ ret_list[i] = (Escape_Value *)(&source[i]);
+ }
+
+ qsort(&ret_list[0], len, sizeof(Escape_Value *), compare_fun);
+ return ret_list;
+}
+
+static Escape_Value **
+escape_sorted_rest_value_copy()
+{
+ int i;
+ int len;
+ const Escape_Value *source;
+ int (*compare_fun)(const void*,const void*);
+ len = sizeof(html_escapes) / sizeof(Escape_Value);
+ source = html_escapes;
+
+ compare_fun = _escape_value_sort;
+
+ Escape_Value **ret_list = malloc(len * sizeof(Escape_Value *));
+ for (i = 0 ; i < len ; i++)
+ {
+ ret_list[i] = (Escape_Value *)(&source[i]);
+ }
+
+ qsort(&ret_list[0], len, sizeof(Escape_Value *), compare_fun);
+ return ret_list;
+}
+static Escape_Value **
+get_html_escape_array_common_key_sorted(size_t *p_len)
+{
+ static Escape_Value **escape_values_common_k_sorted = NULL;
+
+ static size_t common_len = sizeof(html_common_escapes) / sizeof(Escape_Value);
+
+ Escape_Value **ret_list = NULL;
+
+ if (!escape_values_common_k_sorted)
+ escape_values_common_k_sorted = escape_sorted_common_key_copy();
+ ret_list = escape_values_common_k_sorted;
+ if(p_len) *p_len = common_len;
+
+
+ return ret_list;
+}
+
+static Escape_Value **
+get_html_escape_array_common_value_sorted(size_t *p_len)
+{
+ static Escape_Value **escape_values_common_v_sorted = NULL;
+
+ static size_t common_len = sizeof(html_common_escapes) / sizeof(Escape_Value);
+
+ Escape_Value **ret_list = NULL;
+
+ if (!escape_values_common_v_sorted)
+ escape_values_common_v_sorted = escape_sorted_common_value_copy();
+ ret_list = escape_values_common_v_sorted;
+ if(p_len) *p_len = common_len;
+
+
+ return ret_list;
+}
+
+static Escape_Value **
+get_html_escape_array_rest_key_sorted(size_t *p_len)
+{
+ static Escape_Value **escape_values_k_sorted = NULL;
+
+ static size_t rest_len = sizeof(html_escapes) / sizeof(Escape_Value);
+
+ Escape_Value **ret_list = NULL;
+
+ if (!escape_values_k_sorted)
+ escape_values_k_sorted = escape_sorted_rest_key_copy();
+ ret_list = escape_values_k_sorted;
+ if(p_len) *p_len = rest_len;
+
+ return ret_list;
+}
+
+static Escape_Value **
+get_html_escape_array_rest_value_sorted(size_t *p_len)
+{
+ static Escape_Value **escape_values_v_sorted = NULL;
+ static size_t rest_len = sizeof(html_escapes) / sizeof(Escape_Value);
+
+ Escape_Value **ret_list = NULL;
+
+ if (!escape_values_v_sorted)
+ escape_values_v_sorted = escape_sorted_rest_value_copy();
+ ret_list = escape_values_v_sorted;
+ if(p_len) *p_len = rest_len;
+
+ return ret_list;
+}
/**
* @internal
@@ -1398,12 +1404,16 @@ static const char *langstr = NULL;
static const char *colorstr = NULL;
static const char *underline_colorstr = NULL;
static const char *underline2_colorstr = NULL;
+static const char *secondary_underline_colorstr = NULL;
static const char *underline_dash_colorstr = NULL;
+static const char *underline_dashed_colorstr = NULL;
static const char *outline_colorstr = NULL;
static const char *shadow_colorstr = NULL;
static const char *glow_colorstr = NULL;
static const char *glow2_colorstr = NULL;
+static const char *secondary_glow_colorstr = NULL;
static const char *backing_colorstr = NULL;
+static const char *background_colorstr = NULL;
static const char *strikethrough_colorstr = NULL;
static const char *alignstr = NULL;
static const char *valignstr = NULL;
@@ -1412,21 +1422,34 @@ static const char *wrapstr = NULL;
static const char *left_marginstr = NULL;
static const char *right_marginstr = NULL;
static const char *underlinestr = NULL;
+static const char *underline_typestr = NULL;
static const char *strikethroughstr = NULL;
+static const char *strikethrough_typestr = NULL;
static const char *backingstr = NULL;
+static const char *background_typestr = NULL;
static const char *stylestr = NULL;
+static const char *effect_typestr = NULL;
+static const char *shadow_directionstr = NULL;
static const char *tabstopsstr = NULL;
+static const char *tab_stopsstr = NULL;
static const char *linesizestr = NULL;
+static const char *line_sizestr = NULL;
static const char *linerelsizestr = NULL;
+static const char *line_rel_sizestr = NULL;
static const char *linegapstr = NULL;
+static const char *line_gapstr = NULL;
static const char *linerelgapstr = NULL;
+static const char *line_rel_gapstr = NULL;
static const char *itemstr = NULL;
static const char *linefillstr = NULL;
+static const char *line_fillstr = NULL;
static const char *ellipsisstr = NULL;
static const char *passwordstr = NULL;
static const char *replacement_charstr = NULL;
static const char *underline_dash_widthstr = NULL;
+static const char *underline_dashed_widthstr = NULL;
static const char *underline_dash_gapstr = NULL;
+static const char *underline_dashed_gapstr = NULL;
static const char *underline_heightstr = NULL;
static const char *gfx_filterstr = NULL;
@@ -1465,11 +1488,15 @@ _style_string_split(const char *str, char* part1, char* part2)
*temp = 0;
}
-#define FORMAT_SHADOW_SET(evas, efl) {fmt->style = evas; if (set_default) _FMT_INFO(effect) = efl;}
+#define FORMAT_SHADOW_SET(evas, efl) { \
+ if (fmt->style != evas) { fmt->style = evas; changed = EINA_TRUE; } \
+ if (set_default && (_FMT_INFO(effect) != efl)) {_FMT_INFO(effect) = efl; changed = EINA_TRUE;}}
-void
+Eina_Bool
_format_shadow_set(Evas_Object_Textblock_Format *fmt, char *str, Eina_Bool set_default, Efl_Canvas_Textblock_Data *o)
{
+ Eina_Bool changed = EINA_FALSE;
+
if (!strcmp(str, "shadow"))
FORMAT_SHADOW_SET(EVAS_TEXT_STYLE_SHADOW, EFL_TEXT_STYLE_EFFECT_TYPE_SHADOW)
else if (!strcmp(str, "outline"))
@@ -1490,13 +1517,22 @@ _format_shadow_set(Evas_Object_Textblock_Format *fmt, char *str, Eina_Bool set_d
FORMAT_SHADOW_SET(EVAS_TEXT_STYLE_FAR_SOFT_SHADOW, EFL_TEXT_STYLE_EFFECT_TYPE_FAR_SOFT_SHADOW)
else /*off none plain */
FORMAT_SHADOW_SET(EVAS_TEXT_STYLE_PLAIN, EFL_TEXT_STYLE_EFFECT_TYPE_NONE)
+
+ return changed;
}
-#define FORMAT_SHADOW_DIRECTION_SET(direction) {EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(fmt->style, EVAS_TEXT_STYLE_SHADOW_DIRECTION_##direction); if (set_default) _FMT_INFO(shadow_direction) = EFL_TEXT_STYLE_SHADOW_DIRECTION_##direction;}
+#define FORMAT_SHADOW_DIRECTION_SET(direction) { \
+ unsigned char temp = fmt->style; \
+ EVAS_TEXT_STYLE_SHADOW_DIRECTION_SET(fmt->style, EVAS_TEXT_STYLE_SHADOW_DIRECTION_##direction); \
+ changed = (fmt->style != temp); \
+ if (set_default && (_FMT_INFO(shadow_direction) != EFL_TEXT_STYLE_SHADOW_DIRECTION_##direction)) \
+ {_FMT_INFO(shadow_direction) = EFL_TEXT_STYLE_SHADOW_DIRECTION_##direction; changed = EINA_TRUE;}}
-void
+Eina_Bool
_format_shadow_direction_set(Evas_Object_Textblock_Format *fmt, char *str, Eina_Bool set_default, Efl_Canvas_Textblock_Data *o)
{
+ Eina_Bool changed = EINA_FALSE;
+
if (!strcmp(str, "bottom_right"))
FORMAT_SHADOW_DIRECTION_SET(BOTTOM_RIGHT)
else if (!strcmp(str, "bottom"))
@@ -1515,6 +1551,8 @@ _format_shadow_direction_set(Evas_Object_Textblock_Format *fmt, char *str, Eina_
FORMAT_SHADOW_DIRECTION_SET(RIGHT)
else
FORMAT_SHADOW_DIRECTION_SET(BOTTOM_RIGHT)
+
+ return changed;
}
/**
@@ -1585,12 +1623,16 @@ _format_command_init(void)
colorstr = eina_stringshare_add("color");
underline_colorstr = eina_stringshare_add("underline_color");
underline2_colorstr = eina_stringshare_add("underline2_color");
+ secondary_underline_colorstr = eina_stringshare_add("secondary_underline_color");
underline_dash_colorstr = eina_stringshare_add("underline_dash_color");
+ underline_dashed_colorstr = eina_stringshare_add("underline_dashed_color");
outline_colorstr = eina_stringshare_add("outline_color");
shadow_colorstr = eina_stringshare_add("shadow_color");
glow_colorstr = eina_stringshare_add("glow_color");
glow2_colorstr = eina_stringshare_add("glow2_color");
+ secondary_glow_colorstr = eina_stringshare_add("secondary_glow_color");
backing_colorstr = eina_stringshare_add("backing_color");
+ background_colorstr = eina_stringshare_add("background_color");
strikethrough_colorstr = eina_stringshare_add("strikethrough_color");
alignstr = eina_stringshare_add("align");
valignstr = eina_stringshare_add("valign");
@@ -1599,21 +1641,34 @@ _format_command_init(void)
left_marginstr = eina_stringshare_add("left_margin");
right_marginstr = eina_stringshare_add("right_margin");
underlinestr = eina_stringshare_add("underline");
+ underline_typestr = eina_stringshare_add("underline_type");
strikethroughstr = eina_stringshare_add("strikethrough");
+ strikethrough_typestr = eina_stringshare_add("strikethrough_type");
backingstr = eina_stringshare_add("backing");
+ background_typestr = eina_stringshare_add("background_type");
stylestr = eina_stringshare_add("style");
+ effect_typestr = eina_stringshare_add("effect_type");
+ shadow_directionstr = eina_stringshare_add("shadow_direction");
tabstopsstr = eina_stringshare_add("tabstops");
+ tab_stopsstr = eina_stringshare_add("tab_stops");
linesizestr = eina_stringshare_add("linesize");
+ line_sizestr = eina_stringshare_add("line_size");
linerelsizestr = eina_stringshare_add("linerelsize");
+ line_rel_sizestr = eina_stringshare_add("line_rel_size");
linegapstr = eina_stringshare_add("linegap");
+ line_gapstr = eina_stringshare_add("line_gap");
linerelgapstr = eina_stringshare_add("linerelgap");
+ line_rel_gapstr = eina_stringshare_add("line_rel_gap");
itemstr = eina_stringshare_add("item");
linefillstr = eina_stringshare_add("linefill");
+ line_fillstr = eina_stringshare_add("line_fill");
ellipsisstr = eina_stringshare_add("ellipsis");
passwordstr = eina_stringshare_add("password");
replacement_charstr = eina_stringshare_add("replacement_char");
underline_dash_widthstr = eina_stringshare_add("underline_dash_width");
+ underline_dashed_widthstr = eina_stringshare_add("underline_dashed_width");
underline_dash_gapstr = eina_stringshare_add("underline_dash_gap");
+ underline_dashed_gapstr = eina_stringshare_add("underline_dashed_gap");
underline_heightstr = eina_stringshare_add("underline_height");
gfx_filterstr = eina_stringshare_add("gfx_filter"); // FIXME: bg, fg filters
}
@@ -1640,12 +1695,16 @@ _format_command_shutdown(void)
eina_stringshare_del(colorstr);
eina_stringshare_del(underline_colorstr);
eina_stringshare_del(underline2_colorstr);
+ eina_stringshare_del(secondary_underline_colorstr);
eina_stringshare_del(underline_dash_colorstr);
+ eina_stringshare_del(underline_dashed_colorstr);
eina_stringshare_del(outline_colorstr);
eina_stringshare_del(shadow_colorstr);
eina_stringshare_del(glow_colorstr);
eina_stringshare_del(glow2_colorstr);
+ eina_stringshare_del(secondary_glow_colorstr);
eina_stringshare_del(backing_colorstr);
+ eina_stringshare_del(background_colorstr);
eina_stringshare_del(strikethrough_colorstr);
eina_stringshare_del(alignstr);
eina_stringshare_del(valignstr);
@@ -1654,21 +1713,34 @@ _format_command_shutdown(void)
eina_stringshare_del(left_marginstr);
eina_stringshare_del(right_marginstr);
eina_stringshare_del(underlinestr);
+ eina_stringshare_del(underline_typestr);
eina_stringshare_del(strikethroughstr);
+ eina_stringshare_del(strikethrough_typestr);
eina_stringshare_del(backingstr);
+ eina_stringshare_del(background_typestr);
eina_stringshare_del(stylestr);
+ eina_stringshare_del(effect_typestr);
+ eina_stringshare_del(shadow_directionstr);
eina_stringshare_del(tabstopsstr);
+ eina_stringshare_del(tab_stopsstr);
eina_stringshare_del(linesizestr);
+ eina_stringshare_del(line_sizestr);
eina_stringshare_del(linerelsizestr);
+ eina_stringshare_del(line_rel_sizestr);
eina_stringshare_del(linegapstr);
+ eina_stringshare_del(line_gapstr);
eina_stringshare_del(linerelgapstr);
+ eina_stringshare_del(line_rel_gapstr);
eina_stringshare_del(itemstr);
eina_stringshare_del(linefillstr);
+ eina_stringshare_del(line_fillstr);
eina_stringshare_del(ellipsisstr);
eina_stringshare_del(passwordstr);
eina_stringshare_del(replacement_charstr);
eina_stringshare_del(underline_dash_widthstr);
+ eina_stringshare_del(underline_dashed_widthstr);
eina_stringshare_del(underline_dash_gapstr);
+ eina_stringshare_del(underline_dashed_gapstr);
eina_stringshare_del(underline_heightstr);
eina_stringshare_del(gfx_filterstr);
}
@@ -1698,6 +1770,543 @@ _format_clean_param(char *s)
return len;
}
+static void
+_format_command_legacy_only(Evas_Object_Textblock_Format *fmt, const char *cmd, char *param, int len)
+{
+ if (cmd == backing_colorstr)
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_backing_color Backing Color
+ *
+ * Sets a background color for text. The following formats are
+ * accepted:
+ * @li "#RRGGBB"
+ * @li "#RRGGBBAA"
+ * @li "#RGB"
+ * @li "#RGBA"
+ * @li "rgb(r,g,b)"
+ * @li "rgba(r,g,b,a)"
+ * @li "color_name" like "red"
+ * @code
+ * backing_color=<color>
+ * @endcode
+ */
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.backing.r), &(fmt->color.backing.g),
+ &(fmt->color.backing.b), &(fmt->color.backing.a));
+ else if (cmd == backingstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_backing Backing
+ *
+ * Sets if the text will have backing. The value must be one of
+ * the following:
+ * @li "off" - No backing
+ * @li "on" - Backing
+ * @code
+ * backing=on/off
+ * @endcode
+ */
+ if (len == 3 && !strcmp(param, "off"))
+ fmt->backing = 0;
+ else if (len == 2 && !strcmp(param, "on"))
+ fmt->backing = 1;
+ }
+ else if (cmd == underline2_colorstr)
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_underline2_color Second Underline Color
+ *
+ * Sets the color of the second line of underline(when using underline
+ * mode "double"). The following formats are accepted:
+ * @li "#RRGGBB"
+ * @li "#RRGGBBAA"
+ * @li "#RGB"
+ * @li "#RGBA"
+ * @li "rgb(r,g,b)"
+ * @li "rgba(r,g,b,a)"
+ * @li "color_name" like "red"
+ * @code
+ * underline2_color=<color>
+ * @endcode
+ */
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.underline2.r), &(fmt->color.underline2.g),
+ &(fmt->color.underline2.b), &(fmt->color.underline2.a));
+ else if (cmd == glow2_colorstr)
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_glow2_color Second Glow Color
+ *
+ * Sets the second color of the glow of text. The following formats are
+ * accepted:
+ * @li "#RRGGBB"
+ * @li "#RRGGBBAA"
+ * @li "#RGB"
+ * @li "#RGBA"
+ * @li "rgb(r,g,b)"
+ * @li "rgba(r,g,b,a)"
+ * @li "color_name" like "red"
+ * @code
+ * glow2_color=<color>
+ * @endcode
+ */
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.glow2.r), &(fmt->color.glow2.g),
+ &(fmt->color.glow2.b), &(fmt->color.glow2.a));
+ else if (cmd == tabstopsstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_tabstops Tabstops
+ *
+ * Sets the size of the tab character. The value must be a number
+ * greater than one.
+ * @code
+ * tabstops=<number>
+ * @endcode
+ */
+ fmt->tabstops = atoi(param);
+ if (fmt->tabstops < 1) fmt->tabstops = 1;
+ }
+ else if (cmd == linesizestr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_linesize Line size
+ *
+ * Sets the size of line of text. The value should be a number.
+ * @warning Setting this value sets linerelsize to 0%!
+ * @code
+ * linesize=<number>
+ * @endcode
+ */
+ fmt->linesize = atoi(param);
+ fmt->linerelsize = 0.0;
+ }
+ else if (cmd == linerelsizestr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_linerelsize Relative line size
+ *
+ * Sets the relative size of line of text. The value must be a
+ * percentage.
+ * @warning Setting this value sets linesize to 0!
+ * @code
+ * linerelsize=<number>%
+ * @endcode
+ */
+ char *endptr = NULL;
+ double val = strtod(param, &endptr);
+ if (endptr)
+ {
+ while (*endptr && _is_white(*endptr))
+ endptr++;
+ if (*endptr == '%')
+ {
+ fmt->linerelsize = val / 100.0;
+ fmt->linesize = 0;
+ if (fmt->linerelsize < 0.0) fmt->linerelsize = 0.0;
+ }
+ }
+ }
+ else if (cmd == linegapstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_linegap Line gap
+ *
+ * Sets the size of the line gap in text. The value should be a
+ * number.
+ * @warning Setting this value sets linerelgap to 0%!
+ * @code
+ * linegap=<number>
+ * @endcode
+ */
+ fmt->linegap = atoi(param);
+ fmt->linerelgap = 0.0;
+ }
+ else if (cmd == linerelgapstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_linerelgap Relative line gap
+ *
+ * Sets the relative size of the line gap in text. The value must be
+ * a percentage.
+ * @warning Setting this value sets linegap to 0!
+ * @code
+ * linerelgap=<number>%
+ * @endcode
+ */
+ char *endptr = NULL;
+ double val = strtod(param, &endptr);
+ if (endptr)
+ {
+ while (*endptr && _is_white(*endptr))
+ endptr++;
+ if (*endptr == '%')
+ {
+ fmt->linerelgap = val / 100.0;
+ fmt->linegap = 0;
+ if (fmt->linerelgap < 0.0) fmt->linerelgap = 0.0;
+ }
+ }
+ }
+ else if (cmd == linefillstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_linefill Line fill
+ *
+ * Sets the size of the line fill in text. The value must be a
+ * percentage.
+ * @code
+ * linefill=<number>%
+ * @endcode
+ */
+ char *endptr = NULL;
+ double val = strtod(param, &endptr);
+ if (endptr)
+ {
+ while (*endptr && _is_white(*endptr))
+ endptr++;
+ if (*endptr == '%')
+ {
+ fmt->linefill = val / 100.0;
+ if (fmt->linefill < 0.0) fmt->linefill = 0.0;
+ }
+ }
+ }
+ else if (cmd == underline_dash_colorstr)
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_underline_dash_color Underline Dash Color
+ *
+ * Sets the color of dashed underline. The following formats are accepted:
+ * @li "#RRGGBB"
+ * @li "#RRGGBBAA"
+ * @li "#RGB"
+ * @li "#RGBA"
+ * @li "rgb(r,g,b)"
+ * @li "rgba(r,g,b,a)"
+ * @li "color_name" like "red"
+ * @code
+ * underline_dash_color=<color>
+ * @endcode
+ */
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.underline_dash.r), &(fmt->color.underline_dash.g),
+ &(fmt->color.underline_dash.b), &(fmt->color.underline_dash.a));
+ else if (cmd == underlinestr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_underline Underline
+ *
+ * Sets if and how a text will be underlined. The value must be one of
+ * the following:
+ * @li "off" - No underlining
+ * @li "single" - A single line under the text
+ * @li "on" - Alias for "single"
+ * @li "double" - Two lines under the text
+ * @li "dashed" - A dashed line under the text
+ * @code
+ * underline=off/single/on/double/dashed
+ * @endcode
+ */
+ static const struct {
+ const char *param;
+ int len;
+ Eina_Bool underline;
+ Eina_Bool underline2;
+ Eina_Bool underline_dash;
+ } underlines_named[] = {
+ { "off", 3, 0, 0, 0 },
+ { "on", 2, 1, 0, 0 },
+ { "single", 6, 1, 0, 0 },
+ { "double", 6, 1, 1, 0 },
+ { "dashed", 6, 0, 0, 1 },
+ { NULL, 0, 0, 0, 0 }
+ };
+ unsigned int i;
+
+ fmt->underline = fmt->underline2 = fmt->underline_dash = 0;
+ for (i = 0; underlines_named[i].param; ++i)
+ if (underlines_named[i].len == len &&
+ !strcmp(underlines_named[i].param, param))
+ {
+ fmt->underline = underlines_named[i].underline;
+ fmt->underline2 = underlines_named[i].underline2;
+ fmt->underline_dash = underlines_named[i].underline_dash;
+ break;
+ }
+ }
+ else if (cmd == strikethroughstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_strikethrough Strikethrough
+ *
+ * Sets if the text will be striked through. The value must be one of
+ * the following:
+ * @li "off" - No strikethrough
+ * @li "on" - Strikethrough
+ * @code
+ * strikethrough=on/off
+ * @endcode
+ */
+ if (len == 3 && !strcmp(param, "off"))
+ fmt->strikethrough = 0;
+ else if (len == 2 && !strcmp(param, "on"))
+ fmt->strikethrough = 1;
+ }
+ else if (cmd == stylestr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_style Style
+ *
+ * Sets the style of the text. The value must be a string composed of
+ * two comma separated parts. The first part of the value sets the
+ * appearance of the text, the second the position.
+ *
+ * The first part may be any of the following values:
+ * @li "plain"
+ * @li "off" - Alias for "plain"
+ * @li "none" - Alias for "plain"
+ * @li "shadow"
+ * @li "outline"
+ * @li "soft_outline"
+ * @li "outline_shadow"
+ * @li "outline_soft_shadow"
+ * @li "glow"
+ * @li "far_shadow"
+ * @li "soft_shadow"
+ * @li "far_soft_shadow"
+ * The second part may be any of the following values:
+ * @li "bottom_right"
+ * @li "bottom"
+ * @li "bottom_left"
+ * @li "left"
+ * @li "top_left"
+ * @li "top"
+ * @li "top_right"
+ * @li "right"
+ * @code
+ * style=<appearance>,<position>
+ * @endcode
+ */
+ char *part1, *part2;
+
+ part1 = alloca(len + 1);
+ *part1 = 0;
+
+ part2 = alloca(len + 1);
+ *part2 = 0;
+
+ _style_string_split(param, part1, part2);
+
+ _format_shadow_set(fmt, part1, EINA_FALSE, NULL);
+
+ if (*part2)
+ _format_shadow_direction_set(fmt, part2, EINA_FALSE, NULL);
+ }
+ else if (cmd == underline_dash_widthstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_underline_dash_width Underline dash width
+ *
+ * Sets the width of the underline dash. The value should be a number.
+ * @code
+ * underline_dash_width=<number>
+ * @endcode
+ */
+ fmt->underline_dash_width = atoi(param);
+ if (fmt->underline_dash_width <= 0) fmt->underline_dash_width = 1;
+ }
+ else if (cmd == underline_dash_gapstr)
+ {
+ /**
+ * @page evas_textblock_style_page Evas Textblock Style Options
+ *
+ * @subsection evas_textblock_style_underline_dash_gap Underline dash gap
+ *
+ * Sets the gap of the underline dash. The value should be a number.
+ * @code
+ * underline_dash_gap=<number>
+ * @endcode
+ */
+ fmt->underline_dash_gap = atoi(param);
+ if (fmt->underline_dash_gap <= 0) fmt->underline_dash_gap = 1;
+ }
+}
+
+static void
+_format_command_unified_only( Efl_Canvas_Textblock_Data *o, Evas_Object_Textblock_Format *fmt, const char *cmd, char *param, int len)
+{
+ if (cmd == background_colorstr)
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.backing.r), &(fmt->color.backing.g),
+ &(fmt->color.backing.b), &(fmt->color.backing.a));
+ else if (cmd == background_typestr)
+ {
+ if (len == 4 && !strcmp(param, "none"))
+ fmt->backing = 0;
+ else if (len == 5 && !strcmp(param, "solid"))
+ fmt->backing = 1;
+ }
+ else if (cmd == secondary_underline_colorstr)
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.underline2.r), &(fmt->color.underline2.g),
+ &(fmt->color.underline2.b), &(fmt->color.underline2.a));
+ else if (cmd == secondary_glow_colorstr)
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.glow2.r), &(fmt->color.glow2.g),
+ &(fmt->color.glow2.b), &(fmt->color.glow2.a));
+ else if (cmd == tab_stopsstr)
+ {
+ fmt->tabstops = atoi(param);
+ if (fmt->tabstops < 1) fmt->tabstops = 1;
+ }
+ else if (cmd == line_sizestr)
+ {
+ fmt->linesize = atoi(param);
+ fmt->linerelsize = 0.0;
+ }
+ else if (cmd == line_rel_sizestr)
+ {
+ char *endptr = NULL;
+ double val = strtod(param, &endptr);
+ if (endptr)
+ {
+ while (*endptr && _is_white(*endptr))
+ endptr++;
+ if (*endptr == '%')
+ {
+ fmt->linerelsize = val / 100.0;
+ fmt->linesize = 0;
+ if (fmt->linerelsize < 0.0) fmt->linerelsize = 0.0;
+ }
+ }
+ }
+ else if (cmd == line_gapstr)
+ {
+ fmt->linegap = atoi(param);
+ fmt->linerelgap = 0.0;
+ }
+ else if (cmd == line_rel_gapstr)
+ {
+ char *endptr = NULL;
+ double val = strtod(param, &endptr);
+ if (endptr)
+ {
+ while (*endptr && _is_white(*endptr))
+ endptr++;
+ if (*endptr == '%')
+ {
+ fmt->linerelgap = val / 100.0;
+ fmt->linegap = 0;
+ if (fmt->linerelgap < 0.0) fmt->linerelgap = 0.0;
+ }
+ }
+ }
+ else if (cmd == line_fillstr)
+ {
+ char *endptr = NULL;
+ double val = strtod(param, &endptr);
+ if (endptr)
+ {
+ while (*endptr && _is_white(*endptr))
+ endptr++;
+ if (*endptr == '%')
+ {
+ fmt->linefill = val / 100.0;
+ if (fmt->linefill < 0.0) fmt->linefill = 0.0;
+ }
+ }
+ }
+ else if (cmd == underline_dashed_colorstr)
+ evas_common_format_color_parse(param, len,
+ &(fmt->color.underline_dash.r), &(fmt->color.underline_dash.g),
+ &(fmt->color.underline_dash.b), &(fmt->color.underline_dash.a));
+ else if (cmd == underline_typestr)
+ {
+ typedef struct {
+ const char *param;
+ int len;
+ Eina_Bool underline;
+ Eina_Bool underline2;
+ Eina_Bool underline_dash;
+ } Underline_Info;
+
+ fmt->underline = fmt->underline2 = fmt->underline_dash = 0;
+ unsigned int i;
+ #define SET_UNDERLINE_VALUES() \
+ for (i = 0; underlines_named[i].param; ++i) { \
+ if (underlines_named[i].len == len && \
+ !strcmp(underlines_named[i].param, param)) \
+ { \
+ fmt->underline = underlines_named[i].underline; \
+ fmt->underline2 = underlines_named[i].underline2; \
+ fmt->underline_dash = underlines_named[i].underline_dash; \
+ break;\
+ } \
+ }
+ static Underline_Info underlines_named[] = {
+ { "none", 4, 0, 0, 0 },
+ { "single", 6, 1, 0, 0 },
+ { "double", 6, 1, 1, 0 },
+ { "dashed", 6, 0, 0, 1 },
+ { NULL, 0, 0, 0, 0 }
+ };
+ SET_UNDERLINE_VALUES();
+ }
+ else if (cmd == strikethrough_typestr)
+ {
+ if (len == 4 && !strcmp(param, "none"))
+ fmt->strikethrough = 0;
+ else if (len == 6 && !strcmp(param, "single"))
+ fmt->strikethrough = 1;
+ }
+ else if (cmd == effect_typestr)
+ {
+ _format_shadow_set(fmt, param, EINA_TRUE, o);
+ }
+ else if (cmd == shadow_directionstr)
+ {
+ _format_shadow_direction_set(fmt, param, EINA_TRUE, o);
+ }
+ else if (cmd == underline_dashed_widthstr)
+ {
+ fmt->underline_dash_width = atoi(param);
+ if (fmt->underline_dash_width <= 0) fmt->underline_dash_width = 1;
+ }
+ else if (cmd == underline_dashed_gapstr)
+ {
+ fmt->underline_dash_gap = atoi(param);
+ if (fmt->underline_dash_gap <= 0) fmt->underline_dash_gap = 1;
+ }
+}
+
/**
* @internal
* Parses the cmd and parameter and adds the parsed format to fmt.
@@ -1711,6 +2320,8 @@ static void
_format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const char *cmd, char *param)
{
int len;
+ Efl_Canvas_Textblock_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
+ Eina_Bool is_legacy = o->is_legacy;
len = _format_clean_param(param);
@@ -1936,49 +2547,6 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
evas_common_format_color_parse(param, len,
&(fmt->color.underline.r), &(fmt->color.underline.g),
&(fmt->color.underline.b), &(fmt->color.underline.a));
- else if (cmd == underline2_colorstr)
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_underline2_color Second Underline Color
- *
- * Sets the color of the second line of underline(when using underline
- * mode "double"). The following formats are accepted:
- * @li "#RRGGBB"
- * @li "#RRGGBBAA"
- * @li "#RGB"
- * @li "#RGBA"
- * @li "rgb(r,g,b)"
- * @li "rgba(r,g,b,a)"
- * @li "color_name" like "red"
- * @code
- * underline2_color=<color>
- * @endcode
- */
- evas_common_format_color_parse(param, len,
- &(fmt->color.underline2.r), &(fmt->color.underline2.g),
- &(fmt->color.underline2.b), &(fmt->color.underline2.a));
- else if (cmd == underline_dash_colorstr)
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_underline_dash_color Underline Dash Color
- *
- * Sets the color of dashed underline. The following formats are accepted:
- * @li "#RRGGBB"
- * @li "#RRGGBBAA"
- * @li "#RGB"
- * @li "#RGBA"
- * @li "rgb(r,g,b)"
- * @li "rgba(r,g,b,a)"
- * @li "color_name" like "red"
- * @code
- * underline_dash_color=<color>
- * @endcode
- */
- evas_common_format_color_parse(param, len,
- &(fmt->color.underline_dash.r), &(fmt->color.underline_dash.g),
- &(fmt->color.underline_dash.b), &(fmt->color.underline_dash.a));
else if (cmd == outline_colorstr)
/**
* @page evas_textblock_style_page Evas Textblock Style Options
@@ -2045,50 +2613,6 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
evas_common_format_color_parse(param, len,
&(fmt->color.glow.r), &(fmt->color.glow.g),
&(fmt->color.glow.b), &(fmt->color.glow.a));
- else if (cmd == glow2_colorstr)
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_glow2_color Second Glow Color
- *
- * Sets the second color of the glow of text. The following formats are
- * accepted:
- * @li "#RRGGBB"
- * @li "#RRGGBBAA"
- * @li "#RGB"
- * @li "#RGBA"
- * @li "rgb(r,g,b)"
- * @li "rgba(r,g,b,a)"
- * @li "color_name" like "red"
- * @code
- * glow2_color=<color>
- * @endcode
- */
- evas_common_format_color_parse(param, len,
- &(fmt->color.glow2.r), &(fmt->color.glow2.g),
- &(fmt->color.glow2.b), &(fmt->color.glow2.a));
- else if (cmd == backing_colorstr)
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_backing_color Backing Color
- *
- * Sets a background color for text. The following formats are
- * accepted:
- * @li "#RRGGBB"
- * @li "#RRGGBBAA"
- * @li "#RGB"
- * @li "#RGBA"
- * @li "rgb(r,g,b)"
- * @li "rgba(r,g,b,a)"
- * @li "color_name" like "red"
- * @code
- * backing_color=<color>
- * @endcode
- */
- evas_common_format_color_parse(param, len,
- &(fmt->color.backing.r), &(fmt->color.backing.g),
- &(fmt->color.backing.b), &(fmt->color.backing.a));
else if (cmd == strikethrough_colorstr)
/**
* @page evas_textblock_style_page Evas Textblock Style Options
@@ -2128,9 +2652,9 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
* @li "right" - Puts the text at the right of the line
* @li "start" - Respects LTR/RTL settings. It is same with "auto"
* @li "end" - Puts the text at the opposite side of LTR/RTL settings
- * @li <number> - A number between 0.0 and 1.0 where 0.0 represents
+ * @li \<number\> - A number between 0.0 and 1.0 where 0.0 represents
* "left" and 1.0 represents "right"
- * @li <number>% - A percentage between 0% and 100% where 0%
+ * @li \<number\>% - A percentage between 0% and 100% where 0%
* represents "left" and 100% represents "right"
* @code
* align=<value or preset>
@@ -2205,9 +2729,9 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
* @li "bottom" - Puts the text at the bottom of the line
* @li "baseline" - Baseline
* @li "base" - Alias for "baseline"
- * @li <number> - A number between 0.0 and 1.0 where 0.0 represents
+ * @li \<number\> - A number between 0.0 and 1.0 where 0.0 represents
* "top" and 1.0 represents "bottom"
- * @li <number>% - A percentage between 0% and 100% where 0%
+ * @li \<number\>% - A percentage between 0% and 100% where 0%
* represents "top" and 100% represents "bottom"
* @code
* valign=<value or preset>
@@ -2330,9 +2854,9 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
*
* Sets the left margin of the text. The value can be a number, an
* increment, decrement or "reset":
- * @li +<number> - Increments existing left margin by <number>
- * @li -<number> - Decrements existing left margin by <number>
- * @li <number> - Sets left margin to <number>
+ * @li +\<number\> - Increments existing left margin by \<number\>
+ * @li -\<number\> - Decrements existing left margin by \<number\>
+ * @li \<number\> - Sets left margin to \<number\>
* @li "reset" - Sets left margin to 0
* @code
* left_margin=<value or reset>
@@ -2360,9 +2884,9 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
*
* Sets the right margin of the text. The value can be a number, an
* increment, decrement or "reset":
- * @li +<number> - Increments existing right margin by <number>
- * @li -<number> - Decrements existing right margin by <number>
- * @li <number> - Sets left margin to <number>
+ * @li +\<number\> - Increments existing right margin by \<number\>
+ * @li -\<number\> - Decrements existing right margin by \<number\>
+ * @li \<number\> - Sets left margin to \<number\>
* @li "reset" - Sets left margin to 0
* @code
* right_margin=<value or reset>
@@ -2381,248 +2905,6 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
if (fmt->margin.r < 0) fmt->margin.r = 0;
}
}
- else if (cmd == underlinestr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_underline Underline
- *
- * Sets if and how a text will be underlined. The value must be one of
- * the following:
- * @li "off" - No underlining
- * @li "single" - A single line under the text
- * @li "on" - Alias for "single"
- * @li "double" - Two lines under the text
- * @li "dashed" - A dashed line under the text
- * @code
- * underline=off/single/on/double/dashed
- * @endcode
- */
- static const struct {
- const char *param;
- int len;
- Eina_Bool underline;
- Eina_Bool underline2;
- Eina_Bool underline_dash;
- } underlines_named[] = {
- { "off", 3, 0, 0, 0 },
- { "on", 2, 1, 0, 0 },
- { "single", 6, 1, 0, 0 },
- { "double", 6, 1, 1, 0 },
- { "dashed", 6, 0, 0, 1 },
- { NULL, 0, 0, 0, 0 }
- };
- unsigned int i;
-
- fmt->underline = fmt->underline2 = fmt->underline_dash = 0;
- for (i = 0; underlines_named[i].param; ++i)
- if (underlines_named[i].len == len &&
- !strcmp(underlines_named[i].param, param))
- {
- fmt->underline = underlines_named[i].underline;
- fmt->underline2 = underlines_named[i].underline2;
- fmt->underline_dash = underlines_named[i].underline_dash;
- break;
- }
- }
- else if (cmd == strikethroughstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_strikethrough Strikethrough
- *
- * Sets if the text will be striked through. The value must be one of
- * the following:
- * @li "off" - No strikethrough
- * @li "on" - Strikethrough
- * @code
- * strikethrough=on/off
- * @endcode
- */
- if (len == 3 && !strcmp(param, "off"))
- fmt->strikethrough = 0;
- else if (len == 2 && !strcmp(param, "on"))
- fmt->strikethrough = 1;
- }
- else if (cmd == backingstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_backing Backing
- *
- * Sets if the text will have backing. The value must be one of
- * the following:
- * @li "off" - No backing
- * @li "on" - Backing
- * @code
- * backing=on/off
- * @endcode
- */
- if (len == 3 && !strcmp(param, "off"))
- fmt->backing = 0;
- else if (len == 2 && !strcmp(param, "on"))
- fmt->backing = 1;
- }
- else if (cmd == stylestr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_style Style
- *
- * Sets the style of the text. The value must be a string composed of
- * two comma separated parts. The first part of the value sets the
- * appearance of the text, the second the position.
- *
- * The first part may be any of the following values:
- * @li "plain"
- * @li "off" - Alias for "plain"
- * @li "none" - Alias for "plain"
- * @li "shadow"
- * @li "outline"
- * @li "soft_outline"
- * @li "outline_shadow"
- * @li "outline_soft_shadow"
- * @li "glow"
- * @li "far_shadow"
- * @li "soft_shadow"
- * @li "far_soft_shadow"
- * The second part may be any of the following values:
- * @li "bottom_right"
- * @li "bottom"
- * @li "bottom_left"
- * @li "left"
- * @li "top_left"
- * @li "top"
- * @li "top_right"
- * @li "right"
- * @code
- * style=<appearance>,<position>
- * @endcode
- */
- char *part1, *part2;
-
- part1 = alloca(len + 1);
- *part1 = 0;
-
- part2 = alloca(len + 1);
- *part2 = 0;
-
- _style_string_split(param, part1, part2);
-
- _format_shadow_set(fmt, part1, EINA_FALSE, NULL);
-
- if (*part2)
- _format_shadow_direction_set(fmt, part2, EINA_FALSE, NULL);
- }
- else if (cmd == tabstopsstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_tabstops Tabstops
- *
- * Sets the size of the tab character. The value must be a number
- * greater than one.
- * @code
- * tabstops=<number>
- * @endcode
- */
- fmt->tabstops = atoi(param);
- if (fmt->tabstops < 1) fmt->tabstops = 1;
- }
- else if (cmd == linesizestr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_linesize Line size
- *
- * Sets the size of line of text. The value should be a number.
- * @warning Setting this value sets linerelsize to 0%!
- * @code
- * linesize=<number>
- * @endcode
- */
- fmt->linesize = atoi(param);
- fmt->linerelsize = 0.0;
- }
- else if (cmd == linerelsizestr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_linerelsize Relative line size
- *
- * Sets the relative size of line of text. The value must be a
- * percentage.
- * @warning Setting this value sets linesize to 0!
- * @code
- * linerelsize=<number>%
- * @endcode
- */
- char *endptr = NULL;
- double val = strtod(param, &endptr);
- if (endptr)
- {
- while (*endptr && _is_white(*endptr))
- endptr++;
- if (*endptr == '%')
- {
- fmt->linerelsize = val / 100.0;
- fmt->linesize = 0;
- if (fmt->linerelsize < 0.0) fmt->linerelsize = 0.0;
- }
- }
- }
- else if (cmd == linegapstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_linegap Line gap
- *
- * Sets the size of the line gap in text. The value should be a
- * number.
- * @warning Setting this value sets linerelgap to 0%!
- * @code
- * linegap=<number>
- * @endcode
- */
- fmt->linegap = atoi(param);
- fmt->linerelgap = 0.0;
- }
- else if (cmd == linerelgapstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_linerelgap Relative line gap
- *
- * Sets the relative size of the line gap in text. The value must be
- * a percentage.
- * @warning Setting this value sets linegap to 0!
- * @code
- * linerelgap=<number>%
- * @endcode
- */
- char *endptr = NULL;
- double val = strtod(param, &endptr);
- if (endptr)
- {
- while (*endptr && _is_white(*endptr))
- endptr++;
- if (*endptr == '%')
- {
- fmt->linerelgap = val / 100.0;
- fmt->linegap = 0;
- if (fmt->linerelgap < 0.0) fmt->linerelgap = 0.0;
- }
- }
- }
else if (cmd == itemstr)
{
/**
@@ -2638,32 +2920,6 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
// itemstr == replacement object items in textblock - inline imges
// for example
}
- else if (cmd == linefillstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_linefill Line fill
- *
- * Sets the size of the line fill in text. The value must be a
- * percentage.
- * @code
- * linefill=<number>%
- * @endcode
- */
- char *endptr = NULL;
- double val = strtod(param, &endptr);
- if (endptr)
- {
- while (*endptr && _is_white(*endptr))
- endptr++;
- if (*endptr == '%')
- {
- fmt->linefill = val / 100.0;
- if (fmt->linefill < 0.0) fmt->linefill = 0.0;
- }
- }
- }
else if (cmd == ellipsisstr)
{
/**
@@ -2715,36 +2971,6 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
eina_stringshare_replace(&o->repch, param);
}
- else if (cmd == underline_dash_widthstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_underline_dash_width Underline dash width
- *
- * Sets the width of the underline dash. The value should be a number.
- * @code
- * underline_dash_width=<number>
- * @endcode
- */
- fmt->underline_dash_width = atoi(param);
- if (fmt->underline_dash_width <= 0) fmt->underline_dash_width = 1;
- }
- else if (cmd == underline_dash_gapstr)
- {
- /**
- * @page evas_textblock_style_page Evas Textblock Style Options
- *
- * @subsection evas_textblock_style_underline_dash_gap Underline dash gap
- *
- * Sets the gap of the underline dash. The value should be a number.
- * @code
- * underline_dash_gap=<number>
- * @endcode
- */
- fmt->underline_dash_gap = atoi(param);
- if (fmt->underline_dash_gap <= 0) fmt->underline_dash_gap = 1;
- }
else if (cmd == underline_heightstr)
{
/**
@@ -2776,6 +3002,18 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
fmt->gfx_filter = calloc(1, sizeof(Efl_Canvas_Textblock_Filter));
eina_stringshare_replace(&fmt->gfx_filter->name, param);
}
+ else
+ {
+ if (is_legacy)
+ {
+ _format_command_legacy_only(fmt, cmd, param, len);
+ }
+ else
+ {
+ _format_command_unified_only(o, fmt, cmd, param, len);
+ }
+
+ }
}
//FIXME Create common function for both _default _format_command & _format_command
@@ -2940,15 +3178,15 @@ _default_format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt,
part1 = alloca(len + 1);
*part1 = 0;
-
+
part2 = alloca(len + 1);
*part2 = 0;
_style_string_split(param, part1, part2);
- _format_shadow_set(fmt, part1, EINA_TRUE, o);
+ changed = _format_shadow_set(fmt, part1, EINA_TRUE, o);
if (*part2)
- _format_shadow_direction_set(fmt, part2, EINA_TRUE, o);
+ changed = _format_shadow_direction_set(fmt, part2, EINA_TRUE, o) || changed;
}
else
{
@@ -2961,7 +3199,7 @@ _default_format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt,
return changed;
}
-/*
+/*
* @internal
* just to create a constant without using marco
* 2 cacheline is enough for the string we parse
@@ -2970,12 +3208,12 @@ _default_format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt,
*/
enum _Internal{ ALLOCATOR_SIZE = 120 };
-/*
+/*
* @internal
* A simple stack allocator which first
* tries to create a string in the stack (buffer
* it holds). if the string size is bigger than its
- * buffer capacity it will fall back to creating the
+ * buffer capacity it will fall back to creating the
* string on heap.
* USAGE :
* Allocator a;
@@ -3067,6 +3305,22 @@ _format_is_param(const char *item)
/**
* @internal
+ * Returns first occurrence of whitespace character
+ * otherwise return NULL.
+ *
+ * @param[in] string to search.
+ */
+static const char*
+_strchr_whitespace(const char* str)
+{
+ if (!str) return NULL;
+ while (*str && !isspace(*str)) str++;
+ if(*str) return str;
+ return NULL;
+}
+
+/**
+ * @internal
* Parse the format item and populate key and val with the stringshares that
* correspond to the formats parsed.
* It expects item to be of the structure:
@@ -3089,7 +3343,7 @@ _format_param_parse(const char *item, const char **key, char **val, Allocator *a
start++; /* Advance after the '=' */
/* If we can find a quote as the first non-space char,
* our new delimiter is a quote, not a space. */
- while (*start == ' ')
+ while (isspace(*start))
start++;
if (*start == '\'')
@@ -3101,9 +3355,9 @@ _format_param_parse(const char *item, const char **key, char **val, Allocator *a
}
else
{
- end = strchr(start, ' ');
+ end = _strchr_whitespace(start);
while ((end) && (end > start) && (end[-1] == '\\'))
- end = strchr(end + 1, ' ');
+ end = _strchr_whitespace(end + 1);
}
/* Null terminate before the spaces */
@@ -3137,7 +3391,7 @@ end:
* @return the current item parsed from the string.
*/
static const char *
-_format_parse(const char **s)
+_format_parse(const char **s, Eina_Bool all_whitespaces)
{
const char *p;
const char *s1 = NULL, *s2 = NULL;
@@ -3149,7 +3403,13 @@ _format_parse(const char **s)
{
if (!s1)
{
- if (*p != ' ') s1 = p;
+ if (all_whitespaces)
+ {
+ if (!isspace(*p))
+ s1 = p;
+ }
+ else if(*p != ' ')
+ s1 = p;
if (*p == 0) break;
}
else if (!s2)
@@ -3161,7 +3421,13 @@ _format_parse(const char **s)
if ((p > *s) && (p[-1] != '\\') && (!quote))
{
- if (*p == ' ') s2 = p;
+ if (all_whitespaces)
+ {
+ if (isspace(*p))
+ s2 = p;
+ }
+ else if(*p == ' ')
+ s2 = p;
}
if (*p == 0) s2 = p;
}
@@ -3197,12 +3463,12 @@ _format_fill(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const char
s = str;
/* get rid of any spaces at the start of the string */
- while (*s == ' ') s++;
+ while (isspace(*s)) s++;
Allocator allocator;
_allocator_init(&allocator);
- while ((item = _format_parse(&s)))
+ while ((item = _format_parse(&s, EINA_TRUE)))
{
const char *key = NULL;
char *val = NULL;
@@ -3323,10 +3589,10 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
PRINTF_APPEND_COLOR(underline_colorstr, fmt->color.underline.r, fmt->color.underline.g,
fmt->color.underline.b, fmt->color.underline.a);
- PRINTF_APPEND_COLOR(underline2_colorstr, fmt->color.underline2.r, fmt->color.underline2.g,
+ PRINTF_APPEND_COLOR(secondary_underline_colorstr, fmt->color.underline2.r, fmt->color.underline2.g,
fmt->color.underline2.b, fmt->color.underline2.a);
- PRINTF_APPEND_COLOR(underline_dash_colorstr, fmt->color.underline_dash.r, fmt->color.underline_dash.g,
+ PRINTF_APPEND_COLOR(underline_dashed_colorstr, fmt->color.underline_dash.r, fmt->color.underline_dash.g,
fmt->color.underline_dash.b, fmt->color.underline_dash.a);
PRINTF_APPEND_COLOR(outline_colorstr, fmt->color.outline.r, fmt->color.outline.g,
@@ -3338,10 +3604,10 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
PRINTF_APPEND_COLOR(glow_colorstr, fmt->color.glow.r, fmt->color.glow.g,
fmt->color.glow.b, fmt->color.glow.a);
- PRINTF_APPEND_COLOR(glow2_colorstr, fmt->color.glow2.r, fmt->color.glow2.g,
+ PRINTF_APPEND_COLOR(secondary_glow_colorstr, fmt->color.glow2.r, fmt->color.glow2.g,
fmt->color.glow2.b, fmt->color.glow2.a);
- PRINTF_APPEND_COLOR(backing_colorstr, fmt->color.backing.r, fmt->color.backing.g,
+ PRINTF_APPEND_COLOR(background_colorstr, fmt->color.backing.r, fmt->color.backing.g,
fmt->color.backing.b, fmt->color.backing.a);
PRINTF_APPEND_COLOR(strikethrough_colorstr, fmt->color.strikethrough.r, fmt->color.strikethrough.g,
@@ -3362,11 +3628,11 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
halign_value_str = "locale";
break;
case EVAS_TEXTBLOCK_ALIGN_AUTO_NONE:
- if (fmt->halign == 0.5)
+ if (EINA_DBL_EQ(fmt->halign, 0.5))
halign_value_str = "center";
- else if (fmt->halign == 0.0)
+ else if (EINA_DBL_EQ(fmt->halign, 0.0))
halign_value_str = "left";
- else if (fmt->halign == 1.0)
+ else if (EINA_DBL_EQ(fmt->halign, 1.0))
halign_value_str = "right";
break;
@@ -3380,13 +3646,13 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
char *valign_value_str = NULL;
- if (fmt->valign == 0.5)
+ if (EINA_DBL_EQ(fmt->valign, 0.5))
valign_value_str = "center";
- else if (fmt->valign == 0.0)
+ else if (EINA_DBL_EQ(fmt->valign, 0.0))
valign_value_str = "top";
- else if (fmt->valign == 1.0)
+ else if (EINA_DBL_EQ(fmt->valign, 1.0))
valign_value_str = "bottom";
- else if (fmt->valign == -1.0)
+ else if (EINA_DBL_EQ(fmt->valign, -1.0))
valign_value_str = "baseline";
if (valign_value_str != NULL)
@@ -3399,7 +3665,7 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
PRINTF_APPEND_INT(right_marginstr, fmt->margin.r);
- char *underline_value_str = "off";
+ char *underline_value_str = "none";
if (fmt->underline == EINA_TRUE && fmt->underline2 == EINA_TRUE)
underline_value_str = "double";
@@ -3408,102 +3674,94 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
else if (fmt->underline_dash == EINA_TRUE)
underline_value_str = "dashed";
- PRINTF_APPEND_STR(underlinestr, underline_value_str);
- PRINTF_APPEND_STR(strikethroughstr, (fmt->strikethrough == 0 ? "off" : "on"));
- PRINTF_APPEND_STR(backingstr, (fmt->backing == 0 ? "off" : "on"));
+ PRINTF_APPEND_STR(underline_typestr, underline_value_str);
+ PRINTF_APPEND_STR(strikethrough_typestr, (fmt->strikethrough == 0 ? "none" : "single"));
+ PRINTF_APPEND_STR(background_typestr, (fmt->backing == 0 ? "none" : "solid"));
- char *style_value_str_1 = "off";
- char *style_value_str_2 = NULL;
- Efl_Text_Style_Effect_Type style1 = _FMT_INFO(effect);
- Efl_Text_Style_Effect_Type style2 = _FMT_INFO(shadow_direction);
+ Efl_Text_Style_Effect_Type effect = _FMT_INFO(effect);
- switch (style1)
+ switch (effect)
{
case EFL_TEXT_STYLE_EFFECT_TYPE_NONE:
- style_value_str_1 = "plain";
+ PRINTF_APPEND_STR(effect_typestr, "none");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_SHADOW:
- style_value_str_1 = "shadow";
+ PRINTF_APPEND_STR(effect_typestr, "shadow");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_OUTLINE:
- style_value_str_1 = "outline";
+ PRINTF_APPEND_STR(effect_typestr, "outline");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_SOFT_OUTLINE:
- style_value_str_1 = "soft_outline";
+ PRINTF_APPEND_STR(effect_typestr, "soft_outline");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_OUTLINE_SHADOW:
- style_value_str_1 = "outline_shadow";
+ PRINTF_APPEND_STR(effect_typestr, "outline_shadow");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_OUTLINE_SOFT_SHADOW:
- style_value_str_1 = "outline_soft_shadow";
+ PRINTF_APPEND_STR(effect_typestr, "outline_soft_shadow");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_GLOW:
- style_value_str_1 = "glow";
+ PRINTF_APPEND_STR(effect_typestr, "glow");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_FAR_SHADOW:
- style_value_str_1 = "far_shadow";
+ PRINTF_APPEND_STR(effect_typestr, "far_shadow");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_SOFT_SHADOW:
- style_value_str_1 = "soft_shadow";
+ PRINTF_APPEND_STR(effect_typestr, "soft_shadow");
break;
case EFL_TEXT_STYLE_EFFECT_TYPE_FAR_SOFT_SHADOW:
- style_value_str_1 = "far_soft_shadow";
+ PRINTF_APPEND_STR(effect_typestr, "far_soft_shadow");
break;
default:
- style_value_str_1 = "off";
break;
}
- switch (style2)
+ Efl_Text_Style_Shadow_Direction shadow_direction = _FMT_INFO(shadow_direction);
+
+ switch (shadow_direction)
{
case EFL_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_RIGHT:
- style_value_str_2 = "bottom_right";
+ PRINTF_APPEND_STR(shadow_directionstr, "bottom_right");
break;
case EFL_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM:
- style_value_str_2 = "bottom";
+ PRINTF_APPEND_STR(shadow_directionstr, "bottom");
break;
case EFL_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_LEFT:
- style_value_str_2 = "bottom_left";
+ PRINTF_APPEND_STR(shadow_directionstr, "bottom_left");
break;
case EFL_TEXT_STYLE_SHADOW_DIRECTION_LEFT:
- style_value_str_2 = "left";
+ PRINTF_APPEND_STR(shadow_directionstr, "left");
break;
case EFL_TEXT_STYLE_SHADOW_DIRECTION_TOP_LEFT:
- style_value_str_2 = "top_left";
+ PRINTF_APPEND_STR(shadow_directionstr, "top_left");
break;
case EFL_TEXT_STYLE_SHADOW_DIRECTION_TOP:
- style_value_str_2 = "top";
+ PRINTF_APPEND_STR(shadow_directionstr, "top");
break;
case EFL_TEXT_STYLE_SHADOW_DIRECTION_TOP_RIGHT:
- style_value_str_2 = "top_right";
+ PRINTF_APPEND_STR(shadow_directionstr, "top_right");
break;
case EFL_TEXT_STYLE_SHADOW_DIRECTION_RIGHT:
- style_value_str_2 = "right";
+ PRINTF_APPEND_STR(shadow_directionstr, "right");
break;
default:
- style_value_str_2 = NULL;
break;
}
- if (style_value_str_2 != NULL)
- eina_strbuf_append_printf(format_buffer, "%s=%s,%s ", stylestr, style_value_str_1, style_value_str_2);
- else
- PRINTF_APPEND_STR(stylestr, style_value_str_1);
-
- PRINTF_APPEND_INT(tabstopsstr, fmt->tabstops);
- PRINTF_APPEND_INT(linesizestr, fmt->linesize);
- PRINTF_APPEND_PERCENT_FLOAT(linerelsizestr, (fmt->linerelsize*100));
- PRINTF_APPEND_INT(linegapstr, fmt->linegap);
- PRINTF_APPEND_PERCENT_FLOAT(linerelgapstr, (fmt->linerelgap*100));
- PRINTF_APPEND_PERCENT_FLOAT(linefillstr, (fmt->linefill*100));
+ PRINTF_APPEND_INT(tab_stopsstr, fmt->tabstops);
+ PRINTF_APPEND_INT(line_sizestr, fmt->linesize);
+ PRINTF_APPEND_PERCENT_FLOAT(line_rel_sizestr, (fmt->linerelsize*100));
+ PRINTF_APPEND_INT(line_gapstr, fmt->linegap);
+ PRINTF_APPEND_PERCENT_FLOAT(line_rel_gapstr, (fmt->linerelgap*100));
+ PRINTF_APPEND_PERCENT_FLOAT(line_fillstr, (fmt->linefill*100));
PRINTF_APPEND_FLOAT(ellipsisstr, fmt->ellipsis);
PRINTF_APPEND_STR(passwordstr, (fmt->password == 0 ? "off" : "on"));
if (o->repch)
PRINTF_APPEND_STR(replacement_charstr, o->repch);
- PRINTF_APPEND_INT(underline_dash_widthstr, fmt->underline_dash_width);
- PRINTF_APPEND_INT(underline_dash_gapstr, fmt->underline_dash_gap);
+ PRINTF_APPEND_INT(underline_dashed_widthstr, fmt->underline_dash_width);
+ PRINTF_APPEND_INT(underline_dashed_gapstr, fmt->underline_dash_gap);
PRINTF_APPEND_FLOAT(underline_heightstr, fmt->underline_height);
const char *temp = eina_strbuf_string_get(format_buffer);
@@ -3951,8 +4209,8 @@ _layout_update_bidi_props(const Efl_Canvas_Textblock_Data *o,
* Free the visual lines in the paragraph (logical items are kept)
*/
static void
-_paragraph_clear(Evas_Public_Data *evas,
- Efl_Canvas_Textblock_Data *o, Evas_Object_Protected_Data *obj,
+_paragraph_clear(Efl_Canvas_Textblock_Data *o,
+ Evas_Object_Protected_Data *obj,
Evas_Object_Textblock_Paragraph *par)
{
while (par->lines)
@@ -3974,7 +4232,7 @@ _paragraph_clear(Evas_Public_Data *evas,
if (ti->parent.ln == ln)
{
o->hyphen_items = eina_list_remove_list(o->hyphen_items, i);
- _item_free(evas, o, obj, NULL, _ITEM(ti));
+ _item_free(o, obj, NULL, _ITEM(ti));
}
}
}
@@ -3988,17 +4246,17 @@ _paragraph_clear(Evas_Public_Data *evas,
* Free the layout paragraph and all of it's lines and logical items.
*/
static void
-_paragraph_free(Evas_Public_Data *evas,
- Efl_Canvas_Textblock_Data *o, Evas_Object_Protected_Data *obj,
+_paragraph_free(Efl_Canvas_Textblock_Data *o,
+ Evas_Object_Protected_Data *obj,
Evas_Object_Textblock_Paragraph *par)
{
- _paragraph_clear(evas, o, obj, par);
+ _paragraph_clear(o, obj, par);
{
Evas_Object_Textblock_Item *it;
EINA_LIST_FREE(par->logical_items, it)
{
- _item_free(evas, o, obj, NULL, it);
+ _item_free(o, obj, NULL, it);
}
}
#ifdef BIDI_SUPPORT
@@ -4028,7 +4286,7 @@ _paragraphs_clear(Ctxt *c)
EINA_INLIST_FOREACH(EINA_INLIST_GET(c->paragraphs), par)
{
- _paragraph_clear(c->evas, c->o, c->evas_o, par);
+ _paragraph_clear(c->o, c->evas_o, par);
}
}
@@ -4041,8 +4299,8 @@ _paragraphs_clear(Ctxt *c)
* @param c the context - Not NULL.
*/
static void
-_paragraphs_free(Evas_Public_Data *evas,
- Efl_Canvas_Textblock_Data *o, Evas_Object_Protected_Data *obj,
+_paragraphs_free(Efl_Canvas_Textblock_Data *o,
+ Evas_Object_Protected_Data *obj,
Evas_Object_Textblock_Paragraph *pars)
{
o->num_paragraphs = 0;
@@ -4053,7 +4311,7 @@ _paragraphs_free(Evas_Public_Data *evas,
par = (Evas_Object_Textblock_Paragraph *) pars;
pars = (Evas_Object_Textblock_Paragraph *)eina_inlist_remove(EINA_INLIST_GET(pars), EINA_INLIST_GET(par));
- _paragraph_free(evas, o, obj, par);
+ _paragraph_free(o, obj, par);
}
}
@@ -4105,6 +4363,7 @@ _layout_format_push(Ctxt *c, Evas_Object_Textblock_Format *fmt,
fmt->font.fdesc->weight = _FMT_INFO(font_weight);
fmt->font.fdesc->slant = _FMT_INFO(font_slant);
fmt->font.fdesc->width = _FMT_INFO(font_width);
+ eina_stringshare_replace(&(fmt->font.source), _FMT_INFO(font_source));
evas_font_name_parse(fmt->font.fdesc, _FMT_INFO(font));
fmt->font.font = evas_font_load(evas_obj->layer->evas->font_path,
evas_obj->layer->evas->hinting,
@@ -4113,6 +4372,10 @@ _layout_format_push(Ctxt *c, Evas_Object_Textblock_Format *fmt,
(int)(((double) _FMT_INFO(size)) * evas_obj->cur->scale),
fmt->font.bitmap_scalable);
}
+ else if (_FMT_INFO(size)) // if font size specified alone, without font
+ {
+ fmt->font.size = _FMT_INFO(size);
+ }
if (_FMT_INFO(gfx_filter_name))
{
if (!fmt->gfx_filter)
@@ -4222,7 +4485,7 @@ _layout_format_value_handle(Ctxt *c, Evas_Object_Textblock_Format *fmt, const ch
{
const char *key = NULL;
char *val = NULL;
-
+
Allocator allocator;
_allocator_init(&allocator);
@@ -4653,7 +4916,7 @@ loop_advance:
}
/* Check current line's height is acceptable or not */
- if ((fmt->ellipsis == 1.0) &&
+ if (EINA_DBL_EQ(fmt->ellipsis, 1.0) &&
(c->h > 0) && (c->y + c->ln->h > c->h))
{
/* No text is shown when the object height is smaller than actual font size's height.
@@ -4693,14 +4956,17 @@ loop_advance:
if (c->descent < 2) c->underline_extend = 2 - c->descent;
}
c->ln->line_no = c->line_no - c->ln->par->line_no;
- c->line_no++;
- c->y += c->ascent + c->descent;
+ if ( c->line_no == 0 || c->o->multiline)
+ {
+ c->line_no++;
+ c->y += c->ascent + c->descent;
+ }
if (c->w >= 0)
{
/* c->o->style_pad.r is already included in the line width, so it's
* not used in this calculation. . */
c->ln->x = c->marginl + c->o->style_pad.l +
- ((c->w - c->ln->w - c->o->style_pad.l -
+ ((c->w - c->ln->w - c->o->style_pad.l - c->o->style_pad.r -
c->marginl - c->marginr) * _layout_line_align_get(c));
}
else
@@ -4716,8 +4982,7 @@ loop_advance:
/* Calculate new max width */
{
- Evas_Coord new_wmax = c->ln->w +
- c->marginl + c->marginr - (c->o->style_pad.l + c->o->style_pad.r);
+ Evas_Coord new_wmax = c->ln->w + c->marginl + c->marginr;
if (new_wmax > c->par->last_fw)
c->par->last_fw = new_wmax;
if (new_wmax > c->wmax)
@@ -4897,7 +5162,7 @@ _layout_item_merge_and_free(Ctxt *c,
item1->parent.merge = EINA_FALSE;
item1->parent.visually_deleted = EINA_FALSE;
- _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(item2));
+ _item_free(c->o, c->evas_o, NULL, _ITEM(item2));
}
/**
@@ -4936,9 +5201,8 @@ _text_item_update_sizes(Ctxt *c, Evas_Object_Textblock_Text_Item *ti)
{
evas_filter_program_padding_get(pgm, &pad, NULL);
- ti->x_adjustment = pad.r + pad.l;
- ti->parent.w = tw + ti->x_adjustment; // FIXME: why add l+r here,
- ti->parent.h = th; // but not t+b here?
+ ti->parent.w = tw; // Don't add style pad here
+ ti->parent.h = th; // Don't add style pad here
ti->parent.adv = advw;
ti->parent.x = 0;
return;
@@ -5007,9 +5271,8 @@ _text_item_update_sizes(Ctxt *c, Evas_Object_Textblock_Text_Item *ti)
shx2 += shad_sz;
if (shx1 < minx) minx = shx1;
if (shx2 > maxx) maxx = shx2;
- ti->x_adjustment = maxx - minx;
- ti->parent.w = tw + ti->x_adjustment;
+ ti->parent.w = tw;
ti->parent.h = th;
ti->parent.adv = advw;
ti->parent.x = 0;
@@ -5173,6 +5436,27 @@ skip:
script = evas_common_language_script_type_get(str, script_len);
+ /* FIXME Workaround for Burmese Vowel E Rendering, caused by bug in Harfbuzz
+ breaking text run will fix the visual issue.
+ */
+ if (script == EVAS_SCRIPT_MYANMAR && script_len > 1)
+ {
+ int i;
+ for (i = 0 ; i < script_len - 1; i++)
+ {
+ if (str[i] == 0x200C)
+ {
+ if (str[i+1] == 0x1031)
+ {
+ cur_len += script_len;
+ script_len = i + 1;
+ cur_len -= script_len;
+ break;
+ }
+ }
+ }
+ }
+
Evas_Object_Protected_Data *obj = efl_data_scope_get(c->obj, EFL_CANVAS_OBJECT_CLASS);
while (script_len > 0)
{
@@ -5506,7 +5790,7 @@ _layout_do_format(const Evas_Object *obj, Ctxt *c,
{
fmt = _layout_format_pop(c, n->orig_format);
}
- while ((item = _format_parse(&s)))
+ while ((item = _format_parse(&s, EINA_FALSE)))
{
if (_format_is_param(item))
{
@@ -5674,7 +5958,7 @@ _layout_get_hyphenationwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
}
else
{
- _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
+ _item_free(c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
c->hyphen_ti = NULL;
}
}
@@ -5779,7 +6063,7 @@ _layout_get_hyphenationwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
/* hyphen item cleanup */
if (!found_hyphen && c->hyphen_ti)
{
- _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
+ _item_free(c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
c->hyphen_ti = NULL;
}
@@ -5935,7 +6219,7 @@ _layout_ellipsis_item_new(Ctxt *c, const Evas_Object_Textblock_Item *cur_it)
size_t len = 1; /* The length of _ellip_str */
/* We can free it here, cause there's only one ellipsis item per tb. */
- if (c->o->ellip_ti) _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->o->ellip_ti));
+ if (c->o->ellip_ti) _item_free(c->o, c->evas_o, NULL, _ITEM(c->o->ellip_ti));
c->o->ellip_ti = ellip_ti = _layout_text_item_new(c, cur_it->format);
ellip_ti->parent.text_node = cur_it->text_node;
ellip_ti->parent.text_pos = cur_it->text_pos;
@@ -5991,7 +6275,7 @@ _layout_handle_ellipsis(Ctxt *c, Evas_Object_Textblock_Item *it, Eina_List *i)
save_cx = c->x;
temp_w = c->w;
- ellip_w = ellip_ti->parent.w - ellip_ti->x_adjustment;
+ ellip_w = ellip_ti->parent.w;
#ifdef BIDI_SUPPORT
// XXX: with RTL considerations in mind, we need to take max(adv, w) as the
// line may be reordered in a way that the item placement will cause the
@@ -6111,7 +6395,7 @@ _layout_handle_ellipsis(Ctxt *c, Evas_Object_Textblock_Item *it, Eina_List *i)
/* Don't do much for the meanwhile. */
static inline void
_layout_paragraph_render(Efl_Canvas_Textblock_Data *o,
- Evas_Object_Textblock_Paragraph *par)
+ Evas_Object_Textblock_Paragraph *par)
{
if (par->rendered)
return;
@@ -6334,7 +6618,7 @@ _layout_par(Ctxt *c)
{
Eina_List *itr, *itr_next;
Evas_Object_Textblock_Item *ititr, *prev_it = NULL;
- _paragraph_clear(c->evas, c->o, c->evas_o, c->par);
+ _paragraph_clear(c->o, c->evas_o, c->par);
EINA_LIST_FOREACH_SAFE(c->par->logical_items, itr, itr_next, ititr)
{
if (ititr->merge && prev_it &&
@@ -6366,7 +6650,10 @@ _layout_par(Ctxt *c)
#endif
it = _ITEM(eina_list_data_get(c->par->logical_items));
- _layout_line_new(c, it->format);
+ if (c->line_no == 0 || c->o->multiline)
+ {
+ _layout_line_new(c, it->format);
+ }
/* We walk on our own because we want to be able to add items from
* inside the list and then walk them on the next iteration. */
@@ -6440,10 +6727,6 @@ _layout_par(Ctxt *c)
/* Check if we need to wrap, i.e the text is bigger than the width,
or we already found a wrap point. */
itw = it->w;
- if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
- {
- itw -= _ITEM_TEXT(it)->x_adjustment;
- }
if ((c->w >= 0) &&
(obs ||
@@ -6569,7 +6852,7 @@ _layout_par(Ctxt *c)
Evas_Coord cw = c->w;
if (obs)
{
- cw -= obs->w;
+ cw = obs->x;
}
if (it->format->wrap_word)
wrap = _layout_get_wordwrap(c, it->format, it,
@@ -6999,7 +7282,7 @@ _layout_pre(Ctxt *c)
c->paragraphs = (Evas_Object_Textblock_Paragraph *)
eina_inlist_remove(EINA_INLIST_GET(c->paragraphs),
EINA_INLIST_GET(c->par));
- _paragraph_free(c->evas, c->o, c->evas_o, c->par);
+ _paragraph_free(c->o, c->evas_o, c->par);
c->par = tmp_par;
}
@@ -7015,7 +7298,7 @@ _layout_pre(Ctxt *c)
c->paragraphs = (Evas_Object_Textblock_Paragraph *)
eina_inlist_remove(EINA_INLIST_GET(c->paragraphs),
EINA_INLIST_GET(prev_par));
- _paragraph_free(c->evas, c->o, c->evas_o, prev_par);
+ _paragraph_free(c->o, c->evas_o, prev_par);
}
else
{
@@ -7138,7 +7421,7 @@ _layout_pre(Ctxt *c)
c->paragraphs = (Evas_Object_Textblock_Paragraph *)
eina_inlist_remove(EINA_INLIST_GET(c->paragraphs),
EINA_INLIST_GET(c->par));
- _paragraph_free(c->evas, c->o, c->evas_o, c->par);
+ _paragraph_free(c->o, c->evas_o, c->par);
c->par = tmp_par;
}
@@ -7271,7 +7554,7 @@ _layout_visual(Ctxt *c)
while (c->par)
{
c->par->visible = 0;
- _paragraph_clear(c->evas, c->o, c->evas_o, c->par);
+ _paragraph_clear(c->o, c->evas_o, c->par);
c->par = (Evas_Object_Textblock_Paragraph *)
EINA_INLIST_GET(c->par)->next;
}
@@ -7286,7 +7569,8 @@ _layout_visual(Ctxt *c)
if (last_vis_par)
{
c->hmax = last_vis_par->y + last_vis_par->h +
- _layout_last_line_max_descent_adjust_calc(c, last_vis_par);
+ _layout_last_line_max_descent_adjust_calc(c, last_vis_par) -
+ c->style_pad.t - c->style_pad.b;
}
}
@@ -7311,7 +7595,7 @@ _layout_done(Ctxt *c, Evas_Coord *w_ret, Evas_Coord *h_ret)
/* Vertically align the textblock */
if ((c->o->valign > 0.0) && (c->h > c->hmax))
{
- Evas_Coord adjustment = (c->h - c->hmax) * c->o->valign;
+ Evas_Coord adjustment = (c->h - c->hmax - c->style_pad.t - c->style_pad.b) * c->o->valign;
Evas_Object_Textblock_Paragraph *par;
EINA_INLIST_FOREACH(c->paragraphs, par)
{
@@ -7370,8 +7654,6 @@ _layout_setup(Ctxt *c, const Eo *eo_obj, Evas_Coord w, Evas_Coord h)
c->obs_infos = NULL;
c->hyphen_ti = NULL;
c->handle_obstacles = EINA_FALSE;
- c->w = w;
- c->h = h;
c->style_pad.r = c->style_pad.l = c->style_pad.t = c->style_pad.b = 0;
c->vertical_ellipsis = EINA_FALSE;
c->ellip_prev_it = NULL;
@@ -7389,6 +7671,7 @@ _layout_setup(Ctxt *c, const Eo *eo_obj, Evas_Coord w, Evas_Coord h)
/* Start of logical layout creation */
/* setup default base style */
+ if (!o->main_fmt) /* no main format */
{
Eina_List *itr;
User_Style_Entry *use;
@@ -7420,10 +7703,11 @@ _layout_setup(Ctxt *c, const Eo *eo_obj, Evas_Coord w, Evas_Coord h)
if (finalize)
_format_finalize(c->obj, c->fmt);
+ o->main_fmt = _format_dup(c->obj, c->fmt);
}
- if (!c->fmt)
+ else
{
- return EINA_FALSE;
+ c->fmt = _layout_format_push(c, o->main_fmt, NULL);
}
c->paragraphs = o->paragraphs;
@@ -7483,10 +7767,11 @@ _relayout(const Evas_Object *eo_obj)
if ((o->paragraphs) && (!EINA_INLIST_GET(o->paragraphs)->next) &&
(o->paragraphs->lines) && (!EINA_INLIST_GET(o->paragraphs->lines)->next))
{
- if (obj->cur->geometry.h < o->formatted.h)
+ if (obj->cur->geometry.h < o->formatted.h + o->style_pad.t + o->style_pad.b)
{
- LYDBG("ZZ: 1 line only... lasth == formatted h (%i)\n", o->formatted.h);
- o->formatted.oneline_h = o->formatted.h;
+ LYDBG("ZZ: 1 line only... lasth == formatted h + style_pad.t + style_pad.b(%i)\n",
+ o->formatted.h + o->style_pad.t + o->style_pad.b);
+ o->formatted.oneline_h = o->formatted.h + o->style_pad.t + o->style_pad.b;
}
}
o->changed = 0;
@@ -7617,7 +7902,7 @@ _find_layout_line_num(const Evas_Object *eo_obj, int line)
return NULL;
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_textblock_add(Evas *e)
{
Efl_Canvas_Textblock_Data *o;
@@ -7628,6 +7913,7 @@ evas_object_textblock_add(Evas *e)
efl_text_multiline_set(efl_added, EINA_TRUE),
efl_canvas_object_legacy_ctor(efl_added));
o = efl_data_scope_get(eo_obj, MY_CLASS);
+ o->is_legacy = EINA_TRUE;
o->legacy_newline = EINA_TRUE;
o->auto_styles = EINA_FALSE;
_FMT(password) = EINA_TRUE;
@@ -7680,7 +7966,7 @@ _efl_canvas_textblock_efl_object_constructor(Eo *eo_obj, Efl_Canvas_Textblock_Da
return eo_obj;
}
-EAPI Evas_Textblock_Style *
+EVAS_API Evas_Textblock_Style *
evas_textblock_style_new(void)
{
Evas_Textblock_Style *ts;
@@ -7690,7 +7976,7 @@ evas_textblock_style_new(void)
return ts;
}
-EAPI void
+EVAS_API void
evas_textblock_style_free(Evas_Textblock_Style *ts)
{
if (!ts) return;
@@ -7705,7 +7991,17 @@ evas_textblock_style_free(Evas_Textblock_Style *ts)
}
static void
-_evas_textblock_update_format_nodes_from_style_tag(Efl_Canvas_Textblock_Data *o)
+_evas_clear_main_format(Evas_Object *eo_obj, Efl_Canvas_Textblock_Data *o)
+{
+ if (o->main_fmt)
+ {
+ _format_unref_free(efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS), o->main_fmt);
+ o->main_fmt = NULL;
+ }
+}
+
+static void
+_evas_textblock_update_format_nodes_from_style_tag(Evas_Object *eo_obj, Efl_Canvas_Textblock_Data *o)
{
if (!o)
{
@@ -7713,6 +8009,8 @@ _evas_textblock_update_format_nodes_from_style_tag(Efl_Canvas_Textblock_Data *o)
return;
}
+ _evas_clear_main_format(eo_obj, o);
+
Evas_Object_Textblock_Node_Format *fnode = o->format_nodes;
while (fnode)
@@ -7745,7 +8043,7 @@ _evas_textblock_update_format_nodes_from_style_tag(Efl_Canvas_Textblock_Data *o)
}
}
-EAPI void
+EVAS_API void
evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text)
{
Eina_List *l;
@@ -7867,13 +8165,13 @@ evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text)
EINA_LIST_FOREACH(ts->objects, l, eo_obj)
{
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
- _evas_textblock_update_format_nodes_from_style_tag(o);
+ _evas_textblock_update_format_nodes_from_style_tag(eo_obj, o);
_evas_textblock_invalidate_all(o);
_evas_textblock_changed(o, eo_obj);
}
}
-EAPI const char *
+EVAS_API const char *
evas_textblock_style_get(const Evas_Textblock_Style *ts)
{
if (!ts) return NULL;
@@ -7924,6 +8222,8 @@ _textblock_style_generic_set(Evas_Object *eo_obj, Evas_Textblock_Style *ts,
Eina_List *itr;
Evas_Textblock_Style *old_ts = NULL;
+ _evas_clear_main_format(eo_obj, o);
+
if (!key)
{
old_ts = o->style;
@@ -7956,11 +8256,12 @@ _textblock_style_generic_set(Evas_Object *eo_obj, Evas_Textblock_Style *ts,
else if (us)
{
o->styles = eina_list_remove_list(o->styles, itr);
+ old_ts = us->st;
free(us);
}
}
- // Verify nothing has changed
+ // Verify nothing has changed
if (ts == old_ts) return;
if ((ts) && (ts->delete_me)) return;
@@ -7991,14 +8292,14 @@ _textblock_style_generic_set(Evas_Object *eo_obj, Evas_Textblock_Style *ts,
ts->objects = eina_list_append(ts->objects, eo_obj);
}
- _evas_textblock_update_format_nodes_from_style_tag(o);
+ _evas_textblock_update_format_nodes_from_style_tag(eo_obj, o);
o->format_changed = EINA_TRUE;
_evas_textblock_invalidate_all(o);
_evas_textblock_changed(o, eo_obj);
}
-EAPI void
+EVAS_API void
evas_object_textblock_style_set(Eo *eo_obj, const Evas_Textblock_Style *ts)
{
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
@@ -8030,10 +8331,11 @@ _efl_canvas_textblock_style_apply(Eo *eo_obj, Efl_Canvas_Textblock_Data *o, cons
{
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
evas_object_async_block(obj);
+ _evas_clear_main_format(eo_obj, o);
_format_fill(eo_obj, &(o->default_format.format), style, EINA_TRUE);
}
-EAPI Evas_Textblock_Style *
+EVAS_API Evas_Textblock_Style *
evas_object_textblock_style_get(const Eo *eo_obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, NULL);
@@ -8053,22 +8355,16 @@ _efl_canvas_textblock_all_styles_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Te
return o->default_format.default_style_str;
}
-EOLIAN static void
-_efl_canvas_textblock_cursor_add(Eo *obj, Efl_Canvas_Textblock_Data *pd EINA_UNUSED, Efl_Text_Cursor *cursor)
-{
- efl_text_cursor_text_object_set(cursor, obj, obj);
-}
-
-EOLIAN static Efl_Text_Cursor *
+EOLIAN static Efl_Text_Cursor_Object *
_efl_canvas_textblock_cursor_create(Eo *obj, Efl_Canvas_Textblock_Data *pd EINA_UNUSED)
{
- Eo* cursor = efl_add(EFL_TEXT_CURSOR_CLASS, obj);
- efl_text_cursor_text_object_set(cursor, obj, obj);
+ Eo* cursor = efl_text_cursor_object_create(obj);
+ efl_text_cursor_object_text_object_set(cursor, obj, obj);
return cursor;
}
#define _STYLE_USER "_style_user"
-EAPI void
+EVAS_API void
evas_object_textblock_style_user_push(Eo *eo_obj, Evas_Textblock_Style *ts)
{
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
@@ -8078,7 +8374,7 @@ evas_object_textblock_style_user_push(Eo *eo_obj, Evas_Textblock_Style *ts)
_textblock_style_generic_set(eo_obj, ts, _STYLE_USER);
}
-EAPI const Evas_Textblock_Style*
+EVAS_API const Evas_Textblock_Style*
evas_object_textblock_style_user_peek(const Eo *eo_obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, NULL);
@@ -8090,7 +8386,7 @@ evas_object_textblock_style_user_peek(const Eo *eo_obj)
return ts;
}
-EAPI void
+EVAS_API void
evas_object_textblock_style_user_pop(Eo *eo_obj)
{
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
@@ -8099,7 +8395,7 @@ evas_object_textblock_style_user_pop(Eo *eo_obj)
_textblock_style_generic_set(eo_obj, NULL, _STYLE_USER);
}
-EAPI void
+EVAS_API void
evas_object_textblock_replace_char_set(Efl_Canvas_Textblock *eo_obj, const char *ch)
{
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
@@ -8139,7 +8435,7 @@ _efl_canvas_textblock_is_empty_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text
return !o->text_nodes || (eina_ustrbuf_length_get(o->text_nodes->unicode) == 0);
}
-EAPI void
+EVAS_API void
evas_object_textblock_valign_set(Efl_Canvas_Textblock *eo_obj, double align)
{
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
@@ -8153,7 +8449,7 @@ evas_object_textblock_valign_set(Efl_Canvas_Textblock *eo_obj, double align)
_evas_textblock_changed(o, eo_obj);
}
-EAPI double
+EVAS_API double
evas_object_textblock_valign_get(const Efl_Canvas_Textblock *obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0.0);
@@ -8175,7 +8471,7 @@ _efl_canvas_textblock_bidi_delimiters_get(const Eo *eo_obj EINA_UNUSED, Efl_Canv
return o->bidi_delimiters;
}
-EAPI const char *
+EVAS_API const char *
evas_object_textblock_replace_char_get(const Efl_Canvas_Textblock *obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
@@ -8185,73 +8481,32 @@ evas_object_textblock_replace_char_get(const Efl_Canvas_Textblock *obj)
/**
* @internal
- * Advance p_buff to point after the end of the string. It's used with the
- * @ref escaped_strings[] variable.
- *
- * @param p_buff the pointer to the current string.
- */
-static inline void
-_escaped_advance_after_end_of_string(const char **p_buf)
-{
- while (**p_buf != 0) (*p_buf)++;
- (*p_buf)++;
-}
-
-/**
- * @internal
- * Advance p_buff to point after the end of the string. It's used with the
- * @ref escaped_strings[] variable. Also chec if matches.
- * FIXME: doc.
- *
- * @param p_buff the pointer to the current string.
- */
-static inline int
-_escaped_is_eq_and_advance(const char *s, const char *s_end,
- const char **p_m, const char *m_end)
-{
- Eina_Bool reached_end;
- for (;((s < s_end) && (*p_m < m_end)); s++, (*p_m)++)
- {
- if (*s != **p_m)
- {
- _escaped_advance_after_end_of_string(p_m);
- return 0;
- }
- }
-
- reached_end = !**p_m;
- if (*p_m < m_end)
- _escaped_advance_after_end_of_string(p_m);
-
- return ((s == s_end) && reached_end);
-}
-
-
-/**
- * @internal
*
* @param s the escape string to search for its index
- * @param s_len length of s string
+ * @param s_len length of s string
* @param escape_values array of Escape_Value to look inside, Sorted by Escape
* @param escape_values_len is the len of Escape_Value array
*/
static int
-_escaped_string_search(const char *s, size_t s_len, const Escape_Value escape_values[], const size_t escape_values_len)
+_escaped_string_search(const char *s, size_t s_len, Escape_Value **escape_values, const size_t escape_values_len)
{
+ if (!escape_values)
+ return -1;
+
int l = 0;
int r = escape_values_len - 1;
while (l <= r)
{
int m = (l + r) / 2;
- int res = strncmp(s, escape_values[m].escape, MAX(escape_values[m].escape_len, s_len));
+ int res = strncmp(s, escape_values[m]->escape, MAX(escape_values[m]->escape_len, s_len));
if (res == 0)
{
//Handle special case when s_len is less than escape_len
//then we will continue searching
//example ("&gt;",1,....)
- if (escape_values[m].escape_len > s_len)
+ if (escape_values[m]->escape_len > s_len)
res = -1;
- else if (escape_values[m].escape_len < s_len)
+ else if (escape_values[m]->escape_len < s_len)
res = 1;
else return m;
}
@@ -8271,14 +8526,17 @@ _escaped_string_search(const char *s, size_t s_len, const Escape_Value escape_va
* @param escape_values_len is the len of Escape_Value array
*/
static int
-_escaped_value_search(const char *s, const Escape_Value escape_values[], const size_t escape_values_len)
+_escaped_value_search(const char *s, Escape_Value **escape_values , const size_t escape_values_len)
{
+ if (!escape_values)
+ return -1;
+
int l = 0;
int r = escape_values_len - 1;
while (l <= r)
{
int m = (l + r) / 2;
- int res = strncmp(s, escape_values[m].value, escape_values[m].value_len);
+ int res = strncmp(s, escape_values[m]->value, escape_values[m]->value_len);
if (res == 0)
return m;
if (res > 0)
@@ -8299,21 +8557,24 @@ _escaped_value_search(const char *s, const Escape_Value escape_values[], const s
static inline const char *
_escaped_char_match(const char *s, int *adv)
{
- static const size_t escape_common_size = sizeof(escape_values_v_common_sorted) / sizeof(Escape_Value);
- int n_ret = _escaped_value_search(s, escape_values_v_common_sorted, escape_common_size);
+ size_t len = 0;
+ Escape_Value **list = get_html_escape_array_common_value_sorted(&len);
+ int n_ret = _escaped_value_search(s, list, len);
if (n_ret != -1)
{
- *adv = (int) escape_values_v_common_sorted[n_ret].value_len;
- return escape_values_v_common_sorted[n_ret].escape;
+ if (adv)
+ *adv = (int) list[n_ret]->value_len;
+ return list[n_ret]->escape;
}
- else
+ else
{
- static const size_t escape_size = sizeof(escape_values_v_sorted) / sizeof(Escape_Value);
- n_ret = _escaped_value_search(s, escape_values_v_sorted, escape_size);
+ list = get_html_escape_array_rest_value_sorted(&len);
+ n_ret = _escaped_value_search(s, list, len);
if (n_ret != -1)
{
- *adv = (int)escape_values_v_sorted[n_ret].value_len;
- return escape_values_v_sorted[n_ret].escape;
+ if (adv)
+ *adv = (int)list[n_ret]->value_len;
+ return list[n_ret]->escape;
}
}
return NULL;
@@ -8369,25 +8630,29 @@ _escaped_char_get(const char *s, const char *s_end)
}
else
{
- static const size_t escape_common_size = sizeof(escape_values_e_common_sorted) / sizeof(Escape_Value);
- int n_ret = _escaped_string_search(s, s_end-s, escape_values_e_common_sorted, escape_common_size);
+ size_t len = 0;
+ Escape_Value **list;
+ list = get_html_escape_array_common_key_sorted(&len);
+ int n_ret = _escaped_string_search(s, s_end-s, list, len);
if (n_ret != -1)
{
- return escape_values_e_common_sorted[n_ret].value;
+ return list[n_ret]->value;
}
else
{
- static const size_t escape_size = sizeof(escape_values_e_sorted) / sizeof(Escape_Value);
- n_ret = _escaped_string_search(s, s_end-s, escape_values_e_sorted, escape_size);
+ list = get_html_escape_array_rest_key_sorted(&len);
+ n_ret = _escaped_string_search(s, s_end-s, list, len);
if (n_ret != -1)
- return escape_values_e_sorted[n_ret].value;
+ {
+ return list[n_ret]->value;
+ }
}
}
return NULL;
}
-EAPI const char *
+EVAS_API const char *
evas_textblock_escape_string_get(const char *escape)
{
/* &amp; -> & */
@@ -8395,14 +8660,14 @@ evas_textblock_escape_string_get(const char *escape)
return _escaped_char_get(escape, escape + strlen(escape));
}
-EAPI const char *
+EVAS_API const char *
evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end)
{
if ((!escape_start) || (!escape_end)) return NULL;
return _escaped_char_get(escape_start, escape_end);
}
-EAPI const char *
+EVAS_API const char *
evas_textblock_string_escape_get(const char *string, int *len_ret)
{
if ((!string) || (!len_ret)) return NULL;
@@ -8417,7 +8682,7 @@ static void _evas_textblock_cursor_object_changed(Efl_Text_Cursor_Handle *cur)
Eo *cur_obj;
EINA_LIST_FOREACH(cur->cur_objs, l, cur_obj)
- efl_event_callback_call(cur_obj, EFL_TEXT_CURSOR_EVENT_CHANGED, NULL);
+ efl_event_callback_call(cur_obj, EFL_TEXT_CURSOR_OBJECT_EVENT_CHANGED, NULL);
}
static void
@@ -8432,7 +8697,7 @@ _cursor_emit_if_changed(Efl_Text_Cursor_Handle *cur)
/**
* @internal
- * prepends the escaped char beteewn s and s_end to the curosr
+ * Prepends the escaped char between s and s_end to the cursor
*
*
* @param s the start of the string
@@ -8474,37 +8739,55 @@ _evas_object_textblock_text_markup_set(Eo *eo_obj, Efl_Canvas_Textblock_Data *o,
}
}
+ if (o->paragraphs)
+ {
+ _paragraphs_free(o, obj, o->paragraphs);
+ o->paragraphs = NULL;
+ }
_nodes_clear(eo_obj);
- Efl_Text_Cursor_Handle *co = o->cursor;
- co->node = _evas_textblock_node_text_new();
+ if (o->cursor->pos != 0)
+ {
+ o->cursor->changed = EINA_TRUE;
+ o->cursor->pos = 0;
+ }
+
o->text_nodes = _NODE_TEXT(eina_inlist_append(
EINA_INLIST_GET(o->text_nodes),
- EINA_INLIST_GET(co->node)));
-
- evas_textblock_cursor_paragraph_first(o->cursor);
+ EINA_INLIST_GET(_evas_textblock_node_text_new())));
+ o->cursor->node = o->text_nodes;
evas_object_textblock_text_markup_prepend(o->cursor, text);
- efl_event_freeze(eo_obj);
- /* Point all the cursors to the starrt */
- {
- Eina_List *l;
- Efl_Text_Cursor_Handle *cur;
- evas_textblock_cursor_paragraph_first(o->cursor);
- EINA_LIST_FOREACH(o->cursors, l, cur)
+ Eina_List *l;
+ Efl_Text_Cursor_Handle *cur;
+ EINA_LIST_FOREACH(o->cursors, l, cur)
+ {
+ cur->node = o->text_nodes;
+ if (cur->pos != 0)
{
- evas_textblock_cursor_paragraph_first(cur);
- _evas_textblock_cursor_object_changed(cur);
+ cur->pos = 0;
+ cur->changed = EINA_TRUE;
}
+ }
+ _cursor_emit_if_changed(o->cursor);
+ EINA_LIST_FOREACH(o->cursors, l, cur)
+ {
+ _cursor_emit_if_changed(cur);
+ }
+ /*If there was no text markup_prepend will not call change function
+ So we will call it inside markup_set*/
+ if (!text || !*text)
+ {
+ efl_event_callback_call(eo_obj, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, NULL);
+ _evas_textblock_changed(o, eo_obj);
}
- efl_event_thaw(eo_obj);
o->markup_text = text;
}
-EAPI void
+EVAS_API void
evas_object_textblock_text_markup_set(Eo *eo_obj, const char *text)
{
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
@@ -8524,7 +8807,7 @@ static void
_evas_object_textblock_text_markup_prepend(Eo *eo_obj,
Efl_Text_Cursor_Handle *cur, const char *text)
{
- if (!cur) return;
+ if (!cur || !text || !*text) return;
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
evas_object_async_block(obj);
TB_HEAD();
@@ -8533,144 +8816,142 @@ _evas_object_textblock_text_markup_prepend(Eo *eo_obj,
* this should be done once, when markup_prepend finished */
o->pause_change = EINA_TRUE;
- if (text)
- {
- char *s, *p;
- char *tag_start, *tag_end, *esc_start, *esc_end;
-
- tag_start = tag_end = esc_start = esc_end = NULL;
- p = (char *)text;
- s = p;
- /* This loop goes through all of the mark up text until it finds format
- * tags, escape sequences or the terminating NULL. When it finds either
- * of those, it appends the text found up until that point to the textblock
- * proccesses whatever found. It repeats itself until the terminating
- * NULL is reached. */
- for (;;)
- {
- size_t text_len;
- /* If we got to the end of string or just finished/started tag
- * or escape sequence handling. */
- if ((*p == 0) ||
- (tag_end) || (esc_end) ||
- (tag_start) || (esc_start))
+ char *s, *p;
+ char *tag_start, *tag_end, *esc_start, *esc_end;
+
+ tag_start = tag_end = esc_start = esc_end = NULL;
+ p = (char *)text;
+ s = p;
+ /* This loop goes through all of the mark up text until it finds format
+ * tags, escape sequences or the terminating NULL. When it finds either
+ * of those, it appends the text found up until that point to the textblock
+ * proccesses whatever found. It repeats itself until the terminating
+ * NULL is reached. */
+ for (;;)
+ {
+ size_t text_len;
+ /* If we got to the end of string or just finished/started tag
+ * or escape sequence handling. */
+ if ((*p == 0) ||
+ (tag_end) || (esc_end) ||
+ (tag_start) || (esc_start))
+ {
+ if (tag_end)
{
- if (tag_end)
- {
- /* If we reached to a tag ending, analyze the tag */
- char *ttag;
- size_t ttag_len = tag_end - tag_start;
+ /* If we reached to a tag ending, analyze the tag */
+ char *ttag;
+ size_t ttag_len = tag_end - tag_start;
- ttag = malloc(ttag_len + 1);
- if (ttag)
- {
- memcpy(ttag, tag_start, ttag_len);
- ttag[ttag_len] = 0;
- evas_textblock_cursor_format_prepend(cur, ttag);
- free(ttag);
- }
- tag_start = tag_end = NULL;
- }
- else if (esc_end)
- {
- _prepend_escaped_char(cur, esc_start, esc_end + 1);
- esc_start = esc_end = NULL;
- }
- else if (*p == 0 && esc_start) /* escape start with no end, append it as text */
- {
- _prepend_text_run(cur, esc_start, p);
- esc_start = esc_end = NULL;
- s = NULL;
- }
- else if (*p == 0)
+ ttag = malloc(ttag_len + 1);
+ if (ttag)
{
- _prepend_text_run(cur, s, p);
- s = NULL;
+ memcpy(ttag, tag_start, ttag_len);
+ ttag[ttag_len] = 0;
+ evas_textblock_cursor_format_prepend(cur, ttag);
+ free(ttag);
}
- if (*p == 0)
- break;
+ tag_start = tag_end = NULL;
}
- if (*p == '<')
+ else if (esc_end)
{
- if (esc_start) /* escape start with no end, append it as text */
- {
- _prepend_text_run(cur, esc_start, p);
- esc_start = esc_end = NULL;
- s = NULL;
- }
- if (!esc_start)
- {
- /* Append the text prior to this to the textblock and mark
- * the start of the tag */
- tag_start = p;
- tag_end = NULL;
- _prepend_text_run(cur, s, p);
- s = NULL;
- }
+ _prepend_escaped_char(cur, esc_start, esc_end + 1);
+ esc_start = esc_end = NULL;
}
- else if (*p == '>')
+ else if (*p == 0 && esc_start) /* escape start with no end, append it as text */
{
- if (tag_start)
- {
- tag_end = p + 1;
- s = p + 1;
- }
+ _prepend_text_run(cur, esc_start, p);
+ esc_start = esc_end = NULL;
+ s = NULL;
}
- else if (*p == '&')
+ else if (*p == 0)
{
- if (esc_start) /* escape start with no end, append it as text */
- {
- _prepend_text_run(cur, esc_start, p);
- esc_start = esc_end = NULL;
- s = NULL;
- }
- if (!tag_start)
- {
- /* Append the text prior to this to the textblock and mark
- * the start of the escape sequence */
- esc_start = p;
- esc_end = NULL;
- _prepend_text_run(cur, s, p);
- s = NULL;
- }
+ _prepend_text_run(cur, s, p);
+ s = NULL;
}
- else if (*p == ';')
+ if (*p == 0)
+ break;
+ }
+ if (*p == '<')
+ {
+ if (esc_start) /* escape start with no end, append it as text */
{
- if (esc_start)
- {
- esc_end = p;
- s = p + 1;
- }
+ _prepend_text_run(cur, esc_start, p);
+ esc_start = esc_end = NULL;
+ s = NULL;
}
- /* Unicode object replacement char */
- else if (!strncmp(_REPLACEMENT_CHAR_UTF8, p,
- text_len = strlen(_REPLACEMENT_CHAR_UTF8)) ||
- !strncmp(_NEWLINE_UTF8, p,
- text_len = strlen(_NEWLINE_UTF8)) ||
- !strncmp(_TAB_UTF8, p,
- text_len = strlen(_TAB_UTF8)) ||
- !strncmp(_PARAGRAPH_SEPARATOR_UTF8, p,
- text_len = strlen(_PARAGRAPH_SEPARATOR_UTF8)))
+ if (!esc_start)
{
- /*FIXME: currently just remove them, maybe do something
- * fancier in the future, atm it breaks if this char
- * is inside <> */
+ /* Append the text prior to this to the textblock and mark
+ * the start of the tag */
+ tag_start = p;
+ tag_end = NULL;
_prepend_text_run(cur, s, p);
- /* it's also advanced later in this loop need +text_len
- in total*/
- p += text_len - 1;
- s = p + 1; /* One after the end of the replacement char */
+ s = NULL;
+ }
+ }
+ else if (*p == '>')
+ {
+ if (tag_start)
+ {
+ tag_end = p + 1;
+ s = p + 1;
+ }
+ }
+ else if (*p == '&')
+ {
+ if (esc_start) /* escape start with no end, append it as text */
+ {
+ _prepend_text_run(cur, esc_start, p);
+ esc_start = esc_end = NULL;
+ s = NULL;
+ }
+ if (!tag_start)
+ {
+ /* Append the text prior to this to the textblock and mark
+ * the start of the escape sequence */
+ esc_start = p;
+ esc_end = NULL;
+ _prepend_text_run(cur, s, p);
+ s = NULL;
+ }
+ }
+ else if (*p == ';')
+ {
+ if (esc_start)
+ {
+ esc_end = p;
+ s = p + 1;
}
- p++;
}
+ /* Unicode object replacement char */
+ else if (!strncmp(_REPLACEMENT_CHAR_UTF8, p,
+ text_len = strlen(_REPLACEMENT_CHAR_UTF8)) ||
+ !strncmp(_NEWLINE_UTF8, p,
+ text_len = strlen(_NEWLINE_UTF8)) ||
+ !strncmp(_TAB_UTF8, p,
+ text_len = strlen(_TAB_UTF8)) ||
+ !strncmp(_PARAGRAPH_SEPARATOR_UTF8, p,
+ text_len = strlen(_PARAGRAPH_SEPARATOR_UTF8)))
+ {
+ /*FIXME: currently just remove them, maybe do something
+ * fancier in the future, atm it breaks if this char
+ * is inside <> */
+ _prepend_text_run(cur, s, p);
+ /* it's also advanced later in this loop need +text_len
+ in total*/
+ p += text_len - 1;
+ s = p + 1; /* One after the end of the replacement char */
+ }
+ p++;
}
o->pause_change = EINA_FALSE;
+ efl_event_callback_call(cur->obj, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, NULL);
_evas_textblock_changed(o, eo_obj);
}
-EAPI void
+EVAS_API void
evas_object_textblock_text_markup_prepend(Efl_Text_Cursor_Handle *cur, const char *text)
{
EINA_SAFETY_ON_NULL_RETURN(cur);
@@ -8709,6 +8990,7 @@ static void
_markup_get_text_utf8_append(Eina_Strbuf *sbuf, const char *text)
{
int ch, pos = 0, pos2 = 0;
+ const char * replacement;
for (;;)
{
@@ -8720,23 +9002,21 @@ _markup_get_text_utf8_append(Eina_Strbuf *sbuf, const char *text)
eina_strbuf_append(sbuf, "<br/>");
else if (ch == _TAB)
eina_strbuf_append(sbuf, "<tab/>");
- else if (ch == '<')
- eina_strbuf_append(sbuf, "&lt;");
- else if (ch == '>')
- eina_strbuf_append(sbuf, "&gt;");
- else if (ch == '&')
- eina_strbuf_append(sbuf, "&amp;");
- else if (ch == '"')
- eina_strbuf_append(sbuf, "&quot;");
- else if (ch == '\'')
- eina_strbuf_append(sbuf, "&apos;");
- else if (ch == _PARAGRAPH_SEPARATOR)
- eina_strbuf_append(sbuf, "<ps/>");
else if (ch == _REPLACEMENT_CHAR)
eina_strbuf_append(sbuf, "&#xfffc;");
- else if (ch != '\r')
+ else if (ch == _PARAGRAPH_SEPARATOR)
+ eina_strbuf_append(sbuf, "<ps/>");
+ else
{
- eina_strbuf_append_length(sbuf, text + pos, pos2 - pos);
+ replacement = _escaped_char_match(text + pos, NULL);
+ if (replacement)
+ {
+ eina_strbuf_append(sbuf, replacement);
+ }
+ else if (ch != '\r')
+ {
+ eina_strbuf_append_length(sbuf, text + pos, pos2 - pos);
+ }
}
}
}
@@ -8828,7 +9108,7 @@ _evas_object_textblock_text_markup_get(const Eo *eo_obj, Efl_Canvas_Textblock_Da
return markup;
}
-EAPI const char*
+EVAS_API const char*
evas_object_textblock_text_markup_get(Eo *eo_obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, NULL);
@@ -8842,7 +9122,7 @@ _efl_canvas_textblock_efl_text_markup_markup_get(const Eo *eo_obj, Efl_Canvas_Te
return _evas_object_textblock_text_markup_get(eo_obj, o);
}
-EAPI char *
+EVAS_API char *
evas_textblock_text_markup_to_utf8(const Evas_Object *eo_obj, const char *text)
{
/* FIXME: Redundant and awful, should be merged with markup_prepend */
@@ -9001,7 +9281,7 @@ evas_textblock_text_markup_to_utf8(const Evas_Object *eo_obj, const char *text)
return ret;
}
-EAPI char *
+EVAS_API char *
evas_textblock_text_utf8_to_markup(const Evas_Object *eo_obj EINA_UNUSED,
const char *text)
{
@@ -9201,7 +9481,7 @@ _layout_hyphen_item_new(Ctxt *c, const Evas_Object_Textblock_Text_Item *cur_ti)
if (c->hyphen_ti)
{
- _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
+ _item_free(c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
}
c->hyphen_ti = hyphen_ti = _layout_text_item_new(c, cur_ti->parent.format);
hyphen_ti->parent.text_node = cur_ti->parent.text_node;
@@ -9510,7 +9790,7 @@ _evas_textblock_cursor_init(Efl_Text_Cursor_Handle *cur, const Evas_Object *tb)
cur->pos = 0;
}
-EAPI Efl_Text_Cursor_Handle *
+EVAS_API Efl_Text_Cursor_Handle *
evas_object_textblock_cursor_new(const Evas_Object *eo_obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, NULL);
@@ -9530,7 +9810,7 @@ evas_object_textblock_cursor_new(const Evas_Object *eo_obj)
return cur;
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_free(Evas_Textblock_Cursor *cur)
{
if (!cur) return;
@@ -9576,7 +9856,7 @@ evas_textblock_cursor_unref(Efl_Text_Cursor_Handle *cursor, Eo * cur_obj)
}
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
_evas_textblock_cursor_is_format(const Efl_Text_Cursor_Handle *cur)
{
if ((!cur) || (!cur->node)) return EINA_FALSE;
@@ -9586,13 +9866,13 @@ _evas_textblock_cursor_is_format(const Efl_Text_Cursor_Handle *cur)
EINA_TRUE : EINA_FALSE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_is_format(const Evas_Textblock_Cursor *cur)
{
return _evas_textblock_cursor_is_format(cur);
}
-EAPI const Eina_List *
+EVAS_API const Eina_List *
evas_textblock_node_format_list_get(const Eo *eo_obj, const char *anchor)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, NULL);
@@ -9606,7 +9886,7 @@ evas_textblock_node_format_list_get(const Eo *eo_obj, const char *anchor)
return NULL;
}
-EAPI const Evas_Object_Textblock_Node_Format*
+EVAS_API const Evas_Object_Textblock_Node_Format*
evas_textblock_node_format_first_get(Evas_Object *eo_obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, NULL);
@@ -9616,7 +9896,7 @@ evas_textblock_node_format_first_get(Evas_Object *eo_obj)
return o->format_nodes;
}
-EAPI const Evas_Object_Textblock_Node_Format*
+EVAS_API const Evas_Object_Textblock_Node_Format*
evas_textblock_node_format_last_get(Evas_Object *eo_obj)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, NULL);
@@ -9626,21 +9906,21 @@ evas_textblock_node_format_last_get(Evas_Object *eo_obj)
return o->format_nodes ? _NODE_FORMAT(EINA_INLIST_GET(o->format_nodes)->last) : NULL;
}
-EAPI const Evas_Object_Textblock_Node_Format *
+EVAS_API const Evas_Object_Textblock_Node_Format *
evas_textblock_node_format_next_get(const Evas_Object_Textblock_Node_Format *n)
{
if (!n) return NULL;
return _NODE_FORMAT(EINA_INLIST_GET(n)->next);
}
-EAPI const Evas_Object_Textblock_Node_Format *
+EVAS_API const Evas_Object_Textblock_Node_Format *
evas_textblock_node_format_prev_get(const Evas_Object_Textblock_Node_Format *n)
{
if (!n) return NULL;
return _NODE_FORMAT(EINA_INLIST_GET(n)->prev);
}
-EAPI void
+EVAS_API void
evas_textblock_node_format_remove_pair(Eo *eo_obj, Evas_Object_Textblock_Node_Format *n)
{
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
@@ -9750,7 +10030,7 @@ found:
_evas_textblock_changed(o, eo_obj);
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_paragraph_first(Efl_Text_Cursor_Handle *cur)
{
if (!cur) return;
@@ -9762,7 +10042,7 @@ evas_textblock_cursor_paragraph_first(Efl_Text_Cursor_Handle *cur)
_evas_textblock_cursor_object_changed(cur);
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_paragraph_last(Efl_Text_Cursor_Handle *cur)
{
Evas_Object_Textblock_Node_Text *node;
@@ -9811,7 +10091,7 @@ _evas_textblock_cursor_paragraph_next(Efl_Text_Cursor_Handle *cur)
return EINA_FALSE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_paragraph_next(Efl_Text_Cursor_Handle *cur)
{
Eina_Bool b_ret = EINA_FALSE;
@@ -9850,7 +10130,7 @@ _evas_textblock_cursor_paragraph_prev(Efl_Text_Cursor_Handle *cur)
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_paragraph_prev(Efl_Text_Cursor_Handle *cur)
{
Eina_Bool b_ret = EINA_FALSE;
@@ -9860,13 +10140,13 @@ evas_textblock_cursor_paragraph_prev(Efl_Text_Cursor_Handle *cur)
return b_ret;
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_set_at_format(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *n)
{
evas_textblock_cursor_at_format_set(cur, n);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_format_next(Evas_Textblock_Cursor *cur)
{
Evas_Object_Textblock_Node_Format *node;
@@ -9905,7 +10185,7 @@ evas_textblock_cursor_format_next(Evas_Textblock_Cursor *cur)
return EINA_FALSE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_format_prev(Evas_Textblock_Cursor *cur)
{
const Evas_Object_Textblock_Node_Format *node;
@@ -9947,7 +10227,7 @@ evas_textblock_cursor_format_prev(Evas_Textblock_Cursor *cur)
#define BREAK_AFTER(i) \
(breaks[i] == WORDBREAK_BREAK)
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_word_start(Efl_Text_Cursor_Handle *cur)
{
if (!cur) return EINA_FALSE;
@@ -9973,7 +10253,7 @@ evas_textblock_cursor_word_start(Efl_Text_Cursor_Handle *cur)
if ((cur->pos > 0) && (cur->pos == len))
cur->pos--;
- for (i = cur->pos ; _is_white(text[i]) && BREAK_AFTER(i) ; i--)
+ for (i = cur->pos ; _is_white(text[i]) ; i--)
{
if (i == 0)
{
@@ -10013,7 +10293,7 @@ evas_textblock_cursor_word_start(Efl_Text_Cursor_Handle *cur)
return EINA_FALSE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_word_end(Efl_Text_Cursor_Handle *cur)
{
if (!cur) return EINA_FALSE;
@@ -10040,7 +10320,7 @@ evas_textblock_cursor_word_end(Efl_Text_Cursor_Handle *cur)
set_wordbreaks_utf32((const utf32_t *) text, len, lang, breaks);
}
- for (i = cur->pos; text[i] && _is_white(text[i]) && (BREAK_AFTER(i)) ; i++);
+ for (i = cur->pos; text[i] && _is_white(text[i]) ; i++);
if (i == len)
{
Evas_Object_Textblock_Node_Text *nnode;
@@ -10216,7 +10496,7 @@ _evas_textblock_cursor_cluster_pos_get(Evas_Textblock_Cursor *cur, Eina_Bool inc
Eina_Unicode content = 0;
if (!inc && cur->pos > 0)
content = eina_ustrbuf_string_get(cur->node->unicode)[cur->pos - 1];
- else if (inc && cur->pos >= 0 && eina_ustrbuf_length_get(cur->node->unicode) > (cur->pos + 1))
+ else if (inc && eina_ustrbuf_length_get(cur->node->unicode) > (cur->pos + 1))
content = eina_ustrbuf_string_get(cur->node->unicode)[cur->pos + 1];
if (VAR_SEQ(content)) *is_single_glyph = EINA_TRUE;
}
@@ -10231,7 +10511,7 @@ _evas_textblock_cursor_cluster_pos_get(Evas_Textblock_Cursor *cur, Eina_Bool inc
return ret;
}
-EAPI Eina_Bool evas_textblock_cursor_at_cluster_as_single_glyph(Evas_Textblock_Cursor *cur,Eina_Bool forward)
+EVAS_API Eina_Bool evas_textblock_cursor_at_cluster_as_single_glyph(Evas_Textblock_Cursor *cur,Eina_Bool forward)
{
Eina_Bool is_single_glyph = EINA_FALSE;
size_t ret = _evas_textblock_cursor_cluster_pos_get(cur, forward, &is_single_glyph);
@@ -10324,7 +10604,7 @@ _evas_textblock_cursor_prev(Evas_Textblock_Cursor *cur, Eina_Bool per_cluster)
return evas_textblock_cursor_paragraph_prev(cur);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_char_next(Efl_Text_Cursor_Handle *cur)
{
Eina_Bool b_ret = _evas_textblock_cursor_next(cur, EINA_FALSE);
@@ -10332,7 +10612,7 @@ evas_textblock_cursor_char_next(Efl_Text_Cursor_Handle *cur)
return b_ret;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_char_prev(Efl_Text_Cursor_Handle *cur)
{
Eina_Bool b_ret = _evas_textblock_cursor_prev(cur, EINA_FALSE);
@@ -10340,7 +10620,7 @@ evas_textblock_cursor_char_prev(Efl_Text_Cursor_Handle *cur)
return b_ret;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_cluster_next(Efl_Text_Cursor_Handle *cur)
{
Eina_Bool b_ret = _evas_textblock_cursor_next(cur, EINA_TRUE);
@@ -10348,7 +10628,7 @@ evas_textblock_cursor_cluster_next(Efl_Text_Cursor_Handle *cur)
return b_ret;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_cluster_prev(Efl_Text_Cursor_Handle *cur)
{
Eina_Bool b_ret = _evas_textblock_cursor_prev(cur, EINA_TRUE);
@@ -10356,7 +10636,7 @@ evas_textblock_cursor_cluster_prev(Efl_Text_Cursor_Handle *cur)
return b_ret;
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_paragraph_char_first(Efl_Text_Cursor_Handle *cur)
{
if (!cur) return;
@@ -10366,7 +10646,7 @@ evas_textblock_cursor_paragraph_char_first(Efl_Text_Cursor_Handle *cur)
_evas_textblock_cursor_object_changed(cur);
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_paragraph_char_last(Efl_Text_Cursor_Handle *cur)
{
int ind;
@@ -10416,7 +10696,7 @@ _cursor_line_first_char_get(Evas_Object_Textblock_Line *ln,
}
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_line_char_first(Efl_Text_Cursor_Handle *cur)
{
Evas_Object_Textblock_Line *ln = NULL;
@@ -10441,7 +10721,7 @@ evas_textblock_cursor_line_char_first(Efl_Text_Cursor_Handle *cur)
_evas_textblock_cursor_object_changed(cur);
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_line_char_last(Efl_Text_Cursor_Handle *cur)
{
Evas_Object_Textblock_Line *ln = NULL;
@@ -10515,7 +10795,7 @@ _evas_textblock_format_is_visible(Evas_Object_Textblock_Node_Format *fnode,
fnode->format_change = EINA_TRUE;
}
- while ((item = _format_parse(&s)))
+ while ((item = _format_parse(&s, EINA_FALSE)))
{
int itlen = s - item;
/* We care about all of the formats even after a - except for
@@ -10779,6 +11059,9 @@ _evas_textblock_node_text_adjust_offsets_to_start(Efl_Canvas_Textblock_Data *o,
size_t pos = 0;
int orig_end;
+ if ((start == 0) && (end == 0))
+ return EINA_FALSE;
+
itr = n->format_node;
if (!itr || (itr->text_node != n)) return EINA_FALSE;
@@ -10846,7 +11129,7 @@ _evas_textblock_node_text_adjust_offsets_to_start(Efl_Canvas_Textblock_Data *o,
if (_IS_PARAGRAPH_SEPARATOR(o, last_node->format))
{
_evas_textblock_node_format_remove(o, last_node, 0);
- return EINA_TRUE;
+ return o->multiline;//if single nothing to merge
}
}
@@ -10936,7 +11219,7 @@ _evas_textblock_node_format_pos_get(const Evas_Object_Textblock_Node_Format *fmt
return position + fmt->offset;
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_pos_get(const Efl_Text_Cursor_Handle *cur)
{
if (!cur) return -1;
@@ -10956,7 +11239,7 @@ evas_textblock_cursor_pos_get(const Efl_Text_Cursor_Handle *cur)
return npos + cur->pos;
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_pos_set(Efl_Text_Cursor_Handle *cur, int _pos)
{
Evas_Object_Textblock_Node_Text *n;
@@ -11004,7 +11287,7 @@ evas_textblock_cursor_pos_set(Efl_Text_Cursor_Handle *cur, int _pos)
_evas_textblock_cursor_object_changed(cur);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_line_set(Evas_Textblock_Cursor *cur, int line)
{
Evas_Object_Textblock_Line *ln;
@@ -11025,7 +11308,7 @@ evas_textblock_cursor_line_set(Evas_Textblock_Cursor *cur, int line)
return EINA_TRUE;
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_line_jump_by(Efl_Text_Cursor_Handle *cur, int by)
{
if (!cur) return;
@@ -11087,7 +11370,7 @@ evas_textblock_cursor_line_jump_by(Efl_Text_Cursor_Handle *cur, int by)
}
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_compare(const Efl_Text_Cursor_Handle *cur1,
const Efl_Text_Cursor_Handle *cur2)
{
@@ -11116,14 +11399,14 @@ evas_textblock_cursor_compare(const Efl_Text_Cursor_Handle *cur1,
return 0;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_equal(const Evas_Textblock_Cursor *cur1,
const Evas_Textblock_Cursor *cur2)
{
return ((cur1->node == cur2->node) && (cur1->pos == cur2->pos));
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_copy(const Evas_Textblock_Cursor *cur_src, Efl_Text_Cursor_Handle *cur_dest)
{
if (!cur_src || !cur_dest) return;
@@ -11390,6 +11673,10 @@ _evas_textblock_changed(Efl_Canvas_Textblock_Data *o, Evas_Object *eo_obj)
o->markup_text = NULL;
}
}
+ else
+ {
+ _evas_clear_main_format(eo_obj, o);
+ }
// FIXME: emit ONCE after this following checks
_cursor_emit_if_changed(o->cursor);
@@ -11506,7 +11793,7 @@ _evas_textblock_cursor_text_append(Efl_Text_Cursor_Handle *cur, const char *_tex
return len;
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *_text)
{
return _evas_textblock_cursor_text_append(cur, _text);
@@ -11526,7 +11813,7 @@ _evas_textblock_cursor_text_prepend(Efl_Text_Cursor_Handle *cur, const char *_te
return len;
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_text_prepend(Efl_Text_Cursor_Handle *cur, const char *_text)
{
return _evas_textblock_cursor_text_prepend(cur, _text);
@@ -11593,12 +11880,15 @@ _evas_textblock_node_format_new(Efl_Canvas_Textblock_Data *o, const char *_forma
format_len--; /* We don't care about '/' */
n->own_closer = EINA_TRUE;
}
- else if (format_len == 2)
+ else if (format_len < 4)
{
+ /* br,ps,tab are already own_closer without '/' */
char tmp[format_len + 1];
strncpy(tmp, format, format_len);
tmp[format_len] = '\0';
- if (_IS_PARAGRAPH_SEPARATOR(o, tmp))
+ if (_IS_PARAGRAPH_SEPARATOR(o, tmp) ||
+ _IS_LINE_SEPARATOR(tmp) ||
+ _IS_TAB(tmp))
{
n->own_closer = EINA_TRUE;
}
@@ -11816,7 +12106,8 @@ _evas_textblock_cursor_format_append(Efl_Text_Cursor_Handle *cur,
_evas_textblock_cursors_update_offset(cur, cur->node, cur->pos, 1);
if (_IS_PARAGRAPH_SEPARATOR(o, format))
{
- _evas_textblock_cursor_break_paragraph(cur, n, EINA_TRUE);
+ if (o->multiline)
+ _evas_textblock_cursor_break_paragraph(cur, n, EINA_TRUE);
}
else
{
@@ -11841,7 +12132,7 @@ _evas_textblock_cursor_format_append(Efl_Text_Cursor_Handle *cur,
return is_visible;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur, const char *format)
{
return _evas_textblock_cursor_format_append(cur, format, NULL, EINA_FALSE);
@@ -11866,13 +12157,13 @@ _evas_textblock_cursor_format_prepend(Efl_Text_Cursor_Handle *cur, const char *f
return is_visible;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur, const char *format)
{
return _evas_textblock_cursor_format_prepend(cur, format);
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_char_delete(Efl_Text_Cursor_Handle *cur)
{
Evas_Object_Textblock_Node_Text *n, *n2;
@@ -11951,7 +12242,7 @@ evas_textblock_cursor_char_delete(Efl_Text_Cursor_Handle *cur)
_evas_textblock_cursor_object_changed(cur);
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_range_delete(Efl_Text_Cursor_Handle *cur1, Efl_Text_Cursor_Handle *cur2)
{
if (!cur1) return;
@@ -12058,7 +12349,7 @@ evas_textblock_cursor_range_delete(Efl_Text_Cursor_Handle *cur1, Efl_Text_Cursor
efl_event_callback_call(cur1->obj, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, NULL);
}
-EAPI char *
+EVAS_API char *
evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur)
{
if (!cur || !cur->node) return NULL;
@@ -12256,7 +12547,7 @@ _evas_textblock_cursor_range_text_plain_get(const Efl_Text_Cursor_Handle *cur1,
}
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_textblock_cursor_range_formats_get(const Efl_Text_Cursor_Handle *cur1, const Evas_Textblock_Cursor *cur2)
{
Evas_Object *eo_obj;
@@ -12348,13 +12639,13 @@ _evas_textblock_cursor_range_text_get(const Efl_Text_Cursor_Handle *cur1, const
}
// Add to legacy api
-EAPI char *
+EVAS_API char *
evas_textblock_cursor_range_text_get(const Efl_Text_Cursor_Handle *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format)
{
return _evas_textblock_cursor_range_text_get(cur1, cur2, format);
}
-EAPI const char *
+EVAS_API const char *
evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur)
{
Efl_Text_Cursor_Handle cur1, cur2;
@@ -12377,7 +12668,7 @@ evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur)
return cur->node->utf8;
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur)
{
int len;
@@ -12393,7 +12684,7 @@ evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur
return len;
}
-EAPI const Evas_Object_Textblock_Node_Format *
+EVAS_API const Evas_Object_Textblock_Node_Format *
evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur)
{
if (!cur) return NULL;
@@ -12403,7 +12694,7 @@ evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur)
return _evas_textblock_cursor_node_format_at_pos_get(cur);
}
-EAPI const char *
+EVAS_API const char *
evas_textblock_node_format_text_get(const Evas_Object_Textblock_Node_Format *fmt)
{
static char *ret = NULL;
@@ -12454,7 +12745,7 @@ _evas_textblock_cursor_at_format_set(Efl_Text_Cursor_Handle *cur,
cur->pos = _evas_textblock_node_format_pos_get(fmt);
}
-EAPI void
+EVAS_API void
evas_textblock_cursor_at_format_set(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *fmt)
{
_evas_textblock_cursor_at_format_set(cur, fmt);
@@ -12474,7 +12765,7 @@ _evas_textblock_cursor_format_is_visible_get(const Efl_Text_Cursor_Handle *cur)
return EVAS_TEXTBLOCK_IS_VISIBLE_FORMAT_CHAR(text[cur->pos]);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_format_is_visible_get(const Evas_Textblock_Cursor *cur)
{
return _evas_textblock_cursor_format_is_visible_get(cur);
@@ -12500,7 +12791,7 @@ _find_layout_line_by_item(Evas_Object_Textblock_Paragraph *par, Evas_Object_Text
}
#endif
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_geometry_bidi_get(const Efl_Text_Cursor_Handle *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch, Evas_Coord *cx2, Evas_Coord *cy2, Evas_Coord *cw2, Evas_Coord *ch2, Evas_Textblock_Cursor_Type ctype)
{
if (!cur) return EINA_FALSE;
@@ -12685,7 +12976,7 @@ evas_textblock_cursor_geometry_bidi_get(const Efl_Text_Cursor_Handle *cur, Evas_
return EINA_FALSE;
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_geometry_get(const Efl_Text_Cursor_Handle *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch, Evas_BiDi_Direction *dir, Evas_Textblock_Cursor_Type ctype)
{
int ret = -1;
@@ -12875,7 +13166,7 @@ _evas_textblock_cursor_char_pen_geometry_common_get(int (*query_func) (void *dat
return ln->par->line_no + ln->line_no;
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
{
if (!cur) return -1;
@@ -12885,7 +13176,7 @@ evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_C
ENFN->font_char_coords_get, cur, cx, cy, cw, ch);
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_pen_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
{
if (!cur) return -1;
@@ -12895,7 +13186,7 @@ evas_textblock_cursor_pen_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Co
ENFN->font_pen_coords_get, cur, cx, cy, cw, ch);
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_line_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
{
Evas_Object_Textblock_Line *ln = NULL;
@@ -12929,7 +13220,7 @@ evas_textblock_cursor_line_geometry_get(const Evas_Textblock_Cursor *cur, Evas_C
return ln->par->line_no + ln->line_no;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_visible_range_get(Efl_Text_Cursor_Handle *start, Evas_Textblock_Cursor *end)
{
Eo * eo_obj = start->obj;
@@ -12952,11 +13243,11 @@ evas_textblock_cursor_visible_range_get(Efl_Text_Cursor_Handle *start, Evas_Text
EOLIAN static Eina_Bool
_efl_canvas_textblock_visible_range_get(Eo *eo_obj EINA_UNUSED,
Efl_Canvas_Textblock_Data *pd EINA_UNUSED,
- Efl_Text_Cursor *start, Efl_Text_Cursor *end)
+ Efl_Text_Cursor_Object *start, Efl_Text_Cursor_Object *end)
{
return evas_textblock_cursor_visible_range_get(
- efl_text_cursor_handle_get(start),
- efl_text_cursor_handle_get(end)
+ efl_text_cursor_object_handle_get(start),
+ efl_text_cursor_object_handle_get(end)
);
}
@@ -13052,21 +13343,26 @@ _evas_textblock_cursor_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord x, Evas_
* try to move cursor to a nearest breakable position. */
if (grapheme_breaks && (grapheme_breaks[pos + it->text_pos - 1] != GRAPHEMEBREAK_BREAK))
{
- size_t left_index = pos + it->text_pos - 1;
+ int left_index = pos + it->text_pos - 1;
size_t right_index = pos + it->text_pos - 1;
+ int temp_index;
int lx, rx;
/* To the left */
- while ((left_index > 0) &&
+ while ((left_index >= 0) &&
(grapheme_breaks[left_index] != GRAPHEMEBREAK_BREAK))
{
left_index--;
}
+ temp_index = left_index - it->text_pos + 1;
+ if (temp_index < 0)
+ temp_index = 0;
+
ENFN->font_pen_coords_get(ENC,
ti->parent.format->font.font,
&ti->text_props,
- left_index - it->text_pos + 1,
+ temp_index,
&lx, NULL, NULL, NULL);
/* To the right */
@@ -13130,7 +13426,7 @@ _evas_textblock_cursor_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord x, Evas_
if (o->paragraphs)
{
Evas_Object_Textblock_Line *first_line = o->paragraphs->lines;
- if (y >= o->paragraphs->y + o->formatted.h)
+ if (y >= o->paragraphs->y + o->formatted.h + o->style_pad.t + o->style_pad.b)
{
/* If we are after the last paragraph, use the last position in the
* text. */
@@ -13154,19 +13450,19 @@ end:
return ret;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_char_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord x, Evas_Coord y)
{
return _evas_textblock_cursor_coord_set(cur, x, y, EINA_FALSE);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_cluster_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord x, Evas_Coord y)
{
return _evas_textblock_cursor_coord_set(cur, x, y, EINA_TRUE);
}
-EAPI int
+EVAS_API int
evas_textblock_cursor_line_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord y)
{
Evas_Object_Textblock_Paragraph *found_par;
@@ -13204,7 +13500,7 @@ evas_textblock_cursor_line_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord y)
}
}
}
- else if (o->paragraphs && (y >= o->paragraphs->y + o->formatted.h))
+ else if (o->paragraphs && (y >= o->paragraphs->y + o->formatted.h + o->style_pad.t + o->style_pad.b))
{
int line_no = 0;
/* If we are after the last paragraph, use the last position in the
@@ -13590,7 +13886,7 @@ _line_fill_rect_get(const Evas_Object_Textblock_Line *ln,
return tr;
}
-EAPI Eina_Iterator *
+EVAS_API Eina_Iterator *
evas_textblock_cursor_range_simple_geometry_get(const Efl_Text_Cursor_Handle *cur1, const Evas_Textblock_Cursor *cur2)
{
if (!cur1) return NULL;
@@ -13773,7 +14069,7 @@ _efl_canvas_textblock_range_geometry_list_get(Eo *eo_obj EINA_UNUSED,
return rects;
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_textblock_cursor_range_geometry_get(const Efl_Text_Cursor_Handle *cur1, const Evas_Textblock_Cursor *cur2_obj)
{
Efl_Canvas_Textblock_Data *o;
@@ -13816,13 +14112,13 @@ _evas_textblock_cursor_format_item_geometry_get(const Efl_Text_Cursor_Handle *cu
return EINA_TRUE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
{
return _evas_textblock_cursor_format_item_geometry_get(cur, cx, cy, cw, ch);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur)
{
Eina_Bool ret = EINA_FALSE;
@@ -13842,7 +14138,7 @@ evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur)
}
/* general controls */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_textblock_line_number_geometry_get(const Eo *eo_obj, int line, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(eo_obj, EINA_FALSE);
@@ -13868,17 +14164,13 @@ _evas_object_textblock_clear(Evas_Object *eo_obj)
Eina_List *l;
Efl_Text_Cursor_Handle *cur;
Efl_Text_Cursor_Handle *co;
- Evas *eo_e;
- Evas_Public_Data *evas;
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
- eo_e = evas_object_evas_get(eo_obj);
- evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
evas_object_async_block(obj);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
if (o->paragraphs)
{
- _paragraphs_free(evas, o, obj, o->paragraphs);
+ _paragraphs_free(o, obj, o->paragraphs);
o->paragraphs = NULL;
}
@@ -13897,7 +14189,7 @@ _evas_object_textblock_clear(Evas_Object *eo_obj)
_evas_textblock_changed(o, eo_obj);
}
-EAPI void
+EVAS_API void
evas_object_textblock_clear(Evas_Object *eo_obj)
{
TB_HEAD();
@@ -14259,7 +14551,7 @@ evas_object_textblock_init(Evas_Object *eo_obj)
linebreak_init = EINA_TRUE;
init_linebreak();
init_wordbreak();
- init_graphemebreak();
+ init_graphemebreak();
}
o = obj->private_data;
@@ -14337,11 +14629,7 @@ evas_object_textblock_free(Evas_Object *eo_obj)
if (o->repch) eina_stringshare_del(o->repch);
if (o->ellip_ti)
{
- Evas *eo_e;
- Evas_Public_Data *evas;
- eo_e = evas_object_evas_get(eo_obj);
- evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
- _item_free(evas, o, obj, NULL, _ITEM(o->ellip_ti));
+ _item_free(o, obj, NULL, _ITEM(o->ellip_ti));
}
if (o->bidi_delimiters) eina_stringshare_del(o->bidi_delimiters);
_format_command_shutdown();
@@ -14357,6 +14645,8 @@ evas_object_textblock_free(Evas_Object *eo_obj)
o->fit_content_config.p_size_array = NULL;
}
+ _evas_clear_main_format(eo_obj, o);
+
#ifdef HAVE_HYPHEN
/* Hyphenation */
if (o->hyphenating)
@@ -15345,6 +15635,7 @@ _efl_canvas_textblock_efl_gfx_filter_filter_data_set(Eo *obj, Efl_Canvas_Textblo
else
{
db = calloc(1, sizeof(*db));
+ if (!db) return;
pd->gfx_filter.data_bindings = (Evas_Filter_Data_Binding *)
eina_inlist_append(EINA_INLIST_GET(pd->gfx_filter.data_bindings), EINA_INLIST_GET(db));
db->name = eina_stringshare_add(name);
@@ -15407,6 +15698,7 @@ _efl_canvas_textblock_efl_gfx_filter_filter_source_set(Eo *eo_obj, Efl_Canvas_Te
else
{
pb = calloc(1, sizeof(*pb));
+ if (!pb) return;
pb->eo_proxy = eo_obj;
pb->eo_source = eo_source;
pb->name = eina_stringshare_add(name);
@@ -15515,8 +15807,8 @@ evas_object_textblock_coords_recalc(Evas_Object *eo_obj,
static void
evas_object_textblock_render_pre(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
- void *type_private_data)
+ Evas_Object_Protected_Data *obj,
+ void *type_private_data)
{
Efl_Canvas_Textblock_Data *o = type_private_data;
ASYNC_BLOCK;
@@ -15544,13 +15836,13 @@ evas_object_textblock_render_pre(Evas_Object *eo_obj,
}
//evas_object_textblock_coords_recalc(eo_obj, obj, obj->private_data);
- if (!_relayout_if_needed(eo_obj, o))
+ is_v = evas_object_is_visible(obj);
+ was_v = evas_object_was_visible(obj);
+ if (is_v && !_relayout_if_needed(eo_obj, o))
{
o->redraw = 0;
evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes,
eo_obj, obj);
- is_v = evas_object_is_visible(obj);
- was_v = evas_object_was_visible(obj);
goto done;
}
if (o->changed)
@@ -15559,8 +15851,6 @@ evas_object_textblock_render_pre(Evas_Object *eo_obj,
o->redraw = 0;
evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes,
eo_obj, obj);
- is_v = evas_object_is_visible(obj);
- was_v = evas_object_was_visible(obj);
goto done;
}
@@ -15569,14 +15859,10 @@ evas_object_textblock_render_pre(Evas_Object *eo_obj,
o->redraw = 0;
evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes,
eo_obj, obj);
- is_v = evas_object_is_visible(obj);
- was_v = evas_object_was_visible(obj);
goto done;
}
/* now figure what changed and add draw rects */
/* if it just became visible or invisible */
- is_v = evas_object_is_visible(obj);
- was_v = evas_object_was_visible(obj);
if (is_v != was_v)
{
evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes,
@@ -16081,7 +16367,7 @@ _evas_textblock_annotations_insert(Eo *eo_obj, Efl_Text_Cursor_Handle *start, Ef
/* Sanitize the string and reject format items, closing '/' marks. */
buf = eina_strbuf_new();
- while ((item = _format_parse(&format)))
+ while ((item = _format_parse(&format, EINA_FALSE)))
{
int itlen = format - item;
/* We care about all of the formats even after a - except for
@@ -16132,6 +16418,7 @@ static void
_canvas_text_format_changed(Eo *eo_obj, Efl_Canvas_Textblock_Data *o)
{
o->format_changed = EINA_TRUE;
+ _evas_clear_main_format(eo_obj, o);
_evas_textblock_invalidate_all(o);
_evas_textblock_changed(o, eo_obj);
efl_event_callback_call(eo_obj, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, NULL);
@@ -16349,6 +16636,10 @@ _efl_canvas_textblock_efl_text_font_properties_font_bitmap_scalable_get(const Eo
if (_FMT(x) == v) return; \
_FMT(x) = v; \
_canvas_text_format_changed(obj, o);
+#define _FMT_SETD(x, v) \
+ if (EINA_DBL_EQ(_FMT(x), v)) return; \
+ _FMT(x) = v; \
+ _canvas_text_format_changed(obj, o);
/* Helper: updates format field of extended format information, and informs if changed. */
#define _FMT_INFO_SET_START(x, v) \
@@ -16412,19 +16703,25 @@ static struct
};
static void
-_efl_canvas_textblock_efl_text_style_text_underline_type_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, Efl_Text_Style_Underline_Type type EINA_UNUSED)
+_efl_canvas_textblock_efl_text_style_text_underline_type_set(Eo *obj, Efl_Canvas_Textblock_Data *o, Efl_Text_Style_Underline_Type type)
{
- ASYNC_BLOCK;
- _FMT_SET(underline, _style_underline_map[type].underline_single);
- _FMT_SET(underline2, _style_underline_map[type].underline_double);
- _FMT_SET(underline_dash, _style_underline_map[type].underline_dashed);
+ if (efl_text_underline_type_get(obj) == type)
+ return;
+ ASYNC_BLOCK;
+ _FMT(underline) = _style_underline_map[type].underline_single;
+ _FMT(underline2) = _style_underline_map[type].underline_double;
+ _FMT(underline_dash) = _style_underline_map[type].underline_dashed;
+ _canvas_text_format_changed(obj, o);
}
static Efl_Text_Style_Underline_Type
-_efl_canvas_textblock_efl_text_style_text_underline_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED)
+_efl_canvas_textblock_efl_text_style_text_underline_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o)
{
- return _FMT(underline);
+ if(_FMT(underline_dash)) return EFL_TEXT_STYLE_UNDERLINE_TYPE_DASHED;
+ else if (_FMT(underline2)) return EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE;
+ else if (_FMT(underline)) return EFL_TEXT_STYLE_UNDERLINE_TYPE_SINGLE;
+ else return EFL_TEXT_STYLE_UNDERLINE_TYPE_NONE;
}
static void
@@ -16444,7 +16741,7 @@ static void
_efl_canvas_textblock_efl_text_style_text_underline_height_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, double height EINA_UNUSED)
{
ASYNC_BLOCK;
- _FMT_SET(underline_height, height);
+ _FMT_SETD(underline_height, height);
}
static double
@@ -16489,18 +16786,18 @@ _efl_canvas_textblock_efl_text_style_text_underline_dashed_gap_set(Eo *obj EINA_
static int
_efl_canvas_textblock_efl_text_style_text_underline_dashed_gap_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED)
{
- return _FMT(underline_dash_width);
+ return _FMT(underline_dash_gap);
}
static void
-_efl_canvas_textblock_efl_text_style_text_underline2_color_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char r EINA_UNUSED, unsigned char g EINA_UNUSED, unsigned char b EINA_UNUSED, unsigned char a EINA_UNUSED)
+_efl_canvas_textblock_efl_text_style_text_secondary_underline_color_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char r EINA_UNUSED, unsigned char g EINA_UNUSED, unsigned char b EINA_UNUSED, unsigned char a EINA_UNUSED)
{
ASYNC_BLOCK;
_FMT_COLOR_SET(underline2);
}
static void
-_efl_canvas_textblock_efl_text_style_text_underline2_color_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char *r EINA_UNUSED, unsigned char *g EINA_UNUSED, unsigned char *b EINA_UNUSED, unsigned char *a EINA_UNUSED)
+_efl_canvas_textblock_efl_text_style_text_secondary_underline_color_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char *r EINA_UNUSED, unsigned char *g EINA_UNUSED, unsigned char *b EINA_UNUSED, unsigned char *a EINA_UNUSED)
{
_FMT_COLOR_RET(underline2);
}
@@ -16667,14 +16964,14 @@ _efl_canvas_textblock_efl_text_style_text_glow_color_get(const Eo *obj EINA_UNUS
}
static void
-_efl_canvas_textblock_efl_text_style_text_glow2_color_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char r EINA_UNUSED, unsigned char g EINA_UNUSED, unsigned char b EINA_UNUSED, unsigned char a EINA_UNUSED)
+_efl_canvas_textblock_efl_text_style_text_secondary_glow_color_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char r EINA_UNUSED, unsigned char g EINA_UNUSED, unsigned char b EINA_UNUSED, unsigned char a EINA_UNUSED)
{
ASYNC_BLOCK;
_FMT_COLOR_SET(glow2);
}
static void
-_efl_canvas_textblock_efl_text_style_text_glow2_color_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char *r EINA_UNUSED, unsigned char *g EINA_UNUSED, unsigned char *b EINA_UNUSED, unsigned char *a EINA_UNUSED)
+_efl_canvas_textblock_efl_text_style_text_secondary_glow_color_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, unsigned char *r EINA_UNUSED, unsigned char *g EINA_UNUSED, unsigned char *b EINA_UNUSED, unsigned char *a EINA_UNUSED)
{
_FMT_COLOR_RET(glow2);
}
@@ -16706,14 +17003,14 @@ _efl_canvas_textblock_efl_text_style_text_gfx_filter_set(Eo *obj EINA_UNUSED, Ef
static const char *
_efl_canvas_textblock_efl_text_style_text_gfx_filter_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED)
{
- return _FMT(gfx_filter)?_FMT(gfx_filter->name):NULL;
+ return _FMT_INFO(gfx_filter_name)?_FMT_INFO(gfx_filter_name):NULL;
}
static void
_efl_canvas_textblock_efl_text_format_ellipsis_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, double value EINA_UNUSED)
{
ASYNC_BLOCK;
- _FMT_SET(ellipsis, value);
+ _FMT_SETD(ellipsis, value);
}
static double
@@ -16740,12 +17037,206 @@ _efl_canvas_textblock_efl_text_format_wrap_get(const Eo *obj EINA_UNUSED, Efl_Ca
return _FMT_INFO(wrap);
}
+void
+clean_cursors_at_node(Eina_List **all_cursors,
+ Evas_Object_Textblock_Node_Text *tn,
+ Evas_Object_Textblock_Node_Text *main_node,
+ unsigned int len)
+{
+ Eina_List *l, *ll;
+ Efl_Text_Cursor_Handle *itr_cursor;
+ EINA_LIST_FOREACH_SAFE (*all_cursors, l, ll, itr_cursor)
+ {
+ if (tn == itr_cursor->node)
+ {
+ itr_cursor->pos += len;
+ itr_cursor->node = main_node;
+ itr_cursor->changed = EINA_TRUE;
+ *all_cursors = eina_list_remove(*all_cursors, itr_cursor);
+ }
+ }
+}
+
+/**
+ * @internal
+ * Combine all text nodes in a single node, for convert from multi-line to single-line.
+ * @param obj The evas object, must not be NULL.
+ * @return EINA_TRUE if text nodes merged, else return EINA_FALSE
+ */
+static void
+_merge_to_first_text_nodes(const Evas_Object *eo_obj)
+{
+ Efl_Canvas_Textblock_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
+ Evas_Object_Textblock_Node_Text *main_node, *tn;
+ Evas_Object_Textblock_Node_Format *fn;
+ int len, temp_len;
+
+ if (!o->text_nodes || !(EINA_INLIST_GET(o->text_nodes)->next))
+ return;
+
+ main_node = o->text_nodes;
+ main_node->dirty = EINA_TRUE;
+ len = (int) eina_ustrbuf_length_get(main_node->unicode);
+
+ Eina_List *all_cursors;
+ all_cursors = eina_list_clone(o->cursors);
+ all_cursors = eina_list_append(all_cursors, o->cursor);
+
+ while (o->text_nodes && (tn = _NODE_TEXT(EINA_INLIST_GET(o->text_nodes)->next)))
+ {
+ fn = tn->format_node;
+
+ if (fn && (fn->text_node == tn))
+ {
+ fn->offset++; //add prev ps
+ }
+
+ while (fn && (fn->text_node == tn))
+ {
+ fn->text_node = main_node;
+ fn->format_change = EINA_TRUE;
+
+ fn = _NODE_FORMAT(EINA_INLIST_GET(fn)->next);
+ }
+
+ temp_len = (int) eina_ustrbuf_length_get(tn->unicode);
+ eina_ustrbuf_append_length(main_node->unicode, eina_ustrbuf_string_get(tn->unicode), temp_len);
+
+ clean_cursors_at_node(&all_cursors, tn, main_node, len);
+
+ len += temp_len;
+
+ o->text_nodes = _NODE_TEXT(eina_inlist_remove(
+ EINA_INLIST_GET(o->text_nodes), EINA_INLIST_GET(tn)));
+ _evas_textblock_node_text_free(tn);
+ }
+
+ eina_list_free(all_cursors);
+}
+
+void
+clean_cursors_in_range(Eina_List **all_cursors, Evas_Object_Textblock_Node_Text *tn, unsigned int start, unsigned int end)
+{
+ Eina_List *l, *ll;
+ Efl_Text_Cursor_Handle *itr_cursor;
+ EINA_LIST_FOREACH_SAFE (*all_cursors, l, ll, itr_cursor)
+ {
+ if (itr_cursor->pos >= start && itr_cursor->pos <= end)
+ {
+ itr_cursor->pos -= start;
+ itr_cursor->node = tn;
+ itr_cursor->changed = EINA_TRUE;
+ *all_cursors = eina_list_remove(*all_cursors, itr_cursor);
+ }
+ }
+}
+
+/**
+ * @internal
+ * split text node into multiple text nodes based on ps, called for convert from singleline to multiline.
+ * @param obj The evas object, must not be NULL.
+ * @return EINA_TRUE if text nodes splitted, else return EINA_FALSE
+ */
+static void
+_split_text_nodes(const Evas_Object *eo_obj)
+{
+ Efl_Canvas_Textblock_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
+ Evas_Object_Textblock_Node_Text *tn;
+ Evas_Object_Textblock_Node_Format *fn;
+ Eina_Unicode *all_unicode;
+ Eina_List *all_cursors;
+ unsigned int len = 0, str_start = 0;
+
+ if (!o->text_nodes || !o->format_nodes)
+ return;
+
+ tn = o->text_nodes;
+ fn = tn->format_node;
+
+ while (fn && !_IS_PARAGRAPH_SEPARATOR_SIMPLE(fn->format))
+ {
+ len += fn->offset;
+ fn = _NODE_FORMAT(EINA_INLIST_GET(fn)->next);
+ }
+
+ if(!fn) return;
+
+ tn->dirty = EINA_TRUE;
+ len += fn->offset + 1;
+ all_unicode = eina_ustrbuf_string_steal(tn->unicode);
+
+ eina_ustrbuf_append_n(tn->unicode, all_unicode, len);
+
+ str_start += len;
+
+ tn = _evas_textblock_node_text_new();
+ o->text_nodes = _NODE_TEXT(eina_inlist_append(
+ EINA_INLIST_GET(o->text_nodes),
+ EINA_INLIST_GET(tn)));
+
+ fn = _NODE_FORMAT(EINA_INLIST_GET(fn)->next);
+
+ all_cursors = eina_list_clone(o->cursors);
+ all_cursors = eina_list_append(all_cursors, o->cursor);
+
+ while (fn)
+ {
+ len = 0;
+ tn->format_node = fn;
+ tn->format_node->offset--;
+
+ while (fn && !_IS_PARAGRAPH_SEPARATOR_SIMPLE(fn->format))
+ {
+ len += fn->offset;
+ fn->text_node = tn;
+ fn->format_change = EINA_TRUE;
+ fn = _NODE_FORMAT(EINA_INLIST_GET(fn)->next);
+ }
+
+ if (!fn) break;
+
+ fn->text_node = tn;
+ fn->format_change = EINA_TRUE;
+ len += fn->offset + 1;
+ eina_ustrbuf_append_n(tn->unicode, all_unicode + str_start, len);
+
+ clean_cursors_in_range(&all_cursors, tn, str_start, str_start + len);
+
+ str_start += len;
+
+ tn = _evas_textblock_node_text_new();
+ o->text_nodes = _NODE_TEXT(eina_inlist_append(
+ EINA_INLIST_GET(o->text_nodes),
+ EINA_INLIST_GET(tn)));
+
+ fn = _NODE_FORMAT(EINA_INLIST_GET(fn)->next);
+ }
+
+ if (!tn->format_node)
+ tn->format_node = _NODE_FORMAT(EINA_INLIST_GET(o->format_nodes)->last);
+
+ len = eina_unicode_strlen(all_unicode + str_start);
+ eina_ustrbuf_append_n(tn->unicode, all_unicode + str_start, len);
+
+ clean_cursors_in_range(&all_cursors, tn, str_start, str_start + len);
+ eina_list_free(all_cursors);
+
+ free(all_unicode);
+}
+
static void
_efl_canvas_textblock_efl_text_format_multiline_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, Eina_Bool enabled EINA_UNUSED)
{
ASYNC_BLOCK;
+
if (o->multiline == enabled) return;
o->multiline = enabled;
+
+ if (!o->multiline)
+ _merge_to_first_text_nodes(obj);
+ else
+ _split_text_nodes(obj);
+
_canvas_text_format_changed(obj, o);
}
@@ -16763,7 +17254,7 @@ _efl_canvas_textblock_efl_text_format_text_horizontal_align_auto_type_set(Eo *ob
{
_FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_NONE);
}
- else if (type == EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_NORMAL)
+ else if (type == EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_AUTO)
{
_FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL);
}
@@ -16771,7 +17262,7 @@ _efl_canvas_textblock_efl_text_format_text_horizontal_align_auto_type_set(Eo *ob
{
_FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE);
}
- else if (type == EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_END)
+ else if (type == EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_OPPOSITE)
{
_FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_END);
}
@@ -16785,11 +17276,11 @@ _efl_canvas_textblock_efl_text_format_text_horizontal_align_auto_type_get(const
if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL)
{
- ret = EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_NORMAL;
+ ret = EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_AUTO;
}
else if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_END)
{
- ret = EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_END;
+ ret = EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_OPPOSITE;
}
else if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE)
{
@@ -16805,7 +17296,7 @@ _efl_canvas_textblock_efl_text_format_text_horizontal_align_set(Eo *obj, Efl_Can
ASYNC_BLOCK;
if (EINA_DBL_EQ(_FMT(halign), value)) return;
_FMT(halign_auto) = EVAS_TEXTBLOCK_ALIGN_AUTO_NONE;
- _FMT_SET(halign, value);
+ _FMT_SETD(halign, value);
}
static double
@@ -16841,7 +17332,7 @@ _efl_canvas_textblock_efl_text_format_line_gap_set(Eo *obj EINA_UNUSED, Efl_Canv
if (EINA_DBL_EQ(linerelgap, 0.0))
{
- _FMT_SET(linegap, value);
+ _FMT_SETD(linegap, value);
}
else
{
@@ -16866,7 +17357,7 @@ _efl_canvas_textblock_efl_text_format_line_rel_gap_set(Eo *obj EINA_UNUSED, Efl_
if (EINA_DBL_EQ(linegap, 0.0))
{
- _FMT_SET(linerelgap, value);
+ _FMT_SETD(linerelgap, value);
}
else
{
@@ -16941,7 +17432,7 @@ _efl_canvas_textblock_efl_text_format_replacement_char_get(const Eo *obj EINA_UN
#ifdef HAVE_TESTS
/* return EINA_FALSE on error, used in unit_testing */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
_evas_textblock_check_item_node_link(Evas_Object *eo_obj)
{
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
@@ -16967,7 +17458,7 @@ _evas_textblock_check_item_node_link(Evas_Object *eo_obj)
return EINA_TRUE;
}
-EAPI int
+EVAS_API int
_evas_textblock_format_offset_get(const Evas_Object_Textblock_Node_Format *n)
{
return n->offset;
@@ -16976,7 +17467,7 @@ _evas_textblock_format_offset_get(const Evas_Object_Textblock_Node_Format *n)
#if 0
/* Good for debugging */
-EAPI void
+EVAS_API void
pfnode(Evas_Object_Textblock_Node_Format *n)
{
printf("Format Node: %p\n", n);
@@ -16985,7 +17476,7 @@ pfnode(Evas_Object_Textblock_Node_Format *n)
printf("'%s'\n", n->format);
}
-EAPI void
+EVAS_API void
ptnode(Evas_Object_Textblock_Node_Text *n)
{
printf("Text Node: %p\n", n);
@@ -16994,7 +17485,7 @@ ptnode(Evas_Object_Textblock_Node_Text *n)
printf("'%ls'\n", eina_ustrbuf_string_get(n->unicode));
}
-EAPI void
+EVAS_API void
pitem(Evas_Object_Textblock_Item *it)
{
Evas_Object_Textblock_Text_Item *ti;
@@ -17027,7 +17518,7 @@ pitem(Evas_Object_Textblock_Item *it)
}
}
-EAPI void
+EVAS_API void
ppar(Evas_Object_Textblock_Paragraph *par)
{
Evas_Object_Textblock_Item *it;
@@ -17044,7 +17535,7 @@ ppar(Evas_Object_Textblock_Paragraph *par)
#define EFL_CANVAS_TEXTBLOCK_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_canvas_textblock_efl_object_dbg_info_get)
-EAPI Efl_Text_Cursor_Handle *
+EVAS_API Efl_Text_Cursor_Handle *
evas_object_textblock_cursor_get(const Evas_Object *eo_obj EINA_UNUSED)
{
TB_HEAD_RETURN(NULL);
@@ -17101,9 +17592,9 @@ _text_layout_async_done(void *todo, Ecore_Thread *thread EINA_UNUSED)
if ((c->o->paragraphs) && (!EINA_INLIST_GET(c->o->paragraphs)->next) &&
(c->o->paragraphs->lines) && (!EINA_INLIST_GET(c->o->paragraphs->lines)->next))
{
- if (c->evas_o->cur->geometry.h < c->o->formatted.h)
+ if (c->evas_o->cur->geometry.h < c->o->formatted.h + c->o->style_pad.t + c->o->style_pad.b)
{
- c->o->formatted.oneline_h = c->o->formatted.h;
+ c->o->formatted.oneline_h = c->o->formatted.h + c->o->style_pad.t + c->o->style_pad.b;
}
}
c->o->changed = 0;
@@ -17120,7 +17611,9 @@ _text_layout_async_done(void *todo, Ecore_Thread *thread EINA_UNUSED)
evas_object_change(c->obj, c->evas_o);
free(c);
- _resolve_async(td, o->formatted.w, o->formatted.h);
+ _resolve_async(td,
+ o->formatted.w + o->style_pad.l + o->style_pad.r,
+ o->formatted.h + o->style_pad.t + o->style_pad.b);
o->layout_th = NULL;
o->layout_jobs--;
@@ -17167,7 +17660,9 @@ _efl_canvas_textblock_async_layout(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Textblock_
evas_object_textblock_coords_recalc(eo_obj, obj, obj->private_data);
if (o->formatted.valid)
{
- _resolve_async(ctx, o->formatted.w, o->formatted.w);
+ _resolve_async(ctx,
+ o->formatted.w + o->style_pad.l + o->style_pad.r,
+ o->formatted.h + o->style_pad.t + o->style_pad.b);
return f;
}
@@ -17237,6 +17732,10 @@ int fit_text_block(Evas_Object *eo_obj)
TEXT_FIT_CONTENT_CONFIG * fc = &o->fit_content_config;
+ // If there are no text or Paragraphs, then do nothing
+ if (efl_canvas_textblock_is_empty_get(eo_obj))
+ return EVAS_ERROR_SUCCESS;
+
if (fc->options == TEXTBLOCK_FIT_MODE_NONE && !fc->force_refit)
return EVAS_ERROR_SUCCESS;
@@ -17302,10 +17801,13 @@ int fit_text_block(Evas_Object *eo_obj)
}
else
{
+ int pad_l, pad_r, pad_t, pad_b;
+
fit_style_update(eo_obj,fc->p_size_array[mid],EINA_TRUE,bwrap);
Eina_Size2D size = efl_canvas_textblock_size_formatted_get(eo_obj);
- wf_new = size.w;
- hf_new = size.h;
+ efl_canvas_textblock_style_insets_get(eo_obj, &pad_l, &pad_r, &pad_t, &pad_b);
+ wf_new = size.w + pad_l + pad_r;
+ hf_new = size.h + pad_t + pad_b;
if (fc->p_size_array[mid]<255)
{
fc->size_cache[font_size].w = wf_new;
@@ -17369,7 +17871,7 @@ int fit_fill_internal_list(TEXT_FIT_CONTENT_CONFIG *fc)
-EAPI int evas_textblock_fit_options_set(Evas_Object *obj, unsigned int options)
+EVAS_API int evas_textblock_fit_options_set(Evas_Object *obj, unsigned int options)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
@@ -17383,7 +17885,7 @@ EAPI int evas_textblock_fit_options_set(Evas_Object *obj, unsigned int options)
return EVAS_ERROR_SUCCESS;
}
-EAPI int evas_textblock_fit_options_get(const Evas_Object *obj, unsigned int *p_options)
+EVAS_API int evas_textblock_fit_options_get(const Evas_Object *obj, unsigned int *p_options)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
@@ -17393,7 +17895,7 @@ EAPI int evas_textblock_fit_options_get(const Evas_Object *obj, unsigned int *p
return EVAS_ERROR_SUCCESS;
}
-EAPI int evas_textblock_fit_size_range_set(Evas_Object *obj, unsigned int min_font_size, unsigned int max_font_size)
+EVAS_API int evas_textblock_fit_size_range_set(Evas_Object *obj, unsigned int min_font_size, unsigned int max_font_size)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
@@ -17442,7 +17944,7 @@ EAPI int evas_textblock_fit_size_range_set(Evas_Object *obj, unsigned int min_f
return EVAS_ERROR_SUCCESS;
}
-EAPI int evas_textblock_fit_size_range_get(const Evas_Object *obj, unsigned int *p_min_font_size, unsigned int *p_max_font_size)
+EVAS_API int evas_textblock_fit_size_range_get(const Evas_Object *obj, unsigned int *p_min_font_size, unsigned int *p_max_font_size)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
@@ -17457,7 +17959,7 @@ EAPI int evas_textblock_fit_size_range_get(const Evas_Object *obj, unsigned int
return EVAS_ERROR_SUCCESS;
}
-EAPI int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int step_size)
+EVAS_API int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int step_size)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
@@ -17479,7 +17981,7 @@ EAPI int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int step_s
return EVAS_ERROR_SUCCESS;
}
-EAPI int evas_textblock_fit_step_size_get(const Evas_Object *obj, unsigned int * p_step_size)
+EVAS_API int evas_textblock_fit_step_size_get(const Evas_Object *obj, unsigned int * p_step_size)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
@@ -17499,7 +18001,7 @@ int compareUINT(const void * a, const void * b)
else return 0;
}
-EAPI int evas_textblock_fit_size_array_set(Evas_Object *obj, const unsigned int *p_size_array, size_t size_array_len)
+EVAS_API int evas_textblock_fit_size_array_set(Evas_Object *obj, const unsigned int *p_size_array, size_t size_array_len)
{
int n_ret = EVAS_ERROR_SUCCESS;
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
@@ -17531,7 +18033,7 @@ EAPI int evas_textblock_fit_size_array_set(Evas_Object *obj, const unsigned int
return EVAS_ERROR_SUCCESS;
}
-EAPI int evas_textblock_fit_size_array_get(const Evas_Object *obj, unsigned int *p_size_array, size_t *p_size_array_len, size_t passed_array_size)
+EVAS_API int evas_textblock_fit_size_array_get(const Evas_Object *obj, unsigned int *p_size_array, size_t *p_size_array_len, size_t passed_array_size)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
diff --git a/src/lib/evas/canvas/evas_object_textgrid.c b/src/lib/evas/canvas/evas_object_textgrid.c
index 504e8c1ffa..2d9b143452 100644
--- a/src/lib/evas/canvas/evas_object_textgrid.c
+++ b/src/lib/evas/canvas/evas_object_textgrid.c
@@ -335,7 +335,7 @@ evas_object_textgrid_row_text_append(Evas_Object_Textgrid_Row *row,
script, &codepoint, 1);
memset(&(text->text_props), 0, sizeof(Evas_Text_Props));
evas_common_text_props_script_set(&(text->text_props), script);
- ENFN->font_text_props_info_create(ENC, script_fi, &codepoint,
+ ENFN->font_text_props_info_create(ENC, cur_fi, &codepoint,
&(text->text_props), NULL, 0, 1,
EVAS_TEXT_PROPS_MODE_NONE,
o->cur.font_description_normal->lang);
@@ -868,7 +868,7 @@ _evas_textgrid_efl_gfx_entity_scale_set(Evas_Object *eo_obj, Evas_Textgrid_Data
/********************* API *********************/
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_textgrid_add(Evas *e)
{
e = evas_find(e);
@@ -991,7 +991,7 @@ _alternate_font_weight_slant(Evas_Object_Protected_Data *obj,
script, W, 1);
memset(&text_props, 0, sizeof(Evas_Text_Props));
evas_common_text_props_script_set(&text_props, script);
- ENFN->font_text_props_info_create(ENC, script_fi, W, &text_props,
+ ENFN->font_text_props_info_create(ENC, cur_fi, W, &text_props,
NULL, 0, 1,
EVAS_TEXT_PROPS_MODE_NONE,
fdesc->lang);
@@ -1073,7 +1073,7 @@ _evas_textgrid_font_reload(Eo *eo_obj, Evas_Textgrid_Data *o)
script, W, 1);
memset(&text_props, 0, sizeof(Evas_Text_Props));
evas_common_text_props_script_set(&text_props, script);
- ENFN->font_text_props_info_create(ENC, script_fi, W, &text_props,
+ ENFN->font_text_props_info_create(ENC, cur_fi, W, &text_props,
NULL, 0, 1,
EVAS_TEXT_PROPS_MODE_NONE,
fdesc->lang);
@@ -1474,13 +1474,13 @@ _evas_textgrid_efl_object_dbg_info_get(Eo *eo_obj, Evas_Textgrid_Data *o EINA_UN
}
}
-EAPI void
+EVAS_API void
evas_object_textgrid_font_source_set(Eo *obj, const char *font_source)
{
efl_text_font_source_set((Eo *) obj, font_source);
}
-EAPI const char *
+EVAS_API const char *
evas_object_textgrid_font_source_get(const Eo *obj)
{
const char *font_source = NULL;
@@ -1488,14 +1488,14 @@ evas_object_textgrid_font_source_get(const Eo *obj)
return font_source;
}
-EAPI void
+EVAS_API void
evas_object_textgrid_font_set(Eo *obj, const char *font_name, Evas_Font_Size font_size)
{
efl_text_font_family_set((Eo *) obj, font_name);
efl_text_font_size_set((Eo *) obj, font_size);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_font_get(const Eo *obj, const char **font_name, Evas_Font_Size *font_size)
{
if (font_name) *font_name = efl_text_font_family_get((Eo *) obj);
diff --git a/src/lib/evas/canvas/evas_out.c b/src/lib/evas/canvas/evas_out.c
index 35ea97d579..49fd7f7ea5 100644
--- a/src/lib/evas/canvas/evas_out.c
+++ b/src/lib/evas/canvas/evas_out.c
@@ -35,7 +35,7 @@ efl_canvas_output_info_get(Evas_Public_Data *e, Efl_Canvas_Output *output)
e->engine.func->output_info_setup(output->info);
}
-EAPI Efl_Canvas_Output *
+EVAS_API Efl_Canvas_Output *
efl_canvas_output_add(Evas *canvas)
{
Efl_Canvas_Output *r;
@@ -67,7 +67,7 @@ efl_canvas_output_add(Evas *canvas)
return r;
}
-EAPI void
+EVAS_API void
efl_canvas_output_del(Efl_Canvas_Output *output)
{
if (output->canvas)
@@ -93,7 +93,7 @@ efl_canvas_output_del(Efl_Canvas_Output *output)
free(output);
}
-EAPI void
+EVAS_API void
efl_canvas_output_view_set(Efl_Canvas_Output *output,
Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
@@ -117,7 +117,7 @@ efl_canvas_output_view_set(Efl_Canvas_Output *output,
// XXX: tell evas to add damage if viewport loc/size changed
}
-EAPI void
+EVAS_API void
efl_canvas_output_view_get(Efl_Canvas_Output *output,
Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
{
@@ -127,7 +127,7 @@ efl_canvas_output_view_get(Efl_Canvas_Output *output,
if (h) *h = output->geometry.h;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
efl_canvas_output_engine_info_set(Efl_Canvas_Output *output,
Evas_Engine_Info *info)
{
@@ -157,7 +157,7 @@ efl_canvas_output_engine_info_set(Efl_Canvas_Output *output,
else
{
setup:
- output->output =
+ output->output =
e->engine.func->output_setup(_evas_engine_context(e), info,
output->geometry.w, output->geometry.h);
}
@@ -165,7 +165,7 @@ efl_canvas_output_engine_info_set(Efl_Canvas_Output *output,
return !!output->output;
}
-EAPI Evas_Engine_Info*
+EVAS_API Evas_Engine_Info*
efl_canvas_output_engine_info_get(Efl_Canvas_Output *output)
{
Evas_Engine_Info *info = output->info;
@@ -176,14 +176,14 @@ efl_canvas_output_engine_info_get(Efl_Canvas_Output *output)
return output->info;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
efl_canvas_output_lock(Efl_Canvas_Output *output)
{
output->lock++;
return EINA_TRUE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
efl_canvas_output_unlock(Efl_Canvas_Output *output)
{
return !!(--output->lock);
diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c
index 70ed55a953..f013f23aa6 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -1,5 +1,6 @@
#include "evas_common_private.h"
#include "evas_private.h"
+#include <Ecore.h>
#include <math.h>
#include <assert.h>
@@ -379,6 +380,9 @@ _evas_proxy_redraw_set(Evas_Public_Data *e, Evas_Object_Protected_Data *obj,
if (render)
{
+ /* Not good... but make it sure if the proxies have missed at update
+ if its sources are remained changed as pending objects in the prev frame. */
+ evas_object_change(eo_proxy, proxy);
proxy->func->render_pre(eo_proxy, proxy, proxy->private_data);
_evas_render_prev_cur_clip_cache_add(e, proxy);
}
@@ -386,15 +390,6 @@ _evas_proxy_redraw_set(Evas_Public_Data *e, Evas_Object_Protected_Data *obj,
//Update the proxies recursively.
_evas_proxy_redraw_set(e, proxy, render);
}
-
- if (obj->proxy->proxy_textures)
- {
- /* Flag need redraw on proxy texture source */
- EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, obj->proxy,
- Evas_Object_Proxy_Data, source)
- source->redraw = EINA_TRUE;
- EINA_COW_WRITE_END(evas_object_proxy_cow, obj->proxy, source);
- }
}
/* sets the mask redraw flag for all the objects clipped by this mask */
@@ -463,7 +458,7 @@ _evas_render_phase1_direct(Evas_Public_Data *e,
EINA_PREFETCH(&(obj->cur->clipper));
if (obj->changed) evas_object_clip_recalc(obj);
- if (obj->proxy->proxies || obj->proxy->proxy_textures)
+ if (obj->proxy->proxies)
{
/* is proxy source */
if (_evas_render_object_changed_get(obj))
@@ -495,7 +490,7 @@ _evas_render_phase1_direct(Evas_Public_Data *e,
if (!obj->smart.smart || evas_object_smart_changed_get(obj))
{
/* proxy sources */
- if (obj->proxy->proxies || obj->proxy->proxy_textures)
+ if (obj->proxy->proxies)
{
EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, obj->proxy,
Evas_Object_Proxy_Data, proxy_write)
@@ -1761,6 +1756,9 @@ _evas_render_mapped_mask(Evas_Public_Data *evas, Evas_Object_Protected_Data *obj
Evas_Proxy_Render_Data *proxy_render_data, void *output, void *ctx, int off_x, int off_y, int level, Eina_Bool do_async)
{
if (!mask) return;
+ if (proxy_render_data &&
+ !proxy_render_data->source_clip &&
+ proxy_render_data->src_obj->clip.mask == mask) return;
// This path can be hit when we're multiplying masks on top of each other...
Evas_Object_Protected_Data *prev_mask = obj->clip.prev_mask;
@@ -2156,7 +2154,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
_evas_render_mapped_mask(evas, obj, obj->cur->clipper, proxy_render_data, output, ctx, off_x, off_y, level, do_async);
else if (!proxy_src_clip && proxy_render_data)
{
- if (!_proxy_context_clip(evas, ctx, proxy_render_data, proxy_render_data->proxy_obj, off_x, off_y))
+ if (!_proxy_context_clip(evas, ctx, proxy_render_data, obj, off_x, off_y))
goto on_empty_clip;
}
@@ -2170,6 +2168,13 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
EINA_INLIST_FOREACH
(evas_object_smart_members_get_direct(eo_obj), obj2)
{
+ /* skip proxy object if its source is its smart parent.
+ who makes this relation? a proxy object working for
+ a smart object to set a filter program. the proxy
+ object should be a member of smart object to sync
+ stacking changes. */
+ if (obj2->is_filter_object) continue;
+
clean_them |= evas_render_mapped(evas, obj2->object,
obj2, ctx,
output, surface,
@@ -2202,14 +2207,13 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
if ((_evas_render_has_map(obj) && !_evas_render_can_map(obj)) ||
_evas_render_object_is_mask(obj->cur->clipper))
evas_object_clip_recalc(obj);
- if (!proxy_render_data)
- _evas_render_mapped_context_clip_set(evas, eo_obj, obj, ctx,
- proxy_render_data,
- off_x, off_y);
+ _evas_render_mapped_context_clip_set(evas, eo_obj, obj, ctx,
+ proxy_render_data,
+ off_x, off_y);
}
else if (proxy_render_data)
{
- if (!_proxy_context_clip(evas, ctx, proxy_render_data, proxy_render_data->proxy_obj, off_x, off_y))
+ if (!_proxy_context_clip(evas, ctx, proxy_render_data, obj, off_x, off_y))
goto on_empty_clip;
}
}
@@ -2232,7 +2236,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
#endif
obj->func->render(eo_obj, obj, obj->private_data,
- ENC, output, ctx, surface, off_x, off_y, EINA_FALSE);
+ ENC, output, ctx, surface, off_x, off_y, do_async);
}
}
else if (!obj->is_smart)
@@ -2267,7 +2271,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
}
else if (proxy_render_data)
{
- if (!_proxy_context_clip(evas, ctx, proxy_render_data, proxy_render_data->proxy_obj, off_x, off_y))
+ if (!_proxy_context_clip(evas, ctx, proxy_render_data, obj, off_x, off_y))
goto on_empty_clip;
}
}
@@ -2304,7 +2308,6 @@ end:
* Render the source object when a proxy is set.
* Used to force a draw if necessary, else just makes sure it's available.
* Called from: image objects and text with filters.
- * TODO: 3d objects subrender should probably be merged here as well.
*/
void
evas_render_proxy_subrender(Evas *eo_e, void *output, Evas_Object *eo_source, Evas_Object *eo_proxy,
@@ -2316,6 +2319,7 @@ evas_render_proxy_subrender(Evas *eo_e, void *output, Evas_Object *eo_source, Ev
int level = 1;
void *ctx;
int w, h, off_x = 0, off_y = 0;
+ Eina_Rectangle lr = {0, 0, 0, 0};
#ifdef REND_DBG
level = __RD_level;
@@ -2326,7 +2330,16 @@ evas_render_proxy_subrender(Evas *eo_e, void *output, Evas_Object *eo_source, Ev
source = efl_data_scope_get(eo_source, EFL_CANVAS_OBJECT_CLASS);
proxy = efl_data_scope_get(eo_proxy, EFL_CANVAS_OBJECT_CLASS);
- if (proxy->proxy->proxies || (!proxy->cur->clipper) || (!proxy->cur->has_fixed_size))
+ evas_object_image_load_region_get(eo_proxy, &lr.x, &lr.y, &lr.w, &lr.h);
+
+ if (lr.w > 0 && lr.h > 0)
+ {
+ w = lr.w;
+ h = lr.h;
+ off_x = -lr.x;
+ off_y = -lr.y;
+ }
+ else if (proxy->proxy->proxies || (!proxy->cur->clipper) || (!proxy->cur->has_fixed_size))
{
/* make full surface available if this proxy is being sampled from */
w = source->cur->geometry.w;
@@ -2713,6 +2726,15 @@ _evas_render_cutout_add(Evas_Public_Data *evas, void *context,
obj->cur->cache.clip.w, obj->cur->cache.clip.h);
}
else return;
+ if (!_is_obj_in_framespace(obj, evas))
+ {
+ int fw, fh;
+
+ fw = evas->viewport.w - evas->framespace.w;
+ fh = evas->viewport.h - evas->framespace.h;
+ RECTS_CLIP_TO_RECT(cox, coy, cow, coh,
+ 0, 0, fw, fh);
+ }
if (cutout_margin)
{
cox += cutout_margin->l;
@@ -2727,7 +2749,16 @@ _evas_render_cutout_add(Evas_Public_Data *evas, void *context,
void
evas_render_rendering_wait(Evas_Public_Data *evas)
{
- while (evas->rendering) evas_async_events_process_blocking();
+ double t0 = ecore_time_get();
+ while (evas->rendering)
+ {
+ evas_async_events_process_blocking();
+ if ((ecore_time_get() - t0) > 0.2)
+ {
+ ERR("timeout waiting for async rendering");
+ break;
+ }
+ }
}
/*
@@ -2930,7 +2961,7 @@ evas_render_pre(Evas *eo_e, Evas_Public_Data *evas)
eina_evlog("-render_pre_objects_finalize", eo_e, 0.0, NULL);
}
-EAPI void
+EVAS_API void
evas_render_pending_objects_flush(Evas *eo_e)
{
Evas_Public_Data *evas = efl_data_scope_safe_get(eo_e, EVAS_CANVAS_CLASS);
@@ -3256,6 +3287,7 @@ evas_render_updates_internal(Evas *eo_e,
EVAS_RENDER_MODE_SYNC :
EVAS_RENDER_MODE_ASYNC_INIT;
Eina_Bool haveup = EINA_FALSE;
+ static int show_update_boxes = -1;
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
return EINA_FALSE;
@@ -3283,6 +3315,11 @@ evas_render_updates_internal(Evas *eo_e,
double start_time = _time_get();
#endif
+ if (show_update_boxes == -1)
+ {
+ if (getenv("EVAS_RENDER_DEBUG_UPDATE_BOXES")) show_update_boxes = 1;
+ else show_update_boxes = 0;
+ }
evas_render_pre(eo_e, evas);
_evas_planes(e);
@@ -3331,6 +3368,7 @@ evas_render_updates_internal(Evas *eo_e,
for (i = 0; i < e->restack_objects.count; ++i)
{
obj = eina_array_data_get(&e->restack_objects, i);
+ if (!obj->private_data) continue;
if (_evas_render_object_is_mask(obj))
_evas_mask_redraw_set(e, obj);
obj->func->render_pre(obj->object, obj, obj->private_data);
@@ -3396,6 +3434,7 @@ evas_render_updates_internal(Evas *eo_e,
obj = ent->obj;
eo_obj = obj->object;
+ if (!obj->private_data) continue;
if (UNLIKELY(
(!obj->is_smart) &&
(!obj->clip.clipees) &&
@@ -3589,6 +3628,29 @@ evas_render_updates_internal(Evas *eo_e,
eina_evlog("-render_update", eo_e, 0.0, NULL);
if (!do_async)
{
+ if (show_update_boxes == 1)
+ {
+ static int fn = 0;
+ void *ctx;
+
+ fn++;
+ ctx = ENFN->context_new(ENC);
+ ENFN->context_color_set
+ (ENC, ctx, fn & 0xff, 0x40, 0x20, 0xff);
+ ENFN->rectangle_draw(ENC, out->output,
+ ctx, surface,
+ ux - out->geometry.x, uy - out->geometry.y, uw, 1, do_async);
+ ENFN->rectangle_draw(ENC, out->output,
+ ctx, surface,
+ ux - out->geometry.x, uy - out->geometry.y + uh - 1, uw, 1, do_async);
+ ENFN->rectangle_draw(ENC, out->output,
+ ctx, surface,
+ ux - out->geometry.x, uy - out->geometry.y, 1, uh, do_async);
+ ENFN->rectangle_draw(ENC, out->output,
+ ctx, surface,
+ ux - out->geometry.x + uw - 1, uy - out->geometry.y, 1, uh, do_async);
+ ENFN->context_free(ENC, ctx);
+ }
eina_evlog("+render_push", eo_e, 0.0, NULL);
ENFN->output_redraws_next_update_push(ENC, out->output, surface,
ux - out->geometry.x, uy - out->geometry.y, uw, uh,
@@ -3599,6 +3661,33 @@ evas_render_updates_internal(Evas *eo_e,
eina_evlog("-render_surface", eo_e, 0.0, NULL);
}
+ else if (make_updates)
+ {
+ Render_Updates *ru;
+ void *surface;
+ int ux, uy, uw, uh;
+ int cx, cy, cw, ch;
+ while ((surface =
+ ENFN->output_redraws_next_update_get
+ (ENC, out->output,
+ &ux, &uy, &uw, &uh,
+ &cx, &cy, &cw, &ch)))
+ {
+ haveup = EINA_TRUE;
+
+ /* adjust the rendering rectangle to the output offset */
+ ux += out->geometry.x;
+ uy += out->geometry.y;
+ ru = malloc(sizeof(*ru));
+ ru->surface = surface;
+ //XXX: need a way of reffing output surfaces
+ NEW_RECT(ru->area, ux, uy, uw, uh);
+ eina_spinlock_take(&(e->render.lock));
+ out->updates = eina_list_append(out->updates, ru);
+ eina_spinlock_release(&(e->render.lock));
+ }
+
+ }
}
/* First process all output, then flush */
@@ -3636,6 +3725,11 @@ evas_render_updates_internal(Evas *eo_e,
}
eina_evlog("-render_phase8", eo_e, 0.0, NULL);
+ if (evas_font_data_cache_get(EVAS_FONT_DATA_CACHE_TEXTURE) == 0)
+ ENFN->font_glyphs_gc_collect(ENC, 1.0f, NULL, NULL, EINA_TRUE);
+ else
+ ENFN->font_glyphs_gc_collect(ENC, 0.33f, NULL, NULL, EINA_TRUE);
+
eina_evlog("+render_clear", eo_e, 0.0, NULL);
if (!do_async && rendering)
{
@@ -3655,6 +3749,7 @@ evas_render_updates_internal(Evas *eo_e,
obj = ent->obj;
eo_obj = obj->object;
+ if (!obj->private_data) continue;
obj->pre_render_done = EINA_FALSE;
RD(0, " OBJ %s changed:%i do_draw:%i\n", RDNAME(obj), obj->changed, do_draw);
if ((clean_them) || (obj->changed && do_draw))
@@ -3715,6 +3810,7 @@ evas_render_updates_internal(Evas *eo_e,
{
obj = eina_array_data_get(&e->render_objects, i);
eo_obj = obj->object;
+ if (!obj->private_data) continue;
obj->pre_render_done = EINA_FALSE;
if ((obj->changed) && (do_draw))
{
@@ -3725,6 +3821,14 @@ evas_render_updates_internal(Evas *eo_e,
}
eina_evlog("-render_post_reset", eo_e, 0.0, NULL);
+ for (i = 0; i < e->render_post_change_objects.count; ++i)
+ {
+ obj = eina_array_data_get(&e->render_post_change_objects, i);
+ eo_obj = obj->object;
+ evas_object_change(eo_obj, obj);
+ }
+ OBJS_ARRAY_CLEAN(&e->render_post_change_objects);
+
eina_evlog("+render_end", eo_e, 0.0, NULL);
e->changed = EINA_FALSE;
e->viewport.changed = EINA_FALSE;
@@ -3770,14 +3874,17 @@ evas_render_updates_internal(Evas *eo_e,
Render_Updates *ru;
post.updated_area = NULL;
- EINA_LIST_FOREACH(e->outputs, l1, out)
+ if (haveup)
{
- if (!out->output) continue ;
- EINA_LIST_FOREACH(out->updates, l2, ru)
+ EINA_LIST_FOREACH(e->outputs, l1, out)
{
- post.updated_area = eina_list_append(post.updated_area, ru->area);
- //XXX: need a way of unreffing output surfaces
- ru->surface = NULL;
+ if (!out->output) continue ;
+ EINA_LIST_FOREACH(out->updates, l2, ru)
+ {
+ post.updated_area = eina_list_append(post.updated_area, ru->area);
+ //XXX: need a way of unreffing output surfaces
+ ru->surface = NULL;
+ }
}
}
eina_spinlock_take(&(e->render.lock));
@@ -3842,6 +3949,10 @@ evas_render_wakeup(Evas *eo_e)
}
eina_spinlock_release(&(evas->render.lock));
+ /* post rendering */
+ _rendering_evases = eina_list_remove_list(_rendering_evases, evas->rendering);
+ evas->rendering = NULL;
+
/* flush redraws */
if (haveup)
{
@@ -3863,17 +3974,17 @@ evas_render_wakeup(Evas *eo_e)
/* unref queues */
eina_array_foreach(&evas->scie_unref_queue, _drop_scie_ref, NULL);
- eina_array_clean(&evas->scie_unref_queue);
+ eina_array_flush(&evas->scie_unref_queue);
evas_common_rgba_image_scalecache_prune();
eina_array_foreach(&evas->image_unref_queue, _drop_image_cache_ref, NULL);
- eina_array_clean(&evas->image_unref_queue);
+ eina_array_flush(&evas->image_unref_queue);
eina_array_foreach(&evas->glyph_unref_queue, _drop_glyph_ref, NULL);
- eina_array_clean(&evas->glyph_unref_queue);
+ eina_array_flush(&evas->glyph_unref_queue);
eina_array_foreach(&evas->texts_unref_queue, _drop_texts_ref, NULL);
- eina_array_clean(&evas->texts_unref_queue);
+ eina_array_flush(&evas->texts_unref_queue);
SLKL(evas->post_render.lock);
jobs_il = EINA_INLIST_GET(evas->post_render.jobs);
@@ -3889,10 +4000,6 @@ evas_render_wakeup(Evas *eo_e)
free(job);
}
- /* post rendering */
- _rendering_evases = eina_list_remove_list(_rendering_evases, evas->rendering);
- evas->rendering = NULL;
-
post.updated_area = ret_updates;
_cb_always_call(eo_e, evas, EVAS_CALLBACK_RENDER_POST, &post);
evas->inside_post_render = EINA_FALSE;
@@ -3924,9 +4031,11 @@ evas_render_pipe_wakeup(void *data)
Render_Updates *ru;
Evas_Public_Data *evas = data;
Efl_Canvas_Output *out;
+ Evas *e;
eina_evlog("+render_pipe_wakeup", evas->evas, 0.0, NULL);
eina_spinlock_take(&(evas->render.lock));
+ e = evas->evas;
EINA_LIST_FOREACH(evas->outputs, ll, out)
{
if (!out->output) continue ;
@@ -3948,10 +4057,11 @@ evas_render_pipe_wakeup(void *data)
}
eina_spinlock_release(&(evas->render.lock));
evas_async_events_put(data, 0, NULL, evas_render_async_wakeup);
- eina_evlog("-render_pipe_wakeup", evas->evas, 0.0, NULL);
+ /* use local pointer to avoid data race with 'evas' deref after releasing lock */
+ eina_evlog("-render_pipe_wakeup", e, 0.0, NULL);
}
-EAPI void
+EVAS_API void
evas_render_updates_free(Eina_List *updates)
{
Eina_Rectangle *r;
@@ -4039,12 +4149,19 @@ _evas_canvas_render(Eo *eo_e, Evas_Public_Data *e)
EOLIAN void
_evas_canvas_norender(Eo *eo_e, Evas_Public_Data *e)
{
+ evas_canvas_async_block(e);
+ evas_render_updates_internal_wait(eo_e, 0, 0);
+}
+
+EVAS_API void
+evas_norender_with_updates(Eo *eo_e)
+{
+ Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
Eina_List *ret;
Render_Updates *ru;
evas_canvas_async_block(e);
- // if (!e->changed) return;
- ret = evas_render_updates_internal_wait(eo_e, 0, 0);
+ ret = evas_render_updates_internal_wait(eo_e, 1, 0);
EINA_LIST_FREE(ret, ru)
{
eina_rectangle_free(ru->area);
@@ -4078,6 +4195,7 @@ _evas_canvas_render_idle_flush(Eo *eo_e, Evas_Public_Data *evas)
OBJS_ARRAY_FLUSH(&evas->delete_objects);
OBJS_ARRAY_FLUSH(&evas->obscuring_objects);
OBJS_ARRAY_FLUSH(&evas->temporary_objects);
+ OBJS_ARRAY_FLUSH(&evas->map_clip_objects);
eina_array_foreach(&evas->clip_changes, _evas_clip_changes_free, NULL);
eina_array_clean(&evas->clip_changes);
@@ -4194,6 +4312,7 @@ if (Cow) while (eina_cow_gc(Cow))
OBJS_ARRAY_FLUSH(&evas->delete_objects);
OBJS_ARRAY_FLUSH(&evas->obscuring_objects);
OBJS_ARRAY_FLUSH(&evas->temporary_objects);
+ OBJS_ARRAY_FLUSH(&evas->map_clip_objects);
eina_array_foreach(&evas->clip_changes, _evas_clip_changes_free, NULL);
eina_array_clean(&evas->clip_changes);
@@ -4219,6 +4338,7 @@ evas_render_invalidate(Evas *eo_e)
OBJS_ARRAY_FLUSH(&e->delete_objects);
OBJS_ARRAY_FLUSH(&e->snapshot_objects);
+ OBJS_ARRAY_FLUSH(&e->map_clip_objects);
e->invalidate = EINA_TRUE;
}
@@ -4275,5 +4395,16 @@ evas_post_render_job_add(Evas_Public_Data *pd, void (*func)(void *), void *data)
SLKU(pd->post_render.lock);
}
+void
+evas_render_post_change_object_push(Evas_Object_Protected_Data *obj)
+{
+ Evas_Public_Data *e;
+
+ if (!obj || !obj->layer || !obj->layer->evas) return;
+
+ e = obj->layer->evas;
+ OBJ_ARRAY_PUSH(&e->render_post_change_objects, obj);
+}
+
/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/src/lib/evas/canvas/evas_smart.c b/src/lib/evas/canvas/evas_smart.c
index b33ccaef23..470fd8f6a4 100644
--- a/src/lib/evas/canvas/evas_smart.c
+++ b/src/lib/evas/canvas/evas_smart.c
@@ -7,7 +7,7 @@ static void _evas_smart_class_interfaces_create(Evas_Smart *s);
/* all public */
-EAPI void
+EVAS_API void
evas_smart_free(Evas_Smart *s)
{
MAGIC_CHECK(s, Evas_Smart, MAGIC_SMART);
@@ -22,7 +22,7 @@ evas_smart_free(Evas_Smart *s)
free(s);
}
-EAPI Evas_Smart *
+EVAS_API Evas_Smart *
evas_smart_class_new(const Evas_Smart_Class *sc)
{
Evas_Smart *s;
@@ -44,7 +44,7 @@ evas_smart_class_new(const Evas_Smart_Class *sc)
return s;
}
-EAPI const Evas_Smart_Class *
+EVAS_API const Evas_Smart_Class *
evas_smart_class_get(const Evas_Smart *s)
{
MAGIC_CHECK(s, Evas_Smart, MAGIC_SMART);
@@ -53,7 +53,7 @@ evas_smart_class_get(const Evas_Smart *s)
return s->smart_class;
}
-EAPI void *
+EVAS_API void *
evas_smart_data_get(const Evas_Smart *s)
{
MAGIC_CHECK(s, Evas_Smart, MAGIC_SMART);
@@ -62,7 +62,7 @@ evas_smart_data_get(const Evas_Smart *s)
return (void *)s->smart_class->data;
}
-EAPI const Evas_Smart_Cb_Description **
+EVAS_API const Evas_Smart_Cb_Description **
evas_smart_callbacks_descriptions_get(const Evas_Smart *s, unsigned int *count)
{
MAGIC_CHECK(s, Evas_Smart, MAGIC_SMART);
@@ -74,7 +74,7 @@ evas_smart_callbacks_descriptions_get(const Evas_Smart *s, unsigned int *count)
return s->callbacks.array;
}
-EAPI const Evas_Smart_Cb_Description *
+EVAS_API const Evas_Smart_Cb_Description *
evas_smart_callback_description_find(const Evas_Smart *s, const char *name)
{
if (!name) return NULL;
@@ -84,7 +84,7 @@ evas_smart_callback_description_find(const Evas_Smart *s, const char *name)
return evas_smart_cb_description_find(&s->callbacks, name);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_smart_class_inherit_full(Evas_Smart_Class *sc, const Evas_Smart_Class *parent_sc, unsigned int parent_sc_size)
{
unsigned int off;
@@ -116,7 +116,7 @@ evas_smart_class_inherit_full(Evas_Smart_Class *sc, const Evas_Smart_Class *pare
return EINA_TRUE;
}
-EAPI int
+EVAS_API int
evas_smart_usage_get(const Evas_Smart *s)
{
MAGIC_CHECK(s, Evas_Smart, MAGIC_SMART);
diff --git a/src/lib/evas/canvas/evas_stack.x b/src/lib/evas/canvas/evas_stack.x
index 914d04731e..d390b01759 100644
--- a/src/lib/evas/canvas/evas_stack.x
+++ b/src/lib/evas/canvas/evas_stack.x
@@ -34,7 +34,7 @@ evas_object_below_get_internal(const Evas_Object_Protected_Data *obj)
return NULL;
}
-EAPI void
+EVAS_API void
evas_object_raise(Evas_Object *obj)
{
efl_gfx_stack_raise_to_top((Evas_Object *)obj);
@@ -83,7 +83,7 @@ _efl_canvas_object_efl_gfx_stack_raise_to_top(Eo *eo_obj, Evas_Object_Protected_
}
}
-EAPI void
+EVAS_API void
evas_object_lower(Evas_Object *obj)
{
efl_gfx_stack_lower_to_bottom((Evas_Object *)obj);
@@ -133,7 +133,7 @@ _efl_canvas_object_efl_gfx_stack_lower_to_bottom(Eo *eo_obj, Evas_Object_Protect
}
}
-EAPI void
+EVAS_API void
evas_object_stack_above(Evas_Object *obj, Evas_Object *above)
{
efl_gfx_stack_above((Evas_Object *)obj, above);
@@ -152,6 +152,8 @@ _efl_canvas_object_efl_gfx_stack_stack_above(Eo *eo_obj, Evas_Object_Protected_D
if (eo_obj == eo_above) return;
if (_evas_object_intercept_call_evas(obj, EVAS_OBJECT_INTERCEPT_CB_STACK_ABOVE, 1, eo_above)) return;
Evas_Object_Protected_Data *above = efl_data_scope_get(eo_above, EFL_CANVAS_OBJECT_CLASS);
+ if (!above) return;
+
if ((EINA_INLIST_GET(obj))->prev == EINA_INLIST_GET(above))
{
evas_object_inform_call_restack(eo_obj, obj);
@@ -225,7 +227,7 @@ _efl_canvas_object_efl_gfx_stack_stack_above(Eo *eo_obj, Evas_Object_Protected_D
}
}
-EAPI void
+EVAS_API void
evas_object_stack_below(Evas_Object *obj, Evas_Object *below)
{
efl_gfx_stack_below((Evas_Object *)obj, below);
@@ -242,6 +244,8 @@ _efl_canvas_object_efl_gfx_stack_stack_below(Eo *eo_obj, Evas_Object_Protected_D
if (eo_obj == eo_below) return;
if (_evas_object_intercept_call_evas(obj, EVAS_OBJECT_INTERCEPT_CB_STACK_BELOW, 1, eo_below)) return;
Evas_Object_Protected_Data *below = efl_data_scope_get(eo_below, EFL_CANVAS_OBJECT_CLASS);
+ if (!below) return;
+
if ((EINA_INLIST_GET(obj))->next == EINA_INLIST_GET(below))
{
evas_object_inform_call_restack(eo_obj, obj);
@@ -315,7 +319,7 @@ _efl_canvas_object_efl_gfx_stack_stack_below(Eo *eo_obj, Evas_Object_Protected_D
}
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_above_get(const Evas_Object *obj)
{
return efl_gfx_stack_above_get((Evas_Object *)obj);
@@ -344,7 +348,7 @@ _efl_canvas_object_efl_gfx_stack_above_get(Eo *eo_obj EINA_UNUSED,
return NULL;
}
-EAPI Evas_Object *
+EVAS_API Evas_Object *
evas_object_below_get(const Evas_Object *obj)
{
return efl_gfx_stack_below_get((Evas_Object *)obj);
@@ -400,19 +404,22 @@ _evas_canvas_object_top_get(const Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
list = EINA_INLIST_GET(e->layers);
if (!list) return NULL;
- layer = (Evas_Layer *) list->last;
- if (!layer) return NULL;
+ //just in case if layer has no valid objects in the list.
+ EINA_INLIST_REVERSE_FOREACH(list, layer)
+ {
+ if (!layer->objects) continue;
- list = EINA_INLIST_GET(layer->objects);
- if (!list) return NULL;
+ list = EINA_INLIST_GET(layer->objects);
+ if (!list) return NULL;
- obj = (Evas_Object_Protected_Data *) list->last;
- if (!obj) return NULL;
+ obj = (Evas_Object_Protected_Data *) list->last;
+ if (!obj) return NULL;
- while (obj)
- {
- if (!obj->delete_me) return obj->object;
- obj = evas_object_below_get_internal(obj);
+ while (obj)
+ {
+ if (!obj->delete_me) return obj->object;
+ obj = evas_object_below_get_internal(obj);
+ }
}
return NULL;
diff --git a/src/lib/evas/canvas/evas_stats.c b/src/lib/evas/canvas/evas_stats.c
index f178fba088..e889c15cf4 100644
--- a/src/lib/evas/canvas/evas_stats.c
+++ b/src/lib/evas/canvas/evas_stats.c
@@ -2,48 +2,48 @@
#include "evas_private.h"
//#include "evas_cs.h"
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_cserve_want_get(void)
{
return 0;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_cserve_connected_get(void)
{
return 0;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_cserve_stats_get(Evas_Cserve_Stats *stats EINA_UNUSED)
{
return 0;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_cserve_image_cache_contents_get(Evas_Cserve_Image_Cache *cache EINA_UNUSED)
{
return 0;
}
-EAPI void
+EVAS_API void
evas_cserve_image_cache_contents_clean(Evas_Cserve_Image_Cache *cache EINA_UNUSED)
{
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_cserve_config_get(Evas_Cserve_Config *config EINA_UNUSED)
{
return 0;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_cserve_config_set(const Evas_Cserve_Config *config EINA_UNUSED)
{
return 0;
}
-EAPI void
+EVAS_API void
evas_cserve_disconnect(void)
{
}
diff --git a/src/lib/evas/canvas/evas_table_eo.c b/src/lib/evas/canvas/evas_table_eo.c
index 0369d7ced1..d6c05cfb2d 100644
--- a/src/lib/evas/canvas/evas_table_eo.c
+++ b/src/lib/evas/canvas/evas_table_eo.c
@@ -1,71 +1,71 @@
void _evas_table_homogeneous_set(Eo *obj, Evas_Table_Data *pd, Evas_Object_Table_Homogeneous_Mode homogeneous);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_table_homogeneous_set, EFL_FUNC_CALL(homogeneous), Evas_Object_Table_Homogeneous_Mode homogeneous);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_table_homogeneous_set, EFL_FUNC_CALL(homogeneous), Evas_Object_Table_Homogeneous_Mode homogeneous);
Evas_Object_Table_Homogeneous_Mode _evas_table_homogeneous_get(const Eo *obj, Evas_Table_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_table_homogeneous_get, Evas_Object_Table_Homogeneous_Mode, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_table_homogeneous_get, Evas_Object_Table_Homogeneous_Mode, 0);
void _evas_table_align_set(Eo *obj, Evas_Table_Data *pd, double horizontal, double vertical);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_table_align_set, EFL_FUNC_CALL(horizontal, vertical), double horizontal, double vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_table_align_set, EFL_FUNC_CALL(horizontal, vertical), double horizontal, double vertical);
void _evas_table_align_get(const Eo *obj, Evas_Table_Data *pd, double *horizontal, double *vertical);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_table_align_get, EFL_FUNC_CALL(horizontal, vertical), double *horizontal, double *vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_table_align_get, EFL_FUNC_CALL(horizontal, vertical), double *horizontal, double *vertical);
void _evas_table_padding_set(Eo *obj, Evas_Table_Data *pd, int horizontal, int vertical);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_table_padding_set, EFL_FUNC_CALL(horizontal, vertical), int horizontal, int vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_table_padding_set, EFL_FUNC_CALL(horizontal, vertical), int horizontal, int vertical);
void _evas_table_padding_get(const Eo *obj, Evas_Table_Data *pd, int *horizontal, int *vertical);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_table_padding_get, EFL_FUNC_CALL(horizontal, vertical), int *horizontal, int *vertical);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_table_padding_get, EFL_FUNC_CALL(horizontal, vertical), int *horizontal, int *vertical);
void _evas_table_col_row_size_get(const Eo *obj, Evas_Table_Data *pd, int *cols, int *rows);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_table_col_row_size_get, EFL_FUNC_CALL(cols, rows), int *cols, int *rows);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_table_col_row_size_get, EFL_FUNC_CALL(cols, rows), int *cols, int *rows);
Eina_List *_evas_table_children_get(const Eo *obj, Evas_Table_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_table_children_get, Eina_List *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_table_children_get, Eina_List *, NULL);
Efl_Canvas_Object *_evas_table_child_get(const Eo *obj, Evas_Table_Data *pd, unsigned short col, unsigned short row);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_table_child_get, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(col, row), unsigned short col, unsigned short row);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_table_child_get, Efl_Canvas_Object *, NULL, EFL_FUNC_CALL(col, row), unsigned short col, unsigned short row);
void _evas_table_clear(Eo *obj, Evas_Table_Data *pd, Eina_Bool clear);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_table_clear, EFL_FUNC_CALL(clear), Eina_Bool clear);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_table_clear, EFL_FUNC_CALL(clear), Eina_Bool clear);
Eina_Accessor *_evas_table_accessor_new(const Eo *obj, Evas_Table_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_table_accessor_new, Eina_Accessor *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_table_accessor_new, Eina_Accessor *, NULL);
Eina_Iterator *_evas_table_iterator_new(const Eo *obj, Evas_Table_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_table_iterator_new, Eina_Iterator *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_table_iterator_new, Eina_Iterator *, NULL);
Efl_Canvas_Object *_evas_table_add_to(Eo *obj, Evas_Table_Data *pd);
-EOAPI EFL_FUNC_BODY(evas_obj_table_add_to, Efl_Canvas_Object *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY(evas_obj_table_add_to, Efl_Canvas_Object *, NULL);
Eina_Bool _evas_table_pack_get(const Eo *obj, Evas_Table_Data *pd, Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_table_pack_get, Eina_Bool, 0, EFL_FUNC_CALL(child, col, row, colspan, rowspan), Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_table_pack_get, Eina_Bool, 0, EFL_FUNC_CALL(child, col, row, colspan, rowspan), Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
Eina_Bool _evas_table_pack(Eo *obj, Evas_Table_Data *pd, Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan);
-EOAPI EFL_FUNC_BODYV(evas_obj_table_pack, Eina_Bool, 0, EFL_FUNC_CALL(child, col, row, colspan, rowspan), Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_table_pack, Eina_Bool, 0, EFL_FUNC_CALL(child, col, row, colspan, rowspan), Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan);
Eina_Bool _evas_table_unpack(Eo *obj, Evas_Table_Data *pd, Efl_Canvas_Object *child);
-EOAPI EFL_FUNC_BODYV(evas_obj_table_unpack, Eina_Bool, 0, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV(evas_obj_table_unpack, Eina_Bool, 0, EFL_FUNC_CALL(child), Efl_Canvas_Object *child);
int _evas_table_count(Eo *obj, Evas_Table_Data *pd);
-EOAPI EFL_FUNC_BODY(evas_obj_table_count, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY(evas_obj_table_count, int, 0);
Efl_Object *_evas_table_efl_object_constructor(Eo *obj, Evas_Table_Data *pd);
@@ -137,6 +137,6 @@ static const Efl_Class_Description _evas_table_class_desc = {
NULL
};
-EFL_DEFINE_CLASS(evas_table_class_get, &_evas_table_class_desc, EFL_CANVAS_GROUP_CLASS, NULL);
+EFL_DEFINE_CLASS(evas_table_class_get, &_evas_table_class_desc, EFL_CANVAS_GROUP_CLASS, EFL_UI_I18N_INTERFACE, NULL);
#include "evas_table_eo.legacy.c"
diff --git a/src/lib/evas/canvas/evas_table_eo.h b/src/lib/evas/canvas/evas_table_eo.h
index 576e109320..f4c2f0c272 100644
--- a/src/lib/evas/canvas/evas_table_eo.h
+++ b/src/lib/evas/canvas/evas_table_eo.h
@@ -17,7 +17,7 @@ typedef Eo Evas_Table;
* See @ref evas_obj_table_homogeneous_get for an explanation of the function
* of each one.
*
- * @ingroup Evas_Object_Table
+ * @ingroup Evas_Object_Table_Group
*/
typedef enum
{
@@ -34,7 +34,7 @@ typedef enum
*/
#define EVAS_TABLE_CLASS evas_table_class_get()
-EWAPI const Efl_Class *evas_table_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_table_class_get(void) EINA_CONST;
/**
* @brief Set how this table should layout children.
@@ -78,7 +78,7 @@ EWAPI const Efl_Class *evas_table_class_get(void);
*
* @ingroup Evas_Table
*/
-EOAPI void evas_obj_table_homogeneous_set(Eo *obj, Evas_Object_Table_Homogeneous_Mode homogeneous);
+EVAS_API EVAS_API_WEAK void evas_obj_table_homogeneous_set(Eo *obj, Evas_Object_Table_Homogeneous_Mode homogeneous);
/**
* @brief Set how this table should layout children.
@@ -123,7 +123,7 @@ EOAPI void evas_obj_table_homogeneous_set(Eo *obj, Evas_Object_Table_Homogeneous
*
* @ingroup Evas_Table
*/
-EOAPI Evas_Object_Table_Homogeneous_Mode evas_obj_table_homogeneous_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Evas_Object_Table_Homogeneous_Mode evas_obj_table_homogeneous_get(const Eo *obj);
/**
* @brief Control the alignment of the whole bounding box of contents.
@@ -134,7 +134,7 @@ EOAPI Evas_Object_Table_Homogeneous_Mode evas_obj_table_homogeneous_get(const Eo
*
* @ingroup Evas_Table
*/
-EOAPI void evas_obj_table_align_set(Eo *obj, double horizontal, double vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_table_align_set(Eo *obj, double horizontal, double vertical);
/**
* @brief Control the alignment of the whole bounding box of contents.
@@ -145,7 +145,7 @@ EOAPI void evas_obj_table_align_set(Eo *obj, double horizontal, double vertical)
*
* @ingroup Evas_Table
*/
-EOAPI void evas_obj_table_align_get(const Eo *obj, double *horizontal, double *vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_table_align_get(const Eo *obj, double *horizontal, double *vertical);
/**
* @brief Control the padding between cells.
@@ -156,7 +156,7 @@ EOAPI void evas_obj_table_align_get(const Eo *obj, double *horizontal, double *v
*
* @ingroup Evas_Table
*/
-EOAPI void evas_obj_table_padding_set(Eo *obj, int horizontal, int vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_table_padding_set(Eo *obj, int horizontal, int vertical);
/**
* @brief Control the padding between cells.
@@ -167,7 +167,7 @@ EOAPI void evas_obj_table_padding_set(Eo *obj, int horizontal, int vertical);
*
* @ingroup Evas_Table
*/
-EOAPI void evas_obj_table_padding_get(const Eo *obj, int *horizontal, int *vertical);
+EVAS_API EVAS_API_WEAK void evas_obj_table_padding_get(const Eo *obj, int *horizontal, int *vertical);
/**
* @brief Get the number of columns and rows this table takes.
@@ -182,7 +182,7 @@ EOAPI void evas_obj_table_padding_get(const Eo *obj, int *horizontal, int *verti
*
* @ingroup Evas_Table
*/
-EOAPI void evas_obj_table_col_row_size_get(const Eo *obj, int *cols, int *rows);
+EVAS_API EVAS_API_WEAK void evas_obj_table_col_row_size_get(const Eo *obj, int *cols, int *rows);
/**
* @brief Get the list of children for the table.
@@ -198,7 +198,7 @@ EOAPI void evas_obj_table_col_row_size_get(const Eo *obj, int *cols, int *rows);
*
* @ingroup Evas_Table
*/
-EOAPI Eina_List *evas_obj_table_children_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_List *evas_obj_table_children_get(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get the child of the table at the given coordinates
@@ -213,7 +213,7 @@ EOAPI Eina_List *evas_obj_table_children_get(const Eo *obj) EINA_WARN_UNUSED_RES
*
* @ingroup Evas_Table
*/
-EOAPI Efl_Canvas_Object *evas_obj_table_child_get(const Eo *obj, unsigned short col, unsigned short row);
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_obj_table_child_get(const Eo *obj, unsigned short col, unsigned short row);
/**
* @brief Faster way to remove all child objects from a table object.
@@ -223,7 +223,7 @@ EOAPI Efl_Canvas_Object *evas_obj_table_child_get(const Eo *obj, unsigned short
*
* @ingroup Evas_Table
*/
-EOAPI void evas_obj_table_clear(Eo *obj, Eina_Bool clear);
+EVAS_API EVAS_API_WEAK void evas_obj_table_clear(Eo *obj, Eina_Bool clear);
/**
* @brief Get an accessor to get random access to the list of children for the
@@ -237,7 +237,7 @@ EOAPI void evas_obj_table_clear(Eo *obj, Eina_Bool clear);
*
* @ingroup Evas_Table
*/
-EOAPI Eina_Accessor *evas_obj_table_accessor_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_Accessor *evas_obj_table_accessor_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get an iterator to walk the list of children for the table.
@@ -250,7 +250,7 @@ EOAPI Eina_Accessor *evas_obj_table_accessor_new(const Eo *obj) EINA_WARN_UNUSED
*
* @ingroup Evas_Table
*/
-EOAPI Eina_Iterator *evas_obj_table_iterator_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Eina_Iterator *evas_obj_table_iterator_new(const Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Create a table that is child of a given element @c parent.
@@ -261,7 +261,7 @@ EOAPI Eina_Iterator *evas_obj_table_iterator_new(const Eo *obj) EINA_WARN_UNUSED
*
* @ingroup Evas_Table
*/
-EOAPI Efl_Canvas_Object *evas_obj_table_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API EVAS_API_WEAK Efl_Canvas_Object *evas_obj_table_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get packing location of a child of table
@@ -282,7 +282,7 @@ EOAPI Efl_Canvas_Object *evas_obj_table_add_to(Eo *obj) EINA_WARN_UNUSED_RESULT;
*
* @ingroup Evas_Table
*/
-EOAPI Eina_Bool evas_obj_table_pack_get(const Eo *obj, Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_table_pack_get(const Eo *obj, Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
/**
* @brief Add a new child to a table object or set its current packing.
@@ -306,7 +306,7 @@ EOAPI Eina_Bool evas_obj_table_pack_get(const Eo *obj, Efl_Canvas_Object *child,
*
* @ingroup Evas_Table
*/
-EOAPI Eina_Bool evas_obj_table_pack(Eo *obj, Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_table_pack(Eo *obj, Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(2);
/**
* @brief Remove child from table.
@@ -322,7 +322,7 @@ EOAPI Eina_Bool evas_obj_table_pack(Eo *obj, Efl_Canvas_Object *child, unsigned
*
* @ingroup Evas_Table
*/
-EOAPI Eina_Bool evas_obj_table_unpack(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_table_unpack(Eo *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
/**
* @brief Returns the number of items in the table
@@ -333,6 +333,6 @@ EOAPI Eina_Bool evas_obj_table_unpack(Eo *obj, Efl_Canvas_Object *child) EINA_AR
*
* @ingroup Evas_Table
*/
-EOAPI int evas_obj_table_count(Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_table_count(Eo *obj);
#endif
diff --git a/src/lib/evas/canvas/evas_table_eo.legacy.c b/src/lib/evas/canvas/evas_table_eo.legacy.c
index 9e449a38d9..bbec2b6eab 100644
--- a/src/lib/evas/canvas/evas_table_eo.legacy.c
+++ b/src/lib/evas/canvas/evas_table_eo.legacy.c
@@ -1,95 +1,95 @@
-EAPI void
+EVAS_API void
evas_object_table_homogeneous_set(Evas_Table *obj, Evas_Object_Table_Homogeneous_Mode homogeneous)
{
evas_obj_table_homogeneous_set(obj, homogeneous);
}
-EAPI Evas_Object_Table_Homogeneous_Mode
+EVAS_API Evas_Object_Table_Homogeneous_Mode
evas_object_table_homogeneous_get(const Evas_Table *obj)
{
return evas_obj_table_homogeneous_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_table_align_set(Evas_Table *obj, double horizontal, double vertical)
{
evas_obj_table_align_set(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_table_align_get(const Evas_Table *obj, double *horizontal, double *vertical)
{
evas_obj_table_align_get(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_table_padding_set(Evas_Table *obj, int horizontal, int vertical)
{
evas_obj_table_padding_set(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_table_padding_get(const Evas_Table *obj, int *horizontal, int *vertical)
{
evas_obj_table_padding_get(obj, horizontal, vertical);
}
-EAPI void
+EVAS_API void
evas_object_table_col_row_size_get(const Evas_Table *obj, int *cols, int *rows)
{
evas_obj_table_col_row_size_get(obj, cols, rows);
}
-EAPI Eina_List *
+EVAS_API Eina_List *
evas_object_table_children_get(const Evas_Table *obj)
{
return evas_obj_table_children_get(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_table_child_get(const Evas_Table *obj, unsigned short col, unsigned short row)
{
return evas_obj_table_child_get(obj, col, row);
}
-EAPI void
+EVAS_API void
evas_object_table_clear(Evas_Table *obj, Eina_Bool clear)
{
evas_obj_table_clear(obj, clear);
}
-EAPI Eina_Accessor *
+EVAS_API Eina_Accessor *
evas_object_table_accessor_new(const Evas_Table *obj)
{
return evas_obj_table_accessor_new(obj);
}
-EAPI Eina_Iterator *
+EVAS_API Eina_Iterator *
evas_object_table_iterator_new(const Evas_Table *obj)
{
return evas_obj_table_iterator_new(obj);
}
-EAPI Efl_Canvas_Object *
+EVAS_API Efl_Canvas_Object *
evas_object_table_add_to(Evas_Table *obj)
{
return evas_obj_table_add_to(obj);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_table_pack_get(const Evas_Table *obj, Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan)
{
return evas_obj_table_pack_get(obj, child, col, row, colspan, rowspan);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_table_pack(Evas_Table *obj, Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan)
{
return evas_obj_table_pack(obj, child, col, row, colspan, rowspan);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_table_unpack(Evas_Table *obj, Efl_Canvas_Object *child)
{
return evas_obj_table_unpack(obj, child);
diff --git a/src/lib/evas/canvas/evas_table_eo.legacy.h b/src/lib/evas/canvas/evas_table_eo.legacy.h
index d7fc5d1b1b..70ae788c32 100644
--- a/src/lib/evas/canvas/evas_table_eo.legacy.h
+++ b/src/lib/evas/canvas/evas_table_eo.legacy.h
@@ -71,7 +71,7 @@ typedef enum
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI void evas_object_table_homogeneous_set(Evas_Table *obj, Evas_Object_Table_Homogeneous_Mode homogeneous);
+EVAS_API void evas_object_table_homogeneous_set(Evas_Table *obj, Evas_Object_Table_Homogeneous_Mode homogeneous);
/**
* @brief Set how this table should layout children.
@@ -116,7 +116,7 @@ EAPI void evas_object_table_homogeneous_set(Evas_Table *obj, Evas_Object_Table_H
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Evas_Object_Table_Homogeneous_Mode evas_object_table_homogeneous_get(const Evas_Table *obj);
+EVAS_API Evas_Object_Table_Homogeneous_Mode evas_object_table_homogeneous_get(const Evas_Table *obj);
/**
* @brief Control the alignment of the whole bounding box of contents.
@@ -127,7 +127,7 @@ EAPI Evas_Object_Table_Homogeneous_Mode evas_object_table_homogeneous_get(const
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI void evas_object_table_align_set(Evas_Table *obj, double horizontal, double vertical);
+EVAS_API void evas_object_table_align_set(Evas_Table *obj, double horizontal, double vertical);
/**
* @brief Control the alignment of the whole bounding box of contents.
@@ -138,7 +138,7 @@ EAPI void evas_object_table_align_set(Evas_Table *obj, double horizontal, double
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI void evas_object_table_align_get(const Evas_Table *obj, double *horizontal, double *vertical);
+EVAS_API void evas_object_table_align_get(const Evas_Table *obj, double *horizontal, double *vertical);
/**
* @brief Control the padding between cells.
@@ -149,7 +149,7 @@ EAPI void evas_object_table_align_get(const Evas_Table *obj, double *horizontal,
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI void evas_object_table_padding_set(Evas_Table *obj, int horizontal, int vertical);
+EVAS_API void evas_object_table_padding_set(Evas_Table *obj, int horizontal, int vertical);
/**
* @brief Control the padding between cells.
@@ -160,7 +160,7 @@ EAPI void evas_object_table_padding_set(Evas_Table *obj, int horizontal, int ver
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI void evas_object_table_padding_get(const Evas_Table *obj, int *horizontal, int *vertical);
+EVAS_API void evas_object_table_padding_get(const Evas_Table *obj, int *horizontal, int *vertical);
/**
* @brief Get the number of columns and rows this table takes.
@@ -175,7 +175,7 @@ EAPI void evas_object_table_padding_get(const Evas_Table *obj, int *horizontal,
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI void evas_object_table_col_row_size_get(const Evas_Table *obj, int *cols, int *rows);
+EVAS_API void evas_object_table_col_row_size_get(const Evas_Table *obj, int *cols, int *rows);
/**
* @brief Get the list of children for the table.
@@ -191,7 +191,7 @@ EAPI void evas_object_table_col_row_size_get(const Evas_Table *obj, int *cols, i
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Eina_List *evas_object_table_children_get(const Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_List *evas_object_table_children_get(const Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get the child of the table at the given coordinates
@@ -206,7 +206,7 @@ EAPI Eina_List *evas_object_table_children_get(const Evas_Table *obj) EINA_WARN_
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Efl_Canvas_Object *evas_object_table_child_get(const Evas_Table *obj, unsigned short col, unsigned short row);
+EVAS_API Efl_Canvas_Object *evas_object_table_child_get(const Evas_Table *obj, unsigned short col, unsigned short row);
/**
* @brief Faster way to remove all child objects from a table object.
@@ -216,7 +216,7 @@ EAPI Efl_Canvas_Object *evas_object_table_child_get(const Evas_Table *obj, unsig
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI void evas_object_table_clear(Evas_Table *obj, Eina_Bool clear);
+EVAS_API void evas_object_table_clear(Evas_Table *obj, Eina_Bool clear);
/**
* @brief Get an accessor to get random access to the list of children for the
@@ -230,7 +230,7 @@ EAPI void evas_object_table_clear(Evas_Table *obj, Eina_Bool clear);
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Eina_Accessor *evas_object_table_accessor_new(const Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Accessor *evas_object_table_accessor_new(const Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get an iterator to walk the list of children for the table.
@@ -243,7 +243,7 @@ EAPI Eina_Accessor *evas_object_table_accessor_new(const Evas_Table *obj) EINA_W
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Eina_Iterator *evas_object_table_iterator_new(const Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Eina_Iterator *evas_object_table_iterator_new(const Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Create a table that is child of a given element @c parent.
@@ -254,7 +254,7 @@ EAPI Eina_Iterator *evas_object_table_iterator_new(const Evas_Table *obj) EINA_W
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Efl_Canvas_Object *evas_object_table_add_to(Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
+EVAS_API Efl_Canvas_Object *evas_object_table_add_to(Evas_Table *obj) EINA_WARN_UNUSED_RESULT;
/**
* @brief Get packing location of a child of table
@@ -275,7 +275,7 @@ EAPI Efl_Canvas_Object *evas_object_table_add_to(Evas_Table *obj) EINA_WARN_UNUS
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Eina_Bool evas_object_table_pack_get(const Evas_Table *obj, Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
+EVAS_API Eina_Bool evas_object_table_pack_get(const Evas_Table *obj, Efl_Canvas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan);
/**
* @brief Add a new child to a table object or set its current packing.
@@ -299,7 +299,7 @@ EAPI Eina_Bool evas_object_table_pack_get(const Evas_Table *obj, Efl_Canvas_Obje
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Eina_Bool evas_object_table_pack(Evas_Table *obj, Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_table_pack(Evas_Table *obj, Efl_Canvas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(2);
/**
* @brief Remove child from table.
@@ -315,7 +315,7 @@ EAPI Eina_Bool evas_object_table_pack(Evas_Table *obj, Efl_Canvas_Object *child,
*
* @ingroup Evas_Object_Table_Group
*/
-EAPI Eina_Bool evas_object_table_unpack(Evas_Table *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
+EVAS_API Eina_Bool evas_object_table_unpack(Evas_Table *obj, Efl_Canvas_Object *child) EINA_ARG_NONNULL(2);
#endif
diff --git a/src/lib/evas/canvas/evas_text_eo.c b/src/lib/evas/canvas/evas_text_eo.c
index b2139f82d1..6cc1824163 100644
--- a/src/lib/evas/canvas/evas_text_eo.c
+++ b/src/lib/evas/canvas/evas_text_eo.c
@@ -1,11 +1,11 @@
void _evas_text_shadow_color_set(Eo *obj, Evas_Text_Data *pd, int r, int g, int b, int a);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_text_shadow_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_text_shadow_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
void _evas_text_shadow_color_get(const Eo *obj, Evas_Text_Data *pd, int *r, int *g, int *b, int *a);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_shadow_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_shadow_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
void _evas_text_ellipsis_set(Eo *obj, Evas_Text_Data *pd, double ellipsis);
@@ -25,7 +25,7 @@ __eolian_evas_text_ellipsis_set_reflect(Eo *obj, Eina_Value val)
return r;
}
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_text_ellipsis_set, EFL_FUNC_CALL(ellipsis), double ellipsis);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_text_ellipsis_set, EFL_FUNC_CALL(ellipsis), double ellipsis);
double _evas_text_ellipsis_get(const Eo *obj, Evas_Text_Data *pd);
@@ -37,7 +37,7 @@ __eolian_evas_text_ellipsis_get_reflect(const Eo *obj)
return eina_value_double_init(val);
}
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_ellipsis_get, double, -1.000000 /* +1.000000 */);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_ellipsis_get, double, -1.000000 /* +1.000000 */);
void _evas_text_bidi_delimiters_set(Eo *obj, Evas_Text_Data *pd, const char *delim);
@@ -57,7 +57,7 @@ __eolian_evas_text_bidi_delimiters_set_reflect(Eo *obj, Eina_Value val)
return r;
}
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_text_bidi_delimiters_set, EFL_FUNC_CALL(delim), const char *delim);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_text_bidi_delimiters_set, EFL_FUNC_CALL(delim), const char *delim);
const char *_evas_text_bidi_delimiters_get(const Eo *obj, Evas_Text_Data *pd);
@@ -69,87 +69,87 @@ __eolian_evas_text_bidi_delimiters_get_reflect(const Eo *obj)
return eina_value_string_init(val);
}
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_bidi_delimiters_get, const char *, NULL);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_bidi_delimiters_get, const char *, NULL);
void _evas_text_outline_color_set(Eo *obj, Evas_Text_Data *pd, int r, int g, int b, int a);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_text_outline_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_text_outline_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
void _evas_text_outline_color_get(const Eo *obj, Evas_Text_Data *pd, int *r, int *g, int *b, int *a);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_outline_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_outline_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
void _evas_text_glow2_color_set(Eo *obj, Evas_Text_Data *pd, int r, int g, int b, int a);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_text_glow2_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_text_glow2_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
void _evas_text_glow2_color_get(const Eo *obj, Evas_Text_Data *pd, int *r, int *g, int *b, int *a);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_glow2_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_glow2_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
void _evas_text_style_set(Eo *obj, Evas_Text_Data *pd, Evas_Text_Style_Type style);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_text_style_set, EFL_FUNC_CALL(style), Evas_Text_Style_Type style);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_text_style_set, EFL_FUNC_CALL(style), Evas_Text_Style_Type style);
Evas_Text_Style_Type _evas_text_style_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_style_get, Evas_Text_Style_Type, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_style_get, Evas_Text_Style_Type, 0);
void _evas_text_glow_color_set(Eo *obj, Evas_Text_Data *pd, int r, int g, int b, int a);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_text_glow_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_text_glow_color_set, EFL_FUNC_CALL(r, g, b, a), int r, int g, int b, int a);
void _evas_text_glow_color_get(const Eo *obj, Evas_Text_Data *pd, int *r, int *g, int *b, int *a);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_glow_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_glow_color_get, EFL_FUNC_CALL(r, g, b, a), int *r, int *g, int *b, int *a);
int _evas_text_max_descent_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_max_descent_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_max_descent_get, int, 0);
void _evas_text_style_pad_get(const Eo *obj, Evas_Text_Data *pd, int *l, int *r, int *t, int *b);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_style_pad_get, EFL_FUNC_CALL(l, r, t, b), int *l, int *r, int *t, int *b);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_text_style_pad_get, EFL_FUNC_CALL(l, r, t, b), int *l, int *r, int *t, int *b);
Efl_Text_Bidirectional_Type _evas_text_direction_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_direction_get, Efl_Text_Bidirectional_Type, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_direction_get, Efl_Text_Bidirectional_Type, 0);
int _evas_text_ascent_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_ascent_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_ascent_get, int, 0);
int _evas_text_horiz_advance_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_horiz_advance_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_horiz_advance_get, int, 0);
int _evas_text_inset_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_inset_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_inset_get, int, 0);
int _evas_text_max_ascent_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_max_ascent_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_max_ascent_get, int, 0);
int _evas_text_vert_advance_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_vert_advance_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_vert_advance_get, int, 0);
int _evas_text_descent_get(const Eo *obj, Evas_Text_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_text_descent_get, int, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_text_descent_get, int, 0);
int _evas_text_last_up_to_pos(const Eo *obj, Evas_Text_Data *pd, int x, int y);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_text_last_up_to_pos, int, -1 /* +1 */, EFL_FUNC_CALL(x, y), int x, int y);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_text_last_up_to_pos, int, -1 /* +1 */, EFL_FUNC_CALL(x, y), int x, int y);
int _evas_text_char_coords_get(const Eo *obj, Evas_Text_Data *pd, int x, int y, int *cx, int *cy, int *cw, int *ch);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_text_char_coords_get, int, 0, EFL_FUNC_CALL(x, y, cx, cy, cw, ch), int x, int y, int *cx, int *cy, int *cw, int *ch);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_text_char_coords_get, int, 0, EFL_FUNC_CALL(x, y, cx, cy, cw, ch), int x, int y, int *cx, int *cy, int *cw, int *ch);
Eina_Bool _evas_text_char_pos_get(const Eo *obj, Evas_Text_Data *pd, int pos, int *cx, int *cy, int *cw, int *ch);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_text_char_pos_get, Eina_Bool, 0, EFL_FUNC_CALL(pos, cx, cy, cw, ch), int pos, int *cx, int *cy, int *cw, int *ch);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_text_char_pos_get, Eina_Bool, 0, EFL_FUNC_CALL(pos, cx, cy, cw, ch), int pos, int *cx, int *cy, int *cw, int *ch);
Efl_Object *_evas_text_efl_object_constructor(Eo *obj, Evas_Text_Data *pd);
diff --git a/src/lib/evas/canvas/evas_text_eo.h b/src/lib/evas/canvas/evas_text_eo.h
index 93ce36e834..c1c7e6b94d 100644
--- a/src/lib/evas/canvas/evas_text_eo.h
+++ b/src/lib/evas/canvas/evas_text_eo.h
@@ -19,7 +19,7 @@ typedef Eo Evas_Text;
*/
#define EVAS_TEXT_CLASS evas_text_class_get()
-EWAPI const Efl_Class *evas_text_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_text_class_get(void) EINA_CONST;
/**
* @brief Controls the shadow color for the given text object.
@@ -46,7 +46,7 @@ EWAPI const Efl_Class *evas_text_class_get(void);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_shadow_color_set(Eo *obj, int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_shadow_color_set(Eo *obj, int r, int g, int b, int a);
/**
* @brief Controls the shadow color for the given text object.
@@ -76,7 +76,7 @@ EOAPI void evas_obj_text_shadow_color_set(Eo *obj, int r, int g, int b, int a);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_shadow_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_shadow_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
/**
* @brief Controls the ellipsis that should be used for the text object.
@@ -94,7 +94,7 @@ EOAPI void evas_obj_text_shadow_color_get(const Eo *obj, int *r, int *g, int *b,
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_ellipsis_set(Eo *obj, double ellipsis);
+EVAS_API EVAS_API_WEAK void evas_obj_text_ellipsis_set(Eo *obj, double ellipsis);
/**
* @brief Controls the ellipsis that should be used for the text object.
@@ -113,7 +113,7 @@ EOAPI void evas_obj_text_ellipsis_set(Eo *obj, double ellipsis);
*
* @ingroup Evas_Text
*/
-EOAPI double evas_obj_text_ellipsis_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK double evas_obj_text_ellipsis_get(const Eo *obj);
/**
* @brief Sets the BiDi delimiters used in the textblock.
@@ -129,7 +129,7 @@ EOAPI double evas_obj_text_ellipsis_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_bidi_delimiters_set(Eo *obj, const char *delim);
+EVAS_API EVAS_API_WEAK void evas_obj_text_bidi_delimiters_set(Eo *obj, const char *delim);
/**
* @brief Sets the BiDi delimiters used in the textblock.
@@ -146,7 +146,7 @@ EOAPI void evas_obj_text_bidi_delimiters_set(Eo *obj, const char *delim);
*
* @ingroup Evas_Text
*/
-EOAPI const char *evas_obj_text_bidi_delimiters_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK const char *evas_obj_text_bidi_delimiters_get(const Eo *obj);
/**
* @brief Controls the outline color for the given text object.
@@ -165,7 +165,7 @@ EOAPI const char *evas_obj_text_bidi_delimiters_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_outline_color_set(Eo *obj, int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_outline_color_set(Eo *obj, int r, int g, int b, int a);
/**
* @brief Controls the outline color for the given text object.
@@ -184,7 +184,7 @@ EOAPI void evas_obj_text_outline_color_set(Eo *obj, int r, int g, int b, int a);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_outline_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_outline_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
/**
* @brief Sets the 'glow 2' color for the given text object.
@@ -202,7 +202,7 @@ EOAPI void evas_obj_text_outline_color_get(const Eo *obj, int *r, int *g, int *b
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_glow2_color_set(Eo *obj, int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_glow2_color_set(Eo *obj, int r, int g, int b, int a);
/**
* @brief Sets the 'glow 2' color for the given text object.
@@ -220,7 +220,7 @@ EOAPI void evas_obj_text_glow2_color_set(Eo *obj, int r, int g, int b, int a);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_glow2_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_glow2_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
/**
* @brief Controls the style to apply on the given text object.
@@ -237,7 +237,7 @@ EOAPI void evas_obj_text_glow2_color_get(const Eo *obj, int *r, int *g, int *b,
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_style_set(Eo *obj, Evas_Text_Style_Type style);
+EVAS_API EVAS_API_WEAK void evas_obj_text_style_set(Eo *obj, Evas_Text_Style_Type style);
/**
* @brief Controls the style to apply on the given text object.
@@ -255,7 +255,7 @@ EOAPI void evas_obj_text_style_set(Eo *obj, Evas_Text_Style_Type style);
*
* @ingroup Evas_Text
*/
-EOAPI Evas_Text_Style_Type evas_obj_text_style_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Evas_Text_Style_Type evas_obj_text_style_get(const Eo *obj);
/**
* @brief Sets the glow color for the given text object.
@@ -276,7 +276,7 @@ EOAPI Evas_Text_Style_Type evas_obj_text_style_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_glow_color_set(Eo *obj, int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_glow_color_set(Eo *obj, int r, int g, int b, int a);
/**
* @brief Sets the glow color for the given text object.
@@ -297,7 +297,7 @@ EOAPI void evas_obj_text_glow_color_set(Eo *obj, int r, int g, int b, int a);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_glow_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK void evas_obj_text_glow_color_get(const Eo *obj, int *r, int *g, int *b, int *a);
/**
* @brief Maximal descent property
@@ -308,7 +308,7 @@ EOAPI void evas_obj_text_glow_color_get(const Eo *obj, int *r, int *g, int *b, i
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_max_descent_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_text_max_descent_get(const Eo *obj);
/**
* @brief Gets the text style pad of a text object.
@@ -321,7 +321,7 @@ EOAPI int evas_obj_text_max_descent_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI void evas_obj_text_style_pad_get(const Eo *obj, int *l, int *r, int *t, int *b);
+EVAS_API EVAS_API_WEAK void evas_obj_text_style_pad_get(const Eo *obj, int *l, int *r, int *t, int *b);
/**
* @brief Retrieves the direction of the text currently being displayed in the
@@ -333,7 +333,7 @@ EOAPI void evas_obj_text_style_pad_get(const Eo *obj, int *l, int *r, int *t, in
*
* @ingroup Evas_Text
*/
-EOAPI Efl_Text_Bidirectional_Type evas_obj_text_direction_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Efl_Text_Bidirectional_Type evas_obj_text_direction_get(const Eo *obj);
/**
* @brief Ascent property
@@ -344,7 +344,7 @@ EOAPI Efl_Text_Bidirectional_Type evas_obj_text_direction_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_ascent_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_text_ascent_get(const Eo *obj);
/**
* @brief Horizontal advance property
@@ -355,7 +355,7 @@ EOAPI int evas_obj_text_ascent_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_horiz_advance_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_text_horiz_advance_get(const Eo *obj);
/**
* @brief Inset property
@@ -366,7 +366,7 @@ EOAPI int evas_obj_text_horiz_advance_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_inset_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_text_inset_get(const Eo *obj);
/**
* @brief Maximal ascent property
@@ -377,7 +377,7 @@ EOAPI int evas_obj_text_inset_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_max_ascent_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_text_max_ascent_get(const Eo *obj);
/**
* @brief Vertical advance property
@@ -388,7 +388,7 @@ EOAPI int evas_obj_text_max_ascent_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_vert_advance_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_text_vert_advance_get(const Eo *obj);
/**
* @brief descent property
@@ -399,7 +399,7 @@ EOAPI int evas_obj_text_vert_advance_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_descent_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK int evas_obj_text_descent_get(const Eo *obj);
/**
* @brief Returns the logical position of the last char in the text up to the
@@ -416,7 +416,7 @@ EOAPI int evas_obj_text_descent_get(const Eo *obj);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_last_up_to_pos(const Eo *obj, int x, int y);
+EVAS_API EVAS_API_WEAK int evas_obj_text_last_up_to_pos(const Eo *obj, int x, int y);
/**
* @brief Get character coordinates
@@ -433,7 +433,7 @@ EOAPI int evas_obj_text_last_up_to_pos(const Eo *obj, int x, int y);
*
* @ingroup Evas_Text
*/
-EOAPI int evas_obj_text_char_coords_get(const Eo *obj, int x, int y, int *cx, int *cy, int *cw, int *ch);
+EVAS_API EVAS_API_WEAK int evas_obj_text_char_coords_get(const Eo *obj, int x, int y, int *cx, int *cy, int *cw, int *ch);
/**
* @brief Retrieve position and dimension information of a character within a
@@ -457,6 +457,6 @@ EOAPI int evas_obj_text_char_coords_get(const Eo *obj, int x, int y, int *cx, in
*
* @ingroup Evas_Text
*/
-EOAPI Eina_Bool evas_obj_text_char_pos_get(const Eo *obj, int pos, int *cx, int *cy, int *cw, int *ch);
+EVAS_API EVAS_API_WEAK Eina_Bool evas_obj_text_char_pos_get(const Eo *obj, int pos, int *cx, int *cy, int *cw, int *ch);
#endif
diff --git a/src/lib/evas/canvas/evas_text_eo.legacy.c b/src/lib/evas/canvas/evas_text_eo.legacy.c
index dca5395e10..03a1672a61 100644
--- a/src/lib/evas/canvas/evas_text_eo.legacy.c
+++ b/src/lib/evas/canvas/evas_text_eo.legacy.c
@@ -1,155 +1,155 @@
-EAPI void
+EVAS_API void
evas_object_text_shadow_color_set(Evas_Text *obj, int r, int g, int b, int a)
{
evas_obj_text_shadow_color_set(obj, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_text_shadow_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a)
{
evas_obj_text_shadow_color_get(obj, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_text_ellipsis_set(Evas_Text *obj, double ellipsis)
{
evas_obj_text_ellipsis_set(obj, ellipsis);
}
-EAPI double
+EVAS_API double
evas_object_text_ellipsis_get(const Evas_Text *obj)
{
return evas_obj_text_ellipsis_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_text_bidi_delimiters_set(Evas_Text *obj, const char *delim)
{
evas_obj_text_bidi_delimiters_set(obj, delim);
}
-EAPI const char *
+EVAS_API const char *
evas_object_text_bidi_delimiters_get(const Evas_Text *obj)
{
return evas_obj_text_bidi_delimiters_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_text_outline_color_set(Evas_Text *obj, int r, int g, int b, int a)
{
evas_obj_text_outline_color_set(obj, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_text_outline_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a)
{
evas_obj_text_outline_color_get(obj, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_text_glow2_color_set(Evas_Text *obj, int r, int g, int b, int a)
{
evas_obj_text_glow2_color_set(obj, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_text_glow2_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a)
{
evas_obj_text_glow2_color_get(obj, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_text_style_set(Evas_Text *obj, Evas_Text_Style_Type style)
{
evas_obj_text_style_set(obj, style);
}
-EAPI Evas_Text_Style_Type
+EVAS_API Evas_Text_Style_Type
evas_object_text_style_get(const Evas_Text *obj)
{
return evas_obj_text_style_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_text_glow_color_set(Evas_Text *obj, int r, int g, int b, int a)
{
evas_obj_text_glow_color_set(obj, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_text_glow_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a)
{
evas_obj_text_glow_color_get(obj, r, g, b, a);
}
-EAPI int
+EVAS_API int
evas_object_text_max_descent_get(const Evas_Text *obj)
{
return evas_obj_text_max_descent_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_text_style_pad_get(const Evas_Text *obj, int *l, int *r, int *t, int *b)
{
evas_obj_text_style_pad_get(obj, l, r, t, b);
}
-EAPI Efl_Text_Bidirectional_Type
+EVAS_API Efl_Text_Bidirectional_Type
evas_object_text_direction_get(const Evas_Text *obj)
{
return evas_obj_text_direction_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_text_ascent_get(const Evas_Text *obj)
{
return evas_obj_text_ascent_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_text_horiz_advance_get(const Evas_Text *obj)
{
return evas_obj_text_horiz_advance_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_text_inset_get(const Evas_Text *obj)
{
return evas_obj_text_inset_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_text_max_ascent_get(const Evas_Text *obj)
{
return evas_obj_text_max_ascent_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_text_vert_advance_get(const Evas_Text *obj)
{
return evas_obj_text_vert_advance_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_text_descent_get(const Evas_Text *obj)
{
return evas_obj_text_descent_get(obj);
}
-EAPI int
+EVAS_API int
evas_object_text_last_up_to_pos(const Evas_Text *obj, int x, int y)
{
return evas_obj_text_last_up_to_pos(obj, x, y);
}
-EAPI int
+EVAS_API int
evas_object_text_char_coords_get(const Evas_Text *obj, int x, int y, int *cx, int *cy, int *cw, int *ch)
{
return evas_obj_text_char_coords_get(obj, x, y, cx, cy, cw, ch);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_object_text_char_pos_get(const Evas_Text *obj, int pos, int *cx, int *cy, int *cw, int *ch)
{
return evas_obj_text_char_pos_get(obj, pos, cx, cy, cw, ch);
diff --git a/src/lib/evas/canvas/evas_text_eo.legacy.h b/src/lib/evas/canvas/evas_text_eo.legacy.h
index 9d43f65ee0..50183fbd74 100644
--- a/src/lib/evas/canvas/evas_text_eo.legacy.h
+++ b/src/lib/evas/canvas/evas_text_eo.legacy.h
@@ -39,7 +39,7 @@ typedef Eo Evas_Text;
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_shadow_color_set(Evas_Text *obj, int r, int g, int b, int a);
+EVAS_API void evas_object_text_shadow_color_set(Evas_Text *obj, int r, int g, int b, int a);
/**
* @brief Controls the shadow color for the given text object.
@@ -69,7 +69,7 @@ EAPI void evas_object_text_shadow_color_set(Evas_Text *obj, int r, int g, int b,
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_shadow_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
+EVAS_API void evas_object_text_shadow_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
/**
* @brief Controls the ellipsis that should be used for the text object.
@@ -87,7 +87,7 @@ EAPI void evas_object_text_shadow_color_get(const Evas_Text *obj, int *r, int *g
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_ellipsis_set(Evas_Text *obj, double ellipsis);
+EVAS_API void evas_object_text_ellipsis_set(Evas_Text *obj, double ellipsis);
/**
* @brief Controls the ellipsis that should be used for the text object.
@@ -106,7 +106,7 @@ EAPI void evas_object_text_ellipsis_set(Evas_Text *obj, double ellipsis);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI double evas_object_text_ellipsis_get(const Evas_Text *obj);
+EVAS_API double evas_object_text_ellipsis_get(const Evas_Text *obj);
/**
* @brief Sets the BiDi delimiters used in the textblock.
@@ -122,7 +122,7 @@ EAPI double evas_object_text_ellipsis_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_bidi_delimiters_set(Evas_Text *obj, const char *delim);
+EVAS_API void evas_object_text_bidi_delimiters_set(Evas_Text *obj, const char *delim);
/**
* @brief Sets the BiDi delimiters used in the textblock.
@@ -139,7 +139,7 @@ EAPI void evas_object_text_bidi_delimiters_set(Evas_Text *obj, const char *delim
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI const char *evas_object_text_bidi_delimiters_get(const Evas_Text *obj);
+EVAS_API const char *evas_object_text_bidi_delimiters_get(const Evas_Text *obj);
/**
* @brief Controls the outline color for the given text object.
@@ -158,7 +158,7 @@ EAPI const char *evas_object_text_bidi_delimiters_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_outline_color_set(Evas_Text *obj, int r, int g, int b, int a);
+EVAS_API void evas_object_text_outline_color_set(Evas_Text *obj, int r, int g, int b, int a);
/**
* @brief Controls the outline color for the given text object.
@@ -177,7 +177,7 @@ EAPI void evas_object_text_outline_color_set(Evas_Text *obj, int r, int g, int b
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_outline_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
+EVAS_API void evas_object_text_outline_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
/**
* @brief Sets the 'glow 2' color for the given text object.
@@ -195,7 +195,7 @@ EAPI void evas_object_text_outline_color_get(const Evas_Text *obj, int *r, int *
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_glow2_color_set(Evas_Text *obj, int r, int g, int b, int a);
+EVAS_API void evas_object_text_glow2_color_set(Evas_Text *obj, int r, int g, int b, int a);
/**
* @brief Sets the 'glow 2' color for the given text object.
@@ -213,7 +213,7 @@ EAPI void evas_object_text_glow2_color_set(Evas_Text *obj, int r, int g, int b,
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_glow2_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
+EVAS_API void evas_object_text_glow2_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
/**
* @brief Controls the style to apply on the given text object.
@@ -230,7 +230,7 @@ EAPI void evas_object_text_glow2_color_get(const Evas_Text *obj, int *r, int *g,
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_style_set(Evas_Text *obj, Evas_Text_Style_Type style);
+EVAS_API void evas_object_text_style_set(Evas_Text *obj, Evas_Text_Style_Type style);
/**
* @brief Controls the style to apply on the given text object.
@@ -248,7 +248,7 @@ EAPI void evas_object_text_style_set(Evas_Text *obj, Evas_Text_Style_Type style)
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI Evas_Text_Style_Type evas_object_text_style_get(const Evas_Text *obj);
+EVAS_API Evas_Text_Style_Type evas_object_text_style_get(const Evas_Text *obj);
/**
* @brief Sets the glow color for the given text object.
@@ -269,7 +269,7 @@ EAPI Evas_Text_Style_Type evas_object_text_style_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_glow_color_set(Evas_Text *obj, int r, int g, int b, int a);
+EVAS_API void evas_object_text_glow_color_set(Evas_Text *obj, int r, int g, int b, int a);
/**
* @brief Sets the glow color for the given text object.
@@ -290,7 +290,7 @@ EAPI void evas_object_text_glow_color_set(Evas_Text *obj, int r, int g, int b, i
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_glow_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
+EVAS_API void evas_object_text_glow_color_get(const Evas_Text *obj, int *r, int *g, int *b, int *a);
/**
* @brief Maximal descent property
@@ -301,7 +301,7 @@ EAPI void evas_object_text_glow_color_get(const Evas_Text *obj, int *r, int *g,
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_max_descent_get(const Evas_Text *obj);
+EVAS_API int evas_object_text_max_descent_get(const Evas_Text *obj);
/**
* @brief Gets the text style pad of a text object.
@@ -314,7 +314,7 @@ EAPI int evas_object_text_max_descent_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI void evas_object_text_style_pad_get(const Evas_Text *obj, int *l, int *r, int *t, int *b);
+EVAS_API void evas_object_text_style_pad_get(const Evas_Text *obj, int *l, int *r, int *t, int *b);
/**
* @brief Retrieves the direction of the text currently being displayed in the
@@ -326,7 +326,7 @@ EAPI void evas_object_text_style_pad_get(const Evas_Text *obj, int *l, int *r, i
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI Efl_Text_Bidirectional_Type evas_object_text_direction_get(const Evas_Text *obj);
+EVAS_API Efl_Text_Bidirectional_Type evas_object_text_direction_get(const Evas_Text *obj);
/**
* @brief Ascent property
@@ -337,7 +337,7 @@ EAPI Efl_Text_Bidirectional_Type evas_object_text_direction_get(const Evas_Text
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_ascent_get(const Evas_Text *obj);
+EVAS_API int evas_object_text_ascent_get(const Evas_Text *obj);
/**
* @brief Horizontal advance property
@@ -348,7 +348,7 @@ EAPI int evas_object_text_ascent_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_horiz_advance_get(const Evas_Text *obj);
+EVAS_API int evas_object_text_horiz_advance_get(const Evas_Text *obj);
/**
* @brief Inset property
@@ -359,7 +359,7 @@ EAPI int evas_object_text_horiz_advance_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_inset_get(const Evas_Text *obj);
+EVAS_API int evas_object_text_inset_get(const Evas_Text *obj);
/**
* @brief Maximal ascent property
@@ -370,7 +370,7 @@ EAPI int evas_object_text_inset_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_max_ascent_get(const Evas_Text *obj);
+EVAS_API int evas_object_text_max_ascent_get(const Evas_Text *obj);
/**
* @brief Vertical advance property
@@ -381,7 +381,7 @@ EAPI int evas_object_text_max_ascent_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_vert_advance_get(const Evas_Text *obj);
+EVAS_API int evas_object_text_vert_advance_get(const Evas_Text *obj);
/**
* @brief descent property
@@ -392,7 +392,7 @@ EAPI int evas_object_text_vert_advance_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_descent_get(const Evas_Text *obj);
+EVAS_API int evas_object_text_descent_get(const Evas_Text *obj);
/**
* @brief Returns the logical position of the last char in the text up to the
@@ -409,7 +409,7 @@ EAPI int evas_object_text_descent_get(const Evas_Text *obj);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_last_up_to_pos(const Evas_Text *obj, int x, int y);
+EVAS_API int evas_object_text_last_up_to_pos(const Evas_Text *obj, int x, int y);
/**
* @brief Get character coordinates
@@ -426,7 +426,7 @@ EAPI int evas_object_text_last_up_to_pos(const Evas_Text *obj, int x, int y);
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI int evas_object_text_char_coords_get(const Evas_Text *obj, int x, int y, int *cx, int *cy, int *cw, int *ch);
+EVAS_API int evas_object_text_char_coords_get(const Evas_Text *obj, int x, int y, int *cx, int *cy, int *cw, int *ch);
/**
* @brief Retrieve position and dimension information of a character within a
@@ -450,6 +450,6 @@ EAPI int evas_object_text_char_coords_get(const Evas_Text *obj, int x, int y, in
*
* @ingroup Evas_Object_Text_Group
*/
-EAPI Eina_Bool evas_object_text_char_pos_get(const Evas_Text *obj, int pos, int *cx, int *cy, int *cw, int *ch);
+EVAS_API Eina_Bool evas_object_text_char_pos_get(const Evas_Text *obj, int pos, int *cx, int *cy, int *cw, int *ch);
#endif
diff --git a/src/lib/evas/canvas/evas_textblock_legacy.h b/src/lib/evas/canvas/evas_textblock_legacy.h
index b852c0d61b..b7905eec0d 100644
--- a/src/lib/evas/canvas/evas_textblock_legacy.h
+++ b/src/lib/evas/canvas/evas_textblock_legacy.h
@@ -1,8 +1,8 @@
/**
- * @defgroup Evas_Object_Textblock Textblock Object Functions
+ * @defgroup Evas_Object_Textblock_Group Textblock Object Functions
*
* Functions used to create and manipulate textblock objects. Unlike
- * @ref Evas_Object_Text, these handle complex text, doing multiple
+ * @ref Evas_Object_Text_Group, these handle complex text, doing multiple
* styles and multiline text based on HTML-like tags. Of these extra
* features will be heavier on memory and processing cost.
*
@@ -118,8 +118,7 @@
* @li password - "on" or "off". This is used to specifically turn replacing chars with the replacement char (i.e password mode) on and off.
*
* @warning We don't guarantee any proper results if you create a Textblock
- * object
- * without setting the evas engine.
+ * object without setting the evas engine.
*
* @todo put here some usage examples
*
@@ -196,7 +195,7 @@ typedef enum _Evas_Textblock_Cursor_Type
* @param escape the string to be escaped
* @return the unescaped version of escape
*/
-EAPI const char *evas_textblock_escape_string_get(const char *escape) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API const char *evas_textblock_escape_string_get(const char *escape) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Returns the escaped version of the string.
@@ -204,7 +203,7 @@ EAPI const char *evas_textblock_escape_string_get(c
* @param len_ret the len of the part of the string that was used.
* @return the escaped string.
*/
-EAPI const char *evas_textblock_string_escape_get(const char *string, int *len_ret) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API const char *evas_textblock_string_escape_get(const char *string, int *len_ret) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Return the unescaped version of the string between start and end.
@@ -213,19 +212,19 @@ EAPI const char *evas_textblock_string_escape_get(c
* @param escape_end the end of the string.
* @return the unescaped version of the range
*/
-EAPI const char *evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API const char *evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Creates a new textblock style.
* @return The new textblock style.
*/
-EAPI Evas_Textblock_Style *evas_textblock_style_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
+EVAS_API Evas_Textblock_Style *evas_textblock_style_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
/**
* Destroys a textblock style.
* @param ts The textblock style to free.
*/
-EAPI void evas_textblock_style_free(Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1);
+EVAS_API void evas_textblock_style_free(Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1);
/**
* Sets the style ts to the style passed as text by text.
@@ -235,14 +234,14 @@ EAPI void evas_textblock_style_free(Evas_Tex
* @param text the text to parse - NOT NULL.
* @return Returns no value.
*/
-EAPI void evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text) EINA_ARG_NONNULL(1);
+EVAS_API void evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text) EINA_ARG_NONNULL(1);
/**
* Return the text of the style ts.
* @param ts the style to get it's text.
* @return the text of the style or null on error.
*/
-EAPI const char *evas_textblock_style_get(const Evas_Textblock_Style *ts) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API const char *evas_textblock_style_get(const Evas_Textblock_Style *ts) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Returns the next format node (after n)
@@ -250,7 +249,7 @@ EAPI const char *evas_textblock_style_get(const Eva
* @param n the current format node - not null.
* @return Returns the next format node, may be null.
*/
-EAPI const Evas_Object_Textblock_Node_Format *evas_textblock_node_format_next_get(const Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1);
+EVAS_API const Evas_Object_Textblock_Node_Format *evas_textblock_node_format_next_get(const Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1);
/**
* Returns the prev format node (after n)
@@ -258,7 +257,7 @@ EAPI const Evas_Object_Textblock_Node_Format *evas_textblock_node_format_next_ge
* @param n the current format node - not null.
* @return Returns the prev format node, may be null.
*/
-EAPI const Evas_Object_Textblock_Node_Format *evas_textblock_node_format_prev_get(const Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1);
+EVAS_API const Evas_Object_Textblock_Node_Format *evas_textblock_node_format_prev_get(const Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1);
/**
* Sets the cursor to point to the place where format points to.
@@ -267,7 +266,7 @@ EAPI const Evas_Object_Textblock_Node_Format *evas_textblock_node_format_prev_ge
* @param n the format node to update according.
* @deprecated duplicate of evas_textblock_cursor_at_format_set
*/
-EAPI void evas_textblock_cursor_set_at_format(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_textblock_cursor_set_at_format(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1, 2);
/**
* Return the format node at the position pointed by cur.
@@ -276,7 +275,7 @@ EAPI void evas_textblock_cursor_set_at_forma
* @return the format node if found, @c NULL otherwise.
* @see evas_textblock_cursor_format_is_visible_get()
*/
-EAPI const Evas_Object_Textblock_Node_Format *evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
+EVAS_API const Evas_Object_Textblock_Node_Format *evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
/**
* Get the text format representation of the format node.
@@ -284,7 +283,7 @@ EAPI const Evas_Object_Textblock_Node_Format *evas_textblock_cursor_format_get(c
* @param fnode the format node.
* @return the textual format of the format node.
*/
-EAPI const char *evas_textblock_node_format_text_get(const Evas_Object_Textblock_Node_Format *fnode) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API const char *evas_textblock_node_format_text_get(const Evas_Object_Textblock_Node_Format *fnode) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Set the cursor to point to the position of fmt.
@@ -292,7 +291,7 @@ EAPI const char *evas_textblock_node_format_text_ge
* @param cur the cursor to update
* @param fmt the format to update according to.
*/
-EAPI void evas_textblock_cursor_at_format_set(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *fmt) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_textblock_cursor_at_format_set(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *fmt) EINA_ARG_NONNULL(1, 2);
/**
* Check if the current cursor position is a visible format. This way is more
@@ -304,7 +303,7 @@ EAPI void evas_textblock_cursor_at_format_se
* otherwise.
* @see evas_textblock_cursor_format_get()
*/
-EAPI Eina_Bool evas_textblock_cursor_format_is_visible_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_textblock_cursor_format_is_visible_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Advances to the next format node
@@ -312,7 +311,7 @@ EAPI Eina_Bool evas_textblock_cursor_format_is_vi
* @param cur the cursor to be updated.
* @return @c EINA_TRUE on success @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_format_next(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_textblock_cursor_format_next(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
/**
* Advances to the previous format node.
@@ -320,7 +319,7 @@ EAPI Eina_Bool evas_textblock_cursor_format_next(
* @param cur the cursor to update.
* @return @c EINA_TRUE on success @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_format_prev(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_textblock_cursor_format_prev(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
/**
* Returns true if the cursor points to a format.
@@ -329,7 +328,7 @@ EAPI Eina_Bool evas_textblock_cursor_format_prev(
* @return @c EINA_TRUE if a cursor points to a format @c EINA_FALSE
* otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_is_format(const Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_textblock_cursor_is_format(const Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
/**
* Return the current cursor pos.
@@ -337,7 +336,7 @@ EAPI Eina_Bool evas_textblock_cursor_is_format(co
* @param cur the cursor to take the position from.
* @return the position or -1 on error
*/
-EAPI int evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API int evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Go to the start of the line passed
@@ -346,7 +345,7 @@ EAPI int evas_textblock_cursor_pos_get(cons
* @param line number to set.
* @return @c EINA_TRUE on success, @c EINA_FALSE on error.
*/
-EAPI Eina_Bool evas_textblock_cursor_line_set(Evas_Textblock_Cursor *cur, int line) EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_textblock_cursor_line_set(Evas_Textblock_Cursor *cur, int line) EINA_ARG_NONNULL(1);
/**
* Adds format to the current cursor position. If the format being added is a
@@ -371,7 +370,7 @@ EAPI Eina_Bool evas_textblock_cursor_line_set(Eva
* @param cur the cursor to look at.
* @return @c EINA_TRUE if the cursor points to the terminating null, @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur, const char *format) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur, const char *format) EINA_ARG_NONNULL(1, 2);
/**
* Adds format to the current cursor position. If the format being added is a
@@ -388,7 +387,7 @@ EAPI Eina_Bool evas_textblock_cursor_format_appen
* @return Returns true if a visible format was added, false otherwise.
* @see evas_textblock_cursor_format_prepend()
*/
-EAPI Eina_Bool evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur, const char *format) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur, const char *format) EINA_ARG_NONNULL(1, 2);
/**
* Delete the range between cur1 and cur2.
@@ -397,7 +396,7 @@ EAPI Eina_Bool evas_textblock_cursor_format_prepe
* @param cur2 the second side of the range
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_Cursor *cur2) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_Cursor *cur2) EINA_ARG_NONNULL(1, 2);
/**
* Return the text of the paragraph cur points to - returns the text in markup.
@@ -405,7 +404,7 @@ EAPI void evas_textblock_cursor_range_delete
* @param cur the cursor pointing to the paragraph.
* @return the text on success, @c NULL otherwise.
*/
-EAPI const char *evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API const char *evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Return the length of the paragraph, cheaper the eina_unicode_strlen()
@@ -413,7 +412,7 @@ EAPI const char *evas_textblock_cursor_paragraph_te
* @param cur the position of the paragraph.
* @return the length of the paragraph on success, -1 otehrwise.
*/
-EAPI int evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API int evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* Return the currently visible range.
@@ -423,7 +422,7 @@ EAPI int evas_textblock_cursor_paragraph_te
* @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
* @since 1.1
*/
-EAPI Eina_Bool evas_textblock_cursor_visible_range_get(Evas_Textblock_Cursor *start, Evas_Textblock_Cursor *end) EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Bool evas_textblock_cursor_visible_range_get(Evas_Textblock_Cursor *start, Evas_Textblock_Cursor *end) EINA_ARG_NONNULL(1, 2);
/**
* Return the format nodes in the range between cur1 and cur2.
@@ -433,7 +432,7 @@ EAPI Eina_Bool evas_textblock_cursor_visible_rang
* @return the foramt nodes in the range. You have to free it.
* @since 1.1
*/
-EAPI Eina_List *evas_textblock_cursor_range_formats_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_List *evas_textblock_cursor_range_formats_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Return the text in the range between cur1 and cur2
@@ -444,7 +443,7 @@ EAPI Eina_List *evas_textblock_cursor_range_format
* @return the text in the range
* @see elm_entry_markup_to_utf8()
*/
-EAPI char *evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API char *evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Return the content of the cursor.
@@ -454,7 +453,7 @@ EAPI char *evas_textblock_cursor_range_text_g
* @param cur the cursor
* @return the text in the range, terminated by a nul byte (may be utf8).
*/
-EAPI char *evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API char *evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Returns the geometry of two cursors ("split cursor"), if logical cursor is
@@ -479,7 +478,7 @@ EAPI char *evas_textblock_cursor_content_get(
* @return @c EINA_TRUE for split cursor, @c EINA_FALSE otherwise
* @since 1.8
*/
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_textblock_cursor_geometry_bidi_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch, Evas_Coord *cx2, Evas_Coord *cy2, Evas_Coord *cw2, Evas_Coord *ch2, Evas_Textblock_Cursor_Type ctype);
/**
@@ -504,7 +503,7 @@ evas_textblock_cursor_geometry_bidi_get(const Evas_Textblock_Cursor *cur, Evas_C
* @param ctype the type of the cursor.
* @return line number of the char on success, -1 on error.
*/
-EAPI int evas_textblock_cursor_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch, Evas_BiDi_Direction *dir, Evas_Textblock_Cursor_Type ctype) EINA_ARG_NONNULL(1);
+EVAS_API int evas_textblock_cursor_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch, Evas_BiDi_Direction *dir, Evas_Textblock_Cursor_Type ctype) EINA_ARG_NONNULL(1);
/**
* Returns the geometry of the char at cur.
@@ -516,7 +515,7 @@ EAPI int evas_textblock_cursor_geometry_get
* @param ch the h of the char.
* @return line number of the char on success, -1 on error.
*/
-EAPI int evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
+EVAS_API int evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
/**
* Returns the geometry of the pen at cur.
@@ -528,7 +527,7 @@ EAPI int evas_textblock_cursor_char_geometr
* @param ch the h of the char.
* @return line number of the char on success, -1 on error.
*/
-EAPI int evas_textblock_cursor_pen_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cpen_x, Evas_Coord *cy, Evas_Coord *cadv, Evas_Coord *ch) EINA_ARG_NONNULL(1);
+EVAS_API int evas_textblock_cursor_pen_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cpen_x, Evas_Coord *cy, Evas_Coord *cadv, Evas_Coord *ch) EINA_ARG_NONNULL(1);
/**
* Returns the geometry of the line at cur.
@@ -540,7 +539,7 @@ EAPI int evas_textblock_cursor_pen_geometry
* @param ch the height of the line.
* @return line number of the line on success, -1 on error.
*/
-EAPI int evas_textblock_cursor_line_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
+EVAS_API int evas_textblock_cursor_line_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
/**
* Set the cursor position according to the y coord.
@@ -549,7 +548,7 @@ EAPI int evas_textblock_cursor_line_geometr
* @param y the coord to set by.
* @return the line number found, -1 on error.
*/
-EAPI int evas_textblock_cursor_line_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord y) EINA_ARG_NONNULL(1);
+EVAS_API int evas_textblock_cursor_line_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord y) EINA_ARG_NONNULL(1);
/**
* Get the geometry of a range.
@@ -558,11 +557,11 @@ EAPI int evas_textblock_cursor_line_coord_s
* @param cur2 other side of the range.
* @return a list of Rectangles representing the geometry of the range.
*/
-EAPI Eina_List *evas_textblock_cursor_range_geometry_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_List *evas_textblock_cursor_range_geometry_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
* Get the simple geometry of a range.
- * The simple geometry is the geomtry in which rectangles in middle
+ * The simple geometry is the geometry in which rectangles in middle
* lines of range are merged into one big rectangle.
* @since 1.13
*
@@ -570,15 +569,11 @@ EAPI Eina_List *evas_textblock_cursor_range_geomet
* @param cur2 other side of the range.
* @return an iterator of rectangles representing the geometry of the range.
*/
-EAPI Eina_Iterator *evas_textblock_cursor_range_simple_geometry_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
+EVAS_API Eina_Iterator *evas_textblock_cursor_range_simple_geometry_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
/**
- * Get the geometry of ?
- *
- * @param cur one side of the range.
- * @param cur2 other side of the range.
*/
-EAPI Eina_Bool evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
/**
* Checks if the cursor points to the end of the line.
@@ -586,14 +581,14 @@ EAPI Eina_Bool evas_textblock_cursor_format_item_
* @param cur the cursor to check.
* @return @c EINA_TRUE if true, @c EINA_FALSE otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
/**
* @brief Advances the cursor one char backwards.
*
* @return @c true on success, @c false otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *obj);
/**
* @brief Advances the cursor one char forward.
@@ -602,14 +597,14 @@ EAPI Eina_Bool evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *obj);
*
* @ingroup Evas_Textblock_Cursor
*/
-EAPI Eina_Bool evas_textblock_cursor_char_next(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_char_next(Evas_Textblock_Cursor *obj);
/**
* @brief Advances the cursor one grapheme cluster backwards.
*
* @return @c true on success, @c false otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_cluster_prev(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_cluster_prev(Evas_Textblock_Cursor *obj);
/**
* @brief Advances the cursor one grapheme cluster forward.
@@ -618,7 +613,7 @@ EAPI Eina_Bool evas_textblock_cursor_cluster_prev(Evas_Textblock_Cursor *obj);
*
* @ingroup Evas_Textblock_Cursor
*/
-EAPI Eina_Bool evas_textblock_cursor_cluster_next(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_cluster_next(Evas_Textblock_Cursor *obj);
/**
* @brief Advances to the start of the next text node
@@ -627,7 +622,7 @@ EAPI Eina_Bool evas_textblock_cursor_cluster_next(Evas_Textblock_Cursor *obj);
*
* @ingroup Evas_Textblock_Cursor
*/
-EAPI Eina_Bool evas_textblock_cursor_paragraph_next(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_paragraph_next(Evas_Textblock_Cursor *obj);
/**
* @brief Advances to the end of the previous text node
@@ -636,7 +631,7 @@ EAPI Eina_Bool evas_textblock_cursor_paragraph_next(Evas_Textblock_Cursor *obj);
*
* @ingroup Evas_Textblock_Cursor
*/
-EAPI Eina_Bool evas_textblock_cursor_paragraph_prev(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_paragraph_prev(Evas_Textblock_Cursor *obj);
/**
* @brief Moves the cursor to the start of the word under the cursor
@@ -645,7 +640,7 @@ EAPI Eina_Bool evas_textblock_cursor_paragraph_prev(Evas_Textblock_Cursor *obj);
*
* @ingroup Evas_Textblock_Cursor
*/
-EAPI Eina_Bool evas_textblock_cursor_word_start(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_word_start(Evas_Textblock_Cursor *obj);
/**
* @brief Moves the cursor to the end of the word under the cursor
@@ -654,14 +649,14 @@ EAPI Eina_Bool evas_textblock_cursor_word_start(Evas_Textblock_Cursor *obj);
*
* @ingroup Evas_Textblock_Cursor
*/
-EAPI Eina_Bool evas_textblock_cursor_word_end(Evas_Textblock_Cursor *obj);
+EVAS_API Eina_Bool evas_textblock_cursor_word_end(Evas_Textblock_Cursor *obj);
/**
* @}
*/
/**
- * @ingroup Evas_Object_Textblock
+ * @addtogroup Evas_Object_Textblock_Group
*
* @{
*/
@@ -671,7 +666,7 @@ EAPI Eina_Bool evas_textblock_cursor_word_end(Evas_Textblock_Cursor *obj);
* @param e The given evas.
* @return The new textblock object.
*/
-EAPI Evas_Object *evas_object_textblock_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
+EVAS_API Evas_Object *evas_object_textblock_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
/**
* Return the plain version of the markup.
@@ -686,7 +681,7 @@ EAPI Evas_Object *evas_object_textblock_add(Evas *e)
* @return An allocated plain text version of the markup.
* @since 1.2
*/
-EAPI char *evas_textblock_text_markup_to_utf8(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
+EVAS_API char *evas_textblock_text_markup_to_utf8(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
/**
* Return the markup version of the plain text.
@@ -700,7 +695,7 @@ EAPI char *evas_textblock_text_markup_to_utf8
* @return An allocated markup version of the plain text.
* @since 1.2
*/
-EAPI char *evas_textblock_text_utf8_to_markup(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
+EVAS_API char *evas_textblock_text_utf8_to_markup(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
/**
* Clear the textblock object.
@@ -709,7 +704,7 @@ EAPI char *evas_textblock_text_utf8_to_markup
* @param obj the object to clear.
* @return nothing.
*/
-EAPI void evas_object_textblock_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_textblock_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Sets given text as markup for the textblock object.
@@ -720,7 +715,7 @@ EAPI void evas_object_textblock_clear(Evas_O
* @param text the markup text to set.
* @return Returns no value.
*/
-EAPI void evas_object_textblock_text_markup_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_textblock_text_markup_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
/**
* Gets the current markup text of the textblock object.
@@ -728,7 +723,7 @@ EAPI void evas_object_textblock_text_markup_set(Evas_Object *obj, const char *te
* @param obj the textblock object.
* @return Returns the current markup text.
*/
-EAPI const char *evas_object_textblock_text_markup_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API const char *evas_object_textblock_text_markup_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Prepends markup to the cursor cur.
@@ -739,7 +734,7 @@ EAPI const char *evas_object_textblock_text_markup_get(Evas_Object *obj) EINA_AR
* @param text the markup text to prepend.
* @return Return no value.
*/
-EAPI void evas_object_textblock_text_markup_prepend(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_textblock_text_markup_prepend(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
/**
* Sets object's style to given style.
@@ -749,7 +744,7 @@ EAPI void evas_object_textblock_text_markup_
* @return Returns no value.
* @see evas_textblock_style_user_push()
*/
-EAPI void evas_object_textblock_style_set(Evas_Object *obj, const Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_object_textblock_style_set(Evas_Object *obj, const Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1, 2);
/**
* Gets the object's current style.
@@ -758,7 +753,7 @@ EAPI void evas_object_textblock_style_set(Ev
* @return Returns the current active style.
* @see evas_textblock_style_user_peek()
*/
-EAPI Evas_Textblock_Style *evas_object_textblock_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API Evas_Textblock_Style *evas_object_textblock_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
@@ -776,7 +771,7 @@ EAPI Evas_Textblock_Style *evas_object_textblock_style_get(c
*
* @since 1.2
*/
-EAPI void evas_object_textblock_style_user_push(Evas_Object *obj, Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1,2);
+EVAS_API void evas_object_textblock_style_user_push(Evas_Object *obj, Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1,2);
/**
* Peeks at the user-styles stack
@@ -785,7 +780,7 @@ EAPI void evas_object_textblock_style_user_
* @return Returns the user style at the top of the user style stack.
* @see evas_textblock_style_user_pop()
*/
-EAPI const Evas_Textblock_Style *evas_object_textblock_style_user_peek(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API const Evas_Textblock_Style *evas_object_textblock_style_user_peek(const Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Removes the style at the top of the user-style stack
@@ -794,7 +789,7 @@ EAPI const Evas_Textblock_Style *evas_object_textblock_style_user_
* @return Returns no value.
* @see evas_textblock_style_user_peek()
*/
-EAPI void evas_object_textblock_style_user_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API void evas_object_textblock_style_user_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Gets the first format node
@@ -802,7 +797,7 @@ EAPI void evas_object_textblock_style_user_p
* @param obj The textblock object.
* @return Returns the first format node.
*/
-EAPI const Evas_Object_Textblock_Node_Format* evas_textblock_node_format_first_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API const Evas_Object_Textblock_Node_Format* evas_textblock_node_format_first_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Gets the last format node
@@ -810,7 +805,7 @@ EAPI const Evas_Object_Textblock_Node_Format* evas_textblock_node_format_first_g
* @param obj The textblock object.
* @return Returns the first format node.
*/
-EAPI const Evas_Object_Textblock_Node_Format* evas_textblock_node_format_last_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+EVAS_API const Evas_Object_Textblock_Node_Format* evas_textblock_node_format_last_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Gets a list of format nodes that match given format.
@@ -819,7 +814,7 @@ EAPI const Evas_Object_Textblock_Node_Format* evas_textblock_node_format_last_ge
* @param anchor The format to find in the textblock.
* @return Returns a list of format nodes that match the given format.
*/
-EAPI const Eina_List *evas_textblock_node_format_list_get(const Evas_Object *obj, const char *anchor) EINA_ARG_NONNULL(1);
+EVAS_API const Eina_List *evas_textblock_node_format_list_get(const Evas_Object *obj, const char *anchor) EINA_ARG_NONNULL(1);
/**
* Removes format node and its matching format node.
@@ -828,7 +823,7 @@ EAPI const Eina_List *evas_textblock_node_format_list_get(const Evas_Object *obj
* @param n The format node to remove.
* @return Returns no value.
*/
-EAPI void evas_textblock_node_format_remove_pair(Evas_Object *obj, Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1, 2);
+EVAS_API void evas_textblock_node_format_remove_pair(Evas_Object *obj, Evas_Object_Textblock_Node_Format *n) EINA_ARG_NONNULL(1, 2);
/**
* Gets the geometry of the line specified by its number.
@@ -837,7 +832,7 @@ EAPI void evas_textblock_node_format_remove_pair(Evas_Object *obj, Evas_Object_T
* @param line the line number of the queried line.
* @return Returns no value.
*/
-EAPI Eina_Bool evas_object_textblock_line_number_geometry_get(const Evas_Object *obj, int line, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
+EVAS_API Eina_Bool evas_object_textblock_line_number_geometry_get(const Evas_Object *obj, int line, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
/**
* Make cur_dest point to the same place as cur. Does not work if they don't
@@ -847,7 +842,7 @@ EAPI Eina_Bool evas_object_textblock_line_number_geometry_get(const Evas_Object
* @param cur_dest destination cursor.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_copy(const Evas_Textblock_Cursor *cur, Evas_Textblock_Cursor *cur_dest);
+EVAS_API void evas_textblock_cursor_copy(const Evas_Textblock_Cursor *cur, Evas_Textblock_Cursor *cur_dest);
/**
* Create a new cursor, associate it to the obj and init it to point
@@ -864,7 +859,7 @@ EAPI void evas_textblock_cursor_copy(const E
* @param obj The textblock to which the new cursor will associate.
* @return Returns a new cursor associated with the given textblock object.
*/
-EAPI Evas_Textblock_Cursor *evas_object_textblock_cursor_new(const Evas_Object *obj);
+EVAS_API Evas_Textblock_Cursor *evas_object_textblock_cursor_new(const Evas_Object *obj);
/**
* @brief Sets the position of the cursor according to the X and Y coordinates.
@@ -873,7 +868,7 @@ EAPI Evas_Textblock_Cursor *evas_object_textblock_cursor_new(const Evas_Object *
*
* @return @c true on success, @c false otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_char_coord_set(Evas_Textblock_Cursor *obj, Evas_Coord x, Evas_Coord y);
+EVAS_API Eina_Bool evas_textblock_cursor_char_coord_set(Evas_Textblock_Cursor *obj, Evas_Coord x, Evas_Coord y);
/**
* @brief Sets the position of the cursor according to the X and Y coordinates and
@@ -883,7 +878,7 @@ EAPI Eina_Bool evas_textblock_cursor_char_coord_set(Evas_Textblock_Cursor *obj,
*
* @return @c true on success, @c false otherwise.
*/
-EAPI Eina_Bool evas_textblock_cursor_cluster_coord_set(Evas_Textblock_Cursor *obj, Evas_Coord x, Evas_Coord y);
+EVAS_API Eina_Bool evas_textblock_cursor_cluster_coord_set(Evas_Textblock_Cursor *obj, Evas_Coord x, Evas_Coord y);
/**
* Free the cursor and unassociate it from the object.
@@ -892,7 +887,7 @@ EAPI Eina_Bool evas_textblock_cursor_cluster_coord_set(Evas_Textblock_Cursor *ob
* @param cur the cursor to free.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_free(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_free(Evas_Textblock_Cursor *cur);
/**
* Adds text to the current cursor position and set the cursor to *before*
@@ -903,7 +898,7 @@ EAPI void evas_textblock_cursor_free(Evas_Textblock_Cursor *cur);
* @return Returns the len of the text added.
* @see evas_textblock_cursor_text_prepend()
*/
-EAPI int evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
+EVAS_API int evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
/**
* Adds text to the current cursor position and set the cursor to *after*
@@ -914,7 +909,7 @@ EAPI int evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const cha
* @return Returns the len of the text added.
* @see evas_textblock_cursor_text_append()
*/
-EAPI int evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
+EVAS_API int evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
/**
* @brief The "replacement character" to use for the given textblock object.
@@ -923,7 +918,7 @@ EAPI int evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const ch
*
* @ingroup Efl_Canvas_Textblock
*/
-EAPI void evas_object_textblock_replace_char_set(Evas_Object *obj, const char *ch);
+EVAS_API void evas_object_textblock_replace_char_set(Evas_Object *obj, const char *ch);
/**
* @brief The "replacement character" to use for the given textblock object.
@@ -932,7 +927,7 @@ EAPI void evas_object_textblock_replace_char_set(Evas_Object *obj, const char *c
*
* @ingroup Efl_Canvas_Textblock
*/
-EAPI const char *evas_object_textblock_replace_char_get(const Evas_Object *obj);
+EVAS_API const char *evas_object_textblock_replace_char_get(const Evas_Object *obj);
/**
* @brief The vertical alignment of text within the textblock object as a
@@ -947,7 +942,7 @@ EAPI const char *evas_object_textblock_replace_char_get(const Evas_Object *obj);
*
* @ingroup Efl_Canvas_Textblock
*/
-EAPI void evas_object_textblock_valign_set(Evas_Object *obj, double align);
+EVAS_API void evas_object_textblock_valign_set(Evas_Object *obj, double align);
/**
* @brief The vertical alignment of text within the textblock object as a
@@ -962,7 +957,7 @@ EAPI void evas_object_textblock_valign_set(Evas_Object *obj, double align);
*
* @ingroup Efl_Canvas_Textblock
*/
-EAPI double evas_object_textblock_valign_get(const Evas_Object *obj);
+EVAS_API double evas_object_textblock_valign_get(const Evas_Object *obj);
/**
* Sets the cursor to the start of the first text node.
@@ -970,7 +965,7 @@ EAPI double evas_object_textblock_valign_get(const Evas_Object *obj);
* @param cur the cursor to update.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_paragraph_first(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_paragraph_first(Evas_Textblock_Cursor *cur);
/**
* sets the cursor to the end of the last text node.
@@ -978,7 +973,7 @@ EAPI void evas_textblock_cursor_paragraph_first(Evas_Textblock_Cursor *cur);
* @param cur the cursor to set.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_paragraph_last(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_paragraph_last(Evas_Textblock_Cursor *cur);
/**
* Compare two cursors.
@@ -987,7 +982,7 @@ EAPI void evas_textblock_cursor_paragraph_last(Evas_Textblock_Cursor *cur);
* @param cur2 the second cursor.
* @return -1 if cur1 < cur2, 0 if cur1 == cur2 and 1 otherwise.
*/
-EAPI int evas_textblock_cursor_compare(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2);
+EVAS_API int evas_textblock_cursor_compare(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2);
/**
* @brief Checks if two cursors are equal
@@ -1001,7 +996,7 @@ EAPI int evas_textblock_cursor_compare(const Evas_Textblock_Cursor *cur1, const
*
* @since 1.18
*/
-EAPI Eina_Bool evas_textblock_cursor_equal(const Evas_Textblock_Cursor *obj, const Evas_Textblock_Cursor *cur);
+EVAS_API Eina_Bool evas_textblock_cursor_equal(const Evas_Textblock_Cursor *obj, const Evas_Textblock_Cursor *cur);
/**
* Go to the start of the current line
@@ -1009,7 +1004,7 @@ EAPI Eina_Bool evas_textblock_cursor_equal(const Evas_Textblock_Cursor *obj, con
* @param cur the cursor to update.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_line_char_first(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_line_char_first(Evas_Textblock_Cursor *cur);
/**
* Go to the end of the current line.
@@ -1017,15 +1012,15 @@ EAPI void evas_textblock_cursor_line_char_first(Evas_Textblock_Cursor *cur);
* @param cur the cursor to update.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_line_char_last(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_line_char_last(Evas_Textblock_Cursor *cur);
/**
* Set the cursor pos.
*
* @param cur the cursor to be set.
- * @param pos the pos to set.
+ * @param _pos the pos to set.
*/
-EAPI void evas_textblock_cursor_pos_set(Evas_Textblock_Cursor *cur, int _pos);
+EVAS_API void evas_textblock_cursor_pos_set(Evas_Textblock_Cursor *cur, int _pos);
/**
* Go to the first char in the node the cursor is pointing on.
@@ -1033,7 +1028,7 @@ EAPI void evas_textblock_cursor_pos_set(Evas_Textblock_Cursor *cur, int _pos);
* @param cur the cursor to update.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_paragraph_char_first(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_paragraph_char_first(Evas_Textblock_Cursor *cur);
/**
* Go to the last char in a text node.
@@ -1041,7 +1036,7 @@ EAPI void evas_textblock_cursor_paragraph_char_first(Evas_Textblock_Cursor *cur)
* @param cur the cursor to update.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_paragraph_char_last(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_paragraph_char_last(Evas_Textblock_Cursor *cur);
/**
* Deletes a single character from position pointed by given cursor.
@@ -1049,13 +1044,13 @@ EAPI void evas_textblock_cursor_paragraph_char_last(Evas_Textblock_Cursor *cur);
* @param cur the cursor to update.
* @return Returns no value.
*/
-EAPI void evas_textblock_cursor_char_delete(Evas_Textblock_Cursor *cur);
+EVAS_API void evas_textblock_cursor_char_delete(Evas_Textblock_Cursor *cur);
/** Get the object's main cursor.
*
* @ingroup Evas_Textblock
*/
-EAPI Evas_Textblock_Cursor *evas_object_textblock_cursor_get(const Evas_Object *obj);
+EVAS_API Evas_Textblock_Cursor *evas_object_textblock_cursor_get(const Evas_Object *obj);
@@ -1073,21 +1068,21 @@ EAPI Evas_Textblock_Cursor *evas_object_textblock_cursor_get(const Evas_Object *
#define EVAS_ERROR_INVALID_OPERATION 0x0003
-/** Get the object's content it options.
+/** Get the object's content fit options.
*
* @param obj The textblock object.
- * @param[out] options content fitting options.
+ * @param[out] p_options content fitting options.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_options_get(const Evas_Object *obj, unsigned int * p_options);
+EVAS_API int evas_textblock_fit_options_get(const Evas_Object *obj, unsigned int * p_options);
-/** Set the object's content it options.
+/** Set the object's content fit options.
*
* @param obj The textblock object.
* @param[in] options content fitting options.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_options_set(Evas_Object *obj, unsigned int options);
+EVAS_API int evas_textblock_fit_options_set(Evas_Object *obj, unsigned int options);
/** Get the object's max and min font sizes used for fitting content.
*
@@ -1096,7 +1091,7 @@ EAPI int evas_textblock_fit_options_set(Evas_Object *obj, unsigned int options)
* @param[out] p_max_font_size max font size used when fitting content.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_size_range_get(const Evas_Object *obj, unsigned int *p_min_font_size, unsigned int *p_max_font_size);
+EVAS_API int evas_textblock_fit_size_range_get(const Evas_Object *obj, unsigned int *p_min_font_size, unsigned int *p_max_font_size);
/** Set the object's max and min font sizes used for fitting content.
*
@@ -1105,7 +1100,7 @@ EAPI int evas_textblock_fit_size_range_get(const Evas_Object *obj, unsigned int
* @param[in] max_font_size max font size used when fitting content.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_size_range_set(Evas_Object *obj, unsigned int min_font_size, unsigned int max_font_size);
+EVAS_API int evas_textblock_fit_size_range_set(Evas_Object *obj, unsigned int min_font_size, unsigned int max_font_size);
/** Get the object's fitting step size when trying fonts between min font size and
@@ -1115,7 +1110,7 @@ EAPI int evas_textblock_fit_size_range_set(Evas_Object *obj, unsigned int min_f
* @param[out] p_step_size step jumps between min and max font size.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_step_size_get(const Evas_Object *obj, unsigned int *p_step_size);
+EVAS_API int evas_textblock_fit_step_size_get(const Evas_Object *obj, unsigned int *p_step_size);
/** Set the object's fitting step size when trying fonts between min font size and
@@ -1125,7 +1120,7 @@ EAPI int evas_textblock_fit_step_size_get(const Evas_Object *obj, unsigned int
* @param[out] step_size step jumps between min and max font size.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int step_size);
+EVAS_API int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int step_size);
/** Get copy of the object's fitting font size array used internally
*
@@ -1135,7 +1130,7 @@ EAPI int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int step_s
* @param[out] request_size_array request to fill specific amount in p_size_array.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_size_array_get(const Evas_Object *obj, unsigned int *p_size_array, size_t *p_size_array_len,size_t request_size_array);
+EVAS_API int evas_textblock_fit_size_array_get(const Evas_Object *obj, unsigned int *p_size_array, size_t *p_size_array_len,size_t request_size_array);
/** Set the object's fitting font size array that will be used internally
* Changing fitting step_size,min_font_size,max_font size will generate new array
@@ -1146,7 +1141,7 @@ EAPI int evas_textblock_fit_size_array_get(const Evas_Object *obj, unsigned int
* @param[in] size_array_len the length passed font sizes array.
* @return Returns error code.
*/
-EAPI int evas_textblock_fit_size_array_set(Evas_Object *obj, const unsigned int *p_size_array, size_t size_array_len);
+EVAS_API int evas_textblock_fit_size_array_set(Evas_Object *obj, const unsigned int *p_size_array, size_t size_array_len);
diff --git a/src/lib/evas/canvas/evas_textgrid_eo.c b/src/lib/evas/canvas/evas_textgrid_eo.c
index bbe4614766..1522cba0f1 100644
--- a/src/lib/evas/canvas/evas_textgrid_eo.c
+++ b/src/lib/evas/canvas/evas_textgrid_eo.c
@@ -1,43 +1,43 @@
void _evas_textgrid_supported_font_styles_set(Eo *obj, Evas_Textgrid_Data *pd, Evas_Textgrid_Font_Style styles);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_textgrid_supported_font_styles_set, EFL_FUNC_CALL(styles), Evas_Textgrid_Font_Style styles);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_textgrid_supported_font_styles_set, EFL_FUNC_CALL(styles), Evas_Textgrid_Font_Style styles);
Evas_Textgrid_Font_Style _evas_textgrid_supported_font_styles_get(const Eo *obj, Evas_Textgrid_Data *pd);
-EOAPI EFL_FUNC_BODY_CONST(evas_obj_textgrid_supported_font_styles_get, Evas_Textgrid_Font_Style, 0);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODY_CONST(evas_obj_textgrid_supported_font_styles_get, Evas_Textgrid_Font_Style, 0);
void _evas_textgrid_grid_size_set(Eo *obj, Evas_Textgrid_Data *pd, int w, int h);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_textgrid_grid_size_set, EFL_FUNC_CALL(w, h), int w, int h);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_textgrid_grid_size_set, EFL_FUNC_CALL(w, h), int w, int h);
void _evas_textgrid_grid_size_get(const Eo *obj, Evas_Textgrid_Data *pd, int *w, int *h);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_textgrid_grid_size_get, EFL_FUNC_CALL(w, h), int *w, int *h);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_textgrid_grid_size_get, EFL_FUNC_CALL(w, h), int *w, int *h);
void _evas_textgrid_cell_size_get(const Eo *obj, Evas_Textgrid_Data *pd, int *width, int *height);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_textgrid_cell_size_get, EFL_FUNC_CALL(width, height), int *width, int *height);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_textgrid_cell_size_get, EFL_FUNC_CALL(width, height), int *width, int *height);
void _evas_textgrid_update_add(Eo *obj, Evas_Textgrid_Data *pd, int x, int y, int w, int h);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_textgrid_update_add, EFL_FUNC_CALL(x, y, w, h), int x, int y, int w, int h);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_textgrid_update_add, EFL_FUNC_CALL(x, y, w, h), int x, int y, int w, int h);
void _evas_textgrid_cellrow_set(Eo *obj, Evas_Textgrid_Data *pd, int y, const Evas_Textgrid_Cell *row);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_textgrid_cellrow_set, EFL_FUNC_CALL(y, row), int y, const Evas_Textgrid_Cell *row);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_textgrid_cellrow_set, EFL_FUNC_CALL(y, row), int y, const Evas_Textgrid_Cell *row);
Evas_Textgrid_Cell *_evas_textgrid_cellrow_get(const Eo *obj, Evas_Textgrid_Data *pd, int y);
-EOAPI EFL_FUNC_BODYV_CONST(evas_obj_textgrid_cellrow_get, Evas_Textgrid_Cell *, NULL, EFL_FUNC_CALL(y), int y);
+EVAS_API EVAS_API_WEAK EFL_FUNC_BODYV_CONST(evas_obj_textgrid_cellrow_get, Evas_Textgrid_Cell *, NULL, EFL_FUNC_CALL(y), int y);
void _evas_textgrid_palette_set(Eo *obj, Evas_Textgrid_Data *pd, Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a);
-EOAPI EFL_VOID_FUNC_BODYV(evas_obj_textgrid_palette_set, EFL_FUNC_CALL(pal, idx, r, g, b, a), Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV(evas_obj_textgrid_palette_set, EFL_FUNC_CALL(pal, idx, r, g, b, a), Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a);
void _evas_textgrid_palette_get(const Eo *obj, Evas_Textgrid_Data *pd, Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(evas_obj_textgrid_palette_get, EFL_FUNC_CALL(pal, idx, r, g, b, a), Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK EFL_VOID_FUNC_BODYV_CONST(evas_obj_textgrid_palette_get, EFL_FUNC_CALL(pal, idx, r, g, b, a), Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a);
Efl_Object *_evas_textgrid_efl_object_constructor(Eo *obj, Evas_Textgrid_Data *pd);
diff --git a/src/lib/evas/canvas/evas_textgrid_eo.h b/src/lib/evas/canvas/evas_textgrid_eo.h
index 0b88b67db8..1635f26230 100644
--- a/src/lib/evas/canvas/evas_textgrid_eo.h
+++ b/src/lib/evas/canvas/evas_textgrid_eo.h
@@ -53,7 +53,7 @@ typedef struct _Evas_Textgrid_Cell Evas_Textgrid_Cell;
*/
#define EVAS_TEXTGRID_CLASS evas_textgrid_class_get()
-EWAPI const Efl_Class *evas_textgrid_class_get(void);
+EVAS_API EVAS_API_WEAK const Efl_Class *evas_textgrid_class_get(void) EINA_CONST;
/**
* @brief This function is not implemented yet, do not use.
@@ -63,7 +63,7 @@ EWAPI const Efl_Class *evas_textgrid_class_get(void);
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_supported_font_styles_set(Eo *obj, Evas_Textgrid_Font_Style styles);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_supported_font_styles_set(Eo *obj, Evas_Textgrid_Font_Style styles);
/**
* @brief This function is not implemented yet, do not use.
@@ -74,7 +74,7 @@ EOAPI void evas_obj_textgrid_supported_font_styles_set(Eo *obj, Evas_Textgrid_Fo
*
* @ingroup Evas_Textgrid
*/
-EOAPI Evas_Textgrid_Font_Style evas_obj_textgrid_supported_font_styles_get(const Eo *obj);
+EVAS_API EVAS_API_WEAK Evas_Textgrid_Font_Style evas_obj_textgrid_supported_font_styles_get(const Eo *obj);
/**
* @brief Set the size of the textgrid object.
@@ -91,7 +91,7 @@ EOAPI Evas_Textgrid_Font_Style evas_obj_textgrid_supported_font_styles_get(const
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_grid_size_set(Eo *obj, int w, int h);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_grid_size_set(Eo *obj, int w, int h);
/**
* @brief Get the size of the textgrid object.
@@ -108,7 +108,7 @@ EOAPI void evas_obj_textgrid_grid_size_set(Eo *obj, int w, int h);
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_grid_size_get(const Eo *obj, int *w, int *h);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_grid_size_get(const Eo *obj, int *w, int *h);
/**
* @brief Retrieve the size of a cell of the given textgrid object in pixels.
@@ -132,7 +132,7 @@ EOAPI void evas_obj_textgrid_grid_size_get(const Eo *obj, int *w, int *h);
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_cell_size_get(const Eo *obj, int *width, int *height);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_cell_size_get(const Eo *obj, int *width, int *height);
/**
* @brief Indicate for evas that part of a textgrid region (cells) has been
@@ -155,7 +155,7 @@ EOAPI void evas_obj_textgrid_cell_size_get(const Eo *obj, int *width, int *heigh
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_update_add(Eo *obj, int x, int y, int w, int h);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_update_add(Eo *obj, int x, int y, int w, int h);
/**
* @brief Set the string at the given row of the given textgrid object.
@@ -176,7 +176,7 @@ EOAPI void evas_obj_textgrid_update_add(Eo *obj, int x, int y, int w, int h);
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_cellrow_set(Eo *obj, int y, const Evas_Textgrid_Cell *row);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_cellrow_set(Eo *obj, int y, const Evas_Textgrid_Cell *row);
/**
* @brief Get the string at the given row of the given textgrid object.
@@ -197,7 +197,7 @@ EOAPI void evas_obj_textgrid_cellrow_set(Eo *obj, int y, const Evas_Textgrid_Cel
*
* @ingroup Evas_Textgrid
*/
-EOAPI Evas_Textgrid_Cell *evas_obj_textgrid_cellrow_get(const Eo *obj, int y);
+EVAS_API EVAS_API_WEAK Evas_Textgrid_Cell *evas_obj_textgrid_cellrow_get(const Eo *obj, int y);
/**
* @brief The set color to the given palette at the given index of the given
@@ -227,7 +227,7 @@ EOAPI Evas_Textgrid_Cell *evas_obj_textgrid_cellrow_get(const Eo *obj, int y);
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_palette_set(Eo *obj, Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_palette_set(Eo *obj, Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a);
/**
* @brief The retrieve color to the given palette at the given index of the
@@ -254,6 +254,6 @@ EOAPI void evas_obj_textgrid_palette_set(Eo *obj, Evas_Textgrid_Palette pal, int
*
* @ingroup Evas_Textgrid
*/
-EOAPI void evas_obj_textgrid_palette_get(const Eo *obj, Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a);
+EVAS_API EVAS_API_WEAK void evas_obj_textgrid_palette_get(const Eo *obj, Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a);
#endif
diff --git a/src/lib/evas/canvas/evas_textgrid_eo.legacy.c b/src/lib/evas/canvas/evas_textgrid_eo.legacy.c
index 8110d09e65..fea39c8d88 100644
--- a/src/lib/evas/canvas/evas_textgrid_eo.legacy.c
+++ b/src/lib/evas/canvas/evas_textgrid_eo.legacy.c
@@ -1,59 +1,59 @@
-EAPI void
+EVAS_API void
evas_object_textgrid_supported_font_styles_set(Evas_Textgrid *obj, Evas_Textgrid_Font_Style styles)
{
evas_obj_textgrid_supported_font_styles_set(obj, styles);
}
-EAPI Evas_Textgrid_Font_Style
+EVAS_API Evas_Textgrid_Font_Style
evas_object_textgrid_supported_font_styles_get(const Evas_Textgrid *obj)
{
return evas_obj_textgrid_supported_font_styles_get(obj);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_size_set(Evas_Textgrid *obj, int w, int h)
{
evas_obj_textgrid_grid_size_set(obj, w, h);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_size_get(const Evas_Textgrid *obj, int *w, int *h)
{
evas_obj_textgrid_grid_size_get(obj, w, h);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_cell_size_get(const Evas_Textgrid *obj, int *width, int *height)
{
evas_obj_textgrid_cell_size_get(obj, width, height);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_update_add(Evas_Textgrid *obj, int x, int y, int w, int h)
{
evas_obj_textgrid_update_add(obj, x, y, w, h);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_cellrow_set(Evas_Textgrid *obj, int y, const Evas_Textgrid_Cell *row)
{
evas_obj_textgrid_cellrow_set(obj, y, row);
}
-EAPI Evas_Textgrid_Cell *
+EVAS_API Evas_Textgrid_Cell *
evas_object_textgrid_cellrow_get(const Evas_Textgrid *obj, int y)
{
return evas_obj_textgrid_cellrow_get(obj, y);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_palette_set(Evas_Textgrid *obj, Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a)
{
evas_obj_textgrid_palette_set(obj, pal, idx, r, g, b, a);
}
-EAPI void
+EVAS_API void
evas_object_textgrid_palette_get(const Evas_Textgrid *obj, Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a)
{
evas_obj_textgrid_palette_get(obj, pal, idx, r, g, b, a);
diff --git a/src/lib/evas/canvas/evas_textgrid_eo.legacy.h b/src/lib/evas/canvas/evas_textgrid_eo.legacy.h
index 379747e095..4cc8d6f59d 100644
--- a/src/lib/evas/canvas/evas_textgrid_eo.legacy.h
+++ b/src/lib/evas/canvas/evas_textgrid_eo.legacy.h
@@ -56,7 +56,7 @@ typedef struct _Evas_Textgrid_Cell Evas_Textgrid_Cell;
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_supported_font_styles_set(Evas_Textgrid *obj, Evas_Textgrid_Font_Style styles);
+EVAS_API void evas_object_textgrid_supported_font_styles_set(Evas_Textgrid *obj, Evas_Textgrid_Font_Style styles);
/**
* @brief This function is not implemented yet, do not use.
@@ -67,7 +67,7 @@ EAPI void evas_object_textgrid_supported_font_styles_set(Evas_Textgrid *obj, Eva
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI Evas_Textgrid_Font_Style evas_object_textgrid_supported_font_styles_get(const Evas_Textgrid *obj);
+EVAS_API Evas_Textgrid_Font_Style evas_object_textgrid_supported_font_styles_get(const Evas_Textgrid *obj);
/**
* @brief Set the size of the textgrid object.
@@ -84,7 +84,7 @@ EAPI Evas_Textgrid_Font_Style evas_object_textgrid_supported_font_styles_get(con
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_size_set(Evas_Textgrid *obj, int w, int h);
+EVAS_API void evas_object_textgrid_size_set(Evas_Textgrid *obj, int w, int h);
/**
* @brief Get the size of the textgrid object.
@@ -101,7 +101,7 @@ EAPI void evas_object_textgrid_size_set(Evas_Textgrid *obj, int w, int h);
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_size_get(const Evas_Textgrid *obj, int *w, int *h);
+EVAS_API void evas_object_textgrid_size_get(const Evas_Textgrid *obj, int *w, int *h);
/**
* @brief Retrieve the size of a cell of the given textgrid object in pixels.
@@ -125,7 +125,7 @@ EAPI void evas_object_textgrid_size_get(const Evas_Textgrid *obj, int *w, int *h
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_cell_size_get(const Evas_Textgrid *obj, int *width, int *height);
+EVAS_API void evas_object_textgrid_cell_size_get(const Evas_Textgrid *obj, int *width, int *height);
/**
* @brief Indicate for evas that part of a textgrid region (cells) has been
@@ -148,7 +148,7 @@ EAPI void evas_object_textgrid_cell_size_get(const Evas_Textgrid *obj, int *widt
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_update_add(Evas_Textgrid *obj, int x, int y, int w, int h);
+EVAS_API void evas_object_textgrid_update_add(Evas_Textgrid *obj, int x, int y, int w, int h);
/**
* @brief Set the string at the given row of the given textgrid object.
@@ -169,7 +169,7 @@ EAPI void evas_object_textgrid_update_add(Evas_Textgrid *obj, int x, int y, int
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_cellrow_set(Evas_Textgrid *obj, int y, const Evas_Textgrid_Cell *row);
+EVAS_API void evas_object_textgrid_cellrow_set(Evas_Textgrid *obj, int y, const Evas_Textgrid_Cell *row);
/**
* @brief Get the string at the given row of the given textgrid object.
@@ -190,7 +190,7 @@ EAPI void evas_object_textgrid_cellrow_set(Evas_Textgrid *obj, int y, const Evas
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI Evas_Textgrid_Cell *evas_object_textgrid_cellrow_get(const Evas_Textgrid *obj, int y);
+EVAS_API Evas_Textgrid_Cell *evas_object_textgrid_cellrow_get(const Evas_Textgrid *obj, int y);
/**
* @brief The set color to the given palette at the given index of the given
@@ -220,7 +220,7 @@ EAPI Evas_Textgrid_Cell *evas_object_textgrid_cellrow_get(const Evas_Textgrid *o
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_palette_set(Evas_Textgrid *obj, Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a);
+EVAS_API void evas_object_textgrid_palette_set(Evas_Textgrid *obj, Evas_Textgrid_Palette pal, int idx, int r, int g, int b, int a);
/**
* @brief The retrieve color to the given palette at the given index of the
@@ -247,6 +247,6 @@ EAPI void evas_object_textgrid_palette_set(Evas_Textgrid *obj, Evas_Textgrid_Pal
*
* @ingroup Evas_Object_Textgrid_Group
*/
-EAPI void evas_object_textgrid_palette_get(const Evas_Textgrid *obj, Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a);
+EVAS_API void evas_object_textgrid_palette_get(const Evas_Textgrid *obj, Evas_Textgrid_Palette pal, int idx, int *r, int *g, int *b, int *a);
#endif
diff --git a/src/lib/evas/canvas/evas_touch_point.c b/src/lib/evas/canvas/evas_touch_point.c
index c266675a44..b2e866802a 100644
--- a/src/lib/evas/canvas/evas_touch_point.c
+++ b/src/lib/evas/canvas/evas_touch_point.c
@@ -53,7 +53,7 @@ _evas_touch_point_remove(Evas *eo_e, int id)
}
}
-EAPI unsigned int
+EVAS_API unsigned int
evas_touch_point_list_count(Eo *eo_e)
{
EVAS_LEGACY_API(eo_e, e, 0);
@@ -79,7 +79,7 @@ _evas_canvas_touch_point_list_nth_xy_get(Evas_Canvas *eo_e EINA_UNUSED,
if (y) *y = point->y;
}
-EAPI void
+EVAS_API void
evas_touch_point_list_nth_xy_get(Evas *eo_e, unsigned int n,
Evas_Coord *x, Evas_Coord *y)
{
@@ -91,7 +91,7 @@ evas_touch_point_list_nth_xy_get(Evas *eo_e, unsigned int n,
if (y) *y = Y;
}
-EAPI int
+EVAS_API int
evas_touch_point_list_nth_id_get(Evas *eo_e, unsigned int n)
{
Evas_Coord_Touch_Point *point;
@@ -102,7 +102,7 @@ evas_touch_point_list_nth_id_get(Evas *eo_e, unsigned int n)
else return point->id;
}
-EAPI Evas_Touch_Point_State
+EVAS_API Evas_Touch_Point_State
evas_touch_point_list_nth_state_get(Evas *eo_e, unsigned int n)
{
Evas_Coord_Touch_Point *point;
diff --git a/src/lib/evas/canvas/evas_vg_private.h b/src/lib/evas/canvas/evas_vg_private.h
index a6a27142ed..1cf4ccc80d 100644
--- a/src/lib/evas/canvas/evas_vg_private.h
+++ b/src/lib/evas/canvas/evas_vg_private.h
@@ -9,8 +9,6 @@ typedef struct _Efl_Canvas_Vg_Gradient_Data Efl_Canvas_Vg_Gradient_Data;
typedef struct _Efl_Canvas_Vg_Interpolation Efl_Canvas_Vg_Interpolation;
typedef struct _Efl_Canvas_Vg_Object_Data Efl_Canvas_Vg_Object_Data;
-typedef enum _Efl_Gfx_Vg_Value_Provider_Change_Flag Efl_Gfx_Vg_Value_Provider_Change_Flag;
-
typedef struct _Vg_Cache
{
Eina_Hash *vfd_hash;
@@ -37,6 +35,7 @@ typedef struct _Vg_User_Entry
{
int w; // current surface width
int h; // current surface height
+ Eina_Rect path_bounds;
Efl_VG *root;
} Vg_User_Entry;
@@ -53,8 +52,10 @@ struct _Efl_Canvas_Vg_Object_Data
double align_x, align_y;
Efl_Canvas_Vg_Fill_Mode fill_mode;
int frame_idx;
+ void *ckeys[2]; //cache keys for first, last frames if animation
Eina_Bool changed : 1;
+ Eina_Bool sync_render : 1;
};
struct _Efl_Canvas_Vg_Node_Data
@@ -130,16 +131,6 @@ struct _Efl_Canvas_Vg_Interpolation
Eina_Point_3D skew;
};
-enum _Efl_Gfx_Vg_Value_Provider_Change_Flag
-{
- EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_NONE = 0,
- EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_FILL_COLOR = 2,
- EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_STROKE_COLOR = 4,
- EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_STROKE_WIDTH = 8,
- EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_TRANSFORM_MATRIX = 16
-};
-Efl_Gfx_Vg_Value_Provider_Change_Flag efl_gfx_vg_value_provider_changed_flag_get(Eo *obj);
-
void evas_cache_vg_init(void);
void evas_cache_vg_shutdown(void);
Vg_Cache_Entry* evas_cache_vg_entry_resize(Vg_Cache_Entry *entry, int w, int h);
@@ -147,14 +138,18 @@ Vg_Cache_Entry* evas_cache_vg_entry_create(Evas *evas, const Eina_Fi
Efl_VG* evas_cache_vg_tree_get(Vg_Cache_Entry *vg_entry, unsigned int frame_num);
void evas_cache_vg_entry_value_provider_update(Vg_Cache_Entry *vg_entry, Eina_List *vp_list);
void evas_cache_vg_entry_del(Vg_Cache_Entry *vg_entry);
-Vg_File_Data * evas_cache_vg_file_open(const Eina_File *file, const char *key, Evas *e);
+Vg_File_Data * evas_cache_vg_file_open(const Eina_File *file, const char *key, Evas *e, Eina_Bool shareable);
Eina_Bool evas_cache_vg_file_save(Efl_VG *root, int w, int h, const char *file, const char *key, const Efl_File_Save_Info *info);
Eina_Bool evas_cache_vg_entry_file_save(Vg_Cache_Entry *vg_entry, const char *file, const char *key, const Efl_File_Save_Info *info);
double evas_cache_vg_anim_duration_get(const Vg_Cache_Entry *vg_entry);
Eina_Bool evas_cache_vg_anim_sector_set(const Vg_Cache_Entry* vg_entry, const char *name, int startframe, int endframe);
Eina_Bool evas_cache_vg_anim_sector_get(const Vg_Cache_Entry* vg_entry, const char *name, int* startframe, int* endframe);
+Eina_Inarray* evas_cache_vg_anim_sector_list_get(const Vg_Cache_Entry* vg_entry);
unsigned int evas_cache_vg_anim_frame_count_get(const Vg_Cache_Entry *vg_entry);
Eina_Size2D evas_cache_vg_entry_default_size_get(const Vg_Cache_Entry *vg_entry);
+Eina_Position2D evas_cache_vg_entry_default_position_get(const Vg_Cache_Entry *vg_entry);
+Eina_Size2D evas_cache_vg_entry_default_min_size_get(const Vg_Cache_Entry *vg_entry);
+void evas_cache_vg_entry_wrap_mode_set(const Vg_Cache_Entry *vg_entry, Eina_Bool wrap_mode);
void * evas_cache_vg_surface_key_get(Efl_Canvas_Vg_Node *root, int w, int h, int frame_idx);
void efl_canvas_vg_node_vg_obj_set(Efl_VG *node, Efl_VG *vg_obj, Efl_Canvas_Vg_Object_Data *vd);
void efl_canvas_vg_node_change(Efl_VG *node);
@@ -164,7 +159,7 @@ void efl_canvas_vg_container_blend_buffer_clear(Efl_VG *o
static inline void
efl_canvas_vg_object_change(Efl_Canvas_Vg_Object_Data *vd)
{
- if (!vd || vd->changed) return;
+ if (!vd || (vd->changed && vd->obj->changed)) return;
vd->changed = EINA_TRUE;
evas_object_change(vd->obj->object, vd->obj);
}
diff --git a/src/lib/evas/canvas/meson.build b/src/lib/evas/canvas/meson.build
index 196b3962bb..09320e690d 100644
--- a/src/lib/evas/canvas/meson.build
+++ b/src/lib/evas/canvas/meson.build
@@ -2,23 +2,9 @@
pub_eo_files = [
'efl_canvas_polygon.eo',
'efl_canvas_image_internal.eo',
- 'evas_canvas3d_camera.eo',
- 'evas_canvas3d_texture.eo',
- 'evas_canvas3d_material.eo',
- 'evas_canvas3d_light.eo',
- 'evas_canvas3d_mesh.eo',
- 'evas_canvas3d_primitive.eo',
- 'evas_canvas3d_node.eo',
- 'evas_canvas3d_scene.eo',
- 'evas_canvas3d_object.eo',
'efl_canvas_image.eo',
'efl_canvas_snapshot.eo',
'efl_canvas_proxy.eo',
- 'efl_canvas_scene3d.eo',
- 'efl_canvas_surface.eo',
- 'efl_canvas_surface_tbm.eo',
- 'efl_canvas_surface_x11.eo',
- 'efl_canvas_surface_wayland.eo',
'efl_canvas_filter_internal.eo',
'efl_input_state.eo',
'efl_input_interface.eo',
@@ -32,13 +18,13 @@ pub_eo_files = [
'efl_canvas_pointer.eo',
'efl_canvas_scene.eo',
'efl_canvas_animation.eo',
- 'efl_canvas_animation_alpha.eo',
- 'efl_canvas_animation_rotate.eo',
- 'efl_canvas_animation_scale.eo',
- 'efl_canvas_animation_translate.eo',
- 'efl_canvas_animation_group.eo',
- 'efl_canvas_animation_group_parallel.eo',
- 'efl_canvas_animation_group_sequential.eo',
+ 'efl_canvas_alpha_animation.eo',
+ 'efl_canvas_rotate_animation.eo',
+ 'efl_canvas_scale_animation.eo',
+ 'efl_canvas_translate_animation.eo',
+ 'efl_canvas_group_animation.eo',
+ 'efl_canvas_parallel_group_animation.eo',
+ 'efl_canvas_sequential_group_animation.eo',
'efl_canvas_textblock_factory.eo',
'efl_canvas_rectangle.eo',
'efl_canvas_object.eo',
@@ -54,12 +40,32 @@ pub_eo_files = [
'efl_canvas_group.eo',
'efl_gfx_mapping.eo',
'efl_canvas_event_grabber.eo',
- 'efl_text_cursor.eo',
+ 'efl_text_cursor_object.eo',
'efl_canvas_textblock.eo',
'efl_text_formatter.eo',
'efl_canvas_object_animation.eo',
]
+priv_eo_files = [
+ 'efl_canvas_surface.eo',
+ 'efl_canvas_surface_tbm.eo',
+ 'efl_canvas_surface_x11.eo',
+ 'efl_canvas_surface_wayland.eo',
+]
+
+foreach eo_file : priv_eo_files
+ priv_eo_file_target += custom_target('eolian_gen_' + eo_file,
+ input : eo_file,
+ output : [eo_file + '.h'],
+ depfile : eo_file + '.d',
+ command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
+ '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
+ '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
+ '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
+ '-gchd', '@INPUT@'])
+endforeach
+
evas_canvas_eo_files = pub_eo_files
pub_evas_eo_files += files(pub_eo_files)
@@ -75,12 +81,12 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-gchd', '@INPUT@'])
endforeach
pub_eo_types_files = [
- 'evas_canvas3d_types.eot',
'efl_canvas_animation_types.eot',
'efl_input_types.eot',
]
@@ -97,6 +103,7 @@ foreach eo_file : pub_eo_types_files
command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-ghd', '@INPUT@'])
endforeach
@@ -111,6 +118,7 @@ evas_legacy_h = files([
'efl_canvas_vg_node_eo.legacy.h',
'efl_canvas_vg_object_eo.legacy.h',
'efl_canvas_vg_shape_eo.legacy.h',
+ 'efl_canvas_vg_gradient_eo.legacy.h',
'evas_box_eo.legacy.h',
'evas_canvas_eo.legacy.h',
'evas_grid_eo.legacy.h',
@@ -165,7 +173,6 @@ evas_src += files([
'efl_canvas_event_grabber.c',
'efl_canvas_proxy.c',
'efl_canvas_snapshot.c',
- 'efl_canvas_scene3d.c',
'efl_canvas_surface.c',
'efl_canvas_surface_tbm.c',
'efl_canvas_surface_x11.c',
@@ -179,13 +186,13 @@ evas_src += files([
'efl_input_clickable.c',
'efl_input_device.c',
'efl_canvas_animation.c',
- 'efl_canvas_animation_alpha.c',
- 'efl_canvas_animation_rotate.c',
- 'efl_canvas_animation_scale.c',
- 'efl_canvas_animation_translate.c',
- 'efl_canvas_animation_group.c',
- 'efl_canvas_animation_group_parallel.c',
- 'efl_canvas_animation_group_sequential.c',
+ 'efl_canvas_alpha_animation.c',
+ 'efl_canvas_rotate_animation.c',
+ 'efl_canvas_scale_animation.c',
+ 'efl_canvas_translate_animation.c',
+ 'efl_canvas_group_animation.c',
+ 'efl_canvas_parallel_group_animation.c',
+ 'efl_canvas_sequential_group_animation.c',
'efl_gfx_vg_value_provider.c',
'efl_canvas_vg_object.c',
'efl_canvas_vg_node.c',
@@ -197,19 +204,8 @@ evas_src += files([
'efl_canvas_vg_shape.c',
'efl_canvas_vg_image.c',
'evas_filter_mixin.c',
- 'evas_canvas3d_object.c',
- 'evas_canvas3d_scene.c',
- 'evas_canvas3d_node.c',
- 'evas_canvas3d_camera.c',
- 'evas_canvas3d_light.c',
- 'evas_canvas3d_mesh.c',
- 'evas_canvas3d_texture.c',
- 'evas_canvas3d_material.c',
- 'evas_canvas3d_primitive.c',
- 'evas_canvas3d_node_callback.h',
- 'evas_canvas3d_eet.c',
'efl_canvas_object_animation.c',
- 'efl_text_cursor.c',
+ 'efl_text_cursor_object.c',
'efl_text_formatter.c'
])
diff --git a/src/lib/evas/common/evas_blend.h b/src/lib/evas/common/evas_blend.h
index 1a98f3f550..f8aba7269f 100644
--- a/src/lib/evas/common/evas_blend.h
+++ b/src/lib/evas/common/evas_blend.h
@@ -2,7 +2,7 @@
#define _EVAS_BLEND_H
-EAPI void evas_common_blend_init (void);
+EVAS_API void evas_common_blend_init (void);
#endif /* _EVAS_BLEND_H */
diff --git a/src/lib/evas/common/evas_blend_main.c b/src/lib/evas/common/evas_blend_main.c
index ebac8f35b5..ce9e6bb38e 100644
--- a/src/lib/evas/common/evas_blend_main.c
+++ b/src/lib/evas/common/evas_blend_main.c
@@ -64,7 +64,7 @@ evas_gfx_compositor_get(unsigned char op)
return comp;
}
-EAPI void
+EVAS_API void
evas_common_blend_init(void)
{
static int gfx_initialised = 0;
diff --git a/src/lib/evas/common/evas_blit_main.c b/src/lib/evas/common/evas_blit_main.c
index afeea86f8b..2457716b47 100644
--- a/src/lib/evas/common/evas_blit_main.c
+++ b/src/lib/evas/common/evas_blit_main.c
@@ -26,12 +26,12 @@ static void evas_common_copy_pixels_rev_sse/*NB*/ (DATA32 *src, DATA32 *dst, int
static void evas_common_copy_rev_pixels_c (DATA32 *src, DATA32 *dst, int len);
-EAPI void
+EVAS_API void
evas_common_blit_init(void)
{
}
-EAPI void
+EVAS_API void
evas_common_blit_rectangle(const RGBA_Image *src, RGBA_Image *dst, int src_x, int src_y, int w, int h, int dst_x, int dst_y)
{
int y;
@@ -254,10 +254,10 @@ evas_common_copy_pixels_mmx(DATA32 *src, DATA32 *dst, int len)
#ifdef ALIGN_FIX
intptr_t src_align;
intptr_t dst_align;
-
+
src_align = (intptr_t)src & 0x3f; /* 64 byte alignment */
dst_align = (intptr_t)dst & 0x3f; /* 64 byte alignment */
-
+
if ((src_align != dst_align) ||
((src_align & 0x3) != 0))
{
diff --git a/src/lib/evas/common/evas_common_generic_cache.c b/src/lib/evas/common/evas_common_generic_cache.c
index ddb055deb2..db979de552 100644
--- a/src/lib/evas/common/evas_common_generic_cache.c
+++ b/src/lib/evas/common/evas_common_generic_cache.c
@@ -1,6 +1,6 @@
#include "evas_common_private.h"
-EAPI Generic_Cache*
+EVAS_API Generic_Cache*
generic_cache_new(void *user_data, Generic_Cache_Free func)
{
Generic_Cache *cache;
@@ -11,14 +11,23 @@ generic_cache_new(void *user_data, Generic_Cache_Free func)
return cache;
}
-EAPI void
+EVAS_API void
generic_cache_destroy(Generic_Cache *cache)
{
- generic_cache_dump(cache);
- eina_hash_free(cache->hash);
+ Generic_Cache_Entry *entry;
+ if (cache)
+ {
+ EINA_LIST_FREE(cache->lru_list, entry)
+ {
+ free(entry);
+ }
+
+ eina_hash_free(cache->hash);
+ free(cache);
+ }
}
-EAPI void
+EVAS_API void
generic_cache_dump(Generic_Cache *cache)
{
Generic_Cache_Entry *entry;
@@ -33,7 +42,7 @@ generic_cache_dump(Generic_Cache *cache)
}
}
-EAPI void
+EVAS_API void
generic_cache_data_set(Generic_Cache *cache, void *key, void *surface)
{
Generic_Cache_Entry *entry = NULL;
@@ -58,7 +67,7 @@ generic_cache_data_set(Generic_Cache *cache, void *key, void *surface)
}
}
-EAPI void *
+EVAS_API void *
generic_cache_data_get(Generic_Cache *cache, void *key)
{
Generic_Cache_Entry *entry = NULL, *lru_data;
@@ -83,7 +92,7 @@ generic_cache_data_get(Generic_Cache *cache, void *key)
return NULL;
}
-EAPI void
+EVAS_API void
generic_cache_data_drop(Generic_Cache *cache, void *key)
{
Generic_Cache_Entry *entry = NULL;
diff --git a/src/lib/evas/common/evas_convert_color.c b/src/lib/evas/common/evas_convert_color.c
index 548c8c5d50..5ac168c050 100644
--- a/src/lib/evas/common/evas_convert_color.c
+++ b/src/lib/evas/common/evas_convert_color.c
@@ -2,7 +2,7 @@
#include "evas_convert_color.h"
#include "draw.h"
-EAPI DATA32
+EVAS_API DATA32
evas_common_convert_ag_premul(DATA16 *data, unsigned int len)
{
DATA16 *de = data + len;
@@ -23,7 +23,7 @@ evas_common_convert_ag_premul(DATA16 *data, unsigned int len)
return nas;
}
-EAPI void
+EVAS_API void
evas_common_convert_ag_unpremul(DATA16 *data, unsigned int len)
{
DATA16 *de = data + len;
@@ -51,19 +51,19 @@ evas_common_convert_ag_unpremul(DATA16 *data, unsigned int len)
}
}
-EAPI DATA32
+EVAS_API DATA32
evas_common_convert_argb_premul(DATA32 *data, unsigned int len)
{
return (DATA32) efl_draw_argb_premul(data, len);
}
-EAPI void
+EVAS_API void
evas_common_convert_argb_unpremul(DATA32 *data, unsigned int len)
{
return efl_draw_argb_unpremul(data, len);
}
-EAPI void
+EVAS_API void
evas_common_convert_color_argb_premul(int a, int *r, int *g, int *b)
{
a++;
@@ -72,7 +72,7 @@ evas_common_convert_color_argb_premul(int a, int *r, int *g, int *b)
if (b) { *b = (a * *b) >> 8; }
}
-EAPI void
+EVAS_API void
evas_common_convert_color_argb_unpremul(int a, int *r, int *g, int *b)
{
if (!a) return;
@@ -81,7 +81,7 @@ evas_common_convert_color_argb_unpremul(int a, int *r, int *g, int *b)
if (b) { *b = (255 * *b) / a; }
}
-EAPI void
+EVAS_API void
evas_common_convert_color_hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b)
{
int i;
@@ -139,7 +139,7 @@ evas_common_convert_color_hsv_to_rgb(float h, float s, float v, int *r, int *g,
}
}
-EAPI void
+EVAS_API void
evas_common_convert_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v)
{
int max, min, d = r - g;
@@ -194,7 +194,7 @@ evas_common_convert_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, fl
}
}
-EAPI void
+EVAS_API void
evas_common_convert_color_hsv_to_rgb_int(int h, int s, int v, int *r, int *g, int *b)
{
int i, f;
@@ -234,7 +234,7 @@ evas_common_convert_color_hsv_to_rgb_int(int h, int s, int v, int *r, int *g, in
}
}
-EAPI void
+EVAS_API void
evas_common_convert_color_rgb_to_hsv_int(int r, int g, int b, int *h, int *s, int *v)
{
int min, max, d = r - g;
diff --git a/src/lib/evas/common/evas_convert_color.h b/src/lib/evas/common/evas_convert_color.h
index 54bd59e138..ce139e5837 100644
--- a/src/lib/evas/common/evas_convert_color.h
+++ b/src/lib/evas/common/evas_convert_color.h
@@ -2,17 +2,17 @@
#define _EVAS_CONVERT_COLOR_H
-EAPI DATA32 evas_common_convert_ag_premul (DATA16 *data, unsigned int len);
-EAPI void evas_common_convert_ag_unpremul (DATA16 *data, unsigned int len);
-EAPI DATA32 evas_common_convert_argb_premul (DATA32 *src, unsigned int len);
-EAPI void evas_common_convert_argb_unpremul (DATA32 *src, unsigned int len);
-EAPI void evas_common_convert_color_argb_premul (int a, int *r, int *g, int *b);
-EAPI void evas_common_convert_color_argb_unpremul (int a, int *r, int *g, int *b);
+EVAS_API DATA32 evas_common_convert_ag_premul (DATA16 *data, unsigned int len);
+EVAS_API void evas_common_convert_ag_unpremul (DATA16 *data, unsigned int len);
+EVAS_API DATA32 evas_common_convert_argb_premul (DATA32 *src, unsigned int len);
+EVAS_API void evas_common_convert_argb_unpremul (DATA32 *src, unsigned int len);
+EVAS_API void evas_common_convert_color_argb_premul (int a, int *r, int *g, int *b);
+EVAS_API void evas_common_convert_color_argb_unpremul (int a, int *r, int *g, int *b);
-EAPI void evas_common_convert_color_hsv_to_rgb (float h, float s, float v, int *r, int *g, int *b);
-EAPI void evas_common_convert_color_rgb_to_hsv (int r, int g, int b, float *h, float *s, float *v);
-EAPI void evas_common_convert_color_hsv_to_rgb_int (int h, int s, int v, int *r, int *g, int *b);
-EAPI void evas_common_convert_color_rgb_to_hsv_int (int r, int g, int b, int *h, int *s, int *v);
+EVAS_API void evas_common_convert_color_hsv_to_rgb (float h, float s, float v, int *r, int *g, int *b);
+EVAS_API void evas_common_convert_color_rgb_to_hsv (int r, int g, int b, float *h, float *s, float *v);
+EVAS_API void evas_common_convert_color_hsv_to_rgb_int (int h, int s, int v, int *r, int *g, int *b);
+EVAS_API void evas_common_convert_color_rgb_to_hsv_int (int r, int g, int b, int *h, int *s, int *v);
#endif /* _EVAS_CONVERT_COLOR_H */
diff --git a/src/lib/evas/common/evas_convert_colorspace.c b/src/lib/evas/common/evas_convert_colorspace.c
index afbac8f884..229b307abc 100644
--- a/src/lib/evas/common/evas_convert_colorspace.c
+++ b/src/lib/evas/common/evas_convert_colorspace.c
@@ -27,6 +27,7 @@ evas_common_convert_rgb565_a5p_to_argb8888(void *data, int w, int h, int stride,
src = data;
end = src + (stride * h);
ret = malloc(w * h * sizeof(DATA32));
+ if (!ret) return NULL;
dst = ret;
if (has_alpha)
@@ -55,6 +56,7 @@ evas_common_convert_agry88_to_argb8888(const void *data, int w, int h, int strid
src = data;
end = src + ((stride >> 1) * h);
ret = malloc(w * h * sizeof(DATA32));
+ if (!ret) return NULL;
dst = ret;
if (has_alpha)
@@ -97,6 +99,7 @@ evas_common_convert_gry8_to_argb8888(const void *data, int w, int h, int stride,
src = data;
end = src + (stride * h);
ret = malloc(w * h * sizeof(DATA32));
+ if (!ret) return NULL;
dst = ret;
if (has_alpha)
@@ -152,7 +155,7 @@ evas_common_convert_argb8888_to_a8(void *data, int w, int h, int stride, Eina_Bo
return ret;
}
-EAPI void *
+EVAS_API void *
evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace)
{
switch (cspace)
@@ -167,7 +170,7 @@ evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Eina_Bool
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace)
{
switch (cspace)
@@ -180,7 +183,7 @@ evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Eina_Boo
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_common_convert_yuv_422_601_to(void *data, int w, int h, Evas_Colorspace cspace)
{
switch (cspace)
@@ -201,7 +204,7 @@ evas_common_convert_yuv_422_601_to(void *data, int w, int h, Evas_Colorspace csp
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_common_convert_yuv_422P_601_to(void *data, int w, int h, Evas_Colorspace cspace)
{
switch (cspace)
@@ -222,7 +225,7 @@ evas_common_convert_yuv_422P_601_to(void *data, int w, int h, Evas_Colorspace cs
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_common_convert_yuv_420_601_to(void *data, int w, int h, Evas_Colorspace cspace)
{
switch (cspace)
@@ -243,7 +246,7 @@ evas_common_convert_yuv_420_601_to(void *data, int w, int h, Evas_Colorspace csp
return NULL;
}
-EAPI void *
+EVAS_API void *
evas_common_convert_yuv_420T_601_to(void *data, int w, int h, Evas_Colorspace cspace)
{
switch (cspace)
diff --git a/src/lib/evas/common/evas_convert_colorspace.h b/src/lib/evas/common/evas_convert_colorspace.h
index 51a94f9aeb..c1f2854077 100644
--- a/src/lib/evas/common/evas_convert_colorspace.h
+++ b/src/lib/evas/common/evas_convert_colorspace.h
@@ -2,12 +2,12 @@
#define _EVAS_CONVERT_COLORSPACE_H
-EAPI void *evas_common_convert_argb8888_to (void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
-EAPI void *evas_common_convert_rgb565_a5p_to (void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
-EAPI void *evas_common_convert_yuv_422P_601_to(void *data, int w, int h, Evas_Colorspace cspace);
-EAPI void *evas_common_convert_yuv_422_601_to (void *data, int w, int h, Evas_Colorspace cspace);
-EAPI void *evas_common_convert_yuv_420_601_to (void *data, int w, int h, Evas_Colorspace cspace);
-EAPI void *evas_common_convert_yuv_420T_601_to(void *data, int w, int h, Evas_Colorspace cspace);
+EVAS_API void *evas_common_convert_argb8888_to (void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
+EVAS_API void *evas_common_convert_rgb565_a5p_to (void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
+EVAS_API void *evas_common_convert_yuv_422P_601_to(void *data, int w, int h, Evas_Colorspace cspace);
+EVAS_API void *evas_common_convert_yuv_422_601_to (void *data, int w, int h, Evas_Colorspace cspace);
+EVAS_API void *evas_common_convert_yuv_420_601_to (void *data, int w, int h, Evas_Colorspace cspace);
+EVAS_API void *evas_common_convert_yuv_420T_601_to(void *data, int w, int h, Evas_Colorspace cspace);
void *evas_common_convert_agry88_to(const void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
void *evas_common_convert_gry8_to(const void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
diff --git a/src/lib/evas/common/evas_convert_gry_8.c b/src/lib/evas/common/evas_convert_gry_8.c
index 30993ce498..bef3b39de0 100644
--- a/src/lib/evas/common/evas_convert_gry_8.c
+++ b/src/lib/evas/common/evas_convert_gry_8.c
@@ -25,7 +25,7 @@ void evas_common_convert_rgba_to_8bpp_gry_256_dith (DATA32 *src, DATA8 *dst,
b = (B_VAL(src_ptr));
// Y = 0.299 * R + 0.587 * G + 0.114 * B;
- gry8 = ((r * 19595) + (g * 38469) + (b * 7471)) >> 16;
+ gry8 = ((r * 19596) + (g * 38470) + (b * 7472)) >> 16;
*dst_ptr = gry8;
@@ -54,7 +54,7 @@ void evas_common_convert_rgba_to_8bpp_gry_16_dith (DATA32 *src, DATA8 *dst,
b = (B_VAL(src_ptr));
// Y = 0.299 * R + 0.587 * G + 0.114 * B;
- gry8 = ((r * 19595) + (g * 38469) + (b * 7471)) >> 16;
+ gry8 = ((r * 19596) + (g * 38470) + (b * 7472)) >> 16;
if (((gry8 - gry8 * 255 / 4) >= dith) && (gry8 < 0x07)) gry8++;
diff --git a/src/lib/evas/common/evas_convert_grypal_6.c b/src/lib/evas/common/evas_convert_grypal_6.c
index 920fcfdf26..b3cf705f80 100644
--- a/src/lib/evas/common/evas_convert_grypal_6.c
+++ b/src/lib/evas/common/evas_convert_grypal_6.c
@@ -12,8 +12,8 @@ void evas_common_convert_rgba_to_8bpp_pal_gray64(DATA32 *src, DATA8 *dst, int sr
CONVERT_LOOP_START_ROT_0();
/* RGB -> YUV conversion */
- Y = ((R_VAL(src_ptr) * 76) +
- (G_VAL(src_ptr) * 151) +
+ Y = ((R_VAL(src_ptr) * 76) +
+ (G_VAL(src_ptr) * 151) +
(B_VAL(src_ptr) * 29)) >> 10;
*dst_ptr = pal[Y];
diff --git a/src/lib/evas/common/evas_convert_main.c b/src/lib/evas/common/evas_convert_main.c
index c9b4363fe8..509dee4b46 100644
--- a/src/lib/evas/common/evas_convert_main.c
+++ b/src/lib/evas/common/evas_convert_main.c
@@ -151,12 +151,12 @@ const DATA8 _evas_dither_128128[128][128] =
};
#endif /* USE_DITHER_128128 */
-EAPI void
+EVAS_API void
evas_common_convert_init(void)
{
}
-EAPI Gfx_Func_Convert
+EVAS_API Gfx_Func_Convert
evas_common_convert_func_get(DATA8 *dest, int w, int h EINA_UNUSED, int depth, DATA32 rmask, DATA32 gmask, DATA32 bmask, Convert_Pal_Mode pal_mode, int rotation)
{
if ((rmask == 0) && (gmask == 0) && (bmask == 0))
diff --git a/src/lib/evas/common/evas_convert_main.h b/src/lib/evas/common/evas_convert_main.h
index 51c2cc888f..03f0c85e8e 100644
--- a/src/lib/evas/common/evas_convert_main.h
+++ b/src/lib/evas/common/evas_convert_main.h
@@ -2,8 +2,8 @@
#define _EVAS_CONVERT_MAIN_H
-EAPI void evas_common_convert_init (void);
-EAPI Gfx_Func_Convert evas_common_convert_func_get (DATA8 *dest, int w, int h, int depth, DATA32 rmask, DATA32 gmask, DATA32 bmask, Convert_Pal_Mode pal_mode, int rotation);
+EVAS_API void evas_common_convert_init (void);
+EVAS_API Gfx_Func_Convert evas_common_convert_func_get (DATA8 *dest, int w, int h, int depth, DATA32 rmask, DATA32 gmask, DATA32 bmask, Convert_Pal_Mode pal_mode, int rotation);
#endif /* _EVAS_CONVERT_MAIN_H */
diff --git a/src/lib/evas/common/evas_convert_rgb_16.c b/src/lib/evas/common/evas_convert_rgb_16.c
index 1a98d7d52e..167ea5e86a 100644
--- a/src/lib/evas/common/evas_convert_rgb_16.c
+++ b/src/lib/evas/common/evas_convert_rgb_16.c
@@ -79,7 +79,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int sr
for (x = 0; x < w; x++)
{
DATA32 p = *src++, q = *src++;
-
+
dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK];
dith2 = dith >> DM_SHF(6);
dith >>= DM_SHF(5);
@@ -89,7 +89,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int sr
if ((r1 < 0x1f) && ((((p & 0xff0000) >> 16) - (r1 << 3)) >= dith )) r1++;
if ((g1 < 0x3f) && ((((p & 0xff00) >> 8) - (g1 << 2)) >= dith2)) g1++;
if ((b1 < 0x1f) && (((p & 0xff) - (b1 << 3)) >= dith )) b1++;
-
+
x++;
dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK];
dith2 = dith >> DM_SHF(6);
@@ -100,7 +100,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int sr
if ((r2 < 0x1f) && ((((q & 0xff0000) >> 16) - (r2 << 3)) >= dith )) r2++;
if ((g2 < 0x3f) && ((((q & 0xff00) >> 8) - (g2 << 2)) >= dith2)) g2++;
if ((b2 < 0x1f) && (((q & 0xff) - (b2 << 3)) >= dith )) b2++;
-
+
#ifndef WORDS_BIGENDIAN
*((DATA32 *)d) = (r2 << 27) | (g2 << 21) | (b2 << 16) |
(r1 << 11) | (g1 << 5) | (b1);
@@ -113,7 +113,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int sr
src += src_jump;
d += dst_jump;
}
-#endif
+#endif
#else
DATA16 *d = (DATA16 *)dst;
int w0 = w;
@@ -159,7 +159,7 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src
for (x = 0; x < w; x++)
{
DATA32 p = *src++;
-
+
r = (p & 0xff0000) >> 19;
if (r > 0x1f) r = 0x1f;
g = (p & 0xff00) >> 10;
@@ -182,13 +182,13 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src
src += src_jump;
d += dst_jump;
}
-#else
+#else
for (y = 0; y < h; y++)
{
for (x = 0; x < w; x++)
{
DATA32 p = *src++;
-
+
dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK];
dith2 = dith >> DM_SHF(6);
dith >>= DM_SHF(5);
@@ -198,13 +198,13 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src
if ((r < 0x1f) && ((((p & 0xff0000) >> 16) - (r << 3)) >= dith )) r++;
if ((g < 0x3f) && ((((p & 0xff00) >> 8) - (g << 2)) >= dith2)) g++;
if ((b < 0x1f) && (((p & 0xff) - (b << 3)) >= dith )) b++;
-
+
*d++ = (r << 11) | (g << 5) | b;
}
src += src_jump;
d += dst_jump;
}
-#endif
+#endif
#else
DATA16 *d = (DATA16 *)dst;
int w0 = w;
diff --git a/src/lib/evas/common/evas_convert_rgb_24.c b/src/lib/evas/common/evas_convert_rgb_24.c
index 8849354cdd..b5abbcb6d0 100644
--- a/src/lib/evas/common/evas_convert_rgb_24.c
+++ b/src/lib/evas/common/evas_convert_rgb_24.c
@@ -43,7 +43,7 @@ evas_common_convert_rgba_to_24bpp_rgb_666(DATA32 *src, DATA8 *dst, int src_jump,
{
for (x = 0; x < w; x++)
{
- scratch =
+ scratch =
(((R_VAL(src_ptr) << 12) | (B_VAL(src_ptr) >> 2)) & 0x03f03f) |
((G_VAL(src_ptr) << 4) & 0x000fc0);
dst_ptr[0] = scratch_ptr[1];
diff --git a/src/lib/evas/common/evas_convert_rgb_24.h b/src/lib/evas/common/evas_convert_rgb_24.h
index bc114cad9d..27bd71917a 100644
--- a/src/lib/evas/common/evas_convert_rgb_24.h
+++ b/src/lib/evas/common/evas_convert_rgb_24.h
@@ -6,5 +6,5 @@ void evas_common_convert_rgba_to_24bpp_rgb_888 (DATA32 *src, DAT
void evas_common_convert_rgba_to_24bpp_bgr_888 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_24bpp_rgb_666 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
-
+
#endif /* _EVAS_CONVERT_RGB_24_H */
diff --git a/src/lib/evas/common/evas_convert_yuv.h b/src/lib/evas/common/evas_convert_yuv.h
index 1cadf2b1a3..3f59a28b2d 100644
--- a/src/lib/evas/common/evas_convert_yuv.h
+++ b/src/lib/evas/common/evas_convert_yuv.h
@@ -1,11 +1,11 @@
#ifndef _EVAS_CONVERT_YUV_H
#define _EVAS_CONVERT_YUV_H
-EAPI void evas_common_convert_yuv_422p_709_rgba (DATA8 **src, DATA8 *dst, int w, int h);
+EVAS_API void evas_common_convert_yuv_422p_709_rgba (DATA8 **src, DATA8 *dst, int w, int h);
-EAPI void evas_common_convert_yuv_422p_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
-EAPI void evas_common_convert_yuv_422_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
-EAPI void evas_common_convert_yuv_420_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
-EAPI void evas_common_convert_yuv_420T_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
+EVAS_API void evas_common_convert_yuv_422p_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
+EVAS_API void evas_common_convert_yuv_422_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
+EVAS_API void evas_common_convert_yuv_420_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
+EVAS_API void evas_common_convert_yuv_420T_601_rgba (DATA8 **src, DATA8 *dst, int w, int h);
#endif /* _EVAS_CONVERT_YUV_H */
diff --git a/src/lib/evas/common/evas_cpu.c b/src/lib/evas/common/evas_cpu.c
index a91ffe6930..b44cbc69f6 100644
--- a/src/lib/evas/common/evas_cpu.c
+++ b/src/lib/evas/common/evas_cpu.c
@@ -9,7 +9,7 @@ _cpu_check(Eina_Cpu_Features f)
return (features & f) == f;
}
-EAPI void
+EVAS_API void
evas_common_cpu_init(void)
{
static int called = 0;
@@ -79,7 +79,7 @@ evas_common_cpu_have_cpuid(void)
return 0;
}
-EAPI void
+EVAS_API void
evas_common_cpu_can_do(int *mmx, int *sse, int *sse2)
{
static int do_mmx = 0, do_sse = 0, do_sse2 = 0, done = 0;
@@ -98,7 +98,7 @@ evas_common_cpu_can_do(int *mmx, int *sse, int *sse2)
}
#ifdef BUILD_MMX
-EAPI void
+EVAS_API void
evas_common_cpu_end_opt(void)
{
if (cpu_feature_mask & (CPU_FEATURE_MMX | CPU_FEATURE_MMX2))
@@ -107,7 +107,7 @@ evas_common_cpu_end_opt(void)
}
}
#else
-EAPI void
+EVAS_API void
evas_common_cpu_end_opt(void)
{
}
diff --git a/src/lib/evas/common/evas_draw.h b/src/lib/evas/common/evas_draw.h
index e045a186ce..2906d6a895 100644
--- a/src/lib/evas/common/evas_draw.h
+++ b/src/lib/evas/common/evas_draw.h
@@ -2,12 +2,12 @@
#define _EVAS_DRAW_H
-EAPI void evas_common_draw_init (void);
+EVAS_API void evas_common_draw_init (void);
-EAPI RGBA_Draw_Context *evas_common_draw_context_new (void);
-EAPI RGBA_Draw_Context *evas_common_draw_context_dup (RGBA_Draw_Context *dc);
-EAPI void evas_common_draw_context_free (RGBA_Draw_Context *dc);
-EAPI void evas_common_draw_context_font_ext_set (RGBA_Draw_Context *dc,
+EVAS_API RGBA_Draw_Context *evas_common_draw_context_new (void);
+EVAS_API RGBA_Draw_Context *evas_common_draw_context_dup (RGBA_Draw_Context *dc);
+EVAS_API void evas_common_draw_context_free (RGBA_Draw_Context *dc);
+EVAS_API void evas_common_draw_context_font_ext_set (RGBA_Draw_Context *dc,
void *data,
void *(*gl_new) (void *data, RGBA_Font_Glyph *fg),
void (*gl_free) (void *ext_dat),
@@ -15,24 +15,24 @@ EAPI void evas_common_draw_context_font_ext_set (RGBA_D
void *(*gl_image_new) (void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace),
void (*gl_image_free) (void *image),
void (*gl_image_draw) (void *gc, void *im, int dx, int dy, int dw, int dh, int smooth));
-EAPI void evas_common_draw_context_clip_clip (RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void evas_common_draw_context_set_clip (RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void evas_common_draw_context_unset_clip (RGBA_Draw_Context *dc);
-EAPI void evas_common_draw_context_set_color (RGBA_Draw_Context *dc, int r, int g, int b, int a);
-EAPI void evas_common_draw_context_set_multiplier (RGBA_Draw_Context *dc, int r, int g, int b, int a);
-EAPI void evas_common_draw_context_unset_multiplier (RGBA_Draw_Context *dc);
-EAPI Cutout_Rects *evas_common_draw_context_cutouts_new (void);
-EAPI void evas_common_draw_context_cutouts_free (Cutout_Rects* rects);
-EAPI void evas_common_draw_context_cutouts_real_free (Cutout_Rects* rects);
-EAPI void evas_common_draw_context_cutouts_del (Cutout_Rects* rects, int idx);
-EAPI void evas_common_draw_context_add_cutout (RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void evas_common_draw_context_clear_cutouts (RGBA_Draw_Context *dc);
-EAPI Cutout_Rects *evas_common_draw_context_apply_cutouts (RGBA_Draw_Context *dc, Cutout_Rects *recycle);
-EAPI void evas_common_draw_context_apply_clear_cutouts (Cutout_Rects* rects);
-EAPI void evas_common_draw_context_apply_clean_cutouts (Cutout_Rects* rects);
-EAPI void evas_common_draw_context_set_anti_alias (RGBA_Draw_Context *dc, unsigned char aa);
-EAPI void evas_common_draw_context_set_color_interpolation (RGBA_Draw_Context *dc, int color_space);
-EAPI void evas_common_draw_context_set_render_op (RGBA_Draw_Context *dc, int op);
-EAPI void evas_common_draw_context_target_set (RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API void evas_common_draw_context_clip_clip (RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API void evas_common_draw_context_set_clip (RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API void evas_common_draw_context_unset_clip (RGBA_Draw_Context *dc);
+EVAS_API void evas_common_draw_context_set_color (RGBA_Draw_Context *dc, int r, int g, int b, int a);
+EVAS_API void evas_common_draw_context_set_multiplier (RGBA_Draw_Context *dc, int r, int g, int b, int a);
+EVAS_API void evas_common_draw_context_unset_multiplier (RGBA_Draw_Context *dc);
+EVAS_API Cutout_Rects *evas_common_draw_context_cutouts_new (void);
+EVAS_API void evas_common_draw_context_cutouts_free (Cutout_Rects* rects);
+EVAS_API void evas_common_draw_context_cutouts_real_free (Cutout_Rects* rects);
+EVAS_API void evas_common_draw_context_cutouts_del (Cutout_Rects* rects, int idx);
+EVAS_API void evas_common_draw_context_add_cutout (RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API void evas_common_draw_context_clear_cutouts (RGBA_Draw_Context *dc);
+EVAS_API Cutout_Rects *evas_common_draw_context_apply_cutouts (RGBA_Draw_Context *dc, Cutout_Rects *recycle);
+EVAS_API void evas_common_draw_context_apply_clear_cutouts (Cutout_Rects* rects);
+EVAS_API void evas_common_draw_context_apply_clean_cutouts (Cutout_Rects* rects);
+EVAS_API void evas_common_draw_context_set_anti_alias (RGBA_Draw_Context *dc, unsigned char aa);
+EVAS_API void evas_common_draw_context_set_color_interpolation (RGBA_Draw_Context *dc, int color_space);
+EVAS_API void evas_common_draw_context_set_render_op (RGBA_Draw_Context *dc, int op);
+EVAS_API void evas_common_draw_context_target_set (RGBA_Draw_Context *dc, int x, int y, int w, int h);
#endif /* _EVAS_DRAW_H */
diff --git a/src/lib/evas/common/evas_draw_main.c b/src/lib/evas/common/evas_draw_main.c
index 518bfb2ac7..832235765f 100644
--- a/src/lib/evas/common/evas_draw_main.c
+++ b/src/lib/evas/common/evas_draw_main.c
@@ -2,7 +2,7 @@
#include "evas_convert_main.h"
#include "evas_private.h"
-EAPI Cutout_Rects *
+EVAS_API Cutout_Rects *
evas_common_draw_context_cutouts_new(void)
{
Cutout_Rects *rects;
@@ -28,7 +28,7 @@ evas_common_draw_context_cutouts_dup(Cutout_Rects *rects2, const Cutout_Rects *r
else rects2->rects = NULL;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_cutouts_free(Cutout_Rects* rects)
{
if (!rects) return;
@@ -36,7 +36,7 @@ evas_common_draw_context_cutouts_free(Cutout_Rects* rects)
rects->last_add.w = 0;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_cutouts_real_free(Cutout_Rects* rects)
{
if (!rects) return;
@@ -44,7 +44,7 @@ evas_common_draw_context_cutouts_real_free(Cutout_Rects* rects)
free(rects);
}
-EAPI void
+EVAS_API void
evas_common_draw_context_cutouts_del(Cutout_Rects* rects, int idx)
{
if ((idx >= 0) && (idx < rects->active))
@@ -122,7 +122,7 @@ _evas_common_draw_context_find(void)
return dc;
}
-EAPI void
+EVAS_API void
evas_common_init(void)
{
if (_init_count++) return;
@@ -143,7 +143,7 @@ evas_common_init(void)
evas_common_tilebuf_init();
}
-EAPI void
+EVAS_API void
evas_common_shutdown(void)
{
if (--_init_count) return;
@@ -162,12 +162,12 @@ evas_common_shutdown(void)
// SLKD(_ctx_spares_lock);
}
-EAPI void
+EVAS_API void
evas_common_draw_init(void)
{
}
-EAPI RGBA_Draw_Context *
+EVAS_API RGBA_Draw_Context *
evas_common_draw_context_new(void)
{
RGBA_Draw_Context *dc;
@@ -177,7 +177,7 @@ evas_common_draw_context_new(void)
return dc;
}
-EAPI RGBA_Draw_Context *
+EVAS_API RGBA_Draw_Context *
evas_common_draw_context_dup(RGBA_Draw_Context *dc)
{
RGBA_Draw_Context *dc2 = _evas_common_draw_context_find();
@@ -195,20 +195,20 @@ evas_common_draw_context_dup(RGBA_Draw_Context *dc)
return dc2;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_free(RGBA_Draw_Context *dc)
{
if (!dc) return;
_evas_common_draw_context_stash(dc);
}
-EAPI void
+EVAS_API void
evas_common_draw_context_clear_cutouts(RGBA_Draw_Context *dc)
{
evas_common_draw_context_cutouts_free(&dc->cutout);
}
-EAPI void
+EVAS_API void
evas_common_draw_context_font_ext_set(RGBA_Draw_Context *dc,
void *data,
void *(*gl_new) (void *data, RGBA_Font_Glyph *fg),
@@ -227,7 +227,7 @@ evas_common_draw_context_font_ext_set(RGBA_Draw_Context *dc,
dc->font_ext.func.gl_image_draw = gl_image_draw;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_clip_clip(RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
if (dc->clip.use)
@@ -239,7 +239,7 @@ evas_common_draw_context_clip_clip(RGBA_Draw_Context *dc, int x, int y, int w, i
evas_common_draw_context_set_clip(dc, x, y, w, h);
}
-EAPI void
+EVAS_API void
evas_common_draw_context_set_clip(RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
dc->clip.use = 1;
@@ -249,13 +249,13 @@ evas_common_draw_context_set_clip(RGBA_Draw_Context *dc, int x, int y, int w, in
dc->clip.h = h;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_unset_clip(RGBA_Draw_Context *dc)
{
dc->clip.use = 0;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_set_color(RGBA_Draw_Context *dc, int r, int g, int b, int a)
{
R_VAL(&(dc->col.col)) = (DATA8)r;
@@ -266,21 +266,21 @@ evas_common_draw_context_set_color(RGBA_Draw_Context *dc, int r, int g, int b, i
#if defined(PIXMAN_FONT) || defined(PIXMAN_RECT) || defined(PIXMAN_LINE) || defined(PIXMAN_POLY)
if (dc->col.pixman_color_image)
pixman_image_unref(dc->col.pixman_color_image);
-
+
pixman_color_t pixman_color;
-
+
pixman_color.alpha = (dc->col.col & 0xff000000) >> 16;
pixman_color.red = (dc->col.col & 0x00ff0000) >> 8;
pixman_color.green = (dc->col.col & 0x0000ff00);
pixman_color.blue = (dc->col.col & 0x000000ff) << 8;
dc->col.pixman_color_image = pixman_image_create_solid_fill(&pixman_color);
-#endif
+#endif
#endif
}
-EAPI void
+EVAS_API void
evas_common_draw_context_set_multiplier(RGBA_Draw_Context *dc, int r, int g, int b, int a)
{
dc->mul.use = 1;
@@ -290,14 +290,14 @@ evas_common_draw_context_set_multiplier(RGBA_Draw_Context *dc, int r, int g, int
A_VAL(&(dc->mul.col)) = (DATA8)a;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_unset_multiplier(RGBA_Draw_Context *dc)
{
dc->mul.use = 0;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_add_cutout(RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
// if (dc->cutout.rects > 512) return;
@@ -643,7 +643,7 @@ evas_common_draw_context_cutout_split(Cutout_Rects *res, int idx, Cutout_Rect *s
#undef R_NEW
}
-EAPI void
+EVAS_API void
evas_common_draw_context_target_set(RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
dc->cutout_target.x = x;
@@ -668,7 +668,7 @@ _srt_x(const void *d1, const void *d2)
return r1->x - r2->x;
}
-EAPI Cutout_Rects *
+EVAS_API Cutout_Rects *
evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc, Cutout_Rects *reuse)
{
Cutout_Rects *res = NULL;
@@ -833,14 +833,14 @@ evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc, Cutout_Rects *reus
return res;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_apply_clear_cutouts(Cutout_Rects *rects)
{
evas_common_draw_context_apply_clean_cutouts(rects);
free(rects);
}
-EAPI void
+EVAS_API void
evas_common_draw_context_apply_clean_cutouts(Cutout_Rects *rects)
{
free(rects->rects);
@@ -850,19 +850,19 @@ evas_common_draw_context_apply_clean_cutouts(Cutout_Rects *rects)
rects->last_add.w = 0;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_set_anti_alias(RGBA_Draw_Context *dc , unsigned char aa)
{
dc->anti_alias = !!aa;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_set_color_interpolation(RGBA_Draw_Context *dc, int color_space)
{
dc->interpolation.color_space = color_space;
}
-EAPI void
+EVAS_API void
evas_common_draw_context_set_render_op(RGBA_Draw_Context *dc , int op)
{
dc->render_op = op;
diff --git a/src/lib/evas/common/evas_font.h b/src/lib/evas/common/evas_font.h
index e6f2bdebd5..24e3f771e1 100644
--- a/src/lib/evas/common/evas_font.h
+++ b/src/lib/evas/common/evas_font.h
@@ -22,31 +22,7 @@ typedef unsigned long long DATA64;
#include "evas_text_utils.h"
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
#define LK(x) Eina_Lock x
#define LKI(x) eina_lock_new(&(x))
@@ -63,10 +39,10 @@ typedef unsigned long long DATA64;
* https://unicode.org/ivd/
* https://www.freetype.org/freetype2/docs/reference/ft2-glyph_variants.html
*/
-#define VAR_SEQ(x) GENERIC_VARIATION_SEQUENCES(x) | IDEOGRAPHICS_VARIATION_SEQUENCES(x) | MANGOLIAN_VARIATION_SEQUENCES(x)
-#define GENERIC_VARIATION_SEQUENCES(x) (x>=0xFE00 && x<=0xFE0F) ? x : 0
-#define IDEOGRAPHICS_VARIATION_SEQUENCES(x) (x>=0xE0100 && x<=0xE01EF) ? x : 0
-#define MANGOLIAN_VARIATION_SEQUENCES(x) (x>=0x180B && x<=0x180D) ? x : 0
+#define VAR_SEQ(x) (GENERIC_VARIATION_SEQUENCES(x) | IDEOGRAPHICS_VARIATION_SEQUENCES(x) | MANGOLIAN_VARIATION_SEQUENCES(x))
+#define GENERIC_VARIATION_SEQUENCES(x) ((x>=0xFE00 && x<=0xFE0F) ? x : 0)
+#define IDEOGRAPHICS_VARIATION_SEQUENCES(x) ((x>=0xE0100 && x<=0xE01EF) ? x : 0)
+#define MANGOLIAN_VARIATION_SEQUENCES(x) ((x>=0x180B && x<=0x180D) ? x : 0)
/**
* http://unicode.org/emoji/charts/emoji-variants.html
*/
@@ -294,7 +270,8 @@ struct _RGBA_Font_Int
Eina_Hash *kerning;
Fash_Glyph *fash;
unsigned int size;
- float scale_factor;
+ double scale_factor;
+ Eina_Bool is_resized;
int real_size;
int max_h;
int references;
@@ -361,6 +338,7 @@ struct _RGBA_Font_Glyph
Evas_Coord x_bear;
Evas_Coord y_bear;
FT_Glyph glyph;
+ FT_Vector advance;
RGBA_Font_Glyph_Out *glyph_out;
void *col_dat;
/* this is a problem - only 1 engine at a time can extend such a font... grrr */
@@ -375,76 +353,76 @@ struct _RGBA_Font_Glyph
/* main */
-EAPI void evas_common_font_init (void);
-EAPI void evas_common_font_shutdown (void);
-EAPI void evas_common_font_font_all_unload (void);
-
-EAPI int evas_common_font_ascent_get (RGBA_Font *fn);
-EAPI int evas_common_font_descent_get (RGBA_Font *fn);
-EAPI int evas_common_font_max_ascent_get (RGBA_Font *fn);
-EAPI int evas_common_font_max_descent_get (RGBA_Font *fn);
-EAPI int evas_common_font_instance_ascent_get (RGBA_Font_Int *fi);
-EAPI int evas_common_font_instance_descent_get (RGBA_Font_Int *fi);
-EAPI int evas_common_font_instance_max_ascent_get (RGBA_Font_Int *fi);
-EAPI int evas_common_font_instance_max_descent_get (RGBA_Font_Int *fi);
-EAPI int evas_common_font_instance_underline_position_get (RGBA_Font_Int *fi);
-EAPI int evas_common_font_instance_underline_thickness_get (RGBA_Font_Int *fi);
-EAPI int evas_common_font_get_line_advance (RGBA_Font *fn);
-void *evas_common_font_freetype_face_get(RGBA_Font *font); /* XXX: Not EAPI on purpose. Not ment to be used in modules. */
-
-EAPI RGBA_Font_Glyph *evas_common_font_int_cache_glyph_get (RGBA_Font_Int *fi, FT_UInt index);
-EAPI Eina_Bool evas_common_font_int_cache_glyph_render(RGBA_Font_Glyph *fg);
-EAPI FT_UInt evas_common_get_char_index (RGBA_Font_Int* fi, Eina_Unicode gl, Eina_Unicode variation_sequence);
+EVAS_API void evas_common_font_init (void);
+EVAS_API void evas_common_font_shutdown (void);
+EVAS_API void evas_common_font_font_all_unload (void);
+
+EVAS_API int evas_common_font_ascent_get (RGBA_Font *fn);
+EVAS_API int evas_common_font_descent_get (RGBA_Font *fn);
+EVAS_API int evas_common_font_max_ascent_get (RGBA_Font *fn);
+EVAS_API int evas_common_font_max_descent_get (RGBA_Font *fn);
+EVAS_API int evas_common_font_instance_ascent_get (RGBA_Font_Int *fi);
+EVAS_API int evas_common_font_instance_descent_get (RGBA_Font_Int *fi);
+EVAS_API int evas_common_font_instance_max_ascent_get (RGBA_Font_Int *fi);
+EVAS_API int evas_common_font_instance_max_descent_get (RGBA_Font_Int *fi);
+EVAS_API int evas_common_font_instance_underline_position_get (RGBA_Font_Int *fi);
+EVAS_API int evas_common_font_instance_underline_thickness_get (RGBA_Font_Int *fi);
+EVAS_API int evas_common_font_get_line_advance (RGBA_Font *fn);
+void *evas_common_font_freetype_face_get(RGBA_Font *font); /* XXX: Not EVAS_API on purpose. Not ment to be used in modules. */
+
+EVAS_API RGBA_Font_Glyph *evas_common_font_int_cache_glyph_get (RGBA_Font_Int *fi, FT_UInt index);
+EVAS_API Eina_Bool evas_common_font_int_cache_glyph_render(RGBA_Font_Glyph *fg);
+EVAS_API FT_UInt evas_common_get_char_index (RGBA_Font_Int* fi, Eina_Unicode gl, Eina_Unicode variation_sequence);
/* load */
-EAPI void evas_common_font_dpi_set (int dpi_h, int dpi_v);
-EAPI RGBA_Font_Source *evas_common_font_source_memory_load (const char *name, const void *data, int data_size);
-EAPI RGBA_Font_Source *evas_common_font_source_load (const char *name);
-EAPI int evas_common_font_source_load_complete (RGBA_Font_Source *fs);
-EAPI RGBA_Font_Source *evas_common_font_source_find (const char *name);
-EAPI void evas_common_font_source_free (RGBA_Font_Source *fs);
-EAPI void evas_common_font_size_use (RGBA_Font *fn);
-EAPI RGBA_Font_Int *evas_common_font_int_load (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI RGBA_Font_Int *evas_common_font_int_load_init (RGBA_Font_Int *fn);
-EAPI RGBA_Font_Int *evas_common_font_int_load_complete (RGBA_Font_Int *fi);
-EAPI RGBA_Font *evas_common_font_memory_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI RGBA_Font *evas_common_font_load (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI RGBA_Font *evas_common_font_add (RGBA_Font *fn, const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI RGBA_Font *evas_common_font_memory_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI void evas_common_font_free (RGBA_Font *fn);
-EAPI void evas_common_font_int_unref (RGBA_Font_Int *fi);
-EAPI void evas_common_font_hinting_set (RGBA_Font *fn, Font_Hint_Flags hinting);
-EAPI Eina_Bool evas_common_hinting_available (Font_Hint_Flags hinting);
-EAPI RGBA_Font *evas_common_font_memory_hinting_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI RGBA_Font *evas_common_font_hinting_load (const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI RGBA_Font *evas_common_font_hinting_add (RGBA_Font *fn, const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI RGBA_Font *evas_common_font_memory_hinting_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI void evas_common_font_int_modify_cache_by (RGBA_Font_Int *fi, int dir);
-EAPI int evas_common_font_cache_get (void);
-EAPI void evas_common_font_cache_set (int size);
-EAPI void evas_common_font_flush (void);
-EAPI void evas_common_font_flush_last (void);
-EAPI RGBA_Font_Int *evas_common_font_int_find (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
-EAPI void evas_common_font_all_clear (void);
-EAPI void evas_common_font_ext_clear (void);
+EVAS_API void evas_common_font_dpi_set (int dpi_h, int dpi_v);
+EVAS_API RGBA_Font_Source *evas_common_font_source_memory_load (const char *name, const void *data, int data_size);
+EVAS_API RGBA_Font_Source *evas_common_font_source_load (const char *name);
+EVAS_API int evas_common_font_source_load_complete (RGBA_Font_Source *fs);
+EVAS_API RGBA_Font_Source *evas_common_font_source_find (const char *name);
+EVAS_API void evas_common_font_source_free (RGBA_Font_Source *fs);
+EVAS_API void evas_common_font_size_use (RGBA_Font *fn);
+EVAS_API RGBA_Font_Int *evas_common_font_int_load (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API RGBA_Font_Int *evas_common_font_int_load_init (RGBA_Font_Int *fn);
+EVAS_API RGBA_Font_Int *evas_common_font_int_load_complete (RGBA_Font_Int *fi);
+EVAS_API RGBA_Font *evas_common_font_memory_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API RGBA_Font *evas_common_font_load (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API RGBA_Font *evas_common_font_add (RGBA_Font *fn, const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API RGBA_Font *evas_common_font_memory_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API void evas_common_font_free (RGBA_Font *fn);
+EVAS_API void evas_common_font_int_unref (RGBA_Font_Int *fi);
+EVAS_API void evas_common_font_hinting_set (RGBA_Font *fn, Font_Hint_Flags hinting);
+EVAS_API Eina_Bool evas_common_hinting_available (Font_Hint_Flags hinting);
+EVAS_API RGBA_Font *evas_common_font_memory_hinting_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API RGBA_Font *evas_common_font_hinting_load (const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API RGBA_Font *evas_common_font_hinting_add (RGBA_Font *fn, const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API RGBA_Font *evas_common_font_memory_hinting_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API void evas_common_font_int_modify_cache_by (RGBA_Font_Int *fi, int dir);
+EVAS_API int evas_common_font_cache_get (void);
+EVAS_API void evas_common_font_cache_set (int size);
+EVAS_API void evas_common_font_flush (void);
+EVAS_API void evas_common_font_flush_last (void);
+EVAS_API RGBA_Font_Int *evas_common_font_int_find (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
+EVAS_API void evas_common_font_all_clear (void);
+EVAS_API void evas_common_font_ext_clear (void);
/* query */
-EAPI int evas_common_font_query_kerning (RGBA_Font_Int* fi, FT_UInt left, FT_UInt right, int* kerning);
-EAPI void evas_common_font_query_size (RGBA_Font *fn, const Evas_Text_Props *intl_props, int *w, int *h);
-EAPI int evas_common_font_query_inset (RGBA_Font *fn, const Evas_Text_Props *text_props);
-EAPI int evas_common_font_query_right_inset (RGBA_Font *fn, const Evas_Text_Props *text_props);
-EAPI void evas_common_font_query_advance (RGBA_Font *fn, const Evas_Text_Props *intl_props, int *h_adv, int *v_adv);
-EAPI int evas_common_font_query_char_coords (RGBA_Font *fn, const Evas_Text_Props *intl_props, int pos, int *cx, int *cy, int *cw, int *ch);
-EAPI int evas_common_font_query_pen_coords (RGBA_Font *fn, const Evas_Text_Props *intl_props, int pos, int *cpen_x, int *cy, int *cadv, int *ch);
-EAPI int evas_common_font_query_char_at_coords (RGBA_Font *fn, const Evas_Text_Props *intl_props, int x, int y, int *cx, int *cy, int *cw, int *ch);
-EAPI int evas_common_font_query_last_up_to_pos (RGBA_Font *fn, const Evas_Text_Props *intl_props, int x, int y, int width_offset);
-EAPI int evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script, const Eina_Unicode *text, int run_len);
-EAPI void evas_common_font_ascent_descent_get(RGBA_Font *fn, const Evas_Text_Props *text_props, int *ascent, int *descent);
-
-EAPI void *evas_common_font_glyph_compress(void *data, int num_grays, int pixel_mode, int pitch_data, int w, int h, int *size_ret);
-EAPI DATA8 *evas_common_font_glyph_uncompress(RGBA_Font_Glyph *fg, int *wret, int *hret);
-EAPI int evas_common_font_glyph_search (RGBA_Font *fn, RGBA_Font_Int **fi_ret, Eina_Unicode gl, Eina_Unicode variation_sequence, uint32_t evas_font_search_options);
+EVAS_API int evas_common_font_query_kerning (RGBA_Font_Int* fi, FT_UInt left, FT_UInt right, int* kerning);
+EVAS_API void evas_common_font_query_size (RGBA_Font *fn, const Evas_Text_Props *intl_props, int *w, int *h);
+EVAS_API int evas_common_font_query_inset (RGBA_Font *fn, const Evas_Text_Props *text_props);
+EVAS_API int evas_common_font_query_right_inset (RGBA_Font *fn, const Evas_Text_Props *text_props);
+EVAS_API void evas_common_font_query_advance (RGBA_Font *fn, const Evas_Text_Props *intl_props, int *h_adv, int *v_adv);
+EVAS_API int evas_common_font_query_char_coords (RGBA_Font *fn, const Evas_Text_Props *intl_props, int pos, int *cx, int *cy, int *cw, int *ch);
+EVAS_API int evas_common_font_query_pen_coords (RGBA_Font *fn, const Evas_Text_Props *intl_props, int pos, int *cpen_x, int *cy, int *cadv, int *ch);
+EVAS_API int evas_common_font_query_char_at_coords (RGBA_Font *fn, const Evas_Text_Props *intl_props, int x, int y, int *cx, int *cy, int *cw, int *ch);
+EVAS_API int evas_common_font_query_last_up_to_pos (RGBA_Font *fn, const Evas_Text_Props *intl_props, int x, int y, int width_offset);
+EVAS_API int evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script, const Eina_Unicode *text, int run_len);
+EVAS_API void evas_common_font_ascent_descent_get(RGBA_Font *fn, const Evas_Text_Props *text_props, int *ascent, int *descent);
+
+EVAS_API void *evas_common_font_glyph_compress(void *data, int num_grays, int pixel_mode, int pitch_data, int w, int h, int *size_ret);
+EVAS_API DATA8 *evas_common_font_glyph_uncompress(RGBA_Font_Glyph *fg, int *wret, int *hret);
+EVAS_API int evas_common_font_glyph_search (RGBA_Font *fn, RGBA_Font_Int **fi_ret, Eina_Unicode gl, Eina_Unicode variation_sequence, uint32_t evas_font_search_options);
void evas_common_font_load_init(void);
void evas_common_font_load_shutdown(void);
@@ -468,7 +446,4 @@ const char *evas_font_lang_normalize(const char *lang);
void * evas_font_load(const Eina_List *font_paths, int hinting, Evas_Font_Description *fdesc, const char *source, Evas_Font_Size size, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
void evas_font_load_hinting_set(void *font, int hinting);
-#undef EAPI
-#define EAPI
-
#endif /* _EVAS_FONT_H */
diff --git a/src/lib/evas/common/evas_font_compress.c b/src/lib/evas/common/evas_font_compress.c
index 19d7219e0d..b017daecb2 100644
--- a/src/lib/evas/common/evas_font_compress.c
+++ b/src/lib/evas/common/evas_font_compress.c
@@ -402,7 +402,7 @@ decompress_bpp4(DATA8 *src, DATA8 *dst, int pitch, int w, int h)
//--------------------------------------------------------------------------
//- GENERAL ----------------------------------------------------------------
//--------------------------------------------------------------------------
-EAPI void *
+EVAS_API void *
evas_common_font_glyph_compress(void *data, int num_grays, int pixel_mode,
int pitch_data, int w, int h, int *size_ret)
{
@@ -438,7 +438,7 @@ evas_common_font_glyph_compress(void *data, int num_grays, int pixel_mode,
// this decompresses a whole block of compressed font data back to 8bit
// per pixels and deals with both 4bit RLE and 4bit packed encoding modes
-EAPI DATA8 *
+EVAS_API DATA8 *
evas_common_font_glyph_uncompress(RGBA_Font_Glyph *fg, int *wret, int *hret)
{
RGBA_Font_Glyph_Out *fgo = fg->glyph_out;
diff --git a/src/lib/evas/common/evas_font_draw.c b/src/lib/evas/common/evas_font_draw.c
index f6aa4d5424..93c493df9a 100644
--- a/src/lib/evas/common/evas_font_draw.c
+++ b/src/lib/evas/common/evas_font_draw.c
@@ -15,7 +15,7 @@ struct _Evas_Glyph
FT_UInt idx;
};
-EAPI void
+EVAS_API void
evas_common_font_draw_init(void)
{
}
@@ -80,7 +80,7 @@ _evas_font_image_draw(void *context, void *surface, void *image, RGBA_Font_Glyph
* and then for kerning we have to switch the order of the kerning query (as the prev
* is on the right, and not on the left).
*/
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
Evas_Glyph_Array *glyphs, RGBA_Gfx_Func func EINA_UNUSED, int ext_x, int ext_y, int ext_w,
int ext_h, int im_w, int im_h EINA_UNUSED)
@@ -105,8 +105,12 @@ evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
if ((fg->fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR) &&
FT_HAS_COLOR(fg->fi->src->ft.face))
{
- w *= fg->fi->scale_factor;
- h *= fg->fi->scale_factor;
+ if ( !fg->fi->is_resized )
+ {
+ w *= fg->fi->scale_factor;
+ h *= fg->fi->scale_factor;
+ }
+
}
}
@@ -205,7 +209,7 @@ evas_common_font_fonts_unref(Evas_Font_Array *array)
free(array);
}
-EAPI void
+EVAS_API void
evas_common_font_draw_prepare(Evas_Text_Props *text_props)
{
RGBA_Font_Int *fi;
@@ -297,7 +301,7 @@ error:
eina_inarray_free(glyphs);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_font_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs, Evas_Common_Font_Draw_Cb cb)
{
int ext_x, ext_y, ext_w, ext_h;
@@ -371,14 +375,14 @@ evas_common_font_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, E
}
}
-EAPI void
+EVAS_API void
evas_common_font_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs)
{
evas_common_font_draw_cb(dst, dc, x, y, glyphs,
evas_common_font_rgba_draw);
}
-EAPI void
+EVAS_API void
evas_common_font_draw_do(const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Gfx_Func func,
RGBA_Image *dst, RGBA_Draw_Context *dc,
int x, int y, const Evas_Text_Props *text_props)
@@ -417,7 +421,7 @@ evas_common_font_draw_do(const Cutout_Rects *reuse, const Eina_Rectangle *clip,
}
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_font_draw_prepare_cutout(Cutout_Rects **reuse, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Gfx_Func *func)
{
int im_w, im_h;
@@ -441,7 +445,7 @@ evas_common_font_draw_prepare_cutout(Cutout_Rects **reuse, RGBA_Image *dst, RGBA
// this draws a compressed font glyph and decompresses on the fly as it
// draws, saving memory bandwidth and providing speedups
-EAPI void
+EVAS_API void
evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
RGBA_Draw_Context *dc,
RGBA_Image *dst_image, int dst_pitch,
@@ -453,6 +457,8 @@ evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
DATA32 coltab[16], col;
DATA16 mtab[16], v;
+ if (!dst) return;
+
// FIXME: Use dw, dh for scaling glyphs...
(void) dw;
(void) dh;
@@ -550,7 +556,7 @@ evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
ptr = dst + (x + x1) + ((y + row) * dst_pitch);
buf_ptr = buf + (row * w) + x1;
- func(buf_ptr, mask, 0, ptr, w);
+ func(buf_ptr, mask, 0, ptr, x2 - x1);
}
}
else
diff --git a/src/lib/evas/common/evas_font_draw.h b/src/lib/evas/common/evas_font_draw.h
index 2fdfc36e12..cf31d6b385 100644
--- a/src/lib/evas/common/evas_font_draw.h
+++ b/src/lib/evas/common/evas_font_draw.h
@@ -6,13 +6,13 @@
/* draw */
typedef Eina_Bool (*Evas_Common_Font_Draw_Cb)(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs, RGBA_Gfx_Func func, int ext_x, int ext_y, int ext_w, int ext_h, int im_w, int im_h);
-EAPI Eina_Bool evas_common_font_draw_cb (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs, Evas_Common_Font_Draw_Cb cb);
-EAPI void evas_common_font_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs);
-EAPI Eina_Bool evas_common_font_rgba_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs, RGBA_Gfx_Func func, int ext_x, int ext_y, int ext_w, int ext_h, int im_w, int im_h);
-EAPI void evas_common_font_draw_init (void);
-EAPI void evas_common_font_draw_prepare (Evas_Text_Props *text_props);
-EAPI void evas_common_font_draw_do (const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Gfx_Func func, RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, const Evas_Text_Props *text_props);
-EAPI Eina_Bool evas_common_font_draw_prepare_cutout (Cutout_Rects **reuse, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Gfx_Func *func);
-EAPI void evas_common_font_glyph_draw (RGBA_Font_Glyph *fg, RGBA_Draw_Context *dc, RGBA_Image *dst, int dst_pitch, int dx, int dy, int dw, int dh, int cx, int cy, int cw, int ch);
+EVAS_API Eina_Bool evas_common_font_draw_cb (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs, Evas_Common_Font_Draw_Cb cb);
+EVAS_API void evas_common_font_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs);
+EVAS_API Eina_Bool evas_common_font_rgba_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs, RGBA_Gfx_Func func, int ext_x, int ext_y, int ext_w, int ext_h, int im_w, int im_h);
+EVAS_API void evas_common_font_draw_init (void);
+EVAS_API void evas_common_font_draw_prepare (Evas_Text_Props *text_props);
+EVAS_API void evas_common_font_draw_do (const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Gfx_Func func, RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, const Evas_Text_Props *text_props);
+EVAS_API Eina_Bool evas_common_font_draw_prepare_cutout (Cutout_Rects **reuse, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Gfx_Func *func);
+EVAS_API void evas_common_font_glyph_draw (RGBA_Font_Glyph *fg, RGBA_Draw_Context *dc, RGBA_Image *dst, int dst_pitch, int dx, int dy, int dw, int dh, int cx, int cy, int cw, int ch);
#endif /* _EVAS_FONT_DRAW_H */
diff --git a/src/lib/evas/common/evas_font_load.c b/src/lib/evas/common/evas_font_load.c
index 3aa2070499..355d1f9394 100644
--- a/src/lib/evas/common/evas_font_load.c
+++ b/src/lib/evas/common/evas_font_load.c
@@ -123,7 +123,7 @@ evas_common_font_load_shutdown(void)
fonts_src = NULL;
}
-EAPI void
+EVAS_API void
evas_common_font_dpi_set(int dpi_h, int dpi_v)
{
if (dpi_v <= 0) dpi_v = dpi_h;
@@ -131,7 +131,7 @@ evas_common_font_dpi_set(int dpi_h, int dpi_v)
font_dpi_v = dpi_v;
}
-EAPI RGBA_Font_Source *
+EVAS_API RGBA_Font_Source *
evas_common_font_source_memory_load(const char *name, const void *data, int data_size)
{
int error;
@@ -174,7 +174,7 @@ evas_common_font_source_memory_load(const char *name, const void *data, int data
return fs;
}
-EAPI RGBA_Font_Source *
+EVAS_API RGBA_Font_Source *
evas_common_font_source_load(const char *name)
{
RGBA_Font_Source *fs;
@@ -228,7 +228,7 @@ evas_common_font_source_reload(RGBA_Font_Source *fs)
evas_common_font_source_load_complete(fs);
}
-EAPI int
+EVAS_API int
evas_common_font_source_load_complete(RGBA_Font_Source *fs)
{
int error;
@@ -254,7 +254,7 @@ evas_common_font_source_load_complete(RGBA_Font_Source *fs)
return error;
}
-EAPI RGBA_Font_Source *
+EVAS_API RGBA_Font_Source *
evas_common_font_source_find(const char *name)
{
RGBA_Font_Source *fs;
@@ -269,7 +269,7 @@ evas_common_font_source_find(const char *name)
return NULL;
}
-EAPI void
+EVAS_API void
evas_common_font_source_free(RGBA_Font_Source *fs)
{
fs->references--;
@@ -278,7 +278,7 @@ evas_common_font_source_free(RGBA_Font_Source *fs)
eina_hash_del(fonts_src, fs->name, fs);
}
-EAPI void
+EVAS_API void
evas_common_font_size_use(RGBA_Font *fn)
{
RGBA_Font_Int *fi;
@@ -324,7 +324,7 @@ _evas_common_font_int_cache_init(RGBA_Font_Int *fi)
LKI(fi->ft_mutex);
}
-EAPI RGBA_Font_Int *
+EVAS_API RGBA_Font_Int *
evas_common_font_int_memory_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
RGBA_Font_Int *fi;
@@ -367,7 +367,7 @@ _file_path_is_file_helper(const char *path)
return 0;
}
-EAPI RGBA_Font_Int *
+EVAS_API RGBA_Font_Int *
evas_common_font_int_load(const char *name, int size,
Font_Rend_Flags wanted_rend,
Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
@@ -396,7 +396,7 @@ evas_common_font_int_load(const char *name, int size,
return fi;
}
-EAPI RGBA_Font_Int *
+EVAS_API RGBA_Font_Int *
evas_common_font_int_load_init(RGBA_Font_Int *fi)
{
fi->ft.size = NULL;
@@ -405,7 +405,7 @@ evas_common_font_int_load_init(RGBA_Font_Int *fi)
return fi;
}
-EAPI RGBA_Font_Int *
+EVAS_API RGBA_Font_Int *
evas_common_font_int_load_complete(RGBA_Font_Int *fi)
{
int val, dv;
@@ -460,9 +460,14 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi)
fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
{
if (fi->real_size > 0)
- fi->scale_factor = (float)fi->size * 64.0 / (float)fi->real_size;
+ {
+ fi->scale_factor = (double)fi->size * 64.0 / (double)fi->real_size;
+ fi->is_resized = EINA_FALSE;
+ if ((fi->scale_factor <= 0.9) && (fi->scale_factor != 0))
+ fi->is_resized = EINA_TRUE;
+ }
else
- fi->scale_factor = (float)64.0;
+ fi->scale_factor = 64.0;
}
}
}
@@ -541,7 +546,7 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi)
return fi;
}
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_memory_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
RGBA_Font *fn;
@@ -575,7 +580,7 @@ evas_common_font_memory_load(const char *source, const char *name, int size, con
// fn->(fi, fi, fi, ...)
// fi->fs
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_load(const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
RGBA_Font *fn;
@@ -617,7 +622,7 @@ evas_common_font_load(const char *name, int size, Font_Rend_Flags wanted_rend, E
return fn;
}
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_add(RGBA_Font *fn, const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
RGBA_Font_Int *fi;
@@ -639,7 +644,7 @@ evas_common_font_add(RGBA_Font *fn, const char *name, int size, Font_Rend_Flags
return NULL;
}
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_memory_add(RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
RGBA_Font_Int *fi;
@@ -662,7 +667,7 @@ evas_common_font_memory_add(RGBA_Font *fn, const char *source, const char *name,
return NULL;
}
-EAPI void
+EVAS_API void
evas_common_font_int_unref(RGBA_Font_Int *fi)
{
fi->references--;
@@ -674,7 +679,7 @@ evas_common_font_int_unref(RGBA_Font_Int *fi)
}
}
-EAPI void
+EVAS_API void
evas_common_font_free(RGBA_Font *fn)
{
Eina_List *l;
@@ -696,7 +701,7 @@ evas_common_font_free(RGBA_Font *fn)
free(fn);
}
-EAPI void
+EVAS_API void
evas_common_font_hinting_set(RGBA_Font *fn, Font_Hint_Flags hinting)
{
Eina_List *l;
@@ -712,7 +717,7 @@ evas_common_font_hinting_set(RGBA_Font *fn, Font_Hint_Flags hinting)
}
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_hinting_available(Font_Hint_Flags hinting)
{
switch (hinting)
@@ -746,7 +751,7 @@ evas_common_hinting_available(Font_Hint_Flags hinting)
return EINA_FALSE;
}
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_memory_hinting_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
RGBA_Font *fn;
@@ -756,7 +761,7 @@ evas_common_font_memory_hinting_load(const char *source, const char *name, int s
return fn;
}
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_hinting_load(const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
RGBA_Font *fn;
@@ -766,7 +771,7 @@ evas_common_font_hinting_load(const char *name, int size, Font_Hint_Flags hintin
return fn;
}
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_hinting_add(RGBA_Font *fn, const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
fn = evas_common_font_add(fn, name, size, wanted_rend, bitmap_scalable);
@@ -774,7 +779,7 @@ evas_common_font_hinting_add(RGBA_Font *fn, const char *name, int size, Font_Hin
return fn;
}
-EAPI RGBA_Font *
+EVAS_API RGBA_Font *
evas_common_font_memory_hinting_add(RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
{
fn = evas_common_font_memory_add(fn, source, name, size, data, data_size,
@@ -815,7 +820,7 @@ _evas_common_font_all_clear_cb(const Eina_Hash *hash EINA_UNUSED, const void *ke
return 1;
}
-EAPI void
+EVAS_API void
evas_common_font_all_clear(void)
{
eina_hash_foreach(fonts, _evas_common_font_all_clear_cb, NULL);
@@ -891,20 +896,20 @@ evas_common_font_int_reload(RGBA_Font_Int *fi)
* we then check if the cache_useage size is larger than allowed
* !If the cache is NOT too large we dont delete font_int
* !If the cache is too large we really delete font_int */
-EAPI void
+EVAS_API void
evas_common_font_int_modify_cache_by(RGBA_Font_Int *fi, int dir)
{
font_cache_usage += dir * (sizeof(RGBA_Font) + fi->usage +
sizeof(FT_FaceRec) + 16384); /* fudge values */
}
-EAPI int
+EVAS_API int
evas_common_font_cache_get(void)
{
return font_cache;
}
-EAPI void
+EVAS_API void
evas_common_font_cache_set(int size)
{
font_cache = size;
@@ -912,7 +917,7 @@ evas_common_font_cache_set(int size)
evas_common_font_int_use_trim();
}
-EAPI void
+EVAS_API void
evas_common_font_flush(void)
{
if (font_cache_usage < font_cache) return;
@@ -929,7 +934,7 @@ evas_common_font_flush(void)
/* We run this when the cache gets larger than allowed size
* We check cache size each time a fi->references goes to 0
* PERFORMS: Find font_int(s) with references == 0 and delete them */
-EAPI void
+EVAS_API void
evas_common_font_flush_last(void)
{
RGBA_Font_Int *fi = NULL;
@@ -940,7 +945,7 @@ evas_common_font_flush_last(void)
eina_hash_del(fonts, fi, fi);
}
-EAPI RGBA_Font_Int *
+EVAS_API RGBA_Font_Int *
evas_common_font_int_find(const char *name, int size,
Font_Rend_Flags wanted_rend,
Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
@@ -1021,7 +1026,7 @@ _cb_hash_font_ext(const Eina_Hash *hash EINA_UNUSED,
return EINA_TRUE;
}
-EAPI void
+EVAS_API void
evas_common_font_ext_clear(void)
{
eina_hash_foreach(fonts, _cb_hash_font_ext, NULL);
diff --git a/src/lib/evas/common/evas_font_main.c b/src/lib/evas/common/evas_font_main.c
index c41e350dcf..1af8fd2862 100644
--- a/src/lib/evas/common/evas_font_main.c
+++ b/src/lib/evas/common/evas_font_main.c
@@ -13,9 +13,10 @@ LK(lock_font_draw); // for freetype2 API calls
LK(lock_bidi); // for evas bidi internal usage.
LK(lock_ot); // for evas bidi internal usage.
-int _evas_font_log_dom_global = -1;
+int _evas_font_log_dom_global = -1;
+int _evas_font_texture_cache = -1;
-EAPI void
+EVAS_API void
evas_common_font_init(void)
{
int error;
@@ -56,7 +57,7 @@ evas_common_font_init(void)
LKI(lock_ot);
}
-EAPI void
+EVAS_API void
evas_common_font_shutdown(void)
{
if (initialised < 1) return;
@@ -76,7 +77,7 @@ evas_common_font_shutdown(void)
eina_log_domain_unregister(_evas_font_log_dom_global);
}
-EAPI void
+EVAS_API void
evas_common_font_font_all_unload(void)
{
evas_common_font_all_clear();
@@ -98,7 +99,7 @@ evas_common_font_freetype_face_get(RGBA_Font *font)
return fi->src->ft.face;
}
-EAPI int
+EVAS_API int
evas_common_font_instance_ascent_get(RGBA_Font_Int *fi)
{
int val;
@@ -132,7 +133,7 @@ evas_common_font_instance_ascent_get(RGBA_Font_Int *fi)
// return ret;
}
-EAPI int
+EVAS_API int
evas_common_font_instance_descent_get(RGBA_Font_Int *fi)
{
int val;
@@ -161,7 +162,7 @@ evas_common_font_instance_descent_get(RGBA_Font_Int *fi)
// return ret;
}
-EAPI int
+EVAS_API int
evas_common_font_instance_max_ascent_get(RGBA_Font_Int *fi)
{
int val, dv;
@@ -196,7 +197,7 @@ evas_common_font_instance_max_ascent_get(RGBA_Font_Int *fi)
return ret;
}
-EAPI int
+EVAS_API int
evas_common_font_instance_max_descent_get(RGBA_Font_Int *fi)
{
int val, dv;
@@ -231,35 +232,35 @@ evas_common_font_instance_max_descent_get(RGBA_Font_Int *fi)
return ret;
}
-EAPI int
+EVAS_API int
evas_common_font_ascent_get(RGBA_Font *fn)
{
// evas_common_font_size_use(fn);
return evas_common_font_instance_ascent_get(fn->fonts->data);
}
-EAPI int
+EVAS_API int
evas_common_font_descent_get(RGBA_Font *fn)
{
// evas_common_font_size_use(fn);
return evas_common_font_instance_descent_get(fn->fonts->data);
}
-EAPI int
+EVAS_API int
evas_common_font_max_ascent_get(RGBA_Font *fn)
{
// evas_common_font_size_use(fn);
return evas_common_font_instance_max_ascent_get(fn->fonts->data);
}
-EAPI int
+EVAS_API int
evas_common_font_max_descent_get(RGBA_Font *fn)
{
// evas_common_font_size_use(fn);
return evas_common_font_instance_max_descent_get(fn->fonts->data);
}
-EAPI int
+EVAS_API int
evas_common_font_get_line_advance(RGBA_Font *fn)
{
int val;
@@ -296,7 +297,7 @@ evas_common_font_get_line_advance(RGBA_Font *fn)
// return ret;
}
-EAPI int
+EVAS_API int
evas_common_font_instance_underline_position_get(RGBA_Font_Int *fi)
{
int position = 0;
@@ -324,7 +325,7 @@ end:
return position;
}
-EAPI int
+EVAS_API int
evas_common_font_instance_underline_thickness_get(RGBA_Font_Int *fi)
{
int thickness = 0;
@@ -597,6 +598,11 @@ _glyph_free(RGBA_Font_Glyph *fg)
if ((fg->glyph_out->rle) && (fg->glyph_out->bitmap.rle_alloc))
free(fg->glyph_out->rle);
+ else if ((fg->glyph_out->bitmap.buffer) && (fg->glyph_out->bitmap.rle_alloc))
+ {
+ free(fg->glyph_out->bitmap.buffer);
+ fg->glyph_out->bitmap.buffer = NULL;
+ }
fg->glyph_out->rle = NULL;
if (!fg->glyph_out->bitmap.no_free_glout) free(fg->glyph_out);
fg->glyph_out = NULL;
@@ -706,7 +712,47 @@ _fash_gl_add(Fash_Glyph *fash, int item, RGBA_Font_Glyph *glyph)
fash->bucket[grp]->bucket[maj]->item[min] = glyph;
}
-EAPI RGBA_Font_Glyph *
+static void evas_font_glyph_load(RGBA_Font_Glyph *fg)
+{
+ if(fg->glyph) return;
+
+ RGBA_Font_Int *fi = fg->fi;
+ FT_UInt idx = fg->index;
+ FT_Error error;
+
+ const FT_Int32 hintflags[3] =
+ { FT_LOAD_NO_HINTING, FT_LOAD_FORCE_AUTOHINT, FT_LOAD_NO_AUTOHINT };
+ static FT_Matrix transform = {0x10000, _EVAS_FONT_SLANT_TAN * 0x10000,
+ 0x00000, 0x10000};
+
+ evas_common_font_int_reload(fi);
+ FTLOCK();
+ error = FT_Load_Glyph(fi->src->ft.face, idx,
+ (FT_HAS_COLOR(fi->src->ft.face) ?
+ (FT_LOAD_COLOR | hintflags[fi->hinting]) :
+ (FT_LOAD_DEFAULT | FT_LOAD_NO_BITMAP | hintflags[fi->hinting])));
+
+ FTUNLOCK();
+ if (error)
+ {
+ return;
+ }
+
+ /* Transform the outline of Glyph according to runtime_rend. */
+ if (fi->runtime_rend & FONT_REND_SLANT)
+ FT_Outline_Transform(&fi->src->ft.face->glyph->outline, &transform);
+ /* Embolden the outline of Glyph according to rundtime_rend. */
+ if (fi->runtime_rend & FONT_REND_WEIGHT)
+ FT_GlyphSlot_Embolden(fi->src->ft.face->glyph);
+
+ FTLOCK();
+ error = FT_Get_Glyph(fi->src->ft.face->glyph, &(fg->glyph));
+ FTUNLOCK();
+
+ return;
+}
+
+EVAS_API RGBA_Font_Glyph *
evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt idx)
{
RGBA_Font_Glyph *fg;
@@ -744,48 +790,60 @@ evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt idx)
/* Transform the outline of Glyph according to runtime_rend. */
if (fi->runtime_rend & FONT_REND_SLANT)
- FT_Outline_Transform(&fi->src->ft.face->glyph->outline, &transform);
+ FT_Outline_Transform(&fi->src->ft.face->glyph->outline, &transform);
/* Embolden the outline of Glyph according to rundtime_rend. */
if (fi->runtime_rend & FONT_REND_WEIGHT)
- FT_GlyphSlot_Embolden(fi->src->ft.face->glyph);
+ FT_GlyphSlot_Embolden(fi->src->ft.face->glyph);
fg = calloc(1, sizeof(RGBA_Font_Glyph));
if (!fg) return NULL;
- FTLOCK();
- error = FT_Get_Glyph(fi->src->ft.face->glyph, &(fg->glyph));
- FTUNLOCK();
- if (error)
+ if (FT_HAS_COLOR(fi->src->ft.face))
{
- free(fg);
- if (!fi->fash) fi->fash = _fash_gl_new();
- if (fi->fash) _fash_gl_add(fi->fash, idx, (void *)(-1));
- return NULL;
- }
+ fg->advance.x = fi->src->ft.face->glyph->advance.x * 1024;
+ fg->advance.y = fi->src->ft.face->glyph->advance.y * 1024;
- {
- FT_BBox outbox;
- FT_Glyph_Get_CBox(fg->glyph,
- ((fi->hinting == 0) ? FT_GLYPH_BBOX_UNSCALED :
- FT_GLYPH_BBOX_GRIDFIT),
- &outbox);
- fg->width = EVAS_FONT_ROUND_26_6_TO_INT(outbox.xMax - outbox.xMin);
- fg->x_bear = EVAS_FONT_ROUND_26_6_TO_INT(outbox.xMin);
- fg->y_bear = EVAS_FONT_ROUND_26_6_TO_INT(outbox.yMax);
+ FT_GlyphSlot slot = fi->src->ft.face->glyph;
+ fg->width = EVAS_FONT_ROUND_26_6_TO_INT(slot->metrics.width);
+ fg->x_bear = EVAS_FONT_ROUND_26_6_TO_INT(slot->metrics.horiBearingX);
+ fg->y_bear = EVAS_FONT_ROUND_26_6_TO_INT(slot->metrics.horiBearingY);
if (FT_HAS_FIXED_SIZES(fi->src->ft.face))
{
- if (FT_HAS_COLOR(fi->src->ft.face) &&
- fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
+ if (fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
{
- fg->glyph->advance.x *= fi->scale_factor;
- fg->glyph->advance.y *= fi->scale_factor;
+ fg->advance.x *= fi->scale_factor;
+ fg->advance.y *= fi->scale_factor;
fg->width *= fi->scale_factor;
fg->x_bear *= fi->scale_factor;
fg->y_bear *= fi->scale_factor;
}
}
}
+ else
+ {
+ FTLOCK();
+ error = FT_Get_Glyph(fi->src->ft.face->glyph, &(fg->glyph));
+ FTUNLOCK();
+ if (error)
+ {
+ free(fg);
+ if (!fi->fash) fi->fash = _fash_gl_new();
+ if (fi->fash) _fash_gl_add(fi->fash, idx, (void *)(-1));
+ return NULL;
+ }
+ fg->advance.x = fg->glyph->advance.x;
+ fg->advance.y = fg->glyph->advance.y;
+
+ FT_BBox outbox;
+ FT_Glyph_Get_CBox(fg->glyph,
+ ((fi->hinting == 0) ? FT_GLYPH_BBOX_UNSCALED :
+ FT_GLYPH_BBOX_GRIDFIT),
+ &outbox);
+ fg->width = EVAS_FONT_ROUND_26_6_TO_INT(outbox.xMax - outbox.xMin);
+ fg->x_bear = EVAS_FONT_ROUND_26_6_TO_INT(outbox.xMin);
+ fg->y_bear = EVAS_FONT_ROUND_26_6_TO_INT(outbox.yMax);
+ }
fg->index = idx;
fg->fi = fi;
@@ -797,7 +855,26 @@ evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt idx)
return fg;
}
-EAPI Eina_Bool
+EVAS_API void
+evas_font_data_cache_set(Evas_Font_Data_Cache options, int bytes)
+{
+ if ((options & EVAS_FONT_DATA_CACHE_TEXTURE) == EVAS_FONT_DATA_CACHE_TEXTURE)
+ {
+ _evas_font_texture_cache = bytes;
+ //FIXME No direct free happend until next render call
+ }
+}
+
+EVAS_API int
+evas_font_data_cache_get(Evas_Font_Data_Cache options)
+{
+ if ((options & EVAS_FONT_DATA_CACHE_TEXTURE) == EVAS_FONT_DATA_CACHE_TEXTURE)
+ return _evas_font_texture_cache;
+ else
+ return -1;
+}
+
+EVAS_API Eina_Bool
evas_common_font_int_cache_glyph_render(RGBA_Font_Glyph *fg)
{
int size;
@@ -808,7 +885,7 @@ evas_common_font_int_cache_glyph_render(RGBA_Font_Glyph *fg)
/* no cserve2 case */
if (fg->glyph_out)
return EINA_TRUE;
-
+ evas_font_glyph_load(fg);
FTLOCK();
error = FT_Glyph_To_Bitmap(&(fg->glyph), FT_RENDER_MODE_NORMAL, 0, 1);
if (error)
@@ -857,6 +934,41 @@ evas_common_font_int_cache_glyph_render(RGBA_Font_Glyph *fg)
{
fg->glyph_out->rle = NULL;
fg->glyph_out->bitmap.rle_alloc = EINA_FALSE;
+ if (fi->is_resized)
+ {
+ int w = fbg->bitmap.width;
+ int h = fbg->bitmap.rows;
+
+ RGBA_Image src = {0};
+ src.image.data = (DATA32 *) fbg->bitmap.buffer;
+ src.cache_entry.w = w;
+ src.cache_entry.h = h;
+ src.cache_entry.flags.alpha = 1;
+
+ RGBA_Image dst = {0};
+ dst.cache_entry.w = w * fi->scale_factor;
+ dst.cache_entry.h = h * fi->scale_factor;
+ dst.image.data = malloc(dst.cache_entry.w * dst.cache_entry.h * 4);
+ dst.cache_entry.flags.alpha = 1;
+
+ evas_common_scale_rgba_smooth_draw(&src, &dst,
+ 0, 0, src.cache_entry.w , src.cache_entry.h,
+ 0xffffffff, EVAS_RENDER_COPY,
+ 0, 0, src.cache_entry.w , src.cache_entry.h,
+ 0, 0, dst.cache_entry.w, dst.cache_entry.h,
+ NULL, 0, 0);
+
+ fg->glyph_out->bitmap.rows = dst.cache_entry.h;
+ fg->glyph_out->bitmap.width = dst.cache_entry.w;
+ fg->glyph_out->bitmap.buffer = (unsigned char *) dst.image.data;
+ fg->glyph_out->bitmap.pitch = dst.cache_entry.w * 4;
+
+ fg->glyph_out->rle = NULL;
+ fg->glyph_out->bitmap.rle_alloc = EINA_TRUE;
+ // this may be technically incorrect as we go and free a bitmap buffer
+ // behind the ftglyph's back...
+ FT_Bitmap_Done(evas_ft_lib, &(fbg->bitmap));
+ }
}
return EINA_TRUE;
@@ -869,7 +981,7 @@ struct _Font_Char_Index
Eina_Unicode gl;
};
-EAPI FT_UInt
+EVAS_API FT_UInt
evas_common_get_char_index(RGBA_Font_Int* fi, Eina_Unicode gl, Eina_Unicode variation_sequence)
{
static const unsigned short mapfix[] =
@@ -1008,7 +1120,7 @@ evas_common_get_char_index(RGBA_Font_Int* fi, Eina_Unicode gl, Eina_Unicode vari
*
*/
-EAPI int
+EVAS_API int
evas_common_font_glyph_search(RGBA_Font *fn, RGBA_Font_Int **fi_ret, Eina_Unicode gl, Eina_Unicode variation_sequence, uint32_t evas_font_search_options)
{
Eina_List *l;
diff --git a/src/lib/evas/common/evas_font_ot.c b/src/lib/evas/common/evas_font_ot.c
index 47c624c99a..c2297a539c 100644
--- a/src/lib/evas/common/evas_font_ot.c
+++ b/src/lib/evas/common/evas_font_ot.c
@@ -122,7 +122,7 @@ _evas_script_to_harfbuzz[] =
#ifdef OT_SUPPORT
/* FIXME: doc. returns #items */
-EAPI int
+EVAS_API int
evas_common_font_ot_cluster_size_get(const Evas_Text_Props *props, size_t char_index)
{
int i;
@@ -188,7 +188,7 @@ _evas_common_font_ot_hb_get_glyph_advance(hb_font_t *font,
fg = evas_common_font_int_cache_glyph_get(fi, glyph);
if (fg)
{
- return fg->glyph->advance.x >> 10;
+ return fg->advance.x >> 10;
}
return 0;
}
@@ -264,7 +264,7 @@ _evas_common_font_ot_shape(hb_buffer_t *buffer, RGBA_Font_Int *fi, Evas_Text_Pro
}
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_font_ot_populate_text_props(const Eina_Unicode *text,
Evas_Text_Props *props, int len,
Evas_Text_Props_Mode mode,
diff --git a/src/lib/evas/common/evas_font_ot.h b/src/lib/evas/common/evas_font_ot.h
index e38e758b00..31625a3c45 100644
--- a/src/lib/evas/common/evas_font_ot.h
+++ b/src/lib/evas/common/evas_font_ot.h
@@ -33,11 +33,12 @@ struct _Evas_Font_OT_Info
# endif
#include "evas_font.h"
+#include "Evas.h"
-EAPI int
+EVAS_API int
evas_common_font_ot_cluster_size_get(const Evas_Text_Props *props, size_t char_index);
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_font_ot_populate_text_props(const Eina_Unicode *text,
Evas_Text_Props *props, int len, Evas_Text_Props_Mode mode, const char *lang);
#endif
diff --git a/src/lib/evas/common/evas_font_private.h b/src/lib/evas/common/evas_font_private.h
index 213ef7f96f..b84b463801 100644
--- a/src/lib/evas/common/evas_font_private.h
+++ b/src/lib/evas/common/evas_font_private.h
@@ -4,7 +4,7 @@
#include "evas_font.h"
/* macros needed to log message through eina_log */
-extern EAPI int _evas_font_log_dom_global;
+EVAS_API extern int _evas_font_log_dom_global;
#ifdef _EVAS_FONT_DEFAULT_LOG_DOM
# undef _EVAS_FONT_DEFAULT_LOG_DOM
#endif
diff --git a/src/lib/evas/common/evas_font_query.c b/src/lib/evas/common/evas_font_query.c
index bab7376621..b5fd5fbe14 100644
--- a/src/lib/evas/common/evas_font_query.c
+++ b/src/lib/evas/common/evas_font_query.c
@@ -16,8 +16,8 @@
* @param[in] run_let the current run len, i.e "search limit".
* @return length of the run found.
*/
-EAPI int
-evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script, const Eina_Unicode *text, int run_len)
+EVAS_API int
+evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script EINA_UNUSED, const Eina_Unicode *text, int run_len)
{
RGBA_Font_Int *fi = NULL;
const Eina_Unicode *run_end = text + run_len;
@@ -26,38 +26,7 @@ evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi
/* If there's no current script_fi, find it first */
if (!*script_fi)
{
- const Eina_Unicode *base_char = NULL;
- /* Skip common chars */
- for (base_char = text ;
- (base_char < run_end) &&
- (evas_common_language_char_script_get(*base_char) != script) ;
- base_char++)
- ;
- /* If counter reach variation sequence it is safe to pick default font */
- if(VAR_SEQ_SAFE(base_char) || (base_char != run_end && VAR_SEQ_SAFE((base_char+1)))) goto get_top_font;
-
- if (base_char == run_end) base_char = text;
-
- /* Find the first renderable char */
- while (base_char < run_end)
- {
- /* 0x1F is the last ASCII contral char, just a hack in
- * the meanwhile. */
- if ((*base_char > 0x1F) &&
- evas_common_font_glyph_search(fn, &fi, *base_char, 0, EVAS_FONT_SEARCH_OPTION_NONE))
- break;
- base_char++;
- }
-
-
- /* If everything else fails, at least try to find a font for the
- * replacement char */
- if (base_char == run_end)
- evas_common_font_glyph_search(fn, &fi, REPLACEMENT_CHAR, 0, EVAS_FONT_SEARCH_OPTION_NONE);
-get_top_font:
-
- if (!fi)
- fi = fn->fonts->data;
+ fi = fn->fonts->data;
*script_fi = fi;
}
@@ -68,6 +37,7 @@ get_top_font:
/* Find the longest run of the same font starting from the start position
* and update cur_fi accordingly. */
+ Eina_Unicode variation_sequence = 0;
itr = text;
while (itr < run_end)
{
@@ -85,7 +55,7 @@ get_top_font:
if (evas_common_language_char_script_get(*itr) == EVAS_SCRIPT_INHERITED)
continue;
- Eina_Unicode variation_sequence = VAR_SEQ_SAFE(itr+1);
+ variation_sequence = VAR_SEQ_SAFE(itr+1);
/* Break if either it's not in the font, or if it is in the
* script's font. */
@@ -200,7 +170,7 @@ get_top_font:
* @param[out] kerning the kerning calculated.
* @return FALSE on error, TRUE on success.
*/
-EAPI int
+EVAS_API int
evas_common_font_query_kerning(RGBA_Font_Int *fi, FT_UInt left, FT_UInt right,
int *kerning)
{
@@ -265,7 +235,7 @@ evas_common_font_query_kerning(RGBA_Font_Int *fi, FT_UInt left, FT_UInt right,
* @param text_props the string object.
* @return the calculated inset.
*/
-EAPI int
+EVAS_API int
evas_common_font_query_inset(RGBA_Font *fn EINA_UNUSED, const Evas_Text_Props *text_props)
{
if (!text_props->len) return 0;
@@ -284,7 +254,7 @@ evas_common_font_query_inset(RGBA_Font *fn EINA_UNUSED, const Evas_Text_Props *t
*
* @see evas_common_font_query_inset()
*/
-EAPI int
+EVAS_API int
evas_common_font_query_right_inset(RGBA_Font *fn EINA_UNUSED, const Evas_Text_Props *text_props)
{
const Evas_Font_Glyph_Info *gli;
@@ -317,7 +287,7 @@ evas_common_font_query_right_inset(RGBA_Font *fn EINA_UNUSED, const Evas_Text_Pr
* @param[out] ascent the calculated ascent
* @param[out] descent the calculated descent
*/
-EAPI void
+EVAS_API void
evas_common_font_ascent_descent_get(RGBA_Font *fn, const Evas_Text_Props *text_props, int *ascent, int *descent)
{
int asc = 0, desc = 0;
@@ -358,7 +328,7 @@ evas_common_font_ascent_descent_get(RGBA_Font *fn, const Evas_Text_Props *text_p
* @param[out] w the calculated width
* @param[out] h the calculated height
*/
-EAPI void
+EVAS_API void
evas_common_font_query_size(RGBA_Font *fn, const Evas_Text_Props *text_props, int *w, int *h)
{
Evas_Coord ret_w = 0;
@@ -422,7 +392,7 @@ evas_common_font_query_size(RGBA_Font *fn, const Evas_Text_Props *text_props, in
* @param[out] h_adv the calculated horizontal advance.
* @param[out] v_adv the calculated vertical advance.
*/
-EAPI void
+EVAS_API void
evas_common_font_query_advance(RGBA_Font *fn, const Evas_Text_Props *text_props, int *h_adv, int *v_adv)
{
Evas_Coord ret_adv = 0;
@@ -471,7 +441,7 @@ evas_common_font_query_advance(RGBA_Font *fn, const Evas_Text_Props *text_props,
*
* @see evas_common_font_query_pen_coords()
*/
-EAPI int
+EVAS_API int
evas_common_font_query_char_coords(RGBA_Font *fn, const Evas_Text_Props *text_props, int pos, int *cx, int *cy, int *cw, int *ch)
{
int asc, desc;
@@ -607,7 +577,7 @@ end:
*
* @see evas_common_font_query_char_coords()
*/
-EAPI int
+EVAS_API int
evas_common_font_query_pen_coords(RGBA_Font *fn, const Evas_Text_Props *text_props, int pos, int *cpen_x, int *cy, int *cadv, int *ch)
{
int asc, desc;
@@ -732,7 +702,7 @@ end:
* @param[out] ch the calculated height - CAN BE NULL
* @return the position found, -1 on failure.
*/
-EAPI int
+EVAS_API int
evas_common_font_query_char_at_coords(RGBA_Font *fn, const Evas_Text_Props *text_props, int x, int y, int *cx, int *cy, int *cw, int *ch)
{
int asc, desc;
@@ -845,7 +815,7 @@ end:
* @param width_offset the additional width only for allowing glyph's.
* @return the position found, -1 on failure.
*/
-EAPI int
+EVAS_API int
evas_common_font_query_last_up_to_pos(RGBA_Font *fn, const Evas_Text_Props *text_props, int x, int y, int width_offset)
{
int asc, desc;
diff --git a/src/lib/evas/common/evas_image.h b/src/lib/evas/common/evas_image.h
index 281e82a616..c5a512dab6 100644
--- a/src/lib/evas/common/evas_image.h
+++ b/src/lib/evas/common/evas_image.h
@@ -2,61 +2,62 @@
#define _EVAS_IMAGE_H
-EAPI void evas_common_image_init (void);
-EAPI void evas_common_image_shutdown (void);
+EVAS_API void evas_common_image_init (void);
+EVAS_API void evas_common_image_shutdown (void);
-EAPI void evas_common_image_image_all_unload (void);
+EVAS_API void evas_common_image_image_all_unload (void);
-EAPI void evas_common_rgba_pending_unloads_cleanup (void);
-EAPI void evas_common_rgba_pending_unloads_remove (Image_Entry *ie);
+EVAS_API void evas_common_rgba_pending_unloads_cleanup (void);
+EVAS_API void evas_common_rgba_pending_unloads_remove (Image_Entry *ie);
-EAPI void evas_common_rgba_image_free (Image_Entry *ie);
-EAPI void evas_common_rgba_image_unload (Image_Entry *ie);
-EAPI void evas_common_image_colorspace_normalize (RGBA_Image *im);
-EAPI void evas_common_image_colorspace_dirty (RGBA_Image *im);
-EAPI void evas_common_image_cache_free (void); /*2*/
-EAPI void evas_common_image_premul (Image_Entry *ie); /*2*/
-EAPI void evas_common_image_set_alpha_sparse (Image_Entry *ie); /*2*/
-/* EAPI RGBA_Image *evas_common_image_alpha_create (int w, int h); */
-/* EAPI RGBA_Image *evas_common_image_create (int w, int h); */
-EAPI RGBA_Image *evas_common_image_new (unsigned int w, unsigned int h, unsigned int alpha);
-EAPI Evas_Cache_Image *evas_common_image_cache_get (void);
+EVAS_API void evas_common_rgba_image_free (Image_Entry *ie);
+EVAS_API void evas_common_rgba_image_unload (Image_Entry *ie);
+EVAS_API void evas_common_image_colorspace_normalize (RGBA_Image *im);
+EVAS_API void evas_common_image_colorspace_dirty (RGBA_Image *im);
+EVAS_API void evas_common_image_cache_free (void); /*2*/
+EVAS_API void evas_common_image_premul (Image_Entry *ie); /*2*/
+EVAS_API void evas_common_image_set_alpha_sparse (Image_Entry *ie); /*2*/
+/* EVAS_API RGBA_Image *evas_common_image_alpha_create (int w, int h); */
+/* EVAS_API RGBA_Image *evas_common_image_create (int w, int h); */
+EVAS_API RGBA_Image *evas_common_image_new (unsigned int w, unsigned int h, unsigned int alpha);
+EVAS_API Evas_Cache_Image *evas_common_image_cache_get (void);
-EAPI void evas_common_image_set_cache (unsigned int size);
-EAPI int evas_common_image_get_cache (void);
+EVAS_API void evas_common_image_set_cache (unsigned int size);
+EVAS_API int evas_common_image_get_cache (void);
-EAPI RGBA_Image *evas_common_image_line_buffer_obtain (int len);
-EAPI void evas_common_image_line_buffer_release (RGBA_Image *im);
+EVAS_API RGBA_Image *evas_common_image_line_buffer_obtain (int len);
+EVAS_API void evas_common_image_line_buffer_release (RGBA_Image *im);
-EAPI RGBA_Image *evas_common_image_alpha_line_buffer_obtain (int len);
-EAPI void evas_common_image_alpha_line_buffer_release (RGBA_Image *im);
-EAPI void evas_common_image_alpha_line_buffer_free (RGBA_Image *im);
+EVAS_API RGBA_Image *evas_common_image_alpha_line_buffer_obtain (int len);
+EVAS_API void evas_common_image_alpha_line_buffer_release (RGBA_Image *im);
+EVAS_API void evas_common_image_alpha_line_buffer_free (RGBA_Image *im);
-EAPI RGBA_Image *evas_common_load_image_from_mmap (Eina_File *f, const char *key, Evas_Image_Load_Opts *lo, int *error);
-EAPI int evas_common_save_image_to_file (RGBA_Image *im, const char *file, const char *key, int quality, int compress, const char *encoding);
+EVAS_API RGBA_Image *evas_common_load_image_from_file (const char *file, const char *key, Evas_Image_Load_Opts *lo, int *error);
+EVAS_API RGBA_Image *evas_common_load_image_from_mmap (Eina_File *f, const char *key, Evas_Image_Load_Opts *lo, int *error);
+EVAS_API int evas_common_save_image_to_file (RGBA_Image *im, const char *file, const char *key, int quality, int compress, const char *encoding);
-EAPI void evas_common_rgba_image_scalecache_init(Image_Entry *ie);
-EAPI void evas_common_rgba_image_scalecache_shutdown(Image_Entry *ie);
-EAPI void evas_common_rgba_image_scalecache_size_set(unsigned int size);
-EAPI unsigned int evas_common_rgba_image_scalecache_size_get(void);
-EAPI void evas_common_rgba_image_scalecache_flush(void);
-EAPI void evas_common_rgba_image_scalecache_dump(void);
-EAPI void evas_common_rgba_image_scalecache_prune(void);
-EAPI Eina_Bool
+EVAS_API void evas_common_rgba_image_scalecache_init(Image_Entry *ie);
+EVAS_API void evas_common_rgba_image_scalecache_shutdown(Image_Entry *ie);
+EVAS_API void evas_common_rgba_image_scalecache_size_set(unsigned int size);
+EVAS_API unsigned int evas_common_rgba_image_scalecache_size_get(void);
+EVAS_API void evas_common_rgba_image_scalecache_flush(void);
+EVAS_API void evas_common_rgba_image_scalecache_dump(void);
+EVAS_API void evas_common_rgba_image_scalecache_prune(void);
+EVAS_API Eina_Bool
evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst,
RGBA_Draw_Context *dc, int smooth,
int src_region_x, int src_region_y,
int src_region_w, int src_region_h,
int dst_region_x, int dst_region_y,
int dst_region_w, int dst_region_h);
-EAPI void
+EVAS_API void
evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
RGBA_Draw_Context *dc, int smooth,
int src_region_x, int src_region_y,
int src_region_w, int src_region_h,
int dst_region_x, int dst_region_y,
int dst_region_w, int dst_region_h);
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_rgba_image_scalecache_do_cbs(Image_Entry *ie, RGBA_Image *dst,
RGBA_Draw_Context *dc, int smooth,
int src_region_x, int src_region_y,
@@ -67,15 +68,15 @@ EAPI Eina_Bool
Evas_Common_Scale_In_To_Out_Clip_Cb cb_smooth);
-EAPI int evas_common_load_rgba_image_module_from_file (Image_Entry *im);
-EAPI int evas_common_load_rgba_image_data_from_file (Image_Entry *im);
-EAPI double evas_common_load_rgba_image_frame_duration_from_file(Image_Entry *im, int start_frame, int frame_num);
+EVAS_API int evas_common_load_rgba_image_module_from_file (Image_Entry *im);
+EVAS_API int evas_common_load_rgba_image_data_from_file (Image_Entry *im);
+EVAS_API double evas_common_load_rgba_image_frame_duration_from_file(Image_Entry *im, int start_frame, int frame_num);
void _evas_common_rgba_image_post_surface(Image_Entry *ie);
-EAPI int _evas_common_rgba_image_surface_size(unsigned int w, unsigned int h, Evas_Colorspace cspace, /* inout */ int *l, int *r, int *t, int *b);
-EAPI int _evas_common_rgba_image_data_offset(int rx, int ry, int rw, int rh, int plane, const RGBA_Image *im);
-EAPI Eina_Bool _evas_common_rgba_image_plane_get(const RGBA_Image *im, int plane, Eina_Slice *slice);
+EVAS_API int _evas_common_rgba_image_surface_size(unsigned int w, unsigned int h, Evas_Colorspace cspace, /* inout */ int *l, int *r, int *t, int *b);
+EVAS_API int _evas_common_rgba_image_data_offset(int rx, int ry, int rw, int rh, int plane, const RGBA_Image *im);
+EVAS_API Eina_Bool _evas_common_rgba_image_plane_get(const RGBA_Image *im, int plane, Eina_Slice *slice);
-EAPI Eina_Bool evas_common_extension_can_load_get(const char *file);
+EVAS_API Eina_Bool evas_common_extension_can_load_get(const char *file);
#endif /* _EVAS_IMAGE_H */
diff --git a/src/lib/evas/common/evas_image_load.c b/src/lib/evas/common/evas_image_load.c
index a969153528..797fae37ea 100644
--- a/src/lib/evas/common/evas_image_load.c
+++ b/src/lib/evas/common/evas_image_load.c
@@ -23,49 +23,56 @@ struct ext_loader_s
static const struct ext_loader_s loaders[] =
{ /* map extensions to loaders to use for good first-guess tries */
MATCHING(".png", "png"),
-
+
MATCHING(".jpg", "jpeg"),
MATCHING(".jpeg", "jpeg"),
MATCHING(".jfif", "jpeg"),
-
+
MATCHING(".j2k", "jp2k"),
MATCHING(".jp2", "jp2k"),
MATCHING(".jpx", "jp2k"),
MATCHING(".jpf", "jp2k"),
-
+
MATCHING(".eet", "eet"),
MATCHING(".edj", "eet"),
MATCHING(".eap", "eet"),
-
+
MATCHING(".xpm", "xpm"),
-
+
MATCHING(".tiff", "tiff"),
MATCHING(".tif", "tiff"),
-
+
MATCHING(".gif", "gif"),
-
+
MATCHING(".pbm", "pmaps"),
MATCHING(".pgm", "pmaps"),
MATCHING(".ppm", "pmaps"),
MATCHING(".pnm", "pmaps"),
-
+
MATCHING(".bmp", "bmp"),
-
+
MATCHING(".tga", "tga"),
-
+
MATCHING(".wbmp", "wbmp"),
-
+
MATCHING(".webp", "webp"),
-
+
MATCHING(".ico", "ico"),
MATCHING(".cur", "ico"),
-
+
MATCHING(".psd", "psd"),
MATCHING(".tgv", "tgv"),
MATCHING(".dds", "dds"),
+ MATCHING(".avif", "avif"),
+ MATCHING(".avifs", "avif"),
+
+ MATCHING(".heif", "heif"),
+ MATCHING(".heic", "heif"),
+ // MATCHING(".avif", "heif"),
+
/* xcf - gefenric */
MATCHING(".xcf", "generic"),
MATCHING(".xcf.gz", "generic"),
@@ -93,6 +100,7 @@ static const struct ext_loader_s loaders[] =
MATCHING(".dcr", "generic"),
MATCHING(".dng", "generic"),
MATCHING(".erf", "generic"),
+ MATCHING(".fff", "generic"),
MATCHING(".k25", "generic"),
MATCHING(".kdc", "generic"),
MATCHING(".mrw", "generic"),
@@ -163,7 +171,8 @@ 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", "generic"
+ "bmp", "tga", "wbmp", "ico", "psd", "jp2k", "dds", "avif", "heif",
+ "generic"
};
struct evas_image_foreach_loader_data
@@ -262,7 +271,7 @@ _evas_image_foreach_loader(const Eina_Hash *hash EINA_UNUSED, const void *key EI
return r;
}
-EAPI int
+EVAS_API int
evas_common_load_rgba_image_module_from_file(Image_Entry *ie)
{
const char *loader = NULL, *end;
@@ -388,7 +397,7 @@ _timestamp_build(Image_Timestamp *tstamp, struct stat *st)
#endif
}
-EAPI int
+EVAS_API int
evas_common_load_rgba_image_data_from_file(Image_Entry *ie)
{
void *pixels;
@@ -491,7 +500,7 @@ end:
return ret;
}
-EAPI double
+EVAS_API double
evas_common_load_rgba_image_frame_duration_from_file(Image_Entry *ie, const int start, const int frame_num)
{
Evas_Image_Load_Func *evas_image_load_func = NULL;
@@ -508,7 +517,7 @@ evas_common_load_rgba_image_frame_duration_from_file(Image_Entry *ie, const int
return -1;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_extension_can_load_get(const char *file)
{
unsigned int length;
diff --git a/src/lib/evas/common/evas_image_main.c b/src/lib/evas/common/evas_image_main.c
index e06fc9f653..a94be359e3 100644
--- a/src/lib/evas/common/evas_image_main.c
+++ b/src/lib/evas/common/evas_image_main.c
@@ -1,5 +1,5 @@
#ifdef HAVE_CONFIG_H
-# include "config.h" /* so that EAPI in Eet.h is correctly defined */
+# include "config.h" /* so that EVAS_API in Eet.h is correctly defined */
#endif
#ifdef _WIN32
@@ -79,7 +79,7 @@ static const Evas_Cache_Image_Func _evas_common_image_func =
NULL // _evas_common_rgba_image_debug
};
-EAPI int
+EVAS_API int
_evas_common_rgba_image_surface_size(unsigned int w, unsigned int h,
Evas_Colorspace cspace,
/*inout*/int *l, int *r, int *t, int *b)
@@ -152,7 +152,7 @@ _evas_common_rgba_image_surface_size(unsigned int w, unsigned int h,
#undef ALIGN_TO_PAGE
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
_evas_common_rgba_image_plane_get(const RGBA_Image *im, int plane,
Eina_Slice *slice)
{
@@ -306,7 +306,7 @@ _evas_common_rgba_image_plane_get(const RGBA_Image *im, int plane,
}
}
-EAPI int
+EVAS_API int
_evas_common_rgba_image_data_offset(int rx, int ry, int rw, int rh,
int plane, const RGBA_Image *im)
{
@@ -432,7 +432,7 @@ evas_common_rgba_image_surface_munmap(void *data, unsigned int w, unsigned int h
#endif
}
-EAPI void
+EVAS_API void
evas_common_image_init(void)
{
if (!eci) eci = evas_cache_image_init(&_evas_common_image_func);
@@ -441,7 +441,7 @@ evas_common_image_init(void)
evas_common_scalecache_init();
}
-EAPI void
+EVAS_API void
evas_common_image_shutdown(void)
{
if (--reference == 0)
@@ -468,7 +468,7 @@ evas_common_image_shutdown(void)
evas_common_scalecache_shutdown();
}
-EAPI void
+EVAS_API void
evas_common_image_image_all_unload(void)
{
evas_common_rgba_image_scalecache_dump();
@@ -570,7 +570,7 @@ evas_common_rgba_image_unload_real(Image_Entry *ie)
static Eina_List *pending_unloads = NULL;
-EAPI void
+EVAS_API void
evas_common_rgba_pending_unloads_cleanup(void)
{
Image_Entry *ie;
@@ -587,7 +587,7 @@ evas_common_rgba_pending_unloads_cleanup(void)
}
}
-EAPI void
+EVAS_API void
evas_common_rgba_pending_unloads_remove(Image_Entry *ie)
{
if (!ie->need_unload) return;
@@ -595,7 +595,7 @@ evas_common_rgba_pending_unloads_remove(Image_Entry *ie)
pending_unloads = eina_list_remove(pending_unloads, ie);
}
-EAPI void
+EVAS_API void
evas_common_rgba_image_free(Image_Entry *ie)
{
if (ie->references > 0) return;
@@ -628,7 +628,7 @@ surf_debug(void)
}
#endif
-EAPI void
+EVAS_API void
evas_common_rgba_image_unload(Image_Entry *ie)
{
if (!ie->flags.loaded) return;
@@ -886,7 +886,7 @@ evas_common_image_create(unsigned int w, unsigned int h)
return im;
}
-EAPI RGBA_Image *
+EVAS_API RGBA_Image *
evas_common_image_alpha_create(unsigned int w, unsigned int h)
{
RGBA_Image *im;
@@ -905,7 +905,7 @@ evas_common_image_alpha_create(unsigned int w, unsigned int h)
return im;
}
-EAPI RGBA_Image *
+EVAS_API RGBA_Image *
evas_common_image_new(unsigned int w, unsigned int h, unsigned int alpha)
{
if (alpha) return evas_common_image_alpha_create(w, h);
@@ -985,7 +985,7 @@ evas_common_image_colorspace_normalize(RGBA_Image *im)
#endif
}
-EAPI void
+EVAS_API void
evas_common_image_colorspace_dirty(RGBA_Image *im)
{
im->cs.dirty = 1;
@@ -1002,20 +1002,32 @@ evas_common_image_colorspace_dirty(RGBA_Image *im)
#endif
}
-EAPI void
+EVAS_API void
evas_common_image_set_cache(unsigned int size)
{
if (eci)
evas_cache_image_set(eci, size);
}
-EAPI int
+EVAS_API int
evas_common_image_get_cache(void)
{
return evas_cache_image_get(eci);
}
-EAPI RGBA_Image *
+EVAS_API RGBA_Image *
+evas_common_load_image_from_file(const char *file, const char *key,
+ Evas_Image_Load_Opts *lo, int *error)
+{
+ if (!file)
+ {
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ return NULL;
+ }
+ return (RGBA_Image *) evas_cache_image_request(eci, file, key, lo, error);
+}
+
+EVAS_API RGBA_Image *
evas_common_load_image_from_mmap(Eina_File *f, const char *key,
Evas_Image_Load_Opts *lo, int *error)
{
@@ -1027,19 +1039,19 @@ evas_common_load_image_from_mmap(Eina_File *f, const char *key,
return (RGBA_Image *) evas_cache_image_mmap_request(eci, f, key, lo, error);
}
-EAPI void
+EVAS_API void
evas_common_image_cache_free(void)
{
evas_common_image_set_cache(0);
}
-EAPI Evas_Cache_Image*
+EVAS_API Evas_Cache_Image*
evas_common_image_cache_get(void)
{
return eci;
}
-EAPI RGBA_Image *
+EVAS_API RGBA_Image *
evas_common_image_line_buffer_obtain(int len)
{
if (len < 1) return NULL;
@@ -1048,19 +1060,19 @@ evas_common_image_line_buffer_obtain(int len)
return evas_common_image_create(len, 1);
}
-EAPI void
+EVAS_API void
evas_common_image_line_buffer_release(RGBA_Image *im)
{
_evas_common_rgba_image_delete(&im->cache_entry);
}
-EAPI void
+EVAS_API void
evas_common_image_line_buffer_free(RGBA_Image *im)
{
_evas_common_rgba_image_delete(&im->cache_entry);
}
-EAPI RGBA_Image *
+EVAS_API RGBA_Image *
evas_common_image_alpha_line_buffer_obtain(int len)
{
if (len < 1) return NULL;
@@ -1069,13 +1081,13 @@ evas_common_image_alpha_line_buffer_obtain(int len)
return evas_common_image_alpha_create(len, 1);
}
-EAPI void
+EVAS_API void
evas_common_image_alpha_line_buffer_release(RGBA_Image *im)
{
_evas_common_rgba_image_delete(&im->cache_entry);
}
-EAPI void
+EVAS_API void
evas_common_image_premul(Image_Entry *ie)
{
DATA32 nas = 0;
@@ -1099,7 +1111,7 @@ evas_common_image_premul(Image_Entry *ie)
ie->flags.alpha_sparse = 1;
}
-EAPI void
+EVAS_API void
evas_common_image_set_alpha_sparse(Image_Entry *ie)
{
DATA32 *s, *se;
@@ -1110,6 +1122,7 @@ evas_common_image_set_alpha_sparse(Image_Entry *ie)
if (!ie->flags.alpha) return;
s = evas_cache_image_pixels(ie);
+ if (!s) return;
se = s + (ie->w * ie->h);
while (s < se)
{
diff --git a/src/lib/evas/common/evas_image_save.c b/src/lib/evas/common/evas_image_save.c
index 9a6a7621c1..45718c5b9f 100644
--- a/src/lib/evas/common/evas_image_save.c
+++ b/src/lib/evas/common/evas_image_save.c
@@ -33,6 +33,8 @@ evas_common_save_image_to_file(RGBA_Image *im, const char *file, const char *key
saver = "webp";
if (!strcasecmp(p, "tgv"))
saver = "tgv";
+ if (!strcasecmp(p, "avif"))
+ saver = "avif";
}
if (saver)
diff --git a/src/lib/evas/common/evas_image_scalecache.c b/src/lib/evas/common/evas_image_scalecache.c
index 65cb9a3c21..709f0db41f 100644
--- a/src/lib/evas/common/evas_image_scalecache.c
+++ b/src/lib/evas/common/evas_image_scalecache.c
@@ -444,7 +444,7 @@ _cache_prune(Scaleitem *notsci, Eina_Bool copies_only)
}
#endif
-EAPI void
+EVAS_API void
evas_common_rgba_image_scalecache_size_set(unsigned int size)
{
#ifdef SCALECACHE
@@ -455,10 +455,10 @@ evas_common_rgba_image_scalecache_size_set(unsigned int size)
_cache_prune(NULL, 1);
}
SLKU(cache_lock);
-#endif
+#endif
}
-EAPI unsigned int
+EVAS_API unsigned int
evas_common_rgba_image_scalecache_size_get(void)
{
#ifdef SCALECACHE
@@ -469,10 +469,10 @@ evas_common_rgba_image_scalecache_size_get(void)
return t;
#else
return 0;
-#endif
+#endif
}
-EAPI void
+EVAS_API void
evas_common_rgba_image_scalecache_prune(void)
{
#ifdef SCALECACHE
@@ -482,7 +482,7 @@ evas_common_rgba_image_scalecache_prune(void)
#endif
}
-EAPI void
+EVAS_API void
evas_common_rgba_image_scalecache_dump(void)
{
#ifdef SCALECACHE
@@ -493,10 +493,10 @@ evas_common_rgba_image_scalecache_dump(void)
_cache_prune(NULL, 0);
max_cache_size = t;
SLKU(cache_lock);
-#endif
+#endif
}
-EAPI void
+EVAS_API void
evas_common_rgba_image_scalecache_flush(void)
{
#ifdef SCALECACHE
@@ -507,10 +507,10 @@ evas_common_rgba_image_scalecache_flush(void)
_cache_prune(NULL, 1);
max_cache_size = t;
SLKU(cache_lock);
-#endif
+#endif
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst EINA_UNUSED,
RGBA_Draw_Context *dc, int smooth,
int src_region_x, int src_region_y,
@@ -534,7 +534,7 @@ evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst EINA_
if (ret == EINA_FALSE) /* can't get image lock */
{
useconds_t slp = 1, slpt = 0;
-
+
while (slpt < 500000)
{
#ifdef _WIN32
@@ -567,7 +567,7 @@ evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst EINA_
printf("WARNING: DEADLOCK on image %p (%s)\n", im, ie->file);
}
else locked = 1;
-#endif
+#endif
if (!locked) { SLKL(im->cache.lock); locked = 1; }
use_counter++;
if ((src_region_w == dst_region_w) && (src_region_h == dst_region_h))
@@ -588,8 +588,8 @@ evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst EINA_
return EINA_FALSE;
}
SLKL(cache_lock);
- sci = _sci_find(im, dc, smooth,
- src_region_x, src_region_y, src_region_w, src_region_h,
+ sci = _sci_find(im, dc, smooth,
+ src_region_x, src_region_y, src_region_w, src_region_h,
dst_region_w, dst_region_h);
if (!sci)
{
@@ -609,7 +609,7 @@ evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst EINA_
{
if (!sci->im)
{
- if ((sci->key.dst_w < max_dimension) &&
+ if ((sci->key.dst_w < max_dimension) &&
(sci->key.dst_h < max_dimension))
{
if (sci->flop <= max_flop_count)
@@ -623,12 +623,12 @@ evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst EINA_
sci->usage++;
sci->usage_count = use_counter;
SLKU(cache_lock);
- if (sci->usage > im->cache.newest_usage)
+ if (sci->usage > im->cache.newest_usage)
im->cache.newest_usage = sci->usage;
-// INF("newset? %p %i > %i", im,
-// (int)sci->usage,
+// INF("newset? %p %i > %i", im,
+// (int)sci->usage,
// (int)im->cache.newest_usage);
- if (sci->usage_count > im->cache.newest_usage_count)
+ if (sci->usage_count > im->cache.newest_usage_count)
im->cache.newest_usage_count = sci->usage_count;
// INF(" -------------- used %8i#, %8i@", (int)sci->usage, (int)sci->usage_count);
if (locked) SLKU(im->cache.lock);
@@ -644,7 +644,7 @@ evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst EINA_
//static int noscales = 0;
#endif
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_rgba_image_scalecache_do_cbs(Image_Entry *ie, RGBA_Image *dst,
RGBA_Draw_Context *dc, int smooth,
int src_region_x, int src_region_y,
@@ -953,7 +953,7 @@ evas_common_rgba_image_scalecache_do_cbs(Image_Entry *ie, RGBA_Image *dst,
}
-EAPI void
+EVAS_API void
evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
RGBA_Draw_Context *dc, int smooth,
int src_region_x, int src_region_y,
diff --git a/src/lib/evas/common/evas_line.h b/src/lib/evas/common/evas_line.h
index a19dbd8529..d518f63939 100644
--- a/src/lib/evas/common/evas_line.h
+++ b/src/lib/evas/common/evas_line.h
@@ -3,14 +3,14 @@
typedef void (*Evas_Common_Line_Draw_Cb)(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1);
-EAPI void evas_common_line_point_draw (RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x, int y, RGBA_Image *mask_ie, int mask_x, int mask_y);
+EVAS_API void evas_common_line_point_draw (RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x, int y, RGBA_Image *mask_ie, int mask_x, int mask_y);
-EAPI void evas_common_line_init (void);
+EVAS_API void evas_common_line_init (void);
-EAPI void evas_common_line_draw_line (RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x1, int y1, int x2, int y2, RGBA_Image *mask_ie, int mask_x, int mask_y);
-EAPI void evas_common_line_draw_line_aa (RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x1, int y1, int x2, int y2, RGBA_Image *mask_ie, int mask_x, int mask_y);
-EAPI void evas_common_line_draw_cb (RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, int x2, int y2, Evas_Common_Line_Draw_Cb cb);
-EAPI void evas_common_line_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, int x2, int y2);
+EVAS_API void evas_common_line_draw_line (RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x1, int y1, int x2, int y2, RGBA_Image *mask_ie, int mask_x, int mask_y);
+EVAS_API void evas_common_line_draw_line_aa (RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x1, int y1, int x2, int y2, RGBA_Image *mask_ie, int mask_x, int mask_y);
+EVAS_API void evas_common_line_draw_cb (RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, int x2, int y2, Evas_Common_Line_Draw_Cb cb);
+EVAS_API void evas_common_line_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, int x2, int y2);
#endif /* _EVAS_LINE_H */
diff --git a/src/lib/evas/common/evas_line_main.c b/src/lib/evas/common/evas_line_main.c
index 21dd74277d..7c8072adfa 100644
--- a/src/lib/evas/common/evas_line_main.c
+++ b/src/lib/evas/common/evas_line_main.c
@@ -20,7 +20,7 @@
x1 = _tmp; \
}
-EAPI void
+EVAS_API void
evas_common_line_init(void)
{
}
@@ -37,17 +37,17 @@ _evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y)
if ((dc->clip.use) && (!IN_RECT(x, y, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h)))
return;
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
pixman_op_t op = PIXMAN_OP_SRC;
-
+
if (dc->render_op == _EVAS_RENDER_BLEND)
op = PIXMAN_OP_OVER;
if ((dst->pixman.im) && (dc->col.pixman_color_image))
- pixman_image_composite(op, dc->col.pixman_color_image, NULL,
+ pixman_image_composite(op, dc->col.pixman_color_image, NULL,
dst->pixman.im, x, y, 0, 0, x, y, 1, 1);
else
-# endif
+# endif
#endif
{
if (dc->clip.mask)
@@ -69,7 +69,7 @@ _evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y)
}
}
-EAPI void
+EVAS_API void
evas_common_line_point_draw(RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x, int y, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
Eina_Bool no_cuse;
@@ -166,7 +166,7 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
len = x1 - x0 + 1;
p = dst->image.data + (dstw * y0) + x0;
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
if ((dst->pixman.im) && (dc->col.pixman_color_image))
pixman_image_composite(op, dc->col.pixman_color_image,
NULL, dst->pixman.im,
@@ -211,7 +211,7 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
len = y1 - y0 + 1;
p = dst->image.data + (dstw * y0) + x0;
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
if ((dst->pixman.im) && (dc->col.pixman_color_image))
pixman_image_composite(op, dc->col.pixman_color_image,
NULL, dst->pixman.im,
@@ -343,7 +343,7 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
}
}
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
int pixman_x_position = x0;
int pixman_y_position = y0;
int x_unit = dstw - dst->cache_entry.w;
@@ -352,7 +352,7 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
while (len--)
{
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
if ((dst->pixman.im) && (dc->col.pixman_color_image))
pixman_image_composite(op, dc->col.pixman_color_image,
NULL, dst->pixman.im,
@@ -373,7 +373,7 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
pfunc(0, 255, color, p);
}
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
pixman_x_position += x_unit;
pixman_y_position += 1;
# endif
@@ -747,7 +747,7 @@ _draw_render_thread_simple_line(RGBA_Image *dst, int clip_x, int clip_y, int cli
}
}
-EAPI void
+EVAS_API void
evas_common_line_draw_line(RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x0, int y0, int x1, int y1, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
int px, py, x, y, prev_x, prev_y;
@@ -1050,14 +1050,14 @@ next_x:
if (IN_RANGE(px, py, clw, clh))
{
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
if ((dst->pixman.im) && (dc->col.pixman_color_image))
pixman_image_composite(op, dc->col.pixman_color_image,
NULL, dst->pixman.im,
pix_x, pix_y, 0, 0,
pix_x, pix_y, 1, 1);
else
-# endif
+# endif
#endif
{
if (mask) pfunc(0, *mask, color, p);
@@ -1070,14 +1070,14 @@ next_y:
p += dstw;
if (mask) mask += mask_w;
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
pix_y += pix_y_unit;
-# endif
+# endif
#endif
}
}
-EAPI void
+EVAS_API void
evas_common_line_draw_line_aa(RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 color, int render_op, int x0, int y0, int x1, int y1, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
int px, py, x, y, prev_x, prev_y;
@@ -1249,7 +1249,7 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
dy = y1 - y0;
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
int pix_x;
int pix_y;
int pix_x_unit;
@@ -1257,7 +1257,7 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
pixman_image_t *aa_mask_image;
int alpha_data_buffer;
-
+
pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
if (dc->render_op == _EVAS_RENDER_BLEND)
op = PIXMAN_OP_OVER;
@@ -1331,9 +1331,9 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
if (mask) mask += mask_w;
py += dely;
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
pix_y += pix_y_unit;
-# endif
+# endif
#endif
}
if (!p1_in)
@@ -1351,11 +1351,11 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
if ((py) < clh)
{
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
alpha_data_buffer = 255 - aa;
aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1,
(uint32_t *)&alpha_data_buffer, 4);
-
+
if ((dst->pixman.im) && (dc->col.pixman_color_image))
pixman_image_composite(op, dc->col.pixman_color_image,
aa_mask_image, dst->pixman.im,
@@ -1369,7 +1369,7 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
else pfunc(0, 255 - aa, color, p);
}
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
pixman_image_unref(aa_mask_image);
# endif
#endif
@@ -1377,11 +1377,11 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
if ((py + 1) < clh)
{
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
alpha_data_buffer = aa;
aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1,
(uint32_t *)&alpha_data_buffer, 4);
-
+
if ((dst->pixman.im) && (dc->col.pixman_color_image))
pixman_image_composite(op, dc->col.pixman_color_image,
aa_mask_image, dst->pixman.im,
@@ -1395,27 +1395,27 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
else pfunc(0, aa, color, p + dstw);
}
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
pixman_image_unref(aa_mask_image);
# endif
#endif
}
}
-
+
next_x:
yy += dyy;
px++;
p++;
if (mask) mask++;
#ifdef HAVE_PIXMAN
-# ifdef PIXMAN_LINE
+# ifdef PIXMAN_LINE
pix_x += pix_x_unit;
# endif
#endif
}
return;
}
-
+
/* steep: y-parametric */
SETUP_LINE_STEEP;
if (mask) mask += (py * mask_w) + px;
@@ -1423,7 +1423,7 @@ next_x:
while (py < by)
{
DATA8 aa;
-
+
x = (xx >> 16);
if (prev_x != x)
{
@@ -1455,7 +1455,7 @@ next_x:
# ifdef PIXMAN_LINE
alpha_data_buffer = 255 - aa;
aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1, (uint32_t *)&alpha_data_buffer, 4);
-
+
if ((dst->pixman.im) && (dc->col.pixman_color_image))
pixman_image_composite(op, dc->col.pixman_color_image,
aa_mask_image, dst->pixman.im,
@@ -1473,14 +1473,14 @@ next_x:
pixman_image_unref(aa_mask_image);
# endif
#endif
-
+
}
if ((px + 1) < clw)
{
#ifdef HAVE_PIXMAN
# ifdef PIXMAN_LINE
alpha_data_buffer = aa;
- aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1,
+ aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1,
(uint32_t *)&alpha_data_buffer, 4);
if ((dst->pixman.im) && (dc->col.pixman_color_image))
@@ -1515,7 +1515,7 @@ next_x:
}
}
-EAPI void
+EVAS_API void
evas_common_line_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1, Evas_Common_Line_Draw_Cb cb)
{
int x, y, w, h;
@@ -1573,7 +1573,7 @@ evas_common_line_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0,
dc->clip.h = ch;
}
-EAPI void
+EVAS_API void
evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1)
{
Evas_Common_Line_Draw_Cb cb;
diff --git a/src/lib/evas/common/evas_map_image.c b/src/lib/evas/common/evas_map_image.c
index dbd981750f..19eb165052 100644
--- a/src/lib/evas/common/evas_map_image.c
+++ b/src/lib/evas/common/evas_map_image.c
@@ -188,43 +188,43 @@ _calc_spans(RGBA_Map_Point *p, Line *spans, int ystart, int yend, int cx, int cy
x = p[e1].x + temp; // intersected x point
-/*
+/*
// FIXME: 3d accuracy here
// XXX t needs adjusting. above its a linear interp point
// only.
- //
+ //
// // FIXME: do in fixed pt. reduce divides
evas_common_cpu_end_opt();
- //
+ //
int foc = 512, z0 = 0, px = 320, py = 240; // FIXME: need from map points
//
float focf, hf;
float z1, z2, y1, y2, dz, dy, zt, dydz, yt;
-
+
focf = foc;
hf = h;
-
+
// adjust for fixed point and focal length and z0 for map
z1 = (p[e1].z >> FP) - z0 + foc;
z2 = (p[e2].z >> FP) - z0 + foc;
// deltas
dz = z1 - z2;
-
+
if (dz != 0)
{
int pt;
-
+
// adjust for perspective point (being 0 0)
y1 = (p[e1].y >> FP) - py;
y2 = (p[e2].y >> FP) - py;
-
+
// correct for x &y not being in world coords - screen coords
y1 = (y1 * z1) / focf;
y2 = (y2 * z2) / focf;
-
+
// deltas
dy = y1 - y2;
-
+
yt = y - py;
dydz = dy / dz;
@@ -416,7 +416,7 @@ struct _RGBA_Map_Cutout
RGBA_Map_Spans spans[1];
};
-EAPI void
+EVAS_API void
evas_common_map_rgba_clean(RGBA_Map *m)
{
RGBA_Map_Cutout *spans = m->engine_data;
@@ -506,14 +506,14 @@ _evas_common_map_rgba_span(RGBA_Map_Spans *span,
{
if (p[i].y > ybottom) ybottom = p[i].y;
}
-
+
// convert to screen space from fixed point
ytop = ytop >> FP;
ybottom = ybottom >> FP;
-
+
// if its outside the clip vertical bounds - don't bother
if ((ytop >= (cy + ch)) || (ybottom < cy)) return;
-
+
// limit to the clip vertical bounds
if (ytop < cy) span->ystart = cy;
else span->ystart = ytop;
@@ -529,12 +529,12 @@ _evas_common_map_rgba_span(RGBA_Map_Spans *span,
if (p[i].u < 0) p[i].u = 0;
else if (p[i].u > (int)(sw << FP))
p[i].u = src->cache_entry.w << FP;
-
+
if (p[i].v < 0) p[i].v = 0;
else if (p[i].v > (int)(sw << FP))
p[i].v = src->cache_entry.h << FP;
}
-
+
// allocate some spans to hold out span list
if (span->size < (span->yend - span->ystart + 1))
{
@@ -555,7 +555,7 @@ _evas_common_map_rgba_span(RGBA_Map_Spans *span,
}
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_map_rgba_prepare(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
RGBA_Map *m)
@@ -651,7 +651,7 @@ evas_common_map_rgba_prepare(RGBA_Image *src, RGBA_Image *dst,
# undef SCALE_USING_NEON
#endif
-//#include "evas_map_image_internal_high.c"
+#include "evas_map_image_internal_high.c"
#ifdef BUILD_MMX
void evas_common_map_rgba_internal_mmx(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map_Point *p, int smooth, int level)
@@ -683,7 +683,6 @@ void evas_common_map_rgba_internal_mmx(RGBA_Image *src, RGBA_Image *dst, RGBA_Dr
}
#endif
-#if 0
void evas_common_map_rgba_internal_high(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map_Point *p, int smooth, int level)
{
int clip_x, clip_y, clip_w, clip_h;
@@ -711,7 +710,6 @@ void evas_common_map_rgba_internal_high(RGBA_Image *src, RGBA_Image *dst, RGBA_D
p, smooth, dc->anti_alias, level,
dc->clip.mask, dc->clip.mask_x, dc->clip.mask_y);
}
-#endif
void evas_common_map_rgba_internal(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map_Point *p, int smooth, int level)
{
@@ -771,7 +769,7 @@ void evas_common_map_rgba_internal_neon(RGBA_Image *src, RGBA_Image *dst, RGBA_D
}
#endif
-EAPI void
+EVAS_API void
evas_common_map_rgba_cb(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
int npoints EINA_UNUSED, RGBA_Map_Point *p,
@@ -814,7 +812,7 @@ evas_common_map_rgba_cb(RGBA_Image *src, RGBA_Image *dst,
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_map_thread_rgba_cb(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map *map, int smooth, int level, int offset, Evas_Common_Map_Thread_RGBA_Cb cb)
{
Cutout_Rect *r;
@@ -858,7 +856,7 @@ evas_common_map_thread_rgba_cb(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Conte
return ret;
}
-EAPI void
+EVAS_API void
evas_common_map_rgba(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
int npoints, RGBA_Map_Point *p,
@@ -866,13 +864,11 @@ evas_common_map_rgba(RGBA_Image *src, RGBA_Image *dst,
{
Evas_Common_Map_RGBA_Cb cb;
-#if 0
if (dc->anti_alias && smooth)
{
cb = evas_common_map_rgba_internal_high;
}
else
-#endif
{
#ifdef BUILD_MMX
int mmx, sse, sse2;
@@ -893,11 +889,10 @@ evas_common_map_rgba(RGBA_Image *src, RGBA_Image *dst,
evas_common_map_rgba_cb(src, dst, dc, npoints, p, smooth, level, cb);
}
-EAPI void
+EVAS_API void
evas_common_map_rgba_draw(RGBA_Image *src, RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 mul_col, int render_op, int npoints EINA_UNUSED, RGBA_Map_Point *p, int smooth, Eina_Bool anti_alias, int level, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
//The best quaility requsted.
-#if 0
if (anti_alias && smooth)
{
_evas_common_map_rgba_internal_high(src, dst,
@@ -907,7 +902,6 @@ evas_common_map_rgba_draw(RGBA_Image *src, RGBA_Image *dst, int clip_x, int clip
mask_ie, mask_x, mask_y);
}
else
-#endif
{
#ifdef BUILD_MMX
int mmx, sse, sse2;
@@ -938,7 +932,7 @@ evas_common_map_rgba_draw(RGBA_Image *src, RGBA_Image *dst, int clip_x, int clip
}
}
-EAPI void
+EVAS_API void
evas_common_map_rgba_do(const Eina_Rectangle *clip,
RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
@@ -956,7 +950,7 @@ evas_common_map_rgba_do(const Eina_Rectangle *clip,
#ifdef BUILD_MMX
evas_common_cpu_can_do(&mmx, &sse, &sse2);
-#endif
+#endif
spans = m->engine_data;
rects = spans->rects;
diff --git a/src/lib/evas/common/evas_map_image.h b/src/lib/evas/common/evas_map_image.h
index 2bca78b0a2..3c46aec07c 100644
--- a/src/lib/evas/common/evas_map_image.h
+++ b/src/lib/evas/common/evas_map_image.h
@@ -4,34 +4,34 @@
typedef void (*Evas_Common_Map_RGBA_Cb) (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map_Point *p, int smooth, int level);
typedef Eina_Bool (*Evas_Common_Map_Thread_RGBA_Cb) (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map *map, int smooth, int level, int offset);
-EAPI void
+EVAS_API void
evas_common_map_rgba_cb(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
int npoints, RGBA_Map_Point *points,
int smooth, int level,
Evas_Common_Map_RGBA_Cb cb);
-EAPI Eina_Bool evas_common_map_thread_rgba_cb(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map *map, int smooth, int level, int offset, Evas_Common_Map_Thread_RGBA_Cb cb);
+EVAS_API Eina_Bool evas_common_map_thread_rgba_cb(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Map *map, int smooth, int level, int offset, Evas_Common_Map_Thread_RGBA_Cb cb);
-EAPI void
+EVAS_API void
evas_common_map_rgba(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
int npoints, RGBA_Map_Point *points,
int smooth, int level);
-EAPI void evas_common_map_rgba_draw(RGBA_Image *src, RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 mul_col, int render_op, int npoints, RGBA_Map_Point *p, int smooth, Eina_Bool anti_alias, int level, RGBA_Image *mask_ie, int mask_x, int mask_y);
+EVAS_API void evas_common_map_rgba_draw(RGBA_Image *src, RGBA_Image *dst, int clip_x, int clip_y, int clip_w, int clip_h, DATA32 mul_col, int render_op, int npoints, RGBA_Map_Point *p, int smooth, Eina_Bool anti_alias, int level, RGBA_Image *mask_ie, int mask_x, int mask_y);
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_map_rgba_prepare(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
RGBA_Map *m);
-EAPI void
+EVAS_API void
evas_common_map_rgba_do(const Eina_Rectangle *clip,
RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
const RGBA_Map *m,
int smooth, int level);
-EAPI void
+EVAS_API void
evas_common_map_rgba_clean(RGBA_Map *m);
#endif /* _EVAS_MAP_H */
diff --git a/src/lib/evas/common/evas_map_image_core.c b/src/lib/evas/common/evas_map_image_core.c
index 14c46aa141..5e20fe7851 100644
--- a/src/lib/evas/common/evas_map_image_core.c
+++ b/src/lib/evas/common/evas_map_image_core.c
@@ -76,7 +76,7 @@
c2 = span->col[1]; // col
cv = 0; // col
cd = (255 << 16) / w; // col
-
+
if (c1 == c2)
{
if (c1 == 0xffffffff)
diff --git a/src/lib/evas/common/evas_map_image_internal_high.c b/src/lib/evas/common/evas_map_image_internal_high.c
index 3d23782f63..ecd08026d2 100644
--- a/src/lib/evas/common/evas_map_image_internal_high.c
+++ b/src/lib/evas/common/evas_map_image_internal_high.c
@@ -87,7 +87,7 @@ _map_aa_edge_calc_internal(AALine *spans, int eidx, int ystart, int yend)
{
int y = 0;
Evas_Coord_Point p_edge = {-1, -1}; //previous edge point
- Evas_Coord_Point edge_diff = {0, 0}; //temporary used for point distance
+ Evas_Coord_Point edge_diff = {0, 0}; //temporary used for point distance
/* store bigger to tx[0] between prev and current edge's x positions. */
int tx[2] = {0, 0};
@@ -391,8 +391,8 @@ _map_triangle_draw_linear(RGBA_Image *src, RGBA_Image *dst,
if (aa_spans->lines[ay].x[0] > x1) aa_spans->lines[ay].x[0] = x1;
if (aa_spans->lines[ay].x[1] < x2) aa_spans->lines[ay].x[1] = x2;
}
-
if ((x2 - x1) < 1) goto next;
+ if ((x1 >= (cx + cw)) || (x2 <= cx)) goto next;
//Perform subtexel pre-stepping on UV
dx = 1 - (_xa - x1);
@@ -587,7 +587,7 @@ _map_triangle_draw(RGBA_Image *src, RGBA_Image *dst,
denom = ((x[2] - x[0]) * (y[1] - y[0]) - (x[1] - x[0]) * (y[2] - y[0]));
//Skip poly if it's an infinitely thin line
- if (denom == 0) return;
+ if (EINA_DBL_EQ(denom, 0)) return;
denom = 1 / denom; //Reciprocal for speeding up
dudx = ((u[2] - u[0]) * (y[1] - y[0]) - (u[1] - u[0]) * (y[2] - y[0])) * denom;
@@ -619,8 +619,8 @@ _map_triangle_draw(RGBA_Image *src, RGBA_Image *dst,
//Determine which side of the polygon the longer edge is on
side = (dxdy[1] > dxdy[0]) ? EINA_TRUE:EINA_FALSE;
- if (y[0] == y[1]) side = x[0] > x[1];
- if (y[1] == y[2]) side = x[2] > x[1];
+ if (EINA_DBL_EQ(y[0], y[1])) side = x[0] > x[1];
+ if (EINA_DBL_EQ(y[1], y[2])) side = x[2] > x[1];
//Longer edge is on the left side
if (!side)
@@ -763,7 +763,7 @@ _evas_common_map_rgba_internal_high(RGBA_Image *src, RGBA_Image *dst,
DATA32 c[4];
RGBA_Gfx_Func func = NULL;
RGBA_Gfx_Func func2 = NULL;
- DATA32 *tbuf = NULL; //Temporarily used span buffer
+ DATA32 *tbuf = NULL; //Temporarily used span buffer
Eina_Bool have_alpha = EINA_FALSE;
Eina_Bool src_alpha = src->cache_entry.flags.alpha;
Eina_Bool ssrc_alpha = src->cache_entry.flags.alpha_sparse;
@@ -773,8 +773,8 @@ _evas_common_map_rgba_internal_high(RGBA_Image *src, RGBA_Image *dst,
//FIXME: we cannot apply anti_aliasing per polygons.
anti_alias = EINA_FALSE;
- /* Prepare points data.
- Convert to float,
+ /* Prepare points data.
+ Convert to float,
shift XY coordinates to match the sub-pixeling technique.
Check alpha transparency. */
for (int i = 0; i < 4; i++)
@@ -844,7 +844,7 @@ _evas_common_map_rgba_internal_high(RGBA_Image *src, RGBA_Image *dst,
}
#endif
- /*
+ /*
1 polygon is consisted of 2 triangles, 4 polygons constructs 1 mesh.
below figure illustrates vert[9] index info.
If you need better quality, please divide a mesh by more number of triangles.
diff --git a/src/lib/evas/common/evas_op_blend/op_blend_mask_color_neon.c b/src/lib/evas/common/evas_op_blend/op_blend_mask_color_neon.c
index 2a86d271cb..78f58b5315 100644
--- a/src/lib/evas/common/evas_op_blend/op_blend_mask_color_neon.c
+++ b/src/lib/evas/common/evas_op_blend/op_blend_mask_color_neon.c
@@ -9,7 +9,7 @@
do { \
static int _foo = 0; \
if (_foo++%10000 ==0) \
- printf("%s %+d %s: %d (%s)\n",__FILE__,__LINE__,__FUNCTION__,\
+ printf("%s %+d %s: %d (%s)\n",__FILE__,__LINE__,__func__,\
_foo, x " optimised");\
} while (0)
#else
diff --git a/src/lib/evas/common/evas_op_blend/op_blend_mask_color_sse3.c b/src/lib/evas/common/evas_op_blend/op_blend_mask_color_sse3.c
index 576220db2d..2879637157 100644
--- a/src/lib/evas/common/evas_op_blend/op_blend_mask_color_sse3.c
+++ b/src/lib/evas/common/evas_op_blend/op_blend_mask_color_sse3.c
@@ -174,7 +174,7 @@ init_blend_mask_color_span_funcs_sse3(void)
op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_SSE3] = _op_blend_mas_can_dp_sse3;
op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_SSE3] = _op_blend_mas_caa_dp_sse3;
-// FIXME: BUGGY BUGGY Core i5 2500 (64bit), gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text)
+// FIXME: BUGGY BUGGY Core i5 2500 (64bit), gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text)
// op_blend_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_SSE3] = _op_blend_mas_c_dpan_sse3;
op_blend_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_mas_cn_dpan_sse3;
op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_SSE3] = _op_blend_mas_can_dpan_sse3;
diff --git a/src/lib/evas/common/evas_op_blend/op_blend_master_sse3.c b/src/lib/evas/common/evas_op_blend/op_blend_master_sse3.c
index 6065054c15..97413575db 100644
--- a/src/lib/evas/common/evas_op_blend/op_blend_master_sse3.c
+++ b/src/lib/evas/common/evas_op_blend/op_blend_master_sse3.c
@@ -1,10 +1,10 @@
#define NEED_SSE3 1
#include "Eina.h"
-
+#include "Evas.h"
#include "evas_common_types.h"
-EAPI void evas_common_cpu_end_opt(void);
+EXPORTAPI void evas_common_cpu_end_opt(void);
#include "config.h"
#include "evas_blend_ops.h"
@@ -47,7 +47,7 @@ evas_common_op_blend_init_sse3(void)
init_blend_pixel_mask_pt_funcs_sse3();
init_blend_color_pt_funcs_sse3();
init_blend_mask_color_pt_funcs_sse3();
-#endif
+#endif
}
void
@@ -65,7 +65,7 @@ evas_common_op_blend_rel_init_sse3(void)
init_blend_rel_pixel_mask_pt_funcs_sse3();
init_blend_rel_color_pt_funcs_sse3();
init_blend_rel_mask_color_pt_funcs_sse3();
-#endif
+#endif
}
//#pragma GCC push_options
@@ -75,10 +75,10 @@ evas_common_op_sse3_test(void)
{
#ifdef BUILD_SSE3
DATA32 s[64] = {0x11883399}, d[64] = {0xff88cc33};
-
+
s[0] = rand(); d[1] = rand();
_op_blend_pas_dp_sse3(s, NULL, 0, d, 64);
evas_common_cpu_end_opt();
-#endif
+#endif
}
//#pragma GCC pop_options
diff --git a/src/lib/evas/common/evas_op_blend/op_blend_pixel_i386.c b/src/lib/evas/common/evas_op_blend/op_blend_pixel_i386.c
index 66771668cf..9e054d010b 100644
--- a/src/lib/evas/common/evas_op_blend/op_blend_pixel_i386.c
+++ b/src/lib/evas/common/evas_op_blend/op_blend_pixel_i386.c
@@ -26,7 +26,7 @@ static void
_op_blend_pas_dp_mmx(DATA32 *s, DATA8 *m EINA_UNUSED, DATA32 c EINA_UNUSED, DATA32 *d, int l) {
_op_blend_p_dp_mmx(s, m, c, d, l);
return;
-/*
+/*
DATA32 *e = d + l;
pxor_r2r(mm0, mm0);
MOV_A2R(ALPHA_256, mm6)
diff --git a/src/lib/evas/common/evas_op_blend/op_blend_pixel_neon.c b/src/lib/evas/common/evas_op_blend/op_blend_pixel_neon.c
index af0a893510..31ad6b21ba 100644
--- a/src/lib/evas/common/evas_op_blend/op_blend_pixel_neon.c
+++ b/src/lib/evas/common/evas_op_blend/op_blend_pixel_neon.c
@@ -245,7 +245,7 @@ _op_blend_p_dp_neon(DATA32 *s, DATA8 *m EINA_UNUSED, DATA32 c EINA_UNUSED, DATA3
"vldm %[s]!, {d0,d1,d2,d3) \n\t"
"vldm %[d], {d4,d5,d6,d7} \n\t"
"pld [%[s], #64] \n\t"
-
+
// Copy s.a into q2 (>> 24) & subtract from 255
"vmvn.u8 q4, q0 \n\t"
@@ -302,7 +302,7 @@ _op_blend_p_dp_neon(DATA32 *s, DATA8 *m EINA_UNUSED, DATA32 c EINA_UNUSED, DATA3
"sub %[tmp],%[e],$0x7 \n\t"
AP "dualloop2int: \n\t"
//** Trailing double
-
+
"vldm %[s]!, {d0} \n\t"
"vldm %[d], {d4} \n\t"
diff --git a/src/lib/evas/common/evas_op_blend_main_.c b/src/lib/evas/common/evas_op_blend_main_.c
index 035f4018fa..c7b629346d 100644
--- a/src/lib/evas/common/evas_op_blend_main_.c
+++ b/src/lib/evas/common/evas_op_blend_main_.c
@@ -112,7 +112,7 @@ op_blend_init(void)
init_blend_pixel_mask_span_funcs_mmx(); // FIXME
init_blend_color_span_funcs_mmx();
init_blend_mask_color_span_funcs_mmx();
-
+
init_blend_pixel_pt_funcs_mmx();
init_blend_pixel_color_pt_funcs_mmx();
init_blend_pixel_mask_pt_funcs_mmx();
@@ -128,7 +128,7 @@ op_blend_init(void)
init_blend_pixel_mask_span_funcs_neon(); // FIXME
init_blend_color_span_funcs_neon();
init_blend_mask_color_span_funcs_neon();
-
+
init_blend_pixel_pt_funcs_neon();
init_blend_pixel_color_pt_funcs_neon();
init_blend_pixel_mask_pt_funcs_neon();
diff --git a/src/lib/evas/common/evas_op_copy/op_copy_color_.c b/src/lib/evas/common/evas_op_copy/op_copy_color_.c
index 3dc5582f6e..c8e46ae792 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_color_.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_color_.c
@@ -32,7 +32,7 @@ init_copy_color_span_funcs_c(void)
op_copy_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_can_dpan;
op_copy_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_caa_dpan;
}
-
+
static void
_op_copy_pt_c_dp(DATA32 s EINA_UNUSED, DATA8 m EINA_UNUSED, DATA32 c, DATA32 *d) {
*d = c;
diff --git a/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_.c b/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_.c
index 5a861b2590..12c2dace3a 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_.c
@@ -1,6 +1,6 @@
/* copy pixel x mask --> dst */
-static void
+static void
_op_copy_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c EINA_UNUSED, DATA32 *d, int l) {
DATA32 *e;
int color;
diff --git a/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_i386.c b/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_i386.c
index a10289d4d8..ae30339233 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_i386.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_i386.c
@@ -86,7 +86,7 @@ init_copy_pixel_mask_pt_funcs_mmx(void)
/* copy_rel pixel x mask --> dst */
#ifdef BUILD_MMX
-static void
+static void
_op_copy_rel_p_mas_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c EINA_UNUSED, DATA32 *d, int l) {
DATA32 *e = d + l;
pxor_r2r(mm0, mm0);
@@ -139,7 +139,7 @@ init_copy_rel_pixel_mask_span_funcs_mmx(void)
#endif
#ifdef BUILD_MMX
-static void
+static void
_op_copy_rel_pt_p_mas_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
c = m + 1;
pxor_r2r(mm0, mm0);
diff --git a/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_neon.c b/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_neon.c
index f6a9528a3c..c3b35ee8c8 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_neon.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_pixel_mask_neon.c
@@ -76,7 +76,7 @@ init_copy_pixel_mask_pt_funcs_neon(void)
/* copy_rel pixel x mask --> dst */
#ifdef BUILD_NEON
-static void
+static void
_op_copy_rel_p_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c EINA_UNUSED, DATA32 *d, int l) {
// FIXME: neon-it
DATA32 *e;
@@ -122,7 +122,7 @@ init_copy_rel_pixel_mask_span_funcs_neon(void)
#endif
#ifdef BUILD_NEON
-static void
+static void
_op_copy_rel_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
c = MUL_SYM(*d >> 24, s);
*d = INTERP_256(m + 1, c, *d);
diff --git a/src/lib/evas/common/evas_op_copy/op_copy_pixel_neon.c b/src/lib/evas/common/evas_op_copy/op_copy_pixel_neon.c
index c2eb12dae2..d2703c19d5 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_pixel_neon.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_pixel_neon.c
@@ -13,8 +13,8 @@ _op_copy_p_dp_neon(DATA32 *s, DATA8 *m EINA_UNUSED, DATA32 c EINA_UNUSED, DATA32
if (e > d)
{
int dl;
-
- asm volatile
+
+ asm volatile
(".fpu neon \n\t"
"_op_copy_p_dp_neon_asmloop: \n\t"
"pld [%[s], #192] \n\t" // preload 256 bytes ahead
@@ -31,12 +31,12 @@ _op_copy_p_dp_neon(DATA32 *s, DATA8 *m EINA_UNUSED, DATA32 c EINA_UNUSED, DATA32
: /*in */ [s] "r" (s), [e] "r" (e), [d] "r" (d)
: /*clobber*/
"q0", "q1", "q2","q3", "q4", "q5", "q6",
- "d0", "d1", "d2", "d3",
- "d4", "d5", "d6", "d7",
+ "d0", "d1", "d2", "d3",
+ "d4", "d5", "d6", "d7",
"d8", "d9", "d10", "d11",
"memory" // clobbered
);
- dl = l % 24; // dl is how many pixels at end that is not a multiple of 24
+ dl = l % 24; // dl is how many pixels at end that is not a multiple of 24
l = l - dl; // jump to there at the end of the run?
s = s + l;
d = d + l;
diff --git a/src/lib/evas/common/evas_op_mask/op_mask_pixel_mask_.c b/src/lib/evas/common/evas_op_mask/op_mask_pixel_mask_.c
index c6f08a98e5..10e8b8a705 100644
--- a/src/lib/evas/common/evas_op_mask/op_mask_pixel_mask_.c
+++ b/src/lib/evas/common/evas_op_mask/op_mask_pixel_mask_.c
@@ -1,6 +1,6 @@
/* mask pixel x mask --> dst */
-static void
+static void
_op_mask_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c EINA_UNUSED, DATA32 *d, int l) {
DATA32 *e = d + l;
while (d < e) {
@@ -36,7 +36,7 @@ init_mask_pixel_mask_span_funcs_c(void)
op_mask_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_mask_pas_mas_dpan;
}
-static void
+static void
_op_mask_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c EINA_UNUSED, DATA32 *d) {
s = 256 - (((256 - (s >> 24)) * m) >> 8);
*d = MUL_256(s, *d);
diff --git a/src/lib/evas/common/evas_pipe.c b/src/lib/evas/common/evas_pipe.c
index 55e551ba50..3260752b9c 100644
--- a/src/lib/evas/common/evas_pipe.c
+++ b/src/lib/evas/common/evas_pipe.c
@@ -218,7 +218,7 @@ evas_common_pipe_begin(RGBA_Image *im)
eina_barrier_wait(&(thbarrier[0]));
}
-EAPI void
+EVAS_API void
evas_common_pipe_flush(RGBA_Image *im)
{
if (!im->cache_entry.pipe) return;
@@ -252,7 +252,7 @@ evas_common_pipe_flush(RGBA_Image *im)
evas_common_pipe_free(im);
}
-EAPI void
+EVAS_API void
evas_common_pipe_free(RGBA_Image *im)
{
@@ -311,7 +311,7 @@ evas_common_pipe_rectangle_prepare(void *data, RGBA_Image *dst, RGBA_Pipe_Op *op
return r;
}
-EAPI void
+EVAS_API void
evas_common_pipe_rectangle_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
RGBA_Pipe_Op *op;
@@ -343,7 +343,7 @@ evas_common_pipe_line_draw_do(RGBA_Image *dst, const RGBA_Pipe_Op *op, const RGB
op->op.line.x1, op->op.line.y1);
}
-EAPI void
+EVAS_API void
evas_common_pipe_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc,
int x0, int y0, int x1, int y1)
{
@@ -391,7 +391,7 @@ evas_common_pipe_poly_draw_do(RGBA_Image *dst, const RGBA_Pipe_Op *op, const RGB
op->op.poly.points, op->op.poly.x, op->op.poly.y);
}
-EAPI void
+EVAS_API void
evas_common_pipe_poly_draw(RGBA_Image *dst, RGBA_Draw_Context *dc,
RGBA_Polygon_Point *points, int x, int y)
{
@@ -457,7 +457,7 @@ evas_common_pipe_text_draw_prepare(void *data, RGBA_Image *dst, RGBA_Pipe_Op *op
return r;
}
-EAPI void
+EVAS_API void
evas_common_pipe_text_draw(RGBA_Image *dst, RGBA_Draw_Context *dc,
int x, int y, Evas_Text_Props *intl_props)
{
@@ -561,7 +561,7 @@ evas_common_pipe_image_draw_do(RGBA_Image *dst, const RGBA_Pipe_Op *op, const RG
#endif
}
-EAPI void
+EVAS_API void
evas_common_pipe_image_draw(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc, int smooth,
int src_region_x, int src_region_y,
@@ -621,7 +621,7 @@ static Eina_Bool
evas_common_pipe_map_draw_prepare(void *data EINA_UNUSED, RGBA_Image *dst, RGBA_Pipe_Op *op)
{
RGBA_Draw_Context context;
- Eina_Bool r;
+ Eina_Bool r;
memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context));
r = evas_common_map_rgba_prepare(op->op.map.src, dst,
@@ -629,7 +629,7 @@ evas_common_pipe_map_draw_prepare(void *data EINA_UNUSED, RGBA_Image *dst, RGBA_
return r;
}
-EAPI void
+EVAS_API void
evas_common_pipe_map_draw(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc, RGBA_Map *m,
int smooth, int level)
@@ -641,10 +641,10 @@ evas_common_pipe_map_draw(RGBA_Image *src, RGBA_Image *dst,
/* pts_copy = malloc(sizeof (RGBA_Map_Point) * 4); */
/* if (!pts_copy) return; */
dst->cache_entry.pipe = evas_common_pipe_add(dst->cache_entry.pipe, &op);
- if (!dst->cache_entry.pipe)
+ if (!dst->cache_entry.pipe)
{
/* free(pts_copy); */
- return;
+ return;
}
/* for (i = 0; i < 4; ++i) */
@@ -777,7 +777,7 @@ evas_common_pipe_load_do(RGBA_Image *im)
eina_barrier_wait(&(task_thbarrier[1]));
}
-EAPI void
+EVAS_API void
evas_common_pipe_image_load(RGBA_Image *im)
{
if (im->flags & RGBA_IMAGE_TODO_LOAD)
@@ -799,7 +799,7 @@ evas_common_pipe_image_load(RGBA_Image *im)
im->flags |= RGBA_IMAGE_TODO_LOAD;
}
-EAPI void
+EVAS_API void
evas_common_pipe_text_prepare(Evas_Text_Props *text_props)
{
RGBA_Font_Int *fi;
@@ -827,7 +827,7 @@ evas_common_pipe_text_prepare(Evas_Text_Props *text_props)
LKU(fi->ft_mutex);
}
-EAPI void
+EVAS_API void
evas_common_pipe_map_begin(RGBA_Image *root)
{
if (!evas_common_pipe_init())
@@ -850,7 +850,7 @@ evas_common_pipe_map_begin(RGBA_Image *root)
}
#endif
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_pipe_init(void)
{
#ifdef BUILD_PIPE_RENDER
diff --git a/src/lib/evas/common/evas_pipe.h b/src/lib/evas/common/evas_pipe.h
index a2fdb17279..3cf0e71356 100644
--- a/src/lib/evas/common/evas_pipe.h
+++ b/src/lib/evas/common/evas_pipe.h
@@ -8,20 +8,20 @@
* threadable
*/
-EAPI Eina_Bool evas_common_pipe_init(void);
+EVAS_API Eina_Bool evas_common_pipe_init(void);
-EAPI void evas_common_pipe_free(RGBA_Image *im);
-EAPI void evas_common_pipe_rectangle_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void evas_common_pipe_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1);
-EAPI void evas_common_pipe_poly_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y);
-EAPI void evas_common_pipe_text_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Text_Props *intl_props);
-EAPI void evas_common_pipe_text_prepare(Evas_Text_Props *text_props);
-EAPI void evas_common_pipe_image_load(RGBA_Image *im);
-EAPI void evas_common_pipe_image_draw(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int smooth, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
-EAPI void evas_common_pipe_map_begin(RGBA_Image *root);
-EAPI void evas_common_pipe_map_draw(RGBA_Image *src, RGBA_Image *dst,
+EVAS_API void evas_common_pipe_free(RGBA_Image *im);
+EVAS_API void evas_common_pipe_rectangle_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API void evas_common_pipe_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1);
+EVAS_API void evas_common_pipe_poly_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y);
+EVAS_API void evas_common_pipe_text_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Text_Props *intl_props);
+EVAS_API void evas_common_pipe_text_prepare(Evas_Text_Props *text_props);
+EVAS_API void evas_common_pipe_image_load(RGBA_Image *im);
+EVAS_API void evas_common_pipe_image_draw(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int smooth, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API void evas_common_pipe_map_begin(RGBA_Image *root);
+EVAS_API void evas_common_pipe_map_draw(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc, RGBA_Map *m,
int smooth, int level);
-EAPI void evas_common_pipe_flush(RGBA_Image *im);
+EVAS_API void evas_common_pipe_flush(RGBA_Image *im);
#endif /* _EVAS_PIPE_H */
diff --git a/src/lib/evas/common/evas_polygon.h b/src/lib/evas/common/evas_polygon.h
index dee63c1ff6..7780aea4f9 100644
--- a/src/lib/evas/common/evas_polygon.h
+++ b/src/lib/evas/common/evas_polygon.h
@@ -2,13 +2,13 @@
#define _EVAS_POLYGON_H
-EAPI void evas_common_polygon_init (void);
+EVAS_API void evas_common_polygon_init (void);
-EAPI RGBA_Polygon_Point *evas_common_polygon_point_add (RGBA_Polygon_Point *points, int x, int y);
-EAPI RGBA_Polygon_Point *evas_common_polygon_points_clear (RGBA_Polygon_Point *points);
-EAPI void evas_common_polygon_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y);
+EVAS_API RGBA_Polygon_Point *evas_common_polygon_point_add (RGBA_Polygon_Point *points, int x, int y);
+EVAS_API RGBA_Polygon_Point *evas_common_polygon_points_clear (RGBA_Polygon_Point *points);
+EVAS_API void evas_common_polygon_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y);
-EAPI void evas_common_polygon_rgba_draw (RGBA_Image *dst, int ext_x, int ext_y, int ext_w, int ext_h, DATA32 col, int render_op, RGBA_Polygon_Point *points, int x, int y, RGBA_Image *mask_ie, int mask_x, int mask_y);
+EVAS_API void evas_common_polygon_rgba_draw (RGBA_Image *dst, int ext_x, int ext_y, int ext_w, int ext_h, DATA32 col, int render_op, RGBA_Polygon_Point *points, int x, int y, RGBA_Image *mask_ie, int mask_x, int mask_y);
#endif /* _EVAS_POLYGON_H */
diff --git a/src/lib/evas/common/evas_polygon_main.c b/src/lib/evas/common/evas_polygon_main.c
index 3b8690427a..c867d3b390 100644
--- a/src/lib/evas/common/evas_polygon_main.c
+++ b/src/lib/evas/common/evas_polygon_main.c
@@ -65,12 +65,12 @@ struct _RGBA_Vertex
num_active_edges++; \
}
-EAPI void
+EVAS_API void
evas_common_polygon_init(void)
{
}
-EAPI RGBA_Polygon_Point *
+EVAS_API RGBA_Polygon_Point *
evas_common_polygon_point_add(RGBA_Polygon_Point *points, int x, int y)
{
RGBA_Polygon_Point *pt;
@@ -83,7 +83,7 @@ evas_common_polygon_point_add(RGBA_Polygon_Point *points, int x, int y)
return points;
}
-EAPI RGBA_Polygon_Point *
+EVAS_API RGBA_Polygon_Point *
evas_common_polygon_points_clear(RGBA_Polygon_Point *points)
{
if (points)
@@ -122,7 +122,7 @@ polygon_edge_sorter(const void *a, const void *b)
return 1;
}
-EAPI void
+EVAS_API void
evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y)
{
RGBA_Gfx_Func func;
@@ -143,7 +143,7 @@ evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Po
pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
if (dc->render_op == _EVAS_RENDER_BLEND)
op = PIXMAN_OP_OVER;
-# endif
+# endif
#endif
ext_x = 0;
@@ -326,7 +326,7 @@ evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Po
}
}
-EAPI void
+EVAS_API void
evas_common_polygon_rgba_draw(RGBA_Image *dst, int ext_x, int ext_y, int ext_w, int ext_h, DATA32 col, int render_op, RGBA_Polygon_Point *points, int x, int y, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
RGBA_Gfx_Func func;
diff --git a/src/lib/evas/common/evas_rectangle.h b/src/lib/evas/common/evas_rectangle.h
index e79afd586d..935f67392a 100644
--- a/src/lib/evas/common/evas_rectangle.h
+++ b/src/lib/evas/common/evas_rectangle.h
@@ -3,14 +3,14 @@
typedef void (*Evas_Common_Rectangle_Draw_Cb)(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void evas_common_rectangle_init (void);
-EAPI void evas_common_rectangle_draw_cb (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h, Evas_Common_Rectangle_Draw_Cb cb);
-EAPI void evas_common_rectangle_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API void evas_common_rectangle_init (void);
+EVAS_API void evas_common_rectangle_draw_cb (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h, Evas_Common_Rectangle_Draw_Cb cb);
+EVAS_API void evas_common_rectangle_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void evas_common_rectangle_draw_do(const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI Eina_Bool evas_common_rectangle_draw_prepare(Cutout_Rects **reuse, const RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API void evas_common_rectangle_draw_do(const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
+EVAS_API Eina_Bool evas_common_rectangle_draw_prepare(Cutout_Rects **reuse, const RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void evas_common_rectangle_rgba_draw (RGBA_Image *dst, DATA32 color, int render_op, int x, int y, int w, int h, RGBA_Image *mask_ie, int mask_x, int mask_y);
+EVAS_API void evas_common_rectangle_rgba_draw (RGBA_Image *dst, DATA32 color, int render_op, int x, int y, int w, int h, RGBA_Image *mask_ie, int mask_x, int mask_y);
#endif /* _EVAS_RECTANGLE_H */
diff --git a/src/lib/evas/common/evas_rectangle_main.c b/src/lib/evas/common/evas_rectangle_main.c
index 443e39fe61..ab372cfa76 100644
--- a/src/lib/evas/common/evas_rectangle_main.c
+++ b/src/lib/evas/common/evas_rectangle_main.c
@@ -4,12 +4,12 @@
static void rectangle_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
-EAPI void
+EVAS_API void
evas_common_rectangle_init(void)
{
}
-EAPI void
+EVAS_API void
evas_common_rectangle_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h, Evas_Common_Rectangle_Draw_Cb cb)
{
Cutout_Rect *r;
@@ -48,13 +48,13 @@ evas_common_rectangle_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;
}
-EAPI void
+EVAS_API void
evas_common_rectangle_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
evas_common_rectangle_draw_cb(dst, dc, x, y, w, h, rectangle_draw_internal);
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_rectangle_draw_prepare(Cutout_Rects **reuse, const RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
if ((w <= 0) || (h <= 0)) return EINA_FALSE;
@@ -74,7 +74,7 @@ evas_common_rectangle_draw_prepare(Cutout_Rects **reuse, const RGBA_Image *dst,
return EINA_TRUE;
}
-EAPI void
+EVAS_API void
evas_common_rectangle_draw_do(const Cutout_Rects *reuse,
const Eina_Rectangle *clip,
RGBA_Image *dst, RGBA_Draw_Context *dc,
@@ -167,7 +167,7 @@ rectangle_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, in
}
}
-EAPI void
+EVAS_API void
evas_common_rectangle_rgba_draw(RGBA_Image *dst, DATA32 color, int render_op, int x, int y, int w, int h, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
RGBA_Gfx_Func func;
diff --git a/src/lib/evas/common/evas_scale_main.c b/src/lib/evas/common/evas_scale_main.c
index 06b20f30e6..9facea2b6e 100644
--- a/src/lib/evas/common/evas_scale_main.c
+++ b/src/lib/evas/common/evas_scale_main.c
@@ -1,12 +1,12 @@
#include "evas_common_private.h"
#include "evas_private.h"
-EAPI void
+EVAS_API void
evas_common_scale_init(void)
{
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_scale_rgba_in_to_out_clip_prepare(Cutout_Rects **reuse, const RGBA_Image *src EINA_UNUSED,
const RGBA_Image *dst,
RGBA_Draw_Context *dc,
@@ -31,7 +31,7 @@ evas_common_scale_rgba_in_to_out_clip_prepare(Cutout_Rects **reuse, const RGBA_I
return EINA_TRUE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_scale_rgba_in_to_out_clip_cb(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
int src_region_x, int src_region_y,
diff --git a/src/lib/evas/common/evas_scale_main.h b/src/lib/evas/common/evas_scale_main.h
index 76c46c8c70..85db6de0d8 100644
--- a/src/lib/evas/common/evas_scale_main.h
+++ b/src/lib/evas/common/evas_scale_main.h
@@ -3,20 +3,20 @@
typedef Eina_Bool (*Evas_Common_Scale_In_To_Out_Clip_Cb)(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
-EAPI void evas_common_scale_init (void);
-EAPI void evas_common_scale_sample_init (void);
-EAPI void evas_common_scale_sample_shutdown (void);
+EVAS_API void evas_common_scale_init (void);
+EVAS_API void evas_common_scale_sample_init (void);
+EVAS_API void evas_common_scale_sample_shutdown (void);
-EAPI Eina_Bool evas_common_scale_rgba_in_to_out_clip_cb (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, Evas_Common_Scale_In_To_Out_Clip_Cb cb);
-EAPI Eina_Bool evas_common_scale_rgba_in_to_out_clip_smooth (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
-EAPI Eina_Bool evas_common_scale_rgba_in_to_out_clip_sample (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API Eina_Bool evas_common_scale_rgba_in_to_out_clip_cb (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, Evas_Common_Scale_In_To_Out_Clip_Cb cb);
+EVAS_API Eina_Bool evas_common_scale_rgba_in_to_out_clip_smooth (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API Eina_Bool evas_common_scale_rgba_in_to_out_clip_sample (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
-EAPI void evas_common_rgba_image_scalecache_dump(void);
+EVAS_API void evas_common_rgba_image_scalecache_dump(void);
-EAPI void evas_common_scale_rgba_in_to_out_clip_sample_do (const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
-EAPI void evas_common_scale_rgba_in_to_out_clip_smooth_do (const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
-EAPI void evas_common_scale_rgba_sample_draw (RGBA_Image *src, RGBA_Image *dst, int dst_clip_x, int dst_clip_y, int dst_clip_w, int dst_clip_h, DATA32 mul_col, int render_op, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, RGBA_Image *mask, int mask_x, int mask_y);
-EAPI void evas_common_scale_rgba_smooth_draw (RGBA_Image *src, RGBA_Image *dst, int dst_clip_x, int dst_clip_y, int dst_clip_w, int dst_clip_h, DATA32 mul_col, int render_op, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, RGBA_Image *mask_ie, int mask_x, int mask_y);
-EAPI Eina_Bool evas_common_scale_rgba_in_to_out_clip_prepare (Cutout_Rects **reuse, const RGBA_Image *src, const RGBA_Image *dst, RGBA_Draw_Context *dc, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API void evas_common_scale_rgba_in_to_out_clip_sample_do (const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API void evas_common_scale_rgba_in_to_out_clip_smooth_do (const Cutout_Rects *reuse, const Eina_Rectangle *clip, RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API void evas_common_scale_rgba_sample_draw (RGBA_Image *src, RGBA_Image *dst, int dst_clip_x, int dst_clip_y, int dst_clip_w, int dst_clip_h, DATA32 mul_col, int render_op, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, RGBA_Image *mask, int mask_x, int mask_y);
+EVAS_API void evas_common_scale_rgba_smooth_draw (RGBA_Image *src, RGBA_Image *dst, int dst_clip_x, int dst_clip_y, int dst_clip_w, int dst_clip_h, DATA32 mul_col, int render_op, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, RGBA_Image *mask_ie, int mask_x, int mask_y);
+EVAS_API Eina_Bool evas_common_scale_rgba_in_to_out_clip_prepare (Cutout_Rects **reuse, const RGBA_Image *src, const RGBA_Image *dst, RGBA_Draw_Context *dc, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
#endif /* _EVAS_SCALE_MAIN_H */
diff --git a/src/lib/evas/common/evas_scale_sample.c b/src/lib/evas/common/evas_scale_sample.c
index cfd59726fc..cd59ed20b0 100644
--- a/src/lib/evas/common/evas_scale_sample.c
+++ b/src/lib/evas/common/evas_scale_sample.c
@@ -41,7 +41,7 @@ static Eina_Thread scaling_thread;
static Eina_Thread_Queue *thread_queue = NULL;
static Eina_Thread_Queue *main_queue = NULL;
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_scale_rgba_in_to_out_clip_sample(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
int src_region_x, int src_region_y,
@@ -56,7 +56,7 @@ evas_common_scale_rgba_in_to_out_clip_sample(RGBA_Image *src, RGBA_Image *dst,
scale_rgba_in_to_out_clip_sample_internal);
}
-EAPI void
+EVAS_API void
evas_common_scale_rgba_in_to_out_clip_sample_do(const Cutout_Rects *reuse,
const Eina_Rectangle *clip,
RGBA_Image *src, RGBA_Image *dst,
@@ -197,7 +197,7 @@ _evas_common_scale_rgba_sample_scale_mask(int y,
}
}
-EAPI void
+EVAS_API void
evas_common_scale_rgba_sample_draw(RGBA_Image *src, RGBA_Image *dst, int dst_clip_x, int dst_clip_y, int dst_clip_w, int dst_clip_h, DATA32 mul_col, int render_op, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
int x, y;
@@ -806,7 +806,7 @@ evas_common_scale_sample_fork_reset(void *data EINA_UNUSED)
}
}
-EAPI void
+EVAS_API void
evas_common_scale_sample_init(void)
{
if (eina_cpu_count() <= 2) return ;
@@ -846,7 +846,7 @@ cleanup:
if (main_queue) eina_thread_queue_free(main_queue);
}
-EAPI void
+EVAS_API void
evas_common_scale_sample_shutdown(void)
{
Evas_Scale_Msg *msg;
diff --git a/src/lib/evas/common/evas_scale_smooth.c b/src/lib/evas/common/evas_scale_smooth.c
index 781c13d1df..f5d8e93cd5 100644
--- a/src/lib/evas/common/evas_scale_smooth.c
+++ b/src/lib/evas/common/evas_scale_smooth.c
@@ -235,7 +235,7 @@ evas_common_scale_rgba_in_to_out_clip_smooth_c(RGBA_Image *src, RGBA_Image *dst,
return EINA_TRUE;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_scale_rgba_in_to_out_clip_smooth(RGBA_Image *src, RGBA_Image *dst,
RGBA_Draw_Context *dc,
int src_region_x, int src_region_y,
@@ -267,7 +267,7 @@ evas_common_scale_rgba_in_to_out_clip_smooth(RGBA_Image *src, RGBA_Image *dst,
cb);
}
-EAPI void
+EVAS_API void
evas_common_scale_rgba_smooth_draw(RGBA_Image *src, RGBA_Image *dst, int dst_clip_x, int dst_clip_y, int dst_clip_w, int dst_clip_h, DATA32 mul_col, int render_op, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h, RGBA_Image *mask_ie, int mask_x, int mask_y)
{
#ifdef BUILD_MMX
@@ -304,7 +304,7 @@ evas_common_scale_rgba_smooth_draw(RGBA_Image *src, RGBA_Image *dst, int dst_cli
mask_ie, mask_x, mask_y);
}
-EAPI void
+EVAS_API void
evas_common_scale_rgba_in_to_out_clip_smooth_do(const Cutout_Rects *reuse,
const Eina_Rectangle *clip,
RGBA_Image *src, RGBA_Image *dst,
diff --git a/src/lib/evas/common/evas_scale_smooth.h b/src/lib/evas/common/evas_scale_smooth.h
index faa8ad3bd2..d43d03fcf9 100644
--- a/src/lib/evas/common/evas_scale_smooth.h
+++ b/src/lib/evas/common/evas_scale_smooth.h
@@ -1,7 +1,7 @@
#ifndef _EVAS_SCALE_SMOOTH_H
#define _EVAS_SCALE_SMOOTH_H
-EAPI Eina_Bool evas_common_scale_rgba_in_to_out_clip_smooth_mmx (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
-EAPI Eina_Bool evas_common_scale_rgba_in_to_out_clip_smooth_c (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API Eina_Bool evas_common_scale_rgba_in_to_out_clip_smooth_mmx (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
+EVAS_API Eina_Bool evas_common_scale_rgba_in_to_out_clip_smooth_c (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
#endif /* _EVAS_SCALE_SMOOTH_H */
diff --git a/src/lib/evas/common/evas_scale_smooth_scaler_downx_downy.c b/src/lib/evas/common/evas_scale_smooth_scaler_downx_downy.c
index dfe0e5dc31..07ca8b0abf 100644
--- a/src/lib/evas/common/evas_scale_smooth_scaler_downx_downy.c
+++ b/src/lib/evas/common/evas_scale_smooth_scaler_downx_downy.c
@@ -17,7 +17,7 @@
#ifdef BILINEAR_HALF_TO_FULL_SCALE
if (// image is not too big so that cululative error on steps might be
- // noticable
+ // noticeable
(dst_region_w <= 4096) &&
(dst_region_h <= 4096) &&
(src_region_w <= 4096) &&
diff --git a/src/lib/evas/common/evas_scale_span.c b/src/lib/evas/common/evas_scale_span.c
index 8e5bf6c0bd..616dba3ba8 100644
--- a/src/lib/evas/common/evas_scale_span.c
+++ b/src/lib/evas/common/evas_scale_span.c
@@ -447,35 +447,35 @@ evas_common_scale_clip_a8_span_(DATA32 *src EINA_UNUSED, DATA8 *mask, int src_le
}
}
-EAPI void
+EVAS_API void
evas_common_scale_rgba_span(DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir)
{
evas_common_scale_rgba_span_(src, mask, src_len, mul_col, dst, dst_len, dir);
evas_common_cpu_end_opt();
}
-EAPI void
+EVAS_API void
evas_common_scale_rgba_a8_span(DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir)
{
evas_common_scale_rgba_a8_span_(src, mask, src_len, mul_col, dst, dst_len, dir);
evas_common_cpu_end_opt();
}
-EAPI void
+EVAS_API void
evas_common_scale_a8_span(DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir)
{
evas_common_scale_a8_span_(src, mask, src_len, mul_col, dst, dst_len, dir);
evas_common_cpu_end_opt();
}
-EAPI void
+EVAS_API void
evas_common_scale_clip_a8_span(DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir)
{
evas_common_scale_clip_a8_span_(src, mask, src_len, mul_col, dst, dst_len, dir);
evas_common_cpu_end_opt();
}
-EAPI void
+EVAS_API void
evas_common_scale_hsva_span(DATA32 *src, DATA8 *mask EINA_UNUSED, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir)
{
int mul = 0, step = 1;
@@ -558,7 +558,7 @@ evas_common_scale_hsva_span(DATA32 *src, DATA8 *mask EINA_UNUSED, int src_len, D
}
}
-EAPI void
+EVAS_API void
evas_common_scale_hsva_a8_span(DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir)
{
int mul = 0, step = 1;
diff --git a/src/lib/evas/common/evas_scale_span.h b/src/lib/evas/common/evas_scale_span.h
index 874c594b57..90e263f13c 100644
--- a/src/lib/evas/common/evas_scale_span.h
+++ b/src/lib/evas/common/evas_scale_span.h
@@ -2,13 +2,13 @@
#define _EVAS_SCALE_SPAN_H
-EAPI void evas_common_scale_rgba_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
-EAPI void evas_common_scale_rgba_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
-EAPI void evas_common_scale_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
-EAPI void evas_common_scale_clip_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
+EVAS_API void evas_common_scale_rgba_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
+EVAS_API void evas_common_scale_rgba_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
+EVAS_API void evas_common_scale_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
+EVAS_API void evas_common_scale_clip_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
-EAPI void evas_common_scale_hsva_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
-EAPI void evas_common_scale_hsva_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
+EVAS_API void evas_common_scale_hsva_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
+EVAS_API void evas_common_scale_hsva_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir);
#endif /* _EVAS_SCALE_SPAN_H */
diff --git a/src/lib/evas/common/evas_text_utils.c b/src/lib/evas/common/evas_text_utils.c
index acf7cf8fb7..99a9c3e3b3 100644
--- a/src/lib/evas/common/evas_text_utils.c
+++ b/src/lib/evas/common/evas_text_utils.c
@@ -858,7 +858,7 @@ _evas_common_text_props_cluster_move(const Evas_Text_Props *props, int pos,
return pos;
}
-EAPI int
+EVAS_API int
evas_common_text_props_cluster_next(const Evas_Text_Props *props, int pos)
{
Eina_Bool right;
@@ -867,7 +867,7 @@ evas_common_text_props_cluster_next(const Evas_Text_Props *props, int pos)
return _evas_common_text_props_cluster_move(props, pos, right);
}
-EAPI int
+EVAS_API int
evas_common_text_props_cluster_prev(const Evas_Text_Props *props, int pos)
{
Eina_Bool right;
@@ -877,7 +877,7 @@ evas_common_text_props_cluster_prev(const Evas_Text_Props *props, int pos)
}
/* Returns the index of the logical char in the props. */
-EAPI int
+EVAS_API int
evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff)
{
#ifdef OT_SUPPORT
@@ -973,7 +973,7 @@ evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff)
/* Won't work in the middle of ligatures, assumes cutoff < len.
* Also won't work in the middle of indic words, should handle that in a
* smart way. */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_text_props_split(Evas_Text_Props *base,
Evas_Text_Props *ext, int _cutoff)
{
@@ -1027,7 +1027,7 @@ evas_common_text_props_split(Evas_Text_Props *base,
}
/* Won't work in the middle of ligatures */
-EAPI void
+EVAS_API void
evas_common_text_props_merge(Evas_Text_Props *item1,
const Evas_Text_Props *item2)
{
@@ -1104,7 +1104,7 @@ _content_create_ot(RGBA_Font_Int *fi, const Eina_Unicode *text,
if (is_replacement)
{
/* Update the advance accordingly */
- adjust_x += (pen_x + (fg->glyph->advance.x >> 16)) -
+ adjust_x += (pen_x + (fg->advance.x >> 16)) -
gl_itr->pen_after;
}
pen_x = gl_itr->pen_after;
@@ -1198,7 +1198,7 @@ _content_create_regular(RGBA_Font_Int *fi, const Eina_Unicode *text,
gl_itr->index = idx;
gl_itr->x_bear = fg->x_bear;
gl_itr->y_bear = fg->y_bear;
- adv = fg->glyph->advance.x >> 10;
+ adv = fg->advance.x >> 10;
gl_itr->width = fg->width;
if (EVAS_FONT_CHARACTER_IS_INVISIBLE(_gl))
@@ -1222,7 +1222,7 @@ _content_create_regular(RGBA_Font_Int *fi, const Eina_Unicode *text,
}
#endif
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_text_props_content_create(void *_fi, const Eina_Unicode *text,
Evas_Text_Props *text_props, const Evas_BiDi_Paragraph_Props *par_props,
size_t par_pos, int len, Evas_Text_Props_Mode mode, const char *lang)
@@ -1430,7 +1430,7 @@ evas_common_format_color_parse(const char *str, int slen,
if ((strncmp(color_name,"rgb(",4) == 0) && color_name[slen-1] == ')'&& slen >= 10 && slen <=16) /* rgb() */
{
- char * p_color = &color_name[3];
+ char * p_color = &color_name[3];
if (
(!read_byte_color_component(++p_color,&p_color,r) || !p_color || *p_color != ',') ||
@@ -1448,7 +1448,7 @@ evas_common_format_color_parse(const char *str, int slen,
}
else if ((strncmp(color_name,"rgba(",4) == 0) && color_name[slen-1] == ')'&& slen >= 13 && slen <=21) /* rgba() */
{
- char * p_color = &color_name[4];
+ char * p_color = &color_name[4];
if (
(!read_byte_color_component(++p_color,&p_color,r) || !p_color || *p_color != ',') ||
diff --git a/src/lib/evas/common/evas_text_utils.h b/src/lib/evas/common/evas_text_utils.h
index 09c51e0c5e..faec37435e 100644
--- a/src/lib/evas/common/evas_text_utils.h
+++ b/src/lib/evas/common/evas_text_utils.h
@@ -153,7 +153,7 @@ evas_common_text_props_bidi_set(Evas_Text_Props *props,
void
evas_common_text_props_script_set(Evas_Text_Props *props, Evas_Script_Type scr);
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_text_props_content_create(void *_fi, const Eina_Unicode *text,
Evas_Text_Props *text_props, const Evas_BiDi_Paragraph_Props *par_props,
size_t par_pos, int len, Evas_Text_Props_Mode mode, const char *lang);
@@ -171,19 +171,19 @@ evas_common_text_props_content_nofree_unref(Evas_Text_Props *props);
void
evas_common_text_props_content_unref(Evas_Text_Props *props);
-EAPI int
+EVAS_API int
evas_common_text_props_cluster_next(const Evas_Text_Props *props, int pos);
-EAPI int
+EVAS_API int
evas_common_text_props_cluster_prev(const Evas_Text_Props *props, int pos);
-EAPI int
+EVAS_API int
evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff);
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_common_text_props_split(Evas_Text_Props *base, Evas_Text_Props *ext,
int cutoff);
-EAPI void
+EVAS_API void
evas_common_text_props_merge(Evas_Text_Props *item1, const Evas_Text_Props *item2);
/* Common to Textblock and Filters */
diff --git a/src/lib/evas/common/evas_thread_render.c b/src/lib/evas/common/evas_thread_render.c
index 324f6e9e3b..ded914e93d 100644
--- a/src/lib/evas/common/evas_thread_render.c
+++ b/src/lib/evas/common/evas_thread_render.c
@@ -37,7 +37,7 @@ _evas_thread_queue_fence(void *data)
eina_lock_release(&f->lock);
}
-EAPI void
+EVAS_API void
evas_thread_queue_wait(void)
{
struct fence_stuff f;
@@ -103,13 +103,13 @@ out:
eina_lock_release(&evas_thread_queue_lock);
}
-EAPI void
+EVAS_API void
evas_thread_cmd_enqueue(Evas_Thread_Command_Cb cb, void *data)
{
evas_thread_queue_append(cb, data, EINA_FALSE);
}
-EAPI void
+EVAS_API void
evas_thread_queue_flush(Evas_Thread_Command_Cb cb, void *data)
{
evas_thread_queue_append(cb, data, EINA_TRUE);
diff --git a/src/lib/evas/common/evas_tiler.c b/src/lib/evas/common/evas_tiler.c
index 0aff533b40..a9a367420b 100644
--- a/src/lib/evas/common/evas_tiler.c
+++ b/src/lib/evas/common/evas_tiler.c
@@ -3,12 +3,14 @@
#ifdef NEWTILER
-EAPI void
+#define MAXREG 24
+
+EVAS_API void
evas_common_tilebuf_init(void)
{
}
-EAPI Tilebuf *
+EVAS_API Tilebuf *
evas_common_tilebuf_new(int w, int h)
{
Tilebuf *tb = malloc(sizeof(Tilebuf));
@@ -18,51 +20,51 @@ evas_common_tilebuf_new(int w, int h)
return tb;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_free(Tilebuf *tb)
{
region_free(tb->region);
free(tb);
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_set_tile_size(Tilebuf *tb EINA_UNUSED, int tw EINA_UNUSED, int th EINA_UNUSED)
{
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_get_tile_size(Tilebuf *tb EINA_UNUSED, int *tw, int *th)
{
if (tw) *tw = 1;
if (th) *th = 1;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_tile_strict_set(Tilebuf *tb EINA_UNUSED, Eina_Bool strict EINA_UNUSED)
{
}
-EAPI int
+EVAS_API int
evas_common_tilebuf_add_redraw(Tilebuf *tb, int x, int y, int w, int h)
{
region_rect_add(tb->region, x, y, w, h);
return 1;
}
-EAPI int
+EVAS_API int
evas_common_tilebuf_del_redraw(Tilebuf *tb, int x, int y, int w, int h)
{
region_rect_del(tb->region, x, y, w, h);
return 1;
}
-EAPI int
+EVAS_API int
evas_common_tilebuf_add_motion_vector(Tilebuf *tb EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED, int w EINA_UNUSED, int h EINA_UNUSED, int dx EINA_UNUSED, int dy EINA_UNUSED, int alpha EINA_UNUSED)
{
return 0;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_clear(Tilebuf *tb)
{
region_free(tb->region);
@@ -93,13 +95,13 @@ _region_round(Region *region, int tsize)
return region2;
}
-EAPI Tilebuf_Rect *
+EVAS_API Tilebuf_Rect *
evas_common_tilebuf_get_render_rects(Tilebuf *tb)
{
Tilebuf_Rect *rects = NULL, *r, *rend, *rbuf;
Region *region2;
Box *rects2, *rs;
- int n;
+ int n, num, minx, miny, maxx, maxy;
region2 = _region_round(tb->region, 16);
if (!region2) return NULL;
@@ -126,8 +128,18 @@ evas_common_tilebuf_get_render_rects(Tilebuf *tb)
rend = rbuf + n;
rs = rects2;
+ num = 0;
+
+ minx = rs->x1;
+ miny = rs->y1;
+ maxx = rs->x2;
+ maxy = rs->y2;
for (r = rbuf; r < rend; r++)
{
+ if (rs->x1 < minx) minx = rs->x1;
+ if (rs->y1 < miny) miny = rs->y1;
+ if (rs->x2 > maxx) maxx = rs->x2;
+ if (rs->y2 > maxy) maxy = rs->y2;
EINA_INLIST_GET(r)->next = NULL;
EINA_INLIST_GET(r)->prev = NULL;
EINA_INLIST_GET(r)->last = NULL;
@@ -139,12 +151,25 @@ evas_common_tilebuf_get_render_rects(Tilebuf *tb)
rects = (Tilebuf_Rect *)
eina_inlist_append(EINA_INLIST_GET(rects),
EINA_INLIST_GET(r));
+ num++;
+ }
+ // if > max, then bounding box
+ if (num > MAXREG)
+ {
+ r = rects;
+ EINA_INLIST_GET(r)->next = NULL;
+ EINA_INLIST_GET(r)->prev = NULL;
+ EINA_INLIST_GET(r)->last = NULL;
+ r->x = minx;
+ r->y = miny;
+ r->w = maxx - minx;
+ r->h = maxy - miny;
}
region_free(region2);
return rects;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_free_render_rects(Tilebuf_Rect *rects)
{
free(rects);
@@ -286,7 +311,7 @@ static inline list_node_t *
rect_list_unlink_next(list_t *rects, list_node_t *parent_node)
{
list_node_t *node;
-
+
if (parent_node)
{
node = parent_node->next;
@@ -316,7 +341,7 @@ rect_list_clear(list_t *rects)
while (node)
{
list_node_t *aux;
-
+
aux = node->next;
rect_list_node_pool_put(node);
node = aux;
@@ -460,7 +485,7 @@ _calc_intra_outer_rect_area(const rect_t a, const rect_t b,
{
int min_left, max_left, min_right, max_right;
int min_top, max_top, min_bottom, max_bottom;
-
+
if (a.left < b.left)
{
max_left = b.left;
@@ -832,12 +857,12 @@ _add_redraw(list_t *rects, int x, int y, int w, int h, int fuzz)
/////////////////////////////////////////////////////////////////
-EAPI void
+EVAS_API void
evas_common_tilebuf_init(void)
{
}
-EAPI Tilebuf *
+EVAS_API Tilebuf *
evas_common_tilebuf_new(int w, int h)
{
Tilebuf *tb;
@@ -851,7 +876,7 @@ evas_common_tilebuf_new(int w, int h)
return tb;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_free(Tilebuf *tb)
{
rect_list_clear(&tb->rects);
@@ -859,34 +884,34 @@ evas_common_tilebuf_free(Tilebuf *tb)
free(tb);
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_set_tile_size(Tilebuf *tb, int tw, int th)
{
tb->tile_size.w = tw;
tb->tile_size.h = th;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_get_tile_size(Tilebuf *tb, int *tw, int *th)
{
if (tw) *tw = tb->tile_size.w;
if (th) *th = tb->tile_size.h;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_tile_strict_set(Tilebuf *tb, Eina_Bool strict)
{
tb->strict_tiles = strict;
}
-EAPI int
+EVAS_API int
evas_common_tilebuf_add_redraw(Tilebuf *tb, int x, int y, int w, int h)
{
if ((w <= 0) || (h <= 0)) return 0;
RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, tb->outbuf_w, tb->outbuf_h);
if ((w <= 0) || (h <= 0)) return 0;
// optimize a common case -> adding the exact same rect 2x in a row
- if ((tb->prev_add.x == x) && (tb->prev_add.y == y) &&
+ if ((tb->prev_add.x == x) && (tb->prev_add.y == y) &&
(tb->prev_add.w == w) && (tb->prev_add.h == h)) return 1;
tb->prev_add.x = x; tb->prev_add.y = y;
tb->prev_add.w = w; tb->prev_add.h = h;
@@ -894,7 +919,7 @@ evas_common_tilebuf_add_redraw(Tilebuf *tb, int x, int y, int w, int h)
return _add_redraw(&tb->rects, x, y, w, h, FUZZ * FUZZ);
}
-EAPI int
+EVAS_API int
evas_common_tilebuf_del_redraw(Tilebuf *tb, int x, int y, int w, int h)
{
rect_t r;
@@ -904,7 +929,7 @@ evas_common_tilebuf_del_redraw(Tilebuf *tb, int x, int y, int w, int h)
RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, tb->outbuf_w, tb->outbuf_h);
if ((w <= 0) || (h <= 0)) return 0;
// optimize a common case -> deleting the exact same rect 2x in a row
- if ((tb->prev_del.x == x) && (tb->prev_del.y == y) &&
+ if ((tb->prev_del.x == x) && (tb->prev_del.y == y) &&
(tb->prev_del.w == w) && (tb->prev_del.h == h)) return 1;
tb->prev_del.x = x; tb->prev_del.y = y;
tb->prev_del.w = w; tb->prev_del.h = h;
@@ -915,13 +940,13 @@ evas_common_tilebuf_del_redraw(Tilebuf *tb, int x, int y, int w, int h)
return 0;
}
-EAPI int
+EVAS_API int
evas_common_tilebuf_add_motion_vector(Tilebuf *tb EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED, int w EINA_UNUSED, int h EINA_UNUSED, int dx EINA_UNUSED, int dy EINA_UNUSED, int alpha EINA_UNUSED)
{
return 0;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_clear(Tilebuf *tb)
{
tb->prev_add.x = tb->prev_add.y = tb->prev_add.w = tb->prev_add.h = 0;
@@ -930,7 +955,7 @@ evas_common_tilebuf_clear(Tilebuf *tb)
tb->need_merge = 0;
}
-EAPI Tilebuf_Rect *
+EVAS_API Tilebuf_Rect *
evas_common_tilebuf_get_render_rects(Tilebuf *tb)
{
list_node_t *n;
@@ -993,7 +1018,7 @@ evas_common_tilebuf_get_render_rects(Tilebuf *tb)
if (x1 < bx1) bx1 = x1;
x2 = x1 + ((rect_node_t *)n)->rect.width;
if (x2 > bx2) bx2 = x2;
-
+
y1 = ((rect_node_t *)n)->rect.top;
if (y1 < by1) by1 = y1;
y2 = y1 + ((rect_node_t *)n)->rect.height;
@@ -1003,7 +1028,7 @@ evas_common_tilebuf_get_render_rects(Tilebuf *tb)
}
else
return NULL;
-
+
/* magic number - if we have > MAXREG regions to update, take bounding */
if (num > MAXREG)
{
@@ -1055,7 +1080,7 @@ evas_common_tilebuf_get_render_rects(Tilebuf *tb)
return rects;
}
-EAPI void
+EVAS_API void
evas_common_tilebuf_free_render_rects(Tilebuf_Rect *rects)
{
free(rects);
diff --git a/src/lib/evas/common/language/evas_bidi_utils.c b/src/lib/evas/common/language/evas_bidi_utils.c
index ab1afeb1f7..61750d5d76 100644
--- a/src/lib/evas/common/language/evas_bidi_utils.c
+++ b/src/lib/evas/common/language/evas_bidi_utils.c
@@ -105,7 +105,7 @@ evas_bidi_is_rtl_str(const Eina_Unicode *str)
* @param len the length of th string.
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
*/
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_bidi_shape_string(Eina_Unicode *eina_ustr, const Evas_BiDi_Paragraph_Props *bidi_props, size_t start, size_t len)
{
FriBidiChar *ustr, *base_ustr = NULL;
diff --git a/src/lib/evas/common/language/evas_bidi_utils.h b/src/lib/evas/common/language/evas_bidi_utils.h
index 9b4ea68d64..a2af78e856 100644
--- a/src/lib/evas/common/language/evas_bidi_utils.h
+++ b/src/lib/evas/common/language/evas_bidi_utils.h
@@ -151,7 +151,7 @@ evas_bidi_paragraph_props_get(const Eina_Unicode *eina_ustr, size_t len, int *se
void
evas_bidi_props_copy_and_ref(const Evas_BiDi_Props *src, Evas_BiDi_Props *dst);
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_bidi_shape_string(Eina_Unicode *eina_ustr, const Evas_BiDi_Paragraph_Props *bidi_props, size_t start, size_t len);
void
diff --git a/src/lib/evas/common/region.c b/src/lib/evas/common/region.c
index 73c118d407..195644f7bb 100644
--- a/src/lib/evas/common/region.c
+++ b/src/lib/evas/common/region.c
@@ -21,20 +21,20 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group.
-
-Copyright 1987, 1988, 1989 by
-Digital Equipment Corporation, Maynard, Massachusetts.
+
+Copyright 1987, 1988, 1989 by
+Digital Equipment Corporation, Maynard, Massachusetts.
All Rights Reserved
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
+both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Digital not be
used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
+software without specific, written prior permission.
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
@@ -1252,7 +1252,7 @@ region_rect_inside(Region *region, Box *bx)
return REGION_STATE_PARTIAL;
}
- // (x,y) starts at upper left of rect, moving to the right and down
+ // (x,y) starts at upper left of rect, moving to the right and down
x = bx->x1;
y = bx->y1;
diff --git a/src/lib/evas/common/region.h b/src/lib/evas/common/region.h
index 0cdaffd842..cacdb1060b 100644
--- a/src/lib/evas/common/region.h
+++ b/src/lib/evas/common/region.h
@@ -30,13 +30,13 @@ Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
All Rights Reserved
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
+both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Digital not be
used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
+software without specific, written prior permission.
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
diff --git a/src/lib/evas/common3d/meson.build b/src/lib/evas/common3d/meson.build
deleted file mode 100644
index 22341b4a84..0000000000
--- a/src/lib/evas/common3d/meson.build
+++ /dev/null
@@ -1,2 +0,0 @@
-subdir('primitives')
-subdir('save_load') \ No newline at end of file
diff --git a/src/lib/evas/common3d/primitives/meson.build b/src/lib/evas/common3d/primitives/meson.build
deleted file mode 100644
index 2888869bf8..0000000000
--- a/src/lib/evas/common3d/primitives/meson.build
+++ /dev/null
@@ -1,5 +0,0 @@
-subdir('solids_of_revolution')
-subdir('surfaces')
-subdir('tabulated_primitives')
-
-evas_src += files(['primitive_common.c']) \ No newline at end of file
diff --git a/src/lib/evas/common3d/primitives/primitive_common.c b/src/lib/evas/common3d/primitives/primitive_common.c
deleted file mode 100644
index 1bea0682c6..0000000000
--- a/src/lib/evas/common3d/primitives/primitive_common.c
+++ /dev/null
@@ -1,203 +0,0 @@
-#include "primitive_common.h"
-
-void _set_vertex_data_from_array(Evas_Canvas3D_Mesh *mesh,
- int frame,
- const float *data,
- Evas_Canvas3D_Vertex_Attrib attr,
- int start,
- int attr_count,
- int line,
- int vcount)
-{
- float *address, *out;
- int stride, i, j;
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, frame, attr, 0, NULL);
- address = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, frame, attr);
- stride = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, frame, attr);
- if (stride == 0) stride = sizeof(float) * attr_count;
- for (i = 0; i < vcount; i++)
- {
- out = (float *)((char *)address + stride * i);
- for (j = 0; j < attr_count; j++)
- out[j] = data[start + (line * i) + j];
- }
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, frame, attr);
-}
-
-void
-_set_vec3_vertex_data(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int vcount,
- Eina_Vector3 *data,
- Evas_Canvas3D_Vertex_Attrib attr)
-{
- float *address, *out;
- int stride, i;
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, frame, attr, 0, NULL);
- address = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, frame, attr);
- stride = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, frame, attr);
- if (stride == 0) stride = sizeof(float) * 3;
- for (i = 0; i < vcount; i++)
- {
- out = (float *)((char *)address + stride * i);
- out[0] = data[i].x;
- out[1] = data[i].y;
- out[2] = data[i].z;
- }
- free(data);
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, frame, attr);
-}
-
-void
-_set_vec2_vertex_data(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int vcount,
- Eina_Vector2 *data,
- Evas_Canvas3D_Vertex_Attrib attr)
-{
- float *address, *out;
- int stride, i;
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, frame, attr, 0, NULL);
- address = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, frame, attr);
- stride = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, frame, attr);
- if (stride == 0) stride = sizeof(float) * 2;
- for (i = 0; i < vcount; i++)
- {
- out = (float *)((char *)address + stride * i);
- out[0] = data[i].x;
- out[1] = data[i].y;
- }
- free(data);
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, frame, attr);
-}
-
-void
-_generate_indices(unsigned short *indices, int a, int b)
-{
- int i, j, a1 = a + 1;
- unsigned short *index = &indices[0];
-
- for (i = 0; i < b; i++)
- {
- for (j = 0; j < a; j++)
- {
- *index++ = j + a1 * i;
- *index++ = j + a1 * (i + 1);
- *index++ = j + 1 + a1 * (i + 1);
-
- *index++ = j + a1 * i;
- *index++ = j + 1 + a1 * i;
- *index++ = j + a1 * (i + 1) + 1;
- }
- }
-}
-
-void
-_primitives_vec3_copy(Eina_Vector3 *dst, const Eina_Vector3 *src)
-{
- dst->x = src->x;
- dst->y = src->y;
- dst->z = src->z;
-}
-
-void
-_primitives_vec3_subtract(Eina_Vector3 *out, const Eina_Vector3 *a, const Eina_Vector3 *b)
-{
- out->x = a->x - b->x;
- out->y = a->y - b->y;
- out->z = a->z - b->z;
-}
-
-void
-_primitives_vec3_cross_product(Eina_Vector3 *out, const Eina_Vector3 *a, const Eina_Vector3 *b)
-{
- Eina_Vector3 tmp;
-
- tmp.x = a->y * b->z - a->z * b->y;
- tmp.y = a->z * b->x - a->x * b->z;
- tmp.z = a->x * b->y - a->y * b->x;
-
- _primitives_vec3_copy(out, &tmp);
-}
-
-void
-_primitives_vec3_normalize(Eina_Vector3 *out)
-{
- Evas_Real size = out->x * out->x + out->y *out->y + out->z * out->z;
- size = sqrt(size);
- out->x /= size;
- out->y /= size;
- out->z /= size;
-}
-
-void
-evas_common_set_model_from_primitive(Evas_Canvas3D_Mesh *model,
- int frame,
- Evas_Canvas3D_Primitive_Data *primitive)
-{
- Evas_Real ratio = primitive->ratio;
- int precision = primitive->precision;
- Evas_Canvas3D_Surface_Func *surface = primitive->surface;
- Eina_Vector2 tex_scale = primitive->tex_scale;
- Evas_Canvas3D_Primitive_Mode mode = primitive->mode;
-
- switch (primitive->form)
- {
- case EVAS_CANVAS3D_MESH_PRIMITIVE_NONE:
- case EVAS_CANVAS3D_MESH_PRIMITIVE_COUNT:
- {
- ERR("Primitive with this type cannot be set to mesh.");
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_SQUARE:
- {
- evas_model_set_from_square_primitive(model, frame);
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE:
- {
- evas_model_set_from_cube_primitive(model, frame);
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_CYLINDER:
- {
- evas_model_set_from_cylinder_primitive(model, frame, mode,
- precision, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_CONE:
- {
- evas_model_set_from_cone_primitive(model, frame, mode,
- precision, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE:
- {
- evas_model_set_from_sphere_primitive(model, frame, mode,
- precision, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_TORUS:
- {
- evas_model_set_from_torus_primitive(model, frame,
- ratio, precision, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_SURFACE:
- {
- evas_model_set_from_surface_primitive(model, frame,
- surface, precision, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_MESH_PRIMITIVE_TERRAIN:
- {
- evas_model_set_from_terrain_primitive(model, frame,
- precision, tex_scale);
- break;
- }
- default:
- {
- ERR("Unknown type of primitive");
- }
- }
-}
diff --git a/src/lib/evas/common3d/primitives/primitive_common.h b/src/lib/evas/common3d/primitives/primitive_common.h
deleted file mode 100644
index 1cf4d916fb..0000000000
--- a/src/lib/evas/common3d/primitives/primitive_common.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif //HAVE_CONFIG_H
-
-#ifndef PRIMITIVE_COMMON
-#define PRIMITIVE_COMMON
-#include "evas_options.h"
-
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define ALLOCATE_VERTEX_DATA \
- Eina_Vector3 *vertices = malloc(sizeof(Eina_Vector3) * vcount); \
- Eina_Vector3 *normals = malloc(sizeof(Eina_Vector3) * vcount); \
- Eina_Vector2 *tex_coord = malloc(sizeof(Eina_Vector2) * vcount); \
- Eina_Vector3 *tangents = malloc(sizeof(Eina_Vector3) * vcount); \
- unsigned short *indices = malloc(sizeof(short) * icount);
-
-#define SET_VERTEX_DATA(frame) \
- Eina_Bool frame_exist; \
- frame_exist = evas_canvas3d_mesh_frame_exist(mesh, frame); \
- if (!frame_exist) \
- evas_canvas3d_mesh_frame_add(mesh, frame); \
- evas_canvas3d_mesh_vertex_count_set(mesh, vcount); \
- evas_canvas3d_mesh_index_data_copy_set(mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, \
- icount, &indices[0]); \
- _set_vec3_vertex_data(mesh, frame, vcount, vertices, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION); \
- _set_vec3_vertex_data(mesh, frame, vcount, normals, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL); \
- _set_vec2_vertex_data(mesh, frame, vcount, tex_coord, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD); \
- _set_vec3_vertex_data(mesh, frame, vcount, tangents, EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT); \
- free(indices);
-
-#define SET_VERTEX_DATA_FROM_ARRAY(mesh, frame, varray, vcount, indices, icount) \
- Eina_Bool frame_exist; \
- frame_exist = evas_canvas3d_mesh_frame_exist(mesh, frame); \
- if (!frame_exist) \
- evas_canvas3d_mesh_frame_add(mesh, frame); \
- evas_canvas3d_mesh_vertex_count_set(mesh, vcount); \
- evas_canvas3d_mesh_index_data_copy_set(mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, \
- icount, &indices[0]); \
- _set_vertex_data_from_array(mesh, frame, varray, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, \
- 0, 3, 15, vcount); \
- _set_vertex_data_from_array(mesh, frame, varray, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, \
- 3, 3, 15, vcount); \
- _set_vertex_data_from_array(mesh, frame, varray, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, \
- 6, 4, 15, vcount); \
- _set_vertex_data_from_array(mesh, frame, varray, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, \
- 10, 2, 15, vcount); \
- _set_vertex_data_from_array(mesh, frame, varray, EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT, \
- 12, 3, 15, vcount);
-
-void _generate_indices(unsigned short *indices, int count, int width);
-void _set_vec3_vertex_data(Evas_Canvas3D_Mesh *mesh, int frame, int vcount, Eina_Vector3 *data, Evas_Canvas3D_Vertex_Attrib attr);
-void _set_vec2_vertex_data(Evas_Canvas3D_Mesh *mesh, int frame, int vcount, Eina_Vector2 *data, Evas_Canvas3D_Vertex_Attrib attr);
-void _set_vertex_data_from_array(Evas_Canvas3D_Mesh *mesh, int frame, const float *data, Evas_Canvas3D_Vertex_Attrib attr, int start, int attr_count, int line, int vcount);
-
-void _primitives_vec3_copy(Eina_Vector3 *dst, const Eina_Vector3 *src);
-void _primitives_vec3_subtract(Eina_Vector3 *out, const Eina_Vector3 *a, const Eina_Vector3 *b);
-void _primitives_vec3_cross_product(Eina_Vector3 *out, const Eina_Vector3 *a, const Eina_Vector3 *b);
-void _primitives_vec3_normalize(Eina_Vector3 *out);
-
-#endif //PRIMITIVE_COMMON
diff --git a/src/lib/evas/common3d/primitives/solids_of_revolution/cone.c b/src/lib/evas/common3d/primitives/solids_of_revolution/cone.c
deleted file mode 100644
index a2852bb374..0000000000
--- a/src/lib/evas/common3d/primitives/solids_of_revolution/cone.c
+++ /dev/null
@@ -1,140 +0,0 @@
-#include "../primitive_common.h"
-
-void
-_set_default_cone(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i, j, num;
- double dfi, fi, sinfi, cosfi, nplane, nz;
-
- icount = p * 18;
- vccount = p + 1;
- vcount = 4 * vccount;
-
- dfi = 2.0 * M_PI / p;
- nz = sqrt(1.0 / 3.0);
- nplane = sqrt(2.0 / 3.0);
-
- ALLOCATE_VERTEX_DATA
-
- for (i = 0; i < vccount; i++)
- {
- fi = i * dfi;
- sinfi = sin(fi);
- cosfi = cos(fi);
-
- vertices[i].x = 0.0;
- vertices[i].y = 0.0;
- vertices[i].z = -0.5;
- vertices[i + vccount].x = sinfi / 2.0;
- vertices[i + vccount].y = cosfi / 2.0;
- vertices[i + vccount].z = -0.5;
- vertices[i + 2 * vccount] = vertices[i + vccount];
- vertices[i + 3 * vccount].x = 0.0;
- vertices[i + 3 * vccount].y = 0.0;
- vertices[i + 3 * vccount].z = 0.5;
-
- normals[i].x = normals[i].y = 0.0;
- normals[i].z = -1.0;
- normals[i + vccount] = normals[i];
- normals[i + 2 * vccount].x = sinfi * nplane;
- normals[i + 2 * vccount].y = cosfi * nplane;
- normals[i + 2 * vccount].z = nz;
- normals[i + 3 * vccount] = normals[i + 2 * vccount];
-
- for (j = 0; j < 4; j++)
- {
- num = i + j * vccount;
-
- tangents[num].x = cosfi;
- tangents[num].y = -sinfi;
- tangents[num].z = 0.0;
-
- tex_coord[num].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[num].y = ((j + 1) / 2.0) * tex_scale.y / 2.0;
- }
- }
-
- _generate_indices(indices, p, 3);
-
- SET_VERTEX_DATA(frame)
-}
-
-void
-_set_cone_without_base(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i;
- double dfi, fi, sinfi, cosfi, nplane, nz;
-
- icount = p * 6;
- vccount = p + 1;
- vcount = 2 * vccount;
-
- dfi = 2.0 * M_PI / p;
- nz = sqrt(1.0 / 3.0);
- nplane = sqrt(2.0 / 3.0);
-
- ALLOCATE_VERTEX_DATA
-
- for (i = 0; i < vccount; i++)
- {
- fi = i * dfi;
- sinfi = sin(fi);
- cosfi = cos(fi);
- vertices[i].x = sinfi / 2.0;
- vertices[i].y = cosfi / 2.0;
- vertices[i].z = -0.5;
- vertices[i + vccount].x = 0;
- vertices[i + vccount].y = 0;
- vertices[i + vccount].z = 0.5;
-
- normals[i + vccount].x = normals[i].x = sinfi * nplane;
- normals[i + vccount].y = normals[i].y = cosfi * nplane;
- normals[i + vccount].z = normals[i].z = nz;
-
- tangents[i + vccount].x = tangents[i].x = cosfi;
- tangents[i + vccount].y = tangents[i].y = -sinfi;
- tangents[i + vccount].z = tangents[i].z = 0;
-
- tex_coord[i].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[i].y = 0;
- tex_coord[i + vccount].x = tex_coord[i].x;
- tex_coord[i + vccount].y = tex_scale.y;
- }
-
- _generate_indices(indices, p, 1);
-
- SET_VERTEX_DATA(frame)
-}
-
-void
-evas_model_set_from_cone_primitive(Evas_Canvas3D_Mesh *mesh,
- int frame,
- Evas_Canvas3D_Primitive_Mode mode,
- int p,
- Eina_Vector2 tex_scale)
-{
- switch (mode)
- {
- case EVAS_CANVAS3D_PRIMITIVE_MODE_DEFAULT:
- case EVAS_CANVAS3D_PRIMITIVE_MODE_ALTERNATIVE_UV:
- {
- _set_default_cone(mesh, frame, p, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_PRIMITIVE_MODE_WITHOUT_BASE:
- {
- _set_cone_without_base(mesh, frame, p, tex_scale);
- break;
- }
- default:
- {
- ERR("Unknown mode of primitive");
- }
- }
-}
diff --git a/src/lib/evas/common3d/primitives/solids_of_revolution/cylinder.c b/src/lib/evas/common3d/primitives/solids_of_revolution/cylinder.c
deleted file mode 100644
index fc0d3d1d92..0000000000
--- a/src/lib/evas/common3d/primitives/solids_of_revolution/cylinder.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#include "../primitive_common.h"
-
-void
-_set_default_cylinder(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i, j, num;
- icount = p * 30;
- vccount = p + 1;
- vcount = 6 * vccount;
-
- ALLOCATE_VERTEX_DATA
-
- double dfi, fi, sinfi, cosfi;
- dfi = 2 * M_PI / p;
-
- for (i = 0; i < vccount; i++)
- {
- fi = i * dfi;
- sinfi = sin(fi);
- cosfi = cos(fi);
-
- for (j = 0; j < 6; j++)
- {
- num = i + j * vccount;
-
- vertices[num].z = -0.5 + j / 3.0;
- if ((j == 0) || (j == 5))
- {
- vertices[num].x = vertices[num].y = 0.0;
- }
- else
- {
- vertices[num].x = sinfi / 2.0;
- vertices[num].y = cosfi / 2.0;
- }
-
- if ((j == 2) || (j == 3))
- {
- normals[num].x = sinfi;
- normals[num].y = cosfi;
- normals[num].z = 0.0;
- }
- else
- {
- normals[num].x = normals[num].y = 0.0;
- normals[num].z = -1.0 + j / 2.0;
- }
-
- tangents[num].x = cosfi;
- tangents[num].y = -sinfi;
- tangents[num].z = 0.0;
-
- tex_coord[num].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[num].y = ((j + 1) / 2.0) * tex_scale.y / 3.0;
- }
- }
-
- _generate_indices(indices, p, 5);
-
- SET_VERTEX_DATA(frame)
-}
-
-void
-_set_cylinder_without_bases(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i;
- icount = p * 6;
- vccount = p + 1;
- vcount = 2 * vccount;
-
- ALLOCATE_VERTEX_DATA
-
- double dfi, fi, sinfi, cosfi;
- dfi = 2 * M_PI / p;
-
- for (i = 0; i < vccount; i++)
- {
- fi = i * dfi;
- sinfi = sin(fi);
- cosfi = cos(fi);
- vertices[i + vccount].x = vertices[i].x = sinfi / 2.0;
- vertices[i + vccount].y = vertices[i].y = cosfi / 2.0;
- vertices[i].z = -0.5;
- vertices[i + vccount].z = 0.5;
-
- normals[i + vccount].x = normals[i].x = sinfi;
- normals[i + vccount].y = normals[i].y = cosfi;
- normals[i + vccount].z = normals[i].z = 0;
-
- tangents[i + vccount].x = tangents[i].x = cosfi;
- tangents[i + vccount].y = tangents[i].y = -sinfi;
- tangents[i + vccount].z = tangents[i].z = 0;
-
- tex_coord[i].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[i].y = 0;
- tex_coord[i + vccount].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[i + vccount].y = tex_scale.y;
- }
-
- _generate_indices(indices, p, 1);
-
- SET_VERTEX_DATA(frame)
-}
-
-void
-evas_model_set_from_cylinder_primitive(Evas_Canvas3D_Mesh *mesh,
- int frame,
- Evas_Canvas3D_Primitive_Mode mode,
- int p,
- Eina_Vector2 tex_scale)
-{
- switch (mode)
- {
- case EVAS_CANVAS3D_PRIMITIVE_MODE_DEFAULT:
- case EVAS_CANVAS3D_PRIMITIVE_MODE_ALTERNATIVE_UV:
- {
- _set_default_cylinder(mesh, frame, p, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_PRIMITIVE_MODE_WITHOUT_BASE:
- {
- _set_cylinder_without_bases(mesh, frame, p, tex_scale);
- break;
- }
- default:
- {
- ERR("Unknown mode of primitive");
- }
- }
-}
diff --git a/src/lib/evas/common3d/primitives/solids_of_revolution/meson.build b/src/lib/evas/common3d/primitives/solids_of_revolution/meson.build
deleted file mode 100644
index ac35b05093..0000000000
--- a/src/lib/evas/common3d/primitives/solids_of_revolution/meson.build
+++ /dev/null
@@ -1,6 +0,0 @@
-evas_src += files([
- 'cone.c',
- 'cylinder.c',
- 'sphere.c',
- 'torus.c'
-]) \ No newline at end of file
diff --git a/src/lib/evas/common3d/primitives/solids_of_revolution/sphere.c b/src/lib/evas/common3d/primitives/solids_of_revolution/sphere.c
deleted file mode 100644
index f2e81b0bf5..0000000000
--- a/src/lib/evas/common3d/primitives/solids_of_revolution/sphere.c
+++ /dev/null
@@ -1,189 +0,0 @@
-#include "../primitive_common.h"
-
-void
-_set_default_sphere(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i, j;
- icount = p * p * 6;
- vccount = p + 1;
- vcount = vccount * vccount;
-
- ALLOCATE_VERTEX_DATA
-
- double dtheta, dfi, sinth, costh, fi, theta, sinfi, cosfi;
- dtheta = M_PI / p;
- dfi = 2 * M_PI / p;
-
- for (j = 0; j < vccount; j++)
- {
- theta = j * dtheta;
- sinth = sin(theta);
- costh = cos(theta);
- for (i = 0; i < vccount; i++)
- {
- fi = i * dfi;
- sinfi = sin(fi);
- cosfi = cos(fi);
- normals[i + j * vccount].x = sinth * sinfi;
- normals[i + j * vccount].y = sinth * cosfi;
- normals[i + j * vccount].z = costh;
-
- vertices[i + j * vccount].x = normals[i + j * vccount].x / 2;
- vertices[i + j * vccount].y = normals[i + j * vccount].y / 2;
- vertices[i + j * vccount].z = normals[i + j * vccount].z / 2;
-
- tangents[i + j * vccount].x = -sinth * cosfi;
- tangents[i + j * vccount].y = sinth * sinfi;
- tangents[i + j * vccount].z = 0;
-
- _primitives_vec3_normalize(&tangents[i + j * vccount]);
-
- tex_coord[i + j * vccount].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[i + j *vccount].y = tex_scale.y - j / (float)(vccount - 1) * tex_scale.y;
- }
- }
-
- _generate_indices(indices, p, p);
-
- SET_VERTEX_DATA(frame)
-}
-
-void
-_set_sphere_with_alternative_uv(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i, j;
-
- vccount = p + 1;
- vcount = vccount * vccount;
- icount = p * p * 6;
-
- ALLOCATE_VERTEX_DATA
-
- /* Calculate vertices position of the sphere mesh by using
- splitting of sphere by latitude and longitude. */
- for (i = 0; i <= p; i++)
- {
- double lati, z, r, point_r;
-
- point_r = 0.00001;//non-zero little value for correct tangents calculation.
-
- lati = ((M_PI - 2 * point_r) * (double)i) / (double)p;
- z = cos(lati + point_r);
- r = fabs(sin(lati + point_r));
-
- for (j = 0; j <= p; j++)
- {
- double longi;
- int num = (i * (p + 1)) + j;
-
- longi = (M_PI * 2.0 * (double)j) / (double)p;
-
- normals[num].x = r * sin(longi);
- normals[num].y = r * cos(longi);
- normals[num].z = z;
-
- vertices[num].x = normals[num].x / 2;
- vertices[num].y = normals[num].y / 2;
- vertices[num].z = normals[num].z / 2;
-
- if (vertices[num].x > 0.0)
- {
- tangents[num].x = -normals[num].z;
- tangents[num].y = normals[num].y;
- tangents[num].z = normals[num].x;
- }
- else
- {
- tangents[num].x = normals[num].z;
- tangents[num].y = normals[num].y;
- tangents[num].z = -normals[num].x;
- }
-
- tex_coord[num].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[num].y = tex_scale.y - j / (float)(vccount - 1) * tex_scale.y;
- }
- }
-
- _generate_indices(indices, p, p);
-
- /* Triangulation of sphere mesh in appliance with buffer of indices. */
- for (i = 0; i < icount; i += 3)
- {
- Eina_Vector3 e1, e2;
- float du1, du2, dv1, dv2, f;
- Eina_Vector3 tangent;
- int num0, num1, num2;
-
- num0 = indices[i + 0];
- num1 = indices[i + 1];
- num2 = indices[i + 2];
-
- e1.x = vertices[num1].x - vertices[num0].x;
- e1.y = vertices[num1].y - vertices[num0].y;
- e1.z = vertices[num1].z - vertices[num0].z;
-
- e2.x = vertices[num2].x - vertices[num0].x;
- e2.y = vertices[num2].y - vertices[num0].y;
- e2.z = vertices[num2].z - vertices[num0].z;
-
- du1 = tex_coord[num1].x - tex_coord[num0].x;
- dv1 = tex_coord[num1].y - tex_coord[num0].y;
-
- du2 = tex_coord[num2].x - tex_coord[num0].x;
- dv2 = tex_coord[num2].y - tex_coord[num0].y;
-
- f = 1.0 / ((du1 * dv2) - (du2 * dv1));
-
- tangent.x = f * ((dv2 * e1.x) - (dv1 * e2.x));
- tangent.y = f * ((dv2 * e1.y) - (dv1 * e2.y));
- tangent.z = f * ((dv2 * e1.z) - (dv1 * e2.z));
-
- tangents[num0] = tangent;
- }
-
- /* Coupling between vertices by calculation of tangent parametr correct value. */
- for (i = 0; i <= p; i++)
- {
- for (j = 0; j <= p; j++)
- {
- if (j == p)
- {
- tangents[(i * (p + 1)) + j] = tangents[i * (p + 1)];
- }
- }
- }
- SET_VERTEX_DATA(frame)
-}
-
-void
-evas_model_set_from_sphere_primitive(Evas_Canvas3D_Mesh *mesh,
- int frame,
- Evas_Canvas3D_Primitive_Mode mode,
- int p,
- Eina_Vector2 tex_scale)
-{
- switch (mode)
- {
- case EVAS_CANVAS3D_PRIMITIVE_MODE_DEFAULT:
- case EVAS_CANVAS3D_PRIMITIVE_MODE_WITHOUT_BASE:
- {
- _set_default_sphere(mesh, frame, p, tex_scale);
- break;
- }
- case EVAS_CANVAS3D_PRIMITIVE_MODE_ALTERNATIVE_UV:
- {
- _set_sphere_with_alternative_uv(mesh, frame, p, tex_scale);
- break;
- }
- default:
- {
- ERR("Unknown mode of primitive");
- }
- }
-}
diff --git a/src/lib/evas/common3d/primitives/solids_of_revolution/torus.c b/src/lib/evas/common3d/primitives/solids_of_revolution/torus.c
deleted file mode 100644
index 99016c620a..0000000000
--- a/src/lib/evas/common3d/primitives/solids_of_revolution/torus.c
+++ /dev/null
@@ -1,67 +0,0 @@
-#include "../primitive_common.h"
-
-void
-evas_model_set_from_torus_primitive(Evas_Canvas3D_Mesh *mesh,
- int frame,
- Evas_Real ratio,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i, j;
- icount = p * p * 6;
- vccount = p + 1;
- vcount = vccount * vccount;
-
- ALLOCATE_VERTEX_DATA
-
- double d, sinth, costh, fi, theta, sinfi, cosfi;
-
- d = 2 * M_PI / p;
-
- float rratio;
-
- if ((ratio < 1.0))
- {
- printf("Ratio of torus should be greater than or equal 1.0.\n");
- printf("Ratio = %f is a bad value, so 3.0 is used like default ratio.\n",
- ratio);
- rratio = 1.0 / 3.0;
- }
- else
- {
- rratio = 1.0 / ratio;
- }
-
- for (j = 0; j < vccount; j++)
- {
- theta = j * d;
- sinth = sin(theta);
- costh = cos(theta);
- for (i = 0; i < vccount; i++)
- {
- fi = i * d;
- sinfi = sin(fi);
- cosfi = cos(fi);
- vertices[i + j * vccount].x = (1.0 - rratio + rratio * cosfi) * costh * 0.5;
- vertices[i + j * vccount].y = (1.0 - rratio + rratio * cosfi) * sinth * 0.5;
- vertices[i + j * vccount].z = rratio * sinfi * 0.5;
-
- normals[i + j * vccount].x = cosfi * costh;
- normals[i + j * vccount].y = cosfi * sinth;
- normals[i + j * vccount].z = sinfi;
-
- tangents[i + j * vccount].x = -sinfi * costh;
- tangents[i + j * vccount].y = -sinfi * sinth;
- tangents[i + j * vccount].z = cosfi;
-
- _primitives_vec3_normalize(&normals[i + j * vccount]);
-
- tex_coord[i + j * vccount].x = i / (float)(vccount - 1) * tex_scale.x;
- tex_coord[i + j *vccount].y = tex_scale.y - j / (float)(vccount - 1) * tex_scale.y;
- }
- }
-
- _generate_indices(indices, p, p);
-
- SET_VERTEX_DATA(frame)
-}
diff --git a/src/lib/evas/common3d/primitives/surfaces/meson.build b/src/lib/evas/common3d/primitives/surfaces/meson.build
deleted file mode 100644
index 398996f148..0000000000
--- a/src/lib/evas/common3d/primitives/surfaces/meson.build
+++ /dev/null
@@ -1,4 +0,0 @@
-evas_src += files([
- 'surface.c',
- 'terrain.c'
-]) \ No newline at end of file
diff --git a/src/lib/evas/common3d/primitives/surfaces/surface.c b/src/lib/evas/common3d/primitives/surfaces/surface.c
deleted file mode 100644
index 7698ba5fb6..0000000000
--- a/src/lib/evas/common3d/primitives/surfaces/surface.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "../primitive_common.h"
-
-Eina_Vector3 _get_func_normal(Evas_Canvas3D_Surface_Func *func, Evas_Real x, Evas_Real y)
-{
- Eina_Vector3 v00, v01, v10, d1, d2, normal;
-
- func(&v00.x, &v00.y, &v00.z, x, y);
- func(&v01.x, &v01.y, &v01.z, x, y + 0.01);
- func(&v10.x, &v10.y, &v10.z, x + 0.01, y);
- _primitives_vec3_subtract(&d1, &v00, &v01);
- _primitives_vec3_subtract(&d2, &v01, &v10);
-
- _primitives_vec3_cross_product(&normal, &d1, &d2);
-
- _primitives_vec3_normalize(&normal);
-
- return normal;
-}
-
-void
-_normalize(Eina_Vector3 *vertices, Eina_Vector3 *normals, int vcount)
-{
- int i;
- Eina_Vector3 min, max;
- min = max = vertices[0];
-
-#define CHECK_MIN_AND_MAX(coord) \
- if (min.coord > vertices[i].coord) \
- min.coord = vertices[i].coord; \
- else if (max.coord < vertices[i].coord) \
- max.coord = vertices[i].coord;
- for (i = 1; i < vcount; i++)
- {
- CHECK_MIN_AND_MAX(x)
- CHECK_MIN_AND_MAX(y)
- CHECK_MIN_AND_MAX(z)
- }
-#undef CHECK_MIN_AND_MAX
-
- for (i = 0; i < vcount; i++)
- {
- vertices[i].x = (vertices[i].x - min.x) / (max.x - min.x) - 0.5;
- vertices[i].y = (vertices[i].y - min.y) / (max.y - min.y) - 0.5;
- vertices[i].z = (vertices[i].z - min.z) / (max.z - min.z) - 0.5;
-
- normals[i].x = normals[i].x / (max.x - min.x);
- normals[i].y = normals[i].y / (max.y - min.y);
- normals[i].z = normals[i].z / (max.z - min.z);
- }
-}
-
-void
-evas_model_set_from_surface_primitive(Evas_Canvas3D_Mesh *mesh,
- int frame,
- Evas_Canvas3D_Surface_Func func,
- int p,
- Eina_Vector2 tex_scale)
-{
- int vcount, icount, vccount, i, j, num;
- icount = p * p * 6;
- vccount = p + 1;
- vcount = vccount * vccount;
-
- ALLOCATE_VERTEX_DATA
-
- Evas_Real v, u, d = 1.0 / p;
-
- for (j = 0; j < vccount; j++)
- {
- u = j * d - 0.5;
- for (i = 0; i < vccount; i++)
- {
- v = i * d - 0.5;
- num = i + j * vccount;
- func(&vertices[num].x,
- &vertices[num].y,
- &vertices[num].z,
- v, u);
- normals[num] = _get_func_normal(func, v, u);
-
- tangents[num].x = tangents[num].y = tangents[num].z = 0;
-
- tex_coord[num].x = i / ((vccount - 1) * tex_scale.x);
- tex_coord[num].y = tex_scale.y - j / ((vccount - 1) * tex_scale.y);
- }
- }
-
- _normalize(vertices, normals, vcount);
- _generate_indices(indices, p, p);
- SET_VERTEX_DATA(frame)
-}
diff --git a/src/lib/evas/common3d/primitives/surfaces/terrain.c b/src/lib/evas/common3d/primitives/surfaces/terrain.c
deleted file mode 100644
index 1f83c089ef..0000000000
--- a/src/lib/evas/common3d/primitives/surfaces/terrain.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include "../primitive_common.h"
-
-static Evas_Real
-_random(int x, int y)
-{
- int k = x + y * 57;
- k = (k << 13) ^ k;
- return (1.0f - ((k * (k * k * 15731 + 789221) + 1376312589) & 0x7fffffff) /
- 1073741824.0f);
-}
-
-static Evas_Real
-_smooth(Evas_Real x, Evas_Real y)
-{
- Evas_Real res;
- res = (_random(x - 1, y - 1) + _random(x + 1, y - 1) +
- _random(x - 1, y + 1) + _random(x + 1, y + 1)) / 16;
- res += (_random(x - 1, y) + _random(x + 1, y) +
- _random(x, y - 1) + _random(x, y + 1)) / 8;
- res += _random(x, y) / 4;
- return res;
-}
-
-static Evas_Real
-_interpolate(Evas_Real a, Evas_Real b, Evas_Real x)
-{
- Evas_Real ft = x * M_PI;
- Evas_Real f = (1 - cosf(ft)) * 0.5;
- return a * (1 - f) + b * f;
-}
-
-static Evas_Real _noise(Evas_Real x, Evas_Real y)
-{
- Evas_Real ix = (int)(x);
- Evas_Real fx = x - ix;
- Evas_Real iy = (int)(y);
- Evas_Real fy = y - iy;
-
- Evas_Real v1 = _smooth(ix, iy);
- Evas_Real v2 = _smooth(ix + 1, iy);
- Evas_Real v3 = _smooth(ix, iy + 1);
- Evas_Real v4 = _smooth(ix + 1, iy + 1);
-
- Evas_Real i1 = _interpolate(v1, v2, fx);
- Evas_Real i2 = _interpolate(v3, v4, fx);
-
- return _interpolate(i1, i2, fy);
-}
-
-static void
-_perlin_terrain(Evas_Real *out_x,
- Evas_Real *out_y,
- Evas_Real *out_z,
- Evas_Real x,
- Evas_Real y)
-{
- Evas_Real persistence = 0.5f;
- Evas_Real frequency = 5;
- Evas_Real amplitude = 1;
- int i = 0;
- int octaves = 5;
-
- *out_x = x;
- x += 0.5;
- *out_y = y;
- y += 0.5;
- *out_z = 0;
-
- for(i = 0; i < octaves; i++)
- {
- *out_z += _noise(x * frequency, y * frequency) * amplitude;
-
- amplitude *= persistence;
- frequency *= 2;
- }
-}
-
-void
-evas_model_set_from_terrain_primitive(Evas_Canvas3D_Mesh *mesh,
- int frame,
- int p,
- Eina_Vector2 tex_scale)
-{
- evas_model_set_from_surface_primitive(mesh, frame, _perlin_terrain, p, tex_scale);
-}
-
diff --git a/src/lib/evas/common3d/primitives/tabulated_primitives/cube.c b/src/lib/evas/common3d/primitives/tabulated_primitives/cube.c
deleted file mode 100644
index 85d49beaaa..0000000000
--- a/src/lib/evas/common3d/primitives/tabulated_primitives/cube.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "../primitive_common.h"
-
-const float vertices_of_cube[] =
-{
- /* positions normals vertex_color tex_coords tangents */
- /* Front */
- 0.5, -0.5, 0.5, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0,
- -0.5, -0.5, 0.5, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, -1.0, 0.0, 0.0,
- -0.5, -0.5, -0.5, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 0.0, 0.0,
- 0.5, -0.5, -0.5, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0, 0.0,
-
- /* Left */
- -0.5, -0.5, 0.5, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0,
- -0.5, 0.5, 0.5, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0,
- -0.5, 0.5, -0.5, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0,
- -0.5, -0.5, -0.5, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
-
- /* Back */
- -0.5, 0.5, 0.5, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- 0.5, 0.5, 0.5, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
- 0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- -0.5, 0.5, -0.5, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
-
- /* Right */
- 0.5, 0.5, 0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, -1.0,
- 0.5, -0.5, 0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0,
- 0.5, -0.5, -0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, -1.0,
- 0.5, 0.5, -0.5, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, -1.0,
-
- /* Top */
- -0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- -0.5, 0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- 0.5, 0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- 0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
-
- /* Bottom */
- -0.5, -0.5, -0.5, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, -1.0, 0.0, 0.0,
- -0.5, 0.5, -0.5, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, -1.0, 0.0, 0.0,
- 0.5, 0.5, -0.5, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0, 0.0,
- 0.5, -0.5, -0.5, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0,
-};
-
-const unsigned short indices_of_cube[] =
-{
- 0, 1, 2, 6, 7, 4,
- 4, 5, 6, 10, 11, 8,
- 8, 9, 10, 14, 15, 12,
- 12, 13, 14, 2, 3, 0,
- 19, 16, 17, 17, 18, 19,
- 23, 20, 21, 21, 22, 23
-};
-
-void
-evas_model_set_from_cube_primitive(Evas_Canvas3D_Mesh *mesh, int frame)
-{
- SET_VERTEX_DATA_FROM_ARRAY(mesh, frame, vertices_of_cube, 24, indices_of_cube, 36)
-}
diff --git a/src/lib/evas/common3d/primitives/tabulated_primitives/meson.build b/src/lib/evas/common3d/primitives/tabulated_primitives/meson.build
deleted file mode 100644
index a24df304d1..0000000000
--- a/src/lib/evas/common3d/primitives/tabulated_primitives/meson.build
+++ /dev/null
@@ -1,4 +0,0 @@
-evas_src += files([
- 'cube.c',
- 'square.c'
-]) \ No newline at end of file
diff --git a/src/lib/evas/common3d/primitives/tabulated_primitives/square.c b/src/lib/evas/common3d/primitives/tabulated_primitives/square.c
deleted file mode 100644
index e34e2b0dbb..0000000000
--- a/src/lib/evas/common3d/primitives/tabulated_primitives/square.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "../primitive_common.h"
-
-const float vertices_of_square[] =
-{
- /* positions normals vertex_color tex_coords tangents */
- -0.5, 0.5, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,
- 0.5, 0.5, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0,
- -0.5, -0.5, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
- 0.5, -0.5, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
-};
-
-const unsigned short indices_of_square[] = {0, 1, 2, 2, 1, 3};
-
-void
-evas_model_set_from_square_primitive(Evas_Canvas3D_Mesh *mesh, int frame)
-{
- SET_VERTEX_DATA_FROM_ARRAY(mesh, frame, vertices_of_square, 4, indices_of_square, 6)
-}
diff --git a/src/lib/evas/common3d/save_load/evas_model_load.c b/src/lib/evas/common3d/save_load/evas_model_load.c
deleted file mode 100644
index 7987140d53..0000000000
--- a/src/lib/evas/common3d/save_load/evas_model_load.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "evas_options.h"
-
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-void
-_evas_common_load_model(Evas_Canvas3D_Mesh *model,
- Eina_File *file,
- const char *file_path)
-{
- char *p;
- char *loader_type = NULL;
-
- p = strrchr(file_path, '.');
- if (p)
- {
- p++;
-#define CHECK_EXTENTION_BY_FILE_NAME(extention) \
- if (!strcasecmp(p, #extention)) \
- { \
- evas_model_load_file_##extention(model, file); \
- loader_type = #extention; \
- }
- CHECK_EXTENTION_BY_FILE_NAME(eet)
- CHECK_EXTENTION_BY_FILE_NAME(md2)
- CHECK_EXTENTION_BY_FILE_NAME(obj)
- CHECK_EXTENTION_BY_FILE_NAME(ply)
-#undef CHECK_EXTENTION_BY_FILE_NAME
- }
- if (!loader_type) ERR("Invalid mesh file type.");
-}
-
-void
-evas_common_load_model_from_file(Evas_Canvas3D_Mesh *model, const char *file)
-{
- Eina_File *tmp_file = eina_file_open(file, 0);
-
- if (tmp_file == NULL)
- {
- ERR("Failed to open file %s", file);
- ERR("Failed to initialize loader.");
- return;
- }
-
- Eina_File *e_file = eina_file_dup(tmp_file);
-
- if (e_file == NULL)
- {
- eina_file_close(tmp_file);
- file = NULL;
- ERR("Failed to initialize loader.");
- return;
- }
-
- eina_file_close(tmp_file);
-
- _evas_common_load_model(model, e_file, file);
-
- eina_file_close(e_file);
- e_file = NULL;
-}
-
-void
-evas_common_load_model_from_eina_file(Evas_Canvas3D_Mesh *model, const Eina_File *file)
-{
- Eina_File *e_file = eina_file_dup(file);
-
- if (e_file == NULL)
- {
- ERR("Failed to initialize loader.");
- return;
- }
-
- _evas_common_load_model(model, e_file, eina_file_filename_get(e_file));
-
- eina_file_close(e_file);
- e_file = NULL;
-}
diff --git a/src/lib/evas/common3d/save_load/evas_model_load_save_common.c b/src/lib/evas/common3d/save_load/evas_model_load_save_common.c
deleted file mode 100644
index 309b8435cc..0000000000
--- a/src/lib/evas/common3d/save_load/evas_model_load_save_common.c
+++ /dev/null
@@ -1,230 +0,0 @@
-#include "evas_model_load_save_common.h"
-
-# define SAVE_MESH_INDICES_COPY \
- if (header.indices_count) \
- { \
- data->indices = malloc(header.indices_count \
- * sizeof(unsigned short)); \
- if (pd->index_format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_BYTE) \
- { \
- for (i = 0; i < header.indices_count; i++) \
- data->indices[i] = ((unsigned char*)(pd->indices))[i]; \
- } \
- else \
- { \
- for (i = 0; i < header.indices_count; i++) \
- data->indices[i] = ((unsigned short*)(pd->indices))[i]; \
- } \
- } \
- else \
- { \
- data->indices = malloc(header.vertices_count * 3 \
- * sizeof(unsigned short)); \
- for (i = 0; i < header.vertices_count * 3; i++) \
- data->indices[i] = (unsigned short)i; \
- }
-
-/* create new header */
-Evas_Model_Load_Save_Header
-evas_model_load_save_header_new(void)
-{
- Evas_Model_Load_Save_Header header;
-
- header.vertices_count = 0;
- header.indices_count = 0;
- header.existence_of_positions = EINA_FALSE;
- header.existence_of_normals = EINA_FALSE;
- header.existence_of_tex_coords = EINA_FALSE;
- header.existence_of_colors = EINA_FALSE;
-
- return header;
-}
-
-void
-evas_model_load_vertex_data_unmap(Evas_Canvas3D_Mesh *mesh,
- int frame,
- Evas_Model_Load_Save_Header header)
-{
-#define UNMAP_IF_EXIST(existence, vertex_data_type) \
- if (existence) \
- { \
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, frame, \
- vertex_data_type); \
- }
- UNMAP_IF_EXIST(header.existence_of_positions, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION)
- UNMAP_IF_EXIST(header.existence_of_normals, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL)
- UNMAP_IF_EXIST(header.existence_of_tex_coords, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD)
- UNMAP_IF_EXIST(header.existence_of_colors, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR)
-#undef UNMAP_IF_EXIST
-}
-
-void
-evas_model_load_save_data_free(Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data *data)
-{
- if (header.existence_of_positions) free(data->positions);
- if (header.existence_of_normals) free(data->normals);
- if (header.existence_of_tex_coords) free(data->tex_coords);
- if (header.existence_of_colors) free(data->colors);
- free(data->indices);
-}
-
-void
-evas_model_load_vertex_data_to_mesh(Evas_Canvas3D_Mesh *mesh,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data data,
- Evas_Model_Load_Save_Stride *stride)
-{
- Evas_Model_Load_Save_Data map;
- int i, j;
-
- evas_canvas3d_mesh_vertex_count_set(mesh, header.vertices_count);
- evas_canvas3d_mesh_vertex_assembly_set(mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_frame_add(mesh, 0);
-
-#define VERTEX_DATA_MAP(name, vertex_data_type, default_size) \
- if (header.existence_of_##name) \
- { \
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, vertex_data_type, 0, NULL); \
- map.name = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, vertex_data_type); \
- stride->name = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, vertex_data_type); \
- if (stride->name == 0) stride->name = sizeof(float) * default_size; \
- }
- VERTEX_DATA_MAP(positions, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 3)
- VERTEX_DATA_MAP(normals, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 3)
- VERTEX_DATA_MAP(tex_coords, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 2)
- VERTEX_DATA_MAP(colors, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR, 4)
-#undef VERTEX_DATA_MAP
-
- for (i = 0; i < header.vertices_count; i++)
- {
- Evas_Model_Load_Save_Data current_pointer;
-
-#define FILL_VERTEX_DATA(name, size) \
- if (header.existence_of_##name) \
- { \
- current_pointer.name = (float *)((char *)map.name + stride->name * i); \
- for (j = 0; j < size; j++) \
- current_pointer.name[j] = ARRAY_2D(data.name, i, j, size); \
- }
- FILL_VERTEX_DATA(positions, 3)
- FILL_VERTEX_DATA(normals, 3)
- FILL_VERTEX_DATA(tex_coords, 2)
- FILL_VERTEX_DATA(colors, 3)
-#undef FILL_VERTEX_DATA
-
- if (header.existence_of_colors) current_pointer.colors[3] = 1.0;
- }
-}
-
-void
-evas_model_load_indices_data_to_mesh(Evas_Canvas3D_Mesh *mesh,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data data)
-{
- evas_canvas3d_mesh_index_data_copy_set(mesh, EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, header.indices_count, data.indices);
-}
-
-Eina_Bool
-evas_model_load_allocate_data_due_to_header(Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data *data)
-{
- if (header.existence_of_positions)
- data->positions = malloc(header.vertices_count * 3 * sizeof(float));
- if (header.existence_of_normals)
- data->normals = malloc(header.vertices_count * 3 * sizeof(float));
- if (header.existence_of_tex_coords)
- data->tex_coords = malloc(header.vertices_count * 2 * sizeof(float));
- if (header.existence_of_colors)
- data->colors = malloc(header.vertices_count * 3 * sizeof(float));
- data->indices = malloc(header.indices_count * sizeof(unsigned short));
-
- if ((header.existence_of_positions && (data->positions == NULL)) ||
- (header.existence_of_normals && (data->normals == NULL)) ||
- (header.existence_of_tex_coords && (data->tex_coords == NULL)) ||
- (header.existence_of_colors && (data->colors == NULL)) ||
- (data->indices == NULL))
- {
- free(data->positions);
- free(data->normals);
- free(data->tex_coords);
- free(data->colors);
- free(data->indices);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-void
-evas_model_load_aabb_add_to_frame(Evas_Canvas3D_Mesh *mesh,
- int frame,
- Evas_Model_Load_Save_Stride stride)
-{
- Evas_Canvas3D_Mesh_Data *pd;
- pd = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
-
- if (!evas_canvas3d_mesh_aabb_add_to_frame(pd, frame, stride.positions))
- {
- ERR("Axis-Aligned Bounding Box wasn't added in frame %d ", 0);
- }
-}
-
-Eina_Bool
-evas_model_save_header_from_mesh(Evas_Canvas3D_Mesh_Data *pd,
- Evas_Canvas3D_Mesh_Frame *f,
- Evas_Model_Load_Save_Header *header)
-{
- header->indices_count = pd->index_count;
- if (header->indices_count % 3 != 0)
- {
- printf("Index count is %d. It cannot be divided to triangles correctly.\n",
- header->indices_count);
- return EINA_FALSE;
- }
-
- header->existence_of_positions = (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].data != NULL);
- header->existence_of_normals = (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL].data != NULL);
- header->existence_of_tex_coords = (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD].data != NULL);
- header->existence_of_colors = (f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR].data != NULL);
- header->vertices_count = pd->vertex_count;
-
- return EINA_TRUE;
-}
-
-void
-evas_model_save_data_from_mesh(Evas_Canvas3D_Mesh_Data *pd,
- Evas_Canvas3D_Mesh_Frame *f,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data *data)
-{
- int i;
- if (header.existence_of_positions)
- data->positions = (float*)(&f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION])->data;
- if (header.existence_of_normals)
- data->normals = (float*)(&f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL])->data;
- if (header.existence_of_tex_coords)
- data->tex_coords = (float*)(&f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD])->data;
- if (header.existence_of_colors)
- data->colors = (float*)(&f->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR])->data;
- SAVE_MESH_INDICES_COPY
-}
-
-void
-evas_model_save_data_copy_from_mesh(Evas_Canvas3D_Mesh_Data *pd,
- Evas_Canvas3D_Mesh_Frame *f,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data *data)
-{
- int i;
-#define SAVE_MESH_VERTICES_COPY(name, vertex_data_type) \
- if (header.existence_of_##name) \
- memcpy(data->name, \
- (&f->vertices[vertex_data_type])->data, \
- header.vertices_count);
- SAVE_MESH_VERTICES_COPY(positions, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION)
- SAVE_MESH_VERTICES_COPY(normals, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL)
- SAVE_MESH_VERTICES_COPY(tex_coords, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD)
- SAVE_MESH_VERTICES_COPY(colors, EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR)
-#undef SAVE_MESH_VERTICES_COPY
- SAVE_MESH_INDICES_COPY
-}
diff --git a/src/lib/evas/common3d/save_load/evas_model_load_save_common.h b/src/lib/evas/common3d/save_load/evas_model_load_save_common.h
deleted file mode 100644
index be8dbae397..0000000000
--- a/src/lib/evas/common3d/save_load/evas_model_load_save_common.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#ifndef MODEL_LOAD_COMMON
-#define MODEL_LOAD_COMMON
-
-#include <stdlib.h>
-#include <time.h>
-#include "stdio.h"
-#include "evas_common_private.h"
-#include "evas_private.h"
-#include <Eina.h>
-
-/* set value to position [x][y] to array name which have. */
-#define ARRAY_2D(name, x, y, count_y) (*(name + x * count_y + y))
-
-/* Structures for reading data from file. */
-typedef struct _Evas_Model_Load_Save_Header Evas_Model_Load_Save_Header;
-typedef struct _Evas_Model_Load_Save_Data Evas_Model_Load_Save_Data;
-typedef struct _Evas_Model_Load_Save_Stride Evas_Model_Load_Save_Stride;
-
-struct _Evas_Model_Load_Save_Header
-{
- int vertices_count;
- int indices_count;
- Eina_Bool existence_of_positions;
- Eina_Bool existence_of_normals;
- Eina_Bool existence_of_tex_coords;
- Eina_Bool existence_of_colors;
-};
-
-struct _Evas_Model_Load_Save_Data
-{
- float *positions;
- float *normals;
- float *tex_coords;
- float *colors;
- unsigned short *indices;
-};
-
-struct _Evas_Model_Load_Save_Stride
-{
- int positions;
- int normals;
- int tex_coords;
- int colors;
-};
-
-/* create new header */
-Evas_Model_Load_Save_Header evas_model_load_save_header_new(void);
-void evas_model_load_vertex_data_unmap(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Model_Load_Save_Header header);
-void evas_model_load_save_data_free(Evas_Model_Load_Save_Header header, Evas_Model_Load_Save_Data *data);
-void evas_model_load_vertex_data_to_mesh(Evas_Canvas3D_Mesh *mesh, Evas_Model_Load_Save_Header header, Evas_Model_Load_Save_Data data, Evas_Model_Load_Save_Stride *stride);
-void evas_model_load_indices_data_to_mesh(Evas_Canvas3D_Mesh *mesh, Evas_Model_Load_Save_Header header, Evas_Model_Load_Save_Data data);
-Eina_Bool evas_model_load_allocate_data_due_to_header(Evas_Model_Load_Save_Header header, Evas_Model_Load_Save_Data *data);
-void evas_model_load_aabb_add_to_frame(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Model_Load_Save_Stride stride);
-Eina_Bool evas_model_save_header_from_mesh(Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Mesh_Frame *f, Evas_Model_Load_Save_Header *header);
-void evas_model_save_data_from_mesh(Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Mesh_Frame *f, Evas_Model_Load_Save_Header header, Evas_Model_Load_Save_Data *data);
-void evas_model_save_data_copy_from_mesh(Evas_Canvas3D_Mesh_Data *pd, Evas_Canvas3D_Mesh_Frame *f, Evas_Model_Load_Save_Header header, Evas_Model_Load_Save_Data *data);
-
-#endif //MODEL_LOAD_COMMON
diff --git a/src/lib/evas/common3d/save_load/evas_model_save.c b/src/lib/evas/common3d/save_load/evas_model_save.c
deleted file mode 100644
index caf72ca400..0000000000
--- a/src/lib/evas/common3d/save_load/evas_model_save.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "evas_options.h"
-
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-void
-evas_common_save_model_to_file(const Evas_Canvas3D_Mesh *model,
- const char *file,
- Evas_Canvas3D_Mesh_Frame *f)
-{
- char *p;
- char *saver = NULL;
-
- p = strrchr(file, '.');
- if (p)
- {
- p++;
-#define CHECK_EXTENTION_BY_FILE_NAME(extention) \
- if (!strcasecmp(p, #extention)) \
- { \
- evas_model_save_file_##extention(model, file, f); \
- saver = #extention; \
- }
- CHECK_EXTENTION_BY_FILE_NAME(eet)
- CHECK_EXTENTION_BY_FILE_NAME(obj)
- CHECK_EXTENTION_BY_FILE_NAME(ply)
-#undef CHECK_EXTENTION_BY_FILE_NAME
- }
- if (!saver) ERR("Invalid mesh file type.");
-}
diff --git a/src/lib/evas/common3d/save_load/meson.build b/src/lib/evas/common3d/save_load/meson.build
deleted file mode 100644
index 72f430d31e..0000000000
--- a/src/lib/evas/common3d/save_load/meson.build
+++ /dev/null
@@ -1,6 +0,0 @@
-evas_src += files([
- 'evas_model_load.c',
- 'evas_model_load_save_common.c',
- 'evas_model_load_save_common.h',
- 'evas_model_save.c',
-]) \ No newline at end of file
diff --git a/src/lib/evas/evas_api.h b/src/lib/evas/evas_api.h
new file mode 100644
index 0000000000..08b01dcc95
--- /dev/null
+++ b/src/lib/evas/evas_api.h
@@ -0,0 +1,32 @@
+#ifndef _EFL_EVAS_API_H
+#define _EFL_EVAS_API_H
+
+#ifdef EVAS_API
+#error EVAS_API should not be already defined
+#endif
+
+#ifdef _WIN32
+# ifndef EVAS_STATIC
+# ifdef EVAS_BUILD
+# define EVAS_API __declspec(dllexport)
+# else
+# define EVAS_API __declspec(dllimport)
+# endif
+# else
+# define EVAS_API
+# endif
+# define EVAS_API_WEAK
+#elif __GNUC__
+# if __GNUC__ >= 4
+# define EVAS_API __attribute__ ((visibility("default")))
+# define EVAS_API_WEAK __attribute__ ((weak))
+# else
+# define EVAS_API
+# define EVAS_API_WEAK
+# endif
+#else
+# define EVAS_API
+# define EVAS_API_WEAK
+#endif
+
+#endif
diff --git a/src/lib/evas/file/evas_module.c b/src/lib/evas/file/evas_module.c
index a1e8b623af..1362a004d8 100644
--- a/src/lib/evas/file/evas_module.c
+++ b/src/lib/evas/file/evas_module.c
@@ -38,7 +38,7 @@ struct _Evas_Module_Task
static Eina_TLS task = 0;
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_module_task_cancelled(void)
{
Evas_Module_Task *t;
@@ -49,7 +49,7 @@ evas_module_task_cancelled(void)
return t->cancelled(t->data);
}
-EAPI void
+EVAS_API void
evas_module_task_register(Eina_Bool (*cancelled)(void *data), void *data)
{
Evas_Module_Task *t;
@@ -63,7 +63,7 @@ evas_module_task_register(Eina_Bool (*cancelled)(void *data), void *data)
eina_tls_set(task, t);
}
-EAPI void
+EVAS_API void
evas_module_task_unregister(void)
{
Evas_Module_Task *t;
@@ -196,11 +196,13 @@ EVAS_EINA_STATIC_MODULE_DEFINE(vg_loader, json);
#endif
#if !EVAS_MODULE_NO_IMAGE_LOADERS
+EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, avif);
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, bmp);
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, dds);
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, eet);
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, generic);
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, gif);
+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);
@@ -222,6 +224,7 @@ EVAS_EINA_STATIC_MODULE_DEFINE(vg_saver, svg);
#endif
#if !EVAS_MODULE_NO_IMAGE_SAVERS
+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, png);
@@ -287,6 +290,9 @@ static const struct {
#endif
#endif
#if !EVAS_MODULE_NO_IMAGE_LOADERS
+#ifdef EVAS_STATIC_BUILD_AVIF
+ EVAS_EINA_STATIC_MODULE_USE(image_loader, avif),
+#endif
#ifdef EVAS_STATIC_BUILD_BMP
EVAS_EINA_STATIC_MODULE_USE(image_loader, bmp),
#endif
@@ -302,6 +308,9 @@ static const struct {
#ifdef EVAS_STATIC_BUILD_GIF
EVAS_EINA_STATIC_MODULE_USE(image_loader, gif),
#endif
+#ifdef EVAS_STATIC_BUILD_HEIF
+ EVAS_EINA_STATIC_MODULE_USE(image_loader, heif),
+#endif
#ifdef EVAS_STATIC_BUILD_ICO
EVAS_EINA_STATIC_MODULE_USE(image_loader, ico),
#endif
@@ -351,6 +360,9 @@ static const struct {
#endif
#endif
#if !EVAS_MODULE_NO_IMAGE_SAVERS
+#ifdef EVAS_STATIC_BUILD_AVIF
+ EVAS_EINA_STATIC_MODULE_USE(image_saver, avif),
+#endif
#ifdef EVAS_STATIC_BUILD_EET
EVAS_EINA_STATIC_MODULE_USE(image_saver, eet),
#endif
@@ -795,7 +807,7 @@ evas_module_shutdown(void)
}
}
-EAPI int
+EVAS_API int
_evas_module_engine_inherit(Evas_Func *funcs, char *name, size_t info)
{
Evas_Module *em;
@@ -816,7 +828,7 @@ _evas_module_engine_inherit(Evas_Func *funcs, char *name, size_t info)
return 0;
}
-EAPI const char *
+EVAS_API const char *
_evas_module_libdir_get(void)
{
if (!pfx) pfx = eina_prefix_new
@@ -837,7 +849,7 @@ _evas_module_datadir_get(void)
}
/* deprecated */
-EAPI const char *
+EVAS_API const char *
evas_cserve_path_get(void)
{
return NULL;
diff --git a/src/lib/evas/filters/evas_filter.c b/src/lib/evas/filters/evas_filter.c
index c9d8005e26..912e8c6882 100644
--- a/src/lib/evas/filters/evas_filter.c
+++ b/src/lib/evas/filters/evas_filter.c
@@ -608,6 +608,8 @@ evas_filter_buffer_backing_set(Evas_Filter_Context *ctx, int bufid,
if (fb->is_render) goto end;
buffer = ENFN->ector_buffer_wrap(ENC, ctx->evas->evas, engine_buffer);
+ if (!buffer) return EINA_FALSE;
+
ret = EINA_TRUE;
end:
@@ -819,7 +821,7 @@ evas_filter_command_blur_add_gl(Evas_Filter_Context *ctx,
}
#endif
- if (dx && dy)
+ if (EINA_DBL_NONZERO(dx) && EINA_DBL_NONZERO(dy))
{
tmp = evas_filter_temporary_buffer_get(ctx, dx_in->w, dx_in->h, in->alpha_only, 1);
if (!tmp) goto fail;
@@ -831,7 +833,7 @@ evas_filter_command_blur_add_gl(Evas_Filter_Context *ctx,
dy_in = in;
}
- if (dx)
+ if (EINA_DBL_NONZERO(dx))
{
XDBG("Add GL blur %d -> %d (%.2fx%.2f px)", dx_in->id, dx_out->id, dx, 0.0);
cmd = _command_new(ctx, EVAS_FILTER_MODE_BLUR, dx_in, NULL, dx_out);
@@ -842,7 +844,7 @@ evas_filter_command_blur_add_gl(Evas_Filter_Context *ctx,
cmd->draw.alphaonly = alphaonly;
}
- if (dy)
+ if (EINA_DBL_NONZERO(dy))
{
XDBG("Add GL blur %d -> %d (%.2fx%.2f px)", dy_in->id, dy_out->id, 0.0, dy);
cmd = _command_new(ctx, EVAS_FILTER_MODE_BLUR, dy_in, NULL, dy_out);
diff --git a/src/lib/evas/filters/evas_filter_parser.c b/src/lib/evas/filters/evas_filter_parser.c
index 6654841061..9a8537849a 100644
--- a/src/lib/evas/filters/evas_filter_parser.c
+++ b/src/lib/evas/filters/evas_filter_parser.c
@@ -60,7 +60,7 @@
as possible.
Note: Lua has been used since 1.10. The previous filters syntax is not
- garanteed to be compatible with 1.10 and newer versions.
+ guaranteed to be compatible with 1.10 and newer versions.
Here are the available commands:
<ul>
@@ -136,28 +136,28 @@
will be opaque (alpha = @c 0xFF), unless R=G=B=0 (invisible).
These colors are <b>not</b> premultiplied.
</li>
- <li>Hexademical values: @c '#RRGGBB', @c '#RRGGBBAA', @c '#RGB', @c '#RGBA'</li>
+ <li>Hexadecimal values: @c '\#RRGGBB', @c '\#RRGGBBAA', @c '\#RGB', @c '\#RGBA'</li>
<li>The following string values are also accepted:</li>
<tt><ul>
- <li>'white' == '#FFFFFF'</li>
- <li>'black' == '#000000'</li>
- <li>'red' == '#FF0000'</li>
- <li>'green' == '#008000'</li>
- <li>'blue' == '#0000FF'</li>
- <li>'darkblue' == '#0000A0'</li>
- <li>'yellow' == '#FFFF00'</li>
- <li>'magenta' == '#FF00FF'</li>
- <li>'cyan' == '#00FFFF'</li>
- <li>'orange' == '#FFA500'</li>
- <li>'purple' == '#800080'</li>
- <li>'brown' == '#A52A2A'</li>
- <li>'maroon' == '#800000'</li>
- <li>'lime' == '#00FF00'</li>
- <li>'gray' == '#808080'</li>
- <li>'grey' == '#808080'</li>
- <li>'silver' == '#C0C0C0'</li>
- <li>'olive' == '#808000'</li>
- <li>'invisible', 'transparent' == '#0000' -- (alpha is zero)</li>
+ <li>'white' == '\#FFFFFF'</li>
+ <li>'black' == '\#000000'</li>
+ <li>'red' == '\#FF0000'</li>
+ <li>'green' == '\#008000'</li>
+ <li>'blue' == '\#0000FF'</li>
+ <li>'darkblue' == '\#0000A0'</li>
+ <li>'yellow' == '\#FFFF00'</li>
+ <li>'magenta' == '\#FF00FF'</li>
+ <li>'cyan' == '\#00FFFF'</li>
+ <li>'orange' == '\#FFA500'</li>
+ <li>'purple' == '\#800080'</li>
+ <li>'brown' == '\#A52A2A'</li>
+ <li>'maroon' == '\#800000'</li>
+ <li>'lime' == '\#00FF00'</li>
+ <li>'gray' == '\#808080'</li>
+ <li>'grey' == '\#808080'</li>
+ <li>'silver' == '\#C0C0C0'</li>
+ <li>'olive' == '\#808000'</li>
+ <li>'invisible', 'transparent' == '\#0000' -- (alpha is zero)</li>
</ul></tt>
</ul>
<li>@c fillmode</li>
@@ -594,7 +594,7 @@ _bool_parse(const char *str, Eina_Bool *b)
#define PARSE_ABORT() do {} while (0)
//#define PARSE_ABORT() abort()
-#define PARSE_CHECK(a) do { if (!(a)) { ERR("Parsing failed because '%s' is false at %s:%d", #a, __FUNCTION__, __LINE__); PARSE_ABORT(); goto end; } } while (0)
+#define PARSE_CHECK(a) do { if (!(a)) { ERR("Parsing failed because '%s' is false at %s:%d", #a, __func__, __LINE__); PARSE_ABORT(); goto end; } } while (0)
/* Buffers */
static Buffer *
@@ -1173,7 +1173,7 @@ _blur_instruction_prepare(Evas_Filter_Program *pgm, Evas_Filter_Instruction *ins
@param src Source buffer. This should be an alpha buffer.
@param dst Destination buffer. This should be an RGBA buffer (although alpha is supported). Must be of the same size as @a src.
@param black The shadows' color. Usually this will be black (@c #000).
- @param white The specular light's color. Usually this will be white (@c #FFF).
+ @param white The specular light's color. Usually this will be white (@c \#FFF).
@param fillmode This specifies how to handle @a map when its dimensions don't match those of @a src and @a dst. Default is to @c repeat. See @ref evasfilter_fillmode "fillmodes".
@note As of 2014/02/11, the ALPHA to RGBA support is of much better quality than ALPHA only, but @b very slow. RGBA sources are not supported yet.
@@ -1414,7 +1414,7 @@ _curve_instruction_prepare(Evas_Filter_Program *pgm, Evas_Filter_Instruction *in
param->allow_any_string = EINA_TRUE;
}
}
-
+
_instruction_param_seq_add(instr, "interpolation", VT_STRING, "linear");
_instruction_param_seq_add(instr, "channel", VT_STRING, "rgb");
_instruction_param_name_add(instr, "src", VT_BUFFER, _buffer_get(pgm, "input"));
@@ -1669,7 +1669,7 @@ _grow_instruction_prepare(Evas_Filter_Program *pgm, Evas_Filter_Instruction *ins
@param dst Destination buffer for blending. This must be of same size and colorspace as @a src.
@param color A color to use for alpha to RGBA conversion for the blend operations. White means no change.
See @ref evasfilters_color "colors". This will have no effect on RGBA sources.
- @param fillmode Defines whether to stretch or repeat the @a mask if its size that of @src.
+ @param fillmode Defines whether to stretch or repeat the @a mask if its size that of @p src.
Should be set when masking with external textures. Default is repeat. See @ref evasfilter_fillmode "fillmodes".
Note that @a src and @a mask are interchangeable, if they have the same dimensions.
@@ -1924,9 +1924,9 @@ _padding_set_instruction_prepare(Evas_Filter_Program *pgm EINA_UNUSED,
/* Evas_Filter_Parser entry points */
#undef PARSE_CHECK
-#define PARSE_CHECK(a) do { if (!(a)) { ERR("Parsing failed because '%s' is false at %s:%d", #a, __FUNCTION__, __LINE__); PARSE_ABORT(); goto end; } } while (0)
+#define PARSE_CHECK(a) do { if (!(a)) { ERR("Parsing failed because '%s' is false at %s:%d", #a, __func__, __LINE__); PARSE_ABORT(); goto end; } } while (0)
-EAPI void
+EVAS_API void
evas_filter_program_del(Evas_Filter_Program *pgm)
{
Evas_Filter_Instruction *instr;
@@ -2855,7 +2855,7 @@ _filter_program_reset(Evas_Filter_Program *pgm)
/** Parse a style program */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_filter_program_parse(Evas_Filter_Program *pgm, const char *str)
{
lua_State *L;
@@ -2966,7 +2966,7 @@ _buffers_update(Evas_Filter_Context *ctx, Evas_Filter_Program *pgm)
/** Evaluate required padding to correctly apply an effect */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_filter_program_padding_get(Evas_Filter_Program *pgm,
Evas_Filter_Padding *out_final,
Evas_Filter_Padding *out_calculated)
@@ -3032,7 +3032,7 @@ evas_filter_program_padding_get(Evas_Filter_Program *pgm,
/** Create an empty filter program for style parsing */
-EAPI Evas_Filter_Program *
+EVAS_API Evas_Filter_Program *
evas_filter_program_new(const char *name, Eina_Bool input_alpha)
{
Evas_Filter_Program *pgm;
@@ -3046,7 +3046,7 @@ evas_filter_program_new(const char *name, Eina_Bool input_alpha)
return pgm;
}
-EAPI Eina_Bool
+EVAS_API Eina_Bool
evas_filter_program_state_set(Evas_Filter_Program *pgm,
const Efl_Canvas_Filter_State *state)
{
@@ -3066,7 +3066,7 @@ evas_filter_program_state_set(Evas_Filter_Program *pgm,
}
/** Bind objects for proxy rendering */
-EAPI void
+EVAS_API void
evas_filter_program_source_set_all(Evas_Filter_Program *pgm,
Eina_Hash *proxies)
{
@@ -3436,7 +3436,7 @@ _instr2cmd_transform(Evas_Filter_Context *ctx,
INSTR_PARAM_CHECK(src);
INSTR_PARAM_CHECK(dst);
- if (!strcasecmp(op, "vflip"))
+ if (op && !strcasecmp(op, "vflip"))
flags = EVAS_FILTER_TRANSFORM_VFLIP;
else
{
diff --git a/src/lib/evas/gesture/efl_canvas_gesture.c b/src/lib/evas/gesture/efl_canvas_gesture.c
index 0cc7f8d423..e1fbe7824c 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture.c
@@ -1,15 +1,8 @@
+#define EFL_CANVAS_GESTURE_PROTECTED
#include "efl_canvas_gesture_private.h"
#define MY_CLASS EFL_CANVAS_GESTURE_CLASS
-const Efl_Event_Description *
-_efl_gesture_type_get(const Eo *obj)
-{
- Efl_Canvas_Gesture_Data *pd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
-
- return pd->type;
-}
-
EOLIAN static Efl_Canvas_Gesture_State
_efl_canvas_gesture_state_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd)
{
@@ -28,7 +21,6 @@ _efl_canvas_gesture_hotspot_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd
pd->hotspot = hotspot;
}
-
EOLIAN static Eina_Position2D
_efl_canvas_gesture_hotspot_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd)
{
@@ -41,12 +33,23 @@ _efl_canvas_gesture_timestamp_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *
pd->timestamp = timestamp;
}
-
EOLIAN static unsigned int
_efl_canvas_gesture_timestamp_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd)
{
return pd->timestamp;
}
+EOLIAN static void
+_efl_canvas_gesture_touch_count_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd, unsigned int touch_count)
+{
+ pd->touch_count = touch_count;
+}
+
+EOLIAN static unsigned int
+_efl_canvas_gesture_touch_count_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Data *pd)
+{
+ return pd->touch_count;
+}
+
#include "efl_canvas_gesture.eo.c"
-#include "efl_gesture_events.eo.c"
+#include "efl_canvas_gesture_events.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture.eo b/src/lib/evas/gesture/efl_canvas_gesture.eo
index eaced25ad8..9166f71ca2 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture.eo
@@ -1,5 +1,5 @@
import efl_canvas_gesture_types;
-parse efl_gesture_events;
+parse efl_canvas_gesture_events;
abstract @beta Efl.Canvas.Gesture extends Efl.Object
{
@@ -11,7 +11,7 @@ abstract @beta Efl.Canvas.Gesture extends Efl.Object
Typically this class is not used directly, instead, some sub-class of it (like
@Efl.Canvas.Gesture_Tap or @Efl.Canvas.Gesture_Zoom) is retrieved from gesture events
- (like @[Efl.Gesture.Events.gesture,tap] or @[Efl.Gesture.Events.gesture,zoom]).
+ (like @[Efl.Canvas.Gesture_Events.gesture,tap] or @[Efl.Canvas.Gesture_Events.gesture,zoom]).
]]
c_prefix: efl_gesture;
methods {
@@ -27,7 +27,8 @@ abstract @beta Efl.Canvas.Gesture extends Efl.Object
}
@property hotspot {
[[Hotspot of the gesture currently being analyzed.
- The exact meaning depends on the gesture type.]]
+ The exact meaning depends on the gesture type, but by default it
+ reflects the current position of the last touch event.]]
get {
}
set {
@@ -43,7 +44,17 @@ abstract @beta Efl.Canvas.Gesture extends Efl.Object
set {
}
values {
- timestamp: uint;[[The time-stamp.]]
+ timestamp: uint;[[The time-stamp, valued in milliseconds.]]
+ }
+ }
+ @property touch_count {
+ [[The current number of touch points recorded in the gesture.]]
+ get {
+ }
+ set @protected {
+ }
+ values {
+ touch_count: uint;[[The count of the touch points.]]
}
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_custom.c b/src/lib/evas/gesture/efl_canvas_gesture_custom.c
new file mode 100644
index 0000000000..890bcc5469
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_custom.c
@@ -0,0 +1,25 @@
+#define EFL_CANVAS_GESTURE_CUSTOM_PROTECTED
+#include "efl_canvas_gesture_private.h"
+
+#define MY_CLASS EFL_CANVAS_GESTURE_CUSTOM_CLASS
+
+
+EOLIAN static void
+_efl_canvas_gesture_custom_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Custom_Data *pd)
+{
+ eina_stringshare_del(pd->gesture_name);
+ efl_destructor(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_canvas_gesture_custom_gesture_name_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Custom_Data *pd, const char *name)
+{
+ eina_stringshare_replace(&pd->gesture_name, name);
+}
+
+EOLIAN static Eina_Stringshare *
+_efl_canvas_gesture_custom_gesture_name_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Custom_Data *pd)
+{
+ return pd->gesture_name;
+}
+#include "efl_canvas_gesture_custom.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_custom.eo b/src/lib/evas/gesture/efl_canvas_gesture_custom.eo
new file mode 100644
index 0000000000..c8fe7ad909
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_custom.eo
@@ -0,0 +1,31 @@
+parse efl_canvas_gesture_recognizer;
+
+class @beta Efl.Canvas.Gesture_Custom extends Efl.Canvas.Gesture
+{
+ [[Custom gesture class holding state information.
+ See @Efl.Canvas.Gesture to see what this state is and
+ @[Efl.Canvas.Gesture_Events.gesture,custom] for a description of the Custom gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
+
+ Custom gesture recognizers which implement their own gesture properties (e.g., gesture momentum or angle) must
+ inherit this class, and their recognizers must implement the @Efl.Canvas.Gesture_Recognizer.type property to return
+ this class.
+ ]]
+ c_prefix: efl_gesture_custom;
+ methods {
+ @property gesture_name {
+ [[This is the name of the custom gesture.]]
+ get {
+ }
+ set @protected {
+ }
+ values {
+ gesture_name: string; [[The name of the custom gesture.]]
+ }
+ }
+ }
+ implements {
+ Efl.Object.destructor;
+ }
+}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_double_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_double_tap.c
index 971d49e3b6..cff4d8fe63 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_double_tap.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_double_tap.c
@@ -2,17 +2,4 @@
#define MY_CLASS EFL_CANVAS_GESTURE_DOUBLE_TAP_CLASS
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_double_tap_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
-{
- Efl_Canvas_Gesture_Data *gd;
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
- gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
- gd->type = EFL_EVENT_GESTURE_DOUBLE_TAP;
-
- return obj;
-}
-
#include "efl_canvas_gesture_double_tap.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_double_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_double_tap.eo
index 87b93ccd9c..fe01a2ad66 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_double_tap.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_double_tap.eo
@@ -2,11 +2,10 @@ class @beta Efl.Canvas.Gesture_Double_Tap extends Efl.Canvas.Gesture
{
[[Double-tap gesture class holding state information.
See @Efl.Canvas.Gesture to see what this state is and
- @[Efl.Gesture.Events.gesture,double_tap] for a description of the Double-tap gesture.
+ @[Efl.Canvas.Gesture_Events.gesture,double_tap] for a description of the Double-tap gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
]]
data: null;
c_prefix: efl_gesture_double_tap;
- implements {
- Efl.Object.constructor;
- }
}
diff --git a/src/lib/evas/gesture/efl_gesture_events.eo b/src/lib/evas/gesture/efl_canvas_gesture_events.eo
index d80c0bbb77..6d95e68d4d 100644
--- a/src/lib/evas/gesture/efl_gesture_events.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_events.eo
@@ -1,43 +1,56 @@
-interface @beta Efl.Gesture.Events
+interface @beta Efl.Canvas.Gesture_Events
{
+ [[Interface for objects capable of emitting gesture events, like @Efl.Canvas.Object.
+ ]]
event_c_prefix: efl;
events {
gesture,tap: Efl.Canvas.Gesture_Tap; [[Emitted when a Tap gesture has been detected.
A Tap gesture consists of a touch of the screen (or click of the mouse) quickly followed by
- a release. If the release happens too late a @[Efl.Gesture.Events.gesture,long_tap] event will be
+ a release. If the release happens too late a @[Efl.Canvas.Gesture_Events.gesture,long_press] event will be
emitted instead.
]]
gesture,double_tap: Efl.Canvas.Gesture_Double_Tap; [[Emitted when a Double-tap gesture has been detected.
A Double-tap gesture consists of two taps on the screen (or clicks of the mouse) in quick
succession. If the second one is delayed for too long they will be detected as two independent
- @[Efl.Gesture.Events.gesture,tap] events.
+ @[Efl.Canvas.Gesture_Events.gesture,tap] events.
]]
gesture,triple_tap: Efl.Canvas.Gesture_Triple_Tap; [[Emitted when a Triple-tap gesture has been detected.
A Triple-tap gesture consists of three taps on the screen (or clicks of the mouse) in quick
succession. If any of them is delayed for too long they will be detected as independent
- @[Efl.Gesture.Events.gesture,tap] or @[Efl.Gesture.Events.gesture,double_tap] events.
+ @[Efl.Canvas.Gesture_Events.gesture,tap] or @[Efl.Canvas.Gesture_Events.gesture,double_tap] events.
]]
- gesture,long_tap: Efl.Canvas.Gesture_Long_Tap; [[Emitted when a Long-tap gesture has been detected.
+ gesture,long_press: Efl.Canvas.Gesture_Long_Press; [[Emitted when a Long-tap gesture has been detected.
A Long-tap gesture consists of a touch of the screen (or click of the mouse) followed by a release
- after some time. If the release happens too quickly a @[Efl.Gesture.Events.gesture,tap] event will be
+ after some time. If the release happens too quickly a @[Efl.Canvas.Gesture_Events.gesture,tap] event will be
emitted instead.
]]
gesture,momentum: Efl.Canvas.Gesture_Momentum; [[Emitted when a Momentum gesture has been detected.
- A Momentum gesture consists of a quick displacement of the finger while touching the screen (or while
- holding down a mouse button).
+ A Momentum gesture is any motion of the finger while touching the screen (or while
+ holding down a mouse button). This gesture is also known as swipe.
]]
gesture,flick: Efl.Canvas.Gesture_Flick; [[Emitted when a Flick gesture has been detected.
+ A Flick gesture consists of a quick motion of the finger while touching the screen (or while
+ holding down a mouse button) with the release occurring before slowing down.
]]
+ gesture,rotate: Efl.Canvas.Gesture_Rotate; [[Emitted when a Rotate gesture has been detected.
+ A Rotate gesture consists of two fingers touching the screen and performing a motion such that
+ one finger rotates around the other.
+ This gesture cannot be performed with a mouse as it requires more than one pointer.
+ ]]
gesture,zoom: Efl.Canvas.Gesture_Zoom; [[Emitted when a Zoom gesture has been detected.
A Zoom gesture consists of two fingers touching the screen and separating ("zoom in") or
getting closer ("zoom out" or "pinch").
This gesture cannot be performed with a mouse as it requires more than one pointer.
]]
+ gesture,custom: Efl.Canvas.Gesture_Custom; [[Emitted when a Custom gesture has been detected.
+ A Custom gesture is one which is custom-written for use in an application or toolkit and
+ is not shipped with EFL.
+ ]]
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_flick.c b/src/lib/evas/gesture/efl_canvas_gesture_flick.c
index 1095a84652..57c2ee3309 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_flick.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_flick.c
@@ -2,27 +2,14 @@
#define MY_CLASS EFL_CANVAS_GESTURE_FLICK_CLASS
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_flick_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Flick_Data *pd EINA_UNUSED)
-{
- Efl_Canvas_Gesture_Data *gd;
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
- gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
- gd->type = EFL_EVENT_GESTURE_FLICK;
-
- return obj;
-}
-
EOLIAN static Eina_Vector2
-_efl_canvas_gesture_flick_momentum_get(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Flick_Data *pd)
+_efl_canvas_gesture_flick_momentum_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Flick_Data *pd)
{
return pd->momentum;
}
EOLIAN static double
-_efl_canvas_gesture_flick_angle_get(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Flick_Data *pd)
+_efl_canvas_gesture_flick_angle_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Flick_Data *pd)
{
return pd->angle;
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_flick.eo b/src/lib/evas/gesture/efl_canvas_gesture_flick.eo
index afc8391550..a03dffa87d 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_flick.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_flick.eo
@@ -4,22 +4,29 @@ class @beta Efl.Canvas.Gesture_Flick extends Efl.Canvas.Gesture
{
[[Flick gesture class holding state information.
See @Efl.Canvas.Gesture to see what this state is and
- @[Efl.Gesture.Events.gesture,flick] for a description of the Flick gesture.
+ @[Efl.Canvas.Gesture_Events.gesture,flick] for a description of the Flick gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
]]
c_prefix: efl_gesture_flick;
methods {
- momentum_get {
- [[Gets flick gesture momentum value, this is, the direction in which the
+ @property momentum {
+ [[The flick gesture momentum value, this is, the direction in which the
pointer was flicked.]]
- return: Eina.Vector2; [[The momentum vector.]]
+ get {
+ }
+ values {
+ momentum: Eina.Vector2; [[The momentum vector.]]
+ }
}
- angle_get {
- [[Gets flick gesture direction angle, this is, the angle in which the
+ @property angle {
+ [[The flick gesture direction angle, this is, the angle in which the
pointer was flicked.]]
- return: double; [[The angle value.]]
+ get {
+ }
+ values {
+ angle: double; [[The angle value.]]
+ }
}
}
- implements {
- Efl.Object.constructor;
- }
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_long_press.c b/src/lib/evas/gesture/efl_canvas_gesture_long_press.c
new file mode 100644
index 0000000000..8403a473d1
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_long_press.c
@@ -0,0 +1,5 @@
+#include "efl_canvas_gesture_private.h"
+
+#define MY_CLASS EFL_CANVAS_GESTURE_LONG_PRESS_CLASS
+
+#include "efl_canvas_gesture_long_press.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_long_press.eo b/src/lib/evas/gesture/efl_canvas_gesture_long_press.eo
new file mode 100644
index 0000000000..f039f24ff0
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_long_press.eo
@@ -0,0 +1,11 @@
+class @beta Efl.Canvas.Gesture_Long_Press extends Efl.Canvas.Gesture
+{
+ [[Long-tap gesture class holding state information.
+ See @Efl.Canvas.Gesture to see what this state is and
+ @[Efl.Canvas.Gesture_Events.gesture,long_press] for a description of the Long-tap gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
+ ]]
+ data: null;
+ c_prefix: efl_gesture_long_press;
+}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_long_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_long_tap.c
deleted file mode 100644
index 21f0055414..0000000000
--- a/src/lib/evas/gesture/efl_canvas_gesture_long_tap.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "efl_canvas_gesture_private.h"
-
-#define MY_CLASS EFL_CANVAS_GESTURE_LONG_TAP_CLASS
-
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_long_tap_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
-{
- Efl_Canvas_Gesture_Data *gd;
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
- gd->type = EFL_EVENT_GESTURE_LONG_TAP;
-
- return obj;
-}
-
-EOLIAN static void
-_efl_canvas_gesture_long_tap_efl_object_destructor(Eo *obj, void *pd EINA_UNUSED)
-{
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-#include "efl_canvas_gesture_long_tap.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_long_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_long_tap.eo
deleted file mode 100644
index 6c0d0c979d..0000000000
--- a/src/lib/evas/gesture/efl_canvas_gesture_long_tap.eo
+++ /dev/null
@@ -1,13 +0,0 @@
-class @beta Efl.Canvas.Gesture_Long_Tap extends Efl.Canvas.Gesture
-{
- [[Long-tap gesture class holding state information.
- See @Efl.Canvas.Gesture to see what this state is and
- @[Efl.Gesture.Events.gesture,long_tap] for a description of the Long-tap gesture.
- ]]
- data: null;
- c_prefix: efl_gesture_long_tap;
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
-}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c
index d5103186e1..38071d40e8 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c
@@ -1,49 +1,73 @@
+#define EFL_CANVAS_GESTURE_PROTECTED
+#define EFL_CANVAS_GESTURE_CUSTOM_PROTECTED
#include "efl_canvas_gesture_private.h"
#define MY_CLASS EFL_CANVAS_GESTURE_MANAGER_CLASS
typedef struct _Object_Gesture
{
- Eo *object;
- const Efl_Event_Description *type;
- Efl_Canvas_Gesture *gesture;
- Efl_Canvas_Gesture_Recognizer *recognizer;
+ Eo *object;
+ const Efl_Event_Description *type;
+ Efl_Canvas_Gesture *gesture;
+ Efl_Canvas_Gesture_Recognizer *recognizer;
} Object_Gesture;
typedef struct _Efl_Canvas_Gesture_Manager_Data
{
//Keeps track of all the gesture request for a particular target
- Eina_Hash *m_gesture_contex; // (*target, *event_desc)
+ Eina_Hash *m_gesture_contex; // (*target, Eina_Hash(type, int))
//Keeps all the event directed to this particular object from touch_begin till touch_end
- Eina_Hash *m_object_events; // (*target, *efl_gesture_touch)
+ Eina_Hash *m_object_events; // (*recognizer, *efl_gesture_touch)
//Keeps all the recognizer registered to gesture manager
- Eina_Hash *m_recognizers; // (*gesture_type, *recognizer)
+ Eina_Hash *m_recognizers; // (*gesture_type, *recognizer)
+ Eina_List *custom_recognizers;
//Keeps track of all current object gestures.
- Eina_List *m_object_gestures; //(List of *object_gesture)
+ Eina_List *m_object_gestures; //(List of *object_gesture)
//Lazy deletion of gestures
- Eina_List *m_gestures_to_delete;
+ Eina_Array *m_gestures_to_delete;
//Kepps config values for gesture recognize
- Eina_Hash *m_config;
+ Eina_Bool processing : 1;
} Efl_Canvas_Gesture_Manager_Data;
static void _cleanup_cached_gestures(Efl_Canvas_Gesture_Manager_Data *pd,
- Eo *target, const Efl_Event_Description *type);
-static Efl_Canvas_Gesture*
-_get_state(Efl_Canvas_Gesture_Manager_Data *pd, Eo *target,
- Efl_Canvas_Gesture_Recognizer *recognizer, const Efl_Event_Description *type);
+ const Eo *target, const Efl_Event_Description *type, const Efl_Canvas_Gesture_Recognizer *recognizer);
+static Efl_Canvas_Gesture *
+ _get_state(Efl_Canvas_Gesture_Manager_Data *pd, Eo *target,
+ Efl_Canvas_Gesture_Recognizer *recognizer, const Efl_Event_Description *type);
+
+static const Efl_Event_Description *
+_gesture_recognizer_event_type_get(const Efl_Canvas_Gesture_Recognizer *recognizer)
+{
+ const Efl_Class *type = efl_gesture_recognizer_type_get(recognizer);
+
+ if (type == EFL_CANVAS_GESTURE_TAP_CLASS)
+ return EFL_EVENT_GESTURE_TAP;
+ if (type == EFL_CANVAS_GESTURE_DOUBLE_TAP_CLASS)
+ return EFL_EVENT_GESTURE_DOUBLE_TAP;
+ if (type == EFL_CANVAS_GESTURE_TRIPLE_TAP_CLASS)
+ return EFL_EVENT_GESTURE_TRIPLE_TAP;
+ if (type == EFL_CANVAS_GESTURE_LONG_PRESS_CLASS)
+ return EFL_EVENT_GESTURE_LONG_PRESS;
+ if (type == EFL_CANVAS_GESTURE_MOMENTUM_CLASS)
+ return EFL_EVENT_GESTURE_MOMENTUM;
+ if (type == EFL_CANVAS_GESTURE_FLICK_CLASS)
+ return EFL_EVENT_GESTURE_FLICK;
+ if (type == EFL_CANVAS_GESTURE_ROTATE_CLASS)
+ return EFL_EVENT_GESTURE_ROTATE;
+ if (type == EFL_CANVAS_GESTURE_ZOOM_CLASS)
+ return EFL_EVENT_GESTURE_ZOOM;
+ return EFL_EVENT_GESTURE_CUSTOM;
+}
static void
-_cleanup_object(Eina_List *list)
+_cleanup_object(Eina_Array *arr)
{
- Eina_List *l;
Eo *obj;
- if (!list) return;
+ if (!eina_array_count(arr)) return;
- EINA_LIST_FOREACH(list, l, obj)
+ while ((obj = eina_array_pop(arr)))
efl_del(obj);
-
- eina_list_free(list);
}
static void
@@ -52,90 +76,147 @@ _hash_unref_cb(Eo *obj)
efl_unref(obj);
}
+/* updates the data for in-tree recognizers without needing to watch events */
+static void
+_update_finger_sizes(Efl_Canvas_Gesture_Manager_Data *pd, int finger_size)
+{
+ Efl_Canvas_Gesture_Recognizer *r;
+ Efl_Canvas_Gesture_Recognizer_Tap_Data *td;
+ Efl_Canvas_Gesture_Recognizer_Double_Tap_Data *dtd;
+ Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data *ttd;
+ Efl_Canvas_Gesture_Recognizer_Long_Press_Data *ltd;
+ Efl_Canvas_Gesture_Recognizer_Flick_Data *fd;
+ Efl_Canvas_Gesture_Recognizer_Rotate_Data *rd;
+ Efl_Canvas_Gesture_Recognizer_Zoom_Data *zd;
+ const Efl_Event_Description *type;
+
+ type = EFL_EVENT_GESTURE_TAP;
+ r = eina_hash_find(pd->m_recognizers, &type);
+ td = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_TAP_CLASS);
+ td->finger_size = finger_size;
+
+ type = EFL_EVENT_GESTURE_DOUBLE_TAP;
+ r = eina_hash_find(pd->m_recognizers, &type);
+ dtd = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_DOUBLE_TAP_CLASS);
+ dtd->finger_size = finger_size;
+
+ type = EFL_EVENT_GESTURE_TRIPLE_TAP;
+ r = eina_hash_find(pd->m_recognizers, &type);
+ ttd = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_TRIPLE_TAP_CLASS);
+ ttd->finger_size = finger_size;
+
+ type = EFL_EVENT_GESTURE_LONG_PRESS;
+ r = eina_hash_find(pd->m_recognizers, &type);
+ ltd = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_LONG_PRESS_CLASS);
+ ltd->finger_size = finger_size;
+
+ type = EFL_EVENT_GESTURE_FLICK;
+ r = eina_hash_find(pd->m_recognizers, &type);
+ fd = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_FLICK_CLASS);
+ fd->finger_size = finger_size;
+
+ type = EFL_EVENT_GESTURE_ROTATE;
+ r = eina_hash_find(pd->m_recognizers, &type);
+ rd = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_ROTATE_CLASS);
+ rd->finger_size = finger_size;
+
+ type = EFL_EVENT_GESTURE_ZOOM;
+ r = eina_hash_find(pd->m_recognizers, &type);
+ zd = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_ZOOM_CLASS);
+ zd->finger_size = finger_size;
+}
+
+static void
+_gesture_manager_config_changed(void *data, const Efl_Event *ev)
+{
+ Efl_Canvas_Gesture_Manager_Data *pd = data;
+
+ if ((!ev->info) || eina_streq(ev->info, "glayer_tap_finger_size"))
+ _update_finger_sizes(pd, efl_config_int_get(ev->object, "glayer_tap_finger_size"));
+}
+
EOLIAN static Efl_Object *
-_efl_canvas_gesture_manager_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Manager_Data *pd EINA_UNUSED)
+_efl_canvas_gesture_manager_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Manager_Data *pd)
{
+ Eo *config;
+ int finger_size = 0;
obj = efl_constructor(efl_super(obj, MY_CLASS));
pd->m_recognizers = eina_hash_pointer_new(EINA_FREE_CB(_hash_unref_cb));
- pd->m_gesture_contex = eina_hash_pointer_new(NULL);
+ pd->m_gesture_contex = eina_hash_pointer_new(EINA_FREE_CB(eina_hash_free));
pd->m_object_events = eina_hash_pointer_new(EINA_FREE_CB(_hash_unref_cb));
pd->m_object_gestures = NULL;
- pd->m_gestures_to_delete = NULL;
+ pd->m_gestures_to_delete = eina_array_new(1);;
- pd->m_config = eina_hash_string_superfast_new(EINA_FREE_CB(eina_value_free));
+ /* this needs to always be present */
+ config = efl_provider_find(efl_main_loop_get(), EFL_CONFIG_INTERFACE);
+ efl_event_callback_add(config, EFL_CONFIG_EVENT_CONFIG_CHANGED, _gesture_manager_config_changed, pd);
//Register all types of recognizers at very first time.
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_TAP_CLASS, obj));
- efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_LONG_TAP_CLASS, obj));
+ efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_LONG_PRESS_CLASS, obj));
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_DOUBLE_TAP_CLASS, obj));
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_TRIPLE_TAP_CLASS, obj));
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_MOMENTUM_CLASS, obj));
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_FLICK_CLASS, obj));
+ efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_ROTATE_CLASS, obj));
efl_gesture_manager_recognizer_register(obj, efl_add(EFL_CANVAS_GESTURE_RECOGNIZER_ZOOM_CLASS, obj));
+ /* realistically this will never fail, but the whole gesture layer breaks if this is 0 */
+ if (!getenv("EFL_RUN_IN_TREE"))
+ finger_size = efl_config_int_get(config, "glayer_tap_finger_size");
+ if (finger_size < 1) finger_size = 10;
+ _update_finger_sizes(pd, finger_size);
return obj;
}
-EOLIAN static Eina_Value *
-_efl_canvas_gesture_manager_config_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Manager_Data *pd, const char *name)
-{
- return eina_hash_find(pd->m_config, name);
-}
-
EOLIAN static void
-_efl_canvas_gesture_manager_config_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Manager_Data *pd, const char *name, Eina_Value *value)
+_efl_canvas_gesture_manager_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Manager_Data *pd)
{
- Eina_Value *v = eina_value_new(eina_value_type_get(value));
- eina_value_copy(value, v);
- eina_hash_add(pd->m_config, name, v);
-
- //Sets recognizer class property.
- if (!strcmp(name, "glayer_tap_finger_size"))
- {
- int finger_size;
- Efl_Canvas_Gesture_Recognizer *r;
- Efl_Canvas_Gesture_Recognizer_Data *rd;
-
- eina_value_get(value, &finger_size);
-
- const Efl_Event_Description *type = EFL_EVENT_GESTURE_TAP;
-
- r = eina_hash_find(pd->m_recognizers, &type);
- rd = efl_data_scope_get(r, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
- rd->finger_size = finger_size;
- }
-}
+ Efl_Canvas_Gesture_Recognizer *recognizer;
+ void *ptr;
+ Eo *config = efl_provider_find(efl_main_loop_get(), EFL_CONFIG_INTERFACE);
+ if (config)
+ efl_event_callback_del(config, EFL_CONFIG_EVENT_CONFIG_CHANGED, _gesture_manager_config_changed, pd);
-EOLIAN static void
-_efl_canvas_gesture_manager_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Manager_Data *pd EINA_UNUSED)
-{
- eina_hash_free(pd->m_config);
eina_hash_free(pd->m_recognizers);
+ EINA_LIST_FREE(pd->custom_recognizers, recognizer)
+ efl_unref(recognizer);
eina_hash_free(pd->m_gesture_contex);
eina_hash_free(pd->m_object_events);
_cleanup_object(pd->m_gestures_to_delete);
+ eina_array_free(pd->m_gestures_to_delete);
+ EINA_LIST_FREE(pd->m_object_gestures, ptr)
+ free(ptr);
efl_destructor(efl_super(obj, MY_CLASS));
}
-void *
-_efl_canvas_gesture_manager_private_data_get(Eo *obj)
-{
- Efl_Canvas_Gesture_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS);
-
- return pd;
-}
-
void
_efl_canvas_gesture_manager_callback_add_hook(void *data, Eo *target, const Efl_Event_Description *type)
{
Efl_Canvas_Gesture_Manager_Data *pd = data;
//If there is a recognizer registered for that event then add it to the gesture context
- Efl_Canvas_Gesture_Recognizer *recognizer = eina_hash_find (pd->m_recognizers, &type);
+ Efl_Canvas_Gesture_Recognizer *recognizer;
+
+ if (type == EFL_EVENT_GESTURE_CUSTOM)
+ recognizer = eina_list_data_get(pd->custom_recognizers);
+ else
+ recognizer = eina_hash_find(pd->m_recognizers, &type);
if (recognizer)
{
//Add it to the gesture context.
- eina_hash_list_append(pd->m_gesture_contex, &target, type);
+ Eina_Hash *thisisreallystupid = eina_hash_find(pd->m_gesture_contex, &target);
+ intptr_t count = 0;
+ /* already present */
+ if (thisisreallystupid)
+ count = (intptr_t)eina_hash_find(thisisreallystupid, &type);
+ else
+ {
+ thisisreallystupid = eina_hash_pointer_new(NULL);
+ eina_hash_set(pd->m_gesture_contex, &target, thisisreallystupid);
+ }
+ count++;
+ eina_hash_set(thisisreallystupid, &type, (intptr_t*)count);
}
}
@@ -144,228 +225,212 @@ _efl_canvas_gesture_manager_callback_del_hook(void *data, Eo *target, const Efl_
{
Efl_Canvas_Gesture_Manager_Data *pd = data;
//If there is a recognizer registered for that event then add it to the gesture context
- Efl_Canvas_Gesture_Recognizer *recognizer = eina_hash_find (pd->m_recognizers, &type);
+ Efl_Canvas_Gesture_Recognizer *recognizer;
+
+ if (type == EFL_EVENT_GESTURE_CUSTOM)
+ recognizer = eina_list_data_get(pd->custom_recognizers);
+ else
+ recognizer = eina_hash_find(pd->m_recognizers, &type);
if (recognizer)
{
- eina_hash_list_remove(pd->m_gesture_contex, &target, type);
- _cleanup_cached_gestures(pd, target, type);
+ Eina_Hash *thisisreallystupid = eina_hash_find(pd->m_gesture_contex, &target);
+ intptr_t count;
+
+ if (!thisisreallystupid) return;
+ count = (intptr_t)eina_hash_find(thisisreallystupid, &type);
+ if (!count) return;
+ count--;
+ eina_hash_set(thisisreallystupid, &type, (intptr_t*)count);
+ if (count) return;
+ eina_hash_del_by_key(thisisreallystupid, &type);
+ if (eina_hash_population(thisisreallystupid)) return;
+ eina_hash_del_by_key(pd->m_gesture_contex, &target);
+ _cleanup_cached_gestures(pd, target, type, NULL);
}
}
-void
-_efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event)
+static void
+_recognizer_cleanup_internal(Efl_Canvas_Gesture_Manager_Data *pd, const Efl_Canvas_Gesture_Recognizer *recognizer, const Eo *target, const Efl_Event_Description *type)
+{
+ _cleanup_cached_gestures(pd, target, type, recognizer);
+ eina_hash_del(pd->m_object_events, &recognizer, NULL);
+ //FIXME: delete it by object not list.
+ _cleanup_object(pd->m_gestures_to_delete);
+}
+
+static void
+_gesture_recognizer_process_internal(Efl_Canvas_Gesture_Manager_Data *pd, Efl_Canvas_Gesture_Recognizer *recognizer,
+ Eo *target, const Efl_Event_Description *gesture_type, void *event)
{
- Efl_Canvas_Gesture_Manager_Data *pd = data;
- Eina_List *l, *gesture_context;
- const Efl_Event_Description *gesture_type;
- Efl_Canvas_Gesture_Recognizer *recognizer;
- Efl_Canvas_Gesture *gesture;
Efl_Canvas_Gesture_Recognizer_Result recog_result;
- Efl_Canvas_Gesture_Recognizer_Result recog_state;
+ Efl_Canvas_Gesture_Recognizer_Result recog_state = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
Efl_Canvas_Gesture_Touch *touch_event;
+ Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(recognizer, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+ //If the gesture canceled or already finished by recognizer.
+ Efl_Canvas_Gesture *gesture = _get_state(pd, target, recognizer, gesture_type);
+ if (!gesture) return;
+
+ //Check there is already created event exist or not.
+ touch_event = eina_hash_find(pd->m_object_events, &recognizer);
+
+ if (!touch_event)
+ {
+ touch_event = efl_add_ref(EFL_CANVAS_GESTURE_TOUCH_CLASS, NULL);
+ eina_hash_add(pd->m_object_events, &recognizer, touch_event);
+ }
+
+ efl_gesture_touch_point_record(touch_event, event);
+
+ //This is for handling the case that mouse event pairs dont match.
+ //Such as the case of canceling gesture recognition after a mouse down.
+ if (efl_gesture_touch_state_get(touch_event) == EFL_GESTURE_TOUCH_STATE_UNKNOWN)
+ return;
+ if ((!rd->continues) && ((efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_CANCELED) ||
+ (efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_FINISHED)))
+ goto post_event;
+
+ /* this is the "default" value for the event, recognizers may modify it if necessary */
+ efl_gesture_touch_count_set(gesture, efl_gesture_touch_points_count_get(touch_event));
+
+ //Gesture detecting.
+ recog_result = efl_gesture_recognizer_recognize(recognizer, gesture, target, touch_event);
+ recog_state = recog_result & EFL_GESTURE_RECOGNIZER_RESULT_RESULT_MASK;
- gesture_context = eina_hash_find(pd->m_gesture_contex, &target);
- if (gesture_context)
+ if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER)
{
- EINA_LIST_FOREACH(gesture_context, l, gesture_type)
+ if (efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_NONE)
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_STARTED);
+ else
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_UPDATED);
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_FINISH)
+ {
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_FINISHED);
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_MAYBE)
+ {
+ return;
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_CANCEL)
+ {
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE)
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_CANCELED);
+ else
{
- //Check there is already created event exist or not.
- touch_event = eina_hash_find(pd->m_object_events, &gesture_type);
+ if (rd->continues)
+ return;
+ goto post_event;
+ }
+ }
+ else if (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_IGNORE)
+ {
+ return;
+ }
- if (!touch_event)
- {
- touch_event = efl_add_ref(EFL_CANVAS_GESTURE_TOUCH_CLASS, NULL);
- eina_hash_add(pd->m_object_events, &gesture_type, touch_event);
- }
+ efl_gesture_timestamp_set(gesture, efl_gesture_touch_current_timestamp_get(touch_event));
+ efl_event_callback_call(target, gesture_type, gesture);
+post_event:
+ /* avoid destroying touch tracking before gesture has ended */
+ if ((!rd->continues) &&
+ ((efl_gesture_touch_state_get(touch_event) != EFL_GESTURE_TOUCH_STATE_END) || efl_gesture_touch_points_count_get(touch_event)))
+ return;
+ //If the current event recognizes the gesture continuously, dont delete gesture.
+ if (((recog_state == EFL_GESTURE_RECOGNIZER_RESULT_FINISH) || (recog_state == EFL_GESTURE_RECOGNIZER_RESULT_CANCEL)) &&
+ !rd->continues)
+ _recognizer_cleanup_internal(pd, recognizer, target, gesture_type);
+}
- efl_gesture_touch_point_record(touch_event, event);
+void
+_efl_canvas_gesture_manager_filter_event(void *data, Eo *target, void *event)
+{
+ Efl_Canvas_Gesture_Manager_Data *pd = data;
+ Eina_Hash *thisisreallystupid;
+ Eina_Iterator *it;
+ Eina_Hash_Tuple *tup;
+ Efl_Canvas_Gesture_Recognizer *recognizer;
- //This is for handling the case that mouse event pairs dont match.
- //Such as the case of canceling gesture recognition after a mouse down.
- if (efl_gesture_touch_state_get(touch_event) == EFL_GESTURE_TOUCH_UNKNOWN)
- continue;
+ thisisreallystupid = eina_hash_find(pd->m_gesture_contex, &target);
+ if (!thisisreallystupid) return;
+ pd->processing = EINA_TRUE;
+ it = eina_hash_iterator_tuple_new(thisisreallystupid);
+ EINA_ITERATOR_FOREACH(it, tup)
+ {
+ const Efl_Event_Description *gesture_type = *(void**)tup->key;
+ if (gesture_type == EFL_EVENT_GESTURE_CUSTOM)
+ {
+ Eina_List *l;
+ EINA_LIST_FOREACH(pd->custom_recognizers, l, recognizer)
+ _gesture_recognizer_process_internal(pd, recognizer, target, gesture_type, event);
+ }
+ else
+ {
recognizer = eina_hash_find(pd->m_recognizers, &gesture_type);
-
- //If the gesture canceled or already finished by recognizer.
- gesture = _get_state(pd, target, recognizer, gesture_type);
- if (!gesture)
- continue;
-
- //Gesture detecting.
- recog_result = efl_gesture_recognizer_recognize(recognizer, gesture, target, touch_event);
- recog_state = recog_result & EFL_GESTURE_RESULT_MASK;
-
- Efl_Canvas_Gesture_Recognizer_Data *rd =
- efl_data_scope_get(recognizer, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
-
- if (recog_state == EFL_GESTURE_TRIGGER)
- {
- if (efl_gesture_state_get(gesture) == EFL_GESTURE_NONE)
- efl_gesture_state_set(gesture, EFL_GESTURE_STARTED);
- else
- efl_gesture_state_set(gesture, EFL_GESTURE_UPDATED);
- }
- else if (recog_state == EFL_GESTURE_FINISH)
- {
- efl_gesture_state_set(gesture, EFL_GESTURE_FINISHED);
- }
- else if (recog_state == EFL_GESTURE_MAYBE)
- {
- continue;
- }
- else if (recog_state == EFL_GESTURE_CANCEL)
- {
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE)
- efl_gesture_state_set(gesture, EFL_GESTURE_CANCELED);
- else
- {
- //Need to recognize events that occur consecutively
- //in a mouse-down state.
- if (rd->continues)
- continue;
- }
- }
- else if (recog_state == EFL_GESTURE_IGNORE)
- {
- continue;
- }
-
- efl_gesture_timestamp_set(gesture, efl_gesture_touch_cur_timestamp_get(touch_event));
- efl_event_callback_call(target, gesture_type, gesture);
-
- //If the current event recognizes the gesture continuously, dont delete gesture.
- if (((recog_state == EFL_GESTURE_FINISH) || (recog_state == EFL_GESTURE_CANCEL)) &&
- !rd->continues)
- {
- _cleanup_cached_gestures(pd, target, gesture_type);
- eina_hash_del(pd->m_object_events, &gesture_type, NULL);
- //FIXME: delete it by object not list.
- _cleanup_object(pd->m_gestures_to_delete);
- pd->m_gestures_to_delete = NULL;
-
- }
+ _gesture_recognizer_process_internal(pd, recognizer, target, gesture_type, event);
}
}
+ eina_iterator_free(it);
+ pd->processing = EINA_FALSE;
}
EOLIAN static void
_efl_canvas_gesture_manager_recognizer_register(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Manager_Data *pd,
Efl_Canvas_Gesture_Recognizer *recognizer)
{
- Efl_Canvas_Gesture_Recognizer_Data *rpd;
- Efl_Canvas_Gesture *dummy = efl_gesture_recognizer_add(recognizer, NULL);
-
- if (!dummy)
- return;
-
- const Efl_Event_Description *type = _efl_gesture_type_get(dummy);
-
+ const Efl_Event_Description *type = _gesture_recognizer_event_type_get(recognizer);
//Add the recognizer to the m_recognizers
- eina_hash_add(pd->m_recognizers, &type, efl_ref(recognizer));
- //Update the manager
- rpd = efl_data_scope_get(recognizer, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
- rpd->manager = obj;
+ if (type == EFL_EVENT_GESTURE_CUSTOM)
+ {
+ EINA_SAFETY_ON_TRUE_RETURN(pd->custom_recognizers && eina_list_data_find(pd->custom_recognizers, recognizer));
+ pd->custom_recognizers = eina_list_append(pd->custom_recognizers, efl_ref(recognizer));
+ }
+ else
+ {
+ EINA_SAFETY_ON_TRUE_RETURN(!!eina_hash_find(pd->m_recognizers, &type));
+ eina_hash_add(pd->m_recognizers, &type, efl_ref(recognizer));
+ }
- efl_del(dummy);
}
EOLIAN static void
_efl_canvas_gesture_manager_recognizer_unregister(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Manager_Data *pd,
- Efl_Canvas_Gesture_Recognizer *recognizer)
+ Efl_Canvas_Gesture_Recognizer *recognizer)
{
Eina_List *l, *l_next;
Object_Gesture *object_gesture;
const Efl_Event_Description *type;
- Efl_Canvas_Gesture *dummy;
if (!recognizer) return;
//Find the type of the recognizer
- dummy = efl_gesture_recognizer_add(recognizer, 0);
- if (!dummy)return;
-
- type = _efl_gesture_type_get(dummy);
- efl_del(dummy);
-
+ type = _gesture_recognizer_event_type_get(recognizer);
//Check if its already registered
- recognizer = eina_hash_find(pd->m_recognizers, &type);
-
- if (!recognizer) return;
+ if (type == EFL_EVENT_GESTURE_CUSTOM)
+ {
+ EINA_SAFETY_ON_TRUE_RETURN((!pd->custom_recognizers) || (!eina_list_data_find(pd->custom_recognizers, recognizer)));
+ pd->custom_recognizers = eina_list_remove(pd->custom_recognizers, recognizer);
+ eina_hash_del_by_key(pd->m_object_events, &recognizer);
+ efl_unref(recognizer);
+ }
+ else
+ {
+ EINA_SAFETY_ON_TRUE_RETURN(!eina_hash_find(pd->m_recognizers, &type));
+ eina_hash_del_by_key(pd->m_object_events, &recognizer);
+ eina_hash_del_by_key(pd->m_recognizers, &type);
+ }
//Remove that gesture from the list of object gestures
EINA_LIST_FOREACH_SAFE(pd->m_object_gestures, l, l_next, object_gesture)
{
- if (object_gesture->type == type)
+ if ((object_gesture->type == type) && (object_gesture->recognizer == recognizer))
{
- pd->m_gestures_to_delete = eina_list_append(pd->m_gestures_to_delete, object_gesture->gesture);
+ eina_array_push(pd->m_gestures_to_delete, object_gesture->gesture);
free(object_gesture);
pd->m_object_gestures = eina_list_remove_list(pd->m_object_gestures, l);
}
}
-
- eina_hash_del(pd->m_recognizers, &type, NULL);
-}
-
-static Efl_Canvas_Gesture_Recognizer *
-_find_match_recognizer(Efl_Canvas_Gesture_Manager_Data *pd, Efl_Canvas_Gesture_Recognizer_Type type)
-{
- const Efl_Event_Description *event_type;
-
- switch (type)
- {
- case EFL_GESTURE_TAP:
- {
- event_type = EFL_EVENT_GESTURE_TAP;
- break;
- }
- case EFL_GESTURE_DOUBLETAP:
- {
- event_type = EFL_EVENT_GESTURE_DOUBLE_TAP;
- break;
- }
- case EFL_GESTURE_TRIPLETAP:
- {
- event_type = EFL_EVENT_GESTURE_TRIPLE_TAP;
- break;
- }
- case EFL_GESTURE_LONGTAP:
- {
- event_type = EFL_EVENT_GESTURE_LONG_TAP;
- break;
- }
- case EFL_GESTURE_MOMENTUM:
- {
- event_type = EFL_EVENT_GESTURE_MOMENTUM;
- break;
- }
- case EFL_GESTURE_FLICK:
- {
- event_type = EFL_EVENT_GESTURE_FLICK;
- break;
- }
- case EFL_GESTURE_ZOOM:
- {
- event_type = EFL_EVENT_GESTURE_ZOOM;
- break;
- }
- default:
- return NULL;
- }
-
- return eina_hash_find(pd->m_recognizers, &event_type);
-}
-
-EOLIAN static const Efl_Canvas_Gesture_Recognizer *
-_efl_canvas_gesture_manager_recognizer_get(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Manager_Data *pd,
- Efl_Canvas_Gesture_Recognizer_Type type)
-{
- Efl_Canvas_Gesture_Recognizer *recognizer = _find_match_recognizer(pd, type);
-
- if (recognizer)
- return recognizer;
- else
- return NULL;
+ if (pd->processing) return;
+ _cleanup_object(pd->m_gestures_to_delete);
}
// EOLIAN static void
@@ -387,15 +452,13 @@ _efl_canvas_gesture_manager_recognizer_get(Eo *obj EINA_UNUSED, Efl_Canvas_Gestu
// }
//Get or create a gesture object that will represent the state for a given object, used by the recognizer
-Efl_Canvas_Gesture*
+Efl_Canvas_Gesture *
_get_state(Efl_Canvas_Gesture_Manager_Data *pd,
Eo *target, Efl_Canvas_Gesture_Recognizer *recognizer, const Efl_Event_Description *type)
{
Eina_List *l;
Object_Gesture *object_gesture;
Efl_Canvas_Gesture *gesture;
- Efl_Canvas_Gesture_Recognizer_Data *rd =
- efl_data_scope_get(recognizer, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
//If the widget is being deleted we should be careful not to
//Create a new state.
@@ -408,23 +471,12 @@ _get_state(Efl_Canvas_Gesture_Manager_Data *pd,
if (object_gesture->object == target &&
object_gesture->recognizer == recognizer &&
object_gesture->type == type)
- {
- //The gesture is already processed waiting for cleanup
- if (((efl_gesture_state_get(object_gesture->gesture) == EFL_GESTURE_FINISHED) ||
- (efl_gesture_state_get(object_gesture->gesture) == EFL_GESTURE_CANCELED)) &&
- (!rd->continues))
- {
- _cleanup_cached_gestures(pd, target, type);
- eina_hash_del(pd->m_object_events, &type, NULL);
- _cleanup_object(pd->m_gestures_to_delete);
- pd->m_gestures_to_delete = NULL;
- return NULL;
- }
- return object_gesture->gesture;
- }
+ {
+ return object_gesture->gesture;
+ }
}
- gesture = efl_gesture_recognizer_add(recognizer, target);
+ gesture = efl_add(efl_gesture_recognizer_type_get(recognizer), recognizer);
if (!gesture)
return 0;
@@ -433,6 +485,8 @@ _get_state(Efl_Canvas_Gesture_Manager_Data *pd,
object_gesture->recognizer = recognizer;
object_gesture->type = type;
object_gesture->gesture = gesture;
+ if (type == EFL_EVENT_GESTURE_CUSTOM)
+ efl_gesture_custom_gesture_name_set(gesture, efl_gesture_recognizer_custom_gesture_name_get(recognizer));
pd->m_object_gestures = eina_list_append(pd->m_object_gestures, object_gesture);
@@ -441,31 +495,33 @@ _get_state(Efl_Canvas_Gesture_Manager_Data *pd,
static void
_cleanup_cached_gestures(Efl_Canvas_Gesture_Manager_Data *pd,
- Eo *target, const Efl_Event_Description *type)
+ const Eo *target, const Efl_Event_Description *type, const Efl_Canvas_Gesture_Recognizer *recognizer)
{
Eina_List *l, *l_next;
Object_Gesture *object_gesture;
EINA_LIST_FOREACH_SAFE(pd->m_object_gestures, l, l_next, object_gesture)
{
- if ((object_gesture->type == type) && (target == object_gesture->object))
+ if ((object_gesture->type == type) && (target == object_gesture->object) &&
+ ((!recognizer) || (object_gesture->recognizer == recognizer)))
{
- pd->m_gestures_to_delete = eina_list_append(pd->m_gestures_to_delete, object_gesture->gesture);
+ eina_array_push(pd->m_gestures_to_delete, object_gesture->gesture);
free(object_gesture);
pd->m_object_gestures = eina_list_remove_list(pd->m_object_gestures, l);
}
}
}
-void
-efl_gesture_manager_gesture_clean_up(Eo *obj, Eo *target, const Efl_Event_Description *type)
+EOLIAN static void
+_efl_canvas_gesture_manager_recognizer_cleanup(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Manager_Data *pd, const Efl_Canvas_Gesture_Recognizer *recognizer, const Eo *target)
{
- Efl_Canvas_Gesture_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS);
+ const Efl_Event_Description *type;
- _cleanup_cached_gestures(pd, target, type);
- eina_hash_del(pd->m_object_events, &type, NULL);
- _cleanup_object(pd->m_gestures_to_delete);
- pd->m_gestures_to_delete = NULL;
+ EINA_SAFETY_ON_NULL_RETURN(recognizer);
+
+ //Find the type of the recognizer
+ type = _gesture_recognizer_event_type_get(recognizer);
+ _recognizer_cleanup_internal(pd, recognizer, target, type);
}
#include "efl_canvas_gesture_manager.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.eo b/src/lib/evas/gesture/efl_canvas_gesture_manager.eo
index 1784f20d1e..7ae66a5af2 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_manager.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.eo
@@ -1,12 +1,10 @@
-import efl_canvas_gesture_types;
-
class @beta Efl.Canvas.Gesture_Manager extends Efl.Object
{
[[This class keeps track of active @Efl.Canvas.Gesture_Recognizer objects.
For internal use only.
- This gesture class defines methods that register and unregister a recognizer and
- get a recognizer according to gesture event type.
+ This class defines methods to manage gesture recognizers and handles passing input events
+ to the recognizers that it manages.
]]
c_prefix: efl_gesture_manager;
methods {
@@ -22,24 +20,11 @@ class @beta Efl.Canvas.Gesture_Manager extends Efl.Object
@in recognizer: Efl.Canvas.Gesture_Recognizer; [[The gesture recognizer object.]]
}
}
- recognizer_get {
- [[Returns the event recognizer object associated with the given $gesture_type.]]
+ recognizer_cleanup {
+ [[Perform cleanup for a gesture which ends after a delay.]]
params {
- @in gesture_type: Efl.Canvas.Gesture_Recognizer_Type; [[The gesture event type.]]
- }
- return: const(Efl.Canvas.Gesture_Recognizer); [[The gesture recognizer.]]
- }
- @property config {
- [[This property holds configuration values for the recognizer.]]
- set {
- }
- get {
- }
- keys {
- name: string; [[Property name.]]
- }
- values {
- value: any_value_ref; [[Value of the property.]]
+ @in recognizer: const(Efl.Canvas.Gesture_Recognizer); [[The gesture recognizer object.]]
+ @in target: const(Efl.Canvas.Object); [[The target object being processed by the recognizer.]]
}
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_momentum.c b/src/lib/evas/gesture/efl_canvas_gesture_momentum.c
index e7eb34ad2b..18aaf6595f 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_momentum.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_momentum.c
@@ -2,21 +2,8 @@
#define MY_CLASS EFL_CANVAS_GESTURE_MOMENTUM_CLASS
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_momentum_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Momentum_Data *pd EINA_UNUSED)
-{
- Efl_Canvas_Gesture_Data *gd;
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
- gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
- gd->type = EFL_EVENT_GESTURE_MOMENTUM;
-
- return obj;
-}
-
EOLIAN static Eina_Vector2
-_efl_canvas_gesture_momentum_momentum_get(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Momentum_Data *pd)
+_efl_canvas_gesture_momentum_momentum_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Momentum_Data *pd)
{
return pd->momentum;
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_momentum.eo b/src/lib/evas/gesture/efl_canvas_gesture_momentum.eo
index 0f78ad69aa..1220e0ffde 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_momentum.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_momentum.eo
@@ -4,16 +4,19 @@ class @beta Efl.Canvas.Gesture_Momentum extends Efl.Canvas.Gesture
{
[[Momentum gesture class holding state information.
See @Efl.Canvas.Gesture to see what this state is and
- @[Efl.Gesture.Events.gesture,momentum] for a description of the Momentum gesture.
+ @[Efl.Canvas.Gesture_Events.gesture,momentum] for a description of the Momentum gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
]]
c_prefix: efl_gesture_momentum;
methods {
- momentum_get {
- [[Gets the momentum value, this is, the direction in which the action occurred.]]
- return: Eina.Vector2; [[The momentum vector.]]
+ @property momentum {
+ [[The momentum value, this is, the direction in which the action occurred.]]
+ get {
+ }
+ values {
+ momentum: Eina.Vector2; [[The momentum vector.]]
+ }
}
}
- implements {
- Efl.Object.constructor;
- }
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_private.h b/src/lib/evas/gesture/efl_canvas_gesture_private.h
index a835c3093d..7b9b8550b0 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_private.h
+++ b/src/lib/evas/gesture/efl_canvas_gesture_private.h
@@ -4,52 +4,50 @@
#include "evas_common_private.h"
#include "evas_private.h"
-#include "efl_gesture_events.eo.h"
+#include "efl_canvas_gesture_events.eo.h"
#include <Ecore.h>
-const Efl_Event_Description * _efl_gesture_type_get(const Eo *obj);
-void efl_gesture_manager_gesture_clean_up(Eo *obj, Eo *target, const Efl_Event_Description *type);
+/* milliseconds */
+#define TAP_TOUCH_TIME_THRESHOLD (0.1 * 1000)
+
+int _direction_get(Evas_Coord xx1, Evas_Coord xx2);
+Eina_Value *_recognizer_config_get(const Eo *obj, const char *name);
+Eina_Bool _event_multi_touch_get(const Efl_Canvas_Gesture_Touch *event);
+
+double _angle_get(Evas_Coord xx1, Evas_Coord yy1, Evas_Coord xx2, Evas_Coord yy2);
+Evas_Coord _finger_gap_length_get(Evas_Coord xx1, Evas_Coord yy1, Evas_Coord xx2, Evas_Coord yy2, Evas_Coord *x, Evas_Coord *y);
typedef struct _Efl_Canvas_Gesture_Manager_Data Efl_Canvas_Gesture_Manager_Data;
typedef struct _Efl_Canvas_Gesture_Recognizer_Data Efl_Canvas_Gesture_Recognizer_Data;
typedef struct _Efl_Canvas_Gesture_Recognizer_Tap_Data Efl_Canvas_Gesture_Recognizer_Tap_Data;
-typedef struct _Efl_Canvas_Gesture_Recognizer_Long_Tap_Data Efl_Canvas_Gesture_Recognizer_Long_Tap_Data;
+typedef struct _Efl_Canvas_Gesture_Recognizer_Long_Press_Data Efl_Canvas_Gesture_Recognizer_Long_Press_Data;
typedef struct _Efl_Canvas_Gesture_Recognizer_Double_Tap_Data Efl_Canvas_Gesture_Recognizer_Double_Tap_Data;
typedef struct _Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data;
typedef struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data Efl_Canvas_Gesture_Recognizer_Momentum_Data;
typedef struct _Efl_Canvas_Gesture_Recognizer_Flick_Data Efl_Canvas_Gesture_Recognizer_Flick_Data;
+typedef struct _Efl_Canvas_Gesture_Recognizer_Rotate_Data Efl_Canvas_Gesture_Recognizer_Rotate_Data;
typedef struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data Efl_Canvas_Gesture_Recognizer_Zoom_Data;
+typedef struct _Efl_Canvas_Gesture_Recognizer_Custom_Data Efl_Canvas_Gesture_Recognizer_Custom_Data;
typedef struct _Efl_Canvas_Gesture_Data Efl_Canvas_Gesture_Data;
typedef struct _Efl_Canvas_Gesture_Momentum_Data Efl_Canvas_Gesture_Momentum_Data;
typedef struct _Efl_Canvas_Gesture_Flick_Data Efl_Canvas_Gesture_Flick_Data;
typedef struct _Efl_Canvas_Gesture_Zoom_Data Efl_Canvas_Gesture_Zoom_Data;
-
-typedef struct _Pointer_Data
-{
- struct
- {
- Eina_Position2D pos;
- unsigned int timestamp;
- } start, prev, cur;
- int id;
- Efl_Pointer_Action action;
-} Pointer_Data;
+typedef struct _Efl_Canvas_Gesture_Rotate_Data Efl_Canvas_Gesture_Rotate_Data;
+typedef struct _Efl_Canvas_Gesture_Custom_Data Efl_Canvas_Gesture_Custom_Data;
typedef struct _Efl_Canvas_Gesture_Touch_Data
{
Efl_Canvas_Gesture_Touch_State state;
- Eina_Hash *touch_points;
- int touch_down;
- Eina_Bool multi_touch;
+ Eina_Array *touch_points;
+ Efl_Gesture_Touch_Point_Data *cur_touch;
+ Efl_Gesture_Touch_Point_Data *prev_touch;
Eo *target;
+ int touch_down;
} Efl_Canvas_Gesture_Touch_Data;
struct _Efl_Canvas_Gesture_Recognizer_Data
{
- Eo *manager; // keeps a reference of the manager
- Eo *gesture;
- int finger_size;
Eina_Bool continues;
};
@@ -58,38 +56,42 @@ struct _Efl_Canvas_Gesture_Recognizer_Tap_Data
Eo *target;
Eo *gesture;
Ecore_Timer *timeout;
+ int finger_size;
};
-struct _Efl_Canvas_Gesture_Recognizer_Long_Tap_Data
+struct _Efl_Canvas_Gesture_Recognizer_Long_Press_Data
{
+ double start_timeout;
Eina_List *target_timeout;
Eo *target;
Efl_Canvas_Gesture *gesture;
Ecore_Timer *timeout;
- double start_timeout;
+ int finger_size;
Eina_Bool is_timeout;
};
struct _Efl_Canvas_Gesture_Recognizer_Double_Tap_Data
{
+ double start_timeout;
Eina_List *target_timeout;
Eo *target;
Eo *gesture;
Ecore_Timer *timeout;
- double start_timeout;
- Eina_Bool is_timeout;
int tap_count;
+ int finger_size;
+ Eina_Bool is_timeout;
};
struct _Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data
{
+ double start_timeout;
Eina_List *target_timeout;
Eo *target;
Eo *gesture;
Ecore_Timer *timeout;
- double start_timeout;
- Eina_Bool is_timeout;
int tap_count;
+ int finger_size;
+ Eina_Bool is_timeout;
};
struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data
@@ -105,48 +107,84 @@ struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data
struct _Efl_Canvas_Gesture_Recognizer_Flick_Data
{
+ double line_angle;
Eina_Position2D st_line;
unsigned int t_st;
unsigned int t_end;
int line_length;
- double line_angle;
+ int finger_size;
Eina_Bool touched;
};
+struct _Efl_Canvas_Gesture_Recognizer_Rotate_Data
+{
+ Efl_Gesture_Touch_Point_Data rotate_st;
+ Efl_Gesture_Touch_Point_Data rotate_st1;
+
+ Efl_Gesture_Touch_Point_Data rotate_mv;
+ Efl_Gesture_Touch_Point_Data rotate_mv1;
+ double rotate_step;
+ double base_angle; /**< Holds start-angle */
+ double prev_momentum; /* Snapshot of momentum 0.01
+ * sec ago */
+ double accum_momentum;
+ double rotate_angular_tolerance;
+ double next_step;
+ unsigned int prev_momentum_tm; /* timestamp of prev_momentum */
+ int finger_size;
+};
+
struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data
{
- Pointer_Data zoom_st;
- Pointer_Data zoom_st1;
+ Efl_Gesture_Touch_Point_Data zoom_st;
+ Efl_Gesture_Touch_Point_Data zoom_st1;
- Pointer_Data zoom_mv;
- Pointer_Data zoom_mv1;
+ Efl_Gesture_Touch_Point_Data zoom_mv;
+ Efl_Gesture_Touch_Point_Data zoom_mv1;
- Evas_Coord zoom_base; /* Holds gap between fingers on
- * zoom-start */
double zoom_distance_tolerance;
double zoom_finger_factor;
double zoom_step;
double next_step;
+
+ Evas_Coord zoom_base; /* Holds gap between fingers on
+ * zoom-start */
+ int finger_size;
Eina_Bool calc_temp;
};
+struct _Efl_Canvas_Gesture_Recognizer_Custom_Data
+{
+ Eina_Stringshare *name;
+};
+
struct _Efl_Canvas_Gesture_Data
{
- const Efl_Event_Description *type;
Efl_Canvas_Gesture_State state;
Eina_Position2D hotspot;
unsigned int timestamp;
+ unsigned int touch_count;
};
struct _Efl_Canvas_Gesture_Momentum_Data
{
Eina_Vector2 momentum;
+ int id;
};
struct _Efl_Canvas_Gesture_Flick_Data
{
Eina_Vector2 momentum;
double angle;
+ int id;
+};
+
+struct _Efl_Canvas_Gesture_Rotate_Data
+{
+ //Evas_Coord x, y; /**< Holds rotate center point reported to user */
+ double angle; /**< Rotation value: 0.0 means no rotation */
+ double momentum; /**< Rotation momentum: rotation done per second (NOT YET SUPPORTED) */
+ Evas_Coord radius; /**< Holds radius between fingers reported to user */
};
struct _Efl_Canvas_Gesture_Zoom_Data
@@ -155,4 +193,9 @@ struct _Efl_Canvas_Gesture_Zoom_Data
double zoom;
};
+struct _Efl_Canvas_Gesture_Custom_Data
+{
+ Eina_Stringshare *gesture_name;
+};
+
#endif
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer.c
index 8a83e2f945..c07e11d084 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer.c
@@ -1,28 +1,143 @@
+#define EFL_CANVAS_GESTURE_RECOGNIZER_PROTECTED
#include "efl_canvas_gesture_private.h"
+#define RAD2DEG(x) ((x) * 57.295779513)
-#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_CLASS
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_CLASS
+#include "efl_canvas_gesture_recognizer.eo.h"
-#define EFL_GESTURE_TAP_FINGER_SIZE 10
-EOLIAN static Eina_Value *
-_efl_canvas_gesture_recognizer_config_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Data *pd, const char *name)
+Eina_Value *
+_recognizer_config_get(const Eo *obj, const char *name)
{
- return efl_gesture_manager_config_get(pd->manager, name);
+ Eo *config = efl_provider_find(obj, EFL_CONFIG_INTERFACE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(config, NULL);
+ return efl_config_get(config, name);
+}
+
+EOLIAN static Eina_Bool
+_efl_canvas_gesture_recognizer_continues_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Data *pd)
+{
+ return pd->continues;
}
EOLIAN static void
-_efl_canvas_gesture_recognizer_reset(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Data *pd EINA_UNUSED,
- Efl_Canvas_Gesture *gesture EINA_UNUSED)
+_efl_canvas_gesture_recognizer_continues_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Data *pd, Eina_Bool value)
+{
+ pd->continues = !!value;
+}
+
+int
+_direction_get(Evas_Coord xx1, Evas_Coord xx2)
+{
+ if (xx2 < xx1) return -1;
+ if (xx2 > xx1) return 1;
+
+ return 0;
+}
+
+Eina_Bool
+_event_multi_touch_get(const Efl_Canvas_Gesture_Touch *event)
{
+ return efl_gesture_touch_points_count_get(event) > 1;
+}
+
+
+double
+_angle_get(Evas_Coord xx1, Evas_Coord yy1, Evas_Coord xx2, Evas_Coord yy2)
+{
+ double a, xx, yy, rt = (-1);
+
+ xx = abs(xx2 - xx1);
+ yy = abs(yy2 - yy1);
+ if (((int)xx) && ((int)yy))
+ {
+ rt = a = RAD2DEG(atan(yy / xx));
+ if (xx1 < xx2)
+ {
+ if (yy1 < yy2) rt = 360 - a;
+ else rt = a;
+ }
+ else
+ {
+ if (yy1 < yy2) rt = 180 + a;
+ else rt = 180 - a;
+ }
+ }
+
+ if (rt < 0) /* Do this only if rt is not set */
+ {
+ if (((int)xx)) /* Horizontal line */
+ {
+ if (xx2 < xx1) rt = 180;
+ else rt = 0.0;
+ }
+ else /* Vertical line */
+ {
+ if (yy2 < yy1) rt = 90;
+ else rt = 270;
+ }
+ }
+
+ /* Now we want to change from:
+ * 90 0
+ * original circle 180 0 We want: 270 90
+ * 270 180
+ */
+ rt = 450 - rt;
+ if (rt >= 360) rt -= 360;
+
+ return rt;
}
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_recognizer_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Recognizer_Data *pd)
+Evas_Coord
+_finger_gap_length_get(Evas_Coord xx1,
+ Evas_Coord yy1,
+ Evas_Coord xx2,
+ Evas_Coord yy2,
+ Evas_Coord *x,
+ Evas_Coord *y)
{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
+ double a, b, xx, yy, gap;
+ xx = abs(xx2 - xx1);
+ yy = abs(yy2 - yy1);
+ gap = sqrt((xx * xx) + (yy * yy));
- pd->finger_size = EFL_GESTURE_TAP_FINGER_SIZE;
+ /* START - Compute zoom center point */
+ /* The triangle defined as follows:
+ * B
+ * / |
+ * / |
+ * gap / | a
+ * / |
+ * A-----C
+ * b
+ * http://en.wikipedia.org/wiki/Trigonometric_functions
+ *************************************/
+ if (((int)xx) && ((int)yy))
+ {
+ double A = atan((yy / xx));
+ a = (Evas_Coord)((gap / 2) * sin(A));
+ b = (Evas_Coord)((gap / 2) * cos(A));
+ *x = (Evas_Coord)((xx2 > xx1) ? (xx1 + b) : (xx2 + b));
+ *y = (Evas_Coord)((yy2 > yy1) ? (yy1 + a) : (yy2 + a));
+ }
+ else
+ {
+ if ((int)xx) /* horiz line, take half width */
+ {
+ *x = (Evas_Coord)((xx1 + xx2) / 2);
+ *y = (Evas_Coord)(yy1);
+ }
- return obj;
+ if ((int)yy) /* vert line, take half width */
+ {
+ *x = (Evas_Coord)(xx1);
+ *y = (Evas_Coord)((yy1 + yy2) / 2);
+ }
+ }
+ /* END - Compute zoom center point */
+
+ return (Evas_Coord)gap;
}
+
#include "efl_canvas_gesture_recognizer.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo
index e24fc7e9df..d03447f934 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo
@@ -7,17 +7,19 @@ abstract @beta Efl.Canvas.Gesture_Recognizer extends Efl.Object
Gesture recognizers listen to events that occur on a target object
to see if a particular gesture has occurred.
- Recognizer-specific configuration values can be modified through @.config.
+ Recognizer-specific configuration values can be modified through @Efl.Config.config,
+ and the global config object can be found using @Efl.Object.provider_find.
Default configuration values are taken from the system's configuration.
]]
c_prefix: efl_gesture_recognizer;
methods {
- add @pure_virtual {
- [[This function is called to create a new @Efl.Canvas.Gesture object for the given target.]]
- params {
- @in target: Efl.Object; [[The target canvas object.]]
+ @property type @pure_virtual {
+ [[This property returns the class type of gesture recognized by this recognizer.
+ It must be implemented for the recognizer to function.]]
+ get {}
+ values {
+ type: const(Efl.Class); [[The gesture type to recognize.]]
}
- return: Efl.Canvas.Gesture; [[Returns the gesture object that will be used to track this gesture.]]
}
recognize @pure_virtual {
[[Analyzes the given $event and the current state of the $gesture object to see if the state
@@ -25,6 +27,8 @@ abstract @beta Efl.Canvas.Gesture_Recognizer extends Efl.Object
Updates the state of the gesture object as required, and returns a
suitable result for the current recognition step.
+
+ This method must be implemented for the recognizer to function.
]]
params {
@in gesture: Efl.Canvas.Gesture; [[The gesture object.]]
@@ -33,26 +37,17 @@ abstract @beta Efl.Canvas.Gesture_Recognizer extends Efl.Object
}
return: Efl.Canvas.Gesture_Recognizer_Result; [[Returns the result of the analysis.]]
}
- /* FIXME: This function is not used? */
- reset {
- [[This function is called by the framework to reset a given gesture.]]
- params {
- @in gesture: Efl.Canvas.Gesture; [[The gesture object.]]
- }
- }
- @property config {
- [[This property holds configuration values for the recognizer.]]
+ @property continues {
+ [[This property determines whether a gesture recognizer should continue
+ to try processing events after returning @Efl.Canvas.Gesture_Recognizer_Result.finish
+ or @Efl.Canvas.Gesture_Recognizer_Result.cancel.]]
get {
}
- keys {
- name: string; [[Property name.]]
+ set {
}
values {
- value: any_value_ref; [[Value of the property.]]
+ value: bool; [[Value of the property.]]
}
}
}
- implements {
- Efl.Object.constructor;
- }
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c
new file mode 100644
index 0000000000..e91b195e3d
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c
@@ -0,0 +1,37 @@
+#include "efl_canvas_gesture_private.h"
+
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_CUSTOM_CLASS
+
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_custom_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd EINA_UNUSED)
+{
+ return EFL_CANVAS_GESTURE_CUSTOM_CLASS;
+}
+
+EOLIAN static Eo *
+_efl_canvas_gesture_recognizer_custom_efl_object_finalize(Eo *obj, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->name, NULL);
+ return efl_finalize(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_canvas_gesture_recognizer_custom_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd)
+{
+ eina_stringshare_del(pd->name);
+ efl_destructor(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_canvas_gesture_recognizer_custom_gesture_name_set(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd, const char *name)
+{
+ eina_stringshare_replace(&pd->name, name);
+}
+
+EOLIAN static Eina_Stringshare *
+_efl_canvas_gesture_recognizer_custom_gesture_name_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Custom_Data *pd)
+{
+ return pd->name;
+}
+
+#include "efl_canvas_gesture_recognizer_custom.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo
new file mode 100644
index 0000000000..92f9786e75
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo
@@ -0,0 +1,28 @@
+abstract @beta Efl.Canvas.Gesture_Recognizer_Custom extends Efl.Canvas.Gesture_Recognizer
+{
+ [[This is the recognizer for Custom gestures.
+ See @Efl.Canvas.Gesture_Recognizer.
+
+ Custom-written recognizers must inherit this class.
+ They are responsible for managing and updating the state of the recognized @Efl.Canvas.Gesture object inside
+ their implementation of the @Efl.Canvas.Gesture_Recognizer.recognize method, which is required.
+ ]]
+ c_prefix: efl_gesture_recognizer_custom;
+ methods {
+ @property gesture_name {
+ [[This is the name of the gesture recognizer.]]
+ get {
+ }
+ set {
+ }
+ values {
+ gesture_name: string; [[The name of the gesture recognizer.]]
+ }
+ }
+ }
+ implements {
+ Efl.Object.destructor;
+ Efl.Object.finalize;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
+ }
+}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c
index 1656bb633f..123dbd551e 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c
@@ -1,13 +1,13 @@
#include "efl_canvas_gesture_private.h"
-#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_DOUBLE_TAP_CLASS
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_DOUBLE_TAP_CLASS
#define TAP_TIME_OUT 0.33
-EOLIAN static Efl_Canvas_Gesture *
-_efl_canvas_gesture_recognizer_double_tap_efl_canvas_gesture_recognizer_add(Eo *obj, Efl_Canvas_Gesture_Recognizer_Double_Tap_Data *pd EINA_UNUSED, Efl_Object *target EINA_UNUSED)
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_double_tap_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Double_Tap_Data *pd EINA_UNUSED)
{
- return efl_add(EFL_CANVAS_GESTURE_DOUBLE_TAP_CLASS, obj);
+ return EFL_CANVAS_GESTURE_DOUBLE_TAP_CLASS;
}
EOLIAN static void
@@ -23,16 +23,15 @@ _efl_canvas_gesture_recognizer_double_tap_efl_object_destructor(Eo *obj,
static Eina_Bool
_tap_timeout_cb(void *data)
{
- Efl_Canvas_Gesture_Recognizer_Data *rd;
Efl_Canvas_Gesture_Recognizer_Double_Tap_Data *pd;
- rd = efl_data_scope_get(data, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
pd = efl_data_scope_get(data, EFL_CANVAS_GESTURE_RECOGNIZER_DOUBLE_TAP_CLASS);
- efl_gesture_state_set(pd->gesture, EFL_GESTURE_CANCELED);
+ efl_gesture_state_set(pd->gesture, EFL_GESTURE_STATE_CANCELED);
efl_event_callback_call(pd->target, EFL_EVENT_GESTURE_DOUBLE_TAP, pd->gesture);
- efl_gesture_manager_gesture_clean_up(rd->manager, pd->target, EFL_EVENT_GESTURE_DOUBLE_TAP);
+ efl_gesture_manager_recognizer_cleanup(efl_provider_find(data, EFL_CANVAS_GESTURE_MANAGER_CLASS), data,
+ pd->target);
pd->timeout = NULL;
pd->tap_count = 0;
@@ -46,20 +45,19 @@ _efl_canvas_gesture_recognizer_double_tap_efl_canvas_gesture_recognizer_recogniz
Efl_Canvas_Gesture *gesture, Efl_Object *watched,
Efl_Canvas_Gesture_Touch *event)
{
- double length;
+ double length, start_timeout = pd->start_timeout;
double timeout = TAP_TIME_OUT;
Eina_Position2D pos;
Eina_Vector2 dist;
- Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_CANCEL;
- Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
pd->target = watched;
pd->gesture = gesture;
- if (!pd->start_timeout)
+ if (!EINA_DBL_NONZERO(start_timeout))
{
double time;
- Eina_Value *val = efl_gesture_recognizer_config_get(obj, "glayer_doublee_tap_timeout");
+ Eina_Value *val = _recognizer_config_get(obj, "glayer_double_tap_timeout");
if (val)
{
@@ -68,86 +66,94 @@ _efl_canvas_gesture_recognizer_double_tap_efl_canvas_gesture_recognizer_recogniz
}
}
else
- timeout = pd->start_timeout;
+ timeout = start_timeout;
switch (efl_gesture_touch_state_get(event))
{
- case EFL_GESTURE_TOUCH_BEGIN:
- {
- pos = efl_gesture_touch_start_point_get(event);
- efl_gesture_hotspot_set(gesture, pos);
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ {
+ pos = efl_gesture_touch_start_point_get(event);
+ efl_gesture_hotspot_set(gesture, pos);
- if (pd->timeout)
- ecore_timer_reset(pd->timeout);
- else
- pd->timeout = ecore_timer_add(timeout, _tap_timeout_cb, obj);
+ if (pd->timeout)
+ ecore_timer_reset(pd->timeout);
+ else
+ pd->timeout = ecore_timer_add(timeout, _tap_timeout_cb, obj);
- result = EFL_GESTURE_TRIGGER;
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
- break;
- }
+ break;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ {
+ /* multi-touch */
+ if (efl_gesture_touch_current_data_get(event)->action == EFL_POINTER_ACTION_DOWN)
+ {
+ /* a second finger was pressed at the same time-ish as the first: combine into same event */
+ if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_timestamp_get(gesture) < TAP_TOUCH_TIME_THRESHOLD)
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ break;
+ }
+ }
+ result = EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
- case EFL_GESTURE_TOUCH_UPDATE:
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE &&
+ !_event_multi_touch_get(event))
{
- result = EFL_GESTURE_IGNORE;
+ dist = efl_gesture_touch_distance(event, efl_gesture_touch_current_data_get(event)->id);
+ length = fabs(dist.x) + fabs(dist.y);
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE &&
- !efl_gesture_touch_multi_touch_get(event))
+ if (length > pd->finger_size)
{
- dist = efl_gesture_touch_distance(event, 0);
- length = fabs(dist.x) + fabs(dist.y);
-
- if (length > rd->finger_size)
+ if (pd->timeout)
{
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
+ ecore_timer_del(pd->timeout);
+ pd->timeout = NULL;
+ }
- result = EFL_GESTURE_CANCEL;
+ result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
- pd->tap_count = 0;
- }
+ pd->tap_count = 0;
}
-
- break;
}
- case EFL_GESTURE_TOUCH_END:
- {
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE &&
- !efl_gesture_touch_multi_touch_get(event))
- {
- dist = efl_gesture_touch_distance(event, 0);
- length = fabs(dist.x) + fabs(dist.y);
+ break;
+ }
- if (length <= rd->finger_size)
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE &&
+ !_event_multi_touch_get(event))
+ {
+ if (efl_gesture_touch_previous_data_get(event))
+ {
+ Efl_Pointer_Action prev_act = efl_gesture_touch_previous_data_get(event)->action;
+ /* multi-touch */
+ if ((prev_act == EFL_POINTER_ACTION_UP) || (prev_act == EFL_POINTER_ACTION_CANCEL))
{
- pd->tap_count++;
- if (pd->tap_count == 1)
- {
- if (pd->timeout)
- ecore_timer_reset(pd->timeout);
-
- result = EFL_GESTURE_TRIGGER;
- }
- else
+ /* a second finger was pressed at the same time-ish as the first: combine into same event */
+ if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_timestamp_get(gesture) < TAP_TOUCH_TIME_THRESHOLD)
{
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
-
- if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_END)
- result = EFL_GESTURE_FINISH;
- else
- result = EFL_GESTURE_TRIGGER;
-
- pd->tap_count = 0;
+ result = EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ break;
}
}
+ }
+ dist = efl_gesture_touch_distance(event, efl_gesture_touch_current_data_get(event)->id);
+ length = fabs(dist.x) + fabs(dist.y);
+
+ if (length <= pd->finger_size)
+ {
+ pd->tap_count++;
+ if (pd->tap_count == 1)
+ {
+ if (pd->timeout)
+ ecore_timer_reset(pd->timeout);
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ }
else
{
if (pd->timeout)
@@ -156,15 +162,31 @@ _efl_canvas_gesture_recognizer_double_tap_efl_canvas_gesture_recognizer_recogniz
pd->timeout = NULL;
}
- result = EFL_GESTURE_CANCEL;
+ if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_END)
+ result = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ else
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
pd->tap_count = 0;
}
}
+ else
+ {
+ if (pd->timeout)
+ {
+ ecore_timer_del(pd->timeout);
+ pd->timeout = NULL;
+ }
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
- break;
+ pd->tap_count = 0;
+ }
}
+ break;
+ }
+
default:
break;
@@ -173,19 +195,4 @@ _efl_canvas_gesture_recognizer_double_tap_efl_canvas_gesture_recognizer_recogniz
return result;
}
-EOLIAN static double
-_efl_canvas_gesture_recognizer_double_tap_timeout_get(const Eo *obj EINA_UNUSED,
- Efl_Canvas_Gesture_Recognizer_Double_Tap_Data *pd)
-{
- return pd->start_timeout;
-}
-
-EOLIAN static void
-_efl_canvas_gesture_recognizer_double_tap_timeout_set(Eo *obj EINA_UNUSED,
- Efl_Canvas_Gesture_Recognizer_Double_Tap_Data *pd,
- double time)
-{
- pd->start_timeout = time;
-}
-
#include "efl_canvas_gesture_recognizer_double_tap.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.eo
index de229b7147..e3118fdf99 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.eo
@@ -5,21 +5,9 @@ class @beta Efl.Canvas.Gesture_Recognizer_Double_Tap extends Efl.Canvas.Gesture_
For internal use only.
]]
c_prefix: efl_gesture_recognizer_double_tap;
- methods {
- @property timeout {
- [[Maximum time between taps to be recognized as a double tap.]]
- set {
- }
- get {
- }
- values {
- time: double; [[Time in seconds.]]
- }
- }
- }
implements {
Efl.Object.destructor;
- Efl.Canvas.Gesture_Recognizer.add;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
Efl.Canvas.Gesture_Recognizer.recognize;
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c
index 4968c61b34..962ed3ddda 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c
@@ -1,19 +1,30 @@
#include "efl_canvas_gesture_private.h"
-#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_FLICK_CLASS
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_FLICK_CLASS
-#define MOMENTUM_TIMEOUT 50
-#define THUMBSCROLL_FRICTION 0.95
+#define MOMENTUM_TIMEOUT 50
+#define THUMBSCROLL_FRICTION 0.95
#define THUMBSCROLL_MOMENTUM_THRESHOLD 100.0
-#define EFL_GESTURE_MINIMUM_MOMENTUM 0.001
+#define EFL_GESTURE_MINIMUM_MOMENTUM 0.001
-#define RAD2DEG(x) ((x) * 57.295779513)
#define DEG2RAD(x) ((x) / 57.295779513)
-EOLIAN static Efl_Canvas_Gesture *
-_efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_add(Eo *obj, Efl_Canvas_Gesture_Recognizer_Flick_Data *pd EINA_UNUSED, Efl_Object *target EINA_UNUSED)
+#define memset do not use memset to reset flick data, use _reset_recognizer
+
+static void
+_reset_recognizer(Efl_Canvas_Gesture_Recognizer_Flick_Data *pd)
+{
+ pd->st_line = EINA_POSITION2D(0, 0);
+ pd->t_st = pd->t_end = 0;
+ pd->line_length = 0;
+ pd->line_angle = -1;
+ pd->touched = EINA_FALSE;
+}
+
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Flick_Data *pd EINA_UNUSED)
{
- return efl_add(EFL_CANVAS_GESTURE_FLICK_CLASS, obj);
+ return EFL_CANVAS_GESTURE_FLICK_CLASS;
}
static void
@@ -29,7 +40,7 @@ _momentum_set(Eo *obj,
Evas_Coord dy = v2.y - v1.y;
int dt = t2 - t1;
Eina_Value *tf, *tmt;
- double thumbscroll_friction, thumbscroll_momentum_threshold;
+ double thumbscroll_momentum_friction, thumbscroll_momentum_threshold;
if (dt > 0)
{
@@ -39,15 +50,15 @@ _momentum_set(Eo *obj,
vel = sqrt((velx * velx) + (vely * vely));
- tf = efl_gesture_recognizer_config_get(obj, "thumbscroll_friction");
- if (tf) eina_value_get(tf, &thumbscroll_friction);
- else thumbscroll_friction = THUMBSCROLL_FRICTION;
+ tf = _recognizer_config_get(obj, "thumbscroll_momentum_friction");
+ if (tf) eina_value_get(tf, &thumbscroll_momentum_friction);
+ else thumbscroll_momentum_friction = THUMBSCROLL_FRICTION;
- tmt = efl_gesture_recognizer_config_get(obj, "thumbscroll_momentum_threshold");
+ tmt = _recognizer_config_get(obj, "thumbscroll_momentum_threshold");
if (tmt) eina_value_get(tmt, &thumbscroll_momentum_threshold);
else thumbscroll_momentum_threshold = THUMBSCROLL_MOMENTUM_THRESHOLD;
- if ((thumbscroll_friction > 0.0) &&
+ if ((thumbscroll_momentum_friction > 0.0) &&
(vel > thumbscroll_momentum_threshold)) /* report
* momentum */
{
@@ -70,90 +81,38 @@ _single_line_process(Eo *obj,
{
switch (efl_gesture_touch_state_get(event))
{
- case EFL_GESTURE_TOUCH_BEGIN:
- case EFL_GESTURE_TOUCH_UPDATE:
- if (!pd->t_st)
- {
- pd->st_line = efl_gesture_touch_cur_point_get(event);
- pd->t_st = efl_gesture_touch_cur_timestamp_get(event);
-
- efl_gesture_hotspot_set(gesture, pd->st_line);
-
- return;
- }
-
- break;
-
- case EFL_GESTURE_TOUCH_END:
- {
- if (!pd->t_st) return;
-
- pd->t_end = efl_gesture_touch_cur_timestamp_get(event);
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ if (!pd->t_st)
+ {
+ pd->st_line = efl_gesture_touch_current_point_get(event);
+ pd->t_st = efl_gesture_touch_current_timestamp_get(event);
- break;
- }
+ efl_gesture_hotspot_set(gesture, pd->st_line);
- default:
+ return;
+ }
- return;
- }
+ break;
- _momentum_set(obj, fd, pd->st_line, efl_gesture_touch_cur_point_get(event),
- pd->t_st, efl_gesture_touch_cur_timestamp_get(event));
-}
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ if (!pd->t_st) return;
-static double
-_angle_get(Evas_Coord xx1,
- Evas_Coord yy1,
- Evas_Coord xx2,
- Evas_Coord yy2)
-{
- double a, xx, yy, rt = (-1);
+ pd->t_end = efl_gesture_touch_current_timestamp_get(event);
- xx = abs(xx2 - xx1);
- yy = abs(yy2 - yy1);
+ break;
+ }
- if (((int)xx) && ((int)yy))
- {
- rt = a = RAD2DEG(atan(yy / xx));
- if (xx1 < xx2)
- {
- if (yy1 < yy2) rt = 360 - a;
- else rt = a;
- }
- else
- {
- if (yy1 < yy2) rt = 180 + a;
- else rt = 180 - a;
- }
- }
+ default:
- if (rt < 0) /* Do this only if rt is not set */
- {
- if (((int)xx)) /* Horizontal line */
- {
- if (xx2 < xx1) rt = 180;
- else rt = 0.0;
- }
- else
- { /* Vertical line */
- if (yy2 < yy1) rt = 90;
- else rt = 270;
- }
+ return;
}
- /* Now we want to change from:
- * 90 0
- * original circle 180 0 We want: 270 90
- * 270 180
- */
- rt = 450 - rt;
- if (rt >= 360) rt -= 360;
-
- return rt;
+ _momentum_set(obj, fd, pd->st_line, efl_gesture_touch_current_point_get(event),
+ pd->t_st, efl_gesture_touch_current_timestamp_get(event));
}
-
static void
_vector_get(Eina_Position2D v1,
Eina_Position2D v2,
@@ -174,15 +133,17 @@ _efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_recognize(Eo
Efl_Canvas_Gesture *gesture, Efl_Object *watched,
Efl_Canvas_Gesture_Touch *event)
{
- double angle;
+ double angle, line_angle;
Eina_Value *val;
unsigned char glayer_continues_enable;
- Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_CANCEL;
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
Eina_Bool touch_up = EINA_FALSE;
+ int points = efl_gesture_touch_points_count_get(event);
Efl_Canvas_Gesture_Flick_Data *fd = efl_data_scope_get(gesture, EFL_CANVAS_GESTURE_FLICK_CLASS);
Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+ Eina_Bool dead = EINA_FALSE;
- val = efl_gesture_recognizer_config_get(obj, "glayer_continues_enable");
+ val = _recognizer_config_get(obj, "glayer_continues_enable");
if (val) eina_value_get(val, &glayer_continues_enable);
else glayer_continues_enable = 1;
@@ -190,55 +151,88 @@ _efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_recognize(Eo
//without mouse up.
//Recognizing the gesture again, even though it was canceled during gesture
//recognition.
- if (efl_gesture_state_get(gesture) == EFL_GESTURE_CANCELED)
- efl_gesture_state_set(gesture, EFL_GESTURE_NONE);
+ if (efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_CANCELED)
+ efl_gesture_state_set(gesture, EFL_GESTURE_STATE_NONE);
- if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_END)
+ if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_END)
touch_up = EINA_TRUE;
//This is to handle a case with a mouse click on the target object.
- if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_END && !pd->touched)
- efl_gesture_manager_gesture_clean_up(rd->manager, watched, EFL_EVENT_GESTURE_FLICK);
+ if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_END && !pd->touched)
+ {
+ efl_gesture_manager_recognizer_cleanup(efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS), obj, watched);
+ dead = EINA_TRUE;
+ }
if (glayer_continues_enable && !pd->touched)
{
- pd->touched = EINA_TRUE;
- pd->line_angle = -1.0;
- rd->continues = EINA_TRUE;
-
- return EFL_GESTURE_IGNORE;
+ pd->touched = EINA_TRUE;
+ pd->line_angle = -1.0;
+ rd->continues = EINA_TRUE;
+ /* this has been deleted */
+ if (!dead)
+ fd->id = -1;
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ if (pd->touched && (efl_gesture_touch_current_data_get(event)->action == EFL_POINTER_ACTION_DOWN))
+ {
+ /* a second finger was pressed at the same time-ish as the first: combine into same event */
+ if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_timestamp_get(gesture) < TAP_TOUCH_TIME_THRESHOLD)
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ if (pd->t_st && (points > 1) && (fd->id != efl_gesture_touch_current_data_get(event)->id))
+ {
+ int xdir[2], ydir[2];
+ const Efl_Gesture_Touch_Point_Data *data = efl_gesture_touch_current_data_get(event);
+ const Efl_Gesture_Touch_Point_Data *data2;
+
+ if (fd->id == -1) return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ data2 = efl_gesture_touch_data_get(event, fd->id);
+ xdir[0] = _direction_get(data->prev.pos.x, data->cur.pos.x);
+ ydir[0] = _direction_get(data->prev.pos.y, data->cur.pos.y);
+ xdir[1] = _direction_get(data2->prev.pos.x, data2->cur.pos.x);
+ ydir[1] = _direction_get(data2->prev.pos.y, data2->cur.pos.y);
+ if ((xdir[0] != xdir[1]) || (ydir[0] != ydir[1]))
+ {
+ rd->continues = EINA_FALSE;
+ _reset_recognizer(pd);
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
}
_single_line_process(obj, pd, gesture, fd, event);
- _vector_get(pd->st_line, efl_gesture_touch_cur_point_get(event),
+ _vector_get(pd->st_line, efl_gesture_touch_current_point_get(event),
&pd->line_length, &angle);
+ line_angle = pd->line_angle;
if (pd->t_st)
{
- if (pd->line_angle >= 0.0)
+ if ((line_angle > 0.0) || EINA_DBL_EQ(line_angle, 0.0))
{
double line_distance_tolerance, line_angular_tolerance;
- double a = fabs(angle - pd->line_angle);
+ double a = fabs(angle - line_angle);
double d = (tan(DEG2RAD(a))) * pd->line_length;
- val = efl_gesture_recognizer_config_get(obj, "glayer_line_distance_tolerance");
+ val = _recognizer_config_get(obj, "glayer_line_distance_tolerance");
if (val) eina_value_get(val, &line_distance_tolerance);
else line_distance_tolerance = 3.0;
- line_distance_tolerance *= rd->finger_size;
+ line_distance_tolerance *= pd->finger_size;
- val = efl_gesture_recognizer_config_get(obj, "glayer_line_angular_tolerance");
+ val = _recognizer_config_get(obj, "glayer_line_angular_tolerance");
if (val) eina_value_get(val, &line_angular_tolerance);
else line_angular_tolerance = 20.0;
if ((d > line_distance_tolerance) ||
(a > line_angular_tolerance))
{
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Flick_Data));
+ _reset_recognizer(pd);
if (touch_up) rd->continues = EINA_FALSE;
- return EFL_GESTURE_CANCEL;
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
}
/* We may finish line if momentum is zero */
@@ -246,39 +240,38 @@ _efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_recognize(Eo
{
/* This is for continues-gesture */
/* Finish line on zero momentum for continues gesture */
- if ((!fd->momentum.x) && (!fd->momentum.y))
- pd->t_end = efl_gesture_touch_cur_timestamp_get(event);
+ if (EINA_DBL_EQ(fd->momentum.x, 0) && EINA_DBL_EQ(fd->momentum.y, 0))
+ pd->t_end = efl_gesture_touch_current_timestamp_get(event);
}
}
else
{
double line_min_length;
- val = efl_gesture_recognizer_config_get(obj, "glayer_line_min_length");
+ val = _recognizer_config_get(obj, "glayer_line_min_length");
if (val) eina_value_get(val, &line_min_length);
else line_min_length = 1.0;
- line_min_length *= rd->finger_size;
+ line_min_length *= pd->finger_size;
if (pd->line_length >= line_min_length)
- fd->angle = pd->line_angle = angle;
-
+ line_angle = fd->angle = pd->line_angle = angle;
}
if (pd->t_end)
{
- if (pd->line_angle < 0.0)
+ if (line_angle < 0.0)
{
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Flick_Data));
+ _reset_recognizer(pd);
if (touch_up) rd->continues = EINA_FALSE;
- return EFL_GESTURE_CANCEL;
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
}
}
}
- unsigned int tm_end = efl_gesture_touch_cur_timestamp_get(event);
+ unsigned int tm_end = efl_gesture_touch_current_timestamp_get(event);
if (pd->t_end)
{
if (pd->t_end < tm_end)
@@ -286,62 +279,66 @@ _efl_canvas_gesture_recognizer_flick_efl_canvas_gesture_recognizer_recognize(Eo
}
unsigned int time_limit_ms;
- val = efl_gesture_recognizer_config_get(obj, "glayer_flick_time_limit_ms");
+ val = _recognizer_config_get(obj, "glayer_flick_time_limit_ms");
if (val) eina_value_get(val, &time_limit_ms);
else time_limit_ms = 120;
if ((tm_end - pd->t_st) > time_limit_ms)
- {
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Flick_Data));
+ {
+ _reset_recognizer(pd);
- if (touch_up) rd->continues = EINA_FALSE;
+ if (touch_up) rd->continues = EINA_FALSE;
- return EFL_GESTURE_CANCEL;
- }
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
switch (efl_gesture_touch_state_get(event))
{
- case EFL_GESTURE_TOUCH_BEGIN:
- case EFL_GESTURE_TOUCH_UPDATE:
- {
- if (pd->t_st)
- {
- if (glayer_continues_enable && pd->t_end)
- {
- result = EFL_GESTURE_FINISH;
- }
- else
- {
- result = EFL_GESTURE_TRIGGER;
- }
- }
- break;
- }
-
- case EFL_GESTURE_TOUCH_END:
- {
- if (!pd->t_st)
- {
- pd->touched = EINA_FALSE;
- rd->continues = EINA_FALSE;
-
- return EFL_GESTURE_CANCEL;
- }
- if (pd->t_st && pd->t_end)
- {
- rd->continues = EINA_FALSE;
-
- result = EFL_GESTURE_FINISH;
- }
-
- efl_gesture_hotspot_set(gesture, efl_gesture_touch_cur_point_get(event));
-
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Flick_Data));
-
- rd->continues = EINA_FALSE;
-
- break;
- }
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ fd->id = efl_gesture_touch_current_data_get(event)->id;
+ EINA_FALLTHROUGH;
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ {
+ if (fd->id == -1)
+ fd->id = efl_gesture_touch_current_data_get(event)->id;
+ if (pd->t_st)
+ {
+ if (glayer_continues_enable && pd->t_end)
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ }
+ else
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ }
+ }
+ break;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ if (!pd->t_st)
+ {
+ pd->touched = EINA_FALSE;
+ rd->continues = EINA_FALSE;
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ if (pd->t_st && pd->t_end)
+ {
+ rd->continues = EINA_FALSE;
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ }
+
+ efl_gesture_hotspot_set(gesture, efl_gesture_touch_current_point_get(event));
+
+ _reset_recognizer(pd);
+
+ rd->continues = EINA_FALSE;
+
+ break;
+ }
default:
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.eo
index 5f038f1a17..afb9cceb3e 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.eo
@@ -6,7 +6,7 @@ class @beta Efl.Canvas.Gesture_Recognizer_Flick extends Efl.Canvas.Gesture_Recog
]]
c_prefix: efl_gesture_recognizer_flick;
implements {
- Efl.Canvas.Gesture_Recognizer.add;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
Efl.Canvas.Gesture_Recognizer.recognize;
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.c
new file mode 100644
index 0000000000..e146c5acaf
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.c
@@ -0,0 +1,143 @@
+#include "efl_canvas_gesture_private.h"
+
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_LONG_PRESS_CLASS
+
+#define EFL_GESTURE_LONG_PRESS_TIME_OUT 1.2
+
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_long_press_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Long_Press_Data *pd EINA_UNUSED)
+{
+ return EFL_CANVAS_GESTURE_LONG_PRESS_CLASS;
+}
+
+EOLIAN static void
+_efl_canvas_gesture_recognizer_long_press_efl_object_destructor(Eo *obj,
+ Efl_Canvas_Gesture_Recognizer_Long_Press_Data *pd)
+{
+ if (pd->timeout)
+ ecore_timer_del(pd->timeout);
+
+ efl_destructor(efl_super(obj, MY_CLASS));
+}
+
+static Eina_Bool
+_long_press_timeout_cb(void *data)
+{
+ Efl_Canvas_Gesture_Recognizer_Long_Press_Data *pd = data;
+
+ /* FIXME: Needs to propagate this event back to evas! */
+ pd->is_timeout = EINA_TRUE;
+
+ efl_gesture_state_set(pd->gesture, EFL_GESTURE_STATE_UPDATED);
+ efl_event_callback_call(pd->target, EFL_EVENT_GESTURE_LONG_PRESS, pd->gesture);
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
+_efl_canvas_gesture_recognizer_long_press_efl_canvas_gesture_recognizer_recognize(Eo *obj,
+ Efl_Canvas_Gesture_Recognizer_Long_Press_Data *pd,
+ Efl_Canvas_Gesture *gesture,
+ Efl_Object *watched,
+ Efl_Canvas_Gesture_Touch *event)
+{
+ double length, start_timeout = pd->start_timeout; // Manhattan distance
+ double timeout = EFL_GESTURE_LONG_PRESS_TIME_OUT;
+ Eina_Position2D pos;
+ Eina_Vector2 dist;
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+
+ pd->target = watched;
+ pd->gesture = gesture;
+
+ if (!EINA_DBL_NONZERO(start_timeout))
+ {
+ double time;
+ Eina_Value *val = _recognizer_config_get(obj, "glayer_long_tap_start_timeout");
+
+ if (val)
+ {
+ eina_value_get(val, &time);
+ pd->start_timeout = timeout = time;
+ }
+ }
+ else
+ timeout = start_timeout;
+
+ switch (efl_gesture_touch_state_get(event))
+ {
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ {
+ pos = efl_gesture_touch_start_point_get(event);
+ efl_gesture_hotspot_set(gesture, pos);
+
+ if (pd->timeout)
+ {
+ ecore_timer_del(pd->timeout);
+ }
+ pd->timeout = ecore_timer_add(timeout,
+ _long_press_timeout_cb, pd);
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+
+ break;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ {
+ dist = efl_gesture_touch_distance(event, efl_gesture_touch_current_data_get(event)->id);
+ length = fabs(dist.x) + fabs(dist.y);
+
+ if ((_event_multi_touch_get(event)) || (length > pd->finger_size))
+ {
+ if (pd->timeout)
+ {
+ ecore_timer_del(pd->timeout);
+ pd->timeout = NULL;
+ }
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ else
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_MAYBE;
+ }
+
+ break;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ if (pd->timeout)
+ {
+ ecore_timer_del(pd->timeout);
+ pd->timeout = NULL;
+ }
+
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE &&
+ !_event_multi_touch_get(event))
+ {
+ dist = efl_gesture_touch_distance(event, efl_gesture_touch_current_data_get(event)->id);
+ length = fabs(dist.x) + fabs(dist.y);
+ if (length <= pd->finger_size && pd->is_timeout)
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ }
+ else
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ }
+
+ break;
+ }
+
+ default:
+
+ break;
+ }
+
+ return result;
+}
+
+#include "efl_canvas_gesture_recognizer_long_press.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.eo
new file mode 100644
index 0000000000..316b74d683
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_press.eo
@@ -0,0 +1,13 @@
+class @beta Efl.Canvas.Gesture_Recognizer_Long_Press extends Efl.Canvas.Gesture_Recognizer
+{
+ [[This is the recognizer for Long-tap gestures.
+ See @Efl.Canvas.Gesture_Long_Press and @Efl.Canvas.Gesture_Recognizer.
+ For internal use only.
+ ]]
+ c_prefix: efl_gesture_recognizer_long_press;
+ implements {
+ Efl.Object.destructor;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
+ Efl.Canvas.Gesture_Recognizer.recognize;
+ }
+}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c
deleted file mode 100644
index 8f6773588b..0000000000
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c
+++ /dev/null
@@ -1,176 +0,0 @@
-#include "efl_canvas_gesture_private.h"
-
-#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_LONG_TAP_CLASS
-
-#define EFL_GESTURE_LONG_TAP_TIME_OUT 1.2
-
-EOLIAN static Efl_Canvas_Gesture *
-_efl_canvas_gesture_recognizer_long_tap_efl_canvas_gesture_recognizer_add(Eo *obj,
- Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd EINA_UNUSED,
- Efl_Object *target EINA_UNUSED)
-{
- return efl_add(EFL_CANVAS_GESTURE_LONG_TAP_CLASS, obj);
-}
-
-EOLIAN static void
-_efl_canvas_gesture_recognizer_long_tap_efl_object_destructor(Eo *obj,
- Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd)
-{
- if (pd->timeout)
- ecore_timer_del(pd->timeout);
-
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-static Eina_Bool
-_long_tap_timeout_cb(void *data)
-{
- Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd = data;
-
- /* FIXME: Needs to propagate this event back to evas! */
- pd->is_timeout = EINA_TRUE;
-
- efl_gesture_state_set(pd->gesture, EFL_GESTURE_UPDATED);
- efl_event_callback_call(pd->target, EFL_EVENT_GESTURE_LONG_TAP, pd->gesture);
-
- return ECORE_CALLBACK_RENEW;
-}
-
-EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
-_efl_canvas_gesture_recognizer_long_tap_efl_canvas_gesture_recognizer_recognize(Eo *obj,
- Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd,
- Efl_Canvas_Gesture *gesture,
- Efl_Object *watched,
- Efl_Canvas_Gesture_Touch *event)
-{
- double length; // Manhattan distance
- double timeout = EFL_GESTURE_LONG_TAP_TIME_OUT;
- Eina_Position2D pos;
- Eina_Vector2 dist;
- Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_CANCEL;
- Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
-
- pd->target = watched;
- pd->gesture = gesture;
-
- if (!pd->start_timeout)
- {
- double time;
- Eina_Value *val = efl_gesture_recognizer_config_get(obj, "glayer_long_tap_start_timeout");
-
- if (val)
- {
- eina_value_get(val, &time);
- pd->start_timeout = timeout = time;
- }
- }
- else
- timeout = pd->start_timeout;
-
-
- switch (efl_gesture_touch_state_get(event))
- {
- case EFL_GESTURE_TOUCH_BEGIN:
- {
- pos = efl_gesture_touch_start_point_get(event);
- efl_gesture_hotspot_set(gesture, pos);
-
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- }
- pd->timeout = ecore_timer_add(timeout,
- _long_tap_timeout_cb, pd);
-
- result = EFL_GESTURE_TRIGGER;
-
- break;
- }
-
- case EFL_GESTURE_TOUCH_UPDATE:
- {
- dist = efl_gesture_touch_distance(event, 0);
- length = fabs(dist.x) + fabs(dist.y);
-
- if ((efl_gesture_touch_multi_touch_get(event)) || (length > rd->finger_size))
- {
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
-
- result = EFL_GESTURE_CANCEL;
- }
- else
- {
- result = EFL_GESTURE_MAYBE;
- }
-
- break;
- }
-
- case EFL_GESTURE_TOUCH_END:
- {
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
-
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE &&
- !efl_gesture_touch_multi_touch_get(event))
- {
- dist = efl_gesture_touch_distance(event, 0);
- length = fabs(dist.x) + fabs(dist.y);
- if (length <= rd->finger_size && pd->is_timeout)
- {
- result = EFL_GESTURE_FINISH;
- }
- else
- {
- result = EFL_GESTURE_CANCEL;
- }
- }
-
- break;
- }
-
- default:
-
- break;
- }
-
- return result;
-}
-
-EOLIAN static void
-_efl_canvas_gesture_recognizer_long_tap_efl_canvas_gesture_recognizer_reset(Eo *obj,
- Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd,
- Efl_Canvas_Gesture *gesture)
-{
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
- pd->is_timeout = EINA_FALSE;
- efl_gesture_recognizer_reset(efl_super(obj, MY_CLASS), gesture);
-}
-
-EOLIAN static double
-_efl_canvas_gesture_recognizer_long_tap_timeout_get(const Eo *obj EINA_UNUSED,
- Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd)
-{
- return pd->start_timeout;
-}
-
-EOLIAN static void
-_efl_canvas_gesture_recognizer_long_tap_timeout_set(Eo *obj EINA_UNUSED,
- Efl_Canvas_Gesture_Recognizer_Long_Tap_Data *pd,
- double time)
-{
- pd->start_timeout = time;
-}
-
-#include "efl_canvas_gesture_recognizer_long_tap.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.eo
deleted file mode 100644
index d18d2c236f..0000000000
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.eo
+++ /dev/null
@@ -1,26 +0,0 @@
-class @beta Efl.Canvas.Gesture_Recognizer_Long_Tap extends Efl.Canvas.Gesture_Recognizer
-{
- [[This is the recognizer for Long-tap gestures.
- See @Efl.Canvas.Gesture_Long_Tap and @Efl.Canvas.Gesture_Recognizer.
- For internal use only.
- ]]
- c_prefix: efl_gesture_recognizer_long_tap;
- methods {
- @property timeout {
- [[Minimum holding time to be recognized as a long tap.]]
- set {
- }
- get {
- }
- values {
- time: double; [[Time in seconds.]]
- }
- }
- }
- implements {
- Efl.Object.destructor;
- Efl.Canvas.Gesture_Recognizer.add;
- Efl.Canvas.Gesture_Recognizer.recognize;
- Efl.Canvas.Gesture_Recognizer.reset;
- }
-}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c
index 2e007cc0f9..64afe22a2d 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c
@@ -1,16 +1,16 @@
#include "efl_canvas_gesture_private.h"
-#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_MOMENTUM_CLASS
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_MOMENTUM_CLASS
-#define MOMENTUM_TIMEOUT 50
-#define THUMBSCROLL_FRICTION 0.95
+#define MOMENTUM_TIMEOUT 50
+#define THUMBSCROLL_FRICTION 0.95
#define THUMBSCROLL_MOMENTUM_THRESHOLD 100.0
-#define EFL_GESTURE_MINIMUM_MOMENTUM 0.001
+#define EFL_GESTURE_MINIMUM_MOMENTUM 0.001
-EOLIAN static Efl_Canvas_Gesture *
-_efl_canvas_gesture_recognizer_momentum_efl_canvas_gesture_recognizer_add(Eo *obj, Efl_Canvas_Gesture_Recognizer_Momentum_Data *pd EINA_UNUSED, Efl_Object *target EINA_UNUSED)
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_momentum_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Momentum_Data *pd EINA_UNUSED)
{
- return efl_add(EFL_CANVAS_GESTURE_MOMENTUM_CLASS, obj);
+ return EFL_CANVAS_GESTURE_MOMENTUM_CLASS;
}
static void
@@ -26,25 +26,25 @@ _momentum_set(Eo *obj,
Evas_Coord dy = v2.y - v1.y;
int dt = t2 - t1;
Eina_Value *tf, *tmt;
- double thumbscroll_friction, thumbscroll_momentum_threshold;
+ double thumbscroll_momentum_friction, thumbscroll_momentum_threshold;
if (dt > 0)
{
velx = (dx * 1000) / dt;
vely = (dy * 1000) / dt;
- }
+ }
vel = sqrt((velx * velx) + (vely * vely));
- tf = efl_gesture_recognizer_config_get(obj, "thumbscroll_friction");
- if (tf) eina_value_get(tf, &thumbscroll_friction);
- else thumbscroll_friction = THUMBSCROLL_FRICTION;
+ tf = _recognizer_config_get(obj, "thumbscroll_momentum_friction");
+ if (tf) eina_value_get(tf, &thumbscroll_momentum_friction);
+ else thumbscroll_momentum_friction = THUMBSCROLL_FRICTION;
- tmt = efl_gesture_recognizer_config_get(obj, "thumbscroll_momentum_threshold");
+ tmt = _recognizer_config_get(obj, "thumbscroll_momentum_threshold");
if (tmt) eina_value_get(tmt, &thumbscroll_momentum_threshold);
else thumbscroll_momentum_threshold = THUMBSCROLL_MOMENTUM_THRESHOLD;
- if ((thumbscroll_friction > 0.0) &&
+ if ((thumbscroll_momentum_friction > 0.0) &&
(vel > thumbscroll_momentum_threshold)) /* report
* momentum */
{
@@ -58,28 +58,19 @@ _momentum_set(Eo *obj,
}
}
-static int
-_direction_get(Evas_Coord xx1,
- Evas_Coord xx2)
-{
- if (xx2 < xx1) return -1;
- if (xx2 > xx1) return 1;
-
- return 0;
-}
-
EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
_efl_canvas_gesture_recognizer_momentum_efl_canvas_gesture_recognizer_recognize(Eo *obj,
- Efl_Canvas_Gesture_Recognizer_Momentum_Data *pd,
- Efl_Canvas_Gesture *gesture, Efl_Object *watched EINA_UNUSED,
- Efl_Canvas_Gesture_Touch *event)
+ Efl_Canvas_Gesture_Recognizer_Momentum_Data *pd,
+ Efl_Canvas_Gesture *gesture, Efl_Object *watched EINA_UNUSED,
+ Efl_Canvas_Gesture_Touch *event)
{
Eina_Value *val;
unsigned char glayer_continues_enable;
- Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_CANCEL;
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
Efl_Canvas_Gesture_Momentum_Data *md = efl_data_scope_get(gesture, EFL_CANVAS_GESTURE_MOMENTUM_CLASS);
- val = efl_gesture_recognizer_config_get(obj, "glayer_continues_enable");
+ val = _recognizer_config_get(obj, "glayer_continues_enable");
if (val) eina_value_get(val, &glayer_continues_enable);
else glayer_continues_enable = 1;
@@ -87,104 +78,152 @@ _efl_canvas_gesture_recognizer_momentum_efl_canvas_gesture_recognizer_recognize(
//It does not have any meanging of this gesture.
if (glayer_continues_enable && !pd->touched)
{
- pd->touched = EINA_TRUE;
-
- return EFL_GESTURE_IGNORE;
- }
+ if (efl_gesture_touch_state_get(event) != EFL_GESTURE_TOUCH_STATE_END)
+ {
+ /* guard against successive multi-touch cancels */
+ if (efl_gesture_touch_points_count_get(event) == 1)
+ {
+ pd->touched = EINA_TRUE;
+ rd->continues = EINA_TRUE;
+ md->id = -1;
+ }
+ }
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ if (pd->touched && (efl_gesture_touch_current_data_get(event)->action == EFL_POINTER_ACTION_DOWN))
+ {
+ /* a second finger was pressed at the same time-ish as the first: combine into same event */
+ if (efl_gesture_touch_points_count_get(event) > 1)
+ {
+ if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_touch_previous_data_get(event)->cur.timestamp < TAP_TOUCH_TIME_THRESHOLD)
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ else if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_timestamp_get(gesture) < TAP_TOUCH_TIME_THRESHOLD)
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ if (pd->t_st && (md->id != -1) && (md->id != efl_gesture_touch_current_data_get(event)->id))
+ {
+ int xdir, ydir;
+ const Efl_Gesture_Touch_Point_Data *data = efl_gesture_touch_current_data_get(event);
+ xdir = _direction_get(data->prev.pos.x, data->cur.pos.x);
+ ydir = _direction_get(data->prev.pos.y, data->cur.pos.y);
+ if ((xdir != pd->xdir) || (ydir != pd->ydir))
+ {
+ memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Momentum_Data));
+ rd->continues = EINA_FALSE;
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
switch (efl_gesture_touch_state_get(event))
{
- case EFL_GESTURE_TOUCH_BEGIN:
- case EFL_GESTURE_TOUCH_UPDATE:
- {
- if (!pd->t_st)
- {
- if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_BEGIN ||
- glayer_continues_enable)
- {
- pd->t_st = pd->t_end = efl_gesture_touch_cur_timestamp_get(event);
-
- pd->st_line = pd->end_line =
- efl_gesture_touch_start_point_get(event);
-
- efl_gesture_hotspot_set(gesture, pd->st_line);
-
- return EFL_GESTURE_TRIGGER;
- }
- }
-
- if ((efl_gesture_touch_cur_timestamp_get(event) - MOMENTUM_TIMEOUT) >
- pd->t_end)
- {
- pd->st_line = efl_gesture_touch_cur_point_get(event);
- pd->t_st = efl_gesture_touch_cur_timestamp_get(event);
- pd->xdir = pd->ydir = 0;
- }
- else
- {
- int xdir, ydir;
- Eina_Position2D cur_p = efl_gesture_touch_cur_point_get(event);
-
- xdir = _direction_get(pd->end_line.x, cur_p.x);
- ydir = _direction_get(pd->end_line.y, cur_p.y);
-
- if (xdir && (xdir != pd->xdir))
- {
- pd->st_line.x = pd->end_line.x;
- pd->t_st = pd->t_end;
- pd->xdir = xdir;
- }
-
- if (ydir && (ydir != pd->ydir))
- {
- pd->st_line.y = pd->end_line.y;
- pd->t_st = pd->t_end;
- pd->ydir = ydir;
- }
- }
-
- pd->end_line = efl_gesture_touch_cur_point_get(event);
- pd->t_end = efl_gesture_touch_cur_timestamp_get(event);
- efl_gesture_hotspot_set(gesture, pd->end_line);
-
- _momentum_set(obj, md, pd->st_line, efl_gesture_touch_cur_point_get(event),
- pd->t_st, efl_gesture_touch_cur_timestamp_get(event));
-
- result = EFL_GESTURE_TRIGGER;
-
- break;
- }
-
- case EFL_GESTURE_TOUCH_END:
- {
- if (!pd->t_st)
- {
- pd->touched = EINA_FALSE;
-
- return EFL_GESTURE_CANCEL;
- }
-
- if ((efl_gesture_touch_cur_timestamp_get(event) - MOMENTUM_TIMEOUT) > pd->t_end)
- {
- pd->st_line = efl_gesture_touch_cur_point_get(event);
- pd->t_st = efl_gesture_touch_cur_timestamp_get(event);
- pd->xdir = pd->ydir = 0;
- }
-
- pd->end_line = efl_gesture_touch_cur_point_get(event);
- pd->t_end = efl_gesture_touch_cur_timestamp_get(event);
- efl_gesture_hotspot_set(gesture, pd->end_line);
-
- if ((fabs(md->momentum.x) > EFL_GESTURE_MINIMUM_MOMENTUM) ||
- (fabs(md->momentum.y) > EFL_GESTURE_MINIMUM_MOMENTUM))
- result = EFL_GESTURE_FINISH;
- else
- result = EFL_GESTURE_CANCEL;
-
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Momentum_Data));
-
- break;
- }
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ {
+ if (!pd->t_st)
+ {
+ if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_BEGIN ||
+ glayer_continues_enable)
+ {
+
+ pd->t_st = pd->t_end = efl_gesture_touch_current_timestamp_get(event);
+
+ pd->st_line = pd->end_line =
+ efl_gesture_touch_start_point_get(event);
+
+ efl_gesture_hotspot_set(gesture, pd->st_line);
+ md->id = efl_gesture_touch_current_data_get(event)->id;
+ if (efl_gesture_touch_previous_data_get(event))
+ {
+ /* if multiple fingers are pressed simultaneously, start tracking the latest finger for gesture */
+ if (efl_gesture_touch_previous_data_get(event)->action == efl_gesture_touch_current_data_get(event)->action)
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ }
+ }
+
+ if ((efl_gesture_touch_current_timestamp_get(event) - MOMENTUM_TIMEOUT) >
+ pd->t_end)
+ {
+ pd->st_line = efl_gesture_touch_current_point_get(event);
+ pd->t_st = efl_gesture_touch_current_timestamp_get(event);
+ pd->xdir = pd->ydir = 0;
+ }
+ else
+ {
+ int xdir, ydir;
+ Eina_Position2D cur_p = efl_gesture_touch_current_point_get(event);
+
+ xdir = _direction_get(pd->end_line.x, cur_p.x);
+ ydir = _direction_get(pd->end_line.y, cur_p.y);
+
+ if (xdir && (xdir != pd->xdir))
+ {
+ pd->st_line.x = pd->end_line.x;
+ pd->t_st = pd->t_end;
+ pd->xdir = xdir;
+ }
+
+ if (ydir && (ydir != pd->ydir))
+ {
+ pd->st_line.y = pd->end_line.y;
+ pd->t_st = pd->t_end;
+ pd->ydir = ydir;
+ }
+ }
+
+ pd->end_line = efl_gesture_touch_current_point_get(event);
+ pd->t_end = efl_gesture_touch_current_timestamp_get(event);
+ efl_gesture_hotspot_set(gesture, pd->end_line);
+
+ _momentum_set(obj, md, pd->st_line, efl_gesture_touch_current_point_get(event),
+ pd->t_st, efl_gesture_touch_current_timestamp_get(event));
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+
+ break;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ Eina_Bool touched = !!efl_gesture_touch_points_count_get(event);
+ if (!pd->t_st)
+ {
+ Eina_Bool prev_touched = pd->touched;
+
+ rd->continues = pd->touched = touched;
+
+ if (prev_touched)
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+
+ if ((efl_gesture_touch_current_timestamp_get(event) - MOMENTUM_TIMEOUT) > pd->t_end)
+ {
+ pd->st_line = efl_gesture_touch_current_point_get(event);
+ pd->t_st = efl_gesture_touch_current_timestamp_get(event);
+ pd->xdir = pd->ydir = 0;
+ }
+
+ pd->end_line = efl_gesture_touch_current_point_get(event);
+ pd->t_end = efl_gesture_touch_current_timestamp_get(event);
+ rd->continues = touched;
+ efl_gesture_hotspot_set(gesture, pd->end_line);
+
+ if ((fabs(md->momentum.x) > EFL_GESTURE_MINIMUM_MOMENTUM) ||
+ (fabs(md->momentum.y) > EFL_GESTURE_MINIMUM_MOMENTUM))
+ result = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ else
+ result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+
+ memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Momentum_Data));
+ pd->touched = touched;
+
+ break;
+ }
default:
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.eo
index 1713fb4f68..6093fbdcbd 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.eo
@@ -6,7 +6,7 @@ class @beta Efl.Canvas.Gesture_Recognizer_Momentum extends Efl.Canvas.Gesture_Re
]]
c_prefix: efl_gesture_recognizer_momentum;
implements {
- Efl.Canvas.Gesture_Recognizer.add;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
Efl.Canvas.Gesture_Recognizer.recognize;
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.c
new file mode 100644
index 0000000000..97fa907767
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.c
@@ -0,0 +1,269 @@
+#include "efl_canvas_gesture_private.h"
+
+#define NEGATIVE_ANGLE (-1.0) /* Magic number */
+
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_ROTATE_CLASS
+
+static void
+_reset_recognizer(Efl_Canvas_Gesture_Recognizer_Rotate_Data *pd)
+{
+ memset(&pd->rotate_st, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ memset(&pd->rotate_st1, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ memset(&pd->rotate_mv, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ memset(&pd->rotate_mv1, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ pd->prev_momentum = 0;
+ pd->base_angle = 0;
+ pd->next_step = pd->accum_momentum = 0;
+}
+
+#define memset do not use memset to reset rotate data, use _reset_recognizer
+
+
+static void
+_rotate_properties_get(Efl_Canvas_Gesture_Recognizer_Rotate_Data *pd,
+ Efl_Canvas_Gesture_Rotate_Data *gd,
+ Evas_Coord xx1,
+ Evas_Coord yy1,
+ Evas_Coord xx2,
+ Evas_Coord yy2,
+ double *angle, Eina_Bool started)
+{
+ /* FIXME: Fix momentum computation, it's wrong */
+ double prev_angle = *angle;
+ int x, y;
+ gd->radius = _finger_gap_length_get(xx1, yy1, xx2, yy2, &x, &y) / 2;
+
+ *angle = _angle_get(xx1, yy1, xx2, yy2);
+
+ if (!started) /* Fingers are moving, compute momentum */
+ {
+ unsigned int tm_start =
+ (pd->rotate_st.cur.timestamp > pd->rotate_st1.cur.timestamp)
+ ? pd->rotate_st.cur.timestamp : pd->rotate_st1.cur.timestamp;
+ unsigned int tm_end =
+ (pd->rotate_mv.cur.timestamp > pd->rotate_mv1.cur.timestamp)
+ ? pd->rotate_mv.cur.timestamp : pd->rotate_mv1.cur.timestamp;
+
+ unsigned int tm_total = tm_end - tm_start;
+ if (tm_total) /* Momentum computed as:
+ accumulated rotation angle (deg) divided by time */
+ {
+ double m = 0;
+ if (((prev_angle < 90) && ((*angle) > 270)) ||
+ /* We circle passing ZERO point */
+ ((prev_angle > 270) && ((*angle) < 90)))
+ {
+ prev_angle = (*angle);
+ }
+ else m = prev_angle - (*angle);
+
+ pd->accum_momentum += m;
+
+ if ((tm_end - pd->prev_momentum_tm) < 100)
+ pd->prev_momentum += m;
+ else
+ {
+ if (fabs(pd->prev_momentum) < 0.002)
+ pd->accum_momentum = 0.0; /* reset momentum */
+
+ pd->prev_momentum = 0.0; /* Start again */
+ }
+
+ pd->prev_momentum_tm = tm_end;
+ gd->momentum = (pd->accum_momentum * 1000) / tm_total;
+ }
+ }
+ else
+ gd->momentum = 0;
+}
+
+static Eina_Bool
+_on_rotation_broke_tolerance(Efl_Canvas_Gesture_Recognizer_Rotate_Data *pd, Efl_Canvas_Gesture_Rotate_Data *gd)
+{
+ if (pd->base_angle < 0)
+ return EINA_FALSE; /* Angle has to be computed first */
+
+ if (pd->rotate_angular_tolerance < 0)
+ return EINA_TRUE;
+
+ double low = pd->base_angle - pd->rotate_angular_tolerance;
+ double high = pd->base_angle + pd->rotate_angular_tolerance;
+ double t = gd->angle;
+
+ if (low < 0)
+ {
+ low += 180;
+ high += 180;
+
+ if (t < 180)
+ t += 180;
+ else
+ t -= 180;
+ }
+
+ if (high > 360)
+ {
+ low -= 180;
+ high -= 180;
+
+ if (t < 180)
+ t += 180;
+ else
+ t -= 180;
+ }
+
+ if ((t < low) || (t > high)) /* This marks that rotation action has
+ * started */
+ {
+ pd->rotate_angular_tolerance = NEGATIVE_ANGLE;
+ pd->base_angle = gd->angle; /* Avoid jump in angle value */
+ return EINA_TRUE;
+ }
+
+ return EINA_FALSE;
+}
+
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_rotate_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Rotate_Data *pd EINA_UNUSED)
+{
+ return EFL_CANVAS_GESTURE_ROTATE_CLASS;
+}
+
+EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
+_efl_canvas_gesture_recognizer_rotate_efl_canvas_gesture_recognizer_recognize(Eo *obj,
+ Efl_Canvas_Gesture_Recognizer_Rotate_Data *pd,
+ Efl_Canvas_Gesture *gesture,
+ Efl_Object *watched,
+ Efl_Canvas_Gesture_Touch *event)
+{
+ Eina_Value *val;
+ unsigned char glayer_continues_enable;
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ Efl_Canvas_Gesture_Rotate_Data *gd = efl_data_scope_get(gesture, EFL_CANVAS_GESTURE_ROTATE_CLASS);
+ Efl_Canvas_Gesture_Touch_Data *td = efl_data_scope_get(event, EFL_CANVAS_GESTURE_TOUCH_CLASS);
+ Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+ const Efl_Gesture_Touch_Point_Data *p1 = efl_gesture_touch_data_get(event, 0);
+ const Efl_Gesture_Touch_Point_Data *p2 = efl_gesture_touch_data_get(event, 1);
+
+ //FIXME: Wheel rotate test first here.
+
+ val = _recognizer_config_get(obj, "glayer_continues_enable");
+ if (val) eina_value_get(val, &glayer_continues_enable);
+ else glayer_continues_enable = 1;
+
+ rd->continues = EINA_TRUE;
+
+ switch (efl_gesture_touch_state_get(event))
+ {
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ {
+ if ((!glayer_continues_enable) && (!pd->rotate_st.cur.timestamp))
+ {
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ EINA_FALLTHROUGH;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ {
+ if (td->touch_down > 2)
+ {
+ _reset_recognizer(pd);
+ if (efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_CANCELED)
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ if (td->touch_down == 1)
+ {
+ return EFL_GESTURE_RECOGNIZER_RESULT_MAYBE;
+ }
+
+ if (!pd->rotate_st.cur.timestamp) /* Now scan touched-devices list
+ * and find other finger */
+ {
+ if (!_event_multi_touch_get(event))
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ pd->base_angle = NEGATIVE_ANGLE;
+ val = _recognizer_config_get(obj, "glayer_rotate_angular_tolerance");
+ if (val) eina_value_get(val, &pd->rotate_angular_tolerance);
+ else pd->rotate_angular_tolerance = 2.0;
+
+ memcpy(&pd->rotate_st, p2, sizeof(Efl_Gesture_Touch_Point_Data));
+ memcpy(&pd->rotate_st1, p1, sizeof(Efl_Gesture_Touch_Point_Data));
+
+ memcpy(&pd->rotate_mv, p2, sizeof(Efl_Gesture_Touch_Point_Data));
+ memcpy(&pd->rotate_mv1, p1, sizeof(Efl_Gesture_Touch_Point_Data));
+
+ _rotate_properties_get(pd, gd,
+ pd->rotate_st.cur.pos.x, pd->rotate_st.cur.pos.y,
+ pd->rotate_st1.cur.pos.x, pd->rotate_st1.cur.pos.y,
+ &pd->base_angle, EINA_TRUE);
+ if ((efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_STARTED) &&
+ (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_UPDATED))
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+
+ if (p2->id == pd->rotate_mv.id)
+ memcpy(&pd->rotate_mv, p2, sizeof(Efl_Gesture_Touch_Point_Data));
+ else if (p2->id == pd->rotate_mv1.id)
+ memcpy(&pd->rotate_mv1, p2, sizeof(Efl_Gesture_Touch_Point_Data));
+
+ _rotate_properties_get(pd, gd,
+ pd->rotate_mv.cur.pos.x, pd->rotate_mv.cur.pos.y,
+ pd->rotate_mv1.cur.pos.x, pd->rotate_mv1.cur.pos.y,
+ &gd->angle, EINA_FALSE);
+
+ if (_on_rotation_broke_tolerance(pd, gd)) /* Rotation broke
+ * tolerance, report
+ * move */
+ {
+ double d = gd->angle - pd->next_step;
+
+ if (d < 0.0) d = (-d);
+
+ if (d >= pd->rotate_step)
+ {
+ pd->next_step = gd->angle;
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ }
+ }
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ /* no gesture was started, so no gesture should be detected */
+ if ((td->touch_down == 0) || (!pd->rotate_st.cur.timestamp))
+ {
+ rd->continues = EINA_FALSE;
+
+ _reset_recognizer(pd);
+ efl_gesture_manager_recognizer_cleanup(efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS), obj, watched);
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ _reset_recognizer(pd);
+ if (pd->rotate_angular_tolerance < 0)
+ {
+ return EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ }
+
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE)
+ {
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ }
+
+ default:
+
+ break;
+ }
+
+ return result;
+}
+
+#include "efl_canvas_gesture_recognizer_rotate.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.eo
new file mode 100644
index 0000000000..28291b3083
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_rotate.eo
@@ -0,0 +1,12 @@
+class @beta Efl.Canvas.Gesture_Recognizer_Rotate extends Efl.Canvas.Gesture_Recognizer
+{
+ [[This is the recognizer for Rotate gestures.
+ See @Efl.Canvas.Gesture_Rotate and @Efl.Canvas.Gesture_Recognizer.
+ For internal use only.
+ ]]
+ c_prefix: efl_gesture_recognizer_rotate;
+ implements {
+ Efl.Canvas.Gesture_Recognizer.type { get; }
+ Efl.Canvas.Gesture_Recognizer.recognize;
+ }
+}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c
index 8f53a0585a..f4c28879cb 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c
@@ -1,33 +1,31 @@
#include "efl_canvas_gesture_private.h"
-#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_TAP_CLASS
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_TAP_CLASS
//FIXME: It doesnt have matched config value.
// may using dobule tap timeout value?
-#define EFL_GESTURE_TAP_TIME_OUT 0.33
+#define EFL_GESTURE_RECOGNIZER_TYPE_TAP_TIME_OUT 0.33
-EOLIAN static Efl_Canvas_Gesture *
-_efl_canvas_gesture_recognizer_tap_efl_canvas_gesture_recognizer_add(Eo *obj,
- Efl_Canvas_Gesture_Recognizer_Tap_Data *pd EINA_UNUSED,
- Efl_Object *target EINA_UNUSED)
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_tap_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Tap_Data *pd EINA_UNUSED)
{
- return efl_add(EFL_CANVAS_GESTURE_TAP_CLASS, obj);
+ return EFL_CANVAS_GESTURE_TAP_CLASS;
}
static Eina_Bool
_tap_timeout_cb(void *data)
{
Efl_Canvas_Gesture_Recognizer_Tap_Data *pd = data;
+ pd->timeout = NULL;
- efl_gesture_state_set(pd->gesture, EFL_GESTURE_CANCELED);
+ efl_gesture_state_set(pd->gesture, EFL_GESTURE_STATE_CANCELED);
efl_event_callback_call(pd->target, EFL_EVENT_GESTURE_TAP, pd->gesture);
return ECORE_CALLBACK_CANCEL;
}
-
EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
-_efl_canvas_gesture_recognizer_tap_efl_canvas_gesture_recognizer_recognize(Eo *obj,
+_efl_canvas_gesture_recognizer_tap_efl_canvas_gesture_recognizer_recognize(Eo *obj EINA_UNUSED,
Efl_Canvas_Gesture_Recognizer_Tap_Data *pd,
Efl_Canvas_Gesture *gesture,
Efl_Object *watched,
@@ -36,53 +34,65 @@ _efl_canvas_gesture_recognizer_tap_efl_canvas_gesture_recognizer_recognize(Eo *o
double length;
Eina_Position2D pos;
Eina_Vector2 dist;
- Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_CANCEL;
- Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
pd->target = watched;
pd->gesture = gesture;
switch (efl_gesture_touch_state_get(event))
{
- case EFL_GESTURE_TOUCH_BEGIN:
- {
- pos = efl_gesture_touch_start_point_get(event);
- efl_gesture_hotspot_set(gesture, pos);
-
- if (pd->timeout)
- ecore_timer_del(pd->timeout);
- pd->timeout = ecore_timer_add(EFL_GESTURE_TAP_TIME_OUT, _tap_timeout_cb, pd);
-
- result = EFL_GESTURE_TRIGGER;
-
- break;
- }
-
- case EFL_GESTURE_TOUCH_UPDATE:
- case EFL_GESTURE_TOUCH_END:
- {
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
-
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE &&
- !efl_gesture_touch_multi_touch_get(event))
- {
- dist = efl_gesture_touch_distance(event, 0);
- length = fabs(dist.x) + fabs(dist.y);
- if (length <= rd->finger_size)
- {
- if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_END)
- result = EFL_GESTURE_FINISH;
- else
- result = EFL_GESTURE_TRIGGER;
- }
- }
-
- break;
- }
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ {
+new_tap:
+ pos = efl_gesture_touch_start_point_get(event);
+ efl_gesture_hotspot_set(gesture, pos);
+
+ if (pd->timeout)
+ ecore_timer_del(pd->timeout);
+ pd->timeout = ecore_timer_add(EFL_GESTURE_RECOGNIZER_TYPE_TAP_TIME_OUT, _tap_timeout_cb, pd);
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+
+ break;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ /* multi-touch */
+ if (efl_gesture_touch_current_data_get(event)->action == EFL_POINTER_ACTION_DOWN)
+ {
+ /* a second finger was pressed at the same time-ish as the first: combine into same event */
+ if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_timestamp_get(gesture) < TAP_TOUCH_TIME_THRESHOLD)
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ break;
+ }
+ /* another distinct touch occurred, treat this as a new touch */
+ goto new_tap;
+ }
+ EINA_FALLTHROUGH;
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ if (pd->timeout)
+ {
+ ecore_timer_del(pd->timeout);
+ pd->timeout = NULL;
+ }
+ if (_event_multi_touch_get(event)) return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE)
+ {
+ dist = efl_gesture_touch_distance(event, efl_gesture_touch_current_data_get(event)->id);
+ length = fabs(dist.x) + fabs(dist.y);
+ if (length <= pd->finger_size)
+ {
+ if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_END)
+ result = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ else
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ }
+ }
+
+ break;
+ }
default:
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.eo
index 26aeb83a4d..b951013c2a 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.eo
@@ -6,7 +6,7 @@ class @beta Efl.Canvas.Gesture_Recognizer_Tap extends Efl.Canvas.Gesture_Recogni
]]
c_prefix: efl_gesture_recognizer_tap;
implements {
- Efl.Canvas.Gesture_Recognizer.add;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
Efl.Canvas.Gesture_Recognizer.recognize;
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c
index cd54d45886..75cb3686b4 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c
@@ -1,13 +1,13 @@
#include "efl_canvas_gesture_private.h"
-#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_TRIPLE_TAP_CLASS
+#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_TRIPLE_TAP_CLASS
#define TAP_TIME_OUT 0.33
-EOLIAN static Efl_Canvas_Gesture *
-_efl_canvas_gesture_recognizer_triple_tap_efl_canvas_gesture_recognizer_add(Eo *obj, Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data *pd EINA_UNUSED, Efl_Object *target EINA_UNUSED)
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_triple_tap_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data *pd EINA_UNUSED)
{
- return efl_add(EFL_CANVAS_GESTURE_TRIPLE_TAP_CLASS, obj);
+ return EFL_CANVAS_GESTURE_TRIPLE_TAP_CLASS;
}
EOLIAN static void
@@ -23,16 +23,14 @@ _efl_canvas_gesture_recognizer_triple_tap_efl_object_destructor(Eo *obj,
static Eina_Bool
_tap_timeout_cb(void *data)
{
- Efl_Canvas_Gesture_Recognizer_Data *rd;
Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data *pd;
- rd = efl_data_scope_get(data, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
pd = efl_data_scope_get(data, EFL_CANVAS_GESTURE_RECOGNIZER_TRIPLE_TAP_CLASS);
- efl_gesture_state_set(pd->gesture, EFL_GESTURE_CANCELED);
+ efl_gesture_state_set(pd->gesture, EFL_GESTURE_STATE_CANCELED);
efl_event_callback_call(pd->target, EFL_EVENT_GESTURE_TRIPLE_TAP, pd->gesture);
- efl_gesture_manager_gesture_clean_up(rd->manager, pd->target, EFL_EVENT_GESTURE_TRIPLE_TAP);
+ efl_gesture_manager_recognizer_cleanup(efl_provider_find(data, EFL_CANVAS_GESTURE_MANAGER_CLASS), data, pd->target);
pd->timeout = NULL;
pd->tap_count = 0;
@@ -46,20 +44,19 @@ _efl_canvas_gesture_recognizer_triple_tap_efl_canvas_gesture_recognizer_recogniz
Efl_Canvas_Gesture *gesture, Efl_Object *watched,
Efl_Canvas_Gesture_Touch *event)
{
- double length;
+ double length, start_timeout = pd->start_timeout;
double timeout = TAP_TIME_OUT;
Eina_Position2D pos;
Eina_Vector2 dist;
- Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_CANCEL;
- Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
pd->target = watched;
pd->gesture = gesture;
- if (!pd->start_timeout)
+ if (!EINA_DBL_NONZERO(start_timeout))
{
double time;
- Eina_Value *val = efl_gesture_recognizer_config_get(obj, "glayer_doublee_tap_timeout");
+ Eina_Value *val = _recognizer_config_get(obj, "glayer_double_tap_timeout");
if (val)
{
@@ -68,86 +65,94 @@ _efl_canvas_gesture_recognizer_triple_tap_efl_canvas_gesture_recognizer_recogniz
}
}
else
- timeout = pd->start_timeout;
+ timeout = start_timeout;
switch (efl_gesture_touch_state_get(event))
{
- case EFL_GESTURE_TOUCH_BEGIN:
- {
- pos = efl_gesture_touch_start_point_get(event);
- efl_gesture_hotspot_set(gesture, pos);
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ {
+ pos = efl_gesture_touch_start_point_get(event);
+ efl_gesture_hotspot_set(gesture, pos);
- if (pd->timeout)
- ecore_timer_reset(pd->timeout);
- else
- pd->timeout = ecore_timer_add(timeout, _tap_timeout_cb, obj);
+ if (pd->timeout)
+ ecore_timer_reset(pd->timeout);
+ else
+ pd->timeout = ecore_timer_add(timeout, _tap_timeout_cb, obj);
- result = EFL_GESTURE_TRIGGER;
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
- break;
- }
+ break;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ {
+ /* multi-touch */
+ if (efl_gesture_touch_current_data_get(event)->action == EFL_POINTER_ACTION_DOWN)
+ {
+ /* a second finger was pressed at the same time-ish as the first: combine into same event */
+ if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_timestamp_get(gesture) < TAP_TOUCH_TIME_THRESHOLD)
+ {
+ result = EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ break;
+ }
+ }
+ result = EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
- case EFL_GESTURE_TOUCH_UPDATE:
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE &&
+ !_event_multi_touch_get(event))
{
- result = EFL_GESTURE_IGNORE;
+ dist = efl_gesture_touch_distance(event, efl_gesture_touch_current_data_get(event)->id);
+ length = fabs(dist.x) + fabs(dist.y);
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE &&
- !efl_gesture_touch_multi_touch_get(event))
+ if (length > pd->finger_size)
{
- dist = efl_gesture_touch_distance(event, 0);
- length = fabs(dist.x) + fabs(dist.y);
-
- if (length > rd->finger_size)
+ if (pd->timeout)
{
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
+ ecore_timer_del(pd->timeout);
+ pd->timeout = NULL;
+ }
- result = EFL_GESTURE_CANCEL;
+ result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
- pd->tap_count = 0;
- }
+ pd->tap_count = 0;
}
-
- break;
}
- case EFL_GESTURE_TOUCH_END:
- {
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE &&
- !efl_gesture_touch_multi_touch_get(event))
- {
- dist = efl_gesture_touch_distance(event, 0);
- length = fabs(dist.x) + fabs(dist.y);
+ break;
+ }
- if (length <= rd->finger_size)
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE &&
+ !_event_multi_touch_get(event))
+ {
+ if (efl_gesture_touch_previous_data_get(event))
+ {
+ Efl_Pointer_Action prev_act = efl_gesture_touch_previous_data_get(event)->action;
+ /* multi-touch */
+ if ((prev_act == EFL_POINTER_ACTION_UP) || (prev_act == EFL_POINTER_ACTION_CANCEL))
{
- pd->tap_count++;
- if (pd->tap_count < 3)
- {
- if (pd->timeout)
- ecore_timer_reset(pd->timeout);
-
- result = EFL_GESTURE_TRIGGER;
- }
- else
+ /* a second finger was pressed at the same time-ish as the first: combine into same event */
+ if (efl_gesture_touch_current_timestamp_get(event) - efl_gesture_timestamp_get(gesture) < TAP_TOUCH_TIME_THRESHOLD)
{
- if (pd->timeout)
- {
- ecore_timer_del(pd->timeout);
- pd->timeout = NULL;
- }
-
- if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_END)
- result = EFL_GESTURE_FINISH;
- else
- result = EFL_GESTURE_TRIGGER;
-
- pd->tap_count = 0;
+ result = EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ break;
}
}
+ }
+ dist = efl_gesture_touch_distance(event, efl_gesture_touch_current_data_get(event)->id);
+ length = fabs(dist.x) + fabs(dist.y);
+
+ if (length <= pd->finger_size)
+ {
+ pd->tap_count++;
+ if (pd->tap_count < 3)
+ {
+ if (pd->timeout)
+ ecore_timer_reset(pd->timeout);
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ }
else
{
if (pd->timeout)
@@ -156,15 +161,31 @@ _efl_canvas_gesture_recognizer_triple_tap_efl_canvas_gesture_recognizer_recogniz
pd->timeout = NULL;
}
- result = EFL_GESTURE_CANCEL;
+ if (efl_gesture_touch_state_get(event) == EFL_GESTURE_TOUCH_STATE_END)
+ result = EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ else
+ result = EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
pd->tap_count = 0;
}
}
+ else
+ {
+ if (pd->timeout)
+ {
+ ecore_timer_del(pd->timeout);
+ pd->timeout = NULL;
+ }
+
+ result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
- break;
+ pd->tap_count = 0;
+ }
}
+ break;
+ }
+
default:
break;
@@ -173,19 +194,4 @@ _efl_canvas_gesture_recognizer_triple_tap_efl_canvas_gesture_recognizer_recogniz
return result;
}
-EOLIAN static double
-_efl_canvas_gesture_recognizer_triple_tap_timeout_get(const Eo *obj EINA_UNUSED,
- Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data *pd)
-{
- return pd->start_timeout;
-}
-
-EOLIAN static void
-_efl_canvas_gesture_recognizer_triple_tap_timeout_set(Eo *obj EINA_UNUSED,
- Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data *pd,
- double time)
-{
- pd->start_timeout = time;
-}
-
#include "efl_canvas_gesture_recognizer_triple_tap.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.eo
index 99458938fa..baf2d71457 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.eo
@@ -5,21 +5,9 @@ class @beta Efl.Canvas.Gesture_Recognizer_Triple_Tap extends Efl.Canvas.Gesture_
For internal use only.
]]
c_prefix: efl_gesture_recognizer_triple_tap;
- methods {
- @property timeout {
- [[Minimum time between each consecutive tap to be recognized as a triple tap.]]
- set {
- }
- get {
- }
- values {
- time: double; [[Time in seconds.]]
- }
- }
- }
implements {
Efl.Object.destructor;
- Efl.Canvas.Gesture_Recognizer.add;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
Efl.Canvas.Gesture_Recognizer.recognize;
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c
index 0bd41f55b6..0a1d2e9a20 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c
@@ -2,57 +2,20 @@
#define MY_CLASS EFL_CANVAS_GESTURE_RECOGNIZER_ZOOM_CLASS
-static Evas_Coord
-_finger_gap_length_get(Evas_Coord xx1,
- Evas_Coord yy1,
- Evas_Coord xx2,
- Evas_Coord yy2,
- Evas_Coord *x,
- Evas_Coord *y)
+static void
+_reset_recognizer(Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd)
{
- double a, b, xx, yy, gap;
- xx = abs(xx2 - xx1);
- yy = abs(yy2 - yy1);
- gap = sqrt((xx * xx) + (yy * yy));
-
- /* START - Compute zoom center point */
- /* The triangle defined as follows:
- * B
- * / |
- * / |
- * gap / | a
- * / |
- * A-----C
- * b
- * http://en.wikipedia.org/wiki/Trigonometric_functions
- *************************************/
- if (((int)xx) && ((int)yy))
- {
- double A = atan((yy / xx));
- a = (Evas_Coord)((gap / 2) * sin(A));
- b = (Evas_Coord)((gap / 2) * cos(A));
- *x = (Evas_Coord)((xx2 > xx1) ? (xx1 + b) : (xx2 + b));
- *y = (Evas_Coord)((yy2 > yy1) ? (yy1 + a) : (yy2 + a));
- }
- else
- {
- if ((int)xx) /* horiz line, take half width */
- {
- *x = (Evas_Coord)((xx1 + xx2) / 2);
- *y = (Evas_Coord)(yy1);
- }
-
- if ((int)yy) /* vert line, take half width */
- {
- *x = (Evas_Coord)(xx1);
- *y = (Evas_Coord)((yy1 + yy2) / 2);
- }
- }
- /* END - Compute zoom center point */
-
- return (Evas_Coord)gap;
+ memset(&pd->zoom_st, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ memset(&pd->zoom_st1, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ memset(&pd->zoom_mv, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ memset(&pd->zoom_mv1, 0, sizeof(Efl_Gesture_Touch_Point_Data));
+ pd->zoom_base = 0;
+ pd->zoom_step = pd->next_step = pd->zoom_finger_factor = pd->zoom_distance_tolerance = 0;
+ pd->calc_temp = EINA_FALSE;
}
+#define memset do not use memset to reset zoom data, use _reset_recognizer
+
static double
_zoom_compute(Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd,
Efl_Canvas_Gesture_Zoom_Data *zd,
@@ -62,12 +25,12 @@ _zoom_compute(Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd,
Evas_Coord yy2,
double zoom_finger_factor)
{
- double rt = 1.0;
+ double rt = 1.0, zoom_distance_tolerance = pd->zoom_distance_tolerance;
//TODO: Enable below code if the zoom momentum is need
//unsigned int tm_end = (pd->zoom_mv.cur.timestamp > pd->zoom_mv1.cur.timestamp) ?
// pd->zoom_mv.cur.timestamp : pd->zoom_mv1.cur.timestamp;
- int x,y; //Hot spot
+ int x, y; //Hot spot
Evas_Coord diam = _finger_gap_length_get(xx1, yy1, xx2, yy2,
&x, &y);
@@ -79,8 +42,8 @@ _zoom_compute(Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd,
return zd->zoom;
}
- if (pd->zoom_distance_tolerance) /* zoom tolerance <> ZERO, means
- * zoom action NOT started yet */
+ if (EINA_DBL_NONZERO(zoom_distance_tolerance)) /* zoom tolerance <> ZERO, means
+ * zoom action NOT started yet */
{
/* avoid jump with zoom value when break tolerance */
if (diam < (pd->zoom_base - pd->zoom_distance_tolerance))
@@ -111,12 +74,10 @@ _zoom_compute(Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd,
return rt;
}
-EOLIAN static Efl_Canvas_Gesture *
-_efl_canvas_gesture_recognizer_zoom_efl_canvas_gesture_recognizer_add(Eo *obj,
- Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd EINA_UNUSED,
- Efl_Object *target EINA_UNUSED)
+EOLIAN static const Efl_Class *
+_efl_canvas_gesture_recognizer_zoom_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Recognizer_Zoom_Data *pd EINA_UNUSED)
{
- return efl_add(EFL_CANVAS_GESTURE_ZOOM_CLASS, obj);
+ return EFL_CANVAS_GESTURE_ZOOM_CLASS;
}
EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
@@ -126,147 +87,155 @@ _efl_canvas_gesture_recognizer_zoom_efl_canvas_gesture_recognizer_recognize(Eo *
Efl_Object *watched,
Efl_Canvas_Gesture_Touch *event)
{
- int id1 = 0;
- int id2 = 1;
Eina_Value *val;
unsigned char zoom_finger_enable;
unsigned char glayer_continues_enable;
- Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_CANCEL;
+ Efl_Canvas_Gesture_Recognizer_Result result = EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
Efl_Canvas_Gesture_Zoom_Data *zd = efl_data_scope_get(gesture, EFL_CANVAS_GESTURE_ZOOM_CLASS);
Efl_Canvas_Gesture_Touch_Data *td = efl_data_scope_get(event, EFL_CANVAS_GESTURE_TOUCH_CLASS);
Efl_Canvas_Gesture_Recognizer_Data *rd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_RECOGNIZER_CLASS);
+ double zoom_distance_tolerance = pd->zoom_distance_tolerance;
//FIXME: Wheel zoom test first here.
- val = efl_gesture_recognizer_config_get(obj, "glayer_continues_enable");
+ val = _recognizer_config_get(obj, "glayer_continues_enable");
if (val) eina_value_get(val, &glayer_continues_enable);
else glayer_continues_enable = 1;
- val = efl_gesture_recognizer_config_get(obj, "glayer_zoom_finger_enable");
+ val = _recognizer_config_get(obj, "glayer_zoom_finger_enable");
if (val) eina_value_get(val, &zoom_finger_enable);
else zoom_finger_enable = 1;
- val = efl_gesture_recognizer_config_get(obj, "glayer_zoom_finger_factor");
- if (val) eina_value_get(val, &pd->zoom_finger_factor);
+ val = _recognizer_config_get(obj, "glayer_zoom_finger_factor");
+ if (val) eina_value_get(val, &pd->zoom_finger_factor);
else pd->zoom_finger_factor = 1.0;
rd->continues = EINA_TRUE;
- if (!pd->zoom_distance_tolerance && !pd->calc_temp)
+ if (!EINA_DBL_NONZERO(zoom_distance_tolerance) && !pd->calc_temp)
{
pd->calc_temp = EINA_TRUE;
- val = efl_gesture_recognizer_config_get(obj, "glayer_zoom_distance_tolerance");
- if (val) eina_value_get(val, &pd->zoom_distance_tolerance);
+ val = _recognizer_config_get(obj, "glayer_zoom_distance_tolerance");
+ if (val) eina_value_get(val, &pd->zoom_distance_tolerance);
else pd->zoom_distance_tolerance = 1.0;
- pd->zoom_distance_tolerance *= rd->finger_size;
+ pd->zoom_distance_tolerance *= pd->finger_size;
}
switch (efl_gesture_touch_state_get(event))
{
- case EFL_GESTURE_TOUCH_UPDATE:
- {
- if ((!glayer_continues_enable) && (!pd->zoom_st.cur.timestamp))
- {
- return EFL_GESTURE_IGNORE;
- }
- EINA_FALLTHROUGH;
- }
- case EFL_GESTURE_TOUCH_BEGIN:
- {
- if (td->touch_down > 2)
- {
- return EFL_GESTURE_CANCEL;
- }
-
- if (!pd->zoom_st.cur.timestamp) /* Now scan touched-devices list
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ {
+ if ((!glayer_continues_enable) && (!pd->zoom_st.cur.timestamp))
+ {
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ EINA_FALLTHROUGH;
+ }
+
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ {
+ if (td->touch_down > 2)
+ {
+ _reset_recognizer(pd);
+ if (efl_gesture_state_get(gesture) == EFL_GESTURE_STATE_CANCELED)
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ if (td->touch_down == 1)
+ {
+ return EFL_GESTURE_RECOGNIZER_RESULT_MAYBE;
+ }
+
+ if (!pd->zoom_st.cur.timestamp) /* Now scan touched-devices list
* and find other finger */
- {
- if (!efl_gesture_touch_multi_touch_get(event))
- return EFL_GESTURE_IGNORE;
+ {
+ if (!_event_multi_touch_get(event))
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
- Pointer_Data *p1 = eina_hash_find(td->touch_points, &id1);
- Pointer_Data *p2 = eina_hash_find(td->touch_points, &id2);
+ const Efl_Gesture_Touch_Point_Data *p1 = efl_gesture_touch_data_get(event, 0);
+ const Efl_Gesture_Touch_Point_Data *p2 = efl_gesture_touch_data_get(event, 1);
- memcpy(&pd->zoom_st, p2, sizeof(Pointer_Data));
- memcpy(&pd->zoom_st1, p1, sizeof(Pointer_Data));
+ memcpy(&pd->zoom_st, p2, sizeof(Efl_Gesture_Touch_Point_Data));
+ memcpy(&pd->zoom_st1, p1, sizeof(Efl_Gesture_Touch_Point_Data));
- memcpy(&pd->zoom_mv, p2, sizeof(Pointer_Data));
- memcpy(&pd->zoom_mv1, p1, sizeof(Pointer_Data));
+ memcpy(&pd->zoom_mv, p2, sizeof(Efl_Gesture_Touch_Point_Data));
+ memcpy(&pd->zoom_mv1, p1, sizeof(Efl_Gesture_Touch_Point_Data));
- int x,y; //Hot spot
- zd->zoom = 1.0;
- pd->zoom_base = _finger_gap_length_get(pd->zoom_st1.cur.pos.x,
- pd->zoom_st1.cur.pos.y,
- pd->zoom_st.cur.pos.x,
- pd->zoom_st.cur.pos.y,
- &x, &y);
+ int x, y; //Hot spot
+ zd->zoom = 1.0;
+ pd->zoom_base = _finger_gap_length_get(pd->zoom_st1.cur.pos.x,
+ pd->zoom_st1.cur.pos.y,
+ pd->zoom_st.cur.pos.x,
+ pd->zoom_st.cur.pos.y,
+ &x, &y);
- zd->radius = pd->zoom_base / 2.0;
+ zd->radius = pd->zoom_base / 2.0;
- if ((efl_gesture_state_get(gesture) != EFL_GESTURE_STARTED) &&
- (efl_gesture_state_get(gesture) != EFL_GESTURE_UPDATED))
- return EFL_GESTURE_TRIGGER;
+ if ((efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_STARTED) &&
+ (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_UPDATED))
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
- return EFL_GESTURE_CANCEL;
- }
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
- Pointer_Data *p2 = eina_hash_find(td->touch_points, &id2);
- if (p2->id == pd->zoom_mv.id)
- memcpy(&pd->zoom_mv, p2, sizeof(Pointer_Data));
- else if (p2->id == pd->zoom_mv1.id)
- memcpy(&pd->zoom_mv1, p2, sizeof(Pointer_Data));
+ const Efl_Gesture_Touch_Point_Data *p2 = efl_gesture_touch_data_get(event, 1);
+ if (p2->id == pd->zoom_mv.id)
+ memcpy(&pd->zoom_mv, p2, sizeof(Efl_Gesture_Touch_Point_Data));
+ else if (p2->id == pd->zoom_mv1.id)
+ memcpy(&pd->zoom_mv1, p2, sizeof(Efl_Gesture_Touch_Point_Data));
- zd->zoom = _zoom_compute(pd, zd, pd->zoom_mv.cur.pos.x,
- pd->zoom_mv.cur.pos.y, pd->zoom_mv1.cur.pos.x,
- pd->zoom_mv1.cur.pos.y, pd->zoom_finger_factor);
+ zd->zoom = _zoom_compute(pd, zd, pd->zoom_mv.cur.pos.x,
+ pd->zoom_mv.cur.pos.y, pd->zoom_mv1.cur.pos.x,
+ pd->zoom_mv1.cur.pos.y, pd->zoom_finger_factor);
+ if (!EINA_DBL_NONZERO(zoom_distance_tolerance))
+ {
+ double d = zd->zoom - pd->next_step;
- if (!pd->zoom_distance_tolerance)
- {
- double d = zd->zoom - pd->next_step;
+ if (d < 0.0) d = (-d);
- if (d < 0.0) d = (-d);
+ if (d >= pd->zoom_step)
+ {
+ pd->next_step = zd->zoom;
- if (d >= pd->zoom_step)
- {
- pd->next_step = zd->zoom;
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ }
+ }
- return EFL_GESTURE_TRIGGER;
- }
- }
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
- return EFL_GESTURE_IGNORE;
- }
- case EFL_GESTURE_TOUCH_END:
- {
- if (td->touch_down == 0)
- {
- rd->continues = EINA_FALSE;
+ case EFL_GESTURE_TOUCH_STATE_END:
+ {
+ /* no gesture was started, so no gesture should be detected */
+ if ((td->touch_down == 0) || (!pd->zoom_st.cur.timestamp))
+ {
+ rd->continues = EINA_FALSE;
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Zoom_Data));
- efl_gesture_manager_gesture_clean_up(rd->manager, watched, EFL_EVENT_GESTURE_ZOOM);
+ _reset_recognizer(pd);
+ efl_gesture_manager_recognizer_cleanup(efl_provider_find(obj, EFL_CANVAS_GESTURE_MANAGER_CLASS), obj, watched);
- return EFL_GESTURE_IGNORE;
- }
- if ((pd->zoom_base) && (pd->zoom_distance_tolerance == 0))
- {
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Zoom_Data));
+ return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+ }
+ if ((pd->zoom_base) && EINA_DBL_EQ(pd->zoom_distance_tolerance, 0))
+ {
+ _reset_recognizer(pd);
- return EFL_GESTURE_FINISH;
- }
+ return EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ }
- if (efl_gesture_state_get(gesture) != EFL_GESTURE_NONE)
- {
- memset(pd, 0, sizeof(Efl_Canvas_Gesture_Recognizer_Zoom_Data));
+ if (efl_gesture_state_get(gesture) != EFL_GESTURE_STATE_NONE)
+ {
+ _reset_recognizer(pd);
- return EFL_GESTURE_CANCEL;
- }
- }
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+ }
+ }
default:
- break;
+ break;
}
return result;
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.eo b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.eo
index a07e112d87..8ada83abb3 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.eo
@@ -6,7 +6,7 @@ class @beta Efl.Canvas.Gesture_Recognizer_Zoom extends Efl.Canvas.Gesture_Recogn
]]
c_prefix: efl_gesture_recognizer_zoom;
implements {
- Efl.Canvas.Gesture_Recognizer.add;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
Efl.Canvas.Gesture_Recognizer.recognize;
}
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_rotate.c b/src/lib/evas/gesture/efl_canvas_gesture_rotate.c
new file mode 100644
index 0000000000..77351236f8
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_rotate.c
@@ -0,0 +1,17 @@
+#include "efl_canvas_gesture_private.h"
+
+#define MY_CLASS EFL_CANVAS_GESTURE_ROTATE_CLASS
+
+EOLIAN static unsigned int
+_efl_canvas_gesture_rotate_radius_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Rotate_Data *pd)
+{
+ return pd->radius;
+}
+
+EOLIAN static double
+_efl_canvas_gesture_rotate_angle_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Rotate_Data *pd)
+{
+ return pd->angle;
+}
+
+#include "efl_canvas_gesture_rotate.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_rotate.eo b/src/lib/evas/gesture/efl_canvas_gesture_rotate.eo
new file mode 100644
index 0000000000..8cd35f8661
--- /dev/null
+++ b/src/lib/evas/gesture/efl_canvas_gesture_rotate.eo
@@ -0,0 +1,28 @@
+class @beta Efl.Canvas.Gesture_Rotate extends Efl.Canvas.Gesture
+{
+ [[Rotate gesture class holding state information.
+ See @Efl.Canvas.Gesture to see what this state is and
+ @[Efl.Canvas.Gesture_Events.gesture,rotate] for a description of the Rotate gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
+ ]]
+ c_prefix: efl_gesture_rotate;
+ methods {
+ @property radius {
+ [[The current radius (i.e. the distance between the two fingers) of the gesture.]]
+ get {
+ }
+ values {
+ radius: uint; [[The radius value in pixels.]]
+ }
+ }
+ @property angle {
+ [[The current angle of rotation for this gesture.]]
+ get {
+ }
+ values {
+ rotate: double; [[The angle of the rotation. $[0.0] means no rotation has occurred.]]
+ }
+ }
+ }
+}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_tap.c
index d777bebba1..99ee591089 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_tap.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_tap.c
@@ -2,17 +2,4 @@
#define MY_CLASS EFL_CANVAS_GESTURE_TAP_CLASS
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_tap_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
-{
- Efl_Canvas_Gesture_Data *gd;
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
- gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
- gd->type = EFL_EVENT_GESTURE_TAP;
-
- return obj;
-}
-
#include "efl_canvas_gesture_tap.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_tap.eo
index 0e940608d3..bd33011e05 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_tap.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_tap.eo
@@ -2,11 +2,10 @@ class @beta Efl.Canvas.Gesture_Tap extends Efl.Canvas.Gesture
{
[[Tap gesture class holding state information.
See @Efl.Canvas.Gesture to see what this state is and
- @[Efl.Gesture.Events.gesture,tap] for a description of the Tap gesture.
+ @[Efl.Canvas.Gesture_Events.gesture,tap] for a description of the Tap gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
]]
data: null;
c_prefix: efl_gesture_tap;
- implements {
- Efl.Object.constructor;
- }
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_touch.c b/src/lib/evas/gesture/efl_canvas_gesture_touch.c
index bec99b7539..25325d952e 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_touch.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_touch.c
@@ -6,32 +6,30 @@
//that are directed to a particular object from the
//first finger down to the last finger up
-static void _hash_free_cb(Pointer_Data *point)
-{
- free(point);
-}
-
static inline void
_touch_points_reset(Efl_Canvas_Gesture_Touch_Data *pd)
{
- eina_hash_free(pd->touch_points);
- pd->touch_points = eina_hash_int32_new(EINA_FREE_CB(_hash_free_cb));
+ while (eina_array_count(pd->touch_points))
+ free(eina_array_pop(pd->touch_points));
pd->touch_down = 0;
- pd->state = EFL_GESTURE_TOUCH_UNKNOWN;
+ pd->prev_touch = pd->cur_touch = NULL;
+ pd->state = EFL_GESTURE_TOUCH_STATE_UNKNOWN;
}
EOLIAN static Efl_Object *
_efl_canvas_gesture_touch_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Touch_Data *pd)
{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- _touch_points_reset(pd);
- return obj;
+ pd->touch_points = eina_array_new(2);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->touch_points, NULL);
+ return efl_constructor(efl_super(obj, MY_CLASS));
}
EOLIAN static void
_efl_canvas_gesture_touch_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Touch_Data *pd)
{
- eina_hash_free(pd->touch_points);
+ while (eina_array_count(pd->touch_points))
+ free(eina_array_pop(pd->touch_points));
+ eina_array_free(pd->touch_points);
efl_destructor(efl_super(obj, MY_CLASS));
}
@@ -50,22 +48,22 @@ _efl_canvas_gesture_touch_point_record(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_T
Efl_Pointer_Action action = pointer_data->action;
Eina_Vector2 pos = pointer_data->cur;
- Pointer_Data *point = eina_hash_find(pd->touch_points, &id);
Eina_Position2D _pos = { pos.x, pos.y };
+ Efl_Gesture_Touch_Point_Data *point = NULL;
+
+ if (eina_array_count(pd->touch_points) >= (unsigned int)id + 1)
+ point = eina_array_data_get(pd->touch_points, id);
if (action == EFL_POINTER_ACTION_DOWN)
{
- pd->touch_down++;
- //TODO: Need to handle 2 or more case.
- if (pd->touch_down == 2)
- pd->multi_touch = EINA_TRUE;
+ if ((!point) || (!point->cur.pressed))
+ pd->touch_down++;
}
else if ((action == EFL_POINTER_ACTION_UP) ||
(action == EFL_POINTER_ACTION_CANCEL))
{
- pd->touch_down--;
- if (pd->multi_touch && pd->touch_down == 1)
- pd->multi_touch = EINA_FALSE;
+ if (point && point->cur.pressed)
+ pd->touch_down--;
}
if (pd->touch_down < 0) goto finished_touch;
@@ -80,36 +78,41 @@ _efl_canvas_gesture_touch_point_record(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_T
else
{
//New finger
- if (!id && (action != EFL_POINTER_ACTION_DOWN))
+ if (action != EFL_POINTER_ACTION_DOWN)
{
//Discard any other event
return;
}
- point = calloc(1, sizeof(Pointer_Data));
+
+ point = calloc(1, sizeof(Efl_Gesture_Touch_Point_Data));
if (!point) return;
point->start.pos = point->prev.pos = point->cur.pos = _pos;
point->start.timestamp = point->prev.timestamp = point->cur.timestamp = timestamp;
point->id = id;
- //Add to the hash
- eina_hash_add(pd->touch_points, &id, point);
- //FIXME: finger_list was broken
- if (id)
- pd->multi_touch = EINA_TRUE;
+ eina_array_push(pd->touch_points, point);
}
+ if (pd->cur_touch != point)
+ pd->prev_touch = pd->cur_touch;
+ pd->cur_touch = point;
point->action = action;
- if (!id && (action == EFL_POINTER_ACTION_DOWN))
+ if (action == EFL_POINTER_ACTION_DOWN)
{
- pd->state = EFL_GESTURE_TOUCH_BEGIN;
+ point->cur.pressed = EINA_TRUE;
+ if (!id)
+ pd->state = EFL_GESTURE_TOUCH_STATE_BEGIN;
+ else
+ pd->state = EFL_GESTURE_TOUCH_STATE_UPDATE;
}
- else if (action == EFL_POINTER_ACTION_UP)
+ else if (action == EFL_POINTER_ACTION_UP)
{
- pd->state = EFL_GESTURE_TOUCH_END;
+ point->cur.pressed = EINA_FALSE;
+ pd->state = EFL_GESTURE_TOUCH_STATE_END;
}
else
{
- pd->state = EFL_GESTURE_TOUCH_UPDATE;
+ pd->state = EFL_GESTURE_TOUCH_STATE_UPDATE;
}
return;
@@ -117,17 +120,34 @@ finished_touch:
_touch_points_reset(pd);
}
-EOLIAN static Eina_Bool
-_efl_canvas_gesture_touch_multi_touch_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
+EOLIAN static unsigned int
+_efl_canvas_gesture_touch_touch_points_count_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
+{
+ return pd->touch_down;
+}
+
+EOLIAN static const Efl_Gesture_Touch_Point_Data *
+_efl_canvas_gesture_touch_current_data_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
{
- return pd->multi_touch;
+ return pd->cur_touch;
+}
+
+EOLIAN static const Efl_Gesture_Touch_Point_Data *
+_efl_canvas_gesture_touch_previous_data_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
+{
+ return pd->prev_touch;
+}
+
+EOLIAN static const Efl_Gesture_Touch_Point_Data *
+_efl_canvas_gesture_touch_data_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd, unsigned int id)
+{
+ return eina_array_count(pd->touch_points) >= id + 1 ? eina_array_data_get(pd->touch_points, id) : NULL;
}
EOLIAN static Eina_Position2D
-_efl_canvas_gesture_touch_start_point_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
+_efl_canvas_gesture_touch_start_point_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd EINA_UNUSED)
{
- int tool = 0;
- Pointer_Data *point = eina_hash_find(pd->touch_points, &tool);
+ const Efl_Gesture_Touch_Point_Data *point = efl_gesture_touch_data_get(obj, 0);
Eina_Position2D vec = { 0, 0 };
if (!point)
@@ -137,10 +157,9 @@ _efl_canvas_gesture_touch_start_point_get(const Eo *obj EINA_UNUSED, Efl_Canvas_
}
EOLIAN static Eina_Position2D
-_efl_canvas_gesture_touch_cur_point_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
+_efl_canvas_gesture_touch_current_point_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
{
- int tool = 0;
- Pointer_Data *point = eina_hash_find(pd->touch_points, &tool);
+ const Efl_Gesture_Touch_Point_Data *point = pd->cur_touch;
Eina_Position2D vec = { 0, 0 };
if (!point)
@@ -150,10 +169,9 @@ _efl_canvas_gesture_touch_cur_point_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Ge
}
EOLIAN static unsigned int
-_efl_canvas_gesture_touch_cur_timestamp_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
+_efl_canvas_gesture_touch_current_timestamp_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd)
{
- int tool = 0;
- Pointer_Data *point = eina_hash_find(pd->touch_points, &tool);
+ const Efl_Gesture_Touch_Point_Data *point = pd->cur_touch;
if (!point)
return 0;
@@ -164,11 +182,10 @@ _efl_canvas_gesture_touch_cur_timestamp_get(const Eo *obj EINA_UNUSED, Efl_Canva
EOLIAN static Eina_Vector2
_efl_canvas_gesture_touch_delta(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd, int tool)
{
- Pointer_Data *point = eina_hash_find(pd->touch_points, &tool);
+ Efl_Gesture_Touch_Point_Data *point = eina_array_count(pd->touch_points) >= (unsigned)tool + 1 ? eina_array_data_get(pd->touch_points, tool) : NULL;
Eina_Vector2 vec = { 0, 0 };
- if (!point)
- return vec;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(point, vec);
Eina_Vector2 v1 = { point->cur.pos.x, point->cur.pos.y };
Eina_Vector2 v2 = { point->prev.pos.x, point->prev.pos.y };
@@ -180,11 +197,10 @@ _efl_canvas_gesture_touch_delta(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_To
EOLIAN static Eina_Vector2
_efl_canvas_gesture_touch_distance(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Touch_Data *pd, int tool)
{
- Pointer_Data *point = eina_hash_find(pd->touch_points, &tool);
+ Efl_Gesture_Touch_Point_Data *point = eina_array_count(pd->touch_points) >= (unsigned)tool + 1 ? eina_array_data_get(pd->touch_points, tool) : NULL;
Eina_Vector2 vec = { 0, 0 };
- if (!point)
- return vec;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(point, vec);
Eina_Vector2 v1 = { point->cur.pos.x, point->cur.pos.y };
Eina_Vector2 v2 = { point->start.pos.x, point->start.pos.y };
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_touch.eo b/src/lib/evas/gesture/efl_canvas_gesture_touch.eo
index 0425aa7fdc..94f633afc7 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_touch.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_touch.eo
@@ -1,5 +1,4 @@
import efl_canvas_gesture_types;
-import efl_input_types;
/* FIXME: This class lacks a lot of useful helpers. */
@@ -40,24 +39,26 @@ class @beta Efl.Canvas.Gesture_Touch extends Efl.Object
pos: Eina.Position2D; [[The start position.]]
}
}
- @property cur_point {
+ @property current_point {
[[Returns the current touch point.]]
get {}
values {
pos: Eina.Position2D; [[The current position.]]
}
}
- @property cur_timestamp {
+ @property current_timestamp {
[[Returns the timestamp.]]
get {}
values {
time: uint; [[The timestamp.]]
}
}
- @property multi_touch {
- [[This property tells if the event is multi touch.]]
+ @property touch_points_count {
+ [[This provides the number of touch points active.]]
get {
- return: bool; [[returns $true if its a multi touch]]
+ }
+ values {
+ touch_count: uint; [[The number of active touch points.]]
}
}
@property state {
@@ -66,6 +67,29 @@ class @beta Efl.Canvas.Gesture_Touch extends Efl.Object
return : Efl.Canvas.Gesture_Touch_State; [[touch event state]]
}
}
+ @property current_data {
+ [[This property holds the data struct of the most recent touch point.]]
+ get {}
+ values {
+ data: const(Efl.Canvas.Gesture_Touch_Point_Data) @by_ref; [[The current data.]]
+ }
+ }
+ @property previous_data {
+ [[This property holds the data struct of the second-most recent touch point.
+ If there is only one touch point active, it will return NULL.
+ ]]
+ get {}
+ values {
+ data: const(Efl.Canvas.Gesture_Touch_Point_Data) @by_ref; [[The previous touch point's data.]]
+ }
+ }
+ data_get @const {
+ [[This fetches the data for a specified touch point.]]
+ params {
+ @in id: uint; [[The id of the touch point to return.]]
+ }
+ return: const(Efl.Canvas.Gesture_Touch_Point_Data) @by_ref; [[The specified data if it exists.]]
+ }
/* FIXME: finger_list was broken by design - TODO */
}
implements {
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.c b/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.c
index 5a6bb2f126..f698013318 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.c
@@ -2,17 +2,4 @@
#define MY_CLASS EFL_CANVAS_GESTURE_TRIPLE_TAP_CLASS
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_triple_tap_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
-{
- Efl_Canvas_Gesture_Data *gd;
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
- gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
- gd->type = EFL_EVENT_GESTURE_TRIPLE_TAP;
-
- return obj;
-}
-
#include "efl_canvas_gesture_triple_tap.eo.c"
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.eo b/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.eo
index abedc442d4..590148d530 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_triple_tap.eo
@@ -2,11 +2,10 @@ class @beta Efl.Canvas.Gesture_Triple_Tap extends Efl.Canvas.Gesture
{
[[Triple-tap gesture class holding state information.
See @Efl.Canvas.Gesture to see what this state is and
- @[Efl.Gesture.Events.gesture,triple_tap] for a description of the Triple-tap gesture.
+ @[Efl.Canvas.Gesture_Events.gesture,triple_tap] for a description of the Triple-tap gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
]]
data: null;
c_prefix: efl_gesture_triple_tap;
- implements {
- Efl.Object.constructor;
- }
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_types.eot b/src/lib/evas/gesture/efl_canvas_gesture_types.eot
index 96a2ff6293..dde4924154 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_types.eot
+++ b/src/lib/evas/gesture/efl_canvas_gesture_types.eot
@@ -1,46 +1,52 @@
+import eina_types;
+import efl_input_types;
+
enum @beta Efl.Canvas.Gesture_Touch_State
{
[[ This enum type describes the state of a touch event. ]]
- legacy: efl_gesture_touch;
- unknown = 0, [[Gesture Touch State unknown]]
- begin , [[First fingure touch down]]
- update, [[fingure touch update]]
- end, [[Last fingure touch up]]
+ legacy: efl_gesture_touch_state;
+ unknown = 0, [[Touch state is unset.]]
+ begin, [[First touch point has just been added.]]
+ update, [[A touch point position has updated or other touch points were added.]]
+ end, [[A touch point has been released.]]
}
enum @beta Efl.Canvas.Gesture_State
{
[[ This enum type describes the state of a gesture. ]]
- legacy: efl_gesture;
- none = 0, [[No gesture state]]
- started = 1, [[A continuous gesture has started.]]
- updated, [[A gesture continues.]]
- finished, [[A gesture has finished.]]
- canceled, [[A gesture was canceled.]]
+ legacy: efl_gesture_state;
+ none = 0, [[No gesture state.]]
+ started = 1, [[A gesture has started.]]
+ updated, [[A gesture has triggered.]]
+ finished, [[A gesture has ended and has triggered.]]
+ canceled, [[A gesture has ended without triggering.]]
}
enum @beta Efl.Canvas.Gesture_Recognizer_Result
{
[[ This enum type describes the state of a gesture recognizer. ]]
- legacy: efl_gesture;
+ legacy: efl_gesture_recognizer_result;
ignore = 0x0001, [[The event does not change the state of the recognizer.]]
- maybe = 0x0002, [[The event changed the internal state of the recognizer, but it isn't clear yet if it is a gesture or not. The recognizer needs to filter more events to decide.]]
+ maybe = 0x0002, [[The event changed the internal state of the recognizer, but it isn't clear yet if it is a gesture or not. The recognizer needs to filter more events to decide.]]
trigger = 0x0004, [[The gesture has been triggered]]
- finish = 0x0008, [[The gesture has been finished successfully.]]
+ finish = 0x0008, [[The gesture has been finished successfully and the gesture triggered.]]
cancel = 0x0010, [[The event made it clear that it is not a gesture. If the gesture recognizer was in Triggered state before, then the gesture is canceled.]]
result_mask = 0x00ff, [[The gesture result mask]]
}
-enum @beta Efl.Canvas.Gesture_Recognizer_Type
-{
- [[ This enum type describes the state of a touch event. ]]
- legacy: efl_gesture;
- tap = 0,
- doubleTap,
- tripleTap,
- longTap,
- momentum,
- flick,
- zoom,
+struct @beta @c_name(Efl_Gesture_Touch_Point_Info) Efl.Canvas.Gesture_Touch_Point_Info {
+ [[This struct represents the underlying data of a touch point.]]
+ pos: Eina.Position2D; [[The canvas position of the touch point data.]]
+ pressed: bool; [[Whether this touch point is currently being pressed down.]]
+ timestamp: uint; [[The timestamp of the touch point data in milliseconds.]]
+}
+
+struct @beta @c_name(Efl_Gesture_Touch_Point_Data) Efl.Canvas.Gesture_Touch_Point_Data {
+ [[This struct represents the state of a touch point.]]
+ id: int; [[Touch id of the point, where the first point is $0.]]
+ action: Efl.Pointer.Action; [[The last event with this point.]]
+ start: Efl.Canvas.Gesture_Touch_Point_Info; [[The start data for the touch point.]]
+ prev: Efl.Canvas.Gesture_Touch_Point_Info; [[The previous data for the touch point.]]
+ cur: Efl.Canvas.Gesture_Touch_Point_Info; [[The current data for the touch point.]]
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_zoom.c b/src/lib/evas/gesture/efl_canvas_gesture_zoom.c
index 3ac4ffcbf4..8e7a635231 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_zoom.c
+++ b/src/lib/evas/gesture/efl_canvas_gesture_zoom.c
@@ -2,32 +2,14 @@
#define MY_CLASS EFL_CANVAS_GESTURE_ZOOM_CLASS
-EOLIAN static Efl_Object *
-_efl_canvas_gesture_zoom_efl_object_constructor(Eo *obj, Efl_Canvas_Gesture_Zoom_Data *pd EINA_UNUSED)
-{
- Efl_Canvas_Gesture_Data *gd;
-
- obj = efl_constructor(efl_super(obj, MY_CLASS));
- gd = efl_data_scope_get(obj, EFL_CANVAS_GESTURE_CLASS);
- gd->type = EFL_EVENT_GESTURE_ZOOM;
-
- return obj;
-}
-
-EOLIAN static void
-_efl_canvas_gesture_zoom_efl_object_destructor(Eo *obj, Efl_Canvas_Gesture_Zoom_Data *pd EINA_UNUSED)
-{
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
EOLIAN static double
-_efl_canvas_gesture_zoom_radius_get(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Zoom_Data *pd)
+_efl_canvas_gesture_zoom_radius_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Zoom_Data *pd)
{
return pd->radius;
}
EOLIAN static double
-_efl_canvas_gesture_zoom_zoom_get(Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Zoom_Data *pd)
+_efl_canvas_gesture_zoom_zoom_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Gesture_Zoom_Data *pd)
{
return pd->zoom;
}
diff --git a/src/lib/evas/gesture/efl_canvas_gesture_zoom.eo b/src/lib/evas/gesture/efl_canvas_gesture_zoom.eo
index c41610bf77..5642da7b17 100644
--- a/src/lib/evas/gesture/efl_canvas_gesture_zoom.eo
+++ b/src/lib/evas/gesture/efl_canvas_gesture_zoom.eo
@@ -2,24 +2,30 @@ class @beta Efl.Canvas.Gesture_Zoom extends Efl.Canvas.Gesture
{
[[Zoom gesture class holding state information.
See @Efl.Canvas.Gesture to see what this state is and
- @[Efl.Gesture.Events.gesture,zoom] for a description of the Zoom gesture.
+ @[Efl.Canvas.Gesture_Events.gesture,zoom] for a description of the Zoom gesture.
+
+ Application developers receive these objects inside a gesture event and do not typically need to create their own.
]]
c_prefix: efl_gesture_zoom;
methods {
- radius_get {
- [[Gets the current radius (i.e. the distance between the two fingers) of the gesture.]]
- return: double; [[The radius value in pixels.]]
+ @property radius {
+ [[The current radius (i.e. the distance between the two fingers) of the gesture.]]
+ get {
+ }
+ values {
+ radius: double; [[The radius value in pixels.]]
+ }
}
- zoom_get {
- [[Gets the current zoom value of the gesture. When the gesture begins, the finger
+ @property zoom {
+ [[The current zoom value of the gesture. When the gesture begins, the finger
distance is recorded. When the distance becomes greater than the initial one, a
zoom value greater than $[1.0] is reported. When it becomes smaller, a zoom value
lesser than $[1.0] is reported.]]
- return: double; [[The zoom value. $[1.0] means no zoom.]]
+ get {
+ }
+ values {
+ zoom: double; [[The zoom value. $[1.0] means no zoom.]]
+ }
}
}
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
}
diff --git a/src/lib/evas/gesture/meson.build b/src/lib/evas/gesture/meson.build
index 9854e6f94d..bc761d4674 100644
--- a/src/lib/evas/gesture/meson.build
+++ b/src/lib/evas/gesture/meson.build
@@ -4,20 +4,24 @@ pub_eo_files = [
'efl_canvas_gesture_tap.eo',
'efl_canvas_gesture_double_tap.eo',
'efl_canvas_gesture_triple_tap.eo',
- 'efl_canvas_gesture_long_tap.eo',
+ 'efl_canvas_gesture_long_press.eo',
'efl_canvas_gesture_momentum.eo',
'efl_canvas_gesture_flick.eo',
+ 'efl_canvas_gesture_rotate.eo',
'efl_canvas_gesture_zoom.eo',
+ 'efl_canvas_gesture_custom.eo',
'efl_canvas_gesture_recognizer.eo',
'efl_canvas_gesture_recognizer_tap.eo',
'efl_canvas_gesture_recognizer_double_tap.eo',
'efl_canvas_gesture_recognizer_triple_tap.eo',
- 'efl_canvas_gesture_recognizer_long_tap.eo',
+ 'efl_canvas_gesture_recognizer_long_press.eo',
'efl_canvas_gesture_recognizer_momentum.eo',
'efl_canvas_gesture_recognizer_flick.eo',
+ 'efl_canvas_gesture_recognizer_rotate.eo',
'efl_canvas_gesture_recognizer_zoom.eo',
+ 'efl_canvas_gesture_recognizer_custom.eo',
'efl_canvas_gesture_manager.eo',
- 'efl_gesture_events.eo'
+ 'efl_canvas_gesture_events.eo'
]
evas_gesture_eo_files = pub_eo_files
@@ -34,6 +38,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-gchd', '@INPUT@'])
endforeach
@@ -57,6 +62,7 @@ foreach eo_file : pub_eo_types_files
command : eolian_gen + ['-I', meson.current_source_dir(), eolian_include_directories,
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-ghd', '@INPUT@'])
endforeach
@@ -66,18 +72,22 @@ evas_src += files([
'efl_canvas_gesture_tap.c',
'efl_canvas_gesture_double_tap.c',
'efl_canvas_gesture_triple_tap.c',
- 'efl_canvas_gesture_long_tap.c',
+ 'efl_canvas_gesture_long_press.c',
'efl_canvas_gesture_momentum.c',
'efl_canvas_gesture_flick.c',
+ 'efl_canvas_gesture_rotate.c',
'efl_canvas_gesture_zoom.c',
+ 'efl_canvas_gesture_custom.c',
'efl_canvas_gesture_recognizer.c',
'efl_canvas_gesture_recognizer_tap.c',
'efl_canvas_gesture_recognizer_double_tap.c',
'efl_canvas_gesture_recognizer_triple_tap.c',
- 'efl_canvas_gesture_recognizer_long_tap.c',
+ 'efl_canvas_gesture_recognizer_long_press.c',
'efl_canvas_gesture_recognizer_momentum.c',
'efl_canvas_gesture_recognizer_flick.c',
+ 'efl_canvas_gesture_recognizer_rotate.c',
'efl_canvas_gesture_recognizer_zoom.c',
+ 'efl_canvas_gesture_recognizer_custom.c',
'efl_canvas_gesture_manager.c',
])
diff --git a/src/lib/evas/include/evas_3d_utils.h b/src/lib/evas/include/evas_3d_utils.h
deleted file mode 100644
index 219032306c..0000000000
--- a/src/lib/evas/include/evas_3d_utils.h
+++ /dev/null
@@ -1,1698 +0,0 @@
-#ifndef EVAS_PRIVATE_H
-# error You shall not include this header directly
-#endif
-
-#include <math.h>
-#include <float.h>
-
-#define DEGREE_TO_RADIAN(x) (((x) * M_PI) / 180.0)
-#define EVAS_MATRIX_IS_IDENTITY 0x00000001
-#define MIN_DIFF 0.00000000001
-
-typedef struct _Evas_Color Evas_Color;
-typedef struct _Evas_Box2 Evas_Box2;
-typedef struct _Evas_Box3 Evas_Box3;
-typedef struct _Evas_Line3 Evas_Line3;
-typedef struct _Evas_Triangle3 Evas_Triangle3;
-typedef struct _Evas_Ray3 Evas_Ray3;
-typedef struct _Evas_Sphere Evas_Sphere;
-
-struct _Evas_Color
-{
- Evas_Real r;
- Evas_Real g;
- Evas_Real b;
- Evas_Real a;
-};
-
-struct _Evas_Box2
-{
- Eina_Vector2 p0;
- Eina_Vector2 p1;
-};
-
-struct _Evas_Box3
-{
- Eina_Vector3 p0;
- Eina_Vector3 p1;
-};
-
-struct _Evas_Line3
-{
- Eina_Vector3 point;
- Eina_Vector3 direction;
-};
-
-struct _Evas_Triangle3
-{
- Eina_Vector3 p0;
- Eina_Vector3 p1;
- Eina_Vector3 p2;
-};
-
-struct _Evas_Ray3
-{
- Eina_Vector3 org;
- Eina_Vector3 dir;
-};
-
-struct _Evas_Sphere
-{
- Eina_Vector3 center;
- Evas_Real radius;
-};
-
-static inline void
-evas_triangle3_set(Evas_Triangle3 *v, Eina_Vector3 *a, Eina_Vector3 *b, Eina_Vector3 *c)
-{
- eina_vector3_copy(&v->p0, a);
- eina_vector3_copy(&v->p1, b);
- eina_vector3_copy(&v->p2, c);
-}
-
-static inline Eina_Bool
-evas_triangle3_is_line(Evas_Triangle3 *v)
-{
- if (eina_vector3_equivalent(&v->p0, &v->p1) ||
- eina_vector3_equivalent(&v->p0, &v->p2) ||
- eina_vector3_equivalent(&v->p1, &v->p2))
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-convex_hull_triangle3_not_first_edje(Evas_Triangle3 *v, Eina_Vector3 *a, Eina_Vector3 *b)
-{
- if ((EINA_DBL_EQ(v->p1.x, a->x) && EINA_DBL_EQ(v->p1.y, a->y) && EINA_DBL_EQ(v->p1.z, a->z)) &&
- (EINA_DBL_EQ(v->p2.x, b->x) && EINA_DBL_EQ(v->p2.y, b->y) && EINA_DBL_EQ(v->p2.z, b->z)))
- return EINA_TRUE;
- else if ((EINA_DBL_EQ(v->p2.x, a->x) && EINA_DBL_EQ(v->p2.y, a->y) && EINA_DBL_EQ(v->p2.z, a->z)) &&
- (EINA_DBL_EQ(v->p1.x, b->x) && EINA_DBL_EQ(v->p1.y, b->y) && EINA_DBL_EQ(v->p1.z, b->z)))
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-convex_hull_triangle3_first_edje(Evas_Triangle3 *v, Eina_Vector3 *a, Eina_Vector3 *b)
-{
- if ((!EINA_FLT_EQ(v->p0.x, a->x) && !EINA_FLT_EQ(v->p0.y, a->y) &&
- !EINA_FLT_EQ(v->p0.z, a->z)) && (!EINA_FLT_EQ(v->p1.x, b->x) &&
- !EINA_FLT_EQ(v->p1.y, b->y) && !EINA_FLT_EQ(v->p1.z, b->z)))
- return EINA_TRUE;
- else if ((!EINA_FLT_EQ(v->p1.x, a->x) && !EINA_FLT_EQ(v->p1.y, a->y) &&
- !EINA_FLT_EQ(v->p1.z, a->z)) && (!EINA_FLT_EQ(v->p0.x, b->x) &&
- !EINA_FLT_EQ(v->p0.y, b->y) && !EINA_FLT_EQ(v->p0.z, b->z)))
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-convex_hull_triangle3_first_point(Evas_Triangle3 *v, Eina_Vector3 *a)
-{
- return (EINA_DBL_EQ(v->p0.x, a->x) && EINA_DBL_EQ(v->p0.y, a->y) && EINA_DBL_EQ(v->p0.z, a->z));
-}
-
-static inline Eina_Bool
-eina_vector3_equivalent_as_triangle(Eina_Vector3 *v0, Eina_Vector3 *v1, Eina_Vector3 *v2,
- Eina_Vector3 *w0, Eina_Vector3 *w1, Eina_Vector3 *w2)
-{
- if ((EINA_DBL_EQ(v0->x, w0->x) && EINA_DBL_EQ(v0->y, w0->y) && EINA_DBL_EQ(v0->z, w0->z)) &&
- (EINA_DBL_EQ(v1->x, w1->x) && EINA_DBL_EQ(v1->y, w1->y) && EINA_DBL_EQ(v1->z, w1->z)) &&
- (EINA_DBL_EQ(v2->x, w2->x) && EINA_DBL_EQ(v2->y, w2->y) && EINA_DBL_EQ(v2->z, w2->z)))
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-static inline Eina_Bool
-evas_triangle3_equivalent(Evas_Triangle3 *a, Evas_Triangle3 *b)
-{
- /* to compare two triangles there are six permutations
- to test because vertices are unordered */
- if (eina_vector3_equivalent_as_triangle(&a->p0, &a->p1, &a->p2, &b->p0, &b->p1, &b->p2) ||
- eina_vector3_equivalent_as_triangle(&a->p0, &a->p1, &a->p2, &b->p0, &b->p2, &b->p1) ||
- eina_vector3_equivalent_as_triangle(&a->p0, &a->p1, &a->p2, &b->p1, &b->p0, &b->p2) ||
- eina_vector3_equivalent_as_triangle(&a->p0, &a->p1, &a->p2, &b->p1, &b->p2, &b->p0) ||
- eina_vector3_equivalent_as_triangle(&a->p0, &a->p1, &a->p2, &b->p2, &b->p0, &b->p1) ||
- eina_vector3_equivalent_as_triangle(&a->p0, &a->p1, &a->p2, &b->p2, &b->p1, &b->p0))
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-static inline void
-evas_mat4_look_at_set(Eina_Matrix4 *m,
- const Eina_Vector3 *pos, const Eina_Vector3 *center, const Eina_Vector3 *up)
-{
- Eina_Vector3 x, y, z;
-
- eina_vector3_subtract(&z, pos, center);
- eina_vector3_normalize(&z, &z);
-
- eina_vector3_cross_product(&x, up, &z);
- eina_vector3_normalize(&x, &x);
-
- eina_vector3_cross_product(&y, &z, &x);
- eina_vector3_normalize(&y, &y);
-
- m->xx = x.x;
- m->xy = y.x;
- m->xz = z.x;
- m->xw = 0.0;
-
- m->yx = x.y;
- m->yy = y.y;
- m->yz = z.y;
- m->yw = 0.0;
-
- m->zx = x.z;
- m->zy = y.z;
- m->zz = z.z;
- m->zw = 0.0;
-
- m->wx = -eina_vector3_dot_product(&x, pos);
- m->wy = -eina_vector3_dot_product(&y, pos);
- m->wz = -eina_vector3_dot_product(&z, pos);
- m->ww = 1.0;
-}
-
-static inline void
-evas_mat4_frustum_set(Eina_Matrix4 *m,
- Evas_Real left, Evas_Real right, Evas_Real bottom, Evas_Real top,
- Evas_Real dnear, Evas_Real dfar)
-{
- Evas_Real w = right - left;
- Evas_Real h = top - bottom;
- Evas_Real depth = dnear - dfar;
- Evas_Real near_2 = 2.0f * dnear;
-
- m->xx = near_2 / w;
- m->xy = 0.0f;
- m->xz = 0.0f;
- m->xw = 0.0f;
-
- m->yx = 0.0f;
- m->yy = near_2 / h;
- m->yz = 0.0f;
- m->yw = 0.0f;
-
- m->zx = (right + left) / w;
- m->zy = (top + bottom) / h;
- m->zz = (dfar + dnear) / depth;
- m->zw = -1.0f;
-
- m->wx = 0.0f;
- m->wy = 0.0f;
- m->wz = near_2 * dfar / depth;
- m->ww = 0.0f;
-}
-
-static inline void
-evas_box2_set(Evas_Box2 *box, Evas_Real x0, Evas_Real y0, Evas_Real x1,
- Evas_Real y1)
-{
- box->p0.x = x0;
- box->p0.y = y0;
- box->p1.x = x1;
- box->p1.y = y1;
-}
-
-static inline void
-evas_box3_set(Evas_Box3 *box, Evas_Real x0, Evas_Real y0, Evas_Real z0,
- Evas_Real x1, Evas_Real y1, Evas_Real z1)
-{
- box->p0.x = x0;
- box->p0.y = y0;
- box->p0.z = z0;
- box->p1.x = x1;
- box->p1.y = y1;
- box->p1.z = z1;
-}
-
-static inline void
-evas_box3_empty_set(Evas_Box3 *box)
-{
- eina_vector3_set(&box->p0, 0.0, 0.0, 0.0);
- eina_vector3_set(&box->p1, 0.0, 0.0, 0.0);
-}
-
-static inline void
-evas_box3_copy(Evas_Box3 *dst, const Evas_Box3 *src)
-{
- eina_vector3_copy(&dst->p0, &src->p0);
- eina_vector3_copy(&dst->p1, &src->p1);
-}
-
-static inline void
-evas_box3_union(Evas_Box3 *out, const Evas_Box3 *a, const Evas_Box3 *b)
-{
- eina_vector3_set(&out->p0, MIN(a->p0.x, b->p0.x), MIN(a->p0.y, b->p0.y), MIN(a->p0.z, b->p0.z));
- eina_vector3_set(&out->p1, MAX(a->p1.x, b->p1.x), MAX(a->p1.y, b->p1.y), MAX(a->p1.z, b->p1.z));
-}
-
-static inline void
-evas_box3_transform(Evas_Box3 *out EINA_UNUSED, const Evas_Box3 *box EINA_UNUSED, const Eina_Matrix4 *mat EINA_UNUSED)
-{
- /* TODO: */
-}
-
-static inline void
-evas_mat4_position_get(const Eina_Matrix4 *matrix, Eina_Quaternion *position)
-{
- Eina_Quaternion pos;
-
- pos.x = 0.0;
- pos.y = 0.0;
- pos.z = 0.0;
- pos.w = 1.0;
-
- eina_quaternion_transform(position, &pos, matrix);
-}
-
-static inline void
-evas_mat4_direction_get(const Eina_Matrix4 *matrix, Eina_Vector3 *direction)
-{
- /* TODO: Check correctness. */
-
- Eina_Quaternion dir;
-
- dir.x = 0.0;
- dir.y = 0.0;
- dir.z = 1.0;
- dir.w = 1.0;
-
- eina_quaternion_transform(&dir, &dir, matrix);
-
- direction->x = dir.x;
- direction->y = dir.y;
- direction->z = dir.z;
-}
-
-static inline void
-evas_mat4_build(Eina_Matrix4 *out,
- const Eina_Vector3 *position, const Eina_Quaternion *orientation, const Eina_Vector3 *scale)
-{
- Eina_Matrix3 rot;
-
- eina_quaternion_rotation_matrix3_get(&rot, orientation);
-
- out->xx = scale->x * rot.xx;
- out->xy = scale->x * rot.xy;
- out->xz = scale->x * rot.xz;
- out->xw = 0.0;
-
- out->yx = scale->y * rot.yx;
- out->yy = scale->y * rot.yy;
- out->yz = scale->y * rot.yz;
- out->yw = 0.0;
-
- out->zx = scale->z * rot.zx;
- out->zy = scale->z * rot.zy;
- out->zz = scale->z * rot.zz;
- out->zw = 0.0;
-
- out->wx = position->x;
- out->wy = position->y;
- out->wz = position->z;
- out->ww = 1.0;
-}
-
-static inline void
-evas_mat4_inverse_build(Eina_Matrix4 *out, const Eina_Vector3 *position,
- const Eina_Quaternion *orientation, const Eina_Vector3 *scale)
-{
- Eina_Quaternion inv_rotation;
- Eina_Vector3 inv_scale;
- Eina_Vector3 inv_translate;
-
- Eina_Matrix3 rot;
-
- /* Inverse scale. */
- eina_vector3_set(&inv_scale, 1.0 / scale->x, 1.0 / scale->y, 1.0 / scale->z);
-
- /* Inverse rotation. */
- eina_quaternion_inverse(&inv_rotation, orientation);
-
- /* Inverse translation. */
- eina_vector3_negate(&inv_translate, position);
- eina_vector3_quaternion_rotate(&inv_translate, &inv_translate, &inv_rotation);
- eina_vector3_multiply(&inv_translate, &inv_translate, &inv_scale);
-
- /* Get 3x3 rotation matrix. */
- eina_quaternion_rotation_matrix3_get(&rot, &inv_rotation);
-
- out->xx = inv_scale.x * rot.xx;
- out->xy = inv_scale.x * rot.xy;
- out->xz = inv_scale.x * rot.xz;
- out->xw = 0.0;
-
- out->yx = inv_scale.y * rot.yx;
- out->yy = inv_scale.y * rot.yy;
- out->yz = inv_scale.y * rot.yz;
- out->yw = 0.0;
-
- out->zx = inv_scale.z * rot.zx;
- out->zy = inv_scale.z * rot.zy;
- out->zz = inv_scale.z * rot.zz;
- out->zw = 0.0;
-
- out->wx = inv_translate.x;
- out->wy = inv_translate.y;
- out->wz = inv_translate.z;
- out->ww = 1.0;
-}
-
-static inline void
-evas_color_set(Evas_Color *color, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
-{
- color->r = r;
- color->g = g;
- color->b = b;
- color->a = a;
-}
-
-static inline void
-evas_color_blend(Evas_Color *dst, const Evas_Color *c0, const Evas_Color *c1, Evas_Real w)
-{
- dst->r = c0->r * w + c1->r * (1.0 - w);
- dst->g = c0->g * w + c1->g * (1.0 - w);
- dst->b = c0->b * w + c1->b * (1.0 - w);
- dst->a = c0->a * w + c1->a * (1.0 - w);
-}
-
-static inline void
-evas_ray3_init(Evas_Ray3 *ray, Evas_Real x, Evas_Real y, const Eina_Matrix4 *mvp)
-{
- Eina_Matrix4 mat;
- Eina_Quaternion dnear, dfar;
-
- memset(&mat, 0, sizeof (mat));
-
- /* Get the matrix which transforms from normalized device coordinate to
- modeling coodrinate. */
- eina_matrix4_inverse(&mat, mvp);
-
- /* Transform near point. */
- dnear.x = x;
- dnear.y = y;
- dnear.z = -1.0;
- dnear.w = 1.0;
-
- eina_quaternion_transform(&dnear, &dnear, &mat);
-
- dnear.w = 1.0 / dnear.w;
- dnear.x *= dnear.w;
- dnear.y *= dnear.w;
- dnear.z *= dnear.w;
-
- eina_vector3_set(&ray->org, dnear.x, dnear.y, dnear.z);
-
- /* Transform far point. */
- dfar.x = x;
- dfar.y = y;
- dfar.z = 1.0;
- dfar.w = 1.0;
-
- eina_quaternion_transform(&dfar, &dfar, &mat);
-
- dfar.w = 1.0 / dfar.w;
- dfar.x *= dfar.w;
- dfar.y *= dfar.w;
- dfar.z *= dfar.w;
-
- eina_vector3_set(&ray->dir, dfar.x - dnear.x, dfar.y - dnear.y, dfar.z - dnear.z);
-}
-
-static inline Eina_Bool
-evas_box2_intersect_2d(const Evas_Box2 *box, const Eina_Vector2 *org, const Eina_Vector2 *dir)
-{
- Evas_Real t1, t2, t_near = FLT_MIN, t_far = FLT_MAX;
- /* ray intersects box if its begins in */
- if ((org->x >= box->p0.x) && (org->x <= box->p1.x) &&
- (org->y >= box->p0.y) && (org->y <= box->p1.y))
- {
- return EINA_TRUE;
- }
- /* minmax algorithm of ray and box intersection */
- if (!EINA_DBL_EQ(dir->x, 0.0) && !EINA_DBL_EQ(dir->y, 0.0))
- {
- t1 = (box->p0.x - org->x) / dir->x;
- t2 = (box->p1.x - org->x) / dir->x;
-
- if (t1 > t2)
- {
- Evas_Real tmp = t1;
- t1 = t2;
- t2 = tmp;
- }
-
- if (t1 > t_near) t_near = t1;
- if (t2 < t_far) t_far = t2;
-
- if (t_far < 0.0f)
- return EINA_FALSE;
-
- t1 = (box->p0.y - org->y) / dir->y;
- t2 = (box->p1.y - org->y) / dir->y;
-
- if (t1 > t2)
- {
- Evas_Real tmp = t1;
- t1 = t2;
- t2 = tmp;
- }
-
- if (t1 > t_near) t_near = t1;
- if (t2 < t_far) t_far = t2;
-
- if ((t_near > t_far) || (t_far < 0.0f))
- return EINA_FALSE;
- }
- /* case when ray is parallel to one of axes */
- else if (EINA_DBL_EQ(dir->x, 0.0))
- {
- if ((org->x < box->p0.x) && (org->x > box->p1.x))
- return EINA_FALSE;
- }
- else if (org->y < box->p0.y && org->y > box->p1.y)
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-static inline Evas_Real
-evas_determinant_3D(Evas_Real matrix[3][3])
-{
- return (matrix[0][0] * matrix[1][1] * matrix[2][2]) +
- (matrix[0][1] * matrix[1][2] * matrix[2][0]) +
- (matrix[0][2] * matrix[1][0] * matrix[2][1]) -
- (matrix[0][2] * matrix[1][1] * matrix[2][0]) -
- (matrix[0][1] * matrix[1][0] * matrix[2][2]) -
- (matrix[0][0] * matrix[1][2] * matrix[2][1]);
-}
-
-static inline Eina_Bool
-evas_box3_ray3_intersect(const Evas_Box3 *box, const Evas_Ray3 *ray)
-{
- Evas_Real t1, t2, t_near = FLT_MIN, t_far = FLT_MAX;
- Evas_Box2 box2;
- Eina_Vector2 org2;
- Eina_Vector2 dir2;
- Eina_Bool intersect = EINA_FALSE;
-
- /* ray intersects box if its begins in */
- if ((ray->org.x >= box->p0.x) && (ray->org.x <= box->p1.x) &&
- (ray->org.y >= box->p0.y) && (ray->org.y <= box->p1.y) &&
- (ray->org.z >= box->p0.z) && (ray->org.z <= box->p1.z))
- {
- return EINA_TRUE;
- }
- /* minmax algorithm of ray and box intersection */
- if (!EINA_DBL_EQ(ray->dir.x, 0.0) && !EINA_DBL_EQ(ray->dir.y, 0.0) && !EINA_DBL_EQ(ray->dir.z, 0.0))
- {
- t1 = (box->p0.x - ray->org.x) / ray->dir.x;
- t2 = (box->p1.x - ray->org.x) / ray->dir.x;
-
- if (t1 > t2)
- {
- Evas_Real tmp = t1;
- t1 = t2;
- t2 = tmp;
- }
-
- if (t1 > t_near) t_near = t1;
- if (t2 < t_far) t_far = t2;
-
- if (t_far < 0.0f)
- return EINA_FALSE;
-
- t1 = (box->p0.y - ray->org.y) / ray->dir.y;
- t2 = (box->p1.y - ray->org.y) / ray->dir.y;
-
- if (t1 > t2)
- {
- Evas_Real tmp = t1;
- t1 = t2;
- t2 = tmp;
- }
-
- if (t1 > t_near) t_near = t1;
- if (t2 < t_far) t_far = t2;
-
- if ((t_near > t_far) || (t_far < 0.0f))
- return EINA_FALSE;
-
- t1 = (box->p0.z - ray->org.z) / ray->dir.z;
- t2 = (box->p1.z - ray->org.z) / ray->dir.z;
-
- if (t1 > t2)
- {
- Evas_Real tmp = t1;
- t1 = t2;
- t2 = tmp;
- }
-
- if (t1 > t_near) t_near = t1;
- if (t2 < t_far) t_far = t2;
-
- if ((t_near > t_far) || (t_far < 0.0f))
- return EINA_FALSE;
-
- intersect = EINA_TRUE;
- }
- /* case when ray is parallel to one of axes */
- else
- {
- /* use two-dimensional version here */
- if (EINA_DBL_EQ(ray->dir.x, 0.0))
- {
- if ((ray->org.x < box->p0.x) || (ray->org.x > box->p1.x))
- return EINA_FALSE;
- else
- {
- eina_vector2_set(&org2, ray->org.y, ray->org.z);
- eina_vector2_set(&dir2, ray->dir.y, ray->dir.z);
- evas_box2_set(&box2, box->p0.y, box->p0.z, box->p1.y, box->p1.z);
- intersect = evas_box2_intersect_2d(&box2, &org2, &dir2);
- }
- }
-
- if (EINA_DBL_EQ(ray->dir.y, 0.0))
- {
- if ((ray->org.y < box->p0.y) || (ray->org.y > box->p1.y))
- return EINA_FALSE;
- else
- {
- eina_vector2_set(&org2, ray->org.x, ray->org.z);
- eina_vector2_set(&dir2, ray->dir.x, ray->dir.z);
- evas_box2_set(&box2, box->p0.x, box->p0.z, box->p1.x, box->p1.z);
- intersect = evas_box2_intersect_2d(&box2, &org2, &dir2);
- }
- }
-
- if (EINA_DBL_EQ(ray->dir.z, 0.0))
- {
- if (ray->org.z < box->p0.z || ray->org.z > box->p1.z)
- return EINA_FALSE;
- else
- {
- eina_vector2_set(&org2, ray->org.x, ray->org.y);
- eina_vector2_set(&dir2, ray->dir.x, ray->dir.y);
- evas_box2_set(&box2, box->p0.x, box->p0.y, box->p1.x, box->p1.y);
- intersect = evas_box2_intersect_2d(&box2, &org2, &dir2);
- }
- }
- }
-
- return intersect;
-}
-
-static inline Evas_Real
-evas_reciprocal_sqrt(Evas_Real x)
-{
- union {
- float f;
- long i;
- } u;
-
- u.f = x;
- u.i = 0x5f3759df - (u.i >> 1);
- return u.f * (1.5f - u.f * u.f * x * 0.5f);
-}
-
-static inline void
-evas_build_sphere(const Evas_Box3 *box, Evas_Sphere *sphere)
-{
- Eina_Vector3 tmp;
-
- eina_vector3_set(&sphere->center, (0.5 * (box->p0.x + box->p1.x)), (0.5 * (box->p0.y + box->p1.y)), (0.5 * (box->p0.z + box->p1.z)));
- eina_vector3_set(&tmp, sphere->center.x - box->p0.x, sphere->center.y - box->p0.y, sphere->center.z - box->p0.z);
-
- sphere->radius = sqrtf(eina_vector3_dot_product(&tmp, &tmp));
-}
-
-static inline void
-evas_sphere_empty_set(Evas_Sphere *dst)
-{
- dst->radius = 0;
- dst->center.x = 0;
- dst->center.y = 0;
- dst->center.z = 0;
-}
-
-static inline void
-evas_plane_normalize(Eina_Quaternion *plane)
-{
- Eina_Vector3 tmp;
- Evas_Real length;
- eina_vector3_set(&tmp, plane->x, plane->y, plane->z);
- length = eina_vector3_length_get(&tmp);
- plane->x = plane->x / length;
- plane->y = plane->y / length;
- plane->z = plane->z / length;
- plane->w = plane->w / length;
-}
-
-static inline Eina_Bool
-evas_intersection_line_of_two_plains(Evas_Line3 *line, Eina_Quaternion *plane1, Eina_Quaternion *plane2)
-{
- //TODO:parallel case
- Eina_Vector3 planes3D[2];
-
- eina_vector3_set(&planes3D[0], plane1->x, plane1->y, plane1->z);
- eina_vector3_set(&planes3D[1], plane2->x, plane2->y, plane2->z);
-
- eina_vector3_cross_product(&line->direction, &planes3D[0], &planes3D[1]);
-
-#define SOLVE_EQUATION(x, y, z) \
- line->point.x = 0; \
- line->point.y = (plane2->w * plane1->z - plane1->w * plane2->z) / line->direction.x; \
- line->point.z = (plane2->y * plane1->w - plane1->y * plane2->w) / line->direction.x;
-
- if (!EINA_DBL_EQ(line->direction.x, 0.0) && !EINA_DBL_EQ(plane1->z, 0.0))
- {
- SOLVE_EQUATION(x, y, z)
- }
- else if (!EINA_DBL_EQ(line->direction.y, 0.0) && !EINA_DBL_EQ(plane1->x, 0.0))
- {
- SOLVE_EQUATION(y, z, x)
- }
- else
- {
- SOLVE_EQUATION(z, x, y)
- }
-#undef SOLVE_EQUATION
-
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-evas_intersection_point_of_three_plains(Eina_Vector3 *point, Eina_Quaternion *plane1, Eina_Quaternion *plane2, Eina_Quaternion *plane3)
-{
- //TODO:parallel case
- int i;
- Evas_Real delta, deltax, deltay, deltaz;
- Evas_Real matrix_to_det[3][3];
- Eina_Quaternion planes[3];
-
- planes[0] = *plane1;
- planes[1] = *plane2;
- planes[2] = *plane3;
-
- for (i = 0; i < 3; i++)
- {
- matrix_to_det[0][i] = planes[i].x;
- matrix_to_det[1][i] = planes[i].y;
- matrix_to_det[2][i] = planes[i].z;
- }
- delta = evas_determinant_3D(matrix_to_det);
-
- for (i = 0; i < 3; i++)
- matrix_to_det[0][i] = planes[i].w;
- deltax = evas_determinant_3D(matrix_to_det);
-
- for (i = 0; i < 3; i++)
- {
- matrix_to_det[0][i] = planes[i].x;
- matrix_to_det[1][i] = planes[i].w;
- }
- deltay = evas_determinant_3D(matrix_to_det);
-
- for (i = 0; i < 3; i++)
- {
- matrix_to_det[1][i] = planes[i].y;
- matrix_to_det[2][i] = planes[i].w;
- }
- deltaz = evas_determinant_3D(matrix_to_det);
-
- eina_vector3_set(point, -deltax/delta, -deltay/delta, -deltaz/delta);
-
- return EINA_TRUE;
-}
-
-static inline Evas_Real
-evas_point_plane_distance(Eina_Vector3 *point, Eina_Quaternion *plane)
-{
- return plane->x * point->x + plane->y * point->y + plane->z * point->z + plane->w;
-}
-
-static inline Evas_Real
-evas_point_line_distance(Eina_Vector3 *point, Evas_Line3 *line)
-{
- Eina_Vector3 temp, sub;
-
- eina_vector3_subtract(&sub, point, &line->point);
- eina_vector3_cross_product(&temp, &sub, &line->direction);
-
- return eina_vector3_length_get(&temp) / eina_vector3_length_get(&line->direction);
-}
-
-static inline Eina_Bool
-evas_is_sphere_in_frustum(Evas_Sphere *bsphere, Eina_Quaternion *planes)
-{
- int i;
- Evas_Line3 line;
- Eina_Vector3 point, sub;
- Evas_Real distances[6] = {0};
- int intersected_plains[3];
- int intersected_plains_count = 0;
-
- for (i = 0; i < 6; i++)
- distances[i] = evas_point_plane_distance(&bsphere->center, &planes[i]);
-
- for (i = 0; i < 6; i++)
- {
- if (distances[i] <= -bsphere->radius)
- {
- return EINA_FALSE;
- }
- else if (distances[i] <= 0)
- {
- intersected_plains[intersected_plains_count] = i;
- intersected_plains_count++;
- }
- }
-
- switch (intersected_plains_count)
- {
- case 2:
- evas_intersection_line_of_two_plains(&line,
- &planes[intersected_plains[0]],
- &planes[intersected_plains[1]]);
- return (evas_point_line_distance(&bsphere->center, &line) <
- bsphere->radius) ? EINA_TRUE : EINA_FALSE;
- case 3:
- evas_intersection_point_of_three_plains(&point,
- &planes[intersected_plains[0]],
- &planes[intersected_plains[1]],
- &planes[intersected_plains[2]]);
- eina_vector3_subtract(&sub, &point, &bsphere->center);
- return (eina_vector3_length_get(&sub) < bsphere->radius) ? EINA_TRUE : EINA_FALSE;
- default:
- return EINA_TRUE;
- }
-}
-
-static inline Eina_Bool
-evas_is_point_in_frustum(Eina_Vector3 *point, Eina_Quaternion *planes)
-{
- int i;
- for (i = 0; i < 6; i++)
- if (evas_point_plane_distance(point, &planes[i]) <= 0) return EINA_FALSE;
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-evas_is_box_in_frustum(Evas_Box3 *box, Eina_Quaternion *planes)
-{
- int i;
- for (i = 0; i < 6; i++)
- {
- if (planes[i].x * box->p0.x + planes[i].y * box->p0.y + planes[i].z * box->p0.z + planes[i].w > 0)
- continue;
- if (planes[i].x * box->p1.x + planes[i].y * box->p0.y + planes[i].z * box->p0.z + planes[i].w > 0)
- continue;
- if (planes[i].x * box->p1.x + planes[i].y * box->p1.y + planes[i].z * box->p0.z + planes[i].w > 0)
- continue;
- if (planes[i].x * box->p0.x + planes[i].y * box->p1.y + planes[i].z * box->p0.z + planes[i].w > 0)
- continue;
- if (planes[i].x * box->p0.x + planes[i].y * box->p0.y + planes[i].z * box->p1.z + planes[i].w > 0)
- continue;
- if (planes[i].x * box->p1.x + planes[i].y * box->p0.y + planes[i].z * box->p1.z + planes[i].w > 0)
- continue;
- if (planes[i].x * box->p1.x + planes[i].y * box->p1.y + planes[i].z * box->p1.z + planes[i].w > 0)
- continue;
- if (planes[i].x * box->p0.x + planes[i].y * box->p1.y + planes[i].z * box->p1.z + planes[i].w > 0)
- continue;
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-static inline void
-evas_frustum_calculate(Eina_Quaternion *planes, Eina_Matrix4 *matrix_vp)
-{
- int i;
-
- eina_quaternion_set(&planes[0], matrix_vp->xw - matrix_vp->xx,
- matrix_vp->yw - matrix_vp->yx,
- matrix_vp->zw - matrix_vp->zx,
- matrix_vp->ww - matrix_vp->wx);
- eina_quaternion_set(&planes[1], matrix_vp->xw - matrix_vp->xx,
- matrix_vp->yw - matrix_vp->yx,
- matrix_vp->zw - matrix_vp->zx,
- matrix_vp->ww - matrix_vp->wx);
- eina_quaternion_set(&planes[2], matrix_vp->xw - matrix_vp->xx,
- matrix_vp->yw - matrix_vp->yx,
- matrix_vp->zw - matrix_vp->zx,
- matrix_vp->ww - matrix_vp->wx);
- eina_quaternion_set(&planes[3], matrix_vp->xw - matrix_vp->xx,
- matrix_vp->yw - matrix_vp->yx,
- matrix_vp->zw - matrix_vp->zx,
- matrix_vp->ww - matrix_vp->wx);
- eina_quaternion_set(&planes[4], matrix_vp->xw - matrix_vp->xx,
- matrix_vp->yw - matrix_vp->yx,
- matrix_vp->zw - matrix_vp->zx,
- matrix_vp->ww - matrix_vp->wx);
- eina_quaternion_set(&planes[5], matrix_vp->xw - matrix_vp->xx,
- matrix_vp->yw - matrix_vp->yx,
- matrix_vp->zw - matrix_vp->zx,
- matrix_vp->ww - matrix_vp->wx);
-
- for (i = 0; i < 6; i++)
- {
- evas_plane_normalize(&planes[i]);
- }
-}
-
-static inline Eina_Bool
-box_intersection_box(Evas_Box3 *v1, Evas_Box3 *v2)
-{
- if ((v1->p1.x < v2->p0.x) || (v1->p0.x > v2->p1.x)
- || (v1->p1.y < v2->p0.y) || (v1->p0.y > v2->p1.y)
- || (v1->p1.z < v2->p0.z) || (v1->p0.z > v2->p1.z))
- return EINA_FALSE;
- else
- return EINA_TRUE;
-}
-
-static inline void
-tangent_new_basis(Eina_Vector3 *out, Evas_Triangle3 *triangle,
- Eina_Vector2 *a, Eina_Vector2 *b, Eina_Vector2 *c)
-{
- Eina_Vector2 new1, new2;
- Eina_Vector3 old1, old2;
- eina_vector3_set(out, 0, 0, 0);
-
- eina_vector2_subtract(&new1, b, a);
- eina_vector2_subtract(&new2, c, a);
- eina_vector3_subtract(&old1, &(triangle->p1), &(triangle->p0));
- eina_vector3_subtract(&old2, &(triangle->p2), &(triangle->p0));
-
-
- /* calculation of new basis(in system coordinates of texturing) by solution of system of equations */
- if (!EINA_DBL_EQ(new2.y, 0.0))
- {
- eina_vector3_scale(&old2, &old2, (new1.y / new2.y));
- eina_vector2_scale(&new2, &new2, (new1.y / new2.y));
-
- eina_vector2_subtract(&new1, &new1, &new2);
- eina_vector3_subtract(&old1, &old1, &old2);
-
- eina_vector3_scale(out, &old1, 1 / new1.x);
- }
-
- else if (!EINA_DBL_EQ(new1.y, 0.0))
- {
- eina_vector3_scale(&old1, &old1, (new2.y / new1.y));
- eina_vector2_scale(&new1, &new1, (new2.y / new1.y));
-
- eina_vector2_subtract(&new2, &new2, &new1);
- eina_vector3_subtract(&old2, &old2, &old1);
-
- eina_vector3_scale(out, &old2, 1 / new2.x);
- }
-
- return;
-}
-
-static inline void
-convex_hull_vertex_set(Evas_Triangle3 *el, unsigned short int *vertex_count, float **vertex,
- unsigned short int **index, unsigned int k, int *leader, int coord)
-{
- int color_coords, normal_coords;
- Eina_Vector3 vect = {0, 0, 0};
- switch (coord)
- {
- case 0:
- vect = el->p0;
- break;
- case 1:
- vect = el->p1;
- break;
- case 2:
- vect = el->p2;
- break;
- }
-
- (*vertex_count)++;
- *vertex = (float*) realloc(*vertex, (10 * (*vertex_count)) * sizeof(float));
-
- (*vertex)[10 * (*vertex_count) - 10] = vect.x;
- (*vertex)[10 * (*vertex_count) - 9] = vect.y;
- (*vertex)[10 * (*vertex_count) - 8] = vect.z;
- /* set alpha channel */
- (*vertex)[10 * (*vertex_count) - 1] = 1.0;
- /* set color */
- for (color_coords = 2; color_coords < 5; color_coords++)
- (*vertex)[10 * (*vertex_count) - color_coords] = (float) rand() / RAND_MAX;
- /* set normal coords */
- for (normal_coords = 5; normal_coords < 8; normal_coords++)
- (*vertex)[10 * (*vertex_count) - normal_coords] = 1.0;
- (*index)[3 * k + coord] = *leader;
- (*leader)++;
-}
-
-static inline Evas_Triangle3
-convex_hull_first_tr_get(float *data, int count, int stride)
-{
- Evas_Triangle3 out;
-
- Eina_Vector3 triangle1;
- Eina_Vector3 triangle2, triangle2_candidate;
- Eina_Vector3 triangle3, triangle3_candidate;
- Eina_Vector3 first, diagonal, complanar1, complanar2, candidate;
- Eina_Quaternion normal_a, normal_b;
-
- Evas_Real cos = 0.0, new_cos = 0.0, sin = 0.0, new_sin = 0.0, cos_2d = 0.0, new_cos_2d = 0.0;
- int first_num = 0;
- int i = 0, j = 0;
-
- eina_vector3_set(&triangle1, data[0], data[1], data[2]);
-
- for (i = 1, j = stride; i < count; i++, j += stride)
- {
- if ((triangle1.z > data[j + 2]) ||
- ((EINA_FLT_EQ(triangle1.z, data[j + 2])) && (triangle1.y > data[j + 1])) ||
- ((EINA_FLT_EQ(triangle1.z, data[j + 2])) && (EINA_FLT_EQ(triangle1.y, data[j + 1])) && (triangle1.x > data[j])))
- {
- eina_vector3_set(&triangle1, data[j], data[j + 1], data[j + 2]);
- first_num = i;
- }
- }
-
- if (first_num)
- eina_vector3_set(&triangle2, data[0], data[1], data[2]);
- else
- eina_vector3_set(&triangle2, data[3], data[4], data[5]);
-
- eina_vector3_subtract(&diagonal, &triangle2, &triangle1);
- sin = fabs(triangle2.z - triangle1.z) / eina_vector3_length_get(&diagonal);
-
-#define COMPARE_ANGLES(trigonom, triangle, previous, big, little) \
- if (little > big + FLT_EPSILON) \
- { \
- trigonom = new_##trigonom; \
- cos_2d = new_cos_2d; \
- eina_vector3_set(&triangle, data[j], data[j + 1], data[j + 2]); \
- } \
- else if(!EINA_FLT_EQ(little, big) && \
- (eina_vector3_distance_get(&triangle##_candidate, &previous) > \
- eina_vector3_distance_get(&triangle, &previous))) \
- { \
- eina_vector3_set(&triangle, data[j], data[j + 1], data[j + 2]); \
- }
- eina_vector3_set(&complanar1, 1, 0, 0);
- for (i = 0, j = 0; i < count; i++, j += stride)
- {
- if (EINA_FLT_EQ(data[j], triangle1.x) ||
- EINA_FLT_EQ(data[j + 1], triangle1.y) ||
- EINA_FLT_EQ(data[j + 2], triangle1.z))
- {
- eina_vector3_set(&triangle2_candidate, data[j], data[j + 1], data[j + 2]);
- eina_vector3_subtract(&diagonal, &triangle2_candidate, &triangle1);
- new_sin = fabs(data[j + 2] - triangle1.z) / eina_vector3_length_get(&diagonal);
-
- if (sin > new_sin + FLT_EPSILON)
- {
- sin = new_sin;
- eina_vector3_set(&triangle2, data[j], data[j + 1], data[j + 2]);
- eina_vector3_subtract(&diagonal, &triangle2, &triangle1);
- cos_2d = eina_vector3_angle_get(&complanar1, &diagonal);
- }
- else if (!EINA_FLT_EQ(sin, new_sin))
- {
- eina_vector3_subtract(&diagonal, &triangle2_candidate, &triangle1);
- new_cos_2d = eina_vector3_angle_get(&complanar1, &diagonal);
-
- COMPARE_ANGLES(cos, triangle2, triangle1, cos_2d, new_cos_2d)
- }
- }
- }
-
- eina_vector3_set(&complanar1, triangle1.x + 1, triangle1.y, triangle1.z);
- eina_vector3_set(&complanar2, triangle1.x, triangle1.y + 1, triangle1.z);
- eina_vector3_plane_by_points(&normal_a, &triangle1, &complanar1, &complanar2);
-
- if (normal_a.z < 0)
- eina_quaternion_scale(&normal_a, &normal_a, -1);
-
- eina_vector3_set(&triangle3, data[0], data[1], data[2]);
-
- cos = -1.0;
- cos_2d = 1.0;
-
- for (i = 0, j = 0; i < count; i++, j += stride)
- {
- eina_vector3_set(&candidate, data[j], data[j + 1], data[j + 2]);
-
- if ((EINA_FLT_EQ(data[j], triangle1.x) ||
- EINA_FLT_EQ(data[j + 1], triangle1.y) ||
- EINA_FLT_EQ(data[j + 2], triangle1.z)) &&
- (EINA_FLT_EQ(data[j], triangle2.x) ||
- EINA_FLT_EQ(data[j + 1], triangle2.y) ||
- EINA_FLT_EQ(data[j + 2], triangle2.z)))
- {
- eina_vector3_plane_by_points(&normal_b, &triangle1, &candidate, &triangle2);
-
- if (normal_b.z < 0)
- eina_quaternion_scale(&normal_b, &normal_b, -1);
-
- new_cos = eina_quaternion_angle_plains(&normal_a, &normal_b);
-
- if (new_cos > cos + FLT_EPSILON)
- {
- eina_vector3_set(&triangle3_candidate, data[j], data[j + 1], data[j + 2]);
- eina_vector3_subtract(&first, &triangle2, &triangle1);
- eina_vector3_subtract(&diagonal, &triangle3, &triangle1);
- cos = new_cos;
- eina_vector3_set(&triangle3, data[j], data[j + 1], data[j + 2]);
- cos_2d = eina_vector3_angle_get(&diagonal, &first);
- }
- else if (!EINA_FLT_EQ(new_cos, cos))
- {
- eina_vector3_set(&triangle3_candidate, data[j], data[j + 1], data[j + 2]);
- eina_vector3_subtract(&first, &triangle1, &triangle2);
- eina_vector3_subtract(&diagonal, &triangle3_candidate, &triangle2);
- new_cos_2d = eina_vector3_angle_get(&first, &diagonal);
-
- COMPARE_ANGLES(cos, triangle3, triangle2, new_cos_2d, cos_2d)
- }
- }
- }
-
- evas_triangle3_set(&out, &triangle1, &triangle2, &triangle3);
-
-#undef COMPARE_ANGLES
- return out;
-}
-
-static inline void
-evas_convex_hull_get(float *data, int count, int stride, Eina_Inarray *vertex,
- Eina_Inarray *index)
-{
- Evas_Triangle3 first_elem, second_elem, *third_elem = NULL, *el = NULL;
-
- Eina_Vector3 *next = NULL, *best = NULL, *next_2d = NULL, *el_vec3 = NULL;
- Eina_Vector3 tmp1, tmp2;
- Eina_Quaternion normal_a, normal_b;
-
- Eina_Array arr_elems;
- Eina_Array arr_triangles;
- Eina_Array arr_candidates;
- Eina_Array arr_ch;
- Eina_Array_Iterator iterator;
-
- Evas_Real cos = 0.0, new_cos = 0.0, cos_2d = 0.0;
- float *found_vertex = NULL;
- int i = 0, j = 0, new_stride = 0, leader = 0;
- int if_two = 0, first_exist_twice = 0, second_exist_twice = 0;
- unsigned int k = 0;
- unsigned short int *found_index = NULL, index_count, vertex_count = 0;
-
- Eina_Bool exist1 = EINA_FALSE, pushed;
- Eina_Bool equivalent_triangle = EINA_FALSE, triangle_chain = EINA_FALSE;
- Eina_Bool on_plane = EINA_FALSE, right = EINA_FALSE;
-
- eina_array_step_set(&arr_elems, sizeof(Eina_Array), 1);
- eina_array_step_set(&arr_triangles, sizeof(Eina_Array), 1);
- eina_array_step_set(&arr_candidates, sizeof(Eina_Array), 1);
- eina_array_step_set(&arr_ch, sizeof(Eina_Array), 1);
-
- /* Finding of first triangle in convex hull */
- first_elem = convex_hull_first_tr_get(data, count, stride);
-
- eina_array_push(&arr_triangles, &first_elem);
- eina_array_push(&arr_elems, &first_elem);
-
- evas_triangle3_set(&second_elem, &first_elem.p1, &first_elem.p2, &first_elem.p0);
- eina_array_push(&arr_elems, &second_elem);
- eina_array_push(&arr_triangles, &second_elem);
-
- third_elem = malloc(sizeof(Evas_Triangle3));
- evas_triangle3_set(third_elem, &first_elem.p2, &first_elem.p0, &first_elem.p1);
- eina_array_push(&arr_elems, third_elem);
- eina_array_push(&arr_triangles, third_elem);
- eina_array_push(&arr_ch, third_elem);
-
- el = eina_array_data_get(&arr_elems, 0);
-
- /* arr_ellems is an array of triangles, in fact it is a queue of edjes
- because vertices in triangles are ordered, every edje in this queue
- should have a conjugate edje in some other triangle */
- while (eina_array_count(&arr_elems) > 0)
- {
- Evas_Triangle3 *new_elem1 = NULL, *new_elem2 = NULL;
-
- Evas_Triangle3 *elem = eina_array_pop(&arr_elems);
-
- cos = -1.0;
-
- /* searching of next triangle in convex hull as given conjugate edje
- and one new vertex, all vertices should be checked */
- for (i = 0, j = 0; i < count; i++, j += stride)
- {
- if ((EINA_FLT_EQ(elem->p0.x, data[j]) || EINA_FLT_EQ(elem->p0.y, data[j + 1]) ||
- EINA_FLT_EQ(elem->p0.z, data[j + 2])) && (EINA_FLT_EQ(elem->p1.x, data[j]) ||
- EINA_FLT_EQ(elem->p1.y, data[j + 1]) || EINA_FLT_EQ(elem->p1.z, data[j + 2])) &&
- (EINA_FLT_EQ(elem->p2.x, data[j]) || EINA_FLT_EQ(elem->p2.y, data[j + 1]) ||
- EINA_FLT_EQ(elem->p2.z, data[j + 2])))
- {
- next = malloc(sizeof(Eina_Vector3));
- eina_vector3_set(next, data[j], data[j + 1], data[j + 2]);
- pushed = EINA_FALSE;
-
- /* something like the dihedral angle between the triangles
- is a determining factor in searching the necessary points */
-
- eina_vector3_plane_by_points(&normal_a, &elem->p0, &elem->p1, &elem->p2);
- eina_vector3_plane_by_points(&normal_b, &elem->p0, &elem->p1, next);
-
- /* MIN_DIFF because vertices that belong to plain shouldn't be included */
- if (fabs(normal_a.x * data[j] + normal_a.y * data[j + 1] + normal_a.z * data[j + 2] + normal_a.w) < MIN_DIFF)
- {
- /* based on the construction of triangles, parallel but not collinear normal
- means that the triangles overlap, which is the worst case */
- if ((normal_a.x * normal_b.x <= 0) && (normal_a.y * normal_b.y <= 0) && (normal_a.z * normal_b.z <= 0) &&
- ((fabs(normal_a.x) > DBL_EPSILON) || (fabs(normal_a.y) > DBL_EPSILON) || (fabs(normal_a.z) > DBL_EPSILON)) &&
- ((fabs(normal_b.x) > DBL_EPSILON) || (fabs(normal_b.y) > DBL_EPSILON) || (fabs(normal_b.z) > DBL_EPSILON)))
- new_cos = 1.0;
- else new_cos = -1.0;
- }
-
- else
- {
- if (normal_a.x * data[j] + normal_a.y * data[j+1] + normal_a.z * data[j+2] + normal_a.w < 0)
- eina_quaternion_scale(&normal_a, &normal_a, -1);
- if (normal_b.x * elem->p2.x + normal_b.y * elem->p2.y + normal_b.z * elem->p2.z + normal_b.w < 0)
- eina_quaternion_scale(&normal_b, &normal_b, -1);
-
- new_cos = eina_quaternion_angle_plains(&normal_a, &normal_b);
- }
-
- /* MIN_DIFF is more useful for dihedral angles apparently */
- if (new_cos > cos + MIN_DIFF)
- {
- cos = new_cos;
- EINA_ARRAY_ITER_NEXT(&arr_candidates, k, el_vec3, iterator)
- free(el_vec3);
-
- /* Vertex gets into arr_candidates if the corresponding cosine is the maximum */
- eina_array_flush(&arr_candidates);
- eina_array_step_set(&arr_candidates, sizeof(Eina_Array), 1);
- eina_array_push(&arr_candidates, next);
- pushed = EINA_TRUE;
- }
- else if (fabs(new_cos - cos) < MIN_DIFF)
- {
- exist1 = EINA_FALSE;
-
- for (k = 0; (k < eina_array_count(&arr_candidates)) && !exist1; k++)
- {
- next_2d = eina_array_data_get(&arr_candidates, k);
- exist1 = eina_vector3_equivalent(next, next_2d);
- }
- if (!exist1)
- {
- eina_array_push(&arr_candidates, next);
- pushed = EINA_TRUE;
- }
- }
-
- if (!pushed)
- free(next);
- }
- }
-
- on_plane = EINA_FALSE;
- right = EINA_FALSE;
-
- /* The case when several points are found, is discussed below.
- This case is interesting because the convex hull in the
- two-dimensional subspace should be filled further */
- if ((!EINA_FLT_EQ(cos, 1.0)) && (1 < eina_array_count(&arr_candidates)))
- {
- Eina_Vector3 angle_from, angle_to;
- next_2d = eina_array_data_get(&arr_candidates, 0);
- eina_vector3_plane_by_points(&normal_b, &elem->p1, &elem->p0, next_2d);
-
- if (normal_b.x * elem->p2.x + normal_b.y * elem->p2.y + normal_b.z * elem->p2.z + normal_b.w > 0)
- {
- eina_vector3_subtract(&angle_from, &elem->p0, &elem->p1);
- right = EINA_TRUE;
- }
- else
- eina_vector3_subtract(&angle_from, &elem->p1, &elem->p0);
-
- cos_2d = -1.0;
-
- EINA_ARRAY_ITER_NEXT(&arr_candidates, k, next_2d, iterator)
- {
- /* Selection of the required vertex occurs on the basis of a specific angle */
- if (right)
- eina_vector3_subtract(&angle_to, next_2d, &elem->p0);
- else
- eina_vector3_subtract(&angle_to, next_2d, &elem->p1);
-
- new_cos = eina_vector3_dot_product(&angle_from, &angle_to) /
- (eina_vector3_length_get(&angle_from) * eina_vector3_length_get(&angle_to));
- if (new_cos > cos_2d + FLT_EPSILON)
- {
- cos_2d = new_cos;
- best = eina_array_data_get(&arr_candidates, k);
- }
- else if (!EINA_FLT_EQ(new_cos, cos_2d))
- {
- if ((right && (eina_vector3_distance_get(best, &elem->p0) < eina_vector3_length_get(&angle_from))) ||
- (!right && (eina_vector3_distance_get(best, &elem->p1) < eina_vector3_length_get(&angle_from))))
- best = eina_array_data_get(&arr_candidates, k);
- }
- }
- }
-
- /* This event will take place after the previous,
- in fact, choice of first triangle in a new two-dimensional
- convex hull allows to fill it fan counterclockwise when viewed from the inside */
- else if ((EINA_FLT_EQ(cos, 1.0)) && (1 < eina_array_count(&arr_candidates)))
- {
- Eina_Vector3 angle_from, angle_to;
- eina_vector3_subtract(&angle_from, &elem->p0, &elem->p1);
- cos_2d = -1.0;
- EINA_ARRAY_ITER_NEXT(&arr_candidates, k, next_2d, iterator)
- {
- eina_vector3_subtract(&angle_to, next_2d, &elem->p0);
-
- eina_vector3_plane_by_points(&normal_a, &elem->p0, &elem->p1, &elem->p2);
- eina_vector3_plane_by_points(&normal_b, &elem->p0, &elem->p1, next_2d);
- if ((normal_a.x * normal_b.x <= 0) && (normal_a.y * normal_b.y <= 0) && (normal_a.z * normal_b.z <= 0))
- {
- new_cos = eina_vector3_dot_product(&angle_from, &angle_to) /
- (eina_vector3_length_get(&angle_from) * eina_vector3_length_get(&angle_to));
- if (new_cos > cos_2d + FLT_EPSILON)
- {
- cos_2d = new_cos;
- best = eina_array_data_get(&arr_candidates, k);
- }
- else if (!EINA_FLT_EQ(new_cos, cos_2d))
- {
- if (eina_vector3_distance_get(best, &elem->p0) < eina_vector3_length_get(&angle_to))
- best = eina_array_data_get(&arr_candidates, k);
- }
- on_plane = EINA_TRUE;
- }
- }
- }
-
- else
- best = eina_array_data_get(&arr_candidates, 0);
-
- eina_vector3_plane_by_points(&normal_b, &elem->p0, &elem->p1, best);
-
- if_two = 0;
- first_exist_twice = 0;
- second_exist_twice = 0;
- equivalent_triangle = EINA_FALSE;
- triangle_chain = EINA_FALSE;
- eina_vector3_copy(&tmp1, &elem->p0);
- eina_vector3_copy(&tmp2, &elem->p1);
- new_elem1 = malloc(sizeof(Evas_Triangle3));
- evas_triangle3_set(new_elem1, best, &tmp1, &tmp2);
- pushed = EINA_FALSE;
-
- /* verification that the edje has not been found previously */
- EINA_ARRAY_ITER_NEXT(&arr_triangles, k, el, iterator)
- {
- if (convex_hull_triangle3_first_edje(el, &elem->p0, &elem->p1))
- if_two++;
- if (evas_triangle3_equivalent(el, new_elem1))
- equivalent_triangle++;
- }
-
-
- EINA_ARRAY_ITER_NEXT(&arr_triangles, k, el, iterator)
- {
- if ((k > 2) && (convex_hull_triangle3_not_first_edje(el, &elem->p0, best) ||
- convex_hull_triangle3_not_first_edje(el, &elem->p1, best)))
- triangle_chain = EINA_TRUE;
- }
-
- /* There is a specific order according to which the edjes are entered in arr_elems */
- if (!on_plane && !right)
- {
- if ((!equivalent_triangle) && (!second_exist_twice) && (!triangle_chain) && (if_two < 2))
- {
- new_elem2 = malloc(sizeof(Evas_Triangle3));
- evas_triangle3_set(new_elem2, best, &tmp2, &tmp1);
- eina_array_push(&arr_elems, new_elem2);
-
- /* triangles whose edges have been found should be entered into the arr_triangles
- to optimize the algorithm */
- if ((first_exist_twice < 2) && (second_exist_twice < 2))
- eina_array_push(&arr_triangles, eina_array_data_get(&arr_elems, eina_array_count(&arr_elems) - 1));
- }
- if ((!equivalent_triangle) && (!first_exist_twice) && (!triangle_chain) && (if_two < 2))
- {
- eina_array_push(&arr_elems, new_elem1);
- if ((first_exist_twice < 2) && (second_exist_twice < 2))
- {
- pushed = EINA_TRUE;
-
- /* eina_ch is the resultant vector of all triangles in convex hull */
- eina_array_push(&arr_ch, eina_array_data_get(&arr_elems, eina_array_count(&arr_elems) - 1));
- eina_array_push(&arr_triangles, eina_array_data_get(&arr_elems, eina_array_count(&arr_elems) - 1));
- }
- }
- }
-
- else
- {
- if ((!equivalent_triangle) && (!first_exist_twice) && (!triangle_chain) && (if_two < 2))
- {
- eina_array_push(&arr_elems, new_elem1);
- if ((first_exist_twice < 2) && (second_exist_twice < 2))
- {
- pushed = EINA_TRUE;
- eina_array_push(&arr_ch, eina_array_data_get(&arr_elems, eina_array_count(&arr_elems) - 1));
- eina_array_push(&arr_triangles, eina_array_data_get(&arr_elems, eina_array_count(&arr_elems) - 1));
- }
- }
-
- if ((!equivalent_triangle) && (!second_exist_twice) && (!triangle_chain) && (if_two < 2))
- {
- new_elem2 = malloc(sizeof(Evas_Triangle3));
- evas_triangle3_set(new_elem2, best, &tmp2, &tmp1);
- eina_array_push(&arr_elems, new_elem2);
-
- if ((first_exist_twice < 2) && (second_exist_twice < 2))
- eina_array_push(&arr_triangles, eina_array_data_get(&arr_elems, eina_array_count(&arr_elems)-1));
- }
- }
- if (!pushed)
- free (new_elem1);
- }
-
- index_count = 3 * eina_array_count(&arr_ch);
-
- found_vertex = (float*) malloc(10 * sizeof(float));
- found_index = (unsigned short int*) malloc(index_count * sizeof(unsigned short int));
- j = 0;
-
-#define CHECK_AND_SET_VERTEX(coord) \
- exist1 = EINA_FALSE; \
- for (i = 0, new_stride = 0; (i < vertex_count) && !exist1; i++, new_stride += 10) \
- { \
- if ((k > 0) && !EINA_FLT_EQ(el->p##coord.x, found_vertex[new_stride]) && \
- !EINA_FLT_EQ(el->p##coord.y, found_vertex[new_stride + 1]) && \
- !EINA_FLT_EQ(el->p##coord.z, found_vertex[new_stride + 2])) \
- { \
- exist1 = EINA_TRUE; \
- found_index[3 * k + coord] = i; \
- } \
- } \
- if (!exist1) \
- convex_hull_vertex_set(el, &vertex_count, &found_vertex, \
- &found_index, k, &leader, coord);
-
- EINA_ARRAY_ITER_NEXT(&arr_ch, k, el, iterator)
- {
- CHECK_AND_SET_VERTEX(0)
- CHECK_AND_SET_VERTEX(1)
- CHECK_AND_SET_VERTEX(2)
-
- j += 30;
- }
-
- for (i = 0; i < 10 * (vertex_count); i++)
- eina_inarray_push(vertex, &found_vertex[i]);
-
- for (i = 0; i < index_count; i++)
- eina_inarray_push(index, &found_index[i]);
-
- free(found_vertex);
-
- free(found_index);
-
- EINA_ARRAY_ITER_NEXT(&arr_triangles, k, el, iterator)
- {
- if (k > 2)
- free(el);
- }
-
- free(third_elem);
-
- EINA_ARRAY_ITER_NEXT(&arr_candidates, k, el_vec3, iterator)
- free(el_vec3);
-
- eina_array_flush(&arr_candidates);
- eina_array_flush(&arr_ch);
- eina_array_flush(&arr_elems);
- eina_array_flush(&arr_triangles);
-
-#undef CHECK_AND_SET_VERTEX
-
- return;
-}
-
-static inline void
-tangent_space_weighted_sum(Eina_Vector3 *big_t, Eina_Vector3 *little_t,
- Evas_Real *big_angle, Evas_Real little_angle)
-{
- /* one way to calculate tangent in vertex that is found in many triangles */
- eina_vector3_scale(big_t, big_t, *big_angle / (*big_angle + little_angle));
- eina_vector3_scale(little_t, little_t, little_angle / (*big_angle + little_angle));
- eina_vector3_add(big_t, big_t, little_t);
- *big_angle += little_angle;
- return;
-}
-
-
-static inline Evas_Real
-tangent_space_triangle_angle_get(Eina_Vector3 *first, Eina_Vector3 *second, Eina_Vector3 *third)
-{
- Eina_Vector3 a, b, c;
- Evas_Real cos, arccos;
-
- eina_vector3_subtract(&a, second, third);
- eina_vector3_subtract(&b, third, first);
- eina_vector3_subtract(&c, first, second);
-
- cos = -(eina_vector3_length_square_get(&a) - eina_vector3_length_square_get(&b) -
- eina_vector3_length_square_get(&c)) / (2 * eina_vector3_length_get(&b) *
- eina_vector3_length_get(&c));
- arccos = acos(cos);
-
- return arccos;
-}
-
-static inline void
-evas_tangent_space_get(float *data, float *tex_data, float *normal_data, unsigned short int *index, int vertex_count,
- int index_count, int stride, int tex_stride, int normal_stride, float **tangent)
-{
- Eina_Bool if_not_primitive = EINA_FALSE;
- Evas_Real big_angle, little_angle;
- Evas_Triangle3 triangle;
- Eina_Vector2 tex1, tex2, tex3;
- Eina_Vector3 big_tangent, little_tangent, normal;
- Eina_Quaternion *plain = NULL;
- int i, j, k, l, m, found_index = 0;
- int indexes[3];
-
- if (!tex_data)
- {
- ERR("Impossible to calculate tangent space, texture coordinates not found %d %s", __LINE__, __FILE__);
- return;
- }
-
- if (!(*tangent))
- {
- ERR("Failed to allocate memory %d %s", __LINE__, __FILE__);
- return;
- }
-
- float *tmp_tangent = (float*) malloc((3 * vertex_count) * sizeof(float));
- if (tmp_tangent == NULL)
- {
- ERR("Failed to allocate memory %d %s", __LINE__, __FILE__);
- return;
- }
-
- if (index_count == 0)
- {
- if_not_primitive = EINA_TRUE;
- index_count = vertex_count;
- }
-
- for (i = 0, j = 0, k = 0; i < vertex_count; i++, j += stride, k += normal_stride)
- {
- eina_vector3_set(&big_tangent, 0.0, 0.0, 0.0);
- big_angle = 0.0;
- for (l = 0, m = 0; l < vertex_count; l++, m += stride)
- {
- /* tangent for vertex is calculating in each triangle in which the vertex is found */
- if ((fabs(data[j] - data[m]) < FLT_EPSILON) &&
- (fabs(data[j + 1] - data[m + 1]) < FLT_EPSILON) &&
- (fabs(data[j + 2] - data[m + 2]) < FLT_EPSILON) &&
- ((m == j) || ((!EINA_FLT_EQ(tex_data[i * tex_stride], 0.0)) &&
- !EINA_FLT_EQ(tex_data[i * tex_stride + 1], 0.0) &&
- !EINA_FLT_EQ(tex_data[i * tex_stride], 1.0) &&
- !EINA_FLT_EQ(tex_data[i * tex_stride + 1], 1.0))))
- {
- found_index = l;
- for (k = 0; k < index_count; k += 3)
- {
- /* there is no index count and indexes , for models that are not a primitive,
- so we use the vertex count and an ordered array instead of them */
- if (if_not_primitive)
- {
- indexes[0] = k;
- indexes[1] = k + 1;
- indexes[2] = k + 2;
- }
- else
- {
- indexes[0] = index[k];
- indexes[1] = index[k + 1];
- indexes[2] = index[k + 2];
- }
-
- if ((found_index == indexes[0]) ||
- (found_index == indexes[1]) ||
- (found_index == indexes[2]))
- {
- eina_vector3_set(&triangle.p0, data[indexes[0] * stride], data[indexes[0] * stride + 1], data[indexes[0] * stride + 2]);
- eina_vector3_set(&triangle.p1, data[indexes[1] * stride], data[indexes[1] * stride + 1], data[indexes[1] * stride + 2]);
- eina_vector3_set(&triangle.p2, data[indexes[2] * stride], data[indexes[2] * stride + 1], data[indexes[2] * stride + 2]);
- if (plain)
- free(plain);
- plain = malloc(sizeof(Eina_Quaternion));
-
- eina_vector3_plane_by_points(plain, &triangle.p0, &triangle.p1, &triangle.p2);
- tex1.x = tex_data[indexes[0] * tex_stride];
- tex1.y = tex_data[indexes[0] * tex_stride + 1];
- tex2.x = tex_data[indexes[1] * tex_stride];
- tex2.y = tex_data[indexes[1] * tex_stride + 1];
- tex3.x = tex_data[indexes[2] * tex_stride];
- tex3.y = tex_data[indexes[2] * tex_stride + 1];
-
- /* calculate the tangent */
- tangent_new_basis(&little_tangent, &triangle,
- &tex1, &tex2, &tex3);
- eina_vector3_normalize(&little_tangent, &little_tangent);
-
- /* founding the angle in triangle in founded vertex */
- if (found_index == indexes[0])
- little_angle = tangent_space_triangle_angle_get(&triangle.p0, &triangle.p1, &triangle.p2);
-
- else if (found_index == indexes[1])
- little_angle = tangent_space_triangle_angle_get(&triangle.p1, &triangle.p0, &triangle.p2);
-
- else
- little_angle = tangent_space_triangle_angle_get(&triangle.p2, &triangle.p0, &triangle.p1);
-
- if (evas_triangle3_is_line(&triangle))
- eina_vector3_set(&big_tangent, 1.0, 0.0, 0.0);
-
- else
- tangent_space_weighted_sum(&big_tangent, &little_tangent, &big_angle, little_angle);
- }
- }
- }
- }
- eina_vector3_set(&normal, normal_data[j], normal_data[j + 1], normal_data[j + 2]);
- eina_vector3_orthogonal_projection_on_plane(&big_tangent, &big_tangent, &normal);
- eina_vector3_normalize(&big_tangent, &big_tangent);
- tmp_tangent[i * 3] = big_tangent.x;
- tmp_tangent[i * 3 + 1] = big_tangent.y;
- tmp_tangent[i * 3 + 2] = big_tangent.z;
- }
-
-
- memcpy(*tangent, tmp_tangent, (3 * vertex_count) * sizeof(float));
- free(tmp_tangent);
- free(plain);
-
- return;
-}
-
-static inline void
-calculate_box(Evas_Box3 *box3, int vertex_count, Eina_Vector3 *vertex_position)
-{
- int i = 0;
- float vxmin, vymin, vzmin, vxmax, vymax, vzmax;
-
- vxmax = vxmin = vertex_position[0].x;
- vymax = vymin = vertex_position[0].y;
- vzmax = vzmin = vertex_position[0].z;
-
- for (i = 1; i < vertex_count; ++i)
- {
- if (vxmin > vertex_position[i].x) vxmin = vertex_position[i].x;
- if (vxmax < vertex_position[i].x) vxmax = vertex_position[i].x;
- if (vymin > vertex_position[i].y) vymin = vertex_position[i].y;
- if (vymax < vertex_position[i].y) vymax = vertex_position[i].y;
- if (vzmin > vertex_position[i].z) vzmin = vertex_position[i].z;
- if (vzmax < vertex_position[i].z) vzmax = vertex_position[i].z;
- }
- evas_box3_set(box3, vxmin, vymin, vzmin, vxmax, vymax, vzmax);
-}
-
-static inline void
-calculate_sphere(Evas_Sphere *sphere, int vertex_count, Eina_Vector3 *vertex_position)
-{
- float radius = 0.0001f;
- Eina_Vector3 center, pos, diff;
- float len, alpha, alpha2;
- int i, k;
-
- // shuffle array for averaging algorithms error
- for (i = 0; i < vertex_count; i++)
- {
- k = i + rand()%(vertex_count-i);
- pos = vertex_position[i];
- vertex_position[i] = vertex_position[k];
- vertex_position[k] = pos;
- }
-
- center = vertex_position[0];
-
- for (k = 0; k < 2; k++)
- {
- for (i = 0; i < vertex_count; ++i)
- {
- pos = vertex_position[i];
- eina_vector3_subtract(&diff, &pos, &center);
- len = eina_vector3_length_get(&diff);
- if (len > radius)
- {
- alpha = len / radius;
- alpha2 = alpha * alpha;
- radius = 0.5f * (alpha + 1 / alpha) * radius;
- eina_vector3_scale(&pos, &pos, 1 - 1 / alpha2);
- eina_vector3_scale(&center, &center, (1 + 1 / alpha2));
- eina_vector3_add(&center, &center, &pos);
- eina_vector3_scale(&center, &center, 0.5f);
- }
- }
- }
-
- for (i = 0; i < vertex_count; ++i)
- {
- pos = vertex_position[i];
- eina_vector3_subtract(&diff, &pos, &center);
- len = eina_vector3_length_get(&diff);
-
- if (len > radius)
- {
- radius = (radius + len) / 2.0f;
- eina_vector3_scale(&diff, &diff, (len - radius) / len);
- eina_vector3_add(&center, &center, &diff);
- }
- }
-
- sphere->radius = radius;
- sphere->center = center;
-}
diff --git a/src/lib/evas/include/evas_blend_ops.h b/src/lib/evas/include/evas_blend_ops.h
index e66d571da1..45cd3744cd 100644
--- a/src/lib/evas/include/evas_blend_ops.h
+++ b/src/lib/evas/include/evas_blend_ops.h
@@ -198,7 +198,7 @@ extern const DATA32 ALPHA_256;
/* copy 32bit value to lower bits of register reg */
#define VMOV_M2R_NEON(reg, value) \
- __asm__ __volatile__("vmov.32 " #reg "[0], %[val] \n\t" :: [val] "r" (value) : #reg);
+ __asm__ __volatile__("vmov.32 " #reg "[0], %[val] \n\t" :: [val] "r" (value) : #reg);
/* save 32bit value from lower 64 bits of register regq to memory location */
/* pointed to by pointer, using 64bit register regd as temporary location */
@@ -212,7 +212,7 @@ extern const DATA32 ALPHA_256;
/* spread value in register reg */
#define VDUP_NEON(reg, value) \
- __asm__ __volatile__("vdup.16 " #reg ", %[val] \n\t" :: [val] "r" (value) : #reg);
+ __asm__ __volatile__("vdup.16 " #reg ", %[val] \n\t" :: [val] "r" (value) : #reg);
/* interleave contents of reg1 and reg2 */
#define VZIP_NEON(reg1, reg2) \
diff --git a/src/lib/evas/include/evas_common_private.h b/src/lib/evas/include/evas_common_private.h
index b2d63476a2..f2f52e4b85 100644
--- a/src/lib/evas/include/evas_common_private.h
+++ b/src/lib/evas/include/evas_common_private.h
@@ -2,7 +2,7 @@
#define EVAS_COMMON_H
//#ifdef HAVE_CONFIG_H
-#include "config.h" /* so that EAPI in Evas.h is correctly defined */
+#include "config.h" /* so that EVAS_API in Evas.h is correctly defined */
//#endif
#ifdef STDC_HEADERS
@@ -51,31 +51,7 @@
#include "../common/evas_font.h"
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
#ifndef HAVE_LROUND
/* right now i dont care about rendering bugs on platforms without lround
@@ -85,11 +61,8 @@
#define lround(x) (((x) < 0) ? (long int)ceil((x) - 0.5) : (long int)floor((x) + 0.5))
#endif
-/*macro to be used in eet loader/saver*/
-#define EVAS_CANVAS3D_FILE_CACHE_FILE_ENTRY "evas_3d file"
-
/* macros needed to log message through eina_log */
-extern EAPI int _evas_log_dom_global;
+EVAS_API extern int _evas_log_dom_global;
#ifdef _EVAS_DEFAULT_LOG_DOM
# undef _EVAS_DEFAULT_LOG_DOM
#endif
@@ -694,6 +667,7 @@ struct _RGBA_Draw_Context
void *(*gl_image_new) (void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace);
void (*gl_image_free) (void *image);
void (*gl_image_draw) (void *gc, void *im, int dx, int dy, int dw, int dh, int smooth);
+ void (*gl_garbage_collector) (void *gc, float ratio, int *texture_size, int *atlas_size);
} func;
void *data;
} font_ext;
@@ -951,12 +925,12 @@ struct _Tilebuf
struct {
short w, h;
} tile_size;
- int need_merge;
list_t rects;
struct {
int x, y, w, h;
} prev_add, prev_del;
Eina_Bool strict_tiles : 1;
+ Eina_Bool need_merge : 1;
#endif
};
@@ -1049,20 +1023,20 @@ extern "C" {
#endif
/****/
-EAPI void evas_common_init (void);
-EAPI void evas_common_shutdown (void);
+EVAS_API void evas_common_init (void);
+EVAS_API void evas_common_shutdown (void);
-EAPI void evas_common_cpu_init (void);
+EVAS_API void evas_common_cpu_init (void);
int evas_common_cpu_have_cpuid (void);
int evas_common_cpu_has_feature (unsigned int feature);
-EAPI void evas_common_cpu_can_do (int *mmx, int *sse, int *sse2);
-EAPI void evas_common_cpu_end_opt (void);
+EVAS_API void evas_common_cpu_can_do (int *mmx, int *sse, int *sse2);
+EVAS_API void evas_common_cpu_end_opt (void);
/****/
#include "../common/evas_blend.h"
-EAPI Gfx_Func_Copy evas_common_draw_func_copy_get (int pixels, int reverse);
+EVAS_API Gfx_Func_Copy evas_common_draw_func_copy_get (int pixels, int reverse);
/****/
#include "../common/evas_convert_color.h"
@@ -1082,26 +1056,26 @@ EAPI Gfx_Func_Copy evas_common_draw_func_copy_get (int pixels, int
#include "../common/evas_rectangle.h"
/****/
-EAPI void evas_common_blit_init (void);
+EVAS_API void evas_common_blit_init (void);
-EAPI void evas_common_blit_rectangle (const RGBA_Image *src, RGBA_Image *dst, int src_x, int src_y, int w, int h, int dst_x, int dst_y);
+EVAS_API void evas_common_blit_rectangle (const RGBA_Image *src, RGBA_Image *dst, int src_x, int src_y, int w, int h, int dst_x, int dst_y);
/****/
/****/
-EAPI void evas_common_tilebuf_init (void);
-
-EAPI Tilebuf *evas_common_tilebuf_new (int w, int h);
-EAPI void evas_common_tilebuf_free (Tilebuf *tb);
-EAPI void evas_common_tilebuf_set_tile_size (Tilebuf *tb, int tw, int th);
-EAPI void evas_common_tilebuf_get_tile_size (Tilebuf *tb, int *tw, int *th);
-EAPI void evas_common_tilebuf_tile_strict_set (Tilebuf *tb, Eina_Bool strict);
-EAPI int evas_common_tilebuf_add_redraw (Tilebuf *tb, int x, int y, int w, int h);
-EAPI int evas_common_tilebuf_del_redraw (Tilebuf *tb, int x, int y, int w, int h);
-EAPI int evas_common_tilebuf_add_motion_vector (Tilebuf *tb, int x, int y, int w, int h, int dx, int dy, int alpha);
-EAPI void evas_common_tilebuf_clear (Tilebuf *tb);
-EAPI Tilebuf_Rect *evas_common_tilebuf_get_render_rects (Tilebuf *tb);
-EAPI void evas_common_tilebuf_free_render_rects (Tilebuf_Rect *rects);
+EVAS_API void evas_common_tilebuf_init (void);
+
+EVAS_API Tilebuf *evas_common_tilebuf_new (int w, int h);
+EVAS_API void evas_common_tilebuf_free (Tilebuf *tb);
+EVAS_API void evas_common_tilebuf_set_tile_size (Tilebuf *tb, int tw, int th);
+EVAS_API void evas_common_tilebuf_get_tile_size (Tilebuf *tb, int *tw, int *th);
+EVAS_API void evas_common_tilebuf_tile_strict_set (Tilebuf *tb, Eina_Bool strict);
+EVAS_API int evas_common_tilebuf_add_redraw (Tilebuf *tb, int x, int y, int w, int h);
+EVAS_API int evas_common_tilebuf_del_redraw (Tilebuf *tb, int x, int y, int w, int h);
+EVAS_API int evas_common_tilebuf_add_motion_vector (Tilebuf *tb, int x, int y, int w, int h, int dx, int dy, int alpha);
+EVAS_API void evas_common_tilebuf_clear (Tilebuf *tb);
+EVAS_API Tilebuf_Rect *evas_common_tilebuf_get_render_rects (Tilebuf *tb);
+EVAS_API void evas_common_tilebuf_free_render_rects (Tilebuf_Rect *rects);
/*
Regionbuf *evas_common_regionbuf_new (int w, int h);
@@ -1120,16 +1094,16 @@ Tilebuf_Rect *evas_common_regionbuf_rects_get (Regionbuf *rb);
/****/
#include "../common/evas_pipe.h"
-EAPI void evas_thread_queue_wait(void);
+EVAS_API void evas_thread_queue_wait(void);
-EAPI int evas_async_events_process_blocking(void);
+EVAS_API int evas_async_events_process_blocking(void);
void evas_render_rendering_wait(Evas_Public_Data *evas);
void evas_all_sync(void);
int evas_thread_init(void);
int evas_thread_shutdown(void);
-EAPI void evas_thread_cmd_enqueue(Evas_Thread_Command_Cb cb, void *data);
-EAPI void evas_thread_queue_flush(Evas_Thread_Command_Cb cb, void *data);
+EVAS_API void evas_thread_cmd_enqueue(Evas_Thread_Command_Cb cb, void *data);
+EVAS_API void evas_thread_queue_flush(Evas_Thread_Command_Cb cb, void *data);
typedef enum _Evas_Render_Mode
{
@@ -1165,12 +1139,12 @@ struct _Generic_Cache
Generic_Cache_Free free_func;
};
-EAPI Generic_Cache* generic_cache_new(void *user_data, Generic_Cache_Free func);
-EAPI void generic_cache_destroy(Generic_Cache *cache);
-EAPI void generic_cache_dump(Generic_Cache *cache);
-EAPI void generic_cache_data_set(Generic_Cache *cache, void *key, void *data);
-EAPI void *generic_cache_data_get(Generic_Cache *cache, void *key);
-EAPI void generic_cache_data_drop(Generic_Cache *cache, void *key);
+EVAS_API Generic_Cache* generic_cache_new(void *user_data, Generic_Cache_Free func);
+EVAS_API void generic_cache_destroy(Generic_Cache *cache);
+EVAS_API void generic_cache_dump(Generic_Cache *cache);
+EVAS_API void generic_cache_data_set(Generic_Cache *cache, void *key, void *data);
+EVAS_API void *generic_cache_data_get(Generic_Cache *cache, void *key);
+EVAS_API void generic_cache_data_drop(Generic_Cache *cache, void *key);
/*****************************************************************************/
@@ -1178,7 +1152,4 @@ EAPI void generic_cache_data_drop(Generic_Cache *cache, void *key);
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/evas/include/evas_filter.h b/src/lib/evas/include/evas_filter.h
index 5a22c2b6ae..3567911837 100644
--- a/src/lib/evas/include/evas_filter.h
+++ b/src/lib/evas/include/evas_filter.h
@@ -4,33 +4,10 @@
#include "evas_common_private.h"
#include "evas_private.h"
-#include "efl_canvas_filter_internal.eo.h"
-#ifdef EAPI
-# undef EAPI
-#endif
+#include <evas_api.h>
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include "efl_canvas_filter_internal.eo.h"
#ifdef DEBUG
# define FILTERS_DEBUG
@@ -139,12 +116,12 @@ struct _Evas_Filter_Padding
#define EFL_CANVAS_FILTER_STATE_DEFAULT { {}, { 255, 255, 255, 255 }, { "default", 0.0 }, {}, 0, 0, 1.0, 0.0 }
/* Parser stuff (high level API) */
-EAPI Evas_Filter_Program *evas_filter_program_new(const char *name, Eina_Bool input_alpha);
-EAPI Eina_Bool evas_filter_program_state_set(Evas_Filter_Program *pgm, const Efl_Canvas_Filter_State *state);
-EAPI Eina_Bool evas_filter_program_parse(Evas_Filter_Program *pgm, const char *str);
-EAPI void evas_filter_program_del(Evas_Filter_Program *pgm);
-EAPI Eina_Bool evas_filter_program_padding_get(Evas_Filter_Program *pgm, Evas_Filter_Padding *final, Evas_Filter_Padding *calc);
-EAPI void evas_filter_program_source_set_all(Evas_Filter_Program *pgm, Eina_Hash *sources);
+EVAS_API Evas_Filter_Program *evas_filter_program_new(const char *name, Eina_Bool input_alpha);
+EVAS_API Eina_Bool evas_filter_program_state_set(Evas_Filter_Program *pgm, const Efl_Canvas_Filter_State *state);
+EVAS_API Eina_Bool evas_filter_program_parse(Evas_Filter_Program *pgm, const char *str);
+EVAS_API void evas_filter_program_del(Evas_Filter_Program *pgm);
+EVAS_API Eina_Bool evas_filter_program_padding_get(Evas_Filter_Program *pgm, Evas_Filter_Padding *final, Evas_Filter_Padding *calc);
+EVAS_API void evas_filter_program_source_set_all(Evas_Filter_Program *pgm, Eina_Hash *sources);
void evas_filter_program_data_set_all(Evas_Filter_Program *pgm, Eina_Inlist *data);
/* Filter context (low level) */
@@ -346,7 +323,4 @@ struct _Evas_Filter_Data_Binding
Eina_Bool execute : 1;
};
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/evas/include/evas_inline.x b/src/lib/evas/include/evas_inline.x
index a67616e47c..9905d49f28 100644
--- a/src/lib/evas/include/evas_inline.x
+++ b/src/lib/evas/include/evas_inline.x
@@ -166,7 +166,7 @@ evas_object_is_source_invisible(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Pro
{
if (obj->parent_cache.src_invisible_valid)
return obj->parent_cache.src_invisible;
- if ((obj->proxy->proxies || obj->proxy->proxy_textures) && obj->proxy->src_invisible) return 1;
+ if (obj->proxy->proxies && obj->proxy->src_invisible) return 1;
if (!obj->smart.parent) return 0;
if (obj->mask->is_mask) return 0;
Evas_Object_Protected_Data *smart_parent_pd =
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h
index 20a04959f8..7a4fced3df 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -15,34 +15,7 @@
#include "../file/evas_module.h"
#include "../file/evas_path.h"
-#include "evas_3d_utils.h"
-
-
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
+#include <evas_api.h>
/* save typing */
#define ENFN obj->layer->evas->engine.func
@@ -84,7 +57,6 @@ typedef struct _Evas_Object_Proxy_Data Evas_Object_Proxy_Data;
typedef struct _Evas_Object_Map_Data Evas_Object_Map_Data;
typedef struct _Evas_Object_Events_Data Evas_Object_Events_Data;
typedef struct _Evas_Proxy_Render_Data Evas_Proxy_Render_Data;
-typedef struct _Evas_Object_3D_Data Evas_Object_3D_Data;
typedef struct _Evas_Object_Mask_Data Evas_Object_Mask_Data;
typedef struct _Evas_Object_Pointer_Data Evas_Object_Pointer_Data;
@@ -104,404 +76,8 @@ typedef struct _Evas_Pointer_Data Evas_Pointer_Data;
typedef struct _Evas_Filter_Command Evas_Filter_Command;
typedef enum _Evas_Filter_Support Evas_Filter_Support;
-// 3D stuff
-
-#define EVAS_CANVAS3D_VERTEX_ATTRIB_COUNT 5
-#define EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT 5
-
-typedef struct _Evas_Canvas3D_Object Evas_Canvas3D_Object_Data;
-typedef struct _Evas_Canvas3D_Scene_Public_Data Evas_Canvas3D_Scene_Public_Data;
-typedef struct _Evas_Canvas3D_Vertex_Buffer Evas_Canvas3D_Vertex_Buffer;
-typedef struct _Evas_Canvas3D_Mesh_Frame Evas_Canvas3D_Mesh_Frame;
-typedef struct _Evas_Canvas3D_Node_Mesh Evas_Canvas3D_Node_Mesh;
-typedef struct _Evas_Canvas3D_Object_Func Evas_Canvas3D_Object_Func;
-typedef struct _Evas_Canvas3D_Pick_Data Evas_Canvas3D_Pick_Data;
-typedef struct _Evas_Canvas3D_Interpolate_Vertex_Buffer Evas_Canvas3D_Interpolate_Vertex_Buffer;
-
-typedef struct _Evas_Canvas3D_Scene Evas_Canvas3D_Scene_Data;
-typedef struct _Evas_Canvas3D_Node Evas_Canvas3D_Node_Data;
-typedef struct _Evas_Canvas3D_Mesh Evas_Canvas3D_Mesh_Data;
-typedef struct _Evas_Canvas3D_Camera Evas_Canvas3D_Camera_Data;
-typedef struct _Evas_Canvas3D_Light Evas_Canvas3D_Light_Data;
-typedef struct _Evas_Canvas3D_Material Evas_Canvas3D_Material_Data;
-typedef struct _Evas_Canvas3D_Texture Evas_Canvas3D_Texture_Data;
-typedef struct _Evas_Canvas3D_Primitive Evas_Canvas3D_Primitive_Data;
-
-/* Structs for mesh eet saver/loader */
-typedef struct _Evas_Canvas3D_Vec2_Eet Evas_Canvas3D_Vec2_Eet;
-typedef struct _Evas_Canvas3D_Vec3_Eet Evas_Canvas3D_Vec3_Eet;
-typedef struct _Evas_Canvas3D_Vertex_Eet Evas_Canvas3D_Vertex_Eet;
-typedef struct _Evas_Canvas3D_Geometry_Eet Evas_Canvas3D_Geometry_Eet;
-typedef struct _Evas_Canvas3D_Color_Eet Evas_Canvas3D_Color_Eet;
-typedef struct _Evas_Canvas3D_Material_Eet Evas_Canvas3D_Material_Eet;
-typedef struct _Evas_Canvas3D_Frame_Eet Evas_Canvas3D_Frame_Eet;
-typedef struct _Evas_Canvas3D_Mesh_Eet Evas_Canvas3D_Mesh_Eet;
-typedef struct _Evas_Canvas3D_Header_Eet Evas_Canvas3D_Header_Eet;
-typedef struct _Evas_Canvas3D_File_Eet Evas_Canvas3D_File_Eet;
-
typedef struct _Vg_File_Data Vg_File_Data;
typedef struct _Vg_File_Anim_Data Vg_File_Anim_Data;
-typedef struct _Vg_File_Anim_Data_Marker Vg_File_Anim_Data_Marker;
-
-struct _Evas_Canvas3D_Vec2_Eet
-{
- float x;
- float y;
-};
-
-struct _Evas_Canvas3D_Vec3_Eet
-{
- float x;
- float y;
- float z;
-};
-
-struct _Evas_Canvas3D_Vertex_Eet
-{
- Evas_Canvas3D_Vec3_Eet position;
- Evas_Canvas3D_Vec3_Eet normal;
- Evas_Canvas3D_Vec2_Eet texcoord;
-};//one point of mesh
-
-struct _Evas_Canvas3D_Geometry_Eet
-{
- unsigned int id;
- int vertices_count;
- Evas_Canvas3D_Vertex_Eet *vertices;
-};//contain array of vertices and id for using in Evas_Canvas3D_Frame_Eet in future
-
-struct _Evas_Canvas3D_Color_Eet
-{
- float r;
- float g;
- float b;
- float a;
-};
-
-struct _Evas_Canvas3D_Material_Eet
-{
- int id;
- float shininess;
- int colors_count;
- Evas_Canvas3D_Color_Eet *colors;//Color per attribute (ambient, diffuse, specular etc.)
-};
-
-struct _Evas_Canvas3D_Frame_Eet
-{
- int id;
- int geometry_id;
- int material_id;
-};//only ids to prevent of spending of memory when animation will change only geometry or only material
-
-struct _Evas_Canvas3D_Mesh_Eet
-{
- int materials_count;
- int frames_count;
- int geometries_count;
- Evas_Canvas3D_Material_Eet *materials;
- Evas_Canvas3D_Frame_Eet *frames;
- Evas_Canvas3D_Geometry_Eet *geometries;
-};//contain materials, geometries and bounding between it (frames)
-
-struct _Evas_Canvas3D_Header_Eet
-{
- int version;
- int *materials;//colors_count
- int materials_count;
- int *geometries;//vertices_count
- int geometries_count;
- int frames;
-};//can be use for fast allocating of memory
-
-struct _Evas_Canvas3D_File_Eet
-{
- Evas_Canvas3D_Mesh_Eet *mesh;
- Evas_Canvas3D_Header_Eet *header;
-};//contain mesh data and information about mesh size
-
-typedef Eina_Bool (*Evas_Canvas3D_Node_Func)(Evas_Canvas3D_Node *, void *data);
-
-
-typedef enum _Evas_Canvas3D_Node_Traverse_Type
-{
- EVAS_CANVAS3D_NODE_TRAVERSE_DOWNWARD,
- EVAS_CANVAS3D_NODE_TRAVERSE_UPWARD,
-} Evas_Canvas3D_Node_Traverse_Type;
-
-typedef enum _Evas_Canvas3D_Tree_Traverse_Type
-{
- EVAS_CANVAS3D_TREE_TRAVERSE_PRE_ORDER,
- EVAS_CANVAS3D_TREE_TRAVERSE_ANY_ORDER = EVAS_CANVAS3D_TREE_TRAVERSE_PRE_ORDER,
- EVAS_CANVAS3D_TREE_TRAVERSE_POST_ORDER,
- EVAS_CANVAS3D_TREE_TRAVERSE_LEVEL_ORDER,
-} Evas_Canvas3D_Tree_Traverse_Type;
-
-
-struct _Evas_Canvas3D_Object
-{
- Evas *evas;
- Evas_Canvas3D_Object_Type type;
-
- Eina_Bool dirty[EVAS_CANVAS3D_STATE_MAX];
-};
-
-struct _Evas_Canvas3D_Scene
-{
- Evas_Canvas3D_Node *root_node;
- Evas_Canvas3D_Node *camera_node;
- Evas_Color bg_color;
- Eina_Bool shadows_enabled :1;
- Eina_Bool color_pick_enabled :1;
-
- void *surface;
- int w, h;
- Eina_List *images;
-
- Eina_Hash *node_mesh_colors;
- Eina_Hash *colors_node_mesh;
- /*sets constant for shadow rendering*/
- Evas_Real depth_offset;
- Evas_Real depth_constant;
-};
-
-struct _Evas_Canvas3D_Node_Mesh
-{
- Evas_Canvas3D_Node *node;
- Evas_Canvas3D_Mesh *mesh;
- int frame;
-};
-
-struct _Evas_Canvas3D_Node
-{
- Eina_List *members;
- Evas_Canvas3D_Node *parent;
- Evas_Canvas3D_Node *billboard_target;
-
- Eina_Vector3 position;
- Eina_Quaternion orientation;
- Eina_Vector3 scale;
-
- Eina_Vector3 position_world;
- Eina_Quaternion orientation_world;
- Eina_Vector3 scale_world;
-
- Evas_Box3 aabb;
- Evas_Box3 obb;
- Evas_Sphere bsphere;
-
- Evas_Canvas3D_Node_Type type;
-
- /* Camera node. */
- union {
- struct {
- Evas_Canvas3D_Camera *camera;
- Eina_Matrix4 matrix_world_to_eye;
- } camera;
-
- struct {
- Evas_Canvas3D_Light *light;
- Eina_Matrix4 matrix_local_to_world;
- } light;
-
- struct {
- Eina_List *meshes;
- Eina_Hash *node_meshes;
- Eina_Matrix4 matrix_local_to_world;
- } mesh;
- } data;
-
- /* Scene using this node as root. */
- Eina_Hash *scenes_root;
-
- /* Scene using this node as camera. */
- Eina_Hash *scenes_camera;
-
- Eina_Bool position_inherit : 1;
- Eina_Bool orientation_inherit : 1;
- Eina_Bool scale_inherit : 1;
- Eina_Bool lod : 1;
-};
-
-struct _Evas_Canvas3D_Camera
-{
- Eina_Matrix4 projection;
- Eina_Hash *nodes;
-};
-
-struct _Evas_Canvas3D_Light
-{
- Evas_Color ambient;
- Evas_Color diffuse;
- Evas_Color specular;
-
- Eina_Bool directional;
- Evas_Real spot_exp;
- Evas_Real spot_cutoff;
- Evas_Real spot_cutoff_cos;
-
- Eina_Bool enable_attenuation;
- Evas_Real atten_const;
- Evas_Real atten_linear;
- Evas_Real atten_quad;
- Eina_Matrix4 projection;
-
- Eina_Hash *nodes;
-};
-
-struct _Evas_Canvas3D_Vertex_Buffer
-{
- int element_count;
- int stride;
- void *data;
- int size;
- Eina_Bool owns_data;
- Eina_Bool mapped;
-};
-
-struct _Evas_Canvas3D_Interpolate_Vertex_Buffer
-{
- void *data0;
- int stride0;
- int size0;
-
- void *data1;
- int stride1;
- int size1;
-
- Evas_Real weight;
-};
-
-struct _Evas_Canvas3D_Mesh_Frame
-{
- Evas_Canvas3D_Mesh *mesh;
-
- int frame;
- Evas_Canvas3D_Material *material;
- Evas_Box3 aabb;
-
- Evas_Canvas3D_Vertex_Buffer vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_COUNT];
-};
-
-struct _Evas_Canvas3D_Mesh
-{
- Evas_Canvas3D_Shader_Mode shader_mode;
-
- int vertex_count;
- int frame_count;
- Eina_List *frames;
-
- Evas_Canvas3D_Index_Format index_format;
- int index_count;
- void *indices;
- int index_size;
- Eina_Bool owns_indices;
- Eina_Bool index_mapped;
-
- Evas_Canvas3D_Vertex_Assembly assembly;
-
- Eina_Hash *nodes;
- Eina_Bool shadowed;
-
- Eina_Bool blending :1;
- Evas_Canvas3D_Blend_Func blend_sfactor;
- Evas_Canvas3D_Blend_Func blend_dfactor;
-
- Evas_Canvas3D_Comparison alpha_comparison;
- Evas_Real alpha_ref_value;
- Eina_Bool alpha_test_enabled :1;
-
- Evas_Color fog_color;
- Eina_Bool fog_enabled :1;
- Evas_Color color_pick_key;
- Eina_Bool color_pick_enabled :1;
- /*sets of the quality and offsets for shadow rendering*/
- int shadows_edges_filtering_level;
- Evas_Real shadows_edges_size;
- Evas_Real shadows_constant_bias;
- Evas_Real near_lod_boundary;
- Evas_Real far_lod_boundary;
-};
-
-struct _Evas_Canvas3D_Texture
-{
- /* List of materials using this texture. */
- Eina_Hash *materials;
-
- /* Proxy data. */
- Evas_Object *source;
- Eina_Bool proxy_rendering;
- void *proxy_surface;
- /* Engine-side object. */
- void *engine_data;
-
- Eina_File *f;
- const char *key;
-
- /*Use atlases, @EINA_TRUE by default*/
- Eina_Bool atlas_enable :1;
-};
-
-struct _Evas_Canvas3D_Material
-{
- struct {
- Eina_Bool enable;
- Evas_Color color;
- Evas_Canvas3D_Texture *texture;
- } attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT];
-
- Evas_Real shininess;
-
- Eina_Hash *meshes;
-};
-
-struct _Evas_Canvas3D_Primitive
-{
- Evas_Canvas3D_Mesh_Primitive form;
- Evas_Canvas3D_Primitive_Mode mode;
- Evas_Real ratio;
- int precision;
- Evas_Canvas3D_Surface_Func *surface;
-
- Eina_Vector2 tex_scale;
-};
-
-struct _Evas_Canvas3D_Scene_Public_Data
-{
- Evas_Color bg_color;
- Evas_Canvas3D_Node *camera_node;
- Eina_List *light_nodes;
- Eina_List *mesh_nodes;
- Eina_Bool shadows_enabled :1;
- Eina_Bool color_pick_enabled :1;
- Eina_Hash *node_mesh_colors;
- Eina_Hash *colors_node_mesh;
-
- /*sets constant for shadow rendering*/
- Evas_Real depth_offset;
- Evas_Real depth_constant;
- Eina_Bool render_to_texture;
-
- unsigned int lod_distance;
-
- Eina_Bool post_processing :1;
- Evas_Canvas3D_Shader_Mode post_processing_type;
-};
-
-struct _Evas_Canvas3D_Pick_Data
-{
- /* Input */
- Evas_Real x, y;
- Eina_Matrix4 matrix_vp;
- Evas_Ray3 ray_world;
-
- /* Output */
- Eina_Bool picked;
- Evas_Real z;
- Evas_Canvas3D_Node *node;
- Evas_Canvas3D_Mesh *mesh;
- Evas_Real u, v;
- Evas_Real s, t;
-};
/* General types - used for script type chceking */
#define OPAQUE_TYPE(type) struct __##type { int a; }; \
@@ -546,7 +122,7 @@ MAGIC_CHECK_FAILED(o, t, m)
# define MAGIC_CHECK_END() }}
#endif
-// helper function for legacy EAPI implementations
+// helper function for legacy EVAS_API implementations
#define EVAS_OBJ_GET_OR_RETURN(o, ...) ({ \
Evas_Object_Protected_Data *_obj = efl_isa(o, EFL_CANVAS_OBJECT_CLASS) ? \
efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS) : NULL; \
@@ -851,7 +427,9 @@ struct _Evas_Public_Data
Eina_Array image_unref_queue;
Eina_Array glyph_unref_queue;
Eina_Array texts_unref_queue;
+ Eina_Array map_clip_objects;
Eina_List *finalize_objects;
+ Eina_Array render_post_change_objects;
struct {
Evas_Post_Render_Job *jobs;
@@ -1005,7 +583,6 @@ struct _Evas_Map
struct _Evas_Object_Proxy_Data
{
Eina_List *proxies;
- Eina_List *proxy_textures;
void *surface;
int w,h;
Eina_List *src_event_in;
@@ -1033,12 +610,6 @@ struct _Evas_Object_Map_Data
RGBA_Map *spans;
};
-struct _Evas_Object_3D_Data
-{
- void *surface;
- int w, h;
-};
-
// Mask clipper information
struct _Evas_Object_Mask_Data
{
@@ -1142,7 +713,6 @@ struct _Evas_Object_Protected_Data
// Eina_Cow pointer be careful when writing to it
const Evas_Object_Proxy_Data *proxy;
const Evas_Object_Map_Data *map;
- const Evas_Object_3D_Data *data_3d;
const Evas_Object_Mask_Data *mask;
const Evas_Object_Events_Data *events;
@@ -1228,6 +798,8 @@ struct _Evas_Object_Protected_Data
Eina_Bool events_filter_enabled : 1;
Eina_Bool is_pointer_inside_legacy : 1;
+ Eina_Bool is_filter_object : 1;
+ Eina_Bool is_vg_object : 1;
};
struct _Evas_Data_Node
@@ -1348,6 +920,7 @@ struct _Evas_Func
void *(*polygon_points_clear) (void *engine, void *polygon);
void (*polygon_draw) (void *engine, void *data, void *context, void *surface, void *polygon, int x, int y, Eina_Bool do_async);
+ void *(*image_load) (void *engine, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo);
void *(*image_mmap) (void *engine, Eina_File *f, const char *key, int *error, Evas_Image_Load_Opts *lo);
void *(*image_new_from_data) (void *engine, int w, int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
void *(*image_new_from_copied_data) (void *engine, int w, int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
@@ -1476,6 +1049,7 @@ struct _Evas_Func
int (*image_animated_loop_count_get) (void *engine, void *image);
double (*image_animated_frame_duration_get) (void *engine, void *image, int start_frame, int frame_num);
Eina_Bool (*image_animated_frame_set) (void *engine, void *image, int frame_index);
+ int (*image_animated_frame_get) (void *engine, void *image);
/* max size query */
void (*image_max_size_get) (void *engine, int *maxw, int *maxh);
@@ -1487,34 +1061,11 @@ struct _Evas_Func
void (*context_flush) (void *engine);
- /* 3D features */
- void *(*drawable_new) (void *engine, int w, int h, int alpha);
- void (*drawable_free) (void *engine, void *drawable);
- void (*drawable_size_get) (void *engine, void *drawable, int *w, int *h);
- void *(*image_drawable_set) (void *engine, void *image, void *drawable);
- void (*drawable_texture_rendered_pixels_get) (unsigned int tex, int x, int y, int w, int h, void *drawable EINA_UNUSED, void *data);
- void (*drawable_scene_render) (void *engine, void *data, void *drawable, void *scene_data);
- Eina_Bool (*drawable_scene_render_to_texture) (void *engine, void *drawable, void *scene_data);
-
- int (*drawable_texture_color_pick_id_get) (void *drawable);
- int (*drawable_texture_target_id_get) (void *drawable);
- void (*drawable_texture_pixel_color_get) (unsigned int tex EINA_UNUSED, int x, int y, Evas_Color *color, void *drawable);
-
- void *(*texture_new) (void *engine, Eina_Bool use_atlas);
- void (*texture_free) (void *engine, void *texture);
- void (*texture_size_get) (void *engine, void *texture, int *w, int *h);
- void (*texture_wrap_set) (void *engine, void *texture, Evas_Canvas3D_Wrap_Mode s, Evas_Canvas3D_Wrap_Mode t);
- void (*texture_wrap_get) (void *engine, void *texture, Evas_Canvas3D_Wrap_Mode *s, Evas_Canvas3D_Wrap_Mode *t);
- void (*texture_filter_set) (void *engine, void *texture, Evas_Canvas3D_Texture_Filter min, Evas_Canvas3D_Texture_Filter mag);
- void (*texture_filter_get) (void *engine, void *texture, Evas_Canvas3D_Texture_Filter *min, Evas_Canvas3D_Texture_Filter *mag);
- void (*texture_image_set) (void *engine, void *texture, void *image);
- void *(*texture_image_get) (void *engine, void *texture);
-
Ector_Surface *(*ector_create) (void *engine);
void (*ector_destroy) (void *engine, Ector_Surface *surface);
Ector_Buffer *(*ector_buffer_wrap) (void *engine, Evas *e, void *engine_image);
Ector_Buffer *(*ector_buffer_new) (void *engine, Evas *e, int width, int height, Efl_Gfx_Colorspace cspace, Ector_Buffer_Flag flags);
- void (*ector_begin) (void *engine, void *output, void *context, Ector_Surface *ector, int x, int y, Eina_Bool do_async);
+ Eina_Bool (*ector_begin) (void *engine, void *output, void *context, Ector_Surface *ector, int x, int y, Eina_Bool do_async);
void (*ector_renderer_draw) (void *engine, void *output, void *context, Ector_Renderer *r, Eina_Array *clips, Eina_Bool do_async);
void (*ector_end) (void *engine, void *output, void *context, Ector_Surface *ector, Eina_Bool do_async);
@@ -1527,6 +1078,8 @@ struct _Evas_Func
Evas_Filter_Support (*gfx_filter_supports) (void *engine, Evas_Filter_Command *cmd);
Eina_Bool (*gfx_filter_process) (void *engine, Evas_Filter_Command *cmd);
+ void (*font_glyphs_gc_collect) (void *engine, float ratio, int *texture_size, int *atlas_size, Eina_Bool only_when_requested);
+
unsigned int info_size;
};
@@ -1535,19 +1088,12 @@ struct _Evas_Image_Save_Func
int (*image_save) (RGBA_Image *im, const char *file, const char *key, int quality, int compress, const char *encoding);
};
-struct _Vg_File_Anim_Data_Marker
-{
- Eina_Stringshare *name;
- int startframe;
- int endframe;
-};
-
struct _Vg_File_Anim_Data
{
unsigned int frame_num; //current frame number
unsigned int frame_cnt; //total frame count
float duration; //animation duration
- Eina_Inarray *markers; //array of Vg_File_Anim_Data_Marker
+ Eina_Inarray *markers; //array of Efl_Gfx_Frame_Sector_Data
};
struct _Vg_File_Data
@@ -1558,12 +1104,17 @@ struct _Vg_File_Data
Vg_File_Anim_Data *anim_data; //only when animation supported.
int ref;
int w, h; //default size
+ int minw, minh;
+ double bl, bt, br, bb;
Eina_List *vp_list; //Value providers.
void *loader_data; //loader specific local data
Eina_Bool static_viewbox: 1;
Eina_Bool preserve_aspect : 1; //Used in SVG
+
+ Eina_Bool shareable: 1;
+ Eina_Bool is_wrap: 1;
};
struct _Evas_Vg_Load_Func
@@ -1623,6 +1174,7 @@ void evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info
void evas_object_callbacks_finalized(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj);
void evas_object_callbacks_event_catcher_add(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, const Efl_Callback_Array_Item *array);
void evas_object_callbacks_event_catcher_del(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, const Efl_Callback_Array_Item *array);
+void evas_object_callbacks_shutdown(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj);
void evas_object_event_callback_call(Evas_Object *obj, Evas_Object_Protected_Data *pd, Evas_Callback_Type type, void *event_info, int event_id, const Efl_Event_Description *efl_event_desc);
Eina_List *evas_event_objects_event_list(Evas *e, Evas_Object *stop, int x, int y);
@@ -1670,6 +1222,7 @@ void evas_call_smarts_calculate(Evas *e);
void evas_object_smart_bounding_box_update(Evas_Object_Protected_Data *obj);
void evas_object_smart_need_bounding_box_update(Evas_Smart_Data *o, Evas_Object_Protected_Data *obj);
Eina_Bool evas_object_smart_changed_get(Evas_Object_Protected_Data *obj);
+Eina_Bool evas_object_vg_changed_get(Evas_Object_Protected_Data *obj);
void evas_object_smart_attach(Evas_Object *eo_obj, Evas_Smart *s);
void _evas_post_event_callback_call_real(Evas *e, Evas_Public_Data* e_pd, int min_event_id);
#define _evas_post_event_callback_call(e, pd, id) do { \
@@ -1707,6 +1260,7 @@ void evas_unref_queue_image_put(Evas_Public_Data *pd, void *image);
void evas_unref_queue_glyph_put(Evas_Public_Data *pd, void *glyph);
void evas_unref_queue_texts_put(Evas_Public_Data *pd, void *glyph);
void evas_post_render_job_add(Evas_Public_Data *pd, void (*func)(void *), void *data);
+void evas_render_post_change_object_push(Evas_Object_Protected_Data *obj);
void evas_draw_image_map_async_check(Evas_Object_Protected_Data *obj,
void *engine, void *data, void *context, void *surface,
@@ -1726,61 +1280,6 @@ Eina_Bool _efl_canvas_object_efl_gfx_entity_size_set_block(Eo *eo_obj, Evas_Obje
void _evas_focus_device_invalidate_cb(void *data, const Efl_Event *ev);
-/* Node functions. */
-void evas_canvas3d_node_traverse(Evas_Canvas3D_Node *from, Evas_Canvas3D_Node *to, Evas_Canvas3D_Node_Traverse_Type type, Eina_Bool skip, Evas_Canvas3D_Node_Func func, void *data);
-void evas_canvas3d_node_tree_traverse(Evas_Canvas3D_Node *root, Evas_Canvas3D_Tree_Traverse_Type type, Eina_Bool skip, Evas_Canvas3D_Node_Func func, void *data);
-Eina_Bool evas_canvas3d_node_mesh_collect(Evas_Canvas3D_Node *node, void *data);
-Eina_Bool evas_canvas3d_node_color_node_mesh_collect(Evas_Canvas3D_Node *node, void *data);
-Eina_Bool evas_canvas3d_node_light_collect(Evas_Canvas3D_Node *node, void *data);
-void evas_canvas3d_node_scene_root_add(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene);
-void evas_canvas3d_node_scene_root_del(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene);
-void evas_canvas3d_node_scene_camera_add(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene);
-void evas_canvas3d_node_scene_camera_del(Evas_Canvas3D_Node *node, Evas_Canvas3D_Scene *scene);
-Eina_Bool node_aabb_update(Evas_Canvas3D_Node *node, void *data EINA_UNUSED);
-
-/* Camera functions. */
-void evas_canvas3d_camera_node_add(Evas_Canvas3D_Camera *camera, Evas_Canvas3D_Node *node);
-void evas_canvas3d_camera_node_del(Evas_Canvas3D_Camera *camera, Evas_Canvas3D_Node *node);
-
-/* Light functions. */
-void evas_canvas3d_light_node_add(Evas_Canvas3D_Light *light, Evas_Canvas3D_Node *node);
-void evas_canvas3d_light_node_del(Evas_Canvas3D_Light *light, Evas_Canvas3D_Node *node);
-
-/* Mesh functions. */
-void evas_canvas3d_mesh_node_add(Evas_Canvas3D_Mesh *mesh, Evas_Canvas3D_Node *node);
-void evas_canvas3d_mesh_node_del(Evas_Canvas3D_Mesh *mesh, Evas_Canvas3D_Node *node);
-void evas_canvas3d_mesh_interpolate_position_get(Eina_Vector3 *out, const Evas_Canvas3D_Vertex_Buffer *pos0, const Evas_Canvas3D_Vertex_Buffer *pos1, Evas_Real weight, int index);
-void evas_canvas3d_mesh_interpolate_vertex_buffer_get(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Canvas3D_Vertex_Attrib attrib, Evas_Canvas3D_Vertex_Buffer *buffer0, Evas_Canvas3D_Vertex_Buffer *buffer1, Evas_Real *weight);
-void evas_canvas3d_mesh_file_md2_set(Evas_Canvas3D_Mesh *mesh, const char *file);
-void evas_canvas3d_mesh_save_obj(Evas_Canvas3D_Mesh *mesh, const char *file, Evas_Canvas3D_Mesh_Frame *f);
-void evas_canvas3d_mesh_file_obj_set(Evas_Canvas3D_Mesh *mesh, const char *file);
-Eina_Bool evas_canvas3d_mesh_aabb_add_to_frame(Evas_Canvas3D_Mesh_Data *pd, int frame, int stride);
-void evas_canvas3d_mesh_file_eet_set(Evas_Canvas3D_Mesh *mesh, const char *file);
-void evas_canvas3d_mesh_save_eet(Evas_Canvas3D_Mesh *mesh, const char *file, Evas_Canvas3D_Mesh_Frame *f);
-void evas_canvas3d_mesh_file_ply_set(Evas_Canvas3D_Mesh *mesh, const char *file);
-void evas_canvas3d_mesh_save_ply(Evas_Canvas3D_Mesh *mesh, const char *file, Evas_Canvas3D_Mesh_Frame *f);
-
-/* Texture functions. */
-void evas_canvas3d_texture_material_add(Evas_Canvas3D_Texture *texture, Evas_Canvas3D_Material *material);
-void evas_canvas3d_texture_material_del(Evas_Canvas3D_Texture *texture, Evas_Canvas3D_Material *material);
-
-
-/* Material functions. */
-void evas_canvas3d_material_mesh_add(Evas_Canvas3D_Material *material, Evas_Canvas3D_Mesh *mesh);
-void evas_canvas3d_material_mesh_del(Evas_Canvas3D_Material *material, Evas_Canvas3D_Mesh *mesh);
-
-/* Scene functions. */
-void evas_canvas3d_scene_data_init(Evas_Canvas3D_Scene_Public_Data *data);
-void evas_canvas3d_scene_data_fini(Evas_Canvas3D_Scene_Public_Data *data);
-
-/* Eet saver/loader functions */
-Evas_Canvas3D_File_Eet *_evas_canvas3d_eet_file_new(void);
-Eet_Data_Descriptor* _evas_canvas3d_eet_file_get();
-void _evas_canvas3d_eet_file_init();
-void _evas_canvas3d_eet_descriptor_shutdown();
-void _evas_canvas3d_eet_file_free(Evas_Canvas3D_File_Eet* eet_file);
-
-
/* Filters */
void evas_filter_init(void);
void evas_filter_shutdown(void);
@@ -1793,29 +1292,6 @@ void _efl_gfx_mapping_update(Eo *eo_obj);
/* Ector */
Ector_Surface *evas_ector_get(Evas_Public_Data *evas);
-/* Temporary save/load functions */
-void evas_common_load_model_from_file(Evas_Canvas3D_Mesh *model, const char *file);
-void evas_common_load_model_from_eina_file(Evas_Canvas3D_Mesh *model, const Eina_File *file);
-void evas_common_save_model_to_file(const Evas_Canvas3D_Mesh *model, const char *file, Evas_Canvas3D_Mesh_Frame *f);
-void evas_model_load_file_eet(Evas_Canvas3D_Mesh *mesh, Eina_File *file);
-void evas_model_load_file_md2(Evas_Canvas3D_Mesh *mesh, Eina_File *file);
-void evas_model_load_file_obj(Evas_Canvas3D_Mesh *mesh, Eina_File *file);
-void evas_model_load_file_ply(Evas_Canvas3D_Mesh *mesh, Eina_File *file);
-void evas_model_save_file_eet(const Evas_Canvas3D_Mesh *mesh, const char *file, Evas_Canvas3D_Mesh_Frame *f);
-void evas_model_save_file_obj(const Evas_Canvas3D_Mesh *mesh, const char *file, Evas_Canvas3D_Mesh_Frame *f);
-void evas_model_save_file_ply(const Evas_Canvas3D_Mesh *mesh, const char *file, Evas_Canvas3D_Mesh_Frame *f);
-
-/* Primitives functions */
-void evas_common_set_model_from_primitive(Evas_Canvas3D_Mesh *model, int frame, Evas_Canvas3D_Primitive_Data *primitive);
-void evas_model_set_from_square_primitive(Evas_Canvas3D_Mesh *mesh, int frame);
-void evas_model_set_from_cube_primitive(Evas_Canvas3D_Mesh *mesh, int frame);
-void evas_model_set_from_cylinder_primitive(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Canvas3D_Primitive_Mode mode, int precision, Eina_Vector2 tex_scale);
-void evas_model_set_from_cone_primitive(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Canvas3D_Primitive_Mode mode, int precision, Eina_Vector2 tex_scale);
-void evas_model_set_from_sphere_primitive(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Canvas3D_Primitive_Mode mode, int precision, Eina_Vector2 tex_scale);
-void evas_model_set_from_torus_primitive(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Real ratio, int precision, Eina_Vector2 tex_scale);
-void evas_model_set_from_surface_primitive(Evas_Canvas3D_Mesh *mesh, int frame, Evas_Canvas3D_Surface_Func func, int precision, Eina_Vector2 tex_scale);
-void evas_model_set_from_terrain_primitive(Evas_Canvas3D_Mesh *mesh, int frame, int precision, Eina_Vector2 tex_scale);
-
/* Filter functions */
Eina_Bool evas_filter_object_render(Eo *eo_obj, Evas_Object_Protected_Data *obj, void *engine, void *output, void *context, void *surface, int x, int y, Eina_Bool do_async, Eina_Bool alpha);
@@ -1863,8 +1339,8 @@ int evas_async_events_init(void);
int evas_async_events_shutdown(void);
int evas_async_target_del(const void *target);
-EAPI int evas_thread_main_loop_begin(void);
-EAPI int evas_thread_main_loop_end(void);
+EVAS_API int evas_thread_main_loop_begin(void);
+EVAS_API int evas_thread_main_loop_end(void);
void _evas_preload_thread_init(void);
void _evas_preload_thread_shutdown(void);
@@ -1879,16 +1355,16 @@ Eina_Bool evas_preload_pthread_wait(Evas_Preload_Pthread *work, double wait);
void _evas_walk(Evas_Public_Data *e_pd);
void _evas_unwalk(Evas_Public_Data *e_pd);
-EAPI void evas_module_task_register(Eina_Bool (*cancelled)(void *data), void *data);
-EAPI void evas_module_task_unregister(void);
+EVAS_API void evas_module_task_register(Eina_Bool (*cancelled)(void *data), void *data);
+EVAS_API void evas_module_task_unregister(void);
// expose for use in engines
-EAPI int _evas_module_engine_inherit(Evas_Func *funcs, char *name, size_t info);
-EAPI const char *_evas_module_libdir_get(void);
+EVAS_API int _evas_module_engine_inherit(Evas_Func *funcs, char *name, size_t info);
+EVAS_API const char *_evas_module_libdir_get(void);
const char *_evas_module_datadir_get(void);
-EAPI Eina_List *_evas_canvas_image_data_unset(Evas *eo_e);
-EAPI void _evas_canvas_image_data_regenerate(Eina_List *list);
-
+EVAS_API Eina_List *_evas_canvas_image_data_unset(Evas *eo_e);
+EVAS_API void _evas_canvas_image_data_regenerate(Eina_List *list);
+void _evas_image_preload_update(Eo *eo_obj, Eina_File *f);
Eina_Bool evas_render_mapped(Evas_Public_Data *e, Evas_Object *obj,
Evas_Object_Protected_Data *source_pd,
void *context, void *output, void *surface,
@@ -1901,7 +1377,7 @@ void evas_render_object_recalc(Evas_Object_Protected_Data *obj);
void evas_render_proxy_subrender(Evas *eo_e, void *output, Evas_Object *eo_source, Evas_Object *eo_proxy, Evas_Object_Protected_Data *proxy_obj, Eina_Bool source_clip, Eina_Bool do_async);
Eina_Bool evas_map_inside_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y);
-Eina_Bool evas_map_coords_get(const Evas_Map *m, double x, double y, double *mx, double *my, int grab);
+EVAS_API Eina_Bool evas_map_coords_get(const Evas_Map *m, double x, double y, double *mx, double *my, int grab);
Eina_Bool evas_object_map_update(Evas_Object *obj, int x, int y, int imagew, int imageh, int uvw, int uvh);
void evas_map_object_move_diff_set(Evas_Map *m, Evas_Coord diff_x, Evas_Coord diff_y);
@@ -1934,7 +1410,7 @@ void _evas_focus_dispatch_event(Evas_Object_Protected_Data *obj,
Efl_Input_Device *seat, Eina_Bool in);
Evas_Pointer_Data *_evas_pointer_data_by_device_get(Evas_Public_Data *edata, Efl_Input_Device *pointer);
Evas_Pointer_Data *_evas_pointer_data_add(Evas_Public_Data *edata, Efl_Input_Device *pointer);
-void _evas_pointer_data_remove(Evas_Public_Data *edata, Efl_Input_Device *pointer);
+void _evas_pointer_data_remove(Evas_Public_Data *edata, Efl_Input_Device *pointer, Eina_Bool nofree);
Eina_List *_evas_pointer_list_in_rect_get(Evas_Public_Data *edata,
Evas_Object *obj,
Evas_Object_Protected_Data *obj_data,
@@ -1959,8 +1435,6 @@ extern Eina_Cow *evas_object_proxy_cow;
extern Eina_Cow *evas_object_map_cow;
extern Eina_Cow *evas_object_state_cow;
-extern Eina_Cow *evas_object_3d_cow;
-
extern Eina_Cow *evas_object_image_pixels_cow;
extern Eina_Cow *evas_object_image_load_opts_cow;
extern Eina_Cow *evas_object_image_state_cow;
@@ -1981,13 +1455,13 @@ Evas_Load_Error _efl_gfx_image_load_error_to_evas_load_error(Eina_Error err);
while (0);
/* BEGIN: events to maintain compatibility with legacy */
-EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_SHOW;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_SHOW;
#define EFL_GFX_ENTITY_EVENT_SHOW (&(_EFL_GFX_ENTITY_EVENT_SHOW))
-EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_HIDE;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_HIDE;
#define EFL_GFX_ENTITY_EVENT_HIDE (&(_EFL_GFX_ENTITY_EVENT_HIDE))
-EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_PRELOAD;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_PRELOAD;
#define EFL_GFX_IMAGE_EVENT_IMAGE_PRELOAD (&(_EFL_GFX_ENTITY_EVENT_IMAGE_PRELOAD))
-EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_UNLOAD;
+EVAS_API EVAS_API_WEAK extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_IMAGE_UNLOAD;
#define EFL_GFX_IMAGE_EVENT_IMAGE_UNLOAD (&(_EFL_GFX_ENTITY_EVENT_IMAGE_UNLOAD))
/* END: events to maintain compatibility with legacy */
@@ -2079,8 +1553,5 @@ _gfx_to_evas_render_op(Efl_Gfx_Render_Op rop)
}
#endif
-#undef EAPI
-#define EAPI
-
#endif
diff --git a/src/lib/evas/include/meson.build b/src/lib/evas/include/meson.build
index b9f90fce0f..6e8273fcac 100644
--- a/src/lib/evas/include/meson.build
+++ b/src/lib/evas/include/meson.build
@@ -14,6 +14,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-gchd', '@INPUT@'])
endforeach
diff --git a/src/lib/evas/main.c b/src/lib/evas/main.c
index 2c8bccbe94..25372be072 100644
--- a/src/lib/evas/main.c
+++ b/src/lib/evas/main.c
@@ -2,7 +2,7 @@
#include "evas_private.h"
static Evas_Version _version = { VMAJ, VMIN, VMIC, VREV };
-EAPI Evas_Version *evas_version = &_version;
+EVAS_API Evas_Version *evas_version = &_version;
int _evas_alloc_error = 0;
static int _evas_debug_init = 0;
@@ -13,7 +13,7 @@ static enum {
} _evas_debug_show = _EVAS_DEBUG_DEFAULT;
static int _evas_debug_abort = 0;
-EAPI Evas_Alloc_Error
+EVAS_API Evas_Alloc_Error
evas_alloc_error(void)
{
return _evas_alloc_error;
diff --git a/src/lib/evas/meson.build b/src/lib/evas/meson.build
index d2202389b6..1bf5fa0801 100644
--- a/src/lib/evas/meson.build
+++ b/src/lib/evas/meson.build
@@ -7,15 +7,22 @@
png = dependency('libpng')
tiff = dependency('libtiff-4', required: get_option('evas-loaders-disabler').contains('tiff') == false)
giflib = cc.find_library('gif')
-webp = dependency('libwebp', required: get_option('evas-loaders-disabler').contains('webp') == false)
+webp = dependency('libwebp', version: ['>=0.5.0'], required: get_option('evas-loaders-disabler').contains('webp') == false)
+webpdemux = dependency('libwebpdemux', version: ['>=0.5.0'], required: get_option('evas-loaders-disabler').contains('webp') == false)
+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)
evas_image_loaders_file = [
+ ['avif', 'shared', [libavif]],
['bmp', 'shared', []],
['eet', 'static', [eet]],
['generic', 'shared', [rt]],
['gif', 'shared', [giflib]],
+ ['heif', 'shared', [heif]],
['ico', 'shared', []],
['jpeg', 'static', [jpeg]],
+ ['jp2k', 'shared', [libopenjp2]],
['pmaps', 'shared', []],
['png', 'static', [png]],
['psd', 'shared', []],
@@ -23,11 +30,12 @@ evas_image_loaders_file = [
['tgv', 'shared', [rg_etc, lz4]],
['tiff', 'shared', [tiff]],
['wbmp', 'shared', []],
- ['webp', 'shared', [webp]],
+ ['webp', 'shared', [webp, webpdemux]],
['xpm', 'shared', []]
]
evas_image_savers_file = [
+ ['avif', 'shared', [libavif]],
['eet', 'static', [eet]],
['jpeg', 'static', [jpeg]],
['png', 'static', [png]],
@@ -45,12 +53,11 @@ evas_vg_loaders_file = [
evas_vg_savers_file = ['eet', 'svg']
-evas_model_savers_file = ['eet', 'obj', 'ply']
-
-evas_model_loaders_file = ['eet', 'md2', 'obj', 'ply']
-
rel_evas_modules = join_paths('..', '..', '..', 'modules', 'evas', 'engines', 'software_generic')
-evas_deps = [eo, eet, eina, efl, emile, ector, ecore, buildsystem, intl]
+evas_deps = [eo, eet, eina, efl, emile, ector, ecore, draw, buildsystem]
+evas_ext_deps = [vg_common, draw_simple]
+evas_ext_none_static_deps = [buildsystem_simple, intl, m, valgrind, libunibreak, lua]
+
pub_eo_file_target = []
priv_eo_files = []
evas_include_directories = []
@@ -76,6 +83,7 @@ foreach eo_file : pub_legacy_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-gchd', '@INPUT@'])
endforeach
@@ -90,6 +98,7 @@ foreach eo_file : pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-gchd', '@INPUT@'])
endforeach
@@ -108,6 +117,7 @@ foreach eo_file : pub_eo_types_files
command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-ghd', '@INPUT@'])
endforeach
@@ -116,6 +126,7 @@ eolian_include_directories += ['-I', meson.current_source_dir()]
evas_src += pub_eo_file_target
evas_header_src = [
+ 'evas_api.h',
'Evas.h',
'Evas_Common.h',
'Evas_Eo.h',
@@ -128,31 +139,26 @@ evas_header_src = [
evas_include_directories += [
include_directories('.'),
include_directories('common'),
- include_directories('common3d'),
- include_directories(join_paths('common3d', 'save_load')),
include_directories('include'),
include_directories('filters'),
- vg_common_inc_dir
]
-evas_src += [
+evas_src += files([
'main.c'
-]
+])
evas_src_opt = [ ]
-evas_src += vg_common_src
-
-evas_deps += dependency('freetype2')
+evas_ext_none_static_deps += dependency('freetype2')
if (get_option('fontconfig'))
config_h.set('HAVE_FONTCONFIG', '1')
- evas_deps += dependency('fontconfig')
+ evas_ext_none_static_deps += dependency('fontconfig')
endif
if (get_option('fribidi'))
config_h.set('HAVE_FRIBIDI', '1')
- evas_deps += dependency('fribidi')
+ evas_ext_none_static_deps += dependency('fribidi')
endif
if (get_option('pixman'))
@@ -160,16 +166,16 @@ if (get_option('pixman'))
foreach support : pixman_support
config_h.set(support, '1')
endforeach
- evas_deps += dependency('pixman-1')
+ evas_ext_none_static_deps += dependency('pixman-1')
endif
if (get_option('hyphen'))
config_h.set('HAVE_HYPHEN', '1')
hyphen = dependency('hyphen', required : false)
if hyphen.found() == false
- evas_deps += cc.find_library('hyphen')
+ evas_ext_none_static_deps += cc.find_library('hyphen')
endif
- evas_deps += hyphen
+ evas_ext_none_static_deps += hyphen
config_h.set_quoted('EVAS_DICTS_HYPHEN_DIR', get_option('dictionaries-hyphen-dir'))
endif
@@ -179,19 +185,18 @@ subdir('canvas')
subdir('gesture')
subdir('filters')
subdir('cache')
-subdir('common3d')
subdir('file')
subdir('vg')
gl_deps = []
if get_option('harfbuzz')
- evas_deps += dependency('harfbuzz')
+ evas_ext_none_static_deps += dependency('harfbuzz')
config_h.set('HAVE_HARFBUZZ', '1')
endif
if get_option('wl')
- evas_deps += wayland_protocol
+ evas_ext_none_static_deps += wayland_protocol
endif
@@ -208,15 +213,15 @@ endif
evas_link = [ ]
evas_pub_deps = [eina, ecore, ector, emile]
-if cpu_sse3 == true or cpu_neon == true and cpu_neon_intrinsics == false
+if cpu_sse3 == true or cpu_neon == true and cpu_neon_intrinsics == false
evas_opt = static_library('evas_opt',
- sources: evas_src_opt,
+ sources: [evas_src_opt, pub_eo_file_target, priv_eo_file_target],
include_directories:
[ include_directories('../../..') ] +
evas_include_directories +
[vg_common_inc_dir],
c_args: native_arch_opt_c_args,
- dependencies: [eina, eo, ector, emile, evas_deps, m],
+ dependencies: [eina, eo, ector, emile, evas_deps, evas_ext_none_static_deps],
)
evas_link += [ evas_opt ]
endif
@@ -284,42 +289,34 @@ foreach loader : evas_vg_savers_file
endif
endforeach
-foreach loader : evas_model_loaders_file
- file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'model_loaders', loader, 'evas_model_load_'+loader+'.c')
-
- evas_static_list += [declare_dependency(
- sources: file,
- )]
-endforeach
+evas_ext_deps += evas_static_list
-foreach loader : evas_model_savers_file
- file = join_paths(meson.source_root(), 'src', 'modules', 'evas', 'model_savers', loader, 'evas_model_save_'+loader+'.c')
+evas_ext_deps += declare_dependency(
+ link_with: evas_link,
+)
- evas_static_list += [declare_dependency(
- sources: file,
- )]
-endforeach
+evas_ext_deps += evas_ext_none_static_deps
evas_lib = library('evas',
include_directories: evas_include_directories + [vg_common_inc_dir],
sources : [evas_src, pub_eo_file_target, priv_eo_file_target],
- dependencies: [evas_deps, m, draw, valgrind, libunibreak, evas_static_list],
+ dependencies: [evas_deps, evas_ext_deps],
link_with: evas_link,
install: true,
- c_args : '-DPACKAGE_DATA_DIR="'+join_paths(dir_data, 'evas')+'"',
+ c_args : [package_c_args, '-DEVAS_BUILD'],
version : meson.project_version()
)
evas = declare_dependency(
link_with : [evas_lib],
sources: pub_eo_file_target,
- dependencies : [m] + evas_pub_deps + evas_deps,
+ dependencies : evas_pub_deps,
include_directories: evas_include_directories + [vg_common_inc_dir] + [include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer'))],
)
evas_bin = declare_dependency(
link_with : [evas_lib],
- dependencies : [eina, ecore, ector, emile, lua],
+ dependencies : [eina, ecore, ector, emile],
include_directories : evas_include_directories
)
@@ -336,3 +333,5 @@ install_headers(evas_header_src,
pub_eo_files = []
package_eo_subdirs += ['canvas', 'gesture']
package_header_subdirs += ['canvas', 'gesture']
+#special case becase evas has a more structures subfolder
+efl_one_include_dirs += evas_include_directories
diff --git a/src/lib/evas/software_generic/meson.build b/src/lib/evas/software_generic/meson.build
index 187002a6af..76d589ce0b 100644
--- a/src/lib/evas/software_generic/meson.build
+++ b/src/lib/evas/software_generic/meson.build
@@ -26,6 +26,7 @@ foreach eo_file : raw_pub_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
+ '-e', 'EVAS_API',
'-gchd', '@INPUT@'])
endforeach
@@ -33,4 +34,6 @@ foreach file : raw_evas_src
evas_src += files(join_paths(rel_evas_modules, file))
endforeach
+evas_include_directories += include_directories('.')
+
subdir('filters')
diff --git a/src/lib/evas/vg/evas_vg_cache.c b/src/lib/evas/vg/evas_vg_cache.c
index c980046ff1..7c3bb00403 100644
--- a/src/lib/evas/vg/evas_vg_cache.c
+++ b/src/lib/evas/vg/evas_vg_cache.c
@@ -153,14 +153,21 @@ _evas_cache_vg_entry_free_cb(void *data)
if (vg_entry->vfd->ref <= 0)
{
- Eina_Strbuf *hash_key = eina_strbuf_new();
- eina_strbuf_append_printf(hash_key, "%s/%s/%p",
- eina_file_filename_get(vg_entry->file),
- vg_entry->key,
- vg_entry->evas);
- if (!eina_hash_del(vg_cache->vfd_hash, eina_strbuf_string_get(hash_key), vg_entry->vfd))
- ERR("Failed to delete vfd = (%p) from hash", vg_entry->vfd);
- eina_strbuf_free(hash_key);
+ if (vg_entry->vfd->shareable)
+ {
+ Eina_Strbuf *hash_key = eina_strbuf_new();
+ eina_strbuf_append_printf(hash_key, "%s/%s/%p",
+ eina_file_filename_get(vg_entry->file),
+ vg_entry->key,
+ vg_entry->evas);
+ if (!eina_hash_del(vg_cache->vfd_hash, eina_strbuf_string_get(hash_key), vg_entry->vfd))
+ ERR("Failed to delete vfd = (%p) from hash", vg_entry->vfd);
+ eina_strbuf_free(hash_key);
+ }
+ else
+ {
+ vg_entry->vfd->loader->file_close(vg_entry->vfd);
+ }
}
}
@@ -220,13 +227,23 @@ _root_update(Vg_Cache_Entry *vg_entry)
}
static void
+_local_wrap_transform(Efl_VG *root, Vg_File_Data *vfd)
+{
+ Eina_Matrix3 m;
+
+ eina_matrix3_identity(&m);
+ eina_matrix3_translate(&m, -vfd->bl, -vfd->bt);
+ efl_canvas_vg_node_transformation_set(root, &m);
+}
+
+static void
_local_transform(Efl_VG *root, double w, double h, Vg_File_Data *vfd)
{
double sx = 0, sy= 0, scale;
Eina_Matrix3 m;
if (!vfd->static_viewbox) return;
- if (vfd->view_box.w == w && vfd->view_box.h == h) return;
+ if (EINA_DBL_EQ(vfd->view_box.w, w) && EINA_DBL_EQ(vfd->view_box.h, h)) return;
sx = w / vfd->view_box.w;
sy = h / vfd->view_box.h;
@@ -315,28 +332,36 @@ evas_cache_vg_shutdown(void)
free(key);
eina_list_free(vg_cache->vg_surface_keys);
- eina_hash_free(vg_cache->vfd_hash);
eina_hash_free(vg_cache->vg_entry_hash);
+ eina_hash_free(vg_cache->vfd_hash);
free(vg_cache);
vg_cache = NULL;
}
Vg_File_Data *
-evas_cache_vg_file_open(const Eina_File *file, const char *key, Evas *e)
+evas_cache_vg_file_open(const Eina_File *file, const char *key, Evas *e, Eina_Bool shareable)
{
Vg_File_Data *vfd;
Eina_Strbuf *hash_key;
- hash_key = eina_strbuf_new();
- eina_strbuf_append_printf(hash_key, "%s/%s/%p", eina_file_filename_get(file), key, e);
- vfd = eina_hash_find(vg_cache->vfd_hash, eina_strbuf_string_get(hash_key));
- if (!vfd)
+ if (shareable)
+ {
+ hash_key = eina_strbuf_new();
+ eina_strbuf_append_printf(hash_key, "%s/%s/%p", eina_file_filename_get(file), key, e);
+ vfd = eina_hash_find(vg_cache->vfd_hash, eina_strbuf_string_get(hash_key));
+ if (!vfd)
+ {
+ vfd = _vg_load_from_file(file, key);
+ //File exists.
+ if (vfd) eina_hash_add(vg_cache->vfd_hash, eina_strbuf_string_get(hash_key), vfd);
+ }
+ eina_strbuf_free(hash_key);
+ }
+ else
{
vfd = _vg_load_from_file(file, key);
- //File exists.
- if (vfd) eina_hash_add(vg_cache->vfd_hash, eina_strbuf_string_get(hash_key), vfd);
}
- eina_strbuf_free(hash_key);
+ if (vfd) vfd->shareable = shareable;
return vfd;
}
@@ -380,8 +405,7 @@ evas_cache_vg_entry_create(Evas *evas,
}
eina_strbuf_free(hash_key);
vg_entry->ref++;
-
- vg_entry->vfd = evas_cache_vg_file_open(file, key, vg_entry->evas);
+ vg_entry->vfd = evas_cache_vg_file_open(file, key, vg_entry->evas, vp_list ? EINA_FALSE : EINA_TRUE);
//No File??
if (!vg_entry->vfd)
{
@@ -418,8 +442,8 @@ evas_cache_vg_anim_sector_set(const Vg_Cache_Entry* vg_entry, const char *name,
if (!vg_entry->vfd->anim_data->markers) return EINA_FALSE;
if (!name) return EINA_FALSE;
- Vg_File_Anim_Data_Marker *marker;
- Vg_File_Anim_Data_Marker new_marker;
+ Efl_Gfx_Frame_Sector_Data *marker;
+ Efl_Gfx_Frame_Sector_Data new_marker;
int i = 0;
EINA_INARRAY_FOREACH(vg_entry->vfd->anim_data->markers, marker)
@@ -449,7 +473,7 @@ evas_cache_vg_anim_sector_get(const Vg_Cache_Entry* vg_entry, const char *name,
if (!vg_entry->vfd->anim_data->markers) return EINA_FALSE;
if (!name) return EINA_FALSE;
- Vg_File_Anim_Data_Marker *marker;
+ Efl_Gfx_Frame_Sector_Data *marker;
EINA_INARRAY_FOREACH(vg_entry->vfd->anim_data->markers, marker)
{
if (!strcmp(marker->name, name))
@@ -462,6 +486,15 @@ evas_cache_vg_anim_sector_get(const Vg_Cache_Entry* vg_entry, const char *name,
return EINA_FALSE;
}
+Eina_Inarray*
+evas_cache_vg_anim_sector_list_get(const Vg_Cache_Entry* vg_entry)
+{
+ if (!vg_entry) return EINA_FALSE;
+ if (!vg_entry->vfd->anim_data) return EINA_FALSE;
+ if (!vg_entry->vfd->anim_data->markers) return EINA_FALSE;
+ return vg_entry->vfd->anim_data->markers;
+}
+
Efl_VG*
evas_cache_vg_tree_get(Vg_Cache_Entry *vg_entry, unsigned int frame_num)
{
@@ -474,9 +507,13 @@ evas_cache_vg_tree_get(Vg_Cache_Entry *vg_entry, unsigned int frame_num)
//No need to update.
if (vfd->anim_data)
{
- if (vg_entry->root &&
- vfd->anim_data->frame_num == frame_num)
- return vg_entry->root;
+ if ((vg_entry->w == vfd->view_box.w) &&
+ (vg_entry->h == vfd->view_box.h))
+ {
+ if (vg_entry->root &&
+ vfd->anim_data->frame_num == frame_num)
+ return vg_entry->root;
+ }
}
else
{
@@ -496,7 +533,10 @@ evas_cache_vg_tree_get(Vg_Cache_Entry *vg_entry, unsigned int frame_num)
_root_update(vg_entry);
- _local_transform(vg_entry->root, vg_entry->w, vg_entry->h, vfd);
+ if (vfd->is_wrap)
+ _local_wrap_transform(vg_entry->root, vfd);
+ else
+ _local_transform(vg_entry->root, vg_entry->w, vg_entry->h, vfd);
return vg_entry->root;
}
@@ -529,11 +569,33 @@ evas_cache_vg_entry_default_size_get(const Vg_Cache_Entry *vg_entry)
return EINA_SIZE2D(vg_entry->vfd->w, vg_entry->vfd->h);
}
+Eina_Size2D
+evas_cache_vg_entry_default_min_size_get(const Vg_Cache_Entry *vg_entry)
+{
+ if (!vg_entry) return EINA_SIZE2D(0, 0);
+ return EINA_SIZE2D(vg_entry->vfd->minw, vg_entry->vfd->minh);
+}
+
+Eina_Position2D
+evas_cache_vg_entry_default_position_get(const Vg_Cache_Entry *vg_entry)
+{
+ if (!vg_entry) return EINA_POSITION2D(0, 0);
+ return EINA_POSITION2D(vg_entry->vfd->bl, vg_entry->vfd->bt);
+}
+
+void
+evas_cache_vg_entry_wrap_mode_set(const Vg_Cache_Entry *vg_entry, Eina_Bool wrap_mode)
+{
+ if (!vg_entry) return;
+ vg_entry->vfd->is_wrap = wrap_mode;
+}
+
Eina_Bool
evas_cache_vg_entry_file_save(Vg_Cache_Entry *vg_entry, const char *file, const char *key, const Efl_File_Save_Info *info)
{
Vg_File_Data *vfd =
- evas_cache_vg_file_open(vg_entry->file, vg_entry->key, vg_entry->evas);
+ evas_cache_vg_file_open(vg_entry->file, vg_entry->key, vg_entry->evas
+ ,vg_entry->vfd ? (vg_entry->vfd->vp_list ? EINA_FALSE : EINA_TRUE): EINA_TRUE);
if (!vfd) return EINA_FALSE;
diff --git a/src/lib/evil/evil_dlfcn.c b/src/lib/evil/evil_dlfcn.c
index ef161cc782..a6ee3e1c9c 100644
--- a/src/lib/evil/evil_dlfcn.c
+++ b/src/lib/evil/evil_dlfcn.c
@@ -39,7 +39,7 @@ _dl_get_last_error(char *desc)
_dl_err_viewed = 0;
}
-void *
+EVIL_API void *
dlopen(const char* path, int mode EVIL_UNUSED)
{
HMODULE module = NULL;
@@ -95,7 +95,7 @@ dlopen(const char* path, int mode EVIL_UNUSED)
return module;
}
-int
+EVIL_API int
dlclose(void* handle)
{
if (FreeLibrary(handle))
@@ -107,7 +107,7 @@ dlclose(void* handle)
}
}
-void *
+EVIL_API void *
dlsym(void *handle, const char *symbol)
{
FARPROC fp = NULL;
@@ -157,7 +157,7 @@ dlsym(void *handle, const char *symbol)
return fp;
}
-char *
+EVIL_API char *
dlerror (void)
{
if (!_dl_err_viewed)
@@ -184,7 +184,7 @@ _dladdr_comp(const void *p1, const void *p2)
return ( *(int *)p1 - *(int *)p2);
}
-int
+EVIL_API int
dladdr (const void *addr, Dl_info *info)
{
TCHAR tpath[PATH_MAX];
diff --git a/src/lib/evil/evil_dlfcn.h b/src/lib/evil/evil_dlfcn.h
index 22f48b72ca..3b274e0aa6 100644
--- a/src/lib/evil/evil_dlfcn.h
+++ b/src/lib/evil/evil_dlfcn.h
@@ -2,6 +2,7 @@
#define __EVIL_DLFCN_H__
+#include "evil_private.h"
#include <limits.h>
@@ -142,7 +143,7 @@ struct Dl_info
*
* @ingroup Evil_Dlfcn
*/
-EAPI void *dlopen(const char* path, int mode);
+EVIL_API void *dlopen(const char* path, int mode);
#ifndef HAVE_DLOPEN
# define HAVE_DLOPEN 1
#endif
@@ -168,7 +169,7 @@ EAPI void *dlopen(const char* path, int mode);
*
* @ingroup Evil_Dlfcn
*/
-EAPI int dlclose(void* handle);
+EVIL_API int dlclose(void* handle);
/**
* @brief Get the address of a symbol.
@@ -192,9 +193,9 @@ EAPI int dlclose(void* handle);
*
* @ingroup Evil_Dlfcn
*/
-EAPI void *dlsym(void* handle, const char* symbol);
+EVIL_API void *dlsym(void* handle, const char* symbol);
#ifndef HAVE_DLSYM
-#define HAVE_DLSYM 1
+# define HAVE_DLSYM 1
#endif
#ifdef _GNU_SOURCE
@@ -221,9 +222,9 @@ EAPI void *dlsym(void* handle, const char* symbol);
*
* @ingroup Evil_Dlfcn
*/
-EAPI int dladdr (const void *addr, Dl_info *info);
+EVIL_API int dladdr(const void *addr, Dl_info *info);
#ifndef HAVE_DLADDR
-#define HAVE_DLADDR 1
+# define HAVE_DLADDR 1
#endif
#endif /* _GNU_SOURCE */
@@ -248,7 +249,7 @@ EAPI int dladdr (const void *addr, Dl_info *info);
*
* @ingroup Evil_Dlfcn
*/
-EAPI char *dlerror (void);
+EVIL_API char *dlerror(void);
#endif /* __EVIL_DLFCN_H__ */
diff --git a/src/lib/evil/evil_fcntl.c b/src/lib/evil/evil_fcntl.c
index dd23b7b838..6c556a6cd7 100644
--- a/src/lib/evil/evil_fcntl.c
+++ b/src/lib/evil/evil_fcntl.c
@@ -31,7 +31,8 @@ _is_socket(SOCKET s)
*
*/
-int fcntl(int fd, int cmd, ...)
+EVIL_API int
+fcntl(int fd, int cmd, ...)
{
va_list va;
int res = -1;
@@ -113,7 +114,7 @@ int fcntl(int fd, int cmd, ...)
if (length != -1L)
res = 0;
}
- fl->l_len = length - fl->l_start - 1;
+ fl->l_len = length - fl->l_start;
pos = _lseek(fd, fl->l_start, fl->l_whence);
if (pos != -1L)
diff --git a/src/lib/evil/evil_fcntl.h b/src/lib/evil/evil_fcntl.h
index a54569681f..1930a18e7f 100644
--- a/src/lib/evil/evil_fcntl.h
+++ b/src/lib/evil/evil_fcntl.h
@@ -105,7 +105,7 @@ struct flock
*
* @ingroup Evil
*/
-EAPI int fcntl(int fd, int cmd, ...);
+EVIL_API int fcntl(int fd, int cmd, ...);
#endif /* __EVIL_FCNTL_H__ */
diff --git a/src/lib/evil/evil_langinfo.c b/src/lib/evil/evil_langinfo.c
index 5e0a344404..11b534dc5f 100644
--- a/src/lib/evil/evil_langinfo.c
+++ b/src/lib/evil/evil_langinfo.c
@@ -19,7 +19,7 @@ replace(char *prev, char *value)
return strdup (value);
}
-char *
+EVIL_API char *
nl_langinfo(nl_item index)
{
static char *result = NULL;
diff --git a/src/lib/evil/evil_langinfo.h b/src/lib/evil/evil_langinfo.h
index b9f35029a4..26dc14d047 100644
--- a/src/lib/evil/evil_langinfo.h
+++ b/src/lib/evil/evil_langinfo.h
@@ -39,7 +39,7 @@ enum {
# define CODESET _NL_CTYPE_CODESET
# define RADIXCHAR _NL_NUMERIC_RADIXCHAR
-EAPI char *nl_langinfo(nl_item index);
+EVIL_API char *nl_langinfo(nl_item index);
#endif /*__EVIL_LANGINFO_H__ */
diff --git a/src/lib/evil/evil_locale.c b/src/lib/evil/evil_locale.c
index 15610da6a6..388c7f5ef3 100644
--- a/src/lib/evil/evil_locale.c
+++ b/src/lib/evil/evil_locale.c
@@ -12,21 +12,7 @@
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-#else
-# define EAPI __declspec(dllimport)
-#endif
-
-#include "evil_locale.h" /* LC_MESSAGES */
+#include "evil_private.h" /* LC_MESSAGES */
/*
* LOCALE_SISO639LANGNAME and LOCALE_SISO3166CTRYNAME need at least a buffer
@@ -35,7 +21,10 @@
*/
static char _evil_locale_buf[18];
-char *evil_setlocale(int category, const char *locale)
+#undef setlocale
+
+EVIL_API char *
+evil_setlocale(int category, const char *locale)
{
char buf[9];
int l1;
diff --git a/src/lib/evil/evil_locale.h b/src/lib/evil/evil_locale.h
index 4bf14ec499..87497bcfec 100644
--- a/src/lib/evil/evil_locale.h
+++ b/src/lib/evil/evil_locale.h
@@ -39,7 +39,7 @@
* setlocale() function. If @p category is #LC_MESSAGES, then if @p locale
* is not @c NULL, errno is set to EINVAL and @c NULL is returned, otherwise
* the string <language>_<country> is returned. This string is a static buffer
- * and must not be freed. It will also be rewritten each time @category is
+ * and must not be freed. It will also be rewritten each time @p category is
* #LC_MESSAGES and @p locale is @c NULL.
*
* Conformity: Non applicable.
@@ -48,7 +48,7 @@
*
* @since 1.16
*/
-EAPI char *evil_setlocale(int category, const char *locale);
+EVIL_API char *evil_setlocale(int category, const char *locale);
/**
diff --git a/src/lib/evil/evil_macro_wrapper.h b/src/lib/evil/evil_macro_wrapper.h
index cd650e5e12..640f5a307e 100644
--- a/src/lib/evil/evil_macro_wrapper.h
+++ b/src/lib/evil/evil_macro_wrapper.h
@@ -46,6 +46,22 @@
#define mkdir(dirname, mode) evil_mkdir(dirname, mode)
/*
+ * evil_time.h
+ */
+
+/**
+ * @def gettimeofday(tv, tz)
+ *
+ * Wrapper around evil_gettimeofday().
+ *
+ * @since 1.25
+ */
+#ifndef _GETTIMEOFDAY_DEFINED
+# define _GETTIMEOFDAY_DEFINED
+# define gettimeofday(tv, tz) evil_gettimeofday(tv, tz)
+#endif
+
+/*
* evil_unistd.h
*/
diff --git a/src/lib/evil/evil_main.c b/src/lib/evil/evil_main.c
index cd7fde8555..803e47fc30 100644
--- a/src/lib/evil/evil_main.c
+++ b/src/lib/evil/evil_main.c
@@ -11,58 +11,23 @@ static int _evil_init_count = 0;
extern LONGLONG _evil_time_freq;
extern LONGLONG _evil_time_count;
-extern long _evil_time_second;
extern DWORD _evil_tls_index;
-long _evil_systemtime_to_time(SYSTEMTIME st);
-
int
evil_init(void)
{
- SYSTEMTIME st;
LARGE_INTEGER freq;
LARGE_INTEGER count;
- WORD second = 59;
if (++_evil_init_count != 1)
return _evil_init_count;
- {
- DWORD v;
-
- v = GetVersion();
- if (!v || ((DWORD)(LOBYTE(LOWORD(v))) < 6))
- {
- fprintf(stderr, "Windows XP not supported anymore, exiting.\n");
- return 0;
- }
- }
-
- if (!QueryPerformanceFrequency(&freq))
- return 0;
+ QueryPerformanceFrequency(&freq);
_evil_time_freq = freq.QuadPart;
- /* be sure that second + 1 != 0 */
- while (second == 59)
- {
- GetSystemTime(&st);
- second = st.wSecond;
- }
-
- /* retrieve the tick corresponding to the time we retrieve above */
- while (1)
- {
- GetSystemTime(&st);
- QueryPerformanceCounter(&count);
- if (st.wSecond == second + 1)
- break;
- }
-
- _evil_time_second = _evil_systemtime_to_time(st);
- if (_evil_time_second < 0)
- return --_evil_init_count;
+ QueryPerformanceCounter(&count);
_evil_time_count = count.QuadPart;
diff --git a/src/lib/evil/evil_main.h b/src/lib/evil/evil_main.h
index 8c82046f91..cecc1de28d 100644
--- a/src/lib/evil/evil_main.h
+++ b/src/lib/evil/evil_main.h
@@ -6,7 +6,7 @@
* @author Vincent Torri
* @date 2008 (created)
*
- * @section toc Table of Contents
+ * @section evil_toc Table of Contents
*
* @li @ref evil_main_intro
* @li @ref evil_main_ack
@@ -93,14 +93,13 @@
* @brief Initialize the Evil library.
*
* This function initializes the Evil library. It must be called before
- * using evil_time_get(), gettimeofday() or pipe(). It returns 0 on
- * failure, otherwise it returns the number of times it has already been
- * called.
+ * using evil_time_get() or pipe(). It returns 0 on failure, otherwise it
+ * returns the number of times it has already been called.
*
* When Evil is not used anymore, call evil_shutdown() to shut down
* the Evil library.
*/
-EAPI int evil_init(void);
+EVIL_API int evil_init(void);
/**
* @brief Shut down the Evil library.
@@ -116,7 +115,7 @@ EAPI int evil_init(void);
* documentation anymore . You must call evil_init() again to use these
* functions again.
*/
-EAPI int evil_shutdown(void);
+EVIL_API int evil_shutdown(void);
/**
diff --git a/src/lib/evil/evil_mman.c b/src/lib/evil/evil_mman.c
index 42f8021e59..e0f3763118 100644
--- a/src/lib/evil/evil_mman.c
+++ b/src/lib/evil/evil_mman.c
@@ -45,7 +45,7 @@ _evil_mmap_protection_get(int prot)
/***** API *****/
-void *
+EVIL_API void *
mmap(void *addr EVIL_UNUSED,
size_t len,
int prot,
@@ -92,8 +92,8 @@ mmap(void *addr EVIL_UNUSED,
}
#ifdef _WIN64
- low = (DWORD)((len >> 32) & 0x00000000ffffffff);
- low = (DWORD)(len & 0x00000000ffffffff);
+ high = (DWORD)((len >> 32) & 0x00000000ffffffffULL);
+ low = (DWORD)(len & 0x00000000ffffffffULL);
#else
high = 0L;
low = len;
@@ -133,7 +133,7 @@ mmap(void *addr EVIL_UNUSED,
return data;
}
-int
+EVIL_API int
munmap(void *addr,
size_t len EVIL_UNUSED)
{
@@ -147,7 +147,7 @@ munmap(void *addr,
return (res == 0) ? -1 : 0;
}
-int
+EVIL_API int
mprotect(void *addr, size_t len, int prot)
{
DWORD old;
diff --git a/src/lib/evil/evil_mman.h b/src/lib/evil/evil_mman.h
index 747917d204..09c0b3269f 100644
--- a/src/lib/evil/evil_mman.h
+++ b/src/lib/evil/evil_mman.h
@@ -59,7 +59,7 @@
/**
- * @file mman.h
+ * @file evil_mman.h
* @brief The file that provides the memory map functions
* @defgroup Evil_Mman Functions that manage memory mappping.
* @ingroup Evil
@@ -107,7 +107,7 @@
*
* @ingroup Evil_Mman
*/
-EAPI void *mmap(void *addr,
+EVIL_API void *mmap(void *addr,
size_t len,
int prot,
int flags,
@@ -138,7 +138,7 @@ EAPI void *mmap(void *addr,
*
* @ingroup Evil_Mman
*/
-EAPI int munmap(void *addr,
+EVIL_API int munmap(void *addr,
size_t len);
/**
@@ -146,7 +146,7 @@ EAPI int munmap(void *addr,
*
* @param addr Pointer to the base address.
* @param len Length of the memory.
- * @param New protection.
+ * @param prot New protection.
* @return 0 on success, -1 otherwise.
*
* Changes protection for the calling process' memory page.
@@ -159,7 +159,7 @@ EAPI int munmap(void *addr,
*
* @ingroup Evil_Mman
*/
-EAPI int mprotect(void *addr, size_t len, int prot);
+EVIL_API int mprotect(void *addr, size_t len, int prot);
#endif /* __EVIL_SYS_MMAN_H__ */
diff --git a/src/lib/evil/evil_private.h b/src/lib/evil/evil_private.h
index d87ac75423..15402568e9 100644
--- a/src/lib/evil/evil_private.h
+++ b/src/lib/evil/evil_private.h
@@ -26,18 +26,42 @@ extern "C" {
#include <sys/stat.h> /* for mkdir in evil_macro_wrapper */
-#ifdef EAPI
-# undef EAPI
+#ifdef EVIL_API
+#error EVIL_API should not be already defined
#endif
-#ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
+#ifdef _WIN32
+# ifndef EVIL_STATIC
+# ifdef EVIL_BUILD
+# define EVIL_API __declspec(dllexport)
+# else
+# define EVIL_API __declspec(dllimport)
+# endif
# else
-# define EAPI
+# define EVIL_API
+# endif
+# define EVIL_API_WEAK
+#elif defined(__GNUC__)
+# if __GNUC__ >= 4
+# define EVIL_API __attribute__ ((visibility("default")))
+# define EVIL_API_WEAK __attribute__ ((weak))
+# else
+# define EVIL_API
+# define EVIL_API_WEAK
# endif
#else
-# define EAPI __declspec(dllimport)
+/**
+ * @def EVIL_API
+ * @brief Used to export functions (by changing visibility).
+ */
+# define EVIL_API
+/**
+ * @def EINA_API_WEAK
+ * @brief Weak symbol, primarily useful in defining library functions which
+ * can be overridden in user code.
+ * Note: Not supported on all platforms.
+ */
+# define EINA_API_WEAK
#endif
#ifndef PATH_MAX
@@ -61,9 +85,6 @@ extern "C" {
#include "evil_macro_wrapper.h"
-#undef EAPI
-#define EAPI
-
#ifdef __cplusplus
}
#endif
diff --git a/src/lib/evil/evil_stdio.c b/src/lib/evil/evil_stdio.c
index 61afe7ce3b..74ea8297d9 100644
--- a/src/lib/evil/evil_stdio.c
+++ b/src/lib/evil/evil_stdio.c
@@ -9,7 +9,7 @@
#undef rename
-int
+EVIL_API int
evil_rename(const char *src, const char* dst)
{
DWORD res;
@@ -24,7 +24,7 @@ evil_rename(const char *src, const char* dst)
return MoveFileEx(src, dst, MOVEFILE_REPLACE_EXISTING) ? 0 : -1;
}
-int
+EVIL_API int
evil_mkdir(const char *dirname, mode_t mode EVIL_UNUSED)
{
return _mkdir(dirname);
diff --git a/src/lib/evil/evil_stdio.h b/src/lib/evil/evil_stdio.h
index 7b61a33b57..4a2ed57fd3 100644
--- a/src/lib/evil/evil_stdio.h
+++ b/src/lib/evil/evil_stdio.h
@@ -9,7 +9,7 @@
* @ingroup Evil
*
* This header provides functions ported from Unix in stdio.h.
- *
+ * @{
*/
#define EVIL_PATH_SEP_SWAP(p, s1, s2) \
@@ -41,7 +41,7 @@
*
* @since 1.8
*/
-EAPI int evil_rename(const char *src, const char *dst);
+EVIL_API int evil_rename(const char *src, const char *dst);
/**
* @brief Wrap the _mkdir() function on Windows.
@@ -54,7 +54,10 @@ EAPI int evil_rename(const char *src, const char *dst);
*
* @since 1.15
*/
-EAPI int evil_mkdir(const char *dirname, mode_t mode);
+EVIL_API int evil_mkdir(const char *dirname, mode_t mode);
+/**
+ * @}
+ */
#endif /* __EVIL_STDIO_H__ */
diff --git a/src/lib/evil/evil_stdlib.c b/src/lib/evil/evil_stdlib.c
index d6de5a4fcd..f2edd03df9 100644
--- a/src/lib/evil/evil_stdlib.c
+++ b/src/lib/evil/evil_stdlib.c
@@ -22,7 +22,7 @@
*
*/
-int
+EVIL_API int
setenv(const char *name,
const char *value,
int overwrite)
@@ -65,7 +65,7 @@ setenv(const char *name,
return res;
}
-int
+EVIL_API int
unsetenv(const char *name)
{
return setenv(name, NULL, 1);
@@ -76,117 +76,8 @@ unsetenv(const char *name)
* Files related functions
*
*/
-static int
-_mkstemp_init(char *__template, char **suffix, size_t *length, DWORD *val,
- size_t suffixlen)
-{
- *length = strlen(__template);
- if ((*length < (6 + suffixlen))
- || (strncmp(__template + *length - 6 - suffixlen, "XXXXXX", 6) != 0))
- {
- errno = EINVAL;
- return 0;
- }
-
- *suffix = __template + *length - 6 - suffixlen;
-
- *val = GetTickCount();
- *val += GetCurrentProcessId();
-
- return 1;
-}
-
-static int
-_mkstemp(char *suffix, int val)
-{
- const char lookup[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- DWORD v = val;
-
- suffix[0] = lookup[v % 62];
- v /= 62;
- suffix[1] = lookup[v % 62];
- v /= 62;
- suffix[2] = lookup[v % 62];
- v /= 62;
- suffix[3] = lookup[v % 62];
- v /= 62;
- suffix[4] = lookup[v % 62];
- v /= 62;
- suffix[5] = lookup[v % 62];
-
- val += 7777;
-
- return val;
-}
-
-EAPI char *
-mkdtemp(char *__template)
-{
- char *suffix;
- DWORD val;
- size_t length;
- int i;
-
- if (!__template)
- {
- errno = EINVAL;
- return NULL;
- }
-
- if (!_mkstemp_init(__template, &suffix, &length, &val, 0))
- return NULL;
-
- for (i = 0; i < 32768; i++)
- {
- val = _mkstemp(suffix, val);
-
- if (_mkdir(__template) == 0)
- return __template;
-
- if (errno == EFAULT ||
- errno == ENOSPC ||
- errno == ENOMEM ||
- errno == ENOENT ||
- errno == ENOTDIR ||
- errno == EPERM ||
- errno == EROFS)
- return NULL;
- }
-
- errno = EEXIST;
- return NULL;
-}
-
-int
-mkstemps(char *__template, int suffixlen)
-{
- char *suffix;
- DWORD val;
- size_t length;
- int i;
-
- if (!__template || (suffixlen < 0))
- return 0;
-
- if (!_mkstemp_init(__template, &suffix, &length, &val, (size_t) suffixlen))
- return -1;
-
- for (i = 0; i < 32768; i++)
- {
- int fd;
-
- val = _mkstemp(suffix, val);
-
- fd = _open(__template, _O_RDWR | _O_BINARY | _O_CREAT | _O_EXCL, _S_IREAD | _S_IWRITE);
- if (fd >= 0)
- return fd;
- }
-
- errno = EEXIST;
- return -1;
-}
-char *
+EVIL_API char *
realpath(const char *file_name, char *resolved_name)
{
char *retname = NULL; /* we will return this, if we fail */
diff --git a/src/lib/evil/evil_stdlib.h b/src/lib/evil/evil_stdlib.h
index eae2fb8809..82bb6d183f 100644
--- a/src/lib/evil/evil_stdlib.h
+++ b/src/lib/evil/evil_stdlib.h
@@ -1,6 +1,7 @@
#ifndef __EVIL_STDLIB_H__
#define __EVIL_STDLIB_H__
+#include "evil_private.h"
/**
* @file evil_stdlib.h
@@ -13,6 +14,13 @@
* @{
*/
+/*
+ * Define environ for native windows based on UCRT
+ *
+ */
+#ifdef _MSC_VER
+# define environ _environ
+#endif
/*
* Environment variable related functions
@@ -40,7 +48,7 @@
*
* Supported OS: Windows XP.
*/
-EAPI int setenv(const char *name,
+EVIL_API int setenv(const char *name,
const char *value,
int overwrite);
@@ -59,7 +67,7 @@ EAPI int setenv(const char *name,
*
* Supported OS: Windows XP.
*/
-EAPI int unsetenv(const char *name);
+EVIL_API int unsetenv(const char *name);
/*
@@ -68,24 +76,6 @@ EAPI int unsetenv(const char *name);
*/
/**
- * @brief create an unique temporary directory
- *
- * @since 1.8.0
- */
-EAPI char *mkdtemp(char *__template);
-
-/**
- * @brief Create a unique temporary file name with a suffix.
- *
- * @param __template Template of the file to create.
- * @param suffixlen Length of the suffix following the 'XXXXXX' placeholder.
- * @return A file descriptor on success, -1 otherwise.
- *
- * @since 1.10.0
- */
-EAPI int mkstemps(char *__template, int suffixlen);
-
-/**
* @brief Return an absolute or full path name for a specified relative path name.
*
* @param file_name The absolute path name.
@@ -114,7 +104,7 @@ EAPI int mkstemps(char *__template, int suffixlen);
*
* Supported OS: Windows XP.
*/
-EAPI char *realpath(const char *file_name, char *resolved_name);
+EVIL_API char *realpath(const char *file_name, char *resolved_name);
#ifndef HAVE_REALPATH
# define HAVE_REALPATH 1
#endif
diff --git a/src/lib/evil/evil_string.c b/src/lib/evil/evil_string.c
index d135454338..59b517d88a 100644
--- a/src/lib/evil/evil_string.c
+++ b/src/lib/evil/evil_string.c
@@ -14,7 +14,7 @@
*
*/
-char *strcasestr(const char *haystack, const char *needle)
+EVIL_API char *strcasestr(const char *haystack, const char *needle)
{
size_t length_needle;
size_t length_haystack;
@@ -50,7 +50,7 @@ char *strcasestr(const char *haystack, const char *needle)
return NULL;
}
-char *
+EVIL_API char *
strsep (char **stringp, const char *delim)
{
char *begin, *end;
diff --git a/src/lib/evil/evil_string.h b/src/lib/evil/evil_string.h
index 872834f238..ae3ccce380 100644
--- a/src/lib/evil/evil_string.h
+++ b/src/lib/evil/evil_string.h
@@ -10,7 +10,7 @@
*
* This header provides functions ported from Unix in string.h.
*
- *
+ * @{
*/
@@ -35,7 +35,7 @@
*
* Supported OS: Windows XP.
*/
-EAPI char *strcasestr(const char *haystack, const char *needle);
+EVIL_API char *strcasestr(const char *haystack, const char *needle);
/**
* @brief Implements the strsep function which is used to separate strings.
@@ -61,6 +61,10 @@ EAPI char *strcasestr(const char *haystack, const char *needle);
* @since 1.8
*
*/
-EAPI char *strsep(char **stringp, const char *delim);
+EVIL_API char *strsep(char **stringp, const char *delim);
+
+/**
+ * @}
+ */
#endif /* __EVIL_STRING_H__ */
diff --git a/src/lib/evil/evil_time.c b/src/lib/evil/evil_time.c
index 32cfc2cf07..2262fc1a7b 100644
--- a/src/lib/evil/evil_time.c
+++ b/src/lib/evil/evil_time.c
@@ -10,6 +10,58 @@
#include "evil_private.h"
/*
+ * gettimeofday
+ * based on https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-crt/misc/gettimeofday.c
+ * public domain
+ */
+
+#define FILETIME_1970 116444736000000000ull /* seconds between 1/1/1601 and 1/1/1970 */
+
+int evil_gettimeofday(struct timeval *tv, struct timezone *tz)
+{
+ int res = 0;
+ union
+ {
+ unsigned long long ns100; /* time since 1 Jan 1601 in 100ns units */
+ FILETIME ft;
+ } _now;
+ TIME_ZONE_INFORMATION time_zone_information;
+ DWORD tzi;
+
+ if (tz != NULL)
+ {
+ tzi = GetTimeZoneInformation(&time_zone_information);
+ if (tzi != TIME_ZONE_ID_INVALID)
+ {
+ tz->tz_minuteswest = time_zone_information.Bias;
+ if (tzi == TIME_ZONE_ID_DAYLIGHT)
+ tz->tz_dsttime = 1;
+ else
+ tz->tz_dsttime = 0;
+ }
+ else
+ {
+ tz->tz_minuteswest = 0;
+ tz->tz_dsttime = 0;
+ }
+ }
+
+ if (tv != NULL)
+ {
+#if _WIN32_WINNT < 0x0602
+ GetSystemTimeAsFileTime(&_now.ft);
+#else
+ GetSystemTimePreciseAsFileTime(&_now.ft);
+#endif
+ _now.ns100 -= FILETIME_1970; /* 100 nano-seconds since 1-1-1970 */
+ tv->tv_sec = _now.ns100 / 10000000ull; /* seconds since 1-1-1970 */
+ tv->tv_usec = (long) (_now.ns100 % 10000000ull) /10; /* nanoseconds */
+ }
+
+ return res;
+}
+
+/*
* strptime
* based on http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/time/strptime.c?rev=HEAD
* BSD licence
@@ -121,7 +173,7 @@ conv_num(const unsigned char *buf, int *dest, unsigned int llim, unsigned int ul
return buf;
}
-char *
+EVIL_API char *
strptime(const char *buf, const char *fmt, struct tm *tm)
{
unsigned char c;
diff --git a/src/lib/evil/evil_time.h b/src/lib/evil/evil_time.h
index 00f538cae7..591900df4f 100644
--- a/src/lib/evil/evil_time.h
+++ b/src/lib/evil/evil_time.h
@@ -16,25 +16,52 @@
* @{
*/
+#ifdef _MSC_VER
+struct timezone
+{
+ int tz_minuteswest; /* of Greenwich */
+ int tz_dsttime; /* type of dst correction to apply */
+};
+#endif
+
+/**
+ * @brief Get time and timezone.
+ *
+ * @param tv A pointer that contains two sockets.
+ * @param tz A pointer that contains two sockets.
+ * @return 0 on success, -1 otherwise.
+ *
+ * This function gets the time and timezone. @p tv and @p tz can be
+ * @c NULL. It calls GetSystemTimePreciseAsFileTime() on Windows 8or
+ * above if _WIN32_WINNT is correctly defined. It returns 0 on
+ * success, -1 otherwise.
+ *
+ * @since 1.25
+ */
+EVIL_API int evil_gettimeofday(struct timeval *tv, struct timezone *tz);
+#ifndef HAVE_GETTIMEOFDAY
+# define HAVE_GETTIMEOFDAY 1
+#endif
+
/**
* @brief Convert a string representation of time to a time tm structure .
*
* @param buf The string to convert.
* @param fmt The representation of time.
- * @aram tm The time tm structure.
+ * @param tm The time tm structure.
* @return The first character not processed in this function call.
*
* This function converts the string @p s to a time tm structure and
* fill the buffer @p tm. The format of the time is specified by
- * @p format. on success, this function returns the first character
+ * @p format. On success, this function returns the first character
* not processed in this function call, @c NULL otherwise.
*
* Conformity: Non applicable.
*
* Supported OS: Windows XP.
*/
-EAPI char *strptime(const char *buf, const char *fmt, struct tm *tm);
+EVIL_API char *strptime(const char *buf, const char *fmt, struct tm *tm);
/**
diff --git a/src/lib/evil/evil_unistd.c b/src/lib/evil/evil_unistd.c
index 3eebf97e1e..02f01baaef 100644
--- a/src/lib/evil/evil_unistd.c
+++ b/src/lib/evil/evil_unistd.c
@@ -17,48 +17,20 @@
LONGLONG _evil_time_freq;
LONGLONG _evil_time_count;
-long _evil_time_second;
-
-
-long _evil_systemtime_to_time(SYSTEMTIME st);
-
-long
-_evil_systemtime_to_time(SYSTEMTIME st)
-{
- int days[] = {
- -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364
- };
- int day;
- time_t t;
-
- st.wYear -= 1900;
- if ((st.wYear < 70) || (st.wYear > 138))
- return -1;
-
- day = st.wDay + days[st.wMonth - 1];
-
- if (!(st.wYear & 3) && (st.wMonth > 2) )
- day++;
-
- t = ((st.wYear - 70) * 365 + ((st.wYear - 1) >> 2) - 17 + day) * 24 + st.wHour;
- t = (t * 60 + st.wMinute) * 60 + st.wSecond;
-
- return (long)t;
-}
/*
* Time related functions
*
*/
-double
+EVIL_API double
evil_time_get(void)
{
LARGE_INTEGER count;
QueryPerformanceCounter(&count);
- return (double)_evil_time_second + (double)(count.QuadPart - _evil_time_count)/ (double)_evil_time_freq;
+ return (double)(count.QuadPart - _evil_time_count)/ (double)_evil_time_freq;
}
@@ -67,7 +39,7 @@ evil_time_get(void)
*
*/
-int
+EVIL_API int
evil_sockets_init(void)
{
WSADATA wsa_data;
@@ -89,7 +61,7 @@ evil_sockets_init(void)
return 0;
}
-void
+EVIL_API void
evil_sockets_shutdown(void)
{
WSACleanup();
@@ -99,7 +71,7 @@ evil_sockets_shutdown(void)
* The code of the following functions has been kindly offered
* by Tor Lillqvist.
*/
-int
+EVIL_API int
evil_pipe(int *fds)
{
struct sockaddr_in saddr;
diff --git a/src/lib/evil/evil_unistd.h b/src/lib/evil/evil_unistd.h
index a227e14fc2..5f8f006f87 100644
--- a/src/lib/evil/evil_unistd.h
+++ b/src/lib/evil/evil_unistd.h
@@ -1,6 +1,7 @@
#ifndef __EVIL_UNISTD_H__
#define __EVIL_UNISTD_H__
+#include "evil_private.h"
/**
* @file evil_unistd.h
@@ -34,7 +35,7 @@
*
* Supported OS: Windows XP.
*/
-EAPI double evil_time_get(void);
+EVIL_API double evil_time_get(void);
/*
* Sockets and pipe related functions
@@ -53,7 +54,7 @@ EAPI double evil_time_get(void);
*
* Supported OS: Windows XP.
*/
-EAPI int evil_sockets_init(void);
+EVIL_API int evil_sockets_init(void);
/**
* @brief Shutdown the Windows socket system.
@@ -64,7 +65,7 @@ EAPI int evil_sockets_init(void);
*
* Supported OS: Windows XP.
*/
-EAPI void evil_sockets_shutdown(void);
+EVIL_API void evil_sockets_shutdown(void);
/**
* @brief Create a pair of sockets.
@@ -80,7 +81,7 @@ EAPI void evil_sockets_shutdown(void);
*
* Supported OS: Windows XP.
*/
-EAPI int evil_pipe(int *fds);
+EVIL_API int evil_pipe(int *fds);
/**
diff --git a/src/lib/evil/evil_util.c b/src/lib/evil/evil_util.c
index c045bf3cc0..2223a27cc1 100644
--- a/src/lib/evil/evil_util.c
+++ b/src/lib/evil/evil_util.c
@@ -15,7 +15,7 @@ DWORD _evil_tls_index;
/* static void _evil_error_display(const char *fct, LONG res); */
static void _evil_last_error_display(const char *fct);
-wchar_t *
+EVIL_API wchar_t *
evil_char_to_wchar(const char *text)
{
wchar_t *wtext;
@@ -29,7 +29,7 @@ evil_char_to_wchar(const char *text)
(wsize > (int)(ULONG_MAX / sizeof(wchar_t))))
{
if (wsize == 0)
- _evil_last_error_display(__FUNCTION__);
+ _evil_last_error_display(__func__);
return NULL;
}
@@ -37,14 +37,14 @@ evil_char_to_wchar(const char *text)
if (wtext)
if (!MultiByteToWideChar(CP_ACP, 0, text, (int)strlen(text) + 1, wtext, wsize))
{
- _evil_last_error_display(__FUNCTION__);
+ _evil_last_error_display(__func__);
return NULL;
}
return wtext;
}
-char *
+EVIL_API char *
evil_wchar_to_char(const wchar_t *text)
{
char *atext;
@@ -56,7 +56,7 @@ evil_wchar_to_char(const wchar_t *text)
asize = WideCharToMultiByte(CP_ACP, 0, text, -1, NULL, 0, NULL, NULL);
if (asize == 0)
{
- _evil_last_error_display(__FUNCTION__);
+ _evil_last_error_display(__func__);
return NULL;
}
@@ -67,14 +67,14 @@ evil_wchar_to_char(const wchar_t *text)
asize = WideCharToMultiByte(CP_ACP, 0, text, -1, atext, asize, NULL, NULL);
if (asize == 0)
{
- _evil_last_error_display(__FUNCTION__);
+ _evil_last_error_display(__func__);
return NULL;
}
return atext;
}
-char *
+EVIL_API char *
evil_utf16_to_utf8(const wchar_t *text16)
{
char *text8;
@@ -89,7 +89,7 @@ evil_utf16_to_utf8(const wchar_t *text16)
size8 = WideCharToMultiByte(CP_UTF8, flag, text16, -1, NULL, 0, NULL, NULL);
if (size8 == 0)
{
- _evil_last_error_display(__FUNCTION__);
+ _evil_last_error_display(__func__);
return NULL;
}
@@ -100,14 +100,42 @@ evil_utf16_to_utf8(const wchar_t *text16)
size8 = WideCharToMultiByte(CP_UTF8, flag, text16, -1, text8, size8, NULL, NULL);
if (size8 == 0)
{
- _evil_last_error_display(__FUNCTION__);
+ _evil_last_error_display(__func__);
return NULL;
}
return text8;
}
-const char *
+EVIL_API wchar_t *
+evil_utf8_to_utf16(const char *text)
+{
+ wchar_t *text16;
+ DWORD flag = MB_ERR_INVALID_CHARS;
+ int size16;
+
+ if (!text)
+ return NULL;
+
+ size16 = MultiByteToWideChar(CP_UTF8, flag, text, -1, NULL, 0);
+ if (size16 == 0)
+ {
+ _evil_last_error_display(__func__);
+ return NULL;
+ }
+
+ text16 = malloc(size16 * sizeof(wchar_t));
+ if (text16)
+ if (!MultiByteToWideChar(CP_UTF8, flag, text, -1, text16, size16))
+ {
+ _evil_last_error_display(__func__);
+ return NULL;
+ }
+
+ return text16;
+}
+
+EVIL_API const char *
evil_format_message(long err)
{
char *buf;
@@ -146,7 +174,7 @@ evil_format_message(long err)
return (const char *)buf;
}
-const char *
+EVIL_API const char *
evil_last_error_get(void)
{
DWORD err;
@@ -161,7 +189,7 @@ _evil_last_error_display(const char *fct)
fprintf(stderr, "[Evil] [%s] ERROR: %s\n", fct, evil_last_error_get());
}
-int
+EVIL_API int
evil_path_is_absolute(const char *path)
{
size_t length;
@@ -169,6 +197,8 @@ evil_path_is_absolute(const char *path)
if (!path)
return 0;
+ if (*path == '/' || *path == '\\') return 1;
+
length = strlen(path);
if (length < 3) return 0;
diff --git a/src/lib/evil/evil_util.h b/src/lib/evil/evil_util.h
index 5709371f18..4d7db43b3f 100644
--- a/src/lib/evil/evil_util.h
+++ b/src/lib/evil/evil_util.h
@@ -19,7 +19,7 @@
*
* @ingroup Evil
*/
-EAPI wchar_t *evil_char_to_wchar(const char *text);
+EVIL_API wchar_t *evil_char_to_wchar(const char *text);
/**
* @brief Convert a string from wchar_t * to char *.
@@ -38,7 +38,7 @@ EAPI wchar_t *evil_char_to_wchar(const char *text);
*
* @ingroup Evil
*/
-EAPI char *evil_wchar_to_char(const wchar_t *text);
+EVIL_API char *evil_wchar_to_char(const wchar_t *text);
/**
* @brief Convert a string from UTF-16 to UTF-8.
@@ -57,11 +57,29 @@ EAPI char *evil_wchar_to_char(const wchar_t *text);
*
* @ingroup Evil
*/
-EAPI char *evil_utf16_to_utf8(const wchar_t *text);
+EVIL_API char *evil_utf16_to_utf8(const wchar_t *text);
-EAPI const char *evil_format_message(long err);
+/**
+ * @brief Convert a string from UTF-8 to UTF-16.
+ *
+ * @param text The string to convert in UTF-8.
+ * @return The converted string in UTF-16.
+ *
+ * Convert a string from UTF-8 to UTF-16 and return it. If the
+ * allocation or conversion fails, NULL is returned. On success, the
+ * returned value must be freed when it is not used anymore.
+ *
+ * Conformity: Non applicable.
+ *
+ * @since 1.24
+ *
+ * @ingroup Evil
+ */
+EVIL_API wchar_t *evil_utf8_to_utf16(const char *text);
+
+EVIL_API const char *evil_format_message(long err);
-EAPI const char *evil_last_error_get(void);
+EVIL_API const char *evil_last_error_get(void);
/**
* @brief check if the given path is absolute.
@@ -84,6 +102,6 @@ EAPI const char *evil_last_error_get(void);
*
* @ingroup Evil
*/
-EAPI int evil_path_is_absolute(const char *path);
+EVIL_API int evil_path_is_absolute(const char *path);
#endif /* __EVIL_UTIL_H__ */
diff --git a/src/lib/evil/meson.build b/src/lib/evil/meson.build
index 4769e58054..dc86e6af0b 100644
--- a/src/lib/evil/meson.build
+++ b/src/lib/evil/meson.build
@@ -1,7 +1,10 @@
evil_deps = []
evil_pub_deps = []
+evil_ext_deps = []
+evil_src = []
+
if target_machine.system() == 'windows'
- evil_src = [
+ evil_src += files([
'evil_dlfcn.c',
'evil_fcntl.c',
'evil_langinfo.c',
@@ -15,7 +18,7 @@ if target_machine.system() == 'windows'
'evil_unistd.c',
'evil_util.c',
'evil_private.h',
- ]
+ ])
psapi = cc.find_library('psapi')
ole32 = cc.find_library('ole32')
@@ -23,8 +26,11 @@ if target_machine.system() == 'windows'
secur32 = cc.find_library('secur32')
uuid = cc.find_library('uuid')
+ evil_ext_deps += [psapi, ole32, ws2_32, secur32, uuid, regexp]
+
evil_lib = library('evil', evil_src,
- dependencies : [psapi, ole32, ws2_32, secur32, uuid, regexp],
+ c_args : [package_c_args, '-DEVIL_BUILD'],
+ dependencies : evil_ext_deps,
include_directories : [config_dir],
install: true,
version: meson.project_version(),
diff --git a/src/modules/ecore/meson.build b/src/modules/ecore/meson.build
index 10f6d47a43..a34c236ce1 100644
--- a/src/modules/ecore/meson.build
+++ b/src/modules/ecore/meson.build
@@ -1,5 +1,5 @@
-if sys_windows == false
+if sys_windows == false and sys_osx == false
system_modules = [
'systemd',
diff --git a/src/modules/ecore/system/systemd/ecore_system_systemd.c b/src/modules/ecore/system/systemd/ecore_system_systemd.c
index 78e3185287..ab19ff36cd 100644
--- a/src/modules/ecore/system/systemd/ecore_system_systemd.c
+++ b/src/modules/ecore/system/systemd/ecore_system_systemd.c
@@ -163,7 +163,7 @@ static void _locale_get(void *data EINA_UNUSED, const Eldbus_Message *msg,
setenv(type, value, 1);
}
- setlocale(__LC_ALL, "");
+ setlocale(LC_ALL, "");
end:
ecore_event_add(ECORE_EVENT_LOCALE_CHANGED, NULL, NULL, NULL);
diff --git a/src/modules/ecore/system/systemd/meson.build b/src/modules/ecore/system/systemd/meson.build
index 7649611255..2a1104ca6a 100644
--- a/src/modules/ecore/system/systemd/meson.build
+++ b/src/modules/ecore/system/systemd/meson.build
@@ -4,6 +4,7 @@ if get_option('systemd')
dependencies: [ecore, eldbus],
install: true,
install_dir: mod_install_dir,
+ name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libsystemd.' + sys_mod_extension)
endif
diff --git a/src/modules/ecore/system/tizen/meson.build b/src/modules/ecore/system/tizen/meson.build
index 78c7640e4b..8d9db22661 100644
--- a/src/modules/ecore/system/tizen/meson.build
+++ b/src/modules/ecore/system/tizen/meson.build
@@ -3,5 +3,6 @@ ecore_systemd_mod = shared_module('tizen',
dependencies: [ecore, eldbus],
install: true,
install_dir: mod_install_dir,
+ name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libtizen.' + sys_mod_extension)
diff --git a/src/modules/ecore/system/upower/meson.build b/src/modules/ecore/system/upower/meson.build
index ea1a20bec1..b579bed76d 100644
--- a/src/modules/ecore/system/upower/meson.build
+++ b/src/modules/ecore/system/upower/meson.build
@@ -3,5 +3,6 @@ ecore_systemd_mod = shared_module('upower',
dependencies: [ecore, eldbus],
install: true,
install_dir: mod_install_dir,
+ name_suffix : sys_mod_extension
)
module_files += join_paths(mod_install_dir, 'libupower.' + sys_mod_extension)
diff --git a/src/modules/ecore_buffer/shm/meson.build b/src/modules/ecore_buffer/shm/meson.build
index baf9a0fc5a..80c0a796de 100644
--- a/src/modules/ecore_buffer/shm/meson.build
+++ b/src/modules/ecore_buffer/shm/meson.build
@@ -3,5 +3,6 @@ ecore_buffer_shm_mod = shared_module('module',
name_prefix: '',
dependencies: [ecore, ecore_buffer],
install: true,
- install_dir: join_paths(dir_lib, 'ecore_buffer', 'modules', 'shm', version_name)
+ install_dir: join_paths(dir_lib, 'ecore_buffer', 'modules', 'shm', version_name),
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/ecore_buffer/x11_dri2/meson.build b/src/modules/ecore_buffer/x11_dri2/meson.build
index b63823b3bc..34cca89916 100644
--- a/src/modules/ecore_buffer/x11_dri2/meson.build
+++ b/src/modules/ecore_buffer/x11_dri2/meson.build
@@ -3,5 +3,6 @@ ecore_buffer_x11_dri2_mod = shared_module('module',
name_prefix: '',
dependencies: [ecore, ecore_buffer, ecore_x],
install: true,
- install_dir: join_paths(dir_lib, 'ecore_buffer', 'modules', 'x11_dri2', version_name)
+ install_dir: join_paths(dir_lib, 'ecore_buffer', 'modules', 'x11_dri2', version_name),
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/ecore_buffer/x11_dri3/meson.build b/src/modules/ecore_buffer/x11_dri3/meson.build
index e3a7dd18e4..ce89219b53 100644
--- a/src/modules/ecore_buffer/x11_dri3/meson.build
+++ b/src/modules/ecore_buffer/x11_dri3/meson.build
@@ -4,6 +4,7 @@ if dependency('libtbm', required: false).found() == true and dependency('libdrm'
name_prefix: '',
dependencies: [ecore, ecore_buffer, ecore_x],
install: true,
- install_dir: join_paths(dir_lib, 'ecore_buffer', 'modules', 'x11_dri3', version_name)
+ install_dir: join_paths(dir_lib, 'ecore_buffer', 'modules', 'x11_dri3', version_name),
+ name_suffix : sys_mod_extension
)
endif
diff --git a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
index e1c5a66670..7018a66691 100644
--- a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
+++ b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
@@ -34,6 +34,11 @@ static Ecore_Event_Handler *ecore_evas_event_handlers[4];
static const char *_iface_name = "opengl_cocoa";
static const int _iface_version = 1;
+typedef struct {
+ Ecore_Evas_Selection_Callbacks clipboard;
+ Eina_Future *delivery;
+} Ecore_Evas_Cocoa_Engine_Data;
+
static inline Ecore_Evas *
_ecore_evas_cocoa_match(Ecore_Cocoa_Object *cocoa_win)
{
@@ -422,6 +427,130 @@ _ecore_evas_callback_delete_request_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func
ee->func.fn_delete_request = func;
}
+static Eina_Value
+_delivery(void *data, const Eina_Value value EINA_UNUSED, const Eina_Future *dead_future EINA_UNUSED)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Evas_Cocoa_Engine_Data *edata = ee->engine.data;
+ Eina_Rw_Slice slice;
+ const char *mime_type = NULL;
+
+ EINA_SAFETY_ON_NULL_GOTO(edata->delivery, end);
+
+ for (unsigned int i = 0; i < eina_array_count(edata->clipboard.available_types); ++i)
+ {
+ mime_type = eina_array_data_get(edata->clipboard.available_types, i);
+ if (!strncmp("text/", mime_type, strlen("text/")))
+ break;
+ }
+ if (mime_type)
+ {
+ edata->clipboard.delivery(ee, 1, ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER, mime_type, &slice);
+ EINA_SAFETY_ON_FALSE_GOTO(ecore_cocoa_clipboard_set(slice.mem, slice.len, mime_type), end);
+ }
+ else
+ {
+ ERR("No compatible mime type found");
+ }
+
+end:
+ return EINA_VALUE_EMPTY;
+}
+
+static Eina_Bool
+_ecore_evas_cocoa_selection_claim(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel)
+{
+ if (selection != ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ return EINA_FALSE;
+
+ if (!delivery && !cancel)
+ {
+ ecore_cocoa_clipboard_clear();
+ return EINA_TRUE;
+ }
+ else
+ {
+ Ecore_Evas_Cocoa_Engine_Data *edata = ee->engine.data;
+
+ if (edata->clipboard.cancel)
+ {
+ edata->clipboard.cancel(ee, seat, selection);
+ eina_array_free(edata->clipboard.available_types);
+ }
+
+ edata->delivery = efl_loop_job(efl_main_loop_get());
+ eina_future_then(edata->delivery, _delivery, ee);
+ edata->clipboard.delivery = delivery;
+ edata->clipboard.cancel = cancel;
+ edata->clipboard.available_types = available_types;
+ return EINA_TRUE;
+ }
+}
+
+Eina_Future*
+_ecore_evas_cocoa_selection_request(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection, Eina_Array *acceptable_type)
+{
+ Eina_Future *future;
+ Eina_Promise *promise;
+ const char *mime_type;
+
+ if (selection != ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ return eina_future_rejected(efl_loop_future_scheduler_get(efl_main_loop_get()), ecore_evas_no_selection);
+
+ promise = efl_loop_promise_new(efl_main_loop_get());
+ future = eina_future_new(promise);
+
+ for (unsigned int i = 0; i < eina_array_count(acceptable_type); ++i)
+ {
+ mime_type = eina_array_data_get(acceptable_type, i);
+ if (!strncmp("text/", mime_type, strlen("text/")))
+ break;
+ }
+ if (!mime_type)
+ {
+ eina_promise_reject(promise, ecore_evas_no_matching_type);
+ }
+ else
+ {
+ int size;
+ void *data;
+ Eina_Content *content = NULL;
+ Eina_Rw_Slice slice;
+
+ data = ecore_cocoa_clipboard_get(&size, mime_type);
+
+ if (eina_str_has_prefix(mime_type,"text"))
+ {
+ //ensure that we always have a \0 at the end, there is no assertion that \0 is included here.
+ slice.len = size + 1;
+ slice.mem = eina_memdup(data, size, EINA_TRUE);
+ free(data);
+ }
+ else
+ {
+ slice.len = size;
+ slice.mem = data;
+ }
+ if (slice.mem)
+ content = eina_content_new(eina_rw_slice_slice_get(slice), mime_type);
+ free(slice.mem); //memory got duplicated in eina_content_new
+ if (!content) // construction can fail because of some validation reasons
+ eina_promise_reject(promise, ecore_evas_no_matching_type);
+ else
+ eina_promise_resolve(promise, eina_value_content_init(content));
+
+ }
+ return future;
+}
+
+static Eina_Bool
+_ecore_evas_cocoa_selection_has_owner(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection EINA_UNUSED)
+{
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ return ecore_cocoa_clipboard_exists();
+ return EINA_FALSE;
+}
+
static Ecore_Evas_Engine_Func _ecore_cocoa_engine_func =
{
_ecore_evas_cocoa_free,
@@ -508,6 +637,11 @@ static Ecore_Evas_Engine_Func _ecore_cocoa_engine_func =
NULL, //fn_pointer_device_xy_get
NULL, //fn_prepare
NULL, //fn_last_tick_get
+ _ecore_evas_cocoa_selection_claim, //fn_selection_claim
+ _ecore_evas_cocoa_selection_has_owner, //fn_selection_has_owner
+ _ecore_evas_cocoa_selection_request, //fn_selection_request
+ NULL, //fn_dnd_start
+ NULL, //fn_dnd_stop
};
static Ecore_Cocoa_Window *
@@ -517,11 +651,11 @@ _ecore_evas_cocoa_window_get(const Ecore_Evas *ee)
return (Ecore_Cocoa_Window *)(ee->prop.window);
}
-
EAPI Ecore_Evas *
ecore_evas_cocoa_new_internal(Ecore_Cocoa_Window *parent EINA_UNUSED, int x, int y, int w, int h)
{
Ecore_Evas *ee;
+ Ecore_Evas_Cocoa_Engine_Data *edata;
Ecore_Evas_Interface_Cocoa *iface;
if (!ecore_cocoa_init())
@@ -532,6 +666,10 @@ ecore_evas_cocoa_new_internal(Ecore_Cocoa_Window *parent EINA_UNUSED, int x, int
ee = calloc(1, sizeof(Ecore_Evas));
if (!ee)
goto shutdown_ecore_cocoa;
+ edata = calloc(1, sizeof(Ecore_Evas_Cocoa_Engine_Data));
+ if (!edata)
+ goto shutdown_ecore_cocoa_engine_data;
+ ee->engine.data = edata;
ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
@@ -606,6 +744,8 @@ ecore_evas_cocoa_new_internal(Ecore_Cocoa_Window *parent EINA_UNUSED, int x, int
free(ee->name);
//free_ee:
_ecore_evas_cocoa_shutdown();
+ free(edata);
+ shutdown_ecore_cocoa_engine_data:
free(ee);
shutdown_ecore_cocoa:
ecore_cocoa_shutdown();
diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
index 35eadc002b..c8f0eb8c24 100644
--- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
+++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
@@ -142,9 +142,8 @@ _drm_device_change(void *d EINA_UNUSED, int t EINA_UNUSED, void *event)
static int
_ecore_evas_drm_init(Ecore_Evas *ee, Ecore_Evas_Engine_Drm_Data *edata, const char *device)
{
- // XXX: this is broken. we init once but in a per ecore evas struct so
- // we assume there will be only 1 of these drm ecore evas's ever...
- if (++_drm_init_count != 1) return _drm_init_count;
+ _drm_init_count++;
+ if (_drm_init_count > 1) return _drm_init_count;
if (!ecore_drm2_init())
{
@@ -201,24 +200,31 @@ static int
_ecore_evas_drm_shutdown(Ecore_Evas_Engine_Drm_Data *edata)
{
Ecore_Event_Handler *h;
- if (--_drm_init_count != 0) return _drm_init_count;
- if (edata->focus_job)
+ _drm_init_count--;
+ if (_drm_init_count == 0)
{
- ecore_job_del(edata->focus_job);
- edata->focus_job = NULL;
- }
- if (edata->dev)
- {
- ecore_drm2_outputs_destroy(edata->dev);
- ecore_drm2_device_close(edata->dev);
- edata->dev = NULL;
+ if (edata->focus_job)
+ {
+ ecore_job_del(edata->focus_job);
+ edata->focus_job = NULL;
+ }
+
+ if (edata->dev)
+ {
+ ecore_drm2_outputs_destroy(edata->dev);
+ ecore_drm2_device_close(edata->dev);
+ edata->dev = NULL;
+ }
+
+ ecore_drm2_shutdown();
+ ecore_event_evas_shutdown();
+
+ EINA_LIST_FREE(handlers, h)
+ ecore_event_handler_del(h);
}
- ecore_drm2_shutdown();
- ecore_event_evas_shutdown();
- EINA_LIST_FREE(handlers, h)
- ecore_event_handler_del(h);
+ if (_drm_init_count < 0) _drm_init_count = 0;
return _drm_init_count;
}
@@ -398,8 +404,6 @@ _drm_show(Ecore_Evas *ee)
if (ee->func.fn_state_change) ee->func.fn_state_change(ee);
}
- if (ee->visible) return;
-
ee->visible = 1;
if (ee->func.fn_show) ee->func.fn_show(ee);
@@ -717,6 +721,7 @@ _cb_pageflip(int fd EINA_UNUSED, unsigned int frame EINA_UNUSED, unsigned int se
ecore_drm2_output_info_get(output, &x, &y, &w, &h, NULL);
if (!edata->once) t = ecore_time_get();
+// printf("ECORE_EVAS: drm tick %1.5f @ %1.5f\n", t, ecore_time_get());
ecore_evas_animator_tick(ee, &(Eina_Rectangle){x, y, w, h},
t - edata->offset);
}
diff --git a/src/modules/ecore_evas/engines/drm/meson.build b/src/modules/ecore_evas/engines/drm/meson.build
index 584cc56159..58071010d0 100644
--- a/src/modules/ecore_evas/engines/drm/meson.build
+++ b/src/modules/ecore_evas/engines/drm/meson.build
@@ -1,7 +1,3 @@
-if get_option('opengl') != 'none'
- config_h.set('BUILD_ECORE_EVAS_GL_DRM', '1')
-endif
-
engine_src = files(['ecore_evas_drm.c'])
engine_deps = [ecore_drm2, ecore_input, eeze, elput, libdrm, engine_drm]
diff --git a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
index 28f743ae71..37963fe664 100644
--- a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
+++ b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
@@ -753,7 +753,7 @@ _ecore_evas_extn_cb_focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj E
Extn *extn;
Evas_Device *dev;
- dev = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT);
+ dev = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT);
if (ecore_evas_focus_device_get(ee, dev)) return;
ee->prop.focused_by = eina_list_append(ee->prop.focused_by, dev);
extn = bdata->data;
@@ -770,7 +770,7 @@ _ecore_evas_extn_cb_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
Extn *extn;
ee->prop.focused_by = eina_list_remove(ee->prop.focused_by,
- evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_SEAT));
+ evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_SEAT));
extn = bdata->data;
if (!extn) return;
if (!extn->ipc.server) return;
@@ -1030,7 +1030,7 @@ _ipc_server_data(void *data, int type EINA_UNUSED, void *event)
Ipc_Data_Update *ipc;
int n = e->response;
- /* b->lockfd is not enough to ensure the size is same
+ /* b->lockfd is not enough to ensure the size is same
* between what server knows, and client knows.
* So should check file lock also. */
if ((n >= 0) && (n < NBUF))
diff --git a/src/modules/ecore_evas/engines/extn/ecore_evas_extn_buf.c b/src/modules/ecore_evas/engines/extn/ecore_evas_extn_buf.c
index 986dde06ff..055e744c6f 100644
--- a/src/modules/ecore_evas/engines/extn/ecore_evas_extn_buf.c
+++ b/src/modules/ecore_evas/engines/extn/ecore_evas_extn_buf.c
@@ -86,7 +86,7 @@ _extnbuf_free(Extnbuf *b)
if (b->file) shm_unlink(b->file);
if (b->lock) unlink(b->lock);
}
-
+
if (b->addr != MAP_FAILED) munmap(b->addr, b->size);
if (b->fd >= 0) close(b->fd);
if (b->lockfd >= 0) close(b->lockfd);
diff --git a/src/modules/ecore_evas/engines/extn/meson.build b/src/modules/ecore_evas/engines/extn/meson.build
index 901a126f52..4a912b4fbd 100644
--- a/src/modules/ecore_evas/engines/extn/meson.build
+++ b/src/modules/ecore_evas/engines/extn/meson.build
@@ -2,6 +2,7 @@ engine_src = files(['ecore_evas_extn.c', 'ecore_evas_extn_buf.c', 'ecore_evas_ex
engine_deps = [ecore_input, ecore_ipc]
shared_module(mod_full_name, engine_src,
+ c_args : package_c_args,
include_directories : config_dir + [engine_include_dir],
dependencies : [eina, ecore_evas, ecore_input_evas, rt] + engine_deps,
install : true,
diff --git a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
index 17bf83f7c1..ce671e2e3e 100644
--- a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
+++ b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
@@ -61,7 +61,7 @@ _ecore_evas_mouse_move_process_fb(Ecore_Evas *ee, int x, int y)
ecore_fb_size_get(&fbw, &fbh);
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_MOUSE);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_MOUSE);
pointer = evas_device_parent_get(pointer);
cursor = eina_hash_find(ee->prop.cursors, &pointer);
EINA_SAFETY_ON_NULL_RETURN(cursor);
@@ -330,7 +330,7 @@ _ecore_evas_rotation_set(Ecore_Evas *ee, int rotation, int resize EINA_UNUSED)
Evas_Engine_Info_FB *einfo;
int rot_dif;
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_MOUSE);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_MOUSE);
pointer = evas_device_parent_get(pointer);
cursor = eina_hash_find(ee->prop.cursors, &pointer);
EINA_SAFETY_ON_NULL_RETURN(cursor);
diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
index 8abc7401b6..ef4ba057b9 100644
--- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
+++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
@@ -455,6 +455,9 @@ static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
NULL, //fn_pointer_device_xy_get
NULL, //fn_prepare
NULL, //fn_last_tick_get
+ NULL, //fn_selection_claim
+ NULL, //fn_selection_has_owner
+ NULL, //fn_selection_request
};
static Ecore_Evas*
diff --git a/src/modules/ecore_evas/engines/sdl/meson.build b/src/modules/ecore_evas/engines/sdl/meson.build
index 94b990df92..030ca6561a 100644
--- a/src/modules/ecore_evas/engines/sdl/meson.build
+++ b/src/modules/ecore_evas/engines/sdl/meson.build
@@ -2,6 +2,7 @@ engine_src = files(['ecore_evas_sdl.c'])
engine_deps = [ecore_sdl, ecore_input, ecore, dependency('sdl2')]
shared_module(mod_full_name, engine_src,
+ c_args : package_c_args,
include_directories : config_dir + [engine_include_dir],
dependencies : [eina, ecore_evas, ecore_input_evas] + engine_deps,
install : true,
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
index ad922474cd..1cec016ebc 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
@@ -4,9 +4,10 @@
#include "ecore_evas_wayland_private.h"
#include <Evas_Engine_Wayland.h>
+#include "ecore_wl2_internal.h"
-extern EAPI Eina_List *_evas_canvas_image_data_unset(Evas *eo_e);
-extern EAPI void _evas_canvas_image_data_regenerate(Eina_List *list);
+EAPI extern Eina_List *_evas_canvas_image_data_unset(Evas *eo_e);
+EAPI extern void _evas_canvas_image_data_regenerate(Eina_List *list);
#define _smart_frame_type "ecore_evas_wl_frame"
@@ -32,19 +33,27 @@ static Eina_Array *_ecore_evas_wl_event_hdls;
static void _ecore_evas_wayland_resize(Ecore_Evas *ee, int location);
static void _ecore_evas_wl_common_rotation_set(Ecore_Evas *ee, int rotation, int resize);
+static void _ecore_evas_wl_selection_init(Ecore_Evas *ee);
/* local functions */
static void
-_anim_cb_tick(Ecore_Wl2_Window *win EINA_UNUSED, uint32_t timestamp EINA_UNUSED, void *data)
+_anim_cb_tick(Ecore_Wl2_Window *win EINA_UNUSED, uint32_t timestamp, void *data)
{
Ecore_Evas *ee = data;
Ecore_Evas_Engine_Wl_Data *edata;
+ double t;//, rt;
+ /* static double pt = 0.0, prt = 0.0; */
edata = ee->engine.data;
if (!edata->ticking) return;
-
- ecore_evas_animator_tick(ee, NULL, ecore_loop_time_get());
+ t = ((double)timestamp / 1000.0);
+ ecore_loop_time_set(t);
+ /* rt = ecore_time_get(); */
+ /* printf("ECORE_EVAS: wl client anim tick %p | %p - %1.5f @ %1.5f delt=%1.5f | %1.5f\n", ee, edata, t, ecore_time_get(), t - pt, rt - prt); */
+ ecore_evas_animator_tick(ee, NULL, t);
+ /* pt = t; */
+ /* prt = rt; */
}
static void
@@ -57,8 +66,8 @@ _ecore_evas_wl_common_animator_register(Ecore_Evas *ee)
EINA_SAFETY_ON_TRUE_RETURN(edata->ticking);
EINA_SAFETY_ON_TRUE_RETURN(edata->frame != NULL);
- edata->frame = ecore_wl2_window_frame_callback_add(edata->win,
- _anim_cb_tick, ee);
+ edata->frame =
+ ecore_wl2_window_frame_callback_add(edata->win, _anim_cb_tick, ee);
if (!ecore_wl2_window_pending_get(edata->win) && !ee->in_async_render &&
!ee->animator_ticked && !ee->animator_ran && !ee->draw_block)
ecore_wl2_window_false_commit(edata->win);
@@ -112,7 +121,7 @@ _ecore_evas_wl_common_cb_mouse_in(void *data EINA_UNUSED, int type EINA_UNUSED,
Ecore_Evas *ee;
Ecore_Event_Mouse_IO *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev = event;
ee = ecore_event_window_match((Ecore_Window)ev->window);
@@ -133,12 +142,13 @@ _ecore_evas_wl_common_cb_mouse_out(void *data EINA_UNUSED, int type EINA_UNUSED,
Ecore_Evas *ee;
Ecore_Event_Mouse_IO *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev = event;
ee = ecore_event_window_match((Ecore_Window)ev->window);
if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON;
- if ((Ecore_Window)ev->window != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
+ if ((Ecore_Window)ev->window != ee->prop.window)
+ return ECORE_CALLBACK_PASS_ON;
if (!_ecore_evas_mouse_in_check(ee, ev->dev)) return ECORE_CALLBACK_PASS_ON;
ecore_event_evas_seat_modifier_lock_update(ee->evas,
@@ -155,12 +165,13 @@ _ecore_evas_wl_common_cb_focus_in(void *data EINA_UNUSED, int type EINA_UNUSED,
Ecore_Evas *ee;
Ecore_Wl2_Event_Focus_In *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev = event;
ee = ecore_event_window_match((Ecore_Window)ev->window);
if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON;
- if ((Ecore_Window)ev->window != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
+ if ((Ecore_Window)ev->window != ee->prop.window)
+ return ECORE_CALLBACK_PASS_ON;
_ecore_evas_focus_device_set(ee, ev->dev, EINA_TRUE);
return ECORE_CALLBACK_PASS_ON;
}
@@ -171,12 +182,13 @@ _ecore_evas_wl_common_cb_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED,
Ecore_Evas *ee;
Ecore_Wl2_Event_Focus_Out *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev = event;
ee = ecore_event_window_match((Ecore_Window)ev->window);
if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON;
- if ((Ecore_Window)ev->window != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
+ if ((Ecore_Window)ev->window != ee->prop.window)
+ return ECORE_CALLBACK_PASS_ON;
_ecore_evas_focus_device_set(ee, ev->dev, EINA_FALSE);
return ECORE_CALLBACK_PASS_ON;
}
@@ -282,9 +294,7 @@ _ecore_evas_wayland_window_update(Ecore_Evas *ee, Ecore_Evas_Engine_Wl_Data *wda
*/
else if (!ee->alpha)
{
- ecore_wl2_window_opaque_region_set(wdata->win,
- 0, 0,
- fullw, fullh);
+ ecore_wl2_window_opaque_region_set(wdata->win, 0, 0, fullw, fullh);
}
/* alpha is set and we might use it, so we'd better clear the
* opaque region, let the compositor blend it all.
@@ -302,9 +312,9 @@ _ecore_evas_wayland_window_update(Ecore_Evas *ee, Ecore_Evas_Engine_Wl_Data *wda
if (!change) return;
if (ECORE_EVAS_PORTRAIT(ee))
- evas_damage_rectangle_add(ee->evas, 0, 0, fullw, fullh);
+ evas_damage_rectangle_add(ee->evas, 0, 0, fullw, fullh);
else
- evas_damage_rectangle_add(ee->evas, 0, 0, fullh, fullw);
+ evas_damage_rectangle_add(ee->evas, 0, 0, fullh, fullw);
ee->shadow.changed = EINA_FALSE;
}
@@ -313,10 +323,10 @@ static void
_ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- int ow, oh, ew, eh;
+ int ow, oh, ew, eh, fw, fh, ww, hh;
int diff = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
@@ -326,6 +336,8 @@ _ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
ee->req.w = w;
ee->req.h = h;
+ evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
+
/* TODO: wayland client can resize the ecore_evas directly.
* In the future, we will remove ee->req value in wayland backend */
ew = ee->w;
@@ -333,85 +345,81 @@ _ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
ee->w = w;
ee->h = h;
- if (wdata->win->xdg_set_min_size && wdata->win->xdg_toplevel && wdata->win->pending.min)
+ if (wdata->win->xdg_set_min_size && wdata->win->xdg_toplevel &&
+ wdata->win->pending.min)
{
- wdata->win->xdg_set_min_size(wdata->win->xdg_toplevel, ee->prop.min.w, ee->prop.min.h);
+ ww = ee->prop.min.w + fw;
+ hh = ee->prop.min.h + fh;
+ if (ww < 1) ww = 1;
+ if (hh < 1) hh = 1;
+ wdata->win->xdg_set_min_size(wdata->win->xdg_toplevel, ww, hh);
wdata->win->pending.min = 0;
}
- if (wdata->win->xdg_set_max_size && wdata->win->xdg_toplevel && wdata->win->pending.max)
+ if (wdata->win->xdg_set_max_size && wdata->win->xdg_toplevel &&
+ wdata->win->pending.max)
{
- wdata->win->xdg_set_max_size(wdata->win->xdg_toplevel, ee->prop.max.w, ee->prop.max.h);
+ ww = ee->prop.max.w + fw;
+ hh = ee->prop.max.h + fh;
+ if (ww < 0) ww = 0;
+ if (hh < 0) hh = 0;
+ wdata->win->xdg_set_max_size(wdata->win->xdg_toplevel, ww, hh);
wdata->win->pending.max = 0;
}
- if (wdata->win->zxdg_set_min_size && wdata->win->zxdg_toplevel && wdata->win->pending.min)
+ if (wdata->win->zxdg_set_min_size && wdata->win->zxdg_toplevel &&
+ wdata->win->pending.min)
{
- wdata->win->zxdg_set_min_size(wdata->win->zxdg_toplevel, ee->prop.min.w, ee->prop.min.h);
+ ww = ee->prop.min.w + fw;
+ hh = ee->prop.min.h + fh;
+ if (ww < 1) ww = 1;
+ if (hh < 1) hh = 1;
+ wdata->win->zxdg_set_min_size(wdata->win->zxdg_toplevel, ww, hh);
wdata->win->pending.min = 0;
}
- if (wdata->win->zxdg_set_max_size && wdata->win->zxdg_toplevel && wdata->win->pending.max)
+ if (wdata->win->zxdg_set_max_size && wdata->win->zxdg_toplevel &&
+ wdata->win->pending.max)
{
- wdata->win->zxdg_set_max_size(wdata->win->zxdg_toplevel, ee->prop.max.w, ee->prop.max.h);
+ ww = ee->prop.max.w + fw;
+ hh = ee->prop.max.h + fh;
+ if (ww < 0) ww = 0;
+ if (hh < 0) hh = 0;
+ wdata->win->zxdg_set_max_size(wdata->win->zxdg_toplevel, ww, hh);
wdata->win->pending.max = 0;
}
if (!ee->prop.fullscreen)
{
- int fw = 0, fh = 0;
int maxw = 0, maxh = 0;
int minw = 0, minh = 0;
- evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
-
- if (ECORE_EVAS_PORTRAIT(ee))
- {
- if (ee->prop.min.w > 0)
- minw = (ee->prop.min.w - fw);
- if (ee->prop.min.h > 0)
- minh = (ee->prop.min.h - fh);
- if (ee->prop.max.w > 0)
- maxw = (ee->prop.max.w + fw);
- if (ee->prop.max.h > 0)
- maxh = (ee->prop.max.h + fh);
- }
- else
- {
- if (ee->prop.min.w > 0)
- minw = (ee->prop.min.w - fh);
- if (ee->prop.min.h > 0)
- minh = (ee->prop.min.h - fw);
- if (ee->prop.max.w > 0)
- maxw = (ee->prop.max.w + fh);
- if (ee->prop.max.h > 0)
- maxh = (ee->prop.max.h + fw);
- }
+ if (ee->prop.min.w > 0) minw = (ee->prop.min.w);
+ if (ee->prop.min.h > 0) minh = (ee->prop.min.h);
+ if (ee->prop.max.w > 0) maxw = (ee->prop.max.w);
+ if (ee->prop.max.h > 0) maxh = (ee->prop.max.h);
- if ((maxw > 0) && (w > maxw))
- w = maxw;
- else if (w < minw)
- w = minw;
+ if ((maxw > 0) && (w > maxw)) w = maxw;
+ else if (w < minw) w = minw;
- if ((maxh > 0) && (h > maxh))
- h = maxh;
- else if (h < minh)
- h = minh;
+ if ((maxh > 0) && (h > maxh)) h = maxh;
+ else if (h < minh) h = minh;
if (!ee->prop.maximized)
{
/* calc new size using base size & step size */
if (ee->prop.step.w > 1)
{
- int bw = ee->prop.base.w ?: minw;
+ int bw = ee->prop.base.w;
w = (bw + (((w - bw) / ee->prop.step.w) * ee->prop.step.w));
}
if (ee->prop.step.h > 1)
{
- int bh = ee->prop.base.h ?: minh;
+ int bh = ee->prop.base.h;
h = (bh + (((h - bh) / ee->prop.step.h) * ee->prop.step.h));
}
- if (!wdata->win->display->wl.efl_hints && EINA_DBL_NONZERO(ee->prop.aspect))
+ if (!wdata->win->display->wl.efl_hints &&
+ EINA_DBL_NONZERO(ee->prop.aspect))
{
/* copied from e_client.c */
Evas_Aspect_Control aspect;
@@ -479,9 +487,9 @@ _ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
}
if (ECORE_EVAS_PORTRAIT(ee))
- evas_output_size_get(ee->evas, &ow, &oh);
+ evas_output_size_get(ee->evas, &ow, &oh);
else
- evas_output_size_get(ee->evas, &oh, &ow);
+ evas_output_size_get(ee->evas, &oh, &ow);
if (ECORE_EVAS_PORTRAIT(ee) && ((ow != w) || (oh != h)))
diff = 1;
@@ -589,7 +597,7 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
int framew, frameh;
Eina_Bool active, prev_max, prev_full, state_change = EINA_FALSE;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev = event;
ee = ecore_event_window_match((Ecore_Window)ev->win);
@@ -605,9 +613,11 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
prev_max = ee->prop.maximized;
prev_full = ee->prop.fullscreen;
ee->prop.maximized =
- (ev->states & ECORE_WL2_WINDOW_STATE_MAXIMIZED) == ECORE_WL2_WINDOW_STATE_MAXIMIZED;
+ (ev->states & ECORE_WL2_WINDOW_STATE_MAXIMIZED) ==
+ ECORE_WL2_WINDOW_STATE_MAXIMIZED;
ee->prop.fullscreen =
- (ev->states & ECORE_WL2_WINDOW_STATE_FULLSCREEN) == ECORE_WL2_WINDOW_STATE_FULLSCREEN;
+ (ev->states & ECORE_WL2_WINDOW_STATE_FULLSCREEN) ==
+ ECORE_WL2_WINDOW_STATE_FULLSCREEN;
active = wdata->activated;
wdata->activated = ecore_wl2_window_activated_get(wdata->win);
@@ -718,7 +728,7 @@ _ecore_evas_wl_common_cb_window_configure_complete(void *data EINA_UNUSED, int t
Evas_Engine_Info_Wayland *einfo;
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev = event;
ee = ecore_event_window_match((Ecore_Window)ev->win);
@@ -771,8 +781,10 @@ _ecore_evas_wl_common_cb_aux_hint_supported(void *data EINA_UNUSED, int type EI
if (!ee) return ECORE_CALLBACK_PASS_ON;
if ((Ecore_Window)ev->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
wdata = ee->engine.data;
- EINA_LIST_FREE(ee->prop.aux_hint.supported_list, hint) eina_stringshare_del(hint);
- ee->prop.aux_hint.supported_list = ecore_wl2_window_aux_hints_supported_get(wdata->win);
+ EINA_LIST_FREE(ee->prop.aux_hint.supported_list, hint)
+ eina_stringshare_del(hint);
+ ee->prop.aux_hint.supported_list =
+ ecore_wl2_window_aux_hints_supported_get(wdata->win);
return ECORE_CALLBACK_RENEW;
}
@@ -811,7 +823,7 @@ _ecore_evas_wl_common_cb_window_rotate(void *data EINA_UNUSED, int type EINA_UNU
Ecore_Evas *ee;
Ecore_Wl2_Event_Window_Rotation *ev;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
ev = event;
ee = ecore_event_window_match((Ecore_Window)ev->win);
@@ -882,14 +894,14 @@ _rotation_do(Ecore_Evas *ee, int rotation, int resize)
{
/* resize the canvas */
evas_output_size_set(ee->evas, ee->req.w, ee->req.h);
- evas_output_viewport_set(ee->evas, 0, 0,
+ evas_output_viewport_set(ee->evas, 0, 0,
ee->req.w, ee->req.h);
}
else
{
/* resize the canvas */
evas_output_size_set(ee->evas, ee->req.h, ee->req.w);
- evas_output_viewport_set(ee->evas, 0, 0,
+ evas_output_viewport_set(ee->evas, 0, 0,
ee->req.h, ee->req.w);
}
}
@@ -975,43 +987,6 @@ _rotation_do(Ecore_Evas *ee, int rotation, int resize)
}
}
-static Eina_Bool
-_ecore_evas_wl_common_cb_www_drag(void *d EINA_UNUSED, int t EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Window_WWW_Drag *ev = event;
- Ecore_Evas_Engine_Wl_Data *wdata;
- Ecore_Evas *ee;
-
- ee = ecore_event_window_match((Ecore_Window)ev->window);
- if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON;
- if ((Ecore_Window)ev->window != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
-
- wdata = ee->engine.data;
- wdata->dragging = !!ev->dragging;
- if (!ev->dragging)
- evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
- return ECORE_CALLBACK_RENEW;
-}
-
-static Eina_Bool
-_ecore_evas_wl_common_cb_www(void *d EINA_UNUSED, int t EINA_UNUSED, void *event)
-{
- Ecore_Wl2_Event_Window_WWW *ev = event;
- Ecore_Evas_Engine_Wl_Data *wdata;
- Ecore_Evas *ee;
-
- ee = ecore_event_window_match((Ecore_Window)ev->window);
- if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON;
- if ((Ecore_Window)ev->window != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
-
- wdata = ee->engine.data;
- wdata->x_rel += ev->x_rel;
- wdata->y_rel += ev->y_rel;
- wdata->timestamp = ev->timestamp;
- evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
- return ECORE_CALLBACK_RENEW;
-}
-
static void
_ecore_evas_wl_common_cb_device_event_free(void *user_data, void *func_data)
{
@@ -1081,7 +1056,7 @@ _ecore_evas_wl_common_cb_global_added(void *d EINA_UNUSED, int t EINA_UNUSED, vo
EE_Wl_Device *device;
if ((!ev->interface) || (strcmp(ev->interface, "wl_seat")))
- return ECORE_CALLBACK_PASS_ON;
+ return ECORE_CALLBACK_PASS_ON;
EINA_LIST_FOREACH(ee_list, l, ee)
{
@@ -1130,7 +1105,7 @@ _ecore_evas_wl_common_cb_global_removed(void *d EINA_UNUSED, int t EINA_UNUSED,
Eina_List *l, *ll;
if ((!ev->interface) || (strcmp(ev->interface, "wl_seat")))
- return ECORE_CALLBACK_PASS_ON;
+ return ECORE_CALLBACK_PASS_ON;
EINA_LIST_FOREACH(ee_list, l, ee)
{
@@ -1320,7 +1295,7 @@ static int
_ecore_evas_wl_common_init(void)
{
Ecore_Event_Handler *h;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (++_ecore_evas_wl_init_count != 1)
return _ecore_evas_wl_init_count;
@@ -1347,14 +1322,6 @@ _ecore_evas_wl_common_init(void)
_ecore_evas_wl_common_cb_window_configure, NULL);
eina_array_push(_ecore_evas_wl_event_hdls, h);
- h = ecore_event_handler_add(_ecore_wl2_event_window_www,
- _ecore_evas_wl_common_cb_www, NULL);
- eina_array_push(_ecore_evas_wl_event_hdls, h);
-
- h = ecore_event_handler_add(_ecore_wl2_event_window_www_drag,
- _ecore_evas_wl_common_cb_www_drag, NULL);
- eina_array_push(_ecore_evas_wl_event_hdls, h);
-
h = ecore_event_handler_add(ECORE_WL2_EVENT_DISCONNECT,
_ecore_evas_wl_common_cb_disconnect, NULL);
eina_array_push(_ecore_evas_wl_event_hdls, h);
@@ -1409,7 +1376,7 @@ _ecore_evas_wl_common_init(void)
static int
_ecore_evas_wl_common_shutdown(void)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (--_ecore_evas_wl_init_count != 0)
return _ecore_evas_wl_init_count;
@@ -1430,7 +1397,7 @@ _ecore_evas_wl_common_free(Ecore_Evas *ee)
Ecore_Evas_Engine_Wl_Data *wdata;
EE_Wl_Device *device;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
@@ -1441,6 +1408,15 @@ _ecore_evas_wl_common_free(Ecore_Evas *ee)
if (wdata->frame) ecore_wl2_window_frame_callback_del(wdata->frame);
wdata->frame = NULL;
ecore_event_handler_del(wdata->sync_handler);
+ ecore_event_handler_del(wdata->changed_handler);
+ ecore_event_handler_del(wdata->send_handler);
+ ecore_event_handler_del(wdata->offer_handler);
+ ecore_event_handler_del(wdata->dnd_leave_handler);
+ ecore_event_handler_del(wdata->dnd_enter_handler);
+ ecore_event_handler_del(wdata->dnd_motion_handler);
+ ecore_event_handler_del(wdata->dnd_drop_handler);
+ ecore_event_handler_del(wdata->dnd_end_handler);
+
if (wdata->win)
{
ecore_wl2_window_close_callback_set(wdata->win, NULL, NULL);
@@ -1450,7 +1426,7 @@ _ecore_evas_wl_common_free(Ecore_Evas *ee)
ecore_wl2_display_disconnect(wdata->display);
EINA_LIST_FREE(wdata->devices_list, device)
- free(device);
+ free(device);
free(wdata);
@@ -1464,7 +1440,7 @@ _ecore_evas_wl_common_free(Ecore_Evas *ee)
static void
_ecore_evas_wl_common_move_resize(Ecore_Evas *ee, int x EINA_UNUSED, int y EINA_UNUSED, int w, int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if ((ee->w != w) || (ee->h != h))
@@ -1526,10 +1502,12 @@ _ecore_evas_wl_common_pointer_xy_get(const Ecore_Evas *ee, Evas_Coord *x, Evas_C
Ecore_Evas_Engine_Wl_Data *wdata;
Ecore_Wl2_Input *input;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
wdata = ee->engine.data;
- input = ecore_wl2_display_input_find_by_name(ecore_wl2_window_display_get(wdata->win), "default");
+ input =
+ ecore_wl2_display_input_find_by_name
+ (ecore_wl2_window_display_get(wdata->win), "default");
if (input) ecore_wl2_input_pointer_xy_get(input, x, y);
}
@@ -1601,12 +1579,14 @@ _ecore_evas_wl_common_pointer_device_xy_get(const Ecore_Evas *ee, const Efl_Inpu
Ecore_Wl2_Input *input;
const Eo *seat;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
wdata = ee->engine.data;
seat = evas_device_parent_get(pointer);
EINA_SAFETY_ON_NULL_RETURN(seat);
- input = ecore_wl2_display_input_find(ecore_wl2_window_display_get(wdata->win), evas_device_seat_id_get(seat));
+ input =
+ ecore_wl2_display_input_find
+ (ecore_wl2_window_display_get(wdata->win), evas_device_seat_id_get(seat));
EINA_SAFETY_ON_NULL_RETURN(input);
ecore_wl2_input_pointer_xy_get(input, x, y);
}
@@ -1616,11 +1596,12 @@ _ecore_evas_wl_common_aux_hints_supported_update(Ecore_Evas *ee)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
wdata = ee->engine.data;
- ee->prop.aux_hint.supported_list = ecore_wl2_window_aux_hints_supported_get(wdata->win);
+ ee->prop.aux_hint.supported_list =
+ ecore_wl2_window_aux_hints_supported_get(wdata->win);
}
static void
@@ -1628,7 +1609,7 @@ _ecore_evas_wl_common_title_set(Ecore_Evas *ee, const char *title)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (eina_streq(ee->prop.title, title)) return;
@@ -1647,7 +1628,7 @@ _ecore_evas_wl_common_name_class_set(Ecore_Evas *ee, const char *n, const char *
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
wdata = ee->engine.data;
@@ -1671,8 +1652,9 @@ _ecore_evas_wl_common_name_class_set(Ecore_Evas *ee, const char *n, const char *
static void
_ecore_evas_wl_common_size_min_set(Ecore_Evas *ee, int w, int h)
{
+ int fw, fh, ww, hh;
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
@@ -1682,14 +1664,23 @@ _ecore_evas_wl_common_size_min_set(Ecore_Evas *ee, int w, int h)
ee->prop.min.w = w;
ee->prop.min.h = h;
wdata = ee->engine.data;
+ evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
if (wdata->win->xdg_set_min_size && wdata->win->xdg_toplevel)
{
- wdata->win->xdg_set_min_size(wdata->win->xdg_toplevel, w, h);
+ ww = w + fw;
+ hh = h + fh;
+ if (ww < 1) ww = 1;
+ if (hh < 1) hh = 1;
+ wdata->win->xdg_set_min_size(wdata->win->xdg_toplevel, ww, hh);
wdata->win->pending.min = 0;
}
if (wdata->win->zxdg_set_min_size && wdata->win->zxdg_toplevel)
{
- wdata->win->zxdg_set_min_size(wdata->win->zxdg_toplevel, w, h);
+ ww = w + fw;
+ hh = h + fh;
+ if (ww < 1) ww = 1;
+ if (hh < 1) hh = 1;
+ wdata->win->zxdg_set_min_size(wdata->win->zxdg_toplevel, ww, hh);
wdata->win->pending.min = 0;
}
else
@@ -1700,8 +1691,9 @@ _ecore_evas_wl_common_size_min_set(Ecore_Evas *ee, int w, int h)
static void
_ecore_evas_wl_common_size_max_set(Ecore_Evas *ee, int w, int h)
{
+ int fw, fh, ww, hh;
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (w < 0) w = 0;
@@ -1710,14 +1702,23 @@ _ecore_evas_wl_common_size_max_set(Ecore_Evas *ee, int w, int h)
ee->prop.max.w = w;
ee->prop.max.h = h;
wdata = ee->engine.data;
+ evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
if (wdata->win->xdg_set_max_size && wdata->win->xdg_toplevel)
{
- wdata->win->xdg_set_max_size(wdata->win->xdg_toplevel, w, h);
+ ww = w + fw;
+ hh = h + fh;
+ if (ww < 0) ww = 0;
+ if (hh < 0) hh = 0;
+ wdata->win->xdg_set_max_size(wdata->win->xdg_toplevel, ww, hh);
wdata->win->pending.max = 0;
}
if (wdata->win->zxdg_set_max_size && wdata->win->zxdg_toplevel)
{
- wdata->win->zxdg_set_max_size(wdata->win->zxdg_toplevel, w, h);
+ ww = w + fw;
+ hh = h + fh;
+ if (ww < 0) ww = 0;
+ if (hh < 0) hh = 0;
+ wdata->win->zxdg_set_max_size(wdata->win->zxdg_toplevel, ww, hh);
wdata->win->pending.max = 0;
}
else
@@ -1728,7 +1729,7 @@ _ecore_evas_wl_common_size_max_set(Ecore_Evas *ee, int w, int h)
static void
_ecore_evas_wl_common_size_base_set(Ecore_Evas *ee, int w, int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (w < 0) w = 0;
@@ -1742,7 +1743,7 @@ _ecore_evas_wl_common_size_base_set(Ecore_Evas *ee, int w, int h)
static void
_ecore_evas_wl_common_size_step_set(Ecore_Evas *ee, int w, int h)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (w < 0) w = 0;
@@ -1756,7 +1757,7 @@ _ecore_evas_wl_common_size_step_set(Ecore_Evas *ee, int w, int h)
static void
_ecore_evas_wl_common_aspect_set(Ecore_Evas *ee, double aspect)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (EINA_FLT_EQ(ee->prop.aspect, aspect)) return;
@@ -1784,14 +1785,16 @@ _ecore_evas_wl_common_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int la
wdata = ee->engine.data;
if (obj == _ecore_evas_default_cursor_image_get(ee)) return;
- input = ecore_wl2_display_input_find_by_name(ecore_wl2_window_display_get(wdata->win), "default");
+ input =
+ ecore_wl2_display_input_find_by_name
+ (ecore_wl2_window_display_get(wdata->win), "default");
if (input) ecore_wl2_input_pointer_set(input, NULL, hot_x, hot_y);
}
static void
_ecore_evas_wl_common_layer_set(Ecore_Evas *ee, int layer)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (ee->prop.layer == layer) return;
@@ -1806,7 +1809,7 @@ _ecore_evas_wl_common_iconified_set(Ecore_Evas *ee, Eina_Bool on)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
ee->prop.iconified = on;
@@ -1818,7 +1821,7 @@ _ecore_evas_wl_common_iconified_set(Ecore_Evas *ee, Eina_Bool on)
static void
_ecore_evas_wl_common_borderless_set(Ecore_Evas *ee, Eina_Bool on)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (ee->prop.borderless == on) return;
@@ -1832,7 +1835,7 @@ _ecore_evas_wl_common_maximized_set(Ecore_Evas *ee, Eina_Bool on)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (ee->prop.maximized == on) return;
@@ -1846,7 +1849,7 @@ _ecore_evas_wl_common_fullscreen_set(Ecore_Evas *ee, Eina_Bool on)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (ee->prop.fullscreen == on) return;
@@ -1858,7 +1861,7 @@ _ecore_evas_wl_common_fullscreen_set(Ecore_Evas *ee, Eina_Bool on)
static void
_ecore_evas_wl_common_ignore_events_set(Ecore_Evas *ee, int ignore)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
ee->ignore_events = ignore;
@@ -1923,7 +1926,7 @@ _ecore_evas_wayland_alpha_do(Ecore_Evas *ee, int alpha)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (ee->alpha == alpha) return;
@@ -1973,7 +1976,7 @@ _ecore_evas_wl_common_prepare(Ecore_Evas *ee)
static void
_ecore_evas_wl_common_withdrawn_set(Ecore_Evas *ee, Eina_Bool on)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (ee->prop.withdrawn == on) return;
@@ -1992,7 +1995,7 @@ _ecore_evas_wl_common_screen_geometry_get(const Ecore_Evas *ee, int *x, int *y,
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (x) *x = 0;
if (y) *y = 0;
@@ -2008,7 +2011,7 @@ _ecore_evas_wl_common_screen_dpi_get(const Ecore_Evas *ee, int *xdpi, int *ydpi)
Ecore_Wl2_Output *output;
int dpi = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
if (xdpi) *xdpi = 0;
@@ -2029,7 +2032,7 @@ _ecore_evas_wayland_resize(Ecore_Evas *ee, int location)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
wdata = ee->engine.data;
@@ -2042,7 +2045,7 @@ _ecore_evas_wayland_move(Ecore_Evas *ee, int x EINA_UNUSED, int y EINA_UNUSED)
{
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!ee) return;
wdata = ee->engine.data;
@@ -2136,8 +2139,9 @@ _ecore_evas_wl_common_show(Ecore_Evas *ee)
{
Evas_Engine_Info_Wayland *einfo;
Ecore_Evas_Engine_Wl_Data *wdata;
+ int ww, hh;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if ((!ee) || (ee->visible)) return;
@@ -2153,31 +2157,50 @@ _ecore_evas_wl_common_show(Ecore_Evas *ee)
{
int fw, fh;
- if (wdata->win->xdg_set_min_size && wdata->win->xdg_toplevel && wdata->win->pending.min)
+ evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
+ if (wdata->win->xdg_set_min_size && wdata->win->xdg_toplevel &&
+ wdata->win->pending.min)
{
- wdata->win->xdg_set_min_size(wdata->win->xdg_toplevel, ee->prop.min.w, ee->prop.min.h);
+ ww = ee->prop.min.w + fw;
+ hh = ee->prop.min.h + fh;
+ if (ww < 1) ww = 1;
+ if (hh < 1) hh = 1;
+ wdata->win->xdg_set_min_size(wdata->win->xdg_toplevel, ww, hh);
wdata->win->pending.min = 0;
}
- if (wdata->win->xdg_set_max_size && wdata->win->xdg_toplevel && wdata->win->pending.max)
+ if (wdata->win->xdg_set_max_size && wdata->win->xdg_toplevel &&
+ wdata->win->pending.max)
{
- wdata->win->xdg_set_max_size(wdata->win->xdg_toplevel, ee->prop.max.w, ee->prop.max.h);
+ ww = ee->prop.max.w + fw;
+ hh = ee->prop.max.h + fh;
+ if (ww < 0) ww = 0;
+ if (hh < 0) hh = 0;
+ wdata->win->xdg_set_max_size(wdata->win->xdg_toplevel, ww, hh);
wdata->win->pending.max = 0;
}
- if (wdata->win->zxdg_set_min_size && wdata->win->zxdg_toplevel && wdata->win->pending.min)
+ if (wdata->win->zxdg_set_min_size && wdata->win->zxdg_toplevel &&
+ wdata->win->pending.min)
{
- wdata->win->zxdg_set_min_size(wdata->win->zxdg_toplevel, ee->prop.min.w, ee->prop.min.h);
+ ww = ee->prop.min.w + fw;
+ hh = ee->prop.min.h + fh;
+ if (ww < 1) ww = 1;
+ if (hh < 1) hh = 1;
+ wdata->win->zxdg_set_min_size(wdata->win->zxdg_toplevel, ww, hh);
wdata->win->pending.min = 0;
}
- if (wdata->win->zxdg_set_max_size && wdata->win->zxdg_toplevel && wdata->win->pending.max)
+ if (wdata->win->zxdg_set_max_size && wdata->win->zxdg_toplevel &&
+ wdata->win->pending.max)
{
- wdata->win->zxdg_set_max_size(wdata->win->zxdg_toplevel, ee->prop.max.w, ee->prop.max.h);
+ ww = ee->prop.max.w + fw;
+ hh = ee->prop.max.h + fh;
+ if (ww < 0) ww = 0;
+ if (hh < 0) hh = 0;
+ wdata->win->zxdg_set_max_size(wdata->win->zxdg_toplevel, ww, hh);
wdata->win->pending.max = 0;
}
_ecore_evas_wayland_window_update(ee, wdata, ee->alpha);
- evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
-
ecore_wl2_window_show(wdata->win);
einfo = (Evas_Engine_Info_Wayland *)evas_engine_info_get(ee->evas);
if (einfo)
@@ -2185,7 +2208,6 @@ _ecore_evas_wl_common_show(Ecore_Evas *ee)
einfo->info.destination_alpha = ee_needs_alpha(ee);
einfo->info.wl2_win = wdata->win;
einfo->info.hidden = wdata->win->pending.configure; //EINA_FALSE;
- einfo->www_avail = !!wdata->win->www_surface;
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
ERR("Failed to set Evas Engine Info for '%s'", ee->driver);
if (ECORE_EVAS_PORTRAIT(ee))
@@ -2208,7 +2230,7 @@ _ecore_evas_wl_common_hide(Ecore_Evas *ee)
Evas_Engine_Info_Wayland *einfo;
Ecore_Evas_Engine_Wl_Data *wdata;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if ((!ee) || (!ee->visible)) return;
wdata = ee->engine.data;
@@ -2257,7 +2279,7 @@ _ecore_evas_wl_common_alpha_set(Ecore_Evas *ee, int alpha)
static void
_ecore_evas_wl_common_rotation_set(Ecore_Evas *ee, int rotation, int resize)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (ee->rotation == rotation) return;
@@ -2387,6 +2409,518 @@ _ecore_wl2_devices_setup(Ecore_Evas *ee, Ecore_Wl2_Display *display)
return r;
}
+static void
+_reeval_seat(unsigned int *seat, Ecore_Evas *ee)
+{
+ if (*seat == 0)
+ {
+ *seat =
+ evas_device_seat_id_get(evas_default_device_get
+ (ee->evas, EVAS_DEVICE_CLASS_SEAT));
+ }
+}
+
+static inline void
+_clear_selection(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection)
+{
+ Ecore_Evas_Engine_Wl_Data *edata = ee->engine.data;
+ Ecore_Evas_Selection_Callbacks *cbs;
+
+ cbs = &edata->selection_data[selection].callbacks;
+ EINA_SAFETY_ON_FALSE_RETURN(cbs->cancel);
+
+ cbs->cancel(ee, seat, selection);
+ eina_array_free(cbs->available_types);
+ memset(cbs, 0, sizeof(Ecore_Evas_Selection_Callbacks));
+}
+
+static void
+_store_selection_cbs(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel)
+{
+ Ecore_Evas_Wl_Selection_Data *sdata;
+ Ecore_Evas_Engine_Wl_Data *edata;
+ Ecore_Evas_Selection_Callbacks *cbs;
+
+ edata = ee->engine.data;
+ sdata = &edata->selection_data[selection];
+ cbs = &sdata->callbacks;
+
+ if (cbs->cancel)
+ {
+ _clear_selection(ee, seat, selection);
+ }
+
+ cbs->delivery = delivery;
+ cbs->cancel = cancel;
+ cbs->available_types = available_types;
+}
+
+static inline Ecore_Wl2_Input*
+_fetch_input(Ecore_Evas *ee, unsigned int seat)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ return ecore_wl2_display_input_find(ecore_wl2_window_display_get(wdata->win), seat);
+}
+
+static Eina_Bool
+_ecore_evas_wl_selection_claim(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ Ecore_Evas_Wl_Selection_Data *data = &wdata->selection_data[selection];
+ char *tmp_array[eina_array_count(available_types) + 1];
+
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER)
+ {
+ _store_selection_cbs(ee, seat, selection, available_types,
+ delivery, cancel);
+ return EINA_TRUE;
+ }
+
+ _reeval_seat(&seat, ee);
+ _store_selection_cbs(ee, seat, selection, available_types, delivery, cancel);
+
+ for (unsigned int i = 0; i < eina_array_count(available_types); ++i)
+ {
+ tmp_array[i] = eina_array_data_get(available_types, i);
+ }
+ tmp_array[eina_array_count(available_types)] = NULL;
+
+ data->sent_serial =
+ ecore_wl2_dnd_selection_set(_fetch_input(ee, seat),
+ (const char**)tmp_array);
+ return EINA_TRUE;
+}
+
+
+static Eina_Future*
+_ecore_evas_wl_selection_request(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *acceptable_types)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ Ecore_Evas_Wl_Selection_Data *data = &wdata->selection_data[selection];
+ Ecore_Wl2_Input *input;
+ Ecore_Wl2_Offer *offer = NULL;
+ Eina_Future *future;
+
+ _reeval_seat(&seat, ee);
+ input = _fetch_input(ee, seat);
+
+ if (data->delivery)
+ {
+ eina_promise_reject(data->delivery, ecore_evas_request_replaced);
+ data->delivery = NULL;
+ }
+ data->delivery = efl_loop_promise_new(efl_main_loop_get());
+ future = eina_future_new(data->delivery);
+
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ {
+ offer = data->offer = wdata->external_offer;
+ }
+ else if (selection == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ {
+ offer = data->offer = ecore_wl2_dnd_selection_get(input);
+ }
+
+ if (!offer)
+ {
+ eina_promise_reject(data->delivery, ecore_evas_no_selection);
+ data->delivery = NULL;
+ }
+ else
+ {
+ Eina_Array *available_types = ecore_wl2_offer_mimes_get(offer);
+ char *selected_type = NULL;
+
+ for (unsigned int i = 0; i < eina_array_count(available_types) && !selected_type; ++i)
+ {
+ char *available_type = eina_array_data_get(available_types, i);
+ for (unsigned int j = 0; j < eina_array_count(acceptable_types) && !selected_type; ++j)
+ {
+ Eina_Iterator *convertions;
+ const char *convert_available_type;
+ char *acceptable_type;
+
+ acceptable_type = eina_array_data_get(acceptable_types, j);
+ if (eina_streq(acceptable_type, available_type))
+ {
+ selected_type = available_type;
+ data->later_convert = NULL;
+ break;
+ }
+
+ convertions =
+ eina_content_converter_possible_conversions(available_type);
+
+ EINA_ITERATOR_FOREACH(convertions, convert_available_type)
+ {
+ if (eina_streq(convert_available_type, acceptable_type))
+ {
+ selected_type = available_type;
+ data->later_convert = acceptable_type;
+ }
+ }
+ eina_iterator_free(convertions);
+ }
+
+ }
+ if (selected_type)
+ {
+ ecore_wl2_offer_receive(offer, selected_type);
+ ecore_wl2_display_flush(ecore_wl2_input_display_get(input));
+ }
+ else
+ {
+ eina_promise_reject(data->delivery, ecore_evas_no_matching_type);
+ data->delivery = NULL;
+ }
+ }
+
+ return future;
+}
+
+static Eina_Bool
+_ecore_evas_wl_selection_has_owner(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection EINA_UNUSED)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ Ecore_Wl2_Input *input;
+
+ _reeval_seat(&seat, ee);
+ input = _fetch_input(ee, seat);
+
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER )
+ return !!ecore_wl2_dnd_selection_get(input);
+ else if (selection == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ {
+ Ecore_Evas_Wl_Selection_Data *data = &wdata->selection_data[selection];
+ return !!data->offer;
+ }
+
+ return EINA_FALSE; //the selection buffer is not supportet in wayland
+}
+
+static Eina_Bool
+_wl_selection_changed(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Ecore_Wl2_Event_Seat_Selection *sel = event;
+ Ecore_Evas *ee = data;
+ Ecore_Wl2_Input *input;
+ unsigned int seat = sel->seat;
+
+ _reeval_seat(&seat, ee);
+ input = _fetch_input(ee, seat);
+ if (!ecore_wl2_dnd_selection_get(input))
+ return ECORE_CALLBACK_PASS_ON;
+
+ if (ee->func.fn_selection_changed)
+ {
+ ee->func.fn_selection_changed
+ (ee, 0, ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER);
+ }
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+typedef struct
+{
+ Eina_Rw_Slice slice;
+ unsigned int written_bytes;
+} Delayed_Writing;
+
+static Eina_Bool
+_write_to_fd(void *data, Ecore_Fd_Handler *fd_handler)
+{
+ int fd;
+ size_t len;
+ Delayed_Writing *slice = data;
+
+ fd = ecore_main_fd_handler_fd_get(fd_handler);
+ if (fd < 0) goto end;
+
+ len = write(fd, (char*)slice->slice.mem + slice->written_bytes,
+ slice->slice.len - slice->written_bytes);
+
+ slice->written_bytes += len;
+ if (slice->written_bytes != slice->slice.len)
+ {
+ return EINA_TRUE;
+ }
+ else
+ {
+end:
+ ecore_main_fd_handler_del(fd_handler);
+ free(slice->slice.mem);
+ free(slice);
+ if (fd > -1) close(fd);
+ return EINA_FALSE;
+ }
+}
+
+static Eina_Bool
+_wl_interaction_send(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Wl2_Event_Data_Source_Send *ev = event;
+ Ecore_Evas *ee = data;
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ Ecore_Evas_Wl_Selection_Data *selection = NULL;
+ Delayed_Writing *forign_slice = calloc(1, sizeof(Delayed_Writing));
+ Ecore_Evas_Selection_Buffer buffer = ECORE_EVAS_SELECTION_BUFFER_LAST;
+
+ if (ev->serial == wdata->selection_data[ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER].sent_serial)
+ buffer = ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER;
+ else if (ev->serial == wdata->selection_data[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER].sent_serial)
+ {
+ buffer = ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER;
+ ee->drag.accepted = EINA_TRUE;
+ }
+
+ if (buffer == ECORE_EVAS_SELECTION_BUFFER_LAST)
+ {
+ //silent return, this send request was *not* for this window
+ goto end;
+ }
+
+ selection = &wdata->selection_data[buffer];
+ EINA_SAFETY_ON_NULL_GOTO(selection, end);
+ EINA_SAFETY_ON_NULL_GOTO(selection->callbacks.delivery, end);
+ EINA_SAFETY_ON_FALSE_GOTO(selection->callbacks.delivery
+ (ee, ev->seat, buffer, ev->type,
+ &forign_slice->slice), end);
+ ecore_main_fd_handler_add(ev->fd, ECORE_FD_WRITE, _write_to_fd,
+ forign_slice, NULL, NULL);
+
+ return ECORE_CALLBACK_PASS_ON;
+
+end:
+ free(forign_slice);
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_wl_selection_receive(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ Ecore_Wl2_Event_Offer_Data_Ready *ready = event;
+ Ecore_Evas_Selection_Buffer selection = ECORE_EVAS_SELECTION_BUFFER_LAST;
+
+ if ((!ready->data) || (ready->len < 1))
+ {
+ ERR("no selection data");
+ return ECORE_CALLBACK_PASS_ON;
+ }
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ if (wdata->selection_data[i].offer == ready->offer)
+ {
+ selection = i;
+ break;
+ }
+ }
+
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_LAST)
+ return ECORE_CALLBACK_PASS_ON;
+
+ //Now deliver the content
+ Eina_Slice slice;
+
+ if (eina_str_has_prefix(ready->mimetype,"text"))
+ {
+ //ensure that we always have a \0 at the end, there is no assertion that \0 is included here.
+ slice.len = ready->len + 1;
+ slice.mem =
+ eina_memdup((unsigned char*)ready->data, ready->len, EINA_TRUE);
+ }
+ else
+ {
+ slice.len = ready->len;
+ slice.mem = ready->data;
+ }
+
+ Eina_Content *content = eina_content_new(slice, ready->mimetype);
+
+ if (wdata->selection_data[selection].later_convert)
+ {
+ Eina_Content *tmp;
+
+ tmp = eina_content_convert(content, wdata->selection_data[selection].later_convert);
+ wdata->selection_data[selection].later_convert = NULL;
+ eina_content_free(content);
+ content = tmp;
+ }
+
+ eina_promise_resolve(wdata->selection_data[selection].delivery,
+ eina_value_content_init(content));
+ wdata->selection_data[selection].delivery = NULL;
+ eina_content_free(content);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_wl_selection_dnd_leave(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Evas *ee = data;
+ Eina_Position2D cpos;
+ Eina_Position2D fpos = EINA_POSITION2D(0, 0);
+ Ecore_Wl2_Event_Dnd_Leave *ev = event;
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+
+ if (ee->prop.window != (Ecore_Window)ev->win) return ECORE_CALLBACK_PASS_ON;
+
+ //evas_output_framespace_get(ee->evas, &fpos.x, &fpos.y, NULL, NULL);
+ ecore_wl2_input_pointer_xy_get(ecore_wl2_display_input_find
+ (ev->display, ev->seat), &cpos.x, &cpos.y);
+ ecore_evas_dnd_leave(data, ev->seat, EINA_POSITION2D(cpos.x - fpos.x,
+ cpos.y - fpos.y));
+ wdata->external_offer = NULL;
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_wl_selection_dnd_motion(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Wl2_Event_Dnd_Motion *ev = event;
+ Eina_Position2D fpos = EINA_POSITION2D(0, 0);
+
+ if (ee->prop.window != (Ecore_Window)ev->win) return ECORE_CALLBACK_PASS_ON;
+
+ evas_output_framespace_get(ee->evas, &fpos.x, &fpos.y, NULL, NULL);
+ ecore_evas_dnd_position_set(data, ev->seat,
+ EINA_POSITION2D(ev->x - fpos.x, ev->y - fpos.y));
+ return ECORE_CALLBACK_PASS_ON;
+}
+static Eina_Bool
+_wl_selection_dnd_enter(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Wl2_Event_Dnd_Enter *ev = event;
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ Eina_Position2D fpos = EINA_POSITION2D(0, 0);
+
+ if (ee->prop.window != (Ecore_Window)ev->win) return ECORE_CALLBACK_PASS_ON;
+
+ evas_output_framespace_get(ee->evas, &fpos.x, &fpos.y, NULL, NULL);
+ ecore_evas_dnd_enter(data, ev->seat,
+ eina_array_iterator_new
+ (ecore_wl2_offer_mimes_get(ev->offer)),
+ EINA_POSITION2D(ev->x - fpos.x, ev->y - fpos.y));
+ ecore_wl2_offer_mimes_set(ev->offer, ecore_wl2_offer_mimes_get(ev->offer));
+ wdata->external_offer = ev->offer;
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_wl_selection_dnd_drop(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Wl2_Event_Dnd_Drop *ev = event;
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ if (ee->prop.window != (Ecore_Window)ev->win) return ECORE_CALLBACK_PASS_ON;
+ wdata = ee->engine.data;
+
+ if (ee->func.fn_dnd_drop)
+ {
+ ee->func.fn_dnd_drop(ee, ev->seat,
+ ecore_evas_dnd_pos_get(ee, ev->seat), "ask");
+ }
+
+ ecore_wl2_dnd_drag_end(_fetch_input(ee, ev->seat));
+ wdata->external_offer = NULL;
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+static Eina_Bool
+_wl_selection_dnd_end(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Wl2_Event_Dnd_End *ev = event;
+
+ if (ee->prop.window != (Ecore_Window)ev->win) return ECORE_CALLBACK_PASS_ON;
+
+
+ if (ee->drag.free)
+ ee->drag.free(ee, ev->seat, ee->drag.data, ee->drag.accepted);
+ ee->drag.free = NULL;
+ //we got dropped, we should call
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static void
+_ecore_evas_wl_selection_init(Ecore_Evas *ee)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+
+ wdata->changed_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_SEAT_SELECTION,
+ _wl_selection_changed, ee);
+ wdata->send_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_SEND,
+ _wl_interaction_send, ee);
+ wdata->offer_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_OFFER_DATA_READY,
+ _wl_selection_receive, ee);
+ wdata->dnd_leave_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_DND_LEAVE,
+ _wl_selection_dnd_leave, ee);
+ wdata->dnd_motion_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_DND_MOTION,
+ _wl_selection_dnd_motion, ee);
+ wdata->dnd_enter_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_DND_ENTER,
+ _wl_selection_dnd_enter, ee);
+ wdata->dnd_drop_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_DND_DROP,
+ _wl_selection_dnd_drop, ee);
+ wdata->dnd_end_handler =
+ ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_END,
+ _wl_selection_dnd_end, ee);
+
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ wdata->selection_data[i].callbacks.available_types = NULL;
+ wdata->selection_data[i].callbacks.delivery = NULL;
+ wdata->selection_data[i].callbacks.cancel = NULL;
+ }
+}
+
+static Eina_Bool
+_ecore_evas_wl_dnd_start(Ecore_Evas *ee, unsigned int seat, Eina_Array *available_types, Ecore_Evas *drag_rep, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel, const char *action EINA_UNUSED)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+ const char *tmp_array[eina_array_count(available_types) + 1];
+
+ _reeval_seat(&seat, ee);
+ _store_selection_cbs(ee, seat, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER,
+ available_types, delivery, cancel);
+
+ for (unsigned int i = 0; i < eina_array_count(available_types); ++i)
+ {
+ tmp_array[i] = eina_array_data_get(available_types, i);
+ }
+ tmp_array[eina_array_count(available_types)] = NULL;
+
+ ecore_wl2_dnd_drag_types_set(_fetch_input(ee, seat),
+ (const char**)tmp_array);
+ wdata->selection_data[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER].sent_serial =
+ ecore_wl2_dnd_drag_start(_fetch_input(ee, seat),
+ _ecore_evas_wayland_window_get(ee),
+ _ecore_evas_wayland_window_get(drag_rep));
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_ecore_evas_wl_dnd_stop(Ecore_Evas *ee, unsigned int seat)
+{
+ _clear_selection(ee, seat, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER);
+ _reeval_seat(&seat, ee);
+ ecore_wl2_dnd_drag_end(_fetch_input(ee, seat));
+ return EINA_TRUE;
+}
+
static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
{
_ecore_evas_wl_common_free,
@@ -2472,6 +3006,11 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
_ecore_evas_wl_common_pointer_device_xy_get,
_ecore_evas_wl_common_prepare,
NULL, //fn_last_tick_get
+ _ecore_evas_wl_selection_claim, //fn_selection_claim
+ _ecore_evas_wl_selection_has_owner, //fn_selection_has_owner
+ _ecore_evas_wl_selection_request, //fn_selection_request
+ _ecore_evas_wl_dnd_start, //fn_dnd_start
+ _ecore_evas_wl_dnd_stop, //fn_dnd_stop
};
static void
@@ -2496,7 +3035,7 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, Ecore_Window parent, i
Ecore_Evas *ee = NULL;
int method = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(method = evas_render_method_lookup(engine_name)))
{
@@ -2648,6 +3187,7 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, Ecore_Window parent, i
}
_ecore_evas_wl_common_wm_rotation_protocol_set(ee);
+ _ecore_evas_wl_selection_init(ee);
ecore_evas_done(ee, EINA_FALSE);
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
index f5530bc61d..fd9415de41 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
@@ -31,7 +31,7 @@
EAPI Ecore_Evas *
ecore_evas_wayland_egl_new_internal(const char *disp_name, Ecore_Window parent, int x, int y, int w, int h, Eina_Bool frame, const int *opt)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_evas_wl_common_new_internal(disp_name, parent,
x, y, w, h, frame,
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
index e69970f262..8213dc2b32 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
@@ -11,10 +11,10 @@
//#define LOGFNS 1
# ifdef LOGFNS
# include <stdio.h>
-# define LOGFN(fl, ln, fn) \
- printf("-ECORE_EVAS-WL: %25s: %5i - %s\n", fl, ln, fn);
+# define LOGFN \
+ printf("-ECORE_EVAS-WL: %25s: %5i - %s\n", __FILE__, __LINE__, __func__)
# else
-# define LOGFN(fl, ln, fn)
+# define LOGFN
# endif
# include <Eina.h>
@@ -34,12 +34,23 @@
typedef struct _Ecore_Evas_Engine_Wl_Data Ecore_Evas_Engine_Wl_Data;
+typedef struct _Ecore_Evas_Wl_Selection_Data Ecore_Evas_Wl_Selection_Data;
+
+struct _Ecore_Evas_Wl_Selection_Data
+{
+ Ecore_Evas_Selection_Callbacks callbacks;
+ Eina_Promise *delivery;
+ Ecore_Wl2_Offer *offer;
+ const char *later_convert;
+ uint32_t sent_serial; //The serial of the last sent selection op
+};
+
struct _Ecore_Evas_Engine_Wl_Data
{
Ecore_Wl2_Display *display;
Eina_List *regen_objs;
Ecore_Wl2_Window *parent, *win;
- Ecore_Event_Handler *sync_handler;
+ Ecore_Event_Handler *sync_handler, *changed_handler, *end_handler, *send_handler, *offer_handler, *dnd_leave_handler, *dnd_motion_handler, *dnd_enter_handler, *dnd_drop_handler, *dnd_end_handler;
int fx, fy, fw, fh;
Ecore_Wl2_Frame_Cb_Handle *frame;
int x_rel;
@@ -47,7 +58,8 @@ struct _Ecore_Evas_Engine_Wl_Data
uint32_t timestamp;
Eina_List *devices_list;
int cw, ch;
-
+ Ecore_Evas_Wl_Selection_Data selection_data[ECORE_EVAS_SELECTION_BUFFER_LAST];
+ Ecore_Wl2_Offer *external_offer;
struct
{
Eina_Bool supported : 1;
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
index 252b1ffa02..1481bf6f2b 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
@@ -31,7 +31,7 @@
EAPI Ecore_Evas *
ecore_evas_wayland_shm_new_internal(const char *disp_name, Ecore_Window parent, int x, int y, int w, int h, Eina_Bool frame)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return _ecore_evas_wl_common_new_internal(disp_name, parent, x, y, w, h,
frame, NULL, "wayland_shm");
diff --git a/src/modules/ecore_evas/engines/wayland/meson.build b/src/modules/ecore_evas/engines/wayland/meson.build
index fbc27a396b..259d8bcdd8 100644
--- a/src/modules/ecore_evas/engines/wayland/meson.build
+++ b/src/modules/ecore_evas/engines/wayland/meson.build
@@ -11,7 +11,7 @@ engine_src = files([
'ecore_evas_wayland_private.h'
])
-engine_deps = [ecore_wl2, ecore_input]
+engine_deps = [ecore_wl2, ecore_input] + ecore_wl2_ext_deps
engine_include_dir += include_directories(join_paths('..', '..', '..', 'evas', 'engines', 'wayland_common'))
diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
index 39def9d49f..623515da95 100644
--- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
+++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
@@ -54,6 +54,8 @@
#define ECORE_EVAS_EVENT_COUNT 11
+#define EE_SZ(sz_) (ee->sz_ == 0) ? 1 : (ee->sz_)
+
static int _ecore_evas_init_count = 0;
static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
@@ -62,11 +64,16 @@ static const int interface_win32_version = 1;
typedef struct _Ecore_Evas_Engine_Data_Win32 Ecore_Evas_Engine_Data_Win32;
-struct _Ecore_Evas_Engine_Data_Win32 {
+struct _Ecore_Evas_Engine_Data_Win32
+{
Ecore_Win32_Window *parent;
- struct {
- unsigned char region : 1;
- unsigned char fullscreen : 1;
+ Ecore_Evas_Selection_Callbacks clipboard;
+ Eina_Future *delivery;
+ struct
+ {
+ unsigned char region : 1;
+ unsigned char fullscreen : 1;
+ unsigned char maximized : 1;
} state;
};
@@ -94,6 +101,7 @@ static Eina_Bool _ecore_evas_win32_event_window_delete_request(void *data EINA_U
static Eina_Bool _ecore_evas_win32_event_window_property_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
+
/* Private functions */
static int
@@ -370,13 +378,13 @@ _ecore_evas_win32_event_window_configure(void *data EINA_UNUSED, int type EINA_U
if (ECORE_EVAS_PORTRAIT(ee))
{
- evas_output_size_set(ee->evas, ee->w, ee->h);
- evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+ evas_output_size_set(ee->evas, EE_SZ(w), EE_SZ(h));
+ evas_output_viewport_set(ee->evas, 0, 0, EE_SZ(w), EE_SZ(h));
}
else
{
- evas_output_size_set(ee->evas, ee->h, ee->w);
- evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+ evas_output_size_set(ee->evas, EE_SZ(h), EE_SZ(w));
+ evas_output_viewport_set(ee->evas, 0, 0, EE_SZ(h), EE_SZ(w));
}
if (ee->prop.avoid_damage)
{
@@ -427,9 +435,11 @@ _ecore_evas_win32_event_window_property_change(void *data EINA_UNUSED, int type
{
struct {
struct {
+ unsigned char maximized : 1;
unsigned char fullscreen : 1;
} win32;
struct {
+ Eina_Bool maximized : 1;
Eina_Bool fullscreen : 1;
} prop;
} prev;
@@ -449,12 +459,16 @@ _ecore_evas_win32_event_window_property_change(void *data EINA_UNUSED, int type
wdata = ee->engine.data;
prev.win32.fullscreen = wdata->state.fullscreen;
+ prev.win32.maximized = wdata->state.maximized;
prev.prop.fullscreen = ee->prop.fullscreen;
+ prev.prop.maximized = ee->prop.maximized;
wdata->state.fullscreen = 0;
+ wdata->state.maximized = 0;
ee->prop.fullscreen = EINA_FALSE;
+ ee->prop.maximized = EINA_FALSE;
/* we get the states status */
ecore_win32_window_state_get(e->window, &state, &num);
@@ -468,6 +482,10 @@ _ecore_evas_win32_event_window_property_change(void *data EINA_UNUSED, int type
ee->prop.fullscreen = 1;
wdata->state.fullscreen = 1;
break;
+ case ECORE_WIN32_WINDOW_STATE_MAXIMIZED:
+ ee->prop.maximized = 1;
+ wdata->state.maximized = 1;
+ break;
default:
break;
}
@@ -476,7 +494,9 @@ _ecore_evas_win32_event_window_property_change(void *data EINA_UNUSED, int type
}
if ((prev.win32.fullscreen != wdata->state.fullscreen) ||
- (prev.prop.fullscreen != ee->prop.fullscreen))
+ (prev.prop.fullscreen != ee->prop.fullscreen) ||
+ (prev.win32.maximized != wdata->state.maximized) ||
+ (prev.prop.maximized != ee->prop.maximized))
{
if (ee->func.fn_state_change)
ee->func.fn_state_change(ee);
@@ -501,6 +521,8 @@ _ecore_evas_win32_state_update(Ecore_Evas *ee)
state[num++] = ECORE_WIN32_WINDOW_STATE_MAXIMIZED_VERT;
if (ee->prop.maximized)
state[num++] = ECORE_WIN32_WINDOW_STATE_MAXIMIZED_HORZ;
+ if (ee->prop.maximized)
+ state[num++] = ECORE_WIN32_WINDOW_STATE_MAXIMIZED;
// if (bd->client.netwm.state.shaded)
// state[num++] = ECORE_WIN32_WINDOW_STATE_SHADED;
/* if (ee->prop.focus_skip) */
@@ -599,13 +621,13 @@ _ecore_evas_win32_move_resize(Ecore_Evas *ee, int x, int y, int width, int heigh
x, y, width, height);
if (ECORE_EVAS_PORTRAIT(ee))
{
- evas_output_size_set(ee->evas, ee->w, ee->h);
- evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+ evas_output_size_set(ee->evas, EE_SZ(w), EE_SZ(h));
+ evas_output_viewport_set(ee->evas, 0, 0, EE_SZ(w), EE_SZ(h));
}
else
{
- evas_output_size_set(ee->evas, ee->h, ee->w);
- evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+ evas_output_size_set(ee->evas, EE_SZ(h), EE_SZ(w));
+ evas_output_viewport_set(ee->evas, 0, 0, EE_SZ(h), EE_SZ(w));
}
if (ee->prop.avoid_damage)
{
@@ -664,13 +686,13 @@ _ecore_evas_win32_rotation_set_internal(Ecore_Evas *ee, int rotation)
h, w);
if (ECORE_EVAS_PORTRAIT(ee))
{
- evas_output_size_set(ee->evas, ee->w, ee->h);
- evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+ evas_output_size_set(ee->evas, EE_SZ(w), EE_SZ(h));
+ evas_output_viewport_set(ee->evas, 0, 0, EE_SZ(w), EE_SZ(h));
}
else
{
- evas_output_size_set(ee->evas, ee->h, ee->w);
- evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+ evas_output_size_set(ee->evas, EE_SZ(h), EE_SZ(w));
+ evas_output_viewport_set(ee->evas, 0, 0, EE_SZ(h), EE_SZ(w));
}
if (ee->func.fn_resize) ee->func.fn_resize(ee);
}
@@ -824,7 +846,8 @@ _ecore_evas_win32_activate(Ecore_Evas *ee)
{
INF("ecore evas activate");
- ecore_win32_window_focus((Ecore_Win32_Window *)ee->prop.window);
+ ecore_evas_show(ee);
+ ecore_win32_window_activate((Ecore_Win32_Window *)ee->prop.window);
}
static void
@@ -967,6 +990,30 @@ _ecore_evas_win32_override_set(Ecore_Evas *ee, Eina_Bool on)
}
static void
+_ecore_evas_win32_maximized_set(Ecore_Evas *ee, Eina_Bool on)
+{
+ Ecore_Evas_Engine_Data_Win32 *wdata = ee->engine.data;
+
+ INF("ecore evas maximized set");
+
+ wdata->state.maximized = !!on;
+ if (ee->should_be_visible)
+ {
+ struct _Ecore_Win32_Window *window;
+
+ window = (Ecore_Win32_Window *)ee->prop.window;
+ ecore_win32_window_maximized_set(window, on);
+ }
+ else
+ {
+ if (ee->prop.maximized == on) return;
+ ee->prop.maximized = on;
+ wdata->state.maximized = on;
+ _ecore_evas_win32_state_update(ee);
+ }
+}
+
+static void
_ecore_evas_win32_fullscreen_set(Ecore_Evas *ee, Eina_Bool on)
{
Ecore_Evas_Engine_Data_Win32 *wdata = ee->engine.data;
@@ -1197,93 +1244,225 @@ _ecore_evas_win32_screen_dpi_get(const Ecore_Evas *ee, int *xdpi, int *ydpi)
*ydpi = y_dpi;
}
+static Eina_Value
+_delivery(void *data, const Eina_Value value EINA_UNUSED, const Eina_Future *dead_future EINA_UNUSED)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Evas_Engine_Data_Win32 *edata = ee->engine.data;
+ Eina_Rw_Slice slice;
+ const char *mime_type = NULL;
+
+ EINA_SAFETY_ON_NULL_GOTO(edata->delivery, end);
+
+ for (unsigned int i = 0; i < eina_array_count(edata->clipboard.available_types); ++i)
+ {
+ mime_type = eina_array_data_get(edata->clipboard.available_types, i);
+ if (eina_str_has_prefix(mime_type, "text/"))
+ break;
+ }
+ if (mime_type)
+ {
+ edata->clipboard.delivery(ee, 1, ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER, mime_type, &slice);
+ EINA_SAFETY_ON_FALSE_GOTO(ecore_win32_clipboard_set((Ecore_Win32_Window *)ee->prop.window, slice.mem, slice.len, mime_type), end);
+ }
+ else
+ {
+ ERR("No compatible mime type found");
+ }
+
+end:
+ return EINA_VALUE_EMPTY;
+}
+
+static Eina_Bool
+_ecore_evas_win32_selection_claim(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel)
+{
+ Ecore_Evas_Engine_Data_Win32 *edata = ee->engine.data;
+
+ if (selection != ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ return EINA_FALSE;
+
+ if (!delivery && !cancel)
+ {
+ edata->clipboard.delivery = NULL;
+ edata->clipboard.cancel = NULL;
+ eina_array_clean(edata->clipboard.available_types);
+ ecore_win32_clipboard_clear((Ecore_Win32_Window *)ee->prop.window);
+ return EINA_TRUE;
+ }
+ else
+ {
+ if (edata->clipboard.cancel)
+ {
+ edata->clipboard.cancel(ee, seat, selection);
+ eina_array_free(edata->clipboard.available_types);
+ }
+
+ edata->delivery = efl_loop_job(efl_main_loop_get());
+ eina_future_then(edata->delivery, _delivery, ee);
+ edata->clipboard.delivery = delivery;
+ edata->clipboard.cancel = cancel;
+ edata->clipboard.available_types = available_types;
+ return EINA_TRUE;
+ }
+}
+
+Eina_Future*
+_ecore_evas_win32_selection_request(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection, Eina_Array *acceptable_type)
+{
+ Eina_Future *future;
+ Eina_Promise *promise;
+ const char *mime_type = NULL;
+
+ if (selection != ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ return eina_future_rejected(efl_loop_future_scheduler_get(efl_main_loop_get()), ecore_evas_no_selection);
+
+ promise = efl_loop_promise_new(efl_main_loop_get());
+ future = eina_future_new(promise);
+
+ for (unsigned int i = 0; i < eina_array_count(acceptable_type); ++i)
+ {
+ mime_type = eina_array_data_get(acceptable_type, i);
+ if (eina_str_has_prefix(mime_type, "text/"))
+ break;
+ }
+ if (!mime_type)
+ {
+ eina_promise_reject(promise, ecore_evas_no_matching_type);
+ }
+ else
+ {
+ size_t size;
+ void *data;
+ Eina_Content *content;
+ Eina_Rw_Slice slice;
+
+ data = ecore_win32_clipboard_get((Ecore_Win32_Window *)ee->prop.window, &size, mime_type);
+ if (size != 0)
+ {
+ if (eina_str_has_prefix(mime_type, "text/"))
+ {
+ //ensure that we always have a \0 at the end, there is no assertion that \0 is included here.
+ slice.len = size + 1;
+ slice.mem = eina_memdup(data, size, EINA_TRUE);
+ free(data);
+ }
+ else
+ {
+ slice.len = size;
+ slice.mem = data;
+ }
+ content = eina_content_new(eina_rw_slice_slice_get(slice), mime_type);
+ free(slice.mem); //memory got duplicated in eina_content_new
+ if (!content) // construction can fail because of some validation reasons
+ eina_promise_reject(promise, ecore_evas_no_matching_type);
+ else
+ eina_promise_resolve(promise, eina_value_content_init(content));
+ }
+ else
+ eina_promise_reject(promise, ecore_evas_no_matching_type);
+ }
+ return future;
+}
+
+static Eina_Bool
+_ecore_evas_win32_selection_has_owner(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection)
+{
+ return (selection == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER);
+}
+
static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
{
_ecore_evas_win32_free,
- NULL,
- NULL,
- NULL,
- NULL,
- _ecore_evas_win32_callback_delete_request_set,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- _ecore_evas_win32_move,
- NULL,
- _ecore_evas_win32_resize,
- _ecore_evas_win32_move_resize,
- _ecore_evas_win32_rotation_set,
- _ecore_evas_win32_shaped_set,
- _ecore_evas_win32_show,
- _ecore_evas_win32_hide,
- _ecore_evas_win32_raise,
- _ecore_evas_win32_lower,
- _ecore_evas_win32_activate,
- _ecore_evas_win32_title_set,
- NULL, /* _ecore_evas_x_name_class_set */
- _ecore_evas_win32_size_min_set,
- _ecore_evas_win32_size_max_set,
- _ecore_evas_win32_size_base_set,
- _ecore_evas_win32_size_step_set,
- _ecore_evas_win32_object_cursor_set,
- _ecore_evas_win32_object_cursor_unset,
- NULL, /* _ecore_evas_x_layer_set */
- _ecore_evas_win32_focus_set,
- _ecore_evas_win32_iconified_set,
- _ecore_evas_win32_borderless_set,
- _ecore_evas_win32_override_set,
- NULL,
- _ecore_evas_win32_fullscreen_set,
- NULL, /* _ecore_evas_x_avoid_damage_set */
- NULL, /* _ecore_evas_x_withdrawn_set */
- NULL, /* _ecore_evas_x_sticky_set */
- NULL, /* _ecore_evas_x_ignore_events_set */
- _ecore_evas_win32_alpha_set,
- NULL, //transparent
- NULL, // profiles_set
- NULL, // profile_set
-
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-
- NULL, // render
- _ecore_evas_win32_screen_geometry_get,
- _ecore_evas_win32_screen_dpi_get,
- NULL,
- NULL, // msg_send
-
- NULL, // pointer_xy_get
- NULL, // pointer_warp
-
- NULL, // wm_rot_preferred_rotation_set
- NULL, // wm_rot_available_rotations_set
- NULL, // wm_rot_manual_rotation_done_set
- NULL, // wm_rot_manual_rotation_done
-
- NULL, // aux_hints_set
-
- NULL, // fn_animator_register
- NULL, // fn_animator_unregister
-
- NULL, // fn_evas_changed
- NULL, //fn_focus_device_set
- NULL, //fn_callback_focus_device_in_set
- NULL, //fn_callback_focus_device_out_set
- NULL, //fn_callback_device_mouse_in_set
- NULL, //fn_callback_device_mouse_out_set
- NULL, //fn_pointer_device_xy_get
- NULL, //fn_prepare
- NULL, //fn_last_tick_get
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ _ecore_evas_win32_callback_delete_request_set,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ _ecore_evas_win32_move,
+ NULL,
+ _ecore_evas_win32_resize,
+ _ecore_evas_win32_move_resize,
+ _ecore_evas_win32_rotation_set,
+ _ecore_evas_win32_shaped_set,
+ _ecore_evas_win32_show,
+ _ecore_evas_win32_hide,
+ _ecore_evas_win32_raise,
+ _ecore_evas_win32_lower,
+ _ecore_evas_win32_activate,
+ _ecore_evas_win32_title_set,
+ NULL, /* _ecore_evas_x_name_class_set */
+ _ecore_evas_win32_size_min_set,
+ _ecore_evas_win32_size_max_set,
+ _ecore_evas_win32_size_base_set,
+ _ecore_evas_win32_size_step_set,
+ _ecore_evas_win32_object_cursor_set,
+ _ecore_evas_win32_object_cursor_unset,
+ NULL, /* _ecore_evas_x_layer_set */
+ _ecore_evas_win32_focus_set,
+ _ecore_evas_win32_iconified_set,
+ _ecore_evas_win32_borderless_set,
+ _ecore_evas_win32_override_set,
+ _ecore_evas_win32_maximized_set,
+ _ecore_evas_win32_fullscreen_set,
+ NULL, /* _ecore_evas_x_avoid_damage_set */
+ NULL, /* _ecore_evas_x_withdrawn_set */
+ NULL, /* _ecore_evas_x_sticky_set */
+ NULL, /* _ecore_evas_x_ignore_events_set */
+ _ecore_evas_win32_alpha_set,
+ NULL, //transparent
+ NULL, // profiles_set
+ NULL, // profile_set
+
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+
+ NULL, // render
+ _ecore_evas_win32_screen_geometry_get,
+ _ecore_evas_win32_screen_dpi_get,
+ NULL,
+ NULL, // msg_send
+
+ NULL, // pointer_xy_get
+ NULL, // pointer_warp
+
+ NULL, // wm_rot_preferred_rotation_set
+ NULL, // wm_rot_available_rotations_set
+ NULL, // wm_rot_manual_rotation_done_set
+ NULL, // wm_rot_manual_rotation_done
+
+ NULL, // aux_hints_set
+
+ NULL, // fn_animator_register
+ NULL, // fn_animator_unregister
+
+ NULL, // fn_evas_changed
+ NULL, //fn_focus_device_set
+ NULL, //fn_callback_focus_device_in_set
+ NULL, //fn_callback_focus_device_out_set
+ NULL, //fn_callback_device_mouse_in_set
+ NULL, //fn_callback_device_mouse_out_set
+ NULL, //fn_pointer_device_xy_get
+ NULL, //fn_prepare
+ NULL, //fn_last_tick_get
+ _ecore_evas_win32_selection_claim, //fn_selection_claim
+ _ecore_evas_win32_selection_has_owner, //fn_selection_has_owner
+ _ecore_evas_win32_selection_request, //fn_selection_request
+ NULL, //fn_dnd_start
+ NULL, //fn_dnd_stop
};
#endif /* BUILD_ECORE_EVAS_WIN32 */
diff --git a/src/modules/ecore_evas/engines/win32/meson.build b/src/modules/ecore_evas/engines/win32/meson.build
index 65fbfc1bb1..197f306e83 100644
--- a/src/modules/ecore_evas/engines/win32/meson.build
+++ b/src/modules/ecore_evas/engines/win32/meson.build
@@ -6,6 +6,7 @@ config_h.set('BUILD_ECORE_EVAS_SOFTWARE_GDI', '1')
engine_deps = [engine_software_ddraw, engine_software_gdi]
shared_module(mod_full_name, engine_src,
+ c_args : package_c_args,
include_directories : config_dir + [engine_include_dir],
dependencies : [eina, ecore_win32, ecore_input, ecore_evas, ecore_input_evas] + engine_deps,
install : true,
diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
index 97e5fb2d10..bb5f02c853 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -13,6 +13,7 @@
#include <Ecore_X.h>
#include <Ecore_X_Atoms.h>
+#include <Efreet.h>
#ifdef BUILD_ECORE_EVAS_SOFTWARE_X11
# include <Evas_Engine_Software_X11.h>
@@ -48,6 +49,8 @@
# endif
#endif /* ! _WIN32 */
+#define ECORE_EVAS_X11_SELECTION 0x7F
+
#define EDBG(...) \
EINA_LOG(_ecore_evas_log_dom, EINA_LOG_LEVEL_DBG + 1, __VA_ARGS__);
@@ -73,6 +76,17 @@ static Eina_Bool wm_exists;
typedef struct _Ecore_Evas_Engine_Data_X11 Ecore_Evas_Engine_Data_X11;
+typedef struct {
+ EINA_MAGIC;
+ Ecore_Evas_Selection_Callbacks callbacks;
+ Ecore_Evas_Selection_Buffer buffer;
+ Ecore_Evas *ee;
+ Eina_Promise *delivery;
+ Eina_Array *acceptable_type;
+ Eina_Stringshare *requested_type;
+ Eina_Stringshare *later_conversion;
+} Ecore_Evas_X11_Selection_Data;
+
struct _Ecore_Evas_Engine_Data_X11 {
Ecore_X_Window win_root;
Eina_List *win_extra;
@@ -128,6 +142,11 @@ struct _Ecore_Evas_Engine_Data_X11 {
void *visual; // store visual used to create pixmap
unsigned long colormap; // store colormap used to create pixmap
} pixmap;
+ Ecore_Evas_X11_Selection_Data selection_data[ECORE_EVAS_SELECTION_BUFFER_LAST];
+ Eina_Array *xserver_atom_name_during_dnd;
+ Ecore_Event_Handler *mouse_up_handler;
+ Ecore_Job *init_job;
+ int skip_clean_event;
Eina_Bool destroyed : 1; // X window has been deleted and cannot be used
Eina_Bool fully_obscured : 1; // X window is fully obscured
Eina_Bool configured : 1; // X window has been configured
@@ -151,6 +170,8 @@ static void _alpha_do(Ecore_Evas *, int);
static void _transparent_do(Ecore_Evas *, int);
static void _avoid_damage_do(Ecore_Evas *, int);
static void _rotation_do(Ecore_Evas *, int, int);
+static void _ecore_evas_x_selection_init(void);
+static void _ecore_evas_x_selection_window_init(Ecore_Evas *ee);
#define SWAP_INT(a, b) do { a ^= b; b ^= a; a ^= b; } while (0)
@@ -361,7 +382,7 @@ _ecore_evas_x_aux_hints_supported_update(Ecore_Evas *ee)
for (i = 0; i < num; i++)
{
hint = eina_stringshare_add(str[i]);
- ee->prop.aux_hint.supported_list =
+ ee->prop.aux_hint.supported_list =
eina_list_append(ee->prop.aux_hint.supported_list, hint);
}
@@ -414,7 +435,7 @@ _ecore_evas_x_gl_window_new(Ecore_Evas *ee, Ecore_X_Window parent, int x, int y,
op++;
einfo->vsync = opt[op];
}
-#ifdef EVAS_ENGINE_GL_X11_SWAP_MODE_EXISTS
+#ifdef EVAS_ENGINE_GL_X11_SWAP_MODE_EXISTS
else if (opt[op] == ECORE_EVAS_GL_X11_OPT_SWAP_MODE)
{
op++;
@@ -768,7 +789,12 @@ _resize_shape_do(Ecore_Evas *ee)
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
- if (edata->mask) ecore_x_pixmap_free(edata->mask);
+ if (edata->mask)
+ {
+ ecore_x_pixmap_free(edata->mask);
+ edata->mask = 0;
+ }
+ if (!ee->shaped) return;
edata->mask = ecore_x_pixmap_new(ee->prop.window, ee->w + fw, ee->h + fh, 1);
foreground = 0;
gc = ecore_x_gc_new(edata->mask,
@@ -845,7 +871,7 @@ _ecore_evas_x_event_property_change(void *data EINA_UNUSED, int type EINA_UNUSED
Eina_Bool focus_skip : 1;
} prop;
} prev;
-
+
prev.x.modal = edata->state.modal;
prev.x.sticky = edata->state.sticky;
prev.x.maximized_v = edata->state.maximized_v;
@@ -856,7 +882,7 @@ _ecore_evas_x_event_property_change(void *data EINA_UNUSED, int type EINA_UNUSED
prev.x.fullscreen = edata->state.fullscreen;
prev.x.above = edata->state.above;
prev.x.below = edata->state.below;
-
+
prev.prop.modal = ee->prop.modal;
prev.prop.maximized = ee->prop.maximized;
prev.prop.sticky = ee->prop.sticky;
@@ -879,7 +905,7 @@ _ecore_evas_x_event_property_change(void *data EINA_UNUSED, int type EINA_UNUSED
ee->prop.sticky = EINA_FALSE;
ee->prop.fullscreen = EINA_FALSE;
// ee->prop.focus_skip = EINA_FALSE;
-
+
ecore_x_netwm_window_state_get(e->win, &state, &num);
if (state)
{
@@ -1253,7 +1279,7 @@ _ecore_evas_x_event_mouse_in(void *data EINA_UNUSED, int type EINA_UNUSED, void
if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON; /* pass on event */
if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
edata = ee->engine.data;
-/*
+/*
{
time_t t;
char *ct;
@@ -1304,7 +1330,7 @@ _ecore_evas_x_event_mouse_in(void *data EINA_UNUSED, int type EINA_UNUSED, void
edata->outdelay = NULL;
_fake_out(ee);
}
-
+
/* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */
if (!_ecore_evas_mouse_in_check(ee, NULL))
{
@@ -1388,7 +1414,7 @@ _ecore_evas_x_event_mouse_out(void *data EINA_UNUSED, int type EINA_UNUSED, void
ecore_timer_del(edata->outdelay);
edata->outdelay = NULL;
}
-
+
// if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0;
// printf("OUT: ee->in=%i, e->mode=%i, e->detail=%i, dount_count=%i\n",
// ee->in, e->mode, e->detail, evas_event_down_count_get(ee->evas));
@@ -1417,7 +1443,7 @@ _ecore_evas_x_event_window_focus_in(void *data EINA_UNUSED, int type EINA_UNUSED
ee = ecore_event_window_match(e->win);
if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON; /* pass on event */
if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
-//xx// filtering with these doesnt help
+//xx// filtering with these doesnt help
//xx// if (e->mode == ECORE_X_EVENT_MODE_UNGRAB) return ECORE_CALLBACK_PASS_ON;
_ecore_evas_focus_device_set(ee, NULL, EINA_TRUE);
return ECORE_CALLBACK_PASS_ON;
@@ -1433,7 +1459,7 @@ _ecore_evas_x_event_window_focus_out(void *data EINA_UNUSED, int type EINA_UNUSE
ee = ecore_event_window_match(e->win);
if ((!ee) || (ee->ignore_events)) return ECORE_CALLBACK_PASS_ON; /* pass on event */
if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
-//xx// filtering with these doesnt help
+//xx// filtering with these doesnt help
//xx// if (e->mode == ECORE_X_EVENT_MODE_GRAB) return ECORE_CALLBACK_PASS_ON;
// if (ee->prop.fullscreen)
@@ -1534,6 +1560,8 @@ _ecore_evas_x_shadow_update(Ecore_Evas *ee)
ECORE_X_ATOM_CARDINAL, 32, shadow, 4);
}
+static void _ecore_evas_x_size_pos_hints_update(Ecore_Evas *ee);
+
static Eina_Bool
_ecore_evas_x_event_window_configure(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
@@ -1568,7 +1596,7 @@ _ecore_evas_x_event_window_configure(void *data EINA_UNUSED, int type EINA_UNUSE
}
if (edata->direct_resize) return ECORE_CALLBACK_PASS_ON;
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_MOUSE);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_MOUSE);
pointer = evas_device_parent_get(pointer);
cursor = eina_hash_find(ee->prop.cursors, &pointer);
EINA_SAFETY_ON_NULL_RETURN_VAL(cursor, ECORE_CALLBACK_PASS_ON);
@@ -1672,6 +1700,8 @@ _ecore_evas_x_event_window_configure(void *data EINA_UNUSED, int type EINA_UNUSE
}
}
}
+ if (framespace_resized)
+ _ecore_evas_x_size_pos_hints_update(ee);
}
return ECORE_CALLBACK_PASS_ON;
}
@@ -1763,15 +1793,19 @@ _ecore_evas_x_event_window_hide(void *data EINA_UNUSED, int type EINA_UNUSED, vo
static void
_ecore_evas_x_size_pos_hints_update(Ecore_Evas *ee)
{
+ int fw, fh;
+
+ fw = ee->framespace.w;
+ fh = ee->framespace.h;
ecore_x_icccm_size_pos_hints_set(ee->prop.window,
ee->prop.request_pos /*request_pos */,
ECORE_X_GRAVITY_NW /* gravity */,
- ee->prop.min.w /* min_w */,
- ee->prop.min.h /* min_h */,
- ee->prop.max.w /* max_w */,
- ee->prop.max.h /* max_h */,
- ee->prop.base.w /* base_w */,
- ee->prop.base.h /* base_h */,
+ ee->prop.min.w + fw /* min_w */,
+ ee->prop.min.h + fh /* min_h */,
+ ee->prop.max.w + fw /* max_w */,
+ ee->prop.max.h + fh /* max_h */,
+ ee->prop.base.w + fw /* base_w */,
+ ee->prop.base.h + fh /* base_h */,
ee->prop.step.w /* step_x */,
ee->prop.step.h /* step_y */,
ee->prop.aspect /* min_aspect */,
@@ -1962,6 +1996,7 @@ _ecore_evas_x_init(void)
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CREATE,
_ecore_evas_x_event_window_create, NULL);
ecore_event_evas_init();
+ _ecore_evas_x_selection_init();
return _ecore_evas_init_count;
}
@@ -1989,6 +2024,7 @@ _ecore_evas_x_free(Ecore_Evas *ee)
{
Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+ ecore_job_del(edata->init_job);
if (edata->pixmap.back)
ecore_x_pixmap_free(edata->pixmap.back);
if (edata->pixmap.front)
@@ -2137,7 +2173,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
}
/* check for valid property window
- *
+ *
* NB: If we do not have one, check for valid pixmap rendering */
if (!ee->prop.window)
{
@@ -2145,7 +2181,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
if ((edata->pixmap.w != vw) || (edata->pixmap.h != vh))
{
/* free the backing pixmap */
- if (edata->pixmap.back)
+ if (edata->pixmap.back)
ecore_x_pixmap_free(edata->pixmap.back);
}
}
@@ -2294,7 +2330,7 @@ _ecore_evas_x_rotation_set_internal(Ecore_Evas *ee, int rotation, int resize,
Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
int fw = 0, fh = 0;
- pointer = evas_default_device_get(ee->evas, EFL_INPUT_DEVICE_TYPE_MOUSE);
+ pointer = evas_default_device_get(ee->evas, EVAS_DEVICE_CLASS_MOUSE);
pointer = evas_device_parent_get(pointer);
cursor = eina_hash_find(ee->prop.cursors, &pointer);
EINA_SAFETY_ON_NULL_RETURN(cursor);
@@ -2688,6 +2724,7 @@ _alpha_do(Ecore_Evas *ee, int alpha)
_ecore_evas_x_aux_hints_supported_update(ee);
_ecore_evas_x_aux_hints_update(ee);
_ecore_evas_x_size_pos_hints_update(ee);
+ _ecore_evas_x_selection_window_init(ee);
#endif /* BUILD_ECORE_EVAS_SOFTWARE_X11 */
if ((id = getenv("DESKTOP_STARTUP_ID")))
{
@@ -2842,6 +2879,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
_ecore_evas_x_aux_hints_supported_update(ee);
_ecore_evas_x_aux_hints_update(ee);
_ecore_evas_x_size_pos_hints_update(ee);
+ _ecore_evas_x_selection_window_init(ee);
#endif /* BUILD_ECORE_EVAS_OPENGL_X11 */
if ((id = getenv("DESKTOP_STARTUP_ID")))
{
@@ -2910,7 +2948,7 @@ _ecore_evas_x_aspect_set(Ecore_Evas *ee, double aspect)
ee->prop.aspect = aspect;
_ecore_evas_x_size_pos_hints_update(ee);
-// netwm state
+// netwm state
// if (ee->should_be_visible)
// ecore_x_netwm_state_request_send(ee->prop.window, ee->engine.x.win_root,
// ECORE_X_WINDOW_STATE_STICKY, -1, sticky);
@@ -3265,20 +3303,21 @@ _ecore_evas_x_maximized_set(Ecore_Evas *ee, Eina_Bool on)
{
Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
- if (ee->prop.maximized == on) return;
- ee->prop.maximized = 1;
- edata->state.maximized_h = 1;
- edata->state.maximized_v = 1;
-// ee->prop.maximized = on;
if (ee->should_be_visible)
{
ecore_x_netwm_state_request_send(ee->prop.window, edata->win_root,
- ECORE_X_WINDOW_STATE_MAXIMIZED_VERT, -1, on);
- ecore_x_netwm_state_request_send(ee->prop.window, edata->win_root,
- ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ, -1, on);
+ ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
+ ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
+ on);
}
else
- _ecore_evas_x_state_update(ee);
+ {
+ if (ee->prop.maximized == on) return;
+ ee->prop.maximized = on;
+ edata->state.maximized_h = on;
+ edata->state.maximized_v = on;
+ _ecore_evas_x_state_update(ee);
+ }
}
static void
@@ -3537,14 +3576,14 @@ norandr:
if (!found) goto norandr;
}
-static void
+static void
_ecore_evas_x_pointer_xy_get(const Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
{
if (ee->prop.window)
ecore_x_pointer_xy_get(ee->prop.window, x, y);
}
-static Eina_Bool
+static Eina_Bool
_ecore_evas_x_pointer_warp(const Ecore_Evas *ee, Evas_Coord x, Evas_Coord y)
{
return ecore_x_pointer_warp(ee->prop.window, x, y);
@@ -3659,6 +3698,804 @@ _ecore_evas_x_aux_hints_set(Ecore_Evas *ee, const char *hints)
(ee->prop.window, ECORE_X_ATOM_E_WINDOW_AUX_HINT);
}
+static Ecore_X_Atom ecore_evas_selection_to_atom[] = {0, 0, 0, 0};
+static Ecore_Event_Handler *ecore_evas_selection_handlers[8];
+
+static inline Ecore_Evas_Selection_Buffer
+_atom_to_selection(Ecore_X_Atom atom)
+{
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ if (ecore_evas_selection_to_atom[i] == atom)
+ return i;
+ }
+ return ECORE_EVAS_SELECTION_BUFFER_LAST;
+}
+
+static Eina_Stringshare*
+_decrypt_type(const char *target)
+{
+ // reference https://tronche.com/gui/x/icccm/sec-2.html
+ if (eina_streq(target, "TEXT")) return eina_stringshare_add("text/plain");
+ //FIXME no support in eina_content for that so far
+ if (eina_streq(target, "COMPOUND_TEXT")) return eina_stringshare_add("text/plain");
+ // reference https://tronche.com/gui/x/icccm/sec-2.html
+ if (eina_streq(target, "STRING")) return eina_stringshare_add("text/plain;charset=iso-8859-1");
+ if (eina_streq(target, "UTF8_STRING")) return eina_stringshare_add("text/plain;charset=utf-8");
+
+ return eina_stringshare_add(target);
+}
+
+static Eina_Stringshare*
+_mime_to_xserver_type(const char *target)
+{
+ // FIXME // reference https://tronche.com/gui/x/icccm/sec-2.html says it is in the owners choice of encoding, not sure what this means directly here
+ if (eina_streq(target, "text/plain")) return eina_stringshare_add("TEXT");
+ // reference https://tronche.com/gui/x/icccm/sec-2.html
+ if (eina_streq(target, "text/plain;charset=iso-8859-1")) return eina_stringshare_add("STRING");
+ if (eina_streq(target, "text/plain;charset=utf-8")) return eina_stringshare_add("UTF8_STRING");
+
+ return eina_stringshare_add(target);
+}
+
+static inline void
+_clear_selection(Ecore_Evas *ee, Ecore_Evas_Selection_Buffer selection)
+{
+ Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+ Ecore_Evas_Selection_Callbacks *cbs = &edata->selection_data[selection].callbacks;
+
+ EINA_SAFETY_ON_FALSE_RETURN(cbs->cancel);
+
+ cbs->cancel(ee, 1, selection);
+ eina_array_free(cbs->available_types);
+
+ cbs->delivery = NULL;
+ cbs->cancel = NULL;
+ cbs->available_types = NULL;
+}
+
+static void
+_clear_selection_delivery(Ecore_Evas *ee, Ecore_Evas_Selection_Buffer selection)
+{
+ Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+ eina_stringshare_replace(&edata->selection_data[selection].requested_type, NULL);
+ eina_stringshare_replace(&edata->selection_data[selection].later_conversion, NULL);
+ edata->selection_data[selection].delivery = NULL;
+ eina_array_free(edata->selection_data[selection].acceptable_type);
+ edata->selection_data[selection].acceptable_type = NULL;
+}
+
+static void
+_ecore_x_selection_request(Ecore_X_Window win, Ecore_Evas_Selection_Buffer selection, const char *type)
+{
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER)
+ ecore_x_selection_primary_request(win, type);
+ else if (selection == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ ecore_x_selection_clipboard_request(win, type);
+ else
+ ecore_x_selection_xdnd_request(win, type);
+}
+
+static void
+_search_fitting_type(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_Selection_Buffer selection, Eina_Array *arr)
+{
+ Eina_Stringshare *mime_type;
+ Eina_Bool found_conversion = EINA_FALSE;
+
+#define HANDLE_TYPE() \
+ { \
+ edata->selection_data[selection].requested_type = eina_stringshare_add(x11_name); \
+ edata->selection_data[selection].later_conversion = eina_stringshare_add(acceptable_type);\
+ found_conversion = EINA_TRUE; \
+ break; \
+ }
+
+ EINA_SAFETY_ON_NULL_RETURN(edata->selection_data[selection].acceptable_type);
+
+ for (unsigned int i = 0; i < eina_array_count(arr) && !found_conversion; ++i)
+ {
+ const char *x11_name = eina_array_data_get(arr, i);
+ mime_type = _decrypt_type(x11_name);
+
+ for (unsigned int j = 0; j < eina_array_count(edata->selection_data[selection].acceptable_type) && !found_conversion; ++j)
+ {
+ const char *acceptable_type = (const char*) eina_array_data_get(edata->selection_data[selection].acceptable_type, j);
+
+ if (mime_type == acceptable_type)
+ HANDLE_TYPE()
+
+ //if there is no available type yet, check if we can convert to the desired type via this type
+ if (!found_conversion)
+ {
+ const char *convertion_type = NULL;
+ Eina_Iterator *iter = eina_content_converter_possible_conversions(mime_type);
+ EINA_ITERATOR_FOREACH(iter, convertion_type)
+ {
+ if (convertion_type == acceptable_type)
+ HANDLE_TYPE()
+ }
+ eina_iterator_free(iter);
+ }
+ }
+ eina_stringshare_del(mime_type);
+ }
+ if (found_conversion)
+ {
+ _ecore_x_selection_request(ee->prop.window, selection, edata->selection_data[selection].requested_type);
+ }
+ else
+ {
+ eina_promise_resolve(edata->selection_data[selection].delivery, eina_value_error_init(ecore_evas_no_matching_type));
+ _clear_selection_delivery(ee, selection);
+ }
+
+#undef HANDLE_TYPE
+}
+
+static void
+_search_fitting_type_from_event(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_Selection_Buffer selection, Ecore_X_Event_Selection_Notify *ev)
+{
+ Ecore_X_Atom *available_atoms;
+ Ecore_X_Selection_Data_Targets *targets;
+ Eina_Array *tmp = eina_array_new(10);
+
+ targets = ev->data;
+ available_atoms = (Ecore_X_Atom *)targets->data.data;
+ for (int i = 0; i < targets->data.length; ++i)
+ {
+ Ecore_X_Atom atom = available_atoms[i];
+ eina_array_push(tmp, ecore_x_atom_name_get(atom));
+ }
+ _search_fitting_type(ee, edata, selection, tmp);
+ eina_array_free(tmp);
+}
+
+static Eina_Content*
+_create_delivery_content(unsigned long int size, const void *mem, const char *mime_type)
+{
+ Eina_Content *content;
+
+ content = eina_content_new((Eina_Slice){.len = size, .mem = mem}, mime_type);
+
+ return content;
+}
+
+static void
+_deliver_content(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_Selection_Buffer selection, Ecore_X_Event_Selection_Notify *ev)
+{
+ Eina_Content *result = NULL;
+ Eina_Stringshare *mime_type = _decrypt_type(edata->selection_data[selection].requested_type);
+
+ EINA_SAFETY_ON_NULL_GOTO(ev->data, err);
+ if (eina_streq(mime_type, "text/uri-list"))
+ {
+ Ecore_X_Selection_Data_Files *files = ev->data;
+ Efreet_Uri *uri;
+ Eina_Strbuf *strbuf;
+ int i;
+
+ strbuf = eina_strbuf_new();
+
+ for (i = 0; i < files->num_files ; i++)
+ {
+ uri = efreet_uri_decode(files->files[i]);
+ if (uri)
+ {
+ eina_strbuf_append(strbuf, uri->path);
+ efreet_uri_free(uri);
+ }
+ else
+ {
+ eina_strbuf_append(strbuf, files->files[i]);
+ }
+ if (i < (files->num_files - 1))
+ eina_strbuf_append(strbuf, "\n");
+ }
+ result = _create_delivery_content(eina_strbuf_length_get(strbuf) + 1, eina_strbuf_string_get(strbuf), mime_type);
+ eina_strbuf_free(strbuf);
+ }
+ else if (eina_str_has_prefix(mime_type,"text"))
+ {
+ Ecore_X_Selection_Data *x11_data = ev->data;
+ //ensure that we always have a \0 at the end, there is no assertion that \0 is included here.
+ void *null_terminated = eina_memdup(x11_data->data, x11_data->length, EINA_TRUE);
+
+ result = _create_delivery_content(x11_data->length + 1, null_terminated, mime_type);
+ free(null_terminated);
+ }
+ else if (eina_str_has_prefix(mime_type,"image"))
+ {
+ Ecore_X_Selection_Data *x11_data = ev->data;
+ Eina_Content *tmp_container = eina_content_new((Eina_Slice){.len = x11_data->length, .mem = x11_data->data}, mime_type);
+ const char *file = eina_content_as_file(tmp_container);
+
+ result = _create_delivery_content(strlen(file), file, mime_type);
+ eina_content_free(tmp_container);
+ }
+ else
+ {
+ Ecore_X_Selection_Data *x11_data = ev->data;
+ result = _create_delivery_content(x11_data->length, x11_data->data, mime_type);
+ }
+ EINA_SAFETY_ON_NULL_GOTO(result, err);
+
+ //ensure that we deliver the correct type, we might have choosen a convertion before
+ if (edata->selection_data[selection].later_conversion != mime_type)
+ {
+ Eina_Content *tmp = eina_content_convert(result, edata->selection_data[selection].later_conversion);
+ eina_content_free(result);
+ result = tmp;
+ }
+
+ eina_promise_resolve(edata->selection_data[selection].delivery, eina_value_content_init(result));
+ eina_content_free(result);
+ _clear_selection_delivery(ee, selection);
+
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ ecore_x_dnd_send_finished();
+ return;
+err:
+ eina_promise_reject(edata->selection_data[selection].delivery, ecore_evas_no_selection);
+
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ ecore_x_dnd_send_finished();
+}
+
+static Eina_Bool
+_ecore_evas_x_selection_notify(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Selection_Notify *ev = event;
+ Ecore_Evas_Selection_Buffer selection;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Ecore_Evas *ee;
+
+ ee = ecore_event_window_match(ev->win);
+ selection = _atom_to_selection(ev->atom);
+ EINA_SAFETY_ON_FALSE_GOTO(!!ee, end);
+ EINA_SAFETY_ON_FALSE_GOTO(selection != ECORE_EVAS_SELECTION_BUFFER_LAST, end);
+ edata = ee->engine.data;
+
+ //if dnd drops above us, and even if we did not request anything, we are getting notified, refuse to do anything
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER &&
+ !edata->selection_data[selection].later_conversion)
+ {
+ ecore_x_dnd_send_finished();
+ }
+ else
+ {
+ if (eina_streq(ev->target, "TARGETS") || eina_streq(ev->target, "ATOMS"))
+ {
+ //This will decide for a type, and will sent that via _ecore_x_selection_request
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(!edata->selection_data[selection].later_conversion, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(!edata->selection_data[selection].requested_type, EINA_FALSE);
+ _search_fitting_type_from_event(ee, edata, selection, ev);
+ }
+ else
+ {
+ //This will read the data, fill it into a Eina_Content apply all conversions required.
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(edata->selection_data[selection].later_conversion, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(edata->selection_data[selection].requested_type, EINA_FALSE);
+ _deliver_content(ee, edata, selection, ev);
+ }
+ }
+end:
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_ecore_evas_x_selection_clear(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Selection_Clear *ev = event;
+ Ecore_Evas_Selection_Callbacks *cbs;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Ecore_Evas_Selection_Buffer selection;
+ Ecore_Evas *ee;
+
+ ee = ecore_event_window_match(ev->win);
+ selection = _atom_to_selection(ev->atom);
+ EINA_SAFETY_ON_FALSE_GOTO(ee, end);
+ EINA_SAFETY_ON_FALSE_GOTO(selection != ECORE_EVAS_SELECTION_BUFFER_LAST, end);
+ edata = ee->engine.data;
+ cbs = &edata->selection_data[selection].callbacks;
+
+ //skip clean event
+ if (edata->skip_clean_event)
+ {
+ edata->skip_clean_event --;
+ goto end;
+ }
+
+ if (cbs->cancel)
+ _clear_selection(ee, selection);
+end:
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static void
+_force_stop_self_dnd(Ecore_Evas *ee)
+{
+ Ecore_Evas_Engine_Data_X11 *edata;
+
+ EINA_SAFETY_ON_NULL_RETURN(ee);
+ edata = ee->engine.data;
+ EINA_SAFETY_ON_NULL_RETURN(edata);
+
+ //Never clear the buffer for selection here.
+ //Selection buffer is freed as a response to the FINISHED event.
+ ecore_x_pointer_ungrab();
+ ecore_x_dnd_self_drop();
+ ecore_x_dnd_aware_set(ee->prop.window, EINA_FALSE);
+ ecore_event_handler_del(edata->mouse_up_handler);
+ edata->mouse_up_handler = NULL;
+
+ if (ee->drag.free)
+ ee->drag.free(ee, 1, ee->drag.data, ee->drag.accepted);
+ ee->drag.free = NULL;
+}
+
+static Eina_Bool
+_ecore_evas_x_selection_fixes_notify(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Fixes_Selection_Notify *ev = event;
+ Ecore_Evas *ee;
+ Ecore_Evas_Selection_Buffer selection;
+
+ ee = ecore_event_window_match(ev->win);
+ selection = _atom_to_selection(ev->atom);
+ EINA_SAFETY_ON_FALSE_GOTO(!!ee, end);
+ EINA_SAFETY_ON_FALSE_GOTO(selection != ECORE_EVAS_SELECTION_BUFFER_LAST, end);
+
+ //notify that the selection has changed on this ecore evas
+ if (ee->func.fn_selection_changed)
+ ee->func.fn_selection_changed(ee, 0, selection);
+end:
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_eina_content_converter(char *target, void *data, int size EINA_UNUSED, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *typesize)
+{
+ Ecore_Evas_X11_Selection_Data *sdata = data;
+ Eina_Bool ret = EINA_FALSE;;
+
+ if (size != sizeof(Ecore_Evas_X11_Selection_Data)) return EINA_FALSE;
+
+ if (!EINA_MAGIC_CHECK(sdata, ECORE_EVAS_X11_SELECTION)) return EINA_FALSE;
+
+ if (eina_streq(target, "TARGETS") || eina_streq(target, "ATOM"))
+ {
+ //list all available types that we have currently
+ Ecore_X_Atom *result = calloc(eina_array_count(sdata->callbacks.available_types), sizeof(Ecore_X_Atom));
+ for (unsigned int i = 0; i < eina_array_count(sdata->callbacks.available_types); ++i)
+ {
+ result[i] = ecore_x_atom_get(eina_array_data_get(sdata->callbacks.available_types, i));
+ }
+ *size_ret = eina_array_count(sdata->callbacks.available_types);
+ *data_ret = result;
+ *ttype = ECORE_X_ATOM_ATOM;
+ *typesize = 32; /* urk */
+ ret = EINA_TRUE;
+ }
+ else
+ {
+ const char *mime_type = _decrypt_type(target);
+ for (unsigned int i = 0; i < eina_array_count(sdata->callbacks.available_types); ++i)
+ {
+ if (mime_type == eina_array_data_get(sdata->callbacks.available_types, i))
+ {
+ Eina_Rw_Slice slice;
+ sdata->callbacks.delivery(sdata->ee, 1, sdata->buffer, mime_type, &slice);
+ *size_ret = slice.len;
+ *data_ret = slice.mem;
+ *ttype = ecore_x_atom_get(target); //use here target in order to get the correct atom
+ //FIXME in selection manager we never set here the typesize, isn't that weird ?
+ ret = EINA_TRUE;
+ // XXX: fixup for strings to not include nul byte if last
+ // byte is nul byte
+ if (((!strncmp(target, "text/", 5)) ||
+ (!strcmp(target, "tex")) ||
+ (!strcmp(target, "TEXT")) ||
+ (!strcmp(target, "COMPOUND_TEXT")) ||
+ (!strcmp(target, "STRING")) ||
+ (!strcmp(target, "UTF8_STRING"))) &&
+ (slice.len > 0) && (slice.bytes[slice.len - 1] == '\0'))
+ {
+ *size_ret = *size_ret - 1;
+ }
+ break;
+ }
+ }
+ eina_stringshare_del(mime_type);
+ }
+
+ return ret;
+}
+
+static Eina_Bool
+_ecore_evas_x_dnd_enter(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Xdnd_Enter *enter = event;
+ Eina_Array *mime_tmp;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Ecore_Evas *ee;
+
+ mime_tmp = eina_array_new(10);
+ ee = ecore_event_window_match(enter->win);
+ EINA_SAFETY_ON_NULL_GOTO(ee, end);
+ edata = ee->engine.data;
+ edata->xserver_atom_name_during_dnd = eina_array_new(10);
+ for (int i = 0; i < enter->num_types; ++i)
+ {
+ const char *mime_type = _decrypt_type(enter->types[i]);
+ eina_array_push(mime_tmp, mime_type);
+ eina_array_push(edata->xserver_atom_name_during_dnd, eina_stringshare_add(enter->types[i]));
+ }
+ ecore_evas_dnd_enter(ee, 1, eina_array_iterator_new(mime_tmp), EINA_POSITION2D(0,0)); //FIXME
+
+end:
+ eina_array_free(mime_tmp);
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_ecore_evas_x_dnd_leave(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Xdnd_Leave *leave = event;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Ecore_Evas *ee;
+
+ ee = ecore_event_window_match(leave->win);
+ EINA_SAFETY_ON_NULL_GOTO(ee, end);
+ edata = ee->engine.data;
+ ecore_evas_dnd_leave(ee, 1, EINA_POSITION2D(0,0));
+ for (unsigned int i = 0; i < eina_array_count(edata->xserver_atom_name_during_dnd); ++i)
+ {
+ eina_stringshare_del(eina_array_data_get(edata->xserver_atom_name_during_dnd, i));
+ }
+ eina_array_free(edata->xserver_atom_name_during_dnd);
+ edata->xserver_atom_name_during_dnd = NULL;
+end:
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Ecore_X_Atom
+_x11_dnd_action_rev_map(const char* action)
+{
+ if (eina_streq(action, "copy")) return ECORE_X_ATOM_XDND_ACTION_COPY;
+ if (eina_streq(action, "move")) return ECORE_X_ATOM_XDND_ACTION_MOVE;
+ else if (eina_streq(action, "privat")) return ECORE_X_ATOM_XDND_ACTION_PRIVATE;
+ else if (eina_streq(action, "ask")) return ECORE_X_ATOM_XDND_ACTION_ASK;
+ else if (eina_streq(action, "list")) return ECORE_X_ATOM_XDND_ACTION_LIST;
+ else if (eina_streq(action, "link")) return ECORE_X_ATOM_XDND_ACTION_LINK;
+ else if (eina_streq(action, "description")) return ECORE_X_ATOM_XDND_ACTION_DESCRIPTION;
+ return 0;
+}
+
+static const char*
+_x11_dnd_action_map(Ecore_X_Atom action)
+{
+ if (action == ECORE_X_DND_ACTION_COPY) return "copy";
+ if (action == ECORE_X_ATOM_XDND_ACTION_MOVE) return "move";
+ if (action == ECORE_X_ATOM_XDND_ACTION_PRIVATE) return "privat";
+ if (action == ECORE_X_ATOM_XDND_ACTION_ASK) return "ask";
+ if (action == ECORE_X_ATOM_XDND_ACTION_LIST) return "list";
+ if (action == ECORE_X_ATOM_XDND_ACTION_LINK) return "link";
+ if (action == ECORE_X_ATOM_XDND_ACTION_DESCRIPTION) return "description";
+
+ return "unknown";
+}
+
+static Eina_Bool
+_ecore_evas_x_dnd_position(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Xdnd_Position *pos = event;
+ int x, y, w, h;
+ Ecore_Evas *ee;
+
+ ee = ecore_event_window_match(pos->win);
+ EINA_SAFETY_ON_NULL_GOTO(ee, end);
+ ecore_evas_geometry_get(ee, &x, &y, &w, &h);
+ Eina_Bool used = ecore_evas_dnd_position_set(ee, 1, EINA_POSITION2D(pos->position.x - x, pos->position.y - y));
+ ecore_x_dnd_send_status(used, EINA_FALSE, (Ecore_X_Rectangle){x,y,w,h}, pos->action);
+end:
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_ecore_evas_x_dnd_drop(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Xdnd_Drop *drop = event;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Ecore_Evas *ee;
+
+ ee = ecore_event_window_match(drop->win);
+ EINA_SAFETY_ON_NULL_GOTO(ee, end);
+ edata = ee->engine.data;
+ if (ee->func.fn_dnd_drop)
+ ee->func.fn_dnd_drop(ee, 1, ecore_evas_dnd_pos_get(ee, 1), _x11_dnd_action_map(drop->action));
+ if (edata->selection_data[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER].delivery &&
+ !edata->selection_data[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER].requested_type)
+ {
+ //only abort dnd if we have something to deliver here, otherwise some other dnd implementation in our own window is handling that
+ ecore_x_dnd_send_finished();
+ }
+ ecore_evas_dnd_leave(ee, 1, EINA_POSITION2D(drop->position.x ,drop->position.y));
+ eina_array_free(edata->xserver_atom_name_during_dnd);
+ edata->xserver_atom_name_during_dnd = NULL;
+end:
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_ecore_evas_x_finished(void *udata EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+ Ecore_X_Event_Xdnd_Finished *finished = event;
+ Ecore_Evas *ee;
+
+ ee = ecore_event_window_match(finished->win);
+ EINA_SAFETY_ON_NULL_GOTO(ee, end);
+
+ _clear_selection(ee, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER);
+end:
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static void
+_ecore_evas_x_selection_init(void)
+{
+ Ecore_X_Atom _ecore_evas_selection_to_atom[] = {ECORE_X_ATOM_SELECTION_PRIMARY, ECORE_X_ATOM_SELECTION_CLIPBOARD, ECORE_X_ATOM_SELECTION_XDND};
+
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ ecore_evas_selection_to_atom[i] = _ecore_evas_selection_to_atom[i];
+ }
+
+ ecore_evas_selection_handlers[0] =
+ ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY,
+ _ecore_evas_x_selection_notify, NULL);
+ ecore_evas_selection_handlers[1] =
+ ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR,
+ _ecore_evas_x_selection_clear, NULL);
+ if (ECORE_X_EVENT_FIXES_SELECTION_NOTIFY)
+ ecore_evas_selection_handlers[2] =
+ ecore_event_handler_add(ECORE_X_EVENT_FIXES_SELECTION_NOTIFY,
+ _ecore_evas_x_selection_fixes_notify, NULL);
+
+ ecore_evas_selection_handlers[3] = ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER,
+ _ecore_evas_x_dnd_enter, NULL);
+ ecore_evas_selection_handlers[4] = ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE,
+ _ecore_evas_x_dnd_leave, NULL);
+ ecore_evas_selection_handlers[5] = ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION,
+ _ecore_evas_x_dnd_position, NULL);
+ ecore_evas_selection_handlers[6] = ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP,
+ _ecore_evas_x_dnd_drop, NULL);
+ ecore_evas_selection_handlers[7] = ecore_event_handler_add(ECORE_X_EVENT_XDND_FINISHED,
+ _ecore_evas_x_finished, NULL);
+ /* for us known type */
+ char *supported_types[] = {
+ "text/plain",
+ "text/plain;charset=utf-8",
+ "image/png",
+ "image/jpeg",
+ "image/x-ms-bmp",
+ "image/gif",
+ "image/tiff",
+ "image/svg+xml",
+ "image/x-xpixmap",
+ "image/x-tga",
+ "image/x-portable-pixmap",
+ "TEXT",
+ "COMPOUND_TEXT",
+ "STRING",
+ "UTF8_STRING",
+ "text/x-vcard",
+ "text/uri-list",
+ "application/x-elementary-markup",
+ "ATOM",
+ "TARGETS",
+ NULL
+ };
+ for (int i = 0; supported_types[i]; ++i)
+ {
+ ecore_x_selection_converter_add(supported_types[i], _eina_content_converter);
+ }
+}
+
+static Eina_Bool
+_ecore_evas_x_selection_has_owner(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection)
+{
+ return !!ecore_x_selection_owner_get(ecore_evas_selection_to_atom[selection]);
+}
+
+static void
+_deliver_selection_changed(void *data)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+
+ if (!ee->func.fn_selection_changed)
+ goto end;
+
+ if (_ecore_evas_x_selection_has_owner(ee, 1, ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER))
+ ee->func.fn_selection_changed(ee, 1, ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER);
+ if (_ecore_evas_x_selection_has_owner(ee, 1, ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER))
+ ee->func.fn_selection_changed(ee, 1, ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER);
+ if (_ecore_evas_x_selection_has_owner(ee, 1, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER))
+ ee->func.fn_selection_changed(ee, 1, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER);
+end:
+ edata->init_job = NULL;
+}
+
+static void
+_ecore_evas_x_selection_window_init(Ecore_Evas *ee)
+{
+ Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ ecore_x_fixes_window_selection_notification_request(ee->prop.window, ecore_evas_selection_to_atom[i]);
+ edata->selection_data[i].ee = ee;
+ edata->selection_data[i].buffer = i;
+ EINA_MAGIC_SET(&edata->selection_data[i], ECORE_EVAS_X11_SELECTION);
+ }
+ ecore_x_dnd_aware_set(ee->prop.window, EINA_TRUE);
+ edata->init_job = ecore_job_add(_deliver_selection_changed, ee);
+}
+
+static void
+_store_selection_cbs(Ecore_Evas *ee, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Eina_Bool (*delivery)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, const char *type, Eina_Rw_Slice *slice), void (*cancel)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer))
+{
+ Ecore_Evas_X11_Selection_Data *sdata;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Ecore_Evas_Selection_Callbacks *cbs;
+
+ edata = ee->engine.data;
+ sdata = &edata->selection_data[selection];
+ cbs = &sdata->callbacks;
+
+ if (cbs->cancel)
+ {
+ _clear_selection(ee, selection);
+ edata->skip_clean_event ++; //we are going to overwrite our own selection, this will emit a clean event, but we already freed it.
+ }
+
+ cbs->delivery = delivery;
+ cbs->cancel = cancel;
+ cbs->available_types = available_types;
+}
+
+static Eina_Bool
+_ecore_evas_x_selection_claim(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection, Eina_Array *available_types, Ecore_Evas_Selection_Internal_Delivery delivery, Ecore_Evas_Selection_Internal_Cancel cancel)
+{
+ Ecore_Evas_X11_Selection_Data *sdata;
+ Ecore_Evas_Engine_Data_X11 *edata;
+
+ edata = ee->engine.data;
+ sdata = &edata->selection_data[selection];
+
+ _store_selection_cbs(ee, selection, available_types, delivery, cancel);
+
+ if (eina_array_count(available_types) > 0)
+ {
+ //the commands below will *copy* the content of sdata, this you have to ensure that clear is called when sdata is changed.
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER)
+ ecore_x_selection_primary_set(ee->prop.window, sdata, sizeof(Ecore_Evas_X11_Selection_Data));
+ else if (selection == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ ecore_x_selection_clipboard_set(ee->prop.window, sdata, sizeof(Ecore_Evas_X11_Selection_Data));
+ }
+ else
+ {
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER)
+ ecore_x_selection_primary_clear();
+ else if (selection == ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER)
+ ecore_x_selection_clipboard_clear();
+ }
+
+ //for drag and drop, we are not calling anything in here
+
+ return EINA_TRUE;
+}
+
+Eina_Future*
+_ecore_evas_x_selection_request(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection, Eina_Array *acceptable_type)
+{
+ Ecore_Evas_X11_Selection_Data *sdata;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Eina_Future *future;
+
+ edata = ee->engine.data;
+ sdata = &edata->selection_data[selection];
+
+ if (sdata->delivery)
+ {
+ eina_promise_reject(sdata->delivery, ecore_evas_request_replaced);
+ _clear_selection_delivery(ee, selection);
+ }
+ sdata->delivery = efl_loop_promise_new(efl_main_loop_get());
+ sdata->acceptable_type = acceptable_type;
+ future = eina_future_new(sdata->delivery);
+
+ if (selection == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER)
+ {
+ //when in dnd - we are requesting out of the set that we know from the enter event
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(!edata->selection_data[selection].later_conversion, NULL);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(!edata->selection_data[selection].requested_type, NULL);
+ _search_fitting_type(ee, edata, selection, edata->xserver_atom_name_during_dnd);
+ }
+ else
+ {
+ //when not dnd - we are first wanting to know what is available
+ _ecore_x_selection_request(ee->prop.window, selection, ECORE_X_SELECTION_TARGET_TARGETS);
+ }
+
+ return future;
+}
+
+static void
+_x11_drag_move(void *data, Ecore_X_Xdnd_Position *pos)
+{
+ Ecore_Evas *ee = data;
+ Eina_Rect rect;
+
+ ecore_evas_geometry_get(ee->drag.rep, &rect.x, &rect.y, &rect.w, &rect.h);
+
+ ecore_evas_move(ee->drag.rep, pos->position.x - rect.w / 2, pos->position.y - rect.h/2);
+}
+
+static Eina_Bool
+_x11_drag_mouse_up(void *data, int etype EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Ecore_Evas *ee = data;
+
+ _force_stop_self_dnd(ee);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_ecore_evas_x_dnd_start(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Array *available_types, Ecore_Evas *drag_rep, Eina_Bool (*delivery)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer, const char *type, Eina_Rw_Slice *slice), void (*cancel)(Ecore_Evas *ee, unsigned int seat, Ecore_Evas_Selection_Buffer buffer), const char* action)
+{
+ Ecore_Evas_X11_Selection_Data *sdata;
+ Ecore_Evas_Engine_Data_X11 *edata;
+ Ecore_X_Atom actx;
+
+ edata = ee->engine.data;
+ sdata = &edata->selection_data[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER];
+ _store_selection_cbs(ee, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER, available_types, delivery, cancel);
+
+ //first set all types we have
+ ecore_x_dnd_types_set(ee->prop.window, NULL, 0);
+ for (unsigned int i = 0; i < eina_array_count(available_types); ++i)
+ {
+ const char *xserver_mime_type = _mime_to_xserver_type(eina_array_data_get(available_types, i));
+ ecore_x_dnd_type_set(ee->prop.window, xserver_mime_type, EINA_TRUE);
+ eina_stringshare_del(xserver_mime_type);
+ }
+ ecore_x_dnd_aware_set(ee->prop.window, EINA_TRUE);
+ ecore_x_dnd_callback_pos_update_set(_x11_drag_move, ee);
+ ecore_x_dnd_self_begin(ee->prop.window, (unsigned char*)sdata, sizeof(Ecore_Evas_X11_Selection_Data));
+ actx = _x11_dnd_action_rev_map(action);
+ ecore_x_dnd_source_action_set(actx);
+ ecore_x_pointer_grab(ee->prop.window);
+
+ ecore_x_window_ignore_set(drag_rep->prop.window, EINA_TRUE);
+
+ if (edata->mouse_up_handler)
+ ecore_event_handler_del(edata->mouse_up_handler);
+ edata->mouse_up_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
+ _x11_drag_mouse_up, ee);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_ecore_evas_x_dnd_stop(Ecore_Evas *ee, unsigned int seat EINA_UNUSED)
+{
+ _force_stop_self_dnd(ee);
+ _clear_selection(ee, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER);
+ ecore_x_selection_xdnd_clear(); //This is needed otherwise a outdated sdata struct will be accessed
+ return EINA_TRUE;
+}
+
static Ecore_Evas_Engine_Func _ecore_x_engine_func =
{
_ecore_evas_x_free,
@@ -3746,6 +4583,11 @@ static Ecore_Evas_Engine_Func _ecore_x_engine_func =
NULL, //fn_pointer_device_xy_get
NULL, //fn_prepare
NULL, //fn_last_tick_get
+ _ecore_evas_x_selection_claim, //fn_selection_claim
+ _ecore_evas_x_selection_has_owner, //fn_selection_has_owner
+ _ecore_evas_x_selection_request, //fn_selection_request
+ _ecore_evas_x_dnd_start, //fn_dnd_start
+ _ecore_evas_x_dnd_stop, //fn_dnd_stop
};
/*
@@ -3764,19 +4606,19 @@ _ecore_evas_x_render_pre(void *data, Evas *e EINA_UNUSED, void *event_info EINA_
/* printf("\tPixman Size: %d %d\n", edata->pixmap.w, edata->pixmap.h); */
/* printf("\tEE Size: %d %d\n", ee->w, ee->h); */
- /* before rendering to the back buffer pixmap, we should check the
- * size. If the back buffer is not the proper size, destroy it and
+ /* before rendering to the back buffer pixmap, we should check the
+ * size. If the back buffer is not the proper size, destroy it and
* create a new one at the proper size */
if ((edata->pixmap.w != ee->w) || (edata->pixmap.h != ee->h))
{
int fw = 0, fh = 0;
/* free the backing pixmap */
- if (edata->pixmap.back)
+ if (edata->pixmap.back)
ecore_x_pixmap_free(edata->pixmap.back);
- edata->pixmap.back =
- ecore_x_pixmap_new(edata->win_root, ee->w, ee->h,
+ edata->pixmap.back =
+ ecore_x_pixmap_new(edata->win_root, ee->w, ee->h,
edata->pixmap.depth);
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
@@ -3795,7 +4637,7 @@ _ecore_evas_x_render_pre(void *data, Evas *e EINA_UNUSED, void *event_info EINA_
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
{
- ERR("evas_engine_info_set() init engine '%s' failed.",
+ ERR("evas_engine_info_set() init engine '%s' failed.",
ee->driver);
}
}
@@ -3813,7 +4655,7 @@ _ecore_evas_x_render_pre(void *data, Evas *e EINA_UNUSED, void *event_info EINA_
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
{
- ERR("evas_engine_info_set() init engine '%s' failed.",
+ ERR("evas_engine_info_set() init engine '%s' failed.",
ee->driver);
}
}
@@ -3836,8 +4678,8 @@ _ecore_evas_x_flush_post(void *data, Evas *e EINA_UNUSED, void *event_info EINA_
/* printf("\tBack Pixmap: %d\n", edata->pixmap.back); */
/* printf("\tFront Pixmap: %d\n", edata->pixmap.front); */
- /* done drawing to the back buffer. flip it to the front so that
- * any calls to "fetch pixmap" will return the front buffer already
+ /* done drawing to the back buffer. flip it to the front so that
+ * any calls to "fetch pixmap" will return the front buffer already
* pre-rendered */
/* record the current front buffer */
@@ -3862,7 +4704,7 @@ _ecore_evas_x_flush_post(void *data, Evas *e EINA_UNUSED, void *event_info EINA_
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
{
- ERR("evas_engine_info_set() init engine '%s' failed.",
+ ERR("evas_engine_info_set() init engine '%s' failed.",
ee->driver);
}
}
@@ -3880,7 +4722,7 @@ _ecore_evas_x_flush_post(void *data, Evas *e EINA_UNUSED, void *event_info EINA_
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
{
- ERR("evas_engine_info_set() init engine '%s' failed.",
+ ERR("evas_engine_info_set() init engine '%s' failed.",
ee->driver);
}
}
@@ -4109,6 +4951,7 @@ ecore_evas_software_x11_new_internal(const char *disp_name, Ecore_X_Window paren
_ecore_evas_x_wm_rotation_protocol_set(ee);
_ecore_evas_x_aux_hints_supported_update(ee);
_ecore_evas_x_aux_hints_update(ee);
+ _ecore_evas_x_selection_window_init(ee);
ee->engine.func->fn_render = _ecore_evas_x_render;
ee->draw_block = EINA_TRUE;
@@ -4299,9 +5142,9 @@ ecore_evas_software_x11_pixmap_new_internal(const char *disp_name, Ecore_X_Windo
edata->pixmap.colormap = einfo->info.colormap;
/* create front and back pixmaps for double-buffer rendering */
- edata->pixmap.front =
+ edata->pixmap.front =
ecore_x_pixmap_new(parent, w, h, edata->pixmap.depth);
- edata->pixmap.back =
+ edata->pixmap.back =
ecore_x_pixmap_new(parent, w, h, edata->pixmap.depth);
einfo->info.drawable = edata->pixmap.back;
@@ -4314,7 +5157,7 @@ ecore_evas_software_x11_pixmap_new_internal(const char *disp_name, Ecore_X_Windo
}
}
- /* FIXME: Allow of these set properties or do something with the
+ /* FIXME: Allow of these set properties or do something with the
* ee->prop.window (x window), which we do not have in pixmap case */
/* _ecore_evas_x_hints_update(ee); */
@@ -4362,7 +5205,7 @@ _ecore_evas_software_x11_pixmap_visual_get(const Ecore_Evas *ee)
return edata->pixmap.visual;
}
-static unsigned long
+static unsigned long
_ecore_evas_software_x11_pixmap_colormap_get(const Ecore_Evas *ee)
{
if (!(!strcmp(ee->driver, "software_x11"))) return 0;
@@ -4370,7 +5213,7 @@ _ecore_evas_software_x11_pixmap_colormap_get(const Ecore_Evas *ee)
return edata->pixmap.colormap;
}
-static int
+static int
_ecore_evas_software_x11_pixmap_depth_get(const Ecore_Evas *ee)
{
if (!(!strcmp(ee->driver, "software_x11"))) return 0;
@@ -4545,6 +5388,7 @@ ecore_evas_gl_x11_options_new_internal(const char *disp_name, Ecore_X_Window par
_ecore_evas_x_wm_rotation_protocol_set(ee);
_ecore_evas_x_aux_hints_supported_update(ee);
_ecore_evas_x_aux_hints_update(ee);
+ _ecore_evas_x_selection_window_init(ee);
ee->draw_block = 1;
if (!wm_exists) edata->configured = 1;
@@ -4711,9 +5555,9 @@ ecore_evas_gl_x11_pixmap_new_internal(const char *disp_name, Ecore_X_Window pare
edata->pixmap.colormap = einfo->info.colormap;
/* create front and back pixmaps for double-buffer rendering */
- edata->pixmap.front =
+ edata->pixmap.front =
ecore_x_pixmap_new(parent, w, h, edata->pixmap.depth);
- edata->pixmap.back =
+ edata->pixmap.back =
ecore_x_pixmap_new(parent, w, h, edata->pixmap.depth);
einfo->info.drawable = edata->pixmap.back;
@@ -4771,7 +5615,7 @@ _ecore_evas_gl_x11_pixmap_visual_get(const Ecore_Evas *ee)
return edata->pixmap.visual;
}
-static unsigned long
+static unsigned long
_ecore_evas_gl_x11_pixmap_colormap_get(const Ecore_Evas *ee)
{
if (!(!strcmp(ee->driver, "opengl_x11"))) return 0;
@@ -4779,7 +5623,7 @@ _ecore_evas_gl_x11_pixmap_colormap_get(const Ecore_Evas *ee)
return edata->pixmap.colormap;
}
-static int
+static int
_ecore_evas_gl_x11_pixmap_depth_get(const Ecore_Evas *ee)
{
if (!(!strcmp(ee->driver, "opengl_x11"))) return 0;
diff --git a/src/modules/ecore_evas/engines/x/meson.build b/src/modules/ecore_evas/engines/x/meson.build
index 582a782115..1108f9c755 100644
--- a/src/modules/ecore_evas/engines/x/meson.build
+++ b/src/modules/ecore_evas/engines/x/meson.build
@@ -14,7 +14,7 @@ endif
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, ecore_evas, ecore_input_evas] + engine_deps,
+ dependencies : [eina, ecore_evas, ecore_input_evas, efreet] + engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server_fb_keymap.c b/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server_fb_keymap.c
index 636026f4b1..85110d4d7f 100644
--- a/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server_fb_keymap.c
+++ b/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server_fb_keymap.c
@@ -1,4 +1,8 @@
-#include <linux/input-event-codes.h>
+#if defined(__linux__)
+ #include <linux/input-event-codes.h>
+#elif defined(__FreeBSD__)
+ #include <dev/evdev/input-event-codes.h>
+#endif
#include <rfb/keysym.h>
#include <stdlib.h>
#include <limits.h>
diff --git a/src/modules/ecore_imf/ibus/ibus_imcontext.c b/src/modules/ecore_imf/ibus/ibus_imcontext.c
index 56815a86c4..a859f9ee36 100644
--- a/src/modules/ecore_imf/ibus/ibus_imcontext.c
+++ b/src/modules/ecore_imf/ibus/ibus_imcontext.c
@@ -287,7 +287,7 @@ _request_surrounding_text(IBusIMContext *ibusimcontext)
IBusIMContext *
ecore_imf_context_ibus_new(void)
{
- EINA_LOG_DBG("%s", __FUNCTION__);
+ EINA_LOG_DBG("%s", __func__);
IBusIMContext *context = calloc(1, sizeof(IBusIMContext));
@@ -320,7 +320,7 @@ ecore_imf_context_ibus_shutdown(void)
void
ecore_imf_context_ibus_add(Ecore_IMF_Context *ctx)
{
- EINA_LOG_DBG("%s", __FUNCTION__);
+ EINA_LOG_DBG("%s", __func__);
char *s = NULL;
IBusIMContext *ibusimcontext = (IBusIMContext *)ecore_imf_context_data_get(ctx);
@@ -358,7 +358,7 @@ ecore_imf_context_ibus_add(Ecore_IMF_Context *ctx)
void
ecore_imf_context_ibus_del(Ecore_IMF_Context *ctx)
{
- EINA_LOG_DBG("%s", __FUNCTION__);
+ EINA_LOG_DBG("%s", __func__);
IBusIMContext *ibusimcontext = (IBusIMContext*)ecore_imf_context_data_get(ctx);
Ecore_IMF_Preedit_Attr *attr = NULL;
@@ -401,7 +401,7 @@ ecore_imf_context_ibus_filter_event(Ecore_IMF_Context *ctx,
if (type != ECORE_IMF_EVENT_KEY_UP && type != ECORE_IMF_EVENT_KEY_DOWN)
return EINA_FALSE;
- EINA_LOG_DBG("%s", __FUNCTION__);
+ EINA_LOG_DBG("%s", __func__);
if (G_LIKELY(ibusimcontext->ibuscontext && ibusimcontext->has_focus))
{
@@ -979,7 +979,7 @@ static void
_ecore_imf_context_ibus_hide_preedit_text_cb(IBusInputContext *ibuscontext EINA_UNUSED,
IBusIMContext *ibusimcontext)
{
- EINA_LOG_DBG("%s", __FUNCTION__);
+ EINA_LOG_DBG("%s", __func__);
EINA_SAFETY_ON_NULL_RETURN(ibusimcontext);
if (ibusimcontext->preedit_visible == EINA_FALSE)
@@ -1002,7 +1002,7 @@ static void
_ecore_imf_context_ibus_destroy_cb(IBusInputContext *ibuscontext EINA_UNUSED,
IBusIMContext *ibusimcontext)
{
- EINA_LOG_DBG("%s", __FUNCTION__);
+ EINA_LOG_DBG("%s", __func__);
EINA_SAFETY_ON_NULL_RETURN(ibusimcontext);
g_object_unref(ibusimcontext->ibuscontext);
@@ -1028,7 +1028,7 @@ _ecore_imf_context_ibus_destroy_cb(IBusInputContext *ibuscontext EINA_UNUSED,
static void
_ecore_imf_context_ibus_create(IBusIMContext *ibusimcontext)
{
- EINA_LOG_DBG("%s", __FUNCTION__);
+ EINA_LOG_DBG("%s", __func__);
EINA_SAFETY_ON_NULL_RETURN(ibusimcontext);
ibusimcontext->ibuscontext = ibus_bus_create_input_context(_bus, "ecore");
diff --git a/src/modules/ecore_imf/ibus/meson.build b/src/modules/ecore_imf/ibus/meson.build
index f81543974b..57bc90f528 100644
--- a/src/modules/ecore_imf/ibus/meson.build
+++ b/src/modules/ecore_imf/ibus/meson.build
@@ -10,5 +10,6 @@ shared_module(mod_name,
mod_src,
dependencies: mod_deps,
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/ecore_imf/meson.build b/src/modules/ecore_imf/meson.build
index 72154d521d..72ab44ff51 100644
--- a/src/modules/ecore_imf/meson.build
+++ b/src/modules/ecore_imf/meson.build
@@ -8,7 +8,6 @@ if get_option('wl')
mods += ['wayland']
endif
-
loader_disabler = get_option('ecore-imf-loaders-disabler')
foreach mod_name : mods
diff --git a/src/modules/ecore_imf/scim/meson.build b/src/modules/ecore_imf/scim/meson.build
index 9356a00526..68d94793e5 100644
--- a/src/modules/ecore_imf/scim/meson.build
+++ b/src/modules/ecore_imf/scim/meson.build
@@ -9,11 +9,12 @@ if not scim_dep.found()
scim_dep = dependency('scim-1.0')
endif
-mod_deps = [ecore, ecore_imf, ecore_x, ecore_x_deps, ecore_evas, scim_dep, dependency('glib-2.0')]
+mod_deps = [ecore, ecore_imf, ecore_x, ecore_x_ext_deps, ecore_evas, scim_dep, dependency('glib-2.0')]
shared_module(mod_name,
mod_src,
dependencies: mod_deps,
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/ecore_imf/scim/scim_imcontext.cpp b/src/modules/ecore_imf/scim/scim_imcontext.cpp
index 54249dc260..b07c4f0c72 100644
--- a/src/modules/ecore_imf/scim/scim_imcontext.cpp
+++ b/src/modules/ecore_imf/scim/scim_imcontext.cpp
@@ -471,12 +471,12 @@ _ecore_imf_lock_to_scim_mask(unsigned int locks)
EcoreIMFContextISF *
isf_imf_context_new(void)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = new EcoreIMFContextISF;
if (context_scim == NULL)
{
- std::cerr << "memory allocation failed in " << __FUNCTION__ << "\n";
+ std::cerr << "memory allocation failed in " << __func__ << "\n";
return NULL;
}
@@ -500,7 +500,7 @@ isf_imf_context_new(void)
void
isf_imf_context_shutdown(void)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
if (_scim_initialized)
{
@@ -512,7 +512,7 @@ isf_imf_context_shutdown(void)
void
isf_imf_context_add(Ecore_IMF_Context *ctx)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -554,7 +554,7 @@ isf_imf_context_add(Ecore_IMF_Context *ctx)
context_scim->impl = new_ic_impl(context_scim);
if (context_scim->impl == NULL)
{
- std::cerr << "memory allocation failed in " << __FUNCTION__ << "\n";
+ std::cerr << "memory allocation failed in " << __func__ << "\n";
return;
}
@@ -592,7 +592,7 @@ isf_imf_context_add(Ecore_IMF_Context *ctx)
void
isf_imf_context_del(Ecore_IMF_Context *ctx)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
if (!_ic_list) return;
@@ -669,7 +669,7 @@ isf_imf_context_del(Ecore_IMF_Context *ctx)
void
isf_imf_context_client_canvas_set(Ecore_IMF_Context *ctx, void *canvas)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -695,7 +695,7 @@ isf_imf_context_client_canvas_set(Ecore_IMF_Context *ctx, void *canvas)
void
isf_imf_context_client_window_set(Ecore_IMF_Context *ctx, void *window)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -724,7 +724,7 @@ isf_imf_context_client_window_set(Ecore_IMF_Context *ctx, void *window)
void
isf_imf_context_reset(Ecore_IMF_Context *ctx)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -755,7 +755,7 @@ isf_imf_context_focus_in(Ecore_IMF_Context *ctx)
EINA_SAFETY_ON_NULL_RETURN(context_scim);
EINA_SAFETY_ON_NULL_RETURN(context_scim->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__<< "(" << context_scim->id << ")...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__<< "(" << context_scim->id << ")...\n";
if (_focused_ic)
{
@@ -866,7 +866,7 @@ isf_imf_context_focus_out(Ecore_IMF_Context *ctx)
EINA_SAFETY_ON_NULL_RETURN(context_scim);
EINA_SAFETY_ON_NULL_RETURN(context_scim->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "(" << context_scim->id << ")...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "(" << context_scim->id << ")...\n";
if (context_scim == _focused_ic)
{
@@ -900,7 +900,7 @@ isf_imf_context_focus_out(Ecore_IMF_Context *ctx)
void
isf_imf_context_cursor_location_set(Ecore_IMF_Context *ctx, int cx, int cy, int cw, int ch)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -964,7 +964,7 @@ isf_imf_context_cursor_location_set(Ecore_IMF_Context *ctx, int cx, int cy, int
void
isf_imf_context_use_preedit_set(Ecore_IMF_Context* ctx, Eina_Bool use_preedit)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " = " << (use_preedit ? "true" : "false") << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " = " << (use_preedit ? "true" : "false") << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -991,7 +991,7 @@ isf_imf_context_use_preedit_set(Ecore_IMF_Context* ctx, Eina_Bool use_preedit)
void
isf_imf_context_preedit_string_with_attributes_get(Ecore_IMF_Context *ctx, char** str, Eina_List **attrs, int *cursor_pos)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1140,7 +1140,7 @@ isf_imf_context_preedit_string_with_attributes_get(Ecore_IMF_Context *ctx, char*
void
isf_imf_context_preedit_string_get(Ecore_IMF_Context *ctx, char** str, int *cursor_pos)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1183,7 +1183,7 @@ isf_imf_context_preedit_string_get(Ecore_IMF_Context *ctx, char** str, int *curs
void
isf_imf_context_cursor_position_set(Ecore_IMF_Context *ctx, int cursor_pos)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1213,7 +1213,7 @@ isf_imf_context_cursor_position_set(Ecore_IMF_Context *ctx, int cursor_pos)
void
isf_imf_context_input_mode_set(Ecore_IMF_Context *ctx, Ecore_IMF_Input_Mode input_mode)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1234,7 +1234,7 @@ isf_imf_context_input_mode_set(Ecore_IMF_Context *ctx, Ecore_IMF_Input_Mode inpu
void
isf_imf_context_prediction_allow_set(Ecore_IMF_Context* ctx, Eina_Bool prediction)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " = " << (prediction ? "true" : "false") << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " = " << (prediction ? "true" : "false") << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1247,7 +1247,7 @@ isf_imf_context_prediction_allow_set(Ecore_IMF_Context* ctx, Eina_Bool predictio
void
isf_imf_context_autocapital_type_set(Ecore_IMF_Context* ctx, Ecore_IMF_Autocapital_Type autocapital_type)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " = " << autocapital_type << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " = " << autocapital_type << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1275,7 +1275,7 @@ isf_imf_context_autocapital_type_set(Ecore_IMF_Context* ctx, Ecore_IMF_Autocapit
Eina_Bool
isf_imf_context_filter_event(Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type, Ecore_IMF_Event *event)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN_VAL(ic, EINA_FALSE);
@@ -1324,7 +1324,7 @@ isf_imf_context_filter_event(Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type,
void
isf_imf_context_input_panel_show(Ecore_IMF_Context *ctx)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1338,7 +1338,7 @@ isf_imf_context_input_panel_show(Ecore_IMF_Context *ctx)
void
isf_imf_context_input_panel_hide(Ecore_IMF_Context *ctx)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF*)ecore_imf_context_data_get(ctx);
EINA_SAFETY_ON_NULL_RETURN(context_scim);
@@ -1353,14 +1353,14 @@ isf_imf_context_input_panel_hide(Ecore_IMF_Context *ctx)
static void
panel_slot_reload_config(int context EINA_UNUSED)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
_config->reload();
}
static void
panel_slot_exit(int /* context */)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
finalize();
}
@@ -1372,7 +1372,7 @@ panel_slot_update_lookup_table_page_size(int context, int page_size)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " page_size=" << page_size << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " page_size=" << page_size << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
ic->impl->si->update_lookup_table_page_size(page_size);
@@ -1386,7 +1386,7 @@ panel_slot_lookup_table_page_up(int context)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
ic->impl->si->lookup_table_page_up();
@@ -1400,7 +1400,7 @@ panel_slot_lookup_table_page_down(int context)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
ic->impl->si->lookup_table_page_down();
@@ -1414,7 +1414,7 @@ panel_slot_trigger_property(int context, const String &property)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " property=" << property << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " property=" << property << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
ic->impl->si->trigger_property(property);
@@ -1428,7 +1428,7 @@ panel_slot_process_helper_event(int context, const String &target_uuid, const St
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " target=" << target_uuid
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " target=" << target_uuid
<< " helper=" << helper_uuid << " ic=" << ic << " ic->impl=" << ic->impl << " ic-uuid="
<< (ic->impl ? ic->impl->si->get_factory_uuid() : "" ) << "\n";
@@ -1448,7 +1448,7 @@ panel_slot_move_preedit_caret(int context, int caret_pos)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " caret=" << caret_pos << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " caret=" << caret_pos << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
ic->impl->si->move_preedit_caret(caret_pos);
@@ -1462,7 +1462,7 @@ panel_slot_select_candidate(int context, int cand_index)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " candidate=" << cand_index << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " candidate=" << cand_index << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
ic->impl->si->select_candidate(cand_index);
@@ -1473,7 +1473,7 @@ static void
panel_slot_process_key_event(int context, const KeyEvent &key)
{
EcoreIMFContextISF *ic = find_ic(context);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " key=" << key.get_key_string() << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " key=" << key.get_key_string() << " ic=" << ic << "\n";
if (!ecore_x_display_get()) return;
if (key.is_key_press())
@@ -1486,7 +1486,7 @@ panel_slot_commit_string(int context, const WideString &wstr)
EcoreIMFContextISF *ic = find_ic(context);
EINA_SAFETY_ON_NULL_RETURN(ic);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " str=" << utf8_wcstombs(wstr) << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " str=" << utf8_wcstombs(wstr) << " ic=" << ic << "\n";
if (_focused_ic != ic)
return;
@@ -1501,7 +1501,7 @@ panel_slot_forward_key_event(int context, const KeyEvent &key)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " key=" << key.get_key_string() << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " key=" << key.get_key_string() << " ic=" << ic << "\n";
if (ic->impl->client_canvas)
feed_key_event(ic->impl->client_canvas, key.get_key_string().c_str(), EINA_TRUE);
@@ -1513,7 +1513,7 @@ panel_slot_request_help(int context)
EcoreIMFContextISF *ic = find_ic(context);
EINA_SAFETY_ON_NULL_RETURN(ic);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
panel_req_show_help(ic);
@@ -1526,7 +1526,7 @@ panel_slot_request_factory_menu(int context)
EcoreIMFContextISF *ic = find_ic(context);
EINA_SAFETY_ON_NULL_RETURN(ic);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " ic=" << ic << "\n";
_panel_client.prepare(ic->id);
panel_req_show_factory_menu(ic);
@@ -1540,7 +1540,7 @@ panel_slot_change_factory(int context, const String &uuid)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " factory=" << uuid << " ic=" << ic << "\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " context=" << context << " factory=" << uuid << " ic=" << ic << "\n";
ic->impl->si->reset();
_panel_client.prepare(ic->id);
@@ -1552,7 +1552,7 @@ panel_slot_change_factory(int context, const String &uuid)
static void
panel_req_show_help(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
@@ -1580,7 +1580,7 @@ panel_req_show_help(EcoreIMFContextISF *ic)
static void
panel_req_show_factory_menu(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
std::vector<IMEngineFactoryPointer> factories;
std::vector <PanelFactoryInfo> menu;
@@ -1603,7 +1603,7 @@ panel_req_show_factory_menu(EcoreIMFContextISF *ic)
static void
panel_req_update_factory_info(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
@@ -1628,7 +1628,7 @@ panel_req_update_factory_info(EcoreIMFContextISF *ic)
static void
panel_req_focus_in(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
_panel_client.focus_in(ic->id, ic->impl->si->get_factory_uuid());
}
@@ -1636,7 +1636,7 @@ panel_req_focus_in(EcoreIMFContextISF *ic)
static void
panel_req_update_spot_location(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
_panel_client.update_spot_location(ic->id, ic->impl->cursor_x, ic->impl->cursor_y);
}
@@ -1644,7 +1644,7 @@ panel_req_update_spot_location(EcoreIMFContextISF *ic)
static bool
filter_hotkeys(EcoreIMFContextISF *ic, const KeyEvent &key)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
bool ret = false;
@@ -1700,7 +1700,7 @@ filter_hotkeys(EcoreIMFContextISF *ic, const KeyEvent &key)
static bool
panel_initialize(void)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
String display_name;
{
@@ -1725,7 +1725,7 @@ panel_initialize(void)
static void
panel_finalize(void)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
_panel_client.close_connection();
@@ -1745,7 +1745,7 @@ panel_finalize(void)
static Eina_Bool
panel_iochannel_handler(void *data EINA_UNUSED, Ecore_Fd_Handler *fd_handler)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
if (fd_handler == _panel_iochannel_read_handler)
{
@@ -1768,7 +1768,7 @@ panel_iochannel_handler(void *data EINA_UNUSED, Ecore_Fd_Handler *fd_handler)
static void
turn_on_ic(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
@@ -1805,7 +1805,7 @@ turn_on_ic(EcoreIMFContextISF *ic)
static void
turn_off_ic(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
@@ -1838,7 +1838,7 @@ turn_off_ic(EcoreIMFContextISF *ic)
static void
set_ic_capabilities(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
@@ -1854,7 +1854,7 @@ set_ic_capabilities(EcoreIMFContextISF *ic)
static bool
check_socket_frontend(void)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
SocketAddress address;
SocketClient client;
@@ -2048,7 +2048,7 @@ finalize(void)
static void
open_next_factory(EcoreIMFContextISF *ic)
{
- SCIM_DEBUG_FRONTEND(2) << __FUNCTION__ << " context=" << ic->id << "\n";
+ SCIM_DEBUG_FRONTEND(2) << __func__ << " context=" << ic->id << "\n";
IMEngineFactoryPointer sf = _backend->get_next_factory("", "UTF-8", ic->impl->si->get_factory_uuid());
if (!sf.null())
@@ -2078,7 +2078,7 @@ open_previous_factory(EcoreIMFContextISF *ic)
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(2) << __FUNCTION__ << " context=" << ic->id << "\n";
+ SCIM_DEBUG_FRONTEND(2) << __func__ << " context=" << ic->id << "\n";
IMEngineFactoryPointer sf = _backend->get_previous_factory("", "UTF-8", ic->impl->si->get_factory_uuid());
if (!sf.null())
@@ -2109,7 +2109,7 @@ open_specific_factory(EcoreIMFContextISF *ic,
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(2) << __FUNCTION__ << " context=" << ic->id << "\n";
+ SCIM_DEBUG_FRONTEND(2) << __func__ << " context=" << ic->id << "\n";
// The same input method is selected, just turn on the IC.
if (ic->impl->si->get_factory_uuid() == uuid)
@@ -2171,7 +2171,7 @@ open_specific_factory(EcoreIMFContextISF *ic,
static void initialize_modifier_bits(Display *display)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
if (__current_display == display)
return;
@@ -2270,7 +2270,7 @@ static void initialize_modifier_bits(Display *display)
static unsigned int scim_x11_keymask_scim_to_x11(Display *display, uint16 scimkeymask)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
unsigned int state = 0;
@@ -2292,7 +2292,7 @@ static XKeyEvent createKeyEvent(Display *display, Window &win,
Window &winRoot, bool press,
int keysym, int modifiers)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
XKeyEvent event;
@@ -2320,7 +2320,7 @@ static XKeyEvent createKeyEvent(Display *display, Window &win,
static void _x_send_key_event(const KeyEvent &key)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
// Obtain the X11 display.
Display *display = (Display *)ecore_x_display_get();
@@ -2410,7 +2410,7 @@ attach_instance(const IMEngineInstancePointer &si)
static void
slot_show_preedit_string(IMEngineInstanceBase *si)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2434,7 +2434,7 @@ slot_show_preedit_string(IMEngineInstanceBase *si)
static void
slot_show_aux_string(IMEngineInstanceBase *si)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2446,7 +2446,7 @@ slot_show_aux_string(IMEngineInstanceBase *si)
static void
slot_show_lookup_table(IMEngineInstanceBase *si)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2458,7 +2458,7 @@ slot_show_lookup_table(IMEngineInstanceBase *si)
static void
slot_hide_preedit_string(IMEngineInstanceBase *si)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2494,7 +2494,7 @@ slot_hide_preedit_string(IMEngineInstanceBase *si)
static void
slot_hide_aux_string(IMEngineInstanceBase *si)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2506,7 +2506,7 @@ slot_hide_aux_string(IMEngineInstanceBase *si)
static void
slot_hide_lookup_table(IMEngineInstanceBase *si)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2518,7 +2518,7 @@ slot_hide_lookup_table(IMEngineInstanceBase *si)
static void
slot_update_preedit_caret(IMEngineInstanceBase *si, int caret)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2546,7 +2546,7 @@ slot_update_preedit_string(IMEngineInstanceBase *si,
const WideString & str,
const AttributeList & attrs)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2580,7 +2580,7 @@ slot_update_aux_string(IMEngineInstanceBase *si,
const WideString & str,
const AttributeList & attrs)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2593,7 +2593,7 @@ static void
slot_commit_string(IMEngineInstanceBase *si,
const WideString & str)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2606,7 +2606,7 @@ static void
slot_forward_key_event(IMEngineInstanceBase *si,
const KeyEvent & key)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2622,7 +2622,7 @@ static void
slot_update_lookup_table(IMEngineInstanceBase *si,
const LookupTable & table)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2635,7 +2635,7 @@ static void
slot_register_properties(IMEngineInstanceBase *si,
const PropertyList & properties)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2648,7 +2648,7 @@ static void
slot_update_property(IMEngineInstanceBase *si,
const Property & property)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2660,7 +2660,7 @@ slot_update_property(IMEngineInstanceBase *si,
static void
slot_beep(IMEngineInstanceBase *si)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
@@ -2678,7 +2678,7 @@ slot_start_helper(IMEngineInstanceBase *si,
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " helper= " << helper_uuid << " context="
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " helper= " << helper_uuid << " context="
<< ic->id << " ic=" << ic
<< " ic-uuid=" << ic->impl->si->get_factory_uuid() << "...\n";
@@ -2692,7 +2692,7 @@ slot_stop_helper(IMEngineInstanceBase *si,
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN(ic);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " helper= " << helper_uuid << " context=" << ic->id << " ic=" << ic << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " helper= " << helper_uuid << " context=" << ic->id << " ic=" << ic << "...\n";
_panel_client.stop_helper(ic->id, helper_uuid);
}
@@ -2706,7 +2706,7 @@ slot_send_helper_event(IMEngineInstanceBase *si,
EINA_SAFETY_ON_NULL_RETURN(ic);
EINA_SAFETY_ON_NULL_RETURN(ic->impl);
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " helper= " << helper_uuid << " context="
+ SCIM_DEBUG_FRONTEND(1) << __func__ << " helper= " << helper_uuid << " context="
<< ic->id << " ic=" << ic
<< " ic-uuid=" << ic->impl->si->get_factory_uuid() << "...\n";
@@ -2720,7 +2720,7 @@ slot_get_surrounding_text(IMEngineInstanceBase *si,
int maxlen_before,
int maxlen_after)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN_VAL(ic, false);
@@ -2770,7 +2770,7 @@ slot_delete_surrounding_text(IMEngineInstanceBase *si,
int offset,
int len)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
EcoreIMFContextISF *ic = static_cast<EcoreIMFContextISF *>(si->get_frontend_data());
EINA_SAFETY_ON_NULL_RETURN_VAL(ic, false);
@@ -2790,7 +2790,7 @@ slot_delete_surrounding_text(IMEngineInstanceBase *si,
static void
reload_config_callback(const ConfigPointer &config)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
_frontend_hotkey_matcher.load_hotkeys(config);
_imengine_hotkey_matcher.load_hotkeys(config);
@@ -2820,7 +2820,7 @@ static void
fallback_commit_string_cb(IMEngineInstanceBase *si EINA_UNUSED,
const WideString &str)
{
- SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+ SCIM_DEBUG_FRONTEND(1) << __func__ << "...\n";
if (_focused_ic)
{
diff --git a/src/modules/ecore_imf/wayland/meson.build b/src/modules/ecore_imf/wayland/meson.build
index f49cc3f0fb..80832cad37 100644
--- a/src/modules/ecore_imf/wayland/meson.build
+++ b/src/modules/ecore_imf/wayland/meson.build
@@ -12,5 +12,6 @@ shared_module(mod_name,
mod_src,
dependencies: mod_deps,
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/ecore_imf/wayland/wayland_imcontext.c b/src/modules/ecore_imf/wayland/wayland_imcontext.c
index 70781fb93e..404c413fcb 100644
--- a/src/modules/ecore_imf/wayland/wayland_imcontext.c
+++ b/src/modules/ecore_imf/wayland/wayland_imcontext.c
@@ -134,7 +134,7 @@ update_state(WaylandIMContext *imcontext)
ecore_evas_geometry_get(ee, &canvas_x, &canvas_y, NULL, NULL);
}
- EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "canvas (x: %d, y: %d)",
+ EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "canvas (x: %d, y: %d)",
canvas_x, canvas_y);
if (imcontext->text_input)
@@ -217,7 +217,7 @@ check_serial(WaylandIMContext *imcontext, uint32_t serial)
{
Ecore_IMF_Preedit_Attr *attr;
- if ((imcontext->serial - serial) >
+ if ((imcontext->serial - serial) >
(imcontext->serial - imcontext->reset_serial))
{
EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom,
@@ -288,7 +288,7 @@ text_input_commit_string(void *data,
text,
imcontext->preedit_text ? imcontext->preedit_text : "");
- old_preedit =
+ old_preedit =
imcontext->preedit_text && strlen(imcontext->preedit_text) > 0;
if (!imcontext->ctx)
@@ -299,7 +299,7 @@ text_input_commit_string(void *data,
if (old_preedit)
{
- ecore_imf_context_event_callback_call(imcontext->ctx,
+ ecore_imf_context_event_callback_call(imcontext->ctx,
ECORE_IMF_CALLBACK_PREEDIT_END,
NULL);
}
@@ -309,7 +309,7 @@ text_input_commit_string(void *data,
if (imcontext->pending_commit.delete_length > 0)
{
/* cursor_pos is a byte index */
- if (ecore_imf_context_surrounding_get(imcontext->ctx, &surrounding,
+ if (ecore_imf_context_surrounding_get(imcontext->ctx, &surrounding,
&cursor_pos))
{
ev.ctx = imcontext->ctx;
@@ -358,8 +358,8 @@ commit_preedit(WaylandIMContext *imcontext)
ecore_imf_context_event_callback_call(imcontext->ctx,
ECORE_IMF_CALLBACK_PREEDIT_END, NULL);
- ecore_imf_context_event_callback_call(imcontext->ctx,
- ECORE_IMF_CALLBACK_COMMIT,
+ ecore_imf_context_event_callback_call(imcontext->ctx,
+ ECORE_IMF_CALLBACK_COMMIT,
(void *)imcontext->preedit_commit);
}
@@ -436,14 +436,14 @@ text_input_preedit_string(void *data,
if (!check_serial(imcontext, serial))
return;
- old_preedit =
+ old_preedit =
imcontext->preedit_text && strlen(imcontext->preedit_text) > 0;
clear_preedit(imcontext);
imcontext->preedit_text = strdup(text);
imcontext->preedit_commit = strdup(commit);
- imcontext->preedit_cursor =
+ imcontext->preedit_cursor =
utf8_offset_to_characters(text, imcontext->pending_preedit.cursor);
imcontext->preedit_attrs = imcontext->pending_preedit.attrs;
@@ -451,19 +451,19 @@ text_input_preedit_string(void *data,
if (!old_preedit)
{
- ecore_imf_context_event_callback_call(imcontext->ctx,
- ECORE_IMF_CALLBACK_PREEDIT_START,
+ ecore_imf_context_event_callback_call(imcontext->ctx,
+ ECORE_IMF_CALLBACK_PREEDIT_START,
NULL);
}
- ecore_imf_context_event_callback_call(imcontext->ctx,
- ECORE_IMF_CALLBACK_PREEDIT_CHANGED,
+ ecore_imf_context_event_callback_call(imcontext->ctx,
+ ECORE_IMF_CALLBACK_PREEDIT_CHANGED,
NULL);
if (imcontext->preedit_text && strlen(imcontext->preedit_text) == 0)
{
- ecore_imf_context_event_callback_call(imcontext->ctx,
- ECORE_IMF_CALLBACK_PREEDIT_END,
+ ecore_imf_context_event_callback_call(imcontext->ctx,
+ ECORE_IMF_CALLBACK_PREEDIT_END,
NULL);
}
}
@@ -530,7 +530,7 @@ text_input_preedit_styling(void *data,
attr->start_index = index;
attr->end_index = index + length;
- imcontext->pending_preedit.attrs =
+ imcontext->pending_preedit.attrs =
eina_list_append(imcontext->pending_preedit.attrs, attr);
}
@@ -737,10 +737,10 @@ wayland_im_context_add(Ecore_IMF_Context *ctx)
imcontext->ctx = ctx;
- imcontext->text_input =
+ imcontext->text_input =
zwp_text_input_manager_v1_create_text_input(imcontext->text_input_manager);
if (imcontext->text_input)
- zwp_text_input_v1_add_listener(imcontext->text_input,
+ zwp_text_input_v1_add_listener(imcontext->text_input,
&text_input_listener, imcontext);
}
diff --git a/src/modules/ecore_imf/wayland/wayland_module.c b/src/modules/ecore_imf/wayland/wayland_module.c
index 1f3d21a8a2..6cc3779ae0 100644
--- a/src/modules/ecore_imf/wayland/wayland_module.c
+++ b/src/modules/ecore_imf/wayland/wayland_module.c
@@ -153,7 +153,7 @@ im_module_init(void)
{
const char *s;
- _ecore_imf_wayland_log_dom =
+ _ecore_imf_wayland_log_dom =
eina_log_domain_register("ecore_imf_wayland", EINA_COLOR_YELLOW);
if (!getenv("WAYLAND_DISPLAY")) return EINA_FALSE;
@@ -168,7 +168,7 @@ im_module_init(void)
ewd = ecore_wl2_display_connect(NULL);
if (!ewd) goto err;
- ecore_imf_module_register(&wayland_im_info, im_module_create,
+ ecore_imf_module_register(&wayland_im_info, im_module_create,
im_module_exit);
EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "im module initialized");
diff --git a/src/modules/ecore_imf/xim/meson.build b/src/modules/ecore_imf/xim/meson.build
index 4ffa1f177c..928f396a10 100644
--- a/src/modules/ecore_imf/xim/meson.build
+++ b/src/modules/ecore_imf/xim/meson.build
@@ -2,11 +2,12 @@ mod_src = files([
'ecore_imf_xim.c',
])
-mod_deps = [ecore, ecore_imf, ecore_input, ecore_x, ecore_x_deps, ecore_evas]
+mod_deps = [ecore, ecore_imf, ecore_input, ecore_x, ecore_x_ext_deps, ecore_evas]
shared_module(mod_name,
mod_src,
dependencies: mod_deps,
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/ecore_wl2/engines/dmabuf/meson.build b/src/modules/ecore_wl2/engines/dmabuf/meson.build
index c6b976daca..4b3ac53daf 100644
--- a/src/modules/ecore_wl2/engines/dmabuf/meson.build
+++ b/src/modules/ecore_wl2/engines/dmabuf/meson.build
@@ -2,5 +2,6 @@ shared_module('dmabuf',
'ecore_wl2_surface_module_dmabuf.c',
dependencies: [ecore_wl2, wayland_protocol],
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/eeze/sensor/fake/meson.build b/src/modules/eeze/sensor/fake/meson.build
index c87f2cb68d..f2495423db 100644
--- a/src/modules/eeze/sensor/fake/meson.build
+++ b/src/modules/eeze/sensor/fake/meson.build
@@ -3,6 +3,7 @@ shared_module(module_name,
dependencies: [eina, eeze, ecore],
install: true,
install_dir : join_paths(dir_package_modules, 'sensor', module_name, version_name),
+ name_suffix : sys_mod_extension
)
module_files += join_paths(dir_package_modules, 'sensor', module_name, version_name, 'lib' + module_name + '.' + sys_lib_extension)
diff --git a/src/modules/eeze/sensor/udev/meson.build b/src/modules/eeze/sensor/udev/meson.build
index c87f2cb68d..f2495423db 100644
--- a/src/modules/eeze/sensor/udev/meson.build
+++ b/src/modules/eeze/sensor/udev/meson.build
@@ -3,6 +3,7 @@ shared_module(module_name,
dependencies: [eina, eeze, ecore],
install: true,
install_dir : join_paths(dir_package_modules, 'sensor', module_name, version_name),
+ name_suffix : sys_mod_extension
)
module_files += join_paths(dir_package_modules, 'sensor', module_name, version_name, 'lib' + module_name + '.' + sys_lib_extension)
diff --git a/src/modules/eina/mp/chained_pool/eina_chained_mempool.c b/src/modules/eina/mp/chained_pool/eina_chained_mempool.c
index 261b02c200..e9f8b8d326 100644
--- a/src/modules/eina/mp/chained_pool/eina_chained_mempool.c
+++ b/src/modules/eina/mp/chained_pool/eina_chained_mempool.c
@@ -220,7 +220,7 @@ _eina_chained_mempool_free_in(Chained_Mempool *pool, Chained_Pool *p, void *ptr)
{
#ifdef DEBUG
void *pmem;
-
+
// pool mem base
pmem = (void *)(((unsigned char *)p) + sizeof(Chained_Pool));
@@ -274,7 +274,7 @@ eina_chained_mempool_malloc(void *data, EINA_UNUSED unsigned int size)
{
Chained_Mempool *pool = data;
Chained_Pool *p = NULL;
- void *mem;
+ void *mem = NULL;
if (!eina_spinlock_take(&pool->mutex))
{
@@ -321,10 +321,10 @@ eina_chained_mempool_malloc(void *data, EINA_UNUSED unsigned int size)
_eina_chained_mp_pool_cmp, NULL);
}
- mem = _eina_chained_mempool_alloc_in(pool, pool->first_fill);
+ if (pool->first_fill)
+ mem = _eina_chained_mempool_alloc_in(pool, pool->first_fill);
eina_spinlock_release(&pool->mutex);
-
return mem;
}
diff --git a/src/modules/eina/mp/one_big/eina_one_big.c b/src/modules/eina/mp/one_big/eina_one_big.c
index 50edfaab7b..936f23b4d1 100644
--- a/src/modules/eina/mp/one_big/eina_one_big.c
+++ b/src/modules/eina/mp/one_big/eina_one_big.c
@@ -411,7 +411,7 @@ eina_one_big_shutdown(void *data)
// mempool is cleaning up the mess created. be quiet for now as we were before
// but edje seems to be a big offender at the moment! bad cedric! :)
// WRN(
-// "Pool [%s] over by %i. cleaning up for you",
+// "Pool [%s] over by %i. cleaning up for you",
// pool->name, pool->over);
while (pool->over_list)
{
@@ -425,7 +425,7 @@ eina_one_big_shutdown(void *data)
if (pool->over > 0)
{
WRN(
- "Pool [%s] still over by %i\n",
+ "Pool [%s] still over by %i\n",
pool->name, pool->over);
}
diff --git a/src/modules/elementary/access_output/meson.build b/src/modules/elementary/access_output/meson.build
index 178ab16618..55934ba292 100644
--- a/src/modules/elementary/access_output/meson.build
+++ b/src/modules/elementary/access_output/meson.build
@@ -4,7 +4,9 @@ src = files([
shared_module(mod,
src,
+ c_args : package_c_args,
dependencies: [elementary],
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/elementary/access_output/mod.c b/src/modules/elementary/access_output/mod.c
index f51b512a47..cabf0a6a55 100644
--- a/src/modules/elementary/access_output/mod.c
+++ b/src/modules/elementary/access_output/mod.c
@@ -19,7 +19,7 @@ static void (*cb_func) (void *data);
static void *cb_data;
static Ecore_Exe *espeak = NULL;
static Ecore_Event_Handler *exe_exit_handler = NULL;
-static char *tmpf = NULL;
+static Eina_Tmpstr *tmpf = NULL;
static int tmpfd = -1;
static Eina_Bool
@@ -32,7 +32,7 @@ _exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
if (tmpf)
{
unlink(tmpf);
- free(tmpf);
+ eina_tmpstr_del(tmpf);
tmpf = NULL;
close(tmpfd);
tmpfd = -1;
@@ -70,15 +70,12 @@ out_read(const char *txt)
{
if (!tmpf)
{
- char buf[PATH_MAX];
mode_t cur_umask;
- snprintf(buf, sizeof(buf), "/tmp/.elm-speak-XXXXXX");
cur_umask = umask(S_IRWXO | S_IRWXG);
- tmpfd = mkstemp(buf);
+ tmpfd = eina_file_mkstemp("elm-speak-XXXXXX", &tmpf);
umask(cur_umask);
- if (tmpfd >= 0) tmpf = strdup(buf);
- else return;
+ if (tmpfd < 0) return;
}
if (write(tmpfd, txt, strlen(txt)) < 0) perror("write to tmpfile (espeak)");
}
@@ -117,7 +114,7 @@ out_cancel(void)
if (tmpf)
{
unlink(tmpf);
- free(tmpf);
+ eina_tmpstr_del(tmpf);
tmpf = NULL;
close(tmpfd);
tmpfd = -1;
diff --git a/src/modules/elementary/prefs/meson.build b/src/modules/elementary/prefs/meson.build
index 9ec2c9a475..974ebb52ee 100644
--- a/src/modules/elementary/prefs/meson.build
+++ b/src/modules/elementary/prefs/meson.build
@@ -18,7 +18,9 @@ src = files([
shared_module(mod,
src,
+ c_args : package_c_args,
dependencies: [elementary],
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/elementary/test_entry/meson.build b/src/modules/elementary/test_entry/meson.build
index 178ab16618..55934ba292 100644
--- a/src/modules/elementary/test_entry/meson.build
+++ b/src/modules/elementary/test_entry/meson.build
@@ -4,7 +4,9 @@ src = files([
shared_module(mod,
src,
+ c_args : package_c_args,
dependencies: [elementary],
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/elementary/test_map/meson.build b/src/modules/elementary/test_map/meson.build
index 178ab16618..55934ba292 100644
--- a/src/modules/elementary/test_map/meson.build
+++ b/src/modules/elementary/test_map/meson.build
@@ -4,7 +4,9 @@ src = files([
shared_module(mod,
src,
+ c_args : package_c_args,
dependencies: [elementary],
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/elementary/web/none/elm_web_none_eo.h b/src/modules/elementary/web/none/elm_web_none_eo.h
index 8bf39b1461..df91907d17 100644
--- a/src/modules/elementary/web/none/elm_web_none_eo.h
+++ b/src/modules/elementary/web/none/elm_web_none_eo.h
@@ -19,6 +19,6 @@ typedef Eo Elm_Web_None;
*/
#define ELM_WEB_NONE_CLASS elm_web_none_class_get()
-EWAPI const Efl_Class *elm_web_none_class_get(void);
+EWAPI const Efl_Class *elm_web_none_class_get(void) EINA_CONST;
#endif
diff --git a/src/modules/elementary/web/none/meson.build b/src/modules/elementary/web/none/meson.build
index 632bca3bc4..5e324a88cd 100644
--- a/src/modules/elementary/web/none/meson.build
+++ b/src/modules/elementary/web/none/meson.build
@@ -6,7 +6,8 @@ shared_module('none',
src,
dependencies: [elementary, elementary_deps],
install: true,
- install_dir : mod_install_dir
+ install_dir : mod_install_dir,
+ name_suffix : sys_mod_extension
)
mod = 'none'
diff --git a/src/modules/emotion/generic/Emotion_Generic_Plugin.h b/src/modules/emotion/generic/Emotion_Generic_Plugin.h
deleted file mode 100644
index 96b69f6421..0000000000
--- a/src/modules/emotion/generic/Emotion_Generic_Plugin.h
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef EMOTION_GENERIC_PLUGIN_H
-#define EMOTION_GENERIC_PLUGIN_H
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <Eina.h>
-
-#define DEFAULTWIDTH 320
-#define DEFAULTHEIGHT 240
-#define DEFAULTPITCH 4
-
-typedef enum _Emotion_Generic_Cmd Emotion_Generic_Cmd;
-typedef enum _Emotion_Generic_Result Emotion_Generic_Result;
-typedef struct _Emotion_Generic_Video_Frame Emotion_Generic_Video_Frame;
-typedef struct _Emotion_Generic_Video_Shared Emotion_Generic_Video_Shared;
-
-enum _Emotion_Generic_Cmd
-{
- EM_CMD_INIT = 0, // 0 param: shared memory identifier (string)
- EM_CMD_PLAY, // 1 param: position (float)
- EM_CMD_STOP, // 2 param: none
- EM_CMD_FILE_SET, // 3 param: filename (string)
- EM_CMD_FILE_SET_DONE, // 4 param: none
- EM_CMD_FILE_CLOSE, // 5 param: none
- EM_CMD_POSITION_SET, // 6 param: position (float)
- EM_CMD_SPEED_SET, // 7 param: speed (float)
- EM_CMD_AUDIO_MUTE_SET, // 8 param: muted (int)
- EM_CMD_VIDEO_MUTE_SET, // 9 param: muted (int)
- EM_CMD_SPU_MUTE_SET, // 10 param: muted (int)
- EM_CMD_VOLUME_SET, // 11 param: volume (float)
- EM_CMD_AUDIO_TRACK_SET, // 12 param: track id (int)
- EM_CMD_VIDEO_TRACK_SET, // 13 param: track id (int)
- EM_CMD_SPU_TRACK_SET, // 14 param: track id (int)
- EM_CMD_SUBTITLE_SET, // 15 param: subtitle filename (string)
- EM_CMD_LAST
-};
-
-enum _Emotion_Generic_Result
-{
- EM_RESULT_INIT = 0, // param: none
- EM_RESULT_FILE_SET, // param: none
- EM_RESULT_FILE_SET_DONE, // param: success (int)
- EM_RESULT_PLAYBACK_STARTED, // param: none
- EM_RESULT_PLAYBACK_STOPPED, // param: none
- EM_RESULT_FILE_CLOSE, // param: none
- EM_RESULT_FRAME_NEW, // param: none
- EM_RESULT_FRAME_SIZE, // param: int, int (width, height)
- EM_RESULT_LENGTH_CHANGED, // param: float
- EM_RESULT_POSITION_CHANGED, // param: float
- EM_RESULT_SEEKABLE_CHANGED, // param: int
- EM_RESULT_AUDIO_TRACK_INFO, // param: current track, track count, track_id, track_name, track_id2, track_name2, ...
- EM_RESULT_VIDEO_TRACK_INFO, // param: current track, track count, track_id, track_name, track_id2, track_name2, ...
- EM_RESULT_SPU_TRACK_INFO, // param: current spu, spu count, spu_id, spu_name, spu_id2, spu_name2, ...
- // (int, int, int, string, int, string, ...)
- EM_RESULT_META_INFO, // param: title, artist, album, year, genre, comments, disc id, count (all int)
- EM_RESULT_LAST
-};
-
-/* structure for frames 2 buffers to keep integrity */
-struct _Emotion_Generic_Video_Frame
-{
- unsigned char *frames[3];
-};
-
-/* structure for frames 2 buffers to keep integrity */
-struct _Emotion_Generic_Video_Shared
-{
- int size;
- int width;
- int height;
- int pitch;
- /**
- * - "emotion" is the frame from where the Emotion process is reading pixels.
- * The player shouldn't touch this frame.
- * - "player" is the frame where the slave process is writing pixels.
- * The emotion process shouldn't touch this frame.
- * - "last" is the last frame that was rendered by the player. Emotion will
- * use this frame the next time it will fetch pixels to Evas.
- * - "next" is the unused frame. The player currently using the "player"
- * should, after finishing this frame, set "last" to "player", and "player"
- * to "next", and finally "next" to "last" so this operation can be done
- * many times in case that Emotion does not request pixels fast enough.
- */
- struct {
- int emotion;
- int player;
- int last;
- int next;
- } frame;
- Eina_Semaphore lock;
- int frame_drop;
-};
-
-static inline int
-emotion_generic_shm_get(const char *shmname, Emotion_Generic_Video_Shared **vs, Emotion_Generic_Video_Frame *vf)
-{
- int shmfd = -1;
- int size;
- Emotion_Generic_Video_Shared *t_vs;
-
- shmfd = shm_open(shmname, O_RDWR, 0700);
- if (shmfd == -1)
- {
- fprintf(stderr, "player: could not open shm: %s: %s\n",
- shmname, strerror(errno));
- return 0;
- }
-
- t_vs = mmap(NULL, sizeof(*t_vs), PROT_READ|PROT_WRITE, MAP_SHARED, shmfd, 0);
- if (t_vs == MAP_FAILED)
- {
- fprintf(stderr, "player: could not map shared memory: %s\n",
- strerror(errno));
- close(shmfd);
- return 0;
- }
- size = t_vs->size;
- munmap(t_vs, sizeof(*t_vs));
- t_vs = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, shmfd, 0);
- if (t_vs == MAP_FAILED)
- {
- fprintf(stderr, "player: could not map shared memory: %s\n",
- strerror(errno));
- close(shmfd);
- return 0;
- }
- close(shmfd);
-
- vf->frames[0] = (unsigned char *)t_vs + sizeof(*t_vs);
- vf->frames[1] = (unsigned char *)t_vs + sizeof(*t_vs) + t_vs->height * t_vs->width * t_vs->pitch;
- vf->frames[2] = (unsigned char *)t_vs + sizeof(*t_vs) + 2 * t_vs->height * t_vs->width * t_vs->pitch;
-
- *vs = t_vs;
-
- return 1;
-}
-
-static inline void
-emotion_generic_shm_free(Emotion_Generic_Video_Shared *vs)
-{
- munmap(vs, vs->size);
-}
-
-#endif // EMOTION_GENERIC_PLUGIN_H
diff --git a/src/modules/emotion/generic/README b/src/modules/emotion/generic/README
deleted file mode 100644
index c2a028de5d..0000000000
--- a/src/modules/emotion/generic/README
+++ /dev/null
@@ -1,79 +0,0 @@
-Generic - emotion backend
-=========================
-
-This generic player backend executes a separate player in another
-process. It receives the bytes to be drawn on the emotion object through
-a shared memory, and communicates with the player through a pipe, using
-the player standard input/output.
-
-The player must communicate with emotion using the defined commands
-specified in the Emotion_Generic_Plugin.h. It doesn't need to link
-against emotion, just include this file for easier implementation.
-
-
-How does it work?
-=================
-
-When the module is initialized for an emotion object, it starts another process
-that runs the specified player. The player command line is specified using:
-
- emotion_object_module_option_set(object, "player", <command>);
-
-A player using libvlc is being provided now, and the generic module internally
-checks if the command given was "vlc", in which case it will use this provided
-vlc player.
-
-When a file is set to this object, it will send the file name to the player, and
-expect an answer that will tell that the player already decoded a bit of the
-file, and the video size is already set on the module, so it can allocate a
-shared memory with correct size.
-
-The module then allocates the memory, sends a message to the player and expect
-an answer. After this last answer, the "open_done" signal is sent and the module
-knows that it is ready for playing. Commands sent before the module being ready
-are now applied (and play is resumed if necessary).
-
-During this setup stage, info about the file set will be stored in the module,
-so commands like meta data get, length get and so will be available to sync
-calls like emotion_object_play_length_get();
-
-If the player dies for any reason, a "decode_stop" signal is sent (should change
-to something more like an error signal), and if play is called again, it will be
-restarted. The playback should start from the same point it was before the
-player crashed, if the player supports seek on the current media format).
-
-TODO
-====
-
- - Provide better description for commands;
- - Explain in details the communication emotion <-> player;
- - Make more common functions for players;
- - (maybe) add support for named pipes, so we don't rely on standard in/out
- for communication;
- - Add a detection on the player to know that the emotion process died (so it
- can just exit);
- - shmname should contain the child pid too;
- - better names for commands, maybe add namespace everywhere;
-
-
-questions
-=========
-
- - Using semaphores to lock the critical region between process, and pthread
- mutexes for the threads inside the player. Should move to only one type
- (semphores or mutexes)?
- - There are 2 inline functions insde Emotion_Generic_Plugin.h to make it easier
- for the player to get the shared memory correctly. Any problem with this?
- Would be good to add more functions/macros to make common tasks like
- parsing commands there too?
- - Should move players to another project (outside of emotion)?
-
-
-problems
-========
- - file_set has some critical time when file is not set yet when we can't call
- some functions (I think only another file_set now);
- - communication player -> emotion depends on '\n' to delimitate commands, will
- remove this soon (fix this urgently!);
- - need to implement missing APIs;
-
diff --git a/src/modules/emotion/generic/emotion_generic.c b/src/modules/emotion/generic/emotion_generic.c
deleted file mode 100644
index 601e9e2d92..0000000000
--- a/src/modules/emotion/generic/emotion_generic.c
+++ /dev/null
@@ -1,1908 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <Eina.h>
-#include <Evas.h>
-#include <Ecore.h>
-
-#include "emotion_modules.h"
-#include "emotion_generic.h"
-
-static Eina_Prefix *pfx = NULL;
-static Eina_List *_generic_players = NULL;
-static int _emotion_init_count = 0;
-
-static int _emotion_generic_log_domain = -1;
-#ifdef DBG
-#undef DBG
-#endif
-#define DBG(...) EINA_LOG_DOM_DBG(_emotion_generic_log_domain, __VA_ARGS__)
-
-#ifdef INF
-#undef INF
-#endif
-#define INF(...) EINA_LOG_DOM_INFO(_emotion_generic_log_domain, __VA_ARGS__)
-
-#ifdef WRN
-#undef WRN
-#endif
-#define WRN(...) EINA_LOG_DOM_WARN(_emotion_generic_log_domain, __VA_ARGS__)
-
-#ifdef ERR
-#undef ERR
-#endif
-#define ERR(...) EINA_LOG_DOM_ERR(_emotion_generic_log_domain, __VA_ARGS__)
-
-#ifdef CRI
-#undef CRI
-#endif
-#define CRI(...) EINA_LOG_DOM_CRIT(_emotion_generic_log_domain, __VA_ARGS__)
-
-
-static Eina_Bool _fork_and_exec(Emotion_Generic_Video *ev);
-static void em_partial_shutdown(Emotion_Generic_Video *ev);
-
-
-static void
-_player_send_cmd(Emotion_Generic_Video *ev, int cmd)
-{
- if (cmd >= EM_CMD_LAST)
- {
- ERR("invalid command to player.");
- return;
- }
- if (!ev->fd_write)
- {
- ERR("you should wait for emotion to be ready to take action.");
- return;
- }
- ecore_pipe_write(ev->fd_write, &cmd, sizeof(cmd));
-}
-
-static void
-_player_send_int(Emotion_Generic_Video *ev, int number)
-{
- if (!ev->fd_write)
- {
- ERR("you should wait for emotion to be ready to take action.");
- return;
- }
- ecore_pipe_write(ev->fd_write, &number, sizeof(number));
-}
-
-static void
-_player_send_float(Emotion_Generic_Video *ev, float number)
-{
- if (!ev->fd_write)
- {
- ERR("you should wait for emotion to be ready to take action.");
- return;
- }
- ecore_pipe_write(ev->fd_write, &number, sizeof(number));
-}
-
-static void
-_player_send_str(Emotion_Generic_Video *ev, const char *str, Eina_Bool stringshared)
-{
- int len;
-
- if (stringshared)
- len = str ? eina_stringshare_strlen(str) + 1 : 0;
- else
- len = str ? strlen(str) + 1 : 0;
-
- if (str)
- ecore_pipe_write(ev->fd_write, str, len);
-}
-
-static Eina_Bool
-_create_shm_data(Emotion_Generic_Video *ev, const char *shmname)
-{
- int shmfd;
- int npages;
- size_t size;
- Emotion_Generic_Video_Shared *vs;
-
- shmfd = shm_open(shmname, O_CREAT | O_RDWR | O_TRUNC, 0700);
- if (shmfd == -1)
- {
- ERR("player: could not create shm %s: %s", shmname, strerror(errno));
- return 0;
- }
- size = 3 * (ev->w * ev->h * DEFAULTPITCH) + sizeof(*vs);
-
- npages = (int)(size / getpagesize()) + 1;
- size = npages * getpagesize();
-
- if (ftruncate(shmfd, size))
- {
- ERR("error when allocating shared memory (size = %zd): "
- "%s", size, strerror(errno));
- close(shmfd);
- shm_unlink(shmname);
- return EINA_FALSE;
- }
- vs = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, shmfd, 0);
- if (vs == MAP_FAILED)
- {
- ERR("error when mapping shared memory: %s", strerror(errno));
- close(shmfd);
- shm_unlink(shmname);
- return EINA_FALSE;
- }
- close(shmfd);
-
- vs->size = size;
- vs->width = ev->w;
- vs->height = ev->h;
- vs->pitch = DEFAULTPITCH;
- vs->frame.emotion = 0;
- vs->frame.player = 1;
- vs->frame.last = 2;
- vs->frame.next = 2;
- vs->frame_drop = 0;
- if (!eina_semaphore_new(&vs->lock, 1))
- {
- ERR("can not create semaphore");
- munmap(vs, size);
- shm_unlink(shmname);
- return EINA_FALSE;
- }
- ev->frame.frames[0] = (unsigned char *)vs + sizeof(*vs);
- ev->frame.frames[1] = (unsigned char *)vs + sizeof(*vs) + vs->height * vs->width * vs->pitch;
- ev->frame.frames[2] = (unsigned char *)vs + sizeof(*vs) + 2 * vs->height * vs->width * vs->pitch;
-
- if (ev->shared)
- munmap(ev->shared, ev->shared->size);
- ev->shared = vs;
-
- return EINA_TRUE;
-}
-
-static void
-_player_new_frame(Emotion_Generic_Video *ev)
-{
- if (!ev->file_ready)
- return;
- _emotion_frame_new(ev->obj);
-}
-
-static void
-_file_open(Emotion_Generic_Video *ev)
-{
- INF("Opening file: %s", ev->filename);
- ev->drop = 0;
-
- if (!ev->ready || !ev->filename)
- return;
- _player_send_cmd(ev, EM_CMD_FILE_SET);
- _player_send_str(ev, ev->filename, EINA_TRUE);
-}
-
-static void
-_player_file_set_done(Emotion_Generic_Video *ev)
-{
- if (ev->file_changed)
- {
- _file_open(ev);
- ev->file_changed = EINA_FALSE;
- return;
- }
-
- if (!_create_shm_data(ev, ev->shmname))
- {
- ERR("could not create shared memory.");
- return;
- }
- _player_send_cmd(ev, EM_CMD_FILE_SET_DONE);
-}
-
-static void
-_player_ready(Emotion_Generic_Video *ev)
-{
- INF("received: player ready.");
-
- ev->initializing = EINA_FALSE;
- ev->ready = EINA_TRUE;
-
- if (!ev->filename)
- return;
-
- _file_open(ev);
-}
-
-static Eina_Bool
-_player_cmd_param_read(Emotion_Generic_Video *ev, void *param, size_t size)
-{
- ssize_t done, todo, i;
-
- /* When a parameter must be read, we cannot make sure it will be entirely
- * available. Thus we store the bytes that could be read in a temp buffer,
- * and when more data is read we try to complete the buffer and finally use
- * the read value.
- */
- if (!ev->cmd.tmp)
- {
- ev->cmd.tmp = malloc(size);
- ev->cmd.i = 0;
- ev->cmd.total = size;
- }
-
- todo = ev->cmd.total - ev->cmd.i;
- i = ev->cmd.i;
-
- done = (ev->offset + todo > ev->length) ? ev->length - ev->offset : todo;
- memcpy(&ev->cmd.tmp[i], &ev->buffer[ev->offset], done);
- ev->offset += done;
-
- if (done == todo)
- {
- memcpy(param, ev->cmd.tmp, size);
- free(ev->cmd.tmp);
- ev->cmd.tmp = NULL;
- return EINA_TRUE;
- }
-
- if (done > 0)
- ev->cmd.i += done;
-
- return EINA_FALSE;
-}
-
-static void
-_player_frame_resize(Emotion_Generic_Video *ev)
-{
- int w, h;
-
- w = ev->cmd.param.size.width;
- h = ev->cmd.param.size.height;
-
- INF("received frame resize: %dx%d", w, h);
- ev->w = w;
- ev->h = h;
- ev->ratio = (float)w / h;
-
- _emotion_frame_resize(ev->obj, ev->w, ev->h, ev->ratio);
-}
-
-static void
-_player_length_changed(Emotion_Generic_Video *ev)
-{
- float length = ev->cmd.param.f_num;
-
- INF("received length changed: %0.3f", length);
-
- ev->len = length;
- _emotion_video_pos_update(ev->obj, ev->pos, ev->len);
-}
-
-static void
-_player_position_changed(Emotion_Generic_Video *ev)
-{
- float position = ev->cmd.param.f_num;
-
- // INF("received position changed: %0.3f", position);
-
- ev->pos = position;
- _emotion_video_pos_update(ev->obj, ev->pos, ev->len);
-/* hmmm. no _emotion_progress_set() is for "buffering" progress.
- if (ev->len == 0)
- return;
-
- float progress = ev->pos / ev->len;
- char buf[16];
- snprintf(buf, sizeof(buf), "%0.1f%%", progress * 100);
-
- _emotion_progress_set(ev->obj, buf, progress);
- */
-}
-
-static void
-_player_seekable_changed(Emotion_Generic_Video *ev)
-{
- int seekable = ev->cmd.param.i_num;
-
- INF("received seekable changed: %d", seekable);
-
- seekable = !!seekable;
-
- ev->seekable = seekable;
-}
-
-static void
-_audio_channels_free(Emotion_Generic_Video *ev)
-{
- int i;
- for (i = 0; i < ev->audio_channels_count; i++)
- eina_stringshare_del(ev->audio_channels[i].name);
- free(ev->audio_channels);
- ev->audio_channels = NULL;
- ev->audio_channels_count = 0;
-}
-
-static void
-_video_channels_free(Emotion_Generic_Video *ev)
-{
- int i;
- for (i = 0; i < ev->video_channels_count; i++)
- eina_stringshare_del(ev->video_channels[i].name);
- free(ev->video_channels);
- ev->video_channels = NULL;
- ev->video_channels_count = 0;
-}
-
-static void
-_spu_channels_free(Emotion_Generic_Video *ev)
-{
- int i;
- for (i = 0; i < ev->spu_channels_count; i++)
- eina_stringshare_del(ev->spu_channels[i].name);
- free(ev->spu_channels);
- ev->spu_channels = NULL;
- ev->spu_channels_count = 0;
-}
-
-static void
-_player_tracks_info(Emotion_Generic_Video *ev, Emotion_Generic_Channel **channels, int *count, int *current)
-{
- Emotion_Generic_Channel *pchannels;
- int i;
-
- *count = ev->cmd.param.track.total;
- *current = ev->cmd.param.track.current;
- pchannels = ev->cmd.param.track.channels;
-
- INF("number of tracks: %d (current = %d):", *count, *current);
- for (i = 0; i < *count; i++)
- {
- INF("\tchannel %d: %s", pchannels[i].id, pchannels[i].name);
- }
-
- *channels = pchannels;
-}
-
-static void
-_player_audio_tracks_info(Emotion_Generic_Video *ev)
-{
- INF("Receiving audio channels:");
- if (ev->audio_channels_count)
- _audio_channels_free(ev);
-
- _player_tracks_info(ev, &ev->audio_channels, &ev->audio_channels_count,
- &ev->audio_channel_current);
-}
-
-static void
-_player_video_tracks_info(Emotion_Generic_Video *ev)
-{
- INF("Receiving video channels:");
- if (ev->video_channels_count)
- _video_channels_free(ev);
-
- _player_tracks_info(ev, &ev->video_channels, &ev->video_channels_count,
- &ev->video_channel_current);
-}
-
-static void
-_player_spu_tracks_info(Emotion_Generic_Video *ev)
-{
- INF("Receiving spu channels:");
- if (ev->spu_channels_count)
- _spu_channels_free(ev);
-
- _player_tracks_info(ev, &ev->spu_channels, &ev->spu_channels_count,
- &ev->spu_channel_current);
-}
-
-static void
-_player_meta_info_free(Emotion_Generic_Video *ev)
-{
- eina_stringshare_replace(&ev->meta.title, NULL);
- eina_stringshare_replace(&ev->meta.artist, NULL);
- eina_stringshare_replace(&ev->meta.album, NULL);
- eina_stringshare_replace(&ev->meta.year, NULL);
- eina_stringshare_replace(&ev->meta.genre, NULL);
- eina_stringshare_replace(&ev->meta.comment, NULL);
- eina_stringshare_replace(&ev->meta.disc_id, NULL);
- eina_stringshare_replace(&ev->meta.count, NULL);
-}
-
-static void
-_player_meta_info_read(Emotion_Generic_Video *ev)
-{
- INF("Receiving meta info:");
- _player_meta_info_free(ev);
- ev->meta.title = ev->cmd.param.meta.title;
- ev->meta.artist = ev->cmd.param.meta.artist;
- ev->meta.album = ev->cmd.param.meta.album;
- ev->meta.year = ev->cmd.param.meta.year;
- ev->meta.genre = ev->cmd.param.meta.genre;
- ev->meta.comment = ev->cmd.param.meta.comment;
- ev->meta.disc_id = ev->cmd.param.meta.disc_id;
- ev->meta.count = ev->cmd.param.meta.count;
- INF("title: '%s'", ev->meta.title);
- INF("artist: '%s'", ev->meta.artist);
- INF("album: '%s'", ev->meta.album);
- INF("year: '%s'", ev->meta.year);
- INF("genre: '%s'", ev->meta.genre);
- INF("comment: '%s'", ev->meta.comment);
- INF("disc_id: '%s'", ev->meta.disc_id);
- INF("count: '%s'", ev->meta.count);
-}
-
-static void
-_player_file_closed(Emotion_Generic_Video *ev)
-{
- INF("Closed previous file.");
- eina_semaphore_free(&ev->shared->lock);
- ev->closing = EINA_FALSE;
-
- if (ev->opening)
- _file_open(ev);
-}
-
-static void
-_player_open_done(Emotion_Generic_Video *ev)
-{
- int success;
-
- success = ev->cmd.param.i_num;
- shm_unlink(ev->shmname);
-
- if (ev->file_changed)
- {
- _file_open(ev);
- ev->file_changed = EINA_FALSE;
- return;
- }
-
- ev->opening = EINA_FALSE;
- if (!success)
- {
- ERR("Could not open file.");
- return;
- }
-
- ev->file_ready = EINA_TRUE;
-
- _emotion_open_done(ev->obj);
-
- _player_send_cmd(ev, EM_CMD_VOLUME_SET);
- _player_send_float(ev, ev->volume);
-
- _player_send_cmd(ev, EM_CMD_SPEED_SET);
- _player_send_float(ev, ev->speed);
-
- int mute = ev->audio_mute;
- _player_send_cmd(ev, EM_CMD_AUDIO_MUTE_SET);
- _player_send_int(ev, mute);
-
- mute = ev->video_mute;
- _player_send_cmd(ev, EM_CMD_VIDEO_MUTE_SET);
- _player_send_int(ev, mute);
-
- mute = ev->spu_mute;
- _player_send_cmd(ev, EM_CMD_SPU_MUTE_SET);
- _player_send_int(ev, mute);
-
- if (ev->play)
- {
- _player_send_cmd(ev, EM_CMD_PLAY);
- _player_send_float(ev, ev->pos);
- }
-
- INF("Open done");
-}
-
-static void
-_player_cmd_process(Emotion_Generic_Video *ev)
-{
- switch (ev->cmd.type) {
- case EM_RESULT_INIT:
- _player_ready(ev);
- break;
- case EM_RESULT_FRAME_NEW:
- _player_new_frame(ev);
- break;
- case EM_RESULT_FILE_SET:
- _player_file_set_done(ev);
- break;
- case EM_RESULT_FILE_SET_DONE:
- _player_open_done(ev);
- break;
- case EM_RESULT_FILE_CLOSE:
- _player_file_closed(ev);
- break;
- case EM_RESULT_PLAYBACK_STARTED:
- _emotion_playback_started(ev->obj);
- break;
- case EM_RESULT_PLAYBACK_STOPPED:
- ev->play = 0;
- _emotion_playback_finished(ev->obj);
- _emotion_decode_stop(ev->obj);
- break;
- case EM_RESULT_FRAME_SIZE:
- _player_frame_resize(ev);
- break;
- case EM_RESULT_LENGTH_CHANGED:
- _player_length_changed(ev);
- break;
- case EM_RESULT_POSITION_CHANGED:
- _player_position_changed(ev);
- break;
- case EM_RESULT_SEEKABLE_CHANGED:
- _player_seekable_changed(ev);
- break;
- case EM_RESULT_AUDIO_TRACK_INFO:
- _player_audio_tracks_info(ev);
- break;
- case EM_RESULT_VIDEO_TRACK_INFO:
- _player_video_tracks_info(ev);
- break;
- case EM_RESULT_SPU_TRACK_INFO:
- _player_spu_tracks_info(ev);
- break;
- case EM_RESULT_META_INFO:
- _player_meta_info_read(ev);
- break;
- default:
- WRN("received wrong command: %d", ev->cmd.type);
- }
-
- ev->cmd.type = -1;
-}
-
-static void
-_player_cmd_single_int_process(Emotion_Generic_Video *ev)
-{
- if (!_player_cmd_param_read(ev, &ev->cmd.param.i_num, sizeof(ev->cmd.param.i_num)))
- return;
-
- _player_cmd_process(ev);
-}
-
-static void
-_player_cmd_single_float_process(Emotion_Generic_Video *ev)
-{
- if (!_player_cmd_param_read(ev, &ev->cmd.param.f_num, sizeof(ev->cmd.param.f_num)))
- return;
-
- _player_cmd_process(ev);
-}
-
-static void
-_player_cmd_double_int_process(Emotion_Generic_Video *ev)
-{
- int param;
-
- if (ev->cmd.num_params == 0)
- {
- ev->cmd.num_params = 2;
- ev->cmd.cur_param = 0;
- ev->cmd.param.size.width = 0;
- ev->cmd.param.size.height = 0;
- }
-
- if (!_player_cmd_param_read(ev, &param, sizeof(param)))
- return;
-
- if (ev->cmd.cur_param == 0)
- ev->cmd.param.size.width = param;
- else
- ev->cmd.param.size.height = param;
-
- ev->cmd.cur_param++;
- if (ev->cmd.cur_param == ev->cmd.num_params)
- _player_cmd_process(ev);
-}
-
-static void
-_player_cmd_track_info(Emotion_Generic_Video *ev)
-{
- int param;
- int i;
-
- if (ev->cmd.num_params == 0)
- {
- ev->cmd.cur_param = 0;
- ev->cmd.num_params = 2;
- ev->cmd.param.track.channels = NULL;
- ev->cmd.s_len = -1;
- }
-
- while (ev->cmd.cur_param < 2)
- {
- if (!_player_cmd_param_read(ev, &param, sizeof(param)))
- return;
-
- if (ev->cmd.cur_param == 0)
- ev->cmd.param.track.current = param;
- else
- {
- ev->cmd.param.track.total = param;
- ev->cmd.num_params += param * 2;
- ev->cmd.param.track.channels =
- calloc(param, sizeof(*ev->cmd.param.track.channels));
- }
- ev->cmd.cur_param++;
- }
-
- if (ev->cmd.cur_param == ev->cmd.num_params)
- {
- _player_cmd_process(ev);
- return;
- }
-
- i = (ev->cmd.cur_param - 2) / 2;
- if ((ev->cmd.cur_param % 2) == 0) // reading track id
- {
- if (!_player_cmd_param_read(ev, &param, sizeof(param)))
- return;
- ev->cmd.param.track.channels[i].id = param;
- ev->cmd.cur_param++;
- }
- else // reading track name
- {
- char buf[PATH_MAX];
-
- if (ev->cmd.s_len == -1)
- {
- if (!_player_cmd_param_read(ev, &param, sizeof(param)))
- return;
- ev->cmd.s_len = param;
- }
-
- if (!_player_cmd_param_read(ev, buf, ev->cmd.s_len))
- return;
- ev->cmd.param.track.channels[i].name =
- eina_stringshare_add_length(buf, ev->cmd.s_len);
- ev->cmd.cur_param++;
- ev->cmd.s_len = -1;
- }
-
- if (ev->cmd.cur_param == ev->cmd.num_params)
- _player_cmd_process(ev);
-}
-
-static void
-_player_cmd_meta_info(Emotion_Generic_Video *ev)
-{
- int param;
- const char *info;
- char buf[PATH_MAX];
-
- if (ev->cmd.num_params == 0)
- {
- ev->cmd.cur_param = 0;
- ev->cmd.num_params = 8;
- ev->cmd.param.meta.title = NULL;
- ev->cmd.param.meta.artist = NULL;
- ev->cmd.param.meta.album = NULL;
- ev->cmd.param.meta.year = NULL;
- ev->cmd.param.meta.genre = NULL;
- ev->cmd.param.meta.comment = NULL;
- ev->cmd.param.meta.disc_id = NULL;
- ev->cmd.param.meta.count = NULL;
- ev->cmd.s_len = -1;
- }
-
- if (ev->cmd.s_len == -1)
- {
- if (!_player_cmd_param_read(ev, &param, sizeof(param)))
- return;
- ev->cmd.s_len = param;
- }
-
- if (!_player_cmd_param_read(ev, buf, ev->cmd.s_len))
- return;
-
- info = eina_stringshare_add_length(buf, ev->cmd.s_len);
- ev->cmd.s_len = -1;
-
- if (ev->cmd.cur_param == 0)
- ev->cmd.param.meta.title = info;
- else if (ev->cmd.cur_param == 1)
- ev->cmd.param.meta.artist = info;
- else if (ev->cmd.cur_param == 2)
- ev->cmd.param.meta.album = info;
- else if (ev->cmd.cur_param == 3)
- ev->cmd.param.meta.year = info;
- else if (ev->cmd.cur_param == 4)
- ev->cmd.param.meta.genre = info;
- else if (ev->cmd.cur_param == 5)
- ev->cmd.param.meta.comment = info;
- else if (ev->cmd.cur_param == 6)
- ev->cmd.param.meta.disc_id = info;
- else if (ev->cmd.cur_param == 7)
- ev->cmd.param.meta.count = info;
-
- ev->cmd.cur_param++;
-
- if (ev->cmd.cur_param == 8)
- _player_cmd_process(ev);
-}
-
-static void
-_player_cmd_read(Emotion_Generic_Video *ev)
-{
- if (ev->cmd.type < 0)
- {
- if (!_player_cmd_param_read(ev, &ev->cmd.type, sizeof(ev->cmd.type)))
- return;
- ev->cmd.num_params = 0;
- }
-
- switch (ev->cmd.type) {
- case EM_RESULT_INIT:
- case EM_RESULT_FILE_SET:
- case EM_RESULT_PLAYBACK_STARTED:
- case EM_RESULT_PLAYBACK_STOPPED:
- case EM_RESULT_FILE_CLOSE:
- case EM_RESULT_FRAME_NEW:
- _player_cmd_process(ev);
- break;
- case EM_RESULT_FILE_SET_DONE:
- case EM_RESULT_SEEKABLE_CHANGED:
- _player_cmd_single_int_process(ev);
- break;
- case EM_RESULT_LENGTH_CHANGED:
- case EM_RESULT_POSITION_CHANGED:
- _player_cmd_single_float_process(ev);
- break;
- case EM_RESULT_FRAME_SIZE:
- _player_cmd_double_int_process(ev);
- break;
- case EM_RESULT_AUDIO_TRACK_INFO:
- case EM_RESULT_VIDEO_TRACK_INFO:
- case EM_RESULT_SPU_TRACK_INFO:
- _player_cmd_track_info(ev);
- break;
- case EM_RESULT_META_INFO:
- _player_cmd_meta_info(ev);
- break;
-
- default:
- WRN("received wrong command: %d", ev->cmd.type);
- ev->cmd.type = -1;
- }
-}
-
-static void
-_player_cmd_handler_cb(void *data, void *buffer, unsigned int nbyte)
-{
- Emotion_Generic_Video *ev = data;
-
- ev->buffer = buffer;
- ev->length = nbyte;
- ev->offset = 0;
-
- _player_cmd_read(ev);
-
- ev->buffer = NULL;
- ev->length = 0;
-}
-
-static Eina_Bool
-_player_data_cb(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Exe_Event_Data *ev = event;
- Emotion_Generic_Video *evideo = data;
- int i;
-
- if (ev->exe != evideo->player.exe)
- {
- INF("slave != ev->exe");
- return ECORE_CALLBACK_PASS_ON;
- }
-
- for (i = 0; ev->lines[i].line; i++)
- INF("received input from player: \"%s\"", ev->lines[i].line);
-
- return ECORE_CALLBACK_DONE;
-}
-
-static Eina_Bool
-_player_add_cb(void *data, int type EINA_UNUSED, void *event)
-{
- Ecore_Exe_Event_Add *event_add = event;
- Ecore_Exe *player = event_add->exe;
- Emotion_Generic_Video *ev = data;
-
- if (ev->player.exe != player)
- {
- INF("ev->player != player.");
- return ECORE_CALLBACK_PASS_ON;
- }
-
- _player_send_cmd(ev, EM_CMD_INIT);
- _player_send_str(ev, ev->shmname, EINA_TRUE);
-
- return ECORE_CALLBACK_DONE;
-}
-
-static Eina_Bool
-_player_del_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
-{
- Ecore_Exe_Event_Del *event_del = event;
- Ecore_Exe *player = event_del->exe;
- Emotion_Generic_Video *ev = data;
-
- if (ev->player.exe != player)
- {
- INF("ev->player != player.");
- return ECORE_CALLBACK_PASS_ON;
- }
-
- ERR("player died.");
-
- ev->player.exe = NULL;
- ev->ready = EINA_FALSE;
- ev->file_ready = EINA_FALSE;
- ecore_pipe_del(ev->fd_read);
- ecore_pipe_del(ev->fd_write);
- ev->fd_read = NULL;
- ev->fd_write = NULL;
- _emotion_decode_stop(ev->obj);
-
- return ECORE_CALLBACK_DONE;
-}
-
-static void
-_player_dummy(void *data EINA_UNUSED,
- void *buffer EINA_UNUSED,
- unsigned int nbyte EINA_UNUSED)
-{
-}
-
-static Eina_Bool
-_player_exec(Emotion_Generic_Video *ev)
-{
- Ecore_Pipe *in;
- Ecore_Pipe *out;
- char buf[PATH_MAX];
-
- out = ecore_pipe_full_add(_player_dummy, NULL, -1, -1, EINA_TRUE, EINA_FALSE);
- if (!out)
- {
- ERR("could not create pipe for communication emotion -> player: %s", strerror(errno));
- return EINA_FALSE;
- }
-
- in = ecore_pipe_full_add(_player_cmd_handler_cb, ev, -1, -1, EINA_FALSE, EINA_TRUE);
- if (!in)
- {
- ERR("could not create pipe for communication player -> emotion: %s", strerror(errno));
- ecore_pipe_del(in);
- ecore_pipe_del(out);
- return EINA_FALSE;
- }
-
- snprintf(buf, sizeof(buf), "%s %d %d", ev->engine->path,
- ecore_pipe_read_fd(out),
- ecore_pipe_write_fd(in));
-
- ev->player.exe = ecore_exe_pipe_run(
- buf, ECORE_EXE_NOT_LEADER | ECORE_EXE_TERM_WITH_PARENT, ev);
-
- INF("created pipe emotion -> player: %d -> %d",
- ecore_pipe_write_fd(out), ecore_pipe_read_fd(out));
- INF("created pipe player -> emotion: %d -> %d",
- ecore_pipe_write_fd(in), ecore_pipe_read_fd(in));
-
- ecore_pipe_write_close(in);
- ecore_pipe_read_close(out);
-
- if (!ev->player.exe)
- {
- ecore_pipe_del(in);
- ecore_pipe_del(out);
- return EINA_FALSE;
- }
-
- ev->fd_read = in;
- ev->fd_write = out;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_fork_and_exec(Emotion_Generic_Video *ev)
-{
- char shmname[256];
-
- snprintf(shmname, sizeof(shmname), "/em-generic-shm_%d_%p_%f",
- getpid(), ev->obj, ecore_time_get());
-
- ev->shmname = eina_stringshare_add(shmname);
-
- ev->player_add = ecore_event_handler_add(ECORE_EXE_EVENT_ADD,
- _player_add_cb, ev);
- ev->player_del = ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
- _player_del_cb, ev);
- ev->player_data = ecore_event_handler_add(ECORE_EXE_EVENT_DATA,
- _player_data_cb, ev);
-
- if (!_player_exec(ev))
- {
- eina_stringshare_del(ev->shmname);
- ecore_event_handler_del(ev->player_add);
- ecore_event_handler_del(ev->player_del);
- ecore_event_handler_del(ev->player_data);
- ERR("could not start player.");
- return EINA_FALSE;
- }
-
- ev->initializing = EINA_TRUE;
-
- return EINA_TRUE;
-}
-
-typedef struct _Delay_Munmap Delay_Munmap;
-struct _Delay_Munmap
-{
- void *map;
- size_t size;
-};
-
-static void
-_delayed_munmap(void *data, Evas *e, void *event_info EINA_UNUSED)
-{
- Delay_Munmap *dm = data;
-
- evas_event_callback_del_full(e, EVAS_CALLBACK_RENDER_POST, _delayed_munmap, data);
- fprintf(stderr, "munmapping !\n");
- munmap(dm->map, dm->size);
- free(dm);
-}
-
-static void
-_delayed_next_frame(void *data, Evas *e, void *event_info EINA_UNUSED)
-{
- evas_event_callback_add(e, EVAS_CALLBACK_RENDER_POST, _delayed_munmap, data);
- evas_event_callback_del_full(e, EVAS_CALLBACK_RENDER_PRE, _delayed_next_frame, data);
-}
-
-static void
-em_partial_shutdown(Emotion_Generic_Video *ev)
-{
- if (ev->player.exe)
- {
- ecore_exe_terminate(ev->player.exe);
- ecore_exe_free(ev->player.exe);
- ev->player.exe = NULL;
- }
-
- ev->file_ready = EINA_FALSE;
-
- if (ev->shared)
- {
- Evas_Object *o;
- Delay_Munmap *dm;
-
- dm = malloc(sizeof (Delay_Munmap));
- if (dm)
- {
- dm->map = ev->shared;
- dm->size = ev->shared->size;
- evas_event_callback_add(evas_object_evas_get(ev->obj),
- EVAS_CALLBACK_RENDER_PRE,
- _delayed_next_frame, dm);
- }
-
- o = emotion_object_image_get(ev->obj);
- evas_object_image_data_set(o, NULL);
- evas_object_image_size_set(o, 1, 1);
- }
- ev->shared = NULL;
-
- _emotion_image_reset(ev->obj);
-
- if (ev->fd_read)
- ecore_pipe_del(ev->fd_read);
- ev->fd_read = NULL;
- if (ev->fd_write)
- ecore_pipe_del(ev->fd_write);
- ev->fd_write = NULL;
-
- if (ev->player_add) ecore_event_handler_del(ev->player_add);
- ev->player_add = NULL;
- if (ev->player_data) ecore_event_handler_del(ev->player_data);
- ev->player_data = NULL;
- if (ev->player_del) ecore_event_handler_del(ev->player_del);
- ev->player_del = NULL;
-}
-
-
-/* Emotion interface */
-static void *
-em_add(const Emotion_Engine *api, Evas_Object *obj, const Emotion_Module_Options *opt EINA_UNUSED)
-{
- Emotion_Generic_Video *ev;
-
- ev = calloc(1, sizeof(*ev));
- EINA_SAFETY_ON_NULL_RETURN_VAL(ev, NULL);
-
- ev->fd_read = NULL;
- ev->fd_write = NULL;
- ev->speed = 1.0;
- ev->volume = 0.8;
- ev->audio_mute = EINA_FALSE;
- ev->cmd.type = -1;
-
- ev->obj = obj;
- ev->engine = (Emotion_Engine_Generic *)api;
-
- if (!_fork_and_exec(ev))
- {
- free(ev);
- return NULL;
- }
-
- return ev;
-}
-
-static void
-em_del(void *data)
-{
- Emotion_Generic_Video *ev = data;
-
- eina_stringshare_del(ev->shmname);
-
- em_partial_shutdown(ev);
-}
-
-static unsigned char
-em_file_open(void *data, const char *file)
-{
- Emotion_Generic_Video *ev = data;
- INF("file set: %s", file);
- if (!ev) return 0;
-
- eina_stringshare_replace(&ev->filename, file);
-
- ev->pos = 0;
- ev->w = 0;
- ev->h = 0;
- ev->ratio = 1;
- ev->len = 0;
-
- if (ev->ready && ev->opening)
- {
- INF("file changed while opening.");
- ev->file_changed = EINA_TRUE;
- return 1;
- }
-
- ev->opening = EINA_TRUE;
-
- if (!ev->closing)
- _file_open(ev);
-
- return 1;
-}
-
-static void
-em_file_close(void *data)
-{
- Emotion_Generic_Video *ev = data;
-
- if (!ev || !ev->filename) return;
-
- INF("file close: %s", ev->filename);
-
- eina_stringshare_replace(&ev->filename, NULL);
- eina_stringshare_replace(&ev->subtitle_path, NULL);
-
- ev->file_ready = EINA_FALSE;
- _audio_channels_free(ev);
- _video_channels_free(ev);
- _spu_channels_free(ev);
- _player_meta_info_free(ev);
-
- if (ev->opening)
- return;
-
- _player_send_cmd(ev, EM_CMD_FILE_CLOSE);
- ev->closing = EINA_TRUE;
-}
-
-static Emotion_Format
-em_format_get(void *ef EINA_UNUSED)
-{
- return EMOTION_FORMAT_BGRA;
-}
-
-static void
-em_video_data_size_get(void *data, int *w, int *h)
-{
- Emotion_Generic_Video *ev = data;
-
- if (!ev) return;
- if (w) *w = ev->w;
- if (h) *h = ev->h;
-}
-
-static void
-em_play(void *data, double pos)
-{
- Emotion_Generic_Video *ev = data;
-
- if (!ev)
- return;
-
- ev->play = EINA_TRUE;
- INF("play: %0.3f", pos);
-
- if (ev->initializing || ev->opening)
- return;
-
- if (ev->ready)
- {
- if (ev->subtitle_path)
- {
- _player_send_cmd(ev, EM_CMD_SUBTITLE_SET);
- _player_send_str(ev, ev->subtitle_path, EINA_TRUE);
- }
-
- _player_send_cmd(ev, EM_CMD_PLAY);
- _player_send_float(ev, ev->pos);
-
- return;
- }
-
- if (!_player_exec(ev))
- ERR("could not start player.");
-}
-
-static void
-em_stop(void *data)
-{
- Emotion_Generic_Video *ev = data;
-
- if (!ev)
- return;
-
- ev->play = EINA_FALSE;
-
- if (!ev->file_ready)
- return;
-
- _player_send_cmd(ev, EM_CMD_STOP);
- _emotion_decode_stop(ev->obj);
-}
-
-static void
-em_size_get(void *data, int *w, int *h)
-{
- Emotion_Generic_Video *ev = data;
- if (w) *w = ev->w;
- if (h) *h = ev->h;
-}
-
-static void
-em_pos_set(void *data, double pos)
-{
- Emotion_Generic_Video *ev = data;
- float position = pos;
-
- if (!ev->file_ready)
- return;
-
- _player_send_cmd(ev, EM_CMD_POSITION_SET);
- _player_send_float(ev, position);
- _emotion_seek_done(ev->obj);
-}
-
-static double
-em_len_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->len;
-}
-
-static double
-em_buffer_size_get(void *data EINA_UNUSED)
-{
- return 1.0;
-}
-
-static int
-em_fps_num_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return (int)(ev->fps * 1000.0);
-}
-
-static int
-em_fps_den_get(void *ef EINA_UNUSED)
-{
- return 1000;
-}
-
-static double
-em_fps_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->fps;
-}
-
-static double
-em_pos_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->pos;
-}
-
-static void
-em_vis_set(void *ef EINA_UNUSED, Emotion_Vis vis EINA_UNUSED)
-{
-}
-
-static Emotion_Vis
-em_vis_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->vis;
-}
-
-static Eina_Bool
-em_vis_supported(void *ef EINA_UNUSED, Emotion_Vis vis EINA_UNUSED)
-{
- return EINA_FALSE;
-}
-
-static double
-em_ratio_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->ratio;
-}
-
-static int
-em_video_handled(void *ef EINA_UNUSED)
-{
- DBG("video handled!");
- return 1;
-}
-
-static int
-em_audio_handled(void *ef EINA_UNUSED)
-{
- DBG("audio handled!");
- return 1;
-}
-
-static int
-em_seekable(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->seekable;
-}
-
-static void
-em_frame_done(void *ef EINA_UNUSED)
-{
-}
-
-static int
-em_yuv_rows_get(void *data EINA_UNUSED, int w EINA_UNUSED, int h EINA_UNUSED, unsigned char **yrows EINA_UNUSED, unsigned char **urows EINA_UNUSED, unsigned char **vrows EINA_UNUSED)
-{
- return 0;
-}
-
-static int
-em_bgra_data_get(void *data, unsigned char **bgra_data)
-{
- Emotion_Generic_Video *ev = data;
-
- if (!ev || !ev->file_ready)
- return 0;
-
- // lock frame here
- if (!eina_semaphore_lock(&ev->shared->lock))
- return 0;
-
- // send current frame to emotion
- if (ev->shared->frame.emotion != ev->shared->frame.last)
- {
- ev->shared->frame.next = ev->shared->frame.emotion;
- ev->shared->frame.emotion = ev->shared->frame.last;
- }
- *bgra_data = ev->frame.frames[ev->shared->frame.emotion];
-
- if (ev->shared->frame_drop > 1)
- WRN("dropped frames: %d", ev->shared->frame_drop - 1);
- ev->shared->frame_drop = 0;
-
- // unlock frame here
- eina_semaphore_release(&ev->shared->lock, 1);
- ev->drop = 0;
-
- return 1;
-}
-
-static void
-em_event_feed(void *ef EINA_UNUSED, int event EINA_UNUSED)
-{
-}
-
-static void
-em_event_mouse_button_feed(void *ef EINA_UNUSED, int button EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED)
-{
-}
-
-static void
-em_event_mouse_move_feed(void *ef EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED)
-{
-}
-
-static int
-em_video_channel_count(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->video_channels_count;
-}
-
-static void
-em_video_channel_set(void *data, int channel)
-{
- Emotion_Generic_Video *ev = data;
-
- if (channel < 0 || channel >= ev->video_channels_count)
- {
- WRN("video channel out of range.");
- return;
- }
-
- _player_send_cmd(ev, EM_CMD_VIDEO_TRACK_SET);
- _player_send_int(ev, ev->video_channels[channel].id);
- ev->video_channel_current = channel;
-}
-
-static int
-em_video_channel_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->video_channel_current;
-}
-
-static void
-em_video_subtitle_file_set(void *data, const char *filepath)
-{
- Emotion_Generic_Video *ev = data;
- eina_stringshare_replace(&ev->subtitle_path, filepath);
-}
-
-static const char *
-em_video_subtitle_file_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->subtitle_path;
-}
-
-static const char *
-em_video_channel_name_get(void *data, int channel)
-{
- Emotion_Generic_Video *ev = data;
-
- if (channel < 0 || channel >= ev->video_channels_count)
- {
- WRN("video channel out of range.");
- return NULL;
- }
-
- return ev->video_channels[channel].name;
-}
-
-static void
-em_video_channel_mute_set(void *data, int mute)
-{
- Emotion_Generic_Video *ev = data;
-
- ev->video_mute = !!mute;
-
- if (!ev->file_ready)
- return;
-
- _player_send_cmd(ev, EM_CMD_VIDEO_MUTE_SET);
- _player_send_int(ev, mute);
-}
-
-static int
-em_video_channel_mute_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->video_mute;
-}
-
-static int
-em_audio_channel_count(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->audio_channels_count;
-}
-
-static void
-em_audio_channel_set(void *data, int channel)
-{
- Emotion_Generic_Video *ev = data;
-
- if (channel < 0 || channel >= ev->audio_channels_count)
- {
- WRN("audio channel out of range.");
- return;
- }
-
- _player_send_cmd(ev, EM_CMD_AUDIO_TRACK_SET);
- _player_send_int(ev, ev->audio_channels[channel].id);
- ev->audio_channel_current = channel;
-}
-
-static int
-em_audio_channel_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->audio_channel_current;
-}
-
-static const char *
-em_audio_channel_name_get(void *data, int channel)
-{
- Emotion_Generic_Video *ev = data;
-
- if (channel < 0 || channel >= ev->audio_channels_count)
- {
- WRN("audio channel out of range.");
- return NULL;
- }
-
- return ev->audio_channels[channel].name;
-}
-
-static void
-em_audio_channel_mute_set(void *data, int mute)
-{
- Emotion_Generic_Video *ev = data;
-
- ev->audio_mute = !!mute;
-
- if (!ev->file_ready)
- return;
-
- _player_send_cmd(ev, EM_CMD_AUDIO_MUTE_SET);
- _player_send_int(ev, mute);
-}
-
-static int
-em_audio_channel_mute_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->audio_mute;
-}
-
-static void
-em_audio_channel_volume_set(void *data, double vol)
-{
- Emotion_Generic_Video *ev = data;
-
- if (vol > 1.0) vol = 1.0;
- if (vol < 0.0) vol = 0.0;
-
- ev->volume = vol;
-
- if (!ev->file_ready)
- return;
-
- _player_send_cmd(ev, EM_CMD_VOLUME_SET);
- _player_send_float(ev, ev->volume);
-}
-
-static double
-em_audio_channel_volume_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->volume;
-}
-
-static int
-em_spu_channel_count(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->spu_channels_count;
-}
-
-static void
-em_spu_channel_set(void *data, int channel)
-{
- Emotion_Generic_Video *ev = data;
-
- if (channel < 0 || channel >= ev->spu_channels_count)
- {
- WRN("spu channel out of range.");
- return;
- }
-
- _player_send_cmd(ev, EM_CMD_SPU_TRACK_SET);
- _player_send_int(ev, ev->spu_channels[channel].id);
- ev->spu_channel_current = channel;
-}
-
-static int
-em_spu_channel_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->spu_channel_current;
-}
-
-static const char *
-em_spu_channel_name_get(void *data, int channel)
-{
- Emotion_Generic_Video *ev = data;
-
- if (channel < 0 || channel >= ev->spu_channels_count)
- {
- WRN("spu channel out of range.");
- return NULL;
- }
-
- return ev->spu_channels[channel].name;
-}
-
-static void
-em_spu_channel_mute_set(void *data, int mute)
-{
- Emotion_Generic_Video *ev = data;
-
- ev->spu_mute = !!mute;
-
- if (!ev->file_ready)
- return;
-
- _player_send_cmd(ev, EM_CMD_SPU_MUTE_SET);
- _player_send_int(ev, mute);
-}
-
-static int
-em_spu_channel_mute_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return ev->spu_mute;
-}
-
-static int
-em_chapter_count(void *ef EINA_UNUSED)
-{
- int num = 0;
- return num;
-}
-
-static void
-em_chapter_set(void *ef EINA_UNUSED, int chapter EINA_UNUSED)
-{
-}
-
-static int
-em_chapter_get(void *ef EINA_UNUSED)
-{
- int num = 0;
- return num;
-}
-
-static const char *
-em_chapter_name_get(void *ef EINA_UNUSED, int chapter EINA_UNUSED)
-{
- return NULL;
-}
-
-static void
-em_speed_set(void *data, double speed)
-{
- Emotion_Generic_Video *ev = data;
- float rate = speed;
- ev->speed = rate;
-
- if (!ev->file_ready)
- return;
-
- _player_send_cmd(ev, EM_CMD_SPEED_SET);
- _player_send_float(ev, rate);
-}
-
-static double
-em_speed_get(void *data)
-{
- Emotion_Generic_Video *ev = data;
- return (double)ev->speed;
-}
-
-static int
-em_eject(void *ef EINA_UNUSED)
-{
- return 1;
-}
-
-static const char *
-em_meta_get(void *data, int meta)
-{
- Emotion_Generic_Video *ev = data;
-
- switch (meta)
- {
- case EMOTION_META_INFO_TRACK_TITLE:
- return ev->meta.title;
- case EMOTION_META_INFO_TRACK_ARTIST:
- return ev->meta.artist;
- case EMOTION_META_INFO_TRACK_ALBUM:
- return ev->meta.album;
- case EMOTION_META_INFO_TRACK_YEAR:
- return ev->meta.year;
- case EMOTION_META_INFO_TRACK_GENRE:
- return ev->meta.genre;
- case EMOTION_META_INFO_TRACK_COMMENT:
- return ev->meta.comment;
- case EMOTION_META_INFO_TRACK_DISC_ID:
- return ev->meta.disc_id;
- case EMOTION_META_INFO_TRACK_COUNT:
- return ev->meta.count;
- }
-
- return NULL;
-}
-
-
-/* Players/modules */
-static const Emotion_Engine em_template_engine =
-{
- EMOTION_ENGINE_API_VERSION,
- EMOTION_ENGINE_PRIORITY_DEFAULT,
- "generic",
- em_add, /* add */
- em_del, /* del */
- em_file_open, /* file_open */
- em_file_close, /* file_close */
- em_play, /* play */
- em_stop, /* stop */
- em_size_get, /* size_get */
- em_pos_set, /* pos_set */
- em_len_get, /* len_get */
- em_buffer_size_get, /* buffer_size_get */
- em_fps_num_get, /* fps_num_get */
- em_fps_den_get, /* fps_den_get */
- em_fps_get, /* fps_get */
- em_pos_get, /* pos_get */
- em_vis_set, /* vis_set */
- em_vis_get, /* vis_get */
- em_vis_supported, /* vis_supported */
- em_ratio_get, /* ratio_get */
- em_video_handled, /* video_handled */
- em_audio_handled, /* audio_handled */
- em_seekable, /* seekable */
- em_frame_done, /* frame_done */
- em_format_get, /* format_get */
- em_video_data_size_get, /* video_data_size_get */
- em_yuv_rows_get, /* yuv_rows_get */
- em_bgra_data_get, /* bgra_data_get */
- em_event_feed, /* event_feed */
- em_event_mouse_button_feed, /* event_mouse_button_feed */
- em_event_mouse_move_feed, /* event_mouse_move_feed */
- em_video_channel_count, /* video_channel_count */
- em_video_channel_set, /* video_channel_set */
- em_video_channel_get, /* video_channel_get */
- em_video_subtitle_file_set, /* video_subtitle_file_set */
- em_video_subtitle_file_get, /* video_subtitle_file_get */
- em_video_channel_name_get, /* video_channel_name_get */
- em_video_channel_mute_set, /* video_channel_mute_set */
- em_video_channel_mute_get, /* video_channel_mute_get */
- em_audio_channel_count, /* audio_channel_count */
- em_audio_channel_set, /* audio_channel_set */
- em_audio_channel_get, /* audio_channel_get */
- em_audio_channel_name_get, /* audio_channel_name_get */
- em_audio_channel_mute_set, /* audio_channel_mute_set */
- em_audio_channel_mute_get, /* audio_channel_mute_get */
- em_audio_channel_volume_set, /* audio_channel_volume_set */
- em_audio_channel_volume_get, /* audio_channel_volume_get */
- em_spu_channel_count, /* spu_channel_count */
- em_spu_channel_set, /* spu_channel_set */
- em_spu_channel_get, /* spu_channel_get */
- em_spu_channel_name_get, /* spu_channel_name_get */
- em_spu_channel_mute_set, /* spu_channel_mute_set */
- em_spu_channel_mute_get, /* spu_channel_mute_get */
- em_chapter_count, /* chapter_count */
- em_chapter_set, /* chapter_set */
- em_chapter_get, /* chapter_get */
- em_chapter_name_get, /* chapter_name_get */
- em_speed_set, /* speed_set */
- em_speed_get, /* speed_get */
- em_eject, /* eject */
- em_meta_get, /* meta_get */
- NULL, /* priority_set */
- NULL, /* priority_get */
- NULL /* em_meta_artwork_get */
-};
-
-static void
-_player_entry_add(const Eina_File_Direct_Info *info)
-{
- Emotion_Engine_Generic *eg;
- const char *name;
- char *endptr;
- int priority;
-
- name = info->path + info->name_start;
-
- priority = strtol(name, &endptr, 10);
- if (endptr == name)
- priority = EMOTION_ENGINE_PRIORITY_DEFAULT;
- else
- {
- if ((*endptr == '-') || (*endptr == '_'))
- endptr++;
- name = endptr;
- }
-
- if (*name == '\0')
- {
- ERR("Invalid generic player: %s", info->path);
- return;
- }
-
- eg = malloc(sizeof(Emotion_Engine_Generic));
- EINA_SAFETY_ON_NULL_RETURN(eg);
-
- /* inherit template */
- memcpy(&(eg->engine), &em_template_engine, sizeof(em_template_engine));
-
- eg->path = strdup(info->path);
- EINA_SAFETY_ON_NULL_GOTO(eg->path, error_path);
-
- eg->engine.name = strdup(name);
- EINA_SAFETY_ON_NULL_GOTO(eg->engine.name, error_name);
-
- eg->engine.priority = priority;
-
- DBG("Add player name=%s, priority=%d, path=%s",
- eg->engine.name, eg->engine.priority, eg->path);
- _generic_players = eina_list_append(_generic_players, eg);
-
- return;
-
- error_name:
- free(eg->path);
- error_path:
- free(eg);
-}
-
-static void
-_player_entry_free(Emotion_Engine_Generic *eg)
-{
- free(eg->path);
- free((void *)eg->engine.name);
- free(eg);
-}
-
-static void
-_players_all_from(const char *path)
-{
- const Eina_File_Direct_Info *info;
- int count = 0;
- Eina_Iterator *itr = eina_file_direct_ls(path);
- if (!itr) goto end;
- EINA_ITERATOR_FOREACH(itr, info)
- {
- if (access(info->path, R_OK | X_OK) == 0)
- {
- _player_entry_add(info);
- count++;
- }
- }
- eina_iterator_free(itr);
-
- end:
- if (count == 0)
- DBG("No generic players at %s", path);
-}
-
-static void
-_players_load(void)
-{
- char buf[PATH_MAX];
-
- eina_str_join(buf, sizeof(buf), '/',
- eina_prefix_lib_get(pfx),
- "emotion/generic_players/" MODULE_ARCH);
- _players_all_from(buf);
-
- if (!_generic_players)
- {
- WRN("no generic players available");
- }
- else
- {
- const Eina_List *n;
- const Emotion_Engine_Generic *eg;
- INF("Found %d generic players", eina_list_count(_generic_players));
- EINA_LIST_FOREACH(_generic_players, n, eg)
- _emotion_module_register(&(eg->engine));
- }
-}
-
-Eina_Bool
-generic_module_init(void)
-{
- if (_emotion_init_count > 0)
- {
- _emotion_init_count++;
- return EINA_TRUE;
- }
-
- _emotion_generic_log_domain = eina_log_domain_register("emotion_generic",
- EINA_COLOR_LIGHTCYAN);
- if (_emotion_generic_log_domain < 0)
- {
- EINA_LOG_CRIT("Could not register log domain 'emotion_generic'");
- return EINA_FALSE;
- }
-
- pfx = eina_prefix_new(NULL, emotion_init,
- "EMOTION", "emotion", "checkme",
- PACKAGE_BIN_DIR, PACKAGE_LIB_DIR,
- PACKAGE_DATA_DIR, PACKAGE_DATA_DIR);
- if (!pfx)
- {
- CRI("Could not get prefix for emotion");
- eina_log_domain_unregister(_emotion_generic_log_domain);
- _emotion_generic_log_domain = -1;
- return EINA_FALSE;
- }
-
- _players_load();
-
- _emotion_init_count = 1;
- return EINA_TRUE;
-}
-
-void
-generic_module_shutdown(void)
-{
- Emotion_Engine_Generic *eg;
-
- if (_emotion_init_count > 1)
- {
- _emotion_init_count--;
- return;
- }
- else if (_emotion_init_count == 0)
- {
- EINA_LOG_ERR("too many generic_module_shutdown()");
- return;
- }
- _emotion_init_count = 0;
-
- EINA_LIST_FREE(_generic_players, eg)
- {
- _emotion_module_unregister(&(eg->engine));
- _player_entry_free(eg);
- }
-
- eina_log_domain_unregister(_emotion_generic_log_domain);
- _emotion_generic_log_domain = -1;
-
- eina_prefix_free(pfx);
- pfx = NULL;
-}
-
-#ifndef EMOTION_STATIC_BUILD_GENERIC
-
-EINA_MODULE_INIT(generic_module_init);
-EINA_MODULE_SHUTDOWN(generic_module_shutdown);
-
-#endif
diff --git a/src/modules/emotion/generic/emotion_generic.h b/src/modules/emotion/generic/emotion_generic.h
deleted file mode 100644
index 2830d33d4a..0000000000
--- a/src/modules/emotion/generic/emotion_generic.h
+++ /dev/null
@@ -1,123 +0,0 @@
-#ifndef EMOTION_GENERIC_H
-#define EMOTION_GENERIC_H
-
-#include <sys/types.h>
-
-#include "Emotion_Generic_Plugin.h"
-
-/* default values */
-
-typedef struct _Emotion_Generic_Video Emotion_Generic_Video;
-typedef struct _Emotion_Generic_Player Emotion_Generic_Player;
-typedef struct _Emotion_Generic_Cmd_Buffer Emotion_Generic_Cmd_Buffer;
-typedef struct _Emotion_Generic_Channel Emotion_Generic_Channel;
-typedef struct _Emotion_Generic_Meta Emotion_Generic_Meta;
-
-struct _Emotion_Generic_Player
-{
- Ecore_Exe *exe;
-};
-
-struct _Emotion_Generic_Channel
-{
- int id;
- const char *name;
-};
-
-struct _Emotion_Generic_Meta
-{
- const char *title;
- const char *artist;
- const char *album;
- const char *year;
- const char *genre;
- const char *comment;
- const char *disc_id;
- const char *count;
-};
-
-struct _Emotion_Generic_Cmd_Buffer
-{
- char *tmp;
- int type;
- ssize_t i, total;
- int s_len;
- int num_params, cur_param;
- int padding;
- union {
- struct {
- int width;
- int height;
- } size;
- int i_num;
- float f_num;
- struct {
- int total;
- int current;
- Emotion_Generic_Channel *channels;
- } track;
- Emotion_Generic_Meta meta;
- } param;
-};
-
-typedef struct _Emotion_Engine_Generic
-{
- Emotion_Engine engine;
- char *path;
-} Emotion_Engine_Generic;
-
-/* emotion/generic main structure */
-struct _Emotion_Generic_Video
-{
- const Emotion_Engine_Generic *engine;
- const char *shmname;
-
- Emotion_Generic_Player player;
- Emotion_Generic_Cmd_Buffer cmd;
- Ecore_Event_Handler *player_add, *player_del, *player_data;
- int drop;
- Ecore_Pipe *fd_read;
- Ecore_Pipe *fd_write;
- const unsigned char *buffer;
- ssize_t length;
- ssize_t offset;
-
- const char *filename;
- volatile double len;
- volatile double pos;
- double fps;
- double ratio;
- int w, h;
- Evas_Object *obj;
- Emotion_Generic_Video_Shared *shared;
- Emotion_Generic_Video_Frame frame;
- volatile int fq;
- float volume;
- float speed;
- Emotion_Vis vis;
- Eina_Bool initializing : 1;
- Eina_Bool ready : 1;
- Eina_Bool play : 1;
- Eina_Bool video_mute : 1;
- Eina_Bool audio_mute : 1;
- Eina_Bool spu_mute : 1;
- Eina_Bool seekable : 1;
- volatile Eina_Bool opening : 1;
- volatile Eina_Bool closing : 1;
- Eina_Bool file_changed : 1;
- Eina_Bool file_ready : 1;
- int audio_channels_count;
- int audio_channel_current;
- Emotion_Generic_Channel *audio_channels;
- int video_channels_count;
- int video_channel_current;
- Emotion_Generic_Channel *video_channels;
- int spu_channels_count;
- int spu_channel_current;
- Emotion_Generic_Channel *spu_channels;
- Emotion_Generic_Meta meta;
- const char *subtitle_path;
-};
-
-#endif
-
diff --git a/src/modules/emotion/generic/meson.build b/src/modules/emotion/generic/meson.build
deleted file mode 100644
index 4f62c7a43e..0000000000
--- a/src/modules/emotion/generic/meson.build
+++ /dev/null
@@ -1,24 +0,0 @@
-generic_src = files([
- 'emotion_generic.c',
- 'emotion_generic.h',
-])
-
-emotion_generic = declare_dependency(
- include_directories: include_directories('.'),
- dependencies: emotion,
-)
-
-if sys_windows == false
- shared_module(emotion_loader,
- generic_src,
- include_directories : config_dir,
- dependencies: [eina, evas, emotion, generic_deps, rt],
- install: true,
- install_dir : mod_install_dir,
- c_args : package_c_args,
- )
-
- install_headers('Emotion_Generic_Plugin.h',
- install_dir : dir_package_include,
- )
-endif
diff --git a/src/modules/emotion/gstreamer1/emotion_sink.c b/src/modules/emotion/gstreamer1/emotion_sink.c
index 2bd91359ac..30f9afc4d5 100644
--- a/src/modules/emotion/gstreamer1/emotion_sink.c
+++ b/src/modules/emotion/gstreamer1/emotion_sink.c
@@ -6,7 +6,7 @@
static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE("sink",
GST_PAD_SINK, GST_PAD_ALWAYS,
- GST_STATIC_CAPS(GST_VIDEO_CAPS_MAKE("{ I420, YV12, YUY2, NV12, BGRx, BGR, BGRA }")));
+ GST_STATIC_CAPS(GST_VIDEO_CAPS_MAKE("{ I420, YV12, YUY2, NV12, BGRx, BGR, BGRA }")));
GST_DEBUG_CATEGORY_STATIC(emotion_video_sink_debug);
#define GST_CAT_DEFAULT emotion_video_sink_debug
diff --git a/src/modules/emotion/gstreamer1/meson.build b/src/modules/emotion/gstreamer1/meson.build
index aae7f5f8ea..5d09a46b90 100644
--- a/src/modules/emotion/gstreamer1/meson.build
+++ b/src/modules/emotion/gstreamer1/meson.build
@@ -22,4 +22,5 @@ shared_module(emotion_loader,
install: true,
install_dir : mod_install_dir,
c_args : package_c_args,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/emotion/libvlc/emotion_libvlc.c b/src/modules/emotion/libvlc/emotion_libvlc.c
deleted file mode 100644
index 1e8f9d69b4..0000000000
--- a/src/modules/emotion/libvlc/emotion_libvlc.c
+++ /dev/null
@@ -1,1555 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <assert.h>
-
-#include <Eina.h>
-#include <Evas.h>
-#include <Ecore.h>
-
-#include <vlc/vlc.h>
-#include <vlc/libvlc_media.h>
-#include <vlc/libvlc_media_player.h>
-
-#include "emotion_modules.h"
-
-#ifdef DBG
-#undef DBG
-#endif
-#define DBG(...) EINA_LOG_DOM_DBG(_emotion_libvlc_log_domain, __VA_ARGS__)
-
-#ifdef INF
-#undef INF
-#endif
-#define INF(...) EINA_LOG_DOM_INFO(_emotion_libvlc_log_domain, __VA_ARGS__)
-
-#ifdef WRN
-#undef WRN
-#endif
-#define WRN(...) EINA_LOG_DOM_WARN(_emotion_libvlc_log_domain, __VA_ARGS__)
-
-#ifdef ERR
-#undef ERR
-#endif
-#define ERR(...) EINA_LOG_DOM_ERR(_emotion_libvlc_log_domain, __VA_ARGS__)
-
-#ifdef CRI
-#undef CRI
-#endif
-#define CRI(...) EINA_LOG_DOM_CRIT(_emotion_libvlc_log_domain, __VA_ARGS__)
-
-static int _emotion_libvlc_log_domain = -1;
-static Eina_Bool debug_fps = EINA_FALSE;
-static libvlc_instance_t *libvlc = NULL;
-
-typedef struct _Emotion_LibVLC Emotion_LibVLC;
-
-static void em_file_close(void *);
-
-struct _Emotion_LibVLC
-{
- /* Evas object */
- Evas_Object *obj;
- Evas_Object *evas_obj;
- Emotion_Module_Options opt;
-
- /* libvlc */
- libvlc_media_t *m;
- libvlc_media_player_t *mp;
- unsigned int nb_tracks;
- libvlc_media_track_t **tracks;
- int nb_chapters;
- libvlc_chapter_description_t **chapters;
- char *subtitle_file;
- char *metas[META_TRACK_COUNT];
-
- /* options */
- int video_mute;
- int video_mute_force;
- int audio_mute;
- int spu_mute;
- int audio_vol;
- Emotion_Vis vis;
-
- /* There can be remaining mainloop callbacks that owns the Emotion_LibVLC
- * object when em_del is called. Use a ref_count to delete the ev object
- * when em_del is called and when all callbacks are processed. */
- unsigned int ref_count;
-
- /* locks */
- Eina_Lock lock;
- Eina_Condition wait;
- Eina_List *event_list;
-
- /* stats */
- double pos;
- double len;
- double buffer_cache;
- Eina_Bool seeking;
- Eina_Bool started;
- Eina_Bool invalidate_tracks;
-};
-
-struct close_data
-{
- libvlc_media_player_t *mp;
- Evas_Object *evas_obj;
-};
-
-static const libvlc_event_type_t mp_events[] = {
- //libvlc_MediaPlayerMediaChanged,
- //libvlc_MediaPlayerNothingSpecial,
- //libvlc_MediaPlayerOpening,
- libvlc_MediaPlayerBuffering,
- libvlc_MediaPlayerPlaying,
- //libvlc_MediaPlayerPaused,
- libvlc_MediaPlayerStopped,
- libvlc_MediaPlayerForward,
- //libvlc_MediaPlayerBackward,
- libvlc_MediaPlayerEndReached,
- libvlc_MediaPlayerEncounteredError,
- libvlc_MediaPlayerTimeChanged,
- //libvlc_MediaPlayerPositionChanged,
- //libvlc_MediaPlayerSeekableChanged,
- //libvlc_MediaPlayerPausableChanged,
- //libvlc_MediaPlayerTitleChanged,
- //libvlc_MediaPlayerSnapshotTaken,
- libvlc_MediaPlayerLengthChanged,
- //libvlc_MediaPlayerVout,
- //libvlc_MediaPlayerScrambledChanged,
- libvlc_MediaPlayerESAdded,
- libvlc_MediaPlayerESDeleted,
- //libvlc_MediaPlayerESSelected,
- //libvlc_MediaPlayerCorked,
- //libvlc_MediaPlayerUncorked,
- //libvlc_MediaPlayerMuted,
- //libvlc_MediaPlayerUnmuted,
- //libvlc_MediaPlayerAudioVolume,
- //libvlc_MediaPlayerAudioDevice,
- -1,
-};
-
-static void
-em_del_safe(Emotion_LibVLC *ev)
-{
- eina_lock_free(&ev->lock);
- eina_condition_free(&ev->wait);
- free(ev->subtitle_file);
- free(ev);
-}
-
-/* Take the ev->lock from a mainloop callback.
- * Returns false if the ev object is destroyed. */
-static Eina_Bool
-emotion_mainloop_lock(Emotion_LibVLC *ev)
-{
- eina_lock_take(&ev->lock);
- _emotion_pending_ecore_end();
- if (--ev->ref_count == 0)
- {
- eina_lock_release(&ev->lock);
- WRN("callbacks ended, deleting Emotion_LibVLC");
- em_del_safe(ev);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-/* Send a callback to the mainloop */
-static void
-emotion_mainloop_call_locked(Emotion_LibVLC *ev, Ecore_Cb callback)
-{
- ++ev->ref_count;
- _emotion_pending_ecore_begin();
- ecore_main_loop_thread_safe_call_async(callback, ev);
-}
-
-/* Process one libvlc event from the mainloop. */
-static void
-emotion_mainloop_event(Emotion_LibVLC *ev, const libvlc_event_t *event)
-{
- switch (event->type)
- {
- case libvlc_MediaPlayerBuffering:
- ev->buffer_cache = event->u.media_player_buffering.new_cache / 100.0;
- break;
-
- case libvlc_MediaPlayerPlaying:
- if (!ev->started)
- {
- _emotion_open_done(ev->obj);
- _emotion_playback_started(ev->obj);
- ev->started = EINA_TRUE;
- }
- break;
-
- case libvlc_MediaPlayerStopped:
- case libvlc_MediaPlayerEndReached:
- case libvlc_MediaPlayerEncounteredError:
- _emotion_decode_stop(ev->obj);
- _emotion_playback_finished(ev->obj);
- break;
-
- case libvlc_MediaPlayerTimeChanged:
- {
- if (ev->seeking)
- {
- _emotion_seek_done(ev->obj);
- ev->seeking = EINA_FALSE;
- }
-
- ev->pos = event->u.media_player_time_changed.new_time / 1000.0;
- if (ev->pos > 0 && ev->len > 0)
- _emotion_video_pos_update(ev->obj, ev->pos, ev->len);
- break;
- }
-
- case libvlc_MediaPlayerLengthChanged:
- ev->len = event->u.media_player_length_changed.new_length / 1000.0;
- if (ev->pos > 0 && ev->len > 0)
- _emotion_video_pos_update(ev->obj, ev->pos, ev->len);
- break;
-
- case libvlc_MediaPlayerESAdded:
- case libvlc_MediaPlayerESDeleted:
- ev->invalidate_tracks = EINA_TRUE;
- _emotion_channels_change(ev->obj);
- break;
- }
-}
-
-/* Mainloop callback, sent by libvlc_on_mp_event. It processes a list of libvlc
- * event. */
-static void
-emotion_mainloop_event_list(void *data)
-{
- Emotion_LibVLC *ev = data;
- Eina_List *event_list;
- libvlc_event_t *event;
-
- if (!emotion_mainloop_lock(ev)) return;
- event_list = ev->event_list;
- ev->event_list = NULL;
- eina_lock_release(&ev->lock);
-
- if (!event_list) return;
-
- EINA_LIST_FREE(event_list, event)
- {
- if (ev->mp)
- emotion_mainloop_event(ev, event);
- free(event);
- }
-}
-
-/* Libvlc callback, see libvlc_event_manager_t. */
-static void
-libvlc_on_mp_event(const libvlc_event_t *event, void *opaque)
-{
- Emotion_LibVLC *ev = opaque;
-
- if (eina_main_loop_is())
- {
- /* Process the event directly */
- emotion_mainloop_event(ev, event);
- }
- else
- {
- /* Add the event to a list of events that will be processed by the
- * mainloop */
-
- void *data = malloc(sizeof(libvlc_event_t));
- if (!data) return;
- memcpy(data, event, sizeof(libvlc_event_t));
-
- eina_lock_take(&ev->lock);
- if (!ev->event_list)
- emotion_mainloop_call_locked(ev, emotion_mainloop_event_list);
- ev->event_list = eina_list_append(ev->event_list, data);
- eina_lock_release(&ev->lock);
- }
-}
-
-static void
-evas_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
- void *event EINA_UNUSED)
-{
- Emotion_LibVLC *ev = data;
- int w, h;
-
- evas_object_image_size_get(ev->evas_obj, &w, &h);
- _emotion_frame_resize(ev->obj, w, h, w / (double) h);
- efl_event_callback_call(ev->obj, EFL_CANVAS_VIDEO_EVENT_FRAME_DECODE, NULL);
-}
-
-/* Fetch all libvlc tracks. */
-static int
-libvlc_fetch_tracks(Emotion_LibVLC *ev)
-{
- if (ev->invalidate_tracks)
- {
- if (ev->nb_tracks)
- libvlc_media_tracks_release(ev->tracks, ev->nb_tracks);
- ev->nb_tracks = libvlc_media_tracks_get(ev->m, &ev->tracks);
- ev->invalidate_tracks = EINA_FALSE;
- }
- return ev->nb_tracks;
-}
-
-/* Get a libvlc tracks from a track_id. */
-static libvlc_media_track_t *
-libvlc_get_track(Emotion_LibVLC *ev, libvlc_track_type_t type, int id)
-{
- unsigned int i;
-
- if (!ev->m || id < 0 || type == libvlc_track_unknown) return NULL;
-
- if (!libvlc_fetch_tracks(ev)) return NULL;
-
- for (i = 0; i < ev->nb_tracks; ++i)
- {
- libvlc_media_track_t *track = ev->tracks[i];
-
- if (track->i_id == id && track->i_type == type)
- return track;
- }
-
- return NULL;
-}
-
-/* Get the current libvlc video track. */
-static libvlc_media_track_t *
-libvlc_get_current_video_track(Emotion_LibVLC *ev)
-{
- int id = libvlc_video_get_track(ev->mp);
- return id >= 0 ? libvlc_get_track(ev, libvlc_track_video, id) : NULL;
-}
-
-/* Get a libvlc video track at a pos.
- * XXX: Libvlc use a track_id to get and select a track. The first track_id doesn't
- * necessarily starts with 0. Emotion use a position (that starts with 0) to
- * get and select a track. */
-static libvlc_media_track_t *
-libvlc_get_track_at_pos(Emotion_LibVLC *ev,
- int pos, libvlc_track_type_t type)
-{
- unsigned int i;
-
- if (!ev->m || pos < 0 || type == libvlc_track_unknown) return NULL;
-
- if (!libvlc_fetch_tracks(ev)) return NULL;
-
- for (i = 0; i < ev->nb_tracks; ++i)
- {
- libvlc_media_track_t *track = ev->tracks[i];
-
- if (type == track->i_type && pos-- == 0)
- return track;
- }
-
- return NULL;
-}
-
-/* Get the position of the libvlc track.
- * See libvlc_get_track_at_pos. */
-static int
-libvlc_get_track_pos(Emotion_LibVLC *ev, int id, libvlc_track_type_t type)
-{
- unsigned int i;
- int pos = 0;
-
- if (!ev->m || id < 0 || type == libvlc_track_unknown) return -1;
-
- if (!libvlc_fetch_tracks(ev)) return -1;
-
- for (i = 0; i < ev->nb_tracks; ++i)
- {
- libvlc_media_track_t *track = ev->tracks[i];
-
- if (type == track->i_type)
- {
- if (id == track->i_id)
- return pos;
- else
- pos++;
- }
- }
-
- return -1;
-}
-
-static void *
-em_add(const Emotion_Engine *api EINA_UNUSED,
- Evas_Object *obj,
- const Emotion_Module_Options *opt)
-{
- Emotion_LibVLC *ev;
- ev = calloc(1, sizeof(Emotion_LibVLC));
- EINA_SAFETY_ON_NULL_RETURN_VAL(ev, NULL);
-
- ev->obj = obj;
- ev->opt = *opt;
- eina_lock_new(&ev->lock);
- eina_condition_new(&ev->wait, &ev->lock);
- ev->ref_count = 1;
- ev->audio_vol = -1;
-
- return ev;
-}
-
-static void
-em_del(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev) return;
-
- em_file_close(video);
-
- eina_lock_take(&ev->lock);
- if (--ev->ref_count > 0)
- {
- eina_lock_release(&ev->lock);
- WRN("em_del delayed, some callbacks are still running");
- }
- else
- {
- eina_lock_release(&ev->lock);
- em_del_safe(ev);
- }
-}
-
-static Eina_Bool
-em_file_open(void *video,
- const char *file)
-{
- int ret, i;
- Emotion_LibVLC *ev = video;
- libvlc_event_manager_t *event_m;
-
- if (!file) return EINA_FALSE;
-
- ev->evas_obj = emotion_object_image_get(ev->obj);
- if (!ev->evas_obj)
- {
- WRN("emotion_object_image_get failed: no video");
- ev->opt.no_video = EINA_TRUE;
- }
-
- evas_object_image_pixels_get_callback_set(ev->evas_obj, NULL, NULL);
-
- ev->invalidate_tracks = true;
-
- /* Create libvlc_media */
- ev->m = libvlc_media_new_path(libvlc, file);
- if (strstr(file, "://") == NULL)
- ev->m = libvlc_media_new_path(libvlc, file);
- else
- ev->m = libvlc_media_new_location(libvlc, file);
-
- EINA_SAFETY_ON_NULL_GOTO(ev->m, error);
-
- if (ev->opt.no_audio || ev->audio_mute)
- libvlc_media_add_option(ev->m, ":no-audio");
-
- if (ev->opt.no_video || ev->video_mute)
- libvlc_media_add_option(ev->m, ":no-video");
-
- if (ev->spu_mute)
- libvlc_media_add_option(ev->m, ":no-spu");
-
- /* Create libvlc_media_player */
- ev->mp = libvlc_media_player_new_from_media(ev->m);
- EINA_SAFETY_ON_NULL_GOTO(ev->mp, error);
-
- event_m = libvlc_media_player_event_manager(ev->mp);
- for (i = 0; mp_events[i] != -1; ++i)
- libvlc_event_attach(event_m, mp_events[i], libvlc_on_mp_event, ev);
-
- libvlc_media_player_set_video_title_display(ev->mp,
- libvlc_position_disable, 0);
-
- evas_object_ref(ev->evas_obj);
- if (libvlc_media_player_set_evas_object(ev->mp, ev->evas_obj) == -1)
- {
- CRI("libvlc_media_player_set_evas_object failed");
- libvlc_media_add_option(ev->m, ":no-video");
- ev->video_mute = ev->video_mute_force = 1;
- }
-
- evas_object_event_callback_add(ev->evas_obj, EVAS_CALLBACK_IMAGE_RESIZE,
- evas_resize_cb, ev);
-
- if (ev->audio_vol != -1)
- libvlc_audio_set_volume(ev->mp, ev->audio_vol);
-
- ret = libvlc_media_player_play(ev->mp);
- EINA_SAFETY_ON_FALSE_GOTO(ret == 0, error);
-
- return EINA_TRUE;
-error:
- em_file_close(video);
- return EINA_FALSE;
-}
-
-static void
-emotion_close_cb(void *data, Ecore_Thread *thread EINA_UNUSED)
-{
- struct close_data *close_data = data;
-
- libvlc_media_player_release(close_data->mp);
-}
-
-static void
-emotion_close_mainloop_cb(void *data,
- Ecore_Thread *thread EINA_UNUSED)
-{
- struct close_data *close_data = data;
-
- evas_object_unref(close_data->evas_obj);
- free(close_data);
- _emotion_pending_ecore_end();
-}
-
-static void
-em_file_close(void *video)
-{
- Emotion_LibVLC *ev = video;
- unsigned int i;
-
- if (ev->mp)
- {
- struct close_data *close_data;
- libvlc_event_manager_t *event_m;
-
- evas_object_event_callback_del(ev->evas_obj, EVAS_CALLBACK_IMAGE_RESIZE,
- evas_resize_cb);
-
- event_m = libvlc_media_player_event_manager(ev->mp);
- for (i = 0; mp_events[i] != -1; ++i)
- libvlc_event_detach(event_m, mp_events[i], libvlc_on_mp_event, ev);
-
- libvlc_media_player_set_evas_object(ev->mp, NULL);
-
- close_data = malloc(sizeof(struct close_data));
- if (close_data)
- {
- close_data->evas_obj = ev->evas_obj;
- close_data->mp = ev->mp;
- _emotion_pending_ecore_begin();
- ecore_thread_run(emotion_close_cb,
- emotion_close_mainloop_cb,
- NULL, close_data);
- }
-
- ev->evas_obj = NULL;
- ev->mp = NULL;
-
- if (ev->seeking)
- {
- ev->seeking = EINA_FALSE;
- _emotion_seek_done(ev->obj);
- }
- }
- if (ev->m)
- {
- libvlc_media_release(ev->m);
- ev->m = NULL;
- }
- if (ev->nb_tracks > 0)
- {
- libvlc_media_tracks_release(ev->tracks, ev->nb_tracks);
- ev->nb_tracks = 0;
- ev->tracks = NULL;
- }
- if (ev->nb_chapters > 0)
- {
- libvlc_chapter_descriptions_release(ev->chapters, ev->nb_chapters);
- ev->nb_chapters = 0;
- ev->chapters = NULL;
- }
- for (i = 0; i < META_TRACK_COUNT; ++i)
- {
- free(ev->metas[i]);
- ev->metas[i] = NULL;
- }
- if (ev->subtitle_file)
- {
- free(ev->subtitle_file);
- ev->subtitle_file = NULL;
- }
- ev->vis = EMOTION_VIS_NONE;
- ev->started = ev->seeking = ev->invalidate_tracks = EINA_FALSE;
- ev->pos = ev->len = ev->buffer_cache = 0.0;
-}
-
-static void
-em_play(void *video,
- double pos EINA_UNUSED)
-{
- Emotion_LibVLC *ev = video;
-
- libvlc_media_player_set_pause(ev->mp, false);
-}
-
-static void
-em_stop(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- libvlc_media_player_set_pause(ev->mp, true);
-}
-
-static void
-em_size_get(void *video,
- int *width,
- int *height)
-{
- Emotion_LibVLC *ev = video;
- libvlc_media_track_t *track;
-
- if (!width || !height) return;
- *width = 0;
- *height = 0;
-
- if (!ev->started) return;
-
- track = libvlc_get_current_video_track(ev);
- if (track)
- {
- *width = track->video->i_width;
- *height = track->video->i_height;
- }
-}
-
-static double
-em_pos_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0.0;
-
- return ev->pos;
-}
-
-static void
-em_pos_set(void *video,
- double pos)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started)
- {
- _emotion_seek_done(ev->obj);
- return;
- }
-
- libvlc_media_player_set_time(ev->mp, pos * 1000);
-
- ev->seeking = EINA_TRUE;
-}
-
-static double
-em_len_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0.0;
-
- return ev->len;
-}
-
-static double
-em_buffer_size_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0.0;
-
- return ev->buffer_cache;
-}
-
-static void
-em_fps_num_den_get(Emotion_LibVLC *ev, int *num, int *den)
-{
- libvlc_media_track_t *track;
-
- if (!ev->started) return;
-
- track = libvlc_get_current_video_track(ev);
- if (track)
- {
- if (num)
- *num = track->video->i_frame_rate_num;
- if (den)
- *den = track->video->i_frame_rate_den;
- }
-}
-
-static int
-em_fps_num_get(void *video)
-{
- int num = 0;
-
- em_fps_num_den_get(video, &num, NULL);
- return num;
-}
-
-static int
-em_fps_den_get(void *video)
-{
- int den = 0;
-
- em_fps_num_den_get(video, NULL, &den);
- return den;
-}
-
-static double
-em_fps_get(void *video)
-{
- int num = 0, den = 0;
-
- em_fps_num_den_get(video, &num, &den);
- if (den > 0) return num / (double)den;
- return 0.0;
-}
-
-static void
-em_vis_set(void *video,
- Emotion_Vis vis)
-{
- Emotion_LibVLC *ev = video;
-
- ev->vis = vis;
-}
-
-static Emotion_Vis
-em_vis_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- return ev->vis;
-}
-
-static Eina_Bool
-em_vis_supported(void *ev EINA_UNUSED, Emotion_Vis vis)
-{
- /* FIXME */
- if (vis == EMOTION_VIS_NONE)
- return EINA_TRUE;
- else
- return EINA_FALSE;
-}
-
-static double
-em_ratio_get(void *video)
-{
- Emotion_LibVLC *ev = video;
- libvlc_media_track_t *track;
-
- if (!ev->started) return 0.0;
-
- track = libvlc_get_current_video_track(ev);
- if (track)
- {
- double ratio = track->video->i_sar_num
- / (double)track->video->i_sar_den;
- return ratio;
- }
- else
- return 0.0;
-}
-
-static int
-em_video_handled(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0.0;
-
- return libvlc_video_get_track_count(ev->mp) > 0;
-}
-
-static int
-em_audio_handled(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0.0;
-
- return libvlc_audio_get_track_count(ev->mp) > 0;
-}
-
-static int
-em_seekable(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0;
-
- return libvlc_media_player_is_seekable(ev->mp);
-}
-
-static void
-em_frame_done(void *video EINA_UNUSED)
-{
-}
-
-static Emotion_Format
-em_format_get(void *video EINA_UNUSED)
-{
- return EMOTION_FORMAT_NONE;
-}
-
-static void
-em_video_data_size_get(void *video EINA_UNUSED, int *w EINA_UNUSED, int *h EINA_UNUSED)
-{
-}
-
-static int
-em_yuv_rows_get(void *video EINA_UNUSED,
- int w EINA_UNUSED,
- int h EINA_UNUSED,
- unsigned char **yrows EINA_UNUSED,
- unsigned char **urows EINA_UNUSED,
- unsigned char **vrows EINA_UNUSED)
-{
- return 0;
-}
-
-static int
-em_bgra_data_get(void *video EINA_UNUSED, unsigned char **bgra_data EINA_UNUSED)
-{
- return 0;
-}
-
-static void
-em_event_feed(void *video, int event)
-{
- Emotion_LibVLC *ev = video;
- unsigned int navigate;
-
- if (!ev->started) return;
-
- switch (event)
- {
- case EMOTION_EVENT_UP:
- navigate = libvlc_navigate_up;
- break;
-
- case EMOTION_EVENT_DOWN:
- navigate = libvlc_navigate_down;
- break;
-
- case EMOTION_EVENT_LEFT:
- navigate = libvlc_navigate_left;
- break;
-
- case EMOTION_EVENT_RIGHT:
- navigate = libvlc_navigate_right;
- break;
-
- case EMOTION_EVENT_SELECT:
- navigate = libvlc_navigate_activate;
- break;
-
- /* FIXME */
- default:
- case EMOTION_EVENT_MENU1:
- case EMOTION_EVENT_MENU2:
- case EMOTION_EVENT_MENU3:
- case EMOTION_EVENT_MENU4:
- case EMOTION_EVENT_MENU5:
- case EMOTION_EVENT_MENU6:
- case EMOTION_EVENT_MENU7:
- case EMOTION_EVENT_NEXT:
- case EMOTION_EVENT_PREV:
- case EMOTION_EVENT_ANGLE_NEXT:
- case EMOTION_EVENT_ANGLE_PREV:
- case EMOTION_EVENT_FORCE:
- case EMOTION_EVENT_0:
- case EMOTION_EVENT_1:
- case EMOTION_EVENT_2:
- case EMOTION_EVENT_3:
- case EMOTION_EVENT_4:
- case EMOTION_EVENT_5:
- case EMOTION_EVENT_6:
- case EMOTION_EVENT_7:
- case EMOTION_EVENT_8:
- case EMOTION_EVENT_9:
- case EMOTION_EVENT_10:
- return;
- }
- libvlc_media_player_navigate(ev->mp, navigate);
-}
-
-static void
-em_event_mouse_button_feed(void *video EINA_UNUSED, int button EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED)
-{
- /* Handled directly by VLC evas vout module */
-}
-
-static void
-em_event_mouse_move_feed(void *video EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED)
-{
- /* Handled directly by VLC evas vout module */
-}
-
-static int
-em_video_channel_count(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return -1;
-
- return libvlc_video_get_track_count(ev->mp);
-}
-
-static void
-em_video_channel_set(void *video,
- int channel)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return;
-
- if (channel < 0)
- libvlc_video_set_track(ev->mp, -1);
- else
- {
- libvlc_media_track_t *track;
- track = libvlc_get_track_at_pos(ev, channel, libvlc_track_video);
- if (track)
- libvlc_video_set_track(ev->mp, track->i_id);
- }
-}
-
-static int
-em_video_channel_get(void *video)
-{
- Emotion_LibVLC *ev = video;
- int id;
-
- if (!ev->started) return -1;
-
- id = libvlc_video_get_track(ev->mp);
-
- return id >= 0 ? libvlc_get_track_pos(ev, id, libvlc_track_video) : -1;
-}
-
-static void
-em_video_subtitle_file_set(void *video,
- const char *filepath)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return;
-
- free(ev->subtitle_file);
- ev->subtitle_file = filepath ? strdup(filepath) : NULL;
- libvlc_video_set_subtitle_file(ev->mp, ev->subtitle_file);
-}
-
-static const char *
-em_video_subtitle_file_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- return ev->subtitle_file;
-}
-
-static const char *
-em_video_channel_name_get(void *video,
- int channel)
-{
- Emotion_LibVLC *ev = video;
- libvlc_media_track_t *track;
-
- if (!ev->started) return NULL;
-
- track = libvlc_get_track_at_pos(ev, channel, libvlc_track_video);
- if (track)
- return track->psz_description;
- else
- return NULL;
-}
-
-static void
-em_video_channel_mute_set(void *video,
- int mute)
-{
- Emotion_LibVLC *ev = video;
-
- if (ev->video_mute_force)
- return;
- ev->video_mute = mute;
-
- if (ev->started)
- em_video_channel_set(video, mute ? -1 : 0);
-}
-
-static int
-em_video_channel_mute_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- return ev->video_mute;
-}
-
-static int
-em_channel_count(int vlc_count)
-{
- /* vlc count the -1 track that deactivate the channel for audio and spu */
- return vlc_count > 0 ? vlc_count - 1 : vlc_count;
-}
-
-static int
-em_audio_channel_count(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return -1;
-
- return em_channel_count(libvlc_audio_get_track_count(ev->mp));
-}
-
-static void
-em_audio_channel_set(void *video,
- int channel)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return;
-
- if (channel < 0)
- libvlc_audio_set_track(ev->mp, -1);
- else
- {
- libvlc_media_track_t *track;
- track = libvlc_get_track_at_pos(ev, channel, libvlc_track_audio);
- if (track)
- libvlc_audio_set_track(ev->mp, track->i_id);
- }
-}
-
-static int
-em_audio_channel_get(void *video)
-{
- Emotion_LibVLC *ev = video;
- int id;
-
- if (!ev->started) return -1;
-
- id = libvlc_audio_get_track(ev->mp);
-
- return id >= 0 ? libvlc_get_track_pos(ev, id, libvlc_track_audio) : -1;
-}
-
-static const char *
-em_audio_channel_name_get(void *video,
- int channel)
-{
- Emotion_LibVLC *ev = video;
- libvlc_media_track_t *track;
-
- if (!ev->started) return NULL;
-
- track = libvlc_get_track_at_pos(ev, channel, libvlc_track_audio);
- if (track)
- return track->psz_description;
- else
- return NULL;
-}
-
-static void
-em_audio_channel_mute_set(void *video,
- int mute)
-{
- Emotion_LibVLC *ev = video;
-
- ev->audio_mute = mute;
-
- if (ev->started)
- em_audio_channel_set(video, mute ? -1 : 0);
-}
-
-static int
-em_audio_channel_mute_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- return ev->audio_mute;
-}
-
-static void
-em_audio_channel_volume_set(void *video,
- double vol)
-{
- Emotion_LibVLC *ev = video;
-
- if (vol < 0.0)
- vol = 0.0;
- else if (vol > 1.0)
- vol = 1.0;
- ev->audio_vol = vol * 100;
-
- if (!ev->started) return;
-
- libvlc_audio_set_volume(ev->mp, ev->audio_vol);
-}
-
-static double
-em_audio_channel_volume_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started)
- return ev->audio_vol / 100.0;
-
- return libvlc_audio_get_volume(ev->mp) / 100.0;
-}
-
-static int
-em_spu_channel_count(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return -1;
-
- return em_channel_count(libvlc_video_get_spu_count(ev->mp));
-}
-
-static void
-em_spu_channel_set(void *video,
- int channel)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return;
-
- if (channel < 0)
- libvlc_video_set_spu(ev->mp, -1);
- else
- {
- libvlc_media_track_t *track;
- track = libvlc_get_track_at_pos(ev, channel, libvlc_track_text);
- if (track)
- libvlc_video_set_spu(ev->mp, track->i_id);
- }
-}
-
-static int
-em_spu_channel_get(void *video)
-{
- Emotion_LibVLC *ev = video;
- int id;
-
- if (!ev->started) return -1;
-
- id = libvlc_video_get_spu(ev->mp);
-
- return id >= 0 ? libvlc_get_track_pos(ev, id, libvlc_track_text) : -1;
-}
-
-static const char *
-em_spu_channel_name_get(void *video,
- int channel)
-{
- Emotion_LibVLC *ev = video;
- libvlc_media_track_t *track;
-
- if (!ev->started) return NULL;
-
- track = libvlc_get_track_at_pos(ev, channel, libvlc_track_text);
- if (track)
- return track->psz_description;
- else
- return NULL;
-}
-
-static void
-em_spu_channel_mute_set(void *video, int mute)
-{
- Emotion_LibVLC *ev = video;
-
- ev->spu_mute = mute;
-
- if (ev->started)
- em_spu_channel_set(video, mute ? -1 : 0);
-}
-
-static int
-em_spu_channel_mute_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- return ev->spu_mute;
-}
-
-static int
-em_chapter_count(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0;
-
- return libvlc_media_player_get_chapter_count(ev->mp);
-}
-
-static void
-em_chapter_set(void *video, int chapter)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return;
-
- libvlc_media_player_set_chapter(ev->mp, chapter);
-}
-
-static int
-em_chapter_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 0;
-
- return libvlc_media_player_get_chapter(ev->mp);
-}
-
-static const char *
-em_chapter_name_get(void *video, int chapter)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return NULL;
-
- if (ev->nb_chapters == 0)
- {
- ev->nb_chapters =
- libvlc_media_player_get_full_chapter_descriptions(ev->mp,
- -1,
- &ev->chapters);
- if (ev->nb_chapters == 0)
- ev->nb_chapters = -1;
- }
- return chapter < ev->nb_chapters ? ev->chapters[chapter]->psz_name : NULL;
-}
-
-static void
-em_speed_set(void *video, double speed)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return;
-
- libvlc_media_player_set_rate(ev->mp, speed);
-}
-
-static double
-em_speed_get(void *video)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return 1.0;
-
- return libvlc_media_player_get_rate(ev->mp);
-}
-
-static int
-em_eject(void *video EINA_UNUSED)
-{
- return 1;
-}
-
-static const char *
-em_meta_get(void *video, int meta)
-{
- Emotion_LibVLC *ev = video;
-
- if (!ev->started) return NULL;
-
- if (meta <= 0 || meta >= META_TRACK_COUNT)
- return NULL;
-
- if (ev->metas[meta])
- return ev->metas[meta];
- else
- {
- libvlc_meta_t vlc_meta;
- switch (meta)
- {
- case META_TRACK_TITLE:
- vlc_meta = libvlc_meta_Title;
- break;
-
- case META_TRACK_ARTIST:
- vlc_meta = libvlc_meta_Artist;
- break;
-
- case META_TRACK_ALBUM:
- vlc_meta = libvlc_meta_Album;
- break;
-
- case META_TRACK_YEAR:
- vlc_meta = libvlc_meta_Date;
- break;
-
- case META_TRACK_GENRE:
- vlc_meta = libvlc_meta_Genre;
- break;
-
- case META_TRACK_COMMENT:
- vlc_meta = libvlc_meta_Description;
- break;
-
- case META_TRACK_DISCID:
- vlc_meta = libvlc_meta_TrackID;
- break;
-
- default:
- return NULL;
- break;
- }
- ev->metas[meta] = libvlc_media_get_meta(ev->m, vlc_meta);
-
- return ev->metas[meta];
- }
-}
-
-static const Emotion_Engine em_engine =
-{
- EMOTION_ENGINE_API_VERSION,
- EMOTION_ENGINE_PRIORITY_DEFAULT,
- "libvlc",
- em_add, /* add */
- em_del, /* del */
- em_file_open, /* file_open */
- em_file_close, /* file_close */
- em_play, /* play */
- em_stop, /* stop */
- em_size_get, /* size_get */
- em_pos_set, /* pos_set */
- em_len_get, /* len_get */
- em_buffer_size_get, /* buffer_size_get */
- em_fps_num_get, /* fps_num_get */
- em_fps_den_get, /* fps_den_get */
- em_fps_get, /* fps_get */
- em_pos_get, /* pos_get */
- em_vis_set, /* vis_set */
- em_vis_get, /* vis_get */
- em_vis_supported, /* vis_supported */
- em_ratio_get, /* ratio_get */
- em_video_handled, /* video_handled */
- em_audio_handled, /* audio_handled */
- em_seekable, /* seekable */
- em_frame_done, /* frame_done */
- em_format_get, /* format_get */
- em_video_data_size_get, /* video_data_size_get */
- em_yuv_rows_get, /* yuv_rows_get */
- em_bgra_data_get, /* bgra_data_get */
- em_event_feed, /* event_feed */
- em_event_mouse_button_feed, /* event_mouse_button_feed */
- em_event_mouse_move_feed, /* event_mouse_move_feed */
- em_video_channel_count, /* video_channel_count */
- em_video_channel_set, /* video_channel_set */
- em_video_channel_get, /* video_channel_get */
- em_video_subtitle_file_set, /* video_subtitle_file_set */
- em_video_subtitle_file_get, /* video_subtitle_file_get */
- em_video_channel_name_get, /* video_channel_name_get */
- em_video_channel_mute_set, /* video_channel_mute_set */
- em_video_channel_mute_get, /* video_channel_mute_get */
- em_audio_channel_count, /* audio_channel_count */
- em_audio_channel_set, /* audio_channel_set */
- em_audio_channel_get, /* audio_channel_get */
- em_audio_channel_name_get, /* audio_channel_name_get */
- em_audio_channel_mute_set, /* audio_channel_mute_set */
- em_audio_channel_mute_get, /* audio_channel_mute_get */
- em_audio_channel_volume_set, /* audio_channel_volume_set */
- em_audio_channel_volume_get, /* audio_channel_volume_get */
- em_spu_channel_count, /* spu_channel_count */
- em_spu_channel_set, /* spu_channel_set */
- em_spu_channel_get, /* spu_channel_get */
- em_spu_channel_name_get, /* spu_channel_name_get */
- em_spu_channel_mute_set, /* spu_channel_mute_set */
- em_spu_channel_mute_get, /* spu_channel_mute_get */
- em_chapter_count, /* chapter_count */
- em_chapter_set, /* chapter_set */
- em_chapter_get, /* chapter_get */
- em_chapter_name_get, /* chapter_name_get */
- em_speed_set, /* speed_set */
- em_speed_get, /* speed_get */
- em_eject, /* eject */
- em_meta_get, /* meta_get */
- NULL, /* priority_set */
- NULL, /* priority_get */
- NULL /* em_meta_artwork_get */
-};
-
-static void
-libvlc_log(void *data EINA_UNUSED, int level,
- const libvlc_log_t *ctx EINA_UNUSED,
- const char *fmt, va_list args)
-{
- Eina_Log_Level eina_log_level;
- const char *name, *header;
- uintptr_t id;
-
- libvlc_log_get_object(ctx, &name, &header, &id);
- switch (level)
- {
- case LIBVLC_DEBUG:
- eina_log_level = EINA_LOG_LEVEL_DBG;
- break;
-
- case LIBVLC_NOTICE:
- eina_log_level = EINA_LOG_LEVEL_INFO;
- break;
-
- case LIBVLC_WARNING:
- eina_log_level = EINA_LOG_LEVEL_WARN;
- break;
-
- case LIBVLC_ERROR:
- default:
- eina_log_level = EINA_LOG_LEVEL_ERR;
- break;
- }
- eina_log_vprint(_emotion_libvlc_log_domain, eina_log_level,
- "", name, id, fmt, args);
-}
-
-static libvlc_instance_t *
-libvlc_new_env_args(void)
-{
- unsigned int argc = 0, i = 0;
- const char **argv = NULL;
- char *args_env, *args_dup = NULL, *str = NULL, *token, *saveptr;
- libvlc_instance_t *instance = NULL;
-
- args_env = getenv("EMOTION_LIBVLC_ARGS");
- if (!args_env)
- goto fallback;
-
- /* dup since strtok modify the str */
- args_dup = strdup(args_env);
- if (!args_dup)
- goto fallback;
-
- /* call strtok to count the numbers of arguments */
- str = strdup(args_dup);
- if (!str)
- goto fallback;
-
- token = strtok_r(str, " ", &saveptr);
- while (token)
- {
- argc++;
- token = strtok_r(NULL, " ", &saveptr);
- }
- if (!argc)
- goto fallback;
-
- /* alloc argv */
- argv = calloc(1, argc * sizeof(char *));
- if (!argv)
- goto fallback;
-
- /* call strtok to fill argv */
- free(str);
- str = strdup(args_dup);
- if (!str)
- goto fallback;
-
- token = strtok_r(str, " ", &saveptr);
- while (token && i < argc)
- {
- argv[i++] = token;
- token = strtok_r(NULL, " ", &saveptr);
- }
- argc = i;
-
- for (i = 0; i < argc; ++i)
- INF("libvlc_argv[%d]: %s", i, argv[i]);
-
- instance = libvlc_new(argc, argv);
-
-fallback:
- free(args_dup);
- free(str);
- free(argv);
- return instance ? instance : libvlc_new(0, NULL);
-}
-
-Eina_Bool
-libvlc_module_init(void)
-{
- if (libvlc)
- {
- return EINA_TRUE;
- }
-
- if (getenv("EMOTION_FPS_DEBUG")) debug_fps = EINA_TRUE;
-
- eina_threads_init();
- eina_log_threads_enable();
- _emotion_libvlc_log_domain = eina_log_domain_register
- ("emotion-libvlc", EINA_COLOR_ORANGE);
- if (_emotion_libvlc_log_domain < 0)
- {
- EINA_LOG_CRIT("Could not register log domain 'emotion-libvlc'");
- return EINA_FALSE;
- }
-
- libvlc = libvlc_new_env_args();
- if (!libvlc)
- {
- CRI("could not create libvlc instance");
- goto error_register;
- }
- EINA_LOG_INFO("using libvlc: %s", libvlc_get_version());
- libvlc_log_set(libvlc, libvlc_log, NULL);
-
- if (!_emotion_module_register(&em_engine))
- {
- ERR("Could not register module %p", &em_engine);
- goto error_register;
- }
-
- return EINA_TRUE;
-
-error_register:
- if (libvlc)
- {
- libvlc_release(libvlc);
- libvlc = NULL;
- }
- eina_log_domain_unregister(_emotion_libvlc_log_domain);
- _emotion_libvlc_log_domain = -1;
- return EINA_FALSE;
-}
-
-void
-libvlc_module_shutdown(void)
-{
- if (!libvlc)
- {
- EINA_LOG_ERR("too many libvlc_module_shutdown()");
- return;
- }
-
- _emotion_module_unregister(&em_engine);
-
- libvlc_release(libvlc);
- libvlc = NULL;
-
- eina_log_domain_unregister(_emotion_libvlc_log_domain);
- _emotion_libvlc_log_domain = -1;
-}
-
-#ifndef EMOTION_STATIC_BUILD_LIBVLC
-
-EINA_MODULE_INIT(libvlc_module_init);
-EINA_MODULE_SHUTDOWN(libvlc_module_shutdown);
-
-#endif
diff --git a/src/modules/emotion/libvlc/meson.build b/src/modules/emotion/libvlc/meson.build
deleted file mode 100644
index e5646a414d..0000000000
--- a/src/modules/emotion/libvlc/meson.build
+++ /dev/null
@@ -1,14 +0,0 @@
-generic_src = files([
- 'emotion_libvlc.c',
-])
-
-generic_deps = [dependency('libvlc', version: '>= 3.0')]
-
-shared_module(emotion_loader,
- generic_src,
- include_directories : config_dir,
- dependencies: [eina, evas, emotion, generic_deps],
- install: true,
- install_dir : mod_install_dir,
- c_args : package_c_args,
-)
diff --git a/src/modules/emotion/meson.build b/src/modules/emotion/meson.build
index e20729ad22..595557b710 100644
--- a/src/modules/emotion/meson.build
+++ b/src/modules/emotion/meson.build
@@ -1,19 +1,11 @@
-emotion_loaders = [
-'gstreamer1',
-'libvlc',
-'xine'
-]
-
-if sys_windows == false
- emotion_loaders += 'generic'
-endif
+emotion_loaders = [ 'gstreamer1' ]
foreach emotion_loader : emotion_loaders
generic_src = []
generic_deps = []
mod_install_dir = join_paths(dir_lib, 'emotion', 'modules', emotion_loader, version_name)
- if get_option('emotion-loaders-disabler').contains(emotion_loader) == false
+ if get_option('gstreamer') == true
subdir(emotion_loader)
module_files += join_paths(mod_install_dir, 'lib'+emotion_loader+'.'+sys_mod_extension)
config_h.set('EMOTION_BUILD_'+emotion_loader.to_upper(), 1)
diff --git a/src/modules/emotion/xine/emotion_xine.c b/src/modules/emotion/xine/emotion_xine.c
deleted file mode 100644
index dd84c1cbc7..0000000000
--- a/src/modules/emotion/xine/emotion_xine.c
+++ /dev/null
@@ -1,1707 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Evas.h>
-#include <Ecore.h>
-#include <signal.h>
-
-#include "emotion_modules.h"
-#include "emotion_xine.h"
-
-int _emotion_xine_log_domain = -1;
-static int _emotion_init_count = 0;
-
-/* internal util calls */
-static void *_em_slave (void *par);
-static void _em_slave_event (void *data, int type, void *arg);
-static Eina_Bool _em_fd_active (void *data, Ecore_Fd_Handler *fdh);
-static void _em_event (void *data, const xine_event_t *event);
-static void _em_module_event (void *data, int type);
-static Eina_Bool _em_fd_ev_active (void *data, Ecore_Fd_Handler *fdh);
-//static int _em_timer (void *data);
-static void *_em_get_pos_len_th(void *par);
-static void _em_get_pos_len (Emotion_Xine_Video *ev);
-
-extern plugin_info_t emotion_xine_plugin_info[];
-
-static void em_frame_done(void *ef);
-
-/* this is a slave controller thread for the xine module - libxine loves
- * to deadlock, internally stall and otherwise have unpredictable behavior
- * if we use the main process thread for many things - so a lot will be
- * farmed off to this slave. its job is to handle opening, closing, file
- * opening, recoder init etc. and all sorts of things can that often block.
- * anything this thread needs to return, it will return via the event pipe.
- */
-static void *
-_em_slave(void *par)
-{
- Emotion_Xine_Video *ev;
- void *buf[2];
- int len;
-
- ev = (Emotion_Xine_Video *)par;
- while ((len = read(ev->fd_slave_read, buf, sizeof(buf))) > 0)
- {
- if (len == sizeof(buf))
- {
- Emotion_Xine_Event *eev;
-
- ev = buf[0];
- eev = buf[1];
- switch (eev->mtype)
- {
- case 0: /* noop */
- break;
- case 1: /* init */
- {
- ev->decoder = xine_new();
- xine_init(ev->decoder);
- xine_register_plugins(ev->decoder, emotion_xine_plugin_info);
- if (1)
- {
- xine_cfg_entry_t cf;
- if (xine_config_lookup_entry(ev->decoder, "input.dvd_use_readahead", &cf))
- {
- cf.num_value = 1; // 0 or 1
- xine_config_update_entry(ev->decoder, &cf);
- }
- }
- DBG("OPEN VIDEO PLUGIN...");
- if (!ev->opt_no_video)
- ev->video = xine_open_video_driver(ev->decoder, "emotion",
- XINE_VISUAL_TYPE_NONE, ev);
- DBG("RESULT: xine_open_video_driver() = %p", ev->video);
- // Let xine autodetect the best audio output driver
- if (!ev->opt_no_audio)
- ev->audio = xine_open_audio_driver(ev->decoder, NULL, ev);
- // ev->audio = xine_open_audio_driver(ev->decoder, "oss", ev);
- // dont use alsa - alsa has oss emulation.
- // ev->audio = xine_open_audio_driver(ev->decoder, "alsa", ev);
- // ev->audio = xine_open_audio_driver(ev->decoder, "arts", ev);
- // ev->audio = xine_open_audio_driver(ev->decoder, "esd", ev);
- ev->stream = xine_stream_new(ev->decoder, ev->audio, ev->video);
- ev->queue = xine_event_new_queue(ev->stream);
- xine_event_create_listener_thread(ev->queue, _em_event, ev);
- ev->opening = 0;
- ev->play_ok = 1;
- _em_module_event(ev, 1); /* event - open done */
- }
- break;
- case 3: /* shutdown */
- {
- _em_module_event(ev, 3);
- DBG("shutdown stop");
- xine_stop(ev->stream);
- // pthread_mutex_lock(&(ev->get_pos_len_mutex));
- if (!ev->get_pos_thread_deleted)
- {
- DBG("closing get_pos thread, %p", ev);
- pthread_mutex_lock(&(ev->get_pos_len_mutex));
- pthread_cond_broadcast(&(ev->get_pos_len_cond));
- pthread_mutex_unlock(&(ev->get_pos_len_mutex));
- while (ev->get_poslen);
- }
- DBG("dispose %p", ev);
- xine_dispose(ev->stream);
- DBG("dispose evq %p", ev);
- xine_event_dispose_queue(ev->queue);
- DBG("close video drv %p", ev);
- if (ev->video) xine_close_video_driver(ev->decoder, ev->video);
- DBG("wait for vo to go");
- while (ev->have_vo);
- DBG("vo gone");
- DBG("close audio drv %p", ev);
- if (ev->audio) xine_close_audio_driver(ev->decoder, ev->audio);
- DBG("xine exit %p", ev);
- xine_exit(ev->decoder);
- DBG("DONE %p", ev);
- close(ev->fd_write);
- close(ev->fd_read);
- close(ev->fd_ev_write);
- close(ev->fd_ev_read);
- close(ev->fd_slave_write);
- close(ev->fd_slave_read);
- ev->closing = 0;
- if (eev->xine_event) free(eev->xine_event);
- free(eev);
- free(ev);
- return NULL;
- }
- break;
- case 2: /* file open */
- {
- int pos_stream = 0;
- int pos_time = 0;
- int length_time = 0;
- uint32_t v;
- char *file;
-
- file = eev->xine_event;
- DBG("OPEN STREAM %s", file);
- if (xine_open(ev->stream, file))
- {
- if (xine_get_pos_length(ev->stream, &pos_stream, &pos_time, &length_time))
- {
- if (length_time == 0)
- {
- ev->pos = (double)pos_stream / 65535;
- ev->len = 1.0;
- ev->no_time = 1;
- }
- else
- {
- ev->pos = 0.0;
- ev->len = (double)length_time / 1000.0;
- }
- }
- else
- {
- ev->pos = 0.0;
- ev->len = 1.0;
- }
- v = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_FRAME_DURATION);
- if (v > 0) ev->fps = 90000.0 / (double)v;
- v = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_WIDTH);
- ev->w = v;
- v = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_HEIGHT);
- ev->h = v;
- v = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_RATIO);
- ev->ratio = (double)v / 10000.0;
- ev->just_loaded = 1;
- ev->get_poslen = 0;
- xine_set_param(ev->stream, XINE_PARAM_AUDIO_VOLUME, ev->volume * 100);
- }
- _em_module_event(ev, 2); /* event - open done */
- }
- break;
- case 11: /* file close */
- {
- DBG("done %p", ev);
- em_frame_done(ev);
- DBG("stop %p", ev);
- xine_stop(ev->stream);
- DBG("close %p", ev);
- xine_close(ev->stream);
- DBG("close done %p", ev);
- _em_module_event(ev, 11);
- }
- break;
- case 4: /* play */
- {
- double pos;
- int pos_stream, pos_time, length_time;
-
- pos = *((double *)eev->xine_event);
- if ((xine_get_param(ev->stream, XINE_PARAM_SPEED) == XINE_SPEED_PAUSE) &&
- (EINA_DBL_EQ(pos, ev->pos)) &&
- (!ev->just_loaded))
- {
- xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
- }
- else
- {
- if (ev->no_time)
- xine_play(ev->stream, pos * 65535, 0);
- else
- xine_play(ev->stream, 0, pos * 1000);
- }
- ev->just_loaded = 0;
-
- if (xine_get_pos_length(ev->stream,
- &pos_stream,
- &pos_time,
- &length_time))
- {
- if (length_time == 0)
- {
- ev->pos = (double)pos_stream / 65535;
- ev->len = 1.0;
- ev->no_time = 1;
- }
- else
- {
- ev->pos = (double)pos_time / 1000.0;
- ev->len = (double)length_time / 1000.0;
- }
- }
- _em_module_event(ev, 4);
- }
- break;
- case 5: /* stop */
- {
- xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
- _em_module_event(ev, 5);
- }
- break;
- case 6: /* seek */
- {
- double pos;
-
- pos = *((double *)eev->xine_event);
- if (ev->no_time)
- xine_play(ev->stream, pos * 65535, 0);
- else
- xine_play(ev->stream, 0, pos * 1000);
- if (!ev->play)
- xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
- _em_module_event(ev, 6);
- }
- break;
- case 7: /* eject */
- {
- xine_eject(ev->stream);
- _em_module_event(ev, 7);
- }
- break;
- case 8: /* spu mute */
- {
- xine_set_param(ev->stream, XINE_PARAM_IGNORE_SPU, ev->spu_mute);
- _em_module_event(ev, 8);
- }
- break;
- case 9: /* channel */
- {
- xine_set_param(ev->stream, XINE_PARAM_SPU_CHANNEL, ev->spu_channel);
- _em_module_event(ev, 9);
- }
- break;
- case 10: /* vol */
- {
- xine_set_param(ev->stream, XINE_PARAM_AUDIO_VOLUME, ev->volume * 100);
- _em_module_event(ev, 10);
- }
- break;
- case 12: /* audio mute */
- {
- xine_set_param(ev->stream, XINE_PARAM_AUDIO_MUTE, ev->audio_mute);
- }
- break;
- case 13: /* audio mute */
- {
- xine_set_param(ev->stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL, ev->audio_channel);
- }
- break;
- case 14: /* audio mute */
- {
- xine_set_param(ev->stream, XINE_PARAM_VIDEO_CHANNEL, ev->video_channel);
- }
- break;
- default:
- break;
- }
- if (eev->xine_event) free(eev->xine_event);
- free(eev);
- }
- }
- return NULL;
-}
-static void
-_em_slave_event(void *data, int type, void *arg)
-{
- void *buf[2];
- Emotion_Xine_Event *new_ev;
- Emotion_Xine_Video *ev;
-
- ev = data;
- new_ev = calloc(1, sizeof(Emotion_Xine_Event));
- if (!new_ev) return;
- new_ev->mtype = type;
- new_ev->type = -1;
- new_ev->xine_event = arg;
- buf[0] = data;
- buf[1] = new_ev;
- if (write(ev->fd_slave_write, buf, sizeof(buf)) < 0) perror("write");
-}
-
-static void *
-em_add(const Emotion_Engine *api EINA_UNUSED,
- Evas_Object *obj,
- const Emotion_Module_Options *opt)
-{
- Emotion_Xine_Video *ev;
- int fds[2];
- sigset_t oldset, newset;
-
- ev = calloc(1, sizeof(Emotion_Xine_Video));
- EINA_SAFETY_ON_NULL_RETURN_VAL(ev, NULL);
- ev->obj = obj;
-
- if (pipe(fds) == 0)
- {
- ev->fd_read = fds[0];
- ev->fd_write = fds[1];
- fcntl(ev->fd_read, F_SETFL, O_NONBLOCK);
- ev->fd_handler = ecore_main_fd_handler_add(ev->fd_read, ECORE_FD_READ,
- _em_fd_active, ev,
- NULL, NULL);
- ecore_main_fd_handler_active_set(ev->fd_handler, ECORE_FD_READ);
- }
- if (pipe(fds) == 0)
- {
- ev->fd_ev_read = fds[0];
- ev->fd_ev_write = fds[1];
- fcntl(ev->fd_ev_read, F_SETFL, O_NONBLOCK);
- ev->fd_ev_handler = ecore_main_fd_handler_add(ev->fd_ev_read,
- ECORE_FD_READ, _em_fd_ev_active, ev, NULL, NULL);
- ecore_main_fd_handler_active_set(ev->fd_ev_handler, ECORE_FD_READ);
- }
- if (pipe(fds) == 0)
- {
- ev->fd_slave_read = fds[0];
- ev->fd_slave_write = fds[1];
- if (fcntl(ev->fd_slave_write, F_SETFL, O_NONBLOCK) != 0)
- ERR("Can't fcntl() slave write fd");
- }
- ev->volume = 0.8;
- ev->delete_me = 0;
- ev->get_pos_thread_deleted = 0;
- ev->opening = 1;
- ev->play_ok = 0;
-
- if (opt)
- {
- ev->opt_no_audio = opt->no_audio;
- ev->opt_no_video = opt->no_video;
- }
-
- pthread_cond_init(&(ev->get_pos_len_cond), NULL);
- pthread_mutex_init(&(ev->get_pos_len_mutex), NULL);
- sigemptyset(&newset);
- sigaddset(&newset, SIGPIPE);
- sigaddset(&newset, SIGALRM);
- sigaddset(&newset, SIGCHLD);
- sigaddset(&newset, SIGUSR1);
- sigaddset(&newset, SIGUSR2);
- sigaddset(&newset, SIGHUP);
- sigaddset(&newset, SIGQUIT);
- sigaddset(&newset, SIGINT);
- sigaddset(&newset, SIGTERM);
-#ifdef SIGPWR
- sigaddset(&newset, SIGPWR);
-#endif
- pthread_sigmask(SIG_BLOCK, &newset, &oldset);
- pthread_create(&ev->get_pos_len_th, NULL, _em_get_pos_len_th, ev);
- pthread_create(&ev->slave_th, NULL, _em_slave, ev);
- pthread_sigmask(SIG_SETMASK, &oldset, NULL);
-
- pthread_detach(ev->slave_th);
- _em_slave_event(ev, 1, NULL);
-
- ev->buffer = 1.0;
-
- return ev;
-}
-
-static void
-em_del(void *ef)
-{
- Emotion_Xine_Video *ev = ef;
-
- ev->closing = 1;
- ev->delete_me = 1;
- DBG("del fds %p", ev);
- ecore_main_fd_handler_del(ev->fd_handler);
- ev->fd_handler = NULL;
- ecore_main_fd_handler_del(ev->fd_ev_handler);
- ev->fd_ev_handler = NULL;
- if (ev->anim)
- {
- ecore_animator_del(ev->anim);
- ev->anim = NULL;
- }
-
- ev->closing = 1;
- _em_slave_event(ev, 3, NULL);
- DBG("done %p", ev);
-}
-
-static Eina_Bool
-em_file_open(void *ef, const char *file)
-{
- Emotion_Xine_Video *ev = ef;
- _em_slave_event(ev, 2, strdup(file));
- return EINA_TRUE;
-}
-
-static void
-em_file_close(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (!ev) return;
- _em_slave_event(ev, 11, NULL);
-}
-
-static void
-em_play(void *ef, double pos)
-{
- Emotion_Xine_Video *ev;
- double *ppos;
-
- ev = (Emotion_Xine_Video *)ef;
- ev->play = 1;
- ev->play_ok = 0;
- ppos = malloc(sizeof(double));
- *ppos = pos;
- _em_slave_event(ev, 4, ppos);
-}
-
-static void
-em_stop(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- ev->play = 0;
- ev->play_ok = 0;
- _em_slave_event(ev, 5, NULL);
-}
-
-static void
-em_size_get(void *ef, int *w, int *h)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (w) *w = ev->w;
- if (h) *h = ev->h;
-}
-
-static void
-em_pos_set(void *ef, double pos)
-{
- Emotion_Xine_Video *ev;
- double *ppos;
-
- ev = (Emotion_Xine_Video *)ef;
- ppos = malloc(sizeof(double));
- *ppos = pos;
- _em_slave_event(ev, 6, ppos);
-}
-
-static double
-em_len_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return ev->len;
-}
-
-static double
-em_buffer_size_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return ev->buffer;
-}
-
-static int
-em_fps_num_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return (int)(ev->fps * 10000.0);
-}
-
-static int
-em_fps_den_get(void *ef EINA_UNUSED)
-{
- return 10000;
-}
-
-static double
-em_fps_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return ev->fps;
-}
-
-static double
-em_pos_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- _em_get_pos_len(ev);
- return ev->pos;
-}
-
-static void
-em_vis_set(void *ef, Emotion_Vis vis)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->vis == vis) return;
- ev->vis = vis;
-}
-
-static Emotion_Vis
-em_vis_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
-
- return ev->vis;
-}
-
-static Eina_Bool
-em_vis_supported(void *ef EINA_UNUSED, Emotion_Vis vis EINA_UNUSED)
-{
- return EINA_FALSE;
-}
-
-static double
-em_ratio_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return ev->ratio;
-}
-
-static int
-em_video_handled(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return (xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_VIDEO) &&
- xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_HANDLED));
-}
-
-static int
-em_audio_handled(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return (xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_AUDIO) &&
- xine_get_stream_info(ev->stream, XINE_STREAM_INFO_AUDIO_HANDLED));
-}
-
-static int
-em_seekable(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return xine_get_stream_info(ev->stream, XINE_STREAM_INFO_SEEKABLE);
-}
-
-static void
-em_frame_done(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->cur_frame)
- {
- ev->fq--;
- if (ev->cur_frame->done_func)
- ev->cur_frame->done_func(ev->cur_frame->done_data);
- ev->cur_frame = NULL;
- }
-}
-
-static Emotion_Format
-em_format_get(void *ef)
-{
- Emotion_Xine_Video *ev;
- volatile Emotion_Xine_Video_Frame *fr;
-
- ev = (Emotion_Xine_Video *)ef;
- fr = ev->cur_frame;
- if (fr) return fr->format;
- return EMOTION_FORMAT_YV12;
-}
-
-static void
-em_video_data_size_get(void *ef, int *w, int *h)
-{
- Emotion_Xine_Video *ev;
- volatile Emotion_Xine_Video_Frame *fr;
-
- ev = (Emotion_Xine_Video *)ef;
- fr = ev->cur_frame;
- if (!fr)
- {
- if (w) *w = 0;
- if (h) *h = 0;
- return;
- }
- if (w) *w = fr->w;
- if (h) *h = fr->h;
-}
-
-static int
-em_yuv_rows_get(void *ef, int w EINA_UNUSED, int h, unsigned char **yrows, unsigned char **urows, unsigned char **vrows)
-{
- Emotion_Xine_Video *ev;
- volatile Emotion_Xine_Video_Frame *fr;
-
- ev = (Emotion_Xine_Video *)ef;
- fr = ev->cur_frame;
- if (!fr) return 0;
- if (fr->y)
- {
- int i;
-
- for (i = 0; i < h; i++) yrows[i] = fr->y + (i * fr->y_stride);
- for (i = 0; i < (h / 2); i++) urows[i] = fr->u + (i * fr->u_stride);
- for (i = 0; i < (h / 2); i++) vrows[i] = fr->v + (i * fr->v_stride);
- return 1;
- }
- return 0;
-}
-
-static int
-em_bgra_data_get(void *ef, unsigned char **bgra_data)
-{
- Emotion_Xine_Video *ev;
- volatile Emotion_Xine_Video_Frame *fr;
-
- ev = (Emotion_Xine_Video *)ef;
- fr = ev->cur_frame;
- if (!fr) return 0;
- if (fr->bgra_data)
- {
- *bgra_data = fr->bgra_data;
- return 1;
- }
- return 0;
-}
-
-static void
-em_event_feed(void *ef, int event)
-{
- Emotion_Xine_Video *ev;
- xine_event_t xine_event;
-
- ev = (Emotion_Xine_Video *)ef;
- if ((ev->opening) || (!ev->play_ok)) return;
- xine_event.data_length = 0;
- xine_event.data = NULL;
- xine_event.stream = ev->stream;
- gettimeofday(&xine_event.tv, NULL);
- switch (event)
- {
- case EMOTION_EVENT_MENU1:
- xine_event.type = XINE_EVENT_INPUT_MENU1;
- break;
- case EMOTION_EVENT_MENU2:
- xine_event.type = XINE_EVENT_INPUT_MENU2;
- break;
- case EMOTION_EVENT_MENU3:
- xine_event.type = XINE_EVENT_INPUT_MENU3;
- break;
- case EMOTION_EVENT_MENU4:
- xine_event.type = XINE_EVENT_INPUT_MENU4;
- break;
- case EMOTION_EVENT_MENU5:
- xine_event.type = XINE_EVENT_INPUT_MENU5;
- break;
- case EMOTION_EVENT_MENU6:
- xine_event.type = XINE_EVENT_INPUT_MENU6;
- break;
- case EMOTION_EVENT_MENU7:
- xine_event.type = XINE_EVENT_INPUT_MENU7;
- break;
- case EMOTION_EVENT_UP:
- xine_event.type = XINE_EVENT_INPUT_UP;
- break;
- case EMOTION_EVENT_DOWN:
- xine_event.type = XINE_EVENT_INPUT_DOWN;
- break;
- case EMOTION_EVENT_LEFT:
- xine_event.type = XINE_EVENT_INPUT_LEFT;
- break;
- case EMOTION_EVENT_RIGHT:
- xine_event.type = XINE_EVENT_INPUT_RIGHT;
- break;
- case EMOTION_EVENT_SELECT:
- xine_event.type = XINE_EVENT_INPUT_SELECT;
- break;
- case EMOTION_EVENT_NEXT:
- xine_event.type = XINE_EVENT_INPUT_NEXT;
- break;
- case EMOTION_EVENT_PREV:
- xine_event.type = XINE_EVENT_INPUT_PREVIOUS;
- break;
- case EMOTION_EVENT_ANGLE_NEXT:
- xine_event.type = XINE_EVENT_INPUT_ANGLE_NEXT;
- break;
- case EMOTION_EVENT_ANGLE_PREV:
- xine_event.type = XINE_EVENT_INPUT_ANGLE_PREVIOUS;
- break;
- case EMOTION_EVENT_FORCE:
- xine_event.type = XINE_EVENT_INPUT_BUTTON_FORCE;
- break;
- case EMOTION_EVENT_0:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_0;
- break;
- case EMOTION_EVENT_1:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_1;
- break;
- case EMOTION_EVENT_2:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_2;
- break;
- case EMOTION_EVENT_3:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_3;
- break;
- case EMOTION_EVENT_4:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_4;
- break;
- case EMOTION_EVENT_5:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_5;
- break;
- case EMOTION_EVENT_6:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_6;
- break;
- case EMOTION_EVENT_7:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_7;
- break;
- case EMOTION_EVENT_8:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_8;
- break;
- case EMOTION_EVENT_9:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_9;
- break;
- case EMOTION_EVENT_10:
- xine_event.type = XINE_EVENT_INPUT_NUMBER_10_ADD;
- break;
- default:
- return;
- break;
- }
- xine_event_send(ev->stream, &xine_event);
-}
-
-static void
-em_event_mouse_button_feed(void *ef, int button EINA_UNUSED, int x, int y)
-{
- Emotion_Xine_Video *ev;
- xine_event_t xine_event;
- xine_input_data_t xine_input;
-
- ev = (Emotion_Xine_Video *)ef;
- if ((ev->opening) || (!ev->play_ok)) return;
- xine_event.stream = ev->stream;
- gettimeofday(&xine_event.tv, NULL);
- xine_event.type = XINE_EVENT_INPUT_MOUSE_BUTTON;
- xine_input.button = 1;
- xine_input.x = x;
- xine_input.y = y;
- xine_event.data = &xine_input;
- xine_event.data_length = sizeof(xine_input);
- xine_event_send(ev->stream, &xine_event);
-}
-
-static void
-em_event_mouse_move_feed(void *ef, int x, int y)
-{
- Emotion_Xine_Video *ev;
- xine_event_t xine_event;
- xine_input_data_t xine_input;
-
- ev = (Emotion_Xine_Video *)ef;
- if ((ev->opening) || (!ev->play_ok)) return;
- xine_event.stream = ev->stream;
- gettimeofday(&xine_event.tv, NULL);
- xine_event.type = XINE_EVENT_INPUT_MOUSE_MOVE;
- xine_input.button = 0;
- xine_input.x = x;
- xine_input.y = y;
- xine_event.data = &xine_input;
- xine_event.data_length = sizeof(xine_input);
- xine_event_send(ev->stream, &xine_event);
-}
-
-static int
-em_video_channel_count(void *ef)
-{
- Emotion_Xine_Video *ev;
- int v;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- v = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_CHANNELS);
- if ((v < 1) &&
- xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_VIDEO)) return 1;
- return v;
-}
-
-static void
-em_video_channel_set(void *ef, int channel)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (channel < 0) channel = 0;
- ev->video_channel = channel;
- _em_slave_event(ev, 14, NULL);
-}
-
-static int
-em_video_channel_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return xine_get_param(ev->stream, XINE_PARAM_VIDEO_CHANNEL);
-}
-
-static void
-em_video_subtitle_file_set(void *video EINA_UNUSED,
- const char *filepath EINA_UNUSED)
-{
- DBG("video_subtitle_file_set not implemented for xine yet.");
-}
-
-static const char *
-em_video_subtitle_file_get(void *video EINA_UNUSED)
-{
- DBG("video_subtitle_file_get not implemented for xine yet.");
- return NULL;
-}
-
-static const char *
-em_video_channel_name_get(void *ef EINA_UNUSED, int channel EINA_UNUSED)
-{
- return NULL;
-}
-
-static void
-em_video_channel_mute_set(void *ef, int mute)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- ev->video_mute = mute;
-}
-
-static int
-em_video_channel_mute_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return ev->video_mute;
-}
-
-static int
-em_audio_channel_count(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return xine_get_stream_info(ev->stream, XINE_STREAM_INFO_MAX_AUDIO_CHANNEL);
-}
-
-static void
-em_audio_channel_set(void *ef, int channel)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (channel < -1) channel = -1;
- ev->audio_channel = channel;
- _em_slave_event(ev, 13, NULL);
-}
-
-static int
-em_audio_channel_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return xine_get_param(ev->stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL);
-}
-
-static const char *
-em_audio_channel_name_get(void *ef, int channel)
-{
- Emotion_Xine_Video *ev;
- static char lang[XINE_LANG_MAX + 1];
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening) return NULL;
- lang[0] = 0;
- if (xine_get_audio_lang(ev->stream, channel, lang)) return lang;
- return NULL;
-}
-
-static void
-em_audio_channel_mute_set(void *ef, int mute)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- ev->audio_mute = mute;
- _em_slave_event(ev, 12, NULL);
-}
-
-static int
-em_audio_channel_mute_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return ev->audio_mute;
-}
-
-static void
-em_audio_channel_volume_set(void *ef, double vol)
-{
- Emotion_Xine_Video *ev;
-
- if (vol < 0.0) vol = 0.0;
- else if (vol > 1.0) vol = 1.0;
-
- ev = (Emotion_Xine_Video *)ef;
- ev->volume = vol;
- _em_slave_event(ev, 10, NULL);
-}
-
-static double
-em_audio_channel_volume_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return ev->volume;
- ev->volume = xine_get_param(ev->stream, XINE_PARAM_AUDIO_VOLUME) / 100.0;
- return ev->volume;
-}
-
-static int
-em_spu_channel_count(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return xine_get_stream_info(ev->stream, XINE_STREAM_INFO_MAX_SPU_CHANNEL);
-}
-
-static void
-em_spu_channel_set(void *ef, int channel)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (channel < 0) channel = 0;
- ev->spu_channel = channel;
- _em_slave_event(ev, 9, NULL);
-}
-
-static int
-em_spu_channel_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- return xine_get_param(ev->stream, XINE_PARAM_SPU_CHANNEL);
-}
-
-static const char *
-em_spu_channel_name_get(void *ef, int channel)
-{
- Emotion_Xine_Video *ev;
- static char lang[XINE_LANG_MAX + 1];
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening) return NULL;
- lang[0] = 0;
- if (xine_get_spu_lang(ev->stream, channel, lang)) return lang;
- return NULL;
-}
-
-static void
-em_spu_channel_mute_set(void *ef, int mute)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- ev->spu_mute = mute;
- _em_slave_event(ev, 8, NULL);
-}
-
-static int
-em_spu_channel_mute_get(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- return ev->spu_mute;
-}
-
-static int
-em_chapter_count(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if (ev->opening || (!ev->play_ok)) return 0;
- if (xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_CHAPTERS))
- return 99;
- return 0;
-}
-
-static void
-em_chapter_set(void *ef EINA_UNUSED, int chapter EINA_UNUSED)
-{
-}
-
-static int
-em_chapter_get(void *ef EINA_UNUSED)
-{
- return 0;
-}
-
-static const char *
-em_chapter_name_get(void *ef EINA_UNUSED, int chapter EINA_UNUSED)
-{
- return NULL;
-}
-
-static void
-em_speed_set(void *ef EINA_UNUSED, double speed EINA_UNUSED)
-{
-}
-
-static double
-em_speed_get(void *ef EINA_UNUSED)
-{
- return 1.0;
-}
-
-static int
-em_eject(void *ef)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- _em_slave_event(ev, 7, NULL);
- return 1;
-}
-
-static const char *
-em_meta_get(void *ef, int meta)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)ef;
- if ((ev->opening) || (!ev->play_ok)) return NULL;
- switch (meta)
- {
- case META_TRACK_TITLE:
- return xine_get_meta_info(ev->stream, XINE_META_INFO_TITLE);
- break;
- case META_TRACK_ARTIST:
- return xine_get_meta_info(ev->stream, XINE_META_INFO_ARTIST);
- break;
- case META_TRACK_GENRE:
- return xine_get_meta_info(ev->stream, XINE_META_INFO_GENRE);
- break;
- case META_TRACK_COMMENT:
- return xine_get_meta_info(ev->stream, XINE_META_INFO_COMMENT);
- break;
- case META_TRACK_ALBUM:
- return xine_get_meta_info(ev->stream, XINE_META_INFO_ALBUM);
- break;
- case META_TRACK_YEAR:
- return xine_get_meta_info(ev->stream, XINE_META_INFO_YEAR);
- break;
- case META_TRACK_DISCID:
- return xine_get_meta_info(ev->stream, XINE_META_INFO_CDINDEX_DISCID);
- break;
- default:
- break;
- }
- return NULL;
-}
-
-static Eina_Bool
-_em_fd_active(void *data EINA_UNUSED, Ecore_Fd_Handler *fdh)
-{
- void *buf;
- int fd, len;
- Emotion_Xine_Video_Frame *fr;
-
- fd = ecore_main_fd_handler_fd_get(fdh);
- if (fd < 0) return EINA_TRUE;
- while ((len = read(fd, &buf, sizeof(buf))) > 0)
- {
- if (len == sizeof(buf))
- {
- Emotion_Xine_Video *ev;
-
- fr = buf;
- ev = _emotion_video_get(fr->obj);
- if (ev)
- {
- em_frame_done(ev);
- ev->cur_frame = fr;
- _em_get_pos_len(ev);
- if ((xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_VIDEO)) &&
- (xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_HANDLED)))
- {
- if (ev->video_mute) em_frame_done(ev);
- else _emotion_frame_new(fr->obj);
- }
- _emotion_frame_resize(fr->obj, fr->w, fr->h, fr->ratio);
- _emotion_video_pos_update(fr->obj, ev->pos, ev->len);
- }
- }
- }
- return EINA_TRUE;
-}
-
-static void
-_em_event(void *data, const xine_event_t *event)
-{
- void *buf[2];
- Emotion_Xine_Event *new_ev;
- Emotion_Xine_Video *ev;
-
- ev = data;
- new_ev = calloc(1, sizeof(Emotion_Xine_Event));
- if (!new_ev) return;
- new_ev->mtype = 0;
- new_ev->type = event->type;
- if (event->data)
- {
- new_ev->xine_event = malloc(event->data_length);
- if (!new_ev->xine_event)
- {
- free(new_ev);
- return;
- }
- memcpy(new_ev->xine_event, event->data, event->data_length);
- }
- buf[0] = data;
- buf[1] = new_ev;
- if (write(ev->fd_ev_write, buf, sizeof(buf)) < 0) perror("write");
-}
-
-static void
-_em_module_event(void *data, int type)
-{
- void *buf[2];
- Emotion_Xine_Event *new_ev;
- Emotion_Xine_Video *ev;
-
- ev = data;
- new_ev = calloc(1, sizeof(Emotion_Xine_Event));
- if (!new_ev) return;
- new_ev->mtype = type;
- new_ev->type = -1;
- buf[0] = data;
- buf[1] = new_ev;
- if (write(ev->fd_ev_write, buf, sizeof(buf)) < 0) perror("write");
-}
-
-static Eina_Bool
-_em_audio_only_poller(void *data)
-{
- Emotion_Xine_Video *ev;
-
- ev = data;
- _em_get_pos_len(ev);
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_em_fd_ev_active(void *data EINA_UNUSED, Ecore_Fd_Handler *fdh)
-{
- int fd, len;
- void *buf[2];
-
- fd = ecore_main_fd_handler_fd_get(fdh);
- while ((len = read(fd, buf, sizeof(buf))) > 0)
- {
- if (len == sizeof(buf))
- {
- Emotion_Xine_Video *ev;
- Emotion_Xine_Event *eev;
-
- ev = buf[0];
- eev = buf[1];
- if (eev->mtype != 0)
- {
- switch (eev->mtype)
- {
- case 1: /* init done */
- ev->play_ok = 1;
- break;
- case 2: /* open done */
- ev->play_ok = 1;
- if (ev->anim)
- {
- ecore_animator_del(ev->anim);
- ev->anim = NULL;
- }
- _emotion_open_done(ev->obj);
- _emotion_frame_resize(ev->obj, ev->w, ev->h, ev->ratio);
- break;
- case 3: /* shutdown done */
- if (ev->anim)
- {
- ecore_animator_del(ev->anim);
- ev->anim = NULL;
- }
- ev->play_ok = 1;
- break;
- case 4: /* play done */
- ev->play_ok = 1;
- if (ev->anim)
- {
- ecore_animator_del(ev->anim);
- ev->anim = NULL;
- }
- if ((!(xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_VIDEO) &&
- xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_HANDLED))) &&
- (xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_AUDIO) &&
- xine_get_stream_info(ev->stream, XINE_STREAM_INFO_AUDIO_HANDLED)))
- ev->anim = ecore_evas_animator_add(ev->obj, _em_audio_only_poller, ev);
- _emotion_playback_started(ev->obj);
- break;
- case 5: /* stop done */
- if (ev->anim)
- {
- ecore_animator_del(ev->anim);
- ev->anim = NULL;
- }
- ev->play_ok = 1;
- break;
- case 6: /* seek done */
- ev->play_ok = 1;
- _emotion_seek_done(ev->obj);
- _em_get_pos_len(ev);
- _emotion_video_pos_update(ev->obj, ev->pos, ev->len);
- break;
- case 7: /* eject done */
- if (ev->anim)
- {
- ecore_animator_del(ev->anim);
- ev->anim = NULL;
- }
- ev->play_ok = 1;
- break;
- case 8: /* spu mute done */
- ev->play_ok = 1;
- break;
- case 9: /* channel done */
- ev->play_ok = 1;
- break;
- case 10: /* volume done */
- ev->play_ok = 1;
- break;
- case 11: /* close done */
- if (ev->anim)
- {
- ecore_animator_del(ev->anim);
- ev->anim = NULL;
- }
- ev->play_ok = 1;
- break;
- case 15: /* get pos done */
- if (!EINA_DBL_EQ(ev->last_pos, ev->pos))
- {
- ev->last_pos = ev->pos;
- _emotion_video_pos_update(ev->obj, ev->pos, ev->len);
- }
- break;
- default:
- break;
- }
- }
- else
- {
- switch (eev->type)
- {
- case XINE_EVENT_UI_PLAYBACK_FINISHED:
- {
- ev->play = 0;
- _emotion_decode_stop(ev->obj);
- _emotion_playback_finished(ev->obj);
- }
- break;
- case XINE_EVENT_UI_CHANNELS_CHANGED:
- {
- _emotion_channels_change(ev->obj);
- }
- break;
- case XINE_EVENT_UI_SET_TITLE:
- {
- xine_ui_data_t *e;
-
- e = (xine_ui_data_t *)eev->xine_event;
- _emotion_title_set(ev->obj, e->str);
- }
- break;
- case XINE_EVENT_FRAME_FORMAT_CHANGE:
- break;
- case XINE_EVENT_UI_MESSAGE:
- {
- WRN("UI Message [FIXME: break this out to emotion api]");
- // e->type = error type(XINE_MSG_NO_ERROR, XINE_MSG_GENERAL_WARNING, XINE_MSG_UNKNOWN_HOST etc.)
- // e->messages is a list of messages DOUBLE null terminated
- }
- break;
- case XINE_EVENT_AUDIO_LEVEL:
- {
- _emotion_audio_level_change(ev->obj);
- WRN("Audio Level [FIXME: break this out to emotion api]");
- // e->left (0->100)
- // e->right
- // e->mute
- }
- break;
- case XINE_EVENT_PROGRESS:
- {
- xine_progress_data_t *e;
-
- e = (xine_progress_data_t *)eev->xine_event;
- DBG("PROGRESS: %i", e->percent);
- ev->buffer = e->percent;
- _emotion_progress_set(ev->obj, (char *)e->description, (double)e->percent / 100.0);
- }
- break;
- case XINE_EVENT_MRL_REFERENCE_EXT:
- {
- xine_mrl_reference_data_ext_t *e;
-
- e = (xine_mrl_reference_data_ext_t *)eev->xine_event;
- _emotion_file_ref_set(ev->obj, e->mrl, e->alternative);
- }
- break;
- case XINE_EVENT_UI_NUM_BUTTONS:
- {
- xine_ui_data_t *e;
-
- e = (xine_ui_data_t *)eev->xine_event;
- _emotion_spu_button_num_set(ev->obj, e->num_buttons);
- }
- break;
- case XINE_EVENT_SPU_BUTTON:
- {
- xine_spu_button_t *e;
-
- e = (xine_spu_button_t *)eev->xine_event;
- if (e->direction == 1)
- _emotion_spu_button_set(ev->obj, e->button);
- else
- _emotion_spu_button_set(ev->obj, -1);
- }
- break;
- case XINE_EVENT_DROPPED_FRAMES:
- {
- xine_dropped_frames_t *e;
-
- e = (xine_dropped_frames_t *)eev->xine_event;
- WRN("Dropped Frames (skipped %i) (discarded %i) [FIXME: break this out to the emotion api]", e->skipped_frames, e->discarded_frames);
- // e->skipped_frames = % frames skipped * 10
- // e->discarded_frames = % frames skipped * 10
- }
- break;
- default:
- // DBG("unknown event type %i", eev->type);
- break;
- }
- }
- if (eev->xine_event) free(eev->xine_event);
- free(eev);
- }
- }
- return EINA_TRUE;
-}
-
-static void *
-_em_get_pos_len_th(void *par)
-{
- Emotion_Xine_Video *ev;
-
- ev = (Emotion_Xine_Video *)par;
-
- for (;;)
- {
- pthread_mutex_lock(&(ev->get_pos_len_mutex));
- pthread_cond_wait(&(ev->get_pos_len_cond), &(ev->get_pos_len_mutex));
- pthread_mutex_unlock(&(ev->get_pos_len_mutex));
- if (ev->get_poslen)
- {
- int pos_stream = 0;
- int pos_time = 0;
- int length_time = 0;
-
- if (xine_get_pos_length(ev->stream, &pos_stream, &pos_time, &length_time))
- {
- if (length_time == 0)
- {
- ev->pos = (double)pos_stream / 65535;
- ev->len = 1.0;
- ev->no_time = 1;
- }
- else
- {
- ev->pos = (double)pos_time / 1000.0;
- ev->len = (double)length_time / 1000.0;
- ev->no_time = 0;
- }
- }
- ev->get_poslen = 0;
- _em_module_event(ev, 15); /* event - getpos done */
- //DBG("get pos %3.3f", ev->pos);
- }
- if (ev->delete_me)
- {
- ev->get_pos_thread_deleted = 1;
- return NULL;
- }
- }
- return NULL;
-}
-
-static void
-_em_get_pos_len(Emotion_Xine_Video *ev)
-{
- if (!ev->play_ok) return;
- ev->get_poslen = 1;
- pthread_mutex_lock(&(ev->get_pos_len_mutex));
- pthread_cond_broadcast(&(ev->get_pos_len_cond));
- pthread_mutex_unlock(&(ev->get_pos_len_mutex));
-}
-
-static const Emotion_Engine em_engine =
-{
- EMOTION_ENGINE_API_VERSION,
- EMOTION_ENGINE_PRIORITY_DEFAULT,
- "xine",
- em_add, /* add */
- em_del, /* del */
- em_file_open, /* file_open */
- em_file_close, /* file_close */
- em_play, /* play */
- em_stop, /* stop */
- em_size_get, /* size_get */
- em_pos_set, /* pos_set */
- em_len_get, /* len_get */
- em_buffer_size_get, /* buffer_size_get */
- em_fps_num_get, /* fps_num_get */
- em_fps_den_get, /* fps_den_get */
- em_fps_get, /* fps_get */
- em_pos_get, /* pos_get */
- em_vis_set, /* vis_set */
- em_vis_get, /* vis_get */
- em_vis_supported, /* vis_supported */
- em_ratio_get, /* ratio_get */
- em_video_handled, /* video_handled */
- em_audio_handled, /* audio_handled */
- em_seekable, /* seekable */
- em_frame_done, /* frame_done */
- em_format_get, /* format_get */
- em_video_data_size_get, /* video_data_size_get */
- em_yuv_rows_get, /* yuv_rows_get */
- em_bgra_data_get, /* bgra_data_get */
- em_event_feed, /* event_feed */
- em_event_mouse_button_feed, /* event_mouse_button_feed */
- em_event_mouse_move_feed, /* event_mouse_move_feed */
- em_video_channel_count, /* video_channel_count */
- em_video_channel_set, /* video_channel_set */
- em_video_channel_get, /* video_channel_get */
- em_video_subtitle_file_set, /* video_subtitle_file_set */
- em_video_subtitle_file_get, /* video_subtitle_file_get */
- em_video_channel_name_get, /* video_channel_name_get */
- em_video_channel_mute_set, /* video_channel_mute_set */
- em_video_channel_mute_get, /* video_channel_mute_get */
- em_audio_channel_count, /* audio_channel_count */
- em_audio_channel_set, /* audio_channel_set */
- em_audio_channel_get, /* audio_channel_get */
- em_audio_channel_name_get, /* audio_channel_name_get */
- em_audio_channel_mute_set, /* audio_channel_mute_set */
- em_audio_channel_mute_get, /* audio_channel_mute_get */
- em_audio_channel_volume_set, /* audio_channel_volume_set */
- em_audio_channel_volume_get, /* audio_channel_volume_get */
- em_spu_channel_count, /* spu_channel_count */
- em_spu_channel_set, /* spu_channel_set */
- em_spu_channel_get, /* spu_channel_get */
- em_spu_channel_name_get, /* spu_channel_name_get */
- em_spu_channel_mute_set, /* spu_channel_mute_set */
- em_spu_channel_mute_get, /* spu_channel_mute_get */
- em_chapter_count, /* chapter_count */
- em_chapter_set, /* chapter_set */
- em_chapter_get, /* chapter_get */
- em_chapter_name_get, /* chapter_name_get */
- em_speed_set, /* speed_set */
- em_speed_get, /* speed_get */
- em_eject, /* eject */
- em_meta_get, /* meta_get */
- NULL, /* priority_set */
- NULL, /* priority_get */
- NULL /* em_meta_artwork_get */
-};
-
-Eina_Bool
-xine_module_init(void)
-{
- if (_emotion_init_count > 0)
- {
- _emotion_init_count++;
- return EINA_TRUE;
- }
-
- eina_threads_init();
- eina_log_threads_enable();
- _emotion_xine_log_domain = eina_log_domain_register
- ("emotion-xine", EINA_COLOR_LIGHTCYAN);
- if (_emotion_xine_log_domain < 0)
- {
- EINA_LOG_CRIT("Could not register log domain 'emotion-xine'");
- return EINA_FALSE;
- }
-
- if (!_emotion_module_register(&em_engine))
- {
- CRI("Could not register module %p", &em_engine);
- eina_log_domain_unregister(_emotion_xine_log_domain);
- _emotion_xine_log_domain = -1;
- return EINA_FALSE;
- }
-
- _emotion_init_count = 1;
- return EINA_TRUE;
-}
-
-void
-xine_module_shutdown(void)
-{
- if (_emotion_init_count > 1)
- {
- _emotion_init_count--;
- return;
- }
- else if (_emotion_init_count == 0)
- {
- EINA_LOG_ERR("too many xine_module_shutdown()");
- return;
- }
- _emotion_init_count = 0;
-
- _emotion_module_unregister(&em_engine);
-
- eina_log_domain_unregister(_emotion_xine_log_domain);
- _emotion_xine_log_domain = -1;
-}
-
-#ifndef EMOTION_STATIC_BUILD_XINE
-
-EINA_MODULE_INIT(xine_module_init);
-EINA_MODULE_SHUTDOWN(xine_module_shutdown);
-
-#endif
-
-#if 0
-void
-em_debug(Emotion_Xine_Video *ev)
-{
- int has_chapters = 0;
- int max_spu = 0;
- int max_audio = 0;
- int video_channels = 0;
- int video_streams = 0;
- int video_seekable = 0;
- char *title;
- char *comment;
- char *artist;
- char *genre;
- char *album;
- char *year;
- char *cdindex_discid;
- int video_channel = 0;
- int audio_channel = 0;
- int spu_channel = 0;
- int video_ratio = 0;
- int audio_mode = 0;
-
-// return;
- has_chapters = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_HAS_CHAPTERS);
- max_spu = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_MAX_SPU_CHANNEL);
- max_audio = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_MAX_AUDIO_CHANNEL);
- video_channels = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_CHANNELS);
- video_streams = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_STREAMS);
- video_seekable = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_SEEKABLE);
- title = xine_get_meta_info(ev->stream, XINE_META_INFO_TITLE);
- comment = xine_get_meta_info(ev->stream, XINE_META_INFO_COMMENT);
- artist = xine_get_meta_info(ev->stream, XINE_META_INFO_ARTIST);
- genre = xine_get_meta_info(ev->stream, XINE_META_INFO_GENRE);
- album = xine_get_meta_info(ev->stream, XINE_META_INFO_ALBUM);
- year = xine_get_meta_info(ev->stream, XINE_META_INFO_YEAR);
- cdindex_discid = xine_get_meta_info(ev->stream, XINE_META_INFO_CDINDEX_DISCID);
- video_channel = xine_get_param(ev->stream, XINE_PARAM_VIDEO_CHANNEL);
- audio_channel = xine_get_param(ev->stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL);
- spu_channel = xine_get_param(ev->stream, XINE_PARAM_SPU_CHANNEL);
- video_ratio = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_VIDEO_RATIO);
- audio_mode = xine_get_stream_info(ev->stream, XINE_STREAM_INFO_AUDIO_MODE);
- DBG("has_chapters = %i", has_chapters);
- DBG("max_spu = %i", max_spu);
- DBG("max_audio = %i", max_audio);
- DBG("video_channels = %i", video_channels);
- DBG("video_streams = %i", video_streams);
- DBG("video_seekable = %i", video_seekable);
- DBG("title = %s", title);
- DBG("comment = %s", comment);
- DBG("artist = %s", artist);
- DBG("genre = %s", genre);
- DBG("album = %s", album);
- DBG("year = %s", year);
- DBG("cdindex_discid = %s", cdindex_discid);
- DBG("video_channel = %i", video_channel);
- DBG("audio_channel = %i", audio_channel);
- DBG("spu_channels = %i", spu_channel);
- DBG("video_ratio = %i", video_ratio);
- DBG("audio_mode = %i", audio_mode);
- {
- int i;
-
- for (i = 0; i <= max_audio; i++)
- {
- char lang[XINE_LANG_MAX + 1];
- char buf[128] = "NONE";
-
- lang[0] = 0;
- if (xine_get_audio_lang(ev->stream, i, lang))
- eina_strlcpy(buf, lang, sizeof(buf));
- DBG(" AUDIO %i = %s", i, buf);
- }
- for (i = 0; i <= max_spu; i++)
- {
- char lang[XINE_LANG_MAX + 1];
- char buf[128] = "NONE";
-
- lang[0] = 0;
- if (xine_get_spu_lang(ev->stream, i, lang))
- eina_strlcpy(buf, lang, sizeof(buf));
- DBG(" SPU %i = %s", i, buf);
- }
- }
-}
-#endif
diff --git a/src/modules/emotion/xine/emotion_xine.h b/src/modules/emotion/xine/emotion_xine.h
deleted file mode 100644
index 9807624e14..0000000000
--- a/src/modules/emotion/xine/emotion_xine.h
+++ /dev/null
@@ -1,118 +0,0 @@
-#ifndef EMOTION_XINE_H
-#define EMOTION_XINE_H
-
-#include <xine.h>
-#include <xine/xine_plugin.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <pthread.h>
-
-typedef struct _Emotion_Xine_Video Emotion_Xine_Video;
-typedef struct _Emotion_Xine_Video_Frame Emotion_Xine_Video_Frame;
-typedef struct _Emotion_Xine_Event Emotion_Xine_Event;
-
-struct _Emotion_Xine_Video
-{
- xine_t *decoder;
- xine_video_port_t *video;
- xine_audio_port_t *audio;
- xine_stream_t *stream;
- xine_event_queue_t *queue;
- volatile double len;
- volatile double pos;
- volatile double last_pos;
- volatile double volume;
- volatile double buffer;
- double fps;
- double ratio;
- int w, h;
- Evas_Object *obj;
- volatile Emotion_Xine_Video_Frame *cur_frame;
- volatile int get_poslen;
- volatile int spu_channel;
- volatile int audio_channel;
- volatile int video_channel;
- volatile int fq;
- Emotion_Vis vis;
- int fd_read;
- int fd_write;
- Ecore_Fd_Handler *fd_handler;
- int fd_ev_read;
- int fd_ev_write;
- Ecore_Fd_Handler *fd_ev_handler;
- Ecore_Animator *anim;
- unsigned char play : 1;
- unsigned char just_loaded : 1;
- unsigned char video_mute : 1;
- unsigned char audio_mute : 1;
- unsigned char spu_mute : 1;
- Eina_Bool opt_no_video : 1;
- Eina_Bool opt_no_audio : 1;
- volatile unsigned char delete_me : 1;
- volatile unsigned char no_time : 1;
- volatile unsigned char opening : 1;
- volatile unsigned char closing : 1;
- volatile unsigned char have_vo : 1;
- volatile unsigned char play_ok : 1;
-
- pthread_t get_pos_len_th;
- pthread_cond_t get_pos_len_cond;
- pthread_mutex_t get_pos_len_mutex;
-
- pthread_t slave_th;
- int fd_slave_read;
- int fd_slave_write;
-
- unsigned char get_pos_thread_deleted : 1;
-};
-
-struct _Emotion_Xine_Video_Frame
-{
- int w, h;
- double ratio;
- Emotion_Format format;
- unsigned char *y, *u, *v;
- unsigned char *bgra_data;
- int y_stride, u_stride, v_stride;
- Evas_Object *obj;
- double timestamp;
- void (*done_func)(void *data);
- void *done_data;
- void *frame;
-};
-
-struct _Emotion_Xine_Event
-{
- int type;
- void *xine_event;
- int mtype;
-};
-
-#ifdef DBG
-#undef DBG
-#endif
-#define DBG(...) EINA_LOG_DOM_DBG(_emotion_xine_log_domain, __VA_ARGS__)
-
-#ifdef INF
-#undef INF
-#endif
-#define INF(...) EINA_LOG_DOM_INFO(_emotion_xine_log_domain, __VA_ARGS__)
-
-#ifdef WRN
-#undef WRN
-#endif
-#define WRN(...) EINA_LOG_DOM_WARN(_emotion_xine_log_domain, __VA_ARGS__)
-
-#ifdef ERR
-#undef ERR
-#endif
-#define ERR(...) EINA_LOG_DOM_ERR(_emotion_xine_log_domain, __VA_ARGS__)
-
-#ifdef CRI
-#undef CRI
-#endif
-#define CRI(...) EINA_LOG_DOM_CRIT(_emotion_xine_log_domain, __VA_ARGS__)
-
-extern int _emotion_xine_log_domain;
-
-#endif
diff --git a/src/modules/emotion/xine/emotion_xine_vo_out.c b/src/modules/emotion/xine/emotion_xine_vo_out.c
deleted file mode 100644
index 01c18f8894..0000000000
--- a/src/modules/emotion/xine/emotion_xine_vo_out.c
+++ /dev/null
@@ -1,766 +0,0 @@
-/***************************************************************************/
-/*** emotion xine display engine ***/
-/***************************************************************************/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <Eina.h>
-#include <Evas.h>
-#include <Ecore.h>
-
-#include "emotion_modules.h"
-#include "emotion_xine.h"
-
-#include <xine.h>
-#include <xine/video_out.h>
-#include <xine/xine_internal.h>
-#include <xine/xineutils.h>
-#include <xine/vo_scale.h>
-
-#define BLEND_BYTE(dst, src, o) (((src)*o + ((dst)*(0xf-o)))/0xf)
-
-/***************************************************************************/
-typedef struct _Emotion_Frame Emotion_Frame;
-typedef struct _Emotion_Driver Emotion_Driver;
-typedef struct _Emotion_Class Emotion_Class;
-typedef struct _Emotion_Lut Emotion_Lut;
-
-struct _Emotion_Frame
-{
- vo_frame_t vo_frame;
- int width;
- int height;
- double ratio;
- int format;
- xine_t *xine;
-
- Emotion_Xine_Video_Frame frame;
- unsigned char in_use : 1;
-};
-
-struct _Emotion_Driver
-{
- vo_driver_t vo_driver;
- config_values_t *config;
- int ratio;
- xine_t *xine;
- Emotion_Xine_Video *ev;
-};
-
-struct _Emotion_Class
-{
- video_driver_class_t driver_class;
- config_values_t *config;
- xine_t *xine;
-};
-
-struct _Emotion_Lut
-{
- uint8_t cb : 8;
- uint8_t cr : 8;
- uint8_t y : 8;
- uint8_t foo : 8;
-} __attribute__ ((packed));
-
-typedef void (*done_func_type)(void *data);
-
-/***************************************************************************/
-static void *_emotion_class_init (xine_t *xine, void *visual);
-static void _emotion_class_dispose (video_driver_class_t *driver_class);
-static char *_emotion_class_identifier_get (video_driver_class_t *driver_class);
-static char *_emotion_class_description_get (video_driver_class_t *driver_class);
-
-static vo_driver_t *_emotion_open (video_driver_class_t *driver_class, const void *visual);
-static void _emotion_dispose (vo_driver_t *vo_driver);
-
-static int _emotion_redraw (vo_driver_t *vo_driver);
-
-static uint32_t _emotion_capabilities_get (vo_driver_t *vo_driver);
-static int _emotion_gui_data_exchange (vo_driver_t *vo_driver, int data_type, void *data);
-
-static int _emotion_property_set (vo_driver_t *vo_driver, int property, int value);
-static int _emotion_property_get (vo_driver_t *vo_driver, int property);
-static void _emotion_property_min_max_get (vo_driver_t *vo_driver, int property, int *min, int *max);
-
-static vo_frame_t *_emotion_frame_alloc (vo_driver_t *vo_driver);
-static void _emotion_frame_dispose (vo_frame_t *vo_frame);
-static void _emotion_frame_format_update (vo_driver_t *vo_driver, vo_frame_t *vo_frame, uint32_t width, uint32_t height, double ratio, int format, int flags);
-static void _emotion_frame_display (vo_driver_t *vo_driver, vo_frame_t *vo_frame);
-static void _emotion_frame_field (vo_frame_t *vo_frame, int which_field);
-
-static void _emotion_frame_data_free (Emotion_Frame *fr);
-static void _emotion_frame_data_unlock (Emotion_Frame *fr);
-
-static void _emotion_overlay_begin (vo_driver_t *vo_driver, vo_frame_t *vo_frame, int changed);
-static void _emotion_overlay_end (vo_driver_t *vo_driver, vo_frame_t *vo_frame);
-static void _emotion_overlay_blend (vo_driver_t *vo_driver, vo_frame_t *vo_frame, vo_overlay_t *vo_overlay);
-
-static void _emotion_overlay_mem_blend_8 (uint8_t *mem, uint8_t val, uint8_t o, size_t sz);
-static void _emotion_overlay_blend_yuv (uint8_t *dst_base[3], vo_overlay_t * img_overl, int dst_width, int dst_height, int dst_pitches[3]);
-
-static void _emotion_yuy2_to_bgra32 (int width, int height, unsigned char *src, unsigned char *dst);
-
-/***************************************************************************/
-static vo_info_t _emotion_info =
-{
- 1, /* priority */
- XINE_VISUAL_TYPE_NONE /* visual type */
-};
-
-plugin_info_t emotion_xine_plugin_info[] =
-{
- { PLUGIN_VIDEO_OUT, 21, "emotion", XINE_VERSION_CODE, &_emotion_info, _emotion_class_init },
- { PLUGIN_VIDEO_OUT, 22, "emotion", XINE_VERSION_CODE, &_emotion_info, _emotion_class_init },
- { PLUGIN_NONE, 0, "", 0, NULL, NULL }
-};
-
-/***************************************************************************/
-static void *
-_emotion_class_init(xine_t *xine, void *visual EINA_UNUSED)
-{
- Emotion_Class *cl;
-
-// DBG("");
- cl = (Emotion_Class *) malloc(sizeof(Emotion_Class));
- if (!cl) return NULL;
- cl->driver_class.open_plugin = _emotion_open;
-#if XINE_MAJOR_VERSION < 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION < 2)
- cl->driver_class.get_identifier = _emotion_class_identifier_get;
- cl->driver_class.get_description = _emotion_class_description_get;
-#else
- cl->driver_class.identifier = _emotion_class_identifier_get(NULL);
- cl->driver_class.description = _emotion_class_description_get(NULL);
-#endif
- cl->driver_class.dispose = _emotion_class_dispose;
- cl->config = xine->config;
- cl->xine = xine;
-
- return cl;
-}
-
-static void
-_emotion_class_dispose(video_driver_class_t *driver_class)
-{
- Emotion_Class *cl;
-
- cl = (Emotion_Class *)driver_class;
- free(cl);
-}
-
-static char *
-_emotion_class_identifier_get(video_driver_class_t *driver_class EINA_UNUSED)
-{
- return "emotion";
-}
-
-static char *
-_emotion_class_description_get(video_driver_class_t *driver_class EINA_UNUSED)
-{
- return "Emotion xine video output plugin";
-}
-
-/***************************************************************************/
-static vo_driver_t *
-_emotion_open(video_driver_class_t *driver_class, const void *visual)
-{
- Emotion_Class *cl;
- Emotion_Driver *dv;
-
- cl = (Emotion_Class *)driver_class;
- /* visual here is the data ptr passed to xine_open_video_driver() */
-// DBG("");
- dv = (Emotion_Driver *)malloc(sizeof(Emotion_Driver));
- if (!dv) return NULL;
-
- dv->config = cl->config;
- dv->xine = cl->xine;
- dv->ratio = XINE_VO_ASPECT_AUTO;
- dv->vo_driver.get_capabilities = _emotion_capabilities_get;
- dv->vo_driver.alloc_frame = _emotion_frame_alloc;
- dv->vo_driver.update_frame_format = _emotion_frame_format_update;
- dv->vo_driver.overlay_begin = _emotion_overlay_begin;
- dv->vo_driver.overlay_blend = _emotion_overlay_blend;
- dv->vo_driver.overlay_end = _emotion_overlay_end;
- dv->vo_driver.display_frame = _emotion_frame_display;
- dv->vo_driver.get_property = _emotion_property_get;
- dv->vo_driver.set_property = _emotion_property_set;
- dv->vo_driver.get_property_min_max = _emotion_property_min_max_get;
- dv->vo_driver.gui_data_exchange = _emotion_gui_data_exchange;
- dv->vo_driver.dispose = _emotion_dispose;
- dv->vo_driver.redraw_needed = _emotion_redraw;
- dv->ev = (Emotion_Xine_Video *)visual;
- dv->ev->have_vo = 1;
- DBG("vo_driver = %p", &dv->vo_driver);
- return &dv->vo_driver;
-}
-
-static void
-_emotion_dispose(vo_driver_t *vo_driver)
-{
- Emotion_Driver *dv;
-
- dv = (Emotion_Driver *)vo_driver;
- dv->ev->have_vo = 0;
- DBG("vo_driver = %p", dv);
- free(dv);
-}
-
-/***************************************************************************/
-static int
-_emotion_redraw(vo_driver_t *vo_driver EINA_UNUSED)
-{
-// DBG("");
- return 0;
-}
-
-/***************************************************************************/
-static uint32_t
-_emotion_capabilities_get(vo_driver_t *vo_driver EINA_UNUSED)
-{
-// DBG("");
- return VO_CAP_YV12 | VO_CAP_YUY2;
-}
-
-/***************************************************************************/
-static int
-_emotion_gui_data_exchange(vo_driver_t *vo_driver EINA_UNUSED, int data_type, void *data EINA_UNUSED)
-{
-// DBG("");
- switch (data_type)
- {
- case XINE_GUI_SEND_COMPLETION_EVENT:
- break;
- case XINE_GUI_SEND_DRAWABLE_CHANGED:
- break;
- case XINE_GUI_SEND_EXPOSE_EVENT:
- break;
- case XINE_GUI_SEND_TRANSLATE_GUI_TO_VIDEO:
- break;
- case XINE_GUI_SEND_VIDEOWIN_VISIBLE:
- break;
- case XINE_GUI_SEND_SELECT_VISUAL:
- break;
- default:
- break;
- }
- return 0;
-}
-
-/***************************************************************************/
-static int
-_emotion_property_set(vo_driver_t *vo_driver, int property, int value)
-{
- Emotion_Driver *dv;
-
- dv = (Emotion_Driver *)vo_driver;
-// DBG("");
- switch (property)
- {
- case VO_PROP_ASPECT_RATIO:
- if (value >= XINE_VO_ASPECT_NUM_RATIOS)
- value = XINE_VO_ASPECT_AUTO;
-// DBG("DRIVER RATIO SET %i!", value);
- dv->ratio = value;
- break;
- default:
- break;
- }
- return value;
-}
-
-static int
-_emotion_property_get(vo_driver_t *vo_driver, int property)
-{
- Emotion_Driver *dv;
-
- dv = (Emotion_Driver *)vo_driver;
-// DBG("");
- switch (property)
- {
- case VO_PROP_ASPECT_RATIO:
- return dv->ratio;
- break;
- default:
- break;
- }
- return 0;
-}
-
-static void
-_emotion_property_min_max_get(vo_driver_t *vo_driver EINA_UNUSED, int property EINA_UNUSED, int *min, int *max)
-{
-// DBG("");
- *min = 0;
- *max = 0;
-}
-
-/***************************************************************************/
-static vo_frame_t *
-_emotion_frame_alloc(vo_driver_t *vo_driver EINA_UNUSED)
-{
- Emotion_Frame *fr;
-
-// DBG("");
- fr = (Emotion_Frame *)calloc(1, sizeof(Emotion_Frame));
- if (!fr) return NULL;
-
- fr->vo_frame.base[0] = NULL;
- fr->vo_frame.base[1] = NULL;
- fr->vo_frame.base[2] = NULL;
-
- fr->vo_frame.proc_slice = NULL;
- fr->vo_frame.proc_frame = NULL;
- fr->vo_frame.field = _emotion_frame_field;
- fr->vo_frame.dispose = _emotion_frame_dispose;
- fr->vo_frame.driver = vo_driver;
-
- return (vo_frame_t *)fr;
-}
-
-static void
-_emotion_frame_dispose(vo_frame_t *vo_frame)
-{
- Emotion_Frame *fr;
-
- fr = (Emotion_Frame *)vo_frame;
-// DBG("");
- _emotion_frame_data_free(fr);
- free(fr);
-}
-
-static void
-_emotion_frame_format_update(vo_driver_t *vo_driver, vo_frame_t *vo_frame, uint32_t width, uint32_t height, double ratio, int format, int flags EINA_UNUSED)
-{
- Emotion_Driver *dv;
- Emotion_Frame *fr;
-
- dv = (Emotion_Driver *)vo_driver;
- fr = (Emotion_Frame *)vo_frame;
-
- if ((fr->width != (int)width) || (fr->height != (int)height) ||
- (fr->format != format) || (!fr->vo_frame.base[0]))
- {
-// DBG("");
- _emotion_frame_data_free(fr);
-
- fr->width = width;
- fr->height = height;
- fr->format = format;
-
- switch (format)
- {
- case XINE_IMGFMT_YV12:
- {
- int y_size, uv_size;
-
- fr->frame.format = EMOTION_FORMAT_YV12;
- fr->vo_frame.pitches[0] = 8 * ((width + 7) / 8);
- fr->vo_frame.pitches[1] = 8 * ((width + 15) / 16);
- fr->vo_frame.pitches[2] = 8 * ((width + 15) / 16);
-
- y_size = fr->vo_frame.pitches[0] * height;
- uv_size = fr->vo_frame.pitches[1] * ((height + 1) / 2);
-
- fr->vo_frame.base[0] = malloc(y_size + (2 * uv_size));
- fr->vo_frame.base[1] = fr->vo_frame.base[0] + y_size + uv_size;
- fr->vo_frame.base[2] = fr->vo_frame.base[0] + y_size;
- fr->frame.w = fr->width;
- fr->frame.h = fr->height;
- fr->frame.ratio = fr->vo_frame.ratio;
- fr->frame.y = fr->vo_frame.base[0];
- fr->frame.u = fr->vo_frame.base[1];
- fr->frame.v = fr->vo_frame.base[2];
- fr->frame.bgra_data = NULL;
- fr->frame.y_stride = fr->vo_frame.pitches[0];
- fr->frame.u_stride = fr->vo_frame.pitches[1];
- fr->frame.v_stride = fr->vo_frame.pitches[2];
- fr->frame.obj = dv->ev->obj;
- }
- break;
- case XINE_IMGFMT_YUY2:
- {
- fr->frame.format = EMOTION_FORMAT_BGRA;
- fr->vo_frame.pitches[0] = 8 * ((width + 3) / 4);
- fr->vo_frame.pitches[1] = 0;
- fr->vo_frame.pitches[2] = 0;
-
- fr->vo_frame.base[0] = malloc(fr->vo_frame.pitches[0] * height);
- fr->vo_frame.base[1] = NULL;
- fr->vo_frame.base[2] = NULL;
-
- fr->frame.w = fr->width;
- fr->frame.h = fr->height;
- fr->frame.ratio = fr->vo_frame.ratio;
- fr->frame.y = NULL;
- fr->frame.u = NULL;
- fr->frame.v = NULL;
- fr->frame.bgra_data = malloc(fr->width * fr->height * 4);
- fr->frame.y_stride = 0;
- fr->frame.u_stride = 0;
- fr->frame.v_stride = 0;
- fr->frame.obj = dv->ev->obj;
- }
- break;
- default:
- break;
- }
- if (((format == XINE_IMGFMT_YV12)
- && ((!fr->vo_frame.base[0])
- || (!fr->vo_frame.base[1])
- || (!fr->vo_frame.base[2])))
- || ((format == XINE_IMGFMT_YUY2)
- && ((!fr->vo_frame.base[0])
- || (!fr->frame.bgra_data))))
- {
- _emotion_frame_data_free(fr);
- }
- }
- fr->frame.ratio = fr->vo_frame.ratio;
- fr->ratio = ratio;
-}
-
-static void
-_emotion_frame_display(vo_driver_t *vo_driver, vo_frame_t *vo_frame)
-{
- Emotion_Driver *dv;
- Emotion_Frame *fr;
-
- dv = (Emotion_Driver *)vo_driver;
- fr = (Emotion_Frame *)vo_frame;
-// DBG("fq %i %p", dv->ev->fq, dv->ev);
-// if my frame queue is too deep ( > 4 frames) simply block and wait for them
-// to drain
-// while (dv->ev->fq > 4) usleep(1);
- if (dv->ev)
- {
- void *buf;
-
- if (dv->ev->closing) return;
- if (fr->format == XINE_IMGFMT_YUY2)
- {
- _emotion_yuy2_to_bgra32(fr->width, fr->height, fr->vo_frame.base[0], fr->frame.bgra_data);
- }
-
- buf = &(fr->frame);
- fr->frame.timestamp = (double)fr->vo_frame.vpts / 90000.0;
- fr->frame.done_func = (done_func_type)_emotion_frame_data_unlock;
- fr->frame.done_data = fr;
-// DBG("FRAME FOR %p", dv->ev);
- if (write(dv->ev->fd_write, &buf, sizeof(void *)) < 0) perror("write");
-// DBG("-- FRAME DEC %p == %i", fr->frame.obj, ret);
- fr->in_use = 1;
- dv->ev->fq++;
- }
- /* hmm - must find a way to sanely copy data out... FIXME problem */
-// fr->vo_frame.free(&fr->vo_frame);
-}
-
-static void
-_emotion_frame_field(vo_frame_t *vo_frame EINA_UNUSED, int which_field EINA_UNUSED)
-{
-// DBG("");
-}
-
-/***************************************************************************/
-static void
-_emotion_frame_data_free(Emotion_Frame *fr)
-{
- if (fr->vo_frame.base[0])
- {
- free(fr->vo_frame.base[0]);
- fr->vo_frame.base[0] = NULL;
- fr->vo_frame.base[1] = NULL;
- fr->vo_frame.base[2] = NULL;
- fr->frame.y = fr->vo_frame.base[0];
- fr->frame.u = fr->vo_frame.base[1];
- fr->frame.v = fr->vo_frame.base[2];
- }
- if (fr->frame.bgra_data)
- {
- free(fr->frame.bgra_data);
- fr->frame.bgra_data = NULL;
- }
-}
-
-static void
-_emotion_frame_data_unlock(Emotion_Frame *fr)
-{
-// DBG("");
- if (fr->in_use)
- {
- fr->vo_frame.free(&fr->vo_frame);
- fr->in_use = 0;
- }
-}
-
-/***************************************************************************/
-static void
-_emotion_overlay_begin(vo_driver_t *vo_driver EINA_UNUSED, vo_frame_t *vo_frame EINA_UNUSED, int changed EINA_UNUSED)
-{
-// DBG("");
-}
-
-static void
-_emotion_overlay_end(vo_driver_t *vo_driver EINA_UNUSED, vo_frame_t *vo_frame EINA_UNUSED)
-{
-// DBG("");
-}
-
-static void
-_emotion_overlay_blend(vo_driver_t *vo_driver EINA_UNUSED, vo_frame_t *vo_frame, vo_overlay_t *vo_overlay EINA_UNUSED)
-{
- Emotion_Frame *fr;
-
- fr = (Emotion_Frame *)vo_frame;
-// DBG("");
- _emotion_overlay_blend_yuv(fr->vo_frame.base, vo_overlay,
- fr->width, fr->height,
- fr->vo_frame.pitches);
-}
-
-static void _emotion_overlay_mem_blend_8(uint8_t *mem, uint8_t val, uint8_t o, size_t sz)
-{
- uint8_t *limit = mem + sz;
- while (mem < limit)
- {
- *mem = BLEND_BYTE(*mem, val, o);
- mem++;
- }
-}
-
-static void _emotion_overlay_blend_yuv(uint8_t *dst_base[3], vo_overlay_t * img_overl, int dst_width, int dst_height, int dst_pitches[3])
-{
- Emotion_Lut *my_clut;
- uint8_t *my_trans;
- int src_width;
- int src_height;
- rle_elem_t *rle;
- rle_elem_t *rle_limit;
- int x_off;
- int y_off;
- int ymask, xmask;
- int rle_this_bite;
- int rle_remainder;
- int rlelen;
- int x, y;
- int hili_right;
- uint8_t clr = 0;
-
- src_width = img_overl->width;
- src_height = img_overl->height;
- rle = img_overl->rle;
- rle_limit = rle + img_overl->num_rle;
- x_off = img_overl->x;
- y_off = img_overl->y;
-
- if (!rle) return;
-
- uint8_t *dst_y = dst_base[0] + dst_pitches[0] * y_off + x_off;
- uint8_t *dst_cr = dst_base[2] + (y_off / 2) * dst_pitches[1] + (x_off / 2) + 1;
- uint8_t *dst_cb = dst_base[1] + (y_off / 2) * dst_pitches[2] + (x_off / 2) + 1;
- my_clut = (Emotion_Lut *) img_overl->hili_color;
- my_trans = img_overl->hili_trans;
-
- /* avoid wraping overlay if drawing to small image */
- if( (x_off + img_overl->hili_right) < dst_width )
- hili_right = img_overl->hili_right;
- else
- hili_right = dst_width - 1 - x_off;
-
- /* avoid buffer overflow */
- if( (src_height + y_off) >= dst_height )
- src_height = dst_height - 1 - y_off;
-
- rlelen=rle_remainder=0;
- for (y = 0; y < src_height; y++)
- {
- ymask = ((img_overl->hili_top > y) || (img_overl->hili_bottom < y));
- xmask = 0;
-
- for (x = 0; x < src_width;)
- {
- uint16_t o;
-
- if (rlelen == 0)
- {
- rle_remainder = rlelen = rle->len;
- clr = rle->color;
- rle++;
- }
- if (rle_remainder == 0)
- {
- rle_remainder = rlelen;
- }
- if ((rle_remainder + x) > src_width)
- {
- /* Do something for long rlelengths */
- rle_remainder = src_width - x;
- }
-
- if (ymask == 0)
- {
- if (x <= img_overl->hili_left)
- {
- /* Starts outside clip area */
- if ((x + rle_remainder - 1) > img_overl->hili_left )
- {
- /* Cutting needed, starts outside, ends inside */
- rle_this_bite = (img_overl->hili_left - x + 1);
- rle_remainder -= rle_this_bite;
- rlelen -= rle_this_bite;
- my_clut = (Emotion_Lut *) img_overl->color;
- my_trans = img_overl->trans;
- xmask = 0;
- }
- else
- {
- /* no cutting needed, starts outside, ends outside */
- rle_this_bite = rle_remainder;
- rle_remainder = 0;
- rlelen -= rle_this_bite;
- my_clut = (Emotion_Lut *) img_overl->color;
- my_trans = img_overl->trans;
- xmask = 0;
- }
- }
- else if (x < hili_right)
- {
- /* Starts inside clip area */
- if ((x + rle_remainder) > hili_right )
- {
- /* Cutting needed, starts inside, ends outside */
- rle_this_bite = (hili_right - x);
- rle_remainder -= rle_this_bite;
- rlelen -= rle_this_bite;
- my_clut = (Emotion_Lut *) img_overl->hili_color;
- my_trans = img_overl->hili_trans;
- xmask++;
- }
- else
- {
- /* no cutting needed, starts inside, ends inside */
- rle_this_bite = rle_remainder;
- rle_remainder = 0;
- rlelen -= rle_this_bite;
- my_clut = (Emotion_Lut *) img_overl->hili_color;
- my_trans = img_overl->hili_trans;
- xmask++;
- }
- }
- else if (x >= hili_right)
- {
- /* Starts outside clip area, ends outsite clip area */
- if ((x + rle_remainder ) > src_width )
- {
- /* Cutting needed, starts outside, ends at right edge */
- /* It should never reach here due to the earlier test of src_width */
- rle_this_bite = (src_width - x );
- rle_remainder -= rle_this_bite;
- rlelen -= rle_this_bite;
- my_clut = (Emotion_Lut *) img_overl->color;
- my_trans = img_overl->trans;
- xmask = 0;
- }
- else
- {
- /* no cutting needed, starts outside, ends outside */
- rle_this_bite = rle_remainder;
- rle_remainder = 0;
- rlelen -= rle_this_bite;
- my_clut = (Emotion_Lut *) img_overl->color;
- my_trans = img_overl->trans;
- xmask = 0;
- }
- }
- }
- else
- {
- /* Outside clip are due to y */
- /* no cutting needed, starts outside, ends outside */
- rle_this_bite = rle_remainder;
- rle_remainder = 0;
- rlelen -= rle_this_bite;
- my_clut = (Emotion_Lut *) img_overl->color;
- my_trans = img_overl->trans;
- xmask = 0;
- }
- o = my_trans[clr];
- if (o)
- {
- if (o >= 15)
- {
- memset(dst_y + x, my_clut[clr].y, rle_this_bite);
- if (y & 1)
- {
- memset(dst_cr + (x >> 1), my_clut[clr].cr, (rle_this_bite+1) >> 1);
- memset(dst_cb + (x >> 1), my_clut[clr].cb, (rle_this_bite+1) >> 1);
- }
- }
- else
- {
- _emotion_overlay_mem_blend_8(dst_y + x, my_clut[clr].y, o, rle_this_bite);
- if (y & 1)
- {
- /* Blending cr and cb should use a different function, with pre -128 to each sample */
- _emotion_overlay_mem_blend_8(dst_cr + (x >> 1), my_clut[clr].cr, o, (rle_this_bite+1) >> 1);
- _emotion_overlay_mem_blend_8(dst_cb + (x >> 1), my_clut[clr].cb, o, (rle_this_bite+1) >> 1);
- }
- }
- }
- x += rle_this_bite;
- if (rle >= rle_limit)
- {
- break;
- }
- }
- if (rle >= rle_limit)
- {
- break;
- }
-
- dst_y += dst_pitches[0];
-
- if (y & 1)
- {
- dst_cr += dst_pitches[2];
- dst_cb += dst_pitches[1];
- }
- }
-}
-
-//TODO: Really need to improve this converter!
-#define LIMIT(x) ((x) > 0xff ? 0xff : ((x) < 0 ? 0 : (x)))
-
-static void
-_emotion_yuy2_to_bgra32(int width, int height, unsigned char *src, unsigned char *dst)
-{
- int i, j;
- unsigned char *y, *u, *v;
-
- y = src;
- u = src + 1;
- v = src + 3;
- for (i = 0; i < width; i++)
- {
- for (j = 0; j < height; j++)
- {
- *dst++ = LIMIT(1.164 * (*y - 16) + 2.018 * (*u - 128));
- *dst++ = LIMIT(1.164 * (*y - 16) - 0.813 * (*v - 128) - 0.391 * (*u - 128));
- *dst++ = LIMIT(1.164 * (*y - 16) + 1.596 * (*v - 128));
- *dst++ = 0;
-
- y += 2;
- if (j % 2 == 1)
- {
- u += 4;
- v += 4;
- }
- }
- }
-}
diff --git a/src/modules/emotion/xine/meson.build b/src/modules/emotion/xine/meson.build
deleted file mode 100644
index 038d6d2eb1..0000000000
--- a/src/modules/emotion/xine/meson.build
+++ /dev/null
@@ -1,16 +0,0 @@
-generic_src = files([
- 'emotion_xine.h',
- 'emotion_xine.c',
- 'emotion_xine_vo_out.c',
-])
-
-generic_deps = dependency('libxine')
-
-shared_module(emotion_loader,
- generic_src,
- include_directories : config_dir,
- dependencies: [eina, evas, emotion, generic_deps],
- install: true,
- install_dir : mod_install_dir,
- c_args : package_c_args,
-)
diff --git a/src/modules/ethumb/emotion/emotion.c b/src/modules/ethumb/emotion/emotion.c
index bc343df802..0a8447f49b 100644
--- a/src/modules/ethumb/emotion/emotion.c
+++ b/src/modules/ethumb/emotion/emotion.c
@@ -122,10 +122,10 @@ _video_pos_set(struct _emotion_plugin *_plugin)
_plugin->first = EINA_TRUE;
if ((pos <= 0) || (pos >= 1))
- _plugin->pi = (0.1 * _plugin->len) +
+ _plugin->pi = (0.1 * _plugin->len) +
(_plugin->pcount * _plugin->len * interval);
else
- _plugin->pi = (pos * _plugin->len) +
+ _plugin->pi = (pos * _plugin->len) +
(_plugin->pcount * _plugin->len * interval);
emotion_object_position_set(_plugin->video, _plugin->pi);
@@ -319,8 +319,9 @@ _frame_grab(void *data)
pixels = ecore_evas_buffer_pixels_get(ee);
snprintf(buf, sizeof(buf), "images/%d", _plugin->frnum);
- eet_data_image_write(_plugin->ef, buf, pixels, _plugin->w, _plugin->h,
- 0, compress, quality, quality);
+ if (!eet_data_image_write(_plugin->ef, buf, pixels, _plugin->w, _plugin->h,
+ 0, compress, quality, quality))
+ return EINA_TRUE;
_plugin->frnum++;
}
diff --git a/src/modules/ethumb/emotion/meson.build b/src/modules/ethumb/emotion/meson.build
index 3ef9d4b12d..610b9e9e7c 100644
--- a/src/modules/ethumb/emotion/meson.build
+++ b/src/modules/ethumb/emotion/meson.build
@@ -29,4 +29,5 @@ shared_module(emotion_loader+'_el',
install: true,
install_dir : mod_install_dir,
c_args : package_c_args,
+ name_suffix : sys_mod_extension
)
diff --git a/src/modules/evas/engines/buffer/evas_outbuf.c b/src/modules/evas/engines/buffer/evas_outbuf.c
index a8dd3d0efe..d143179f21 100644
--- a/src/modules/evas/engines/buffer/evas_outbuf.c
+++ b/src/modules/evas/engines/buffer/evas_outbuf.c
@@ -45,8 +45,9 @@ evas_buffer_outbuf_buf_update_fb(Outbuf *buf, int w, int h, Outbuf_Depth depth,
if ((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888) &&
(buf->dest) && (buf->dest_row_bytes == (buf->w * sizeof(DATA32))))
{
- memset(buf->dest, 0, h * buf->dest_row_bytes);
- buf->priv.back_buf =
+ memset(buf->dest, 0, h * buf->dest_row_bytes);
+ if (buf->priv.back_buf) evas_cache_image_drop(&buf->priv.back_buf->cache_entry);
+ buf->priv.back_buf =
(RGBA_Image *) evas_cache_image_data(evas_common_image_cache_get(),
w, h, buf->dest,
1, EVAS_COLORSPACE_ARGB8888);
@@ -54,6 +55,7 @@ evas_buffer_outbuf_buf_update_fb(Outbuf *buf, int w, int h, Outbuf_Depth depth,
else if ((buf->depth == OUTBUF_DEPTH_RGB_32BPP_888_8888) &&
(buf->dest) && (buf->dest_row_bytes == (buf->w * sizeof(DATA32))))
{
+ if (buf->priv.back_buf) evas_cache_image_drop(&buf->priv.back_buf->cache_entry);
buf->priv.back_buf =
(RGBA_Image *) evas_cache_image_data(evas_common_image_cache_get(),
w, h, buf->dest,
@@ -296,7 +298,7 @@ evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int
if (!buf->priv.back_buf)
{
Gfx_Func_Copy func;
-
+
func = evas_common_draw_func_copy_get(w, 0);
if (func)
{
@@ -306,7 +308,7 @@ evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int
dst = (DATA32 *)((DATA8 *)(buf->dest) + ((y + yy) * row_bytes));
func(src, dst, w);
}
-
+
}
}
if (buf->func.free_update_region)
@@ -320,7 +322,7 @@ evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int
DATA32 *src, *dst;
DATA8 *dest;
int xx, yy, row_bytes;
-
+
row_bytes = buf->dest_row_bytes;
dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 4);
if (buf->func.new_update_region)
@@ -351,7 +353,7 @@ evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int
DATA32 *src, *dst;
DATA8 *dest;
int xx, yy, row_bytes;
-
+
row_bytes = buf->dest_row_bytes;
dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 4);
if (buf->func.new_update_region)
diff --git a/src/modules/evas/engines/buffer/meson.build b/src/modules/evas/engines/buffer/meson.build
index 8c6a071e77..4a6f31fe3a 100644
--- a/src/modules/evas/engines/buffer/meson.build
+++ b/src/modules/evas/engines/buffer/meson.build
@@ -5,17 +5,18 @@ engine_src = files([
'evas_outbuf.c'
])
-engine_deps = []
-
evas_include_directories += include_directories('.')
install_headers('Evas_Engine_Buffer.h',
install_dir : join_paths(dir_include, 'evas-'+version_major),
)
+engine_deps += [eet]
+
evas_engine_buffer_mod = shared_module(mod_full_name, engine_src,
+ c_args : package_c_args,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/drm/evas_outbuf.c b/src/modules/evas/engines/drm/evas_outbuf.c
index 1f22ae7faa..055275758f 100644
--- a/src/modules/evas/engines/drm/evas_outbuf.c
+++ b/src/modules/evas/engines/drm/evas_outbuf.c
@@ -369,15 +369,15 @@ _outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w,
if ((ob->rotation == 0) || (ob->rotation == 180))
{
- func =
- evas_common_convert_func_get(0, w, h, ob->bpp,
+ func =
+ evas_common_convert_func_get(0, w, h, ob->bpp,
RED_MASK, GREEN_MASK, BLUE_MASK,
PAL_MODE_NONE, ob->rotation);
}
else if ((ob->rotation == 90) || (ob->rotation == 270))
{
- func =
- evas_common_convert_func_get(0, h, w, ob->bpp,
+ func =
+ evas_common_convert_func_get(0, h, w, ob->bpp,
RED_MASK, GREEN_MASK, BLUE_MASK,
PAL_MODE_NONE, ob->rotation);
}
@@ -429,7 +429,7 @@ _outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w,
if (ob->rotation == 0)
{
- RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
+ RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
0, 0, bw, bh);
dst += (bpl * rect.y) + (rect.x * bpp);
w -= rx;
@@ -437,7 +437,7 @@ _outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w,
else if (ob->rotation == 180)
{
pr = rect;
- RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
+ RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
0, 0, bw, bh);
rx = pr.w - rect.w;
ry = pr.h - rect.h;
@@ -447,7 +447,7 @@ _outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w,
else if (ob->rotation == 90)
{
pr = rect;
- RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
+ RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
0, 0, bw, bh);
rx = pr.w - rect.w; ry = pr.h - rect.h;
src += ry;
@@ -456,7 +456,7 @@ _outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w,
else if (ob->rotation == 270)
{
pr = rect;
- RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
+ RECTS_CLIP_TO_RECT(rect.x, rect.y, rect.w, rect.h,
0, 0, bw, bh);
rx = pr.w - rect.w; ry = pr.h - rect.h;
src += (update->cache_entry.w * rx);
diff --git a/src/modules/evas/engines/drm/meson.build b/src/modules/evas/engines/drm/meson.build
index fb97b631de..a75732a1b1 100644
--- a/src/modules/evas/engines/drm/meson.build
+++ b/src/modules/evas/engines/drm/meson.build
@@ -5,11 +5,11 @@ engine_src = files([
'evas_outbuf.c'
])
-engine_deps = [ecore_drm2, libdrm]
+engine_deps += [ecore_drm2, libdrm]
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/fb/evas_fb_main.c b/src/modules/evas/engines/fb/evas_fb_main.c
index 5690c83801..5cbec46616 100644
--- a/src/modules/evas/engines/fb/evas_fb_main.c
+++ b/src/modules/evas/engines/fb/evas_fb_main.c
@@ -268,15 +268,15 @@ static void
fb_init_palette_332(FB_Mode *mode)
{
int r, g, b, i;
-
+
if (mode->fb_var.bits_per_pixel != 8)
return;
i = 0;
-
+
if (ioctl(fb, FBIOGETCMAP, &cmap) == -1)
ERR("could not get colormap: ioctl(%d, FBIOGETCMAP) = %s",
fb, strerror(errno));
-
+
/* generate the palette */
for (r = 0; r < 8; r++)
{
@@ -285,7 +285,7 @@ fb_init_palette_332(FB_Mode *mode)
for (b = 0; b < 4; b++)
{
int val;
-
+
val = (r << 5) | (r << 2) | (r >> 1);
red[i] = (val << 8) | val;
val = (g << 5) | (g << 2) | (g >> 1);
@@ -296,7 +296,7 @@ fb_init_palette_332(FB_Mode *mode)
}
}
}
-
+
/* set colormap */
if (ioctl(fb, FBIOPUTCMAP, &cmap) == -1)
{
@@ -312,14 +312,14 @@ static void
fb_init_palette_linear(FB_Mode *mode)
{
int i;
-
+
if (mode->fb_var.bits_per_pixel != 8)
return;
-
+
if (ioctl(fb, FBIOGETCMAP, &cmap) == -1)
ERR("could not get colormap: ioctl(%d, FBIOGETCMAP) = %s",
fb, strerror(errno));
-
+
/* generate the palette */
for (i = 0; i < 256; i++)
red[i] = (i << 8) | i;
@@ -327,7 +327,7 @@ fb_init_palette_linear(FB_Mode *mode)
green[i] = (i << 8) | i;
for (i = 0; i < 256; i++)
blue[i] = (i << 8) | i;
-
+
/* set colormap */
if (ioctl(fb, FBIOPUTCMAP, &cmap) == -1)
perror("ioctl FBIOPUTCMAP");
@@ -343,7 +343,7 @@ fb_list_modes(unsigned int *num_return)
char line[256], label[256], value[256];
FB_Mode *modes = NULL, *temp;
int num;
-
+
num = 0;
f = fopen("/etc/fb.modes","rb");
if (!f)
@@ -356,14 +356,14 @@ fb_list_modes(unsigned int *num_return)
if (sscanf(line, "mode \"%250[^\"]\"", label) == 1)
{
char f1[32], f2[32], f3[32], f4[32];
-
+
f1[0] = 0; f2[0] = 0; f3[0] = 0; f4[0] = 0;
sscanf(label, "%30[^x]x%30[^-]-%30[^-]-%30s", f1, f2, f3, f4);
if ((f1[0]) && (f2[0]))
{
int geometry = 0;
int timings = 0;
-
+
num++;
temp = modes;
modes = realloc(modes, num * sizeof(FB_Mode));
@@ -385,7 +385,7 @@ fb_list_modes(unsigned int *num_return)
while ((fgets(line, sizeof(line) - 1, f)) &&
(!strstr(line, "endmode")))
{
-
+
if (sscanf(line," geometry %i %i %i %i %i",
&modes[num - 1].fb_var.xres,
&modes[num - 1].fb_var.yres,
@@ -468,7 +468,7 @@ fb_setmode(unsigned int width, unsigned int height, unsigned int pdepth, unsigne
{
FB_Mode *modes;
unsigned int i, num_modes;
-
+
modes = fb_list_modes(&num_modes);
DBG("want %ux%u, bitdepth=%u, refresh=%u, modes=%p, num_modes=%u",
width, height, pdepth, refresh, modes, num_modes);
@@ -521,7 +521,7 @@ fb_changeres(FB_Mode *cur_mode, unsigned int width, unsigned int height, unsigne
{
FB_Mode *modes;
unsigned int i, num_modes;
-
+
modes = fb_list_modes(&num_modes);
DBG("want %ux%u, bitdepth=%u, refresh=%u, modes=%p, num_modes=%u",
width, height, cur_mode->depth, refresh, modes, num_modes);
@@ -567,7 +567,7 @@ fb_changemode(FB_Mode *cur_mode, unsigned int width, unsigned int height, unsign
{
FB_Mode *modes;
unsigned int i, num_modes;
-
+
modes = fb_list_modes(&num_modes);
DBG("want %ux%u, bitdepth=%u, refresh=%u, modes=%p, num_modes=%u",
width, height, pdepth, refresh, modes, num_modes);
@@ -614,10 +614,10 @@ fb_getmode(void)
{
FB_Mode *mode = NULL;
int hpix, lines, clockrate;
-
+
mode = malloc(sizeof(FB_Mode));
/* look what we have now ... */
-
+
if (ioctl(fb, FBIOGET_VSCREENINFO, &mode->fb_var) == -1)
{
ERR("could not get screeninfo: ioctl(%d, FBIOGET_VSCREENINFO) = %s",
@@ -711,7 +711,7 @@ fb_setvt(int vtno)
struct vt_stat vts;
char vtname[32];
int vtfd;
-
+
if (vtno < 0)
{
if ((ioctl(tty,VT_OPENQRY, &vtno) == -1))
@@ -737,14 +737,14 @@ fb_setvt(int vtno)
return;
}
vtfd = open(vtname,O_RDWR);
-
+
if (ioctl(tty, VT_GETSTATE, &vts) == -1)
{
perror("ioctl VT_GETSTATE");
close(vtfd);
return;
}
-
+
orig_vt_no = vts.v_active;
close(vtfd);
#if 0
@@ -799,7 +799,7 @@ fb_init(int vt EINA_UNUSED, int device)
return;
}
DBG("opened fb=%d (%s)", fb, dev);
-
+
if (ioctl(fb, FBIOGET_VSCREENINFO, &fb_ovar) == -1)
{
ERR("could not get screeninfo: ioctl(%d, FBIOGET_VSCREENINFO) = %s",
@@ -878,7 +878,7 @@ fb_postinit(FB_Mode *mode)
fb_cleanup();
return -1;
}
-
+
if (fb_fix.type != FB_TYPE_PACKED_PIXELS)
{
CRI("can handle only packed pixel frame buffers (want %#x, got %#x)",
@@ -919,7 +919,7 @@ fb_postinit(FB_Mode *mode)
{
mode->fb_var.xoffset = 0;
mode->fb_var.yoffset = 0;
-
+
if (ioctl(fb, FBIOPAN_DISPLAY, &(mode->fb_var)) == -1)
{
const char *errmsg = strerror(errno);
@@ -998,11 +998,11 @@ fb_cleanup(void)
"mode=%hhd, waitv=%hhd, relsig=%hd, acqsig=%hd, frsig=%hd}) = %s",
tty, vt_omode.mode, vt_omode.waitv, vt_omode.relsig,
vt_omode.acqsig, vt_omode.frsig, strerror(errno));
-#if 0
+#if 0
if ((ioctl(tty, VT_ACTIVATE, orig_vt_no) == -1) && (orig_vt_no))
ERR("could not activate: ioctl(%d, VT_ACTIVATE, %d) = %s",
tty, orig_vt_no, strerror(errno));
-#endif
+#endif
if (tty > 0) /* don't close if got from isatty(0) */
close(tty);
}
diff --git a/src/modules/evas/engines/fb/evas_outbuf.c b/src/modules/evas/engines/fb/evas_outbuf.c
index 77274289db..77f37b94b3 100644
--- a/src/modules/evas/engines/fb/evas_outbuf.c
+++ b/src/modules/evas/engines/fb/evas_outbuf.c
@@ -300,11 +300,11 @@ evas_fb_outbuf_fb_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, in
buf->priv.mask.b, PAL_MODE_NONE,
buf->rot);
}
- else if (buf->rot == 180)
+ else if (buf->rot == 180)
{
data = (DATA8 *)buf->priv.fb.fb->mem +
buf->priv.fb.fb->mem_offset +
- buf->priv.fb.fb->bpp *
+ buf->priv.fb.fb->bpp *
(buf->w - x - w + ((buf->h - y - h) * buf->priv.fb.fb->stride));
conv_func = evas_common_convert_func_get(data, w, h,
buf->priv.fb.fb->fb_var.bits_per_pixel,
diff --git a/src/modules/evas/engines/fb/meson.build b/src/modules/evas/engines/fb/meson.build
index 625edd5d33..29f3b76dd5 100644
--- a/src/modules/evas/engines/fb/meson.build
+++ b/src/modules/evas/engines/fb/meson.build
@@ -7,11 +7,11 @@ engine_src = files([
'evas_fb_main.c',
])
-engine_deps = [ecore_fb]
+engine_deps += [ecore_fb]
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/gl_cocoa/meson.build b/src/modules/evas/engines/gl_cocoa/meson.build
index a0bd765c9b..2fc5bb9b2c 100644
--- a/src/modules/evas/engines/gl_cocoa/meson.build
+++ b/src/modules/evas/engines/gl_cocoa/meson.build
@@ -5,11 +5,11 @@ engine_src = files([
'evas_outbuf.m',
])
-engine_deps = [ecore_cocoa, gl_deps]
+engine_deps += [ecore_cocoa, gl_deps]
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d.c b/src/modules/evas/engines/gl_common/evas_gl_3d.c
deleted file mode 100644
index 83cc0738ee..0000000000
--- a/src/modules/evas/engines/gl_common/evas_gl_3d.c
+++ /dev/null
@@ -1,1494 +0,0 @@
-#include "evas_gl_private.h"
-#include "evas_gl_3d_private.h"
-
-#define CHECK_LOD_DISTANCE \
- if (pd_mesh_node->lod) \
- { \
- if (pdmesh->near_lod_boundary > data->lod_distance) \
- continue; \
- else if ((pdmesh->near_lod_boundary < data->lod_distance) && \
- (pdmesh->far_lod_boundary < data->lod_distance)) \
- continue; \
- }
-
-#define RENDER_MESH_NODE_ITERATE_BEGIN(param) \
- Eina_Matrix4 matrix_mv; \
- Eina_Matrix4 matrix_mvp; \
- Eina_Iterator *it; \
- void *ptr; \
- eina_matrix4_multiply(&matrix_mv, matrix_##param, &pd_mesh_node->data.mesh.matrix_local_to_world); \
- eina_matrix4_multiply(&matrix_mvp, &pd->projection, &matrix_mv); \
- it = eina_hash_iterator_data_new(pd_mesh_node->data.mesh.node_meshes); \
- while (eina_iterator_next(it, &ptr)) \
- { \
- Evas_Canvas3D_Node_Mesh *nm = (Evas_Canvas3D_Node_Mesh *)ptr; \
- Evas_Canvas3D_Mesh_Data *pdmesh = efl_data_scope_get(nm->mesh, EVAS_CANVAS3D_MESH_CLASS); \
- CHECK_LOD_DISTANCE
-
-#define RENDER_MESH_NODE_ITERATE_END \
- } \
- eina_iterator_free(it);
-
-void
-e3d_texture_param_update(E3D_Texture *texture)
-{
- if (texture->wrap_dirty)
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, texture->wrap_s);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, texture->wrap_t);
- texture->wrap_dirty = EINA_FALSE;
- }
-
- if (texture->filter_dirty)
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->filter_min);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->filter_mag);
- texture->filter_dirty = EINA_FALSE;
- }
-}
-
-E3D_Texture *
-e3d_texture_new(Eina_Bool use_atlas)
-{
- E3D_Texture *texture = NULL;
-
- texture = (E3D_Texture *)malloc(sizeof(E3D_Texture));
-
- if (texture == NULL)
- {
- ERR("Failed to allocate memory.");
- return NULL;
- }
-
- eina_matrix3_identity(&texture->trans);
-
- texture->w = 0;
- texture->h = 0;
- texture->x = 0;
- texture->y = 0;
-
- texture->tex = 0;
-
- texture->wrap_dirty = EINA_TRUE;
- texture->wrap_s = GL_CLAMP_TO_EDGE;
- texture->wrap_t = GL_CLAMP_TO_EDGE;
-
- texture->filter_dirty = EINA_TRUE;
- texture->filter_min = GL_NEAREST;
- texture->filter_mag = GL_NEAREST;
-
- texture->atlas_enable = use_atlas;
-
- return texture;
-}
-
-void
-e3d_texture_free(E3D_Texture *texture)
-{
- if (texture)
- {
- if (texture->surface)
- evas_gl_common_image_unref(texture->surface);
- }
- free(texture);
-}
-
-void
-e3d_texture_size_get(const E3D_Texture *texture, int *w, int *h)
-{
- if (w) *w = texture->w;
- if (h) *h = texture->h;
-}
-
-void
-e3d_texture_set(Evas_Engine_GL_Context *gc,
- E3D_Texture *texture,
- Evas_GL_Image *im)
-{
- Eina_Matrix3 pt,st;
- Evas_Real pt_x, pt_y, st_x, st_y;
-
- texture->surface = im;
- evas_gl_common_image_ref(im);
- im->disable_atlas = !texture->atlas_enable;
- evas_gl_common_image_update(gc, im);
-
- texture->tex = im->tex->pt->texture;
- texture->w = im->w;
- texture->h = im->h;
- texture->x = im->tex->x;
- texture->y = im->tex->y;
- if (texture->atlas_enable)
- {
- pt_x = im->tex->pt->w ? (im->tex->x/(Evas_Real)im->tex->pt->w) : 0;
- pt_y = im->tex->pt->h ? (im->tex->y/(Evas_Real)im->tex->pt->h) : 0;
-
- st_x = im->tex->pt->w ? (im->w/(Evas_Real)im->tex->pt->w) : 1.0;
- st_y = im->tex->pt->h ? (im->h/(Evas_Real)im->tex->pt->h) : 1.0;
- /*Build adjusting matrix for texture unit coordinates*/
- eina_matrix3_position_transform_set(&pt, pt_x, pt_y);
- eina_matrix3_scale_transform_set(&st, st_x, st_y);
- eina_matrix3_multiply(&texture->trans, &pt, &st);
- }
-}
-
-Evas_GL_Image *
-e3d_texture_get(E3D_Texture *texture)
-{
- return texture ? texture->surface : NULL;
-}
-
-static inline GLenum
-_to_gl_texture_wrap(Evas_Canvas3D_Wrap_Mode wrap)
-{
- switch (wrap)
- {
- case EVAS_CANVAS3D_WRAP_MODE_CLAMP:
- return GL_CLAMP_TO_EDGE;
- case EVAS_CANVAS3D_WRAP_MODE_REFLECT:
- return GL_MIRRORED_REPEAT;
- case EVAS_CANVAS3D_WRAP_MODE_REPEAT:
- return GL_REPEAT;
- default:
- break;
- }
-
- ERR("Invalid texture wrap mode.");
- return GL_CLAMP_TO_EDGE;
-}
-
-static inline Evas_Canvas3D_Wrap_Mode
-_to_e3d_texture_wrap(GLenum wrap)
-{
- switch (wrap)
- {
- case GL_CLAMP_TO_EDGE:
- return EVAS_CANVAS3D_WRAP_MODE_CLAMP;
- case GL_MIRRORED_REPEAT:
- return EVAS_CANVAS3D_WRAP_MODE_REFLECT;
- case GL_REPEAT:
- return EVAS_CANVAS3D_WRAP_MODE_REPEAT;
- default:
- break;
- }
-
- ERR("Invalid texture wrap mode.");
- return EVAS_CANVAS3D_WRAP_MODE_CLAMP;
-}
-
-static inline GLenum
-_to_gl_texture_filter(Evas_Canvas3D_Texture_Filter filter)
-{
- switch (filter)
- {
- case EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST:
- return GL_NEAREST;
- case EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR:
- return GL_LINEAR;
- case EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST:
- return GL_NEAREST_MIPMAP_NEAREST;
- case EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR:
- return GL_NEAREST_MIPMAP_LINEAR;
- case EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST:
- return GL_LINEAR_MIPMAP_NEAREST;
- case EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR:
- return GL_LINEAR_MIPMAP_LINEAR;
- default:
- break;
- }
-
- ERR("Invalid texture wrap mode.");
- return GL_NEAREST;
-}
-
-static inline Evas_Canvas3D_Texture_Filter
-_to_e3d_texture_filter(GLenum filter)
-{
- switch (filter)
- {
- case GL_NEAREST:
- return EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST;
- case GL_LINEAR:
- return EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR;
- case GL_NEAREST_MIPMAP_NEAREST:
- return EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST;
- case GL_NEAREST_MIPMAP_LINEAR:
- return EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR;
- case GL_LINEAR_MIPMAP_NEAREST:
- return EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST;
- case GL_LINEAR_MIPMAP_LINEAR:
- return EVAS_CANVAS3D_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR;
- default:
- break;
- }
-
- ERR("Invalid texture wrap mode.");
- return EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST;
-}
-
-void
-e3d_texture_wrap_set(E3D_Texture *texture, Evas_Canvas3D_Wrap_Mode s, Evas_Canvas3D_Wrap_Mode t)
-{
- GLenum gl_s, gl_t;
-
- gl_s = _to_gl_texture_wrap(s);
- gl_t = _to_gl_texture_wrap(t);
-
- if (gl_s == texture->wrap_s && gl_t == texture->wrap_t)
- return;
-
- texture->wrap_s = gl_s;
- texture->wrap_t = gl_t;
- texture->wrap_dirty = EINA_TRUE;
-}
-
-void
-e3d_texture_wrap_get(const E3D_Texture *texture, Evas_Canvas3D_Wrap_Mode *s, Evas_Canvas3D_Wrap_Mode *t)
-{
- if (s)
- *s = _to_e3d_texture_wrap(texture->wrap_s);
-
- if (t)
- *t = _to_e3d_texture_wrap(texture->wrap_t);
-}
-
-void
-e3d_texture_filter_set(E3D_Texture *texture, Evas_Canvas3D_Texture_Filter min, Evas_Canvas3D_Texture_Filter mag)
-{
- GLenum gl_min, gl_mag;
-
- gl_min = _to_gl_texture_filter(min);
- gl_mag = _to_gl_texture_filter(mag);
-
- if (gl_min == texture->filter_min && gl_mag == texture->filter_mag)
- return;
-
- texture->filter_min = gl_min;
- texture->filter_mag = gl_mag;
- texture->filter_dirty = EINA_TRUE;
-}
-
-void
-e3d_texture_filter_get(const E3D_Texture *texture,
- Evas_Canvas3D_Texture_Filter *min, Evas_Canvas3D_Texture_Filter *mag)
-{
- if (min)
- *min = _to_e3d_texture_filter(texture->filter_min);
-
- if (mag)
- *mag = _to_e3d_texture_filter(texture->filter_mag);
-}
-
-static void
-_gen_texture_2d(GLuint *texture, GLenum wrap_type, GLfloat filter_type)
-{
- glGenTextures(1, texture);
- glBindTexture(GL_TEXTURE_2D, *texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_type);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_type);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter_type);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter_type);
-}
-
-static void
-_gen_depth_stencil_buffer(GLuint *buffer, GLenum format, GLenum attach,
- int size_w, int size_h)
-{
- glGenRenderbuffers(1, buffer);
- glBindRenderbuffer(GL_RENDERBUFFER, *buffer);
- glRenderbufferStorage(GL_RENDERBUFFER, format, size_w, size_h);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, attach, GL_RENDERBUFFER, *buffer);
-}
-
-E3D_Drawable *
-e3d_drawable_new(int w, int h, int alpha, GLenum depth_format, GLenum stencil_format)
-{
- E3D_Drawable *drawable = NULL;
- GLuint tex, fbo, texDepth, texcolorpick, color_pick_fb_id;
- GLuint depth_stencil_buf = 0;
- GLuint depth_buf = 0;
- GLuint stencil_buf = 0;
- Eina_Bool depth_stencil = EINA_FALSE;
-
- _gen_texture_2d(&tex, GL_CLAMP_TO_EDGE, GL_NEAREST);
- if (alpha)
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- else
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
-
- _gen_texture_2d(&texDepth, GL_CLAMP_TO_EDGE, GL_NEAREST);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
-
- glGenFramebuffers(1, &color_pick_fb_id);
- _gen_texture_2d(&texcolorpick, GL_CLAMP_TO_EDGE, GL_NEAREST);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
-
- glGenFramebuffers(1, &fbo);
- glBindFramebuffer(GL_FRAMEBUFFER, fbo);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
-
-#ifdef GL_GLES
- if (depth_format == GL_DEPTH_STENCIL_OES)
- {
- _gen_texture_2d(&depth_stencil_buf, GL_CLAMP_TO_EDGE, GL_NEAREST);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_STENCIL_OES, w, h, 0,
- GL_DEPTH_STENCIL_OES, GL_UNSIGNED_INT_24_8_OES, NULL);
-
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
- GL_TEXTURE_2D, depth_stencil_buf, 0);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
- GL_TEXTURE_2D, depth_stencil_buf, 0);
-
- depth_stencil = EINA_TRUE;
- }
-#else
- if (depth_format == GL_DEPTH24_STENCIL8)
- {
- _gen_depth_stencil_buffer(&depth_stencil_buf, GL_DEPTH24_STENCIL8,
- GL_DEPTH_STENCIL_ATTACHMENT, w, h);
- depth_stencil = EINA_TRUE;
- }
-#endif
-
- if ((!depth_stencil) && (depth_format))
- _gen_depth_stencil_buffer(&depth_buf, depth_format, GL_DEPTH_ATTACHMENT, w, h);
-
- if ((!depth_stencil) && (stencil_format))
- _gen_depth_stencil_buffer(&stencil_buf, stencil_format, GL_STENCIL_ATTACHMENT, w, h);
-
- if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
- goto error;
-
- drawable = (E3D_Drawable *)calloc(1, sizeof(E3D_Drawable));
- if (drawable == NULL)
- goto error;
-
- drawable->w = w;
- drawable->h = h;
- drawable->alpha = alpha;
-
- if (alpha)
- drawable->format = GL_RGBA;
- else
- drawable->format = GL_RGB;
-
- drawable->depth_format = depth_format;
- drawable->stencil_format = stencil_format;
- drawable->tex = tex;
- drawable->fbo = fbo;
- drawable->texcolorpick = texcolorpick;
- drawable->color_pick_fb_id = color_pick_fb_id;
- drawable->depth_stencil_buf = depth_stencil_buf;
- drawable->depth_buf = depth_buf;
- drawable->stencil_buf = stencil_buf;
- drawable->texDepth = texDepth;
-
- return drawable;
-
-error:
- ERR("Drawable creation failed.");
-
- if (tex)
- glDeleteTextures(1, &tex);
- if (texcolorpick)
- glDeleteTextures(1, &texcolorpick);
- if (texDepth)
- glDeleteTextures(1, &texDepth);
-
- if (fbo)
- glDeleteFramebuffers(1, &fbo);
- if (color_pick_fb_id)
- glDeleteFramebuffers(1, &color_pick_fb_id);
-
- if (depth_stencil_buf)
- {
-#ifdef GL_GLES
- glDeleteTextures(1, &depth_stencil_buf);
-#else
- glDeleteRenderbuffers(1, &depth_stencil_buf);
-#endif
- }
-
- if (depth_buf)
- glDeleteRenderbuffers(1, &depth_buf);
-
- if (stencil_buf)
- glDeleteRenderbuffers(1, &stencil_buf);
-
-
- return NULL;
-}
-
-void
-e3d_drawable_free(E3D_Drawable *drawable)
-{
- if (drawable == NULL)
- return;
-
- if (drawable->tex)
- glDeleteTextures(1, &drawable->tex);
-
- if (drawable->fbo)
- glDeleteFramebuffers(1, &drawable->fbo);
-
- if (drawable->depth_stencil_buf)
- {
-#ifdef GL_GLES
- glDeleteTextures(1, &drawable->depth_stencil_buf);
-#else
- glDeleteRenderbuffers(1, &drawable->depth_stencil_buf);
-#endif
- }
-
- if (drawable->depth_buf)
- glDeleteRenderbuffers(1, &drawable->depth_buf);
-
- if (drawable->stencil_buf)
- glDeleteRenderbuffers(1, &drawable->stencil_buf);
-
- free(drawable);
-}
-
-void
-e3d_drawable_size_get(E3D_Drawable *drawable, int *w, int *h)
-{
- if (drawable)
- {
- if (w) *w = drawable->w;
- if (h) *h = drawable->h;
- }
- else
- {
- if (w) *w = 0;
- if (h) *h = 0;
- }
-}
-
-GLuint
-e3d_drawable_texture_id_get(E3D_Drawable *drawable)
-{
- return drawable->tex;
-}
-
-GLuint
-e3d_drawable_texture_color_pick_id_get(E3D_Drawable *drawable)
-{
- return drawable->texcolorpick;
-}
-
-GLenum
-e3d_drawable_format_get(E3D_Drawable *drawable)
-{
- return drawable->format;
-}
-
-static inline void
-_mesh_frame_find(Evas_Canvas3D_Mesh *mesh, int frame,
- Eina_List **l, Eina_List **r)
-{
- Eina_List *left, *right;
- Evas_Canvas3D_Mesh_Frame *f0 = NULL, *f1;
- Evas_Canvas3D_Mesh_Data *pdmesh = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
-
- left = pdmesh->frames;
- right = eina_list_next(left);
-
- while (right)
- {
- f0 = (Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(left);
- f1 = (Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(right);
-
- if (frame >= f0->frame && frame <= f1->frame)
- break;
-
- left = right;
- right = eina_list_next(left);
- }
-
- if (right == NULL)
- {
- if (f0 && frame <= f0->frame)
- {
- *l = NULL;
- *r = left;
- }
- else
- {
- *l = left;
- *r = NULL;
- }
- }
-
- *l = left;
- *r = right;
-}
-
-static inline void
-_vertex_attrib_flag_add(E3D_Draw_Data *data,
- Evas_Canvas3D_Vertex_Attrib attrib,
- Eina_Bool blend)
-{
- switch (attrib)
- {
- case EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION:
- data->flags |= E3D_SHADER_FLAG_VERTEX_POSITION;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_VERTEX_POSITION_BLEND;
- break;
- case EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL:
- data->flags |= E3D_SHADER_FLAG_VERTEX_NORMAL;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_VERTEX_NORMAL_BLEND;
- break;
- case EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT:
- data->flags |= E3D_SHADER_FLAG_VERTEX_TANGENT;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_VERTEX_TANGENT_BLEND;
- break;
- case EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR:
- data->flags |= E3D_SHADER_FLAG_VERTEX_COLOR;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_VERTEX_COLOR_BLEND;
- break;
- case EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD:
- data->flags |= E3D_SHADER_FLAG_VERTEX_TEXCOORD;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_VERTEX_TEXCOORD_BLEND;
- break;
- default:
- ERR("Invalid vertex attrib.");
- break;
- }
-}
-
-static inline void
-_material_color_flag_add(E3D_Draw_Data *data, Evas_Canvas3D_Material_Attrib attrib)
-{
- switch (attrib)
- {
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT:
- data->flags |= E3D_SHADER_FLAG_AMBIENT;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE:
- data->flags |= E3D_SHADER_FLAG_DIFFUSE;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR:
- data->flags |= E3D_SHADER_FLAG_SPECULAR;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION:
- data->flags |= E3D_SHADER_FLAG_EMISSION;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL:
- ERR("Material attribute normal should not be used with color values.");
- break;
- default:
- ERR("Invalid material attrib.");
- break;
- }
-}
-
-static inline void
-_material_texture_flag_add(E3D_Draw_Data *data, Evas_Canvas3D_Material_Attrib attrib, Eina_Bool blend)
-{
- switch (attrib)
- {
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT:
- data->flags |= E3D_SHADER_FLAG_AMBIENT;
- data->flags |= E3D_SHADER_FLAG_AMBIENT_TEXTURE;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE:
- data->flags |= E3D_SHADER_FLAG_DIFFUSE;
- data->flags |= E3D_SHADER_FLAG_DIFFUSE_TEXTURE;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR:
- data->flags |= E3D_SHADER_FLAG_SPECULAR;
- data->flags |= E3D_SHADER_FLAG_SPECULAR_TEXTURE;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION:
- data->flags |= E3D_SHADER_FLAG_EMISSION;
- data->flags |= E3D_SHADER_FLAG_EMISSION_TEXTURE;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND;
- break;
- case EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL:
- data->flags |= E3D_SHADER_FLAG_NORMAL_TEXTURE;
-
- if (blend)
- data->flags |= E3D_SHADER_FLAG_NORMAL_TEXTURE_BLEND;
- break;
- default:
- ERR("Invalid material attrib.");
- break;
- }
-}
-
-static inline Eina_Bool
-_vertex_attrib_build(E3D_Draw_Data *data, int frame,
- const Eina_List *l, const Eina_List *r,
- Evas_Canvas3D_Vertex_Attrib attrib)
-{
- const Evas_Canvas3D_Mesh_Frame *f0 = NULL, *f1 = NULL;
-
- while (l)
- {
- f0 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(l);
-
- if (f0->vertices[attrib].data != NULL)
- break;
-
- l = eina_list_prev(l);
- f0 = NULL;
- }
-
- while (r)
- {
- f1 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(r);
-
- if (f1->vertices[attrib].data != NULL)
- break;
-
- r = eina_list_next(r);
- f1 = NULL;
- }
-
- if (f0 == NULL && f1 == NULL)
- return EINA_FALSE;
-
- if (f0 == NULL)
- {
- f0 = f1;
- f1 = NULL;
- }
- else if (f1 != NULL)
- {
- if (frame == f0->frame)
- {
- f1 = NULL;
- }
- else if (frame == f1->frame)
- {
- f0 = f1;
- f1 = NULL;
- }
- }
-
- data->vertices[attrib].vertex0 = f0->vertices[attrib];
- data->vertices[attrib].vertex0.owns_data = EINA_FALSE;
-
- if (f1)
- {
- data->vertices[attrib].vertex1 = f1->vertices[attrib];
- data->vertices[attrib].vertex1.owns_data = EINA_FALSE;
- data->vertices[attrib].weight = (f1->frame - frame) / (Evas_Real)(f1->frame - f0->frame);
- _vertex_attrib_flag_add(data, attrib, EINA_TRUE);
- }
- else
- {
- _vertex_attrib_flag_add(data, attrib, EINA_FALSE);
- }
-
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-_material_color_build(E3D_Draw_Data *data, int frame,
- const Eina_List *l, const Eina_List *r,
- Evas_Canvas3D_Material_Attrib attrib)
-{
- const Evas_Canvas3D_Mesh_Frame *f0 = NULL, *f1 = NULL;
-
- while (l)
- {
- f0 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(l);
-
- if (f0->material)
- {
- Evas_Canvas3D_Material_Data *pdm = efl_data_scope_get(f0->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- if (pdm->attribs[attrib].enable)
- break;
- }
-
- l = eina_list_prev(l);
- f0 = NULL;
- }
-
- while (r)
- {
- f1 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(r);
-
- if (f1->material)
- {
- Evas_Canvas3D_Material_Data *pdm = efl_data_scope_get(f1->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- if (pdm->attribs[attrib].enable)
- break;
- }
-
- r = eina_list_next(r);
- f1 = NULL;
- }
-
- if (f0 == NULL && f1 == NULL)
- return EINA_FALSE;
-
- if (f0 == NULL)
- {
- f0 = f1;
- f1 = NULL;
- }
- else if (f1 != NULL)
- {
- if (frame == f0->frame)
- {
- f1 = NULL;
- }
- else if (frame == f1->frame)
- {
- f0 = f1;
- f1 = NULL;
- }
- }
- Evas_Canvas3D_Material_Data *pdmf0 = efl_data_scope_get(f0->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- if (f1 == NULL)
- {
- data->materials[attrib].color = pdmf0->attribs[attrib].color;
-
- if (attrib == EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR)
- data->shininess = pdmf0->shininess;
- }
- else
- {
- Evas_Real weight;
- Evas_Canvas3D_Material_Data *pdmf1 = efl_data_scope_get(f1->material, EVAS_CANVAS3D_MATERIAL_CLASS);
-
- weight = (f1->frame - frame) / (Evas_Real)(f1->frame - f0->frame);
- evas_color_blend(&data->materials[attrib].color,
- &pdmf0->attribs[attrib].color,
- &pdmf0->attribs[attrib].color,
- weight);
-
- if (attrib == EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR)
- {
- data->shininess = pdmf0->shininess * weight +
- pdmf1->shininess * (1.0 - weight);
- }
- }
-
- _material_color_flag_add(data, attrib);
- return EINA_TRUE;
-}
-
-static inline Eina_Bool
-_material_texture_build(E3D_Draw_Data *data, int frame,
- const Eina_List *l, const Eina_List *r,
- Evas_Canvas3D_Material_Attrib attrib)
-{
- const Evas_Canvas3D_Mesh_Frame *f0 = NULL, *f1 = NULL;
-
- while (l)
- {
- f0 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(l);
-
- if (f0->material)
- {
- Evas_Canvas3D_Material_Data *pdm = efl_data_scope_get(f0->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- if (pdm->attribs[attrib].enable && pdm->attribs[attrib].texture != NULL)
- break;
- }
-
- l = eina_list_prev(l);
- f0 = NULL;
- }
-
- while (r)
- {
- f1 = (const Evas_Canvas3D_Mesh_Frame *)eina_list_data_get(r);
-
- if (f1->material)
- {
- Evas_Canvas3D_Material_Data *pdm = efl_data_scope_get(f1->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- if (pdm->attribs[attrib].enable && pdm->attribs[attrib].texture != NULL)
- break;
- }
-
- r = eina_list_next(r);
- f1 = NULL;
- }
-
- if (f0 == NULL && f1 == NULL)
- return EINA_FALSE;
-
- if (f0 == NULL)
- {
- f0 = f1;
- f1 = NULL;
- }
- else if (f1 != NULL)
- {
- if (frame == f0->frame)
- {
- f1 = NULL;
- }
- else if (frame == f1->frame)
- {
- f0 = f1;
- f1 = NULL;
- }
- }
-
- Evas_Canvas3D_Material_Data *pdmf0 = efl_data_scope_get(f0->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- data->materials[attrib].sampler0 = data->texture_count++;
- Evas_Canvas3D_Texture_Data *pd = efl_data_scope_get(pdmf0->attribs[attrib].texture, EVAS_CANVAS3D_TEXTURE_CLASS);
- data->materials[attrib].tex0 = (E3D_Texture *)pd->engine_data;
-
- if (f1)
- {
- Evas_Canvas3D_Material_Data *pdmf1 = efl_data_scope_get(f1->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- Evas_Real weight = (f1->frame - frame) / (Evas_Real)(f1->frame - f0->frame);
-
- data->materials[attrib].sampler1 = data->texture_count++;
- pd = efl_data_scope_get(pdmf1->attribs[attrib].texture, EVAS_CANVAS3D_TEXTURE_CLASS);
- data->materials[attrib].tex1 = (E3D_Texture *)pd->engine_data;
-
- data->materials[attrib].texture_weight = weight;
-
- if (attrib == EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR)
- {
- data->shininess = pdmf0->shininess * weight +
- pdmf1->shininess * (1.0 - weight);
- }
-
- _material_texture_flag_add(data, attrib, EINA_TRUE);
- }
- else
- {
- if (attrib == EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR)
- data->shininess = pdmf0->shininess;
-
- _material_texture_flag_add(data, attrib, EINA_FALSE);
- }
-
- return EINA_TRUE;
-}
-
-static inline void
-_light_build(E3D_Draw_Data *data,
- const Evas_Canvas3D_Node *light,
- const Eina_Matrix4 *matrix_eye)
-{
- Evas_Canvas3D_Node_Data *pd_light_node = efl_data_scope_get(light, EVAS_CANVAS3D_NODE_CLASS);
- Evas_Canvas3D_Light *l = pd_light_node ? pd_light_node->data.light.light : NULL;
- Evas_Canvas3D_Light_Data *pdl = l ? efl_data_scope_get(l, EVAS_CANVAS3D_LIGHT_CLASS) : NULL;
- Eina_Vector3 pos, dir;
-
- if (pdl == NULL)
- return;
-
- /* Get light node's position. */
- if (pdl->directional)
- {
- data->flags |= E3D_SHADER_FLAG_LIGHT_DIRECTIONAL;
-
- /* Negative Z. */
- eina_vector3_set(&dir, 0.0, 0.0, 1.0);
- eina_vector3_quaternion_rotate(&dir, &dir, &pd_light_node->orientation);
-
- /* Transform to eye space. */
- eina_vector3_homogeneous_direction_transform(&dir, matrix_eye, &dir);
- eina_vector3_normalize(&dir, &dir);
-
- data->light.position.x = dir.x;
- data->light.position.y = dir.y;
- data->light.position.z = dir.z;
- data->light.position.w = 0.0;
- }
- else
- {
- eina_vector3_copy(&pos, &pd_light_node->position_world);
- eina_vector3_homogeneous_position_transform(&pos, matrix_eye, &pos);
-
- data->light.position.x = pos.x;
- data->light.position.y = pos.y;
- data->light.position.z = pos.z;
- data->light.position.w = 1.0;
-
- if (pdl->enable_attenuation)
- {
- data->flags |= E3D_SHADER_FLAG_LIGHT_ATTENUATION;
-
- data->light.atten.x = pdl->atten_const;
- data->light.atten.y = pdl->atten_linear;
- data->light.atten.z = pdl->atten_quad;
- }
-
- if (pdl->spot_cutoff < 180.0)
- {
- data->flags |= E3D_SHADER_FLAG_LIGHT_SPOT;
- eina_vector3_set(&dir, 0.0, 0.0, -1.0);
- eina_vector3_quaternion_rotate(&dir, &dir, &pd_light_node->orientation);
- eina_vector3_homogeneous_direction_transform(&dir, matrix_eye, &dir);
-
- data->light.spot_dir = dir;
- data->light.spot_exp = pdl->spot_exp;
- data->light.spot_cutoff_cos = pdl->spot_cutoff_cos;
- }
- }
-
- data->light.ambient = pdl->ambient;
- data->light.diffuse = pdl->diffuse;
- data->light.specular = pdl->specular;
-}
-
-static inline Eina_Bool
-_mesh_draw_data_build(E3D_Draw_Data *data,
- Evas_Canvas3D_Mesh *mesh, int frame,
- const Eina_Matrix4 *matrix_eye,
- const Eina_Matrix4 *matrix_mv,
- const Eina_Matrix4 *matrix_mvp,
- const Eina_Matrix4 *matrix_light,
- const Evas_Canvas3D_Node *light)
-{
- Eina_List *l, *r;
- Evas_Canvas3D_Mesh_Data *pdmesh = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
-
- if (pdmesh->frames == NULL)
- return EINA_FALSE;
-
- if (pdmesh->fog_enabled)
- {
- data->flags |= E3D_SHADER_FLAG_FOG_ENABLED;
- data->fog_color = pdmesh->fog_color;
- }
- if (pdmesh->alpha_test_enabled)
- data->flags |= E3D_SHADER_FLAG_ALPHA_TEST_ENABLED;
-
- if (pdmesh->shadowed)
- {
- data->flags |= E3D_SHADER_FLAG_SHADOWED;
- data->pcf_size = 1 / pdmesh->shadows_edges_size;
- data->pcf_step = (Evas_Real)pdmesh->shadows_edges_filtering_level;
- data->constant_bias = pdmesh->shadows_constant_bias;
- }
-
- if (pdmesh->color_pick_enabled)
- data->color_pick_key = pdmesh->color_pick_key;
-
- data->alpha_comparison = pdmesh->alpha_comparison;
- data->alpha_ref_value = pdmesh->alpha_ref_value;
- data->alpha_test_enabled =pdmesh->alpha_test_enabled;
-
- data->blending = pdmesh->blending;
- data->blend_sfactor = pdmesh->blend_sfactor;
- data->blend_dfactor = pdmesh->blend_dfactor;
- data->mode = pdmesh->shader_mode;
- data->assembly = pdmesh->assembly;
- data->vertex_count = pdmesh->vertex_count;
- data->index_count = pdmesh->index_count;
- data->index_format = pdmesh->index_format;
- data->indices = pdmesh->indices;
-
- eina_matrix4_copy(&data->matrix_mvp, matrix_mvp);
- eina_matrix4_copy(&data->matrix_mv, matrix_mv);
- if (matrix_light != NULL)
- eina_matrix4_copy(&data->matrix_light, matrix_light);
-
- _mesh_frame_find(mesh, frame, &l, &r);
-
-#define BUILD(type, arg, check) \
- do { \
- Eina_Bool ret = _##type##_build(data, frame, l, r, EVAS_CANVAS3D_##arg); \
- if (check && !ret) \
- { \
- ERR("Missing attribute : " #arg); \
- return EINA_FALSE; \
- } \
- } while (0)
-
- if (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_VERTEX_COLOR)
- {
- BUILD(vertex_attrib, VERTEX_ATTRIB_POSITION, EINA_TRUE);
- BUILD(vertex_attrib, VERTEX_ATTRIB_COLOR, EINA_TRUE);
- }
- else if (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_SHADOW_MAP_RENDER)
- {
- BUILD(vertex_attrib, VERTEX_ATTRIB_POSITION, EINA_TRUE);
- if (pdmesh->alpha_test_enabled)
- {
- BUILD(material_texture, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
-
- if (_flags_need_tex_coord(data->flags))
- BUILD(vertex_attrib, VERTEX_ATTRIB_TEXCOORD, EINA_FALSE);
- }
- }
- else if (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_COLOR_PICK)
- {
- BUILD(vertex_attrib, VERTEX_ATTRIB_POSITION, EINA_TRUE);
- }
- else if (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_DIFFUSE)
- {
- BUILD(vertex_attrib, VERTEX_ATTRIB_POSITION, EINA_TRUE);
- BUILD(material_color, MATERIAL_ATTRIB_DIFFUSE, EINA_TRUE);
- BUILD(material_texture, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
-
- if (_flags_need_tex_coord(data->flags))
- BUILD(vertex_attrib, VERTEX_ATTRIB_TEXCOORD, EINA_FALSE);
- }
- else if (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_FLAT)
- {
- BUILD(vertex_attrib, VERTEX_ATTRIB_POSITION, EINA_TRUE);
- BUILD(vertex_attrib, VERTEX_ATTRIB_NORMAL, EINA_TRUE);
-
- BUILD(material_color, MATERIAL_ATTRIB_AMBIENT, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_SPECULAR, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_EMISSION, EINA_FALSE);
-
- BUILD(material_texture, MATERIAL_ATTRIB_AMBIENT, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_SPECULAR, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_EMISSION, EINA_FALSE);
-
- _light_build(data, light, matrix_eye);
- eina_normal3_matrix_get(&data->matrix_normal, matrix_mv);
-
- if (_flags_need_tex_coord(data->flags))
- BUILD(vertex_attrib, VERTEX_ATTRIB_TEXCOORD, EINA_FALSE);
- }
- else if (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_PHONG)
- {
- BUILD(vertex_attrib, VERTEX_ATTRIB_POSITION, EINA_TRUE);
- BUILD(vertex_attrib, VERTEX_ATTRIB_NORMAL, EINA_TRUE);
-
- BUILD(material_color, MATERIAL_ATTRIB_AMBIENT, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_SPECULAR, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_EMISSION, EINA_FALSE);
-
- BUILD(material_texture, MATERIAL_ATTRIB_AMBIENT, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_SPECULAR, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_EMISSION, EINA_FALSE);
-
- _light_build(data, light, matrix_eye);
- eina_normal3_matrix_get(&data->matrix_normal, matrix_mv);
-
- if (_flags_need_tex_coord(data->flags))
- BUILD(vertex_attrib, VERTEX_ATTRIB_TEXCOORD, EINA_FALSE);
- }
- else if ((pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP) ||
- (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_PARALLAX_OCCLUSION))
- {
- BUILD(vertex_attrib, VERTEX_ATTRIB_POSITION, EINA_TRUE);
- BUILD(vertex_attrib, VERTEX_ATTRIB_NORMAL, EINA_TRUE);
- BUILD(vertex_attrib, VERTEX_ATTRIB_TEXCOORD, EINA_TRUE);
- BUILD(material_texture, MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- BUILD(vertex_attrib, VERTEX_ATTRIB_TANGENT, EINA_FALSE);
-
-
- if (pdmesh->shader_mode == EVAS_CANVAS3D_SHADER_MODE_NORMAL_MAP)
- BUILD(vertex_attrib, VERTEX_ATTRIB_TANGENT, EINA_FALSE);
- else BUILD(vertex_attrib, VERTEX_ATTRIB_TANGENT, EINA_TRUE);
-
- BUILD(material_color, MATERIAL_ATTRIB_AMBIENT, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_SPECULAR, EINA_FALSE);
- BUILD(material_color, MATERIAL_ATTRIB_EMISSION, EINA_FALSE);
-
- BUILD(material_texture, MATERIAL_ATTRIB_AMBIENT, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_DIFFUSE, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_SPECULAR, EINA_FALSE);
- BUILD(material_texture, MATERIAL_ATTRIB_EMISSION, EINA_FALSE);
-
- _light_build(data, light, matrix_eye);
- eina_normal3_matrix_get(&data->matrix_normal, matrix_mv);
- }
- /*Check possible quantity of texture units*/
- int num, count = 0;
- glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &num);
- data->smap_sampler = num - 1;
-
- if (data->render_to_texture)
- {
- count++;
- data->colortex_sampler = num - (count + 1);
- }
- if (data->texture_count + count >= num)
- if ((data->flags & E3D_SHADER_FLAG_SHADOWED) ||
- (data->texture_count + count > num))
- {
- ERR("Too many textures for your graphics configuration.");
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-static inline void
-_mesh_draw(E3D_Renderer *renderer, Evas_Canvas3D_Mesh *mesh, int frame, Evas_Canvas3D_Node *light,
- const Eina_Matrix4 *matrix_eye, const Eina_Matrix4 *matrix_mv, const Eina_Matrix4 *matrix_mvp, const Eina_Matrix4 *matrix_light)
-{
- E3D_Draw_Data data;
-
- memset(&data, 0x00, sizeof(E3D_Draw_Data));
- data.render_to_texture = e3d_renderer_rendering_to_texture_get(renderer);
-
- if (_mesh_draw_data_build(&data, mesh, frame, matrix_eye, matrix_mv, matrix_mvp, matrix_light, light))
- e3d_renderer_draw(renderer, &data);
-}
-
-void _shadowmap_render(E3D_Drawable *drawable, E3D_Renderer *renderer,
- Evas_Canvas3D_Scene_Public_Data *data, Eina_Matrix4 *matrix_light_eye,
- Evas_Canvas3D_Node *light)
-{
- Eina_List *l;
- Evas_Canvas3D_Node *n;
- Evas_Canvas3D_Shader_Mode shader_mode;
- Eina_Bool blend_enabled;
- Evas_Color c = {1.0, 1.0, 1.0, 1.0};
- Eina_Matrix4 matrix_vp;
-
- glEnable(GL_POLYGON_OFFSET_FILL);
- glPolygonOffset(data->depth_offset, data->depth_constant);
-
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- drawable->texDepth, 0);
-
- e3d_renderer_clear(renderer, &c);
-
- Evas_Canvas3D_Node_Data *pd_light_node = efl_data_scope_get(light, EVAS_CANVAS3D_NODE_CLASS);
- Evas_Canvas3D_Light_Data *pd = efl_data_scope_get(pd_light_node->data.light.light,
- EVAS_CANVAS3D_LIGHT_CLASS);
-
- Eina_Quaternion planes[6];
- eina_matrix4_multiply(&matrix_vp, &pd->projection, matrix_light_eye);
- evas_frustum_calculate(planes, &matrix_vp);
-
- EINA_LIST_FOREACH(data->mesh_nodes, l, n)
- {
- Evas_Canvas3D_Node_Data *pd_mesh_node = efl_data_scope_get(n, EVAS_CANVAS3D_NODE_CLASS);
-
- if (evas_is_sphere_in_frustum(&pd_mesh_node->bsphere, planes))
- {
- RENDER_MESH_NODE_ITERATE_BEGIN(light_eye)
- {
- shader_mode = pdmesh->shader_mode;
- blend_enabled = pdmesh->blending;
- pdmesh->blending = EINA_FALSE;
- pdmesh->shader_mode = EVAS_CANVAS3D_SHADER_MODE_SHADOW_MAP_RENDER;
- _mesh_draw(renderer, nm->mesh, nm->frame, light, matrix_light_eye,
- &matrix_mv, &matrix_mvp, &matrix_mvp);
- pdmesh->shader_mode = shader_mode;
- pdmesh->blending = blend_enabled;
- }
- RENDER_MESH_NODE_ITERATE_END
- }
- }
-
- glDisable(GL_POLYGON_OFFSET_FILL);
-
- if (data->render_to_texture)
- {
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- drawable->texcolorpick, 0);
- e3d_renderer_clear(renderer, &data->bg_color);
- }
- else
- {
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- drawable->tex, 0);
- e3d_renderer_clear(renderer, &data->bg_color);
- }
-}
-
-void
-_scene_render(E3D_Drawable *drawable, E3D_Renderer *renderer, Evas_Canvas3D_Scene_Public_Data *data)
-{
- Eina_List *l;
- Evas_Canvas3D_Node *n;
- const Eina_Matrix4 *matrix_eye;
- Evas_Canvas3D_Node *light;
- Eina_Matrix4 matrix_light_eye, matrix_vp;;
- Evas_Canvas3D_Light_Data *ld = NULL;
- Evas_Canvas3D_Node_Data *pd_light_node;
- Eina_Quaternion planes[6];
-
- /* Get eye matrix. */
- Evas_Canvas3D_Node_Data *pd_camera_node = efl_data_scope_get(data->camera_node, EVAS_CANVAS3D_NODE_CLASS);
- matrix_eye = &pd_camera_node->data.camera.matrix_world_to_eye;
-
- Evas_Canvas3D_Camera_Data *pd = efl_data_scope_get(pd_camera_node->data.camera.camera, EVAS_CANVAS3D_CAMERA_CLASS);
-
- light = eina_list_data_get(data->light_nodes);
-
- if (data->shadows_enabled)
- {
- pd_light_node = efl_data_scope_get(light, EVAS_CANVAS3D_NODE_CLASS);
- evas_mat4_inverse_build(&matrix_light_eye,
- &pd_light_node->position_world, &pd_light_node->orientation_world, &pd_light_node->scale_world);
- ld = efl_data_scope_get(pd_light_node->data.light.light, EVAS_CANVAS3D_LIGHT_CLASS);
- _shadowmap_render(drawable, renderer, data, &matrix_light_eye, light);
- }
-
- eina_matrix4_multiply(&matrix_vp, &pd->projection, matrix_eye);
- evas_frustum_calculate(planes, &matrix_vp);
-
- EINA_LIST_FOREACH(data->mesh_nodes, l, n)
- {
- Eina_Matrix4 matrix_mv;
- Eina_Matrix4 matrix_light;
- Eina_Matrix4 matrix_mvp;
- Eina_Iterator *it;
- void *ptr;
- Evas_Canvas3D_Node_Data *pd_mesh_node = efl_data_scope_get(n, EVAS_CANVAS3D_NODE_CLASS);
-
- // TODO Add other frustum shapes
- if (evas_is_sphere_in_frustum(&pd_mesh_node->bsphere, planes))
- {
-
- if (data->shadows_enabled)
- {
- eina_matrix4_multiply(&matrix_mv, &matrix_light_eye,
- &pd_mesh_node->data.mesh.matrix_local_to_world);
- eina_matrix4_multiply(&matrix_light, &ld->projection,
- &matrix_mv);
- }
-
- eina_matrix4_multiply(&matrix_mv, matrix_eye, &pd_mesh_node->data.mesh.matrix_local_to_world);
- eina_matrix4_multiply(&matrix_mvp, &pd->projection,
- &matrix_mv);
-
- it = eina_hash_iterator_data_new(pd_mesh_node->data.mesh.node_meshes);
- while (eina_iterator_next(it, &ptr))
- {
- Evas_Canvas3D_Node_Mesh *nm = (Evas_Canvas3D_Node_Mesh *)ptr;
- Evas_Canvas3D_Mesh_Data *pdmesh = efl_data_scope_get(nm->mesh, EVAS_CANVAS3D_MESH_CLASS);
- /*In case LOD enable pass in render only LOD meshes in dependences of the
- distance to the camera node:
- near_boundary <= distance <= far_boundary*/
- CHECK_LOD_DISTANCE
- if (data->shadows_enabled)
- {
- pdmesh->shadowed = EINA_TRUE;
- _mesh_draw(renderer, nm->mesh, nm->frame, light, matrix_eye, &matrix_mv, &matrix_mvp, &matrix_light);
- pdmesh->shadowed = EINA_FALSE;
- }
- else _mesh_draw(renderer, nm->mesh, nm->frame, light, matrix_eye, &matrix_mv, &matrix_mvp, NULL);
- }
- eina_iterator_free(it);
- }
- }
- e3d_renderer_flush(renderer);
-}
-
-void
-e3d_drawable_scene_render(E3D_Drawable *drawable, E3D_Renderer *renderer, Evas_Canvas3D_Scene_Public_Data *data)
-{
- /* Set up render target. */
- e3d_renderer_target_set(renderer, drawable);
- e3d_renderer_clear(renderer, &data->bg_color);
-
- if (data->post_processing)
- e3d_drawable_scene_render_to_texture(drawable, renderer, data);//Render to additional texture
- else
- _scene_render(drawable, renderer, data);//Common main render
-}
-
-void
-_scene_post_render(E3D_Drawable *drawable, E3D_Renderer *renderer, Evas_Canvas3D_Scene_Public_Data *data)
-{
- E3D_Draw_Data drawable_data;
- float vertices_of_square[] = {-1.0, 1.0, 0.0, 1.0, 1.0, 0.0,
- -1.0, -1.0, 0.0, 1.0, -1.0, 0.0};
- unsigned short indices_of_square[] = {0, 1, 2, 2, 1, 3};
-
- memset(&drawable_data, 0x00, sizeof(E3D_Draw_Data));
-
- drawable_data.flags |= E3D_SHADER_FLAG_VERTEX_POSITION;
- drawable_data.mode = data->post_processing_type;
- drawable_data.assembly = EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES;
- drawable_data.indices = indices_of_square;
- drawable_data.vertex_count = 4;
- drawable_data.index_count = 6;
- drawable_data.index_format = EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT;
- eina_matrix4_identity(&drawable_data.matrix_mv);
- eina_matrix4_identity(&drawable_data.matrix_mvp);
- drawable_data.frame_size_h = (Evas_Real)drawable->h;
- drawable_data.frame_size_w = (Evas_Real)drawable->w;
- /*Initialize Evas_Canvas3D_Vertex_Buffer for full screen quard*/
- drawable_data.vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].vertex0.data = (void *)vertices_of_square;
- drawable_data.vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].vertex0.element_count = 3;
- drawable_data.vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].vertex0.stride = 3 * sizeof(float);
- drawable_data.vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].vertex0.owns_data = EINA_FALSE;
- drawable_data.vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].vertex0.size = 0;
-
- e3d_renderer_clear(renderer, &data->bg_color);
-
- /*Initialize texture units*/
- drawable_data.smap_sampler = e3d_renderer_sampler_shadowmap_get(renderer);
- drawable_data.colortex_sampler = e3d_renderer_sampler_colortexture_get(renderer);
-
- /*Render full screen quard with color pick texture unit*/
- e3d_renderer_draw(renderer, &drawable_data);
- e3d_renderer_flush(renderer);
-}
-
-Eina_Bool
-e3d_drawable_scene_render_to_texture(E3D_Drawable *drawable, E3D_Renderer *renderer,
- Evas_Canvas3D_Scene_Public_Data *data)
-{
- const Eina_Matrix4 *matrix_eye;
- Evas_Canvas3D_Shader_Mode shader_mode;
- Eina_Stringshare *tmp;
- Eina_Iterator *itmn;
- void *ptrmn;
- Eina_List *repeat_node = NULL;
- Evas_Color *unic_color = NULL;
-
- e3d_renderer_color_pick_target_set(renderer, drawable);
- e3d_renderer_clear(renderer, &data->bg_color);
-
- if (data->color_pick_enabled) //Use rendering to texture in color pick mechanism
- {
- Evas_Canvas3D_Node_Data *pd_camera_node = efl_data_scope_get(data->camera_node, EVAS_CANVAS3D_NODE_CLASS);
- matrix_eye = &pd_camera_node->data.camera.matrix_world_to_eye;
- Evas_Canvas3D_Camera_Data *pd = efl_data_scope_get(pd_camera_node->data.camera.camera, EVAS_CANVAS3D_CAMERA_CLASS);
-
- itmn = eina_hash_iterator_data_new(data->colors_node_mesh);
-
- while (eina_iterator_next(itmn, &ptrmn))
- {
- Evas_Canvas3D_Node *n;
- Eina_Array *arr = NULL;
-
- arr = (Eina_Array *)ptrmn;
- n = (Evas_Canvas3D_Node *)eina_array_data_get(arr, 0);
- /*To avoid repeatedly render mesh*/
- if (!repeat_node)
- repeat_node = eina_list_append(repeat_node, (void*)n);
- else
- {
- if (eina_list_data_find(repeat_node, (void *)n))
- continue;
- else
- repeat_node = eina_list_append(repeat_node, (void *)n);
- }
- Evas_Canvas3D_Node_Data *pd_mesh_node = efl_data_scope_get(n, EVAS_CANVAS3D_NODE_CLASS);
- RENDER_MESH_NODE_ITERATE_BEGIN(eye)
- {
- if (pdmesh->color_pick_enabled)
- {
- tmp = eina_stringshare_printf("%p %p", n, nm->mesh);
- unic_color = (Evas_Color *)eina_hash_find(data->node_mesh_colors, tmp);
- if (unic_color)
- {
- pdmesh->color_pick_key.r = unic_color->r;
- pdmesh->color_pick_key.g = unic_color->g;
- pdmesh->color_pick_key.b = unic_color->b;
- shader_mode = pdmesh->shader_mode;
- pdmesh->shader_mode = EVAS_CANVAS3D_SHADER_MODE_COLOR_PICK;
- _mesh_draw(renderer, nm->mesh, nm->frame, NULL, matrix_eye, &matrix_mv,
- &matrix_mvp, NULL);
- pdmesh->shader_mode = shader_mode;
- }
- eina_stringshare_del(tmp);
- }
- }
- RENDER_MESH_NODE_ITERATE_END
- }
- eina_iterator_free(itmn);
- eina_list_free(repeat_node);
- }
- else
- {
- _scene_render(drawable, renderer, data); //Just render scene in texture
- glBindFramebuffer(GL_FRAMEBUFFER, drawable->fbo);
- /*Render full screen quard*/
- if (data->post_processing)
- _scene_post_render(drawable, renderer, data);
- }
-
- return EINA_TRUE;
-}
-
-void
-e3d_drawable_texture_pixel_color_get(GLuint tex EINA_UNUSED, int x, int y,
- Evas_Color *color, void *drawable)
-{
- E3D_Drawable *d = (E3D_Drawable *)drawable;
-
- glBindFramebuffer(GL_FRAMEBUFFER, d->color_pick_fb_id);
-
- GLubyte pixel[4] = {0, 0, 0, 0};
- glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
- color->r = (double)pixel[0] / 255;
- color->g = (double)pixel[1] / 255;
- color->b = (double)pixel[2] / 255;
-
- glBindFramebuffer(GL_FRAMEBUFFER, d->fbo);
-}
-
-void
-e3d_drawable_texture_rendered_pixels_get(GLuint tex EINA_UNUSED, int x, int y, int w, int h,
- void *drawable EINA_UNUSED, void *data)
-{
- DATA32 *buffer = (DATA32 *)data;
- DATA32 *datarowup = NULL, *datarowlow = NULL;
- DATA32 pixel;
- int i, j, width = 0, up, bellow;
-
- glReadPixels(x, y, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (GLubyte *)buffer);
-
- /*Due to returned pixels buffer filled as from the
- bottom left of the screen going up to the top right*/
- datarowup = malloc(w * sizeof(DATA32));
- datarowlow = malloc(w * sizeof(DATA32));
-
- if (!datarowup || !datarowlow)
- {
- ERR("Not enough memory");
- if (datarowup) free(datarowup);
- if (datarowlow) free(datarowlow);
- return;
- }
- for (j = 0; j < h / 2; j++)
- {
- bellow = h * w - width;
- up = w + width;
-
- for (i = w - 1; i >= 0; i--)
- {
- pixel = buffer[bellow];
- datarowlow[i] = ((pixel & 0x000000ff) << 16) +
- ((pixel & 0x00ff0000) >> 16) +
- ((pixel & 0xff00ff00));
- pixel = buffer[up];
- datarowup[i] = ((pixel & 0x000000ff) << 16) +
- ((pixel & 0x00ff0000) >> 16) +
- ((pixel & 0xff00ff00));
- bellow--;
- up--;
- }
- memcpy(buffer + width, datarowlow, w * sizeof(DATA32));
- width += w;
- memcpy(buffer + (h * w - width), datarowup, w * sizeof(DATA32));
- }
- free(datarowup);
- free(datarowlow);
-}
-#undef CHECK_LOD_DISTANCE
-#undef RENDER_MESH_NODE_ITERATE_BEGIN
-#undef RENDER_MESH_NODE_ITERATE_END
diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d_common.h b/src/modules/evas/engines/gl_common/evas_gl_3d_common.h
deleted file mode 100644
index 6f01d1adb3..0000000000
--- a/src/modules/evas/engines/gl_common/evas_gl_3d_common.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef EVAS_GL_COMMON_H
-# error You shall not include this header directly
-#endif
-
-typedef struct _E3D_Texture E3D_Texture;
-typedef struct _E3D_Drawable E3D_Drawable;
-typedef struct _E3D_Renderer E3D_Renderer;
-
-/* Texture */
-E3D_Texture *e3d_texture_new(Eina_Bool use_atlas);
-void e3d_texture_free(E3D_Texture *texture);
-
-void e3d_texture_size_get(const E3D_Texture *texture, int *w, int *h);
-void e3d_texture_set(Evas_Engine_GL_Context *gc, E3D_Texture *texture, Evas_GL_Image *im);
-Evas_GL_Image *e3d_texture_get(E3D_Texture *texture);
-
-void e3d_texture_import(E3D_Texture *texture, GLuint tex);
-Eina_Bool e3d_texture_is_imported_get(const E3D_Texture *texture);
-
-void e3d_texture_wrap_set(E3D_Texture *texture, Evas_Canvas3D_Wrap_Mode s, Evas_Canvas3D_Wrap_Mode t);
-void e3d_texture_wrap_get(const E3D_Texture *texture, Evas_Canvas3D_Wrap_Mode *s, Evas_Canvas3D_Wrap_Mode *t);
-
-void e3d_texture_filter_set(E3D_Texture *texture, Evas_Canvas3D_Texture_Filter min, Evas_Canvas3D_Texture_Filter mag);
-void e3d_texture_filter_get(const E3D_Texture *texture, Evas_Canvas3D_Texture_Filter *min, Evas_Canvas3D_Texture_Filter *mag);
-
-/* Drawable */
-E3D_Drawable *e3d_drawable_new(int w, int h, int alpha, GLenum depth_format, GLenum stencil_format);
-void e3d_drawable_free(E3D_Drawable *drawable);
-void e3d_drawable_scene_render(E3D_Drawable *drawable, E3D_Renderer *renderer, Evas_Canvas3D_Scene_Public_Data *data);
-Eina_Bool e3d_drawable_scene_render_to_texture(E3D_Drawable *drawable, E3D_Renderer *renderer, Evas_Canvas3D_Scene_Public_Data *data);
-void e3d_drawable_size_get(E3D_Drawable *drawable, int *w, int *h);
-GLuint e3d_drawable_texture_id_get(E3D_Drawable *drawable);
-GLuint e3d_drawable_texture_color_pick_id_get(E3D_Drawable *drawable);
-void e3d_drawable_texture_pixel_color_get(GLuint tex EINA_UNUSED, int x, int y, Evas_Color *color, void *drawable);
-GLenum e3d_drawable_format_get(E3D_Drawable *drawable);
-void e3d_drawable_texture_rendered_pixels_get(GLuint tex EINA_UNUSED, int x, int y, int w, int h,
- void *drawable EINA_UNUSED, void *data);
-/* Renderer */
-E3D_Renderer *e3d_renderer_new(void);
-void e3d_renderer_free(E3D_Renderer *renderer);
diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d_private.h b/src/modules/evas/engines/gl_common/evas_gl_3d_private.h
deleted file mode 100644
index 1c4d2adfac..0000000000
--- a/src/modules/evas/engines/gl_common/evas_gl_3d_private.h
+++ /dev/null
@@ -1,183 +0,0 @@
-#ifndef EVAS_GL_3D_PRIVATE_H
-#define EVAS_GL_3D_PRIVATE_H
-
-#include "evas_gl_common.h"
-
-typedef struct _E3D_Program E3D_Program;
-typedef struct _E3D_Draw_Data E3D_Draw_Data;
-typedef unsigned long E3D_Shader_Flag;
-
-// NOTE: order here should be equal with flag names in file evas_gl_3d_shader.c
-#define E3D_SHADER_FLAG_NORMALIZE_NORMALS (1 << 0)
-#define E3D_SHADER_FLAG_VERTEX_POSITION (1 << 1)
-#define E3D_SHADER_FLAG_VERTEX_POSITION_BLEND (1 << 2)
-#define E3D_SHADER_FLAG_VERTEX_NORMAL (1 << 3)
-#define E3D_SHADER_FLAG_VERTEX_NORMAL_BLEND (1 << 4)
-#define E3D_SHADER_FLAG_VERTEX_TANGENT (1 << 5)
-#define E3D_SHADER_FLAG_VERTEX_TANGENT_BLEND (1 << 6)
-#define E3D_SHADER_FLAG_VERTEX_COLOR (1 << 7)
-#define E3D_SHADER_FLAG_VERTEX_COLOR_BLEND (1 << 8)
-#define E3D_SHADER_FLAG_VERTEX_TEXCOORD (1 << 9)
-#define E3D_SHADER_FLAG_VERTEX_TEXCOORD_BLEND (1 << 10)
-#define E3D_SHADER_FLAG_LIGHT_DIRECTIONAL (1 << 11)
-#define E3D_SHADER_FLAG_LIGHT_SPOT (1 << 12)
-#define E3D_SHADER_FLAG_LIGHT_ATTENUATION (1 << 13)
-#define E3D_SHADER_FLAG_AMBIENT (1 << 14)
-#define E3D_SHADER_FLAG_DIFFUSE (1 << 15)
-#define E3D_SHADER_FLAG_SPECULAR (1 << 16)
-#define E3D_SHADER_FLAG_EMISSION (1 << 17)
-#define E3D_SHADER_FLAG_DIFFUSE_TEXTURE (1 << 18)
-#define E3D_SHADER_FLAG_AMBIENT_TEXTURE (1 << 19)
-#define E3D_SHADER_FLAG_SPECULAR_TEXTURE (1 << 20)
-#define E3D_SHADER_FLAG_EMISSION_TEXTURE (1 << 21)
-#define E3D_SHADER_FLAG_NORMAL_TEXTURE (1 << 22)
-#define E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND (1 << 23)
-#define E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND (1 << 24)
-#define E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND (1 << 25)
-#define E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND (1 << 26)
-#define E3D_SHADER_FLAG_NORMAL_TEXTURE_BLEND (1 << 27)
-#define E3D_SHADER_FLAG_FOG_ENABLED (1 << 28)
-#define E3D_SHADER_FLAG_ALPHA_TEST_ENABLED (1 << 29)
-#define E3D_SHADER_FLAG_SHADOWED (1 << 30)
-#define E3D_SHADER_FLAG_COUNT 31
-
-static inline Eina_Bool
-_flags_need_tex_coord(E3D_Shader_Flag flags)
-{
- return (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE) ||
- (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE) ||
- (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE) ||
- (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE) ||
- (flags & E3D_SHADER_FLAG_NORMAL_TEXTURE);
-}
-
-struct _E3D_Draw_Data
-{
- E3D_Shader_Flag flags;
- Evas_Canvas3D_Shader_Mode mode;
-
- Eina_Matrix4 matrix_mvp;
- Eina_Matrix4 matrix_mv;
- Eina_Matrix3 matrix_normal;
- Eina_Matrix4 matrix_light;
-
- struct {
- Evas_Canvas3D_Vertex_Buffer vertex0;
- Evas_Canvas3D_Vertex_Buffer vertex1;
- Evas_Real weight;
- } vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_COUNT];
-
- Evas_Canvas3D_Vertex_Assembly assembly;
- int vertex_count;
- int index_count;
- Evas_Canvas3D_Index_Format index_format;
- const void *indices;
-
- GLint texture_count;
-
- struct {
- Evas_Color color;
- GLint sampler0;
- GLint sampler1;
- E3D_Texture *tex0;
- E3D_Texture *tex1;
- Evas_Real texture_weight;
- } materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT];
-
- Evas_Real shininess;
-
- GLint smap_sampler;
- GLint colortex_sampler;
- Evas_Canvas3D_Blend_Func blend_sfactor;
- Evas_Canvas3D_Blend_Func blend_dfactor;
- Eina_Bool blending : 1;
-
- Evas_Canvas3D_Comparison alpha_comparison;
- Evas_Real alpha_ref_value;
- Eina_Bool alpha_test_enabled :1;
-
- struct {
- Eina_Quaternion position;
- Eina_Vector3 spot_dir;
- Evas_Real spot_exp;
- Evas_Real spot_cutoff_cos;
- Eina_Vector3 atten;
- Evas_Color ambient;
- Evas_Color diffuse;
- Evas_Color specular;
- } light;
- Evas_Color fog_color;
- Evas_Color color_pick_key;
- /*Sets of the quality of shadow rendering*/
- Evas_Real pcf_step;
- Evas_Real pcf_size;
- Evas_Real constant_bias;
-
- Eina_Bool render_to_texture;
-
- Evas_Real frame_size_h;
- Evas_Real frame_size_w;
-};
-
-struct _E3D_Texture
-{
- /*Offset for atlasses*/
- int x, y;
- int w, h;
-
- Evas_GL_Image *surface;
- /*Tranformation matrix, use it for adjusting texture unit coordinates*/
- Eina_Matrix3 trans;
-
- GLuint tex;
-
- Eina_Bool wrap_dirty;
- GLenum wrap_s;
- GLenum wrap_t;
-
- Eina_Bool filter_dirty;
- GLenum filter_min;
- GLenum filter_mag;
- /*Use atlas for generation texture unit, @EINA_TRUE by default*/
- Eina_Bool atlas_enable;
-};
-
-struct _E3D_Drawable
-{
- int w, h;
- int alpha;
- GLenum format;
- GLenum depth_format;
- GLenum stencil_format;
- GLuint tex;
- GLuint fbo;
- GLuint depth_stencil_buf;
- GLuint depth_buf;
- GLuint stencil_buf;
- GLuint texDepth;
- GLuint texcolorpick;
- GLuint color_pick_fb_id;
-};
-
-/* Texture internal functions. */
-void e3d_texture_param_update(E3D_Texture *texture);
-
-/* Program */
-E3D_Program *e3d_program_new(Evas_Canvas3D_Shader_Mode mode, E3D_Shader_Flag flags);
-void e3d_program_free(E3D_Program *program);
-GLuint e3d_program_id_get(const E3D_Program *program);
-Evas_Canvas3D_Shader_Mode e3d_program_shader_mode_get(const E3D_Program *program);
-E3D_Shader_Flag e3d_program_shader_flags_get(const E3D_Program *program);
-void e3d_program_uniform_upload(E3D_Program *program, const E3D_Draw_Data *data);
-
-/* Renderer */
-void e3d_renderer_target_set(E3D_Renderer *renderer, E3D_Drawable *target);
-void e3d_renderer_viewport_set(E3D_Renderer *renderer, int x, int y, int w, int h);
-void e3d_renderer_clear(E3D_Renderer *renderer, const Evas_Color *color);
-void e3d_renderer_draw(E3D_Renderer *renderer, E3D_Draw_Data *data);
-void e3d_renderer_flush(E3D_Renderer *renderer);
-void e3d_renderer_color_pick_target_set(E3D_Renderer *renderer, E3D_Drawable *drawable);
-Eina_Bool e3d_renderer_rendering_to_texture_get(E3D_Renderer *renderer);
-GLint e3d_renderer_sampler_colortexture_get(E3D_Renderer *renderer);
-GLint e3d_renderer_sampler_shadowmap_get(E3D_Renderer *renderer);
-#endif /* EVAS_GL_3D_PRIVATE_H */
diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c b/src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c
deleted file mode 100644
index 2e4f885b77..0000000000
--- a/src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c
+++ /dev/null
@@ -1,428 +0,0 @@
-#include "evas_gl_private.h"
-#include "evas_gl_3d_private.h"
-
-#define E3D_MAX_TEXTURE_COUNT 8
-#define E3D_MAX_VERTEX_ATTRIB_COUNT 8
-
-struct _E3D_Renderer
-{
- Eina_List *programs;
-
- GLuint fbo;
- GLuint program;
- E3D_Texture *textures[E3D_MAX_TEXTURE_COUNT];
-
- Eina_Bool vertex_attrib_enable[E3D_MAX_VERTEX_ATTRIB_COUNT];
- Eina_Bool depth_test_enable;
- GLuint texDepth;
- GLint smap_sampler;
- Eina_Bool render_to_texture;
- GLuint texcolorpick;
- GLint colortex_sampler;
-};
-
-static inline GLenum
-_gl_assembly_get(Evas_Canvas3D_Vertex_Assembly assembly)
-{
- switch (assembly)
- {
- case EVAS_CANVAS3D_VERTEX_ASSEMBLY_POINTS:
- return GL_POINTS;
- case EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES:
- return GL_LINES;
- case EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINE_STRIP:
- return GL_LINE_STRIP;
- case EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINE_LOOP:
- return GL_LINE_LOOP;
- case EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES:
- return GL_TRIANGLES;
- case EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_STRIP:
- return GL_TRIANGLE_STRIP;
- case EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLE_FAN:
- return GL_TRIANGLE_FAN;
- default:
- return GL_NONE;
- }
-}
-
-static inline GLenum
-_gl_blend_func_get(Evas_Canvas3D_Blend_Func blend_func)
-{
- switch (blend_func)
- {
- case EVAS_CANVAS3D_BLEND_FUNC_ZERO:
- return GL_ZERO;
- case EVAS_CANVAS3D_BLEND_FUNC_ONE:
- return GL_ONE;
- case EVAS_CANVAS3D_BLEND_FUNC_SRC_COLOR:
- return GL_SRC_COLOR;
- case EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_COLOR:
- return GL_ONE_MINUS_SRC_COLOR;
- case EVAS_CANVAS3D_BLEND_FUNC_DST_COLOR:
- return GL_DST_COLOR;
- case EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_DST_COLOR:
- return GL_ONE_MINUS_DST_COLOR;
- case EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA:
- return GL_SRC_ALPHA;
- case EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_SRC_ALPHA:
- return GL_ONE_MINUS_SRC_ALPHA;
- case EVAS_CANVAS3D_BLEND_FUNC_DST_ALPHA:
- return GL_DST_ALPHA;
- case EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_DST_ALPHA:
- return GL_ONE_MINUS_DST_ALPHA;
- case EVAS_CANVAS3D_BLEND_FUNC_CONSTANT_COLOR:
- return GL_CONSTANT_COLOR;
- case EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_CONSTANT_COLOR:
- return GL_ONE_MINUS_CONSTANT_COLOR;
- case EVAS_CANVAS3D_BLEND_FUNC_CONSTANT_ALPHA:
- return GL_CONSTANT_ALPHA;
- case EVAS_CANVAS3D_BLEND_FUNC_ONE_MINUS_CONSTANT_ALPHA:
- return GL_ONE_MINUS_CONSTANT_ALPHA;
- case EVAS_CANVAS3D_BLEND_FUNC_SRC_ALPHA_SATURATE:
- return GL_SRC_ALPHA_SATURATE;
- default:
- return GL_ZERO;
- }
-}
-
-#ifndef GL_GLES
-static inline GLenum
-_gl_comparison_func_get(Evas_Canvas3D_Comparison comparison_func)
-{
- switch (comparison_func)
- {
- case EVAS_CANVAS3D_COMPARISON_NEVER:
- return GL_NEVER;
- case EVAS_CANVAS3D_COMPARISON_LESS:
- return GL_LESS;
- case EVAS_CANVAS3D_COMPARISON_EQUAL:
- return GL_EQUAL;
- case EVAS_CANVAS3D_COMPARISON_LEQUAL:
- return GL_LEQUAL;
- case EVAS_CANVAS3D_COMPARISON_GREATER:
- return GL_GREATER;
- case EVAS_CANVAS3D_COMPARISON_NOTEQUAL:
- return GL_NOTEQUAL;
- case EVAS_CANVAS3D_COMPARISON_GEQUAL:
- return GL_GEQUAL;
- case EVAS_CANVAS3D_COMPARISON_ALWAYS:
- return GL_ALWAYS;
- default:
- return GL_ALWAYS;
- }
-}
-#endif
-
-static inline void
-_renderer_vertex_attrib_array_enable(E3D_Renderer *renderer, int index)
-{
- if (renderer->vertex_attrib_enable[index])
- return;
-
- glEnableVertexAttribArray(index);
- renderer->vertex_attrib_enable[index] = EINA_TRUE;
-}
-
-static inline void
-_renderer_vertex_attrib_array_disable(E3D_Renderer *renderer, int index)
-{
- if (!renderer->vertex_attrib_enable[index])
- return;
-
- glDisableVertexAttribArray(index);
- renderer->vertex_attrib_enable[index] = EINA_FALSE;
-}
-
-static inline void
-_renderer_vertex_attrib_pointer_set(E3D_Renderer *renderer EINA_UNUSED, int index,
- const Evas_Canvas3D_Vertex_Buffer *buffer)
-{
- glVertexAttribPointer(index, buffer->element_count, GL_FLOAT,
- GL_FALSE, buffer->stride, buffer->data);
-}
-
-static inline void
-_renderer_elements_draw(E3D_Renderer *renderer EINA_UNUSED, Evas_Canvas3D_Vertex_Assembly assembly,
- int count, Evas_Canvas3D_Index_Format format, const void *indices)
-{
- GLenum mode = _gl_assembly_get(assembly);
-
- if (format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_BYTE)
- glDrawElements(mode, count, GL_UNSIGNED_BYTE, indices);
- else if (format == EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT)
- glDrawElements(mode, count, GL_UNSIGNED_SHORT, indices);
-}
-
-static inline void
-_renderer_array_draw(E3D_Renderer *renderer EINA_UNUSED,
- Evas_Canvas3D_Vertex_Assembly assembly, int count)
-{
- GLenum mode = _gl_assembly_get(assembly);
-
- glDrawArrays(mode, 0, count);
-}
-
-static inline void
-_renderer_program_use(E3D_Renderer *renderer ,E3D_Program *program)
-{
- GLuint prog = e3d_program_id_get(program);
-
- if (renderer->program != prog)
- {
- glUseProgram(prog);
- renderer->program = prog;
- }
-}
-
-static inline void
-_renderer_texture_bind(E3D_Renderer *renderer, E3D_Draw_Data *data)
-{
- int i;
-
- for (i = 0; i < EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT; i++)
- {
- if (data->materials[i].tex0)
- {
- if (renderer->textures[data->materials[i].sampler0] != data->materials[i].tex0)
- {
- glActiveTexture(GL_TEXTURE0 + data->materials[i].sampler0);
- glBindTexture(GL_TEXTURE_2D, data->materials[i].tex0->tex);
- e3d_texture_param_update(data->materials[i].tex0);
-
- renderer->textures[data->materials[i].sampler0] = data->materials[i].tex0;
- }
- }
-
- if (data->materials[i].tex1)
- {
- if (renderer->textures[data->materials[i].sampler1] != data->materials[i].tex1)
- {
- glActiveTexture(GL_TEXTURE0 + data->materials[i].sampler1);
- glBindTexture(GL_TEXTURE_2D, data->materials[i].tex1->tex);
- e3d_texture_param_update(data->materials[i].tex1);
-
- renderer->textures[data->materials[i].sampler1] = data->materials[i].tex1;
- }
- }
- }
- if ((data->flags & E3D_SHADER_FLAG_SHADOWED) && (renderer->smap_sampler != data->smap_sampler))
- {
- glActiveTexture(GL_TEXTURE0 + data->smap_sampler);
- glBindTexture(GL_TEXTURE_2D, renderer->texDepth);
- renderer->smap_sampler = data->smap_sampler;
- }
- if (renderer->render_to_texture)
- {
- glActiveTexture(GL_TEXTURE0 + data->colortex_sampler);
- glBindTexture(GL_TEXTURE_2D, renderer->texcolorpick);
- renderer->colortex_sampler = data->colortex_sampler;
- }
-}
-
-static inline void
-_renderer_depth_test_enable(E3D_Renderer *renderer, Eina_Bool enable)
-{
- if (renderer->depth_test_enable != enable)
- {
- if (enable)
- {
- glEnable(GL_DEPTH_TEST);
- /* Use default depth func. */
- }
- else
- {
- glDisable(GL_DEPTH_TEST);
- }
-
- renderer->depth_test_enable = enable;
- }
-}
-
-E3D_Renderer *
-e3d_renderer_new(void)
-{
- E3D_Renderer *renderer = NULL;
-
- renderer = (E3D_Renderer *)calloc(1, sizeof(E3D_Renderer));
-
- if (renderer == NULL)
- {
- ERR("Failed to allocate memory.");
- return NULL;
- }
-
- return renderer;
-}
-
-void
-e3d_renderer_free(E3D_Renderer *renderer)
-{
- Eina_List *l;
- E3D_Program *p;
-
- EINA_LIST_FOREACH(renderer->programs, l, p)
- {
- e3d_program_free(p);
- }
-
- eina_list_free(renderer->programs);
-}
-
-void
-e3d_renderer_target_set(E3D_Renderer *renderer, E3D_Drawable *target)
-{
- if (renderer->fbo == target->fbo)
- return;
-
- glBindFramebuffer(GL_FRAMEBUFFER, target->fbo);
- glViewport(0, 0, target->w, target->h);
- renderer->fbo = target->fbo;
- renderer->texDepth = target->texDepth;
- renderer->texcolorpick = target->texcolorpick;
- renderer->render_to_texture = EINA_FALSE;
-}
-
-void
-e3d_renderer_color_pick_target_set(E3D_Renderer *renderer, E3D_Drawable *drawable)
-{
- glBindFramebuffer(GL_FRAMEBUFFER, drawable->color_pick_fb_id);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, drawable->texcolorpick, 0);
-#ifdef GL_GLES
- glBindRenderbuffer(GL_RENDERBUFFER, drawable->depth_stencil_buf);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
- GL_TEXTURE_2D, drawable->depth_stencil_buf, 0);
-#else
- glBindRenderbuffer(GL_RENDERBUFFER, drawable->depth_stencil_buf);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
- GL_RENDERBUFFER, drawable->depth_stencil_buf);
-#endif
- glViewport(0, 0, drawable->w, drawable->h);
- renderer->texDepth = drawable->texDepth;
- renderer->texcolorpick = drawable->texcolorpick;
- renderer->render_to_texture = EINA_TRUE;
-}
-
-Eina_Bool
-e3d_renderer_rendering_to_texture_get(E3D_Renderer *renderer)
-{
- return renderer->render_to_texture;
-}
-
-void
-e3d_renderer_clear(E3D_Renderer *renderer EINA_UNUSED, const Evas_Color *color)
-{
- glClearColor(color->r, color->g, color->b, color->a);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-}
-
-void
-e3d_renderer_draw(E3D_Renderer *renderer, E3D_Draw_Data *data)
-{
- Eina_List *l;
- E3D_Program *program = NULL, *p;
- int i, index = 0;
-
- _renderer_depth_test_enable(renderer, EINA_TRUE);
-
- EINA_LIST_FOREACH(renderer->programs, l, p)
- {
- if (e3d_program_shader_mode_get(p) == data->mode &&
- e3d_program_shader_flags_get(p) == data->flags)
- {
- program = p;
- break;
- }
- }
-
- if (program == NULL)
- {
- program = e3d_program_new(data->mode, data->flags);
-
- if (program == NULL)
- {
- ERR("Failed to create shader program.");
- return;
- }
-
- renderer->programs = eina_list_append(renderer->programs, program);
- }
-
- _renderer_program_use(renderer, program);
- e3d_program_uniform_upload(program, data);
- _renderer_texture_bind(renderer, data);
-
- /* Set up vertex attrib pointers. */
- index = 0;
-
- for (i = 0; i < EVAS_CANVAS3D_VERTEX_ATTRIB_COUNT; i++)
- {
- const Evas_Canvas3D_Vertex_Buffer *buffer;
-
- buffer = &data->vertices[i].vertex0;
-
- if (buffer->data != NULL)
- {
- _renderer_vertex_attrib_array_enable(renderer, index);
- _renderer_vertex_attrib_pointer_set(renderer, index, buffer);
- index++;
- }
-
- buffer = &data->vertices[i].vertex1;
-
- if (buffer->data != NULL)
- {
- _renderer_vertex_attrib_array_enable(renderer, index);
- _renderer_vertex_attrib_pointer_set(renderer, index, buffer);
- index++;
- }
- }
-
- while (index < E3D_MAX_VERTEX_ATTRIB_COUNT)
- _renderer_vertex_attrib_array_disable(renderer, index++);
-
- if (data->blending)
- {
- glEnable(GL_BLEND);
- glBlendFunc(_gl_blend_func_get(data->blend_sfactor), _gl_blend_func_get(data->blend_dfactor));
- }
- else glDisable(GL_BLEND);
-
-#ifndef GL_GLES
- if (data->alpha_test_enabled)
- {
- glEnable(GL_ALPHA_TEST);
- glAlphaFunc(_gl_comparison_func_get(data->alpha_comparison),
- (GLclampf)data->alpha_ref_value);
- }
- else glDisable(GL_ALPHA_TEST);
-#endif
-
- if (data->indices)
- {
- _renderer_elements_draw(renderer, data->assembly, data->index_count,
- data->index_format, data->indices);
- }
- else
- {
- _renderer_array_draw(renderer, data->assembly, data->vertex_count);
- }
-}
-
-void
-e3d_renderer_flush(E3D_Renderer *renderer EINA_UNUSED)
-{
- glFlush();
-}
-
-GLint
-e3d_renderer_sampler_colortexture_get(E3D_Renderer *renderer)
-{
- return renderer->colortex_sampler;
-}
-
-GLint
-e3d_renderer_sampler_shadowmap_get(E3D_Renderer *renderer)
-{
- return renderer->smap_sampler;
-}
diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d_shader.c b/src/modules/evas/engines/gl_common/evas_gl_3d_shader.c
deleted file mode 100644
index 95be4a63fa..0000000000
--- a/src/modules/evas/engines/gl_common/evas_gl_3d_shader.c
+++ /dev/null
@@ -1,751 +0,0 @@
-#include "evas_gl_3d_private.h"
-#include "shader_3d/evas_gl_3d_shaders.x"
-
-typedef enum _E3D_Uniform
-{
- E3D_UNIFORM_MATRIX_MVP,
- E3D_UNIFORM_MATRIX_MV,
- E3D_UNIFORM_MATRIX_NORMAL,
- E3D_UNIFORM_MATRIX_LIGHT,
-
- E3D_UNIFORM_POSITION_WEIGHT,
- E3D_UNIFORM_NORMAL_WEIGHT,
- E3D_UNIFORM_TANGENT_WEIGHT,
- E3D_UNIFORM_COLOR_WEIGHT,
- E3D_UNIFORM_TEXCOORD_WEIGHT,
-
- E3D_UNIFORM_TEXTURE_WEIGHT_AMBIENT,
- E3D_UNIFORM_TEXTURE_WEIGHT_DIFFUSE,
- E3D_UNIFORM_TEXTURE_WEIGHT_SPECULAR,
- E3D_UNIFORM_TEXTURE_WEIGHT_EMISSION,
- E3D_UNIFORM_TEXTURE_WEIGHT_NORMAL,
-
- E3D_UNIFORM_TEXTURE_AMBIENT0,
- E3D_UNIFORM_TEXTURE_DIFFUSE0,
- E3D_UNIFORM_TEXTURE_SPECULAR0,
- E3D_UNIFORM_TEXTURE_EMISSION0,
- E3D_UNIFORM_TEXTURE_NORMAL0,
-
- E3D_UNIFORM_TEXTURE_AMBIENT1,
- E3D_UNIFORM_TEXTURE_DIFFUSE1,
- E3D_UNIFORM_TEXTURE_SPECULAR1,
- E3D_UNIFORM_TEXTURE_EMISSION1,
- E3D_UNIFORM_TEXTURE_NORMAL1,
-
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_AMBIENT0,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_DIFFUSE0,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_SPECULAR0,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_EMISSION0,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_NORMAL0,
-
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_AMBIENT1,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_DIFFUSE1,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_SPECULAR1,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_EMISSION1,
- E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_NORMAL1,
-
- E3D_UNIFORM_SHADOWMAP,
- E3D_UNIFORM_SHADOWS_PCF_STEP,
- E3D_UNIFORM_SHADOWS_PCF_SIZE,
- E3D_UNIFORM_SHADOWS_CONSTANT_BIAS,
-
- E3D_UNIFORM_LIGHT_POSITION,
- E3D_UNIFORM_LIGHT_SPOT_DIR,
- E3D_UNIFORM_LIGHT_SPOT_EXP,
- E3D_UNIFORM_LIGHT_SPOT_CUTOFF_COS,
- E3D_UNIFORM_LIGHT_ATTENUATION,
- E3D_UNIFORM_LIGHT_AMBIENT,
- E3D_UNIFORM_LIGHT_DIFFUSE,
- E3D_UNIFORM_LIGHT_SPECULAR,
-
- E3D_UNIFORM_MATERIAL_AMBIENT,
- E3D_UNIFORM_MATERIAL_DIFFUSE,
- E3D_UNIFORM_MATERIAL_SPECULAR,
- E3D_UNIFORM_MATERIAL_EMISSION,
- E3D_UNIFORM_MATERIAL_SHININESS,
- E3D_UNIFORM_FOG_FACTOR,
- E3D_UNIFORM_FOG_COLOR,
- E3D_UNIFORM_COLOR_PICK,
- E3D_UNIFORM_ALPHATEST_COMPARISON,
- E3D_UNIFORM_ALPHATEST_REFVALUE,
- E3D_UNIFORM_RENDER_TO_TEXTURE,
- E3D_UNIFORM_FRAME_SIZE_H,
- E3D_UNIFORM_FRAME_SIZE_W,
- E3D_UNIFORM_COUNT,
-} E3D_Uniform;
-
-static const char *shader_flag_names[] =
-{
- "NORMALIZE_NORMALS",
- "VERTEX_POSITION",
- "VERTEX_POSITION_BLEND",
- "VERTEX_NORMAL",
- "VERTEX_NORMAL_BLEND",
- "VERTEX_TANGENT",
- "VERTEX_TANGENT_BLEND",
- "VERTEX_COLOR",
- "VERTEX_COLOR_BLEND",
- "VERTEX_TEXCOORD",
- "VERTEX_TEXCOORD_BLEND",
- "LIGHT_DIRECTIONAL",
- "LIGHT_SPOT",
- "LIGHT_ATTENUATION",
- "AMBIENT",
- "DIFFUSE",
- "SPECULAR",
- "EMISSION",
- "DIFFUSE_TEXTURE",
- "AMBIENT_TEXTURE",
- "SPECULAR_TEXTURE",
- "EMISSION_TEXTURE",
- "NORMAL_TEXTURE",
- "DIFFUSE_TEXTURE_BLEND",
- "AMBIENT_TEXTURE_BLEND",
- "SPECULAR_TEXTURE_BLEND",
- "EMISSION_TEXTURE_BLEND",
- "NORMAL_TEXTURE_BLEND",
- "FOG_ENABLED",
- "ALPHA_TEST_ENABLED",
- "SHADOWED"
-};
-
-typedef struct _E3D_Shader_String
-{
- char *str;
- int size;
- int count;
-} E3D_Shader_String;
-
-struct _E3D_Program
-{
- GLuint vert;
- GLuint frag;
- GLuint prog;
-
- E3D_Shader_Flag flags;
- Evas_Canvas3D_Shader_Mode mode;
-
- GLint uniform_locations[E3D_UNIFORM_COUNT];
-};
-
-static void _shader_string_init(E3D_Shader_String *string)
-{
- string->str = NULL;
- string->size = 0;
- string->count = 0;
-}
-
-static void _shader_string_fini(E3D_Shader_String *string)
-{
- if (string->str)
- {
- free(string->str);
- _shader_string_init(string);
- }
-}
-
-void _shader_string_add(E3D_Shader_String *shader, const char *str)
-{
- int len;
-
- if (str == NULL)
- return;
-
- len = strlen(str);
-
- if ((shader->size - shader->count) < len)
- {
- int new_size = (shader->count + len) * 2;
- char *new_buf = (char *)malloc(new_size + 1);
-
- if (shader->str)
- {
- memcpy(new_buf, shader->str, sizeof(char) * shader->count);
- free(shader->str);
- }
-
- shader->str = new_buf;
- shader->size = new_size;
- }
-
- memcpy(&shader->str[shader->count], str, len + 1);
- shader->count += len;
-}
-
-void _shader_flags_add(E3D_Shader_String *shader, E3D_Shader_Flag flags)
-{
- int i;
-
- for (i = 0; i < E3D_SHADER_FLAG_COUNT; i++)
- if (flags & (1 << i))
- {
- int len = strlen("#define ") + strlen(shader_flag_names[i]) + 2;
- char str[len];
- snprintf(str, len, "#define %s\n", shader_flag_names[i]);
- _shader_string_add(shader, str);
- }
-
- if(_flags_need_tex_coord(flags))
- _shader_string_add(shader, "#define NEED_TEX_COORD\n");
-}
-
-static inline Eina_Bool
-_shader_compile(GLuint shader, const char *src)
-{
- GLint ok = 0;
-
- glShaderSource(shader, 1, &src, NULL);
- glCompileShader(shader);
- glGetShaderiv(shader, GL_COMPILE_STATUS, &ok);
-
- if (!ok)
- {
- GLchar *log_str;
- GLint len;
- GLsizei info_len;
-
- glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len);
- log_str = (GLchar *)malloc(len);
- glGetShaderInfoLog(shader, len, &info_len, log_str);
- ERR("Shader compilation failed: %s", log_str);
- DBG("Shader source was:\n%s", src);
- free(log_str);
-
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-static inline void
-_program_vertex_attrib_bind(E3D_Program *program)
-{
- GLint index = 0;
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_POSITION)
- glBindAttribLocation(program->prog, index++, "aPosition0");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_POSITION_BLEND)
- glBindAttribLocation(program->prog, index++, "aPosition1");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_NORMAL)
- glBindAttribLocation(program->prog, index++, "aNormal0");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_NORMAL_BLEND)
- glBindAttribLocation(program->prog, index++, "aNormal1");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_TANGENT)
- glBindAttribLocation(program->prog, index++, "aTangent0");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_TANGENT_BLEND)
- glBindAttribLocation(program->prog, index++, "aTangent1");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_COLOR)
- glBindAttribLocation(program->prog, index++, "aColor0");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_COLOR_BLEND)
- glBindAttribLocation(program->prog, index++, "aColor1");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_TEXCOORD)
- glBindAttribLocation(program->prog, index++, "aTexCoord0");
-
- if (program->flags & E3D_SHADER_FLAG_VERTEX_TEXCOORD_BLEND)
- glBindAttribLocation(program->prog, index++, "aTexCoord1");
-}
-
-static inline Eina_Bool
-_program_build(E3D_Program *program, const char *vert_src, const char *frag_src)
-{
- GLint ok = 0;
-
- /* Create OpenGL vertex & fragment shader object. */
- program->vert = glCreateShader(GL_VERTEX_SHADER);
- program->frag = glCreateShader(GL_FRAGMENT_SHADER);
-
- /* Commpile vertex shader. */
- if (!_shader_compile(program->vert, vert_src))
- {
- ERR("Faield to compile vertex shader.");
- return EINA_FALSE;
- }
-
- /* Compile fragment shader. */
- if (!_shader_compile(program->frag, frag_src))
- {
- ERR("Failed to compile fragment shader.");
- return EINA_FALSE;
- }
-
- /* Create OpenGL program object. */
- program->prog = glCreateProgram();
-
- /* Attach shaders. */
- glAttachShader(program->prog, program->vert);
- glAttachShader(program->prog, program->frag);
-
- _program_vertex_attrib_bind(program);
- /* Link program. */
- glLinkProgram(program->prog);
-
- /* Check link status. */
- glGetProgramiv(program->prog, GL_LINK_STATUS, &ok);
-
- if (!ok)
- {
- GLchar *log_str;
- GLint len = 0;
- GLsizei info_len;
-
- glGetProgramiv(program->prog, GL_INFO_LOG_LENGTH, &len);
- log_str = (GLchar *)malloc(len);
- glGetProgramInfoLog(program->prog, len, &info_len, log_str);
- ERR("Shader link failed.\n%s", log_str);
- free(log_str);
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-static const char *uniform_names[] =
-{
- "uMatrixMvp",
- "uMatrixModelview",
- "uMatrixNormal",
- "uMatrixLight",
- "uPositionWeight",
- "uNormalWeight",
- "uTangentWeight",
- "uColorWeight",
- "uTexCoordWeight",
- "uTextureAmbientWeight",
- "uTextureDiffuseWeight",
- "uTextureSpecularWeight",
- "uTextureEmissionWeight",
- "uTextureNormalWeight",
- "uTextureAmbient0",
- "uTextureDiffuse0",
- "uTextureSpecular0",
- "uTextureEmission0",
- "uTextureNormal0",
- "uTextureAmbient1",
- "uTextureDiffuse1",
- "uTextureSpecular1",
- "uTextureEmission1",
- "uTextureNormal1",
- "uTextureMatrixTransformAmbient0",
- "uTextureMatrixTransformDiffuse0",
- "uTextureMatrixTransformSpecular0",
- "uTextureMatrixTransformEmission0",
- "uTextureMatrixTransformNormal0",
- "uTextureMatrixTransformAmbient1",
- "uTextureMatrixTransformDiffuse1",
- "uTextureMatrixTransformSpecular1",
- "uTextureMatrixTransformEmission1",
- "uTextureMatrixTransformNormal1",
- "uShadowMap",
- "uShadowsPCFStep",
- "uShadowsPCFSize",
- "uShadowsConstantBias",
- "uLightPosition",
- "uLightSpotDir",
- "uLightSpotExp",
- "uLightSpotCutoffCos",
- "uLightAtten",
- "uLightAmbient",
- "uLightDiffuse",
- "uLightSpecular",
- "uMaterialAmbient",
- "uMaterialDiffuse",
- "uMaterialSpecular",
- "uMaterialEmission",
- "uMaterialShininess",
- "uFogFactor",
- "uFogColor",
- "uColorPick",
- "uAlphaTestComparison",
- "uAlphaTestRefValue",
- "uColorTexture",
- "uFrameSizeH",
- "uFrameSizeW"
-};
-
-static inline void
-_program_uniform_init(E3D_Program *program)
-{
- int i;
- for (i = 0; i < E3D_UNIFORM_COUNT; i++)
- {
- program->uniform_locations[i] = glGetUniformLocation(program->prog, uniform_names[i]);
- }
-}
-
-#define UNIFORM_MATRIX3_FOREACH(m, data) \
- m[0] = data.xx; \
- m[1] = data.xy; \
- m[2] = data.xz; \
- m[3] = data.yx; \
- m[4] = data.yy; \
- m[5] = data.yz; \
- m[6] = data.zx; \
- m[7] = data.zy; \
- m[8] = data.zz;
-
-#define UNIFORM_MATRIX4_FOREACH(m, data) \
- m[0] = data.xx; \
- m[1] = data.xy; \
- m[2] = data.xz; \
- m[3] = data.xw; \
- m[4] = data.yx; \
- m[5] = data.yy; \
- m[6] = data.yz; \
- m[7] = data.yw; \
- m[8] = data.zx; \
- m[9] = data.zy; \
- m[10] = data.zz; \
- m[11] = data.zw; \
- m[12] = data.wx; \
- m[13] = data.wy; \
- m[14] = data.wz; \
- m[15] = data.ww;
-
-static inline void
-_uniform_upload(E3D_Uniform u, GLint loc, const E3D_Draw_Data *data)
-{
-#define SET_TEX_COORD_TRANSFORM_MATRIX(attrib, tn) \
- if (data->materials[attrib].tex##tn) \
- { \
- float m[9]; \
- UNIFORM_MATRIX3_FOREACH(m, data->materials[attrib].tex##tn->trans); \
- glUniformMatrix3fv(loc, 1, EINA_FALSE, &m[0]); \
- }
-
- switch (u)
- {
- case E3D_UNIFORM_MATRIX_MVP: {
- float m[16];
- UNIFORM_MATRIX4_FOREACH(m, data->matrix_mvp);
- glUniformMatrix4fv(loc, 1, EINA_FALSE, &m[0]);
- break;
- }
- case E3D_UNIFORM_MATRIX_MV: {
- float m[16];
- UNIFORM_MATRIX4_FOREACH(m, data->matrix_mv);
- glUniformMatrix4fv(loc, 1, EINA_FALSE, &m[0]);
- break;
- }
- case E3D_UNIFORM_MATRIX_NORMAL: {
- float m[9];
- UNIFORM_MATRIX3_FOREACH(m, data->matrix_normal);
- glUniformMatrix3fv(loc, 1, EINA_FALSE, &m[0]);
- break;
- }
- case E3D_UNIFORM_MATRIX_LIGHT: {
- float m[16];
- UNIFORM_MATRIX4_FOREACH(m, data->matrix_light);
- glUniformMatrix4fv(loc, 1, EINA_FALSE, &m[0]);
- break;
- }
- case E3D_UNIFORM_POSITION_WEIGHT:
- glUniform1f(loc, data->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION].weight);
- break;
- case E3D_UNIFORM_NORMAL_WEIGHT:
- glUniform1f(loc, data->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL].weight);
- break;
- case E3D_UNIFORM_TANGENT_WEIGHT:
- glUniform1f(loc, data->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TANGENT].weight);
- break;
- case E3D_UNIFORM_COLOR_WEIGHT:
- glUniform1f(loc, data->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_COLOR].weight);
- break;
- case E3D_UNIFORM_TEXCOORD_WEIGHT:
- glUniform1f(loc, data->vertices[EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD].weight);
- break;
- case E3D_UNIFORM_TEXTURE_WEIGHT_AMBIENT:
- glUniform1f(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].texture_weight);
- break;
- case E3D_UNIFORM_TEXTURE_WEIGHT_DIFFUSE:
- glUniform1f(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].texture_weight);
- break;
- case E3D_UNIFORM_TEXTURE_WEIGHT_SPECULAR:
- glUniform1f(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].texture_weight);
- break;
- case E3D_UNIFORM_TEXTURE_WEIGHT_EMISSION:
- glUniform1f(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].texture_weight);
- break;
- case E3D_UNIFORM_TEXTURE_WEIGHT_NORMAL:
- glUniform1f(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL].texture_weight);
- break;
- case E3D_UNIFORM_TEXTURE_AMBIENT0:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].sampler0);
- break;
- case E3D_UNIFORM_TEXTURE_DIFFUSE0:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].sampler0);
- break;
- case E3D_UNIFORM_TEXTURE_SPECULAR0:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].sampler0);
- break;
- case E3D_UNIFORM_TEXTURE_EMISSION0:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].sampler0);
- break;
- case E3D_UNIFORM_TEXTURE_NORMAL0:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL].sampler0);
- break;
- case E3D_UNIFORM_TEXTURE_AMBIENT1:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].sampler1);
- break;
- case E3D_UNIFORM_TEXTURE_DIFFUSE1:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].sampler1);
- break;
- case E3D_UNIFORM_TEXTURE_SPECULAR1:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].sampler1);
- break;
- case E3D_UNIFORM_TEXTURE_EMISSION1:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].sampler1);
- break;
- case E3D_UNIFORM_TEXTURE_NORMAL1:
- glUniform1i(loc, data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL].sampler1);
- break;
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_AMBIENT0: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 0)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_DIFFUSE0: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 0)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_SPECULAR0: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 0)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_EMISSION0: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION, 0)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_NORMAL0: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, 0)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_AMBIENT1: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, 1)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_DIFFUSE1: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, 1)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_SPECULAR1: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, 1)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_EMISSION1: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION, 1)
- break;
- }
- case E3D_UNIFORM_TEXTURE_MATRIX_TRANSFORM_NORMAL1: {
- SET_TEX_COORD_TRANSFORM_MATRIX(EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, 1)
- break;
- }
- case E3D_UNIFORM_SHADOWMAP:
- glUniform1i(loc, data->smap_sampler);
- break;
- case E3D_UNIFORM_SHADOWS_PCF_STEP:
- glUniform1f(loc, data->pcf_step);
- break;
- case E3D_UNIFORM_SHADOWS_PCF_SIZE:
- glUniform1f(loc, data->pcf_size);
- break;
- case E3D_UNIFORM_SHADOWS_CONSTANT_BIAS:
- glUniform1f(loc, data->constant_bias);
- break;
- case E3D_UNIFORM_LIGHT_POSITION:
- glUniform4f(loc, data->light.position.x, data->light.position.y,
- data->light.position.z, data->light.position.w);
- break;
- case E3D_UNIFORM_LIGHT_SPOT_DIR:
- glUniform3f(loc, data->light.spot_dir.x, data->light.spot_dir.y, data->light.spot_dir.z);
- break;
- case E3D_UNIFORM_LIGHT_SPOT_EXP:
- glUniform1f(loc, data->light.spot_exp);
- break;
- case E3D_UNIFORM_LIGHT_SPOT_CUTOFF_COS:
- glUniform1f(loc, data->light.spot_cutoff_cos);
- break;
- case E3D_UNIFORM_LIGHT_ATTENUATION:
- glUniform3f(loc, data->light.atten.x, data->light.atten.y, data->light.atten.z);
- break;
- case E3D_UNIFORM_LIGHT_AMBIENT:
- glUniform4f(loc,
- data->light.ambient.r, data->light.ambient.g,
- data->light.ambient.b, data->light.ambient.a);
- break;
- case E3D_UNIFORM_LIGHT_DIFFUSE:
- glUniform4f(loc,
- data->light.diffuse.r, data->light.diffuse.g,
- data->light.diffuse.b, data->light.diffuse.a);
- break;
- case E3D_UNIFORM_LIGHT_SPECULAR:
- glUniform4f(loc,
- data->light.specular.r, data->light.specular.g,
- data->light.specular.b, data->light.specular.a);
- break;
- case E3D_UNIFORM_MATERIAL_AMBIENT:
- glUniform4f(loc,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color.r,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color.g,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color.b,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color.a);
- break;
- case E3D_UNIFORM_MATERIAL_DIFFUSE:
- glUniform4f(loc,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color.r,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color.g,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color.b,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color.a);
- break;
- case E3D_UNIFORM_MATERIAL_SPECULAR:
- glUniform4f(loc,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color.r,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color.g,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color.b,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color.a);
- break;
- case E3D_UNIFORM_MATERIAL_EMISSION:
- glUniform4f(loc,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].color.r,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].color.g,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].color.b,
- data->materials[EVAS_CANVAS3D_MATERIAL_ATTRIB_EMISSION].color.a);
- break;
- case E3D_UNIFORM_MATERIAL_SHININESS:
- glUniform1f(loc, data->shininess);
- break;
- case E3D_UNIFORM_FOG_FACTOR:
- glUniform1f(loc, data->fog_color.a);
- break;
- case E3D_UNIFORM_FOG_COLOR:
- glUniform4f(loc, data->fog_color.r, data->fog_color.g, data->fog_color.b, 1);
- break;
- case E3D_UNIFORM_COLOR_PICK:
- glUniform4f(loc, data->color_pick_key.r, data->color_pick_key.g,
- data->color_pick_key.b, 1.0);
- break;
- case E3D_UNIFORM_ALPHATEST_COMPARISON:
- glUniform1i(loc,
- (data->alpha_comparison ? data->alpha_comparison : EVAS_CANVAS3D_COMPARISON_GREATER));
- break;
- case E3D_UNIFORM_ALPHATEST_REFVALUE:
- glUniform1f(loc, (data->alpha_ref_value ? data->alpha_ref_value : 0.0));
- break;
- case E3D_UNIFORM_RENDER_TO_TEXTURE:
- glUniform1i(loc, data->colortex_sampler);
- break;
- case E3D_UNIFORM_FRAME_SIZE_H:
- glUniform1f(loc, data->frame_size_h);
- break;
- case E3D_UNIFORM_FRAME_SIZE_W:
- glUniform1f(loc, data->frame_size_w);
- break;
- default:
- ERR("Invalid uniform ID.");
- break;
- }
-#undef SET_TEX_SHIFT
-}
-
-void
-e3d_program_uniform_upload(E3D_Program *program, const E3D_Draw_Data *data)
-{
- int i;
- for (i = 0; i < E3D_UNIFORM_COUNT; i++)
- {
- if (program->uniform_locations[i] != -1)
- {
- _uniform_upload(i, program->uniform_locations[i], data);
- }
- }
-}
-
-E3D_Program *
-e3d_program_new(Evas_Canvas3D_Shader_Mode mode, E3D_Shader_Flag flags)
-{
- E3D_Shader_String vert, frag;
- E3D_Program *program = NULL;
-
- _shader_string_init(&vert);
- _shader_string_init(&frag);
-
- program = (E3D_Program *)calloc(1, sizeof(E3D_Program));
-
- if (program == NULL)
- {
- ERR("Failed to allocate memory.");
- return NULL;
- }
-
- program->prog = glCreateProgram();
- program->vert = glCreateShader(GL_VERTEX_SHADER);
- program->frag = glCreateShader(GL_FRAGMENT_SHADER);
- program->mode = mode;
- program->flags = flags;
-
- _shader_flags_add(&vert, flags);
- _shader_string_add(&frag, vert.str);
-
- _shader_string_add(&vert, vertex_shaders[mode]);
- _shader_string_add(&frag, fragment_shaders[mode]);
-
- if (! _program_build(program, vert.str, frag.str))
- goto error;
-
- _program_uniform_init(program);
-
- _shader_string_fini(&vert);
- _shader_string_fini(&frag);
-
- return program;
-
-error:
- if (program->prog)
- glDeleteProgram(program->prog);
-
- if (program->vert)
- glDeleteShader(program->vert);
-
- if (program->frag)
- glDeleteShader(program->frag);
-
- _shader_string_fini(&vert);
- _shader_string_fini(&frag);
-
- free(program);
-
- return NULL;
-}
-
-void
-e3d_program_free(E3D_Program *program)
-{
- glDeleteProgram(program->prog);
- glDeleteShader(program->vert);
- glDeleteShader(program->frag);
- free(program);
-}
-
-GLuint
-e3d_program_id_get(const E3D_Program *program)
-{
- return program->prog;
-}
-
-Evas_Canvas3D_Shader_Mode
-e3d_program_shader_mode_get(const E3D_Program *program)
-{
- return program->mode;
-}
-
-E3D_Shader_Flag
-e3d_program_shader_flags_get(const E3D_Program *program)
-{
- return program->flags;
-}
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api.c b/src/modules/evas/engines/gl_common/evas_gl_api.c
index 30a95eee5d..e33613a8bb 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api.c
@@ -11,10 +11,10 @@
#define EVGLD_FUNC_BEGIN() \
{ \
EVGL_FUNC_BEGIN(); \
- _func_begin_debug(__FUNCTION__); \
+ _func_begin_debug(__func__); \
}
-#define EVGLD_FUNC_END() GLERRV(__FUNCTION__)
+#define EVGLD_FUNC_END() GLERRV(__func__)
#define _EVGL_INT_INIT_VALUE -3
#define SET_GL_ERROR(gl_error_type) \
@@ -546,15 +546,15 @@ _evgl_glClear(GLbitfield mask)
if (ctx->current_sfc->alpha && !rsc->direct.render_op_copy &&
(mask & GL_COLOR_BUFFER_BIT))
{
- if ((rsc->clear_color.a == 0) &&
- (rsc->clear_color.r == 0) &&
- (rsc->clear_color.g == 0) &&
- (rsc->clear_color.b == 0))
+ if (EINA_DBL_EQ(rsc->clear_color.a, 0) &&
+ EINA_DBL_EQ(rsc->clear_color.r, 0) &&
+ EINA_DBL_EQ(rsc->clear_color.g, 0) &&
+ EINA_DBL_EQ(rsc->clear_color.b, 0))
{
// Skip clear color as we don't want to write black
mask &= ~GL_COLOR_BUFFER_BIT;
}
- else if (rsc->clear_color.a != 1.0)
+ else if (!EINA_DBL_EQ(rsc->clear_color.a, 1.0))
{
// TODO: Draw a rectangle? This will never be the perfect solution though.
WRN("glClear() used with a semi-transparent color and direct rendering. "
@@ -1115,7 +1115,7 @@ _evgl_glGetFloatv(GLenum pname, GLfloat* params)
if (ctx->current_read_fbo == 0)
{
glGetFloatv(pname, params);
- if (*params == GL_COLOR_ATTACHMENT0)
+ if (EINA_DBL_EQ(*params, GL_COLOR_ATTACHMENT0))
{
*params = (GLfloat)GL_BACK;
return;
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
index 91e46338e9..11e76eed8b 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
@@ -122,7 +122,7 @@ struct wl_resource;
// Evas extensions from EGL extensions
#ifdef GL_GLES
-#define EGLDISPLAY_GET(a) _evgl_egl_display_get(__FUNCTION__, a)
+#define EGLDISPLAY_GET(a) _evgl_egl_display_get(__func__, a)
// this struct defines an EvasGLImage when using EGL
typedef struct _EvasGLImage {
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c b/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c
index 2c5e0adf70..c48234f55b 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c
@@ -9,10 +9,10 @@
#define EVGLD_FUNC_BEGIN() \
{ \
- _func_begin_debug(__FUNCTION__); \
+ _func_begin_debug(__func__); \
}
-#define EVGLD_FUNC_END() GLERRV(__FUNCTION__)
+#define EVGLD_FUNC_END() GLERRV(__func__)
static void *_gles1_handle = NULL;
static Evas_GL_API _gles1_api;
@@ -544,15 +544,15 @@ _evgl_gles1_glClear(GLbitfield mask)
*/
if (ctx->current_sfc->alpha && (mask & GL_COLOR_BUFFER_BIT))
{
- if ((rsc->clear_color.a == 0) &&
- (rsc->clear_color.r == 0) &&
- (rsc->clear_color.g == 0) &&
- (rsc->clear_color.b == 0))
+ if (EINA_DBL_EQ(rsc->clear_color.a, 0) &&
+ EINA_DBL_EQ(rsc->clear_color.r, 0) &&
+ EINA_DBL_EQ(rsc->clear_color.g, 0) &&
+ EINA_DBL_EQ(rsc->clear_color.b, 0))
{
// Skip clear color as we don't want to write black
mask &= ~GL_COLOR_BUFFER_BIT;
}
- else if (rsc->clear_color.a != 1.0)
+ else if (EINA_DBL_EQ(rsc->clear_color.a, 1.0))
{
// TODO: Draw a rectangle? This will never be the perfect solution though.
WRN("glClear() used with a semi-transparent color and direct rendering. "
diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h
index 0cc7f30573..2d9d825a75 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_common.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_common.h
@@ -165,7 +165,7 @@ struct _Evas_GL_Shared
#define DEF_CUTOUT 4096
#define MAX_PIPES 32
-#define DEF_PIPES 32
+#define DEF_PIPES 8
#define DEF_PIPES_SGX_540 24
#define DEF_PIPES_TEGRA_2 8
#define DEF_PIPES_TEGRA_3 24
@@ -368,6 +368,9 @@ struct _Evas_Engine_GL_Context
Eina_List *font_glyph_images;
Evas_GL_Image *def_surface;
RGBA_Image *font_surface;
+ int font_glyph_textures_size;
+ int font_glyph_atlas_size;
+ Eina_Bool font_glyph_gc_requested :1;
#ifdef GL_GLES
// FIXME: hack. expose egl display to gl core for egl image sec extn.
@@ -720,7 +723,7 @@ Evas_GL_Texture *evas_gl_common_texture_render_noscale_new(Evas_Engine_GL_Conte
Evas_GL_Texture *evas_gl_common_texture_dynamic_new(Evas_Engine_GL_Context *gc, Evas_GL_Image *im);
void evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im);
void evas_gl_common_texture_upload(Evas_GL_Texture *tex, RGBA_Image *im, unsigned int bytes_count);
-void evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force);
+Eina_Bool evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force);
Evas_GL_Texture *evas_gl_common_texture_alpha_new(Evas_Engine_GL_Context *gc, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
void evas_gl_common_texture_alpha_update(Evas_GL_Texture *tex, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
Evas_GL_Texture *evas_gl_common_texture_yuv_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
@@ -736,6 +739,7 @@ void evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex,
Evas_Colorspace evas_gl_common_gl_format_to_colorspace(GLuint f);
void evas_gl_common_image_alloc_ensure(Evas_GL_Image *im);
+Evas_GL_Image *evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const char *key, Evas_Image_Load_Opts *lo, int *error);
Evas_GL_Image *evas_gl_common_image_mmap(Evas_Engine_GL_Context *gc, Eina_File *f, const char *key, Evas_Image_Load_Opts *lo, int *error);
Evas_GL_Image *evas_gl_common_image_new_from_copied_data(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, Evas_Colorspace cspace);
Evas_GL_Image *evas_gl_common_image_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, Evas_Colorspace cspace);
@@ -871,7 +875,7 @@ __evas_gl_errdyn(int err, const char *file, const char *func, int line, const ch
# define GLERRV(op) do { \
int __gl_err = glGetError(); \
if (__gl_err != GL_NO_ERROR) \
- __evas_gl_errdyn(__gl_err, __FILE__, __FUNCTION__, __LINE__, op); \
+ __evas_gl_errdyn(__gl_err, __FILE__, __func__, __LINE__, op); \
} while (0)
/* Redefine common gl funcs */
# ifndef GL_ERRORS_NODEF
@@ -978,8 +982,6 @@ _comp_tex_sub_2d(Evas_Engine_GL_Context *gc, int x, int y, int w, int h, int fmt
#endif
-#include "evas_gl_3d_common.h"
-
#undef EAPI
#define EAPI
diff --git a/src/modules/evas/engines/gl_common/evas_gl_context.c b/src/modules/evas/engines/gl_common/evas_gl_context.c
index 6637a839df..26ff021cd4 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_context.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_context.c
@@ -319,7 +319,7 @@ evas_gl_symbols(void *(*GetProcAddress)(const char *name), const char *extsn)
FINDSYM(glsym_glStartTiling, "glActivateTileQCOM", NULL, glsym_func_void);
FINDSYM(glsym_glEndTiling, "glEndTilingQCOM", "GL_QCOM_tiled_rendering", glsym_func_void);
FINDSYM(glsym_glEndTiling, "glEndTiling", NULL, glsym_func_void);
-
+
if (!getenv("EVAS_GL_MAPBUFFER_DISABLE"))
{
// Not sure there's an EXT variant. (probably no KHR variant)
@@ -381,7 +381,8 @@ evas_gl_symbols(void *(*GetProcAddress)(const char *name), const char *extsn)
FINDSYM(glsym_glProgramParameteri, "glProgramParameteriEXT", "GL_EXT_geometry_shader4", glsym_func_void);
FINDSYM(glsym_glProgramParameteri, "glProgramParameteriARB", "GL_ARB_geometry_shader4", glsym_func_void);
- FINDSYMN(secsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", "GL_OES_EGL_image_external", glsym_func_void);
+ FINDSYM(secsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", "GL_OES_EGL_image_external", glsym_func_void);
+ FINDSYM(secsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", "GL_OES_EGL_image", glsym_func_void);
// Old SEC extensions
FINDSYMN(secsym_eglMapImageSEC, "eglMapImageSEC", NULL, secsym_func_void_ptr);
@@ -988,7 +989,7 @@ evas_gl_common_context_new(void)
&(shared->info.max_texture_units));
glGetIntegerv(GL_MAX_TEXTURE_SIZE,
&(shared->info.max_texture_size));
- shared->info.max_vertex_elements = 6 * 100000;
+ shared->info.max_vertex_elements = 6 * 100;
#ifdef GL_MAX_ELEMENTS_VERTICES
/* only applies to glDrawRangeElements. don't really need to get it.
glGetIntegerv(GL_MAX_ELEMENTS_VERTICES,
@@ -1719,8 +1720,7 @@ _push_mask(Evas_Engine_GL_Context *gc, const int pn, int nm, Evas_GL_Texture *mt
int mx, int my, int mw, int mh, Shader_Sampling msam, int nms)
{
double glmx, glmy, glmw, glmh, yinv = -1.f;
- double gw = gc->w, gh = gc->h;
- int i, cnt = 6;
+ int gw = gc->w, gh = gc->h, i, cnt = 6;
if (!((gc->pipe[0].shader.surface == gc->def_surface) ||
(!gc->pipe[0].shader.surface)))
@@ -1844,18 +1844,15 @@ pipe_region_expand(Evas_Engine_GL_Context *gc, int n,
}
static Eina_Bool
-vertex_array_size_check(Evas_Engine_GL_Context *gc EINA_UNUSED, int pn EINA_UNUSED, int n EINA_UNUSED)
+vertex_array_size_check(Evas_Engine_GL_Context *gc, int pn, int n)
{
- return 1;
-// this fixup breaks for expedite test 32. why?
-/* for reference
+// return 1;
if ((gc->pipe[pn].array.num + n) > gc->shared->info.max_vertex_elements)
{
shader_array_flush(gc);
return 0;
}
return 1;
- */
}
static int
@@ -1967,30 +1964,33 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_LINE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = 0;
- gc->pipe[pn].shader.cur_texm = mtexid;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = clip;
- gc->pipe[pn].shader.cx = cx;
- gc->pipe[pn].shader.cy = cy;
- gc->pipe[pn].shader.cw = cw;
- gc->pipe[pn].shader.ch = ch;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
-
- gc->pipe[pn].array.line = 1;
- gc->pipe[pn].array.anti_alias = gc->dc->anti_alias;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 0;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texa = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = !!mtex;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_LINE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = 0;
+ gc->pipe[pn].shader.cur_texm = mtexid;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = clip;
+ gc->pipe[pn].shader.cx = cx;
+ gc->pipe[pn].shader.cy = cy;
+ gc->pipe[pn].shader.cw = cw;
+ gc->pipe[pn].shader.ch = ch;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+
+ gc->pipe[pn].array.line = 1;
+ gc->pipe[pn].array.anti_alias = gc->dc->anti_alias;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 0;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texa = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = !!mtex;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 2);
@@ -2032,29 +2032,31 @@ evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
EINA_FALSE,
0, 0, 0, 0, 0,
mask_smooth);
-
- gc->pipe[pn].region.type = SHD_RECT;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = 0;
- gc->pipe[pn].shader.cur_texm = mtexid;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 0;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texa = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = !!mtex;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_RECT;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = 0;
+ gc->pipe[pn].shader.cur_texm = mtexid;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 0;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texa = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = !!mtex;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2251,29 +2253,32 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_IMAGE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = pt->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.tex_target = tex_target;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_IMAGE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = pt->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.tex_target = tex_target;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2285,21 +2290,21 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
(tex->im->orient == EVAS_IMAGE_ORIENT_90))
{
double tmp;
-
+
SWAP(&sw, &sh, tmp);
SWAP(&sx, &sy, tmp);
sy = tex->im->h - sh - sy;
}
- if (tex->im &&
+ else if (tex->im &&
(tex->im->orient == EVAS_IMAGE_ORIENT_180))
{
sx = tex->im->w - sw - sx;
sy = tex->im->h - sh - sy;
}
- if (tex->im &&
+ else if (tex->im &&
(tex->im->orient == EVAS_IMAGE_ORIENT_270))
{
double tmp;
@@ -2310,31 +2315,31 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
sx = tex->im->w - sw - sx;
}
- if (tex->im &&
+ else if (tex->im &&
(tex->im->orient == EVAS_IMAGE_FLIP_HORIZONTAL))
{
sx = tex->im->w - sw - sx;
}
- if (tex->im &&
+ else if (tex->im &&
(tex->im->orient == EVAS_IMAGE_FLIP_VERTICAL))
{
sy = tex->im->h - sh - sy;
}
- if (tex->im &&
+ else if (tex->im &&
(tex->im->orient == EVAS_IMAGE_FLIP_TRANSVERSE))
{
double tmp;
SWAP(&sw, &sh, tmp);
SWAP(&sx, &sy, tmp);
-
+
sx = tex->im->w - sw - sx;
sy = tex->im->h - sh - sy;
}
- if (tex->im &&
+ else if (tex->im &&
(tex->im->orient == EVAS_IMAGE_FLIP_TRANSPOSE))
{
double tmp;
@@ -2420,7 +2425,7 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
}
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
-
+
if (!nomul)
PUSH_6_COLORS(pn, r, g, b, a);
}
@@ -2453,33 +2458,36 @@ evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_FONT;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = 0;
- gc->pipe[pn].shader.blend = 1;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_FONT;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = 0;
+ gc->pipe[pn].shader.blend = 1;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
- if (sw == 0.0)
+ if (EINA_DBL_EQ(sw, 0.0))
{
tx1 = tex->sx1;
ty1 = tex->sy1;
@@ -2533,30 +2541,33 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_YUV;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_YUV;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
+ gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 1;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2613,30 +2624,33 @@ evas_gl_common_context_yuv_709_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_YUV_709;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_YUV_709;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
+ gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 1;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2693,29 +2707,32 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_YUY2;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_YUY2;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2771,31 +2788,34 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_NV12;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_tex_dyn = tex->pt->dyn.img;
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_NV12;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_tex_dyn = tex->pt->dyn.img;
+ gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
+ gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2856,30 +2876,33 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
EINA_FALSE, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_RGB_A_PAIR;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texa = tex->pta->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = EINA_TRUE;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = EINA_TRUE;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = EINA_TRUE;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texa = EINA_TRUE;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_RGB_A_PAIR;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texa = tex->pta->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = EINA_TRUE;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = EINA_TRUE;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = EINA_TRUE;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texa = EINA_TRUE;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3041,43 +3064,46 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
smooth,
clip, cx, cy, cw, ch,
mask_smooth);
- gc->pipe[pn].region.type = SHD_MAP;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
-
- if (utexture)
+ if (gc->pipe[pn].array.num == 0)
{
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texu_dyn = tex->ptu->dyn.img;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- gc->pipe[pn].shader.cur_texv_dyn = tex->ptv->dyn.img;
- }
- else if (uvtexture)
- {
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
+ gc->pipe[pn].region.type = SHD_MAP;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+
+ if (utexture)
+ {
+ gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
+ gc->pipe[pn].shader.cur_texu_dyn = tex->ptu->dyn.img;
+ gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
+ gc->pipe[pn].shader.cur_texv_dyn = tex->ptv->dyn.img;
+ }
+ else if (uvtexture)
+ {
+ gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
+ gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
+ }
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = clip;
+ gc->pipe[pn].shader.cx = cx;
+ gc->pipe[pn].shader.cy = cy;
+ gc->pipe[pn].shader.cw = cw;
+ gc->pipe[pn].shader.ch = ch;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = (utexture || uvtexture) ? 1 : 0;
+ gc->pipe[pn].array.use_texuv3 = (utexture) ? 1 : 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texa = use_texa;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
}
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = clip;
- gc->pipe[pn].shader.cx = cx;
- gc->pipe[pn].shader.cy = cy;
- gc->pipe[pn].shader.cw = cw;
- gc->pipe[pn].shader.ch = ch;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = (utexture || uvtexture) ? 1 : 0;
- gc->pipe[pn].array.use_texuv3 = (utexture) ? 1 : 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texa = use_texa;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3239,29 +3265,32 @@ evas_gl_common_filter_displace_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = SHD_FILTER_DISPLACE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_FILTER_DISPLACE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3358,29 +3387,32 @@ evas_gl_common_filter_curve_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = SHD_FILTER_CURVE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_FILTER_CURVE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3587,29 +3619,32 @@ evas_gl_common_filter_blur_push(Evas_Engine_GL_Context *gc,
sx, sy, dw, dh, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = type;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = type;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, dx, dy, dw, dh);
PIPE_GROW(gc, pn, 6);
@@ -3712,29 +3747,32 @@ evas_gl_common_filter_grayscale_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = type;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = type;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3805,29 +3843,32 @@ evas_gl_common_filter_inverse_color_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = type;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = type;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -4301,7 +4342,8 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
if (gc->pipe[i].array.line)
{
- if (gc->pipe[i].array.anti_alias)
+ //LINE_SMOOTH is supported at gles 1.x spec.
+ if ((gc->gles_version == 1) && gc->pipe[i].array.anti_alias)
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -4559,8 +4601,8 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
i,
gc->pipe[i].array.num / 6,
gc->pipe[0].shader.surface,
- gc->pipe[0].shader.surface->w,
- gc->pipe[0].shader.surface->h,
+ gc->pipe[0].shader.surface ? gc->pipe[0].shader.surface->w : 0,
+ gc->pipe[0].shader.surface ? gc->pipe[0].shader.surface->h : 0,
gw, gh,
gc->pipe[i].shader.cur_tex,
types[gc->pipe[i].region.type]
diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c b/src/modules/evas/engines/gl_common/evas_gl_core.c
index 96d0807c39..786c54c825 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_core.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_core.c
@@ -88,7 +88,13 @@ error:
static void
_internal_resources_destroy(void *eng_data, EVGL_Resource *rsc)
{
- if ((!eng_data) || (!rsc)) return;
+ if (!rsc) return;
+
+ if (!eng_data)
+ {
+ free(rsc);
+ return;
+ }
if (rsc->context)
evgl_engine->funcs->context_destroy(eng_data, rsc->context);
diff --git a/src/modules/evas/engines/gl_common/evas_gl_core_private.h b/src/modules/evas/engines/gl_common/evas_gl_core_private.h
index e6afff639c..a131f9679a 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_core_private.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_core_private.h
@@ -342,7 +342,7 @@ struct _EVGL_Engine
Eina_List *surfaces;
Eina_List *contexts;
- //void *engine_data;
+ //void *engine_data;
Eina_Hash *safe_extensions;
};
diff --git a/src/modules/evas/engines/gl_common/evas_gl_define.h b/src/modules/evas/engines/gl_common/evas_gl_define.h
index 87502505e4..609fa957aa 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_define.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_define.h
@@ -285,7 +285,6 @@ Much of it is from Mesa, so their copyright is included as well.
#ifndef EGL_PLATFORM_X11_KHR
# define EGL_PLATFORM_X11_KHR 0x31D5
#endif
-// Evas_3d require GL_BGR, but that's an extention and will not be necessary once we move to Evas_GL_Image
#ifndef GL_BGR
#define GL_BGR 0x80E0
#endif
diff --git a/src/modules/evas/engines/gl_common/evas_gl_font.c b/src/modules/evas/engines/gl_common/evas_gl_font.c
index b7bd643756..4a5f428487 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_font.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_font.c
@@ -4,7 +4,7 @@ void *
evas_gl_font_texture_new(void *context, RGBA_Font_Glyph *fg)
{
Evas_Engine_GL_Context *gc = context;
- Evas_GL_Texture *tex;
+ Evas_GL_Texture *tex = NULL;
int w, h, nw, fh, y;
DATA8 *ndata, *data, *p1, *p2;
@@ -20,12 +20,12 @@ evas_gl_font_texture_new(void *context, RGBA_Font_Glyph *fg)
// expand to 32bit (4 byte) aligned rows for texture upload
nw = ((w + 3) / 4) * 4;
- // if image already (4 byte) aligned rows then assign old image data to new data(ndata) to
+ // if image already (4 byte) aligned rows then assign old image data to new data(ndata) to
if(nw == w){
ndata = data;
} else {
ndata = alloca(nw *h);
- if (!ndata) return NULL;
+ if (!ndata) goto done;
// else copy row by row
for (y = 0; y < h; y++)
{
@@ -218,13 +218,37 @@ void
evas_gl_font_image_draw(void *gc, void *gl_image, int dx, int dy, int dw, int dh, int smooth)
{
Evas_GL_Image *im = (Evas_GL_Image *)gl_image;
+ Evas_Engine_GL_Context *gl_context = gc;
+ Eina_Bool is_cached = EINA_FALSE;
+ Eina_Bool is_new_atlas = EINA_FALSE;
if (!im || !im->fglyph) return;
- evas_gl_common_image_draw((Evas_Engine_GL_Context *)gc,
+ is_cached = (im->tex != NULL) && (im->tex->pt != NULL);
+
+ evas_gl_common_image_draw(gl_context,
im, 0, 0,
(unsigned int)im->fglyph->glyph_out->bitmap.width,
(unsigned int)im->fglyph->glyph_out->bitmap.rows,
dx, dy, dw, dh,
smooth);
+
+ // Move latest used glyph image to the back, because GC will start freeing from the beginning
+ gl_context->font_glyph_images = eina_list_remove(gl_context->font_glyph_images, im);
+ gl_context->font_glyph_images = eina_list_append(gl_context->font_glyph_images, im);
+
+ if (!is_cached)
+ {
+ gl_context->font_glyph_textures_size += im->w * im->h * 4;
+ }
+
+ is_new_atlas = (!is_cached) && (im->tex != NULL) && (im->tex->pt) && (im->tex->pt->references == 1);
+ if (is_new_atlas)
+ {
+ int size = (im->tex->pt->w * im->tex->pt->h * 4);
+ gl_context->font_glyph_atlas_size += size;
+ if ((evas_font_data_cache_get(EVAS_FONT_DATA_CACHE_TEXTURE) >= 0) &&
+ (evas_font_data_cache_get(EVAS_FONT_DATA_CACHE_TEXTURE) * 0.95 < gl_context->font_glyph_atlas_size))
+ gl_context->font_glyph_gc_requested = EINA_TRUE;
+ }
}
diff --git a/src/modules/evas/engines/gl_common/evas_gl_image.c b/src/modules/evas/engines/gl_common/evas_gl_image.c
index ffe29e39b2..3a75852ed0 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_image.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_image.c
@@ -69,10 +69,17 @@ _evas_gl_image_cache_add(Evas_GL_Image *im)
{
if (im->references == 0)
{
- im->csize = im->w * im->h * 4;
- im->gc->shared->images_size += im->csize;
- _evas_gl_image_cache_trim(im->gc);
- return EINA_TRUE;
+ if (im->cached)
+ {
+ im->csize = im->w * im->h * 4;
+ im->gc->shared->images_size += im->csize;
+ _evas_gl_image_cache_trim(im->gc);
+ if (!eina_list_data_find(im->gc->shared->images, im))
+ { // FIXME for a messed up caching system... this used to be simple
+ im->gc->shared->images = eina_list_prepend(im->gc->shared->images, im);
+ }
+ return EINA_TRUE;
+ }
}
else
{
@@ -282,6 +289,37 @@ found_cspace:
}
Evas_GL_Image *
+evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const char *key, Evas_Image_Load_Opts *lo, int *error)
+{
+ RGBA_Image *im_im;
+
+#ifdef EVAS_CSERVE2
+ if (evas_cserve2_use_get())
+ {
+ im_im = (RGBA_Image *) evas_cache2_image_open
+ (evas_common_image_cache2_get(), file, key, lo, error);
+ if (im_im)
+ {
+ *error = evas_cache2_image_open_wait(&im_im->cache_entry);
+ if ((*error != EVAS_LOAD_ERROR_NONE)
+ && im_im->cache_entry.animated.animated)
+ {
+ evas_cache2_image_close(&im_im->cache_entry);
+ im_im = NULL;
+ }
+ else
+ return evas_gl_common_image_new_from_rgbaimage(gc, im_im, lo, error);
+ }
+ }
+#endif
+
+ im_im = evas_common_load_image_from_file(file, key, lo, error);
+ if (!im_im) return NULL;
+
+ return evas_gl_common_image_new_from_rgbaimage(gc, im_im, lo, error);
+}
+
+Evas_GL_Image *
evas_gl_common_image_mmap(Evas_Engine_GL_Context *gc, Eina_File *f, const char *key, Evas_Image_Load_Opts *lo, int *error)
{
RGBA_Image *im_im;
@@ -301,7 +339,7 @@ evas_gl_common_image_new_from_data(Evas_Engine_GL_Context *gc, unsigned int w, u
if (((int)w > gc->shared->info.max_texture_size) ||
((int)h > gc->shared->info.max_texture_size))
return NULL;
-
+
if (data)
{
EINA_LIST_FOREACH(gc->shared->images, l, im)
@@ -368,7 +406,7 @@ evas_gl_common_image_new_from_copied_data(Evas_Engine_GL_Context *gc, unsigned i
if (((int)w > gc->shared->info.max_texture_size) ||
((int)h > gc->shared->info.max_texture_size))
return NULL;
-
+
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
@@ -422,7 +460,7 @@ evas_gl_common_image_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned in
if (((int)w > gc->shared->info.max_texture_size) ||
((int)h > gc->shared->info.max_texture_size))
return NULL;
-
+
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
@@ -571,6 +609,11 @@ void
evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint)
{
if (im->content_hint == hint) return;
+ if ((im->gc) &&
+ ((!im->gc->shared->info.sec_image_map) &&
+ ((!im->gc->shared->info.sec_tbm_surface) ||
+ (!im->gc->shared->info.egl_tbm_ext))))
+ return;
im->content_hint = hint;
if (!im->gc) return;
if (!im->gc->shared->info.bgra) return;
@@ -666,6 +709,10 @@ evas_gl_common_image_free(Evas_GL_Image *im)
im->fglyph->ext_dat = NULL;
im->fglyph->ext_dat_free = NULL;
}
+ else if ((im->gc) && (im->gc->shared))
+ {
+ im->gc->shared->images = eina_list_remove(im->gc->shared->images, im);
+ }
if (im->gc)
evas_gl_common_context_flush(im->gc);
@@ -685,11 +732,19 @@ evas_gl_common_image_free(Evas_GL_Image *im)
{
if (!im->cs.no_free) free(im->cs.data);
}
- if (im->cached)
+ if (im->cached && im->gc)
{
if (_evas_gl_image_cache_add(im)) return;
}
- if (im->tex) evas_gl_common_texture_free(im->tex, EINA_TRUE);
+ if (im->tex)
+ {
+ if (!evas_gl_common_texture_free(im->tex, EINA_TRUE))
+ {
+ /* if texture is not freed, we need to assign im to NULL
+ because after this point im will be freed */
+ im->tex->im = NULL;
+ }
+ }
if (im->im)
evas_cache_image_drop(&im->im->cache_entry);
@@ -704,7 +759,7 @@ evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, uns
if (((int)w > gc->shared->info.max_texture_size) ||
((int)h > gc->shared->info.max_texture_size))
return NULL;
-
+
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
@@ -1321,7 +1376,7 @@ evas_gl_common_image_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im,
}
if ((sw == dw) && (sh == dh)) smooth = 0;
-
+
im->tex->im = im;
if ((!gc->dc->cutout.rects) ||
((gc->shared->info.tune.cutout.max > 0) &&
diff --git a/src/modules/evas/engines/gl_common/evas_gl_preload.c b/src/modules/evas/engines/gl_common/evas_gl_preload.c
index 666f944d82..df5a4be924 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_preload.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_preload.c
@@ -98,7 +98,7 @@ _evas_gl_preload_main_loop_wakeup(void)
{
async->tex->was_preloaded = EINA_TRUE;
- async->tex->ptt->allocations =
+ async->tex->ptt->allocations =
eina_list_remove(async->tex->ptt->allocations,
async->tex->aptt);
eina_rectangle_pool_release(async->tex->aptt);
@@ -135,7 +135,7 @@ _evas_gl_preload_lock(void)
eina_condition_signal(&async_loader_cond);
eina_condition_wait(&async_loader_cond);
- if (async_loader_exit)
+ if (async_loader_exit)
{
eina_lock_release(&async_loader_lock);
return EINA_FALSE;
diff --git a/src/modules/evas/engines/gl_common/evas_gl_rectangle.c b/src/modules/evas/engines/gl_common/evas_gl_rectangle.c
index a188467b58..b070a7157a 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_rectangle.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_rectangle.c
@@ -12,7 +12,7 @@ evas_gl_common_rect_draw(Evas_Engine_GL_Context *gc, int x, int y, int w, int h)
Evas_GL_Texture *mtex = NULL;
if ((w <= 0) || (h <= 0)) return;
- if (!(RECTS_INTERSECT(x, y, w, h, 0, 0, gc->w, gc->h))) return;
+ if (!(RECTS_INTERSECT(x, y, w, h, 0, 0, gc->shared->w, gc->shared->h))) return;
/* save out clip info */
c = gc->dc->clip.use; cx = gc->dc->clip.x; cy = gc->dc->clip.y; cw = gc->dc->clip.w; ch = gc->dc->clip.h;
diff --git a/src/modules/evas/engines/gl_common/evas_gl_shader.c b/src/modules/evas/engines/gl_common/evas_gl_shader.c
index 5702ce49c3..489ea3d8c5 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_shader.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_shader.c
@@ -9,13 +9,13 @@
#define SHADER_EET_CHECKSUM "/shader/checksum"
#define SHADER_EET_CACHENAME "binary_shader"
-#define P(i) ((void*)(intptr_t)i)
-#define I(p) ((int)(intptr_t)p)
+#define P(i) ((void*)(intptr_t)(i))
+#define I(p) ((int)(intptr_t)(p))
#ifdef WORDS_BIGENDIAN
-# define BASEFLAG SHADER_FLAG_BIGENDIAN
+# define BASEFLAG SHADER_FLAG_DITHER | SHADER_FLAG_BIGENDIAN
#else
-# define BASEFLAG 0
+# define BASEFLAG SHADER_FLAG_DITHER
#endif
typedef enum {
@@ -47,8 +47,9 @@ typedef enum {
SHADER_FLAG_FILTER_ALPHA_ONLY = (1 << 25),
SHADER_FLAG_FILTER_GRAYSCALE = (1 << 26),
SHADER_FLAG_FILTER_INVERSE_COLOR = (1 << 27),
+ SHADER_FLAG_DITHER = (1 << 28),
} Shader_Flag;
-#define SHADER_FLAG_COUNT 28
+#define SHADER_FLAG_COUNT 29
static const char *_shader_flags[SHADER_FLAG_COUNT] = {
"TEX",
@@ -79,6 +80,7 @@ static const char *_shader_flags[SHADER_FLAG_COUNT] = {
"ALPHA_ONLY",
"FILTER_GRAYSCALE",
"FILTER_INVERSE_COLOR",
+ "DITHER",
};
static Eina_Bool compiler_released = EINA_FALSE;
@@ -325,10 +327,9 @@ _evas_gl_common_shader_binary_save(Evas_GL_Shared *shared)
char tmp_file_name[PATH_MAX + PATH_MAX + 128];
int tmpfd = -1, copy;
Eina_Tmpstr *tmp_file_path = NULL;
- Eet_File *ef = NULL;
+ Eet_File *ef = NULL, *ef0 = NULL;
Evas_GL_Program *p;
Eina_Iterator *it;
- char pname[32];
/* use eet */
if (!eet_init()) return 0;
@@ -360,24 +361,40 @@ _evas_gl_common_shader_binary_save(Evas_GL_Shared *shared)
}
save:
- ef = eet_open(tmp_file_path, copy ? EET_FILE_MODE_READ_WRITE : EET_FILE_MODE_WRITE);
+ ef = eet_open(tmp_file_path, EET_FILE_MODE_WRITE);
if (!ef) goto error;
+ if (copy) ef0 = shared->shaders_cache;
+
if (!_evas_gl_common_shader_binary_checksum_write(shared, ef))
goto error;
+ if (ef0)
+ {
+ char **keys;
+ int keys_num = 0, i;
+
+ keys = eet_list(ef0, "/shader/*", &keys_num);
+ if (keys)
+ {
+ for (i = 0; i < keys_num; i++)
+ {
+ int len = 0;
+ void *data = eet_read(ef0, keys[i], &len);
+ if ((data) && (len > 0))
+ eet_write(ef, keys[i], data, len, SHADER_BINARY_EET_COMPRESS);
+ free(data);
+ }
+ free(keys);
+ }
+ }
it = eina_hash_iterator_data_new(shared->shaders_hash);
EINA_ITERATOR_FOREACH(it, p)
{
if (!p->bin_saved)
{
- int len = 0;
- sprintf(pname, SHADER_PROG_NAME_FMT, p->flags);
- eet_read_direct(ef, pname, &len);
- if (len > 0)
- p->bin_saved = 1; // assume bin data is correct
- else
- _evas_gl_common_shader_program_binary_save(p, ef);
+ if (_evas_gl_common_shader_program_binary_save(p, ef))
+ p->bin_saved = 1;
}
}
eina_iterator_free(it);
diff --git a/src/modules/evas/engines/gl_common/evas_gl_texture.c b/src/modules/evas/engines/gl_common/evas_gl_texture.c
index ef99962261..049e4236cb 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_texture.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c
@@ -337,7 +337,7 @@ _tex_2d(Evas_Engine_GL_Context *gc, int intfmt, int w, int h, int fmt, int type)
#ifdef GL_TEXTURE_INTERNAL_FORMAT
# ifdef GL_GLES
# else
-// this is not in opengles!!! hrrrm
+// this is not in opengles!!! hrrrm
// if (glGetTexLevelParameteriv) // in case of weak symbols?
{
int intfmtret = -1;
@@ -1378,7 +1378,7 @@ evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im)
err = glGetError();
if (err != GL_NO_ERROR)
{
- __evas_gl_err(err, __FILE__, __FUNCTION__, __LINE__,
+ __evas_gl_err(err, __FILE__, __func__, __LINE__,
"glCompressedTexSubImage2D");
// FIXME: Changing settings on the fly.
@@ -1550,10 +1550,10 @@ evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im)
im->cache_entry.flags.textured = 1;
}
-void
+Eina_Bool
evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force)
{
- if (!tex) return;
+ if (!tex) return EINA_FALSE;
if (force)
{
evas_gl_preload_pop(tex);
@@ -1562,9 +1562,10 @@ evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force)
evas_gl_preload_target_unregister(tex, eina_list_data_get(tex->targets));
}
tex->references--;
- if (tex->references != 0) return;
+ if (tex->references != 0) return EINA_FALSE;
if (tex->fglyph)
{
+ tex->gc->font_glyph_textures_size -= tex->w * tex->h * 4;
tex->gc->font_glyph_textures = eina_list_remove(tex->gc->font_glyph_textures, tex);
tex->fglyph->ext_dat = NULL;
tex->fglyph->ext_dat_free = NULL;
@@ -1575,6 +1576,10 @@ evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force)
tex->pt->allocations = eina_list_remove(tex->pt->allocations, tex->apt);
if (tex->apt) eina_rectangle_pool_release(tex->apt);
tex->apt = NULL;
+ if (tex->fglyph && (tex->pt->references == 1))
+ {
+ tex->gc->font_glyph_atlas_size -= tex->pt->w * tex->pt->h * 4;
+ }
pt_unref(tex->pt);
tex->pt = NULL;
}
@@ -1605,13 +1610,14 @@ evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force)
tex->ptv2 = NULL;
tex->ptuv = NULL;
- if (tex->im)
+ if (tex->im)
{
tex->im->tex = NULL;
if (tex->im->im) tex->im->im->cache_entry.flags.textured = 0;
}
evas_gl_common_texture_light_free(tex);
+ return EINA_TRUE;
}
Evas_GL_Texture *
@@ -1974,7 +1980,7 @@ evas_gl_common_texture_yuv_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned i
else if (rows[0] && rows[h])
{
unsigned int y;
-
+
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
if (!_tex_2d(tex->gc, tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat))
diff --git a/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x b/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x
index d244b37f08..b534f66c41 100644
--- a/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x
+++ b/src/modules/evas/engines/gl_common/shader/evas_gl_shaders.x
@@ -98,6 +98,33 @@ static const char fragment_glsl[] =
"uniform float blur_div;\n"
"#endif\n"
"// ----------------------------------------------------------------------------\n"
+ "#ifdef SHD_DITHER\n"
+ "const mat4 dm = mat4(vec4( 0, 8, 2, 10),\n"
+ " vec4(12, 4, 14, 6),\n"
+ " vec4( 3, 11, 1, 9),\n"
+ " vec4(15, 7, 13, 5));\n"
+ "float dither_closest(vec2 pos, float val)\n"
+ "{\n"
+ " float limit = dm[int(pos.x)][int(pos.y)] / 16.0;\n"
+ " if (val <= limit) return 0.0;\n"
+ " return 1.0;\n"
+ "}\n"
+ "float dither_8bit(vec2 modpos, float val)\n"
+ "{\n"
+ " float val_quant = float(floor(val * 255.0)) / 255.0;\n"
+ " float val_delta = (val - val_quant) / (1.0 / 256.0);\n"
+ " float val_roundup = dither_closest(modpos, val_delta);\n"
+ " return val_quant + (val_roundup * (1.0 / 256.0));\n"
+ "}\n"
+ "vec4 dither(vec4 col, vec2 pos)\n"
+ "{\n"
+ " vec2 modpos = vec2(mod(float(pos.x), 4.0), mod(float(pos.y), 4.0));\n"
+ " return vec4(dither_8bit(modpos, col.r),\n"
+ " dither_8bit(modpos, col.g),\n"
+ " dither_8bit(modpos, col.b),\n"
+ " dither_8bit(modpos, col.a));\n"
+ "}\n"
+ "#endif\n"
"#ifndef SHD_FILTER_BLUR\n"
"void main()\n"
"{\n"
@@ -220,10 +247,13 @@ static const char fragment_glsl[] =
" c.b = c.r;\n"
"#endif\n"
"#ifdef SHD_FILTER_INVERSE_COLOR\n"
- " c.rgb = c.a - c.rgb;\n"
+ " c.rgb = c.a - c.rgba;\n"
"#endif\n"
"#ifndef SHD_FILTER_BLUR\n"
" gl_FragColor =\n"
+ "#ifdef SHD_DITHER\n"
+ " dither(\n"
+ "#endif\n"
" c\n"
"#ifndef SHD_NOMUL\n"
" * col\n"
@@ -234,6 +264,9 @@ static const char fragment_glsl[] =
"#ifdef SHD_FILTER_DISPLACE\n"
" * fa\n"
"#endif\n"
+ "#ifdef SHD_DITHER\n"
+ " , gl_FragCoord.xy)\n"
+ "#endif\n"
" ;\n"
"}\n"
"#else // SHD_FILTER_BLUR\n"
@@ -278,9 +311,25 @@ static const char fragment_glsl[] =
" acc += (px1 + px2) * weight;\n"
" }\n"
"#ifndef SHD_NOMUL\n"
- " gl_FragColor = (acc / blur_div) * col;\n"
+ " gl_FragColor =\n"
+ "#ifdef SHD_DITHER\n"
+ " dither(\n"
+ "#endif\n"
+ " (acc / blur_div) * col, gl_FragCoord.xy\n"
+ "#ifdef SHD_DITHER\n"
+ " )\n"
+ "#endif\n"
+ " ;\n"
"#else\n"
- " gl_FragColor = (acc / blur_div);\n"
+ " gl_FragColor =\n"
+ "#ifdef SHD_DITHER\n"
+ " dither(\n"
+ "#endif\n"
+ " (acc / blur_div), gl_FragCoord.xy\n"
+ "#ifdef SHD_DITHER\n"
+ " )\n"
+ "#endif\n"
+ " ;\n"
"#endif\n"
"}\n"
"#endif // SHD_FILTER_BLUR\n";
diff --git a/src/modules/evas/engines/gl_common/shader/fragment.glsl b/src/modules/evas/engines/gl_common/shader/fragment.glsl
index 09947968e9..b715c8de99 100644
--- a/src/modules/evas/engines/gl_common/shader/fragment.glsl
+++ b/src/modules/evas/engines/gl_common/shader/fragment.glsl
@@ -97,6 +97,37 @@ uniform float blur_div;
// ----------------------------------------------------------------------------
+#ifdef SHD_DITHER
+const mat4 dm = mat4(vec4( 0, 8, 2, 10),
+ vec4(12, 4, 14, 6),
+ vec4( 3, 11, 1, 9),
+ vec4(15, 7, 13, 5));
+
+float dither_closest(vec2 pos, float val)
+{
+ float limit = dm[int(pos.x)][int(pos.y)] / 16.0;
+ if (val <= limit) return 0.0;
+ return 1.0;
+}
+
+float dither_8bit(vec2 modpos, float val)
+{
+ float val_quant = float(floor(val * 255.0)) / 255.0;
+ float val_delta = (val - val_quant) / (1.0 / 256.0);
+ float val_roundup = dither_closest(modpos, val_delta);
+ return val_quant + (val_roundup * (1.0 / 256.0));
+}
+
+vec4 dither(vec4 col, vec2 pos)
+{
+ vec2 modpos = vec2(mod(float(pos.x), 4.0), mod(float(pos.y), 4.0));
+ return vec4(dither_8bit(modpos, col.r),
+ dither_8bit(modpos, col.g),
+ dither_8bit(modpos, col.b),
+ dither_8bit(modpos, col.a));
+}
+#endif
+
#ifndef SHD_FILTER_BLUR
void main()
{
@@ -243,6 +274,9 @@ vec4 fetch_pixel(float ox, float oy)
#ifndef SHD_FILTER_BLUR
gl_FragColor =
+#ifdef SHD_DITHER
+ dither(
+#endif
c
#ifndef SHD_NOMUL
* col
@@ -253,6 +287,9 @@ vec4 fetch_pixel(float ox, float oy)
#ifdef SHD_FILTER_DISPLACE
* fa
#endif
+#ifdef SHD_DITHER
+ , gl_FragCoord.xy)
+#endif
;
}
@@ -312,9 +349,25 @@ void main()
}
#ifndef SHD_NOMUL
- gl_FragColor = (acc / blur_div) * col;
+ gl_FragColor =
+#ifdef SHD_DITHER
+ dither(
+#endif
+ (acc / blur_div) * col, gl_FragCoord.xy
+#ifdef SHD_DITHER
+ )
+#endif
+ ;
#else
- gl_FragColor = (acc / blur_div);
+ gl_FragColor =
+#ifdef SHD_DITHER
+ dither(
+#endif
+ (acc / blur_div), gl_FragCoord.xy
+#ifdef SHD_DITHER
+ )
+#endif
+ ;
#endif
}
diff --git a/src/modules/evas/engines/gl_common/shader/gen_shaders.sh b/src/modules/evas/engines/gl_common/shader/gen_shaders.sh
index 7c2fec1e47..c477ee4dbe 100755
--- a/src/modules/evas/engines/gl_common/shader/gen_shaders.sh
+++ b/src/modules/evas/engines/gl_common/shader/gen_shaders.sh
@@ -3,7 +3,7 @@
# This script will generate a C file containing all the shaders used by Evas
DIR=`dirname $0`
-cd $DIR/../../../../../
+#cd $DIR/../../../../../
OUTPUT="$DIR/evas_gl_shaders.x"
diff --git a/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd
deleted file mode 100644
index faf43304c0..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd
+++ /dev/null
@@ -1,15 +0,0 @@
-uniform vec4 uColorPick;
-
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-void main()
-{
- vec4 color = uColorPick;
-
-#ifdef ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
-#else
- gl_FragColor = color;
-#endif //ALPHA_TEST_ENABLED
-}
-
diff --git a/src/modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd
deleted file mode 100644
index 62de54f149..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd
+++ /dev/null
@@ -1,11 +0,0 @@
-uniform mat4 uMatrixMvp;
-
-VERTEX_SHADER_USE_POSITION
-
-void main()
-{
- VERTEX_SHADER_POSITION
-
- gl_Position = uMatrixMvp * position;
-}
-
diff --git a/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd
deleted file mode 100644
index 9faa357ec2..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd
+++ /dev/null
@@ -1,16 +0,0 @@
-FRAGMENT_SHADER_USE_TEX_COORD
-FRAGMENT_SHADER_USE_FOG
-FRAGMENT_SHADER_USE_DIFFUSE_TERM
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-void main() {
- vec4 color;
- FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
-#ifdef ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
-#else
- gl_FragColor = color;
-#endif //ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_FOG_APPLY
-}
-
diff --git a/src/modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd
deleted file mode 100644
index 1a68155577..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd
+++ /dev/null
@@ -1,13 +0,0 @@
-uniform mat4 uMatrixMvp;
-
-VERTEX_SHADER_USE_POSITION
-VERTEX_SHADER_USE_TEXCOORD
-VERTEX_SHADER_NEED_TEX_COORD
-
-void main()
-{
- VERTEX_SHADER_POSITION
- VERTEX_SHADER_TEXCOORD
-
- gl_Position = uMatrixMvp * position;
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x b/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x
deleted file mode 100644
index 12664a04ca..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x
+++ /dev/null
@@ -1,2198 +0,0 @@
-/* DO NOT MODIFY THIS FILE AS IT IS AUTO-GENERATED */
-/* IF IT IS CHANGED PLEASE COMMIT THE CHANGES */
-
-static const char vertex_color_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "varying vec4 vColor;\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef VERTEX_COLOR\n"
- "attribute vec4 aColor0;\n"
- "#endif //VERTEX_COLOR\n"
- "#ifdef VERTEX_COLOR_BLEND\n"
- "attribute vec4 aColor1;\n"
- "uniform float uColorWeight;\n"
- "#endif //VERTEX_COLOR_BLEND\n"
- "void main()\n"
- "{\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef VERTEX_COLOR_BLEND\n"
- " vec4 color = aColor0 * uColorWeight + aColor1 * (1.0 - uColorWeight);\n"
- "#else\n"
- "#ifdef VERTEX_COLOR\n"
- " vec4 color = aColor0;\n"
- "#endif //VERTEX_COLOR\n"
- "#endif //VERTEX_COLOR_BLEND\n"
- " vColor = color;\n"
- " gl_Position = uMatrixMvp * position;\n"
- "}\n";
-
-static const char vertex_color_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "varying vec4 vColor;\n"
- "#ifdef FOG_ENABLED\n"
- "uniform float uFogFactor;\n"
- "uniform vec4 uFogColor;\n"
- "#endif //FOG_ENABLED\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "void main()\n"
- "{\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(vColor.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = vColor;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = vColor;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = vColor;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = vColor;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = vColor;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = vColor;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#else\n"
- " gl_FragColor = vColor;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- " \n"
- "#ifdef FOG_ENABLED\n"
- " float z = gl_FragCoord.z / gl_FragCoord.w;\n"
- " float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);\n"
- " fogFactor = clamp(fogFactor, 0.0, 1.0);\n"
- " gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor);\n"
- "#endif //FOG_ENABLED\n"
- "}\n";
-
-static const char diffuse_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef VERTEX_TEXCOORD\n"
- "attribute vec4 aTexCoord0;\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#ifdef VERTEX_TEXCOORD_BLEND\n"
- "attribute vec4 aTexCoord1;\n"
- "uniform float uTexCoordWeight;\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //NEED_TEX_COORD\n"
- "void main()\n"
- "{\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- " #ifdef VERTEX_TEXCOORD_BLEND\n"
- " vTexCoord = mix(vec2(aTexCoord1.s, 1.0 - aTexCoord1.t),\n"
- " vec2(aTexCoord0.s, 1.0 - aTexCoord0.t), uTexCoordWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TEXCOORD\n"
- " vTexCoord = vec2(aTexCoord0.s, 1.0 - aTexCoord0.t);\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- " gl_Position = uMatrixMvp * position;\n"
- "}\n";
-
-static const char diffuse_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //TEX_COORD\n"
- "#ifdef FOG_ENABLED\n"
- "uniform float uFogFactor;\n"
- "uniform vec4 uFogColor;\n"
- "#endif //FOG_ENABLED\n"
- "#ifdef DIFFUSE\n"
- "uniform vec4 uMaterialDiffuse;\n"
- "uniform vec4 uLightDiffuse;\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- "uniform sampler2D uTextureDiffuse0;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureDiffuse1;\n"
- "uniform float uTextureDiffuseWeight;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- "#endif //DIFFUSE\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "void main() {\n"
- " vec4 color;\n"
- " \n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
- " color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
- " texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
- " color *= uMaterialDiffuse;\n"
- "#else\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) * uMaterialDiffuse;\n"
- "#else\n"
- " color = uMaterialDiffuse;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(color.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#else\n"
- " gl_FragColor = color;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- " \n"
- "#ifdef FOG_ENABLED\n"
- " float z = gl_FragCoord.z / gl_FragCoord.w;\n"
- " float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);\n"
- " fogFactor = clamp(fogFactor, 0.0, 1.0);\n"
- " gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor);\n"
- "#endif //FOG_ENABLED\n"
- "}\n";
-
-static const char flat_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "uniform mat3 uMatrixNormal;\n"
- "uniform mat4 uMatrixModelview;\n"
- "uniform vec4 uLightPosition;\n"
- "varying vec2 vFactor;\n"
- "#ifdef SHADOWED\n"
- "uniform mat4 uMatrixLight;\n"
- "varying vec4 vLightPosition;\n"
- "#endif //SHADOWED\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef VERTEX_NORMAL\n"
- "attribute vec4 aNormal0;\n"
- "#endif //VERTEX_NORMAL\n"
- "#ifdef VERTEX_NORMAL_BLEND\n"
- "attribute vec4 aNormal1;\n"
- "uniform float uNormalWeight;\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- "#ifdef VERTEX_TEXCOORD\n"
- "attribute vec4 aTexCoord0;\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#ifdef VERTEX_TEXCOORD_BLEND\n"
- "attribute vec4 aTexCoord1;\n"
- "uniform float uTexCoordWeight;\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //NEED_TEX_COORD\n"
- "#ifdef LIGHT_SPOT\n"
- "uniform vec3 uLightSpotDir;\n"
- "uniform float uLightSpotExp;\n"
- "uniform float uLightSpotCutoffCos;\n"
- "#endif //LIGHT_SPOT\n"
- "#ifdef SPECULAR\n"
- "uniform float uMaterialShininess;\n"
- "#endif //SPECULAR\n"
- "#ifdef LIGHT_ATTENUATION\n"
- "uniform vec3 uLightAtten;\n"
- "#endif //LIGHT_ATTENUATION\n"
- "void vertexFlat(vec4 position, vec3 normal)\n"
- "{\n"
- " vec3 lv;\n"
- " float factor;\n"
- " normal = uMatrixNormal * normal;\n"
- " position = uMatrixModelview * position;\n"
- "#ifdef NORMALIZE_NORMALS\n"
- " normal = normalize(normal);\n"
- "#endif //NORMALIZE_NORMALS\n"
- "#ifdef LIGHT_DIRECTIONAL\n"
- " lv = uLightPosition.xyz;\n"
- "#else\n"
- " lv = uLightPosition.xyz - position.xyz;\n"
- " lv = normalize(lv);\n"
- "#endif //LIGHT_DIRECTIONAL\n"
- " factor = max(dot(lv, normal), 0.0);\n"
- "#ifdef LIGHT_SPOT\n"
- " float f = dot(-lv, uLightSpotDir);\n"
- " if (f > uLightSpotCutoffCos)\n"
- " factor *= pow(f, uLightSpotExp);\n"
- " else\n"
- " factor = 0.0;\n"
- "#endif //LIGHT_SPOT\n"
- " if (factor > 0.0)\n"
- " {\n"
- "#ifdef DIFFUSE\n"
- " vFactor.x = factor;\n"
- "#else\n"
- " vFactor.x = 0.0;\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- " vec3 hv = normalize(normalize(-position.xyz) + lv);\n"
- " factor = pow(max(dot(hv, normal), 0.0), uMaterialShininess);\n"
- " vFactor.y = factor;\n"
- "#endif //SPECULAR\n"
- " }\n"
- " else\n"
- " vFactor = vec2(0.0, 0.0);\n"
- " /* Light attenuation. */\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " float dist = length(lv);\n"
- " vFactor /= dot(uLightAtten, vec3(1.0, dist, dist * dist));\n"
- "#endif //LIGHT_ATTENUATION\n"
- "}\n"
- "void main()\n"
- "{\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- " #ifdef VERTEX_NORMAL_BLEND\n"
- " vec3 normal = mix(aNormal1.xyz, aNormal0.xyz, uNormalWeight);\n"
- "#else\n"
- "#ifdef VERTEX_NORMAL\n"
- " vec3 normal = aNormal0.xyz;\n"
- "#endif //VERTEX_NORMAL\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- " #ifdef VERTEX_TEXCOORD_BLEND\n"
- " vTexCoord = mix(vec2(aTexCoord1.s, 1.0 - aTexCoord1.t),\n"
- " vec2(aTexCoord0.s, 1.0 - aTexCoord0.t), uTexCoordWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TEXCOORD\n"
- " vTexCoord = vec2(aTexCoord0.s, 1.0 - aTexCoord0.t);\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- " gl_Position = uMatrixMvp * position;\n"
- " vertexFlat(position, normal);\n"
- " #ifdef SHADOWED\n"
- " vLightPosition = uMatrixLight * position;\n"
- "#endif //SHADOWED\n"
- "}\n";
-
-static const char flat_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "varying vec2 vFactor;\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //TEX_COORD\n"
- "#ifdef FOG_ENABLED\n"
- "uniform float uFogFactor;\n"
- "uniform vec4 uFogColor;\n"
- "#endif //FOG_ENABLED\n"
- "#ifdef SHADOWED\n"
- "varying vec4 vLightPosition;\n"
- "uniform sampler2D uShadowMap;\n"
- "uniform float uShadowsPCFStep;\n"
- "uniform float uShadowsPCFSize;\n"
- "uniform float uShadowsConstantBias;\n"
- "float shadow;\n"
- "float pcf(vec4 lpos)\n"
- "{\n"
- " vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
- " float i, j, shadow, q, c;\n"
- " q = floor(uShadowsPCFStep * 2.0);\n"
- " c = floor(uShadowsPCFStep * uShadowsPCFStep * 4.0);\n"
- " shadow = 0.0;\n"
- " const vec4 unpack = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);\n"
- " for (i = -uShadowsPCFStep; i < uShadowsPCFStep; i += 1.0)\n"
- " for (j = -uShadowsPCFStep; j < uShadowsPCFStep; j += 1.0)\n"
- " {\n"
- " vec4 zvalue = texture2D(uShadowMap, smcoord.xy + vec2(i / q, j / q) * uShadowsPCFSize);\n"
- " shadow += float(smcoord.z < dot(zvalue, unpack) + uShadowsConstantBias);\n"
- " }\n"
- " return shadow / c;\n"
- "}\n"
- "#endif //SHADOWED\n"
- "#ifdef DIFFUSE\n"
- "uniform vec4 uMaterialDiffuse;\n"
- "uniform vec4 uLightDiffuse;\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- "uniform sampler2D uTextureDiffuse0;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureDiffuse1;\n"
- "uniform float uTextureDiffuseWeight;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- "uniform vec4 uLightSpecular;\n"
- "uniform float uMaterialShininess;\n"
- "uniform vec4 uMaterialSpecular;\n"
- "#ifdef SPECULAR_TEXTURE\n"
- "uniform sampler2D uTextureSpecular0;\n"
- "uniform mat3 uTextureMatrixTransformSpecular0;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureSpecular1;\n"
- "uniform float uTextureSpecularWeight;\n"
- "uniform mat3 uTextureMatrixTransformSpecular1;\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- "#endif //SPECULAR\n"
- "#ifdef AMBIENT\n"
- "uniform vec4 uMaterialAmbient;\n"
- "uniform vec4 uLightAmbient;\n"
- "#ifdef AMBIENT_TEXTURE\n"
- "uniform sampler2D uTextureAmbient0;\n"
- "uniform mat3 uTextureMatrixTransformAmbient0;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureAmbient1;\n"
- "uniform float uTextureAmbientWeight;\n"
- "uniform mat3 uTextureMatrixTransformAmbient1;\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- "#endif //AMBIENT\n"
- "#ifdef EMISSION\n"
- "uniform vec4 uMaterialEmission;\n"
- "#ifdef EMISSION_TEXTURE\n"
- "uniform sampler2D uTextureEmission0;\n"
- "uniform mat3 uTextureMatrixTransformEmission0;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureEmission1;\n"
- "uniform float uTextureEmissionWeight;\n"
- "uniform mat3 uTextureMatrixTransformEmission1;\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- "#endif //EMISSION\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "vec4 fragmentFlat()\n"
- "{\n"
- " vec4 color;\n"
- " vec4 fragcolor;\n"
- "#ifdef DIFFUSE\n"
- " \n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
- " color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
- " texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
- " color *= uMaterialDiffuse;\n"
- "#else\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) * uMaterialDiffuse;\n"
- "#else\n"
- " color = uMaterialDiffuse;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- " fragcolor = uLightDiffuse * color * vFactor.x;\n"
- "#else\n"
- " fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- " \n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- " vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
- " vec3 Tex1CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
- " color = mix(texture2D(uTextureSpecular1, vec2(Tex1CoordSpecular)),\n"
- " texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)), uTextureSpecularWeight);\n"
- " color *= uMaterialSpecular;\n"
- "#else\n"
- "#ifdef SPECULAR_TEXTURE\n"
- " vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
- " color = texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)) * uMaterialSpecular;\n"
- "#else\n"
- " color = uMaterialSpecular;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- " fragcolor += uLightSpecular * color * vFactor.y;\n"
- "#endif //SPECULAR\n"
- "#ifdef SHADOWED\n"
- " fragcolor *= shadow;\n"
- "#endif //SHADOWED\n"
- "#ifdef AMBIENT\n"
- " \n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- " vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
- " vec3 Tex1CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
- " color = mix(texture2D(uTextureAmbient1, vec2(Tex1CoordAmbient)),\n"
- " texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)), uTextureAmbientWeight);\n"
- " color *= uMaterialAmbient;\n"
- "#else\n"
- "#ifdef AMBIENT_TEXTURE\n"
- " vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
- " color = texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)) * uMaterialAmbient;\n"
- "#else\n"
- " color = uMaterialAmbient;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- " fragcolor += uLightAmbient * color;\n"
- "#endif //AMBIENT\n"
- "#ifdef EMISSION\n"
- " \n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- " vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
- " vec3 Tex1CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
- " color = mix(texture2D(uTextureEmission1, vec2(Tex1CoordEmission)),\n"
- " texture2D(uTextureEmission0, vec2(Tex0CoordEmission)), uTextureEmissionWeight);\n"
- " color *= uMaterialEmission;\n"
- "#else\n"
- "#ifdef EMISSION_TEXTURE\n"
- " vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
- " color = texture2D(uTextureEmission0, vec2(Tex0CoordEmission)) * uMaterialEmission;\n"
- "#else\n"
- " color = uMaterialEmission;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- " fragcolor += color;\n"
- "#endif //EMISSION\n"
- " return fragcolor;\n"
- "}\n"
- "void main() {\n"
- " vec4 color;\n"
- "#ifdef SHADOWED\n"
- " shadow = pcf(vLightPosition);\n"
- "#endif //SHADOWED\n"
- " color = fragmentFlat();\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(color.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#else\n"
- " gl_FragColor = color;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- " \n"
- "#ifdef FOG_ENABLED\n"
- " float z = gl_FragCoord.z / gl_FragCoord.w;\n"
- " float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);\n"
- " fogFactor = clamp(fogFactor, 0.0, 1.0);\n"
- " gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor);\n"
- "#endif //FOG_ENABLED\n"
- "}\n";
-
-static const char phong_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "uniform mat3 uMatrixNormal;\n"
- "uniform mat4 uMatrixModelview;\n"
- "uniform vec4 uLightPosition;\n"
- "varying vec3 vLightVector;\n"
- "varying vec3 vLightHalfVector;\n"
- "varying vec3 vNormal;\n"
- "#ifdef SHADOWED\n"
- "uniform mat4 uMatrixLight;\n"
- "varying vec4 vLightPosition;\n"
- "#endif //SHADOWED\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef VERTEX_NORMAL\n"
- "attribute vec4 aNormal0;\n"
- "#endif //VERTEX_NORMAL\n"
- "#ifdef VERTEX_NORMAL_BLEND\n"
- "attribute vec4 aNormal1;\n"
- "uniform float uNormalWeight;\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- "#ifdef VERTEX_TEXCOORD\n"
- "attribute vec4 aTexCoord0;\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#ifdef VERTEX_TEXCOORD_BLEND\n"
- "attribute vec4 aTexCoord1;\n"
- "uniform float uTexCoordWeight;\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //NEED_TEX_COORD\n"
- "#ifdef LIGHT_ATTENUATION\n"
- "varying float vLightDist;\n"
- "#endif //LIGHT_ATTENUATION\n"
- "void vertexPhong(vec4 position, vec3 normal)\n"
- "{\n"
- " normal = uMatrixNormal * normal;\n"
- " position = uMatrixModelview * position;\n"
- "#ifdef NORMALIZE_NORMALS\n"
- " normal = normalize(normal);\n"
- "#endif //NORMALIZE_NORMALS\n"
- "#ifdef LIGHT_DIRECTIONAL\n"
- " vLightVector = uLightPosition.xyz;\n"
- "#else\n"
- " vLightVector = uLightPosition.xyz - position.xyz;\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " vLightDist = length(vLightVector);\n"
- "#endif //LIGHT_ATTENUATION\n"
- " vLightVector = normalize(vLightVector);\n"
- "#endif //LIGHT_DIRECTIONAL\n"
- " vLightHalfVector = normalize(normalize(-position.xyz) + vLightVector);\n"
- " vNormal = normal;\n"
- "}\n"
- "void main() {\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- " #ifdef VERTEX_NORMAL_BLEND\n"
- " vec3 normal = mix(aNormal1.xyz, aNormal0.xyz, uNormalWeight);\n"
- "#else\n"
- "#ifdef VERTEX_NORMAL\n"
- " vec3 normal = aNormal0.xyz;\n"
- "#endif //VERTEX_NORMAL\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- " #ifdef VERTEX_TEXCOORD_BLEND\n"
- " vTexCoord = mix(vec2(aTexCoord1.s, 1.0 - aTexCoord1.t),\n"
- " vec2(aTexCoord0.s, 1.0 - aTexCoord0.t), uTexCoordWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TEXCOORD\n"
- " vTexCoord = vec2(aTexCoord0.s, 1.0 - aTexCoord0.t);\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- " gl_Position = uMatrixMvp * position;\n"
- " vertexPhong(position, normal);\n"
- " #ifdef SHADOWED\n"
- " vLightPosition = uMatrixLight * position;\n"
- "#endif //SHADOWED\n"
- "}\n";
-
-static const char phong_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "varying vec3 vLightVector;\n"
- "varying vec3 vLightHalfVector;\n"
- "varying vec3 vNormal;\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //TEX_COORD\n"
- "#ifdef FOG_ENABLED\n"
- "uniform float uFogFactor;\n"
- "uniform vec4 uFogColor;\n"
- "#endif //FOG_ENABLED\n"
- "#ifdef SHADOWED\n"
- "varying vec4 vLightPosition;\n"
- "uniform sampler2D uShadowMap;\n"
- "uniform float uShadowsPCFStep;\n"
- "uniform float uShadowsPCFSize;\n"
- "uniform float uShadowsConstantBias;\n"
- "float shadow;\n"
- "float pcf(vec4 lpos)\n"
- "{\n"
- " vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
- " float i, j, shadow, q, c;\n"
- " q = floor(uShadowsPCFStep * 2.0);\n"
- " c = floor(uShadowsPCFStep * uShadowsPCFStep * 4.0);\n"
- " shadow = 0.0;\n"
- " const vec4 unpack = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);\n"
- " for (i = -uShadowsPCFStep; i < uShadowsPCFStep; i += 1.0)\n"
- " for (j = -uShadowsPCFStep; j < uShadowsPCFStep; j += 1.0)\n"
- " {\n"
- " vec4 zvalue = texture2D(uShadowMap, smcoord.xy + vec2(i / q, j / q) * uShadowsPCFSize);\n"
- " shadow += float(smcoord.z < dot(zvalue, unpack) + uShadowsConstantBias);\n"
- " }\n"
- " return shadow / c;\n"
- "}\n"
- "#endif //SHADOWED\n"
- "#ifdef DIFFUSE\n"
- "uniform vec4 uMaterialDiffuse;\n"
- "uniform vec4 uLightDiffuse;\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- "uniform sampler2D uTextureDiffuse0;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureDiffuse1;\n"
- "uniform float uTextureDiffuseWeight;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- "uniform vec4 uLightSpecular;\n"
- "uniform float uMaterialShininess;\n"
- "uniform vec4 uMaterialSpecular;\n"
- "#ifdef SPECULAR_TEXTURE\n"
- "uniform sampler2D uTextureSpecular0;\n"
- "uniform mat3 uTextureMatrixTransformSpecular0;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureSpecular1;\n"
- "uniform float uTextureSpecularWeight;\n"
- "uniform mat3 uTextureMatrixTransformSpecular1;\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- "#endif //SPECULAR\n"
- "#ifdef AMBIENT\n"
- "uniform vec4 uMaterialAmbient;\n"
- "uniform vec4 uLightAmbient;\n"
- "#ifdef AMBIENT_TEXTURE\n"
- "uniform sampler2D uTextureAmbient0;\n"
- "uniform mat3 uTextureMatrixTransformAmbient0;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureAmbient1;\n"
- "uniform float uTextureAmbientWeight;\n"
- "uniform mat3 uTextureMatrixTransformAmbient1;\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- "#endif //AMBIENT\n"
- "#ifdef EMISSION\n"
- "uniform vec4 uMaterialEmission;\n"
- "#ifdef EMISSION_TEXTURE\n"
- "uniform sampler2D uTextureEmission0;\n"
- "uniform mat3 uTextureMatrixTransformEmission0;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureEmission1;\n"
- "uniform float uTextureEmissionWeight;\n"
- "uniform mat3 uTextureMatrixTransformEmission1;\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- "#endif //EMISSION\n"
- "#ifdef LIGHT_SPOT\n"
- "uniform vec3 uLightSpotDir;\n"
- "uniform float uLightSpotExp;\n"
- "uniform float uLightSpotCutoffCos;\n"
- "#endif //LIGHT_SPOT\n"
- "#ifdef LIGHT_ATTENUATION\n"
- "varying float vLightDist;\n"
- "#endif //LIGHT_ATTENUATION\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "vec4 fragmentPhong()\n"
- "{\n"
- " vec3 normal = normalize(vNormal);\n"
- " vec3 lv = normalize(vLightVector);\n"
- " float factor = dot(lv, normal);\n"
- " vec4 color;\n"
- " vec4 fragcolor;\n"
- "#ifdef LIGHT_SPOT\n"
- " float f = dot(-lv, normalize(uLightSpotDir));\n"
- " if (f > uLightSpotCutoffCos)\n"
- " factor *= pow(f, uLightSpotExp);\n"
- " else\n"
- " factor = 0.0;\n"
- "#endif //LIGHT_SPOT\n"
- " if (factor > 0.0)\n"
- " {\n"
- " /* Diffuse term. */\n"
- "#ifdef DIFFUSE\n"
- " \n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
- " color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
- " texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
- " color *= uMaterialDiffuse;\n"
- "#else\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) * uMaterialDiffuse;\n"
- "#else\n"
- " color = uMaterialDiffuse;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- " fragcolor = uLightDiffuse * color * factor;\n"
- "#else\n"
- " fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
- "#endif //DIFFUSE\n"
- " /* Specular term. */\n"
- "#ifdef SPECULAR\n"
- " factor = dot(normalize(vLightHalfVector), normal);\n"
- " if (factor > 0.0)\n"
- " {\n"
- " factor = pow(factor, uMaterialShininess);\n"
- " \n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- " vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
- " vec3 Tex1CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
- " color = mix(texture2D(uTextureSpecular1, vec2(Tex1CoordSpecular)),\n"
- " texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)), uTextureSpecularWeight);\n"
- " color *= uMaterialSpecular;\n"
- "#else\n"
- "#ifdef SPECULAR_TEXTURE\n"
- " vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
- " color = texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)) * uMaterialSpecular;\n"
- "#else\n"
- " color = uMaterialSpecular;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- " fragcolor += uLightSpecular * color * factor;\n"
- " }\n"
- "#endif\n"
- " }\n"
- " else\n"
- " fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
- "#ifdef SHADOWED\n"
- " fragcolor *= shadow;\n"
- "#endif //SHADOWED\n"
- "#ifdef AMBIENT\n"
- " \n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- " vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
- " vec3 Tex1CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
- " color = mix(texture2D(uTextureAmbient1, vec2(Tex1CoordAmbient)),\n"
- " texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)), uTextureAmbientWeight);\n"
- " color *= uMaterialAmbient;\n"
- "#else\n"
- "#ifdef AMBIENT_TEXTURE\n"
- " vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
- " color = texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)) * uMaterialAmbient;\n"
- "#else\n"
- " color = uMaterialAmbient;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- " fragcolor += uLightAmbient * color;\n"
- "#endif\n"
- " /* Light attenuation. */\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * vLightDist));\n"
- "#endif\n"
- " /* Emission term. */\n"
- "#ifdef EMISSION\n"
- " \n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- " vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
- " vec3 Tex1CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
- " color = mix(texture2D(uTextureEmission1, vec2(Tex1CoordEmission)),\n"
- " texture2D(uTextureEmission0, vec2(Tex0CoordEmission)), uTextureEmissionWeight);\n"
- " color *= uMaterialEmission;\n"
- "#else\n"
- "#ifdef EMISSION_TEXTURE\n"
- " vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
- " color = texture2D(uTextureEmission0, vec2(Tex0CoordEmission)) * uMaterialEmission;\n"
- "#else\n"
- " color = uMaterialEmission;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- " fragcolor += color;\n"
- "#endif\n"
- " return fragcolor;\n"
- "}\n"
- "void main()\n"
- "{\n"
- " vec4 color;\n"
- "#ifdef SHADOWED\n"
- " shadow = pcf(vLightPosition);\n"
- "#endif //SHADOWED\n"
- " color = fragmentPhong();\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(color.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#else\n"
- " gl_FragColor = color;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- " \n"
- "#ifdef FOG_ENABLED\n"
- " float z = gl_FragCoord.z / gl_FragCoord.w;\n"
- " float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);\n"
- " fogFactor = clamp(fogFactor, 0.0, 1.0);\n"
- " gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor);\n"
- "#endif //FOG_ENABLED\n"
- "}\n";
-
-static const char normal_map_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "uniform mat3 uMatrixNormal;\n"
- "uniform mat4 uMatrixModelview;\n"
- "uniform vec4 uLightPosition;\n"
- "varying vec3 vLightVector;\n"
- "varying vec3 vLightHalfVector;\n"
- "varying vec3 vEyeVector;\n"
- "#ifndef VERTEX_TANGENT\n"
- "varying vec3 vNormal;\n"
- "#endif //VERTEX_TANGENT\n"
- "#ifdef SHADOWED\n"
- "uniform mat4 uMatrixLight;\n"
- "varying vec4 vLightPosition;\n"
- "#endif //SHADOWED\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef VERTEX_NORMAL\n"
- "attribute vec4 aNormal0;\n"
- "#endif //VERTEX_NORMAL\n"
- "#ifdef VERTEX_NORMAL_BLEND\n"
- "attribute vec4 aNormal1;\n"
- "uniform float uNormalWeight;\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- "#ifdef VERTEX_TANGENT\n"
- "attribute vec4 aTangent0;\n"
- "#endif //VERTEX_TANGENT\n"
- "#ifdef VERTEX_TANGENT_BLEND\n"
- "attribute vec4 aTangent1;\n"
- "uniform float uTangentWeight;\n"
- "#endif //VERTEX_TANGENT_BLEND\n"
- "#ifdef VERTEX_TEXCOORD\n"
- "attribute vec4 aTexCoord0;\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#ifdef VERTEX_TEXCOORD_BLEND\n"
- "attribute vec4 aTexCoord1;\n"
- "uniform float uTexCoordWeight;\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //NEED_TEX_COORD\n"
- "#ifdef LIGHT_ATTENUATION\n"
- "varying float vLightDist;\n"
- "#endif //LIGHT_ATTENUATION\n"
- "#ifndef VERTEX_TANGENT\n"
- "void vertexNormalMap(vec4 position, vec3 normal)\n"
- "{\n"
- " normal = uMatrixNormal * normal;\n"
- " position = uMatrixModelview * position;\n"
- " vEyeVector = normalize(-position.xyz);\n"
- "#ifdef NORMALIZE_NORMALS\n"
- " normal = normalize(normal);\n"
- "#endif //NORMALIZE_NORMALS\n"
- "#ifdef LIGHT_DIRECTIONAL\n"
- " vLightVector = uLightPosition.xyz;\n"
- "#else\n"
- " vLightVector = uLightPosition.xyz - position.xyz;\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " vLightDist = length(vLightVector);\n"
- "#endif //LIGHT_ATTENUATION\n"
- " vLightVector = normalize(vLightVector);\n"
- "#endif //LIGHT_DIRECTIONAL\n"
- " vLightHalfVector = normalize(vEyeVector + vLightVector);\n"
- " vNormal = normal;\n"
- "}\n"
- "#else\n"
- "void vertexNormalMap(vec4 position, vec3 normal, vec3 tangent)\n"
- "{\n"
- " vec3 n = normalize(uMatrixNormal * normal);\n"
- " vec3 t = normalize(uMatrixNormal * tangent);\n"
- " vec3 b = cross(n, t);\n"
- " vec3 tmp;\n"
- " position = uMatrixModelview * position;\n"
- "#ifdef LIGHT_DIRECTIONAL\n"
- " vec3 lightDir = uLightPosition.xyz;\n"
- "#else\n"
- " vec3 lightDir = uLightPosition.xyz - position.xyz;\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " vLightDist = length(lightDir);\n"
- "#endif //LIGHT_ATTENUATION\n"
- " lightDir = normalize(lightDir);\n"
- "#endif //LIGHT_DIRECTIONAL\n"
- " tmp.x = dot(lightDir, t);\n"
- " tmp.y = dot(lightDir, b);\n"
- " tmp.z = dot(lightDir, n);\n"
- " vLightVector = tmp;\n"
- " tmp.x = dot(position.xyz, t);\n"
- " tmp.y = dot(position.xyz, b);\n"
- " tmp.z = dot(position.xyz, n);\n"
- " vEyeVector = normalize(tmp);\n"
- " vec3 hv = normalize(normalize(-position.xyz) + lightDir);\n"
- " tmp.x = dot(hv, t);\n"
- " tmp.y = dot(hv, b);\n"
- " tmp.z = dot(hv, n);\n"
- " vLightHalfVector = tmp;\n"
- "}\n"
- "#endif //VERTEX_TANGENT\n"
- "void main()\n"
- "{\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- " #ifdef VERTEX_NORMAL_BLEND\n"
- " vec3 normal = mix(aNormal1.xyz, aNormal0.xyz, uNormalWeight);\n"
- "#else\n"
- "#ifdef VERTEX_NORMAL\n"
- " vec3 normal = aNormal0.xyz;\n"
- "#endif //VERTEX_NORMAL\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- "#ifdef VERTEX_TANGENT_BLEND\n"
- " vec3 tangent = aTangent0.xyz * uTangentWeight +\n"
- " aTangent1.xyz * (1.0 - uTangentWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TANGENT\n"
- " vec3 tangent = aTangent0.xyz;\n"
- "#endif //VERTEX_TANGENT\n"
- "#endif //VERTEX_TANGENT_BLEND\n"
- " #ifdef VERTEX_TEXCOORD_BLEND\n"
- " vTexCoord = mix(vec2(aTexCoord1.s, 1.0 - aTexCoord1.t),\n"
- " vec2(aTexCoord0.s, 1.0 - aTexCoord0.t), uTexCoordWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TEXCOORD\n"
- " vTexCoord = vec2(aTexCoord0.s, 1.0 - aTexCoord0.t);\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- " gl_Position = uMatrixMvp * position;\n"
- "#ifdef VERTEX_TANGENT\n"
- " vertexNormalMap(position, normal, tangent);\n"
- "#else\n"
- " vertexNormalMap(position, normal);\n"
- "#endif //VERTEX_TANGENT\n"
- "#ifdef SHADOWED\n"
- " vLightPosition = uMatrixLight * position;\n"
- "#endif\n"
- "}\n";
-
-static const char normal_map_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "varying vec3 vLightVector;\n"
- "varying vec3 vLightHalfVector;\n"
- "varying vec3 vEyeVector;\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //TEX_COORD\n"
- "#ifdef FOG_ENABLED\n"
- "uniform float uFogFactor;\n"
- "uniform vec4 uFogColor;\n"
- "#endif //FOG_ENABLED\n"
- "#ifdef SHADOWED\n"
- "varying vec4 vLightPosition;\n"
- "uniform sampler2D uShadowMap;\n"
- "uniform float uShadowsPCFStep;\n"
- "uniform float uShadowsPCFSize;\n"
- "uniform float uShadowsConstantBias;\n"
- "float shadow;\n"
- "float pcf(vec4 lpos)\n"
- "{\n"
- " vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
- " float i, j, shadow, q, c;\n"
- " q = floor(uShadowsPCFStep * 2.0);\n"
- " c = floor(uShadowsPCFStep * uShadowsPCFStep * 4.0);\n"
- " shadow = 0.0;\n"
- " const vec4 unpack = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);\n"
- " for (i = -uShadowsPCFStep; i < uShadowsPCFStep; i += 1.0)\n"
- " for (j = -uShadowsPCFStep; j < uShadowsPCFStep; j += 1.0)\n"
- " {\n"
- " vec4 zvalue = texture2D(uShadowMap, smcoord.xy + vec2(i / q, j / q) * uShadowsPCFSize);\n"
- " shadow += float(smcoord.z < dot(zvalue, unpack) + uShadowsConstantBias);\n"
- " }\n"
- " return shadow / c;\n"
- "}\n"
- "#endif //SHADOWED\n"
- "#ifdef NORMAL_TEXTURE\n"
- "uniform sampler2D uTextureNormal0;\n"
- "uniform mat3 uTextureMatrixTransformNormal0;\n"
- "#endif //NORMAL_TEXTURE\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureNormal1;\n"
- "uniform float uTextureNormalWeight;\n"
- "uniform mat3 uTextureMatrixTransformNormal1;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "#ifndef VERTEX_TANGENT\n"
- "varying vec3 vNormal;\n"
- "#endif //VERTEX_TANGENT\n"
- "#ifdef DIFFUSE\n"
- "uniform vec4 uMaterialDiffuse;\n"
- "uniform vec4 uLightDiffuse;\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- "uniform sampler2D uTextureDiffuse0;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureDiffuse1;\n"
- "uniform float uTextureDiffuseWeight;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- "uniform vec4 uLightSpecular;\n"
- "uniform float uMaterialShininess;\n"
- "uniform vec4 uMaterialSpecular;\n"
- "#ifdef SPECULAR_TEXTURE\n"
- "uniform sampler2D uTextureSpecular0;\n"
- "uniform mat3 uTextureMatrixTransformSpecular0;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureSpecular1;\n"
- "uniform float uTextureSpecularWeight;\n"
- "uniform mat3 uTextureMatrixTransformSpecular1;\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- "#endif //SPECULAR\n"
- "#ifdef AMBIENT\n"
- "uniform vec4 uMaterialAmbient;\n"
- "uniform vec4 uLightAmbient;\n"
- "#ifdef AMBIENT_TEXTURE\n"
- "uniform sampler2D uTextureAmbient0;\n"
- "uniform mat3 uTextureMatrixTransformAmbient0;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureAmbient1;\n"
- "uniform float uTextureAmbientWeight;\n"
- "uniform mat3 uTextureMatrixTransformAmbient1;\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- "#endif //AMBIENT\n"
- "#ifdef EMISSION\n"
- "uniform vec4 uMaterialEmission;\n"
- "#ifdef EMISSION_TEXTURE\n"
- "uniform sampler2D uTextureEmission0;\n"
- "uniform mat3 uTextureMatrixTransformEmission0;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureEmission1;\n"
- "uniform float uTextureEmissionWeight;\n"
- "uniform mat3 uTextureMatrixTransformEmission1;\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- "#endif //EMISSION\n"
- "#ifdef LIGHT_SPOT\n"
- "uniform vec3 uLightSpotDir;\n"
- "uniform float uLightSpotExp;\n"
- "uniform float uLightSpotCutoffCos;\n"
- "#endif //LIGHT_SPOT\n"
- "#ifdef LIGHT_ATTENUATION\n"
- "varying float vLightDist;\n"
- "#endif //LIGHT_ATTENUATION\n"
- "#ifndef VERTEX_TANGENT\n"
- "mat3 cotangent_frame(vec3 n, vec3 p, vec2 uv)\n"
- "{\n"
- " vec3 dp1 = dFdx(p);\n"
- " vec3 dp2 = dFdy(p);\n"
- " vec2 duv1 = dFdx(uv);\n"
- " vec2 duv2 = dFdy(uv);\n"
- " vec3 dp2perp = cross(dp2, n);\n"
- " vec3 dp1perp = cross(n, dp1);\n"
- " vec3 t = dp2perp * duv1.x + dp1perp * duv2.x;\n"
- " vec3 b = dp2perp * duv1.y + dp1perp * duv2.y;\n"
- " float invmax = inversesqrt(max(dot(t, t), dot(b, b)));\n"
- " return mat3(t * invmax, b * invmax, n);\n"
- "}\n"
- "vec3 perturb_normal(vec3 normal)\n"
- "{\n"
- " mat3 tbn = cotangent_frame(vNormal, -vEyeVector, vTexCoord);\n"
- " return normalize(tbn * normal);\n"
- "}\n"
- "#endif //VERTEX_TANGENT\n"
- "vec4 fragmentNormalMap()\n"
- "{\n"
- " float factor;\n"
- " vec3 normal;\n"
- " vec4 color;\n"
- " vec4 fragcolor;\n"
- " vec3 Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- " vec3 Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;\n"
- " normal = texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).rgb * uTextureNormalWeight / texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a;\n"
- " normal += texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).rgb / texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).a *\n"
- " (1.0 - uTextureNormalWeight);\n"
- "#else\n"
- " normal = texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).rgb / texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- " normal = 2.0 * normal - 1.0;\n"
- "#ifndef VERTEX_TANGENT\n"
- " normal = perturb_normal(normal);\n"
- "#endif //VERTEX_TANGENT\n"
- " vec3 lv = normalize(vLightVector);\n"
- " normal = normalize(normal);\n"
- " factor = dot(lv, normal);\n"
- "#ifdef LIGHT_SPOT\n"
- " float f = dot(-lv, normalize(uLightSpotDir));\n"
- " if (f > uLightSpotCutoffCos)\n"
- " factor *= pow(f, uLightSpotExp);\n"
- " else\n"
- " factor = 0.0;\n"
- "#endif //LIGHT_SPOT\n"
- " if (factor > 0.0)\n"
- " {\n"
- "#ifdef DIFFUSE\n"
- " \n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
- " color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
- " texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
- " color *= uMaterialDiffuse;\n"
- "#else\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) * uMaterialDiffuse;\n"
- "#else\n"
- " color = uMaterialDiffuse;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- " fragcolor = uLightDiffuse * color * factor;\n"
- "#else\n"
- " fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- " factor = dot(normalize(vLightHalfVector), normal);\n"
- " if (factor > 0.0)\n"
- " {\n"
- " factor = pow(factor, uMaterialShininess);\n"
- " \n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- " vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
- " vec3 Tex1CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
- " color = mix(texture2D(uTextureSpecular1, vec2(Tex1CoordSpecular)),\n"
- " texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)), uTextureSpecularWeight);\n"
- " color *= uMaterialSpecular;\n"
- "#else\n"
- "#ifdef SPECULAR_TEXTURE\n"
- " vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
- " color = texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)) * uMaterialSpecular;\n"
- "#else\n"
- " color = uMaterialSpecular;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- " fragcolor += uLightSpecular * color * factor;\n"
- " }\n"
- "#endif //SPECULAR\n"
- "#ifdef SHADOWED\n"
- " fragcolor *= shadow;\n"
- "#endif //SHADOWED\n"
- " }\n"
- " else\n"
- " fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
- "#ifdef AMBIENT\n"
- " \n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- " vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
- " vec3 Tex1CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
- " color = mix(texture2D(uTextureAmbient1, vec2(Tex1CoordAmbient)),\n"
- " texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)), uTextureAmbientWeight);\n"
- " color *= uMaterialAmbient;\n"
- "#else\n"
- "#ifdef AMBIENT_TEXTURE\n"
- " vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
- " color = texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)) * uMaterialAmbient;\n"
- "#else\n"
- " color = uMaterialAmbient;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- " fragcolor += uLightAmbient * color;\n"
- "#endif //AMBIENT\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * vLightDist));\n"
- "#endif //LIGHT_ATTENUATION\n"
- "#ifdef EMISSION\n"
- " \n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- " vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
- " vec3 Tex1CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
- " color = mix(texture2D(uTextureEmission1, vec2(Tex1CoordEmission)),\n"
- " texture2D(uTextureEmission0, vec2(Tex0CoordEmission)), uTextureEmissionWeight);\n"
- " color *= uMaterialEmission;\n"
- "#else\n"
- "#ifdef EMISSION_TEXTURE\n"
- " vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
- " color = texture2D(uTextureEmission0, vec2(Tex0CoordEmission)) * uMaterialEmission;\n"
- "#else\n"
- " color = uMaterialEmission;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- " fragcolor += color;\n"
- "#endif //EMISSION\n"
- " return fragcolor;\n"
- "}\n"
- "void main() {\n"
- " vec4 color;\n"
- "#ifdef SHADOWED\n"
- " shadow = pcf(vLightPosition);\n"
- "#endif //SHADOWED\n"
- " color = fragmentNormalMap();\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(color.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#else\n"
- " gl_FragColor = color;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- "#ifdef FOG_ENABLED\n"
- " float z = gl_FragCoord.z / gl_FragCoord.w;\n"
- " float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);\n"
- " fogFactor = clamp(fogFactor, 0.0, 1.0);\n"
- " gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor);\n"
- "#endif //FOG_ENABLED\n"
- "}\n";
-
-static const char shadow_map_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "varying vec4 shadowmapposition;\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- "#ifdef VERTEX_TEXCOORD\n"
- "attribute vec4 aTexCoord0;\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#ifdef VERTEX_TEXCOORD_BLEND\n"
- "attribute vec4 aTexCoord1;\n"
- "uniform float uTexCoordWeight;\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //NEED_TEX_COORD\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- "void main()\n"
- "{\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " #ifdef VERTEX_TEXCOORD_BLEND\n"
- " vTexCoord = mix(vec2(aTexCoord1.s, 1.0 - aTexCoord1.t),\n"
- " vec2(aTexCoord0.s, 1.0 - aTexCoord0.t), uTexCoordWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TEXCOORD\n"
- " vTexCoord = vec2(aTexCoord0.s, 1.0 - aTexCoord0.t);\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- " gl_Position = uMatrixMvp * position;\n"
- " shadowmapposition = gl_Position;\n"
- "}\n";
-
-static const char shadow_map_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "varying vec4 shadowmapposition;\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //TEX_COORD\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "#ifdef DIFFUSE\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- "uniform sampler2D uTextureDiffuse0;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureDiffuse1;\n"
- "uniform float uTextureDiffuseWeight;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- "#endif //DIFFUSE\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- "void main() {\n"
- " vec4 color;\n"
- "#ifndef NEED_TEX_COORD\n"
- " gl_FragColor = vec4(1);\n"
- "#endif\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- " vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
- " color = (texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) *\n"
- " uTextureDiffuseWeight + texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)) *\n"
- " (1.0 - uTextureDiffuseWeight));\n"
- "#else\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- " vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
- " color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse));\n"
- "#else\n"
- " color = vec4(1);\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(color.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- " const vec4 pack = vec4(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0);\n"
- " const vec4 mask = vec4(0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);\n"
- " vec4 depthcolor;\n"
- " float normdist = shadowmapposition.z / shadowmapposition.w;\n"
- " normdist = ((normdist + 1.0) / 2.0);\n"
- " depthcolor = vec4(fract(pack * normdist));\n"
- " depthcolor -= depthcolor.xxyz * mask;\n"
- " gl_FragColor = depthcolor;\n"
- "}\n";
-
-static const char color_pick_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "void main()\n"
- "{\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- " gl_Position = uMatrixMvp * position;\n"
- "}\n";
-
-static const char color_pick_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform vec4 uColorPick;\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "void main()\n"
- "{\n"
- " vec4 color = uColorPick;\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(color.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#else\n"
- " gl_FragColor = color;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- "}\n";
-
-static const char parallax_occlusion_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "uniform mat3 uMatrixNormal;\n"
- "uniform mat4 uMatrixModelview;\n"
- "uniform vec4 uLightPosition;\n"
- "varying vec3 vLightVector;\n"
- "varying vec3 vLightHalfVector;\n"
- "varying vec3 vEyeVector;\n"
- "#ifdef SHADOWED\n"
- "uniform mat4 uMatrixLight;\n"
- "varying vec4 vLightPosition;\n"
- "#endif //SHADOWED\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "#ifdef VERTEX_NORMAL\n"
- "attribute vec4 aNormal0;\n"
- "#endif //VERTEX_NORMAL\n"
- "#ifdef VERTEX_NORMAL_BLEND\n"
- "attribute vec4 aNormal1;\n"
- "uniform float uNormalWeight;\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- "#ifdef VERTEX_TANGENT\n"
- "attribute vec4 aTangent0;\n"
- "#endif //VERTEX_TANGENT\n"
- "#ifdef VERTEX_TANGENT_BLEND\n"
- "attribute vec4 aTangent1;\n"
- "uniform float uTangentWeight;\n"
- "#endif //VERTEX_TANGENT_BLEND\n"
- "#ifdef VERTEX_TEXCOORD\n"
- "attribute vec4 aTexCoord0;\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#ifdef VERTEX_TEXCOORD_BLEND\n"
- "attribute vec4 aTexCoord1;\n"
- "uniform float uTexCoordWeight;\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "#endif //NEED_TEX_COORD\n"
- "#ifdef LIGHT_ATTENUATION\n"
- "varying float vLightDist;\n"
- "#endif //LIGHT_ATTENUATION\n"
- "void vertexParallaxOcclusion(vec4 position, vec3 normal, vec3 tangent)\n"
- "{\n"
- " vec3 n = normalize(uMatrixNormal * normal);\n"
- " vec3 t = normalize(uMatrixNormal * tangent);\n"
- " vec3 b = cross(n, t);\n"
- " vec3 tmp;\n"
- " position = uMatrixModelview * position;\n"
- "#ifdef LIGHT_DIRECTIONAL\n"
- " vec3 lightDir = uLightPosition.xyz;\n"
- "#else\n"
- " vec3 lightDir = uLightPosition.xyz - position.xyz;\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " vLightDist = length(lightDir);\n"
- "#endif //LIGHT_ATTENUATION\n"
- " lightDir = normalize(lightDir);\n"
- "#endif //LIGHT_DIRECTIONAL\n"
- " tmp.x = dot(lightDir, t);\n"
- " tmp.y = dot(lightDir, b);\n"
- " tmp.z = dot(lightDir, n);\n"
- " vLightVector = tmp;\n"
- " tmp.x = dot(position.xyz, t);\n"
- " tmp.y = dot(position.xyz, b);\n"
- " tmp.z = dot(position.xyz, n);\n"
- " vEyeVector = normalize(tmp);\n"
- " vec3 hv = normalize(normalize(-position.xyz) + lightDir);\n"
- " tmp.x = dot(hv, t);\n"
- " tmp.y = dot(hv, b);\n"
- " tmp.z = dot(hv, n);\n"
- " vLightHalfVector = tmp;\n"
- "}\n"
- "void main()\n"
- "{\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- " #ifdef VERTEX_NORMAL_BLEND\n"
- " vec3 normal = mix(aNormal1.xyz, aNormal0.xyz, uNormalWeight);\n"
- "#else\n"
- "#ifdef VERTEX_NORMAL\n"
- " vec3 normal = aNormal0.xyz;\n"
- "#endif //VERTEX_NORMAL\n"
- "#endif //VERTEX_NORMAL_BLEND\n"
- "#ifdef VERTEX_TANGENT_BLEND\n"
- " vec3 tangent = aTangent0.xyz * uTangentWeight +\n"
- " aTangent1.xyz * (1.0 - uTangentWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TANGENT\n"
- " vec3 tangent = aTangent0.xyz;\n"
- "#endif //VERTEX_TANGENT\n"
- "#endif //VERTEX_TANGENT_BLEND\n"
- " #ifdef VERTEX_TEXCOORD_BLEND\n"
- " vTexCoord = mix(vec2(aTexCoord1.s, 1.0 - aTexCoord1.t),\n"
- " vec2(aTexCoord0.s, 1.0 - aTexCoord0.t), uTexCoordWeight);\n"
- "#else\n"
- "#ifdef VERTEX_TEXCOORD\n"
- " vTexCoord = vec2(aTexCoord0.s, 1.0 - aTexCoord0.t);\n"
- "#endif //VERTEX_TEXCOORD\n"
- "#endif //VERTEX_TEXCOORD_BLEND\n"
- " gl_Position = uMatrixMvp * position;\n"
- " vertexParallaxOcclusion(position, normal, tangent);\n"
- " #ifdef SHADOWED\n"
- " vLightPosition = uMatrixLight * position;\n"
- "#endif //SHADOWED\n"
- "}\n";
-
-static const char parallax_occlusion_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "varying vec3 vLightVector;\n"
- "varying vec3 vLightHalfVector;\n"
- "varying vec3 vEyeVector;\n"
- "uniform sampler2D uTextureNormal0;\n"
- "uniform mat3 uTextureMatrixTransformNormal0;\n"
- "#ifdef NEED_TEX_COORD\n"
- "varying vec2 vTexCoord;\n"
- "vec3 Tex0CoordNormal;\n"
- "#endif //TEX_COORD\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureNormal1;\n"
- "uniform float uTextureNormalWeight;\n"
- "uniform mat3 uTextureMatrixTransformNormal1;\n"
- "vec3 Tex1CoordNormal;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- "#ifdef FOG_ENABLED\n"
- "uniform float uFogFactor;\n"
- "uniform vec4 uFogColor;\n"
- "#endif //FOG_ENABLED\n"
- "#ifdef SHADOWED\n"
- "varying vec4 vLightPosition;\n"
- "uniform sampler2D uShadowMap;\n"
- "uniform float uShadowsPCFStep;\n"
- "uniform float uShadowsPCFSize;\n"
- "uniform float uShadowsConstantBias;\n"
- "float shadow;\n"
- "float pcf(vec4 lpos)\n"
- "{\n"
- " vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
- " float i, j, shadow, q, c;\n"
- " q = floor(uShadowsPCFStep * 2.0);\n"
- " c = floor(uShadowsPCFStep * uShadowsPCFStep * 4.0);\n"
- " shadow = 0.0;\n"
- " const vec4 unpack = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);\n"
- " for (i = -uShadowsPCFStep; i < uShadowsPCFStep; i += 1.0)\n"
- " for (j = -uShadowsPCFStep; j < uShadowsPCFStep; j += 1.0)\n"
- " {\n"
- " vec4 zvalue = texture2D(uShadowMap, smcoord.xy + vec2(i / q, j / q) * uShadowsPCFSize);\n"
- " shadow += float(smcoord.z < dot(zvalue, unpack) + uShadowsConstantBias);\n"
- " }\n"
- " return shadow / c;\n"
- "}\n"
- "#endif //SHADOWED\n"
- "#ifdef DIFFUSE\n"
- "uniform vec4 uMaterialDiffuse;\n"
- "uniform vec4 uLightDiffuse;\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- "uniform sampler2D uTextureDiffuse0;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureDiffuse1;\n"
- "uniform float uTextureDiffuseWeight;\n"
- "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- "uniform vec4 uLightSpecular;\n"
- "uniform float uMaterialShininess;\n"
- "uniform vec4 uMaterialSpecular;\n"
- "#ifdef SPECULAR_TEXTURE\n"
- "uniform sampler2D uTextureSpecular0;\n"
- "uniform mat3 uTextureMatrixTransformSpecular0;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureSpecular1;\n"
- "uniform float uTextureSpecularWeight;\n"
- "uniform mat3 uTextureMatrixTransformSpecular1;\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- "#endif //SPECULAR\n"
- "#ifdef AMBIENT\n"
- "uniform vec4 uMaterialAmbient;\n"
- "uniform vec4 uLightAmbient;\n"
- "#ifdef AMBIENT_TEXTURE\n"
- "uniform sampler2D uTextureAmbient0;\n"
- "uniform mat3 uTextureMatrixTransformAmbient0;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureAmbient1;\n"
- "uniform float uTextureAmbientWeight;\n"
- "uniform mat3 uTextureMatrixTransformAmbient1;\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- "#endif //AMBIENT\n"
- "#ifdef EMISSION\n"
- "uniform vec4 uMaterialEmission;\n"
- "#ifdef EMISSION_TEXTURE\n"
- "uniform sampler2D uTextureEmission0;\n"
- "uniform mat3 uTextureMatrixTransformEmission0;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- "uniform sampler2D uTextureEmission1;\n"
- "uniform float uTextureEmissionWeight;\n"
- "uniform mat3 uTextureMatrixTransformEmission1;\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- "#endif //EMISSION\n"
- "#ifdef LIGHT_SPOT\n"
- "uniform vec3 uLightSpotDir;\n"
- "uniform float uLightSpotExp;\n"
- "uniform float uLightSpotCutoffCos;\n"
- "#endif //LIGHT_SPOT\n"
- "#ifdef LIGHT_ATTENUATION\n"
- "varying float vLightDist;\n"
- "#endif //LIGHT_ATTENUATION\n"
- "uniform int uAlphaTestComparison;\n"
- "uniform float uAlphaTestRefValue;\n"
- "const float parallaxScale = 0.2;\n"
- "vec2 parallaxMapping(in vec3 view, in vec2 tex, out float parallaxHeight)\n"
- "{\n"
- " const float numLayers = 15.0;\n"
- " vec2 texStep = parallaxScale * view.xy / view.z / numLayers;\n"
- " float layerHeight = 1.0 / numLayers;\n"
- " float curLayerHeight = 0.0;\n"
- " vec2 dtex = parallaxScale * view.xy / view.z / numLayers;\n"
- " vec2 currentTextureCoords = tex;\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- " float heightFromTexture = (1.0 - texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a) * uTextureNormalWeight;\n"
- " heightFromTexture += (1.0 - texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).a) *\n"
- " (1.0 - uTextureNormalWeight);\n"
- "#else\n"
- " float heightFromTexture = 1.0 - texture2D(uTextureNormal0, currentTextureCoords).a;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- " while(heightFromTexture > curLayerHeight)\n"
- " {\n"
- " curLayerHeight += layerHeight;\n"
- " currentTextureCoords -= dtex;\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- " heightFromTexture = (1.0 - texture2D(uTextureNormal0, currentTextureCoords).a) * uTextureNormalWeight;\n"
- " heightFromTexture += (1.0 - texture2D(uTextureNormal1, currentTextureCoords).a) *\n"
- " (1.0 - uTextureNormalWeight);\n"
- "#else\n"
- " heightFromTexture = 1.0 - texture2D(uTextureNormal0, currentTextureCoords).a;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- " }\n"
- " vec2 prevTCoords = currentTextureCoords + texStep;\n"
- " float nextH = heightFromTexture - curLayerHeight;\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- " float prevH = (1.0 - texture2D(uTextureNormal0, prevTCoords).a\n"
- " - curLayerHeight + layerHeight) * uTextureNormalWeight;\n"
- " prevH += (1.0 - texture2D(uTextureNormal1, prevTCoords).a\n"
- " - curLayerHeight + layerHeight) * (1.0 - uTextureNormalWeight);\n"
- "#else\n"
- " float prevH = 1.0 - texture2D(uTextureNormal0, prevTCoords).a\n"
- " - curLayerHeight + layerHeight;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- " float weight = nextH / (nextH - prevH);\n"
- " vec2 finalTexCoords = prevTCoords * weight + currentTextureCoords * (1.0-weight);\n"
- " parallaxHeight = curLayerHeight + prevH * weight + nextH * (1.0 - weight);\n"
- " return finalTexCoords;\n"
- "}\n"
- "vec4 fragmentParallaxMap()\n"
- "{\n"
- " float factor;\n"
- " vec3 normal;\n"
- " vec4 color;\n"
- " vec4 fragcolor;\n"
- " float parallaxHeight;\n"
- " vec2 tex = parallaxMapping(vEyeVector, vec2(Tex0CoordNormal), parallaxHeight);\n"
- " vec3 lv = normalize(vLightVector);\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- " normal = texture2D(uTextureNormal0, tex).rgb * uTextureNormalWeight / texture2D(uTextureNormal0, tex).a;\n"
- " normal += texture2D(uTextureNormal1, tex).rgb *\n"
- " (1.0 - uTextureNormalWeight) / texture2D(uTextureNormal1, tex).a;\n"
- "#else\n"
- " normal = texture2D(uTextureNormal0, tex).rgb / texture2D(uTextureNormal0, tex).a;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- " normal = 2.0 * normal - 1.0;\n"
- " normal = normalize(normal);\n"
- " factor = dot(lv, normal);\n"
- "#ifdef LIGHT_SPOT\n"
- " float f = dot(-lv, normalize(uLightSpotDir));\n"
- " if (f > uLightSpotCutoffCos)\n"
- " factor *= pow(f, uLightSpotExp);\n"
- " else\n"
- " factor = 0.0;\n"
- "#endif //LIGHT_SPOT\n"
- " if (factor > 0.0)\n"
- " {\n"
- "#ifdef DIFFUSE\n"
- "#ifdef DIFFUSE_TEXTURE_BLEND\n"
- " color = texture2D(uTextureDiffuse0, tex) * uTextureDiffuseWeight +\n"
- " texture2D(uTextureDiffuse1, tex) * (1.0 - uTextureDiffuseWeight);\n"
- "#else\n"
- "#ifdef DIFFUSE_TEXTURE\n"
- " color = texture2D(uTextureDiffuse0, tex);\n"
- "#else\n"
- " color = uMaterialDiffuse;\n"
- "#endif //DIFFUSE_TEXTURE\n"
- "#endif //DIFFUSE_TEXTURE_BLEND\n"
- " fragcolor = uLightDiffuse * color * factor;\n"
- "#else\n"
- " fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
- "#endif //DIFFUSE\n"
- "#ifdef SPECULAR\n"
- " factor = dot(normalize(vLightHalfVector), normal);\n"
- " if (factor > 0.0)\n"
- " {\n"
- " factor = pow(factor, uMaterialShininess);\n"
- "#ifdef SPECULAR_TEXTURE_BLEND\n"
- " color = texture2D(uTextureSpecular0, tex) * uTextureSpecularWeight +\n"
- " texture2D(uTextureSpecular1, tex) * (1.0 - uTextureSpecularWeight);\n"
- "#else\n"
- "#ifdef SPECULAR_TEXTURE\n"
- " color = texture2D(uTextureSpecular0, tex);\n"
- "#else\n"
- " color = uMaterialSpecular;\n"
- "#endif //SPECULAR_TEXTURE\n"
- "#endif //SPECULAR_TEXTURE_BLEND\n"
- " fragcolor += uLightSpecular * color * factor;\n"
- " }\n"
- "#endif //SPECULAR\n"
- "#ifdef SHADOWED\n"
- " fragcolor *= shadow;\n"
- "#endif //SHADOWED\n"
- " }\n"
- " else\n"
- " fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
- "#ifdef AMBIENT\n"
- "#ifdef AMBIENT_TEXTURE_BLEND\n"
- " color = texture2D(uTextureAmbient0, tex) * uTextureAmbientWeight +\n"
- " texture2D(uTextureAmbient1, tex) * (1.0 - uTextureAmbientWeight);\n"
- "#else\n"
- "#ifdef AMBIENT_TEXTURE\n"
- " color = texture2D(uTextureAmbient0, tex);\n"
- "#else\n"
- " color = uMaterialAmbient;\n"
- "#endif //AMBIENT_TEXTURE\n"
- "#endif //AMBIENT_TEXTURE_BLEND\n"
- " fragcolor += uLightAmbient * color;\n"
- "#endif //AMBIENT\n"
- "#ifdef LIGHT_ATTENUATION\n"
- " fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * vLightDist));\n"
- "#endif //LIGHT_ATTENUATION\n"
- "#ifdef EMISSION\n"
- "#ifdef EMISSION_TEXTURE_BLEND\n"
- " color = texture2D(uTextureEmission0, tex) * uTextureEmissionWeight +\n"
- " texture2D(uTextureEmission1, tex) * (1.0 - uTextureEmissionWeight);\n"
- "#else\n"
- "#ifdef EMISSION_TEXTURE\n"
- " color = texture2D(uTextureEmission0, tex);\n"
- "#else\n"
- " color = uMaterialEmission;\n"
- "#endif //EMISSION_TEXTURE\n"
- "#endif //EMISSION_TEXTURE_BLEND\n"
- " fragcolor += color;\n"
- "#endif //EMISSION\n"
- " return fragcolor;\n"
- "}\n"
- "void main() {\n"
- " vec4 color;\n"
- "#ifdef NEED_TEX_COORD\n"
- " Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;\n"
- "#endif // NEED_TEX_COORD\n"
- "#ifdef NORMAL_TEXTURE_BLEND\n"
- " Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;\n"
- "#endif //NORMAL_TEXTURE_BLEND\n"
- "#ifdef SHADOWED\n"
- " shadow = pcf(vLightPosition);\n"
- "#endif //SHADOWED\n"
- " color = fragmentParallaxMap();\n"
- "#ifdef ALPHA_TEST_ENABLED\n"
- " /*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
- " const float p = 1000000.0;\n"
- " float acolor = floor(color.a * p);\n"
- " float refvalue = floor(uAlphaTestRefValue * p);\n"
- " if (uAlphaTestComparison == 0) discard;\n"
- " else if (uAlphaTestComparison == 1)\n"
- " {\n"
- " if (acolor < refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 2)\n"
- " {\n"
- " if (acolor == refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 3)\n"
- " {\n"
- " if (acolor <= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 4)\n"
- " {\n"
- " if (acolor > refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 5)\n"
- " {\n"
- " if (acolor != refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 6)\n"
- " {\n"
- " if (acolor >= refvalue) gl_FragColor = color;\n"
- " else discard;\n"
- " }\n"
- " else if (uAlphaTestComparison == 7) ;\n"
- "#else\n"
- " gl_FragColor = color;\n"
- "#endif //ALPHA_TEST_ENABLED\n"
- " \n"
- "#ifdef FOG_ENABLED\n"
- " float z = gl_FragCoord.z / gl_FragCoord.w;\n"
- " float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);\n"
- " fogFactor = clamp(fogFactor, 0.0, 1.0);\n"
- " gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor);\n"
- "#endif //FOG_ENABLED\n"
- "}\n";
-
-static const char post_processing_fxaa_vert_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "uniform mat4 uMatrixMvp;\n"
- "#ifdef VERTEX_POSITION\n"
- "attribute vec4 aPosition0;\n"
- "#endif //VERTEX_POSITION\n"
- "#ifdef VERTEX_POSITION_BLEND\n"
- "attribute vec4 aPosition1;\n"
- "uniform float uPositionWeight;\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- "varying vec2 tc0;\n"
- "void main()\n"
- "{\n"
- " #ifdef VERTEX_POSITION_BLEND\n"
- " vec4 position = mix(aPosition1, aPosition0, uPositionWeight);\n"
- " position = vec4(position.xyz, 1.0);\n"
- "#else\n"
- "#ifdef VERTEX_POSITION\n"
- " vec4 position = vec4(aPosition0.xyz, 1.0);\n"
- "#endif // VERTEX_POSITION\n"
- "#endif //VERTEX_POSITION_BLEND\n"
- " gl_Position = uMatrixMvp * position;\n"
- " tc0 = position.xy * 0.5 + 0.5;\n"
- "}\n";
-
-static const char post_processing_fxaa_frag_glsl[] =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "precision mediump int;\n"
- "precision lowp sampler2D;\n"
- "#endif\n"
- "//FXAA fragment shader by Timothy Lottes\n"
- "//http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf\n"
- "//modified and adapted to www.enlightenment.org by Oleksander Shcherbina\n"
- "uniform sampler2D uColorTexture;\n"
- "uniform float uFrameSizeH;\n"
- "uniform float uFrameSizeW;\n"
- "varying vec2 tc0;\n"
- "vec4 fxaa()\n"
- "{\n"
- " float _SPAN_MAX_ = 8.0;\n"
- " float _REDUCE_MUL_ = (1.0/8.0);\n"
- " float _REDUCE_MIN_ = (1.0/128.0);\n"
- " vec4 l = vec4(0.299, 0.587, 0.114, 0.0);\n"
- " vec2 frameBufSize = vec2(uFrameSizeW, uFrameSizeH);\n"
- " vec2 direction;\n"
- " vec4 colorNW = texture2D(uColorTexture, tc0 + (vec2(-1.0, -1.0)/frameBufSize));\n"
- " vec4 colorNE = texture2D(uColorTexture, tc0 + (vec2(1.0, -1.0)/frameBufSize));\n"
- " vec4 colorSW = texture2D(uColorTexture, tc0 + (vec2(-1.0, 1.0)/frameBufSize));\n"
- " vec4 colorSE = texture2D(uColorTexture, tc0 + (vec2(1.0, 1.0)/frameBufSize));\n"
- " vec4 colorM = texture2D(uColorTexture,tc0);\n"
- " float lNW = dot(colorNW, l);\n"
- " float lNE = dot(colorNE, l);\n"
- " float lSW = dot(colorSW, l);\n"
- " float lSE = dot(colorSE, l);\n"
- " float lM = dot(colorM, l);\n"
- " float lMin = min(lM, min(min(lNW, lNE), min(lSW, lSE)));\n"
- " float lMax = max(lM, max(max(lNW, lNE), max(lSW, lSE)));\n"
- " direction.x = -((lNW + lNE) - (lSW + lSE));\n"
- " direction.y = ((lNW + lSW) - (lNE + lSE));\n"
- " float directionReduce = max(\n"
- " (lNW + lNE + lSW + lSE) * (0.25 * _REDUCE_MUL_),\n"
- " _REDUCE_MIN_);\n"
- " float rcpDirMin = 1.0/(min(abs(direction.x), abs(direction.y)) + directionReduce);\n"
- " direction = min(vec2(_SPAN_MAX_, _SPAN_MAX_),\n"
- " max(vec2(-_SPAN_MAX_, -_SPAN_MAX_),\n"
- " direction * rcpDirMin)) / frameBufSize;\n"
- " vec4 colorA = 0.5 * (\n"
- " texture2D(uColorTexture, tc0.xy + direction * (1.0/3.0 - 0.5)) +\n"
- " texture2D(uColorTexture, tc0.xy + direction * (2.0/3.0 - 0.5)));\n"
- " vec4 colorB = colorA * 0.5 + 0.25 * (\n"
- " texture2D(uColorTexture, tc0.xy + direction * (- 0.5)) +\n"
- " texture2D(uColorTexture, tc0.xy + direction * 0.5));\n"
- " float lB = dot(colorB, l);\n"
- " if((lB < lMin) || (lB > lMax))\n"
- " return colorA;\n"
- " else\n"
- " return colorB;\n"
- "}\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = fxaa();\n"
- "}\n";
-
-static const char *vertex_shaders[] =
-{
- vertex_color_vert_glsl,
- diffuse_vert_glsl,
- flat_vert_glsl,
- phong_vert_glsl,
- normal_map_vert_glsl,
- shadow_map_vert_glsl,
- color_pick_vert_glsl,
- parallax_occlusion_vert_glsl,
- post_processing_fxaa_vert_glsl,
-};
-
-static const char *fragment_shaders[] =
-{
- vertex_color_frag_glsl,
- diffuse_frag_glsl,
- flat_frag_glsl,
- phong_frag_glsl,
- normal_map_frag_glsl,
- shadow_map_frag_glsl,
- color_pick_frag_glsl,
- parallax_occlusion_frag_glsl,
- post_processing_fxaa_frag_glsl,
-};
diff --git a/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd
deleted file mode 100644
index 863bac1e1a..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd
+++ /dev/null
@@ -1,64 +0,0 @@
-varying vec2 vFactor;
-
-FRAGMENT_SHADER_USE_TEX_COORD
-FRAGMENT_SHADER_USE_FOG
-FRAGMENT_SHADER_USE_SHADOWS
-FRAGMENT_SHADER_USE_DIFFUSE_TERM
-FRAGMENT_SHADER_USE_SPECULAR_TERM
-FRAGMENT_SHADER_USE_AMBIENT_TERM
-FRAGMENT_SHADER_USE_EMISSION_TERM
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-vec4 fragmentFlat()
-{
- vec4 color;
- vec4 fragcolor;
-#ifdef DIFFUSE
-
- FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
- fragcolor = uLightDiffuse * color * vFactor.x;
-#else
- fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
-#endif //DIFFUSE
-
-#ifdef SPECULAR
-
- FRAGMENT_SHADER_TEXTURE_BLEND(SPECULAR, Specular)
- fragcolor += uLightSpecular * color * vFactor.y;
-
-#endif //SPECULAR
-
-#ifdef SHADOWED
- fragcolor *= shadow;
-#endif //SHADOWED
-
-#ifdef AMBIENT
-
- FRAGMENT_SHADER_TEXTURE_BLEND(AMBIENT, Ambient)
- fragcolor += uLightAmbient * color;
-#endif //AMBIENT
-
-#ifdef EMISSION
-
- FRAGMENT_SHADER_TEXTURE_BLEND(EMISSION, Emission)
- fragcolor += color;
-#endif //EMISSION
- return fragcolor;
-}
-
-void main() {
- vec4 color;
-#ifdef SHADOWED
- shadow = pcf(vLightPosition);
-#endif //SHADOWED
-
- color = fragmentFlat();
-
-#ifdef ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
-#else
- gl_FragColor = color;
-#endif //ALPHA_TEST_ENABLED
-
- FRAGMENT_SHADER_FOG_APPLY
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/flat_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/flat_vert.shd
deleted file mode 100644
index 10b9493304..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/flat_vert.shd
+++ /dev/null
@@ -1,92 +0,0 @@
-uniform mat4 uMatrixMvp;
-uniform mat3 uMatrixNormal;
-uniform mat4 uMatrixModelview;
-uniform vec4 uLightPosition;
-varying vec2 vFactor;
-
-VERTEX_SHADER_USE_SHADOWS
-VERTEX_SHADER_USE_POSITION
-VERTEX_SHADER_USE_NORMALS
-VERTEX_SHADER_USE_TEXCOORD
-VERTEX_SHADER_NEED_TEX_COORD
-
-#ifdef LIGHT_SPOT
-uniform vec3 uLightSpotDir;
-uniform float uLightSpotExp;
-uniform float uLightSpotCutoffCos;
-#endif //LIGHT_SPOT
-
-#ifdef SPECULAR
-uniform float uMaterialShininess;
-#endif //SPECULAR
-
-#ifdef LIGHT_ATTENUATION
-uniform vec3 uLightAtten;
-#endif //LIGHT_ATTENUATION
-
-void vertexFlat(vec4 position, vec3 normal)
-{
- vec3 lv;
- float factor;
- normal = uMatrixNormal * normal;
- position = uMatrixModelview * position;
-
-#ifdef NORMALIZE_NORMALS
- normal = normalize(normal);
-#endif //NORMALIZE_NORMALS
-
-#ifdef LIGHT_DIRECTIONAL
- lv = uLightPosition.xyz;
-#else
- lv = uLightPosition.xyz - position.xyz;
- lv = normalize(lv);
-#endif //LIGHT_DIRECTIONAL
-
- factor = max(dot(lv, normal), 0.0);
-
-#ifdef LIGHT_SPOT
- float f = dot(-lv, uLightSpotDir);
- if (f > uLightSpotCutoffCos)
- factor *= pow(f, uLightSpotExp);
- else
- factor = 0.0;
-#endif //LIGHT_SPOT
-
- if (factor > 0.0)
- {
-
-#ifdef DIFFUSE
- vFactor.x = factor;
-#else
- vFactor.x = 0.0;
-#endif //DIFFUSE
-
-#ifdef SPECULAR
- vec3 hv = normalize(normalize(-position.xyz) + lv);
- factor = pow(max(dot(hv, normal), 0.0), uMaterialShininess);
- vFactor.y = factor;
-#endif //SPECULAR
-
- }
- else
- vFactor = vec2(0.0, 0.0);
-
- /* Light attenuation. */
-#ifdef LIGHT_ATTENUATION
- float dist = length(lv);
- vFactor /= dot(uLightAtten, vec3(1.0, dist, dist * dist));
-#endif //LIGHT_ATTENUATION
-}
-
-void main()
-{
-
- VERTEX_SHADER_POSITION
- VERTEX_SHADER_NORMAL
- VERTEX_SHADER_TEXCOORD
-
- gl_Position = uMatrixMvp * position;
- vertexFlat(position, normal);
-
- VERTEX_SHADER_SHADOWED
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh b/src/modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh
deleted file mode 100755
index f31880fda0..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh
-
-# This script will generate a C file containing all the shaders used by Evas_3D
-
-DIR=`dirname $0`
-cd $DIR/../../../../../
-
-OUTPUT="$DIR/evas_gl_3d_shaders.x"
-
-# Skip generation during make distcheck
-if [ "${top_distdir}" != "" ] ; then exit 0; fi
-
-# Skip generation if file can not be written to
-if [ -e ${OUTPUT} ] && [ ! -w ${OUTPUT} ] ; then exit 0; fi
-
-# Skip generation if there is no diff (or no git)
-if ! git rev-parse 2>> /dev/null >> /dev/null ; then exit 0 ; fi
-if git diff --quiet --exit-code -- "$DIR"
-then
- touch "$OUTPUT"
- exit 0
-fi
-
-exec 1<&-
-exec 1>"$OUTPUT"
-
-SHADERS=$@
-VERT_SHADERS_SOURCE=""
-FRAG_SHADERS_SOURCE=""
-
-# Write header
-printf "/* DO NOT MODIFY THIS FILE AS IT IS AUTO-GENERATED */\n"
-printf "/* IF IT IS CHANGED PLEASE COMMIT THE CHANGES */\n\n"
-
-for SHD in $SHADERS ; do
- LNAME=`basename "$SHD" .shd`
-
- if echo "$LNAME" | grep _vert 2>&1 >> /dev/null ; then
- VERT_SHADERS_SOURCE="$VERT_SHADERS_SOURCE "$LNAME"_glsl,\n"
- fi
- if echo "$LNAME" | grep _frag 2>&1 >> /dev/null ; then
- FRAG_SHADERS_SOURCE="$FRAG_SHADERS_SOURCE "$LNAME"_glsl,\n"
- fi
-
- m4 "$DIR/include.shd" "$SHD" > "$SHD.tmp"
-
- OIFS="$IFS"
- IFS=`printf '\n+'`
- IFS=${IFS%+}
- printf "static const char "$LNAME"_glsl[] ="
- for LINE in `cat "$SHD.tmp"` ; do
- printf "\n \"$LINE\\\n\""
- done
- printf ";\n\n"
- IFS="$OIFS"
-
- rm "$SHD.tmp"
-done
-
-printf "static const char *vertex_shaders[] =
-{\n"
- printf "$VERT_SHADERS_SOURCE"
-printf "};\n\n"
-
-printf "static const char *fragment_shaders[] =
-{\n"
- printf "$FRAG_SHADERS_SOURCE"
-printf "};\n"
diff --git a/src/modules/evas/engines/gl_common/shader_3d/include.shd b/src/modules/evas/engines/gl_common/shader_3d/include.shd
deleted file mode 100644
index 2897589c17..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/include.shd
+++ /dev/null
@@ -1,254 +0,0 @@
-`#ifdef GL_ES
-precision mediump float;
-precision mediump int;
-precision lowp sampler2D;
-#endif'
-
-define(`FRAGMENT_SHADER_USE_TEX_COORD',`
-#ifdef NEED_TEX_COORD
-varying vec2 vTexCoord;
-#endif //TEX_COORD')
-
-define(`FRAGMENT_SHADER_USE_TEXTURE', `
-#ifdef $1_TEXTURE
-uniform sampler2D uTexture$2`0';
-uniform mat3 uTextureMatrixTransform$2`0';
-#endif //$1_TEXTURE
-#ifdef $1_TEXTURE_BLEND
-uniform sampler2D uTexture$2`1';
-uniform float uTexture$2Weight;
-uniform mat3 uTextureMatrixTransform$2`1';
-#endif //$1_TEXTURE_BLEND')
-
-define(`FRAGMENT_SHADER_USE_FOG', `
-#ifdef FOG_ENABLED
-uniform float uFogFactor;
-uniform vec4 uFogColor;
-#endif //FOG_ENABLED')
-define(`FRAGMENT_SHADER_USE_ALPHA_TEST_GLES',
-uniform int uAlphaTestComparison;
-uniform float uAlphaTestRefValue;)
-
-define(`FRAGMENT_SHADER_USE_SHADOWS', `
-#ifdef SHADOWED
-varying vec4 vLightPosition;
-uniform sampler2D uShadowMap;
-uniform float uShadowsPCFStep;
-uniform float uShadowsPCFSize;
-uniform float uShadowsConstantBias;
-float shadow;
-float pcf(vec4 lpos)
-{
- vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;
- float i, j, shadow, q, c;
- q = floor(uShadowsPCFStep * 2.0);
- c = floor(uShadowsPCFStep * uShadowsPCFStep * 4.0);
- shadow = 0.0;
- const vec4 unpack = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);
- for (i = -uShadowsPCFStep; i < uShadowsPCFStep; i += 1.0)
- for (j = -uShadowsPCFStep; j < uShadowsPCFStep; j += 1.0)
- {
- vec4 zvalue = texture2D(uShadowMap, smcoord.xy + vec2(i / q, j / q) * uShadowsPCFSize);
- shadow += float(smcoord.z < dot(zvalue, unpack) + uShadowsConstantBias);
- }
- return shadow / c;
-}
-#endif //SHADOWED')
-
-define(`FRAGMENT_SHADER_FOG_APPLY', `
-#ifdef FOG_ENABLED
- float z = gl_FragCoord.z / gl_FragCoord.w;
- float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);
- fogFactor = clamp(fogFactor, 0.0, 1.0);
- gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor);
-#endif //FOG_ENABLED')
-
-define(`FRAGMENT_SHADER_USE_LIGHT', `
-#ifdef LIGHT_SPOT
-uniform vec3 uLightSpotDir;
-uniform float uLightSpotExp;
-uniform float uLightSpotCutoffCos;
-#endif //LIGHT_SPOT
-#ifdef LIGHT_ATTENUATION
-varying float vLightDist;
-#endif //LIGHT_ATTENUATION')
-
-define(`FRAGMENT_SHADER_TEXTURE_BLEND', `
-#ifdef $1_TEXTURE_BLEND
- vec3 Tex0Coord$2 = vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`0';
- vec3 Tex1Coord$2 = vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`1';
- color = mix(texture2D(uTexture$2`1', vec2(Tex1Coord$2)),
- texture2D(uTexture$2`0', vec2(Tex0Coord$2)), uTexture$2Weight);
- color *= uMaterial$2;
-#else
-#ifdef $1_TEXTURE
- vec3 Tex0Coord$2 = vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`0';
- color = texture2D(uTexture$2`0', vec2(Tex0Coord$2)) * uMaterial$2;
-#else
- color = uMaterial$2;
-#endif //$1_TEXTURE
-#endif //$1_TEXTURE_BLEND')
-
-define(`FRAGMENT_SHADER_USE_EMISSION_TERM',
-`#ifdef EMISSION'
-uniform vec4 uMaterialEmission;
-FRAGMENT_SHADER_USE_TEXTURE(EMISSION, Emission)
-`#endif //EMISSION')
-
-define(`FRAGMENT_SHADER_USE_SPECULAR_TERM',
-`#ifdef SPECULAR'
-uniform vec4 uLightSpecular;
-uniform float uMaterialShininess;
-uniform vec4 uMaterialSpecular;
-FRAGMENT_SHADER_USE_TEXTURE(SPECULAR, Specular)
-`#endif //SPECULAR')
-
-define(`FRAGMENT_SHADER_USE_AMBIENT_TERM',
-`#ifdef AMBIENT'
-uniform vec4 uMaterialAmbient;
-uniform vec4 uLightAmbient;
-FRAGMENT_SHADER_USE_TEXTURE(AMBIENT, Ambient)
-`#endif //AMBIENT')
-
-define(`FRAGMENT_SHADER_USE_DIFFUSE_TERM',
-`#ifdef DIFFUSE'
-uniform vec4 uMaterialDiffuse;
-uniform vec4 uLightDiffuse;
-FRAGMENT_SHADER_USE_TEXTURE(DIFFUSE, Diffuse)
-`#endif //DIFFUSE')
-
-define(`FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY',
-/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/
- const float p = 1000000.0;
- float acolor = floor($1.a * p);
- float refvalue = floor(uAlphaTestRefValue * p);
- if (uAlphaTestComparison == 0) discard;
- else if (uAlphaTestComparison == 1)
- {
- if (acolor < refvalue) gl_FragColor = $1;
- else discard;
- }
- else if (uAlphaTestComparison == 2)
- {
- if (acolor == refvalue) gl_FragColor = $1;
- else discard;
- }
- else if (uAlphaTestComparison == 3)
- {
- if (acolor <= refvalue) gl_FragColor = $1;
- else discard;
- }
- else if (uAlphaTestComparison == 4)
- {
- if (acolor > refvalue) gl_FragColor = $1;
- else discard;
- }
- else if (uAlphaTestComparison == 5)
- {
- if (acolor != refvalue) gl_FragColor = $1;
- else discard;
- }
- else if (uAlphaTestComparison == 6)
- {
- if (acolor >= refvalue) gl_FragColor = $1;
- else discard;
- }
- else if (uAlphaTestComparison == 7) ;)
-
-
-define(`VERTEX_SHADER_NEED_TEX_COORD',
-`#ifdef NEED_TEX_COORD'
-varying vec2 vTexCoord;
-`#endif //NEED_TEX_COORD')
-
-define(`VERTEX_SHADER_USE_LIGHT_ATTENUATION',
-`#ifdef LIGHT_ATTENUATION'
-varying float vLightDist;
-`#endif //LIGHT_ATTENUATION')
-
-define(`VERTEX_SHADER_USE_SHADOWS',
-`#ifdef SHADOWED'
-uniform mat4 uMatrixLight;
-varying vec4 vLightPosition;
-`#endif //SHADOWED')
-
-define(`VERTEX_SHADER_USE_POSITION',
-`#ifdef VERTEX_POSITION'
-attribute vec4 aPosition0;
-`#endif //VERTEX_POSITION'
-
-`#ifdef VERTEX_POSITION_BLEND'
-attribute vec4 aPosition1;
-uniform float uPositionWeight;
-`#endif //VERTEX_POSITION_BLEND')
-
-define(`VERTEX_SHADER_USE_NORMALS',
-`#ifdef VERTEX_NORMAL'
-attribute vec4 aNormal0;
-`#endif //VERTEX_NORMAL'
-
-`#ifdef VERTEX_NORMAL_BLEND'
-attribute vec4 aNormal1;
-uniform float uNormalWeight;
-`#endif //VERTEX_NORMAL_BLEND'
-)
-
-define(`VERTEX_SHADER_USE_TEXCOORD',
-`#ifdef VERTEX_TEXCOORD'
-attribute vec4 aTexCoord0;
-`#endif //VERTEX_TEXCOORD'
-
-`#ifdef VERTEX_TEXCOORD_BLEND'
-attribute vec4 aTexCoord1;
-uniform float uTexCoordWeight;
-`#endif //VERTEX_TEXCOORD_BLEND'
-)
-
-define(`VERTEX_SHADER_USE_COLOR',
-`#ifdef VERTEX_COLOR'
-attribute vec4 aColor0;
-`#endif //VERTEX_COLOR'
-
-`#ifdef VERTEX_COLOR_BLEND'
-attribute vec4 aColor1;
-uniform float uColorWeight;
-`#endif //VERTEX_COLOR_BLEND')
-
-define(`VERTEX_SHADER_POSITION',
-`#ifdef VERTEX_POSITION_BLEND'
- vec4 position = mix(aPosition1, aPosition0, uPositionWeight);
- position = vec4(position.xyz, 1.0);
-`#else'
-
-`#ifdef VERTEX_POSITION'
- vec4 position = vec4(aPosition0.xyz, 1.0);
-`#endif // VERTEX_POSITION'
-
-`#endif //VERTEX_POSITION_BLEND')
-
-define(`VERTEX_SHADER_NORMAL',
-`#ifdef VERTEX_NORMAL_BLEND'
- vec3 normal = mix(aNormal1.xyz, aNormal0.xyz, uNormalWeight);
-`#else'
-
-`#ifdef VERTEX_NORMAL'
- vec3 normal = aNormal0.xyz;
-`#endif //VERTEX_NORMAL'
-`#endif //VERTEX_NORMAL_BLEND')
-
-define(`VERTEX_SHADER_TEXCOORD',
-`#ifdef VERTEX_TEXCOORD_BLEND'
- vTexCoord = mix(vec2(aTexCoord1.s, 1.0 - aTexCoord1.t),
- vec2(aTexCoord0.s, 1.0 - aTexCoord0.t), uTexCoordWeight);
-`#else'
-
-`#ifdef VERTEX_TEXCOORD'
- vTexCoord = vec2(aTexCoord0.s, 1.0 - aTexCoord0.t);
-`#endif //VERTEX_TEXCOORD'
-
-`#endif //VERTEX_TEXCOORD_BLEND')
-
-define(`VERTEX_SHADER_SHADOWED',
-`#ifdef SHADOWED'
- vLightPosition = uMatrixLight * position;
-`#endif //SHADOWED')
diff --git a/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd
deleted file mode 100644
index ad2b64f4f8..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd
+++ /dev/null
@@ -1,147 +0,0 @@
-varying vec3 vLightVector;
-varying vec3 vLightHalfVector;
-varying vec3 vEyeVector;
-
-FRAGMENT_SHADER_USE_TEX_COORD
-FRAGMENT_SHADER_USE_FOG
-FRAGMENT_SHADER_USE_SHADOWS
-FRAGMENT_SHADER_USE_TEXTURE(NORMAL, Normal)
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-#ifndef VERTEX_TANGENT
-varying vec3 vNormal;
-#endif //VERTEX_TANGENT
-
-FRAGMENT_SHADER_USE_DIFFUSE_TERM
-FRAGMENT_SHADER_USE_SPECULAR_TERM
-FRAGMENT_SHADER_USE_AMBIENT_TERM
-FRAGMENT_SHADER_USE_EMISSION_TERM
-FRAGMENT_SHADER_USE_LIGHT
-
-#ifndef VERTEX_TANGENT
-
-mat3 cotangent_frame(vec3 n, vec3 p, vec2 uv)
-{
- vec3 dp1 = dFdx(p);
- vec3 dp2 = dFdy(p);
- vec2 duv1 = dFdx(uv);
- vec2 duv2 = dFdy(uv);
- vec3 dp2perp = cross(dp2, n);
- vec3 dp1perp = cross(n, dp1);
- vec3 t = dp2perp * duv1.x + dp1perp * duv2.x;
- vec3 b = dp2perp * duv1.y + dp1perp * duv2.y;
- float invmax = inversesqrt(max(dot(t, t), dot(b, b)));
- return mat3(t * invmax, b * invmax, n);
-}
-
-vec3 perturb_normal(vec3 normal)
-{
- mat3 tbn = cotangent_frame(vNormal, -vEyeVector, vTexCoord);
- return normalize(tbn * normal);
-}
-#endif //VERTEX_TANGENT
-
-vec4 fragmentNormalMap()
-{
- float factor;
- vec3 normal;
- vec4 color;
- vec4 fragcolor;
-
- vec3 Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;
-#ifdef NORMAL_TEXTURE_BLEND
- vec3 Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;
- normal = texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).rgb * uTextureNormalWeight / texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a;
- normal += texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).rgb / texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).a *
- (1.0 - uTextureNormalWeight);
-#else
- normal = texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).rgb / texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a;
-#endif //NORMAL_TEXTURE_BLEND
-
- normal = 2.0 * normal - 1.0;
-
-#ifndef VERTEX_TANGENT
- normal = perturb_normal(normal);
-#endif //VERTEX_TANGENT
-
- vec3 lv = normalize(vLightVector);
- normal = normalize(normal);
-
- factor = dot(lv, normal);
-
-#ifdef LIGHT_SPOT
- float f = dot(-lv, normalize(uLightSpotDir));
-
- if (f > uLightSpotCutoffCos)
- factor *= pow(f, uLightSpotExp);
- else
- factor = 0.0;
-#endif //LIGHT_SPOT
-
- if (factor > 0.0)
- {
-
-#ifdef DIFFUSE
-
- FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
- fragcolor = uLightDiffuse * color * factor;
-
-#else
- fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
-#endif //DIFFUSE
-
-#ifdef SPECULAR
-
- factor = dot(normalize(vLightHalfVector), normal);
- if (factor > 0.0)
- {
- factor = pow(factor, uMaterialShininess);
- FRAGMENT_SHADER_TEXTURE_BLEND(SPECULAR, Specular)
- fragcolor += uLightSpecular * color * factor;
- }
-
-#endif //SPECULAR
-
-#ifdef SHADOWED
- fragcolor *= shadow;
-#endif //SHADOWED
-
- }
- else
- fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
-
-#ifdef AMBIENT
- FRAGMENT_SHADER_TEXTURE_BLEND(AMBIENT, Ambient)
- fragcolor += uLightAmbient * color;
-#endif //AMBIENT
-
-#ifdef LIGHT_ATTENUATION
- fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * vLightDist));
-#endif //LIGHT_ATTENUATION
-
-#ifdef EMISSION
-
- FRAGMENT_SHADER_TEXTURE_BLEND(EMISSION, Emission)
- fragcolor += color;
-
-#endif //EMISSION
- return fragcolor;
-}
-
-void main() {
- vec4 color;
-#ifdef SHADOWED
- shadow = pcf(vLightPosition);
-#endif //SHADOWED
-
- color = fragmentNormalMap();
-#ifdef ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
-#else
- gl_FragColor = color;
-#endif //ALPHA_TEST_ENABLED
-
-FRAGMENT_SHADER_FOG_APPLY
-
-}
-
diff --git a/src/modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd
deleted file mode 100644
index 0c9e557390..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd
+++ /dev/null
@@ -1,128 +0,0 @@
-uniform mat4 uMatrixMvp;
-uniform mat3 uMatrixNormal;
-uniform mat4 uMatrixModelview;
-uniform vec4 uLightPosition;
-varying vec3 vLightVector;
-varying vec3 vLightHalfVector;
-varying vec3 vEyeVector;
-
-#ifndef VERTEX_TANGENT
-varying vec3 vNormal;
-#endif //VERTEX_TANGENT
-
-VERTEX_SHADER_USE_SHADOWS
-VERTEX_SHADER_USE_POSITION
-VERTEX_SHADER_USE_NORMALS
-
-#ifdef VERTEX_TANGENT
-attribute vec4 aTangent0;
-#endif //VERTEX_TANGENT
-
-#ifdef VERTEX_TANGENT_BLEND
-attribute vec4 aTangent1;
-uniform float uTangentWeight;
-#endif //VERTEX_TANGENT_BLEND
-
-VERTEX_SHADER_USE_TEXCOORD
-VERTEX_SHADER_NEED_TEX_COORD
-VERTEX_SHADER_USE_LIGHT_ATTENUATION
-
-#ifndef VERTEX_TANGENT
-void vertexNormalMap(vec4 position, vec3 normal)
-{
- normal = uMatrixNormal * normal;
- position = uMatrixModelview * position;
- vEyeVector = normalize(-position.xyz);
-
-#ifdef NORMALIZE_NORMALS
- normal = normalize(normal);
-#endif //NORMALIZE_NORMALS
-
-#ifdef LIGHT_DIRECTIONAL
- vLightVector = uLightPosition.xyz;
-#else
- vLightVector = uLightPosition.xyz - position.xyz;
-
-#ifdef LIGHT_ATTENUATION
- vLightDist = length(vLightVector);
-#endif //LIGHT_ATTENUATION
-
- vLightVector = normalize(vLightVector);
-#endif //LIGHT_DIRECTIONAL
-
- vLightHalfVector = normalize(vEyeVector + vLightVector);
- vNormal = normal;
-}
-
-#else
-
-void vertexNormalMap(vec4 position, vec3 normal, vec3 tangent)
-{
- vec3 n = normalize(uMatrixNormal * normal);
- vec3 t = normalize(uMatrixNormal * tangent);
- vec3 b = cross(n, t);
- vec3 tmp;
-
- position = uMatrixModelview * position;
-
-#ifdef LIGHT_DIRECTIONAL
- vec3 lightDir = uLightPosition.xyz;
-#else
- vec3 lightDir = uLightPosition.xyz - position.xyz;
-
-#ifdef LIGHT_ATTENUATION
- vLightDist = length(lightDir);
-#endif //LIGHT_ATTENUATION
-
- lightDir = normalize(lightDir);
-#endif //LIGHT_DIRECTIONAL
-
- tmp.x = dot(lightDir, t);
- tmp.y = dot(lightDir, b);
- tmp.z = dot(lightDir, n);
- vLightVector = tmp;
-
- tmp.x = dot(position.xyz, t);
- tmp.y = dot(position.xyz, b);
- tmp.z = dot(position.xyz, n);
- vEyeVector = normalize(tmp);
-
- vec3 hv = normalize(normalize(-position.xyz) + lightDir);
- tmp.x = dot(hv, t);
- tmp.y = dot(hv, b);
- tmp.z = dot(hv, n);
- vLightHalfVector = tmp;
-}
-#endif //VERTEX_TANGENT
-
-void main()
-{
-
- VERTEX_SHADER_POSITION
- VERTEX_SHADER_NORMAL
-
-#ifdef VERTEX_TANGENT_BLEND
- vec3 tangent = aTangent0.xyz * uTangentWeight +
- aTangent1.xyz * (1.0 - uTangentWeight);
-#else
-
-#ifdef VERTEX_TANGENT
- vec3 tangent = aTangent0.xyz;
-#endif //VERTEX_TANGENT
-
-#endif //VERTEX_TANGENT_BLEND
-
- VERTEX_SHADER_TEXCOORD
-
- gl_Position = uMatrixMvp * position;
-
-#ifdef VERTEX_TANGENT
- vertexNormalMap(position, normal, tangent);
-#else
- vertexNormalMap(position, normal);
-#endif //VERTEX_TANGENT
-
-#ifdef SHADOWED
- vLightPosition = uMatrixLight * position;
-#endif
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd
deleted file mode 100644
index aedafe4bdd..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd
+++ /dev/null
@@ -1,240 +0,0 @@
-varying vec3 vLightVector;
-varying vec3 vLightHalfVector;
-varying vec3 vEyeVector;
-uniform sampler2D uTextureNormal0;
-uniform mat3 uTextureMatrixTransformNormal0;
-
-#ifdef NEED_TEX_COORD
-varying vec2 vTexCoord;
-vec3 Tex0CoordNormal;
-#endif //TEX_COORD
-
-#ifdef NORMAL_TEXTURE_BLEND
-uniform sampler2D uTextureNormal1;
-uniform float uTextureNormalWeight;
-uniform mat3 uTextureMatrixTransformNormal1;
-vec3 Tex1CoordNormal;
-#endif //NORMAL_TEXTURE_BLEND
-
-FRAGMENT_SHADER_USE_FOG
-FRAGMENT_SHADER_USE_SHADOWS
-FRAGMENT_SHADER_USE_DIFFUSE_TERM
-FRAGMENT_SHADER_USE_SPECULAR_TERM
-FRAGMENT_SHADER_USE_AMBIENT_TERM
-FRAGMENT_SHADER_USE_EMISSION_TERM
-FRAGMENT_SHADER_USE_LIGHT
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-const float parallaxScale = 0.2;
-
-vec2 parallaxMapping(in vec3 view, in vec2 tex, out float parallaxHeight)
-{
- const float numLayers = 15.0;
- vec2 texStep = parallaxScale * view.xy / view.z / numLayers;
-
- float layerHeight = 1.0 / numLayers;
- float curLayerHeight = 0.0;
- vec2 dtex = parallaxScale * view.xy / view.z / numLayers;
-
- vec2 currentTextureCoords = tex;
-
-#ifdef NORMAL_TEXTURE_BLEND
- float heightFromTexture = (1.0 - texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a) * uTextureNormalWeight;
- heightFromTexture += (1.0 - texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).a) *
- (1.0 - uTextureNormalWeight);
-#else
- float heightFromTexture = 1.0 - texture2D(uTextureNormal0, currentTextureCoords).a;
-#endif //NORMAL_TEXTURE_BLEND
-
- while(heightFromTexture > curLayerHeight)
- {
- curLayerHeight += layerHeight;
- currentTextureCoords -= dtex;
-
-#ifdef NORMAL_TEXTURE_BLEND
- heightFromTexture = (1.0 - texture2D(uTextureNormal0, currentTextureCoords).a) * uTextureNormalWeight;
- heightFromTexture += (1.0 - texture2D(uTextureNormal1, currentTextureCoords).a) *
- (1.0 - uTextureNormalWeight);
-#else
- heightFromTexture = 1.0 - texture2D(uTextureNormal0, currentTextureCoords).a;
-#endif //NORMAL_TEXTURE_BLEND
- }
-
- vec2 prevTCoords = currentTextureCoords + texStep;
- float nextH = heightFromTexture - curLayerHeight;
-
-#ifdef NORMAL_TEXTURE_BLEND
- float prevH = (1.0 - texture2D(uTextureNormal0, prevTCoords).a
- - curLayerHeight + layerHeight) * uTextureNormalWeight;
- prevH += (1.0 - texture2D(uTextureNormal1, prevTCoords).a
- - curLayerHeight + layerHeight) * (1.0 - uTextureNormalWeight);
-#else
- float prevH = 1.0 - texture2D(uTextureNormal0, prevTCoords).a
- - curLayerHeight + layerHeight;
-#endif //NORMAL_TEXTURE_BLEND
-
- float weight = nextH / (nextH - prevH);
- vec2 finalTexCoords = prevTCoords * weight + currentTextureCoords * (1.0-weight);
- parallaxHeight = curLayerHeight + prevH * weight + nextH * (1.0 - weight);
-
- return finalTexCoords;
-}
-
-vec4 fragmentParallaxMap()
-{
- float factor;
- vec3 normal;
- vec4 color;
- vec4 fragcolor;
- float parallaxHeight;
- vec2 tex = parallaxMapping(vEyeVector, vec2(Tex0CoordNormal), parallaxHeight);
-
- vec3 lv = normalize(vLightVector);
-
-#ifdef NORMAL_TEXTURE_BLEND
- normal = texture2D(uTextureNormal0, tex).rgb * uTextureNormalWeight / texture2D(uTextureNormal0, tex).a;
- normal += texture2D(uTextureNormal1, tex).rgb *
- (1.0 - uTextureNormalWeight) / texture2D(uTextureNormal1, tex).a;
-#else
- normal = texture2D(uTextureNormal0, tex).rgb / texture2D(uTextureNormal0, tex).a;
-#endif //NORMAL_TEXTURE_BLEND
-
- normal = 2.0 * normal - 1.0;
-
- normal = normalize(normal);
-
- factor = dot(lv, normal);
-
-#ifdef LIGHT_SPOT
- float f = dot(-lv, normalize(uLightSpotDir));
-
- if (f > uLightSpotCutoffCos)
- factor *= pow(f, uLightSpotExp);
- else
- factor = 0.0;
-#endif //LIGHT_SPOT
-
- if (factor > 0.0)
- {
-
-#ifdef DIFFUSE
-
-#ifdef DIFFUSE_TEXTURE_BLEND
- color = texture2D(uTextureDiffuse0, tex) * uTextureDiffuseWeight +
- texture2D(uTextureDiffuse1, tex) * (1.0 - uTextureDiffuseWeight);
-#else
-
-#ifdef DIFFUSE_TEXTURE
- color = texture2D(uTextureDiffuse0, tex);
-#else
- color = uMaterialDiffuse;
-#endif //DIFFUSE_TEXTURE
-
-#endif //DIFFUSE_TEXTURE_BLEND
-
- fragcolor = uLightDiffuse * color * factor;
-
-#else
- fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
-#endif //DIFFUSE
-
-#ifdef SPECULAR
-
- factor = dot(normalize(vLightHalfVector), normal);
- if (factor > 0.0)
- {
- factor = pow(factor, uMaterialShininess);
-
-#ifdef SPECULAR_TEXTURE_BLEND
- color = texture2D(uTextureSpecular0, tex) * uTextureSpecularWeight +
- texture2D(uTextureSpecular1, tex) * (1.0 - uTextureSpecularWeight);
-#else
-#ifdef SPECULAR_TEXTURE
- color = texture2D(uTextureSpecular0, tex);
-#else
- color = uMaterialSpecular;
-#endif //SPECULAR_TEXTURE
-
-#endif //SPECULAR_TEXTURE_BLEND
-
- fragcolor += uLightSpecular * color * factor;
- }
-
-#endif //SPECULAR
-
-#ifdef SHADOWED
- fragcolor *= shadow;
-#endif //SHADOWED
-
- }
- else
- fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
-
-#ifdef AMBIENT
-#ifdef AMBIENT_TEXTURE_BLEND
- color = texture2D(uTextureAmbient0, tex) * uTextureAmbientWeight +
- texture2D(uTextureAmbient1, tex) * (1.0 - uTextureAmbientWeight);
-#else
-
-#ifdef AMBIENT_TEXTURE
- color = texture2D(uTextureAmbient0, tex);
-#else
- color = uMaterialAmbient;
-#endif //AMBIENT_TEXTURE
-
-#endif //AMBIENT_TEXTURE_BLEND
-
- fragcolor += uLightAmbient * color;
-#endif //AMBIENT
-
-#ifdef LIGHT_ATTENUATION
- fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * vLightDist));
-#endif //LIGHT_ATTENUATION
-
-#ifdef EMISSION
-
-#ifdef EMISSION_TEXTURE_BLEND
- color = texture2D(uTextureEmission0, tex) * uTextureEmissionWeight +
- texture2D(uTextureEmission1, tex) * (1.0 - uTextureEmissionWeight);
-#else
-
-#ifdef EMISSION_TEXTURE
- color = texture2D(uTextureEmission0, tex);
-#else
- color = uMaterialEmission;
-#endif //EMISSION_TEXTURE
-
-#endif //EMISSION_TEXTURE_BLEND
-
- fragcolor += color;
-#endif //EMISSION
- return fragcolor;
-}
-
-void main() {
- vec4 color;
-
-#ifdef NEED_TEX_COORD
- Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;
-#endif // NEED_TEX_COORD
-
-#ifdef NORMAL_TEXTURE_BLEND
- Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;
-#endif //NORMAL_TEXTURE_BLEND
-
-#ifdef SHADOWED
- shadow = pcf(vLightPosition);
-#endif //SHADOWED
-
- color = fragmentParallaxMap();
-
-#ifdef ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
-#else
- gl_FragColor = color;
-#endif //ALPHA_TEST_ENABLED
-
- FRAGMENT_SHADER_FOG_APPLY
-
-}
-
diff --git a/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_vert.shd
deleted file mode 100644
index dff4ff75d4..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_vert.shd
+++ /dev/null
@@ -1,88 +0,0 @@
-uniform mat4 uMatrixMvp;
-uniform mat3 uMatrixNormal;
-uniform mat4 uMatrixModelview;
-uniform vec4 uLightPosition;
-varying vec3 vLightVector;
-varying vec3 vLightHalfVector;
-varying vec3 vEyeVector;
-
-VERTEX_SHADER_USE_SHADOWS
-VERTEX_SHADER_USE_POSITION
-VERTEX_SHADER_USE_NORMALS
-
-#ifdef VERTEX_TANGENT
-attribute vec4 aTangent0;
-#endif //VERTEX_TANGENT
-
-#ifdef VERTEX_TANGENT_BLEND
-attribute vec4 aTangent1;
-uniform float uTangentWeight;
-#endif //VERTEX_TANGENT_BLEND
-
-VERTEX_SHADER_USE_TEXCOORD
-VERTEX_SHADER_NEED_TEX_COORD
-VERTEX_SHADER_USE_LIGHT_ATTENUATION
-
-void vertexParallaxOcclusion(vec4 position, vec3 normal, vec3 tangent)
-{
- vec3 n = normalize(uMatrixNormal * normal);
- vec3 t = normalize(uMatrixNormal * tangent);
- vec3 b = cross(n, t);
- vec3 tmp;
-
- position = uMatrixModelview * position;
-
-#ifdef LIGHT_DIRECTIONAL
- vec3 lightDir = uLightPosition.xyz;
-#else
- vec3 lightDir = uLightPosition.xyz - position.xyz;
-
-#ifdef LIGHT_ATTENUATION
- vLightDist = length(lightDir);
-#endif //LIGHT_ATTENUATION
-
- lightDir = normalize(lightDir);
-#endif //LIGHT_DIRECTIONAL
-
- tmp.x = dot(lightDir, t);
- tmp.y = dot(lightDir, b);
- tmp.z = dot(lightDir, n);
- vLightVector = tmp;
-
- tmp.x = dot(position.xyz, t);
- tmp.y = dot(position.xyz, b);
- tmp.z = dot(position.xyz, n);
- vEyeVector = normalize(tmp);
-
- vec3 hv = normalize(normalize(-position.xyz) + lightDir);
- tmp.x = dot(hv, t);
- tmp.y = dot(hv, b);
- tmp.z = dot(hv, n);
- vLightHalfVector = tmp;
-}
-
-void main()
-{
-
- VERTEX_SHADER_POSITION
- VERTEX_SHADER_NORMAL
-
-#ifdef VERTEX_TANGENT_BLEND
- vec3 tangent = aTangent0.xyz * uTangentWeight +
- aTangent1.xyz * (1.0 - uTangentWeight);
-#else
-
-#ifdef VERTEX_TANGENT
- vec3 tangent = aTangent0.xyz;
-#endif //VERTEX_TANGENT
-
-#endif //VERTEX_TANGENT_BLEND
-
- VERTEX_SHADER_TEXCOORD
-
- gl_Position = uMatrixMvp * position;
-
- vertexParallaxOcclusion(position, normal, tangent);
-
- VERTEX_SHADER_SHADOWED
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd
deleted file mode 100644
index 78a867b96a..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd
+++ /dev/null
@@ -1,103 +0,0 @@
-varying vec3 vLightVector;
-varying vec3 vLightHalfVector;
-varying vec3 vNormal;
-
-FRAGMENT_SHADER_USE_TEX_COORD
-FRAGMENT_SHADER_USE_FOG
-FRAGMENT_SHADER_USE_SHADOWS
-FRAGMENT_SHADER_USE_DIFFUSE_TERM
-FRAGMENT_SHADER_USE_SPECULAR_TERM
-FRAGMENT_SHADER_USE_AMBIENT_TERM
-FRAGMENT_SHADER_USE_EMISSION_TERM
-FRAGMENT_SHADER_USE_LIGHT
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-vec4 fragmentPhong()
-{
- vec3 normal = normalize(vNormal);
- vec3 lv = normalize(vLightVector);
- float factor = dot(lv, normal);
- vec4 color;
- vec4 fragcolor;
-
-#ifdef LIGHT_SPOT
- float f = dot(-lv, normalize(uLightSpotDir));
-
- if (f > uLightSpotCutoffCos)
- factor *= pow(f, uLightSpotExp);
- else
- factor = 0.0;
-#endif //LIGHT_SPOT
-
- if (factor > 0.0)
- {
-
- /* Diffuse term. */
-#ifdef DIFFUSE
-
- FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
-
- fragcolor = uLightDiffuse * color * factor;
-#else
- fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
-#endif //DIFFUSE
-
- /* Specular term. */
-#ifdef SPECULAR
- factor = dot(normalize(vLightHalfVector), normal);
- if (factor > 0.0)
- {
- factor = pow(factor, uMaterialShininess);
-
- FRAGMENT_SHADER_TEXTURE_BLEND(SPECULAR, Specular)
-
- fragcolor += uLightSpecular * color * factor;
- }
-#endif
-
- }
- else
- fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
-
-#ifdef SHADOWED
- fragcolor *= shadow;
-#endif //SHADOWED
-
-#ifdef AMBIENT
- FRAGMENT_SHADER_TEXTURE_BLEND(AMBIENT, Ambient)
-
- fragcolor += uLightAmbient * color;
-#endif
-
- /* Light attenuation. */
-#ifdef LIGHT_ATTENUATION
- fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * vLightDist));
-#endif
-
- /* Emission term. */
-#ifdef EMISSION
-
- FRAGMENT_SHADER_TEXTURE_BLEND(EMISSION, Emission)
- fragcolor += color;
-#endif
- return fragcolor;
-}
-
-void main()
-{
- vec4 color;
-#ifdef SHADOWED
- shadow = pcf(vLightPosition);
-#endif //SHADOWED
-
- color = fragmentPhong();
-
-#ifdef ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
-#else
- gl_FragColor = color;
-#endif //ALPHA_TEST_ENABLED
-
- FRAGMENT_SHADER_FOG_APPLY
-}
-
diff --git a/src/modules/evas/engines/gl_common/shader_3d/phong_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/phong_vert.shd
deleted file mode 100644
index ee9eed9c47..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/phong_vert.shd
+++ /dev/null
@@ -1,51 +0,0 @@
-uniform mat4 uMatrixMvp;
-uniform mat3 uMatrixNormal;
-uniform mat4 uMatrixModelview;
-uniform vec4 uLightPosition;
-varying vec3 vLightVector;
-varying vec3 vLightHalfVector;
-varying vec3 vNormal;
-
-VERTEX_SHADER_USE_SHADOWS
-VERTEX_SHADER_USE_POSITION
-VERTEX_SHADER_USE_NORMALS
-VERTEX_SHADER_USE_TEXCOORD
-VERTEX_SHADER_NEED_TEX_COORD
-VERTEX_SHADER_USE_LIGHT_ATTENUATION
-
-void vertexPhong(vec4 position, vec3 normal)
-{
- normal = uMatrixNormal * normal;
- position = uMatrixModelview * position;
-
-#ifdef NORMALIZE_NORMALS
- normal = normalize(normal);
-#endif //NORMALIZE_NORMALS
-
-#ifdef LIGHT_DIRECTIONAL
- vLightVector = uLightPosition.xyz;
-#else
- vLightVector = uLightPosition.xyz - position.xyz;
-
-#ifdef LIGHT_ATTENUATION
- vLightDist = length(vLightVector);
-#endif //LIGHT_ATTENUATION
-
- vLightVector = normalize(vLightVector);
-#endif //LIGHT_DIRECTIONAL
-
- vLightHalfVector = normalize(normalize(-position.xyz) + vLightVector);
- vNormal = normal;
-}
-
-void main() {
-
- VERTEX_SHADER_POSITION
- VERTEX_SHADER_NORMAL
- VERTEX_SHADER_TEXCOORD
-
- gl_Position = uMatrixMvp * position;
- vertexPhong(position, normal);
-
- VERTEX_SHADER_SHADOWED
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_frag.shd
deleted file mode 100644
index b78a09177b..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_frag.shd
+++ /dev/null
@@ -1,63 +0,0 @@
-//FXAA fragment shader by Timothy Lottes
-//http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
-//modified and adapted to www.enlightenment.org by Oleksander Shcherbina
-uniform sampler2D uColorTexture;
-uniform float uFrameSizeH;
-uniform float uFrameSizeW;
-varying vec2 tc0;
-
-vec4 fxaa()
-{
- float _SPAN_MAX_ = 8.0;
- float _REDUCE_MUL_ = (1.0/8.0);
- float _REDUCE_MIN_ = (1.0/128.0);
- vec4 l = vec4(0.299, 0.587, 0.114, 0.0);
- vec2 frameBufSize = vec2(uFrameSizeW, uFrameSizeH);
- vec2 direction;
-
- vec4 colorNW = texture2D(uColorTexture, tc0 + (vec2(-1.0, -1.0)/frameBufSize));
- vec4 colorNE = texture2D(uColorTexture, tc0 + (vec2(1.0, -1.0)/frameBufSize));
- vec4 colorSW = texture2D(uColorTexture, tc0 + (vec2(-1.0, 1.0)/frameBufSize));
- vec4 colorSE = texture2D(uColorTexture, tc0 + (vec2(1.0, 1.0)/frameBufSize));
- vec4 colorM = texture2D(uColorTexture,tc0);
-
- float lNW = dot(colorNW, l);
- float lNE = dot(colorNE, l);
- float lSW = dot(colorSW, l);
- float lSE = dot(colorSE, l);
- float lM = dot(colorM, l);
-
- float lMin = min(lM, min(min(lNW, lNE), min(lSW, lSE)));
- float lMax = max(lM, max(max(lNW, lNE), max(lSW, lSE)));
-
- direction.x = -((lNW + lNE) - (lSW + lSE));
- direction.y = ((lNW + lSW) - (lNE + lSE));
-
- float directionReduce = max(
- (lNW + lNE + lSW + lSE) * (0.25 * _REDUCE_MUL_),
- _REDUCE_MIN_);
-
- float rcpDirMin = 1.0/(min(abs(direction.x), abs(direction.y)) + directionReduce);
-
- direction = min(vec2(_SPAN_MAX_, _SPAN_MAX_),
- max(vec2(-_SPAN_MAX_, -_SPAN_MAX_),
- direction * rcpDirMin)) / frameBufSize;
-
- vec4 colorA = 0.5 * (
- texture2D(uColorTexture, tc0.xy + direction * (1.0/3.0 - 0.5)) +
- texture2D(uColorTexture, tc0.xy + direction * (2.0/3.0 - 0.5)));
- vec4 colorB = colorA * 0.5 + 0.25 * (
- texture2D(uColorTexture, tc0.xy + direction * (- 0.5)) +
- texture2D(uColorTexture, tc0.xy + direction * 0.5));
- float lB = dot(colorB, l);
-
- if((lB < lMin) || (lB > lMax))
- return colorA;
- else
- return colorB;
-}
-
-void main()
-{
- gl_FragColor = fxaa();
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_vert.shd
deleted file mode 100644
index 8464fdcc82..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/post_processing_fxaa_vert.shd
+++ /dev/null
@@ -1,12 +0,0 @@
-uniform mat4 uMatrixMvp;
-
-VERTEX_SHADER_USE_POSITION
-
-varying vec2 tc0;
-void main()
-{
- VERTEX_SHADER_POSITION
-
- gl_Position = uMatrixMvp * position;
- tc0 = position.xy * 0.5 + 0.5;
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd
deleted file mode 100644
index a66f47acf8..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd
+++ /dev/null
@@ -1,60 +0,0 @@
-varying vec4 shadowmapposition;
-#ifdef ALPHA_TEST_ENABLED
-FRAGMENT_SHADER_USE_TEX_COORD
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-#ifdef DIFFUSE
-
-#ifdef DIFFUSE_TEXTURE
-uniform sampler2D uTextureDiffuse0;
-uniform mat3 uTextureMatrixTransformDiffuse0;
-#endif //DIFFUSE_TEXTURE
-
-#ifdef DIFFUSE_TEXTURE_BLEND
-uniform sampler2D uTextureDiffuse1;
-uniform float uTextureDiffuseWeight;
-uniform mat3 uTextureMatrixTransformDiffuse1;
-#endif //DIFFUSE_TEXTURE_BLEND
-
-#endif //DIFFUSE
-
-#endif //ALPHA_TEST_ENABLED
-
-void main() {
-
- vec4 color;
-#ifndef NEED_TEX_COORD
- gl_FragColor = vec4(1);
-#endif
-
-#ifdef ALPHA_TEST_ENABLED
-
-#ifdef DIFFUSE_TEXTURE_BLEND
- vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;
- color = (texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) *
- uTextureDiffuseWeight + texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)) *
- (1.0 - uTextureDiffuseWeight));
-#else
-
-#ifdef DIFFUSE_TEXTURE
- vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;
- color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse));
-#else
- color = vec4(1);
-#endif //DIFFUSE_TEXTURE
-
-#endif //DIFFUSE_TEXTURE_BLEND
-
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
-
-#endif //ALPHA_TEST_ENABLED
-
- const vec4 pack = vec4(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0);
- const vec4 mask = vec4(0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);
- vec4 depthcolor;
- float normdist = shadowmapposition.z / shadowmapposition.w;
- normdist = ((normdist + 1.0) / 2.0);
- depthcolor = vec4(fract(pack * normdist));
- depthcolor -= depthcolor.xxyz * mask;
- gl_FragColor = depthcolor;
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd
deleted file mode 100644
index 66ce4f3d62..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd
+++ /dev/null
@@ -1,21 +0,0 @@
-uniform mat4 uMatrixMvp;
-varying vec4 shadowmapposition;
-VERTEX_SHADER_USE_POSITION
-
-#ifdef ALPHA_TEST_ENABLED
-VERTEX_SHADER_USE_TEXCOORD
-VERTEX_SHADER_NEED_TEX_COORD
-#endif //ALPHA_TEST_ENABLED
-
-void main()
-{
-
-VERTEX_SHADER_POSITION
-
-#ifdef ALPHA_TEST_ENABLED
- VERTEX_SHADER_TEXCOORD
-#endif //ALPHA_TEST_ENABLED
-
- gl_Position = uMatrixMvp * position;
- shadowmapposition = gl_Position;
-}
diff --git a/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd
deleted file mode 100644
index 1b85057b66..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd
+++ /dev/null
@@ -1,17 +0,0 @@
-varying vec4 vColor;
-
-FRAGMENT_SHADER_USE_FOG
-FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
-
-void main()
-{
-
-#ifdef ALPHA_TEST_ENABLED
- FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(vColor)
-#else
- gl_FragColor = vColor;
-#endif //ALPHA_TEST_ENABLED
-
- FRAGMENT_SHADER_FOG_APPLY
-}
-
diff --git a/src/modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd b/src/modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd
deleted file mode 100644
index 6daeacfc1f..0000000000
--- a/src/modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd
+++ /dev/null
@@ -1,24 +0,0 @@
-uniform mat4 uMatrixMvp;
-varying vec4 vColor;
-
-VERTEX_SHADER_USE_POSITION
-VERTEX_SHADER_USE_COLOR
-
-void main()
-{
- VERTEX_SHADER_POSITION
-
-#ifdef VERTEX_COLOR_BLEND
- vec4 color = aColor0 * uColorWeight + aColor1 * (1.0 - uColorWeight);
-#else
-
-#ifdef VERTEX_COLOR
- vec4 color = aColor0;
-#endif //VERTEX_COLOR
-
-#endif //VERTEX_COLOR_BLEND
-
- vColor = color;
- gl_Position = uMatrixMvp * position;
-}
-
diff --git a/src/modules/evas/engines/gl_drm/evas_engine.c b/src/modules/evas/engines/gl_drm/evas_engine.c
index a5b4c7a4c8..c1e1c34217 100644
--- a/src/modules/evas/engines/gl_drm/evas_engine.c
+++ b/src/modules/evas/engines/gl_drm/evas_engine.c
@@ -3,8 +3,6 @@
#include "../gl_common/evas_gl_define.h"
#include "../software_generic/evas_native_common.h"
-#include <wayland-client.h>
-
#ifdef HAVE_DLSYM
# include <dlfcn.h> /* dlopen,dlclose,etc */
#else
@@ -23,7 +21,7 @@
# define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1)
#endif
-#ifdef EGL_DMA_BUF_PLANE3_FD_EXT
+#ifndef EGL_DMA_BUF_PLANE3_FD_EXT
# define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440
#endif
#ifndef EGL_DMA_BUF_PLANE3_OFFSET_EXT
@@ -1461,7 +1459,7 @@ eng_image_native_set(void *engine, void *image, void *native)
if (!n->ns_data.wl_surface.surface)
{
- ERR("eglCreatePixmapSurface() for %p failed", wl_buf);
+ WRN("eglCreatePixmapSurface() for %p failed", wl_buf);
eina_hash_del(ob->gl_context->shared->native_wl_hash,
&wlid, img);
glsym_evas_gl_common_image_free(img);
diff --git a/src/modules/evas/engines/gl_drm/evas_engine.h b/src/modules/evas/engines/gl_drm/evas_engine.h
index 705d565d4f..9530cde17c 100644
--- a/src/modules/evas/engines/gl_drm/evas_engine.h
+++ b/src/modules/evas/engines/gl_drm/evas_engine.h
@@ -98,7 +98,7 @@ struct _Outbuf
struct gbm_surface *surface;
- struct
+ struct
{
EGLContext context;
EGLSurface surface;
@@ -106,7 +106,7 @@ struct _Outbuf
EGLDisplay disp;
} egl;
- struct
+ struct
{
Ecore_Drm2_Output *output;
Ecore_Drm2_Plane *plane;
diff --git a/src/modules/evas/engines/gl_drm/meson.build b/src/modules/evas/engines/gl_drm/meson.build
index 8acf82365d..b21c00edb5 100644
--- a/src/modules/evas/engines/gl_drm/meson.build
+++ b/src/modules/evas/engines/gl_drm/meson.build
@@ -5,11 +5,11 @@ engine_src = files([
'evas_outbuf.c',
])
-engine_deps = [ecore_drm2, libdrm, gl_deps, dependency('gbm')]
+engine_deps += [ecore_drm2, libdrm, gl_deps, dependency('gbm')]
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h b/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h
index 56a0cf3cad..d48b82199b 100644
--- a/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h
+++ b/src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h
@@ -44,7 +44,6 @@ struct _Render_Output_GL_Generic
Window_GL_Context_Use window_gl_context_use;
Context_3D *context_3d;
- E3D_Renderer *renderer_3d;
const EVGL_Interface *evgl_funcs;
};
@@ -95,7 +94,6 @@ evas_render_engine_gl_generic_init(Render_Engine_Software_Generic *engine,
re->window_gl_context_use = window_gl_context_use;
re->context_3d = NULL;
- re->renderer_3d = NULL;
re->evgl_funcs = evgl_funcs;
evas_render_engine_software_generic_tile_strict_set(&re->software, EINA_TRUE);
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c
index 045323b680..021e798169 100644
--- a/src/modules/evas/engines/gl_generic/evas_engine.c
+++ b/src/modules/evas/engines/gl_generic/evas_engine.c
@@ -167,8 +167,7 @@ eng_engine_free(void *engine)
Render_Engine_GL_Generic *e = engine;
Render_Output_GL_Generic *output;
- //@FIXME this causes some deadlock while freeing the engine image.
- //generic_cache_destroy(e->software.surface_cache);
+ generic_cache_destroy(e->software.surface_cache);
EINA_LIST_FREE(e->software.outputs, output)
ERR("Output %p not properly cleaned before engine destruction.", output);
@@ -308,7 +307,7 @@ eng_image_data_direct_get(void *engine EINA_UNUSED, void *image, int plane,
if (!slice || !im) return ret;
- /* If content hint is DYNAMIC, the im->im could be NULL. If the im->im does
+ /* If content hint is DYNAMIC, the im->im could be NULL. If the im->im does
not exist, eng_image_data_direct_get needs to return copied dyn.data to
make functions including efl_file_save work. */
if ((im->content_hint == EVAS_IMAGE_CONTENT_HINT_DYNAMIC) &&
@@ -614,6 +613,16 @@ eng_image_native_get(void *engine EINA_UNUSED, void *image)
}
static void *
+eng_image_load(void *engine, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
+{
+ Evas_Engine_GL_Context *gl_context;
+
+ *error = EVAS_LOAD_ERROR_NONE;
+ gl_context = gl_generic_context_find(engine, 1);
+ return evas_gl_common_image_load(gl_context, file, key, lo, error);
+}
+
+static void *
eng_image_mmap(void *engine, Eina_File *f, const char *key, int *error, Evas_Image_Load_Opts *lo)
{
Evas_Engine_GL_Context *gl_context;
@@ -932,6 +941,7 @@ eng_image_data_get(void *engine, void *image, int to_write, DATA32 **image_data,
eng_gl_surface_unlock(engine, im);
if (!ok)
{
+ evas_gl_common_image_free(im_new);
if (err) *err = EVAS_LOAD_ERROR_GENERIC;
ERR("ReadPixels failed.");
return NULL;
@@ -1157,7 +1167,6 @@ eng_image_orient_set(void *engine, void *image, Evas_Image_Orient orient)
{
im_new->tex = im->tex;
im_new->tex->references++;
- im_new->tex->pt->references++;
}
evas_gl_common_image_free(im);
@@ -1308,13 +1317,13 @@ eng_image_map_draw(void *engine EINA_UNUSED, void *data, void *context, void *su
evas_gl_common_context_target_surface_set(gl_context, surface);
gl_context->dc = context;
- if (!gl_context->msaa &&
- (m->pts[0].x == m->pts[3].x) &&
- (m->pts[1].x == m->pts[2].x) &&
- (m->pts[0].y == m->pts[1].y) &&
- (m->pts[3].y == m->pts[2].y) &&
- (m->pts[0].x <= m->pts[1].x) &&
- (m->pts[0].y <= m->pts[2].y) &&
+ if (!((RGBA_Draw_Context*) context)->anti_alias &&
+ fabsf(m->pts[0].fx - m->pts[3].fx) < FLT_EPSILON &&
+ fabsf(m->pts[1].fx - m->pts[2].fx) < FLT_EPSILON &&
+ fabsf(m->pts[0].fy - m->pts[1].fy) < FLT_EPSILON &&
+ fabsf(m->pts[3].fy - m->pts[2].fy) < FLT_EPSILON &&
+ (m->pts[0].fx <= m->pts[1].fx) &&
+ (m->pts[0].fy <= m->pts[2].fy) &&
(m->pts[0].u == 0) &&
(m->pts[0].v == 0) &&
(m->pts[1].u == (gim->w << FP)) &&
@@ -1896,6 +1905,18 @@ eng_gl_surface_read_pixels(void *engine EINA_UNUSED, void *surface,
{
glReadPixels(x, y, w, h, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
done = (glGetError() == GL_NO_ERROR);
+#ifdef WORDS_BIGENDIAN
+ if (done)
+ {
+ DATA32 *ptr = pixels;
+ int k;
+ for (k = w * h; k; --k)
+ {
+ const DATA32 v = *ptr;
+ *ptr++ = eina_swap32(v);
+ }
+ }
+#endif
}
if (!done)
@@ -1907,9 +1928,13 @@ eng_gl_surface_read_pixels(void *engine EINA_UNUSED, void *surface,
for (k = w * h; k; --k)
{
const DATA32 v = *ptr;
+#ifdef WORDS_BIGENDIAN
+ *ptr++ = (v << 24) | (v >> 8);
+#else
*ptr++ = (v & 0xFF00FF00)
| ((v & 0x00FF0000) >> 16)
| ((v & 0x000000FF) << 16);
+#endif
}
}
@@ -2147,6 +2172,21 @@ eng_image_animated_frame_set(void *engine EINA_UNUSED, void *image, int frame_in
return EINA_TRUE;
}
+static int
+eng_image_animated_frame_get(void *engine EINA_UNUSED, void *image)
+{
+ Evas_GL_Image *gim = image;
+ Image_Entry *im;
+
+ if (!gim) return EINA_FALSE;
+ im = (Image_Entry *)gim->im;
+ if (!im) return EINA_FALSE;
+
+ if (!im->animated.animated) return EINA_FALSE;
+
+ return im->animated.cur_frame;
+}
+
static Eina_Bool
eng_image_can_region_get(void *engine EINA_UNUSED, void *image)
{
@@ -2159,6 +2199,29 @@ eng_image_can_region_get(void *engine EINA_UNUSED, void *image)
return ((Evas_Image_Load_Func*) im->info.loader)->do_region;
}
+static Eina_Bool
+eng_image_stretch_region_get(void *engine EINA_UNUSED, void *image,
+ uint8_t **horizontal, uint8_t **vertical)
+{
+ Evas_GL_Image *gim = image;
+ RGBA_Image *im;
+
+ if (!gim || !gim->im) return EINA_FALSE;
+
+ im = (RGBA_Image *)gim->im;
+
+ if (!im->cache_entry.need_data) return EINA_FALSE;
+
+ if (!im->image.data) evas_cache_image_load_data(&im->cache_entry);
+
+ if (!im->cache_entry.stretch.horizontal.region ||
+ !im->cache_entry.stretch.vertical.region)
+ return EINA_FALSE;
+
+ *horizontal = im->cache_entry.stretch.horizontal.region;
+ *vertical = im->cache_entry.stretch.vertical.region;
+ return EINA_TRUE;
+}
static void
eng_image_max_size_get(void *engine, int *maxw, int *maxh)
@@ -2352,187 +2415,6 @@ eng_context_dup(void *engine EINA_UNUSED, void *context)
return ctx;
}
-static void
-eng_context_3d_use(void *output)
-{
- Render_Output_GL_Generic *re = output;
-
- if (!re->context_3d)
- re->context_3d = re->window_gl_context_new(re->software.ob);
- if (re->context_3d) re->window_gl_context_use(re->context_3d);
-}
-
-static E3D_Renderer *
-eng_renderer_3d_get(void *output)
-{
- Render_Output_GL_Generic *re = output;
-
- if (!re->renderer_3d)
- re->renderer_3d = e3d_renderer_new();
- return re->renderer_3d;
-}
-
-static void *
-eng_drawable_new(void *engine, int w, int h, int alpha)
-{
- eng_context_3d_use(gl_generic_output_find(engine));
-#ifdef GL_GLES
- return e3d_drawable_new(w, h, alpha, GL_DEPTH_STENCIL_OES, GL_NONE);
-#else
- return e3d_drawable_new(w, h, alpha, GL_DEPTH24_STENCIL8, GL_NONE);
-#endif
-}
-
-static void
-eng_drawable_free(void *engine, void *drawable)
-{
- eng_context_3d_use(gl_generic_output_find(engine));
- e3d_drawable_free(drawable);
-}
-
-static void
-eng_drawable_size_get(void *engine EINA_UNUSED, void *drawable, int *w, int *h)
-{
- e3d_drawable_size_get((E3D_Drawable *)drawable, w, h);
-}
-
-static void *
-eng_image_drawable_set(void *engine, void *image, void *drawable)
-{
- E3D_Drawable *d = drawable;
- Evas_Native_Surface ns;
- int w, h;
-
- ns.type = EVAS_NATIVE_SURFACE_OPENGL;
- ns.data.opengl.texture_id = e3d_drawable_texture_id_get(d);
- ns.data.opengl.framebuffer_id = 0;
- ns.data.opengl.internal_format = e3d_drawable_format_get(d);
- ns.data.opengl.format = e3d_drawable_format_get(d);
- ns.data.opengl.x = 0;
- ns.data.opengl.y = 0;
- e3d_drawable_size_get(d, &w, &h);
- ns.data.opengl.w = w;
- ns.data.opengl.h = h;
-
- return eng_image_native_set(engine, image, &ns);
-}
-
-static void
-eng_drawable_scene_render(void *engine, void *data, void *drawable, void *scene_data)
-{
- Evas_Engine_GL_Context *gl_context;
- E3D_Renderer *renderer = NULL;
-
- gl_context = gl_generic_context_get(data, 1);
- evas_gl_common_context_flush(gl_context);
-
- eng_context_3d_use(gl_generic_output_find(engine));
- renderer = eng_renderer_3d_get(data);
- e3d_drawable_scene_render(drawable, renderer, scene_data);
-}
-
-static int
-eng_drawable_texture_target_id_get(void *drawable)
-{
- return e3d_drawable_texture_id_get((E3D_Drawable *)drawable);
-}
-
-static int
-eng_drawable_texture_color_pick_id_get(void *drawable)
-{
- return e3d_drawable_texture_color_pick_id_get((E3D_Drawable *)drawable);
-}
-
-static void
-eng_drawable_texture_pixel_color_get(GLuint tex EINA_UNUSED, int x, int y,
- Evas_Color *color, void *drawable)
-{
- return e3d_drawable_texture_pixel_color_get(tex, x, y, color, drawable);
-}
-
-static Eina_Bool
-eng_drawable_scene_render_to_texture(void *engine, void *drawable, void *scene_data)
-{
- Evas_Engine_GL_Context *gl_context;
- E3D_Renderer *renderer = NULL;
-
- gl_context = gl_generic_context_get(engine, 1);
- evas_gl_common_context_flush(gl_context);
-
- eng_context_3d_use(gl_generic_output_find(engine));
- renderer = eng_renderer_3d_get(engine);
-
- return e3d_drawable_scene_render_to_texture((E3D_Drawable *)drawable, renderer, scene_data);
-}
-
-static void
-eng_drawable_texture_rendered_pixels_get(GLuint tex EINA_UNUSED, int x, int y,
- int w, int h, void *drawable EINA_UNUSED, void *engine)
-{
- e3d_drawable_texture_rendered_pixels_get(tex, x, y, w, h, drawable, engine);
-}
-static void *
-eng_texture_new(void *engine EINA_UNUSED, Eina_Bool use_atlas)
-{
- return e3d_texture_new(use_atlas);
-}
-
-static void
-eng_texture_free(void *engine EINA_UNUSED, void *texture)
-{
- e3d_texture_free((E3D_Texture *)texture);
-}
-
-static void
-eng_texture_size_get(void *engine EINA_UNUSED, void *texture, int *w, int *h)
-{
- e3d_texture_size_get((E3D_Texture *)texture, w, h);
-}
-
-static void
-eng_texture_wrap_set(void *engine EINA_UNUSED, void *texture,
- Evas_Canvas3D_Wrap_Mode s, Evas_Canvas3D_Wrap_Mode t)
-{
- e3d_texture_wrap_set((E3D_Texture *)texture, s, t);
-}
-
-static void
-eng_texture_wrap_get(void *engine EINA_UNUSED, void *texture,
- Evas_Canvas3D_Wrap_Mode *s, Evas_Canvas3D_Wrap_Mode *t)
-{
- e3d_texture_wrap_get((E3D_Texture *)texture, s, t);
-}
-
-static void
-eng_texture_filter_set(void *engine EINA_UNUSED, void *texture,
- Evas_Canvas3D_Texture_Filter min, Evas_Canvas3D_Texture_Filter mag)
-{
- e3d_texture_filter_set((E3D_Texture *)texture, min, mag);
-}
-
-static void
-eng_texture_filter_get(void *engine EINA_UNUSED, void *texture,
- Evas_Canvas3D_Texture_Filter *min, Evas_Canvas3D_Texture_Filter *mag)
-{
- e3d_texture_filter_get((E3D_Texture *)texture, min, mag);
-}
-
-static void
-eng_texture_image_set(void *engine, void *texture, void *image)
-{
- Evas_Engine_GL_Context *gl_context;
-
- gl_context = gl_generic_context_find(engine, 1);
-
- e3d_texture_set(gl_context, (E3D_Texture *)texture, (Evas_GL_Image *)image);
-}
-
-static void *
-eng_texture_image_get(void *engine EINA_UNUSED, void *texture)
-{
- return e3d_texture_get((E3D_Texture *)texture);
-}
-
static Eina_Bool use_gl = EINA_FALSE;
static Ector_Surface *
@@ -2564,11 +2446,14 @@ static Ector_Buffer *
eng_ector_buffer_wrap(void *engine EINA_UNUSED, Evas *evas, void *engine_image)
{
Evas_GL_Image *im = engine_image;
+ Render_Output_GL_Generic *output;
EINA_SAFETY_ON_NULL_RETURN_VAL(engine_image, NULL);
+ output = _evgl_output_find(engine);
+ if (!output) return NULL;
return efl_add(EVAS_ECTOR_GL_IMAGE_BUFFER_CLASS, evas,
- evas_ector_buffer_engine_image_set(efl_added, evas, im));
+ evas_ector_buffer_engine_image_set(efl_added, output, im));
}
//FIXME: Currently Ector GL doens't work properly. Use software instead.
@@ -2605,7 +2490,8 @@ eng_ector_buffer_new(void *engine, Evas *evas, int w, int h,
// alloc buffer
ie = evas_cache_image_copied_data(evas_common_image_cache_get(), w, h,
- NULL, EINA_TRUE, cspace);
+ NULL, EINA_TRUE,
+ (Evas_Colorspace)cspace);
if (!ie) return NULL;
pixels = ((RGBA_Image *) ie)->image.data;
memset(pixels, 0, w * h * pxs);
@@ -2712,7 +2598,7 @@ eng_ector_surface_cache_drop(void *engine, void *key)
generic_cache_data_drop(e->software.surface_cache, key);
}
-static void
+static Eina_Bool
eng_ector_begin(void *engine, void *surface,
void *context EINA_UNUSED, Ector_Surface *ector,
int x, int y, Eina_Bool do_async EINA_UNUSED)
@@ -2720,6 +2606,7 @@ eng_ector_begin(void *engine, void *surface,
if (use_gl)
{
//FIXME: No implementation yet
+ return EINA_FALSE;
}
else
{
@@ -2729,6 +2616,7 @@ eng_ector_begin(void *engine, void *surface,
int load_err;
glim = eng_image_data_get(engine, glim, EINA_TRUE, &pixels, &load_err,NULL);
+ if (!glim || !pixels) return EINA_FALSE;
eng_image_stride_get(engine, glim, &stride);
eng_image_size_get(engine, glim, &w, &h);
@@ -2737,8 +2625,8 @@ eng_ector_begin(void *engine, void *surface,
// it just uses the software backend to draw for now
ector_buffer_pixels_set(ector, pixels, w, h, stride, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE);
ector_surface_reference_point_set(ector, x, y);
-
}
+ return EINA_TRUE;
}
static void
@@ -2894,15 +2782,15 @@ eng_image_data_maps_get(void *engine EINA_UNUSED, const void *image, const Eina_
}
static inline Eina_Bool
-_is_yuv(Efl_Gfx_Colorspace cspace)
+_is_yuv(Evas_Colorspace cspace)
{
switch (cspace)
{
- case EFL_GFX_COLORSPACE_YCBCR422P601_PL:
- case EFL_GFX_COLORSPACE_YCBCR422P709_PL:
- case EFL_GFX_COLORSPACE_YCBCR422601_PL:
- case EFL_GFX_COLORSPACE_YCBCR420NV12601_PL:
- case EFL_GFX_COLORSPACE_YCBCR420TM12601_PL:
+ case EVAS_COLORSPACE_YCBCR422P601_PL:
+ case EVAS_COLORSPACE_YCBCR422P709_PL:
+ case EVAS_COLORSPACE_YCBCR422601_PL:
+ case EVAS_COLORSPACE_YCBCR420NV12601_PL:
+ case EVAS_COLORSPACE_YCBCR420TM12601_PL:
return EINA_TRUE;
default:
@@ -3159,6 +3047,42 @@ eng_gfx_filter_process(void *engine, Evas_Filter_Command *cmd)
return pfunc.gfx_filter_process(&re->software, cmd);
}
+static void
+eng_font_glyphs_gc_collect(void *data EINA_UNUSED, float ratio EINA_UNUSED, int *texture_size EINA_UNUSED, int *atlas_size EINA_UNUSED, Eina_Bool only_when_requested EINA_UNUSED)
+{
+ Evas_Engine_GL_Context *gl_context;
+ gl_context = gl_generic_context_find(data, 1);
+
+ if ((only_when_requested && gl_context->font_glyph_gc_requested) || (!only_when_requested))
+ {
+ if (ratio > 0.0)
+ {
+ int requested_size = ratio * gl_context->font_glyph_textures_size;
+
+ Eina_List *l;
+ Eina_List *ll;
+ Evas_GL_Image *im;
+ EINA_LIST_FOREACH_SAFE(gl_context->font_glyph_images, l, ll, im)
+ {
+ int size = im->w * im->h * 4;
+ gl_context->font_glyph_textures_size -= size;
+ requested_size -= size;
+ if ((im->tex != NULL) && (im->tex->pt) && (im->tex->pt->references == 1))
+ {
+ gl_context->font_glyph_atlas_size -= im->tex->pt->w * im->tex->pt->h * 4;
+ }
+ evas_gl_common_image_free(im);
+ if (requested_size <= 0)
+ break;
+ }
+ }
+
+ gl_context->font_glyph_gc_requested = EINA_FALSE;
+ }
+ if (texture_size) *texture_size = gl_context->font_glyph_textures_size;
+ if (atlas_size) *atlas_size = gl_context->font_glyph_atlas_size;
+}
+
//------------------------------------------------//
static int
@@ -3198,6 +3122,7 @@ module_open(Evas_Module *em)
ORD(polygon_points_clear);
ORD(polygon_draw);
+ ORD(image_load);
ORD(image_mmap);
ORD(image_new_from_data);
ORD(image_new_from_copied_data);
@@ -3220,6 +3145,7 @@ module_open(Evas_Module *em)
ORD(image_colorspace_get);
ORD(image_file_colorspace_get);
ORD(image_can_region_get);
+ ORD(image_stretch_region_get);
ORD(image_native_init);
ORD(image_native_shutdown);
ORD(image_native_set);
@@ -3291,6 +3217,7 @@ module_open(Evas_Module *em)
ORD(image_animated_loop_count_get);
ORD(image_animated_frame_duration_get);
ORD(image_animated_frame_set);
+ ORD(image_animated_frame_get);
ORD(image_max_size_get);
@@ -3298,29 +3225,6 @@ module_open(Evas_Module *em)
ORD(context_flush);
- /* 3D features */
- ORD(drawable_new);
- ORD(drawable_free);
- ORD(drawable_size_get);
- ORD(image_drawable_set);
-
- ORD(drawable_scene_render);
-
- ORD(drawable_texture_color_pick_id_get);
- ORD(drawable_texture_target_id_get);
- ORD(drawable_texture_pixel_color_get);
- ORD(drawable_scene_render_to_texture);
- ORD(drawable_texture_rendered_pixels_get);
- ORD(texture_new);
- ORD(texture_free);
- ORD(texture_size_get);
- ORD(texture_wrap_set);
- ORD(texture_wrap_get);
- ORD(texture_filter_set);
- ORD(texture_filter_get);
- ORD(texture_image_set);
- ORD(texture_image_get);
-
ORD(ector_create);
ORD(ector_destroy);
ORD(ector_buffer_wrap);
@@ -3335,6 +3239,7 @@ module_open(Evas_Module *em)
ORD(ector_surface_cache_drop);
ORD(gfx_filter_supports);
ORD(gfx_filter_process);
+ ORD(font_glyphs_gc_collect);
/* now advertise out own api */
em->functions = (void *)(&func);
diff --git a/src/modules/evas/engines/gl_generic/filters/gl_filter_blur.c b/src/modules/evas/engines/gl_generic/filters/gl_filter_blur.c
index 21b78198e1..875d1baaf1 100644
--- a/src/modules/evas/engines/gl_generic/filters/gl_filter_blur.c
+++ b/src/modules/evas/engines/gl_generic/filters/gl_filter_blur.c
@@ -145,7 +145,10 @@ _gl_filter_blur(Render_Engine_GL_Generic *re, Evas_Filter_Command *cmd)
s_h = cmd->input->h;
d_w = cmd->output->w;
d_h = cmd->output->h;
- EINA_SAFETY_ON_FALSE_RETURN_VAL(s_w && s_h && d_w && d_h, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(
+ EINA_DBL_NONZERO(s_w) && EINA_DBL_NONZERO(s_h) && EINA_DBL_NONZERO(d_w) && EINA_DBL_NONZERO(d_h),
+ EINA_FALSE
+ );
gc = gl_generic_context_find(re, 1);
@@ -157,7 +160,7 @@ _gl_filter_blur(Render_Engine_GL_Generic *re, Evas_Filter_Command *cmd)
evas_gl_common_context_target_surface_set(gc, surface);
- if (cmd->blur.dx)
+ if (EINA_DBL_NONZERO(cmd->blur.dx))
{
horiz = EINA_TRUE;
radius = cmd->blur.dx;
@@ -274,7 +277,7 @@ gl_filter_blur_func_get(Render_Engine_GL_Generic *re EINA_UNUSED, Evas_Filter_Co
EINA_SAFETY_ON_NULL_RETURN_VAL(cmd->input, NULL);
// 1D blurs only, radius != 0
- EINA_SAFETY_ON_FALSE_RETURN_VAL((!cmd->blur.dx) ^ (!cmd->blur.dy), NULL);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(!EINA_DBL_EQ(cmd->blur.dx, 0) ^ !EINA_DBL_EQ(cmd->blur.dy, 0), NULL);
return _gl_filter_blur;
}
diff --git a/src/modules/evas/engines/gl_generic/filters/gl_filter_mask.c b/src/modules/evas/engines/gl_generic/filters/gl_filter_mask.c
index 755dedb04a..36aaa39d78 100644
--- a/src/modules/evas/engines/gl_generic/filters/gl_filter_mask.c
+++ b/src/modules/evas/engines/gl_generic/filters/gl_filter_mask.c
@@ -50,8 +50,8 @@ _gl_filter_mask(Render_Engine_GL_Generic *re, Evas_Filter_Command *cmd)
gc->dc->clip.mask_x = x;
gc->dc->clip.mask_y = y;
- evas_gl_common_filter_blend_push(gc, image->tex, x, y, sw, sh, x, y, sw, sh,
- cmd->draw.alphaonly);
+ evas_gl_common_image_draw(gc, image, x, y, sw, sh,
+ x, y, sw, sh, EINA_TRUE);
}
evas_gl_common_image_free(use_mask);
diff --git a/src/modules/evas/engines/gl_generic/meson.build b/src/modules/evas/engines/gl_generic/meson.build
index 6f7e9dc259..3a00883b8a 100644
--- a/src/modules/evas/engines/gl_generic/meson.build
+++ b/src/modules/evas/engines/gl_generic/meson.build
@@ -39,11 +39,6 @@ common_engine_src = [
'evas_gl_api_gles1.c',
'evas_gl_api_gles3_def.h',
'evas_gl_api_ext.c',
- 'evas_gl_3d_common.h',
- 'evas_gl_3d_private.h',
- 'evas_gl_3d.c',
- 'evas_gl_3d_renderer.c',
- 'evas_gl_3d_shader.c',
]
foreach src : common_engine_src
@@ -67,13 +62,13 @@ foreach eo_file : pub_eo_files
'-gchd', '@INPUT@'])
endforeach
-engine_deps = [gl_deps]
+engine_deps += [gl_deps]
engine_include_dir = include_directories(join_paths('..','software_generic'), join_paths('..', 'gl_common'))
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c
index 1d63eaace6..580921ff01 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.c
+++ b/src/modules/evas/engines/gl_x11/evas_engine.c
@@ -1376,8 +1376,8 @@ eng_gl_symbols(Outbuf *ob)
// This is a GL extension
exts = (const char *) glGetString(GL_EXTENSIONS);
- FINDSYM(glsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", "GL_OES_EGL_image", glsym_func_void);
FINDSYM(glsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", "GL_OES_EGL_image_external", glsym_func_void);
+ FINDSYM(glsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", "GL_OES_EGL_image", glsym_func_void);
#else
@@ -1964,7 +1964,7 @@ _native_bind_cb(void *image)
(void *)n->ns_data.x11.pixmap,
NULL);
if (!n->ns_data.x11.surface)
- ERR("eglCreateImage() for Pixmap 0x%#lx failed: %#x", n->ns_data.x11.pixmap, eglGetError());
+ WRN("eglCreateImage() for Pixmap 0x%#lx failed: %#x", n->ns_data.x11.pixmap, eglGetError());
}
if (glsym_glEGLImageTargetTexture2DOES)
@@ -2567,7 +2567,7 @@ eng_image_native_set(void *engine, void *image, void *native)
if (!n->ns_data.x11.surface)
{
- ERR("eglCreateImage() for Pixmap %#lx failed: %#x", pm, eglGetError());
+ WRN("eglCreateImage() for Pixmap %#lx failed: %#x", pm, eglGetError());
free(n);
return NULL;
}
@@ -2854,7 +2854,7 @@ eng_image_native_set(void *engine, void *image, void *native)
else
ERR("Try eglCreateImage on EGL with no support");
if (!n->ns_data.tbm.surface)
- ERR("eglCreateImage() for %p failed", buffer);
+ WRN("eglCreateImage() for %p failed", buffer);
im->native.yinvert = 1;
im->native.loose = 0;
im->native.disp = ob->egl_disp;
@@ -2965,7 +2965,7 @@ eng_image_native_set(void *engine, void *image, void *native)
if (!n->ns_data.wl_surface.surface)
{
- ERR("eglCreatePixmapSurface() for %p failed", wl_buf);
+ WRN("eglCreatePixmapSurface() for %p failed", wl_buf);
eina_hash_del(gl_context->shared->native_wl_hash,
&wlid, im);
glsym_evas_gl_common_image_free(im);
diff --git a/src/modules/evas/engines/gl_x11/evas_x_main.c b/src/modules/evas/engines/gl_x11/evas_x_main.c
index f247758a2d..33f3568bf7 100644
--- a/src/modules/evas/engines/gl_x11/evas_x_main.c
+++ b/src/modules/evas/engines/gl_x11/evas_x_main.c
@@ -331,7 +331,7 @@ try_gles2:
}
if (context == EGL_NO_CONTEXT)
_tls_context_set(gw->egl_context);
-
+
SET_RESTORE_CONTEXT();
if (evas_eglMakeCurrent(gw->egl_disp,
gw->egl_surface,
@@ -661,9 +661,10 @@ eng_window_free(Outbuf *gw)
}
#ifdef GL_GLES
SET_RESTORE_CONTEXT();
- evas_eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ if (!evas_eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT))
+ ERR("evas_eglMakeCurrent() failed!");
if (gw->egl_surface != EGL_NO_SURFACE)
- eglDestroySurface(gw->egl_disp, gw->egl_surface);
+ eglDestroySurface(gw->egl_disp, gw->egl_surface);
if (gw->egl_context != context)
eglDestroyContext(gw->egl_disp, gw->egl_context);
if (ref == 0)
@@ -802,9 +803,10 @@ eng_window_unsurf(Outbuf *gw)
if (xwin == gw)
{
SET_RESTORE_CONTEXT();
- evas_eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ if (!evas_eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT))
+ ERR("evas_eglMakeCurrent() failed!");
if (gw->egl_surface != EGL_NO_SURFACE)
- eglDestroySurface(gw->egl_disp, gw->egl_surface);
+ eglDestroySurface(gw->egl_disp, gw->egl_surface);
gw->egl_surface = EGL_NO_SURFACE;
_tls_outbuf_set(NULL);
}
diff --git a/src/modules/evas/engines/gl_x11/meson.build b/src/modules/evas/engines/gl_x11/meson.build
index 0bac84147e..fd39ba29e8 100644
--- a/src/modules/evas/engines/gl_x11/meson.build
+++ b/src/modules/evas/engines/gl_x11/meson.build
@@ -5,11 +5,11 @@ engine_src = files([
'evas_x_main.c',
])
-engine_deps = [ecore_x_deps, gl_deps]
+engine_deps += [ecore_x_ext_deps, gl_deps]
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/meson.build b/src/modules/evas/engines/meson.build
index 2504a761a9..b1c11369c9 100644
--- a/src/modules/evas/engines/meson.build
+++ b/src/modules/evas/engines/meson.build
@@ -16,10 +16,7 @@ endif
have_gl_engine = false
if get_option('opengl') != 'none'
- engines += [
- ['gl_x11', ['x11']],
- ['gl_drm', ['drm']]
- ]
+ engines += [['gl_x11', ['x11']]]
have_gl_engine = true
endif
@@ -29,7 +26,10 @@ if get_option('opengl') == 'full'
endif
if get_option('opengl') == 'es-egl'
- engines += [['wayland_egl', ['wl']]]
+ engines += [
+ ['wayland_egl', ['wl']],
+ ['gl_drm', ['drm']]
+ ]
have_gl_engine = true
endif
@@ -46,7 +46,7 @@ foreach engine_conf : engines
if build
engine_include_dir = []
engine_src = []
- engine_deps = []
+ engine_deps = [eina, evas, evas_ext_none_static_deps, eet]
engine_dep = declare_dependency(
include_directories: include_directories(engine),
)
diff --git a/src/modules/evas/engines/software_ddraw/meson.build b/src/modules/evas/engines/software_ddraw/meson.build
index 9b742757fa..b15acfd3ad 100644
--- a/src/modules/evas/engines/software_ddraw/meson.build
+++ b/src/modules/evas/engines/software_ddraw/meson.build
@@ -5,12 +5,13 @@ engine_src = files([
'evas_ddraw_main.cpp',
])
-engine_deps = [cc.find_library('ddraw')]
+engine_deps += [cc.find_library('ddraw')]
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
+ c_args : package_c_args,
cpp_args: ['-fno-rtti', '-fno-exceptions'],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/software_gdi/meson.build b/src/modules/evas/engines/software_gdi/meson.build
index ef7a0aa690..549094913f 100644
--- a/src/modules/evas/engines/software_gdi/meson.build
+++ b/src/modules/evas/engines/software_gdi/meson.build
@@ -5,11 +5,12 @@ engine_src = files([
'evas_gdi_main.c',
])
-engine_deps = [cc.find_library('gdi32')]
+engine_deps += [cc.find_library('gdi32')]
shared_module(mod_full_name, engine_src,
+ c_args : package_c_args,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c b/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c
index 41730d7298..ba33e72cd4 100644
--- a/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c
+++ b/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c
@@ -32,7 +32,7 @@ _evas_ector_software_buffer_evas_ector_buffer_engine_image_set(Eo *obj,
evas_cache_image_ref(&im->cache_entry);
pd->image = im;
- ector_buffer_pixels_set(obj, im->image.data, im->cache_entry.w, im->cache_entry.h, 0, im->cache_entry.space, EINA_TRUE);
+ ector_buffer_pixels_set(obj, im->image.data, im->cache_entry.w, im->cache_entry.h, 0, (Efl_Gfx_Colorspace)im->cache_entry.space, EINA_TRUE);
}
EOLIAN static void *
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c
index 33c56b1238..78d8172b93 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -414,7 +414,6 @@ struct _Evas_Thread_Command_Ector_Surface
Ector_Surface *ector;
void *pixels;
int x, y;
- Eina_Bool clear;
};
// declare here as it is re-used
@@ -1206,6 +1205,33 @@ eng_image_native_get(void *data EINA_UNUSED, void *image)
}
static void *
+eng_image_load(void *data EINA_UNUSED, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
+{
+ *error = EVAS_LOAD_ERROR_NONE;
+#ifdef EVAS_CSERVE2
+ if (evas_cserve2_use_get())
+ {
+ Image_Entry *ie;
+ ie = evas_cache2_image_open(evas_common_image_cache2_get(),
+ file, key, lo, error);
+ if (ie)
+ {
+ *error = evas_cache2_image_open_wait(ie);
+ if ((*error != EVAS_LOAD_ERROR_NONE) && ie->animated.animated)
+ {
+ evas_cache2_image_close(ie);
+ goto use_local_cache;
+ }
+ }
+ return ie;
+ }
+use_local_cache:
+#endif
+
+ return evas_common_load_image_from_file(file, key, lo, error);
+}
+
+static void *
eng_image_mmap(void *data EINA_UNUSED, Eina_File *f, const char *key, int *error, Evas_Image_Load_Opts *lo)
{
*error = EVAS_LOAD_ERROR_NONE;
@@ -1492,11 +1518,15 @@ eng_image_data_map(void *engdata EINA_UNUSED, void **image, Eina_Rw_Slice *slice
void *src_data;
int dst_stride, dst_len, dst_offset = 0;
- cs_func = efl_draw_convert_func_get(ie->space, cspace, &can_region);
+ cs_func = efl_draw_convert_func_get((Efl_Gfx_Colorspace)ie->space,
+ (Efl_Gfx_Colorspace)cspace,
+ &can_region);
if (!cs_func) return EINA_FALSE;
// make sure we can convert back, if map for writing
- if (to_write && !efl_draw_convert_func_get(cspace, ie->space, NULL))
+ if (to_write && !efl_draw_convert_func_get((Efl_Gfx_Colorspace)cspace,
+ (Efl_Gfx_Colorspace)ie->space,
+ NULL))
return EINA_FALSE;
if (can_region)
@@ -1528,7 +1558,10 @@ eng_image_data_map(void *engdata EINA_UNUSED, void **image, Eina_Rw_Slice *slice
data = malloc(dst_len);
if (!data) return EINA_FALSE;
- if (!cs_func(data, src_data, rw, rh, src_stride, dst_stride, ie->flags.alpha, ie->space, cspace))
+ if (!cs_func(data, src_data, rw, rh, src_stride, dst_stride,
+ ie->flags.alpha,
+ (Efl_Gfx_Colorspace)ie->space,
+ (Efl_Gfx_Colorspace)cspace))
{
ERR("color conversion failed");
free(data);
@@ -1630,19 +1663,25 @@ _image_data_commit(RGBA_Image *im, RGBA_Image_Data_Map *map)
Cspace_Convert_Func cs_func;
Eina_Bool can_region;
- cs_func = efl_draw_convert_func_get(map->cspace, ie->space, &can_region);
+ cs_func = efl_draw_convert_func_get((Efl_Gfx_Colorspace)map->cspace,
+ (Efl_Gfx_Colorspace)ie->space,
+ &can_region);
EINA_SAFETY_ON_NULL_RETURN(cs_func);
DBG("unmap commit: convert func (%p)", cs_func);
if (can_region)
{
cs_func(dst, map->slice.mem, map->rw, map->rh, map->stride, dst_stride,
- ie->flags.alpha, map->cspace, ie->space);
+ ie->flags.alpha,
+ (Efl_Gfx_Colorspace)map->cspace,
+ (Efl_Gfx_Colorspace)ie->space);
}
else
{
cs_func(dst, map->baseptr, ie->w, ie->h, map->stride, dst_stride,
- ie->flags.alpha, map->cspace, ie->space);
+ ie->flags.alpha,
+ (Efl_Gfx_Colorspace)map->cspace,
+ (Efl_Gfx_Colorspace)ie->space);
}
}
}
@@ -1696,15 +1735,15 @@ eng_image_data_maps_get(void *engdata EINA_UNUSED, const void *image, const Eina
}
static inline Eina_Bool
-_is_yuv(Efl_Gfx_Colorspace cspace)
+_is_yuv(Evas_Colorspace cspace)
{
switch (cspace)
{
- case EFL_GFX_COLORSPACE_YCBCR422P601_PL:
- case EFL_GFX_COLORSPACE_YCBCR422P709_PL:
- case EFL_GFX_COLORSPACE_YCBCR422601_PL:
- case EFL_GFX_COLORSPACE_YCBCR420NV12601_PL:
- case EFL_GFX_COLORSPACE_YCBCR420TM12601_PL:
+ case EVAS_COLORSPACE_YCBCR422P601_PL:
+ case EVAS_COLORSPACE_YCBCR422P709_PL:
+ case EVAS_COLORSPACE_YCBCR422601_PL:
+ case EVAS_COLORSPACE_YCBCR420NV12601_PL:
+ case EVAS_COLORSPACE_YCBCR420TM12601_PL:
return EINA_TRUE;
default:
@@ -2889,6 +2928,18 @@ eng_image_animated_frame_set(void *data EINA_UNUSED, void *image, int frame_inde
return EINA_TRUE;
}
+static int
+eng_image_animated_frame_get(void *data EINA_UNUSED, void *image)
+{
+ Image_Entry *im;
+
+ if (!image) return EINA_FALSE;
+ im = image;
+ if (!im->animated.animated) return EINA_FALSE;
+
+ return im->animated.cur_frame;
+}
+
static void
_draw_thread_multi_font_draw(void *data)
{
@@ -3920,7 +3971,6 @@ _smart_merge(Tilebuf *tb, Tilebuf_Rect *rects)
}
j++;
}
- n2 = n;
free(box);
box = box2;
if (!did_merge) break;
@@ -3938,15 +3988,60 @@ _smart_merge(Tilebuf *tb, Tilebuf_Rect *rects)
box = region_rects(region);
n = region_rects_num(region);
merged = calloc(1, n * sizeof(Tilebuf_Rect));
- for (i = 0; i < n; i++)
- {
- merged[i].x = box[i].x1;
- merged[i].y = box[i].y1;
- merged[i].w = box[i].x2 - box[i].x1;
- merged[i].h = box[i].y2 - box[i].y1;
- mergelist = (Tilebuf_Rect *)eina_inlist_append
- (EINA_INLIST_GET(mergelist), EINA_INLIST_GET(&(merged[i])));
- }
+ if (merged) {
+ j = 0;
+#if 1
+ // regions sometimes produce box sets like:
+ // +---+
+ // | |
+ // +---+ +-------+
+ // | | | |
+ // +---+ +-------+---------+
+ // | |
+ // | |
+ // +-----------------+
+ // so the upper-left 2 boxes can be merged into 1 and they have the same
+ // x coords and are flush-aligned one above the other. that is what
+ // this does - find these and merge them to have fewer rects
+ for (i = 0; i < n; i++)
+ {
+ // skip empty boxes
+ if (box[i].x1 == box[i].x2) continue;
+ // walk all following boxes after this and see if they can be merged
+ // into box i
+ for (k = i + 1; k < n; k++)
+ {
+ // skip empty boxes after i
+ if (box[k].x1 == box[k].x2) continue;
+ // match x coords
+ if ((box[i].x1 == box[k].x1) && // if aligned vertically
+ (box[i].x2 == box[k].x2)) // exactly above/below
+ {
+ // right below, or right above
+ if (box[i].y2 == box[k].y1) // this box flush below
+ {
+ box[i].y2 = box[k].y2; // merge below i
+ box[k].x2 = box[k].x1; // empty this box - merged
+ }
+ else if (box[i].y1 == box[k].y2) // this box flush above
+ {
+ box[i].y2 = box[k].y2; // merge above i
+ box[k].x2 = box[k].x1; // empty this box - merged
+ }
+ }
+ }
+ // i may have expanded but will not be empty. future boxes after
+ // this may be empty though but handled at top of loop
+ merged[j].x = box[i].x1;
+ merged[j].y = box[i].y1;
+ merged[j].w = box[i].x2 - box[i].x1;
+ merged[j].h = box[i].y2 - box[i].y1;
+ mergelist = (Tilebuf_Rect *)eina_inlist_append
+ (EINA_INLIST_GET(mergelist), EINA_INLIST_GET(&(merged[j])));
+ j++;
+ }
+#endif
+ }
region_free(region);
rects = mergelist;
@@ -4275,8 +4370,10 @@ eng_ector_buffer_wrap(void *data, Evas *e EINA_UNUSED, void *engine_image)
{
Image_Entry *ie = engine_image;
Ector_Buffer *buf = NULL;
+ RGBA_Image *im = (RGBA_Image *)ie;
if (!ie) return NULL;
+ if (!im->image.data) return NULL;
if (!efl_domain_current_push(EFL_ID_DOMAIN_SHARED))
return NULL;
@@ -4307,8 +4404,9 @@ eng_ector_buffer_new(void *data, Evas *evas, int width, int height,
}
// alloc buffer
- ie = evas_cache_image_copied_data(evas_common_image_cache_get(), width, height,
- NULL, EINA_TRUE, cspace);
+ ie = evas_cache_image_copied_data(evas_common_image_cache_get(),
+ width, height, NULL, EINA_TRUE,
+ (Evas_Colorspace)cspace);
if (!ie) return NULL;
pixels = ((RGBA_Image *) ie)->image.data;
memset(pixels, 0, width * height * pxs);
@@ -4453,7 +4551,7 @@ _draw_thread_ector_surface_set(void *data)
x = ector_surface->x;
y = ector_surface->y;
// clear the surface before giving to ector
- if (ector_surface->clear) memset(pixels, 0, (w * h * 4));
+ memset(pixels, 0, (w * h * 4));
}
}
@@ -4463,7 +4561,7 @@ _draw_thread_ector_surface_set(void *data)
eina_mempool_free(_mp_command_ector_surface, ector_surface);
}
-static void
+static Eina_Bool
eng_ector_begin(void *engine EINA_UNUSED, void *surface,
void *context EINA_UNUSED, Ector_Surface *ector,
int x, int y, Eina_Bool do_async)
@@ -4473,7 +4571,7 @@ eng_ector_begin(void *engine EINA_UNUSED, void *surface,
Evas_Thread_Command_Ector_Surface *nes;
nes = eina_mempool_malloc(_mp_command_ector_surface, sizeof (Evas_Thread_Command_Ector_Surface));
- if (!nes) return;
+ if (!nes) return EINA_FALSE;
nes->ector = ector;
nes->pixels = surface;
@@ -4490,6 +4588,8 @@ eng_ector_begin(void *engine EINA_UNUSED, void *surface,
unsigned int h = 0;
pixels = evas_cache_image_pixels(&sf->cache_entry);
+ if (!pixels) return EINA_FALSE;
+
w = sf->cache_entry.w;
h = sf->cache_entry.h;
// clear the surface before giving to ector
@@ -4498,6 +4598,7 @@ eng_ector_begin(void *engine EINA_UNUSED, void *surface,
ector_buffer_pixels_set(ector, pixels, w, h, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE);
ector_surface_reference_point_set(ector, x, y);
}
+ return EINA_TRUE;
}
static void
@@ -4560,6 +4661,12 @@ eng_gfx_filter_supports(void *data EINA_UNUSED, Evas_Filter_Command *cmd)
return EVAS_FILTER_SUPPORT_CPU;
}
+static void
+eng_font_glyphs_gc_collect(void *data EINA_UNUSED, float ratio EINA_UNUSED, int *texture_size EINA_UNUSED, int *atlas_size EINA_UNUSED, Eina_Bool only_when_requested EINA_UNUSED)
+{
+ return;
+}
+
static Eina_Bool
eng_gfx_filter_process(void *data EINA_UNUSED, Evas_Filter_Command *cmd)
{
@@ -4633,6 +4740,7 @@ static Evas_Func func =
eng_polygon_points_clear,
eng_polygon_draw,
/* image draw funcs */
+ eng_image_load,
eng_image_mmap,
eng_image_new_from_data,
eng_image_new_from_copied_data,
@@ -4745,29 +4853,11 @@ static Evas_Func func =
eng_image_animated_loop_count_get,
eng_image_animated_frame_duration_get,
eng_image_animated_frame_set,
+ eng_image_animated_frame_get,
NULL, // image_max_size_get
eng_multi_font_draw,
eng_pixel_alpha_get,
NULL, // eng_context_flush - software doesn't use it
- NULL, // eng_drawable_new
- NULL, // eng_drawable_free
- NULL, // eng_drawable_size_get
- NULL, // eng_image_drawable_set
- NULL, // eng_drawable_scene_render
- NULL, // eng_drawable_scene_render_to_texture
- NULL, // eng_drawable_texture_color_pick_id_get
- NULL, // eng_drawable_texture_target_id_get
- NULL, // eng_drawable_texture_pixel_color_get
- NULL, // eng_drawable_texture_rendered_pixels_get
- NULL, // eng_texture_new
- NULL, // eng_texture_free
- NULL, // eng_texture_size_get
- NULL, // eng_texture_wrap_set
- NULL, // eng_texture_wrap_get
- NULL, // eng_texture_filter_set
- NULL, // eng_texture_filter_get
- NULL, // eng_texture_image_set
- NULL, // eng_texture_image_get
eng_ector_create,
eng_ector_destroy,
eng_ector_buffer_wrap,
@@ -4783,6 +4873,7 @@ static Evas_Func func =
eng_gfx_filter_supports,
eng_gfx_filter_process,
/* FUTURE software generic calls go here */
+ eng_font_glyphs_gc_collect,
0 // sizeof (Info)
};
@@ -5483,7 +5574,13 @@ evgl_glShaderSource(GLuint shader, GLsizei count, const char* const* string, con
int i = 0, len = 0;
char **s = malloc(count * sizeof(char*));
+ if (!s) goto err;
GLint *l = malloc(count * sizeof(GLint));
+ if (!l)
+ {
+ free(s);
+ goto err;
+ }
memset(s, 0, count * sizeof(char*));
memset(l, 0, count * sizeof(GLint));
@@ -5508,9 +5605,7 @@ evgl_glShaderSource(GLuint shader, GLsizei count, const char* const* string, con
free(s[--i]);
free(l);
free(s);
-
- DBG("Patching Shader Failed.");
- return;
+ goto err;
}
}
else
@@ -5526,6 +5621,9 @@ evgl_glShaderSource(GLuint shader, GLsizei count, const char* const* string, con
free(s[--i]);
free(l);
free(s);
+
+err:
+ ERR("Patching Shader Failed.");
}
diff --git a/src/modules/evas/engines/software_generic/filters/evas_filter_blur.c b/src/modules/evas/engines/software_generic/filters/evas_filter_blur.c
index 89d20e2ba6..c5617d0096 100644
--- a/src/modules/evas/engines/software_generic/filters/evas_filter_blur.c
+++ b/src/modules/evas/engines/software_generic/filters/evas_filter_blur.c
@@ -469,32 +469,32 @@ eng_filter_blur_func_get(Evas_Filter_Command *cmd)
case EVAS_FILTER_BLUR_BOX:
if (!cmd->output->alpha_only)
{
- if (cmd->blur.dx)
+ if (EINA_DBL_NONZERO(cmd->blur.dx))
return _box_blur_horiz_apply_rgba;
- else if (cmd->blur.dy)
+ else if (EINA_DBL_NONZERO(cmd->blur.dy))
return _box_blur_vert_apply_rgba;
}
else
{
- if (cmd->blur.dx)
+ if (EINA_DBL_NONZERO(cmd->blur.dx))
return _box_blur_horiz_apply_alpha;
- else if (cmd->blur.dy)
+ else if (EINA_DBL_NONZERO(cmd->blur.dy))
return _box_blur_vert_apply_alpha;
}
break;
case EVAS_FILTER_BLUR_GAUSSIAN:
if (!cmd->output->alpha_only)
{
- if (cmd->blur.dx)
+ if (EINA_DBL_NONZERO(cmd->blur.dx))
return _gaussian_blur_horiz_apply_rgba;
- else if (cmd->blur.dy)
+ else if (EINA_DBL_NONZERO(cmd->blur.dy))
return _gaussian_blur_vert_apply_rgba;
}
else
{
- if (cmd->blur.dx)
+ if (EINA_DBL_NONZERO(cmd->blur.dx))
return _gaussian_blur_horiz_apply_alpha;
- else if (cmd->blur.dy)
+ else if (EINA_DBL_NONZERO(cmd->blur.dy))
return _gaussian_blur_vert_apply_alpha;
}
break;
diff --git a/src/modules/evas/engines/software_x11/Evas_Engine_Software_X11.h b/src/modules/evas/engines/software_x11/Evas_Engine_Software_X11.h
index 08e2543592..dab373cd35 100644
--- a/src/modules/evas/engines/software_x11/Evas_Engine_Software_X11.h
+++ b/src/modules/evas/engines/software_x11/Evas_Engine_Software_X11.h
@@ -15,7 +15,7 @@ struct _Evas_Engine_Info_Software_X11
Evas_Engine_Info magic;
/* engine specific data & parameters it needs to set up */
- struct
+ struct
{
Evas_Engine_Info_Software_X11_Backend backend;
diff --git a/src/modules/evas/engines/software_x11/evas_engine.h b/src/modules/evas/engines/software_x11/evas_engine.h
index d5e4c7cfd5..2fa57f1dda 100644
--- a/src/modules/evas/engines/software_x11/evas_engine.h
+++ b/src/modules/evas/engines/software_x11/evas_engine.h
@@ -47,12 +47,12 @@ struct _Outbuf
int rot;
int onebuf;
- struct
+ struct
{
Convert_Pal *pal;
- union
+ union
{
- struct
+ struct
{
Display *disp;
Window win;
@@ -65,7 +65,7 @@ struct _Outbuf
unsigned char bit_swap : 1;
} xlib;
} x11;
- struct
+ struct
{
DATA32 r, g, b;
} mask;
@@ -73,7 +73,7 @@ struct _Outbuf
/* 1 big buffer for updates - flush on idle_flush */
RGBA_Image *onebuf;
Eina_Array onebuf_regions;
-
+
void *swapper;
/* a list of pending regions to write to the target */
diff --git a/src/modules/evas/engines/software_x11/meson.build b/src/modules/evas/engines/software_x11/meson.build
index c2f8f544e8..ed0a3e4b46 100644
--- a/src/modules/evas/engines/software_x11/meson.build
+++ b/src/modules/evas/engines/software_x11/meson.build
@@ -26,11 +26,11 @@ config_h.set('BUILD_ENGINE_SOFTWARE_XLIB', '1')
#ecore_x_deps carries all the extensions etc. so we dont have to search them twice
#it looks weird but is right, gl_deps is needed for evas_x_egl.c
-engine_deps = [x11, ecore_x, ecore_x_deps, gl_deps]
+engine_deps += [x11, ecore_x, ecore_x_ext_deps, gl_deps]
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c
index 024e794ac4..58eb54a467 100644
--- a/src/modules/evas/engines/wayland_egl/evas_engine.c
+++ b/src/modules/evas/engines/wayland_egl/evas_engine.c
@@ -1317,7 +1317,7 @@ eng_image_native_set(void *engine, void *image, void *native)
else
ERR("Try eglCreateImage on EGL with no support");
if (!n->ns_data.tbm.surface)
- ERR("eglCreateImage() for %p failed", buffer);
+ WRN("eglCreateImage() for %p failed", buffer);
img->native.yinvert = 1;
img->native.loose = 0;
img->native.disp = ob->egl_disp;
diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.h b/src/modules/evas/engines/wayland_egl/evas_engine.h
index f1d81fbd4e..3171632583 100644
--- a/src/modules/evas/engines/wayland_egl/evas_engine.h
+++ b/src/modules/evas/engines/wayland_egl/evas_engine.h
@@ -142,7 +142,7 @@ void eng_gl_context_use(Context_3D *context);
void eng_gl_symbols(EGLDisplay disp);
-static inline int
+static inline int
_re_wincheck(Outbuf *ob)
{
if (ob->surf) return 1;
diff --git a/src/modules/evas/engines/wayland_egl/evas_wl_main.c b/src/modules/evas/engines/wayland_egl/evas_wl_main.c
index cad83434fc..58406f95c2 100644
--- a/src/modules/evas/engines/wayland_egl/evas_wl_main.c
+++ b/src/modules/evas/engines/wayland_egl/evas_wl_main.c
@@ -238,7 +238,7 @@ eng_window_free(Outbuf *gw)
glsym_evas_gl_common_context_free(gw->gl_context);
}
- eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE,
+ eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE,
EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (gw->egl_context != context)
@@ -260,7 +260,7 @@ eng_window_free(Outbuf *gw)
free(gw);
}
-void
+void
eng_window_use(Outbuf *gw)
{
Eina_Bool force = EINA_FALSE;
@@ -303,7 +303,7 @@ eng_window_use(Outbuf *gw)
}
}
-void
+void
eng_window_unsurf(Outbuf *gw)
{
if (!gw->surf) return;
@@ -315,7 +315,7 @@ eng_window_unsurf(Outbuf *gw)
if (_evas_gl_wl_window == gw)
{
- eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE,
+ eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE,
EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (gw->egl_surface != EGL_NO_SURFACE)
eglDestroySurface(gw->egl_disp, gw->egl_surface);
@@ -327,7 +327,7 @@ eng_window_unsurf(Outbuf *gw)
gw->surf = EINA_FALSE;
}
-void
+void
eng_window_resurf(Outbuf *gw)
{
struct wl_surface *wls;
@@ -366,7 +366,7 @@ eng_window_resurf(Outbuf *gw)
gw->surf = EINA_TRUE;
}
-void
+void
eng_outbuf_reconfigure(Outbuf *ob, int w, int h, int rot, Outbuf_Depth depth EINA_UNUSED)
{
ob->w = w;
@@ -387,7 +387,7 @@ eng_outbuf_reconfigure(Outbuf *ob, int w, int h, int rot, Outbuf_Depth depth EIN
}
}
-int
+int
eng_outbuf_rotation_get(Outbuf *ob)
{
return ob->rot;
@@ -433,7 +433,7 @@ eng_outbuf_swap_mode_get(Outbuf *ob)
return ob->swap_mode;
}
-Eina_Bool
+Eina_Bool
eng_outbuf_region_first_rect(Outbuf *ob)
{
glsym_evas_gl_preload_render_lock(eng_preload_make_current, ob);
@@ -522,7 +522,7 @@ eng_outbuf_update_region_new(Outbuf *ob, int x, int y, int w, int h, int *cx EIN
return ob->gl_context->def_surface;
}
-void
+void
eng_outbuf_update_region_push(Outbuf *ob, RGBA_Image *update EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED, int w EINA_UNUSED, int h EINA_UNUSED)
{
if (!_re_wincheck(ob)) return;
@@ -530,7 +530,7 @@ eng_outbuf_update_region_push(Outbuf *ob, RGBA_Image *update EINA_UNUSED, int x
glsym_evas_gl_common_context_flush(ob->gl_context);
}
-void
+void
eng_outbuf_flush(Outbuf *ob, Tilebuf_Rect *surface_damage, Tilebuf_Rect *buffer_damage EINA_UNUSED, Evas_Render_Mode render_mode)
{
if (render_mode == EVAS_RENDER_MODE_ASYNC_INIT) goto end;
@@ -604,7 +604,7 @@ eng_gl_context_new(Outbuf *ob)
if (!(ctx = calloc(1, sizeof(Context_3D)))) return NULL;
- ctx->context =
+ ctx->context =
eglCreateContext(ob->egl_disp, ob->egl_config, ob->egl_context, attrs);
if (!ctx->context)
{
@@ -622,17 +622,17 @@ err:
return NULL;
}
-void
+void
eng_gl_context_free(Context_3D *ctx)
{
eglDestroyContext(ctx->display, ctx->context);
free(ctx);
}
-void
+void
eng_gl_context_use(Context_3D *ctx)
{
- if (eglMakeCurrent(ctx->display, ctx->surface,
+ if (eglMakeCurrent(ctx->display, ctx->surface,
ctx->surface, ctx->context) == EGL_FALSE)
{
ERR("eglMakeCurrent Failed: %#x", eglGetError());
diff --git a/src/modules/evas/engines/wayland_egl/meson.build b/src/modules/evas/engines/wayland_egl/meson.build
index af7314627b..caeab5e0e3 100644
--- a/src/modules/evas/engines/wayland_egl/meson.build
+++ b/src/modules/evas/engines/wayland_egl/meson.build
@@ -4,13 +4,13 @@ engine_src = files([
'evas_wl_main.c'
])
-engine_deps = [ecore_wl2, dependency('wayland-egl'), gl_deps]
+engine_deps += [ecore_wl2, dependency('wayland-egl'), gl_deps]
engine_include_dir = include_directories(join_paths('..','wayland_common'))
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/engines/wayland_shm/evas_engine.c b/src/modules/evas/engines/wayland_shm/evas_engine.c
index 6051a2d840..041dfa9e54 100644
--- a/src/modules/evas/engines/wayland_shm/evas_engine.c
+++ b/src/modules/evas/engines/wayland_shm/evas_engine.c
@@ -31,7 +31,7 @@ eng_output_setup(void *engine, void *info, unsigned int w, unsigned int h)
Render_Engine *re;
Outbuf *ob;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* try to allocate space for new render engine */
if (!(re = calloc(1, sizeof(Render_Engine)))) return NULL;
@@ -91,7 +91,7 @@ eng_output_info_setup(void *info)
{
Evas_Engine_Info_Wayland *einfo = info;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
@@ -102,7 +102,7 @@ eng_output_resize(void *engine EINA_UNUSED, void *data, int w, int h)
Render_Engine *re;
Evas_Engine_Info_Wayland *einfo;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (!(re = (Render_Engine *)data)) return;
if (!(einfo = re->generic.ob->info)) return;
@@ -243,6 +243,8 @@ eng_image_native_set(void *engine EINA_UNUSED, void *image, void *native)
NULL, 1,
EVAS_COLORSPACE_ARGB8888);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(im2, im);
+
if (im->native.data)
{
if (im->native.func.free)
@@ -291,7 +293,7 @@ eng_image_native_get(void *engine EINA_UNUSED, void *image)
static int
module_open(Evas_Module *em)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid evas module */
if (!em) return 0;
@@ -335,7 +337,7 @@ module_open(Evas_Module *em)
static void
module_close(Evas_Module *em EINA_UNUSED)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* unregister logging domain */
if (_evas_engine_way_shm_log_dom >= 0)
@@ -345,7 +347,7 @@ module_close(Evas_Module *em EINA_UNUSED)
}
}
-static Evas_Module_Api evas_modapi =
+static Evas_Module_Api evas_modapi =
{
EVAS_MODULE_API_VERSION, "wayland_shm", "none", {module_open, module_close}
};
diff --git a/src/modules/evas/engines/wayland_shm/evas_engine.h b/src/modules/evas/engines/wayland_shm/evas_engine.h
index c61b36a97a..9f5350fb29 100644
--- a/src/modules/evas/engines/wayland_shm/evas_engine.h
+++ b/src/modules/evas/engines/wayland_shm/evas_engine.h
@@ -33,9 +33,10 @@
# ifdef LOGFNS
# include <stdio.h>
-# define LOGFN(fl, ln, fn) printf("-EVAS-WL: %25s: %5i - %s\n", fl, ln, fn);
+# define LOGFN printf("-EVAS-WL: %25s: %5i - %s\n", __FILE__, __LINE__, __func__)
+
# else
-# define LOGFN(fl, ln, fn)
+# define LOGFN
# endif
extern int _evas_engine_way_shm_log_dom;
@@ -81,7 +82,7 @@ struct _Outbuf
Ecore_Wl2_Surface *surface;
- struct
+ struct
{
/* one big buffer for updates. flushed on idle_flush */
RGBA_Image *onebuf;
diff --git a/src/modules/evas/engines/wayland_shm/evas_outbuf.c b/src/modules/evas/engines/wayland_shm/evas_outbuf.c
index 1dd64934f3..64d36d453a 100644
--- a/src/modules/evas/engines/wayland_shm/evas_outbuf.c
+++ b/src/modules/evas/engines/wayland_shm/evas_outbuf.c
@@ -11,7 +11,7 @@ _evas_outbuf_setup(int w, int h, Evas_Engine_Info_Wayland *info)
{
Outbuf *ob = NULL;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* try to allocate space for new Outbuf */
if (!(ob = calloc(1, sizeof(Outbuf)))) return NULL;
@@ -38,10 +38,10 @@ surf_err:
return NULL;
}
-void
+void
_evas_outbuf_free(Outbuf *ob)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
while (ob->priv.pending_writes)
{
@@ -49,7 +49,7 @@ _evas_outbuf_free(Outbuf *ob)
Eina_Rectangle *rect;
img = ob->priv.pending_writes->data;
- ob->priv.pending_writes =
+ ob->priv.pending_writes =
eina_list_remove_list(ob->priv.pending_writes, ob->priv.pending_writes);
rect = img->extended_info;
@@ -69,7 +69,7 @@ _evas_outbuf_free(Outbuf *ob)
free(ob);
}
-void
+void
_evas_outbuf_idle_flush(Outbuf *ob)
{
RGBA_Image *img;
@@ -90,8 +90,8 @@ _evas_outbuf_idle_flush(Outbuf *ob)
while (ob->priv.prev_pending_writes)
{
img = ob->priv.prev_pending_writes->data;
- ob->priv.prev_pending_writes =
- eina_list_remove_list(ob->priv.prev_pending_writes,
+ ob->priv.prev_pending_writes =
+ eina_list_remove_list(ob->priv.prev_pending_writes,
ob->priv.prev_pending_writes);
rect = img->extended_info;
evas_cache_image_drop(&img->cache_entry);
@@ -101,14 +101,14 @@ _evas_outbuf_idle_flush(Outbuf *ob)
}
}
-void
+void
_evas_outbuf_flush(Outbuf *ob, Tilebuf_Rect *surface_damage EINA_UNUSED, Tilebuf_Rect *buffer_damage EINA_UNUSED, Evas_Render_Mode render_mode)
{
Eina_Rectangle *result;
RGBA_Image *img;
unsigned int i = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
if (render_mode == EVAS_RENDER_MODE_ASYNC_INIT) return;
@@ -212,7 +212,7 @@ _evas_outbuf_swap_mode_get(Outbuf *ob)
{
int age;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
age = ecore_wl2_surface_assign(ob->surface);
if (!age) return MODE_FULL;
@@ -225,25 +225,25 @@ _evas_outbuf_swap_mode_get(Outbuf *ob)
return MODE_FULL;
}
-int
+int
_evas_outbuf_rotation_get(Outbuf *ob)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
return ob->rotation;
}
-void
+void
_evas_outbuf_reconfigure(Outbuf *ob, int w, int h, int rot, Outbuf_Depth depth, Eina_Bool alpha, Eina_Bool resize)
{
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
- if ((depth == OUTBUF_DEPTH_NONE) ||
+ if ((depth == OUTBUF_DEPTH_NONE) ||
(depth == OUTBUF_DEPTH_INHERIT))
depth = ob->depth;
if ((ob->w == w) && (ob->h == h) &&
- (ob->rotation == rot) && (ob->depth == depth) &&
+ (ob->rotation == rot) && (ob->depth == depth) &&
(ob->priv.destination_alpha == alpha))
return;
@@ -271,7 +271,7 @@ _evas_outbuf_update_region_new(Outbuf *ob, int x, int y, int w, int h, int *cx,
RGBA_Image *img;
Eina_Rectangle *rect;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, ob->w, ob->h);
if ((w <= 0) || (h <= 0)) return NULL;
@@ -340,7 +340,7 @@ _evas_outbuf_update_region_new(Outbuf *ob, int x, int y, int w, int h, int *cx,
img->extended_info = rect;
- ob->priv.pending_writes =
+ ob->priv.pending_writes =
eina_list_append(ob->priv.pending_writes, img);
if (cx) *cx = 0;
@@ -353,7 +353,7 @@ _evas_outbuf_update_region_new(Outbuf *ob, int x, int y, int w, int h, int *cx,
return NULL;
}
-void
+void
_evas_outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w, int h)
{
Gfx_Func_Convert func = NULL;
@@ -364,7 +364,7 @@ _evas_outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, in
int ww = 0, hh = 0;
int rx = 0, ry = 0;
- LOGFN(__FILE__, __LINE__, __FUNCTION__);
+ LOGFN;
/* check for valid output buffer */
if (!ob) return;
@@ -374,15 +374,15 @@ _evas_outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, in
if ((ob->rotation == 0) || (ob->rotation == 180))
{
- func =
- evas_common_convert_func_get(0, w, h, depth,
+ func =
+ evas_common_convert_func_get(0, w, h, depth,
RED_MASK, GREEN_MASK, BLUE_MASK,
PAL_MODE_NONE, ob->rotation);
}
else if ((ob->rotation == 90) || (ob->rotation == 270))
{
- func =
- evas_common_convert_func_get(0, h, w, depth,
+ func =
+ evas_common_convert_func_get(0, h, w, depth,
RED_MASK, GREEN_MASK, BLUE_MASK,
PAL_MODE_NONE, ob->rotation);
}
diff --git a/src/modules/evas/engines/wayland_shm/meson.build b/src/modules/evas/engines/wayland_shm/meson.build
index 2a181cea48..c5bbd6062c 100644
--- a/src/modules/evas/engines/wayland_shm/meson.build
+++ b/src/modules/evas/engines/wayland_shm/meson.build
@@ -4,13 +4,13 @@ engine_src = files([
'evas_outbuf.c'
])
-engine_deps = [ecore_wl2]
+engine_deps += [ecore_wl2]
engine_include_dir = include_directories(join_paths('..','wayland_common'))
shared_module(mod_full_name, engine_src,
include_directories : config_dir + [engine_include_dir],
- dependencies : [eina, evas] + engine_deps,
+ dependencies : engine_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/image_loaders/avif/evas_image_load_avif.c b/src/modules/evas/image_loaders/avif/evas_image_load_avif.c
new file mode 100644
index 0000000000..f7cfe0ef03
--- /dev/null
+++ b/src/modules/evas/image_loaders/avif/evas_image_load_avif.c
@@ -0,0 +1,376 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+#include <avif/avif.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;
+ avifDecoder *decoder;
+ double duration;
+};
+
+static int _evas_loader_avif_log_dom = -1;
+
+#ifdef ERR
+# undef ERR
+#endif
+#define ERR(...) EINA_LOG_DOM_ERR(_evas_loader_avif_log_dom, __VA_ARGS__)
+
+#ifdef WRN
+# undef WRN
+#endif
+#define WRN(...) EINA_LOG_DOM_WARN(_evas_loader_avif_log_dom, __VA_ARGS__)
+
+#ifdef INF
+# undef INF
+#endif
+#define INF(...) EINA_LOG_DOM_INFO(_evas_loader_avif_log_dom, __VA_ARGS__)
+
+static Eina_Bool
+evas_image_load_file_head_avif_internal(Evas_Loader_Internal *loader,
+ Emile_Image_Property *prop,
+ void *map, size_t length,
+ int *error)
+{
+ Evas_Image_Animated *animated;
+ avifDecoder *decoder;
+ avifResult res;
+ Eina_Bool ret;
+
+ animated = loader->animated;
+
+ ret = EINA_FALSE;
+ prop->w = 0;
+ prop->h = 0;
+ prop->alpha = EINA_FALSE;
+
+ decoder = avifDecoderCreate();
+ if (!decoder)
+ {
+ *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ return ret;
+ }
+
+ avifDecoderSetIOMemory(decoder, (const uint8_t *)map, length);
+ res = avifDecoderParse(decoder);
+ if (res != AVIF_RESULT_OK)
+ {
+ ERR("avif file format invalid");
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ goto destroy_decoder;
+ }
+
+ if (decoder->imageCount < 1)
+ {
+ ERR("avif file format invalid");
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ goto destroy_decoder;
+ }
+
+ res = avifDecoderNextImage(decoder);
+ if (res != AVIF_RESULT_OK)
+ {
+ ERR("avif file format invalid");
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ goto destroy_decoder;
+ }
+
+ prop->w = decoder->image->width;
+ prop->h = decoder->image->height;
+
+ /* 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 destroy_decoder;
+ }
+
+ prop->alpha = !!decoder->image->alphaPlane;
+
+ if (decoder->imageCount > 1)
+ {
+ animated->loop_hint = EVAS_IMAGE_ANIMATED_HINT_NONE;
+ animated->frame_count = decoder->imageCount;
+ animated->loop_count = 1;
+ animated->animated = EINA_TRUE;
+ loader->duration = decoder->duration / decoder->imageCount;
+ }
+
+ *error = EVAS_LOAD_ERROR_NONE;
+ ret = EINA_TRUE;
+
+ destroy_decoder:
+ avifDecoderDestroy(decoder);
+
+ return ret;
+}
+
+static Eina_Bool
+evas_image_load_file_data_avif_internal(Evas_Loader_Internal *loader,
+ void *pixels,
+ void *map, size_t length,
+ int *error)
+{
+ avifRGBImage rgb;
+ avifDecoder *decoder;
+ avifResult res;
+ Evas_Image_Animated *animated;
+ Eina_Bool ret;
+
+ ret = EINA_FALSE;
+
+ /* FIXME: create decoder in evas_image_load_file_data_avif instead ? */
+ decoder = loader->decoder;
+ if (!decoder)
+ {
+ decoder = avifDecoderCreate();
+ if (!decoder)
+ {
+ *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ return EINA_FALSE;
+ }
+
+ avifDecoderSetIOMemory(decoder, (const uint8_t *)map, length);
+ res = avifDecoderParse(decoder);
+ if (res != AVIF_RESULT_OK)
+ {
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ goto on_error;
+ }
+
+ loader->decoder = decoder;
+ }
+
+ animated = loader->animated;
+ if (animated->animated)
+ {
+ /* FIXME: next image instead ? */
+ res = avifDecoderNthImage(decoder, animated->cur_frame + 1);
+ if (res != AVIF_RESULT_OK)
+ {
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ goto on_error;
+ }
+ }
+ else
+ {
+ res = avifDecoderNextImage(decoder);
+ if (res != AVIF_RESULT_OK)
+ {
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ goto on_error;
+ }
+ }
+
+ avifRGBImageSetDefaults(&rgb, decoder->image);
+#ifdef WORDS_BIGENDIAN
+ rgb.format = AVIF_RGB_FORMAT_ARGB;
+#else
+ rgb.format = AVIF_RGB_FORMAT_BGRA;
+#endif
+ rgb.depth = 8;
+ rgb.pixels = pixels;
+ rgb.rowBytes = 4 * decoder->image->width;
+
+ avifImageYUVToRGB(decoder->image, &rgb);
+
+ *error = EVAS_LOAD_ERROR_NONE;
+
+ ret = EINA_TRUE;
+
+ on_error:
+
+ return ret;
+}
+
+static void *
+evas_image_load_file_open_avif(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_avif(void *loader_data)
+{
+ Evas_Loader_Internal *loader;
+
+ loader = loader_data;
+ avifDecoderDestroy(loader->decoder);
+ free(loader_data);
+}
+
+static Eina_Bool
+evas_image_load_file_head_avif(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_avif_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_avif(void *loader_data,
+ Evas_Image_Property *prop EINA_UNUSED,
+ 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_avif_internal(loader,
+ 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_avif(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_avif_func =
+{
+ EVAS_IMAGE_LOAD_VERSION,
+ evas_image_load_file_open_avif,
+ evas_image_load_file_close_avif,
+ evas_image_load_file_head_avif,
+ NULL,
+ evas_image_load_file_data_avif,
+ evas_image_load_frame_duration_avif,
+ EINA_TRUE,
+ EINA_TRUE
+};
+
+static int
+module_open(Evas_Module *em)
+{
+ if (!em) return 0;
+
+ _evas_loader_avif_log_dom = eina_log_domain_register("evas-avif", EINA_COLOR_BLUE);
+ if (_evas_loader_avif_log_dom < 0)
+ {
+ EINA_LOG_ERR("Can not create a module log domain.");
+ return 0;
+ }
+
+ em->functions = (void *)(&evas_image_load_avif_func);
+
+ return 1;
+}
+
+static void
+module_close(Evas_Module *em EINA_UNUSED)
+{
+ if (_evas_loader_avif_log_dom >= 0)
+ {
+ eina_log_domain_unregister(_evas_loader_avif_log_dom);
+ _evas_loader_avif_log_dom = -1;
+ }
+}
+
+static Evas_Module_Api evas_modapi =
+{
+ EVAS_MODULE_API_VERSION,
+ "avif",
+ "none",
+ {
+ module_open,
+ module_close
+ }
+};
+
+EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_IMAGE_LOADER, image_loader, avif);
+
+#ifndef EVAS_STATIC_BUILD_AVIF
+EVAS_EINA_MODULE_DEFINE(image_loader, avif);
+#endif
+
diff --git a/src/modules/evas/image_loaders/bmp/evas_image_load_bmp.c b/src/modules/evas/image_loaders/bmp/evas_image_load_bmp.c
index 844b9d8f08..aab48fb380 100644
--- a/src/modules/evas/image_loaders/bmp/evas_image_load_bmp.c
+++ b/src/modules/evas/image_loaders/bmp/evas_image_load_bmp.c
@@ -377,7 +377,7 @@ evas_image_load_file_head_bmp(void *loader_data,
header.height = load_opts->emile.region.h;
}
- /* It is not bad idea that bmp loader support scale down decoding
+ /* It is not bad idea that bmp loader support scale down decoding
* because of memory issue in mobile world.*/
if (load_opts->emile.scale_down_by > 1)
{
@@ -530,7 +530,7 @@ evas_image_load_file_data_bmp(void *loader_data,
header.width = opts->emile.region.w;
header.height = opts->emile.region.h;
}
- /* It is not bad idea that bmp loader support scale down decoding
+ /* It is not bad idea that bmp loader support scale down decoding
* because of memory issue in mobile world. */
if (opts->emile.scale_down_by > 1)
scale_ratio = opts->emile.scale_down_by;
@@ -1314,7 +1314,7 @@ evas_image_load_file_data_bmp(void *loader_data,
}
}
}
- else if ((header.bit_count == 16) &&
+ else if ((header.bit_count == 16) &&
(header.rmask == 0x7c00) && (header.gmask == 0x03e0) && (header.bmask == 0x001f)
)
{
diff --git a/src/modules/evas/image_loaders/dds/evas_image_load_dds.c b/src/modules/evas/image_loaders/dds/evas_image_load_dds.c
index d24707c9ae..aae960c25e 100644
--- a/src/modules/evas/image_loaders/dds/evas_image_load_dds.c
+++ b/src/modules/evas/image_loaders/dds/evas_image_load_dds.c
@@ -157,7 +157,7 @@ _dword_read(const char **m)
return val;
}
-#define FAIL() do { /*fprintf(stderr, "DDS: ERROR at %s:%d\n", __FUNCTION__, __LINE__);*/ goto on_error; } while (0)
+#define FAIL() do { /*fprintf(stderr, "DDS: ERROR at %s:%d\n", __func__, __LINE__);*/ goto on_error; } while (0)
static Eina_Bool
evas_image_load_file_head_dds(void *loader_data,
diff --git a/src/modules/evas/image_loaders/gif/evas_image_load_gif.c b/src/modules/evas/image_loaders/gif/evas_image_load_gif.c
index 02412a280d..fec8f4bb09 100644
--- a/src/modules/evas/image_loaders/gif/evas_image_load_gif.c
+++ b/src/modules/evas/image_loaders/gif/evas_image_load_gif.c
@@ -32,7 +32,7 @@ struct _Frame_Info
{
int x, y, w, h;
unsigned short delay; // delay time in 1/100ths of a sec
- short transparent : 10; // -1 == not, anything else == index
+ short transparent : 10; // -1 == not, anything else == index
short dispose : 6; // 0, 1, 2, 3 (others invalid)
Eina_Bool interlace : 1; // interlaced or not
};
@@ -69,7 +69,7 @@ _fill_image(DATA32 *data, int rowpix, DATA32 val, int x, int y, int w, int h)
{
int xx, yy;
DATA32 *p;
-
+
for (yy = 0; yy < h; yy++)
{
p = data + ((y + yy) * rowpix) + x;
@@ -263,7 +263,7 @@ _decode_image(GifFileType *gif, DATA32 *data, int rowpix, int xin, int yin,
if (cmap)
{
- // fill in local color table of guaranteed 256 entires with cmap & pad
+ // fill in local color table of guaranteed 256 entries with cmap & pad
for (cnum = 0; cnum < cmap->ColorCount; cnum++)
colors[cnum] = cmap->Colors[cnum];
for (cnum = cmap->ColorCount; cnum < 256; cnum++)
@@ -384,14 +384,14 @@ _flush_older_frames(Evas_Image_Animated *animated,
if (!l) l = animated->frames;
}
}
-
+
static int
_file_read(GifFileType *gft, GifByteType *buf, int len)
{
File_Info *fi = gft->UserData;
if (fi->pos >= fi->len) return 0; // if at or past end - no
- if ((fi->pos + len) >= fi->len) len = fi->len - fi->pos;
+ if ((fi->pos + len) >= fi->len) len = fi->len - fi->pos;
memcpy(buf, fi->map + fi->pos, len);
fi->pos += len;
return len;
@@ -587,7 +587,7 @@ evas_image_load_file_data_gif2(void *loader_data,
// so we have to load multiple times to animate. what if the
// same image is shared/loaded in 2 ore more places AND animated
// there?
-
+
// use index stored in image (XXX: yuk!)
index = animated->cur_frame;
// if index is invalid for animated image - error out
@@ -665,7 +665,7 @@ open_file:
{
int ext_code;
GifByteType *ext;
-
+
ext = NULL;
DGifGetExtension(gif, &ext_code, &ext);
while (ext)
@@ -727,7 +727,7 @@ open_file:
else if (finfo->dispose == 3) // GIF_DISPOSE_RESTORE
{
Image_Entry_Frame *prevframe2;
-
+
// we need to copy data from one frame back
// from the prev frame into the current frame
// (copy the whole image - at least the sample
@@ -757,7 +757,7 @@ open_file:
}
// if we hve a frame BUT the image is not animated... different
// path
- else if ((thisframe) && (!thisframe->data) &&
+ else if ((thisframe) && (!thisframe->data) &&
(!animated->animated))
{
// if we don't have the data decoded yet - decode it
@@ -815,18 +815,18 @@ open_file:
loader->fi.map = NULL;
loader->imgnum = 0;
}
-
-on_ok:
+
+on_ok:
// no errors in header scan etc. so set err and return value
*error = EVAS_LOAD_ERROR_NONE;
ret = EINA_TRUE;
-
+
// if it was an animated image we need to copy the data to the
// pixels for the image from the frame holding the data
if (animated->animated && frame->data)
memcpy(pixels, frame->data, prop->w * prop->h * sizeof(DATA32));
prop->premul = EINA_TRUE;
-
+
on_error: // jump here on any errors to clean up
return ret;
}
@@ -846,13 +846,13 @@ evas_image_load_frame_duration_gif2(void *loader_data,
if (!animated->animated) return -1.0;
if ((start_frame + frame_num) > animated->frame_count) return -1.0;
if (frame_num < 0) return -1.0;
-
+
if (frame_num < 1) frame_num = 1;
// walk frames from start frame though and total up delays
for (i = start_frame; i < (start_frame + frame_num); i++)
{
Frame_Info *finfo;
-
+
// find the frame
frame = _find_frame(animated, i);
// no frame? barf - bad file or i/o?
diff --git a/src/modules/evas/image_loaders/heif/evas_image_load_heif.c b/src/modules/evas/image_loaders/heif/evas_image_load_heif.c
new file mode 100644
index 0000000000..bc9f2a1e06
--- /dev/null
+++ b/src/modules/evas/image_loaders/heif/evas_image_load_heif.c
@@ -0,0 +1,300 @@
+#define _XOPEN_SOURCE 600
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+
+#include <libheif/heif.h>
+
+#include "evas_common_private.h"
+#include "evas_private.h"
+
+static int _evas_loader_heif_log_dom = -1;
+
+#ifdef ERR
+# undef ERR
+#endif
+#define ERR(...) EINA_LOG_DOM_ERR(_evas_loader_heif_log_dom, __VA_ARGS__)
+
+#ifdef INF
+# undef INF
+#endif
+#define INF(...) EINA_LOG_DOM_INFO(_evas_loader_heif_log_dom, __VA_ARGS__)
+
+
+static void *
+evas_image_load_file_open_heif(Eina_File *f, Eina_Stringshare *key EINA_UNUSED,
+ Evas_Image_Load_Opts *opts EINA_UNUSED,
+ Evas_Image_Animated *animated EINA_UNUSED,
+ int *error EINA_UNUSED)
+{
+ return f;
+}
+
+static void
+evas_image_load_file_close_heif(void *loader_data EINA_UNUSED)
+{
+}
+
+static Eina_Bool
+evas_image_load_file_head_heif(void *loader_data,
+ Emile_Image_Property *prop,
+ int *error)
+{
+ Eina_File *f = loader_data;
+ void *map;
+ size_t length;
+ struct heif_error err;
+ struct heif_context* hc = NULL;
+ struct heif_image_handle* hdl = NULL;
+ struct heif_image* img = NULL;
+ Eina_Bool r = EINA_FALSE;
+
+ *error = EVAS_LOAD_ERROR_NONE;
+
+ map = eina_file_map_all(f, EINA_FILE_RANDOM);
+ length = eina_file_size_get(f);
+
+ // init prop struct with some default null values
+ prop->w = 0;
+ prop->h = 0;
+
+ if (!map || length < 1)
+ {
+ *error = EVAS_LOAD_ERROR_CORRUPT_FILE;
+ goto on_error;
+ }
+
+ hc = heif_context_alloc();
+ if (!hc) {
+ INF("cannot allocate heif_context");
+ *error = EVAS_LOAD_ERROR_CORRUPT_FILE;
+ goto on_error;
+ }
+
+ err = heif_context_read_from_memory_without_copy(hc, map, length, NULL);
+ if (err.code != heif_error_Ok) {
+ INF("%s", err.message);
+ *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
+ goto on_error;
+ }
+
+ err = heif_context_get_primary_image_handle(hc, &hdl);
+ if (err.code != heif_error_Ok) {
+ INF("%s", err.message);
+ *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
+ goto on_error;
+ }
+
+ int has_alpha = heif_image_handle_has_alpha_channel(hdl);
+
+ err = heif_decode_image(hdl, &img, heif_colorspace_RGB,
+ has_alpha ? heif_chroma_interleaved_RGBA : heif_chroma_interleaved_RGB,
+ NULL);
+ if (err.code != heif_error_Ok) {
+ INF("%s", err.message);
+ *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
+ goto on_error;
+ }
+
+ prop->w = heif_image_get_width(img, heif_channel_interleaved);
+ prop->h = heif_image_get_height(img, heif_channel_interleaved);
+ if (has_alpha != 3)
+ prop->alpha = 1;
+
+ r = EINA_TRUE;
+
+ on_error:
+ if (img) {
+ heif_image_release(img);
+ }
+
+ if (hdl) {
+ heif_image_handle_release(hdl);
+ }
+
+ if (hc) {
+ heif_context_free(hc);
+ }
+ eina_file_map_free(f, map);
+ return r;
+}
+
+static Eina_Bool
+evas_image_load_file_data_heif(void *loader_data,
+ Emile_Image_Property *prop,
+ void *pixels,
+ int *error)
+{
+ Eina_File *f = loader_data;
+
+ void *map;
+ size_t length;
+ struct heif_error err;
+ struct heif_context* hc = NULL;
+ struct heif_image_handle* hdl = NULL;
+ struct heif_image* img = NULL;
+ unsigned int x, y;
+ int stride, bps = 3;
+ const uint8_t* data;
+ uint8_t* dd = (uint8_t*)pixels, *ds = NULL;
+ Eina_Bool result = EINA_FALSE;
+
+ map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL);
+ length = eina_file_size_get(f);
+ *error = EVAS_LOAD_ERROR_CORRUPT_FILE;
+ if (!map || length < 1)
+ goto on_error;
+
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ result = EINA_FALSE;
+
+ hc = heif_context_alloc();
+ if (!hc) {
+ INF("cannot allocate heif_context");
+ *error = EVAS_LOAD_ERROR_CORRUPT_FILE;
+ goto on_error;
+ }
+
+ err = heif_context_read_from_memory_without_copy(hc, map, length, NULL);
+ if (err.code != heif_error_Ok) {
+ INF("%s", err.message);
+ *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
+ goto on_error;
+ }
+
+ err = heif_context_get_primary_image_handle(hc, &hdl);
+ if (err.code != heif_error_Ok) {
+ INF("%s", err.message);
+ *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
+ goto on_error;
+ }
+
+ err = heif_decode_image(hdl, &img, heif_colorspace_RGB,
+ prop->alpha ? heif_chroma_interleaved_RGBA : heif_chroma_interleaved_RGB,
+ NULL);
+ if (err.code != heif_error_Ok) {
+ INF("%s", err.message);
+ *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
+ goto on_error;
+ }
+ if (prop->alpha) bps = 4;
+ data = heif_image_get_plane_readonly(img, heif_channel_interleaved, &stride);
+ ds = (uint8_t*)data;
+ for (y = 0; y < prop->h; y++)
+ for (x = 0; x < prop->w; x++)
+ {
+ if (bps == 3)
+ {
+ dd[3] = 0xff;
+ dd[0] = ds[2];
+ dd[1] = ds[1];
+ dd[2] = ds[0];
+ ds+=3;
+ dd+=4;
+ }
+ else
+ {
+ dd[0] = ds[2];
+ dd[1] = ds[1];
+ dd[2] = ds[0];
+ dd[3] = ds[3];
+ ds+=4;
+ dd+=4;
+ }
+ }
+ result = EINA_TRUE;
+
+ *error = EVAS_LOAD_ERROR_NONE;
+ prop->premul = EINA_TRUE;
+
+on_error:
+
+ if (map) eina_file_map_free(f, map);
+
+ if (img) {
+ // Do not free the image here when we pass it to gdk-pixbuf, as its memory will still be used by gdk-pixbuf.
+ heif_image_release(img);
+ }
+
+ if (hdl) {
+ heif_image_handle_release(hdl);
+ }
+
+ if (hc) {
+ heif_context_free(hc);
+ }
+
+ return result;
+}
+
+static const Evas_Image_Load_Func evas_image_load_heif_func = {
+ EVAS_IMAGE_LOAD_VERSION,
+ evas_image_load_file_open_heif,
+ evas_image_load_file_close_heif,
+ (void*) evas_image_load_file_head_heif,
+ NULL,
+ (void*) evas_image_load_file_data_heif,
+ NULL,
+ EINA_TRUE,
+ EINA_FALSE
+};
+
+static int
+module_open(Evas_Module *em)
+{
+ if (!em) return 0;
+ _evas_loader_heif_log_dom = eina_log_domain_register
+ ("evas-heif", EVAS_DEFAULT_LOG_COLOR);
+ if (_evas_loader_heif_log_dom < 0)
+ {
+ EINA_LOG_ERR("Can not create a module log domain.");
+ return 0;
+ }
+
+ em->functions = (void *)(&evas_image_load_heif_func);
+ return 1;
+}
+
+static void
+module_close(Evas_Module *em EINA_UNUSED)
+{
+ if (_evas_loader_heif_log_dom >= 0)
+ {
+ eina_log_domain_unregister(_evas_loader_heif_log_dom);
+ _evas_loader_heif_log_dom = -1;
+ }
+}
+
+static Evas_Module_Api evas_modapi =
+ {
+ EVAS_MODULE_API_VERSION,
+ "heif",
+ "none",
+ {
+ module_open,
+ module_close
+ }
+ };
+
+EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_IMAGE_LOADER, image_loader, heif);
+
+
+#ifndef EVAS_STATIC_BUILD_HEIF
+EVAS_EINA_MODULE_DEFINE(image_loader, heif);
+#endif
diff --git a/src/modules/evas/image_loaders/ico/evas_image_load_ico.c b/src/modules/evas/image_loaders/ico/evas_image_load_ico.c
index fea7877502..835db90030 100644
--- a/src/modules/evas/image_loaders/ico/evas_image_load_ico.c
+++ b/src/modules/evas/image_loaders/ico/evas_image_load_ico.c
@@ -386,7 +386,7 @@ evas_image_load_file_data_ico(void *loader_data,
// NULL == highest res
// biggest == highest res
// smallest == lowest res
- //
+ //
// smaller == next size SMALLER than load opts WxH (if possible)
// bigger == next size BIGGER than load opts WxH (if possible)
// more ?
diff --git a/src/modules/evas/image_loaders/meson.build b/src/modules/evas/image_loaders/meson.build
index 7a339b44c5..11b11f79c2 100644
--- a/src/modules/evas/image_loaders/meson.build
+++ b/src/modules/evas/image_loaders/meson.build
@@ -9,8 +9,9 @@ foreach loader_inst : evas_image_loaders_file
evas_package_modules = join_paths(dir_lib, 'evas', 'modules')
mod_install_dir = join_paths(evas_package_modules, 'image_loaders', loader, version_name)
shared_module('shared_loader_'+loader, file,
+ c_args : package_c_args,
include_directories : config_dir,
- dependencies : [eina, evas] + loader_deps,
+ dependencies : [eina, evas, eet, evas_ext_none_static_deps] + loader_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c b/src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c
index a541e4dcb6..0992e5e1f1 100644
--- a/src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c
+++ b/src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c
@@ -151,7 +151,7 @@ evas_image_load_file_data_pmaps(void *loader_data,
}
/* if there are some pix missing, give them a proper default */
- memset(ptr, 0xff, 4 * size);
+ memset(ptr, 0xff, sizeof(DATA32) * size);
*error = EVAS_LOAD_ERROR_NONE;
r = EINA_TRUE;
@@ -398,7 +398,7 @@ pmaps_buffer_plain_int_get(Pmaps_Buffer *b, int *val)
DATA8 lastc;
/* first skip all white space
- * Note: we are skipping here actually every character than is not
+ * Note: we are skipping here actually every character than is not
* a digit */
while (!isdigit(*b->current))
{
@@ -523,7 +523,7 @@ static int
pmaps_buffer_plain_bw_get(Pmaps_Buffer *b, DATA32 *val)
{
/* first skip all white space
- * Note: we are skipping here actually every character than is not
+ * Note: we are skipping here actually every character than is not
* a digit */
while (!isdigit(*b->current))
{
diff --git a/src/modules/evas/image_loaders/png/evas_image_load_png.c b/src/modules/evas/image_loaders/png/evas_image_load_png.c
index 3af01a1a2d..9e5073cc5b 100644
--- a/src/modules/evas/image_loaders/png/evas_image_load_png.c
+++ b/src/modules/evas/image_loaders/png/evas_image_load_png.c
@@ -116,19 +116,21 @@ static Eina_Bool
_evas_image_load_file_internal_head_png(Evas_Loader_Internal *loader,
Evas_Image_Property *prop,
Evas_PNG_Info *epi,
- int *error, Eina_Bool is_for_data)
+ int *error, Eina_Bool is_for_head)
{
Evas_Image_Load_Opts *opts = loader->opts;
Eina_File *f = loader->f;
volatile Eina_Bool r = EINA_FALSE;
+ const char *filename;
+ unsigned int filename_len = 0;
*error = EVAS_LOAD_ERROR_NONE;
epi->hasa = 0;
- if (!is_for_data)
- epi->map = eina_file_map_all(f, EINA_FILE_RANDOM);
- else
+ if (!is_for_head)
epi->map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL);
+ else
+ epi->map = eina_file_map_all(f, EINA_FILE_RANDOM);
if (!epi->map)
{
*error = EVAS_LOAD_ERROR_CORRUPT_FILE;
@@ -219,7 +221,7 @@ _evas_image_load_file_internal_head_png(Evas_Loader_Internal *loader,
if (png_get_valid(epi->png_ptr, epi->info_ptr, PNG_INFO_tRNS))
{
/* expand transparency entry -> alpha channel if present */
- if (!is_for_data) png_set_tRNS_to_alpha(epi->png_ptr);
+ if (!is_for_head) png_set_tRNS_to_alpha(epi->png_ptr);
epi->hasa = 1;
}
@@ -238,7 +240,10 @@ _evas_image_load_file_internal_head_png(Evas_Loader_Internal *loader,
}
if (epi->hasa) prop->info.alpha = 1;
- prop->need_data = eina_str_has_extension(eina_file_filename_get(f), ".9.png");
+ filename = eina_file_filename_get(f);
+ if (filename) filename_len = strlen(filename);
+ prop->need_data = (filename_len > 6 && filename[filename_len - 7] != '/') &&
+ (eina_str_has_extension(filename, ".9.png"));
if (prop->need_data)
{
// Adjust size to take into account the 9 patch pixels information
@@ -248,7 +253,7 @@ _evas_image_load_file_internal_head_png(Evas_Loader_Internal *loader,
r = EINA_TRUE;
- if (!is_for_data) return r;
+ if (!is_for_head) return r;
close_file:
if (epi->png_ptr) png_destroy_read_struct(&epi->png_ptr,
@@ -316,6 +321,12 @@ evas_image_load_file_head_with_data_png(void *loader_data,
if (!_evas_image_load_file_internal_head_png(loader, prop, &epi, error, EINA_FALSE))
return EINA_FALSE;
+ if (setjmp(png_jmpbuf(epi.png_ptr)))
+ {
+ *error = EVAS_LOAD_ERROR_CORRUPT_FILE;
+ goto close_file;
+ }
+
image_w = epi.w32;
image_h = epi.h32;
@@ -462,6 +473,13 @@ evas_image_load_file_head_with_data_png(void *loader_data,
evas_loader_helper_stretch_region_push(&prop->stretch.horizontal.region,
&current, stretchable);
}
+ // End with strechable, add length info
+ if (stretchable)
+ {
+ evas_loader_helper_stretch_region_push(&prop->stretch.horizontal.region,
+ &current, stretchable);
+ stretchable = !stretchable;
+ }
current = 0;
@@ -502,13 +520,20 @@ evas_image_load_file_head_with_data_png(void *loader_data,
evas_loader_helper_stretch_region_push(&prop->stretch.vertical.region,
&current, stretchable);
}
+ // End with strechable, add length info
+ if (stretchable)
+ {
+ evas_loader_helper_stretch_region_push(&prop->stretch.vertical.region,
+ &current, stretchable);
+ stretchable = !stretchable;
+ }
// Content zone is optional, if not provided, we should use the one we guessed
if (prop->content.x == 0 || prop->content.y == 0)
memcpy(&prop->content, &optional_content, sizeof (Eina_Rectangle));
// Check that the limit of our content zone are correct
- // This could be handled as an incorrect file completly,
+ // This could be handled as an incorrect file completely,
// but let's try to recover
if (prop->content.x == 0 || prop->content.y == 0)
{
@@ -613,6 +638,12 @@ evas_image_load_file_data_png(void *loader_data,
if (!_evas_image_load_file_internal_head_png(loader, prop, &epi, error, EINA_FALSE))
return EINA_FALSE;
+ if (setjmp(png_jmpbuf(epi.png_ptr)))
+ {
+ *error = EVAS_LOAD_ERROR_CORRUPT_FILE;
+ goto close_file;
+ }
+
image_w = epi.w32;
image_h = epi.h32;
if (opts->emile.scale_down_by > 1)
diff --git a/src/modules/evas/image_loaders/psd/evas_image_load_psd.c b/src/modules/evas/image_loaders/psd/evas_image_load_psd.c
index c8abd1b893..58cd961acf 100644
--- a/src/modules/evas/image_loaders/psd/evas_image_load_psd.c
+++ b/src/modules/evas/image_loaders/psd/evas_image_load_psd.c
@@ -61,7 +61,7 @@ static Eina_Bool get_compressed_channels_length(PSD_Header *Head,
static int
read_ushort(const unsigned char *map, size_t length, size_t *position, unsigned short *ret)
{
- if (*position + 2 > length) return 0;
+ if (((*position) + 2) > length) return 0;
// FIXME: need to check order
*ret = (map[(*position) + 0] << 8) | map[(*position) + 1];
*position += 2;
@@ -71,7 +71,7 @@ read_ushort(const unsigned char *map, size_t length, size_t *position, unsigned
static int
read_uint(const unsigned char *map, size_t length, size_t *position, unsigned int *ret)
{
- if (*position + 4 > length) return 0;
+ if (((*position) + 4) > length) return 0;
// FIXME: need to check order
*ret = ARGB_JOIN(map[(*position) + 0], map[(*position) + 1], map[(*position) + 2], map[(*position) + 3]);
*position += 4;
@@ -81,14 +81,14 @@ read_uint(const unsigned char *map, size_t length, size_t *position, unsigned in
static int
read_block(const unsigned char *map, size_t length, size_t *position, void *target, size_t size)
{
- if (*position + size > length) return 0;
+ if (((*position) + size) > length) return 0;
memcpy(target, map + *position, size);
*position += size;
return 1;
}
// Internal function used to get the Psd header from the current file.
-Eina_Bool
+static Eina_Bool
psd_get_header(PSD_Header *header, const unsigned char *map, size_t length, size_t *position)
{
unsigned short tmp;
@@ -114,7 +114,7 @@ psd_get_header(PSD_Header *header, const unsigned char *map, size_t length, size
// Internal function used to check if the HEADER is a valid Psd header.
-Eina_Bool
+static Eina_Bool
is_psd(PSD_Header *header)
{
if (strncmp((char*)header->signature, "8BPS", 4))
@@ -190,7 +190,7 @@ evas_image_load_file_head_psd(void *loader_data,
static unsigned int
read_compressed_channel(const unsigned char *map, size_t length, size_t *position,
- const unsigned int channel_length EINA_UNUSED,
+ const unsigned int channel_length EINA_UNUSED,
unsigned int size,
unsigned char* channel)
{
@@ -238,7 +238,7 @@ read_compressed_channel(const unsigned char *map, size_t length, size_t *positio
}
-Eina_Bool
+static Eina_Bool
psd_get_data(PSD_Header *head,
const unsigned char *map, size_t length, size_t *position,
unsigned char *buffer, Eina_Bool compressed,
@@ -492,7 +492,7 @@ psd_get_data(PSD_Header *head,
}
-Eina_Bool
+static Eina_Bool
get_single_channel(PSD_Header *head,
const unsigned char *map, size_t length, size_t *position,
unsigned char *buffer,
@@ -552,7 +552,7 @@ get_single_channel(PSD_Header *head,
return EINA_TRUE;
}
-Eina_Bool
+static Eina_Bool
read_psd_grey(void *pixels, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error)
{
unsigned int color_mode, resource_size, misc_info;
@@ -566,15 +566,19 @@ read_psd_grey(void *pixels, PSD_Header *head, const unsigned char *map, size_t l
CHECK_RET(read_uint(map, length, position, &color_mode));
// Skip over the 'color mode data section'
*position += color_mode;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_uint(map, length, position, &resource_size));
// Read the 'image resources section'
*position += resource_size;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_uint(map, length, position, &misc_info));
*position += misc_info;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_ushort(map, length, position, &compressed));
+ if (compressed != 0) compressed = EINA_TRUE;
head->channel_num = head->channels;
// Temporary to read only one channel...some greyscale .psd files have 2.
@@ -602,7 +606,7 @@ read_psd_grey(void *pixels, PSD_Header *head, const unsigned char *map, size_t l
}
-Eina_Bool
+static Eina_Bool
read_psd_indexed(void *pixels, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error)
{
unsigned int color_mode, resource_size, misc_info;
@@ -624,15 +628,19 @@ read_psd_indexed(void *pixels, PSD_Header *head, const unsigned char *map, size_
*/
// Skip over the 'color mode data section'
*position += color_mode;
+ if ((*position) >= length) return EINA_FALSE;
// Read the 'image resources section'
CHECK_RET(read_uint(map, length, position, &resource_size));
*position += resource_size;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_uint(map, length, position, &misc_info));
*position += misc_info;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_ushort(map, length, position, &compressed));
+ if (compressed != 0) compressed = EINA_TRUE;
if (head->channels != 1 || head->depth != 8)
{
@@ -648,7 +656,7 @@ read_psd_indexed(void *pixels, PSD_Header *head, const unsigned char *map, size_
#undef CHECK_RET
}
-Eina_Bool
+static Eina_Bool
read_psd_rgb(void *pixels, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error)
{
unsigned int color_mode, resource_size, misc_info;
@@ -660,15 +668,19 @@ read_psd_rgb(void *pixels, PSD_Header *head, const unsigned char *map, size_t le
CHECK_RET(read_uint(map, length, position, &color_mode));
// Skip over the 'color mode data section'
*position += color_mode;
+ if ((*position) >= length) return EINA_FALSE;
// Read the 'image resources section'
CHECK_RET(read_uint(map, length, position, &resource_size));
*position += resource_size;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_uint(map, length, position, &misc_info));
*position += misc_info;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_ushort(map, length, position, &compressed));
+ if (compressed != 0) compressed = EINA_TRUE;
head->channel_num = head->channels;
@@ -690,7 +702,7 @@ read_psd_rgb(void *pixels, PSD_Header *head, const unsigned char *map, size_t le
#undef CHECK_RET
}
-Eina_Bool
+static Eina_Bool
read_psd_cmyk(Emile_Image_Property *prop, void *pixels, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error)
{
unsigned int color_mode, resource_size, misc_info, size, j, data_size;
@@ -707,15 +719,19 @@ read_psd_cmyk(Emile_Image_Property *prop, void *pixels, PSD_Header *head, const
CHECK_RET(read_uint(map, length, position, &color_mode));
// Skip over the 'color mode data section'
*position += color_mode;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_uint(map, length, position, &resource_size));
// Read the 'image resources section'
*position += resource_size;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_uint(map, length, position, &misc_info));
*position += misc_info;
+ if ((*position) >= length) return EINA_FALSE;
CHECK_RET(read_ushort(map, length, position, &compressed));
+ if (compressed != 0) compressed = EINA_TRUE;
switch (head->channels)
{
diff --git a/src/modules/evas/image_loaders/tga/evas_image_load_tga.c b/src/modules/evas/image_loaders/tga/evas_image_load_tga.c
index d8ef67fc59..34ee83e0b1 100644
--- a/src/modules/evas/image_loaders/tga/evas_image_load_tga.c
+++ b/src/modules/evas/image_loaders/tga/evas_image_load_tga.c
@@ -77,7 +77,7 @@ evas_image_load_file_head_tga(void *loader_data,
tga_footer *footer, tfooter;
char hasa = 0;
int w, h, bpp;
- int x, y;
+// int x, y;
Eina_Bool r = EINA_FALSE;
*error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
@@ -104,7 +104,6 @@ evas_image_load_file_head_tga(void *loader_data,
}
}
// else goto close_file;
- //printf("1\n");
filedata = (unsigned char *)filedata + sizeof(tga_header);
switch (header->imageType)
@@ -135,13 +134,14 @@ evas_image_load_file_head_tga(void *loader_data,
(header->colorMapSize == 24) ||
(header->colorMapSize == 32)))
goto close_file;
- x = (header->xOriginHi << 8) | (header->xOriginLo);
- y = (header->yOriginHi << 8) | (header->yOriginLo);
+// x = (header->xOriginHi << 8) | (header->xOriginLo);
+// y = (header->yOriginHi << 8) | (header->yOriginLo);
w = (header->widthHi << 8) | header->widthLo;
h = (header->heightHi << 8) | header->heightLo;
// x origin gerater that width, y origin greater than height - wrong file
- if ((x >= w) || (y >= h))
- goto close_file;
+// if ((x >= w) || (y >= h))
+// goto close_file;
+ printf("x\n");
// if descriptor has either of the top 2 bits set... not tga
if (header->descriptor & 0xc0)
goto close_file;
@@ -237,13 +237,13 @@ evas_image_load_file_data_tga(void *loader_data,
(header->colorMapSize == 24) ||
(header->colorMapSize == 32)))
goto close_file;
- x = (header->xOriginHi << 8) | (header->xOriginLo);
- y = (header->yOriginHi << 8) | (header->yOriginLo);
+// x = (header->xOriginHi << 8) | (header->xOriginLo);
+// y = (header->yOriginHi << 8) | (header->yOriginLo);
w = (header->widthHi << 8) | header->widthLo;
h = (header->heightHi << 8) | header->heightLo;
// x origin gerater that width, y origin greater than height - wrong file
- if ((x >= w) || (y >= h))
- goto close_file;
+// if ((x >= w) || (y >= h))
+// goto close_file;
// if descriptor has either of the top 2 bits set... not tga
if (header->descriptor & 0xc0)
goto close_file;
diff --git a/src/modules/evas/image_loaders/tiff/evas_image_load_tiff.c b/src/modules/evas/image_loaders/tiff/evas_image_load_tiff.c
index 6f1cf61e14..297c8175b0 100644
--- a/src/modules/evas/image_loaders/tiff/evas_image_load_tiff.c
+++ b/src/modules/evas/image_loaders/tiff/evas_image_load_tiff.c
@@ -287,7 +287,7 @@ evas_image_load_file_data_tiff(void *loader_data,
uint32 *ps, pixel;
unsigned int a, r, g, b;
unsigned int nas = 0;
-
+
pix = pixels;
pd = pix + ((prop->h - y - 1) * prop->w);
ps = rast + (y * prop->w);
diff --git a/src/modules/evas/image_loaders/webp/evas_image_load_webp.c b/src/modules/evas/image_loaders/webp/evas_image_load_webp.c
index bd082455a2..43588a0588 100644
--- a/src/modules/evas/image_loaders/webp/evas_image_load_webp.c
+++ b/src/modules/evas/image_loaders/webp/evas_image_load_webp.c
@@ -5,10 +5,30 @@
#include <stdio.h>
#include <string.h>
#include <webp/decode.h>
+#include <webp/demux.h>
#include "evas_common_private.h"
#include "evas_private.h"
+typedef struct _Loader_Info
+{
+ Eina_File *f;
+ Evas_Image_Load_Opts *opts;
+ Evas_Image_Animated *animated;
+ WebPAnimDecoder *dec;
+ void *map;
+ Eina_Array *frames;
+}Loader_Info;
+
+// WebP Frame Information
+typedef struct _Image_Frame
+{
+ int index;
+ int timestamp;
+ double delay;
+ uint8_t *data;
+}Image_Frame;
+
static Eina_Bool
evas_image_load_file_check(Eina_File *f, void *map,
unsigned int *w, unsigned int *h, Eina_Bool *alpha,
@@ -38,16 +58,95 @@ evas_image_load_file_check(Eina_File *f, void *map,
static void *
evas_image_load_file_open_webp(Eina_File *f, Eina_Stringshare *key EINA_UNUSED,
- Evas_Image_Load_Opts *opts EINA_UNUSED,
- Evas_Image_Animated *animated EINA_UNUSED,
- int *error EINA_UNUSED)
+ Evas_Image_Load_Opts *opts,
+ Evas_Image_Animated *animated,
+ int *error)
+{
+ Loader_Info *loader = calloc(1, sizeof (Loader_Info));
+ if (!loader)
+ {
+ *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ return NULL;
+ }
+ loader->f = eina_file_dup(f);
+ loader->opts = opts;
+ loader->animated = animated;
+ return loader;
+}
+
+static void
+_free_all_frame(Loader_Info *loader)
+{
+ Image_Frame *frame;
+
+ if (!loader->frames) return;
+
+ for (unsigned int i = 0; i < eina_array_count(loader->frames); ++i)
+ {
+ frame = eina_array_data_get(loader->frames, i);
+ if (frame->data)
+ {
+ free(frame->data);
+ frame->data = NULL;
+ }
+ free(frame);
+ }
+}
+
+
+static void
+evas_image_load_file_close_webp(void *loader_data)
{
- return f;
+ // Free Allocated Data
+ Loader_Info *loader = loader_data;
+ _free_all_frame(loader);
+ eina_array_free(loader->frames);
+ if (loader->dec) WebPAnimDecoderDelete(loader->dec);
+ if ((loader->map) && (loader->f))
+ eina_file_map_free(loader->f, loader->map);
+ if (loader->f) eina_file_close(loader->f);
+ free(loader);
}
+
static void
-evas_image_load_file_close_webp(void *loader_data EINA_UNUSED)
+_new_frame(Loader_Info *loader, uint8_t *data, int width, int height, int index,
+ int pre_timestamp, int cur_timestamp)
+{
+ // Allocate Frame Data
+ Image_Frame *frame;
+
+ frame = calloc(1, sizeof(Image_Frame));
+ if (!frame) return;
+
+ frame->data = calloc(width * height * 4, sizeof(uint8_t));
+ if (!frame->data)
+ {
+ free(frame);
+ return;
+ }
+
+ frame->index = index;
+ frame->timestamp = cur_timestamp;
+ frame->delay = ((double)(cur_timestamp - pre_timestamp)/1000.0);
+ memcpy(frame->data, data, width * height * 4);
+
+ eina_array_push(loader->frames, frame);
+}
+
+static Image_Frame *
+_find_frame(Loader_Info *loader, int index)
{
+ // Find Frame
+ Image_Frame *frame;
+
+ if (!loader->frames) return NULL;
+
+ frame = eina_array_data_get(loader->frames, index - 1);
+ if (frame->index == index)
+ return frame;
+
+ return NULL;
}
static Eina_Bool
@@ -55,20 +154,95 @@ evas_image_load_file_head_webp(void *loader_data,
Emile_Image_Property *prop,
int *error)
{
- Eina_File *f = loader_data;
- Eina_Bool r;
+ Loader_Info *loader = loader_data;
+ Evas_Image_Animated *animated = loader->animated;
+ Eina_File *f = loader->f;
void *data;
*error = EVAS_LOAD_ERROR_NONE;
data = eina_file_map_all(f, EINA_FILE_RANDOM);
+ loader->map = data;
- r = evas_image_load_file_check(f, data,
+ if (!evas_image_load_file_check(f, data,
&prop->w, &prop->h, &prop->alpha,
- error);
+ error))
+ {
+ *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
+ return EINA_FALSE;
+ }
- if (data) eina_file_map_free(f, data);
- return r;
+ // Init WebP Data
+ WebPData webp_data;
+ WebPDataInit(&webp_data);
+
+ // Assign Data
+ webp_data.bytes = data;
+ webp_data.size = eina_file_size_get(f);
+
+ // Set Decode Option
+ WebPAnimDecoderOptions dec_options;
+ WebPAnimDecoderOptionsInit(&dec_options);
+ dec_options.color_mode = MODE_BGRA;
+
+ // Create WebPAnimation Decoder
+ WebPAnimDecoder *dec = WebPAnimDecoderNew(&webp_data, &dec_options);
+ if (!dec)
+ {
+ ERR("WebP Decoder Creation is Failed");
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ return EINA_FALSE;
+ }
+ loader->dec = dec;
+
+ // Get WebP Animation Info
+ WebPAnimInfo anim_info;
+ if (!WebPAnimDecoderGetInfo(dec, &anim_info))
+ {
+ ERR("Getting WebP Information is Failed");
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ return EINA_FALSE;
+ }
+
+ uint8_t* buf;
+ int pre_timestamp = 0;
+ int cur_timestamp = 0;
+ int index = 1;
+
+ // Set Frame Array
+ loader->frames = eina_array_new(anim_info.frame_count);
+ if (!loader->frames)
+ {
+ ERR("Frame Array Allocation is Faild");
+ *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ return EINA_FALSE;
+ }
+
+ // Decode Frames
+ while (WebPAnimDecoderHasMoreFrames(dec))
+ {
+ if (!WebPAnimDecoderGetNext(dec, &buf, &cur_timestamp))
+ {
+ ERR("WebP Decoded Frame Get is Failed");
+ *error = EVAS_LOAD_ERROR_GENERIC;
+ return EINA_FALSE;
+ }
+ _new_frame(loader, buf, anim_info.canvas_width, anim_info.canvas_height, index,
+ pre_timestamp, cur_timestamp);
+ pre_timestamp = cur_timestamp;
+ index++;
+ }
+
+ // Set Animation Info
+ if (anim_info.frame_count > 1)
+ {
+ animated->animated = 1;
+ animated->loop_count = anim_info.loop_count;
+ animated->loop_hint = EVAS_IMAGE_ANIMATED_HINT_LOOP;
+ animated->frame_count = anim_info.frame_count;
+ }
+
+ return EINA_TRUE;
}
static Eina_Bool
@@ -77,37 +251,53 @@ evas_image_load_file_data_webp(void *loader_data,
void *pixels,
int *error)
{
- Eina_File *f = loader_data;
- void *data = NULL;
- void *decoded = NULL;
+ Loader_Info *loader = loader_data;
+ Evas_Image_Animated *animated = loader->animated;
+
+ *error = EVAS_LOAD_ERROR_NONE;
+
void *surface = NULL;
int width, height;
+ int index = 0;
- data = eina_file_map_all(f, EINA_FILE_SEQUENTIAL);
+ index = animated->cur_frame;
+ // Find Cur Frame
+ if (index == 0)
+ index = 1;
+ Image_Frame *frame = _find_frame(loader, index);
+ if (frame == NULL) return EINA_FALSE;
+
+ WebPAnimInfo anim_info;
+ WebPAnimDecoderGetInfo(loader->dec, &anim_info);
+ width = anim_info.canvas_width;
+ height = anim_info.canvas_height;
+
+ // Render Frame
surface = pixels;
+ memcpy(surface, frame->data, width * height * 4);
+ prop->premul = EINA_TRUE;
- decoded = WebPDecodeBGRA(data, eina_file_size_get(f), &width, &height);
- if (!decoded)
- {
- *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
- goto free_data;
- }
- *error = EVAS_LOAD_ERROR_NONE;
+ return EINA_TRUE;
+}
- if ((int) prop->w != width ||
- (int) prop->h != height)
- goto free_data;
+static double
+evas_image_load_frame_duration_webp(void *loader_data,
+ int start_frame,
+ int frame_num)
+{
+ Loader_Info *loader = loader_data;
+ Evas_Image_Animated *animated = loader->animated;
- // XXX: this copy of the surface is inefficient
- memcpy(surface, decoded, width * height * 4);
- prop->premul = EINA_TRUE;
+ if (!animated->animated) return -1.0;
+ if (frame_num < 0) return -1.0;
+ if (start_frame < 1) return -1.0;
- free_data:
- if (data) eina_file_map_free(f, data);
- free(decoded);
+ // Calculate Duration of Current Frame
+ Image_Frame *frame = _find_frame(loader, start_frame);
+ if (frame == NULL) return -1.0;
- return EINA_TRUE;
+ return frame->delay;
}
static Evas_Image_Load_Func evas_image_load_webp_func =
@@ -118,7 +308,7 @@ static Evas_Image_Load_Func evas_image_load_webp_func =
(void*) evas_image_load_file_head_webp,
NULL,
(void*) evas_image_load_file_data_webp,
- NULL,
+ evas_image_load_frame_duration_webp,
EINA_TRUE,
EINA_FALSE
};
diff --git a/src/modules/evas/image_savers/avif/evas_image_save_avif.c b/src/modules/evas/image_savers/avif/evas_image_save_avif.c
new file mode 100644
index 0000000000..61fefcefc7
--- /dev/null
+++ b/src/modules/evas/image_savers/avif/evas_image_save_avif.c
@@ -0,0 +1,181 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+#include <avif/avif.h>
+
+#include "evas_common_private.h"
+#include "evas_private.h"
+
+
+static int
+save_image_avif(RGBA_Image *im, const char *file, int quality)
+{
+ FILE *f;
+ avifRGBImage rgb;
+ avifRWData output;
+ avifImage *image;
+ avifEncoder * encoder;
+ avifPixelFormat format;
+ avifResult res;
+ size_t size;
+ int threads_count;
+ int quantizer;
+ int color;
+ int transfer;
+ int matrix;
+ int ret = 0;
+
+ if (!im || !im->image.data || !file || !*file)
+ return 0;
+
+ f = fopen(file, "wb");
+ if (!f)
+ return ret;
+
+ if (quality < 60)
+ {
+ format = AVIF_PIXEL_FORMAT_YUV420;
+#if (AVIF_VERSION < 704)
+ matrix = AVIF_NCLX_MATRIX_COEFFICIENTS_BT601;
+ color = AVIF_NCLX_COLOUR_PRIMARIES_BT601;
+#else
+ matrix = AVIF_MATRIX_COEFFICIENTS_BT601;
+ color = AVIF_COLOR_PRIMARIES_BT601;
+#endif
+ }
+ else if (quality >= 90)
+ {
+ format = AVIF_PIXEL_FORMAT_YUV444;
+#if (AVIF_VERSION < 704)
+ matrix = AVIF_NCLX_MATRIX_COEFFICIENTS_BT709;
+ color = AVIF_NCLX_COLOUR_PRIMARIES_BT709;
+#else
+ matrix = AVIF_MATRIX_COEFFICIENTS_BT709;
+ color = AVIF_COLOR_PRIMARIES_BT709;
+#endif
+ }
+ else
+ {
+ format = AVIF_PIXEL_FORMAT_YUV422;
+#if (AVIF_VERSION < 704)
+ matrix = AVIF_NCLX_MATRIX_COEFFICIENTS_BT709;
+ color = AVIF_NCLX_COLOUR_PRIMARIES_BT709;
+#else
+ matrix = AVIF_MATRIX_COEFFICIENTS_BT709;
+ color = AVIF_COLOR_PRIMARIES_BT709;
+#endif
+ }
+
+#if (AVIF_VERSION < 704)
+ transfer = AVIF_NCLX_TRANSFER_CHARACTERISTICS_SRGB;
+#else
+ transfer = AVIF_TRANSFER_CHARACTERISTICS_SRGB;
+#endif
+
+ image = avifImageCreate(im->cache_entry.w, im->cache_entry.h, 8, format);
+ if (!image)
+ goto close_f;
+
+#if (AVIF_VERSION < 704)
+ image->nclx.colourPrimaries = color;
+ image->nclx.transferCharacteristics = transfer;
+ image->nclx.matrixCoefficients = matrix;
+#else
+ image->colorPrimaries = color;
+ image->transferCharacteristics = transfer;
+ image->matrixCoefficients = matrix;
+#endif
+ image->yuvRange = AVIF_RANGE_FULL;
+
+ avifRGBImageSetDefaults(&rgb, image);
+#ifdef WORDS_BIGENDIAN
+ rgb.format = AVIF_RGB_FORMAT_ARGB;
+#else
+ rgb.format = AVIF_RGB_FORMAT_BGRA;
+#endif
+ rgb.depth = 8;
+ rgb.pixels = (uint8_t *)im->image.data;
+ rgb.rowBytes = 4 * im->cache_entry.w;
+ avifImageRGBToYUV(image, &rgb);
+
+ output.data = NULL;
+ output.size = 0;
+ encoder = avifEncoderCreate();
+ if (!encoder)
+ goto destroy_image;
+
+ threads_count = 1;
+ if (eina_cpu_count() > 2)
+ threads_count = eina_cpu_count() - 1;
+
+ quantizer = ((100 - quality) * AVIF_QUANTIZER_WORST_QUALITY) / 100;
+
+ encoder->maxThreads = threads_count;
+ encoder->minQuantizer = quantizer;
+ encoder->maxQuantizer = quantizer;
+ res = avifEncoderWrite(encoder, image, &output);
+
+ if (res != AVIF_RESULT_OK)
+ goto destroy_encoder;
+
+ size = fwrite(output.data, output.size, 1, f);
+ if (size != output.size)
+ goto destroy_encoder;
+
+ ret = 1;
+
+ destroy_encoder:
+ avifEncoderDestroy(encoder);
+ avifRWDataFree(&output);
+ destroy_image:
+ avifImageDestroy(image);
+ close_f:
+ fclose(f);
+
+ return ret;
+}
+
+static int evas_image_save_file_avif(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_avif(im, file, quality);
+}
+
+
+static Evas_Image_Save_Func evas_image_save_avif_func =
+{
+ evas_image_save_file_avif
+};
+
+static int
+module_open(Evas_Module *em)
+{
+ if (!em) return 0;
+ em->functions = (void *)(&evas_image_save_avif_func);
+ return 1;
+}
+
+static void
+module_close(Evas_Module *em EINA_UNUSED)
+{
+}
+
+static Evas_Module_Api evas_modapi =
+{
+ EVAS_MODULE_API_VERSION,
+ "avif",
+ "none",
+ {
+ module_open,
+ module_close
+ }
+};
+
+EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_IMAGE_SAVER, image_saver, avif);
+
+#ifndef EVAS_STATIC_BUILD_AVIF
+EVAS_EINA_MODULE_DEFINE(image_saver, avif);
+#endif
diff --git a/src/modules/evas/image_savers/meson.build b/src/modules/evas/image_savers/meson.build
index 6e1e346d06..e30a05fe3b 100644
--- a/src/modules/evas/image_savers/meson.build
+++ b/src/modules/evas/image_savers/meson.build
@@ -9,8 +9,9 @@ foreach loader_inst : evas_image_savers_file
evas_package_modules = join_paths(dir_lib, 'evas', 'modules')
mod_install_dir = join_paths(evas_package_modules, 'image_savers', loader, version_name)
shared_module('shared_saver_'+loader, file,
+ c_args : package_c_args,
include_directories : config_dir,
- dependencies : [eina, evas] + loader_deps,
+ dependencies : [eina, evas, eet, evas_ext_none_static_deps] + loader_deps,
install : true,
install_dir : mod_install_dir,
name_suffix : sys_mod_extension
diff --git a/src/modules/evas/image_savers/png/evas_image_save_png.c b/src/modules/evas/image_savers/png/evas_image_save_png.c
index 1aeec12c8a..95693ccc83 100644
--- a/src/modules/evas/image_savers/png/evas_image_save_png.c
+++ b/src/modules/evas/image_savers/png/evas_image_save_png.c
@@ -184,7 +184,7 @@ save_image_png(RGBA_Image *im, const char *file, int do_compress, int interlace)
return 0;
}
-static int
+static int
evas_image_save_file_png(RGBA_Image *im, const char *file, const char *key EINA_UNUSED,
int quality EINA_UNUSED, int do_compress, const char *encoding EINA_UNUSED)
{
diff --git a/src/modules/evas/image_savers/tiff/evas_image_save_tiff.c b/src/modules/evas/image_savers/tiff/evas_image_save_tiff.c
index c6dbda8ebe..3e06b112b0 100644
--- a/src/modules/evas/image_savers/tiff/evas_image_save_tiff.c
+++ b/src/modules/evas/image_savers/tiff/evas_image_save_tiff.c
@@ -45,7 +45,7 @@ save_image_tiff(RGBA_Image *im, const char *file, int compress EINA_UNUSED, int
/* By default uses patent-free use COMPRESSION_DEFLATE,
* another lossless compression technique */
TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_DEFLATE);
-
+
if (has_alpha)
{
uint16 extras[] = { EXTRASAMPLE_ASSOCALPHA };
diff --git a/src/modules/evas/meson.build b/src/modules/evas/meson.build
index a8ce54ea78..6564da0cc9 100644
--- a/src/modules/evas/meson.build
+++ b/src/modules/evas/meson.build
@@ -2,8 +2,6 @@
subdir('image_savers')
subdir('image_loaders')
-subdir('model_savers')
-subdir('model_loaders')
subdir('vg_savers')
subdir('vg_loaders')
subdir('engines')
diff --git a/src/modules/evas/model_loaders/eet/evas_model_load_eet.c b/src/modules/evas/model_loaders/eet/evas_model_load_eet.c
deleted file mode 100644
index 7ff40b9b25..0000000000
--- a/src/modules/evas/model_loaders/eet/evas_model_load_eet.c
+++ /dev/null
@@ -1,111 +0,0 @@
-#ifdef HAVE_CONFIG_H
- #include "config.h"
-#endif
-
-#include <Eo.h>
-#include <Eet.h>
-#include <stdio.h>
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-static void
-_set_geometry_to_mesh_from_eet_file(Evas_Canvas3D_Mesh *mesh,
- Evas_Canvas3D_Mesh_Eet *eet_mesh)
-{
- float *pos, *nor, *tex;
- int stride_pos, stride_nor, stride_tex, j;
-
- evas_canvas3d_mesh_vertex_count_set(mesh, eet_mesh->geometries->vertices_count);
- evas_canvas3d_mesh_vertex_assembly_set(mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_frame_add(mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 0, NULL);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 0, NULL);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 0, NULL);
- pos = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- nor = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- tex = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
- stride_pos = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- stride_nor = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- stride_tex = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
-
- if (stride_pos == 0) stride_pos = sizeof(float) * 3;
- if (stride_nor == 0) stride_nor = sizeof(float) * 3;
- if (stride_tex == 0) stride_tex = sizeof(float) * 2;
-
- /* set data to vertex buffer */
- for (j = 0; j < eet_mesh->geometries->vertices_count; j++)
- {
- float *p, *n, *t;
-
- p = (float *)((char *)pos + stride_pos * j);
- n = (float *)((char *)nor + stride_nor * j);
- t = (float *)((char *)tex + stride_tex * j);
-
- p[0] = eet_mesh->geometries->vertices[j].position.x;
- p[1] = eet_mesh->geometries->vertices[j].position.y;
- p[2] = eet_mesh->geometries->vertices[j].position.z;
-
- n[0] = eet_mesh->geometries->vertices[j].normal.x;
- n[1] = eet_mesh->geometries->vertices[j].normal.y;
- n[2] = eet_mesh->geometries->vertices[j].normal.z;
-
- t[0] = eet_mesh->geometries->vertices[j].texcoord.x;
- t[1] = eet_mesh->geometries->vertices[j].texcoord.y;
- }
-
- /* unmap vertex buffer */
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
-}
-
-static void
-_set_material_to_mesh_from_eet_file(Evas_Canvas3D_Mesh *mesh,
- Evas_Canvas3D_Mesh_Eet *eet_mesh)
-{
- Evas_Canvas3D_Object_Data *pd = efl_data_scope_get(mesh, EVAS_CANVAS3D_OBJECT_CLASS);
- Eo *material = NULL;
- material = efl_add(EVAS_CANVAS3D_MATERIAL_CLASS, pd->evas);
-
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, !!(eet_mesh->materials->colors[0].a > 0));
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, !!(eet_mesh->materials->colors[1].a > 0));
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, !!(eet_mesh->materials->colors[2].a > 0));
- evas_canvas3d_material_enable_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_NORMAL, EINA_TRUE);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT, eet_mesh->materials->colors[0].r, eet_mesh->materials->colors[0].g, eet_mesh->materials->colors[0].b, eet_mesh->materials->colors[0].a);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE, eet_mesh->materials->colors[1].r, eet_mesh->materials->colors[1].g, eet_mesh->materials->colors[1].b, eet_mesh->materials->colors[1].a);
- evas_canvas3d_material_color_set(material, EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR, eet_mesh->materials->colors[2].r, eet_mesh->materials->colors[2].g, eet_mesh->materials->colors[2].b, eet_mesh->materials->colors[2].a);
- evas_canvas3d_material_shininess_set(material, eet_mesh->materials->shininess);
-
- evas_canvas3d_mesh_frame_material_set(mesh, 0, material);
-}
-
-void
-evas_model_load_file_eet(Evas_Canvas3D_Mesh *mesh, Eina_File *file)
-{
- Eet_File *ef;
- Evas_Canvas3D_File_Eet* eet_file;
- Eet_Data_Descriptor *_file_descriptor;
-
- eet_init();
-
- _file_descriptor = _evas_canvas3d_eet_file_get();
- ef = eet_mmap(file);
- eet_file = eet_data_read(ef,
- _file_descriptor,
- EVAS_CANVAS3D_FILE_CACHE_FILE_ENTRY);
-
- eet_close(ef);
-
- if (!eet_file || !eet_file->mesh || !eet_file->header)
- {
- ERR("Failed to read model file");
- goto on_error;
- }
-
- _set_geometry_to_mesh_from_eet_file(mesh, eet_file->mesh);
- _set_material_to_mesh_from_eet_file(mesh, eet_file->mesh);
-
- on_error:
- _evas_canvas3d_eet_file_free(eet_file);
- eet_shutdown();
-}
diff --git a/src/modules/evas/model_loaders/md2/evas_model_load_md2.c b/src/modules/evas/model_loaders/md2/evas_model_load_md2.c
deleted file mode 100644
index 16dd330813..0000000000
--- a/src/modules/evas/model_loaders/md2/evas_model_load_md2.c
+++ /dev/null
@@ -1,423 +0,0 @@
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define PACKED __attribute__((__packed__))
-
-#define MD2_MAGIC_NUMBER 844121161
-#define MD2_VERSION 8
-#define MD2_FRAME_SCALE 256
-
-/* Structures for reading data from file. */
-typedef struct _MD2_Header MD2_Header;
-typedef struct _MD2_Vertex MD2_Vertex;
-typedef struct _MD2_Frame MD2_Frame;
-typedef struct _MD2_Triangle MD2_Triangle;
-typedef struct _MD2_Texcoord MD2_Texcoord;
-
-struct PACKED _MD2_Header
-{
- int magic;
- int version;
-
- int skin_width;
- int skin_height;
-
- int frame_size;
-
- int skins_count;
- int vertex_count;
- int texcoord_count;
- int triangle_count;
- int glcmd_count;
- int frame_count;
-
- int offset_skins;
- int offset_texcoords;
- int offset_triangles;
- int offset_frames;
- int offset_glcmds;
- int offset_end;
-};
-
-struct PACKED _MD2_Vertex
-{
- unsigned char pos[3];
- unsigned char normal_idx;
-};
-
-struct PACKED _MD2_Frame
-{
- float scale[3];
- float trans[3];
- char name[16];
- MD2_Vertex vertices[1];
-};
-
-struct PACKED _MD2_Triangle
-{
- unsigned short vertex_idx[3];
- unsigned short texcoord_idx[3];
-};
-
-struct PACKED _MD2_Texcoord
-{
- short s;
- short t;
-};
-
-typedef struct _MD2_Loader
-{
- char *map;
- int size;
-
- int skin_width;
- int skin_height;
-
- int frame_count;
- int frame_size;
- char *frames;
-
- int vertex_count;
- int triangle_count;
- int texcoord_count;
-
- MD2_Triangle *triangles;
- MD2_Texcoord *texcoords;
-} MD2_Loader;
-
-static const float normal_table[162][3] =
-{
- {-0.525731f, 0.000000f, 0.850651f},
- {-0.442863f, 0.238856f, 0.864188f},
- {-0.295242f, 0.000000f, 0.955423f},
- {-0.309017f, 0.500000f, 0.809017f},
- {-0.162460f, 0.262866f, 0.951056f},
- { 0.000000f, 0.000000f, 1.000000f},
- { 0.000000f, 0.850651f, 0.525731f},
- {-0.147621f, 0.716567f, 0.681718f},
- { 0.147621f, 0.716567f, 0.681718f},
- { 0.000000f, 0.525731f, 0.850651f},
- { 0.309017f, 0.500000f, 0.809017f},
- { 0.525731f, 0.000000f, 0.850651f},
- { 0.295242f, 0.000000f, 0.955423f},
- { 0.442863f, 0.238856f, 0.864188f},
- { 0.162460f, 0.262866f, 0.951056f},
- {-0.681718f, 0.147621f, 0.716567f},
- {-0.809017f, 0.309017f, 0.500000f},
- {-0.587785f, 0.425325f, 0.688191f},
- {-0.850651f, 0.525731f, 0.000000f},
- {-0.864188f, 0.442863f, 0.238856f},
- {-0.716567f, 0.681718f, 0.147621f},
- {-0.688191f, 0.587785f, 0.425325f},
- {-0.500000f, 0.809017f, 0.309017f},
- {-0.238856f, 0.864188f, 0.442863f},
- {-0.425325f, 0.688191f, 0.587785f},
- {-0.716567f, 0.681718f, -0.147621f},
- {-0.500000f, 0.809017f, -0.309017f},
- {-0.525731f, 0.850651f, 0.000000f},
- { 0.000000f, 0.850651f, -0.525731f},
- {-0.238856f, 0.864188f, -0.442863f},
- { 0.000000f, 0.955423f, -0.295242f},
- {-0.262866f, 0.951056f, -0.162460f},
- { 0.000000f, 1.000000f, 0.000000f},
- { 0.000000f, 0.955423f, 0.295242f},
- {-0.262866f, 0.951056f, 0.162460f},
- { 0.238856f, 0.864188f, 0.442863f},
- { 0.262866f, 0.951056f, 0.162460f},
- { 0.500000f, 0.809017f, 0.309017f},
- { 0.238856f, 0.864188f, -0.442863f},
- { 0.262866f, 0.951056f, -0.162460f},
- { 0.500000f, 0.809017f, -0.309017f},
- { 0.850651f, 0.525731f, 0.000000f},
- { 0.716567f, 0.681718f, 0.147621f},
- { 0.716567f, 0.681718f, -0.147621f},
- { 0.525731f, 0.850651f, 0.000000f},
- { 0.425325f, 0.688191f, 0.587785f},
- { 0.864188f, 0.442863f, 0.238856f},
- { 0.688191f, 0.587785f, 0.425325f},
- { 0.809017f, 0.309017f, 0.500000f},
- { 0.681718f, 0.147621f, 0.716567f},
- { 0.587785f, 0.425325f, 0.688191f},
- { 0.955423f, 0.295242f, 0.000000f},
- { 1.000000f, 0.000000f, 0.000000f},
- { 0.951056f, 0.162460f, 0.262866f},
- { 0.850651f, -0.525731f, 0.000000f},
- { 0.955423f, -0.295242f, 0.000000f},
- { 0.864188f, -0.442863f, 0.238856f},
- { 0.951056f, -0.162460f, 0.262866f},
- { 0.809017f, -0.309017f, 0.500000f},
- { 0.681718f, -0.147621f, 0.716567f},
- { 0.850651f, 0.000000f, 0.525731f},
- { 0.864188f, 0.442863f, -0.238856f},
- { 0.809017f, 0.309017f, -0.500000f},
- { 0.951056f, 0.162460f, -0.262866f},
- { 0.525731f, 0.000000f, -0.850651f},
- { 0.681718f, 0.147621f, -0.716567f},
- { 0.681718f, -0.147621f, -0.716567f},
- { 0.850651f, 0.000000f, -0.525731f},
- { 0.809017f, -0.309017f, -0.500000f},
- { 0.864188f, -0.442863f, -0.238856f},
- { 0.951056f, -0.162460f, -0.262866f},
- { 0.147621f, 0.716567f, -0.681718f},
- { 0.309017f, 0.500000f, -0.809017f},
- { 0.425325f, 0.688191f, -0.587785f},
- { 0.442863f, 0.238856f, -0.864188f},
- { 0.587785f, 0.425325f, -0.688191f},
- { 0.688191f, 0.587785f, -0.425325f},
- {-0.147621f, 0.716567f, -0.681718f},
- {-0.309017f, 0.500000f, -0.809017f},
- { 0.000000f, 0.525731f, -0.850651f},
- {-0.525731f, 0.000000f, -0.850651f},
- {-0.442863f, 0.238856f, -0.864188f},
- {-0.295242f, 0.000000f, -0.955423f},
- {-0.162460f, 0.262866f, -0.951056f},
- { 0.000000f, 0.000000f, -1.000000f},
- { 0.295242f, 0.000000f, -0.955423f},
- { 0.162460f, 0.262866f, -0.951056f},
- {-0.442863f, -0.238856f, -0.864188f},
- {-0.309017f, -0.500000f, -0.809017f},
- {-0.162460f, -0.262866f, -0.951056f},
- { 0.000000f, -0.850651f, -0.525731f},
- {-0.147621f, -0.716567f, -0.681718f},
- { 0.147621f, -0.716567f, -0.681718f},
- { 0.000000f, -0.525731f, -0.850651f},
- { 0.309017f, -0.500000f, -0.809017f},
- { 0.442863f, -0.238856f, -0.864188f},
- { 0.162460f, -0.262866f, -0.951056f},
- { 0.238856f, -0.864188f, -0.442863f},
- { 0.500000f, -0.809017f, -0.309017f},
- { 0.425325f, -0.688191f, -0.587785f},
- { 0.716567f, -0.681718f, -0.147621f},
- { 0.688191f, -0.587785f, -0.425325f},
- { 0.587785f, -0.425325f, -0.688191f},
- { 0.000000f, -0.955423f, -0.295242f},
- { 0.000000f, -1.000000f, 0.000000f},
- { 0.262866f, -0.951056f, -0.162460f},
- { 0.000000f, -0.850651f, 0.525731f},
- { 0.000000f, -0.955423f, 0.295242f},
- { 0.238856f, -0.864188f, 0.442863f},
- { 0.262866f, -0.951056f, 0.162460f},
- { 0.500000f, -0.809017f, 0.309017f},
- { 0.716567f, -0.681718f, 0.147621f},
- { 0.525731f, -0.850651f, 0.000000f},
- {-0.238856f, -0.864188f, -0.442863f},
- {-0.500000f, -0.809017f, -0.309017f},
- {-0.262866f, -0.951056f, -0.162460f},
- {-0.850651f, -0.525731f, 0.000000f},
- {-0.716567f, -0.681718f, -0.147621f},
- {-0.716567f, -0.681718f, 0.147621f},
- {-0.525731f, -0.850651f, 0.000000f},
- {-0.500000f, -0.809017f, 0.309017f},
- {-0.238856f, -0.864188f, 0.442863f},
- {-0.262866f, -0.951056f, 0.162460f},
- {-0.864188f, -0.442863f, 0.238856f},
- {-0.809017f, -0.309017f, 0.500000f},
- {-0.688191f, -0.587785f, 0.425325f},
- {-0.681718f, -0.147621f, 0.716567f},
- {-0.442863f, -0.238856f, 0.864188f},
- {-0.587785f, -0.425325f, 0.688191f},
- {-0.309017f, -0.500000f, 0.809017f},
- {-0.147621f, -0.716567f, 0.681718f},
- {-0.425325f, -0.688191f, 0.587785f},
- {-0.162460f, -0.262866f, 0.951056f},
- { 0.442863f, -0.238856f, 0.864188f},
- { 0.162460f, -0.262866f, 0.951056f},
- { 0.309017f, -0.500000f, 0.809017f},
- { 0.147621f, -0.716567f, 0.681718f},
- { 0.000000f, -0.525731f, 0.850651f},
- { 0.425325f, -0.688191f, 0.587785f},
- { 0.587785f, -0.425325f, 0.688191f},
- { 0.688191f, -0.587785f, 0.425325f},
- {-0.955423f, 0.295242f, 0.000000f},
- {-0.951056f, 0.162460f, 0.262866f},
- {-1.000000f, 0.000000f, 0.000000f},
- {-0.850651f, 0.000000f, 0.525731f},
- {-0.955423f, -0.295242f, 0.000000f},
- {-0.951056f, -0.162460f, 0.262866f},
- {-0.864188f, 0.442863f, -0.238856f},
- {-0.951056f, 0.162460f, -0.262866f},
- {-0.809017f, 0.309017f, -0.500000f},
- {-0.864188f, -0.442863f, -0.238856f},
- {-0.951056f, -0.162460f, -0.262866f},
- {-0.809017f, -0.309017f, -0.500000f},
- {-0.681718f, 0.147621f, -0.716567f},
- {-0.681718f, -0.147621f, -0.716567f},
- {-0.850651f, 0.000000f, -0.525731f},
- {-0.688191f, 0.587785f, -0.425325f},
- {-0.587785f, 0.425325f, -0.688191f},
- {-0.425325f, 0.688191f, -0.587785f},
- {-0.425325f, -0.688191f, -0.587785f},
- {-0.587785f, -0.425325f, -0.688191f},
- {-0.688191f, -0.587785f, -0.425325f},
-};
-
-static inline Eina_Bool
-_md2_loader_init(MD2_Loader *loader, Eina_File *file)
-{
- MD2_Header header;
-
- memset(loader, 0x00, sizeof(MD2_Loader));
-
- loader->map = eina_file_map_all(file, EINA_FILE_SEQUENTIAL);
-
- if (loader->map == NULL)
- {
- ERR("Failed to create map from file %s\n", eina_file_filename_get(file));
- goto error;
- }
-
- /* Check file size. We require a file larger than MD2 header size. */
- loader->size = eina_file_size_get(file);
-
- if (loader->size < (int)sizeof(MD2_Header))
- goto error;
-
- /* Read header. */
- memcpy(&header, loader->map, sizeof(MD2_Header));
-
- /* Check identity */
- if (header.magic != MD2_MAGIC_NUMBER || header.version != MD2_VERSION)
- goto error;
-
- /* Check offsets */
- if (header.offset_skins > header.offset_end)
- goto error;
-
- if (header.offset_texcoords > header.offset_end)
- goto error;
-
- if (header.offset_triangles > header.offset_end)
- goto error;
-
- if (header.offset_frames > header.offset_end)
- goto error;
-
- if (header.offset_glcmds > header.offset_end)
- goto error;
-
- if (header.offset_end > loader->size)
- goto error;
-
- loader->skin_width = header.skin_width;
- loader->skin_height = header.skin_height;
-
- loader->frame_count = header.frame_count;
- loader->frame_size = header.frame_size;
- loader->frames = loader->map + header.offset_frames;
-
- loader->vertex_count = header.vertex_count;
- loader->triangle_count = header.triangle_count;
- loader->texcoord_count = header.texcoord_count;
-
- loader->triangles = (MD2_Triangle *)(loader->map + header.offset_triangles);
- loader->texcoords = (MD2_Texcoord *)(loader->map + header.offset_texcoords);
- return EINA_TRUE;
-
-error:
- return EINA_FALSE;
-}
-
-void
-evas_model_load_file_md2(Evas_Canvas3D_Mesh *mesh, Eina_File *file)
-{
- MD2_Loader loader;
- int i, j, k;
- float *pos, *nor, *tex;
- int stride_pos, stride_nor, stride_tex;
- float s_scale, t_scale;
- Evas_Canvas3D_Mesh_Data *pd;
-
- /* Initialize MD2 loader (Open file and read MD2 head ant etc) */
- if (!_md2_loader_init(&loader, file))
- {
- ERR("Failed to initialize MD2 loader.");
- return;
- }
-
- s_scale = 1.0 / (float)(loader.skin_width - 1);
- t_scale = 1.0 / (float)(loader.skin_height - 1);
-
- evas_canvas3d_mesh_vertex_count_set(mesh, loader.triangle_count * 3);
- evas_canvas3d_mesh_vertex_assembly_set(mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
-
- /* Load frames */
- for (i = 0; i < loader.frame_count; i++)
- {
- const MD2_Frame *frame = (const MD2_Frame *)(loader.frames + loader.frame_size * i);
- int f = i * MD2_FRAME_SCALE;
-
- /* Add a mesh frame. */
- evas_canvas3d_mesh_frame_add(mesh, f);
-
- /* Allocate vertex buffer for the frame. */
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 0, NULL);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 0, NULL);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 0, NULL);
-
- /* Map vertex buffer. */
- pos = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- nor = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- tex = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
-
- stride_pos = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- stride_nor = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- stride_tex = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
-
- if (stride_pos == 0)
- stride_pos = sizeof(float) * 3;
-
- if (stride_nor == 0)
- stride_nor = sizeof(float) * 3;
-
- if (stride_tex == 0)
- stride_tex = sizeof(float) * 2;
-
- for (j = 0; j < loader.triangle_count; j++)
- {
- const MD2_Triangle *tri = &loader.triangles[j];
-
- for (k = 0; k < 3; k++)
- {
- unsigned int tidx, vidx;
- float *p, *n, *t;
-
- tidx = tri->texcoord_idx[k];
- vidx = tri->vertex_idx[k];
-
- p = (float *)((char *)pos + stride_pos * (j * 3 + k));
- n = (float *)((char *)nor + stride_nor * (j * 3 + k));
- t = (float *)((char *)tex + stride_tex * (j * 3 + k));
-
- p[0] = frame->vertices[vidx].pos[0] * frame->scale[0] + frame->trans[0];
- p[1] = frame->vertices[vidx].pos[1] * frame->scale[1] + frame->trans[1];
- p[2] = frame->vertices[vidx].pos[2] * frame->scale[2] + frame->trans[2];
-
- n[0] = normal_table[frame->vertices[vidx].normal_idx][0];
- n[1] = normal_table[frame->vertices[vidx].normal_idx][1];
- n[2] = normal_table[frame->vertices[vidx].normal_idx][2];
-
- t[0] = loader.texcoords[tidx].s * s_scale;
- t[1] = 1.0 - loader.texcoords[tidx].t * t_scale;
- }
- }
-
- /* Unmap vertex buffer. */
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, f, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
-
- pd = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
-
- if (!evas_canvas3d_mesh_aabb_add_to_frame(pd, f, stride_pos))
- {
- ERR("Axis-Aligned Bounding Box wasn't added in frame %d ", f);
- }
- }
-
- if (loader.map)
- {
- eina_file_map_free(file, loader.map);
- loader.map = NULL;
- }
-}
-
diff --git a/src/modules/evas/model_loaders/meson.build b/src/modules/evas/model_loaders/meson.build
deleted file mode 100644
index fd7ce398fb..0000000000
--- a/src/modules/evas/model_loaders/meson.build
+++ /dev/null
@@ -1 +0,0 @@
-#all the loaders here are build statically, the build instructions are in src/lib/evas/meson.build
diff --git a/src/modules/evas/model_loaders/obj/evas_model_load_obj.c b/src/modules/evas/model_loaders/obj/evas_model_load_obj.c
deleted file mode 100644
index bb2dae308a..0000000000
--- a/src/modules/evas/model_loaders/obj/evas_model_load_obj.c
+++ /dev/null
@@ -1,461 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include "stdio.h"
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-//TODO Increase of stability (reading .obj file saved with any flags).
-/* set value to position [x][y] to array name which have. */
-#define ARRAY_2D(name, x, y, count_y) (*(name + x * count_y + y))
-
-/* read 3 float values in string and put it in array */
-#define PUT_DATA_TO_ARRAY(array_name, name) \
- sscanf (current,"%f %f %f", \
- &ARRAY_2D(_##array_name##_obj, counts.current_##name##_counter, 0, 3), \
- &ARRAY_2D(_##array_name##_obj, counts.current_##name##_counter, 1, 3), \
- &ARRAY_2D(_##array_name##_obj, counts.current_##name##_counter, 2, 3)); \
- counts.current_##name##_counter++;
-
-#define AFTER_NEXT_SPACE(pointer)\
- do \
- { \
- pointer++; \
- i++; \
- } \
- while (*pointer != ' ');
-
-/* Structures for reading data from file. */
-typedef struct _OBJ_Counts OBJ_Counts;
-
-struct _OBJ_Counts
-{
- int _vertex_counter;
- int _normal_counter;
- int _texture_point_counter;
- int _triangles_counter;
-
- int current_vertex_counter;
- int current_normal_counter;
- int current_texture_point_counter;
- int current_triangles_counter;
-
- Eina_Bool existence_of_normal;
- Eina_Bool existence_of_tex_point;
-};
-
-/* create new counter */
-static inline OBJ_Counts
-_new_count_elements(void)
-{
- OBJ_Counts counts;
-
- counts._vertex_counter = 0;
- counts._normal_counter = 0;
- counts._texture_point_counter = 0;
- counts._triangles_counter = 0;
-
- counts.current_vertex_counter = 0;
- counts.current_normal_counter = 0;
- counts.current_texture_point_counter = 0;
- counts.current_triangles_counter = 0;
-
- counts.existence_of_normal = EINA_FALSE;
- counts.existence_of_tex_point = EINA_FALSE;
- return counts;
-}
-
-/* count triangles in face */
-static void
-_analyze_face_line(char * face_analyzer,
- int * count_of_triangles_in_line)
-{
- int polygon_checker = -2;
- Eina_Bool previous_is_space = EINA_TRUE;
- while ((*face_analyzer != '\n') && (*face_analyzer != '#'))
- {
- if (*face_analyzer == ' ')
- {
- previous_is_space = EINA_TRUE;
- }
- else if ((previous_is_space) && (*face_analyzer >= '0') && (*face_analyzer <= '9'))
- {
- polygon_checker++;
- previous_is_space = EINA_FALSE;
- }
- face_analyzer++;
- }
- *count_of_triangles_in_line = polygon_checker;
-}
-
-static inline OBJ_Counts
-_count_elements(char *map)//count elements of mesh in .obj
-{
- OBJ_Counts counts = _new_count_elements();
-
- char *current = map;
- int polygon_checker = -2;//polygons with n vertices can be represented as n-2 triangles
- Eina_Bool will_check_next_char = EINA_FALSE;
- Eina_Bool first_char_is_v = EINA_FALSE;
- Eina_Bool first_char_is_f = EINA_FALSE;
- Eina_Bool previous_is_space = EINA_FALSE;
-
- long i = 0;
- /* count elements of mesh in .obj */
- for (; *current != '\00'; i++)
- {
- if (will_check_next_char)
- {
- if (first_char_is_v)
- {
- switch (*current)
- {
- case ' ':
- counts._vertex_counter++;
- break;
- case 't':
- counts._texture_point_counter++;
- counts.existence_of_tex_point = EINA_TRUE;
- break;
- case 'n':
- counts._normal_counter++;
- counts.existence_of_normal = EINA_TRUE;
- break;
- default:
- break;
- }
- first_char_is_v = EINA_FALSE;
- will_check_next_char = EINA_FALSE;
- }
- else if (first_char_is_f)
- {
- switch (*current)
- {
- case '\n':
- first_char_is_f = EINA_FALSE;
- counts._triangles_counter += polygon_checker;
- polygon_checker = -2;
- previous_is_space = EINA_FALSE;
- break;
- case '#':
- first_char_is_f = EINA_FALSE;
- counts._triangles_counter += polygon_checker;
- polygon_checker = -2;
- previous_is_space = EINA_FALSE;
- break;
- case ' ':
- previous_is_space = EINA_TRUE;
- break;
- default:
- if ((previous_is_space) && (*current >= '0') && (*current <= '9'))
- {
- polygon_checker++;
- previous_is_space = EINA_FALSE;
- }
- break;
- }
- }
- else
- {
- switch (*current)
- {
- case 'v':
- first_char_is_v = EINA_TRUE;
- break;
- case 'f':
- first_char_is_f = EINA_TRUE;
- break;
- case 'm':
- will_check_next_char = EINA_FALSE;
- break;
- default:
- will_check_next_char = EINA_FALSE;
- break;
- }
- }
- }
- if (*current == '\n')
- {
- will_check_next_char = EINA_TRUE;
- }
- current++;
- }
- return counts;
-}
-
-static void
-_read_point(int *triangles,
- int num,
- OBJ_Counts counts,
- int num_cur,
- char *pointer)
-{
- if (counts.existence_of_normal)
- {
- if (counts.existence_of_tex_point)
- sscanf(pointer, "%i/%i/%i",
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3, 9),
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3 + 1, 9),
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3 + 2, 9));
- else
- sscanf(pointer, "%i//%i",
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3, 9),
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3 + 2, 9));
- }
- else
- {
- if (counts.existence_of_tex_point)
- sscanf(pointer, "%i/%i",
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3, 9),
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3 + 1, 9));
- else
- sscanf(pointer, "%i",
- &ARRAY_2D(triangles, num_cur, (num - 1) * 3, 9));
- }
-}
-
-void
-evas_model_load_file_obj(Evas_Canvas3D_Mesh *mesh, Eina_File *file)
-{
- long i;
- OBJ_Counts counts;//count elements of mesh in .obj
- Eina_Bool will_check_next_char = EINA_FALSE;
- Eina_Bool first_char_is_v = EINA_FALSE;
- Eina_Bool first_char_is_f = EINA_FALSE;
- float *pos = NULL, *nor = NULL, *tex = NULL;
- int stride_pos = 0, stride_nor = 0, stride_tex = 0;
- int j, k, data_for_one_point;
- char *current, *map;
- float *_vertices_obj = NULL, *_normales_obj = NULL, *_tex_coords_obj = NULL;
- int *_triangles;
-
- map = eina_file_map_all(file, EINA_FILE_SEQUENTIAL);
-
- if (map == NULL)
- {
- ERR("Failed to create map from file %s\n", eina_file_filename_get(file));
- return;
- }
-
- counts = _count_elements(map);
- _vertices_obj = malloc(counts._vertex_counter * 3 * sizeof(float));
- data_for_one_point = 1;
- if (counts.existence_of_normal)
- {
- data_for_one_point++;
- _normales_obj = malloc(counts._normal_counter * 3 * sizeof(float));
- }
- if (counts.existence_of_tex_point)
- {
- data_for_one_point++;
- _tex_coords_obj = malloc(counts._texture_point_counter * 3 * sizeof(float));
- }
- _triangles = malloc(counts._triangles_counter * 9 * sizeof(int));
-
- if ((map == NULL) || (_vertices_obj == NULL) || (_triangles == NULL) ||
- ((counts.existence_of_normal) && (_normales_obj == NULL)) ||
- ((counts.existence_of_tex_point) && (_tex_coords_obj == NULL)))
- {
- ERR("Allocate memory is failed.");
- free(_vertices_obj);
- free(_triangles);
- if (counts.existence_of_normal)
- free(_normales_obj);
- if (counts.existence_of_tex_point)
- free(_tex_coords_obj);
- return;
- }
-
- current = map;
- i = 0;
- /* put data to arrays */
- for (; *current != '\00'; i++)
- {
- if (will_check_next_char)
- {
- if (first_char_is_v)
- {
- switch (*current)
- {
- case ' ':
- PUT_DATA_TO_ARRAY(vertices, vertex)
- i--;
- break;
- case 't':
- current++;
- if (counts.existence_of_tex_point)
- {
- PUT_DATA_TO_ARRAY(tex_coords, texture_point)
- }
- break;
- case 'n':
- current++;
- if (counts.existence_of_normal)
- {
- PUT_DATA_TO_ARRAY(normales, normal)
- }
- break;
- default:
- break;
- }
- first_char_is_v = EINA_FALSE;
- will_check_next_char = EINA_FALSE;
- }
- else if (first_char_is_f)
- {
- char *auxiliary_pointer = current;
- int count_of_triangles_in_line;
- int the_first_point = counts.current_triangles_counter;
-
- _analyze_face_line(auxiliary_pointer,
- &count_of_triangles_in_line);
- current++;
- i++;
- _read_point(_triangles, 1, counts,
- the_first_point,
- current);
-
- AFTER_NEXT_SPACE(current)
-
- for (j = 0; j < count_of_triangles_in_line; j++)
- {
- auxiliary_pointer = current;
- if (counts.current_triangles_counter != the_first_point)
- {
- ARRAY_2D(_triangles, counts.current_triangles_counter, 0, 9) = \
- ARRAY_2D(_triangles, the_first_point, 0, 9);
- ARRAY_2D(_triangles, counts.current_triangles_counter, 1, 9) = \
- ARRAY_2D(_triangles, the_first_point, 1, 9);
- ARRAY_2D(_triangles, counts.current_triangles_counter, 2, 9) = \
- ARRAY_2D(_triangles, the_first_point, 2, 9);
- }
-
- _read_point(_triangles, 2, counts,
- counts.current_triangles_counter,
- auxiliary_pointer);
- AFTER_NEXT_SPACE(auxiliary_pointer);
- _read_point(_triangles, 3, counts,
- counts.current_triangles_counter,
- auxiliary_pointer);
- AFTER_NEXT_SPACE(current);
-
- counts.current_triangles_counter++;
- }
- first_char_is_f = EINA_FALSE;
- }
- else
- {
- switch (*current)
- {
- case 'v':
- first_char_is_v = EINA_TRUE;
- break;
- case 'f':
- first_char_is_f = EINA_TRUE;
- break;
- case 'm':
- will_check_next_char = EINA_FALSE;
- break;
- default:
- will_check_next_char = EINA_FALSE;
- break;
- }
- }
- }
- if (*current == '\n')
- {
- will_check_next_char = EINA_TRUE;
- }
- current++;
- }
-
- /* prepare of mesh and take pointers to data which must be read */
- evas_canvas3d_mesh_vertex_count_set(mesh, counts._triangles_counter * 3);
- evas_canvas3d_mesh_vertex_assembly_set(mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES);
- evas_canvas3d_mesh_frame_add(mesh, 0);
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 0, NULL);
- pos = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- stride_pos = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
-
- if (counts.existence_of_normal)
- {
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 0, NULL);
- nor = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- stride_nor = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- }
-
- if (counts.existence_of_tex_point)
- {
- evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 0, NULL);
- tex = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
- stride_tex = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
- }
-
- if (stride_pos == 0) stride_pos = sizeof(float) * 3;
- if ((counts.existence_of_normal) && (stride_nor == 0))
- stride_nor = sizeof(float) * 3;
- if ((counts.existence_of_tex_point) && (stride_tex == 0))
- stride_tex = sizeof(float) * 2;
-
- for (j = 0; j < counts._triangles_counter; j++)
- {
- for (k = 0; k < 3; k++)
- {
- float *p, *n, *t;
-
- n = NULL;
- t = NULL;
- p = (float *)((char *)pos + stride_pos * (j * 3 + k));
- if (counts.existence_of_normal)
- n = (float *)((char *)nor + stride_nor * (j * 3 + k));
- if (counts.existence_of_tex_point)
- t = (float *)((char *)tex + stride_tex * (j * 3 + k));
-
- p[0] = ARRAY_2D(_vertices_obj, (ARRAY_2D(_triangles, j, (3 * k), 9) - 1), 0, 3);
- p[1] = ARRAY_2D(_vertices_obj, (ARRAY_2D(_triangles, j, (3 * k), 9) - 1), 1, 3);
- p[2] = ARRAY_2D(_vertices_obj, (ARRAY_2D(_triangles, j, (3 * k), 9) - 1), 2, 3);
-
- if (n)
- {
- n[0] = ARRAY_2D(_normales_obj, (ARRAY_2D(_triangles, j, (3 * k + 2), 9) - 1), 0, 3);
- n[1] = ARRAY_2D(_normales_obj, (ARRAY_2D(_triangles, j, (3 * k + 2), 9) - 1), 1, 3);
- n[2] = ARRAY_2D(_normales_obj, (ARRAY_2D(_triangles, j, (3 * k + 2), 9) - 1), 2, 3);
- }
-
- if (t)
- {
- t[0] = ARRAY_2D(_tex_coords_obj, (ARRAY_2D(_triangles, j, (3 * k + 1), 9) - 1), 0, 3);
- t[1] = ARRAY_2D(_tex_coords_obj, (ARRAY_2D(_triangles, j, (3 * k + 1), 9) - 1), 1, 3);
- }
- }
- }
-
- free(_vertices_obj);
- if (counts.existence_of_normal)
- free(_normales_obj);
- if (counts.existence_of_tex_point)
- free(_tex_coords_obj);
- free(_triangles);
-
- /* Unmap vertex buffer. */
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION);
- if (counts.existence_of_normal)
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL);
- if (counts.existence_of_tex_point)
- evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD);
-
- Evas_Canvas3D_Mesh_Data *pd = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
-
- if (!evas_canvas3d_mesh_aabb_add_to_frame(pd, 0, stride_pos))
- {
- ERR("Axis-Aligned Bounding Box wasn't added in frame %d ", 0);
- }
-
- if (map)
- {
- eina_file_map_free(file, map);
- map = NULL;
- }
-}
diff --git a/src/modules/evas/model_loaders/ply/evas_model_load_ply.c b/src/modules/evas/model_loaders/ply/evas_model_load_ply.c
deleted file mode 100644
index 48d2e89419..0000000000
--- a/src/modules/evas/model_loaders/ply/evas_model_load_ply.c
+++ /dev/null
@@ -1,249 +0,0 @@
-#include "evas_model_load_save_common.h"
-
-static inline char *
-_to_next_line(char *current)
-{
- while (*current != '\n') current++;
- current++;
- return current;
-}
-
-static inline char *
-_to_begin_of_line(char *current)
-{
- while (*current != '\n') current--;
- current++;
- return current;
-}
-
-static inline char *
-_to_next_number(char *current, int count)
-{
- int i;
- for (i = 0; i < count; i++)
- {
- while (*current != ' ') current++;
- current++;
- }
- return current;
-}
-
-static inline char *
-_read_data(float *array, int place, int count, char *current, float divider)
-{
- int i;
- for (i = 0; i < count; i++)
- {
- sscanf (current,"%f", &ARRAY_2D(array, place, i, count));
- ARRAY_2D(array, place, i, count) /= divider;
- current = _to_next_number(current, 1);
- }
- return current;
-}
-
-static inline Eina_Bool
-_read_ply_header(char *map, Evas_Model_Load_Save_Header *header, const char *filename)
-{
- Eina_Bool reading_vertices = EINA_TRUE, check_next_char = EINA_FALSE;
- int vertex_lines, triangles = 0, vertices_in_current_face = 0;
- char **helping_pointer;
- char *current;
-
- helping_pointer = eina_str_split(map, "vertex ", 0);
-
- if (helping_pointer == NULL)
- {
- ERR("PLY file doesn't contain the required keyword 'vertex': %s", filename);
- return EINA_FALSE;
- }
-
- sscanf(helping_pointer[1], "%d", &header->vertices_count);
-
- free(helping_pointer[0]);
- free(helping_pointer);
-
- helping_pointer = eina_str_split(map, "end_header\n", 0);
-
- if (helping_pointer == NULL)
- {
- ERR("PLY file doesn't contain the required keyword 'end_header': %s", filename);
- return EINA_FALSE;
- }
-
- current = helping_pointer[1];
-
- vertex_lines = header->vertices_count;
- while (*current != '\0')
- {
- if (vertex_lines == 1)
- reading_vertices = EINA_FALSE;
- if (*current == '\n')
- {
- if (reading_vertices)
- vertex_lines--;
- else
- check_next_char = EINA_TRUE;
- }
- if (check_next_char)
- {
- if ((*current <= '9') && (*current >= '0'))
- vertices_in_current_face = (vertices_in_current_face * 10) + (*current - '0');
- else if (*current >= ' ')
- {
- triangles += (vertices_in_current_face - 2);
- vertices_in_current_face = 0;
- check_next_char = EINA_FALSE;
- }
- }
- current++;
- }
-
- header->indices_count = 3 * triangles;
-
- free(helping_pointer[0]);
- free(helping_pointer);
-
- /* analyse flags used when file was saved in blender */
- helping_pointer = eina_str_split(map, "property float ", 0);
-
- if (helping_pointer == NULL)
- {
- ERR("PLY file doesn't contain any float properties: %s", filename);
- return EINA_FALSE;
- }
-
- if ((helping_pointer[1] != NULL) && (*helping_pointer[1] == 'x') &&
- (helping_pointer[2] != NULL) && (*helping_pointer[2] == 'y') &&
- (helping_pointer[3] != NULL) && (*helping_pointer[3] == 'z'))
- header->existence_of_positions = EINA_TRUE;
- else
- {
- ERR("PLY file doesn't start with x,y,z float fields, they are required: %s", filename);
- free(helping_pointer[0]);
- free(helping_pointer);
- return EINA_FALSE;
- }
-
- if ((helping_pointer[4] != NULL) && (*helping_pointer[4] == 'n') &&
- (helping_pointer[5] != NULL) && (*helping_pointer[5] == 'n') &&
- (helping_pointer[6] != NULL) && (*helping_pointer[6] == 'n'))
- header->existence_of_normals = EINA_TRUE;
-
- if ((header->existence_of_normals &&
- ((helping_pointer[7] != NULL) && (*helping_pointer[7] == 's') &&
- (helping_pointer[8] != NULL) && (*helping_pointer[8] == 't'))) ||
- (!header->existence_of_normals &&
- ((helping_pointer[4] != NULL) && (*helping_pointer[4] == 's') &&
- (helping_pointer[5] != NULL) && (*helping_pointer[5] == 't'))))
- header->existence_of_tex_coords = EINA_TRUE;
-
- free(helping_pointer[0]);
- free(helping_pointer);
-
- helping_pointer = eina_str_split(map, "property uchar ", 0);
-
- if (helping_pointer == NULL)
- {
- ERR("PLY file doesn't contain any uchar properties: %s", filename);
- return EINA_FALSE;
- }
-
- if ((helping_pointer[1] != NULL) && (*helping_pointer[1] == 'r') &&
- (helping_pointer[2] != NULL) && (*helping_pointer[2] == 'g') &&
- (helping_pointer[3] != NULL) && (*helping_pointer[3] == 'b'))
- header->existence_of_colors = EINA_TRUE;
-
- free(helping_pointer[0]);
- free(helping_pointer);
-
- return EINA_TRUE;
-}
-
-static inline void
-_read_ply_vertex_data(Evas_Model_Load_Save_Header header,
- char **current,
- Evas_Model_Load_Save_Data data)
-{
- int i;
- for (i = 0; i < header.vertices_count; i++)
- {
- *current = _read_data(data.positions, i, 3, *current, 1.0);
- if (header.existence_of_normals)
- *current = _read_data(data.normals, i, 3, *current, 1.0);
- if (header.existence_of_tex_coords)
- *current = _read_data(data.tex_coords, i, 2, *current, 1.0);
- if (header.existence_of_colors)
- *current = _read_data(data.colors, i, 3, *current, 255.0);
- *current = _to_begin_of_line(*current);
- }
-}
-
-static inline void
-_read_ply_indices_data(Evas_Model_Load_Save_Header header,
- char **current,
- Evas_Model_Load_Save_Data data)
-{
- int i, j, count_of_triangles_in_line = 0;
-
- for (i = 0; i < header.indices_count;)
- {
- sscanf (*current,"%d", &count_of_triangles_in_line);
- count_of_triangles_in_line -= 2;
- *current = _to_next_number(*current, 1);
-
- sscanf (*current,"%hu", data.indices + i);
-
- for (j = 0; j < count_of_triangles_in_line; j++)
- {
- if (j > 0)
- data.indices[i] = data.indices[i - 3];
- *current = _to_next_number(*current, 1);
- sscanf (*current,"%hu %hu",
- data.indices + i + 1,
- data.indices + i + 2);
- i+=3;
- }
- *current = _to_next_line(*current);
- }
-}
-
-void
-evas_model_load_file_ply(Evas_Canvas3D_Mesh *mesh, Eina_File *file)
-{
- char *current = NULL, *map = NULL;
- Evas_Model_Load_Save_Header header = { 0, 0, 0, 0, 0, 0 };
- Evas_Model_Load_Save_Data data = { NULL, NULL, NULL, NULL, NULL };
- Evas_Model_Load_Save_Stride stride = { 0, 0, 0, 0 };
-
- map = eina_file_map_all(file, EINA_FILE_SEQUENTIAL);
- if (map == NULL)
- {
- ERR("Failed to create map from file %s\n", eina_file_filename_get(file));
- return;
- }
-
- header = evas_model_load_save_header_new();
- if(!_read_ply_header(map, &header, eina_file_filename_get(file))) return;
-
- if (!evas_model_load_allocate_data_due_to_header(header, &data))
- {
- ERR("Memory allocation is failed.");
- return;
- }
-
- current = eina_str_split(map, "end_header\n", 0)[1];
- _read_ply_vertex_data(header, &current, data);
- _read_ply_indices_data(header, &current, data);
- evas_model_load_vertex_data_to_mesh(mesh, header, data, &stride);
- evas_model_load_indices_data_to_mesh(mesh, header, data);
- evas_model_load_vertex_data_unmap(mesh, 0, header);
- evas_model_load_aabb_add_to_frame(mesh, 0, stride);
-
- if (map)
- {
- eina_file_map_free(file, map);
- map = NULL;
- }
-
- evas_model_load_save_data_free(header, &data);
-}
diff --git a/src/modules/evas/model_savers/eet/evas_model_save_eet.c b/src/modules/evas/model_savers/eet/evas_model_save_eet.c
deleted file mode 100644
index d659e411f9..0000000000
--- a/src/modules/evas/model_savers/eet/evas_model_save_eet.c
+++ /dev/null
@@ -1,205 +0,0 @@
-#ifdef HAVE_CONFIG_H
- #include "config.h"
-#endif
-
-#include <Eet.h>
-#include <stdio.h>
-#include "evas_common_private.h"
-#include "evas_private.h"
-
-#define COMPONENT_OF_DEFAULT_GREY_COLOR 0.3
-#define TRANSPARENCY_OF_DEFAULT_GREY_COLOR 0.5
-
-static void
-_set_geometry_to_eet_file_from_mesh(Evas_Canvas3D_Mesh_Data *mesh,
- Evas_Canvas3D_Mesh_Eet *eet_mesh,
- Evas_Canvas3D_Header_Eet *eet_header,
- Evas_Canvas3D_Mesh_Frame *f)
-{
- Evas_Canvas3D_Vertex_Buffer *vb;
- int i;
- float *src;
- Evas_Canvas3D_Vertex_Eet *vertices =
- calloc(1, sizeof(Evas_Canvas3D_Vertex_Eet) * mesh->vertex_count);
- Evas_Canvas3D_Geometry_Eet *geometry =
- calloc(1, sizeof(Evas_Canvas3D_Geometry_Eet));
- int *geometries = malloc(sizeof(int));
-
- if ((vertices == NULL) || (geometry == NULL))
- {
- ERR("Allocating of memory is failed.");
- free(vertices);
- free(geometry);
- free(geometries);
- return;
- }
-
- geometry->vertices_count = mesh->vertex_count;
- geometries[0] = mesh->vertex_count;
-
-#define SAVE_GEOMETRICS(a, component, command_for_z_component)\
- vb = &f->vertices[a];\
- if (vb->data == NULL)\
- {\
- ERR("Failed to read geometrics for '%s'.", #component);\
- }\
- else\
- {\
- src = (float *)vb->data;\
- for (i = 0; i < mesh->vertex_count; i++)\
- {\
- vertices[i].component.x = src[0];\
- vertices[i].component.y = src[1];\
- command_for_z_component\
- src += f->vertices[a].element_count;\
- }\
- }
- geometry->vertices = vertices;
- SAVE_GEOMETRICS(EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, position, vertices[i].position.z = src[2];)
- SAVE_GEOMETRICS(EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, normal, vertices[i].normal.z = src[2];)
- SAVE_GEOMETRICS(EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, texcoord,)
-#undef SAVE_GEOMETRICS
-
- eet_mesh->geometries = geometry;
- eet_header->geometries = geometries;
-}
-
-static void
-_set_material_to_eet_file_from_mesh(Evas_Canvas3D_Mesh_Eet *eet_mesh,
- Evas_Canvas3D_Header_Eet *eet_header,
- Evas_Canvas3D_Mesh_Frame *f)
-{
- int i;
- Evas_Canvas3D_Material_Data *material =
- efl_data_scope_get(f->material, EVAS_CANVAS3D_MATERIAL_CLASS);
- Evas_Canvas3D_Material_Eet *saved_materials =
- malloc(sizeof(Evas_Canvas3D_Material_Eet));
- Evas_Canvas3D_Color_Eet *saved_colors =
- malloc(sizeof(Evas_Canvas3D_Color_Eet) * EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT);
- int *materials = malloc(sizeof(int));
-
- if ((saved_materials == NULL) || (saved_colors == NULL))
- {
- ERR("Allocating of memory is failed.");
- free(material);
- free(saved_materials);
- free(saved_colors);
- free(materials);
- return;
- }
-
- if (material == NULL)
- {
- ERR("Material is set to the default values, because no custom material "
- "was saved earlier by evas_3d_mesh_save.");
-
- for (i = 0; i < 5; i++)
- {
- saved_colors[i].r = COMPONENT_OF_DEFAULT_GREY_COLOR;
- saved_colors[i].g = COMPONENT_OF_DEFAULT_GREY_COLOR;
- saved_colors[i].b = COMPONENT_OF_DEFAULT_GREY_COLOR;
- saved_colors[i].a = TRANSPARENCY_OF_DEFAULT_GREY_COLOR;
- }
-
- saved_materials->shininess = 50;
- }
- else
- {
-
- for (i = 0; i < 5; i++)
- {
- saved_colors[i].r = material->attribs[i].color.r;
- saved_colors[i].g = material->attribs[i].color.g;
- saved_colors[i].b = material->attribs[i].color.b;
- saved_colors[i].a = material->attribs[i].color.a;
- }
-
- saved_materials->shininess = material->shininess;
- }
-
- saved_materials->colors_count = EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT;
- materials[0] = EVAS_CANVAS3D_MATERIAL_ATTRIB_COUNT;
- saved_materials->id = 1;
- saved_materials->colors = saved_colors;
- eet_mesh->materials = saved_materials;
- eet_header->materials = materials;
-}
-
-static void
-_set_frame_to_eet_file_from_mesh(Evas_Canvas3D_Mesh_Eet *eet_mesh)
-{
- eet_mesh->frames = malloc(sizeof(Evas_Canvas3D_Frame_Eet));
-
- if (eet_mesh->frames == NULL)
- {
- ERR("Allocating of memory is failed.");
- return;
- }
-
- eet_mesh->frames->id = 1;
- eet_mesh->frames->geometry_id = 1;
- eet_mesh->frames->material_id = 1;
-}
-
-void
-evas_model_save_file_eet(const Evas_Canvas3D_Mesh *mesh,
- const char *file,
- Evas_Canvas3D_Mesh_Frame *f)
-{
- Evas_Canvas3D_Mesh_Data *pd = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
- Eet_File *ef;
- Evas_Canvas3D_Mesh_Eet* eet_mesh = malloc(sizeof(Evas_Canvas3D_Mesh_Eet));
- Evas_Canvas3D_Header_Eet* eet_header = malloc(sizeof(Evas_Canvas3D_Header_Eet));
- Eet_Data_Descriptor *_file_descriptor;
- Evas_Canvas3D_File_Eet *eet_file;
-
- eet_init();
-
- ef = eet_open(file, EET_FILE_MODE_WRITE);
- if (ef == NULL)
- {
- ERR("Opening of file is failed.");
- free(eet_mesh);
- free(eet_header);
- eet_shutdown();
- return;
- }
-
- _file_descriptor = _evas_canvas3d_eet_file_get();
-
- eet_file = _evas_canvas3d_eet_file_new();
-
- if (!eet_file)
- {
- free(eet_mesh);
- free(eet_header);
- eet_shutdown();
- return;
- }
-
- eet_mesh->materials_count = 1;
- eet_header->materials_count = 1;
- eet_mesh->frames_count = 1;
- eet_header->frames = 1;
- eet_mesh->geometries_count = 1;
- eet_header->geometries_count = 1;
- eet_header->version = 1;
-
- _set_geometry_to_eet_file_from_mesh(pd, eet_mesh, eet_header, f);
- _set_material_to_eet_file_from_mesh(eet_mesh, eet_header, f);
- _set_frame_to_eet_file_from_mesh(eet_mesh);
-
- eet_file->mesh = eet_mesh;
- eet_file->header = eet_header;
-
- eet_data_write(ef,
- _file_descriptor,
- EVAS_CANVAS3D_FILE_CACHE_FILE_ENTRY,
- eet_file,
- EINA_TRUE);
- eet_close(ef);
-
- _evas_canvas3d_eet_file_free(eet_file);
-
- eet_shutdown();
-}
diff --git a/src/modules/evas/model_savers/meson.build b/src/modules/evas/model_savers/meson.build
deleted file mode 100644
index fd7ce398fb..0000000000
--- a/src/modules/evas/model_savers/meson.build
+++ /dev/null
@@ -1 +0,0 @@
-#all the loaders here are build statically, the build instructions are in src/lib/evas/meson.build
diff --git a/src/modules/evas/model_savers/obj/evas_model_save_obj.c b/src/modules/evas/model_savers/obj/evas_model_save_obj.c
deleted file mode 100644
index f8b5491b2c..0000000000
--- a/src/modules/evas/model_savers/obj/evas_model_save_obj.c
+++ /dev/null
@@ -1,241 +0,0 @@
-#include "evas_model_load_save_common.h"
-
-static unsigned short*
-_init_obj_indices_data(Evas_Model_Load_Save_Header header)
-{
- unsigned short *i_data;
- int i = 0;
-
- if (header.existence_of_positions) i++;
- if (header.existence_of_normals) i++;
- if (header.existence_of_tex_coords) i++;
- i_data = calloc(header.vertices_count * i, sizeof(unsigned short));
-
- return i_data;
-}
-
-static void
-_vertex_data_free_cb(void *data)
-{
- eina_stringshare_del(data);
-}
-
-static void
-_write_point(FILE *obj_file,
- int num,
- int num_of_point,
- Evas_Model_Load_Save_Header header,
- unsigned short *i_data)
-{
- if (num_of_point == 0)
- fprintf(obj_file, "f ");
-
- if (header.existence_of_normals)
- {
- if (header.existence_of_tex_coords)
- fprintf(obj_file, "%hu/%hu/%hu ", i_data[num],
- i_data[num + header.vertices_count],
- i_data[num + 2 * header.vertices_count]);
- else
- fprintf(obj_file, "%hu//%hu ", i_data[num],
- i_data[num + header.vertices_count]);
- }
- else
- {
- if (header.existence_of_tex_coords)
- fprintf(obj_file, "%hu/%hu ", i_data[num],
- i_data[num + header.vertices_count]);
- else
- fprintf(obj_file, "%hu ", i_data[num]);
- }
-
- if (num_of_point == 2)
- fprintf(obj_file, "\n");
-}
-
-static inline Eina_Bool
-_write_obj_header(FILE *file,
- const char *_mtl_file_name)
-{
- time_t current_time;
- char* c_time_string;
-
- current_time = time(NULL);
-
- if (current_time == ((time_t)-1))
- {
- ERR("Failure to compute the current time.");
- return EINA_FALSE;
- }
-
- c_time_string = ctime(&current_time);
-
- if (c_time_string == NULL)
- {
- ERR("Failure to convert the current time.");
- return EINA_FALSE;
- }
-
- fprintf(file, "# Evas_Canvas3D saver OBJ v0.03 \n");
- fprintf(file, "# Current time is %s \n", c_time_string);
- fprintf(file, "mtllib %s \n\n", _mtl_file_name);
-
- return EINA_TRUE;
-}
-
-static inline void
-_write_obj_vertex_data(FILE *file,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data data,
- unsigned short *i_data)
-{
- int i, j;
- int v = -1;
- Eina_Stringshare *str, *cur_str, *cur_index;
- unsigned short cur_hu;
-
- Eina_Hash *vb;
-#define WRITE_OBJ_VERTEX_DATA(name, num, format) \
- if (header.existence_of_##name) \
- { \
- cur_hu = 0; \
- v++; \
- vb = eina_hash_string_superfast_new(_vertex_data_free_cb); \
- for (i = 0; i < header.vertices_count; i++) \
- { \
- str = eina_stringshare_printf(" "); \
- for (j = 0; j < num; j++) \
- str = eina_stringshare_printf("%s %f", str, \
- data.name[i * num + j]); \
- cur_index = eina_hash_find(vb, str); \
- if (!cur_index) \
- { \
- cur_hu++; \
- cur_str = eina_stringshare_printf("%hu", cur_hu); \
- eina_hash_add(vb, str, cur_str); \
- i_data[v * header.vertices_count + i] = cur_hu; \
- fprintf(file, "%s%s\n", format, str); \
- } \
- else sscanf(cur_index, "%hu", \
- i_data + v * header.vertices_count + i); \
- } \
- eina_hash_free(vb); \
- }
- WRITE_OBJ_VERTEX_DATA(positions, 3, "v")
- WRITE_OBJ_VERTEX_DATA(tex_coords, 2, "vt")
- WRITE_OBJ_VERTEX_DATA(normals, 3, "vn")
-#undef WRITE_OBJ_VERTEX_DATA
-}
-
-static inline void
-_write_obj_index_data(FILE *file,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data data,
- unsigned short *i_data)
-{
- int i;
- int ic;
- ic = header.indices_count ? header.indices_count : header.vertices_count;
- for (i = 0; i < ic; i++)
- _write_point(file, data.indices[i], i % 3, header, i_data);
-}
-
-static void
-_save_mesh(Evas_Canvas3D_Mesh_Data *pd,
- const char *_obj_file_name,
- const char *_mtl_file_name,
- Evas_Canvas3D_Mesh_Frame *f)
-{
- Evas_Model_Load_Save_Header header;
- Evas_Model_Load_Save_Data data;
- unsigned short *index_data;
-
- if (!evas_model_save_header_from_mesh(pd, f, &header)) return;
-
- index_data = _init_obj_indices_data(header);
- if (index_data == NULL)
- {
- ERR("Allocation of index data is failed.");
- return;
- }
-
- evas_model_save_data_from_mesh(pd, f, header, &data);
-
- FILE * _obj_file = fopen(_obj_file_name, "w+");
- if (!_obj_file)
- {
- ERR("File open '%s' for save failed", _obj_file_name);
- free(index_data);
- return;
- }
-
- if (!_write_obj_header(_obj_file, _mtl_file_name))
- {
- fclose(_obj_file);
- free(index_data);
- return;
- }
-
- _write_obj_vertex_data(_obj_file, header, data, index_data);
- fprintf(_obj_file,"usemtl Material\n s off\n");
- _write_obj_index_data(_obj_file, header, data, index_data);
- fclose(_obj_file);
- free(index_data);
- free(data.indices);
-}
-
-static void
-_save_material(Evas_Canvas3D_Mesh_Data *pd EINA_UNUSED,
- const char *_mtl_file_name,
- Evas_Canvas3D_Material_Data *mat)
-{
- FILE * _mtl_file = fopen(_mtl_file_name, "w+");
- if (!_mtl_file)
- {
- ERR("File open '%s' for save failed", _mtl_file_name);
- return;
- }
- fprintf(_mtl_file, "# Evas_Canvas3D saver OBJ v0.03 \n");//_mtl_file created in macro
- fprintf(_mtl_file, "# Material Count: 1 \n\n");
- fprintf(_mtl_file, "newmtl Material \n");
- fprintf(_mtl_file, "Ns 1.000000 \n");//exp factor for specular highlight
- fprintf(_mtl_file, "Ka %.6f %.6f %.6f \n",
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color.r,
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color.g,
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_AMBIENT].color.b);
- fprintf(_mtl_file, "Kd %.6f %.6f %.6f \n",
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color.r,
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color.g,
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_DIFFUSE].color.b);
- fprintf(_mtl_file, "Ks %.6f %.6f %.6f \n",
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color.r,
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color.g,
- (float)mat->attribs[EVAS_CANVAS3D_MATERIAL_ATTRIB_SPECULAR].color.b);
- fprintf(_mtl_file, "Ni 1.000000 \n");//optical density
- fprintf(_mtl_file, "d 1.000000 \n");//a factor d of 1.0 is fully opaque material
- fprintf(_mtl_file, "illum 2 \n");//illumination properties
-
- fclose(_mtl_file);
-}
-
-void
-evas_model_save_file_obj(const Evas_Canvas3D_Mesh *mesh,
- const char *_obj_file_name,
- Evas_Canvas3D_Mesh_Frame *f)
-{
- int len;
- char *_mtl_file_name, *_without_extention;
- Evas_Canvas3D_Material_Data *mat;
-
- len = strlen(_obj_file_name);
- _without_extention = alloca(len - 3);
- _mtl_file_name = alloca(len + 1);
- eina_strlcpy(_without_extention, _obj_file_name, len - 3);
- eina_str_join(_mtl_file_name, len + 1, '.', _without_extention, "mtl");
-
- Evas_Canvas3D_Mesh_Data *pd = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
- mat = efl_data_scope_get(f->material, EVAS_CANVAS3D_MATERIAL_CLASS);
-
- if (mat != NULL) _save_material(pd, _mtl_file_name, mat);
- _save_mesh(pd, _obj_file_name, _mtl_file_name, f);
-}
diff --git a/src/modules/evas/model_savers/ply/evas_model_save_ply.c b/src/modules/evas/model_savers/ply/evas_model_save_ply.c
deleted file mode 100644
index a805baaa05..0000000000
--- a/src/modules/evas/model_savers/ply/evas_model_save_ply.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "evas_model_load_save_common.h"
-
-static inline void
-_write_ply_header(FILE *file, Evas_Model_Load_Save_Header header)
-{
- const char *pf = "property float", *puc = "property uchar";
- fprintf(file, "ply\n" \
- "format ascii 1.0\n" \
- "comment Created by EFL evas_canvas3d_mesh_saver_ply.c version 2 " \
- "(sub 0) - www.enlightenment.org, source file: ''\n");
- fprintf(file, "element vertex %d\n", header.vertices_count);
-
- if (header.existence_of_positions)
- fprintf(file, "%s x\n%s y\n%s z\n", pf, pf, pf);
- if (header.existence_of_normals)
- fprintf(file, "%s nx\n%s ny\n%s nz\n", pf, pf, pf);
- if (header.existence_of_tex_coords)
- fprintf(file, "%s s\n%s t\n", pf, pf);
- if (header.existence_of_colors)
- fprintf(file, "%s red\n%s green\n%s blue\n", puc, puc, puc);
-
- fprintf(file, "element face %d\n" \
- "property list uchar uint vertex_indices\n" \
- "end_header\n", header.indices_count / 3);
-}
-
-static inline void
-_write_ply_vertex_data(FILE *file,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data data)
-{
- int i, j;
- for (i = 0; i < header.vertices_count; i++)
- {
-#define WRITE_PLY_VERTEX_DATA(name, num)\
- if (header.existence_of_##name)\
- for (j = 0; j < num; j++, data.name++)\
- fprintf(file, "%f ", data.name[0]);
- WRITE_PLY_VERTEX_DATA(positions, 3)
- WRITE_PLY_VERTEX_DATA(normals, 3)
- WRITE_PLY_VERTEX_DATA(tex_coords, 2)
-#undef WRITE_PLY_VERTEX_DATA
-
- if (header.existence_of_colors)
- {
- for (j = 0; j < 3; j++, data.colors++)
- fprintf(file, "%.0f ", round(data.colors[0] * 255));
- data.colors++;
- }
- fprintf(file, "\n");
- }
-}
-
-static inline void
-_write_ply_index_data(FILE *file,
- Evas_Model_Load_Save_Header header,
- Evas_Model_Load_Save_Data data)
-{
- int i, triangles_count = header.indices_count / 3;
- for (i = 0; i < triangles_count; i++, data.indices += 3)
- fprintf(file, "3 %d %d %d\n", data.indices[0],
- data.indices[1],
- data.indices[2]);
-}
-
-void
-evas_model_save_file_ply(const Evas_Canvas3D_Mesh *mesh,
- const char *file,
- Evas_Canvas3D_Mesh_Frame *f)
-{
- Evas_Model_Load_Save_Header header;
- Evas_Model_Load_Save_Data data;
-
- Evas_Canvas3D_Mesh_Data *pd = efl_data_scope_get(mesh, EVAS_CANVAS3D_MESH_CLASS);
- if (!evas_model_save_header_from_mesh(pd, f, &header)) return;
- evas_model_save_data_from_mesh(pd, f, header, &data);
-
- FILE *_ply_file = fopen(file, "w+");
- if (!_ply_file)
- {
- ERR("File open '%s' for save failed", file);
- return;
- }
-
- _write_ply_header(_ply_file, header);
- _write_ply_vertex_data(_ply_file, header, data);
- _write_ply_index_data(_ply_file, header, data);
-
- free(data.indices);
- fclose(_ply_file);
-}
diff --git a/src/modules/evas/vg_loaders/eet/evas_vg_load_eet.c b/src/modules/evas/vg_loaders/eet/evas_vg_load_eet.c
index 8d04aec0f1..fdc8eb6d22 100644
--- a/src/modules/evas/vg_loaders/eet/evas_vg_load_eet.c
+++ b/src/modules/evas/vg_loaders/eet/evas_vg_load_eet.c
@@ -42,8 +42,13 @@ evas_vg_load_file_open_eet(Eina_File *file, const char *key, int *error EINA_UNU
}
static Eina_Bool
-evas_vg_load_file_close_eet(Vg_File_Data *vfd EINA_UNUSED)
+evas_vg_load_file_close_eet(Vg_File_Data *vfd)
{
+ if (!vfd) return EINA_FALSE;
+
+ if (vfd->root) efl_unref(vfd->root);
+ free(vfd);
+
return EINA_TRUE;
}
diff --git a/src/modules/evas/vg_loaders/json/evas_vg_load_json.c b/src/modules/evas/vg_loaders/json/evas_vg_load_json.c
index ba60b444f1..db353b5dbf 100644
--- a/src/modules/evas/vg_loaders/json/evas_vg_load_json.c
+++ b/src/modules/evas/vg_loaders/json/evas_vg_load_json.c
@@ -24,7 +24,7 @@ evas_vg_load_file_close_json(Vg_File_Data *vfd)
{
if (vfd->anim_data->markers)
{
- Vg_File_Anim_Data_Marker *marker;
+ Efl_Gfx_Frame_Sector_Data *marker;
EINA_INARRAY_FOREACH(vfd->anim_data->markers, marker)
if (marker->name) eina_stringshare_del(marker->name);
eina_inarray_free(vfd->anim_data->markers);
@@ -85,9 +85,9 @@ evas_vg_load_file_open_json(Eina_File *file,
const LOTMarkerList *markerlist = lottie_animation_get_markerlist(lot_anim);
if (markerlist && markerlist->size > 0)
{
- Vg_File_Anim_Data_Marker *marker;
+ Efl_Gfx_Frame_Sector_Data *marker;
int i = 0;
- vfd->anim_data->markers = eina_inarray_new(sizeof(Vg_File_Anim_Data_Marker), 0);
+ vfd->anim_data->markers = eina_inarray_new(sizeof(Efl_Gfx_Frame_Sector_Data), 0);
eina_inarray_resize(vfd->anim_data->markers, markerlist->size);
EINA_INARRAY_FOREACH(vfd->anim_data->markers, marker)
{
diff --git a/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c b/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
index 313d3eed15..e8c46ceb1f 100644
--- a/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
+++ b/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
@@ -259,8 +259,6 @@ static struct {
_PARSE_TAG(Efl_Gfx_Fill_Rule, fill_rule, fill_rule_tags, EFL_GFX_FILL_RULE_WINDING);
-#if 0
-// unused at the moment
/* parse the dash pattern used during stroking a path.
* Value: none | <dasharray> | inherit
* Initial: none
@@ -269,7 +267,8 @@ _PARSE_TAG(Efl_Gfx_Fill_Rule, fill_rule, fill_rule_tags, EFL_GFX_FILL_RULE_WINDI
static inline void
_parse_dash_array(const char *str, Efl_Gfx_Dash** dash, int *length)
{
- double tmp[30];
+ // It is assumed that the length of the dasharray string is 255 or less.
+ double tmp[255];
char *end = NULL;
int leni, gapi, count = 0, index = 0;
@@ -291,20 +290,21 @@ _parse_dash_array(const char *str, Efl_Gfx_Dash** dash, int *length)
gapi = (2 * index + 1) % count;
(*dash)[index].length = tmp[leni];
(*dash)[index].gap = tmp[gapi];
+ index++;
}
}
else
{ // even case
*length = count/2;
*dash = calloc(*length, sizeof(Efl_Gfx_Dash));
- while (index < count)
+ while (index < *length)
{
(*dash)[index].length = tmp[2 * index];
(*dash)[index].gap = tmp[2 * index + 1];
+ index++;
}
}
}
-#endif
static Eina_Stringshare *
_id_from_url(const char *url)
@@ -773,7 +773,7 @@ _attr_parse_svg_node(void *data, const char *key, const char *value)
Svg_Doc_Node *doc = &(node->node.doc);
Svg_Length_Type type;
- // @TODO handle lenght unit.
+ // @TODO handle length unit.
if (!strcmp(key, "width"))
{
doc->width = parse_length(value, &type);
@@ -865,6 +865,13 @@ _handle_stroke_opacity_attr(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node* node,
}
static void
+_handle_stroke_dasharray_attr(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node* node, const char *value)
+{
+ node->style->stroke.flags |= SVG_STROKE_FLAGS_DASH;
+ _parse_dash_array(value, &node->style->stroke.dash, &node->style->stroke.dash_count);
+}
+
+static void
_handle_stroke_width_attr(Evas_SVG_Loader *loader, Svg_Node* node, const char *value)
{
node->style->stroke.flags |= SVG_STROKE_FLAGS_WIDTH;
@@ -911,6 +918,16 @@ _handle_transform_attr(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node* node, cons
node->transform = _parse_transformation_matrix(value);
}
+
+static void _handle_clip_path_attr(Evas_SVG_Loader* loader EINA_UNUSED, Svg_Node* node, const char* value)
+{
+ Svg_Style_Property* style = node->style;
+ style->comp.flags |= SVG_COMPOSITE_FLAGS_CLIP_PATH;
+
+ int len = strlen(value);
+ if (len >= 3 && !strncmp(value, "url", 3)) style->comp.url = _id_from_url((const char*)(value + 3));
+}
+
static void
_handle_display_attr(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node* node, const char *value)
{
@@ -942,6 +959,7 @@ static const struct {
STYLE_DEF(stroke-linejoin, stroke_linejoin),
STYLE_DEF(stroke-linecap, stroke_linecap),
STYLE_DEF(stroke-opacity, stroke_opacity),
+ STYLE_DEF(stroke-dasharray, stroke_dasharray),
STYLE_DEF(transform, transform),
STYLE_DEF(display, display)
};
@@ -995,6 +1013,10 @@ _attr_parse_g_node(void *data, const char *key, const char *value)
{
node->transform = _parse_transformation_matrix(value);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else if (!strcmp(key, "id"))
{
node->id = _copy_id(value);
@@ -1007,6 +1029,37 @@ _attr_parse_g_node(void *data, const char *key, const char *value)
}
+/* parse clipPath node
+ * https://www.w3.org/TR/SVG/struct.html#Groups
+ */
+static Eina_Bool _attr_parse_clip_path_node(void* data, const char* key, const char* value)
+{
+ Evas_SVG_Loader *loader = data;
+ Svg_Node* node = loader->svg_parse->node;
+
+ if (!strcmp(key, "style"))
+ {
+ return _attr_style_node(loader, value);
+ }
+ else if (!strcmp(key, "transform"))
+ {
+ node->transform = _parse_transformation_matrix(value);
+ }
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
+ else if (!strcmp(key, "id"))
+ {
+ node->id = _copy_id(value);
+ }
+ else
+ {
+ _parse_style_attr(loader, key, value);
+ }
+ return EINA_TRUE;
+}
+
static Svg_Node *
_create_node(Svg_Node *parent, Svg_Node_Type type)
{
@@ -1091,6 +1144,25 @@ _create_switch_node(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node *parent EINA_U
return NULL;
}
+static Svg_Node *
+_create_mask_node(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node *parent EINA_UNUSED, const char *buf EINA_UNUSED, unsigned buflen EINA_UNUSED)
+{
+ Svg_Node *node = _create_node(NULL, SVG_NODE_UNKNOWN);
+
+ node->display = EINA_FALSE;
+ return node;
+}
+
+static Svg_Node *
+_create_clipPath_node(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node *parent EINA_UNUSED, const char *buf EINA_UNUSED, unsigned buflen EINA_UNUSED)
+{
+ loader->svg_parse->node = _create_node(parent, SVG_NODE_CLIP_PATH);
+
+ eina_simple_xml_attributes_parse(buf, buflen,
+ _attr_parse_clip_path_node, loader);
+ return loader->svg_parse->node;
+}
+
static Eina_Bool
_attr_parse_path_node(void *data, const char *key, const char *value)
{
@@ -1106,6 +1178,10 @@ _attr_parse_path_node(void *data, const char *key, const char *value)
{
_attr_style_node(loader, value);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else if (!strcmp(key, "id"))
{
node->id = _copy_id(value);
@@ -1168,6 +1244,10 @@ _attr_parse_circle_node(void *data, const char *key, const char *value)
{
_attr_style_node(loader, value);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else if (!strcmp(key, "id"))
{
node->id = _copy_id(value);
@@ -1230,6 +1310,10 @@ _attr_parse_ellipse_node(void *data, const char *key, const char *value)
{
node->id = _copy_id(value);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else if (!strcmp(key, "style"))
{
_attr_style_node(loader, value);
@@ -1315,6 +1399,10 @@ _attr_parse_polygon_node(void *data, const char *key, const char *value)
{
_attr_style_node(loader, value);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else if (!strcmp(key, "id"))
{
node->id = _copy_id(value);
@@ -1381,6 +1469,13 @@ _attr_parse_rect_node(void *data, const char *key, const char *value)
if (rect_tags[i].sz - 1 == sz && !strncmp(rect_tags[i].tag, key, sz))
{
*((double*) (array + rect_tags[i].offset)) = _to_double(loader->svg_parse, value, rect_tags[i].type);
+
+ //Case if only rx or ry is declared
+ if (!strncmp(rect_tags[i].tag, "rx", sz)) rect->has_rx = EINA_TRUE;
+ if (!strncmp(rect_tags[i].tag, "ry", sz)) rect->has_ry = EINA_TRUE;
+
+ if (!EINA_DBL_EQ(rect->rx, 0) && EINA_DBL_EQ(rect->ry, 0) && rect->has_rx && !rect->has_ry) rect->ry = rect->rx;
+ if (!EINA_DBL_EQ(rect->ry, 0) && EINA_DBL_EQ(rect->rx, 0) && !rect->has_rx && rect->has_ry) rect->rx = rect->ry;
return EINA_TRUE;
}
@@ -1392,13 +1487,15 @@ _attr_parse_rect_node(void *data, const char *key, const char *value)
{
_attr_style_node(loader, value);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else
{
_parse_style_attr(loader, key, value);
}
- if (!EINA_DBL_EQ(rect->rx, 0) && EINA_DBL_EQ(rect->ry, 0)) rect->ry = rect->rx;
- if (!EINA_DBL_EQ(rect->ry, 0) && EINA_DBL_EQ(rect->rx, 0)) rect->rx = rect->ry;
return EINA_TRUE;
}
@@ -1408,6 +1505,10 @@ _create_rect_node(Evas_SVG_Loader *loader, Svg_Node *parent, const char *buf, un
{
loader->svg_parse->node = _create_node(parent, SVG_NODE_RECT);
+ if (loader->svg_parse->node) {
+ loader->svg_parse->node->node.rect.has_rx = loader->svg_parse->node->node.rect.has_ry = EINA_FALSE;
+ }
+
eina_simple_xml_attributes_parse(buf, buflen,
_attr_parse_rect_node, loader);
return loader->svg_parse->node;
@@ -1457,6 +1558,10 @@ _attr_parse_line_node(void *data, const char *key, const char *value)
{
_attr_style_node(loader, value);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else
{
_parse_style_attr(loader, key, value);
@@ -1515,6 +1620,20 @@ _find_child_by_id(Svg_Node *node, const char *id)
return NULL;
}
+static Svg_Node* _find_node_by_id(Svg_Node *node, const char* id)
+{
+ Svg_Node *child, *result = NULL;
+ Eina_List *l;
+ if ((node->id) && !strcmp(node->id, id)) return node;
+
+ EINA_LIST_FOREACH(node->child, l, child)
+ {
+ result = _find_node_by_id(child, id);
+ if (result) break;
+ }
+ return result;
+}
+
static Eina_List *
_clone_grad_stops(Eina_List *from)
{
@@ -1601,6 +1720,8 @@ _copy_attribute(Svg_Node *to, Svg_Node *from)
to->node.rect.h = from->node.rect.h;
to->node.rect.rx = from->node.rect.rx;
to->node.rect.ry = from->node.rect.ry;
+ to->node.rect.has_rx = from->node.rect.has_rx;
+ to->node.rect.has_ry = from->node.rect.has_ry;
break;
case SVG_NODE_LINE:
to->node.line.x1 = from->node.line.x1;
@@ -1613,11 +1734,13 @@ _copy_attribute(Svg_Node *to, Svg_Node *from)
break;
case SVG_NODE_POLYGON:
to->node.polygon.points_count = from->node.polygon.points_count;
- to->node.polygon.points = calloc(to->node.polygon.points_count, sizeof(double));
+ to->node.polygon.points = malloc(to->node.polygon.points_count * sizeof(double));
+ memcpy(to->node.polygon.points, from->node.polygon.points, to->node.polygon.points_count * sizeof(double));
break;
case SVG_NODE_POLYLINE:
to->node.polyline.points_count = from->node.polyline.points_count;
- to->node.polyline.points = calloc(to->node.polyline.points_count, sizeof(double));
+ to->node.polyline.points = malloc(to->node.polyline.points_count * sizeof(double));
+ memcpy(to->node.polyline.points, from->node.polyline.points, to->node.polyline.points_count * sizeof(double));
break;
default:
break;
@@ -1659,6 +1782,10 @@ _attr_parse_use_node(void *data, const char *key, const char *value)
_clone_node(node_from, node);
eina_stringshare_del(id);
}
+ else if (!strcmp(key, "clip-path"))
+ {
+ _handle_clip_path_attr(loader, node, value);
+ }
else
{
_attr_parse_g_node(data, key, value);
@@ -1703,7 +1830,9 @@ static const struct {
TAG_DEF(defs),
TAG_DEF(g),
TAG_DEF(svg),
- TAG_DEF(switch)
+ TAG_DEF(switch),
+ TAG_DEF(mask),
+ TAG_DEF(clipPath)
};
#define FIND_FACTORY(Short_Name, Tags_Array) \
@@ -2112,9 +2241,18 @@ _find_gradient_factory(const char *name)
return NULL;
}
+static Svg_Node*
+_get_parent_node_from_loader(Evas_SVG_Loader *loader)
+{
+ if (eina_array_count(loader->stack) > 0)
+ return eina_array_data_get(loader->stack, eina_array_count(loader->stack) - 1);
+ else
+ return loader->doc;
+}
+
static void
_evas_svg_loader_xml_open_parser(Evas_SVG_Loader *loader,
- const char *content, unsigned int length)
+ const char *content, unsigned int length, Eina_Bool empty)
{
const char *attrs = NULL;
int attrs_length = 0;
@@ -2141,6 +2279,7 @@ _evas_svg_loader_xml_open_parser(Evas_SVG_Loader *loader,
attrs_length = length - sz;
while ((sz > 0) && (isspace(content[sz - 1])))
sz--;
+ if ((unsigned int)sz > sizeof(tag_name)) return;
strncpy(tag_name, content, sz);
tag_name[sz] = '\0';
}
@@ -2157,20 +2296,22 @@ _evas_svg_loader_xml_open_parser(Evas_SVG_Loader *loader,
}
else
{
- parent = eina_array_data_get(loader->stack, eina_array_count(loader->stack) - 1);
+ if (!strcmp(tag_name, "svg")) return; //Already loadded <svg>(SvgNodeType::Doc) tag
+ parent = _get_parent_node_from_loader(loader);
node = method(loader, parent, attrs, attrs_length);
}
- eina_array_push(loader->stack, node);
if (node->type == SVG_NODE_DEFS)
- {
- loader->doc->node.doc.defs = node;
- loader->def = node;
- }
+ {
+ loader->doc->node.doc.defs = node;
+ loader->def = node;
+ if (!empty) eina_array_push(loader->stack, node);
+ }
+ else eina_array_push(loader->stack, node);
}
else if ((method = _find_graphics_factory(tag_name)))
{
- parent = eina_array_data_get(loader->stack, eina_array_count(loader->stack) - 1);
+ parent = _get_parent_node_from_loader(loader);
node = method(loader, parent, attrs, attrs_length);
}
else if ((gradient_method = _find_gradient_factory(tag_name)))
@@ -2218,7 +2359,9 @@ static const struct {
} pop_array[] = {
POP_TAG(g),
POP_TAG(svg),
- POP_TAG(defs)
+ POP_TAG(defs),
+ POP_TAG(mask),
+ POP_TAG(clipPath)
};
static void
@@ -2250,10 +2393,10 @@ _evas_svg_loader_parser(void *data, Eina_Simple_XML_Type type,
switch (type)
{
case EINA_SIMPLE_XML_OPEN:
- _evas_svg_loader_xml_open_parser(loader, content, length);
+ _evas_svg_loader_xml_open_parser(loader, content, length, EINA_FALSE);
break;
case EINA_SIMPLE_XML_OPEN_EMPTY:
- _evas_svg_loader_xml_open_parser(loader, content, length);
+ _evas_svg_loader_xml_open_parser(loader, content, length, EINA_TRUE);
break;
case EINA_SIMPLE_XML_CLOSE:
_evas_svg_loader_xml_close_parser(loader, content, length);
@@ -2279,7 +2422,7 @@ _inherit_style(Svg_Style_Property *child, Svg_Style_Property *parent)
{
if (parent == NULL)
return;
- // inherit the property of parent if not present in child.
+ // inherit the property of parent if not present in child.
// fill
if (!(child->fill.flags & SVG_FILL_FLAGS_PAINT))
{
@@ -2324,6 +2467,22 @@ _inherit_style(Svg_Style_Property *child, Svg_Style_Property *parent)
{
child->stroke.join = parent->stroke.join;
}
+ if (!(child->stroke.flags & SVG_STROKE_FLAGS_DASH))
+ {
+ int i = 0;
+ int count = parent->stroke.dash_count;
+ if (count > 0)
+ {
+ if (child->stroke.dash) free(child->stroke.dash);
+ child->stroke.dash = calloc(count, sizeof(Efl_Gfx_Dash));
+ child->stroke.dash_count = count;
+ for (i = 0; i < count; i++)
+ {
+ child->stroke.dash[i].length = parent->stroke.dash[i].length;
+ child->stroke.dash[i].gap = parent->stroke.dash[i].gap;
+ }
+ }
+ }
}
void
@@ -2400,6 +2559,21 @@ _update_gradient(Svg_Node *node, Eina_List *grad_list)
}
}
}
+
+static void _update_composite(Svg_Node* node, Svg_Node* root)
+{
+ Svg_Node *child;
+ Eina_List *l;
+ if (node->style->comp.url && !node->style->comp.node) {
+ Svg_Node *findResult = _find_node_by_id(root, node->style->comp.url);
+ if (findResult) node->style->comp.node = findResult;
+ }
+ EINA_LIST_FOREACH(node->child, l, child)
+ {
+ _update_composite(child, root);
+ }
+}
+
static Eina_Bool
evas_vg_load_file_data_svg(Vg_File_Data *vfd EINA_UNUSED)
{
@@ -2410,6 +2584,7 @@ static Eina_Bool
evas_vg_load_file_close_svg(Vg_File_Data *vfd)
{
if (vfd->root) efl_unref(vfd->root);
+ free(vfd);
return EINA_TRUE;
}
@@ -2444,16 +2619,16 @@ evas_vg_load_file_open_svg(Eina_File *file,
defs = loader.doc->node.doc.defs;
if (defs)
_update_gradient(loader.doc, defs->node.defs.gradients);
- else
+ if (loader.gradients)
{
- if (loader.gradients)
- {
- Eina_List* gradient_list = loader.gradients;
- _update_gradient(loader.doc, gradient_list);
- eina_list_free(gradient_list);
- }
+ Eina_List* gradient_list = loader.gradients;
+ _update_gradient(loader.doc, gradient_list);
+ eina_list_free(gradient_list);
}
+ _update_composite(loader.doc, loader.doc);
+ if (defs) _update_composite(loader.doc, defs);
+
*error = EVAS_LOAD_ERROR_NONE;
}
else
@@ -2462,7 +2637,9 @@ evas_vg_load_file_open_svg(Eina_File *file,
}
free(loader.svg_parse);
- return vg_common_svg_create_vg_node(loader.doc);
+ Vg_File_Data* result = vg_common_svg_create_vg_node(loader.doc);
+ vg_common_svg_node_free(loader.doc);
+ return result;
}
static Evas_Vg_Load_Func evas_vg_load_svg_func =
diff --git a/src/modules/evas/vg_savers/svg/evas_vg_save_svg.c b/src/modules/evas/vg_savers/svg/evas_vg_save_svg.c
index e900432d9a..ecb2b84938 100644
--- a/src/modules/evas/vg_savers/svg/evas_vg_save_svg.c
+++ b/src/modules/evas/vg_savers/svg/evas_vg_save_svg.c
@@ -23,7 +23,7 @@ printf_style(Svg_Style_Property *style, Eina_Strbuf *buf)
eina_strbuf_append_printf(buf, " fill-opacity=\"%f\"", style->fill.opacity / 255.0);
if ((style->stroke.paint.r) || (style->stroke.paint.g) || (style->stroke.paint.b))
eina_strbuf_append_printf(buf, " stroke=\"#%02X%02X%02X\" ", style->stroke.paint.r, style->stroke.paint.g, style->stroke.paint.b);
- if (style->stroke.width)
+ if (EINA_DBL_NONZERO(style->stroke.width))
eina_strbuf_append_printf(buf, " stroke-width=\"%f\" ", style->stroke.width);
if (style->stroke.cap == EFL_GFX_CAP_ROUND)
eina_strbuf_append_printf(buf, " stroke-linecap=\"round\" ");
diff --git a/src/scripts/eina/eina-bench-cmp b/src/scripts/eina/eina-bench-cmp
deleted file mode 100755
index 9ff68e2a2c..0000000000
--- a/src/scripts/eina/eina-bench-cmp
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/usr/bin/env python2
-
-import os
-import os.path
-import csv
-from optparse import OptionParser
-
-fmttext = '%(value)7.2f (%(percentual)+6.1f%%)'
-fmthtml = '%(value)7.2f <span style="color: #666; width: 55pt; display: inline-block; text-align: right; text-shadow: #999 1px 1px 3px;">(%(percentual)+0.1f%%)</span>'
-
-
-parser = OptionParser(usage="%prog [options] <reference> <file2> .. <fileN>",
- description="""\
-Generate reports comparing two or more outputs of expedite.
-
-Just run expedite and save output to a file and then feed them to this
-program. The first file is used as base for comparison and other files
-will print relative improvements.
-""")
-parser.add_option("-e", "--accepted-error",
- help=("maximum error to accept as percentage 0.0-1.0. "
- "[default=%default]"),
- action="store", type="float", default=0.05)
-parser.add_option("-r", "--report",
- help=("kind of report to use. One of text or html. "
- "[default=%default]"),
- action="store", type="choice", default="text",
- choices=["text", "html"])
-parser.add_option("-F", "--format",
- help=("format to use as python format string, "
- "valid keys are: value and percentual. "
- "[defaults: html=\"%s\", text=\"%s\"]" %
- (fmthtml, fmttext)),
- action="store", type="str", default=None)
-parser.add_option("-C", "--no-color", dest="color",
- help="do not use color in reports.",
- action="store_false", default=True)
-
-options, files = parser.parse_args()
-if len(files) < 2:
- raise SystemExit("need at least 2 files to compare")
-
-if options.format is None:
- if options.report == "html":
- options.format = fmthtml
- else:
- options.format = fmttext
-
-ref_f = files[0]
-others_f = files[1:]
-
-max_test_name = 0
-data = {}
-tests = []
-for f in files:
- d = data[f] = {}
- for row in csv.reader(open(f), delimiter='\t'):
- if row[0].startswith("#"):
- continue
- t = row[0].strip()
- if f == ref_f:
- tests.append(t)
- d[t] = float(row[1])
- max_test_name = max(len(t), max_test_name)
-
-def report_text():
- test_name_fmt = "%%%ds:" % max_test_name
-
- fmtsize = len(options.format % {"value": 12345.67, "percentual": 1234.56})
- hdrfmt = "%%%d.%ds" % (fmtsize, fmtsize)
-
- print test_name_fmt % "\\",
- print "%7.7s" % (files[0][-7:],),
- for f in files[1:]:
- n, e = os.path.splitext(f)
- print hdrfmt % n[-fmtsize:],
- print
-
- if options.color and os.environ.get("TERM", "") in (
- "xterm", "xterm-color", "rxvt", "rxvt-unicode", "screen",
- "Eterm", "aterm", "gnome", "interix"):
- color_good = "\033[1;32m"
- color_bad = "\033[1;31m"
- color_equal = "\033[1;30m"
- color_reset = "\033[0m"
- else:
- color_good = ""
- color_bad = ""
- color_equal = ""
- color_reset = ""
-
-
- def print_row(test):
- print test_name_fmt % test,
- ref_val = data[ref_f][test]
- print "%7.2f" % ref_val,
- for f in others_f:
- try:
- val = data[f][test]
- except KeyError:
- print "-?????-",
- continue
-
- percent = (val - ref_val) / ref_val
- if percent < -options.accepted_error:
- c = color_good
- elif percent > options.accepted_error:
- c = color_bad
- else:
- c = color_equal
-
- fmt = options.format % {"value": val, "percentual": percent * 100}
- if len(fmt) < fmtsize:
- fmt = hdrfmt % fmt
- print "%s%s%s" % (c, fmt, color_reset),
-
- print
-
- for t in tests:
- print_row(t)
-
-
-def report_html():
- import time
-
- fnames = [os.path.basename(f) for f in files]
- print """\
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>expedite comparison sheet: %(files)s</title>
- </head>
- <style type="text/css">
- table
- {
- border: 1px solid black;
- border-collapse: collapse;
- }
- thead
- {
- border-bottom: 1px solid black;
- }
- tr.overall-results
- {
- border-top: 1px solid black;
- font-weight: bold;
- }
- td.value, td.value-reference, td.value-missing, td.value-good, td.value-bad, td.value-equal
- {
- font-family: courier, monospaced;
- font-size: 10pt;
- text-align: right;
- border-left: 1px solid black;
- border-bottom: 1px dashed #ccc;
- }
- td.test-name, thead tr td { text-align: right; }\
-"""
- if options.color:
- print """\
- td.value-good { background-color: #aaffaa; }
- td.value-bad { background-color: #ffaaaa; }
- td.value-missing { background-color: #ffffaa; }
- td.test-name, thead tr td
- {
- font-weight: bold;
- background-color: #d9d9d9;
- border-bottom: 1px dashed #ccc;
- }
-"""
-
- print """
- </style>
- <body>
- <p>Comparison sheet for %(files)s, created at %(date)s.</p>
- <table>
- <thead>
- <tr>
- <td>\\</td>\
-""" % {"files": ", ".join(fnames),
- "date": time.asctime(),
- }
-
- for f in fnames:
- print """\
- <td>%s</td>\
-""" % f
- print """\
- </tr>
- </thead>
- <tbody>\
-"""
-
- def print_row(test):
- ref_val = data[ref_f][test]
- if "EVAS SPEED" in test.upper():
- extra_cls = ' class="overall-results"'
- else:
- extra_cls = ""
-
- print """\
- <tr%s>
- <td class="test-name">%s</td>
- <td class="value-reference">%7.2f</td>\
-""" % (extra_cls, test, ref_val)
-
- for f in others_f:
- try:
- val = data[f][test]
- except KeyError:
- print """\
- <td class="value-missing">-?????-</td>\
-"""
- continue
-
- percent = (val - ref_val) / ref_val
- if percent < -options.accepted_error:
- c = 'good'
- elif percent > options.accepted_error:
- c = 'bad'
- else:
- c = 'equal'
-
- v = options.format % {"value": val, "percentual": percent * 100}
-
- print """\
- <td class="value-%s">%s</td>\
-""" % (c, v)
-
- print """\
- </tr>\
-"""
-
- for t in tests:
- print_row(t)
-
- print """\
- </tbody>
- </table>
- </body>
-</html>
-"""
-
-if options.report == "text":
- report_text()
-elif options.report == "html":
- report_html()
diff --git a/src/scripts/eina/meson.build b/src/scripts/eina/meson.build
deleted file mode 100644
index d1d10ab6bf..0000000000
--- a/src/scripts/eina/meson.build
+++ /dev/null
@@ -1,4 +0,0 @@
-# disabled because its a pretty useless script that forces python as a
-# a dependency and doesn't parse anything efl or test apps produce
-#install_data('eina-bench-cmp', install_dir : dir_bin,
-# install_mode: 'rwxr-xr-x')
diff --git a/src/scripts/elua/apps/empty.txt b/src/scripts/elua/apps/empty.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/src/scripts/elua/apps/empty.txt
diff --git a/src/scripts/elua/apps/lualian.lua b/src/scripts/elua/apps/lualian.lua
deleted file mode 100644
index f0837d7e35..0000000000
--- a/src/scripts/elua/apps/lualian.lua
+++ /dev/null
@@ -1,65 +0,0 @@
--- Lualian application
--- for use with Elua
-
-local lualian = require("lualian")
-local getopt = require("getopt")
-
-local gen_file = function(opts, i, fname)
- local printv = opts["v"] and print or function() end
- printv("Generating for file: " .. fname)
- local ofile = opts["o"] and opts["o"][i] or nil
- local fstream = io.stdout
- if ofile then
- printv(" Output file: " .. ofile)
- fstream = io.open(ofile, "w")
- if not fstream then
- error("Cannot open output file: " .. ofile)
- end
- else
- printv(" Output file: printing to stdout...")
- end
- lualian.generate(fname, fstream)
-end
-
-getopt.parse {
- usage = "Usage: %prog [OPTIONS] file1.eo file2.eo ... fileN.eo",
- args = arg,
- descs = {
- { category = "General" },
-
- { "h", "help", nil, help = "Show this message.", metavar = "CATEGORY",
- callback = getopt.help_cb(io.stdout)
- },
- { "v", "verbose", false, help = "Be verbose." },
-
- { category = "Generator" },
-
- { "I", "include", true, help = "Include a directory.", metavar = "DIR",
- list = {}
- },
- { "o", "output", true, help = "Specify output file name(s), by "
- .. "default goes to stdout.",
- list = {}
- }
- },
- error_cb = function(parser, msg)
- io.stderr:write(msg, "\n")
- getopt.help(parser, io.stderr)
- end,
- done_cb = function(parser, opts, args)
- if not opts["h"] then
- for i, v in ipairs(opts["I"] or {}) do
- lualian.include_dir(v)
- end
- if os.getenv("EFL_RUN_IN_TREE") then
- lualian.system_directory_add()
- end
- lualian.load_eot_files()
- for i, fname in ipairs(args) do
- gen_file(opts, i, fname)
- end
- end
- end
-}
-
-return true
diff --git a/src/scripts/elua/core/util.lua b/src/scripts/elua/core/util.lua
index 2e176cbdd1..b184921b33 100644
--- a/src/scripts/elua/core/util.lua
+++ b/src/scripts/elua/core/util.lua
@@ -13,6 +13,17 @@ local M = {}
local getmetatable, setmetatable = getmetatable, setmetatable
local dgetmt = debug.getmetatable
+local newproxy = newproxy
+
+if not newproxy then
+ -- tables can have __gc from 5.2
+ newproxy = function(b)
+ if b then
+ return setmetatable({}, {})
+ end
+ return {}
+ end
+end
-- multiple inheritance index with depth-first search
local proto_lookup = function(protos, name)
@@ -98,8 +109,6 @@ M.Object = {
end
}
-local newproxy = newproxy
-
local robj_gc = function(px)
local dtor = px.__dtor
if dtor then dtor(px) end
@@ -108,7 +117,7 @@ end
M.Readonly_Object = M.Object:clone {}
M.Readonly_Object.__call = function(self, ...)
local r = newproxy(true)
- local rmt = getmetatable(r)
+ local rmt = dgetmt(r)
rmt.__index = self
rmt.__tostring = Object_MT.__tostring
rmt.__metatable = false
@@ -184,11 +193,12 @@ end
ffi.cdef [[
typedef struct _Str_Buf {
char *buf;
- size_t len, cap;
+ size_t len;
+ size_t cap;
} Str_Buf;
void *malloc(size_t);
- void free(void*);
+ void free(void *);
size_t strlen(const char *str);
int isalnum(int c);
diff --git a/src/scripts/elua/modules/lualian.lua b/src/scripts/elua/modules/lualian.lua
deleted file mode 100644
index e515aaf8bc..0000000000
--- a/src/scripts/elua/modules/lualian.lua
+++ /dev/null
@@ -1,718 +0,0 @@
--- Elua lualian module
-
-local cutil = require("cutil")
-local util = require("util")
-local log = require("eina.log")
-local eolian = require("eolian")
-
-local M = {}
-
-local dom
-
-local type_type = eolian.type_type
-local class_type = eolian.class_type
-local func_type = eolian.function_type
-local obj_scope = eolian.object_scope
-local param_dir = eolian.parameter_dir
-
-local gen_unit
-local gen_state
-
-local get_state = function()
- if not gen_state then
- gen_state = eolian.new()
- end
- return assert(gen_state, "could not create eolian state")
-end
-
-cutil.init_module(function()
- dom = log.Domain("lualian")
- if not dom:is_valid() then
- log.err("Could not register log domain: lualian")
- error("Could not register log domain: lualian")
- end
-end, function()
- dom:unregister()
- dom = nil
-end)
-
-local lua_kw = {
- ["and"] = true, ["end"] = true, ["in"] = true, ["local"] = true,
- ["nil"] = true, ["not"] = true, ["or"] = true, ["repeat"] = true,
- ["then"] = true, ["until"] = true
-}
-
-local kw_t = function(n)
- if lua_kw[n] then
- return n .. "_"
- end
- return n
-end
-
-local int_builtin = {
- ["byte" ] = true, ["short"] = true, ["int"] = true, ["long"] = true,
- ["llong"] = true,
-
- ["int8" ] = true, ["int16"] = true, ["int32"] = true, ["int64"] = true,
- ["int128"] = true,
-
- ["intptr"] = true
-}
-
-local num_others = {
- ["size" ] = true, ["ssize" ] = true, ["ptrdiff"] = true,
- ["float"] = true, ["double"] = true
-}
-
-local is_num = function(x)
- if not x then
- return false
- end
- if num_others [x ] then return true end
- if int_builtin[x ] then return true end
- if int_builtin["u" .. x] then return true end
- return false
-end
-
-local known_out = {
- ["Evas_Coord"] = function(expr) return ("tonumber(%s)"):format(expr) end,
- ["bool"] = function(expr) return ("((%s) ~= 0)"):format(expr) end,
- ["char"] = function(expr) return ("string.char(%s)"):format(expr) end
-}
-
-local known_in = {
- ["Evas_Coord"] = function(expr) return expr end,
- ["bool"] = function(expr) return expr end
-}
-
-local known_ptr_out = {
- ["const char"] = function(expr) return ("ffi.string(%s)"):format(expr) end
-}
-
-local known_ptr_in = {
- ["const char"] = function(expr) return expr end
-}
-
-local convfuncs = {}
-
-local build_calln = function(tps, expr, isin)
- return expr
-end
-
-local typeconv = function(tps, expr, isin)
- if tps:type_get() == type_type.POINTER then
- local base = tps:base_type_get()
- local f = (isin and known_ptr_in or known_ptr_out)[base:c_type_get(eolian.c_type_type.DEFAULT)]
- if f then return f(expr) end
- return build_calln(tps, expr, isin)
- end
-
- local tp = tps:short_name_get()
-
- if is_num(tp) then
- return isin and expr or ("tonumber(%s)"):format(expr)
- end
-
- local f = (isin and known_in or known_out)[tp]
- if f then
- return f(expr)
- end
-
- return build_calln(tps, expr, isin)
-end
-
-local Node = util.Object:clone {
- generate = function(self, s)
- end,
-
- gen_children = function(self, s)
- local len = #self.children
-
- local evs = self.events
- local evslen
- if evs then evslen = #evs end
- local hasevs = evs and evslen > 0
-
- local hasprops = false
- local nprops = 0
- local props = {}
-
- for i, v in ipairs(self.children) do
- v.parent_node = self
- if v.generate_prop then
- if v:generate_prop(props) then
- nprops = nprops + 1
- end
- hasprops = true
- end
- v:generate(s, (not hasevs) and (not hasprops) and (i == len))
- end
-
- if hasevs then
- s:write(" __events = {\n")
- for i, v in ipairs(evs) do
- v.parent_node = self
- v:generate(s, i == evslen)
- end
- s:write(" }", hasprops and "," or "", "\n")
- end
-
- if hasprops then
- if hasevs then
- s:write("\n")
- end
- s:write(" __properties = {\n")
- local pi = 0
- for k, v in pairs(props) do
- pi = pi + 1
- s:write(" [\"", k, "\"] = { ", table.concat(v, ", "),
- " }", pi ~= nprops and "," or "", "\n")
- end
- s:write(" }\n")
- end
- end
-}
-
-local Method = Node:clone {
- __ctor = function(self, meth)
- self.method = meth
- end,
-
- gen_proto = function(self)
- if self.cached_proto then return self.cached_proto end
-
- local meth = self.method
- local pars = meth:parameters_get()
- local rett = meth:return_type_get(func_type.METHOD)
-
- local proto = {
- name = meth:name_get()
- }
- proto.ret_type = rett and rett:c_type_get(eolian.c_type_type.RETURN) or "void"
- local args, cargs, vargs = { "self" }, {}, {}
- proto.args, proto.cargs, proto.vargs = args, cargs, vargs
- local rets = {}
- proto.rets = rets
- local allocs = {}
- proto.allocs = allocs
-
- proto.full_name = meth:full_c_name_get(func_type.METHOD)
-
- local fulln = proto.full_name
-
- if rett then
- rets[#rets + 1] = typeconv(rett, "v", false)
- end
-
- for v in pars do
- local dir, tps, nm = v:direction_get(), v:type_get(), kw_t(v:name_get())
- local tp = tps:c_type_get(eolian.c_type_type.PARAM)
- if dir == param_dir.OUT or dir == param_dir.INOUT then
- if dir == param_dir.INOUT then
- args[#args + 1] = nm
- end
- cargs [#cargs + 1] = tp .. " *" .. nm
- vargs [#vargs + 1] = nm
- allocs[#allocs + 1] = { tp, nm, (dir == param_dir.INOUT)
- and typeconv(tps, nm, true) or nil }
- rets [#rets + 1] = typeconv(tps, nm .. "[0]", false)
- else
- args [#args + 1] = nm
- cargs [#cargs + 1] = tp .. " " .. nm
- vargs [#vargs + 1] = typeconv(tps, nm, true)
- end
- end
-
- if #cargs == 0 then cargs[1] = "void" end
-
- self.cached_proto = proto
-
- return proto
- end,
-
- generate = function(self, s, last)
- local proto = self:gen_proto()
- s:write(" ", proto.name, proto.suffix or "", " = function(",
- table.concat(proto.args, ", "), ")\n")
- s:write( " eo.__do_start(self, __class)\n")
- for i, v in ipairs(proto.allocs) do
- s:write(" local ", v[2], " = ffi.new(\"", v[1], "[1]\")\n")
- end
- local genv = (proto.ret_type ~= "void")
- s:write(" ", genv and "local v = " or "", "__lib.",
- proto.full_name, "(", table.concat(proto.vargs, ", "), ")\n")
- s:write(" eo.__do_end()\n")
- if #proto.rets > 0 then
- s:write(" return ", table.concat(proto.rets, ", "), "\n")
- end
- s:write(" end", last and "" or ",", last and "\n" or "\n\n")
- end,
-
- gen_ffi = function(self, s)
- local proto = self:gen_proto()
- local ret = proto.ret_type
- if ret:match("[a-zA-Z0-9_]$") then
- ret = ret .. " "
- end
- local cproto = {
- " ", ret, proto.full_name, "(", table.concat(proto.cargs, ", "),
- ");\n"
- }
- s:write(table.concat(cproto))
- end
-}
-
-local Property = Method:clone {
- __ctor = function(self, prop, ftype)
- self.property = prop
- self.isget = (ftype == func_type.PROP_GET)
- self.ftype = ftype
- end,
-
- gen_proto = function(self)
- if self.cached_proto then return self.cached_proto end
-
- local prop = self.property
- local keys = prop:property_keys_get(self.ftype):to_array()
- local vals = prop:property_values_get(self.ftype):to_array()
- local rett = prop:return_type_get(self.ftype)
-
- local proto = {
- name = prop:name_get(),
- suffix = (self.isget and "_get" or "_set"),
- nkeys = #keys,
- nvals = #vals
- }
- proto.ret_type = rett and rett:c_type_get(eolian.c_type_type.RETURN) or "void"
- local args, cargs, vargs = { "self" }, {}, {}
- proto.args, proto.cargs, proto.vargs = args, cargs, vargs
- local rets = {}
- proto.rets = rets
- local allocs = {}
- proto.allocs = allocs
-
- proto.full_name = prop:full_c_name_get(self.ftype)
-
- local fulln = proto.full_name
- if #keys > 0 then
- for i, v in ipairs(keys) do
- local nm = kw_t(v:name_get())
- local tps = v:type_get()
- local tp = tps:c_type_get(eolian.c_type_type.PARAM)
- args [#args + 1] = nm
- cargs[#cargs + 1] = tp .. " " .. nm
- vargs[#vargs + 1] = typeconv(tps, nm, true)
- end
- end
- proto.kprop = #keys > 0
-
- if #vals > 0 then
- if self.isget then
- if #vals == 1 and not rett then
- local tps = vals[1]:type_get()
- proto.ret_type = tps:c_type_get(eolian.c_type_type.PARAM)
- rets[#rets + 1] = typeconv(tps, "v", false)
- else
- for i, v in ipairs(vals) do
- local dir, tps, nm = v:direction_get(), v:type_get(),
- kw_t(v:name_get())
- local tp = tps:c_type_get(eolian.c_type_type.PARAM)
- cargs [#cargs + 1] = tp .. " *" .. nm
- vargs [#vargs + 1] = nm
- allocs[#allocs + 1] = { tp, nm }
- rets [#rets + 1] = typeconv(tps, nm .. "[0]", false)
- end
- end
- else
- for i, v in ipairs(vals) do
- local dir, tps, nm = v:direction_get(), v:type_get(),
- kw_t(v:name_get())
- local tp = tps:c_type_get(eolian.c_type_type.PARAM)
- args [#args + 1] = nm
- cargs[#cargs + 1] = tp .. " " .. nm
- vargs[#vargs + 1] = typeconv(tps, nm, true)
- end
- end
- end
-
- if #cargs == 0 then cargs[1] = "void" end
-
- self.cached_proto = proto
-
- return proto
- end,
-
- generate_prop = function(self, props)
- local proto = self:gen_proto()
- local prop = props[proto.name]
- local hasprop = true
- if not prop then
- prop = { 0, 0, 0, 0, "false", "false" }
- props[proto.name] = prop
- hasprop = false
- end
- if self.isget then
- prop[1] = proto.nkeys
- prop[3] = math.max(proto.nvals, 1)
- prop[5] = "true"
- else
- prop[2] = proto.nkeys
- prop[4] = math.max(proto.nvals, 1)
- prop[6] = "true"
- end
- return not hasprop
- end
-}
-
-local Event = Node:clone {
- __ctor = function(self, ename, etype, ecname)
- self.ename = ename
- self.etype = etype
- self.ecname = ecname
- end,
-
- generate = function(self, s, last)
- s:write(" [\"", self.ename, "\"] = __lib.",
- "_" .. self.ecname, last and "\n" or ",\n")
- end,
-
- gen_ffi = function(self, s)
- s:write(" extern const Eo_Event_Description ",
- "_" .. self.ecname, ";\n")
- end
-}
-
-local gen_ns = function(klass, s)
- local nspaces = klass:namespaces_get():to_array()
- if #nspaces > 1 then
- local lnspaces = {}
- for i = 2, #nspaces do
- lnspaces[i - 1] = '"' .. nspaces[i]:lower() .. '"'
- end
- s:write("local __M = util.get_namespace(M, { ",
- table.concat(lnspaces, ", "), " })\n")
- return "__M"
- else
- return "M"
- end
-end
-
-local Mixin = Node:clone {
- __ctor = function(self, iface, klass, ch, evs)
- self.klass = klass
- self.children = ch
- self.events = evs
- self.iface = iface
- end,
-
- generate = function(self, s)
- dom:log(log.level.INFO, " Generating for interface/mixin: "
- .. self.klass:name_get())
-
- s:write("ffi.cdef [[\n")
- self:gen_ffi(s)
- s:write("]]\n\n")
-
- gen_ns(self.klass, s)
-
- s:write("__body = {\n")
- self:gen_children(s)
- s:write("}\n")
-
- local knu = self.klass:name_get():gsub("%.", "_")
- if not self.iface then
- s:write(("__body[\"__mixin_%s\"] = true\n"):format(knu))
- else
- s:write(("__body[\"__iface_%s\"] = true\n"):format(knu))
- end
- end,
-
- gen_ffi = function(self, s)
- s:write(" const Eo_Class *", self.klass:c_get_function_name_get(),
- "(void);\n")
- for i, v in ipairs(self.children) do
- v.parent_node = self
- v:gen_ffi(s)
- end
- if self.events then
- for i, v in ipairs(self.events) do
- v.parent_node = self
- v:gen_ffi(s)
- end
- end
- end
-}
-
-local build_pn = function(fn, pn)
- if fn == pn then
- return kw_t(pn)
- end
- return fn .. "_" .. pn
-end
-
-local Class = Node:clone {
- __ctor = function(self, klass, parents, mixins, ch, evs)
- self.klass = klass
- self.parents = parents
- self.interfaces = interfaces
- self.mixins = mixins
- self.children = ch
- self.events = evs
- end,
-
- generate = function(self, s)
- dom:log(log.level.INFO, " Generating for class: "
- .. self.klass:name_get())
-
- s:write("ffi.cdef [[\n")
- self:gen_ffi(s)
- s:write("]]\n\n")
-
- local mname = gen_ns(self.klass, s)
-
- s:write("__body = {\n")
- self:gen_ctor(s)
- self:gen_children(s)
- s:write("}\n")
-
- -- write the constructor
- s:write(([[
-
-%s.%s = function(parent, ...)
- return eo.__ctor_common(__class, parent, eo.class_get("%s").__eo_ctor,
- 1, ...)
-end
-]]):format(mname, self.klass:short_name_get(), self.klass:name_get():gsub("%.",
- "_")))
- end,
-
- gen_ffi = Mixin.gen_ffi,
-
- gen_ctor = function(self, s)
- local ctors = self.klass:constructors_get()
- if not ctors then return end
- -- collect constructor information
- s:write(" __eo_ctor = function(self, ")
- local cfuncs, parnames, upars = {}, {}, {}
- for ctor in ctors do
- local cfunc = ctor:function_get()
- local cn = cfunc:name_get()
- local tp = cfunc:type_get()
- if tp == func_type.PROPERTY or tp == func_type.PROP_SET
- or tp == func_type.METHOD then
- cfuncs[#cfuncs + 1] = cfunc
- if tp ~= func_type.METHOD then
- for par in cfunc:property_keys_get(func_type.PROP_SET) do
- parnames[#parnames + 1] = build_pn(cn, par:name_get())
- end
- end
- local iter = (tp ~= func_type.METHOD)
- and cfunc:property_values_get(func_type.PROP_SET)
- or cfunc:parameters_get()
- for par in iter do
- if par:direction_get() ~= param_dir.OUT then
- parnames[#parnames + 1] = build_pn(cn, par:name_get())
- end
- end
- end
- end
- s:write(table.concat(parnames, ", "))
- if #parnames == 0 then
- s:write("__func")
- else
- s:write(", __func")
- end
- s:write(")\n")
- -- write ctor body
- local j = 1
- for i, cfunc in ipairs(cfuncs) do
- local tp = cfunc:type_get()
- s:write(" self:", cfunc:name_get())
- if cfunc:type_get() ~= func_type.METHOD then
- s:write("_set")
- end
- s:write("(")
- local fpars = {}
- if tp ~= func_type.METHOD then
- for par in cfunc:property_keys_get(func_type.PROP_SET) do
- fpars[#fpars + 1] = parnames[j]
- j = j + 1
- end
- end
- local iter = (tp ~= func_type.METHOD)
- and cfunc:property_values_get(func_type.PROP_SET)
- or cfunc:parameters_get()
- for par in iter do
- if par:direction_get() ~= param_dir.OUT then
- fpars[#fpars + 1] = parnames[j]
- j = j + 1
- end
- end
- s:write(table.concat(fpars, ", "))
- s:write(")\n")
- end
- s:write(" if __func then __func() end\n")
- s:write(" end")
- if #self.children > 0 then
- s:write(",\n\n")
- else
- s:write("\n")
- end
- end
-}
-
-local File = Node:clone {
- __ctor = function(self, fname, klass, ch)
- self.fname = fname:match(".+/(.+)") or fname
- self.klass = klass
- self.children = ch
- end,
-
- generate = function(self, s)
- local kls = self.klass
- local ckls = self.children[1]
-
- local kn = kls:name_get()
-
- dom:log(log.level.INFO, "Generating for file: " .. self.fname)
- dom:log(log.level.INFO, " Class : " .. kn)
-
- local knu = kn:gsub("%.", "_")
-
- local pars = ckls.parents or {}
- local mins = ckls.mixins or {}
-
- -- serialize both
- local pv = {}
- local mv = {}
- for i = 1, #pars do pv[i] = '"' .. pars[i]:gsub("%.", "_") .. '"' end
- for i = 1, #mins do mv[i] = '"' .. mins[i]:gsub("%.", "_") .. '"' end
- pars = (#pars > 0) and ("{" .. table.concat(pv, ", ") .. "}") or "nil"
- mins = (#mins > 0) and ("{" .. table.concat(mv, ", ") .. "}") or "nil"
-
- s:write(([[
--- EFL LuaJIT bindings: %s (class %s)
--- For use with Elua; automatically generated, do not modify
-
-local cutil = require("cutil")
-local util = require("util")
-local ffi = require("ffi")
-local eo = require("eo")
-
-local M, __lib = ...
-
-local __class
-local __body
-
-local init = function()
- __class = __lib.%s()
- eo.class_register("%s", %s, %s, __body, __class)
-end
-
-cutil.init_module(init, function() end)
-
-]]):format(self.fname, kn, kls:c_get_function_name_get(), knu, pars, mins))
-
- self:gen_children(s)
-
- s:write([[
-
-return M
-]])
-
- local first = true
- for name, v in pairs(convfuncs) do
- if first then
- print("\nRequired conversion functions:")
- first = false
- end
- print(" " .. name)
- end
- end
-}
-
-local gen_contents = function(klass)
- local cnt = {}
- -- first try properties
- local props = klass:functions_get(func_type.PROPERTY):to_array()
- for i, v in ipairs(props) do
- local gscope = v:scope_get(func_type.PROP_GET)
- local sscope = v:scope_get(func_type.PROP_SET)
- if (gscope == obj_scope.PUBLIC or sscope == obj_scope.PUBLIC) then
- local ftype = v:type_get()
- local fread = (ftype == func_type.PROPERTY or ftype == func_type.PROP_GET)
- local fwrite = (ftype == func_type.PROPERTY or ftype == func_type.PROP_SET)
- if fwrite and sscope == obj_scope.PUBLIC then
- cnt[#cnt + 1] = Property(v, func_type.PROP_SET)
- end
- if fread and gscope == obj_scope.PUBLIC then
- cnt[#cnt + 1] = Property(v, func_type.PROP_GET)
- end
- end
- end
- -- then methods
- local meths = klass:functions_get(func_type.METHOD):to_array()
- for i, v in ipairs(meths) do
- if v:scope_get(func_type.METHOD) == obj_scope.PUBLIC then
- cnt[#cnt + 1] = Method(v)
- end
- end
- -- events
- local evs = {}
- local events = klass:events_get():to_array()
- for i, v in ipairs(events) do
- evs[#evs + 1] = Event(v:name_get(), v:type_get(), v:c_name_get())
- end
- return cnt, evs
-end
-
-local gen_class = function(klass)
- local tp = klass:type_get()
- if tp == class_type.UNKNOWN then
- error(klass:name_get() .. ": unknown type")
- elseif tp == class_type.MIXIN or tp == class_type.INTERFACE then
- return Mixin(tp == class_type.INTERFACE, klass, gen_contents(klass))
- end
- local inherits = klass:inherits_get():to_array()
- -- figure out the correct lookup order
- local parents = {}
- local mixins = {} -- also includes ifaces, they're separated later
- for i = 1, #inherits do
- local tp = inherits[i]:type_get()
- if tp == class_type.REGULAR or tp == class_type.ABSTRACT then
- parents[#parents + 1] = v
- elseif tp == class_type.INTERFACE or tp == class_type.MIXIN then
- mixins[#mixins + 1] = v
- else
- error(klass:name_get() .. ": unknown inherit " .. v)
- end
- end
- return Class(klass, parents, mixins, gen_contents(klass))
-end
-
-M.include_dir = function(dir)
- if not get_state():directory_add(dir) then
- error("Failed including directory: " .. dir)
- end
-end
-
-M.load_eot_files = function()
- return get_state():all_eot_files_parse()
-end
-
-M.system_directory_add = function()
- return get_state():system_directory_add()
-end
-
-M.generate = function(fname, fstream)
- local unit = get_state():file_parse(fname)
- if unit == nil then
- error("Failed parsing file: " .. fname)
- end
- gen_unit = unit
- local sfn = fname:match(".*[\\/](.+)$") or fname
- local klass = get_state():class_by_file_get(sfn)
- File(fname, klass, { gen_class(klass) }):generate(fstream or io.stdout)
-end
-
-return M
diff --git a/src/scripts/meson.build b/src/scripts/meson.build
index 304d437753..48713158b0 100644
--- a/src/scripts/meson.build
+++ b/src/scripts/meson.build
@@ -1,3 +1,5 @@
subdir('eo')
-subdir('elua')
-subdir('eina')
+
+if have_elua
+ subdir('elua')
+endif
diff --git a/src/static_libs/buildsystem/meson.build b/src/static_libs/buildsystem/meson.build
index 61e7f1e37e..dd3b1f6dab 100644
--- a/src/static_libs/buildsystem/meson.build
+++ b/src/static_libs/buildsystem/meson.build
@@ -18,3 +18,7 @@ buildsystem = declare_dependency(
link_with: buildsystem_lib,
dependencies: [eina],
)
+
+buildsystem_simple = declare_dependency(
+ include_directories: [include_directories('.'), include_directories(join_paths('..', '..', 'lib'))],
+)
diff --git a/src/static_libs/draw/meson.build b/src/static_libs/draw/meson.build
index 0e7dce9cdd..f9fbc96a83 100644
--- a/src/static_libs/draw/meson.build
+++ b/src/static_libs/draw/meson.build
@@ -27,3 +27,14 @@ draw = declare_dependency(
sources : draw_src,
link_with : draw_opt_lib
)
+
+draw_without_deps = declare_dependency(
+ include_directories: [include_directories('.'), include_directories(join_paths('..', '..', 'lib'))],
+ dependencies: [rg_etc_simple],
+ sources : draw_src,
+ link_with : draw_opt_lib
+)
+
+draw_simple = declare_dependency(
+ include_directories: [include_directories('.'), include_directories(join_paths('..', '..', 'lib'))],
+)
diff --git a/src/static_libs/libunibreak/LICENCE b/src/static_libs/libunibreak/LICENCE
index 3fba16ad53..6b4137ca21 100644
--- a/src/static_libs/libunibreak/LICENCE
+++ b/src/static_libs/libunibreak/LICENCE
@@ -1,7 +1,7 @@
-Copyright (C) 2008-2016 Wu Yongwei <wuyongwei at gmail dot com>
-Copyright (C) 2012-2016 Tom Hacohen <tom at stosb dot com>
-Copyright (C) 2013 Petr Filipsky <philodej at gmail dot com>
-Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
+Copyright (C) Wu Yongwei <wuyongwei at gmail dot com>
+Copyright (C) Tom Hacohen <tom at stosb dot com>
+Copyright (C) Petr Filipsky <philodej at gmail dot com>
+Copyright (C) Andreas Röver <roever at users dot sf dot net>
This software is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages
diff --git a/src/static_libs/libunibreak/NEWS b/src/static_libs/libunibreak/NEWS
index d217628da8..a2b9e0302e 100644
--- a/src/static_libs/libunibreak/NEWS
+++ b/src/static_libs/libunibreak/NEWS
@@ -1,3 +1,14 @@
+New in libunibreak 4.2
+
+- Update the data to conform to Unicode 12
+
+New in libunibreak 4.1
+
+- Update the code and data to conform to Unicode 11.0.0, especially
+ adding support for extended pictographs in word and grapheme breaking
+- ZWJ support has been much improved (it was broken)
+- Make minor tweaks to the project files
+
New in libunibreak 4.0
- Update the code and data to conform to Unicode 9.0.0
@@ -22,7 +33,8 @@ New in libunibreak 1.1
New in libunibreak 1.0
- Add word breaking support
-- Change the library name to "libunibreak", while keeping maximum compatibility
+- Change the library name to "libunibreak", while keeping maximum
+ compatibility
- Add pkg-config support
New in liblinebreak 2.1
diff --git a/src/static_libs/libunibreak/README.md b/src/static_libs/libunibreak/README.md
index f37fd902aa..4e65059586 100644
--- a/src/static_libs/libunibreak/README.md
+++ b/src/static_libs/libunibreak/README.md
@@ -6,11 +6,11 @@ Overview
This is the README file for libunibreak, an implementation of the line
breaking and word breaking algorithms as described in [Unicode Standard
-Annex 14] [1] and [Unicode Standard Annex 29] [2]. Check the project's
-[home page] [3] for up-to-date information.
+Annex 14][1] and [Unicode Standard Annex 29][2]. Check the project's
+[home page][3] for up-to-date information.
- [1]: http://www.unicode.org/reports/tr14/tr14-37.html
- [2]: http://www.unicode.org/reports/tr29/tr29-29.html
+ [1]: http://www.unicode.org/reports/tr14/
+ [2]: http://www.unicode.org/reports/tr29/
[3]: https://github.com/adah1972/libunibreak
@@ -21,7 +21,7 @@ This library is released under an open-source licence, the zlib/libpng
licence. Please check the file *LICENCE* for details.
Apart from using the algorithm, part of the code is derived from the
-[Unicode Public Data] [4], and the [Unicode Terms of Use] [5] may apply.
+[Unicode Public Data][4], and the [Unicode Terms of Use][5] may apply.
[4]: http://www.unicode.org/Public/
[5]: http://www.unicode.org/copyright.html
@@ -48,6 +48,8 @@ There are three ways to build the library:
*WordBreakProperty.txt*.
- type `make graphemebreakdata` to regenerate *graphemebreakdata.c*
from *GraphemeBreakProperty.txt*.
+ - type `make emojidata` to regenerate *emojidata.c* from
+ *emoji-data.txt*.
2. On systems where GCC and Binutils are supported, one can type
@@ -65,6 +67,8 @@ There are three ways to build the library:
*WordBreakProperty.txt*.
- type `make graphemebreakdata` to regenerate *graphemebreakdata.c*
from *GraphemeBreakProperty.txt*.
+ - type `make emojidata` to regenerate *emojidata.c* from
+ *emoji-data.txt*.
3. On Windows, apart from using method 1 (Cygwin/MSYS) and method 2
(MinGW), MSVC can also be used. Type
@@ -72,7 +76,7 @@ There are three ways to build the library:
cd src
nmake -f Makefile.msvc
- to build the static library. By default the debug release is built.
+ to build the static library. By default the debug version is built.
To build the release version
nmake -f Makefile.msvc CFG="libunibreak - Win32 Release"
diff --git a/src/static_libs/libunibreak/emojidata.c b/src/static_libs/libunibreak/emojidata.c
new file mode 100644
index 0000000000..a78f2678e7
--- /dev/null
+++ b/src/static_libs/libunibreak/emojidata.c
@@ -0,0 +1,264 @@
+/* The content of this file is generated from:
+# emoji-data.txt
+# Date: 2019-01-15, 12:10:05 GMT
+*/
+
+static const struct ExtendedPictograpic ep_prop[] = {
+ {0x00A9, 0x00A9},
+ {0x00AE, 0x00AE},
+ {0x203C, 0x203C},
+ {0x2049, 0x2049},
+ {0x2122, 0x2122},
+ {0x2139, 0x2139},
+ {0x2194, 0x2199},
+ {0x21A9, 0x21AA},
+ {0x231A, 0x231B},
+ {0x2328, 0x2328},
+ {0x2388, 0x2388},
+ {0x23CF, 0x23CF},
+ {0x23E9, 0x23F3},
+ {0x23F8, 0x23FA},
+ {0x24C2, 0x24C2},
+ {0x25AA, 0x25AB},
+ {0x25B6, 0x25B6},
+ {0x25C0, 0x25C0},
+ {0x25FB, 0x25FE},
+ {0x2600, 0x2605},
+ {0x2607, 0x2612},
+ {0x2614, 0x2615},
+ {0x2616, 0x2617},
+ {0x2618, 0x2618},
+ {0x2619, 0x2619},
+ {0x261A, 0x266F},
+ {0x2670, 0x2671},
+ {0x2672, 0x267D},
+ {0x267E, 0x267F},
+ {0x2680, 0x2685},
+ {0x2690, 0x2691},
+ {0x2692, 0x269C},
+ {0x269D, 0x269D},
+ {0x269E, 0x269F},
+ {0x26A0, 0x26A1},
+ {0x26A2, 0x26B1},
+ {0x26B2, 0x26B2},
+ {0x26B3, 0x26BC},
+ {0x26BD, 0x26BF},
+ {0x26C0, 0x26C3},
+ {0x26C4, 0x26CD},
+ {0x26CE, 0x26CE},
+ {0x26CF, 0x26E1},
+ {0x26E2, 0x26E2},
+ {0x26E3, 0x26E3},
+ {0x26E4, 0x26E7},
+ {0x26E8, 0x26FF},
+ {0x2700, 0x2700},
+ {0x2701, 0x2704},
+ {0x2705, 0x2705},
+ {0x2708, 0x2709},
+ {0x270A, 0x270B},
+ {0x270C, 0x2712},
+ {0x2714, 0x2714},
+ {0x2716, 0x2716},
+ {0x271D, 0x271D},
+ {0x2721, 0x2721},
+ {0x2728, 0x2728},
+ {0x2733, 0x2734},
+ {0x2744, 0x2744},
+ {0x2747, 0x2747},
+ {0x274C, 0x274C},
+ {0x274E, 0x274E},
+ {0x2753, 0x2755},
+ {0x2757, 0x2757},
+ {0x2763, 0x2767},
+ {0x2795, 0x2797},
+ {0x27A1, 0x27A1},
+ {0x27B0, 0x27B0},
+ {0x27BF, 0x27BF},
+ {0x2934, 0x2935},
+ {0x2B05, 0x2B07},
+ {0x2B1B, 0x2B1C},
+ {0x2B50, 0x2B50},
+ {0x2B55, 0x2B55},
+ {0x3030, 0x3030},
+ {0x303D, 0x303D},
+ {0x3297, 0x3297},
+ {0x3299, 0x3299},
+ {0x1F000, 0x1F02B},
+ {0x1F02C, 0x1F02F},
+ {0x1F030, 0x1F093},
+ {0x1F094, 0x1F09F},
+ {0x1F0A0, 0x1F0AE},
+ {0x1F0AF, 0x1F0B0},
+ {0x1F0B1, 0x1F0BE},
+ {0x1F0BF, 0x1F0BF},
+ {0x1F0C0, 0x1F0C0},
+ {0x1F0C1, 0x1F0CF},
+ {0x1F0D0, 0x1F0D0},
+ {0x1F0D1, 0x1F0DF},
+ {0x1F0E0, 0x1F0F5},
+ {0x1F0F6, 0x1F0FF},
+ {0x1F10D, 0x1F10F},
+ {0x1F12F, 0x1F12F},
+ {0x1F16C, 0x1F16C},
+ {0x1F16D, 0x1F16F},
+ {0x1F170, 0x1F171},
+ {0x1F17E, 0x1F17E},
+ {0x1F17F, 0x1F17F},
+ {0x1F18E, 0x1F18E},
+ {0x1F191, 0x1F19A},
+ {0x1F1AD, 0x1F1E5},
+ {0x1F201, 0x1F202},
+ {0x1F203, 0x1F20F},
+ {0x1F21A, 0x1F21A},
+ {0x1F22F, 0x1F22F},
+ {0x1F232, 0x1F23A},
+ {0x1F23C, 0x1F23F},
+ {0x1F249, 0x1F24F},
+ {0x1F250, 0x1F251},
+ {0x1F252, 0x1F25F},
+ {0x1F260, 0x1F265},
+ {0x1F266, 0x1F2FF},
+ {0x1F300, 0x1F320},
+ {0x1F321, 0x1F32C},
+ {0x1F32D, 0x1F32F},
+ {0x1F330, 0x1F335},
+ {0x1F336, 0x1F336},
+ {0x1F337, 0x1F37C},
+ {0x1F37D, 0x1F37D},
+ {0x1F37E, 0x1F37F},
+ {0x1F380, 0x1F393},
+ {0x1F394, 0x1F39F},
+ {0x1F3A0, 0x1F3C4},
+ {0x1F3C5, 0x1F3C5},
+ {0x1F3C6, 0x1F3CA},
+ {0x1F3CB, 0x1F3CE},
+ {0x1F3CF, 0x1F3D3},
+ {0x1F3D4, 0x1F3DF},
+ {0x1F3E0, 0x1F3F0},
+ {0x1F3F1, 0x1F3F7},
+ {0x1F3F8, 0x1F3FA},
+ {0x1F400, 0x1F43E},
+ {0x1F43F, 0x1F43F},
+ {0x1F440, 0x1F440},
+ {0x1F441, 0x1F441},
+ {0x1F442, 0x1F4F7},
+ {0x1F4F8, 0x1F4F8},
+ {0x1F4F9, 0x1F4FC},
+ {0x1F4FD, 0x1F4FE},
+ {0x1F4FF, 0x1F4FF},
+ {0x1F500, 0x1F53D},
+ {0x1F546, 0x1F54A},
+ {0x1F54B, 0x1F54F},
+ {0x1F550, 0x1F567},
+ {0x1F568, 0x1F579},
+ {0x1F57A, 0x1F57A},
+ {0x1F57B, 0x1F5A3},
+ {0x1F5A4, 0x1F5A4},
+ {0x1F5A5, 0x1F5FA},
+ {0x1F5FB, 0x1F5FF},
+ {0x1F600, 0x1F600},
+ {0x1F601, 0x1F610},
+ {0x1F611, 0x1F611},
+ {0x1F612, 0x1F614},
+ {0x1F615, 0x1F615},
+ {0x1F616, 0x1F616},
+ {0x1F617, 0x1F617},
+ {0x1F618, 0x1F618},
+ {0x1F619, 0x1F619},
+ {0x1F61A, 0x1F61A},
+ {0x1F61B, 0x1F61B},
+ {0x1F61C, 0x1F61E},
+ {0x1F61F, 0x1F61F},
+ {0x1F620, 0x1F625},
+ {0x1F626, 0x1F627},
+ {0x1F628, 0x1F62B},
+ {0x1F62C, 0x1F62C},
+ {0x1F62D, 0x1F62D},
+ {0x1F62E, 0x1F62F},
+ {0x1F630, 0x1F633},
+ {0x1F634, 0x1F634},
+ {0x1F635, 0x1F640},
+ {0x1F641, 0x1F642},
+ {0x1F643, 0x1F644},
+ {0x1F645, 0x1F64F},
+ {0x1F680, 0x1F6C5},
+ {0x1F6C6, 0x1F6CF},
+ {0x1F6D0, 0x1F6D0},
+ {0x1F6D1, 0x1F6D2},
+ {0x1F6D3, 0x1F6D4},
+ {0x1F6D5, 0x1F6D5},
+ {0x1F6D6, 0x1F6DF},
+ {0x1F6E0, 0x1F6EC},
+ {0x1F6ED, 0x1F6EF},
+ {0x1F6F0, 0x1F6F3},
+ {0x1F6F4, 0x1F6F6},
+ {0x1F6F7, 0x1F6F8},
+ {0x1F6F9, 0x1F6F9},
+ {0x1F6FA, 0x1F6FA},
+ {0x1F6FB, 0x1F6FF},
+ {0x1F774, 0x1F77F},
+ {0x1F7D5, 0x1F7D8},
+ {0x1F7D9, 0x1F7DF},
+ {0x1F7E0, 0x1F7EB},
+ {0x1F7EC, 0x1F7FF},
+ {0x1F80C, 0x1F80F},
+ {0x1F848, 0x1F84F},
+ {0x1F85A, 0x1F85F},
+ {0x1F888, 0x1F88F},
+ {0x1F8AE, 0x1F8FF},
+ {0x1F90C, 0x1F90C},
+ {0x1F90D, 0x1F90F},
+ {0x1F910, 0x1F918},
+ {0x1F919, 0x1F91E},
+ {0x1F91F, 0x1F91F},
+ {0x1F920, 0x1F927},
+ {0x1F928, 0x1F92F},
+ {0x1F930, 0x1F930},
+ {0x1F931, 0x1F932},
+ {0x1F933, 0x1F93A},
+ {0x1F93C, 0x1F93E},
+ {0x1F93F, 0x1F93F},
+ {0x1F940, 0x1F945},
+ {0x1F947, 0x1F94B},
+ {0x1F94C, 0x1F94C},
+ {0x1F94D, 0x1F94F},
+ {0x1F950, 0x1F95E},
+ {0x1F95F, 0x1F96B},
+ {0x1F96C, 0x1F970},
+ {0x1F971, 0x1F971},
+ {0x1F972, 0x1F972},
+ {0x1F973, 0x1F976},
+ {0x1F977, 0x1F979},
+ {0x1F97A, 0x1F97A},
+ {0x1F97B, 0x1F97B},
+ {0x1F97C, 0x1F97F},
+ {0x1F980, 0x1F984},
+ {0x1F985, 0x1F991},
+ {0x1F992, 0x1F997},
+ {0x1F998, 0x1F9A2},
+ {0x1F9A3, 0x1F9A4},
+ {0x1F9A5, 0x1F9AA},
+ {0x1F9AB, 0x1F9AD},
+ {0x1F9AE, 0x1F9AF},
+ {0x1F9B0, 0x1F9B9},
+ {0x1F9BA, 0x1F9BF},
+ {0x1F9C0, 0x1F9C0},
+ {0x1F9C1, 0x1F9C2},
+ {0x1F9C3, 0x1F9CA},
+ {0x1F9CB, 0x1F9CC},
+ {0x1F9CD, 0x1F9CF},
+ {0x1F9D0, 0x1F9E6},
+ {0x1F9E7, 0x1F9FF},
+ {0x1FA00, 0x1FA53},
+ {0x1FA54, 0x1FA5F},
+ {0x1FA60, 0x1FA6D},
+ {0x1FA6E, 0x1FA6F},
+ {0x1FA70, 0x1FA73},
+ {0x1FA74, 0x1FA77},
+ {0x1FA78, 0x1FA7A},
+ {0x1FA7B, 0x1FA7F},
+ {0x1FA80, 0x1FA82},
+ {0x1FA83, 0x1FA8F},
+ {0x1FA90, 0x1FA95},
+ {0x1FA96, 0x1FFFD},
+};
diff --git a/src/static_libs/libunibreak/emojidef.c b/src/static_libs/libunibreak/emojidef.c
new file mode 100644
index 0000000000..43a2ed3db0
--- /dev/null
+++ b/src/static_libs/libunibreak/emojidef.c
@@ -0,0 +1,61 @@
+/*
+ * Emoji-related routine and data.
+ *
+ * Copyright (C) 2018 Andreas Röver <roever at users dot sf dot net>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the author be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute
+ * it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ * not claim that you wrote the original software. If you use this
+ * software in a product, an acknowledgement in the product
+ * documentation would be appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must
+ * not be misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source
+ * distribution.
+ */
+
+/**
+ * @file emojidef.c
+ *
+ * Emoji-related routine and data that are used internally.
+ *
+ * @author Andreas Röver
+ */
+
+#include "emojidef.h"
+#include "emojidata.c"
+
+/**
+ * Finds out if a codepoint is extended pictographic.
+ *
+ * @param[in] ch character to check
+ * @return \c true if the codepoint is extended pictographic;
+ * \c false otherwise
+ */
+bool ub_is_extended_pictographic(utf32_t ch)
+{
+ int min = 0;
+ int max = ARRAY_LEN(ep_prop) - 1;
+ int mid;
+
+ do
+ {
+ mid = (min + max) / 2;
+
+ if (ch < ep_prop[mid].start)
+ max = mid - 1;
+ else if (ch > ep_prop[mid].end)
+ min = mid + 1;
+ else
+ return true;
+ } while (min <= max);
+
+ return false;
+}
diff --git a/src/static_libs/libunibreak/emojidef.h b/src/static_libs/libunibreak/emojidef.h
new file mode 100644
index 0000000000..b9055fd261
--- /dev/null
+++ b/src/static_libs/libunibreak/emojidef.h
@@ -0,0 +1,46 @@
+/*
+ * Emoji-related routine and data.
+ *
+ * Copyright (C) 2018 Andreas Röver <roever at users dot sf dot net>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the author be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute
+ * it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ * not claim that you wrote the original software. If you use this
+ * software in a product, an acknowledgement in the product
+ * documentation would be appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must
+ * not be misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source
+ * distribution.
+ */
+
+/**
+ * @file emojidef.h
+ *
+ * Definitions of internal data structure and function for extended
+ * pictographs.
+ *
+ * @author Andreas Röver
+ */
+
+#include "unibreakdef.h"
+
+/**
+ * Struct for entries of extended pictographic properties. The array of
+ * the entries \e must be sorted. All codepoints within this list have
+ * the property of being extended pictographic.
+ */
+struct ExtendedPictograpic
+{
+ utf32_t start; /**< Start codepoint */
+ utf32_t end; /**< End codepoint, inclusive */
+};
+
+bool ub_is_extended_pictographic(utf32_t ch);
diff --git a/src/static_libs/libunibreak/graphemebreak.c b/src/static_libs/libunibreak/graphemebreak.c
index 77c3d5f55c..401522f12d 100644
--- a/src/static_libs/libunibreak/graphemebreak.c
+++ b/src/static_libs/libunibreak/graphemebreak.c
@@ -2,7 +2,7 @@
* Grapheme breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
+ * Copyright (C) 2016-2019 Andreas Röver <roever at users dot sf dot net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -28,6 +28,10 @@
* Unicode 9.0.0:
* <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
*
+ * This library has been updated according to Revision 35, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr29/tr29-35.html>
+ *
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
*/
@@ -38,23 +42,14 @@
* Implementation of the grapheme breaking algorithm as described in Unicode
* Standard Annex 29.
*
- * @author Andreas Roever
+ * @author Andreas Röver
*/
-#if defined(_MSC_VER) && _MSC_VER < 1800
-typedef int bool;
-#define false 0
-#define true 1
-#else
-#include <stdbool.h>
-#endif
-
#include <string.h>
#include "graphemebreak.h"
#include "graphemebreakdata.c"
#include "unibreakdef.h"
-
-#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
+#include "emojidef.h"
/**
* Initializes the wordbreak internals. It currently does nothing, but
@@ -67,8 +62,8 @@ void init_graphemebreak(void)
/**
* Gets the grapheme breaking class of a character.
*
- * @param ch character to check
- * @return the grapheme breaking class if found; \c GBP_Other otherwise
+ * @param[in] ch character to check
+ * @return the grapheme breaking class if found; \c GBP_Other otherwise
*/
static enum GraphemeBreakClass get_char_gb_class(utf32_t ch)
{
@@ -93,6 +88,7 @@ static enum GraphemeBreakClass get_char_gb_class(utf32_t ch)
/**
* Sets the grapheme breaking information for a generic input string.
+ * It uses the extended grapheme cluster ruleset.
*
* @param[in] s input string
* @param[in] len length of the input
@@ -104,7 +100,7 @@ static void set_graphemebreaks(const void *s, size_t len, char *brks,
get_next_char_t get_next_char)
{
size_t posNext = 0;
- bool rule10Left = false; // is the left side of rule 10 fulfilled?
+ int rule11Detector = 0;
bool evenRegionalIndicators = true; // is the number of preceeding
// GBP_RegionalIndicator characters
// even
@@ -117,6 +113,47 @@ static void set_graphemebreaks(const void *s, size_t len, char *brks,
while (true)
{
+
+ // this state-machine recognizes the following pattern:
+ // extended_pictograph Extended* ZWJ
+ // when that pattern has been detected rule11Detector will be
+ // 3 and rule 11 can be applied below
+ switch (current_class)
+ {
+ case GBP_ZWJ:
+ if (rule11Detector == 1 || rule11Detector == 2)
+ {
+ rule11Detector = 3;
+ }
+ else
+ {
+ rule11Detector = 0;
+ }
+ break;
+
+ case GBP_Extend:
+ if (rule11Detector == 1 || rule11Detector == 2)
+ {
+ rule11Detector = 2;
+ }
+ else
+ {
+ rule11Detector = 0;
+ }
+ break;
+
+ default:
+ if (ub_is_extended_pictographic(ch))
+ {
+ rule11Detector = 1;
+ }
+ else
+ {
+ rule11Detector = 0;
+ }
+ break;
+ }
+
enum GraphemeBreakClass prev_class = current_class;
// safe position if current character so that we can store the
@@ -137,16 +174,6 @@ static void set_graphemebreaks(const void *s, size_t len, char *brks,
// get class of current character
current_class = get_char_gb_class(ch);
- // update some helper variables
- if ((prev_class == GBP_E_Base) || (prev_class == GBP_E_Base_GAZ))
- {
- rule10Left = true;
- }
- else if (prev_class != GBP_Extend)
- {
- rule10Left = false;
- }
-
if (prev_class == GBP_Regional_Indicator)
{
evenRegionalIndicators = !evenRegionalIndicators;
@@ -185,7 +212,8 @@ static void set_graphemebreaks(const void *s, size_t len, char *brks,
brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB8
}
else if ((current_class == GBP_Extend) ||
- (current_class == GBP_ZWJ))
+ (current_class == GBP_ZWJ) ||
+ (current_class == GBP_Virama))
{
brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB9
}
@@ -197,13 +225,7 @@ static void set_graphemebreaks(const void *s, size_t len, char *brks,
{
brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB9b
}
- else if (rule10Left && (current_class == GBP_E_Modifier))
- {
- brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB10
- }
- else if ((prev_class == GBP_ZWJ) &&
- ((current_class == GBP_Glue_After_Zwj) ||
- (current_class == GBP_E_Base_GAZ)))
+ else if ((rule11Detector == 3) && ub_is_extended_pictographic(ch))
{
brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB11
}
diff --git a/src/static_libs/libunibreak/graphemebreak.h b/src/static_libs/libunibreak/graphemebreak.h
index c01768233a..e5259b5ccd 100644
--- a/src/static_libs/libunibreak/graphemebreak.h
+++ b/src/static_libs/libunibreak/graphemebreak.h
@@ -2,7 +2,7 @@
* Grapheme breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
+ * Copyright (C) 2016-2019 Andreas Röver <roever at users dot sf dot net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -28,6 +28,10 @@
* Unicode 9.0.0:
* <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
*
+ * This library has been updated according to Revision 35, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr29/tr29-35.html>
+ *
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
*/
@@ -66,4 +70,4 @@ void set_graphemebreaks_utf32(const utf32_t *s, size_t len,
}
#endif
-#endif
+#endif /* GRAPHEMEBREAK_H */
diff --git a/src/static_libs/libunibreak/graphemebreakdata.c b/src/static_libs/libunibreak/graphemebreakdata.c
index cab9bebd80..bc1af932cf 100644
--- a/src/static_libs/libunibreak/graphemebreakdata.c
+++ b/src/static_libs/libunibreak/graphemebreakdata.c
@@ -1,6 +1,6 @@
/* The content of this file is generated from:
-# GraphemeBreakProperty-9.0.0.txt
-# Date: 2016-06-03, 22:23:55 GMT
+# GraphemeBreakProperty-12.1.0.txt
+# Date: 2019-03-10, 10:53:12 GMT
*/
#include "graphemebreakdef.h"
@@ -36,12 +36,13 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x0730, 0x074A, GBP_Extend},
{0x07A6, 0x07B0, GBP_Extend},
{0x07EB, 0x07F3, GBP_Extend},
+ {0x07FD, 0x07FD, GBP_Extend},
{0x0816, 0x0819, GBP_Extend},
{0x081B, 0x0823, GBP_Extend},
{0x0825, 0x0827, GBP_Extend},
{0x0829, 0x082D, GBP_Extend},
{0x0859, 0x085B, GBP_Extend},
- {0x08D4, 0x08E1, GBP_Extend},
+ {0x08D3, 0x08E1, GBP_Extend},
{0x08E2, 0x08E2, GBP_Prepend},
{0x08E3, 0x0902, GBP_Extend},
{0x0903, 0x0903, GBP_SpacingMark},
@@ -66,6 +67,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x09CD, 0x09CD, GBP_Extend},
{0x09D7, 0x09D7, GBP_Extend},
{0x09E2, 0x09E3, GBP_Extend},
+ {0x09FE, 0x09FE, GBP_Extend},
{0x0A01, 0x0A02, GBP_Extend},
{0x0A03, 0x0A03, GBP_SpacingMark},
{0x0A3C, 0x0A3C, GBP_Extend},
@@ -86,6 +88,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x0ACB, 0x0ACC, GBP_SpacingMark},
{0x0ACD, 0x0ACD, GBP_Extend},
{0x0AE2, 0x0AE3, GBP_Extend},
+ {0x0AFA, 0x0AFF, GBP_Extend},
{0x0B01, 0x0B01, GBP_Extend},
{0x0B02, 0x0B03, GBP_SpacingMark},
{0x0B3C, 0x0B3C, GBP_Extend},
@@ -110,6 +113,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x0BD7, 0x0BD7, GBP_Extend},
{0x0C00, 0x0C00, GBP_Extend},
{0x0C01, 0x0C03, GBP_SpacingMark},
+ {0x0C04, 0x0C04, GBP_Extend},
{0x0C3E, 0x0C40, GBP_Extend},
{0x0C41, 0x0C44, GBP_SpacingMark},
{0x0C46, 0x0C48, GBP_Extend},
@@ -130,8 +134,9 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x0CCC, 0x0CCD, GBP_Extend},
{0x0CD5, 0x0CD6, GBP_Extend},
{0x0CE2, 0x0CE3, GBP_Extend},
- {0x0D01, 0x0D01, GBP_Extend},
+ {0x0D00, 0x0D01, GBP_Extend},
{0x0D02, 0x0D03, GBP_SpacingMark},
+ {0x0D3B, 0x0D3C, GBP_Extend},
{0x0D3E, 0x0D3E, GBP_Extend},
{0x0D3F, 0x0D40, GBP_SpacingMark},
{0x0D41, 0x0D44, GBP_Extend},
@@ -156,8 +161,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x0E47, 0x0E4E, GBP_Extend},
{0x0EB1, 0x0EB1, GBP_Extend},
{0x0EB3, 0x0EB3, GBP_SpacingMark},
- {0x0EB4, 0x0EB9, GBP_Extend},
- {0x0EBB, 0x0EBC, GBP_Extend},
+ {0x0EB4, 0x0EBC, GBP_Extend},
{0x0EC8, 0x0ECD, GBP_Extend},
{0x0F18, 0x0F19, GBP_Extend},
{0x0F35, 0x0F35, GBP_Extend},
@@ -232,7 +236,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x1B00, 0x1B03, GBP_Extend},
{0x1B04, 0x1B04, GBP_SpacingMark},
{0x1B34, 0x1B34, GBP_Extend},
- {0x1B35, 0x1B35, GBP_SpacingMark},
+ {0x1B35, 0x1B35, GBP_Extend},
{0x1B36, 0x1B3A, GBP_Extend},
{0x1B3B, 0x1B3B, GBP_SpacingMark},
{0x1B3C, 0x1B3C, GBP_Extend},
@@ -265,10 +269,10 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x1CE1, 0x1CE1, GBP_SpacingMark},
{0x1CE2, 0x1CE8, GBP_Extend},
{0x1CED, 0x1CED, GBP_Extend},
- {0x1CF2, 0x1CF3, GBP_SpacingMark},
{0x1CF4, 0x1CF4, GBP_Extend},
+ {0x1CF7, 0x1CF7, GBP_SpacingMark},
{0x1CF8, 0x1CF9, GBP_Extend},
- {0x1DC0, 0x1DF5, GBP_Extend},
+ {0x1DC0, 0x1DF9, GBP_Extend},
{0x1DFB, 0x1DFF, GBP_Extend},
{0x200B, 0x200B, GBP_Control},
{0x200C, 0x200C, GBP_Extend},
@@ -285,10 +289,6 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x20E1, 0x20E1, GBP_Extend},
{0x20E2, 0x20E4, GBP_Extend},
{0x20E5, 0x20F0, GBP_Extend},
- {0x261D, 0x261D, GBP_E_Base},
- {0x26F9, 0x26F9, GBP_E_Base},
- {0x270A, 0x270D, GBP_E_Base},
- {0x2764, 0x2764, GBP_Glue_After_Zwj},
{0x2CEF, 0x2CF1, GBP_Extend},
{0x2D7F, 0x2D7F, GBP_Extend},
{0x2DE0, 0x2DFF, GBP_Extend},
@@ -310,6 +310,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0xA8B4, 0xA8C3, GBP_SpacingMark},
{0xA8C4, 0xA8C5, GBP_Extend},
{0xA8E0, 0xA8F1, GBP_Extend},
+ {0xA8FF, 0xA8FF, GBP_Extend},
{0xA926, 0xA92D, GBP_Extend},
{0xA947, 0xA951, GBP_Extend},
{0xA952, 0xA953, GBP_SpacingMark},
@@ -320,8 +321,8 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0xA9B4, 0xA9B5, GBP_SpacingMark},
{0xA9B6, 0xA9B9, GBP_Extend},
{0xA9BA, 0xA9BB, GBP_SpacingMark},
- {0xA9BC, 0xA9BC, GBP_Extend},
- {0xA9BD, 0xA9C0, GBP_SpacingMark},
+ {0xA9BC, 0xA9BD, GBP_Extend},
+ {0xA9BE, 0xA9C0, GBP_SpacingMark},
{0xA9E5, 0xA9E5, GBP_Extend},
{0xAA29, 0xAA2E, GBP_Extend},
{0xAA2F, 0xAA30, GBP_SpacingMark},
@@ -1149,7 +1150,6 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0xD789, 0xD7A3, GBP_LVT},
{0xD7B0, 0xD7C6, GBP_V},
{0xD7CB, 0xD7FB, GBP_T},
- {0xD800, 0xDFFF, GBP_Control},
{0xFB1E, 0xFB1E, GBP_Extend},
{0xFE00, 0xFE0F, GBP_Extend},
{0xFE20, 0xFE2F, GBP_Extend},
@@ -1166,6 +1166,8 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x10A38, 0x10A3A, GBP_Extend},
{0x10A3F, 0x10A3F, GBP_Extend},
{0x10AE5, 0x10AE6, GBP_Extend},
+ {0x10D24, 0x10D27, GBP_Extend},
+ {0x10F46, 0x10F50, GBP_Extend},
{0x11000, 0x11000, GBP_SpacingMark},
{0x11001, 0x11001, GBP_Extend},
{0x11002, 0x11002, GBP_SpacingMark},
@@ -1177,10 +1179,12 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x110B7, 0x110B8, GBP_SpacingMark},
{0x110B9, 0x110BA, GBP_Extend},
{0x110BD, 0x110BD, GBP_Prepend},
+ {0x110CD, 0x110CD, GBP_Prepend},
{0x11100, 0x11102, GBP_Extend},
{0x11127, 0x1112B, GBP_Extend},
{0x1112C, 0x1112C, GBP_SpacingMark},
{0x1112D, 0x11134, GBP_Extend},
+ {0x11145, 0x11146, GBP_SpacingMark},
{0x11173, 0x11173, GBP_Extend},
{0x11180, 0x11181, GBP_Extend},
{0x11182, 0x11182, GBP_SpacingMark},
@@ -1188,7 +1192,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x111B6, 0x111BE, GBP_Extend},
{0x111BF, 0x111C0, GBP_SpacingMark},
{0x111C2, 0x111C3, GBP_Prepend},
- {0x111CA, 0x111CC, GBP_Extend},
+ {0x111C9, 0x111CC, GBP_Extend},
{0x1122C, 0x1122E, GBP_SpacingMark},
{0x1122F, 0x11231, GBP_Extend},
{0x11232, 0x11233, GBP_SpacingMark},
@@ -1201,7 +1205,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x112E3, 0x112EA, GBP_Extend},
{0x11300, 0x11301, GBP_Extend},
{0x11302, 0x11303, GBP_SpacingMark},
- {0x1133C, 0x1133C, GBP_Extend},
+ {0x1133B, 0x1133C, GBP_Extend},
{0x1133E, 0x1133E, GBP_Extend},
{0x1133F, 0x1133F, GBP_SpacingMark},
{0x11340, 0x11340, GBP_Extend},
@@ -1218,6 +1222,7 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x11442, 0x11444, GBP_Extend},
{0x11445, 0x11445, GBP_SpacingMark},
{0x11446, 0x11446, GBP_Extend},
+ {0x1145E, 0x1145E, GBP_Extend},
{0x114B0, 0x114B0, GBP_Extend},
{0x114B1, 0x114B2, GBP_SpacingMark},
{0x114B3, 0x114B8, GBP_Extend},
@@ -1255,6 +1260,29 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x11722, 0x11725, GBP_Extend},
{0x11726, 0x11726, GBP_SpacingMark},
{0x11727, 0x1172B, GBP_Extend},
+ {0x1182C, 0x1182E, GBP_SpacingMark},
+ {0x1182F, 0x11837, GBP_Extend},
+ {0x11838, 0x11838, GBP_SpacingMark},
+ {0x11839, 0x1183A, GBP_Extend},
+ {0x119D1, 0x119D3, GBP_SpacingMark},
+ {0x119D4, 0x119D7, GBP_Extend},
+ {0x119DA, 0x119DB, GBP_Extend},
+ {0x119DC, 0x119DF, GBP_SpacingMark},
+ {0x119E0, 0x119E0, GBP_Extend},
+ {0x119E4, 0x119E4, GBP_SpacingMark},
+ {0x11A01, 0x11A0A, GBP_Extend},
+ {0x11A33, 0x11A38, GBP_Extend},
+ {0x11A39, 0x11A39, GBP_SpacingMark},
+ {0x11A3A, 0x11A3A, GBP_Prepend},
+ {0x11A3B, 0x11A3E, GBP_Extend},
+ {0x11A47, 0x11A47, GBP_Extend},
+ {0x11A51, 0x11A56, GBP_Extend},
+ {0x11A57, 0x11A58, GBP_SpacingMark},
+ {0x11A59, 0x11A5B, GBP_Extend},
+ {0x11A84, 0x11A89, GBP_Prepend},
+ {0x11A8A, 0x11A96, GBP_Extend},
+ {0x11A97, 0x11A97, GBP_SpacingMark},
+ {0x11A98, 0x11A99, GBP_Extend},
{0x11C2F, 0x11C2F, GBP_SpacingMark},
{0x11C30, 0x11C36, GBP_Extend},
{0x11C38, 0x11C3D, GBP_Extend},
@@ -1267,9 +1295,25 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x11CB2, 0x11CB3, GBP_Extend},
{0x11CB4, 0x11CB4, GBP_SpacingMark},
{0x11CB5, 0x11CB6, GBP_Extend},
+ {0x11D31, 0x11D36, GBP_Extend},
+ {0x11D3A, 0x11D3A, GBP_Extend},
+ {0x11D3C, 0x11D3D, GBP_Extend},
+ {0x11D3F, 0x11D45, GBP_Extend},
+ {0x11D46, 0x11D46, GBP_Prepend},
+ {0x11D47, 0x11D47, GBP_Extend},
+ {0x11D8A, 0x11D8E, GBP_SpacingMark},
+ {0x11D90, 0x11D91, GBP_Extend},
+ {0x11D93, 0x11D94, GBP_SpacingMark},
+ {0x11D95, 0x11D95, GBP_Extend},
+ {0x11D96, 0x11D96, GBP_SpacingMark},
+ {0x11D97, 0x11D97, GBP_Extend},
+ {0x11EF3, 0x11EF4, GBP_Extend},
+ {0x11EF5, 0x11EF6, GBP_SpacingMark},
+ {0x13430, 0x13438, GBP_Control},
{0x16AF0, 0x16AF4, GBP_Extend},
{0x16B30, 0x16B36, GBP_Extend},
- {0x16F51, 0x16F7E, GBP_SpacingMark},
+ {0x16F4F, 0x16F4F, GBP_Extend},
+ {0x16F51, 0x16F87, GBP_SpacingMark},
{0x16F8F, 0x16F92, GBP_Extend},
{0x1BC9D, 0x1BC9E, GBP_Extend},
{0x1BCA0, 0x1BCA3, GBP_Control},
@@ -1294,38 +1338,12 @@ static const struct GraphemeBreakProperties gb_prop_default[] = {
{0x1E01B, 0x1E021, GBP_Extend},
{0x1E023, 0x1E024, GBP_Extend},
{0x1E026, 0x1E02A, GBP_Extend},
+ {0x1E130, 0x1E136, GBP_Extend},
+ {0x1E2EC, 0x1E2EF, GBP_Extend},
{0x1E8D0, 0x1E8D6, GBP_Extend},
{0x1E944, 0x1E94A, GBP_Extend},
{0x1F1E6, 0x1F1FF, GBP_Regional_Indicator},
- {0x1F385, 0x1F385, GBP_E_Base},
- {0x1F3C3, 0x1F3C4, GBP_E_Base},
- {0x1F3CA, 0x1F3CB, GBP_E_Base},
- {0x1F3FB, 0x1F3FF, GBP_E_Modifier},
- {0x1F442, 0x1F443, GBP_E_Base},
- {0x1F446, 0x1F450, GBP_E_Base},
- {0x1F466, 0x1F469, GBP_E_Base_GAZ},
- {0x1F46E, 0x1F46E, GBP_E_Base},
- {0x1F470, 0x1F478, GBP_E_Base},
- {0x1F47C, 0x1F47C, GBP_E_Base},
- {0x1F481, 0x1F483, GBP_E_Base},
- {0x1F485, 0x1F487, GBP_E_Base},
- {0x1F48B, 0x1F48B, GBP_Glue_After_Zwj},
- {0x1F4AA, 0x1F4AA, GBP_E_Base},
- {0x1F575, 0x1F575, GBP_E_Base},
- {0x1F57A, 0x1F57A, GBP_E_Base},
- {0x1F590, 0x1F590, GBP_E_Base},
- {0x1F595, 0x1F596, GBP_E_Base},
- {0x1F5E8, 0x1F5E8, GBP_Glue_After_Zwj},
- {0x1F645, 0x1F647, GBP_E_Base},
- {0x1F64B, 0x1F64F, GBP_E_Base},
- {0x1F6A3, 0x1F6A3, GBP_E_Base},
- {0x1F6B4, 0x1F6B6, GBP_E_Base},
- {0x1F6C0, 0x1F6C0, GBP_E_Base},
- {0x1F918, 0x1F91E, GBP_E_Base},
- {0x1F926, 0x1F926, GBP_E_Base},
- {0x1F930, 0x1F930, GBP_E_Base},
- {0x1F933, 0x1F939, GBP_E_Base},
- {0x1F93C, 0x1F93E, GBP_E_Base},
+ {0x1F3FB, 0x1F3FF, GBP_Extend},
{0xE0000, 0xE0000, GBP_Control},
{0xE0001, 0xE0001, GBP_Control},
{0xE0002, 0xE001F, GBP_Control},
diff --git a/src/static_libs/libunibreak/graphemebreakdef.h b/src/static_libs/libunibreak/graphemebreakdef.h
index 0de1f3d623..90ccfbd5f1 100644
--- a/src/static_libs/libunibreak/graphemebreakdef.h
+++ b/src/static_libs/libunibreak/graphemebreakdef.h
@@ -2,7 +2,7 @@
* Grapheme breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
+ * Copyright (C) 2016-2019 Andreas Röver <roever at users dot sf dot net>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -28,6 +28,10 @@
* Unicode 9.0.0:
* <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
*
+ * This library has been updated according to Revision 35, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr29/tr29-35.html>
+ *
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
*/
@@ -45,13 +49,15 @@
/**
* Word break classes. This is a direct mapping of Table 2 of Unicode
- * Standard Annex 29
+ * Standard Annex 29.
*/
enum GraphemeBreakClass
{
GBP_CR,
GBP_LF,
GBP_Control,
+ GBP_Virama,
+ GBP_LinkingConsonant,
GBP_Extend,
GBP_ZWJ,
GBP_Regional_Indicator,
@@ -62,10 +68,6 @@ enum GraphemeBreakClass
GBP_T,
GBP_LV,
GBP_LVT,
- GBP_E_Base,
- GBP_E_Modifier,
- GBP_Glue_After_Zwj,
- GBP_E_Base_GAZ,
GBP_Other,
GBP_Undefined
};
@@ -76,7 +78,7 @@ enum GraphemeBreakClass
*/
struct GraphemeBreakProperties
{
- utf32_t start; /**< Starting coding point */
- utf32_t end; /**< End coding point, including */
+ utf32_t start; /**< Start codepoint */
+ utf32_t end; /**< End codepoint, inclusive */
enum GraphemeBreakClass prop; /**< The grapheme breaking property */
};
diff --git a/src/static_libs/libunibreak/linebreak.c b/src/static_libs/libunibreak/linebreak.c
index 41f23c1c08..98e2730314 100644
--- a/src/static_libs/libunibreak/linebreak.c
+++ b/src/static_libs/libunibreak/linebreak.c
@@ -4,7 +4,7 @@
* Line breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2008-2016 Wu Yongwei <wuyongwei at gmail dot com>
+ * Copyright (C) 2008-2019 Wu Yongwei <wuyongwei at gmail dot com>
* Copyright (C) 2013 Petr Filipsky <philodej at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
@@ -31,9 +31,9 @@
* Unicode 5.0.0:
* <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
*
- * This library has been updated according to Revision 37, for
- * Unicode 9.0.0:
- * <URL:http://www.unicode.org/reports/tr14/tr14-37.html>
+ * This library has been updated according to Revision 43, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr14/tr14-43.html>
*
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
@@ -80,7 +80,9 @@ enum BreakAction
/**
* Break action pair table. This is a direct mapping of Table 2 of
- * Unicode Standard Annex 14, Revision 37, except the "CB" part.
+ * Unicode Standard Annex 14, Revision 37, except for ZWJ (manually
+ * adjusted after special processing as per LB8a of Revision 41) and CB
+ * (manually added as per LB20).
*/
static enum BreakAction baTable[LBP_CB][LBP_CB] = {
{ /* OP */
@@ -270,17 +272,17 @@ static enum BreakAction baTable[LBP_CB][LBP_CB] = {
CMI_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK, DIR_BRK },
{ /* ZWJ */
- DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
- PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
- IND_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK,
+ IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+ PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
+ DIR_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK,
CMI_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
- DIR_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK },
+ DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK, DIR_BRK },
{ /* CB */
DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, DIR_BRK, PRH_BRK,
PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, PRH_BRK,
CMI_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
- DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+ DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK, DIR_BRK },
};
/**
@@ -288,8 +290,9 @@ static enum BreakAction baTable[LBP_CB][LBP_CB] = {
*/
struct LineBreakPropertiesIndex
{
- utf32_t end; /**< End coding point */
- const struct LineBreakProperties *lbp;/**< Pointer to line breaking properties */
+ utf32_t end; /**< End codepoint */
+ const struct LineBreakProperties *lbp; /**< Pointer to line breaking
+ properties */
};
/**
@@ -335,7 +338,7 @@ static __inline int ends_with(const char *str, const char *suffix,
* Initializes the second-level index to the line breaking properties.
* If it is not called, the performance of #get_char_lb_class_lang (and
* thus the main functionality) can be pretty bad, especially for big
- * code points like those of Chinese.
+ * codepoints like those of Chinese.
*/
void init_linebreak(void)
{
@@ -612,12 +615,18 @@ static int get_lb_result_lookup(
break;
}
+ /* Special processing due to rule LB8a */
+ if (lbpCtx->fLb8aZwj)
+ {
+ brk = LINEBREAK_NOBREAK;
+ }
+
/* Special processing due to rule LB21a */
if (lbpCtx->fLb21aHebrew &&
(lbpCtx->lbcCur == LBP_HY || lbpCtx->lbcCur == LBP_BA))
{
brk = LINEBREAK_NOBREAK;
- lbpCtx->fLb21aHebrew = 0;
+ lbpCtx->fLb21aHebrew = false;
}
else
{
@@ -663,17 +672,21 @@ void lb_init_break_context(
lbpCtx->lbcCur = resolve_lb_class(
get_char_lb_class_lang(ch, lbpCtx->lbpLang),
lbpCtx->lang);
- lbpCtx->fLb21aHebrew = 0;
+ lbpCtx->fLb8aZwj =
+ (get_char_lb_class_lang(ch, lbpCtx->lbpLang) == LBP_ZWJ);
+ lbpCtx->fLb10LeadSpace =
+ (get_char_lb_class_lang(ch, lbpCtx->lbpLang) == LBP_SP);
+ lbpCtx->fLb21aHebrew = false;
lbpCtx->cLb30aRI = 0;
treat_first_char(lbpCtx);
}
/**
- * Updates LineBreakingContext for the next code point and returns
+ * Updates LineBreakingContext for the next codepoint and returns
* the detected break.
*
* @param[in,out] lbpCtx pointer to the line breaking context
- * @param[in] ch Unicode code point
+ * @param[in] ch Unicode codepoint
* @return break result, one of #LINEBREAK_MUSTBREAK,
* #LINEBREAK_ALLOWBREAK, and #LINEBREAK_NOBREAK
* @post the line breaking context is updated
@@ -700,6 +713,25 @@ int lb_process_next_char(
default:
break;
}
+
+ /* Special processing due to rule LB8a */
+ if (lbpCtx->lbcNew == LBP_ZWJ)
+ {
+ lbpCtx->fLb8aZwj = true;
+ }
+ else
+ {
+ lbpCtx->fLb8aZwj = false;
+ }
+
+ /* Special processing due to rule LB10 */
+ if (lbpCtx->fLb10LeadSpace)
+ {
+ if (lbpCtx->lbcNew == LBP_CM || lbpCtx->lbcNew == LBP_ZWJ)
+ brk = LINEBREAK_ALLOWBREAK;
+ lbpCtx->fLb10LeadSpace = false;
+ }
+
return brk;
}
diff --git a/src/static_libs/libunibreak/linebreak.h b/src/static_libs/libunibreak/linebreak.h
index fd7351191b..fa88094b4b 100644
--- a/src/static_libs/libunibreak/linebreak.h
+++ b/src/static_libs/libunibreak/linebreak.h
@@ -4,7 +4,7 @@
* Line breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2008-2016 Wu Yongwei <wuyongwei at gmail dot com>
+ * Copyright (C) 2008-2019 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -30,9 +30,9 @@
* Unicode 5.0.0:
* <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
*
- * This library has been updated according to Revision 37, for
- * Unicode 9.0.0:
- * <URL:http://www.unicode.org/reports/tr14/tr14-37.html>
+ * This library has been updated according to Revision 43, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr14/tr14-43.html>
*
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
diff --git a/src/static_libs/libunibreak/linebreakdata.c b/src/static_libs/libunibreak/linebreakdata.c
index c571f2da00..23d9072baa 100644
--- a/src/static_libs/libunibreak/linebreakdata.c
+++ b/src/static_libs/libunibreak/linebreakdata.c
@@ -1,6 +1,6 @@
/* The content of this file is generated from:
-# LineBreak-9.0.0.txt
-# Date: 2016-05-26, 01:00:00 GMT [KW, LI]
+# LineBreak-12.1.0.txt
+# Date: 2019-03-31, 22:04:15 GMT [KW, LI]
*/
#include "linebreakdef.h"
@@ -94,7 +94,7 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x037E, 0x037E, LBP_IS },
{ 0x037F, 0x0482, LBP_AL },
{ 0x0483, 0x0489, LBP_CM },
- { 0x048A, 0x0587, LBP_AL },
+ { 0x048A, 0x0588, LBP_AL },
{ 0x0589, 0x0589, LBP_IS },
{ 0x058A, 0x058A, LBP_BA },
{ 0x058D, 0x058E, LBP_AL },
@@ -149,7 +149,10 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x07F4, 0x07F7, LBP_AL },
{ 0x07F8, 0x07F8, LBP_IS },
{ 0x07F9, 0x07F9, LBP_EX },
- { 0x07FA, 0x0815, LBP_AL },
+ { 0x07FA, 0x07FA, LBP_AL },
+ { 0x07FD, 0x07FD, LBP_CM },
+ { 0x07FE, 0x07FF, LBP_PR },
+ { 0x0800, 0x0815, LBP_AL },
{ 0x0816, 0x0819, LBP_CM },
{ 0x081A, 0x081A, LBP_AL },
{ 0x081B, 0x0823, LBP_CM },
@@ -160,7 +163,7 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x0830, 0x0858, LBP_AL },
{ 0x0859, 0x085B, LBP_CM },
{ 0x085E, 0x08BD, LBP_AL },
- { 0x08D4, 0x08E1, LBP_CM },
+ { 0x08D3, 0x08E1, LBP_CM },
{ 0x08E2, 0x08E2, LBP_AL },
{ 0x08E3, 0x0903, LBP_CM },
{ 0x0904, 0x0939, LBP_AL },
@@ -190,14 +193,17 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x09F9, 0x09F9, LBP_PO },
{ 0x09FA, 0x09FA, LBP_AL },
{ 0x09FB, 0x09FB, LBP_PR },
- { 0x0A01, 0x0A03, LBP_CM },
+ { 0x09FC, 0x09FD, LBP_AL },
+ { 0x09FE, 0x0A03, LBP_CM },
{ 0x0A05, 0x0A39, LBP_AL },
{ 0x0A3C, 0x0A51, LBP_CM },
{ 0x0A59, 0x0A5E, LBP_AL },
{ 0x0A66, 0x0A6F, LBP_NU },
{ 0x0A70, 0x0A71, LBP_CM },
{ 0x0A72, 0x0A74, LBP_AL },
- { 0x0A75, 0x0A83, LBP_CM },
+ { 0x0A75, 0x0A75, LBP_CM },
+ { 0x0A76, 0x0A76, LBP_AL },
+ { 0x0A81, 0x0A83, LBP_CM },
{ 0x0A85, 0x0AB9, LBP_AL },
{ 0x0ABC, 0x0ABC, LBP_CM },
{ 0x0ABD, 0x0ABD, LBP_AL },
@@ -208,7 +214,7 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x0AF0, 0x0AF0, LBP_AL },
{ 0x0AF1, 0x0AF1, LBP_PR },
{ 0x0AF9, 0x0AF9, LBP_AL },
- { 0x0B01, 0x0B03, LBP_CM },
+ { 0x0AFA, 0x0B03, LBP_CM },
{ 0x0B05, 0x0B39, LBP_AL },
{ 0x0B3C, 0x0B3C, LBP_CM },
{ 0x0B3D, 0x0B3D, LBP_AL },
@@ -226,14 +232,16 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x0BF0, 0x0BF8, LBP_AL },
{ 0x0BF9, 0x0BF9, LBP_PR },
{ 0x0BFA, 0x0BFA, LBP_AL },
- { 0x0C00, 0x0C03, LBP_CM },
+ { 0x0C00, 0x0C04, LBP_CM },
{ 0x0C05, 0x0C3D, LBP_AL },
{ 0x0C3E, 0x0C56, LBP_CM },
{ 0x0C58, 0x0C61, LBP_AL },
{ 0x0C62, 0x0C63, LBP_CM },
{ 0x0C66, 0x0C6F, LBP_NU },
+ { 0x0C77, 0x0C77, LBP_BB },
{ 0x0C78, 0x0C80, LBP_AL },
{ 0x0C81, 0x0C83, LBP_CM },
+ { 0x0C84, 0x0C84, LBP_BB },
{ 0x0C85, 0x0CB9, LBP_AL },
{ 0x0CBC, 0x0CBC, LBP_CM },
{ 0x0CBD, 0x0CBD, LBP_AL },
@@ -242,8 +250,10 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x0CE2, 0x0CE3, LBP_CM },
{ 0x0CE6, 0x0CEF, LBP_NU },
{ 0x0CF1, 0x0CF2, LBP_AL },
- { 0x0D01, 0x0D03, LBP_CM },
- { 0x0D05, 0x0D3D, LBP_AL },
+ { 0x0D00, 0x0D03, LBP_CM },
+ { 0x0D05, 0x0D3A, LBP_AL },
+ { 0x0D3B, 0x0D3C, LBP_CM },
+ { 0x0D3D, 0x0D3D, LBP_AL },
{ 0x0D3E, 0x0D4D, LBP_CM },
{ 0x0D4E, 0x0D56, LBP_AL },
{ 0x0D57, 0x0D57, LBP_CM },
@@ -417,11 +427,11 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1CD4, 0x1CE8, LBP_CM },
{ 0x1CE9, 0x1CEC, LBP_AL },
{ 0x1CED, 0x1CED, LBP_CM },
- { 0x1CEE, 0x1CF1, LBP_AL },
- { 0x1CF2, 0x1CF4, LBP_CM },
+ { 0x1CEE, 0x1CF3, LBP_AL },
+ { 0x1CF4, 0x1CF4, LBP_CM },
{ 0x1CF5, 0x1CF6, LBP_AL },
- { 0x1CF8, 0x1CF9, LBP_CM },
- { 0x1D00, 0x1DBF, LBP_AL },
+ { 0x1CF7, 0x1CF9, LBP_CM },
+ { 0x1CFA, 0x1DBF, LBP_AL },
{ 0x1DC0, 0x1DFF, LBP_CM },
{ 0x1E00, 0x1FFC, LBP_AL },
{ 0x1FFD, 0x1FFD, LBP_BB },
@@ -430,7 +440,9 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x2007, 0x2007, LBP_GL },
{ 0x2008, 0x200A, LBP_BA },
{ 0x200B, 0x200B, LBP_ZW },
- { 0x200C, 0x200F, LBP_CM },
+ { 0x200C, 0x200C, LBP_CM },
+ { 0x200D, 0x200D, LBP_ZWJ },
+ { 0x200E, 0x200F, LBP_CM },
{ 0x2010, 0x2010, LBP_BA },
{ 0x2011, 0x2011, LBP_GL },
{ 0x2012, 0x2013, LBP_BA },
@@ -808,7 +820,11 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x2E3F, 0x2E3F, LBP_AL },
{ 0x2E40, 0x2E41, LBP_BA },
{ 0x2E42, 0x2E42, LBP_OP },
- { 0x2E43, 0x2E44, LBP_BA },
+ { 0x2E43, 0x2E4A, LBP_BA },
+ { 0x2E4B, 0x2E4B, LBP_AL },
+ { 0x2E4C, 0x2E4C, LBP_BA },
+ { 0x2E4D, 0x2E4D, LBP_AL },
+ { 0x2E4E, 0x2E4F, LBP_BA },
{ 0x2E80, 0x2FFB, LBP_ID },
{ 0x3000, 0x3000, LBP_BA },
{ 0x3001, 0x3002, LBP_CL },
@@ -942,7 +958,8 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0xA8E0, 0xA8F1, LBP_CM },
{ 0xA8F2, 0xA8FB, LBP_AL },
{ 0xA8FC, 0xA8FC, LBP_BB },
- { 0xA8FD, 0xA8FD, LBP_AL },
+ { 0xA8FD, 0xA8FE, LBP_AL },
+ { 0xA8FF, 0xA8FF, LBP_CM },
{ 0xA900, 0xA909, LBP_NU },
{ 0xA90A, 0xA925, LBP_AL },
{ 0xA926, 0xA92D, LBP_CM },
@@ -1907,9 +1924,9 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1091F, 0x1091F, LBP_BA },
{ 0x10920, 0x10A00, LBP_AL },
{ 0x10A01, 0x10A0F, LBP_CM },
- { 0x10A10, 0x10A33, LBP_AL },
+ { 0x10A10, 0x10A35, LBP_AL },
{ 0x10A38, 0x10A3F, LBP_CM },
- { 0x10A40, 0x10A47, LBP_AL },
+ { 0x10A40, 0x10A48, LBP_AL },
{ 0x10A50, 0x10A57, LBP_BA },
{ 0x10A58, 0x10AE4, LBP_AL },
{ 0x10AE5, 0x10AE6, LBP_CM },
@@ -1918,7 +1935,12 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x10AF6, 0x10AF6, LBP_IN },
{ 0x10B00, 0x10B35, LBP_AL },
{ 0x10B39, 0x10B3F, LBP_BA },
- { 0x10B40, 0x10E7E, LBP_AL },
+ { 0x10B40, 0x10D23, LBP_AL },
+ { 0x10D24, 0x10D27, LBP_CM },
+ { 0x10D30, 0x10D39, LBP_NU },
+ { 0x10E60, 0x10F45, LBP_AL },
+ { 0x10F46, 0x10F50, LBP_CM },
+ { 0x10F51, 0x10FF6, LBP_AL },
{ 0x11000, 0x11002, LBP_CM },
{ 0x11003, 0x11037, LBP_AL },
{ 0x11038, 0x11046, LBP_CM },
@@ -1930,13 +1952,15 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x110B0, 0x110BA, LBP_CM },
{ 0x110BB, 0x110BD, LBP_AL },
{ 0x110BE, 0x110C1, LBP_BA },
- { 0x110D0, 0x110E8, LBP_AL },
+ { 0x110CD, 0x110E8, LBP_AL },
{ 0x110F0, 0x110F9, LBP_NU },
{ 0x11100, 0x11102, LBP_CM },
{ 0x11103, 0x11126, LBP_AL },
{ 0x11127, 0x11134, LBP_CM },
{ 0x11136, 0x1113F, LBP_NU },
{ 0x11140, 0x11143, LBP_BA },
+ { 0x11144, 0x11144, LBP_AL },
+ { 0x11145, 0x11146, LBP_CM },
{ 0x11150, 0x11172, LBP_AL },
{ 0x11173, 0x11173, LBP_CM },
{ 0x11174, 0x11174, LBP_AL },
@@ -1949,8 +1973,7 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x111C5, 0x111C6, LBP_BA },
{ 0x111C7, 0x111C7, LBP_AL },
{ 0x111C8, 0x111C8, LBP_BA },
- { 0x111C9, 0x111C9, LBP_AL },
- { 0x111CA, 0x111CC, LBP_CM },
+ { 0x111C9, 0x111CC, LBP_CM },
{ 0x111CD, 0x111CD, LBP_AL },
{ 0x111D0, 0x111D9, LBP_NU },
{ 0x111DA, 0x111DA, LBP_AL },
@@ -1971,7 +1994,7 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x112F0, 0x112F9, LBP_NU },
{ 0x11300, 0x11303, LBP_CM },
{ 0x11305, 0x11339, LBP_AL },
- { 0x1133C, 0x1133C, LBP_CM },
+ { 0x1133B, 0x1133C, LBP_CM },
{ 0x1133D, 0x1133D, LBP_AL },
{ 0x1133E, 0x1134D, LBP_CM },
{ 0x11350, 0x11350, LBP_AL },
@@ -1985,7 +2008,9 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1144F, 0x1144F, LBP_AL },
{ 0x11450, 0x11459, LBP_NU },
{ 0x1145B, 0x1145B, LBP_BA },
- { 0x1145D, 0x114AF, LBP_AL },
+ { 0x1145D, 0x1145D, LBP_AL },
+ { 0x1145E, 0x1145E, LBP_CM },
+ { 0x1145F, 0x114AF, LBP_AL },
{ 0x114B0, 0x114C3, LBP_CM },
{ 0x114C4, 0x114C7, LBP_AL },
{ 0x114D0, 0x114D9, LBP_NU },
@@ -2006,15 +2031,44 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x11660, 0x1166C, LBP_BB },
{ 0x11680, 0x116AA, LBP_AL },
{ 0x116AB, 0x116B7, LBP_CM },
+ { 0x116B8, 0x116B8, LBP_AL },
{ 0x116C0, 0x116C9, LBP_NU },
{ 0x11700, 0x1172B, LBP_SA },
{ 0x11730, 0x11739, LBP_NU },
{ 0x1173A, 0x1173B, LBP_SA },
{ 0x1173C, 0x1173E, LBP_BA },
{ 0x1173F, 0x1173F, LBP_SA },
- { 0x118A0, 0x118DF, LBP_AL },
+ { 0x11800, 0x1182B, LBP_AL },
+ { 0x1182C, 0x1183A, LBP_CM },
+ { 0x1183B, 0x118DF, LBP_AL },
{ 0x118E0, 0x118E9, LBP_NU },
- { 0x118EA, 0x11C2E, LBP_AL },
+ { 0x118EA, 0x119D0, LBP_AL },
+ { 0x119D1, 0x119E0, LBP_CM },
+ { 0x119E1, 0x119E1, LBP_AL },
+ { 0x119E2, 0x119E2, LBP_BB },
+ { 0x119E3, 0x119E3, LBP_AL },
+ { 0x119E4, 0x119E4, LBP_CM },
+ { 0x11A00, 0x11A00, LBP_AL },
+ { 0x11A01, 0x11A0A, LBP_CM },
+ { 0x11A0B, 0x11A32, LBP_AL },
+ { 0x11A33, 0x11A39, LBP_CM },
+ { 0x11A3A, 0x11A3A, LBP_AL },
+ { 0x11A3B, 0x11A3E, LBP_CM },
+ { 0x11A3F, 0x11A3F, LBP_BB },
+ { 0x11A40, 0x11A40, LBP_AL },
+ { 0x11A41, 0x11A44, LBP_BA },
+ { 0x11A45, 0x11A45, LBP_BB },
+ { 0x11A46, 0x11A46, LBP_AL },
+ { 0x11A47, 0x11A47, LBP_CM },
+ { 0x11A50, 0x11A50, LBP_AL },
+ { 0x11A51, 0x11A5B, LBP_CM },
+ { 0x11A5C, 0x11A89, LBP_AL },
+ { 0x11A8A, 0x11A99, LBP_CM },
+ { 0x11A9A, 0x11A9C, LBP_BA },
+ { 0x11A9D, 0x11A9D, LBP_AL },
+ { 0x11A9E, 0x11AA0, LBP_BB },
+ { 0x11AA1, 0x11AA2, LBP_BA },
+ { 0x11AC0, 0x11C2E, LBP_AL },
{ 0x11C2F, 0x11C3F, LBP_CM },
{ 0x11C40, 0x11C40, LBP_AL },
{ 0x11C41, 0x11C45, LBP_BA },
@@ -2024,6 +2078,21 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x11C71, 0x11C71, LBP_EX },
{ 0x11C72, 0x11C8F, LBP_AL },
{ 0x11C92, 0x11CB6, LBP_CM },
+ { 0x11D00, 0x11D30, LBP_AL },
+ { 0x11D31, 0x11D45, LBP_CM },
+ { 0x11D46, 0x11D46, LBP_AL },
+ { 0x11D47, 0x11D47, LBP_CM },
+ { 0x11D50, 0x11D59, LBP_NU },
+ { 0x11D60, 0x11D89, LBP_AL },
+ { 0x11D8A, 0x11D97, LBP_CM },
+ { 0x11D98, 0x11D98, LBP_AL },
+ { 0x11DA0, 0x11DA9, LBP_NU },
+ { 0x11EE0, 0x11EF2, LBP_AL },
+ { 0x11EF3, 0x11EF6, LBP_CM },
+ { 0x11EF7, 0x11FDC, LBP_AL },
+ { 0x11FDD, 0x11FE0, LBP_PO },
+ { 0x11FE1, 0x11FF1, LBP_AL },
+ { 0x11FFF, 0x11FFF, LBP_BA },
{ 0x12000, 0x1246E, LBP_AL },
{ 0x12470, 0x12474, LBP_BA },
{ 0x12480, 0x13257, LBP_AL },
@@ -2039,7 +2108,11 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1328A, 0x13378, LBP_AL },
{ 0x13379, 0x13379, LBP_OP },
{ 0x1337A, 0x1337B, LBP_CL },
- { 0x1337C, 0x145CD, LBP_AL },
+ { 0x1337C, 0x1342E, LBP_AL },
+ { 0x13430, 0x13436, LBP_GL },
+ { 0x13437, 0x13437, LBP_OP },
+ { 0x13438, 0x13438, LBP_CL },
+ { 0x14400, 0x145CD, LBP_AL },
{ 0x145CE, 0x145CE, LBP_OP },
{ 0x145CF, 0x145CF, LBP_CL },
{ 0x145D0, 0x16A5E, LBP_AL },
@@ -2055,11 +2128,17 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x16B44, 0x16B44, LBP_BA },
{ 0x16B45, 0x16B45, LBP_AL },
{ 0x16B50, 0x16B59, LBP_NU },
- { 0x16B5B, 0x16F50, LBP_AL },
+ { 0x16B5B, 0x16E96, LBP_AL },
+ { 0x16E97, 0x16E98, LBP_BA },
+ { 0x16E99, 0x16F4A, LBP_AL },
+ { 0x16F4F, 0x16F4F, LBP_CM },
+ { 0x16F50, 0x16F50, LBP_AL },
{ 0x16F51, 0x16F92, LBP_CM },
{ 0x16F93, 0x16F9F, LBP_AL },
- { 0x16FE0, 0x16FE0, LBP_NS },
- { 0x17000, 0x1B001, LBP_ID },
+ { 0x16FE0, 0x16FE3, LBP_NS },
+ { 0x17000, 0x1B11E, LBP_ID },
+ { 0x1B150, 0x1B167, LBP_CJ },
+ { 0x1B170, 0x1B2FB, LBP_ID },
{ 0x1BC00, 0x1BC9C, LBP_AL },
{ 0x1BC9D, 0x1BC9E, LBP_CM },
{ 0x1BC9F, 0x1BC9F, LBP_BA },
@@ -2088,22 +2167,34 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1DA87, 0x1DA8A, LBP_BA },
{ 0x1DA8B, 0x1DA8B, LBP_AL },
{ 0x1DA9B, 0x1E02A, LBP_CM },
+ { 0x1E100, 0x1E12C, LBP_AL },
+ { 0x1E130, 0x1E136, LBP_CM },
+ { 0x1E137, 0x1E13D, LBP_AL },
+ { 0x1E140, 0x1E149, LBP_NU },
+ { 0x1E14E, 0x1E2EB, LBP_AL },
+ { 0x1E2EC, 0x1E2EF, LBP_CM },
+ { 0x1E2F0, 0x1E2F9, LBP_NU },
+ { 0x1E2FF, 0x1E2FF, LBP_PR },
{ 0x1E800, 0x1E8CF, LBP_AL },
{ 0x1E8D0, 0x1E8D6, LBP_CM },
{ 0x1E900, 0x1E943, LBP_AL },
{ 0x1E944, 0x1E94A, LBP_CM },
+ { 0x1E94B, 0x1E94B, LBP_AL },
{ 0x1E950, 0x1E959, LBP_NU },
{ 0x1E95E, 0x1E95F, LBP_OP },
- { 0x1EE00, 0x1EEF1, LBP_AL },
+ { 0x1EC71, 0x1ECAB, LBP_AL },
+ { 0x1ECAC, 0x1ECAC, LBP_PO },
+ { 0x1ECAD, 0x1ECAF, LBP_AL },
+ { 0x1ECB0, 0x1ECB0, LBP_PO },
+ { 0x1ECB1, 0x1EEF1, LBP_AL },
{ 0x1F000, 0x1F0FF, LBP_ID },
{ 0x1F100, 0x1F10C, LBP_AI },
{ 0x1F10D, 0x1F10F, LBP_ID },
{ 0x1F110, 0x1F12D, LBP_AI },
- { 0x1F12E, 0x1F12E, LBP_AL },
- { 0x1F12F, 0x1F12F, LBP_ID },
+ { 0x1F12E, 0x1F12F, LBP_AL },
{ 0x1F130, 0x1F169, LBP_AI },
- { 0x1F16A, 0x1F16B, LBP_AL },
- { 0x1F16C, 0x1F16F, LBP_ID },
+ { 0x1F16A, 0x1F16C, LBP_AL },
+ { 0x1F16D, 0x1F16F, LBP_ID },
{ 0x1F170, 0x1F1AC, LBP_AI },
{ 0x1F1AD, 0x1F1E5, LBP_ID },
{ 0x1F1E6, 0x1F1FF, LBP_RI },
@@ -2115,29 +2206,31 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1F3B5, 0x1F3B6, LBP_AL },
{ 0x1F3B7, 0x1F3BB, LBP_ID },
{ 0x1F3BC, 0x1F3BC, LBP_AL },
- { 0x1F3BD, 0x1F3C2, LBP_ID },
- { 0x1F3C3, 0x1F3C4, LBP_EB },
- { 0x1F3C5, 0x1F3C9, LBP_ID },
- { 0x1F3CA, 0x1F3CB, LBP_EB },
- { 0x1F3CC, 0x1F3FA, LBP_ID },
+ { 0x1F3BD, 0x1F3C1, LBP_ID },
+ { 0x1F3C2, 0x1F3C4, LBP_EB },
+ { 0x1F3C5, 0x1F3C6, LBP_ID },
+ { 0x1F3C7, 0x1F3C7, LBP_EB },
+ { 0x1F3C8, 0x1F3C9, LBP_ID },
+ { 0x1F3CA, 0x1F3CC, LBP_EB },
+ { 0x1F3CD, 0x1F3FA, LBP_ID },
{ 0x1F3FB, 0x1F3FF, LBP_EM },
{ 0x1F400, 0x1F441, LBP_ID },
{ 0x1F442, 0x1F443, LBP_EB },
{ 0x1F444, 0x1F445, LBP_ID },
{ 0x1F446, 0x1F450, LBP_EB },
{ 0x1F451, 0x1F465, LBP_ID },
- { 0x1F466, 0x1F469, LBP_EB },
- { 0x1F46A, 0x1F46D, LBP_ID },
- { 0x1F46E, 0x1F46E, LBP_EB },
- { 0x1F46F, 0x1F46F, LBP_ID },
- { 0x1F470, 0x1F478, LBP_EB },
+ { 0x1F466, 0x1F478, LBP_EB },
{ 0x1F479, 0x1F47B, LBP_ID },
{ 0x1F47C, 0x1F47C, LBP_EB },
{ 0x1F47D, 0x1F480, LBP_ID },
{ 0x1F481, 0x1F483, LBP_EB },
{ 0x1F484, 0x1F484, LBP_ID },
{ 0x1F485, 0x1F487, LBP_EB },
- { 0x1F488, 0x1F49F, LBP_ID },
+ { 0x1F488, 0x1F48E, LBP_ID },
+ { 0x1F48F, 0x1F48F, LBP_EB },
+ { 0x1F490, 0x1F490, LBP_ID },
+ { 0x1F491, 0x1F491, LBP_EB },
+ { 0x1F492, 0x1F49F, LBP_ID },
{ 0x1F4A0, 0x1F4A0, LBP_AL },
{ 0x1F4A1, 0x1F4A1, LBP_ID },
{ 0x1F4A2, 0x1F4A2, LBP_AL },
@@ -2155,8 +2248,8 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1F517, 0x1F524, LBP_AL },
{ 0x1F525, 0x1F531, LBP_ID },
{ 0x1F532, 0x1F549, LBP_AL },
- { 0x1F54A, 0x1F574, LBP_ID },
- { 0x1F575, 0x1F575, LBP_EB },
+ { 0x1F54A, 0x1F573, LBP_ID },
+ { 0x1F574, 0x1F575, LBP_EB },
{ 0x1F576, 0x1F579, LBP_ID },
{ 0x1F57A, 0x1F57A, LBP_EB },
{ 0x1F57B, 0x1F58F, LBP_ID },
@@ -2181,7 +2274,9 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1F6B4, 0x1F6B6, LBP_EB },
{ 0x1F6B7, 0x1F6BF, LBP_ID },
{ 0x1F6C0, 0x1F6C0, LBP_EB },
- { 0x1F6C1, 0x1F6FF, LBP_ID },
+ { 0x1F6C1, 0x1F6CB, LBP_ID },
+ { 0x1F6CC, 0x1F6CC, LBP_EB },
+ { 0x1F6CD, 0x1F6FF, LBP_ID },
{ 0x1F700, 0x1F773, LBP_AL },
{ 0x1F774, 0x1F77F, LBP_ID },
{ 0x1F780, 0x1F7D4, LBP_AL },
@@ -2195,17 +2290,31 @@ const struct LineBreakProperties lb_prop_default[] = {
{ 0x1F860, 0x1F887, LBP_AL },
{ 0x1F888, 0x1F88F, LBP_ID },
{ 0x1F890, 0x1F8AD, LBP_AL },
- { 0x1F8AE, 0x1F917, LBP_ID },
- { 0x1F918, 0x1F91E, LBP_EB },
- { 0x1F91F, 0x1F925, LBP_ID },
+ { 0x1F8AE, 0x1F8FF, LBP_ID },
+ { 0x1F900, 0x1F90B, LBP_AL },
+ { 0x1F90C, 0x1F90E, LBP_ID },
+ { 0x1F90F, 0x1F90F, LBP_EB },
+ { 0x1F910, 0x1F917, LBP_ID },
+ { 0x1F918, 0x1F91F, LBP_EB },
+ { 0x1F920, 0x1F925, LBP_ID },
{ 0x1F926, 0x1F926, LBP_EB },
{ 0x1F927, 0x1F92F, LBP_ID },
- { 0x1F930, 0x1F930, LBP_EB },
- { 0x1F931, 0x1F932, LBP_ID },
- { 0x1F933, 0x1F939, LBP_EB },
+ { 0x1F930, 0x1F939, LBP_EB },
{ 0x1F93A, 0x1F93B, LBP_ID },
{ 0x1F93C, 0x1F93E, LBP_EB },
- { 0x1F93F, 0x3FFFD, LBP_ID },
+ { 0x1F93F, 0x1F9B4, LBP_ID },
+ { 0x1F9B5, 0x1F9B6, LBP_EB },
+ { 0x1F9B7, 0x1F9B7, LBP_ID },
+ { 0x1F9B8, 0x1F9B9, LBP_EB },
+ { 0x1F9BA, 0x1F9BA, LBP_ID },
+ { 0x1F9BB, 0x1F9BB, LBP_EB },
+ { 0x1F9BC, 0x1F9CC, LBP_ID },
+ { 0x1F9CD, 0x1F9CF, LBP_EB },
+ { 0x1F9D0, 0x1F9D0, LBP_ID },
+ { 0x1F9D1, 0x1F9DD, LBP_EB },
+ { 0x1F9DE, 0x1F9FF, LBP_ID },
+ { 0x1FA00, 0x1FA53, LBP_AL },
+ { 0x1FA54, 0x3FFFD, LBP_ID },
{ 0xE0001, 0xE01EF, LBP_CM },
{ 0xF0000, 0x10FFFD, LBP_XX },
{ 0xFFFFFFFF, 0xFFFFFFFF, LBP_Undefined }
diff --git a/src/static_libs/libunibreak/linebreakdef.c b/src/static_libs/libunibreak/linebreakdef.c
index 6b485cecbd..847621ed95 100644
--- a/src/static_libs/libunibreak/linebreakdef.c
+++ b/src/static_libs/libunibreak/linebreakdef.c
@@ -4,7 +4,7 @@
* Line breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2008-2016 Wu Yongwei <wuyongwei at gmail dot com>
+ * Copyright (C) 2008-2018 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -22,20 +22,6 @@
* not be misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source
* distribution.
- *
- * The main reference is Unicode Standard Annex 14 (UAX #14):
- * <URL:http://www.unicode.org/reports/tr14/>
- *
- * When this library was designed, this annex was at Revision 19, for
- * Unicode 5.0.0:
- * <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
- *
- * This library has been updated according to Revision 37, for
- * Unicode 9.0.0:
- * <URL:http://www.unicode.org/reports/tr14/tr14-37.html>
- *
- * The Unicode Terms of Use are available at
- * <URL:http://www.unicode.org/copyright.html>
*/
/**
@@ -66,6 +52,7 @@ static const struct LineBreakProperties lb_prop_German[] = {
{ 0x00AB, 0x00AB, LBP_CL }, /* Left double angle quotation mark: closing */
{ 0x00BB, 0x00BB, LBP_OP }, /* Right double angle quotation mark: opening */
{ 0x2018, 0x2018, LBP_CL }, /* Left single quotation mark: closing */
+ { 0x2019, 0x2019, LBP_GL }, /* Right single quotation mark: glue */
{ 0x201C, 0x201C, LBP_CL }, /* Left double quotation mark: closing */
{ 0x2039, 0x2039, LBP_CL }, /* Left single angle quotation mark: closing */
{ 0x203A, 0x203A, LBP_OP }, /* Right single angle quotation mark: opening */
diff --git a/src/static_libs/libunibreak/linebreakdef.h b/src/static_libs/libunibreak/linebreakdef.h
index 37ec7b546e..48d714ef29 100644
--- a/src/static_libs/libunibreak/linebreakdef.h
+++ b/src/static_libs/libunibreak/linebreakdef.h
@@ -4,7 +4,7 @@
* Line breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2008-2016 Wu Yongwei <wuyongwei at gmail dot com>
+ * Copyright (C) 2008-2018 Wu Yongwei <wuyongwei at gmail dot com>
* Copyright (C) 2013 Petr Filipsky <philodej at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
@@ -31,9 +31,9 @@
* Unicode 5.0.0:
* <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
*
- * This library has been updated according to Revision 37, for
- * Unicode 9.0.0:
- * <URL:http://www.unicode.org/reports/tr14/tr14-37.html>
+ * This library has been updated according to Revision 43, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr14/tr14-43.html>
*
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
@@ -52,8 +52,8 @@
#include "unibreakdef.h"
/**
- * Line break classes. This is a direct mapping of Table 1 of Unicode
- * Standard Annex 14, Revision 26.
+ * Line break classes. This is a mapping of Table 1 of Unicode
+ * Standard Annex 14.
*/
enum LineBreakClass
{
@@ -95,7 +95,7 @@ enum LineBreakClass
LBP_ZWJ, /**< Zero width joiner */
/* The following break class is treated in the pair table, but it is
- * not part of Table 2 of UAX #14. */
+ * not part of Table 2 of UAX #14-37. */
LBP_CB, /**< Contingent break */
/* The following break classes are not treated in the pair table */
@@ -117,8 +117,8 @@ enum LineBreakClass
*/
struct LineBreakProperties
{
- utf32_t start; /**< Starting coding point */
- utf32_t end; /**< End coding point */
+ utf32_t start; /**< Start codepoint */
+ utf32_t end; /**< End codepoint, inclusive */
enum LineBreakClass prop; /**< The line breaking property */
};
@@ -140,11 +140,14 @@ struct LineBreakPropertiesLang
struct LineBreakContext
{
const char *lang; /**< Language name */
- const struct LineBreakProperties *lbpLang;/**< Pointer to LineBreakProperties */
+ const struct LineBreakProperties *lbpLang; /**< Pointer to
+ LineBreakProperties */
enum LineBreakClass lbcCur; /**< Breaking class of current codepoint */
enum LineBreakClass lbcNew; /**< Breaking class of next codepoint */
enum LineBreakClass lbcLast; /**< Breaking class of last codepoint */
- int fLb21aHebrew; /**< Flag for Hebrew letters (LB21a) */
+ bool fLb8aZwj; /**< Flag for ZWJ (LB8a) */
+ bool fLb10LeadSpace; /**< Flag for leading space (LB10) */
+ bool fLb21aHebrew; /**< Flag for Hebrew letters (LB21a) */
int cLb30aRI; /**< Count of RI characters (LB30a) */
};
diff --git a/src/static_libs/libunibreak/meson.build b/src/static_libs/libunibreak/meson.build
index a2d5c3e3f9..cca9c1f6a0 100644
--- a/src/static_libs/libunibreak/meson.build
+++ b/src/static_libs/libunibreak/meson.build
@@ -15,6 +15,8 @@ libunibreak_src = [
'graphemebreak.c',
'graphemebreak.h',
'graphemebreakdef.h',
+ 'emojidef.h',
+ 'emojidef.c',
]
libunibreak_lib = static_library('libunibreak',
diff --git a/src/static_libs/libunibreak/unibreakbase.c b/src/static_libs/libunibreak/unibreakbase.c
index 686852a990..ef24c90047 100644
--- a/src/static_libs/libunibreak/unibreakbase.c
+++ b/src/static_libs/libunibreak/unibreakbase.c
@@ -4,7 +4,7 @@
* Break processing in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2015-2016 Wu Yongwei <wuyongwei at gmail dot com>
+ * Copyright (C) 2015-2018 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
diff --git a/src/static_libs/libunibreak/unibreakbase.h b/src/static_libs/libunibreak/unibreakbase.h
index ff9a6ce8a9..a00a5bdb6b 100644
--- a/src/static_libs/libunibreak/unibreakbase.h
+++ b/src/static_libs/libunibreak/unibreakbase.h
@@ -4,7 +4,7 @@
* Break processing in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2015-2016 Wu Yongwei <wuyongwei at gmail dot com>
+ * Copyright (C) 2015-2019 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -39,7 +39,7 @@
extern "C" {
#endif
-#define UNIBREAK_VERSION 0x0400 /**< Version of the library linebreak */
+#define UNIBREAK_VERSION 0x0402 /**< Version of the libunibreak */
extern const int unibreak_version;
#ifndef UNIBREAK_UTF_TYPES_DEFINED
diff --git a/src/static_libs/libunibreak/unibreakdef.h b/src/static_libs/libunibreak/unibreakdef.h
index e13016d8cd..5f3533e5dd 100644
--- a/src/static_libs/libunibreak/unibreakdef.h
+++ b/src/static_libs/libunibreak/unibreakdef.h
@@ -4,7 +4,7 @@
* Break processing in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2015-2016 Wu Yongwei <wuyongwei at gmail dot com>
+ * Copyright (C) 2015-2018 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -35,9 +35,19 @@
#ifndef UNIBREAKDEF_H
#define UNIBREAKDEF_H
+#if defined(_MSC_VER) && _MSC_VER < 1800
+typedef int bool;
+#define false 0
+#define true 1
+#else
+#include <stdbool.h>
+#endif
+
#include <stddef.h>
#include "unibreakbase.h"
+#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/src/static_libs/libunibreak/wordbreak.c b/src/static_libs/libunibreak/wordbreak.c
index 50c830c7cc..d4e22495c6 100644
--- a/src/static_libs/libunibreak/wordbreak.c
+++ b/src/static_libs/libunibreak/wordbreak.c
@@ -4,7 +4,8 @@
* Word breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2013-2016 Tom Hacohen <tom at stosb dot com>
+ * Copyright (C) 2013-2019 Tom Hacohen <tom at stosb dot com>
+ * Copyright (C) 2018 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -30,9 +31,9 @@
* Unicode 6.0.0:
* <URL:http://www.unicode.org/reports/tr29/tr29-17.html>
*
- * This library has been updated according to Revision 29, for
- * Unicode 9.0.0:
- * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
+ * This library has been updated according to Revision 35, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr29/tr29-35.html>
*
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
@@ -53,8 +54,7 @@
#include "unibreakdef.h"
#include "wordbreak.h"
#include "wordbreakdata.c"
-
-#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
+#include "emojidef.h"
/**
* Initializes the wordbreak internals. It currently does nothing, but
@@ -215,7 +215,7 @@ static void set_wordbreaks(
#if __has_attribute(fallthrough)
__attribute__((fallthrough));
#endif
- /* Fall off */
+ /* Fall through */
case WBP_Newline:
/* WB3a,3b */
@@ -225,24 +225,6 @@ static void set_wordbreaks(
posLast = posCur;
break;
- case WBP_E_Base_GAZ:
- case WBP_Glue_After_Zwj:
- /* WB3c */
- if (wbcLast == WBP_ZWJ)
- {
- set_brks_to(s, brks, posLast, posCur, len,
- WORDBREAK_NOBREAK, get_next_char);
- }
- /* No rule found, reset */
- else
- {
- set_brks_to(s, brks, posLast, posCur, len,
- WORDBREAK_BREAK, get_next_char);
- }
- wbcSeqStart = wbcCur;
- posLast = posCur;
- break;
-
case WBP_ZWJ:
case WBP_Extend:
case WBP_Format:
@@ -260,8 +242,10 @@ static void set_wordbreaks(
{
/* It's surely not the first */
brks[posCur - 1] = WORDBREAK_NOBREAK;
- /* WB3c precedes 4, so no intervening Extend chars allowed. */
- if (wbcSeqStart != WBP_ZWJ)
+ /* WB3c and WB3d precede 4, so no intervening Extend
+ * chars allowed. */
+ if (wbcCur != WBP_ZWJ && wbcSeqStart != WBP_ZWJ &&
+ wbcSeqStart != WBP_WSegSpace)
{
/* "inherit" the previous class. */
wbcCur = wbcLast;
@@ -334,7 +318,8 @@ static void set_wordbreaks(
#if __has_attribute(fallthrough)
__attribute__((fallthrough));
#endif
- /* No break on purpose */
+ /* Fall through */
+
case WBP_MidNumLet:
if (((wbcLast == WBP_ALetter) ||
(wbcLast == WBP_Hebrew_Letter)) || /* WB6,7 */
@@ -421,32 +406,6 @@ static void set_wordbreaks(
posLast = posCur;
break;
- case WBP_E_Base:
- /* No rule found, reset */
- set_brks_to(s, brks, posLast, posCur, len,
- WORDBREAK_BREAK, get_next_char);
- wbcSeqStart = wbcCur;
- posLast = posCur;
- break;
-
- case WBP_E_Modifier:
- /* WB14 */
- if ((wbcLast == WBP_E_Base) ||
- (wbcLast == WBP_E_Base_GAZ))
- {
- set_brks_to(s, brks, posLast, posCur, len,
- WORDBREAK_NOBREAK, get_next_char);
- }
- /* No rule found, reset */
- else
- {
- set_brks_to(s, brks, posLast, posCur, len,
- WORDBREAK_BREAK, get_next_char);
- }
- wbcSeqStart = wbcCur;
- posLast = posCur;
- break;
-
case WBP_Regional_Indicator:
/* WB15,16 */
if ((wbcSeqStart == WBP_Regional_Indicator) &&
@@ -481,7 +440,32 @@ static void set_wordbreaks(
}
break;
+ case WBP_WSegSpace:
+ if (wbcLast == WBP_WSegSpace) /* WB3d */
+ {
+ set_brks_to(s, brks, posLast, posCur, len,
+ WORDBREAK_NOBREAK, get_next_char);
+ posLast = posCur;
+ break;
+ }
+#ifndef __has_attribute
+# define __has_attribute(x) 0
+#endif
+#if __has_attribute(fallthrough)
+ __attribute__((fallthrough));
+#endif
+ /* Fall through */
+
case WBP_Any:
+ /* Check for rule WB3c */
+ if (wbcLast == WBP_ZWJ && ub_is_extended_pictographic(ch))
+ {
+ set_brks_to(s, brks, posLast, posCur, len,
+ WORDBREAK_NOBREAK, get_next_char);
+ posLast = posCur;
+ break;
+ }
+
/* Allow breaks and reset */
set_brks_to(s, brks, posLast, posCur, len,
WORDBREAK_BREAK, get_next_char);
diff --git a/src/static_libs/libunibreak/wordbreak.h b/src/static_libs/libunibreak/wordbreak.h
index 1040c13280..021de4d751 100644
--- a/src/static_libs/libunibreak/wordbreak.h
+++ b/src/static_libs/libunibreak/wordbreak.h
@@ -4,7 +4,8 @@
* Word breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2013-2016 Tom Hacohen <tom at stosb dot com>
+ * Copyright (C) 2013-2019 Tom Hacohen <tom at stosb dot com>
+ * Copyright (C) 2018 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -30,9 +31,9 @@
* Unicode 6.0.0:
* <URL:http://www.unicode.org/reports/tr29/tr29-17.html>
*
- * This library has been updated according to Revision 29, for
- * Unicode 9.0.0:
- * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
+ * This library has been updated according to Revision 35, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr29/tr29-35.html>
*
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
@@ -72,4 +73,4 @@ void set_wordbreaks_utf32(
}
#endif
-#endif
+#endif /* WORDBREAK_H */
diff --git a/src/static_libs/libunibreak/wordbreakdata.c b/src/static_libs/libunibreak/wordbreakdata.c
index 99fcff5bad..f5ee889589 100644
--- a/src/static_libs/libunibreak/wordbreakdata.c
+++ b/src/static_libs/libunibreak/wordbreakdata.c
@@ -1,6 +1,6 @@
/* The content of this file is generated from:
-# WordBreakProperty-9.0.0.txt
-# Date: 2016-06-01, 10:34:38 GMT
+# WordBreakProperty-12.1.0.txt
+# Date: 2019-03-10, 10:53:28 GMT
*/
#include "wordbreakdef.h"
@@ -9,6 +9,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x000A, 0x000A, WBP_LF},
{0x000B, 0x000C, WBP_Newline},
{0x000D, 0x000D, WBP_CR},
+ {0x0020, 0x0020, WBP_WSegSpace},
{0x0022, 0x0022, WBP_Double_Quote},
{0x0027, 0x0027, WBP_Single_Quote},
{0x002C, 0x002C, WBP_MidNum},
@@ -35,11 +36,15 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x0294, 0x0294, WBP_ALetter},
{0x0295, 0x02AF, WBP_ALetter},
{0x02B0, 0x02C1, WBP_ALetter},
+ {0x02C2, 0x02C5, WBP_ALetter},
{0x02C6, 0x02D1, WBP_ALetter},
- {0x02D7, 0x02D7, WBP_MidLetter},
+ {0x02D2, 0x02D7, WBP_ALetter},
+ {0x02DE, 0x02DF, WBP_ALetter},
{0x02E0, 0x02E4, WBP_ALetter},
{0x02EC, 0x02EC, WBP_ALetter},
+ {0x02ED, 0x02ED, WBP_ALetter},
{0x02EE, 0x02EE, WBP_ALetter},
+ {0x02EF, 0x02FF, WBP_ALetter},
{0x0300, 0x036F, WBP_Extend},
{0x0370, 0x0373, WBP_ALetter},
{0x0374, 0x0374, WBP_ALetter},
@@ -60,7 +65,9 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x048A, 0x052F, WBP_ALetter},
{0x0531, 0x0556, WBP_ALetter},
{0x0559, 0x0559, WBP_ALetter},
- {0x0561, 0x0587, WBP_ALetter},
+ {0x055B, 0x055C, WBP_ALetter},
+ {0x055E, 0x055E, WBP_ALetter},
+ {0x0560, 0x0588, WBP_ALetter},
{0x0589, 0x0589, WBP_MidNum},
{0x0591, 0x05BD, WBP_Extend},
{0x05BF, 0x05BF, WBP_Extend},
@@ -68,7 +75,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x05C4, 0x05C5, WBP_Extend},
{0x05C7, 0x05C7, WBP_Extend},
{0x05D0, 0x05EA, WBP_Hebrew_Letter},
- {0x05F0, 0x05F2, WBP_Hebrew_Letter},
+ {0x05EF, 0x05F2, WBP_Hebrew_Letter},
{0x05F3, 0x05F3, WBP_ALetter},
{0x05F4, 0x05F4, WBP_MidLetter},
{0x0600, 0x0605, WBP_Format},
@@ -110,6 +117,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x07F4, 0x07F5, WBP_ALetter},
{0x07F8, 0x07F8, WBP_MidNum},
{0x07FA, 0x07FA, WBP_ALetter},
+ {0x07FD, 0x07FD, WBP_Extend},
{0x0800, 0x0815, WBP_ALetter},
{0x0816, 0x0819, WBP_Extend},
{0x081A, 0x081A, WBP_ALetter},
@@ -120,9 +128,10 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x0829, 0x082D, WBP_Extend},
{0x0840, 0x0858, WBP_ALetter},
{0x0859, 0x085B, WBP_Extend},
+ {0x0860, 0x086A, WBP_ALetter},
{0x08A0, 0x08B4, WBP_ALetter},
{0x08B6, 0x08BD, WBP_ALetter},
- {0x08D4, 0x08E1, WBP_Extend},
+ {0x08D3, 0x08E1, WBP_Extend},
{0x08E2, 0x08E2, WBP_Format},
{0x08E3, 0x0902, WBP_Extend},
{0x0903, 0x0903, WBP_Extend},
@@ -165,6 +174,8 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x09E2, 0x09E3, WBP_Extend},
{0x09E6, 0x09EF, WBP_Numeric},
{0x09F0, 0x09F1, WBP_ALetter},
+ {0x09FC, 0x09FC, WBP_ALetter},
+ {0x09FE, 0x09FE, WBP_Extend},
{0x0A01, 0x0A02, WBP_Extend},
{0x0A03, 0x0A03, WBP_Extend},
{0x0A05, 0x0A0A, WBP_ALetter},
@@ -207,6 +218,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x0AE2, 0x0AE3, WBP_Extend},
{0x0AE6, 0x0AEF, WBP_Numeric},
{0x0AF9, 0x0AF9, WBP_ALetter},
+ {0x0AFA, 0x0AFF, WBP_Extend},
{0x0B01, 0x0B01, WBP_Extend},
{0x0B02, 0x0B03, WBP_Extend},
{0x0B05, 0x0B0C, WBP_ALetter},
@@ -253,6 +265,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x0BE6, 0x0BEF, WBP_Numeric},
{0x0C00, 0x0C00, WBP_Extend},
{0x0C01, 0x0C03, WBP_Extend},
+ {0x0C04, 0x0C04, WBP_Extend},
{0x0C05, 0x0C0C, WBP_ALetter},
{0x0C0E, 0x0C10, WBP_ALetter},
{0x0C12, 0x0C28, WBP_ALetter},
@@ -290,11 +303,12 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x0CE2, 0x0CE3, WBP_Extend},
{0x0CE6, 0x0CEF, WBP_Numeric},
{0x0CF1, 0x0CF2, WBP_ALetter},
- {0x0D01, 0x0D01, WBP_Extend},
+ {0x0D00, 0x0D01, WBP_Extend},
{0x0D02, 0x0D03, WBP_Extend},
{0x0D05, 0x0D0C, WBP_ALetter},
{0x0D0E, 0x0D10, WBP_ALetter},
{0x0D12, 0x0D3A, WBP_ALetter},
+ {0x0D3B, 0x0D3C, WBP_Extend},
{0x0D3D, 0x0D3D, WBP_ALetter},
{0x0D3E, 0x0D40, WBP_Extend},
{0x0D41, 0x0D44, WBP_Extend},
@@ -326,8 +340,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x0E47, 0x0E4E, WBP_Extend},
{0x0E50, 0x0E59, WBP_Numeric},
{0x0EB1, 0x0EB1, WBP_Extend},
- {0x0EB4, 0x0EB9, WBP_Extend},
- {0x0EBB, 0x0EBC, WBP_Extend},
+ {0x0EB4, 0x0EBC, WBP_Extend},
{0x0EC8, 0x0ECD, WBP_Extend},
{0x0ED0, 0x0ED9, WBP_Numeric},
{0x0F00, 0x0F00, WBP_ALetter},
@@ -376,7 +389,8 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x10CD, 0x10CD, WBP_ALetter},
{0x10D0, 0x10FA, WBP_ALetter},
{0x10FC, 0x10FC, WBP_ALetter},
- {0x10FD, 0x1248, WBP_ALetter},
+ {0x10FD, 0x10FF, WBP_ALetter},
+ {0x1100, 0x1248, WBP_ALetter},
{0x124A, 0x124D, WBP_ALetter},
{0x1250, 0x1256, WBP_ALetter},
{0x1258, 0x1258, WBP_ALetter},
@@ -398,6 +412,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x13F8, 0x13FD, WBP_ALetter},
{0x1401, 0x166C, WBP_ALetter},
{0x166F, 0x167F, WBP_ALetter},
+ {0x1680, 0x1680, WBP_WSegSpace},
{0x1681, 0x169A, WBP_ALetter},
{0x16A0, 0x16EA, WBP_ALetter},
{0x16EE, 0x16F0, WBP_ALetter},
@@ -426,7 +441,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x1810, 0x1819, WBP_Numeric},
{0x1820, 0x1842, WBP_ALetter},
{0x1843, 0x1843, WBP_ALetter},
- {0x1844, 0x1877, WBP_ALetter},
+ {0x1844, 0x1878, WBP_ALetter},
{0x1880, 0x1884, WBP_ALetter},
{0x1885, 0x1886, WBP_Extend},
{0x1887, 0x18A8, WBP_ALetter},
@@ -509,24 +524,27 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x1C5A, 0x1C77, WBP_ALetter},
{0x1C78, 0x1C7D, WBP_ALetter},
{0x1C80, 0x1C88, WBP_ALetter},
+ {0x1C90, 0x1CBA, WBP_ALetter},
+ {0x1CBD, 0x1CBF, WBP_ALetter},
{0x1CD0, 0x1CD2, WBP_Extend},
{0x1CD4, 0x1CE0, WBP_Extend},
{0x1CE1, 0x1CE1, WBP_Extend},
{0x1CE2, 0x1CE8, WBP_Extend},
{0x1CE9, 0x1CEC, WBP_ALetter},
{0x1CED, 0x1CED, WBP_Extend},
- {0x1CEE, 0x1CF1, WBP_ALetter},
- {0x1CF2, 0x1CF3, WBP_Extend},
+ {0x1CEE, 0x1CF3, WBP_ALetter},
{0x1CF4, 0x1CF4, WBP_Extend},
{0x1CF5, 0x1CF6, WBP_ALetter},
+ {0x1CF7, 0x1CF7, WBP_Extend},
{0x1CF8, 0x1CF9, WBP_Extend},
+ {0x1CFA, 0x1CFA, WBP_ALetter},
{0x1D00, 0x1D2B, WBP_ALetter},
{0x1D2C, 0x1D6A, WBP_ALetter},
{0x1D6B, 0x1D77, WBP_ALetter},
{0x1D78, 0x1D78, WBP_ALetter},
{0x1D79, 0x1D9A, WBP_ALetter},
{0x1D9B, 0x1DBF, WBP_ALetter},
- {0x1DC0, 0x1DF5, WBP_Extend},
+ {0x1DC0, 0x1DF9, WBP_Extend},
{0x1DFB, 0x1DFF, WBP_Extend},
{0x1E00, 0x1F15, WBP_ALetter},
{0x1F18, 0x1F1D, WBP_ALetter},
@@ -547,6 +565,8 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x1FE0, 0x1FEC, WBP_ALetter},
{0x1FF2, 0x1FF4, WBP_ALetter},
{0x1FF6, 0x1FFC, WBP_ALetter},
+ {0x2000, 0x2006, WBP_WSegSpace},
+ {0x2008, 0x200A, WBP_WSegSpace},
{0x200C, 0x200C, WBP_Extend},
{0x200D, 0x200D, WBP_ZWJ},
{0x200E, 0x200F, WBP_Format},
@@ -561,6 +581,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x203F, 0x2040, WBP_ExtendNumLet},
{0x2044, 0x2044, WBP_MidNum},
{0x2054, 0x2054, WBP_ExtendNumLet},
+ {0x205F, 0x205F, WBP_WSegSpace},
{0x2060, 0x2064, WBP_Format},
{0x2066, 0x206F, WBP_Format},
{0x2071, 0x2071, WBP_ALetter},
@@ -590,10 +611,6 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x2183, 0x2184, WBP_ALetter},
{0x2185, 0x2188, WBP_ALetter},
{0x24B6, 0x24E9, WBP_ALetter},
- {0x261D, 0x261D, WBP_E_Base},
- {0x26F9, 0x26F9, WBP_E_Base},
- {0x270A, 0x270D, WBP_E_Base},
- {0x2764, 0x2764, WBP_Glue_After_Zwj},
{0x2C00, 0x2C2E, WBP_ALetter},
{0x2C30, 0x2C5E, WBP_ALetter},
{0x2C60, 0x2C7B, WBP_ALetter},
@@ -619,6 +636,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x2DD8, 0x2DDE, WBP_ALetter},
{0x2DE0, 0x2DFF, WBP_Extend},
{0x2E2F, 0x2E2F, WBP_ALetter},
+ {0x3000, 0x3000, WBP_WSegSpace},
{0x3005, 0x3005, WBP_ALetter},
{0x302A, 0x302D, WBP_Extend},
{0x302E, 0x302F, WBP_Extend},
@@ -631,7 +649,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x30A1, 0x30FA, WBP_Katakana},
{0x30FC, 0x30FE, WBP_Katakana},
{0x30FF, 0x30FF, WBP_Katakana},
- {0x3105, 0x312D, WBP_ALetter},
+ {0x3105, 0x312F, WBP_ALetter},
{0x3131, 0x318E, WBP_ALetter},
{0x31A0, 0x31BA, WBP_ALetter},
{0x31F0, 0x31FF, WBP_Katakana},
@@ -660,14 +678,16 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0xA6E6, 0xA6EF, WBP_ALetter},
{0xA6F0, 0xA6F1, WBP_Extend},
{0xA717, 0xA71F, WBP_ALetter},
+ {0xA720, 0xA721, WBP_ALetter},
{0xA722, 0xA76F, WBP_ALetter},
{0xA770, 0xA770, WBP_ALetter},
{0xA771, 0xA787, WBP_ALetter},
{0xA788, 0xA788, WBP_ALetter},
+ {0xA789, 0xA78A, WBP_ALetter},
{0xA78B, 0xA78E, WBP_ALetter},
{0xA78F, 0xA78F, WBP_ALetter},
- {0xA790, 0xA7AE, WBP_ALetter},
- {0xA7B0, 0xA7B7, WBP_ALetter},
+ {0xA790, 0xA7BF, WBP_ALetter},
+ {0xA7C2, 0xA7C6, WBP_ALetter},
{0xA7F7, 0xA7F7, WBP_ALetter},
{0xA7F8, 0xA7F9, WBP_ALetter},
{0xA7FA, 0xA7FA, WBP_ALetter},
@@ -690,7 +710,8 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0xA8E0, 0xA8F1, WBP_Extend},
{0xA8F2, 0xA8F7, WBP_ALetter},
{0xA8FB, 0xA8FB, WBP_ALetter},
- {0xA8FD, 0xA8FD, WBP_ALetter},
+ {0xA8FD, 0xA8FE, WBP_ALetter},
+ {0xA8FF, 0xA8FF, WBP_Extend},
{0xA900, 0xA909, WBP_Numeric},
{0xA90A, 0xA925, WBP_ALetter},
{0xA926, 0xA92D, WBP_Extend},
@@ -705,8 +726,8 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0xA9B4, 0xA9B5, WBP_Extend},
{0xA9B6, 0xA9B9, WBP_Extend},
{0xA9BA, 0xA9BB, WBP_Extend},
- {0xA9BC, 0xA9BC, WBP_Extend},
- {0xA9BD, 0xA9C0, WBP_Extend},
+ {0xA9BC, 0xA9BD, WBP_Extend},
+ {0xA9BE, 0xA9C0, WBP_Extend},
{0xA9CF, 0xA9CF, WBP_ALetter},
{0xA9D0, 0xA9D9, WBP_Numeric},
{0xA9E5, 0xA9E5, WBP_Extend},
@@ -745,8 +766,9 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0xAB20, 0xAB26, WBP_ALetter},
{0xAB28, 0xAB2E, WBP_ALetter},
{0xAB30, 0xAB5A, WBP_ALetter},
+ {0xAB5B, 0xAB5B, WBP_ALetter},
{0xAB5C, 0xAB5F, WBP_ALetter},
- {0xAB60, 0xAB65, WBP_ALetter},
+ {0xAB60, 0xAB67, WBP_ALetter},
{0xAB70, 0xABBF, WBP_ALetter},
{0xABC0, 0xABE2, WBP_ALetter},
{0xABE3, 0xABE4, WBP_Extend},
@@ -793,6 +815,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0xFF07, 0xFF07, WBP_MidNumLet},
{0xFF0C, 0xFF0C, WBP_MidNum},
{0xFF0E, 0xFF0E, WBP_MidNumLet},
+ {0xFF10, 0xFF19, WBP_Numeric},
{0xFF1A, 0xFF1A, WBP_MidLetter},
{0xFF1B, 0xFF1B, WBP_MidNum},
{0xFF21, 0xFF3A, WBP_ALetter},
@@ -821,7 +844,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x102A0, 0x102D0, WBP_ALetter},
{0x102E0, 0x102E0, WBP_Extend},
{0x10300, 0x1031F, WBP_ALetter},
- {0x10330, 0x10340, WBP_ALetter},
+ {0x1032D, 0x10340, WBP_ALetter},
{0x10341, 0x10341, WBP_ALetter},
{0x10342, 0x10349, WBP_ALetter},
{0x1034A, 0x1034A, WBP_ALetter},
@@ -861,7 +884,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x10A0C, 0x10A0F, WBP_Extend},
{0x10A10, 0x10A13, WBP_ALetter},
{0x10A15, 0x10A17, WBP_ALetter},
- {0x10A19, 0x10A33, WBP_ALetter},
+ {0x10A19, 0x10A35, WBP_ALetter},
{0x10A38, 0x10A3A, WBP_Extend},
{0x10A3F, 0x10A3F, WBP_Extend},
{0x10A60, 0x10A7C, WBP_ALetter},
@@ -876,6 +899,14 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x10C00, 0x10C48, WBP_ALetter},
{0x10C80, 0x10CB2, WBP_ALetter},
{0x10CC0, 0x10CF2, WBP_ALetter},
+ {0x10D00, 0x10D23, WBP_ALetter},
+ {0x10D24, 0x10D27, WBP_Extend},
+ {0x10D30, 0x10D39, WBP_Numeric},
+ {0x10F00, 0x10F1C, WBP_ALetter},
+ {0x10F27, 0x10F27, WBP_ALetter},
+ {0x10F30, 0x10F45, WBP_ALetter},
+ {0x10F46, 0x10F50, WBP_Extend},
+ {0x10FE0, 0x10FF6, WBP_ALetter},
{0x11000, 0x11000, WBP_Extend},
{0x11001, 0x11001, WBP_Extend},
{0x11002, 0x11002, WBP_Extend},
@@ -890,6 +921,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x110B7, 0x110B8, WBP_Extend},
{0x110B9, 0x110BA, WBP_Extend},
{0x110BD, 0x110BD, WBP_Format},
+ {0x110CD, 0x110CD, WBP_Format},
{0x110D0, 0x110E8, WBP_ALetter},
{0x110F0, 0x110F9, WBP_Numeric},
{0x11100, 0x11102, WBP_Extend},
@@ -898,6 +930,8 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x1112C, 0x1112C, WBP_Extend},
{0x1112D, 0x11134, WBP_Extend},
{0x11136, 0x1113F, WBP_Numeric},
+ {0x11144, 0x11144, WBP_ALetter},
+ {0x11145, 0x11146, WBP_Extend},
{0x11150, 0x11172, WBP_ALetter},
{0x11173, 0x11173, WBP_Extend},
{0x11176, 0x11176, WBP_ALetter},
@@ -908,7 +942,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x111B6, 0x111BE, WBP_Extend},
{0x111BF, 0x111C0, WBP_Extend},
{0x111C1, 0x111C4, WBP_ALetter},
- {0x111CA, 0x111CC, WBP_Extend},
+ {0x111C9, 0x111CC, WBP_Extend},
{0x111D0, 0x111D9, WBP_Numeric},
{0x111DA, 0x111DA, WBP_ALetter},
{0x111DC, 0x111DC, WBP_ALetter},
@@ -939,7 +973,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x1132A, 0x11330, WBP_ALetter},
{0x11332, 0x11333, WBP_ALetter},
{0x11335, 0x11339, WBP_ALetter},
- {0x1133C, 0x1133C, WBP_Extend},
+ {0x1133B, 0x1133C, WBP_Extend},
{0x1133D, 0x1133D, WBP_ALetter},
{0x1133E, 0x1133F, WBP_Extend},
{0x11340, 0x11340, WBP_Extend},
@@ -961,6 +995,8 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x11446, 0x11446, WBP_Extend},
{0x11447, 0x1144A, WBP_ALetter},
{0x11450, 0x11459, WBP_Numeric},
+ {0x1145E, 0x1145E, WBP_Extend},
+ {0x1145F, 0x1145F, WBP_ALetter},
{0x11480, 0x114AF, WBP_ALetter},
{0x114B0, 0x114B2, WBP_Extend},
{0x114B3, 0x114B8, WBP_Extend},
@@ -999,6 +1035,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x116B0, 0x116B5, WBP_Extend},
{0x116B6, 0x116B6, WBP_Extend},
{0x116B7, 0x116B7, WBP_Extend},
+ {0x116B8, 0x116B8, WBP_ALetter},
{0x116C0, 0x116C9, WBP_Numeric},
{0x1171D, 0x1171F, WBP_Extend},
{0x11720, 0x11721, WBP_Extend},
@@ -1006,9 +1043,41 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x11726, 0x11726, WBP_Extend},
{0x11727, 0x1172B, WBP_Extend},
{0x11730, 0x11739, WBP_Numeric},
+ {0x11800, 0x1182B, WBP_ALetter},
+ {0x1182C, 0x1182E, WBP_Extend},
+ {0x1182F, 0x11837, WBP_Extend},
+ {0x11838, 0x11838, WBP_Extend},
+ {0x11839, 0x1183A, WBP_Extend},
{0x118A0, 0x118DF, WBP_ALetter},
{0x118E0, 0x118E9, WBP_Numeric},
{0x118FF, 0x118FF, WBP_ALetter},
+ {0x119A0, 0x119A7, WBP_ALetter},
+ {0x119AA, 0x119D0, WBP_ALetter},
+ {0x119D1, 0x119D3, WBP_Extend},
+ {0x119D4, 0x119D7, WBP_Extend},
+ {0x119DA, 0x119DB, WBP_Extend},
+ {0x119DC, 0x119DF, WBP_Extend},
+ {0x119E0, 0x119E0, WBP_Extend},
+ {0x119E1, 0x119E1, WBP_ALetter},
+ {0x119E3, 0x119E3, WBP_ALetter},
+ {0x119E4, 0x119E4, WBP_Extend},
+ {0x11A00, 0x11A00, WBP_ALetter},
+ {0x11A01, 0x11A0A, WBP_Extend},
+ {0x11A0B, 0x11A32, WBP_ALetter},
+ {0x11A33, 0x11A38, WBP_Extend},
+ {0x11A39, 0x11A39, WBP_Extend},
+ {0x11A3A, 0x11A3A, WBP_ALetter},
+ {0x11A3B, 0x11A3E, WBP_Extend},
+ {0x11A47, 0x11A47, WBP_Extend},
+ {0x11A50, 0x11A50, WBP_ALetter},
+ {0x11A51, 0x11A56, WBP_Extend},
+ {0x11A57, 0x11A58, WBP_Extend},
+ {0x11A59, 0x11A5B, WBP_Extend},
+ {0x11A5C, 0x11A89, WBP_ALetter},
+ {0x11A8A, 0x11A96, WBP_Extend},
+ {0x11A97, 0x11A97, WBP_Extend},
+ {0x11A98, 0x11A99, WBP_Extend},
+ {0x11A9D, 0x11A9D, WBP_ALetter},
{0x11AC0, 0x11AF8, WBP_ALetter},
{0x11C00, 0x11C08, WBP_ALetter},
{0x11C0A, 0x11C2E, WBP_ALetter},
@@ -1027,10 +1096,35 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x11CB2, 0x11CB3, WBP_Extend},
{0x11CB4, 0x11CB4, WBP_Extend},
{0x11CB5, 0x11CB6, WBP_Extend},
+ {0x11D00, 0x11D06, WBP_ALetter},
+ {0x11D08, 0x11D09, WBP_ALetter},
+ {0x11D0B, 0x11D30, WBP_ALetter},
+ {0x11D31, 0x11D36, WBP_Extend},
+ {0x11D3A, 0x11D3A, WBP_Extend},
+ {0x11D3C, 0x11D3D, WBP_Extend},
+ {0x11D3F, 0x11D45, WBP_Extend},
+ {0x11D46, 0x11D46, WBP_ALetter},
+ {0x11D47, 0x11D47, WBP_Extend},
+ {0x11D50, 0x11D59, WBP_Numeric},
+ {0x11D60, 0x11D65, WBP_ALetter},
+ {0x11D67, 0x11D68, WBP_ALetter},
+ {0x11D6A, 0x11D89, WBP_ALetter},
+ {0x11D8A, 0x11D8E, WBP_Extend},
+ {0x11D90, 0x11D91, WBP_Extend},
+ {0x11D93, 0x11D94, WBP_Extend},
+ {0x11D95, 0x11D95, WBP_Extend},
+ {0x11D96, 0x11D96, WBP_Extend},
+ {0x11D97, 0x11D97, WBP_Extend},
+ {0x11D98, 0x11D98, WBP_ALetter},
+ {0x11DA0, 0x11DA9, WBP_Numeric},
+ {0x11EE0, 0x11EF2, WBP_ALetter},
+ {0x11EF3, 0x11EF4, WBP_Extend},
+ {0x11EF5, 0x11EF6, WBP_Extend},
{0x12000, 0x12399, WBP_ALetter},
{0x12400, 0x1246E, WBP_ALetter},
{0x12480, 0x12543, WBP_ALetter},
{0x13000, 0x1342E, WBP_ALetter},
+ {0x13430, 0x13438, WBP_Format},
{0x14400, 0x14646, WBP_ALetter},
{0x16800, 0x16A38, WBP_ALetter},
{0x16A40, 0x16A5E, WBP_ALetter},
@@ -1043,13 +1137,17 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x16B50, 0x16B59, WBP_Numeric},
{0x16B63, 0x16B77, WBP_ALetter},
{0x16B7D, 0x16B8F, WBP_ALetter},
- {0x16F00, 0x16F44, WBP_ALetter},
+ {0x16E40, 0x16E7F, WBP_ALetter},
+ {0x16F00, 0x16F4A, WBP_ALetter},
+ {0x16F4F, 0x16F4F, WBP_Extend},
{0x16F50, 0x16F50, WBP_ALetter},
- {0x16F51, 0x16F7E, WBP_Extend},
+ {0x16F51, 0x16F87, WBP_Extend},
{0x16F8F, 0x16F92, WBP_Extend},
{0x16F93, 0x16F9F, WBP_ALetter},
- {0x16FE0, 0x16FE0, WBP_ALetter},
+ {0x16FE0, 0x16FE1, WBP_ALetter},
+ {0x16FE3, 0x16FE3, WBP_ALetter},
{0x1B000, 0x1B000, WBP_Katakana},
+ {0x1B164, 0x1B167, WBP_Katakana},
{0x1BC00, 0x1BC6A, WBP_ALetter},
{0x1BC70, 0x1BC7C, WBP_ALetter},
{0x1BC80, 0x1BC88, WBP_ALetter},
@@ -1106,10 +1204,19 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x1E01B, 0x1E021, WBP_Extend},
{0x1E023, 0x1E024, WBP_Extend},
{0x1E026, 0x1E02A, WBP_Extend},
+ {0x1E100, 0x1E12C, WBP_ALetter},
+ {0x1E130, 0x1E136, WBP_Extend},
+ {0x1E137, 0x1E13D, WBP_ALetter},
+ {0x1E140, 0x1E149, WBP_Numeric},
+ {0x1E14E, 0x1E14E, WBP_ALetter},
+ {0x1E2C0, 0x1E2EB, WBP_ALetter},
+ {0x1E2EC, 0x1E2EF, WBP_Extend},
+ {0x1E2F0, 0x1E2F9, WBP_Numeric},
{0x1E800, 0x1E8C4, WBP_ALetter},
{0x1E8D0, 0x1E8D6, WBP_Extend},
{0x1E900, 0x1E943, WBP_ALetter},
{0x1E944, 0x1E94A, WBP_Extend},
+ {0x1E94B, 0x1E94B, WBP_ALetter},
{0x1E950, 0x1E959, WBP_Numeric},
{0x1EE00, 0x1EE03, WBP_ALetter},
{0x1EE05, 0x1EE1F, WBP_ALetter},
@@ -1148,35 +1255,7 @@ static const struct WordBreakProperties wb_prop_default[] = {
{0x1F150, 0x1F169, WBP_ALetter},
{0x1F170, 0x1F189, WBP_ALetter},
{0x1F1E6, 0x1F1FF, WBP_Regional_Indicator},
- {0x1F385, 0x1F385, WBP_E_Base},
- {0x1F3C3, 0x1F3C4, WBP_E_Base},
- {0x1F3CA, 0x1F3CB, WBP_E_Base},
- {0x1F3FB, 0x1F3FF, WBP_E_Modifier},
- {0x1F442, 0x1F443, WBP_E_Base},
- {0x1F446, 0x1F450, WBP_E_Base},
- {0x1F466, 0x1F469, WBP_E_Base_GAZ},
- {0x1F46E, 0x1F46E, WBP_E_Base},
- {0x1F470, 0x1F478, WBP_E_Base},
- {0x1F47C, 0x1F47C, WBP_E_Base},
- {0x1F481, 0x1F483, WBP_E_Base},
- {0x1F485, 0x1F487, WBP_E_Base},
- {0x1F48B, 0x1F48B, WBP_Glue_After_Zwj},
- {0x1F4AA, 0x1F4AA, WBP_E_Base},
- {0x1F575, 0x1F575, WBP_E_Base},
- {0x1F57A, 0x1F57A, WBP_E_Base},
- {0x1F590, 0x1F590, WBP_E_Base},
- {0x1F595, 0x1F596, WBP_E_Base},
- {0x1F5E8, 0x1F5E8, WBP_Glue_After_Zwj},
- {0x1F645, 0x1F647, WBP_E_Base},
- {0x1F64B, 0x1F64F, WBP_E_Base},
- {0x1F6A3, 0x1F6A3, WBP_E_Base},
- {0x1F6B4, 0x1F6B6, WBP_E_Base},
- {0x1F6C0, 0x1F6C0, WBP_E_Base},
- {0x1F918, 0x1F91E, WBP_E_Base},
- {0x1F926, 0x1F926, WBP_E_Base},
- {0x1F930, 0x1F930, WBP_E_Base},
- {0x1F933, 0x1F939, WBP_E_Base},
- {0x1F93C, 0x1F93E, WBP_E_Base},
+ {0x1F3FB, 0x1F3FF, WBP_Extend},
{0xE0001, 0xE0001, WBP_Format},
{0xE0020, 0xE007F, WBP_Extend},
{0xE0100, 0xE01EF, WBP_Extend},
diff --git a/src/static_libs/libunibreak/wordbreakdef.h b/src/static_libs/libunibreak/wordbreakdef.h
index 82cd98e7c3..03feb3cdac 100644
--- a/src/static_libs/libunibreak/wordbreakdef.h
+++ b/src/static_libs/libunibreak/wordbreakdef.h
@@ -4,7 +4,8 @@
* Word breaking in a Unicode sequence. Designed to be used in a
* generic text renderer.
*
- * Copyright (C) 2013-16 Tom Hacohen <tom at stosb dot com>
+ * Copyright (C) 2013-2019 Tom Hacohen <tom at stosb dot com>
+ * Copyright (C) 2018 Wu Yongwei <wuyongwei at gmail dot com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
@@ -30,9 +31,9 @@
* Unicode 6.0.0:
* <URL:http://www.unicode.org/reports/tr29/tr29-17.html>
*
- * This library has been updated according to Revision 29, for
- * Unicode 9.0.0:
- * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
+ * This library has been updated according to Revision 35, for
+ * Unicode 12.0.0:
+ * <URL:http://www.unicode.org/reports/tr29/tr29-35.html>
*
* The Unicode Terms of Use are available at
* <URL:http://www.unicode.org/copyright.html>
@@ -51,7 +52,7 @@
/**
* Word break classes. This is a direct mapping of Table 3 of Unicode
- * Standard Annex 29, Revision 23.
+ * Standard Annex 29, Revision 35.
*/
enum WordBreakClass
{
@@ -73,10 +74,7 @@ enum WordBreakClass
WBP_MidNum,
WBP_Numeric,
WBP_ExtendNumLet,
- WBP_E_Base,
- WBP_E_Modifier,
- WBP_Glue_After_Zwj,
- WBP_E_Base_GAZ,
+ WBP_WSegSpace,
WBP_Any
};
@@ -86,7 +84,7 @@ enum WordBreakClass
*/
struct WordBreakProperties
{
- utf32_t start; /**< Starting coding point */
- utf32_t end; /**< End coding point */
+ utf32_t start; /**< Start codepoint */
+ utf32_t end; /**< End codepoint, inclusive */
enum WordBreakClass prop; /**< The word breaking property */
};
diff --git a/src/static_libs/lz4/lz4.c b/src/static_libs/lz4/lz4.c
index e614c4577f..82ab490811 100644
--- a/src/static_libs/lz4/lz4.c
+++ b/src/static_libs/lz4/lz4.c
@@ -106,6 +106,7 @@
#define LZ4_DISABLE_DEPRECATE_WARNINGS /* due to LZ4_decompress_safe_withPrefix64k */
#endif
+#define LZ4_STATIC_LINKING_ONLY /* LZ4_DISTANCE_MAX */
#include "lz4.h"
/* see also "memory routines" below */
@@ -183,6 +184,60 @@
/*-************************************
+* Common Constants
+**************************************/
+#define MINMATCH 4
+
+#define WILDCOPYLENGTH 8
+#define LASTLITERALS 5 /* see ../doc/lz4_Block_format.md#parsing-restrictions */
+#define MFLIMIT 12 /* see ../doc/lz4_Block_format.md#parsing-restrictions */
+#define MATCH_SAFEGUARD_DISTANCE ((2*WILDCOPYLENGTH) - MINMATCH) /* ensure it's possible to write 2 x wildcopyLength without overflowing output buffer */
+#define FASTLOOP_SAFE_DISTANCE 64
+static const int LZ4_minLength = (MFLIMIT+1);
+
+#define KB *(1 <<10)
+#define MB *(1 <<20)
+#define GB *(1U<<30)
+
+#define LZ4_DISTANCE_ABSOLUTE_MAX 65535
+#if (LZ4_DISTANCE_MAX > LZ4_DISTANCE_ABSOLUTE_MAX) /* max supported by LZ4 format */
+# error "LZ4_DISTANCE_MAX is too big : must be <= 65535"
+#endif
+
+#define ML_BITS 4
+#define ML_MASK ((1U<<ML_BITS)-1)
+#define RUN_BITS (8-ML_BITS)
+#define RUN_MASK ((1U<<RUN_BITS)-1)
+
+
+/*-************************************
+* Error detection
+**************************************/
+#if defined(LZ4_DEBUG) && (LZ4_DEBUG>=1)
+# include <assert.h>
+#else
+# ifndef assert
+# define assert(condition) ((void)0)
+# endif
+#endif
+
+#define LZ4_STATIC_ASSERT(c) { enum { LZ4_static_assert = 1/(int)(!!(c)) }; } /* use after variable declarations */
+
+#if defined(LZ4_DEBUG) && (LZ4_DEBUG>=2)
+# include <stdio.h>
+ static int g_debuglog_enable = 1;
+# define DEBUGLOG(l, ...) { \
+ if ((g_debuglog_enable) && (l<=LZ4_DEBUG)) { \
+ fprintf(stderr, __FILE__ ": "); \
+ fprintf(stderr, __VA_ARGS__); \
+ fprintf(stderr, " \n"); \
+ } }
+#else
+# define DEBUGLOG(l, ...) {} /* disabled */
+#endif
+
+
+/*-************************************
* Types
**************************************/
#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
@@ -194,6 +249,10 @@
typedef uint64_t U64;
typedef uintptr_t uptrval;
#else
+# include <limits.h>
+# if UINT_MAX != 4294967295UL
+# error "LZ4 code (when not C++ or C99) assumes that sizeof(int) == 4"
+# endif
typedef unsigned char BYTE;
typedef unsigned short U16;
typedef unsigned int U32;
@@ -315,7 +374,12 @@ static const int dec64table[8] = {0, 0, 0, -1, -4, 1, 2, 3};
#ifndef LZ4_FAST_DEC_LOOP
-# if defined(__i386__) || defined(__x86_64__)
+# if defined __i386__ || defined _M_IX86 || defined __x86_64__ || defined _M_X64
+# define LZ4_FAST_DEC_LOOP 1
+# elif defined(__aarch64__) && !defined(__clang__)
+ /* On aarch64, we disable this optimization for clang because on certain
+ * mobile chipsets, performance is reduced with clang. For information
+ * refer to https://github.com/lz4/lz4/pull/707 */
# define LZ4_FAST_DEC_LOOP 1
# else
# define LZ4_FAST_DEC_LOOP 0
@@ -358,29 +422,35 @@ LZ4_wildCopy32(void* dstPtr, const void* srcPtr, void* dstEnd)
do { memcpy(d,s,16); memcpy(d+16,s+16,16); d+=32; s+=32; } while (d<e);
}
+/* LZ4_memcpy_using_offset() presumes :
+ * - dstEnd >= dstPtr + MINMATCH
+ * - there is at least 8 bytes available to write after dstEnd */
LZ4_FORCE_O2_INLINE_GCC_PPC64LE void
LZ4_memcpy_using_offset(BYTE* dstPtr, const BYTE* srcPtr, BYTE* dstEnd, const size_t offset)
{
BYTE v[8];
+
+ assert(dstEnd >= dstPtr + MINMATCH);
+ LZ4_write32(dstPtr, 0); /* silence an msan warning when offset==0 */
+
switch(offset) {
case 1:
memset(v, *srcPtr, 8);
- goto copy_loop;
+ break;
case 2:
memcpy(v, srcPtr, 2);
memcpy(&v[2], srcPtr, 2);
memcpy(&v[4], &v[0], 4);
- goto copy_loop;
+ break;
case 4:
memcpy(v, srcPtr, 4);
memcpy(&v[4], srcPtr, 4);
- goto copy_loop;
+ break;
default:
LZ4_memcpy_using_offset_base(dstPtr, srcPtr, dstEnd, offset);
return;
}
- copy_loop:
memcpy(dstPtr, v, 8);
dstPtr += 8;
while (dstPtr < dstEnd) {
@@ -392,63 +462,6 @@ LZ4_memcpy_using_offset(BYTE* dstPtr, const BYTE* srcPtr, BYTE* dstEnd, const si
/*-************************************
-* Common Constants
-**************************************/
-#define MINMATCH 4
-
-#define WILDCOPYLENGTH 8
-#define LASTLITERALS 5 /* see ../doc/lz4_Block_format.md#parsing-restrictions */
-#define MFLIMIT 12 /* see ../doc/lz4_Block_format.md#parsing-restrictions */
-#define MATCH_SAFEGUARD_DISTANCE ((2*WILDCOPYLENGTH) - MINMATCH) /* ensure it's possible to write 2 x wildcopyLength without overflowing output buffer */
-#define FASTLOOP_SAFE_DISTANCE 64
-static const int LZ4_minLength = (MFLIMIT+1);
-
-#define KB *(1 <<10)
-#define MB *(1 <<20)
-#define GB *(1U<<30)
-
-#ifndef LZ4_DISTANCE_MAX /* can be user - defined at compile time */
-# define LZ4_DISTANCE_MAX 65535
-#endif
-
-#if (LZ4_DISTANCE_MAX > 65535) /* max supported by LZ4 format */
-# error "LZ4_DISTANCE_MAX is too big : must be <= 65535"
-#endif
-
-#define ML_BITS 4
-#define ML_MASK ((1U<<ML_BITS)-1)
-#define RUN_BITS (8-ML_BITS)
-#define RUN_MASK ((1U<<RUN_BITS)-1)
-
-
-/*-************************************
-* Error detection
-**************************************/
-#if defined(LZ4_DEBUG) && (LZ4_DEBUG>=1)
-# include <assert.h>
-#else
-# ifndef assert
-# define assert(condition) ((void)0)
-# endif
-#endif
-
-#define LZ4_STATIC_ASSERT(c) { enum { LZ4_static_assert = 1/(int)(!!(c)) }; } /* use after variable declarations */
-
-#if defined(LZ4_DEBUG) && (LZ4_DEBUG>=2)
-# include <stdio.h>
-static int g_debuglog_enable = 1;
-# define DEBUGLOG(l, ...) { \
- if ((g_debuglog_enable) && (l<=LZ4_DEBUG)) { \
- fprintf(stderr, __FILE__ ": "); \
- fprintf(stderr, __VA_ARGS__); \
- fprintf(stderr, " \n"); \
- } }
-#else
-# define DEBUGLOG(l, ...) {} /* disabled */
-#endif
-
-
-/*-************************************
* Common functions
**************************************/
static unsigned LZ4_NbCommonBytes (reg_t val)
@@ -460,7 +473,7 @@ static unsigned LZ4_NbCommonBytes (reg_t val)
_BitScanForward64( &r, (U64)val );
return (int)(r>>3);
# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT)
- return (__builtin_ctzll((U64)val) >> 3);
+ return (unsigned)__builtin_ctzll((U64)val) >> 3;
# else
static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2,
0, 3, 1, 3, 1, 4, 2, 7,
@@ -478,7 +491,7 @@ static unsigned LZ4_NbCommonBytes (reg_t val)
_BitScanForward( &r, (U32)val );
return (int)(r>>3);
# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT)
- return (__builtin_ctz((U32)val) >> 3);
+ return (unsigned)__builtin_ctz((U32)val) >> 3;
# else
static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0,
3, 2, 2, 1, 3, 2, 0, 1,
@@ -494,7 +507,7 @@ static unsigned LZ4_NbCommonBytes (reg_t val)
_BitScanReverse64( &r, val );
return (unsigned)(r>>3);
# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT)
- return (__builtin_clzll((U64)val) >> 3);
+ return (unsigned)__builtin_clzll((U64)val) >> 3;
# else
static const U32 by32 = sizeof(val)*4; /* 32 on 64 bits (goal), 16 on 32 bits.
Just to avoid some static analyzer complaining about shift by 32 on 32-bits target.
@@ -511,7 +524,7 @@ static unsigned LZ4_NbCommonBytes (reg_t val)
_BitScanReverse( &r, (unsigned long)val );
return (unsigned)(r>>3);
# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT)
- return (__builtin_clz((U32)val) >> 3);
+ return (unsigned)__builtin_clz((U32)val) >> 3;
# else
unsigned r;
if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; }
@@ -606,9 +619,11 @@ int LZ4_sizeofState() { return LZ4_STREAMSIZE; }
extern "C" {
#endif
-int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize);
+int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int srcSize);
-int LZ4_decompress_safe_forceExtDict(const char* in, char* out, int inSize, int outSize, const void* dict, size_t dictSize);
+int LZ4_decompress_safe_forceExtDict(const char* source, char* dest,
+ int compressedSize, int maxOutputSize,
+ const void* dictStart, size_t dictSize);
#if defined (__cplusplus)
}
@@ -617,7 +632,7 @@ int LZ4_decompress_safe_forceExtDict(const char* in, char* out, int inSize, int
/*-******************************
* Compression functions
********************************/
-static U32 LZ4_hash4(U32 sequence, tableType_t const tableType)
+LZ4_FORCE_INLINE U32 LZ4_hash4(U32 sequence, tableType_t const tableType)
{
if (tableType == byU16)
return ((sequence * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1)));
@@ -625,7 +640,7 @@ static U32 LZ4_hash4(U32 sequence, tableType_t const tableType)
return ((sequence * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG));
}
-static U32 LZ4_hash5(U64 sequence, tableType_t const tableType)
+LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType)
{
const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG+1 : LZ4_HASHLOG;
if (LZ4_isLittleEndian()) {
@@ -643,7 +658,19 @@ LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t const tab
return LZ4_hash4(LZ4_read32(p), tableType);
}
-static void LZ4_putIndexOnHash(U32 idx, U32 h, void* tableBase, tableType_t const tableType)
+LZ4_FORCE_INLINE void LZ4_clearHash(U32 h, void* tableBase, tableType_t const tableType)
+{
+ switch (tableType)
+ {
+ default: /* fallthrough */
+ case clearedTable: { /* illegal! */ assert(0); return; }
+ case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = NULL; return; }
+ case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = 0; return; }
+ case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = 0; return; }
+ }
+}
+
+LZ4_FORCE_INLINE void LZ4_putIndexOnHash(U32 idx, U32 h, void* tableBase, tableType_t const tableType)
{
switch (tableType)
{
@@ -655,7 +682,7 @@ static void LZ4_putIndexOnHash(U32 idx, U32 h, void* tableBase, tableType_t cons
}
}
-static void LZ4_putPositionOnHash(const BYTE* p, U32 h,
+LZ4_FORCE_INLINE void LZ4_putPositionOnHash(const BYTE* p, U32 h,
void* tableBase, tableType_t const tableType,
const BYTE* srcBase)
{
@@ -680,7 +707,7 @@ LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_
* Assumption 1 : only valid if tableType == byU32 or byU16.
* Assumption 2 : h is presumed valid (within limits of hash table)
*/
-static U32 LZ4_getIndexOnHash(U32 h, const void* tableBase, tableType_t tableType)
+LZ4_FORCE_INLINE U32 LZ4_getIndexOnHash(U32 h, const void* tableBase, tableType_t tableType)
{
LZ4_STATIC_ASSERT(LZ4_MEMORY_USAGE > 2);
if (tableType == byU32) {
@@ -703,18 +730,19 @@ static const BYTE* LZ4_getPositionOnHash(U32 h, const void* tableBase, tableType
{ const U16* const hashTable = (const U16*) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */
}
-LZ4_FORCE_INLINE const BYTE* LZ4_getPosition(const BYTE* p,
- const void* tableBase, tableType_t tableType,
- const BYTE* srcBase)
+LZ4_FORCE_INLINE const BYTE*
+LZ4_getPosition(const BYTE* p,
+ const void* tableBase, tableType_t tableType,
+ const BYTE* srcBase)
{
U32 const h = LZ4_hashPosition(p, tableType);
return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase);
}
-LZ4_FORCE_INLINE void LZ4_prepareTable(
- LZ4_stream_t_internal* const cctx,
- const int inputSize,
- const tableType_t tableType) {
+LZ4_FORCE_INLINE void
+LZ4_prepareTable(LZ4_stream_t_internal* const cctx,
+ const int inputSize,
+ const tableType_t tableType) {
/* If compression failed during the previous step, then the context
* is marked as dirty, therefore, it has to be fully reset.
*/
@@ -729,9 +757,10 @@ LZ4_FORCE_INLINE void LZ4_prepareTable(
* out if it's safe to leave as is or whether it needs to be reset.
*/
if (cctx->tableType != clearedTable) {
+ assert(inputSize >= 0);
if (cctx->tableType != tableType
- || (tableType == byU16 && cctx->currentOffset + inputSize >= 0xFFFFU)
- || (tableType == byU32 && cctx->currentOffset > 1 GB)
+ || ((tableType == byU16) && cctx->currentOffset + (unsigned)inputSize >= 0xFFFFU)
+ || ((tableType == byU32) && cctx->currentOffset > 1 GB)
|| tableType == byPtr
|| inputSize >= 4 KB)
{
@@ -811,9 +840,9 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
DEBUGLOG(5, "LZ4_compress_generic: srcSize=%i, tableType=%u", inputSize, tableType);
/* If init conditions are not met, we don't have to mark stream
* as having dirty context, since no action was taken yet */
- if (outputDirective == fillOutput && maxOutputSize < 1) return 0; /* Impossible to store anything */
- if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported inputSize, too large (or negative) */
- if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */
+ if (outputDirective == fillOutput && maxOutputSize < 1) { return 0; } /* Impossible to store anything */
+ if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) { return 0; } /* Unsupported inputSize, too large (or negative) */
+ if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) { return 0; } /* Size too large (not within 64K limit) */
if (tableType==byPtr) assert(dictDirective==noDict); /* only supported use case with byPtr */
assert(acceleration >= 1);
@@ -841,6 +870,7 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
for ( ; ; ) {
const BYTE* match;
BYTE* token;
+ const BYTE* filledIp;
/* Find a match */
if (tableType == byPtr) {
@@ -909,10 +939,14 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
forwardH = LZ4_hashPosition(forwardIp, tableType);
LZ4_putIndexOnHash(current, h, cctx->hashTable, tableType);
- if ((dictIssue == dictSmall) && (matchIndex < prefixIdxLimit)) continue; /* match outside of valid area */
+ DEBUGLOG(7, "candidate at pos=%u (offset=%u \n", matchIndex, current - matchIndex);
+ if ((dictIssue == dictSmall) && (matchIndex < prefixIdxLimit)) { continue; } /* match outside of valid area */
assert(matchIndex < current);
- if ((tableType != byU16) && (matchIndex+LZ4_DISTANCE_MAX < current)) continue; /* too far */
- if (tableType == byU16) assert((current - matchIndex) <= LZ4_DISTANCE_MAX); /* too_far presumed impossible with byU16 */
+ if ( ((tableType != byU16) || (LZ4_DISTANCE_MAX < LZ4_DISTANCE_ABSOLUTE_MAX))
+ && (matchIndex+LZ4_DISTANCE_MAX < current)) {
+ continue;
+ } /* too far */
+ assert((current - matchIndex) <= LZ4_DISTANCE_MAX); /* match now expected within distance */
if (LZ4_read32(match) == LZ4_read32(ip)) {
if (maybe_extMem) offset = current - matchIndex;
@@ -923,15 +957,16 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
}
/* Catch up */
+ filledIp = ip;
while (((ip>anchor) & (match > lowLimit)) && (unlikely(ip[-1]==match[-1]))) { ip--; match--; }
/* Encode Literals */
{ unsigned const litLength = (unsigned)(ip - anchor);
token = op++;
if ((outputDirective == limitedOutput) && /* Check output buffer overflow */
- (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit)) )
+ (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit)) ) {
return 0; /* cannot compress within `dst` budget. Stored indexes in hash table are nonetheless fine */
-
+ }
if ((outputDirective == fillOutput) &&
(unlikely(op + (litLength+240)/255 /* litlen */ + litLength /* literals */ + 2 /* offset */ + 1 /* token */ + MFLIMIT - MINMATCH /* min last literals so last match is <= end - MFLIMIT */ > olimit))) {
op--;
@@ -1002,12 +1037,26 @@ _next_match:
}
if ((outputDirective) && /* Check output buffer overflow */
- (unlikely(op + (1 + LASTLITERALS) + (matchCode>>8) > olimit)) ) {
+ (unlikely(op + (1 + LASTLITERALS) + (matchCode+240)/255 > olimit)) ) {
if (outputDirective == fillOutput) {
/* Match description too long : reduce it */
- U32 newMatchCode = 15 /* in token */ - 1 /* to avoid needing a zero byte */ + ((U32)(olimit - op) - 2 - 1 - LASTLITERALS) * 255;
+ U32 newMatchCode = 15 /* in token */ - 1 /* to avoid needing a zero byte */ + ((U32)(olimit - op) - 1 - LASTLITERALS) * 255;
ip -= matchCode - newMatchCode;
+ assert(newMatchCode < matchCode);
matchCode = newMatchCode;
+ if (unlikely(ip <= filledIp)) {
+ /* We have already filled up to filledIp so if ip ends up less than filledIp
+ * we have positions in the hash table beyond the current position. This is
+ * a problem if we reuse the hash table. So we have to remove these positions
+ * from the hash table.
+ */
+ const BYTE* ptr;
+ DEBUGLOG(5, "Clearing %u positions", (U32)(filledIp - ip));
+ for (ptr = ip; ptr <= filledIp; ++ptr) {
+ U32 const h = LZ4_hashPosition(ptr, tableType);
+ LZ4_clearHash(h, cctx->hashTable, tableType);
+ }
+ }
} else {
assert(outputDirective == limitedOutput);
return 0; /* cannot compress within `dst` budget. Stored indexes in hash table are nonetheless fine */
@@ -1027,6 +1076,8 @@ _next_match:
} else
*token += (BYTE)(matchCode);
}
+ /* Ensure we have enough space for the last literals. */
+ assert(!(outputDirective == fillOutput && op + 1 + LASTLITERALS > olimit));
anchor = ip;
@@ -1076,7 +1127,7 @@ _next_match:
LZ4_putIndexOnHash(current, h, cctx->hashTable, tableType);
assert(matchIndex < current);
if ( ((dictIssue==dictSmall) ? (matchIndex >= prefixIdxLimit) : 1)
- && ((tableType==byU16) ? 1 : (matchIndex+LZ4_DISTANCE_MAX >= current))
+ && (((tableType==byU16) && (LZ4_DISTANCE_MAX == LZ4_DISTANCE_ABSOLUTE_MAX)) ? 1 : (matchIndex+LZ4_DISTANCE_MAX >= current))
&& (LZ4_read32(match) == LZ4_read32(ip)) ) {
token=op++;
*token=0;
@@ -1143,7 +1194,7 @@ int LZ4_compress_fast_extState(void* state, const char* source, char* dest, int
return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, 0, notLimited, tableType, noDict, noDictIssue, acceleration);
}
} else {
- if (inputSize < LZ4_64Klimit) {;
+ if (inputSize < LZ4_64Klimit) {
return LZ4_compress_generic(ctx, source, dest, inputSize, NULL, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration);
} else {
const tableType_t tableType = ((sizeof(void*)==4) && ((uptrval)source > LZ4_DISTANCE_MAX)) ? byPtr : byU32;
@@ -1306,12 +1357,12 @@ static size_t LZ4_stream_t_alignment(void)
LZ4_stream_t* LZ4_initStream (void* buffer, size_t size)
{
DEBUGLOG(5, "LZ4_initStream");
- if (buffer == NULL) return NULL;
- if (size < sizeof(LZ4_stream_t)) return NULL;
+ if (buffer == NULL) { return NULL; }
+ if (size < sizeof(LZ4_stream_t)) { return NULL; }
#ifndef _MSC_VER /* for some reason, Visual fails the aligment test on 32-bit x86 :
it reports an aligment of 8-bytes,
while actually aligning LZ4_stream_t on 4 bytes. */
- if (((size_t)buffer) & (LZ4_stream_t_alignment() - 1)) return NULL; /* alignment check */
+ if (((size_t)buffer) & (LZ4_stream_t_alignment() - 1)) { return NULL; } /* alignment check */
#endif
MEM_INIT(buffer, 0, sizeof(LZ4_stream_t));
return (LZ4_stream_t*)buffer;
@@ -1361,18 +1412,18 @@ int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize)
* there are only valid offsets in the window, which allows an optimization
* in LZ4_compress_fast_continue() where it uses noDictIssue even when the
* dictionary isn't a full 64k. */
-
- if ((dictEnd - p) > 64 KB) p = dictEnd - 64 KB;
- base = dictEnd - 64 KB - dict->currentOffset;
- dict->dictionary = p;
- dict->dictSize = (U32)(dictEnd - p);
dict->currentOffset += 64 KB;
- dict->tableType = tableType;
if (dictSize < (int)HASH_UNIT) {
return 0;
}
+ if ((dictEnd - p) > 64 KB) p = dictEnd - 64 KB;
+ base = dictEnd - dict->currentOffset;
+ dict->dictionary = p;
+ dict->dictSize = (U32)(dictEnd - p);
+ dict->tableType = tableType;
+
while (p <= dictEnd-HASH_UNIT) {
LZ4_putPosition(p, dict->hashTable, tableType, base);
p+=3;
@@ -1381,26 +1432,37 @@ int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize)
return (int)dict->dictSize;
}
-void LZ4_attach_dictionary(LZ4_stream_t *working_stream, const LZ4_stream_t *dictionary_stream) {
+void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dictionaryStream) {
+ const LZ4_stream_t_internal* dictCtx = dictionaryStream == NULL ? NULL :
+ &(dictionaryStream->internal_donotuse);
+
+ DEBUGLOG(4, "LZ4_attach_dictionary (%p, %p, size %u)",
+ workingStream, dictionaryStream,
+ dictCtx != NULL ? dictCtx->dictSize : 0);
+
/* Calling LZ4_resetStream_fast() here makes sure that changes will not be
* erased by subsequent calls to LZ4_resetStream_fast() in case stream was
* marked as having dirty context, e.g. requiring full reset.
*/
- LZ4_resetStream_fast(working_stream);
+ LZ4_resetStream_fast(workingStream);
- if (dictionary_stream != NULL) {
+ if (dictCtx != NULL) {
/* If the current offset is zero, we will never look in the
* external dictionary context, since there is no value a table
* entry can take that indicate a miss. In that case, we need
* to bump the offset to something non-zero.
*/
- if (working_stream->internal_donotuse.currentOffset == 0) {
- working_stream->internal_donotuse.currentOffset = 64 KB;
+ if (workingStream->internal_donotuse.currentOffset == 0) {
+ workingStream->internal_donotuse.currentOffset = 64 KB;
+ }
+
+ /* Don't actually attach an empty dictionary.
+ */
+ if (dictCtx->dictSize == 0) {
+ dictCtx = NULL;
}
- working_stream->internal_donotuse.dictCtx = &(dictionary_stream->internal_donotuse);
- } else {
- working_stream->internal_donotuse.dictCtx = NULL;
}
+ workingStream->internal_donotuse.dictCtx = dictCtx;
}
@@ -1435,7 +1497,7 @@ int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream,
DEBUGLOG(5, "LZ4_compress_fast_continue (inputSize=%i)", inputSize);
- if (streamPtr->dirty) return 0; /* Uninitialized structure detected */
+ if (streamPtr->dirty) { return 0; } /* Uninitialized structure detected */
LZ4_renormDictT(streamPtr, inputSize); /* avoid index overflow */
if (acceleration < 1) acceleration = ACCELERATION_DEFAULT;
@@ -1532,8 +1594,8 @@ int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize)
LZ4_stream_t_internal* const dict = &LZ4_dict->internal_donotuse;
const BYTE* const previousDictEnd = dict->dictionary + dict->dictSize;
- if ((U32)dictSize > 64 KB) dictSize = 64 KB; /* useless to define a dictionary > 64 KB */
- if ((U32)dictSize > dict->dictSize) dictSize = (int)dict->dictSize;
+ if ((U32)dictSize > 64 KB) { dictSize = 64 KB; } /* useless to define a dictionary > 64 KB */
+ if ((U32)dictSize > dict->dictSize) { dictSize = (int)dict->dictSize; }
memmove(safeBuffer, previousDictEnd - dictSize, dictSize);
@@ -1567,8 +1629,8 @@ typedef enum { loop_error = -2, initial_error = -1, ok = 0 } variable_length_err
LZ4_FORCE_INLINE unsigned
read_variable_length(const BYTE**ip, const BYTE* lencheck, int loop_check, int initial_check, variable_length_error* error)
{
- unsigned length = 0;
- unsigned s;
+ U32 length = 0;
+ U32 s;
if (initial_check && unlikely((*ip) >= lencheck)) { /* overflow detection */
*error = initial_error;
return length;
@@ -1607,7 +1669,7 @@ LZ4_decompress_generic(
const size_t dictSize /* note : = 0 if noDict */
)
{
- if (src == NULL) return -1;
+ if (src == NULL) { return -1; }
{ const BYTE* ip = (const BYTE*) src;
const BYTE* const iend = ip + srcSize;
@@ -1636,9 +1698,13 @@ LZ4_decompress_generic(
/* Special cases */
assert(lowPrefix <= op);
- if ((endOnInput) && (unlikely(outputSize==0))) return ((srcSize==1) && (*ip==0)) ? 0 : -1; /* Empty output buffer */
- if ((!endOnInput) && (unlikely(outputSize==0))) return (*ip==0 ? 1 : -1);
- if ((endOnInput) && unlikely(srcSize==0)) return -1;
+ if ((endOnInput) && (unlikely(outputSize==0))) {
+ /* Empty output buffer */
+ if (partialDecoding) return 0;
+ return ((srcSize==1) && (*ip==0)) ? 0 : -1;
+ }
+ if ((!endOnInput) && (unlikely(outputSize==0))) { return (*ip==0 ? 1 : -1); }
+ if ((endOnInput) && unlikely(srcSize==0)) { return -1; }
/* Currently the fast loop shows a regression on qualcomm arm chips. */
#if LZ4_FAST_DEC_LOOP
@@ -1651,7 +1717,7 @@ LZ4_decompress_generic(
while (1) {
/* Main fastloop assertion: We can always wildcopy FASTLOOP_SAFE_DISTANCE */
assert(oend - op >= FASTLOOP_SAFE_DISTANCE);
- if (endOnInput) assert(ip < iend);
+ if (endOnInput) { assert(ip < iend); }
token = *ip++;
length = token >> ML_BITS; /* literal length */
@@ -1661,18 +1727,18 @@ LZ4_decompress_generic(
if (length == RUN_MASK) {
variable_length_error error = ok;
length += read_variable_length(&ip, iend-RUN_MASK, endOnInput, endOnInput, &error);
- if (error == initial_error) goto _output_error;
- if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) goto _output_error; /* overflow detection */
- if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) goto _output_error; /* overflow detection */
+ if (error == initial_error) { goto _output_error; }
+ if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) { goto _output_error; } /* overflow detection */
+ if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) { goto _output_error; } /* overflow detection */
/* copy literals */
cpy = op+length;
LZ4_STATIC_ASSERT(MFLIMIT >= WILDCOPYLENGTH);
if (endOnInput) { /* LZ4_decompress_safe() */
- if ((cpy>oend-32) || (ip+length>iend-32)) goto safe_literal_copy;
+ if ((cpy>oend-32) || (ip+length>iend-32)) { goto safe_literal_copy; }
LZ4_wildCopy32(op, ip, cpy);
} else { /* LZ4_decompress_fast() */
- if (cpy>oend-8) goto safe_literal_copy;
+ if (cpy>oend-8) { goto safe_literal_copy; }
LZ4_wildCopy8(op, ip, cpy); /* LZ4_decompress_fast() cannot copy more than 8 bytes at a time :
* it doesn't know input length, and only relies on end-of-block properties */
}
@@ -1682,14 +1748,14 @@ LZ4_decompress_generic(
if (endOnInput) { /* LZ4_decompress_safe() */
DEBUGLOG(7, "copy %u bytes in a 16-bytes stripe", (unsigned)length);
/* We don't need to check oend, since we check it once for each loop below */
- if (ip > iend-(16 + 1/*max lit + offset + nextToken*/)) goto safe_literal_copy;
+ if (ip > iend-(16 + 1/*max lit + offset + nextToken*/)) { goto safe_literal_copy; }
/* Literals can only be 14, but hope compilers optimize if we copy by a register size */
memcpy(op, ip, 16);
} else { /* LZ4_decompress_fast() */
/* LZ4_decompress_fast() cannot copy more than 8 bytes at a time :
* it doesn't know input length, and relies on end-of-block properties */
memcpy(op, ip, 8);
- if (length > 8) memcpy(op+8, ip+8, 8);
+ if (length > 8) { memcpy(op+8, ip+8, 8); }
}
ip += length; op = cpy;
}
@@ -1697,17 +1763,17 @@ LZ4_decompress_generic(
/* get offset */
offset = LZ4_readLE16(ip); ip+=2;
match = op - offset;
+ assert(match <= op);
/* get matchlength */
length = token & ML_MASK;
- if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) goto _output_error; /* Error : offset outside buffers */
-
if (length == ML_MASK) {
variable_length_error error = ok;
+ if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */
length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error);
- if (error != ok) goto _output_error;
- if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) goto _output_error; /* overflow detection */
+ if (error != ok) { goto _output_error; }
+ if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) { goto _output_error; } /* overflow detection */
length += MINMATCH;
if (op + length >= oend - FASTLOOP_SAFE_DISTANCE) {
goto safe_match_copy;
@@ -1719,8 +1785,12 @@ LZ4_decompress_generic(
}
/* Fastpath check: Avoids a branch in LZ4_wildCopy32 if true */
- if (!(dict == usingExtDict) || (match >= lowPrefix)) {
+ if ((dict == withPrefix64k) || (match >= lowPrefix)) {
if (offset >= 8) {
+ assert(match >= lowPrefix);
+ assert(match <= op);
+ assert(op + 18 <= oend);
+
memcpy(op, match, 8);
memcpy(op+8, match+8, 8);
memcpy(op+16, match+16, 2);
@@ -1728,12 +1798,15 @@ LZ4_decompress_generic(
continue;
} } }
+ if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) { goto _output_error; } /* Error : offset outside buffers */
/* match starting within external dictionary */
if ((dict==usingExtDict) && (match < lowPrefix)) {
if (unlikely(op+length > oend-LASTLITERALS)) {
- if (partialDecoding) length = MIN(length, (size_t)(oend-op));
- else goto _output_error; /* doesn't respect parsing restriction */
- }
+ if (partialDecoding) {
+ length = MIN(length, (size_t)(oend-op)); /* reach end of buffer */
+ } else {
+ goto _output_error; /* end-of-block condition violated */
+ } }
if (length <= (size_t)(lowPrefix-match)) {
/* match fits entirely within external dictionary : just copy */
@@ -1748,7 +1821,7 @@ LZ4_decompress_generic(
if (restSize > (size_t)(op - lowPrefix)) { /* overlap copy */
BYTE* const endOfMatch = op + restSize;
const BYTE* copyFrom = lowPrefix;
- while (op < endOfMatch) *op++ = *copyFrom++;
+ while (op < endOfMatch) { *op++ = *copyFrom++; }
} else {
memcpy(op, lowPrefix, restSize);
op += restSize;
@@ -1821,11 +1894,11 @@ LZ4_decompress_generic(
/* decode literal length */
if (length == RUN_MASK) {
- variable_length_error error = ok;
- length += read_variable_length(&ip, iend-RUN_MASK, endOnInput, endOnInput, &error);
- if (error == initial_error) goto _output_error;
- if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) goto _output_error; /* overflow detection */
- if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) goto _output_error; /* overflow detection */
+ variable_length_error error = ok;
+ length += read_variable_length(&ip, iend-RUN_MASK, endOnInput, endOnInput, &error);
+ if (error == initial_error) { goto _output_error; }
+ if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)(op))) { goto _output_error; } /* overflow detection */
+ if ((safeDecode) && unlikely((uptrval)(ip)+length<(uptrval)(ip))) { goto _output_error; } /* overflow detection */
}
/* copy literals */
@@ -1837,21 +1910,50 @@ LZ4_decompress_generic(
if ( ((endOnInput) && ((cpy>oend-MFLIMIT) || (ip+length>iend-(2+1+LASTLITERALS))) )
|| ((!endOnInput) && (cpy>oend-WILDCOPYLENGTH)) )
{
+ /* We've either hit the input parsing restriction or the output parsing restriction.
+ * If we've hit the input parsing condition then this must be the last sequence.
+ * If we've hit the output parsing condition then we are either using partialDecoding
+ * or we've hit the output parsing condition.
+ */
if (partialDecoding) {
- if (cpy > oend) { cpy = oend; assert(op<=oend); length = (size_t)(oend-op); } /* Partial decoding : stop in the middle of literal segment */
- if ((endOnInput) && (ip+length > iend)) goto _output_error; /* Error : read attempt beyond end of input buffer */
+ /* Since we are partial decoding we may be in this block because of the output parsing
+ * restriction, which is not valid since the output buffer is allowed to be undersized.
+ */
+ assert(endOnInput);
+ /* If we're in this block because of the input parsing condition, then we must be on the
+ * last sequence (or invalid), so we must check that we exactly consume the input.
+ */
+ if ((ip+length>iend-(2+1+LASTLITERALS)) && (ip+length != iend)) { goto _output_error; }
+ assert(ip+length <= iend);
+ /* We are finishing in the middle of a literals segment.
+ * Break after the copy.
+ */
+ if (cpy > oend) {
+ cpy = oend;
+ assert(op<=oend);
+ length = (size_t)(oend-op);
+ }
+ assert(ip+length <= iend);
} else {
- if ((!endOnInput) && (cpy != oend)) goto _output_error; /* Error : block decoding must stop exactly there */
- if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) goto _output_error; /* Error : input must be consumed */
+ /* We must be on the last sequence because of the parsing limitations so check
+ * that we exactly regenerate the original size (must be exact when !endOnInput).
+ */
+ if ((!endOnInput) && (cpy != oend)) { goto _output_error; }
+ /* We must be on the last sequence (or invalid) because of the parsing limitations
+ * so check that we exactly consume the input and don't overrun the output buffer.
+ */
+ if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) { goto _output_error; }
}
- memcpy(op, ip, length);
+ memmove(op, ip, length); /* supports overlapping memory regions, which only matters for in-place decompression scenarios */
ip += length;
op += length;
- if (!partialDecoding || (cpy == oend)) {
- /* Necessarily EOF, due to parsing restrictions */
+ /* Necessarily EOF when !partialDecoding. When partialDecoding
+ * it is EOF if we've either filled the output buffer or hit
+ * the input parsing restriction.
+ */
+ if (!partialDecoding || (cpy == oend) || (ip == iend)) {
break;
}
-
} else {
LZ4_wildCopy8(op, ip, cpy); /* may overwrite up to WILDCOPYLENGTH beyond cpy */
ip += length; op = cpy;
@@ -1865,13 +1967,6 @@ LZ4_decompress_generic(
length = token & ML_MASK;
_copy_match:
- if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) goto _output_error; /* Error : offset outside buffers */
- if (!partialDecoding) {
- assert(oend > op);
- assert(oend - op >= 4);
- LZ4_write32(op, 0); /* silence an msan warning when offset==0; costs <1%; */
- } /* note : when partialDecoding, there is no guarantee that at least 4 bytes remain available in output buffer */
-
if (length == ML_MASK) {
variable_length_error error = ok;
length += read_variable_length(&ip, iend - LASTLITERALS + 1, endOnInput, 0, &error);
@@ -1883,6 +1978,7 @@ LZ4_decompress_generic(
#if LZ4_FAST_DEC_LOOP
safe_match_copy:
#endif
+ if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) goto _output_error; /* Error : offset outside buffers */
/* match starting within external dictionary */
if ((dict==usingExtDict) && (match < lowPrefix)) {
if (unlikely(op+length > oend-LASTLITERALS)) {
@@ -1910,6 +2006,7 @@ LZ4_decompress_generic(
} }
continue;
}
+ assert(match >= lowPrefix);
/* copy match within block */
cpy = op + length;
@@ -1921,16 +2018,17 @@ LZ4_decompress_generic(
const BYTE* const matchEnd = match + mlen;
BYTE* const copyEnd = op + mlen;
if (matchEnd > op) { /* overlap copy */
- while (op < copyEnd) *op++ = *match++;
+ while (op < copyEnd) { *op++ = *match++; }
} else {
memcpy(op, match, mlen);
}
op = copyEnd;
- if (op==oend) break;
+ if (op == oend) { break; }
continue;
}
if (unlikely(offset<8)) {
+ LZ4_write32(op, 0); /* silence msan warning when offset==0 */
op[0] = match[0];
op[1] = match[1];
op[2] = match[2];
@@ -1946,25 +2044,26 @@ LZ4_decompress_generic(
if (unlikely(cpy > oend-MATCH_SAFEGUARD_DISTANCE)) {
BYTE* const oCopyLimit = oend - (WILDCOPYLENGTH-1);
- if (cpy > oend-LASTLITERALS) goto _output_error; /* Error : last LASTLITERALS bytes must be literals (uncompressed) */
+ if (cpy > oend-LASTLITERALS) { goto _output_error; } /* Error : last LASTLITERALS bytes must be literals (uncompressed) */
if (op < oCopyLimit) {
LZ4_wildCopy8(op, match, oCopyLimit);
match += oCopyLimit - op;
op = oCopyLimit;
}
- while (op < cpy) *op++ = *match++;
+ while (op < cpy) { *op++ = *match++; }
} else {
memcpy(op, match, 8);
- if (length > 16) LZ4_wildCopy8(op+8, match+8, cpy);
+ if (length > 16) { LZ4_wildCopy8(op+8, match+8, cpy); }
}
op = cpy; /* wildcopy correction */
}
/* end of decoding */
- if (endOnInput)
+ if (endOnInput) {
return (int) (((char*)op)-dst); /* Nb of output bytes decoded */
- else
+ } else {
return (int) (((const char*)ip)-src); /* Nb of input bytes read */
+ }
/* Overflow error detected */
_output_error:
@@ -2079,7 +2178,7 @@ LZ4_streamDecode_t* LZ4_createStreamDecode(void)
int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream)
{
- if (LZ4_stream == NULL) return 0; /* support free on NULL */
+ if (LZ4_stream == NULL) { return 0; } /* support free on NULL */
FREEMEM(LZ4_stream);
return 0;
}
@@ -2214,18 +2313,22 @@ int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressed
if (dictSize==0)
return LZ4_decompress_safe(source, dest, compressedSize, maxOutputSize);
if (dictStart+dictSize == dest) {
- if (dictSize >= 64 KB - 1)
+ if (dictSize >= 64 KB - 1) {
return LZ4_decompress_safe_withPrefix64k(source, dest, compressedSize, maxOutputSize);
- return LZ4_decompress_safe_withSmallPrefix(source, dest, compressedSize, maxOutputSize, dictSize);
+ }
+ assert(dictSize >= 0);
+ return LZ4_decompress_safe_withSmallPrefix(source, dest, compressedSize, maxOutputSize, (size_t)dictSize);
}
- return LZ4_decompress_safe_forceExtDict(source, dest, compressedSize, maxOutputSize, dictStart, dictSize);
+ assert(dictSize >= 0);
+ return LZ4_decompress_safe_forceExtDict(source, dest, compressedSize, maxOutputSize, dictStart, (size_t)dictSize);
}
int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize)
{
if (dictSize==0 || dictStart+dictSize == dest)
return LZ4_decompress_fast(source, dest, originalSize);
- return LZ4_decompress_fast_extDict(source, dest, originalSize, dictStart, dictSize);
+ assert(dictSize >= 0);
+ return LZ4_decompress_fast_extDict(source, dest, originalSize, dictStart, (size_t)dictSize);
}
@@ -2237,9 +2340,9 @@ int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, in
{
return LZ4_compress_default(source, dest, inputSize, maxOutputSize);
}
-int LZ4_compress(const char* source, char* dest, int inputSize)
+int LZ4_compress(const char* src, char* dest, int srcSize)
{
- return LZ4_compress_default(source, dest, inputSize, LZ4_compressBound(inputSize));
+ return LZ4_compress_default(src, dest, srcSize, LZ4_compressBound(srcSize));
}
int LZ4_compress_limitedOutput_withState (void* state, const char* src, char* dst, int srcSize, int dstSize)
{
diff --git a/src/static_libs/lz4/lz4.h b/src/static_libs/lz4/lz4.h
index a9c932ccb1..32108e2329 100644
--- a/src/static_libs/lz4/lz4.h
+++ b/src/static_libs/lz4/lz4.h
@@ -46,7 +46,7 @@ extern "C" {
/**
Introduction
- LZ4 is lossless compression algorithm, providing compression speed at 500 MB/s per core,
+ LZ4 is lossless compression algorithm, providing compression speed >500 MB/s per core,
scalable with multi-cores CPU. It features an extremely fast decoder, with speed in
multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.
@@ -58,16 +58,19 @@ extern "C" {
- unbounded multiple steps (described as Streaming compression)
lz4.h generates and decodes LZ4-compressed blocks (doc/lz4_Block_format.md).
- Decompressing a block requires additional metadata, such as its compressed size.
+ Decompressing such a compressed block requires additional metadata.
+ Exact metadata depends on exact decompression function.
+ For the typical case of LZ4_decompress_safe(),
+ metadata includes block's compressed size, and maximum bound of decompressed size.
Each application is free to encode and pass such metadata in whichever way it wants.
lz4.h only handle blocks, it can not generate Frames.
Blocks are different from Frames (doc/lz4_Frame_format.md).
Frames bundle both blocks and metadata in a specified manner.
- This are required for compressed data to be self-contained and portable.
+ Embedding metadata is required for compressed data to be self-contained and portable.
Frame format is delivered through a companion API, declared in lz4frame.h.
- Note that the `lz4` CLI can only manage frames.
+ The `lz4` CLI can only manage frames.
*/
/*^***************************************************************
@@ -97,7 +100,7 @@ extern "C" {
/*------ Version ------*/
#define LZ4_VERSION_MAJOR 1 /* for breaking interface changes */
#define LZ4_VERSION_MINOR 9 /* for new (non-breaking) interface capabilities */
-#define LZ4_VERSION_RELEASE 1 /* for tweaks, bug-fixes, or development */
+#define LZ4_VERSION_RELEASE 2 /* for tweaks, bug-fixes, or development */
#define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE)
@@ -129,29 +132,35 @@ LZ4LIB_API const char* LZ4_versionString (void); /**< library version string;
* Simple Functions
**************************************/
/*! LZ4_compress_default() :
- Compresses 'srcSize' bytes from buffer 'src'
- into already allocated 'dst' buffer of size 'dstCapacity'.
- Compression is guaranteed to succeed if 'dstCapacity' >= LZ4_compressBound(srcSize).
- It also runs faster, so it's a recommended setting.
- If the function cannot compress 'src' into a more limited 'dst' budget,
- compression stops *immediately*, and the function result is zero.
- In which case, 'dst' content is undefined (invalid).
- srcSize : max supported value is LZ4_MAX_INPUT_SIZE.
- dstCapacity : size of buffer 'dst' (which must be already allocated)
- @return : the number of bytes written into buffer 'dst' (necessarily <= dstCapacity)
- or 0 if compression fails
- Note : This function is protected against buffer overflow scenarios (never writes outside 'dst' buffer, nor read outside 'source' buffer).
-*/
+ * Compresses 'srcSize' bytes from buffer 'src'
+ * into already allocated 'dst' buffer of size 'dstCapacity'.
+ * Compression is guaranteed to succeed if 'dstCapacity' >= LZ4_compressBound(srcSize).
+ * It also runs faster, so it's a recommended setting.
+ * If the function cannot compress 'src' into a more limited 'dst' budget,
+ * compression stops *immediately*, and the function result is zero.
+ * In which case, 'dst' content is undefined (invalid).
+ * srcSize : max supported value is LZ4_MAX_INPUT_SIZE.
+ * dstCapacity : size of buffer 'dst' (which must be already allocated)
+ * @return : the number of bytes written into buffer 'dst' (necessarily <= dstCapacity)
+ * or 0 if compression fails
+ * Note : This function is protected against buffer overflow scenarios (never writes outside 'dst' buffer, nor read outside 'source' buffer).
+ */
LZ4LIB_API int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity);
/*! LZ4_decompress_safe() :
- compressedSize : is the exact complete size of the compressed block.
- dstCapacity : is the size of destination buffer, which must be already allocated.
- @return : the number of bytes decompressed into destination buffer (necessarily <= dstCapacity)
- If destination buffer is not large enough, decoding will stop and output an error code (negative value).
- If the source stream is detected malformed, the function will stop decoding and return a negative result.
- Note : This function is protected against malicious data packets (never writes outside 'dst' buffer, nor read outside 'source' buffer).
-*/
+ * compressedSize : is the exact complete size of the compressed block.
+ * dstCapacity : is the size of destination buffer (which must be already allocated), presumed an upper bound of decompressed size.
+ * @return : the number of bytes decompressed into destination buffer (necessarily <= dstCapacity)
+ * If destination buffer is not large enough, decoding will stop and output an error code (negative value).
+ * If the source stream is detected malformed, the function will stop decoding and return a negative result.
+ * Note 1 : This function is protected against malicious data packets :
+ * it will never writes outside 'dst' buffer, nor read outside 'source' buffer,
+ * even if the compressed block is maliciously modified to order the decoder to do these actions.
+ * In such case, the decoder stops immediately, and considers the compressed block malformed.
+ * Note 2 : compressedSize and dstCapacity must be provided to the function, the compressed block does not contain them.
+ * The implementation is free to send / store / derive this information in whichever way is most beneficial.
+ * If there is a need for a different format which bundles together both compressed data and its metadata, consider looking at lz4frame.h instead.
+ */
LZ4LIB_API int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity);
@@ -388,6 +397,8 @@ LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecod
*/
LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* src, char* dst, int srcSize, int dstCapcity, const char* dictStart, int dictSize);
+#endif /* LZ4_H_2983827168210 */
+
/*^*************************************
* !!!!!! STATIC LINKING ONLY !!!!!!
@@ -413,14 +424,17 @@ LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* src, char* dst, int sr
* define LZ4_PUBLISH_STATIC_FUNCTIONS when building the LZ4 library.
******************************************************************************/
+#ifdef LZ4_STATIC_LINKING_ONLY
+
+#ifndef LZ4_STATIC_3504398509
+#define LZ4_STATIC_3504398509
+
#ifdef LZ4_PUBLISH_STATIC_FUNCTIONS
#define LZ4LIB_STATIC_API LZ4LIB_API
#else
#define LZ4LIB_STATIC_API
#endif
-#ifdef LZ4_STATIC_LINKING_ONLY
-
/*! LZ4_compress_fast_extState_fastReset() :
* A variant of LZ4_compress_fast_extState().
@@ -462,8 +476,75 @@ LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset (void* state, const c
*/
LZ4LIB_STATIC_API void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dictionaryStream);
+
+/*! In-place compression and decompression
+ *
+ * It's possible to have input and output sharing the same buffer,
+ * for highly contrained memory environments.
+ * In both cases, it requires input to lay at the end of the buffer,
+ * and decompression to start at beginning of the buffer.
+ * Buffer size must feature some margin, hence be larger than final size.
+ *
+ * |<------------------------buffer--------------------------------->|
+ * |<-----------compressed data--------->|
+ * |<-----------decompressed size------------------>|
+ * |<----margin---->|
+ *
+ * This technique is more useful for decompression,
+ * since decompressed size is typically larger,
+ * and margin is short.
+ *
+ * In-place decompression will work inside any buffer
+ * which size is >= LZ4_DECOMPRESS_INPLACE_BUFFER_SIZE(decompressedSize).
+ * This presumes that decompressedSize > compressedSize.
+ * Otherwise, it means compression actually expanded data,
+ * and it would be more efficient to store such data with a flag indicating it's not compressed.
+ * This can happen when data is not compressible (already compressed, or encrypted).
+ *
+ * For in-place compression, margin is larger, as it must be able to cope with both
+ * history preservation, requiring input data to remain unmodified up to LZ4_DISTANCE_MAX,
+ * and data expansion, which can happen when input is not compressible.
+ * As a consequence, buffer size requirements are much higher,
+ * and memory savings offered by in-place compression are more limited.
+ *
+ * There are ways to limit this cost for compression :
+ * - Reduce history size, by modifying LZ4_DISTANCE_MAX.
+ * Note that it is a compile-time constant, so all compressions will apply this limit.
+ * Lower values will reduce compression ratio, except when input_size < LZ4_DISTANCE_MAX,
+ * so it's a reasonable trick when inputs are known to be small.
+ * - Require the compressor to deliver a "maximum compressed size".
+ * This is the `dstCapacity` parameter in `LZ4_compress*()`.
+ * When this size is < LZ4_COMPRESSBOUND(inputSize), then compression can fail,
+ * in which case, the return code will be 0 (zero).
+ * The caller must be ready for these cases to happen,
+ * and typically design a backup scheme to send data uncompressed.
+ * The combination of both techniques can significantly reduce
+ * the amount of margin required for in-place compression.
+ *
+ * In-place compression can work in any buffer
+ * which size is >= (maxCompressedSize)
+ * with maxCompressedSize == LZ4_COMPRESSBOUND(srcSize) for guaranteed compression success.
+ * LZ4_COMPRESS_INPLACE_BUFFER_SIZE() depends on both maxCompressedSize and LZ4_DISTANCE_MAX,
+ * so it's possible to reduce memory requirements by playing with them.
+ */
+
+#define LZ4_DECOMPRESS_INPLACE_MARGIN(compressedSize) (((compressedSize) >> 8) + 32)
+#define LZ4_DECOMPRESS_INPLACE_BUFFER_SIZE(decompressedSize) ((decompressedSize) + LZ4_DECOMPRESS_INPLACE_MARGIN(decompressedSize)) /**< note: presumes that compressedSize < decompressedSize. note2: margin is overestimated a bit, since it could use compressedSize instead */
+
+#ifndef LZ4_DISTANCE_MAX /* history window size; can be user-defined at compile time */
+# define LZ4_DISTANCE_MAX 65535 /* set to maximum value by default */
#endif
+#define LZ4_COMPRESS_INPLACE_MARGIN (LZ4_DISTANCE_MAX + 32) /* LZ4_DISTANCE_MAX can be safely replaced by srcSize when it's smaller */
+#define LZ4_COMPRESS_INPLACE_BUFFER_SIZE(maxCompressedSize) ((maxCompressedSize) + LZ4_COMPRESS_INPLACE_MARGIN) /**< maxCompressedSize is generally LZ4_COMPRESSBOUND(inputSize), but can be set to any lower value, with the risk that compression can fail (return code 0(zero)) */
+
+#endif /* LZ4_STATIC_3504398509 */
+#endif /* LZ4_STATIC_LINKING_ONLY */
+
+
+
+#ifndef LZ4_H_98237428734687
+#define LZ4_H_98237428734687
/*-************************************************************
* PRIVATE DEFINITIONS
@@ -567,6 +648,7 @@ union LZ4_streamDecode_u {
} ; /* previously typedef'd to LZ4_streamDecode_t */
+
/*-************************************
* Obsolete Functions
**************************************/
@@ -601,8 +683,8 @@ union LZ4_streamDecode_u {
#endif /* LZ4_DISABLE_DEPRECATE_WARNINGS */
/* Obsolete compression functions */
-LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress (const char* source, char* dest, int sourceSize);
-LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput (const char* source, char* dest, int sourceSize, int maxOutputSize);
+LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress (const char* src, char* dest, int srcSize);
+LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput (const char* src, char* dest, int srcSize, int maxOutputSize);
LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize);
LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize);
@@ -674,7 +756,7 @@ LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* src, char* dst, int or
LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr);
-#endif /* LZ4_H_2983827168210 */
+#endif /* LZ4_H_98237428734687 */
#if defined (__cplusplus)
diff --git a/src/static_libs/lz4/lz4frame.c b/src/static_libs/lz4/lz4frame.c
index 95da80ec32..71ee73d8a8 100644
--- a/src/static_libs/lz4/lz4frame.c
+++ b/src/static_libs/lz4/lz4frame.c
@@ -213,8 +213,8 @@ static void LZ4F_writeLE64 (void* dst, U64 value64)
static const size_t minFHSize = LZ4F_HEADER_SIZE_MIN; /* 7 */
static const size_t maxFHSize = LZ4F_HEADER_SIZE_MAX; /* 19 */
-static const size_t BHSize = 4; /* block header : size, and compress flag */
-static const size_t BFSize = 4; /* block footer : checksum (optional) */
+static const size_t BHSize = LZ4F_BLOCK_HEADER_SIZE; /* block header : size, and compress flag */
+static const size_t BFSize = LZ4F_BLOCK_CHECKSUM_SIZE; /* block footer : checksum (optional) */
/*-************************************
@@ -327,6 +327,7 @@ static size_t LZ4F_compressBound_internal(size_t srcSize,
{
LZ4F_preferences_t prefsNull = LZ4F_INIT_PREFERENCES;
prefsNull.frameInfo.contentChecksumFlag = LZ4F_contentChecksumEnabled; /* worst case */
+ prefsNull.frameInfo.blockChecksumFlag = LZ4F_blockChecksumEnabled; /* worst case */
{ const LZ4F_preferences_t* const prefsPtr = (preferencesPtr==NULL) ? &prefsNull : preferencesPtr;
U32 const flush = prefsPtr->autoFlush | (srcSize==0);
LZ4F_blockSizeID_t const blockID = prefsPtr->frameInfo.blockSizeID;
@@ -1130,8 +1131,10 @@ static size_t LZ4F_decodeHeader(LZ4F_dctx* dctx, const void* src, size_t srcSize
}
/* control magic number */
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
if (LZ4F_readLE32(srcPtr) != LZ4F_MAGICNUMBER)
return err0r(LZ4F_ERROR_frameType_unknown);
+#endif
dctx->frameInfo.frameType = LZ4F_frame;
/* Flags */
@@ -1170,10 +1173,12 @@ static size_t LZ4F_decodeHeader(LZ4F_dctx* dctx, const void* src, size_t srcSize
/* check header */
assert(frameHeaderSize > 5);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
{ BYTE const HC = LZ4F_headerChecksum(srcPtr+4, frameHeaderSize-5);
if (HC != srcPtr[frameHeaderSize-1])
return err0r(LZ4F_ERROR_headerChecksum_invalid);
}
+#endif
/* save */
dctx->frameInfo.blockMode = (LZ4F_blockMode_t)blockMode;
@@ -1210,8 +1215,10 @@ size_t LZ4F_headerSize(const void* src, size_t srcSize)
return 8;
/* control magic number */
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
if (LZ4F_readLE32(src) != LZ4F_MAGICNUMBER)
return err0r(LZ4F_ERROR_frameType_unknown);
+#endif
/* Frame Header Size */
{ BYTE const FLG = ((const BYTE*)src)[4];
@@ -1493,7 +1500,7 @@ size_t LZ4F_decompress(LZ4F_dctx* dctx,
/* next block is a compressed block */
dctx->tmpInTarget = nextCBlockSize + crcSize;
dctx->dStage = dstage_getCBlock;
- if (dstPtr==dstEnd) {
+ if (dstPtr==dstEnd || srcPtr==srcEnd) {
nextSrcSizeHint = BHSize + nextCBlockSize + crcSize;
doAnotherStage = 0;
}
@@ -1554,8 +1561,13 @@ size_t LZ4F_decompress(LZ4F_dctx* dctx,
}
{ U32 const readCRC = LZ4F_readLE32(crcSrc);
U32 const calcCRC = XXH32_digest(&dctx->blockChecksum);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
if (readCRC != calcCRC)
return err0r(LZ4F_ERROR_blockChecksum_invalid);
+#else
+ (void)readCRC;
+ (void)calcCRC;
+#endif
} }
dctx->dStage = dstage_getBlockHeader; /* new block */
break;
@@ -1594,8 +1606,13 @@ size_t LZ4F_decompress(LZ4F_dctx* dctx,
assert(selectedIn != NULL); /* selectedIn is defined at this stage (either srcPtr, or dctx->tmpIn) */
{ U32 const readBlockCrc = LZ4F_readLE32(selectedIn + dctx->tmpInTarget);
U32 const calcBlockCrc = XXH32(selectedIn, dctx->tmpInTarget, 0);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
if (readBlockCrc != calcBlockCrc)
return err0r(LZ4F_ERROR_blockChecksum_invalid);
+#else
+ (void)readBlockCrc;
+ (void)calcBlockCrc;
+#endif
} }
if ((size_t)(dstEnd-dstPtr) >= dctx->maxBlockSize) {
@@ -1723,8 +1740,13 @@ size_t LZ4F_decompress(LZ4F_dctx* dctx,
/* case dstage_checkSuffix: */ /* no direct entry, avoid initialization risks */
{ U32 const readCRC = LZ4F_readLE32(selectedIn);
U32 const resultCRC = XXH32_digest(&(dctx->xxh));
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
if (readCRC != resultCRC)
return err0r(LZ4F_ERROR_contentChecksum_invalid);
+#else
+ (void)readCRC;
+ (void)resultCRC;
+#endif
nextSrcSizeHint = 0;
LZ4F_resetDecompressionContext(dctx);
doAnotherStage = 0;
diff --git a/src/static_libs/lz4/lz4frame.h b/src/static_libs/lz4/lz4frame.h
index 742c2528e0..391e484011 100644
--- a/src/static_libs/lz4/lz4frame.h
+++ b/src/static_libs/lz4/lz4frame.h
@@ -253,6 +253,15 @@ LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeCompressionContext(LZ4F_cctx* cctx);
#define LZ4F_HEADER_SIZE_MIN 7 /* LZ4 Frame header size can vary, depending on selected paramaters */
#define LZ4F_HEADER_SIZE_MAX 19
+/* Size in bytes of a block header in little-endian format. Highest bit indicates if block data is uncompressed */
+#define LZ4F_BLOCK_HEADER_SIZE 4
+
+/* Size in bytes of a block checksum footer in little-endian format. */
+#define LZ4F_BLOCK_CHECKSUM_SIZE 4
+
+/* Size in bytes of the content checksum. */
+#define LZ4F_CONTENT_CHECKSUM_SIZE 4
+
/*! LZ4F_compressBegin() :
* will write the frame header into dstBuffer.
* dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes.
diff --git a/src/static_libs/lz4/lz4hc.c b/src/static_libs/lz4/lz4hc.c
index 936f73969e..afadb3f169 100644
--- a/src/static_libs/lz4/lz4hc.c
+++ b/src/static_libs/lz4/lz4hc.c
@@ -151,6 +151,21 @@ int LZ4HC_countBack(const BYTE* const ip, const BYTE* const match,
return back;
}
+#if defined(_MSC_VER)
+# define LZ4HC_rotl32(x,r) _rotl(x,r)
+#else
+# define LZ4HC_rotl32(x,r) ((x << r) | (x >> (32 - r)))
+#endif
+
+
+static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern)
+{
+ size_t const bitsToRotate = (rotate & (sizeof(pattern) - 1)) << 3;
+ if (bitsToRotate == 0)
+ return pattern;
+ return LZ4HC_rotl32(pattern, (int)bitsToRotate);
+}
+
/* LZ4HC_countPattern() :
* pattern32 must be a sample of repetitive pattern of length 1, 2 or 4 (but not 3!) */
static unsigned
@@ -203,6 +218,16 @@ LZ4HC_reverseCountPattern(const BYTE* ip, const BYTE* const iLow, U32 pattern)
return (unsigned)(iStart - ip);
}
+/* LZ4HC_protectDictEnd() :
+ * Checks if the match is in the last 3 bytes of the dictionary, so reading the
+ * 4 byte MINMATCH would overflow.
+ * @returns true if the match index is okay.
+ */
+static int LZ4HC_protectDictEnd(U32 const dictLimit, U32 const matchIndex)
+{
+ return ((U32)((dictLimit - 1) - matchIndex) >= 3);
+}
+
typedef enum { rep_untested, rep_not, rep_confirmed } repeat_state_e;
typedef enum { favorCompressionRatio=0, favorDecompressionSpeed } HCfavor_e;
@@ -228,7 +253,7 @@ LZ4HC_InsertAndGetWiderMatch (
const U32 dictLimit = hc4->dictLimit;
const BYTE* const lowPrefixPtr = base + dictLimit;
const U32 ipIndex = (U32)(ip - base);
- const U32 lowestMatchIndex = (hc4->lowLimit + 64 KB > ipIndex) ? hc4->lowLimit : ipIndex - LZ4_DISTANCE_MAX;
+ const U32 lowestMatchIndex = (hc4->lowLimit + (LZ4_DISTANCE_MAX + 1) > ipIndex) ? hc4->lowLimit : ipIndex - LZ4_DISTANCE_MAX;
const BYTE* const dictBase = hc4->dictBase;
int const lookBackLength = (int)(ip-iLowLimit);
int nbAttempts = maxNbAttempts;
@@ -287,14 +312,21 @@ LZ4HC_InsertAndGetWiderMatch (
if (chainSwap && matchLength==longest) { /* better match => select a better chain */
assert(lookBackLength==0); /* search forward only */
if (matchIndex + (U32)longest <= ipIndex) {
+ int const kTrigger = 4;
U32 distanceToNextMatch = 1;
+ int const end = longest - MINMATCH + 1;
+ int step = 1;
+ int accel = 1 << kTrigger;
int pos;
- for (pos = 0; pos <= longest - MINMATCH; pos++) {
+ for (pos = 0; pos < end; pos += step) {
U32 const candidateDist = DELTANEXTU16(chainTable, matchIndex + (U32)pos);
+ step = (accel++ >> kTrigger);
if (candidateDist > distanceToNextMatch) {
distanceToNextMatch = candidateDist;
matchChainPos = (U32)pos;
- } }
+ accel = 1 << kTrigger;
+ }
+ }
if (distanceToNextMatch > 1) {
if (distanceToNextMatch > matchIndex) break; /* avoid overflow */
matchIndex -= distanceToNextMatch;
@@ -313,34 +345,61 @@ LZ4HC_InsertAndGetWiderMatch (
} else {
repeat = rep_not;
} }
- if ( (repeat == rep_confirmed)
- && (matchCandidateIdx >= dictLimit) ) { /* same segment only */
- const BYTE* const matchPtr = base + matchCandidateIdx;
+ if ( (repeat == rep_confirmed) && (matchCandidateIdx >= lowestMatchIndex)
+ && LZ4HC_protectDictEnd(dictLimit, matchCandidateIdx) ) {
+ const int extDict = matchCandidateIdx < dictLimit;
+ const BYTE* const matchPtr = (extDict ? dictBase : base) + matchCandidateIdx;
if (LZ4_read32(matchPtr) == pattern) { /* good candidate */
- size_t const forwardPatternLength = LZ4HC_countPattern(matchPtr+sizeof(pattern), iHighLimit, pattern) + sizeof(pattern);
- const BYTE* const lowestMatchPtr = (lowPrefixPtr + LZ4_DISTANCE_MAX >= ip) ? lowPrefixPtr : ip - LZ4_DISTANCE_MAX;
- size_t const backLength = LZ4HC_reverseCountPattern(matchPtr, lowestMatchPtr, pattern);
- size_t const currentSegmentLength = backLength + forwardPatternLength;
-
- if ( (currentSegmentLength >= srcPatternLength) /* current pattern segment large enough to contain full srcPatternLength */
- && (forwardPatternLength <= srcPatternLength) ) { /* haven't reached this position yet */
- matchIndex = matchCandidateIdx + (U32)forwardPatternLength - (U32)srcPatternLength; /* best position, full pattern, might be followed by more match */
- } else {
- matchIndex = matchCandidateIdx - (U32)backLength; /* farthest position in current segment, will find a match of length currentSegmentLength + maybe some back */
- if (lookBackLength==0) { /* no back possible */
- size_t const maxML = MIN(currentSegmentLength, srcPatternLength);
- if ((size_t)longest < maxML) {
- assert(base + matchIndex < ip);
- if (ip - (base+matchIndex) > LZ4_DISTANCE_MAX) break;
- assert(maxML < 2 GB);
- longest = (int)maxML;
- *matchpos = base + matchIndex; /* virtual pos, relative to ip, to retrieve offset */
- *startpos = ip;
+ const BYTE* const dictStart = dictBase + hc4->lowLimit;
+ const BYTE* const iLimit = extDict ? dictBase + dictLimit : iHighLimit;
+ size_t forwardPatternLength = LZ4HC_countPattern(matchPtr+sizeof(pattern), iLimit, pattern) + sizeof(pattern);
+ if (extDict && matchPtr + forwardPatternLength == iLimit) {
+ U32 const rotatedPattern = LZ4HC_rotatePattern(forwardPatternLength, pattern);
+ forwardPatternLength += LZ4HC_countPattern(lowPrefixPtr, iHighLimit, rotatedPattern);
+ }
+ { const BYTE* const lowestMatchPtr = extDict ? dictStart : lowPrefixPtr;
+ size_t backLength = LZ4HC_reverseCountPattern(matchPtr, lowestMatchPtr, pattern);
+ size_t currentSegmentLength;
+ if (!extDict && matchPtr - backLength == lowPrefixPtr && hc4->lowLimit < dictLimit) {
+ U32 const rotatedPattern = LZ4HC_rotatePattern((U32)(-(int)backLength), pattern);
+ backLength += LZ4HC_reverseCountPattern(dictBase + dictLimit, dictStart, rotatedPattern);
+ }
+ /* Limit backLength not go further than lowestMatchIndex */
+ backLength = matchCandidateIdx - MAX(matchCandidateIdx - (U32)backLength, lowestMatchIndex);
+ assert(matchCandidateIdx - backLength >= lowestMatchIndex);
+ currentSegmentLength = backLength + forwardPatternLength;
+ /* Adjust to end of pattern if the source pattern fits, otherwise the beginning of the pattern */
+ if ( (currentSegmentLength >= srcPatternLength) /* current pattern segment large enough to contain full srcPatternLength */
+ && (forwardPatternLength <= srcPatternLength) ) { /* haven't reached this position yet */
+ U32 const newMatchIndex = matchCandidateIdx + (U32)forwardPatternLength - (U32)srcPatternLength; /* best position, full pattern, might be followed by more match */
+ if (LZ4HC_protectDictEnd(dictLimit, newMatchIndex))
+ matchIndex = newMatchIndex;
+ else {
+ /* Can only happen if started in the prefix */
+ assert(newMatchIndex >= dictLimit - 3 && newMatchIndex < dictLimit && !extDict);
+ matchIndex = dictLimit;
}
- { U32 const distToNextPattern = DELTANEXTU16(chainTable, matchIndex);
- if (distToNextPattern > matchIndex) break; /* avoid overflow */
- matchIndex -= distToNextPattern;
- } } }
+ } else {
+ U32 const newMatchIndex = matchCandidateIdx - (U32)backLength; /* farthest position in current segment, will find a match of length currentSegmentLength + maybe some back */
+ if (!LZ4HC_protectDictEnd(dictLimit, newMatchIndex)) {
+ assert(newMatchIndex >= dictLimit - 3 && newMatchIndex < dictLimit && !extDict);
+ matchIndex = dictLimit;
+ } else {
+ matchIndex = newMatchIndex;
+ if (lookBackLength==0) { /* no back possible */
+ size_t const maxML = MIN(currentSegmentLength, srcPatternLength);
+ if ((size_t)longest < maxML) {
+ assert(base + matchIndex != ip);
+ if ((size_t)(ip - base) - matchIndex > LZ4_DISTANCE_MAX) break;
+ assert(maxML < 2 GB);
+ longest = (int)maxML;
+ *matchpos = base + matchIndex; /* virtual pos, relative to ip, to retrieve offset */
+ *startpos = ip;
+ }
+ { U32 const distToNextPattern = DELTANEXTU16(chainTable, matchIndex);
+ if (distToNextPattern > matchIndex) break; /* avoid overflow */
+ matchIndex -= distToNextPattern;
+ } } } } }
continue;
} }
} } /* PA optimization */
@@ -969,7 +1028,7 @@ int LZ4_loadDictHC (LZ4_streamHC_t* LZ4_streamHCPtr,
const char* dictionary, int dictSize)
{
LZ4HC_CCtx_internal* const ctxPtr = &LZ4_streamHCPtr->internal_donotuse;
- DEBUGLOG(4, "LZ4_loadDictHC(%p, %p, %d)", LZ4_streamHCPtr, dictionary, dictSize);
+ DEBUGLOG(4, "LZ4_loadDictHC(ctx:%p, dict:%p, dictSize:%d)", LZ4_streamHCPtr, dictionary, dictSize);
assert(LZ4_streamHCPtr != NULL);
if (dictSize > 64 KB) {
dictionary += (size_t)dictSize - 64 KB;
@@ -1005,6 +1064,9 @@ static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal* ctxPtr, const BYTE* newBl
ctxPtr->base = newBlock - ctxPtr->dictLimit;
ctxPtr->end = newBlock;
ctxPtr->nextToUpdate = ctxPtr->dictLimit; /* match referencing will resume from there */
+
+ /* cannot reference an extDict and a dictCtx at the same time */
+ ctxPtr->dictCtx = NULL;
}
static int LZ4_compressHC_continue_generic (LZ4_streamHC_t* LZ4_streamHCPtr,
diff --git a/src/static_libs/lz4/lz4hc.h b/src/static_libs/lz4/lz4hc.h
index cdc6d895ef..44e35bbf6b 100644
--- a/src/static_libs/lz4/lz4hc.h
+++ b/src/static_libs/lz4/lz4hc.h
@@ -336,6 +336,9 @@ LZ4LIB_API void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionL
#ifndef LZ4_HC_SLO_098092834
#define LZ4_HC_SLO_098092834
+#define LZ4_STATIC_LINKING_ONLY /* LZ4LIB_STATIC_API */
+#include "lz4.h"
+
#if defined (__cplusplus)
extern "C" {
#endif
diff --git a/src/static_libs/rg_etc/etc2_encoder.c b/src/static_libs/rg_etc/etc2_encoder.c
index 6f439078ca..e37819a780 100644
--- a/src/static_libs/rg_etc/etc2_encoder.c
+++ b/src/static_libs/rg_etc/etc2_encoder.c
@@ -146,7 +146,7 @@ absi(int a)
#ifndef DBG
# ifdef DEBUG
-# define DBG(fmt, ...) fprintf(stderr, "%s:%d: " fmt "\n", __FUNCTION__, __LINE__, ## __VA_ARGS__)
+# define DBG(fmt, ...) fprintf(stderr, "%s:%d: " fmt "\n", __func__, __LINE__, ## __VA_ARGS__)
# else
# define DBG(...)
# endif
diff --git a/src/static_libs/rg_etc/meson.build b/src/static_libs/rg_etc/meson.build
index cd093daba9..84a037ed20 100644
--- a/src/static_libs/rg_etc/meson.build
+++ b/src/static_libs/rg_etc/meson.build
@@ -9,3 +9,7 @@ rg_etc = declare_dependency(
include_directories: include_directories('.'),
sources : rg_etc_src
)
+
+rg_etc_simple = declare_dependency(
+ include_directories: include_directories('.'),
+)
diff --git a/src/static_libs/rg_etc/rg_etc1.c b/src/static_libs/rg_etc/rg_etc1.c
index e17eb887cd..9b889a3995 100644
--- a/src/static_libs/rg_etc/rg_etc1.c
+++ b/src/static_libs/rg_etc/rg_etc1.c
@@ -2278,7 +2278,7 @@ rg_etc1_pack_block_solid_color(unsigned char *block, const color_quad_u8 *color,
if (!rg_etc1_inverse_lookup[0][255])
{
- fprintf(stderr, "ETC1: Inverse lookup table not set (in %s)!\n", __FUNCTION__);
+ fprintf(stderr, "ETC1: Inverse lookup table not set (in %s)!\n", __func__);
return 0;
}
@@ -2392,7 +2392,7 @@ rg_etc1_pack_block_solid_color_constrained(rg_etc1_optimizer_results *results,ui
if (!rg_etc1_inverse_lookup[0][255])
{
- fprintf(stderr, "ETC1: Inverse lookup table not set (in %s)!\n", __FUNCTION__);
+ fprintf(stderr, "ETC1: Inverse lookup table not set (in %s)!\n", __func__);
return 0;
}
diff --git a/src/static_libs/triangulator/triangulator_stroker.c b/src/static_libs/triangulator/triangulator_stroker.c
index cf07bec5a3..12847cb51a 100644
--- a/src/static_libs/triangulator/triangulator_stroker.c
+++ b/src/static_libs/triangulator/triangulator_stroker.c
@@ -409,8 +409,8 @@ _end_cap_or_join_closed(Triangulator_Stroker *stroker,
static inline void
_skip_duplicate_points(const double **pts, const double *end_pts)
{
- while ((*pts + 2) < end_pts && (*pts)[0] == (*pts)[2] &&
- EINA_FLT_EQ((*pts)[1], (*pts)[3]))
+ while ((*pts + 2) < end_pts && EINA_DBL_EQ((*pts)[0], (*pts)[2]) &&
+ EINA_DBL_EQ((*pts)[1], (*pts)[3]))
{
*pts += 2;
}
diff --git a/src/static_libs/vg_common/vg_common.h b/src/static_libs/vg_common/vg_common.h
index 83f9224e45..e9cbb4f475 100644
--- a/src/static_libs/vg_common/vg_common.h
+++ b/src/static_libs/vg_common/vg_common.h
@@ -25,12 +25,14 @@ typedef struct _Svg_Ellipse_Node Svg_Ellipse_Node;
typedef struct _Svg_Polygon_Node Svg_Polygon_Node;
typedef struct _Svg_Rect_Node Svg_Rect_Node;
typedef struct _Svg_Path_Node Svg_Path_Node;
+typedef struct _Svg_Composite Svg_Composite;
typedef struct _Svg_Style_Property Svg_Style_Property;
typedef struct _Svg_Line_Node Svg_Line_Node;
typedef struct _Svg_Custom_Command_Node Svg_Custom_Command_Node;
typedef struct _Svg_Style_Stroke Svg_Style_Stroke;
typedef struct _Svg_Style_Fill Svg_Style_Fill;
+typedef enum _Svg_Composite_Flags Svg_Composite_Flags;
typedef enum _Svg_Fill_Flags Svg_Fill_Flags;
typedef enum _Svg_Stroke_Flags Svg_Stroke_Flags;
@@ -62,6 +64,7 @@ enum _Svg_Node_Type
SVG_NODE_USE,
SVG_NODE_VIDEO,
SVG_NODE_CUSTOME_COMMAND,
+ SVG_NODE_CLIP_PATH,
SVG_NODE_UNKNOWN
};
@@ -126,6 +129,8 @@ struct _Svg_Rect_Node
double h;
double rx;
double ry;
+ Eina_Bool has_rx;
+ Eina_Bool has_ry;
};
struct _Svg_Line_Node
@@ -222,6 +227,12 @@ struct _Svg_Paint
Eina_Stringshare *url;
};
+enum _Svg_Composite_Flags
+{
+ SVG_COMPOSITE_FLAGS_CLIP_PATH = 0x01,
+};
+
+
enum _Svg_Fill_Flags
{
SVG_FILL_FLAGS_PAINT = 0x1,
@@ -264,10 +275,18 @@ struct _Svg_Style_Stroke
int dash_count;
};
+struct _Svg_Composite
+{
+ Svg_Composite_Flags flags;
+ const char *url;
+ Svg_Node* node;
+};
+
struct _Svg_Style_Property
{
Svg_Style_Fill fill;
Svg_Style_Stroke stroke;
+ Svg_Composite comp;
// the color property indirectly
// used by fill and stroke
int r;
diff --git a/src/static_libs/vg_common/vg_common_json.c b/src/static_libs/vg_common/vg_common_json.c
index 7a41527795..78c9ecf9f7 100644
--- a/src/static_libs/vg_common/vg_common_json.c
+++ b/src/static_libs/vg_common/vg_common_json.c
@@ -13,17 +13,22 @@ static char*
_get_key_val(void *key)
{
static char buf[30];
- snprintf(buf, sizeof(buf), "%ld", (size_t) key);
+ snprintf(buf, sizeof(buf), "%zu", (size_t) key);
return buf;
}
static void
-_construct_drawable_nodes(Efl_Canvas_Vg_Container *parent, const LOTLayerNode *layer, int depth EINA_UNUSED)
+_construct_drawable_nodes(Vg_File_Data *vfd, Efl_Canvas_Vg_Container *parent, const LOTLayerNode *layer, int depth EINA_UNUSED)
{
if (!parent) return;
+ //This list is used for layer order verification
+ Eina_List *list = (Eina_List*) efl_canvas_vg_container_children_direct_get(parent);
+
for (unsigned int i = 0; i < layer->mNodeList.size; i++)
{
+ if (i > 0) list = eina_list_next(list);
+
LOTNode *node = layer->mNodeList.ptr[i];
if (!node) continue;
@@ -63,7 +68,13 @@ _construct_drawable_nodes(Efl_Canvas_Vg_Container *parent, const LOTLayerNode *l
efl_key_data_set(parent, key, shape);
}
else
- efl_gfx_path_reset(shape);
+ {
+ efl_gfx_path_reset(shape);
+
+ //Layer order is mismatched!
+ if (eina_list_data_get(list) != shape)
+ efl_gfx_stack_raise_to_top(shape);
+ }
//Skip Invisible Stroke?
if (node->mStroke.enable && node->mStroke.width == 0)
@@ -75,10 +86,26 @@ _construct_drawable_nodes(Efl_Canvas_Vg_Container *parent, const LOTLayerNode *l
const float *data = node->mPath.ptPtr;
if (!data) continue;
+
+ for (unsigned int i = 0; i<node->mPath.ptCount; i++)
+ {
+ if (i%2 == 0)
+ {
+ if (vfd->bl > data[i]) vfd->bl = data[i];
+ if (vfd->br < data[i]) vfd->br = data[i];
+ }
+ else
+ {
+ if (vfd->bt > data[i]) vfd->bt = data[i];
+ if (vfd->bb < data[i]) vfd->bb = data[i];
+ }
+ }
+
+ if (node->keypath) efl_key_data_set(shape, "_lot_node_name", node->keypath);
efl_gfx_entity_visible_set(shape, EINA_TRUE);
#if DEBUG
for (int i = 0; i < depth; i++) printf(" ");
- printf("%s (%p)\n", efl_class_name_get(efl_class_get(shape)), shape);
+ printf("%s (%p) keypath : %s\n", efl_class_name_get(efl_class_get(shape)), shape, node->keypath);
#endif
//0: Path
efl_gfx_path_reserve(shape, node->mPath.elmCount, node->mPath.ptCount);
@@ -300,7 +327,7 @@ _construct_mask_nodes(Efl_Canvas_Vg_Container *parent, LOTMask *mask, int depth
efl_gfx_color_set(shape, r, g, b, a);
}
-static void
+static Efl_Canvas_Vg_Container*
_construct_masks(Efl_Canvas_Vg_Container *mtarget, LOTMask *masks, unsigned int mask_cnt, int depth)
{
char *key = NULL;
@@ -318,7 +345,7 @@ _construct_masks(Efl_Canvas_Vg_Container *mtarget, LOTMask *masks, unsigned int
#if DEBUG
for (int i = 0; i < depth; i++) printf(" ");
- printf("%s (%p), mask => %p\n", efl_class_name_get(efl_class_get(msource)), msource, mtarget);
+ printf("%s (%p), base mask => %p\n", efl_class_name_get(efl_class_get(msource)), msource, mtarget);
depth++;
#endif
@@ -345,9 +372,8 @@ _construct_masks(Efl_Canvas_Vg_Container *mtarget, LOTMask *masks, unsigned int
#if DEBUG
for (int i = 0; i < depth; i++) printf(" ");
- printf("%s (%p), mask:%d => %p\n", efl_class_name_get(efl_class_get(msource)), msource, mask->mMode, mtarget);
+ printf("%s (%p), real mask:%d => %p\n", efl_class_name_get(efl_class_get(msource)), msource, mask->mMode, mtarget);
#endif
-
_construct_mask_nodes(msource, mask, depth + 1);
Efl_Gfx_Vg_Composite_Method mask_mode;
@@ -370,6 +396,7 @@ _construct_masks(Efl_Canvas_Vg_Container *mtarget, LOTMask *masks, unsigned int
efl_canvas_vg_node_comp_method_set(mtarget, msource, mask_mode);
mtarget = msource;
}
+ return mtarget;
}
static void
@@ -378,17 +405,17 @@ _reset_vg_tree(Efl_VG *node)
//Hide all nodes visibility
if (efl_isa(node, EFL_CANVAS_VG_CONTAINER_CLASS))
{
+ Eina_List *list = (Eina_List*) efl_canvas_vg_container_children_direct_get(node);
+ Eina_List *list2;
Efl_VG* child;
- Eina_Iterator *itr = efl_canvas_vg_container_children_get(node);
- EINA_ITERATOR_FOREACH(itr, child)
+ EINA_LIST_FOREACH(list, list2, child)
_reset_vg_tree(child);
- if (itr) eina_iterator_free(itr);
}
efl_gfx_entity_visible_set(node, EINA_FALSE);
}
static void
-_update_vg_tree(Efl_Canvas_Vg_Container *root, const LOTLayerNode *layer, int depth EINA_UNUSED)
+_update_vg_tree(Vg_File_Data *vfd, Efl_Canvas_Vg_Container *root, const LOTLayerNode *layer, int depth EINA_UNUSED)
{
if (!layer->mVisible) return;
@@ -421,9 +448,9 @@ _update_vg_tree(Efl_Canvas_Vg_Container *root, const LOTLayerNode *layer, int de
}
#if DEBUG
for (int i = 0; i < depth; i++) printf(" ");
- printf("%s (%p) matte:%d => %p\n", efl_class_name_get(efl_class_get(ctree)), ctree, matte_mode, ptree);
+ printf("%s (%p) matte:%d => %p %s\n", efl_class_name_get(efl_class_get(ctree)), ctree, matte_mode, ptree, clayer->keypath);
#endif
- _update_vg_tree(ctree, clayer, depth+1);
+ _update_vg_tree(vfd, ctree, clayer, depth+1);
if (matte_mode != 0)
{
@@ -437,6 +464,8 @@ _update_vg_tree(Efl_Canvas_Vg_Container *root, const LOTLayerNode *layer, int de
mlayer = clayer;
if (!mtarget) mtarget = ctree;
}
+ else
+ mtarget = NULL;
ptree = ctree;
@@ -464,15 +493,17 @@ _update_vg_tree(Efl_Canvas_Vg_Container *root, const LOTLayerNode *layer, int de
matte_mode = 0;
break;
}
+
+ //Construct node that have mask.
+ if (mlayer && mtarget)
+ ptree = _construct_masks(mtarget, mlayer->mMaskList.ptr, mlayer->mMaskList.size, depth + 1);
}
+ efl_key_data_set(root, "_lot_node_size", &layer->mNodeList.size);
//Construct drawable nodes.
if (layer->mNodeList.size > 0)
- _construct_drawable_nodes(root, layer, depth);
+ _construct_drawable_nodes(vfd, root, layer, depth);
- //Construct node that have mask.
- if (mlayer)
- _construct_masks(mtarget, mlayer->mMaskList.ptr, mlayer->mMaskList.size, depth);
}
#endif
@@ -487,10 +518,10 @@ _value_provider_override(Vg_File_Data *vfd)
EINA_LIST_FOREACH(vfd->vp_list, l, vp)
{
const char *keypath;
- Efl_Gfx_Vg_Value_Provider_Change_Flag flag;
- flag = efl_gfx_vg_value_provider_changed_flag_get(vp);
+ Efl_Gfx_Vg_Value_Provider_Flags flag;
+ flag = efl_gfx_vg_value_provider_updated_get(vp);
- if (flag & EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_FILL_COLOR)
+ if (flag & EFL_GFX_VG_VALUE_PROVIDER_FLAGS_FILL_COLOR)
{
int r, g, b, a;
r = g = b = a = 0;
@@ -500,7 +531,7 @@ _value_provider_override(Vg_File_Data *vfd)
lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_FILLCOLOR, (char*)keypath, r / 255.0, g / 255.0, b / 255.0);
lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_FILLOPACITY, (char*)keypath, (a / 255.0) * 100.0);
}
- if (flag & EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_STROKE_COLOR)
+ if (flag & EFL_GFX_VG_VALUE_PROVIDER_FLAGS_STROKE_COLOR)
{
int r, g, b, a;
r = g = b = a = 0;
@@ -510,7 +541,7 @@ _value_provider_override(Vg_File_Data *vfd)
lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_STROKECOLOR, (char*)keypath, r / 255.0, g / 255.0, b / 255.0);
lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_STROKEOPACITY, (char*)keypath, (a / 255.0) * 100.0);
}
- if (flag & EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_STROKE_WIDTH)
+ if (flag & EFL_GFX_VG_VALUE_PROVIDER_FLAGS_STROKE_WIDTH)
{
double w;
w = efl_gfx_vg_value_provider_stroke_width_get(vp);
@@ -518,10 +549,46 @@ _value_provider_override(Vg_File_Data *vfd)
lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_STROKEWIDTH, (char*)keypath, w);
}
- if (flag & EFL_GFX_VG_VALUE_PROVIDER_CHANGE_FLAG_TRANSFORM_MATRIX)
+ if (flag & EFL_GFX_VG_VALUE_PROVIDER_FLAGS_TRANSFORM_MATRIX)
{
- //TODO: When the lottie animation's transform property is implemented,
- // the transform property override function have to added.
+ Eina_Matrix4 m, *orig_m;
+ double tx, ty, sx, sy, radian_z, si, cs;
+
+ orig_m = efl_gfx_vg_value_provider_transform_get(vp);
+ if (!orig_m) continue;
+
+ /*
+ * NOTE: We need to impelements 3-axis transform.
+ * now lottie animation provide z projection transform.
+ * In this cace, we calcuate to T * R * S order.
+ */
+ eina_matrix4_copy(&m, orig_m);
+ keypath = efl_gfx_vg_value_provider_keypath_get(vp);
+
+ // Calc Translate
+ eina_matrix4_values_get(&m, NULL, NULL, NULL, &tx,
+ NULL, NULL, NULL, &ty,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL);
+ eina_matrix4_translate(&m, -1 * tx, -1 * ty, 0);
+
+ // Calc Rotate
+ eina_matrix4_values_get(&m, &cs, NULL, NULL, NULL,
+ &si, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL);
+ radian_z = atan2(si, cs);
+ eina_matrix4_rotate(&m, -1 * radian_z, EINA_MATRIX_AXIS_Z);
+
+ // Calc Scale
+ eina_matrix4_values_get(&m, &sx, NULL, NULL, NULL,
+ NULL, &sy, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL);
+
+ lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_TR_SCALE, (char*)keypath, 100.0 * sx, 100.0 * sy);
+ lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_TR_ROTATION, (char*)keypath, radian_z * (180.0 / M_PI));
+ lottie_animation_property_override(lot_anim, LOTTIE_ANIMATION_PROPERTY_TR_POSITION, (char*)keypath, tx, ty);
}
}
}
@@ -539,9 +606,20 @@ vg_common_json_create_vg_node(Vg_File_Data *vfd)
if (vfd->vp_list) _value_provider_override(vfd);
unsigned int frame_num = (vfd->anim_data) ? vfd->anim_data->frame_num : 0;
+
+ //This Calculates Bound Size using Raw Data
+ vfd->bl = 100000;
+ vfd->bt = 100000;
+ vfd->br = -1;
+ vfd->bb = -1;
+
+ int lot_render_w, lot_render_h;
+ lot_render_w = vfd->is_wrap?vfd->w:vfd->view_box.w;
+ lot_render_h = vfd->is_wrap?vfd->h:vfd->view_box.h;
+
const LOTLayerNode *tree =
lottie_animation_render_tree(lot_anim, frame_num,
- vfd->view_box.w, vfd->view_box.h);
+ lot_render_w, lot_render_h);
//Root node
Efl_Canvas_Vg_Container *root = vfd->root;
if (!root)
@@ -558,7 +636,11 @@ vg_common_json_create_vg_node(Vg_File_Data *vfd)
printf("%s (%p)\n", efl_class_name_get(efl_class_get(vfd->root)), vfd->root);
#endif
- _update_vg_tree(root, tree, 1);
+ _update_vg_tree(vfd, root, tree, 1);
+
+ vfd->minw = (int)(vfd->br - vfd->bl);
+ vfd->minh = (int)(vfd->bb - vfd->bt);
+
#else
return EINA_FALSE;
#endif
diff --git a/src/static_libs/vg_common/vg_common_svg.c b/src/static_libs/vg_common/vg_common_svg.c
index 526787df0d..30fc0c0eb5 100644
--- a/src/static_libs/vg_common/vg_common_svg.c
+++ b/src/static_libs/vg_common/vg_common_svg.c
@@ -498,6 +498,7 @@ _node_style_free(Svg_Style_Property *style)
eina_stringshare_del(style->fill.paint.url);
_svg_style_gradient_free(style->stroke.paint.gradient);
eina_stringshare_del(style->stroke.paint.url);
+ if (style->stroke.dash) free(style->stroke.dash);
free(style);
}
@@ -537,10 +538,15 @@ vg_common_svg_node_free(Svg_Node *node)
_svg_style_gradient_free(grad);
}
break;
+ case SVG_NODE_CUSTOME_COMMAND:
+ if (node->node.command.commands) free(node->node.command.commands);
+ if (node->node.command.points) free(node->node.command.points);
+ break;
default:
break;
}
- free(node);
+
+ free(node);
}
static Efl_VG *
@@ -757,7 +763,7 @@ _apply_vg_property(Svg_Node *node, Efl_VG *vg, Efl_VG *parent, Vg_File_Data *vg_
efl_gfx_color_set(vg, ((float) r) * fa, ((float) g) * fa, ((float) b) * fa, ((float) a) * fa);
}
- if (node->type == SVG_NODE_G) return;
+ if (node->type == SVG_NODE_G || node->type == SVG_NODE_CLIP_PATH) return;
// apply the fill style property
efl_gfx_shape_fill_rule_set(vg, style->fill.fill_rule);
@@ -765,6 +771,8 @@ _apply_vg_property(Svg_Node *node, Efl_VG *vg, Efl_VG *parent, Vg_File_Data *vg_
efl_gfx_shape_stroke_cap_set(vg, style->stroke.cap);
efl_gfx_shape_stroke_join_set(vg, style->stroke.join);
efl_gfx_shape_stroke_scale_set(vg, style->stroke.scale);
+ if (style->stroke.dash && style->stroke.dash_count > 0)
+ efl_gfx_shape_stroke_dash_set(vg, style->stroke.dash, style->stroke.dash_count);
// if stroke property is NULL then do nothing
if (style->stroke.paint.none)
@@ -821,12 +829,51 @@ _add_polyline(Efl_VG *vg, double *array, int size, Eina_Bool polygon)
}
static Efl_VG *
+_create_vg_container(Efl_VG *parent)
+{
+ if (!parent)
+ return efl_add_ref(EFL_CANVAS_VG_CONTAINER_CLASS, NULL);
+ else
+ return efl_add(EFL_CANVAS_VG_CONTAINER_CLASS, parent);
+}
+
+static Efl_VG *
vg_common_create_vg_node_helper(Svg_Node *node, Efl_VG *parent, Vg_File_Data *vg_data)
{
Efl_VG *vg = NULL;
Svg_Node *child;
Eina_List *l;
+ // apply composite node
+ if (node->style->comp.node)
+ {
+ // composite ClipPath
+ if (node->style->comp.flags & SVG_COMPOSITE_FLAGS_CLIP_PATH)
+ {
+ Svg_Node *comp_node = node->style->comp.node;
+ Efl_VG *comp_parent = NULL ,*comp_vg_container = NULL;
+
+ //NOTE:: If node has a composition node, add a container to use VG_COMPOSITION_METHOD.
+ // The composition method is applied to the newly added container.
+ comp_parent = _create_vg_container(parent);
+ comp_vg_container = _create_vg_container(parent);
+
+ // apply the transformation
+ if (comp_node->transform) efl_canvas_vg_node_transformation_set(comp_vg_container, comp_node->transform);
+
+ EINA_LIST_FOREACH(comp_node->child, l, child)
+ {
+ Efl_VG *vg = vg_common_create_vg_node_helper(child, comp_vg_container, vg_data);
+ // clippath does not require color blending. That's why we keep 255 opacity.
+ efl_gfx_color_set(vg, 255, 255, 255, 255);
+ }
+
+ // Composition matte alpha
+ efl_canvas_vg_node_comp_method_set(comp_parent, comp_vg_container, EFL_GFX_VG_COMPOSITE_METHOD_MATTE_ALPHA);
+
+ parent = comp_parent; // replace parent
+ }
+ }
switch (node->type)
{
case SVG_NODE_DOC:
diff --git a/src/tests/ecore/ecore_suite.c b/src/tests/ecore/ecore_suite.c
index b9248a814a..a0f6d19aba 100644
--- a/src/tests/ecore/ecore_suite.c
+++ b/src/tests/ecore/ecore_suite.c
@@ -30,6 +30,7 @@ static const Efl_Test_Case etc[] = {
{ "Ecore_Job", ecore_test_ecore_job },
{ "Ecore_Args", ecore_test_ecore_args },
{ "Ecore_Pipe", ecore_test_ecore_pipe },
+ { "Ecore_Evas_Selection", ecore_test_ecore_evas_selection },
{ NULL, NULL }
};
diff --git a/src/tests/ecore/ecore_suite.h b/src/tests/ecore/ecore_suite.h
index a3327412fe..2621535f59 100644
--- a/src/tests/ecore/ecore_suite.h
+++ b/src/tests/ecore/ecore_suite.h
@@ -23,5 +23,6 @@ void ecore_test_ecore_file(TCase *tc);
void ecore_test_ecore_job(TCase *tc);
void ecore_test_ecore_args(TCase *tc);
void ecore_test_ecore_pipe(TCase *tc);
+void ecore_test_ecore_evas_selection(TCase *tc);
#endif /* _ECORE_SUITE_H */
diff --git a/src/tests/ecore/ecore_test_animator.c b/src/tests/ecore/ecore_test_animator.c
index 271f9792ef..d69407bc1e 100644
--- a/src/tests/ecore/ecore_test_animator.c
+++ b/src/tests/ecore/ecore_test_animator.c
@@ -15,7 +15,7 @@ static Eina_Bool _anim_cb(void *data EINA_UNUSED, double pos)
fail_if(prev > pos);
prev = pos;
- if (pos == 1.0)
+ if (EINA_DBL_EQ(pos, 1.0))
ecore_main_loop_quit();
return EINA_TRUE;
@@ -59,7 +59,7 @@ Eina_Bool test_pos(Ecore_Pos_Map posmap, double v1, double v2, double (*testmap)
return EINA_FALSE;
}
}
- fail_if(ecore_animator_pos_map(1.0, posmap, v1, v2) != 1.0);
+ fail_if(!EINA_DBL_EQ(ecore_animator_pos_map(1.0, posmap, v1, v2), 1.0));
return EINA_TRUE;
}
diff --git a/src/tests/ecore/ecore_test_ecore_audio.c b/src/tests/ecore/ecore_test_ecore_audio.c
index 9c8a890945..6521871358 100644
--- a/src/tests/ecore/ecore_test_ecore_audio.c
+++ b/src/tests/ecore/ecore_test_ecore_audio.c
@@ -148,16 +148,16 @@ EFL_START_TEST(ecore_test_ecore_audio_obj_tone)
rate = ecore_audio_obj_in_samplerate_get(in);
fail_if(rate != 44100);
len = ecore_audio_obj_in_length_get(in);
- fail_if(len != 1);
+ fail_if(!EINA_DBL_EQ(len, 1));
ecore_audio_obj_in_length_set(in, 2.5);
len = ecore_audio_obj_in_length_get(in);
- fail_if(len != 2.5);
+ fail_if(!EINA_DBL_EQ(len, 2.5));
ecore_audio_obj_in_looped_set(in, EINA_TRUE);
len = ecore_audio_obj_in_remaining_get(in);
- fail_if(len != 2.5);
+ fail_if(!EINA_DBL_EQ(len, 2.5));
freq = (intptr_t) efl_key_data_get(in, ECORE_AUDIO_ATTR_TONE_FREQ);
fail_if(freq != 1000);
@@ -173,28 +173,28 @@ EFL_START_TEST(ecore_test_ecore_audio_obj_tone)
ck_assert_str_eq(tmp, "bar");
len = ecore_audio_obj_in_seek(in, 5.0, SEEK_SET);
- fail_if(len != -1);
+ fail_if(!EINA_DBL_EQ(len, -1));
len = ecore_audio_obj_in_seek(in, 1.0, 42);
- fail_if(len != -1);
+ fail_if(!EINA_DBL_EQ(len, -1));
len = ecore_audio_obj_in_seek(in, 1.0, SEEK_SET);
- fail_if(len != 1.0);
+ fail_if(!EINA_DBL_EQ(len, 1.0));
len = ecore_audio_obj_in_remaining_get(in);
- fail_if(len != 1.5);
+ fail_if(!EINA_DBL_EQ(len, 1.5));
len = ecore_audio_obj_in_seek(in, 1.0, SEEK_CUR);
- fail_if(len != 2.0);
+ fail_if(!EINA_DBL_EQ(len, 2.0));
len = ecore_audio_obj_in_remaining_get(in);
- fail_if(len != 0.5);
+ fail_if(!EINA_DBL_EQ(len, 0.5));
len = ecore_audio_obj_in_seek(in, -1.0, SEEK_END);
- fail_if(len != 1.5);
+ fail_if(!EINA_DBL_EQ(len, 1.5));
len = ecore_audio_obj_in_remaining_get(in);
- fail_if(len != 1.0);
+ fail_if(!EINA_DBL_EQ(len, 1.0));
out = efl_add_ref(ECORE_AUDIO_OUT_SNDFILE_CLASS, NULL);
fail_if(!out);
@@ -260,18 +260,18 @@ EFL_START_TEST(ecore_test_ecore_audio_obj_sndfile)
rate = ecore_audio_obj_in_samplerate_get(in);
fail_if(rate != 44100);
len = ecore_audio_obj_in_length_get(in);
- fail_if(len == 0);
+ fail_if(EINA_DBL_EQ(len, 0));
rem = ecore_audio_obj_in_remaining_get(in);
- fail_if(len != rem);
+ fail_if(!EINA_DBL_EQ(len, rem));
fmt = ecore_audio_obj_format_get(in);
fail_if(fmt != ECORE_AUDIO_FORMAT_OGG);
len = ecore_audio_obj_in_seek(in, 0.5, SEEK_SET);
- fail_if(len != 0.5);
+ fail_if(!EINA_DBL_EQ(len, 0.5));
len = ecore_audio_obj_in_seek(in, 1.0, SEEK_CUR);
- fail_if(len != 1.5);
+ fail_if(!EINA_DBL_EQ(len, 1.5));
len = ecore_audio_obj_in_seek(in, -1.5, SEEK_END);
fail_if(fabs(rem - 1 - len) > 0.6);
@@ -467,22 +467,22 @@ EFL_START_TEST(ecore_test_ecore_audio_obj_in)
fail_if(!freed);
speed = ecore_audio_obj_in_speed_get(in);
- fail_if(speed != 1.0);
+ fail_if(!EINA_DBL_EQ(speed, 1.0));
ecore_audio_obj_in_speed_set(in, 2.5);
speed = ecore_audio_obj_in_speed_get(in);
- fail_if(speed != 2.5);
+ fail_if(!EINA_DBL_EQ(speed, 2.5));
ecore_audio_obj_in_speed_set(in, 0);
speed = ecore_audio_obj_in_speed_get(in);
- fail_if(speed != 0.2);
+ fail_if(!EINA_DBL_EQ(speed, 0.2));
ecore_audio_obj_in_speed_set(in, 10);
speed = ecore_audio_obj_in_speed_get(in);
- fail_if(speed != 5.0);
+ fail_if(!EINA_DBL_EQ(speed, 5.0));
samplerate = ecore_audio_obj_in_samplerate_get(in);
fail_if(samplerate != 0);
@@ -509,10 +509,10 @@ EFL_START_TEST(ecore_test_ecore_audio_obj_in)
fail_if(!looped);
length = ecore_audio_obj_in_length_get(in);
- fail_if(length != 0);
+ fail_if(!EINA_DBL_EQ(length, 0));
length = ecore_audio_obj_in_remaining_get(in);
- fail_if(length != -1);
+ fail_if(!EINA_DBL_EQ(length, -1));
memset(buf, 0xaa, 10);
read = ecore_audio_obj_in_read(in, buf, 10);
@@ -573,11 +573,11 @@ EFL_START_TEST(ecore_test_ecore_audio_obj)
fail_if(!paused);
volume = ecore_audio_obj_volume_get(obj);
- fail_if(volume != 1.0);
+ fail_if(!EINA_DBL_EQ(volume, 1.0));
ecore_audio_obj_volume_set(obj, 0.5);
volume = ecore_audio_obj_volume_get(obj);
- fail_if(volume != 0.5);
+ fail_if(!EINA_DBL_EQ(volume, 0.5));
efl_unref(obj);
}
diff --git a/src/tests/ecore/ecore_test_ecore_evas.c b/src/tests/ecore/ecore_test_ecore_evas.c
index 2e53f62082..0e7b09c41b 100644
--- a/src/tests/ecore/ecore_test_ecore_evas.c
+++ b/src/tests/ecore/ecore_test_ecore_evas.c
@@ -3,6 +3,7 @@
#endif
#include <Ecore_Evas.h>
+#include <Efl_Core.h>
#include "ecore_suite.h"
@@ -70,8 +71,51 @@ EFL_START_TEST(ecore_test_ecore_evas_cocoa)
}
EFL_END_TEST
+static Eina_Value
+_verify_and_exit(void *data, const Eina_Value value, const Eina_Future *dead_future EINA_UNUSED)
+{
+ ck_assert_ptr_eq(eina_value_type_get(&value), EINA_VALUE_TYPE_CONTENT);
+ Eina_Content *content = eina_value_to_content(&value);
+ Eina_Content *reference = data;
+
+ ck_assert_int_eq(eina_content_data_get(content).len, eina_content_data_get(reference).len);
+ ck_assert_str_eq(eina_content_data_get(content).mem, eina_content_data_get(reference).mem);
+ ck_assert_str_eq(eina_content_type_get(content), eina_content_type_get(reference));
+
+ efl_loop_quit(efl_main_loop_get(), eina_value_int_init(0));
+
+ return EINA_VALUE_EMPTY;
+}
+
+EFL_START_TEST(ecore_test_ecore_evas_fallback_selection)
+{
+ Ecore_Evas *ee;
+ ecore_evas_init();
+
+ ee = ecore_evas_buffer_new(WINDOW_WIDTH, WINDOW_HEIGHT);
+ fail_if(ee == NULL);
+
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ ck_assert_int_eq(ecore_evas_selection_exists(ee, 0, i), EINA_FALSE);
+ }
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL("asdf"), "text/plain");
+ Eina_Content *ref = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL("asdf"), "text/plain");
+ ecore_evas_selection_set(ee, 0, ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER, content);
+
+ const char *types[] = {eina_stringshare_add("text/plain")};
+
+ Eina_Future *f = ecore_evas_selection_get(ee, 0, ECORE_EVAS_SELECTION_BUFFER_SELECTION_BUFFER, EINA_C_ARRAY_ITERATOR_NEW(types));
+ ck_assert_ptr_ne(f, NULL);
+ eina_future_then(f, _verify_and_exit, ref);
+ efl_task_run(efl_main_loop_get());
+ ecore_evas_shutdown();
+}
+EFL_END_TEST
+
void ecore_test_ecore_evas(TCase *tc)
{
tcase_add_test(tc, ecore_test_ecore_evas_associate);
tcase_add_test(tc, ecore_test_ecore_evas_cocoa);
+ tcase_add_test(tc, ecore_test_ecore_evas_fallback_selection);
}
diff --git a/src/tests/ecore/ecore_test_ecore_evas_selection.c b/src/tests/ecore/ecore_test_ecore_evas_selection.c
new file mode 100644
index 0000000000..9efc5fe722
--- /dev/null
+++ b/src/tests/ecore/ecore_test_ecore_evas_selection.c
@@ -0,0 +1,89 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Ecore_Evas.h>
+#include <Efl_Core.h>
+
+#include "ecore_suite.h"
+
+#define WINDOW_HEIGHT 200
+#define WINDOW_WIDTH 200
+
+static int log_abort;
+static int log_abort_level;
+
+void
+fail_on_errors_teardown(void)
+{
+ eina_log_abort_on_critical_set(log_abort);
+ eina_log_abort_on_critical_level_set(log_abort_level);
+}
+
+void
+fail_on_errors_setup(void)
+{
+ log_abort = eina_log_abort_on_critical_get();
+ log_abort_level = eina_log_abort_on_critical_level_get();
+ eina_log_abort_on_critical_level_set(2);
+ eina_log_abort_on_critical_set(1);
+}
+
+static Ecore_Evas *ee;
+
+void
+_setup(void)
+{
+ ecore_evas_init();
+ ee = ecore_evas_buffer_new(50, 50);
+}
+
+void
+_teardown(void)
+{
+ ecore_evas_free(ee);
+ ecore_evas_shutdown();
+}
+
+EFL_START_TEST(ecore_test_selection_get_twice)
+{
+ //this is just running this and checking that we do not error
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ if (i == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER) continue;
+ const char *types[] = {eina_stringshare_add("text/plain")};
+ ck_assert_ptr_ne(ecore_evas_selection_get(ee, 0, i, EINA_C_ARRAY_ITERATOR_NEW(types)), NULL);
+ }
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ if (i == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER) continue;
+ const char *types[] = {eina_stringshare_add("text/plain")};
+ ck_assert_ptr_ne(ecore_evas_selection_get(ee, 0, i, EINA_C_ARRAY_ITERATOR_NEW(types)), NULL);
+ }
+}
+EFL_END_TEST
+
+EFL_START_TEST(ecore_test_selection_claim_twice)
+{
+ //this is just running this and checking that we do not error
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ if (i == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER) continue;
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL("asdf"), "text/plain");
+ ck_assert_int_eq(ecore_evas_selection_set(ee, 0, i, content), EINA_TRUE);
+ }
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ if (i == ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER) continue;
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL("asdf"), "text/plain");
+ ck_assert_int_eq(ecore_evas_selection_set(ee, 0, i, content), EINA_TRUE);
+ }
+}
+EFL_END_TEST
+void ecore_test_ecore_evas_selection(TCase *tc)
+{
+ tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown);
+ tcase_add_checked_fixture(tc, _setup, _teardown);
+ tcase_add_test(tc, ecore_test_selection_get_twice);
+ tcase_add_test(tc, ecore_test_selection_claim_twice);
+}
diff --git a/src/tests/ecore/ecore_test_ecore_thread_eina_thread_queue.c b/src/tests/ecore/ecore_test_ecore_thread_eina_thread_queue.c
index be5c3cdd1e..a2dfe55993 100644
--- a/src/tests/ecore/ecore_test_ecore_thread_eina_thread_queue.c
+++ b/src/tests/ecore/ecore_test_ecore_thread_eina_thread_queue.c
@@ -499,7 +499,7 @@ th61_do(void *data EINA_UNUSED, Ecore_Thread *th)
}
eina_semaphore_release(&th6_sem, 1);
- if (DEBUG) printf("%s: message sending done!\n", __FUNCTION__);
+ if (DEBUG) printf("%s: message sending done!\n", __func__);
}
static void
@@ -515,7 +515,7 @@ th62_do(void *data EINA_UNUSED, Ecore_Thread *th)
msg = eina_thread_queue_wait(thq1, &ref);
fail_if(!msg);
- if (DEBUG) printf("%s: v %08i: %i [%i]\n", __FUNCTION__, cnt, msg->value, eina_thread_queue_pending_get(thq1));
+ if (DEBUG) printf("%s: v %08i: %i [%i]\n", __func__, cnt, msg->value, eina_thread_queue_pending_get(thq1));
val = msg->value;
eina_thread_queue_wait_done(thq1, ref);
if (val == EXIT_MESSAGE || (ecore_thread_check(th))) break;
@@ -529,7 +529,7 @@ th62_do(void *data EINA_UNUSED, Ecore_Thread *th)
ck_assert_int_eq(msgnum, 100);
eina_spinlock_release(&msgnum_lock);
eina_semaphore_release(&th6_sem, 1);
- if (DEBUG) printf("%s: message reading done!\n", __FUNCTION__);
+ if (DEBUG) printf("%s: message reading done!\n", __func__);
}
static void
@@ -545,7 +545,7 @@ th63_do(void *data EINA_UNUSED, Ecore_Thread *th)
msg = eina_thread_queue_wait(thq1, &ref);
fail_if(!msg);
- if (DEBUG) printf("%s: v %08i: %i [%i]\n", __FUNCTION__, cnt, msg->value, eina_thread_queue_pending_get(thq1));
+ if (DEBUG) printf("%s: v %08i: %i [%i]\n", __func__, cnt, msg->value, eina_thread_queue_pending_get(thq1));
val = msg->value;
eina_thread_queue_wait_done(thq1, ref);
if (val == EXIT_MESSAGE || (ecore_thread_check(th))) break;
@@ -559,7 +559,7 @@ th63_do(void *data EINA_UNUSED, Ecore_Thread *th)
ck_assert_int_eq(msgnum, 100);
eina_spinlock_release(&msgnum_lock);
eina_semaphore_release(&th6_sem, 1);
- if (DEBUG) printf("%s: message reading done!\n", __FUNCTION__);
+ if (DEBUG) printf("%s: message reading done!\n", __func__);
}
EFL_START_TEST(ecore_test_ecore_thread_eina_thread_queue_t6)
diff --git a/src/tests/ecore/ecore_test_timer.c b/src/tests/ecore/ecore_test_timer.c
index b295738e35..caaa643f55 100644
--- a/src/tests/ecore/ecore_test_timer.c
+++ b/src/tests/ecore/ecore_test_timer.c
@@ -60,11 +60,11 @@ _timer2_cb(void *data)
// check set new interval for timer 1
ecore_timer_interval_set(timer->timer1, timer->interval_1[timer->num_elem]);
- fail_if(timer->interval_1[timer->num_elem] != ecore_timer_interval_get(timer->timer1), "Error set new interval");
+ fail_if(!EINA_DBL_EQ(timer->interval_1[timer->num_elem], ecore_timer_interval_get(timer->timer1)), "Error set new interval");
// check set new precision
ecore_timer_precision_set(timer->precision[timer->num_elem]);
- fail_if(timer->precision[timer->num_elem] != ecore_timer_precision_get(), "Error set new precision");
+ fail_if(!EINA_DBL_EQ(timer->precision[timer->num_elem], ecore_timer_precision_get()), "Error set new precision");
// check removal timer 2
if (ecore_timer_del(timer->timer2))
diff --git a/src/tests/ecore/efl_app_test_promise.c b/src/tests/ecore/efl_app_test_promise.c
index e1a74d6ab5..2390e29e1f 100644
--- a/src/tests/ecore/efl_app_test_promise.c
+++ b/src/tests/ecore/efl_app_test_promise.c
@@ -775,6 +775,34 @@ EFL_START_TEST(efl_test_promise_future_all)
}
EFL_END_TEST
+EFL_START_TEST(efl_test_promise_future_all_iterator)
+{
+ Eina_Future *futures[11];
+ Eina_Iterator *it;
+ unsigned int i, futures_called = 0, len = EINA_C_ARRAY_LENGTH(futures);
+
+ fail_if(!ecore_init());
+ for (i = 0; i < len; i++)
+ {
+ Eina_Future *f;
+ if (i % 2 == 0)
+ f = _str_future_get();
+ else
+ f = _int_future_get();
+ fail_if(!f);
+ futures[i] = eina_future_then(f, _future_all_count, &futures_called);
+ fail_if(!futures[i]);
+ }
+
+ it = EINA_C_ARRAY_ITERATOR_NEW(futures);
+ fail_if(!eina_future_then(eina_future_all_iterator(it), _all_cb, &len));
+
+ ecore_main_loop_begin();
+ ecore_shutdown();
+ fail_if(futures_called != len);
+}
+EFL_END_TEST
+
EFL_START_TEST(efl_test_promise_future_race)
{
Race_Ctx ctx = { 0 };
@@ -784,7 +812,6 @@ EFL_START_TEST(efl_test_promise_future_race)
2.0, 1.0, 0.5, 0.1, 4.5, 2.3, 5.6, 1.0, 0.5, 0.3
};
- srand(time(NULL));
fail_if(!ecore_init());
for (i = 0; i < len - 1; i++)
{
@@ -1075,19 +1102,19 @@ EFL_START_TEST(efl_test_promise_log)
fail_if(domain < 0);
eina_log_domain_level_set(PROMISE_LOG_DOMAIN_STR, EINA_LOG_LEVEL_DBG);
ctx.dbg = (Eina_Future_Cb_Log_Desc){"dbg prefix:", " dbg suffix", __FILE__,
- __FUNCTION__, EINA_LOG_LEVEL_DBG,
+ __func__, EINA_LOG_LEVEL_DBG,
domain, __LINE__};
ctx.crit = (Eina_Future_Cb_Log_Desc){NULL, NULL, __FILE__,
- __FUNCTION__, EINA_LOG_LEVEL_CRITICAL,
+ __func__, EINA_LOG_LEVEL_CRITICAL,
domain, __LINE__};
ctx.warn = (Eina_Future_Cb_Log_Desc){"warn prefix:", NULL, __FILE__,
- __FUNCTION__, EINA_LOG_LEVEL_WARN,
+ __func__, EINA_LOG_LEVEL_WARN,
domain, __LINE__};
ctx.err = (Eina_Future_Cb_Log_Desc){NULL, " err suffix", __FILE__,
- __FUNCTION__, EINA_LOG_LEVEL_ERR,
+ __func__, EINA_LOG_LEVEL_ERR,
domain, __LINE__};
ctx.info = (Eina_Future_Cb_Log_Desc){"info prefix:", " info suffix",
- __FILE__, __FUNCTION__, EINA_LOG_LEVEL_INFO,
+ __FILE__, __func__, EINA_LOG_LEVEL_INFO,
domain, __LINE__};
eina_log_print_cb_set(_log_test, &ctx);
f = eina_future_chain(_int_future_get(),
@@ -1446,6 +1473,7 @@ void efl_app_test_promise(TCase *tc)
tcase_add_test(tc, efl_test_promise_future_convert);
tcase_add_test(tc, efl_test_promise_future_easy);
tcase_add_test(tc, efl_test_promise_future_all);
+ tcase_add_test(tc, efl_test_promise_future_all_iterator);
tcase_add_test(tc, efl_test_promise_future_race);
tcase_add_test(tc, efl_test_promise_future_ignore_error);
tcase_add_test(tc, efl_test_promise_future_success);
diff --git a/src/tests/ecore/meson.build b/src/tests/ecore/meson.build
index 9ce6848ce2..48c9350638 100644
--- a/src/tests/ecore/meson.build
+++ b/src/tests/ecore/meson.build
@@ -13,6 +13,7 @@ ecore_suite_src = [
'ecore_test_job.c',
'ecore_test_args.c',
'ecore_test_pipe.c',
+ 'ecore_test_ecore_evas_selection.c',
'ecore_suite.h'
]
diff --git a/src/tests/ecore_con/ecore_con_test_ecore_con.c b/src/tests/ecore_con/ecore_con_test_ecore_con.c
index 45d5671afc..7a6333fa0e 100644
--- a/src/tests/ecore_con/ecore_con_test_ecore_con.c
+++ b/src/tests/ecore_con/ecore_con_test_ecore_con.c
@@ -43,7 +43,7 @@ _add(void *data, int type EINA_UNUSED, void *ev)
ecore_con_client_timeout_set(event->client, timeout_val);
ret = ecore_con_client_timeout_get(event->client);
- fail_if (ret != timeout_val);
+ fail_if (!EINA_DBL_EQ(ret, timeout_val));
ecore_con_client_data_set(event->client, cdata);
del_data = ecore_con_client_data_get(event->client);
@@ -243,7 +243,7 @@ void _ecore_con_server_client_tests(Ecore_Con_Type compl_type, const char *name,
ecore_con_server_timeout_set(server, timeout_val);
timeout_ret = ecore_con_server_timeout_get(server);
- fail_if (timeout_ret != timeout_val);
+ fail_if (!EINA_DBL_EQ(timeout_ret, timeout_val));
ret = ecore_con_server_port_get(server);
fail_if (ret != server_port);
diff --git a/src/tests/ecore_con/server.key b/src/tests/ecore_con/server.key
index 922b0f74f8..86c03e3749 100644
--- a/src/tests/ecore_con/server.key
+++ b/src/tests/ecore_con/server.key
@@ -1,15 +1,51 @@
-----BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDPM7htA+kHL37qJQOLK3CYP4x9mqCcYy4m4GvT+yn5b4IRqi1x
-iH0F+/A+hvG4EE/iamNsnM7uJ1bixw/BCya+m9EfE5qzQvZuU+6AN73D+nMXcgBd
-4TTjfF8MD340a1Tn3RRVOx1hdSuuN61wpIFT/sn/dfTaVzD/UnMWj+AdBQIDAQAB
-AoGAYc6wSAWIgnPRHQXL3m3rAHM/BitvlWLb7k4RmEb/UVdptpz2Rpl/Ksv6ZAmf
-IJvSmbZOqH58z76SLQp6TU3OQ2IBikHo8+C+RgPWptBDlgYO57zGz4ee28tImqV/
-quxNE+TM9EBJDAhGA0ySaiQcdfOOErzRQvcFSTE2ie9LjAECQQDvUmMzsYhEEb8B
-RS7ASYNUFihBPprZh+/qhJeF37kK7t1g2zk5gwfEo2W9926DiKicpvX1/hxgKOwb
-ZpZuhRAhAkEA3aRNBnrDPo+gaP+wV4Z410+laW/myqbEN9l6tcGQqRZmOXw6jEAm
-Cq5zngIVibaVZ4g052c4PHl51txYoEjAZQJBAM4He2exWsJfFLSfPpRDtU/ak2U3
-5E+Je73F0DxsUf1bjjIoCKe+ah2bHafhL78FE0NpaS4RSZRvJnSgaLlUzIECQB5H
-SMJ+2NdeFaLiczuxwiZf2hAKWnQKzjl2+12DIPkId1SZFQJ97PR+morWbAzRJZ3s
-LJYEMtmIGs3wcicLaUUCQFBmyP238jX58ixYd7crJdnxPnTvOtasQqb8cPJ9XSyT
-ara6m96iiQSvqXObtmRl6oGCWGw8q821iJYHKFD0ls4=
+MIIJKQIBAAKCAgEA2svUB05diaDegs3TXaOudOhV/3spn7zwYERJUiuY9W5o58bZ
+gyiLnyBhl7Nh7/Yz8SpJ/zvoakIU2o6he/MKkCOCVIJtPZMC75HSGglBJ2dSf2nu
+n3U7c/h/5isJlz4+W49EszA41iRVS2Om2kttxoS01j1TOSmpDO9IfCPO9xeCI9Vs
+MXNjpzhmENpWtTGqxNn6PNyeVp+PEZMjAN5pBFFTajY1qBvr8ResMpb+nf69IPCA
+BzDWhZOoPNNfiv0d/4jiHsDUl0zsR9Z6g7gUfWbzMDd1D15btSdgw+/ehuWCx7Qa
+L2K/QI7BtdM5zeVfQ63prmnhkUytQ51gJ1CB3/RhoT8D3iPPwxjV9fl1kUFP9zxD
+c23CfQ283MZNnA9n3aC+LP+iuO6aYGUImV9c37kuO94SM9DLkVK94b49n7czNqru
+qsJ9A0zeDuAqPvbKcHx4cS7JE5TXU4+NylH3cCGCZIdU2Ykkjq4wSjTGsZMItD7f
+N/4gIS0kmMJi7bod4OkZjJkglHSWJwHnZklqHFI1TRMMPdw+hRXQ7CEkhOZUaYtb
+pNIP/UhqygOuSyBChBkdeSdzm2Z3SKAA+xOJNERKreTMjArDi910ow3HMgjn2qhz
+OgVgTpWlhBUnhuEXUcy/xTCRJxa6mQoiyimw4mWJwqQrNADsDlgAg667IakCAwEA
+AQKCAgEAzdbk6tq29Tv7GmQ5becHwcSy42AjkLxYCLk1obCSfpQY7bUN/W6vrEzy
+g52njfG6fDCk3RKnXRA+Pj/hfJLyZRiDDK6Hx13/bRNq7kO2oDN8UZJ/hFTuUfR/
+nzLuGvPcBpeKsmmzjwMvm3VtDAHajOFcoBGhsi2XdSvIrcGifKQJM10eJIfCQRe2
+LjS7TkwjtH6+BXQpIqWKG6apT6/ubLl2GH5XjIh4OKFkx1N2x31YwRyB1kIEEDcS
+F+dkA4aOKlHFKdmQJ6eewxbsu+76l9+6+qmx33uOG6eoSa3pVE+n8elmmR31f+7O
+HxlRUHtyXGHJbuT96YyRlQMB6vq6sxG8OEzND/h8mnc8JgOgKoP0MO+ZmJRuw1Q+
+IsoeOhNpOpi/7zWcoh7jXf1FjfyoxaVWGQoKDlPEOnXmZfu8NOD3YTYlqp2rqHn9
+mmJG4OIrlGMyWvDM3DOTV3RBSjy1wjNGkbti6E7sH4Qi1hgx5pGiosp1AEF9qcND
+0YrNooZIiBvhnzQkLDMEHyJANDPH7Hf9cH7UHfjx+lDtcRzA3ZcS9/vnL3RAZKRq
+xMSAR9Y94N8Aek7EU71Zg3s9Psn4cq20zeRtu41fatrt2PVUsWXNi5IKvywttPBt
+QQe1AVDRjabi9TTS27z77yfyIyUGMECwZulzS0+RBtjS0gJTmYECggEBAPXV2h0e
+EIHiBn0wcVwZtBbl/0wJlf0bb+JKNRrGrG1lC53nUTBKbCMy97E58IbDBsF1iZ3S
+62QlSQinkOoJEQEm90/nahYWIUbTxLQen0TiAFv3elkR63k0ki7GkY0zsHAptvIk
+yv9qD7NmyFEMfw/7rIkPfbvjz9ENd/IMgbTk3alTQpLjWOZiYDxU5EIE1Kdv39YC
+e3Ji6VT7JGhyMLpmKiVMAacsYNIbHccnnxIT61dhbmeDF8emhbcqvasteIWIQLmh
+NRn3aFjUojqbLGBfOh4vQly/5NPSP41+ZWLtrUSV88gjhUhuswUdBVDQD3dCQ7kM
+sZzvrPDGiT9an00CggEBAOPXxNYTQcSN9g6D4Y44OvO+rwMmIjTdj5DAlcPnYSkF
+yO9MJX6UW0up2uXzFaeDFamDn3uopPEKRYYKG/B2p+aowT4Z80xYxggkDDDBxTEs
+3r5BITS/tK25XP/Q5N80fYVlz58iKCxwIXDUOiEUDaB5y8Qx8ArnzSdrPunq8bvm
+rO8mmrd3/carR9up/5qpI+0pxZwmtE8E4g+Grt3KkTDPqLup4ZEyXSol6ie2J1yE
+Ig3C+pORXxvBHOgaZE6349hfIJDuBZ0UUT9dllHFH1uKx83EvjLSCLTDFc6Njo1D
+qFmXWWW8yOcCzg3rUNNCU2rFr+e40E4C/0YaRyTZVc0CggEAQPJId1zT+5xdHoHH
+0Q8xVsNYmRwHNiEjg+Ma+IH4V8ZUNVlBR8LBouL6MSYfd1ra1A1bWAi7C3AWRWUP
+keTnSyiiOcfnbQJXtECKPRPB/A7BDYrqFdH4JcNPw2/OUEGRoXBD1uEFiEja8Qh8
+b30frHdO877V9ueOpaorQBUxxzqXnP5UHj5V5DelOQssaoygKcQSnJV3S5b6Eetv
+iPByEyyegc/8t8+vnJJxYYYELmB40lL5OfuWMra5qNRv22Nd7dk7UE9Ymg2U0bML
+UPRh2uwNjJ/rpllD+PoYtCbqXiJwnigHiZ5oveQRA47RMrJlA5rMDX1fBxkC1XF+
+HPCyGQKCAQEA0bkaCUeegTN/K2s/oq6lrRl3dTmTwP+0l7R95t7Dc4RMqeB4nuQm
+iSYnRQUViKTDus5abfQVJ36h8ji58QT3lfz+K5CtgDgyyOmNgw/J2HMJ8Sx4SVqx
+EDwQm7UIB2EErVbC3yMMwaLRVU801p/jzzRtWQHyh8dI8yDnv1+w9Znm0xfA0GKV
+6VpeAZegnRdV54dMy2hhDl9bSplZuvQr4zcyhNNhu0oVsadGuxkTcDh8NBimmFD2
+r9B5MDii3kasZs1hZ6aA6k76Xo5hwJDnRVcghYq03Iiy1NjB6OgqMGP3wcfr1RcK
+AoJ1cyCIvH1P1Xd0bKKUs0pU+Y1UsVmQfQKCAQBP1o9KH1THHdsyaWhrXOKYxm68
+TsrWXVCzG30so0rrqOlcsvdBwE+VdbiqP3U6mwTyNH3jYNGytW9en6wLg7O9hSdM
+j1xz2ukKThrFRwyAueURQvnXVqhWr/kj/SSZ20mxr4j8FcgXi8Cp7RC/3XSu+wHi
+6sAgjSz1+B9f4NVVaTXe0AcC8HhMMh9j0uSYT9L/Oxt82rS/+SoRVVgYk3dL1pAr
+FWfJ0Sx/OxzNlaBkLD5x0ydxouTaCNdI6Uq1fJyav8KN8F1mdo1TutgMGZ/bpkuY
+GyVj/Sd8s5QMt+80cEhvQNBrRLkbU8CGP/s51CyM0i+kb4r9SfLGyGZUp5XC
-----END RSA PRIVATE KEY-----
diff --git a/src/tests/ecore_con/server.pem b/src/tests/ecore_con/server.pem
index 84e8de3a27..4169bbe249 100644
--- a/src/tests/ecore_con/server.pem
+++ b/src/tests/ecore_con/server.pem
@@ -1,14 +1,29 @@
-----BEGIN CERTIFICATE-----
-MIICOTCCAaICCQDQ5umIhrgBUDANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJJ
-TjEMMAoGA1UECAwDS2FyMRIwEAYDVQQHDAlCZW5nYWx1cnUxDDAKBgNVBAoMA0VG
-TDEOMAwGA1UECwwFRWNvcmUxEjAQBgNVBAMMCTEyNy4wLjAuMTAeFw0xNTAyMTIw
-NDIxMDVaFw0xNjAyMTIwNDIxMDVaMGExCzAJBgNVBAYTAklOMQwwCgYDVQQIDANL
-YXIxEjAQBgNVBAcMCUJlbmdhbHVydTEMMAoGA1UECgwDRUZMMQ4wDAYDVQQLDAVF
-Y29yZTESMBAGA1UEAwwJMTI3LjAuMC4xMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQDPM7htA+kHL37qJQOLK3CYP4x9mqCcYy4m4GvT+yn5b4IRqi1xiH0F+/A+
-hvG4EE/iamNsnM7uJ1bixw/BCya+m9EfE5qzQvZuU+6AN73D+nMXcgBd4TTjfF8M
-D340a1Tn3RRVOx1hdSuuN61wpIFT/sn/dfTaVzD/UnMWj+AdBQIDAQABMA0GCSqG
-SIb3DQEBCwUAA4GBALgUu21Ihj6W2/tagmV7Iwt4LJndnIJP1IINUrLptkH1vE4B
-4p7uHxtRp7fQpOOl2ns1JhJabgHUjXLCPfjsZ1YS5YgTqs9IaiyqjYZDgCusSvrJ
-eJXeNVLWMb6iHgW0zsEDv9Vl1/XyBk9koyP0/stWw+JFxKqMJGCen5dRPQLZ
+MIIFCzCCAvOgAwIBAgIUDmHavzTMWMRMlwwxZ2mmUlqDuvwwDQYJKoZIhvcNAQEL
+BQAwFDESMBAGA1UEAwwJMTI3LjAuMC4xMCAXDTIwMDUxMTE0NTI1OFoYDzIxMjAw
+NDE3MTQ1MjU4WjAUMRIwEAYDVQQDDAkxMjcuMC4wLjEwggIiMA0GCSqGSIb3DQEB
+AQUAA4ICDwAwggIKAoICAQDay9QHTl2JoN6CzdNdo6506FX/eymfvPBgRElSK5j1
+bmjnxtmDKIufIGGXs2Hv9jPxKkn/O+hqQhTajqF78wqQI4JUgm09kwLvkdIaCUEn
+Z1J/ae6fdTtz+H/mKwmXPj5bj0SzMDjWJFVLY6baS23GhLTWPVM5KakM70h8I873
+F4Ij1Wwxc2OnOGYQ2la1MarE2fo83J5Wn48RkyMA3mkEUVNqNjWoG+vxF6wylv6d
+/r0g8IAHMNaFk6g801+K/R3/iOIewNSXTOxH1nqDuBR9ZvMwN3UPXlu1J2DD796G
+5YLHtBovYr9AjsG10znN5V9DremuaeGRTK1DnWAnUIHf9GGhPwPeI8/DGNX1+XWR
+QU/3PENzbcJ9Dbzcxk2cD2fdoL4s/6K47ppgZQiZX1zfuS473hIz0MuRUr3hvj2f
+tzM2qu6qwn0DTN4O4Co+9spwfHhxLskTlNdTj43KUfdwIYJkh1TZiSSOrjBKNMax
+kwi0Pt83/iAhLSSYwmLtuh3g6RmMmSCUdJYnAedmSWocUjVNEww93D6FFdDsISSE
+5lRpi1uk0g/9SGrKA65LIEKEGR15J3ObZndIoAD7E4k0REqt5MyMCsOL3XSjDccy
+COfaqHM6BWBOlaWEFSeG4RdRzL/FMJEnFrqZCiLKKbDiZYnCpCs0AOwOWACDrrsh
+qQIDAQABo1MwUTAdBgNVHQ4EFgQUqAAeGRlK+EEJnFgmUPMWqhEljB8wHwYDVR0j
+BBgwFoAUqAAeGRlK+EEJnFgmUPMWqhEljB8wDwYDVR0TAQH/BAUwAwEB/zANBgkq
+hkiG9w0BAQsFAAOCAgEAfpth2MmJdDhHZEfGkBq7pBbi7KPBZTI8calS0Cplxwwy
+11ocEBJcDBH4xIufwfzkRfXiJuV6zo7jY3hKBcbqI0HpMfu3g/+IFxH1uOdubbzF
+DGMUaYS6s0xZ+n2WILD0X2LnwHzvVNDnH8nkwYVb7MN7sMCPG0g1R+HUeT/dyu1K
+k8q4xEpgSpQCwufWdgm6Z3lxLMfU6TJW3fDRUMkFK4dado3dyc4cSgRy60qcNGCt
+e+ETLQA2sDCxG11OehmRCgSVBlRm8n32jjFL9aRQKFX78PvjRTTYLoemi5yXnJZz
+PWwYZy1KA37cquLofh7ScIci5FXXumUatDTHPNYLM0pnUo7lI70w5f6Jmd9fwMqk
+xDxVFtZTXvjAKt6u+Uk5IgCWMD7lICU3Cw7EYGY7II4bayzPgnr/Ep/qgzfkb4w0
+ncTEDICNmpylDv+bj+3qjGu9rwEgbuEuTyoFNfFhBNW/nCGRe1ciVgqKfX81c4jy
+sDbCEAlAQe03FCOWFlMdzqm0W1zW6764OgxkNafjnwzSwt9yfCJH0xqzIeaF83nL
+ca0jgPFin6V8dwS4WMb5owFtQASZENqZTNnfuk2ImSxSA22LD9hWtH/PwSF762AR
+phjye/pZIp6MMrr5/DT3HjAAyguz8h6tnrvIlsLS0tvtLu2chqfEbUoZA/MTF14=
-----END CERTIFICATE-----
diff --git a/src/tests/ecore_wl2/ecore_wl2_suite.c b/src/tests/ecore_wl2/ecore_wl2_suite.c
index b6875c006d..9418de14c4 100644
--- a/src/tests/ecore_wl2/ecore_wl2_suite.c
+++ b/src/tests/ecore_wl2/ecore_wl2_suite.c
@@ -1,10 +1,4 @@
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
#include "ecore_wl2_suite.h"
-#include "../efl_check.h"
-#include <Ecore_Wl2.h>
static const Efl_Test_Case etc[] =
{
@@ -13,6 +7,7 @@ static const Efl_Test_Case etc[] =
{ "Display", ecore_wl2_test_display },
{ "Window", ecore_wl2_test_window },
{ "Input", ecore_wl2_test_input },
+ { "Output", ecore_wl2_test_output },
#endif
{ NULL, NULL }
};
diff --git a/src/tests/ecore_wl2/ecore_wl2_suite.h b/src/tests/ecore_wl2/ecore_wl2_suite.h
index a8edf93074..111b388f28 100644
--- a/src/tests/ecore_wl2/ecore_wl2_suite.h
+++ b/src/tests/ecore_wl2/ecore_wl2_suite.h
@@ -1,12 +1,21 @@
#ifndef _ECORE_WL2_SUITE_H
# define _ECORE_WL2_SUITE_H
-# include <check.h>
-# include "../efl_check.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <check.h>
+#include "../efl_check.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <Ecore.h>
+#include <Ecore_Wl2.h>
void ecore_wl2_test_init(TCase *tc);
void ecore_wl2_test_display(TCase *tc);
void ecore_wl2_test_window(TCase *tc);
void ecore_wl2_test_input(TCase *tc);
+void ecore_wl2_test_output(TCase *tc);
#endif
diff --git a/src/tests/ecore_wl2/ecore_wl2_test_display.c b/src/tests/ecore_wl2/ecore_wl2_test_display.c
index 99b441b433..3c6dfeb394 100644
--- a/src/tests/ecore_wl2/ecore_wl2_test_display.c
+++ b/src/tests/ecore_wl2/ecore_wl2_test_display.c
@@ -1,16 +1,12 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#include <Eina.h>
-#include <Ecore.h>
-#include <Ecore_Wl2.h>
-
#include "ecore_wl2_suite.h"
#include "ecore_wl2_tests_helpers.h"
+static Ecore_Wl2_Display *
+_display_setup(void)
+{
+ return ecore_wl2_display_create(NULL);
+}
+
EFL_START_TEST(wl2_display_create)
{
Ecore_Wl2_Display *disp;
@@ -177,6 +173,118 @@ EFL_START_TEST(wl2_display_compositor_version_get)
}
EFL_END_TEST
+Ecore_Wl2_Input *test_input;
+
+static Eina_Bool
+_test_input_find_configure_complete(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Test_Data *td = data;
+
+ /* NB: Enlightenment uses "seat0" here, but Weston uses "default" */
+ if (getenv("E_START"))
+ test_input = ecore_wl2_display_input_find_by_name(td->display, "seat0");
+ else
+ test_input = ecore_wl2_display_input_find_by_name(td->display, "default");
+
+ ck_assert(test_input != NULL);
+ test_input = NULL;
+
+ if (getenv("E_START"))
+ {
+ test_input = ecore_wl2_display_input_find(td->display, 13);
+ ck_assert(test_input != NULL);
+ }
+
+ ecore_main_loop_quit();
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_display_input_find)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ td->handler = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE,
+ _test_input_find_configure_complete, td);
+
+ ecore_main_loop_begin();
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+
+EFL_END_TEST
+
+EFL_START_TEST(wl2_display_flush)
+{
+ Ecore_Wl2_Display *disp;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ //FIXME: Ambiguous way to check with code to make sure flushing was successful.
+ // We might think it's being verified by another TC that actually draws to the screen buffer ...
+ ecore_wl2_display_flush(disp);
+}
+EFL_END_TEST
+
+static Eina_Bool
+_test_sync_done(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Test_Data *td = data;
+ Eina_Bool ret;
+
+ ret = ecore_wl2_display_sync_is_done(td->display);
+
+ fail_if(ret == EINA_FALSE);
+
+ ecore_main_loop_quit();
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_display_sync_is_done)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ ecore_event_handler_add(ECORE_WL2_EVENT_SYNC_DONE,
+ _test_sync_done, td);
+
+ ecore_main_loop_begin();
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
void
ecore_wl2_test_display(TCase *tc)
{
@@ -197,10 +305,16 @@ ecore_wl2_test_display(TCase *tc)
tcase_add_test(tc, wl2_display_disconnect);
tcase_add_test(tc, wl2_display_registry_get);
tcase_add_test(tc, wl2_display_shm_get);
- tcase_add_test(tc, wl2_display_dmabuf_get);
tcase_add_test(tc, wl2_display_globals_get);
- tcase_add_test(tc, wl2_display_screen_size_get);
tcase_add_test(tc, wl2_display_inputs_get);
tcase_add_test(tc, wl2_display_compositor_version_get);
+ tcase_add_test(tc, wl2_display_input_find);
+ tcase_add_test(tc, wl2_display_flush);
+ tcase_add_test(tc, wl2_display_sync_is_done);
+ if (!getenv("E_START"))
+ {
+ tcase_add_test(tc, wl2_display_dmabuf_get);
+ tcase_add_test(tc, wl2_display_screen_size_get);
+ }
}
}
diff --git a/src/tests/ecore_wl2/ecore_wl2_test_ecore_wl2.c b/src/tests/ecore_wl2/ecore_wl2_test_ecore_wl2.c
index 6ed6b7343f..ce452abd89 100644
--- a/src/tests/ecore_wl2/ecore_wl2_test_ecore_wl2.c
+++ b/src/tests/ecore_wl2/ecore_wl2_test_ecore_wl2.c
@@ -1,14 +1,3 @@
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-
-#include <Eina.h>
-#include <Ecore.h>
-#include <Ecore_Wl2.h>
-
#include "ecore_wl2_suite.h"
EFL_START_TEST(ecore_wl2_simple)
@@ -16,8 +5,19 @@ EFL_START_TEST(ecore_wl2_simple)
}
EFL_END_TEST
+EFL_START_TEST(wl2_session_recovery_disable)
+{
+ //FIXME: Need some discussion about how to validate this API in TC.
+ ecore_wl2_session_recovery_disable();
+}
+EFL_END_TEST
+
void
ecore_wl2_test_init(TCase *tc)
{
tcase_add_test(tc, ecore_wl2_simple);
+ if (getenv("WAYLAND_DISPLAY") && (getenv("E_START")))
+ {
+ tcase_add_test(tc, wl2_session_recovery_disable);
+ }
}
diff --git a/src/tests/ecore_wl2/ecore_wl2_test_input.c b/src/tests/ecore_wl2/ecore_wl2_test_input.c
index 73056a77fa..12b1e45338 100644
--- a/src/tests/ecore_wl2/ecore_wl2_test_input.c
+++ b/src/tests/ecore_wl2/ecore_wl2_test_input.c
@@ -1,23 +1,5 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#include <Eina.h>
-#include <Ecore.h>
-#include <Ecore_Wl2.h>
-
#include "ecore_wl2_suite.h"
-
-static Ecore_Wl2_Display *
-_display_connect(void)
-{
- Ecore_Wl2_Display *disp;
-
- disp = ecore_wl2_display_connect(NULL);
- return disp;
-}
+#include "ecore_wl2_tests_helpers.h"
EFL_START_TEST(wl2_input_seat_get)
{
@@ -102,7 +84,9 @@ EFL_START_TEST(wl2_input_keymap_get)
EINA_ITERATOR_FOREACH(itr, input)
{
- ck_assert(ecore_wl2_input_keymap_get(input) != NULL);
+ if (ecore_wl2_input_seat_capabilities_get(input) ==
+ ECORE_WL2_SEAT_CAPABILITIES_KEYBOARD)
+ ck_assert(ecore_wl2_input_keymap_get(input) != NULL);
}
eina_iterator_free(itr);
@@ -130,6 +114,173 @@ EFL_START_TEST(wl2_input_name_get)
}
EFL_END_TEST
+static Eina_Bool
+_test_input_seat_capa_configure_complete(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Test_Data *td = data;
+ Ecore_Wl2_Input *input;
+ Eina_Iterator *itr;
+
+ itr = ecore_wl2_display_inputs_get(td->display);
+ ck_assert(itr != NULL);
+
+ EINA_ITERATOR_FOREACH(itr, input)
+ {
+ Ecore_Wl2_Seat_Capabilities cap = ECORE_WL2_SEAT_CAPABILITIES_NONE;
+
+ cap = ecore_wl2_input_seat_capabilities_get(input);
+ ck_assert(cap != ECORE_WL2_SEAT_CAPABILITIES_NONE);
+ }
+
+ eina_iterator_free(itr);
+
+ ecore_main_loop_quit();
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_input_seat_capabilities)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ td->handler = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE,
+ _test_input_seat_capa_configure_complete, td);
+
+ ecore_main_loop_begin();
+
+ ecore_wl2_shutdown();
+ free(td);
+
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_input_pointer_xy)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Input *input;
+ Eina_Iterator *itr;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ itr = ecore_wl2_display_inputs_get(disp);
+ ck_assert(itr != NULL);
+
+ EINA_ITERATOR_FOREACH(itr, input)
+ {
+ if (ecore_wl2_input_seat_capabilities_get(input) ==
+ ECORE_WL2_SEAT_CAPABILITIES_POINTER)
+ {
+ int x = 0, y = 0;
+
+ ecore_wl2_input_pointer_xy_get(input, &x, &y);
+ ck_assert_int_ne(x, 0);
+ ck_assert_int_ne(y, 0);
+ }
+ }
+
+ eina_iterator_free(itr);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_input_keyboard_repeat)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Input *input;
+ Eina_Iterator *itr;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ itr = ecore_wl2_display_inputs_get(disp);
+ ck_assert(itr != NULL);
+
+ EINA_ITERATOR_FOREACH(itr, input)
+ {
+ if (ecore_wl2_input_seat_capabilities_get(input) ==
+ ECORE_WL2_SEAT_CAPABILITIES_KEYBOARD)
+ {
+ double rate = 0.0, delay = 0.0;
+
+ ecore_wl2_input_keyboard_repeat_set(input, 2.0, 2.0);
+ ecore_wl2_input_keyboard_repeat_get(input, &rate, &delay);
+ ck_assert(!EINA_DBL_EQ(rate, 2.0));
+ ck_assert(!EINA_DBL_EQ(delay, 2.0));
+ }
+ }
+
+ eina_iterator_free(itr);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_input_cursor_from_name_set)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Input *input;
+ Eina_Iterator *itr;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ itr = ecore_wl2_display_inputs_get(disp);
+ ck_assert(itr != NULL);
+
+ EINA_ITERATOR_FOREACH(itr, input)
+ {
+ if (ecore_wl2_input_seat_capabilities_get(input) ==
+ ECORE_WL2_SEAT_CAPABILITIES_POINTER)
+ {
+ //FIXME: Need some discussion about how to validate this API in TC.
+ ecore_wl2_input_cursor_from_name_set(input, NULL);
+ ecore_wl2_input_cursor_from_name_set(NULL, NULL);
+ }
+ }
+
+ eina_iterator_free(itr);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_input_pointer_set)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Input *input;
+ Eina_Iterator *itr;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ itr = ecore_wl2_display_inputs_get(disp);
+ ck_assert(itr != NULL);
+
+ EINA_ITERATOR_FOREACH(itr, input)
+ {
+ if (ecore_wl2_input_seat_capabilities_get(input) ==
+ ECORE_WL2_SEAT_CAPABILITIES_POINTER)
+ {
+ //FIXME: Need some discussion about how to validate this API in TC.
+ ecore_wl2_input_pointer_set(input, NULL, 0, 0);
+ ecore_wl2_input_pointer_set(NULL, NULL, 0, 0);
+ }
+ }
+
+ eina_iterator_free(itr);
+}
+EFL_END_TEST
+
void
ecore_wl2_test_input(TCase *tc)
{
@@ -140,5 +291,10 @@ ecore_wl2_test_input(TCase *tc)
tcase_add_test(tc, wl2_input_display_get);
tcase_add_test(tc, wl2_input_keymap_get);
tcase_add_test(tc, wl2_input_name_get);
+ tcase_add_test(tc, wl2_input_seat_capabilities);
+ tcase_add_test(tc, wl2_input_pointer_xy);
+ tcase_add_test(tc, wl2_input_keyboard_repeat);
+ tcase_add_test(tc, wl2_input_cursor_from_name_set);
+ tcase_add_test(tc, wl2_input_pointer_set);
}
}
diff --git a/src/tests/ecore_wl2/ecore_wl2_test_output.c b/src/tests/ecore_wl2/ecore_wl2_test_output.c
new file mode 100644
index 0000000000..c3dbe98de6
--- /dev/null
+++ b/src/tests/ecore_wl2/ecore_wl2_test_output.c
@@ -0,0 +1,33 @@
+#include "ecore_wl2_suite.h"
+
+EFL_START_TEST(wl2_output_dpi_get)
+{
+ int ret;
+
+ //FIXME: Need some discussion about how to validate this API in TC.
+ ret = ecore_wl2_output_dpi_get(NULL);
+
+ fail_if(ret != 75);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_output_transform_get)
+{
+ int ret;
+
+ //FIXME: Need some discussion about how to validate this API in TC.
+ ret = ecore_wl2_output_transform_get(NULL);
+
+ fail_if(ret != 0);
+}
+EFL_END_TEST
+
+void
+ecore_wl2_test_output(TCase *tc)
+{
+ if (getenv("WAYLAND_DISPLAY"))
+ {
+ tcase_add_test(tc, wl2_output_dpi_get);
+ tcase_add_test(tc, wl2_output_transform_get);
+ }
+}
diff --git a/src/tests/ecore_wl2/ecore_wl2_test_window.c b/src/tests/ecore_wl2/ecore_wl2_test_window.c
index bb329195ef..4b9e734d61 100644
--- a/src/tests/ecore_wl2/ecore_wl2_test_window.c
+++ b/src/tests/ecore_wl2/ecore_wl2_test_window.c
@@ -1,31 +1,14 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#include <Eina.h>
-#include <Ecore.h>
-#include <Ecore_Wl2.h>
-
#include "ecore_wl2_suite.h"
+#include "ecore_wl2_tests_helpers.h"
-static Ecore_Wl2_Display *
-_display_connect(void)
-{
- Ecore_Wl2_Display *disp;
-
- disp = ecore_wl2_display_connect(NULL);
- return disp;
-}
+#ifdef GL_GLES
+#include "ecore_wl2_tests_helper_egl.h"
+#endif
-static Ecore_Wl2_Window *
-_window_create(Ecore_Wl2_Display *disp)
+static struct wl_surface *
+_surface_get(Ecore_Wl2_Window *win)
{
- Ecore_Wl2_Window *win;
-
- win = ecore_wl2_window_new(disp, NULL, 100, 100, 500, 500);
- return win;
+ return ecore_wl2_window_surface_get(win);
}
EFL_START_TEST(wl2_window_new)
@@ -86,40 +69,6 @@ EFL_START_TEST(wl2_window_rotation)
}
EFL_END_TEST
-EFL_START_TEST(wl2_window_output_find)
-{
- Ecore_Wl2_Display *disp;
- Ecore_Wl2_Window *win;
- Ecore_Wl2_Output *out;
-
- disp = _display_connect();
- ck_assert(disp != NULL);
-
- win = _window_create(disp);
- ck_assert(win != NULL);
-
- out = ecore_wl2_window_output_find(win);
- ck_assert(out != NULL);
-}
-EFL_END_TEST
-
-EFL_START_TEST(wl2_window_aux_hints_supported_get)
-{
- Ecore_Wl2_Display *disp;
- Ecore_Wl2_Window *win;
- Eina_List *l;
-
- disp = _display_connect();
- ck_assert(disp != NULL);
-
- win = _window_create(disp);
- ck_assert(win != NULL);
-
- l = ecore_wl2_window_aux_hints_supported_get(win);
- ck_assert(l != NULL);
-}
-EFL_END_TEST
-
EFL_START_TEST(wl2_window_display_get)
{
Ecore_Wl2_Display *disp;
@@ -329,23 +278,96 @@ EFL_START_TEST(wl2_window_type)
}
EFL_END_TEST
+#ifdef GL_GLES
+static void
+_test_activated_frame_cb(Ecore_Wl2_Window *win EINA_UNUSED, uint32_t timestamp EINA_UNUSED, void *data)
+{
+ Test_Data *td = data;
+
+ td->frame_callback_count++;
+ if (td->frame_callback_count % 4 == 0)
+ glClearColor(0.0, 1.0, 0.0, 0.0);
+ else if (td->frame_callback_count % 4 == 1)
+ glClearColor(0.0, 0.0, 1.0, 0.0);
+ else if (td->frame_callback_count % 4 == 2)
+ glClearColor(0.0, 0.0, 0.0, 1.0);
+ else
+ glClearColor(1.0, 0.0, 0.0, 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glFlush();
+
+ eglSwapBuffers(td->egl_display, td->egl_surface);
+
+ ecore_wl2_window_commit(td->win, EINA_TRUE);
+}
+
+static Eina_Bool
+_test_activated_configure_complete(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Test_Data *td = data;
+
+ td->frame_callback_handler = ecore_wl2_window_frame_callback_add(td->win, _test_activated_frame_cb, td);
+ ecore_wl2_window_commit(td->win, EINA_TRUE);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_test_activated_window_activate(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ //TC Pass
+ ecore_main_loop_quit();
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
EFL_START_TEST(wl2_window_activated)
{
- Ecore_Wl2_Display *disp;
- Ecore_Wl2_Window *win;
- Eina_Bool ret;
+ Test_Data *td;
+ Eina_Bool ret = EINA_FALSE;
- disp = _display_connect();
- ck_assert(disp != NULL);
+ ecore_wl2_init();
- win = _window_create(disp);
- ck_assert(win != NULL);
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+ td->frame_callback_count = 0;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
- ret = ecore_wl2_window_activated_get(win);
+ ecore_wl2_window_show(td->win);
+ ret = _init_egl(td);
fail_if(ret != EINA_TRUE);
+
+ td->handler = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE,
+ _test_activated_configure_complete, td);
+ ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_ACTIVATE,
+ _test_activated_window_activate, NULL);
+
+ ecore_main_loop_begin();
+
+ _term_egl(td);
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+#else
+EFL_START_TEST(wl2_window_activated)
+{
+ fail_if("No GL enabled GL should be enabled for API test");
}
EFL_END_TEST
+#endif
EFL_START_TEST(wl2_window_aspect)
{
@@ -454,6 +476,486 @@ EFL_START_TEST(wl2_window_role)
}
EFL_END_TEST
+EFL_START_TEST(wl2_window_input_region)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Window *win;
+ int x, y, w, h;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ win = _window_create(disp);
+ ck_assert(win != NULL);
+
+ ecore_wl2_window_input_region_set(win, 10, 10, 100, 100);
+
+ ecore_wl2_window_input_region_get(win, &x, &y, &w, &h);
+ fail_if(x != 10);
+ fail_if(y != 10);
+ fail_if(w != 100);
+ fail_if(h != 100);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_opaque_region)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Window *win;
+ int x, y, w, h;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ win = _window_create(disp);
+ ck_assert(win != NULL);
+
+ ecore_wl2_window_opaque_region_set(win, 10, 10, 100, 100);
+
+ ecore_wl2_window_opaque_region_get(win, &x, &y, &w, &h);
+ fail_if(x != 10);
+ fail_if(y != 10);
+ fail_if(w != 100);
+ fail_if(h != 100);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_popup_input)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Window *win;
+ Ecore_Wl2_Input *input;
+ Eina_Iterator *itr;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ win = _window_create(disp);
+ ck_assert(win != NULL);
+
+ ecore_wl2_window_type_set(win, ECORE_WL2_WINDOW_TYPE_MENU);
+
+ itr = ecore_wl2_display_inputs_get(disp);
+ ck_assert(itr != NULL);
+
+ EINA_ITERATOR_FOREACH(itr, input)
+ {
+ if (ecore_wl2_input_seat_capabilities_get(input) !=
+ ECORE_WL2_SEAT_CAPABILITIES_POINTER)
+ continue;
+
+ ecore_wl2_window_popup_input_set(win, input);
+ fail_if(ecore_wl2_window_popup_input_get(win) != input);
+ break;
+ }
+
+ eina_iterator_free(itr);
+}
+EFL_END_TEST
+
+static void
+_test_commit_frame_cb(Ecore_Wl2_Window *win EINA_UNUSED, uint32_t timestamp EINA_UNUSED, void *data)
+{
+ Test_Data *td = data;
+ td->frame_callback_count++;
+ ecore_main_loop_quit();
+}
+
+static Eina_Bool
+_test_commit_configure_complete(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Test_Data *td = data;
+
+ td->frame_callback_handler = ecore_wl2_window_frame_callback_add(td->win, _test_commit_frame_cb, td);
+ ecore_wl2_window_commit(td->win, EINA_TRUE);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_window_commit)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+ td->frame_callback_count = 0;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ td->handler = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE,
+ _test_commit_configure_complete, td);
+
+ ecore_main_loop_begin();
+
+ //Check if the frame callback was called properly by ecore_wl2_window_commit().
+ fail_if(td->frame_callback_count == 0);
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
+static void
+_test_frame_callback_frame_cb(Ecore_Wl2_Window *win EINA_UNUSED, uint32_t timestamp EINA_UNUSED, void *data)
+{
+ Test_Data *td = data;
+ td->frame_callback_count++;
+ if (td->frame_callback_count == 1)
+ {
+ ecore_wl2_window_frame_callback_del(td->frame_callback_handler);
+ td->frame_callback_handler = NULL;
+ ecore_main_loop_quit();
+ }
+}
+
+static Eina_Bool
+_test_frame_callback_configure_complete(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ Test_Data *td = data;
+
+ td->frame_callback_handler = ecore_wl2_window_frame_callback_add(td->win, _test_frame_callback_frame_cb, td);
+ ecore_wl2_window_commit(td->win, EINA_TRUE);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_window_frame_callback)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+ td->frame_callback_count = 0;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ td->handler = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE,
+ _test_frame_callback_configure_complete, td);
+
+ ecore_main_loop_begin();
+
+ //Check if the frame callback called after then it sets NULL or not.
+ fail_if(td->frame_callback_count != 1);
+ fail_if(td->frame_callback_handler != NULL);
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_free)
+{
+ Ecore_Wl2_Window *t_win;
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ t_win = ecore_wl2_display_window_find_by_surface(td->display, td->surface);
+
+ fail_if(td->win != t_win);
+
+ ecore_wl2_window_free(td->win);
+ t_win = ecore_wl2_display_window_find_by_surface(td->display, td->surface);
+
+ //Check the returned window with freed window.
+ fail_if(td->win == t_win);
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
+static Eina_Bool
+_test_hide_window_hide(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ //TC pass
+ ecore_main_loop_quit();
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_window_hide)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+ td->frame_callback_count = 0;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ ecore_wl2_window_hide(td->win);
+ td->handler = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_HIDE,
+ _test_hide_window_hide, NULL);
+
+ ecore_main_loop_begin();
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_shell_surface_exists)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+ td->frame_callback_count = 0;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ //window_show function will create shell surface. then checks it.
+ fail_if(ecore_wl2_window_shell_surface_exists(td->win) == EINA_FALSE);
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
+static Eina_Bool
+_test_show_window_show(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ //TC pass
+ ecore_main_loop_quit();
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_window_show)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+ td->frame_callback_count = 0;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ td->handler = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_SHOW,
+ _test_show_window_show, NULL);
+
+ ecore_main_loop_begin();
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
+static Eina_Bool _window_configure_event_called = EINA_FALSE;
+
+static Eina_Bool
+_test_update_window_configure(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ _window_configure_event_called = EINA_TRUE;
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_test_update_window_configure_complete(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
+{
+ //Checks if the configure_complete calling before configure calling
+ //when ecore_wl2_window_update_begin() called.
+ fail_if(_window_configure_event_called == EINA_TRUE);
+
+ ecore_main_loop_quit();
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+EFL_START_TEST(wl2_window_update_begin)
+{
+ Test_Data *td;
+
+ ecore_wl2_init();
+
+ td = calloc(1, sizeof(Test_Data));
+ td->width = WIDTH;
+ td->height = HEIGHT;
+ td->frame_callback_count = 0;
+
+ td->display = _display_connect();
+ ck_assert(td->display != NULL);
+
+ td->win = _window_create(td->display);
+ ck_assert(td->win != NULL);
+
+ ecore_wl2_window_type_set(td->win, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
+
+ td->surface = _surface_get(td->win);
+ ck_assert(td->surface != NULL);
+
+ ecore_wl2_window_show(td->win);
+
+ ecore_wl2_window_update_begin(td->win);
+ ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE,
+ _test_update_window_configure, NULL);
+ ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE_COMPLETE,
+ _test_update_window_configure_complete, NULL);
+
+ ecore_main_loop_begin();
+
+ ecore_wl2_shutdown();
+ free(td);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_move)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Window *win;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ win = _window_create(disp);
+ ck_assert(win != NULL);
+
+ //FIXME: Need some discussion about how to validate this API in TC.
+ ecore_wl2_window_move(NULL, NULL);
+ ecore_wl2_window_move(win, NULL);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_resize)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Window *win;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ win = _window_create(disp);
+ ck_assert(win != NULL);
+
+ //FIXME: Need some discussion about how to validate this API in TC.
+ ecore_wl2_window_resize(NULL, NULL, 0);
+ ecore_wl2_window_resize(win, NULL, 0);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_resizing_get)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Window *win;
+ Eina_Bool ret;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ win = _window_create(disp);
+ ck_assert(win != NULL);
+
+ ret = ecore_wl2_window_resizing_get(win);
+ fail_if (ret == EINA_TRUE);
+}
+EFL_END_TEST
+
+EFL_START_TEST(wl2_window_output_find)
+{
+ Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Window *win;
+ Ecore_Wl2_Output *output;
+
+ disp = _display_connect();
+ ck_assert(disp != NULL);
+
+ win = _window_create(disp);
+ ck_assert(win != NULL);
+
+ //FIXME: Need some discussion about how to validate this API in TC.
+ output = ecore_wl2_window_output_find(win);
+ output = ecore_wl2_window_output_find(NULL);
+ fail_if (output != NULL);
+}
+EFL_END_TEST
+
void
ecore_wl2_test_window(TCase *tc)
{
@@ -463,9 +965,17 @@ ecore_wl2_test_window(TCase *tc)
tcase_add_test(tc, wl2_window_new);
tcase_add_test(tc, wl2_window_surface_test);
tcase_add_test(tc, wl2_window_rotation);
- tcase_add_test(tc, wl2_window_output_find);
if (getenv("E_START"))
- tcase_add_test(tc, wl2_window_aux_hints_supported_get);
+ {
+ tcase_add_test(tc, wl2_window_commit);
+ tcase_add_test(tc, wl2_window_frame_callback);
+ tcase_add_test(tc, wl2_window_free);
+ tcase_add_test(tc, wl2_window_hide);
+ tcase_add_test(tc, wl2_window_shell_surface_exists);
+ tcase_add_test(tc, wl2_window_show);
+ tcase_add_test(tc, wl2_window_update_begin);
+ tcase_add_test(tc, wl2_window_activated);
+ }
tcase_add_test(tc, wl2_window_display_get);
tcase_add_test(tc, wl2_window_alpha);
tcase_add_test(tc, wl2_window_floating_mode);
@@ -477,11 +987,17 @@ ecore_wl2_test_window(TCase *tc)
tcase_add_test(tc, wl2_wm_window_rotation_app);
tcase_add_test(tc, wl2_window_geometry);
tcase_add_test(tc, wl2_window_type);
- tcase_add_test(tc, wl2_window_activated);
tcase_add_test(tc, wl2_window_available_rotation);
tcase_add_test(tc, wl2_window_aspect);
tcase_add_test(tc, wl2_window_class);
tcase_add_test(tc, wl2_window_title);
tcase_add_test(tc, wl2_window_role);
+ tcase_add_test(tc, wl2_window_input_region);
+ tcase_add_test(tc, wl2_window_opaque_region);
+ tcase_add_test(tc, wl2_window_popup_input);
+ tcase_add_test(tc, wl2_window_move);
+ tcase_add_test(tc, wl2_window_resize);
+ tcase_add_test(tc, wl2_window_resizing_get);
+ tcase_add_test(tc, wl2_window_output_find);
}
}
diff --git a/src/tests/ecore_wl2/ecore_wl2_tests_helper_egl.h b/src/tests/ecore_wl2/ecore_wl2_tests_helper_egl.h
new file mode 100644
index 0000000000..10605428be
--- /dev/null
+++ b/src/tests/ecore_wl2/ecore_wl2_tests_helper_egl.h
@@ -0,0 +1,64 @@
+#ifndef ECORE_WL2_TEST_HELPER_EGL_H
+# define ECORE_WL2_TEST_HELPER_EGL_H
+
+#include <wayland-egl.h>
+#include <EGL/egl.h>
+#include <GLES2/gl2.h>
+
+static Eina_Bool
+_init_egl(Test_Data *td)
+{
+ eglBindAPI(EGL_OPENGL_API);
+ EGLint num_config;
+
+ EGLint attributes[] =
+ {
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_NONE
+ };
+
+ td->egl_display =
+ eglGetDisplay((EGLNativeDisplayType)ecore_wl2_display_get(td->display));
+
+ if (!eglInitialize(td->egl_display, NULL, NULL))
+ {
+ EINA_LOG_ERR("Failed to initialize egl");
+ eglTerminate(td->egl_display);
+ return EINA_FALSE;
+ }
+
+ if (!eglChooseConfig(td->egl_display, attributes, &td->egl_conf,
+ 1, &num_config))
+ {
+ EINA_LOG_ERR("Failed to choose egl config");
+ eglTerminate(td->egl_display);
+ return EINA_FALSE;
+ }
+
+ td->egl_context =
+ eglCreateContext(td->egl_display, td->egl_conf, EGL_NO_CONTEXT, NULL);
+
+ td->egl_window = wl_egl_window_create(td->surface, td->width, td->height);
+
+ td->egl_surface =
+ eglCreateWindowSurface(td->egl_display,
+ td->egl_conf, td->egl_window, NULL);
+
+ eglMakeCurrent(td->egl_display, td->egl_surface,
+ td->egl_surface, td->egl_context);
+
+ return EINA_TRUE;
+}
+
+static void
+_term_egl(Test_Data *td)
+{
+ eglDestroySurface(td->egl_display, td->egl_surface);
+ wl_egl_window_destroy(td->egl_window);
+ eglDestroyContext(td->egl_display, td->egl_context);
+ eglTerminate(td->egl_display);
+}
+
+#endif
diff --git a/src/tests/ecore_wl2/ecore_wl2_tests_helpers.h b/src/tests/ecore_wl2/ecore_wl2_tests_helpers.h
index f897dc9123..c1fe4657a5 100644
--- a/src/tests/ecore_wl2/ecore_wl2_tests_helpers.h
+++ b/src/tests/ecore_wl2/ecore_wl2_tests_helpers.h
@@ -1,24 +1,48 @@
#ifndef ECORE_WL2_TEST_HELPERS_H
# define ECORE_WL2_TEST_HELPERS_H
-# include <Ecore_Wl2.h>
+#include <wayland-egl.h>
-static Ecore_Wl2_Display *
-_display_setup(void)
+#ifdef GL_GLES
+#include <EGL/egl.h>
+#include <GLES2/gl2.h>
+#endif
+
+#define WIDTH 480
+#define HEIGHT 360
+
+typedef struct _Test_Data
{
- Ecore_Wl2_Display *disp;
+ Ecore_Wl2_Display *display;
+ Ecore_Wl2_Window *win;
+ Ecore_Wl2_Frame_Cb_Handle *frame_callback_handler;
+ Ecore_Event_Handler *handler;
- disp = ecore_wl2_display_create(NULL);
- return disp;
-}
+ struct wl_surface *surface;
+ struct wl_egl_window *egl_window;
+
+ int width;
+ int height;
+ int frame_callback_count;
+
+#ifdef GL_GLES
+ EGLDisplay egl_display;
+ EGLConfig egl_conf;
+ EGLSurface egl_surface;
+ EGLContext egl_context;
+#endif
+} Test_Data;
static Ecore_Wl2_Display *
_display_connect(void)
{
- Ecore_Wl2_Display *disp;
+ return ecore_wl2_display_connect(NULL);
+}
- disp = ecore_wl2_display_connect(NULL);
- return disp;
+static Ecore_Wl2_Window *
+_window_create(Ecore_Wl2_Display *disp)
+{
+ return ecore_wl2_window_new(disp, NULL, 100, 100, WIDTH, HEIGHT);
}
#endif
diff --git a/src/tests/ecore_wl2/meson.build b/src/tests/ecore_wl2/meson.build
index eb1a13db6a..f7472d02ed 100644
--- a/src/tests/ecore_wl2/meson.build
+++ b/src/tests/ecore_wl2/meson.build
@@ -5,12 +5,22 @@ ecore_wl2_suite_src = [
'ecore_wl2_test_ecore_wl2.c',
'ecore_wl2_test_display.c',
'ecore_wl2_test_window.c',
- 'ecore_wl2_test_input.c'
+ 'ecore_wl2_test_input.c',
+ 'ecore_wl2_test_output.c'
]
+wl2_test_gl_deps = []
+
+if get_option('opengl') == 'es-egl'
+ ecore_wl2_suite_src += 'ecore_wl2_tests_helper_egl.h'
+ wl2_test_gl_deps += dependency('egl')
+ wl2_test_gl_deps += dependency('gl')
+endif
+
ecore_wl2_suite = executable('ecore_wl2_suite',
ecore_wl2_suite_src,
- dependencies: [ecore_wl2, ecore, check, wayland_protocol],
+ dependencies: [ecore_wl2, ecore, ecore_input, check, wayland_protocol, wayland_client, dependency('wayland-egl'), wl2_test_gl_deps],
+
c_args : [
'-DTESTS_BUILD_DIR="'+meson.current_build_dir()+'"',
'-DTESTS_SRC_DIR="'+meson.current_source_dir()+'"']
diff --git a/src/tests/edje/data/test_textblock.edc b/src/tests/edje/data/test_textblock.edc
index e8223e75be..f7cc0070a9 100644
--- a/src/tests/edje/data/test_textblock.edc
+++ b/src/tests/edje/data/test_textblock.edc
@@ -1,8 +1,21 @@
collections {
+ text_classes {
+ text_class {
+ name: "tc1";
+ font: "Serif";
+ size: 18;
+ }
+ }
styles {
style { name: "tb_style";
base: "font=Sans font_size=20 color=#fff";
}
+ style { name: "tb_tc_style";
+ base: "color=#ff0 text_class=tc1";
+ }
+ style { name: "tb_tc2_style";
+ base: "color=#0ff text_class=tc2";
+ }
}
group { name: "test_textblock";
parts {
@@ -18,4 +31,32 @@ collections {
}
}
}
+ group { name: "test_tc_textblock";
+ parts {
+ part { name: "tb";
+ type: TEXTBLOCK;
+ description { state: "default" 0.0;
+ min: 300 300;
+ text {
+ text: "Hello World";
+ style: "tb_tc_style";
+ }
+ }
+ }
+ }
+ }
+ group { name: "test_tc_textblock2";
+ parts {
+ part { name: "tb2";
+ type: TEXTBLOCK;
+ description { state: "default" 0.0;
+ min: 300 300;
+ text {
+ text: "Hello World";
+ style: "tb_tc2_style";
+ }
+ }
+ }
+ }
+ }
}
diff --git a/src/tests/edje/edje_suite.c b/src/tests/edje/edje_suite.c
index 80104b0e0b..5439c72a57 100644
--- a/src/tests/edje/edje_suite.c
+++ b/src/tests/edje/edje_suite.c
@@ -40,7 +40,7 @@ _setup_evas(void)
evas_output_method_set(evas, evas_render_method_lookup("buffer"));
einfo = evas_engine_info_get(evas);
- evas_engine_info_set(evas, einfo);
+ fail_unless(evas_engine_info_set(evas, einfo));
evas_output_size_set(evas, 500, 500);
evas_output_viewport_set(evas, 0, 0, 500, 500);
diff --git a/src/tests/edje/edje_test_text.c b/src/tests/edje/edje_test_text.c
index a66132c1d8..5b48de63a0 100644
--- a/src/tests/edje/edje_test_text.c
+++ b/src/tests/edje/edje_test_text.c
@@ -102,17 +102,58 @@ EFL_START_TEST(edje_test_textblock)
evas = _setup_evas();
obj = edje_object_add(evas);
- fail_unless(edje_object_file_set(obj, test_layout_get("test_textblock.edj"), "test_textblock"));
+ ck_assert(edje_object_file_set(obj, test_layout_get("test_textblock.edj"), "test_textblock"));
txt = edje_object_part_text_get(obj, "text");
- fail_if(!txt || strcmp(txt, "Bye"));
+ ck_assert_ptr_ne(txt, NULL);
+ ck_assert_int_eq(strcmp(txt, "Bye"), 0);
edje_object_part_text_set(obj, "text", buf);
txt = edje_object_part_text_get(obj, "text");
- fail_if(!txt || strcmp(txt, buf));
-
+ ck_assert_ptr_ne(txt, NULL);
+ ck_assert_int_eq(strcmp(txt, buf), 0);
+
+ Evas_Object *obj2 = edje_object_add(evas);
+ ck_assert(edje_object_file_set(obj2, test_layout_get("test_textblock.edj"), "test_tc_textblock"));
+ Evas_Object *tb = (Evas_Object*)edje_object_part_object_get(obj2, "tb");
+ ck_assert_ptr_ne(tb, NULL);
+ int w = 0, h = 0;
+ evas_object_textblock_size_formatted_get(tb, &w, &h);
+ Evas_Textblock_Style *st = evas_object_textblock_style_get(tb);
+ txt = evas_textblock_style_get(st);
+ ck_assert_str_eq(txt, "DEFAULT='color=#ff0 font_size=18.0 font=Serif'");
+ ck_assert_int_ne(w, 0);
+ ck_assert_int_ne(h, 0);
+
+ edje_object_text_class_set(obj2, "tc1", "Sans", 8);
+ edje_object_calc_force(obj2);
+ int w2 = 0, h2 = 0;
+ evas_object_textblock_size_formatted_get(tb, &w2, &h2);
+ ck_assert_int_ne(w2, 0);
+ ck_assert_int_ne(h2, 0);
+ ck_assert_int_ne(w, w2);
+ ck_assert_int_ne(h, h2);
+
+ ck_assert(edje_object_file_set(obj2, test_layout_get("test_textblock.edj"), "test_tc_textblock2"));
+ tb = (Evas_Object*)edje_object_part_object_get(obj2, "tb2");
+ ck_assert_ptr_ne(tb, NULL);
+ st = evas_object_textblock_style_get(tb);
+ txt = evas_textblock_style_get(st);
+ ck_assert_str_eq(txt, "DEFAULT='color=#0ff'");
+ evas_object_textblock_size_formatted_get(tb, &w, &h);
+ ck_assert_int_eq(w, 0);
+ ck_assert_int_eq(h, 0);
+
+ edje_object_text_class_set(obj2, "tc2", "Sans", 15);
+ edje_object_calc_force(obj2);
+ evas_object_textblock_size_formatted_get(tb, &w, &h);
+ ck_assert_int_ne(w, 0);
+ ck_assert_int_ne(h, 0);
+ st = evas_object_textblock_style_get(tb);
+ txt = evas_textblock_style_get(st);
+ ck_assert_str_eq(txt, "DEFAULT='color=#0ff font_size=15.0 font=Sans'");
}
EFL_END_TEST
-START_TEST(edje_test_text_ellipsis)
+EFL_START_TEST(edje_test_text_ellipsis)
{
Eo *evas;
Eo *layout;
@@ -128,9 +169,9 @@ START_TEST(edje_test_text_ellipsis)
efl_text_ellipsis_set(efl_part(layout, "text"), 1.0);
}
-END_TEST
+EFL_END_TEST
-START_TEST(edje_test_text_wrap)
+EFL_START_TEST(edje_test_text_wrap)
{
Eo *evas;
Eo *layout;
@@ -146,9 +187,9 @@ START_TEST(edje_test_text_wrap)
efl_text_wrap_set(efl_part(layout, "text"), EFL_TEXT_FORMAT_WRAP_WORD);
}
-END_TEST
+EFL_END_TEST
-START_TEST(edje_test_text_font)
+EFL_START_TEST(edje_test_text_font)
{
Eo *evas;
Eo *layout;
@@ -165,9 +206,9 @@ START_TEST(edje_test_text_font)
efl_text_font_size_set(efl_part(layout, "text"), 14);
}
-END_TEST
+EFL_END_TEST
-START_TEST(edje_test_text_color)
+EFL_START_TEST(edje_test_text_color)
{
Eo *evas;
Eo *layout;
@@ -183,7 +224,7 @@ START_TEST(edje_test_text_color)
efl_text_color_set(efl_part(layout, "text"), 255, 255, 255, 255);
}
-END_TEST
+EFL_END_TEST
static void
_basic_check(Eo *layout, Eina_Bool set)
@@ -201,7 +242,7 @@ _basic_check(Eo *layout, Eina_Bool set)
255, 255, 255, 255);
efl_text_glow_color_set(efl_part(layout, "text"),
255, 255, 255, 255);
- efl_text_glow2_color_set(efl_part(layout, "text"),
+ efl_text_secondary_glow_color_set(efl_part(layout, "text"),
255, 255, 255, 255);
efl_text_outline_color_set(efl_part(layout, "text"),
255, 255, 255, 255);
@@ -211,7 +252,7 @@ _basic_check(Eo *layout, Eina_Bool set)
255, 255, 255, 255);
efl_text_underline_color_set(efl_part(layout, "text"),
255, 255, 255, 255);
- efl_text_underline2_color_set(efl_part(layout, "text"),
+ efl_text_secondary_underline_color_set(efl_part(layout, "text"),
255, 255, 255, 255);
efl_text_underline_dashed_color_set(efl_part(layout, "text"),
255, 255, 255, 255);
@@ -235,7 +276,7 @@ _basic_check(Eo *layout, Eina_Bool set)
ck_assert_int_eq(b, 255);
ck_assert_int_eq(a, 255);
- efl_text_glow2_color_get(efl_part(layout, "text"), &r, &g, &b, &a);
+ efl_text_secondary_glow_color_get(efl_part(layout, "text"), &r, &g, &b, &a);
ck_assert_int_eq(r, 255);
ck_assert_int_eq(g, 255);
ck_assert_int_eq(b, 255);
@@ -265,7 +306,7 @@ _basic_check(Eo *layout, Eina_Bool set)
ck_assert_int_eq(b, 255);
ck_assert_int_eq(a, 255);
- efl_text_underline2_color_get(efl_part(layout, "text"), &r, &g, &b, &a);
+ efl_text_secondary_underline_color_get(efl_part(layout, "text"), &r, &g, &b, &a);
ck_assert_int_eq(r, 255);
ck_assert_int_eq(g, 255);
ck_assert_int_eq(b, 255);
@@ -306,7 +347,7 @@ _basic_check(Eo *layout, Eina_Bool set)
}
}
-START_TEST(edje_test_text_part)
+EFL_START_TEST(edje_test_text_part)
{
Eo *evas;
Eo *layout;
@@ -328,7 +369,7 @@ START_TEST(edje_test_text_part)
_basic_check(layout, EINA_FALSE);
}
-END_TEST
+EFL_END_TEST
void edje_test_text(TCase *tc)
{
diff --git a/src/tests/eet/eet_test_cache.c b/src/tests/eet/eet_test_cache.c
index 6dee39142c..36acb414db 100644
--- a/src/tests/eet/eet_test_cache.c
+++ b/src/tests/eet/eet_test_cache.c
@@ -3,7 +3,11 @@
#endif
#include <stdlib.h>
-#include <unistd.h>
+#ifdef _WIN32
+# include <io.h> /* close(), unlink() */
+#else
+# include <unistd.h> /* close(), unlink() */
+#endif
#include <Eina.h>
#include <Eet.h>
@@ -46,33 +50,33 @@ _open_close_worker(void *path, Eina_Thread tid EINA_UNUSED)
EFL_START_TEST(eet_test_cache_concurrency)
{
- char *file;
const char *buffer = "test data";
Eet_File *ef;
void *thread_ret;
unsigned int n;
Eina_Thread thread;
+ Eina_Tmpstr *tmpfile = NULL;
Eina_Bool r;
int tmpfd;
- file = strdup("/tmp/eet_suite_testXXXXXX");
-
eina_threads_init();
eina_lock_new(&open_worker_mutex);
eina_condition_new(&open_worker_cond, &open_worker_mutex);
/* create a file to test with */
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ /* tmpfile will be created in temporary directory (with eina_environment_tmp) */
+ tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpfile);
+ fail_if(-1 == tmpfd);
fail_if(!!close(tmpfd));
- ef = eet_open(file, EET_FILE_MODE_WRITE);
+ ef = eet_open(tmpfile, EET_FILE_MODE_WRITE);
fail_if(!ef);
fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
eina_lock_take(&open_worker_mutex);
/* start a thread that repeatedly opens and closes a file */
open_worker_stop = 0;
- r = eina_thread_create(&thread, EINA_THREAD_NORMAL, -1, _open_close_worker, file);
+ r = eina_thread_create(&thread, EINA_THREAD_NORMAL, -1, _open_close_worker, tmpfile);
fail_unless(r);
eina_condition_wait(&open_worker_cond);
@@ -91,9 +95,10 @@ EFL_START_TEST(eet_test_cache_concurrency)
eet_close(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpfile) != 0);
eina_threads_shutdown();
+ eina_tmpstr_del(tmpfile);
}
EFL_END_TEST
diff --git a/src/tests/eet/eet_test_cipher.c b/src/tests/eet/eet_test_cipher.c
index c06c505b4c..09c09f2d64 100644
--- a/src/tests/eet/eet_test_cipher.c
+++ b/src/tests/eet/eet_test_cipher.c
@@ -19,15 +19,15 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
const char *key_bad = "This is another crypto key";
Eet_File *ef;
char *test;
- char *file = strdup("/tmp/eet_suite_testXXXXXX");
+ Eina_Tmpstr *tmpf = NULL;
int size;
int tmpfd;
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(tmpfd));
/* Crypt an eet file. */
- ef = eet_open(file, EET_FILE_MODE_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
fail_if(!ef);
fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0,
@@ -36,7 +36,7 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
eet_close(ef);
/* Decrypt an eet file. */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
test = eet_read_cipher(ef, "keys/tests", &size, key);
@@ -48,7 +48,7 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
eet_close(ef);
/* Decrypt an eet file. */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
@@ -58,7 +58,9 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
eet_close(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
+
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
diff --git a/src/tests/eet/eet_test_common.c b/src/tests/eet/eet_test_common.c
index b9011c7be9..a9a510f0e9 100644
--- a/src/tests/eet/eet_test_common.c
+++ b/src/tests/eet/eet_test_common.c
@@ -549,22 +549,22 @@ eet_test_ex_check(Eet_Test_Ex_Type *stuff,
if (tmp > 0.00005)
return 1;
- if (stuff->f2 != -(EET_TEST_FLOAT2 + offset))
+ if (!EINA_FLT_EQ(stuff->f2, -(EET_TEST_FLOAT2 + offset)))
return 1;
- if (stuff->d2 != -(EET_TEST_DOUBLE2 + offset))
+ if (!EINA_DBL_EQ(stuff->d2, -(EET_TEST_DOUBLE2 + offset)))
return 1;
- if (stuff->f3 != EET_TEST_FLOAT3 + offset)
+ if (!EINA_FLT_EQ(stuff->f3, EET_TEST_FLOAT3 + offset))
return 1;
- if (stuff->d3 != EET_TEST_DOUBLE3 + offset)
+ if (!EINA_DBL_EQ(stuff->d3, EET_TEST_DOUBLE3 + offset))
return 1;
- if (stuff->f4 != EET_TEST_FLOAT2 + offset)
+ if (!EINA_FLT_EQ(stuff->f4, EET_TEST_FLOAT2 + offset))
return 1;
- if (stuff->d4 != EET_TEST_DOUBLE2 + offset)
+ if (!EINA_DBL_EQ(stuff->d4, EET_TEST_DOUBLE2 + offset))
return 1;
if (stuff->uc != EET_TEST_CHAR + offset)
diff --git a/src/tests/eet/eet_test_data.c b/src/tests/eet/eet_test_data.c
index ae5d013fcc..244d71373f 100644
--- a/src/tests/eet/eet_test_data.c
+++ b/src/tests/eet/eet_test_data.c
@@ -544,11 +544,11 @@ EFL_START_TEST(eet_test_data_fp)
fail_if(build->f1 != eina_f32p32_int_from(1));
fail_if(build->f0 != 0);
- fail_if(convert->fp32 != 1.125);
- fail_if(convert->fp16 != 2000);
- fail_if(convert->fp8 != 125);
- fail_if(convert->f1 != 1);
- fail_if(convert->f0 != 0);
+ fail_if(!EINA_DBL_EQ(convert->fp32, 1.125));
+ fail_if(!EINA_DBL_EQ(convert->fp16, 2000));
+ fail_if(!EINA_DBL_EQ(convert->fp8, 125));
+ fail_if(!EINA_DBL_EQ(convert->f1, 1));
+ fail_if(!EINA_DBL_EQ(convert->f0, 0));
}
EFL_END_TEST
@@ -774,7 +774,7 @@ EFL_START_TEST(eet_test_data_hash_value)
val = (Eina_Value *)eina_hash_find(h->hash, "val/double");
eina_value_get(val, &d);
- fail_if((!val) || (d != EET_TEST_DOUBLE));
+ fail_if((!val) || (!EINA_DBL_EQ(d, EET_TEST_DOUBLE)));
val = (Eina_Value *)eina_hash_find(h->hash, "val/string");
eina_value_get(val, &s);
diff --git a/src/tests/eet/eet_test_file.c b/src/tests/eet/eet_test_file.c
index 6d77a7d817..23233d7757 100644
--- a/src/tests/eet/eet_test_file.c
+++ b/src/tests/eet/eet_test_file.c
@@ -19,19 +19,17 @@ EFL_START_TEST(eet_test_file_simple_write)
Eet_Entry *entry;
Eet_File *ef;
char *test;
- char *file;
void *m;
int size;
int tmpfd;
+ Eina_Tmpstr *tmpf = NULL;
- file = strdup("/tmp/eet_suite_testXXXXXX");
-
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(tmpfd));
fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
- ef = eet_open(file, EET_FILE_MODE_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
fail_if(!ef);
fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
@@ -46,7 +44,7 @@ EFL_START_TEST(eet_test_file_simple_write)
eet_close(ef);
/* Test read from buffer */
- f = eina_file_open(file, EINA_FALSE);
+ f = eina_file_open(tmpf, EINA_FALSE);
fail_if(!f);
m = eina_file_map_all(f, EINA_FILE_WILLNEED);
@@ -83,7 +81,7 @@ EFL_START_TEST(eet_test_file_simple_write)
eina_file_close(f);
/* Test read of simple file */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
test = eet_read(ef, "keys/tests", &size);
@@ -105,7 +103,7 @@ EFL_START_TEST(eet_test_file_simple_write)
eet_close(ef);
/* Test eet cache system */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
test = eet_read(ef, "keys/tests", &size);
@@ -116,8 +114,9 @@ EFL_START_TEST(eet_test_file_simple_write)
eet_close(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
@@ -128,14 +127,12 @@ EFL_START_TEST(eet_test_file_data)
Eet_Dictionary *ed;
Eet_File *ef;
char **list;
- char *file;
Eet_Data_Descriptor_Class eddc;
Eet_Test_Ex_Type etbt;
int size;
int test;
int tmpfd;
-
- file = strdup("/tmp/eet_suite_testXXXXXX");
+ Eina_Tmpstr *tmpf = NULL;
eet_test_ex_set(&etbt, 0);
etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
@@ -165,14 +162,14 @@ EFL_START_TEST(eet_test_file_data)
eet_build_ex_descriptor(edd, EINA_FALSE);
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(tmpfd));
/* Insert an error in etbt. */
etbt.i = 0;
/* Save the encoded data in a file. */
- ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
fail_if(!ef);
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
@@ -193,7 +190,7 @@ EFL_START_TEST(eet_test_file_data)
/* Attempt to replace etbt by the correct one. */
etbt.i = EET_TEST_INT;
- ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
fail_if(!ef);
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
@@ -207,7 +204,7 @@ EFL_START_TEST(eet_test_file_data)
eet_close(ef);
/* Read back the data. */
- ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
fail_if(!ef);
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY2, &etbt, 0));
@@ -273,8 +270,9 @@ EFL_START_TEST(eet_test_file_data)
eet_close(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
@@ -286,11 +284,9 @@ EFL_START_TEST(eet_test_file_data_dump)
Eet_Test_Ex_Type etbt;
Eet_File *ef;
char *string1;
- char *file;
int test;
int tmpfd;
-
- file = strdup("/tmp/eet_suite_testXXXXXX");
+ Eina_Tmpstr *tmpf = NULL;
eet_test_ex_set(&etbt, 0);
etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
@@ -318,11 +314,11 @@ EFL_START_TEST(eet_test_file_data_dump)
eet_build_ex_descriptor(edd, EINA_FALSE);
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(tmpfd));
/* Save the encoded data in a file. */
- ef = eet_open(file, EET_FILE_MODE_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
fail_if(!ef);
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
@@ -330,7 +326,7 @@ EFL_START_TEST(eet_test_file_data_dump)
eet_close(ef);
/* Use dump/undump in the middle */
- ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
fail_if(!ef);
string1 = NULL;
@@ -341,7 +337,7 @@ EFL_START_TEST(eet_test_file_data_dump)
eet_close(ef);
/* Test the correctness of the reinsertion. */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
@@ -372,14 +368,14 @@ EFL_START_TEST(eet_test_file_data_dump)
fail_if(test != 0);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
EFL_START_TEST(eet_test_file_fp)
{
- char *file;
Eet_Data_Descriptor_Class eddc;
Eet_Data_Descriptor *edd_5FP;
Eet_Data_Descriptor *edd_5DBL;
@@ -388,8 +384,7 @@ EFL_START_TEST(eet_test_file_fp)
Eet_5DBL *convert;
Eet_5FP *build;
int tmpfd;
-
- file = strdup("/tmp/eet_suite_testXXXXXX");
+ Eina_Tmpstr *tmpf = NULL;
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
edd_5FP = eet_data_descriptor_file_new(&eddc);
@@ -415,10 +410,10 @@ EFL_START_TEST(eet_test_file_fp)
origin.f1 = eina_f32p32_int_from(1);
origin.f0 = 0;
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(tmpfd));
- ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
fail_if(!ef);
fail_if(!eet_data_write(ef, edd_5FP, EET_TEST_FILE_KEY1, &origin, 1));
@@ -435,16 +430,17 @@ EFL_START_TEST(eet_test_file_fp)
fail_if(build->f1 != eina_f32p32_int_from(1));
fail_if(build->f0 != 0);
- fail_if(convert->fp32 != 1.125);
- fail_if(convert->fp16 != 2000);
- fail_if(convert->fp8 != 125);
- fail_if(convert->f1 != 1);
- fail_if(convert->f0 != 0);
+ fail_if(!EINA_DBL_EQ(convert->fp32, 1.125));
+ fail_if(!EINA_DBL_EQ(convert->fp16, 2000));
+ fail_if(!EINA_DBL_EQ(convert->fp8, 125));
+ fail_if(!EINA_DBL_EQ(convert->f1, 1));
+ fail_if(!EINA_DBL_EQ(convert->f0, 0));
eet_close(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
diff --git a/src/tests/eet/eet_test_identity.c b/src/tests/eet/eet_test_identity.c
index b22d537021..4c54b7bcd4 100644
--- a/src/tests/eet/eet_test_identity.c
+++ b/src/tests/eet/eet_test_identity.c
@@ -60,18 +60,16 @@ EFL_START_TEST(eet_test_identity_simple)
Eet_Key *k;
FILE *noread;
char *test;
- char *file;
int size;
int fd;
+ Eina_Tmpstr *tmpf = NULL;
- file = strdup("/tmp/eet_suite_testXXXXXX");
-
- fail_if(-1 == (fd = mkstemp(file)));
+ fail_if(-1 == (fd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(fd));
fail_if(!(noread = fopen("/dev/null", "wb")));
/* Sign an eet file. */
- ef = eet_open(file, EET_FILE_MODE_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
fail_if(!ef);
fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
@@ -85,7 +83,7 @@ EFL_START_TEST(eet_test_identity_simple)
eet_close(ef);
/* Open a signed file. */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
/* check that the certificates match */
@@ -109,7 +107,7 @@ EFL_START_TEST(eet_test_identity_simple)
eet_clearcache();
/* Corrupting the file. */
- fd = open(file, O_WRONLY | O_BINARY);
+ fd = open(tmpf, O_WRONLY | O_BINARY);
fail_if(fd < 0);
fail_if(lseek(fd, 200, SEEK_SET) != 200);
@@ -122,11 +120,12 @@ EFL_START_TEST(eet_test_identity_simple)
close(fd);
/* Attempt to open a modified file. */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
diff --git a/src/tests/eet/eet_test_image.c b/src/tests/eet/eet_test_image.c
index 5e35e67e54..585f39d86b 100644
--- a/src/tests/eet/eet_test_image.c
+++ b/src/tests/eet/eet_test_image.c
@@ -72,7 +72,6 @@ static const Eet_Test_Image test_alpha = {
EFL_START_TEST(eet_test_image_normal)
{
Eet_File *ef;
- char *file;
unsigned int *data;
int compress;
int quality;
@@ -82,14 +81,13 @@ EFL_START_TEST(eet_test_image_normal)
unsigned int w;
unsigned int h;
int tmpfd;
+ Eina_Tmpstr *tmpf = NULL;
- file = strdup("/tmp/eet_suite_testXXXXXX");
-
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(tmpfd));
/* Save the encoded data in a file. */
- ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
fail_if(!ef);
result = eet_data_image_write(ef,
@@ -219,7 +217,7 @@ EFL_START_TEST(eet_test_image_normal)
eet_close(ef);
/* Test read of image */
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
result = eet_data_image_header_read(ef,
@@ -424,14 +422,14 @@ EFL_START_TEST(eet_test_image_normal)
eet_close(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
EFL_START_TEST(eet_test_image_small)
{
- char *file;
unsigned int image[4];
unsigned int *data;
Eet_File *ef;
@@ -443,18 +441,17 @@ EFL_START_TEST(eet_test_image_small)
Eet_Image_Encoding lossy;
int result;
int tmpfd;
-
- file = strdup("/tmp/eet_suite_testXXXXXX");
+ Eina_Tmpstr *tmpf = NULL;
image[0] = IM0;
image[1] = IM1;
image[2] = IM2;
image[3] = IM3;
- fail_if(-1 == (tmpfd = mkstemp(file)));
+ fail_if(-1 == (tmpfd = eina_file_mkstemp("/tmp/eet_suite_testXXXXXX", &tmpf)));
fail_if(!!close(tmpfd));
- ef = eet_open(file, EET_FILE_MODE_WRITE);
+ ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
fail_if(!ef);
result = eet_data_image_write(ef, "/images/test", image, 2, 2, 1, 9, 100, 0);
@@ -462,7 +459,7 @@ EFL_START_TEST(eet_test_image_small)
eet_close(ef);
- ef = eet_open(file, EET_FILE_MODE_READ);
+ ef = eet_open(tmpf, EET_FILE_MODE_READ);
fail_if(!ef);
data = (unsigned int *)eet_data_image_read(ef,
@@ -477,7 +474,7 @@ EFL_START_TEST(eet_test_image_small)
eet_close(ef);
- fail_if(unlink(file) != 0);
+ fail_if(unlink(tmpf) != 0);
fail_if(data[0] != IM0);
fail_if(data[1] != IM1);
@@ -486,6 +483,7 @@ EFL_START_TEST(eet_test_image_small)
free(data);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
diff --git a/src/tests/efl/efl_test_composite_model.c b/src/tests/efl/efl_test_composite_model.c
index 8d05b6d447..b2e0fa630b 100644
--- a/src/tests/efl/efl_test_composite_model.c
+++ b/src/tests/efl/efl_test_composite_model.c
@@ -43,8 +43,7 @@ _children_slice_get_then(Eo *o EINA_UNUSED,
Efl_Model *child;
Eina_Future **all;
- all = calloc(1, sizeof (Eina_Future *) * (eina_value_array_count(&v) + 1));
- if (!all) return eina_value_error_init(ENOMEM);
+ all = alloca(sizeof (Eina_Future *) * (eina_value_array_count(&v) + 1));
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
{
@@ -154,6 +153,25 @@ _assert_on_error(Eo *o EINA_UNUSED, void *data EINA_UNUSED, Eina_Error error)
return eina_value_error_init(error);
}
+static unsigned int request[3] = { 3, 1, 5 };
+
+static Eina_Value
+_children_random_index(Eo *model EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
+{
+ unsigned int i, len;
+ Efl_Model *child;
+
+ EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
+ {
+ unsigned int index;
+
+ index = efl_composite_model_index_get(child);
+ ck_assert_int_eq(index, request[i]);
+ }
+
+ return v;
+}
+
EFL_START_TEST(efl_test_boolean_model)
{
Efl_Generic_Model *base_model, *child;
@@ -198,6 +216,14 @@ EFL_START_TEST(efl_test_boolean_model)
future = efl_future_then(model, future, .error = _assert_on_error, .free = _cleanup);
ecore_main_loop_begin();
+
+ future = efl_model_children_index_get(model, EINA_C_ARRAY_ITERATOR_NEW(request));
+ future = efl_future_then(model, future,
+ .success = _children_random_index,
+ .success_type = EINA_VALUE_TYPE_ARRAY);
+ future = efl_future_then(model, future, .error = _assert_on_error, .free = _cleanup);
+
+ ecore_main_loop_begin();
}
EFL_END_TEST
diff --git a/src/tests/efl_check.h b/src/tests/efl_check.h
index abb114e005..20d2203075 100644
--- a/src/tests/efl_check.h
+++ b/src/tests/efl_check.h
@@ -45,6 +45,11 @@
# endif
#endif
+/* Uncomment this line to print a warning line to stdout for every expected error received.
+ Otherwise, expected errors are just silently ignored, greatly reducing the log size.
+*/
+//#define PRINT_EXPECTED_ERROR
+
#define DISABLE_ABORT_ON_CRITICAL_START \
do { \
int ___val = eina_log_abort_on_critical_get(); \
@@ -64,6 +69,7 @@
#define EXPECT_ERROR_END \
+ eina_log_print_cb_set(NULL, NULL); \
ck_assert_int_eq(expect_error_start, EINA_TRUE); \
DISABLE_ABORT_ON_CRITICAL_END; \
} while(0)
@@ -84,8 +90,11 @@ _efl_test_expect_error(const Eina_Log_Domain *d EINA_UNUSED, Eina_Log_Level leve
{
Eina_Bool *error = (Eina_Bool*) data;
if (level == EINA_LOG_LEVEL_ERR) *error = EINA_TRUE;
-
+#ifdef PRINT_EXPECTED_ERROR
printf("EXPECTED ERROR %s\n", fnc);
+#else
+ (void)fnc;
+#endif
}
static void
@@ -122,7 +131,7 @@ _efl_test_option_disp(int argc, char **argv, const Efl_Test_Case *etc)
}
else if (strcmp(argv[i], "--valgrind") == 0)
{
- const char *nav[argc + 3];
+ const char ** nav = (const char **) alloca(sizeof(char*) * (argc + 3));
int j, k;
nav[0] = "valgrind";
diff --git a/src/tests/efl_js/benchmark_object.eo b/src/tests/efl_js/benchmark_object.eo
index 65b65665e2..eea958c932 100644
--- a/src/tests/efl_js/benchmark_object.eo
+++ b/src/tests/efl_js/benchmark_object.eo
@@ -1,5 +1,6 @@
-class Benchmark_Object extends Efl.Object
-{
+class Benchmark_Object extends Efl.Object {
+ [[Docs for class Benchmark_Object. @since 1.66]]
+
data: null;
methods {
emptyarg {
diff --git a/src/tests/efl_mono/Eina.cs b/src/tests/efl_mono/Eina.cs
index 91e93986ff..494dc8a62e 100644
--- a/src/tests/efl_mono/Eina.cs
+++ b/src/tests/efl_mono/Eina.cs
@@ -19,6 +19,7 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
+using Eina;
using EinaTestData;
using static EinaTestData.BaseData;
@@ -575,10 +576,10 @@ class TestEinaArray
var a = new Eina.Array<Dummy.Numberwrapper>();
Test.Assert(a.Handle != IntPtr.Zero);
var o = new Dummy.Numberwrapper();
- o.SetNumber(88);
+ o.Number = 88;
Test.Assert(a.Push(o));
Test.Assert(a[0].NativeHandle == o.NativeHandle);
- Test.Assert(a[0].GetNumber() == 88);
+ Test.Assert(a[0].Number == 88);
o.Dispose();
a.Dispose();
}
@@ -618,11 +619,11 @@ class TestEinaArray
var a = new Eina.Array<Dummy.Numberwrapper>();
Test.Assert(a.Handle != IntPtr.Zero);
var o = new Dummy.Numberwrapper();
- o.SetNumber(88);
+ o.Number = 88;
Test.Assert(a.Push(o));
var p = a.Pop();
Test.Assert(p.NativeHandle == o.NativeHandle);
- Test.Assert(p.GetNumber() == 88);
+ Test.Assert(p.Number == 88);
Test.Assert(a.Count() == 0);
o.Dispose();
a.Dispose();
@@ -673,25 +674,25 @@ class TestEinaArray
Test.Assert(a.Handle != IntPtr.Zero);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
Test.Assert(a.Push(o1));
Test.Assert(a[0].NativeHandle == o1.NativeHandle);
- Test.Assert(a[0].GetNumber() == 88);
+ Test.Assert(a[0].Number == 88);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
a.DataSet(0, o2);
Test.Assert(a[0].NativeHandle == o2.NativeHandle);
- Test.Assert(a[0].GetNumber() == 44);
+ Test.Assert(a[0].Number == 44);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
a[0] = o3;
Test.Assert(a[0].NativeHandle == o3.NativeHandle);
- Test.Assert(a[0].GetNumber() == 22);
+ Test.Assert(a[0].Number == 22);
o3.Dispose();
o2.Dispose();
o1.Dispose();
@@ -757,24 +758,24 @@ class TestEinaArray
Test.Assert(a.Count() == 0);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
Test.Assert(a.Push(o1));
Test.Assert(a[0].NativeHandle == o1.NativeHandle);
- Test.Assert(a[0].GetNumber() == 88);
+ Test.Assert(a[0].Number == 88);
Test.Assert(a.Count() == 1);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
Test.Assert(a.Push(o2));
Test.Assert(a[1].NativeHandle == o2.NativeHandle);
- Test.Assert(a[1].GetNumber() == 44);
+ Test.Assert(a[1].Number == 44);
Test.Assert(a.Count() == 2);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
Test.Assert(a.Push(o3));
Test.Assert(a[2].NativeHandle == o3.NativeHandle);
- Test.Assert(a[2].GetNumber() == 22);
+ Test.Assert(a[2].Number == 22);
Test.Assert(a.Count() == 3);
o3.Dispose();
@@ -890,9 +891,9 @@ class TestEinaArray
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
- a.SetNumber(88);
- b.SetNumber(44);
- c.SetNumber(22);
+ a.Number = 88;
+ b.Number = 44;
+ c.Number = 22;
var cmp = new Dummy.Numberwrapper[]{a, b, c};
var arr = new Eina.Array<Dummy.Numberwrapper>();
@@ -904,7 +905,7 @@ class TestEinaArray
int i = 0;
foreach (Dummy.Numberwrapper e in arr)
{
- Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber());
+ Test.AssertEquals(cmp[i].Number, e.Number);
Test.Assert(cmp[i].NativeHandle == e.NativeHandle);
++i;
}
@@ -936,7 +937,7 @@ class TestEinaArray
var arr = new Eina.Array<int>();
arr.Append(base_seq_int);
Test.Assert(t.EinaArrayIntInOwn(arr));
- Test.Assert(!arr.Own);
+ Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(modified_seq_int));
arr.Dispose();
Test.Assert(arr.Handle == IntPtr.Zero);
@@ -947,13 +948,10 @@ class TestEinaArray
public static void test_eina_array_int_out()
{
var t = new Dummy.TestObject();
- Eina.Array<int> arr;
+ IList<int> arr;
Test.Assert(t.EinaArrayIntOut(out arr));
- Test.Assert(!arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_int));
- Test.AssertRaises<NotSupportedException>(() => arr.Append(append_seq_int));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_int) != null);
Test.Assert(t.CheckEinaArrayIntOut());
t.Dispose();
}
@@ -961,13 +959,10 @@ class TestEinaArray
public static void test_eina_array_int_out_own()
{
var t = new Dummy.TestObject();
- Eina.Array<int> arr;
+ IList<int> arr;
Test.Assert(t.EinaArrayIntOutOwn(out arr));
- Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_int));
- Test.Assert(arr.Append(append_seq_int));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_int) != null);
t.Dispose();
}
@@ -975,12 +970,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayIntReturn();
- Test.Assert(!arr.Own);
- Test.Assert(!arr.OwnContent);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_int));
- Test.AssertRaises<NotSupportedException>(() => arr.Append(append_seq_int));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_int) != null);
Test.Assert(t.CheckEinaArrayIntReturn());
t.Dispose();
}
@@ -989,11 +980,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayIntReturnOwn();
- Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_int));
- Test.Assert(arr.Append(append_seq_int));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_int) != null);
t.Dispose();
}
@@ -1017,7 +1005,7 @@ class TestEinaArray
var arr = new Eina.Array<string>();
arr.Append(base_seq_str);
Test.Assert(t.EinaArrayStrInOwn(arr));
- Test.Assert(!arr.Own);
+ Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(modified_seq_str));
arr.Dispose();
Test.Assert(arr.Handle == IntPtr.Zero);
@@ -1028,13 +1016,10 @@ class TestEinaArray
public static void test_eina_array_str_out()
{
var t = new Dummy.TestObject();
- Eina.Array<string> arr;
+ IList<string> arr;
Test.Assert(t.EinaArrayStrOut(out arr));
- Test.Assert(!arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_str));
- Test.AssertRaises<NotSupportedException>(() => arr.Append(append_seq_str));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_str) != null);
Test.Assert(t.CheckEinaArrayStrOut());
t.Dispose();
}
@@ -1042,13 +1027,10 @@ class TestEinaArray
public static void test_eina_array_str_out_own()
{
var t = new Dummy.TestObject();
- Eina.Array<string> arr;
+ IList<string> arr;
Test.Assert(t.EinaArrayStrOutOwn(out arr));
- Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_str));
- Test.Assert(arr.Append(append_seq_str));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_str) != null);
t.Dispose();
}
@@ -1056,11 +1038,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayStrReturn();
- Test.Assert(!arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_str));
- Test.AssertRaises<NotSupportedException>(() => arr.Append(append_seq_str));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_str) != null);
Test.Assert(t.CheckEinaArrayStrReturn());
t.Dispose();
}
@@ -1069,11 +1048,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayStrReturnOwn();
- Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_str));
- Test.Assert(arr.Append(append_seq_str));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_str) != null);
t.Dispose();
}
@@ -1097,7 +1073,7 @@ class TestEinaArray
var arr = new Eina.Array<Eina.Stringshare>();
arr.Append(base_seq_strshare);
Test.Assert(t.EinaArrayStrshareInOwn(arr));
- Test.Assert(!arr.Own);
+ Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(modified_seq_strshare));
arr.Dispose();
Test.Assert(arr.Handle == IntPtr.Zero);
@@ -1108,13 +1084,10 @@ class TestEinaArray
public static void test_eina_array_strshare_out()
{
var t = new Dummy.TestObject();
- Eina.Array<Eina.Stringshare> arr;
+ IList<Eina.Stringshare> arr;
Test.Assert(t.EinaArrayStrshareOut(out arr));
- Test.Assert(!arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_strshare));
- Test.AssertRaises<NotSupportedException>(() => arr.Append(append_seq_strshare));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_strshare) != null);
Test.Assert(t.CheckEinaArrayStrshareOut());
t.Dispose();
}
@@ -1122,13 +1095,10 @@ class TestEinaArray
public static void test_eina_array_strshare_out_own()
{
var t = new Dummy.TestObject();
- Eina.Array<Eina.Stringshare> arr;
+ IList<Eina.Stringshare> arr;
Test.Assert(t.EinaArrayStrshareOutOwn(out arr));
- Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_strshare));
- Test.Assert(arr.Append(append_seq_strshare));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_strshare) != null);
t.Dispose();
}
@@ -1136,11 +1106,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayStrshareReturn();
- Test.Assert(!arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_strshare));
- Test.AssertRaises<NotSupportedException>(() => arr.Append(append_seq_strshare));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_strshare) != null);
Test.Assert(t.CheckEinaArrayStrshareReturn());
t.Dispose();
}
@@ -1149,11 +1116,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayStrshareReturnOwn();
- Test.Assert(arr.Own);
Test.Assert(arr.ToArray().SequenceEqual(base_seq_strshare));
- Test.Assert(arr.Append(append_seq_strshare));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(append_seq_strshare) != null);
t.Dispose();
}
@@ -1178,7 +1142,7 @@ class TestEinaArray
var arr = new Eina.Array<Dummy.Numberwrapper>();
arr.Append(BaseSeqObj());
Test.Assert(t.EinaArrayObjInOwn(arr));
- Test.Assert(!arr.Own);
+ Test.Assert(arr.Own);
NumberwrapperSequenceAssertEqual(arr.ToArray(), ModifiedSeqObj());
arr.Dispose();
Test.Assert(arr.Handle == IntPtr.Zero);
@@ -1189,13 +1153,10 @@ class TestEinaArray
public static void test_eina_array_obj_out()
{
var t = new Dummy.TestObject();
- Eina.Array<Dummy.Numberwrapper> arr;
+ IList<Dummy.Numberwrapper> arr;
Test.Assert(t.EinaArrayObjOut(out arr));
- Test.Assert(!arr.Own);
NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj());
- Test.AssertRaises<NotSupportedException>(() => arr.Append(AppendSeqObj()));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(AppendSeqObj()) != null);
Test.Assert(t.CheckEinaArrayObjOut());
t.Dispose();
}
@@ -1203,13 +1164,10 @@ class TestEinaArray
public static void test_eina_array_obj_out_own()
{
var t = new Dummy.TestObject();
- Eina.Array<Dummy.Numberwrapper> arr;
+ IList<Dummy.Numberwrapper> arr;
Test.Assert(t.EinaArrayObjOutOwn(out arr));
- Test.Assert(arr.Own);
NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj());
- Test.Assert(arr.Append(AppendSeqObj()));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(AppendSeqObj()) != null);
t.Dispose();
}
@@ -1217,11 +1175,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayObjReturn();
- Test.Assert(!arr.Own);
NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj());
- Test.AssertRaises<NotSupportedException>(() => arr.Append(AppendSeqObj()));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(AppendSeqObj()) != null);
Test.Assert(t.CheckEinaArrayObjReturn());
t.Dispose();
}
@@ -1230,11 +1185,8 @@ class TestEinaArray
{
var t = new Dummy.TestObject();
var arr = t.EinaArrayObjReturnOwn();
- Test.Assert(arr.Own);
NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj());
- Test.Assert(arr.Append(AppendSeqObj()));
- arr.Dispose();
- Test.Assert(arr.Handle == IntPtr.Zero);
+ Test.Assert(arr.Concat(AppendSeqObj()) != null);
t.Dispose();
}
@@ -1295,10 +1247,10 @@ class TestEinaInarray
var a = new Eina.Inarray<Dummy.Numberwrapper>();
Test.Assert(a.Handle != IntPtr.Zero);
var o = new Dummy.Numberwrapper();
- o.SetNumber(88);
+ o.Number = 88;
Test.Assert(a.Push(o) == 0);
Test.Assert(a[0].NativeHandle == o.NativeHandle);
- Test.Assert(a[0].GetNumber() == 88);
+ Test.Assert(a[0].Number == 88);
o.Dispose();
a.Dispose();
}
@@ -1328,11 +1280,11 @@ class TestEinaInarray
var a = new Eina.Inarray<Dummy.Numberwrapper>();
Test.Assert(a.Handle != IntPtr.Zero);
var o = new Dummy.Numberwrapper();
- o.SetNumber(88);
+ o.Number = 88;
Test.Assert(a.Push(o) >= 0);
var p = a.Pop();
Test.Assert(p.NativeHandle == o.NativeHandle);
- Test.Assert(p.GetNumber() == 88);
+ Test.Assert(p.Number == 88);
Test.Assert(a.Count() == 0);
o.Dispose();
a.Dispose();
@@ -1374,26 +1326,26 @@ class TestEinaInarray
Test.Assert(a.Handle != IntPtr.Zero);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
Test.Assert(a.Push(o1) >= 0);
Test.Assert(a[0].NativeHandle == o1.NativeHandle);
- Test.Assert(a[0].GetNumber() == 88);
+ Test.Assert(a[0].Number == 88);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
a.ReplaceAt(0, o2);
Test.Assert(a[0].NativeHandle == o2.NativeHandle);
- Test.Assert(a[0].GetNumber() == 44);
+ Test.Assert(a[0].Number == 44);
Test.Assert(a.Count() == 1);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
a[0] = o3;
Test.Assert(a[0].NativeHandle == o3.NativeHandle);
- Test.Assert(a[0].GetNumber() == 22);
+ Test.Assert(a[0].Number == 22);
Test.Assert(a.Count() == 1);
o3.Dispose();
@@ -1444,24 +1396,24 @@ class TestEinaInarray
Test.Assert(a.Count() == 0);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
Test.Assert(a.Push(o1) == 0);
Test.Assert(a[0].NativeHandle == o1.NativeHandle);
- Test.Assert(a[0].GetNumber() == 88);
+ Test.Assert(a[0].Number == 88);
Test.Assert(a.Count() == 1);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
Test.Assert(a.Push(o2) == 1);
Test.Assert(a[1].NativeHandle == o2.NativeHandle);
- Test.Assert(a[1].GetNumber() == 44);
+ Test.Assert(a[1].Number == 44);
Test.Assert(a.Count() == 2);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
Test.Assert(a.Push(o3) == 2);
Test.Assert(a[2].NativeHandle == o3.NativeHandle);
- Test.Assert(a[2].GetNumber() == 22);
+ Test.Assert(a[2].Number == 22);
Test.Assert(a.Count() == 3);
o3.Dispose();
@@ -1543,9 +1495,9 @@ class TestEinaInarray
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
- a.SetNumber(88);
- b.SetNumber(44);
- c.SetNumber(22);
+ a.Number = 88;
+ b.Number = 44;
+ c.Number = 22;
var cmp = new Dummy.Numberwrapper[]{a, b, c};
var arr = new Eina.Inarray<Dummy.Numberwrapper>();
@@ -1557,7 +1509,7 @@ class TestEinaInarray
int i = 0;
foreach (Dummy.Numberwrapper e in arr)
{
- Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber());
+ Test.AssertEquals(cmp[i].Number, e.Number);
Test.Assert(cmp[i].NativeHandle == e.NativeHandle);
++i;
}
@@ -1619,25 +1571,25 @@ class TestEinaList
var lst = new Eina.List<Dummy.Numberwrapper>();
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
lst.Append(o1);
Test.Assert(lst[0].NativeHandle == o1.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 88);
+ Test.Assert(lst[0].Number == 88);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
lst.DataSet(0, o2);
Test.Assert(lst[0].NativeHandle == o2.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 44);
+ Test.Assert(lst[0].Number == 44);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
lst[0] = o3;
Test.Assert(lst[0].NativeHandle == o3.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 22);
+ Test.Assert(lst[0].Number == 22);
o3.Dispose();
o2.Dispose();
o1.Dispose();
@@ -1699,24 +1651,24 @@ class TestEinaList
Test.Assert(lst.Count() == 0);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
lst.Append(o1);
Test.Assert(lst[0].NativeHandle == o1.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 88);
+ Test.Assert(lst[0].Number == 88);
Test.Assert(lst.Count() == 1);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
lst.Append(o2);
Test.Assert(lst[1].NativeHandle == o2.NativeHandle);
- Test.Assert(lst[1].GetNumber() == 44);
+ Test.Assert(lst[1].Number == 44);
Test.Assert(lst.Count() == 2);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
lst.Append(o3);
Test.Assert(lst[2].NativeHandle == o3.NativeHandle);
- Test.Assert(lst[2].GetNumber() == 22);
+ Test.Assert(lst[2].Number == 22);
Test.Assert(lst.Count() == 3);
o3.Dispose();
o2.Dispose();
@@ -1827,24 +1779,24 @@ class TestEinaList
Test.Assert(lst.Count() == 0);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
lst.Prepend(o1);
Test.Assert(lst[0].NativeHandle == o1.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 88);
+ Test.Assert(lst[0].Number == 88);
Test.Assert(lst.Count() == 1);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
lst.Prepend(o2);
Test.Assert(lst[0].NativeHandle == o2.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 44);
+ Test.Assert(lst[0].Number == 44);
Test.Assert(lst.Count() == 2);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
lst.Prepend(o3);
Test.Assert(lst[0].NativeHandle == o3.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 22);
+ Test.Assert(lst[0].Number == 22);
Test.Assert(lst.Count() == 3);
o3.Dispose();
@@ -2073,9 +2025,9 @@ class TestEinaList
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
- a.SetNumber(88);
- b.SetNumber(44);
- c.SetNumber(22);
+ a.Number = 88;
+ b.Number = 44;
+ c.Number = 22;
var cmp = new Dummy.Numberwrapper[]{a, b, c};
var lst = new Eina.List<Dummy.Numberwrapper>();
@@ -2086,7 +2038,7 @@ class TestEinaList
int i = 0;
foreach (Dummy.Numberwrapper e in lst)
{
- Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber());
+ Test.AssertEquals(cmp[i].Number, e.Number);
Test.Assert(cmp[i].NativeHandle == e.NativeHandle);
++i;
}
@@ -2098,7 +2050,7 @@ class TestEinaList
//
// Integer //
-
+#if EFL_BETA
public static void test_eina_list_int_in()
{
var t = new Dummy.TestObject();
@@ -2118,8 +2070,8 @@ class TestEinaList
var lst = new Eina.List<int>();
lst.Append(base_seq_int);
Test.Assert(t.EinaListIntInOwn(lst));
- Test.Assert(!lst.Own);
- Test.Assert(!lst.OwnContent);
+ Test.Assert(lst.Own);
+ Test.Assert(lst.OwnContent);
lst.Dispose();
Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListIntInOwn());
@@ -2129,13 +2081,9 @@ class TestEinaList
public static void test_eina_list_int_out()
{
var t = new Dummy.TestObject();
- Eina.List<int> lst;
+ IList<int> lst;
Test.Assert(t.EinaListIntOut(out lst));
- Test.Assert(!lst.Own);
- Test.Assert(!lst.OwnContent);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_int));
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListIntOut());
t.Dispose();
}
@@ -2143,13 +2091,10 @@ class TestEinaList
public static void test_eina_list_int_out_own()
{
var t = new Dummy.TestObject();
- Eina.List<int> lst;
+ IList<int> lst;
Test.Assert(t.EinaListIntOutOwn(out lst));
- Test.Assert(lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_int));
- lst.Append(append_seq_int);
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(append_seq_int);
t.Dispose();
}
@@ -2157,11 +2102,7 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListIntReturn();
- Test.Assert(!lst.Own);
- Test.Assert(!lst.OwnContent);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_int));
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListIntReturn());
t.Dispose();
}
@@ -2170,11 +2111,8 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListIntReturnOwn();
- Test.Assert(lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_int));
- lst.Append(append_seq_int);
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(append_seq_int);
t.Dispose();
}
@@ -2198,7 +2136,7 @@ class TestEinaList
var lst = new Eina.List<string>();
lst.Append(base_seq_str);
Test.Assert(t.EinaListStrInOwn(lst));
- Test.Assert(!lst.Own);
+ Test.Assert(lst.Own);
lst.Dispose();
Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListStrInOwn());
@@ -2208,12 +2146,9 @@ class TestEinaList
public static void test_eina_list_str_out()
{
var t = new Dummy.TestObject();
- Eina.List<string> lst;
+ IList<string> lst;
Test.Assert(t.EinaListStrOut(out lst));
- Test.Assert(!lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_str));
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListStrOut());
t.Dispose();
}
@@ -2221,13 +2156,10 @@ class TestEinaList
public static void test_eina_list_str_out_own()
{
var t = new Dummy.TestObject();
- Eina.List<string> lst;
+ IList<string> lst;
Test.Assert(t.EinaListStrOutOwn(out lst));
- Test.Assert(lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_str));
- lst.Append(append_seq_str);
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(append_seq_str);
t.Dispose();
}
@@ -2235,10 +2167,7 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListStrReturn();
- Test.Assert(!lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_str));
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListStrReturn());
t.Dispose();
}
@@ -2247,11 +2176,8 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListStrReturnOwn();
- Test.Assert(lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_str));
- lst.Append(append_seq_str);
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(append_seq_str);
t.Dispose();
}
@@ -2275,7 +2201,7 @@ class TestEinaList
var lst = new Eina.List<Eina.Stringshare>();
lst.Append(base_seq_strshare);
Test.Assert(t.EinaListStrshareInOwn(lst));
- Test.Assert(!lst.Own);
+ Test.Assert(lst.Own);
lst.Dispose();
Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListStrshareInOwn());
@@ -2285,12 +2211,9 @@ class TestEinaList
public static void test_eina_list_strshare_out()
{
var t = new Dummy.TestObject();
- Eina.List<Eina.Stringshare> lst;
+ IList<Eina.Stringshare> lst;
Test.Assert(t.EinaListStrshareOut(out lst));
- Test.Assert(!lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_strshare));
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListStrshareOut());
t.Dispose();
}
@@ -2298,13 +2221,10 @@ class TestEinaList
public static void test_eina_list_strshare_out_own()
{
var t = new Dummy.TestObject();
- Eina.List<Eina.Stringshare> lst;
+ IList<Eina.Stringshare> lst;
Test.Assert(t.EinaListStrshareOutOwn(out lst));
- Test.Assert(lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_strshare));
- lst.Append(append_seq_strshare);
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(append_seq_strshare);
t.Dispose();
}
@@ -2312,10 +2232,7 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListStrshareReturn();
- Test.Assert(!lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_strshare));
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListStrshareReturn());
t.Dispose();
}
@@ -2324,11 +2241,8 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListStrshareReturnOwn();
- Test.Assert(lst.Own);
Test.Assert(lst.ToArray().SequenceEqual(base_seq_strshare));
- lst.Append(append_seq_strshare);
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(append_seq_strshare);
t.Dispose();
}
@@ -2353,7 +2267,7 @@ class TestEinaList
var lst = new Eina.List<Dummy.Numberwrapper>();
lst.Append(BaseSeqObj());
Test.Assert(t.EinaListObjInOwn(lst));
- Test.Assert(!lst.Own);
+ Test.Assert(lst.Own);
lst.Dispose();
Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListObjInOwn());
@@ -2363,12 +2277,9 @@ class TestEinaList
public static void test_eina_list_obj_out()
{
var t = new Dummy.TestObject();
- Eina.List<Dummy.Numberwrapper> lst;
+ IList<Dummy.Numberwrapper> lst;
Test.Assert(t.EinaListObjOut(out lst));
- Test.Assert(!lst.Own);
NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj());
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListObjOut());
t.Dispose();
}
@@ -2376,13 +2287,10 @@ class TestEinaList
public static void test_eina_list_obj_out_own()
{
var t = new Dummy.TestObject();
- Eina.List<Dummy.Numberwrapper> lst;
+ IList<Dummy.Numberwrapper> lst;
Test.Assert(t.EinaListObjOutOwn(out lst));
- Test.Assert(lst.Own);
NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj());
- lst.Append(AppendSeqObj());
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(AppendSeqObj());
t.Dispose();
}
@@ -2390,10 +2298,7 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListObjReturn();
- Test.Assert(!lst.Own);
NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj());
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaListObjReturn());
t.Dispose();
}
@@ -2402,11 +2307,8 @@ class TestEinaList
{
var t = new Dummy.TestObject();
var lst = t.EinaListObjReturnOwn();
- Test.Assert(lst.Own);
NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj());
- lst.Append(AppendSeqObj());
- lst.Dispose();
- Test.Assert(lst.Handle == IntPtr.Zero);
+ lst.Concat(AppendSeqObj());
t.Dispose();
}
@@ -2428,6 +2330,7 @@ class TestEinaList
a.Dispose();
t.Dispose();
}
+#endif
}
class TestEinaInlist
@@ -2463,25 +2366,25 @@ class TestEinaInlist
var lst = new Eina.Inlist<Dummy.Numberwrapper>();
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
lst.Append(o1);
Test.Assert(lst[0].NativeHandle == o1.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 88);
+ Test.Assert(lst[0].Number == 88);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
lst.DataSet(0, o2);
Test.Assert(lst[0].NativeHandle == o2.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 44);
+ Test.Assert(lst[0].Number == 44);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
lst[0] = o3;
Test.Assert(lst[0].NativeHandle == o3.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 22);
+ Test.Assert(lst[0].Number == 22);
Test.Assert(lst.Count() == 1);
o3.Dispose();
@@ -2529,24 +2432,24 @@ class TestEinaInlist
Test.Assert(lst.Count() == 0);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
lst.Append(o1);
Test.Assert(lst[0].NativeHandle == o1.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 88);
+ Test.Assert(lst[0].Number == 88);
Test.Assert(lst.Count() == 1);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
lst.Append(o2);
Test.Assert(lst[1].NativeHandle == o2.NativeHandle);
- Test.Assert(lst[1].GetNumber() == 44);
+ Test.Assert(lst[1].Number == 44);
Test.Assert(lst.Count() == 2);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
lst.Append(o3);
Test.Assert(lst[2].NativeHandle == o3.NativeHandle);
- Test.Assert(lst[2].GetNumber() == 22);
+ Test.Assert(lst[2].Number == 22);
Test.Assert(lst.Count() == 3);
o3.Dispose();
o2.Dispose();
@@ -2625,24 +2528,24 @@ class TestEinaInlist
Test.Assert(lst.Count() == 0);
var o1 = new Dummy.Numberwrapper();
- o1.SetNumber(88);
+ o1.Number = 88;
lst.Prepend(o1);
Test.Assert(lst[0].NativeHandle == o1.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 88);
+ Test.Assert(lst[0].Number == 88);
Test.Assert(lst.Count() == 1);
var o2 = new Dummy.Numberwrapper();
- o2.SetNumber(44);
+ o2.Number = 44;
lst.Prepend(o2);
Test.Assert(lst[0].NativeHandle == o2.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 44);
+ Test.Assert(lst[0].Number == 44);
Test.Assert(lst.Count() == 2);
var o3 = new Dummy.Numberwrapper();
- o3.SetNumber(22);
+ o3.Number = 22;
lst.Prepend(o3);
Test.Assert(lst[0].NativeHandle == o3.NativeHandle);
- Test.Assert(lst[0].GetNumber() == 22);
+ Test.Assert(lst[0].Number == 22);
Test.Assert(lst.Count() == 3);
o3.Dispose();
o2.Dispose();
@@ -2687,9 +2590,9 @@ class TestEinaInlist
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
- a.SetNumber(88);
- b.SetNumber(44);
- c.SetNumber(22);
+ a.Number = 88;
+ b.Number = 44;
+ c.Number = 22;
var cmp = new Dummy.Numberwrapper[]{a, b, c};
var lst = new Eina.Inlist<Dummy.Numberwrapper>();
@@ -2700,7 +2603,7 @@ class TestEinaInlist
int i = 0;
foreach (Dummy.Numberwrapper e in lst)
{
- Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber());
+ Test.AssertEquals(cmp[i].Number, e.Number);
Test.Assert(cmp[i].NativeHandle == e.NativeHandle);
++i;
}
@@ -2787,17 +2690,17 @@ class TestEinaHash
hsh[a] = aa;
Test.Assert(hsh[a].NativeHandle == aa.NativeHandle);
- Test.Assert(hsh[a].GetNumber() == aa.GetNumber());
+ Test.Assert(hsh[a].Number == aa.Number);
Test.Assert(hsh.Count == 1);
hsh[b] = bb;
Test.Assert(hsh[b].NativeHandle == bb.NativeHandle);
- Test.Assert(hsh[b].GetNumber() == bb.GetNumber());
+ Test.Assert(hsh[b].Number == bb.Number);
Test.Assert(hsh.Count == 2);
hsh[c] = cc;
Test.Assert(hsh[c].NativeHandle == cc.NativeHandle);
- Test.Assert(hsh[c].GetNumber() == cc.GetNumber());
+ Test.Assert(hsh[c].Number == cc.Number);
Test.Assert(hsh.Count == 3);
@@ -2907,17 +2810,17 @@ class TestEinaHash
hsh[b] = bb;
hsh[c] = cc;
- dct[a.GetNumber()] = aa;
- dct[b.GetNumber()] = bb;
- dct[c.GetNumber()] = cc;
+ dct[a.Number] = aa;
+ dct[b.Number] = bb;
+ dct[c.Number] = cc;
int count = 0;
foreach (KeyValuePair<Dummy.Numberwrapper, Dummy.Numberwrapper> kvp in hsh)
{
- Test.Assert(dct[kvp.Key.GetNumber()].NativeHandle == kvp.Value.NativeHandle);
- Test.Assert(dct[kvp.Key.GetNumber()].GetNumber() == kvp.Value.GetNumber());
- dct.Remove(kvp.Key.GetNumber());
+ Test.Assert(dct[kvp.Key.Number].NativeHandle == kvp.Value.NativeHandle);
+ Test.Assert(dct[kvp.Key.Number].Number == kvp.Value.Number);
+ dct.Remove(kvp.Key.Number);
++count;
}
@@ -3218,11 +3121,11 @@ class TestEinaHash
Test.Assert(t.EinaHashObjIn(hsh, nwk1, nwv1, out nwk2, out nwv2));
Test.Assert(hsh.Own);
Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle);
- Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber());
- Test.Assert(hsh[nwk1].GetNumber() == 222);
+ Test.Assert(hsh[nwk1].Number == nwv1.Number);
+ Test.Assert(hsh[nwk1].Number == 222);
Test.Assert(hsh[nwk2].NativeHandle == nwv2.NativeHandle);
- Test.Assert(hsh[nwk2].GetNumber() == nwv2.GetNumber());
- Test.Assert(hsh[nwk2].GetNumber() == 444);
+ Test.Assert(hsh[nwk2].Number == nwv2.Number);
+ Test.Assert(hsh[nwk2].Number == 444);
nwk1.Dispose();
nwk2.Dispose();
nwv1.Dispose();
@@ -3244,11 +3147,11 @@ class TestEinaHash
Test.Assert(t.EinaHashObjInOwn(hsh, nwk1, nwv1, out nwk2, out nwv2));
Test.Assert(!hsh.Own);
Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle);
- Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber());
- Test.Assert(hsh[nwk1].GetNumber() == 222);
+ Test.Assert(hsh[nwk1].Number == nwv1.Number);
+ Test.Assert(hsh[nwk1].Number == 222);
Test.Assert(hsh[nwk2].NativeHandle == nwv2.NativeHandle);
- Test.Assert(hsh[nwk2].GetNumber() == nwv2.GetNumber());
- Test.Assert(hsh[nwk2].GetNumber() == 444);
+ Test.Assert(hsh[nwk2].Number == nwv2.Number);
+ Test.Assert(hsh[nwk2].Number == 444);
hsh.Dispose();
Test.Assert(hsh.Handle == IntPtr.Zero);
Test.Assert(t.CheckEinaHashObjInOwn(nwk1, nwv1, nwk2, nwv2));
@@ -3268,8 +3171,8 @@ class TestEinaHash
Test.Assert(t.EinaHashObjOut(out hsh, out nwk1, out nwv1));
Test.Assert(!hsh.Own);
Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle);
- Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber());
- Test.Assert(hsh[nwk1].GetNumber() == 222);
+ Test.Assert(hsh[nwk1].Number == nwv1.Number);
+ Test.Assert(hsh[nwk1].Number == 222);
Dummy.Numberwrapper nwk2 = NW(44);
Dummy.Numberwrapper nwv2 = NW(444);
hsh[nwk2] = nwv2;
@@ -3292,8 +3195,8 @@ class TestEinaHash
Test.Assert(t.EinaHashObjOutOwn(out hsh, out nwk1, out nwv1));
Test.Assert(hsh.Own);
Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle);
- Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber());
- Test.Assert(hsh[nwk1].GetNumber() == 222);
+ Test.Assert(hsh[nwk1].Number == nwv1.Number);
+ Test.Assert(hsh[nwk1].Number == 222);
Dummy.Numberwrapper nwk2 = NW(44);
Dummy.Numberwrapper nwv2 = NW(444);
hsh[nwk2] = nwv2;
@@ -3315,8 +3218,8 @@ class TestEinaHash
var hsh = t.EinaHashObjReturn(out nwk1, out nwv1);
Test.Assert(!hsh.Own);
Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle);
- Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber());
- Test.Assert(hsh[nwk1].GetNumber() == 222);
+ Test.Assert(hsh[nwk1].Number == nwv1.Number);
+ Test.Assert(hsh[nwk1].Number == 222);
Dummy.Numberwrapper nwk2 = NW(44);
Dummy.Numberwrapper nwv2 = NW(444);
hsh[nwk2] = nwv2;
@@ -3338,8 +3241,8 @@ class TestEinaHash
var hsh = t.EinaHashObjReturnOwn(out nwk1, out nwv1);
Test.Assert(hsh.Own);
Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle);
- Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber());
- Test.Assert(hsh[nwk1].GetNumber() == 222);
+ Test.Assert(hsh[nwk1].Number == nwv1.Number);
+ Test.Assert(hsh[nwk1].Number == 222);
Dummy.Numberwrapper nwk2 = NW(44);
Dummy.Numberwrapper nwv2 = NW(444);
hsh[nwk2] = nwv2;
@@ -3492,7 +3395,7 @@ class TestEinaIterator
foreach (Dummy.Numberwrapper e in itr)
{
Test.Assert(e.NativeHandle == base_objs[idx].NativeHandle);
- Test.Assert(e.GetNumber() == base_objs[idx].GetNumber());
+ Test.Assert(e.Number == base_objs[idx].Number);
++idx;
}
Test.AssertEquals(idx, base_objs.Length);
@@ -3658,7 +3561,7 @@ class TestEinaIterator
foreach (Dummy.Numberwrapper e in itr)
{
Test.Assert(e.NativeHandle == base_objs[idx].NativeHandle);
- Test.Assert(e.GetNumber() == base_objs[idx].GetNumber());
+ Test.Assert(e.Number == base_objs[idx].Number);
++idx;
}
Test.AssertEquals(idx, base_objs.Length);
@@ -4000,19 +3903,19 @@ class TestEinaIterator
hsh[a] = aa;
hsh[b] = bb;
hsh[c] = cc;
- dct[a.GetNumber()] = a;
- dct[b.GetNumber()] = b;
- dct[c.GetNumber()] = c;
+ dct[a.Number] = a;
+ dct[b.Number] = b;
+ dct[c.Number] = c;
var itr = hsh.Keys();
int idx = 0;
foreach (Dummy.Numberwrapper e in itr)
{
- Test.Assert(dct[e.GetNumber()] != null);
- Test.Assert(dct[e.GetNumber()].NativeHandle == e.NativeHandle);
- Test.Assert(dct[e.GetNumber()].GetNumber() == e.GetNumber());
- dct.Remove(e.GetNumber());
+ Test.Assert(dct[e.Number] != null);
+ Test.Assert(dct[e.Number].NativeHandle == e.NativeHandle);
+ Test.Assert(dct[e.Number].Number == e.Number);
+ dct.Remove(e.Number);
++idx;
}
Test.AssertEquals(dct.Count, 0);
@@ -4036,19 +3939,19 @@ class TestEinaIterator
hsh[a] = aa;
hsh[b] = bb;
hsh[c] = cc;
- dct[aa.GetNumber()] = aa;
- dct[bb.GetNumber()] = bb;
- dct[cc.GetNumber()] = cc;
+ dct[aa.Number] = aa;
+ dct[bb.Number] = bb;
+ dct[cc.Number] = cc;
var itr = hsh.Values();
int idx = 0;
foreach (Dummy.Numberwrapper e in itr)
{
- Test.Assert(dct[e.GetNumber()] != null);
- Test.Assert(dct[e.GetNumber()].NativeHandle == e.NativeHandle);
- Test.Assert(dct[e.GetNumber()].GetNumber() == e.GetNumber());
- dct.Remove(e.GetNumber());
+ Test.Assert(dct[e.Number] != null);
+ Test.Assert(dct[e.Number].NativeHandle == e.NativeHandle);
+ Test.Assert(dct[e.Number].Number == e.Number);
+ dct.Remove(e.Number);
++idx;
}
Test.AssertEquals(dct.Count, 0);
@@ -4489,7 +4392,7 @@ class TestEinaIterator
int idx = 0;
foreach (Dummy.Numberwrapper e in itr)
{
- Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber());
+ Test.AssertEquals(e.Number, base_seq_obj[idx].Number);
++idx;
}
Test.AssertEquals(idx, base_seq_obj.Length);
@@ -4510,7 +4413,7 @@ class TestEinaIterator
int idx = 0;
foreach (Dummy.Numberwrapper e in itr)
{
- Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber());
+ Test.AssertEquals(e.Number, base_seq_obj[idx].Number);
++idx;
}
Test.AssertEquals(idx, base_seq_obj.Length);
@@ -4529,7 +4432,7 @@ class TestEinaIterator
int idx = 0;
foreach (Dummy.Numberwrapper e in itr)
{
- Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber());
+ Test.AssertEquals(e.Number, base_seq_obj[idx].Number);
++idx;
}
Test.AssertEquals(idx, base_seq_obj.Length);
@@ -4549,7 +4452,7 @@ class TestEinaIterator
int idx = 0;
foreach (Dummy.Numberwrapper e in itr)
{
- Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber());
+ Test.AssertEquals(e.Number, base_seq_obj[idx].Number);
++idx;
}
Test.AssertEquals(idx, base_seq_obj.Length);
diff --git a/src/tests/efl_mono/EinaTestData.cs b/src/tests/efl_mono/EinaTestData.cs
index 5b8c84db81..3948b4e523 100644
--- a/src/tests/efl_mono/EinaTestData.cs
+++ b/src/tests/efl_mono/EinaTestData.cs
@@ -17,6 +17,8 @@ using System;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
+using System.Diagnostics.Contracts;
+using Eina;
namespace EinaTestData
{
@@ -47,7 +49,7 @@ public static class BaseData
public static Dummy.Numberwrapper NW(int n)
{
var nw = new Dummy.Numberwrapper();
- nw.SetNumber(n);
+ nw.Number = n;
return nw;
}
@@ -56,9 +58,9 @@ public static class BaseData
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
- a.SetNumber(0x0);
- b.SetNumber(0x2A);
- c.SetNumber(0x42);
+ a.Number = 0x0;
+ b.Number = 0x2A;
+ c.Number = 0x42;
return new Dummy.Numberwrapper[]{a, b, c};
}
@@ -67,9 +69,9 @@ public static class BaseData
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
- a.SetNumber(42);
- b.SetNumber(43);
- c.SetNumber(33);
+ a.Number = 42;
+ b.Number = 43;
+ c.Number = 33;
return new Dummy.Numberwrapper[]{a, b, c};
}
@@ -81,12 +83,12 @@ public static class BaseData
var d = new Dummy.Numberwrapper();
var e = new Dummy.Numberwrapper();
var f = new Dummy.Numberwrapper();
- a.SetNumber(0x0);
- b.SetNumber(0x2A);
- c.SetNumber(0x42);
- d.SetNumber(42);
- e.SetNumber(43);
- f.SetNumber(33);
+ a.Number = 0x0;
+ b.Number = 0x2A;
+ c.Number = 0x42;
+ d.Number = 42;
+ e.Number = 43;
+ f.Number = 33;
return new Dummy.Numberwrapper[]{a, b, c, d, e, f};
}
@@ -95,11 +97,13 @@ public static class BaseData
[ CallerLineNumber ] int line = 0,
[ CallerFilePath ] string file = null,
[ CallerMemberName ] string member = null) {
- Test.Assert(a.Length == b.Length, "Different lenght", line, file, member);
+ Contract.Requires(a != null, nameof(a));
+ Contract.Requires(b != null, nameof(b));
+ Test.Assert(a.Length == b.Length, "Different length", line, file, member);
for (int i = 0; i < a.Length; ++i)
{
- int av = a[i].GetNumber();
- int bv = b[i].GetNumber();
+ int av = a[i].Number;
+ int bv = b[i].Number;
Test.Assert(av == bv, $"Different values for element [{i}]: {av} == {bv}", line, file, member);
}
}
diff --git a/src/tests/efl_mono/Eo.cs b/src/tests/efl_mono/Eo.cs
index af40bf12d8..641ddc0748 100644
--- a/src/tests/efl_mono/Eo.cs
+++ b/src/tests/efl_mono/Eo.cs
@@ -149,8 +149,8 @@ class TestEoNames
var obj = new Dummy.TestObject();
string name = "Dummy";
- obj.SetName(name);
- Test.AssertEquals(name, obj.GetName());
+ obj.Name = name;
+ Test.AssertEquals(name, obj.Name);
obj.Dispose();
}
}
@@ -162,9 +162,9 @@ class TestEoParent
var parent = new Dummy.TestObject(null);
var child = new Dummy.TestObject(parent);
- Test.AssertEquals(parent, child.GetParent());
+ Test.AssertEquals(parent, child.Parent);
- var parent_retrieved = child.GetParent() as Dummy.TestObject;
+ var parent_retrieved = child.Parent as Dummy.TestObject;
Test.AssertEquals(parent, parent_retrieved);
child.Dispose();
parent.Dispose();
@@ -175,9 +175,9 @@ class TestEoParent
Dummy.Numberwrapper parent = new Dummy.Numberwrapper(null);
var child = new Dummy.TestObject(parent);
- Test.AssertEquals(parent, child.GetParent());
+ Test.AssertEquals(parent, child.Parent);
- Dummy.Numberwrapper parent_retrieved = child.GetParent() as Dummy.Numberwrapper;
+ Dummy.Numberwrapper parent_retrieved = child.Parent as Dummy.Numberwrapper;
Test.AssertEquals(parent, parent_retrieved);
child.Dispose();
parent.Dispose();
@@ -195,9 +195,9 @@ class TestEoParent
var parent = new Derived(null);
var child = new Derived(parent);
- Test.AssertEquals(parent, child.GetParent());
+ Test.AssertEquals(parent, child.Parent);
- var parent_from_cast = child.GetParent() as Derived;
+ var parent_from_cast = child.Parent as Derived;
Test.AssertEquals(parent, parent_from_cast);
child.Dispose();
parent.Dispose();
@@ -209,15 +209,15 @@ class TestKlassMethods
public static void basic_class_method()
{
int reference = 0xbeef;
- Dummy.TestObject.SetKlassProp(reference);
- Test.AssertEquals(reference, Dummy.TestObject.GetKlassProp());
+ Dummy.TestObject.KlassProp = reference;
+ Test.AssertEquals(reference, Dummy.TestObject.KlassProp);
}
public static void inherited_class_method()
{
int reference = 0xdead;
- Dummy.Child.SetKlassProp(reference);
- Test.AssertEquals(reference, Dummy.Child.GetKlassProp());
+ Dummy.Child.KlassProp = reference;
+ Test.AssertEquals(reference, Dummy.Child.KlassProp);
}
}
@@ -385,6 +385,16 @@ class TestEoMultipleChildClasses
class TestCsharpProperties
{
+
+ private class MyObject : Dummy.TestObject
+ {
+ public MyObject(Efl.Object parent = null) : base(parent)
+ {
+ }
+ private MyObject(ConstructingHandle ch) : base(ch)
+ {
+ }
+ }
public static void test_csharp_properties()
{
var obj = new Dummy.TestObject();
@@ -402,15 +412,15 @@ class TestCsharpProperties
obj.Dispose();
}
- // public static void test_setter_only()
- // {
- // var obj = new Dummy.TestObject();
- // int val = -1984;
+ public static void test_setter_only()
+ {
+ var obj = new Dummy.TestObject();
+ int val = -1984;
- // obj.SetterOnly = val;
- // Test.AssertEquals(val, obj.GetSetterOnly());
- // obj.Dispose();
- // }
+ obj.SetSetterOnly(val);
+ Test.AssertEquals(val, obj.GetSetterOnly());
+ obj.Dispose();
+ }
public static void test_class_property()
{
@@ -428,6 +438,28 @@ class TestCsharpProperties
iface.Dispose();
}
+ public static void test_iface_value_property()
+ {
+ var obj = new Dummy.TestObject();
+ var prop = new MyObject();
+
+ obj.IfaceValueProp = prop;
+ Test.AssertEquals(obj.IfaceValueProp, prop);
+
+ obj.Dispose();
+ prop.Dispose();
+ }
+
+ public static void test_iface_value_from_c()
+ {
+ var obj = new Dummy.TestObject();
+
+ obj.SetIfaceKlassProp(typeof(MyObject));
+ Test.AssertEquals(obj.IfaceValueFromC.GetType(), typeof(MyObject));
+
+ obj.Dispose();
+ }
+
public static void test_csharp_multi_valued_prop()
{
var obj = new Dummy.TestObject();
@@ -437,50 +469,25 @@ class TestCsharpProperties
obj.Dispose();
}
- public static void test_csharp_keyed_multi_valued_prop()
+ public static void test_csharp_return_type_get_prop ()
{
var obj = new Dummy.TestObject();
- obj.KeyedMultiValuedProp[100] = (1, 2);
- Test.AssertEquals(obj.KeyedMultiValuedProp[100], (1, 2));
- obj.Dispose();
+ obj.ReturnTypeGetProp = 5;
+ var i = obj.ReturnTypeGetProp;
}
- public static void test_csharp_multi_keyed_multi_valued_prop()
+ public static void test_csharp_return_type_set_prop ()
{
var obj = new Dummy.TestObject();
- obj.MultiKeyedMultiValuedProp[(100, 101)] = (1, 2);
- Test.AssertEquals(obj.MultiKeyedMultiValuedProp[(100, 101)], (1, 2));
- obj.Dispose();
+ obj.ReturnTypeSetProp = 5;
+ var i = obj.ReturnTypeSetProp;
}
- public static void test_csharp_multi_prop()
+ public static void test_csharp_return_type_prop ()
{
var obj = new Dummy.TestObject();
- obj.MultiKeyedMultiValuedProp[(100, 101)] = (1, 2);
- obj.KeyedMultiValuedProp[100] = (1, 2);
- Test.AssertEquals(obj.KeyedMultiValuedProp[100],
- obj.MultiKeyedMultiValuedProp[(100, 101)]);
- int a1, b1, a2, b2;
-#if __MonoCS__
- (int a, int b) t1 = obj.MultiKeyedMultiValuedProp[(100, 101)];
- (a1, b1) = (t1.Item1, t1.Item2);
- (int a, int b) t2 = obj.KeyedMultiValuedProp[100];
- (a2, b2) = (t2.Item1, t2.Item2);
-#else
- (a1, b1) = obj.MultiKeyedMultiValuedProp[(100, 101)];
- (a2, b2) = obj.KeyedMultiValuedProp[100];
-#endif
- Test.AssertEquals(a1, a2);
- Test.AssertEquals(b1, b2);
- var i = (100, 101);
- var j = 100;
- Test.AssertEquals(obj.KeyedMultiValuedProp[j],
- obj.MultiKeyedMultiValuedProp[i]);
- obj.MultiKeyedMultiValuedProp[i] = (1, 3);
- obj.KeyedMultiValuedProp[j] = obj.MultiKeyedMultiValuedProp[i];
- Test.AssertEquals(obj.KeyedMultiValuedProp[j],
- obj.MultiKeyedMultiValuedProp[i]);
-
+ obj.ReturnTypeProp = 5;
+ var i = obj.ReturnTypeProp;
}
}
@@ -573,7 +580,7 @@ class TestConstructors
#else
var obj = new Dummy.Child(null, a, b);
#endif
- Test.Assert(!obj.GetIfaceWasSet());
+ Test.Assert(!obj.IfaceWasSet);
obj.Dispose();
}
}
@@ -600,7 +607,7 @@ class TestProvider
var obj = new Dummy.TestObject();
Dummy.Numberwrapper provider = obj.FindProvider(typeof(Dummy.Numberwrapper)) as Dummy.Numberwrapper;
Test.AssertEquals(provider.GetType(), typeof(Dummy.Numberwrapper));
- Test.AssertEquals(provider.GetNumber(), 1999);
+ Test.AssertEquals(provider.Number, 1999);
obj.Dispose();
}
@@ -699,16 +706,16 @@ class TestProtectedInterfaceMembers
{
var type = typeof(Dummy.ITestIface);
var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance);
+ var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
// Fully protected property
Test.AssertNull(methods.SingleOrDefault(m => m.Name == "GetProtectedProp"));
Test.AssertNull(methods.SingleOrDefault(m => m.Name == "SetProtectedProp"));
// Partially protected property
- Test.AssertNotNull(methods.SingleOrDefault(m => m.Name == "GetPublicGetterPrivateSetter"));
+ Test.AssertNotNull(properties.SingleOrDefault(m => m.Name == "PublicGetterPrivateSetter"));
Test.AssertNull(methods.SingleOrDefault(m => m.Name == "SetPublicGetterPrivateSetter"));
- var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
Test.AssertNull(properties.SingleOrDefault(m => m.Name == "ProtectedProp"));
Test.AssertNotNull(properties.SingleOrDefault(m => m.Name == "PublicGetterPrivateSetter"));
}
@@ -717,15 +724,16 @@ class TestProtectedInterfaceMembers
{
var type = typeof(Dummy.TestObject);
- // Fully protected property
- var protected_methods = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).Where(m => m.IsFamily);
- Test.AssertNotNull(protected_methods.SingleOrDefault(m => m.Name == "GetProtectedProp"));
- Test.AssertNotNull(protected_methods.SingleOrDefault(m => m.Name == "SetProtectedProp"));
+ // Fully internal property
+ var internal_methods = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).Where(m => m.IsAssembly);
+ Test.AssertNotNull(internal_methods.SingleOrDefault(m => m.Name == "GetProtectedProp"));
+ Test.AssertNotNull(internal_methods.SingleOrDefault(m => m.Name == "SetProtectedProp"));
// Partially protected property
var public_methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance);
- Test.AssertNotNull(public_methods.SingleOrDefault(m => m.Name == "GetPublicGetterPrivateSetter"));
- Test.AssertNotNull(protected_methods.SingleOrDefault(m => m.Name == "SetPublicGetterPrivateSetter"));
+ Test.AssertNull(public_methods.SingleOrDefault(m => m.Name == "GetPublicGetterPrivateSetter"));
+ Test.AssertNotNull(internal_methods.SingleOrDefault(m => m.Name == "GetPublicGetterPrivateSetter"));
+ Test.AssertNotNull(internal_methods.SingleOrDefault(m => m.Name == "SetPublicGetterPrivateSetter"));
var protected_properties = type.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
var prop = protected_properties.SingleOrDefault(m => m.Name == "ProtectedProp");
diff --git a/src/tests/efl_mono/Events.cs b/src/tests/efl_mono/Events.cs
index 824d9a132c..635e005c12 100644
--- a/src/tests/efl_mono/Events.cs
+++ b/src/tests/efl_mono/Events.cs
@@ -15,6 +15,7 @@
*/
using System;
using System.Linq;
+using System.Collections.Generic;
namespace TestSuite
{
@@ -29,7 +30,7 @@ class TestEoEvents
Efl.Object obj = sender as Efl.Object;
if (obj != null)
{
- obj.SetName("loop_called");
+ obj.Name = "loop_called";
correct_sender = true;
}
@@ -43,18 +44,18 @@ class TestEoEvents
public static void idle_event()
{
Efl.Loop loop = Efl.App.AppMain;
- loop.SetName("loop");
+ loop.Name = "loop";
TestEoEvents listener = new TestEoEvents();
listener.loop = loop;
loop.IdleEvent += listener.callback;
Test.Assert(!listener.called);
Test.Assert(!listener.correct_sender);
- Test.AssertEquals("loop", loop.GetName());
+ Test.AssertEquals("loop", loop.Name);
loop.Begin();
Test.Assert(listener.called);
Test.Assert(listener.correct_sender);
- Test.AssertEquals("loop_called", loop.GetName());
+ Test.AssertEquals("loop_called", loop.Name);
loop.IdleEvent -= listener.callback;
}
@@ -65,7 +66,7 @@ class TestEoEvents
string received_string = null;
obj.EvtWithStringEvent += (object sender, Dummy.TestObjectEvtWithStringEventArgs e) => {
- received_string = e.arg;
+ received_string = e.Arg;
};
obj.EmitEventWithString("Some args");
@@ -80,7 +81,7 @@ class TestEoEvents
int received_int= 0;
obj.EvtWithIntEvent += (object sender, Dummy.TestObjectEvtWithIntEventArgs e) => {
- received_int = e.arg;
+ received_int = e.Arg;
};
obj.EmitEventWithInt(-1984);
@@ -95,7 +96,7 @@ class TestEoEvents
bool received_bool = false;
obj.EvtWithBoolEvent += (object sender, Dummy.TestObjectEvtWithBoolEventArgs e) => {
- received_bool = e.arg;
+ received_bool = e.Arg;
};
obj.EmitEventWithBool(true);
@@ -113,7 +114,7 @@ class TestEoEvents
var obj = new Dummy.TestObject();
uint received_uint = 0;
obj.EvtWithUintEvent += (object sender, Dummy.TestObjectEvtWithUintEventArgs e) => {
- received_uint = e.arg;
+ received_uint = e.Arg;
};
obj.EmitEventWithUint(0xbeef);
@@ -127,7 +128,7 @@ class TestEoEvents
var obj = new Dummy.TestObject();
float received_float = 0;
obj.EvtWithFloatEvent += (object sender, Dummy.TestObjectEvtWithFloatEventArgs e) => {
- received_float = e.arg;
+ received_float = e.Arg;
};
obj.EmitEventWithFloat(3.14f);
@@ -142,7 +143,7 @@ class TestEoEvents
double received_double = 0;
double reference = float.MaxValue + 42;
obj.EvtWithDoubleEvent += (object sender, Dummy.TestObjectEvtWithDoubleEventArgs e) => {
- received_double = e.arg;
+ received_double = e.Arg;
};
obj.EmitEventWithDouble(reference);
@@ -157,7 +158,7 @@ class TestEoEvents
Dummy.TestObject received_obj = null;
obj.EvtWithObjEvent += (object sender, Dummy.TestObjectEvtWithObjEventArgs e) => {
- received_obj = e.arg;
+ received_obj = e.Arg;
};
var sent_obj = new Dummy.TestObject();
@@ -175,7 +176,7 @@ class TestEoEvents
Eina.Error received_error = 0;
obj.EvtWithErrorEvent += (object sender, Dummy.TestObjectEvtWithErrorEventArgs e) => {
- received_error = e.arg;
+ received_error = e.Arg;
};
Eina.Error sent_error = -2001;
@@ -192,11 +193,10 @@ class TestEoEvents
Dummy.StructSimple received_struct = default(Dummy.StructSimple);
obj.EvtWithStructEvent += (object sender, Dummy.TestObjectEvtWithStructEventArgs e) => {
- received_struct = e.arg;
+ received_struct = e.Arg;
};
- Dummy.StructSimple sent_struct = default(Dummy.StructSimple);
- sent_struct.Fstring = "Struct Event";
+ Dummy.StructSimple sent_struct = new Dummy.StructSimple(fstring: "Struct Event");
obj.EmitEventWithStruct(sent_struct);
@@ -211,7 +211,7 @@ class TestEoEvents
Dummy.StructComplex received_struct = default(Dummy.StructComplex);
obj.EvtWithStructComplexEvent += (object sender, Dummy.TestObjectEvtWithStructComplexEventArgs e) => {
- received_struct = e.arg;
+ received_struct = e.Arg;
};
Dummy.StructComplex sent_struct = StructHelpers.structComplexWithValues();
@@ -226,7 +226,7 @@ class TestEoEvents
public static void event_with_array_payload()
{
var obj = new Dummy.TestObject();
- Eina.Array<string> received = null;
+ List<string> received = null;
Eina.Array<string> sent = new Eina.Array<string>();
sent.Append("Abc");
@@ -234,7 +234,7 @@ class TestEoEvents
sent.Append("Ghi");
obj.EvtWithArrayEvent += (object sender, Dummy.TestObjectEvtWithArrayEventArgs e) => {
- received = e.arg;
+ received = e.Arg as List<string>;
};
obj.EmitEventWithArray(sent);
@@ -246,7 +246,6 @@ class TestEoEvents
Test.AssertEquals(pair.Sent, pair.Received);
}
sent.Dispose();
- received.Dispose();
obj.Dispose();
}
}
@@ -320,7 +319,7 @@ class TestEventWithDeadWrappers
EventHandler<Dummy.TestObjectEvtWithIntEventArgs> cb)
{
var obj = new Dummy.TestObject();
- manager.Emitter = obj;
+ manager.SetEmitter(obj);
obj.EvtWithIntEvent += cb;
return new WeakReference(obj);
@@ -338,7 +337,7 @@ class TestEventWithDeadWrappers
// attach to evt with int
EventHandler<Dummy.TestObjectEvtWithIntEventArgs> cb = (object sender, Dummy.TestObjectEvtWithIntEventArgs args) => {
callbackCalled = true;
- received = args.arg;
+ received = args.Arg;
Test.Assert(Object.ReferenceEquals(sender, wref.Target));
};
diff --git a/src/tests/efl_mono/Model.cs b/src/tests/efl_mono/Model.cs
index bb6ba3b01c..bdf30b341d 100644
--- a/src/tests/efl_mono/Model.cs
+++ b/src/tests/efl_mono/Model.cs
@@ -3,6 +3,7 @@
using System;
using System.Threading.Tasks;
using System.Diagnostics.CodeAnalysis;
+using Efl.Ui;
#if EFL_BETA
@@ -41,7 +42,7 @@ public static class TestModel {
var veggies = CreateModel(loop);
var model = new Efl.GenericModel<VeggieViewModel>(veggies, loop);
- Test.AssertEquals(3, (int)model.GetChildrenCount());
+ Test.AssertEquals(3, (int)model.ChildrenCount);
VeggieViewModel r2 = await model.GetAtAsync(1).ConfigureAwait(false);
Test.AssertEquals(r2.Name, "Romaine Lettuce");
@@ -68,11 +69,11 @@ public static class TestModel {
{
string propertyBound = null;
bool callbackCalled = false;
- var parent = new Efl.Ui.Win(null);
+ var parent = new Efl.Ui.Win(null, "", "");
parent.Visible = false;
var factory = new Efl.Ui.ItemFactory<Efl.Ui.Button>(parent);
factory.PropertyBoundEvent += (object sender, Efl.Ui.PropertyBindPropertyBoundEventArgs args) => {
- propertyBound = args.arg;
+ propertyBound = args.Arg;
callbackCalled = true;
};
diff --git a/src/tests/efl_mono/Parts.cs b/src/tests/efl_mono/Parts.cs
index 3e2da24152..e33ce96918 100644
--- a/src/tests/efl_mono/Parts.cs
+++ b/src/tests/efl_mono/Parts.cs
@@ -19,6 +19,7 @@
using System;
using System.Diagnostics.CodeAnalysis;
+using Efl.Ui;
namespace TestSuite {
@@ -50,9 +51,9 @@ public static class TestParts
var p1 = t.OnePart;
var p2 = t.TwoPart;
Test.Assert(p1 is Dummy.TestObject);
- Test.AssertEquals("part_one", p1.GetName());
+ Test.AssertEquals("part_one", p1.Name);
Test.Assert(p2 is Dummy.TestObject);
- Test.AssertEquals("part_two", p2.GetName());
+ Test.AssertEquals("part_two", p2.Name);
}
}
@@ -60,7 +61,7 @@ public static class TestMVVMParts
{
public static void mvvm_dynamic_parts()
{
- var parent = new Efl.Ui.Win(null);
+ var parent = new Efl.Ui.Win(null, "", "");
parent.Visible = false;
var factory = new Efl.Ui.ItemFactory<Efl.Ui.ListDefaultItem>(parent);
@@ -74,7 +75,7 @@ public static class TestMVVMParts
public static void mvvm_factory_properties()
{
- var parent = new Efl.Ui.Win(null);
+ var parent = new Efl.Ui.Win(null, "", "");
parent.Visible = false;
var factory = new Efl.Ui.ItemFactory<Efl.Ui.ListDefaultItem>(parent);
var iconFactory = new Efl.Ui.ImageFactory(null);
@@ -96,9 +97,9 @@ public static class TestNamedParts
var p1 = obj.GetPart("one");
var p2 = obj.GetPart("two");
Test.Assert(p1 is Dummy.TestObject);
- Test.AssertEquals("part_one", p1.GetName());
+ Test.AssertEquals("part_one", p1.Name);
Test.Assert(p2 is Dummy.TestObject);
- Test.AssertEquals("part_two", p2.GetName());
+ Test.AssertEquals("part_two", p2.Name);
obj.Dispose();
}
}
diff --git a/src/tests/efl_mono/StructHelpers.cs b/src/tests/efl_mono/StructHelpers.cs
index 781dbc16f1..b6ceac4bd8 100644
--- a/src/tests/efl_mono/StructHelpers.cs
+++ b/src/tests/efl_mono/StructHelpers.cs
@@ -16,7 +16,9 @@
using System;
using System.Linq;
using System.Runtime.InteropServices;
+using System.Collections.Generic;
+using Eina;
using static EinaTestData.BaseData;
namespace TestSuite
@@ -28,40 +30,38 @@ internal class StructHelpers
internal static Dummy.StructSimple structSimpleWithValues()
{
- var simple = new Dummy.StructSimple();
-
- simple.Fbyte = (sbyte)-126;
- simple.Fubyte = (byte) 254u;
- simple.Fchar = '~';
- simple.Fshort = (short) -32766;
- simple.Fushort = (ushort) 65534u;
- simple.Fint = -32766;
- simple.Fuint = 65534u;
- simple.Flong = -2147483646;
- simple.Fulong = 4294967294u;
- simple.Fllong = -9223372036854775806;
- simple.Fullong = 18446744073709551614u;
- simple.Fint8 = (sbyte) -126;
- simple.Fuint8 = (byte) 254u;
- simple.Fint16 = (short) -32766;
- simple.Fuint16 = (ushort) 65534u;
- simple.Fint32 = -2147483646;
- simple.Fuint32 = 4294967294u;
- simple.Fint64 = -9223372036854775806;
- simple.Fuint64 = 18446744073709551614u;
- simple.Fssize = -2147483646;
- simple.Fsize = 4294967294u;
- simple.Fintptr = (IntPtr) 0xFE;
- simple.Fptrdiff = -2147483646;
- simple.Ffloat = -16777216.0f;
- simple.Fdouble = -9007199254740992.0;
- simple.Fbool = true;
- simple.Fenum = Dummy.SampleEnum.V2;
- simple.Fstring = "test/string";
- simple.Fmstring = "test/mstring";
- simple.Fstringshare = "test/stringshare";
-
- return simple;
+ return new Dummy.StructSimple(
+ fbyte: (sbyte)-126,
+ fubyte: (byte) 254u,
+ fchar: '~',
+ fshort: (short) -32766,
+ fushort: (ushort) 65534u,
+ fint: -32766,
+ fuint: 65534u,
+ flong: -2147483646,
+ fulong: 4294967294u,
+ fllong: -9223372036854775806,
+ fullong: 18446744073709551614u,
+ fint8: (sbyte) -126,
+ fuint8: (byte) 254u,
+ fint16: (short) -32766,
+ fuint16: (ushort) 65534u,
+ fint32: -2147483646,
+ fuint32: 4294967294u,
+ fint64: -9223372036854775806,
+ fuint64: 18446744073709551614u,
+ fssize: -2147483646,
+ fsize: 4294967294u,
+ fintptr: (IntPtr) 0xFE,
+ fptrdiff: -2147483646,
+ ffloat: -16777216.0f,
+ fdouble: -9007199254740992.0,
+ fbool: true,
+ fenum: Dummy.SampleEnum.V2,
+ fstring: "test/string",
+ fmstring: "test/mstring",
+ fstringshare: "test/stringshare"
+ );
}
internal static void checkStructSimple(Dummy.StructSimple simple)
@@ -135,42 +135,51 @@ internal class StructHelpers
#if EFL_BETA
internal static Dummy.StructComplex structComplexWithValues()
{
- var complex = new Dummy.StructComplex();
-
- complex.Farray = new Eina.Array<string>();
- complex.Farray.Push("0x0");
- complex.Farray.Push("0x2A");
- complex.Farray.Push("0x42");
-
- complex.Flist = new Eina.List<string>();
- complex.Flist.Append("0x0");
- complex.Flist.Append("0x2A");
- complex.Flist.Append("0x42");
-
- complex.Fhash = new Eina.Hash<string, string>();
- complex.Fhash["aa"] = "aaa";
- complex.Fhash["bb"] = "bbb";
- complex.Fhash["cc"] = "ccc";
-
- complex.Fiterator = complex.Farray.GetIterator();
-
- complex.Fany_value = new Eina.Value(Eina.ValueType.Double);
- complex.Fany_value.Set(-9007199254740992.0);
-
- complex.Fany_value_ref = new Eina.Value(Eina.ValueType.String);
- complex.Fany_value_ref.Set("abc");
-
- complex.Fbinbuf = new Eina.Binbuf();
- complex.Fbinbuf.Append(126);
-
- complex.Fslice.Length = 1;
- complex.Fslice.Mem = Eina.MemoryNative.Alloc(1);
- Marshal.WriteByte(complex.Fslice.Mem, 125);
-
- complex.Fobj = new Dummy.Numberwrapper();
- complex.Fobj.SetNumber(42);
-
- return complex;
+ var Farray = new Eina.Array<string>();
+ Farray.Add("0x0");
+ Farray.Add("0x2A");
+ Farray.Add("0x42");
+
+ var Flist = new Eina.List<string>();
+ Flist.Add("0x0");
+ Flist.Add("0x2A");
+ Flist.Add("0x42");
+
+ var Fhash = new Eina.Hash<string, string>();
+ Fhash["aa"] = "aaa";
+ Fhash["bb"] = "bbb";
+ Fhash["cc"] = "ccc";
+
+ var Fiterator = ((Eina.Array<string>)Farray).GetIterator();
+ var Faccessor = ((Eina.Array<string>)Farray).GetAccessor();
+
+ var Fany_value = new Eina.Value(Eina.ValueType.Double);
+ Fany_value.Set(-9007199254740992.0);
+
+ var Fany_value_ref = new Eina.Value(Eina.ValueType.String);
+ Fany_value_ref.Set("abc");
+
+ var Fbinbuf = new Eina.Binbuf();
+ Fbinbuf.Append(126);
+
+ var Fslice = new Eina.Slice(Eina.MemoryNative.Alloc(1), (UIntPtr)1);
+ Marshal.WriteByte(Fslice.Mem, 125);
+
+ var Fobj = new Dummy.Numberwrapper();
+ Fobj.Number = 42;
+
+ return new Dummy.StructComplex(
+ farray: Farray,
+ flist: Flist,
+ fhash: Fhash,
+ fiterator: Fiterator,
+ faccessor: Faccessor,
+ fanyValue:Fany_value,
+ fanyValueRef: Fany_value_ref,
+ fbinbuf: Fbinbuf,
+ fslice:Fslice,
+ fobj: Fobj
+ );
}
internal static void checkStructComplex(Dummy.StructComplex complex)
@@ -192,11 +201,11 @@ internal class StructHelpers
Test.AssertEquals(idx, base_seq_str.Length);
double double_val = 0;
- Test.Assert(complex.Fany_value.Get(out double_val));
+ Test.Assert(complex.FanyValue.Get(out double_val));
Test.Assert(double_val == -9007199254740992.0);
string str_val = null;
- Test.Assert(complex.Fany_value_ref.Get(out str_val));
+ Test.Assert(complex.FanyValueRef.Get(out str_val));
Test.Assert(str_val == "abc");
Test.Assert(complex.Fbinbuf.Length == 1);
@@ -206,7 +215,7 @@ internal class StructHelpers
Test.Assert(complex.Fslice.GetBytes()[0] == 125);
Test.Assert(complex.Fobj != null);
- Test.Assert(complex.Fobj.GetNumber() == 42);
+ Test.Assert(complex.Fobj.Number == 42);
}
@@ -216,8 +225,8 @@ internal class StructHelpers
Test.Assert(complex.Flist == null);
Test.Assert(complex.Fhash == null);
Test.Assert(complex.Fiterator == null);
- Test.Assert(complex.Fany_value == null);
- Test.Assert(complex.Fany_value_ref == null);
+ Test.Assert(complex.FanyValue == null);
+ Test.Assert(complex.FanyValueRef == null);
Test.Assert(complex.Fbinbuf == null);
Test.Assert(complex.Fslice.Length == 0);
diff --git a/src/tests/efl_mono/Structs.cs b/src/tests/efl_mono/Structs.cs
index d546298908..334057c907 100644
--- a/src/tests/efl_mono/Structs.cs
+++ b/src/tests/efl_mono/Structs.cs
@@ -180,8 +180,7 @@ internal class TestStructs
public override bool StructSimpleOut(out Dummy.StructSimple simple) {
called = true;
- simple = new Dummy.StructSimple();
- simple.Fstring = "Virtual Struct Out";
+ simple = new Dummy.StructSimple(fstring: "Virtual Struct Out");
return true;
}
@@ -206,8 +205,7 @@ internal class TestStructs
public override Dummy.StructSimple StructSimpleReturn()
{
called = true;
- var simple = new Dummy.StructSimple();
- simple.Fstring = "Virtual Struct Return";
+ var simple = new Dummy.StructSimple(fstring: "Virtual Struct Return");
return simple;
}
@@ -234,7 +232,6 @@ internal class TestStructs
{
StructReturner t = new StructReturner();
var simple = structSimpleWithValues();
- simple.Fstring = "Virtual Struct In";
t.CallStructSimpleIn(simple);
Test.Assert(t.called);
@@ -352,6 +349,50 @@ internal class TestStructs
t.Dispose();
}
+ public static void complex_iterator_retrieves_list_correctly()
+ {
+ var complex = structComplexWithValues();
+
+ var i = 0;
+ foreach (var elm in complex.Fiterator) {
+ Test.AssertEquals(elm, complex.Flist[i]);
+ i++;
+ }
+ }
+
+ public static void complex_iterator_retrieves_array_correctly()
+ {
+ var complex = structComplexWithValues();
+
+ var i = 0;
+ foreach (var elm in complex.Fiterator) {
+ Test.AssertEquals(elm, complex.Farray[i]);
+ i++;
+ }
+ }
+
+ public static void complex_accessor_retrieves_list_correctly()
+ {
+ var complex = structComplexWithValues();
+
+ var i = 0;
+ foreach (var elm in complex.Faccessor) {
+ Test.AssertEquals(elm, complex.Flist[i]);
+ i++;
+ }
+ }
+
+ public static void complex_accessor_retrieves_array_correctly()
+ {
+ var complex = structComplexWithValues();
+
+ var i = 0;
+ foreach (var elm in complex.Faccessor) {
+ Test.AssertEquals(elm, complex.Farray[i]);
+ i++;
+ }
+ }
+
// public static void complex_ptr_out()
// {
// }
@@ -379,13 +420,13 @@ internal class TestStructs
internal class TestStructEquality
{
- static Dummy.StructSimple a = new Dummy.StructSimple(1, 2, (char)3, 4, Fstring: "", Fmstring: "", Fstringshare: "");
- static Dummy.StructSimple b = new Dummy.StructSimple(1, 2, (char)3, 4, Fstring: "", Fmstring: "", Fstringshare: "");
+ static Dummy.StructSimple a = new Dummy.StructSimple(1, 2, (char)3, 4, fstring: "", fmstring: "", fstringshare: "");
+ static Dummy.StructSimple b = new Dummy.StructSimple(1, 2, (char)3, 4, fstring: "", fmstring: "", fstringshare: "");
- static Dummy.StructSimple c = new Dummy.StructSimple(4, 3, (char)2, 1, Fstring: "", Fmstring: "", Fstringshare: "");
+ static Dummy.StructSimple c = new Dummy.StructSimple(4, 3, (char)2, 1, fstring: "", fmstring: "", fstringshare: "");
// to check if we differ on a single struct field
- static Dummy.StructSimple singleDifferentField = new Dummy.StructSimple(1, 2, (char)3, 5, Fstring: "", Fmstring: "", Fstringshare: "");
+ static Dummy.StructSimple singleDifferentField = new Dummy.StructSimple(1, 2, (char)3, 5, fstring: "", fmstring: "", fstringshare: "");
public static void test_equals()
{
@@ -458,15 +499,14 @@ internal class TestStructTuples
#if EFL_BETA
public static void test_complex_fields_assign_conversion() {
var pos = new Eina.Position2D(1, 2);
- var action = Efl.Ui.SelectionAction.Unknown;
- var format = Efl.Ui.SelectionFormat.None;
- var item = null as Efl.Canvas.Vg.Object;
-
- Efl.Dnd.DragPos attr = (pos, action, format, item);
- Test.AssertEquals(attr.Pos, pos);
- Test.AssertEquals(attr.Action, action);
- Test.AssertEquals(attr.Format, format);
- Test.AssertEquals(attr.Item, item);
+ uint seat = 3;
+ var types = new System.String[] {"text", "markup"};
+
+ Efl.Ui.DropEvent attr = (pos, seat, types);
+ Test.AssertEquals(attr.Position, pos);
+ Test.AssertEquals(attr.Seat, seat);
+ Test.AssertEquals(attr.AvailableTypes.ElementAt(0), types[0]);
+ Test.AssertEquals(attr.AvailableTypes.ElementAt(1), types[1]);
}
#endif
}
diff --git a/src/tests/efl_mono/Value.cs b/src/tests/efl_mono/Value.cs
index 29856d44ce..a82893947e 100644
--- a/src/tests/efl_mono/Value.cs
+++ b/src/tests/efl_mono/Value.cs
@@ -877,6 +877,510 @@ public static class TestEinaValue {
}
}
+ public static void TestInsertValueArrayOfSByte()
+ {
+ using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.SByte)) {
+ Test.AssertEquals(0, array.Count());
+ Test.Assert(!array.Insert(0, 3));
+ Test.Assert(!array.Insert(0, 1));
+ Test.Assert(!array.Insert(-123, 12));
+ Test.AssertEquals(0, array.Count());
+
+ Test.Assert(array.Insert(0, 0));
+ Test.AssertEquals(1, array.Count());
+ Test.Assert(array.Insert(6, 1));
+ Test.AssertEquals(2, array.Count());
+ Test.Assert(array.Insert(-122, 0));
+ Test.AssertEquals(3, array.Count());
+ Test.Assert(array.Insert(30, 1));
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((sbyte)array[0], (sbyte)-122);
+ Test.AssertEquals((sbyte)array[1], (sbyte)30);
+ Test.AssertEquals((sbyte)array[2], (sbyte)0);
+ Test.AssertEquals((sbyte)array[3], (sbyte)6);
+
+ array[0] = 120;
+ array[1] = -42;
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((sbyte)array[0], (sbyte)120);
+ Test.AssertEquals((sbyte)array[1], (sbyte)-42);
+ Test.AssertEquals((sbyte)array[2], (sbyte)0);
+ Test.AssertEquals((sbyte)array[3], (sbyte)6);
+
+ Test.AssertEquals("[120, -42, 0, 6]", array.ToString());
+ }
+ }
+
+ public static void TestInsertValueArrayOfByte()
+ {
+ using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Byte)) {
+ Test.AssertEquals(0, array.Count());
+ Test.Assert(!array.Insert(0, 3));
+ Test.Assert(!array.Insert(0, 1));
+ Test.Assert(!array.Insert(123, 12));
+ Test.AssertEquals(0, array.Count());
+
+ Test.Assert(array.Insert(0, 0));
+ Test.AssertEquals(1, array.Count());
+ Test.Assert(array.Insert(6, 1));
+ Test.AssertEquals(2, array.Count());
+ Test.Assert(array.Insert(122, 0));
+ Test.AssertEquals(3, array.Count());
+ Test.Assert(array.Insert(30, 1));
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((byte)array[0], (byte)122);
+ Test.AssertEquals((byte)array[1], (byte)30);
+ Test.AssertEquals((byte)array[2], (byte)0);
+ Test.AssertEquals((byte)array[3], (byte)6);
+
+ array[0] = 120;
+ array[1] = 42;
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((byte)array[0], (byte)120);
+ Test.AssertEquals((byte)array[1], (byte)42);
+ Test.AssertEquals((byte)array[2], (byte)0);
+ Test.AssertEquals((byte)array[3], (byte)6);
+
+ Test.AssertEquals("[120, 42, 0, 6]", array.ToString());
+ }
+ }
+
+ public static void TestInsertValueArrayOfInts()
+ {
+ using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) {
+ Test.AssertEquals(0, array.Count());
+ Test.Assert(!array.Insert(0, 3));
+ Test.Assert(!array.Insert(0, 1));
+ Test.Assert(!array.Insert(123, 12));
+ Test.AssertEquals(0, array.Count());
+
+ Test.Assert(array.Insert(0, 0));
+ Test.AssertEquals(1, array.Count());
+ Test.Assert(array.Insert(1, 1));
+ Test.AssertEquals(2, array.Count());
+ Test.Assert(array.Insert(5, 0));
+ Test.AssertEquals(3, array.Count());
+ Test.Assert(array.Insert(42, 1));
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((int)array[0], (int)5);
+ Test.AssertEquals((int)array[1], (int)42);
+ Test.AssertEquals((int)array[2], (int)0);
+ Test.AssertEquals((int)array[3], (int)1);
+
+ array[0] = 1984;
+ array[1] = -42;
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((int)array[0], (int)1984);
+ Test.AssertEquals((int)array[1], (int)-42);
+ Test.AssertEquals((int)array[2], (int)0);
+ Test.AssertEquals((int)array[3], (int)1);
+
+ Test.AssertEquals("[1984, -42, 0, 1]", array.ToString());
+ }
+ }
+
+ public static void TestInsertValueArrayOfInt64s()
+ {
+ using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int64)) {
+ Test.AssertEquals(0, array.Count());
+ Test.Assert(!array.Insert(0, 3));
+ Test.Assert(!array.Insert(0, 1));
+ Test.Assert(!array.Insert(123, 12));
+ Test.AssertEquals(0, array.Count());
+
+ Test.Assert(array.Insert(0,0));
+ Test.AssertEquals(1, array.Count());
+ Test.Assert(array.Insert(10000000000,1));
+ Test.AssertEquals(2, array.Count());
+ Test.Assert(array.Insert(5,0));
+ Test.AssertEquals(3, array.Count());
+ Test.Assert(array.Insert(42,1));
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((long)array[0], (long)5);
+ Test.AssertEquals((long)array[1], (long)42);
+ Test.AssertEquals((long)array[2], (long)0);
+ Test.AssertEquals((long)array[3], (long)10000000000);
+
+ array[0] = 1984;
+ array[1] = -42;
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((long)array[0], (long)1984);
+ Test.AssertEquals((long)array[1], (long)-42);
+ Test.AssertEquals((long)array[2], (long)0);
+ Test.AssertEquals((long)array[3], (long)10000000000);
+
+ Test.AssertEquals("[1984, -42, 0, 10000000000]", array.ToString());
+ }
+ }
+
+ public static void TestInsertValueArrayOfUInts()
+ {
+
+ using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.UInt32)) {
+ Test.AssertEquals(0, array.Count());
+ Test.Assert(!array.Insert(0, 3));
+ Test.Assert(!array.Insert(0, 1));
+ Test.Assert(!array.Insert(123, 12));
+ Test.AssertEquals(0, array.Count());
+
+ Test.Assert(array.Insert(0,0));
+ Test.AssertEquals(1, array.Count());
+ Test.Assert(array.Insert(7,1));
+ Test.AssertEquals(2, array.Count());
+ Test.Assert(array.Insert(5,0));
+ Test.AssertEquals(3, array.Count());
+ Test.Assert(array.Insert(42,1));
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((uint)array[0], (uint)5);
+ Test.AssertEquals((uint)array[1], (uint)42);
+ Test.AssertEquals((uint)array[2], (uint)0);
+ Test.AssertEquals((uint)array[3], (uint)7);
+
+ array[0] = 1984;
+ array[1] = 100;
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((uint)array[0], (uint)1984);
+ Test.AssertEquals((uint)array[1], (uint)100);
+ Test.AssertEquals((uint)array[2], (uint)0);
+ Test.AssertEquals((uint)array[3], (uint)7);
+
+ Test.AssertEquals("[1984, 100, 0, 7]", array.ToString());
+ }
+ }
+
+ public static void TestInsertValueArrayOfStrings()
+ {
+
+ using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.String)) {
+
+ Test.AssertEquals(0, array.Count());
+ Test.Assert(!array.Insert("hello",3));
+ Test.Assert(!array.Insert("world",12));
+ Test.AssertEquals(0, array.Count());
+
+ Test.Assert(array.Insert("hello",0));
+ Test.Assert(array.Insert("world",1));
+ Test.Assert(array.Insert("first",0));
+ Test.Assert(array.Insert("sec",1));
+
+ Test.AssertEquals((string)array[0], (string)"first");
+ Test.AssertEquals((string)array[1], (string)"sec");
+ Test.AssertEquals((string)array[2], (string)"hello");
+ Test.AssertEquals((string)array[3], (string)"world");
+
+ array[0] = "efl";
+ array[1] = "rocks";
+ Test.AssertEquals(4, array.Count());
+
+ Test.AssertEquals((string)array[0], (string)"efl");
+ Test.AssertEquals((string)array[1], (string)"rocks");
+ Test.AssertEquals((string)array[2], (string)"hello");
+ Test.AssertEquals((string)array[3], (string)"world");
+ }
+ }
+
+ public static void TestInsertValueArrayOfObjects()
+ {
+
+ using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Object)) {
+
+ var a = new Dummy.TestObject();
+ var b = new Dummy.TestObject();
+ var c = new Dummy.TestObject();
+ var d = new Dummy.TestObject();
+
+ Test.AssertEquals(0, array.Count());
+ Test.Assert(!array.Insert(a,12));
+ Test.Assert(!array.Insert(b,3));
+ Test.AssertEquals(0, array.Count());
+
+ Test.Assert(array.Insert(a,0));
+ Test.Assert(array.Insert(b,1));
+ Test.Assert(array.Insert(c,0));
+ Test.Assert(array.Insert(d,1));
+
+ Test.AssertEquals((Efl.Object)array[0], c);
+ Test.AssertEquals((Efl.Object)array[1], d);
+ Test.AssertEquals((Efl.Object)array[2], a);
+ Test.AssertEquals((Efl.Object)array[3], b);
+
+ array[0] = a;
+ array[1] = b;
+
+ Test.AssertEquals((Efl.Object)array[0], a);
+ Test.AssertEquals((Efl.Object)array[1], b);
+ Test.AssertEquals((Efl.Object)array[2], a);
+ Test.AssertEquals((Efl.Object)array[3], b);
+
+ d.Dispose();
+ c.Dispose();
+ b.Dispose();
+ a.Dispose();
+ }
+ }
+
+ public static void TestInsertValueListOfSByte()
+ {
+ using (Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.SByte)) {
+ Test.AssertEquals(0, list.Count());
+ Test.Assert(!list.Insert(0, 3));
+ Test.Assert(!list.Insert(0, 1));
+ Test.Assert(!list.Insert(-123, 12));
+ Test.AssertEquals(0, list.Count());
+
+ Test.Assert(list.Insert(0, 0));
+ Test.AssertEquals(1, list.Count());
+ Test.Assert(list.Insert(6, 1));
+ Test.AssertEquals(2, list.Count());
+ Test.Assert(list.Insert(-122, 0));
+ Test.AssertEquals(3, list.Count());
+ Test.Assert(list.Insert(30, 1));
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((sbyte)list[0], (sbyte)-122);
+ Test.AssertEquals((sbyte)list[1], (sbyte)30);
+ Test.AssertEquals((sbyte)list[2], (sbyte)0);
+ Test.AssertEquals((sbyte)list[3], (sbyte)6);
+
+ list[0] = 120;
+ list[1] = -42;
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((sbyte)list[0], (sbyte)120);
+ Test.AssertEquals((sbyte)list[1], (sbyte)-42);
+ Test.AssertEquals((sbyte)list[2], (sbyte)0);
+ Test.AssertEquals((sbyte)list[3], (sbyte)6);
+
+ Test.AssertEquals("[120, -42, 0, 6]", list.ToString());
+ }
+ }
+
+ public static void TestInsertValueListOfByte()
+ {
+ using (Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Byte)) {
+ Test.AssertEquals(0, list.Count());
+ Test.Assert(!list.Insert(0, 3));
+ Test.Assert(!list.Insert(0, 1));
+ Test.Assert(!list.Insert(123, 12));
+ Test.AssertEquals(0, list.Count());
+
+ Test.Assert(list.Insert(0, 0));
+ Test.AssertEquals(1, list.Count());
+ Test.Assert(list.Insert(6, 1));
+ Test.AssertEquals(2, list.Count());
+ Test.Assert(list.Insert(122, 0));
+ Test.AssertEquals(3, list.Count());
+ Test.Assert(list.Insert(30, 1));
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((byte)list[0], (byte)122);
+ Test.AssertEquals((byte)list[1], (byte)30);
+ Test.AssertEquals((byte)list[2], (byte)0);
+ Test.AssertEquals((byte)list[3], (byte)6);
+
+ list[0] = 120;
+ list[1] = 42;
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((byte)list[0], (byte)120);
+ Test.AssertEquals((byte)list[1], (byte)42);
+ Test.AssertEquals((byte)list[2], (byte)0);
+ Test.AssertEquals((byte)list[3], (byte)6);
+
+ Test.AssertEquals("[120, 42, 0, 6]", list.ToString());
+ }
+ }
+
+ public static void TestInsertValueListOfInts()
+ {
+ using (Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int32)) {
+ Test.AssertEquals(0, list.Count());
+ Test.Assert(!list.Insert(0, 3));
+ Test.Assert(!list.Insert(0, 1));
+ Test.Assert(!list.Insert(123, 12));
+ Test.AssertEquals(0, list.Count());
+
+ Test.Assert(list.Insert(0, 0));
+ Test.AssertEquals(1, list.Count());
+ Test.Assert(list.Insert(1, 1));
+ Test.AssertEquals(2, list.Count());
+ Test.Assert(list.Insert(5, 0));
+ Test.AssertEquals(3, list.Count());
+ Test.Assert(list.Insert(42, 1));
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((int)list[0], (int)5);
+ Test.AssertEquals((int)list[1], (int)42);
+ Test.AssertEquals((int)list[2], (int)0);
+ Test.AssertEquals((int)list[3], (int)1);
+
+ list[0] = 1984;
+ list[1] = -42;
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((int)list[0], (int)1984);
+ Test.AssertEquals((int)list[1], (int)-42);
+ Test.AssertEquals((int)list[2], (int)0);
+ Test.AssertEquals((int)list[3], (int)1);
+
+ Test.AssertEquals("[1984, -42, 0, 1]", list.ToString());
+ }
+ }
+
+ public static void TestInsertValueListOfInt64s()
+ {
+ using (Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int64)) {
+ Test.AssertEquals(0, list.Count());
+ Test.Assert(!list.Insert(0, 3));
+ Test.Assert(!list.Insert(0, 1));
+ Test.Assert(!list.Insert(123, 12));
+ Test.AssertEquals(0, list.Count());
+
+ Test.Assert(list.Insert(0,0));
+ Test.AssertEquals(1, list.Count());
+ Test.Assert(list.Insert(10000000000,1));
+ Test.AssertEquals(2, list.Count());
+ Test.Assert(list.Insert(5,0));
+ Test.AssertEquals(3, list.Count());
+ Test.Assert(list.Insert(42,1));
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((long)list[0], (long)5);
+ Test.AssertEquals((long)list[1], (long)42);
+ Test.AssertEquals((long)list[2], (long)0);
+ Test.AssertEquals((long)list[3], (long)10000000000);
+
+ list[0] = 1984;
+ list[1] = -42;
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((long)list[0], (long)1984);
+ Test.AssertEquals((long)list[1], (long)-42);
+ Test.AssertEquals((long)list[2], (long)0);
+ Test.AssertEquals((long)list[3], (long)10000000000);
+
+ Test.AssertEquals("[1984, -42, 0, 10000000000]", list.ToString());
+ }
+ }
+
+ public static void TestInsertValueListOfUInts()
+ {
+
+ using (Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.UInt32)) {
+ Test.AssertEquals(0, list.Count());
+ Test.Assert(!list.Insert(0, 3));
+ Test.Assert(!list.Insert(0, 1));
+ Test.Assert(!list.Insert(123, 12));
+ Test.AssertEquals(0, list.Count());
+
+ Test.Assert(list.Insert(0,0));
+ Test.AssertEquals(1, list.Count());
+ Test.Assert(list.Insert(7,1));
+ Test.AssertEquals(2, list.Count());
+ Test.Assert(list.Insert(5,0));
+ Test.AssertEquals(3, list.Count());
+ Test.Assert(list.Insert(42,1));
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((uint)list[0], (uint)5);
+ Test.AssertEquals((uint)list[1], (uint)42);
+ Test.AssertEquals((uint)list[2], (uint)0);
+ Test.AssertEquals((uint)list[3], (uint)7);
+
+ list[0] = 1984;
+ list[1] = 100;
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((uint)list[0], (uint)1984);
+ Test.AssertEquals((uint)list[1], (uint)100);
+ Test.AssertEquals((uint)list[2], (uint)0);
+ Test.AssertEquals((uint)list[3], (uint)7);
+
+ Test.AssertEquals("[1984, 100, 0, 7]", list.ToString());
+ }
+ }
+
+ public static void TestInsertValueListOfStrings()
+ {
+
+ using (Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.String)) {
+
+ Test.AssertEquals(0, list.Count());
+ Test.Assert(!list.Insert("Nice",2));
+ Test.Assert(!list.Insert("efl",5));
+ Test.AssertEquals(0, list.Count());
+
+ Test.Assert(list.Insert("hello",0));
+ Test.Assert(list.Insert("world",1));
+ Test.Assert(list.Insert("first",0));
+ Test.Assert(list.Insert("sec",1));
+
+ Test.AssertEquals((string)list[0], (string)"first");
+ Test.AssertEquals((string)list[1], (string)"sec");
+ Test.AssertEquals((string)list[2], (string)"hello");
+ Test.AssertEquals((string)list[3], (string)"world");
+
+ list[0] = "efl";
+ list[1] = "rocks";
+ Test.AssertEquals(4, list.Count());
+
+ Test.AssertEquals((string)list[0], (string)"efl");
+ Test.AssertEquals((string)list[1], (string)"rocks");
+ Test.AssertEquals((string)list[2], (string)"hello");
+ Test.AssertEquals((string)list[3], (string)"world");
+ }
+ }
+
+ public static void TestInsertValueListOfObjects()
+ {
+
+ using (Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Object)) {
+
+ var a = new Dummy.TestObject();
+ var b = new Dummy.TestObject();
+ var c = new Dummy.TestObject();
+ var d = new Dummy.TestObject();
+
+ Test.AssertEquals(0, list.Count());
+ Test.Assert(!list.Insert(a,6));
+ Test.Assert(!list.Insert(b,1));
+ Test.Assert(!list.Insert(c,7));
+ Test.AssertEquals(0, list.Count());
+
+ Test.Assert(list.Insert(a,0));
+ Test.Assert(list.Insert(b,1));
+ Test.Assert(list.Insert(c,0));
+ Test.Assert(list.Insert(d,1));
+
+ Test.AssertEquals((Efl.Object)list[0], c);
+ Test.AssertEquals((Efl.Object)list[1], d);
+ Test.AssertEquals((Efl.Object)list[2], a);
+ Test.AssertEquals((Efl.Object)list[3], b);
+
+ list[0] = a;
+ list[1] = b;
+
+ Test.AssertEquals((Efl.Object)list[0], a);
+ Test.AssertEquals((Efl.Object)list[1], b);
+ Test.AssertEquals((Efl.Object)list[2], a);
+ Test.AssertEquals((Efl.Object)list[3], b);
+
+ d.Dispose();
+ c.Dispose();
+ b.Dispose();
+ a.Dispose();
+ }
+ }
public static void TestArrayOutOfBounds() {
using (Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) {
diff --git a/src/tests/efl_mono/dummy_child.eo b/src/tests/efl_mono/dummy_child.eo
index f6de361c45..2b476a5b81 100644
--- a/src/tests/efl_mono/dummy_child.eo
+++ b/src/tests/efl_mono/dummy_child.eo
@@ -4,6 +4,7 @@ class Dummy.Child extends Dummy.Test_Object {
methods {
double_params {
+ [[Docs for method double_params. @since 1.66]]
params {
@in a: string;
@in b: double;
@@ -11,6 +12,7 @@ class Dummy.Child extends Dummy.Test_Object {
}
@property iface_was_set {
+ [[Docs for property iface_was_set. @since 1.66]]
get {}
values {
data: bool;
@@ -30,6 +32,7 @@ class Dummy.Child extends Dummy.Test_Object {
}
@property obligatory_beta_ctor_was_called {
+ [[Docs for property obligatory_beta_ctor_was_called. @since 1.66]]
get{}
values {
data: bool;
@@ -37,6 +40,7 @@ class Dummy.Child extends Dummy.Test_Object {
}
@property optional_beta_ctor_was_called {
+ [[Docs for property optional_beta_ctor_was_called. @since 1.66]]
get{}
values {
data: bool;
diff --git a/src/tests/efl_mono/dummy_event_manager.c b/src/tests/efl_mono/dummy_event_manager.c
index 813622929a..62bdd05c7f 100644
--- a/src/tests/efl_mono/dummy_event_manager.c
+++ b/src/tests/efl_mono/dummy_event_manager.c
@@ -43,12 +43,6 @@ _dummy_event_manager_emitter_set(EINA_UNUSED Eo *obj, Dummy_Event_Manager_Data *
pd->emitter = emitter;
}
-static Efl_Object*
-_dummy_event_manager_emitter_get(EINA_UNUSED Eo const *obj, Dummy_Event_Manager_Data *pd)
-{
- return pd->emitter;
-}
-
static Eina_Bool
_dummy_event_manager_emit_with_int(EINA_UNUSED Eo *obj, Dummy_Event_Manager_Data *pd, int data)
{
diff --git a/src/tests/efl_mono/dummy_event_manager.eo b/src/tests/efl_mono/dummy_event_manager.eo
index 5c8b1d0791..b16f7b92cb 100644
--- a/src/tests/efl_mono/dummy_event_manager.eo
+++ b/src/tests/efl_mono/dummy_event_manager.eo
@@ -4,6 +4,8 @@ class Dummy.Event_Manager extends Efl.Object {
methods {
@property emitter {
+ set {
+ }
values {
emitter: Efl.Object @move;
}
diff --git a/src/tests/efl_mono/dummy_hidden_object.eo b/src/tests/efl_mono/dummy_hidden_object.eo
index 1b29472a1c..6fab21119c 100644
--- a/src/tests/efl_mono/dummy_hidden_object.eo
+++ b/src/tests/efl_mono/dummy_hidden_object.eo
@@ -1,2 +1,3 @@
class Dummy.Hidden_Object extends Efl.Object {
+ [[Docs for class Dummy.Hidden_Object. @since 1.66]]
}
diff --git a/src/tests/efl_mono/dummy_inherit_helper.eo b/src/tests/efl_mono/dummy_inherit_helper.eo
index f0f9183ebb..9bc909e206 100644
--- a/src/tests/efl_mono/dummy_inherit_helper.eo
+++ b/src/tests/efl_mono/dummy_inherit_helper.eo
@@ -1,5 +1,5 @@
-class Dummy.Inherit_Helper extends Efl.Object
-{
+class Dummy.Inherit_Helper extends Efl.Object {
+ [[Docs for class Dummy.Inherit_Helper. @since 1.66]]
methods {
receive_dummy_and_call_int_out @static {
params {
diff --git a/src/tests/efl_mono/dummy_inherit_iface.eo b/src/tests/efl_mono/dummy_inherit_iface.eo
index e18403fcd2..be1cdae05e 100644
--- a/src/tests/efl_mono/dummy_inherit_iface.eo
+++ b/src/tests/efl_mono/dummy_inherit_iface.eo
@@ -1,4 +1,5 @@
interface Dummy.Inherit_Iface {
+ [[Docs for interface Dummy.Inherit_Iface. @since 1.66]]
methods {
stringshare_test {
params {
diff --git a/src/tests/efl_mono/dummy_numberwrapper.eo b/src/tests/efl_mono/dummy_numberwrapper.eo
index 98b265233c..8811fc0b16 100644
--- a/src/tests/efl_mono/dummy_numberwrapper.eo
+++ b/src/tests/efl_mono/dummy_numberwrapper.eo
@@ -1,4 +1,5 @@
class Dummy.Numberwrapper extends Efl.Object {
+ [[Docs for class Dummy.Numberwrapper. @since 1.66]]
methods {
@property number {
get {
diff --git a/src/tests/efl_mono/dummy_part_holder.eo b/src/tests/efl_mono/dummy_part_holder.eo
index 1ac88007fc..d096e8ffef 100644
--- a/src/tests/efl_mono/dummy_part_holder.eo
+++ b/src/tests/efl_mono/dummy_part_holder.eo
@@ -1,6 +1,7 @@
import eina_types;
class Dummy.Part_Holder extends Dummy.Test_Object implements Efl.Part {
+ [[Docs for class Dummy.Part_Holder. @since 1.66]]
parts {
one: Dummy.Test_Object; [[ Part number one. ]]
diff --git a/src/tests/efl_mono/dummy_test_object.c b/src/tests/efl_mono/dummy_test_object.c
index 19539906f4..210f2ca51f 100644
--- a/src/tests/efl_mono/dummy_test_object.c
+++ b/src/tests/efl_mono/dummy_test_object.c
@@ -16,7 +16,6 @@
#define DUMMY_TEST_IFACE_PROTECTED
-#include <assert.h>
#include "libefl_mono_native_test.h"
typedef struct Dummy_Test_Object_Data
@@ -39,6 +38,8 @@ typedef struct Dummy_Test_Object_Data
int prop1;
int prop2;
Eo *hidden_object;
+ Dummy_Test_Iface *iface_value_prop;
+ Efl_Class *iface_klass;
// Containers passed to C# as iterator/accessors
Eina_Array *out_array;
@@ -4613,36 +4614,6 @@ void _dummy_test_object_multi_valued_prop_set(Eo* obj EINA_UNUSED, Dummy_Test_Ob
pd->prop2 = prop2;
}
-void _dummy_test_object_keyed_multi_valued_prop_get(Eo const* obj EINA_UNUSED, Dummy_Test_Object_Data* pd, int prop_key1, int* prop1, int* prop2)
-{
- assert (prop_key1 == 100);
- *prop1 = pd->prop1;
- *prop2 = pd->prop2;
-}
-
-void _dummy_test_object_keyed_multi_valued_prop_set(Eo* obj EINA_UNUSED, Dummy_Test_Object_Data* pd, int prop_key1, int prop1, int prop2)
-{
- assert (prop_key1 == 100);
- pd->prop1 = prop1;
- pd->prop2 = prop2;
-}
-
-void _dummy_test_object_multi_keyed_multi_valued_prop_get(Eo const* obj EINA_UNUSED, Dummy_Test_Object_Data* pd, int prop_key1, int prop_key2, int* prop1, int* prop2)
-{
- assert (prop_key1 == 100);
- assert (prop_key2 == 101);
- *prop1 = pd->prop1;
- *prop2 = pd->prop2;
-}
-
-void _dummy_test_object_multi_keyed_multi_valued_prop_set(Eo* obj EINA_UNUSED, Dummy_Test_Object_Data* pd, int prop_key1, int prop_key2, int prop1, int prop2)
-{
- assert (prop_key1 == 100);
- assert (prop_key2 == 101);
- pd->prop1 = prop1;
- pd->prop2 = prop2;
-}
-
/* Class Properties */
static int _dummy_test_object_klass_prop = 0;
@@ -4815,6 +4786,26 @@ Eo *_dummy_test_object_hidden_object_get(EINA_UNUSED const Eo *obj, Dummy_Test_O
return pd->hidden_object;
}
+Dummy_Test_Iface *_dummy_test_object_iface_value_prop_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd)
+{
+ return pd->iface_value_prop;
+}
+
+void _dummy_test_object_iface_value_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Dummy_Test_Iface *prop)
+{
+ pd->iface_value_prop = prop;
+}
+
+void _dummy_test_object_iface_klass_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Efl_Class *klass)
+{
+ pd->iface_klass = klass;
+}
+
+Dummy_Test_Iface *_dummy_test_object_iface_value_from_c_get(const Eo *obj, Dummy_Test_Object_Data *pd)
+{
+ return efl_add(pd->iface_klass, (Eo*)obj);
+}
+
// Inherit
int _dummy_inherit_helper_receive_dummy_and_call_int_out(Dummy_Test_Object *x)
{
@@ -4828,5 +4819,63 @@ const char* _dummy_inherit_helper_receive_dummy_and_call_in_stringshare(Dummy_Te
return dummy_inherit_iface_stringshare_test (x, eina_stringshare_add("hello world"));
}
+Eina_Success_Flag _dummy_test_object_return_type_get_prop_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int* i EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+void _dummy_test_object_return_type_get_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int i EINA_UNUSED)
+{
+}
+
+int _dummy_test_object_return_type_set_prop_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED)
+{
+ return 0;
+}
+
+Eina_Success_Flag _dummy_test_object_return_type_set_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int i EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+Eina_Success_Flag _dummy_test_object_return_type_prop_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int* i EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+Eina_Success_Flag _dummy_test_object_return_type_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int i EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+Eina_Success_Flag _dummy_test_object_multi_value_return_type_get_prop_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int* i EINA_UNUSED, int* j EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+void _dummy_test_object_multi_value_return_type_get_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int i EINA_UNUSED, int j EINA_UNUSED)
+{
+}
+
+void _dummy_test_object_multi_value_return_type_set_prop_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int* i EINA_UNUSED, int* j EINA_UNUSED)
+{
+}
+
+Eina_Success_Flag _dummy_test_object_multi_value_return_type_set_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int i EINA_UNUSED, int j EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+Eina_Success_Flag _dummy_test_object_multi_value_return_type_prop_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int* i EINA_UNUSED, int* j EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+Eina_Success_Flag _dummy_test_object_multi_value_return_type_prop_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd EINA_UNUSED, int i EINA_UNUSED, int j EINA_UNUSED)
+{
+ return EINA_TRUE;
+}
+
+
#include "dummy_test_object.eo.c"
diff --git a/src/tests/efl_mono/dummy_test_object.eo b/src/tests/efl_mono/dummy_test_object.eo
index 37c08cb495..85740f8b06 100644
--- a/src/tests/efl_mono/dummy_test_object.eo
+++ b/src/tests/efl_mono/dummy_test_object.eo
@@ -1,20 +1,21 @@
import eina_types;
-type Dummy.MyInt: int;
-
-const Dummy.Constvar_Bool : bool = true;
-const Dummy.Constvar_Int : int = -32766;
-const Dummy.Constvar_UInt : uint = 65533U;
-const Dummy.Constvar_Long : long = -2147483644L;
-const Dummy.Constvar_ULong : ulong = 4294967288UL;
-const Dummy.Constvar_LLong : llong = -9223372036854775800LL;
-const Dummy.Constvar_ULLong : ullong = 18446744073709551615ULL;
-const Dummy.Constvar_Float : float = 16777211.0f;
-const Dummy.Constvar_Double : double = 9007199254740988.0;
-const Dummy.Constvar_Char : char = '!';
-const Dummy.Constvar_String : string = "test_str";
+type Dummy.MyInt: int; [[Docs for typedef Dummy. @since 1.66]]
+
+const Dummy.Constvar_Bool : bool = true; [[Docs for var Dummy.Constvar_Bool. @since 1.66]]
+const Dummy.Constvar_Int : int = -32766; [[Docs for var Dummy.Constvar_Int. @since 1.66]]
+const Dummy.Constvar_UInt : uint = 65533U; [[Docs for var Dummy.Constvar_UInt. @since 1.66]]
+const Dummy.Constvar_Long : long = -2147483644L; [[Docs for var Dummy.Constvar_Long. @since 1.66]]
+const Dummy.Constvar_ULong : ulong = 4294967288UL; [[Docs for var Dummy.Constvar_ULong @since 1.66]]
+const Dummy.Constvar_LLong : llong = -9223372036854775800LL; [[Docs for var Dummy.Constvar_LLong. @since 1.66]]
+const Dummy.Constvar_ULLong : ullong = 18446744073709551615ULL; [[Docs for var Dummy.Constvar_ULLong. @since 1.66]]
+const Dummy.Constvar_Float : float = 16777211.0f; [[Docs for var Dummy.Constvar_Float. @since 1.66]]
+const Dummy.Constvar_Double : double = 9007199254740988.0; [[Docs for var Dummy.Constvar_Double. @since 1.66]]
+const Dummy.Constvar_Char : char = '!'; [[Docs for var Dummy.Constvar_Char. @since 1.66]]
+const Dummy.Constvar_String : string = "test_str"; [[Docs for var Dummy.Constvar_String. @since 1.66]]
enum Dummy.SampleEnum {
+ [[Docs for enum Dummy.SampleEnum. @since 1.66]]
v0,
v1,
v2,
@@ -22,8 +23,8 @@ enum Dummy.SampleEnum {
v4,
}
-struct @free(free) Dummy.StructSimple
-{
+struct @free(free) Dummy.StructSimple {
+ [[Docs for struct Dummy.StructSimple. @since 1.66]]
fbyte: byte;
fubyte: ubyte;
fchar: char;
@@ -78,6 +79,7 @@ struct @beta @free(free) Dummy.StructComplex {
flist: list<string>;
fhash: hash<string, string>;
fiterator: iterator<string>;
+ faccessor: accessor<string>;
fany_value: any_value;
fany_value_ref: any_value_ref;
fbinbuf: binbuf;
@@ -87,6 +89,7 @@ struct @beta @free(free) Dummy.StructComplex {
}
function Dummy.SimpleCb {
+ [[Docs for function Dummy.SimpleCb. @since 1.66]]
params {
a: int;
}
@@ -94,6 +97,7 @@ function Dummy.SimpleCb {
};
function Dummy.FormatCb {
+ [[Docs for function Dummy.FormatCb. @since 1.66]]
params {
@in str: strbuf;
@in value: const(any_value);
@@ -574,14 +578,14 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
/* Eina List */
/* Integer */
- eina_list_int_in {
+ eina_list_int_in @beta {
params {
@in lst: list<int>;
}
return: bool;
}
- eina_list_int_in_own {
+ eina_list_int_in_own @beta {
params {
@in lst: list<int> @move; // <int @move>
}
@@ -591,7 +595,7 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_int_out {
+ eina_list_int_out @beta {
params {
@out lst: list<int>;
}
@@ -601,33 +605,33 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_int_out_own {
+ eina_list_int_out_own @beta {
params {
@out lst: list<int> @move; // <int @move>
}
return: bool;
}
- eina_list_int_return {
+ eina_list_int_return @beta {
return: list<int>;
}
check_eina_list_int_return {
return: bool;
}
- eina_list_int_return_own {
+ eina_list_int_return_own @beta {
return: list<int> @move; // <int @move>
}
/* String */
- eina_list_str_in {
+ eina_list_str_in @beta {
params {
@in lst: list<string>;
}
return: bool;
}
- eina_list_str_in_own {
+ eina_list_str_in_own @beta {
params {
@in lst: list<mstring @move> @move;
}
@@ -637,7 +641,7 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_str_out {
+ eina_list_str_out @beta {
params {
@out lst: list<string>;
}
@@ -647,33 +651,33 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_str_out_own {
+ eina_list_str_out_own @beta {
params {
@out lst: list<mstring @move> @move;
}
return: bool;
}
- eina_list_str_return {
+ eina_list_str_return @beta {
return: list<string>;
}
check_eina_list_str_return {
return: bool;
}
- eina_list_str_return_own {
+ eina_list_str_return_own @beta {
return: list<mstring @move> @move;
}
/* Eina_Stringshare */
- eina_list_strshare_in {
+ eina_list_strshare_in @beta {
params {
@in lst: list<stringshare>;
}
return: bool;
}
- eina_list_strshare_in_own {
+ eina_list_strshare_in_own @beta {
params {
@in lst: list<stringshare @move> @move;
}
@@ -683,7 +687,7 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_strshare_out {
+ eina_list_strshare_out @beta {
params {
@out lst: list<stringshare>;
}
@@ -693,33 +697,33 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_strshare_out_own {
+ eina_list_strshare_out_own @beta {
params {
@out lst: list<stringshare @move> @move;
}
return: bool;
}
- eina_list_strshare_return {
+ eina_list_strshare_return @beta {
return: list<stringshare>;
}
check_eina_list_strshare_return {
return: bool;
}
- eina_list_strshare_return_own {
+ eina_list_strshare_return_own @beta {
return: list<stringshare @move> @move;
}
/* Object */
- eina_list_obj_in {
+ eina_list_obj_in @beta {
params {
@in lst: list<Dummy.Numberwrapper>;
}
return: bool;
}
- eina_list_obj_in_own {
+ eina_list_obj_in_own @beta {
params {
@in lst: list<Dummy.Numberwrapper @move> @move;
}
@@ -729,7 +733,7 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_obj_out {
+ eina_list_obj_out @beta {
params {
@out lst: list<Dummy.Numberwrapper>;
}
@@ -739,25 +743,25 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
return: bool;
}
- eina_list_obj_out_own {
+ eina_list_obj_out_own @beta {
params {
@out lst: list<Dummy.Numberwrapper @move> @move;
}
return: bool;
}
- eina_list_obj_return {
+ eina_list_obj_return @beta {
return: list<Dummy.Numberwrapper>;
}
check_eina_list_obj_return {
return: bool;
}
- eina_list_obj_return_own {
+ eina_list_obj_return_own @beta {
return: list<Dummy.Numberwrapper @move> @move;
}
- eina_list_obj_return_in {
+ eina_list_obj_return_in @beta {
params {
@in lst: list<Dummy.Numberwrapper>;
}
@@ -1573,36 +1577,12 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
}
@property multi_valued_prop {
+ [[ A multi valued property. ]]
get {}
set {}
values {
- prop1: int;
- prop2: int;
- }
- }
-
- @property keyed_multi_valued_prop {
- get {}
- set {}
- keys {
- key1: int;
- }
- values {
- prop1: int;
- prop2: int;
- }
- }
-
- @property multi_keyed_multi_valued_prop {
- get {}
- set {}
- keys {
- key1: int;
- key2: int;
- }
- values {
- prop1: int;
- prop2: int;
+ prop1: int; [[ Dummy property's first element. ]]
+ prop2: int; [[ Dummy property's second element. ]]
}
}
@@ -1689,7 +1669,80 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
obj: Efl.Object;
}
}
- }
+ @property iface_value_prop {
+ values {
+ prop: Dummy.Test_Iface;
+ }
+ }
+ @property iface_klass_prop {
+ set {}
+ values {
+ klass: Efl.Class;
+ }
+ }
+ @property iface_value_from_c {
+ get {}
+ values {
+ prop: Dummy.Test_Iface;
+ }
+ }
+
+ @property return_type_get_prop {
+ get { return: Eina.Success_Flag; }
+ set {}
+ values { i: int; }
+ }
+
+ @property return_type_set_prop {
+ set { return: Eina.Success_Flag; }
+ get {}
+ values { i: int; }
+ }
+
+ @property return_type_prop {
+ get {
+ return: Eina.Success_Flag;
+ }
+ set {
+ return: Eina.Success_Flag;
+ }
+ values { i: int; }
+ }
+
+ @property multi_value_return_type_get_prop {
+ get { return: Eina.Success_Flag; }
+ set {}
+ values
+ {
+ i: int;
+ j: int;
+ }
+ }
+
+ @property multi_value_return_type_set_prop {
+ set { return: Eina.Success_Flag; }
+ get {}
+ values
+ {
+ i: int;
+ j: int;
+ }
+ }
+
+ @property multi_value_return_type_prop {
+ get {
+ return: Eina.Success_Flag;
+ }
+ set {
+ return: Eina.Success_Flag;
+ }
+ values
+ {
+ i: int;
+ j: int;
+ }
+ }
+}
implements {
Efl.Object.constructor;
Efl.Object.destructor;
diff --git a/src/tests/efl_mono/efl_sharp_test_suite.csproj.in b/src/tests/efl_mono/efl_sharp_test_suite.csproj.in
index c23636345c..a4c2197ad7 100644
--- a/src/tests/efl_mono/efl_sharp_test_suite.csproj.in
+++ b/src/tests/efl_mono/efl_sharp_test_suite.csproj.in
@@ -19,6 +19,9 @@
<ItemGroup>
<ProjectReference Include="../../bindings/mono/efl_sharp.csproj" />
</ItemGroup>
+ <PropertyGroup>
+ <CodeAnalysisRuleSet>@CA_RULESET@</CodeAnalysisRuleSet>
+ </PropertyGroup>
<ItemGroup>
<Compile Include="@BINDING_TEST_SRC@/*.cs" />
diff --git a/src/tests/efl_mono/libefl_mono_native_test.h b/src/tests/efl_mono/libefl_mono_native_test.h
index 4fe9d4c2b0..7491598324 100644
--- a/src/tests/efl_mono/libefl_mono_native_test.h
+++ b/src/tests/efl_mono/libefl_mono_native_test.h
@@ -75,7 +75,7 @@
#include <interfaces/efl_part.eo.h>
-#define EQUAL(a, b) ((a) == (b) ? 1 : (fprintf(stderr, "NOT EQUAL! %s:%i (%s)", __FILE__, __LINE__, __FUNCTION__), fflush(stderr), 0))
-#define STR_EQUAL(a, b) (strcmp((a), (b)) == 0 ? 1 : (fprintf(stderr, "NOT EQUAL! %s:%i (%s) '%s' != '%s'", __FILE__, __LINE__, __FUNCTION__, (a), (b)), fflush(stderr), 0))
+#define EQUAL(a, b) ((a) == (b) ? 1 : (fprintf(stderr, "NOT EQUAL! %s:%i (%s)", __FILE__, __LINE__, __func__), fflush(stderr), 0))
+#define STR_EQUAL(a, b) (strcmp((a), (b)) == 0 ? 1 : (fprintf(stderr, "NOT EQUAL! %s:%i (%s) '%s' != '%s'", __FILE__, __LINE__, __func__, (a), (b)), fflush(stderr), 0))
#endif
diff --git a/src/tests/efl_mono/meson.build b/src/tests/efl_mono/meson.build
index 2bba162a5c..9c715893df 100644
--- a/src/tests/efl_mono/meson.build
+++ b/src/tests/efl_mono/meson.build
@@ -94,6 +94,7 @@ if get_option('dotnet')
dotnet_test_conf_data.set('BINDING_BUILD', join_paths(meson.current_build_dir(),
'..', '..', 'bindings', 'mono'))
dotnet_test_conf_data.set('BINDING_TEST_SRC', meson.current_source_dir())
+ dotnet_test_conf_data.set('CA_RULESET', join_paths(meson.build_root(), '@0@'.format(ca_ruleset)))
dotnet_test_conf_data.set('NETCOREAPP_VERSION', dotnet_core_app_version)
diff --git a/src/tests/efreet/meson.build b/src/tests/efreet/meson.build
index 4ce9156ec9..24364523f5 100644
--- a/src/tests/efreet/meson.build
+++ b/src/tests/efreet/meson.build
@@ -31,7 +31,7 @@ efreet_test_src = [
'main.c'
]
-efreet_test_deps = [check, efreet, ecore, ecore_file, efreet_mime, intl]
+efreet_test_deps = [check, efreet, ecore, ecore_file, intl]
efreet_test = executable('efreet_test',
efreet_test_src,
diff --git a/src/tests/eina/eina_suite.c b/src/tests/eina/eina_suite.c
index dfa2bd1e5f..01ed82a532 100644
--- a/src/tests/eina/eina_suite.c
+++ b/src/tests/eina/eina_suite.c
@@ -57,6 +57,7 @@ static const Efl_Test_Case etc[] = {
{ "Benchmark", eina_test_benchmark },
{ "Mempool", eina_test_mempool },
{ "Rectangle", eina_test_rectangle },
+ { "Range", eina_test_range },
{ "MatrixSparse", eina_test_matrixsparse },
{ "Tiler", eina_test_tiler },
{ "Strbuf", eina_test_strbuf },
@@ -89,6 +90,7 @@ static const Efl_Test_Case etc[] = {
{ "slstr", eina_test_slstr },
{ "Vpath", eina_test_vpath },
{ "debug", eina_test_debug },
+ { "Abstract Content", eina_test_abstract_content },
{ NULL, NULL }
};
diff --git a/src/tests/eina/eina_suite.h b/src/tests/eina/eina_suite.h
index 5e7a1bf30f..84d6e60516 100644
--- a/src/tests/eina/eina_suite.h
+++ b/src/tests/eina/eina_suite.h
@@ -45,6 +45,7 @@ void eina_test_file(TCase *tc);
void eina_test_benchmark(TCase *tc);
void eina_test_mempool(TCase *tc);
void eina_test_rectangle(TCase *tc);
+void eina_test_range(TCase *tc);
void eina_test_matrixsparse(TCase *tc);
void eina_test_tiler(TCase *tc);
void eina_test_strbuf(TCase *tc);
@@ -77,5 +78,6 @@ void eina_test_freeq(TCase *tc);
void eina_test_slstr(TCase *tc);
void eina_test_vpath(TCase *tc);
void eina_test_debug(TCase *tc);
+void eina_test_abstract_content(TCase *tc);
#endif /* EINA_SUITE_H_ */
diff --git a/src/tests/eina/eina_test_abi.c b/src/tests/eina/eina_test_abi.c
index 6c49544fdd..e1e1423d03 100644
--- a/src/tests/eina/eina_test_abi.c
+++ b/src/tests/eina/eina_test_abi.c
@@ -43,9 +43,6 @@ typedef uint32_t Eina_Unicode;
#include "eina_main.h"
#include "eina_safety_checks.h"
-EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex);
-EAPI unsigned int eina_mempool_alignof(unsigned int size);
-
EFL_START_TEST(eina_unicode_utf8)
{
int ind;
diff --git a/src/tests/eina/eina_test_abstract_content.c b/src/tests/eina/eina_test_abstract_content.c
new file mode 100644
index 0000000000..9b4569671e
--- /dev/null
+++ b/src/tests/eina/eina_test_abstract_content.c
@@ -0,0 +1,224 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+
+#include <Eina.h>
+
+#include "eina_suite.h"
+
+EFL_START_TEST(eina_test_content_create_destroy)
+{
+ const char *text_str = "TestAsDf";
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(text_str), "text/plain");
+
+ ck_assert_str_eq(eina_content_type_get(content), "text/plain");
+ ck_assert_int_eq(eina_content_data_get(content).len, strlen(text_str) + 1);
+ ck_assert_str_eq(eina_content_data_get(content).mem, text_str);
+
+ eina_content_free(content);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_as_file)
+{
+ const char *text_str = "TestAsDf";
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(text_str), "text/plain");
+ Eina_File *f;
+ const char *file_path = eina_content_as_file(content);
+
+ f = eina_file_open(file_path, EINA_FALSE);
+ const char *file_content = eina_file_map_all(f, EINA_FILE_POPULATE);
+ ck_assert_str_eq(file_content, text_str);
+ eina_file_close(f);
+
+ const char *file_path2 = eina_content_as_file(content);
+ ck_assert_str_eq(file_path, file_path2);
+
+ eina_content_free(content);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_convert_none_existing)
+{
+ const char *text_str = "TestAsDf";
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(text_str), "text/plain");
+
+ EXPECT_ERROR_START;
+ ck_assert_ptr_eq(eina_content_convert(content, "ThisIsReallyNotHere"), NULL);
+ EXPECT_ERROR_END;
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_convert_ascii_to_utf8)
+{
+ const char *text_str = "TestAsDf";
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(text_str), "text/plain");
+ Eina_Content *c = eina_content_convert(content, "text/plain;charset=utf-8");
+
+ ck_assert_str_eq(eina_content_type_get(c), "text/plain;charset=utf-8");
+ ck_assert_str_eq(eina_content_data_get(c).mem, text_str);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_convert_ascii_to_latin)
+{
+ const char *text_str = "TestAsDf";
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(text_str), "text/plain");
+ Eina_Content *c = eina_content_convert(content, "text/plain;charset=iso-8859-1");
+
+ ck_assert_str_eq(eina_content_type_get(c), "text/plain;charset=iso-8859-1");
+ ck_assert_str_eq(eina_content_data_get(c).mem, text_str);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_convert_utf8_to_latin)
+{
+ //this means AÄÜÖß
+ const char text_str[] = {'A', 0xc3, 0x84, 0xc3, 0x9c, 0xc3, 0x96, 0xc3, 0x9f, 0};
+ const char text_str_latin[] = {'A', 0xC4, 0xDC, 0xD6, 0xDF, 0};
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(text_str_latin), "text/plain;charset=iso-8859-1");
+ Eina_Content *c = eina_content_convert(content, "text/plain;charset=utf-8");
+
+ ck_assert_str_eq(eina_content_type_get(c), "text/plain;charset=utf-8");
+ ck_assert_int_eq(sizeof(text_str), eina_content_data_get(c).len);
+ for (unsigned int i = 0; i < eina_content_data_get(c).len; ++i)
+ {
+ ck_assert_int_eq(text_str[i], ((char*)eina_content_data_get(c).mem)[i]);
+ }
+ ck_assert_str_eq(eina_content_data_get(c).mem, text_str);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_possible_converstions)
+{
+ ck_assert_int_eq(eina_content_converter_convert_can("text/plain", "text/plain;charset=utf-8"), 1);
+ ck_assert_int_eq(eina_content_converter_convert_can("text/plain", "ThisDoesNotExist"), 0);
+ ck_assert_int_eq(eina_content_converter_convert_can("ThisDoesNotExist", "text/plain;charset=utf-8"), 0);
+ Eina_Iterator *iterator = eina_content_converter_possible_conversions("text/plain");
+ char *text;
+ int i = 0, j = 0;
+
+ EINA_ITERATOR_FOREACH(iterator, text)
+ {
+ if (eina_streq(text, "text/plain;charset=utf-8"))
+ i ++;
+ if (eina_streq(text, "text/plain;charset=iso-8859-1"))
+ j ++;
+ }
+ ck_assert_int_eq(i, 1);
+ ck_assert_int_eq(j, 1);
+ eina_iterator_free(iterator);
+}
+EFL_END_TEST
+
+static Eina_Bool getting_called = EINA_FALSE;
+
+static Eina_Content*
+_test_cb(Eina_Content *content EINA_UNUSED, const char *type EINA_UNUSED)
+{
+ getting_called = EINA_TRUE;
+ return eina_content_new(eina_content_data_get(content), type);
+}
+
+EFL_START_TEST(eina_test_register_illegal)
+{
+ const char *test_str = "AbCdEfG";
+ eina_content_converter_conversion_register("Test", "Test2", _test_cb);
+ EXPECT_ERROR_START;
+ eina_content_converter_conversion_register("Test", "Test2", _test_cb);
+ EXPECT_ERROR_END;
+
+ Eina_Content *c = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(test_str), "Test");
+ Eina_Content *c2 = eina_content_convert(c, "Test2");
+ ck_assert_ptr_ne(c2, NULL);
+ ck_assert_int_eq(getting_called, EINA_TRUE);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_value)
+{
+ const char *str_a = "All";
+ const char *str_b = "Out";
+ Eina_Content *a = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_a), "text/plain");
+ Eina_Content *b = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_b), "text/plain");
+ Eina_Content *c = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_a), "text/plain");
+ Eina_Content *d = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_a), "Not_Text");
+ Eina_Value *va = eina_value_content_new(a);
+ Eina_Value *vb = eina_value_content_new(b);
+ Eina_Value *vc = eina_value_content_new(c);
+ Eina_Value *vd = eina_value_content_new(d);
+ Eina_Value *vcopy = eina_value_new(EINA_VALUE_TYPE_CONTENT);
+ Eina_Content *content;
+
+ ck_assert_int_eq(eina_value_compare(va, vc), 0);
+ ck_assert_int_ne(eina_value_compare(va, vb), 0);
+ ck_assert_int_ne(eina_value_compare(va, vd), 0);
+ ck_assert_int_eq(eina_value_compare(vd, vd), 0);
+
+ ck_assert_int_eq(eina_value_copy(va, vcopy), 1);
+ ck_assert_int_eq(eina_value_compare(va, vcopy), 0);
+
+ content = eina_value_to_content(vcopy);
+ Eina_Slice slice = eina_content_data_get(content);
+ ck_assert_int_eq(slice.len, strlen(str_a) + 1);
+ ck_assert_str_eq(slice.mem, str_a);
+
+ ck_assert_str_eq(eina_content_type_get(content), "text/plain");
+ eina_content_free(content);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_value_set)
+{
+ const char *str_a = "All";
+ Eina_Content *a = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_a), "text/plain");
+ Eina_Value *acopy = eina_value_new(EINA_VALUE_TYPE_CONTENT);
+ Eina_Content *content;
+
+ eina_value_set(acopy, a);
+ content = eina_value_to_content(acopy);
+ Eina_Slice slice = eina_content_data_get(content);
+ ck_assert_int_eq(slice.len, strlen(str_a) + 1);
+ ck_assert_str_eq(slice.mem, str_a);
+
+ ck_assert_str_eq(eina_content_type_get(content), "text/plain");
+ eina_content_free(content);
+ eina_content_free(a);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_test_content_value_convertion)
+{
+ const char *str_a = "All";
+ const char *str_b = "Out";
+ const char *str_c = "Life";
+ Eina_Content *a = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_a), "text/plain;charset=utf-8");
+ Eina_Content *b = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_b), "text/plain");
+ Eina_Content *c = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(str_c), "application/x-elementary-markup");
+ Eina_Value *av = eina_value_content_new(a);
+ Eina_Value *bv = eina_value_content_new(b);
+ Eina_Value *cv = eina_value_content_new(c);
+
+ ck_assert_str_eq(eina_value_to_string(av), str_a);
+ ck_assert_str_eq(eina_value_to_string(bv), str_b);
+ ck_assert_str_ne(eina_value_to_string(cv), str_c);
+}
+EFL_END_TEST
+
+void
+eina_test_abstract_content(TCase *tc)
+{
+ tcase_add_test(tc, eina_test_content_create_destroy);
+ tcase_add_test(tc, eina_test_content_as_file);
+ tcase_add_test(tc, eina_test_content_convert_none_existing);
+ tcase_add_test(tc, eina_test_content_convert_ascii_to_utf8);
+ tcase_add_test(tc, eina_test_content_convert_ascii_to_latin);
+ tcase_add_test(tc, eina_test_content_convert_utf8_to_latin);
+ tcase_add_test(tc, eina_test_content_possible_converstions);
+ tcase_add_test(tc, eina_test_register_illegal);
+ tcase_add_test(tc, eina_test_content_value);
+ tcase_add_test(tc, eina_test_content_value_set);
+ tcase_add_test(tc, eina_test_content_value_convertion);
+}
diff --git a/src/tests/eina/eina_test_array.c b/src/tests/eina/eina_test_array.c
index de58cdfaec..3373f07ae1 100644
--- a/src/tests/eina/eina_test_array.c
+++ b/src/tests/eina/eina_test_array.c
@@ -177,24 +177,24 @@ EFL_END_TEST
EFL_START_TEST(eina_array_find_test)
{
Eina_Array sea;
- unsigned long i;
+ uintptr_t i;
unsigned int out = 0;
- fail_if(eina_array_find(NULL, (void*)1, NULL) != EINA_FALSE);
+ fail_if(eina_array_find(NULL, (void *)1, NULL) != EINA_FALSE);
eina_array_step_set(&sea, sizeof(sea), 5);
- for (i =1 ; i < 10 ; i++)
- eina_array_push(&sea, (void*)i);
+ for (i = 1 ; i < 10 ; i++)
+ eina_array_push(&sea, (void *)i);
- fail_if(eina_array_find(&sea, (void*)15, NULL) != EINA_FALSE);
+ fail_if(eina_array_find(&sea, (void *)15, NULL) != EINA_FALSE);
- fail_if(eina_array_find(&sea, (void*)5, NULL) != EINA_TRUE);
- fail_if(eina_array_find(&sea, (void*)6, &out) != EINA_TRUE);
+ fail_if(eina_array_find(&sea, (void *)5, NULL) != EINA_TRUE);
+ fail_if(eina_array_find(&sea, (void *)6, &out) != EINA_TRUE);
fail_if(out != 5);
- eina_array_data_set(&sea, 7, (void*)99);
- fail_if(eina_array_find(&sea, (void*)99, &out) != EINA_TRUE);
+ eina_array_data_set(&sea, 7, (void *)99);
+ fail_if(eina_array_find(&sea, (void *)99, &out) != EINA_TRUE);
fail_if(out != 7);
eina_array_flush(&sea);
diff --git a/src/tests/eina/eina_test_bezier.c b/src/tests/eina/eina_test_bezier.c
index 36de00dc13..f07bb5f5c2 100644
--- a/src/tests/eina/eina_test_bezier.c
+++ b/src/tests/eina/eina_test_bezier.c
@@ -42,14 +42,14 @@ EFL_START_TEST(eina_bezier_test_values)
&cx1, &cy1,
&cx2, &cy2,
&ex, &ey);
- fail_if(sx != 1 ||
- sy != 2 ||
- cx1 != 3 ||
- cy1 != 4 ||
- cx2 != 5 ||
- cy2 != 6 ||
- ex != 7 ||
- ey != 8);
+ fail_if(!EINA_DBL_EQ(sx, 1) ||
+ !EINA_DBL_EQ(sy, 2) ||
+ !EINA_DBL_EQ(cx1, 3) ||
+ !EINA_DBL_EQ(cy1, 4) ||
+ !EINA_DBL_EQ(cx2, 5) ||
+ !EINA_DBL_EQ(cy2, 6) ||
+ !EINA_DBL_EQ(ex, 7) ||
+ !EINA_DBL_EQ(ey, 8));
}
EFL_END_TEST
@@ -65,7 +65,7 @@ EFL_START_TEST(eina_bezier_test_angle)
7, 1);
angle = eina_bezier_angle_at(&b, 0.5);
- fail_if(angle != 0);
+ fail_if(EINA_DBL_NONZERO(angle));
eina_bezier_values_set(&b,
1, 2,
@@ -73,7 +73,7 @@ EFL_START_TEST(eina_bezier_test_angle)
1, 6,
1, 8);
angle = eina_bezier_angle_at(&b, 0.5);
- fail_if(floor(angle) != 90);
+ fail_if(!EINA_DBL_EQ(floor(angle), 90));
}
EFL_END_TEST
@@ -89,7 +89,7 @@ EFL_START_TEST(eina_bezier_test_length)
5, 1,
7, 1);
length = eina_bezier_length_get(&b);
- fail_if(floor(length) != 6);
+ fail_if(!EINA_DBL_EQ(floor(length), 6));
eina_bezier_values_set(&b,
1, 1,
@@ -97,7 +97,7 @@ EFL_START_TEST(eina_bezier_test_length)
1, 1,
1, 1);
length = eina_bezier_length_get(&b);
- fail_if(length != 0);
+ fail_if(!EINA_DBL_EQ(length, 0));
}
EFL_END_TEST
@@ -114,10 +114,10 @@ EFL_START_TEST(eina_bezier_test_t_at)
7, 1);
length = eina_bezier_length_get(&b);
t = eina_bezier_t_at(&b, 0);
- fail_if(floor(t) != 0);
+ fail_if(!EINA_DBL_EQ(floor(t), 0));
t = eina_bezier_t_at(&b, length);
- fail_if(t != 1);
+ fail_if(!EINA_DBL_EQ(t, 1));
}
EFL_END_TEST
@@ -133,13 +133,13 @@ EFL_START_TEST(eina_bezier_test_point_at)
5, 6,
7, 8);
eina_bezier_point_at(&b, 0, &x , &y);
- fail_if(x != 1 ||
- y != 2);
+ fail_if(!EINA_DBL_EQ(x, 1) ||
+ !EINA_DBL_EQ(y, 2));
eina_bezier_point_at(&b, 1, &x , &y);
- fail_if(x != 7 ||
- y != 8);
+ fail_if(!EINA_DBL_EQ(x, 7) ||
+ !EINA_DBL_EQ(y, 8));
}
EFL_END_TEST
@@ -159,7 +159,7 @@ EFL_START_TEST(eina_bezier_test_split_at_length)
len1 = eina_bezier_length_get(&l);
len2 = eina_bezier_length_get(&r);
- fail_if(len != (len1 + len2));
+ fail_if(!EINA_DBL_EQ(len, (len1 + len2)));
}
EFL_END_TEST
@@ -177,7 +177,7 @@ EFL_START_TEST(eina_bezier_test_bounds_get)
eina_bezier_bounds_get(&b, &x, &y, &w, &h);
- fail_if(x !=0 || y!=0 || w !=100 || h !=100 );
+ fail_if(!EINA_DBL_EQ(x, 0) || !EINA_DBL_EQ(y, 0) || !EINA_DBL_EQ(w, 100) || !EINA_DBL_EQ(h, 100));
}
EFL_END_TEST
@@ -196,7 +196,7 @@ EFL_START_TEST(eina_bezier_test_on_interval)
eina_bezier_on_interval(&b, 0.25, 0.5, &res);
eina_bezier_point_at(&res, 0, &px2, &py2);
- fail_if(px1 != px2 || py1 != py2);
+ fail_if(!EINA_DBL_EQ(px1, px2) || !EINA_DBL_EQ(py1, py2));
}
EFL_END_TEST
diff --git a/src/tests/eina/eina_test_error.c b/src/tests/eina/eina_test_error.c
index 7c6d25b3c4..729f71e103 100644
--- a/src/tests/eina/eina_test_error.c
+++ b/src/tests/eina/eina_test_error.c
@@ -221,7 +221,11 @@ EFL_START_TEST(eina_error_test_failures)
fail_unless(ctx.did);
ck_assert_str_eq(eina_error_msg_get(ENOMEM),
+#if defined(_WIN32) || defined(__sun)
+ "Not enough space");
+#else
"Cannot allocate memory");
+#endif
TEST_MAGIC_SAFETY("eina_error_find",
"safety check failed: msg == NULL");
diff --git a/src/tests/eina/eina_test_file.c b/src/tests/eina/eina_test_file.c
index 365b2f8c19..3e12206094 100644
--- a/src/tests/eina/eina_test_file.c
+++ b/src/tests/eina/eina_test_file.c
@@ -297,7 +297,7 @@ EFL_END_TEST
EFL_START_TEST(eina_file_map_new_test)
{
- const char *eina_map_test_string = "Hello. I'm the eina map test string.";
+ const char *eina_map_test_string = "Hello. I'm the eina map test string.";
const char *test_file_name_part = "/example.txt";
const char *test_file2_name_part = "/example_big.txt";
char *test_file_path, *test_file2_path;
@@ -311,7 +311,7 @@ EFL_START_TEST(eina_file_map_new_test)
int test_full_filename_size;
int test_full_filename2_size;
Eina_File *e_file, *e_file2;
- void *file_map, *file2_map;
+ void *file_map, *file2_map;
int fd, correct_file_open_check, correct_map_check, map_offset, map_length, file_length, file2_length;
int test_file_name_part_size = strlen(test_file_name_part);
int test_file2_name_part_size = strlen(test_file2_name_part);
@@ -322,7 +322,7 @@ EFL_START_TEST(eina_file_map_new_test)
Eina_Tmpstr *test_dirname = get_eina_test_file_tmp_dir();
fail_if(test_dirname == NULL);
test_dirname_size = strlen((char *)test_dirname);
-
+
// memory allocation
test_full_filename_size = test_file_name_part_size + test_dirname_size + 1;
test_file_path = (char *)malloc(test_full_filename_size);
@@ -355,61 +355,61 @@ EFL_START_TEST(eina_file_map_new_test)
// generating file 2 full name
strcpy(test_file2_path, (char *)test_dirname);
strcat(test_file2_path, test_file2_name_part);
-
+
fd = open(test_file_path, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, S_IWUSR | S_IRUSR);
- fail_if(fd == 0);
+ fail_if(fd <= 0);
fail_if(write(fd, eina_map_test_string, strlen(eina_map_test_string)) != (ssize_t) strlen(eina_map_test_string));
close(fd);
fd = open(test_file2_path, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, S_IWUSR | S_IRUSR);
- fail_if(fd == 0);
+ fail_if(fd <= 0);
fail_if(write(fd, big_buffer, big_buffer_size - file_min_offset) != big_buffer_size - file_min_offset);
close(fd);
e_file = eina_file_open(test_file_path, EINA_FALSE);
fail_if(!e_file);
file_length = eina_file_size_get(e_file);
- correct_file_open_check = file_length - test_string_length;
+ correct_file_open_check = file_length - test_string_length;
// check size of eina_map_test_string == size of file
fail_if(correct_file_open_check != 0);
fail_if(eina_file_refresh(e_file));
e_file2 = eina_file_open(test_file2_path, EINA_FALSE);
- fail_if(!e_file);
+ fail_if(!e_file2);
file2_length = eina_file_size_get(e_file2);
- correct_file_open_check = file2_length - (big_buffer_size - file_min_offset);
+ correct_file_open_check = file2_length - (big_buffer_size - file_min_offset);
// check size of big_buffer == size of file
- fail_if(correct_file_open_check != 0);
+ fail_if(correct_file_open_check != 0);
// test : offset > file -> length => return NULL
map_offset = test_string_length + file_min_offset;
map_length = file_min_offset;
- file_map = eina_file_map_new(e_file, EINA_FILE_WILLNEED, map_offset, map_length);
+ file_map = eina_file_map_new(e_file, EINA_FILE_WILLNEED, map_offset, map_length);
fail_if(file_map);
// test : offset + length > file -> length => return NULL
map_offset = file_min_offset;
map_length = test_string_length;
- file_map = eina_file_map_new(e_file, EINA_FILE_WILLNEED, map_offset, map_length);
+ file_map = eina_file_map_new(e_file, EINA_FILE_WILLNEED, map_offset, map_length);
fail_if(file_map);
fail_if(eina_file_map_faulted(e_file, file_map));
// test : offset = 0 AND length = file->length - use eina_file_map_all
map_offset = 0;
map_length = test_string_length;
- file_map = eina_file_map_new(e_file, EINA_FILE_WILLNEED, map_offset, map_length);
+ file_map = eina_file_map_new(e_file, EINA_FILE_WILLNEED, map_offset, map_length);
fail_if(!file_map);
- correct_map_check= strcmp((char*) file_map, eina_map_test_string);
+ correct_map_check= strcmp((char*) file_map, eina_map_test_string);
fail_if(correct_map_check != 0);
// test : offset = memory_page_size AND length = file->length - memory_page_size => correct partly map
map_offset = memory_page_size;
map_length = big_buffer_size - memory_page_size - file_min_offset;
- file2_map = eina_file_map_new(e_file2, EINA_FILE_WILLNEED, map_offset, map_length);
+ file2_map = eina_file_map_new(e_file2, EINA_FILE_WILLNEED, map_offset, map_length);
fail_if(!file2_map);
- correct_map_check = strcmp((char*)file2_map, big_buffer + memory_page_size);
- fail_if(correct_map_check != 0);
+ correct_map_check = strcmp((char*)file2_map, big_buffer + memory_page_size);
+ fail_if(correct_map_check != 0);
// test no crash with eina_file_map_populate()
eina_file_map_populate(e_file, EINA_FILE_POPULATE, file_map, 0, 0);
@@ -426,7 +426,7 @@ EFL_START_TEST(eina_file_map_new_test)
unlink(test_file_path);
unlink(test_file2_path);
- rmdir(test_dirname);
+ fail_if(rmdir(test_dirname) != 0);
free(test_file_path);
free(test_file2_path);
@@ -489,12 +489,39 @@ EFL_END_TEST
static void *
_eina_test_file_thread(void *data EINA_UNUSED, Eina_Thread t EINA_UNUSED)
{
+#ifdef _WIN32
+ char filename[MAX_PATH];
+ size_t len;
+ const char test_file[] = "cmd.exe";
+
+ fail_if(!GetSystemDirectoryA(filename, MAX_PATH));
+
+ len = strlen(filename);
+
+ /*
+ * Check the buffer size.
+ * The system path length + path separator + length of the test_file + null terminator
+ * Must fit in MAX_PATH.
+ */
+ fail_if(MAX_PATH < len + 1 + sizeof(test_file));
+
+ // append trailing directory separator if there isn't one
+ if (filename[len - 1] != '\\' && filename[len - 1] != '/')
+ {
+ filename[len] = '\\';
+ filename[len + 1] = '\0';
+ }
+
+ strncat(filename, test_file, MAX_PATH - len - 2);
+#else
+ const char *filename = "/bin/sh";
+#endif
Eina_File *f;
unsigned int i;
for (i = 0; i < 100; ++i)
{
- f = eina_file_open("/bin/sh", EINA_FALSE);
+ f = eina_file_open(filename, EINA_FALSE);
fail_if(!f);
eina_file_close(f);
}
@@ -520,6 +547,11 @@ static const struct {
const char *test;
const char *result;
} sanitize[] = {
+#ifdef _WIN32
+ { "C:\\home\\mydir\\..\\myfile", "C:/home/myfile" },
+ { "C:/home/mydir/../myfile", "C:/home/myfile" },
+ { "\\home\\mydir\\..\\myfile", "/home/myfile" },
+#endif
{ "/home/mydir/../myfile", "/home/myfile" }
};
@@ -531,7 +563,7 @@ EFL_START_TEST(eina_test_file_path)
for (i = 0; i < sizeof (sanitize) / sizeof (sanitize[0]); i++)
{
path = eina_file_path_sanitize(sanitize[i].test);
- fail_if(strcmp(path, sanitize[i].result));
+ ck_assert_str_eq(path, sanitize[i].result);
free(path);
}
}
@@ -741,14 +773,13 @@ EFL_START_TEST(eina_test_file_mktemp)
"./eina_file_test_XXXXXX.txt",
};
- errno = 0;
-
/* test NULL */
+ EXPECT_ERROR_START;
fd = eina_file_mkstemp(NULL, NULL);
fail_if(fd >= 0);
-
+ EXPECT_ERROR_END;
fd = eina_file_mkstemp(patterns[0], NULL);
- fail_if((fd < 0) || errno);
+ fail_if(fd < 0);
/* here's an attempt at removing the file, without knowing its path */
#ifdef F_GETPATH
@@ -777,12 +808,10 @@ EFL_START_TEST(eina_test_file_mktemp)
for (unsigned int k = 0; k < sizeof(patterns) / sizeof(patterns[0]); k++)
{
- errno = 0;
tmpfile = NULL;
fd = eina_file_mkstemp(patterns[k], &tmpfile);
ck_assert(fd >= 0);
ck_assert(!!tmpfile);
- ck_assert_msg(!errno, "ERROR(%s): %s\n", patterns[k], strerror(errno));
file = eina_file_open(tmpfile, EINA_FALSE);
fail_if(!file);
eina_file_close(file);
@@ -807,8 +836,8 @@ EFL_START_TEST(eina_test_file_mktemp)
eina_file_path_join(buf, sizeof(buf), tmpdir, "eina_file_test_XXXXXX.txt");
fd = eina_file_mkstemp(buf, &tmpfile);
- fail_if((fd < 0) || !tmpfile || errno);
- close(fd);
+ fail_if((fd < 0) || !tmpfile);
+ fail_if(close(fd));
it = eina_file_direct_ls(tmpdir);
fail_if(!it);
@@ -819,8 +848,9 @@ EFL_START_TEST(eina_test_file_mktemp)
eina_iterator_free(it);
- unlink(tmpfile);
- remove(tmpdir);
+ fail_if(unlink(tmpfile));
+ fail_if(rmdir(tmpdir));
+ eina_tmpstr_del(tmpdir);
}
EFL_END_TEST
@@ -845,6 +875,7 @@ EFL_START_TEST(eina_test_file_unlink)
{
int fd;
Eina_Tmpstr *test_file_path;
+ Eina_File* test_file;
const char *tmpfile = "eina_file_test_XXXXXX";
/*If file was not opened as 'eina'*/
@@ -855,9 +886,13 @@ EFL_START_TEST(eina_test_file_unlink)
/*If file was opened as 'eina'*/
fd = create_file_not_empty(tmpfile, &test_file_path, EINA_TRUE);
fail_if(fd != 0);
- fail_if(!eina_file_open(test_file_path, EINA_FALSE));
+
+ test_file = eina_file_open(test_file_path, EINA_FALSE);
+ fail_if(!test_file);
fail_if(!eina_file_unlink(test_file_path));
+ eina_file_close(test_file);
+
}
EFL_END_TEST
diff --git a/src/tests/eina/eina_test_hash.c b/src/tests/eina/eina_test_hash.c
index 87206d80ce..39d7fcc2a1 100644
--- a/src/tests/eina/eina_test_hash.c
+++ b/src/tests/eina/eina_test_hash.c
@@ -270,12 +270,8 @@ EFL_START_TEST(eina_test_hash_int32_fuzze)
Eina_Hash *hash;
unsigned int *r, *array;
unsigned int i;
- unsigned int seed;
unsigned int num_loops = 10000;
- seed = time(NULL);
- srand(seed);
-
hash = eina_hash_int32_new(NULL);
array = malloc(sizeof(int) * num_loops);
@@ -312,8 +308,6 @@ EFL_START_TEST(eina_test_hash_int64_fuzze)
uint64_t i;
uint64_t num_loops = 10000;
- srand(time(NULL));
-
hash = eina_hash_int64_new(NULL);
array = malloc(sizeof(int64_t) * num_loops);
@@ -347,13 +341,9 @@ EFL_START_TEST(eina_test_hash_string_fuzze)
{
Eina_Hash *hash;
unsigned int i;
- unsigned int seed;
char *array;
unsigned int num_loops = 100;
- seed = time(NULL);
- srand(seed);
-
hash = eina_hash_string_superfast_new(NULL);
array = malloc(num_loops * 10);
diff --git a/src/tests/eina/eina_test_inarray.c b/src/tests/eina/eina_test_inarray.c
index 74581f2685..cf671c9bb4 100644
--- a/src/tests/eina/eina_test_inarray.c
+++ b/src/tests/eina/eina_test_inarray.c
@@ -439,8 +439,10 @@ EFL_START_TEST(eina_inarray_test_search)
ret = eina_inarray_search(iarr, &temp, cmp);
fail_if(ret != 3);
+ EXPECT_ERROR_START;
rval = eina_inarray_replace_at(iarr, arr_size+1, &temp);
fail_if(rval != EINA_FALSE);
+ EXPECT_ERROR_END;
ret = eina_inarray_remove(iarr, &temp);
fail_if(ret != 3);
diff --git a/src/tests/eina/eina_test_iterator.c b/src/tests/eina/eina_test_iterator.c
index 28fe0dfc5b..8eb37f2488 100644
--- a/src/tests/eina/eina_test_iterator.c
+++ b/src/tests/eina/eina_test_iterator.c
@@ -654,6 +654,49 @@ EFL_START_TEST(eina_iterator_multi)
}
EFL_END_TEST
+static void*
+_return_x(const void *container EINA_UNUSED, void *data, void *fdata)
+{
+ Eina_Rectangle *rect = data;
+ ck_assert_int_eq(*((int*)fdata), 1337);
+
+ return &rect->x;
+}
+
+static void
+_free_cb(void *data)
+{
+ int *free_data = data;
+
+ *free_data = 0;
+}
+
+EFL_START_TEST(eina_iterator_process)
+{
+ Eina_Inarray *rects = eina_inarray_new(sizeof(Eina_Rectangle), 5);
+ Eina_Rectangle rect_arr[] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}, {12, 13, 14, 15}, {16, 17, 18, 19}};
+ Eina_Iterator *it;
+ int free = 1337;
+ int *a, i = 0;
+
+ eina_inarray_push(rects, &rect_arr[0]);
+ eina_inarray_push(rects, &rect_arr[1]);
+ eina_inarray_push(rects, &rect_arr[2]);
+ eina_inarray_push(rects, &rect_arr[3]);
+ eina_inarray_push(rects, &rect_arr[4]);
+
+ it = eina_iterator_processed_new(eina_inarray_iterator_new(rects), _return_x, _free_cb, &free);
+ EINA_ITERATOR_FOREACH(it, a)
+ {
+ ck_assert_int_eq(*a, i*4);
+ i++;
+ }
+ ck_assert_int_eq(i, 5);
+ eina_iterator_free(it);
+ ck_assert_int_eq(free, 0);
+}
+EFL_END_TEST
+
void
eina_test_iterator(TCase *tc)
{
@@ -667,4 +710,5 @@ eina_test_iterator(TCase *tc)
tcase_add_test(tc, eina_iterator_filter_free);
tcase_add_test(tc, eina_iterator_carray_length);
tcase_add_test(tc, eina_iterator_multi);
+ tcase_add_test(tc, eina_iterator_process);
}
diff --git a/src/tests/eina/eina_test_lock.c b/src/tests/eina/eina_test_lock.c
index 583ca1a7a9..bbf036b203 100644
--- a/src/tests/eina/eina_test_lock.c
+++ b/src/tests/eina/eina_test_lock.c
@@ -53,6 +53,25 @@ clock_gettime(int mode, struct timespec* ts)
return 0;
}
+
+# elif defined(_WIN32)
+
+# define CLOCK_REALTIME 0
+
+int
+clock_gettime(int mode, struct timespec* ts)
+{
+ FILETIME sys_time;
+ ULARGE_INTEGER li_sys_time;
+
+ GetSystemTimeAsFileTime(&sys_time);
+ li_sys_time.u.LowPart = sys_time.dwLowDateTime;
+ li_sys_time.u.HighPart = sys_time.dwHighDateTime;
+ ts->tv_sec = li_sys_time.QuadPart / 10000000UL;
+ ts->tv_nsec = (li_sys_time.QuadPart % 10000000UL) * 100UL;
+ return 0;
+}
+
# else /* ! __MACH__ */
# error No support for clock_gettime()
# endif /* __MACH__ */
diff --git a/src/tests/eina/eina_test_log.c b/src/tests/eina/eina_test_log.c
index 2deefd2f3d..624bbbe75d 100644
--- a/src/tests/eina/eina_test_log.c
+++ b/src/tests/eina/eina_test_log.c
@@ -114,7 +114,7 @@ EFL_START_TEST(eina_log_macro)
ctx.level = lvl; \
ctx.line = __LINE__ + 1; \
ctx.msg = _msg; \
- ctx.fnc = __FUNCTION__; \
+ ctx.fnc = __func__; \
ctx.did = EINA_FALSE
#ifdef EINA_LOG_LEVEL_MAXIMUM
@@ -188,7 +188,7 @@ EFL_START_TEST(eina_log_domains_macros)
ctx.level = lvl; \
ctx.line = __LINE__ + 1; \
ctx.msg = _msg; \
- ctx.fnc = __FUNCTION__; \
+ ctx.fnc = __func__; \
ctx.dom = "MyDomain"; \
ctx.did = EINA_FALSE
@@ -310,7 +310,7 @@ EFL_START_TEST(eina_log_level_indexes)
ctx.level = lvl; \
ctx.line = __LINE__ + 1; \
ctx.msg = _msg; \
- ctx.fnc = __FUNCTION__; \
+ ctx.fnc = __func__; \
ctx.dom = "Levels"; \
ctx.did = EINA_FALSE;
diff --git a/src/tests/eina/eina_test_magic.c b/src/tests/eina/eina_test_magic.c
index d2254a2ba9..e4f9005b03 100644
--- a/src/tests/eina/eina_test_magic.c
+++ b/src/tests/eina/eina_test_magic.c
@@ -146,7 +146,7 @@ EFL_START_TEST(eina_magic_simple)
#ifdef SHOW_LOG
fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n");
#endif
- TEST_MAGIC_SAFETY(__FUNCTION__,
+ TEST_MAGIC_SAFETY(__func__,
"*** Eina Magic Check Failed !!!\n"
" Input handle pointer is NULL.\n"
"\n");
@@ -164,7 +164,7 @@ EFL_START_TEST(eina_magic_simple)
fprintf(stderr,
"you should see 'Input handle has already been freed' below\n");
#endif
- TEST_MAGIC_SAFETY(__FUNCTION__,
+ TEST_MAGIC_SAFETY(__func__,
"*** Eina Magic Check Failed at %p !!!\n"
" Input handle has already been freed.\n"
"\n");
@@ -176,7 +176,7 @@ EFL_START_TEST(eina_magic_simple)
#ifdef SHOW_LOG
fprintf(stderr, "you should see 'Input handle is wrong type' below\n");
#endif
- TEST_MAGIC_SAFETY(__FUNCTION__,
+ TEST_MAGIC_SAFETY(__func__,
"*** Eina Magic Check Failed at %p !!!\n"
" Input handle is wrong type.\n"
" Expected: %08x - %s\n"
diff --git a/src/tests/eina/eina_test_matrix.c b/src/tests/eina/eina_test_matrix.c
index 2fa860c251..a0812ac12c 100644
--- a/src/tests/eina/eina_test_matrix.c
+++ b/src/tests/eina/eina_test_matrix.c
@@ -192,6 +192,24 @@ EFL_START_TEST(eina_matrix4)
}
EFL_END_TEST
+#define MATRIX4_CMP(XX, XY, XZ, XW, YX, YY, YZ, YW, ZX, ZY, ZZ, ZW, WX, WY, WZ, WW, AXX, AXY, AXZ, AXW, AYX, AYY, AYZ, AYW, AZX, AZY, AZZ, AZW, AWX, AWY, AWZ, AWW) \
+ (EINA_DBL_EQ(XX, AXX) && \
+ EINA_DBL_EQ(XY, AXY) && \
+ EINA_DBL_EQ(XZ, AXZ) && \
+ EINA_DBL_EQ(XW, AXW) && \
+ EINA_DBL_EQ(YX, AYX) && \
+ EINA_DBL_EQ(YY, AYY) && \
+ EINA_DBL_EQ(YZ, AYZ) && \
+ EINA_DBL_EQ(YW, AYW) && \
+ EINA_DBL_EQ(ZX, AZX) && \
+ EINA_DBL_EQ(ZY, AZY) && \
+ EINA_DBL_EQ(ZZ, AZZ) && \
+ EINA_DBL_EQ(ZW, AZW) && \
+ EINA_DBL_EQ(WX, AWX) && \
+ EINA_DBL_EQ(WY, AWY) && \
+ EINA_DBL_EQ(WZ, AWZ) && \
+ EINA_DBL_EQ(WW, AWW))
+
EFL_START_TEST(eina_matrix4_operation)
{
double det;
@@ -202,6 +220,7 @@ EFL_START_TEST(eina_matrix4_operation)
zx, zy, zz, zw,
wx, wy, wz, ww;
const double arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+ double rotate_radian = 45.0 * M_PI / 180.0;
eina_matrix4_values_set(&m,
0, 0, 2, 0,
@@ -311,6 +330,110 @@ EFL_START_TEST(eina_matrix4_operation)
!EINA_DBL_EQ(wy, 7) ||
!EINA_DBL_EQ(wz, 5) ||
!EINA_DBL_EQ(ww, 1));
+
+
+ eina_matrix4_identity(&m);
+
+ eina_matrix4_scale(&m, 5, 5, 5);
+ eina_matrix4_values_get(&m,
+ &xx, &xy, &xz, &xw,
+ &yx, &yy, &yz, &yw,
+ &zx, &zy, &zz, &zw,
+ &wx, &wy, &wz, &ww);
+
+ fail_if(!MATRIX4_CMP(xx, xy, xz, xw,
+ yx, yy, yz, yw,
+ zx, zy, zz, zw,
+ wx, wy, wz, ww,
+ 5, 0, 0, 0,
+ 0, 5, 0, 0,
+ 0, 0, 5, 0,
+ 0, 0, 0, 1));
+
+ eina_matrix4_translate(&m, 5, 5, 5);
+ eina_matrix4_values_get(&m,
+ &xx, &xy, &xz, &xw,
+ &yx, &yy, &yz, &yw,
+ &zx, &zy, &zz, &zw,
+ &wx, &wy, &wz, &ww);
+ fail_if(!MATRIX4_CMP(xx, xy, xz, xw,
+ yx, yy, yz, yw,
+ zx, zy, zz, zw,
+ wx, wy, wz, ww,
+ 5, 0, 0, 5,
+ 0, 5, 0, 5,
+ 0, 0, 5, 5,
+ 0, 0, 0, 1));
+
+ eina_matrix4_identity(&m);
+ eina_matrix4_rotate(&m, rotate_radian, EINA_MATRIX_AXIS_X);
+ eina_matrix4_values_get(&m,
+ &xx, &xy, &xz, &xw,
+ &yx, &yy, &yz, &yw,
+ &zx, &zy, &zz, &zw,
+ &wx, &wy, &wz, &ww);
+ fail_if(!MATRIX4_CMP(xx, xy, xz, xw,
+ yx, yy, yz, yw,
+ zx, zy, zz, zw,
+ wx, wy, wz, ww,
+ 1, 0, 0, 0,
+ 0, cos(rotate_radian), -sin(rotate_radian), 0,
+ 0, sin(rotate_radian), cos(rotate_radian), 0,
+ 0, 0, 0, 1));
+
+ eina_matrix4_identity(&m);
+ eina_matrix4_rotate(&m, rotate_radian, EINA_MATRIX_AXIS_Y);
+ eina_matrix4_values_get(&m,
+ &xx, &xy, &xz, &xw,
+ &yx, &yy, &yz, &yw,
+ &zx, &zy, &zz, &zw,
+ &wx, &wy, &wz, &ww);
+ fail_if(!MATRIX4_CMP(xx, xy, xz, xw,
+ yx, yy, yz, yw,
+ zx, zy, zz, zw,
+ wx, wy, wz, ww,
+ cos(rotate_radian), 0, sin(rotate_radian), 0,
+ 0, 1, 0, 0,
+ -sin(rotate_radian), 0, cos(rotate_radian), 0,
+ 0, 0, 0, 1));
+
+ eina_matrix4_identity(&m);
+ eina_matrix4_rotate(&m, rotate_radian, EINA_MATRIX_AXIS_Z);
+ eina_matrix4_values_get(&m,
+ &xx, &xy, &xz, &xw,
+ &yx, &yy, &yz, &yw,
+ &zx, &zy, &zz, &zw,
+ &wx, &wy, &wz, &ww);
+ fail_if(!MATRIX4_CMP(xx, xy, xz, xw,
+ yx, yy, yz, yw,
+ zx, zy, zz, zw,
+ wx, wy, wz, ww,
+ cos(rotate_radian), -sin(rotate_radian), 0, 0,
+ sin(rotate_radian), cos(rotate_radian), 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1));
+
+
+ eina_matrix4_identity(&m1);
+ eina_matrix4_values_set(&m2,
+ 1, 2, 3, 4,
+ 5, 6, 7, 8,
+ 9, 10, 11, 12,
+ 13, 14, 15, 16);
+ eina_matrix4_compose(&m1, &m2, &m);
+ eina_matrix4_values_get(&m,
+ &xx, &xy, &xz, &xw,
+ &yx, &yy, &yz, &yw,
+ &zx, &zy, &zz, &zw,
+ &wx, &wy, &wz, &ww);
+ fail_if(!MATRIX4_CMP(xx, xy, xz, xw,
+ yx, yy, yz, yw,
+ zx, zy, zz, zw,
+ wx, wy, wz, ww,
+ 1, 2, 3, 4,
+ 5, 6, 7, 8,
+ 9, 10, 11, 12,
+ 13, 14, 15, 16));
}
EFL_END_TEST
diff --git a/src/tests/eina/eina_test_matrixsparse.c b/src/tests/eina/eina_test_matrixsparse.c
index 5c8b548508..d2ad4c602f 100644
--- a/src/tests/eina/eina_test_matrixsparse.c
+++ b/src/tests/eina/eina_test_matrixsparse.c
@@ -145,9 +145,11 @@ EFL_START_TEST(eina_test_simple)
fail_if(row != 3 || col != 5);
test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
+ fail_if(test1 == NULL);
fail_if(*test1 != data[4][3]);
test1 = eina_matrixsparse_data_idx_get(matrix, 1, 3);
+ fail_if(test1 == NULL);
fail_if(*test1 != data[1][3]);
/* data changing */
diff --git a/src/tests/eina/eina_test_module.c b/src/tests/eina/eina_test_module.c
index 68ad598899..44b2389e73 100644
--- a/src/tests/eina/eina_test_module.c
+++ b/src/tests/eina/eina_test_module.c
@@ -32,14 +32,14 @@ static Eina_Bool list_cb(Eina_Module *m, void *data EINA_UNUSED)
const char *file;
/* the reference count */
- eina_module_load(m);
+ fail_if(!eina_module_load(m));
/* get */
sym = eina_module_symbol_get(m, "dummy_symbol");
fail_if(!sym);
fail_if(*sym != 0xbad);
file = eina_module_file_get(m);
fail_if(!file);
- eina_module_unload(m);
+ fail_if(eina_module_unload(m));
return EINA_TRUE;
}
diff --git a/src/tests/eina/eina_test_module_dummy.c b/src/tests/eina/eina_test_module_dummy.c
index bb9916db43..aa136ebe8f 100644
--- a/src/tests/eina/eina_test_module_dummy.c
+++ b/src/tests/eina/eina_test_module_dummy.c
@@ -16,7 +16,7 @@ void dummy_module_shutdown(void)
}
-EAPI int dummy_symbol = 0xbad;
+EINA_API int dummy_symbol = 0xbad;
EINA_MODULE_INIT(dummy_module_init);
EINA_MODULE_SHUTDOWN(dummy_module_shutdown);
diff --git a/src/tests/eina/eina_test_quaternion.c b/src/tests/eina/eina_test_quaternion.c
index fc1ec16bef..72360ec22c 100644
--- a/src/tests/eina/eina_test_quaternion.c
+++ b/src/tests/eina/eina_test_quaternion.c
@@ -220,7 +220,7 @@ EFL_START_TEST(eina_test_quaternion_dot)
res = eina_quaternion_dot(&q, &r);
- fail_if(res != 59);
+ fail_if(!EINA_DBL_EQ(res, 59));
}
EFL_END_TEST
@@ -457,25 +457,25 @@ EFL_START_TEST(eina_test_quaternion_operations)
(out.z + 0.1 > DBL_EPSILON) || (out.w - 0.1 > DBL_EPSILON));
eina_quaternion_array_set(&out, v);
- fail_if((out.x != 0) || (out.y != 1) ||
- (out.z != 2) || (out.w != 3));
+ fail_if((!EINA_DBL_EQ(out.x, 0)) || (!EINA_DBL_EQ(out.y, 1)) ||
+ (!EINA_DBL_EQ(out.z, 2)) || (!EINA_DBL_EQ(out.w, 3)));
eina_quaternion_copy(&out, &in);
- fail_if((out.x != 2) || (out.y != 2) ||
- (out.z != 1) || (out.w != 1));
+ fail_if((!EINA_DBL_EQ(out.x, 2)) || (!EINA_DBL_EQ(out.y, 2)) ||
+ (!EINA_DBL_EQ(out.z, 1)) || (!EINA_DBL_EQ(out.w, 1)));
eina_quaternion_homogeneous_regulate(&out, &in2);
- fail_if((out.x != 1) || (out.y != 1) ||
- (out.z != 1) || (out.w != 1));
+ fail_if((!EINA_DBL_EQ(out.x, 1)) || (!EINA_DBL_EQ(out.y, 1)) ||
+ (!EINA_DBL_EQ(out.z, 1)) || (!EINA_DBL_EQ(out.w, 1)));
eina_quaternion_subtract(&out, &in2, &in);
- fail_if((out.x != 3) || (out.y != 3) ||
- (out.z != 4) || (out.w != 4));
+ fail_if((!EINA_DBL_EQ(out.x, 3)) || (!EINA_DBL_EQ(out.y, 3)) ||
+ (!EINA_DBL_EQ(out.z, 4)) || (!EINA_DBL_EQ(out.w, 4)));
- fail_if(eina_quaternion_length_get(&in2) != 10);
- fail_if(eina_quaternion_length_square_get(&in) != 10);
+ fail_if(!EINA_DBL_EQ(eina_quaternion_length_get(&in2), 10));
+ fail_if(!EINA_DBL_EQ(eina_quaternion_length_square_get(&in), 10));
fail_if((eina_quaternion_distance_get(&in2, &in) - sqrt(50)) > DBL_EPSILON);
- fail_if(eina_quaternion_distance_square_get(&in2, &in) != 50);
+ fail_if(!EINA_DBL_EQ(eina_quaternion_distance_square_get(&in2, &in), 50));
angle = eina_quaternion_angle_plains(&in, &in2);
fail_if(angle - 0.963 > DBL_EPSILON);
diff --git a/src/tests/eina/eina_test_range.c b/src/tests/eina/eina_test_range.c
new file mode 100644
index 0000000000..a1f84b8a00
--- /dev/null
+++ b/src/tests/eina/eina_test_range.c
@@ -0,0 +1,72 @@
+/* EINA - EFL data type library
+ * Copyright (C) 2020 Ali Alzyod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library;
+ * if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+
+#include <Eina.h>
+
+#include "eina_suite.h"
+
+EFL_START_TEST(eina_range_intersect_union_test)
+{
+ Eina_Range r1 = EINA_RANGE(0, 10);
+ Eina_Range r2 = EINA_RANGE(5, 15);
+
+ Eina_Range r_intersect = eina_range_intersect(&r1, &r2);
+ ck_assert_uint_eq(r_intersect.start, 5);
+ ck_assert_uint_eq(r_intersect.length, 5);
+
+ Eina_Range r_union = eina_range_union(&r1, &r2);
+ ck_assert_uint_eq(r_union.start, 0);
+ ck_assert_uint_eq(r_union.length, 20);
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_range_contains_test)
+{
+ Eina_Range r1 = EINA_RANGE(0, 10);
+
+ ck_assert(eina_range_contains(&r1,0));
+ ck_assert(eina_range_contains(&r1,9));
+ ck_assert(!eina_range_contains(&r1,10));
+}
+EFL_END_TEST
+
+EFL_START_TEST(eina_range_equal_test)
+{
+ Eina_Range r1 = EINA_RANGE(0, 10);
+ Eina_Range r2 = EINA_RANGE(0, 10);
+ Eina_Range r3 = EINA_RANGE(0, 9);
+
+ ck_assert(eina_range_equal(&r1, &r2));
+ ck_assert(!eina_range_equal(&r1, &r3));
+}
+EFL_END_TEST
+
+
+void
+eina_test_range(TCase *tc)
+{
+ tcase_add_test(tc, eina_range_intersect_union_test);
+ tcase_add_test(tc, eina_range_contains_test);
+ tcase_add_test(tc, eina_range_equal_test);
+}
diff --git a/src/tests/eina/eina_test_safepointer.c b/src/tests/eina/eina_test_safepointer.c
index c99a188c2e..3096573058 100644
--- a/src/tests/eina/eina_test_safepointer.c
+++ b/src/tests/eina/eina_test_safepointer.c
@@ -167,7 +167,9 @@ EFL_START_TEST(eina_test_safepointer_lowestbit)
eina_safepointer_unregister(ptr);
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_safepointer_get(ptr), NULL);
+ EXPECT_ERROR_END;
}
}
EFL_END_TEST
diff --git a/src/tests/eina/eina_test_strbuf.c b/src/tests/eina/eina_test_strbuf.c
index add3ce0963..ac99992a31 100644
--- a/src/tests/eina/eina_test_strbuf.c
+++ b/src/tests/eina/eina_test_strbuf.c
@@ -303,6 +303,20 @@ EFL_START_TEST(eina_test_strbuf_replace)
fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
+ fail_if(eina_strbuf_replace_last(buf, "a", "x") == 0);
+ fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
+ fail_if(strcmp(eina_strbuf_string_get(buf), "baaaxb"));
+
+ fail_if(eina_strbuf_replace_first(buf, "a", "b") == 0);
+ fail_if(strcmp(eina_strbuf_string_get(buf), "bbaaxb"));
+
+ eina_strbuf_free(buf);
+
+ buf = eina_strbuf_manage_read_only_new_length("baaaab",6);
+ fail_if(!buf);
+ fail_if(eina_strbuf_replace_first(buf, "a", "b") == 0);
+ fail_if(strcmp(eina_strbuf_string_get(buf), "bbaaab"));
+
eina_strbuf_free(buf);
}
EFL_END_TEST
diff --git a/src/tests/eina/eina_test_stringshare.c b/src/tests/eina/eina_test_stringshare.c
index 2f46ab75a4..d8ea004938 100644
--- a/src/tests/eina/eina_test_stringshare.c
+++ b/src/tests/eina/eina_test_stringshare.c
@@ -173,8 +173,6 @@ EINA_TEST_START(eina_stringshare_collision)
char buffer[50];
int i;
- srand(time(NULL));
-
ea = eina_array_new(256);
fail_if(!ea);
diff --git a/src/tests/eina/eina_test_value.c b/src/tests/eina/eina_test_value.c
index 347c79bad4..7d9e27e29a 100644
--- a/src/tests/eina/eina_test_value.c
+++ b/src/tests/eina/eina_test_value.c
@@ -2158,6 +2158,48 @@ EFL_START_TEST(eina_value_test_array)
}
EFL_END_TEST
+EFL_START_TEST(eina_value_test_list_insert)
+{
+ Eina_Value *value;
+ char c;
+ char *str;
+ char buf[1024];
+
+ value = eina_value_list_new(EINA_VALUE_TYPE_CHAR);
+ fail_unless(value != NULL);
+
+ fail_unless(eina_value_list_count(value) == 0);
+ fail_unless(!eina_value_list_insert(value, 1, '-'));
+ fail_unless(!eina_value_list_insert(value, 10, 'j'));
+ fail_unless(eina_value_list_count(value) == 0);
+
+ fail_unless(eina_value_list_insert(value, 0, 'k'));
+ fail_unless(eina_value_list_insert(value, 1, '-'));
+ fail_unless(eina_value_list_insert(value, 0, 's'));
+ fail_unless(eina_value_list_insert(value, 1, 'j'));
+ fail_unless(eina_value_list_count(value) == 4);
+
+ fail_unless(eina_value_list_get(value, 0, &c));
+ fail_unless(c == 's');
+ fail_unless(eina_value_list_get(value, 1, &c));
+ fail_unless(c == 'j');
+ fail_unless(eina_value_list_get(value, 2, &c));
+ fail_unless(c == 'k');
+ fail_unless(eina_value_list_get(value, 3, &c));
+ fail_unless(c == '-');
+
+ snprintf(buf, sizeof(buf), "[%d, %d, %d, %d]",
+ (int) 's', (int) 'j', (int) 'k', (int) '-');
+
+ str = eina_value_to_string(value);
+ fail_unless(str != NULL);
+ ck_assert_str_eq(str, buf);
+
+ free(str);
+ eina_value_free(value);
+}
+EFL_END_TEST
+
EFL_START_TEST(eina_value_test_list)
{
Eina_Value *value, other;
@@ -3031,6 +3073,7 @@ eina_test_value(TCase *tc)
// TODO: other converters...
tcase_add_test(tc, eina_value_test_array);
tcase_add_test(tc, eina_value_test_list);
+ tcase_add_test(tc, eina_value_test_list_insert);
tcase_add_test(tc, eina_value_test_hash);
tcase_add_test(tc, eina_value_test_timeval);
tcase_add_test(tc, eina_value_test_blob);
diff --git a/src/tests/eina/eina_test_vector.c b/src/tests/eina/eina_test_vector.c
index 6030dfc528..e4afa8bc9a 100644
--- a/src/tests/eina/eina_test_vector.c
+++ b/src/tests/eina/eina_test_vector.c
@@ -42,41 +42,41 @@ EFL_START_TEST(eina_test_vector2_operations)
eina_vector2_set(&v1, x, y);
- fail_if((v1.x != 1) || (v1.y != 2));
+ fail_if(!EINA_DBL_EQ(v1.x, 1) || !EINA_DBL_EQ(v1.y, 2));
eina_vector2_array_set(&v2, arr);
- fail_if((v2.x != 5) || (v2.y != 5));
+ fail_if(!EINA_DBL_EQ(v2.x, 5) || !EINA_DBL_EQ(v2.y, 5));
eina_vector2_copy(&v1, &v2);
- fail_if((v1.x != 5) || (v1.y != 5));
+ fail_if(!EINA_DBL_EQ(v1.x, 5) || !EINA_DBL_EQ(v1.y, 5));
eina_vector2_negate(&v1, &v2);
- fail_if((v1.x != -5) || (v1.y != -5));
+ fail_if(!EINA_DBL_EQ(v1.x, -5) || !EINA_DBL_EQ(v1.y, -5));
eina_vector2_set(&v1, x, y);
eina_vector2_add(&v3, &v1, &v2);
- fail_if((v3.x != 6) || (v3.y != 7));
+ fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 7));
eina_vector2_subtract(&v3, &v2, &v1);
- fail_if((v3.x != 4) || (v3.y != 3));
+ fail_if(!EINA_DBL_EQ(v3.x, 4) || !EINA_DBL_EQ(v3.y, 3));
eina_vector2_scale(&v3, &v1, y);
- fail_if((v3.x != 2) || (v3.y != 4));
+ fail_if(!EINA_DBL_EQ(v3.x, 2) || !EINA_DBL_EQ(v3.y, 4));
res = eina_vector2_dot_product(&v1, &v2);
- fail_if(res != 15);
+ fail_if(!EINA_DBL_EQ(res, 15));
res = eina_vector2_length_get(&v2);
fail_if((res - sqrt(50)) > DBL_EPSILON);
res = eina_vector2_length_square_get(&v2);
- fail_if(res != 50);
+ fail_if(!EINA_DBL_EQ(res, 50));
res = eina_vector2_distance_get(&v2, &v1);
fail_if((res - sqrt(25)) > DBL_EPSILON);
res = eina_vector2_distance_square_get(&v2, &v1);
- fail_if(res != 25);
+ fail_if(!EINA_DBL_EQ(res, 25));
eina_vector2_normalize(&v3, &v2);
fail_if((v3.x - v2.x / sqrt(50)) > DBL_EPSILON ||
@@ -86,10 +86,10 @@ EFL_START_TEST(eina_test_vector2_operations)
2, 2,
2, 2);
eina_vector2_transform(&v3, &m2, &v1);
- fail_if((v3.x != 6) || (v3.y != 6));
+ fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 6));
eina_vector2_transform(&v3, &m2, &v3);
- fail_if((v3.x != 24) || (v3.y != 24));
+ fail_if(!EINA_DBL_EQ(v3.x, 24) || !EINA_DBL_EQ(v3.y, 24));
eina_matrix3_values_set(&m3,
2, 2, 2,
@@ -97,14 +97,14 @@ EFL_START_TEST(eina_test_vector2_operations)
2, 2, 2);
eina_vector2_homogeneous_position_transform(&v3, &m3, &v1);
- fail_if((v3.x != 1) || (v3.y != 1));
+ fail_if(!EINA_DBL_EQ(v3.x, 1) || !EINA_DBL_EQ(v3.y, 1));
eina_vector2_homogeneous_direction_transform(&v3, &m3, &v1);
- fail_if((v3.x != 6) || (v3.y != 6));
+ fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 6));
eina_vector2_homogeneous_direction_transform(&v3, &m3, &v3);
- fail_if((v3.x != 24) || (v3.y != 24));
+ fail_if(!EINA_DBL_EQ(v3.x, 24) || !EINA_DBL_EQ(v3.y, 24));
}
EFL_END_TEST
@@ -126,51 +126,51 @@ EFL_START_TEST(eina_test_vector3_operations)
eina_vector3_set(&v1, x, y, z);
- fail_if((v1.x != 1) || (v1.y != 2) || (v1.z != 3));
+ fail_if(!EINA_DBL_EQ(v1.x, 1) || !EINA_DBL_EQ(v1.y, 2) || !EINA_DBL_EQ(v1.z, 3));
eina_vector3_array_set(&v2, arr);
- fail_if((v2.x != 5) || (v2.y != 5) || (v2.z != 5));
+ fail_if(!EINA_DBL_EQ(v2.x, 5) || !EINA_DBL_EQ(v2.y, 5) || !EINA_DBL_EQ(v2.z, 5));
eina_vector3_copy(&v1, &v2);
- fail_if((v1.x != 5) || (v1.y != 5) || (v1.z != 5));
+ fail_if(!EINA_DBL_EQ(v1.x, 5) || !EINA_DBL_EQ(v1.y, 5) || !EINA_DBL_EQ(v1.z, 5));
eina_vector3_negate(&v1, &v2);
- fail_if((v1.x != -5) || (v1.y != -5), (v1.z != -5));
+ fail_if(!EINA_DBL_EQ(v1.x, -5) || !EINA_DBL_EQ(v1.y, -5) || !EINA_DBL_EQ(v1.z, -5));
eina_vector3_set(&v1, x, y, z);
eina_vector3_add(&v3, &v1, &v2);
- fail_if((v3.x != 6) || (v3.y != 7) || v3.z != 8);
+ fail_if(!EINA_DBL_EQ(v3.x, 6) || !EINA_DBL_EQ(v3.y, 7) || !EINA_DBL_EQ(v3.z, 8));
eina_vector3_subtract(&v3, &v2, &v1);
- fail_if((v3.x != 4) || (v3.y != 3) || (v3.z != 2));
+ fail_if(!EINA_DBL_EQ(v3.x, 4) || !EINA_DBL_EQ(v3.y, 3) || !EINA_DBL_EQ(v3.z, 2));
eina_vector3_scale(&v3, &v1, y);
- fail_if((v3.x != 2) || (v3.y != 4) || (v3.z != 6));
+ fail_if(!EINA_DBL_EQ(v3.x, 2) || !EINA_DBL_EQ(v3.y, 4) || !EINA_DBL_EQ(v3.z, 6));
eina_vector3_multiply(&v3, &v2, &v1);
- fail_if((v3.x != 5) || (v3.y != 10) || (v3.z != 15));
+ fail_if(!EINA_DBL_EQ(v3.x, 5) || !EINA_DBL_EQ(v3.y, 10) || !EINA_DBL_EQ(v3.z, 15));
res = eina_vector3_dot_product(&v1, &v2);
- fail_if(res != 30);
+ fail_if(!EINA_DBL_EQ(res, 30));
eina_vector3_cross_product(&v3, &v1, &v2);
- fail_if((v3.x != -5) || (v3.y != 10) || (v3.z != -5));
+ fail_if(!EINA_DBL_EQ(v3.x, -5) || !EINA_DBL_EQ(v3.y, 10) || !EINA_DBL_EQ(v3.z, -5));
eina_vector3_cross_product(&v3, &v1, &v3);
- fail_if((v3.x != -40) || (v3.y != -10) || (v3.z != 20));
+ fail_if(!EINA_DBL_EQ(v3.x, -40) || !EINA_DBL_EQ(v3.y, -10) || !EINA_DBL_EQ(v3.z, 20));
res = eina_vector3_length_get(&v2);
fail_if((res - sqrt(75)) > DBL_EPSILON);
res = eina_vector3_length_square_get(&v2);
- fail_if(res != 75);
+ fail_if(!EINA_DBL_EQ(res, 75));
res = eina_vector3_distance_get(&v2, &v1);
fail_if((res - sqrt(29)) > (DBL_EPSILON * 2.0));
res = eina_vector3_distance_square_get(&v2, &v1);
- fail_if(res != 29);
+ fail_if(!EINA_DBL_EQ(res, 29));
eina_vector3_normalize(&v3, &v2);
fail_if((v3.x - v2.x / sqrt(75)) > DBL_EPSILON ||
@@ -185,10 +185,10 @@ EFL_START_TEST(eina_test_vector3_operations)
2, 2, 2,
2, 2, 2);
eina_vector3_transform(&v3, &m3, &v1);
- fail_if((v3.x != 12) || (v3.y != 12) || (v3.z != 12));
+ fail_if(!EINA_DBL_EQ(v3.x, 12) || !EINA_DBL_EQ(v3.y, 12) || !EINA_DBL_EQ(v3.z, 12));
eina_vector3_transform(&v3, &m3, &v3);
- fail_if((v3.x != 72) || (v3.y != 72) || (v3.z != 72));
+ fail_if(!EINA_DBL_EQ(v3.x, 72) || !EINA_DBL_EQ(v3.y, 72) || !EINA_DBL_EQ(v3.z, 72));
eina_matrix4_values_set(&m4,
2, 2, 2, 2,
@@ -196,24 +196,24 @@ EFL_START_TEST(eina_test_vector3_operations)
2, 2, 2, 2,
2, 2, 2, 2);
eina_vector3_homogeneous_position_transform(&v3, &m4, &v1);
- fail_if((v3.x != 1) || (v3.y != 1) || (v3.z != 1));
+ fail_if(!EINA_DBL_EQ(v3.x, 1) || !EINA_DBL_EQ(v3.y, 1) || !EINA_DBL_EQ(v3.z, 1));
eina_quaternion_set(&q, 2, 2, 2, 0);
eina_vector3_quaternion_rotate(&v3, &v1, &q);
- fail_if((v3.x != 25) || (v3.y != 2) || (v3.z != -21));
+ fail_if(!EINA_DBL_EQ(v3.x, 25) || !EINA_DBL_EQ(v3.y, 2) || !EINA_DBL_EQ(v3.z, -21));
eina_vector3_orthogonal_projection_on_plane(&v3, &v1, &v2);
- fail_if((v3.x != -1) || (v3.y != 0) || (v3.z != 1));
+ fail_if(!EINA_DBL_EQ(v3.x, -1) || !EINA_DBL_EQ(v3.y, 0) || !EINA_DBL_EQ(v3.z, 1));
eina_vector3_plane_by_points(&q, &v3, &v1, &v2);
- fail_if((q.x != -2) || (q.y != 4) || (q.z != -2) || (q.z > DBL_EPSILON));
+ fail_if(!EINA_DBL_EQ(q.x, -2) || !EINA_DBL_EQ(q.y, 4) || !EINA_DBL_EQ(q.z, -2) || (q.z > DBL_EPSILON));
eina_vector3_homogeneous_direction_set(&v3, &q);
- fail_if((v3.x != -2) || (v3.y != 4) || (v3.z != -2));
+ fail_if(!EINA_DBL_EQ(v3.x, -2) || !EINA_DBL_EQ(v3.y, 4) || !EINA_DBL_EQ(v3.z, -2));
eina_quaternion_set(&q, 2, 2, 2, 0.5);
eina_vector3_homogeneous_position_set(&v3, &q);
- fail_if((v3.x != 4) || (v3.y != 4) || (v3.z != 4));
+ fail_if(!EINA_DBL_EQ(v3.x, 4) || !EINA_DBL_EQ(v3.y, 4) || !EINA_DBL_EQ(v3.z, 4));
res2 = eina_vector3_equivalent(&v1, &v2);
fail_if(res2 != EINA_FALSE);
@@ -230,10 +230,10 @@ EFL_START_TEST(eina_test_vector3_operations)
fail_if(res2 != EINA_TRUE);
eina_vector3_homogeneous_direction_transform(&v3, &m4, &v1);
- fail_if((v3.x != 12) || (v3.y != 12) || (v3.z != 12));
+ fail_if(!EINA_DBL_EQ(v3.x, 12) || !EINA_DBL_EQ(v3.y, 12) || !EINA_DBL_EQ(v3.z, 12));
eina_vector3_homogeneous_direction_transform(&v3, &m4, &v3);
- fail_if((v3.x != 72) || (v3.y != 72) || (v3.z != 72));
+ fail_if(!EINA_DBL_EQ(v3.x, 72) || !EINA_DBL_EQ(v3.y, 72) || !EINA_DBL_EQ(v3.z, 72));
}
EFL_END_TEST
diff --git a/src/tests/eina/eina_test_vpath.c b/src/tests/eina/eina_test_vpath.c
index 1282cc4f2f..8db218eefc 100644
--- a/src/tests/eina/eina_test_vpath.c
+++ b/src/tests/eina/eina_test_vpath.c
@@ -30,18 +30,42 @@ EFL_END_TEST
EFL_START_TEST(eina_test_vpath_invalid)
{
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("(:asdfasdfafasdf"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("(:missing_slash:)"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("(:"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("(:home:)"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("(:wrong_meta_key:)/"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("${asdfasdfafasdf"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("${missing_slash}"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("${"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("${home}"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("${wrong_meta_key}/"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("${home:)"), NULL);
+ EXPECT_ERROR_END;
+ EXPECT_ERROR_START;
ck_assert_ptr_eq(eina_vpath_resolve("${wrong_meta_key:)/"), NULL);
+ EXPECT_ERROR_END;
}
EFL_END_TEST
diff --git a/src/tests/eina/meson.build b/src/tests/eina/meson.build
index b6ba688e8b..18c8f91ced 100644
--- a/src/tests/eina/meson.build
+++ b/src/tests/eina/meson.build
@@ -29,6 +29,7 @@ eina_test_src = files(
'eina_test_benchmark.c',
'eina_test_mempool.c',
'eina_test_rectangle.c',
+'eina_test_range.c',
'eina_test_list.c',
'eina_test_matrixsparse.c',
'eina_test_tiler.c',
@@ -53,7 +54,8 @@ eina_test_src = files(
'eina_test_slice.c',
'eina_test_freeq.c',
'eina_test_slstr.c',
-'eina_test_vpath.c'
+'eina_test_vpath.c',
+'eina_test_abstract_content.c',
)
diff --git a/src/tests/eina_cxx/eina_simple.eo b/src/tests/eina_cxx/eina_simple.eo
index 4034dd6642..725d1824ab 100644
--- a/src/tests/eina_cxx/eina_simple.eo
+++ b/src/tests/eina_cxx/eina_simple.eo
@@ -1,5 +1,5 @@
-class Eina_Simple extends Efl.Object
-{
+class Eina_Simple extends Efl.Object {
+ [[Docs for Eona_Simple. @since 1.66]]
data: null;
implements {
Efl.Object.constructor;
diff --git a/src/tests/eio/eio_test_manager.c b/src/tests/eio/eio_test_manager.c
index fb6c7f4054..fbbe3b78e5 100644
--- a/src/tests/eio/eio_test_manager.c
+++ b/src/tests/eio/eio_test_manager.c
@@ -88,8 +88,8 @@ _done_cb(void *data,
unsigned long files_count = 0;
eina_value_setup(&convert, EINA_VALUE_TYPE_ULONG);
- eina_value_convert(&file, &convert);
- eina_value_ulong_get(&convert, &files_count);
+ fail_if(eina_value_convert(&file, &convert) != EINA_TRUE);
+ fail_unless(eina_value_ulong_get(&convert, &files_count));
fail_if((*number_of_listed_files) != test_count);
fail_if(files_count != test_count);
@@ -323,6 +323,8 @@ EFL_START_TEST(efl_io_test_instantiated)
{
Efl_Io_Manager *manager;
+ efl_object_init();
+
ck_assert_int_eq(eio_shutdown(), 0);
ecore_init();
fail_if(efl_provider_find(efl_main_loop_get(), EFL_IO_MANAGER_CLASS) != NULL);
@@ -332,6 +334,8 @@ EFL_START_TEST(efl_io_test_instantiated)
manager = efl_provider_find(efl_main_loop_get(), EFL_IO_MANAGER_CLASS);
fail_if(manager == NULL);
fail_if(!efl_isa(manager, EFL_IO_MANAGER_CLASS));
+
+ efl_object_shutdown();
}
EFL_END_TEST
diff --git a/src/tests/eio/eio_test_map.c b/src/tests/eio/eio_test_map.c
index fdb0631a9d..f794f73d73 100644
--- a/src/tests/eio/eio_test_map.c
+++ b/src/tests/eio/eio_test_map.c
@@ -14,7 +14,7 @@
#include "eio_suite.h"
-Eina_File *ee;
+Eina_File *eie;
static void
_done_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED)
@@ -25,7 +25,7 @@ _done_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED)
static void
_open_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, Eina_File *ef)
{
- ee = ef;
+ eie = ef;
ecore_main_loop_quit();
}
@@ -70,17 +70,17 @@ EFL_START_TEST(eio_test_map_simple)
ecore_main_loop_begin();
fail_if(!ef);
- ef = eio_file_map_all(ee, EINA_FILE_POPULATE, _filter_cb, _map_cb,
+ ef = eio_file_map_all(eie, EINA_FILE_POPULATE, _filter_cb, _map_cb,
_error_cb, data);
ecore_main_loop_begin();
fail_if(!ef);
- ef = eio_file_map_new(ee, EINA_FILE_WILLNEED, 0, strlen(data), _filter_cb,
+ ef = eio_file_map_new(eie, EINA_FILE_WILLNEED, 0, strlen(data), _filter_cb,
_map_cb, _error_cb, data);
ecore_main_loop_begin();
fail_if(!ef);
- ef = eio_file_close(ee, _done_cb, _error_cb, NULL);
+ ef = eio_file_close(eie, _done_cb, _error_cb, NULL);
ecore_main_loop_begin();
fail_if(!ef);
diff --git a/src/tests/eldbus/eldbus_fake_server.c b/src/tests/eldbus/eldbus_fake_server.c
index c9ef1d95a0..32f5b9bd17 100644
--- a/src/tests/eldbus/eldbus_fake_server.c
+++ b/src/tests/eldbus/eldbus_fake_server.c
@@ -153,12 +153,20 @@ _fake_server_property_set(const Eldbus_Service_Interface *iface,
ck_assert_ptr_ne(NULL, data);
if (strcmp(propname, FAKE_SERVER_WRITEONLY_PROPERTY) == 0)
- eldbus_message_iter_arguments_get(iter, "i", &data->writeonly_property);
- else
- if (strcmp(propname, FAKE_SERVER_READWRITE_PROPERTY) == 0)
- eldbus_message_iter_arguments_get(iter, "i", &data->readwrite_property);
+ {
+ if (!eldbus_message_iter_arguments_get(iter, "i", &data->writeonly_property))
+ ck_abort_msg("error getting iter arguments on _fake_server_property_set");
+ }
else
- return eldbus_message_error_new(msg, "Invalid property", "Invalid property.");
+ {
+ if (strcmp(propname, FAKE_SERVER_READWRITE_PROPERTY) == 0)
+ {
+ if (!eldbus_message_iter_arguments_get(iter, "i", &data->readwrite_property))
+ ck_abort_msg("error getting iter arguments on _fake_server_property_set");
+ }
+ else
+ return eldbus_message_error_new(msg, "Invalid property", "Invalid property.");
+ }
return eldbus_message_method_return_new(msg);
}
@@ -179,7 +187,6 @@ _fake_server_name_request_cb(void *data EINA_UNUSED,
if (ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER != reply)
{
const char *errcode = "Unknown reply";
- char errmsg[512];
switch (reply)
{
case ELDBUS_NAME_REQUEST_REPLY_IN_QUEUE:
@@ -194,9 +201,8 @@ _fake_server_name_request_cb(void *data EINA_UNUSED,
break;
default: break;
}
- snprintf(errmsg, sizeof(errmsg), "Failed to start fake server: %s (%u)",
+ ck_abort_msg( "Failed to start fake server: %s (%u)",
errcode, reply);
- ck_abort_msg(errmsg);
}
ecore_main_loop_quit();
diff --git a/src/tests/elementary/custom_gesture.c b/src/tests/elementary/custom_gesture.c
new file mode 100644
index 0000000000..629f68bcd5
--- /dev/null
+++ b/src/tests/elementary/custom_gesture.c
@@ -0,0 +1,19 @@
+#include <Efl_Ui.h>
+#include "custom_gesture.eo.h"
+#include "custom_gesture.h"
+#define MY_CLASS CUSTOM_GESTURE_CLASS
+
+
+EOLIAN static int
+_custom_gesture_x_delta_get(const Eo *obj EINA_UNUSED, Custom_Gesture_Data *pd)
+{
+ return pd->x_delta;
+}
+
+EOLIAN static int
+_custom_gesture_y_delta_get(const Eo *obj EINA_UNUSED, Custom_Gesture_Data *pd)
+{
+ return pd->y_delta;
+}
+
+#include "custom_gesture.eo.c"
diff --git a/src/tests/elementary/custom_gesture.eo b/src/tests/elementary/custom_gesture.eo
new file mode 100644
index 0000000000..7a6266db93
--- /dev/null
+++ b/src/tests/elementary/custom_gesture.eo
@@ -0,0 +1,26 @@
+import eina_types;
+parse efl_canvas_gesture_recognizer;
+
+class @beta Custom_Gesture extends Efl.Canvas.Gesture_Custom
+{
+ [[This is a test class for custom gesture implementations.
+ ]]
+ methods {
+ @property x_delta {
+ [[This is the total change in the X coordinate.]]
+ get {
+ }
+ values {
+ val: int; [[The change since the start of the gesture.]]
+ }
+ }
+ @property y_delta {
+ [[This is the total change in the Y coordinate.]]
+ get {
+ }
+ values {
+ val: int; [[The change since the start of the gesture.]]
+ }
+ }
+ }
+}
diff --git a/src/tests/elementary/custom_gesture.h b/src/tests/elementary/custom_gesture.h
new file mode 100644
index 0000000000..fa12b68593
--- /dev/null
+++ b/src/tests/elementary/custom_gesture.h
@@ -0,0 +1,16 @@
+#ifndef CUSTOM_GESTURE_H
+# define CUSTOM_GESTURE_H
+
+
+typedef struct Custom_Gesture_Data
+{
+ int x_delta;
+ int y_delta;
+} Custom_Gesture_Data;
+
+
+
+
+
+
+#endif
diff --git a/src/tests/elementary/custom_recognizer.c b/src/tests/elementary/custom_recognizer.c
new file mode 100644
index 0000000000..4797b9530e
--- /dev/null
+++ b/src/tests/elementary/custom_recognizer.c
@@ -0,0 +1,56 @@
+#include <Efl_Ui.h>
+#include "custom_recognizer.eo.h"
+#include "custom_gesture.eo.h"
+#include "custom_gesture.h"
+
+#define MY_CLASS CUSTOM_RECOGNIZER_CLASS
+
+typedef struct Custom_Recognizer_Data
+{
+
+} Custom_Recognizer_Data;
+
+EOLIAN static const Efl_Class *
+_custom_recognizer_efl_canvas_gesture_recognizer_type_get(const Eo *obj EINA_UNUSED, Custom_Recognizer_Data *pd EINA_UNUSED)
+{
+ return CUSTOM_GESTURE_CLASS;
+}
+
+EOLIAN static Eo *
+_custom_recognizer_efl_object_finalize(Eo *obj, Custom_Recognizer_Data *pd EINA_UNUSED)
+{
+ efl_gesture_recognizer_custom_gesture_name_set(obj, "custom_gesture");
+ return efl_finalize(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
+_custom_recognizer_efl_canvas_gesture_recognizer_recognize(Eo *obj EINA_UNUSED, Custom_Recognizer_Data *pd EINA_UNUSED,
+ Efl_Canvas_Gesture *gesture, Efl_Object *watched EINA_UNUSED,
+ Efl_Canvas_Gesture_Touch *event)
+{
+ const Efl_Gesture_Touch_Point_Data *data = efl_gesture_touch_current_data_get(event);
+ Custom_Gesture_Data *gd;
+
+ /* ignore multi-touch */
+ if (data->id) return EFL_GESTURE_RECOGNIZER_RESULT_IGNORE;
+
+ switch (efl_gesture_touch_state_get(event))
+ {
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ gd = efl_data_scope_get(gesture, CUSTOM_GESTURE_CLASS);
+ gd->x_delta += data->cur.pos.x - data->prev.pos.x;
+ gd->y_delta += data->cur.pos.y - data->prev.pos.y;
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ case EFL_GESTURE_TOUCH_STATE_END:
+ return EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ default:
+
+ break;
+ }
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+}
+
+#include "custom_recognizer.eo.c"
diff --git a/src/tests/elementary/custom_recognizer.eo b/src/tests/elementary/custom_recognizer.eo
new file mode 100644
index 0000000000..bbe4c0cfc6
--- /dev/null
+++ b/src/tests/elementary/custom_recognizer.eo
@@ -0,0 +1,11 @@
+class @beta Custom_Recognizer extends Efl.Canvas.Gesture_Recognizer_Custom
+{
+ [[Custom gesture recognizer test class.
+ ]]
+ c_prefix: custom_recognizer;
+ implements {
+ Efl.Object.finalize;
+ Efl.Canvas.Gesture_Recognizer.recognize;
+ Efl.Canvas.Gesture_Recognizer.type { get; }
+ }
+}
diff --git a/src/tests/elementary/custom_recognizer2.c b/src/tests/elementary/custom_recognizer2.c
new file mode 100644
index 0000000000..3b8995058a
--- /dev/null
+++ b/src/tests/elementary/custom_recognizer2.c
@@ -0,0 +1,41 @@
+#include <Efl_Ui.h>
+#include "custom_recognizer2.eo.h"
+#define MY_CLASS CUSTOM_RECOGNIZER2_CLASS
+
+typedef struct Custom_Recognizer2_Data
+{
+} Custom_Recognizer2_Data;
+
+EOLIAN static Eo *
+_custom_recognizer2_efl_object_finalize(Eo *obj, Custom_Recognizer2_Data *pd EINA_UNUSED)
+{
+ efl_gesture_recognizer_custom_gesture_name_set(obj, "custom_gesture2");
+ return efl_finalize(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static Efl_Canvas_Gesture_Recognizer_Result
+_custom_recognizer2_efl_canvas_gesture_recognizer_recognize(Eo *obj EINA_UNUSED, Custom_Recognizer2_Data *pd EINA_UNUSED,
+ Efl_Canvas_Gesture *gesture EINA_UNUSED, Efl_Object *watched EINA_UNUSED,
+ Efl_Canvas_Gesture_Touch *event)
+{
+ Eina_Position2D start = efl_gesture_touch_start_point_get(event);
+ Eina_Position2D cur = efl_gesture_touch_current_point_get(event);
+ switch (efl_gesture_touch_state_get(event))
+ {
+ case EFL_GESTURE_TOUCH_STATE_BEGIN:
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ case EFL_GESTURE_TOUCH_STATE_UPDATE:
+ if (EINA_POSITION2D_EQ(start, cur))
+ return EFL_GESTURE_RECOGNIZER_RESULT_TRIGGER;
+ if ((cur.x - start.x == 1) && (cur.y == start.y))
+ return EFL_GESTURE_RECOGNIZER_RESULT_FINISH;
+ case EFL_GESTURE_TOUCH_STATE_END:
+ default:
+
+ break;
+ }
+
+ return EFL_GESTURE_RECOGNIZER_RESULT_CANCEL;
+}
+
+#include "custom_recognizer2.eo.c"
diff --git a/src/tests/elementary/custom_recognizer2.eo b/src/tests/elementary/custom_recognizer2.eo
new file mode 100644
index 0000000000..35c97d9d61
--- /dev/null
+++ b/src/tests/elementary/custom_recognizer2.eo
@@ -0,0 +1,10 @@
+class @beta Custom_Recognizer2 extends Efl.Canvas.Gesture_Recognizer_Custom
+{
+ [[Custom gesture recognizer test class.
+ ]]
+ c_prefix: custom_recognizer2;
+ implements {
+ Efl.Object.finalize;
+ Efl.Canvas.Gesture_Recognizer.recognize;
+ }
+}
diff --git a/src/tests/elementary/efl_ui_suite.c b/src/tests/elementary/efl_ui_suite.c
index 9234d68a2f..cfe45f4cf7 100644
--- a/src/tests/elementary/efl_ui_suite.c
+++ b/src/tests/elementary/efl_ui_suite.c
@@ -14,6 +14,7 @@ static const Efl_Test_Case etc[] = {
{ "efl_ui_config", efl_ui_test_config},
{ "efl_ui_focus", efl_ui_test_focus},
{ "efl_ui_focus_sub", efl_ui_test_focus_sub},
+ { "efl_ui_gesture", efl_ui_test_gesture},
{ "efl_ui_box", efl_ui_test_box},
{ "efl_ui_box_flow", efl_ui_test_box_flow},
{ "efl_ui_box_stack", efl_ui_test_box_stack},
@@ -38,14 +39,18 @@ static const Efl_Test_Case etc[] = {
{ "efl_ui_collection", efl_ui_test_item_container },
{ "efl_ui_grid_container", efl_ui_test_grid_container },
{ "efl_ui_list_container", efl_ui_test_list_container },
+ { "efl_ui_collection_view", efl_ui_test_collection_view },
{ "efl_ui_select_model", efl_ui_test_select_model },
{ "efl_ui_view_model", efl_ui_test_view_model },
{ "efl_ui_group_item", efl_ui_test_group_item },
{ "efl_ui_text", efl_ui_test_text},
+#ifdef BUILD_VG_LOADER_JSON
+ { "efl_ui_vg_animation", efl_ui_test_vg_animation},
+#endif
{ NULL, NULL }
};
-EFL_CLASS_SIMPLE_CLASS(efl_ui_widget, "efl_ui_widget", EFL_UI_WIDGET_CLASS);
+EFL_CLASS_SIMPLE_CLASS(efl_ui_widget, "Efl.Ui.Widget", EFL_UI_WIDGET_CLASS);
int
main(int argc, char **argv)
diff --git a/src/tests/elementary/efl_ui_suite.h b/src/tests/elementary/efl_ui_suite.h
index cb83a00ce7..4963b4a77c 100644
--- a/src/tests/elementary/efl_ui_suite.h
+++ b/src/tests/elementary/efl_ui_suite.h
@@ -33,6 +33,7 @@ void efl_ui_test_image(TCase *tc);
void efl_ui_test_callback(TCase *tc);
void efl_ui_test_focus(TCase *tc);
void efl_ui_test_focus_sub(TCase *tc);
+void efl_ui_test_gesture(TCase *tc);
void efl_ui_model(TCase *tc);
void efl_ui_test_widget(TCase *tc);
void efl_ui_test_spotlight(TCase *tc);
@@ -46,6 +47,7 @@ void efl_ui_test_spin_button(TCase *tc);
void efl_ui_test_item_container(TCase *tc);
void efl_ui_test_list_container(TCase *tc);
void efl_ui_test_grid_container(TCase *tc);
+void efl_ui_test_collection_view(TCase *tc);
void efl_ui_test_config(TCase *tc);
void efl_ui_test_popup(TCase *tc);
void efl_ui_test_scroller(TCase *tc);
@@ -53,6 +55,7 @@ void efl_ui_test_select_model(TCase *tc);
void efl_ui_test_view_model(TCase *tc);
void efl_ui_test_group_item(TCase *tc);
void efl_ui_test_text(TCase *tc);
+void efl_ui_test_vg_animation(TCase *tc);
void loop_timer_interval_set(Eo *obj, double in);
diff --git a/src/tests/elementary/efl_ui_test_collection_view.c b/src/tests/elementary/efl_ui_test_collection_view.c
new file mode 100644
index 0000000000..9e9f91b48e
--- /dev/null
+++ b/src/tests/elementary/efl_ui_test_collection_view.c
@@ -0,0 +1,156 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Efl_Ui.h>
+#include "efl_ui_suite.h"
+
+#define NUM_ITEMS 50
+
+static Efl_Model*
+_make_model(Efl_Ui_Win *win)
+{
+ Eina_Value vi;
+ Efl_Generic_Model *model, *child;
+ unsigned int i;
+
+ model = efl_add(EFL_GENERIC_MODEL_CLASS, win);
+ model = efl_add(EFL_UI_VIEW_MODEL_CLASS, model,
+ efl_ui_view_model_set(efl_added, model));
+ eina_value_setup(&vi, EINA_VALUE_TYPE_INT);
+
+ efl_ui_view_model_property_string_add(model, "relative", "Relative index ${child.index}", "WRONG", "WRONG");
+ efl_ui_view_model_property_string_add(model, "title", "Initial index ${initial}", "WRONG", "WRONG");
+
+
+ for (i = 0; i < (NUM_ITEMS); i++)
+ {
+ child = efl_model_child_add(model);
+ eina_value_set(&vi, i);
+ efl_model_property_set(child, "initial", &vi);
+ }
+
+ eina_value_flush(&vi);
+ return model;
+}
+
+static Eina_Value
+_quit(Eo *obj, void *data EINA_UNUSED, const Eina_Value v)
+{
+ efl_loop_quit(efl_loop_get(obj), v);
+ return v;
+}
+
+static Eina_Value
+_children_get(Eo *obj EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
+{
+ Efl_Model *child;
+ unsigned int i, len;
+
+ EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
+ {
+ Eina_Value *rel_val, *title_val;
+ char *relative, *title;
+ if (i != 5) continue;
+ rel_val = efl_model_property_get(child, "relative");
+ title_val = efl_model_property_get(child, "title");
+ relative = eina_value_to_string(rel_val);
+ title = eina_value_to_string(title_val);
+
+ ck_assert(eina_streq(relative, "Relative index 5"));
+ ck_assert(eina_streq(title, "Initial index 5"));
+ free(relative);
+ free(title);
+ break;
+ }
+ return EINA_VALUE_EMPTY;
+}
+
+EFL_START_TEST(test_efl_ui_collection_view_basic)
+{
+ Efl_Ui_Win *win;
+ Efl_Model *model;
+ Efl_Ui_List_View *lv;
+ Efl_Ui_Factory *fl;
+ Eina_Future *f;
+ int count_realize = 0;
+ int count_unrealize = 0;
+
+ win = win_add();
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
+
+ model = _make_model(win);
+ fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
+ efl_ui_property_bind(efl_added, "text", "title"),
+ efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
+
+ lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
+ efl_ui_collection_view_factory_set(efl_added, fl),
+ efl_ui_view_model_set(efl_added, model),
+ efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED,
+ (void*)event_callback_that_increments_an_int_when_called, &count_realize),
+ efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED,
+ (void*)event_callback_that_increments_an_int_when_called, &count_unrealize)
+ );
+ efl_content_set(win, lv);
+
+ get_me_to_those_events(lv);
+ ck_assert_int_gt(count_realize, 0);
+ /* FIXME: this should eventually be eq(0) */
+ ck_assert_int_gt(count_unrealize, 0);
+
+ f = efl_model_children_slice_get(lv, 0, efl_model_children_count_get(lv));
+ f = efl_future_then(lv, f, .success_type = EINA_VALUE_TYPE_ARRAY, .success = _children_get);
+ ecore_main_loop_iterate();
+ efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_realize);
+ efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_unrealize);
+}
+EFL_END_TEST
+
+EFL_START_TEST(test_efl_ui_collection_view_select)
+{
+ Efl_Ui_Win *win;
+ Efl_Model *model;
+ Efl_Ui_List_View *lv;
+ Efl_Ui_Factory *fl;
+ Eina_Value *sel_val;
+ unsigned long sel = 10000;
+
+ win = win_add();
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
+
+ model = _make_model(win);
+ model = efl_add(EFL_UI_SELECT_MODEL_CLASS, efl_main_loop_get(), efl_ui_view_model_set(efl_added, model));
+ fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
+ efl_ui_property_bind(efl_added, "text", "title"),
+ efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
+
+ lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
+ efl_ui_collection_view_factory_set(efl_added, fl),
+ efl_ui_view_model_set(efl_added, model)
+ );
+ efl_content_set(win, lv);
+
+ get_me_to_those_events(lv);
+
+ /* nothing selected yet */
+ sel_val = efl_model_property_get(model, "child.selected");
+ ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ERROR);
+
+ efl_future_then(model, efl_model_property_ready_get(model, "child.selected"), .success = _quit);
+
+ click_object_at(lv, 50, 5);
+ ecore_main_loop_begin();
+
+ sel_val = efl_model_property_get(model, "child.selected");
+ ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ULONG);
+ ck_assert(eina_value_ulong_get(sel_val, &sel));
+ ck_assert_int_eq(sel, 0);
+}
+EFL_END_TEST
+
+void efl_ui_test_collection_view(TCase *tc)
+{
+ tcase_add_test(tc, test_efl_ui_collection_view_basic);
+ tcase_add_test(tc, test_efl_ui_collection_view_select);
+}
diff --git a/src/tests/elementary/efl_ui_test_config.c b/src/tests/elementary/efl_ui_test_config.c
index a9f31ea988..df3a3356d9 100644
--- a/src/tests/elementary/efl_ui_test_config.c
+++ b/src/tests/elementary/efl_ui_test_config.c
@@ -25,7 +25,15 @@ EFL_START_TEST(efl_config_eoapi)
#define CONFIG_CHKB(opt, val) CONFIG_CHK(opt, bool, val)
#define CONFIG_CHKI(opt, val) CONFIG_CHK(opt, int, val)
-#define CONFIG_CHKD(opt, val) CONFIG_CHK(opt, double, val)
+
+#define CONFIG_CHKD_internal(opt, typ, val) do { \
+ typ old = elm_config_ ## opt ## _get(); \
+ fail_if(!EINA_DBL_EQ(old, efl_config_ ## typ ## _get(cfg, #opt))); \
+ fail_if(!efl_config_ ## typ ## _set(cfg, #opt, val)); \
+ fail_if(!EINA_DBL_EQ(elm_config_ ## opt ## _get(), val)); \
+ fail_if(!EINA_DBL_EQ(efl_config_ ## typ ## _get(cfg, #opt), val)); \
+ } while (0)
+#define CONFIG_CHKD(opt, val) CONFIG_CHKD_internal(opt, double, val)
// note: leaks badly
#define CONFIG_CHKS(opt, val) do { \
@@ -67,9 +75,9 @@ EFL_START_TEST(efl_config_eoapi)
CONFIG_CHKD(scroll_thumbscroll_acceleration_threshold, 0);
CONFIG_CHKD(scroll_thumbscroll_acceleration_time_limit, 0);
CONFIG_CHKD(scroll_thumbscroll_acceleration_weight, 0);
- CONFIG_CHKE(focus_autoscroll_mode, EFL_UI_FOCUS_AUTOSCROLL_MODE_NONE, "none");
+ CONFIG_CHKE(focus_autoscroll_mode, ELM_FOCUS_AUTOSCROLL_MODE_NONE, "none");
CONFIG_CHKD(longpress_timeout, 0);
- CONFIG_CHKE(softcursor_mode, EFL_UI_SOFTCURSOR_MODE_ON, "on");
+ CONFIG_CHKE(softcursor_mode, ELM_SOFTCURSOR_MODE_ON, "on");
CONFIG_CHKD(tooltip_delay, 0);
CONFIG_CHKB(cursor_engine_only, 0);
CONFIG_CHKD(scale, 0);
@@ -95,7 +103,7 @@ EFL_START_TEST(efl_config_eoapi)
CONFIG_CHKB(focus_highlight_enabled, !old);
CONFIG_CHKB(focus_highlight_animate, 0);
CONFIG_CHKB(focus_highlight_clip_disabled, !old);
- CONFIG_CHKE(focus_move_policy, EFL_UI_FOCUS_MOVE_POLICY_MOVE_IN, "in");
+ CONFIG_CHKE(focus_move_policy, ELM_FOCUS_MOVE_POLICY_IN, "in");
CONFIG_CHKB(item_select_on_focus_disabled, !old);
CONFIG_CHKB(first_item_focus_on_first_focusin, 0);
CONFIG_CHKB(mirrored, 0);
@@ -134,7 +142,7 @@ EFL_START_TEST(efl_config_eoapi)
Eina_Bool b = elm_config_audio_mute_get(channels[i].chan);
if (b != efl_config_bool_get(cfg, channels[i].name))
fail(channels[i].name);
- efl_config_bool_set(cfg, channels[i].name, !b);
+ fail_unless(efl_config_bool_set(cfg, channels[i].name, !b));
if(efl_config_bool_get(cfg, channels[i].name) != !b)
fail(channels[i].name);
if(elm_config_audio_mute_get(channels[i].chan) != !b)
diff --git a/src/tests/elementary/efl_ui_test_focus.c b/src/tests/elementary/efl_ui_test_focus.c
index 814ab5c690..3b66515d31 100644
--- a/src/tests/elementary/efl_ui_test_focus.c
+++ b/src/tests/elementary/efl_ui_test_focus.c
@@ -83,9 +83,15 @@ EFL_START_TEST(pos_check)
EFL_END_TEST
static Eina_Bool
-_equal_set(Eina_List *elems, Efl_Ui_Focus_Object *lst[])
+_equal_set(Eina_Iterator *elems, Efl_Ui_Focus_Object *lst[])
{
unsigned int i = 0;
+ Eina_List *tmp = NULL;
+ Efl_Gfx_Entity *object;
+ Eina_Bool r = EINA_FALSE;
+
+ EINA_ITERATOR_FOREACH(elems, object)
+ tmp = eina_list_append(tmp, object);
for (i = 0; lst[i]; ++i)
{
@@ -93,7 +99,7 @@ _equal_set(Eina_List *elems, Efl_Ui_Focus_Object *lst[])
Eina_List *n;
Efl_Ui_Focus_Object *elem;
- EINA_LIST_FOREACH(elems, n, elem)
+ EINA_LIST_FOREACH(tmp, n, elem)
{
if (lst[i] != elem) continue;
@@ -101,11 +107,13 @@ _equal_set(Eina_List *elems, Efl_Ui_Focus_Object *lst[])
break;
}
- if (!found) return EINA_FALSE;
+ if (!found) goto end;
}
- if (eina_list_count(elems) != i) return EINA_FALSE;
- return EINA_TRUE;
+ if (eina_list_count(tmp) == i) r = EINA_TRUE;
+ end:
+ eina_list_free(tmp);
+ return r;
}
EFL_START_TEST(pos_check2)
diff --git a/src/tests/elementary/efl_ui_test_focus_common.h b/src/tests/elementary/efl_ui_test_focus_common.h
index ceda6a0074..bf6cf44cb0 100644
--- a/src/tests/elementary/efl_ui_test_focus_common.h
+++ b/src/tests/elementary/efl_ui_test_focus_common.h
@@ -16,6 +16,8 @@
Efl_Ui_Focus_Object* name; \
name = focus_test_object_new("" #name "",x, y, w, h); \
+/* This is an internal function at the moment, but an exported symbol and can be used by tests */
+Eina_Bool efl_ui_focus_manager_calc_update_children(Eo *obj, Efl_Ui_Focus_Object *parent, Eina_List *children EFL_TRANSFER_OWNERSHIP);
Efl_Ui_Focus_Object* focus_test_object_new(const char *name, int x, int y, int w, int h);
diff --git a/src/tests/elementary/efl_ui_test_gesture.c b/src/tests/elementary/efl_ui_test_gesture.c
new file mode 100644
index 0000000000..0805cd82ee
--- /dev/null
+++ b/src/tests/elementary/efl_ui_test_gesture.c
@@ -0,0 +1,769 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Efl_Ui.h>
+#include "efl_ui_suite.h"
+/* mouse feeding */
+#include <Evas_Legacy.h>
+#include <evas_canvas_eo.h>
+
+#include "custom_gesture.eo.h"
+#include "custom_recognizer.eo.h"
+#include "custom_recognizer2.eo.h"
+
+/*
+typedef enum
+{
+ EFL_GESTURE_STATE_NONE = 0,
+ EFL_GESTURE_STATE_STARTED = 1,
+ EFL_GESTURE_STATE_UPDATED,
+ EFL_GESTURE_STATE_FINISHED,
+ EFL_GESTURE_STATE_CANCELED
+} Efl_Canvas_Gesture_State;
+*/
+
+enum
+{
+ TAP,
+ LONG_PRESS,
+ DOUBLE_TAP,
+ TRIPLE_TAP,
+ MOMENTUM,
+ FLICK,
+ ROTATE,
+ ZOOM,
+ CUSTOM,
+ CUSTOM2,
+ LAST
+};
+
+static int count[LAST][4] = {0};
+
+/* macros to simplify checking gesture counts */
+#define CHECK_START(type, val) \
+ ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_STARTED - 1], (val))
+#define CHECK_UPDATE(type, val) \
+ ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_UPDATED - 1], (val))
+#define CHECK_FINISH(type, val) \
+ ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_FINISHED - 1], (val))
+#define CHECK_CANCEL(type, val) \
+ ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_CANCELED - 1], (val))
+#define CHECK_ALL(type, ...) \
+ do {\
+ int state_vals[] = {__VA_ARGS__}; \
+ for (int i = 0; i < 4; i++) \
+ ck_assert_int_eq(count[(type)][i], state_vals[i]); \
+ } while (0)
+#define CHECK_NONZERO(type) \
+ do {\
+ for (int i = 0; i < 4; i++) \
+ ck_assert_int_ne(count[(type)][i], 0); \
+ } while (0)
+#define CHECK_ZERO(type) CHECK_ALL((type), 0, 0, 0, 0)
+#define RESET memset(count, 0, sizeof(count))
+
+static void
+gesture_cb(void *data , const Efl_Event *ev)
+{
+ Efl_Canvas_Gesture *g = ev->info;
+ int *count = data;
+ /* increment counter for event state which has been processed */
+ count[efl_gesture_state_get(g) - 1]++;
+}
+
+static Eo *
+setup(void)
+{
+ Eo *win, *rect;
+
+ RESET;
+
+ win = win_add();
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(1000, 1000));
+
+ rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, win);
+ efl_content_set(win, rect);
+
+#define WATCH(type) \
+ efl_event_callback_add(rect, EFL_EVENT_GESTURE_##type, gesture_cb, &count[(type)])
+ WATCH(TAP);
+ WATCH(LONG_PRESS);
+ WATCH(DOUBLE_TAP);
+ WATCH(TRIPLE_TAP);
+ WATCH(MOMENTUM);
+ WATCH(FLICK);
+ WATCH(ROTATE);
+ WATCH(ZOOM);
+
+ get_me_to_those_events(win);
+ return rect;
+}
+
+EFL_START_TEST(test_efl_ui_gesture_taps)
+{
+ Eo *rect = setup();
+
+ /* basic tap */
+ click_object(rect);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ CHECK_ALL(DOUBLE_TAP, 1, 1, 0, 0);
+ CHECK_ALL(TRIPLE_TAP, 1, 1, 0, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* add a second tap */
+ click_object(rect);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* UPDATE -> FINISH */
+ CHECK_ALL(DOUBLE_TAP, 0, 1, 1, 0);
+ CHECK_ALL(TRIPLE_TAP, 0, 2, 0, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* add a third tap */
+ click_object(rect);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* UPDATE -> FINISH */
+ CHECK_ALL(DOUBLE_TAP, 1, 1, 0, 0);
+ CHECK_ALL(TRIPLE_TAP, 0, 1, 1, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ /* clear states */
+ wait_timer(0.4);
+ RESET;
+
+ /* verify finger size */
+ click_object_at(rect, 500, 500);
+ click_object_at(rect, 505, 505);
+ CHECK_ALL(TAP, 2, 0, 2, 0);
+ CHECK_ALL(LONG_PRESS, 2, 0, 0, 2);
+ /* UPDATE -> FINISH */
+ CHECK_ALL(DOUBLE_TAP, 1, 2, 1, 0);
+ CHECK_ALL(TRIPLE_TAP, 1, 3, 0, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ /* clear states */
+ wait_timer(0.4);
+ RESET;
+
+ /* verify multiple simultaneous presses treated as same press */
+ multi_click_object(rect, 2);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ CHECK_ALL(DOUBLE_TAP, 1, 1, 0, 0);
+ CHECK_ALL(TRIPLE_TAP, 1, 1, 0, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ /* this is two fingers, so we have a rotate start */
+ CHECK_ALL(ROTATE, 1, 0, 0, 1);
+ /* this is two fingers, so we have a zoom start */
+ CHECK_ALL(ZOOM, 1, 0, 0, 1);
+
+ RESET;
+
+ multi_click_object(rect, 2);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* UPDATE -> FINISH */
+ CHECK_ALL(DOUBLE_TAP, 0, 1, 1, 0);
+ CHECK_ALL(TRIPLE_TAP, 0, 2, 0, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ /* this is two fingers, so we have a rotate start */
+ CHECK_ALL(ROTATE, 1, 0, 0, 1);
+ /* this is two fingers, so we have a zoom start */
+ CHECK_ALL(ZOOM, 1, 0, 0, 1);
+
+ RESET;
+
+ multi_click_object(rect, 2);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* UPDATE -> FINISH */
+ CHECK_ALL(DOUBLE_TAP, 1, 1, 0, 0);
+ CHECK_ALL(TRIPLE_TAP, 0, 1, 1, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ /* this is two fingers, so we have a rotate start */
+ CHECK_ALL(ROTATE, 1, 0, 0, 1);
+ /* this is two fingers, so we have a zoom start */
+ CHECK_ALL(ZOOM, 1, 0, 0, 1);
+ /* clear states */
+ wait_timer(0.4);
+ RESET;
+
+ multi_click_object(rect, 10);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ /* this is two fingers, so we have a rotate start */
+ CHECK_ALL(ROTATE, 1, 0, 0, 1);
+ /* this is two fingers, so we have a zoom start */
+ CHECK_ALL(ZOOM, 1, 0, 0, 1);
+ RESET;
+
+}
+EFL_END_TEST
+
+EFL_START_TEST(test_efl_ui_gesture_long_press)
+{
+ Eo *rect = setup();
+ double timeout = 1.2;
+ Eina_Value *val;
+ Eo *e = efl_provider_find(rect, EVAS_CANVAS_CLASS);
+
+ val = efl_config_get(efl_provider_find(rect, EFL_CONFIG_INTERFACE), "glayer_long_tap_start_timeout");
+ eina_value_get(val, &timeout);
+
+ /* press */
+ press_object(rect);
+ CHECK_ALL(TAP, 1, 0, 0, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 0);
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 0);
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 0);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ wait_timer(timeout + 0.01);
+
+ /* verify longpress */
+ CHECK_ALL(TAP, 0, 0, 0, 1);
+ CHECK_ALL(LONG_PRESS, 0, 1, 0, 0);
+ CHECK_ALL(DOUBLE_TAP, 0, 0, 0, 1);
+ CHECK_ALL(TRIPLE_TAP, 0, 0, 0, 1);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+ evas_event_feed_mouse_up(e, 1, 0, 2, NULL);
+
+ CHECK_ZERO(TAP);
+ CHECK_ALL(LONG_PRESS, 0, 0, 1, 0);
+ CHECK_ZERO(DOUBLE_TAP);
+ CHECK_ZERO(TRIPLE_TAP);
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ press_object_at(rect, 0, 0);
+ RESET;
+
+ /* move off-canvas */
+ evas_event_feed_mouse_move(e, -1, 0, 2, NULL);
+ wait_timer(timeout + 0.01);
+
+ /* verify longpress */
+ CHECK_ALL(TAP, 0, 1, 0, 0);
+ CHECK_ALL(LONG_PRESS, 0, 1, 0, 0);
+ CHECK_ALL(DOUBLE_TAP, 0, 0, 0, 1);
+ CHECK_ALL(TRIPLE_TAP, 0, 0, 0, 1);
+ CHECK_ALL(MOMENTUM, 1, 0, 0, 0);
+ CHECK_ALL(FLICK, 1, 0, 0, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+ evas_event_feed_mouse_up(e, 1, 0, 3, NULL);
+}
+EFL_END_TEST
+
+EFL_START_TEST(test_efl_ui_gesture_flick)
+{
+ int moves, i, single = 0;
+ Eo *rect = setup();
+
+ /* add extra random cb to verify that we get exactly 1 event */
+ efl_event_callback_add(rect, EFL_EVENT_GESTURE_MOMENTUM, (void*)event_callback_that_increments_an_int_when_called, &single);
+
+ /* basic flick */
+ drag_object(rect, 0, 0, 75, 0, EINA_FALSE);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+ /* updated but canceled */
+ CHECK_ALL(MOMENTUM, 1, DRAG_OBJECT_NUM_MOVES - 1, 0, 1);
+ /* triggered */
+ CHECK_ALL(FLICK, 1, DRAG_OBJECT_NUM_MOVES - 1, 1, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ efl_event_callback_del(rect, EFL_EVENT_GESTURE_MOMENTUM, (void*)event_callback_that_increments_an_int_when_called, &single);
+ ck_assert_int_ge(single, 0);
+
+ /* reverse flick */
+ drag_object(rect, 75, 0, -75, 0, EINA_FALSE);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+ /* updated but canceled */
+ CHECK_ALL(MOMENTUM, 1, DRAG_OBJECT_NUM_MOVES - 1, 0, 1);
+ /* triggered */
+ CHECK_ALL(FLICK, 1, DRAG_OBJECT_NUM_MOVES - 1, 1, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* vertical flick */
+ drag_object(rect, 0, 0, 0, 75, EINA_FALSE);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+ /* updated but canceled */
+ CHECK_ALL(MOMENTUM, 1, DRAG_OBJECT_NUM_MOVES - 1, 0, 1);
+ /* triggered */
+ CHECK_ALL(FLICK, 1, DRAG_OBJECT_NUM_MOVES - 1, 1, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* reverse vertical flick */
+ drag_object(rect, 0, 75, 0, -75, EINA_FALSE);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+ /* updated but canceled */
+ CHECK_ALL(MOMENTUM, 1, DRAG_OBJECT_NUM_MOVES - 1, 0, 1);
+ /* triggered */
+ CHECK_ALL(FLICK, 1, DRAG_OBJECT_NUM_MOVES - 1, 1, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+
+ /* diagonal flick */
+ drag_object(rect, 0, 0, 75, 75, EINA_FALSE);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+ /* updated but canceled */
+ CHECK_ALL(MOMENTUM, 1, DRAG_OBJECT_NUM_MOVES - 1, 0, 1);
+ /* triggered */
+ CHECK_ALL(FLICK, 1, DRAG_OBJECT_NUM_MOVES - 1, 1, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* off-canvas flick */
+ drag_object(rect, 999, 0, 50, 0, EINA_FALSE);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+ CHECK_START(MOMENTUM, 1);
+ CHECK_FINISH(MOMENTUM, 0);
+ CHECK_CANCEL(MOMENTUM, 1);
+ CHECK_START(FLICK, 1);
+ CHECK_FINISH(FLICK, 1);
+ CHECK_CANCEL(FLICK, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* definitely not a flick */
+ moves = drag_object_around(rect, 500, 500, 450, 180);
+ for (i = 0; i <= TRIPLE_TAP; i++)
+ {
+ /* canceled */
+ CHECK_START(TAP, 1);
+ CHECK_CANCEL(TAP, 1);
+ }
+ /* completed: a momentum gesture is any completed motion */
+ CHECK_ALL(MOMENTUM, 1, moves - 2, 1, 0);
+ /* NOT triggered; this is going to have some crazy number of update events since it ignores a bunch */
+ CHECK_FINISH(FLICK, 0);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* definitely not a flick, also outside canvas */
+ moves = drag_object_around(rect, 25, 50, 50, 180);
+ for (i = 0; i <= TRIPLE_TAP; i++)
+ {
+ /* canceled */
+ CHECK_START(TAP, 1);
+ CHECK_CANCEL(TAP, 1);
+ }
+ /* momentum should only begin at the initial press or if canceled due to timeout */
+ CHECK_START(MOMENTUM, 1);
+ CHECK_FINISH(MOMENTUM, 1);
+ /* canceled: the motion ends outside the canvas, so there is no momentum */
+ CHECK_CANCEL(MOMENTUM, 0);
+
+ /* flick checks a tolerance value for straight lines, so "start" will be >= 1 */
+ ck_assert_int_ge(count[FLICK][EFL_GESTURE_STATE_STARTED - 1], 1);
+ CHECK_FINISH(FLICK, 0);
+ /* flick checks a tolerance value for straight lines, so "start" will be >= 1 */
+ ck_assert_int_ge(count[FLICK][EFL_GESTURE_STATE_CANCELED - 1], 1);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+ /* definitely not a flick, test re-entering canvas */
+ moves = drag_object_around(rect, 500, 750, 400, 180);
+ for (i = 0; i <= TRIPLE_TAP; i++)
+ {
+ /* canceled */
+ CHECK_START(TAP, 1);
+ CHECK_CANCEL(TAP, 1);
+ }
+ /* momentum should only begin at the initial press or if canceled due to timeout */
+ CHECK_START(MOMENTUM, 1);
+ /* finished: the motion ends outside the canvas, but we still count it */
+ CHECK_FINISH(MOMENTUM, 1);
+ CHECK_CANCEL(MOMENTUM, 0);
+
+ /* flick checks a tolerance value for straight lines, so "start" will be >= 1 */
+ ck_assert_int_ge(count[FLICK][EFL_GESTURE_STATE_STARTED - 1], 1);
+ CHECK_FINISH(FLICK, 0);
+ /* flick checks a tolerance value for straight lines, so "start" will be >= 1 */
+ ck_assert_int_ge(count[FLICK][EFL_GESTURE_STATE_CANCELED - 1], 1);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+}
+EFL_END_TEST
+
+EFL_START_TEST(test_efl_ui_gesture_zoom)
+{
+ Eo *rect = setup();
+ int moves;
+
+ moves = pinch_object(rect, 500, 500, 501, 501, -250, -250, 250, 250);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+
+ CHECK_START(MOMENTUM, 1);
+ CHECK_UPDATE(MOMENTUM, 0);
+ CHECK_FINISH(MOMENTUM, 0);
+ CHECK_CANCEL(MOMENTUM, 1);
+
+ /* only finish is verifiable */
+ CHECK_FINISH(FLICK, 0);
+ /* started then canceled */
+ CHECK_ALL(ROTATE, 1, 0, 0, 1);
+ /* started 1x */
+ CHECK_START(ZOOM, 1);
+ /* 2 touch points tracked, so this will be roughly (2 * moves) but probably less */
+ ck_assert_int_ge(count[ZOOM][EFL_GESTURE_STATE_UPDATED - 1], moves);
+ /* finished 1x */
+ CHECK_FINISH(ZOOM, 1);
+ CHECK_CANCEL(ZOOM, 0);
+
+ RESET;
+
+
+ moves = pinch_object(rect, 250, 250, 750, 750, 250, 250, -250, -250);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+
+ CHECK_START(MOMENTUM, 1);
+ CHECK_UPDATE(MOMENTUM, 0);
+ CHECK_FINISH(MOMENTUM, 0);
+ CHECK_CANCEL(MOMENTUM, 1);
+
+ /* only finish is verifiable */
+ CHECK_FINISH(FLICK, 0);
+ /* started then canceled */
+ CHECK_ALL(ROTATE, 1, 0, 0, 1);
+ /* started 1x */
+ CHECK_START(ZOOM, 1);
+ /* 2 touch points tracked, so this will be roughly (2 * moves) but probably less */
+ ck_assert_int_ge(count[ZOOM][EFL_GESTURE_STATE_UPDATED - 1], moves);
+ /* finished 1x */
+ CHECK_FINISH(ZOOM, 1);
+ CHECK_CANCEL(ZOOM, 0);
+
+ RESET;
+
+}
+EFL_END_TEST
+
+EFL_START_TEST(test_efl_ui_gesture_rotate)
+{
+ Eo *rect = setup();
+ int moves, momentum_moves;
+
+ multi_press_object(rect, 1);
+ CHECK_ALL(TAP, 1, 0, 0, 0);
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 0);
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 0);
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 0);
+
+ CHECK_ZERO(MOMENTUM);
+ CHECK_ZERO(FLICK);
+ CHECK_ZERO(ROTATE);
+ CHECK_ZERO(ZOOM);
+
+ RESET;
+
+
+ moves = multi_drag_object_around(rect, 1, 500, 500, 250, 180);
+ CHECK_ALL(TAP, 0, 0, 0, 1);
+ CHECK_ALL(LONG_PRESS, 0, 0, 0, 1);
+ CHECK_ALL(DOUBLE_TAP, 0, 0, 0, 1);
+ CHECK_ALL(TRIPLE_TAP, 0, 0, 0, 1);
+
+ CHECK_START(MOMENTUM, 1);
+ momentum_moves = count[MOMENTUM][EFL_GESTURE_STATE_UPDATED - 1];
+ ck_assert_int_ge(count[MOMENTUM][EFL_GESTURE_STATE_UPDATED - 1], moves - 5);
+ CHECK_FINISH(MOMENTUM, 1);
+ CHECK_CANCEL(MOMENTUM, 0);
+
+ /* flick is just going to do flick stuff here, so don't even bother checking much */
+ CHECK_FINISH(FLICK, 0);
+
+ CHECK_ALL(ROTATE, 1, moves - 1, 1, 0);
+ CHECK_ALL(ZOOM, 1, 0, 0, 1);
+
+ RESET;
+
+ /* verify identical motion in reverse */
+ moves = multi_drag_object_around(rect, 1, 500, 500, 250, -180);
+ /* already occurred, first finger still down */
+ CHECK_ZERO(TAP);
+ /* already canceled, first finger still down */
+ CHECK_ZERO(LONG_PRESS);
+ CHECK_ZERO(DOUBLE_TAP);
+ CHECK_ZERO(TRIPLE_TAP);
+
+ /* continuing gesture, counts as already started */
+ CHECK_START(MOMENTUM, 0);
+ /* should be exactly 1 more than previous time */
+ CHECK_UPDATE(MOMENTUM, momentum_moves + 1);
+ CHECK_FINISH(MOMENTUM, 1);
+ CHECK_CANCEL(MOMENTUM, 0);
+
+ /* flick is just going to do flick stuff here, so don't even bother checking much */
+ CHECK_FINISH(FLICK, 0);
+
+ /* continuing gesture, counts as already started, increment update counter */
+ CHECK_ALL(ROTATE, 0, (moves - 1) + 1, 1, 0);
+ CHECK_ALL(ZOOM, 0, 1, 0, 1);
+
+}
+EFL_END_TEST
+
+static void
+custom_cb(void *data EINA_UNUSED , const Efl_Event *ev)
+{
+ Efl_Canvas_Gesture *g = ev->info;
+
+ int *count = data;
+ if (!eina_streq(efl_gesture_custom_gesture_name_get(g), "custom_gesture")) return;
+ /* increment counter for event state which has been processed */
+ count[efl_gesture_state_get(g) - 1]++;
+}
+
+static void
+custom_cb2(void *data EINA_UNUSED , const Efl_Event *ev)
+{
+ Efl_Canvas_Gesture *g = ev->info;
+
+ int *count = data;
+ if (!eina_streq(efl_gesture_custom_gesture_name_get(g), "custom_gesture2")) return;
+ /* increment counter for event state which has been processed */
+ count[efl_gesture_state_get(g) - 1]++;
+}
+
+static void
+custom_gesture_cb(void *data EINA_UNUSED , const Efl_Event *ev)
+{
+ Efl_Canvas_Gesture *g = ev->info;
+
+ Eina_Position2D *delta = data;
+ if (!eina_streq(efl_gesture_custom_gesture_name_get(g), "custom_gesture")) return;
+ delta->x = custom_gesture_x_delta_get(g);
+ delta->y = custom_gesture_y_delta_get(g);
+}
+
+EFL_START_TEST(test_efl_ui_gesture_custom)
+{
+ Eo *rect = setup();
+ Eo *manager = efl_provider_find(rect, EFL_CANVAS_GESTURE_MANAGER_CLASS);
+ Eo *recognizer = efl_add(CUSTOM_RECOGNIZER_CLASS, manager);
+ Eo *recognizer2 = efl_add(CUSTOM_RECOGNIZER2_CLASS, manager);
+ Eina_Position2D delta = {0};
+
+ efl_gesture_manager_recognizer_register(manager, recognizer);
+ efl_gesture_manager_recognizer_register(manager, recognizer2);
+ efl_event_callback_add(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb, &count[CUSTOM]);
+ efl_event_callback_add(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb2, &count[CUSTOM2]);
+
+ /* verify that we're processing */
+ click_object(rect);
+ CHECK_ALL(CUSTOM, 1, 0, 1, 0);
+ CHECK_ALL(CUSTOM2, 1, 0, 0, 1);
+
+ RESET;
+
+ /* verify gesture properties */
+ efl_event_callback_add(rect, EFL_EVENT_GESTURE_CUSTOM, custom_gesture_cb, &delta);
+ drag_object(rect, 0, 0, 75, 30, EINA_FALSE);
+ ck_assert_int_eq(delta.x, 75);
+ ck_assert_int_eq(delta.y, 30);
+ efl_event_callback_del(rect, EFL_EVENT_GESTURE_CUSTOM, custom_gesture_cb, &delta);
+
+ RESET;
+
+ /* verify that we aren't still processing */
+ efl_gesture_manager_recognizer_unregister(manager, recognizer);
+ efl_gesture_manager_recognizer_unregister(manager, recognizer2);
+ click_object(rect);
+ CHECK_ZERO(CUSTOM);
+ CHECK_ZERO(CUSTOM2);
+
+ RESET;
+
+ /* verify re-register + early finish from custom2 */
+ efl_gesture_manager_recognizer_register(manager, recognizer);
+ efl_gesture_manager_recognizer_register(manager, recognizer2);
+ drag_object(rect, 500, 500, 1, 0, EINA_FALSE);
+ CHECK_ALL(CUSTOM, 1, 1, 1, 0);
+ CHECK_ALL(CUSTOM2, 1, 0, 1, 0);
+
+ efl_event_callback_del(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb, &count[CUSTOM]);
+ efl_event_callback_del(rect, EFL_EVENT_GESTURE_CUSTOM, custom_cb2, &count[CUSTOM2]);
+
+ RESET;
+
+ /* verify we don't have anything totally weird going on */
+ click_object(rect);
+ CHECK_ZERO(CUSTOM);
+ CHECK_ZERO(CUSTOM2);
+
+ efl_gesture_manager_recognizer_unregister(manager, recognizer);
+ efl_gesture_manager_recognizer_unregister(manager, recognizer2);
+}
+EFL_END_TEST
+
+
+EFL_START_TEST(test_efl_ui_gesture_sequence)
+{
+ Eo *rect = setup();
+ int moves;
+
+ multi_click_object(rect, 1);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+
+ wait_timer(0.4);
+ RESET;
+
+ moves = pinch_object(rect, 500, 500, 501, 501, -250, 0, 250, 0);
+ /* canceled */
+ CHECK_ALL(TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(LONG_PRESS, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
+ /* canceled */
+ CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
+
+
+ CHECK_START(ZOOM, 1);
+ /* 2 touch points tracked, so this will be roughly (2 * moves) but probably less */
+ ck_assert_int_ge(count[ZOOM][EFL_GESTURE_STATE_UPDATED - 1], moves);
+ /* finished 1x */
+ CHECK_FINISH(ZOOM, 1);
+ CHECK_CANCEL(ZOOM, 0);
+
+ wait_timer(0.4);
+ RESET;
+
+ multi_click_object(rect, 1);
+ CHECK_ALL(TAP, 1, 0, 1, 0);
+
+ RESET;
+}
+EFL_END_TEST
+
+void efl_ui_test_gesture(TCase *tc)
+{
+ tcase_add_test(tc, test_efl_ui_gesture_taps);
+ tcase_add_test(tc, test_efl_ui_gesture_long_press);
+ tcase_add_test(tc, test_efl_ui_gesture_flick);
+ tcase_add_test(tc, test_efl_ui_gesture_zoom);
+ tcase_add_test(tc, test_efl_ui_gesture_rotate);
+ tcase_add_test(tc, test_efl_ui_gesture_custom);
+ tcase_add_test(tc, test_efl_ui_gesture_sequence);
+}
diff --git a/src/tests/elementary/efl_ui_test_grid.c b/src/tests/elementary/efl_ui_test_grid.c
index 7ec1763545..db19e58d87 100644
--- a/src/tests/elementary/efl_ui_test_grid.c
+++ b/src/tests/elementary/efl_ui_test_grid.c
@@ -89,16 +89,15 @@ EFL_START_TEST(efl_ui_grid_unpack_all)
ck_assert(grid_item_pack(grid, count_before, NULL) != EINA_FALSE);
- itor = efl_content_iterate(grid);
efl_pack_unpack_all(grid);
count = efl_content_count(grid);
ck_assert(count == 0);
+ itor = efl_content_iterate(grid);
EINA_ITERATOR_FOREACH(itor, item)
- efl_del(item);
-
- free(itor);
+ ck_assert(EINA_FALSE);
+ eina_iterator_free(itor);
}
EFL_END_TEST
diff --git a/src/tests/elementary/efl_ui_test_image.c b/src/tests/elementary/efl_ui_test_image.c
index 244f1047e4..bd7d125323 100644
--- a/src/tests/elementary/efl_ui_test_image.c
+++ b/src/tests/elementary/efl_ui_test_image.c
@@ -30,7 +30,34 @@ EFL_START_TEST(efl_ui_image_test_icon)
}
EFL_END_TEST
+extern Eo *elm_image_object_get(Eo*);
+EFL_START_TEST(efl_ui_image_test_scale_method)
+{
+ Eo *win, *image;
+ Eina_Size2D sz;
+
+ win = win_add(NULL, "image", EFL_UI_WIN_TYPE_BASIC);
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
+
+ image = efl_add(EFL_UI_IMAGE_CLASS, win,
+ efl_file_set(efl_added, ELM_IMAGE_DATA_DIR"/images/logo.png"),
+ efl_gfx_arrangement_content_align_set(efl_added, 0.5, 0.0),
+ efl_gfx_image_scale_method_set(efl_added, EFL_GFX_IMAGE_SCALE_METHOD_FIT_WIDTH)
+ );
+ efl_gfx_entity_size_set(image, EINA_SIZE2D(100, 100));
+ get_me_to_those_events(win);
+ sz = efl_gfx_entity_size_get(image);
+ ck_assert_int_eq(sz.w, 100);
+ ck_assert_int_eq(sz.h, 100);
+ /* legacy operation on eo object: very illegal */
+ sz = efl_gfx_entity_size_get(elm_image_object_get(image));
+ ck_assert_int_eq(sz.w, 100);
+ ck_assert_int_eq(sz.h, 100);
+}
+EFL_END_TEST
+
void efl_ui_test_image(TCase *tc)
{
tcase_add_test(tc, efl_ui_image_test_icon);
+ tcase_add_test(tc, efl_ui_image_test_scale_method);
}
diff --git a/src/tests/elementary/efl_ui_test_layout.c b/src/tests/elementary/efl_ui_test_layout.c
index 86f4b1efe8..4e1b117b6c 100644
--- a/src/tests/elementary/efl_ui_test_layout.c
+++ b/src/tests/elementary/efl_ui_test_layout.c
@@ -195,14 +195,19 @@ EFL_END_TEST
EFL_START_TEST(efl_ui_layout_test_api_ordering)
{
Evas_Object *win, *box;
+ int count = 0;
const char text_text[] = "test text";
win = win_add(NULL, "layout", EFL_UI_WIN_TYPE_BASIC);
box = efl_add(EFL_UI_BOX_CLASS, win);
Eo *layout = efl_add(EFL_UI_BUTTON_CLASS, win,
+ efl_layout_signal_callback_add(efl_added, "efl,content,set", "efl", &count, (void*)event_callback_single_call_int_data, NULL),
+ efl_ui_widget_style_set(efl_added, "anchor"),
efl_content_set(efl_added, box),
efl_text_set(efl_added, text_text)
);
+ ecore_main_loop_iterate();
+ ck_assert_int_eq(count, 1);
ck_assert_ptr_eq(efl_content_get(layout), box);
ck_assert_str_eq(efl_text_get(layout), text_text);
}
@@ -218,6 +223,26 @@ EFL_START_TEST(efl_ui_layout_test_versioning)
}
EFL_END_TEST
+EFL_START_TEST(efl_ui_layout_test_freeze)
+{
+ Evas_Object *win;
+ int count = 0;
+
+ win = win_add(NULL, "layout", EFL_UI_WIN_TYPE_BASIC);
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
+ Eo *layout = efl_add(EFL_UI_BUTTON_CLASS, win);
+ efl_gfx_entity_size_set(layout, EINA_SIZE2D(100, 100));
+ efl_text_set(layout, "button");
+ get_me_to_those_events(layout);
+
+ efl_event_callback_add(win, EFL_CANVAS_SCENE_EVENT_RENDER_PRE, (void*)event_callback_single_call_int_data, &count);
+ efl_layout_calc_freeze(layout);
+ efl_layout_calc_thaw(layout);
+ force_render(win);
+ ck_assert_int_eq(count, 0);
+}
+EFL_END_TEST
+
void efl_ui_test_layout(TCase *tc)
{
tcase_add_test(tc, efl_ui_layout_test_property_bind);
@@ -229,4 +254,5 @@ void efl_ui_test_layout(TCase *tc)
tcase_add_test(tc, efl_ui_layout_test_callback);
tcase_add_test(tc, efl_ui_layout_test_property_bind_provider);
tcase_add_test(tc, efl_ui_layout_test_versioning);
+ tcase_add_test(tc, efl_ui_layout_test_freeze);
}
diff --git a/src/tests/elementary/efl_ui_test_list_collection.c b/src/tests/elementary/efl_ui_test_list_collection.c
index 1d4f913901..94bafbd010 100644
--- a/src/tests/elementary/efl_ui_test_list_collection.c
+++ b/src/tests/elementary/efl_ui_test_list_collection.c
@@ -161,7 +161,7 @@ EFL_START_TEST(placement_test_group)
r = efl_gfx_entity_geometry_get(core_item[i]);
ck_assert_int_eq(r.x, 1);
- ck_assert_int_eq(r.y, 21+(i - 1)*40);
+ ck_assert_int_eq(r.y, 22+(i - 1)*40);
ck_assert_int_eq(r.w, 183); // 200 - 2px border - X for the width of the scrollbar.
ck_assert_int_eq(r.h, 40);
}
@@ -181,7 +181,7 @@ EFL_START_TEST(placement_test_group)
r = efl_gfx_entity_geometry_get(core_item[i]);
ck_assert_int_eq(r.x, 1);
- ck_assert_int_eq(r.y, 1+(i-2)*40);
+ ck_assert_int_eq(r.y, 2+(i-2)*40);
ck_assert_int_eq(r.w, 183); // 200 - 2px border - X for the width of the scrollbar.
ck_assert_int_eq(r.h, 40);
}
diff --git a/src/tests/elementary/efl_ui_test_scroller.c b/src/tests/elementary/efl_ui_test_scroller.c
index e1aa4ef53b..78f8bfaf7f 100644
--- a/src/tests/elementary/efl_ui_test_scroller.c
+++ b/src/tests/elementary/efl_ui_test_scroller.c
@@ -144,7 +144,58 @@ EFL_START_TEST(efl_ui_test_scroller_events)
}
EFL_END_TEST
+EFL_START_TEST(efl_ui_test_scroller_scrollbar)
+{
+ Eo *sc;
+
+ Eo *win = win_add();
+ Eina_Bool hbar_visible = EINA_FALSE, vbar_visible = EINA_FALSE;
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(500, 500));
+
+ sc = efl_add(EFL_UI_SCROLLER_CLASS, win,
+ efl_ui_scrollbar_bar_mode_set(efl_added, EFL_UI_SCROLLBAR_MODE_AUTO, EFL_UI_SCROLLBAR_MODE_AUTO),
+ efl_content_set(win, efl_added));
+
+ /*Scrollbar auto mode test.*/
+ efl_loop_iterate(efl_main_loop_get());
+
+ efl_ui_scrollbar_bar_visibility_get(sc, &hbar_visible, &vbar_visible);
+ ck_assert(hbar_visible == EINA_FALSE);
+ ck_assert(vbar_visible == EINA_FALSE);
+
+ /*Scrollbar auto mode test.*/
+ efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas_object_evas_get(sc),
+ efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(5000, 5000)),
+ efl_content_set(sc, efl_added));
+
+ efl_loop_iterate(efl_main_loop_get());
+
+ efl_ui_scrollbar_bar_visibility_get(sc, &hbar_visible, &vbar_visible);
+ ck_assert(hbar_visible == EINA_TRUE);
+ ck_assert(vbar_visible == EINA_TRUE);
+
+ /*Scrollbar off mode test.*/
+ efl_ui_scrollbar_bar_mode_set(sc, EFL_UI_SCROLLBAR_MODE_OFF, EFL_UI_SCROLLBAR_MODE_OFF);
+
+ efl_loop_iterate(efl_main_loop_get());
+
+ efl_ui_scrollbar_bar_visibility_get(sc, &hbar_visible, &vbar_visible);
+ ck_assert(hbar_visible == EINA_FALSE);
+ ck_assert(vbar_visible == EINA_FALSE);
+
+ /*Scrollbar on mode test.*/
+ efl_ui_scrollbar_bar_mode_set(sc, EFL_UI_SCROLLBAR_MODE_ON, EFL_UI_SCROLLBAR_MODE_ON);
+
+ efl_loop_iterate(efl_main_loop_get());
+
+ efl_ui_scrollbar_bar_visibility_get(sc, &hbar_visible, &vbar_visible);
+ ck_assert(hbar_visible == EINA_TRUE);
+ ck_assert(vbar_visible == EINA_TRUE);
+}
+EFL_END_TEST
+
void efl_ui_test_scroller(TCase *tc)
{
tcase_add_test(tc, efl_ui_test_scroller_events);
+ tcase_add_test(tc, efl_ui_test_scroller_scrollbar);
}
diff --git a/src/tests/elementary/efl_ui_test_select_model.c b/src/tests/elementary/efl_ui_test_select_model.c
index 12d5e6e148..78259085a3 100644
--- a/src/tests/elementary/efl_ui_test_select_model.c
+++ b/src/tests/elementary/efl_ui_test_select_model.c
@@ -102,8 +102,11 @@ EFL_START_TEST(efl_test_select_model)
model = efl_add_ref(EFL_UI_SELECT_MODEL_CLASS, efl_main_loop_get(),
efl_ui_view_model_set(efl_added, base_model));
ck_assert(!!model);
- future = efl_model_property_set(model, "child.selected", eina_value_int_new(2));
+
+ future = efl_model_property_ready_get(model, "child.selected");
eina_future_then(future, _wait_propagate, NULL, NULL);
+
+ efl_model_property_set(model, "child.selected", eina_value_int_new(2));
ecore_main_loop_begin();
future = efl_model_children_slice_get(model, 0, efl_model_children_count_get(model));
@@ -120,6 +123,8 @@ EFL_START_TEST(efl_test_select_model)
EINA_ITERATOR_FOREACH(it, index)
fail_if(*index == 2);
eina_iterator_free(it);
+
+ efl_model_property_set(model, "child.selected", eina_value_int_new(1));
}
EFL_END_TEST
diff --git a/src/tests/elementary/efl_ui_test_spin_button.c b/src/tests/elementary/efl_ui_test_spin_button.c
index a60314ff21..6df99b340f 100644
--- a/src/tests/elementary/efl_ui_test_spin_button.c
+++ b/src/tests/elementary/efl_ui_test_spin_button.c
@@ -3,6 +3,7 @@
#endif
#include <Elementary.h>
+#include "elm_entry_eo.h" //needed to check that spin is in text mode
#include <Efl_Ui.h>
#include "efl_ui_suite.h"
@@ -62,7 +63,7 @@ EFL_START_TEST (spin_wheel_test)
get_me_to_those_events(spin);
evas_event_feed_mouse_move(evas_object_evas_get(spin), 30, 30, 1234, NULL);
evas_event_feed_mouse_wheel(evas_object_evas_get(spin), -1, -1, 12345, NULL);
- ck_assert(efl_ui_range_value_get(spin) == 10.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(spin), 10.0));
ck_assert_int_eq(changed, EINA_TRUE);
ck_assert_int_eq(min_reached, EINA_FALSE);
ck_assert_int_eq(max_reached, EINA_FALSE);
@@ -71,7 +72,7 @@ EFL_START_TEST (spin_wheel_test)
max_reached = EINA_FALSE;
evas_event_feed_mouse_wheel(evas_object_evas_get(spin), -1, 1, 12345, NULL);
- ck_assert(efl_ui_range_value_get(spin) == 0.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(spin), 0.0));
ck_assert_int_eq(changed, EINA_TRUE);
ck_assert_int_eq(min_reached, EINA_FALSE);
ck_assert_int_eq(max_reached, EINA_FALSE);
@@ -156,6 +157,111 @@ EFL_START_TEST (spin_value_dec_min)
}
EFL_END_TEST
+EFL_START_TEST (spin_wraparound)
+{
+ efl_ui_spin_button_wraparound_set(spin, EINA_TRUE);
+ efl_ui_range_limits_set(spin, 10, 30);
+ efl_ui_range_step_set(spin, 20);
+
+ efl_ui_range_value_set(spin, 20);
+ click_spin_part(spin, "efl.inc_button");
+ ck_assert_int_eq(efl_ui_range_value_get(spin), 10);
+
+ efl_ui_range_value_set(spin, 20);
+ click_spin_part(spin, "efl.dec_button");
+ ck_assert_int_eq(efl_ui_range_value_get(spin), 30);
+
+}
+EFL_END_TEST
+
+EFL_START_TEST (spin_double_values)
+{
+ double step = 0.1;
+ efl_ui_range_limits_set(spin, 10, 30);
+ efl_ui_range_value_set(spin, 20);
+ efl_ui_range_step_set(spin, step);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_step_get(spin), step));
+ get_me_to_those_events(spin);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(spin), 20.0));
+
+ for (int i = 0; i < 5; ++i)
+ {
+ click_part(spin, "efl.inc_button");
+ get_me_to_those_events(spin);
+ }
+ ck_assert_int_eq(EINA_DBL_EQ(efl_ui_range_value_get(spin), 20.5), 1);
+}
+EFL_END_TEST
+
+EFL_START_TEST (spin_double_values_hitting_max_with_step)
+{
+ //idea is to check that spin button can hit max with inc, even if value is not multiple is 2.7
+ efl_ui_range_limits_set(spin, 10, 30);
+ efl_ui_range_value_set(spin, 27);
+ efl_ui_range_step_set(spin, 2.7);
+ get_me_to_those_events(spin);
+
+ for (int i = 0; i < 2; ++i)
+ {
+ click_part(spin, "efl.inc_button");
+ get_me_to_those_events(spin);
+ }
+ ck_assert_int_eq(EINA_DBL_EQ(efl_ui_range_value_get(spin), 30), 1);
+}
+EFL_END_TEST
+
+static inline void
+_try_direct_text_input(const char *text, double result)
+{
+ Eo *entry;
+
+ efl_ui_focus_util_focus(efl_content_get(efl_part(spin, "efl.text_button")));
+ get_me_to_those_events(spin);
+ entry = efl_content_get(efl_part(spin, "efl.entry"));
+ elm_object_text_set(entry, "");
+ ck_assert_int_eq(efl_isa(entry, ELM_ENTRY_CLASS), 1);
+ efl_ui_focus_util_focus(entry);
+ get_me_to_those_events(spin);
+
+ write_key_sequence(spin, text);
+ get_me_to_those_events(spin);
+
+ efl_ui_focus_util_focus(efl_content_get(efl_part(spin, "efl.inc_button")));
+ ck_assert_msg(EINA_DBL_EQ(efl_ui_range_value_get(spin), result), "Values do not match %f - %f (%s)", efl_ui_range_value_get(spin), result, elm_object_text_get(entry));
+}
+
+EFL_START_TEST (spin_direct_text_input)
+{
+ efl_ui_spin_button_direct_text_input_set(spin, EINA_TRUE);
+ efl_ui_range_limits_set(spin, -30, 30);
+ efl_ui_range_value_set(spin, 20);
+ get_me_to_those_events(spin);
+ _try_direct_text_input("1asdf2", 12);
+ _try_direct_text_input("1-2", 12);
+ _try_direct_text_input("-12", -12);
+ _try_direct_text_input("-100", -30);
+ _try_direct_text_input("1.8", 18);
+ _try_direct_text_input("12342435", 30);
+}
+EFL_END_TEST
+
+EFL_START_TEST (spin_direct_text_input_comma_value)
+{
+ efl_ui_spin_button_direct_text_input_set(spin, EINA_TRUE);
+ efl_ui_range_limits_set(spin, -30, 30);
+ efl_ui_range_value_set(spin, 20);
+ efl_ui_format_string_set(spin, "%.2f", EFL_UI_FORMAT_STRING_TYPE_SIMPLE);
+ efl_ui_focus_util_focus(efl_content_get(efl_part(spin, "efl.text_button")));
+ get_me_to_those_events(spin);
+ _try_direct_text_input("1asdf2.1", 12.1);
+ _try_direct_text_input("1-2.2", 12.2);
+ _try_direct_text_input("-12.8", -12.8);
+ _try_direct_text_input("-100", -30);
+ _try_direct_text_input("10.8", 10.8);
+ _try_direct_text_input("12342435.12312341342", 30);
+}
+EFL_END_TEST
+
void efl_ui_test_spin_button(TCase *tc)
{
tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown);
@@ -164,4 +270,9 @@ void efl_ui_test_spin_button(TCase *tc)
tcase_add_test(tc, spin_value_inc);
tcase_add_test(tc, spin_value_inc_max);
tcase_add_test(tc, spin_value_dec_min);
+ tcase_add_test(tc, spin_wraparound);
+ tcase_add_test(tc, spin_double_values);
+ tcase_add_test(tc, spin_double_values_hitting_max_with_step);
+ tcase_add_test(tc, spin_direct_text_input);
+ tcase_add_test(tc, spin_direct_text_input_comma_value);
}
diff --git a/src/tests/elementary/efl_ui_test_spotlight.c b/src/tests/elementary/efl_ui_test_spotlight.c
index 9d5f433e44..2166702797 100644
--- a/src/tests/elementary/efl_ui_test_spotlight.c
+++ b/src/tests/elementary/efl_ui_test_spotlight.c
@@ -6,8 +6,8 @@
#include "efl_ui_suite.h"
#include "eo_internal.h"
-EFL_CLASS_SIMPLE_CLASS(efl_ui_spotlight_manager, "efl_ui_spotlight_manager", EFL_UI_SPOTLIGHT_MANAGER_CLASS);
-EFL_CLASS_SIMPLE_CLASS(efl_ui_spotlight_indicator, "efl_ui_spotlight_indicator", EFL_UI_SPOTLIGHT_INDICATOR_CLASS);
+EFL_CLASS_SIMPLE_CLASS(efl_ui_spotlight_manager, "Efl.Ui.Spotlight.Manager", EFL_UI_SPOTLIGHT_MANAGER_CLASS);
+EFL_CLASS_SIMPLE_CLASS(efl_ui_spotlight_indicator, "Efl.Ui.Spotlight.Indicator", EFL_UI_SPOTLIGHT_INDICATOR_CLASS);
static Efl_Ui_Win *win;
static Efl_Ui_Spotlight_Container *container;
@@ -127,7 +127,7 @@ static void
_emit_pos(Eo *obj, double d)
{
printf("EMITTING %f %f\n", d, transition_calls.last_position);
- if (d == transition_calls.last_position) return;
+ if (EINA_DBL_EQ(d, transition_calls.last_position)) return;
efl_event_callback_call(obj, EFL_UI_SPOTLIGHT_MANAGER_EVENT_POS_UPDATE, &d);
transition_calls.last_position = d;
@@ -403,7 +403,7 @@ _verify_indicator_calls(void)
ck_assert_ptr_eq(indicator_calls.content_add.subobj, w);
ck_assert_int_eq(indicator_calls.content_del.called, 0);
ck_assert_int_eq(indicator_calls.position_update.called, 1);
- ck_assert(indicator_calls.position_update.position == 0.0);
+ ck_assert(EINA_DBL_EQ(indicator_calls.position_update.position, 0.0));
indicator_calls.content_add.called = 0;
indicator_calls.position_update.called = 0;
@@ -414,7 +414,7 @@ _verify_indicator_calls(void)
ck_assert_ptr_eq(indicator_calls.content_add.subobj, w1);
ck_assert_int_eq(indicator_calls.content_del.called, 0);
ck_assert_int_eq(indicator_calls.position_update.called, 1);
- ck_assert(indicator_calls.position_update.position == 1.0);
+ ck_assert(EINA_DBL_EQ(indicator_calls.position_update.position, 1.0));
indicator_calls.content_add.called = 0;
indicator_calls.position_update.called = 0;
@@ -435,7 +435,7 @@ _verify_indicator_calls(void)
ck_assert_int_eq(indicator_calls.content_del.index, 0);
ck_assert_ptr_eq(indicator_calls.content_del.subobj, w1);
ck_assert_int_eq(indicator_calls.position_update.called, 1);
- ck_assert(indicator_calls.position_update.position == 0.0);
+ ck_assert(EINA_DBL_EQ(indicator_calls.position_update.position, 0.0));
indicator_calls.content_del.called = 0;
indicator_calls.position_update.called = 0;
}
@@ -645,7 +645,7 @@ EFL_START_TEST (efl_ui_spotlight_animated_transition)
ck_assert_int_eq(efl_ui_spotlight_manager_animated_transition_get(efl_ui_spotlight_manager_get(container)), EINA_FALSE);
//now check with a real spotlight manager
- efl_ui_spotlight_manager_set(container, efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS));
+ efl_ui_spotlight_manager_set(container, efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS));
efl_ui_spotlight_animated_transition_set(container, EINA_TRUE);
ck_assert_int_eq(efl_ui_spotlight_animated_transition_get(container), EINA_TRUE);
ck_assert_int_eq(efl_ui_spotlight_manager_animated_transition_get(efl_ui_spotlight_manager_get(container)), EINA_TRUE);
@@ -654,7 +654,7 @@ EFL_START_TEST (efl_ui_spotlight_animated_transition)
ck_assert_int_eq(efl_ui_spotlight_animated_transition_get(container), EINA_FALSE);
ck_assert_int_eq(efl_ui_spotlight_manager_animated_transition_get(efl_ui_spotlight_manager_get(container)), EINA_FALSE);
- Eo *manager2 = efl_new(EFL_UI_SPOTLIGHT_MANAGER_STACK_CLASS);
+ Eo *manager2 = efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS);
Eina_Bool animated_transition_manager;
efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, win,
efl_ui_spotlight_manager_set(efl_added, manager2),
diff --git a/src/tests/elementary/efl_ui_test_text.c b/src/tests/elementary/efl_ui_test_text.c
index 5c26e6f528..521bf1339c 100644
--- a/src/tests/elementary/efl_ui_test_text.c
+++ b/src/tests/elementary/efl_ui_test_text.c
@@ -5,6 +5,7 @@
#define EFL_LAYOUT_CALC_PROTECTED
#include <Efl_Ui.h>
#include "efl_ui_suite.h"
+#include "Evas_Legacy.h"
static void
increment_int_changed(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
@@ -29,6 +30,18 @@ EFL_START_TEST(text_cnp)
efl_text_set(txt, "Hello");
efl_text_interactive_all_select(txt);
efl_ui_textbox_selection_copy(txt);
+ efl_text_interactive_all_unselect(txt);
+ efl_text_cursor_object_text_insert(efl_text_interactive_main_cursor_get(txt), "X");
+ efl_ui_textbox_selection_paste(txt);
+ ecore_main_loop_iterate();
+ ck_assert_int_eq(i_copy, 1);
+ ck_assert_int_eq(i_paste, 1);
+ ck_assert_str_eq(efl_text_get(txt), "HelloXHello");
+
+ i_copy = i_cut = i_paste= 0;
+ efl_text_set(txt, "Hello");
+ efl_text_interactive_all_select(txt);
+ efl_ui_textbox_selection_copy(txt);
efl_text_interactive_all_select(txt);
efl_ui_textbox_selection_cut(txt);
efl_ui_textbox_selection_paste(txt);
@@ -43,9 +56,15 @@ EFL_START_TEST(text_cnp)
}
EFL_END_TEST
+static void
+_stop_event_soon(void *data EINA_UNUSED, const Efl_Event *ev)
+{
+ efl_event_callback_stop(ev->object);
+}
+
EFL_START_TEST(text_all_select_all_unselect)
{
- Eo *txt;
+ Eo *txt, *txt2;
Eo *win = win_add();
int i_have_selection = 0, i_selection = 0;
@@ -56,22 +75,65 @@ EFL_START_TEST(text_all_select_all_unselect)
efl_event_callback_add(efl_added, EFL_TEXT_INTERACTIVE_EVENT_SELECTION_CHANGED,
increment_int_changed, &i_selection)
);
-
+ efl_event_callback_priority_add(txt, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, EFL_CALLBACK_PRIORITY_BEFORE, _stop_event_soon, NULL);
efl_text_set(txt, "Hello");
efl_text_interactive_all_select(txt);
- Efl_Text_Cursor *c1=NULL, *c2 =NULL;
+ Efl_Text_Cursor_Object *c1=NULL, *c2 =NULL;
efl_text_interactive_selection_cursors_get(txt, &c1, &c2);
ck_assert_ptr_ne(c1, NULL);
ck_assert_ptr_ne(c2, NULL);
fail_if(!efl_text_interactive_have_selection_get(txt));
- ck_assert_int_eq(efl_text_cursor_position_get(c1), 0);
- ck_assert_int_eq(efl_text_cursor_position_get(c2), 5);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(c1), 0);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(c2), 5);
efl_text_interactive_all_unselect(txt);
fail_if(efl_text_interactive_have_selection_get(txt));
ecore_main_loop_iterate();
ck_assert_int_eq(i_have_selection, 2);
ck_assert_int_eq(i_selection, 1);
+
+ /*Partial select, the select all*/
+ Eo *sel1, *sel2;
+ i_selection = 0;
+ efl_text_interactive_selection_cursors_get(txt, &sel1, &sel2);
+ efl_text_cursor_object_position_set(sel1, 1);
+ efl_text_cursor_object_position_set(sel2, 2);
+ ck_assert_int_eq(i_selection, 2);
+ efl_text_interactive_all_select(txt);
+ ck_assert_int_eq(i_selection, 3);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(sel1), 0);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(sel2), 5);
+
+ Eo *cur1 = efl_ui_textbox_cursor_create(txt);
+ Eo *cur2 = efl_ui_textbox_cursor_create(txt);
+ efl_text_cursor_object_position_set(cur1, 1);
+ efl_text_cursor_object_position_set(cur2, 2);
+ efl_text_interactive_selection_cursors_set(txt, cur1, cur2);
+ ck_assert_int_eq(i_selection, 4);
+ efl_text_interactive_selection_cursors_get(txt, &sel1, &sel2);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(sel1),1);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(sel2),2);
+
+
+ /*Select part then select all*/
+ efl_text_interactive_all_unselect(txt);
+ i_have_selection = 0, i_selection = 0;
+ efl_text_cursor_object_position_set(cur1, 1);
+ efl_text_cursor_object_position_set(cur2, 2);
+ efl_text_interactive_selection_cursors_set(txt, cur1, cur2);
+ ck_assert_int_eq(i_selection, 1);
+ ck_assert_int_eq(i_have_selection, 1);
+ efl_text_interactive_all_select(txt);
+ ck_assert_int_eq(i_selection, 2);
+ ck_assert_int_eq(i_have_selection, 1);
+ efl_text_interactive_all_unselect(txt);
+ ck_assert_int_eq(i_have_selection, 2);
+
+ //cursor selection change on efl_markup_set
+ txt2 = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_text_markup_set(txt2, "<ps>");
+
efl_del(txt);
+ efl_del(txt2);
efl_del(win);
}
EFL_END_TEST
@@ -82,18 +144,19 @@ EFL_START_TEST(text_selection)
Eo *win = win_add();
txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_event_callback_priority_add(txt, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, EFL_CALLBACK_PRIORITY_BEFORE, _stop_event_soon, NULL);
efl_gfx_entity_size_set(txt, EINA_SIZE2D(300, 300));
efl_text_set(txt, "Hello");
get_me_to_those_events(txt);
drag_object(txt, 2, 2, 295, 295, EINA_TRUE);
ecore_main_loop_iterate();
- Efl_Text_Cursor *c1=NULL, *c2 =NULL;
+ Efl_Text_Cursor_Object *c1=NULL, *c2 =NULL;
efl_text_interactive_selection_cursors_get(txt, &c1, &c2);
ck_assert_ptr_ne(c1, NULL);
ck_assert_ptr_ne(c2, NULL);
fail_if(!efl_text_interactive_have_selection_get(txt));
- ck_assert_int_eq(efl_text_cursor_position_get(c1), 0);
- ck_assert_int_eq(efl_text_cursor_position_get(c2), 5);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(c1), 0);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(c2), 5);
efl_text_interactive_all_unselect(txt);
fail_if(efl_text_interactive_have_selection_get(txt));
efl_text_interactive_selection_allowed_set(txt, EINA_FALSE);
@@ -120,7 +183,7 @@ EFL_START_TEST(text_user_change)
txt = efl_add(EFL_UI_TEXTBOX_CLASS, win,
efl_event_callback_add(efl_added, EFL_TEXT_INTERACTIVE_EVENT_CHANGED_USER, user_changed, &info)
);
-
+ efl_event_callback_priority_add(txt, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, EFL_CALLBACK_PRIORITY_BEFORE, _stop_event_soon, NULL);
efl_text_set(txt, "Hello");
efl_gfx_entity_size_set(txt, EINA_SIZE2D(300, 300));
efl_text_interactive_all_select(txt);
@@ -137,15 +200,16 @@ EFL_START_TEST(text_scroll_mode)
Eo *txt, *win, *cur;
win = win_add();
txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_event_callback_priority_add(txt, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, EFL_CALLBACK_PRIORITY_BEFORE, _stop_event_soon, NULL);
cur = efl_text_interactive_main_cursor_get(txt);
efl_text_set(txt, "Hello");
/*scroll mode is false by default*/
fail_if(efl_ui_textbox_scrollable_get(txt));
efl_ui_textbox_scrollable_set(txt, !efl_ui_textbox_scrollable_get(txt));
- efl_text_cursor_text_insert(cur, "World");
+ efl_text_cursor_object_text_insert(cur, "World");
fail_if(!efl_ui_textbox_scrollable_get(txt));
efl_ui_textbox_scrollable_set(txt, !efl_ui_textbox_scrollable_get(txt));
- efl_text_cursor_text_insert(cur, "!!!");
+ efl_text_cursor_object_text_insert(cur, "!!!");
ck_assert_str_eq(efl_text_get(txt),"HelloWorld!!!");
efl_del(txt);
@@ -153,6 +217,315 @@ EFL_START_TEST(text_scroll_mode)
}
EFL_END_TEST
+EFL_START_TEST(text_change_event)
+{
+ Eo *txt;
+ Eo *win = win_add();
+
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_event_callback_priority_add(txt, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, EFL_CALLBACK_PRIORITY_BEFORE, _stop_event_soon, NULL);
+ efl_gfx_entity_size_set(txt, EINA_SIZE2D(300, 300));
+ efl_text_set(txt, "Hello");
+ int i_changed = 0;
+ efl_event_callback_add(txt, EFL_UI_TEXTBOX_EVENT_CHANGED, increment_int_changed, &i_changed);
+ efl_gfx_entity_visible_set(txt, EINA_TRUE);
+ Evas *e = evas_object_evas_get(txt);
+ efl_ui_focus_util_focus(txt);
+ evas_event_feed_key_down(e, "s", "s", "s", "s", time(NULL), NULL);
+ ecore_main_loop_iterate();
+ ck_assert_str_eq(efl_text_get(txt),"Hellos");
+ ck_assert_int_eq(i_changed,1);
+ ecore_main_loop_iterate();
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+
+EFL_START_TEST(text_keys_handler)
+{
+ Eo *txt;
+ Eo *win = win_add();
+
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_event_callback_priority_add(txt, EFL_UI_SELECTION_EVENT_WM_SELECTION_CHANGED, EFL_CALLBACK_PRIORITY_BEFORE, _stop_event_soon, NULL);
+ efl_gfx_entity_size_set(txt, EINA_SIZE2D(300, 300));
+ efl_text_set(txt, "Hello");
+
+ efl_gfx_entity_visible_set(txt, EINA_TRUE);
+ Evas *e = evas_object_evas_get(txt);
+ efl_ui_focus_util_focus(txt);
+
+ efl_text_cursor_object_move(efl_text_interactive_main_cursor_get(txt), EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ evas_key_modifier_on(e, "Control");
+ evas_event_feed_key_down(e, "BackSpace", "BackSpace", "\b", "\b", time(NULL), NULL);
+ ecore_main_loop_iterate();
+ ck_assert_str_eq(efl_text_get(txt),"");
+ ck_assert_int_eq(efl_text_cursor_object_position_get(efl_text_interactive_main_cursor_get(txt)), 0);
+ evas_event_feed_key_up(e, "BackSpace", "BackSpace", "\b", "\b", time(NULL), NULL);
+ ecore_main_loop_iterate();
+
+ efl_text_set(txt, "Hello");
+ efl_text_cursor_object_position_set(efl_text_interactive_main_cursor_get(txt), 0);
+ evas_key_modifier_on(e, "Control");
+ evas_event_feed_key_down(e, "Delete", "Delete", "\177", "\177", time(NULL), NULL);
+ ecore_main_loop_iterate();
+ ck_assert_str_eq(efl_text_get(txt),"");
+ ck_assert_int_eq(efl_text_cursor_object_position_get(efl_text_interactive_main_cursor_get(txt)), 0);
+ evas_event_feed_key_up(e, "Delete", "Delete", "\177", "\177", time(NULL), NULL);
+ ecore_main_loop_iterate();
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+
+EFL_START_TEST(text_editable)
+{
+ Eo *txt, *win;
+ win = win_add();
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_text_font_size_set(txt, 100);
+ efl_text_font_family_set(txt, "Arial");
+ efl_text_interactive_editable_set(txt, !efl_text_interactive_editable_get(txt));
+ ck_assert_int_eq(efl_text_font_size_get(txt), 100);
+ ck_assert_str_eq(efl_text_font_family_get(txt), "Arial");
+
+ efl_ui_widget_disabled_set(txt, EINA_TRUE);
+ ck_assert_int_eq(efl_text_font_size_get(txt), 100);
+ ck_assert_str_eq(efl_text_font_family_get(txt), "Arial");
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+
+EFL_START_TEST(text_on_startup)
+{
+ Eo *txt, *win;
+ win = win_add();
+ unsigned char r,g,b,a;
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win,
+ efl_text_color_set(efl_added, 0, 255, 0, 255),
+ efl_text_font_size_set(efl_added, 50),
+ efl_text_font_family_set(efl_added, "Arial"));
+
+ ck_assert_int_eq(efl_text_font_size_get(txt), 50);
+ ck_assert_str_eq(efl_text_font_family_get(txt), "Arial");
+ efl_text_color_get(txt, &r, &g, &b, &a);
+ ck_assert_int_eq(r, 0);
+ ck_assert_int_eq(g, 255);
+ ck_assert_int_eq(b, 0);
+ ck_assert_int_eq(a, 255);
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+
+EFL_START_TEST(text_multiline_selection)
+{
+ Eo *txt, *win;
+ Eo *cursor1, *cursor2;
+ Eina_Rect rc1, rc2;
+ win = win_add();
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_text_markup_set(txt, "p1<ps/>p2<ps/>p3");
+ efl_text_multiline_set(txt, EINA_FALSE);
+ ecore_main_loop_iterate();
+ efl_text_interactive_all_select(txt);
+ efl_text_interactive_selection_cursors_get(txt, &cursor1, &cursor2);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor1, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor2, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_ne(rc1.x, rc2.x);
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+
+EFL_START_TEST(text_singleline_cursor_movement)
+{
+ Eo *txt, *win;
+ Eo *cursor;
+ Eina_Rect rc1, rc2;
+ win = win_add();
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_text_markup_set(txt, "p1<ps>p<b>2</b>2<ps>p3");
+ efl_text_multiline_set(txt, EINA_FALSE);
+ ecore_main_loop_iterate();
+
+ cursor = efl_text_interactive_main_cursor_get(txt);
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 0);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 9);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_ne(rc1.x, rc2.x);
+
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 0);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 9);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_ne(rc1.x, rc2.x);
+
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 9); //do not move
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_PREVIOUS);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 9); //do not move
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_eq(rc1.x, rc2.x);
+
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_START);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 0);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cursor), 9);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_ne(rc1.x, rc2.x);
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+
+EFL_START_TEST(text_multiline_singleline_cursor_pos)
+{
+ Eo *txt, *win;
+ Eo *cursor, *cursor1, *cursor2;
+ Eina_Rect rc1, rc2;
+ win = win_add();
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_text_markup_set(txt, "p1<ps>p<b>2</b>2<ps>p3<ps>");
+ cursor = efl_text_interactive_main_cursor_get(txt);
+ cursor1 = efl_ui_textbox_cursor_create(txt);
+ efl_text_cursor_object_position_set(cursor1, 4);
+ cursor2 = efl_ui_textbox_cursor_create(txt);
+ efl_text_cursor_object_position_set(cursor2, 8);
+
+ efl_text_multiline_set(txt, EINA_FALSE);
+ ck_assert_uint_eq(efl_text_cursor_object_content_get(cursor1), '2');
+ ck_assert_uint_eq(efl_text_cursor_object_content_get(cursor2), '3');
+
+ efl_text_cursor_object_position_set(cursor, 0);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ efl_text_multiline_set(txt, EINA_TRUE);
+ ck_assert_uint_eq(efl_text_cursor_object_content_get(cursor1), '2');
+ ck_assert_uint_eq(efl_text_cursor_object_content_get(cursor2), '3');
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_eq(rc1.x, rc2.x);
+
+ efl_text_multiline_set(txt, EINA_FALSE);
+ efl_text_cursor_object_position_set(cursor, 2);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ efl_text_multiline_set(txt, EINA_TRUE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_eq(rc1.x, rc2.x);
+ efl_text_multiline_set(txt, EINA_FALSE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_eq(rc1.x, rc2.x);
+
+ efl_text_multiline_set(txt, EINA_FALSE);
+ efl_text_cursor_object_position_set(cursor, 3);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ efl_text_multiline_set(txt, EINA_TRUE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_ne(rc1.y, rc2.y);
+ ck_assert_int_ne(rc1.x, rc2.x);
+ efl_text_multiline_set(txt, EINA_FALSE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_eq(rc1.x, rc2.x);
+
+ efl_text_multiline_set(txt, EINA_FALSE);
+ efl_text_cursor_object_position_set(cursor, 4);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ efl_text_multiline_set(txt, EINA_TRUE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_ne(rc1.y, rc2.y);
+ ck_assert_int_ne(rc1.x, rc2.x);
+ efl_text_multiline_set(txt, EINA_FALSE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_eq(rc1.x, rc2.x);
+
+ efl_text_multiline_set(txt, EINA_FALSE);
+ efl_text_cursor_object_position_set(cursor, 10);
+ rc1 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ efl_text_multiline_set(txt, EINA_TRUE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_ne(rc1.y, rc2.y);
+ ck_assert_int_ne(rc1.x, rc2.x);
+ efl_text_multiline_set(txt, EINA_FALSE);
+ rc2 = efl_text_cursor_object_cursor_geometry_get(cursor, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert_int_eq(rc1.y, rc2.y);
+ ck_assert_int_eq(rc1.x, rc2.x);
+
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+
+/*
+EFL_START_TEST(text_keyboard_mouse_cluster_cursor_movement)
+{
+ Eo *txt;
+ Eo *cursor;
+ Eo *win = win_add();
+ Evas *e;
+ Eina_Rect rc, rc2;
+
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(300, 300));
+ efl_gfx_entity_size_set(txt, EINA_SIZE2D(300, 300));
+ efl_ui_textbox_scrollable_set(txt, EINA_TRUE);
+ get_me_to_those_events(txt);
+
+ efl_text_markup_set(txt, "A\u1100\u1161\u11AA");
+ cursor = efl_text_interactive_main_cursor_get(txt);
+ efl_text_cursor_object_position_set(cursor, 1);
+
+ e = evas_object_evas_get(txt);
+ efl_ui_focus_util_focus(txt);
+ evas_event_feed_key_down(e, "Right", "Right", "Right", "Right", time(NULL), NULL);
+
+ ck_assert_int_eq(4, efl_text_cursor_object_position_get(cursor));
+
+ efl_text_cursor_object_position_set(cursor, 1);
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT);
+ efl_text_cursor_object_move(cursor, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT);
+ rc = efl_text_cursor_object_content_geometry_get(cursor);
+ rc2 = efl_ui_scrollable_viewport_geometry_get(txt);
+
+ efl_text_cursor_object_position_set(cursor, 0);
+ click_object_at(win, rc2.x + rc.x + (rc.w/2), rc2.y + rc.y + (rc.h/2));
+
+ ck_assert_int_eq(4, efl_text_cursor_object_position_get(cursor));
+
+ efl_del(txt);
+ efl_del(win);
+}
+EFL_END_TEST
+*/
+
void efl_ui_test_text(TCase *tc)
{
tcase_add_test(tc, text_cnp);
@@ -160,4 +533,14 @@ void efl_ui_test_text(TCase *tc)
tcase_add_test(tc, text_selection);
tcase_add_test(tc, text_user_change);
tcase_add_test(tc, text_scroll_mode);
+ tcase_add_test(tc, text_change_event);
+ tcase_add_test(tc, text_keys_handler);
+ tcase_add_test(tc, text_editable);
+ tcase_add_test(tc, text_multiline_selection);
+ tcase_add_test(tc, text_singleline_cursor_movement);
+ tcase_add_test(tc, text_multiline_singleline_cursor_pos);
+ tcase_add_test(tc, text_on_startup);
+// works on some systemd and not others - is suepct font or harfbuzz system
+// dependency issue... for now - disable.
+// tcase_add_test(tc, text_keyboard_mouse_cluster_cursor_movement);
}
diff --git a/src/tests/elementary/efl_ui_test_timepicker.c b/src/tests/elementary/efl_ui_test_timepicker.c
new file mode 100644
index 0000000000..1aca88cc23
--- /dev/null
+++ b/src/tests/elementary/efl_ui_test_timepicker.c
@@ -0,0 +1,45 @@
+#define EFL_NOLEGACY_API_SUPPORT
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+#define EFL_LAYOUT_CALC_PROTECTED
+#include <Efl_Ui.h>
+#include "efl_ui_suite.h"
+
+EFL_START_TEST(check_all_times)
+{
+ Eo *win = win_add();
+ Eo *timepicker = efl_add(EFL_UI_TIMEPICKER_CLASS, win);
+
+ for (int min = 0; min < 60; ++min)
+ {
+ for (int hour = 0; hour < 24; ++hour)
+ {
+ efl_ui_timepicker_time_set(timepicker, hour, min);
+ }
+ }
+}
+EFL_END_TEST
+
+EFL_START_TEST(check_all_times_24_mode)
+{
+ Eo *win = win_add();
+ Eo *timepicker = efl_add(EFL_UI_TIMEPICKER_CLASS, win,
+ efl_ui_timepicker_is_24hour_set(efl_added, EINA_TRUE));
+
+ for (int min = 0; min < 60; ++min)
+ {
+ for (int hour = 0; hour < 24; ++hour)
+ {
+ efl_ui_timepicker_time_set(timepicker, hour, min);
+ }
+ }
+}
+EFL_END_TEST
+
+void efl_ui_test_timepicker(TCase *tc)
+{
+ tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown);
+ tcase_add_test(tc, check_all_times);
+ tcase_add_test(tc, check_all_times_24_mode);
+}
diff --git a/src/tests/elementary/efl_ui_test_vg_animation.c b/src/tests/elementary/efl_ui_test_vg_animation.c
new file mode 100644
index 0000000000..2909ede100
--- /dev/null
+++ b/src/tests/elementary/efl_ui_test_vg_animation.c
@@ -0,0 +1,122 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Efl_Ui.h>
+#include "efl_ui_suite.h"
+
+#ifdef BUILD_VG_LOADER_JSON
+
+EFL_START_TEST(vg_anim_playing_control)
+{
+ Evas_Object *win, *vg_anim;
+ win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
+ efl_text_set(efl_added, "Efl_Ui_Vg_Animation demo"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+ vg_anim = efl_add(EFL_UI_VG_ANIMATION_CLASS, win,
+ efl_content_set(win, efl_added));
+
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_NOT_READY);
+
+ // File load
+ efl_file_simple_load(vg_anim, TESTS_SRC_DIR"/emoji_wink.json", NULL);
+ ck_assert(efl_file_loaded_get(vg_anim));
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_STOPPED);
+
+ // Play start
+ efl_player_playing_set(vg_anim, EINA_TRUE);
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_PLAYING);
+
+ // Play pause
+ efl_player_paused_set(vg_anim, EINA_TRUE);
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_PAUSED);
+
+ // Play resume
+ efl_player_paused_set(vg_anim, EINA_FALSE);
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_PLAYING);
+
+ // Playback speed
+ efl_player_playback_speed_set(vg_anim, 2.0);
+ ck_assert(EINA_DBL_EQ(efl_player_playback_speed_get(vg_anim), 2.0));
+
+ efl_player_playback_speed_set(vg_anim, -2.0);
+ ck_assert(EINA_DBL_EQ(efl_player_playback_speed_get(vg_anim), -2.0));
+
+ // playing backwards
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS);
+
+ // Play stop
+ efl_player_playing_set(vg_anim, EINA_FALSE);
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_STOPPED);
+
+ // Auto repeat
+ efl_player_playback_loop_set(vg_anim, EINA_TRUE);
+ ck_assert_int_eq(efl_player_playback_loop_get(vg_anim), EINA_TRUE);
+
+ // Auto play
+ efl_player_autoplay_set(vg_anim, EINA_TRUE);
+ ck_assert_int_eq(efl_player_autoplay_get(vg_anim), EINA_TRUE);
+}
+EFL_END_TEST
+
+EFL_START_TEST(vg_anim_frame_control)
+{
+ Evas_Object *win, *vg_anim;
+ int frame_count = 0;
+
+ win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
+ efl_text_set(efl_added, "Efl_Ui_Vg_Animation demo"),
+ efl_ui_win_autodel_set(efl_added, EINA_TRUE));
+ vg_anim = efl_add(EFL_UI_VG_ANIMATION_CLASS, win,
+ efl_content_set(win, efl_added));
+
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_NOT_READY);
+
+ // File load
+ // emoji_wink.json is 60 frames sample.
+ efl_file_simple_load(vg_anim, TESTS_SRC_DIR"/emoji_wink.json", NULL);
+ ck_assert(efl_file_loaded_get(vg_anim));
+ ck_assert_int_eq(efl_ui_vg_animation_state_get(vg_anim), EFL_UI_VG_ANIMATION_STATE_STOPPED);
+
+ // Total frame
+ frame_count = efl_ui_vg_animation_frame_count_get(vg_anim);
+ ck_assert_int_eq(frame_count, 60);
+
+ // Frame set, get
+ efl_ui_vg_animation_frame_set(vg_anim, 30);
+ ck_assert_int_eq(efl_ui_vg_animation_frame_get(vg_anim), 30);
+
+ // Frame set, get
+ efl_player_playback_progress_set(vg_anim, 0.3);
+ ck_assert(EINA_DBL_EQ(efl_player_playback_progress_get(vg_anim), 0.3));
+
+ // Min/Max frame set,get
+ efl_ui_vg_animation_min_frame_set(vg_anim, 5);
+ ck_assert_int_eq(efl_ui_vg_animation_min_frame_get(vg_anim), 5);
+ efl_ui_vg_animation_frame_set(vg_anim, 1);
+ ck_assert_int_eq(efl_ui_vg_animation_frame_get(vg_anim), 5);
+
+ efl_ui_vg_animation_max_frame_set(vg_anim, 55);
+ ck_assert_int_eq(efl_ui_vg_animation_max_frame_get(vg_anim), 55);
+ efl_ui_vg_animation_frame_set(vg_anim, 60);
+ ck_assert_int_eq(efl_ui_vg_animation_frame_get(vg_anim), 55);
+
+ // Min/Max progress set,get
+ efl_ui_vg_animation_min_progress_set(vg_anim, 0.2);
+ ck_assert(EINA_DBL_EQ(efl_ui_vg_animation_min_progress_get(vg_anim), 0.2));
+
+ efl_ui_vg_animation_max_progress_set(vg_anim, 0.8);
+ ck_assert(EINA_DBL_EQ(efl_ui_vg_animation_max_progress_get(vg_anim), 0.8));
+}
+EFL_END_TEST
+
+#endif
+
+void efl_ui_test_vg_animation(TCase *tc)
+{
+ tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown);
+#ifdef BUILD_VG_LOADER_JSON
+ tcase_add_test(tc, vg_anim_playing_control);
+ tcase_add_test(tc, vg_anim_frame_control);
+#endif
+}
diff --git a/src/tests/elementary/efl_ui_test_widget.c b/src/tests/elementary/efl_ui_test_widget.c
index 74e8f2eac9..39d6be4137 100644
--- a/src/tests/elementary/efl_ui_test_widget.c
+++ b/src/tests/elementary/efl_ui_test_widget.c
@@ -93,7 +93,7 @@ resize_object(Efl_Canvas_Object *o)
{
Efl_Ui_Widget_Data *pd = efl_data_scope_safe_get(o, EFL_UI_WIDGET_CLASS);
- return eina_list_data_get(pd->subobjs);
+ return eina_array_data_get(pd->children, 0);
}
EFL_START_TEST(efl_ui_test_widget_widget_sub_iterator)
@@ -182,16 +182,16 @@ EFL_START_TEST(efl_ui_test_widget_sub_object_add_del)
State s;
_small_ui(&s);
- DISABLE_ABORT_ON_CRITICAL_START;
+ EXPECT_ERROR_START;
ck_assert(!efl_ui_widget_sub_object_add(s.btn1, s.btn1));
- DISABLE_ABORT_ON_CRITICAL_END;
+ EXPECT_ERROR_END;
ck_assert(efl_ui_widget_sub_object_add(s.box, s.btn1));
- DISABLE_ABORT_ON_CRITICAL_START;
+ EXPECT_ERROR_START;
ck_assert(!efl_ui_widget_sub_object_add(s.box, NULL));
ck_assert(!efl_ui_widget_sub_object_del(s.btn1, s.btn1));
ck_assert(!efl_ui_widget_sub_object_del(s.box, NULL));
ck_assert(!efl_ui_widget_sub_object_del(s.btn1, s.box));
- DISABLE_ABORT_ON_CRITICAL_END;
+ EXPECT_ERROR_END;
ck_assert(efl_ui_widget_sub_object_del(s.box, s.btn1));
}
EFL_END_TEST
@@ -332,6 +332,116 @@ EFL_START_TEST(efl_ui_test_widget_win_provider_find)
}
EFL_END_TEST
+#define CHECK_UNFOCUSABLE_STATE(x) \
+ CHECK_UNFOCUSABLE_STATE_VEC(x, x, x, x, x)
+
+#define CHECK_UNFOCUSABLE_STATE_VEC(x1, x2, x3, x4, x5) \
+ ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.win), x1); \
+ ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.ic), x2); \
+ ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.box), x3); \
+ ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.btn1), x4); \
+ ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.btn2), x5)
+
+
+EFL_START_TEST(efl_ui_test_widget_tree_unfocusable)
+{
+ State s;
+
+ _small_ui(&s);
+ CHECK_UNFOCUSABLE_STATE(0);
+
+ elm_widget_tree_unfocusable_set(s.win, EINA_TRUE);
+ CHECK_UNFOCUSABLE_STATE(1);
+
+ elm_widget_tree_unfocusable_set(s.win, EINA_FALSE);
+ CHECK_UNFOCUSABLE_STATE(0);
+
+ elm_widget_tree_unfocusable_set(s.win, EINA_TRUE);
+ CHECK_UNFOCUSABLE_STATE(1);
+
+ elm_widget_tree_unfocusable_set(s.win, EINA_TRUE);
+ CHECK_UNFOCUSABLE_STATE(1);
+
+ elm_widget_tree_unfocusable_set(s.win, EINA_FALSE);
+ CHECK_UNFOCUSABLE_STATE(0);
+}
+EFL_END_TEST
+
+EFL_START_TEST(efl_ui_test_widget_tree_unfocusable_nested_calls)
+{
+ State s;
+
+ _small_ui(&s);
+ CHECK_UNFOCUSABLE_STATE(0);
+
+ elm_widget_tree_unfocusable_set(s.win, EINA_TRUE);
+ CHECK_UNFOCUSABLE_STATE(1);
+
+ elm_widget_tree_unfocusable_set(s.box, EINA_TRUE);
+ CHECK_UNFOCUSABLE_STATE(1);
+
+ elm_widget_tree_unfocusable_set(s.win, EINA_FALSE);
+ CHECK_UNFOCUSABLE_STATE_VEC(0, 0, 1, 1, 1);
+
+ elm_widget_tree_unfocusable_set(s.box, EINA_FALSE);
+ CHECK_UNFOCUSABLE_STATE(0);
+}
+EFL_END_TEST
+
+#define CHECK_DISABLED_STATE(x) CHECK_DISABLED_STATE_VEC(x,x,x,x,x)
+
+#define CHECK_DISABLED_STATE_VEC(x1,x2,x3,x4,x5) \
+ ck_assert_int_eq(efl_ui_widget_disabled_get(s.win), x1); \
+ ck_assert_int_eq(efl_ui_widget_disabled_get(s.ic), x2); \
+ ck_assert_int_eq(efl_ui_widget_disabled_get(s.box), x3); \
+ ck_assert_int_eq(efl_ui_widget_disabled_get(s.btn1), x4); \
+ ck_assert_int_eq(efl_ui_widget_disabled_get(s.btn2), x5)
+
+EFL_START_TEST(efl_ui_test_widget_disabled_repeat_call)
+{
+ State s;
+
+ _small_ui(&s);
+ CHECK_DISABLED_STATE(0);
+
+ efl_ui_widget_disabled_set(s.win, EINA_TRUE);
+ CHECK_DISABLED_STATE(1);
+
+ efl_ui_widget_disabled_set(s.win, EINA_FALSE);
+ CHECK_DISABLED_STATE(0);
+
+ efl_ui_widget_disabled_set(s.win, EINA_TRUE);
+ CHECK_DISABLED_STATE(1);
+
+ efl_ui_widget_disabled_set(s.win, EINA_TRUE);
+ CHECK_DISABLED_STATE(1);
+
+ efl_ui_widget_disabled_set(s.win, EINA_FALSE);
+ CHECK_DISABLED_STATE(0);
+}
+EFL_END_TEST
+
+EFL_START_TEST(efl_ui_test_widget_disabled_nested_calls)
+{
+ State s;
+
+ _small_ui(&s);
+ CHECK_DISABLED_STATE(0);
+
+ efl_ui_widget_disabled_set(s.win, EINA_TRUE);
+ CHECK_DISABLED_STATE(1);
+
+ efl_ui_widget_disabled_set(s.box, EINA_TRUE);
+ CHECK_DISABLED_STATE(1);
+
+ efl_ui_widget_disabled_set(s.win, EINA_FALSE);
+ CHECK_DISABLED_STATE_VEC(0, 0, 1, 1, 1);
+
+ efl_ui_widget_disabled_set(s.box, EINA_FALSE);
+ CHECK_DISABLED_STATE(0);
+}
+EFL_END_TEST
+
void efl_ui_test_widget(TCase *tc)
{
tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown);
@@ -346,4 +456,8 @@ void efl_ui_test_widget(TCase *tc)
tcase_add_test(tc, efl_ui_test_widget_disabled_parent);
tcase_add_test(tc, efl_ui_test_widget_disabled_behaviour);
tcase_add_test(tc, efl_ui_test_widget_win_provider_find);
+ tcase_add_test(tc, efl_ui_test_widget_tree_unfocusable);
+ tcase_add_test(tc, efl_ui_test_widget_tree_unfocusable_nested_calls);
+ tcase_add_test(tc, efl_ui_test_widget_disabled_repeat_call);
+ tcase_add_test(tc, efl_ui_test_widget_disabled_nested_calls);
}
diff --git a/src/tests/elementary/efl_ui_window_cnp_dnd_slave.c b/src/tests/elementary/efl_ui_window_cnp_dnd_slave.c
new file mode 100644
index 0000000000..43aafa5470
--- /dev/null
+++ b/src/tests/elementary/efl_ui_window_cnp_dnd_slave.c
@@ -0,0 +1,191 @@
+#define EFL_BETA_API_SUPPORT 1
+
+#include <Efl.h>
+#include <Efl_Ui.h>
+#include <Elementary.h>
+#include "efl_ui_grid_view.eo.h"
+
+static Ecore_Evas *ee;
+
+static Eina_Value
+_deliverty_cb(void *data, const Eina_Value value, const Eina_Future *dead_future EINA_UNUSED)
+{
+ Ecore_Evas_Selection_Buffer buffer = (intptr_t)data;
+ Eina_Content *content;
+
+ if (eina_value_type_get(&value) != EINA_VALUE_TYPE_CONTENT)
+ {
+ char *error = eina_value_to_string(&value);
+ printf("Value not a content, message: \"%s\"\n", error);
+ return EINA_VALUE_EMPTY;
+ }
+
+ content = eina_value_to_content(&value);
+ printf("Got Content of selection %d with type %s\n", buffer, eina_content_type_get(content));
+ if (eina_str_has_prefix(eina_content_type_get(content),"text"))
+ {
+ printf("Content: %s\n", (char*)eina_content_data_get(content).mem);
+ }
+
+ return EINA_VALUE_EMPTY;
+}
+
+static void
+_selection_changed(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection)
+{
+ printf("Selection %d of %p has changed\n", selection, ee);
+}
+
+static void
+_request_selection(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Ecore_Evas_Selection_Buffer selection)
+{
+ const char *types[] = {eina_stringshare_add("text/plain"), eina_stringshare_add("text/plain;charset=utf-8")};
+ printf("Selection %d of %p has changed\n", selection, ee);
+ Eina_Future *future = ecore_evas_selection_get(ee, 0, selection, EINA_C_ARRAY_ITERATOR_NEW(types));
+ eina_future_then(future, _deliverty_cb, .data = ((void*)(intptr_t)selection));
+}
+
+static void
+_motion_cb(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Position2D p)
+{
+ printf("Drag and Drop has moved on the window %p (%d, %d)\n", ee, p.x, p.y);
+}
+
+static void
+_enter_state_change_cb(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Position2D p, Eina_Bool inside)
+{
+ if (inside)
+ printf("Drag and Drop has entered the window %p (%d, %d)\n", ee, p.x, p.y);
+ else
+ printf("Drag and Drop has left the window %p (%d, %d)\n", ee, p.x, p.y);
+}
+
+static void
+_drop_cb(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Position2D p, const char *action EINA_UNUSED)
+{
+ const char *types[] = {eina_stringshare_add("text/plain")};
+ printf("Drag and Drop has droped on the window %p (%d, %d)\n", ee, p.x, p.y);
+ Eina_Future *f = ecore_evas_selection_get(ee, 0, ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER, EINA_C_ARRAY_ITERATOR_NEW(types));
+ eina_future_then(f, _deliverty_cb, .data = ((void*)(intptr_t)ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER));
+}
+
+static void
+_efl_ui_terminated(Ecore_Evas *ee EINA_UNUSED, unsigned int seat EINA_UNUSED, void *data, Eina_Bool accepted EINA_UNUSED)
+{
+ efl_del(data);
+}
+
+static Eo*
+_start_dnd(Ecore_Evas *ee)
+{
+ Ecore_Evas *ee2;
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL("This is sample content"), "text/plain");
+ Efl_Ui_Win *win;
+ Efl_Ui_Button *btn;
+
+ win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get());
+ ee2 = ecore_evas_ecore_evas_get(evas_object_evas_get(win));
+
+ btn = efl_add(EFL_UI_BUTTON_CLASS, win);
+ efl_text_set(btn, "Test");
+ efl_content_set(win, btn);
+
+ evas_object_geometry_set(win, 0, 0, 100, 100);
+
+ ecore_evas_drag_start(ee, 0, content, ee2, "copy", _efl_ui_terminated, win);
+
+ return win;
+}
+
+static void
+_start_op(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+ _start_dnd(data);
+}
+
+static Eina_Value
+_delete_cb(Eo *obj, void *data EINA_UNUSED, const Eina_Value value EINA_UNUSED)
+{
+ Ecore_Evas *ee ;
+ ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
+
+ ecore_evas_drag_cancel(ee, 0);
+
+ return EINA_VALUE_EMPTY;
+}
+
+static void
+_start_delayed_del_op(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+ _start_dnd(data);
+ efl_future_then(ev->object, efl_loop_timeout(efl_main_loop_get(), 2.0), _delete_cb);
+}
+
+EAPI_MAIN void
+efl_main(void *data EINA_UNUSED, const Efl_Event *ev)
+{
+ Efl_Ui_Textbox *txt, *win, *bx, *btn;
+ Efl_Loop_Arguments *args = ev->info;
+ char *goal;
+
+ win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get());
+ ee = ecore_evas_ecore_evas_get(evas_object_evas_get(win));
+
+ bx = efl_add(EFL_UI_BOX_CLASS, win);
+
+ txt = efl_add(EFL_UI_TEXTBOX_CLASS, win);
+ efl_text_set(txt, "Sample for CNP and DND interaction");
+ efl_pack_end(bx, txt);
+
+ btn = efl_add(EFL_UI_BUTTON_CLASS, win);
+ efl_gfx_hint_weight_set(btn, 1.0, 0.0);
+ efl_event_callback_add(btn, EFL_INPUT_EVENT_PRESSED, _start_op, ee);
+ efl_text_set(btn, "Start DND op");
+ efl_pack_end(bx, btn);
+
+ btn = efl_add(EFL_UI_BUTTON_CLASS, win);
+ efl_gfx_hint_weight_set(btn, 1.0, 0.0);
+ efl_event_callback_add(btn, EFL_INPUT_EVENT_PRESSED, _start_delayed_del_op, ee);
+ efl_text_set(btn, "Start DND op self destroy after 2 sec");
+ efl_pack_end(bx, btn);
+
+ efl_content_set(win, bx);
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(320, 320));
+
+ goal = eina_array_data_get(args->argv, 1);
+
+ if (eina_streq(goal, "--monitor"))
+ {
+ ecore_evas_callback_selection_changed_set(ee, _selection_changed);
+ ecore_evas_callback_drop_drop_set(ee, _drop_cb);
+ ecore_evas_callback_drop_motion_set(ee, _motion_cb);
+ ecore_evas_callback_drop_state_changed_set(ee, _enter_state_change_cb);
+ }
+ else if (eina_streq(goal, "--show-selections"))
+ {
+ ecore_evas_callback_selection_changed_set(ee, _request_selection);
+ }
+ else if (eina_streq(goal, "--set-selection"))
+ {
+ if (eina_array_count(args->argv) < 3)
+ {
+ printf("Error, --set-selection only requires exactly 1 keyword (The selection to set).\n");
+ return;
+ }
+ char *selection = eina_array_data_get(args->argv, 2);
+ Eina_Content *content = eina_content_new((Eina_Slice)EINA_SLICE_STR_FULL(selection), "text/plain");
+ ecore_evas_selection_set(ee, 0, ECORE_EVAS_SELECTION_BUFFER_COPY_AND_PASTE_BUFFER, content);
+ }
+ else if (eina_streq(goal, "--show-owner"))
+ {
+ for (int i = 0; i < ECORE_EVAS_SELECTION_BUFFER_LAST; ++i)
+ {
+ printf("Selection buffer %d : %d\n", i, ecore_evas_selection_exists(ee, 0, i));
+ }
+ }
+ else
+ {
+ printf("Error, goal %s not found\n", goal);
+ }
+}
+EFL_MAIN()
diff --git a/src/tests/elementary/elm_code_file_test_load.c b/src/tests/elementary/elm_code_file_test_load.c
index 31539e9666..44803ba77e 100644
--- a/src/tests/elementary/elm_code_file_test_load.c
+++ b/src/tests/elementary/elm_code_file_test_load.c
@@ -4,6 +4,10 @@
#include <libgen.h>
+#ifdef _WIN32
+# include <evil_private.h> /* realpath() */
+#endif
+
#include "elm_suite.h"
#include "Elementary.h"
diff --git a/src/tests/elementary/elm_code_test_basic.c b/src/tests/elementary/elm_code_test_basic.c
index 8d4012eef9..e264e62011 100644
--- a/src/tests/elementary/elm_code_test_basic.c
+++ b/src/tests/elementary/elm_code_test_basic.c
@@ -4,6 +4,10 @@
#include <stdlib.h>
+#ifdef _WIN32
+# include <evil_private.h> /* realpath() */
+#endif
+
#include "elm_suite.h"
#include "Elementary.h"
diff --git a/src/tests/elementary/elm_test_entry.c b/src/tests/elementary/elm_test_entry.c
index 1b383b2936..85ada68a49 100644
--- a/src/tests/elementary/elm_test_entry.c
+++ b/src/tests/elementary/elm_test_entry.c
@@ -155,28 +155,28 @@ EFL_START_TEST(elm_entry_atspi_text_string_get_char)
elm_object_text_set(entry, txt);
start = 1;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end, &val);
ck_assert_str_eq(val, "o");
ck_assert(start == 1);
ck_assert(end == 2);
if (val) free(val);
start = 8;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end, &val);
ck_assert_str_eq(val, "ś");
ck_assert(start == 8);
ck_assert(end == 9);
if (val) free(val);
start = 11;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end, &val);
ck_assert_str_eq(val, " ");
ck_assert(start == 11);
ck_assert(end == 12);
if (val) free(val);
start = 111;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_CHAR, &start, &end, &val);
ck_assert(start == -1);
ck_assert(end == -1);
ck_assert(val == NULL);
@@ -198,28 +198,28 @@ EFL_START_TEST(elm_entry_atspi_text_string_get_word)
elm_object_text_set(entry, txt);
start = 1;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end, &val);
ck_assert_str_eq(val, "Lorem");
ck_assert(start == 0);
ck_assert(end == 5);
if (val) free(val);
start = 6;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end, &val);
ck_assert_str_eq(val, "ipśum");
ck_assert(start == 6);
ck_assert(end == 11);
if (val) free(val);
start = 19;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end, &val);
ck_assert_str_eq(val, "dolor");
ck_assert(start == 14);
ck_assert(end == 19);
if (val) free(val);
start = 111;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end, &val);
ck_assert(start == -1);
ck_assert(end == -1);
ck_assert(val == NULL);
@@ -242,28 +242,28 @@ EFL_START_TEST(elm_entry_atspi_text_string_get_paragraph)
elm_object_text_set(entry, txt);
start = 1;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_PARAGRAPH, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_PARAGRAPH, &start, &end, &val);
ck_assert_str_eq(val, "Lorem ipśum");
ck_assert(start == 0);
ck_assert(end == 11);
if (val) free(val);
start = 20;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_PARAGRAPH, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_PARAGRAPH, &start, &end, &val);
ck_assert_str_eq(val, " dolor sit");
ck_assert(start == 12);
ck_assert(end == 24);
if (val) free(val);
start = 25;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_PARAGRAPH, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_PARAGRAPH, &start, &end, &val);
ck_assert_str_eq(val, " amęt");
ck_assert(start == 25);
ck_assert(end == 30);
if (val) free(val);
start = 111;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_WORD, &start, &end, &val);
ck_assert(start == -1);
ck_assert(end == -1);
ck_assert(val == NULL);
@@ -288,7 +288,7 @@ EFL_START_TEST(elm_entry_atspi_text_string_get_line)
elm_object_text_set(entry, txt);
start = 1;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_LINE, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_LINE, &start, &end, &val);
ck_assert_str_eq(val, "Lorem ipśum");
ck_assert(start == 0);
@@ -296,7 +296,7 @@ EFL_START_TEST(elm_entry_atspi_text_string_get_line)
if (val) free(val);
start = 13;
- val = efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_LINE, &start, &end);
+ efl_access_text_string_get(entry, EFL_ACCESS_TEXT_GRANULARITY_LINE, &start, &end, &val);
ck_assert_str_eq(val, " dolor sit amęt");
ck_assert(start == 12);
ck_assert(end == 29);
@@ -480,6 +480,26 @@ EFL_START_TEST(elm_entry_text_set)
}
EFL_END_TEST
+EFL_START_TEST(elm_entry_guide_text_set)
+{
+ Evas_Object *win, *entry;
+ const char *markup_text = "<font_size=32 color=#FFF>markup_test</font_size>";
+ const char *markup_text2 = "<font_size=24 color=#FFF>test_markup</font_size>";
+
+ win = win_add(NULL, "entry", ELM_WIN_BASIC);
+
+ entry = elm_entry_add(win);
+
+ elm_object_part_text_set(entry, "elm.guide", markup_text);
+ elm_entry_editable_set(entry, EINA_FALSE);
+ ck_assert_str_eq(elm_object_part_text_get(entry, "elm.guide"), markup_text);
+
+ elm_object_part_text_set(entry, "elm.guide", markup_text2);
+ elm_entry_single_line_set(entry, EINA_FALSE);
+ ck_assert_str_eq(elm_object_part_text_get(entry, "elm.guide"), markup_text2);
+}
+EFL_END_TEST
+
EFL_START_TEST(elm_entry_file_get_set)
{
Evas_Object *win, *entry;
@@ -518,6 +538,143 @@ EFL_START_TEST(elm_entry_file_get_set)
}
EFL_END_TEST
+EFL_START_TEST(elm_entry_test_text_class)
+{
+ Evas_Object *win, *entry1, *entry2, *entry3, *entry4;
+ const char *filename = NULL;
+ int w1 = 0, h1 = 0, w2 = 0, h2 = 0, w3 = 0, h3 = 0;
+ const char *font;
+ int font_size;
+
+ win = win_add(NULL, "entry", ELM_WIN_BASIC);
+ entry1 = elm_entry_add(win);
+ entry2 = elm_entry_add(win);
+ entry3 = elm_entry_add(win);
+
+ elm_object_text_set(entry1, "hello");
+ elm_object_text_set(entry2, "hello");
+ elm_object_text_set(entry3, "hello");
+
+ edje_object_file_get(elm_layout_edje_get(entry1), &filename, NULL);
+ ck_assert(filename != NULL);
+
+ ck_assert(edje_file_text_class_set(filename, "entry_text", "Serif:Style=Bold", 24));
+
+ ck_assert(edje_object_text_class_get(elm_layout_edje_get(entry1), "entry_text", &font, &font_size));
+ ck_assert_int_eq(font_size, 24);
+ ck_assert_str_eq(font, "Serif:Style=Bold");
+ ck_assert(edje_object_text_class_get(elm_layout_edje_get(entry2), "entry_text", &font, &font_size));
+ ck_assert_int_eq(font_size, 24);
+ ck_assert_str_eq(font, "Serif:Style=Bold");
+ ck_assert(edje_object_text_class_get(elm_layout_edje_get(entry3), "entry_text", &font, &font_size));
+ ck_assert_int_eq(font_size, 24);
+ ck_assert_str_eq(font, "Serif:Style=Bold");
+
+ evas_object_textblock_size_formatted_get(elm_entry_textblock_get(entry1), &w1, &h1);
+ evas_object_textblock_size_formatted_get(elm_entry_textblock_get(entry2), &w2, &h2);
+ evas_object_textblock_size_formatted_get(elm_entry_textblock_get(entry3), &w3, &h3);
+
+ ck_assert_int_eq(w1, w2);
+ ck_assert_int_eq(h1, h2);
+ ck_assert_int_eq(w2, w3);
+ ck_assert_int_eq(h2, h3);
+
+ ck_assert(edje_object_text_class_set(elm_layout_edje_get(entry1), "entry_text", "Sans", 50));
+ ck_assert(edje_object_text_class_set(elm_layout_edje_get(entry2), "entry_text", "Serif", 20));
+
+ ck_assert(edje_object_text_class_get(elm_layout_edje_get(entry1), "entry_text", &font, &font_size));
+ ck_assert_int_eq(font_size, 50);
+ ck_assert_str_eq(font, "Sans");
+ ck_assert(edje_object_text_class_get(elm_layout_edje_get(entry2), "entry_text", &font, &font_size));
+ ck_assert_int_eq(font_size, 20);
+ ck_assert_str_eq(font, "Serif");
+ ck_assert(edje_object_text_class_get(elm_layout_edje_get(entry3), "entry_text", &font, &font_size));
+ ck_assert_int_eq(font_size, 24);
+ ck_assert_str_eq(font, "Serif:Style=Bold");
+
+ evas_object_textblock_size_formatted_get(elm_entry_textblock_get(entry1), &w1, &h1);
+ evas_object_textblock_size_formatted_get(elm_entry_textblock_get(entry2), &w2, &h2);
+ evas_object_textblock_size_formatted_get(elm_entry_textblock_get(entry3), &w3, &h3);
+
+ ck_assert_int_ne(w1, w2);
+ ck_assert_int_ne(h1, h2);
+ ck_assert_int_ne(w2, w3);
+ ck_assert_int_ne(h2, h3);
+
+ entry4 = elm_entry_add(win);
+
+ elm_object_text_set(entry4, "hello");
+ ck_assert(edje_object_text_class_get(elm_layout_edje_get(entry4), "entry_text", &font, &font_size));
+ ck_assert_int_eq(font_size, 24);
+ ck_assert_str_eq(font, "Serif:Style=Bold");
+}
+EFL_END_TEST
+
+EFL_START_TEST(elm_entry_test_burmese)
+{
+ Evas_Object *win, *textblock;
+ Evas_Textblock_Style *style;
+ int w;
+
+ win = win_add(NULL, "entry", ELM_WIN_BASIC);
+ textblock = evas_object_textblock_add(win);
+
+ style = evas_textblock_style_new();
+ evas_textblock_style_set(style, "DEFAULT='font=arial font_size=20 color=red'");
+ evas_object_textblock_style_set(textblock, style);
+ evas_textblock_style_free(style);
+ style = NULL;
+
+ evas_object_textblock_text_markup_set(textblock, "\u1006\u200C\u1031\u200C\u1031\u200C\u1031");
+ evas_object_textblock_size_native_get(textblock, &w, NULL);
+ ck_assert_int_ne(w, 0);
+}
+EFL_END_TEST
+
+EFL_START_TEST(elm_entry_keycode)
+{
+ Evas_Object *win, *entry;
+
+ win = win_add(NULL, "entry", ELM_WIN_BASIC);
+ entry = elm_entry_add(win);
+ evas_object_show(entry);
+
+ elm_entry_entry_set(entry, "Hello World");
+ Evas *e = evas_object_evas_get(entry);
+ elm_object_focus_set(entry, EINA_TRUE);
+ evas_key_modifier_on(e, "Control");
+ evas_event_feed_key_down_with_keycode(e, "", "a", "", "", time(NULL), NULL, 38);
+ ecore_main_loop_iterate();
+ evas_event_feed_key_down(e, "BackSpace", "BackSpace", "\b", "\b", time(NULL), NULL);
+ ck_assert_str_eq(elm_object_text_get(entry), "");
+
+ evas_object_del(entry);
+ evas_object_del(win);
+}
+EFL_END_TEST
+
+EFL_START_TEST(elm_entry_textnodes_with_no_format)
+{
+ Evas_Object *win, *entry;
+
+ win = win_add(NULL, "entry", ELM_WIN_BASIC);
+ entry = elm_entry_add(win);
+ evas_object_show(entry);
+
+ elm_entry_entry_set(entry, "<br/><br/>");
+ Evas_Object *tb = elm_entry_textblock_get(entry);
+ Evas_Textblock_Cursor *c1 = evas_object_textblock_cursor_new(tb);
+ Evas_Textblock_Cursor *c2 = evas_object_textblock_cursor_new(tb);
+ evas_textblock_cursor_char_next(c2);
+ evas_textblock_cursor_range_delete(c1, c2);
+ elm_entry_cursor_pos_set(entry, 0);
+ ck_assert(elm_entry_cursor_down(entry));
+
+ evas_object_del(entry);
+ evas_object_del(win);
+}
+EFL_END_TEST
+
void elm_test_entry(TCase *tc)
{
tcase_add_test(tc, elm_entry_legacy_type_check);
@@ -533,6 +690,11 @@ void elm_test_entry(TCase *tc)
tcase_add_test(tc, elm_entry_atspi_text_selections);
tcase_add_test(tc, elm_atspi_role_get);
tcase_add_test(tc, elm_entry_text_set);
+ tcase_add_test(tc, elm_entry_guide_text_set);
tcase_add_test(tc, elm_entry_magnifier);
tcase_add_test(tc, elm_entry_file_get_set);
+ tcase_add_test(tc, elm_entry_test_text_class);
+ tcase_add_test(tc, elm_entry_test_burmese);
+ tcase_add_test(tc, elm_entry_keycode);
+ tcase_add_test(tc, elm_entry_textnodes_with_no_format);
}
diff --git a/src/tests/elementary/elm_test_hover.c b/src/tests/elementary/elm_test_hover.c
index de275216f2..323eb5c8d6 100644
--- a/src/tests/elementary/elm_test_hover.c
+++ b/src/tests/elementary/elm_test_hover.c
@@ -41,8 +41,56 @@ EFL_START_TEST(elm_atspi_role_get)
}
EFL_END_TEST
+EFL_START_TEST(elm_test_hover_behavior)
+{
+ Evas_Object *win, *hover, *target, *rect;
+ int count = 0;
+ int count_dismiss = 0;
+ int count_clicked = 0;
+
+ win = win_add(NULL, "hover", ELM_WIN_BASIC);
+ evas_object_resize(win, 100, 100);
+
+ hover = elm_hover_add(win);
+ evas_object_smart_callback_add(hover, "smart,changed", event_callback_that_increments_an_int_when_called, &count);
+ evas_object_smart_callback_add(hover, "dismissed", event_callback_single_call_int_data, &count_dismiss);
+ evas_object_smart_callback_add(hover, "clicked", event_callback_single_call_int_data, &count_clicked);
+
+ target = elm_box_add(win);
+
+ elm_hover_parent_set(hover, win);
+ elm_hover_target_set(hover, target);
+
+ rect = evas_object_rectangle_add(evas_object_evas_get(win));
+ evas_object_size_hint_min_set(rect, 20, 20);
+ evas_object_show(rect);
+ elm_object_part_content_set(hover, "smart", rect);
+
+ evas_object_move(target, 40, 40);
+ evas_object_show(win);
+ evas_object_show(hover);
+ get_me_to_those_events(hover);
+
+ /* 1 from setting content, 1 from moving target object */
+ ck_assert_int_eq(count, 2);
+
+ assert_object_size_eq(rect, 20, 20);
+ assert_object_size_eq(hover, 0, 0);
+ assert_object_pos_eq(hover, 40, 40);
+ /* using non-centered slot */
+ assert_object_pos_eq(rect, 40, 30);
+
+ elm_hover_dismiss(hover);
+ get_me_to_those_events(hover);
+ /* these are both triggered on dismiss */
+ ck_assert_int_eq(count_dismiss, 1);
+ ck_assert_int_eq(count_clicked, 1);
+}
+EFL_END_TEST
+
void elm_test_hover(TCase *tc)
{
tcase_add_test(tc, elm_hover_legacy_type_check);
tcase_add_test(tc, elm_atspi_role_get);
+ tcase_add_test(tc, elm_test_hover_behavior);
}
diff --git a/src/tests/elementary/elm_test_hoversel.c b/src/tests/elementary/elm_test_hoversel.c
index 91de6afee0..e00a073b09 100644
--- a/src/tests/elementary/elm_test_hoversel.c
+++ b/src/tests/elementary/elm_test_hoversel.c
@@ -6,6 +6,9 @@
#include <Elementary.h>
#include "elm_suite.h"
+#include "elm_priv.h"
+#include "elm_widget_hoversel.h"
+
EFL_START_TEST(elm_hoversel_legacy_type_check)
{
Evas_Object *win, *hoversel;
@@ -41,8 +44,115 @@ EFL_START_TEST(elm_atspi_role_get)
}
EFL_END_TEST
+EFL_START_TEST(elm_test_hoversel_behavior)
+{
+ Eo *hoversel, *win = win_add();
+ unsigned int i;
+ const char *callbacks[] =
+ {
+ "expanded",
+ "clicked",
+ "selected",
+ "item,focused",
+ "item,unfocused",
+ "dismissed",
+ };
+ int count[EINA_C_ARRAY_LENGTH(callbacks)] = {0};
+
+ evas_object_resize(win, 500, 500);
+ hoversel = elm_hoversel_add(win);
+ evas_object_geometry_set(hoversel, 25, 25, 50, 50);
+ elm_hoversel_hover_parent_set(hoversel, win);
+ elm_object_text_set(hoversel, "Vertical");
+ elm_hoversel_item_add(hoversel, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL);
+ elm_hoversel_item_add(hoversel, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL);
+ elm_hoversel_item_add(hoversel, "Item 3", NULL, ELM_ICON_NONE, NULL, NULL);
+ elm_hoversel_item_add(hoversel, "Item 4 - Long Label Here", "close", ELM_ICON_STANDARD, NULL, NULL);
+
+ evas_object_show(win);
+ evas_object_show(hoversel);
+ elm_object_focus_set(hoversel, EINA_TRUE);
+ for (i = 0; i < EINA_C_ARRAY_LENGTH(count); i++)
+ {
+ evas_object_smart_callback_add(hoversel, callbacks[i],
+ (void*)event_callback_single_call_int_data, &count[i]);
+ }
+ evas_object_smart_callback_add(hoversel, "dismissed",
+ (void*)event_callback_that_quits_the_main_loop_when_called, NULL);
+ get_me_to_those_events(win);
+ assert_object_size_eq(hoversel, 50, 50);
+ click_object(hoversel);
+ get_me_to_those_events(win);
+
+ /* expanded */
+ ck_assert_int_eq(count[0], 1);
+ wait_timer(0.6); // from default theme
+ ecore_main_loop_iterate();
+
+ ELM_HOVERSEL_DATA_GET(hoversel, sd);
+ click_object(eina_list_data_get(elm_box_children_get(sd->bx)));
+ get_me_to_those_events(win);
+
+ /* clicked */
+ ck_assert_int_eq(count[1], 1);
+ /* selected */
+ ck_assert_int_eq(count[2], 1);
+ /* item,focused */
+ ck_assert_int_eq(count[3], 1);
+ /* item,focused */
+ ck_assert_int_eq(count[4], 1);
+ ecore_main_loop_begin();
+
+ /* dismissed */
+ ck_assert_int_eq(count[5], 1);
+}
+EFL_END_TEST
+
+EFL_START_TEST(elm_test_hoversel_position)
+{
+ Eo *hoversel, *win = win_add();
+
+ evas_object_resize(win, 500, 500);
+ hoversel = elm_hoversel_add(win);
+ evas_object_geometry_set(hoversel, 450, 450, 50, 50);
+ elm_hoversel_hover_parent_set(hoversel, win);
+ elm_object_text_set(hoversel, "Vertical");
+ elm_hoversel_item_add(hoversel, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL);
+ elm_hoversel_item_add(hoversel, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL);
+ elm_hoversel_item_add(hoversel, "Item 3", NULL, ELM_ICON_NONE, NULL, NULL);
+ elm_hoversel_item_add(hoversel, "Item 4 - Long Label Here", "close", ELM_ICON_STANDARD, NULL, NULL);
+
+ evas_object_show(win);
+ evas_object_show(hoversel);
+ elm_object_focus_set(hoversel, EINA_TRUE);
+
+ get_me_to_those_events(win);
+ assert_object_size_eq(hoversel, 50, 50);
+ click_object(hoversel);
+ get_me_to_those_events(win);
+
+ wait_timer(0.6); // from default theme
+ ecore_main_loop_iterate();
+
+ ELM_HOVERSEL_DATA_GET(hoversel, sd);
+ {
+ int x, y, w, h;
+ Eo *item = eina_list_data_get(elm_box_children_get(sd->bx));
+ evas_object_geometry_get(item, &x, &y, &w, &h);
+
+ /* verify that all buttons are in-canvas */
+ ck_assert_int_le(x + w, 500);
+ ck_assert_int_le(y + h, 500);
+ }
+
+ evas_object_del(hoversel);
+}
+EFL_END_TEST
+
void elm_test_hoversel(TCase *tc)
{
tcase_add_test(tc, elm_hoversel_legacy_type_check);
tcase_add_test(tc, elm_atspi_role_get);
+ tcase_add_test(tc, elm_test_hoversel_behavior);
+ tcase_add_test(tc, elm_test_hoversel_position);
}
diff --git a/src/tests/elementary/elm_test_icon.c b/src/tests/elementary/elm_test_icon.c
index 517ace64a2..cf5329cc25 100644
--- a/src/tests/elementary/elm_test_icon.c
+++ b/src/tests/elementary/elm_test_icon.c
@@ -41,8 +41,34 @@ EFL_START_TEST(elm_atspi_role_get)
}
EFL_END_TEST
+EFL_START_TEST(elm_test_icon_set)
+{
+ Evas_Object *win, *image;
+ Eina_Bool ok;
+ const char *icon_name;
+
+ win = win_add(NULL, "icon", ELM_WIN_BASIC);
+
+ image = elm_icon_add(win);
+ evas_object_show(image);
+
+ ok = elm_icon_standard_set(image, "folder");
+ ck_assert(ok);
+ icon_name = elm_icon_standard_get(image);
+ ck_assert_str_eq(icon_name, "folder");
+
+ ok = elm_icon_standard_set(image, "None");
+ ck_assert(ok == 0);
+ icon_name = elm_icon_standard_get(image);
+ /* elm_icon only changes internal name on success */
+ ck_assert_str_eq(icon_name, "folder");
+
+}
+EFL_END_TEST
+
void elm_test_icon(TCase *tc)
{
tcase_add_test(tc, elm_icon_legacy_type_check);
tcase_add_test(tc, elm_atspi_role_get);
+ tcase_add_test(tc, elm_test_icon_set);
}
diff --git a/src/tests/elementary/elm_test_image.c b/src/tests/elementary/elm_test_image.c
index 6d6ff52f6f..25aac89a42 100644
--- a/src/tests/elementary/elm_test_image.c
+++ b/src/tests/elementary/elm_test_image.c
@@ -18,6 +18,34 @@ struct _Test_Data
int success;
};
+static int
+_file_to_memory(const char *filename, char **result)
+{
+ int size;
+ FILE *f;
+
+ f = fopen(filename, "rb");
+ if (f == NULL)
+ {
+ *result = NULL;
+ return -1;
+ }
+
+ fseek(f, 0, SEEK_END);
+ size = ftell(f);
+ fseek(f, 0, SEEK_SET);
+ *result = (char *)malloc(size + 1);
+ if ((size_t)size != fread(*result, sizeof(char), size, f))
+ {
+ free(*result);
+ fclose(f);
+ return -1;
+ }
+ fclose(f);
+ (*result)[size] = 0;
+ return size;
+}
+
EFL_START_TEST(elm_image_legacy_type_check)
{
Evas_Object *win, *image;
@@ -227,30 +255,109 @@ EFL_START_TEST(elm_image_evas_image_get)
}
EFL_END_TEST
-EFL_START_TEST(efl_ui_image_icon)
+EFL_START_TEST(elm_image_test_memfile_set)
+{
+ Evas_Object *win, *image, *image2;
+ char *mem;
+ int size;
+ const char *file = NULL;
+ int error_called = 0;
+
+ win = win_add(NULL, "image", ELM_WIN_BASIC);
+
+ image = elm_image_add(win);
+ ck_assert(elm_image_file_set(image, ELM_IMAGE_DATA_DIR"/images/icon_01.png", NULL));
+ size = _file_to_memory(ELM_IMAGE_DATA_DIR"/images/icon_02.png", &mem);
+ ck_assert_int_ge(size, 0);
+ ck_assert(elm_image_memfile_set(image, mem, size, "png", NULL));
+ elm_image_file_get(image, &file, NULL);
+ ck_assert_str_ne(file, ELM_IMAGE_DATA_DIR"/images/icon_01.png");
+ ck_assert(elm_image_file_set(image, ELM_IMAGE_DATA_DIR"/images/icon_01.png", NULL));
+ elm_image_file_get(image, &file, NULL);
+ ck_assert_str_eq(file, ELM_IMAGE_DATA_DIR"/images/icon_01.png");
+
+ image2 = elm_image_add(win);
+ evas_object_smart_callback_add(image2, "load,ready", event_callback_that_quits_the_main_loop_when_called, NULL);
+ evas_object_smart_callback_add(image2, "load,error", event_callback_single_call_int_data, &error_called);
+ ck_assert(elm_image_memfile_set(image2, mem, size, "png", NULL));
+ ck_assert_int_eq(error_called, 0);
+ ecore_main_loop_begin();
+
+ ck_assert_int_eq(error_called, 0);
+}
+EFL_END_TEST
+
+EFL_START_TEST(elm_image_test_scale_method)
{
Evas_Object *win, *image;
- Eina_Bool ok;
- const char *icon_name;
+ int w, h;
win = win_add(NULL, "image", ELM_WIN_BASIC);
+ evas_object_resize(win, 100, 100);
- image = efl_add(EFL_UI_IMAGE_CLASS, win);
+ image = elm_image_add(win);
+ ck_assert(elm_image_file_set(image, ELM_IMAGE_DATA_DIR"/images/logo.png", NULL));
+ evas_object_size_hint_align_set(image, 0.5, 0.0);
+ efl_gfx_image_scale_method_set(image, EFL_GFX_IMAGE_SCALE_METHOD_FIT_WIDTH);
+ evas_object_resize(image, 100, 100);
evas_object_show(image);
+ evas_object_show(win);
+ get_me_to_those_events(win);
+ evas_object_geometry_get(image, NULL, NULL, &w, &h);
+ ck_assert_int_eq(w, 100);
+ ck_assert_int_eq(h, 100);
+ evas_object_geometry_get(elm_image_object_get(image), NULL, NULL, &w, &h);
+ ck_assert_int_eq(w, 100);
+ ck_assert_int_eq(h, 100);
+}
+EFL_END_TEST
- ok = efl_ui_image_icon_set(image, "folder");
- ck_assert(ok);
- icon_name = efl_ui_image_icon_get(image);
- ck_assert_str_eq(icon_name, "folder");
+#ifdef BUILD_LOADER_GIF
+static void
+_test_render(void *data, Evas *e EINA_UNUSED, void *event_info)
+{
+ int *pass = data;
+ Evas_Event_Render_Post *ev = event_info;
+ *pass = eina_list_count(ev->updated_area);
+ ecore_main_loop_quit();
+}
+
+static void
+_test_preload(void *data, Evas *e, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+ if (evas_object_image_load_error_get(obj) == EVAS_LOAD_ERROR_NONE)
+ evas_event_callback_add(e, EVAS_CALLBACK_RENDER_POST, _test_render, data);
+ else
+ ecore_main_loop_quit();
+}
- ok = efl_ui_image_icon_set(image, "None");
- ck_assert(ok == 0);
- icon_name = efl_ui_image_icon_get(image);
- ck_assert(icon_name == NULL);
+EFL_START_TEST(elm_image_test_gif)
+{
+ Evas_Object *win, *image;
+ int pass = 0;
+
+ win = win_add(NULL, "image", ELM_WIN_BASIC);
+
+ image = elm_image_add(win);
+ evas_object_resize(win, 100, 100);
+ evas_object_resize(image, 100, 100);
+ evas_object_show(win);
+ evas_object_show(image);
+ get_me_to_those_events(win);
+ ck_assert(elm_image_file_set(image, ELM_IMAGE_DATA_DIR"/images/fire.gif", NULL));
+ elm_image_animated_set(image, EINA_TRUE);
+ elm_image_animated_play_set(image, EINA_TRUE);
+ evas_object_event_callback_add(elm_image_object_get(image), EVAS_CALLBACK_IMAGE_PRELOADED, _test_preload, &pass);
+ /* verify that we haven't tried to set a frame with index 0, as this is an error */
+ ck_assert_int_gt(evas_object_image_animated_frame_get(elm_image_object_get(image)), 0);
+ ecore_main_loop_begin();
+ ck_assert_int_gt(pass, 0);
}
EFL_END_TEST
+#endif
+
void elm_test_image(TCase *tc)
{
tcase_add_test(tc, elm_image_legacy_type_check);
@@ -259,5 +366,9 @@ void elm_test_image(TCase *tc)
tcase_add_test(tc, elm_image_async_mmap);
tcase_add_test(tc, elm_image_evas_object_color_set);
tcase_add_test(tc, elm_image_evas_image_get);
- tcase_add_test(tc, efl_ui_image_icon);
+ tcase_add_test(tc, elm_image_test_memfile_set);
+ tcase_add_test(tc, elm_image_test_scale_method);
+#ifdef BUILD_LOADER_GIF
+ tcase_add_test(tc, elm_image_test_gif);
+#endif
}
diff --git a/src/tests/elementary/elm_test_list.c b/src/tests/elementary/elm_test_list.c
index d15fb249f7..ab5b5ed20c 100644
--- a/src/tests/elementary/elm_test_list.c
+++ b/src/tests/elementary/elm_test_list.c
@@ -242,6 +242,100 @@ EFL_START_TEST(elm_atspi_children_parent)
}
EFL_END_TEST
+#define NUM_ITEMS 10
+EFL_START_TEST(elm_list_test_callbacks)
+{
+ Evas_Object *win, *list;
+ unsigned int i;
+ int count[NUM_ITEMS] = {0};
+ Elm_Object_Item *it;
+ int selected = 0, unselected = 0;
+ int highlighted = 0, unhighlighted = 0;
+
+ win = win_add(NULL, "list", ELM_WIN_BASIC);
+ evas_object_resize(win, 100, 100);
+
+ list = elm_list_add(win);
+ evas_object_smart_callback_add(list, "selected", (void*)event_callback_that_increments_an_int_when_called, &selected);
+ evas_object_smart_callback_add(list, "unselected", (void*)event_callback_that_increments_an_int_when_called, &unselected);
+ evas_object_smart_callback_add(list, "highlighted", (void*)event_callback_that_increments_an_int_when_called, &highlighted);
+ evas_object_smart_callback_add(list, "unhighlighted", (void*)event_callback_that_increments_an_int_when_called, &unhighlighted);
+ evas_object_resize(list, 100, 100);
+ for (i = 0; i < NUM_ITEMS; i++)
+ elm_list_item_append(list, "item", NULL, NULL, (void*)event_callback_single_call_int_data, &(count[i]));
+
+ elm_list_go(list);
+ evas_object_show(list);
+ evas_object_show(win);
+ get_me_to_those_events(win);
+
+ for (i = 0, it = elm_list_first_item_get(list); i < NUM_ITEMS; i++, it = elm_list_item_next(it))
+ {
+ elm_list_item_selected_set(it, EINA_TRUE);
+ ck_assert_int_eq(count[i], 1);
+
+ ck_assert_int_eq(selected, i + 1);
+ ck_assert_int_eq(unselected, i);
+
+ ck_assert_int_eq(highlighted, i + 1);
+ ck_assert_int_eq(unhighlighted, i);
+ }
+ ck_assert_int_eq(selected, 10);
+ ck_assert_int_eq(unselected, 9);
+
+ ck_assert_int_eq(highlighted, 10);
+ ck_assert_int_eq(unhighlighted, 9);
+
+ /* weird SIGILL in shutdown if the list isn't deleted here */
+ evas_object_del(list);
+}
+EFL_END_TEST
+
+static Eo *
+create_content_with_size(Eo *parent, int mw, int mh)
+{
+ Evas *e = evas_object_evas_get(parent);
+ Eo *rect = evas_object_rectangle_add(e);
+
+ evas_object_size_hint_min_set(rect, mw, mh);
+ evas_object_show(rect);
+
+ return rect;
+}
+
+EFL_START_TEST(elm_list_test_sizing)
+{
+ Evas_Object *win, *list;
+ unsigned int i;
+ int count[NUM_ITEMS] = {0};
+ Elm_Object_Item *it;
+
+ win = win_add(NULL, "list", ELM_WIN_BASIC);
+ evas_object_resize(win, 100, 100);
+
+ list = elm_list_add(win);
+ evas_object_resize(list, 100, 100);
+ for (i = 0; i < NUM_ITEMS; i++)
+ elm_list_item_append(list, "item", create_content_with_size(list, i * 5, i * 5), NULL, (void*)event_callback_single_call_int_data, &(count[i]));
+
+ elm_list_go(list);
+ evas_object_show(list);
+ evas_object_show(win);
+ get_me_to_those_events(win);
+
+ for (i = 0, it = elm_list_first_item_get(list); i < NUM_ITEMS; i++, it = elm_list_item_next(it))
+ {
+ Eo *rect = elm_object_item_content_get(it);
+ ck_assert(rect);
+ /* list is always homogeneous, so these should all have the size of the largest min size */
+ assert_object_size_eq(rect, (NUM_ITEMS - 1) * 5, (NUM_ITEMS - 1) * 5);
+ }
+
+ /* weird SIGILL in shutdown if the list isn't deleted here */
+ evas_object_del(list);
+}
+EFL_END_TEST
+
void elm_test_list(TCase *tc)
{
tcase_add_test(tc, elm_list_legacy_type_check);
@@ -256,4 +350,6 @@ void elm_test_list(TCase *tc)
tcase_add_test(tc, elm_list_atspi_selection_child_deselect);
#endif
tcase_add_test(tc, elm_atspi_children_parent);
+ tcase_add_test(tc, elm_list_test_callbacks);
+ tcase_add_test(tc, elm_list_test_sizing);
}
diff --git a/src/tests/elementary/elm_test_naviframe.c b/src/tests/elementary/elm_test_naviframe.c
index 01f5dfc011..4f1b6d29ae 100644
--- a/src/tests/elementary/elm_test_naviframe.c
+++ b/src/tests/elementary/elm_test_naviframe.c
@@ -110,10 +110,68 @@ EFL_START_TEST(elm_naviframe_test_content_preserve_on_pop)
}
EFL_END_TEST
+static Eo *
+create_content(Eo *parent)
+{
+ Eo *content = elm_layout_add(parent);
+
+ evas_object_size_hint_min_set(content, 50, 50);
+
+ return content;
+}
+
+#define NUM_ITEMS 10
+EFL_START_TEST(elm_naviframe_test_behavior)
+{
+ Evas_Object *win, *naviframe;
+ //int title_transition = 0;
+ int title_clicked = 0;
+ Elm_Object_Item *active_it = NULL;
+ Elm_Object_Item *it[NUM_ITEMS];
+ int i;
+
+ win = win_add(NULL, "naviframe", ELM_WIN_BASIC);
+ evas_object_resize(win, 500, 500);
+
+ naviframe = elm_naviframe_add(win);
+ //this seems broken beyond space and time
+ //evas_object_smart_callback_add(naviframe, "title,transition,finished", event_callback_single_call_int_data, &title_transition);
+ evas_object_smart_callback_add(naviframe, "title,clicked", event_callback_single_call_int_data, &title_clicked);
+ evas_object_smart_callback_add(naviframe, "transition,finished", event_callback_that_quits_the_main_loop_when_called, NULL);
+ evas_object_smart_callback_add(naviframe, "item,activated", smart_callback_that_stores_event_info_to_data, &active_it);
+ evas_object_resize(naviframe, 500, 500);
+ evas_object_show(naviframe);
+
+ for (i = 0; i < NUM_ITEMS; i++)
+ {
+ char buf[12];
+ snprintf(buf, sizeof(buf), "page%d", i);
+ it[i] = elm_naviframe_item_push(naviframe, buf, NULL, NULL, create_content(naviframe), NULL);
+ elm_naviframe_item_title_enabled_set(it[i], EINA_TRUE, EINA_TRUE);
+ }
+ ck_assert_ptr_eq(it[0], active_it);
+
+ evas_object_show(win);
+ get_me_to_those_events(win);
+
+ ecore_main_loop_begin();
+
+ ck_assert_ptr_eq(it[9], active_it);
+ click_part(naviframe, "elm.text.title");
+ get_me_to_those_events(win);
+ ck_assert_int_eq(title_clicked, 1);
+
+ click_part(naviframe, "elm.swallow.prev_btn");
+ ecore_main_loop_begin();
+ /* reaching this point verifies that the back button works */
+}
+EFL_END_TEST
+
void elm_test_naviframe(TCase *tc)
{
tcase_add_test(tc, elm_naviframe_test_legacy_type_check);
tcase_add_test(tc, elm_naviframe_test_atspi_role_get);
tcase_add_test(tc, elm_naviframe_test_content_preserve_on_pop);
+ tcase_add_test(tc, elm_naviframe_test_behavior);
}
diff --git a/src/tests/elementary/elm_test_slider.c b/src/tests/elementary/elm_test_slider.c
index 337b75444c..50f806994f 100644
--- a/src/tests/elementary/elm_test_slider.c
+++ b/src/tests/elementary/elm_test_slider.c
@@ -43,7 +43,7 @@ EFL_END_TEST
EFL_START_TEST(elm_slider_in_scroller)
{
- Evas_Object *win, *slider, *box, *scroller, *fslider;
+ Evas_Object *win, *slider, *box, *scroller, *fslider = NULL;
Evas *e;
win = win_add(NULL, "slider", ELM_WIN_BASIC);
diff --git a/src/tests/elementary/elm_test_spinner.c b/src/tests/elementary/elm_test_spinner.c
index 99c3696188..76ec9d34e4 100644
--- a/src/tests/elementary/elm_test_spinner.c
+++ b/src/tests/elementary/elm_test_spinner.c
@@ -65,11 +65,11 @@ EFL_START_TEST(elm_spinner_focus_next_object)
elm_object_focus_set(spinner, EINA_TRUE);
- elm_object_focus_next_object_set(spinner, btn, EFL_UI_FOCUS_DIRECTION_UP);
- o = elm_object_focus_next_object_get(spinner, EFL_UI_FOCUS_DIRECTION_UP);
+ elm_object_focus_next_object_set(spinner, btn, ELM_FOCUS_UP);
+ o = elm_object_focus_next_object_get(spinner, ELM_FOCUS_UP);
ck_assert_ptr_eq(o, btn);
- elm_object_focus_next(win, EFL_UI_FOCUS_DIRECTION_UP);
+ elm_object_focus_next(win, ELM_FOCUS_UP);
ck_assert_ptr_eq(elm_object_focused_object_get(win), btn);
}
EFL_END_TEST
diff --git a/src/tests/elementary/emoji_wink.json b/src/tests/elementary/emoji_wink.json
new file mode 100644
index 0000000000..29b39a5369
--- /dev/null
+++ b/src/tests/elementary/emoji_wink.json
@@ -0,0 +1 @@
+{"v":"4.5.7","fr":30,"ip":0,"op":60,"w":100,"h":100,"ddd":0,"assets":[{"id":"comp_38","layers":[{"ddd":0,"ind":0,"ty":4,"nm":"round_normal","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[50,50,0]},"a":{"a":0,"k":[-252,-412,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.673,0],[0,-17.673],[17.673,0],[0,17.673]],"o":[[17.673,0],[0,17.673],[-17.673,0],[0,-17.673]],"v":[[-252,-444],[-220,-412],[-252,-380],[-284,-412]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,0.88,0.59,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"mn":"ADBE Vector Group"}],"ip":0,"op":300,"st":0,"bm":0,"sr":1}]}],"layers":[{"ddd":0,"ind":0,"ty":4,"nm":"eyes_normal","parent":2,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[50,45.5,0]},"a":{"a":0,"k":[-252,-416.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.516,0.831,0.667],"y":[0.516,1,0.667]},"o":{"x":[0.75,0.705,0.333],"y":[0.75,0,0.333]},"n":["0p516_0p516_0p75_0p75","0p831_1_0p705_0","0p667_0p667_0p333_0p333"],"t":40,"s":[100,100,100],"e":[100,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[0.667,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0.333,0,0.333]},"n":["0p667_0p667_0p333_0p333","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":45,"s":[100,0,100],"e":[100,110,100]},{"i":{"x":[0.298,0.276,0.667],"y":[0.298,1,0.667]},"o":{"x":[0.038,0.105,0.333],"y":[0.038,0,0.333]},"n":["0p298_0p298_0p038_0p038","0p276_1_0p105_0","0p667_0p667_0p333_0p333"],"t":50,"s":[100,110,100],"e":[100,98,100]},{"i":{"x":[0.667,0.667,0.667],"y":[0.667,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0.333,0,0.333]},"n":["0p667_0p667_0p333_0p333","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":55,"s":[100,98,100],"e":[100,100,100]},{"t":60}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.313,"y":1},"o":{"x":0.467,"y":0},"n":"0p313_1_0p467_0","t":6,"s":[{"i":[[-1.933,0],[0,-1.933],[1.933,0],[0,1.933]],"o":[[1.933,0],[0,1.933],[-1.933,0],[0,-1.933]],"v":[[-237.5,-420],[-234,-416.5],[-237.5,-413],[-241,-416.5]],"c":true}],"e":[{"i":[[-1.933,0],[-0.312,-1.313],[1.933,0],[0,1.062]],"o":[[1.933,0],[0.174,0.732],[-1.933,0],[0,-1.25]],"v":[[-237.437,-418],[-231.25,-415.875],[-237.5,-416.938],[-243.188,-415.937]],"c":true}]},{"i":{"x":0.395,"y":1},"o":{"x":0.716,"y":0},"n":"0p395_1_0p716_0","t":16,"s":[{"i":[[-1.933,0],[-0.312,-1.313],[1.933,0],[0,1.062]],"o":[[1.933,0],[0.174,0.732],[-1.933,0],[0,-1.25]],"v":[[-237.437,-418],[-231.25,-415.875],[-237.5,-416.938],[-243.188,-415.937]],"c":true}],"e":[{"i":[[-1.933,0],[0,-1.933],[1.933,0],[0,1.933]],"o":[[1.933,0],[0,1.933],[-1.933,0],[0,-1.933]],"v":[[-237.5,-420],[-234,-416.5],[-237.5,-413],[-241,-416.5]],"c":true}]},{"t":29}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.933,0],[0,-1.933],[1.933,0],[0,1.933]],"o":[[1.933,0],[0,1.933],[-1.933,0],[0,-1.933]],"v":[[-266.5,-420],[-263,-416.5],[-266.5,-413],[-270,-416.5]],"c":true}},"nm":"Path 2","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.33,0.33,0.28,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"mn":"ADBE Vector Group"}],"ip":0,"op":61,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"mouth_smile","parent":2,"ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.25],"y":[1]},"o":{"x":[0.75],"y":[0]},"n":["0p25_1_0p75_0"],"t":4,"s":[0],"e":[-15]},{"i":{"x":[0.25],"y":[1]},"o":{"x":[0.75],"y":[0]},"n":["0p25_1_0p75_0"],"t":15,"s":[-15],"e":[0]},{"t":30}]},"p":{"a":0,"k":[50.862,57.489,0]},"a":{"a":0,"k":[-251.138,-404.511,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.292,"y":1},"o":{"x":0.506,"y":0},"n":"0p292_1_0p506_0","t":0,"s":[{"i":[[6.254,0],[2.91,1.715],[-0.616,0.558],[-0.707,-0.436],[-2.276,0],[-3.615,1.995],[-0.52,-0.71],[0.737,-0.384]],"o":[[-6.249,0],[-0.716,-0.422],[0.615,-0.558],[3.273,2.017],[2.662,0],[0.728,-0.402],[0.324,0.602],[-3.252,1.696]],"v":[[-252.006,-391.01],[-263.629,-394.434],[-263.522,-396.373],[-261.398,-396.454],[-252.006,-394.02],[-242.635,-396.433],[-240.261,-396.227],[-240.405,-394.414]],"c":true}],"e":[{"i":[[6.233,0],[4.195,4.639],[-0.616,0.558],[-0.558,-0.615],[-5.401,0],[-3.206,6.717],[-0.615,-0.557],[0.338,-0.759]],"o":[[-6.249,0],[-0.557,-0.616],[0.615,-0.558],[3.626,4.01],[4.636,0],[0.358,-0.75],[0.616,0.557],[-2.811,6.323]],"v":[[-252.044,-390.197],[-266.129,-396.746],[-266.022,-398.873],[-263.898,-398.767],[-252.076,-392.959],[-239.687,-401.031],[-237.564,-401.138],[-237.457,-399.012]],"c":true}]},{"i":{"x":0.564,"y":1},"o":{"x":0.571,"y":0},"n":"0p564_1_0p571_0","t":15,"s":[{"i":[[6.233,0],[4.195,4.639],[-0.616,0.558],[-0.558,-0.615],[-5.401,0],[-3.206,6.717],[-0.615,-0.557],[0.338,-0.759]],"o":[[-6.249,0],[-0.557,-0.616],[0.615,-0.558],[3.626,4.01],[4.636,0],[0.358,-0.75],[0.616,0.557],[-2.811,6.323]],"v":[[-252.044,-390.197],[-266.129,-396.746],[-266.022,-398.873],[-263.898,-398.767],[-252.076,-392.959],[-239.687,-401.031],[-237.564,-401.138],[-237.457,-399.012]],"c":true}],"e":[{"i":[[6.254,0],[2.91,1.715],[-0.616,0.558],[-0.707,-0.436],[-2.276,0],[-3.615,1.995],[-0.52,-0.71],[0.737,-0.384]],"o":[[-6.249,0],[-0.716,-0.422],[0.615,-0.558],[3.273,2.017],[2.662,0],[0.728,-0.402],[0.324,0.602],[-3.252,1.696]],"v":[[-252.006,-391.01],[-263.629,-394.434],[-263.522,-396.373],[-261.398,-396.454],[-252.006,-394.02],[-242.635,-396.433],[-240.261,-396.227],[-240.405,-394.414]],"c":true}]},{"i":{"x":0.681,"y":0.833},"o":{"x":0.546,"y":0},"n":"0p681_0p833_0p546_0","t":30,"s":[{"i":[[6.254,0],[2.91,1.715],[-0.616,0.558],[-0.707,-0.436],[-2.276,0],[-3.615,1.995],[-0.52,-0.71],[0.737,-0.384]],"o":[[-6.249,0],[-0.716,-0.422],[0.615,-0.558],[3.273,2.017],[2.662,0],[0.728,-0.402],[0.324,0.602],[-3.252,1.696]],"v":[[-252.006,-391.01],[-263.629,-394.434],[-263.522,-396.373],[-261.398,-396.454],[-252.006,-394.02],[-242.635,-396.433],[-240.261,-396.227],[-240.405,-394.414]],"c":true}],"e":[{"i":[[6.254,0],[2.91,1.715],[-0.616,0.558],[-0.734,-0.389],[-2.276,0],[-3.487,2.248],[-0.52,-0.71],[0.673,-0.488]],"o":[[-6.249,0],[-0.716,-0.422],[0.615,-0.558],[3.089,1.638],[2.662,0],[0.699,-0.451],[0.324,0.602],[-2.905,2.105]],"v":[[-252.006,-391.01],[-264.507,-394.555],[-264.401,-396.494],[-262.276,-396.576],[-252.006,-394.02],[-242.076,-396.998],[-239.702,-396.793],[-239.845,-394.98]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.497,"y":0.261},"n":"0p667_1_0p497_0p261","t":40,"s":[{"i":[[6.254,0],[2.91,1.715],[-0.616,0.558],[-0.734,-0.389],[-2.276,0],[-3.487,2.248],[-0.52,-0.71],[0.673,-0.488]],"o":[[-6.249,0],[-0.716,-0.422],[0.615,-0.558],[3.089,1.638],[2.662,0],[0.699,-0.451],[0.324,0.602],[-2.905,2.105]],"v":[[-252.006,-391.01],[-264.507,-394.555],[-264.401,-396.494],[-262.276,-396.576],[-252.006,-394.02],[-242.076,-396.998],[-239.702,-396.793],[-239.845,-394.98]],"c":true}],"e":[{"i":[[6.254,0],[2.91,1.715],[-0.616,0.558],[-0.707,-0.436],[-2.276,0],[-3.615,1.995],[-0.52,-0.71],[0.737,-0.384]],"o":[[-6.249,0],[-0.716,-0.422],[0.615,-0.558],[3.273,2.017],[2.662,0],[0.728,-0.402],[0.324,0.602],[-3.252,1.696]],"v":[[-252.006,-391.01],[-263.629,-394.434],[-263.522,-396.373],[-261.398,-396.454],[-252.006,-394.02],[-242.635,-396.433],[-240.261,-396.227],[-240.405,-394.414]],"c":true}]},{"t":60}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.33,0.33,0.28,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"mn":"ADBE Vector Group"}],"ip":0,"op":61,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":0,"nm":"base_normal","refId":"comp_38","ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.273],"y":[1]},"o":{"x":[0.464],"y":[0]},"n":["0p273_1_0p464_0"],"t":4,"s":[0],"e":[13]},{"i":{"x":[0.532],"y":[1]},"o":{"x":[0.578],"y":[0]},"n":["0p532_1_0p578_0"],"t":19,"s":[13],"e":[0]},{"t":40}]},"p":{"a":0,"k":[50,50,0]},"a":{"a":0,"k":[50,50,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"w":100,"h":100,"ip":0,"op":61,"st":0,"bm":0,"sr":1}]} \ No newline at end of file
diff --git a/src/tests/elementary/meson.build b/src/tests/elementary/meson.build
index 7c7c62fdac..273ee418dc 100644
--- a/src/tests/elementary/meson.build
+++ b/src/tests/elementary/meson.build
@@ -1,4 +1,7 @@
priv_eo_files = [
+ 'custom_gesture.eo',
+ 'custom_recognizer.eo',
+ 'custom_recognizer2.eo',
'focus_test.eo',
'focus_test_sub_main.eo',
'focus_manager_test.eo'
@@ -105,7 +108,7 @@ elementary_suite_src = [
elementary_suite = executable('elementary_suite',
elementary_suite_src,
- dependencies: [check, eina, elementary, elementary_deps],
+ dependencies: [check, eina, elementary, elementary_deps, intl],
include_directories : [config_dir] + [elementary_config_dir],
c_args : [
'-DTESTS_BUILD_DIR="'+meson.current_build_dir()+'"',
@@ -129,6 +132,7 @@ efl_ui_suite_src = [
'efl_ui_test_focus_common.h',
'efl_ui_test_focus.c',
'efl_ui_test_focus_sub.c',
+ 'efl_ui_test_gesture.c',
'efl_ui_test_box.c',
'efl_ui_test_box_flow.c',
'efl_ui_test_box_stack.c',
@@ -150,6 +154,7 @@ efl_ui_suite_src = [
'efl_ui_test_slider.c',
'efl_ui_test_collection_common.c',
'efl_ui_test_collection.c',
+ 'efl_ui_test_collection_view.c',
'efl_ui_test_list_collection.c',
'efl_ui_test_grid_collection.c',
'efl_ui_test_position_manager_common.c',
@@ -159,11 +164,15 @@ efl_ui_suite_src = [
'efl_ui_test_view_model.c',
'efl_ui_test_group_item.c',
'efl_ui_test_text.c',
+ 'efl_ui_test_vg_animation.c',
+ 'custom_gesture.c',
+ 'custom_recognizer.c',
+ 'custom_recognizer2.c',
]
efl_ui_suite = executable('efl_ui_suite',
efl_ui_suite_src, priv_eo_file_target,
- dependencies: [check, eina, elementary, elementary_deps],
+ dependencies: [check, eina, elementary, elementary_deps, intl],
include_directories : [config_dir] + [elementary_config_dir],
c_args : [
'-DTESTS_BUILD_DIR="'+meson.current_build_dir()+'"',
@@ -178,6 +187,11 @@ efl_ui_compile_test = executable('efl_ui_compile_test',
dependencies: [elementary, eio],
)
+executable('efl_ui_window_cnp_dnd_slave',
+ 'efl_ui_window_cnp_dnd_slave.c',
+ dependencies: [elementary],
+)
+
test('elementary-suite', elementary_suite,
env : test_env
)
diff --git a/src/tests/elementary/spec/efl_test_basics.c b/src/tests/elementary/spec/efl_test_basics.c
index b14e18a568..603c094ce0 100644
--- a/src/tests/elementary/spec/efl_test_basics.c
+++ b/src/tests/elementary/spec/efl_test_basics.c
@@ -45,11 +45,12 @@
"Efl.Ui.Timepicker",
"Efl.Ui.Navigation_Bar",
"Efl.Ui.Relative_Container",
- "Efl.Ui.Animation_View",
+ "Efl.Ui.Vg_Animation",
"Efl.Ui.Table",
"Efl.Ui.Flip",
"Efl.Ui.Stack",
- "Efl.Ui.Pager"
+ "Efl.Ui.Pager",
+ "Efl.Ui.Separator"
],
"custom-mapping" : {
"Efl.Ui.Grid" : "EFL_UI_GRID_DEFAULT_ITEM_CLASS",
@@ -66,7 +67,12 @@ EFL_START_TEST(no_leaking_canvas_object)
Eina_Iterator *iter = eo_objects_iterator_new();
Eo *obj;
- if (efl_isa(widget, EFL_UI_FLIP_CLASS)) return; //FIXME Flip needs more work for this. However, flip should be redone as a spotlight manager, When this is done, we can add these classes to the check here.
+ if (efl_isa(widget, EFL_UI_FLIP_CLASS))
+ {
+ //FIXME Flip needs more work for this. However, flip should be redone as a spotlight manager, When this is done, we can add these classes to the check here.
+ eina_iterator_free(iter);
+ return;
+ }
EINA_ITERATOR_FOREACH(iter, obj)
{
diff --git a/src/tests/elementary/spec/efl_test_gfx_arrangement.c b/src/tests/elementary/spec/efl_test_gfx_arrangement.c
index 7c0367b147..417a12bae5 100644
--- a/src/tests/elementary/spec/efl_test_gfx_arrangement.c
+++ b/src/tests/elementary/spec/efl_test_gfx_arrangement.c
@@ -18,8 +18,8 @@ EFL_START_TEST(pack_align)
double v, h; \
efl_gfx_arrangement_content_align_set(widget, H, V); \
efl_gfx_arrangement_content_align_get(widget, &h, &v); \
- ck_assert(v == rv); \
- ck_assert(h == rh); \
+ ck_assert(EINA_DBL_EQ(v, rv)); \
+ ck_assert(EINA_DBL_EQ(h, rh)); \
} while(0);
TUPLE_CHECK( 1.0, 1.0, 1.0, 1.0);
diff --git a/src/tests/elementary/spec/efl_test_gfx_view.c b/src/tests/elementary/spec/efl_test_gfx_view.c
index fc411138b6..e87419f283 100644
--- a/src/tests/elementary/spec/efl_test_gfx_view.c
+++ b/src/tests/elementary/spec/efl_test_gfx_view.c
@@ -8,7 +8,7 @@
/* spec-meta-start
{"test-interface":"Efl.Gfx.View",
- "test-widgets": ["Efl.Ui.Animation_View"]}
+ "test-widgets": ["Efl.Ui.Vg_Animation"]}
spec-meta-end */
EFL_START_TEST(view_size)
diff --git a/src/tests/elementary/spec/efl_test_range_display.c b/src/tests/elementary/spec/efl_test_range_display.c
index f072e02c10..49b1c769a3 100644
--- a/src/tests/elementary/spec/efl_test_range_display.c
+++ b/src/tests/elementary/spec/efl_test_range_display.c
@@ -19,12 +19,12 @@ EFL_START_TEST(value_setting_limits)
EXPECT_ERROR_START;
efl_ui_range_value_set(widget, -25.0);
EXPECT_ERROR_END;
- ck_assert(efl_ui_range_value_get(widget) == 10.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(widget), 10.0));
EXPECT_ERROR_START;
efl_ui_range_value_set(widget, 25.0);
EXPECT_ERROR_END;
- ck_assert(efl_ui_range_value_get(widget) == 10.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(widget), 10.0));
}
EFL_END_TEST
@@ -34,38 +34,38 @@ EFL_START_TEST(limit_setting)
efl_ui_range_limits_set(widget, -20.0, 20.0);
efl_ui_range_limits_get(widget, &min, &max);
- ck_assert(min == -20.0);
- ck_assert(max == 20.0);
+ ck_assert(EINA_DBL_EQ(min, -20.0));
+ ck_assert(EINA_DBL_EQ(max, 20.0));
EXPECT_ERROR_START;
efl_ui_range_limits_set(widget, -20.0, -20.0);
EXPECT_ERROR_END;
efl_ui_range_limits_get(widget, &min, &max);
- ck_assert(min == -20.0);
- ck_assert(max == 20.0);
+ ck_assert(EINA_DBL_EQ(min, -20.0));
+ ck_assert(EINA_DBL_EQ(max, 20.0));
EXPECT_ERROR_START;
efl_ui_range_limits_set(widget, 2.0, -20.0);
EXPECT_ERROR_END;
efl_ui_range_limits_get(widget, &min, &max);
- ck_assert(min == -20.0);
- ck_assert(max == 20.0);
+ ck_assert(EINA_DBL_EQ(min, -20.0));
+ ck_assert(EINA_DBL_EQ(max, 20.0));
EXPECT_ERROR_START;
efl_ui_range_limits_set(widget, 25.0, 20.0);
EXPECT_ERROR_END;
efl_ui_range_limits_get(widget, &min, &max);
- ck_assert(min == -20.0);
- ck_assert(max == 20.0);
+ ck_assert(EINA_DBL_EQ(min, -20.0));
+ ck_assert(EINA_DBL_EQ(max, 20.0));
efl_ui_range_limits_set(widget, -25.0, -20.0);
efl_ui_range_limits_get(widget, &min, &max);
- ck_assert(min == -25.0);
- ck_assert(max == -20.0);
+ ck_assert(EINA_DBL_EQ(min, -25.0));
+ ck_assert(EINA_DBL_EQ(max, -20.0));
efl_ui_range_limits_set(widget, 20.0, 25.0);
efl_ui_range_limits_get(widget, &min, &max);
- ck_assert(min == 20.0);
- ck_assert(max == 25.0);
+ ck_assert(EINA_DBL_EQ(min, 20.0));
+ ck_assert(EINA_DBL_EQ(max, 25.0));
}
EFL_END_TEST
@@ -76,7 +76,7 @@ EFL_START_TEST(value_setting)
for (i = -20.0; i <= 20.0; ++i)
{
efl_ui_range_value_set(widget, i);
- ck_assert(efl_ui_range_value_get(widget) == i);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(widget), i));
}
}
EFL_END_TEST
@@ -124,6 +124,10 @@ EFL_START_TEST (range_display_value_events)
changed = EINA_FALSE;
min_reached = EINA_FALSE;
max_reached = EINA_FALSE;
+ efl_event_callback_del(widget, EFL_UI_RANGE_EVENT_CHANGED, _set_flag, &changed);
+ efl_event_callback_del(widget, EFL_UI_RANGE_EVENT_MIN_REACHED, _set_flag, &min_reached);
+ efl_event_callback_del(widget, EFL_UI_RANGE_EVENT_MAX_REACHED, _set_flag, &max_reached);
+
}
EFL_END_TEST
diff --git a/src/tests/elementary/spec/efl_test_range_interactive.c b/src/tests/elementary/spec/efl_test_range_interactive.c
index c900524120..76b266dab0 100644
--- a/src/tests/elementary/spec/efl_test_range_interactive.c
+++ b/src/tests/elementary/spec/efl_test_range_interactive.c
@@ -16,18 +16,18 @@
EFL_START_TEST(step_setting)
{
efl_ui_range_step_set(widget, 20.0);
- ck_assert(efl_ui_range_step_get(widget) == 20.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_step_get(widget), 20.0));
efl_ui_range_step_set(widget, 100.0);
- ck_assert(efl_ui_range_step_get(widget) == 100.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_step_get(widget), 100.0));
EXPECT_ERROR_START;
efl_ui_range_step_set(widget, 0.0);
- ck_assert(efl_ui_range_step_get(widget) == 100.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_step_get(widget), 100.0));
EXPECT_ERROR_END;
EXPECT_ERROR_START;
efl_ui_range_step_set(widget, -20.0);
- ck_assert(efl_ui_range_step_get(widget) == 100.0);
+ ck_assert(EINA_DBL_EQ(efl_ui_range_step_get(widget), 100.0));
EXPECT_ERROR_END;
}
EFL_END_TEST
diff --git a/src/tests/elementary/spec/efl_ui_spec_suite.c b/src/tests/elementary/spec/efl_ui_spec_suite.c
index d59072b51e..49ca5a993f 100644
--- a/src/tests/elementary/spec/efl_ui_spec_suite.c
+++ b/src/tests/elementary/spec/efl_ui_spec_suite.c
@@ -13,8 +13,8 @@ Evas_Object *widget = NULL;
Eo *collection_grid = NULL;
const Efl_Class *test_content_klass = NULL;
const Efl_Class *widget_klass = NULL;
-EFL_CLASS_SIMPLE_CLASS(efl_ui_widget, "efl_ui_widget", EFL_UI_WIDGET_CLASS);
-EFL_CLASS_SIMPLE_CLASS(efl_ui_item, "efl_ui_item", EFL_UI_ITEM_CLASS);
+EFL_CLASS_SIMPLE_CLASS(efl_ui_widget, "Efl.Ui.Widget", EFL_UI_WIDGET_CLASS);
+EFL_CLASS_SIMPLE_CLASS(efl_ui_item, "Efl.Ui.Item", EFL_UI_ITEM_CLASS);
#define EFL_UI_ITEM_REALIZED_CLASS efl_ui_item_realized_class_get()
diff --git a/src/tests/elementary/suite_helpers.c b/src/tests/elementary/suite_helpers.c
index 53c473a9fa..62fe6deb77 100644
--- a/src/tests/elementary/suite_helpers.c
+++ b/src/tests/elementary/suite_helpers.c
@@ -19,6 +19,7 @@ static Eina_Bool buffer = EINA_FALSE;
static Eina_Bool legacy_mode = EINA_FALSE;
static int log_abort;
static int log_abort_level;
+static unsigned int ts = 1;
Eina_Bool abort_on_warnings = EINA_FALSE;
@@ -50,6 +51,7 @@ _elm2_suite_init(void)
ck_assert_int_eq(elm_init(1, args), 1);
if (abort_on_warnings)
fail_on_errors_setup();
+ ts = 1;
}
void
@@ -142,6 +144,20 @@ real_timer_add(double in, Ecore_Task_Cb cb, void *data)
return ecore_timer_add(in, cb, data);
}
+static Eina_Bool
+_timer_quit()
+{
+ ecore_main_loop_quit();
+ return EINA_FALSE;
+}
+
+void
+wait_timer(double in)
+{
+ ecore_timer_add(in, _timer_quit, NULL);
+ ecore_main_loop_begin();
+}
+
static void
_win_manual_render(void *data, const Efl_Event *event EINA_UNUSED)
{
@@ -150,7 +166,7 @@ _win_manual_render(void *data, const Efl_Event *event EINA_UNUSED)
ecore_loop_time_set(t + LOOP_INCREMENT);
ecore_animator_custom_tick();
ecore_evas_render_prepare(ecore_evas_ecore_evas_get(evas_object_evas_get(data)));
- evas_norender(evas_object_evas_get(data));
+ evas_norender_with_updates(evas_object_evas_get(data));
}
static void
@@ -320,7 +336,7 @@ suite_setup(Eina_Bool legacy)
failed_count = _efl_suite_build_and_run(0, NULL,
"Efl_Ui_Init", ui_init, NULL, NULL);
- failed_count += !elm_init(1, (char*[]){"exe"});
+ failed_count += !elm_init(1, args);
if (buffer)
{
global_win = _elm_suite_win_create();
@@ -450,29 +466,42 @@ attempt_to_find_the_right_point_for_mouse_positioning(Eo *obj, int dir)
}
static void
-click_object_internal(Eo *obj, int dir, int flags)
+click_object_internal(Eo *obj, int dir, int flags, Eina_Bool up)
{
Evas *e = evas_object_evas_get(obj);
Eina_Position2D pos = attempt_to_find_the_right_point_for_mouse_positioning(obj, dir);
- evas_event_feed_mouse_move(e, pos.x, pos.y, 0, NULL);
- evas_event_feed_mouse_down(e, 1, flags, 0, NULL);
- evas_event_feed_mouse_up(e, 1, 0, 0, NULL);
+ evas_event_feed_mouse_move(e, pos.x, pos.y, ts++, NULL);
+ evas_event_feed_mouse_down(e, 1, flags, ts++, NULL);
+ if (up)
+ evas_event_feed_mouse_up(e, 1, 0, ts++, NULL);
}
void
click_object(Eo *obj)
{
- click_object_internal(obj, NONE, 0);
+ click_object_internal(obj, NONE, 0, EINA_TRUE);
+}
+
+void
+press_object(Eo *obj)
+{
+ click_object_internal(obj, NONE, 0, EINA_FALSE);
}
void
click_object_flags(Eo *obj, int flags)
{
- click_object_internal(obj, NONE, flags);
+ click_object_internal(obj, NONE, flags, EINA_TRUE);
}
void
-click_part_flags(Eo *obj, const char *part, int flags)
+press_object_flags(Eo *obj, int flags)
+{
+ click_object_internal(obj, NONE, flags, EINA_FALSE);
+}
+
+static void
+click_part_flags_internal(Eo *obj, const char *part, int flags, Eina_Bool up)
{
Efl_Part *part_obj = efl_ref(efl_part(obj, part));
Eo *content;
@@ -492,19 +521,39 @@ click_part_flags(Eo *obj, const char *part, int flags)
else if (strstr(part, "bottom"))
dir |= BOTTOM;
}
- click_object_internal(content, dir, flags);
+ click_object_internal(content, dir, flags, up);
if (efl_isa(content, EFL_LAYOUT_SIGNAL_INTERFACE))
edje_object_message_signal_process(content);
- edje_object_message_signal_process(obj);
+ /* can be false if obj is an elm_widget_item */
+ if (efl_isa(obj, EFL_LAYOUT_SIGNAL_INTERFACE))
+ edje_object_message_signal_process(obj);
efl_unref(part_obj);
}
void
+click_part_flags(Eo *obj, const char *part, int flags)
+{
+ click_part_flags_internal(obj, part, flags, EINA_TRUE);
+}
+
+void
+press_part_flags(Eo *obj, const char *part, int flags)
+{
+ click_part_flags_internal(obj, part, flags, EINA_FALSE);
+}
+
+void
click_part(Eo *obj, const char *part)
{
click_part_flags(obj, part, 0);
}
+void
+press_part(Eo *obj, const char *part)
+{
+ press_part_flags(obj, part, 0);
+}
+
static void
wheel_object_internal(Eo *obj, int dir, Eina_Bool horiz, Eina_Bool down)
{
@@ -551,6 +600,7 @@ event_callback_single_call_int_data(void *data, Evas_Object *obj EINA_UNUSED, vo
{
int *called = data;
+ if (*called) fprintf(stderr, "TEST FAILURE IN %s\n", __func__);
ck_assert_int_eq(*called, 0);
*called = 1;
}
@@ -570,21 +620,88 @@ event_callback_that_quits_the_main_loop_when_called()
}
void
+smart_callback_that_stores_event_info_to_data(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+ void **real_data = data;
+
+ *real_data = event_info;
+}
+
+void
click_object_at(Eo *obj, int x, int y)
{
Evas *e = evas_object_evas_get(obj);
- evas_event_feed_mouse_move(e, x, y, 0, NULL);
- evas_event_feed_mouse_down(e, 1, 0, 0, NULL);
- evas_event_feed_mouse_up(e, 1, 0, 0, NULL);
+ evas_event_feed_mouse_move(e, x, y, ts++, NULL);
+ evas_event_feed_mouse_down(e, 1, 0, ts++, NULL);
+ evas_event_feed_mouse_up(e, 1, 0, ts++, NULL);
+}
+
+void
+multi_click_object(Eo *obj, int ids)
+{
+ Evas *e = evas_object_evas_get(obj);
+ Eina_Position2D pos = attempt_to_find_the_right_point_for_mouse_positioning(obj, NONE);
+ for (int i = 0; i < ids; i++)
+ evas_event_feed_multi_down(e, i, pos.x + i, pos.y + i, 1, 1, 1, 1, 0, pos.x + i, pos.y + i, 0, ts, NULL);
+ ts++;
+ for (int i = 0; i < ids; i++)
+ evas_event_feed_multi_up(e, i, pos.x + i, pos.y + i, 1, 1, 1, 1, 0, pos.x + i, pos.y + i, 0, ts, NULL);
+}
+
+void
+multi_press_object(Eo *obj, int ids)
+{
+ Evas *e = evas_object_evas_get(obj);
+ Eina_Position2D pos = attempt_to_find_the_right_point_for_mouse_positioning(obj, NONE);
+ for (int i = 0; i < ids; i++)
+ evas_event_feed_multi_down(e, i, pos.x + i, pos.y + i, 1, 1, 1, 1, 0, pos.x + i, pos.y + i, 0, ts, NULL);
+ ts++;
+}
+
+void
+multi_click_object_at(Eo *obj, int x, int y, int ids)
+{
+ Evas *e = evas_object_evas_get(obj);
+ for (int i = 0; i < ids; i++)
+ evas_event_feed_multi_down(e, i, x + i, y + i, 1, 1, 1, 1, 0, x + i, y + i, 0, ts, NULL);
+ ts++;
+ for (int i = 0; i < ids; i++)
+ evas_event_feed_multi_up(e, i, x + i, y + i, 1, 1, 1, 1, 0, x + i, y + i, 0, ts, NULL);
+ ts++;
+}
+
+void
+press_object_at(Eo *obj, int x, int y)
+{
+ Evas *e = evas_object_evas_get(obj);
+ evas_event_feed_mouse_move(e, x, y, ts++, NULL);
+ evas_event_feed_mouse_down(e, 1, 0, ts++, NULL);
+}
+
+void
+multi_press_object_at(Eo *obj, int x, int y, int ids)
+{
+ Evas *e = evas_object_evas_get(obj);
+ for (int i = 0; i < ids; i++)
+ evas_event_feed_multi_down(e, i, x + i, y + i, 1, 1, 1, 1, 0, x + i, y + i, 0, ts, NULL);
+ ts++;
}
void
click_object_at_flags(Eo *obj, int x, int y, int flags)
{
Evas *e = evas_object_evas_get(obj);
- evas_event_feed_mouse_move(e, x, y, 0, NULL);
- evas_event_feed_mouse_down(e, 1, flags, 0, NULL);
- evas_event_feed_mouse_up(e, 1, 0, 0, NULL);
+ evas_event_feed_mouse_move(e, x, y, ts++, NULL);
+ evas_event_feed_mouse_down(e, 1, flags, ts++, NULL);
+ evas_event_feed_mouse_up(e, 1, 0, ts++, NULL);
+}
+
+void
+press_object_at_flags(Eo *obj, int x, int y, int flags)
+{
+ Evas *e = evas_object_evas_get(obj);
+ evas_event_feed_mouse_move(e, x, y, ts++, NULL);
+ evas_event_feed_mouse_down(e, 1, flags, ts++, NULL);
}
void
@@ -600,8 +717,8 @@ drag_object(Eo *obj, int x, int y, int dx, int dy, Eina_Bool iterate)
{
Evas *e = evas_object_evas_get(obj);
int i;
- evas_event_feed_mouse_move(e, x, y, 0, NULL);
- evas_event_feed_mouse_down(e, 1, 0, 0, NULL);
+ evas_event_feed_mouse_move(e, x, y, ts++, NULL);
+ evas_event_feed_mouse_down(e, 1, 0, ts++, NULL);
if (iterate)
{
/* iterate twice to trigger timers */
@@ -611,10 +728,112 @@ drag_object(Eo *obj, int x, int y, int dx, int dy, Eina_Bool iterate)
/* create DRAG_OBJECT_NUM_MOVES move events distinct from up/down */
for (i = 0; i < DRAG_OBJECT_NUM_MOVES; i++)
{
- evas_event_feed_mouse_move(e, x + (i * dx / DRAG_OBJECT_NUM_MOVES), y + (i * dy / DRAG_OBJECT_NUM_MOVES), 0, NULL);
+ evas_event_feed_mouse_move(e, x + (i * dx / DRAG_OBJECT_NUM_MOVES), y + (i * dy / DRAG_OBJECT_NUM_MOVES), ts++, NULL);
/* also trigger smart calc if we're iterating just in case that's important */
evas_smart_objects_calculate(e);
}
- evas_event_feed_mouse_move(e, x + dx, y + dy, 0, NULL);
- evas_event_feed_mouse_up(e, 1, 0, 0, NULL);
+ evas_event_feed_mouse_move(e, x + dx, y + dy, ts++, NULL);
+ evas_event_feed_mouse_up(e, 1, 0, ts++, NULL);
+}
+
+int
+drag_object_around(Eo *obj, int cx, int cy, int radius, int degrees)
+{
+ Evas *e = evas_object_evas_get(obj);
+ /* clamp num mouse moves to a vaguely sane value */
+ int i, num = MIN(abs(degrees), DRAG_OBJECT_AROUND_NUM_MOVES);
+ int last_x = round(cx + radius);
+ int last_y = round(cy);
+ /* start at 0 degrees */
+ evas_event_feed_mouse_move(e, last_x, last_y, ts++, NULL);
+ evas_event_feed_mouse_down(e, 1, 0, ts++, NULL);
+ for (i = 1; i < num; i++)
+ {
+ /* x = cx + r * cos(a), y = cy + r * sin(a) */
+ int ax, ay;
+ /* each iteration is 1 degree */
+ double angle = (i * (degrees / DRAG_OBJECT_AROUND_NUM_MOVES)) * M_PI / 180.0;
+ ax = round(cx + radius * cos(angle));
+ ay = round(cy + radius * sin(angle));
+ if ((ax == last_x) && (ay == last_y)) continue;
+ evas_event_feed_mouse_move(e, ax, ay, ts++, NULL);
+ last_x = ax, last_y = ay;
+ }
+ evas_event_feed_mouse_up(e, 1, 0, ts++, NULL);
+ /* only count arc motion: subtract initial move, mouse down, mouse up */
+ return num;
+}
+
+int
+multi_drag_object_around(Eo *obj, int touch_point, int cx, int cy, int radius, int degrees)
+{
+ Evas *e = evas_object_evas_get(obj);
+ /* clamp num mouse moves to a vaguely sane value */
+ int i, num = MIN(abs(degrees), DRAG_OBJECT_AROUND_NUM_MOVES);
+ int last_x = round(cx + radius);
+ int last_y = round(cy);
+ /* start at 0 degrees */
+ evas_event_feed_multi_down(e, touch_point, last_x, last_y, 1, 1, 1, 1, 0, last_x, last_y, 0, ts++, NULL);
+ for (i = 1; i < num; i++)
+ {
+ /* x = cx + r * cos(a), y = cy + r * sin(a) */
+ int ax, ay;
+ /* each iteration is 1 degree */
+ double angle = (i * (degrees / DRAG_OBJECT_AROUND_NUM_MOVES)) * M_PI / 180.0;
+ ax = round(cx + radius * cos(angle));
+ ay = round(cy + radius * sin(angle));
+ if ((ax == last_x) && (ay == last_y)) continue;
+ evas_event_feed_multi_move(e, touch_point, ax, ay, 1, 1, 1, 1, 0, ax, ay, ts++, NULL);
+ last_x = ax, last_y = ay;
+ }
+ evas_event_feed_multi_up(e, touch_point, last_x, last_y, 1, 1, 1, 1, 0, last_x, last_y, 0, ts++, NULL);
+ /* only count arc motion: subtract initial move, mouse down, mouse up */
+ return num;
+}
+
+int
+pinch_object(Eo *obj, int x, int y, int x2, int y2, int dx, int dy, int dx2, int dy2)
+{
+ Evas *e = evas_object_evas_get(obj);
+ int i, idx, idy, idx2, idy2;
+ idx = idy = idx2 = idy2 = 0;
+ evas_event_feed_multi_down(e, 0, x, y, 1, 1, 1, 1, 0, x, y, 0, ts, NULL);
+ evas_event_feed_multi_down(e, 1, x2, y2, 1, 1, 1, 1, 0, x2, y2, 0, ts++, NULL);
+ for (i = 1; i < abs(dx); i++)
+ {
+ idx = (i * dx / abs(dx));
+ idy = (i * dy / abs(dx));
+ idx2 = (i * dx2 / abs(dx));
+ idy2 = (i * dy2 / abs(dx));
+ /* move first point along positive vector */
+ evas_event_feed_multi_move(e, 0, x + idx, y + idy, 1, 1, 1, 1, 0, x + idx, y + idy, ts, NULL);
+ /* move second point along negative vector */
+ evas_event_feed_multi_move(e, 1, x2 + idx2, y2 + idy2, 1, 1, 1, 1, 0, x2 + idx2, y2 + idy2, ts++, NULL);
+ /* also trigger smart calc if we're iterating just in case that's important */
+ evas_smart_objects_calculate(e);
+ }
+ evas_event_feed_multi_up(e, 0, x + idx, y + idy, 1, 1, 1, 1, 0, x + idx, y + idy, 0, ts, NULL);
+ evas_event_feed_multi_up(e, 1, x2 + idx2, y2 + idy2, 1, 1, 1, 1, 0, x2 + idx2, y2 + idy2, 0, ts++, NULL);
+ return i - 2;
+}
+
+void
+write_key_sequence(Eo *obj, const char *seqence)
+{
+ Evas *e = evas_object_evas_get(obj);
+ for (unsigned int i = 0; i < strlen(seqence); ++i)
+ {
+ const char part_seq[] = {seqence[i], '\0'};
+
+ evas_event_feed_key_down(e, part_seq, part_seq, part_seq, part_seq, 0, NULL);
+ ecore_main_loop_iterate();
+ evas_event_feed_key_up(e, part_seq, part_seq, part_seq, part_seq, 0, NULL);
+ ecore_main_loop_iterate();
+ }
+}
+
+void
+force_render(Eo *win)
+{
+ _win_manual_render(win, NULL);
}
diff --git a/src/tests/elementary/suite_helpers.h b/src/tests/elementary/suite_helpers.h
index 40c8dec12b..7e5a0ad105 100644
--- a/src/tests/elementary/suite_helpers.h
+++ b/src/tests/elementary/suite_helpers.h
@@ -4,11 +4,13 @@
#include <Evas.h>
#define DRAG_OBJECT_NUM_MOVES 4
+#define DRAG_OBJECT_AROUND_NUM_MOVES 60
int suite_setup(Eina_Bool legacy);
void _elm2_suite_init(void);
void _elm_suite_shutdown(void);
void *real_timer_add(double in, Ecore_Task_Cb cb, void *data);
+void wait_timer(double in);
void fail_on_errors_teardown(void);
void fail_on_errors_setup(void);
Eina_Bool is_forked(void);
@@ -22,11 +24,58 @@ void click_part(Eo *obj, const char *part);
void click_part_flags(Eo *obj, const char *part, int flags);
void click_object_at(Eo *obj, int x, int y);
void click_object_at_flags(Eo *obj, int x, int y, int flags);
+void press_object(Eo *obj);
+void press_object_flags(Eo *obj, int flags);
+void press_part(Eo *obj, const char *part);
+void press_part_flags(Eo *obj, const char *part, int flags);
+void press_object_at(Eo *obj, int x, int y);
+void press_object_at_flags(Eo *obj, int x, int y, int flags);
+void multi_click_object(Eo *obj, int ids);
+void multi_press_object(Eo *obj, int ids);
+void multi_click_object_at(Eo *obj, int x, int y, int ids);
+void multi_press_object_at(Eo *obj, int x, int y, int ids);
+int multi_drag_object_around(Eo *obj, int touch_point, int cx, int cy, int radius, int degrees);
+void write_key_sequence(Eo *obj, const char *seqence);
void drag_object(Eo *obj, int x, int y, int dx, int dy, Eina_Bool iterate);
+int drag_object_around(Eo *obj, int cx, int cy, int radius, int degrees);
+int pinch_object(Eo *obj, int x, int y, int x2, int y2, int dx, int dy, int dx2, int dy2);
void wheel_object(Eo *obj, Eina_Bool horiz, Eina_Bool down);
void wheel_part(Eo *obj, const char *part, Eina_Bool horiz, Eina_Bool down);
void wheel_object_at(Eo *obj, int x, int y, Eina_Bool horiz, Eina_Bool down);
void event_callback_single_call_int_data(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
void event_callback_that_quits_the_main_loop_when_called();
void event_callback_that_increments_an_int_when_called(void *data, Evas_Object *obj, void *event_info);
+void smart_callback_that_stores_event_info_to_data(void *data, Evas_Object *obj EINA_UNUSED, void *event_info);
+
+void force_render(Eo *win);
+
+#define assert_object_size_eq(obj, width, height) \
+do \
+{ \
+ Eina_Size2D _sz = efl_gfx_entity_size_get((obj)); \
+ ck_assert_int_eq(_sz.w, (width)); \
+ ck_assert_int_eq(_sz.h, (height)); \
+} while (0)
+
+#define assert_object_width_eq(obj, width) \
+do \
+{ \
+ Eina_Size2D _sz = efl_gfx_entity_size_get((obj)); \
+ ck_assert_int_eq(_sz.w, (width)); \
+} while (0)
+
+#define assert_object_height_eq(obj, height) \
+do \
+{ \
+ Eina_Size2D _sz = efl_gfx_entity_size_get((obj)); \
+ ck_assert_int_eq(_sz.h, (height)); \
+} while (0)
+
+#define assert_object_pos_eq(obj, _x, _y) \
+do \
+{ \
+ Eina_Position2D _pos = efl_gfx_entity_position_get((obj)); \
+ ck_assert_int_eq(_pos.x, (_x)); \
+ ck_assert_int_eq(_pos.y, (_y)); \
+} while (0)
#endif
diff --git a/src/tests/elua/elua_lib.c b/src/tests/elua/elua_lib.c
index f3d11d5023..c21f2a5ebd 100644
--- a/src/tests/elua/elua_lib.c
+++ b/src/tests/elua/elua_lib.c
@@ -19,7 +19,6 @@ EFL_START_TEST(elua_api)
{
Elua_State *st;
lua_State *lst;
- char buf[] = "tmpXXXXXX";
FILE *f;
int fd;
char *cargv[2];
@@ -29,6 +28,7 @@ EFL_START_TEST(elua_api)
cargv[0] = arg1;
cargv[1] = arg2;
char *spath = NULL;
+ Eina_Tmpstr *tmpf = NULL;
st = elua_state_new("test");
fail_if(!st);
@@ -84,16 +84,16 @@ EFL_START_TEST(elua_api)
fail_if(lua_type(lst, -1) != LUA_TFUNCTION);
lua_pop(lst, 1);
- fd = mkstemp(buf);
+ fd = eina_file_mkstemp("tmpXXXXXX", &tmpf);
fail_if(fd < 0);
f = fdopen(fd, "wb");
fail_if(!f);
fprintf(f, "return 5\n");
fclose(f);
- fail_if(!elua_util_file_run(st, buf));
+ fail_if(!elua_util_file_run(st, tmpf));
fail_if(lua_tointeger(lst, -1) != 5);
lua_pop(lst, 1);
- fail_if(remove(buf));
+ fail_if(remove(tmpf));
/* halfassed testing here, but not possible otherwise */
fail_if(elua_util_error_report(st, 0));
@@ -101,21 +101,21 @@ EFL_START_TEST(elua_api)
fail_if(!elua_util_error_report(st, 5));
fail_if(lua_gettop(lst) > 0);
- f = fopen(buf, "wb");
+ f = fopen(tmpf, "wb");
fail_if(!f);
fprintf(f, "return true");
fclose(f);
- cargv[1] = buf;
+ cargv[1] = tmpf;
fail_if(!elua_util_script_run(st, 2, cargv, 1, &quit));
fail_if(quit != 1);
- f = fopen(buf, "wb");
+ f = fopen(tmpf, "wb");
fail_if(!f);
fprintf(f, "return false");
fclose(f);
fail_if(!elua_util_script_run(st, 2, cargv, 1, &quit));
fail_if(quit != 0);
- fail_if(remove(buf));
+ fail_if(remove(tmpf));
/* elua API here tries accessing files by relative path,
* prevent any unintentional file accesses in cwd
@@ -139,6 +139,7 @@ EFL_START_TEST(elua_api)
lua_pop(lst, 1);
elua_state_free(st);
+ eina_tmpstr_del(tmpf);
}
EFL_END_TEST
diff --git a/src/tests/elua/meson.build b/src/tests/elua/meson.build
index 22174f0bb0..fc6829ce71 100644
--- a/src/tests/elua/meson.build
+++ b/src/tests/elua/meson.build
@@ -6,7 +6,7 @@ elua_suite_src = [
'elua_lib.c'
]
-elua_bindings_dir = join_paths(meson.source_root(), 'src', 'bindings', 'luajit')
+elua_bindings_dir = join_paths(meson.source_root(), 'src', 'bindings', 'lua')
elua_core_dir = join_paths(meson.source_root(), 'src', 'scripts', 'elua', 'core')
elua_modules_dir = join_paths(meson.source_root(), 'src', 'scripts', 'elua', 'modules')
elua_apps_dir = join_paths(meson.source_root(), 'src', 'tests', 'elua', 'data', 'apps')
diff --git a/src/tests/eo/access/access_inherit.c b/src/tests/eo/access/access_inherit.c
index 2f830bde8a..38ab147860 100644
--- a/src/tests/eo/access/access_inherit.c
+++ b/src/tests/eo/access/access_inherit.c
@@ -16,7 +16,7 @@ _prot_print(Eo *obj, void *class_data EINA_UNUSED)
printf("%s %d\n", __func__, pd->protected_x1);
}
-EAPI EFL_VOID_FUNC_BODY(inherit_prot_print);
+EFL_VOID_FUNC_BODY(inherit_prot_print);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/access/access_inherit.h b/src/tests/eo/access/access_inherit.h
index 20fa1d3102..9ff8191b0b 100644
--- a/src/tests/eo/access/access_inherit.h
+++ b/src/tests/eo/access/access_inherit.h
@@ -1,7 +1,7 @@
#ifndef INHERIT_H
#define INHERIT_H
-EAPI void inherit_prot_print(Eo *obj);
+void inherit_prot_print(Eo *obj);
#define INHERIT_CLASS inherit_class_get()
const Efl_Class *inherit_class_get(void);
diff --git a/src/tests/eo/access/access_simple.c b/src/tests/eo/access/access_simple.c
index 5b75d0c52b..0076d8b2ec 100644
--- a/src/tests/eo/access/access_simple.c
+++ b/src/tests/eo/access/access_simple.c
@@ -12,7 +12,7 @@ typedef struct
int a;
} Private_Data;
-EAPI const Efl_Event_Description _EV_A_CHANGED =
+const Efl_Event_Description _EV_A_CHANGED =
EFL_EVENT_DESCRIPTION("a,changed");
#define MY_CLASS SIMPLE_CLASS
@@ -30,7 +30,7 @@ _a_set(Eo *obj, void *class_data, int a)
efl_event_callback_legacy_call(obj, EV_A_CHANGED, &pd->a);
}
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/access/access_simple.h b/src/tests/eo/access/access_simple.h
index 22b656a831..935492e609 100644
--- a/src/tests/eo/access/access_simple.h
+++ b/src/tests/eo/access/access_simple.h
@@ -1,7 +1,7 @@
#ifndef SIMPLE_H
#define SIMPLE_H
-EAPI void simple_a_set(Eo *obj, int a);
+void simple_a_set(Eo *obj, int a);
typedef struct
{
diff --git a/src/tests/eo/composite_objects/composite_objects_simple.c b/src/tests/eo/composite_objects/composite_objects_simple.c
index b9bc70fb78..132b393b72 100644
--- a/src/tests/eo/composite_objects/composite_objects_simple.c
+++ b/src/tests/eo/composite_objects/composite_objects_simple.c
@@ -5,7 +5,7 @@
#include "Eo.h"
#include "composite_objects_simple.h"
-EAPI const Efl_Event_Description _EV_A_CHANGED =
+const Efl_Event_Description _EV_A_CHANGED =
EFL_EVENT_DESCRIPTION("a,changed");
#define MY_CLASS SIMPLE_CLASS
@@ -27,73 +27,73 @@ _a_get(Eo *obj EINA_UNUSED, void *class_data)
return pd->a;
}
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
-EAPI EFL_FUNC_BODY(simple_a_get, int, 0);
+EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
+EFL_FUNC_BODY(simple_a_get, int, 0);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set1, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set2, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set3, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set4, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set5, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set6, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set7, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set8, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set9, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set10, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set11, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set12, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set13, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set14, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set15, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set16, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set17, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set18, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set19, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set20, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set21, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set22, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set23, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set24, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set25, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set26, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set27, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set28, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set29, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set30, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set31, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set32, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get1, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get2, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get3, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get4, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get5, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get6, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get7, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get8, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get9, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get10, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get11, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get12, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get13, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get14, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get15, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get16, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get17, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get18, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get19, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get20, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get21, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get22, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get23, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get24, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get25, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get26, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get27, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get28, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get29, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get30, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get31, EFL_FUNC_CALL(a), int a);
-EAPI EFL_VOID_FUNC_BODYV(simple_a_get32, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set1, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set2, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set3, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set4, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set5, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set6, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set7, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set8, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set9, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set10, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set11, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set12, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set13, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set14, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set15, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set16, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set17, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set18, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set19, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set20, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set21, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set22, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set23, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set24, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set25, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set26, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set27, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set28, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set29, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set30, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set31, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set32, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get1, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get2, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get3, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get4, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get5, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get6, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get7, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get8, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get9, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get10, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get11, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get12, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get13, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get14, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get15, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get16, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get17, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get18, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get19, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get20, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get21, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get22, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get23, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get24, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get25, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get26, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get27, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get28, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get29, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get30, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get31, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_get32, EFL_FUNC_CALL(a), int a);
static Eina_Bool
diff --git a/src/tests/eo/composite_objects/composite_objects_simple.h b/src/tests/eo/composite_objects/composite_objects_simple.h
index eb97c94404..b24dd98a5c 100644
--- a/src/tests/eo/composite_objects/composite_objects_simple.h
+++ b/src/tests/eo/composite_objects/composite_objects_simple.h
@@ -6,73 +6,73 @@ typedef struct
int a;
} Simple_Public_Data;
-EAPI void simple_a_set(Eo *obj, int a);
-EAPI int simple_a_get(Eo *obj);
+void simple_a_set(Eo *obj, int a);
+int simple_a_get(Eo *obj);
-EAPI void simple_a_set1(Eo *obj, int a);
-EAPI void simple_a_set2(Eo *obj, int a);
-EAPI void simple_a_set3(Eo *obj, int a);
-EAPI void simple_a_set4(Eo *obj, int a);
-EAPI void simple_a_set5(Eo *obj, int a);
-EAPI void simple_a_set6(Eo *obj, int a);
-EAPI void simple_a_set7(Eo *obj, int a);
-EAPI void simple_a_set8(Eo *obj, int a);
-EAPI void simple_a_set9(Eo *obj, int a);
-EAPI void simple_a_set10(Eo *obj, int a);
-EAPI void simple_a_set11(Eo *obj, int a);
-EAPI void simple_a_set12(Eo *obj, int a);
-EAPI void simple_a_set13(Eo *obj, int a);
-EAPI void simple_a_set14(Eo *obj, int a);
-EAPI void simple_a_set15(Eo *obj, int a);
-EAPI void simple_a_set16(Eo *obj, int a);
-EAPI void simple_a_set17(Eo *obj, int a);
-EAPI void simple_a_set18(Eo *obj, int a);
-EAPI void simple_a_set19(Eo *obj, int a);
-EAPI void simple_a_set20(Eo *obj, int a);
-EAPI void simple_a_set21(Eo *obj, int a);
-EAPI void simple_a_set22(Eo *obj, int a);
-EAPI void simple_a_set23(Eo *obj, int a);
-EAPI void simple_a_set24(Eo *obj, int a);
-EAPI void simple_a_set25(Eo *obj, int a);
-EAPI void simple_a_set26(Eo *obj, int a);
-EAPI void simple_a_set27(Eo *obj, int a);
-EAPI void simple_a_set28(Eo *obj, int a);
-EAPI void simple_a_set29(Eo *obj, int a);
-EAPI void simple_a_set30(Eo *obj, int a);
-EAPI void simple_a_set31(Eo *obj, int a);
-EAPI void simple_a_set32(Eo *obj, int a);
-EAPI void simple_a_get1(Eo *obj, int a);
-EAPI void simple_a_get2(Eo *obj, int a);
-EAPI void simple_a_get3(Eo *obj, int a);
-EAPI void simple_a_get4(Eo *obj, int a);
-EAPI void simple_a_get5(Eo *obj, int a);
-EAPI void simple_a_get6(Eo *obj, int a);
-EAPI void simple_a_get7(Eo *obj, int a);
-EAPI void simple_a_get8(Eo *obj, int a);
-EAPI void simple_a_get9(Eo *obj, int a);
-EAPI void simple_a_get10(Eo *obj, int a);
-EAPI void simple_a_get11(Eo *obj, int a);
-EAPI void simple_a_get12(Eo *obj, int a);
-EAPI void simple_a_get13(Eo *obj, int a);
-EAPI void simple_a_get14(Eo *obj, int a);
-EAPI void simple_a_get15(Eo *obj, int a);
-EAPI void simple_a_get16(Eo *obj, int a);
-EAPI void simple_a_get17(Eo *obj, int a);
-EAPI void simple_a_get18(Eo *obj, int a);
-EAPI void simple_a_get19(Eo *obj, int a);
-EAPI void simple_a_get20(Eo *obj, int a);
-EAPI void simple_a_get21(Eo *obj, int a);
-EAPI void simple_a_get22(Eo *obj, int a);
-EAPI void simple_a_get23(Eo *obj, int a);
-EAPI void simple_a_get24(Eo *obj, int a);
-EAPI void simple_a_get25(Eo *obj, int a);
-EAPI void simple_a_get26(Eo *obj, int a);
-EAPI void simple_a_get27(Eo *obj, int a);
-EAPI void simple_a_get28(Eo *obj, int a);
-EAPI void simple_a_get29(Eo *obj, int a);
-EAPI void simple_a_get30(Eo *obj, int a);
-EAPI void simple_a_get31(Eo *obj, int a);
-EAPI void simple_a_get32(Eo *obj, int a);
+void simple_a_set1(Eo *obj, int a);
+void simple_a_set2(Eo *obj, int a);
+void simple_a_set3(Eo *obj, int a);
+void simple_a_set4(Eo *obj, int a);
+void simple_a_set5(Eo *obj, int a);
+void simple_a_set6(Eo *obj, int a);
+void simple_a_set7(Eo *obj, int a);
+void simple_a_set8(Eo *obj, int a);
+void simple_a_set9(Eo *obj, int a);
+void simple_a_set10(Eo *obj, int a);
+void simple_a_set11(Eo *obj, int a);
+void simple_a_set12(Eo *obj, int a);
+void simple_a_set13(Eo *obj, int a);
+void simple_a_set14(Eo *obj, int a);
+void simple_a_set15(Eo *obj, int a);
+void simple_a_set16(Eo *obj, int a);
+void simple_a_set17(Eo *obj, int a);
+void simple_a_set18(Eo *obj, int a);
+void simple_a_set19(Eo *obj, int a);
+void simple_a_set20(Eo *obj, int a);
+void simple_a_set21(Eo *obj, int a);
+void simple_a_set22(Eo *obj, int a);
+void simple_a_set23(Eo *obj, int a);
+void simple_a_set24(Eo *obj, int a);
+void simple_a_set25(Eo *obj, int a);
+void simple_a_set26(Eo *obj, int a);
+void simple_a_set27(Eo *obj, int a);
+void simple_a_set28(Eo *obj, int a);
+void simple_a_set29(Eo *obj, int a);
+void simple_a_set30(Eo *obj, int a);
+void simple_a_set31(Eo *obj, int a);
+void simple_a_set32(Eo *obj, int a);
+void simple_a_get1(Eo *obj, int a);
+void simple_a_get2(Eo *obj, int a);
+void simple_a_get3(Eo *obj, int a);
+void simple_a_get4(Eo *obj, int a);
+void simple_a_get5(Eo *obj, int a);
+void simple_a_get6(Eo *obj, int a);
+void simple_a_get7(Eo *obj, int a);
+void simple_a_get8(Eo *obj, int a);
+void simple_a_get9(Eo *obj, int a);
+void simple_a_get10(Eo *obj, int a);
+void simple_a_get11(Eo *obj, int a);
+void simple_a_get12(Eo *obj, int a);
+void simple_a_get13(Eo *obj, int a);
+void simple_a_get14(Eo *obj, int a);
+void simple_a_get15(Eo *obj, int a);
+void simple_a_get16(Eo *obj, int a);
+void simple_a_get17(Eo *obj, int a);
+void simple_a_get18(Eo *obj, int a);
+void simple_a_get19(Eo *obj, int a);
+void simple_a_get20(Eo *obj, int a);
+void simple_a_get21(Eo *obj, int a);
+void simple_a_get22(Eo *obj, int a);
+void simple_a_get23(Eo *obj, int a);
+void simple_a_get24(Eo *obj, int a);
+void simple_a_get25(Eo *obj, int a);
+void simple_a_get26(Eo *obj, int a);
+void simple_a_get27(Eo *obj, int a);
+void simple_a_get28(Eo *obj, int a);
+void simple_a_get29(Eo *obj, int a);
+void simple_a_get30(Eo *obj, int a);
+void simple_a_get31(Eo *obj, int a);
+void simple_a_get32(Eo *obj, int a);
extern const Efl_Event_Description _EV_A_CHANGED;
#define EV_A_CHANGED (&(_EV_A_CHANGED))
diff --git a/src/tests/eo/constructors/constructors_mixin.c b/src/tests/eo/constructors/constructors_mixin.c
index c3cbdc50b1..9380d4885d 100644
--- a/src/tests/eo/constructors/constructors_mixin.c
+++ b/src/tests/eo/constructors/constructors_mixin.c
@@ -35,7 +35,7 @@ _destructor(Eo *obj, void *class_data EINA_UNUSED)
my_init_count--;
}
-EAPI EFL_VOID_FUNC_BODYV(mixin_add_and_print, EFL_FUNC_CALL(x), int x);
+EFL_VOID_FUNC_BODYV(mixin_add_and_print, EFL_FUNC_CALL(x), int x);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/constructors/constructors_mixin.h b/src/tests/eo/constructors/constructors_mixin.h
index ae7a85df8c..9894c8d095 100644
--- a/src/tests/eo/constructors/constructors_mixin.h
+++ b/src/tests/eo/constructors/constructors_mixin.h
@@ -1,7 +1,7 @@
#ifndef MIXIN_H
#define MIXIN_H
-EAPI void mixin_add_and_print(Eo *obj, int x);
+void mixin_add_and_print(Eo *obj, int x);
#define MIXIN_CLASS mixin_class_get()
const Efl_Class *mixin_class_get(void);
diff --git a/src/tests/eo/constructors/constructors_simple.h b/src/tests/eo/constructors/constructors_simple.h
index 03f7f4b22c..23dd21c610 100644
--- a/src/tests/eo/constructors/constructors_simple.h
+++ b/src/tests/eo/constructors/constructors_simple.h
@@ -1,10 +1,10 @@
#ifndef SIMPLE_H
#define SIMPLE_H
-EAPI void simple_a_set(Eo *obj, int a);
-EAPI int simple_a_get(Eo *obj);
-EAPI void simple_b_set(Eo *obj, int b);
-EAPI int simple_b_get(Eo *obj);
+void simple_a_set(Eo *obj, int a);
+int simple_a_get(Eo *obj);
+void simple_b_set(Eo *obj, int b);
+int simple_b_get(Eo *obj);
#define SIMPLE_CLASS simple_class_get()
const Efl_Class *simple_class_get(void);
diff --git a/src/tests/eo/function_overrides/function_overrides_inherit2.c b/src/tests/eo/function_overrides/function_overrides_inherit2.c
index e4aa147b67..09ef1f8563 100644
--- a/src/tests/eo/function_overrides/function_overrides_inherit2.c
+++ b/src/tests/eo/function_overrides/function_overrides_inherit2.c
@@ -42,8 +42,8 @@ _print2(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED)
return EINA_TRUE;
}
-EAPI EFL_FUNC_BODY(inherit2_print, Eina_Bool, EINA_FALSE);
-EAPI EFL_FUNC_BODY(inherit2_print2, Eina_Bool, EINA_FALSE);
+EFL_FUNC_BODY(inherit2_print, Eina_Bool, EINA_FALSE);
+EFL_FUNC_BODY(inherit2_print2, Eina_Bool, EINA_FALSE);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/function_overrides/function_overrides_inherit2.h b/src/tests/eo/function_overrides/function_overrides_inherit2.h
index 773ead195b..f0d0079a01 100644
--- a/src/tests/eo/function_overrides/function_overrides_inherit2.h
+++ b/src/tests/eo/function_overrides/function_overrides_inherit2.h
@@ -1,8 +1,8 @@
#ifndef INHERIT2_H
#define INHERIT2_H
-EAPI Eina_Bool inherit2_print(Eo *obj);
-EAPI Eina_Bool inherit2_print2(Eo *obj);
+Eina_Bool inherit2_print(Eo *obj);
+Eina_Bool inherit2_print2(Eo *obj);
#define INHERIT2_CLASS inherit2_class_get()
const Efl_Class *inherit2_class_get(void);
diff --git a/src/tests/eo/function_overrides/function_overrides_simple.c b/src/tests/eo/function_overrides/function_overrides_simple.c
index fbd5681367..c0cbac5170 100644
--- a/src/tests/eo/function_overrides/function_overrides_simple.c
+++ b/src/tests/eo/function_overrides/function_overrides_simple.c
@@ -51,10 +51,10 @@ _class_print2(Efl_Class *klass, void *class_data EINA_UNUSED)
return EINA_TRUE;
}
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
-EAPI EFL_FUNC_BODY(simple_a_print, Eina_Bool, EINA_FALSE);
-EAPI EFL_FUNC_BODY_CONST(simple_class_print, Eina_Bool, EINA_FALSE);
-EAPI EFL_FUNC_BODY_CONST(simple_class_print2, Eina_Bool, EINA_FALSE);
+EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
+EFL_FUNC_BODY(simple_a_print, Eina_Bool, EINA_FALSE);
+EFL_FUNC_BODY_CONST(simple_class_print, Eina_Bool, EINA_FALSE);
+EFL_FUNC_BODY_CONST(simple_class_print2, Eina_Bool, EINA_FALSE);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/function_overrides/function_overrides_simple.h b/src/tests/eo/function_overrides/function_overrides_simple.h
index 87dfba7ba0..46862a226e 100644
--- a/src/tests/eo/function_overrides/function_overrides_simple.h
+++ b/src/tests/eo/function_overrides/function_overrides_simple.h
@@ -6,10 +6,10 @@ typedef struct
int a;
} Simple_Public_Data;
-EAPI void simple_a_set(Eo *obj, int a);
-EAPI Eina_Bool simple_a_print(Eo *obj);
-EAPI Eina_Bool simple_class_print(const Eo *obj);
-EAPI Eina_Bool simple_class_print2(const Eo *obj);
+void simple_a_set(Eo *obj, int a);
+Eina_Bool simple_a_print(Eo *obj);
+Eina_Bool simple_class_print(const Eo *obj);
+Eina_Bool simple_class_print2(const Eo *obj);
extern const Efl_Event_Description _SIG_A_CHANGED;
#define SIG_A_CHANGED (&(_SIG_A_CHANGED))
diff --git a/src/tests/eo/interface/interface_interface.h b/src/tests/eo/interface/interface_interface.h
index 6f454e6270..6186a46daf 100644
--- a/src/tests/eo/interface/interface_interface.h
+++ b/src/tests/eo/interface/interface_interface.h
@@ -1,7 +1,7 @@
#ifndef INTERFACE_H
#define INTERFACE_H
-EAPI int interface_ab_sum_get(Eo *obj);
+int interface_ab_sum_get(Eo *obj);
#define INTERFACE_CLASS interface_class_get()
const Efl_Class *interface_class_get(void);
diff --git a/src/tests/eo/interface/interface_interface2.h b/src/tests/eo/interface/interface_interface2.h
index c64089b43b..f4d29a4daa 100644
--- a/src/tests/eo/interface/interface_interface2.h
+++ b/src/tests/eo/interface/interface_interface2.h
@@ -1,7 +1,7 @@
#ifndef INTERFACE2_H
#define INTERFACE2_H
-EAPI int interface2_ab_sum_get2(Eo *obj);
+int interface2_ab_sum_get2(Eo *obj);
#define INTERFACE2_CLASS interface2_class_get()
const Efl_Class *interface2_class_get(void);
diff --git a/src/tests/eo/interface/interface_simple.h b/src/tests/eo/interface/interface_simple.h
index 03f7f4b22c..23dd21c610 100644
--- a/src/tests/eo/interface/interface_simple.h
+++ b/src/tests/eo/interface/interface_simple.h
@@ -1,10 +1,10 @@
#ifndef SIMPLE_H
#define SIMPLE_H
-EAPI void simple_a_set(Eo *obj, int a);
-EAPI int simple_a_get(Eo *obj);
-EAPI void simple_b_set(Eo *obj, int b);
-EAPI int simple_b_get(Eo *obj);
+void simple_a_set(Eo *obj, int a);
+int simple_a_get(Eo *obj);
+void simple_b_set(Eo *obj, int b);
+int simple_b_get(Eo *obj);
#define SIMPLE_CLASS simple_class_get()
const Efl_Class *simple_class_get(void);
diff --git a/src/tests/eo/mixin/mixin_mixin.c b/src/tests/eo/mixin/mixin_mixin.c
index 06bff56d2b..5540d38a1e 100644
--- a/src/tests/eo/mixin/mixin_mixin.c
+++ b/src/tests/eo/mixin/mixin_mixin.c
@@ -30,7 +30,7 @@ _destructor(Eo *obj, void *class_data EINA_UNUSED)
efl_destructor(efl_super(obj, MY_CLASS));
}
-EAPI EFL_FUNC_BODY(mixin_ab_sum_get, int, 0);
+EFL_FUNC_BODY(mixin_ab_sum_get, int, 0);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/mixin/mixin_mixin.h b/src/tests/eo/mixin/mixin_mixin.h
index 4d9c4253aa..6e4a5c41fc 100644
--- a/src/tests/eo/mixin/mixin_mixin.h
+++ b/src/tests/eo/mixin/mixin_mixin.h
@@ -1,7 +1,7 @@
#ifndef MIXIN_H
#define MIXIN_H
-EAPI int mixin_ab_sum_get(Eo *obj);
+int mixin_ab_sum_get(Eo *obj);
#define MIXIN_CLASS mixin_class_get()
const Efl_Class *mixin_class_get(void);
diff --git a/src/tests/eo/mixin/mixin_simple.h b/src/tests/eo/mixin/mixin_simple.h
index 03f7f4b22c..23dd21c610 100644
--- a/src/tests/eo/mixin/mixin_simple.h
+++ b/src/tests/eo/mixin/mixin_simple.h
@@ -1,10 +1,10 @@
#ifndef SIMPLE_H
#define SIMPLE_H
-EAPI void simple_a_set(Eo *obj, int a);
-EAPI int simple_a_get(Eo *obj);
-EAPI void simple_b_set(Eo *obj, int b);
-EAPI int simple_b_get(Eo *obj);
+void simple_a_set(Eo *obj, int a);
+int simple_a_get(Eo *obj);
+void simple_b_set(Eo *obj, int b);
+int simple_b_get(Eo *obj);
#define SIMPLE_CLASS simple_class_get()
const Efl_Class *simple_class_get(void);
diff --git a/src/tests/eo/signals/signals_main.c b/src/tests/eo/signals/signals_main.c
index c3b1648c17..859e145ecb 100644
--- a/src/tests/eo/signals/signals_main.c
+++ b/src/tests/eo/signals/signals_main.c
@@ -74,6 +74,22 @@ _restart_3_cb(void *data, const Efl_Event *event)
called++;
}
+static void
+_restart_3_no_stop_cb(void *data, const Efl_Event *event)
+{
+ fprintf(stderr, "restart 3 no stop inside: %i\n", inside);
+ fprintf(stderr, "restart 3 no stop exit inside: %i (%i)\n", inside, called);
+
+ if (!inside)
+ {
+ inside = EINA_TRUE;
+ efl_event_callback_call(event->object, event->desc, data);
+ inside = EINA_FALSE;
+ }
+
+ called++;
+}
+
int
main(int argc, char *argv[])
{
@@ -219,8 +235,21 @@ main(int argc, char *argv[])
efl_event_callback_legacy_call(obj, EV_RESTART, NULL);
fail_if(inside);
fail_if(called != 3);
-
efl_unref(obj);
+
+ pd = NULL;
+ inside = EINA_FALSE;
+ called = 0;
+
+ obj = efl_add_ref(SIMPLE_CLASS, NULL);
+ efl_event_callback_add(obj, EV_RESTART, _restart_3_no_stop_cb, NULL);
+ efl_event_callback_add(obj, EV_RESTART, _null_cb, NULL);
+ efl_event_callback_add(obj, EV_RESTART, _restart_3_no_stop_cb, NULL);
+ efl_event_callback_call(obj, EV_RESTART, NULL);
+ fail_if(inside);
+ fail_if(called != 2);
+
+
efl_object_shutdown();
return 0;
}
diff --git a/src/tests/eo/signals/signals_simple.c b/src/tests/eo/signals/signals_simple.c
index 0e016dc550..9f01761a02 100644
--- a/src/tests/eo/signals/signals_simple.c
+++ b/src/tests/eo/signals/signals_simple.c
@@ -11,9 +11,9 @@ typedef struct
int a;
} Private_Data;
-EAPI const Efl_Event_Description _EV_A_CHANGED =
+const Efl_Event_Description _EV_A_CHANGED =
EFL_EVENT_DESCRIPTION("a,changed");
-EAPI const Efl_Event_Description _EV_RESTART =
+const Efl_Event_Description _EV_RESTART =
EFL_EVENT_DESCRIPTION_RESTART("restart");
#define MY_CLASS SIMPLE_CLASS
@@ -69,7 +69,7 @@ _constructor(Eo *obj, void *class_data EINA_UNUSED)
return obj;
}
-EAPI EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
+EFL_VOID_FUNC_BODYV(simple_a_set, EFL_FUNC_CALL(a), int a);
static Eina_Bool
_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/signals/signals_simple.h b/src/tests/eo/signals/signals_simple.h
index d6a79aea10..02ffe51452 100644
--- a/src/tests/eo/signals/signals_simple.h
+++ b/src/tests/eo/signals/signals_simple.h
@@ -6,7 +6,7 @@ typedef struct
int cb_count;
} Simple_Public_Data;
-EAPI void simple_a_set(Eo *obj, int a);
+void simple_a_set(Eo *obj, int a);
extern const Efl_Event_Description _EV_A_CHANGED;
#define EV_A_CHANGED (&(_EV_A_CHANGED))
diff --git a/src/tests/eo/suite/eo_test_call_errors.c b/src/tests/eo/suite/eo_test_call_errors.c
index 5a737a415d..c59b7c8e06 100644
--- a/src/tests/eo/suite/eo_test_call_errors.c
+++ b/src/tests/eo/suite/eo_test_call_errors.c
@@ -51,7 +51,7 @@ EFL_START_TEST(eo_op_not_found_in_super)
Eo *obj = efl_add_ref(SIMPLE_CLASS, NULL);
fail_if(!obj);
- TEST_EO_ERROR("_efl_object_call_resolve", "in %s:%d: func '%s' (%d) could not be resolved for class '%s' for super of '%s'.");
+ TEST_EO_ERROR("_efl_object_call_resolve", "in %s:%d: func '%s' (%d) could not be resolved on %s for class '%s' for super of '%s'.");
simple_a_set(efl_super(obj, SIMPLE_CLASS), 10);
fail_unless(ctx.did);
@@ -72,7 +72,7 @@ test_func(void)
//implementation of the test function
-EAPI void simple_error_test(Eo *obj);
+void simple_error_test(Eo *obj);
EFL_VOID_FUNC_BODY_FALLBACK(simple_error_test, test_func(););
static void
_test(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
diff --git a/src/tests/eo/suite/eo_test_class_simple.c b/src/tests/eo/suite/eo_test_class_simple.c
index 846c2f2cb0..f6788afca6 100644
--- a/src/tests/eo/suite/eo_test_class_simple.c
+++ b/src/tests/eo/suite/eo_test_class_simple.c
@@ -7,10 +7,10 @@
#define MY_CLASS SIMPLE_CLASS
-EAPI const Efl_Event_Description _EV_A_CHANGED =
+const Efl_Event_Description _EV_A_CHANGED =
EFL_EVENT_DESCRIPTION("a,changed");
-EAPI const Efl_Event_Description _EV_A_CHANGED2 =
+const Efl_Event_Description _EV_A_CHANGED2 =
EFL_EVENT_DESCRIPTION("a,changed");
static void
@@ -27,12 +27,19 @@ static Eina_Error
_a_set_reflect(Eo *obj, Eina_Value value)
{
int a;
+ Eina_Error r = 0;
- eina_value_int_convert(&value, &a);
+ if (!eina_value_int_convert(&value, &a))
+ {
+ r = EINA_ERROR_VALUE_FAILED;
+ goto end;
+ }
simple_a_set(obj, a);
+
+end:
eina_value_flush(&value);
- return 0;
+ return r;
}
static int
diff --git a/src/tests/eo/suite/eo_test_class_simple.h b/src/tests/eo/suite/eo_test_class_simple.h
index b438b14d97..f7408e9199 100644
--- a/src/tests/eo/suite/eo_test_class_simple.h
+++ b/src/tests/eo/suite/eo_test_class_simple.h
@@ -6,14 +6,14 @@ typedef struct
int a;
} Simple_Public_Data;
-EAPI void simple_a_set(Eo *obj, int a);
-EAPI int simple_a_get(const Eo *obj);
-EAPI Eina_Bool simple_a_print(Eo *obj);
-EAPI Eina_Bool simple_class_hi_print(const Eo *obj);
-EAPI void simple_recursive(Eo *obj, int n);
-EAPI void simple_pure_virtual(Eo *obj);
-EAPI void simple_no_implementation(Eo *obj);
-EAPI Eo *simple_part_get(Eo *obj, const char *name);
+void simple_a_set(Eo *obj, int a);
+int simple_a_get(const Eo *obj);
+Eina_Bool simple_a_print(Eo *obj);
+Eina_Bool simple_class_hi_print(const Eo *obj);
+void simple_recursive(Eo *obj, int n);
+void simple_pure_virtual(Eo *obj);
+void simple_no_implementation(Eo *obj);
+Eo *simple_part_get(Eo *obj, const char *name);
extern const Efl_Event_Description _EV_A_CHANGED;
#define EV_A_CHANGED (&(_EV_A_CHANGED))
diff --git a/src/tests/eo/suite/eo_test_domain.c b/src/tests/eo/suite/eo_test_domain.c
index 114f57060d..4adba195a6 100644
--- a/src/tests/eo/suite/eo_test_domain.c
+++ b/src/tests/eo/suite/eo_test_domain.c
@@ -8,7 +8,7 @@
#define MY_CLASS DOMAIN_CLASS
-EAPI const Efl_Event_Description _EV_DOMAIN_A_CHANGED =
+const Efl_Event_Description _EV_DOMAIN_A_CHANGED =
EFL_EVENT_DESCRIPTION("domain,a,changed");
static void
diff --git a/src/tests/eo/suite/eo_test_domain.h b/src/tests/eo/suite/eo_test_domain.h
index ac7428534a..356b386767 100644
--- a/src/tests/eo/suite/eo_test_domain.h
+++ b/src/tests/eo/suite/eo_test_domain.h
@@ -6,9 +6,9 @@ typedef struct
int a;
} Domain_Public_Data;
-EAPI void domain_a_set(Eo *obj, int a);
-EAPI int domain_a_get(Eo *obj);
-EAPI void domain_recursive(Eo *obj, int n);
+void domain_a_set(Eo *obj, int a);
+int domain_a_get(Eo *obj);
+void domain_recursive(Eo *obj, int n);
extern const Efl_Event_Description _EV_DOMAIN_A_CHANGED;
#define EV_DOMAIN_A_CHANGED (&(_EV_DOMAIN_A_CHANGED))
diff --git a/src/tests/eo/suite/eo_test_event.c b/src/tests/eo/suite/eo_test_event.c
index f7a26708f4..bde38d4b7e 100644
--- a/src/tests/eo/suite/eo_test_event.c
+++ b/src/tests/eo/suite/eo_test_event.c
@@ -11,11 +11,11 @@
//Class definition with one event
-EWAPI const Efl_Class *efl_test_event_class_get(void);
+EO_API_WEAK const Efl_Class *efl_test_event_class_get(void) EINA_CONST;
-EWAPI extern const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER;
-EWAPI extern const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_SUBSCRIBE;
-EWAPI extern const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_CLAMP_TEST;
+EO_API_WEAK extern const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER;
+EO_API_WEAK extern const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_SUBSCRIBE;
+EO_API_WEAK extern const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_CLAMP_TEST;
#define EFL_TEST_EVENT_EVENT_TESTER (&(_EFL_TEST_EVENT_EVENT_TESTER))
#define EFL_TEST_EVENT_EVENT_TESTER_SUBSCRIBE (&(_EFL_TEST_EVENT_EVENT_TESTER_SUBSCRIBE))
@@ -232,13 +232,13 @@ void eo_test_event(TCase *tc)
//class implementation
-EWAPI const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER =
+EO_API_WEAK const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER =
EFL_EVENT_DESCRIPTION("tester");
-EWAPI const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_SUBSCRIBE =
+EO_API_WEAK const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_SUBSCRIBE =
EFL_EVENT_DESCRIPTION("tester");
-EWAPI const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_CLAMP_TEST =
+EO_API_WEAK const Efl_Event_Description _EFL_TEST_EVENT_EVENT_TESTER_CLAMP_TEST =
EFL_EVENT_DESCRIPTION("tester");
diff --git a/src/tests/eo/suite/eo_test_general.c b/src/tests/eo/suite/eo_test_general.c
index 1494f46c95..55c93cb9da 100644
--- a/src/tests/eo/suite/eo_test_general.c
+++ b/src/tests/eo/suite/eo_test_general.c
@@ -66,7 +66,7 @@ _simple_obj_override_a_double_set(Eo *obj, void *class_data EINA_UNUSED, int a)
simple_a_set(efl_super(obj, EFL_OBJECT_OVERRIDE_CLASS), 2 * a);
}
-EAPI int test_class_beef_get(const Efl_Object *obj);
+int test_class_beef_get(const Efl_Object *obj);
EFL_FUNC_BODY_CONST(test_class_beef_get, int, 0)
@@ -329,7 +329,6 @@ EFL_END_TEST
EFL_START_TEST(efl_data_safe_fetch)
{
-
Eo *obj = efl_add_ref(SIMPLE2_CLASS, NULL);
fail_if(!obj || !efl_data_scope_safe_get(obj, SIMPLE2_CLASS));
efl_unref(obj);
diff --git a/src/tests/eo/suite/eo_test_reflection_complex_class_structure.c b/src/tests/eo/suite/eo_test_reflection_complex_class_structure.c
index 19727ca879..ecdcccc962 100644
--- a/src/tests/eo/suite/eo_test_reflection_complex_class_structure.c
+++ b/src/tests/eo/suite/eo_test_reflection_complex_class_structure.c
@@ -90,7 +90,7 @@ __eolian_complex_interface_i_test_set_reflect(Eo *obj, Eina_Value val)
return r;
}
-EOAPI EFL_VOID_FUNC_BODYV(complex_interface_i_test_set, EFL_FUNC_CALL(i), int i);
+EFL_VOID_FUNC_BODYV(complex_interface_i_test_set, EFL_FUNC_CALL(i), int i);
static Eina_Value
__eolian_complex_interface_i_test_get_reflect(const Eo *obj)
@@ -99,7 +99,7 @@ __eolian_complex_interface_i_test_get_reflect(const Eo *obj)
return eina_value_int_init(val);
}
-EOAPI EFL_FUNC_BODY_CONST(complex_interface_i_test_get, int, 0);
+EFL_FUNC_BODY_CONST(complex_interface_i_test_get, int, 0);
static Eina_Bool
_complex_interface_class_initializer(Efl_Class *klass)
@@ -157,7 +157,7 @@ __eolian_complex_mixin_m_test_set_reflect(Eo *obj, Eina_Value val)
return r;
}
-EOAPI EFL_VOID_FUNC_BODYV(complex_mixin_m_test_set, EFL_FUNC_CALL(i), int i);
+EFL_VOID_FUNC_BODYV(complex_mixin_m_test_set, EFL_FUNC_CALL(i), int i);
static Eina_Value
@@ -167,7 +167,7 @@ __eolian_complex_mixin_m_test_get_reflect(const Eo *obj)
return eina_value_int_init(val);
}
-EOAPI EFL_FUNC_BODY_CONST(complex_mixin_m_test_get, int, 0);
+EFL_FUNC_BODY_CONST(complex_mixin_m_test_get, int, 0);
static Eina_Bool
_complex_mixin_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eo/suite/eo_test_reflection_complex_class_structure.h b/src/tests/eo/suite/eo_test_reflection_complex_class_structure.h
index ae615c9428..969091f5a8 100644
--- a/src/tests/eo/suite/eo_test_reflection_complex_class_structure.h
+++ b/src/tests/eo/suite/eo_test_reflection_complex_class_structure.h
@@ -3,18 +3,18 @@
typedef Eo Complex_Mixin;
#define COMPLEX_MIXIN_MIXIN complex_mixin_mixin_get()
-EWAPI const Efl_Class *complex_mixin_mixin_get(void);
-EOAPI void complex_mixin_m_test_set(Eo *obj, int i);
-EOAPI int complex_mixin_m_test_get(const Eo *obj);
+const Efl_Class *complex_mixin_mixin_get(void) EINA_CONST;
+void complex_mixin_m_test_set(Eo *obj, int i);
+int complex_mixin_m_test_get(const Eo *obj);
typedef Eo Complex_Interface;
#define COMPLEX_INTERFACE_INTERFACE complex_interface_interface_get()
-EWAPI const Efl_Class *complex_interface_interface_get(void);
-EOAPI void complex_interface_i_test_set(Eo *obj, int i);
-EOAPI int complex_interface_i_test_get(const Eo *obj);
+const Efl_Class *complex_interface_interface_get(void) EINA_CONST;
+void complex_interface_i_test_set(Eo *obj, int i);
+int complex_interface_i_test_get(const Eo *obj);
typedef Eo Complex_Class;
#define COMPLEX_CLASS_CLASS complex_class_class_get()
-EWAPI const Efl_Class *complex_class_class_get(void);
+const Efl_Class *complex_class_class_get(void) EINA_CONST;
#endif
diff --git a/src/tests/eolian/data/base.eo b/src/tests/eolian/data/base.eo
index 4f1b93d518..ddfd5716d7 100644
--- a/src/tests/eolian/data/base.eo
+++ b/src/tests/eolian/data/base.eo
@@ -1,4 +1,5 @@
abstract Base {
+ [[Docs for abstract class Base. @since 1.66]]
methods {
@property z {
values {
diff --git a/src/tests/eolian/data/class_funcs.eo b/src/tests/eolian/data/class_funcs.eo
index 087f380003..7d72d2fca2 100644
--- a/src/tests/eolian/data/class_funcs.eo
+++ b/src/tests/eolian/data/class_funcs.eo
@@ -1,4 +1,5 @@
class Class_Funcs {
+ [[Docs for class Class_Funcs. @since 1.66]]
methods {
@property a @static {
get {
diff --git a/src/tests/eolian/data/class_requires.eo b/src/tests/eolian/data/class_requires.eo
index ffbb4fef8d..fb33314c87 100644
--- a/src/tests/eolian/data/class_requires.eo
+++ b/src/tests/eolian/data/class_requires.eo
@@ -2,6 +2,7 @@ import base;
import mixins_require;
class Class.Requires extends Base implements Mixins.Require {
+ [[Docs for class Class.Requires. @since 1.66]]
methods {
}
diff --git a/src/tests/eolian/data/class_simple.eo b/src/tests/eolian/data/class_simple.eo
index 12ea743b48..a912f001b0 100644
--- a/src/tests/eolian/data/class_simple.eo
+++ b/src/tests/eolian/data/class_simple.eo
@@ -1,9 +1,9 @@
#version 1
-const Foo: int = 5; [[doc for constant]]
+const Foo: int = 5; [[doc for constant @since 1.66]]
class Class_Simple {
- [[Class Desc Simple]]
+ [[Class Desc Simple @since 1.66]]
c_prefix: efl_canvas_object_simple;
data: Evas_Simple_Data;
methods {
diff --git a/src/tests/eolian/data/class_simple_ref.c b/src/tests/eolian/data/class_simple_ref.c
index d11055ae5e..d80b0e3b38 100644
--- a/src/tests/eolian/data/class_simple_ref.c
+++ b/src/tests/eolian/data/class_simple_ref.c
@@ -17,7 +17,7 @@ __eolian_class_simple_a_set_reflect(Eo *obj, Eina_Value val)
return r;
}
-EOAPI EFL_FUNC_BODYV(efl_canvas_object_simple_a_set, Eina_Bool, EINA_TRUE /* true */, EFL_FUNC_CALL(value), int value);
+EAPI EAPI_WEAK EFL_FUNC_BODYV(efl_canvas_object_simple_a_set, Eina_Bool, EINA_TRUE /* true */, EFL_FUNC_CALL(value), int value);
int _class_simple_a_get(const Eo *obj, Evas_Simple_Data *pd);
@@ -29,7 +29,7 @@ __eolian_class_simple_a_get_reflect(const Eo *obj)
return eina_value_int_init(val);
}
-EOAPI EFL_FUNC_BODY_CONST(efl_canvas_object_simple_a_get, int, 100);
+EAPI EAPI_WEAK EFL_FUNC_BODY_CONST(efl_canvas_object_simple_a_get, int, 100);
char *_class_simple_foo(Eo *obj, Evas_Simple_Data *pd, int a, char *b, double *c, int *d);
@@ -39,7 +39,7 @@ static char *__eolian_class_simple_foo(Eo *obj, Evas_Simple_Data *pd, int a, cha
return _class_simple_foo(obj, pd, a, b, c, d);
}
-EOAPI EFL_FUNC_BODYV(efl_canvas_object_simple_foo, char *, NULL /* null */, EFL_FUNC_CALL(a, b, c, d), int a, char *b, double *c, int *d);
+EAPI EAPI_WEAK EFL_FUNC_BODYV(efl_canvas_object_simple_foo, char *, NULL /* null */, EFL_FUNC_CALL(a, b, c, d), int a, char *b, double *c, int *d);
static Eina_Bool
_class_simple_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eolian/data/class_simple_ref_eo.h b/src/tests/eolian/data/class_simple_ref_eo.h
index d0a6d02ce8..56142c569b 100644
--- a/src/tests/eolian/data/class_simple_ref_eo.h
+++ b/src/tests/eolian/data/class_simple_ref_eo.h
@@ -14,6 +14,8 @@ typedef Eo Class_Simple;
#ifndef FOO
/** doc for constant
*
+ * @since 1.66
+ *
* @ingroup Foo
*/
#define FOO 5
@@ -23,11 +25,13 @@ typedef Eo Class_Simple;
#endif
/** Class Desc Simple
*
+ * @since 1.66
+ *
* @ingroup Class_Simple
*/
#define CLASS_SIMPLE_CLASS class_simple_class_get()
-EWAPI const Efl_Class *class_simple_class_get(void);
+EAPI EAPI_WEAK const Efl_Class *class_simple_class_get(void) EINA_CONST;
#ifdef EFL_BETA_API_SUPPORT
/**
@@ -40,9 +44,11 @@ EWAPI const Efl_Class *class_simple_class_get(void);
*
* @return comment for property set return
*
+ * @since 1.66
+ *
* @ingroup Class_Simple
*/
-EOAPI Eina_Bool efl_canvas_object_simple_a_set(Eo *obj, int value);
+EAPI EAPI_WEAK Eina_Bool efl_canvas_object_simple_a_set(Eo *obj, int value);
#endif /* EFL_BETA_API_SUPPORT */
#ifdef EFL_BETA_API_SUPPORT
@@ -53,9 +59,11 @@ EOAPI Eina_Bool efl_canvas_object_simple_a_set(Eo *obj, int value);
*
* @return Value description
*
+ * @since 1.66
+ *
* @ingroup Class_Simple
*/
-EOAPI int efl_canvas_object_simple_a_get(const Eo *obj);
+EAPI EAPI_WEAK int efl_canvas_object_simple_a_get(const Eo *obj);
#endif /* EFL_BETA_API_SUPPORT */
#ifdef EFL_BETA_API_SUPPORT
@@ -70,9 +78,11 @@ EOAPI int efl_canvas_object_simple_a_get(const Eo *obj);
*
* @return comment for method return
*
+ * @since 1.66
+ *
* @ingroup Class_Simple
*/
-EOAPI char *efl_canvas_object_simple_foo(Eo *obj, int a, char *b, double *c, int *d);
+EAPI EAPI_WEAK char *efl_canvas_object_simple_foo(Eo *obj, int a, char *b, double *c, int *d);
#endif /* EFL_BETA_API_SUPPORT */
#endif
diff --git a/src/tests/eolian/data/complex_type.eo b/src/tests/eolian/data/complex_type.eo
index 9cb6a1faf1..82613a1641 100644
--- a/src/tests/eolian/data/complex_type.eo
+++ b/src/tests/eolian/data/complex_type.eo
@@ -1,6 +1,6 @@
class Complex_Type {
methods {
- @property a {
+ @property a @beta {
set {
return: list<array<strbuf @move> > @move;
}
@@ -10,7 +10,7 @@ class Complex_Type {
value: list<string> @move;
}
}
- foo {
+ foo @beta {
params {
buf: mstring @move;
sl: slice<ubyte>;
diff --git a/src/tests/eolian/data/consts.eo b/src/tests/eolian/data/consts.eo
index 9505e95387..953310541d 100644
--- a/src/tests/eolian/data/consts.eo
+++ b/src/tests/eolian/data/consts.eo
@@ -1,4 +1,5 @@
class Consts {
+ [[Docs for class Consts. @since 1.66]]
methods {
foo @const {
[[comment foo]]
diff --git a/src/tests/eolian/data/ctor_dtor.eo b/src/tests/eolian/data/ctor_dtor.eo
index 71bdcede81..0e82c23520 100644
--- a/src/tests/eolian/data/ctor_dtor.eo
+++ b/src/tests/eolian/data/ctor_dtor.eo
@@ -1,4 +1,5 @@
class Ctor_Dtor extends Base {
+ [[Docs for class Ctor_Dtor. @since 1.66]]
methods {
custom_constructor_1 {
params {
diff --git a/src/tests/eolian/data/docs_ref.h b/src/tests/eolian/data/docs_ref.h
index a00fafb5a5..00bf52ee07 100644
--- a/src/tests/eolian/data/docs_ref.h
+++ b/src/tests/eolian/data/docs_ref.h
@@ -60,7 +60,7 @@ typedef enum
*
* More docs for typedef. See @ref Bar.
*
- * @since 2.0
+ * @since 1.1337
*
* @ingroup Alias
*/
@@ -69,6 +69,8 @@ typedef Bar Alias;
#ifndef PANTS
/** Docs for var.
*
+ * @since 1.66
+ *
* @ingroup pants
*/
#define PANTS 150
@@ -76,6 +78,8 @@ typedef Bar Alias;
/** Opaque struct docs. See @ref Foo for another struct.
*
+ * @since 1.66
+ *
* @ingroup Opaque
*/
typedef struct _Opaque Opaque;
@@ -89,13 +93,13 @@ typedef struct _Opaque Opaque;
* @ref PANTS @ref eo_docs_meth @ref eo_docs_prop_get @ref eo_docs_prop_get
* @ref eo_docs_prop_set @ref Foo.field1 @ref BAR_FOO @ref Eo_Docs
*
- * @since 1.18
+ * @since 1.66
*
* @ingroup Eo_Docs
*/
#define EO_DOCS_CLASS eo_docs_class_get()
-EWAPI const Efl_Class *eo_docs_class_get(void);
+EAPI EAPI_WEAK const Efl_Class *eo_docs_class_get(void) EINA_CONST;
/**
* @brief Method documentation.
@@ -107,11 +111,11 @@ EWAPI const Efl_Class *eo_docs_class_get(void);
*
* @return Return documentation.
*
- * @since 1.18
+ * @since 1.66
*
* @ingroup Eo_Docs
*/
-EOAPI int eo_docs_meth(Eo *obj, int a, float *b, long *c);
+EAPI EAPI_WEAK int eo_docs_meth(Eo *obj, int a, float *b, long *c);
/**
* @brief Property common documentation.
@@ -121,11 +125,11 @@ EOAPI int eo_docs_meth(Eo *obj, int a, float *b, long *c);
* @param[in] obj The object.
* @param[in] val Value documentation.
*
- * @since 1.18
+ * @since 1.66
*
* @ingroup Eo_Docs
*/
-EOAPI void eo_docs_prop_set(Eo *obj, int val);
+EAPI EAPI_WEAK void eo_docs_prop_set(Eo *obj, int val);
/**
* @brief Property common documentation.
@@ -136,27 +140,27 @@ EOAPI void eo_docs_prop_set(Eo *obj, int val);
*
* @return Value documentation.
*
- * @since 1.18
+ * @since 1.66
*
* @ingroup Eo_Docs
*/
-EOAPI int eo_docs_prop_get(const Eo *obj);
+EAPI EAPI_WEAK int eo_docs_prop_get(const Eo *obj);
-EOAPI void eo_docs_no_doc_meth(Eo *obj);
+EAPI EAPI_WEAK void eo_docs_no_doc_meth(Eo *obj);
/** No description supplied.
*
- * @since 1.18
+ * @since 1.66
*
* @ingroup Eo_Docs
*/
-EOAPI void eo_docs_doc_with_empty_doc(Eo *obj);
+EAPI EAPI_WEAK void eo_docs_doc_with_empty_doc(Eo *obj);
-EWAPI extern const Efl_Event_Description _EO_DOCS_EVENT_CLICKED;
+EAPI EAPI_WEAK extern const Efl_Event_Description _EO_DOCS_EVENT_CLICKED;
/** Event docs.
*
- * @since 1.18
+ * @since 1.66
*
* @ingroup Eo_Docs
*/
diff --git a/src/tests/eolian/data/enum.eo b/src/tests/eolian/data/enum.eo
index 0cfc78dd42..cf8115d64a 100644
--- a/src/tests/eolian/data/enum.eo
+++ b/src/tests/eolian/data/enum.eo
@@ -1,23 +1,27 @@
// regular named enum
enum Foo {
+ [[Docs for enum Foo. @since 1.66]]
first,
bar,
baz = 5 * 3
}
enum Baz {
+ [[Docs for enum Baz. @since 1.66]]
flag1 = 1 << 0,
flag2 = 1 << 1,
flag3 = 1 << 2, // testing trailing comma on last item
}
enum Name.Spaced {
+ [[Docs for enum Name.Space. @since 1.66]]
pants
}
-const Bah: Baz = Baz.flag1;
+const Bah: Baz = Baz.flag1; [[Docs for var Bah. @since 1.66]]
enum Value {
+ [[Docs for enum Value. @since 1.66]]
foo,
bar,
baz = 2,
@@ -26,9 +30,10 @@ enum Value {
pants
}
-const Pants: Value = Value.pants;
+const Pants: Value = Value.pants; [[Docs for var Pants. @since 1.66]]
class Enum {
+ [[Docs for class Enum. @since 1.66]]
methods {
foo {
params {
diff --git a/src/tests/eolian/data/eo_docs.eo b/src/tests/eolian/data/eo_docs.eo
index 8c62559d5a..4857aff665 100644
--- a/src/tests/eolian/data/eo_docs.eo
+++ b/src/tests/eolian/data/eo_docs.eo
@@ -30,12 +30,12 @@ enum Bar {
type Alias: Bar; [[Docs for typedef.
More docs for typedef.
- See @Bar. @since 2.0
+ See @Bar. @since 1.1337
]]
-const pants: int = 150; [[Docs for var.]]
+const pants: int = 150; [[Docs for var. @since 1.66]]
-struct Opaque; [[Opaque struct docs. See @Foo for another struct.]]
+struct Opaque; [[Opaque struct docs. See @Foo for another struct. @since 1.66]]
class Eo_Docs {
[[Docs for class.
@@ -53,7 +53,7 @@ class Eo_Docs {
@Bar.foo
@Eo_Docs
- @since 1.18
+ @since 1.66
]]
methods {
meth {
@@ -67,8 +67,6 @@ class Eo_Docs {
}
@property prop {
[[Property common documentation.
-
- @since 1.18
]]
get {
[[Get documentation.]]
diff --git a/src/tests/eolian/data/error.eo b/src/tests/eolian/data/error.eo
index 3a5867ac8d..34b1a1a129 100644
--- a/src/tests/eolian/data/error.eo
+++ b/src/tests/eolian/data/error.eo
@@ -1,4 +1,4 @@
-error Foo = "something bad happened"; [[Error doc]]
+error Foo = "something bad happened"; [[Error doc. @since 1.66]]
error @beta Bar = "another bad thing happened"; [[Another error doc]]
class @beta Error {
diff --git a/src/tests/eolian/data/events.eo b/src/tests/eolian/data/events.eo
index 95b6a8f43c..04047e1157 100644
--- a/src/tests/eolian/data/events.eo
+++ b/src/tests/eolian/data/events.eo
@@ -1,4 +1,5 @@
struct Evas_Event_Clicked_Double_Info {
+ [[Docs for struct Evas_Event_Clicked_Double_Info. @since 1.66]]
pants: int;
}
diff --git a/src/tests/eolian/data/extern.eo b/src/tests/eolian/data/extern.eo
index 28ceb7e2aa..455541a809 100644
--- a/src/tests/eolian/data/extern.eo
+++ b/src/tests/eolian/data/extern.eo
@@ -1,22 +1,23 @@
/* regular type */
-type Foo: int;
+type Foo: int; [[Docs for typedef Foo. @since 1.66]]
/* extern type */
-type @extern Evas.Coord: int;
+type @extern Evas.Coord: int; [[Docs for typedef Evas.Coord. @since 1.66]]
/* regular struct */
-struct X
-{
+struct X {
+ [[Docs for struct X. @since 1.66]]
field: int;
}
/* extern struct */
-struct @extern Y
-{
+struct @extern Y {
+ [[Docs for struct Y. @since 1.66]]
field: int;
}
class Extern {
+ [[Docs for class Extern. @since 1.66]]
methods {
foo {
params {
diff --git a/src/tests/eolian/data/free_func.eo b/src/tests/eolian/data/free_func.eo
index b10c74db6a..2aee43b294 100644
--- a/src/tests/eolian/data/free_func.eo
+++ b/src/tests/eolian/data/free_func.eo
@@ -1,16 +1,19 @@
/* regular struct */
struct Named1 {
+ [[Docs for struct Named1. @since 1.66]]
field: int;
}
struct @free(test_free) Named2 {
+ [[Docs for struct Named2. @since 1.66]]
field: int;
}
/* opaque */
-struct Opaque1;
-struct @free(opaque_free) Opaque2;
+struct Opaque1; [[Docs for Opaque1. @since 1.66]]
+struct @free(opaque_free) Opaque2; [[Docs for struct Opaque2. @since 1.66]]
class Free_Func {
+ [[Docs for class Free_Func. @since 1.66]]
methods {
foo {
params {
diff --git a/src/tests/eolian/data/function_as_argument.eo b/src/tests/eolian/data/function_as_argument.eo
index 29b0f4b91c..7d8424c663 100644
--- a/src/tests/eolian/data/function_as_argument.eo
+++ b/src/tests/eolian/data/function_as_argument.eo
@@ -1,6 +1,7 @@
import function_types;
class Function_As_Argument {
+ [[Docs for class Function_As_Argument. @since 1.66]]
methods {
set_cb {
params {
diff --git a/src/tests/eolian/data/function_as_argument_ref.c b/src/tests/eolian/data/function_as_argument_ref.c
index 6d3a70d402..926d78693c 100644
--- a/src/tests/eolian/data/function_as_argument_ref.c
+++ b/src/tests/eolian/data/function_as_argument_ref.c
@@ -1,11 +1,11 @@
void _function_as_argument_set_cb(Eo *obj, Function_As_Argument_Data *pd, void *cb_data, SimpleFunc cb, Eina_Free_Cb cb_free_cb);
-EOAPI EFL_VOID_FUNC_BODYV(function_as_argument_set_cb, EFL_FUNC_CALL(cb_data, cb, cb_free_cb), void *cb_data, SimpleFunc cb, Eina_Free_Cb cb_free_cb);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODYV(function_as_argument_set_cb, EFL_FUNC_CALL(cb_data, cb, cb_free_cb), void *cb_data, SimpleFunc cb, Eina_Free_Cb cb_free_cb);
char *_function_as_argument_call_cb(Eo *obj, Function_As_Argument_Data *pd, int a, double b);
-EOAPI EFL_FUNC_BODYV(function_as_argument_call_cb, char *, NULL, EFL_FUNC_CALL(a, b), int a, double b);
+EAPI EAPI_WEAK EFL_FUNC_BODYV(function_as_argument_call_cb, char *, NULL, EFL_FUNC_CALL(a, b), int a, double b);
static Eina_Bool
_function_as_argument_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eolian/data/function_as_argument_ref.h b/src/tests/eolian/data/function_as_argument_ref.h
index b93a3e02ed..f79652eade 100644
--- a/src/tests/eolian/data/function_as_argument_ref.h
+++ b/src/tests/eolian/data/function_as_argument_ref.h
@@ -13,12 +13,18 @@ typedef Eo Function_As_Argument;
#endif
+/** Docs for class Function_As_Argument.
+ *
+ * @since 1.66
+ *
+ * @ingroup Function_As_Argument
+ */
#define FUNCTION_AS_ARGUMENT_CLASS function_as_argument_class_get()
-EWAPI const Efl_Class *function_as_argument_class_get(void);
+EAPI EAPI_WEAK const Efl_Class *function_as_argument_class_get(void) EINA_CONST;
-EOAPI void function_as_argument_set_cb(Eo *obj, void *cb_data, SimpleFunc cb, Eina_Free_Cb cb_free_cb);
+EAPI EAPI_WEAK void function_as_argument_set_cb(Eo *obj, void *cb_data, SimpleFunc cb, Eina_Free_Cb cb_free_cb);
-EOAPI char *function_as_argument_call_cb(Eo *obj, int a, double b) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT;
+EAPI EAPI_WEAK char *function_as_argument_call_cb(Eo *obj, int a, double b) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT;
#endif
diff --git a/src/tests/eolian/data/iface.eo b/src/tests/eolian/data/iface.eo
index 153bc0f914..72857f6054 100644
--- a/src/tests/eolian/data/iface.eo
+++ b/src/tests/eolian/data/iface.eo
@@ -1,4 +1,5 @@
interface Iface {
+ [[Docs for interface Iface. @since 1.66]]
methods {
foo {}
bar {}
diff --git a/src/tests/eolian/data/import.eo b/src/tests/eolian/data/import.eo
index 894842487d..258ed454d5 100644
--- a/src/tests/eolian/data/import.eo
+++ b/src/tests/eolian/data/import.eo
@@ -1,8 +1,9 @@
import import_types;
class Import {
+ [[Docs for class Import. @since 1.66]]
methods {
foo {
}
}
-} \ No newline at end of file
+}
diff --git a/src/tests/eolian/data/mixins_require.eo b/src/tests/eolian/data/mixins_require.eo
index 474e1a3af1..ece6f0e82e 100644
--- a/src/tests/eolian/data/mixins_require.eo
+++ b/src/tests/eolian/data/mixins_require.eo
@@ -2,6 +2,7 @@ import base;
import class_simple;
mixin Mixins.Require requires Base {
+ [[Docs for mixin Mixins.Require. @since 1.66]]
methods {
test {
diff --git a/src/tests/eolian/data/nmsp1_class1.eo b/src/tests/eolian/data/nmsp1_class1.eo
index a494e5e1c5..e15bfdc0e0 100644
--- a/src/tests/eolian/data/nmsp1_class1.eo
+++ b/src/tests/eolian/data/nmsp1_class1.eo
@@ -1,5 +1,5 @@
-class nmsp1.class1 extends nmsp1.nmsp11.class2 implements nmsp2.class1, no_nmsp
-{
+class nmsp1.class1 extends nmsp1.nmsp11.class2 implements nmsp2.class1, no_nmsp {
+ [[Docs for class nmsp1.class1. @since 1.66]]
implements {
nmsp1.nmsp11.class2.a { set; }
no_nmsp.foo;
diff --git a/src/tests/eolian/data/nmsp1_nmsp11_class2.eo b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo
index 40c7b854b9..3a3018832c 100644
--- a/src/tests/eolian/data/nmsp1_nmsp11_class2.eo
+++ b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo
@@ -1,5 +1,5 @@
-abstract nmsp1.nmsp11.class2
-{
+abstract nmsp1.nmsp11.class2 {
+ [[Docs for abstract nmsp1.nmsp11.class2. @since 1.66]]
methods {
@property a {
set @pure_virtual {
diff --git a/src/tests/eolian/data/nmsp2_class1.eo b/src/tests/eolian/data/nmsp2_class1.eo
index e92be95c1d..058f5fefdf 100644
--- a/src/tests/eolian/data/nmsp2_class1.eo
+++ b/src/tests/eolian/data/nmsp2_class1.eo
@@ -1,3 +1,3 @@
-mixin nmsp2.class1
-{
+mixin nmsp2.class1 {
+ [[Docs for mixin nmsp2.class1. @since 1.66]]
}
diff --git a/src/tests/eolian/data/no_nmsp.eo b/src/tests/eolian/data/no_nmsp.eo
index daf4313282..30108ffcc9 100644
--- a/src/tests/eolian/data/no_nmsp.eo
+++ b/src/tests/eolian/data/no_nmsp.eo
@@ -1,5 +1,5 @@
-mixin no_nmsp
-{
+mixin no_nmsp {
+ [[Docs for mixin no_nmsp . @since 1.66]]
methods {
foo {
}
diff --git a/src/tests/eolian/data/object_impl.eo b/src/tests/eolian/data/object_impl.eo
index 7fe8ce2e24..10d85b2d05 100644
--- a/src/tests/eolian/data/object_impl.eo
+++ b/src/tests/eolian/data/object_impl.eo
@@ -1,6 +1,9 @@
abstract Object_Impl extends Base {
+ [[This Object Impl
+ @since 1.66
+ ]]
methods {
- @property a {
+ @property a @beta {
set {
values {
value: const(list<string>);
@@ -17,25 +20,28 @@ abstract Object_Impl extends Base {
}
}
@property b {
+ [[Docs for property b. @since 1.66]]
set {
}
get @pure_virtual {
/* set as virtual pure - no implementation expected */
}
values {
- value: list<string> @move;
+ value: iterator<string> @move;
}
}
constructor_1 {
+ [[Docs for method constructor_1. @since 1.66]]
params {
@in a: int;
@in b: char;
}
}
constructor_2 {
+ [[Docs for method constructor_2. @since 1.66]]
}
foo1 {
- [[comment foo]]
+ [[comment foo. @since 1.66]]
params {
@in a: int; [[a]]
@inout b: char;
@@ -44,13 +50,14 @@ abstract Object_Impl extends Base {
return: mstring (null); [[comment for method return]]
}
foo2 @const {
- [[comment foo]]
+ [[comment foo. @since 1.66]]
params {
@in a: int;
@in b: string;
}
}
pure_foo3 @pure_virtual {
+ [[Docs for method pure_foo3. @since 1.66]]
/* set as virtual pure - no implementation expected */
}
}
diff --git a/src/tests/eolian/data/object_impl_add.eo b/src/tests/eolian/data/object_impl_add.eo
index c1e82e2365..b8113a2f01 100644
--- a/src/tests/eolian/data/object_impl_add.eo
+++ b/src/tests/eolian/data/object_impl_add.eo
@@ -2,7 +2,7 @@ class Object_Impl_Add extends Base {
data: Object_Impl_Data;
methods {
- @property c {
+ @property c @beta {
set {
}
get {
diff --git a/src/tests/eolian/data/object_impl_add_ref.c b/src/tests/eolian/data/object_impl_add_ref.c
index f6b8fa5927..55f57578bb 100644
--- a/src/tests/eolian/data/object_impl_add_ref.c
+++ b/src/tests/eolian/data/object_impl_add_ref.c
@@ -20,7 +20,7 @@ _object_impl_a_get(const Eo *obj, Object_Impl_Data *pd, const char *part)
}
EOLIAN static void
-_object_impl_b_set(Eo *obj, Object_Impl_Data *pd, Eina_List *value)
+_object_impl_b_set(Eo *obj, Object_Impl_Data *pd, Eina_Iterator *value)
{
}
diff --git a/src/tests/eolian/data/object_impl_ref.c b/src/tests/eolian/data/object_impl_ref.c
index ddc0d7ccd5..32a331529f 100644
--- a/src/tests/eolian/data/object_impl_ref.c
+++ b/src/tests/eolian/data/object_impl_ref.c
@@ -20,7 +20,7 @@ _object_impl_a_get(const Eo *obj, Object_Impl_Data *pd, const char *part)
}
EOLIAN static void
-_object_impl_b_set(Eo *obj, Object_Impl_Data *pd, Eina_List *value)
+_object_impl_b_set(Eo *obj, Object_Impl_Data *pd, Eina_Iterator *value)
{
}
diff --git a/src/tests/eolian/data/override.eo b/src/tests/eolian/data/override.eo
index 4cee6008d3..dbd2b50ee9 100644
--- a/src/tests/eolian/data/override.eo
+++ b/src/tests/eolian/data/override.eo
@@ -1,4 +1,5 @@
abstract Override extends Base {
+ [[Docs for abstract class Override. @since 1.66]]
methods {
@property a {
set @pure_virtual {
diff --git a/src/tests/eolian/data/override_ref.c b/src/tests/eolian/data/override_ref.c
index dbbbbae263..e2dec87915 100644
--- a/src/tests/eolian/data/override_ref.c
+++ b/src/tests/eolian/data/override_ref.c
@@ -1,8 +1,8 @@
-EOAPI EFL_VOID_FUNC_BODY(override_a_set);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODY(override_a_set);
void _override_a_get(const Eo *obj, Override_Data *pd);
-EOAPI EFL_VOID_FUNC_BODY_CONST(override_a_get);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODY_CONST(override_a_get);
static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, float a, char b, int c)
{
@@ -11,23 +11,23 @@ static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int
pd->c = c;
}
-EOAPI EFL_VOID_FUNC_BODYV(override_b_set, EFL_FUNC_CALL(idx, a, b, c), int idx, float a, char b, int c);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODYV(override_b_set, EFL_FUNC_CALL(idx, a, b, c), int idx, float a, char b, int c);
void _override_b_get(const Eo *obj, Override_Data *pd, int idx, float *a, char *b, int *c);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(override_b_get, EFL_FUNC_CALL(idx, a, b, c), int idx, float *a, char *b, int *c);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODYV_CONST(override_b_get, EFL_FUNC_CALL(idx, a, b, c), int idx, float *a, char *b, int *c);
void _override_c_set(Eo *obj, Override_Data *pd, int idx, int c);
-EOAPI EFL_VOID_FUNC_BODYV(override_c_set, EFL_FUNC_CALL(idx, c), int idx, int c);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODYV(override_c_set, EFL_FUNC_CALL(idx, c), int idx, int c);
static int __eolian_override_c_get(const Eo *obj EINA_UNUSED, Override_Data *pd EINA_UNUSED, int idx EINA_UNUSED)
{
return 50;
}
-EOAPI EFL_FUNC_BODYV_CONST(override_c_get, int, 50, EFL_FUNC_CALL(idx), int idx);
-EOAPI EFL_VOID_FUNC_BODY(override_foo);
+EAPI EAPI_WEAK EFL_FUNC_BODYV_CONST(override_c_get, int, 50, EFL_FUNC_CALL(idx), int idx);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODY(override_foo);
static void __eolian_override_bar(Eo *obj EINA_UNUSED, Override_Data *pd EINA_UNUSED, int idx EINA_UNUSED, int *a, char **str)
{
@@ -35,7 +35,7 @@ static void __eolian_override_bar(Eo *obj EINA_UNUSED, Override_Data *pd EINA_UN
if (str) *str = NULL;
}
-EOAPI EFL_VOID_FUNC_BODYV(override_bar, EFL_FUNC_CALL(idx, a, str), int idx, int *a, char **str);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODYV(override_bar, EFL_FUNC_CALL(idx, a, str), int idx, int *a, char **str);
void _override_base_constructor(Eo *obj, Override_Data *pd);
diff --git a/src/tests/eolian/data/owning_ref.c b/src/tests/eolian/data/owning_ref.c
index 6c9b30debe..6964944983 100644
--- a/src/tests/eolian/data/owning_ref.c
+++ b/src/tests/eolian/data/owning_ref.c
@@ -11,7 +11,7 @@ _owning_test1_ownership_fallback(Eina_List *test1, Eina_Iterator *test2, Eina_Ha
eina_accessor_free(test4);
}
-EOAPI EFL_VOID_FUNC_BODYV_FALLBACK(owning_test1, _owning_test1_ownership_fallback(test1, test2, test3, test4);, EFL_FUNC_CALL(test1, test2, test3, test4), Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODYV_FALLBACK(owning_test1, _owning_test1_ownership_fallback(test1, test2, test3, test4);, EFL_FUNC_CALL(test1, test2, test3, test4), Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4);
void _owning_test2(Eo *obj, Owning_Data *pd, Eina_List *test1, Eina_Hash *test2);
@@ -27,7 +27,7 @@ _owning_test2_ownership_fallback(Eina_List *test1, Eina_Hash *test2)
eina_hash_free(test2);
}
-EOAPI EFL_VOID_FUNC_BODYV_FALLBACK(owning_test2, _owning_test2_ownership_fallback(test1, test2);, EFL_FUNC_CALL(test1, test2), Eina_List *test1, Eina_Hash *test2);
+EAPI EAPI_WEAK EFL_VOID_FUNC_BODYV_FALLBACK(owning_test2, _owning_test2_ownership_fallback(test1, test2);, EFL_FUNC_CALL(test1, test2), Eina_List *test1, Eina_Hash *test2);
static Eina_Bool
_owning_class_initializer(Efl_Class *klass)
diff --git a/src/tests/eolian/data/scope.eo b/src/tests/eolian/data/scope.eo
index def94d1d08..7f4da220bb 100644
--- a/src/tests/eolian/data/scope.eo
+++ b/src/tests/eolian/data/scope.eo
@@ -1,4 +1,5 @@
class Scope {
+ [[Docs for class Scope. @since 1.66]]
methods {
@property a @protected {
get {
diff --git a/src/tests/eolian/data/struct.eo b/src/tests/eolian/data/struct.eo
index 57f250bdbe..96ed3c528e 100644
--- a/src/tests/eolian/data/struct.eo
+++ b/src/tests/eolian/data/struct.eo
@@ -1,20 +1,24 @@
struct Named {
+ [[Docs for struct Named. @since 1.66]]
field: int @by_ref;
something: string;
}
struct Another {
+ [[Docs for struct Another. @since 1.66]]
field: Named;
}
/* opaque struct */
-struct Opaque;
+struct Opaque; [[Docs for struct Opaque. @since 1.66]]
struct @extern Not.Generated {
+ [[Docs for struct Not.Generated. @since 1.66]]
field: int;
}
class Struct {
+ [[Docs for class Struct. @since 1.66]]
methods {
foo {
[[Foo docs. This is $monospace. This is alone-standing $.]]
diff --git a/src/tests/eolian/data/struct_ref.h b/src/tests/eolian/data/struct_ref.h
index ec7ea52671..189ef6b04c 100644
--- a/src/tests/eolian/data/struct_ref.h
+++ b/src/tests/eolian/data/struct_ref.h
@@ -11,24 +11,48 @@ typedef Eo Struct;
#ifndef _STRUCT_EO_TYPES
#define _STRUCT_EO_TYPES
+/** Docs for struct Named.
+ *
+ * @since 1.66
+ *
+ * @ingroup Named
+ */
typedef struct _Named
{
int *field;
const char *something;
} Named;
+/** Docs for struct Another.
+ *
+ * @since 1.66
+ *
+ * @ingroup Another
+ */
typedef struct _Another
{
Named field;
} Another;
+/** Docs for struct Opaque.
+ *
+ * @since 1.66
+ *
+ * @ingroup Opaque
+ */
typedef struct _Opaque Opaque;
#endif
+/** Docs for class Struct.
+ *
+ * @since 1.66
+ *
+ * @ingroup Struct
+ */
#define STRUCT_CLASS struct_class_get()
-EWAPI const Efl_Class *struct_class_get(void);
+EAPI EAPI_WEAK const Efl_Class *struct_class_get(void) EINA_CONST;
/**
* @brief Foo docs. This is @c monospace. This is alone-standing $.
@@ -36,10 +60,12 @@ EWAPI const Efl_Class *struct_class_get(void);
* @param[in] obj The object.
* @param[in] idx
*
+ * @since 1.66
+ *
* @ingroup Struct
*/
-EOAPI char *struct_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT;
+EAPI EAPI_WEAK char *struct_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT;
-EOAPI Named *struct_bar(Eo *obj);
+EAPI EAPI_WEAK Named *struct_bar(Eo *obj);
#endif
diff --git a/src/tests/eolian/data/struct_ref_stub.h b/src/tests/eolian/data/struct_ref_stub.h
index 5ef89d3c1a..724509d2b5 100644
--- a/src/tests/eolian/data/struct_ref_stub.h
+++ b/src/tests/eolian/data/struct_ref_stub.h
@@ -3,10 +3,28 @@
typedef Eo Struct;
+/** Docs for struct Named.
+ *
+ * @since 1.66
+ *
+ * @ingroup Named
+ */
typedef struct _Named Named;
+/** Docs for struct Another.
+ *
+ * @since 1.66
+ *
+ * @ingroup Another
+ */
typedef struct _Another Another;
+/** Docs for struct Opaque.
+ *
+ * @since 1.66
+ *
+ * @ingroup Opaque
+ */
typedef struct _Opaque Opaque;
diff --git a/src/tests/eolian/data/typedef.eo b/src/tests/eolian/data/typedef.eo
index 916a39fcfc..27aced1b42 100644
--- a/src/tests/eolian/data/typedef.eo
+++ b/src/tests/eolian/data/typedef.eo
@@ -1,15 +1,15 @@
-type Evas.Coord: int; /* Simple type definition */
-type List_Objects: list<Typedef>; /* A little more complex */
+type Evas.Coord: int; /* Simple type definition */ [[Docs for typedef Evas.Coord. @since 1.66]]
+type List_Objects: iterator<Typedef>; /* A little more complex */ [[Docs for typedef List_Objects. @since 1.66]]
-type Evas.Coord2: Evas.Coord;
-type Evas.Coord3: Evas.Coord2;
+type Evas.Coord2: Evas.Coord; [[Docs for typedef Evas.Coord2. @since 1.66]]
+type Evas.Coord3: Evas.Coord2; [[Docs for typedef Evas.Coord3. @since 1.66]]
-type @extern Evas.Pants: float; /* not generated */
+type @extern Evas.Pants: float; /* not generated */ [[Docs for typedef Evas.Pants. @since 1.66]]
type @beta Undef: __undefined_type; /* not generated */
-enum Elm.Object.Select_Mode
-{
+enum Elm.Object.Select_Mode {
+ [[Docs for enum Elm.Object.Select_Mode. @since 1.66]]
default = 0,
always,
none,
@@ -18,6 +18,7 @@ enum Elm.Object.Select_Mode
}
class Typedef {
+ [[Docs for class Typedef. @since 1.66]]
methods {
foo {
params {
diff --git a/src/tests/eolian/data/typedef_ref.h b/src/tests/eolian/data/typedef_ref.h
index dd3f3ad85e..616e0a38a7 100644
--- a/src/tests/eolian/data/typedef_ref.h
+++ b/src/tests/eolian/data/typedef_ref.h
@@ -11,14 +11,44 @@ typedef Eo Typedef;
#ifndef _TYPEDEF_EO_TYPES
#define _TYPEDEF_EO_TYPES
+/** Docs for typedef Evas.Coord.
+ *
+ * @since 1.66
+ *
+ * @ingroup Evas_Coord
+ */
typedef int Evas_Coord;
-typedef Eina_List *List_Objects;
+/** Docs for typedef List_Objects.
+ *
+ * @since 1.66
+ *
+ * @ingroup List_Objects
+ */
+typedef Eina_Iterator *List_Objects;
+/** Docs for typedef Evas.Coord2.
+ *
+ * @since 1.66
+ *
+ * @ingroup Evas_Coord2
+ */
typedef Evas_Coord Evas_Coord2;
+/** Docs for typedef Evas.Coord3.
+ *
+ * @since 1.66
+ *
+ * @ingroup Evas_Coord3
+ */
typedef Evas_Coord2 Evas_Coord3;
+/** Docs for enum Elm.Object.Select_Mode.
+ *
+ * @since 1.66
+ *
+ * @ingroup Elm_Object_Select_Mode
+ */
typedef enum
{
ELM_OBJECT_SELECT_MODE_DEFAULT = 0,
@@ -30,10 +60,16 @@ typedef enum
#endif
+/** Docs for class Typedef.
+ *
+ * @since 1.66
+ *
+ * @ingroup Typedef
+ */
#define TYPEDEF_CLASS typedef_class_get()
-EWAPI const Efl_Class *typedef_class_get(void);
+EAPI EAPI_WEAK const Efl_Class *typedef_class_get(void) EINA_CONST;
-EOAPI char *typedef_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT;
+EAPI EAPI_WEAK char *typedef_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT;
#endif
diff --git a/src/tests/eolian/data/typedef_ref_stub.h b/src/tests/eolian/data/typedef_ref_stub.h
index 0f6f4ec38b..fb0adab671 100644
--- a/src/tests/eolian/data/typedef_ref_stub.h
+++ b/src/tests/eolian/data/typedef_ref_stub.h
@@ -3,12 +3,36 @@
typedef Eo Typedef;
+/** Docs for typedef Evas.Coord.
+ *
+ * @since 1.66
+ *
+ * @ingroup Evas_Coord
+ */
typedef int Evas_Coord;
-typedef Eina_List *List_Objects;
+/** Docs for typedef List_Objects.
+ *
+ * @since 1.66
+ *
+ * @ingroup List_Objects
+ */
+typedef Eina_Iterator *List_Objects;
+/** Docs for typedef Evas.Coord2.
+ *
+ * @since 1.66
+ *
+ * @ingroup Evas_Coord2
+ */
typedef Evas_Coord Evas_Coord2;
+/** Docs for typedef Evas.Coord3.
+ *
+ * @since 1.66
+ *
+ * @ingroup Evas_Coord3
+ */
typedef Evas_Coord2 Evas_Coord3;
diff --git a/src/tests/eolian/data/unimpl.eo b/src/tests/eolian/data/unimpl.eo
index 1e11a85e93..422fe5f5e0 100644
--- a/src/tests/eolian/data/unimpl.eo
+++ b/src/tests/eolian/data/unimpl.eo
@@ -1,4 +1,5 @@
class Unimpl composites Iface {
+ [[Docs for clss Unimpl. @since 1.66]]
implements {
Iface.foo;
}
diff --git a/src/tests/eolian/data/var.eo b/src/tests/eolian/data/var.eo
index 6424427ae0..c6a29ca62f 100644
--- a/src/tests/eolian/data/var.eo
+++ b/src/tests/eolian/data/var.eo
@@ -1,7 +1,8 @@
// regular constant
-const Foo: int = 5;
+const Foo: int = 5; [[Docs for var Foo. @since 1.66]]
class Var {
+ [[Docs for class Var. @since 1.66]]
methods {
foo {
params {
diff --git a/src/tests/eolian/data_aux/aux_a.eo b/src/tests/eolian/data_aux/aux_a.eo
index b79d8877e3..4b3f5b28a0 100644
--- a/src/tests/eolian/data_aux/aux_a.eo
+++ b/src/tests/eolian/data_aux/aux_a.eo
@@ -1,4 +1,5 @@
class Aux_A extends Aux_C {
+ [[Docs for class Aux_A. @since 1.66]]
methods {
baz {}
}
diff --git a/src/tests/eolian/data_aux/aux_b.eo b/src/tests/eolian/data_aux/aux_b.eo
index 728c465790..b8e9f115d1 100644
--- a/src/tests/eolian/data_aux/aux_b.eo
+++ b/src/tests/eolian/data_aux/aux_b.eo
@@ -1,2 +1,3 @@
class Aux_B extends Aux_C {
+ [[Docs for class Aux_B. @since 1.66]]
}
diff --git a/src/tests/eolian/data_aux/aux_c.eo b/src/tests/eolian/data_aux/aux_c.eo
index 7e67ed547d..c1b748ff0c 100644
--- a/src/tests/eolian/data_aux/aux_c.eo
+++ b/src/tests/eolian/data_aux/aux_c.eo
@@ -1,4 +1,5 @@
class Aux_C {
+ [[Docs for class Aux_C. @since 1.66]]
methods {
foo {}
bar {}
diff --git a/src/tests/eolian/eolian_generated_future.c b/src/tests/eolian/eolian_generated_future.c
index 556f55a1db..2b9c513c53 100644
--- a/src/tests/eolian/eolian_generated_future.c
+++ b/src/tests/eolian/eolian_generated_future.c
@@ -11,5 +11,8 @@
struct Generated_Future_Data {};
typedef struct Generated_Future_Data Generated_Future_Data;
+#define EOTEST_API
+#define EOTEST_API_WEAK
+
#include "generated_future.eo.h"
#include "generated_future.eo.c"
diff --git a/src/tests/eolian/eolian_generation.c b/src/tests/eolian/eolian_generation.c
index f60bb875bf..8e0babd39d 100644
--- a/src/tests/eolian/eolian_generation.c
+++ b/src/tests/eolian/eolian_generation.c
@@ -106,6 +106,7 @@ EFL_START_TEST(eolian_dev_impl_code)
fail_if(0 != _eolian_gen_execute(TESTS_SRC_DIR"/data/object_impl.eo", "-gi", output_filepath));
fail_if(!_files_compare(TESTS_SRC_DIR"/data/object_impl_ref.c", output_filepath, "c"));
fail_if(0 != _eolian_gen_execute(TESTS_SRC_DIR"/data/object_impl_add.eo", "-gi", output_filepath));
+ fprintf(stderr, "[%s]\n", output_filepath);
fail_if(!_files_compare(TESTS_SRC_DIR"/data/object_impl_add_ref.c", output_filepath, "c"));
}
EFL_END_TEST
diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c
index 9d137dcec3..c914e4ec4f 100644
--- a/src/tests/eolian/eolian_parsing.c
+++ b/src/tests/eolian/eolian_parsing.c
@@ -368,7 +368,7 @@ EFL_START_TEST(eolian_typedef)
fail_if(strcmp(type_name, "List_Objects"));
fail_if(!(type = eolian_typedecl_base_type_get(tdl)));
fail_if(!(type_name = eolian_type_c_type_get(type)));
- fail_if(strcmp(type_name, "Eina_List *"));
+ fail_if(strcmp(type_name, "Eina_Iterator *"));
eina_stringshare_del(type_name);
fail_if(!(type = eolian_type_base_type_get(type)));
fail_if(!!eolian_type_next_type_get(type));
@@ -539,7 +539,7 @@ EFL_START_TEST(eolian_simple_parsing)
const Eolian_Type *tp;
const Eolian_Unit *unit;
Eina_Iterator *iter;
- Eolian_Value v;
+ Eolian_Value v, vv;
void *dummy;
Eolian_State *eos = eolian_state_new();
@@ -579,13 +579,14 @@ EFL_START_TEST(eolian_simple_parsing)
/* Set return */
tp = eolian_function_return_type_get(fid, EOLIAN_PROP_SET);
fail_if(!tp);
- printf("BUILT %d\n", (int)eolian_type_builtin_type_get(tp));
fail_if(eolian_type_builtin_type_get(tp) != EOLIAN_TYPE_BUILTIN_BOOL);
fail_if(strcmp(eolian_type_short_name_get(tp), "bool"));
expr = eolian_function_return_default_value_get(fid, EOLIAN_PROP_SET);
fail_if(!expr);
v = eolian_expression_eval(expr, EOLIAN_MASK_BOOL);
+ fail_if(!eolian_expression_eval_fill(expr, EOLIAN_MASK_BOOL, &vv));
fail_if(v.type != EOLIAN_EXPR_BOOL);
+ fail_if(vv.type != EOLIAN_EXPR_BOOL);
/* Get return */
tp = eolian_function_return_type_get(fid, EOLIAN_PROP_GET);
fail_if(tp);
@@ -639,7 +640,7 @@ EFL_START_TEST(eolian_simple_parsing)
fail_if(!expr);
v = eolian_expression_eval(expr, EOLIAN_MASK_FLOAT);
fail_if(v.type != EOLIAN_EXPR_DOUBLE);
- fail_if(v.value.d != 1337.6);
+ fail_if(!EINA_DBL_EQ(v.value.d, 1337.6));
fail_if(!(eina_iterator_next(iter, (void**)&param)));
fail_if(eolian_parameter_direction_get(param) != EOLIAN_PARAMETER_IN);
fail_if(strcmp(eolian_type_short_name_get(eolian_parameter_type_get(param)), "int"));
@@ -805,6 +806,7 @@ EFL_START_TEST(eolian_error)
const Eolian_Function *f1, *f2;
const Eolian_Type *rtp1, *rtp2;
const Eolian_Error *err1, *err2;
+ Eina_Stringshare *str;
Eolian_State *eos = eolian_state_new();
@@ -822,6 +824,9 @@ EFL_START_TEST(eolian_error)
fail_if(eolian_type_type_get(rtp1) != EOLIAN_TYPE_ERROR);
fail_if(eolian_type_next_type_get(rtp1) != NULL);
fail_if(strcmp(eolian_type_name_get(rtp1), "Foo"));
+ fail_if(!(str = eolian_type_c_type_get(rtp1)));
+ fail_if(strcmp(str, "Eina_Error"));
+ eina_stringshare_del(str);
fail_if(!(err1 = eolian_type_error_get(rtp1)));
fail_if(strcmp(eolian_error_message_get(err1), "something bad happened"));
@@ -1175,7 +1180,7 @@ EFL_START_TEST(eolian_docs)
fail_if(strcmp(eolian_documentation_description_get(doc),
"More docs for typedef. See @Bar."));
fail_if(strcmp(eolian_documentation_since_get(doc),
- "2.0"));
+ "1.1337"));
fail_if(!(var = eolian_unit_constant_by_name_get(unit, "pants")));
fail_if(!(doc = eolian_constant_documentation_get(var)));
@@ -1237,7 +1242,7 @@ EFL_START_TEST(eolian_docs)
"Property common documentation."));
fail_if(eolian_documentation_description_get(doc));
fail_if(strcmp(eolian_documentation_since_get(doc),
- "1.18"));
+ "1.66"));
fail_if(!(doc = eolian_implement_documentation_get(fimp, EOLIAN_PROP_GET)));
fail_if(strcmp(eolian_documentation_summary_get(doc),
"Get documentation."));
diff --git a/src/tests/eolian/eolian_static.c b/src/tests/eolian/eolian_static.c
index fc156beb56..18c8d13742 100644
--- a/src/tests/eolian/eolian_static.c
+++ b/src/tests/eolian/eolian_static.c
@@ -12,10 +12,8 @@ EFL_START_TEST(eolian_static_check)
fail_if(!eolian_state_directory_add(eos, EO_SRC_DIR));
fail_if(!eolian_state_all_eot_files_parse(eos));
fail_if(!eolian_state_all_eo_files_parse(eos));
-#if 0
/* too many failures to enable this yet */
fail_if(!eolian_state_check(eos));
-#endif
eolian_state_free(eos);
}
EFL_END_TEST
diff --git a/src/tests/eolian/generated_future.eo b/src/tests/eolian/generated_future.eo
index 4cf5518f93..d8d8ff7757 100644
--- a/src/tests/eolian/generated_future.eo
+++ b/src/tests/eolian/generated_future.eo
@@ -1,5 +1,5 @@
-class Generated_Future extends Efl.Object
-{
+class Generated_Future extends Efl.Object {
+ [[Docs for class Generated_Future. @since 1.66]]
methods {
}
}
diff --git a/src/tests/eolian/meson.build b/src/tests/eolian/meson.build
index f4b6cdc6f1..cd9c4f185f 100644
--- a/src/tests/eolian/meson.build
+++ b/src/tests/eolian/meson.build
@@ -22,7 +22,8 @@ foreach eo_file : priv_eo_files
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
'-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
- '-gchd', '@INPUT@'])
+ '-e', 'EOTEST_API',
+ '-gchd', '@INPUT@'])
endforeach
eolian_suite = executable('eolian_suite',
diff --git a/src/tests/eolian_cxx/a.c b/src/tests/eolian_cxx/a.c
index 4fa7af7849..8039d58b5d 100644
--- a/src/tests/eolian_cxx/a.c
+++ b/src/tests/eolian_cxx/a.c
@@ -4,6 +4,9 @@
#include <Eo.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "a.eo.h"
struct _A_Data
diff --git a/src/tests/eolian_cxx/a.eo b/src/tests/eolian_cxx/a.eo
index cc94262821..1319f4a14d 100644
--- a/src/tests/eolian_cxx/a.eo
+++ b/src/tests/eolian_cxx/a.eo
@@ -1,5 +1,5 @@
-class A extends Efl.Object
-{
+class A extends Efl.Object {
+ [[Docs for class A. @since 1.66]]
data: A_Data;
implements {
Efl.Object.constructor;
diff --git a/src/tests/eolian_cxx/b.c b/src/tests/eolian_cxx/b.c
index 2ff548f70d..61cf67a3da 100644
--- a/src/tests/eolian_cxx/b.c
+++ b/src/tests/eolian_cxx/b.c
@@ -4,6 +4,9 @@
#include <Eo.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "a.eo.h"
#include "b.eo.h"
diff --git a/src/tests/eolian_cxx/b.eo b/src/tests/eolian_cxx/b.eo
index c293edc9c0..ebec257987 100644
--- a/src/tests/eolian_cxx/b.eo
+++ b/src/tests/eolian_cxx/b.eo
@@ -1,5 +1,5 @@
-class B extends A
-{
+class B extends A {
+ [[Docs for class B. @since 1.66]]
data: B_Data;
implements {
Efl.Object.constructor;
diff --git a/src/tests/eolian_cxx/c.c b/src/tests/eolian_cxx/c.c
index 45c3e0af66..ba7b45bc88 100644
--- a/src/tests/eolian_cxx/c.c
+++ b/src/tests/eolian_cxx/c.c
@@ -4,6 +4,9 @@
#include <Eo.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "a.eo.h"
#include "b.eo.h"
#include "c.eo.h"
diff --git a/src/tests/eolian_cxx/c.eo b/src/tests/eolian_cxx/c.eo
index fe7921c67a..b66aea15c8 100644
--- a/src/tests/eolian_cxx/c.eo
+++ b/src/tests/eolian_cxx/c.eo
@@ -1,5 +1,5 @@
-class C extends B
-{
+class C extends B {
+ [[Docs for class C. @since 1.66]]
data: C_Data;
implements {
Efl.Object.constructor;
diff --git a/src/tests/eolian_cxx/callback.eo b/src/tests/eolian_cxx/callback.eo
index 6dd2c721b7..24f2e45f90 100644
--- a/src/tests/eolian_cxx/callback.eo
+++ b/src/tests/eolian_cxx/callback.eo
@@ -1,11 +1,11 @@
-struct Callback_Event
-{
+struct Callback_Event {
+ [[Docs for struct Callback_Event. @since 1.66]]
field1: int;
field2: list<string>;
}
-class Callback extends Efl.Object
-{
+class Callback extends Efl.Object {
+ [[Docs for class Callback. @since 1.66]]
data: Callback_Data;
events {
prefix,event1: void;
diff --git a/src/tests/eolian_cxx/complex.c b/src/tests/eolian_cxx/complex.c
index 76db444a74..e30c8cb343 100644
--- a/src/tests/eolian_cxx/complex.c
+++ b/src/tests/eolian_cxx/complex.c
@@ -9,6 +9,9 @@
struct Complex_Data {};
typedef struct Complex_Data Complex_Data;
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "complex.eo.h"
EOLIAN static void
diff --git a/src/tests/eolian_cxx/complex.eo b/src/tests/eolian_cxx/complex.eo
index a87391d83b..d48003ea46 100644
--- a/src/tests/eolian_cxx/complex.eo
+++ b/src/tests/eolian_cxx/complex.eo
@@ -1,59 +1,60 @@
-class Complex extends Efl.Object
-{
+class Complex extends Efl.Object {
data: Complex_Data;
methods {
// container test
- inptrcont {
+ inptrcont @beta {
params {
l: list<string>;
}
}
- inclasscont {
+ inclasscont @beta {
params {
l: list<Efl.Object>;
}
}
- incontcont {
+ incontcont @beta {
params {
l: list<list<string>>;
}
}
- incontcontown {
+ incontcontown @beta {
params {
l: list<list<string>> @move;
}
}
- incontowncontown {
+ incontowncontown @beta {
params {
l: list<list<string> @move> @move;
}
}
- incontowncont {
+ incontowncont @beta {
params {
l: list<list<string> @move>;
}
}
- instringcont {
+ instringcont @beta {
params {
l: list<string>;
}
}
- instringowncont {
+ instringowncont @beta {
params {
l: list<mstring @move>;
}
}
- instringcontown {
+ instringcontown @beta {
params {
l: list<string> @move;
}
}
inarray {
+ [[Docs for method inarray. @since 1.66]]
params {
l: array<string>;
}
}
inarrayown {
+ [[Docs for method inarrayown. @since 1.66]]
params {
l: array<string> @move;
}
@@ -69,72 +70,78 @@ class Complex extends Efl.Object
}
}
initerator {
+ [[Docs for method initerator. @since 1.66]]
params {
l: iterator<int>;
}
}
initeratorown {
+ [[Docs for method initeratorown. @since 1.66]]
params {
l: iterator<int> @move;
}
}
inaccessor {
+ [[Docs for method inacessor. @since 1.66]]
params {
l: accessor<int>;
}
}
inaccessorown {
+ [[Docs for method inaccessorown. @since 1.66]]
params {
l: accessor<int> @move;
}
}
// out
- outclasscont {
+ outclasscont @beta {
params {
@out l: list<Efl.Object>;
}
}
- outcontcont {
+ outcontcont @beta {
params {
@out l: list<list<string>>;
}
}
- outcontcontown {
+ outcontcontown @beta {
params {
@out l: list<list<string>> @move;
}
}
- outcontowncontown {
+ outcontowncontown @beta {
params {
@out l: list<list<string> @move> @move;
}
}
- outcontowncont {
+ outcontowncont @beta {
params {
@out l: list<list<string> @move>;
}
}
- outstringcont {
+ outstringcont @beta {
params {
@out l: list<string>;
}
}
- outstringowncont {
+ outstringowncont @beta {
params {
@out l: list<mstring @move>;
}
}
- outstringcontown {
+ outstringcontown @beta {
params {
@out l: list<string> @move;
}
}
outarray {
+ [[Docs for method outarray. @since 1.66]]
params {
@out l: array<string>;
}
}
outarrayown {
+ [[Docs for method outarryown. @since 1.66]]
params {
@out l: array<string> @move;
}
@@ -150,47 +157,56 @@ class Complex extends Efl.Object
}
}
outiterator {
+ [[Docs for method outiterator. @since 1.66]]
params {
@out l: iterator<int>;
}
}
outiteratorown {
+ [[Docs for method outiteratorown. @since 1.66]]
params {
@out l: iterator<int> @move;
}
}
outaccessor {
+ [[Docs for method outaccessor. @since 1.66]]
params {
@out l: accessor<int>;
}
}
outaccessorown {
+ [[Docs for method outaccessorown. @since 1.66]]
params {
@out l: accessor<int> @move;
}
}
- foo {
+ foo @beta {
params {
l: list<string>;
}
}
bar {
+ [[Docs for method bar. @since 1.66]]
return: array<string>;
}
wrapper_r {
+ [[Docs for method wrapper_r. @since 1.66]]
return: Complex;
}
wrapper_in {
+ [[Docs for method wrapper_in. @since 1.66]]
params {
@in a1: Complex;
}
}
wrapper_inout {
+ [[Docs for method wrapper_inout. @since 1.66]]
params {
@inout a1: Complex;
}
}
wrapper_out {
+ [[Docs for method wrapper_out. @since 1.66]]
params {
@out a1: Complex;
}
diff --git a/src/tests/eolian_cxx/complex_cxx.cc b/src/tests/eolian_cxx/complex_cxx.cc
index 8d73fb87d5..7df39152f5 100644
--- a/src/tests/eolian_cxx/complex_cxx.cc
+++ b/src/tests/eolian_cxx/complex_cxx.cc
@@ -21,6 +21,9 @@
#include <Eina.h>
#include <Eo.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "complex.eo.h"
#include "complex.eo.hh"
diff --git a/src/tests/eolian_cxx/cyclic1.eo b/src/tests/eolian_cxx/cyclic1.eo
index 519a08e760..0a19603ad9 100644
--- a/src/tests/eolian_cxx/cyclic1.eo
+++ b/src/tests/eolian_cxx/cyclic1.eo
@@ -1,5 +1,5 @@
-class Cyclic1
-{
+class Cyclic1 {
+ [[Docs for class Cyclic1. @since 1.66]]
methods {
foo {
return: Cyclic2;
diff --git a/src/tests/eolian_cxx/cyclic2.eo b/src/tests/eolian_cxx/cyclic2.eo
index 1fbed3f1f4..5d0c19585e 100644
--- a/src/tests/eolian_cxx/cyclic2.eo
+++ b/src/tests/eolian_cxx/cyclic2.eo
@@ -1,5 +1,5 @@
-class Cyclic2
-{
+class Cyclic2 {
+ [[Docs for class Cyclic2. @since 1.66]]
methods {
foo {
return: Cyclic1;
diff --git a/src/tests/eolian_cxx/docs.eo b/src/tests/eolian_cxx/docs.eo
index 55c7dc28e6..d18dcce344 100644
--- a/src/tests/eolian_cxx/docs.eo
+++ b/src/tests/eolian_cxx/docs.eo
@@ -19,7 +19,10 @@ struct Foo {
}
enum Bar {
- [[Docs for enum Bar.]]
+ [[Docs for enum Bar.
+
+ @since 1.66
+ ]]
blah = 0,
foo = 1, [[Docs for foo.]]
bar = 2 [[Docs for bar.]]
@@ -28,12 +31,12 @@ enum Bar {
type Alias: Bar; [[Docs for typedef.
More docs for typedef.
- See @Bar. @since 2.0
+ See @Bar. @since 1.66
]]
-const pants: int = 150; [[Docs for var.]]
+const pants: int = 150; [[Docs for var. @since 1.66]]
-struct Opaque; [[Opaque struct docs. See @Foo for another struct.]]
+struct Opaque; [[Opaque struct docs. See @Foo for another struct. @since 1.66]]
class Docs {
[[Docs for class.
@@ -51,7 +54,7 @@ class Docs {
@Bar.foo
@Docs
- @since 1.17
+ @since 1.66
]]
methods {
meth {
@@ -66,7 +69,7 @@ class Docs {
@property prop {
[[Property common documentation.
- @since 1.18
+ @since 1.66
]]
get {
[[Get documentation.]]
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_address_of.cc b/src/tests/eolian_cxx/eolian_cxx_test_address_of.cc
index 9b108a1b4b..6665f1af3f 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_address_of.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_address_of.cc
@@ -19,6 +19,9 @@
#include <Eo.hh>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include <a.eo.hh>
#include <b.eo.hh>
#include <c.eo.hh>
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc
index c6e0381551..47a4e9c49c 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc
@@ -21,6 +21,10 @@
#include <map>
+#define GENERIC_BETA
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include <generic.eo.hh>
#include <generic.eo.impl.hh>
#include <name1_name2_type_generation.eo.hh>
@@ -160,8 +164,8 @@ EFL_START_TEST(eolian_cxx_test_type_callback)
efl::eo::eo_init i;
bool event1 = false, event2 = false, event3 = false, event4 = false
- , event5 = false;
-
+ , event5 = false, event6 = false;
+
nonamespace::Generic g(efl::eo::instantiate);
efl::eolian::event_add(g.prefix_event1_event, g, [&] (nonamespace::Generic)
{
@@ -183,22 +187,28 @@ EFL_START_TEST(eolian_cxx_test_type_callback)
// FIXME eina::range_array is incompatible with eina::string_view
//ck_assert(*e.begin() == efl::eina::string_view{"42"});
});
- efl::eolian::event_add(g.prefix_event5_event, g, [&] (nonamespace::Generic, Generic_Event)
+ efl::eolian::event_add(g.prefix_event5_event, g, [&] (nonamespace::Generic, Generic_Beta_Event)
{
event5 = true;
});
+ efl::eolian::event_add(g.prefix_event6_event, g, [&] (nonamespace::Generic, Generic_Event)
+ {
+ event6 = true;
+ });
g.call_event1();
g.call_event2();
g.call_event3();
g.call_event4();
g.call_event5();
+ g.call_event6();
ck_assert(event1);
ck_assert(event2);
ck_assert(event3);
ck_assert(event4);
ck_assert(event5);
+ ck_assert(event6);
}
EFL_END_TEST
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_cyclic.cc b/src/tests/eolian_cxx/eolian_cxx_test_cyclic.cc
index 28c5ebd485..158728d4f3 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_cyclic.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_cyclic.cc
@@ -24,6 +24,9 @@ typedef Eo Cyclic1;
typedef Eo Cyclic2;
}
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include <cyclic1.eo.h>
#include <cyclic2.eo.h>
#include <cyclic1.eo.hh>
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc b/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc
index eb683e3312..a0372b3606 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc
@@ -70,7 +70,7 @@ EFL_START_TEST(eolian_cxx_test_class_docs)
"@Foo.field1 "
"@Bar.foo "
"@Docs");
- ck_assert_str_eq(doc.since.c_str(), "1.17");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
}
EFL_END_TEST
@@ -89,12 +89,12 @@ EFL_START_TEST(eolian_cxx_test_function_docs)
documentation_def doc = func.documentation;
ck_assert_str_eq(doc.summary.c_str(), "Method documentation.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.17"); // Since is inherited from parent if not present, except when no doc is present ofr this member.
+ ck_assert_str_eq(doc.since.c_str(), "1.66"); // Since is inherited from parent if not present, except when no doc is present ofr this member.
doc = func.return_documentation;
ck_assert_str_eq(doc.summary.c_str(), "Return documentation.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.17");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
auto param_iter = func.parameters.begin();
@@ -102,7 +102,7 @@ EFL_START_TEST(eolian_cxx_test_function_docs)
doc = param_iter->documentation;
ck_assert_str_eq(doc.summary.c_str(), "Param documentation.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.17");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
param_iter++;
@@ -118,7 +118,7 @@ EFL_START_TEST(eolian_cxx_test_function_docs)
doc = param_iter->documentation;
ck_assert_str_eq(doc.summary.c_str(), "Another param documentation.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.17");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
}
EFL_END_TEST
@@ -140,12 +140,12 @@ EFL_START_TEST(eolian_cxx_test_property_docs)
documentation_def doc = func.property_documentation;
ck_assert_str_eq(doc.summary.c_str(), "Property common documentation.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.18");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
doc = func.documentation; // Actual getdocumentation.
ck_assert_str_eq(doc.summary.c_str(), "Get documentation.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class*
+ ck_assert_str_eq(doc.since.c_str(), "1.66"); // Members inherit from parent *class*
func_iter = std::find_if(klass.functions.begin(), klass.functions.end(),
[](const function_def& f) {
@@ -158,13 +158,13 @@ EFL_START_TEST(eolian_cxx_test_property_docs)
doc = func.documentation; // Actual getdocumentation.
ck_assert_str_eq(doc.summary.c_str(), "Set documentation.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class*
+ ck_assert_str_eq(doc.since.c_str(), "1.66"); // Members inherit from parent *class*
auto property_iter = klass.properties.begin();
auto property = *property_iter;
doc = property.documentation;
ck_assert_str_eq(doc.summary.c_str(), "Property common documentation.");
- ck_assert_str_eq(doc.since.c_str(), "1.18");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
}
EFL_END_TEST
@@ -180,7 +180,7 @@ EFL_START_TEST(eolian_cxx_test_event_docs)
documentation_def doc = event.documentation;
ck_assert_str_eq(doc.summary.c_str(), "Event docs.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class*
+ ck_assert_str_eq(doc.since.c_str(), "1.66"); // Members inherit from parent *class*
}
EFL_END_TEST
@@ -198,7 +198,7 @@ EFL_START_TEST(eolian_cxx_test_enum_docs)
documentation_def doc = _enum.documentation;
ck_assert_str_eq(doc.summary.c_str(), "Docs for enum Bar.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
// fields
auto field_iter = _enum.fields.begin();
@@ -215,7 +215,7 @@ EFL_START_TEST(eolian_cxx_test_enum_docs)
doc = field_iter->documentation;
ck_assert_str_eq(doc.summary.c_str(), "Docs for foo.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
field_iter++;
@@ -223,7 +223,7 @@ EFL_START_TEST(eolian_cxx_test_enum_docs)
doc = field_iter->documentation;
ck_assert_str_eq(doc.summary.c_str(), "Docs for bar.");
ck_assert_str_eq(doc.description.c_str(), "");
- ck_assert_str_eq(doc.since.c_str(), "");
+ ck_assert_str_eq(doc.since.c_str(), "1.66");
}
EFL_END_TEST
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_inheritance.cc b/src/tests/eolian_cxx/eolian_cxx_test_inheritance.cc
index 2a7fb04733..19a53925dd 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_inheritance.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_inheritance.cc
@@ -20,6 +20,9 @@
#include <Eo.h>
#include <Ecore.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include <simple.eo.hh>
#include "eolian_cxx_suite.h"
@@ -33,7 +36,7 @@
// bool simple_get()
// {
-// printf("calling bar::%s\n", __FUNCTION__);
+// printf("calling bar::%s\n", __func__);
// return false;
// }
// };
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc b/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc
index 16fc984db4..e1d585cfab 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc
@@ -20,6 +20,9 @@
#include <Eo.h>
#include <Ecore.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include <a.eo.hh>
#include "eolian_cxx_suite.h"
diff --git a/src/tests/eolian_cxx/generic.c b/src/tests/eolian_cxx/generic.c
index 0bbf894457..dd337f0516 100644
--- a/src/tests/eolian_cxx/generic.c
+++ b/src/tests/eolian_cxx/generic.c
@@ -8,6 +8,9 @@
#define GENERIC_BETA
#define GENERIC_PROTECTED
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "generic.eo.h"
#include "generic_interface.eo.h"
@@ -125,10 +128,21 @@ static void _generic_call_event5(Eo *obj, Generic_Data* pd EINA_UNUSED)
const char *s = "42";
Eina_List* p = eina_list_append(NULL, s);
- Generic_Event e = {.field1 = 42, .field2 = p};
+ Generic_Beta_Event e = {.field1 = 42, .field2 = p};
efl_event_callback_call(obj, GENERIC_EVENT_PREFIX_EVENT5, &e);
eina_list_free(p);
}
+static void _generic_call_event6(Eo *obj, Generic_Data* pd EINA_UNUSED)
+{
+ const char *s = "42";
+ Eina_Array* p = eina_array_new(1);
+
+ eina_array_push(p, s);
+
+ Generic_Event e = {.field1 = 42, .field2 = p};
+ efl_event_callback_call(obj, GENERIC_EVENT_PREFIX_EVENT6, &e);
+ eina_array_free(p);
+}
static void _generic_protected_method1(Eo *obj EINA_UNUSED, Generic_Data* pd EINA_UNUSED)
{
}
diff --git a/src/tests/eolian_cxx/generic.eo b/src/tests/eolian_cxx/generic.eo
index cf7aa3b31e..0d8f9b263e 100644
--- a/src/tests/eolian_cxx/generic.eo
+++ b/src/tests/eolian_cxx/generic.eo
@@ -1,15 +1,21 @@
-struct Generic.Event
+struct @beta Generic.Beta_Event
{
field1: int;
field2: list<string>;
}
-class Generic extends Efl.Object implements Generic_Interface
-{
+struct Generic.Event {
+ [[Docs for struct Generic.Event. @since 1.66]]
+ field1: int;
+ field2: array<string>;
+}
+
+class Generic extends Efl.Object implements Generic_Interface {
data: Generic_Data;
methods {
@property req_ctor_a_value {
+ [[Docs for property req_actor_a_value. @since 1.66]]
get {
}
values {
@@ -17,6 +23,7 @@ class Generic extends Efl.Object implements Generic_Interface
}
}
@property opt_ctor_a_value {
+ [[Docs for property property opt_ctor_a_value. @since 1.66]]
get {
}
values {
@@ -24,92 +31,115 @@ class Generic extends Efl.Object implements Generic_Interface
}
}
required_ctor_a {
+ [[Docs for method required_ctor_a. @since 1.66]]
params {
@in value: int;
}
}
required_ctor_b {
+ [[Docs for method required_ctor_b. @since 1.66]]
params {
@in value: int;
}
}
optional_ctor_a {
+ [[Docs for method optional_ctor_a. @since 1.66]]
params {
@in value: int;
}
}
optional_ctor_b {
+ [[Docs for method optional_ctor_b. @since 1.66]]
params {
@in value: int;
}
}
@property req_ctor_b_value {
+ [[Docs for property rec_ctor_b_value. @since 1.66]]
get {}
values {
value: int;
}
}
@property opt_ctor_b_value {
+ [[Docs for property opt_ctor_b_value. @since 1.66]]
get {}
values {
value: int;
}
}
out_required_ctor_a {
+ [[Docs for method out_required_ctor_a. @since 1.66]]
params {
@out value: int;
}
}
out_required_ctor_b {
+ [[Docs for method out_required_ctor_b. @since 1.66]]
params {
@out value: int;
}
}
out_optional_ctor_a {
+ [[Docs for method out_optional_ctor_a. @since 1.66]]
params {
@out value: int;
}
}
out_optional_ctor_b {
+ [[Docs for method out_optional_ctor_b. @since 1.66]]
params {
@out value: int;
}
}
call_event1 {
+ [[Docs for method call_event1. @since 1.66]]
}
call_event2 {
+ [[Docs for method call_event2. @since 1.66]]
}
call_event3 {
+ [[Docs for method call_event3. @since 1.66]]
}
call_event4 {
+ [[Docs for method call_event4. @since 1.66]]
}
call_event5 {
+ [[Docs for method call_event5. @since 1.66]]
+ }
+ call_event6 {
+ [[Docs for method call_event6. @since 1.66]]
}
protected_method1 @protected {
+ [[Docs for protected method protected_method1. @since 1.66]]
}
beta_method1 @beta {
}
protected_beta_method1 @protected @beta {
}
event_param {
+ [[Docs for method event_param. @since 1.66]]
params {
value: event;
}
}
const_event_param {
+ [[Docs for method const_event_param. @since 1.66]]
params {
value: const(event);
}
}
binbuf_param {
+ [[Docs for method binbuf_param. @since 1.66]]
params {
value: binbuf;
}
}
const_binbuf_param {
+ [[Docs for method const_binbuf_param. @since 1.66]]
params {
value: const(binbuf);
}
@@ -129,7 +159,8 @@ class Generic extends Efl.Object implements Generic_Interface
prefix,event2: Generic;
prefix,event3: int;
prefix,event4: const(array<string>);
- prefix,event5: Generic.Event;
+ prefix,event5 @beta: Generic.Beta_Event;
+ prefix,event6: Generic.Event;
protected,event1 @protected: void;
beta,event1 @beta: void;
protected,beta,event1 @beta @protected: void;
diff --git a/src/tests/eolian_cxx/generic_interface.eo b/src/tests/eolian_cxx/generic_interface.eo
index 9f11c1a73c..659faa4531 100644
--- a/src/tests/eolian_cxx/generic_interface.eo
+++ b/src/tests/eolian_cxx/generic_interface.eo
@@ -1,3 +1,3 @@
-interface Generic_Interface
-{
+interface Generic_Interface {
+ [[Docs for interface Generic_Interface. @since 1.66]]
}
diff --git a/src/tests/eolian_cxx/meson.build b/src/tests/eolian_cxx/meson.build
index 23b2727eaf..9e0fbb366e 100644
--- a/src/tests/eolian_cxx/meson.build
+++ b/src/tests/eolian_cxx/meson.build
@@ -55,6 +55,7 @@ foreach eo_file : pub_eo_files
command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
'-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
'-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
+ '-e', 'EOLIANCXXTEST_API',
'-gch', '@INPUT@'])
endforeach
diff --git a/src/tests/eolian_cxx/name1_name2_type_generation.c b/src/tests/eolian_cxx/name1_name2_type_generation.c
index 9b03b36237..2d06a5f55e 100644
--- a/src/tests/eolian_cxx/name1_name2_type_generation.c
+++ b/src/tests/eolian_cxx/name1_name2_type_generation.c
@@ -14,6 +14,9 @@ typedef struct _Type_Generation_Data Type_Generation_Data;
#define MY_CLASS TYPE1_TYPE2_TYPE_GENERATION_CLASS
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "name1_name2_type_generation.eo.h"
void _name1_name2_type_generation_invoidptr(Eo *obj EINA_UNUSED, Type_Generation_Data *pd EINA_UNUSED, void *v)
diff --git a/src/tests/eolian_cxx/name_name.c b/src/tests/eolian_cxx/name_name.c
index 89f9a73844..0515225e22 100644
--- a/src/tests/eolian_cxx/name_name.c
+++ b/src/tests/eolian_cxx/name_name.c
@@ -11,6 +11,9 @@ typedef struct Ns_Name_Data Ns_Name_Data;
struct Ns_Name_Other_Data {};
typedef struct Ns_Name_Other_Data Ns_Name_Other_Data;
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "name_name.eo.h"
#include "name_name.eo.c"
#include "ns_name.eo.h"
diff --git a/src/tests/eolian_cxx/name_name.eo b/src/tests/eolian_cxx/name_name.eo
index 64b0db1ab4..3fe2224ce3 100644
--- a/src/tests/eolian_cxx/name_name.eo
+++ b/src/tests/eolian_cxx/name_name.eo
@@ -1,3 +1,4 @@
class Name.Name {
+ [[Docs for class Name.Name. @since 1.66]]
}
diff --git a/src/tests/eolian_cxx/name_name_cxx.cc b/src/tests/eolian_cxx/name_name_cxx.cc
index 00e1d13666..f0d9740b7d 100644
--- a/src/tests/eolian_cxx/name_name_cxx.cc
+++ b/src/tests/eolian_cxx/name_name_cxx.cc
@@ -20,6 +20,9 @@
#include <Eo.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "name_name.eo.h"
#include "name_name.eo.hh"
#include "ns_name.eo.h"
diff --git a/src/tests/eolian_cxx/ns_name.eo b/src/tests/eolian_cxx/ns_name.eo
index 9610d82f23..7bc76bcace 100644
--- a/src/tests/eolian_cxx/ns_name.eo
+++ b/src/tests/eolian_cxx/ns_name.eo
@@ -1,3 +1,4 @@
class Ns.Name {
+ [[Docs for NS.Name. @since 1.66]]
}
diff --git a/src/tests/eolian_cxx/ns_name_other.eo b/src/tests/eolian_cxx/ns_name_other.eo
index a8983c45c6..c20bf4d2e3 100644
--- a/src/tests/eolian_cxx/ns_name_other.eo
+++ b/src/tests/eolian_cxx/ns_name_other.eo
@@ -1,3 +1,4 @@
class Ns.Name.Other {
+ [[Docs for Ns.Name.Other. @since 1.66]]
}
diff --git a/src/tests/eolian_cxx/property_holder.eo b/src/tests/eolian_cxx/property_holder.eo
index 8509ffe648..91a9788d73 100644
--- a/src/tests/eolian_cxx/property_holder.eo
+++ b/src/tests/eolian_cxx/property_holder.eo
@@ -1,5 +1,5 @@
-class Property_Holder extends Efl.Object
-{
+class Property_Holder extends Efl.Object {
+ [[Docs for class Property_Holder. @since 1.66]]
methods {
some_method {
return: int;
diff --git a/src/tests/eolian_cxx/simple.c b/src/tests/eolian_cxx/simple.c
index 718e5c3549..7b7d630eca 100644
--- a/src/tests/eolian_cxx/simple.c
+++ b/src/tests/eolian_cxx/simple.c
@@ -7,6 +7,9 @@
#include <Eo.h>
#include <Ecore.h>
+#define EOLIANCXXTEST_API
+#define EOLIANCXXTEST_API_WEAK
+
#include "simple.eo.h"
#define MY_CLASS SIMPLE_CLASS
@@ -18,7 +21,7 @@ static Eo *_simple_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
static Eina_Bool _simple_simple_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)
{
- printf("calling %s\n", __FUNCTION__);
+ printf("calling %s\n", __func__);
return EINA_TRUE;
}
@@ -27,7 +30,7 @@ static Eina_Bool _simple_name_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, con
{
static const char* _name= "simple_class";
- printf("calling %s= simples class\n", __FUNCTION__);
+ printf("calling %s= simples class\n", __func__);
*name = _name;
return EINA_TRUE;
diff --git a/src/tests/eolian_cxx/simple.eo b/src/tests/eolian_cxx/simple.eo
index f6f340f131..08725366c8 100644
--- a/src/tests/eolian_cxx/simple.eo
+++ b/src/tests/eolian_cxx/simple.eo
@@ -1,5 +1,5 @@
-class Simple extends Efl.Object
-{
+class Simple extends Efl.Object {
+ [[Docs for class Simple. @since 1.66]]
data: null;
methods {
simple_get {
diff --git a/src/tests/eolian_js/constructor_method_class.eo b/src/tests/eolian_js/constructor_method_class.eo
index 1bcfd375eb..b90518052b 100644
--- a/src/tests/eolian_js/constructor_method_class.eo
+++ b/src/tests/eolian_js/constructor_method_class.eo
@@ -1,5 +1,5 @@
-class Constructor_Method_Class extends Efl.Object
-{
+class Constructor_Method_Class extends Efl.Object {
+ [[Docs for class Constructor_Method_Class. @since 1.66]]
data: Constructor_Method_Class_Data;
methods {
@property fail {
diff --git a/src/tests/eolian_js/test_object.eo b/src/tests/eolian_js/test_object.eo
index 21bc5b8311..0d713d8623 100644
--- a/src/tests/eolian_js/test_object.eo
+++ b/src/tests/eolian_js/test_object.eo
@@ -1,4 +1,5 @@
enum Test.Enum_Ex {
+ [[Docs for enum Test.Enum_Ex. @since 1.66]]
first = 0,
second,
third,
@@ -6,11 +7,13 @@ enum Test.Enum_Ex {
}
struct Test.Struct_Ex {
+ [[Docs for struct Test.Struct_Ex. @since 1.66]]
value_int: int;
value_enum: Test.Enum_Ex;
}
class Test.Object extends Efl.Object {
+ [[Docs for class Test.Object. @since 1.66]]
methods {
method_integral_in_a_check {
[[ tests integral in ]]
diff --git a/src/tests/evas/efl_canvas_animation.c b/src/tests/evas/efl_canvas_animation.c
index 19b47a6429..61fc264b69 100644
--- a/src/tests/evas/efl_canvas_animation.c
+++ b/src/tests/evas/efl_canvas_animation.c
@@ -38,7 +38,7 @@ EFL_START_TEST(efl_canvas_animation_default_value)
{
Efl_Canvas_Animation *animation = efl_new(EFL_CANVAS_ANIMATION_CLASS);
- fail_if(efl_animation_duration_get(animation) == 0.0);
+ fail_if(EINA_DBL_EQ(efl_animation_duration_get(animation), 0.0));
}
EFL_END_TEST
diff --git a/src/tests/evas/evas_suite.c b/src/tests/evas/evas_suite.c
index eded3ae08f..523c10dc76 100644
--- a/src/tests/evas/evas_suite.c
+++ b/src/tests/evas/evas_suite.c
@@ -20,14 +20,9 @@ static const Efl_Test_Case etc[] = {
{ "Filters", evas_test_filters },
{ "Images", evas_test_image_object },
{ "Images", evas_test_image_object2 },
- { "Meshes", evas_test_mesh },
- { "Meshes", evas_test_mesh1 },
- { "Meshes", evas_test_mesh2 },
- { "Meshes", evas_test_mesh3 },
{ "Masking", evas_test_mask },
{ "Evas GL", evas_test_evasgl },
{ "Object Smart", evas_test_object_smart },
- { "Matrix", evas_test_matrix },
{ "Events", evas_test_events },
{ "Efl Canvas Animation", efl_test_canvas_animation },
{ NULL, NULL }
diff --git a/src/tests/evas/evas_suite.h b/src/tests/evas/evas_suite.h
index 90a7ac0860..ec106315b5 100644
--- a/src/tests/evas/evas_suite.h
+++ b/src/tests/evas/evas_suite.h
@@ -14,14 +14,9 @@ void evas_test_render_engines(TCase *tc);
void evas_test_filters(TCase *tc);
void evas_test_image_object(TCase *tc);
void evas_test_image_object2(TCase *tc);
-void evas_test_mesh(TCase *tc);
-void evas_test_mesh1(TCase *tc);
-void evas_test_mesh2(TCase *tc);
-void evas_test_mesh3(TCase *tc);
void evas_test_mask(TCase *tc);
void evas_test_evasgl(TCase *tc);
void evas_test_object_smart(TCase *tc);
-void evas_test_matrix(TCase *tc);
void evas_test_events(TCase *tc);
void efl_test_canvas_animation(TCase *tc);
diff --git a/src/tests/evas/evas_test_filters.c b/src/tests/evas/evas_test_filters.c
index f77e16a671..87c09e0961 100644
--- a/src/tests/evas/evas_test_filters.c
+++ b/src/tests/evas/evas_test_filters.c
@@ -448,7 +448,7 @@ EFL_START_TEST(evas_filter_state_test)
"state render test failed: %p (%#x)", pixels, pixels ? *pixels : 0);
efl_gfx_filter_state_get(to, &s1, &v1, &s2, &v2, &p);
- fail_unless(strequal(s1, "state1") && strequal(s2, "state2") && (v1 == 0.0) && (v2 == 1.0) && (p == 0.5),
+ fail_unless(strequal(s1, "state1") && strequal(s2, "state2") && EINA_DBL_EQ(v1, 0.0) && EINA_DBL_EQ(v2, 1.0) && EINA_DBL_EQ(p, 0.5),
"got: %s %f %s %f %f", s1, v1, s2, v2, p);
/* data test */
diff --git a/src/tests/evas/evas_test_image.c b/src/tests/evas/evas_test_image.c
index bfc581992a..5753651f30 100644
--- a/src/tests/evas/evas_test_image.c
+++ b/src/tests/evas/evas_test_image.c
@@ -9,6 +9,7 @@
#include <Evas.h>
#include <Ecore_Evas.h>
+#include <Ecore.h>
#include "evas_suite.h"
#include "evas_tests_helpers.h"
@@ -52,6 +53,11 @@ static const char *exts[] = {
,"jpeg"
,"jpg"
#endif
+#ifdef BUILD_LOADER_HEIF
+ ,"heif"
+ ,"heic"
+// ,"avif"
+#endif
};
EFL_START_TEST(evas_object_image_loader)
@@ -642,8 +648,18 @@ _file_to_memory(const char *filename, char **result)
fseek(f, 0, SEEK_END);
size = ftell(f);
+ if (size <= 0)
+ {
+ fclose(f);
+ return -1;
+ }
fseek(f, 0, SEEK_SET);
*result = (char *)malloc(size + 1);
+ if (*result == NULL)
+ {
+ fclose(f);
+ return -1;
+ }
if ((size_t)size != fread(*result, sizeof(char), size, f))
{
free(*result);
@@ -668,7 +684,7 @@ EFL_START_TEST(evas_object_image_cached_data_comparision)
const uint32_t *d, *n_d;
const uint32_t *d2, *n_d2;
const char *img_path, *img_path2;
- Evas_Object *img, *img2;
+ Evas_Object *img, *img2, *img3, *img4;
Eina_Rect region;
Evas *e = _setup_evas();
@@ -697,39 +713,39 @@ EFL_START_TEST(evas_object_image_cached_data_comparision)
evas_object_move(img2, 250, 250);
evas_object_show(img2);
- evas_object_image_size_get(img, &w2, &h2);
- d2 = evas_object_image_data_get(img, EINA_FALSE);
+ evas_object_image_size_get(img2, &w2, &h2);
+ d2 = evas_object_image_data_get(img2, EINA_FALSE);
for (i = 0; i < 100; i++)
{
- evas_object_del(img);
- evas_object_del(img2);
-
- img = evas_object_image_add(e);
- evas_object_image_memfile_set(img, content, size, "png", NULL);
- evas_object_image_fill_set(img, 0, 0, 250, 250);
- evas_object_resize(img, 250, 250);
- evas_object_move(img, 0, 0);
- evas_object_show(img);
+ img3 = evas_object_image_add(e);
+ evas_object_image_memfile_set(img3, content, size, "png", NULL);
+ evas_object_image_fill_set(img3, 0, 0, 250, 250);
+ evas_object_resize(img3, 250, 250);
+ evas_object_move(img3, 0, 0);
+ evas_object_show(img3);
- evas_object_image_size_get(img, &n_w, &n_h);
- n_d = evas_object_image_data_get(img, EINA_FALSE);
+ evas_object_image_size_get(img3, &n_w, &n_h);
+ n_d = evas_object_image_data_get(img3, EINA_FALSE);
fail_if(w != n_w || h != n_h);
fail_if(memcmp(d, n_d, w * h * 4));
- img2 = evas_object_image_add(e);
- evas_object_image_memfile_set(img2, content2, size2, "png", NULL);
- evas_object_image_fill_set(img2, 0, 0, 250, 250);
- evas_object_resize(img2, 250, 250);
- evas_object_move(img2, 250, 250);
- evas_object_show(img2);
+ img4 = evas_object_image_add(e);
+ evas_object_image_memfile_set(img4, content2, size2, "png", NULL);
+ evas_object_image_fill_set(img4, 0, 0, 250, 250);
+ evas_object_resize(img4, 250, 250);
+ evas_object_move(img4, 250, 250);
+ evas_object_show(img4);
- evas_object_image_size_get(img, &n_w2, &n_h2);
- n_d2 = evas_object_image_data_get(img, EINA_FALSE);
+ evas_object_image_size_get(img4, &n_w2, &n_h2);
+ n_d2 = evas_object_image_data_get(img4, EINA_FALSE);
fail_if(w2 != n_w2 || h2 != n_h2);
fail_if(memcmp(d2, n_d2, w2 * h2 * 4));
+
+ evas_object_del(img3);
+ evas_object_del(img4);
}
region = efl_gfx_image_content_region_get(img);
@@ -751,6 +767,9 @@ EFL_START_TEST(evas_object_image_cached_data_comparision)
ck_assert_int_eq(region.y, 8);
ck_assert_int_eq(region.w, 120);
ck_assert_int_eq(region.h, 77);
+
+ evas_object_del(img);
+ evas_object_del(img2);
}
EFL_END_TEST
@@ -903,7 +922,8 @@ EFL_START_TEST(evas_object_image_map_unmap)
// save file, verify its pixels
fd = eina_file_mkstemp("/tmp/evas-test.XXXXXX.png", &tmp);
- close(fd);
+ fail_if(fd <= 0);
+ fail_if(close(fd));
if (efl_file_save(o, tmp, NULL, NULL))
{
Eina_Rw_Slice sorig, sdest;
@@ -1117,6 +1137,92 @@ EFL_START_TEST(evas_object_image_9patch)
}
EFL_END_TEST
+EFL_START_TEST(evas_object_image_save_from_proxy)
+{
+ Evas *e;
+ Evas_Object *obj, *proxy, *ref;
+ int w, h, r_w, r_h;
+ const uint32_t *d, *r_d;
+ const char *img_path, *img_path2;
+ Eina_Bool ret;
+
+ e = _setup_evas();
+ img_path = TESTS_IMG_DIR "/Pic1.png";
+ img_path2 = TESTS_IMG_DIR "/Pic1_saved.png";
+
+ obj = evas_object_image_add(e);
+ proxy = evas_object_image_add(e);
+ ref = evas_object_image_add(e);
+
+ evas_object_image_file_set(obj, img_path, NULL);
+ fail_if(evas_object_image_load_error_get(obj) != EVAS_LOAD_ERROR_NONE);
+ evas_object_image_size_get(obj, &w, &h);
+ d = evas_object_image_data_get(obj, EINA_FALSE);
+
+ evas_object_image_source_set(proxy, obj);
+ ret = evas_object_image_save(proxy, img_path2, NULL, NULL);
+ fail_if(!ret);
+
+ evas_object_image_file_set(ref, img_path2, NULL);
+ fail_if(evas_object_image_load_error_get(ref) != EVAS_LOAD_ERROR_NONE);
+ evas_object_image_size_get(ref, &r_w, &r_h);
+ r_d = evas_object_image_data_get(ref, EINA_FALSE);
+
+ fail_if(w != r_w || h != r_h);
+ fail_if(memcmp(d, r_d, w * h * 4));
+
+ evas_object_del(proxy);
+ evas_object_del(obj);
+ evas_object_del(ref);
+
+ remove(img_path2);
+
+ evas_free(e);
+}
+EFL_END_TEST
+
+static void
+_preload(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+ int *called = data;
+ int w, h;
+
+ *called = 1;
+ evas_object_image_size_get(obj, &w, &h);
+ ck_assert_int_ge(w, 1);
+ ck_assert_int_ge(h, 1);
+ ecore_main_loop_quit();
+}
+
+EFL_START_TEST(evas_object_image_load_head_skip)
+{
+ Evas *e;
+ Evas_Object *obj;
+ const char *img_path;
+ int called = 0;
+
+ e = _setup_evas();
+ img_path = TESTS_IMG_DIR "/Pic1.png";
+
+ obj = evas_object_image_filled_add(e);
+ evas_object_resize(obj, 100, 100);
+
+ evas_object_image_load_head_skip_set(obj, EINA_TRUE);
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_IMAGE_PRELOADED, _preload, &called);
+ evas_object_image_file_set(obj, img_path, NULL);
+ evas_object_image_preload(obj, EINA_FALSE);
+
+ ck_assert(!efl_file_mmap_get(obj));
+ ck_assert(!efl_file_loaded_get(obj));
+ ecore_main_loop_begin();
+ ck_assert_int_eq(called, 1);
+ ck_assert(efl_file_loaded_get(obj));
+ ck_assert(efl_file_mmap_get(obj));
+
+ evas_free(e);
+}
+EFL_END_TEST
+
void evas_test_image_object(TCase *tc)
{
tcase_add_test(tc, evas_object_image_api);
@@ -1143,6 +1249,8 @@ void evas_test_image_object(TCase *tc)
tcase_add_test(tc, evas_object_image_partially_load_orientation);
tcase_add_test(tc, evas_object_image_cached_data_comparision);
tcase_add_test(tc, evas_object_image_9patch);
+ tcase_add_test(tc, evas_object_image_save_from_proxy);
+ tcase_add_test(tc, evas_object_image_load_head_skip);
}
diff --git a/src/tests/evas/evas_test_matrix.c b/src/tests/evas/evas_test_matrix.c
deleted file mode 100644
index 0f0fb2e4bc..0000000000
--- a/src/tests/evas/evas_test_matrix.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include "../../lib/evas/include/evas_common_private.h"
-#include "../../lib/evas/include/evas_private.h"
-
-#include "evas_suite.h"
-#include "evas_tests_helpers.h"
-
-EFL_START_TEST(evas_matrix)
-{
- Eina_Vector3 position;
- Eina_Quaternion orientation;
- Eina_Vector3 scale;
- Eina_Matrix4 mat;
-
- eina_vector3_set(&position, 5.0, 3.0, 2.0);
- eina_quaternion_set(&orientation, 30.0, 1.0, 0.0, 0.0);
- eina_vector3_set(&scale, 1.0, 2.0, 1.0);
-
- evas_mat4_build(&mat, &position, &orientation, &scale);
- fail_if((mat.xx != -1) || (mat.xy != 60) ||
- (mat.wx != 5) || (mat.wy != 3) ||
- (mat.wz != 2) || (mat.ww != 1));
-
- evas_mat4_inverse_build(&mat, &position, &orientation, &scale);
- fail_if((mat.xx - 0.99 < DBL_EPSILON) || (mat.xy - 0.0 < DBL_EPSILON) ||
- (mat.yx -0.0 < DBL_EPSILON) || (mat.yy -0.49 < DBL_EPSILON));
-}
-EFL_END_TEST
-
-void evas_test_matrix(TCase *tc)
-{
- (void) _setup_evas;
- tcase_add_test(tc, evas_matrix);
-}
diff --git a/src/tests/evas/evas_test_mesh.c b/src/tests/evas/evas_test_mesh.c
deleted file mode 100644
index 3bf3c3032d..0000000000
--- a/src/tests/evas/evas_test_mesh.c
+++ /dev/null
@@ -1,202 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-
-#include "../../lib/evas/include/evas_common_private.h"
-#include "../../lib/evas/include/evas_private.h"
-
-#include "evas_suite.h"
-#include "evas_tests_helpers.h"
-
-#define TESTS_MESH_DIR TESTS_SRC_DIR"/meshes"
-#define TESTS_OBJ_MESH_DIR TESTS_MESH_DIR"/obj"
-#define TESTS_MD2_MESH_DIR TESTS_MESH_DIR"/md2"
-#define TESTS_PLY_MESH_DIR TESTS_MESH_DIR"/ply"
-
-#define COMPARE_GEOMETRICS(a) \
- vb1 = &f1->vertices[a]; \
- vb2 = &f2->vertices[a]; \
- if ((a == EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION) && \
- ((vb1->data == NULL) || (vb2->data == NULL))) \
- return 1; \
- if ((vb1->data != NULL) && (vb2->data != NULL)) \
- { \
- src1 = (float *)vb1->data; \
- src2 = (float *)vb2->data; \
- for (i = 0; i < pd1->vertex_count; i++) \
- { \
- if ((src1[0] != src2[0]) || (src1[1] != src2[1])) \
- return 1; \
- if (a != EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD) \
- if (src1[2] != src2[2]) \
- return 1; \
- src1 += f1->vertices[a].element_count; \
- src2 += f2->vertices[a].element_count; \
- } \
- }
-
-static Evas_Canvas3D_Mesh_Frame *
-return_zero_frame(Evas_Canvas3D_Mesh_Data *pd)
-{
- Eina_List *l;
- Evas_Canvas3D_Mesh_Frame *f;
-
- if (!pd) return NULL;
- EINA_LIST_FOREACH(pd->frames, l, f)
- {
- if (f->frame == 0)
- return f;
- }
-
- return NULL;
-}
-
-static int _compare_meshes(Evas_Canvas3D_Mesh *mesh1, Evas_Canvas3D_Mesh *mesh2)
-{
- Evas_Canvas3D_Mesh_Data *pd1, *pd2;
- Evas_Canvas3D_Mesh_Frame *f1, *f2;
- int i;
- float *src1, *src2;
- Evas_Canvas3D_Vertex_Buffer *vb1, *vb2;
-
- pd1 = efl_data_scope_get(mesh1, EVAS_CANVAS3D_MESH_CLASS);
- f1 = return_zero_frame(pd1);
- if ((pd1 == NULL) || (f1 == NULL))
- return 1;
-
- pd2 = efl_data_scope_get(mesh2, EVAS_CANVAS3D_MESH_CLASS);
- f2 = return_zero_frame(pd2);
- if ((pd2 == NULL) || (f2 == NULL))
- return 1;
-
- if ((pd1->vertex_count) != (pd2->vertex_count))
- return 1;
-
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wtautological-compare"
-#endif
-
- COMPARE_GEOMETRICS(EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION)
- COMPARE_GEOMETRICS(EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL)
- COMPARE_GEOMETRICS(EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD)
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
-
- return 0;
-}
-
-static void
-check_meshes_in_folder(Eina_Tmpstr *tmp, const char *folder, const char *loadext, const char *ext)
-{
- char buffer[PATH_MAX];
- Evas *e = _setup_evas();
- Eo *mesh, *mesh2;
- Eina_Iterator *it;
- int res = 0;
- const Eina_File_Direct_Info *file;
- it = eina_file_direct_ls(folder);
- EINA_ITERATOR_FOREACH(it, file)
- {
- int set_ok, save_ok;
- Eina_File *f;
- const Eina_File *f_get = NULL;
- const char *filename = NULL;
- const char *key = NULL;
- if (file->path[file->name_start] == '.') continue; //some hidden git file or whatever
- if (!eina_str_has_extension(file->path + file->name_start, loadext)) continue; //some other file
- mesh = efl_add(EVAS_CANVAS3D_MESH_CLASS, e);
- mesh2 = efl_add(EVAS_CANVAS3D_MESH_CLASS, e);
- fail_if(mesh == NULL);
- fail_if(mesh2 == NULL);
- snprintf(buffer, PATH_MAX, "%s%s", tmp, ext);
- set_ok = efl_file_simple_load(mesh, file->path, NULL);
- fail_if(!set_ok);
- save_ok = efl_file_save(mesh, buffer, NULL, NULL);
- fail_if(!save_ok);
- set_ok = efl_file_simple_load(mesh2, buffer, NULL);
- fail_if(!set_ok);
- efl_file_simple_get(mesh2, &filename, &key);
- fail_if(!filename);
- fail_if(!!key);
- res = _compare_meshes(mesh, mesh2);
- fail_if(res == 1);
- f = eina_file_open(file->path, 0);
- fail_if(!f);
- set_ok = efl_file_simple_mmap_load(mesh, f, NULL);
- efl_file_simple_mmap_get(mesh, &f_get, &key);
- fail_if(!f_get);
- fail_if(!!key);
- eina_file_close(f);
- save_ok = efl_file_save(mesh, buffer, NULL, NULL);
- fail_if(!set_ok);
- fail_if(!save_ok);
- f = eina_file_open(buffer, 0);
- fail_if(!f);
- set_ok = efl_file_simple_mmap_load(mesh2, f, NULL);
- eina_file_close(f);
- fail_if(!set_ok);
- res = _compare_meshes(mesh, mesh2);
- fail_if(res == 1);
- efl_del(mesh2);
- efl_del(mesh);
- unlink(buffer);
- }
- eina_iterator_free(it);
- evas_free(e);
-}
-EFL_START_TEST(evas_object_mesh_loader_saver)
-{
- Eina_Tmpstr *tmp;
- char *file_mask = strdup("evas_test_mesh_XXXXXX");
- int tmpfd;
- struct
- {
- const char *dir;
- const char *loadfmt;
- const char *savefmt;
- } values[4] =
- {
- { TESTS_OBJ_MESH_DIR, ".obj", ".eet" },
- { TESTS_MD2_MESH_DIR, ".md2", ".eet" },
- { TESTS_PLY_MESH_DIR, ".ply", ".eet" },
- { TESTS_PLY_MESH_DIR, ".ply", ".ply" },
- };
-
- /* create tmp file name, assume tmp.eet and tmp.ply also work */
- tmpfd = eina_file_mkstemp(file_mask, &tmp);
- fail_if(tmpfd == -1);
- fail_if(!!close(tmpfd));
-
- check_meshes_in_folder(tmp, values[_i].dir, values[_i].loadfmt, values[_i].savefmt);
-
- unlink(tmp);
-
- free(file_mask);
-}
-EFL_END_TEST
-
-void evas_test_mesh(TCase *tc)
-{
- tcase_add_loop_test(tc, evas_object_mesh_loader_saver, 0, 1);
-}
-
-void evas_test_mesh1(TCase *tc)
-{
- tcase_add_loop_test(tc, evas_object_mesh_loader_saver, 1, 2);
-}
-
-void evas_test_mesh2(TCase *tc)
-{
- tcase_add_loop_test(tc, evas_object_mesh_loader_saver, 2, 3);
-}
-
-void evas_test_mesh3(TCase *tc)
-{
- tcase_add_loop_test(tc, evas_object_mesh_loader_saver, 3, 4);
-}
diff --git a/src/tests/evas/evas_test_text.c b/src/tests/evas/evas_test_text.c
index 929c88ddab..6f29807216 100644
--- a/src/tests/evas/evas_test_text.c
+++ b/src/tests/evas/evas_test_text.c
@@ -265,7 +265,7 @@ EFL_START_TEST(evas_text_ellipsis)
_test_ellipsis(to, buf, font, size, 1.0);
/* Check ellipsis value with NULL */
- fail_if(evas_object_text_ellipsis_get(NULL) != -1.0);
+ fail_if(!EINA_DBL_EQ(evas_object_text_ellipsis_get(NULL), -1.0));
END_TEXT_TEST();
}
diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c
index 6ade455ddc..40dbb70967 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -20,13 +20,14 @@
#define TESTS_DIC_DIR TESTS_SRC_DIR"/dicts"
/* Functions defined in evas_object_textblock.c */
-EAPI Eina_Bool
+EVAS_API Eina_Bool
_evas_textblock_check_item_node_link(Evas_Object *obj);
-EAPI int
+EVAS_API int
_evas_textblock_format_offset_get(const Evas_Object_Textblock_Node_Format *n);
/* end of functions defined in evas_object_textblock.c */
#define TEST_FONT "font=DejaVuSans,UnDotum,malayalam font_source=" TESTS_SRC_DIR "/fonts/TestFont.eet"
+#define TEST_FONT_SOURCE TESTS_SRC_DIR "/fonts/TestFontSource.eet"
static const char *style_buf =
"DEFAULT='" TEST_FONT " font_size=10 color=#000 text_class=entry'"
@@ -38,7 +39,7 @@ static const char *style_buf =
Evas_Object *tb; \
Evas_Textblock_Style *st; \
Evas_Textblock_Cursor *cur; \
- Efl_Text_Cursor *cur_obj; \
+ Efl_Text_Cursor_Object *cur_obj; \
evas = EVAS_TEST_INIT_EVAS(); \
evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
tb = evas_object_textblock_add(evas); \
@@ -62,13 +63,50 @@ while (0)
do \
{ \
evas_textblock_cursor_free(cur); \
- evas_object_del(tb); \
efl_del(cur_obj); \
+ evas_object_del(tb); \
evas_textblock_style_free(st); \
evas_free(evas); \
} \
while (0)
+
+typedef struct _Escape_Value Escape_Value;
+
+struct _Escape_Value
+{
+ char *escape;
+ char *value;
+};
+
+#define ESCAPE_VALUE(e,v) {e,v}
+
+static const Escape_Value escape_strings[] = {
+ ESCAPE_VALUE("&Aacute;", "\xc3\x81"),
+ ESCAPE_VALUE("&Acirc;", "\xc3\x82"),
+ ESCAPE_VALUE("&Aelig;", "\xc3\x86"),
+ ESCAPE_VALUE("&Otilde;", "\xc3\x95"),
+ ESCAPE_VALUE("&Ouml;", "\xc3\x96"),
+ ESCAPE_VALUE("&Thorn;", "\xc3\x9e"),
+ ESCAPE_VALUE("&Uacute;", "\xc3\x9a"),
+ ESCAPE_VALUE("&Ucirc;", "\xc3\x9b"),
+ ESCAPE_VALUE("&rArr;", "\xe2\x87\x92"),
+ ESCAPE_VALUE("&reg;", "\xc2\xae"),
+ ESCAPE_VALUE("&rho;", "\xce\xa1"),
+ ESCAPE_VALUE("&sigma;", "\xce\xa3"),
+ ESCAPE_VALUE("&sum;", "\xe2\x88\x91"),
+ ESCAPE_VALUE("&sup1;", "\xc2\xb9"),
+ ESCAPE_VALUE("&ucirc;", "\xc3\xbb"),
+ ESCAPE_VALUE("&ugrave;", "\xc3\xb9"),
+ ESCAPE_VALUE("&uml;", "\xc2\xa8"),
+ ESCAPE_VALUE("&yen;", "\xc2\xa5"),
+ ESCAPE_VALUE("&yuml;", "\xc3\xbf"),
+ ESCAPE_VALUE("<tab/>", "\t"),
+ ESCAPE_VALUE("<br/>", "\n"),
+ ESCAPE_VALUE("<ps/>", "\xe2\x80\xa9"), //0x2029
+ ESCAPE_VALUE("&#xfffc;", "\xef\xbf\xbc"), //0xFFFC
+};
+
EFL_START_TEST(evas_textblock_simple)
{
START_TB_TEST();
@@ -1003,6 +1041,24 @@ EFL_START_TEST(evas_textblock_cursor)
while (evas_textblock_cursor_char_prev(cur2)) j++;
ck_assert_int_eq(j, 4);
+ //make sure if we have cluster at line start we return to pos 0
+ Evas_Coord x_coord, y_coord;
+ int pos;
+
+ cur2 = evas_object_textblock_cursor_new(tb);
+ evas_object_textblock_text_markup_set(tb, "&#x262a;&#xfe0f;");
+
+ evas_textblock_cursor_char_next(cur2);
+ evas_textblock_cursor_pen_geometry_get(cur2, &x_coord, &y_coord, NULL, NULL);
+ evas_textblock_cursor_cluster_coord_set(cur, x_coord, y_coord);
+ pos = evas_textblock_cursor_pos_get(cur);
+
+ ck_assert_int_eq(pos, 0);
+ evas_object_textblock_text_markup_set(tb, "&#x1f3f3;&#xfe0f;&#x200d;&#x1f308;");
+ evas_textblock_cursor_pos_set(cur, 0);
+ evas_textblock_cursor_cluster_next(cur);
+ ck_assert_int_eq(4, evas_textblock_cursor_pos_get(cur));
+
END_TB_TEST();
}
EFL_END_TEST
@@ -3180,7 +3236,7 @@ EFL_START_TEST(evas_textblock_text_getters)
tmp = evas_textblock_text_markup_to_utf8(tb, "a&nbsp;");
fail_if(strcmp(tmp, "a\xC2\xA0"));
tmp2 = evas_textblock_text_utf8_to_markup(tb, tmp);
- fail_if(strcmp(tmp2, "a\xC2\xA0"));
+ fail_if(strcmp(tmp2, "a&nbsp;"));
free(tmp2);
free(tmp);
@@ -3223,7 +3279,7 @@ EFL_START_TEST(evas_textblock_text_getters)
tmp = evas_textblock_text_markup_to_utf8(NULL, "a&nbsp;");
fail_if(strcmp(tmp, "a\xC2\xA0"));
tmp2 = evas_textblock_text_utf8_to_markup(NULL, tmp);
- fail_if(strcmp(tmp2, "a\xC2\xA0"));
+ fail_if(strcmp(tmp2, "a&nbsp;"));
free(tmp2);
free(tmp);
@@ -3680,6 +3736,13 @@ EFL_START_TEST(evas_textblock_style)
evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4));
+ /* Size with style padding */
+ evas_object_textblock_size_formatted_get(tb, &w, &h);
+ evas_object_textblock_size_native_get(tb, &nw, &nh);
+
+ /* It is non-sense if the following condition is true. */
+ fail_if((w + l + r == nw) && (h == nh + t + b));
+
/* Mixed style padding */
evas_object_textblock_text_markup_set(tb,
"<style=far_shadow>Test</><style=far_soft_shadow>Test</>");
@@ -3772,8 +3835,24 @@ EFL_START_TEST(evas_textblock_style)
}
EFL_END_TEST
+/* Textblock functionality without style. */
+EFL_START_TEST(evas_textblock_style_empty)
+{
+ Evas *evas;
+ Evas_Object *txt;
+ Evas_Coord w, h;
+ evas = EVAS_TEST_INIT_EVAS();
+ txt = evas_object_textblock_add(evas);
+ evas_object_textblock_text_markup_set(txt, "<b></b>");
+ evas_object_textblock_size_formatted_get(txt, &w, &h);
+ ck_assert_int_eq(w, 0);
+ ck_assert_int_eq(h, 0);
+ evas_free(evas);
+}
+EFL_END_TEST
+
/* Basic test for style user push/peek/pop. */
-START_TEST(evas_textblock_style_user)
+EFL_START_TEST(evas_textblock_style_user)
{
Evas_Textblock_Style *user_st;
@@ -3794,7 +3873,7 @@ START_TEST(evas_textblock_style_user)
END_TB_TEST();
}
-END_TEST
+EFL_END_TEST
/* Various setters and getters */
EFL_START_TEST(evas_textblock_set_get)
@@ -3810,15 +3889,15 @@ EFL_START_TEST(evas_textblock_set_get)
fail_if(strcmp(evas_object_textblock_replace_char_get(tb), "ש"));
evas_object_textblock_valign_set(tb, -1.0);
- fail_if(evas_object_textblock_valign_get(tb) != 0.0);
+ fail_if(EINA_DBL_NONZERO(evas_object_textblock_valign_get(tb)));
evas_object_textblock_valign_set(tb, 0.0);
- fail_if(evas_object_textblock_valign_get(tb) != 0.0);
+ fail_if(EINA_DBL_NONZERO(evas_object_textblock_valign_get(tb)));
evas_object_textblock_valign_set(tb, 0.432);
- fail_if(evas_object_textblock_valign_get(tb) != 0.432);
+ fail_if(!EINA_DBL_EQ(evas_object_textblock_valign_get(tb), 0.432));
evas_object_textblock_valign_set(tb, 1.0);
- fail_if(evas_object_textblock_valign_get(tb) != 1.0);
+ fail_if(!EINA_DBL_EQ(evas_object_textblock_valign_get(tb), 1.0));
evas_object_textblock_valign_set(tb, 1.5);
- fail_if(evas_object_textblock_valign_get(tb) != 1.0);
+ fail_if(!EINA_DBL_EQ(evas_object_textblock_valign_get(tb), 1.0));
evas_object_textblock_bidi_delimiters_set(tb, ",.|");
fail_if(strcmp(evas_object_textblock_bidi_delimiters_get(tb), ",.|"));
@@ -4094,6 +4173,8 @@ EFL_START_TEST(evas_textblock_obstacle)
evas_object_resize(rect, 50, 50);
evas_object_resize(rect2, 50, 50);
evas_object_resize(rect3, 50, 50);
+ evas_object_resize(tb, 300, 400);
+
evas_object_textblock_text_markup_set(tb, buf);
evas_textblock_cursor_format_prepend(cur, "<wrap=word>");
evas_object_textblock_size_formatted_get(tb, &fw, &fh);
@@ -4110,6 +4191,11 @@ EFL_START_TEST(evas_textblock_obstacle)
evas_object_show(rect2);
evas_object_show(rect3);
+ /*check if first character after the obstacle*/
+ Evas_Coord cx;
+ evas_textblock_cursor_char_geometry_get(cur, &cx, NULL, NULL, NULL);
+ ck_assert_int_eq(cx, 50);
+
/* Compare formatted size with and without obstacle */
_obstacle_run(tb, rect, 0, fw, fh / 2, fh / 2, fh);
/* Now, with bigger obstacles */
@@ -4161,6 +4247,27 @@ EFL_START_TEST(evas_textblock_fit)
}
EFL_END_TEST;
+EFL_START_TEST(evas_textblock_textrun_font)
+{
+ START_TB_TEST();
+ int w1, h1, w2, h2;
+
+ evas_object_resize(tb, 300, 300);
+ evas_object_textblock_text_markup_set(tb, "가123A321");
+ evas_object_textblock_size_native_get(tb, &w1, &h1);
+ evas_object_textblock_text_markup_set(tb, "A321가123");
+ evas_object_textblock_size_native_get(tb, &w2, &h2);
+ ck_assert(w1==w2 && h1==h2);
+ evas_object_textblock_text_markup_set(tb, "123가A321");
+ evas_object_textblock_size_native_get(tb, &w2, &h2);
+ ck_assert(w1==w2 && h1==h2);
+ evas_object_textblock_text_markup_set(tb, "A가123321");
+ evas_object_textblock_size_native_get(tb, &w2, &h2);
+ ck_assert(w1==w2 && h1==h2);
+ END_TB_TEST();
+}
+EFL_END_TEST;
+
#ifdef HAVE_HYPHEN
static void
_hyphenation_width_stress(Evas_Object *tb, Evas_Textblock_Cursor *cur)
@@ -4344,7 +4451,7 @@ EFL_END_TEST;
EFL_START_TEST(evas_textblock_annotation)
{
START_TB_TEST();
- Efl_Text_Cursor *start, *end;
+ Efl_Text_Cursor_Object *start, *end;
start = efl_canvas_textblock_cursor_create(tb);
end = efl_canvas_textblock_cursor_create(tb);
@@ -4360,18 +4467,18 @@ EFL_START_TEST(evas_textblock_annotation)
/* Check some trivial cases */
- efl_text_cursor_position_set(start, 0);
- efl_text_cursor_position_set(end, 3);
+ efl_text_cursor_object_position_set(start, 0);
+ efl_text_cursor_object_position_set(end, 3);
efl_text_formatter_attribute_insert(start, end, "font_size=80");
- efl_text_cursor_position_set(start, 1);
- efl_text_cursor_position_set(end, 2);
+ efl_text_cursor_object_position_set(start, 1);
+ efl_text_cursor_object_position_set(end, 2);
efl_text_formatter_attribute_insert(start, end, "font=arial");
- efl_text_cursor_position_set(start, 2);
- efl_text_cursor_position_set(end, 3);
+ efl_text_cursor_object_position_set(start, 2);
+ efl_text_cursor_object_position_set(end, 3);
efl_text_formatter_attribute_insert(start, end, "color=#fff");
- efl_text_cursor_position_set(start, 0);
- efl_text_cursor_position_set(end, 3);
+ efl_text_cursor_object_position_set(start, 0);
+ efl_text_cursor_object_position_set(end, 3);
unsigned int count = efl_text_formatter_attribute_clear(start, end);
fail_if(count != 3);
}
@@ -4384,7 +4491,7 @@ static const char *efl_style_buf =
Evas *evas; \
Eo *txt; \
Efl_Text_Cursor_Handle *cur; \
- Efl_Text_Cursor *cur_obj; \
+ Efl_Text_Cursor_Object *cur_obj; \
evas = EVAS_TEST_INIT_EVAS(); \
evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
txt = efl_add(EFL_CANVAS_TEXTBLOCK_CLASS, evas); \
@@ -4410,6 +4517,19 @@ do \
} \
while (0)
+EFL_START_TEST(evas_textblock_utf8_to_markup)
+{
+ size_t len = sizeof(escape_strings) / sizeof(Escape_Value);
+ char * mkup_txt;
+ for(size_t i = 0 ; i < len ; i++)
+ {
+ mkup_txt = evas_textblock_text_utf8_to_markup(NULL, escape_strings[i].value);
+ fail_if(strcmp(escape_strings[i].escape, mkup_txt));
+ free(mkup_txt);
+ }
+}
+EFL_END_TEST
+
EFL_START_TEST(efl_canvas_textblock_simple)
{
START_EFL_CANVAS_TEXTBLOCK_TEST();
@@ -4490,201 +4610,203 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
efl_text_set(txt, buf);
ck_assert_int_eq(strcmp(efl_text_get(txt), buf), 0);
- pos = efl_text_cursor_position_get(cur_obj);
+ pos = efl_text_cursor_object_position_get(cur_obj);
ck_assert_int_eq(pos, 0);
- ck_assert(!efl_text_cursor_line_jump_by(cur_obj, -1));
- pos = efl_text_cursor_position_get(cur_obj);
+ ck_assert(!efl_text_cursor_object_line_jump_by(cur_obj, -1));
+ pos = efl_text_cursor_object_position_get(cur_obj);
ck_assert_int_eq(pos, 0);
- ck_assert(efl_text_cursor_line_jump_by(cur_obj, 1));
- pos = efl_text_cursor_position_get(cur_obj);
+ ck_assert(efl_text_cursor_object_line_jump_by(cur_obj, 1));
+ pos = efl_text_cursor_object_position_get(cur_obj);
ck_assert_int_eq(pos, 10);
efl_text_markup_set(txt, "Hello World<ps/>This is EFL<br/>Enlightenment");
- efl_text_cursor_position_set(cur_obj, 0);
- ck_assert_int_eq(efl_text_cursor_line_number_get(cur_obj), 0);
- ck_assert(efl_text_cursor_line_jump_by(cur_obj, 2));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 24);
- ck_assert_int_eq(efl_text_cursor_line_number_get(cur_obj), 2);
- ck_assert(efl_text_cursor_line_jump_by(cur_obj, -2));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
- ck_assert_int_eq(efl_text_cursor_line_number_get(cur_obj), 0);
-
- ck_assert(efl_text_cursor_line_jump_by(cur_obj, 2));
- efl_text_cursor_line_number_set(cur_obj, 2);
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 24);
- efl_text_cursor_line_number_set(cur_obj, 0);
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
-
- Eo * cursor1 = efl_add(EFL_TEXT_CURSOR_CLASS, txt);
- pos = efl_text_cursor_position_get(cursor1);
- ck_assert_int_eq(pos, -1);
- efl_text_cursor_position_set(cursor1, 10);
- pos = efl_text_cursor_position_get(cursor1);
- ck_assert_int_eq(pos, -1);
-
- efl_canvas_textblock_cursor_add(txt, cursor1);
- efl_text_cursor_position_set(cursor1, 1);
- pos = efl_text_cursor_position_get(cursor1);
+ efl_text_cursor_object_position_set(cur_obj, 0);
+ ck_assert_int_eq(efl_text_cursor_object_line_number_get(cur_obj), 0);
+ ck_assert(efl_text_cursor_object_line_jump_by(cur_obj, 2));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 24);
+ ck_assert_int_eq(efl_text_cursor_object_line_number_get(cur_obj), 2);
+ ck_assert(efl_text_cursor_object_line_jump_by(cur_obj, -2));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+ ck_assert_int_eq(efl_text_cursor_object_line_number_get(cur_obj), 0);
+
+ ck_assert(efl_text_cursor_object_line_jump_by(cur_obj, 2));
+ efl_text_cursor_object_line_number_set(cur_obj, 2);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 24);
+ efl_text_cursor_object_line_number_set(cur_obj, 0);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+
+ Eo * cursor_temp = efl_duplicate(cur_obj);
+ ck_assert_ptr_ne(cursor_temp, NULL);
+ efl_del(cursor_temp);
+ cursor_temp = NULL;
+
+ Eo * cursor1 = efl_canvas_textblock_cursor_create(txt);
+ efl_text_cursor_object_position_set(cursor1, 1);
+ pos = efl_text_cursor_object_position_get(cursor1);
ck_assert_int_eq(pos, 1);
efl_text_set(txt, "");
efl_text_set(txt, "");
- efl_text_cursor_text_insert(cursor1, "aa");
- ck_assert_int_eq(changed_emit, 3);
+ efl_text_cursor_object_text_insert(cursor1, "aa");
+ ck_assert_int_eq(changed_emit, 4);
- efl_text_set(txt, "");
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREV));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_START));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_PREV));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST));
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LAST));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
+ efl_text_markup_set(txt, "Hello<br/>Word");
+ efl_text_markup_set(txt, "Hello<br/>Word");
+ efl_text_cursor_object_markup_insert(cursor1, "aa");
+ ck_assert_int_eq(changed_emit, 6);
- ck_assert_int_eq(changed_emit, 4);
+ efl_text_set(txt, "");
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREVIOUS));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_START));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_PREVIOUS));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST));
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LAST));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+
+ ck_assert_int_eq(changed_emit, 7);
efl_text_markup_set(txt, "Hello World<ps/>This is EFL<br/>Enlightenment");
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 1);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 1);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREV));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
-
- efl_text_cursor_position_set(cur_obj, 0);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 4);
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 4);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
-
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 5);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 10);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
- ck_assert_int_ne(efl_text_cursor_position_get(cur_obj), 10);
-
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 23);
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 23);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 12);
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 12);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV));
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 1);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 1);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_PREVIOUS));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+
+ efl_text_cursor_object_position_set(cur_obj, 0);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 4);
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 4);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 5);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 10);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT));
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+ ck_assert_int_ne(efl_text_cursor_object_position_get(cur_obj), 10);
+
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 23);
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 23);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 12);
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 12);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS));
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
#if defined(HAVE_FRIBIDI) && defined(HAVE_HARFBUZZ)
efl_text_markup_set(txt, "الْبَرْمَجةُ<ps/>مَرْحبَاً");
- efl_text_cursor_cluster_coord_set(cur_obj, EINA_POSITION2D(0, 0));
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 1);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 3);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 5);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 4);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 5);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 6);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 7);
-
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 13);
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 13);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 22);
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 22);
- ck_assert(!efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LAST));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 22);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_START));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 13);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 22);
- ck_assert(efl_text_cursor_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
+ efl_text_cursor_object_cluster_coord_set(cur_obj, EINA_POSITION2D(0, 0));
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 1);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 3);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 5);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_PREVIOUS));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 4);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 5);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 6);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_CLUSTER_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 7);
+
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 13);
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 13);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 22);
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 22);
+ ck_assert(!efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LAST));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 22);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_START));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 13);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_END));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 22);
+ ck_assert(efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
#endif
- Eo *nCur = efl_add(EFL_TEXT_CURSOR_CLASS, txt), *nCur2 = efl_add(EFL_TEXT_CURSOR_CLASS, txt), *nCur3 = efl_add(EFL_TEXT_CURSOR_CLASS, txt);
+ Eo *nCur = efl_canvas_textblock_cursor_create(txt);
+ Eo *nCur2 = efl_canvas_textblock_cursor_create(txt);
+ Eo *nCur3 = efl_canvas_textblock_cursor_create(txt);
efl_text_markup_set(txt, "Hello World<ps/>This is EFL<br/>Enlightenment");
- efl_text_cursor_position_set(cur_obj, 0);
- efl_text_cursor_copy(cur_obj, nCur);
+ efl_text_cursor_object_position_set(cur_obj, 0);
ck_assert_ptr_ne(nCur, NULL);
- efl_text_cursor_copy(cur_obj, nCur2);
- efl_text_cursor_copy(cur_obj, nCur3);
ck_assert_ptr_ne(nCur2, NULL);
ck_assert_ptr_ne(nCur3, NULL);
- ck_assert(efl_text_cursor_equal(cur_obj, nCur));
- ck_assert(efl_text_cursor_equal(cur_obj, nCur2));
- ck_assert(efl_text_cursor_equal(cur_obj, nCur3));
- ck_assert(efl_text_cursor_equal(nCur2, nCur3));
+ ck_assert(efl_text_cursor_object_equal(cur_obj, nCur));
+ ck_assert(efl_text_cursor_object_equal(cur_obj, nCur2));
+ ck_assert(efl_text_cursor_object_equal(cur_obj, nCur3));
+ ck_assert(efl_text_cursor_object_equal(nCur2, nCur3));
- ck_assert_int_eq(efl_text_cursor_compare(cur_obj, nCur3), 0);
- ck_assert_int_eq(efl_text_cursor_compare(nCur2, nCur3), 0);
- ck_assert_int_eq(efl_text_cursor_compare(cur_obj, nCur), 0);
+ ck_assert_int_eq(efl_text_cursor_object_compare(cur_obj, nCur3), 0);
+ ck_assert_int_eq(efl_text_cursor_object_compare(nCur2, nCur3), 0);
+ ck_assert_int_eq(efl_text_cursor_object_compare(cur_obj, nCur), 0);
- ck_assert(efl_text_cursor_move(nCur, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
- ck_assert_int_lt(efl_text_cursor_compare(cur_obj, nCur), 0);
- ck_assert_int_gt(efl_text_cursor_compare(nCur, cur_obj), 0);
- efl_text_cursor_copy(nCur, nCur2);
- ck_assert_int_lt(efl_text_cursor_compare(cur_obj, nCur2), 0);
- ck_assert_int_gt(efl_text_cursor_compare(nCur2, cur_obj), 0);
- ck_assert(!efl_text_cursor_equal(nCur2, nCur3));
+ ck_assert(efl_text_cursor_object_move(nCur, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
+ ck_assert_int_lt(efl_text_cursor_object_compare(cur_obj, nCur), 0);
+ ck_assert_int_gt(efl_text_cursor_object_compare(nCur, cur_obj), 0);
+ efl_text_cursor_object_position_set(nCur2, efl_text_cursor_object_position_get(nCur));
+ ck_assert_int_lt(efl_text_cursor_object_compare(cur_obj, nCur2), 0);
+ ck_assert_int_gt(efl_text_cursor_object_compare(nCur2, cur_obj), 0);
+ ck_assert(!efl_text_cursor_object_equal(nCur2, nCur3));
efl_text_set(txt, "");
- efl_text_cursor_text_insert(cur_obj, "Hello World");
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 11);
- efl_text_cursor_text_insert(cur_obj, "Hello World");
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 22);
+ efl_text_cursor_object_text_insert(cur_obj, "Hello World");
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 11);
+ efl_text_cursor_object_text_insert(cur_obj, "Hello World");
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 22);
ck_assert_str_eq(efl_text_get(txt), "Hello WorldHello World");
efl_text_set(txt, "");
- efl_text_cursor_markup_insert(cur_obj, "Hello World<ps/>Hello World");
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 23);
-
- efl_text_cursor_char_coord_set(cur_obj, EINA_POSITION2D(0, 0));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
- efl_text_cursor_char_coord_set(cur_obj, EINA_POSITION2D(500, 500));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 23);
- efl_text_cursor_cluster_coord_set(cur_obj, EINA_POSITION2D(0, 0));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
- efl_text_cursor_cluster_coord_set(cur_obj, EINA_POSITION2D(500, 500));
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 23);
-
- efl_text_cursor_position_set(nCur, 0);
- efl_text_cursor_position_set(cur_obj, 5);
-
- ck_assert_str_eq(efl_text_cursor_range_text_get(cur_obj, nCur), "Hello");
- ck_assert_str_eq(efl_text_cursor_range_text_get(nCur, cur_obj), "Hello");
-
- efl_text_cursor_position_set(nCur, 0);
- efl_text_cursor_position_set(cur_obj, 17);
+ efl_text_cursor_object_markup_insert(cur_obj, "Hello World<ps/>Hello World");
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 23);
+
+ efl_text_cursor_object_char_coord_set(cur_obj, EINA_POSITION2D(0, 0));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+ efl_text_cursor_object_char_coord_set(cur_obj, EINA_POSITION2D(500, 500));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 23);
+ efl_text_cursor_object_cluster_coord_set(cur_obj, EINA_POSITION2D(0, 0));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+ efl_text_cursor_object_cluster_coord_set(cur_obj, EINA_POSITION2D(500, 500));
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 23);
+
+ efl_text_cursor_object_position_set(nCur, 0);
+ efl_text_cursor_object_position_set(cur_obj, 5);
+
+ ck_assert_str_eq(efl_text_cursor_object_range_text_get(cur_obj, nCur), "Hello");
+ ck_assert_str_eq(efl_text_cursor_object_range_text_get(nCur, cur_obj), "Hello");
+
+ efl_text_cursor_object_position_set(nCur, 0);
+ efl_text_cursor_object_position_set(cur_obj, 17);
- Eina_Iterator *iter = efl_text_cursor_range_geometry_get(cur_obj, nCur);
+ Eina_Iterator *iter = efl_text_cursor_object_range_geometry_get(cur_obj, nCur);
Eina_Rect *geoRect;
int x = 0;
@@ -4697,7 +4819,7 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
ck_assert_int_eq(x, 3);
- iter = efl_text_cursor_range_precise_geometry_get(cur_obj, nCur);
+ iter = efl_text_cursor_object_range_precise_geometry_get(cur_obj, nCur);
x = 0;
EINA_ITERATOR_FOREACH(iter, geoRect)
@@ -4709,46 +4831,46 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
ck_assert_int_eq(x, 2);
- ck_assert_str_eq(efl_text_cursor_range_markup_get(cur_obj, nCur), "Hello World<ps/>Hello");
- ck_assert_str_eq(efl_text_cursor_range_markup_get(nCur, cur_obj), "Hello World<ps/>Hello");
+ ck_assert_str_eq(efl_text_cursor_object_range_markup_get(cur_obj, nCur), "Hello World<ps/>Hello");
+ ck_assert_str_eq(efl_text_cursor_object_range_markup_get(nCur, cur_obj), "Hello World<ps/>Hello");
- efl_text_cursor_position_set(nCur, 0);
- efl_text_cursor_position_set(cur_obj, 5);
+ efl_text_cursor_object_position_set(nCur, 0);
+ efl_text_cursor_object_position_set(cur_obj, 5);
- efl_text_cursor_range_delete(nCur, cur_obj);
+ efl_text_cursor_object_range_delete(nCur, cur_obj);
ck_assert_str_eq(efl_text_markup_get(txt), " World<ps/>Hello World");
- ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
- ck_assert_int_eq(efl_text_cursor_position_get(nCur), 0);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(cur_obj), 0);
+ ck_assert_int_eq(efl_text_cursor_object_position_get(nCur), 0);
efl_text_markup_set(txt, "Hello World<ps/>Hello World");
- efl_text_cursor_position_set(cur_obj, 6);
+ efl_text_cursor_object_position_set(cur_obj, 6);
Eina_Unicode str[2] = {0};
- str[0] = efl_text_cursor_content_get(cur_obj);
+ str[0] = efl_text_cursor_object_content_get(cur_obj);
ck_assert_str_eq(eina_unicode_unicode_to_utf8(str, NULL), "W");
- efl_text_cursor_char_delete(cur_obj);
+ efl_text_cursor_object_char_delete(cur_obj);
- str[0] = efl_text_cursor_content_get(cur_obj);
+ str[0] = efl_text_cursor_object_content_get(cur_obj);
ck_assert_str_eq(eina_unicode_unicode_to_utf8(str, NULL), "o");
- Eo *cur_txt = efl_text_cursor_text_object_get(cur_obj);
- Eo *cur_txt2 = efl_text_cursor_text_object_get(nCur);
+ Eo *cur_txt = efl_text_cursor_object_text_object_get(cur_obj);
+ Eo *cur_txt2 = efl_text_cursor_object_text_object_get(nCur);
ck_assert_ptr_eq(cur_txt, txt);
ck_assert_ptr_eq(cur_txt2, txt);
- efl_text_cursor_position_set(cur_obj, 1);
- Eina_Rect rect = efl_text_cursor_content_geometry_get(cur_obj);
+ efl_text_cursor_object_position_set(cur_obj, 1);
+ Eina_Rect rect = efl_text_cursor_object_content_geometry_get(cur_obj);
ck_assert_int_ne(rect.w, 0);
ck_assert_int_ne(rect.h, 0);
ck_assert_int_ne(rect.x, 0);
- rect = efl_text_cursor_geometry_get(cur_obj, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ rect = efl_text_cursor_object_cursor_geometry_get(cur_obj, EFL_TEXT_CURSOR_TYPE_BEFORE);
ck_assert_int_eq(rect.w, 0);
ck_assert_int_ne(rect.h, 0);
ck_assert_int_ne(rect.x, 0);
- Eina_Rect rect2 = efl_text_cursor_geometry_get(cur_obj, EFL_TEXT_CURSOR_TYPE_UNDER);
+ Eina_Rect rect2 = efl_text_cursor_object_cursor_geometry_get(cur_obj, EFL_TEXT_CURSOR_TYPE_UNDER);
ck_assert_int_ne(rect2.w, 0);
ck_assert_int_ne(rect2.h, 0);
ck_assert_int_ne(rect2.x, 0);
@@ -4759,12 +4881,12 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
ck_assert_int_eq(rect2.y, rect.y);
efl_text_markup_set(txt, "Hello World");
- efl_text_cursor_position_set(cur_obj, 11);
- ck_assert(!efl_text_cursor_lower_cursor_geometry_get(cur_obj, &rect2));
+ efl_text_cursor_object_position_set(cur_obj, 11);
+ ck_assert(!efl_text_cursor_object_lower_cursor_geometry_get(cur_obj, &rect2));
#ifdef HAVE_FRIBIDI
- efl_text_cursor_text_insert(cur_obj, "مرحباً");
- rect = efl_text_cursor_geometry_get(cur_obj, EFL_TEXT_CURSOR_TYPE_BEFORE);
- ck_assert(efl_text_cursor_lower_cursor_geometry_get(cur_obj, &rect2));
+ efl_text_cursor_object_text_insert(cur_obj, "مرحباً");
+ rect = efl_text_cursor_object_cursor_geometry_get(cur_obj, EFL_TEXT_CURSOR_TYPE_BEFORE);
+ ck_assert(efl_text_cursor_object_lower_cursor_geometry_get(cur_obj, &rect2));
ck_assert_int_eq(rect2.w, 0);
ck_assert_int_ne(rect2.h, 0);
ck_assert_int_ne(rect2.x, 0);
@@ -4775,15 +4897,42 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
ck_assert_int_eq(rect2.y, rect.y);
#endif
+ //Efl able to deal with br tab without closing tag "/"
+ efl_text_markup_set(txt, "a<br>a<tab>a");
+ efl_text_cursor_object_move(nCur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST);
+ efl_text_cursor_object_move(cur_obj, EFL_TEXT_CURSOR_MOVE_TYPE_LAST);
+ efl_text_cursor_object_range_delete(nCur, cur_obj);
+ ck_assert_str_eq(efl_text_markup_get(txt), "");
+
END_EFL_CANVAS_TEXTBLOCK_TEST();
}
EFL_END_TEST
+EFL_START_TEST(efl_canvas_textblock_cursor_change)
+{
+ START_EFL_CANVAS_TEXTBLOCK_TEST();
+ (void) cur_obj;
+ int changed_emit1 = 0;
+ int changed_emit2 = 0;
+ Efl_Object *cur1, *cur2;
+ cur1 = efl_canvas_textblock_cursor_create(txt);
+ cur2 = efl_canvas_textblock_cursor_create(txt);
+ efl_text_set(txt, "Hello World");
+ efl_text_cursor_object_position_set(cur1, 0);
+ efl_text_cursor_object_position_set(cur2, 1);
+ efl_event_callback_add(cur1, EFL_TEXT_CURSOR_OBJECT_EVENT_CHANGED, _increment_int_changed, &changed_emit1);
+ efl_event_callback_add(cur2, EFL_TEXT_CURSOR_OBJECT_EVENT_CHANGED, _increment_int_changed, &changed_emit2);
+ efl_text_set(txt, "");
+ ck_assert_int_eq(changed_emit1, 0);
+ ck_assert_int_eq(changed_emit2, 1);
+}
+EFL_END_TEST
+
EFL_START_TEST(efl_canvas_textblock_markup)
{
START_EFL_CANVAS_TEXTBLOCK_TEST();
- Efl_Text_Cursor *start, *end;
+ Efl_Text_Cursor_Object *start, *end;
char *res;
start = efl_canvas_textblock_cursor_create(txt);
@@ -4791,16 +4940,16 @@ EFL_START_TEST(efl_canvas_textblock_markup)
efl_text_set(txt, "\n\n\n");
- efl_text_cursor_position_set(start, 1);
- efl_text_cursor_position_set(end, 2);
- res = efl_text_cursor_range_markup_get(start, end);
+ efl_text_cursor_object_position_set(start, 1);
+ efl_text_cursor_object_position_set(end, 2);
+ res = efl_text_cursor_object_range_markup_get(start, end);
ck_assert_str_eq(res, "<br>");
free(res);
efl_text_set(txt, "a\u2029bc\ndef\n\u2029");
- efl_text_cursor_position_set(start, 2);
- efl_text_cursor_position_set(end, 5);
- res = efl_text_cursor_range_markup_get(start, end);
+ efl_text_cursor_object_position_set(start, 2);
+ efl_text_cursor_object_position_set(end, 5);
+ res = efl_text_cursor_object_range_markup_get(start, end);
ck_assert_str_eq(res, "bc<br>");
free(res);
@@ -4872,6 +5021,10 @@ EFL_START_TEST(efl_canvas_textblock_style)
START_EFL_CANVAS_TEXTBLOCK_TEST();
unsigned char r, g, b, a;
const char *style;
+ Eina_Size2D size1, size2;
+
+ int changed_emit = 0;
+ efl_event_callback_add(txt, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, _increment_int_changed, &changed_emit);
efl_text_password_set(txt, EINA_FALSE);
efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE);
@@ -4879,6 +5032,8 @@ EFL_START_TEST(efl_canvas_textblock_style)
efl_text_font_slant_set(txt, EFL_TEXT_FONT_SLANT_OBLIQUE);
efl_text_tab_stops_set(txt, 20);
+ ck_assert_int_eq(changed_emit, 4);
+
efl_canvas_textblock_style_apply(txt, "color=#90E135");
style = efl_canvas_textblock_all_styles_get(txt);
@@ -4891,13 +5046,14 @@ EFL_START_TEST(efl_canvas_textblock_style)
// from functions
fail_if(!strstr(style, "font_weight=extrabold"));
- fail_if(!strstr(style, "tabstops=20"));
+ fail_if(!strstr(style, "tab_stops=20"));
fail_if(!strstr(style, "color=rgba(144,225,53,255)"));
fail_if(!strstr(style, "password=off"));
efl_text_password_set(txt, EINA_TRUE);
style = efl_canvas_textblock_all_styles_get(txt);
fail_if(!strstr(style, "password=on"));
+ changed_emit = 0;
efl_canvas_textblock_style_apply(txt, "font_width=ultracondensed");
ck_assert_int_eq(efl_text_font_width_get(txt), EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
@@ -4907,23 +5063,33 @@ EFL_START_TEST(efl_canvas_textblock_style)
efl_canvas_textblock_style_apply(txt, "wrap=none");
ck_assert_int_eq(efl_text_wrap_get(txt), EFL_TEXT_FORMAT_WRAP_NONE);
- efl_canvas_textblock_style_apply(txt, "backing=on");
+ efl_canvas_textblock_style_apply(txt, "background_type=solid");
ck_assert_int_eq(efl_text_background_type_get(txt), EFL_TEXT_STYLE_BACKGROUND_TYPE_SOLID_COLOR);
- efl_canvas_textblock_style_apply(txt, "style=far_soft_shadow");
+ efl_canvas_textblock_style_apply(txt, "background_color=red");
+ efl_text_background_color_get(txt, &r, &g, &b, &a);
+ ck_assert_int_eq(r, 0xFF);
+ ck_assert_int_eq(g, 0x00);
+ ck_assert_int_eq(b, 0x00);
+ ck_assert_int_eq(a, 0xFF);
+
+ efl_canvas_textblock_style_apply(txt, "effect_type=far_soft_shadow");
ck_assert_int_eq(efl_text_effect_type_get(txt), EFL_TEXT_STYLE_EFFECT_TYPE_FAR_SOFT_SHADOW);
- efl_canvas_textblock_style_apply(txt, "style=glow,top_right");
- ck_assert_int_eq(efl_text_effect_type_get(txt), EFL_TEXT_STYLE_EFFECT_TYPE_GLOW);
+ efl_canvas_textblock_style_apply(txt, "shadow_direction=top_right");
ck_assert_int_eq(efl_text_shadow_direction_get(txt), EFL_TEXT_STYLE_SHADOW_DIRECTION_TOP_RIGHT);
- efl_canvas_textblock_style_apply(txt, "style=far_shadow,top");
- ck_assert_int_eq(efl_text_effect_type_get(txt), EFL_TEXT_STYLE_EFFECT_TYPE_FAR_SHADOW);
+ efl_canvas_textblock_style_apply(txt, "shadow_direction=top");
ck_assert_int_eq(efl_text_shadow_direction_get(txt), EFL_TEXT_STYLE_SHADOW_DIRECTION_TOP);
- efl_canvas_textblock_style_apply(txt, "style=soft_outline,top,bottom");
+ efl_canvas_textblock_style_apply(txt, "effect_type=soft_outline");
ck_assert_int_eq(efl_text_effect_type_get(txt), EFL_TEXT_STYLE_EFFECT_TYPE_SOFT_OUTLINE);
- ck_assert_int_eq(efl_text_shadow_direction_get(txt), EFL_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM);
+
+ efl_canvas_textblock_style_apply(txt, "underline_type=none");
+ ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_NONE);
+
+ efl_canvas_textblock_style_apply(txt, "strikethrough_type=single");
+ ck_assert_int_eq(efl_text_strikethrough_type_get(txt), EFL_TEXT_STYLE_STRIKETHROUGH_TYPE_SINGLE);
efl_canvas_textblock_style_apply(txt, "color=#EF596C");
efl_text_color_get(txt, &r, &g, &b, &a);
@@ -4932,10 +5098,132 @@ EFL_START_TEST(efl_canvas_textblock_style)
ck_assert_int_eq(b, 0x6C);
ck_assert_int_eq(a, 0xFF);
+ ck_assert_int_eq(changed_emit, 12);
+
+ //check if multiple attribute set, called only once
+ changed_emit = 0;
+ efl_canvas_textblock_style_apply(txt, style);
+ ck_assert_int_eq(changed_emit, 1);
+
+ // Style Apply taking
+ efl_text_set(txt,"A");
+ efl_canvas_textblock_style_apply(txt,"font_size=2");
+ size1 = efl_canvas_textblock_size_native_get(txt);
+ efl_canvas_textblock_style_apply(txt,"font_size=20");
+ size2 = efl_canvas_textblock_size_native_get(txt);
+ ck_assert(size1.w < size2.w);
+ ck_assert(size1.h < size2.h);
+
+ efl_text_gfx_filter_set(txt, "code");
+ ck_assert_str_eq(efl_text_gfx_filter_get(txt), "code");
+
END_EFL_CANVAS_TEXTBLOCK_TEST();
}
EFL_END_TEST
+EFL_START_TEST(efl_text_style)
+{
+ START_EFL_CANVAS_TEXTBLOCK_TEST();
+ Eina_Size2D size1, size2;
+
+ int changed_emit = 0;
+ efl_event_callback_add(txt, EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED, _increment_int_changed, &changed_emit);
+ efl_text_set(txt, "Hello");
+ ck_assert_int_eq(changed_emit, 1);
+ efl_text_set(txt, "");
+ ck_assert_int_eq(changed_emit, 2);
+ efl_text_set(txt, "");
+ ck_assert_int_eq(changed_emit, 2);
+
+ changed_emit = 0;
+ efl_text_markup_set(txt, "&quot;Hello&quot;");
+ ck_assert_int_eq(changed_emit, 1);
+ efl_text_markup_set(txt, "");
+ ck_assert_int_eq(changed_emit, 2);
+ efl_text_markup_set(txt, "");
+ ck_assert_int_eq(changed_emit, 2);
+
+ // Style Applying
+ efl_text_set(txt,"A");
+ efl_canvas_textblock_style_apply(txt,"\tfont_size=2\t");
+ size1 = efl_canvas_textblock_size_native_get(txt);
+ efl_canvas_textblock_style_apply(txt,"\nfont_size=20\n");
+ size2 = efl_canvas_textblock_size_native_get(txt);
+ ck_assert(size1.w < size2.w);
+ ck_assert(size1.h < size2.h);
+
+ END_EFL_CANVAS_TEXTBLOCK_TEST();
+}
+EFL_END_TEST
+
+EFL_START_TEST(efl_text_markup)
+{
+ START_EFL_CANVAS_TEXTBLOCK_TEST();
+
+ efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_NONE);
+ ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_NONE);
+ efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_SINGLE);
+ ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_SINGLE);
+ efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE);
+ ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE);
+ efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_DASHED);
+ ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_DASHED);
+
+ END_EFL_CANVAS_TEXTBLOCK_TEST();
+}
+EFL_END_TEST
+
+EFL_START_TEST(efl_text_font_source)
+{
+ START_EFL_CANVAS_TEXTBLOCK_TEST();
+
+ Eina_Size2D size1, size2;
+
+ efl_canvas_textblock_style_apply(txt,"\tfont_size=30\t");
+ efl_text_markup_set(txt, "Hello, This Text Use The Font : Does_Not_Exists_Font");
+
+ efl_text_font_family_set(txt, "Does_Not_Exists_Font_1");
+ size1 = efl_canvas_textblock_size_native_get(txt);
+
+ efl_text_font_source_set(txt, TEST_FONT_SOURCE);
+ efl_text_font_family_set(txt, "Does_Not_Exists_Font_1");
+ size2 = efl_canvas_textblock_size_native_get(txt);
+ ck_assert_int_ne(size1.w, size2.w);
+
+ efl_text_font_source_set(txt, "");
+ efl_text_font_family_set(txt, "Does_Not_Exists_Font_2");
+ size1 = efl_canvas_textblock_size_native_get(txt);
+
+ efl_text_font_source_set(txt, TEST_FONT_SOURCE);
+ efl_text_font_family_set(txt, "Does_Not_Exists_Font_2");
+ size2 = efl_canvas_textblock_size_native_get(txt);
+ ck_assert_int_ne(size1.w, size2.w);
+
+ END_EFL_CANVAS_TEXTBLOCK_TEST();
+}
+EFL_END_TEST
+
+EFL_START_TEST(efl_text_default_format)
+{
+ Evas *evas;
+ Eo *txt;
+ evas = EVAS_TEST_INIT_EVAS();
+ txt = efl_add(EFL_CANVAS_TEXTBLOCK_CLASS, evas);
+
+ Eina_Size2D size;
+
+ efl_text_markup_set(txt, "<font=Sans>Hello</font>");
+
+ efl_text_font_size_set(txt, 80);
+ efl_text_color_set(txt, 255, 255, 255, 255);
+ size = efl_canvas_textblock_size_native_get(txt);
+
+ ck_assert_int_gt(size.h, 20);
+ efl_del(txt);
+ evas_free(evas);
+}
+EFL_END_TEST
+
void evas_test_textblock(TCase *tc)
{
tcase_add_test(tc, evas_textblock_simple);
@@ -4946,6 +5234,7 @@ void evas_test_textblock(TCase *tc)
tcase_add_test(tc, evas_textblock_size);
tcase_add_test(tc, evas_textblock_editing);
tcase_add_test(tc, evas_textblock_style);
+ tcase_add_test(tc, evas_textblock_style_empty);
tcase_add_test(tc, evas_textblock_style_user);
tcase_add_test(tc, evas_textblock_evas);
tcase_add_test(tc, evas_textblock_text_getters);
@@ -4960,17 +5249,24 @@ void evas_test_textblock(TCase *tc)
tcase_add_test(tc, evas_textblock_delete);
tcase_add_test(tc, evas_textblock_obstacle);
tcase_add_test(tc, evas_textblock_fit);
+ tcase_add_test(tc, evas_textblock_textrun_font);
#ifdef HAVE_HYPHEN
tcase_add_test(tc, evas_textblock_hyphenation);
#endif
tcase_add_test(tc, evas_textblock_text_iface);
tcase_add_test(tc, evas_textblock_annotation);
+ tcase_add_test(tc, evas_textblock_utf8_to_markup);
tcase_add_test(tc, efl_canvas_textblock_simple);
tcase_add_test(tc, efl_text);
tcase_add_test(tc, efl_canvas_textblock_cursor);
+ tcase_add_test(tc, efl_canvas_textblock_cursor_change);
tcase_add_test(tc, efl_canvas_textblock_markup);
tcase_add_test(tc, efl_canvas_textblock_markup_invalid_escape);
tcase_add_test(tc, efl_text_font);
tcase_add_test(tc, efl_canvas_textblock_style);
+ tcase_add_test(tc, efl_text_style);
+ tcase_add_test(tc, efl_text_markup);
+ tcase_add_test(tc, efl_text_font_source);
+ tcase_add_test(tc, efl_text_default_format);
}
diff --git a/src/tests/evas/fonts/TestFontSource.eet b/src/tests/evas/fonts/TestFontSource.eet
new file mode 100644
index 0000000000..082fd956e1
--- /dev/null
+++ b/src/tests/evas/fonts/TestFontSource.eet
Binary files differ
diff --git a/src/tests/evas/meshes/md2/sonic.md2 b/src/tests/evas/meshes/md2/sonic.md2
deleted file mode 100644
index 228edb9fb7..0000000000
--- a/src/tests/evas/meshes/md2/sonic.md2
+++ /dev/null
Binary files differ
diff --git a/src/tests/evas/meshes/obj/man_mesh.obj b/src/tests/evas/meshes/obj/man_mesh.obj
deleted file mode 100644
index 9e1f6d42ea..0000000000
--- a/src/tests/evas/meshes/obj/man_mesh.obj
+++ /dev/null
@@ -1,2493 +0,0 @@
-# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
-# File Created: 28.03.2014 15:19:59
-
-mtllib man_mesh.mtl
-
-#
-# object man_zbrush002
-#
-
-v 0.0000 47.2875 1.0942
-v 0.0000 50.0378 -9.4137
-v 0.0000 55.9506 -7.2501
-v 0.0000 24.1321 -0.3567
-v -4.6498 14.9457 -8.7856
-v -3.2526 0.0016 -8.5910
-v -1.7126 0.0249 -9.1957
-v -2.0203 14.6106 -8.2788
-v -4.0894 2.6330 -5.0313
-v -5.3088 13.9109 -3.7387
-v -1.5536 3.0595 -4.1735
-v -3.0616 3.5378 -3.4617
-v -1.7669 13.7549 -2.9187
-v -0.6260 0.0317 -8.3362
-v -0.9714 14.6448 -6.7064
-v -5.9192 37.6191 -4.5703
-v -5.4957 46.0431 -6.7324
-v -6.0295 46.1888 -3.9560
-v -4.6857 36.6641 -1.6164
-v -4.2985 47.0011 -0.0589
-v -7.2525 54.5245 -7.6150
-v -6.7758 50.2065 -7.5345
-v 0.0000 53.7381 -8.9868
-v -8.7478 53.7702 -7.3533
-v -6.6241 53.5298 -2.6537
-v -8.1843 53.1087 -3.3204
-v -9.8277 52.9897 -7.1885
-v -9.5084 52.4031 -3.6727
-v -15.6368 49.7151 -4.0157
-v -14.9891 50.5653 -7.2972
-v -2.3212 55.4710 -5.5708
-v -3.7738 51.0936 -1.0343
-v -7.8131 49.3427 -3.8869
-v -16.1362 50.0240 -7.5462
-v -14.8850 46.9747 -7.9460
-v -13.7795 47.4172 -7.7153
-v -14.9771 45.6892 -4.8210
-v -8.9272 49.1285 -4.1282
-v -8.7565 49.3211 -7.6329
-v -17.2082 49.4777 -7.5122
-v -16.8101 49.1399 -3.9288
-v -22.3487 46.9322 -2.8224
-v -22.5852 48.3277 -7.5944
-v -21.9364 43.0552 -3.7336
-v -16.1922 44.9604 -4.8771
-v -23.3377 47.2682 -6.9450
-v -22.1051 44.1196 -7.0740
-v -21.0612 44.1836 -7.6112
-v -15.8846 46.5205 -7.8558
-v -5.5985 31.8229 -1.4054
-v -7.4539 29.9108 -4.7820
-v -7.1743 32.8153 -5.1680
-v -4.9700 33.0828 -8.8713
-v -5.5953 29.7616 -8.4911
-v -6.8277 20.8590 -3.0514
-v -6.1947 19.5763 -3.4925
-v -5.4260 21.3413 -8.1311
-v -0.8999 21.4104 -8.3427
-v -0.8356 22.8539 -8.2030
-v -5.3178 22.9368 -8.0146
-v -1.8530 19.1642 -1.3853
-v -1.9574 20.6208 -1.2177
-v -5.2596 15.4904 -9.5994
-v -0.2944 16.1695 -7.9627
-v -1.2218 14.4504 -2.0041
-v -6.4987 14.6430 -4.0006
-v -1.4357 55.0574 -2.8845
-v -0.5960 60.2687 -0.2559
-v -0.1638 60.6728 0.4053
-v -0.2263 59.6318 0.7170
-v -0.6054 59.4536 0.0068
-v -0.7935 58.6118 -0.0224
-v -1.3407 61.3435 -1.0249
-v -2.2253 60.3012 -1.3344
-v -2.2095 61.2305 -1.5150
-v -0.4741 61.2949 -0.6078
-v -0.7854 61.5398 -0.0488
-v -0.1799 61.2747 0.0585
-v -1.7921 61.5632 -0.6482
-v -1.9014 62.8989 -1.2625
-v -2.5058 61.4136 -3.3339
-v -2.0718 58.0803 -1.8376
-v -2.3616 58.6526 -3.4054
-v -2.0435 58.6944 -1.7220
-v -1.4804 57.2878 -3.1674
-v -2.4848 60.6680 -2.0783
-v -0.8603 57.3392 -0.3453
-v -1.5075 57.9788 -4.8067
-v -0.5095 56.8628 -2.0812
-v -2.1892 21.9879 -1.4818
-v -6.5423 35.4806 -4.9028
-v -5.2832 35.9529 -7.8146
-v -3.7985 31.5525 -0.3863
-v -1.5687 1.9817 -0.6271
-v -3.7356 1.8169 0.2284
-v -1.8252 -0.0241 0.6012
-v -3.7693 -0.0090 1.1329
-v -5.3903 1.5682 -1.6703
-v -5.1768 -0.0250 -0.5983
-v -6.8240 22.1939 -3.2543
-v -0.8451 29.8910 -9.4915
-v -23.2655 44.2902 -3.6142
-v -23.3230 46.2280 -3.4252
-v -23.8813 46.2678 -5.9955
-v -23.2731 44.4791 -6.1705
-v -24.4461 44.0991 -3.0395
-v -24.9354 45.7429 -3.2888
-v -25.9827 45.6412 -5.9747
-v -25.7189 44.4079 -5.9891
-v -27.0580 43.7331 -1.4711
-v -26.7755 43.0070 -1.4929
-v -27.6379 42.3212 -1.9844
-v -27.1027 45.3202 -5.7351
-v -26.2463 42.9014 -5.3836
-v -26.7539 45.3983 -2.8586
-v -28.3806 42.3305 -3.0566
-v -28.6979 44.2382 -3.4775
-v -28.1009 44.1773 -2.4700
-v -28.5438 44.1780 -4.6514
-v -25.5872 43.5577 -2.0387
-v -26.1177 44.4879 -2.1987
-v -25.4919 42.8273 -2.3701
-v -3.4637 23.8728 -0.3567
-v -0.3403 31.4007 -9.9220
-v -0.4256 30.0691 -1.5036
-v -2.1628 35.7435 -9.5999
-v 0.0000 37.0098 0.5507
-v 0.0000 50.8802 0.1100
-v 0.0000 45.2358 -8.5163
-v 0.0000 59.3759 0.2727
-v 0.0000 62.7759 -0.3557
-v 0.0000 61.9130 -0.0480
-v 0.0000 56.8628 -2.0812
-v -2.8276 38.1718 -8.0883
-v -0.0000 31.5470 -9.9391
-v -28.2928 42.5431 -4.4468
-v 0.0000 38.2216 -8.0733
-v 4.6209 14.9457 -8.5161
-v 1.4564 14.6106 -8.6951
-v 1.7126 0.0249 -9.1957
-v 3.2526 0.0016 -8.5910
-v 4.0894 2.6330 -5.0313
-v 5.3088 13.9109 -3.7387
-v 1.5536 3.0595 -4.1735
-v 1.7669 13.7549 -2.9187
-v 3.0616 3.5378 -3.4617
-v 0.6260 0.0317 -8.3362
-v 1.2398 14.6448 -6.4653
-v 5.9192 37.6191 -4.5703
-v 6.0295 46.1888 -3.9560
-v 5.4957 46.0431 -6.7324
-v 2.8276 38.1718 -8.0883
-v 4.6857 36.6641 -1.6164
-v 4.2985 47.0011 -0.0589
-v 7.2525 54.5245 -7.6150
-v 6.7758 50.2065 -7.5345
-v 8.7478 53.7702 -7.3533
-v 8.1843 53.1087 -3.3204
-v 6.6241 53.5298 -2.6537
-v 9.8277 52.9897 -7.1885
-v 14.9891 50.5653 -7.2972
-v 15.6368 49.7151 -4.0157
-v 9.5084 52.4031 -3.6727
-v 2.3212 55.4710 -5.5708
-v 7.8131 49.3427 -3.8869
-v 3.7738 51.0936 -1.0343
-v 16.1362 50.0240 -7.5462
-v 13.7795 47.4172 -7.7153
-v 14.8850 46.9747 -7.9460
-v 8.7565 49.3211 -7.6329
-v 8.9272 49.1285 -4.1282
-v 14.9771 45.6892 -4.8210
-v 17.2082 49.4777 -7.5122
-v 22.5852 48.3277 -7.5944
-v 22.3487 46.9322 -2.8224
-v 16.8101 49.1399 -3.9288
-v 21.9364 43.0552 -3.7336
-v 16.1922 44.9604 -4.8771
-v 23.3377 47.2682 -6.9450
-v 21.0612 44.1836 -7.6112
-v 22.1051 44.1196 -7.0740
-v 15.8846 46.5205 -7.8558
-v 5.5985 31.8229 -1.4043
-v 7.1743 32.8153 -5.1673
-v 7.4539 29.9108 -4.7801
-v 4.9700 33.0828 -8.8719
-v 5.5953 29.7616 -8.4925
-v 6.8277 20.8590 -3.0448
-v 5.4260 21.3413 -8.1326
-v 6.1947 19.5763 -3.4786
-v 0.8999 21.4104 -8.3494
-v 5.3178 22.9368 -8.0162
-v 0.8356 22.8539 -8.2107
-v 1.9574 20.6208 -1.2115
-v 1.8530 19.1642 -1.3716
-v 0.1341 16.1695 -9.1747
-v 5.1172 15.4904 -9.6797
-v 1.7167 14.4504 -2.4592
-v 6.0692 14.6430 -3.7623
-v 0.0000 54.5221 -2.1876
-v 1.4357 55.0574 -2.8845
-v 0.5960 60.2687 -0.2559
-v 0.6054 59.4536 0.0068
-v 0.2263 59.6318 0.7170
-v 0.1638 60.6728 0.4053
-v 0.7935 58.6118 -0.0224
-v 0.0000 58.7353 0.2373
-v 1.3407 61.3435 -1.0249
-v 2.2095 61.2305 -1.5150
-v 2.2253 60.3012 -1.3344
-v 0.4741 61.2949 -0.6078
-v 0.1799 61.2747 0.0585
-v 0.7854 61.5398 -0.0488
-v 1.9014 62.8989 -1.2625
-v 1.7921 61.5632 -0.6482
-v 2.5058 61.4136 -3.3339
-v 2.0718 58.0803 -1.8376
-v 2.0435 58.6944 -1.7220
-v 2.3616 58.6526 -3.4054
-v 1.4804 57.2878 -3.1674
-v 2.4848 60.6680 -2.0783
-v 0.8603 57.3392 -0.3453
-v 0.0000 57.3204 0.1903
-v 1.5075 57.9788 -4.8067
-v 0.5095 56.8628 -2.0812
-v 2.1892 21.9879 -1.4837
-v 6.5423 35.4806 -4.9028
-v 5.2832 35.9529 -7.8146
-v 3.7985 31.5525 -0.3889
-v 3.7356 1.8169 0.2284
-v 1.5687 1.9817 -0.6271
-v 1.8252 -0.0241 0.6012
-v 3.7693 -0.0090 1.1329
-v 5.1768 -0.0250 -0.5983
-v 5.3903 1.5682 -1.6703
-v 6.8240 22.1939 -3.2515
-v 0.8451 29.8910 -9.4989
-v 23.3230 46.2280 -3.4252
-v 23.2655 44.2902 -3.6142
-v 23.2731 44.4791 -6.1705
-v 23.8813 46.2678 -5.9955
-v 24.9354 45.7429 -3.2888
-v 24.4461 44.0991 -3.0395
-v 25.7189 44.4079 -5.9891
-v 25.9827 45.6412 -5.9747
-v 0.0000 31.5525 0.1285
-v 27.0580 43.7331 -1.4711
-v 28.1009 44.1773 -2.4700
-v 27.6379 42.3212 -1.9844
-v 26.7755 43.0070 -1.4929
-v 26.2463 42.9014 -5.3836
-v 27.1027 45.3202 -5.7351
-v 26.7539 45.3983 -2.8586
-v 28.3806 42.3305 -3.0566
-v 28.6979 44.2382 -3.4775
-v 28.2928 42.5431 -4.4468
-v 28.5438 44.1780 -4.6514
-v 26.1177 44.4879 -2.1987
-v 25.5872 43.5577 -2.0387
-v 25.4919 42.8273 -2.3701
-v 3.4637 23.8728 -0.3567
-v 0.3403 31.4007 -9.9280
-v 0.4256 30.0691 -1.5075
-v 2.1628 35.7435 -9.5999
-v -0.0000 30.2154 -1.5220
-v 0.0000 35.7952 -9.5999
-v 0.7069 62.5386 -0.2897
-v 1.8382 62.2558 -0.8026
-v 1.9014 63.5323 -1.2476
-v 0.6723 63.4859 -0.4218
-v 3.1942 60.5972 -3.4604
-v 2.7587 63.5323 -3.3488
-v 3.0106 63.5323 -5.8687
-v 2.1305 53.6286 -1.3592
-v 4.0888 54.8798 -3.4604
-v 4.3407 55.2343 -6.2104
-v 2.3368 60.5972 -1.0725
-v 3.4460 60.5972 -5.9803
-v 1.9321 63.5323 -7.3112
-v 2.9903 54.4963 -8.2460
-v 2.5172 60.5972 -7.8792
-v 1.1714 65.0579 -2.2055
-v 1.7956 65.0579 -4.8061
-v 0.0000 63.5323 -8.1745
-v 0.0000 62.5386 -0.1403
-v 1.1873 53.6286 -3.1647
-v 1.3937 60.5972 -3.1647
-v -0.7069 62.5386 -0.2897
-v -1.8382 62.2558 -0.8026
-v -1.9014 63.5323 -1.2476
-v -0.6723 63.4859 -0.4218
-v -3.1942 60.5972 -3.4604
-v -2.7587 63.5323 -3.3488
-v -3.4460 60.5972 -5.9803
-v -3.0106 63.5323 -5.8687
-v -2.3368 60.5972 -1.0725
-v -2.1305 53.6286 -1.3592
-v -4.0888 54.8798 -3.4604
-v -4.3407 55.2343 -6.2104
-v -2.5172 60.5972 -7.8792
-v -1.9321 63.5323 -7.3112
-v -2.9903 54.4963 -8.2460
-v 0.0000 60.5972 -8.8128
-v 0.0000 54.0508 -8.7827
-v -1.1714 65.0579 -2.2055
-v -1.7956 65.0579 -4.8061
-v 0.0000 65.0579 -6.4214
-v 0.0000 65.5609 -4.0584
-v -1.3937 60.5972 -3.1647
-v -1.1873 53.6286 -3.1647
-v 5.7780 35.9947 -1.7731
-v 5.1150 35.7826 -2.0517
-v 5.7434 36.0196 -3.9959
-v 6.4636 36.2234 -3.7049
-v 8.5039 27.4359 -5.6703
-v 7.4519 27.2103 -3.5044
-v 6.5979 27.3323 -3.6902
-v 7.6499 27.5580 -5.8561
-v 8.7043 24.9057 -6.0365
-v 7.9848 25.1277 -6.1774
-v 2.7647 62.4556 -4.1284
-v 2.9040 62.4556 -5.7005
-v 4.8719 55.7996 -6.7654
-v 4.7366 55.7996 -5.1539
-v 4.0724 55.7996 -5.0402
-v 4.2078 55.7996 -6.6517
-v 4.5130 55.0077 -5.9098
-v 4.2911 55.0989 -5.8718
-# 328 vertices
-
-vn -0.0217 0.0232 -0.9995
-vn -0.0217 0.0232 -0.9995
-vn -0.0217 0.0232 -0.9995
-vn -0.0217 0.0232 -0.9995
-vn -0.9838 -0.0917 -0.1540
-vn -0.9838 -0.0917 -0.1540
-vn -0.9838 -0.0917 -0.1540
-vn -0.9838 -0.0917 -0.1540
-vn 0.3989 -0.0990 0.9116
-vn 0.3989 -0.0990 0.9116
-vn 0.3989 -0.0990 0.9116
-vn 0.9772 -0.0026 0.2125
-vn 0.9772 -0.0026 0.2125
-vn 0.9772 -0.0026 0.2125
-vn 0.9772 -0.0026 0.2125
-vn -0.8610 -0.0854 -0.5014
-vn -0.8610 -0.0854 -0.5014
-vn -0.8610 -0.0854 -0.5014
-vn -0.8610 -0.0854 -0.5014
-vn -0.9175 -0.0321 0.3964
-vn -0.9175 -0.0321 0.3964
-vn -0.9175 -0.0321 0.3964
-vn -0.9175 -0.0321 0.3964
-vn -0.2238 0.0288 -0.9742
-vn -0.2238 0.0288 -0.9742
-vn -0.2238 0.0288 -0.9742
-vn -0.2238 0.0288 -0.9742
-vn -0.3754 0.9014 0.2157
-vn -0.3754 0.9014 0.2157
-vn -0.3754 0.9014 0.2157
-vn -0.3754 0.9014 0.2157
-vn -0.4122 0.8952 0.1693
-vn -0.4122 0.8952 0.1693
-vn -0.4122 0.8952 0.1693
-vn -0.4122 0.8952 0.1693
-vn -0.3397 -0.0890 0.9363
-vn -0.3397 -0.0890 0.9363
-vn -0.3397 -0.0890 0.9363
-vn -0.3397 -0.0890 0.9363
-vn -0.1393 0.8417 -0.5216
-vn -0.1393 0.8417 -0.5216
-vn -0.1393 0.8417 -0.5216
-vn -0.1393 0.8417 -0.5216
-vn -0.5100 -0.1901 0.8389
-vn -0.5100 -0.1901 0.8389
-vn -0.5100 -0.1901 0.8389
-vn -0.5100 -0.1901 0.8389
-vn -0.9099 0.2029 0.3618
-vn -0.9099 0.2029 0.3618
-vn -0.9099 0.2029 0.3618
-vn -0.2668 0.2552 0.9293
-vn -0.2668 0.2552 0.9293
-vn -0.2668 0.2552 0.9293
-vn -0.2668 0.2552 0.9293
-vn 0.1291 0.1799 -0.9752
-vn 0.1291 0.1799 -0.9752
-vn 0.1291 0.1799 -0.9752
-vn 0.1291 0.1799 -0.9752
-vn 0.4379 -0.8826 -0.1713
-vn 0.4379 -0.8826 -0.1713
-vn 0.4379 -0.8826 -0.1713
-vn 0.4379 -0.8826 -0.1713
-vn -0.2686 0.9389 0.2152
-vn -0.2686 0.9389 0.2152
-vn -0.2686 0.9389 0.2152
-vn -0.2686 0.9389 0.2152
-vn 0.2569 -0.1860 0.9484
-vn 0.2569 -0.1860 0.9484
-vn 0.2569 -0.1860 0.9484
-vn 0.2569 -0.1860 0.9484
-vn -0.4719 -0.1610 -0.8668
-vn -0.4719 -0.1610 -0.8668
-vn -0.4719 -0.1610 -0.8668
-vn -0.4719 -0.1610 -0.8668
-vn 0.3121 -0.9015 -0.2997
-vn 0.3121 -0.9015 -0.2997
-vn 0.3121 -0.9015 -0.2997
-vn 0.3121 -0.9015 -0.2997
-vn -0.8992 0.1416 0.4139
-vn -0.8992 0.1416 0.4139
-vn -0.8992 0.1416 0.4139
-vn -0.8753 0.0683 -0.4787
-vn -0.8753 0.0683 -0.4787
-vn -0.8753 0.0683 -0.4787
-vn -0.8753 0.0683 -0.4787
-vn -0.8956 -0.3457 -0.2800
-vn -0.8956 -0.3457 -0.2800
-vn -0.8956 -0.3457 -0.2800
-vn -0.0441 0.0864 -0.9953
-vn -0.0441 0.0864 -0.9953
-vn -0.0441 0.0864 -0.9953
-vn -0.0441 0.0864 -0.9953
-vn 0.9869 0.0532 0.1524
-vn 0.9869 0.0532 0.1524
-vn 0.9869 0.0532 0.1524
-vn -0.3931 -0.2991 0.8695
-vn -0.3931 -0.2991 0.8695
-vn -0.3931 -0.2991 0.8695
-vn -0.3931 -0.2991 0.8695
-vn 0.1394 0.1063 -0.9845
-vn 0.1394 0.1063 -0.9845
-vn 0.1394 0.1063 -0.9845
-vn 0.1394 0.1063 -0.9845
-vn 0.9770 0.1171 0.1782
-vn 0.9770 0.1171 0.1782
-vn 0.9770 0.1171 0.1782
-vn 0.9770 0.1171 0.1782
-vn -0.3960 -0.1198 0.9104
-vn -0.3960 -0.1198 0.9104
-vn -0.3960 -0.1198 0.9104
-vn -0.3960 -0.1198 0.9104
-vn -0.9824 0.0457 -0.1810
-vn -0.9824 0.0457 -0.1810
-vn -0.9824 0.0457 -0.1810
-vn -0.9824 0.0457 -0.1810
-vn -0.8812 -0.3950 -0.2597
-vn -0.8812 -0.3950 -0.2597
-vn -0.8812 -0.3950 -0.2597
-vn -0.8812 -0.3950 -0.2597
-vn 0.3416 -0.9364 -0.0806
-vn 0.3416 -0.9364 -0.0806
-vn 0.3416 -0.9364 -0.0806
-vn 0.3416 -0.9364 -0.0806
-vn -0.2950 -0.2184 -0.9302
-vn -0.2950 -0.2184 -0.9302
-vn -0.2950 -0.2184 -0.9302
-vn -0.2950 -0.2184 -0.9302
-vn -0.2179 0.5180 0.8271
-vn -0.2179 0.5180 0.8271
-vn -0.2179 0.5180 0.8271
-vn -0.2179 0.5180 0.8271
-vn -0.8781 0.1721 0.4464
-vn -0.8781 0.1721 0.4464
-vn -0.8781 0.1721 0.4464
-vn -0.8781 0.1721 0.4464
-vn -0.3519 0.0039 0.9360
-vn -0.3519 0.0039 0.9360
-vn -0.3519 0.0039 0.9360
-vn -0.3519 0.0039 0.9360
-vn -0.5009 0.1733 0.8480
-vn -0.5009 0.1733 0.8480
-vn -0.5009 0.1733 0.8480
-vn -0.4195 -0.8939 0.1582
-vn -0.4195 -0.8939 0.1582
-vn -0.4195 -0.8939 0.1582
-vn -0.8797 0.2347 0.4135
-vn -0.8797 0.2347 0.4135
-vn -0.8797 0.2347 0.4135
-vn -0.8797 0.2347 0.4135
-vn -0.4054 0.4008 0.8216
-vn -0.4054 0.4008 0.8216
-vn -0.4054 0.4008 0.8216
-vn -0.4054 0.4008 0.8216
-vn -0.9589 0.1397 0.2470
-vn -0.9589 0.1397 0.2470
-vn -0.9589 0.1397 0.2470
-vn -0.9589 0.1397 0.2470
-vn -0.9826 0.0104 0.1854
-vn -0.9826 0.0104 0.1854
-vn -0.9826 0.0104 0.1854
-vn -0.8356 -0.5474 -0.0454
-vn -0.8356 -0.5474 -0.0454
-vn -0.8356 -0.5474 -0.0454
-vn -0.9624 -0.1782 0.2052
-vn -0.9624 -0.1782 0.2052
-vn -0.9624 -0.1782 0.2052
-vn -0.9624 -0.1782 0.2052
-vn -0.5693 0.1809 0.8020
-vn -0.5693 0.1809 0.8020
-vn -0.5693 0.1809 0.8020
-vn -0.5693 0.1809 0.8020
-vn -0.4248 -0.1131 0.8982
-vn -0.4248 -0.1131 0.8982
-vn -0.4248 -0.1131 0.8982
-vn -0.4248 -0.1131 0.8982
-vn -0.8013 -0.5559 -0.2211
-vn -0.8013 -0.5559 -0.2211
-vn -0.8013 -0.5559 -0.2211
-vn -0.6057 -0.0427 0.7945
-vn -0.6057 -0.0427 0.7945
-vn -0.6057 -0.0427 0.7945
-vn -0.6057 -0.0427 0.7945
-vn -0.9625 0.1322 0.2368
-vn -0.9625 0.1322 0.2368
-vn -0.9625 0.1322 0.2368
-vn -0.9625 0.1322 0.2368
-vn 0.3299 -0.1772 -0.9272
-vn 0.3299 -0.1772 -0.9272
-vn 0.3299 -0.1772 -0.9272
-vn 0.9234 -0.3825 0.0334
-vn 0.9234 -0.3825 0.0334
-vn 0.9234 -0.3825 0.0334
-vn -0.2812 -0.5012 0.8184
-vn -0.2812 -0.5012 0.8184
-vn -0.2812 -0.5012 0.8184
-vn -0.2812 -0.5012 0.8184
-vn -0.4657 -0.8535 -0.2339
-vn -0.4657 -0.8535 -0.2339
-vn -0.4657 -0.8535 -0.2339
-vn -0.4657 -0.8535 -0.2339
-vn 0.9816 0.0664 0.1789
-vn 0.9816 0.0664 0.1789
-vn 0.9816 0.0664 0.1789
-vn 0.9816 0.0664 0.1789
-vn -0.8820 0.1569 -0.4443
-vn -0.8820 0.1569 -0.4443
-vn -0.8820 0.1569 -0.4443
-vn -0.8820 0.1569 -0.4443
-vn -0.8922 0.1699 0.4185
-vn -0.8922 0.1699 0.4185
-vn -0.8922 0.1699 0.4185
-vn -0.4741 0.1274 0.8712
-vn -0.4741 0.1274 0.8712
-vn -0.4741 0.1274 0.8712
-vn -0.9265 0.0869 0.3661
-vn -0.9265 0.0869 0.3661
-vn -0.9265 0.0869 0.3661
-vn -0.1743 -0.1645 0.9709
-vn -0.1743 -0.1645 0.9709
-vn -0.1743 -0.1645 0.9709
-vn -0.1743 -0.1645 0.9709
-vn -0.5265 0.8267 0.1983
-vn -0.5265 0.8267 0.1983
-vn -0.5265 0.8267 0.1983
-vn -0.5265 0.8267 0.1983
-vn -0.1549 -0.0355 -0.9873
-vn -0.1549 -0.0355 -0.9873
-vn -0.1549 -0.0355 -0.9873
-vn 0.0017 -0.1699 0.9855
-vn 0.0017 -0.1699 0.9855
-vn 0.0017 -0.1699 0.9855
-vn 0.0017 -0.1699 0.9855
-vn -0.2158 0.8144 0.5387
-vn -0.2158 0.8144 0.5387
-vn -0.2158 0.8144 0.5387
-vn -0.2158 0.8144 0.5387
-vn -0.2761 0.9321 0.2345
-vn -0.2761 0.9321 0.2345
-vn -0.2761 0.9321 0.2345
-vn -0.9428 0.2795 0.1817
-vn -0.9428 0.2795 0.1817
-vn -0.9428 0.2795 0.1817
-vn -0.9986 -0.0518 -0.0141
-vn -0.9986 -0.0518 -0.0141
-vn -0.9986 -0.0518 -0.0141
-vn -0.1080 -0.9096 0.4012
-vn -0.1080 -0.9096 0.4012
-vn -0.1080 -0.9096 0.4012
-vn 0.2345 0.8990 0.3700
-vn 0.2345 0.8990 0.3700
-vn 0.2345 0.8990 0.3700
-vn 0.2345 0.8990 0.3700
-vn 0.9921 0.0722 0.1030
-vn 0.9921 0.0722 0.1030
-vn 0.9921 0.0722 0.1030
-vn 0.9921 0.0722 0.1030
-vn -0.0022 -1.0000 -0.0050
-vn -0.0022 -1.0000 -0.0050
-vn -0.0022 -1.0000 -0.0050
-vn -0.0022 -1.0000 -0.0050
-vn 0.7487 0.0742 -0.6587
-vn 0.7487 0.0742 -0.6587
-vn 0.7487 0.0742 -0.6587
-vn 0.7487 0.0742 -0.6587
-vn 0.2703 0.4526 0.8498
-vn 0.2703 0.4526 0.8498
-vn 0.2703 0.4526 0.8498
-vn 0.2703 0.4526 0.8498
-vn -0.9574 -0.0737 -0.2791
-vn -0.9574 -0.0737 -0.2791
-vn -0.9574 -0.0737 -0.2791
-vn -0.9574 -0.0737 -0.2791
-vn -0.7381 0.3081 0.6002
-vn -0.7381 0.3081 0.6002
-vn -0.7381 0.3081 0.6002
-vn -0.7381 0.3081 0.6002
-vn -0.5607 0.8117 0.1637
-vn -0.5607 0.8117 0.1637
-vn -0.5607 0.8117 0.1637
-vn -0.5607 0.8117 0.1637
-vn -0.4525 -0.0743 0.8887
-vn -0.4525 -0.0743 0.8887
-vn -0.4525 -0.0743 0.8887
-vn -0.4525 -0.0743 0.8887
-vn 0.0015 -0.8305 -0.5570
-vn 0.0015 -0.8305 -0.5570
-vn 0.0015 -0.8305 -0.5570
-vn 0.6496 -0.6341 -0.4195
-vn 0.6496 -0.6341 -0.4195
-vn 0.6496 -0.6341 -0.4195
-vn -0.9596 0.0284 -0.2800
-vn -0.9596 0.0284 -0.2800
-vn -0.9596 0.0284 -0.2800
-vn -0.9596 0.0284 -0.2800
-vn -0.1260 -0.1279 -0.9838
-vn -0.1260 -0.1279 -0.9838
-vn -0.1260 -0.1279 -0.9838
-vn -0.1260 -0.1279 -0.9838
-vn -0.3463 0.1313 0.9289
-vn -0.3463 0.1313 0.9289
-vn -0.3463 0.1313 0.9289
-vn -0.3463 0.1313 0.9289
-vn -0.2764 -0.8870 0.3700
-vn -0.2764 -0.8870 0.3700
-vn -0.2764 -0.8870 0.3700
-vn -0.2451 -0.1993 0.9488
-vn -0.2451 -0.1993 0.9488
-vn -0.2451 -0.1993 0.9488
-vn -0.2451 -0.1993 0.9488
-vn -0.6807 -0.2106 -0.7016
-vn -0.6807 -0.2106 -0.7016
-vn -0.6807 -0.2106 -0.7016
-vn -0.6807 -0.2106 -0.7016
-vn -0.7106 0.6739 0.2021
-vn -0.7106 0.6739 0.2021
-vn -0.7106 0.6739 0.2021
-vn -0.7106 0.6739 0.2021
-vn -0.5757 -0.8031 -0.1535
-vn -0.5757 -0.8031 -0.1535
-vn -0.5757 -0.8031 -0.1535
-vn -0.5757 -0.8031 -0.1535
-vn 0.2345 0.0522 0.9707
-vn 0.2345 0.0522 0.9707
-vn 0.2345 0.0522 0.9707
-vn 0.2345 0.0522 0.9707
-vn -0.0517 0.0476 -0.9975
-vn -0.0517 0.0476 -0.9975
-vn -0.0517 0.0476 -0.9975
-vn -0.0517 0.0476 -0.9975
-vn -0.2831 0.9562 0.0752
-vn -0.2831 0.9562 0.0752
-vn -0.2831 0.9562 0.0752
-vn -0.2831 0.9562 0.0752
-vn 0.0507 -0.9935 -0.1016
-vn 0.0507 -0.9935 -0.1016
-vn 0.0507 -0.9935 -0.1016
-vn 0.0507 -0.9935 -0.1016
-vn -0.3028 0.0473 0.9519
-vn -0.3028 0.0473 0.9519
-vn -0.3028 0.0473 0.9519
-vn -0.3028 0.0473 0.9519
-vn -0.6130 -0.0352 0.7893
-vn -0.6130 -0.0352 0.7893
-vn -0.6130 -0.0352 0.7893
-vn -0.6130 -0.0352 0.7893
-vn -0.2884 -0.1753 -0.9413
-vn -0.2884 -0.1753 -0.9413
-vn -0.2884 -0.1753 -0.9413
-vn -0.2884 -0.1753 -0.9413
-vn -0.2159 0.9761 0.0226
-vn -0.2159 0.9761 0.0226
-vn -0.2159 0.9761 0.0226
-vn -0.2159 0.9761 0.0226
-vn 0.8065 -0.4408 -0.3941
-vn 0.8065 -0.4408 -0.3941
-vn 0.8065 -0.4408 -0.3941
-vn -0.8405 -0.0442 0.5400
-vn -0.8405 -0.0442 0.5400
-vn -0.8405 -0.0442 0.5400
-vn -0.8405 -0.0442 0.5400
-vn -0.9791 -0.1752 -0.1028
-vn -0.9791 -0.1752 -0.1028
-vn -0.9791 -0.1752 -0.1028
-vn -0.9791 -0.1752 -0.1028
-vn -0.5602 0.7378 0.3766
-vn -0.5602 0.7378 0.3766
-vn -0.5602 0.7378 0.3766
-vn 0.4841 0.3212 0.8139
-vn 0.4841 0.3212 0.8139
-vn 0.4841 0.3212 0.8139
-vn 0.4841 0.3212 0.8139
-vn 0.7657 -0.6427 -0.0248
-vn 0.7657 -0.6427 -0.0248
-vn 0.7657 -0.6427 -0.0248
-vn 0.7657 -0.6427 -0.0248
-vn 0.0687 0.6166 0.7843
-vn 0.0687 0.6166 0.7843
-vn 0.0687 0.6166 0.7843
-vn -0.0696 -0.0316 0.9971
-vn -0.0696 -0.0316 0.9971
-vn -0.0696 -0.0316 0.9971
-vn -0.0696 -0.0316 0.9971
-vn -0.7898 -0.2268 0.5698
-vn -0.7898 -0.2268 0.5698
-vn -0.7898 -0.2268 0.5698
-vn -0.8001 -0.0972 0.5919
-vn -0.8001 -0.0972 0.5919
-vn -0.8001 -0.0972 0.5919
-vn -0.8001 -0.0972 0.5919
-vn -0.5940 -0.7913 0.1450
-vn -0.5940 -0.7913 0.1450
-vn -0.5940 -0.7913 0.1450
-vn -0.5940 -0.7913 0.1450
-vn -0.0906 0.1887 0.9778
-vn -0.0906 0.1887 0.9778
-vn -0.0906 0.1887 0.9778
-vn -0.0984 0.0806 -0.9919
-vn -0.0984 0.0806 -0.9919
-vn -0.0984 0.0806 -0.9919
-vn -0.0984 0.0806 -0.9919
-vn -0.4368 0.8892 0.1359
-vn -0.4368 0.8892 0.1359
-vn -0.4368 0.8892 0.1359
-vn -0.4368 0.8892 0.1359
-vn 0.4359 -0.8263 -0.3567
-vn 0.4359 -0.8263 -0.3567
-vn 0.4359 -0.8263 -0.3567
-vn 0.4359 -0.8263 -0.3567
-vn 0.1164 -0.1902 0.9748
-vn 0.1164 -0.1902 0.9748
-vn 0.1164 -0.1902 0.9748
-vn 0.1164 -0.1902 0.9748
-vn -0.0304 0.1155 -0.9928
-vn -0.0304 0.1155 -0.9928
-vn -0.0304 0.1155 -0.9928
-vn -0.0304 0.1155 -0.9928
-vn -0.4473 0.8833 0.1406
-vn -0.4473 0.8833 0.1406
-vn -0.4473 0.8833 0.1406
-vn 0.4096 -0.8479 -0.3367
-vn 0.4096 -0.8479 -0.3367
-vn 0.4096 -0.8479 -0.3367
-vn 0.7771 -0.6292 0.0154
-vn 0.7771 -0.6292 0.0154
-vn 0.7771 -0.6292 0.0154
-vn 0.3745 0.2581 0.8906
-vn 0.3745 0.2581 0.8906
-vn 0.3745 0.2581 0.8906
-vn 0.3745 0.2581 0.8906
-vn 0.3866 -0.6109 0.6909
-vn 0.3866 -0.6109 0.6909
-vn 0.3866 -0.6109 0.6909
-vn 0.3866 -0.6109 0.6909
-vn -0.2026 0.7986 0.5667
-vn -0.2026 0.7986 0.5667
-vn -0.2026 0.7986 0.5667
-vn -0.3472 -0.1729 0.9217
-vn -0.3472 -0.1729 0.9217
-vn -0.3472 -0.1729 0.9217
-vn -0.0557 0.0627 -0.9965
-vn -0.0557 0.0627 -0.9965
-vn -0.0557 0.0627 -0.9965
-vn -0.0557 0.0627 -0.9965
-vn -0.5625 0.8268 -0.0012
-vn -0.5625 0.8268 -0.0012
-vn -0.5625 0.8268 -0.0012
-vn -0.5625 0.8268 -0.0012
-vn 0.1065 -0.9839 -0.1437
-vn 0.1065 -0.9839 -0.1437
-vn 0.1065 -0.9839 -0.1437
-vn -0.1926 0.4841 0.8535
-vn -0.1926 0.4841 0.8535
-vn -0.1926 0.4841 0.8535
-vn 0.0135 -0.9999 -0.0004
-vn 0.0135 -0.9999 -0.0004
-vn 0.0135 -0.9999 -0.0004
-vn 0.0135 -0.9999 -0.0004
-vn -0.1584 0.3315 0.9300
-vn -0.1584 0.3315 0.9300
-vn -0.1584 0.3315 0.9300
-vn 0.9439 -0.3276 -0.0423
-vn 0.9439 -0.3276 -0.0423
-vn 0.9439 -0.3276 -0.0423
-vn 0.0000 -0.0454 0.9990
-vn 0.0000 -0.0454 0.9990
-vn 0.0000 -0.0454 0.9990
-vn -0.0985 -0.9710 0.2177
-vn -0.0985 -0.9710 0.2177
-vn -0.0985 -0.9710 0.2177
-vn -0.0985 -0.9710 0.2177
-vn -0.8813 0.0215 0.4721
-vn -0.8813 0.0215 0.4721
-vn -0.8813 0.0215 0.4721
-vn -0.9212 -0.1090 -0.3736
-vn -0.9212 -0.1090 -0.3736
-vn -0.9212 -0.1090 -0.3736
-vn -0.9212 -0.1090 -0.3736
-vn -0.4028 -0.1467 0.9035
-vn -0.4028 -0.1467 0.9035
-vn -0.4028 -0.1467 0.9035
-vn -0.4028 -0.1467 0.9035
-vn -0.2295 -0.1086 -0.9672
-vn -0.2295 -0.1086 -0.9672
-vn -0.2295 -0.1086 -0.9672
-vn -0.2295 -0.1086 -0.9672
-vn 0.9922 -0.1101 0.0579
-vn 0.9922 -0.1101 0.0579
-vn 0.9922 -0.1101 0.0579
-vn 0.9922 -0.1101 0.0579
-vn -0.3243 0.0841 -0.9422
-vn -0.3243 0.0841 -0.9422
-vn -0.3243 0.0841 -0.9422
-vn -0.3243 0.0841 -0.9422
-vn -0.8896 0.3112 -0.3342
-vn -0.8896 0.3112 -0.3342
-vn -0.8896 0.3112 -0.3342
-vn -0.8826 0.1867 0.4314
-vn -0.8826 0.1867 0.4314
-vn -0.8826 0.1867 0.4314
-vn -0.8826 0.1867 0.4314
-vn -0.4908 0.2558 0.8329
-vn -0.4908 0.2558 0.8329
-vn -0.4908 0.2558 0.8329
-vn -0.4908 0.2558 0.8329
-vn -0.1991 -0.9326 0.3009
-vn -0.1991 -0.9326 0.3009
-vn -0.1991 -0.9326 0.3009
-vn -0.1991 -0.9326 0.3009
-vn -0.2058 0.0231 -0.9783
-vn -0.2058 0.0231 -0.9783
-vn -0.2058 0.0231 -0.9783
-vn -0.2058 0.0231 -0.9783
-vn 0.2897 -0.0607 0.9552
-vn 0.2897 -0.0607 0.9552
-vn 0.2897 -0.0607 0.9552
-vn 0.3472 -0.9265 -0.1448
-vn 0.3472 -0.9265 -0.1448
-vn 0.3472 -0.9265 -0.1448
-vn 0.3472 -0.9265 -0.1448
-vn -0.0284 0.0393 -0.9988
-vn -0.0284 0.0393 -0.9988
-vn -0.0284 0.0393 -0.9988
-vn -0.0284 0.0393 -0.9988
-vn -0.7231 0.6525 0.2267
-vn -0.7231 0.6525 0.2267
-vn -0.7231 0.6525 0.2267
-vn -0.0951 -0.9499 -0.2979
-vn -0.0951 -0.9499 -0.2979
-vn -0.0951 -0.9499 -0.2979
-vn 0.0000 -0.8666 0.4991
-vn 0.0000 -0.8666 0.4991
-vn 0.0000 -0.8666 0.4991
-vn 0.0000 0.2868 0.9580
-vn 0.0000 0.2868 0.9580
-vn 0.0000 0.2868 0.9580
-vn 0.0000 0.2868 0.9580
-vn -0.0127 0.0741 -0.9972
-vn -0.0127 0.0741 -0.9972
-vn -0.0127 0.0741 -0.9972
-vn -0.0127 0.0741 -0.9972
-vn -0.5617 0.5448 -0.6226
-vn -0.5617 0.5448 -0.6226
-vn -0.5617 0.5448 -0.6226
-vn -0.5617 0.5448 -0.6226
-vn -0.4104 -0.2331 -0.8816
-vn -0.4104 -0.2331 -0.8816
-vn -0.4104 -0.2331 -0.8816
-vn -0.4104 -0.2331 -0.8816
-vn 0.2017 -0.9682 -0.1481
-vn 0.2017 -0.9682 -0.1481
-vn 0.2017 -0.9682 -0.1481
-vn 0.1853 -0.9802 -0.0705
-vn 0.1853 -0.9802 -0.0705
-vn 0.1853 -0.9802 -0.0705
-vn 0.0000 0.4993 0.8664
-vn 0.0000 0.4993 0.8664
-vn 0.0000 0.4993 0.8664
-vn 0.0000 0.4993 0.8664
-vn 0.0000 0.1646 0.9864
-vn 0.0000 0.1646 0.9864
-vn 0.0000 0.1646 0.9864
-vn -0.0082 0.5297 -0.8482
-vn -0.0082 0.5297 -0.8482
-vn -0.0082 0.5297 -0.8482
-vn -0.0082 0.5297 -0.8482
-vn 0.1634 0.0131 -0.9865
-vn 0.1634 0.0131 -0.9865
-vn 0.1634 0.0131 -0.9865
-vn 0.1634 0.0131 -0.9865
-vn 0.9827 -0.0885 -0.1628
-vn 0.9827 -0.0885 -0.1628
-vn 0.9827 -0.0885 -0.1628
-vn 0.9827 -0.0885 -0.1628
-vn -0.3989 -0.0990 0.9116
-vn -0.3989 -0.0990 0.9116
-vn -0.3989 -0.0990 0.9116
-vn -0.9831 0.0095 0.1829
-vn -0.9831 0.0095 0.1829
-vn -0.9831 0.0095 0.1829
-vn -0.9831 0.0095 0.1829
-vn 0.8610 -0.0854 -0.5014
-vn 0.8610 -0.0854 -0.5014
-vn 0.8610 -0.0854 -0.5014
-vn 0.8610 -0.0854 -0.5014
-vn 0.9175 -0.0321 0.3964
-vn 0.9175 -0.0321 0.3964
-vn 0.9175 -0.0321 0.3964
-vn 0.9175 -0.0321 0.3964
-vn 0.2238 0.0288 -0.9742
-vn 0.2238 0.0288 -0.9742
-vn 0.2238 0.0288 -0.9742
-vn 0.2238 0.0288 -0.9742
-vn 0.3754 0.9014 0.2157
-vn 0.3754 0.9014 0.2157
-vn 0.3754 0.9014 0.2157
-vn 0.3754 0.9014 0.2157
-vn 0.4122 0.8952 0.1693
-vn 0.4122 0.8952 0.1693
-vn 0.4122 0.8952 0.1693
-vn 0.4122 0.8952 0.1693
-vn 0.3397 -0.0890 0.9363
-vn 0.3397 -0.0890 0.9363
-vn 0.3397 -0.0890 0.9363
-vn 0.3397 -0.0890 0.9363
-vn 0.1393 0.8417 -0.5216
-vn 0.1393 0.8417 -0.5216
-vn 0.1393 0.8417 -0.5216
-vn 0.1393 0.8417 -0.5216
-vn 0.7724 -0.0229 0.6347
-vn 0.7724 -0.0229 0.6347
-vn 0.7724 -0.0229 0.6347
-vn 0.7724 -0.0229 0.6347
-vn 0.3000 -0.1901 0.9348
-vn 0.3000 -0.1901 0.9348
-vn 0.3000 -0.1901 0.9348
-vn 0.2668 0.2552 0.9293
-vn 0.2668 0.2552 0.9293
-vn 0.2668 0.2552 0.9293
-vn 0.2668 0.2552 0.9293
-vn -0.1291 0.1799 -0.9752
-vn -0.1291 0.1799 -0.9752
-vn -0.1291 0.1799 -0.9752
-vn -0.1291 0.1799 -0.9752
-vn -0.4379 -0.8826 -0.1713
-vn -0.4379 -0.8826 -0.1713
-vn -0.4379 -0.8826 -0.1713
-vn -0.4379 -0.8826 -0.1713
-vn 0.2686 0.9389 0.2152
-vn 0.2686 0.9389 0.2152
-vn 0.2686 0.9389 0.2152
-vn 0.2686 0.9389 0.2152
-vn -0.2569 -0.1860 0.9484
-vn -0.2569 -0.1860 0.9484
-vn -0.2569 -0.1860 0.9484
-vn -0.2569 -0.1860 0.9484
-vn 0.4719 -0.1610 -0.8668
-vn 0.4719 -0.1610 -0.8668
-vn 0.4719 -0.1610 -0.8668
-vn 0.4719 -0.1610 -0.8668
-vn -0.3121 -0.9015 -0.2997
-vn -0.3121 -0.9015 -0.2997
-vn -0.3121 -0.9015 -0.2997
-vn -0.3121 -0.9015 -0.2997
-vn 0.8992 0.1417 0.4139
-vn 0.8992 0.1417 0.4139
-vn 0.8992 0.1417 0.4139
-vn 0.8754 0.0683 -0.4785
-vn 0.8754 0.0683 -0.4785
-vn 0.8754 0.0683 -0.4785
-vn 0.8754 0.0683 -0.4785
-vn 0.8951 -0.3473 -0.2795
-vn 0.8951 -0.3473 -0.2795
-vn 0.8951 -0.3473 -0.2795
-vn 0.0453 0.0861 -0.9953
-vn 0.0453 0.0861 -0.9953
-vn 0.0453 0.0861 -0.9953
-vn 0.0453 0.0861 -0.9953
-vn -0.9869 0.0540 0.1522
-vn -0.9869 0.0540 0.1522
-vn -0.9869 0.0540 0.1522
-vn 0.3933 -0.2947 0.8709
-vn 0.3933 -0.2947 0.8709
-vn 0.3933 -0.2947 0.8709
-vn 0.3933 -0.2947 0.8709
-vn -0.0131 0.2104 -0.9775
-vn -0.0131 0.2104 -0.9775
-vn -0.0131 0.2104 -0.9775
-vn -0.0131 0.2104 -0.9775
-vn -0.9792 0.0511 0.1961
-vn -0.9792 0.0511 0.1961
-vn -0.9792 0.0511 0.1961
-vn -0.9792 0.0511 0.1961
-vn 0.3700 -0.1406 0.9183
-vn 0.3700 -0.1406 0.9183
-vn 0.3700 -0.1406 0.9183
-vn 0.3700 -0.1406 0.9183
-vn 0.9865 -0.0120 -0.1635
-vn 0.9865 -0.0120 -0.1635
-vn 0.9865 -0.0120 -0.1635
-vn 0.9865 -0.0120 -0.1635
-vn 0.8812 -0.3950 -0.2597
-vn 0.8812 -0.3950 -0.2597
-vn 0.8812 -0.3950 -0.2597
-vn 0.8812 -0.3950 -0.2597
-vn -0.3416 -0.9364 -0.0806
-vn -0.3416 -0.9364 -0.0806
-vn -0.3416 -0.9364 -0.0806
-vn -0.3416 -0.9364 -0.0806
-vn 0.2950 -0.2184 -0.9302
-vn 0.2950 -0.2184 -0.9302
-vn 0.2950 -0.2184 -0.9302
-vn 0.2950 -0.2184 -0.9302
-vn 0.2179 0.5180 0.8271
-vn 0.2179 0.5180 0.8271
-vn 0.2179 0.5180 0.8271
-vn 0.2179 0.5180 0.8271
-vn 0.8781 0.1721 0.4464
-vn 0.8781 0.1721 0.4464
-vn 0.8781 0.1721 0.4464
-vn 0.8781 0.1721 0.4464
-vn 0.3519 0.0039 0.9360
-vn 0.3519 0.0039 0.9360
-vn 0.3519 0.0039 0.9360
-vn 0.3519 0.0039 0.9360
-vn 0.5009 0.1733 0.8480
-vn 0.5009 0.1733 0.8480
-vn 0.5009 0.1733 0.8480
-vn 0.4195 -0.8939 0.1582
-vn 0.4195 -0.8939 0.1582
-vn 0.4195 -0.8939 0.1582
-vn 0.8797 0.2347 0.4135
-vn 0.8797 0.2347 0.4135
-vn 0.8797 0.2347 0.4135
-vn 0.8797 0.2347 0.4135
-vn 0.4054 0.4008 0.8216
-vn 0.4054 0.4008 0.8216
-vn 0.4054 0.4008 0.8216
-vn 0.4054 0.4008 0.8216
-vn 0.9589 0.1397 0.2470
-vn 0.9589 0.1397 0.2470
-vn 0.9589 0.1397 0.2470
-vn 0.9589 0.1397 0.2470
-vn 0.9826 0.0104 0.1854
-vn 0.9826 0.0104 0.1854
-vn 0.9826 0.0104 0.1854
-vn 0.8356 -0.5474 -0.0454
-vn 0.8356 -0.5474 -0.0454
-vn 0.8356 -0.5474 -0.0454
-vn 0.9624 -0.1782 0.2052
-vn 0.9624 -0.1782 0.2052
-vn 0.9624 -0.1782 0.2052
-vn 0.9624 -0.1782 0.2052
-vn 0.5693 0.1809 0.8020
-vn 0.5693 0.1809 0.8020
-vn 0.5693 0.1809 0.8020
-vn 0.5693 0.1809 0.8020
-vn 0.4248 -0.1131 0.8982
-vn 0.4248 -0.1131 0.8982
-vn 0.4248 -0.1131 0.8982
-vn 0.4248 -0.1131 0.8982
-vn 0.8013 -0.5559 -0.2211
-vn 0.8013 -0.5559 -0.2211
-vn 0.8013 -0.5559 -0.2211
-vn 0.6057 -0.0427 0.7945
-vn 0.6057 -0.0427 0.7945
-vn 0.6057 -0.0427 0.7945
-vn 0.6057 -0.0427 0.7945
-vn 0.9625 0.1322 0.2368
-vn 0.9625 0.1322 0.2368
-vn 0.9625 0.1322 0.2368
-vn 0.9625 0.1322 0.2368
-vn -0.1464 -0.4023 -0.9037
-vn -0.1464 -0.4023 -0.9037
-vn -0.1464 -0.4023 -0.9037
-vn -0.8689 -0.4884 0.0797
-vn -0.8689 -0.4884 0.0797
-vn -0.8689 -0.4884 0.0797
-vn 0.2547 -0.3961 0.8821
-vn 0.2547 -0.3961 0.8821
-vn 0.2547 -0.3961 0.8821
-vn 0.2547 -0.3961 0.8821
-vn 0.5805 -0.7821 -0.2267
-vn 0.5805 -0.7821 -0.2267
-vn 0.5805 -0.7821 -0.2267
-vn 0.5805 -0.7821 -0.2267
-vn -0.9816 0.0670 0.1787
-vn -0.9816 0.0670 0.1787
-vn -0.9816 0.0670 0.1787
-vn -0.9816 0.0670 0.1787
-vn 0.8821 0.1569 -0.4442
-vn 0.8821 0.1569 -0.4442
-vn 0.8821 0.1569 -0.4442
-vn 0.8821 0.1569 -0.4442
-vn 0.8922 0.1700 0.4184
-vn 0.8922 0.1700 0.4184
-vn 0.8922 0.1700 0.4184
-vn 0.4727 0.1273 0.8720
-vn 0.4727 0.1273 0.8720
-vn 0.4727 0.1273 0.8720
-vn 0.9265 0.0869 0.3661
-vn 0.9265 0.0869 0.3661
-vn 0.9265 0.0869 0.3661
-vn 0.1743 -0.1645 0.9709
-vn 0.1743 -0.1645 0.9709
-vn 0.1743 -0.1645 0.9709
-vn 0.1743 -0.1645 0.9709
-vn 0.5265 0.8267 0.1983
-vn 0.5265 0.8267 0.1983
-vn 0.5265 0.8267 0.1983
-vn 0.5265 0.8267 0.1983
-vn 0.1549 -0.0355 -0.9873
-vn 0.1549 -0.0355 -0.9873
-vn 0.1549 -0.0355 -0.9873
-vn -0.0017 -0.1699 0.9855
-vn -0.0017 -0.1699 0.9855
-vn -0.0017 -0.1699 0.9855
-vn -0.0017 -0.1699 0.9855
-vn 0.2158 0.8144 0.5387
-vn 0.2158 0.8144 0.5387
-vn 0.2158 0.8144 0.5387
-vn 0.2158 0.8144 0.5387
-vn 0.2761 0.9321 0.2345
-vn 0.2761 0.9321 0.2345
-vn 0.2761 0.9321 0.2345
-vn 0.9428 0.2795 0.1817
-vn 0.9428 0.2795 0.1817
-vn 0.9428 0.2795 0.1817
-vn 0.9986 -0.0518 -0.0141
-vn 0.9986 -0.0518 -0.0141
-vn 0.9986 -0.0518 -0.0141
-vn 0.1080 -0.9096 0.4012
-vn 0.1080 -0.9096 0.4012
-vn 0.1080 -0.9096 0.4012
-vn -0.2345 0.8990 0.3700
-vn -0.2345 0.8990 0.3700
-vn -0.2345 0.8990 0.3700
-vn -0.2345 0.8990 0.3700
-vn -0.9921 0.0722 0.1030
-vn -0.9921 0.0722 0.1030
-vn -0.9921 0.0722 0.1030
-vn -0.9921 0.0722 0.1030
-vn 0.0022 -1.0000 -0.0050
-vn 0.0022 -1.0000 -0.0050
-vn 0.0022 -1.0000 -0.0050
-vn 0.0022 -1.0000 -0.0050
-vn -0.9203 0.0429 -0.3888
-vn -0.9203 0.0429 -0.3888
-vn -0.9203 0.0429 -0.3888
-vn -0.9203 0.0429 -0.3888
-vn -0.2703 0.4526 0.8498
-vn -0.2703 0.4526 0.8498
-vn -0.2703 0.4526 0.8498
-vn -0.2703 0.4526 0.8498
-vn 0.9574 -0.0737 -0.2791
-vn 0.9574 -0.0737 -0.2791
-vn 0.9574 -0.0737 -0.2791
-vn 0.9574 -0.0737 -0.2791
-vn 0.7381 0.3081 0.6002
-vn 0.7381 0.3081 0.6002
-vn 0.7381 0.3081 0.6002
-vn 0.7381 0.3081 0.6002
-vn 0.5607 0.8117 0.1637
-vn 0.5607 0.8117 0.1637
-vn 0.5607 0.8117 0.1637
-vn 0.5607 0.8117 0.1637
-vn 0.4525 -0.0743 0.8887
-vn 0.4525 -0.0743 0.8887
-vn 0.4525 -0.0743 0.8887
-vn 0.4525 -0.0743 0.8887
-vn 0.1186 -0.9178 -0.3790
-vn 0.1186 -0.9178 -0.3790
-vn 0.1186 -0.9178 -0.3790
-vn -0.7515 -0.6568 -0.0629
-vn -0.7515 -0.6568 -0.0629
-vn -0.7515 -0.6568 -0.0629
-vn 0.9597 0.0281 -0.2798
-vn 0.9597 0.0281 -0.2798
-vn 0.9597 0.0281 -0.2798
-vn 0.9597 0.0281 -0.2798
-vn 0.1273 -0.1278 -0.9836
-vn 0.1273 -0.1278 -0.9836
-vn 0.1273 -0.1278 -0.9836
-vn 0.1273 -0.1278 -0.9836
-vn 0.3455 0.1354 0.9286
-vn 0.3455 0.1354 0.9286
-vn 0.3455 0.1354 0.9286
-vn 0.3455 0.1354 0.9286
-vn 0.2764 -0.8870 0.3700
-vn 0.2764 -0.8870 0.3700
-vn 0.2764 -0.8870 0.3700
-vn 0.2451 -0.1993 0.9488
-vn 0.2451 -0.1993 0.9488
-vn 0.2451 -0.1993 0.9488
-vn 0.2451 -0.1993 0.9488
-vn 0.6807 -0.2106 -0.7016
-vn 0.6807 -0.2106 -0.7016
-vn 0.6807 -0.2106 -0.7016
-vn 0.6807 -0.2106 -0.7016
-vn 0.7106 0.6739 0.2021
-vn 0.7106 0.6739 0.2021
-vn 0.7106 0.6739 0.2021
-vn 0.7106 0.6739 0.2021
-vn 0.5757 -0.8031 -0.1535
-vn 0.5757 -0.8031 -0.1535
-vn 0.5757 -0.8031 -0.1535
-vn 0.5757 -0.8031 -0.1535
-vn -0.2345 0.0522 0.9707
-vn -0.2345 0.0522 0.9707
-vn -0.2345 0.0522 0.9707
-vn -0.2345 0.0522 0.9707
-vn 0.0517 0.0476 -0.9975
-vn 0.0517 0.0476 -0.9975
-vn 0.0517 0.0476 -0.9975
-vn 0.0517 0.0476 -0.9975
-vn 0.2831 0.9562 0.0752
-vn 0.2831 0.9562 0.0752
-vn 0.2831 0.9562 0.0752
-vn 0.2831 0.9562 0.0752
-vn -0.0507 -0.9935 -0.1016
-vn -0.0507 -0.9935 -0.1016
-vn -0.0507 -0.9935 -0.1016
-vn -0.0507 -0.9935 -0.1016
-vn 0.3031 0.0471 0.9518
-vn 0.3031 0.0471 0.9518
-vn 0.3031 0.0471 0.9518
-vn 0.3031 0.0471 0.9518
-vn 0.6130 -0.0352 0.7893
-vn 0.6130 -0.0352 0.7893
-vn 0.6130 -0.0352 0.7893
-vn 0.6130 -0.0352 0.7893
-vn 0.2884 -0.1753 -0.9413
-vn 0.2884 -0.1753 -0.9413
-vn 0.2884 -0.1753 -0.9413
-vn 0.2884 -0.1753 -0.9413
-vn 0.2159 0.9761 0.0226
-vn 0.2159 0.9761 0.0226
-vn 0.2159 0.9761 0.0226
-vn 0.2159 0.9761 0.0226
-vn -0.8065 -0.4408 -0.3941
-vn -0.8065 -0.4408 -0.3941
-vn -0.8065 -0.4408 -0.3941
-vn 0.8405 -0.0442 0.5400
-vn 0.8405 -0.0442 0.5400
-vn 0.8405 -0.0442 0.5400
-vn 0.8405 -0.0442 0.5400
-vn 0.9791 -0.1752 -0.1028
-vn 0.9791 -0.1752 -0.1028
-vn 0.9791 -0.1752 -0.1028
-vn 0.9791 -0.1752 -0.1028
-vn 0.5602 0.7378 0.3766
-vn 0.5602 0.7378 0.3766
-vn 0.5602 0.7378 0.3766
-vn -0.4841 0.3212 0.8139
-vn -0.4841 0.3212 0.8139
-vn -0.4841 0.3212 0.8139
-vn -0.4841 0.3212 0.8139
-vn -0.7657 -0.6427 -0.0248
-vn -0.7657 -0.6427 -0.0248
-vn -0.7657 -0.6427 -0.0248
-vn -0.7657 -0.6427 -0.0248
-vn -0.0687 0.6166 0.7843
-vn -0.0687 0.6166 0.7843
-vn -0.0687 0.6166 0.7843
-vn 0.0699 -0.0315 0.9971
-vn 0.0699 -0.0315 0.9971
-vn 0.0699 -0.0315 0.9971
-vn 0.0699 -0.0315 0.9971
-vn 0.7898 -0.2268 0.5698
-vn 0.7898 -0.2268 0.5698
-vn 0.7898 -0.2268 0.5698
-vn 0.8001 -0.0972 0.5919
-vn 0.8001 -0.0972 0.5919
-vn 0.8001 -0.0972 0.5919
-vn 0.8001 -0.0972 0.5919
-vn 0.5940 -0.7913 0.1450
-vn 0.5940 -0.7913 0.1450
-vn 0.5940 -0.7913 0.1450
-vn 0.5940 -0.7913 0.1450
-vn 0.0906 0.1887 0.9778
-vn 0.0906 0.1887 0.9778
-vn 0.0906 0.1887 0.9778
-vn 0.0984 0.0806 -0.9919
-vn 0.0984 0.0806 -0.9919
-vn 0.0984 0.0806 -0.9919
-vn 0.0984 0.0806 -0.9919
-vn 0.4368 0.8892 0.1359
-vn 0.4368 0.8892 0.1359
-vn 0.4368 0.8892 0.1359
-vn 0.4368 0.8892 0.1359
-vn -0.4359 -0.8263 -0.3567
-vn -0.4359 -0.8263 -0.3567
-vn -0.4359 -0.8263 -0.3567
-vn -0.4359 -0.8263 -0.3567
-vn -0.1164 -0.1902 0.9748
-vn -0.1164 -0.1902 0.9748
-vn -0.1164 -0.1902 0.9748
-vn -0.1164 -0.1902 0.9748
-vn 0.0304 0.1155 -0.9928
-vn 0.0304 0.1155 -0.9928
-vn 0.0304 0.1155 -0.9928
-vn 0.0304 0.1155 -0.9928
-vn 0.4473 0.8833 0.1406
-vn 0.4473 0.8833 0.1406
-vn 0.4473 0.8833 0.1406
-vn -0.4096 -0.8479 -0.3367
-vn -0.4096 -0.8479 -0.3367
-vn -0.4096 -0.8479 -0.3367
-vn -0.9835 -0.1436 0.1101
-vn -0.9835 -0.1436 0.1101
-vn -0.9835 -0.1436 0.1101
-vn -0.3745 0.2581 0.8906
-vn -0.3745 0.2581 0.8906
-vn -0.3745 0.2581 0.8906
-vn -0.3745 0.2581 0.8906
-vn -0.3866 -0.6109 0.6909
-vn -0.3866 -0.6109 0.6909
-vn -0.3866 -0.6109 0.6909
-vn -0.3866 -0.6109 0.6909
-vn 0.2026 0.7986 0.5667
-vn 0.2026 0.7986 0.5667
-vn 0.2026 0.7986 0.5667
-vn 0.3472 -0.1729 0.9217
-vn 0.3472 -0.1729 0.9217
-vn 0.3472 -0.1729 0.9217
-vn 0.0557 0.0627 -0.9965
-vn 0.0557 0.0627 -0.9965
-vn 0.0557 0.0627 -0.9965
-vn 0.0557 0.0627 -0.9965
-vn 0.5625 0.8268 -0.0012
-vn 0.5625 0.8268 -0.0012
-vn 0.5625 0.8268 -0.0012
-vn 0.5625 0.8268 -0.0012
-vn -0.1065 -0.9839 -0.1437
-vn -0.1065 -0.9839 -0.1437
-vn -0.1065 -0.9839 -0.1437
-vn 0.1926 0.4841 0.8535
-vn 0.1926 0.4841 0.8535
-vn 0.1926 0.4841 0.8535
-vn -0.0135 -0.9999 -0.0004
-vn -0.0135 -0.9999 -0.0004
-vn -0.0135 -0.9999 -0.0004
-vn -0.0135 -0.9999 -0.0004
-vn 0.1584 0.3315 0.9300
-vn 0.1584 0.3315 0.9300
-vn 0.1584 0.3315 0.9300
-vn -0.9439 -0.3276 -0.0423
-vn -0.9439 -0.3276 -0.0423
-vn -0.9439 -0.3276 -0.0423
-vn 0.0000 -0.0454 0.9990
-vn 0.0000 -0.0454 0.9990
-vn 0.0000 -0.0454 0.9990
-vn 0.0985 -0.9710 0.2177
-vn 0.0985 -0.9710 0.2177
-vn 0.0985 -0.9710 0.2177
-vn 0.0985 -0.9710 0.2177
-vn 0.8813 0.0216 0.4721
-vn 0.8813 0.0216 0.4721
-vn 0.8813 0.0216 0.4721
-vn 0.9213 -0.1090 -0.3733
-vn 0.9213 -0.1090 -0.3733
-vn 0.9213 -0.1090 -0.3733
-vn 0.9213 -0.1090 -0.3733
-vn 0.4018 -0.1466 0.9039
-vn 0.4018 -0.1466 0.9039
-vn 0.4018 -0.1466 0.9039
-vn 0.4018 -0.1466 0.9039
-vn 0.2305 -0.1079 -0.9671
-vn 0.2305 -0.1079 -0.9671
-vn 0.2305 -0.1079 -0.9671
-vn 0.2305 -0.1079 -0.9671
-vn -0.9922 -0.1101 0.0578
-vn -0.9922 -0.1101 0.0578
-vn -0.9922 -0.1101 0.0578
-vn -0.9922 -0.1101 0.0578
-vn 0.3247 0.0848 -0.9420
-vn 0.3247 0.0848 -0.9420
-vn 0.3247 0.0848 -0.9420
-vn 0.3247 0.0848 -0.9420
-vn 0.8896 0.3112 -0.3342
-vn 0.8896 0.3112 -0.3342
-vn 0.8896 0.3112 -0.3342
-vn 0.8826 0.1868 0.4314
-vn 0.8826 0.1868 0.4314
-vn 0.8826 0.1868 0.4314
-vn 0.8826 0.1868 0.4314
-vn 0.4908 0.2558 0.8329
-vn 0.4908 0.2558 0.8329
-vn 0.4908 0.2558 0.8329
-vn 0.4908 0.2558 0.8329
-vn 0.1991 -0.9326 0.3009
-vn 0.1991 -0.9326 0.3009
-vn 0.1991 -0.9326 0.3009
-vn 0.1991 -0.9326 0.3009
-vn 0.2058 0.0231 -0.9783
-vn 0.2058 0.0231 -0.9783
-vn 0.2058 0.0231 -0.9783
-vn 0.2058 0.0231 -0.9783
-vn -0.2901 -0.0605 0.9551
-vn -0.2901 -0.0605 0.9551
-vn -0.2901 -0.0605 0.9551
-vn -0.3489 -0.9259 -0.1447
-vn -0.3489 -0.9259 -0.1447
-vn -0.3489 -0.9259 -0.1447
-vn -0.3489 -0.9259 -0.1447
-vn 0.0284 0.0393 -0.9988
-vn 0.0284 0.0393 -0.9988
-vn 0.0284 0.0393 -0.9988
-vn 0.0284 0.0393 -0.9988
-vn 0.7231 0.6525 0.2267
-vn 0.7231 0.6525 0.2267
-vn 0.7231 0.6525 0.2267
-vn 0.0951 -0.9499 -0.2979
-vn 0.0951 -0.9499 -0.2979
-vn 0.0951 -0.9499 -0.2979
-vn 0.0104 0.0752 -0.9971
-vn 0.0104 0.0752 -0.9971
-vn 0.0104 0.0752 -0.9971
-vn 0.0104 0.0752 -0.9971
-vn 0.5617 0.5448 -0.6226
-vn 0.5617 0.5448 -0.6226
-vn 0.5617 0.5448 -0.6226
-vn 0.5617 0.5448 -0.6226
-vn 0.4104 -0.2331 -0.8816
-vn 0.4104 -0.2331 -0.8816
-vn 0.4104 -0.2331 -0.8816
-vn 0.4104 -0.2331 -0.8816
-vn -0.2017 -0.9682 -0.1481
-vn -0.2017 -0.9682 -0.1481
-vn -0.2017 -0.9682 -0.1481
-vn -0.1853 -0.9802 -0.0705
-vn -0.1853 -0.9802 -0.0705
-vn -0.1853 -0.9802 -0.0705
-vn 0.0082 0.5297 -0.8482
-vn 0.0082 0.5297 -0.8482
-vn 0.0082 0.5297 -0.8482
-vn 0.0082 0.5297 -0.8482
-vn 0.4981 0.2118 0.8409
-vn 0.4981 0.2118 0.8409
-vn 0.4981 0.2118 0.8409
-vn 0.4981 0.2118 0.8409
-vn 0.9154 0.1115 0.3868
-vn 0.9154 0.1115 0.3868
-vn 0.9154 0.1115 0.3868
-vn 0.9154 0.1115 0.3868
-vn 0.9849 0.1424 0.0984
-vn 0.9849 0.1424 0.0984
-vn 0.9849 0.1424 0.0984
-vn 0.9849 0.1424 0.0984
-vn 0.9176 0.2222 0.3295
-vn 0.9176 0.2222 0.3295
-vn 0.9176 0.2222 0.3295
-vn 0.8424 0.0336 0.5378
-vn 0.8424 0.0336 0.5378
-vn 0.8424 0.0336 0.5378
-vn 0.8424 0.0336 0.5378
-vn 0.9822 0.1564 0.1044
-vn 0.9822 0.1564 0.1044
-vn 0.9822 0.1564 0.1044
-vn 0.9822 0.1564 0.1044
-vn 0.8392 0.2042 -0.5041
-vn 0.8392 0.2042 -0.5041
-vn 0.8392 0.2042 -0.5041
-vn 0.8392 0.2042 -0.5041
-vn 0.8476 0.1279 -0.5150
-vn 0.8476 0.1279 -0.5150
-vn 0.8476 0.1279 -0.5150
-vn 0.8476 0.1279 -0.5150
-vn 0.3651 0.2222 -0.9041
-vn 0.3651 0.2222 -0.9041
-vn 0.3651 0.2222 -0.9041
-vn 0.3651 0.2222 -0.9041
-vn 0.2551 0.0353 -0.9663
-vn 0.2551 0.0353 -0.9663
-vn 0.2551 0.0353 -0.9663
-vn 0.2551 0.0353 -0.9663
-vn 0.4221 0.6183 0.6630
-vn 0.4221 0.6183 0.6630
-vn 0.4221 0.6183 0.6630
-vn 0.7567 0.6087 0.2385
-vn 0.7567 0.6087 0.2385
-vn 0.7567 0.6087 0.2385
-vn 0.7567 0.6087 0.2385
-vn 0.8063 0.5860 0.0806
-vn 0.8063 0.5860 0.0806
-vn 0.8063 0.5860 0.0806
-vn 0.4688 0.7655 -0.4407
-vn 0.4688 0.7655 -0.4407
-vn 0.4688 0.7655 -0.4407
-vn 0.4688 0.7655 -0.4407
-vn 0.2815 0.7238 -0.6299
-vn 0.2815 0.7238 -0.6299
-vn 0.2815 0.7238 -0.6299
-vn 0.2964 0.9524 0.0712
-vn 0.2964 0.9524 0.0712
-vn 0.2964 0.9524 0.0712
-vn 0.1841 0.9614 -0.2047
-vn 0.1841 0.9614 -0.2047
-vn 0.1841 0.9614 -0.2047
-vn 0.0000 0.7502 0.6612
-vn 0.0000 0.7502 0.6612
-vn 0.0000 0.7502 0.6612
-vn 0.0000 0.7502 0.6612
-vn 0.2047 0.1425 0.9684
-vn 0.2047 0.1425 0.9684
-vn 0.2047 0.1425 0.9684
-vn 0.0000 0.2848 0.9586
-vn 0.0000 0.2848 0.9586
-vn 0.0000 0.2848 0.9586
-vn -0.9000 0.0177 0.4355
-vn -0.9000 0.0177 0.4355
-vn -0.9000 0.0177 0.4355
-vn -0.9000 0.0177 0.4355
-vn -0.4981 0.2118 0.8409
-vn -0.4981 0.2118 0.8409
-vn -0.4981 0.2118 0.8409
-vn -0.4981 0.2118 0.8409
-vn -0.9154 0.1115 0.3868
-vn -0.9154 0.1115 0.3868
-vn -0.9154 0.1115 0.3868
-vn -0.9154 0.1115 0.3868
-vn -0.9849 0.1424 0.0984
-vn -0.9849 0.1424 0.0984
-vn -0.9849 0.1424 0.0984
-vn -0.9849 0.1424 0.0984
-vn -0.9176 0.2222 0.3295
-vn -0.9176 0.2222 0.3295
-vn -0.9176 0.2222 0.3295
-vn -0.8424 0.0336 0.5378
-vn -0.8424 0.0336 0.5378
-vn -0.8424 0.0336 0.5378
-vn -0.8424 0.0336 0.5378
-vn -0.9822 0.1564 0.1044
-vn -0.9822 0.1564 0.1044
-vn -0.9822 0.1564 0.1044
-vn -0.9822 0.1564 0.1044
-vn -0.8392 0.2042 -0.5041
-vn -0.8392 0.2042 -0.5041
-vn -0.8392 0.2042 -0.5041
-vn -0.8392 0.2042 -0.5041
-vn -0.8476 0.1279 -0.5150
-vn -0.8476 0.1279 -0.5150
-vn -0.8476 0.1279 -0.5150
-vn -0.8476 0.1279 -0.5150
-vn -0.3651 0.2222 -0.9041
-vn -0.3651 0.2222 -0.9041
-vn -0.3651 0.2222 -0.9041
-vn -0.3651 0.2222 -0.9041
-vn -0.2551 0.0353 -0.9663
-vn -0.2551 0.0353 -0.9663
-vn -0.2551 0.0353 -0.9663
-vn -0.2551 0.0353 -0.9663
-vn -0.4221 0.6183 0.6630
-vn -0.4221 0.6183 0.6630
-vn -0.4221 0.6183 0.6630
-vn -0.7568 0.6087 0.2385
-vn -0.7568 0.6087 0.2385
-vn -0.7568 0.6087 0.2385
-vn -0.7568 0.6087 0.2385
-vn -0.8063 0.5860 0.0806
-vn -0.8063 0.5860 0.0806
-vn -0.8063 0.5860 0.0806
-vn -0.4688 0.7655 -0.4407
-vn -0.4688 0.7655 -0.4407
-vn -0.4688 0.7655 -0.4407
-vn -0.4688 0.7655 -0.4407
-vn -0.2815 0.7238 -0.6299
-vn -0.2815 0.7238 -0.6299
-vn -0.2815 0.7238 -0.6299
-vn -0.2964 0.9524 0.0712
-vn -0.2964 0.9524 0.0712
-vn -0.2964 0.9524 0.0712
-vn -0.1841 0.9614 -0.2047
-vn -0.1841 0.9614 -0.2047
-vn -0.1841 0.9614 -0.2047
-vn 0.0000 0.9651 0.2620
-vn 0.0000 0.9651 0.2620
-vn 0.0000 0.9651 0.2620
-vn -0.2047 0.1425 0.9684
-vn -0.2047 0.1425 0.9684
-vn -0.2047 0.1425 0.9684
-vn 0.9000 0.0177 0.4355
-vn 0.9000 0.0177 0.4355
-vn 0.9000 0.0177 0.4355
-vn 0.9000 0.0177 0.4355
-vn 0.2337 0.1582 -0.9593
-vn 0.2337 0.1582 -0.9593
-vn 0.2337 0.1582 -0.9593
-vn 0.2337 0.1582 -0.9593
-vn 0.9108 0.1087 0.3983
-vn 0.9108 0.1087 0.3983
-vn 0.9108 0.1087 0.3983
-vn 0.9108 0.1087 0.3983
-vn -0.2721 -0.2324 0.9338
-vn -0.2721 -0.2324 0.9338
-vn -0.2721 -0.2324 0.9338
-vn -0.2721 -0.2324 0.9338
-vn 0.2667 0.2664 -0.9262
-vn 0.2667 0.2664 -0.9262
-vn 0.2667 0.2664 -0.9262
-vn 0.2667 0.2664 -0.9262
-vn -0.2859 -0.7827 0.5528
-vn -0.2859 -0.7827 0.5528
-vn -0.2859 -0.7827 0.5528
-vn -0.2859 -0.7827 0.5528
-vn 0.8992 0.0079 0.4376
-vn 0.8992 0.0079 0.4376
-vn 0.8992 0.0079 0.4376
-vn -0.2937 0.9558 0.0153
-vn -0.2937 0.9558 0.0153
-vn -0.2937 0.9558 0.0153
-vn -0.2937 0.9558 0.0153
-vn -0.1893 -0.7092 -0.6791
-vn -0.1893 -0.7092 -0.6791
-vn -0.1893 -0.7092 -0.6791
-vn -0.1893 -0.7092 -0.6791
-vn 0.9591 0.2709 0.0827
-vn 0.9591 0.2709 0.0827
-vn 0.9591 0.2709 0.0827
-vn 0.9591 0.2709 0.0827
-vn 0.1679 -0.1013 0.9806
-vn 0.1679 -0.1013 0.9806
-vn 0.1679 -0.1013 0.9806
-vn -0.1678 0.1072 -0.9800
-vn -0.1678 0.1072 -0.9800
-vn -0.1678 0.1072 -0.9800
-vn 0.0422 -0.7280 0.6843
-vn 0.0422 -0.7280 0.6843
-vn 0.0422 -0.7280 0.6843
-vn 0.0422 -0.7280 0.6843
-vn 0.9372 -0.3398 0.0787
-vn 0.9372 -0.3398 0.0787
-vn 0.9372 -0.3398 0.0787
-# 1312 vertex normals
-
-vt 0.3107 0.8057 0.0000
-vt 0.0418 0.8273 0.0000
-vt 0.0224 0.9163 0.0000
-vt 0.3107 0.4728 0.0000
-vt 0.1035 0.2227 0.0000
-vt 0.1074 0.0253 0.0000
-vt 0.0899 0.0232 0.0000
-vt 0.0636 0.2210 0.0000
-vt 0.1450 0.0577 0.0000
-vt 0.1687 0.2207 0.0000
-vt 0.1815 0.0586 0.0000
-vt 0.1640 0.0674 0.0000
-vt 0.2169 0.2236 0.0000
-vt 0.2201 0.0170 0.0000
-vt 0.2532 0.2123 0.0000
-vt 0.1832 0.6616 0.0000
-vt 0.1399 0.7884 0.0000
-vt 0.1833 0.7921 0.0000
-vt 0.2391 0.6616 0.0000
-vt 0.2493 0.8024 0.0000
-vt 0.1804 0.9648 0.0000
-vt 0.1341 0.8526 0.0000
-vt 0.0281 0.8778 0.0000
-vt 0.8077 0.9449 0.0000
-vt 0.7460 0.9866 0.0000
-vt 0.7460 0.9449 0.0000
-vt 0.8055 0.9227 0.0000
-vt 0.7460 0.9227 0.0000
-vt 0.7460 0.8094 0.0000
-vt 0.8053 0.8344 0.0000
-vt 0.2595 0.9680 0.0000
-vt 0.2566 0.8644 0.0000
-vt 0.1810 0.8442 0.0000
-vt 0.8086 0.8094 0.0000
-vt 0.8795 0.8094 0.0000
-vt 0.8795 0.8344 0.0000
-vt 0.6800 0.8094 0.0000
-vt 0.6889 0.9227 0.0000
-vt 0.6269 0.9227 0.0000
-vt 0.8108 0.7884 0.0000
-vt 0.7460 0.7884 0.0000
-vt 0.7460 0.6802 0.0000
-vt 0.8127 0.7051 0.0000
-vt 0.6918 0.6802 0.0000
-vt 0.6777 0.7884 0.0000
-vt 0.8099 0.6802 0.0000
-vt 0.8622 0.6802 0.0000
-vt 0.8795 0.7051 0.0000
-vt 0.8795 0.7884 0.0000
-vt 0.1854 0.4365 0.0000
-vt 0.1439 0.4087 0.0000
-vt 0.1364 0.4405 0.0000
-vt 0.0869 0.4366 0.0000
-vt 0.0973 0.3997 0.0000
-vt 0.1665 0.2975 0.0000
-vt 0.1634 0.2856 0.0000
-vt 0.1066 0.2975 0.0000
-vt 0.0549 0.2975 0.0000
-vt 0.0533 0.3137 0.0000
-vt 0.1055 0.3137 0.0000
-vt 0.2216 0.2810 0.0000
-vt 0.2243 0.2975 0.0000
-vt 0.0907 0.2286 0.0000
-vt 0.2823 0.2237 0.0000
-vt 0.2203 0.2369 0.0000
-vt 0.1517 0.2329 0.0000
-vt 0.2858 0.9314 0.0000
-vt 0.5026 0.1853 0.0000
-vt 0.5291 0.2009 0.0000
-vt 0.5298 0.1673 0.0000
-vt 0.5088 0.1569 0.0000
-vt 0.5062 0.1298 0.0000
-vt 0.4678 0.2318 0.0000
-vt 0.4344 0.1874 0.0000
-vt 0.4309 0.2270 0.0000
-vt 0.4999 0.2272 0.0000
-vt 0.5055 0.2476 0.0000
-vt 0.5256 0.2239 0.0000
-vt 0.4643 0.2508 0.0000
-vt 0.4516 0.2875 0.0000
-vt 0.3672 0.2403 0.0000
-vt 0.4357 0.0900 0.0000
-vt 0.3761 0.1116 0.0000
-vt 0.4347 0.1190 0.0000
-vt 0.3880 0.0541 0.0000
-vt 0.4096 0.1930 0.0000
-vt 0.5070 0.0878 0.0000
-vt 0.2699 0.9825 0.0000
-vt 0.3078 0.9535 0.0000
-vt 0.2255 0.3137 0.0000
-vt 0.1336 0.4715 0.0000
-vt 0.0941 0.4709 0.0000
-vt 0.2576 0.5822 0.0000
-vt 0.3084 0.0404 0.0000
-vt 0.2902 0.0307 0.0000
-vt 0.3135 0.0238 0.0000
-vt 0.7658 0.0409 0.0000
-vt 0.2740 0.0396 0.0000
-vt 0.2662 0.0236 0.0000
-vt 0.1657 0.3137 0.0000
-vt 0.0417 0.3958 0.0000
-vt 0.7109 0.6619 0.0000
-vt 0.7460 0.6619 0.0000
-vt 0.8009 0.6619 0.0000
-vt 0.8356 0.6619 0.0000
-vt 0.7232 0.6305 0.0000
-vt 0.7460 0.6305 0.0000
-vt 0.7962 0.6305 0.0000
-vt 0.8121 0.6305 0.0000
-vt 0.7839 0.5279 0.0000
-vt 0.7997 0.5230 0.0000
-vt 0.7802 0.5027 0.0000
-vt 0.7063 0.5876 0.0000
-vt 0.6631 0.5538 0.0000
-vt 0.7660 0.5742 0.0000
-vt 0.7416 0.4982 0.0000
-vt 0.7379 0.5389 0.0000
-vt 0.7561 0.5372 0.0000
-vt 0.7186 0.5457 0.0000
-vt 0.8063 0.5569 0.0000
-vt 0.7882 0.5651 0.0000
-vt 0.8133 0.5545 0.0000
-vt 0.2610 0.4728 0.0000
-vt 0.3489 0.3960 0.0000
-vt 0.2513 0.4119 0.0000
-vt 0.0526 0.4653 0.0000
-vt 0.3107 0.6616 0.0000
-vt 0.3107 0.8605 0.0000
-vt 0.0614 0.7628 0.0000
-vt 0.5338 0.1538 0.0000
-vt 0.5339 0.2868 0.0000
-vt 0.5338 0.2544 0.0000
-vt 0.3105 0.9531 0.0000
-vt 0.1145 0.6616 0.0000
-vt 0.3499 0.4002 0.0000
-vt 0.7042 0.5143 0.0000
-vt 0.0732 0.6616 0.0000
-vt 0.9122 0.1756 0.0000
-vt 0.9434 0.1756 0.0000
-vt 0.9254 0.0319 0.0000
-vt 0.9094 0.0329 0.0000
-vt 0.8739 0.0600 0.0000
-vt 0.8590 0.1756 0.0000
-vt 0.8411 0.0589 0.0000
-vt 0.8242 0.1756 0.0000
-vt 0.8563 0.0678 0.0000
-vt 0.8086 0.0196 0.0000
-vt 0.7953 0.1756 0.0000
-vt 0.1834 0.6616 0.0000
-vt 0.1835 0.7921 0.0000
-vt 0.1401 0.7884 0.0000
-vt 0.1147 0.6616 0.0000
-vt 0.2393 0.6616 0.0000
-vt 0.2495 0.8024 0.0000
-vt 0.1806 0.9648 0.0000
-vt 0.1343 0.8526 0.0000
-vt 0.5286 0.9420 0.0000
-vt 0.4699 0.9420 0.0000
-vt 0.4699 0.9778 0.0000
-vt 0.5264 0.9164 0.0000
-vt 0.5262 0.8281 0.0000
-vt 0.4699 0.8031 0.0000
-vt 0.4699 0.9164 0.0000
-vt 0.2597 0.9680 0.0000
-vt 0.1812 0.8442 0.0000
-vt 0.2568 0.8644 0.0000
-vt 0.5295 0.8031 0.0000
-vt 0.5908 0.8281 0.0000
-vt 0.5908 0.8031 0.0000
-vt 0.3478 0.9164 0.0000
-vt 0.4098 0.9164 0.0000
-vt 0.4009 0.8031 0.0000
-vt 0.5317 0.7821 0.0000
-vt 0.5336 0.6988 0.0000
-vt 0.4699 0.6747 0.0000
-vt 0.4699 0.7821 0.0000
-vt 0.4127 0.6747 0.0000
-vt 0.3986 0.7821 0.0000
-vt 0.5308 0.6747 0.0000
-vt 0.5908 0.6988 0.0000
-vt 0.5831 0.6747 0.0000
-vt 0.5908 0.7821 0.0000
-vt 0.8479 0.4132 0.0000
-vt 0.8933 0.4142 0.0000
-vt 0.8848 0.3854 0.0000
-vt 0.9389 0.4095 0.0000
-vt 0.9275 0.3759 0.0000
-vt 0.8589 0.2861 0.0000
-vt 0.9142 0.2821 0.0000
-vt 0.8602 0.2774 0.0000
-vt 0.9628 0.2861 0.0000
-vt 0.9164 0.3016 0.0000
-vt 0.9643 0.3016 0.0000
-vt 0.8047 0.2861 0.0000
-vt 0.8051 0.2742 0.0000
-vt 0.7326 0.2071 0.0000
-vt 0.9173 0.2208 0.0000
-vt 0.8086 0.2361 0.0000
-vt 0.8594 0.2278 0.0000
-vt 0.3107 0.9196 0.0000
-vt 0.2860 0.9314 0.0000
-vt 0.5651 0.1853 0.0000
-vt 0.5589 0.1569 0.0000
-vt 0.5378 0.1673 0.0000
-vt 0.5385 0.2009 0.0000
-vt 0.5615 0.1298 0.0000
-vt 0.5338 0.1344 0.0000
-vt 0.5999 0.2317 0.0000
-vt 0.6368 0.2281 0.0000
-vt 0.6332 0.1874 0.0000
-vt 0.5678 0.2272 0.0000
-vt 0.5421 0.2239 0.0000
-vt 0.5622 0.2476 0.0000
-vt 0.6161 0.2875 0.0000
-vt 0.6034 0.2508 0.0000
-vt 0.7005 0.2402 0.0000
-vt 0.6320 0.0899 0.0000
-vt 0.6330 0.1190 0.0000
-vt 0.6916 0.1116 0.0000
-vt 0.6796 0.0540 0.0000
-vt 0.6581 0.1930 0.0000
-vt 0.5606 0.0878 0.0000
-vt 0.5338 0.0953 0.0000
-vt 0.2701 0.9825 0.0000
-vt 0.3080 0.9535 0.0000
-vt 0.8045 0.3016 0.0000
-vt 0.8972 0.4428 0.0000
-vt 0.9339 0.4413 0.0000
-vt 0.2578 0.5822 0.0000
-vt 0.2902 0.0307 0.0000
-vt 0.2740 0.0396 0.0000
-vt 0.2662 0.0236 0.0000
-vt 0.7658 0.0409 0.0000
-vt 0.3135 0.0238 0.0000
-vt 0.3084 0.0404 0.0000
-vt 0.8604 0.3016 0.0000
-vt 0.9785 0.3695 0.0000
-vt 0.4699 0.6556 0.0000
-vt 0.4318 0.6556 0.0000
-vt 0.5566 0.6556 0.0000
-vt 0.5218 0.6556 0.0000
-vt 0.4699 0.6242 0.0000
-vt 0.4441 0.6242 0.0000
-vt 0.5330 0.6242 0.0000
-vt 0.5171 0.6242 0.0000
-vt 0.3107 0.5822 0.0000
-vt 0.7839 0.5279 0.0000
-vt 0.7561 0.5372 0.0000
-vt 0.7802 0.5027 0.0000
-vt 0.7997 0.5230 0.0000
-vt 0.6631 0.5538 0.0000
-vt 0.7063 0.5876 0.0000
-vt 0.7660 0.5742 0.0000
-vt 0.7416 0.4982 0.0000
-vt 0.7379 0.5389 0.0000
-vt 0.7042 0.5143 0.0000
-vt 0.7186 0.5457 0.0000
-vt 0.7882 0.5651 0.0000
-vt 0.8063 0.5569 0.0000
-vt 0.8133 0.5545 0.0000
-vt 0.2612 0.4728 0.0000
-vt 0.6949 0.3842 0.0000
-vt 0.7856 0.3933 0.0000
-vt 0.9724 0.4336 0.0000
-vt 0.2524 0.4170 0.0000
-vt 0.0275 0.4648 0.0000
-vt 0.4091 0.5386 0.0000
-vt 0.4300 0.5070 0.0000
-vt 0.4515 0.5314 0.0000
-vt 0.4263 0.5527 0.0000
-vt 0.4920 0.4514 0.0000
-vt 0.4997 0.5187 0.0000
-vt 0.5542 0.5118 0.0000
-vt 0.4167 0.2972 0.0000
-vt 0.4868 0.3160 0.0000
-vt 0.5424 0.3315 0.0000
-vt 0.4341 0.4607 0.0000
-vt 0.5521 0.4459 0.0000
-vt 0.5911 0.5193 0.0000
-vt 0.6084 0.2977 0.0000
-vt 0.6010 0.4502 0.0000
-vt 0.4820 0.5643 0.0000
-vt 0.5386 0.5567 0.0000
-vt 0.6348 0.5377 0.0000
-vt 0.3982 0.5591 0.0000
-vt 0.3690 0.3002 0.0000
-vt 0.3803 0.4634 0.0000
-vt 0.4091 0.5386 0.0000
-vt 0.4300 0.5071 0.0000
-vt 0.4515 0.5315 0.0000
-vt 0.4161 0.5817 0.0000
-vt 0.4920 0.4515 0.0000
-vt 0.4997 0.5188 0.0000
-vt 0.5521 0.4459 0.0000
-vt 0.5542 0.5119 0.0000
-vt 0.4340 0.4608 0.0000
-vt 0.4166 0.2973 0.0000
-vt 0.4867 0.3161 0.0000
-vt 0.5424 0.3315 0.0000
-vt 0.6010 0.4503 0.0000
-vt 0.5911 0.5193 0.0000
-vt 0.6083 0.2977 0.0000
-vt 0.6618 0.4642 0.0000
-vt 0.6823 0.3086 0.0000
-vt 0.4667 0.6076 0.0000
-vt 0.5386 0.5567 0.0000
-vt 0.5889 0.5821 0.0000
-vt 0.5237 0.6033 0.0000
-vt 0.3802 0.4635 0.0000
-vt 0.3690 0.3003 0.0000
-vt 0.0756 0.0215 0.0000
-vt 0.0284 0.2165 0.0000
-vt 0.2315 0.5822 0.0000
-vt 0.3072 0.2975 0.0000
-vt 0.3066 0.3137 0.0000
-vt 0.0396 0.2418 0.0000
-vt 0.1823 0.6318 0.0000
-vt 0.1420 0.6318 0.0000
-vt 0.2109 0.4334 0.0000
-vt 0.3394 0.3798 0.0000
-vt 0.0336 0.4139 0.0000
-vt 0.0965 0.6318 0.0000
-vt 0.0296 0.4154 0.0000
-vt 0.9386 0.0312 0.0000
-vt 0.9744 0.1756 0.0000
-vt 0.2317 0.5822 0.0000
-vt 0.7265 0.2821 0.0000
-vt 0.7289 0.3016 0.0000
-vt 0.9699 0.2253 0.0000
-vt 0.1825 0.6318 0.0000
-vt 0.1422 0.6318 0.0000
-vt 0.8240 0.4114 0.0000
-vt 0.7027 0.3682 0.0000
-vt 0.9868 0.3852 0.0000
-vt 0.0967 0.6318 0.0000
-vt 0.0681 0.6318 0.0000
-vt 0.9955 0.4316 0.0000
-vt 0.9906 0.3863 0.0000
-vt 0.6942 0.3882 0.0000
-vt 0.7850 0.3981 0.0000
-vt 0.0420 0.8273 0.0000
-vt 0.0226 0.9163 0.0000
-vt 0.0283 0.8778 0.0000
-vt 0.0616 0.7629 0.0000
-vt 0.0734 0.6616 0.0000
-vt 0.0683 0.6318 0.0000
-vt 0.5332 0.9778 0.0000
-vt 0.3478 0.9420 0.0000
-vt 0.2104 0.9004 0.0000
-vt 0.4077 0.9420 0.0000
-vt 0.8123 0.9817 0.0000
-vt 0.6269 0.9449 0.0000
-vt 0.2102 0.9004 0.0000
-vt 0.6868 0.9449 0.0000
-vt 0.6269 0.8094 0.0000
-vt 0.6269 0.8294 0.0000
-vt 0.8795 0.9227 0.0000
-vt 0.6417 0.6802 0.0000
-vt 0.6269 0.6997 0.0000
-vt 0.6269 0.7884 0.0000
-vt 0.6659 0.6619 0.0000
-vt 0.6771 0.6305 0.0000
-vt 0.8801 0.5699 0.0000
-vt 0.3478 0.8231 0.0000
-vt 0.3478 0.8031 0.0000
-vt 0.5908 0.9164 0.0000
-vt 0.3478 0.6934 0.0000
-vt 0.3626 0.6747 0.0000
-vt 0.3478 0.7821 0.0000
-vt 0.3868 0.6556 0.0000
-vt 0.3980 0.6242 0.0000
-vt 0.8801 0.5699 0.0000
-vt 0.5908 0.9420 0.0000
-vt 0.8795 0.9449 0.0000
-vt 0.4971 0.0267 0.0000
-vt 0.5338 0.0190 0.0000
-vt 0.5705 0.0266 0.0000
-vt 0.2936 0.9628 0.0000
-vt 0.2938 0.9628 0.0000
-vt 0.1264 0.9132 0.0000
-vt 0.0539 0.9410 0.0000
-vt 0.1261 0.9132 0.0000
-vt 0.0537 0.9410 0.0000
-vt 0.3272 0.0717 0.0000
-vt 0.7404 0.0716 0.0000
-vt 0.9766 0.5071 0.0000
-vt 0.9671 0.4662 0.0000
-vt 0.9664 0.4646 0.0000
-vt 0.9935 0.5066 0.0000
-vt 0.9620 0.7107 0.0000
-vt 0.9222 0.7170 0.0000
-vt 0.9300 0.5164 0.0000
-vt 0.9160 0.7257 0.0000
-vt 0.9130 0.5155 0.0000
-vt 0.9711 0.7189 0.0000
-vt 0.9572 0.7753 0.0000
-vt 0.9353 0.7593 0.0000
-vt 0.9323 0.7553 0.0000
-vt 0.9675 0.7689 0.0000
-vt 0.9543 0.9680 0.0000
-vt 0.9099 0.9758 0.0000
-vt 0.9197 0.7813 0.0000
-vt 0.9041 0.7777 0.0000
-vt 0.7839 0.0501 0.0000
-vt 0.2897 0.0124 0.0000
-vt 0.7483 0.0551 0.0000
-vt 0.2897 0.0124 0.0000
-vt 0.8150 0.5993 0.0000
-vt 0.7740 0.6165 0.0000
-vt 0.7014 0.6099 0.0000
-vt 0.6747 0.5920 0.0000
-vt 0.8859 0.6072 0.0000
-vt 0.8162 0.5073 0.0000
-vt 0.8535 0.5070 0.0000
-vt 0.8162 0.5073 0.0000
-vt 0.8535 0.5070 0.0000
-vt 0.7740 0.6165 0.0000
-vt 0.8150 0.5993 0.0000
-vt 0.8794 0.5231 0.0000
-vt 0.6747 0.5920 0.0000
-vt 0.7014 0.6099 0.0000
-vt 0.8859 0.6072 0.0000
-vt 0.8794 0.5231 0.0000
-vt 0.7483 0.0551 0.0000
-vt 0.7651 0.1471 0.0000
-vt 0.7510 0.1380 0.0000
-vt 0.7779 0.1398 0.0000
-vt 0.9144 0.2153 0.0000
-vt 0.9497 0.2075 0.0000
-vt 0.7466 0.1838 0.0000
-vt 0.8550 0.2181 0.0000
-vt 0.8099 0.2158 0.0000
-vt 0.7741 0.2049 0.0000
-vt 0.3453 0.0972 0.0000
-vt 0.2385 0.1030 0.0000
-vt 0.3104 0.0739 0.0000
-vt 0.2755 0.0719 0.0000
-vt 0.2902 0.0717 0.0000
-vt 0.0944 0.1858 0.0000
-vt 0.0600 0.1858 0.0000
-vt 0.1541 0.1858 0.0000
-vt 0.1933 0.1858 0.0000
-vt 0.2252 0.1858 0.0000
-vt 0.0259 0.1858 0.0000
-vt 0.7779 0.1398 0.0000
-vt 0.7651 0.1471 0.0000
-vt 0.7839 0.0501 0.0000
-vt 0.7510 0.1380 0.0000
-vt 0.2385 0.1030 0.0000
-vt 0.2755 0.0719 0.0000
-vt 0.3104 0.0739 0.0000
-vt 0.2902 0.0717 0.0000
-vt 0.3453 0.0972 0.0000
-vt 0.3627 0.2127 0.0000
-vt 0.7049 0.2127 0.0000
-vt 0.4357 0.0229 0.0000
-vt 0.6319 0.0228 0.0000
-vt 0.6348 0.5377 0.0000
-vt 0.6618 0.4642 0.0000
-vt 0.6823 0.3086 0.0000
-vt 0.5890 0.5821 0.0000
-vt 0.3982 0.5592 0.0000
-vt 0.4263 0.5528 0.0000
-vt 0.4820 0.5644 0.0000
-vt 0.5237 0.6034 0.0000
-vt 0.4678 0.2318 0.0000
-vt 0.4309 0.2270 0.0000
-vt 0.4999 0.2272 0.0000
-vt 0.5055 0.2476 0.0000
-vt 0.5256 0.2239 0.0000
-vt 0.4643 0.2508 0.0000
-vt 0.5338 0.2544 0.0000
-vt 0.5999 0.2317 0.0000
-vt 0.6368 0.2281 0.0000
-vt 0.5678 0.2272 0.0000
-vt 0.5421 0.2239 0.0000
-vt 0.5622 0.2476 0.0000
-vt 0.6034 0.2508 0.0000
-# 478 texture coords
-
-g man_zbrush002
-usemtl Material__44
-f 5/439/1 8/440/2 7/7/3 6/6/4
-f 9/9/5 10/441/6 5/439/7 6/6/8
-f 11/11/9 13/442/10 12/12/11
-f 11/11/12 14/14/13 15/443/14 13/442/15
-f 17/17/16 134/134/17 16/16/18 18/18/19
-f 19/19/20 20/20/21 18/18/22 16/16/23
-f 22/22/24 21/382/25 23/23/26 2/2/27
-f 21/351/28 24/24/29 26/26/30 25/25/31
-f 27/27/32 30/30/33 29/29/34 28/28/35
-f 127/127/36 1/1/37 20/20/38 19/19/39
-f 23/23/40 21/382/41 31/383/42 3/3/43
-f 25/353/44 33/33/45 18/18/46 32/32/47
-f 18/18/48 20/20/49 32/32/50
-f 128/128/51 32/32/52 20/20/53 1/1/54
-f 34/34/55 30/30/56 36/36/57 35/35/58
-f 36/356/59 39/39/60 38/38/61 37/37/62
-f 40/40/63 43/43/64 42/42/65 41/41/66
-f 44/44/67 45/45/68 41/41/69 42/42/70
-f 47/47/71 46/46/72 43/43/73 48/48/74
-f 49/360/75 45/45/76 44/44/77 48/359/78
-f 50/50/79 52/52/80 51/51/81
-f 53/53/82 54/54/83 51/51/84 52/52/85
-f 55/55/86 57/57/87 56/56/88
-f 59/59/89 58/58/90 57/57/91 60/60/92
-f 58/314/93 62/62/94 61/61/95
-f 56/56/96 61/61/97 62/62/98 55/55/99
-f 63/63/100 57/57/101 58/58/102 64/316/103
-f 64/64/104 58/314/105 61/61/106 65/65/107
-f 61/61/108 56/56/109 66/66/110 65/65/111
-f 66/66/112 56/56/113 57/57/114 63/63/115
-f 33/33/116 22/22/117 17/17/118 18/18/119
-f 39/39/120 22/352/121 33/354/122 38/38/123
-f 17/17/124 22/22/125 2/2/126 129/129/127
-f 32/32/128 128/128/129 200/200/130 67/67/131
-f 69/69/132 68/68/133 71/71/134 70/70/135
-f 130/130/136 71/71/137 72/72/138 207/207/139
-f 73/466/140 75/467/141 74/74/142
-f 76/76/143 78/78/144 77/77/145
-f 69/69/146 78/470/147 76/468/148 68/68/149
-f 77/469/150 131/131/151 80/80/152 79/471/153
-f 80/80/154 81/81/155 75/467/156 79/471/157
-f 82/82/158 84/84/159 83/83/160
-f 83/83/161 85/85/162 82/82/163
-f 83/83/164 84/84/165 74/74/166 86/86/167
-f 68/68/168 74/74/169 72/72/170 71/71/171
-f 72/72/172 87/87/173 223/223/174 207/207/175
-f 83/83/176 88/384/177 85/85/178
-f 85/378/179 67/67/180 200/200/181 89/89/182
-f 67/67/183 85/378/184 88/88/185 31/31/186
-f 63/63/187 64/316/188 8/8/189
-f 64/64/190 65/65/191 15/15/192
-f 10/10/193 13/13/194 65/65/195 66/66/196
-f 5/5/197 10/10/198 66/66/199 63/63/200
-f 62/62/201 58/314/202 59/315/203 90/90/204
-f 52/52/205 91/91/206 92/92/207 53/53/208
-f 50/50/209 91/91/210 52/52/211
-f 19/19/212 50/313/213 93/93/214
-f 74/74/215 75/467/216 86/86/217
-f 38/38/218 33/354/219 26/26/220 28/28/221
-f 26/26/222 24/24/223 27/27/224 28/28/225
-f 24/24/226 21/351/227 22/374/228
-f 38/38/229 28/28/230 29/29/231 37/37/232
-f 25/353/233 32/32/234 67/67/235 21/21/236
-f 31/31/237 21/21/238 67/67/239
-f 75/467/240 81/454/241 86/86/242
-f 86/86/243 81/454/244 83/83/245
-f 75/75/246 73/73/247 79/79/248
-f 12/452/249 95/95/250 94/94/251 11/451/252
-f 14/453/253 11/451/254 94/94/255 96/96/256
-f 96/406/257 97/97/258 7/446/259 14/448/260
-f 7/7/261 8/440/262 15/444/263 14/311/264
-f 94/94/265 95/95/266 97/407/267 96/96/268
-f 9/450/269 6/449/270 99/99/271 98/98/272
-f 97/407/273 95/95/274 98/98/275 99/99/276
-f 98/98/277 95/95/278 12/452/279 9/450/280
-f 12/12/281 13/442/282 10/441/283 9/9/284
-f 63/63/285 8/8/286 5/5/287
-f 8/8/288 64/316/289 15/312/290
-f 57/57/291 55/55/292 100/100/293 60/60/294
-f 101/101/295 59/59/296 60/60/297 54/54/298
-f 62/62/299 90/90/300 100/100/301 55/55/302
-f 71/71/303 130/130/304 70/70/305
-f 44/44/306 42/42/307 103/103/308 102/102/309
-f 47/47/310 105/105/311 104/104/312 46/46/313
-f 42/42/314 46/46/315 104/104/316 103/103/317
-f 44/44/318 102/102/319 105/361/320 47/358/321
-f 103/103/322 107/107/323 106/106/324 102/102/325
-f 105/105/326 109/109/327 108/108/328 104/104/329
-f 104/104/330 108/108/331 107/107/332 103/103/333
-f 102/102/334 106/106/335 109/362/336 105/361/337
-f 93/93/338 246/246/339 127/127/340 19/19/341
-f 110/110/342 118/118/343 112/112/344 111/111/345
-f 113/113/346 108/410/347 109/411/348 114/114/349
-f 107/409/350 108/410/351 113/113/352 115/115/353
-f 106/408/354 114/363/355 109/412/356
-f 116/116/357 112/112/358 118/118/359 117/117/360
-f 116/116/361 117/117/362 119/119/363 136/136/364
-f 115/115/365 117/117/366 118/118/367
-f 107/409/368 121/121/369 120/120/370 106/408/371
-f 106/408/372 120/120/373 122/122/374 114/363/375
-f 115/115/376 121/121/377 107/409/378
-f 246/246/379 93/93/380 123/123/381 4/4/382
-f 74/74/383 84/84/384 72/72/385
-f 72/72/386 84/84/387 82/82/388 87/87/389
-f 82/82/390 85/456/391 89/375/392 87/87/393
-f 78/78/394 132/132/395 77/77/396
-f 49/49/397 40/40/398 34/34/399 35/35/400
-f 29/29/401 34/34/402 40/40/403 41/41/404
-f 45/45/405 49/360/406 35/355/407 37/37/408
-f 41/41/409 45/45/410 37/37/411 29/29/412
-f 36/36/413 30/30/414 27/27/415 39/357/416
-f 29/29/417 30/30/418 34/34/419
-f 36/356/420 37/37/421 35/355/422
-f 15/15/423 65/65/424 13/13/425
-f 121/121/426 110/110/427 111/111/428 120/120/429
-f 120/120/430 111/111/431 112/415/432 122/122/433
-f 121/121/434 118/118/435 110/110/436
-f 26/26/437 33/354/438 25/25/439
-f 24/24/440 22/374/441 39/357/442 27/27/443
-f 119/119/444 117/117/445 115/115/446 113/113/447
-f 114/363/448 116/416/449 136/419/450
-f 118/118/451 121/121/452 115/115/453
-f 7/446/454 97/97/455 99/447/456 6/445/457
-f 132/472/458 131/131/459 77/469/460
-f 124/124/461 125/125/462 101/320/463
-f 200/200/464 133/133/465 89/89/466
-f 89/375/467 133/376/468 223/223/469 87/87/470
-f 50/50/471 51/51/472 100/100/473
-f 100/100/474 51/51/475 54/54/476 60/60/477
-f 93/319/478 50/50/479 100/100/480 90/90/481
-f 124/321/482 101/101/483 54/54/484 53/53/485
-f 59/315/486 101/320/487 125/125/488 90/90/489
-f 126/126/490 124/321/491 53/53/492 92/92/493
-f 92/318/494 91/317/495 16/16/496
-f 16/16/497 91/317/498 50/313/499 19/19/500
-f 76/468/501 73/466/502 74/74/503 68/68/504
-f 73/73/505 76/76/506 77/77/507 79/79/508
-f 129/129/509 137/137/510 134/134/511 17/17/512
-f 125/125/513 93/319/514 90/90/515
-f 135/135/516 265/265/517 125/125/518 124/124/519
-f 48/48/520 43/43/521 40/40/522 49/49/523
-f 42/42/524 43/43/525 46/46/526
-f 48/359/527 44/44/528 47/358/529
-f 130/130/530 204/204/531 70/70/532
-f 69/69/533 70/70/534 204/204/535 205/205/536
-f 124/321/537 126/126/538 266/266/539 135/323/540
-f 16/16/541 134/134/542 126/322/543 92/318/544
-f 119/119/545 113/113/546 114/114/547 136/136/548
-f 122/122/549 112/415/550 116/416/551
-f 114/363/552 122/122/553 116/416/554
-f 78/470/555 69/69/556 205/205/557 212/476/558
-f 132/132/559 78/78/560 212/212/561
-f 126/322/562 134/134/563 137/137/564 266/336/565
-f 138/138/566 141/141/567 140/140/568 139/139/569
-f 142/142/570 141/141/571 138/138/572 143/143/573
-f 144/144/574 146/146/575 145/145/576
-f 144/144/577 145/145/578 148/148/579 147/147/580
-f 151/151/581 150/150/582 149/149/583 152/152/584
-f 153/153/585 149/149/586 150/150/587 154/154/588
-f 156/156/589 2/341/590 23/343/591 155/380/592
-f 155/347/593 159/159/594 158/158/595 157/157/596
-f 160/160/597 163/163/598 162/162/599 161/161/600
-f 127/127/601 153/153/602 154/154/603 1/1/604
-f 23/343/605 3/342/606 164/381/607 155/380/608
-f 166/166/609 154/154/610 150/150/611 159/349/612
-f 159/349/613 150/150/614 165/165/615
-f 128/128/616 1/1/617 154/154/618 166/166/619
-f 167/167/620 169/169/621 168/168/622 161/161/623
-f 168/364/624 172/172/625 171/171/626 170/170/627
-f 173/173/628 176/176/629 175/175/630 174/174/631
-f 177/177/632 175/175/633 176/176/634 178/178/635
-f 181/181/636 180/180/637 174/174/638 179/179/639
-f 182/369/640 180/367/641 177/177/642 178/178/643
-f 183/183/644 185/185/645 184/184/646
-f 186/186/647 184/184/648 185/185/649 187/187/650
-f 188/188/651 190/190/652 189/189/653
-f 193/193/654 192/192/655 189/189/656 191/191/657
-f 191/327/658 195/195/659 194/194/660
-f 190/190/661 188/188/662 194/194/663 195/195/664
-f 197/197/665 196/329/666 191/191/667 189/189/668
-f 196/196/669 198/198/670 195/195/671 191/327/672
-f 195/195/673 198/198/674 199/199/675 190/190/676
-f 199/199/677 197/197/678 189/189/679 190/190/680
-f 165/165/681 150/150/682 151/151/683 156/156/684
-f 170/170/685 171/171/686 165/350/687 156/348/688
-f 151/151/689 129/344/690 2/341/691 156/156/692
-f 166/166/693 201/201/694 200/200/695 128/128/696
-f 205/205/697 204/204/698 203/203/699 202/202/700
-f 130/130/701 207/207/702 206/206/703 203/203/704
-f 208/473/705 210/210/706 209/474/707
-f 211/211/708 213/213/709 212/212/710
-f 205/205/711 202/202/712 211/475/713 212/476/714
-f 213/477/715 215/478/716 214/214/717 131/131/718
-f 214/214/719 215/478/720 209/474/721 216/216/722
-f 217/217/723 219/219/724 218/218/725
-f 219/219/726 217/217/727 220/220/728
-f 219/219/729 221/221/730 210/210/731 218/218/732
-f 202/202/733 203/203/734 206/206/735 210/210/736
-f 206/206/737 207/207/738 223/223/739 222/222/740
-f 219/219/741 220/220/742 224/385/743
-f 220/379/744 225/225/745 200/200/746 201/201/747
-f 201/201/748 164/164/749 224/224/750 220/379/751
-f 197/197/752 139/429/753 196/329/754
-f 196/196/755 148/433/756 198/198/757
-f 143/431/758 199/199/759 198/198/760 145/432/761
-f 138/428/762 197/197/763 199/199/764 143/431/765
-f 194/194/766 226/226/767 193/328/768 191/327/769
-f 184/184/770 186/186/771 228/228/772 227/227/773
-f 183/183/774 184/184/775 227/227/776
-f 153/153/777 229/229/778 183/326/779
-f 210/210/780 221/221/781 209/474/782
-f 171/171/783 163/163/784 158/158/785 165/350/786
-f 158/158/787 163/163/788 160/160/789 157/157/790
-f 157/157/791 156/373/792 155/347/793
-f 171/171/794 172/172/795 162/162/796 163/163/797
-f 201/201/798 166/166/799 159/349/800 155/155/801
-f 164/164/802 201/201/803 155/155/804
-f 209/474/805 221/221/806 216/455/807
-f 221/221/808 219/219/809 216/455/810
-f 209/209/811 215/215/812 208/208/813
-f 146/438/814 144/437/815 231/231/816 230/230/817
-f 147/435/818 232/232/819 231/231/820 144/437/821
-f 232/404/822 147/427/823 140/425/824 233/233/825
-f 140/140/826 147/324/827 148/325/828 139/139/829
-f 231/231/830 232/232/831 233/405/832 230/230/833
-f 142/436/834 235/235/835 234/234/836 141/434/837
-f 233/405/838 234/234/839 235/235/840 230/230/841
-f 235/235/842 142/436/843 146/438/844 230/230/845
-f 146/146/846 142/142/847 143/143/848 145/145/849
-f 197/197/850 138/428/851 139/429/852
-f 139/430/853 148/433/854 196/196/855
-f 189/189/856 192/192/857 236/236/858 188/188/859
-f 237/237/860 187/187/861 192/192/862 193/193/863
-f 194/194/864 188/188/865 236/236/866 226/226/867
-f 203/203/868 204/204/869 130/130/870
-f 177/177/871 239/239/872 238/238/873 175/175/874
-f 181/181/875 179/179/876 241/241/877 240/240/878
-f 175/175/879 238/238/880 241/241/881 179/179/882
-f 177/177/883 181/368/884 240/370/885 239/239/886
-f 238/238/887 239/239/888 243/243/889 242/242/890
-f 240/240/891 241/241/892 245/245/893 244/244/894
-f 241/241/895 238/238/896 242/242/897 245/245/898
-f 239/239/899 240/370/900 244/371/901 243/243/902
-f 229/229/903 153/153/904 127/127/905 246/246/906
-f 247/247/907 250/250/908 249/249/909 248/248/910
-f 252/252/911 251/251/912 244/420/913 245/421/914
-f 242/417/915 253/253/916 252/252/917 245/421/918
-f 243/418/919 244/422/920 251/372/921
-f 254/254/922 255/255/923 248/248/924 249/249/925
-f 254/254/926 256/256/927 257/257/928 255/255/929
-f 253/253/930 248/248/931 255/255/932
-f 242/417/933 243/418/934 259/259/935 258/258/936
-f 243/418/937 251/372/938 260/260/939 259/259/940
-f 253/253/941 242/417/942 258/258/943
-f 246/246/944 4/4/945 261/261/946 229/229/947
-f 210/210/948 206/206/949 218/218/950
-f 206/206/951 222/222/952 217/217/953 218/218/954
-f 217/217/955 222/222/956 225/377/957 220/457/958
-f 212/212/959 213/213/960 132/132/961
-f 182/182/962 169/169/963 167/167/964 173/173/965
-f 162/162/966 176/176/967 173/173/968 167/167/969
-f 178/178/970 172/172/971 169/365/972 182/369/973
-f 176/176/974 162/162/975 172/172/976 178/178/977
-f 168/168/978 170/366/979 160/160/980 161/161/981
-f 162/162/982 167/167/983 161/161/984
-f 168/364/985 169/365/986 172/172/987
-f 148/433/988 145/432/989 198/198/990
-f 258/258/991 259/259/992 250/250/993 247/247/994
-f 259/259/995 260/260/996 249/413/997 250/250/998
-f 258/258/999 247/247/1000 248/248/1001
-f 158/158/1002 159/159/1003 165/350/1004
-f 157/157/1005 160/160/1006 170/366/1007 156/373/1008
-f 257/257/1009 252/252/1010 253/253/1011 255/255/1012
-f 251/372/1013 256/423/1014 254/414/1015
-f 248/248/1016 253/253/1017 258/258/1018
-f 140/425/1019 141/426/1020 234/424/1021 233/233/1022
-f 132/472/1023 213/477/1024 131/131/1025
-f 262/262/1026 237/333/1027 263/263/1028
-f 200/200/1029 225/225/1030 133/133/1031
-f 225/377/1032 222/222/1033 223/223/1034 133/376/1035
-f 183/183/1036 236/236/1037 185/185/1038
-f 236/236/1039 192/192/1040 187/187/1041 185/185/1042
-f 229/332/1043 226/226/1044 236/236/1045 183/183/1046
-f 262/334/1047 186/186/1048 187/187/1049 237/237/1050
-f 193/328/1051 226/226/1052 263/263/1053 237/333/1054
-f 264/264/1055 228/228/1056 186/186/1057 262/334/1058
-f 228/331/1059 149/149/1060 227/330/1061
-f 149/149/1062 153/153/1063 183/326/1064 227/330/1065
-f 211/475/1066 202/202/1067 210/210/1068 208/473/1069
-f 208/208/1070 215/215/1071 213/213/1072 211/211/1073
-f 129/344/1074 151/151/1075 152/152/1076 137/345/1077
-f 263/263/1078 226/226/1079 229/332/1080
-f 135/339/1081 262/262/1082 263/263/1083 265/340/1084
-f 180/180/1085 182/182/1086 173/173/1087 174/174/1088
-f 175/175/1089 179/179/1090 174/174/1091
-f 180/367/1092 181/368/1093 177/177/1094
-f 262/334/1095 135/338/1096 266/337/1097 264/264/1098
-f 149/149/1099 228/331/1100 264/335/1101 152/152/1102
-f 257/257/1103 256/256/1104 251/251/1105 252/252/1106
-f 260/260/1107 254/414/1108 249/413/1109
-f 251/372/1110 254/414/1111 260/260/1112
-f 264/335/1113 266/346/1114 137/345/1115 152/152/1116
-f 267/267/1117 268/268/1118 269/269/1119 270/270/1120
-f 269/269/1121 268/268/1122 271/271/1123 272/272/1124
-f 272/272/1125 271/271/1126 278/278/1127 273/273/1128
-f 271/271/1129 268/268/1130 277/277/1131
-f 274/274/1132 275/275/1133 271/271/1134 277/277/1135
-f 275/275/1136 276/276/1137 278/278/1138 271/271/1139
-f 273/273/1140 278/278/1141 281/281/1142 279/279/1143
-f 278/278/1144 276/276/1145 280/280/1146 281/281/1147
-f 279/279/1148 281/281/1149 303/303/1150 284/284/1151
-f 280/280/1152 304/304/1153 303/303/1154 281/281/1155
-f 270/270/1156 269/269/1157 282/282/1158
-f 269/269/1159 272/272/1160 283/283/1161 282/282/1162
-f 272/272/1163 273/273/1164 283/283/1165
-f 273/273/1166 279/279/1167 307/307/1168 283/283/1169
-f 279/279/1170 284/284/1171 307/307/1172
-f 282/282/1173 283/283/1174 308/308/1175
-f 283/283/1176 307/307/1177 308/308/1178
-f 270/270/1179 282/282/1180 305/305/1181 291/291/1182
-f 267/267/1183 270/270/1184 285/285/1185
-f 270/270/1186 291/291/1187 285/285/1188
-f 274/274/1189 277/277/1190 287/287/1191 286/286/1192
-f 288/288/1193 291/463/1194 290/290/1195 289/289/1196
-f 290/290/1197 293/293/1198 292/292/1199 289/289/1200
-f 293/293/1201 295/295/1202 294/294/1203 292/292/1204
-f 292/292/1205 296/296/1206 289/289/1207
-f 297/297/1208 296/296/1209 292/292/1210 298/298/1211
-f 298/298/1212 292/292/1213 294/294/1214 299/299/1215
-f 295/295/1216 301/301/1217 300/300/1218 294/294/1219
-f 294/294/1220 300/300/1221 302/302/1222 299/299/1223
-f 301/301/1224 284/458/1225 303/459/1226 300/300/1227
-f 302/302/1228 300/300/1229 303/459/1230 304/460/1231
-f 291/463/1232 305/464/1233 290/290/1234
-f 290/290/1235 305/464/1236 306/306/1237 293/293/1238
-f 293/293/1239 306/306/1240 295/295/1241
-f 295/295/1242 306/306/1243 307/461/1244 301/301/1245
-f 301/301/1246 307/461/1247 284/458/1248
-f 305/464/1249 308/465/1250 306/306/1251
-f 306/306/1252 308/465/1253 307/461/1254
-f 305/305/1255 282/282/1256 308/308/1257
-f 288/288/1258 285/462/1259 291/463/1260
-f 297/297/1261 310/310/1262 309/309/1263 296/296/1264
-f 319/387/1265 320/388/1266 318/389/1267 315/386/1268
-f 314/390/1269 311/391/1270 316/392/1271 315/386/1272
-f 312/393/1273 317/394/1274 316/392/1275 311/391/1276
-f 313/395/1277 314/390/1278 315/386/1279 318/389/1280
-f 316/392/1281 317/394/1282 320/388/1283 319/387/1284
-f 316/392/1285 319/387/1286 315/386/1287
-f 314/390/1288 313/395/1289 312/393/1290 311/391/1291
-f 327/397/1292 328/398/1293 326/399/1294 323/396/1295
-f 322/400/1296 321/401/1297 324/402/1298 323/396/1299
-f 321/401/1300 325/403/1301 324/402/1302
-f 322/400/1303 323/396/1304 326/399/1305
-f 324/402/1306 325/403/1307 328/398/1308 327/397/1309
-f 324/402/1310 327/397/1311 323/396/1312
-# 244 polygons - 112 triangles
-
diff --git a/src/tests/evas/meshes/obj/sweet_home.obj b/src/tests/evas/meshes/obj/sweet_home.obj
deleted file mode 100644
index 1a52b933d6..0000000000
--- a/src/tests/evas/meshes/obj/sweet_home.obj
+++ /dev/null
@@ -1,107 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: 'sweet_home.blend'
-# www.blender.org
-v 1.000003 -0.999997 0.000002
-v -0.999997 -1.000003 0.000002
-v -1.000002 0.999998 0.000002
-v 0.999998 1.000002 0.000002
-v 1.000002 -0.999998 2.000002
-v -0.999998 -1.000002 2.000002
-v -1.000002 0.999998 2.000002
-v 0.999997 1.000003 2.000002
-v 0.000002 -1.000000 3.075149
-v -0.000002 1.000000 3.075149
-v 0.666668 -0.644449 2.358384
-v 0.333335 -0.644450 2.716766
-v 0.666667 -0.293067 2.358384
-v 0.333334 -0.293068 2.716766
-v 0.662209 -0.629904 2.991038
-v 0.337794 -0.629904 2.980731
-v 0.662208 -0.307612 2.991038
-v 0.337793 -0.307613 2.980731
-vt 0.013689 0.608350
-vt 0.285640 0.608350
-vt 0.285640 0.978776
-vt 0.013689 0.978776
-vt 0.564957 0.983606
-vt 0.293719 0.983606
-vt 0.293719 0.613180
-vt 0.564957 0.613180
-vt 0.646856 0.021326
-vt 0.083404 0.021326
-vt 0.083369 0.584801
-vt 0.646820 0.584801
-vt 0.949735 0.303064
-vt 0.654355 0.022016
-vt 0.957234 0.303753
-vt 0.654320 0.585490
-vt 0.090869 0.585491
-vt 0.090904 0.022016
-vt 0.820337 0.692442
-vt 0.820337 0.803140
-vt 0.740863 0.803140
-vt 0.740863 0.692442
-vt 0.695284 0.903159
-vt 0.695284 0.830265
-vt 0.768687 0.830265
-vt 0.768687 0.903159
-vt 0.874667 0.789013
-vt 0.874667 0.893367
-vt 0.979009 0.893367
-vt 0.979009 0.789013
-vt 0.567834 0.981515
-vt 0.567834 0.611089
-vt 0.768686 0.903159
-vt 0.768687 0.823686
-vt 0.811715 0.826975
-vt 0.811715 0.899870
-vt 0.591196 0.903159
-vt 0.591196 0.823686
-vt 0.695284 0.826975
-vt 0.695284 0.899870
-vt 0.666035 0.721564
-vt 0.667476 0.661838
-vt 0.740863 0.660019
-vt 0.591196 0.741571
-vt 0.666035 0.660015
-vt 0.666035 0.803140
-vt 0.592658 0.801339
-vt 0.013481 0.981515
-vt 0.104078 0.915663
-vt 0.194676 0.915663
-vt 0.285274 0.981515
-vt 0.194676 0.850582
-vt 0.285274 0.611089
-vt 0.104078 0.850582
-vt 0.013481 0.611089
-vn -0.732233 -0.000002 0.681054
-vn 1.000000 0.000002 0.000000
-vn 0.000002 -1.000000 0.000000
-vn -0.000002 1.000000 -0.000000
-vn -0.732233 -0.000001 -0.681054
-vn -0.031755 -0.000000 0.999496
-vn -0.000000 0.000000 -1.000000
-vn -1.000000 -0.000002 -0.000000
-vn -0.999857 -0.000002 0.016891
-vn 0.999975 0.000002 0.007049
-vn 0.017155 0.999327 0.032422
-vn 0.017160 -0.999327 0.032422
-vn 0.732233 0.000001 0.681054
-vn 0.732233 0.000002 0.681054
-vn 0.732234 0.000002 0.681053
-s off
-f 6/1/1 9/2/1 10/3/1 7/4/1
-f 4/5/2 8/6/2 5/7/2 1/8/2
-f 6/9/3 2/10/3 1/11/3 5/12/3 9/13/3
-f 7/14/4 10/15/4 8/16/4 4/17/4 3/18/4
-f 11/19/5 12/20/5 14/21/5 13/22/5
-f 15/23/6 17/24/6 18/25/6 16/26/6
-f 2/27/7 3/28/7 4/29/7 1/30/7
-f 6/2/8 7/3/8 3/31/8 2/32/8
-f 14/33/9 12/34/9 16/35/9 18/36/9
-f 11/37/10 13/38/10 17/39/10 15/40/10
-f 13/21/11 14/41/11 18/42/11 17/43/11
-f 12/44/12 11/45/12 15/46/12 16/47/12
-f 5/48/13 11/49/13 12/50/13 9/51/13
-f 9/51/14 12/50/14 14/52/14 10/53/14
-f 13/54/14 8/55/14 10/53/14 14/52/14
-f 11/49/15 5/48/15 8/55/15 13/54/15
diff --git a/src/tests/evas/meshes/ply/NoNormal_NoUVs_Colors.ply b/src/tests/evas/meshes/ply/NoNormal_NoUVs_Colors.ply
deleted file mode 100644
index 0e4e2f81ef..0000000000
--- a/src/tests/evas/meshes/ply/NoNormal_NoUVs_Colors.ply
+++ /dev/null
@@ -1,1679 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-property uchar red
-property uchar green
-property uchar blue
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600 0 253 27
--2.020300 14.610600 -8.278800 0 253 27
--1.712600 0.024900 -9.195700 254 68 73
--3.252600 0.001600 -8.591000 254 68 73
--4.649800 14.945700 -8.785600 254 68 73
--3.252600 0.001600 -8.591000 254 88 92
--4.089400 2.633000 -5.031300 254 68 73
--5.308800 13.910900 -3.738700 254 68 73
--1.553600 3.059500 -4.173500 18 0 253
--1.766900 13.754900 -2.918700 0 254 27
--3.061600 3.537800 -3.461700 18 0 252
--1.553600 3.059500 -4.173500 18 0 253
--0.626000 0.031700 -8.336200 19 0 253
--0.971400 14.644800 -6.706400 27 229 30
--1.766900 13.754900 -2.918700 0 253 27
--5.495700 46.043098 -6.732400 254 254 254
--2.827600 38.171799 -8.088300 254 254 254
--5.919200 37.619099 -4.570300 254 254 254
--6.029500 46.188801 -3.956000 254 254 254
--4.685700 36.664101 -1.616400 13 240 28
--4.298500 47.001099 -0.058900 5 247 27
--6.029500 46.188801 -3.956000 0 253 27
--5.919200 37.619099 -4.570300 0 253 27
--6.775800 50.206501 -7.534500 0 254 27
--7.252500 54.524502 -7.615000 0 254 27
-0.000000 53.738098 -8.986800 0 254 27
-0.000000 50.037800 -9.413700 0 254 27
--7.252500 54.524502 -7.615000 0 253 27
--8.747800 53.770199 -7.353300 0 253 27
--8.184300 53.108700 -3.320400 0 253 27
--6.624100 53.529800 -2.653700 0 253 27
--9.827700 52.989700 -7.188500 0 253 27
--14.989100 50.565300 -7.297200 0 253 27
--15.636800 49.715099 -4.015700 0 253 27
--9.508400 52.403099 -3.672700 0 253 27
-0.000000 37.009800 0.550700 172 124 55
-0.000000 47.287498 1.094200 0 252 27
--4.298500 47.001099 -0.058900 0 253 27
--4.685700 36.664101 -1.616400 13 226 40
-0.000000 53.738098 -8.986800 0 254 27
--7.252500 54.524502 -7.615000 0 254 27
--2.321200 55.471001 -5.570800 0 254 27
-0.000000 55.950600 -7.250100 0 254 27
--6.624100 53.529800 -2.653700 0 253 27
--7.813100 49.342701 -3.886900 0 253 27
--6.029500 46.188801 -3.956000 0 253 27
--3.773800 51.093601 -1.034300 0 253 27
--6.029500 46.188801 -3.956000 0 253 27
--4.298500 47.001099 -0.058900 5 247 27
--3.773800 51.093601 -1.034300 0 253 27
-0.000000 50.880199 0.110000 0 253 27
--3.773800 51.093601 -1.034300 0 253 27
--4.298500 47.001099 -0.058900 0 253 27
-0.000000 47.287498 1.094200 0 252 27
--16.136200 50.023998 -7.546200 0 249 27
--14.989100 50.565300 -7.297200 0 252 27
--13.779500 47.417198 -7.715300 0 253 27
--14.885000 46.974701 -7.946000 0 251 27
--13.779500 47.417198 -7.715300 0 253 27
--8.756500 49.321098 -7.632900 0 253 27
--8.927200 49.128502 -4.128200 0 253 27
--14.977100 45.689201 -4.821000 0 248 31
--17.208200 49.477699 -7.512200 0 253 27
--22.585199 48.327702 -7.594400 0 253 27
--22.348700 46.932201 -2.822400 72 195 37
--16.810101 49.139900 -3.928800 0 253 27
--21.936399 43.055199 -3.733600 24 182 75
--16.192200 44.960400 -4.877100 0 236 42
--16.810101 49.139900 -3.928800 0 253 27
--22.348700 46.932201 -2.822400 72 195 37
--22.105101 44.119598 -7.074000 254 254 254
--23.337700 47.268200 -6.945000 254 254 254
--22.585199 48.327702 -7.594400 254 254 254
--21.061199 44.183601 -7.611200 254 254 254
--15.884600 46.520500 -7.855800 0 250 27
--16.192200 44.960400 -4.877100 0 253 27
--21.936399 43.055199 -3.733600 0 253 27
--21.061199 44.183601 -7.611200 52 208 31
--5.598500 31.822901 -1.405400 133 152 48
--7.174300 32.815300 -5.168000 0 253 27
--7.453900 29.910801 -4.782000 0 253 27
--4.970000 33.082802 -8.871300 0 253 27
--5.595300 29.761600 -8.491100 0 253 27
--7.453900 29.910801 -4.782000 0 253 27
--7.174300 32.815300 -5.168000 0 253 27
--6.827700 20.858999 -3.051400 254 254 254
--5.426000 21.341299 -8.131100 254 254 254
--6.194700 19.576300 -3.492500 254 254 254
--0.835600 22.853901 -8.203000 0 253 27
--0.899900 21.410400 -8.342700 0 253 27
--5.426000 21.341299 -8.131100 0 253 27
--5.317800 22.936800 -8.014600 0 253 27
--0.899900 21.410400 -8.342700 219 57 99
--1.957400 20.620800 -1.217700 254 68 73
--1.853000 19.164200 -1.385300 254 68 73
--6.194700 19.576300 -3.492500 114 254 128
--1.853000 19.164200 -1.385300 242 254 242
--1.957400 20.620800 -1.217700 242 254 242
--6.827700 20.858999 -3.051400 168 254 177
--5.259600 15.490400 -9.599400 0 253 27
--5.426000 21.341299 -8.131100 0 253 27
--0.899900 21.410400 -8.342700 0 253 27
--0.294400 16.169500 -7.962700 0 253 27
--0.294400 16.169500 -7.962700 0 253 27
--0.899900 21.410400 -8.342700 1 216 59
--1.853000 19.164200 -1.385300 0 253 27
--1.221800 14.450400 -2.004100 0 253 27
--1.853000 19.164200 -1.385300 254 254 254
--6.194700 19.576300 -3.492500 254 254 254
--6.498700 14.643000 -4.000600 91 254 108
--1.221800 14.450400 -2.004100 0 254 27
--6.498700 14.643000 -4.000600 254 254 254
--6.194700 19.576300 -3.492500 254 254 254
--5.426000 21.341299 -8.131100 254 254 254
--5.259600 15.490400 -9.599400 254 254 254
--7.813100 49.342701 -3.886900 254 68 73
--6.775800 50.206501 -7.534500 254 68 73
--5.495700 46.043098 -6.732400 254 68 73
--6.029500 46.188801 -3.956000 254 68 73
--8.756500 49.321098 -7.632900 0 254 27
--6.775800 50.206501 -7.534500 0 254 27
--7.813100 49.342701 -3.886900 0 254 27
--8.927200 49.128502 -4.128200 0 254 27
--5.495700 46.043098 -6.732400 0 254 27
--6.775800 50.206501 -7.534500 0 254 27
-0.000000 50.037800 -9.413700 0 254 27
-0.000000 45.235802 -8.516300 0 254 27
--3.773800 51.093601 -1.034300 0 253 27
-0.000000 50.880199 0.110000 0 253 27
-0.000000 54.522099 -2.187600 0 253 27
--1.435700 55.057400 -2.884500 0 253 27
--0.163800 60.672798 0.405300 0 254 27
--0.596000 60.268700 -0.255900 0 254 27
--0.605400 59.453602 0.006800 0 254 27
--0.226300 59.631802 0.717000 0 254 27
-0.000000 59.375900 0.272700 0 254 27
--0.605400 59.453602 0.006800 0 254 27
--0.793500 58.611801 -0.022400 0 254 27
-0.000000 58.735298 0.237300 0 253 27
--1.340700 61.343498 -1.024900 254 254 254
--2.209500 61.230499 -1.515000 254 254 254
--2.225300 60.301201 -1.334400 254 254 254
--0.474100 61.294899 -0.607800 254 254 254
--0.179900 61.274700 0.058500 254 254 254
--0.785400 61.539799 -0.048800 254 254 254
--0.163800 60.672798 0.405300 0 254 27
--0.179900 61.274700 0.058500 0 254 27
--0.474100 61.294899 -0.607800 0 254 27
--0.596000 60.268700 -0.255900 0 254 27
--0.785400 61.539799 -0.048800 0 254 27
-0.000000 62.775902 -0.355700 0 254 27
--1.901400 62.898899 -1.262500 0 254 27
--1.792100 61.563202 -0.648200 0 254 27
--1.901400 62.898899 -1.262500 254 254 254
--2.505800 61.413601 -3.333900 254 254 254
--2.209500 61.230499 -1.515000 254 254 254
--1.792100 61.563202 -0.648200 254 254 254
--2.071800 58.080299 -1.837600 254 254 254
--2.043500 58.694401 -1.722000 254 254 254
--2.361600 58.652599 -3.405400 254 254 254
--2.361600 58.652599 -3.405400 254 254 254
--1.480400 57.287800 -3.167400 254 254 254
--2.071800 58.080299 -1.837600 254 254 254
--2.361600 58.652599 -3.405400 254 254 254
--2.043500 58.694401 -1.722000 254 254 254
--2.225300 60.301201 -1.334400 254 254 254
--2.484800 60.667999 -2.078300 254 254 254
--0.596000 60.268700 -0.255900 0 254 27
--2.225300 60.301201 -1.334400 0 254 27
--0.793500 58.611801 -0.022400 0 254 27
--0.605400 59.453602 0.006800 0 254 27
--0.793500 58.611801 -0.022400 0 254 27
--0.860300 57.339199 -0.345300 0 253 27
-0.000000 57.320400 0.190300 0 253 27
-0.000000 58.735298 0.237300 0 253 27
--2.361600 58.652599 -3.405400 254 254 254
--1.507500 57.978802 -4.806700 254 254 254
--1.480400 57.287800 -3.167400 254 254 254
--1.480400 57.287800 -3.167400 254 153 157
--1.435700 55.057400 -2.884500 244 75 71
-0.000000 54.522099 -2.187600 235 81 69
--0.509500 56.862801 -2.081200 254 129 132
--1.435700 55.057400 -2.884500 254 68 73
--1.480400 57.287800 -3.167400 254 68 73
--1.507500 57.978802 -4.806700 254 68 73
--2.321200 55.471001 -5.570800 254 68 73
--5.259600 15.490400 -9.599400 0 253 27
--0.294400 16.169500 -7.962700 0 253 27
--2.020300 14.610600 -8.278800 0 253 27
--0.294400 16.169500 -7.962700 157 130 53
--1.221800 14.450400 -2.004100 0 252 27
--0.971400 14.644800 -6.706400 27 229 30
--5.308800 13.910900 -3.738700 23 254 48
--1.766900 13.754900 -2.918700 0 254 27
--1.221800 14.450400 -2.004100 0 254 27
--6.498700 14.643000 -4.000600 91 254 108
--4.649800 14.945700 -8.785600 254 68 73
--5.308800 13.910900 -3.738700 254 68 73
--6.498700 14.643000 -4.000600 254 68 73
--5.259600 15.490400 -9.599400 254 68 73
--1.957400 20.620800 -1.217700 0 253 27
--0.899900 21.410400 -8.342700 1 216 59
--0.835600 22.853901 -8.203000 2 205 69
--2.189200 21.987900 -1.481800 0 253 27
--7.174300 32.815300 -5.168000 0 253 27
--6.542300 35.480598 -4.902800 0 253 27
--5.283200 35.952900 -7.814600 0 254 27
--4.970000 33.082802 -8.871300 0 253 27
--5.598500 31.822901 -1.405400 133 152 48
--6.542300 35.480598 -4.902800 0 253 27
--7.174300 32.815300 -5.168000 0 253 27
--4.685700 36.664101 -1.616400 13 226 40
--5.598500 31.822901 -1.405400 133 152 48
--3.798500 31.552500 -0.386300 211 97 63
--2.225300 60.301201 -1.334400 254 254 254
--2.209500 61.230499 -1.515000 254 254 254
--2.484800 60.667999 -2.078300 254 254 254
--8.927200 49.128502 -4.128200 0 253 27
--7.813100 49.342701 -3.886900 0 253 27
--8.184300 53.108700 -3.320400 0 253 27
--9.508400 52.403099 -3.672700 0 253 27
--8.184300 53.108700 -3.320400 0 253 27
--8.747800 53.770199 -7.353300 0 253 27
--9.827700 52.989700 -7.188500 0 253 27
--9.508400 52.403099 -3.672700 0 253 27
--8.747800 53.770199 -7.353300 0 254 27
--7.252500 54.524502 -7.615000 0 254 27
--6.775800 50.206501 -7.534500 0 254 27
--8.927200 49.128502 -4.128200 0 253 27
--9.508400 52.403099 -3.672700 0 253 27
--15.636800 49.715099 -4.015700 0 253 27
--14.977100 45.689201 -4.821000 0 248 31
--6.624100 53.529800 -2.653700 0 253 27
--3.773800 51.093601 -1.034300 0 253 27
--1.435700 55.057400 -2.884500 0 253 27
--7.252500 54.524502 -7.615000 0 253 27
--2.321200 55.471001 -5.570800 0 253 27
--7.252500 54.524502 -7.615000 0 253 27
--1.435700 55.057400 -2.884500 0 253 27
--2.209500 61.230499 -1.515000 254 254 254
--2.505800 61.413601 -3.333900 254 254 254
--2.484800 60.667999 -2.078300 254 254 254
--2.484800 60.667999 -2.078300 254 254 254
--2.505800 61.413601 -3.333900 254 254 254
--2.361600 58.652599 -3.405400 254 254 254
--2.209500 61.230499 -1.515000 254 254 254
--1.340700 61.343498 -1.024900 254 254 254
--1.792100 61.563202 -0.648200 254 254 254
--3.061600 3.537800 -3.461700 18 0 252
--3.735600 1.816900 0.228400 18 0 253
--1.568700 1.981700 -0.627100 18 0 253
--1.553600 3.059500 -4.173500 18 0 253
--0.626000 0.031700 -8.336200 18 0 253
--1.553600 3.059500 -4.173500 18 0 253
--1.568700 1.981700 -0.627100 18 0 253
--1.825200 -0.024100 0.601200 18 0 253
--1.825200 -0.024100 0.601200 18 0 253
--3.769300 -0.009000 1.132900 18 0 253
--1.712600 0.024900 -9.195700 19 0 253
--0.626000 0.031700 -8.336200 19 0 253
--1.712600 0.024900 -9.195700 254 68 73
--2.020300 14.610600 -8.278800 0 253 27
--0.971400 14.644800 -6.706400 0 253 27
--0.626000 0.031700 -8.336200 254 68 73
--1.568700 1.981700 -0.627100 18 0 253
--3.735600 1.816900 0.228400 18 0 253
--3.769300 -0.009000 1.132900 18 0 253
--1.825200 -0.024100 0.601200 19 0 253
--4.089400 2.633000 -5.031300 188 254 194
--3.252600 0.001600 -8.591000 0 254 27
--5.176800 -0.025000 -0.598300 254 254 254
--5.390300 1.568200 -1.670300 254 254 254
--3.769300 -0.009000 1.132900 18 0 253
--3.735600 1.816900 0.228400 18 0 253
--5.390300 1.568200 -1.670300 18 0 253
--5.176800 -0.025000 -0.598300 18 0 253
--5.390300 1.568200 -1.670300 18 0 253
--3.735600 1.816900 0.228400 18 0 253
--3.061600 3.537800 -3.461700 18 0 252
--4.089400 2.633000 -5.031300 18 0 252
--3.061600 3.537800 -3.461700 18 0 252
--1.766900 13.754900 -2.918700 0 254 27
--5.308800 13.910900 -3.738700 14 254 41
--4.089400 2.633000 -5.031300 18 0 252
--2.020300 14.610600 -8.278800 0 253 27
--4.649800 14.945700 -8.785600 0 253 27
--5.259600 15.490400 -9.599400 0 253 27
--2.020300 14.610600 -8.278800 0 253 27
--0.294400 16.169500 -7.962700 0 253 27
--0.971400 14.644800 -6.706400 0 253 27
--5.426000 21.341299 -8.131100 254 254 254
--6.827700 20.858999 -3.051400 254 254 254
--6.824000 22.193899 -3.254300 254 254 254
--5.317800 22.936800 -8.014600 254 254 254
--0.845100 29.891001 -9.491500 0 253 27
--0.835600 22.853901 -8.203000 0 253 27
--5.317800 22.936800 -8.014600 0 253 27
--5.595300 29.761600 -8.491100 0 254 27
--1.957400 20.620800 -1.217700 242 254 242
--2.189200 21.987900 -1.481800 218 254 222
--6.824000 22.193899 -3.254300 99 254 117
--6.827700 20.858999 -3.051400 166 254 175
--0.605400 59.453602 0.006800 254 254 254
-0.000000 59.375900 0.272700 254 254 254
--0.226300 59.631802 0.717000 254 254 254
--21.936399 43.055199 -3.733600 24 182 75
--22.348700 46.932201 -2.822400 72 195 37
--23.323000 46.228001 -3.425200 26 230 29
--23.265499 44.290199 -3.614200 37 214 37
--22.105101 44.119598 -7.074000 254 254 254
--23.273100 44.479099 -6.170500 254 254 254
--23.881300 46.267799 -5.995500 254 254 254
--23.337700 47.268200 -6.945000 254 254 254
--22.348700 46.932201 -2.822400 72 195 37
--23.337700 47.268200 -6.945000 0 254 27
--23.881300 46.267799 -5.995500 0 253 27
--23.323000 46.228001 -3.425200 26 230 29
--21.936399 43.055199 -3.733600 254 68 73
--23.265499 44.290199 -3.614200 254 68 73
--23.273100 44.479099 -6.170500 254 68 73
--22.105101 44.119598 -7.074000 254 68 73
--23.323000 46.228001 -3.425200 26 230 29
--24.935400 45.742901 -3.288800 80 189 39
--24.446100 44.099098 -3.039500 144 136 53
--23.265499 44.290199 -3.614200 37 214 37
--23.273100 44.479099 -6.170500 16 254 41
--25.718901 44.407902 -5.989100 47 254 71
--25.982700 45.641201 -5.974700 53 254 75
--23.881300 46.267799 -5.995500 23 254 48
--23.881300 46.267799 -5.995500 0 253 27
--25.982700 45.641201 -5.974700 0 253 27
--24.935400 45.742901 -3.288800 80 189 39
--23.323000 46.228001 -3.425200 26 230 29
--23.265499 44.290199 -3.614200 0 254 27
--24.446100 44.099098 -3.039500 0 254 27
--25.718901 44.407902 -5.989100 47 254 71
--23.273100 44.479099 -6.170500 16 254 41
--3.798500 31.552500 -0.386300 211 97 63
-0.000000 31.552500 0.128500 203 101 62
-0.000000 37.009800 0.550700 172 124 55
--4.685700 36.664101 -1.616400 13 226 40
--27.058001 43.733101 -1.471100 254 68 73
--28.100901 44.177299 -2.470000 231 80 64
--27.637899 42.321201 -1.984400 254 68 73
--26.775499 43.007000 -1.492900 254 68 73
--27.102699 45.320202 -5.735100 75 254 93
--25.982700 45.641201 -5.974700 53 254 75
--25.718901 44.407902 -5.989100 47 254 71
--26.246300 42.901402 -5.383600 20 254 46
--24.935400 45.742901 -3.288800 80 254 99
--25.982700 45.641201 -5.974700 0 254 27
--27.102699 45.320202 -5.735100 0 254 27
--26.753901 45.398300 -2.858600 163 254 174
--24.446100 44.099098 -3.039500 0 249 30
--26.246300 42.901402 -5.383600 19 213 43
--25.718901 44.407902 -5.989100 46 208 34
--28.380600 42.330502 -3.056600 254 68 73
--27.637899 42.321201 -1.984400 254 68 73
--28.100901 44.177299 -2.470000 254 68 73
--28.697901 44.238201 -3.477500 254 68 73
--28.380600 42.330502 -3.056600 254 254 254
--28.697901 44.238201 -3.477500 254 254 254
--28.543800 44.178001 -4.651400 254 254 254
--28.292801 42.543098 -4.446800 254 254 254
--26.753901 45.398300 -2.858600 163 125 53
--28.697901 44.238201 -3.477500 97 175 41
--28.100901 44.177299 -2.470000 231 80 64
--24.935400 45.742901 -3.288800 80 189 39
--26.117701 44.487900 -2.198700 242 74 67
--25.587200 43.557701 -2.038700 253 67 73
--24.446100 44.099098 -3.039500 144 136 53
--24.446100 44.099098 -3.039500 0 249 30
--25.587200 43.557701 -2.038700 0 252 27
--25.491899 42.827301 -2.370100 0 245 34
--26.246300 42.901402 -5.383600 19 213 43
--26.753901 45.398300 -2.858600 163 125 53
--26.117701 44.487900 -2.198700 242 74 67
--24.935400 45.742901 -3.288800 80 189 39
-0.000000 31.552500 0.128500 203 101 62
--3.798500 31.552500 -0.386300 211 97 63
--3.463700 23.872801 -0.356700 254 68 73
-0.000000 24.132099 -0.356700 243 74 70
--2.225300 60.301201 -1.334400 254 254 254
--2.043500 58.694401 -1.722000 254 247 247
--0.793500 58.611801 -0.022400 254 246 246
--0.793500 58.611801 -0.022400 254 246 246
--2.043500 58.694401 -1.722000 254 247 247
--2.071800 58.080299 -1.837600 254 224 225
--0.860300 57.339199 -0.345300 254 172 174
--2.071800 58.080299 -1.837600 254 224 225
--1.480400 57.287800 -3.167400 254 153 157
--0.509500 56.862801 -2.081200 254 129 132
--0.860300 57.339199 -0.345300 254 172 174
--0.179900 61.274700 0.058500 0 254 27
-0.000000 61.912998 -0.048000 0 254 27
--0.785400 61.539799 -0.048800 0 254 27
--15.884600 46.520500 -7.855800 0 250 27
--17.208200 49.477699 -7.512200 6 242 27
--16.136200 50.023998 -7.546200 0 249 27
--14.885000 46.974701 -7.946000 0 251 27
--15.636800 49.715099 -4.015700 0 253 27
--16.136200 50.023998 -7.546200 0 253 27
--17.208200 49.477699 -7.512200 0 253 27
--16.810101 49.139900 -3.928800 0 253 27
--16.192200 44.960400 -4.877100 0 236 42
--15.884600 46.520500 -7.855800 0 253 27
--14.885000 46.974701 -7.946000 0 253 27
--14.977100 45.689201 -4.821000 0 248 31
--16.810101 49.139900 -3.928800 236 81 69
--16.192200 44.960400 -4.877100 200 90 77
--14.977100 45.689201 -4.821000 174 120 62
--15.636800 49.715099 -4.015700 218 94 66
--13.779500 47.417198 -7.715300 0 253 27
--14.989100 50.565300 -7.297200 0 252 27
--9.827700 52.989700 -7.188500 0 253 27
--8.756500 49.321098 -7.632900 0 253 27
--15.636800 49.715099 -4.015700 0 253 27
--14.989100 50.565300 -7.297200 0 253 27
--16.136200 50.023998 -7.546200 0 253 27
--13.779500 47.417198 -7.715300 0 253 27
--14.977100 45.689201 -4.821000 0 253 27
--14.885000 46.974701 -7.946000 0 251 27
--0.971400 14.644800 -6.706400 27 229 30
--1.221800 14.450400 -2.004100 0 252 27
--1.766900 13.754900 -2.918700 0 253 27
--26.117701 44.487900 -2.198700 242 74 67
--27.058001 43.733101 -1.471100 254 68 73
--26.775499 43.007000 -1.492900 254 68 73
--25.587200 43.557701 -2.038700 253 67 73
--25.587200 43.557701 -2.038700 0 252 27
--26.775499 43.007000 -1.492900 0 253 27
--27.637899 42.321201 -1.984400 0 253 27
--25.491899 42.827301 -2.370100 0 245 34
--26.117701 44.487900 -2.198700 242 74 67
--28.100901 44.177299 -2.470000 231 80 64
--27.058001 43.733101 -1.471100 254 68 73
--8.184300 53.108700 -3.320400 0 253 27
--7.813100 49.342701 -3.886900 0 253 27
--6.624100 53.529800 -2.653700 0 253 27
--8.747800 53.770199 -7.353300 0 254 27
--6.775800 50.206501 -7.534500 0 254 27
--8.756500 49.321098 -7.632900 0 254 27
--9.827700 52.989700 -7.188500 0 254 27
--28.543800 44.178001 -4.651400 0 254 27
--28.697901 44.238201 -3.477500 97 254 114
--26.753901 45.398300 -2.858600 163 254 174
--27.102699 45.320202 -5.735100 0 254 27
--26.246300 42.901402 -5.383600 20 231 27
--28.380600 42.330502 -3.056600 0 252 27
--28.292801 42.543098 -4.446800 5 243 27
--28.100901 44.177299 -2.470000 231 80 64
--26.117701 44.487900 -2.198700 242 74 67
--26.753901 45.398300 -2.858600 163 125 53
--1.712600 0.024900 -9.195700 254 254 254
--3.769300 -0.009000 1.132900 0 254 27
--5.176800 -0.025000 -0.598300 0 254 27
--3.252600 0.001600 -8.591000 254 254 254
-0.000000 61.912998 -0.048000 0 254 27
-0.000000 62.775902 -0.355700 0 254 27
--0.785400 61.539799 -0.048800 0 254 27
--0.340300 31.400700 -9.922000 0 253 27
--0.425600 30.069099 -1.503600 0 253 27
--0.845100 29.891001 -9.491500 0 253 27
-0.000000 54.522099 -2.187600 235 81 69
-0.000000 56.862801 -2.081200 254 127 130
--0.509500 56.862801 -2.081200 254 129 132
--0.509500 56.862801 -2.081200 254 129 132
-0.000000 56.862801 -2.081200 254 127 130
-0.000000 57.320400 0.190300 254 190 192
--0.860300 57.339199 -0.345300 254 172 174
--5.598500 31.822901 -1.405400 133 152 48
--7.453900 29.910801 -4.782000 0 253 27
--6.824000 22.193899 -3.254300 99 254 117
--6.824000 22.193899 -3.254300 254 68 73
--7.453900 29.910801 -4.782000 254 68 73
--5.595300 29.761600 -8.491100 254 68 73
--5.317800 22.936800 -8.014600 254 68 73
--3.798500 31.552500 -0.386300 211 97 63
--5.598500 31.822901 -1.405400 133 152 48
--6.824000 22.193899 -3.254300 99 254 117
--2.189200 21.987900 -1.481800 218 254 222
--0.340300 31.400700 -9.922000 0 253 27
--0.845100 29.891001 -9.491500 0 253 27
--5.595300 29.761600 -8.491100 0 254 27
--4.970000 33.082802 -8.871300 0 254 27
--0.835600 22.853901 -8.203000 2 205 69
--0.845100 29.891001 -9.491500 0 241 37
--0.425600 30.069099 -1.503600 0 253 27
--2.189200 21.987900 -1.481800 0 253 27
--2.162800 35.743500 -9.599900 0 254 27
--0.340300 31.400700 -9.922000 0 253 27
--4.970000 33.082802 -8.871300 0 254 27
--5.283200 35.952900 -7.814600 0 254 27
--5.283200 35.952900 -7.814600 0 254 27
--6.542300 35.480598 -4.902800 0 254 27
--5.919200 37.619099 -4.570300 0 254 27
--5.919200 37.619099 -4.570300 0 253 27
--6.542300 35.480598 -4.902800 0 253 27
--5.598500 31.822901 -1.405400 133 152 48
--4.685700 36.664101 -1.616400 13 240 28
--0.474100 61.294899 -0.607800 0 254 27
--1.340700 61.343498 -1.024900 0 254 27
--2.225300 60.301201 -1.334400 0 254 27
--0.596000 60.268700 -0.255900 0 254 27
--1.340700 61.343498 -1.024900 254 254 254
--0.474100 61.294899 -0.607800 254 254 254
--0.785400 61.539799 -0.048800 254 254 254
--1.792100 61.563202 -0.648200 254 254 254
-0.000000 45.235802 -8.516300 0 253 27
-0.000000 38.221600 -8.073300 0 253 27
--2.827600 38.171799 -8.088300 0 253 27
--5.495700 46.043098 -6.732400 0 253 27
--0.425600 30.069099 -1.503600 254 254 254
--3.798500 31.552500 -0.386300 254 254 254
--2.189200 21.987900 -1.481800 254 254 254
-0.000000 31.547001 -9.939100 254 68 73
-0.000000 30.215401 -1.522000 254 68 73
--0.425600 30.069099 -1.503600 254 68 73
--0.340300 31.400700 -9.922000 254 68 73
--21.061199 44.183601 -7.611200 52 208 31
--22.585199 48.327702 -7.594400 104 170 42
--17.208200 49.477699 -7.512200 6 242 27
--15.884600 46.520500 -7.855800 0 250 27
--22.348700 46.932201 -2.822400 72 195 37
--22.585199 48.327702 -7.594400 0 253 27
--23.337700 47.268200 -6.945000 0 254 27
--21.061199 44.183601 -7.611200 52 208 31
--21.936399 43.055199 -3.733600 0 253 27
--22.105101 44.119598 -7.074000 30 225 27
-0.000000 59.375900 0.272700 254 254 254
-0.226300 59.631802 0.717000 254 254 254
--0.226300 59.631802 0.717000 254 254 254
--0.163800 60.672798 0.405300 0 254 27
--0.226300 59.631802 0.717000 0 254 27
-0.226300 59.631802 0.717000 0 254 27
-0.163800 60.672798 0.405300 0 254 27
--0.340300 31.400700 -9.922000 0 253 27
--2.162800 35.743500 -9.599900 0 253 27
-0.000000 35.795200 -9.599900 0 253 27
-0.000000 31.547001 -9.939100 0 253 27
--5.919200 37.619099 -4.570300 0 254 27
--2.827600 38.171799 -8.088300 0 254 27
--2.162800 35.743500 -9.599900 0 254 27
--5.283200 35.952900 -7.814600 0 254 27
--28.543800 44.178001 -4.651400 254 254 254
--27.102699 45.320202 -5.735100 254 254 254
--26.246300 42.901402 -5.383600 254 254 254
--28.292801 42.543098 -4.446800 254 254 254
--25.491899 42.827301 -2.370100 0 254 27
--27.637899 42.321201 -1.984400 0 254 27
--28.380600 42.330502 -3.056600 0 254 27
--26.246300 42.901402 -5.383600 20 231 27
--25.491899 42.827301 -2.370100 0 253 27
--28.380600 42.330502 -3.056600 0 252 27
--0.179900 61.274700 0.058500 0 254 27
--0.163800 60.672798 0.405300 0 254 27
-0.163800 60.672798 0.405300 0 254 27
-0.179900 61.274700 0.058500 0 254 27
-0.000000 61.912998 -0.048000 0 254 27
--0.179900 61.274700 0.058500 0 254 27
-0.179900 61.274700 0.058500 0 254 27
--2.162800 35.743500 -9.599900 0 253 27
--2.827600 38.171799 -8.088300 0 253 27
-0.000000 38.221600 -8.073300 0 253 27
-0.000000 35.795200 -9.599900 0 253 27
-4.620900 14.945700 -8.516100 0 253 27
-3.252600 0.001600 -8.591000 235 80 66
-1.712600 0.024900 -9.195700 254 68 73
-1.456400 14.610600 -8.695100 0 253 27
-4.089400 2.633000 -5.031300 18 0 253
-3.252600 0.001600 -8.591000 19 0 253
-4.620900 14.945700 -8.516100 0 247 31
-5.308800 13.910900 -3.738700 0 253 27
-1.553600 3.059500 -4.173500 18 0 253
-3.061600 3.537800 -3.461700 18 0 253
-1.766900 13.754900 -2.918700 0 254 27
-1.553600 3.059500 -4.173500 254 254 254
-1.766900 13.754900 -2.918700 254 254 254
-1.239800 14.644800 -6.465300 254 254 254
-0.626000 0.031700 -8.336200 254 254 254
-5.495700 46.043098 -6.732400 0 252 27
-6.029500 46.188801 -3.956000 0 253 27
-5.919200 37.619099 -4.570300 9 98 162
-2.827600 38.171799 -8.088300 8 119 142
-4.685700 36.664101 -1.616400 0 250 28
-5.919200 37.619099 -4.570300 9 98 162
-6.029500 46.188801 -3.956000 0 253 27
-4.298500 47.001099 -0.058900 0 253 27
-6.775800 50.206501 -7.534500 0 253 27
-0.000000 50.037800 -9.413700 0 253 27
-0.000000 53.738098 -8.986800 0 253 27
-7.252500 54.524502 -7.615000 0 254 27
-7.252500 54.524502 -7.615000 0 254 27
-6.624100 53.529800 -2.653700 0 253 27
-8.184300 53.108700 -3.320400 0 253 27
-8.747800 53.770199 -7.353300 0 253 27
-9.827700 52.989700 -7.188500 0 253 27
-9.508400 52.403099 -3.672700 0 253 27
-15.636800 49.715099 -4.015700 1 215 59
-14.989100 50.565300 -7.297200 0 249 29
-0.000000 37.009800 0.550700 0 253 27
-4.685700 36.664101 -1.616400 0 250 28
-4.298500 47.001099 -0.058900 0 253 27
-0.000000 47.287498 1.094200 0 253 27
-0.000000 53.738098 -8.986800 0 253 27
-0.000000 55.950600 -7.250100 0 253 27
-2.321200 55.471001 -5.570800 0 253 27
-7.252500 54.524502 -7.615000 0 254 27
-3.773800 51.093601 -1.034300 0 253 27
-4.298500 47.001099 -0.058900 0 253 27
-6.029500 46.188801 -3.956000 0 253 27
-6.624100 53.529800 -2.653700 0 253 27
-6.624100 53.529800 -2.653700 254 68 73
-6.029500 46.188801 -3.956000 254 68 73
-7.813100 49.342701 -3.886900 254 68 73
-0.000000 50.880199 0.110000 0 253 27
-0.000000 47.287498 1.094200 0 252 27
-4.298500 47.001099 -0.058900 0 253 27
-3.773800 51.093601 -1.034300 0 253 27
-16.136200 50.023998 -7.546200 0 253 27
-14.885000 46.974701 -7.946000 0 253 27
-13.779500 47.417198 -7.715300 0 253 27
-14.989100 50.565300 -7.297200 0 253 27
-13.779500 47.417198 -7.715300 0 253 27
-14.977100 45.689201 -4.821000 0 253 27
-8.927200 49.128502 -4.128200 0 253 27
-8.756500 49.321098 -7.632900 0 253 27
-17.208200 49.477699 -7.512200 0 227 47
-16.810101 49.139900 -3.928800 35 133 112
-22.348700 46.932201 -2.822400 19 0 250
-22.585199 48.327702 -7.594400 0 236 38
-21.936399 43.055199 -3.733600 19 0 253
-22.348700 46.932201 -2.822400 19 0 250
-16.810101 49.139900 -3.928800 35 133 112
-16.192200 44.960400 -4.877100 18 0 253
-22.105101 44.119598 -7.074000 0 253 27
-21.061199 44.183601 -7.611200 0 253 27
-22.585199 48.327702 -7.594400 0 253 27
-23.337700 47.268200 -6.945000 0 253 27
-15.884600 46.520500 -7.855800 0 253 27
-21.061199 44.183601 -7.611200 0 253 27
-21.936399 43.055199 -3.733600 0 253 27
-16.192200 44.960400 -4.877100 0 253 27
-5.598500 31.822901 -1.404300 0 240 37
-7.453900 29.910801 -4.780100 18 0 251
-7.174300 32.815300 -5.167300 17 7 244
-4.970000 33.082802 -8.871900 18 0 252
-7.174300 32.815300 -5.167300 17 7 244
-7.453900 29.910801 -4.780100 18 0 251
-5.595300 29.761600 -8.492500 18 0 253
-6.827700 20.858999 -3.044800 0 231 44
-6.194700 19.576300 -3.478600 0 248 31
-5.426000 21.341299 -8.132600 15 21 230
-0.835600 22.853901 -8.210700 0 253 27
-5.317800 22.936800 -8.016200 0 253 27
-5.426000 21.341299 -8.132600 0 253 27
-0.899900 21.410400 -8.349400 0 253 27
-0.899900 21.410400 -8.349400 254 254 254
-1.853000 19.164200 -1.371600 254 254 254
-1.957400 20.620800 -1.211500 254 254 254
-6.194700 19.576300 -3.478600 0 248 31
-6.827700 20.858999 -3.044800 0 231 44
-1.957400 20.620800 -1.211500 0 253 27
-1.853000 19.164200 -1.371600 0 253 27
-5.117200 15.490400 -9.679700 0 253 27
-0.134100 16.169500 -9.174700 0 253 27
-0.899900 21.410400 -8.349400 0 253 27
-5.426000 21.341299 -8.132600 0 253 27
-0.134100 16.169500 -9.174700 0 254 27
-1.716700 14.450400 -2.459200 0 254 27
-1.853000 19.164200 -1.371600 0 254 27
-0.899900 21.410400 -8.349400 0 254 27
-1.853000 19.164200 -1.371600 0 253 27
-1.716700 14.450400 -2.459200 0 253 27
-6.069200 14.643000 -3.762300 0 253 27
-6.194700 19.576300 -3.478600 0 248 31
-6.069200 14.643000 -3.762300 0 253 27
-5.117200 15.490400 -9.679700 2 202 70
-5.426000 21.341299 -8.132600 15 21 230
-6.194700 19.576300 -3.478600 0 248 31
-7.813100 49.342701 -3.886900 0 253 27
-6.029500 46.188801 -3.956000 0 253 27
-5.495700 46.043098 -6.732400 0 252 27
-6.775800 50.206501 -7.534500 0 253 27
-8.756500 49.321098 -7.632900 254 68 73
-8.927200 49.128502 -4.128200 254 68 73
-7.813100 49.342701 -3.886900 254 68 73
-6.775800 50.206501 -7.534500 254 68 73
-5.495700 46.043098 -6.732400 0 253 27
-0.000000 45.235802 -8.516300 0 253 27
-0.000000 50.037800 -9.413700 0 253 27
-6.775800 50.206501 -7.534500 0 253 27
-3.773800 51.093601 -1.034300 0 253 27
-1.435700 55.057400 -2.884500 0 253 27
-0.000000 54.522099 -2.187600 0 253 27
-0.000000 50.880199 0.110000 0 253 27
-0.163800 60.672798 0.405300 0 253 27
-0.226300 59.631802 0.717000 0 253 27
-0.605400 59.453602 0.006800 0 253 27
-0.596000 60.268700 -0.255900 0 253 27
-0.000000 59.375900 0.272700 0 253 27
-0.000000 58.735298 0.237300 0 253 27
-0.793500 58.611801 -0.022400 0 253 27
-0.605400 59.453602 0.006800 0 253 27
-1.340700 61.343498 -1.024900 254 254 254
-2.225300 60.301201 -1.334400 254 254 254
-2.209500 61.230499 -1.515000 254 254 254
-0.474100 61.294899 -0.607800 0 253 27
-0.785400 61.539799 -0.048800 0 253 27
-0.179900 61.274700 0.058500 0 253 27
-0.163800 60.672798 0.405300 0 253 27
-0.596000 60.268700 -0.255900 0 253 27
-0.474100 61.294899 -0.607800 0 253 27
-0.179900 61.274700 0.058500 0 253 27
-0.785400 61.539799 -0.048800 0 253 27
-1.792100 61.563202 -0.648200 0 253 27
-1.901400 62.898899 -1.262500 0 253 27
-0.000000 62.775902 -0.355700 0 253 27
-1.901400 62.898899 -1.262500 254 73 78
-1.792100 61.563202 -0.648200 254 68 73
-2.209500 61.230499 -1.515000 254 68 73
-2.505800 61.413601 -3.333900 254 68 73
-2.071800 58.080299 -1.837600 254 254 254
-2.361600 58.652599 -3.405400 254 254 254
-2.043500 58.694401 -1.722000 254 254 254
-2.361600 58.652599 -3.405400 254 254 254
-2.071800 58.080299 -1.837600 254 254 254
-1.480400 57.287800 -3.167400 254 254 254
-2.361600 58.652599 -3.405400 254 254 254
-2.484800 60.667999 -2.078300 254 254 254
-2.225300 60.301201 -1.334400 254 254 254
-2.043500 58.694401 -1.722000 254 254 254
-0.596000 60.268700 -0.255900 0 253 27
-0.605400 59.453602 0.006800 0 253 27
-0.793500 58.611801 -0.022400 0 253 27
-2.225300 60.301201 -1.334400 0 253 27
-0.793500 58.611801 -0.022400 254 68 73
-0.000000 58.735298 0.237300 254 68 73
-0.000000 57.320400 0.190300 254 68 73
-0.860300 57.339199 -0.345300 254 68 73
-2.361600 58.652599 -3.405400 254 254 254
-1.480400 57.287800 -3.167400 254 254 254
-1.507500 57.978802 -4.806700 254 254 254
-1.480400 57.287800 -3.167400 0 253 27
-0.509500 56.862801 -2.081200 0 253 27
-0.000000 54.522099 -2.187600 0 253 27
-1.435700 55.057400 -2.884500 0 254 27
-1.435700 55.057400 -2.884500 254 68 73
-2.321200 55.471001 -5.570800 254 68 73
-1.507500 57.978802 -4.806700 254 68 73
-1.480400 57.287800 -3.167400 254 68 73
-5.117200 15.490400 -9.679700 0 253 27
-1.456400 14.610600 -8.695100 0 253 27
-0.134100 16.169500 -9.174700 0 253 27
-0.134100 16.169500 -9.174700 254 254 254
-1.239800 14.644800 -6.465300 254 254 254
-1.716700 14.450400 -2.459200 254 254 254
-5.308800 13.910900 -3.738700 0 253 27
-6.069200 14.643000 -3.762300 0 253 27
-1.716700 14.450400 -2.459200 0 253 27
-1.766900 13.754900 -2.918700 0 253 27
-4.620900 14.945700 -8.516100 0 247 31
-5.117200 15.490400 -9.679700 2 205 68
-6.069200 14.643000 -3.762300 0 253 27
-5.308800 13.910900 -3.738700 0 253 27
-1.957400 20.620800 -1.211500 254 254 254
-2.189200 21.987900 -1.483700 254 254 254
-0.835600 22.853901 -8.210700 254 254 254
-0.899900 21.410400 -8.349400 254 254 254
-7.174300 32.815300 -5.167300 17 7 244
-4.970000 33.082802 -8.871900 18 0 252
-5.283200 35.952900 -7.814600 18 1 249
-6.542300 35.480598 -4.902800 15 32 221
-5.598500 31.822901 -1.404300 0 240 37
-7.174300 32.815300 -5.167300 17 7 244
-6.542300 35.480598 -4.902800 15 32 221
-4.685700 36.664101 -1.616400 0 250 28
-3.798500 31.552500 -0.388900 0 253 27
-5.598500 31.822901 -1.404300 0 240 37
-2.225300 60.301201 -1.334400 254 254 254
-2.484800 60.667999 -2.078300 254 254 254
-2.209500 61.230499 -1.515000 254 254 254
-8.927200 49.128502 -4.128200 254 68 73
-9.508400 52.403099 -3.672700 254 68 73
-8.184300 53.108700 -3.320400 254 68 73
-7.813100 49.342701 -3.886900 254 68 73
-8.184300 53.108700 -3.320400 0 253 27
-9.508400 52.403099 -3.672700 0 253 27
-9.827700 52.989700 -7.188500 0 253 27
-8.747800 53.770199 -7.353300 0 253 27
-8.747800 53.770199 -7.353300 0 253 27
-6.775800 50.206501 -7.534500 0 253 27
-7.252500 54.524502 -7.615000 0 254 27
-8.927200 49.128502 -4.128200 0 253 27
-14.977100 45.689201 -4.821000 18 0 253
-15.636800 49.715099 -4.015700 29 188 60
-9.508400 52.403099 -3.672700 0 253 27
-1.435700 55.057400 -2.884500 0 253 27
-3.773800 51.093601 -1.034300 0 253 27
-6.624100 53.529800 -2.653700 0 253 27
-7.252500 54.524502 -7.615000 0 253 27
-2.321200 55.471001 -5.570800 0 253 27
-1.435700 55.057400 -2.884500 0 253 27
-7.252500 54.524502 -7.615000 0 253 27
-2.209500 61.230499 -1.515000 254 254 254
-2.484800 60.667999 -2.078300 254 254 254
-2.505800 61.413601 -3.333900 254 254 254
-2.484800 60.667999 -2.078300 254 254 254
-2.361600 58.652599 -3.405400 254 254 254
-2.505800 61.413601 -3.333900 254 254 254
-2.209500 61.230499 -1.515000 254 68 73
-1.792100 61.563202 -0.648200 254 68 73
-1.340700 61.343498 -1.024900 254 68 73
-3.061600 3.537800 -3.461700 18 0 253
-1.553600 3.059500 -4.173500 18 0 253
-1.568700 1.981700 -0.627100 19 0 253
-3.735600 1.816900 0.228400 19 0 253
-0.626000 0.031700 -8.336200 0 254 27
-1.825200 -0.024100 0.601200 254 254 254
-1.568700 1.981700 -0.627100 254 254 254
-1.553600 3.059500 -4.173500 186 254 192
-1.825200 -0.024100 0.601200 0 254 27
-0.626000 0.031700 -8.336200 253 254 253
-1.712600 0.024900 -9.195700 254 254 254
-3.769300 -0.009000 1.132900 0 254 27
-1.712600 0.024900 -9.195700 254 68 73
-0.626000 0.031700 -8.336200 254 68 73
-1.239800 14.644800 -6.465300 254 68 73
-1.456400 14.610600 -8.695100 254 68 73
-1.568700 1.981700 -0.627100 19 0 253
-1.825200 -0.024100 0.601200 19 0 253
-3.769300 -0.009000 1.132900 19 0 253
-3.735600 1.816900 0.228400 19 0 253
-4.089400 2.633000 -5.031300 18 0 253
-5.390300 1.568200 -1.670300 18 0 253
-5.176800 -0.025000 -0.598300 18 0 253
-3.252600 0.001600 -8.591000 19 0 253
-3.769300 -0.009000 1.132900 18 0 253
-5.176800 -0.025000 -0.598300 18 0 253
-5.390300 1.568200 -1.670300 18 0 253
-3.735600 1.816900 0.228400 18 0 253
-5.390300 1.568200 -1.670300 18 0 253
-4.089400 2.633000 -5.031300 18 0 253
-3.061600 3.537800 -3.461700 18 0 253
-3.735600 1.816900 0.228400 18 0 253
-3.061600 3.537800 -3.461700 18 0 253
-4.089400 2.633000 -5.031300 18 0 253
-5.308800 13.910900 -3.738700 0 253 27
-1.766900 13.754900 -2.918700 0 253 27
-5.117200 15.490400 -9.679700 0 253 27
-4.620900 14.945700 -8.516100 0 253 27
-1.456400 14.610600 -8.695100 0 253 27
-1.456400 14.610600 -8.695100 254 254 254
-1.239800 14.644800 -6.465300 254 254 254
-0.134100 16.169500 -9.174700 254 254 254
-5.426000 21.341299 -8.132600 15 21 230
-5.317800 22.936800 -8.016200 18 0 252
-6.824000 22.193899 -3.251500 3 179 89
-6.827700 20.858999 -3.044800 0 231 44
-0.845100 29.891001 -9.498900 0 253 27
-5.595300 29.761600 -8.492500 0 253 27
-5.317800 22.936800 -8.016200 0 253 27
-0.835600 22.853901 -8.210700 0 253 27
-1.957400 20.620800 -1.211500 254 68 73
-6.827700 20.858999 -3.044800 232 61 86
-6.824000 22.193899 -3.251500 185 47 122
-2.189200 21.987900 -1.483700 254 68 73
-0.605400 59.453602 0.006800 254 68 73
-0.226300 59.631802 0.717000 254 68 73
-0.000000 59.375900 0.272700 254 68 73
-21.936399 43.055199 -3.733600 19 0 253
-23.265499 44.290199 -3.614200 19 0 253
-23.323000 46.228001 -3.425200 19 0 251
-22.348700 46.932201 -2.822400 20 0 250
-22.105101 44.119598 -7.074000 0 253 27
-23.337700 47.268200 -6.945000 0 253 27
-23.881300 46.267799 -5.995500 0 253 27
-23.273100 44.479099 -6.170500 0 253 27
-22.348700 46.932201 -2.822400 18 0 249
-23.323000 46.228001 -3.425200 18 0 251
-23.881300 46.267799 -5.995500 12 63 193
-23.337700 47.268200 -6.945000 2 175 92
-21.936399 43.055199 -3.733600 18 0 253
-22.105101 44.119598 -7.074000 18 0 253
-23.273100 44.479099 -6.170500 18 0 253
-23.265499 44.290199 -3.614200 18 0 253
-23.323000 46.228001 -3.425200 19 0 251
-23.265499 44.290199 -3.614200 19 0 253
-24.446100 44.099098 -3.039500 19 0 253
-24.935400 45.742901 -3.288800 20 0 251
-23.273100 44.479099 -6.170500 0 253 27
-23.881300 46.267799 -5.995500 0 253 27
-25.982700 45.641201 -5.974700 0 253 27
-25.718901 44.407902 -5.989100 0 253 27
-23.881300 46.267799 -5.995500 64 24 202
-23.323000 46.228001 -3.425200 19 0 251
-24.935400 45.742901 -3.288800 20 0 251
-25.982700 45.641201 -5.974700 65 29 197
-23.265499 44.290199 -3.614200 0 251 27
-23.273100 44.479099 -6.170500 0 253 27
-25.718901 44.407902 -5.989100 0 253 27
-24.446100 44.099098 -3.039500 53 205 30
-3.798500 31.552500 -0.388900 57 208 35
-4.685700 36.664101 -1.616400 0 250 28
-0.000000 37.009800 0.550700 172 124 55
-0.000000 31.552500 0.128500 203 101 62
-27.058001 43.733101 -1.471100 19 0 253
-26.775499 43.007000 -1.492900 19 0 253
-27.637899 42.321201 -1.984400 19 0 253
-28.100901 44.177299 -2.470000 19 0 253
-27.102699 45.320202 -5.735100 0 253 27
-26.246300 42.901402 -5.383600 0 252 27
-25.718901 44.407902 -5.989100 0 253 27
-25.982700 45.641201 -5.974700 0 253 27
-24.935400 45.742901 -3.288800 20 0 251
-26.753901 45.398300 -2.858600 21 0 250
-27.102699 45.320202 -5.735100 69 22 201
-25.982700 45.641201 -5.974700 65 29 197
-24.446100 44.099098 -3.039500 254 254 254
-25.718901 44.407902 -5.989100 254 254 254
-26.246300 42.901402 -5.383600 254 254 254
-28.380600 42.330502 -3.056600 19 0 253
-28.697901 44.238201 -3.477500 20 0 252
-28.100901 44.177299 -2.470000 19 0 253
-27.637899 42.321201 -1.984400 19 0 253
-28.380600 42.330502 -3.056600 19 0 253
-28.292801 42.543098 -4.446800 19 0 253
-28.543800 44.178001 -4.651400 20 3 248
-28.697901 44.238201 -3.477500 20 0 252
-26.753901 45.398300 -2.858600 20 0 250
-28.100901 44.177299 -2.470000 19 0 253
-28.697901 44.238201 -3.477500 20 0 252
-24.935400 45.742901 -3.288800 20 0 251
-24.446100 44.099098 -3.039500 19 0 253
-25.587200 43.557701 -2.038700 19 0 253
-26.117701 44.487900 -2.198700 19 0 253
-24.446100 44.099098 -3.039500 254 68 73
-26.246300 42.901402 -5.383600 254 68 73
-25.491899 42.827301 -2.370100 254 68 73
-25.587200 43.557701 -2.038700 254 68 73
-26.753901 45.398300 -2.858600 21 0 250
-24.935400 45.742901 -3.288800 20 0 251
-26.117701 44.487900 -2.198700 19 0 253
-0.000000 31.552500 0.128500 0 253 27
-0.000000 24.132099 -0.356700 0 253 27
-3.463700 23.872801 -0.356700 0 253 27
-3.798500 31.552500 -0.388900 0 253 27
-2.225300 60.301201 -1.334400 0 253 27
-0.793500 58.611801 -0.022400 0 253 27
-2.043500 58.694401 -1.722000 0 253 27
-0.793500 58.611801 -0.022400 0 253 27
-0.860300 57.339199 -0.345300 0 253 27
-2.071800 58.080299 -1.837600 0 253 27
-2.043500 58.694401 -1.722000 0 253 27
-2.071800 58.080299 -1.837600 254 68 73
-0.860300 57.339199 -0.345300 254 68 73
-0.509500 56.862801 -2.081200 254 68 73
-1.480400 57.287800 -3.167400 254 68 73
-0.179900 61.274700 0.058500 0 254 27
-0.785400 61.539799 -0.048800 0 254 27
-0.000000 61.912998 -0.048000 0 254 27
-15.884600 46.520500 -7.855800 0 253 27
-14.885000 46.974701 -7.946000 0 253 27
-16.136200 50.023998 -7.546200 0 253 27
-17.208200 49.477699 -7.512200 0 253 27
-15.636800 49.715099 -4.015700 1 215 59
-16.810101 49.139900 -3.928800 5 158 110
-17.208200 49.477699 -7.512200 0 227 47
-16.136200 50.023998 -7.546200 0 244 34
-16.192200 44.960400 -4.877100 254 252 252
-14.977100 45.689201 -4.821000 254 202 204
-14.885000 46.974701 -7.946000 254 123 127
-15.884600 46.520500 -7.855800 254 212 213
-16.810101 49.139900 -3.928800 35 133 112
-15.636800 49.715099 -4.015700 25 190 59
-14.977100 45.689201 -4.821000 18 0 253
-16.192200 44.960400 -4.877100 18 0 253
-13.779500 47.417198 -7.715300 12 79 181
-8.756500 49.321098 -7.632900 0 250 29
-9.827700 52.989700 -7.188500 0 253 27
-14.989100 50.565300 -7.297200 0 249 29
-15.636800 49.715099 -4.015700 1 215 59
-16.136200 50.023998 -7.546200 0 244 34
-14.989100 50.565300 -7.297200 0 249 29
-13.779500 47.417198 -7.715300 254 70 75
-14.885000 46.974701 -7.946000 254 123 127
-14.977100 45.689201 -4.821000 254 202 204
-1.239800 14.644800 -6.465300 254 254 254
-1.766900 13.754900 -2.918700 254 254 254
-1.716700 14.450400 -2.459200 254 254 254
-26.117701 44.487900 -2.198700 19 0 253
-25.587200 43.557701 -2.038700 19 0 253
-26.775499 43.007000 -1.492900 19 0 253
-27.058001 43.733101 -1.471100 19 0 253
-25.587200 43.557701 -2.038700 19 0 253
-25.491899 42.827301 -2.370100 19 0 253
-27.637899 42.321201 -1.984400 19 0 253
-26.775499 43.007000 -1.492900 19 0 253
-26.117701 44.487900 -2.198700 19 0 253
-27.058001 43.733101 -1.471100 19 0 253
-28.100901 44.177299 -2.470000 19 0 253
-8.184300 53.108700 -3.320400 254 68 73
-6.624100 53.529800 -2.653700 254 68 73
-7.813100 49.342701 -3.886900 254 68 73
-8.747800 53.770199 -7.353300 0 253 27
-9.827700 52.989700 -7.188500 0 253 27
-8.756500 49.321098 -7.632900 0 253 27
-6.775800 50.206501 -7.534500 0 253 27
-28.543800 44.178001 -4.651400 20 3 248
-27.102699 45.320202 -5.735100 12 64 193
-26.753901 45.398300 -2.858600 20 0 250
-28.697901 44.238201 -3.477500 20 0 252
-26.246300 42.901402 -5.383600 0 252 27
-28.292801 42.543098 -4.446800 87 180 37
-28.380600 42.330502 -3.056600 242 73 67
-28.100901 44.177299 -2.470000 19 0 253
-26.753901 45.398300 -2.858600 21 0 250
-26.117701 44.487900 -2.198700 19 0 253
-1.712600 0.024900 -9.195700 19 0 253
-3.252600 0.001600 -8.591000 19 0 253
-5.176800 -0.025000 -0.598300 18 0 253
-3.769300 -0.009000 1.132900 18 0 253
-0.000000 61.912998 -0.048000 0 254 27
-0.785400 61.539799 -0.048800 0 254 27
-0.000000 62.775902 -0.355700 0 254 27
-0.340300 31.400700 -9.928000 254 254 254
-0.845100 29.891001 -9.498900 254 254 254
-0.425600 30.069099 -1.507500 254 254 254
-0.509500 56.862801 -2.081200 254 127 129
-0.509500 56.862801 -2.081200 0 253 27
-0.860300 57.339199 -0.345300 0 253 27
-0.000000 57.320400 0.190300 0 253 27
-0.000000 56.862801 -2.081200 0 253 27
-5.598500 31.822901 -1.404300 0 240 37
-6.824000 22.193899 -3.251500 3 179 89
-7.453900 29.910801 -4.780100 18 0 251
-6.824000 22.193899 -3.251500 3 179 89
-5.317800 22.936800 -8.016200 18 0 252
-5.595300 29.761600 -8.492500 18 0 253
-7.453900 29.910801 -4.780100 18 0 251
-3.798500 31.552500 -0.388900 0 253 27
-2.189200 21.987900 -1.483700 0 253 27
-6.824000 22.193899 -3.251500 3 179 89
-5.598500 31.822901 -1.404300 0 240 37
-0.340300 31.400700 -9.928000 0 253 27
-4.970000 33.082802 -8.871900 0 253 27
-5.595300 29.761600 -8.492500 0 253 27
-0.845100 29.891001 -9.498900 0 253 27
-0.835600 22.853901 -8.210700 254 254 254
-2.189200 21.987900 -1.483700 254 254 254
-0.425600 30.069099 -1.507500 254 254 254
-0.845100 29.891001 -9.498900 254 254 254
-2.162800 35.743500 -9.599900 0 253 27
-5.283200 35.952900 -7.814600 0 253 27
-4.970000 33.082802 -8.871900 0 253 27
-0.340300 31.400700 -9.928000 0 253 27
-5.283200 35.952900 -7.814600 18 1 249
-5.919200 37.619099 -4.570300 9 98 162
-6.542300 35.480598 -4.902800 15 32 221
-5.919200 37.619099 -4.570300 9 98 162
-4.685700 36.664101 -1.616400 0 250 28
-5.598500 31.822901 -1.404300 0 240 37
-6.542300 35.480598 -4.902800 15 32 221
-0.474100 61.294899 -0.607800 254 68 73
-0.596000 60.268700 -0.255900 254 68 73
-2.225300 60.301201 -1.334400 254 68 73
-1.340700 61.343498 -1.024900 254 68 73
-1.340700 61.343498 -1.024900 0 253 27
-1.792100 61.563202 -0.648200 0 253 27
-0.785400 61.539799 -0.048800 0 253 27
-0.474100 61.294899 -0.607800 0 253 27
-0.000000 45.235802 -8.516300 0 253 27
-5.495700 46.043098 -6.732400 0 252 27
-2.827600 38.171799 -8.088300 8 119 142
-0.000000 38.221600 -8.073300 0 240 38
-0.425600 30.069099 -1.507500 254 254 254
-2.189200 21.987900 -1.483700 254 254 254
-3.798500 31.552500 -0.388900 254 254 254
-0.000000 31.547001 -9.939100 254 68 73
-0.340300 31.400700 -9.928000 254 68 73
-0.425600 30.069099 -1.507500 254 68 73
-0.000000 30.215401 -1.522000 254 68 73
-21.061199 44.183601 -7.611200 18 0 253
-15.884600 46.520500 -7.855800 17 5 246
-17.208200 49.477699 -7.512200 0 227 47
-22.585199 48.327702 -7.594400 0 239 38
-22.348700 46.932201 -2.822400 18 0 249
-23.337700 47.268200 -6.945000 2 175 92
-22.585199 48.327702 -7.594400 0 239 38
-21.061199 44.183601 -7.611200 0 253 27
-22.105101 44.119598 -7.074000 0 253 27
-21.936399 43.055199 -3.733600 0 253 27
-0.340300 31.400700 -9.928000 0 253 27
-0.000000 31.547001 -9.939100 0 253 27
-0.000000 35.795200 -9.599900 0 253 27
-2.162800 35.743500 -9.599900 0 253 27
-5.919200 37.619099 -4.570300 9 98 162
-5.283200 35.952900 -7.814600 18 1 249
-2.162800 35.743500 -9.599900 16 28 225
-2.827600 38.171799 -8.088300 8 119 142
-28.543800 44.178001 -4.651400 77 187 34
-28.292801 42.543098 -4.446800 87 180 37
-26.246300 42.901402 -5.383600 0 252 27
-27.102699 45.320202 -5.735100 0 253 27
-25.491899 42.827301 -2.370100 190 254 195
-28.380600 42.330502 -3.056600 242 254 242
-27.637899 42.321201 -1.984400 254 254 254
-26.246300 42.901402 -5.383600 0 254 27
-28.380600 42.330502 -3.056600 242 254 242
-25.491899 42.827301 -2.370100 190 254 195
-2.162800 35.743500 -9.599900 0 253 27
-0.000000 35.795200 -9.599900 0 253 27
-0.000000 38.221600 -8.073300 0 253 27
-2.827600 38.171799 -8.088300 0 253 27
-0.706900 62.538601 -0.289700 0 253 27
-1.838200 62.255798 -0.802600 0 253 27
-1.901400 63.532299 -1.247600 0 253 27
-0.672300 63.485901 -0.421800 0 253 27
-1.901400 63.532299 -1.247600 0 253 27
-1.838200 62.255798 -0.802600 0 253 27
-3.194200 60.597198 -3.460400 0 253 27
-2.758700 63.532299 -3.348800 0 253 27
-2.758700 63.532299 -3.348800 0 253 27
-3.194200 60.597198 -3.460400 0 253 27
-3.446000 60.597198 -5.980300 0 253 27
-3.010600 63.532299 -5.868700 0 253 27
-3.194200 60.597198 -3.460400 0 253 27
-1.838200 62.255798 -0.802600 0 253 27
-2.336800 60.597198 -1.072500 0 253 27
-2.130500 53.628601 -1.359200 0 253 27
-4.088800 54.879799 -3.460400 0 253 27
-3.194200 60.597198 -3.460400 0 253 27
-2.336800 60.597198 -1.072500 0 253 27
-4.088800 54.879799 -3.460400 0 253 27
-4.340700 55.234299 -6.210400 0 254 27
-3.446000 60.597198 -5.980300 0 253 27
-3.194200 60.597198 -3.460400 0 253 27
-3.010600 63.532299 -5.868700 0 253 27
-3.446000 60.597198 -5.980300 0 253 27
-2.517200 60.597198 -7.879200 0 253 27
-1.932100 63.532299 -7.311200 0 253 27
-3.446000 60.597198 -5.980300 0 253 27
-4.340700 55.234299 -6.210400 0 254 27
-2.990300 54.496300 -8.246000 0 253 27
-2.517200 60.597198 -7.879200 0 253 27
-1.932100 63.532299 -7.311200 0 253 27
-2.517200 60.597198 -7.879200 0 253 27
-0.000000 60.597198 -8.812800 0 253 27
-0.000000 63.532299 -8.174500 0 253 27
-2.990300 54.496300 -8.246000 0 253 27
-0.000000 54.050800 -8.782700 0 253 27
-0.000000 60.597198 -8.812800 0 253 27
-2.517200 60.597198 -7.879200 0 253 27
-0.672300 63.485901 -0.421800 0 253 27
-1.901400 63.532299 -1.247600 0 253 27
-1.171400 65.057899 -2.205500 0 253 27
-1.901400 63.532299 -1.247600 0 253 27
-2.758700 63.532299 -3.348800 0 253 27
-1.795600 65.057899 -4.806100 0 253 27
-1.171400 65.057899 -2.205500 0 253 27
-2.758700 63.532299 -3.348800 0 253 27
-3.010600 63.532299 -5.868700 0 253 27
-1.795600 65.057899 -4.806100 0 253 27
-3.010600 63.532299 -5.868700 0 253 27
-1.932100 63.532299 -7.311200 0 254 27
-0.000000 65.057899 -6.421400 0 253 27
-1.795600 65.057899 -4.806100 0 253 27
-1.932100 63.532299 -7.311200 0 254 27
-0.000000 63.532299 -8.174500 0 253 27
-0.000000 65.057899 -6.421400 0 253 27
-1.171400 65.057899 -2.205500 0 253 27
-1.795600 65.057899 -4.806100 0 253 27
-0.000000 65.560898 -4.058400 0 253 27
-1.795600 65.057899 -4.806100 0 254 27
-0.000000 65.057899 -6.421400 0 254 27
-0.000000 65.560898 -4.058400 0 254 27
-0.672300 63.485901 -0.421800 0 254 27
-1.171400 65.057899 -2.205500 0 254 27
--1.171400 65.057899 -2.205500 0 254 27
--0.672300 63.485901 -0.421800 0 254 27
-0.706900 62.538601 -0.289700 0 254 27
-0.672300 63.485901 -0.421800 0 254 27
-0.000000 62.538601 -0.140300 0 254 27
-0.672300 63.485901 -0.421800 0 254 27
--0.672300 63.485901 -0.421800 0 254 27
-0.000000 62.538601 -0.140300 0 254 27
-2.130500 53.628601 -1.359200 0 253 27
-2.336800 60.597198 -1.072500 0 253 27
-1.393700 60.597198 -3.164700 0 253 27
-1.187300 53.628601 -3.164700 0 253 27
--0.706900 62.538601 -0.289700 0 254 27
--0.672300 63.485901 -0.421800 0 254 27
--1.901400 63.532299 -1.247600 0 254 27
--1.838200 62.255798 -0.802600 0 254 27
--1.901400 63.532299 -1.247600 0 254 27
--2.758700 63.532299 -3.348800 0 254 27
--3.194200 60.597198 -3.460400 0 254 27
--1.838200 62.255798 -0.802600 0 254 27
--2.758700 63.532299 -3.348800 0 254 27
--3.010600 63.532299 -5.868700 0 254 27
--3.446000 60.597198 -5.980300 0 254 27
--3.194200 60.597198 -3.460400 0 254 27
--3.194200 60.597198 -3.460400 0 254 27
--2.336800 60.597198 -1.072500 0 254 27
--1.838200 62.255798 -0.802600 0 254 27
--2.130500 53.628601 -1.359200 0 253 27
--2.336800 60.597198 -1.072500 0 254 27
--3.194200 60.597198 -3.460400 0 254 27
--4.088800 54.879799 -3.460400 0 253 27
--4.088800 54.879799 -3.460400 0 253 27
--3.194200 60.597198 -3.460400 0 253 27
--3.446000 60.597198 -5.980300 0 253 27
--4.340700 55.234299 -6.210400 0 254 27
--3.010600 63.532299 -5.868700 0 254 27
--1.932100 63.532299 -7.311200 0 254 27
--2.517200 60.597198 -7.879200 0 254 27
--3.446000 60.597198 -5.980300 0 254 27
--3.446000 60.597198 -5.980300 0 254 27
--2.517200 60.597198 -7.879200 0 254 27
--2.990300 54.496300 -8.246000 0 254 27
--4.340700 55.234299 -6.210400 0 254 27
--1.932100 63.532299 -7.311200 0 254 27
-0.000000 63.532299 -8.174500 0 254 27
-0.000000 60.597198 -8.812800 0 254 27
--2.517200 60.597198 -7.879200 0 254 27
--2.990300 54.496300 -8.246000 0 254 27
--2.517200 60.597198 -7.879200 0 254 27
-0.000000 60.597198 -8.812800 0 254 27
-0.000000 54.050800 -8.782700 0 254 27
--0.672300 63.485901 -0.421800 0 254 27
--1.171400 65.057899 -2.205500 0 254 27
--1.901400 63.532299 -1.247600 0 254 27
--1.901400 63.532299 -1.247600 0 254 27
--1.171400 65.057899 -2.205500 0 254 27
--1.795600 65.057899 -4.806100 0 254 27
--2.758700 63.532299 -3.348800 0 254 27
--2.758700 63.532299 -3.348800 0 254 27
--1.795600 65.057899 -4.806100 0 254 27
--3.010600 63.532299 -5.868700 0 254 27
--3.010600 63.532299 -5.868700 0 254 27
--1.795600 65.057899 -4.806100 0 254 27
-0.000000 65.057899 -6.421400 0 254 27
--1.932100 63.532299 -7.311200 0 254 27
--1.932100 63.532299 -7.311200 0 254 27
-0.000000 65.057899 -6.421400 0 254 27
-0.000000 63.532299 -8.174500 0 254 27
--1.171400 65.057899 -2.205500 0 254 27
-0.000000 65.560898 -4.058400 0 254 27
--1.795600 65.057899 -4.806100 0 254 27
--1.795600 65.057899 -4.806100 0 254 27
-0.000000 65.560898 -4.058400 0 254 27
-0.000000 65.057899 -6.421400 0 254 27
--1.171400 65.057899 -2.205500 0 254 27
-1.171400 65.057899 -2.205500 0 254 27
-0.000000 65.560898 -4.058400 0 254 27
--0.706900 62.538601 -0.289700 0 254 27
-0.000000 62.538601 -0.140300 0 254 27
--0.672300 63.485901 -0.421800 0 254 27
--2.130500 53.628601 -1.359200 164 133 56
--1.187300 53.628601 -3.164700 209 100 64
--1.393700 60.597198 -3.164700 254 254 254
--2.336800 60.597198 -1.072500 254 254 254
-8.704300 24.905701 -6.036500 0 253 27
-7.984800 25.127701 -6.177400 0 253 27
-7.649900 27.558001 -5.856100 0 253 27
-8.503900 27.435900 -5.670300 0 253 27
-6.463600 36.223400 -3.704900 9 100 160
-5.778000 35.994701 -1.773100 0 231 44
-7.451900 27.210300 -3.504400 18 2 248
-8.503900 27.435900 -5.670300 18 0 253
-5.115000 35.782600 -2.051700 0 241 37
-6.597900 27.332300 -3.690200 16 16 234
-7.451900 27.210300 -3.504400 18 2 248
-5.778000 35.994701 -1.773100 0 231 44
-5.743400 36.019600 -3.995900 0 253 27
-6.463600 36.223400 -3.704900 0 253 27
-8.503900 27.435900 -5.670300 0 253 27
-7.649900 27.558001 -5.856100 0 253 27
-7.451900 27.210300 -3.504400 21 0 248
-6.597900 27.332300 -3.690200 35 1 237
-7.984800 25.127701 -6.177400 19 0 253
-8.704300 24.905701 -6.036500 19 0 253
-7.451900 27.210300 -3.504400 18 2 248
-8.704300 24.905701 -6.036500 18 0 253
-8.503900 27.435900 -5.670300 18 0 253
-6.463600 36.223400 -3.704900 254 68 73
-5.743400 36.019600 -3.995900 254 68 73
-5.115000 35.782600 -2.051700 254 68 73
-5.778000 35.994701 -1.773100 254 68 73
-4.513000 55.007702 -5.909800 0 253 27
-4.291100 55.098900 -5.871800 0 253 27
-4.207800 55.799599 -6.651700 0 253 27
-4.871900 55.799599 -6.765400 0 253 27
-2.904000 62.455601 -5.700500 0 253 27
-2.764700 62.455601 -4.128400 0 253 27
-4.736600 55.799599 -5.153900 0 253 27
-4.871900 55.799599 -6.765400 0 253 27
-2.764700 62.455601 -4.128400 0 253 27
-4.072400 55.799599 -5.040200 0 253 27
-4.736600 55.799599 -5.153900 0 253 27
-2.904000 62.455601 -5.700500 0 253 27
-4.871900 55.799599 -6.765400 0 253 27
-4.207800 55.799599 -6.651700 0 253 27
-4.736600 55.799599 -5.153900 254 68 73
-4.072400 55.799599 -5.040200 254 68 73
-4.291100 55.098900 -5.871800 254 68 73
-4.513000 55.007702 -5.909800 254 68 73
-4.736600 55.799599 -5.153900 0 253 27
-4.513000 55.007702 -5.909800 0 253 27
-4.871900 55.799599 -6.765400 0 253 27
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meshes/ply/NoNormal_NoUVs_NoColors.ply b/src/tests/evas/meshes/ply/NoNormal_NoUVs_NoColors.ply
deleted file mode 100644
index d78a23325e..0000000000
--- a/src/tests/evas/meshes/ply/NoNormal_NoUVs_NoColors.ply
+++ /dev/null
@@ -1,1676 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600
--2.020300 14.610600 -8.278800
--1.712600 0.024900 -9.195700
--3.252600 0.001600 -8.591000
--4.649800 14.945700 -8.785600
--3.252600 0.001600 -8.591000
--4.089400 2.633000 -5.031300
--5.308800 13.910900 -3.738700
--1.553600 3.059500 -4.173500
--1.766900 13.754900 -2.918700
--3.061600 3.537800 -3.461700
--1.553600 3.059500 -4.173500
--0.626000 0.031700 -8.336200
--0.971400 14.644800 -6.706400
--1.766900 13.754900 -2.918700
--5.495700 46.043098 -6.732400
--2.827600 38.171799 -8.088300
--5.919200 37.619099 -4.570300
--6.029500 46.188801 -3.956000
--4.685700 36.664101 -1.616400
--4.298500 47.001099 -0.058900
--6.029500 46.188801 -3.956000
--5.919200 37.619099 -4.570300
--6.775800 50.206501 -7.534500
--7.252500 54.524502 -7.615000
-0.000000 53.738098 -8.986800
-0.000000 50.037800 -9.413700
--7.252500 54.524502 -7.615000
--8.747800 53.770199 -7.353300
--8.184300 53.108700 -3.320400
--6.624100 53.529800 -2.653700
--9.827700 52.989700 -7.188500
--14.989100 50.565300 -7.297200
--15.636800 49.715099 -4.015700
--9.508400 52.403099 -3.672700
-0.000000 37.009800 0.550700
-0.000000 47.287498 1.094200
--4.298500 47.001099 -0.058900
--4.685700 36.664101 -1.616400
-0.000000 53.738098 -8.986800
--7.252500 54.524502 -7.615000
--2.321200 55.471001 -5.570800
-0.000000 55.950600 -7.250100
--6.624100 53.529800 -2.653700
--7.813100 49.342701 -3.886900
--6.029500 46.188801 -3.956000
--3.773800 51.093601 -1.034300
--6.029500 46.188801 -3.956000
--4.298500 47.001099 -0.058900
--3.773800 51.093601 -1.034300
-0.000000 50.880199 0.110000
--3.773800 51.093601 -1.034300
--4.298500 47.001099 -0.058900
-0.000000 47.287498 1.094200
--16.136200 50.023998 -7.546200
--14.989100 50.565300 -7.297200
--13.779500 47.417198 -7.715300
--14.885000 46.974701 -7.946000
--13.779500 47.417198 -7.715300
--8.756500 49.321098 -7.632900
--8.927200 49.128502 -4.128200
--14.977100 45.689201 -4.821000
--17.208200 49.477699 -7.512200
--22.585199 48.327702 -7.594400
--22.348700 46.932201 -2.822400
--16.810101 49.139900 -3.928800
--21.936399 43.055199 -3.733600
--16.192200 44.960400 -4.877100
--16.810101 49.139900 -3.928800
--22.348700 46.932201 -2.822400
--22.105101 44.119598 -7.074000
--23.337700 47.268200 -6.945000
--22.585199 48.327702 -7.594400
--21.061199 44.183601 -7.611200
--15.884600 46.520500 -7.855800
--16.192200 44.960400 -4.877100
--21.936399 43.055199 -3.733600
--21.061199 44.183601 -7.611200
--5.598500 31.822901 -1.405400
--7.174300 32.815300 -5.168000
--7.453900 29.910801 -4.782000
--4.970000 33.082802 -8.871300
--5.595300 29.761600 -8.491100
--7.453900 29.910801 -4.782000
--7.174300 32.815300 -5.168000
--6.827700 20.858999 -3.051400
--5.426000 21.341299 -8.131100
--6.194700 19.576300 -3.492500
--0.835600 22.853901 -8.203000
--0.899900 21.410400 -8.342700
--5.426000 21.341299 -8.131100
--5.317800 22.936800 -8.014600
--0.899900 21.410400 -8.342700
--1.957400 20.620800 -1.217700
--1.853000 19.164200 -1.385300
--6.194700 19.576300 -3.492500
--1.853000 19.164200 -1.385300
--1.957400 20.620800 -1.217700
--6.827700 20.858999 -3.051400
--5.259600 15.490400 -9.599400
--5.426000 21.341299 -8.131100
--0.899900 21.410400 -8.342700
--0.294400 16.169500 -7.962700
--0.294400 16.169500 -7.962700
--0.899900 21.410400 -8.342700
--1.853000 19.164200 -1.385300
--1.221800 14.450400 -2.004100
--1.853000 19.164200 -1.385300
--6.194700 19.576300 -3.492500
--6.498700 14.643000 -4.000600
--1.221800 14.450400 -2.004100
--6.498700 14.643000 -4.000600
--6.194700 19.576300 -3.492500
--5.426000 21.341299 -8.131100
--5.259600 15.490400 -9.599400
--7.813100 49.342701 -3.886900
--6.775800 50.206501 -7.534500
--5.495700 46.043098 -6.732400
--6.029500 46.188801 -3.956000
--8.756500 49.321098 -7.632900
--6.775800 50.206501 -7.534500
--7.813100 49.342701 -3.886900
--8.927200 49.128502 -4.128200
--5.495700 46.043098 -6.732400
--6.775800 50.206501 -7.534500
-0.000000 50.037800 -9.413700
-0.000000 45.235802 -8.516300
--3.773800 51.093601 -1.034300
-0.000000 50.880199 0.110000
-0.000000 54.522099 -2.187600
--1.435700 55.057400 -2.884500
--0.163800 60.672798 0.405300
--0.596000 60.268700 -0.255900
--0.605400 59.453602 0.006800
--0.226300 59.631802 0.717000
-0.000000 59.375900 0.272700
--0.605400 59.453602 0.006800
--0.793500 58.611801 -0.022400
-0.000000 58.735298 0.237300
--1.340700 61.343498 -1.024900
--2.209500 61.230499 -1.515000
--2.225300 60.301201 -1.334400
--0.474100 61.294899 -0.607800
--0.179900 61.274700 0.058500
--0.785400 61.539799 -0.048800
--0.163800 60.672798 0.405300
--0.179900 61.274700 0.058500
--0.474100 61.294899 -0.607800
--0.596000 60.268700 -0.255900
--0.785400 61.539799 -0.048800
-0.000000 62.775902 -0.355700
--1.901400 62.898899 -1.262500
--1.792100 61.563202 -0.648200
--1.901400 62.898899 -1.262500
--2.505800 61.413601 -3.333900
--2.209500 61.230499 -1.515000
--1.792100 61.563202 -0.648200
--2.071800 58.080299 -1.837600
--2.043500 58.694401 -1.722000
--2.361600 58.652599 -3.405400
--2.361600 58.652599 -3.405400
--1.480400 57.287800 -3.167400
--2.071800 58.080299 -1.837600
--2.361600 58.652599 -3.405400
--2.043500 58.694401 -1.722000
--2.225300 60.301201 -1.334400
--2.484800 60.667999 -2.078300
--0.596000 60.268700 -0.255900
--2.225300 60.301201 -1.334400
--0.793500 58.611801 -0.022400
--0.605400 59.453602 0.006800
--0.793500 58.611801 -0.022400
--0.860300 57.339199 -0.345300
-0.000000 57.320400 0.190300
-0.000000 58.735298 0.237300
--2.361600 58.652599 -3.405400
--1.507500 57.978802 -4.806700
--1.480400 57.287800 -3.167400
--1.480400 57.287800 -3.167400
--1.435700 55.057400 -2.884500
-0.000000 54.522099 -2.187600
--0.509500 56.862801 -2.081200
--1.435700 55.057400 -2.884500
--1.480400 57.287800 -3.167400
--1.507500 57.978802 -4.806700
--2.321200 55.471001 -5.570800
--5.259600 15.490400 -9.599400
--0.294400 16.169500 -7.962700
--2.020300 14.610600 -8.278800
--0.294400 16.169500 -7.962700
--1.221800 14.450400 -2.004100
--0.971400 14.644800 -6.706400
--5.308800 13.910900 -3.738700
--1.766900 13.754900 -2.918700
--1.221800 14.450400 -2.004100
--6.498700 14.643000 -4.000600
--4.649800 14.945700 -8.785600
--5.308800 13.910900 -3.738700
--6.498700 14.643000 -4.000600
--5.259600 15.490400 -9.599400
--1.957400 20.620800 -1.217700
--0.899900 21.410400 -8.342700
--0.835600 22.853901 -8.203000
--2.189200 21.987900 -1.481800
--7.174300 32.815300 -5.168000
--6.542300 35.480598 -4.902800
--5.283200 35.952900 -7.814600
--4.970000 33.082802 -8.871300
--5.598500 31.822901 -1.405400
--6.542300 35.480598 -4.902800
--7.174300 32.815300 -5.168000
--4.685700 36.664101 -1.616400
--5.598500 31.822901 -1.405400
--3.798500 31.552500 -0.386300
--2.225300 60.301201 -1.334400
--2.209500 61.230499 -1.515000
--2.484800 60.667999 -2.078300
--8.927200 49.128502 -4.128200
--7.813100 49.342701 -3.886900
--8.184300 53.108700 -3.320400
--9.508400 52.403099 -3.672700
--8.184300 53.108700 -3.320400
--8.747800 53.770199 -7.353300
--9.827700 52.989700 -7.188500
--9.508400 52.403099 -3.672700
--8.747800 53.770199 -7.353300
--7.252500 54.524502 -7.615000
--6.775800 50.206501 -7.534500
--8.927200 49.128502 -4.128200
--9.508400 52.403099 -3.672700
--15.636800 49.715099 -4.015700
--14.977100 45.689201 -4.821000
--6.624100 53.529800 -2.653700
--3.773800 51.093601 -1.034300
--1.435700 55.057400 -2.884500
--7.252500 54.524502 -7.615000
--2.321200 55.471001 -5.570800
--7.252500 54.524502 -7.615000
--1.435700 55.057400 -2.884500
--2.209500 61.230499 -1.515000
--2.505800 61.413601 -3.333900
--2.484800 60.667999 -2.078300
--2.484800 60.667999 -2.078300
--2.505800 61.413601 -3.333900
--2.361600 58.652599 -3.405400
--2.209500 61.230499 -1.515000
--1.340700 61.343498 -1.024900
--1.792100 61.563202 -0.648200
--3.061600 3.537800 -3.461700
--3.735600 1.816900 0.228400
--1.568700 1.981700 -0.627100
--1.553600 3.059500 -4.173500
--0.626000 0.031700 -8.336200
--1.553600 3.059500 -4.173500
--1.568700 1.981700 -0.627100
--1.825200 -0.024100 0.601200
--1.825200 -0.024100 0.601200
--3.769300 -0.009000 1.132900
--1.712600 0.024900 -9.195700
--0.626000 0.031700 -8.336200
--1.712600 0.024900 -9.195700
--2.020300 14.610600 -8.278800
--0.971400 14.644800 -6.706400
--0.626000 0.031700 -8.336200
--1.568700 1.981700 -0.627100
--3.735600 1.816900 0.228400
--3.769300 -0.009000 1.132900
--1.825200 -0.024100 0.601200
--4.089400 2.633000 -5.031300
--3.252600 0.001600 -8.591000
--5.176800 -0.025000 -0.598300
--5.390300 1.568200 -1.670300
--3.769300 -0.009000 1.132900
--3.735600 1.816900 0.228400
--5.390300 1.568200 -1.670300
--5.176800 -0.025000 -0.598300
--5.390300 1.568200 -1.670300
--3.735600 1.816900 0.228400
--3.061600 3.537800 -3.461700
--4.089400 2.633000 -5.031300
--3.061600 3.537800 -3.461700
--1.766900 13.754900 -2.918700
--5.308800 13.910900 -3.738700
--4.089400 2.633000 -5.031300
--2.020300 14.610600 -8.278800
--4.649800 14.945700 -8.785600
--5.259600 15.490400 -9.599400
--2.020300 14.610600 -8.278800
--0.294400 16.169500 -7.962700
--0.971400 14.644800 -6.706400
--5.426000 21.341299 -8.131100
--6.827700 20.858999 -3.051400
--6.824000 22.193899 -3.254300
--5.317800 22.936800 -8.014600
--0.845100 29.891001 -9.491500
--0.835600 22.853901 -8.203000
--5.317800 22.936800 -8.014600
--5.595300 29.761600 -8.491100
--1.957400 20.620800 -1.217700
--2.189200 21.987900 -1.481800
--6.824000 22.193899 -3.254300
--6.827700 20.858999 -3.051400
--0.605400 59.453602 0.006800
-0.000000 59.375900 0.272700
--0.226300 59.631802 0.717000
--21.936399 43.055199 -3.733600
--22.348700 46.932201 -2.822400
--23.323000 46.228001 -3.425200
--23.265499 44.290199 -3.614200
--22.105101 44.119598 -7.074000
--23.273100 44.479099 -6.170500
--23.881300 46.267799 -5.995500
--23.337700 47.268200 -6.945000
--22.348700 46.932201 -2.822400
--23.337700 47.268200 -6.945000
--23.881300 46.267799 -5.995500
--23.323000 46.228001 -3.425200
--21.936399 43.055199 -3.733600
--23.265499 44.290199 -3.614200
--23.273100 44.479099 -6.170500
--22.105101 44.119598 -7.074000
--23.323000 46.228001 -3.425200
--24.935400 45.742901 -3.288800
--24.446100 44.099098 -3.039500
--23.265499 44.290199 -3.614200
--23.273100 44.479099 -6.170500
--25.718901 44.407902 -5.989100
--25.982700 45.641201 -5.974700
--23.881300 46.267799 -5.995500
--23.881300 46.267799 -5.995500
--25.982700 45.641201 -5.974700
--24.935400 45.742901 -3.288800
--23.323000 46.228001 -3.425200
--23.265499 44.290199 -3.614200
--24.446100 44.099098 -3.039500
--25.718901 44.407902 -5.989100
--23.273100 44.479099 -6.170500
--3.798500 31.552500 -0.386300
-0.000000 31.552500 0.128500
-0.000000 37.009800 0.550700
--4.685700 36.664101 -1.616400
--27.058001 43.733101 -1.471100
--28.100901 44.177299 -2.470000
--27.637899 42.321201 -1.984400
--26.775499 43.007000 -1.492900
--27.102699 45.320202 -5.735100
--25.982700 45.641201 -5.974700
--25.718901 44.407902 -5.989100
--26.246300 42.901402 -5.383600
--24.935400 45.742901 -3.288800
--25.982700 45.641201 -5.974700
--27.102699 45.320202 -5.735100
--26.753901 45.398300 -2.858600
--24.446100 44.099098 -3.039500
--26.246300 42.901402 -5.383600
--25.718901 44.407902 -5.989100
--28.380600 42.330502 -3.056600
--27.637899 42.321201 -1.984400
--28.100901 44.177299 -2.470000
--28.697901 44.238201 -3.477500
--28.380600 42.330502 -3.056600
--28.697901 44.238201 -3.477500
--28.543800 44.178001 -4.651400
--28.292801 42.543098 -4.446800
--26.753901 45.398300 -2.858600
--28.697901 44.238201 -3.477500
--28.100901 44.177299 -2.470000
--24.935400 45.742901 -3.288800
--26.117701 44.487900 -2.198700
--25.587200 43.557701 -2.038700
--24.446100 44.099098 -3.039500
--24.446100 44.099098 -3.039500
--25.587200 43.557701 -2.038700
--25.491899 42.827301 -2.370100
--26.246300 42.901402 -5.383600
--26.753901 45.398300 -2.858600
--26.117701 44.487900 -2.198700
--24.935400 45.742901 -3.288800
-0.000000 31.552500 0.128500
--3.798500 31.552500 -0.386300
--3.463700 23.872801 -0.356700
-0.000000 24.132099 -0.356700
--2.225300 60.301201 -1.334400
--2.043500 58.694401 -1.722000
--0.793500 58.611801 -0.022400
--0.793500 58.611801 -0.022400
--2.043500 58.694401 -1.722000
--2.071800 58.080299 -1.837600
--0.860300 57.339199 -0.345300
--2.071800 58.080299 -1.837600
--1.480400 57.287800 -3.167400
--0.509500 56.862801 -2.081200
--0.860300 57.339199 -0.345300
--0.179900 61.274700 0.058500
-0.000000 61.912998 -0.048000
--0.785400 61.539799 -0.048800
--15.884600 46.520500 -7.855800
--17.208200 49.477699 -7.512200
--16.136200 50.023998 -7.546200
--14.885000 46.974701 -7.946000
--15.636800 49.715099 -4.015700
--16.136200 50.023998 -7.546200
--17.208200 49.477699 -7.512200
--16.810101 49.139900 -3.928800
--16.192200 44.960400 -4.877100
--15.884600 46.520500 -7.855800
--14.885000 46.974701 -7.946000
--14.977100 45.689201 -4.821000
--16.810101 49.139900 -3.928800
--16.192200 44.960400 -4.877100
--14.977100 45.689201 -4.821000
--15.636800 49.715099 -4.015700
--13.779500 47.417198 -7.715300
--14.989100 50.565300 -7.297200
--9.827700 52.989700 -7.188500
--8.756500 49.321098 -7.632900
--15.636800 49.715099 -4.015700
--14.989100 50.565300 -7.297200
--16.136200 50.023998 -7.546200
--13.779500 47.417198 -7.715300
--14.977100 45.689201 -4.821000
--14.885000 46.974701 -7.946000
--0.971400 14.644800 -6.706400
--1.221800 14.450400 -2.004100
--1.766900 13.754900 -2.918700
--26.117701 44.487900 -2.198700
--27.058001 43.733101 -1.471100
--26.775499 43.007000 -1.492900
--25.587200 43.557701 -2.038700
--25.587200 43.557701 -2.038700
--26.775499 43.007000 -1.492900
--27.637899 42.321201 -1.984400
--25.491899 42.827301 -2.370100
--26.117701 44.487900 -2.198700
--28.100901 44.177299 -2.470000
--27.058001 43.733101 -1.471100
--8.184300 53.108700 -3.320400
--7.813100 49.342701 -3.886900
--6.624100 53.529800 -2.653700
--8.747800 53.770199 -7.353300
--6.775800 50.206501 -7.534500
--8.756500 49.321098 -7.632900
--9.827700 52.989700 -7.188500
--28.543800 44.178001 -4.651400
--28.697901 44.238201 -3.477500
--26.753901 45.398300 -2.858600
--27.102699 45.320202 -5.735100
--26.246300 42.901402 -5.383600
--28.380600 42.330502 -3.056600
--28.292801 42.543098 -4.446800
--28.100901 44.177299 -2.470000
--26.117701 44.487900 -2.198700
--26.753901 45.398300 -2.858600
--1.712600 0.024900 -9.195700
--3.769300 -0.009000 1.132900
--5.176800 -0.025000 -0.598300
--3.252600 0.001600 -8.591000
-0.000000 61.912998 -0.048000
-0.000000 62.775902 -0.355700
--0.785400 61.539799 -0.048800
--0.340300 31.400700 -9.922000
--0.425600 30.069099 -1.503600
--0.845100 29.891001 -9.491500
-0.000000 54.522099 -2.187600
-0.000000 56.862801 -2.081200
--0.509500 56.862801 -2.081200
--0.509500 56.862801 -2.081200
-0.000000 56.862801 -2.081200
-0.000000 57.320400 0.190300
--0.860300 57.339199 -0.345300
--5.598500 31.822901 -1.405400
--7.453900 29.910801 -4.782000
--6.824000 22.193899 -3.254300
--6.824000 22.193899 -3.254300
--7.453900 29.910801 -4.782000
--5.595300 29.761600 -8.491100
--5.317800 22.936800 -8.014600
--3.798500 31.552500 -0.386300
--5.598500 31.822901 -1.405400
--6.824000 22.193899 -3.254300
--2.189200 21.987900 -1.481800
--0.340300 31.400700 -9.922000
--0.845100 29.891001 -9.491500
--5.595300 29.761600 -8.491100
--4.970000 33.082802 -8.871300
--0.835600 22.853901 -8.203000
--0.845100 29.891001 -9.491500
--0.425600 30.069099 -1.503600
--2.189200 21.987900 -1.481800
--2.162800 35.743500 -9.599900
--0.340300 31.400700 -9.922000
--4.970000 33.082802 -8.871300
--5.283200 35.952900 -7.814600
--5.283200 35.952900 -7.814600
--6.542300 35.480598 -4.902800
--5.919200 37.619099 -4.570300
--5.919200 37.619099 -4.570300
--6.542300 35.480598 -4.902800
--5.598500 31.822901 -1.405400
--4.685700 36.664101 -1.616400
--0.474100 61.294899 -0.607800
--1.340700 61.343498 -1.024900
--2.225300 60.301201 -1.334400
--0.596000 60.268700 -0.255900
--1.340700 61.343498 -1.024900
--0.474100 61.294899 -0.607800
--0.785400 61.539799 -0.048800
--1.792100 61.563202 -0.648200
-0.000000 45.235802 -8.516300
-0.000000 38.221600 -8.073300
--2.827600 38.171799 -8.088300
--5.495700 46.043098 -6.732400
--0.425600 30.069099 -1.503600
--3.798500 31.552500 -0.386300
--2.189200 21.987900 -1.481800
-0.000000 31.547001 -9.939100
-0.000000 30.215401 -1.522000
--0.425600 30.069099 -1.503600
--0.340300 31.400700 -9.922000
--21.061199 44.183601 -7.611200
--22.585199 48.327702 -7.594400
--17.208200 49.477699 -7.512200
--15.884600 46.520500 -7.855800
--22.348700 46.932201 -2.822400
--22.585199 48.327702 -7.594400
--23.337700 47.268200 -6.945000
--21.061199 44.183601 -7.611200
--21.936399 43.055199 -3.733600
--22.105101 44.119598 -7.074000
-0.000000 59.375900 0.272700
-0.226300 59.631802 0.717000
--0.226300 59.631802 0.717000
--0.163800 60.672798 0.405300
--0.226300 59.631802 0.717000
-0.226300 59.631802 0.717000
-0.163800 60.672798 0.405300
--0.340300 31.400700 -9.922000
--2.162800 35.743500 -9.599900
-0.000000 35.795200 -9.599900
-0.000000 31.547001 -9.939100
--5.919200 37.619099 -4.570300
--2.827600 38.171799 -8.088300
--2.162800 35.743500 -9.599900
--5.283200 35.952900 -7.814600
--28.543800 44.178001 -4.651400
--27.102699 45.320202 -5.735100
--26.246300 42.901402 -5.383600
--28.292801 42.543098 -4.446800
--25.491899 42.827301 -2.370100
--27.637899 42.321201 -1.984400
--28.380600 42.330502 -3.056600
--26.246300 42.901402 -5.383600
--25.491899 42.827301 -2.370100
--28.380600 42.330502 -3.056600
--0.179900 61.274700 0.058500
--0.163800 60.672798 0.405300
-0.163800 60.672798 0.405300
-0.179900 61.274700 0.058500
-0.000000 61.912998 -0.048000
--0.179900 61.274700 0.058500
-0.179900 61.274700 0.058500
--2.162800 35.743500 -9.599900
--2.827600 38.171799 -8.088300
-0.000000 38.221600 -8.073300
-0.000000 35.795200 -9.599900
-4.620900 14.945700 -8.516100
-3.252600 0.001600 -8.591000
-1.712600 0.024900 -9.195700
-1.456400 14.610600 -8.695100
-4.089400 2.633000 -5.031300
-3.252600 0.001600 -8.591000
-4.620900 14.945700 -8.516100
-5.308800 13.910900 -3.738700
-1.553600 3.059500 -4.173500
-3.061600 3.537800 -3.461700
-1.766900 13.754900 -2.918700
-1.553600 3.059500 -4.173500
-1.766900 13.754900 -2.918700
-1.239800 14.644800 -6.465300
-0.626000 0.031700 -8.336200
-5.495700 46.043098 -6.732400
-6.029500 46.188801 -3.956000
-5.919200 37.619099 -4.570300
-2.827600 38.171799 -8.088300
-4.685700 36.664101 -1.616400
-5.919200 37.619099 -4.570300
-6.029500 46.188801 -3.956000
-4.298500 47.001099 -0.058900
-6.775800 50.206501 -7.534500
-0.000000 50.037800 -9.413700
-0.000000 53.738098 -8.986800
-7.252500 54.524502 -7.615000
-7.252500 54.524502 -7.615000
-6.624100 53.529800 -2.653700
-8.184300 53.108700 -3.320400
-8.747800 53.770199 -7.353300
-9.827700 52.989700 -7.188500
-9.508400 52.403099 -3.672700
-15.636800 49.715099 -4.015700
-14.989100 50.565300 -7.297200
-0.000000 37.009800 0.550700
-4.685700 36.664101 -1.616400
-4.298500 47.001099 -0.058900
-0.000000 47.287498 1.094200
-0.000000 53.738098 -8.986800
-0.000000 55.950600 -7.250100
-2.321200 55.471001 -5.570800
-7.252500 54.524502 -7.615000
-3.773800 51.093601 -1.034300
-4.298500 47.001099 -0.058900
-6.029500 46.188801 -3.956000
-6.624100 53.529800 -2.653700
-6.624100 53.529800 -2.653700
-6.029500 46.188801 -3.956000
-7.813100 49.342701 -3.886900
-0.000000 50.880199 0.110000
-0.000000 47.287498 1.094200
-4.298500 47.001099 -0.058900
-3.773800 51.093601 -1.034300
-16.136200 50.023998 -7.546200
-14.885000 46.974701 -7.946000
-13.779500 47.417198 -7.715300
-14.989100 50.565300 -7.297200
-13.779500 47.417198 -7.715300
-14.977100 45.689201 -4.821000
-8.927200 49.128502 -4.128200
-8.756500 49.321098 -7.632900
-17.208200 49.477699 -7.512200
-16.810101 49.139900 -3.928800
-22.348700 46.932201 -2.822400
-22.585199 48.327702 -7.594400
-21.936399 43.055199 -3.733600
-22.348700 46.932201 -2.822400
-16.810101 49.139900 -3.928800
-16.192200 44.960400 -4.877100
-22.105101 44.119598 -7.074000
-21.061199 44.183601 -7.611200
-22.585199 48.327702 -7.594400
-23.337700 47.268200 -6.945000
-15.884600 46.520500 -7.855800
-21.061199 44.183601 -7.611200
-21.936399 43.055199 -3.733600
-16.192200 44.960400 -4.877100
-5.598500 31.822901 -1.404300
-7.453900 29.910801 -4.780100
-7.174300 32.815300 -5.167300
-4.970000 33.082802 -8.871900
-7.174300 32.815300 -5.167300
-7.453900 29.910801 -4.780100
-5.595300 29.761600 -8.492500
-6.827700 20.858999 -3.044800
-6.194700 19.576300 -3.478600
-5.426000 21.341299 -8.132600
-0.835600 22.853901 -8.210700
-5.317800 22.936800 -8.016200
-5.426000 21.341299 -8.132600
-0.899900 21.410400 -8.349400
-0.899900 21.410400 -8.349400
-1.853000 19.164200 -1.371600
-1.957400 20.620800 -1.211500
-6.194700 19.576300 -3.478600
-6.827700 20.858999 -3.044800
-1.957400 20.620800 -1.211500
-1.853000 19.164200 -1.371600
-5.117200 15.490400 -9.679700
-0.134100 16.169500 -9.174700
-0.899900 21.410400 -8.349400
-5.426000 21.341299 -8.132600
-0.134100 16.169500 -9.174700
-1.716700 14.450400 -2.459200
-1.853000 19.164200 -1.371600
-0.899900 21.410400 -8.349400
-1.853000 19.164200 -1.371600
-1.716700 14.450400 -2.459200
-6.069200 14.643000 -3.762300
-6.194700 19.576300 -3.478600
-6.069200 14.643000 -3.762300
-5.117200 15.490400 -9.679700
-5.426000 21.341299 -8.132600
-6.194700 19.576300 -3.478600
-7.813100 49.342701 -3.886900
-6.029500 46.188801 -3.956000
-5.495700 46.043098 -6.732400
-6.775800 50.206501 -7.534500
-8.756500 49.321098 -7.632900
-8.927200 49.128502 -4.128200
-7.813100 49.342701 -3.886900
-6.775800 50.206501 -7.534500
-5.495700 46.043098 -6.732400
-0.000000 45.235802 -8.516300
-0.000000 50.037800 -9.413700
-6.775800 50.206501 -7.534500
-3.773800 51.093601 -1.034300
-1.435700 55.057400 -2.884500
-0.000000 54.522099 -2.187600
-0.000000 50.880199 0.110000
-0.163800 60.672798 0.405300
-0.226300 59.631802 0.717000
-0.605400 59.453602 0.006800
-0.596000 60.268700 -0.255900
-0.000000 59.375900 0.272700
-0.000000 58.735298 0.237300
-0.793500 58.611801 -0.022400
-0.605400 59.453602 0.006800
-1.340700 61.343498 -1.024900
-2.225300 60.301201 -1.334400
-2.209500 61.230499 -1.515000
-0.474100 61.294899 -0.607800
-0.785400 61.539799 -0.048800
-0.179900 61.274700 0.058500
-0.163800 60.672798 0.405300
-0.596000 60.268700 -0.255900
-0.474100 61.294899 -0.607800
-0.179900 61.274700 0.058500
-0.785400 61.539799 -0.048800
-1.792100 61.563202 -0.648200
-1.901400 62.898899 -1.262500
-0.000000 62.775902 -0.355700
-1.901400 62.898899 -1.262500
-1.792100 61.563202 -0.648200
-2.209500 61.230499 -1.515000
-2.505800 61.413601 -3.333900
-2.071800 58.080299 -1.837600
-2.361600 58.652599 -3.405400
-2.043500 58.694401 -1.722000
-2.361600 58.652599 -3.405400
-2.071800 58.080299 -1.837600
-1.480400 57.287800 -3.167400
-2.361600 58.652599 -3.405400
-2.484800 60.667999 -2.078300
-2.225300 60.301201 -1.334400
-2.043500 58.694401 -1.722000
-0.596000 60.268700 -0.255900
-0.605400 59.453602 0.006800
-0.793500 58.611801 -0.022400
-2.225300 60.301201 -1.334400
-0.793500 58.611801 -0.022400
-0.000000 58.735298 0.237300
-0.000000 57.320400 0.190300
-0.860300 57.339199 -0.345300
-2.361600 58.652599 -3.405400
-1.480400 57.287800 -3.167400
-1.507500 57.978802 -4.806700
-1.480400 57.287800 -3.167400
-0.509500 56.862801 -2.081200
-0.000000 54.522099 -2.187600
-1.435700 55.057400 -2.884500
-1.435700 55.057400 -2.884500
-2.321200 55.471001 -5.570800
-1.507500 57.978802 -4.806700
-1.480400 57.287800 -3.167400
-5.117200 15.490400 -9.679700
-1.456400 14.610600 -8.695100
-0.134100 16.169500 -9.174700
-0.134100 16.169500 -9.174700
-1.239800 14.644800 -6.465300
-1.716700 14.450400 -2.459200
-5.308800 13.910900 -3.738700
-6.069200 14.643000 -3.762300
-1.716700 14.450400 -2.459200
-1.766900 13.754900 -2.918700
-4.620900 14.945700 -8.516100
-5.117200 15.490400 -9.679700
-6.069200 14.643000 -3.762300
-5.308800 13.910900 -3.738700
-1.957400 20.620800 -1.211500
-2.189200 21.987900 -1.483700
-0.835600 22.853901 -8.210700
-0.899900 21.410400 -8.349400
-7.174300 32.815300 -5.167300
-4.970000 33.082802 -8.871900
-5.283200 35.952900 -7.814600
-6.542300 35.480598 -4.902800
-5.598500 31.822901 -1.404300
-7.174300 32.815300 -5.167300
-6.542300 35.480598 -4.902800
-4.685700 36.664101 -1.616400
-3.798500 31.552500 -0.388900
-5.598500 31.822901 -1.404300
-2.225300 60.301201 -1.334400
-2.484800 60.667999 -2.078300
-2.209500 61.230499 -1.515000
-8.927200 49.128502 -4.128200
-9.508400 52.403099 -3.672700
-8.184300 53.108700 -3.320400
-7.813100 49.342701 -3.886900
-8.184300 53.108700 -3.320400
-9.508400 52.403099 -3.672700
-9.827700 52.989700 -7.188500
-8.747800 53.770199 -7.353300
-8.747800 53.770199 -7.353300
-6.775800 50.206501 -7.534500
-7.252500 54.524502 -7.615000
-8.927200 49.128502 -4.128200
-14.977100 45.689201 -4.821000
-15.636800 49.715099 -4.015700
-9.508400 52.403099 -3.672700
-1.435700 55.057400 -2.884500
-3.773800 51.093601 -1.034300
-6.624100 53.529800 -2.653700
-7.252500 54.524502 -7.615000
-2.321200 55.471001 -5.570800
-1.435700 55.057400 -2.884500
-7.252500 54.524502 -7.615000
-2.209500 61.230499 -1.515000
-2.484800 60.667999 -2.078300
-2.505800 61.413601 -3.333900
-2.484800 60.667999 -2.078300
-2.361600 58.652599 -3.405400
-2.505800 61.413601 -3.333900
-2.209500 61.230499 -1.515000
-1.792100 61.563202 -0.648200
-1.340700 61.343498 -1.024900
-3.061600 3.537800 -3.461700
-1.553600 3.059500 -4.173500
-1.568700 1.981700 -0.627100
-3.735600 1.816900 0.228400
-0.626000 0.031700 -8.336200
-1.825200 -0.024100 0.601200
-1.568700 1.981700 -0.627100
-1.553600 3.059500 -4.173500
-1.825200 -0.024100 0.601200
-0.626000 0.031700 -8.336200
-1.712600 0.024900 -9.195700
-3.769300 -0.009000 1.132900
-1.712600 0.024900 -9.195700
-0.626000 0.031700 -8.336200
-1.239800 14.644800 -6.465300
-1.456400 14.610600 -8.695100
-1.568700 1.981700 -0.627100
-1.825200 -0.024100 0.601200
-3.769300 -0.009000 1.132900
-3.735600 1.816900 0.228400
-4.089400 2.633000 -5.031300
-5.390300 1.568200 -1.670300
-5.176800 -0.025000 -0.598300
-3.252600 0.001600 -8.591000
-3.769300 -0.009000 1.132900
-5.176800 -0.025000 -0.598300
-5.390300 1.568200 -1.670300
-3.735600 1.816900 0.228400
-5.390300 1.568200 -1.670300
-4.089400 2.633000 -5.031300
-3.061600 3.537800 -3.461700
-3.735600 1.816900 0.228400
-3.061600 3.537800 -3.461700
-4.089400 2.633000 -5.031300
-5.308800 13.910900 -3.738700
-1.766900 13.754900 -2.918700
-5.117200 15.490400 -9.679700
-4.620900 14.945700 -8.516100
-1.456400 14.610600 -8.695100
-1.456400 14.610600 -8.695100
-1.239800 14.644800 -6.465300
-0.134100 16.169500 -9.174700
-5.426000 21.341299 -8.132600
-5.317800 22.936800 -8.016200
-6.824000 22.193899 -3.251500
-6.827700 20.858999 -3.044800
-0.845100 29.891001 -9.498900
-5.595300 29.761600 -8.492500
-5.317800 22.936800 -8.016200
-0.835600 22.853901 -8.210700
-1.957400 20.620800 -1.211500
-6.827700 20.858999 -3.044800
-6.824000 22.193899 -3.251500
-2.189200 21.987900 -1.483700
-0.605400 59.453602 0.006800
-0.226300 59.631802 0.717000
-0.000000 59.375900 0.272700
-21.936399 43.055199 -3.733600
-23.265499 44.290199 -3.614200
-23.323000 46.228001 -3.425200
-22.348700 46.932201 -2.822400
-22.105101 44.119598 -7.074000
-23.337700 47.268200 -6.945000
-23.881300 46.267799 -5.995500
-23.273100 44.479099 -6.170500
-22.348700 46.932201 -2.822400
-23.323000 46.228001 -3.425200
-23.881300 46.267799 -5.995500
-23.337700 47.268200 -6.945000
-21.936399 43.055199 -3.733600
-22.105101 44.119598 -7.074000
-23.273100 44.479099 -6.170500
-23.265499 44.290199 -3.614200
-23.323000 46.228001 -3.425200
-23.265499 44.290199 -3.614200
-24.446100 44.099098 -3.039500
-24.935400 45.742901 -3.288800
-23.273100 44.479099 -6.170500
-23.881300 46.267799 -5.995500
-25.982700 45.641201 -5.974700
-25.718901 44.407902 -5.989100
-23.881300 46.267799 -5.995500
-23.323000 46.228001 -3.425200
-24.935400 45.742901 -3.288800
-25.982700 45.641201 -5.974700
-23.265499 44.290199 -3.614200
-23.273100 44.479099 -6.170500
-25.718901 44.407902 -5.989100
-24.446100 44.099098 -3.039500
-3.798500 31.552500 -0.388900
-4.685700 36.664101 -1.616400
-0.000000 37.009800 0.550700
-0.000000 31.552500 0.128500
-27.058001 43.733101 -1.471100
-26.775499 43.007000 -1.492900
-27.637899 42.321201 -1.984400
-28.100901 44.177299 -2.470000
-27.102699 45.320202 -5.735100
-26.246300 42.901402 -5.383600
-25.718901 44.407902 -5.989100
-25.982700 45.641201 -5.974700
-24.935400 45.742901 -3.288800
-26.753901 45.398300 -2.858600
-27.102699 45.320202 -5.735100
-25.982700 45.641201 -5.974700
-24.446100 44.099098 -3.039500
-25.718901 44.407902 -5.989100
-26.246300 42.901402 -5.383600
-28.380600 42.330502 -3.056600
-28.697901 44.238201 -3.477500
-28.100901 44.177299 -2.470000
-27.637899 42.321201 -1.984400
-28.380600 42.330502 -3.056600
-28.292801 42.543098 -4.446800
-28.543800 44.178001 -4.651400
-28.697901 44.238201 -3.477500
-26.753901 45.398300 -2.858600
-28.100901 44.177299 -2.470000
-28.697901 44.238201 -3.477500
-24.935400 45.742901 -3.288800
-24.446100 44.099098 -3.039500
-25.587200 43.557701 -2.038700
-26.117701 44.487900 -2.198700
-24.446100 44.099098 -3.039500
-26.246300 42.901402 -5.383600
-25.491899 42.827301 -2.370100
-25.587200 43.557701 -2.038700
-26.753901 45.398300 -2.858600
-24.935400 45.742901 -3.288800
-26.117701 44.487900 -2.198700
-0.000000 31.552500 0.128500
-0.000000 24.132099 -0.356700
-3.463700 23.872801 -0.356700
-3.798500 31.552500 -0.388900
-2.225300 60.301201 -1.334400
-0.793500 58.611801 -0.022400
-2.043500 58.694401 -1.722000
-0.793500 58.611801 -0.022400
-0.860300 57.339199 -0.345300
-2.071800 58.080299 -1.837600
-2.043500 58.694401 -1.722000
-2.071800 58.080299 -1.837600
-0.860300 57.339199 -0.345300
-0.509500 56.862801 -2.081200
-1.480400 57.287800 -3.167400
-0.179900 61.274700 0.058500
-0.785400 61.539799 -0.048800
-0.000000 61.912998 -0.048000
-15.884600 46.520500 -7.855800
-14.885000 46.974701 -7.946000
-16.136200 50.023998 -7.546200
-17.208200 49.477699 -7.512200
-15.636800 49.715099 -4.015700
-16.810101 49.139900 -3.928800
-17.208200 49.477699 -7.512200
-16.136200 50.023998 -7.546200
-16.192200 44.960400 -4.877100
-14.977100 45.689201 -4.821000
-14.885000 46.974701 -7.946000
-15.884600 46.520500 -7.855800
-16.810101 49.139900 -3.928800
-15.636800 49.715099 -4.015700
-14.977100 45.689201 -4.821000
-16.192200 44.960400 -4.877100
-13.779500 47.417198 -7.715300
-8.756500 49.321098 -7.632900
-9.827700 52.989700 -7.188500
-14.989100 50.565300 -7.297200
-15.636800 49.715099 -4.015700
-16.136200 50.023998 -7.546200
-14.989100 50.565300 -7.297200
-13.779500 47.417198 -7.715300
-14.885000 46.974701 -7.946000
-14.977100 45.689201 -4.821000
-1.239800 14.644800 -6.465300
-1.766900 13.754900 -2.918700
-1.716700 14.450400 -2.459200
-26.117701 44.487900 -2.198700
-25.587200 43.557701 -2.038700
-26.775499 43.007000 -1.492900
-27.058001 43.733101 -1.471100
-25.587200 43.557701 -2.038700
-25.491899 42.827301 -2.370100
-27.637899 42.321201 -1.984400
-26.775499 43.007000 -1.492900
-26.117701 44.487900 -2.198700
-27.058001 43.733101 -1.471100
-28.100901 44.177299 -2.470000
-8.184300 53.108700 -3.320400
-6.624100 53.529800 -2.653700
-7.813100 49.342701 -3.886900
-8.747800 53.770199 -7.353300
-9.827700 52.989700 -7.188500
-8.756500 49.321098 -7.632900
-6.775800 50.206501 -7.534500
-28.543800 44.178001 -4.651400
-27.102699 45.320202 -5.735100
-26.753901 45.398300 -2.858600
-28.697901 44.238201 -3.477500
-26.246300 42.901402 -5.383600
-28.292801 42.543098 -4.446800
-28.380600 42.330502 -3.056600
-28.100901 44.177299 -2.470000
-26.753901 45.398300 -2.858600
-26.117701 44.487900 -2.198700
-1.712600 0.024900 -9.195700
-3.252600 0.001600 -8.591000
-5.176800 -0.025000 -0.598300
-3.769300 -0.009000 1.132900
-0.000000 61.912998 -0.048000
-0.785400 61.539799 -0.048800
-0.000000 62.775902 -0.355700
-0.340300 31.400700 -9.928000
-0.845100 29.891001 -9.498900
-0.425600 30.069099 -1.507500
-0.509500 56.862801 -2.081200
-0.509500 56.862801 -2.081200
-0.860300 57.339199 -0.345300
-0.000000 57.320400 0.190300
-0.000000 56.862801 -2.081200
-5.598500 31.822901 -1.404300
-6.824000 22.193899 -3.251500
-7.453900 29.910801 -4.780100
-6.824000 22.193899 -3.251500
-5.317800 22.936800 -8.016200
-5.595300 29.761600 -8.492500
-7.453900 29.910801 -4.780100
-3.798500 31.552500 -0.388900
-2.189200 21.987900 -1.483700
-6.824000 22.193899 -3.251500
-5.598500 31.822901 -1.404300
-0.340300 31.400700 -9.928000
-4.970000 33.082802 -8.871900
-5.595300 29.761600 -8.492500
-0.845100 29.891001 -9.498900
-0.835600 22.853901 -8.210700
-2.189200 21.987900 -1.483700
-0.425600 30.069099 -1.507500
-0.845100 29.891001 -9.498900
-2.162800 35.743500 -9.599900
-5.283200 35.952900 -7.814600
-4.970000 33.082802 -8.871900
-0.340300 31.400700 -9.928000
-5.283200 35.952900 -7.814600
-5.919200 37.619099 -4.570300
-6.542300 35.480598 -4.902800
-5.919200 37.619099 -4.570300
-4.685700 36.664101 -1.616400
-5.598500 31.822901 -1.404300
-6.542300 35.480598 -4.902800
-0.474100 61.294899 -0.607800
-0.596000 60.268700 -0.255900
-2.225300 60.301201 -1.334400
-1.340700 61.343498 -1.024900
-1.340700 61.343498 -1.024900
-1.792100 61.563202 -0.648200
-0.785400 61.539799 -0.048800
-0.474100 61.294899 -0.607800
-0.000000 45.235802 -8.516300
-5.495700 46.043098 -6.732400
-2.827600 38.171799 -8.088300
-0.000000 38.221600 -8.073300
-0.425600 30.069099 -1.507500
-2.189200 21.987900 -1.483700
-3.798500 31.552500 -0.388900
-0.000000 31.547001 -9.939100
-0.340300 31.400700 -9.928000
-0.425600 30.069099 -1.507500
-0.000000 30.215401 -1.522000
-21.061199 44.183601 -7.611200
-15.884600 46.520500 -7.855800
-17.208200 49.477699 -7.512200
-22.585199 48.327702 -7.594400
-22.348700 46.932201 -2.822400
-23.337700 47.268200 -6.945000
-22.585199 48.327702 -7.594400
-21.061199 44.183601 -7.611200
-22.105101 44.119598 -7.074000
-21.936399 43.055199 -3.733600
-0.340300 31.400700 -9.928000
-0.000000 31.547001 -9.939100
-0.000000 35.795200 -9.599900
-2.162800 35.743500 -9.599900
-5.919200 37.619099 -4.570300
-5.283200 35.952900 -7.814600
-2.162800 35.743500 -9.599900
-2.827600 38.171799 -8.088300
-28.543800 44.178001 -4.651400
-28.292801 42.543098 -4.446800
-26.246300 42.901402 -5.383600
-27.102699 45.320202 -5.735100
-25.491899 42.827301 -2.370100
-28.380600 42.330502 -3.056600
-27.637899 42.321201 -1.984400
-26.246300 42.901402 -5.383600
-28.380600 42.330502 -3.056600
-25.491899 42.827301 -2.370100
-2.162800 35.743500 -9.599900
-0.000000 35.795200 -9.599900
-0.000000 38.221600 -8.073300
-2.827600 38.171799 -8.088300
-0.706900 62.538601 -0.289700
-1.838200 62.255798 -0.802600
-1.901400 63.532299 -1.247600
-0.672300 63.485901 -0.421800
-1.901400 63.532299 -1.247600
-1.838200 62.255798 -0.802600
-3.194200 60.597198 -3.460400
-2.758700 63.532299 -3.348800
-2.758700 63.532299 -3.348800
-3.194200 60.597198 -3.460400
-3.446000 60.597198 -5.980300
-3.010600 63.532299 -5.868700
-3.194200 60.597198 -3.460400
-1.838200 62.255798 -0.802600
-2.336800 60.597198 -1.072500
-2.130500 53.628601 -1.359200
-4.088800 54.879799 -3.460400
-3.194200 60.597198 -3.460400
-2.336800 60.597198 -1.072500
-4.088800 54.879799 -3.460400
-4.340700 55.234299 -6.210400
-3.446000 60.597198 -5.980300
-3.194200 60.597198 -3.460400
-3.010600 63.532299 -5.868700
-3.446000 60.597198 -5.980300
-2.517200 60.597198 -7.879200
-1.932100 63.532299 -7.311200
-3.446000 60.597198 -5.980300
-4.340700 55.234299 -6.210400
-2.990300 54.496300 -8.246000
-2.517200 60.597198 -7.879200
-1.932100 63.532299 -7.311200
-2.517200 60.597198 -7.879200
-0.000000 60.597198 -8.812800
-0.000000 63.532299 -8.174500
-2.990300 54.496300 -8.246000
-0.000000 54.050800 -8.782700
-0.000000 60.597198 -8.812800
-2.517200 60.597198 -7.879200
-0.672300 63.485901 -0.421800
-1.901400 63.532299 -1.247600
-1.171400 65.057899 -2.205500
-1.901400 63.532299 -1.247600
-2.758700 63.532299 -3.348800
-1.795600 65.057899 -4.806100
-1.171400 65.057899 -2.205500
-2.758700 63.532299 -3.348800
-3.010600 63.532299 -5.868700
-1.795600 65.057899 -4.806100
-3.010600 63.532299 -5.868700
-1.932100 63.532299 -7.311200
-0.000000 65.057899 -6.421400
-1.795600 65.057899 -4.806100
-1.932100 63.532299 -7.311200
-0.000000 63.532299 -8.174500
-0.000000 65.057899 -6.421400
-1.171400 65.057899 -2.205500
-1.795600 65.057899 -4.806100
-0.000000 65.560898 -4.058400
-1.795600 65.057899 -4.806100
-0.000000 65.057899 -6.421400
-0.000000 65.560898 -4.058400
-0.672300 63.485901 -0.421800
-1.171400 65.057899 -2.205500
--1.171400 65.057899 -2.205500
--0.672300 63.485901 -0.421800
-0.706900 62.538601 -0.289700
-0.672300 63.485901 -0.421800
-0.000000 62.538601 -0.140300
-0.672300 63.485901 -0.421800
--0.672300 63.485901 -0.421800
-0.000000 62.538601 -0.140300
-2.130500 53.628601 -1.359200
-2.336800 60.597198 -1.072500
-1.393700 60.597198 -3.164700
-1.187300 53.628601 -3.164700
--0.706900 62.538601 -0.289700
--0.672300 63.485901 -0.421800
--1.901400 63.532299 -1.247600
--1.838200 62.255798 -0.802600
--1.901400 63.532299 -1.247600
--2.758700 63.532299 -3.348800
--3.194200 60.597198 -3.460400
--1.838200 62.255798 -0.802600
--2.758700 63.532299 -3.348800
--3.010600 63.532299 -5.868700
--3.446000 60.597198 -5.980300
--3.194200 60.597198 -3.460400
--3.194200 60.597198 -3.460400
--2.336800 60.597198 -1.072500
--1.838200 62.255798 -0.802600
--2.130500 53.628601 -1.359200
--2.336800 60.597198 -1.072500
--3.194200 60.597198 -3.460400
--4.088800 54.879799 -3.460400
--4.088800 54.879799 -3.460400
--3.194200 60.597198 -3.460400
--3.446000 60.597198 -5.980300
--4.340700 55.234299 -6.210400
--3.010600 63.532299 -5.868700
--1.932100 63.532299 -7.311200
--2.517200 60.597198 -7.879200
--3.446000 60.597198 -5.980300
--3.446000 60.597198 -5.980300
--2.517200 60.597198 -7.879200
--2.990300 54.496300 -8.246000
--4.340700 55.234299 -6.210400
--1.932100 63.532299 -7.311200
-0.000000 63.532299 -8.174500
-0.000000 60.597198 -8.812800
--2.517200 60.597198 -7.879200
--2.990300 54.496300 -8.246000
--2.517200 60.597198 -7.879200
-0.000000 60.597198 -8.812800
-0.000000 54.050800 -8.782700
--0.672300 63.485901 -0.421800
--1.171400 65.057899 -2.205500
--1.901400 63.532299 -1.247600
--1.901400 63.532299 -1.247600
--1.171400 65.057899 -2.205500
--1.795600 65.057899 -4.806100
--2.758700 63.532299 -3.348800
--2.758700 63.532299 -3.348800
--1.795600 65.057899 -4.806100
--3.010600 63.532299 -5.868700
--3.010600 63.532299 -5.868700
--1.795600 65.057899 -4.806100
-0.000000 65.057899 -6.421400
--1.932100 63.532299 -7.311200
--1.932100 63.532299 -7.311200
-0.000000 65.057899 -6.421400
-0.000000 63.532299 -8.174500
--1.171400 65.057899 -2.205500
-0.000000 65.560898 -4.058400
--1.795600 65.057899 -4.806100
--1.795600 65.057899 -4.806100
-0.000000 65.560898 -4.058400
-0.000000 65.057899 -6.421400
--1.171400 65.057899 -2.205500
-1.171400 65.057899 -2.205500
-0.000000 65.560898 -4.058400
--0.706900 62.538601 -0.289700
-0.000000 62.538601 -0.140300
--0.672300 63.485901 -0.421800
--2.130500 53.628601 -1.359200
--1.187300 53.628601 -3.164700
--1.393700 60.597198 -3.164700
--2.336800 60.597198 -1.072500
-8.704300 24.905701 -6.036500
-7.984800 25.127701 -6.177400
-7.649900 27.558001 -5.856100
-8.503900 27.435900 -5.670300
-6.463600 36.223400 -3.704900
-5.778000 35.994701 -1.773100
-7.451900 27.210300 -3.504400
-8.503900 27.435900 -5.670300
-5.115000 35.782600 -2.051700
-6.597900 27.332300 -3.690200
-7.451900 27.210300 -3.504400
-5.778000 35.994701 -1.773100
-5.743400 36.019600 -3.995900
-6.463600 36.223400 -3.704900
-8.503900 27.435900 -5.670300
-7.649900 27.558001 -5.856100
-7.451900 27.210300 -3.504400
-6.597900 27.332300 -3.690200
-7.984800 25.127701 -6.177400
-8.704300 24.905701 -6.036500
-7.451900 27.210300 -3.504400
-8.704300 24.905701 -6.036500
-8.503900 27.435900 -5.670300
-6.463600 36.223400 -3.704900
-5.743400 36.019600 -3.995900
-5.115000 35.782600 -2.051700
-5.778000 35.994701 -1.773100
-4.513000 55.007702 -5.909800
-4.291100 55.098900 -5.871800
-4.207800 55.799599 -6.651700
-4.871900 55.799599 -6.765400
-2.904000 62.455601 -5.700500
-2.764700 62.455601 -4.128400
-4.736600 55.799599 -5.153900
-4.871900 55.799599 -6.765400
-2.764700 62.455601 -4.128400
-4.072400 55.799599 -5.040200
-4.736600 55.799599 -5.153900
-2.904000 62.455601 -5.700500
-4.871900 55.799599 -6.765400
-4.207800 55.799599 -6.651700
-4.736600 55.799599 -5.153900
-4.072400 55.799599 -5.040200
-4.291100 55.098900 -5.871800
-4.513000 55.007702 -5.909800
-4.736600 55.799599 -5.153900
-4.513000 55.007702 -5.909800
-4.871900 55.799599 -6.765400
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meshes/ply/NoNormal_UVs_Colors.ply b/src/tests/evas/meshes/ply/NoNormal_UVs_Colors.ply
deleted file mode 100644
index 108c259ba9..0000000000
--- a/src/tests/evas/meshes/ply/NoNormal_UVs_Colors.ply
+++ /dev/null
@@ -1,1681 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-property float s
-property float t
-property uchar red
-property uchar green
-property uchar blue
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600 0.094400 0.185800 0 253 27
--2.020300 14.610600 -8.278800 0.060000 0.185800 0 253 27
--1.712600 0.024900 -9.195700 0.089900 0.023200 254 68 73
--3.252600 0.001600 -8.591000 0.107400 0.025300 254 68 73
--4.649800 14.945700 -8.785600 0.094400 0.185800 254 68 73
--3.252600 0.001600 -8.591000 0.107400 0.025300 254 88 92
--4.089400 2.633000 -5.031300 0.145000 0.057700 254 68 73
--5.308800 13.910900 -3.738700 0.154100 0.185800 254 68 73
--1.553600 3.059500 -4.173500 0.181500 0.058600 18 0 253
--1.766900 13.754900 -2.918700 0.193300 0.185800 0 254 27
--3.061600 3.537800 -3.461700 0.164000 0.067400 18 0 252
--1.553600 3.059500 -4.173500 0.181500 0.058600 18 0 253
--0.626000 0.031700 -8.336200 0.220100 0.017000 19 0 253
--0.971400 14.644800 -6.706400 0.225200 0.185800 27 229 30
--1.766900 13.754900 -2.918700 0.193300 0.185800 0 253 27
--5.495700 46.043098 -6.732400 0.139900 0.788400 254 254 254
--2.827600 38.171799 -8.088300 0.114500 0.661600 254 254 254
--5.919200 37.619099 -4.570300 0.183200 0.661600 254 254 254
--6.029500 46.188801 -3.956000 0.183300 0.792100 254 254 254
--4.685700 36.664101 -1.616400 0.239100 0.661600 13 240 28
--4.298500 47.001099 -0.058900 0.249300 0.802400 5 247 27
--6.029500 46.188801 -3.956000 0.183300 0.792100 0 253 27
--5.919200 37.619099 -4.570300 0.183200 0.661600 0 253 27
--6.775800 50.206501 -7.534500 0.134100 0.852600 0 254 27
--7.252500 54.524502 -7.615000 0.126100 0.913200 0 254 27
-0.000000 53.738098 -8.986800 0.028100 0.877800 0 254 27
-0.000000 50.037800 -9.413700 0.041800 0.827300 0 254 27
--7.252500 54.524502 -7.615000 0.812300 0.981700 0 253 27
--8.747800 53.770199 -7.353300 0.807700 0.944900 0 253 27
--8.184300 53.108700 -3.320400 0.746000 0.944900 0 253 27
--6.624100 53.529800 -2.653700 0.746000 0.986600 0 253 27
--9.827700 52.989700 -7.188500 0.805500 0.922700 0 253 27
--14.989100 50.565300 -7.297200 0.805300 0.834400 0 253 27
--15.636800 49.715099 -4.015700 0.746000 0.809400 0 253 27
--9.508400 52.403099 -3.672700 0.746000 0.922700 0 253 27
-0.000000 37.009800 0.550700 0.310700 0.661600 172 124 55
-0.000000 47.287498 1.094200 0.310700 0.805700 0 252 27
--4.298500 47.001099 -0.058900 0.249300 0.802400 0 253 27
--4.685700 36.664101 -1.616400 0.239100 0.661600 13 226 40
-0.000000 53.738098 -8.986800 0.028100 0.877800 0 254 27
--7.252500 54.524502 -7.615000 0.126100 0.913200 0 254 27
--2.321200 55.471001 -5.570800 0.053700 0.941000 0 254 27
-0.000000 55.950600 -7.250100 0.022400 0.916300 0 254 27
--6.624100 53.529800 -2.653700 0.210200 0.900400 0 253 27
--7.813100 49.342701 -3.886900 0.181000 0.844200 0 253 27
--6.029500 46.188801 -3.956000 0.183300 0.792100 0 253 27
--3.773800 51.093601 -1.034300 0.256600 0.864400 0 253 27
--6.029500 46.188801 -3.956000 0.183300 0.792100 0 253 27
--4.298500 47.001099 -0.058900 0.249300 0.802400 5 247 27
--3.773800 51.093601 -1.034300 0.256600 0.864400 0 253 27
-0.000000 50.880199 0.110000 0.310700 0.860500 0 253 27
--3.773800 51.093601 -1.034300 0.256600 0.864400 0 253 27
--4.298500 47.001099 -0.058900 0.249300 0.802400 0 253 27
-0.000000 47.287498 1.094200 0.310700 0.805700 0 252 27
--16.136200 50.023998 -7.546200 0.808600 0.809400 0 249 27
--14.989100 50.565300 -7.297200 0.805300 0.834400 0 252 27
--13.779500 47.417198 -7.715300 0.879500 0.834400 0 253 27
--14.885000 46.974701 -7.946000 0.879500 0.809400 0 251 27
--13.779500 47.417198 -7.715300 0.626900 0.829400 0 253 27
--8.756500 49.321098 -7.632900 0.626900 0.922700 0 253 27
--8.927200 49.128502 -4.128200 0.688900 0.922700 0 253 27
--14.977100 45.689201 -4.821000 0.680000 0.809400 0 248 31
--17.208200 49.477699 -7.512200 0.810800 0.788400 0 253 27
--22.585199 48.327702 -7.594400 0.812700 0.705100 0 253 27
--22.348700 46.932201 -2.822400 0.746000 0.680200 72 195 37
--16.810101 49.139900 -3.928800 0.746000 0.788400 0 253 27
--21.936399 43.055199 -3.733600 0.691800 0.680200 24 182 75
--16.192200 44.960400 -4.877100 0.677700 0.788400 0 236 42
--16.810101 49.139900 -3.928800 0.746000 0.788400 0 253 27
--22.348700 46.932201 -2.822400 0.746000 0.680200 72 195 37
--22.105101 44.119598 -7.074000 0.862200 0.680200 254 254 254
--23.337700 47.268200 -6.945000 0.809900 0.680200 254 254 254
--22.585199 48.327702 -7.594400 0.812700 0.705100 254 254 254
--21.061199 44.183601 -7.611200 0.879500 0.705100 254 254 254
--15.884600 46.520500 -7.855800 0.626900 0.788400 0 250 27
--16.192200 44.960400 -4.877100 0.677700 0.788400 0 253 27
--21.936399 43.055199 -3.733600 0.691800 0.680200 0 253 27
--21.061199 44.183601 -7.611200 0.626900 0.699700 52 208 31
--5.598500 31.822901 -1.405400 0.185400 0.436500 133 152 48
--7.174300 32.815300 -5.168000 0.136400 0.440500 0 253 27
--7.453900 29.910801 -4.782000 0.143900 0.408700 0 253 27
--4.970000 33.082802 -8.871300 0.086900 0.436600 0 253 27
--5.595300 29.761600 -8.491100 0.097300 0.399700 0 253 27
--7.453900 29.910801 -4.782000 0.143900 0.408700 0 253 27
--7.174300 32.815300 -5.168000 0.136400 0.440500 0 253 27
--6.827700 20.858999 -3.051400 0.166500 0.297500 254 254 254
--5.426000 21.341299 -8.131100 0.106600 0.297500 254 254 254
--6.194700 19.576300 -3.492500 0.163400 0.285600 254 254 254
--0.835600 22.853901 -8.203000 0.053300 0.313700 0 253 27
--0.899900 21.410400 -8.342700 0.054900 0.297500 0 253 27
--5.426000 21.341299 -8.131100 0.106600 0.297500 0 253 27
--5.317800 22.936800 -8.014600 0.105500 0.313700 0 253 27
--0.899900 21.410400 -8.342700 0.307200 0.297500 219 57 99
--1.957400 20.620800 -1.217700 0.224300 0.297500 254 68 73
--1.853000 19.164200 -1.385300 0.221600 0.281000 254 68 73
--6.194700 19.576300 -3.492500 0.163400 0.285600 114 254 128
--1.853000 19.164200 -1.385300 0.221600 0.281000 242 254 242
--1.957400 20.620800 -1.217700 0.224300 0.297500 242 254 242
--6.827700 20.858999 -3.051400 0.166500 0.297500 168 254 177
--5.259600 15.490400 -9.599400 0.090700 0.228600 0 253 27
--5.426000 21.341299 -8.131100 0.106600 0.297500 0 253 27
--0.899900 21.410400 -8.342700 0.054900 0.297500 0 253 27
--0.294400 16.169500 -7.962700 0.039600 0.241800 0 253 27
--0.294400 16.169500 -7.962700 0.282300 0.223700 0 253 27
--0.899900 21.410400 -8.342700 0.307200 0.297500 1 216 59
--1.853000 19.164200 -1.385300 0.221600 0.281000 0 253 27
--1.221800 14.450400 -2.004100 0.220300 0.236900 0 253 27
--1.853000 19.164200 -1.385300 0.221600 0.281000 254 254 254
--6.194700 19.576300 -3.492500 0.163400 0.285600 254 254 254
--6.498700 14.643000 -4.000600 0.151700 0.232900 91 254 108
--1.221800 14.450400 -2.004100 0.220300 0.236900 0 254 27
--6.498700 14.643000 -4.000600 0.151700 0.232900 254 254 254
--6.194700 19.576300 -3.492500 0.163400 0.285600 254 254 254
--5.426000 21.341299 -8.131100 0.106600 0.297500 254 254 254
--5.259600 15.490400 -9.599400 0.090700 0.228600 254 254 254
--7.813100 49.342701 -3.886900 0.181000 0.844200 254 68 73
--6.775800 50.206501 -7.534500 0.134100 0.852600 254 68 73
--5.495700 46.043098 -6.732400 0.139900 0.788400 254 68 73
--6.029500 46.188801 -3.956000 0.183300 0.792100 254 68 73
--8.756500 49.321098 -7.632900 0.626900 0.922700 0 254 27
--6.775800 50.206501 -7.534500 0.626900 0.944900 0 254 27
--7.813100 49.342701 -3.886900 0.686800 0.944900 0 254 27
--8.927200 49.128502 -4.128200 0.688900 0.922700 0 254 27
--5.495700 46.043098 -6.732400 0.139900 0.788400 0 254 27
--6.775800 50.206501 -7.534500 0.134100 0.852600 0 254 27
-0.000000 50.037800 -9.413700 0.041800 0.827300 0 254 27
-0.000000 45.235802 -8.516300 0.061400 0.762800 0 254 27
--3.773800 51.093601 -1.034300 0.256600 0.864400 0 253 27
-0.000000 50.880199 0.110000 0.310700 0.860500 0 253 27
-0.000000 54.522099 -2.187600 0.310700 0.919600 0 253 27
--1.435700 55.057400 -2.884500 0.285800 0.931400 0 253 27
--0.163800 60.672798 0.405300 0.529100 0.200900 0 254 27
--0.596000 60.268700 -0.255900 0.502600 0.185300 0 254 27
--0.605400 59.453602 0.006800 0.508800 0.156900 0 254 27
--0.226300 59.631802 0.717000 0.529800 0.167300 0 254 27
-0.000000 59.375900 0.272700 0.533800 0.153800 0 254 27
--0.605400 59.453602 0.006800 0.508800 0.156900 0 254 27
--0.793500 58.611801 -0.022400 0.506200 0.129800 0 254 27
-0.000000 58.735298 0.237300 0.533800 0.134400 0 253 27
--1.340700 61.343498 -1.024900 0.467800 0.231800 254 254 254
--2.209500 61.230499 -1.515000 0.430900 0.227000 254 254 254
--2.225300 60.301201 -1.334400 0.434400 0.187400 254 254 254
--0.474100 61.294899 -0.607800 0.499900 0.227200 254 254 254
--0.179900 61.274700 0.058500 0.525600 0.223900 254 254 254
--0.785400 61.539799 -0.048800 0.505500 0.247600 254 254 254
--0.163800 60.672798 0.405300 0.529100 0.200900 0 254 27
--0.179900 61.274700 0.058500 0.525600 0.223900 0 254 27
--0.474100 61.294899 -0.607800 0.499900 0.227200 0 254 27
--0.596000 60.268700 -0.255900 0.502600 0.185300 0 254 27
--0.785400 61.539799 -0.048800 0.505500 0.247600 0 254 27
-0.000000 62.775902 -0.355700 0.533900 0.286800 0 254 27
--1.901400 62.898899 -1.262500 0.451600 0.287500 0 254 27
--1.792100 61.563202 -0.648200 0.464300 0.250800 0 254 27
--1.901400 62.898899 -1.262500 0.451600 0.287500 254 254 254
--2.505800 61.413601 -3.333900 0.367200 0.240300 254 254 254
--2.209500 61.230499 -1.515000 0.430900 0.227000 254 254 254
--1.792100 61.563202 -0.648200 0.464300 0.250800 254 254 254
--2.071800 58.080299 -1.837600 0.435700 0.090000 254 254 254
--2.043500 58.694401 -1.722000 0.434700 0.119000 254 254 254
--2.361600 58.652599 -3.405400 0.376100 0.111600 254 254 254
--2.361600 58.652599 -3.405400 0.376100 0.111600 254 254 254
--1.480400 57.287800 -3.167400 0.388000 0.054100 254 254 254
--2.071800 58.080299 -1.837600 0.435700 0.090000 254 254 254
--2.361600 58.652599 -3.405400 0.376100 0.111600 254 254 254
--2.043500 58.694401 -1.722000 0.434700 0.119000 254 254 254
--2.225300 60.301201 -1.334400 0.434400 0.187400 254 254 254
--2.484800 60.667999 -2.078300 0.409600 0.193000 254 254 254
--0.596000 60.268700 -0.255900 0.502600 0.185300 0 254 27
--2.225300 60.301201 -1.334400 0.434400 0.187400 0 254 27
--0.793500 58.611801 -0.022400 0.506200 0.129800 0 254 27
--0.605400 59.453602 0.006800 0.508800 0.156900 0 254 27
--0.793500 58.611801 -0.022400 0.506200 0.129800 0 254 27
--0.860300 57.339199 -0.345300 0.507000 0.087800 0 253 27
-0.000000 57.320400 0.190300 0.533800 0.095300 0 253 27
-0.000000 58.735298 0.237300 0.533800 0.134400 0 253 27
--2.361600 58.652599 -3.405400 0.376100 0.111600 254 254 254
--1.507500 57.978802 -4.806700 0.327200 0.071700 254 254 254
--1.480400 57.287800 -3.167400 0.388000 0.054100 254 254 254
--1.480400 57.287800 -3.167400 0.293600 0.962800 254 153 157
--1.435700 55.057400 -2.884500 0.285800 0.931400 244 75 71
-0.000000 54.522099 -2.187600 0.310700 0.919600 235 81 69
--0.509500 56.862801 -2.081200 0.307800 0.953500 254 129 132
--1.435700 55.057400 -2.884500 0.285800 0.931400 254 68 73
--1.480400 57.287800 -3.167400 0.293600 0.962800 254 68 73
--1.507500 57.978802 -4.806700 0.269900 0.982500 254 68 73
--2.321200 55.471001 -5.570800 0.259500 0.968000 254 68 73
--5.259600 15.490400 -9.599400 0.090700 0.228600 0 253 27
--0.294400 16.169500 -7.962700 0.039600 0.241800 0 253 27
--2.020300 14.610600 -8.278800 0.063600 0.221000 0 253 27
--0.294400 16.169500 -7.962700 0.282300 0.223700 157 130 53
--1.221800 14.450400 -2.004100 0.220300 0.236900 0 252 27
--0.971400 14.644800 -6.706400 0.253200 0.212300 27 229 30
--5.308800 13.910900 -3.738700 0.168700 0.220700 23 254 48
--1.766900 13.754900 -2.918700 0.216900 0.223600 0 254 27
--1.221800 14.450400 -2.004100 0.220300 0.236900 0 254 27
--6.498700 14.643000 -4.000600 0.151700 0.232900 91 254 108
--4.649800 14.945700 -8.785600 0.103500 0.222700 254 68 73
--5.308800 13.910900 -3.738700 0.168700 0.220700 254 68 73
--6.498700 14.643000 -4.000600 0.151700 0.232900 254 68 73
--5.259600 15.490400 -9.599400 0.090700 0.228600 254 68 73
--1.957400 20.620800 -1.217700 0.224300 0.297500 0 253 27
--0.899900 21.410400 -8.342700 0.307200 0.297500 1 216 59
--0.835600 22.853901 -8.203000 0.306600 0.313700 2 205 69
--2.189200 21.987900 -1.481800 0.225500 0.313700 0 253 27
--7.174300 32.815300 -5.168000 0.136400 0.440500 0 253 27
--6.542300 35.480598 -4.902800 0.133600 0.471500 0 253 27
--5.283200 35.952900 -7.814600 0.094100 0.470900 0 254 27
--4.970000 33.082802 -8.871300 0.086900 0.436600 0 253 27
--5.598500 31.822901 -1.405400 0.185400 0.436500 133 152 48
--6.542300 35.480598 -4.902800 0.133600 0.471500 0 253 27
--7.174300 32.815300 -5.168000 0.136400 0.440500 0 253 27
--4.685700 36.664101 -1.616400 0.239100 0.661600 13 226 40
--5.598500 31.822901 -1.405400 0.231500 0.582200 133 152 48
--3.798500 31.552500 -0.386300 0.257600 0.582200 211 97 63
--2.225300 60.301201 -1.334400 0.434400 0.187400 254 254 254
--2.209500 61.230499 -1.515000 0.430900 0.227000 254 254 254
--2.484800 60.667999 -2.078300 0.409600 0.193000 254 254 254
--8.927200 49.128502 -4.128200 0.688900 0.922700 0 253 27
--7.813100 49.342701 -3.886900 0.686800 0.944900 0 253 27
--8.184300 53.108700 -3.320400 0.746000 0.944900 0 253 27
--9.508400 52.403099 -3.672700 0.746000 0.922700 0 253 27
--8.184300 53.108700 -3.320400 0.746000 0.944900 0 253 27
--8.747800 53.770199 -7.353300 0.807700 0.944900 0 253 27
--9.827700 52.989700 -7.188500 0.805500 0.922700 0 253 27
--9.508400 52.403099 -3.672700 0.746000 0.922700 0 253 27
--8.747800 53.770199 -7.353300 0.807700 0.944900 0 254 27
--7.252500 54.524502 -7.615000 0.812300 0.981700 0 254 27
--6.775800 50.206501 -7.534500 0.879500 0.944900 0 254 27
--8.927200 49.128502 -4.128200 0.688900 0.922700 0 253 27
--9.508400 52.403099 -3.672700 0.746000 0.922700 0 253 27
--15.636800 49.715099 -4.015700 0.746000 0.809400 0 253 27
--14.977100 45.689201 -4.821000 0.680000 0.809400 0 248 31
--6.624100 53.529800 -2.653700 0.210200 0.900400 0 253 27
--3.773800 51.093601 -1.034300 0.256600 0.864400 0 253 27
--1.435700 55.057400 -2.884500 0.285800 0.931400 0 253 27
--7.252500 54.524502 -7.615000 0.180400 0.964800 0 253 27
--2.321200 55.471001 -5.570800 0.259500 0.968000 0 253 27
--7.252500 54.524502 -7.615000 0.180400 0.964800 0 253 27
--1.435700 55.057400 -2.884500 0.285800 0.931400 0 253 27
--2.209500 61.230499 -1.515000 0.430900 0.227000 254 254 254
--2.505800 61.413601 -3.333900 0.362700 0.212700 254 254 254
--2.484800 60.667999 -2.078300 0.409600 0.193000 254 254 254
--2.484800 60.667999 -2.078300 0.409600 0.193000 254 254 254
--2.505800 61.413601 -3.333900 0.362700 0.212700 254 254 254
--2.361600 58.652599 -3.405400 0.376100 0.111600 254 254 254
--2.209500 61.230499 -1.515000 0.430900 0.227000 254 254 254
--1.340700 61.343498 -1.024900 0.467800 0.231800 254 254 254
--1.792100 61.563202 -0.648200 0.464300 0.250800 254 254 254
--3.061600 3.537800 -3.461700 0.290200 0.071700 18 0 252
--3.735600 1.816900 0.228400 0.290200 0.030700 18 0 253
--1.568700 1.981700 -0.627100 0.308400 0.040400 18 0 253
--1.553600 3.059500 -4.173500 0.310400 0.073900 18 0 253
--0.626000 0.031700 -8.336200 0.345300 0.097200 18 0 253
--1.553600 3.059500 -4.173500 0.310400 0.073900 18 0 253
--1.568700 1.981700 -0.627100 0.308400 0.040400 18 0 253
--1.825200 -0.024100 0.601200 0.313500 0.023800 18 0 253
--1.825200 -0.024100 0.601200 0.748300 0.055100 18 0 253
--3.769300 -0.009000 1.132900 0.765800 0.040900 18 0 253
--1.712600 0.024900 -9.195700 0.765100 0.147100 19 0 253
--0.626000 0.031700 -8.336200 0.751000 0.138000 19 0 253
--1.712600 0.024900 -9.195700 0.089900 0.023200 254 68 73
--2.020300 14.610600 -8.278800 0.060000 0.185800 0 253 27
--0.971400 14.644800 -6.706400 0.025900 0.185800 0 253 27
--0.626000 0.031700 -8.336200 0.075600 0.021500 254 68 73
--1.568700 1.981700 -0.627100 0.308400 0.040400 18 0 253
--3.735600 1.816900 0.228400 0.290200 0.030700 18 0 253
--3.769300 -0.009000 1.132900 0.289700 0.012400 18 0 253
--1.825200 -0.024100 0.601200 0.313500 0.023800 19 0 253
--4.089400 2.633000 -5.031300 0.275500 0.071900 188 254 194
--3.252600 0.001600 -8.591000 0.238500 0.103000 0 254 27
--5.176800 -0.025000 -0.598300 0.266200 0.023600 254 254 254
--5.390300 1.568200 -1.670300 0.274000 0.039600 254 254 254
--3.769300 -0.009000 1.132900 0.289700 0.012400 18 0 253
--3.735600 1.816900 0.228400 0.290200 0.030700 18 0 253
--5.390300 1.568200 -1.670300 0.274000 0.039600 18 0 253
--5.176800 -0.025000 -0.598300 0.266200 0.023600 18 0 253
--5.390300 1.568200 -1.670300 0.274000 0.039600 18 0 253
--3.735600 1.816900 0.228400 0.290200 0.030700 18 0 253
--3.061600 3.537800 -3.461700 0.290200 0.071700 18 0 252
--4.089400 2.633000 -5.031300 0.275500 0.071900 18 0 252
--3.061600 3.537800 -3.461700 0.164000 0.067400 18 0 252
--1.766900 13.754900 -2.918700 0.193300 0.185800 0 254 27
--5.308800 13.910900 -3.738700 0.154100 0.185800 14 254 41
--4.089400 2.633000 -5.031300 0.145000 0.057700 18 0 252
--2.020300 14.610600 -8.278800 0.063600 0.221000 0 253 27
--4.649800 14.945700 -8.785600 0.103500 0.222700 0 253 27
--5.259600 15.490400 -9.599400 0.090700 0.228600 0 253 27
--2.020300 14.610600 -8.278800 0.063600 0.221000 0 253 27
--0.294400 16.169500 -7.962700 0.039600 0.241800 0 253 27
--0.971400 14.644800 -6.706400 0.028400 0.216500 0 253 27
--5.426000 21.341299 -8.131100 0.106600 0.297500 254 254 254
--6.827700 20.858999 -3.051400 0.166500 0.297500 254 254 254
--6.824000 22.193899 -3.254300 0.165700 0.313700 254 254 254
--5.317800 22.936800 -8.014600 0.105500 0.313700 254 254 254
--0.845100 29.891001 -9.491500 0.041700 0.395800 0 253 27
--0.835600 22.853901 -8.203000 0.053300 0.313700 0 253 27
--5.317800 22.936800 -8.014600 0.105500 0.313700 0 253 27
--5.595300 29.761600 -8.491100 0.097300 0.399700 0 254 27
--1.957400 20.620800 -1.217700 0.224300 0.297500 242 254 242
--2.189200 21.987900 -1.481800 0.225500 0.313700 218 254 222
--6.824000 22.193899 -3.254300 0.165700 0.313700 99 254 117
--6.827700 20.858999 -3.051400 0.166500 0.297500 166 254 175
--0.605400 59.453602 0.006800 0.508800 0.156900 254 254 254
-0.000000 59.375900 0.272700 0.533800 0.153800 254 254 254
--0.226300 59.631802 0.717000 0.529800 0.167300 254 254 254
--21.936399 43.055199 -3.733600 0.691800 0.680200 24 182 75
--22.348700 46.932201 -2.822400 0.746000 0.680200 72 195 37
--23.323000 46.228001 -3.425200 0.746000 0.661900 26 230 29
--23.265499 44.290199 -3.614200 0.710900 0.661900 37 214 37
--22.105101 44.119598 -7.074000 0.862200 0.680200 254 254 254
--23.273100 44.479099 -6.170500 0.835600 0.661900 254 254 254
--23.881300 46.267799 -5.995500 0.800900 0.661900 254 254 254
--23.337700 47.268200 -6.945000 0.809900 0.680200 254 254 254
--22.348700 46.932201 -2.822400 0.746000 0.680200 72 195 37
--23.337700 47.268200 -6.945000 0.809900 0.680200 0 254 27
--23.881300 46.267799 -5.995500 0.800900 0.661900 0 253 27
--23.323000 46.228001 -3.425200 0.746000 0.661900 26 230 29
--21.936399 43.055199 -3.733600 0.691800 0.680200 254 68 73
--23.265499 44.290199 -3.614200 0.710900 0.661900 254 68 73
--23.273100 44.479099 -6.170500 0.665900 0.661900 254 68 73
--22.105101 44.119598 -7.074000 0.641700 0.680200 254 68 73
--23.323000 46.228001 -3.425200 0.746000 0.661900 26 230 29
--24.935400 45.742901 -3.288800 0.746000 0.630500 80 189 39
--24.446100 44.099098 -3.039500 0.723200 0.630500 144 136 53
--23.265499 44.290199 -3.614200 0.710900 0.661900 37 214 37
--23.273100 44.479099 -6.170500 0.835600 0.661900 16 254 41
--25.718901 44.407902 -5.989100 0.812100 0.630500 47 254 71
--25.982700 45.641201 -5.974700 0.796200 0.630500 53 254 75
--23.881300 46.267799 -5.995500 0.800900 0.661900 23 254 48
--23.881300 46.267799 -5.995500 0.800900 0.661900 0 253 27
--25.982700 45.641201 -5.974700 0.796200 0.630500 0 253 27
--24.935400 45.742901 -3.288800 0.746000 0.630500 80 189 39
--23.323000 46.228001 -3.425200 0.746000 0.661900 26 230 29
--23.265499 44.290199 -3.614200 0.710900 0.661900 0 254 27
--24.446100 44.099098 -3.039500 0.723200 0.630500 0 254 27
--25.718901 44.407902 -5.989100 0.677100 0.630500 47 254 71
--23.273100 44.479099 -6.170500 0.665900 0.661900 16 254 41
--3.798500 31.552500 -0.386300 0.257600 0.582200 211 97 63
-0.000000 31.552500 0.128500 0.310700 0.582200 203 101 62
-0.000000 37.009800 0.550700 0.310700 0.661600 172 124 55
--4.685700 36.664101 -1.616400 0.239100 0.661600 13 226 40
--27.058001 43.733101 -1.471100 0.783900 0.527900 254 68 73
--28.100901 44.177299 -2.470000 0.756100 0.537200 231 80 64
--27.637899 42.321201 -1.984400 0.780200 0.502700 254 68 73
--26.775499 43.007000 -1.492900 0.799700 0.523000 254 68 73
--27.102699 45.320202 -5.735100 0.706300 0.587600 75 254 93
--25.982700 45.641201 -5.974700 0.701400 0.609900 53 254 75
--25.718901 44.407902 -5.989100 0.674700 0.592000 47 254 71
--26.246300 42.901402 -5.383600 0.663100 0.553800 20 254 46
--24.935400 45.742901 -3.288800 0.774000 0.616500 80 254 99
--25.982700 45.641201 -5.974700 0.701400 0.609900 0 254 27
--27.102699 45.320202 -5.735100 0.706300 0.587600 0 254 27
--26.753901 45.398300 -2.858600 0.766000 0.574200 163 254 174
--24.446100 44.099098 -3.039500 0.815000 0.599300 0 249 30
--26.246300 42.901402 -5.383600 0.880100 0.569900 19 213 43
--25.718901 44.407902 -5.989100 0.885900 0.607200 46 208 34
--28.380600 42.330502 -3.056600 0.741600 0.498200 254 68 73
--27.637899 42.321201 -1.984400 0.780200 0.502700 254 68 73
--28.100901 44.177299 -2.470000 0.756100 0.537200 254 68 73
--28.697901 44.238201 -3.477500 0.737900 0.538900 254 68 73
--28.380600 42.330502 -3.056600 0.741600 0.498200 254 254 254
--28.697901 44.238201 -3.477500 0.737900 0.538900 254 254 254
--28.543800 44.178001 -4.651400 0.718600 0.545700 254 254 254
--28.292801 42.543098 -4.446800 0.704200 0.514300 254 254 254
--26.753901 45.398300 -2.858600 0.766000 0.574200 163 125 53
--28.697901 44.238201 -3.477500 0.737900 0.538900 97 175 41
--28.100901 44.177299 -2.470000 0.756100 0.537200 231 80 64
--24.935400 45.742901 -3.288800 0.774000 0.616500 80 189 39
--26.117701 44.487900 -2.198700 0.788200 0.565100 242 74 67
--25.587200 43.557701 -2.038700 0.806300 0.556900 253 67 73
--24.446100 44.099098 -3.039500 0.815000 0.599300 144 136 53
--24.446100 44.099098 -3.039500 0.815000 0.599300 0 249 30
--25.587200 43.557701 -2.038700 0.806300 0.556900 0 252 27
--25.491899 42.827301 -2.370100 0.813300 0.554500 0 245 34
--26.246300 42.901402 -5.383600 0.880100 0.569900 19 213 43
--26.753901 45.398300 -2.858600 0.766000 0.574200 163 125 53
--26.117701 44.487900 -2.198700 0.788200 0.565100 242 74 67
--24.935400 45.742901 -3.288800 0.774000 0.616500 80 189 39
-0.000000 31.552500 0.128500 0.310700 0.582200 203 101 62
--3.798500 31.552500 -0.386300 0.257600 0.582200 211 97 63
--3.463700 23.872801 -0.356700 0.261000 0.472800 254 68 73
-0.000000 24.132099 -0.356700 0.310700 0.472800 243 74 70
--2.225300 60.301201 -1.334400 0.434400 0.187400 254 254 254
--2.043500 58.694401 -1.722000 0.434700 0.119000 254 247 247
--0.793500 58.611801 -0.022400 0.506200 0.129800 254 246 246
--0.793500 58.611801 -0.022400 0.506200 0.129800 254 246 246
--2.043500 58.694401 -1.722000 0.434700 0.119000 254 247 247
--2.071800 58.080299 -1.837600 0.435700 0.090000 254 224 225
--0.860300 57.339199 -0.345300 0.507000 0.087800 254 172 174
--2.071800 58.080299 -1.837600 0.435700 0.090000 254 224 225
--1.480400 57.287800 -3.167400 0.435700 0.022900 254 153 157
--0.509500 56.862801 -2.081200 0.497100 0.026700 254 129 132
--0.860300 57.339199 -0.345300 0.507000 0.087800 254 172 174
--0.179900 61.274700 0.058500 0.525600 0.223900 0 254 27
-0.000000 61.912998 -0.048000 0.533800 0.254400 0 254 27
--0.785400 61.539799 -0.048800 0.505500 0.247600 0 254 27
--15.884600 46.520500 -7.855800 0.879500 0.788400 0 250 27
--17.208200 49.477699 -7.512200 0.810800 0.788400 6 242 27
--16.136200 50.023998 -7.546200 0.808600 0.809400 0 249 27
--14.885000 46.974701 -7.946000 0.879500 0.809400 0 251 27
--15.636800 49.715099 -4.015700 0.746000 0.809400 0 253 27
--16.136200 50.023998 -7.546200 0.808600 0.809400 0 253 27
--17.208200 49.477699 -7.512200 0.810800 0.788400 0 253 27
--16.810101 49.139900 -3.928800 0.746000 0.788400 0 253 27
--16.192200 44.960400 -4.877100 0.677700 0.788400 0 236 42
--15.884600 46.520500 -7.855800 0.626900 0.788400 0 253 27
--14.885000 46.974701 -7.946000 0.626900 0.809400 0 253 27
--14.977100 45.689201 -4.821000 0.680000 0.809400 0 248 31
--16.810101 49.139900 -3.928800 0.746000 0.788400 236 81 69
--16.192200 44.960400 -4.877100 0.677700 0.788400 200 90 77
--14.977100 45.689201 -4.821000 0.680000 0.809400 174 120 62
--15.636800 49.715099 -4.015700 0.746000 0.809400 218 94 66
--13.779500 47.417198 -7.715300 0.879500 0.834400 0 253 27
--14.989100 50.565300 -7.297200 0.805300 0.834400 0 252 27
--9.827700 52.989700 -7.188500 0.805500 0.922700 0 253 27
--8.756500 49.321098 -7.632900 0.879500 0.922700 0 253 27
--15.636800 49.715099 -4.015700 0.746000 0.809400 0 253 27
--14.989100 50.565300 -7.297200 0.805300 0.834400 0 253 27
--16.136200 50.023998 -7.546200 0.808600 0.809400 0 253 27
--13.779500 47.417198 -7.715300 0.626900 0.829400 0 253 27
--14.977100 45.689201 -4.821000 0.680000 0.809400 0 253 27
--14.885000 46.974701 -7.946000 0.626900 0.809400 0 251 27
--0.971400 14.644800 -6.706400 0.253200 0.212300 27 229 30
--1.221800 14.450400 -2.004100 0.220300 0.236900 0 252 27
--1.766900 13.754900 -2.918700 0.216900 0.223600 0 253 27
--26.117701 44.487900 -2.198700 0.788200 0.565100 242 74 67
--27.058001 43.733101 -1.471100 0.783900 0.527900 254 68 73
--26.775499 43.007000 -1.492900 0.799700 0.523000 254 68 73
--25.587200 43.557701 -2.038700 0.806300 0.556900 253 67 73
--25.587200 43.557701 -2.038700 0.806300 0.556900 0 252 27
--26.775499 43.007000 -1.492900 0.799700 0.523000 0 253 27
--27.637899 42.321201 -1.984400 0.816200 0.507300 0 253 27
--25.491899 42.827301 -2.370100 0.813300 0.554500 0 245 34
--26.117701 44.487900 -2.198700 0.788200 0.565100 242 74 67
--28.100901 44.177299 -2.470000 0.756100 0.537200 231 80 64
--27.058001 43.733101 -1.471100 0.783900 0.527900 254 68 73
--8.184300 53.108700 -3.320400 0.746000 0.944900 0 253 27
--7.813100 49.342701 -3.886900 0.686800 0.944900 0 253 27
--6.624100 53.529800 -2.653700 0.746000 0.986600 0 253 27
--8.747800 53.770199 -7.353300 0.807700 0.944900 0 254 27
--6.775800 50.206501 -7.534500 0.879500 0.944900 0 254 27
--8.756500 49.321098 -7.632900 0.879500 0.922700 0 254 27
--9.827700 52.989700 -7.188500 0.805500 0.922700 0 254 27
--28.543800 44.178001 -4.651400 0.718600 0.545700 0 254 27
--28.697901 44.238201 -3.477500 0.737900 0.538900 97 254 114
--26.753901 45.398300 -2.858600 0.766000 0.574200 163 254 174
--27.102699 45.320202 -5.735100 0.706300 0.587600 0 254 27
--26.246300 42.901402 -5.383600 0.880100 0.569900 20 231 27
--28.380600 42.330502 -3.056600 0.853500 0.507000 0 252 27
--28.292801 42.543098 -4.446800 0.879400 0.523100 5 243 27
--28.100901 44.177299 -2.470000 0.756100 0.537200 231 80 64
--26.117701 44.487900 -2.198700 0.788200 0.565100 242 74 67
--26.753901 45.398300 -2.858600 0.766000 0.574200 163 125 53
--1.712600 0.024900 -9.195700 0.765100 0.147100 254 254 254
--3.769300 -0.009000 1.132900 0.765800 0.040900 0 254 27
--5.176800 -0.025000 -0.598300 0.783900 0.050100 0 254 27
--3.252600 0.001600 -8.591000 0.777900 0.139800 254 254 254
-0.000000 61.912998 -0.048000 0.533800 0.254400 0 254 27
-0.000000 62.775902 -0.355700 0.533900 0.286800 0 254 27
--0.785400 61.539799 -0.048800 0.505500 0.247600 0 254 27
--0.340300 31.400700 -9.922000 0.348900 0.396000 0 253 27
--0.425600 30.069099 -1.503600 0.251300 0.411900 0 253 27
--0.845100 29.891001 -9.491500 0.339400 0.379800 0 253 27
-0.000000 54.522099 -2.187600 0.310700 0.919600 235 81 69
-0.000000 56.862801 -2.081200 0.310500 0.953100 254 127 130
--0.509500 56.862801 -2.081200 0.307800 0.953500 254 129 132
--0.509500 56.862801 -2.081200 0.497100 0.026700 254 129 132
-0.000000 56.862801 -2.081200 0.533800 0.019000 254 127 130
-0.000000 57.320400 0.190300 0.533800 0.095300 254 190 192
--0.860300 57.339199 -0.345300 0.507000 0.087800 254 172 174
--5.598500 31.822901 -1.405400 0.185400 0.436500 133 152 48
--7.453900 29.910801 -4.782000 0.143900 0.408700 0 253 27
--6.824000 22.193899 -3.254300 0.165700 0.313700 99 254 117
--6.824000 22.193899 -3.254300 0.165700 0.313700 254 68 73
--7.453900 29.910801 -4.782000 0.143900 0.408700 254 68 73
--5.595300 29.761600 -8.491100 0.097300 0.399700 254 68 73
--5.317800 22.936800 -8.014600 0.105500 0.313700 254 68 73
--3.798500 31.552500 -0.386300 0.210900 0.433400 211 97 63
--5.598500 31.822901 -1.405400 0.185400 0.436500 133 152 48
--6.824000 22.193899 -3.254300 0.165700 0.313700 99 254 117
--2.189200 21.987900 -1.481800 0.225500 0.313700 218 254 222
--0.340300 31.400700 -9.922000 0.033600 0.413900 0 253 27
--0.845100 29.891001 -9.491500 0.041700 0.395800 0 253 27
--5.595300 29.761600 -8.491100 0.097300 0.399700 0 254 27
--4.970000 33.082802 -8.871300 0.086900 0.436600 0 254 27
--0.835600 22.853901 -8.203000 0.306600 0.313700 2 205 69
--0.845100 29.891001 -9.491500 0.339400 0.379800 0 241 37
--0.425600 30.069099 -1.503600 0.251300 0.411900 0 253 27
--2.189200 21.987900 -1.481800 0.225500 0.313700 0 253 27
--2.162800 35.743500 -9.599900 0.052600 0.465300 0 254 27
--0.340300 31.400700 -9.922000 0.033600 0.413900 0 253 27
--4.970000 33.082802 -8.871300 0.086900 0.436600 0 254 27
--5.283200 35.952900 -7.814600 0.094100 0.470900 0 254 27
--5.283200 35.952900 -7.814600 0.142000 0.631800 0 254 27
--6.542300 35.480598 -4.902800 0.182300 0.631800 0 254 27
--5.919200 37.619099 -4.570300 0.183200 0.661600 0 254 27
--5.919200 37.619099 -4.570300 0.183200 0.661600 0 253 27
--6.542300 35.480598 -4.902800 0.182300 0.631800 0 253 27
--5.598500 31.822901 -1.405400 0.231500 0.582200 133 152 48
--4.685700 36.664101 -1.616400 0.239100 0.661600 13 240 28
--0.474100 61.294899 -0.607800 0.499900 0.227200 0 254 27
--1.340700 61.343498 -1.024900 0.467800 0.231800 0 254 27
--2.225300 60.301201 -1.334400 0.434400 0.187400 0 254 27
--0.596000 60.268700 -0.255900 0.502600 0.185300 0 254 27
--1.340700 61.343498 -1.024900 0.467800 0.231800 254 254 254
--0.474100 61.294899 -0.607800 0.499900 0.227200 254 254 254
--0.785400 61.539799 -0.048800 0.505500 0.247600 254 254 254
--1.792100 61.563202 -0.648200 0.464300 0.250800 254 254 254
-0.000000 45.235802 -8.516300 0.061400 0.762800 0 253 27
-0.000000 38.221600 -8.073300 0.073200 0.661600 0 253 27
--2.827600 38.171799 -8.088300 0.114500 0.661600 0 253 27
--5.495700 46.043098 -6.732400 0.139900 0.788400 0 253 27
--0.425600 30.069099 -1.503600 0.251300 0.411900 254 254 254
--3.798500 31.552500 -0.386300 0.210900 0.433400 254 254 254
--2.189200 21.987900 -1.481800 0.225500 0.313700 254 254 254
-0.000000 31.547001 -9.939100 0.349900 0.400200 254 68 73
-0.000000 30.215401 -1.522000 0.252400 0.417000 254 68 73
--0.425600 30.069099 -1.503600 0.251300 0.411900 254 68 73
--0.340300 31.400700 -9.922000 0.348900 0.396000 254 68 73
--21.061199 44.183601 -7.611200 0.879500 0.705100 52 208 31
--22.585199 48.327702 -7.594400 0.812700 0.705100 104 170 42
--17.208200 49.477699 -7.512200 0.810800 0.788400 6 242 27
--15.884600 46.520500 -7.855800 0.879500 0.788400 0 250 27
--22.348700 46.932201 -2.822400 0.746000 0.680200 72 195 37
--22.585199 48.327702 -7.594400 0.812700 0.705100 0 253 27
--23.337700 47.268200 -6.945000 0.809900 0.680200 0 254 27
--21.061199 44.183601 -7.611200 0.626900 0.699700 52 208 31
--21.936399 43.055199 -3.733600 0.691800 0.680200 0 253 27
--22.105101 44.119598 -7.074000 0.641700 0.680200 30 225 27
-0.000000 59.375900 0.272700 0.533800 0.153800 254 254 254
-0.226300 59.631802 0.717000 0.537800 0.167300 254 254 254
--0.226300 59.631802 0.717000 0.529800 0.167300 254 254 254
--0.163800 60.672798 0.405300 0.529100 0.200900 0 254 27
--0.226300 59.631802 0.717000 0.529800 0.167300 0 254 27
-0.226300 59.631802 0.717000 0.537800 0.167300 0 254 27
-0.163800 60.672798 0.405300 0.538500 0.200900 0 254 27
--0.340300 31.400700 -9.922000 0.033600 0.413900 0 253 27
--2.162800 35.743500 -9.599900 0.052600 0.465300 0 253 27
-0.000000 35.795200 -9.599900 0.027500 0.464800 0 253 27
-0.000000 31.547001 -9.939100 0.029600 0.415400 0 253 27
--5.919200 37.619099 -4.570300 0.183200 0.661600 0 254 27
--2.827600 38.171799 -8.088300 0.114500 0.661600 0 254 27
--2.162800 35.743500 -9.599900 0.096500 0.631800 0 254 27
--5.283200 35.952900 -7.814600 0.142000 0.631800 0 254 27
--28.543800 44.178001 -4.651400 0.718600 0.545700 254 254 254
--27.102699 45.320202 -5.735100 0.706300 0.587600 254 254 254
--26.246300 42.901402 -5.383600 0.663100 0.553800 254 254 254
--28.292801 42.543098 -4.446800 0.704200 0.514300 254 254 254
--25.491899 42.827301 -2.370100 0.813300 0.554500 0 254 27
--27.637899 42.321201 -1.984400 0.816200 0.507300 0 254 27
--28.380600 42.330502 -3.056600 0.853500 0.507000 0 254 27
--26.246300 42.901402 -5.383600 0.880100 0.569900 20 231 27
--25.491899 42.827301 -2.370100 0.813300 0.554500 0 253 27
--28.380600 42.330502 -3.056600 0.853500 0.507000 0 252 27
--0.179900 61.274700 0.058500 0.525600 0.223900 0 254 27
--0.163800 60.672798 0.405300 0.529100 0.200900 0 254 27
-0.163800 60.672798 0.405300 0.538500 0.200900 0 254 27
-0.179900 61.274700 0.058500 0.542100 0.223900 0 254 27
-0.000000 61.912998 -0.048000 0.533800 0.254400 0 254 27
--0.179900 61.274700 0.058500 0.525600 0.223900 0 254 27
-0.179900 61.274700 0.058500 0.542100 0.223900 0 254 27
--2.162800 35.743500 -9.599900 0.096500 0.631800 0 253 27
--2.827600 38.171799 -8.088300 0.114500 0.661600 0 253 27
-0.000000 38.221600 -8.073300 0.073200 0.661600 0 253 27
-0.000000 35.795200 -9.599900 0.068100 0.631800 0 253 27
-4.620900 14.945700 -8.516100 0.912200 0.175600 0 253 27
-3.252600 0.001600 -8.591000 0.909400 0.032900 235 80 66
-1.712600 0.024900 -9.195700 0.925400 0.031900 254 68 73
-1.456400 14.610600 -8.695100 0.943400 0.175600 0 253 27
-4.089400 2.633000 -5.031300 0.873900 0.060000 18 0 253
-3.252600 0.001600 -8.591000 0.909400 0.032900 19 0 253
-4.620900 14.945700 -8.516100 0.912200 0.175600 0 247 31
-5.308800 13.910900 -3.738700 0.859000 0.175600 0 253 27
-1.553600 3.059500 -4.173500 0.841100 0.058900 18 0 253
-3.061600 3.537800 -3.461700 0.856300 0.067800 18 0 253
-1.766900 13.754900 -2.918700 0.824200 0.175600 0 254 27
-1.553600 3.059500 -4.173500 0.841100 0.058900 254 254 254
-1.766900 13.754900 -2.918700 0.824200 0.175600 254 254 254
-1.239800 14.644800 -6.465300 0.795300 0.175600 254 254 254
-0.626000 0.031700 -8.336200 0.808600 0.019600 254 254 254
-5.495700 46.043098 -6.732400 0.140100 0.788400 0 252 27
-6.029500 46.188801 -3.956000 0.183500 0.792100 0 253 27
-5.919200 37.619099 -4.570300 0.183400 0.661600 9 98 162
-2.827600 38.171799 -8.088300 0.114700 0.661600 8 119 142
-4.685700 36.664101 -1.616400 0.239300 0.661600 0 250 28
-5.919200 37.619099 -4.570300 0.183400 0.661600 9 98 162
-6.029500 46.188801 -3.956000 0.183500 0.792100 0 253 27
-4.298500 47.001099 -0.058900 0.249500 0.802400 0 253 27
-6.775800 50.206501 -7.534500 0.134300 0.852600 0 253 27
-0.000000 50.037800 -9.413700 0.042000 0.827300 0 253 27
-0.000000 53.738098 -8.986800 0.028300 0.877800 0 253 27
-7.252500 54.524502 -7.615000 0.126400 0.913200 0 254 27
-7.252500 54.524502 -7.615000 0.533200 0.977800 0 254 27
-6.624100 53.529800 -2.653700 0.469900 0.977800 0 253 27
-8.184300 53.108700 -3.320400 0.469900 0.942000 0 253 27
-8.747800 53.770199 -7.353300 0.528600 0.942000 0 253 27
-9.827700 52.989700 -7.188500 0.526400 0.916400 0 253 27
-9.508400 52.403099 -3.672700 0.469900 0.916400 0 253 27
-15.636800 49.715099 -4.015700 0.469900 0.803100 1 215 59
-14.989100 50.565300 -7.297200 0.526200 0.828100 0 249 29
-0.000000 37.009800 0.550700 0.310700 0.661600 0 253 27
-4.685700 36.664101 -1.616400 0.239300 0.661600 0 250 28
-4.298500 47.001099 -0.058900 0.249500 0.802400 0 253 27
-0.000000 47.287498 1.094200 0.310700 0.805700 0 253 27
-0.000000 53.738098 -8.986800 0.028300 0.877800 0 253 27
-0.000000 55.950600 -7.250100 0.022600 0.916300 0 253 27
-2.321200 55.471001 -5.570800 0.053900 0.941000 0 253 27
-7.252500 54.524502 -7.615000 0.126400 0.913200 0 254 27
-3.773800 51.093601 -1.034300 0.256800 0.864400 0 253 27
-4.298500 47.001099 -0.058900 0.249500 0.802400 0 253 27
-6.029500 46.188801 -3.956000 0.183500 0.792100 0 253 27
-6.624100 53.529800 -2.653700 0.210400 0.900400 0 253 27
-6.624100 53.529800 -2.653700 0.210400 0.900400 254 68 73
-6.029500 46.188801 -3.956000 0.183500 0.792100 254 68 73
-7.813100 49.342701 -3.886900 0.181200 0.844200 254 68 73
-0.000000 50.880199 0.110000 0.310700 0.860500 0 253 27
-0.000000 47.287498 1.094200 0.310700 0.805700 0 252 27
-4.298500 47.001099 -0.058900 0.249500 0.802400 0 253 27
-3.773800 51.093601 -1.034300 0.256800 0.864400 0 253 27
-16.136200 50.023998 -7.546200 0.529500 0.803100 0 253 27
-14.885000 46.974701 -7.946000 0.590800 0.803100 0 253 27
-13.779500 47.417198 -7.715300 0.590800 0.828100 0 253 27
-14.989100 50.565300 -7.297200 0.526200 0.828100 0 253 27
-13.779500 47.417198 -7.715300 0.347800 0.823100 0 253 27
-14.977100 45.689201 -4.821000 0.400900 0.803100 0 253 27
-8.927200 49.128502 -4.128200 0.409800 0.916400 0 253 27
-8.756500 49.321098 -7.632900 0.347800 0.916400 0 253 27
-17.208200 49.477699 -7.512200 0.531700 0.782100 0 227 47
-16.810101 49.139900 -3.928800 0.469900 0.782100 35 133 112
-22.348700 46.932201 -2.822400 0.469900 0.674700 19 0 250
-22.585199 48.327702 -7.594400 0.533600 0.698800 0 236 38
-21.936399 43.055199 -3.733600 0.412700 0.674700 19 0 253
-22.348700 46.932201 -2.822400 0.469900 0.674700 19 0 250
-16.810101 49.139900 -3.928800 0.469900 0.782100 35 133 112
-16.192200 44.960400 -4.877100 0.398600 0.782100 18 0 253
-22.105101 44.119598 -7.074000 0.583100 0.674700 0 253 27
-21.061199 44.183601 -7.611200 0.590800 0.698800 0 253 27
-22.585199 48.327702 -7.594400 0.533600 0.698800 0 253 27
-23.337700 47.268200 -6.945000 0.530800 0.674700 0 253 27
-15.884600 46.520500 -7.855800 0.347800 0.782100 0 253 27
-21.061199 44.183601 -7.611200 0.347800 0.693400 0 253 27
-21.936399 43.055199 -3.733600 0.412700 0.674700 0 253 27
-16.192200 44.960400 -4.877100 0.398600 0.782100 0 253 27
-5.598500 31.822901 -1.404300 0.847900 0.413200 0 240 37
-7.453900 29.910801 -4.780100 0.884800 0.385400 18 0 251
-7.174300 32.815300 -5.167300 0.893300 0.414200 17 7 244
-4.970000 33.082802 -8.871900 0.938900 0.409500 18 0 252
-7.174300 32.815300 -5.167300 0.893300 0.414200 17 7 244
-7.453900 29.910801 -4.780100 0.884800 0.385400 18 0 251
-5.595300 29.761600 -8.492500 0.927500 0.375900 18 0 253
-6.827700 20.858999 -3.044800 0.858900 0.286100 0 231 44
-6.194700 19.576300 -3.478600 0.860200 0.277400 0 248 31
-5.426000 21.341299 -8.132600 0.914200 0.282100 15 21 230
-0.835600 22.853901 -8.210700 0.964300 0.301600 0 253 27
-5.317800 22.936800 -8.016200 0.916400 0.301600 0 253 27
-5.426000 21.341299 -8.132600 0.914200 0.282100 0 253 27
-0.899900 21.410400 -8.349400 0.962800 0.286100 0 253 27
-0.899900 21.410400 -8.349400 0.726500 0.282100 254 254 254
-1.853000 19.164200 -1.371600 0.805100 0.274200 254 254 254
-1.957400 20.620800 -1.211500 0.804700 0.286100 254 254 254
-6.194700 19.576300 -3.478600 0.860200 0.277400 0 248 31
-6.827700 20.858999 -3.044800 0.858900 0.286100 0 231 44
-1.957400 20.620800 -1.211500 0.804700 0.286100 0 253 27
-1.853000 19.164200 -1.371600 0.805100 0.274200 0 253 27
-5.117200 15.490400 -9.679700 0.917300 0.220800 0 253 27
-0.134100 16.169500 -9.174700 0.969900 0.225300 0 253 27
-0.899900 21.410400 -8.349400 0.962800 0.286100 0 253 27
-5.426000 21.341299 -8.132600 0.914200 0.282100 0 253 27
-0.134100 16.169500 -9.174700 0.732600 0.207100 0 254 27
-1.716700 14.450400 -2.459200 0.808600 0.236100 0 254 27
-1.853000 19.164200 -1.371600 0.805100 0.274200 0 254 27
-0.899900 21.410400 -8.349400 0.726500 0.282100 0 254 27
-1.853000 19.164200 -1.371600 0.805100 0.274200 0 253 27
-1.716700 14.450400 -2.459200 0.808600 0.236100 0 253 27
-6.069200 14.643000 -3.762300 0.859400 0.227800 0 253 27
-6.194700 19.576300 -3.478600 0.860200 0.277400 0 248 31
-6.069200 14.643000 -3.762300 0.859400 0.227800 0 253 27
-5.117200 15.490400 -9.679700 0.917300 0.220800 2 202 70
-5.426000 21.341299 -8.132600 0.914200 0.282100 15 21 230
-6.194700 19.576300 -3.478600 0.860200 0.277400 0 248 31
-7.813100 49.342701 -3.886900 0.181200 0.844200 0 253 27
-6.029500 46.188801 -3.956000 0.183500 0.792100 0 253 27
-5.495700 46.043098 -6.732400 0.140100 0.788400 0 252 27
-6.775800 50.206501 -7.534500 0.134300 0.852600 0 253 27
-8.756500 49.321098 -7.632900 0.347800 0.916400 254 68 73
-8.927200 49.128502 -4.128200 0.409800 0.916400 254 68 73
-7.813100 49.342701 -3.886900 0.407700 0.942000 254 68 73
-6.775800 50.206501 -7.534500 0.347800 0.942000 254 68 73
-5.495700 46.043098 -6.732400 0.140100 0.788400 0 253 27
-0.000000 45.235802 -8.516300 0.061600 0.762900 0 253 27
-0.000000 50.037800 -9.413700 0.042000 0.827300 0 253 27
-6.775800 50.206501 -7.534500 0.134300 0.852600 0 253 27
-3.773800 51.093601 -1.034300 0.256800 0.864400 0 253 27
-1.435700 55.057400 -2.884500 0.286000 0.931400 0 253 27
-0.000000 54.522099 -2.187600 0.310700 0.919600 0 253 27
-0.000000 50.880199 0.110000 0.310700 0.860500 0 253 27
-0.163800 60.672798 0.405300 0.538500 0.200900 0 253 27
-0.226300 59.631802 0.717000 0.537800 0.167300 0 253 27
-0.605400 59.453602 0.006800 0.558900 0.156900 0 253 27
-0.596000 60.268700 -0.255900 0.565100 0.185300 0 253 27
-0.000000 59.375900 0.272700 0.533800 0.153800 0 253 27
-0.000000 58.735298 0.237300 0.533800 0.134400 0 253 27
-0.793500 58.611801 -0.022400 0.561500 0.129800 0 253 27
-0.605400 59.453602 0.006800 0.558900 0.156900 0 253 27
-1.340700 61.343498 -1.024900 0.599900 0.231700 254 254 254
-2.225300 60.301201 -1.334400 0.633200 0.187400 254 254 254
-2.209500 61.230499 -1.515000 0.636800 0.228100 254 254 254
-0.474100 61.294899 -0.607800 0.567800 0.227200 0 253 27
-0.785400 61.539799 -0.048800 0.562200 0.247600 0 253 27
-0.179900 61.274700 0.058500 0.542100 0.223900 0 253 27
-0.163800 60.672798 0.405300 0.538500 0.200900 0 253 27
-0.596000 60.268700 -0.255900 0.565100 0.185300 0 253 27
-0.474100 61.294899 -0.607800 0.567800 0.227200 0 253 27
-0.179900 61.274700 0.058500 0.542100 0.223900 0 253 27
-0.785400 61.539799 -0.048800 0.562200 0.247600 0 253 27
-1.792100 61.563202 -0.648200 0.603400 0.250800 0 253 27
-1.901400 62.898899 -1.262500 0.616100 0.287500 0 253 27
-0.000000 62.775902 -0.355700 0.533900 0.286800 0 253 27
-1.901400 62.898899 -1.262500 0.616100 0.287500 254 73 78
-1.792100 61.563202 -0.648200 0.603400 0.250800 254 68 73
-2.209500 61.230499 -1.515000 0.636800 0.228100 254 68 73
-2.505800 61.413601 -3.333900 0.700500 0.240200 254 68 73
-2.071800 58.080299 -1.837600 0.632000 0.089900 254 254 254
-2.361600 58.652599 -3.405400 0.691600 0.111600 254 254 254
-2.043500 58.694401 -1.722000 0.633000 0.119000 254 254 254
-2.361600 58.652599 -3.405400 0.691600 0.111600 254 254 254
-2.071800 58.080299 -1.837600 0.632000 0.089900 254 254 254
-1.480400 57.287800 -3.167400 0.679600 0.054000 254 254 254
-2.361600 58.652599 -3.405400 0.691600 0.111600 254 254 254
-2.484800 60.667999 -2.078300 0.658100 0.193000 254 254 254
-2.225300 60.301201 -1.334400 0.633200 0.187400 254 254 254
-2.043500 58.694401 -1.722000 0.633000 0.119000 254 254 254
-0.596000 60.268700 -0.255900 0.565100 0.185300 0 253 27
-0.605400 59.453602 0.006800 0.558900 0.156900 0 253 27
-0.793500 58.611801 -0.022400 0.561500 0.129800 0 253 27
-2.225300 60.301201 -1.334400 0.633200 0.187400 0 253 27
-0.793500 58.611801 -0.022400 0.561500 0.129800 254 68 73
-0.000000 58.735298 0.237300 0.533800 0.134400 254 68 73
-0.000000 57.320400 0.190300 0.533800 0.095300 254 68 73
-0.860300 57.339199 -0.345300 0.560600 0.087800 254 68 73
-2.361600 58.652599 -3.405400 0.691600 0.111600 254 254 254
-1.480400 57.287800 -3.167400 0.679600 0.054000 254 254 254
-1.507500 57.978802 -4.806700 0.740400 0.071600 254 254 254
-1.480400 57.287800 -3.167400 0.293800 0.962800 0 253 27
-0.509500 56.862801 -2.081200 0.308000 0.953500 0 253 27
-0.000000 54.522099 -2.187600 0.310700 0.919600 0 253 27
-1.435700 55.057400 -2.884500 0.286000 0.931400 0 254 27
-1.435700 55.057400 -2.884500 0.286000 0.931400 254 68 73
-2.321200 55.471001 -5.570800 0.259700 0.968000 254 68 73
-1.507500 57.978802 -4.806700 0.270100 0.982500 254 68 73
-1.480400 57.287800 -3.167400 0.293800 0.962800 254 68 73
-5.117200 15.490400 -9.679700 0.917300 0.220800 0 253 27
-1.456400 14.610600 -8.695100 0.949700 0.207500 0 253 27
-0.134100 16.169500 -9.174700 0.969900 0.225300 0 253 27
-0.134100 16.169500 -9.174700 0.732600 0.207100 254 254 254
-1.239800 14.644800 -6.465300 0.774100 0.204900 254 254 254
-1.716700 14.450400 -2.459200 0.808600 0.236100 254 254 254
-5.308800 13.910900 -3.738700 0.855000 0.218100 0 253 27
-6.069200 14.643000 -3.762300 0.859400 0.227800 0 253 27
-1.716700 14.450400 -2.459200 0.808600 0.236100 0 253 27
-1.766900 13.754900 -2.918700 0.809900 0.215800 0 253 27
-4.620900 14.945700 -8.516100 0.914400 0.215300 0 247 31
-5.117200 15.490400 -9.679700 0.917300 0.220800 2 205 68
-6.069200 14.643000 -3.762300 0.859400 0.227800 0 253 27
-5.308800 13.910900 -3.738700 0.855000 0.218100 0 253 27
-1.957400 20.620800 -1.211500 0.804700 0.286100 254 254 254
-2.189200 21.987900 -1.483700 0.804500 0.301600 254 254 254
-0.835600 22.853901 -8.210700 0.728900 0.301600 254 254 254
-0.899900 21.410400 -8.349400 0.726500 0.282100 254 254 254
-7.174300 32.815300 -5.167300 0.893300 0.414200 17 7 244
-4.970000 33.082802 -8.871900 0.938900 0.409500 18 0 252
-5.283200 35.952900 -7.814600 0.933900 0.441300 18 1 249
-6.542300 35.480598 -4.902800 0.897200 0.442800 15 32 221
-5.598500 31.822901 -1.404300 0.847900 0.413200 0 240 37
-7.174300 32.815300 -5.167300 0.893300 0.414200 17 7 244
-6.542300 35.480598 -4.902800 0.897200 0.442800 15 32 221
-4.685700 36.664101 -1.616400 0.239300 0.661600 0 250 28
-3.798500 31.552500 -0.388900 0.257800 0.582200 0 253 27
-5.598500 31.822901 -1.404300 0.231700 0.582200 0 240 37
-2.225300 60.301201 -1.334400 0.633200 0.187400 254 254 254
-2.484800 60.667999 -2.078300 0.658100 0.193000 254 254 254
-2.209500 61.230499 -1.515000 0.636800 0.228100 254 254 254
-8.927200 49.128502 -4.128200 0.409800 0.916400 254 68 73
-9.508400 52.403099 -3.672700 0.469900 0.916400 254 68 73
-8.184300 53.108700 -3.320400 0.469900 0.942000 254 68 73
-7.813100 49.342701 -3.886900 0.407700 0.942000 254 68 73
-8.184300 53.108700 -3.320400 0.469900 0.942000 0 253 27
-9.508400 52.403099 -3.672700 0.469900 0.916400 0 253 27
-9.827700 52.989700 -7.188500 0.526400 0.916400 0 253 27
-8.747800 53.770199 -7.353300 0.528600 0.942000 0 253 27
-8.747800 53.770199 -7.353300 0.528600 0.942000 0 253 27
-6.775800 50.206501 -7.534500 0.590800 0.942000 0 253 27
-7.252500 54.524502 -7.615000 0.533200 0.977800 0 254 27
-8.927200 49.128502 -4.128200 0.409800 0.916400 0 253 27
-14.977100 45.689201 -4.821000 0.400900 0.803100 18 0 253
-15.636800 49.715099 -4.015700 0.469900 0.803100 29 188 60
-9.508400 52.403099 -3.672700 0.469900 0.916400 0 253 27
-1.435700 55.057400 -2.884500 0.286000 0.931400 0 253 27
-3.773800 51.093601 -1.034300 0.256800 0.864400 0 253 27
-6.624100 53.529800 -2.653700 0.210400 0.900400 0 253 27
-7.252500 54.524502 -7.615000 0.180600 0.964800 0 253 27
-2.321200 55.471001 -5.570800 0.259700 0.968000 0 253 27
-1.435700 55.057400 -2.884500 0.286000 0.931400 0 253 27
-7.252500 54.524502 -7.615000 0.180600 0.964800 0 253 27
-2.209500 61.230499 -1.515000 0.636800 0.228100 254 254 254
-2.484800 60.667999 -2.078300 0.658100 0.193000 254 254 254
-2.505800 61.413601 -3.333900 0.704900 0.212700 254 254 254
-2.484800 60.667999 -2.078300 0.658100 0.193000 254 254 254
-2.361600 58.652599 -3.405400 0.691600 0.111600 254 254 254
-2.505800 61.413601 -3.333900 0.704900 0.212700 254 254 254
-2.209500 61.230499 -1.515000 0.636800 0.228100 254 68 73
-1.792100 61.563202 -0.648200 0.603400 0.250800 254 68 73
-1.340700 61.343498 -1.024900 0.599900 0.231700 254 68 73
-3.061600 3.537800 -3.461700 0.290200 0.071700 18 0 253
-1.553600 3.059500 -4.173500 0.275500 0.071900 18 0 253
-1.568700 1.981700 -0.627100 0.274000 0.039600 19 0 253
-3.735600 1.816900 0.228400 0.290200 0.030700 19 0 253
-0.626000 0.031700 -8.336200 0.238500 0.103000 0 254 27
-1.825200 -0.024100 0.601200 0.266200 0.023600 254 254 254
-1.568700 1.981700 -0.627100 0.274000 0.039600 254 254 254
-1.553600 3.059500 -4.173500 0.275500 0.071900 186 254 192
-1.825200 -0.024100 0.601200 0.783900 0.050100 0 254 27
-0.626000 0.031700 -8.336200 0.777900 0.139800 253 254 253
-1.712600 0.024900 -9.195700 0.765100 0.147100 254 254 254
-3.769300 -0.009000 1.132900 0.765800 0.040900 0 254 27
-1.712600 0.024900 -9.195700 0.925400 0.031900 254 68 73
-0.626000 0.031700 -8.336200 0.938600 0.031200 254 68 73
-1.239800 14.644800 -6.465300 0.974400 0.175600 254 68 73
-1.456400 14.610600 -8.695100 0.943400 0.175600 254 68 73
-1.568700 1.981700 -0.627100 0.274000 0.039600 19 0 253
-1.825200 -0.024100 0.601200 0.266200 0.023600 19 0 253
-3.769300 -0.009000 1.132900 0.289700 0.012400 19 0 253
-3.735600 1.816900 0.228400 0.290200 0.030700 19 0 253
-4.089400 2.633000 -5.031300 0.310400 0.073900 18 0 253
-5.390300 1.568200 -1.670300 0.308400 0.040400 18 0 253
-5.176800 -0.025000 -0.598300 0.313500 0.023800 18 0 253
-3.252600 0.001600 -8.591000 0.345300 0.097200 19 0 253
-3.769300 -0.009000 1.132900 0.289700 0.012400 18 0 253
-5.176800 -0.025000 -0.598300 0.313500 0.023800 18 0 253
-5.390300 1.568200 -1.670300 0.308400 0.040400 18 0 253
-3.735600 1.816900 0.228400 0.290200 0.030700 18 0 253
-5.390300 1.568200 -1.670300 0.308400 0.040400 18 0 253
-4.089400 2.633000 -5.031300 0.310400 0.073900 18 0 253
-3.061600 3.537800 -3.461700 0.290200 0.071700 18 0 253
-3.735600 1.816900 0.228400 0.290200 0.030700 18 0 253
-3.061600 3.537800 -3.461700 0.856300 0.067800 18 0 253
-4.089400 2.633000 -5.031300 0.873900 0.060000 18 0 253
-5.308800 13.910900 -3.738700 0.859000 0.175600 0 253 27
-1.766900 13.754900 -2.918700 0.824200 0.175600 0 253 27
-5.117200 15.490400 -9.679700 0.917300 0.220800 0 253 27
-4.620900 14.945700 -8.516100 0.914400 0.215300 0 253 27
-1.456400 14.610600 -8.695100 0.949700 0.207500 0 253 27
-1.456400 14.610600 -8.695100 0.746600 0.183800 254 254 254
-1.239800 14.644800 -6.465300 0.774100 0.204900 254 254 254
-0.134100 16.169500 -9.174700 0.732600 0.207100 254 254 254
-5.426000 21.341299 -8.132600 0.914200 0.282100 15 21 230
-5.317800 22.936800 -8.016200 0.916400 0.301600 18 0 252
-6.824000 22.193899 -3.251500 0.860400 0.301600 3 179 89
-6.827700 20.858999 -3.044800 0.858900 0.286100 0 231 44
-0.845100 29.891001 -9.498900 0.978500 0.369500 0 253 27
-5.595300 29.761600 -8.492500 0.927500 0.375900 0 253 27
-5.317800 22.936800 -8.016200 0.916400 0.301600 0 253 27
-0.835600 22.853901 -8.210700 0.964300 0.301600 0 253 27
-1.957400 20.620800 -1.211500 0.804700 0.286100 254 68 73
-6.827700 20.858999 -3.044800 0.858900 0.286100 232 61 86
-6.824000 22.193899 -3.251500 0.860400 0.301600 185 47 122
-2.189200 21.987900 -1.483700 0.804500 0.301600 254 68 73
-0.605400 59.453602 0.006800 0.558900 0.156900 254 68 73
-0.226300 59.631802 0.717000 0.537800 0.167300 254 68 73
-0.000000 59.375900 0.272700 0.533800 0.153800 254 68 73
-21.936399 43.055199 -3.733600 0.412700 0.674700 19 0 253
-23.265499 44.290199 -3.614200 0.431800 0.655600 19 0 253
-23.323000 46.228001 -3.425200 0.469900 0.655600 19 0 251
-22.348700 46.932201 -2.822400 0.469900 0.674700 20 0 250
-22.105101 44.119598 -7.074000 0.583100 0.674700 0 253 27
-23.337700 47.268200 -6.945000 0.530800 0.674700 0 253 27
-23.881300 46.267799 -5.995500 0.521800 0.655600 0 253 27
-23.273100 44.479099 -6.170500 0.556600 0.655600 0 253 27
-22.348700 46.932201 -2.822400 0.469900 0.674700 18 0 249
-23.323000 46.228001 -3.425200 0.469900 0.655600 18 0 251
-23.881300 46.267799 -5.995500 0.521800 0.655600 12 63 193
-23.337700 47.268200 -6.945000 0.530800 0.674700 2 175 92
-21.936399 43.055199 -3.733600 0.412700 0.674700 18 0 253
-22.105101 44.119598 -7.074000 0.362600 0.674700 18 0 253
-23.273100 44.479099 -6.170500 0.386800 0.655600 18 0 253
-23.265499 44.290199 -3.614200 0.431800 0.655600 18 0 253
-23.323000 46.228001 -3.425200 0.469900 0.655600 19 0 251
-23.265499 44.290199 -3.614200 0.431800 0.655600 19 0 253
-24.446100 44.099098 -3.039500 0.444100 0.624200 19 0 253
-24.935400 45.742901 -3.288800 0.469900 0.624200 20 0 251
-23.273100 44.479099 -6.170500 0.556600 0.655600 0 253 27
-23.881300 46.267799 -5.995500 0.521800 0.655600 0 253 27
-25.982700 45.641201 -5.974700 0.517100 0.624200 0 253 27
-25.718901 44.407902 -5.989100 0.533000 0.624200 0 253 27
-23.881300 46.267799 -5.995500 0.521800 0.655600 64 24 202
-23.323000 46.228001 -3.425200 0.469900 0.655600 19 0 251
-24.935400 45.742901 -3.288800 0.469900 0.624200 20 0 251
-25.982700 45.641201 -5.974700 0.517100 0.624200 65 29 197
-23.265499 44.290199 -3.614200 0.431800 0.655600 0 251 27
-23.273100 44.479099 -6.170500 0.386800 0.655600 0 253 27
-25.718901 44.407902 -5.989100 0.398000 0.624200 0 253 27
-24.446100 44.099098 -3.039500 0.444100 0.624200 53 205 30
-3.798500 31.552500 -0.388900 0.257800 0.582200 57 208 35
-4.685700 36.664101 -1.616400 0.239300 0.661600 0 250 28
-0.000000 37.009800 0.550700 0.310700 0.661600 172 124 55
-0.000000 31.552500 0.128500 0.310700 0.582200 203 101 62
-27.058001 43.733101 -1.471100 0.783900 0.527900 19 0 253
-26.775499 43.007000 -1.492900 0.799700 0.523000 19 0 253
-27.637899 42.321201 -1.984400 0.780200 0.502700 19 0 253
-28.100901 44.177299 -2.470000 0.756100 0.537200 19 0 253
-27.102699 45.320202 -5.735100 0.706300 0.587600 0 253 27
-26.246300 42.901402 -5.383600 0.663100 0.553800 0 252 27
-25.718901 44.407902 -5.989100 0.674700 0.592000 0 253 27
-25.982700 45.641201 -5.974700 0.701400 0.609900 0 253 27
-24.935400 45.742901 -3.288800 0.774000 0.616500 20 0 251
-26.753901 45.398300 -2.858600 0.766000 0.574200 21 0 250
-27.102699 45.320202 -5.735100 0.706300 0.587600 69 22 201
-25.982700 45.641201 -5.974700 0.701400 0.609900 65 29 197
-24.446100 44.099098 -3.039500 0.815000 0.599300 254 254 254
-25.718901 44.407902 -5.989100 0.885900 0.607200 254 254 254
-26.246300 42.901402 -5.383600 0.880100 0.569900 254 254 254
-28.380600 42.330502 -3.056600 0.741600 0.498200 19 0 253
-28.697901 44.238201 -3.477500 0.737900 0.538900 20 0 252
-28.100901 44.177299 -2.470000 0.756100 0.537200 19 0 253
-27.637899 42.321201 -1.984400 0.780200 0.502700 19 0 253
-28.380600 42.330502 -3.056600 0.741600 0.498200 19 0 253
-28.292801 42.543098 -4.446800 0.704200 0.514300 19 0 253
-28.543800 44.178001 -4.651400 0.718600 0.545700 20 3 248
-28.697901 44.238201 -3.477500 0.737900 0.538900 20 0 252
-26.753901 45.398300 -2.858600 0.766000 0.574200 20 0 250
-28.100901 44.177299 -2.470000 0.756100 0.537200 19 0 253
-28.697901 44.238201 -3.477500 0.737900 0.538900 20 0 252
-24.935400 45.742901 -3.288800 0.774000 0.616500 20 0 251
-24.446100 44.099098 -3.039500 0.815000 0.599300 19 0 253
-25.587200 43.557701 -2.038700 0.806300 0.556900 19 0 253
-26.117701 44.487900 -2.198700 0.788200 0.565100 19 0 253
-24.446100 44.099098 -3.039500 0.815000 0.599300 254 68 73
-26.246300 42.901402 -5.383600 0.880100 0.569900 254 68 73
-25.491899 42.827301 -2.370100 0.813300 0.554500 254 68 73
-25.587200 43.557701 -2.038700 0.806300 0.556900 254 68 73
-26.753901 45.398300 -2.858600 0.766000 0.574200 21 0 250
-24.935400 45.742901 -3.288800 0.774000 0.616500 20 0 251
-26.117701 44.487900 -2.198700 0.788200 0.565100 19 0 253
-0.000000 31.552500 0.128500 0.310700 0.582200 0 253 27
-0.000000 24.132099 -0.356700 0.310700 0.472800 0 253 27
-3.463700 23.872801 -0.356700 0.261200 0.472800 0 253 27
-3.798500 31.552500 -0.388900 0.257800 0.582200 0 253 27
-2.225300 60.301201 -1.334400 0.633200 0.187400 0 253 27
-0.793500 58.611801 -0.022400 0.561500 0.129800 0 253 27
-2.043500 58.694401 -1.722000 0.633000 0.119000 0 253 27
-0.793500 58.611801 -0.022400 0.561500 0.129800 0 253 27
-0.860300 57.339199 -0.345300 0.560600 0.087800 0 253 27
-2.071800 58.080299 -1.837600 0.632000 0.089900 0 253 27
-2.043500 58.694401 -1.722000 0.633000 0.119000 0 253 27
-2.071800 58.080299 -1.837600 0.632000 0.089900 254 68 73
-0.860300 57.339199 -0.345300 0.560600 0.087800 254 68 73
-0.509500 56.862801 -2.081200 0.570500 0.026600 254 68 73
-1.480400 57.287800 -3.167400 0.631900 0.022800 254 68 73
-0.179900 61.274700 0.058500 0.542100 0.223900 0 254 27
-0.785400 61.539799 -0.048800 0.562200 0.247600 0 254 27
-0.000000 61.912998 -0.048000 0.533800 0.254400 0 254 27
-15.884600 46.520500 -7.855800 0.590800 0.782100 0 253 27
-14.885000 46.974701 -7.946000 0.590800 0.803100 0 253 27
-16.136200 50.023998 -7.546200 0.529500 0.803100 0 253 27
-17.208200 49.477699 -7.512200 0.531700 0.782100 0 253 27
-15.636800 49.715099 -4.015700 0.469900 0.803100 1 215 59
-16.810101 49.139900 -3.928800 0.469900 0.782100 5 158 110
-17.208200 49.477699 -7.512200 0.531700 0.782100 0 227 47
-16.136200 50.023998 -7.546200 0.529500 0.803100 0 244 34
-16.192200 44.960400 -4.877100 0.398600 0.782100 254 252 252
-14.977100 45.689201 -4.821000 0.400900 0.803100 254 202 204
-14.885000 46.974701 -7.946000 0.347800 0.803100 254 123 127
-15.884600 46.520500 -7.855800 0.347800 0.782100 254 212 213
-16.810101 49.139900 -3.928800 0.469900 0.782100 35 133 112
-15.636800 49.715099 -4.015700 0.469900 0.803100 25 190 59
-14.977100 45.689201 -4.821000 0.400900 0.803100 18 0 253
-16.192200 44.960400 -4.877100 0.398600 0.782100 18 0 253
-13.779500 47.417198 -7.715300 0.590800 0.828100 12 79 181
-8.756500 49.321098 -7.632900 0.590800 0.916400 0 250 29
-9.827700 52.989700 -7.188500 0.526400 0.916400 0 253 27
-14.989100 50.565300 -7.297200 0.526200 0.828100 0 249 29
-15.636800 49.715099 -4.015700 0.469900 0.803100 1 215 59
-16.136200 50.023998 -7.546200 0.529500 0.803100 0 244 34
-14.989100 50.565300 -7.297200 0.526200 0.828100 0 249 29
-13.779500 47.417198 -7.715300 0.347800 0.823100 254 70 75
-14.885000 46.974701 -7.946000 0.347800 0.803100 254 123 127
-14.977100 45.689201 -4.821000 0.400900 0.803100 254 202 204
-1.239800 14.644800 -6.465300 0.774100 0.204900 254 254 254
-1.766900 13.754900 -2.918700 0.809900 0.215800 254 254 254
-1.716700 14.450400 -2.459200 0.808600 0.236100 254 254 254
-26.117701 44.487900 -2.198700 0.788200 0.565100 19 0 253
-25.587200 43.557701 -2.038700 0.806300 0.556900 19 0 253
-26.775499 43.007000 -1.492900 0.799700 0.523000 19 0 253
-27.058001 43.733101 -1.471100 0.783900 0.527900 19 0 253
-25.587200 43.557701 -2.038700 0.806300 0.556900 19 0 253
-25.491899 42.827301 -2.370100 0.813300 0.554500 19 0 253
-27.637899 42.321201 -1.984400 0.816200 0.507300 19 0 253
-26.775499 43.007000 -1.492900 0.799700 0.523000 19 0 253
-26.117701 44.487900 -2.198700 0.788200 0.565100 19 0 253
-27.058001 43.733101 -1.471100 0.783900 0.527900 19 0 253
-28.100901 44.177299 -2.470000 0.756100 0.537200 19 0 253
-8.184300 53.108700 -3.320400 0.469900 0.942000 254 68 73
-6.624100 53.529800 -2.653700 0.469900 0.977800 254 68 73
-7.813100 49.342701 -3.886900 0.407700 0.942000 254 68 73
-8.747800 53.770199 -7.353300 0.528600 0.942000 0 253 27
-9.827700 52.989700 -7.188500 0.526400 0.916400 0 253 27
-8.756500 49.321098 -7.632900 0.590800 0.916400 0 253 27
-6.775800 50.206501 -7.534500 0.590800 0.942000 0 253 27
-28.543800 44.178001 -4.651400 0.718600 0.545700 20 3 248
-27.102699 45.320202 -5.735100 0.706300 0.587600 12 64 193
-26.753901 45.398300 -2.858600 0.766000 0.574200 20 0 250
-28.697901 44.238201 -3.477500 0.737900 0.538900 20 0 252
-26.246300 42.901402 -5.383600 0.880100 0.569900 0 252 27
-28.292801 42.543098 -4.446800 0.879400 0.523100 87 180 37
-28.380600 42.330502 -3.056600 0.853500 0.507000 242 73 67
-28.100901 44.177299 -2.470000 0.756100 0.537200 19 0 253
-26.753901 45.398300 -2.858600 0.766000 0.574200 21 0 250
-26.117701 44.487900 -2.198700 0.788200 0.565100 19 0 253
-1.712600 0.024900 -9.195700 0.765100 0.147100 19 0 253
-3.252600 0.001600 -8.591000 0.751000 0.138000 19 0 253
-5.176800 -0.025000 -0.598300 0.748300 0.055100 18 0 253
-3.769300 -0.009000 1.132900 0.765800 0.040900 18 0 253
-0.000000 61.912998 -0.048000 0.533800 0.254400 0 254 27
-0.785400 61.539799 -0.048800 0.562200 0.247600 0 254 27
-0.000000 62.775902 -0.355700 0.533900 0.286800 0 254 27
-0.340300 31.400700 -9.928000 0.694900 0.384200 254 254 254
-0.845100 29.891001 -9.498900 0.702700 0.368200 254 254 254
-0.425600 30.069099 -1.507500 0.785600 0.393300 254 254 254
-0.509500 56.862801 -2.081200 0.308000 0.953500 254 127 129
-0.509500 56.862801 -2.081200 0.570500 0.026600 0 253 27
-0.860300 57.339199 -0.345300 0.560600 0.087800 0 253 27
-0.000000 57.320400 0.190300 0.533800 0.095300 0 253 27
-0.000000 56.862801 -2.081200 0.533800 0.019000 0 253 27
-5.598500 31.822901 -1.404300 0.847900 0.413200 0 240 37
-6.824000 22.193899 -3.251500 0.860400 0.301600 3 179 89
-7.453900 29.910801 -4.780100 0.884800 0.385400 18 0 251
-6.824000 22.193899 -3.251500 0.860400 0.301600 3 179 89
-5.317800 22.936800 -8.016200 0.916400 0.301600 18 0 252
-5.595300 29.761600 -8.492500 0.927500 0.375900 18 0 253
-7.453900 29.910801 -4.780100 0.884800 0.385400 18 0 251
-3.798500 31.552500 -0.388900 0.824000 0.411400 0 253 27
-2.189200 21.987900 -1.483700 0.804500 0.301600 0 253 27
-6.824000 22.193899 -3.251500 0.860400 0.301600 3 179 89
-5.598500 31.822901 -1.404300 0.847900 0.413200 0 240 37
-0.340300 31.400700 -9.928000 0.986800 0.385200 0 253 27
-4.970000 33.082802 -8.871900 0.938900 0.409500 0 253 27
-5.595300 29.761600 -8.492500 0.927500 0.375900 0 253 27
-0.845100 29.891001 -9.498900 0.978500 0.369500 0 253 27
-0.835600 22.853901 -8.210700 0.728900 0.301600 254 254 254
-2.189200 21.987900 -1.483700 0.804500 0.301600 254 254 254
-0.425600 30.069099 -1.507500 0.785600 0.393300 254 254 254
-0.845100 29.891001 -9.498900 0.702700 0.368200 254 254 254
-2.162800 35.743500 -9.599900 0.972400 0.433600 0 253 27
-5.283200 35.952900 -7.814600 0.933900 0.441300 0 253 27
-4.970000 33.082802 -8.871900 0.938900 0.409500 0 253 27
-0.340300 31.400700 -9.928000 0.986800 0.385200 0 253 27
-5.283200 35.952900 -7.814600 0.142200 0.631800 18 1 249
-5.919200 37.619099 -4.570300 0.183400 0.661600 9 98 162
-6.542300 35.480598 -4.902800 0.182500 0.631800 15 32 221
-5.919200 37.619099 -4.570300 0.183400 0.661600 9 98 162
-4.685700 36.664101 -1.616400 0.239300 0.661600 0 250 28
-5.598500 31.822901 -1.404300 0.231700 0.582200 0 240 37
-6.542300 35.480598 -4.902800 0.182500 0.631800 15 32 221
-0.474100 61.294899 -0.607800 0.567800 0.227200 254 68 73
-0.596000 60.268700 -0.255900 0.565100 0.185300 254 68 73
-2.225300 60.301201 -1.334400 0.633200 0.187400 254 68 73
-1.340700 61.343498 -1.024900 0.599900 0.231700 254 68 73
-1.340700 61.343498 -1.024900 0.599900 0.231700 0 253 27
-1.792100 61.563202 -0.648200 0.603400 0.250800 0 253 27
-0.785400 61.539799 -0.048800 0.562200 0.247600 0 253 27
-0.474100 61.294899 -0.607800 0.567800 0.227200 0 253 27
-0.000000 45.235802 -8.516300 0.061600 0.762900 0 253 27
-5.495700 46.043098 -6.732400 0.140100 0.788400 0 252 27
-2.827600 38.171799 -8.088300 0.114700 0.661600 8 119 142
-0.000000 38.221600 -8.073300 0.073400 0.661600 0 240 38
-0.425600 30.069099 -1.507500 0.785600 0.393300 254 254 254
-2.189200 21.987900 -1.483700 0.804500 0.301600 254 254 254
-3.798500 31.552500 -0.388900 0.824000 0.411400 254 254 254
-0.000000 31.547001 -9.939100 0.694200 0.388200 254 68 73
-0.340300 31.400700 -9.928000 0.694900 0.384200 254 68 73
-0.425600 30.069099 -1.507500 0.785600 0.393300 254 68 73
-0.000000 30.215401 -1.522000 0.785000 0.398100 254 68 73
-21.061199 44.183601 -7.611200 0.590800 0.698800 18 0 253
-15.884600 46.520500 -7.855800 0.590800 0.782100 17 5 246
-17.208200 49.477699 -7.512200 0.531700 0.782100 0 227 47
-22.585199 48.327702 -7.594400 0.533600 0.698800 0 239 38
-22.348700 46.932201 -2.822400 0.469900 0.674700 18 0 249
-23.337700 47.268200 -6.945000 0.530800 0.674700 2 175 92
-22.585199 48.327702 -7.594400 0.533600 0.698800 0 239 38
-21.061199 44.183601 -7.611200 0.347800 0.693400 0 253 27
-22.105101 44.119598 -7.074000 0.362600 0.674700 0 253 27
-21.936399 43.055199 -3.733600 0.412700 0.674700 0 253 27
-0.340300 31.400700 -9.928000 0.986800 0.385200 0 253 27
-0.000000 31.547001 -9.939100 0.990600 0.386300 0 253 27
-0.000000 35.795200 -9.599900 0.995500 0.431600 0 253 27
-2.162800 35.743500 -9.599900 0.972400 0.433600 0 253 27
-5.919200 37.619099 -4.570300 0.183400 0.661600 9 98 162
-5.283200 35.952900 -7.814600 0.142200 0.631800 18 1 249
-2.162800 35.743500 -9.599900 0.096700 0.631800 16 28 225
-2.827600 38.171799 -8.088300 0.114700 0.661600 8 119 142
-28.543800 44.178001 -4.651400 0.718600 0.545700 77 187 34
-28.292801 42.543098 -4.446800 0.704200 0.514300 87 180 37
-26.246300 42.901402 -5.383600 0.663100 0.553800 0 252 27
-27.102699 45.320202 -5.735100 0.706300 0.587600 0 253 27
-25.491899 42.827301 -2.370100 0.813300 0.554500 190 254 195
-28.380600 42.330502 -3.056600 0.853500 0.507000 242 254 242
-27.637899 42.321201 -1.984400 0.816200 0.507300 254 254 254
-26.246300 42.901402 -5.383600 0.880100 0.569900 0 254 27
-28.380600 42.330502 -3.056600 0.853500 0.507000 242 254 242
-25.491899 42.827301 -2.370100 0.813300 0.554500 190 254 195
-2.162800 35.743500 -9.599900 0.096700 0.631800 0 253 27
-0.000000 35.795200 -9.599900 0.068300 0.631800 0 253 27
-0.000000 38.221600 -8.073300 0.073400 0.661600 0 253 27
-2.827600 38.171799 -8.088300 0.114700 0.661600 0 253 27
-0.706900 62.538601 -0.289700 0.409100 0.538600 0 253 27
-1.838200 62.255798 -0.802600 0.430000 0.507000 0 253 27
-1.901400 63.532299 -1.247600 0.451500 0.531400 0 253 27
-0.672300 63.485901 -0.421800 0.426300 0.552700 0 253 27
-1.901400 63.532299 -1.247600 0.451500 0.531400 0 253 27
-1.838200 62.255798 -0.802600 0.430000 0.507000 0 253 27
-3.194200 60.597198 -3.460400 0.492000 0.451400 0 253 27
-2.758700 63.532299 -3.348800 0.499700 0.518700 0 253 27
-2.758700 63.532299 -3.348800 0.499700 0.518700 0 253 27
-3.194200 60.597198 -3.460400 0.492000 0.451400 0 253 27
-3.446000 60.597198 -5.980300 0.552100 0.445900 0 253 27
-3.010600 63.532299 -5.868700 0.554200 0.511800 0 253 27
-3.194200 60.597198 -3.460400 0.492000 0.451400 0 253 27
-1.838200 62.255798 -0.802600 0.430000 0.507000 0 253 27
-2.336800 60.597198 -1.072500 0.434100 0.460700 0 253 27
-2.130500 53.628601 -1.359200 0.416700 0.297200 0 253 27
-4.088800 54.879799 -3.460400 0.486800 0.316000 0 253 27
-3.194200 60.597198 -3.460400 0.492000 0.451400 0 253 27
-2.336800 60.597198 -1.072500 0.434100 0.460700 0 253 27
-4.088800 54.879799 -3.460400 0.486800 0.316000 0 253 27
-4.340700 55.234299 -6.210400 0.542400 0.331500 0 254 27
-3.446000 60.597198 -5.980300 0.552100 0.445900 0 253 27
-3.194200 60.597198 -3.460400 0.492000 0.451400 0 253 27
-3.010600 63.532299 -5.868700 0.554200 0.511800 0 253 27
-3.446000 60.597198 -5.980300 0.552100 0.445900 0 253 27
-2.517200 60.597198 -7.879200 0.601000 0.450200 0 253 27
-1.932100 63.532299 -7.311200 0.591100 0.519300 0 253 27
-3.446000 60.597198 -5.980300 0.552100 0.445900 0 253 27
-4.340700 55.234299 -6.210400 0.542400 0.331500 0 254 27
-2.990300 54.496300 -8.246000 0.608400 0.297700 0 253 27
-2.517200 60.597198 -7.879200 0.601000 0.450200 0 253 27
-1.932100 63.532299 -7.311200 0.591100 0.519300 0 253 27
-2.517200 60.597198 -7.879200 0.601000 0.450200 0 253 27
-0.000000 60.597198 -8.812800 0.661800 0.464200 0 253 27
-0.000000 63.532299 -8.174500 0.634800 0.537700 0 253 27
-2.990300 54.496300 -8.246000 0.608400 0.297700 0 253 27
-0.000000 54.050800 -8.782700 0.682300 0.308600 0 253 27
-0.000000 60.597198 -8.812800 0.661800 0.464200 0 253 27
-2.517200 60.597198 -7.879200 0.601000 0.450200 0 253 27
-0.672300 63.485901 -0.421800 0.426300 0.552700 0 253 27
-1.901400 63.532299 -1.247600 0.451500 0.531400 0 253 27
-1.171400 65.057899 -2.205500 0.482000 0.564300 0 253 27
-1.901400 63.532299 -1.247600 0.451500 0.531400 0 253 27
-2.758700 63.532299 -3.348800 0.499700 0.518700 0 253 27
-1.795600 65.057899 -4.806100 0.538600 0.556700 0 253 27
-1.171400 65.057899 -2.205500 0.482000 0.564300 0 253 27
-2.758700 63.532299 -3.348800 0.499700 0.518700 0 253 27
-3.010600 63.532299 -5.868700 0.554200 0.511800 0 253 27
-1.795600 65.057899 -4.806100 0.538600 0.556700 0 253 27
-3.010600 63.532299 -5.868700 0.554200 0.511800 0 253 27
-1.932100 63.532299 -7.311200 0.591100 0.519300 0 254 27
-0.000000 65.057899 -6.421400 0.588900 0.582100 0 253 27
-1.795600 65.057899 -4.806100 0.538600 0.556700 0 253 27
-1.932100 63.532299 -7.311200 0.591100 0.519300 0 254 27
-0.000000 63.532299 -8.174500 0.634800 0.537700 0 253 27
-0.000000 65.057899 -6.421400 0.588900 0.582100 0 253 27
-1.171400 65.057899 -2.205500 0.482000 0.564300 0 253 27
-1.795600 65.057899 -4.806100 0.538600 0.556700 0 253 27
-0.000000 65.560898 -4.058400 0.523700 0.603300 0 253 27
-1.795600 65.057899 -4.806100 0.538600 0.556700 0 254 27
-0.000000 65.057899 -6.421400 0.588900 0.582100 0 254 27
-0.000000 65.560898 -4.058400 0.523700 0.603300 0 254 27
-0.672300 63.485901 -0.421800 0.426300 0.552700 0 254 27
-1.171400 65.057899 -2.205500 0.482000 0.564300 0 254 27
--1.171400 65.057899 -2.205500 0.466700 0.607600 0 254 27
--0.672300 63.485901 -0.421800 0.416100 0.581700 0 254 27
-0.706900 62.538601 -0.289700 0.409100 0.538600 0 254 27
-0.672300 63.485901 -0.421800 0.426300 0.552700 0 254 27
-0.000000 62.538601 -0.140300 0.398200 0.559100 0 254 27
-0.672300 63.485901 -0.421800 0.426300 0.552700 0 254 27
--0.672300 63.485901 -0.421800 0.416100 0.581700 0 254 27
-0.000000 62.538601 -0.140300 0.398200 0.559100 0 254 27
-2.130500 53.628601 -1.359200 0.416700 0.297200 0 253 27
-2.336800 60.597198 -1.072500 0.434100 0.460700 0 253 27
-1.393700 60.597198 -3.164700 0.380300 0.463400 0 253 27
-1.187300 53.628601 -3.164700 0.369000 0.300200 0 253 27
--0.706900 62.538601 -0.289700 0.409100 0.538600 0 254 27
--0.672300 63.485901 -0.421800 0.426300 0.552800 0 254 27
--1.901400 63.532299 -1.247600 0.451500 0.531500 0 254 27
--1.838200 62.255798 -0.802600 0.430000 0.507100 0 254 27
--1.901400 63.532299 -1.247600 0.451500 0.531500 0 254 27
--2.758700 63.532299 -3.348800 0.499700 0.518800 0 254 27
--3.194200 60.597198 -3.460400 0.492000 0.451500 0 254 27
--1.838200 62.255798 -0.802600 0.430000 0.507100 0 254 27
--2.758700 63.532299 -3.348800 0.499700 0.518800 0 254 27
--3.010600 63.532299 -5.868700 0.554200 0.511900 0 254 27
--3.446000 60.597198 -5.980300 0.552100 0.445900 0 254 27
--3.194200 60.597198 -3.460400 0.492000 0.451500 0 254 27
--3.194200 60.597198 -3.460400 0.492000 0.451500 0 254 27
--2.336800 60.597198 -1.072500 0.434000 0.460800 0 254 27
--1.838200 62.255798 -0.802600 0.430000 0.507100 0 254 27
--2.130500 53.628601 -1.359200 0.416600 0.297300 0 253 27
--2.336800 60.597198 -1.072500 0.434000 0.460800 0 254 27
--3.194200 60.597198 -3.460400 0.492000 0.451500 0 254 27
--4.088800 54.879799 -3.460400 0.486700 0.316100 0 253 27
--4.088800 54.879799 -3.460400 0.486700 0.316100 0 253 27
--3.194200 60.597198 -3.460400 0.492000 0.451500 0 253 27
--3.446000 60.597198 -5.980300 0.552100 0.445900 0 253 27
--4.340700 55.234299 -6.210400 0.542400 0.331500 0 254 27
--3.010600 63.532299 -5.868700 0.554200 0.511900 0 254 27
--1.932100 63.532299 -7.311200 0.591100 0.519300 0 254 27
--2.517200 60.597198 -7.879200 0.601000 0.450300 0 254 27
--3.446000 60.597198 -5.980300 0.552100 0.445900 0 254 27
--3.446000 60.597198 -5.980300 0.552100 0.445900 0 254 27
--2.517200 60.597198 -7.879200 0.601000 0.450300 0 254 27
--2.990300 54.496300 -8.246000 0.608300 0.297700 0 254 27
--4.340700 55.234299 -6.210400 0.542400 0.331500 0 254 27
--1.932100 63.532299 -7.311200 0.591100 0.519300 0 254 27
-0.000000 63.532299 -8.174500 0.634800 0.537700 0 254 27
-0.000000 60.597198 -8.812800 0.661800 0.464200 0 254 27
--2.517200 60.597198 -7.879200 0.601000 0.450300 0 254 27
--2.990300 54.496300 -8.246000 0.608300 0.297700 0 254 27
--2.517200 60.597198 -7.879200 0.601000 0.450300 0 254 27
-0.000000 60.597198 -8.812800 0.661800 0.464200 0 254 27
-0.000000 54.050800 -8.782700 0.682300 0.308600 0 254 27
--0.672300 63.485901 -0.421800 0.426300 0.552800 0 254 27
--1.171400 65.057899 -2.205500 0.482000 0.564400 0 254 27
--1.901400 63.532299 -1.247600 0.451500 0.531500 0 254 27
--1.901400 63.532299 -1.247600 0.451500 0.531500 0 254 27
--1.171400 65.057899 -2.205500 0.482000 0.564400 0 254 27
--1.795600 65.057899 -4.806100 0.538600 0.556700 0 254 27
--2.758700 63.532299 -3.348800 0.499700 0.518800 0 254 27
--2.758700 63.532299 -3.348800 0.499700 0.518800 0 254 27
--1.795600 65.057899 -4.806100 0.538600 0.556700 0 254 27
--3.010600 63.532299 -5.868700 0.554200 0.511900 0 254 27
--3.010600 63.532299 -5.868700 0.554200 0.511900 0 254 27
--1.795600 65.057899 -4.806100 0.538600 0.556700 0 254 27
-0.000000 65.057899 -6.421400 0.589000 0.582100 0 254 27
--1.932100 63.532299 -7.311200 0.591100 0.519300 0 254 27
--1.932100 63.532299 -7.311200 0.591100 0.519300 0 254 27
-0.000000 65.057899 -6.421400 0.589000 0.582100 0 254 27
-0.000000 63.532299 -8.174500 0.634800 0.537700 0 254 27
--1.171400 65.057899 -2.205500 0.482000 0.564400 0 254 27
-0.000000 65.560898 -4.058400 0.523700 0.603400 0 254 27
--1.795600 65.057899 -4.806100 0.538600 0.556700 0 254 27
--1.795600 65.057899 -4.806100 0.538600 0.556700 0 254 27
-0.000000 65.560898 -4.058400 0.523700 0.603400 0 254 27
-0.000000 65.057899 -6.421400 0.589000 0.582100 0 254 27
--1.171400 65.057899 -2.205500 0.466700 0.607600 0 254 27
-1.171400 65.057899 -2.205500 0.482000 0.564300 0 254 27
-0.000000 65.560898 -4.058400 0.523700 0.603300 0 254 27
--0.706900 62.538601 -0.289700 0.409100 0.538600 0 254 27
-0.000000 62.538601 -0.140300 0.398200 0.559200 0 254 27
--0.672300 63.485901 -0.421800 0.426300 0.552800 0 254 27
--2.130500 53.628601 -1.359200 0.416600 0.297300 164 133 56
--1.187300 53.628601 -3.164700 0.369000 0.300300 209 100 64
--1.393700 60.597198 -3.164700 0.380200 0.463500 254 254 254
--2.336800 60.597198 -1.072500 0.434000 0.460800 254 254 254
-8.704300 24.905701 -6.036500 0.967100 0.466200 0 253 27
-7.984800 25.127701 -6.177400 0.966400 0.464600 0 253 27
-7.649900 27.558001 -5.856100 0.993500 0.506600 0 253 27
-8.503900 27.435900 -5.670300 0.976600 0.507100 0 253 27
-6.463600 36.223400 -3.704900 0.962000 0.710700 9 100 160
-5.778000 35.994701 -1.773100 0.922200 0.717000 0 231 44
-7.451900 27.210300 -3.504400 0.930000 0.516400 18 2 248
-8.503900 27.435900 -5.670300 0.976600 0.507100 18 0 253
-5.115000 35.782600 -2.051700 0.916000 0.725700 0 241 37
-6.597900 27.332300 -3.690200 0.913000 0.515500 16 16 234
-7.451900 27.210300 -3.504400 0.930000 0.516400 18 2 248
-5.778000 35.994701 -1.773100 0.922200 0.717000 0 231 44
-5.743400 36.019600 -3.995900 0.971100 0.718900 0 253 27
-6.463600 36.223400 -3.704900 0.962000 0.710700 0 253 27
-8.503900 27.435900 -5.670300 0.976600 0.507100 0 253 27
-7.649900 27.558001 -5.856100 0.993500 0.506600 0 253 27
-7.451900 27.210300 -3.504400 0.930000 0.516400 21 0 248
-6.597900 27.332300 -3.690200 0.913000 0.515500 35 1 237
-7.984800 25.127701 -6.177400 0.966400 0.464600 19 0 253
-8.704300 24.905701 -6.036500 0.967100 0.466200 19 0 253
-7.451900 27.210300 -3.504400 0.930000 0.516400 18 2 248
-8.704300 24.905701 -6.036500 0.967100 0.466200 18 0 253
-8.503900 27.435900 -5.670300 0.976600 0.507100 18 0 253
-6.463600 36.223400 -3.704900 0.962000 0.710700 254 68 73
-5.743400 36.019600 -3.995900 0.971100 0.718900 254 68 73
-5.115000 35.782600 -2.051700 0.916000 0.725700 254 68 73
-5.778000 35.994701 -1.773100 0.922200 0.717000 254 68 73
-4.513000 55.007702 -5.909800 0.935300 0.759300 0 253 27
-4.291100 55.098900 -5.871800 0.932300 0.755300 0 253 27
-4.207800 55.799599 -6.651700 0.967500 0.768900 0 253 27
-4.871900 55.799599 -6.765400 0.957200 0.775300 0 253 27
-2.904000 62.455601 -5.700500 0.954300 0.968000 0 253 27
-2.764700 62.455601 -4.128400 0.909900 0.975800 0 253 27
-4.736600 55.799599 -5.153900 0.919700 0.781300 0 253 27
-4.871900 55.799599 -6.765400 0.957200 0.775300 0 253 27
-2.764700 62.455601 -4.128400 0.909900 0.975800 0 253 27
-4.072400 55.799599 -5.040200 0.904100 0.777700 0 253 27
-4.736600 55.799599 -5.153900 0.919700 0.781300 0 253 27
-2.904000 62.455601 -5.700500 0.954300 0.968000 0 253 27
-4.871900 55.799599 -6.765400 0.957200 0.775300 0 253 27
-4.207800 55.799599 -6.651700 0.967500 0.768900 0 253 27
-4.736600 55.799599 -5.153900 0.919700 0.781300 254 68 73
-4.072400 55.799599 -5.040200 0.904100 0.777700 254 68 73
-4.291100 55.098900 -5.871800 0.932300 0.755300 254 68 73
-4.513000 55.007702 -5.909800 0.935300 0.759300 254 68 73
-4.736600 55.799599 -5.153900 0.919700 0.781300 0 253 27
-4.513000 55.007702 -5.909800 0.935300 0.759300 0 253 27
-4.871900 55.799599 -6.765400 0.957200 0.775300 0 253 27
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meshes/ply/NoNormal_UVs_NoColors.ply b/src/tests/evas/meshes/ply/NoNormal_UVs_NoColors.ply
deleted file mode 100644
index ffa53101bb..0000000000
--- a/src/tests/evas/meshes/ply/NoNormal_UVs_NoColors.ply
+++ /dev/null
@@ -1,1678 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-property float s
-property float t
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600 0.094400 0.185800
--2.020300 14.610600 -8.278800 0.060000 0.185800
--1.712600 0.024900 -9.195700 0.089900 0.023200
--3.252600 0.001600 -8.591000 0.107400 0.025300
--4.649800 14.945700 -8.785600 0.094400 0.185800
--3.252600 0.001600 -8.591000 0.107400 0.025300
--4.089400 2.633000 -5.031300 0.145000 0.057700
--5.308800 13.910900 -3.738700 0.154100 0.185800
--1.553600 3.059500 -4.173500 0.181500 0.058600
--1.766900 13.754900 -2.918700 0.193300 0.185800
--3.061600 3.537800 -3.461700 0.164000 0.067400
--1.553600 3.059500 -4.173500 0.181500 0.058600
--0.626000 0.031700 -8.336200 0.220100 0.017000
--0.971400 14.644800 -6.706400 0.225200 0.185800
--1.766900 13.754900 -2.918700 0.193300 0.185800
--5.495700 46.043098 -6.732400 0.139900 0.788400
--2.827600 38.171799 -8.088300 0.114500 0.661600
--5.919200 37.619099 -4.570300 0.183200 0.661600
--6.029500 46.188801 -3.956000 0.183300 0.792100
--4.685700 36.664101 -1.616400 0.239100 0.661600
--4.298500 47.001099 -0.058900 0.249300 0.802400
--6.029500 46.188801 -3.956000 0.183300 0.792100
--5.919200 37.619099 -4.570300 0.183200 0.661600
--6.775800 50.206501 -7.534500 0.134100 0.852600
--7.252500 54.524502 -7.615000 0.126100 0.913200
-0.000000 53.738098 -8.986800 0.028100 0.877800
-0.000000 50.037800 -9.413700 0.041800 0.827300
--7.252500 54.524502 -7.615000 0.812300 0.981700
--8.747800 53.770199 -7.353300 0.807700 0.944900
--8.184300 53.108700 -3.320400 0.746000 0.944900
--6.624100 53.529800 -2.653700 0.746000 0.986600
--9.827700 52.989700 -7.188500 0.805500 0.922700
--14.989100 50.565300 -7.297200 0.805300 0.834400
--15.636800 49.715099 -4.015700 0.746000 0.809400
--9.508400 52.403099 -3.672700 0.746000 0.922700
-0.000000 37.009800 0.550700 0.310700 0.661600
-0.000000 47.287498 1.094200 0.310700 0.805700
--4.298500 47.001099 -0.058900 0.249300 0.802400
--4.685700 36.664101 -1.616400 0.239100 0.661600
-0.000000 53.738098 -8.986800 0.028100 0.877800
--7.252500 54.524502 -7.615000 0.126100 0.913200
--2.321200 55.471001 -5.570800 0.053700 0.941000
-0.000000 55.950600 -7.250100 0.022400 0.916300
--6.624100 53.529800 -2.653700 0.210200 0.900400
--7.813100 49.342701 -3.886900 0.181000 0.844200
--6.029500 46.188801 -3.956000 0.183300 0.792100
--3.773800 51.093601 -1.034300 0.256600 0.864400
--6.029500 46.188801 -3.956000 0.183300 0.792100
--4.298500 47.001099 -0.058900 0.249300 0.802400
--3.773800 51.093601 -1.034300 0.256600 0.864400
-0.000000 50.880199 0.110000 0.310700 0.860500
--3.773800 51.093601 -1.034300 0.256600 0.864400
--4.298500 47.001099 -0.058900 0.249300 0.802400
-0.000000 47.287498 1.094200 0.310700 0.805700
--16.136200 50.023998 -7.546200 0.808600 0.809400
--14.989100 50.565300 -7.297200 0.805300 0.834400
--13.779500 47.417198 -7.715300 0.879500 0.834400
--14.885000 46.974701 -7.946000 0.879500 0.809400
--13.779500 47.417198 -7.715300 0.626900 0.829400
--8.756500 49.321098 -7.632900 0.626900 0.922700
--8.927200 49.128502 -4.128200 0.688900 0.922700
--14.977100 45.689201 -4.821000 0.680000 0.809400
--17.208200 49.477699 -7.512200 0.810800 0.788400
--22.585199 48.327702 -7.594400 0.812700 0.705100
--22.348700 46.932201 -2.822400 0.746000 0.680200
--16.810101 49.139900 -3.928800 0.746000 0.788400
--21.936399 43.055199 -3.733600 0.691800 0.680200
--16.192200 44.960400 -4.877100 0.677700 0.788400
--16.810101 49.139900 -3.928800 0.746000 0.788400
--22.348700 46.932201 -2.822400 0.746000 0.680200
--22.105101 44.119598 -7.074000 0.862200 0.680200
--23.337700 47.268200 -6.945000 0.809900 0.680200
--22.585199 48.327702 -7.594400 0.812700 0.705100
--21.061199 44.183601 -7.611200 0.879500 0.705100
--15.884600 46.520500 -7.855800 0.626900 0.788400
--16.192200 44.960400 -4.877100 0.677700 0.788400
--21.936399 43.055199 -3.733600 0.691800 0.680200
--21.061199 44.183601 -7.611200 0.626900 0.699700
--5.598500 31.822901 -1.405400 0.185400 0.436500
--7.174300 32.815300 -5.168000 0.136400 0.440500
--7.453900 29.910801 -4.782000 0.143900 0.408700
--4.970000 33.082802 -8.871300 0.086900 0.436600
--5.595300 29.761600 -8.491100 0.097300 0.399700
--7.453900 29.910801 -4.782000 0.143900 0.408700
--7.174300 32.815300 -5.168000 0.136400 0.440500
--6.827700 20.858999 -3.051400 0.166500 0.297500
--5.426000 21.341299 -8.131100 0.106600 0.297500
--6.194700 19.576300 -3.492500 0.163400 0.285600
--0.835600 22.853901 -8.203000 0.053300 0.313700
--0.899900 21.410400 -8.342700 0.054900 0.297500
--5.426000 21.341299 -8.131100 0.106600 0.297500
--5.317800 22.936800 -8.014600 0.105500 0.313700
--0.899900 21.410400 -8.342700 0.307200 0.297500
--1.957400 20.620800 -1.217700 0.224300 0.297500
--1.853000 19.164200 -1.385300 0.221600 0.281000
--6.194700 19.576300 -3.492500 0.163400 0.285600
--1.853000 19.164200 -1.385300 0.221600 0.281000
--1.957400 20.620800 -1.217700 0.224300 0.297500
--6.827700 20.858999 -3.051400 0.166500 0.297500
--5.259600 15.490400 -9.599400 0.090700 0.228600
--5.426000 21.341299 -8.131100 0.106600 0.297500
--0.899900 21.410400 -8.342700 0.054900 0.297500
--0.294400 16.169500 -7.962700 0.039600 0.241800
--0.294400 16.169500 -7.962700 0.282300 0.223700
--0.899900 21.410400 -8.342700 0.307200 0.297500
--1.853000 19.164200 -1.385300 0.221600 0.281000
--1.221800 14.450400 -2.004100 0.220300 0.236900
--1.853000 19.164200 -1.385300 0.221600 0.281000
--6.194700 19.576300 -3.492500 0.163400 0.285600
--6.498700 14.643000 -4.000600 0.151700 0.232900
--1.221800 14.450400 -2.004100 0.220300 0.236900
--6.498700 14.643000 -4.000600 0.151700 0.232900
--6.194700 19.576300 -3.492500 0.163400 0.285600
--5.426000 21.341299 -8.131100 0.106600 0.297500
--5.259600 15.490400 -9.599400 0.090700 0.228600
--7.813100 49.342701 -3.886900 0.181000 0.844200
--6.775800 50.206501 -7.534500 0.134100 0.852600
--5.495700 46.043098 -6.732400 0.139900 0.788400
--6.029500 46.188801 -3.956000 0.183300 0.792100
--8.756500 49.321098 -7.632900 0.626900 0.922700
--6.775800 50.206501 -7.534500 0.626900 0.944900
--7.813100 49.342701 -3.886900 0.686800 0.944900
--8.927200 49.128502 -4.128200 0.688900 0.922700
--5.495700 46.043098 -6.732400 0.139900 0.788400
--6.775800 50.206501 -7.534500 0.134100 0.852600
-0.000000 50.037800 -9.413700 0.041800 0.827300
-0.000000 45.235802 -8.516300 0.061400 0.762800
--3.773800 51.093601 -1.034300 0.256600 0.864400
-0.000000 50.880199 0.110000 0.310700 0.860500
-0.000000 54.522099 -2.187600 0.310700 0.919600
--1.435700 55.057400 -2.884500 0.285800 0.931400
--0.163800 60.672798 0.405300 0.529100 0.200900
--0.596000 60.268700 -0.255900 0.502600 0.185300
--0.605400 59.453602 0.006800 0.508800 0.156900
--0.226300 59.631802 0.717000 0.529800 0.167300
-0.000000 59.375900 0.272700 0.533800 0.153800
--0.605400 59.453602 0.006800 0.508800 0.156900
--0.793500 58.611801 -0.022400 0.506200 0.129800
-0.000000 58.735298 0.237300 0.533800 0.134400
--1.340700 61.343498 -1.024900 0.467800 0.231800
--2.209500 61.230499 -1.515000 0.430900 0.227000
--2.225300 60.301201 -1.334400 0.434400 0.187400
--0.474100 61.294899 -0.607800 0.499900 0.227200
--0.179900 61.274700 0.058500 0.525600 0.223900
--0.785400 61.539799 -0.048800 0.505500 0.247600
--0.163800 60.672798 0.405300 0.529100 0.200900
--0.179900 61.274700 0.058500 0.525600 0.223900
--0.474100 61.294899 -0.607800 0.499900 0.227200
--0.596000 60.268700 -0.255900 0.502600 0.185300
--0.785400 61.539799 -0.048800 0.505500 0.247600
-0.000000 62.775902 -0.355700 0.533900 0.286800
--1.901400 62.898899 -1.262500 0.451600 0.287500
--1.792100 61.563202 -0.648200 0.464300 0.250800
--1.901400 62.898899 -1.262500 0.451600 0.287500
--2.505800 61.413601 -3.333900 0.367200 0.240300
--2.209500 61.230499 -1.515000 0.430900 0.227000
--1.792100 61.563202 -0.648200 0.464300 0.250800
--2.071800 58.080299 -1.837600 0.435700 0.090000
--2.043500 58.694401 -1.722000 0.434700 0.119000
--2.361600 58.652599 -3.405400 0.376100 0.111600
--2.361600 58.652599 -3.405400 0.376100 0.111600
--1.480400 57.287800 -3.167400 0.388000 0.054100
--2.071800 58.080299 -1.837600 0.435700 0.090000
--2.361600 58.652599 -3.405400 0.376100 0.111600
--2.043500 58.694401 -1.722000 0.434700 0.119000
--2.225300 60.301201 -1.334400 0.434400 0.187400
--2.484800 60.667999 -2.078300 0.409600 0.193000
--0.596000 60.268700 -0.255900 0.502600 0.185300
--2.225300 60.301201 -1.334400 0.434400 0.187400
--0.793500 58.611801 -0.022400 0.506200 0.129800
--0.605400 59.453602 0.006800 0.508800 0.156900
--0.793500 58.611801 -0.022400 0.506200 0.129800
--0.860300 57.339199 -0.345300 0.507000 0.087800
-0.000000 57.320400 0.190300 0.533800 0.095300
-0.000000 58.735298 0.237300 0.533800 0.134400
--2.361600 58.652599 -3.405400 0.376100 0.111600
--1.507500 57.978802 -4.806700 0.327200 0.071700
--1.480400 57.287800 -3.167400 0.388000 0.054100
--1.480400 57.287800 -3.167400 0.293600 0.962800
--1.435700 55.057400 -2.884500 0.285800 0.931400
-0.000000 54.522099 -2.187600 0.310700 0.919600
--0.509500 56.862801 -2.081200 0.307800 0.953500
--1.435700 55.057400 -2.884500 0.285800 0.931400
--1.480400 57.287800 -3.167400 0.293600 0.962800
--1.507500 57.978802 -4.806700 0.269900 0.982500
--2.321200 55.471001 -5.570800 0.259500 0.968000
--5.259600 15.490400 -9.599400 0.090700 0.228600
--0.294400 16.169500 -7.962700 0.039600 0.241800
--2.020300 14.610600 -8.278800 0.063600 0.221000
--0.294400 16.169500 -7.962700 0.282300 0.223700
--1.221800 14.450400 -2.004100 0.220300 0.236900
--0.971400 14.644800 -6.706400 0.253200 0.212300
--5.308800 13.910900 -3.738700 0.168700 0.220700
--1.766900 13.754900 -2.918700 0.216900 0.223600
--1.221800 14.450400 -2.004100 0.220300 0.236900
--6.498700 14.643000 -4.000600 0.151700 0.232900
--4.649800 14.945700 -8.785600 0.103500 0.222700
--5.308800 13.910900 -3.738700 0.168700 0.220700
--6.498700 14.643000 -4.000600 0.151700 0.232900
--5.259600 15.490400 -9.599400 0.090700 0.228600
--1.957400 20.620800 -1.217700 0.224300 0.297500
--0.899900 21.410400 -8.342700 0.307200 0.297500
--0.835600 22.853901 -8.203000 0.306600 0.313700
--2.189200 21.987900 -1.481800 0.225500 0.313700
--7.174300 32.815300 -5.168000 0.136400 0.440500
--6.542300 35.480598 -4.902800 0.133600 0.471500
--5.283200 35.952900 -7.814600 0.094100 0.470900
--4.970000 33.082802 -8.871300 0.086900 0.436600
--5.598500 31.822901 -1.405400 0.185400 0.436500
--6.542300 35.480598 -4.902800 0.133600 0.471500
--7.174300 32.815300 -5.168000 0.136400 0.440500
--4.685700 36.664101 -1.616400 0.239100 0.661600
--5.598500 31.822901 -1.405400 0.231500 0.582200
--3.798500 31.552500 -0.386300 0.257600 0.582200
--2.225300 60.301201 -1.334400 0.434400 0.187400
--2.209500 61.230499 -1.515000 0.430900 0.227000
--2.484800 60.667999 -2.078300 0.409600 0.193000
--8.927200 49.128502 -4.128200 0.688900 0.922700
--7.813100 49.342701 -3.886900 0.686800 0.944900
--8.184300 53.108700 -3.320400 0.746000 0.944900
--9.508400 52.403099 -3.672700 0.746000 0.922700
--8.184300 53.108700 -3.320400 0.746000 0.944900
--8.747800 53.770199 -7.353300 0.807700 0.944900
--9.827700 52.989700 -7.188500 0.805500 0.922700
--9.508400 52.403099 -3.672700 0.746000 0.922700
--8.747800 53.770199 -7.353300 0.807700 0.944900
--7.252500 54.524502 -7.615000 0.812300 0.981700
--6.775800 50.206501 -7.534500 0.879500 0.944900
--8.927200 49.128502 -4.128200 0.688900 0.922700
--9.508400 52.403099 -3.672700 0.746000 0.922700
--15.636800 49.715099 -4.015700 0.746000 0.809400
--14.977100 45.689201 -4.821000 0.680000 0.809400
--6.624100 53.529800 -2.653700 0.210200 0.900400
--3.773800 51.093601 -1.034300 0.256600 0.864400
--1.435700 55.057400 -2.884500 0.285800 0.931400
--7.252500 54.524502 -7.615000 0.180400 0.964800
--2.321200 55.471001 -5.570800 0.259500 0.968000
--7.252500 54.524502 -7.615000 0.180400 0.964800
--1.435700 55.057400 -2.884500 0.285800 0.931400
--2.209500 61.230499 -1.515000 0.430900 0.227000
--2.505800 61.413601 -3.333900 0.362700 0.212700
--2.484800 60.667999 -2.078300 0.409600 0.193000
--2.484800 60.667999 -2.078300 0.409600 0.193000
--2.505800 61.413601 -3.333900 0.362700 0.212700
--2.361600 58.652599 -3.405400 0.376100 0.111600
--2.209500 61.230499 -1.515000 0.430900 0.227000
--1.340700 61.343498 -1.024900 0.467800 0.231800
--1.792100 61.563202 -0.648200 0.464300 0.250800
--3.061600 3.537800 -3.461700 0.290200 0.071700
--3.735600 1.816900 0.228400 0.290200 0.030700
--1.568700 1.981700 -0.627100 0.308400 0.040400
--1.553600 3.059500 -4.173500 0.310400 0.073900
--0.626000 0.031700 -8.336200 0.345300 0.097200
--1.553600 3.059500 -4.173500 0.310400 0.073900
--1.568700 1.981700 -0.627100 0.308400 0.040400
--1.825200 -0.024100 0.601200 0.313500 0.023800
--1.825200 -0.024100 0.601200 0.748300 0.055100
--3.769300 -0.009000 1.132900 0.765800 0.040900
--1.712600 0.024900 -9.195700 0.765100 0.147100
--0.626000 0.031700 -8.336200 0.751000 0.138000
--1.712600 0.024900 -9.195700 0.089900 0.023200
--2.020300 14.610600 -8.278800 0.060000 0.185800
--0.971400 14.644800 -6.706400 0.025900 0.185800
--0.626000 0.031700 -8.336200 0.075600 0.021500
--1.568700 1.981700 -0.627100 0.308400 0.040400
--3.735600 1.816900 0.228400 0.290200 0.030700
--3.769300 -0.009000 1.132900 0.289700 0.012400
--1.825200 -0.024100 0.601200 0.313500 0.023800
--4.089400 2.633000 -5.031300 0.275500 0.071900
--3.252600 0.001600 -8.591000 0.238500 0.103000
--5.176800 -0.025000 -0.598300 0.266200 0.023600
--5.390300 1.568200 -1.670300 0.274000 0.039600
--3.769300 -0.009000 1.132900 0.289700 0.012400
--3.735600 1.816900 0.228400 0.290200 0.030700
--5.390300 1.568200 -1.670300 0.274000 0.039600
--5.176800 -0.025000 -0.598300 0.266200 0.023600
--5.390300 1.568200 -1.670300 0.274000 0.039600
--3.735600 1.816900 0.228400 0.290200 0.030700
--3.061600 3.537800 -3.461700 0.290200 0.071700
--4.089400 2.633000 -5.031300 0.275500 0.071900
--3.061600 3.537800 -3.461700 0.164000 0.067400
--1.766900 13.754900 -2.918700 0.193300 0.185800
--5.308800 13.910900 -3.738700 0.154100 0.185800
--4.089400 2.633000 -5.031300 0.145000 0.057700
--2.020300 14.610600 -8.278800 0.063600 0.221000
--4.649800 14.945700 -8.785600 0.103500 0.222700
--5.259600 15.490400 -9.599400 0.090700 0.228600
--2.020300 14.610600 -8.278800 0.063600 0.221000
--0.294400 16.169500 -7.962700 0.039600 0.241800
--0.971400 14.644800 -6.706400 0.028400 0.216500
--5.426000 21.341299 -8.131100 0.106600 0.297500
--6.827700 20.858999 -3.051400 0.166500 0.297500
--6.824000 22.193899 -3.254300 0.165700 0.313700
--5.317800 22.936800 -8.014600 0.105500 0.313700
--0.845100 29.891001 -9.491500 0.041700 0.395800
--0.835600 22.853901 -8.203000 0.053300 0.313700
--5.317800 22.936800 -8.014600 0.105500 0.313700
--5.595300 29.761600 -8.491100 0.097300 0.399700
--1.957400 20.620800 -1.217700 0.224300 0.297500
--2.189200 21.987900 -1.481800 0.225500 0.313700
--6.824000 22.193899 -3.254300 0.165700 0.313700
--6.827700 20.858999 -3.051400 0.166500 0.297500
--0.605400 59.453602 0.006800 0.508800 0.156900
-0.000000 59.375900 0.272700 0.533800 0.153800
--0.226300 59.631802 0.717000 0.529800 0.167300
--21.936399 43.055199 -3.733600 0.691800 0.680200
--22.348700 46.932201 -2.822400 0.746000 0.680200
--23.323000 46.228001 -3.425200 0.746000 0.661900
--23.265499 44.290199 -3.614200 0.710900 0.661900
--22.105101 44.119598 -7.074000 0.862200 0.680200
--23.273100 44.479099 -6.170500 0.835600 0.661900
--23.881300 46.267799 -5.995500 0.800900 0.661900
--23.337700 47.268200 -6.945000 0.809900 0.680200
--22.348700 46.932201 -2.822400 0.746000 0.680200
--23.337700 47.268200 -6.945000 0.809900 0.680200
--23.881300 46.267799 -5.995500 0.800900 0.661900
--23.323000 46.228001 -3.425200 0.746000 0.661900
--21.936399 43.055199 -3.733600 0.691800 0.680200
--23.265499 44.290199 -3.614200 0.710900 0.661900
--23.273100 44.479099 -6.170500 0.665900 0.661900
--22.105101 44.119598 -7.074000 0.641700 0.680200
--23.323000 46.228001 -3.425200 0.746000 0.661900
--24.935400 45.742901 -3.288800 0.746000 0.630500
--24.446100 44.099098 -3.039500 0.723200 0.630500
--23.265499 44.290199 -3.614200 0.710900 0.661900
--23.273100 44.479099 -6.170500 0.835600 0.661900
--25.718901 44.407902 -5.989100 0.812100 0.630500
--25.982700 45.641201 -5.974700 0.796200 0.630500
--23.881300 46.267799 -5.995500 0.800900 0.661900
--23.881300 46.267799 -5.995500 0.800900 0.661900
--25.982700 45.641201 -5.974700 0.796200 0.630500
--24.935400 45.742901 -3.288800 0.746000 0.630500
--23.323000 46.228001 -3.425200 0.746000 0.661900
--23.265499 44.290199 -3.614200 0.710900 0.661900
--24.446100 44.099098 -3.039500 0.723200 0.630500
--25.718901 44.407902 -5.989100 0.677100 0.630500
--23.273100 44.479099 -6.170500 0.665900 0.661900
--3.798500 31.552500 -0.386300 0.257600 0.582200
-0.000000 31.552500 0.128500 0.310700 0.582200
-0.000000 37.009800 0.550700 0.310700 0.661600
--4.685700 36.664101 -1.616400 0.239100 0.661600
--27.058001 43.733101 -1.471100 0.783900 0.527900
--28.100901 44.177299 -2.470000 0.756100 0.537200
--27.637899 42.321201 -1.984400 0.780200 0.502700
--26.775499 43.007000 -1.492900 0.799700 0.523000
--27.102699 45.320202 -5.735100 0.706300 0.587600
--25.982700 45.641201 -5.974700 0.701400 0.609900
--25.718901 44.407902 -5.989100 0.674700 0.592000
--26.246300 42.901402 -5.383600 0.663100 0.553800
--24.935400 45.742901 -3.288800 0.774000 0.616500
--25.982700 45.641201 -5.974700 0.701400 0.609900
--27.102699 45.320202 -5.735100 0.706300 0.587600
--26.753901 45.398300 -2.858600 0.766000 0.574200
--24.446100 44.099098 -3.039500 0.815000 0.599300
--26.246300 42.901402 -5.383600 0.880100 0.569900
--25.718901 44.407902 -5.989100 0.885900 0.607200
--28.380600 42.330502 -3.056600 0.741600 0.498200
--27.637899 42.321201 -1.984400 0.780200 0.502700
--28.100901 44.177299 -2.470000 0.756100 0.537200
--28.697901 44.238201 -3.477500 0.737900 0.538900
--28.380600 42.330502 -3.056600 0.741600 0.498200
--28.697901 44.238201 -3.477500 0.737900 0.538900
--28.543800 44.178001 -4.651400 0.718600 0.545700
--28.292801 42.543098 -4.446800 0.704200 0.514300
--26.753901 45.398300 -2.858600 0.766000 0.574200
--28.697901 44.238201 -3.477500 0.737900 0.538900
--28.100901 44.177299 -2.470000 0.756100 0.537200
--24.935400 45.742901 -3.288800 0.774000 0.616500
--26.117701 44.487900 -2.198700 0.788200 0.565100
--25.587200 43.557701 -2.038700 0.806300 0.556900
--24.446100 44.099098 -3.039500 0.815000 0.599300
--24.446100 44.099098 -3.039500 0.815000 0.599300
--25.587200 43.557701 -2.038700 0.806300 0.556900
--25.491899 42.827301 -2.370100 0.813300 0.554500
--26.246300 42.901402 -5.383600 0.880100 0.569900
--26.753901 45.398300 -2.858600 0.766000 0.574200
--26.117701 44.487900 -2.198700 0.788200 0.565100
--24.935400 45.742901 -3.288800 0.774000 0.616500
-0.000000 31.552500 0.128500 0.310700 0.582200
--3.798500 31.552500 -0.386300 0.257600 0.582200
--3.463700 23.872801 -0.356700 0.261000 0.472800
-0.000000 24.132099 -0.356700 0.310700 0.472800
--2.225300 60.301201 -1.334400 0.434400 0.187400
--2.043500 58.694401 -1.722000 0.434700 0.119000
--0.793500 58.611801 -0.022400 0.506200 0.129800
--0.793500 58.611801 -0.022400 0.506200 0.129800
--2.043500 58.694401 -1.722000 0.434700 0.119000
--2.071800 58.080299 -1.837600 0.435700 0.090000
--0.860300 57.339199 -0.345300 0.507000 0.087800
--2.071800 58.080299 -1.837600 0.435700 0.090000
--1.480400 57.287800 -3.167400 0.435700 0.022900
--0.509500 56.862801 -2.081200 0.497100 0.026700
--0.860300 57.339199 -0.345300 0.507000 0.087800
--0.179900 61.274700 0.058500 0.525600 0.223900
-0.000000 61.912998 -0.048000 0.533800 0.254400
--0.785400 61.539799 -0.048800 0.505500 0.247600
--15.884600 46.520500 -7.855800 0.879500 0.788400
--17.208200 49.477699 -7.512200 0.810800 0.788400
--16.136200 50.023998 -7.546200 0.808600 0.809400
--14.885000 46.974701 -7.946000 0.879500 0.809400
--15.636800 49.715099 -4.015700 0.746000 0.809400
--16.136200 50.023998 -7.546200 0.808600 0.809400
--17.208200 49.477699 -7.512200 0.810800 0.788400
--16.810101 49.139900 -3.928800 0.746000 0.788400
--16.192200 44.960400 -4.877100 0.677700 0.788400
--15.884600 46.520500 -7.855800 0.626900 0.788400
--14.885000 46.974701 -7.946000 0.626900 0.809400
--14.977100 45.689201 -4.821000 0.680000 0.809400
--16.810101 49.139900 -3.928800 0.746000 0.788400
--16.192200 44.960400 -4.877100 0.677700 0.788400
--14.977100 45.689201 -4.821000 0.680000 0.809400
--15.636800 49.715099 -4.015700 0.746000 0.809400
--13.779500 47.417198 -7.715300 0.879500 0.834400
--14.989100 50.565300 -7.297200 0.805300 0.834400
--9.827700 52.989700 -7.188500 0.805500 0.922700
--8.756500 49.321098 -7.632900 0.879500 0.922700
--15.636800 49.715099 -4.015700 0.746000 0.809400
--14.989100 50.565300 -7.297200 0.805300 0.834400
--16.136200 50.023998 -7.546200 0.808600 0.809400
--13.779500 47.417198 -7.715300 0.626900 0.829400
--14.977100 45.689201 -4.821000 0.680000 0.809400
--14.885000 46.974701 -7.946000 0.626900 0.809400
--0.971400 14.644800 -6.706400 0.253200 0.212300
--1.221800 14.450400 -2.004100 0.220300 0.236900
--1.766900 13.754900 -2.918700 0.216900 0.223600
--26.117701 44.487900 -2.198700 0.788200 0.565100
--27.058001 43.733101 -1.471100 0.783900 0.527900
--26.775499 43.007000 -1.492900 0.799700 0.523000
--25.587200 43.557701 -2.038700 0.806300 0.556900
--25.587200 43.557701 -2.038700 0.806300 0.556900
--26.775499 43.007000 -1.492900 0.799700 0.523000
--27.637899 42.321201 -1.984400 0.816200 0.507300
--25.491899 42.827301 -2.370100 0.813300 0.554500
--26.117701 44.487900 -2.198700 0.788200 0.565100
--28.100901 44.177299 -2.470000 0.756100 0.537200
--27.058001 43.733101 -1.471100 0.783900 0.527900
--8.184300 53.108700 -3.320400 0.746000 0.944900
--7.813100 49.342701 -3.886900 0.686800 0.944900
--6.624100 53.529800 -2.653700 0.746000 0.986600
--8.747800 53.770199 -7.353300 0.807700 0.944900
--6.775800 50.206501 -7.534500 0.879500 0.944900
--8.756500 49.321098 -7.632900 0.879500 0.922700
--9.827700 52.989700 -7.188500 0.805500 0.922700
--28.543800 44.178001 -4.651400 0.718600 0.545700
--28.697901 44.238201 -3.477500 0.737900 0.538900
--26.753901 45.398300 -2.858600 0.766000 0.574200
--27.102699 45.320202 -5.735100 0.706300 0.587600
--26.246300 42.901402 -5.383600 0.880100 0.569900
--28.380600 42.330502 -3.056600 0.853500 0.507000
--28.292801 42.543098 -4.446800 0.879400 0.523100
--28.100901 44.177299 -2.470000 0.756100 0.537200
--26.117701 44.487900 -2.198700 0.788200 0.565100
--26.753901 45.398300 -2.858600 0.766000 0.574200
--1.712600 0.024900 -9.195700 0.765100 0.147100
--3.769300 -0.009000 1.132900 0.765800 0.040900
--5.176800 -0.025000 -0.598300 0.783900 0.050100
--3.252600 0.001600 -8.591000 0.777900 0.139800
-0.000000 61.912998 -0.048000 0.533800 0.254400
-0.000000 62.775902 -0.355700 0.533900 0.286800
--0.785400 61.539799 -0.048800 0.505500 0.247600
--0.340300 31.400700 -9.922000 0.348900 0.396000
--0.425600 30.069099 -1.503600 0.251300 0.411900
--0.845100 29.891001 -9.491500 0.339400 0.379800
-0.000000 54.522099 -2.187600 0.310700 0.919600
-0.000000 56.862801 -2.081200 0.310500 0.953100
--0.509500 56.862801 -2.081200 0.307800 0.953500
--0.509500 56.862801 -2.081200 0.497100 0.026700
-0.000000 56.862801 -2.081200 0.533800 0.019000
-0.000000 57.320400 0.190300 0.533800 0.095300
--0.860300 57.339199 -0.345300 0.507000 0.087800
--5.598500 31.822901 -1.405400 0.185400 0.436500
--7.453900 29.910801 -4.782000 0.143900 0.408700
--6.824000 22.193899 -3.254300 0.165700 0.313700
--6.824000 22.193899 -3.254300 0.165700 0.313700
--7.453900 29.910801 -4.782000 0.143900 0.408700
--5.595300 29.761600 -8.491100 0.097300 0.399700
--5.317800 22.936800 -8.014600 0.105500 0.313700
--3.798500 31.552500 -0.386300 0.210900 0.433400
--5.598500 31.822901 -1.405400 0.185400 0.436500
--6.824000 22.193899 -3.254300 0.165700 0.313700
--2.189200 21.987900 -1.481800 0.225500 0.313700
--0.340300 31.400700 -9.922000 0.033600 0.413900
--0.845100 29.891001 -9.491500 0.041700 0.395800
--5.595300 29.761600 -8.491100 0.097300 0.399700
--4.970000 33.082802 -8.871300 0.086900 0.436600
--0.835600 22.853901 -8.203000 0.306600 0.313700
--0.845100 29.891001 -9.491500 0.339400 0.379800
--0.425600 30.069099 -1.503600 0.251300 0.411900
--2.189200 21.987900 -1.481800 0.225500 0.313700
--2.162800 35.743500 -9.599900 0.052600 0.465300
--0.340300 31.400700 -9.922000 0.033600 0.413900
--4.970000 33.082802 -8.871300 0.086900 0.436600
--5.283200 35.952900 -7.814600 0.094100 0.470900
--5.283200 35.952900 -7.814600 0.142000 0.631800
--6.542300 35.480598 -4.902800 0.182300 0.631800
--5.919200 37.619099 -4.570300 0.183200 0.661600
--5.919200 37.619099 -4.570300 0.183200 0.661600
--6.542300 35.480598 -4.902800 0.182300 0.631800
--5.598500 31.822901 -1.405400 0.231500 0.582200
--4.685700 36.664101 -1.616400 0.239100 0.661600
--0.474100 61.294899 -0.607800 0.499900 0.227200
--1.340700 61.343498 -1.024900 0.467800 0.231800
--2.225300 60.301201 -1.334400 0.434400 0.187400
--0.596000 60.268700 -0.255900 0.502600 0.185300
--1.340700 61.343498 -1.024900 0.467800 0.231800
--0.474100 61.294899 -0.607800 0.499900 0.227200
--0.785400 61.539799 -0.048800 0.505500 0.247600
--1.792100 61.563202 -0.648200 0.464300 0.250800
-0.000000 45.235802 -8.516300 0.061400 0.762800
-0.000000 38.221600 -8.073300 0.073200 0.661600
--2.827600 38.171799 -8.088300 0.114500 0.661600
--5.495700 46.043098 -6.732400 0.139900 0.788400
--0.425600 30.069099 -1.503600 0.251300 0.411900
--3.798500 31.552500 -0.386300 0.210900 0.433400
--2.189200 21.987900 -1.481800 0.225500 0.313700
-0.000000 31.547001 -9.939100 0.349900 0.400200
-0.000000 30.215401 -1.522000 0.252400 0.417000
--0.425600 30.069099 -1.503600 0.251300 0.411900
--0.340300 31.400700 -9.922000 0.348900 0.396000
--21.061199 44.183601 -7.611200 0.879500 0.705100
--22.585199 48.327702 -7.594400 0.812700 0.705100
--17.208200 49.477699 -7.512200 0.810800 0.788400
--15.884600 46.520500 -7.855800 0.879500 0.788400
--22.348700 46.932201 -2.822400 0.746000 0.680200
--22.585199 48.327702 -7.594400 0.812700 0.705100
--23.337700 47.268200 -6.945000 0.809900 0.680200
--21.061199 44.183601 -7.611200 0.626900 0.699700
--21.936399 43.055199 -3.733600 0.691800 0.680200
--22.105101 44.119598 -7.074000 0.641700 0.680200
-0.000000 59.375900 0.272700 0.533800 0.153800
-0.226300 59.631802 0.717000 0.537800 0.167300
--0.226300 59.631802 0.717000 0.529800 0.167300
--0.163800 60.672798 0.405300 0.529100 0.200900
--0.226300 59.631802 0.717000 0.529800 0.167300
-0.226300 59.631802 0.717000 0.537800 0.167300
-0.163800 60.672798 0.405300 0.538500 0.200900
--0.340300 31.400700 -9.922000 0.033600 0.413900
--2.162800 35.743500 -9.599900 0.052600 0.465300
-0.000000 35.795200 -9.599900 0.027500 0.464800
-0.000000 31.547001 -9.939100 0.029600 0.415400
--5.919200 37.619099 -4.570300 0.183200 0.661600
--2.827600 38.171799 -8.088300 0.114500 0.661600
--2.162800 35.743500 -9.599900 0.096500 0.631800
--5.283200 35.952900 -7.814600 0.142000 0.631800
--28.543800 44.178001 -4.651400 0.718600 0.545700
--27.102699 45.320202 -5.735100 0.706300 0.587600
--26.246300 42.901402 -5.383600 0.663100 0.553800
--28.292801 42.543098 -4.446800 0.704200 0.514300
--25.491899 42.827301 -2.370100 0.813300 0.554500
--27.637899 42.321201 -1.984400 0.816200 0.507300
--28.380600 42.330502 -3.056600 0.853500 0.507000
--26.246300 42.901402 -5.383600 0.880100 0.569900
--25.491899 42.827301 -2.370100 0.813300 0.554500
--28.380600 42.330502 -3.056600 0.853500 0.507000
--0.179900 61.274700 0.058500 0.525600 0.223900
--0.163800 60.672798 0.405300 0.529100 0.200900
-0.163800 60.672798 0.405300 0.538500 0.200900
-0.179900 61.274700 0.058500 0.542100 0.223900
-0.000000 61.912998 -0.048000 0.533800 0.254400
--0.179900 61.274700 0.058500 0.525600 0.223900
-0.179900 61.274700 0.058500 0.542100 0.223900
--2.162800 35.743500 -9.599900 0.096500 0.631800
--2.827600 38.171799 -8.088300 0.114500 0.661600
-0.000000 38.221600 -8.073300 0.073200 0.661600
-0.000000 35.795200 -9.599900 0.068100 0.631800
-4.620900 14.945700 -8.516100 0.912200 0.175600
-3.252600 0.001600 -8.591000 0.909400 0.032900
-1.712600 0.024900 -9.195700 0.925400 0.031900
-1.456400 14.610600 -8.695100 0.943400 0.175600
-4.089400 2.633000 -5.031300 0.873900 0.060000
-3.252600 0.001600 -8.591000 0.909400 0.032900
-4.620900 14.945700 -8.516100 0.912200 0.175600
-5.308800 13.910900 -3.738700 0.859000 0.175600
-1.553600 3.059500 -4.173500 0.841100 0.058900
-3.061600 3.537800 -3.461700 0.856300 0.067800
-1.766900 13.754900 -2.918700 0.824200 0.175600
-1.553600 3.059500 -4.173500 0.841100 0.058900
-1.766900 13.754900 -2.918700 0.824200 0.175600
-1.239800 14.644800 -6.465300 0.795300 0.175600
-0.626000 0.031700 -8.336200 0.808600 0.019600
-5.495700 46.043098 -6.732400 0.140100 0.788400
-6.029500 46.188801 -3.956000 0.183500 0.792100
-5.919200 37.619099 -4.570300 0.183400 0.661600
-2.827600 38.171799 -8.088300 0.114700 0.661600
-4.685700 36.664101 -1.616400 0.239300 0.661600
-5.919200 37.619099 -4.570300 0.183400 0.661600
-6.029500 46.188801 -3.956000 0.183500 0.792100
-4.298500 47.001099 -0.058900 0.249500 0.802400
-6.775800 50.206501 -7.534500 0.134300 0.852600
-0.000000 50.037800 -9.413700 0.042000 0.827300
-0.000000 53.738098 -8.986800 0.028300 0.877800
-7.252500 54.524502 -7.615000 0.126400 0.913200
-7.252500 54.524502 -7.615000 0.533200 0.977800
-6.624100 53.529800 -2.653700 0.469900 0.977800
-8.184300 53.108700 -3.320400 0.469900 0.942000
-8.747800 53.770199 -7.353300 0.528600 0.942000
-9.827700 52.989700 -7.188500 0.526400 0.916400
-9.508400 52.403099 -3.672700 0.469900 0.916400
-15.636800 49.715099 -4.015700 0.469900 0.803100
-14.989100 50.565300 -7.297200 0.526200 0.828100
-0.000000 37.009800 0.550700 0.310700 0.661600
-4.685700 36.664101 -1.616400 0.239300 0.661600
-4.298500 47.001099 -0.058900 0.249500 0.802400
-0.000000 47.287498 1.094200 0.310700 0.805700
-0.000000 53.738098 -8.986800 0.028300 0.877800
-0.000000 55.950600 -7.250100 0.022600 0.916300
-2.321200 55.471001 -5.570800 0.053900 0.941000
-7.252500 54.524502 -7.615000 0.126400 0.913200
-3.773800 51.093601 -1.034300 0.256800 0.864400
-4.298500 47.001099 -0.058900 0.249500 0.802400
-6.029500 46.188801 -3.956000 0.183500 0.792100
-6.624100 53.529800 -2.653700 0.210400 0.900400
-6.624100 53.529800 -2.653700 0.210400 0.900400
-6.029500 46.188801 -3.956000 0.183500 0.792100
-7.813100 49.342701 -3.886900 0.181200 0.844200
-0.000000 50.880199 0.110000 0.310700 0.860500
-0.000000 47.287498 1.094200 0.310700 0.805700
-4.298500 47.001099 -0.058900 0.249500 0.802400
-3.773800 51.093601 -1.034300 0.256800 0.864400
-16.136200 50.023998 -7.546200 0.529500 0.803100
-14.885000 46.974701 -7.946000 0.590800 0.803100
-13.779500 47.417198 -7.715300 0.590800 0.828100
-14.989100 50.565300 -7.297200 0.526200 0.828100
-13.779500 47.417198 -7.715300 0.347800 0.823100
-14.977100 45.689201 -4.821000 0.400900 0.803100
-8.927200 49.128502 -4.128200 0.409800 0.916400
-8.756500 49.321098 -7.632900 0.347800 0.916400
-17.208200 49.477699 -7.512200 0.531700 0.782100
-16.810101 49.139900 -3.928800 0.469900 0.782100
-22.348700 46.932201 -2.822400 0.469900 0.674700
-22.585199 48.327702 -7.594400 0.533600 0.698800
-21.936399 43.055199 -3.733600 0.412700 0.674700
-22.348700 46.932201 -2.822400 0.469900 0.674700
-16.810101 49.139900 -3.928800 0.469900 0.782100
-16.192200 44.960400 -4.877100 0.398600 0.782100
-22.105101 44.119598 -7.074000 0.583100 0.674700
-21.061199 44.183601 -7.611200 0.590800 0.698800
-22.585199 48.327702 -7.594400 0.533600 0.698800
-23.337700 47.268200 -6.945000 0.530800 0.674700
-15.884600 46.520500 -7.855800 0.347800 0.782100
-21.061199 44.183601 -7.611200 0.347800 0.693400
-21.936399 43.055199 -3.733600 0.412700 0.674700
-16.192200 44.960400 -4.877100 0.398600 0.782100
-5.598500 31.822901 -1.404300 0.847900 0.413200
-7.453900 29.910801 -4.780100 0.884800 0.385400
-7.174300 32.815300 -5.167300 0.893300 0.414200
-4.970000 33.082802 -8.871900 0.938900 0.409500
-7.174300 32.815300 -5.167300 0.893300 0.414200
-7.453900 29.910801 -4.780100 0.884800 0.385400
-5.595300 29.761600 -8.492500 0.927500 0.375900
-6.827700 20.858999 -3.044800 0.858900 0.286100
-6.194700 19.576300 -3.478600 0.860200 0.277400
-5.426000 21.341299 -8.132600 0.914200 0.282100
-0.835600 22.853901 -8.210700 0.964300 0.301600
-5.317800 22.936800 -8.016200 0.916400 0.301600
-5.426000 21.341299 -8.132600 0.914200 0.282100
-0.899900 21.410400 -8.349400 0.962800 0.286100
-0.899900 21.410400 -8.349400 0.726500 0.282100
-1.853000 19.164200 -1.371600 0.805100 0.274200
-1.957400 20.620800 -1.211500 0.804700 0.286100
-6.194700 19.576300 -3.478600 0.860200 0.277400
-6.827700 20.858999 -3.044800 0.858900 0.286100
-1.957400 20.620800 -1.211500 0.804700 0.286100
-1.853000 19.164200 -1.371600 0.805100 0.274200
-5.117200 15.490400 -9.679700 0.917300 0.220800
-0.134100 16.169500 -9.174700 0.969900 0.225300
-0.899900 21.410400 -8.349400 0.962800 0.286100
-5.426000 21.341299 -8.132600 0.914200 0.282100
-0.134100 16.169500 -9.174700 0.732600 0.207100
-1.716700 14.450400 -2.459200 0.808600 0.236100
-1.853000 19.164200 -1.371600 0.805100 0.274200
-0.899900 21.410400 -8.349400 0.726500 0.282100
-1.853000 19.164200 -1.371600 0.805100 0.274200
-1.716700 14.450400 -2.459200 0.808600 0.236100
-6.069200 14.643000 -3.762300 0.859400 0.227800
-6.194700 19.576300 -3.478600 0.860200 0.277400
-6.069200 14.643000 -3.762300 0.859400 0.227800
-5.117200 15.490400 -9.679700 0.917300 0.220800
-5.426000 21.341299 -8.132600 0.914200 0.282100
-6.194700 19.576300 -3.478600 0.860200 0.277400
-7.813100 49.342701 -3.886900 0.181200 0.844200
-6.029500 46.188801 -3.956000 0.183500 0.792100
-5.495700 46.043098 -6.732400 0.140100 0.788400
-6.775800 50.206501 -7.534500 0.134300 0.852600
-8.756500 49.321098 -7.632900 0.347800 0.916400
-8.927200 49.128502 -4.128200 0.409800 0.916400
-7.813100 49.342701 -3.886900 0.407700 0.942000
-6.775800 50.206501 -7.534500 0.347800 0.942000
-5.495700 46.043098 -6.732400 0.140100 0.788400
-0.000000 45.235802 -8.516300 0.061600 0.762900
-0.000000 50.037800 -9.413700 0.042000 0.827300
-6.775800 50.206501 -7.534500 0.134300 0.852600
-3.773800 51.093601 -1.034300 0.256800 0.864400
-1.435700 55.057400 -2.884500 0.286000 0.931400
-0.000000 54.522099 -2.187600 0.310700 0.919600
-0.000000 50.880199 0.110000 0.310700 0.860500
-0.163800 60.672798 0.405300 0.538500 0.200900
-0.226300 59.631802 0.717000 0.537800 0.167300
-0.605400 59.453602 0.006800 0.558900 0.156900
-0.596000 60.268700 -0.255900 0.565100 0.185300
-0.000000 59.375900 0.272700 0.533800 0.153800
-0.000000 58.735298 0.237300 0.533800 0.134400
-0.793500 58.611801 -0.022400 0.561500 0.129800
-0.605400 59.453602 0.006800 0.558900 0.156900
-1.340700 61.343498 -1.024900 0.599900 0.231700
-2.225300 60.301201 -1.334400 0.633200 0.187400
-2.209500 61.230499 -1.515000 0.636800 0.228100
-0.474100 61.294899 -0.607800 0.567800 0.227200
-0.785400 61.539799 -0.048800 0.562200 0.247600
-0.179900 61.274700 0.058500 0.542100 0.223900
-0.163800 60.672798 0.405300 0.538500 0.200900
-0.596000 60.268700 -0.255900 0.565100 0.185300
-0.474100 61.294899 -0.607800 0.567800 0.227200
-0.179900 61.274700 0.058500 0.542100 0.223900
-0.785400 61.539799 -0.048800 0.562200 0.247600
-1.792100 61.563202 -0.648200 0.603400 0.250800
-1.901400 62.898899 -1.262500 0.616100 0.287500
-0.000000 62.775902 -0.355700 0.533900 0.286800
-1.901400 62.898899 -1.262500 0.616100 0.287500
-1.792100 61.563202 -0.648200 0.603400 0.250800
-2.209500 61.230499 -1.515000 0.636800 0.228100
-2.505800 61.413601 -3.333900 0.700500 0.240200
-2.071800 58.080299 -1.837600 0.632000 0.089900
-2.361600 58.652599 -3.405400 0.691600 0.111600
-2.043500 58.694401 -1.722000 0.633000 0.119000
-2.361600 58.652599 -3.405400 0.691600 0.111600
-2.071800 58.080299 -1.837600 0.632000 0.089900
-1.480400 57.287800 -3.167400 0.679600 0.054000
-2.361600 58.652599 -3.405400 0.691600 0.111600
-2.484800 60.667999 -2.078300 0.658100 0.193000
-2.225300 60.301201 -1.334400 0.633200 0.187400
-2.043500 58.694401 -1.722000 0.633000 0.119000
-0.596000 60.268700 -0.255900 0.565100 0.185300
-0.605400 59.453602 0.006800 0.558900 0.156900
-0.793500 58.611801 -0.022400 0.561500 0.129800
-2.225300 60.301201 -1.334400 0.633200 0.187400
-0.793500 58.611801 -0.022400 0.561500 0.129800
-0.000000 58.735298 0.237300 0.533800 0.134400
-0.000000 57.320400 0.190300 0.533800 0.095300
-0.860300 57.339199 -0.345300 0.560600 0.087800
-2.361600 58.652599 -3.405400 0.691600 0.111600
-1.480400 57.287800 -3.167400 0.679600 0.054000
-1.507500 57.978802 -4.806700 0.740400 0.071600
-1.480400 57.287800 -3.167400 0.293800 0.962800
-0.509500 56.862801 -2.081200 0.308000 0.953500
-0.000000 54.522099 -2.187600 0.310700 0.919600
-1.435700 55.057400 -2.884500 0.286000 0.931400
-1.435700 55.057400 -2.884500 0.286000 0.931400
-2.321200 55.471001 -5.570800 0.259700 0.968000
-1.507500 57.978802 -4.806700 0.270100 0.982500
-1.480400 57.287800 -3.167400 0.293800 0.962800
-5.117200 15.490400 -9.679700 0.917300 0.220800
-1.456400 14.610600 -8.695100 0.949700 0.207500
-0.134100 16.169500 -9.174700 0.969900 0.225300
-0.134100 16.169500 -9.174700 0.732600 0.207100
-1.239800 14.644800 -6.465300 0.774100 0.204900
-1.716700 14.450400 -2.459200 0.808600 0.236100
-5.308800 13.910900 -3.738700 0.855000 0.218100
-6.069200 14.643000 -3.762300 0.859400 0.227800
-1.716700 14.450400 -2.459200 0.808600 0.236100
-1.766900 13.754900 -2.918700 0.809900 0.215800
-4.620900 14.945700 -8.516100 0.914400 0.215300
-5.117200 15.490400 -9.679700 0.917300 0.220800
-6.069200 14.643000 -3.762300 0.859400 0.227800
-5.308800 13.910900 -3.738700 0.855000 0.218100
-1.957400 20.620800 -1.211500 0.804700 0.286100
-2.189200 21.987900 -1.483700 0.804500 0.301600
-0.835600 22.853901 -8.210700 0.728900 0.301600
-0.899900 21.410400 -8.349400 0.726500 0.282100
-7.174300 32.815300 -5.167300 0.893300 0.414200
-4.970000 33.082802 -8.871900 0.938900 0.409500
-5.283200 35.952900 -7.814600 0.933900 0.441300
-6.542300 35.480598 -4.902800 0.897200 0.442800
-5.598500 31.822901 -1.404300 0.847900 0.413200
-7.174300 32.815300 -5.167300 0.893300 0.414200
-6.542300 35.480598 -4.902800 0.897200 0.442800
-4.685700 36.664101 -1.616400 0.239300 0.661600
-3.798500 31.552500 -0.388900 0.257800 0.582200
-5.598500 31.822901 -1.404300 0.231700 0.582200
-2.225300 60.301201 -1.334400 0.633200 0.187400
-2.484800 60.667999 -2.078300 0.658100 0.193000
-2.209500 61.230499 -1.515000 0.636800 0.228100
-8.927200 49.128502 -4.128200 0.409800 0.916400
-9.508400 52.403099 -3.672700 0.469900 0.916400
-8.184300 53.108700 -3.320400 0.469900 0.942000
-7.813100 49.342701 -3.886900 0.407700 0.942000
-8.184300 53.108700 -3.320400 0.469900 0.942000
-9.508400 52.403099 -3.672700 0.469900 0.916400
-9.827700 52.989700 -7.188500 0.526400 0.916400
-8.747800 53.770199 -7.353300 0.528600 0.942000
-8.747800 53.770199 -7.353300 0.528600 0.942000
-6.775800 50.206501 -7.534500 0.590800 0.942000
-7.252500 54.524502 -7.615000 0.533200 0.977800
-8.927200 49.128502 -4.128200 0.409800 0.916400
-14.977100 45.689201 -4.821000 0.400900 0.803100
-15.636800 49.715099 -4.015700 0.469900 0.803100
-9.508400 52.403099 -3.672700 0.469900 0.916400
-1.435700 55.057400 -2.884500 0.286000 0.931400
-3.773800 51.093601 -1.034300 0.256800 0.864400
-6.624100 53.529800 -2.653700 0.210400 0.900400
-7.252500 54.524502 -7.615000 0.180600 0.964800
-2.321200 55.471001 -5.570800 0.259700 0.968000
-1.435700 55.057400 -2.884500 0.286000 0.931400
-7.252500 54.524502 -7.615000 0.180600 0.964800
-2.209500 61.230499 -1.515000 0.636800 0.228100
-2.484800 60.667999 -2.078300 0.658100 0.193000
-2.505800 61.413601 -3.333900 0.704900 0.212700
-2.484800 60.667999 -2.078300 0.658100 0.193000
-2.361600 58.652599 -3.405400 0.691600 0.111600
-2.505800 61.413601 -3.333900 0.704900 0.212700
-2.209500 61.230499 -1.515000 0.636800 0.228100
-1.792100 61.563202 -0.648200 0.603400 0.250800
-1.340700 61.343498 -1.024900 0.599900 0.231700
-3.061600 3.537800 -3.461700 0.290200 0.071700
-1.553600 3.059500 -4.173500 0.275500 0.071900
-1.568700 1.981700 -0.627100 0.274000 0.039600
-3.735600 1.816900 0.228400 0.290200 0.030700
-0.626000 0.031700 -8.336200 0.238500 0.103000
-1.825200 -0.024100 0.601200 0.266200 0.023600
-1.568700 1.981700 -0.627100 0.274000 0.039600
-1.553600 3.059500 -4.173500 0.275500 0.071900
-1.825200 -0.024100 0.601200 0.783900 0.050100
-0.626000 0.031700 -8.336200 0.777900 0.139800
-1.712600 0.024900 -9.195700 0.765100 0.147100
-3.769300 -0.009000 1.132900 0.765800 0.040900
-1.712600 0.024900 -9.195700 0.925400 0.031900
-0.626000 0.031700 -8.336200 0.938600 0.031200
-1.239800 14.644800 -6.465300 0.974400 0.175600
-1.456400 14.610600 -8.695100 0.943400 0.175600
-1.568700 1.981700 -0.627100 0.274000 0.039600
-1.825200 -0.024100 0.601200 0.266200 0.023600
-3.769300 -0.009000 1.132900 0.289700 0.012400
-3.735600 1.816900 0.228400 0.290200 0.030700
-4.089400 2.633000 -5.031300 0.310400 0.073900
-5.390300 1.568200 -1.670300 0.308400 0.040400
-5.176800 -0.025000 -0.598300 0.313500 0.023800
-3.252600 0.001600 -8.591000 0.345300 0.097200
-3.769300 -0.009000 1.132900 0.289700 0.012400
-5.176800 -0.025000 -0.598300 0.313500 0.023800
-5.390300 1.568200 -1.670300 0.308400 0.040400
-3.735600 1.816900 0.228400 0.290200 0.030700
-5.390300 1.568200 -1.670300 0.308400 0.040400
-4.089400 2.633000 -5.031300 0.310400 0.073900
-3.061600 3.537800 -3.461700 0.290200 0.071700
-3.735600 1.816900 0.228400 0.290200 0.030700
-3.061600 3.537800 -3.461700 0.856300 0.067800
-4.089400 2.633000 -5.031300 0.873900 0.060000
-5.308800 13.910900 -3.738700 0.859000 0.175600
-1.766900 13.754900 -2.918700 0.824200 0.175600
-5.117200 15.490400 -9.679700 0.917300 0.220800
-4.620900 14.945700 -8.516100 0.914400 0.215300
-1.456400 14.610600 -8.695100 0.949700 0.207500
-1.456400 14.610600 -8.695100 0.746600 0.183800
-1.239800 14.644800 -6.465300 0.774100 0.204900
-0.134100 16.169500 -9.174700 0.732600 0.207100
-5.426000 21.341299 -8.132600 0.914200 0.282100
-5.317800 22.936800 -8.016200 0.916400 0.301600
-6.824000 22.193899 -3.251500 0.860400 0.301600
-6.827700 20.858999 -3.044800 0.858900 0.286100
-0.845100 29.891001 -9.498900 0.978500 0.369500
-5.595300 29.761600 -8.492500 0.927500 0.375900
-5.317800 22.936800 -8.016200 0.916400 0.301600
-0.835600 22.853901 -8.210700 0.964300 0.301600
-1.957400 20.620800 -1.211500 0.804700 0.286100
-6.827700 20.858999 -3.044800 0.858900 0.286100
-6.824000 22.193899 -3.251500 0.860400 0.301600
-2.189200 21.987900 -1.483700 0.804500 0.301600
-0.605400 59.453602 0.006800 0.558900 0.156900
-0.226300 59.631802 0.717000 0.537800 0.167300
-0.000000 59.375900 0.272700 0.533800 0.153800
-21.936399 43.055199 -3.733600 0.412700 0.674700
-23.265499 44.290199 -3.614200 0.431800 0.655600
-23.323000 46.228001 -3.425200 0.469900 0.655600
-22.348700 46.932201 -2.822400 0.469900 0.674700
-22.105101 44.119598 -7.074000 0.583100 0.674700
-23.337700 47.268200 -6.945000 0.530800 0.674700
-23.881300 46.267799 -5.995500 0.521800 0.655600
-23.273100 44.479099 -6.170500 0.556600 0.655600
-22.348700 46.932201 -2.822400 0.469900 0.674700
-23.323000 46.228001 -3.425200 0.469900 0.655600
-23.881300 46.267799 -5.995500 0.521800 0.655600
-23.337700 47.268200 -6.945000 0.530800 0.674700
-21.936399 43.055199 -3.733600 0.412700 0.674700
-22.105101 44.119598 -7.074000 0.362600 0.674700
-23.273100 44.479099 -6.170500 0.386800 0.655600
-23.265499 44.290199 -3.614200 0.431800 0.655600
-23.323000 46.228001 -3.425200 0.469900 0.655600
-23.265499 44.290199 -3.614200 0.431800 0.655600
-24.446100 44.099098 -3.039500 0.444100 0.624200
-24.935400 45.742901 -3.288800 0.469900 0.624200
-23.273100 44.479099 -6.170500 0.556600 0.655600
-23.881300 46.267799 -5.995500 0.521800 0.655600
-25.982700 45.641201 -5.974700 0.517100 0.624200
-25.718901 44.407902 -5.989100 0.533000 0.624200
-23.881300 46.267799 -5.995500 0.521800 0.655600
-23.323000 46.228001 -3.425200 0.469900 0.655600
-24.935400 45.742901 -3.288800 0.469900 0.624200
-25.982700 45.641201 -5.974700 0.517100 0.624200
-23.265499 44.290199 -3.614200 0.431800 0.655600
-23.273100 44.479099 -6.170500 0.386800 0.655600
-25.718901 44.407902 -5.989100 0.398000 0.624200
-24.446100 44.099098 -3.039500 0.444100 0.624200
-3.798500 31.552500 -0.388900 0.257800 0.582200
-4.685700 36.664101 -1.616400 0.239300 0.661600
-0.000000 37.009800 0.550700 0.310700 0.661600
-0.000000 31.552500 0.128500 0.310700 0.582200
-27.058001 43.733101 -1.471100 0.783900 0.527900
-26.775499 43.007000 -1.492900 0.799700 0.523000
-27.637899 42.321201 -1.984400 0.780200 0.502700
-28.100901 44.177299 -2.470000 0.756100 0.537200
-27.102699 45.320202 -5.735100 0.706300 0.587600
-26.246300 42.901402 -5.383600 0.663100 0.553800
-25.718901 44.407902 -5.989100 0.674700 0.592000
-25.982700 45.641201 -5.974700 0.701400 0.609900
-24.935400 45.742901 -3.288800 0.774000 0.616500
-26.753901 45.398300 -2.858600 0.766000 0.574200
-27.102699 45.320202 -5.735100 0.706300 0.587600
-25.982700 45.641201 -5.974700 0.701400 0.609900
-24.446100 44.099098 -3.039500 0.815000 0.599300
-25.718901 44.407902 -5.989100 0.885900 0.607200
-26.246300 42.901402 -5.383600 0.880100 0.569900
-28.380600 42.330502 -3.056600 0.741600 0.498200
-28.697901 44.238201 -3.477500 0.737900 0.538900
-28.100901 44.177299 -2.470000 0.756100 0.537200
-27.637899 42.321201 -1.984400 0.780200 0.502700
-28.380600 42.330502 -3.056600 0.741600 0.498200
-28.292801 42.543098 -4.446800 0.704200 0.514300
-28.543800 44.178001 -4.651400 0.718600 0.545700
-28.697901 44.238201 -3.477500 0.737900 0.538900
-26.753901 45.398300 -2.858600 0.766000 0.574200
-28.100901 44.177299 -2.470000 0.756100 0.537200
-28.697901 44.238201 -3.477500 0.737900 0.538900
-24.935400 45.742901 -3.288800 0.774000 0.616500
-24.446100 44.099098 -3.039500 0.815000 0.599300
-25.587200 43.557701 -2.038700 0.806300 0.556900
-26.117701 44.487900 -2.198700 0.788200 0.565100
-24.446100 44.099098 -3.039500 0.815000 0.599300
-26.246300 42.901402 -5.383600 0.880100 0.569900
-25.491899 42.827301 -2.370100 0.813300 0.554500
-25.587200 43.557701 -2.038700 0.806300 0.556900
-26.753901 45.398300 -2.858600 0.766000 0.574200
-24.935400 45.742901 -3.288800 0.774000 0.616500
-26.117701 44.487900 -2.198700 0.788200 0.565100
-0.000000 31.552500 0.128500 0.310700 0.582200
-0.000000 24.132099 -0.356700 0.310700 0.472800
-3.463700 23.872801 -0.356700 0.261200 0.472800
-3.798500 31.552500 -0.388900 0.257800 0.582200
-2.225300 60.301201 -1.334400 0.633200 0.187400
-0.793500 58.611801 -0.022400 0.561500 0.129800
-2.043500 58.694401 -1.722000 0.633000 0.119000
-0.793500 58.611801 -0.022400 0.561500 0.129800
-0.860300 57.339199 -0.345300 0.560600 0.087800
-2.071800 58.080299 -1.837600 0.632000 0.089900
-2.043500 58.694401 -1.722000 0.633000 0.119000
-2.071800 58.080299 -1.837600 0.632000 0.089900
-0.860300 57.339199 -0.345300 0.560600 0.087800
-0.509500 56.862801 -2.081200 0.570500 0.026600
-1.480400 57.287800 -3.167400 0.631900 0.022800
-0.179900 61.274700 0.058500 0.542100 0.223900
-0.785400 61.539799 -0.048800 0.562200 0.247600
-0.000000 61.912998 -0.048000 0.533800 0.254400
-15.884600 46.520500 -7.855800 0.590800 0.782100
-14.885000 46.974701 -7.946000 0.590800 0.803100
-16.136200 50.023998 -7.546200 0.529500 0.803100
-17.208200 49.477699 -7.512200 0.531700 0.782100
-15.636800 49.715099 -4.015700 0.469900 0.803100
-16.810101 49.139900 -3.928800 0.469900 0.782100
-17.208200 49.477699 -7.512200 0.531700 0.782100
-16.136200 50.023998 -7.546200 0.529500 0.803100
-16.192200 44.960400 -4.877100 0.398600 0.782100
-14.977100 45.689201 -4.821000 0.400900 0.803100
-14.885000 46.974701 -7.946000 0.347800 0.803100
-15.884600 46.520500 -7.855800 0.347800 0.782100
-16.810101 49.139900 -3.928800 0.469900 0.782100
-15.636800 49.715099 -4.015700 0.469900 0.803100
-14.977100 45.689201 -4.821000 0.400900 0.803100
-16.192200 44.960400 -4.877100 0.398600 0.782100
-13.779500 47.417198 -7.715300 0.590800 0.828100
-8.756500 49.321098 -7.632900 0.590800 0.916400
-9.827700 52.989700 -7.188500 0.526400 0.916400
-14.989100 50.565300 -7.297200 0.526200 0.828100
-15.636800 49.715099 -4.015700 0.469900 0.803100
-16.136200 50.023998 -7.546200 0.529500 0.803100
-14.989100 50.565300 -7.297200 0.526200 0.828100
-13.779500 47.417198 -7.715300 0.347800 0.823100
-14.885000 46.974701 -7.946000 0.347800 0.803100
-14.977100 45.689201 -4.821000 0.400900 0.803100
-1.239800 14.644800 -6.465300 0.774100 0.204900
-1.766900 13.754900 -2.918700 0.809900 0.215800
-1.716700 14.450400 -2.459200 0.808600 0.236100
-26.117701 44.487900 -2.198700 0.788200 0.565100
-25.587200 43.557701 -2.038700 0.806300 0.556900
-26.775499 43.007000 -1.492900 0.799700 0.523000
-27.058001 43.733101 -1.471100 0.783900 0.527900
-25.587200 43.557701 -2.038700 0.806300 0.556900
-25.491899 42.827301 -2.370100 0.813300 0.554500
-27.637899 42.321201 -1.984400 0.816200 0.507300
-26.775499 43.007000 -1.492900 0.799700 0.523000
-26.117701 44.487900 -2.198700 0.788200 0.565100
-27.058001 43.733101 -1.471100 0.783900 0.527900
-28.100901 44.177299 -2.470000 0.756100 0.537200
-8.184300 53.108700 -3.320400 0.469900 0.942000
-6.624100 53.529800 -2.653700 0.469900 0.977800
-7.813100 49.342701 -3.886900 0.407700 0.942000
-8.747800 53.770199 -7.353300 0.528600 0.942000
-9.827700 52.989700 -7.188500 0.526400 0.916400
-8.756500 49.321098 -7.632900 0.590800 0.916400
-6.775800 50.206501 -7.534500 0.590800 0.942000
-28.543800 44.178001 -4.651400 0.718600 0.545700
-27.102699 45.320202 -5.735100 0.706300 0.587600
-26.753901 45.398300 -2.858600 0.766000 0.574200
-28.697901 44.238201 -3.477500 0.737900 0.538900
-26.246300 42.901402 -5.383600 0.880100 0.569900
-28.292801 42.543098 -4.446800 0.879400 0.523100
-28.380600 42.330502 -3.056600 0.853500 0.507000
-28.100901 44.177299 -2.470000 0.756100 0.537200
-26.753901 45.398300 -2.858600 0.766000 0.574200
-26.117701 44.487900 -2.198700 0.788200 0.565100
-1.712600 0.024900 -9.195700 0.765100 0.147100
-3.252600 0.001600 -8.591000 0.751000 0.138000
-5.176800 -0.025000 -0.598300 0.748300 0.055100
-3.769300 -0.009000 1.132900 0.765800 0.040900
-0.000000 61.912998 -0.048000 0.533800 0.254400
-0.785400 61.539799 -0.048800 0.562200 0.247600
-0.000000 62.775902 -0.355700 0.533900 0.286800
-0.340300 31.400700 -9.928000 0.694900 0.384200
-0.845100 29.891001 -9.498900 0.702700 0.368200
-0.425600 30.069099 -1.507500 0.785600 0.393300
-0.509500 56.862801 -2.081200 0.308000 0.953500
-0.509500 56.862801 -2.081200 0.570500 0.026600
-0.860300 57.339199 -0.345300 0.560600 0.087800
-0.000000 57.320400 0.190300 0.533800 0.095300
-0.000000 56.862801 -2.081200 0.533800 0.019000
-5.598500 31.822901 -1.404300 0.847900 0.413200
-6.824000 22.193899 -3.251500 0.860400 0.301600
-7.453900 29.910801 -4.780100 0.884800 0.385400
-6.824000 22.193899 -3.251500 0.860400 0.301600
-5.317800 22.936800 -8.016200 0.916400 0.301600
-5.595300 29.761600 -8.492500 0.927500 0.375900
-7.453900 29.910801 -4.780100 0.884800 0.385400
-3.798500 31.552500 -0.388900 0.824000 0.411400
-2.189200 21.987900 -1.483700 0.804500 0.301600
-6.824000 22.193899 -3.251500 0.860400 0.301600
-5.598500 31.822901 -1.404300 0.847900 0.413200
-0.340300 31.400700 -9.928000 0.986800 0.385200
-4.970000 33.082802 -8.871900 0.938900 0.409500
-5.595300 29.761600 -8.492500 0.927500 0.375900
-0.845100 29.891001 -9.498900 0.978500 0.369500
-0.835600 22.853901 -8.210700 0.728900 0.301600
-2.189200 21.987900 -1.483700 0.804500 0.301600
-0.425600 30.069099 -1.507500 0.785600 0.393300
-0.845100 29.891001 -9.498900 0.702700 0.368200
-2.162800 35.743500 -9.599900 0.972400 0.433600
-5.283200 35.952900 -7.814600 0.933900 0.441300
-4.970000 33.082802 -8.871900 0.938900 0.409500
-0.340300 31.400700 -9.928000 0.986800 0.385200
-5.283200 35.952900 -7.814600 0.142200 0.631800
-5.919200 37.619099 -4.570300 0.183400 0.661600
-6.542300 35.480598 -4.902800 0.182500 0.631800
-5.919200 37.619099 -4.570300 0.183400 0.661600
-4.685700 36.664101 -1.616400 0.239300 0.661600
-5.598500 31.822901 -1.404300 0.231700 0.582200
-6.542300 35.480598 -4.902800 0.182500 0.631800
-0.474100 61.294899 -0.607800 0.567800 0.227200
-0.596000 60.268700 -0.255900 0.565100 0.185300
-2.225300 60.301201 -1.334400 0.633200 0.187400
-1.340700 61.343498 -1.024900 0.599900 0.231700
-1.340700 61.343498 -1.024900 0.599900 0.231700
-1.792100 61.563202 -0.648200 0.603400 0.250800
-0.785400 61.539799 -0.048800 0.562200 0.247600
-0.474100 61.294899 -0.607800 0.567800 0.227200
-0.000000 45.235802 -8.516300 0.061600 0.762900
-5.495700 46.043098 -6.732400 0.140100 0.788400
-2.827600 38.171799 -8.088300 0.114700 0.661600
-0.000000 38.221600 -8.073300 0.073400 0.661600
-0.425600 30.069099 -1.507500 0.785600 0.393300
-2.189200 21.987900 -1.483700 0.804500 0.301600
-3.798500 31.552500 -0.388900 0.824000 0.411400
-0.000000 31.547001 -9.939100 0.694200 0.388200
-0.340300 31.400700 -9.928000 0.694900 0.384200
-0.425600 30.069099 -1.507500 0.785600 0.393300
-0.000000 30.215401 -1.522000 0.785000 0.398100
-21.061199 44.183601 -7.611200 0.590800 0.698800
-15.884600 46.520500 -7.855800 0.590800 0.782100
-17.208200 49.477699 -7.512200 0.531700 0.782100
-22.585199 48.327702 -7.594400 0.533600 0.698800
-22.348700 46.932201 -2.822400 0.469900 0.674700
-23.337700 47.268200 -6.945000 0.530800 0.674700
-22.585199 48.327702 -7.594400 0.533600 0.698800
-21.061199 44.183601 -7.611200 0.347800 0.693400
-22.105101 44.119598 -7.074000 0.362600 0.674700
-21.936399 43.055199 -3.733600 0.412700 0.674700
-0.340300 31.400700 -9.928000 0.986800 0.385200
-0.000000 31.547001 -9.939100 0.990600 0.386300
-0.000000 35.795200 -9.599900 0.995500 0.431600
-2.162800 35.743500 -9.599900 0.972400 0.433600
-5.919200 37.619099 -4.570300 0.183400 0.661600
-5.283200 35.952900 -7.814600 0.142200 0.631800
-2.162800 35.743500 -9.599900 0.096700 0.631800
-2.827600 38.171799 -8.088300 0.114700 0.661600
-28.543800 44.178001 -4.651400 0.718600 0.545700
-28.292801 42.543098 -4.446800 0.704200 0.514300
-26.246300 42.901402 -5.383600 0.663100 0.553800
-27.102699 45.320202 -5.735100 0.706300 0.587600
-25.491899 42.827301 -2.370100 0.813300 0.554500
-28.380600 42.330502 -3.056600 0.853500 0.507000
-27.637899 42.321201 -1.984400 0.816200 0.507300
-26.246300 42.901402 -5.383600 0.880100 0.569900
-28.380600 42.330502 -3.056600 0.853500 0.507000
-25.491899 42.827301 -2.370100 0.813300 0.554500
-2.162800 35.743500 -9.599900 0.096700 0.631800
-0.000000 35.795200 -9.599900 0.068300 0.631800
-0.000000 38.221600 -8.073300 0.073400 0.661600
-2.827600 38.171799 -8.088300 0.114700 0.661600
-0.706900 62.538601 -0.289700 0.409100 0.538600
-1.838200 62.255798 -0.802600 0.430000 0.507000
-1.901400 63.532299 -1.247600 0.451500 0.531400
-0.672300 63.485901 -0.421800 0.426300 0.552700
-1.901400 63.532299 -1.247600 0.451500 0.531400
-1.838200 62.255798 -0.802600 0.430000 0.507000
-3.194200 60.597198 -3.460400 0.492000 0.451400
-2.758700 63.532299 -3.348800 0.499700 0.518700
-2.758700 63.532299 -3.348800 0.499700 0.518700
-3.194200 60.597198 -3.460400 0.492000 0.451400
-3.446000 60.597198 -5.980300 0.552100 0.445900
-3.010600 63.532299 -5.868700 0.554200 0.511800
-3.194200 60.597198 -3.460400 0.492000 0.451400
-1.838200 62.255798 -0.802600 0.430000 0.507000
-2.336800 60.597198 -1.072500 0.434100 0.460700
-2.130500 53.628601 -1.359200 0.416700 0.297200
-4.088800 54.879799 -3.460400 0.486800 0.316000
-3.194200 60.597198 -3.460400 0.492000 0.451400
-2.336800 60.597198 -1.072500 0.434100 0.460700
-4.088800 54.879799 -3.460400 0.486800 0.316000
-4.340700 55.234299 -6.210400 0.542400 0.331500
-3.446000 60.597198 -5.980300 0.552100 0.445900
-3.194200 60.597198 -3.460400 0.492000 0.451400
-3.010600 63.532299 -5.868700 0.554200 0.511800
-3.446000 60.597198 -5.980300 0.552100 0.445900
-2.517200 60.597198 -7.879200 0.601000 0.450200
-1.932100 63.532299 -7.311200 0.591100 0.519300
-3.446000 60.597198 -5.980300 0.552100 0.445900
-4.340700 55.234299 -6.210400 0.542400 0.331500
-2.990300 54.496300 -8.246000 0.608400 0.297700
-2.517200 60.597198 -7.879200 0.601000 0.450200
-1.932100 63.532299 -7.311200 0.591100 0.519300
-2.517200 60.597198 -7.879200 0.601000 0.450200
-0.000000 60.597198 -8.812800 0.661800 0.464200
-0.000000 63.532299 -8.174500 0.634800 0.537700
-2.990300 54.496300 -8.246000 0.608400 0.297700
-0.000000 54.050800 -8.782700 0.682300 0.308600
-0.000000 60.597198 -8.812800 0.661800 0.464200
-2.517200 60.597198 -7.879200 0.601000 0.450200
-0.672300 63.485901 -0.421800 0.426300 0.552700
-1.901400 63.532299 -1.247600 0.451500 0.531400
-1.171400 65.057899 -2.205500 0.482000 0.564300
-1.901400 63.532299 -1.247600 0.451500 0.531400
-2.758700 63.532299 -3.348800 0.499700 0.518700
-1.795600 65.057899 -4.806100 0.538600 0.556700
-1.171400 65.057899 -2.205500 0.482000 0.564300
-2.758700 63.532299 -3.348800 0.499700 0.518700
-3.010600 63.532299 -5.868700 0.554200 0.511800
-1.795600 65.057899 -4.806100 0.538600 0.556700
-3.010600 63.532299 -5.868700 0.554200 0.511800
-1.932100 63.532299 -7.311200 0.591100 0.519300
-0.000000 65.057899 -6.421400 0.588900 0.582100
-1.795600 65.057899 -4.806100 0.538600 0.556700
-1.932100 63.532299 -7.311200 0.591100 0.519300
-0.000000 63.532299 -8.174500 0.634800 0.537700
-0.000000 65.057899 -6.421400 0.588900 0.582100
-1.171400 65.057899 -2.205500 0.482000 0.564300
-1.795600 65.057899 -4.806100 0.538600 0.556700
-0.000000 65.560898 -4.058400 0.523700 0.603300
-1.795600 65.057899 -4.806100 0.538600 0.556700
-0.000000 65.057899 -6.421400 0.588900 0.582100
-0.000000 65.560898 -4.058400 0.523700 0.603300
-0.672300 63.485901 -0.421800 0.426300 0.552700
-1.171400 65.057899 -2.205500 0.482000 0.564300
--1.171400 65.057899 -2.205500 0.466700 0.607600
--0.672300 63.485901 -0.421800 0.416100 0.581700
-0.706900 62.538601 -0.289700 0.409100 0.538600
-0.672300 63.485901 -0.421800 0.426300 0.552700
-0.000000 62.538601 -0.140300 0.398200 0.559100
-0.672300 63.485901 -0.421800 0.426300 0.552700
--0.672300 63.485901 -0.421800 0.416100 0.581700
-0.000000 62.538601 -0.140300 0.398200 0.559100
-2.130500 53.628601 -1.359200 0.416700 0.297200
-2.336800 60.597198 -1.072500 0.434100 0.460700
-1.393700 60.597198 -3.164700 0.380300 0.463400
-1.187300 53.628601 -3.164700 0.369000 0.300200
--0.706900 62.538601 -0.289700 0.409100 0.538600
--0.672300 63.485901 -0.421800 0.426300 0.552800
--1.901400 63.532299 -1.247600 0.451500 0.531500
--1.838200 62.255798 -0.802600 0.430000 0.507100
--1.901400 63.532299 -1.247600 0.451500 0.531500
--2.758700 63.532299 -3.348800 0.499700 0.518800
--3.194200 60.597198 -3.460400 0.492000 0.451500
--1.838200 62.255798 -0.802600 0.430000 0.507100
--2.758700 63.532299 -3.348800 0.499700 0.518800
--3.010600 63.532299 -5.868700 0.554200 0.511900
--3.446000 60.597198 -5.980300 0.552100 0.445900
--3.194200 60.597198 -3.460400 0.492000 0.451500
--3.194200 60.597198 -3.460400 0.492000 0.451500
--2.336800 60.597198 -1.072500 0.434000 0.460800
--1.838200 62.255798 -0.802600 0.430000 0.507100
--2.130500 53.628601 -1.359200 0.416600 0.297300
--2.336800 60.597198 -1.072500 0.434000 0.460800
--3.194200 60.597198 -3.460400 0.492000 0.451500
--4.088800 54.879799 -3.460400 0.486700 0.316100
--4.088800 54.879799 -3.460400 0.486700 0.316100
--3.194200 60.597198 -3.460400 0.492000 0.451500
--3.446000 60.597198 -5.980300 0.552100 0.445900
--4.340700 55.234299 -6.210400 0.542400 0.331500
--3.010600 63.532299 -5.868700 0.554200 0.511900
--1.932100 63.532299 -7.311200 0.591100 0.519300
--2.517200 60.597198 -7.879200 0.601000 0.450300
--3.446000 60.597198 -5.980300 0.552100 0.445900
--3.446000 60.597198 -5.980300 0.552100 0.445900
--2.517200 60.597198 -7.879200 0.601000 0.450300
--2.990300 54.496300 -8.246000 0.608300 0.297700
--4.340700 55.234299 -6.210400 0.542400 0.331500
--1.932100 63.532299 -7.311200 0.591100 0.519300
-0.000000 63.532299 -8.174500 0.634800 0.537700
-0.000000 60.597198 -8.812800 0.661800 0.464200
--2.517200 60.597198 -7.879200 0.601000 0.450300
--2.990300 54.496300 -8.246000 0.608300 0.297700
--2.517200 60.597198 -7.879200 0.601000 0.450300
-0.000000 60.597198 -8.812800 0.661800 0.464200
-0.000000 54.050800 -8.782700 0.682300 0.308600
--0.672300 63.485901 -0.421800 0.426300 0.552800
--1.171400 65.057899 -2.205500 0.482000 0.564400
--1.901400 63.532299 -1.247600 0.451500 0.531500
--1.901400 63.532299 -1.247600 0.451500 0.531500
--1.171400 65.057899 -2.205500 0.482000 0.564400
--1.795600 65.057899 -4.806100 0.538600 0.556700
--2.758700 63.532299 -3.348800 0.499700 0.518800
--2.758700 63.532299 -3.348800 0.499700 0.518800
--1.795600 65.057899 -4.806100 0.538600 0.556700
--3.010600 63.532299 -5.868700 0.554200 0.511900
--3.010600 63.532299 -5.868700 0.554200 0.511900
--1.795600 65.057899 -4.806100 0.538600 0.556700
-0.000000 65.057899 -6.421400 0.589000 0.582100
--1.932100 63.532299 -7.311200 0.591100 0.519300
--1.932100 63.532299 -7.311200 0.591100 0.519300
-0.000000 65.057899 -6.421400 0.589000 0.582100
-0.000000 63.532299 -8.174500 0.634800 0.537700
--1.171400 65.057899 -2.205500 0.482000 0.564400
-0.000000 65.560898 -4.058400 0.523700 0.603400
--1.795600 65.057899 -4.806100 0.538600 0.556700
--1.795600 65.057899 -4.806100 0.538600 0.556700
-0.000000 65.560898 -4.058400 0.523700 0.603400
-0.000000 65.057899 -6.421400 0.589000 0.582100
--1.171400 65.057899 -2.205500 0.466700 0.607600
-1.171400 65.057899 -2.205500 0.482000 0.564300
-0.000000 65.560898 -4.058400 0.523700 0.603300
--0.706900 62.538601 -0.289700 0.409100 0.538600
-0.000000 62.538601 -0.140300 0.398200 0.559200
--0.672300 63.485901 -0.421800 0.426300 0.552800
--2.130500 53.628601 -1.359200 0.416600 0.297300
--1.187300 53.628601 -3.164700 0.369000 0.300300
--1.393700 60.597198 -3.164700 0.380200 0.463500
--2.336800 60.597198 -1.072500 0.434000 0.460800
-8.704300 24.905701 -6.036500 0.967100 0.466200
-7.984800 25.127701 -6.177400 0.966400 0.464600
-7.649900 27.558001 -5.856100 0.993500 0.506600
-8.503900 27.435900 -5.670300 0.976600 0.507100
-6.463600 36.223400 -3.704900 0.962000 0.710700
-5.778000 35.994701 -1.773100 0.922200 0.717000
-7.451900 27.210300 -3.504400 0.930000 0.516400
-8.503900 27.435900 -5.670300 0.976600 0.507100
-5.115000 35.782600 -2.051700 0.916000 0.725700
-6.597900 27.332300 -3.690200 0.913000 0.515500
-7.451900 27.210300 -3.504400 0.930000 0.516400
-5.778000 35.994701 -1.773100 0.922200 0.717000
-5.743400 36.019600 -3.995900 0.971100 0.718900
-6.463600 36.223400 -3.704900 0.962000 0.710700
-8.503900 27.435900 -5.670300 0.976600 0.507100
-7.649900 27.558001 -5.856100 0.993500 0.506600
-7.451900 27.210300 -3.504400 0.930000 0.516400
-6.597900 27.332300 -3.690200 0.913000 0.515500
-7.984800 25.127701 -6.177400 0.966400 0.464600
-8.704300 24.905701 -6.036500 0.967100 0.466200
-7.451900 27.210300 -3.504400 0.930000 0.516400
-8.704300 24.905701 -6.036500 0.967100 0.466200
-8.503900 27.435900 -5.670300 0.976600 0.507100
-6.463600 36.223400 -3.704900 0.962000 0.710700
-5.743400 36.019600 -3.995900 0.971100 0.718900
-5.115000 35.782600 -2.051700 0.916000 0.725700
-5.778000 35.994701 -1.773100 0.922200 0.717000
-4.513000 55.007702 -5.909800 0.935300 0.759300
-4.291100 55.098900 -5.871800 0.932300 0.755300
-4.207800 55.799599 -6.651700 0.967500 0.768900
-4.871900 55.799599 -6.765400 0.957200 0.775300
-2.904000 62.455601 -5.700500 0.954300 0.968000
-2.764700 62.455601 -4.128400 0.909900 0.975800
-4.736600 55.799599 -5.153900 0.919700 0.781300
-4.871900 55.799599 -6.765400 0.957200 0.775300
-2.764700 62.455601 -4.128400 0.909900 0.975800
-4.072400 55.799599 -5.040200 0.904100 0.777700
-4.736600 55.799599 -5.153900 0.919700 0.781300
-2.904000 62.455601 -5.700500 0.954300 0.968000
-4.871900 55.799599 -6.765400 0.957200 0.775300
-4.207800 55.799599 -6.651700 0.967500 0.768900
-4.736600 55.799599 -5.153900 0.919700 0.781300
-4.072400 55.799599 -5.040200 0.904100 0.777700
-4.291100 55.098900 -5.871800 0.932300 0.755300
-4.513000 55.007702 -5.909800 0.935300 0.759300
-4.736600 55.799599 -5.153900 0.919700 0.781300
-4.513000 55.007702 -5.909800 0.935300 0.759300
-4.871900 55.799599 -6.765400 0.957200 0.775300
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meshes/ply/Normal_NoUVs_Colors.ply b/src/tests/evas/meshes/ply/Normal_NoUVs_Colors.ply
deleted file mode 100644
index 77a646fd50..0000000000
--- a/src/tests/evas/meshes/ply/Normal_NoUVs_Colors.ply
+++ /dev/null
@@ -1,1682 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-property uchar red
-property uchar green
-property uchar blue
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600 -0.021734 0.023193 -0.999495 0 253 27
--2.020300 14.610600 -8.278800 -0.021734 0.023193 -0.999495 0 253 27
--1.712600 0.024900 -9.195700 -0.021734 0.023193 -0.999495 254 68 73
--3.252600 0.001600 -8.591000 -0.021734 0.023193 -0.999495 254 68 73
--4.649800 14.945700 -8.785600 -0.983809 -0.091724 -0.153967 254 68 73
--3.252600 0.001600 -8.591000 -0.983809 -0.091724 -0.153967 254 88 92
--4.089400 2.633000 -5.031300 -0.983809 -0.091724 -0.153967 254 68 73
--5.308800 13.910900 -3.738700 -0.983809 -0.091724 -0.153967 254 68 73
--1.553600 3.059500 -4.173500 0.398905 -0.098999 0.911633 18 0 253
--1.766900 13.754900 -2.918700 0.398905 -0.098999 0.911633 0 254 27
--3.061600 3.537800 -3.461700 0.398905 -0.098999 0.911633 18 0 252
--1.553600 3.059500 -4.173500 0.977159 -0.002648 0.212493 18 0 253
--0.626000 0.031700 -8.336200 0.977159 -0.002648 0.212493 19 0 253
--0.971400 14.644800 -6.706400 0.977159 -0.002648 0.212493 27 229 30
--1.766900 13.754900 -2.918700 0.977159 -0.002648 0.212493 0 253 27
--5.495700 46.043098 -6.732400 -0.860977 -0.085411 -0.501422 254 254 254
--2.827600 38.171799 -8.088300 -0.860977 -0.085411 -0.501422 254 254 254
--5.919200 37.619099 -4.570300 -0.860977 -0.085411 -0.501422 254 254 254
--6.029500 46.188801 -3.956000 -0.860977 -0.085411 -0.501422 254 254 254
--4.685700 36.664101 -1.616400 -0.917535 -0.032092 0.396359 13 240 28
--4.298500 47.001099 -0.058900 -0.917535 -0.032092 0.396359 5 247 27
--6.029500 46.188801 -3.956000 -0.917535 -0.032092 0.396359 0 253 27
--5.919200 37.619099 -4.570300 -0.917535 -0.032092 0.396359 0 253 27
--6.775800 50.206501 -7.534500 -0.223809 0.028781 -0.974208 0 254 27
--7.252500 54.524502 -7.615000 -0.223809 0.028781 -0.974208 0 254 27
-0.000000 53.738098 -8.986800 -0.223809 0.028781 -0.974208 0 254 27
-0.000000 50.037800 -9.413700 -0.223809 0.028781 -0.974208 0 254 27
--7.252500 54.524502 -7.615000 -0.375359 0.901424 0.215731 0 253 27
--8.747800 53.770199 -7.353300 -0.375359 0.901424 0.215731 0 253 27
--8.184300 53.108700 -3.320400 -0.375359 0.901424 0.215731 0 253 27
--6.624100 53.529800 -2.653700 -0.375359 0.901424 0.215731 0 253 27
--9.827700 52.989700 -7.188500 -0.412168 0.895237 0.169320 0 253 27
--14.989100 50.565300 -7.297200 -0.412168 0.895237 0.169320 0 253 27
--15.636800 49.715099 -4.015700 -0.412168 0.895237 0.169320 0 253 27
--9.508400 52.403099 -3.672700 -0.412168 0.895237 0.169320 0 253 27
-0.000000 37.009800 0.550700 -0.339751 -0.089043 0.936291 172 124 55
-0.000000 47.287498 1.094200 -0.339751 -0.089043 0.936291 0 252 27
--4.298500 47.001099 -0.058900 -0.339751 -0.089043 0.936291 0 253 27
--4.685700 36.664101 -1.616400 -0.339751 -0.089043 0.936291 13 226 40
-0.000000 53.738098 -8.986800 -0.139268 0.841727 -0.521633 0 254 27
--7.252500 54.524502 -7.615000 -0.139268 0.841727 -0.521633 0 254 27
--2.321200 55.471001 -5.570800 -0.139268 0.841727 -0.521633 0 254 27
-0.000000 55.950600 -7.250100 -0.139268 0.841727 -0.521633 0 254 27
--6.624100 53.529800 -2.653700 -0.510018 -0.190129 0.838888 0 253 27
--7.813100 49.342701 -3.886900 -0.510018 -0.190129 0.838888 0 253 27
--6.029500 46.188801 -3.956000 -0.510018 -0.190129 0.838888 0 253 27
--3.773800 51.093601 -1.034300 -0.510018 -0.190129 0.838888 0 253 27
--6.029500 46.188801 -3.956000 -0.909885 0.202901 0.361857 0 253 27
--4.298500 47.001099 -0.058900 -0.909885 0.202901 0.361857 5 247 27
--3.773800 51.093601 -1.034300 -0.909885 0.202901 0.361857 0 253 27
-0.000000 50.880199 0.110000 -0.266804 0.255185 0.929352 0 253 27
--3.773800 51.093601 -1.034300 -0.266804 0.255185 0.929352 0 253 27
--4.298500 47.001099 -0.058900 -0.266804 0.255185 0.929352 0 253 27
-0.000000 47.287498 1.094200 -0.266804 0.255185 0.929352 0 252 27
--16.136200 50.023998 -7.546200 0.129075 0.179950 -0.975171 0 249 27
--14.989100 50.565300 -7.297200 0.129075 0.179950 -0.975171 0 252 27
--13.779500 47.417198 -7.715300 0.129075 0.179950 -0.975171 0 253 27
--14.885000 46.974701 -7.946000 0.129075 0.179950 -0.975171 0 251 27
--13.779500 47.417198 -7.715300 0.437873 -0.882573 -0.171264 0 253 27
--8.756500 49.321098 -7.632900 0.437873 -0.882573 -0.171264 0 253 27
--8.927200 49.128502 -4.128200 0.437873 -0.882573 -0.171264 0 253 27
--14.977100 45.689201 -4.821000 0.437873 -0.882573 -0.171264 0 248 31
--17.208200 49.477699 -7.512200 -0.268622 0.938905 0.215175 0 253 27
--22.585199 48.327702 -7.594400 -0.268622 0.938905 0.215175 0 253 27
--22.348700 46.932201 -2.822400 -0.268622 0.938905 0.215175 72 195 37
--16.810101 49.139900 -3.928800 -0.268622 0.938905 0.215175 0 253 27
--21.936399 43.055199 -3.733600 0.256926 -0.186034 0.948357 24 182 75
--16.192200 44.960400 -4.877100 0.256926 -0.186034 0.948357 0 236 42
--16.810101 49.139900 -3.928800 0.256926 -0.186034 0.948357 0 253 27
--22.348700 46.932201 -2.822400 0.256926 -0.186034 0.948357 72 195 37
--22.105101 44.119598 -7.074000 -0.471869 -0.161034 -0.866838 254 254 254
--23.337700 47.268200 -6.945000 -0.471869 -0.161034 -0.866838 254 254 254
--22.585199 48.327702 -7.594400 -0.471869 -0.161034 -0.866838 254 254 254
--21.061199 44.183601 -7.611200 -0.471869 -0.161034 -0.866838 254 254 254
--15.884600 46.520500 -7.855800 0.312108 -0.901546 -0.299673 0 250 27
--16.192200 44.960400 -4.877100 0.312108 -0.901546 -0.299673 0 253 27
--21.936399 43.055199 -3.733600 0.312108 -0.901546 -0.299673 0 253 27
--21.061199 44.183601 -7.611200 0.312108 -0.901546 -0.299673 52 208 31
--5.598500 31.822901 -1.405400 -0.899226 0.141575 0.413943 133 152 48
--7.174300 32.815300 -5.168000 -0.899226 0.141575 0.413943 0 253 27
--7.453900 29.910801 -4.782000 -0.899226 0.141575 0.413943 0 253 27
--4.970000 33.082802 -8.871300 -0.875321 0.068314 -0.478692 0 253 27
--5.595300 29.761600 -8.491100 -0.875321 0.068314 -0.478692 0 253 27
--7.453900 29.910801 -4.782000 -0.875321 0.068314 -0.478692 0 253 27
--7.174300 32.815300 -5.168000 -0.875321 0.068314 -0.478692 0 253 27
--6.827700 20.858999 -3.051400 -0.895608 -0.345701 -0.279959 254 254 254
--5.426000 21.341299 -8.131100 -0.895608 -0.345701 -0.279959 254 254 254
--6.194700 19.576300 -3.492500 -0.895608 -0.345701 -0.279959 254 254 254
--0.835600 22.853901 -8.203000 -0.044062 0.086408 -0.995285 0 253 27
--0.899900 21.410400 -8.342700 -0.044062 0.086408 -0.995285 0 253 27
--5.426000 21.341299 -8.131100 -0.044062 0.086408 -0.995285 0 253 27
--5.317800 22.936800 -8.014600 -0.044062 0.086408 -0.995285 0 253 27
--0.899900 21.410400 -8.342700 0.986890 0.053202 0.152371 219 57 99
--1.957400 20.620800 -1.217700 0.986890 0.053202 0.152371 254 68 73
--1.853000 19.164200 -1.385300 0.986890 0.053202 0.152371 254 68 73
--6.194700 19.576300 -3.492500 -0.393090 -0.299033 0.869517 114 254 128
--1.853000 19.164200 -1.385300 -0.393090 -0.299033 0.869517 242 254 242
--1.957400 20.620800 -1.217700 -0.393090 -0.299033 0.869517 242 254 242
--6.827700 20.858999 -3.051400 -0.393090 -0.299033 0.869517 168 254 177
--5.259600 15.490400 -9.599400 0.139442 0.106302 -0.984508 0 253 27
--5.426000 21.341299 -8.131100 0.139442 0.106302 -0.984508 0 253 27
--0.899900 21.410400 -8.342700 0.139442 0.106302 -0.984508 0 253 27
--0.294400 16.169500 -7.962700 0.139442 0.106302 -0.984508 0 253 27
--0.294400 16.169500 -7.962700 0.977002 0.117101 0.178197 0 253 27
--0.899900 21.410400 -8.342700 0.977002 0.117101 0.178197 1 216 59
--1.853000 19.164200 -1.385300 0.977002 0.117101 0.178197 0 253 27
--1.221800 14.450400 -2.004100 0.977002 0.117101 0.178197 0 253 27
--1.853000 19.164200 -1.385300 -0.395956 -0.119778 0.910424 254 254 254
--6.194700 19.576300 -3.492500 -0.395956 -0.119778 0.910424 254 254 254
--6.498700 14.643000 -4.000600 -0.395956 -0.119778 0.910424 91 254 108
--1.221800 14.450400 -2.004100 -0.395956 -0.119778 0.910424 0 254 27
--6.498700 14.643000 -4.000600 -0.982418 0.045709 -0.181012 254 254 254
--6.194700 19.576300 -3.492500 -0.982418 0.045709 -0.181012 254 254 254
--5.426000 21.341299 -8.131100 -0.982418 0.045709 -0.181012 254 254 254
--5.259600 15.490400 -9.599400 -0.982418 0.045709 -0.181012 254 254 254
--7.813100 49.342701 -3.886900 -0.881229 -0.394976 -0.259672 254 68 73
--6.775800 50.206501 -7.534500 -0.881229 -0.394976 -0.259672 254 68 73
--5.495700 46.043098 -6.732400 -0.881229 -0.394976 -0.259672 254 68 73
--6.029500 46.188801 -3.956000 -0.881229 -0.394976 -0.259672 254 68 73
--8.756500 49.321098 -7.632900 0.341557 -0.936397 -0.080618 0 254 27
--6.775800 50.206501 -7.534500 0.341557 -0.936397 -0.080618 0 254 27
--7.813100 49.342701 -3.886900 0.341557 -0.936397 -0.080618 0 254 27
--8.927200 49.128502 -4.128200 0.341557 -0.936397 -0.080618 0 254 27
--5.495700 46.043098 -6.732400 -0.295037 -0.218453 -0.930178 0 254 27
--6.775800 50.206501 -7.534500 -0.295037 -0.218453 -0.930178 0 254 27
-0.000000 50.037800 -9.413700 -0.295037 -0.218453 -0.930178 0 254 27
-0.000000 45.235802 -8.516300 -0.295037 -0.218453 -0.930178 0 254 27
--3.773800 51.093601 -1.034300 -0.217879 0.518058 0.827130 0 253 27
-0.000000 50.880199 0.110000 -0.217879 0.518058 0.827130 0 253 27
-0.000000 54.522099 -2.187600 -0.217879 0.518058 0.827130 0 253 27
--1.435700 55.057400 -2.884500 -0.217879 0.518058 0.827130 0 253 27
--0.163800 60.672798 0.405300 -0.878123 0.172158 0.446386 0 254 27
--0.596000 60.268700 -0.255900 -0.878123 0.172158 0.446386 0 254 27
--0.605400 59.453602 0.006800 -0.878123 0.172158 0.446386 0 254 27
--0.226300 59.631802 0.717000 -0.878123 0.172158 0.446386 0 254 27
-0.000000 59.375900 0.272700 -0.351825 0.003851 0.936058 0 254 27
--0.605400 59.453602 0.006800 -0.351825 0.003851 0.936058 0 254 27
--0.793500 58.611801 -0.022400 -0.351825 0.003851 0.936058 0 254 27
-0.000000 58.735298 0.237300 -0.351825 0.003851 0.936058 0 253 27
--1.340700 61.343498 -1.024900 -0.500896 0.173312 0.847978 254 254 254
--2.209500 61.230499 -1.515000 -0.500896 0.173312 0.847978 254 254 254
--2.225300 60.301201 -1.334400 -0.500896 0.173312 0.847978 254 254 254
--0.474100 61.294899 -0.607800 -0.419394 -0.893935 0.158081 254 254 254
--0.179900 61.274700 0.058500 -0.419394 -0.893935 0.158081 254 254 254
--0.785400 61.539799 -0.048800 -0.419394 -0.893935 0.158081 254 254 254
--0.163800 60.672798 0.405300 -0.879737 0.234636 0.413532 0 254 27
--0.179900 61.274700 0.058500 -0.879737 0.234636 0.413532 0 254 27
--0.474100 61.294899 -0.607800 -0.879737 0.234636 0.413532 0 254 27
--0.596000 60.268700 -0.255900 -0.879737 0.234636 0.413532 0 254 27
--0.785400 61.539799 -0.048800 -0.405349 0.400850 0.821591 0 254 27
-0.000000 62.775902 -0.355700 -0.405349 0.400850 0.821591 0 254 27
--1.901400 62.898899 -1.262500 -0.405349 0.400850 0.821591 0 254 27
--1.792100 61.563202 -0.648200 -0.405349 0.400850 0.821591 0 254 27
--1.901400 62.898899 -1.262500 -0.958885 0.139689 0.247034 254 254 254
--2.505800 61.413601 -3.333900 -0.958885 0.139689 0.247034 254 254 254
--2.209500 61.230499 -1.515000 -0.958885 0.139689 0.247034 254 254 254
--1.792100 61.563202 -0.648200 -0.958885 0.139689 0.247034 254 254 254
--2.071800 58.080299 -1.837600 -0.982605 0.010378 0.185418 254 254 254
--2.043500 58.694401 -1.722000 -0.982605 0.010378 0.185418 254 254 254
--2.361600 58.652599 -3.405400 -0.982605 0.010378 0.185418 254 254 254
--2.361600 58.652599 -3.405400 -0.835615 -0.547438 -0.045374 254 254 254
--1.480400 57.287800 -3.167400 -0.835615 -0.547438 -0.045374 254 254 254
--2.071800 58.080299 -1.837600 -0.835615 -0.547438 -0.045374 254 254 254
--2.361600 58.652599 -3.405400 -0.962379 -0.178153 0.205154 254 254 254
--2.043500 58.694401 -1.722000 -0.962379 -0.178153 0.205154 254 254 254
--2.225300 60.301201 -1.334400 -0.962379 -0.178153 0.205154 254 254 254
--2.484800 60.667999 -2.078300 -0.962379 -0.178153 0.205154 254 254 254
--0.596000 60.268700 -0.255900 -0.569338 0.180881 0.801958 0 254 27
--2.225300 60.301201 -1.334400 -0.569338 0.180881 0.801958 0 254 27
--0.793500 58.611801 -0.022400 -0.569338 0.180881 0.801958 0 254 27
--0.605400 59.453602 0.006800 -0.569338 0.180881 0.801958 0 254 27
--0.793500 58.611801 -0.022400 -0.424783 -0.113068 0.898207 0 254 27
--0.860300 57.339199 -0.345300 -0.424783 -0.113068 0.898207 0 253 27
-0.000000 57.320400 0.190300 -0.424783 -0.113068 0.898207 0 253 27
-0.000000 58.735298 0.237300 -0.424783 -0.113068 0.898207 0 253 27
--2.361600 58.652599 -3.405400 -0.801295 -0.555920 -0.221086 254 254 254
--1.507500 57.978802 -4.806700 -0.801295 -0.555920 -0.221086 254 254 254
--1.480400 57.287800 -3.167400 -0.801295 -0.555920 -0.221086 254 254 254
--1.480400 57.287800 -3.167400 -0.605736 -0.042761 0.794516 254 153 157
--1.435700 55.057400 -2.884500 -0.605736 -0.042761 0.794516 244 75 71
-0.000000 54.522099 -2.187600 -0.605736 -0.042761 0.794516 235 81 69
--0.509500 56.862801 -2.081200 -0.605736 -0.042761 0.794516 254 129 132
--1.435700 55.057400 -2.884500 -0.962522 0.132164 0.236820 254 68 73
--1.480400 57.287800 -3.167400 -0.962522 0.132164 0.236820 254 68 73
--1.507500 57.978802 -4.806700 -0.962522 0.132164 0.236820 254 68 73
--2.321200 55.471001 -5.570800 -0.962522 0.132164 0.236820 254 68 73
--5.259600 15.490400 -9.599400 0.329887 -0.177209 -0.927239 0 253 27
--0.294400 16.169500 -7.962700 0.329887 -0.177209 -0.927239 0 253 27
--2.020300 14.610600 -8.278800 0.329887 -0.177209 -0.927239 0 253 27
--0.294400 16.169500 -7.962700 0.923351 -0.382504 0.033356 157 130 53
--1.221800 14.450400 -2.004100 0.923351 -0.382504 0.033356 0 252 27
--0.971400 14.644800 -6.706400 0.923351 -0.382504 0.033356 27 229 30
--5.308800 13.910900 -3.738700 -0.281184 -0.501171 0.818391 23 254 48
--1.766900 13.754900 -2.918700 -0.281184 -0.501171 0.818391 0 254 27
--1.221800 14.450400 -2.004100 -0.281184 -0.501171 0.818391 0 254 27
--6.498700 14.643000 -4.000600 -0.281184 -0.501171 0.818391 91 254 108
--4.649800 14.945700 -8.785600 -0.465679 -0.853476 -0.233927 254 68 73
--5.308800 13.910900 -3.738700 -0.465679 -0.853476 -0.233927 254 68 73
--6.498700 14.643000 -4.000600 -0.465679 -0.853476 -0.233927 254 68 73
--5.259600 15.490400 -9.599400 -0.465679 -0.853476 -0.233927 254 68 73
--1.957400 20.620800 -1.217700 0.981627 0.066418 0.178877 0 253 27
--0.899900 21.410400 -8.342700 0.981627 0.066418 0.178877 1 216 59
--0.835600 22.853901 -8.203000 0.981627 0.066418 0.178877 2 205 69
--2.189200 21.987900 -1.481800 0.981627 0.066418 0.178877 0 253 27
--7.174300 32.815300 -5.168000 -0.882053 0.156893 -0.444261 0 253 27
--6.542300 35.480598 -4.902800 -0.882053 0.156893 -0.444261 0 253 27
--5.283200 35.952900 -7.814600 -0.882053 0.156893 -0.444261 0 254 27
--4.970000 33.082802 -8.871300 -0.882053 0.156893 -0.444261 0 253 27
--5.598500 31.822901 -1.405400 -0.892193 0.169920 0.418473 133 152 48
--6.542300 35.480598 -4.902800 -0.892193 0.169920 0.418473 0 253 27
--7.174300 32.815300 -5.168000 -0.892193 0.169920 0.418473 0 253 27
--4.685700 36.664101 -1.616400 -0.474113 0.127364 0.871203 13 226 40
--5.598500 31.822901 -1.405400 -0.474113 0.127364 0.871203 133 152 48
--3.798500 31.552500 -0.386300 -0.474113 0.127364 0.871203 211 97 63
--2.225300 60.301201 -1.334400 -0.926529 0.086891 0.366052 254 254 254
--2.209500 61.230499 -1.515000 -0.926529 0.086891 0.366052 254 254 254
--2.484800 60.667999 -2.078300 -0.926529 0.086891 0.366052 254 254 254
--8.927200 49.128502 -4.128200 -0.174303 -0.164506 0.970853 0 253 27
--7.813100 49.342701 -3.886900 -0.174303 -0.164506 0.970853 0 253 27
--8.184300 53.108700 -3.320400 -0.174303 -0.164506 0.970853 0 253 27
--9.508400 52.403099 -3.672700 -0.174303 -0.164506 0.970853 0 253 27
--8.184300 53.108700 -3.320400 -0.526523 0.826719 0.198265 0 253 27
--8.747800 53.770199 -7.353300 -0.526523 0.826719 0.198265 0 253 27
--9.827700 52.989700 -7.188500 -0.526523 0.826719 0.198265 0 253 27
--9.508400 52.403099 -3.672700 -0.526523 0.826719 0.198265 0 253 27
--8.747800 53.770199 -7.353300 -0.154881 -0.035505 -0.987295 0 254 27
--7.252500 54.524502 -7.615000 -0.154881 -0.035505 -0.987295 0 254 27
--6.775800 50.206501 -7.534500 -0.154881 -0.035505 -0.987295 0 254 27
--8.927200 49.128502 -4.128200 0.001669 -0.169906 0.985459 0 253 27
--9.508400 52.403099 -3.672700 0.001669 -0.169906 0.985459 0 253 27
--15.636800 49.715099 -4.015700 0.001669 -0.169906 0.985459 0 253 27
--14.977100 45.689201 -4.821000 0.001669 -0.169906 0.985459 0 248 31
--6.624100 53.529800 -2.653700 -0.215818 0.814400 0.538680 0 253 27
--3.773800 51.093601 -1.034300 -0.215818 0.814400 0.538680 0 253 27
--1.435700 55.057400 -2.884500 -0.215818 0.814400 0.538680 0 253 27
--7.252500 54.524502 -7.615000 -0.215818 0.814400 0.538680 0 253 27
--2.321200 55.471001 -5.570800 -0.276118 0.932071 0.234526 0 253 27
--7.252500 54.524502 -7.615000 -0.276118 0.932071 0.234526 0 253 27
--1.435700 55.057400 -2.884500 -0.276118 0.932071 0.234526 0 253 27
--2.209500 61.230499 -1.515000 -0.942806 0.279456 0.181716 254 254 254
--2.505800 61.413601 -3.333900 -0.942806 0.279456 0.181716 254 254 254
--2.484800 60.667999 -2.078300 -0.942806 0.279456 0.181716 254 254 254
--2.484800 60.667999 -2.078300 -0.998559 -0.051788 -0.014052 254 254 254
--2.505800 61.413601 -3.333900 -0.998559 -0.051788 -0.014052 254 254 254
--2.361600 58.652599 -3.405400 -0.998559 -0.051788 -0.014052 254 254 254
--2.209500 61.230499 -1.515000 -0.107977 -0.909631 0.401138 254 254 254
--1.340700 61.343498 -1.024900 -0.107977 -0.909631 0.401138 254 254 254
--1.792100 61.563202 -0.648200 -0.107977 -0.909631 0.401138 254 254 254
--3.061600 3.537800 -3.461700 0.234488 0.898953 0.369997 18 0 252
--3.735600 1.816900 0.228400 0.234488 0.898953 0.369997 18 0 253
--1.568700 1.981700 -0.627100 0.234488 0.898953 0.369997 18 0 253
--1.553600 3.059500 -4.173500 0.234488 0.898953 0.369997 18 0 253
--0.626000 0.031700 -8.336200 0.992053 0.072189 0.103052 18 0 253
--1.553600 3.059500 -4.173500 0.992053 0.072189 0.103052 18 0 253
--1.568700 1.981700 -0.627100 0.992053 0.072189 0.103052 18 0 253
--1.825200 -0.024100 0.601200 0.992053 0.072189 0.103052 18 0 253
--1.825200 -0.024100 0.601200 -0.002195 -0.999985 -0.005027 18 0 253
--3.769300 -0.009000 1.132900 -0.002195 -0.999985 -0.005027 18 0 253
--1.712600 0.024900 -9.195700 -0.002195 -0.999985 -0.005027 19 0 253
--0.626000 0.031700 -8.336200 -0.002195 -0.999985 -0.005027 19 0 253
--1.712600 0.024900 -9.195700 0.748722 0.074200 -0.658719 254 68 73
--2.020300 14.610600 -8.278800 0.748722 0.074200 -0.658719 0 253 27
--0.971400 14.644800 -6.706400 0.748722 0.074200 -0.658719 0 253 27
--0.626000 0.031700 -8.336200 0.748722 0.074200 -0.658719 254 68 73
--1.568700 1.981700 -0.627100 0.270273 0.452545 0.849798 18 0 253
--3.735600 1.816900 0.228400 0.270273 0.452545 0.849798 18 0 253
--3.769300 -0.009000 1.132900 0.270273 0.452545 0.849798 18 0 253
--1.825200 -0.024100 0.601200 0.270273 0.452545 0.849798 19 0 253
--4.089400 2.633000 -5.031300 -0.957442 -0.073711 -0.279054 188 254 194
--3.252600 0.001600 -8.591000 -0.957442 -0.073711 -0.279054 0 254 27
--5.176800 -0.025000 -0.598300 -0.957442 -0.073711 -0.279054 254 254 254
--5.390300 1.568200 -1.670300 -0.957442 -0.073711 -0.279054 254 254 254
--3.769300 -0.009000 1.132900 -0.738109 0.308147 0.600201 18 0 253
--3.735600 1.816900 0.228400 -0.738109 0.308147 0.600201 18 0 253
--5.390300 1.568200 -1.670300 -0.738109 0.308147 0.600201 18 0 253
--5.176800 -0.025000 -0.598300 -0.738109 0.308147 0.600201 18 0 253
--5.390300 1.568200 -1.670300 -0.560649 0.811720 0.163660 18 0 253
--3.735600 1.816900 0.228400 -0.560649 0.811720 0.163660 18 0 253
--3.061600 3.537800 -3.461700 -0.560649 0.811720 0.163660 18 0 252
--4.089400 2.633000 -5.031300 -0.560649 0.811720 0.163660 18 0 252
--3.061600 3.537800 -3.461700 -0.452521 -0.074303 0.888653 18 0 252
--1.766900 13.754900 -2.918700 -0.452521 -0.074303 0.888653 0 254 27
--5.308800 13.910900 -3.738700 -0.452521 -0.074303 0.888653 14 254 41
--4.089400 2.633000 -5.031300 -0.452521 -0.074303 0.888653 18 0 252
--2.020300 14.610600 -8.278800 0.001520 -0.830500 -0.557017 0 253 27
--4.649800 14.945700 -8.785600 0.001520 -0.830500 -0.557017 0 253 27
--5.259600 15.490400 -9.599400 0.001520 -0.830500 -0.557017 0 253 27
--2.020300 14.610600 -8.278800 0.649568 -0.634088 -0.419515 0 253 27
--0.294400 16.169500 -7.962700 0.649568 -0.634088 -0.419515 0 253 27
--0.971400 14.644800 -6.706400 0.649568 -0.634088 -0.419515 0 253 27
--5.426000 21.341299 -8.131100 -0.959570 0.028386 -0.280036 254 254 254
--6.827700 20.858999 -3.051400 -0.959570 0.028386 -0.280036 254 254 254
--6.824000 22.193899 -3.254300 -0.959570 0.028386 -0.280036 254 254 254
--5.317800 22.936800 -8.014600 -0.959570 0.028386 -0.280036 254 254 254
--0.845100 29.891001 -9.491500 -0.126028 -0.127868 -0.983751 0 253 27
--0.835600 22.853901 -8.203000 -0.126028 -0.127868 -0.983751 0 253 27
--5.317800 22.936800 -8.014600 -0.126028 -0.127868 -0.983751 0 253 27
--5.595300 29.761600 -8.491100 -0.126028 -0.127868 -0.983751 0 254 27
--1.957400 20.620800 -1.217700 -0.346283 0.131313 0.928895 242 254 242
--2.189200 21.987900 -1.481800 -0.346283 0.131313 0.928895 218 254 222
--6.824000 22.193899 -3.254300 -0.346283 0.131313 0.928895 99 254 117
--6.827700 20.858999 -3.051400 -0.346283 0.131313 0.928895 166 254 175
--0.605400 59.453602 0.006800 -0.276378 -0.886938 0.370075 254 254 254
-0.000000 59.375900 0.272700 -0.276378 -0.886938 0.370075 254 254 254
--0.226300 59.631802 0.717000 -0.276378 -0.886938 0.370075 254 254 254
--21.936399 43.055199 -3.733600 -0.245050 -0.199318 0.948801 24 182 75
--22.348700 46.932201 -2.822400 -0.245050 -0.199318 0.948801 72 195 37
--23.323000 46.228001 -3.425200 -0.245050 -0.199318 0.948801 26 230 29
--23.265499 44.290199 -3.614200 -0.245050 -0.199318 0.948801 37 214 37
--22.105101 44.119598 -7.074000 -0.680722 -0.210597 -0.701617 254 254 254
--23.273100 44.479099 -6.170500 -0.680722 -0.210597 -0.701617 254 254 254
--23.881300 46.267799 -5.995500 -0.680722 -0.210597 -0.701617 254 254 254
--23.337700 47.268200 -6.945000 -0.680722 -0.210597 -0.701617 254 254 254
--22.348700 46.932201 -2.822400 -0.710630 0.673907 0.202126 72 195 37
--23.337700 47.268200 -6.945000 -0.710630 0.673907 0.202126 0 254 27
--23.881300 46.267799 -5.995500 -0.710630 0.673907 0.202126 0 253 27
--23.323000 46.228001 -3.425200 -0.710630 0.673907 0.202126 26 230 29
--21.936399 43.055199 -3.733600 -0.575702 -0.803125 -0.153486 254 68 73
--23.265499 44.290199 -3.614200 -0.575702 -0.803125 -0.153486 254 68 73
--23.273100 44.479099 -6.170500 -0.575702 -0.803125 -0.153486 254 68 73
--22.105101 44.119598 -7.074000 -0.575702 -0.803125 -0.153486 254 68 73
--23.323000 46.228001 -3.425200 0.234519 0.052147 0.970712 26 230 29
--24.935400 45.742901 -3.288800 0.234519 0.052147 0.970712 80 189 39
--24.446100 44.099098 -3.039500 0.234519 0.052147 0.970712 144 136 53
--23.265499 44.290199 -3.614200 0.234519 0.052147 0.970712 37 214 37
--23.273100 44.479099 -6.170500 -0.051663 0.047611 -0.997529 16 254 41
--25.718901 44.407902 -5.989100 -0.051663 0.047611 -0.997529 47 254 71
--25.982700 45.641201 -5.974700 -0.051663 0.047611 -0.997529 53 254 75
--23.881300 46.267799 -5.995500 -0.051663 0.047611 -0.997529 23 254 48
--23.881300 46.267799 -5.995500 -0.283035 0.956157 0.075198 0 253 27
--25.982700 45.641201 -5.974700 -0.283035 0.956157 0.075198 0 253 27
--24.935400 45.742901 -3.288800 -0.283035 0.956157 0.075198 80 189 39
--23.323000 46.228001 -3.425200 -0.283035 0.956157 0.075198 26 230 29
--23.265499 44.290199 -3.614200 0.050680 -0.993534 -0.101596 0 254 27
--24.446100 44.099098 -3.039500 0.050680 -0.993534 -0.101596 0 254 27
--25.718901 44.407902 -5.989100 0.050680 -0.993534 -0.101596 47 254 71
--23.273100 44.479099 -6.170500 0.050680 -0.993534 -0.101596 16 254 41
--3.798500 31.552500 -0.386300 -0.302820 0.047342 0.951871 211 97 63
-0.000000 31.552500 0.128500 -0.302820 0.047342 0.951871 203 101 62
-0.000000 37.009800 0.550700 -0.302820 0.047342 0.951871 172 124 55
--4.685700 36.664101 -1.616400 -0.302820 0.047342 0.951871 13 226 40
--27.058001 43.733101 -1.471100 -0.612973 -0.035197 0.789319 254 68 73
--28.100901 44.177299 -2.470000 -0.612973 -0.035197 0.789319 231 80 64
--27.637899 42.321201 -1.984400 -0.612973 -0.035197 0.789319 254 68 73
--26.775499 43.007000 -1.492900 -0.612973 -0.035197 0.789319 254 68 73
--27.102699 45.320202 -5.735100 -0.288380 -0.175341 -0.941325 75 254 93
--25.982700 45.641201 -5.974700 -0.288380 -0.175341 -0.941325 53 254 75
--25.718901 44.407902 -5.989100 -0.288380 -0.175341 -0.941325 47 254 71
--26.246300 42.901402 -5.383600 -0.288380 -0.175341 -0.941325 20 254 46
--24.935400 45.742901 -3.288800 -0.215944 0.976143 0.022647 80 254 99
--25.982700 45.641201 -5.974700 -0.215944 0.976143 0.022647 0 254 27
--27.102699 45.320202 -5.735100 -0.215944 0.976143 0.022647 0 254 27
--26.753901 45.398300 -2.858600 -0.215944 0.976143 0.022647 163 254 174
--24.446100 44.099098 -3.039500 0.806467 -0.440747 -0.394147 0 249 30
--26.246300 42.901402 -5.383600 0.806467 -0.440747 -0.394147 19 213 43
--25.718901 44.407902 -5.989100 0.806467 -0.440747 -0.394147 46 208 34
--28.380600 42.330502 -3.056600 -0.840529 -0.044209 0.539960 254 68 73
--27.637899 42.321201 -1.984400 -0.840529 -0.044209 0.539960 254 68 73
--28.100901 44.177299 -2.470000 -0.840529 -0.044209 0.539960 254 68 73
--28.697901 44.238201 -3.477500 -0.840529 -0.044209 0.539960 254 68 73
--28.380600 42.330502 -3.056600 -0.979149 -0.175223 -0.102788 254 254 254
--28.697901 44.238201 -3.477500 -0.979149 -0.175223 -0.102788 254 254 254
--28.543800 44.178001 -4.651400 -0.979149 -0.175223 -0.102788 254 254 254
--28.292801 42.543098 -4.446800 -0.979149 -0.175223 -0.102788 254 254 254
--26.753901 45.398300 -2.858600 -0.560189 0.737837 0.376544 163 125 53
--28.697901 44.238201 -3.477500 -0.560189 0.737837 0.376544 97 175 41
--28.100901 44.177299 -2.470000 -0.560189 0.737837 0.376544 231 80 64
--24.935400 45.742901 -3.288800 0.484106 0.321222 0.813915 80 189 39
--26.117701 44.487900 -2.198700 0.484106 0.321222 0.813915 242 74 67
--25.587200 43.557701 -2.038700 0.484106 0.321222 0.813915 253 67 73
--24.446100 44.099098 -3.039500 0.484106 0.321222 0.813915 144 136 53
--24.446100 44.099098 -3.039500 0.765721 -0.642695 -0.024780 0 249 30
--25.587200 43.557701 -2.038700 0.765721 -0.642695 -0.024780 0 252 27
--25.491899 42.827301 -2.370100 0.765721 -0.642695 -0.024780 0 245 34
--26.246300 42.901402 -5.383600 0.765721 -0.642695 -0.024780 19 213 43
--26.753901 45.398300 -2.858600 0.068715 0.616533 0.784324 163 125 53
--26.117701 44.487900 -2.198700 0.068715 0.616533 0.784324 242 74 67
--24.935400 45.742901 -3.288800 0.068715 0.616533 0.784324 80 189 39
-0.000000 31.552500 0.128500 -0.069551 -0.031626 0.997077 203 101 62
--3.798500 31.552500 -0.386300 -0.069551 -0.031626 0.997077 211 97 63
--3.463700 23.872801 -0.356700 -0.069551 -0.031626 0.997077 254 68 73
-0.000000 24.132099 -0.356700 -0.069551 -0.031626 0.997077 243 74 70
--2.225300 60.301201 -1.334400 -0.789816 -0.226827 0.569860 254 254 254
--2.043500 58.694401 -1.722000 -0.789816 -0.226827 0.569860 254 247 247
--0.793500 58.611801 -0.022400 -0.789816 -0.226827 0.569860 254 246 246
--0.793500 58.611801 -0.022400 -0.800106 -0.097243 0.591924 254 246 246
--2.043500 58.694401 -1.722000 -0.800106 -0.097243 0.591924 254 247 247
--2.071800 58.080299 -1.837600 -0.800106 -0.097243 0.591924 254 224 225
--0.860300 57.339199 -0.345300 -0.800106 -0.097243 0.591924 254 172 174
--2.071800 58.080299 -1.837600 -0.594038 -0.791272 0.144939 254 224 225
--1.480400 57.287800 -3.167400 -0.594038 -0.791272 0.144939 254 153 157
--0.509500 56.862801 -2.081200 -0.594038 -0.791272 0.144939 254 129 132
--0.860300 57.339199 -0.345300 -0.594038 -0.791272 0.144939 254 172 174
--0.179900 61.274700 0.058500 -0.090663 0.188705 0.977840 0 254 27
-0.000000 61.912998 -0.048000 -0.090663 0.188705 0.977840 0 254 27
--0.785400 61.539799 -0.048800 -0.090663 0.188705 0.977840 0 254 27
--15.884600 46.520500 -7.855800 -0.098387 0.080586 -0.991880 0 250 27
--17.208200 49.477699 -7.512200 -0.098387 0.080586 -0.991880 6 242 27
--16.136200 50.023998 -7.546200 -0.098387 0.080586 -0.991880 0 249 27
--14.885000 46.974701 -7.946000 -0.098387 0.080586 -0.991880 0 251 27
--15.636800 49.715099 -4.015700 -0.436830 0.889212 0.135946 0 253 27
--16.136200 50.023998 -7.546200 -0.436830 0.889212 0.135946 0 253 27
--17.208200 49.477699 -7.512200 -0.436830 0.889212 0.135946 0 253 27
--16.810101 49.139900 -3.928800 -0.436830 0.889212 0.135946 0 253 27
--16.192200 44.960400 -4.877100 0.435886 -0.826304 -0.356686 0 236 42
--15.884600 46.520500 -7.855800 0.435886 -0.826304 -0.356686 0 253 27
--14.885000 46.974701 -7.946000 0.435886 -0.826304 -0.356686 0 253 27
--14.977100 45.689201 -4.821000 0.435886 -0.826304 -0.356686 0 248 31
--16.810101 49.139900 -3.928800 0.116417 -0.190205 0.974818 236 81 69
--16.192200 44.960400 -4.877100 0.116417 -0.190205 0.974818 200 90 77
--14.977100 45.689201 -4.821000 0.116417 -0.190205 0.974818 174 120 62
--15.636800 49.715099 -4.015700 0.116417 -0.190205 0.974818 218 94 66
--13.779500 47.417198 -7.715300 -0.030432 0.115440 -0.992848 0 253 27
--14.989100 50.565300 -7.297200 -0.030432 0.115440 -0.992848 0 252 27
--9.827700 52.989700 -7.188500 -0.030432 0.115440 -0.992848 0 253 27
--8.756500 49.321098 -7.632900 -0.030432 0.115440 -0.992848 0 253 27
--15.636800 49.715099 -4.015700 -0.447311 0.883265 0.140554 0 253 27
--14.989100 50.565300 -7.297200 -0.447311 0.883265 0.140554 0 253 27
--16.136200 50.023998 -7.546200 -0.447311 0.883265 0.140554 0 253 27
--13.779500 47.417198 -7.715300 0.409629 -0.847844 -0.336697 0 253 27
--14.977100 45.689201 -4.821000 0.409629 -0.847844 -0.336697 0 253 27
--14.885000 46.974701 -7.946000 0.409629 -0.847844 -0.336697 0 251 27
--0.971400 14.644800 -6.706400 0.777065 -0.629233 0.015366 27 229 30
--1.221800 14.450400 -2.004100 0.777065 -0.629233 0.015366 0 252 27
--1.766900 13.754900 -2.918700 0.777065 -0.629233 0.015366 0 253 27
--26.117701 44.487900 -2.198700 0.374471 0.258120 0.890587 242 74 67
--27.058001 43.733101 -1.471100 0.374471 0.258120 0.890587 254 68 73
--26.775499 43.007000 -1.492900 0.374471 0.258120 0.890587 254 68 73
--25.587200 43.557701 -2.038700 0.374471 0.258120 0.890587 253 67 73
--25.587200 43.557701 -2.038700 0.386633 -0.610879 0.690899 0 252 27
--26.775499 43.007000 -1.492900 0.386633 -0.610879 0.690899 0 253 27
--27.637899 42.321201 -1.984400 0.386633 -0.610879 0.690899 0 253 27
--25.491899 42.827301 -2.370100 0.386633 -0.610879 0.690899 0 245 34
--26.117701 44.487900 -2.198700 -0.202601 0.798645 0.566673 242 74 67
--28.100901 44.177299 -2.470000 -0.202601 0.798645 0.566673 231 80 64
--27.058001 43.733101 -1.471100 -0.202601 0.798645 0.566673 254 68 73
--8.184300 53.108700 -3.320400 -0.347207 -0.172872 0.921717 0 253 27
--7.813100 49.342701 -3.886900 -0.347207 -0.172872 0.921717 0 253 27
--6.624100 53.529800 -2.653700 -0.347207 -0.172872 0.921717 0 253 27
--8.747800 53.770199 -7.353300 -0.055764 0.062731 -0.996471 0 254 27
--6.775800 50.206501 -7.534500 -0.055764 0.062731 -0.996471 0 254 27
--8.756500 49.321098 -7.632900 -0.055764 0.062731 -0.996471 0 254 27
--9.827700 52.989700 -7.188500 -0.055764 0.062731 -0.996471 0 254 27
--28.543800 44.178001 -4.651400 -0.562493 0.826801 -0.001192 0 254 27
--28.697901 44.238201 -3.477500 -0.562493 0.826801 -0.001192 97 254 114
--26.753901 45.398300 -2.858600 -0.562493 0.826801 -0.001192 163 254 174
--27.102699 45.320202 -5.735100 -0.562493 0.826801 -0.001192 0 254 27
--26.246300 42.901402 -5.383600 0.106461 -0.983873 -0.143736 20 231 27
--28.380600 42.330502 -3.056600 0.106461 -0.983873 -0.143736 0 252 27
--28.292801 42.543098 -4.446800 0.106461 -0.983873 -0.143736 5 243 27
--28.100901 44.177299 -2.470000 -0.192584 0.484112 0.853550 231 80 64
--26.117701 44.487900 -2.198700 -0.192584 0.484112 0.853550 242 74 67
--26.753901 45.398300 -2.858600 -0.192584 0.484112 0.853550 163 125 53
--1.712600 0.024900 -9.195700 0.013475 -0.999909 -0.000374 254 254 254
--3.769300 -0.009000 1.132900 0.013475 -0.999909 -0.000374 0 254 27
--5.176800 -0.025000 -0.598300 0.013475 -0.999909 -0.000374 0 254 27
--3.252600 0.001600 -8.591000 0.013475 -0.999909 -0.000374 254 254 254
-0.000000 61.912998 -0.048000 -0.158526 0.331625 0.929997 0 254 27
-0.000000 62.775902 -0.355700 -0.158526 0.331625 0.929997 0 254 27
--0.785400 61.539799 -0.048800 -0.158526 0.331625 0.929997 0 254 27
--0.340300 31.400700 -9.922000 0.943854 -0.327649 -0.042263 0 253 27
--0.425600 30.069099 -1.503600 0.943854 -0.327649 -0.042263 0 253 27
--0.845100 29.891001 -9.491500 0.943854 -0.327649 -0.042263 0 253 27
-0.000000 54.522099 -2.187600 0.000000 -0.045410 0.998968 235 81 69
-0.000000 56.862801 -2.081200 0.000000 -0.045410 0.998968 254 127 130
--0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968 254 129 132
--0.509500 56.862801 -2.081200 -0.098448 -0.971038 0.217700 254 129 132
-0.000000 56.862801 -2.081200 -0.098448 -0.971038 0.217700 254 127 130
-0.000000 57.320400 0.190300 -0.098448 -0.971038 0.217700 254 190 192
--0.860300 57.339199 -0.345300 -0.098448 -0.971038 0.217700 254 172 174
--5.598500 31.822901 -1.405400 -0.881296 0.021519 0.472075 133 152 48
--7.453900 29.910801 -4.782000 -0.881296 0.021519 0.472075 0 253 27
--6.824000 22.193899 -3.254300 -0.881296 0.021519 0.472075 99 254 117
--6.824000 22.193899 -3.254300 -0.921164 -0.108973 -0.373607 254 68 73
--7.453900 29.910801 -4.782000 -0.921164 -0.108973 -0.373607 254 68 73
--5.595300 29.761600 -8.491100 -0.921164 -0.108973 -0.373607 254 68 73
--5.317800 22.936800 -8.014600 -0.921164 -0.108973 -0.373607 254 68 73
--3.798500 31.552500 -0.386300 -0.402805 -0.146650 0.903461 211 97 63
--5.598500 31.822901 -1.405400 -0.402805 -0.146650 0.903461 133 152 48
--6.824000 22.193899 -3.254300 -0.402805 -0.146650 0.903461 99 254 117
--2.189200 21.987900 -1.481800 -0.402805 -0.146650 0.903461 218 254 222
--0.340300 31.400700 -9.922000 -0.229486 -0.108632 -0.967231 0 253 27
--0.845100 29.891001 -9.491500 -0.229486 -0.108632 -0.967231 0 253 27
--5.595300 29.761600 -8.491100 -0.229486 -0.108632 -0.967231 0 254 27
--4.970000 33.082802 -8.871300 -0.229486 -0.108632 -0.967231 0 254 27
--0.835600 22.853901 -8.203000 0.992234 -0.110109 0.057862 2 205 69
--0.845100 29.891001 -9.491500 0.992234 -0.110109 0.057862 0 241 37
--0.425600 30.069099 -1.503600 0.992234 -0.110109 0.057862 0 253 27
--2.189200 21.987900 -1.481800 0.992234 -0.110109 0.057862 0 253 27
--2.162800 35.743500 -9.599900 -0.324262 0.084100 -0.942221 0 254 27
--0.340300 31.400700 -9.922000 -0.324262 0.084100 -0.942221 0 253 27
--4.970000 33.082802 -8.871300 -0.324262 0.084100 -0.942221 0 254 27
--5.283200 35.952900 -7.814600 -0.324262 0.084100 -0.942221 0 254 27
--5.283200 35.952900 -7.814600 -0.889642 0.311183 -0.334218 0 254 27
--6.542300 35.480598 -4.902800 -0.889642 0.311183 -0.334218 0 254 27
--5.919200 37.619099 -4.570300 -0.889642 0.311183 -0.334218 0 254 27
--5.919200 37.619099 -4.570300 -0.882633 0.186716 0.431389 0 253 27
--6.542300 35.480598 -4.902800 -0.882633 0.186716 0.431389 0 253 27
--5.598500 31.822901 -1.405400 -0.882633 0.186716 0.431389 133 152 48
--4.685700 36.664101 -1.616400 -0.882633 0.186716 0.431389 13 240 28
--0.474100 61.294899 -0.607800 -0.490764 0.255871 0.832875 0 254 27
--1.340700 61.343498 -1.024900 -0.490764 0.255871 0.832875 0 254 27
--2.225300 60.301201 -1.334400 -0.490764 0.255871 0.832875 0 254 27
--0.596000 60.268700 -0.255900 -0.490764 0.255871 0.832875 0 254 27
--1.340700 61.343498 -1.024900 -0.199083 -0.932669 0.300824 254 254 254
--0.474100 61.294899 -0.607800 -0.199083 -0.932669 0.300824 254 254 254
--0.785400 61.539799 -0.048800 -0.199083 -0.932669 0.300824 254 254 254
--1.792100 61.563202 -0.648200 -0.199083 -0.932669 0.300824 254 254 254
-0.000000 45.235802 -8.516300 -0.205813 0.023108 -0.978318 0 253 27
-0.000000 38.221600 -8.073300 -0.205813 0.023108 -0.978318 0 253 27
--2.827600 38.171799 -8.088300 -0.205813 0.023108 -0.978318 0 253 27
--5.495700 46.043098 -6.732400 -0.205813 0.023108 -0.978318 0 253 27
--0.425600 30.069099 -1.503600 0.289736 -0.060654 0.955183 254 254 254
--3.798500 31.552500 -0.386300 0.289736 -0.060654 0.955183 254 254 254
--2.189200 21.987900 -1.481800 0.289736 -0.060654 0.955183 254 254 254
-0.000000 31.547001 -9.939100 0.347255 -0.926523 -0.144807 254 68 73
-0.000000 30.215401 -1.522000 0.347255 -0.926523 -0.144807 254 68 73
--0.425600 30.069099 -1.503600 0.347255 -0.926523 -0.144807 254 68 73
--0.340300 31.400700 -9.922000 0.347255 -0.926523 -0.144807 254 68 73
--21.061199 44.183601 -7.611200 -0.028361 0.039319 -0.998824 52 208 31
--22.585199 48.327702 -7.594400 -0.028361 0.039319 -0.998824 104 170 42
--17.208200 49.477699 -7.512200 -0.028361 0.039319 -0.998824 6 242 27
--15.884600 46.520500 -7.855800 -0.028361 0.039319 -0.998824 0 250 27
--22.348700 46.932201 -2.822400 -0.723103 0.652497 0.226650 72 195 37
--22.585199 48.327702 -7.594400 -0.723103 0.652497 0.226650 0 253 27
--23.337700 47.268200 -6.945000 -0.723103 0.652497 0.226650 0 254 27
--21.061199 44.183601 -7.611200 -0.095048 -0.949863 -0.297868 52 208 31
--21.936399 43.055199 -3.733600 -0.095048 -0.949863 -0.297868 0 253 27
--22.105101 44.119598 -7.074000 -0.095048 -0.949863 -0.297868 30 225 27
-0.000000 59.375900 0.272700 0.000000 -0.866545 0.499100 254 254 254
-0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100 254 254 254
--0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100 254 254 254
--0.163800 60.672798 0.405300 0.000000 0.286842 0.957978 0 254 27
--0.226300 59.631802 0.717000 0.000000 0.286842 0.957978 0 254 27
-0.226300 59.631802 0.717000 0.000000 0.286842 0.957978 0 254 27
-0.163800 60.672798 0.405300 0.000000 0.286842 0.957978 0 254 27
--0.340300 31.400700 -9.922000 -0.012671 0.074070 -0.997173 0 253 27
--2.162800 35.743500 -9.599900 -0.012671 0.074070 -0.997173 0 253 27
-0.000000 35.795200 -9.599900 -0.012671 0.074070 -0.997173 0 253 27
-0.000000 31.547001 -9.939100 -0.012671 0.074070 -0.997173 0 253 27
--5.919200 37.619099 -4.570300 -0.561685 0.544798 -0.622660 0 254 27
--2.827600 38.171799 -8.088300 -0.561685 0.544798 -0.622660 0 254 27
--2.162800 35.743500 -9.599900 -0.561685 0.544798 -0.622660 0 254 27
--5.283200 35.952900 -7.814600 -0.561685 0.544798 -0.622660 0 254 27
--28.543800 44.178001 -4.651400 -0.410462 -0.233070 -0.881589 254 254 254
--27.102699 45.320202 -5.735100 -0.410462 -0.233070 -0.881589 254 254 254
--26.246300 42.901402 -5.383600 -0.410462 -0.233070 -0.881589 254 254 254
--28.292801 42.543098 -4.446800 -0.410462 -0.233070 -0.881589 254 254 254
--25.491899 42.827301 -2.370100 0.201709 -0.968181 -0.148119 0 254 27
--27.637899 42.321201 -1.984400 0.201709 -0.968181 -0.148119 0 254 27
--28.380600 42.330502 -3.056600 0.201709 -0.968181 -0.148119 0 254 27
--26.246300 42.901402 -5.383600 0.185319 -0.980147 -0.070494 20 231 27
--25.491899 42.827301 -2.370100 0.185319 -0.980147 -0.070494 0 253 27
--28.380600 42.330502 -3.056600 0.185319 -0.980147 -0.070494 0 252 27
--0.179900 61.274700 0.058500 0.000000 0.499235 0.866467 0 254 27
--0.163800 60.672798 0.405300 0.000000 0.499235 0.866467 0 254 27
-0.163800 60.672798 0.405300 0.000000 0.499235 0.866467 0 254 27
-0.179900 61.274700 0.058500 0.000000 0.499235 0.866467 0 254 27
-0.000000 61.912998 -0.048000 0.000000 0.164575 0.986365 0 254 27
--0.179900 61.274700 0.058500 0.000000 0.164575 0.986365 0 254 27
-0.179900 61.274700 0.058500 0.000000 0.164575 0.986365 0 254 27
--2.162800 35.743500 -9.599900 -0.008224 0.529675 -0.848161 0 253 27
--2.827600 38.171799 -8.088300 -0.008224 0.529675 -0.848161 0 253 27
-0.000000 38.221600 -8.073300 -0.008224 0.529675 -0.848161 0 253 27
-0.000000 35.795200 -9.599900 -0.008224 0.529675 -0.848161 0 253 27
-4.620900 14.945700 -8.516100 0.163464 0.013069 -0.986463 0 253 27
-3.252600 0.001600 -8.591000 0.163464 0.013069 -0.986463 235 80 66
-1.712600 0.024900 -9.195700 0.163464 0.013069 -0.986463 254 68 73
-1.456400 14.610600 -8.695100 0.163464 0.013069 -0.986463 0 253 27
-4.089400 2.633000 -5.031300 0.982688 -0.088487 -0.162770 18 0 253
-3.252600 0.001600 -8.591000 0.982688 -0.088487 -0.162770 19 0 253
-4.620900 14.945700 -8.516100 0.982688 -0.088487 -0.162770 0 247 31
-5.308800 13.910900 -3.738700 0.982688 -0.088487 -0.162770 0 253 27
-1.553600 3.059500 -4.173500 -0.398905 -0.098999 0.911633 18 0 253
-3.061600 3.537800 -3.461700 -0.398905 -0.098999 0.911633 18 0 253
-1.766900 13.754900 -2.918700 -0.398905 -0.098999 0.911633 0 254 27
-1.553600 3.059500 -4.173500 -0.983093 0.009545 0.182857 254 254 254
-1.766900 13.754900 -2.918700 -0.983093 0.009545 0.182857 254 254 254
-1.239800 14.644800 -6.465300 -0.983093 0.009545 0.182857 254 254 254
-0.626000 0.031700 -8.336200 -0.983093 0.009545 0.182857 254 254 254
-5.495700 46.043098 -6.732400 0.860977 -0.085411 -0.501422 0 252 27
-6.029500 46.188801 -3.956000 0.860977 -0.085411 -0.501422 0 253 27
-5.919200 37.619099 -4.570300 0.860977 -0.085411 -0.501422 9 98 162
-2.827600 38.171799 -8.088300 0.860977 -0.085411 -0.501422 8 119 142
-4.685700 36.664101 -1.616400 0.917535 -0.032092 0.396359 0 250 28
-5.919200 37.619099 -4.570300 0.917535 -0.032092 0.396359 9 98 162
-6.029500 46.188801 -3.956000 0.917535 -0.032092 0.396359 0 253 27
-4.298500 47.001099 -0.058900 0.917535 -0.032092 0.396359 0 253 27
-6.775800 50.206501 -7.534500 0.223809 0.028781 -0.974208 0 253 27
-0.000000 50.037800 -9.413700 0.223809 0.028781 -0.974208 0 253 27
-0.000000 53.738098 -8.986800 0.223809 0.028781 -0.974208 0 253 27
-7.252500 54.524502 -7.615000 0.223809 0.028781 -0.974208 0 254 27
-7.252500 54.524502 -7.615000 0.375359 0.901424 0.215731 0 254 27
-6.624100 53.529800 -2.653700 0.375359 0.901424 0.215731 0 253 27
-8.184300 53.108700 -3.320400 0.375359 0.901424 0.215731 0 253 27
-8.747800 53.770199 -7.353300 0.375359 0.901424 0.215731 0 253 27
-9.827700 52.989700 -7.188500 0.412168 0.895237 0.169320 0 253 27
-9.508400 52.403099 -3.672700 0.412168 0.895237 0.169320 0 253 27
-15.636800 49.715099 -4.015700 0.412168 0.895237 0.169320 1 215 59
-14.989100 50.565300 -7.297200 0.412168 0.895237 0.169320 0 249 29
-0.000000 37.009800 0.550700 0.339751 -0.089043 0.936291 0 253 27
-4.685700 36.664101 -1.616400 0.339751 -0.089043 0.936291 0 250 28
-4.298500 47.001099 -0.058900 0.339751 -0.089043 0.936291 0 253 27
-0.000000 47.287498 1.094200 0.339751 -0.089043 0.936291 0 253 27
-0.000000 53.738098 -8.986800 0.139268 0.841727 -0.521633 0 253 27
-0.000000 55.950600 -7.250100 0.139268 0.841727 -0.521633 0 253 27
-2.321200 55.471001 -5.570800 0.139268 0.841727 -0.521633 0 253 27
-7.252500 54.524502 -7.615000 0.139268 0.841727 -0.521633 0 254 27
-3.773800 51.093601 -1.034300 0.772400 -0.022870 0.634725 0 253 27
-4.298500 47.001099 -0.058900 0.772400 -0.022870 0.634725 0 253 27
-6.029500 46.188801 -3.956000 0.772400 -0.022870 0.634725 0 253 27
-6.624100 53.529800 -2.653700 0.772400 -0.022870 0.634725 0 253 27
-6.624100 53.529800 -2.653700 0.299992 -0.190133 0.934802 254 68 73
-6.029500 46.188801 -3.956000 0.299992 -0.190133 0.934802 254 68 73
-7.813100 49.342701 -3.886900 0.299992 -0.190133 0.934802 254 68 73
-0.000000 50.880199 0.110000 0.266804 0.255185 0.929352 0 253 27
-0.000000 47.287498 1.094200 0.266804 0.255185 0.929352 0 252 27
-4.298500 47.001099 -0.058900 0.266804 0.255185 0.929352 0 253 27
-3.773800 51.093601 -1.034300 0.266804 0.255185 0.929352 0 253 27
-16.136200 50.023998 -7.546200 -0.129075 0.179950 -0.975171 0 253 27
-14.885000 46.974701 -7.946000 -0.129075 0.179950 -0.975171 0 253 27
-13.779500 47.417198 -7.715300 -0.129075 0.179950 -0.975171 0 253 27
-14.989100 50.565300 -7.297200 -0.129075 0.179950 -0.975171 0 253 27
-13.779500 47.417198 -7.715300 -0.437873 -0.882573 -0.171264 0 253 27
-14.977100 45.689201 -4.821000 -0.437873 -0.882573 -0.171264 0 253 27
-8.927200 49.128502 -4.128200 -0.437873 -0.882573 -0.171264 0 253 27
-8.756500 49.321098 -7.632900 -0.437873 -0.882573 -0.171264 0 253 27
-17.208200 49.477699 -7.512200 0.268622 0.938905 0.215175 0 227 47
-16.810101 49.139900 -3.928800 0.268622 0.938905 0.215175 35 133 112
-22.348700 46.932201 -2.822400 0.268622 0.938905 0.215175 19 0 250
-22.585199 48.327702 -7.594400 0.268622 0.938905 0.215175 0 236 38
-21.936399 43.055199 -3.733600 -0.256926 -0.186034 0.948357 19 0 253
-22.348700 46.932201 -2.822400 -0.256926 -0.186034 0.948357 19 0 250
-16.810101 49.139900 -3.928800 -0.256926 -0.186034 0.948357 35 133 112
-16.192200 44.960400 -4.877100 -0.256926 -0.186034 0.948357 18 0 253
-22.105101 44.119598 -7.074000 0.471869 -0.161034 -0.866838 0 253 27
-21.061199 44.183601 -7.611200 0.471869 -0.161034 -0.866838 0 253 27
-22.585199 48.327702 -7.594400 0.471869 -0.161034 -0.866838 0 253 27
-23.337700 47.268200 -6.945000 0.471869 -0.161034 -0.866838 0 253 27
-15.884600 46.520500 -7.855800 -0.312108 -0.901546 -0.299673 0 253 27
-21.061199 44.183601 -7.611200 -0.312108 -0.901546 -0.299673 0 253 27
-21.936399 43.055199 -3.733600 -0.312108 -0.901546 -0.299673 0 253 27
-16.192200 44.960400 -4.877100 -0.312108 -0.901546 -0.299673 0 253 27
-5.598500 31.822901 -1.404300 0.899204 0.141743 0.413933 0 240 37
-7.453900 29.910801 -4.780100 0.899204 0.141743 0.413933 18 0 251
-7.174300 32.815300 -5.167300 0.899204 0.141743 0.413933 17 7 244
-4.970000 33.082802 -8.871900 0.875445 0.068330 -0.478463 18 0 252
-7.174300 32.815300 -5.167300 0.875445 0.068330 -0.478463 17 7 244
-7.453900 29.910801 -4.780100 0.875445 0.068330 -0.478463 18 0 251
-5.595300 29.761600 -8.492500 0.875445 0.068330 -0.478463 18 0 253
-6.827700 20.858999 -3.044800 0.895156 -0.347215 -0.279532 0 231 44
-6.194700 19.576300 -3.478600 0.895156 -0.347215 -0.279532 0 248 31
-5.426000 21.341299 -8.132600 0.895156 -0.347215 -0.279532 15 21 230
-0.835600 22.853901 -8.210700 0.045309 0.086115 -0.995254 0 253 27
-5.317800 22.936800 -8.016200 0.045309 0.086115 -0.995254 0 253 27
-5.426000 21.341299 -8.132600 0.045309 0.086115 -0.995254 0 253 27
-0.899900 21.410400 -8.349400 0.045309 0.086115 -0.995254 0 253 27
-0.899900 21.410400 -8.349400 -0.986876 0.054006 0.152183 254 254 254
-1.853000 19.164200 -1.371600 -0.986876 0.054006 0.152183 254 254 254
-1.957400 20.620800 -1.211500 -0.986876 0.054006 0.152183 254 254 254
-6.194700 19.576300 -3.478600 0.393316 -0.294694 0.870895 0 248 31
-6.827700 20.858999 -3.044800 0.393316 -0.294694 0.870895 0 231 44
-1.957400 20.620800 -1.211500 0.393316 -0.294694 0.870895 0 253 27
-1.853000 19.164200 -1.371600 0.393316 -0.294694 0.870895 0 253 27
-5.117200 15.490400 -9.679700 -0.013076 0.210350 -0.977539 0 253 27
-0.134100 16.169500 -9.174700 -0.013076 0.210350 -0.977539 0 253 27
-0.899900 21.410400 -8.349400 -0.013076 0.210350 -0.977539 0 253 27
-5.426000 21.341299 -8.132600 -0.013076 0.210350 -0.977539 0 253 27
-0.134100 16.169500 -9.174700 -0.979250 0.051054 0.196120 0 254 27
-1.716700 14.450400 -2.459200 -0.979250 0.051054 0.196120 0 254 27
-1.853000 19.164200 -1.371600 -0.979250 0.051054 0.196120 0 254 27
-0.899900 21.410400 -8.349400 -0.979250 0.051054 0.196120 0 254 27
-1.853000 19.164200 -1.371600 0.369977 -0.140579 0.918343 0 253 27
-1.716700 14.450400 -2.459200 0.369977 -0.140579 0.918343 0 253 27
-6.069200 14.643000 -3.762300 0.369977 -0.140579 0.918343 0 253 27
-6.194700 19.576300 -3.478600 0.369977 -0.140579 0.918343 0 248 31
-6.069200 14.643000 -3.762300 0.986467 -0.011966 -0.163524 0 253 27
-5.117200 15.490400 -9.679700 0.986467 -0.011966 -0.163524 2 202 70
-5.426000 21.341299 -8.132600 0.986467 -0.011966 -0.163524 15 21 230
-6.194700 19.576300 -3.478600 0.986467 -0.011966 -0.163524 0 248 31
-7.813100 49.342701 -3.886900 0.881229 -0.394976 -0.259672 0 253 27
-6.029500 46.188801 -3.956000 0.881229 -0.394976 -0.259672 0 253 27
-5.495700 46.043098 -6.732400 0.881229 -0.394976 -0.259672 0 252 27
-6.775800 50.206501 -7.534500 0.881229 -0.394976 -0.259672 0 253 27
-8.756500 49.321098 -7.632900 -0.341557 -0.936397 -0.080618 254 68 73
-8.927200 49.128502 -4.128200 -0.341557 -0.936397 -0.080618 254 68 73
-7.813100 49.342701 -3.886900 -0.341557 -0.936397 -0.080618 254 68 73
-6.775800 50.206501 -7.534500 -0.341557 -0.936397 -0.080618 254 68 73
-5.495700 46.043098 -6.732400 0.295037 -0.218453 -0.930178 0 253 27
-0.000000 45.235802 -8.516300 0.295037 -0.218453 -0.930178 0 253 27
-0.000000 50.037800 -9.413700 0.295037 -0.218453 -0.930178 0 253 27
-6.775800 50.206501 -7.534500 0.295037 -0.218453 -0.930178 0 253 27
-3.773800 51.093601 -1.034300 0.217879 0.518058 0.827130 0 253 27
-1.435700 55.057400 -2.884500 0.217879 0.518058 0.827130 0 253 27
-0.000000 54.522099 -2.187600 0.217879 0.518058 0.827130 0 253 27
-0.000000 50.880199 0.110000 0.217879 0.518058 0.827130 0 253 27
-0.163800 60.672798 0.405300 0.878123 0.172158 0.446386 0 253 27
-0.226300 59.631802 0.717000 0.878123 0.172158 0.446386 0 253 27
-0.605400 59.453602 0.006800 0.878123 0.172158 0.446386 0 253 27
-0.596000 60.268700 -0.255900 0.878123 0.172158 0.446386 0 253 27
-0.000000 59.375900 0.272700 0.351825 0.003851 0.936058 0 253 27
-0.000000 58.735298 0.237300 0.351825 0.003851 0.936058 0 253 27
-0.793500 58.611801 -0.022400 0.351825 0.003851 0.936058 0 253 27
-0.605400 59.453602 0.006800 0.351825 0.003851 0.936058 0 253 27
-1.340700 61.343498 -1.024900 0.500896 0.173312 0.847978 254 254 254
-2.225300 60.301201 -1.334400 0.500896 0.173312 0.847978 254 254 254
-2.209500 61.230499 -1.515000 0.500896 0.173312 0.847978 254 254 254
-0.474100 61.294899 -0.607800 0.419394 -0.893935 0.158081 0 253 27
-0.785400 61.539799 -0.048800 0.419394 -0.893935 0.158081 0 253 27
-0.179900 61.274700 0.058500 0.419394 -0.893935 0.158081 0 253 27
-0.163800 60.672798 0.405300 0.879737 0.234636 0.413532 0 253 27
-0.596000 60.268700 -0.255900 0.879737 0.234636 0.413532 0 253 27
-0.474100 61.294899 -0.607800 0.879737 0.234636 0.413532 0 253 27
-0.179900 61.274700 0.058500 0.879737 0.234636 0.413532 0 253 27
-0.785400 61.539799 -0.048800 0.405349 0.400850 0.821591 0 253 27
-1.792100 61.563202 -0.648200 0.405349 0.400850 0.821591 0 253 27
-1.901400 62.898899 -1.262500 0.405349 0.400850 0.821591 0 253 27
-0.000000 62.775902 -0.355700 0.405349 0.400850 0.821591 0 253 27
-1.901400 62.898899 -1.262500 0.958885 0.139689 0.247034 254 73 78
-1.792100 61.563202 -0.648200 0.958885 0.139689 0.247034 254 68 73
-2.209500 61.230499 -1.515000 0.958885 0.139689 0.247034 254 68 73
-2.505800 61.413601 -3.333900 0.958885 0.139689 0.247034 254 68 73
-2.071800 58.080299 -1.837600 0.982605 0.010378 0.185418 254 254 254
-2.361600 58.652599 -3.405400 0.982605 0.010378 0.185418 254 254 254
-2.043500 58.694401 -1.722000 0.982605 0.010378 0.185418 254 254 254
-2.361600 58.652599 -3.405400 0.835615 -0.547438 -0.045374 254 254 254
-2.071800 58.080299 -1.837600 0.835615 -0.547438 -0.045374 254 254 254
-1.480400 57.287800 -3.167400 0.835615 -0.547438 -0.045374 254 254 254
-2.361600 58.652599 -3.405400 0.962379 -0.178153 0.205154 254 254 254
-2.484800 60.667999 -2.078300 0.962379 -0.178153 0.205154 254 254 254
-2.225300 60.301201 -1.334400 0.962379 -0.178153 0.205154 254 254 254
-2.043500 58.694401 -1.722000 0.962379 -0.178153 0.205154 254 254 254
-0.596000 60.268700 -0.255900 0.569338 0.180881 0.801958 0 253 27
-0.605400 59.453602 0.006800 0.569338 0.180881 0.801958 0 253 27
-0.793500 58.611801 -0.022400 0.569338 0.180881 0.801958 0 253 27
-2.225300 60.301201 -1.334400 0.569338 0.180881 0.801958 0 253 27
-0.793500 58.611801 -0.022400 0.424783 -0.113068 0.898207 254 68 73
-0.000000 58.735298 0.237300 0.424783 -0.113068 0.898207 254 68 73
-0.000000 57.320400 0.190300 0.424783 -0.113068 0.898207 254 68 73
-0.860300 57.339199 -0.345300 0.424783 -0.113068 0.898207 254 68 73
-2.361600 58.652599 -3.405400 0.801295 -0.555920 -0.221086 254 254 254
-1.480400 57.287800 -3.167400 0.801295 -0.555920 -0.221086 254 254 254
-1.507500 57.978802 -4.806700 0.801295 -0.555920 -0.221086 254 254 254
-1.480400 57.287800 -3.167400 0.605736 -0.042761 0.794516 0 253 27
-0.509500 56.862801 -2.081200 0.605736 -0.042761 0.794516 0 253 27
-0.000000 54.522099 -2.187600 0.605736 -0.042761 0.794516 0 253 27
-1.435700 55.057400 -2.884500 0.605736 -0.042761 0.794516 0 254 27
-1.435700 55.057400 -2.884500 0.962522 0.132164 0.236820 254 68 73
-2.321200 55.471001 -5.570800 0.962522 0.132164 0.236820 254 68 73
-1.507500 57.978802 -4.806700 0.962522 0.132164 0.236820 254 68 73
-1.480400 57.287800 -3.167400 0.962522 0.132164 0.236820 254 68 73
-5.117200 15.490400 -9.679700 -0.146405 -0.402228 -0.903758 0 253 27
-1.456400 14.610600 -8.695100 -0.146405 -0.402228 -0.903758 0 253 27
-0.134100 16.169500 -9.174700 -0.146405 -0.402228 -0.903758 0 253 27
-0.134100 16.169500 -9.174700 -0.868940 -0.488451 0.079739 254 254 254
-1.239800 14.644800 -6.465300 -0.868940 -0.488451 0.079739 254 254 254
-1.716700 14.450400 -2.459200 -0.868940 -0.488451 0.079739 254 254 254
-5.308800 13.910900 -3.738700 0.254739 -0.396087 0.882170 0 253 27
-6.069200 14.643000 -3.762300 0.254739 -0.396087 0.882170 0 253 27
-1.716700 14.450400 -2.459200 0.254739 -0.396087 0.882170 0 253 27
-1.766900 13.754900 -2.918700 0.254739 -0.396087 0.882170 0 253 27
-4.620900 14.945700 -8.516100 0.580484 -0.782092 -0.226651 0 247 31
-5.117200 15.490400 -9.679700 0.580484 -0.782092 -0.226651 2 205 68
-6.069200 14.643000 -3.762300 0.580484 -0.782092 -0.226651 0 253 27
-5.308800 13.910900 -3.738700 0.580484 -0.782092 -0.226651 0 253 27
-1.957400 20.620800 -1.211500 -0.981620 0.066989 0.178702 254 254 254
-2.189200 21.987900 -1.483700 -0.981620 0.066989 0.178702 254 254 254
-0.835600 22.853901 -8.210700 -0.981620 0.066989 0.178702 254 254 254
-0.899900 21.410400 -8.349400 -0.981620 0.066989 0.178702 254 254 254
-7.174300 32.815300 -5.167300 0.882089 0.156872 -0.444196 17 7 244
-4.970000 33.082802 -8.871900 0.882089 0.156872 -0.444196 18 0 252
-5.283200 35.952900 -7.814600 0.882089 0.156872 -0.444196 18 1 249
-6.542300 35.480598 -4.902800 0.882089 0.156872 -0.444196 15 32 221
-5.598500 31.822901 -1.404300 0.892181 0.170029 0.418452 0 240 37
-7.174300 32.815300 -5.167300 0.892181 0.170029 0.418452 17 7 244
-6.542300 35.480598 -4.902800 0.892181 0.170029 0.418452 15 32 221
-4.685700 36.664101 -1.616400 0.472747 0.127337 0.871949 0 250 28
-3.798500 31.552500 -0.388900 0.472747 0.127337 0.871949 0 253 27
-5.598500 31.822901 -1.404300 0.472747 0.127337 0.871949 0 240 37
-2.225300 60.301201 -1.334400 0.926529 0.086891 0.366052 254 254 254
-2.484800 60.667999 -2.078300 0.926529 0.086891 0.366052 254 254 254
-2.209500 61.230499 -1.515000 0.926529 0.086891 0.366052 254 254 254
-8.927200 49.128502 -4.128200 0.174303 -0.164506 0.970853 254 68 73
-9.508400 52.403099 -3.672700 0.174303 -0.164506 0.970853 254 68 73
-8.184300 53.108700 -3.320400 0.174303 -0.164506 0.970853 254 68 73
-7.813100 49.342701 -3.886900 0.174303 -0.164506 0.970853 254 68 73
-8.184300 53.108700 -3.320400 0.526523 0.826719 0.198265 0 253 27
-9.508400 52.403099 -3.672700 0.526523 0.826719 0.198265 0 253 27
-9.827700 52.989700 -7.188500 0.526523 0.826719 0.198265 0 253 27
-8.747800 53.770199 -7.353300 0.526523 0.826719 0.198265 0 253 27
-8.747800 53.770199 -7.353300 0.154881 -0.035505 -0.987295 0 253 27
-6.775800 50.206501 -7.534500 0.154881 -0.035505 -0.987295 0 253 27
-7.252500 54.524502 -7.615000 0.154881 -0.035505 -0.987295 0 254 27
-8.927200 49.128502 -4.128200 -0.001669 -0.169906 0.985459 0 253 27
-14.977100 45.689201 -4.821000 -0.001669 -0.169906 0.985459 18 0 253
-15.636800 49.715099 -4.015700 -0.001669 -0.169906 0.985459 29 188 60
-9.508400 52.403099 -3.672700 -0.001669 -0.169906 0.985459 0 253 27
-1.435700 55.057400 -2.884500 0.215818 0.814400 0.538680 0 253 27
-3.773800 51.093601 -1.034300 0.215818 0.814400 0.538680 0 253 27
-6.624100 53.529800 -2.653700 0.215818 0.814400 0.538680 0 253 27
-7.252500 54.524502 -7.615000 0.215818 0.814400 0.538680 0 253 27
-2.321200 55.471001 -5.570800 0.276118 0.932071 0.234526 0 253 27
-1.435700 55.057400 -2.884500 0.276118 0.932071 0.234526 0 253 27
-7.252500 54.524502 -7.615000 0.276118 0.932071 0.234526 0 253 27
-2.209500 61.230499 -1.515000 0.942806 0.279456 0.181716 254 254 254
-2.484800 60.667999 -2.078300 0.942806 0.279456 0.181716 254 254 254
-2.505800 61.413601 -3.333900 0.942806 0.279456 0.181716 254 254 254
-2.484800 60.667999 -2.078300 0.998559 -0.051788 -0.014052 254 254 254
-2.361600 58.652599 -3.405400 0.998559 -0.051788 -0.014052 254 254 254
-2.505800 61.413601 -3.333900 0.998559 -0.051788 -0.014052 254 254 254
-2.209500 61.230499 -1.515000 0.107977 -0.909631 0.401138 254 68 73
-1.792100 61.563202 -0.648200 0.107977 -0.909631 0.401138 254 68 73
-1.340700 61.343498 -1.024900 0.107977 -0.909631 0.401138 254 68 73
-3.061600 3.537800 -3.461700 -0.234488 0.898953 0.369997 18 0 253
-1.553600 3.059500 -4.173500 -0.234488 0.898953 0.369997 18 0 253
-1.568700 1.981700 -0.627100 -0.234488 0.898953 0.369997 19 0 253
-3.735600 1.816900 0.228400 -0.234488 0.898953 0.369997 19 0 253
-0.626000 0.031700 -8.336200 -0.992053 0.072189 0.103052 0 254 27
-1.825200 -0.024100 0.601200 -0.992053 0.072189 0.103052 254 254 254
-1.568700 1.981700 -0.627100 -0.992053 0.072189 0.103052 254 254 254
-1.553600 3.059500 -4.173500 -0.992053 0.072189 0.103052 186 254 192
-1.825200 -0.024100 0.601200 0.002195 -0.999985 -0.005027 0 254 27
-0.626000 0.031700 -8.336200 0.002195 -0.999985 -0.005027 253 254 253
-1.712600 0.024900 -9.195700 0.002195 -0.999985 -0.005027 254 254 254
-3.769300 -0.009000 1.132900 0.002195 -0.999985 -0.005027 0 254 27
-1.712600 0.024900 -9.195700 -0.920325 0.042849 -0.388801 254 68 73
-0.626000 0.031700 -8.336200 -0.920325 0.042849 -0.388801 254 68 73
-1.239800 14.644800 -6.465300 -0.920325 0.042849 -0.388801 254 68 73
-1.456400 14.610600 -8.695100 -0.920325 0.042849 -0.388801 254 68 73
-1.568700 1.981700 -0.627100 -0.270273 0.452545 0.849798 19 0 253
-1.825200 -0.024100 0.601200 -0.270273 0.452545 0.849798 19 0 253
-3.769300 -0.009000 1.132900 -0.270273 0.452545 0.849798 19 0 253
-3.735600 1.816900 0.228400 -0.270273 0.452545 0.849798 19 0 253
-4.089400 2.633000 -5.031300 0.957442 -0.073711 -0.279054 18 0 253
-5.390300 1.568200 -1.670300 0.957442 -0.073711 -0.279054 18 0 253
-5.176800 -0.025000 -0.598300 0.957442 -0.073711 -0.279054 18 0 253
-3.252600 0.001600 -8.591000 0.957442 -0.073711 -0.279054 19 0 253
-3.769300 -0.009000 1.132900 0.738109 0.308147 0.600201 18 0 253
-5.176800 -0.025000 -0.598300 0.738109 0.308147 0.600201 18 0 253
-5.390300 1.568200 -1.670300 0.738109 0.308147 0.600201 18 0 253
-3.735600 1.816900 0.228400 0.738109 0.308147 0.600201 18 0 253
-5.390300 1.568200 -1.670300 0.560649 0.811720 0.163660 18 0 253
-4.089400 2.633000 -5.031300 0.560649 0.811720 0.163660 18 0 253
-3.061600 3.537800 -3.461700 0.560649 0.811720 0.163660 18 0 253
-3.735600 1.816900 0.228400 0.560649 0.811720 0.163660 18 0 253
-3.061600 3.537800 -3.461700 0.452521 -0.074303 0.888653 18 0 253
-4.089400 2.633000 -5.031300 0.452521 -0.074303 0.888653 18 0 253
-5.308800 13.910900 -3.738700 0.452521 -0.074303 0.888653 0 253 27
-1.766900 13.754900 -2.918700 0.452521 -0.074303 0.888653 0 253 27
-5.117200 15.490400 -9.679700 0.118623 -0.917754 -0.379021 0 253 27
-4.620900 14.945700 -8.516100 0.118623 -0.917754 -0.379021 0 253 27
-1.456400 14.610600 -8.695100 0.118623 -0.917754 -0.379021 0 253 27
-1.456400 14.610600 -8.695100 -0.751462 -0.656769 -0.062923 254 254 254
-1.239800 14.644800 -6.465300 -0.751462 -0.656769 -0.062923 254 254 254
-0.134100 16.169500 -9.174700 -0.751462 -0.656769 -0.062923 254 254 254
-5.426000 21.341299 -8.132600 0.959663 0.028025 -0.279753 15 21 230
-5.317800 22.936800 -8.016200 0.959663 0.028025 -0.279753 18 0 252
-6.824000 22.193899 -3.251500 0.959663 0.028025 -0.279753 3 179 89
-6.827700 20.858999 -3.044800 0.959663 0.028025 -0.279753 0 231 44
-0.845100 29.891001 -9.498900 0.127296 -0.127838 -0.983592 0 253 27
-5.595300 29.761600 -8.492500 0.127296 -0.127838 -0.983592 0 253 27
-5.317800 22.936800 -8.016200 0.127296 -0.127838 -0.983592 0 253 27
-0.835600 22.853901 -8.210700 0.127296 -0.127838 -0.983592 0 253 27
-1.957400 20.620800 -1.211500 0.345482 0.135420 0.928603 254 68 73
-6.827700 20.858999 -3.044800 0.345482 0.135420 0.928603 232 61 86
-6.824000 22.193899 -3.251500 0.345482 0.135420 0.928603 185 47 122
-2.189200 21.987900 -1.483700 0.345482 0.135420 0.928603 254 68 73
-0.605400 59.453602 0.006800 0.276378 -0.886938 0.370075 254 68 73
-0.226300 59.631802 0.717000 0.276378 -0.886938 0.370075 254 68 73
-0.000000 59.375900 0.272700 0.276378 -0.886938 0.370075 254 68 73
-21.936399 43.055199 -3.733600 0.245050 -0.199318 0.948801 19 0 253
-23.265499 44.290199 -3.614200 0.245050 -0.199318 0.948801 19 0 253
-23.323000 46.228001 -3.425200 0.245050 -0.199318 0.948801 19 0 251
-22.348700 46.932201 -2.822400 0.245050 -0.199318 0.948801 20 0 250
-22.105101 44.119598 -7.074000 0.680722 -0.210597 -0.701617 0 253 27
-23.337700 47.268200 -6.945000 0.680722 -0.210597 -0.701617 0 253 27
-23.881300 46.267799 -5.995500 0.680722 -0.210597 -0.701617 0 253 27
-23.273100 44.479099 -6.170500 0.680722 -0.210597 -0.701617 0 253 27
-22.348700 46.932201 -2.822400 0.710630 0.673907 0.202126 18 0 249
-23.323000 46.228001 -3.425200 0.710630 0.673907 0.202126 18 0 251
-23.881300 46.267799 -5.995500 0.710630 0.673907 0.202126 12 63 193
-23.337700 47.268200 -6.945000 0.710630 0.673907 0.202126 2 175 92
-21.936399 43.055199 -3.733600 0.575702 -0.803125 -0.153486 18 0 253
-22.105101 44.119598 -7.074000 0.575702 -0.803125 -0.153486 18 0 253
-23.273100 44.479099 -6.170500 0.575702 -0.803125 -0.153486 18 0 253
-23.265499 44.290199 -3.614200 0.575702 -0.803125 -0.153486 18 0 253
-23.323000 46.228001 -3.425200 -0.234519 0.052147 0.970712 19 0 251
-23.265499 44.290199 -3.614200 -0.234519 0.052147 0.970712 19 0 253
-24.446100 44.099098 -3.039500 -0.234519 0.052147 0.970712 19 0 253
-24.935400 45.742901 -3.288800 -0.234519 0.052147 0.970712 20 0 251
-23.273100 44.479099 -6.170500 0.051663 0.047611 -0.997529 0 253 27
-23.881300 46.267799 -5.995500 0.051663 0.047611 -0.997529 0 253 27
-25.982700 45.641201 -5.974700 0.051663 0.047611 -0.997529 0 253 27
-25.718901 44.407902 -5.989100 0.051663 0.047611 -0.997529 0 253 27
-23.881300 46.267799 -5.995500 0.283035 0.956157 0.075198 64 24 202
-23.323000 46.228001 -3.425200 0.283035 0.956157 0.075198 19 0 251
-24.935400 45.742901 -3.288800 0.283035 0.956157 0.075198 20 0 251
-25.982700 45.641201 -5.974700 0.283035 0.956157 0.075198 65 29 197
-23.265499 44.290199 -3.614200 -0.050680 -0.993534 -0.101596 0 251 27
-23.273100 44.479099 -6.170500 -0.050680 -0.993534 -0.101596 0 253 27
-25.718901 44.407902 -5.989100 -0.050680 -0.993534 -0.101596 0 253 27
-24.446100 44.099098 -3.039500 -0.050680 -0.993534 -0.101596 53 205 30
-3.798500 31.552500 -0.388900 0.303080 0.047081 0.951802 57 208 35
-4.685700 36.664101 -1.616400 0.303080 0.047081 0.951802 0 250 28
-0.000000 37.009800 0.550700 0.303080 0.047081 0.951802 172 124 55
-0.000000 31.552500 0.128500 0.303080 0.047081 0.951802 203 101 62
-27.058001 43.733101 -1.471100 0.612973 -0.035197 0.789319 19 0 253
-26.775499 43.007000 -1.492900 0.612973 -0.035197 0.789319 19 0 253
-27.637899 42.321201 -1.984400 0.612973 -0.035197 0.789319 19 0 253
-28.100901 44.177299 -2.470000 0.612973 -0.035197 0.789319 19 0 253
-27.102699 45.320202 -5.735100 0.288380 -0.175341 -0.941325 0 253 27
-26.246300 42.901402 -5.383600 0.288380 -0.175341 -0.941325 0 252 27
-25.718901 44.407902 -5.989100 0.288380 -0.175341 -0.941325 0 253 27
-25.982700 45.641201 -5.974700 0.288380 -0.175341 -0.941325 0 253 27
-24.935400 45.742901 -3.288800 0.215944 0.976143 0.022647 20 0 251
-26.753901 45.398300 -2.858600 0.215944 0.976143 0.022647 21 0 250
-27.102699 45.320202 -5.735100 0.215944 0.976143 0.022647 69 22 201
-25.982700 45.641201 -5.974700 0.215944 0.976143 0.022647 65 29 197
-24.446100 44.099098 -3.039500 -0.806467 -0.440747 -0.394147 254 254 254
-25.718901 44.407902 -5.989100 -0.806467 -0.440747 -0.394147 254 254 254
-26.246300 42.901402 -5.383600 -0.806467 -0.440747 -0.394147 254 254 254
-28.380600 42.330502 -3.056600 0.840529 -0.044209 0.539960 19 0 253
-28.697901 44.238201 -3.477500 0.840529 -0.044209 0.539960 20 0 252
-28.100901 44.177299 -2.470000 0.840529 -0.044209 0.539960 19 0 253
-27.637899 42.321201 -1.984400 0.840529 -0.044209 0.539960 19 0 253
-28.380600 42.330502 -3.056600 0.979149 -0.175223 -0.102788 19 0 253
-28.292801 42.543098 -4.446800 0.979149 -0.175223 -0.102788 19 0 253
-28.543800 44.178001 -4.651400 0.979149 -0.175223 -0.102788 20 3 248
-28.697901 44.238201 -3.477500 0.979149 -0.175223 -0.102788 20 0 252
-26.753901 45.398300 -2.858600 0.560189 0.737837 0.376544 20 0 250
-28.100901 44.177299 -2.470000 0.560189 0.737837 0.376544 19 0 253
-28.697901 44.238201 -3.477500 0.560189 0.737837 0.376544 20 0 252
-24.935400 45.742901 -3.288800 -0.484106 0.321222 0.813915 20 0 251
-24.446100 44.099098 -3.039500 -0.484106 0.321222 0.813915 19 0 253
-25.587200 43.557701 -2.038700 -0.484106 0.321222 0.813915 19 0 253
-26.117701 44.487900 -2.198700 -0.484106 0.321222 0.813915 19 0 253
-24.446100 44.099098 -3.039500 -0.765721 -0.642695 -0.024780 254 68 73
-26.246300 42.901402 -5.383600 -0.765721 -0.642695 -0.024780 254 68 73
-25.491899 42.827301 -2.370100 -0.765721 -0.642695 -0.024780 254 68 73
-25.587200 43.557701 -2.038700 -0.765721 -0.642695 -0.024780 254 68 73
-26.753901 45.398300 -2.858600 -0.068715 0.616533 0.784324 21 0 250
-24.935400 45.742901 -3.288800 -0.068715 0.616533 0.784324 20 0 251
-26.117701 44.487900 -2.198700 -0.068715 0.616533 0.784324 19 0 253
-0.000000 31.552500 0.128500 0.069913 -0.031462 0.997057 0 253 27
-0.000000 24.132099 -0.356700 0.069913 -0.031462 0.997057 0 253 27
-3.463700 23.872801 -0.356700 0.069913 -0.031462 0.997057 0 253 27
-3.798500 31.552500 -0.388900 0.069913 -0.031462 0.997057 0 253 27
-2.225300 60.301201 -1.334400 0.789816 -0.226827 0.569860 0 253 27
-0.793500 58.611801 -0.022400 0.789816 -0.226827 0.569860 0 253 27
-2.043500 58.694401 -1.722000 0.789816 -0.226827 0.569860 0 253 27
-0.793500 58.611801 -0.022400 0.800106 -0.097243 0.591924 0 253 27
-0.860300 57.339199 -0.345300 0.800106 -0.097243 0.591924 0 253 27
-2.071800 58.080299 -1.837600 0.800106 -0.097243 0.591924 0 253 27
-2.043500 58.694401 -1.722000 0.800106 -0.097243 0.591924 0 253 27
-2.071800 58.080299 -1.837600 0.594038 -0.791272 0.144939 254 68 73
-0.860300 57.339199 -0.345300 0.594038 -0.791272 0.144939 254 68 73
-0.509500 56.862801 -2.081200 0.594038 -0.791272 0.144939 254 68 73
-1.480400 57.287800 -3.167400 0.594038 -0.791272 0.144939 254 68 73
-0.179900 61.274700 0.058500 0.090663 0.188705 0.977840 0 254 27
-0.785400 61.539799 -0.048800 0.090663 0.188705 0.977840 0 254 27
-0.000000 61.912998 -0.048000 0.090663 0.188705 0.977840 0 254 27
-15.884600 46.520500 -7.855800 0.098387 0.080586 -0.991880 0 253 27
-14.885000 46.974701 -7.946000 0.098387 0.080586 -0.991880 0 253 27
-16.136200 50.023998 -7.546200 0.098387 0.080586 -0.991880 0 253 27
-17.208200 49.477699 -7.512200 0.098387 0.080586 -0.991880 0 253 27
-15.636800 49.715099 -4.015700 0.436830 0.889212 0.135946 1 215 59
-16.810101 49.139900 -3.928800 0.436830 0.889212 0.135946 5 158 110
-17.208200 49.477699 -7.512200 0.436830 0.889212 0.135946 0 227 47
-16.136200 50.023998 -7.546200 0.436830 0.889212 0.135946 0 244 34
-16.192200 44.960400 -4.877100 -0.435886 -0.826304 -0.356686 254 252 252
-14.977100 45.689201 -4.821000 -0.435886 -0.826304 -0.356686 254 202 204
-14.885000 46.974701 -7.946000 -0.435886 -0.826304 -0.356686 254 123 127
-15.884600 46.520500 -7.855800 -0.435886 -0.826304 -0.356686 254 212 213
-16.810101 49.139900 -3.928800 -0.116417 -0.190205 0.974818 35 133 112
-15.636800 49.715099 -4.015700 -0.116417 -0.190205 0.974818 25 190 59
-14.977100 45.689201 -4.821000 -0.116417 -0.190205 0.974818 18 0 253
-16.192200 44.960400 -4.877100 -0.116417 -0.190205 0.974818 18 0 253
-13.779500 47.417198 -7.715300 0.030432 0.115440 -0.992848 12 79 181
-8.756500 49.321098 -7.632900 0.030432 0.115440 -0.992848 0 250 29
-9.827700 52.989700 -7.188500 0.030432 0.115440 -0.992848 0 253 27
-14.989100 50.565300 -7.297200 0.030432 0.115440 -0.992848 0 249 29
-15.636800 49.715099 -4.015700 0.447311 0.883265 0.140554 1 215 59
-16.136200 50.023998 -7.546200 0.447311 0.883265 0.140554 0 244 34
-14.989100 50.565300 -7.297200 0.447311 0.883265 0.140554 0 249 29
-13.779500 47.417198 -7.715300 -0.409629 -0.847844 -0.336696 254 70 75
-14.885000 46.974701 -7.946000 -0.409629 -0.847844 -0.336696 254 123 127
-14.977100 45.689201 -4.821000 -0.409629 -0.847844 -0.336696 254 202 204
-1.239800 14.644800 -6.465300 -0.983473 -0.143727 0.110102 254 254 254
-1.766900 13.754900 -2.918700 -0.983473 -0.143727 0.110102 254 254 254
-1.716700 14.450400 -2.459200 -0.983473 -0.143727 0.110102 254 254 254
-26.117701 44.487900 -2.198700 -0.374471 0.258120 0.890587 19 0 253
-25.587200 43.557701 -2.038700 -0.374471 0.258120 0.890587 19 0 253
-26.775499 43.007000 -1.492900 -0.374471 0.258120 0.890587 19 0 253
-27.058001 43.733101 -1.471100 -0.374471 0.258120 0.890587 19 0 253
-25.587200 43.557701 -2.038700 -0.386633 -0.610879 0.690899 19 0 253
-25.491899 42.827301 -2.370100 -0.386633 -0.610879 0.690899 19 0 253
-27.637899 42.321201 -1.984400 -0.386633 -0.610879 0.690899 19 0 253
-26.775499 43.007000 -1.492900 -0.386633 -0.610879 0.690899 19 0 253
-26.117701 44.487900 -2.198700 0.202601 0.798645 0.566673 19 0 253
-27.058001 43.733101 -1.471100 0.202601 0.798645 0.566673 19 0 253
-28.100901 44.177299 -2.470000 0.202601 0.798645 0.566673 19 0 253
-8.184300 53.108700 -3.320400 0.347207 -0.172872 0.921717 254 68 73
-6.624100 53.529800 -2.653700 0.347207 -0.172872 0.921717 254 68 73
-7.813100 49.342701 -3.886900 0.347207 -0.172872 0.921717 254 68 73
-8.747800 53.770199 -7.353300 0.055764 0.062731 -0.996471 0 253 27
-9.827700 52.989700 -7.188500 0.055764 0.062731 -0.996471 0 253 27
-8.756500 49.321098 -7.632900 0.055764 0.062731 -0.996471 0 253 27
-6.775800 50.206501 -7.534500 0.055764 0.062731 -0.996471 0 253 27
-28.543800 44.178001 -4.651400 0.562493 0.826801 -0.001192 20 3 248
-27.102699 45.320202 -5.735100 0.562493 0.826801 -0.001192 12 64 193
-26.753901 45.398300 -2.858600 0.562493 0.826801 -0.001192 20 0 250
-28.697901 44.238201 -3.477500 0.562493 0.826801 -0.001192 20 0 252
-26.246300 42.901402 -5.383600 -0.106461 -0.983873 -0.143736 0 252 27
-28.292801 42.543098 -4.446800 -0.106461 -0.983873 -0.143736 87 180 37
-28.380600 42.330502 -3.056600 -0.106461 -0.983873 -0.143736 242 73 67
-28.100901 44.177299 -2.470000 0.192584 0.484112 0.853550 19 0 253
-26.753901 45.398300 -2.858600 0.192584 0.484112 0.853550 21 0 250
-26.117701 44.487900 -2.198700 0.192584 0.484112 0.853550 19 0 253
-1.712600 0.024900 -9.195700 -0.013475 -0.999909 -0.000374 19 0 253
-3.252600 0.001600 -8.591000 -0.013475 -0.999909 -0.000374 19 0 253
-5.176800 -0.025000 -0.598300 -0.013475 -0.999909 -0.000374 18 0 253
-3.769300 -0.009000 1.132900 -0.013475 -0.999909 -0.000374 18 0 253
-0.000000 61.912998 -0.048000 0.158526 0.331625 0.929997 0 254 27
-0.785400 61.539799 -0.048800 0.158526 0.331625 0.929997 0 254 27
-0.000000 62.775902 -0.355700 0.158526 0.331625 0.929997 0 254 27
-0.340300 31.400700 -9.928000 -0.943868 -0.327610 -0.042246 254 254 254
-0.845100 29.891001 -9.498900 -0.943868 -0.327610 -0.042246 254 254 254
-0.425600 30.069099 -1.507500 -0.943868 -0.327610 -0.042246 254 254 254
-0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968 254 127 129
-0.509500 56.862801 -2.081200 0.098448 -0.971038 0.217700 0 253 27
-0.860300 57.339199 -0.345300 0.098448 -0.971038 0.217700 0 253 27
-0.000000 57.320400 0.190300 0.098448 -0.971038 0.217700 0 253 27
-0.000000 56.862801 -2.081200 0.098448 -0.971038 0.217700 0 253 27
-5.598500 31.822901 -1.404300 0.881264 0.021588 0.472131 0 240 37
-6.824000 22.193899 -3.251500 0.881264 0.021588 0.472131 3 179 89
-7.453900 29.910801 -4.780100 0.881264 0.021588 0.472131 18 0 251
-6.824000 22.193899 -3.251500 0.921284 -0.108958 -0.373315 3 179 89
-5.317800 22.936800 -8.016200 0.921284 -0.108958 -0.373315 18 0 252
-5.595300 29.761600 -8.492500 0.921284 -0.108958 -0.373315 18 0 253
-7.453900 29.910801 -4.780100 0.921284 -0.108958 -0.373315 18 0 251
-3.798500 31.552500 -0.388900 0.401815 -0.146587 0.903912 0 253 27
-2.189200 21.987900 -1.483700 0.401815 -0.146587 0.903912 0 253 27
-6.824000 22.193899 -3.251500 0.401815 -0.146587 0.903912 3 179 89
-5.598500 31.822901 -1.404300 0.401815 -0.146587 0.903912 0 240 37
-0.340300 31.400700 -9.928000 0.230509 -0.107925 -0.967067 0 253 27
-4.970000 33.082802 -8.871900 0.230509 -0.107925 -0.967067 0 253 27
-5.595300 29.761600 -8.492500 0.230509 -0.107925 -0.967067 0 253 27
-0.845100 29.891001 -9.498900 0.230509 -0.107925 -0.967067 0 253 27
-0.835600 22.853901 -8.210700 -0.992236 -0.110106 0.057826 254 254 254
-2.189200 21.987900 -1.483700 -0.992236 -0.110106 0.057826 254 254 254
-0.425600 30.069099 -1.507500 -0.992236 -0.110106 0.057826 254 254 254
-0.845100 29.891001 -9.498900 -0.992236 -0.110106 0.057826 254 254 254
-2.162800 35.743500 -9.599900 0.324673 0.084802 -0.942017 0 253 27
-5.283200 35.952900 -7.814600 0.324673 0.084802 -0.942017 0 253 27
-4.970000 33.082802 -8.871900 0.324673 0.084802 -0.942017 0 253 27
-0.340300 31.400700 -9.928000 0.324673 0.084802 -0.942017 0 253 27
-5.283200 35.952900 -7.814600 0.889642 0.311183 -0.334218 18 1 249
-5.919200 37.619099 -4.570300 0.889642 0.311183 -0.334218 9 98 162
-6.542300 35.480598 -4.902800 0.889642 0.311183 -0.334218 15 32 221
-5.919200 37.619099 -4.570300 0.882631 0.186784 0.431364 9 98 162
-4.685700 36.664101 -1.616400 0.882631 0.186784 0.431364 0 250 28
-5.598500 31.822901 -1.404300 0.882631 0.186784 0.431364 0 240 37
-6.542300 35.480598 -4.902800 0.882631 0.186784 0.431364 15 32 221
-0.474100 61.294899 -0.607800 0.490764 0.255871 0.832875 254 68 73
-0.596000 60.268700 -0.255900 0.490764 0.255871 0.832875 254 68 73
-2.225300 60.301201 -1.334400 0.490764 0.255871 0.832875 254 68 73
-1.340700 61.343498 -1.024900 0.490764 0.255871 0.832875 254 68 73
-1.340700 61.343498 -1.024900 0.199083 -0.932669 0.300824 0 253 27
-1.792100 61.563202 -0.648200 0.199083 -0.932669 0.300824 0 253 27
-0.785400 61.539799 -0.048800 0.199083 -0.932669 0.300824 0 253 27
-0.474100 61.294899 -0.607800 0.199083 -0.932669 0.300824 0 253 27
-0.000000 45.235802 -8.516300 0.205813 0.023108 -0.978318 0 253 27
-5.495700 46.043098 -6.732400 0.205813 0.023108 -0.978318 0 252 27
-2.827600 38.171799 -8.088300 0.205813 0.023108 -0.978318 8 119 142
-0.000000 38.221600 -8.073300 0.205813 0.023108 -0.978318 0 240 38
-0.425600 30.069099 -1.507500 -0.290133 -0.060504 0.955072 254 254 254
-2.189200 21.987900 -1.483700 -0.290133 -0.060504 0.955072 254 254 254
-3.798500 31.552500 -0.388900 -0.290133 -0.060504 0.955072 254 254 254
-0.000000 31.547001 -9.939100 -0.348901 -0.925923 -0.144686 254 68 73
-0.340300 31.400700 -9.928000 -0.348901 -0.925923 -0.144686 254 68 73
-0.425600 30.069099 -1.507500 -0.348901 -0.925923 -0.144686 254 68 73
-0.000000 30.215401 -1.522000 -0.348901 -0.925923 -0.144686 254 68 73
-21.061199 44.183601 -7.611200 0.028361 0.039319 -0.998824 18 0 253
-15.884600 46.520500 -7.855800 0.028361 0.039319 -0.998824 17 5 246
-17.208200 49.477699 -7.512200 0.028361 0.039319 -0.998824 0 227 47
-22.585199 48.327702 -7.594400 0.028361 0.039319 -0.998824 0 239 38
-22.348700 46.932201 -2.822400 0.723103 0.652497 0.226650 18 0 249
-23.337700 47.268200 -6.945000 0.723103 0.652497 0.226650 2 175 92
-22.585199 48.327702 -7.594400 0.723103 0.652497 0.226650 0 239 38
-21.061199 44.183601 -7.611200 0.095048 -0.949863 -0.297868 0 253 27
-22.105101 44.119598 -7.074000 0.095048 -0.949863 -0.297868 0 253 27
-21.936399 43.055199 -3.733600 0.095048 -0.949863 -0.297868 0 253 27
-0.340300 31.400700 -9.928000 0.010374 0.075249 -0.997111 0 253 27
-0.000000 31.547001 -9.939100 0.010374 0.075249 -0.997111 0 253 27
-0.000000 35.795200 -9.599900 0.010374 0.075249 -0.997111 0 253 27
-2.162800 35.743500 -9.599900 0.010374 0.075249 -0.997111 0 253 27
-5.919200 37.619099 -4.570300 0.561685 0.544798 -0.622660 9 98 162
-5.283200 35.952900 -7.814600 0.561685 0.544798 -0.622660 18 1 249
-2.162800 35.743500 -9.599900 0.561685 0.544798 -0.622660 16 28 225
-2.827600 38.171799 -8.088300 0.561685 0.544798 -0.622660 8 119 142
-28.543800 44.178001 -4.651400 0.410462 -0.233070 -0.881589 77 187 34
-28.292801 42.543098 -4.446800 0.410462 -0.233070 -0.881589 87 180 37
-26.246300 42.901402 -5.383600 0.410462 -0.233070 -0.881589 0 252 27
-27.102699 45.320202 -5.735100 0.410462 -0.233070 -0.881589 0 253 27
-25.491899 42.827301 -2.370100 -0.201709 -0.968181 -0.148119 190 254 195
-28.380600 42.330502 -3.056600 -0.201709 -0.968181 -0.148119 242 254 242
-27.637899 42.321201 -1.984400 -0.201709 -0.968181 -0.148119 254 254 254
-26.246300 42.901402 -5.383600 -0.185319 -0.980147 -0.070494 0 254 27
-28.380600 42.330502 -3.056600 -0.185319 -0.980147 -0.070494 242 254 242
-25.491899 42.827301 -2.370100 -0.185319 -0.980147 -0.070494 190 254 195
-2.162800 35.743500 -9.599900 0.008224 0.529675 -0.848161 0 253 27
-0.000000 35.795200 -9.599900 0.008224 0.529675 -0.848161 0 253 27
-0.000000 38.221600 -8.073300 0.008224 0.529675 -0.848161 0 253 27
-2.827600 38.171799 -8.088300 0.008224 0.529675 -0.848161 0 253 27
-0.706900 62.538601 -0.289700 0.498102 0.211804 0.840853 0 253 27
-1.838200 62.255798 -0.802600 0.498102 0.211804 0.840853 0 253 27
-1.901400 63.532299 -1.247600 0.498102 0.211804 0.840853 0 253 27
-0.672300 63.485901 -0.421800 0.498102 0.211804 0.840853 0 253 27
-1.901400 63.532299 -1.247600 0.915374 0.111541 0.386845 0 253 27
-1.838200 62.255798 -0.802600 0.915374 0.111541 0.386845 0 253 27
-3.194200 60.597198 -3.460400 0.915374 0.111541 0.386845 0 253 27
-2.758700 63.532299 -3.348800 0.915374 0.111541 0.386845 0 253 27
-2.758700 63.532299 -3.348800 0.984906 0.142377 0.098436 0 253 27
-3.194200 60.597198 -3.460400 0.984906 0.142377 0.098436 0 253 27
-3.446000 60.597198 -5.980300 0.984906 0.142377 0.098436 0 253 27
-3.010600 63.532299 -5.868700 0.984906 0.142377 0.098436 0 253 27
-3.194200 60.597198 -3.460400 0.917633 0.222238 0.329485 0 253 27
-1.838200 62.255798 -0.802600 0.917633 0.222238 0.329485 0 253 27
-2.336800 60.597198 -1.072500 0.917633 0.222238 0.329485 0 253 27
-2.130500 53.628601 -1.359200 0.842435 0.033555 0.537753 0 253 27
-4.088800 54.879799 -3.460400 0.842435 0.033555 0.537753 0 253 27
-3.194200 60.597198 -3.460400 0.842435 0.033555 0.537753 0 253 27
-2.336800 60.597198 -1.072500 0.842435 0.033555 0.537753 0 253 27
-4.088800 54.879799 -3.460400 0.982155 0.156435 0.104398 0 253 27
-4.340700 55.234299 -6.210400 0.982155 0.156435 0.104398 0 254 27
-3.446000 60.597198 -5.980300 0.982155 0.156435 0.104398 0 253 27
-3.194200 60.597198 -3.460400 0.982155 0.156435 0.104398 0 253 27
-3.010600 63.532299 -5.868700 0.839145 0.204241 -0.504105 0 253 27
-3.446000 60.597198 -5.980300 0.839145 0.204241 -0.504105 0 253 27
-2.517200 60.597198 -7.879200 0.839145 0.204241 -0.504105 0 253 27
-1.932100 63.532299 -7.311200 0.839145 0.204241 -0.504105 0 253 27
-3.446000 60.597198 -5.980300 0.847590 0.127945 -0.514996 0 253 27
-4.340700 55.234299 -6.210400 0.847590 0.127945 -0.514996 0 254 27
-2.990300 54.496300 -8.246000 0.847590 0.127945 -0.514996 0 253 27
-2.517200 60.597198 -7.879200 0.847590 0.127945 -0.514996 0 253 27
-1.932100 63.532299 -7.311200 0.365116 0.222173 -0.904063 0 253 27
-2.517200 60.597198 -7.879200 0.365116 0.222173 -0.904063 0 253 27
-0.000000 60.597198 -8.812800 0.365116 0.222173 -0.904063 0 253 27
-0.000000 63.532299 -8.174500 0.365116 0.222173 -0.904063 0 253 27
-2.990300 54.496300 -8.246000 0.255106 0.035267 -0.966270 0 253 27
-0.000000 54.050800 -8.782700 0.255106 0.035267 -0.966270 0 253 27
-0.000000 60.597198 -8.812800 0.255106 0.035267 -0.966270 0 253 27
-2.517200 60.597198 -7.879200 0.255106 0.035267 -0.966270 0 253 27
-0.672300 63.485901 -0.421800 0.422112 0.618267 0.662999 0 253 27
-1.901400 63.532299 -1.247600 0.422112 0.618267 0.662999 0 253 27
-1.171400 65.057899 -2.205500 0.422112 0.618267 0.662999 0 253 27
-1.901400 63.532299 -1.247600 0.756752 0.608663 0.238446 0 253 27
-2.758700 63.532299 -3.348800 0.756752 0.608663 0.238446 0 253 27
-1.795600 65.057899 -4.806100 0.756752 0.608663 0.238446 0 253 27
-1.171400 65.057899 -2.205500 0.756752 0.608663 0.238446 0 253 27
-2.758700 63.532299 -3.348800 0.806293 0.585999 0.080601 0 253 27
-3.010600 63.532299 -5.868700 0.806293 0.585999 0.080601 0 253 27
-1.795600 65.057899 -4.806100 0.806293 0.585999 0.080601 0 253 27
-3.010600 63.532299 -5.868700 0.468822 0.765524 -0.440657 0 253 27
-1.932100 63.532299 -7.311200 0.468822 0.765524 -0.440657 0 254 27
-0.000000 65.057899 -6.421400 0.468822 0.765524 -0.440657 0 253 27
-1.795600 65.057899 -4.806100 0.468822 0.765524 -0.440657 0 253 27
-1.932100 63.532299 -7.311200 0.281463 0.723860 -0.629925 0 254 27
-0.000000 63.532299 -8.174500 0.281463 0.723860 -0.629925 0 253 27
-0.000000 65.057899 -6.421400 0.281463 0.723860 -0.629925 0 253 27
-1.171400 65.057899 -2.205500 0.296421 0.952404 0.071148 0 253 27
-1.795600 65.057899 -4.806100 0.296421 0.952404 0.071148 0 253 27
-0.000000 65.560898 -4.058400 0.296421 0.952404 0.071148 0 253 27
-1.795600 65.057899 -4.806100 0.184093 0.961370 -0.204641 0 254 27
-0.000000 65.057899 -6.421400 0.184093 0.961370 -0.204641 0 254 27
-0.000000 65.560898 -4.058400 0.184093 0.961370 -0.204641 0 254 27
-0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183 0 254 27
-1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183 0 254 27
--1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183 0 254 27
--0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183 0 254 27
-0.706900 62.538601 -0.289700 0.204667 0.142518 0.968401 0 254 27
-0.672300 63.485901 -0.421800 0.204667 0.142518 0.968401 0 254 27
-0.000000 62.538601 -0.140300 0.204667 0.142518 0.968401 0 254 27
-0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572 0 254 27
--0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572 0 254 27
-0.000000 62.538601 -0.140300 -0.000000 0.284850 0.958572 0 254 27
-2.130500 53.628601 -1.359200 -0.899990 0.017690 0.435552 0 253 27
-2.336800 60.597198 -1.072500 -0.899990 0.017690 0.435552 0 253 27
-1.393700 60.597198 -3.164700 -0.899990 0.017690 0.435552 0 253 27
-1.187300 53.628601 -3.164700 -0.899990 0.017690 0.435552 0 253 27
--0.706900 62.538601 -0.289700 -0.498102 0.211804 0.840853 0 254 27
--0.672300 63.485901 -0.421800 -0.498102 0.211804 0.840853 0 254 27
--1.901400 63.532299 -1.247600 -0.498102 0.211804 0.840853 0 254 27
--1.838200 62.255798 -0.802600 -0.498102 0.211804 0.840853 0 254 27
--1.901400 63.532299 -1.247600 -0.915374 0.111541 0.386845 0 254 27
--2.758700 63.532299 -3.348800 -0.915374 0.111541 0.386845 0 254 27
--3.194200 60.597198 -3.460400 -0.915374 0.111541 0.386845 0 254 27
--1.838200 62.255798 -0.802600 -0.915374 0.111541 0.386845 0 254 27
--2.758700 63.532299 -3.348800 -0.984906 0.142377 0.098436 0 254 27
--3.010600 63.532299 -5.868700 -0.984906 0.142377 0.098436 0 254 27
--3.446000 60.597198 -5.980300 -0.984906 0.142377 0.098436 0 254 27
--3.194200 60.597198 -3.460400 -0.984906 0.142377 0.098436 0 254 27
--3.194200 60.597198 -3.460400 -0.917633 0.222238 0.329485 0 254 27
--2.336800 60.597198 -1.072500 -0.917633 0.222238 0.329485 0 254 27
--1.838200 62.255798 -0.802600 -0.917633 0.222238 0.329485 0 254 27
--2.130500 53.628601 -1.359200 -0.842435 0.033555 0.537753 0 253 27
--2.336800 60.597198 -1.072500 -0.842435 0.033555 0.537753 0 254 27
--3.194200 60.597198 -3.460400 -0.842435 0.033555 0.537753 0 254 27
--4.088800 54.879799 -3.460400 -0.842435 0.033555 0.537753 0 253 27
--4.088800 54.879799 -3.460400 -0.982155 0.156435 0.104398 0 253 27
--3.194200 60.597198 -3.460400 -0.982155 0.156435 0.104398 0 253 27
--3.446000 60.597198 -5.980300 -0.982155 0.156435 0.104398 0 253 27
--4.340700 55.234299 -6.210400 -0.982155 0.156435 0.104398 0 254 27
--3.010600 63.532299 -5.868700 -0.839145 0.204241 -0.504105 0 254 27
--1.932100 63.532299 -7.311200 -0.839145 0.204241 -0.504105 0 254 27
--2.517200 60.597198 -7.879200 -0.839145 0.204241 -0.504105 0 254 27
--3.446000 60.597198 -5.980300 -0.839145 0.204241 -0.504105 0 254 27
--3.446000 60.597198 -5.980300 -0.847590 0.127945 -0.514996 0 254 27
--2.517200 60.597198 -7.879200 -0.847590 0.127945 -0.514996 0 254 27
--2.990300 54.496300 -8.246000 -0.847590 0.127945 -0.514996 0 254 27
--4.340700 55.234299 -6.210400 -0.847590 0.127945 -0.514996 0 254 27
--1.932100 63.532299 -7.311200 -0.365116 0.222173 -0.904063 0 254 27
-0.000000 63.532299 -8.174500 -0.365116 0.222173 -0.904063 0 254 27
-0.000000 60.597198 -8.812800 -0.365116 0.222173 -0.904063 0 254 27
--2.517200 60.597198 -7.879200 -0.365116 0.222173 -0.904063 0 254 27
--2.990300 54.496300 -8.246000 -0.255106 0.035267 -0.966270 0 254 27
--2.517200 60.597198 -7.879200 -0.255106 0.035267 -0.966270 0 254 27
-0.000000 60.597198 -8.812800 -0.255106 0.035267 -0.966270 0 254 27
-0.000000 54.050800 -8.782700 -0.255106 0.035267 -0.966270 0 254 27
--0.672300 63.485901 -0.421800 -0.422112 0.618267 0.662999 0 254 27
--1.171400 65.057899 -2.205500 -0.422112 0.618267 0.662999 0 254 27
--1.901400 63.532299 -1.247600 -0.422112 0.618267 0.662999 0 254 27
--1.901400 63.532299 -1.247600 -0.756752 0.608663 0.238446 0 254 27
--1.171400 65.057899 -2.205500 -0.756752 0.608663 0.238446 0 254 27
--1.795600 65.057899 -4.806100 -0.756752 0.608663 0.238446 0 254 27
--2.758700 63.532299 -3.348800 -0.756752 0.608663 0.238446 0 254 27
--2.758700 63.532299 -3.348800 -0.806293 0.585999 0.080601 0 254 27
--1.795600 65.057899 -4.806100 -0.806293 0.585999 0.080601 0 254 27
--3.010600 63.532299 -5.868700 -0.806293 0.585999 0.080601 0 254 27
--3.010600 63.532299 -5.868700 -0.468822 0.765524 -0.440657 0 254 27
--1.795600 65.057899 -4.806100 -0.468822 0.765524 -0.440657 0 254 27
-0.000000 65.057899 -6.421400 -0.468822 0.765524 -0.440657 0 254 27
--1.932100 63.532299 -7.311200 -0.468822 0.765524 -0.440657 0 254 27
--1.932100 63.532299 -7.311200 -0.281463 0.723860 -0.629925 0 254 27
-0.000000 65.057899 -6.421400 -0.281463 0.723860 -0.629925 0 254 27
-0.000000 63.532299 -8.174500 -0.281463 0.723860 -0.629925 0 254 27
--1.171400 65.057899 -2.205500 -0.296421 0.952404 0.071148 0 254 27
-0.000000 65.560898 -4.058400 -0.296421 0.952404 0.071148 0 254 27
--1.795600 65.057899 -4.806100 -0.296421 0.952404 0.071148 0 254 27
--1.795600 65.057899 -4.806100 -0.184093 0.961370 -0.204641 0 254 27
-0.000000 65.560898 -4.058400 -0.184093 0.961370 -0.204641 0 254 27
-0.000000 65.057899 -6.421400 -0.184093 0.961370 -0.204641 0 254 27
--1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984 0 254 27
-1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984 0 254 27
-0.000000 65.560898 -4.058400 0.000000 0.965072 0.261984 0 254 27
--0.706900 62.538601 -0.289700 -0.204667 0.142518 0.968401 0 254 27
-0.000000 62.538601 -0.140300 -0.204667 0.142518 0.968401 0 254 27
--0.672300 63.485901 -0.421800 -0.204667 0.142518 0.968401 0 254 27
--2.130500 53.628601 -1.359200 0.899990 0.017690 0.435552 164 133 56
--1.187300 53.628601 -3.164700 0.899990 0.017690 0.435552 209 100 64
--1.393700 60.597198 -3.164700 0.899990 0.017690 0.435552 254 254 254
--2.336800 60.597198 -1.072500 0.899990 0.017690 0.435552 254 254 254
-8.704300 24.905701 -6.036500 0.233777 0.158187 -0.959336 0 253 27
-7.984800 25.127701 -6.177400 0.233777 0.158187 -0.959336 0 253 27
-7.649900 27.558001 -5.856100 0.233777 0.158187 -0.959336 0 253 27
-8.503900 27.435900 -5.670300 0.233777 0.158187 -0.959336 0 253 27
-6.463600 36.223400 -3.704900 0.910800 0.108730 0.398273 9 100 160
-5.778000 35.994701 -1.773100 0.910800 0.108730 0.398273 0 231 44
-7.451900 27.210300 -3.504400 0.910800 0.108730 0.398273 18 2 248
-8.503900 27.435900 -5.670300 0.910800 0.108730 0.398273 18 0 253
-5.115000 35.782600 -2.051700 -0.272059 -0.232411 0.933793 0 241 37
-6.597900 27.332300 -3.690200 -0.272059 -0.232411 0.933793 16 16 234
-7.451900 27.210300 -3.504400 -0.272059 -0.232411 0.933793 18 2 248
-5.778000 35.994701 -1.773100 -0.272059 -0.232411 0.933793 0 231 44
-5.743400 36.019600 -3.995900 0.266707 0.266447 -0.926215 0 253 27
-6.463600 36.223400 -3.704900 0.266707 0.266447 -0.926215 0 253 27
-8.503900 27.435900 -5.670300 0.266707 0.266447 -0.926215 0 253 27
-7.649900 27.558001 -5.856100 0.266707 0.266447 -0.926215 0 253 27
-7.451900 27.210300 -3.504400 -0.285900 -0.782712 0.552832 21 0 248
-6.597900 27.332300 -3.690200 -0.285900 -0.782712 0.552832 35 1 237
-7.984800 25.127701 -6.177400 -0.285900 -0.782712 0.552832 19 0 253
-8.704300 24.905701 -6.036500 -0.285900 -0.782712 0.552832 19 0 253
-7.451900 27.210300 -3.504400 0.899158 0.007889 0.437552 18 2 248
-8.704300 24.905701 -6.036500 0.899158 0.007889 0.437552 18 0 253
-8.503900 27.435900 -5.670300 0.899158 0.007889 0.437552 18 0 253
-6.463600 36.223400 -3.704900 -0.293676 0.955783 0.015277 254 68 73
-5.743400 36.019600 -3.995900 -0.293676 0.955783 0.015277 254 68 73
-5.115000 35.782600 -2.051700 -0.293676 0.955783 0.015277 254 68 73
-5.778000 35.994701 -1.773100 -0.293676 0.955783 0.015277 254 68 73
-4.513000 55.007702 -5.909800 -0.189279 -0.709198 -0.679126 0 253 27
-4.291100 55.098900 -5.871800 -0.189279 -0.709198 -0.679126 0 253 27
-4.207800 55.799599 -6.651700 -0.189279 -0.709198 -0.679126 0 253 27
-4.871900 55.799599 -6.765400 -0.189279 -0.709198 -0.679126 0 253 27
-2.904000 62.455601 -5.700500 0.959060 0.270852 0.082723 0 253 27
-2.764700 62.455601 -4.128400 0.959060 0.270852 0.082723 0 253 27
-4.736600 55.799599 -5.153900 0.959060 0.270852 0.082723 0 253 27
-4.871900 55.799599 -6.765400 0.959060 0.270852 0.082723 0 253 27
-2.764700 62.455601 -4.128400 0.167860 -0.101350 0.980587 0 253 27
-4.072400 55.799599 -5.040200 0.167860 -0.101350 0.980587 0 253 27
-4.736600 55.799599 -5.153900 0.167860 -0.101350 0.980587 0 253 27
-2.904000 62.455601 -5.700500 -0.167781 0.107182 -0.979980 0 253 27
-4.871900 55.799599 -6.765400 -0.167781 0.107182 -0.979980 0 253 27
-4.207800 55.799599 -6.651700 -0.167781 0.107182 -0.979980 0 253 27
-4.736600 55.799599 -5.153900 0.042232 -0.727963 0.684314 254 68 73
-4.072400 55.799599 -5.040200 0.042232 -0.727963 0.684314 254 68 73
-4.291100 55.098900 -5.871800 0.042232 -0.727963 0.684314 254 68 73
-4.513000 55.007702 -5.909800 0.042232 -0.727963 0.684314 254 68 73
-4.736600 55.799599 -5.153900 0.937220 -0.339745 0.078688 0 253 27
-4.513000 55.007702 -5.909800 0.937220 -0.339745 0.078688 0 253 27
-4.871900 55.799599 -6.765400 0.937220 -0.339745 0.078688 0 253 27
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meshes/ply/Normal_NoUVs_NoColors.ply b/src/tests/evas/meshes/ply/Normal_NoUVs_NoColors.ply
deleted file mode 100644
index b3e1806738..0000000000
--- a/src/tests/evas/meshes/ply/Normal_NoUVs_NoColors.ply
+++ /dev/null
@@ -1,1679 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600 -0.021734 0.023193 -0.999495
--2.020300 14.610600 -8.278800 -0.021734 0.023193 -0.999495
--1.712600 0.024900 -9.195700 -0.021734 0.023193 -0.999495
--3.252600 0.001600 -8.591000 -0.021734 0.023193 -0.999495
--4.649800 14.945700 -8.785600 -0.983809 -0.091724 -0.153967
--3.252600 0.001600 -8.591000 -0.983809 -0.091724 -0.153967
--4.089400 2.633000 -5.031300 -0.983809 -0.091724 -0.153967
--5.308800 13.910900 -3.738700 -0.983809 -0.091724 -0.153967
--1.553600 3.059500 -4.173500 0.398905 -0.098999 0.911633
--1.766900 13.754900 -2.918700 0.398905 -0.098999 0.911633
--3.061600 3.537800 -3.461700 0.398905 -0.098999 0.911633
--1.553600 3.059500 -4.173500 0.977159 -0.002648 0.212493
--0.626000 0.031700 -8.336200 0.977159 -0.002648 0.212493
--0.971400 14.644800 -6.706400 0.977159 -0.002648 0.212493
--1.766900 13.754900 -2.918700 0.977159 -0.002648 0.212493
--5.495700 46.043098 -6.732400 -0.860977 -0.085411 -0.501422
--2.827600 38.171799 -8.088300 -0.860977 -0.085411 -0.501422
--5.919200 37.619099 -4.570300 -0.860977 -0.085411 -0.501422
--6.029500 46.188801 -3.956000 -0.860977 -0.085411 -0.501422
--4.685700 36.664101 -1.616400 -0.917535 -0.032092 0.396359
--4.298500 47.001099 -0.058900 -0.917535 -0.032092 0.396359
--6.029500 46.188801 -3.956000 -0.917535 -0.032092 0.396359
--5.919200 37.619099 -4.570300 -0.917535 -0.032092 0.396359
--6.775800 50.206501 -7.534500 -0.223809 0.028781 -0.974208
--7.252500 54.524502 -7.615000 -0.223809 0.028781 -0.974208
-0.000000 53.738098 -8.986800 -0.223809 0.028781 -0.974208
-0.000000 50.037800 -9.413700 -0.223809 0.028781 -0.974208
--7.252500 54.524502 -7.615000 -0.375359 0.901424 0.215731
--8.747800 53.770199 -7.353300 -0.375359 0.901424 0.215731
--8.184300 53.108700 -3.320400 -0.375359 0.901424 0.215731
--6.624100 53.529800 -2.653700 -0.375359 0.901424 0.215731
--9.827700 52.989700 -7.188500 -0.412168 0.895237 0.169320
--14.989100 50.565300 -7.297200 -0.412168 0.895237 0.169320
--15.636800 49.715099 -4.015700 -0.412168 0.895237 0.169320
--9.508400 52.403099 -3.672700 -0.412168 0.895237 0.169320
-0.000000 37.009800 0.550700 -0.339751 -0.089043 0.936291
-0.000000 47.287498 1.094200 -0.339751 -0.089043 0.936291
--4.298500 47.001099 -0.058900 -0.339751 -0.089043 0.936291
--4.685700 36.664101 -1.616400 -0.339751 -0.089043 0.936291
-0.000000 53.738098 -8.986800 -0.139268 0.841727 -0.521633
--7.252500 54.524502 -7.615000 -0.139268 0.841727 -0.521633
--2.321200 55.471001 -5.570800 -0.139268 0.841727 -0.521633
-0.000000 55.950600 -7.250100 -0.139268 0.841727 -0.521633
--6.624100 53.529800 -2.653700 -0.510018 -0.190129 0.838888
--7.813100 49.342701 -3.886900 -0.510018 -0.190129 0.838888
--6.029500 46.188801 -3.956000 -0.510018 -0.190129 0.838888
--3.773800 51.093601 -1.034300 -0.510018 -0.190129 0.838888
--6.029500 46.188801 -3.956000 -0.909885 0.202901 0.361857
--4.298500 47.001099 -0.058900 -0.909885 0.202901 0.361857
--3.773800 51.093601 -1.034300 -0.909885 0.202901 0.361857
-0.000000 50.880199 0.110000 -0.266804 0.255185 0.929352
--3.773800 51.093601 -1.034300 -0.266804 0.255185 0.929352
--4.298500 47.001099 -0.058900 -0.266804 0.255185 0.929352
-0.000000 47.287498 1.094200 -0.266804 0.255185 0.929352
--16.136200 50.023998 -7.546200 0.129075 0.179950 -0.975171
--14.989100 50.565300 -7.297200 0.129075 0.179950 -0.975171
--13.779500 47.417198 -7.715300 0.129075 0.179950 -0.975171
--14.885000 46.974701 -7.946000 0.129075 0.179950 -0.975171
--13.779500 47.417198 -7.715300 0.437873 -0.882573 -0.171264
--8.756500 49.321098 -7.632900 0.437873 -0.882573 -0.171264
--8.927200 49.128502 -4.128200 0.437873 -0.882573 -0.171264
--14.977100 45.689201 -4.821000 0.437873 -0.882573 -0.171264
--17.208200 49.477699 -7.512200 -0.268622 0.938905 0.215175
--22.585199 48.327702 -7.594400 -0.268622 0.938905 0.215175
--22.348700 46.932201 -2.822400 -0.268622 0.938905 0.215175
--16.810101 49.139900 -3.928800 -0.268622 0.938905 0.215175
--21.936399 43.055199 -3.733600 0.256926 -0.186034 0.948357
--16.192200 44.960400 -4.877100 0.256926 -0.186034 0.948357
--16.810101 49.139900 -3.928800 0.256926 -0.186034 0.948357
--22.348700 46.932201 -2.822400 0.256926 -0.186034 0.948357
--22.105101 44.119598 -7.074000 -0.471869 -0.161034 -0.866838
--23.337700 47.268200 -6.945000 -0.471869 -0.161034 -0.866838
--22.585199 48.327702 -7.594400 -0.471869 -0.161034 -0.866838
--21.061199 44.183601 -7.611200 -0.471869 -0.161034 -0.866838
--15.884600 46.520500 -7.855800 0.312108 -0.901546 -0.299673
--16.192200 44.960400 -4.877100 0.312108 -0.901546 -0.299673
--21.936399 43.055199 -3.733600 0.312108 -0.901546 -0.299673
--21.061199 44.183601 -7.611200 0.312108 -0.901546 -0.299673
--5.598500 31.822901 -1.405400 -0.899226 0.141575 0.413943
--7.174300 32.815300 -5.168000 -0.899226 0.141575 0.413943
--7.453900 29.910801 -4.782000 -0.899226 0.141575 0.413943
--4.970000 33.082802 -8.871300 -0.875321 0.068314 -0.478692
--5.595300 29.761600 -8.491100 -0.875321 0.068314 -0.478692
--7.453900 29.910801 -4.782000 -0.875321 0.068314 -0.478692
--7.174300 32.815300 -5.168000 -0.875321 0.068314 -0.478692
--6.827700 20.858999 -3.051400 -0.895608 -0.345701 -0.279959
--5.426000 21.341299 -8.131100 -0.895608 -0.345701 -0.279959
--6.194700 19.576300 -3.492500 -0.895608 -0.345701 -0.279959
--0.835600 22.853901 -8.203000 -0.044062 0.086408 -0.995285
--0.899900 21.410400 -8.342700 -0.044062 0.086408 -0.995285
--5.426000 21.341299 -8.131100 -0.044062 0.086408 -0.995285
--5.317800 22.936800 -8.014600 -0.044062 0.086408 -0.995285
--0.899900 21.410400 -8.342700 0.986890 0.053202 0.152371
--1.957400 20.620800 -1.217700 0.986890 0.053202 0.152371
--1.853000 19.164200 -1.385300 0.986890 0.053202 0.152371
--6.194700 19.576300 -3.492500 -0.393090 -0.299033 0.869517
--1.853000 19.164200 -1.385300 -0.393090 -0.299033 0.869517
--1.957400 20.620800 -1.217700 -0.393090 -0.299033 0.869517
--6.827700 20.858999 -3.051400 -0.393090 -0.299033 0.869517
--5.259600 15.490400 -9.599400 0.139442 0.106302 -0.984508
--5.426000 21.341299 -8.131100 0.139442 0.106302 -0.984508
--0.899900 21.410400 -8.342700 0.139442 0.106302 -0.984508
--0.294400 16.169500 -7.962700 0.139442 0.106302 -0.984508
--0.294400 16.169500 -7.962700 0.977002 0.117101 0.178197
--0.899900 21.410400 -8.342700 0.977002 0.117101 0.178197
--1.853000 19.164200 -1.385300 0.977002 0.117101 0.178197
--1.221800 14.450400 -2.004100 0.977002 0.117101 0.178197
--1.853000 19.164200 -1.385300 -0.395956 -0.119778 0.910424
--6.194700 19.576300 -3.492500 -0.395956 -0.119778 0.910424
--6.498700 14.643000 -4.000600 -0.395956 -0.119778 0.910424
--1.221800 14.450400 -2.004100 -0.395956 -0.119778 0.910424
--6.498700 14.643000 -4.000600 -0.982418 0.045709 -0.181012
--6.194700 19.576300 -3.492500 -0.982418 0.045709 -0.181012
--5.426000 21.341299 -8.131100 -0.982418 0.045709 -0.181012
--5.259600 15.490400 -9.599400 -0.982418 0.045709 -0.181012
--7.813100 49.342701 -3.886900 -0.881229 -0.394976 -0.259672
--6.775800 50.206501 -7.534500 -0.881229 -0.394976 -0.259672
--5.495700 46.043098 -6.732400 -0.881229 -0.394976 -0.259672
--6.029500 46.188801 -3.956000 -0.881229 -0.394976 -0.259672
--8.756500 49.321098 -7.632900 0.341557 -0.936397 -0.080618
--6.775800 50.206501 -7.534500 0.341557 -0.936397 -0.080618
--7.813100 49.342701 -3.886900 0.341557 -0.936397 -0.080618
--8.927200 49.128502 -4.128200 0.341557 -0.936397 -0.080618
--5.495700 46.043098 -6.732400 -0.295037 -0.218453 -0.930178
--6.775800 50.206501 -7.534500 -0.295037 -0.218453 -0.930178
-0.000000 50.037800 -9.413700 -0.295037 -0.218453 -0.930178
-0.000000 45.235802 -8.516300 -0.295037 -0.218453 -0.930178
--3.773800 51.093601 -1.034300 -0.217879 0.518058 0.827130
-0.000000 50.880199 0.110000 -0.217879 0.518058 0.827130
-0.000000 54.522099 -2.187600 -0.217879 0.518058 0.827130
--1.435700 55.057400 -2.884500 -0.217879 0.518058 0.827130
--0.163800 60.672798 0.405300 -0.878123 0.172158 0.446386
--0.596000 60.268700 -0.255900 -0.878123 0.172158 0.446386
--0.605400 59.453602 0.006800 -0.878123 0.172158 0.446386
--0.226300 59.631802 0.717000 -0.878123 0.172158 0.446386
-0.000000 59.375900 0.272700 -0.351825 0.003851 0.936058
--0.605400 59.453602 0.006800 -0.351825 0.003851 0.936058
--0.793500 58.611801 -0.022400 -0.351825 0.003851 0.936058
-0.000000 58.735298 0.237300 -0.351825 0.003851 0.936058
--1.340700 61.343498 -1.024900 -0.500896 0.173312 0.847978
--2.209500 61.230499 -1.515000 -0.500896 0.173312 0.847978
--2.225300 60.301201 -1.334400 -0.500896 0.173312 0.847978
--0.474100 61.294899 -0.607800 -0.419394 -0.893935 0.158081
--0.179900 61.274700 0.058500 -0.419394 -0.893935 0.158081
--0.785400 61.539799 -0.048800 -0.419394 -0.893935 0.158081
--0.163800 60.672798 0.405300 -0.879737 0.234636 0.413532
--0.179900 61.274700 0.058500 -0.879737 0.234636 0.413532
--0.474100 61.294899 -0.607800 -0.879737 0.234636 0.413532
--0.596000 60.268700 -0.255900 -0.879737 0.234636 0.413532
--0.785400 61.539799 -0.048800 -0.405349 0.400850 0.821591
-0.000000 62.775902 -0.355700 -0.405349 0.400850 0.821591
--1.901400 62.898899 -1.262500 -0.405349 0.400850 0.821591
--1.792100 61.563202 -0.648200 -0.405349 0.400850 0.821591
--1.901400 62.898899 -1.262500 -0.958885 0.139689 0.247034
--2.505800 61.413601 -3.333900 -0.958885 0.139689 0.247034
--2.209500 61.230499 -1.515000 -0.958885 0.139689 0.247034
--1.792100 61.563202 -0.648200 -0.958885 0.139689 0.247034
--2.071800 58.080299 -1.837600 -0.982605 0.010378 0.185418
--2.043500 58.694401 -1.722000 -0.982605 0.010378 0.185418
--2.361600 58.652599 -3.405400 -0.982605 0.010378 0.185418
--2.361600 58.652599 -3.405400 -0.835615 -0.547438 -0.045374
--1.480400 57.287800 -3.167400 -0.835615 -0.547438 -0.045374
--2.071800 58.080299 -1.837600 -0.835615 -0.547438 -0.045374
--2.361600 58.652599 -3.405400 -0.962379 -0.178153 0.205154
--2.043500 58.694401 -1.722000 -0.962379 -0.178153 0.205154
--2.225300 60.301201 -1.334400 -0.962379 -0.178153 0.205154
--2.484800 60.667999 -2.078300 -0.962379 -0.178153 0.205154
--0.596000 60.268700 -0.255900 -0.569338 0.180881 0.801958
--2.225300 60.301201 -1.334400 -0.569338 0.180881 0.801958
--0.793500 58.611801 -0.022400 -0.569338 0.180881 0.801958
--0.605400 59.453602 0.006800 -0.569338 0.180881 0.801958
--0.793500 58.611801 -0.022400 -0.424783 -0.113068 0.898207
--0.860300 57.339199 -0.345300 -0.424783 -0.113068 0.898207
-0.000000 57.320400 0.190300 -0.424783 -0.113068 0.898207
-0.000000 58.735298 0.237300 -0.424783 -0.113068 0.898207
--2.361600 58.652599 -3.405400 -0.801295 -0.555920 -0.221086
--1.507500 57.978802 -4.806700 -0.801295 -0.555920 -0.221086
--1.480400 57.287800 -3.167400 -0.801295 -0.555920 -0.221086
--1.480400 57.287800 -3.167400 -0.605736 -0.042761 0.794516
--1.435700 55.057400 -2.884500 -0.605736 -0.042761 0.794516
-0.000000 54.522099 -2.187600 -0.605736 -0.042761 0.794516
--0.509500 56.862801 -2.081200 -0.605736 -0.042761 0.794516
--1.435700 55.057400 -2.884500 -0.962522 0.132164 0.236820
--1.480400 57.287800 -3.167400 -0.962522 0.132164 0.236820
--1.507500 57.978802 -4.806700 -0.962522 0.132164 0.236820
--2.321200 55.471001 -5.570800 -0.962522 0.132164 0.236820
--5.259600 15.490400 -9.599400 0.329887 -0.177209 -0.927239
--0.294400 16.169500 -7.962700 0.329887 -0.177209 -0.927239
--2.020300 14.610600 -8.278800 0.329887 -0.177209 -0.927239
--0.294400 16.169500 -7.962700 0.923351 -0.382504 0.033356
--1.221800 14.450400 -2.004100 0.923351 -0.382504 0.033356
--0.971400 14.644800 -6.706400 0.923351 -0.382504 0.033356
--5.308800 13.910900 -3.738700 -0.281184 -0.501171 0.818391
--1.766900 13.754900 -2.918700 -0.281184 -0.501171 0.818391
--1.221800 14.450400 -2.004100 -0.281184 -0.501171 0.818391
--6.498700 14.643000 -4.000600 -0.281184 -0.501171 0.818391
--4.649800 14.945700 -8.785600 -0.465679 -0.853476 -0.233927
--5.308800 13.910900 -3.738700 -0.465679 -0.853476 -0.233927
--6.498700 14.643000 -4.000600 -0.465679 -0.853476 -0.233927
--5.259600 15.490400 -9.599400 -0.465679 -0.853476 -0.233927
--1.957400 20.620800 -1.217700 0.981627 0.066418 0.178877
--0.899900 21.410400 -8.342700 0.981627 0.066418 0.178877
--0.835600 22.853901 -8.203000 0.981627 0.066418 0.178877
--2.189200 21.987900 -1.481800 0.981627 0.066418 0.178877
--7.174300 32.815300 -5.168000 -0.882053 0.156893 -0.444261
--6.542300 35.480598 -4.902800 -0.882053 0.156893 -0.444261
--5.283200 35.952900 -7.814600 -0.882053 0.156893 -0.444261
--4.970000 33.082802 -8.871300 -0.882053 0.156893 -0.444261
--5.598500 31.822901 -1.405400 -0.892193 0.169920 0.418473
--6.542300 35.480598 -4.902800 -0.892193 0.169920 0.418473
--7.174300 32.815300 -5.168000 -0.892193 0.169920 0.418473
--4.685700 36.664101 -1.616400 -0.474113 0.127364 0.871203
--5.598500 31.822901 -1.405400 -0.474113 0.127364 0.871203
--3.798500 31.552500 -0.386300 -0.474113 0.127364 0.871203
--2.225300 60.301201 -1.334400 -0.926529 0.086891 0.366052
--2.209500 61.230499 -1.515000 -0.926529 0.086891 0.366052
--2.484800 60.667999 -2.078300 -0.926529 0.086891 0.366052
--8.927200 49.128502 -4.128200 -0.174303 -0.164506 0.970853
--7.813100 49.342701 -3.886900 -0.174303 -0.164506 0.970853
--8.184300 53.108700 -3.320400 -0.174303 -0.164506 0.970853
--9.508400 52.403099 -3.672700 -0.174303 -0.164506 0.970853
--8.184300 53.108700 -3.320400 -0.526523 0.826719 0.198265
--8.747800 53.770199 -7.353300 -0.526523 0.826719 0.198265
--9.827700 52.989700 -7.188500 -0.526523 0.826719 0.198265
--9.508400 52.403099 -3.672700 -0.526523 0.826719 0.198265
--8.747800 53.770199 -7.353300 -0.154881 -0.035505 -0.987295
--7.252500 54.524502 -7.615000 -0.154881 -0.035505 -0.987295
--6.775800 50.206501 -7.534500 -0.154881 -0.035505 -0.987295
--8.927200 49.128502 -4.128200 0.001669 -0.169906 0.985459
--9.508400 52.403099 -3.672700 0.001669 -0.169906 0.985459
--15.636800 49.715099 -4.015700 0.001669 -0.169906 0.985459
--14.977100 45.689201 -4.821000 0.001669 -0.169906 0.985459
--6.624100 53.529800 -2.653700 -0.215818 0.814400 0.538680
--3.773800 51.093601 -1.034300 -0.215818 0.814400 0.538680
--1.435700 55.057400 -2.884500 -0.215818 0.814400 0.538680
--7.252500 54.524502 -7.615000 -0.215818 0.814400 0.538680
--2.321200 55.471001 -5.570800 -0.276118 0.932071 0.234526
--7.252500 54.524502 -7.615000 -0.276118 0.932071 0.234526
--1.435700 55.057400 -2.884500 -0.276118 0.932071 0.234526
--2.209500 61.230499 -1.515000 -0.942806 0.279456 0.181716
--2.505800 61.413601 -3.333900 -0.942806 0.279456 0.181716
--2.484800 60.667999 -2.078300 -0.942806 0.279456 0.181716
--2.484800 60.667999 -2.078300 -0.998559 -0.051788 -0.014052
--2.505800 61.413601 -3.333900 -0.998559 -0.051788 -0.014052
--2.361600 58.652599 -3.405400 -0.998559 -0.051788 -0.014052
--2.209500 61.230499 -1.515000 -0.107977 -0.909631 0.401138
--1.340700 61.343498 -1.024900 -0.107977 -0.909631 0.401138
--1.792100 61.563202 -0.648200 -0.107977 -0.909631 0.401138
--3.061600 3.537800 -3.461700 0.234488 0.898953 0.369997
--3.735600 1.816900 0.228400 0.234488 0.898953 0.369997
--1.568700 1.981700 -0.627100 0.234488 0.898953 0.369997
--1.553600 3.059500 -4.173500 0.234488 0.898953 0.369997
--0.626000 0.031700 -8.336200 0.992053 0.072189 0.103052
--1.553600 3.059500 -4.173500 0.992053 0.072189 0.103052
--1.568700 1.981700 -0.627100 0.992053 0.072189 0.103052
--1.825200 -0.024100 0.601200 0.992053 0.072189 0.103052
--1.825200 -0.024100 0.601200 -0.002195 -0.999985 -0.005027
--3.769300 -0.009000 1.132900 -0.002195 -0.999985 -0.005027
--1.712600 0.024900 -9.195700 -0.002195 -0.999985 -0.005027
--0.626000 0.031700 -8.336200 -0.002195 -0.999985 -0.005027
--1.712600 0.024900 -9.195700 0.748722 0.074200 -0.658719
--2.020300 14.610600 -8.278800 0.748722 0.074200 -0.658719
--0.971400 14.644800 -6.706400 0.748722 0.074200 -0.658719
--0.626000 0.031700 -8.336200 0.748722 0.074200 -0.658719
--1.568700 1.981700 -0.627100 0.270273 0.452545 0.849798
--3.735600 1.816900 0.228400 0.270273 0.452545 0.849798
--3.769300 -0.009000 1.132900 0.270273 0.452545 0.849798
--1.825200 -0.024100 0.601200 0.270273 0.452545 0.849798
--4.089400 2.633000 -5.031300 -0.957442 -0.073711 -0.279054
--3.252600 0.001600 -8.591000 -0.957442 -0.073711 -0.279054
--5.176800 -0.025000 -0.598300 -0.957442 -0.073711 -0.279054
--5.390300 1.568200 -1.670300 -0.957442 -0.073711 -0.279054
--3.769300 -0.009000 1.132900 -0.738109 0.308147 0.600201
--3.735600 1.816900 0.228400 -0.738109 0.308147 0.600201
--5.390300 1.568200 -1.670300 -0.738109 0.308147 0.600201
--5.176800 -0.025000 -0.598300 -0.738109 0.308147 0.600201
--5.390300 1.568200 -1.670300 -0.560649 0.811720 0.163660
--3.735600 1.816900 0.228400 -0.560649 0.811720 0.163660
--3.061600 3.537800 -3.461700 -0.560649 0.811720 0.163660
--4.089400 2.633000 -5.031300 -0.560649 0.811720 0.163660
--3.061600 3.537800 -3.461700 -0.452521 -0.074303 0.888653
--1.766900 13.754900 -2.918700 -0.452521 -0.074303 0.888653
--5.308800 13.910900 -3.738700 -0.452521 -0.074303 0.888653
--4.089400 2.633000 -5.031300 -0.452521 -0.074303 0.888653
--2.020300 14.610600 -8.278800 0.001520 -0.830500 -0.557017
--4.649800 14.945700 -8.785600 0.001520 -0.830500 -0.557017
--5.259600 15.490400 -9.599400 0.001520 -0.830500 -0.557017
--2.020300 14.610600 -8.278800 0.649568 -0.634088 -0.419515
--0.294400 16.169500 -7.962700 0.649568 -0.634088 -0.419515
--0.971400 14.644800 -6.706400 0.649568 -0.634088 -0.419515
--5.426000 21.341299 -8.131100 -0.959570 0.028386 -0.280036
--6.827700 20.858999 -3.051400 -0.959570 0.028386 -0.280036
--6.824000 22.193899 -3.254300 -0.959570 0.028386 -0.280036
--5.317800 22.936800 -8.014600 -0.959570 0.028386 -0.280036
--0.845100 29.891001 -9.491500 -0.126028 -0.127868 -0.983751
--0.835600 22.853901 -8.203000 -0.126028 -0.127868 -0.983751
--5.317800 22.936800 -8.014600 -0.126028 -0.127868 -0.983751
--5.595300 29.761600 -8.491100 -0.126028 -0.127868 -0.983751
--1.957400 20.620800 -1.217700 -0.346283 0.131313 0.928895
--2.189200 21.987900 -1.481800 -0.346283 0.131313 0.928895
--6.824000 22.193899 -3.254300 -0.346283 0.131313 0.928895
--6.827700 20.858999 -3.051400 -0.346283 0.131313 0.928895
--0.605400 59.453602 0.006800 -0.276378 -0.886938 0.370075
-0.000000 59.375900 0.272700 -0.276378 -0.886938 0.370075
--0.226300 59.631802 0.717000 -0.276378 -0.886938 0.370075
--21.936399 43.055199 -3.733600 -0.245050 -0.199318 0.948801
--22.348700 46.932201 -2.822400 -0.245050 -0.199318 0.948801
--23.323000 46.228001 -3.425200 -0.245050 -0.199318 0.948801
--23.265499 44.290199 -3.614200 -0.245050 -0.199318 0.948801
--22.105101 44.119598 -7.074000 -0.680722 -0.210597 -0.701617
--23.273100 44.479099 -6.170500 -0.680722 -0.210597 -0.701617
--23.881300 46.267799 -5.995500 -0.680722 -0.210597 -0.701617
--23.337700 47.268200 -6.945000 -0.680722 -0.210597 -0.701617
--22.348700 46.932201 -2.822400 -0.710630 0.673907 0.202126
--23.337700 47.268200 -6.945000 -0.710630 0.673907 0.202126
--23.881300 46.267799 -5.995500 -0.710630 0.673907 0.202126
--23.323000 46.228001 -3.425200 -0.710630 0.673907 0.202126
--21.936399 43.055199 -3.733600 -0.575702 -0.803125 -0.153486
--23.265499 44.290199 -3.614200 -0.575702 -0.803125 -0.153486
--23.273100 44.479099 -6.170500 -0.575702 -0.803125 -0.153486
--22.105101 44.119598 -7.074000 -0.575702 -0.803125 -0.153486
--23.323000 46.228001 -3.425200 0.234519 0.052147 0.970712
--24.935400 45.742901 -3.288800 0.234519 0.052147 0.970712
--24.446100 44.099098 -3.039500 0.234519 0.052147 0.970712
--23.265499 44.290199 -3.614200 0.234519 0.052147 0.970712
--23.273100 44.479099 -6.170500 -0.051663 0.047611 -0.997529
--25.718901 44.407902 -5.989100 -0.051663 0.047611 -0.997529
--25.982700 45.641201 -5.974700 -0.051663 0.047611 -0.997529
--23.881300 46.267799 -5.995500 -0.051663 0.047611 -0.997529
--23.881300 46.267799 -5.995500 -0.283035 0.956157 0.075198
--25.982700 45.641201 -5.974700 -0.283035 0.956157 0.075198
--24.935400 45.742901 -3.288800 -0.283035 0.956157 0.075198
--23.323000 46.228001 -3.425200 -0.283035 0.956157 0.075198
--23.265499 44.290199 -3.614200 0.050680 -0.993534 -0.101596
--24.446100 44.099098 -3.039500 0.050680 -0.993534 -0.101596
--25.718901 44.407902 -5.989100 0.050680 -0.993534 -0.101596
--23.273100 44.479099 -6.170500 0.050680 -0.993534 -0.101596
--3.798500 31.552500 -0.386300 -0.302820 0.047342 0.951871
-0.000000 31.552500 0.128500 -0.302820 0.047342 0.951871
-0.000000 37.009800 0.550700 -0.302820 0.047342 0.951871
--4.685700 36.664101 -1.616400 -0.302820 0.047342 0.951871
--27.058001 43.733101 -1.471100 -0.612973 -0.035197 0.789319
--28.100901 44.177299 -2.470000 -0.612973 -0.035197 0.789319
--27.637899 42.321201 -1.984400 -0.612973 -0.035197 0.789319
--26.775499 43.007000 -1.492900 -0.612973 -0.035197 0.789319
--27.102699 45.320202 -5.735100 -0.288380 -0.175341 -0.941325
--25.982700 45.641201 -5.974700 -0.288380 -0.175341 -0.941325
--25.718901 44.407902 -5.989100 -0.288380 -0.175341 -0.941325
--26.246300 42.901402 -5.383600 -0.288380 -0.175341 -0.941325
--24.935400 45.742901 -3.288800 -0.215944 0.976143 0.022647
--25.982700 45.641201 -5.974700 -0.215944 0.976143 0.022647
--27.102699 45.320202 -5.735100 -0.215944 0.976143 0.022647
--26.753901 45.398300 -2.858600 -0.215944 0.976143 0.022647
--24.446100 44.099098 -3.039500 0.806467 -0.440747 -0.394147
--26.246300 42.901402 -5.383600 0.806467 -0.440747 -0.394147
--25.718901 44.407902 -5.989100 0.806467 -0.440747 -0.394147
--28.380600 42.330502 -3.056600 -0.840529 -0.044209 0.539960
--27.637899 42.321201 -1.984400 -0.840529 -0.044209 0.539960
--28.100901 44.177299 -2.470000 -0.840529 -0.044209 0.539960
--28.697901 44.238201 -3.477500 -0.840529 -0.044209 0.539960
--28.380600 42.330502 -3.056600 -0.979149 -0.175223 -0.102788
--28.697901 44.238201 -3.477500 -0.979149 -0.175223 -0.102788
--28.543800 44.178001 -4.651400 -0.979149 -0.175223 -0.102788
--28.292801 42.543098 -4.446800 -0.979149 -0.175223 -0.102788
--26.753901 45.398300 -2.858600 -0.560189 0.737837 0.376544
--28.697901 44.238201 -3.477500 -0.560189 0.737837 0.376544
--28.100901 44.177299 -2.470000 -0.560189 0.737837 0.376544
--24.935400 45.742901 -3.288800 0.484106 0.321222 0.813915
--26.117701 44.487900 -2.198700 0.484106 0.321222 0.813915
--25.587200 43.557701 -2.038700 0.484106 0.321222 0.813915
--24.446100 44.099098 -3.039500 0.484106 0.321222 0.813915
--24.446100 44.099098 -3.039500 0.765721 -0.642695 -0.024780
--25.587200 43.557701 -2.038700 0.765721 -0.642695 -0.024780
--25.491899 42.827301 -2.370100 0.765721 -0.642695 -0.024780
--26.246300 42.901402 -5.383600 0.765721 -0.642695 -0.024780
--26.753901 45.398300 -2.858600 0.068715 0.616533 0.784324
--26.117701 44.487900 -2.198700 0.068715 0.616533 0.784324
--24.935400 45.742901 -3.288800 0.068715 0.616533 0.784324
-0.000000 31.552500 0.128500 -0.069551 -0.031626 0.997077
--3.798500 31.552500 -0.386300 -0.069551 -0.031626 0.997077
--3.463700 23.872801 -0.356700 -0.069551 -0.031626 0.997077
-0.000000 24.132099 -0.356700 -0.069551 -0.031626 0.997077
--2.225300 60.301201 -1.334400 -0.789816 -0.226827 0.569860
--2.043500 58.694401 -1.722000 -0.789816 -0.226827 0.569860
--0.793500 58.611801 -0.022400 -0.789816 -0.226827 0.569860
--0.793500 58.611801 -0.022400 -0.800106 -0.097243 0.591924
--2.043500 58.694401 -1.722000 -0.800106 -0.097243 0.591924
--2.071800 58.080299 -1.837600 -0.800106 -0.097243 0.591924
--0.860300 57.339199 -0.345300 -0.800106 -0.097243 0.591924
--2.071800 58.080299 -1.837600 -0.594038 -0.791272 0.144939
--1.480400 57.287800 -3.167400 -0.594038 -0.791272 0.144939
--0.509500 56.862801 -2.081200 -0.594038 -0.791272 0.144939
--0.860300 57.339199 -0.345300 -0.594038 -0.791272 0.144939
--0.179900 61.274700 0.058500 -0.090663 0.188705 0.977840
-0.000000 61.912998 -0.048000 -0.090663 0.188705 0.977840
--0.785400 61.539799 -0.048800 -0.090663 0.188705 0.977840
--15.884600 46.520500 -7.855800 -0.098387 0.080586 -0.991880
--17.208200 49.477699 -7.512200 -0.098387 0.080586 -0.991880
--16.136200 50.023998 -7.546200 -0.098387 0.080586 -0.991880
--14.885000 46.974701 -7.946000 -0.098387 0.080586 -0.991880
--15.636800 49.715099 -4.015700 -0.436830 0.889212 0.135946
--16.136200 50.023998 -7.546200 -0.436830 0.889212 0.135946
--17.208200 49.477699 -7.512200 -0.436830 0.889212 0.135946
--16.810101 49.139900 -3.928800 -0.436830 0.889212 0.135946
--16.192200 44.960400 -4.877100 0.435886 -0.826304 -0.356686
--15.884600 46.520500 -7.855800 0.435886 -0.826304 -0.356686
--14.885000 46.974701 -7.946000 0.435886 -0.826304 -0.356686
--14.977100 45.689201 -4.821000 0.435886 -0.826304 -0.356686
--16.810101 49.139900 -3.928800 0.116417 -0.190205 0.974818
--16.192200 44.960400 -4.877100 0.116417 -0.190205 0.974818
--14.977100 45.689201 -4.821000 0.116417 -0.190205 0.974818
--15.636800 49.715099 -4.015700 0.116417 -0.190205 0.974818
--13.779500 47.417198 -7.715300 -0.030432 0.115440 -0.992848
--14.989100 50.565300 -7.297200 -0.030432 0.115440 -0.992848
--9.827700 52.989700 -7.188500 -0.030432 0.115440 -0.992848
--8.756500 49.321098 -7.632900 -0.030432 0.115440 -0.992848
--15.636800 49.715099 -4.015700 -0.447311 0.883265 0.140554
--14.989100 50.565300 -7.297200 -0.447311 0.883265 0.140554
--16.136200 50.023998 -7.546200 -0.447311 0.883265 0.140554
--13.779500 47.417198 -7.715300 0.409629 -0.847844 -0.336697
--14.977100 45.689201 -4.821000 0.409629 -0.847844 -0.336697
--14.885000 46.974701 -7.946000 0.409629 -0.847844 -0.336697
--0.971400 14.644800 -6.706400 0.777065 -0.629233 0.015366
--1.221800 14.450400 -2.004100 0.777065 -0.629233 0.015366
--1.766900 13.754900 -2.918700 0.777065 -0.629233 0.015366
--26.117701 44.487900 -2.198700 0.374471 0.258120 0.890587
--27.058001 43.733101 -1.471100 0.374471 0.258120 0.890587
--26.775499 43.007000 -1.492900 0.374471 0.258120 0.890587
--25.587200 43.557701 -2.038700 0.374471 0.258120 0.890587
--25.587200 43.557701 -2.038700 0.386633 -0.610879 0.690899
--26.775499 43.007000 -1.492900 0.386633 -0.610879 0.690899
--27.637899 42.321201 -1.984400 0.386633 -0.610879 0.690899
--25.491899 42.827301 -2.370100 0.386633 -0.610879 0.690899
--26.117701 44.487900 -2.198700 -0.202601 0.798645 0.566673
--28.100901 44.177299 -2.470000 -0.202601 0.798645 0.566673
--27.058001 43.733101 -1.471100 -0.202601 0.798645 0.566673
--8.184300 53.108700 -3.320400 -0.347207 -0.172872 0.921717
--7.813100 49.342701 -3.886900 -0.347207 -0.172872 0.921717
--6.624100 53.529800 -2.653700 -0.347207 -0.172872 0.921717
--8.747800 53.770199 -7.353300 -0.055764 0.062731 -0.996471
--6.775800 50.206501 -7.534500 -0.055764 0.062731 -0.996471
--8.756500 49.321098 -7.632900 -0.055764 0.062731 -0.996471
--9.827700 52.989700 -7.188500 -0.055764 0.062731 -0.996471
--28.543800 44.178001 -4.651400 -0.562493 0.826801 -0.001192
--28.697901 44.238201 -3.477500 -0.562493 0.826801 -0.001192
--26.753901 45.398300 -2.858600 -0.562493 0.826801 -0.001192
--27.102699 45.320202 -5.735100 -0.562493 0.826801 -0.001192
--26.246300 42.901402 -5.383600 0.106461 -0.983873 -0.143736
--28.380600 42.330502 -3.056600 0.106461 -0.983873 -0.143736
--28.292801 42.543098 -4.446800 0.106461 -0.983873 -0.143736
--28.100901 44.177299 -2.470000 -0.192584 0.484112 0.853550
--26.117701 44.487900 -2.198700 -0.192584 0.484112 0.853550
--26.753901 45.398300 -2.858600 -0.192584 0.484112 0.853550
--1.712600 0.024900 -9.195700 0.013475 -0.999909 -0.000374
--3.769300 -0.009000 1.132900 0.013475 -0.999909 -0.000374
--5.176800 -0.025000 -0.598300 0.013475 -0.999909 -0.000374
--3.252600 0.001600 -8.591000 0.013475 -0.999909 -0.000374
-0.000000 61.912998 -0.048000 -0.158526 0.331625 0.929997
-0.000000 62.775902 -0.355700 -0.158526 0.331625 0.929997
--0.785400 61.539799 -0.048800 -0.158526 0.331625 0.929997
--0.340300 31.400700 -9.922000 0.943854 -0.327649 -0.042263
--0.425600 30.069099 -1.503600 0.943854 -0.327649 -0.042263
--0.845100 29.891001 -9.491500 0.943854 -0.327649 -0.042263
-0.000000 54.522099 -2.187600 0.000000 -0.045410 0.998968
-0.000000 56.862801 -2.081200 0.000000 -0.045410 0.998968
--0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968
--0.509500 56.862801 -2.081200 -0.098448 -0.971038 0.217700
-0.000000 56.862801 -2.081200 -0.098448 -0.971038 0.217700
-0.000000 57.320400 0.190300 -0.098448 -0.971038 0.217700
--0.860300 57.339199 -0.345300 -0.098448 -0.971038 0.217700
--5.598500 31.822901 -1.405400 -0.881296 0.021519 0.472075
--7.453900 29.910801 -4.782000 -0.881296 0.021519 0.472075
--6.824000 22.193899 -3.254300 -0.881296 0.021519 0.472075
--6.824000 22.193899 -3.254300 -0.921164 -0.108973 -0.373607
--7.453900 29.910801 -4.782000 -0.921164 -0.108973 -0.373607
--5.595300 29.761600 -8.491100 -0.921164 -0.108973 -0.373607
--5.317800 22.936800 -8.014600 -0.921164 -0.108973 -0.373607
--3.798500 31.552500 -0.386300 -0.402805 -0.146650 0.903461
--5.598500 31.822901 -1.405400 -0.402805 -0.146650 0.903461
--6.824000 22.193899 -3.254300 -0.402805 -0.146650 0.903461
--2.189200 21.987900 -1.481800 -0.402805 -0.146650 0.903461
--0.340300 31.400700 -9.922000 -0.229486 -0.108632 -0.967231
--0.845100 29.891001 -9.491500 -0.229486 -0.108632 -0.967231
--5.595300 29.761600 -8.491100 -0.229486 -0.108632 -0.967231
--4.970000 33.082802 -8.871300 -0.229486 -0.108632 -0.967231
--0.835600 22.853901 -8.203000 0.992234 -0.110109 0.057862
--0.845100 29.891001 -9.491500 0.992234 -0.110109 0.057862
--0.425600 30.069099 -1.503600 0.992234 -0.110109 0.057862
--2.189200 21.987900 -1.481800 0.992234 -0.110109 0.057862
--2.162800 35.743500 -9.599900 -0.324262 0.084100 -0.942221
--0.340300 31.400700 -9.922000 -0.324262 0.084100 -0.942221
--4.970000 33.082802 -8.871300 -0.324262 0.084100 -0.942221
--5.283200 35.952900 -7.814600 -0.324262 0.084100 -0.942221
--5.283200 35.952900 -7.814600 -0.889642 0.311183 -0.334218
--6.542300 35.480598 -4.902800 -0.889642 0.311183 -0.334218
--5.919200 37.619099 -4.570300 -0.889642 0.311183 -0.334218
--5.919200 37.619099 -4.570300 -0.882633 0.186716 0.431389
--6.542300 35.480598 -4.902800 -0.882633 0.186716 0.431389
--5.598500 31.822901 -1.405400 -0.882633 0.186716 0.431389
--4.685700 36.664101 -1.616400 -0.882633 0.186716 0.431389
--0.474100 61.294899 -0.607800 -0.490764 0.255871 0.832875
--1.340700 61.343498 -1.024900 -0.490764 0.255871 0.832875
--2.225300 60.301201 -1.334400 -0.490764 0.255871 0.832875
--0.596000 60.268700 -0.255900 -0.490764 0.255871 0.832875
--1.340700 61.343498 -1.024900 -0.199083 -0.932669 0.300824
--0.474100 61.294899 -0.607800 -0.199083 -0.932669 0.300824
--0.785400 61.539799 -0.048800 -0.199083 -0.932669 0.300824
--1.792100 61.563202 -0.648200 -0.199083 -0.932669 0.300824
-0.000000 45.235802 -8.516300 -0.205813 0.023108 -0.978318
-0.000000 38.221600 -8.073300 -0.205813 0.023108 -0.978318
--2.827600 38.171799 -8.088300 -0.205813 0.023108 -0.978318
--5.495700 46.043098 -6.732400 -0.205813 0.023108 -0.978318
--0.425600 30.069099 -1.503600 0.289736 -0.060654 0.955183
--3.798500 31.552500 -0.386300 0.289736 -0.060654 0.955183
--2.189200 21.987900 -1.481800 0.289736 -0.060654 0.955183
-0.000000 31.547001 -9.939100 0.347255 -0.926523 -0.144807
-0.000000 30.215401 -1.522000 0.347255 -0.926523 -0.144807
--0.425600 30.069099 -1.503600 0.347255 -0.926523 -0.144807
--0.340300 31.400700 -9.922000 0.347255 -0.926523 -0.144807
--21.061199 44.183601 -7.611200 -0.028361 0.039319 -0.998824
--22.585199 48.327702 -7.594400 -0.028361 0.039319 -0.998824
--17.208200 49.477699 -7.512200 -0.028361 0.039319 -0.998824
--15.884600 46.520500 -7.855800 -0.028361 0.039319 -0.998824
--22.348700 46.932201 -2.822400 -0.723103 0.652497 0.226650
--22.585199 48.327702 -7.594400 -0.723103 0.652497 0.226650
--23.337700 47.268200 -6.945000 -0.723103 0.652497 0.226650
--21.061199 44.183601 -7.611200 -0.095048 -0.949863 -0.297868
--21.936399 43.055199 -3.733600 -0.095048 -0.949863 -0.297868
--22.105101 44.119598 -7.074000 -0.095048 -0.949863 -0.297868
-0.000000 59.375900 0.272700 0.000000 -0.866545 0.499100
-0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100
--0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100
--0.163800 60.672798 0.405300 0.000000 0.286842 0.957978
--0.226300 59.631802 0.717000 0.000000 0.286842 0.957978
-0.226300 59.631802 0.717000 0.000000 0.286842 0.957978
-0.163800 60.672798 0.405300 0.000000 0.286842 0.957978
--0.340300 31.400700 -9.922000 -0.012671 0.074070 -0.997173
--2.162800 35.743500 -9.599900 -0.012671 0.074070 -0.997173
-0.000000 35.795200 -9.599900 -0.012671 0.074070 -0.997173
-0.000000 31.547001 -9.939100 -0.012671 0.074070 -0.997173
--5.919200 37.619099 -4.570300 -0.561685 0.544798 -0.622660
--2.827600 38.171799 -8.088300 -0.561685 0.544798 -0.622660
--2.162800 35.743500 -9.599900 -0.561685 0.544798 -0.622660
--5.283200 35.952900 -7.814600 -0.561685 0.544798 -0.622660
--28.543800 44.178001 -4.651400 -0.410462 -0.233070 -0.881589
--27.102699 45.320202 -5.735100 -0.410462 -0.233070 -0.881589
--26.246300 42.901402 -5.383600 -0.410462 -0.233070 -0.881589
--28.292801 42.543098 -4.446800 -0.410462 -0.233070 -0.881589
--25.491899 42.827301 -2.370100 0.201709 -0.968181 -0.148119
--27.637899 42.321201 -1.984400 0.201709 -0.968181 -0.148119
--28.380600 42.330502 -3.056600 0.201709 -0.968181 -0.148119
--26.246300 42.901402 -5.383600 0.185319 -0.980147 -0.070494
--25.491899 42.827301 -2.370100 0.185319 -0.980147 -0.070494
--28.380600 42.330502 -3.056600 0.185319 -0.980147 -0.070494
--0.179900 61.274700 0.058500 0.000000 0.499235 0.866467
--0.163800 60.672798 0.405300 0.000000 0.499235 0.866467
-0.163800 60.672798 0.405300 0.000000 0.499235 0.866467
-0.179900 61.274700 0.058500 0.000000 0.499235 0.866467
-0.000000 61.912998 -0.048000 0.000000 0.164575 0.986365
--0.179900 61.274700 0.058500 0.000000 0.164575 0.986365
-0.179900 61.274700 0.058500 0.000000 0.164575 0.986365
--2.162800 35.743500 -9.599900 -0.008224 0.529675 -0.848161
--2.827600 38.171799 -8.088300 -0.008224 0.529675 -0.848161
-0.000000 38.221600 -8.073300 -0.008224 0.529675 -0.848161
-0.000000 35.795200 -9.599900 -0.008224 0.529675 -0.848161
-4.620900 14.945700 -8.516100 0.163464 0.013069 -0.986463
-3.252600 0.001600 -8.591000 0.163464 0.013069 -0.986463
-1.712600 0.024900 -9.195700 0.163464 0.013069 -0.986463
-1.456400 14.610600 -8.695100 0.163464 0.013069 -0.986463
-4.089400 2.633000 -5.031300 0.982688 -0.088487 -0.162770
-3.252600 0.001600 -8.591000 0.982688 -0.088487 -0.162770
-4.620900 14.945700 -8.516100 0.982688 -0.088487 -0.162770
-5.308800 13.910900 -3.738700 0.982688 -0.088487 -0.162770
-1.553600 3.059500 -4.173500 -0.398905 -0.098999 0.911633
-3.061600 3.537800 -3.461700 -0.398905 -0.098999 0.911633
-1.766900 13.754900 -2.918700 -0.398905 -0.098999 0.911633
-1.553600 3.059500 -4.173500 -0.983093 0.009545 0.182857
-1.766900 13.754900 -2.918700 -0.983093 0.009545 0.182857
-1.239800 14.644800 -6.465300 -0.983093 0.009545 0.182857
-0.626000 0.031700 -8.336200 -0.983093 0.009545 0.182857
-5.495700 46.043098 -6.732400 0.860977 -0.085411 -0.501422
-6.029500 46.188801 -3.956000 0.860977 -0.085411 -0.501422
-5.919200 37.619099 -4.570300 0.860977 -0.085411 -0.501422
-2.827600 38.171799 -8.088300 0.860977 -0.085411 -0.501422
-4.685700 36.664101 -1.616400 0.917535 -0.032092 0.396359
-5.919200 37.619099 -4.570300 0.917535 -0.032092 0.396359
-6.029500 46.188801 -3.956000 0.917535 -0.032092 0.396359
-4.298500 47.001099 -0.058900 0.917535 -0.032092 0.396359
-6.775800 50.206501 -7.534500 0.223809 0.028781 -0.974208
-0.000000 50.037800 -9.413700 0.223809 0.028781 -0.974208
-0.000000 53.738098 -8.986800 0.223809 0.028781 -0.974208
-7.252500 54.524502 -7.615000 0.223809 0.028781 -0.974208
-7.252500 54.524502 -7.615000 0.375359 0.901424 0.215731
-6.624100 53.529800 -2.653700 0.375359 0.901424 0.215731
-8.184300 53.108700 -3.320400 0.375359 0.901424 0.215731
-8.747800 53.770199 -7.353300 0.375359 0.901424 0.215731
-9.827700 52.989700 -7.188500 0.412168 0.895237 0.169320
-9.508400 52.403099 -3.672700 0.412168 0.895237 0.169320
-15.636800 49.715099 -4.015700 0.412168 0.895237 0.169320
-14.989100 50.565300 -7.297200 0.412168 0.895237 0.169320
-0.000000 37.009800 0.550700 0.339751 -0.089043 0.936291
-4.685700 36.664101 -1.616400 0.339751 -0.089043 0.936291
-4.298500 47.001099 -0.058900 0.339751 -0.089043 0.936291
-0.000000 47.287498 1.094200 0.339751 -0.089043 0.936291
-0.000000 53.738098 -8.986800 0.139268 0.841727 -0.521633
-0.000000 55.950600 -7.250100 0.139268 0.841727 -0.521633
-2.321200 55.471001 -5.570800 0.139268 0.841727 -0.521633
-7.252500 54.524502 -7.615000 0.139268 0.841727 -0.521633
-3.773800 51.093601 -1.034300 0.772400 -0.022870 0.634725
-4.298500 47.001099 -0.058900 0.772400 -0.022870 0.634725
-6.029500 46.188801 -3.956000 0.772400 -0.022870 0.634725
-6.624100 53.529800 -2.653700 0.772400 -0.022870 0.634725
-6.624100 53.529800 -2.653700 0.299992 -0.190133 0.934802
-6.029500 46.188801 -3.956000 0.299992 -0.190133 0.934802
-7.813100 49.342701 -3.886900 0.299992 -0.190133 0.934802
-0.000000 50.880199 0.110000 0.266804 0.255185 0.929352
-0.000000 47.287498 1.094200 0.266804 0.255185 0.929352
-4.298500 47.001099 -0.058900 0.266804 0.255185 0.929352
-3.773800 51.093601 -1.034300 0.266804 0.255185 0.929352
-16.136200 50.023998 -7.546200 -0.129075 0.179950 -0.975171
-14.885000 46.974701 -7.946000 -0.129075 0.179950 -0.975171
-13.779500 47.417198 -7.715300 -0.129075 0.179950 -0.975171
-14.989100 50.565300 -7.297200 -0.129075 0.179950 -0.975171
-13.779500 47.417198 -7.715300 -0.437873 -0.882573 -0.171264
-14.977100 45.689201 -4.821000 -0.437873 -0.882573 -0.171264
-8.927200 49.128502 -4.128200 -0.437873 -0.882573 -0.171264
-8.756500 49.321098 -7.632900 -0.437873 -0.882573 -0.171264
-17.208200 49.477699 -7.512200 0.268622 0.938905 0.215175
-16.810101 49.139900 -3.928800 0.268622 0.938905 0.215175
-22.348700 46.932201 -2.822400 0.268622 0.938905 0.215175
-22.585199 48.327702 -7.594400 0.268622 0.938905 0.215175
-21.936399 43.055199 -3.733600 -0.256926 -0.186034 0.948357
-22.348700 46.932201 -2.822400 -0.256926 -0.186034 0.948357
-16.810101 49.139900 -3.928800 -0.256926 -0.186034 0.948357
-16.192200 44.960400 -4.877100 -0.256926 -0.186034 0.948357
-22.105101 44.119598 -7.074000 0.471869 -0.161034 -0.866838
-21.061199 44.183601 -7.611200 0.471869 -0.161034 -0.866838
-22.585199 48.327702 -7.594400 0.471869 -0.161034 -0.866838
-23.337700 47.268200 -6.945000 0.471869 -0.161034 -0.866838
-15.884600 46.520500 -7.855800 -0.312108 -0.901546 -0.299673
-21.061199 44.183601 -7.611200 -0.312108 -0.901546 -0.299673
-21.936399 43.055199 -3.733600 -0.312108 -0.901546 -0.299673
-16.192200 44.960400 -4.877100 -0.312108 -0.901546 -0.299673
-5.598500 31.822901 -1.404300 0.899204 0.141743 0.413933
-7.453900 29.910801 -4.780100 0.899204 0.141743 0.413933
-7.174300 32.815300 -5.167300 0.899204 0.141743 0.413933
-4.970000 33.082802 -8.871900 0.875445 0.068330 -0.478463
-7.174300 32.815300 -5.167300 0.875445 0.068330 -0.478463
-7.453900 29.910801 -4.780100 0.875445 0.068330 -0.478463
-5.595300 29.761600 -8.492500 0.875445 0.068330 -0.478463
-6.827700 20.858999 -3.044800 0.895156 -0.347215 -0.279532
-6.194700 19.576300 -3.478600 0.895156 -0.347215 -0.279532
-5.426000 21.341299 -8.132600 0.895156 -0.347215 -0.279532
-0.835600 22.853901 -8.210700 0.045309 0.086115 -0.995254
-5.317800 22.936800 -8.016200 0.045309 0.086115 -0.995254
-5.426000 21.341299 -8.132600 0.045309 0.086115 -0.995254
-0.899900 21.410400 -8.349400 0.045309 0.086115 -0.995254
-0.899900 21.410400 -8.349400 -0.986876 0.054006 0.152183
-1.853000 19.164200 -1.371600 -0.986876 0.054006 0.152183
-1.957400 20.620800 -1.211500 -0.986876 0.054006 0.152183
-6.194700 19.576300 -3.478600 0.393316 -0.294694 0.870895
-6.827700 20.858999 -3.044800 0.393316 -0.294694 0.870895
-1.957400 20.620800 -1.211500 0.393316 -0.294694 0.870895
-1.853000 19.164200 -1.371600 0.393316 -0.294694 0.870895
-5.117200 15.490400 -9.679700 -0.013076 0.210350 -0.977539
-0.134100 16.169500 -9.174700 -0.013076 0.210350 -0.977539
-0.899900 21.410400 -8.349400 -0.013076 0.210350 -0.977539
-5.426000 21.341299 -8.132600 -0.013076 0.210350 -0.977539
-0.134100 16.169500 -9.174700 -0.979250 0.051054 0.196120
-1.716700 14.450400 -2.459200 -0.979250 0.051054 0.196120
-1.853000 19.164200 -1.371600 -0.979250 0.051054 0.196120
-0.899900 21.410400 -8.349400 -0.979250 0.051054 0.196120
-1.853000 19.164200 -1.371600 0.369977 -0.140579 0.918343
-1.716700 14.450400 -2.459200 0.369977 -0.140579 0.918343
-6.069200 14.643000 -3.762300 0.369977 -0.140579 0.918343
-6.194700 19.576300 -3.478600 0.369977 -0.140579 0.918343
-6.069200 14.643000 -3.762300 0.986467 -0.011966 -0.163524
-5.117200 15.490400 -9.679700 0.986467 -0.011966 -0.163524
-5.426000 21.341299 -8.132600 0.986467 -0.011966 -0.163524
-6.194700 19.576300 -3.478600 0.986467 -0.011966 -0.163524
-7.813100 49.342701 -3.886900 0.881229 -0.394976 -0.259672
-6.029500 46.188801 -3.956000 0.881229 -0.394976 -0.259672
-5.495700 46.043098 -6.732400 0.881229 -0.394976 -0.259672
-6.775800 50.206501 -7.534500 0.881229 -0.394976 -0.259672
-8.756500 49.321098 -7.632900 -0.341557 -0.936397 -0.080618
-8.927200 49.128502 -4.128200 -0.341557 -0.936397 -0.080618
-7.813100 49.342701 -3.886900 -0.341557 -0.936397 -0.080618
-6.775800 50.206501 -7.534500 -0.341557 -0.936397 -0.080618
-5.495700 46.043098 -6.732400 0.295037 -0.218453 -0.930178
-0.000000 45.235802 -8.516300 0.295037 -0.218453 -0.930178
-0.000000 50.037800 -9.413700 0.295037 -0.218453 -0.930178
-6.775800 50.206501 -7.534500 0.295037 -0.218453 -0.930178
-3.773800 51.093601 -1.034300 0.217879 0.518058 0.827130
-1.435700 55.057400 -2.884500 0.217879 0.518058 0.827130
-0.000000 54.522099 -2.187600 0.217879 0.518058 0.827130
-0.000000 50.880199 0.110000 0.217879 0.518058 0.827130
-0.163800 60.672798 0.405300 0.878123 0.172158 0.446386
-0.226300 59.631802 0.717000 0.878123 0.172158 0.446386
-0.605400 59.453602 0.006800 0.878123 0.172158 0.446386
-0.596000 60.268700 -0.255900 0.878123 0.172158 0.446386
-0.000000 59.375900 0.272700 0.351825 0.003851 0.936058
-0.000000 58.735298 0.237300 0.351825 0.003851 0.936058
-0.793500 58.611801 -0.022400 0.351825 0.003851 0.936058
-0.605400 59.453602 0.006800 0.351825 0.003851 0.936058
-1.340700 61.343498 -1.024900 0.500896 0.173312 0.847978
-2.225300 60.301201 -1.334400 0.500896 0.173312 0.847978
-2.209500 61.230499 -1.515000 0.500896 0.173312 0.847978
-0.474100 61.294899 -0.607800 0.419394 -0.893935 0.158081
-0.785400 61.539799 -0.048800 0.419394 -0.893935 0.158081
-0.179900 61.274700 0.058500 0.419394 -0.893935 0.158081
-0.163800 60.672798 0.405300 0.879737 0.234636 0.413532
-0.596000 60.268700 -0.255900 0.879737 0.234636 0.413532
-0.474100 61.294899 -0.607800 0.879737 0.234636 0.413532
-0.179900 61.274700 0.058500 0.879737 0.234636 0.413532
-0.785400 61.539799 -0.048800 0.405349 0.400850 0.821591
-1.792100 61.563202 -0.648200 0.405349 0.400850 0.821591
-1.901400 62.898899 -1.262500 0.405349 0.400850 0.821591
-0.000000 62.775902 -0.355700 0.405349 0.400850 0.821591
-1.901400 62.898899 -1.262500 0.958885 0.139689 0.247034
-1.792100 61.563202 -0.648200 0.958885 0.139689 0.247034
-2.209500 61.230499 -1.515000 0.958885 0.139689 0.247034
-2.505800 61.413601 -3.333900 0.958885 0.139689 0.247034
-2.071800 58.080299 -1.837600 0.982605 0.010378 0.185418
-2.361600 58.652599 -3.405400 0.982605 0.010378 0.185418
-2.043500 58.694401 -1.722000 0.982605 0.010378 0.185418
-2.361600 58.652599 -3.405400 0.835615 -0.547438 -0.045374
-2.071800 58.080299 -1.837600 0.835615 -0.547438 -0.045374
-1.480400 57.287800 -3.167400 0.835615 -0.547438 -0.045374
-2.361600 58.652599 -3.405400 0.962379 -0.178153 0.205154
-2.484800 60.667999 -2.078300 0.962379 -0.178153 0.205154
-2.225300 60.301201 -1.334400 0.962379 -0.178153 0.205154
-2.043500 58.694401 -1.722000 0.962379 -0.178153 0.205154
-0.596000 60.268700 -0.255900 0.569338 0.180881 0.801958
-0.605400 59.453602 0.006800 0.569338 0.180881 0.801958
-0.793500 58.611801 -0.022400 0.569338 0.180881 0.801958
-2.225300 60.301201 -1.334400 0.569338 0.180881 0.801958
-0.793500 58.611801 -0.022400 0.424783 -0.113068 0.898207
-0.000000 58.735298 0.237300 0.424783 -0.113068 0.898207
-0.000000 57.320400 0.190300 0.424783 -0.113068 0.898207
-0.860300 57.339199 -0.345300 0.424783 -0.113068 0.898207
-2.361600 58.652599 -3.405400 0.801295 -0.555920 -0.221086
-1.480400 57.287800 -3.167400 0.801295 -0.555920 -0.221086
-1.507500 57.978802 -4.806700 0.801295 -0.555920 -0.221086
-1.480400 57.287800 -3.167400 0.605736 -0.042761 0.794516
-0.509500 56.862801 -2.081200 0.605736 -0.042761 0.794516
-0.000000 54.522099 -2.187600 0.605736 -0.042761 0.794516
-1.435700 55.057400 -2.884500 0.605736 -0.042761 0.794516
-1.435700 55.057400 -2.884500 0.962522 0.132164 0.236820
-2.321200 55.471001 -5.570800 0.962522 0.132164 0.236820
-1.507500 57.978802 -4.806700 0.962522 0.132164 0.236820
-1.480400 57.287800 -3.167400 0.962522 0.132164 0.236820
-5.117200 15.490400 -9.679700 -0.146405 -0.402228 -0.903758
-1.456400 14.610600 -8.695100 -0.146405 -0.402228 -0.903758
-0.134100 16.169500 -9.174700 -0.146405 -0.402228 -0.903758
-0.134100 16.169500 -9.174700 -0.868940 -0.488451 0.079739
-1.239800 14.644800 -6.465300 -0.868940 -0.488451 0.079739
-1.716700 14.450400 -2.459200 -0.868940 -0.488451 0.079739
-5.308800 13.910900 -3.738700 0.254739 -0.396087 0.882170
-6.069200 14.643000 -3.762300 0.254739 -0.396087 0.882170
-1.716700 14.450400 -2.459200 0.254739 -0.396087 0.882170
-1.766900 13.754900 -2.918700 0.254739 -0.396087 0.882170
-4.620900 14.945700 -8.516100 0.580484 -0.782092 -0.226651
-5.117200 15.490400 -9.679700 0.580484 -0.782092 -0.226651
-6.069200 14.643000 -3.762300 0.580484 -0.782092 -0.226651
-5.308800 13.910900 -3.738700 0.580484 -0.782092 -0.226651
-1.957400 20.620800 -1.211500 -0.981620 0.066989 0.178702
-2.189200 21.987900 -1.483700 -0.981620 0.066989 0.178702
-0.835600 22.853901 -8.210700 -0.981620 0.066989 0.178702
-0.899900 21.410400 -8.349400 -0.981620 0.066989 0.178702
-7.174300 32.815300 -5.167300 0.882089 0.156872 -0.444196
-4.970000 33.082802 -8.871900 0.882089 0.156872 -0.444196
-5.283200 35.952900 -7.814600 0.882089 0.156872 -0.444196
-6.542300 35.480598 -4.902800 0.882089 0.156872 -0.444196
-5.598500 31.822901 -1.404300 0.892181 0.170029 0.418452
-7.174300 32.815300 -5.167300 0.892181 0.170029 0.418452
-6.542300 35.480598 -4.902800 0.892181 0.170029 0.418452
-4.685700 36.664101 -1.616400 0.472747 0.127337 0.871949
-3.798500 31.552500 -0.388900 0.472747 0.127337 0.871949
-5.598500 31.822901 -1.404300 0.472747 0.127337 0.871949
-2.225300 60.301201 -1.334400 0.926529 0.086891 0.366052
-2.484800 60.667999 -2.078300 0.926529 0.086891 0.366052
-2.209500 61.230499 -1.515000 0.926529 0.086891 0.366052
-8.927200 49.128502 -4.128200 0.174303 -0.164506 0.970853
-9.508400 52.403099 -3.672700 0.174303 -0.164506 0.970853
-8.184300 53.108700 -3.320400 0.174303 -0.164506 0.970853
-7.813100 49.342701 -3.886900 0.174303 -0.164506 0.970853
-8.184300 53.108700 -3.320400 0.526523 0.826719 0.198265
-9.508400 52.403099 -3.672700 0.526523 0.826719 0.198265
-9.827700 52.989700 -7.188500 0.526523 0.826719 0.198265
-8.747800 53.770199 -7.353300 0.526523 0.826719 0.198265
-8.747800 53.770199 -7.353300 0.154881 -0.035505 -0.987295
-6.775800 50.206501 -7.534500 0.154881 -0.035505 -0.987295
-7.252500 54.524502 -7.615000 0.154881 -0.035505 -0.987295
-8.927200 49.128502 -4.128200 -0.001669 -0.169906 0.985459
-14.977100 45.689201 -4.821000 -0.001669 -0.169906 0.985459
-15.636800 49.715099 -4.015700 -0.001669 -0.169906 0.985459
-9.508400 52.403099 -3.672700 -0.001669 -0.169906 0.985459
-1.435700 55.057400 -2.884500 0.215818 0.814400 0.538680
-3.773800 51.093601 -1.034300 0.215818 0.814400 0.538680
-6.624100 53.529800 -2.653700 0.215818 0.814400 0.538680
-7.252500 54.524502 -7.615000 0.215818 0.814400 0.538680
-2.321200 55.471001 -5.570800 0.276118 0.932071 0.234526
-1.435700 55.057400 -2.884500 0.276118 0.932071 0.234526
-7.252500 54.524502 -7.615000 0.276118 0.932071 0.234526
-2.209500 61.230499 -1.515000 0.942806 0.279456 0.181716
-2.484800 60.667999 -2.078300 0.942806 0.279456 0.181716
-2.505800 61.413601 -3.333900 0.942806 0.279456 0.181716
-2.484800 60.667999 -2.078300 0.998559 -0.051788 -0.014052
-2.361600 58.652599 -3.405400 0.998559 -0.051788 -0.014052
-2.505800 61.413601 -3.333900 0.998559 -0.051788 -0.014052
-2.209500 61.230499 -1.515000 0.107977 -0.909631 0.401138
-1.792100 61.563202 -0.648200 0.107977 -0.909631 0.401138
-1.340700 61.343498 -1.024900 0.107977 -0.909631 0.401138
-3.061600 3.537800 -3.461700 -0.234488 0.898953 0.369997
-1.553600 3.059500 -4.173500 -0.234488 0.898953 0.369997
-1.568700 1.981700 -0.627100 -0.234488 0.898953 0.369997
-3.735600 1.816900 0.228400 -0.234488 0.898953 0.369997
-0.626000 0.031700 -8.336200 -0.992053 0.072189 0.103052
-1.825200 -0.024100 0.601200 -0.992053 0.072189 0.103052
-1.568700 1.981700 -0.627100 -0.992053 0.072189 0.103052
-1.553600 3.059500 -4.173500 -0.992053 0.072189 0.103052
-1.825200 -0.024100 0.601200 0.002195 -0.999985 -0.005027
-0.626000 0.031700 -8.336200 0.002195 -0.999985 -0.005027
-1.712600 0.024900 -9.195700 0.002195 -0.999985 -0.005027
-3.769300 -0.009000 1.132900 0.002195 -0.999985 -0.005027
-1.712600 0.024900 -9.195700 -0.920325 0.042849 -0.388801
-0.626000 0.031700 -8.336200 -0.920325 0.042849 -0.388801
-1.239800 14.644800 -6.465300 -0.920325 0.042849 -0.388801
-1.456400 14.610600 -8.695100 -0.920325 0.042849 -0.388801
-1.568700 1.981700 -0.627100 -0.270273 0.452545 0.849798
-1.825200 -0.024100 0.601200 -0.270273 0.452545 0.849798
-3.769300 -0.009000 1.132900 -0.270273 0.452545 0.849798
-3.735600 1.816900 0.228400 -0.270273 0.452545 0.849798
-4.089400 2.633000 -5.031300 0.957442 -0.073711 -0.279054
-5.390300 1.568200 -1.670300 0.957442 -0.073711 -0.279054
-5.176800 -0.025000 -0.598300 0.957442 -0.073711 -0.279054
-3.252600 0.001600 -8.591000 0.957442 -0.073711 -0.279054
-3.769300 -0.009000 1.132900 0.738109 0.308147 0.600201
-5.176800 -0.025000 -0.598300 0.738109 0.308147 0.600201
-5.390300 1.568200 -1.670300 0.738109 0.308147 0.600201
-3.735600 1.816900 0.228400 0.738109 0.308147 0.600201
-5.390300 1.568200 -1.670300 0.560649 0.811720 0.163660
-4.089400 2.633000 -5.031300 0.560649 0.811720 0.163660
-3.061600 3.537800 -3.461700 0.560649 0.811720 0.163660
-3.735600 1.816900 0.228400 0.560649 0.811720 0.163660
-3.061600 3.537800 -3.461700 0.452521 -0.074303 0.888653
-4.089400 2.633000 -5.031300 0.452521 -0.074303 0.888653
-5.308800 13.910900 -3.738700 0.452521 -0.074303 0.888653
-1.766900 13.754900 -2.918700 0.452521 -0.074303 0.888653
-5.117200 15.490400 -9.679700 0.118623 -0.917754 -0.379021
-4.620900 14.945700 -8.516100 0.118623 -0.917754 -0.379021
-1.456400 14.610600 -8.695100 0.118623 -0.917754 -0.379021
-1.456400 14.610600 -8.695100 -0.751462 -0.656769 -0.062923
-1.239800 14.644800 -6.465300 -0.751462 -0.656769 -0.062923
-0.134100 16.169500 -9.174700 -0.751462 -0.656769 -0.062923
-5.426000 21.341299 -8.132600 0.959663 0.028025 -0.279753
-5.317800 22.936800 -8.016200 0.959663 0.028025 -0.279753
-6.824000 22.193899 -3.251500 0.959663 0.028025 -0.279753
-6.827700 20.858999 -3.044800 0.959663 0.028025 -0.279753
-0.845100 29.891001 -9.498900 0.127296 -0.127838 -0.983592
-5.595300 29.761600 -8.492500 0.127296 -0.127838 -0.983592
-5.317800 22.936800 -8.016200 0.127296 -0.127838 -0.983592
-0.835600 22.853901 -8.210700 0.127296 -0.127838 -0.983592
-1.957400 20.620800 -1.211500 0.345482 0.135420 0.928603
-6.827700 20.858999 -3.044800 0.345482 0.135420 0.928603
-6.824000 22.193899 -3.251500 0.345482 0.135420 0.928603
-2.189200 21.987900 -1.483700 0.345482 0.135420 0.928603
-0.605400 59.453602 0.006800 0.276378 -0.886938 0.370075
-0.226300 59.631802 0.717000 0.276378 -0.886938 0.370075
-0.000000 59.375900 0.272700 0.276378 -0.886938 0.370075
-21.936399 43.055199 -3.733600 0.245050 -0.199318 0.948801
-23.265499 44.290199 -3.614200 0.245050 -0.199318 0.948801
-23.323000 46.228001 -3.425200 0.245050 -0.199318 0.948801
-22.348700 46.932201 -2.822400 0.245050 -0.199318 0.948801
-22.105101 44.119598 -7.074000 0.680722 -0.210597 -0.701617
-23.337700 47.268200 -6.945000 0.680722 -0.210597 -0.701617
-23.881300 46.267799 -5.995500 0.680722 -0.210597 -0.701617
-23.273100 44.479099 -6.170500 0.680722 -0.210597 -0.701617
-22.348700 46.932201 -2.822400 0.710630 0.673907 0.202126
-23.323000 46.228001 -3.425200 0.710630 0.673907 0.202126
-23.881300 46.267799 -5.995500 0.710630 0.673907 0.202126
-23.337700 47.268200 -6.945000 0.710630 0.673907 0.202126
-21.936399 43.055199 -3.733600 0.575702 -0.803125 -0.153486
-22.105101 44.119598 -7.074000 0.575702 -0.803125 -0.153486
-23.273100 44.479099 -6.170500 0.575702 -0.803125 -0.153486
-23.265499 44.290199 -3.614200 0.575702 -0.803125 -0.153486
-23.323000 46.228001 -3.425200 -0.234519 0.052147 0.970712
-23.265499 44.290199 -3.614200 -0.234519 0.052147 0.970712
-24.446100 44.099098 -3.039500 -0.234519 0.052147 0.970712
-24.935400 45.742901 -3.288800 -0.234519 0.052147 0.970712
-23.273100 44.479099 -6.170500 0.051663 0.047611 -0.997529
-23.881300 46.267799 -5.995500 0.051663 0.047611 -0.997529
-25.982700 45.641201 -5.974700 0.051663 0.047611 -0.997529
-25.718901 44.407902 -5.989100 0.051663 0.047611 -0.997529
-23.881300 46.267799 -5.995500 0.283035 0.956157 0.075198
-23.323000 46.228001 -3.425200 0.283035 0.956157 0.075198
-24.935400 45.742901 -3.288800 0.283035 0.956157 0.075198
-25.982700 45.641201 -5.974700 0.283035 0.956157 0.075198
-23.265499 44.290199 -3.614200 -0.050680 -0.993534 -0.101596
-23.273100 44.479099 -6.170500 -0.050680 -0.993534 -0.101596
-25.718901 44.407902 -5.989100 -0.050680 -0.993534 -0.101596
-24.446100 44.099098 -3.039500 -0.050680 -0.993534 -0.101596
-3.798500 31.552500 -0.388900 0.303080 0.047081 0.951802
-4.685700 36.664101 -1.616400 0.303080 0.047081 0.951802
-0.000000 37.009800 0.550700 0.303080 0.047081 0.951802
-0.000000 31.552500 0.128500 0.303080 0.047081 0.951802
-27.058001 43.733101 -1.471100 0.612973 -0.035197 0.789319
-26.775499 43.007000 -1.492900 0.612973 -0.035197 0.789319
-27.637899 42.321201 -1.984400 0.612973 -0.035197 0.789319
-28.100901 44.177299 -2.470000 0.612973 -0.035197 0.789319
-27.102699 45.320202 -5.735100 0.288380 -0.175341 -0.941325
-26.246300 42.901402 -5.383600 0.288380 -0.175341 -0.941325
-25.718901 44.407902 -5.989100 0.288380 -0.175341 -0.941325
-25.982700 45.641201 -5.974700 0.288380 -0.175341 -0.941325
-24.935400 45.742901 -3.288800 0.215944 0.976143 0.022647
-26.753901 45.398300 -2.858600 0.215944 0.976143 0.022647
-27.102699 45.320202 -5.735100 0.215944 0.976143 0.022647
-25.982700 45.641201 -5.974700 0.215944 0.976143 0.022647
-24.446100 44.099098 -3.039500 -0.806467 -0.440747 -0.394147
-25.718901 44.407902 -5.989100 -0.806467 -0.440747 -0.394147
-26.246300 42.901402 -5.383600 -0.806467 -0.440747 -0.394147
-28.380600 42.330502 -3.056600 0.840529 -0.044209 0.539960
-28.697901 44.238201 -3.477500 0.840529 -0.044209 0.539960
-28.100901 44.177299 -2.470000 0.840529 -0.044209 0.539960
-27.637899 42.321201 -1.984400 0.840529 -0.044209 0.539960
-28.380600 42.330502 -3.056600 0.979149 -0.175223 -0.102788
-28.292801 42.543098 -4.446800 0.979149 -0.175223 -0.102788
-28.543800 44.178001 -4.651400 0.979149 -0.175223 -0.102788
-28.697901 44.238201 -3.477500 0.979149 -0.175223 -0.102788
-26.753901 45.398300 -2.858600 0.560189 0.737837 0.376544
-28.100901 44.177299 -2.470000 0.560189 0.737837 0.376544
-28.697901 44.238201 -3.477500 0.560189 0.737837 0.376544
-24.935400 45.742901 -3.288800 -0.484106 0.321222 0.813915
-24.446100 44.099098 -3.039500 -0.484106 0.321222 0.813915
-25.587200 43.557701 -2.038700 -0.484106 0.321222 0.813915
-26.117701 44.487900 -2.198700 -0.484106 0.321222 0.813915
-24.446100 44.099098 -3.039500 -0.765721 -0.642695 -0.024780
-26.246300 42.901402 -5.383600 -0.765721 -0.642695 -0.024780
-25.491899 42.827301 -2.370100 -0.765721 -0.642695 -0.024780
-25.587200 43.557701 -2.038700 -0.765721 -0.642695 -0.024780
-26.753901 45.398300 -2.858600 -0.068715 0.616533 0.784324
-24.935400 45.742901 -3.288800 -0.068715 0.616533 0.784324
-26.117701 44.487900 -2.198700 -0.068715 0.616533 0.784324
-0.000000 31.552500 0.128500 0.069913 -0.031462 0.997057
-0.000000 24.132099 -0.356700 0.069913 -0.031462 0.997057
-3.463700 23.872801 -0.356700 0.069913 -0.031462 0.997057
-3.798500 31.552500 -0.388900 0.069913 -0.031462 0.997057
-2.225300 60.301201 -1.334400 0.789816 -0.226827 0.569860
-0.793500 58.611801 -0.022400 0.789816 -0.226827 0.569860
-2.043500 58.694401 -1.722000 0.789816 -0.226827 0.569860
-0.793500 58.611801 -0.022400 0.800106 -0.097243 0.591924
-0.860300 57.339199 -0.345300 0.800106 -0.097243 0.591924
-2.071800 58.080299 -1.837600 0.800106 -0.097243 0.591924
-2.043500 58.694401 -1.722000 0.800106 -0.097243 0.591924
-2.071800 58.080299 -1.837600 0.594038 -0.791272 0.144939
-0.860300 57.339199 -0.345300 0.594038 -0.791272 0.144939
-0.509500 56.862801 -2.081200 0.594038 -0.791272 0.144939
-1.480400 57.287800 -3.167400 0.594038 -0.791272 0.144939
-0.179900 61.274700 0.058500 0.090663 0.188705 0.977840
-0.785400 61.539799 -0.048800 0.090663 0.188705 0.977840
-0.000000 61.912998 -0.048000 0.090663 0.188705 0.977840
-15.884600 46.520500 -7.855800 0.098387 0.080586 -0.991880
-14.885000 46.974701 -7.946000 0.098387 0.080586 -0.991880
-16.136200 50.023998 -7.546200 0.098387 0.080586 -0.991880
-17.208200 49.477699 -7.512200 0.098387 0.080586 -0.991880
-15.636800 49.715099 -4.015700 0.436830 0.889212 0.135946
-16.810101 49.139900 -3.928800 0.436830 0.889212 0.135946
-17.208200 49.477699 -7.512200 0.436830 0.889212 0.135946
-16.136200 50.023998 -7.546200 0.436830 0.889212 0.135946
-16.192200 44.960400 -4.877100 -0.435886 -0.826304 -0.356686
-14.977100 45.689201 -4.821000 -0.435886 -0.826304 -0.356686
-14.885000 46.974701 -7.946000 -0.435886 -0.826304 -0.356686
-15.884600 46.520500 -7.855800 -0.435886 -0.826304 -0.356686
-16.810101 49.139900 -3.928800 -0.116417 -0.190205 0.974818
-15.636800 49.715099 -4.015700 -0.116417 -0.190205 0.974818
-14.977100 45.689201 -4.821000 -0.116417 -0.190205 0.974818
-16.192200 44.960400 -4.877100 -0.116417 -0.190205 0.974818
-13.779500 47.417198 -7.715300 0.030432 0.115440 -0.992848
-8.756500 49.321098 -7.632900 0.030432 0.115440 -0.992848
-9.827700 52.989700 -7.188500 0.030432 0.115440 -0.992848
-14.989100 50.565300 -7.297200 0.030432 0.115440 -0.992848
-15.636800 49.715099 -4.015700 0.447311 0.883265 0.140554
-16.136200 50.023998 -7.546200 0.447311 0.883265 0.140554
-14.989100 50.565300 -7.297200 0.447311 0.883265 0.140554
-13.779500 47.417198 -7.715300 -0.409629 -0.847844 -0.336696
-14.885000 46.974701 -7.946000 -0.409629 -0.847844 -0.336696
-14.977100 45.689201 -4.821000 -0.409629 -0.847844 -0.336696
-1.239800 14.644800 -6.465300 -0.983473 -0.143727 0.110102
-1.766900 13.754900 -2.918700 -0.983473 -0.143727 0.110102
-1.716700 14.450400 -2.459200 -0.983473 -0.143727 0.110102
-26.117701 44.487900 -2.198700 -0.374471 0.258120 0.890587
-25.587200 43.557701 -2.038700 -0.374471 0.258120 0.890587
-26.775499 43.007000 -1.492900 -0.374471 0.258120 0.890587
-27.058001 43.733101 -1.471100 -0.374471 0.258120 0.890587
-25.587200 43.557701 -2.038700 -0.386633 -0.610879 0.690899
-25.491899 42.827301 -2.370100 -0.386633 -0.610879 0.690899
-27.637899 42.321201 -1.984400 -0.386633 -0.610879 0.690899
-26.775499 43.007000 -1.492900 -0.386633 -0.610879 0.690899
-26.117701 44.487900 -2.198700 0.202601 0.798645 0.566673
-27.058001 43.733101 -1.471100 0.202601 0.798645 0.566673
-28.100901 44.177299 -2.470000 0.202601 0.798645 0.566673
-8.184300 53.108700 -3.320400 0.347207 -0.172872 0.921717
-6.624100 53.529800 -2.653700 0.347207 -0.172872 0.921717
-7.813100 49.342701 -3.886900 0.347207 -0.172872 0.921717
-8.747800 53.770199 -7.353300 0.055764 0.062731 -0.996471
-9.827700 52.989700 -7.188500 0.055764 0.062731 -0.996471
-8.756500 49.321098 -7.632900 0.055764 0.062731 -0.996471
-6.775800 50.206501 -7.534500 0.055764 0.062731 -0.996471
-28.543800 44.178001 -4.651400 0.562493 0.826801 -0.001192
-27.102699 45.320202 -5.735100 0.562493 0.826801 -0.001192
-26.753901 45.398300 -2.858600 0.562493 0.826801 -0.001192
-28.697901 44.238201 -3.477500 0.562493 0.826801 -0.001192
-26.246300 42.901402 -5.383600 -0.106461 -0.983873 -0.143736
-28.292801 42.543098 -4.446800 -0.106461 -0.983873 -0.143736
-28.380600 42.330502 -3.056600 -0.106461 -0.983873 -0.143736
-28.100901 44.177299 -2.470000 0.192584 0.484112 0.853550
-26.753901 45.398300 -2.858600 0.192584 0.484112 0.853550
-26.117701 44.487900 -2.198700 0.192584 0.484112 0.853550
-1.712600 0.024900 -9.195700 -0.013475 -0.999909 -0.000374
-3.252600 0.001600 -8.591000 -0.013475 -0.999909 -0.000374
-5.176800 -0.025000 -0.598300 -0.013475 -0.999909 -0.000374
-3.769300 -0.009000 1.132900 -0.013475 -0.999909 -0.000374
-0.000000 61.912998 -0.048000 0.158526 0.331625 0.929997
-0.785400 61.539799 -0.048800 0.158526 0.331625 0.929997
-0.000000 62.775902 -0.355700 0.158526 0.331625 0.929997
-0.340300 31.400700 -9.928000 -0.943868 -0.327610 -0.042246
-0.845100 29.891001 -9.498900 -0.943868 -0.327610 -0.042246
-0.425600 30.069099 -1.507500 -0.943868 -0.327610 -0.042246
-0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968
-0.509500 56.862801 -2.081200 0.098448 -0.971038 0.217700
-0.860300 57.339199 -0.345300 0.098448 -0.971038 0.217700
-0.000000 57.320400 0.190300 0.098448 -0.971038 0.217700
-0.000000 56.862801 -2.081200 0.098448 -0.971038 0.217700
-5.598500 31.822901 -1.404300 0.881264 0.021588 0.472131
-6.824000 22.193899 -3.251500 0.881264 0.021588 0.472131
-7.453900 29.910801 -4.780100 0.881264 0.021588 0.472131
-6.824000 22.193899 -3.251500 0.921284 -0.108958 -0.373315
-5.317800 22.936800 -8.016200 0.921284 -0.108958 -0.373315
-5.595300 29.761600 -8.492500 0.921284 -0.108958 -0.373315
-7.453900 29.910801 -4.780100 0.921284 -0.108958 -0.373315
-3.798500 31.552500 -0.388900 0.401815 -0.146587 0.903912
-2.189200 21.987900 -1.483700 0.401815 -0.146587 0.903912
-6.824000 22.193899 -3.251500 0.401815 -0.146587 0.903912
-5.598500 31.822901 -1.404300 0.401815 -0.146587 0.903912
-0.340300 31.400700 -9.928000 0.230509 -0.107925 -0.967067
-4.970000 33.082802 -8.871900 0.230509 -0.107925 -0.967067
-5.595300 29.761600 -8.492500 0.230509 -0.107925 -0.967067
-0.845100 29.891001 -9.498900 0.230509 -0.107925 -0.967067
-0.835600 22.853901 -8.210700 -0.992236 -0.110106 0.057826
-2.189200 21.987900 -1.483700 -0.992236 -0.110106 0.057826
-0.425600 30.069099 -1.507500 -0.992236 -0.110106 0.057826
-0.845100 29.891001 -9.498900 -0.992236 -0.110106 0.057826
-2.162800 35.743500 -9.599900 0.324673 0.084802 -0.942017
-5.283200 35.952900 -7.814600 0.324673 0.084802 -0.942017
-4.970000 33.082802 -8.871900 0.324673 0.084802 -0.942017
-0.340300 31.400700 -9.928000 0.324673 0.084802 -0.942017
-5.283200 35.952900 -7.814600 0.889642 0.311183 -0.334218
-5.919200 37.619099 -4.570300 0.889642 0.311183 -0.334218
-6.542300 35.480598 -4.902800 0.889642 0.311183 -0.334218
-5.919200 37.619099 -4.570300 0.882631 0.186784 0.431364
-4.685700 36.664101 -1.616400 0.882631 0.186784 0.431364
-5.598500 31.822901 -1.404300 0.882631 0.186784 0.431364
-6.542300 35.480598 -4.902800 0.882631 0.186784 0.431364
-0.474100 61.294899 -0.607800 0.490764 0.255871 0.832875
-0.596000 60.268700 -0.255900 0.490764 0.255871 0.832875
-2.225300 60.301201 -1.334400 0.490764 0.255871 0.832875
-1.340700 61.343498 -1.024900 0.490764 0.255871 0.832875
-1.340700 61.343498 -1.024900 0.199083 -0.932669 0.300824
-1.792100 61.563202 -0.648200 0.199083 -0.932669 0.300824
-0.785400 61.539799 -0.048800 0.199083 -0.932669 0.300824
-0.474100 61.294899 -0.607800 0.199083 -0.932669 0.300824
-0.000000 45.235802 -8.516300 0.205813 0.023108 -0.978318
-5.495700 46.043098 -6.732400 0.205813 0.023108 -0.978318
-2.827600 38.171799 -8.088300 0.205813 0.023108 -0.978318
-0.000000 38.221600 -8.073300 0.205813 0.023108 -0.978318
-0.425600 30.069099 -1.507500 -0.290133 -0.060504 0.955072
-2.189200 21.987900 -1.483700 -0.290133 -0.060504 0.955072
-3.798500 31.552500 -0.388900 -0.290133 -0.060504 0.955072
-0.000000 31.547001 -9.939100 -0.348901 -0.925923 -0.144686
-0.340300 31.400700 -9.928000 -0.348901 -0.925923 -0.144686
-0.425600 30.069099 -1.507500 -0.348901 -0.925923 -0.144686
-0.000000 30.215401 -1.522000 -0.348901 -0.925923 -0.144686
-21.061199 44.183601 -7.611200 0.028361 0.039319 -0.998824
-15.884600 46.520500 -7.855800 0.028361 0.039319 -0.998824
-17.208200 49.477699 -7.512200 0.028361 0.039319 -0.998824
-22.585199 48.327702 -7.594400 0.028361 0.039319 -0.998824
-22.348700 46.932201 -2.822400 0.723103 0.652497 0.226650
-23.337700 47.268200 -6.945000 0.723103 0.652497 0.226650
-22.585199 48.327702 -7.594400 0.723103 0.652497 0.226650
-21.061199 44.183601 -7.611200 0.095048 -0.949863 -0.297868
-22.105101 44.119598 -7.074000 0.095048 -0.949863 -0.297868
-21.936399 43.055199 -3.733600 0.095048 -0.949863 -0.297868
-0.340300 31.400700 -9.928000 0.010374 0.075249 -0.997111
-0.000000 31.547001 -9.939100 0.010374 0.075249 -0.997111
-0.000000 35.795200 -9.599900 0.010374 0.075249 -0.997111
-2.162800 35.743500 -9.599900 0.010374 0.075249 -0.997111
-5.919200 37.619099 -4.570300 0.561685 0.544798 -0.622660
-5.283200 35.952900 -7.814600 0.561685 0.544798 -0.622660
-2.162800 35.743500 -9.599900 0.561685 0.544798 -0.622660
-2.827600 38.171799 -8.088300 0.561685 0.544798 -0.622660
-28.543800 44.178001 -4.651400 0.410462 -0.233070 -0.881589
-28.292801 42.543098 -4.446800 0.410462 -0.233070 -0.881589
-26.246300 42.901402 -5.383600 0.410462 -0.233070 -0.881589
-27.102699 45.320202 -5.735100 0.410462 -0.233070 -0.881589
-25.491899 42.827301 -2.370100 -0.201709 -0.968181 -0.148119
-28.380600 42.330502 -3.056600 -0.201709 -0.968181 -0.148119
-27.637899 42.321201 -1.984400 -0.201709 -0.968181 -0.148119
-26.246300 42.901402 -5.383600 -0.185319 -0.980147 -0.070494
-28.380600 42.330502 -3.056600 -0.185319 -0.980147 -0.070494
-25.491899 42.827301 -2.370100 -0.185319 -0.980147 -0.070494
-2.162800 35.743500 -9.599900 0.008224 0.529675 -0.848161
-0.000000 35.795200 -9.599900 0.008224 0.529675 -0.848161
-0.000000 38.221600 -8.073300 0.008224 0.529675 -0.848161
-2.827600 38.171799 -8.088300 0.008224 0.529675 -0.848161
-0.706900 62.538601 -0.289700 0.498102 0.211804 0.840853
-1.838200 62.255798 -0.802600 0.498102 0.211804 0.840853
-1.901400 63.532299 -1.247600 0.498102 0.211804 0.840853
-0.672300 63.485901 -0.421800 0.498102 0.211804 0.840853
-1.901400 63.532299 -1.247600 0.915374 0.111541 0.386845
-1.838200 62.255798 -0.802600 0.915374 0.111541 0.386845
-3.194200 60.597198 -3.460400 0.915374 0.111541 0.386845
-2.758700 63.532299 -3.348800 0.915374 0.111541 0.386845
-2.758700 63.532299 -3.348800 0.984906 0.142377 0.098436
-3.194200 60.597198 -3.460400 0.984906 0.142377 0.098436
-3.446000 60.597198 -5.980300 0.984906 0.142377 0.098436
-3.010600 63.532299 -5.868700 0.984906 0.142377 0.098436
-3.194200 60.597198 -3.460400 0.917633 0.222238 0.329485
-1.838200 62.255798 -0.802600 0.917633 0.222238 0.329485
-2.336800 60.597198 -1.072500 0.917633 0.222238 0.329485
-2.130500 53.628601 -1.359200 0.842435 0.033555 0.537753
-4.088800 54.879799 -3.460400 0.842435 0.033555 0.537753
-3.194200 60.597198 -3.460400 0.842435 0.033555 0.537753
-2.336800 60.597198 -1.072500 0.842435 0.033555 0.537753
-4.088800 54.879799 -3.460400 0.982155 0.156435 0.104398
-4.340700 55.234299 -6.210400 0.982155 0.156435 0.104398
-3.446000 60.597198 -5.980300 0.982155 0.156435 0.104398
-3.194200 60.597198 -3.460400 0.982155 0.156435 0.104398
-3.010600 63.532299 -5.868700 0.839145 0.204241 -0.504105
-3.446000 60.597198 -5.980300 0.839145 0.204241 -0.504105
-2.517200 60.597198 -7.879200 0.839145 0.204241 -0.504105
-1.932100 63.532299 -7.311200 0.839145 0.204241 -0.504105
-3.446000 60.597198 -5.980300 0.847590 0.127945 -0.514996
-4.340700 55.234299 -6.210400 0.847590 0.127945 -0.514996
-2.990300 54.496300 -8.246000 0.847590 0.127945 -0.514996
-2.517200 60.597198 -7.879200 0.847590 0.127945 -0.514996
-1.932100 63.532299 -7.311200 0.365116 0.222173 -0.904063
-2.517200 60.597198 -7.879200 0.365116 0.222173 -0.904063
-0.000000 60.597198 -8.812800 0.365116 0.222173 -0.904063
-0.000000 63.532299 -8.174500 0.365116 0.222173 -0.904063
-2.990300 54.496300 -8.246000 0.255106 0.035267 -0.966270
-0.000000 54.050800 -8.782700 0.255106 0.035267 -0.966270
-0.000000 60.597198 -8.812800 0.255106 0.035267 -0.966270
-2.517200 60.597198 -7.879200 0.255106 0.035267 -0.966270
-0.672300 63.485901 -0.421800 0.422112 0.618267 0.662999
-1.901400 63.532299 -1.247600 0.422112 0.618267 0.662999
-1.171400 65.057899 -2.205500 0.422112 0.618267 0.662999
-1.901400 63.532299 -1.247600 0.756752 0.608663 0.238446
-2.758700 63.532299 -3.348800 0.756752 0.608663 0.238446
-1.795600 65.057899 -4.806100 0.756752 0.608663 0.238446
-1.171400 65.057899 -2.205500 0.756752 0.608663 0.238446
-2.758700 63.532299 -3.348800 0.806293 0.585999 0.080601
-3.010600 63.532299 -5.868700 0.806293 0.585999 0.080601
-1.795600 65.057899 -4.806100 0.806293 0.585999 0.080601
-3.010600 63.532299 -5.868700 0.468822 0.765524 -0.440657
-1.932100 63.532299 -7.311200 0.468822 0.765524 -0.440657
-0.000000 65.057899 -6.421400 0.468822 0.765524 -0.440657
-1.795600 65.057899 -4.806100 0.468822 0.765524 -0.440657
-1.932100 63.532299 -7.311200 0.281463 0.723860 -0.629925
-0.000000 63.532299 -8.174500 0.281463 0.723860 -0.629925
-0.000000 65.057899 -6.421400 0.281463 0.723860 -0.629925
-1.171400 65.057899 -2.205500 0.296421 0.952404 0.071148
-1.795600 65.057899 -4.806100 0.296421 0.952404 0.071148
-0.000000 65.560898 -4.058400 0.296421 0.952404 0.071148
-1.795600 65.057899 -4.806100 0.184093 0.961370 -0.204641
-0.000000 65.057899 -6.421400 0.184093 0.961370 -0.204641
-0.000000 65.560898 -4.058400 0.184093 0.961370 -0.204641
-0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183
-1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183
--1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183
--0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183
-0.706900 62.538601 -0.289700 0.204667 0.142518 0.968401
-0.672300 63.485901 -0.421800 0.204667 0.142518 0.968401
-0.000000 62.538601 -0.140300 0.204667 0.142518 0.968401
-0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572
--0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572
-0.000000 62.538601 -0.140300 -0.000000 0.284850 0.958572
-2.130500 53.628601 -1.359200 -0.899990 0.017690 0.435552
-2.336800 60.597198 -1.072500 -0.899990 0.017690 0.435552
-1.393700 60.597198 -3.164700 -0.899990 0.017690 0.435552
-1.187300 53.628601 -3.164700 -0.899990 0.017690 0.435552
--0.706900 62.538601 -0.289700 -0.498102 0.211804 0.840853
--0.672300 63.485901 -0.421800 -0.498102 0.211804 0.840853
--1.901400 63.532299 -1.247600 -0.498102 0.211804 0.840853
--1.838200 62.255798 -0.802600 -0.498102 0.211804 0.840853
--1.901400 63.532299 -1.247600 -0.915374 0.111541 0.386845
--2.758700 63.532299 -3.348800 -0.915374 0.111541 0.386845
--3.194200 60.597198 -3.460400 -0.915374 0.111541 0.386845
--1.838200 62.255798 -0.802600 -0.915374 0.111541 0.386845
--2.758700 63.532299 -3.348800 -0.984906 0.142377 0.098436
--3.010600 63.532299 -5.868700 -0.984906 0.142377 0.098436
--3.446000 60.597198 -5.980300 -0.984906 0.142377 0.098436
--3.194200 60.597198 -3.460400 -0.984906 0.142377 0.098436
--3.194200 60.597198 -3.460400 -0.917633 0.222238 0.329485
--2.336800 60.597198 -1.072500 -0.917633 0.222238 0.329485
--1.838200 62.255798 -0.802600 -0.917633 0.222238 0.329485
--2.130500 53.628601 -1.359200 -0.842435 0.033555 0.537753
--2.336800 60.597198 -1.072500 -0.842435 0.033555 0.537753
--3.194200 60.597198 -3.460400 -0.842435 0.033555 0.537753
--4.088800 54.879799 -3.460400 -0.842435 0.033555 0.537753
--4.088800 54.879799 -3.460400 -0.982155 0.156435 0.104398
--3.194200 60.597198 -3.460400 -0.982155 0.156435 0.104398
--3.446000 60.597198 -5.980300 -0.982155 0.156435 0.104398
--4.340700 55.234299 -6.210400 -0.982155 0.156435 0.104398
--3.010600 63.532299 -5.868700 -0.839145 0.204241 -0.504105
--1.932100 63.532299 -7.311200 -0.839145 0.204241 -0.504105
--2.517200 60.597198 -7.879200 -0.839145 0.204241 -0.504105
--3.446000 60.597198 -5.980300 -0.839145 0.204241 -0.504105
--3.446000 60.597198 -5.980300 -0.847590 0.127945 -0.514996
--2.517200 60.597198 -7.879200 -0.847590 0.127945 -0.514996
--2.990300 54.496300 -8.246000 -0.847590 0.127945 -0.514996
--4.340700 55.234299 -6.210400 -0.847590 0.127945 -0.514996
--1.932100 63.532299 -7.311200 -0.365116 0.222173 -0.904063
-0.000000 63.532299 -8.174500 -0.365116 0.222173 -0.904063
-0.000000 60.597198 -8.812800 -0.365116 0.222173 -0.904063
--2.517200 60.597198 -7.879200 -0.365116 0.222173 -0.904063
--2.990300 54.496300 -8.246000 -0.255106 0.035267 -0.966270
--2.517200 60.597198 -7.879200 -0.255106 0.035267 -0.966270
-0.000000 60.597198 -8.812800 -0.255106 0.035267 -0.966270
-0.000000 54.050800 -8.782700 -0.255106 0.035267 -0.966270
--0.672300 63.485901 -0.421800 -0.422112 0.618267 0.662999
--1.171400 65.057899 -2.205500 -0.422112 0.618267 0.662999
--1.901400 63.532299 -1.247600 -0.422112 0.618267 0.662999
--1.901400 63.532299 -1.247600 -0.756752 0.608663 0.238446
--1.171400 65.057899 -2.205500 -0.756752 0.608663 0.238446
--1.795600 65.057899 -4.806100 -0.756752 0.608663 0.238446
--2.758700 63.532299 -3.348800 -0.756752 0.608663 0.238446
--2.758700 63.532299 -3.348800 -0.806293 0.585999 0.080601
--1.795600 65.057899 -4.806100 -0.806293 0.585999 0.080601
--3.010600 63.532299 -5.868700 -0.806293 0.585999 0.080601
--3.010600 63.532299 -5.868700 -0.468822 0.765524 -0.440657
--1.795600 65.057899 -4.806100 -0.468822 0.765524 -0.440657
-0.000000 65.057899 -6.421400 -0.468822 0.765524 -0.440657
--1.932100 63.532299 -7.311200 -0.468822 0.765524 -0.440657
--1.932100 63.532299 -7.311200 -0.281463 0.723860 -0.629925
-0.000000 65.057899 -6.421400 -0.281463 0.723860 -0.629925
-0.000000 63.532299 -8.174500 -0.281463 0.723860 -0.629925
--1.171400 65.057899 -2.205500 -0.296421 0.952404 0.071148
-0.000000 65.560898 -4.058400 -0.296421 0.952404 0.071148
--1.795600 65.057899 -4.806100 -0.296421 0.952404 0.071148
--1.795600 65.057899 -4.806100 -0.184093 0.961370 -0.204641
-0.000000 65.560898 -4.058400 -0.184093 0.961370 -0.204641
-0.000000 65.057899 -6.421400 -0.184093 0.961370 -0.204641
--1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984
-1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984
-0.000000 65.560898 -4.058400 0.000000 0.965072 0.261984
--0.706900 62.538601 -0.289700 -0.204667 0.142518 0.968401
-0.000000 62.538601 -0.140300 -0.204667 0.142518 0.968401
--0.672300 63.485901 -0.421800 -0.204667 0.142518 0.968401
--2.130500 53.628601 -1.359200 0.899990 0.017690 0.435552
--1.187300 53.628601 -3.164700 0.899990 0.017690 0.435552
--1.393700 60.597198 -3.164700 0.899990 0.017690 0.435552
--2.336800 60.597198 -1.072500 0.899990 0.017690 0.435552
-8.704300 24.905701 -6.036500 0.233777 0.158187 -0.959336
-7.984800 25.127701 -6.177400 0.233777 0.158187 -0.959336
-7.649900 27.558001 -5.856100 0.233777 0.158187 -0.959336
-8.503900 27.435900 -5.670300 0.233777 0.158187 -0.959336
-6.463600 36.223400 -3.704900 0.910800 0.108730 0.398273
-5.778000 35.994701 -1.773100 0.910800 0.108730 0.398273
-7.451900 27.210300 -3.504400 0.910800 0.108730 0.398273
-8.503900 27.435900 -5.670300 0.910800 0.108730 0.398273
-5.115000 35.782600 -2.051700 -0.272059 -0.232411 0.933793
-6.597900 27.332300 -3.690200 -0.272059 -0.232411 0.933793
-7.451900 27.210300 -3.504400 -0.272059 -0.232411 0.933793
-5.778000 35.994701 -1.773100 -0.272059 -0.232411 0.933793
-5.743400 36.019600 -3.995900 0.266707 0.266447 -0.926215
-6.463600 36.223400 -3.704900 0.266707 0.266447 -0.926215
-8.503900 27.435900 -5.670300 0.266707 0.266447 -0.926215
-7.649900 27.558001 -5.856100 0.266707 0.266447 -0.926215
-7.451900 27.210300 -3.504400 -0.285900 -0.782712 0.552832
-6.597900 27.332300 -3.690200 -0.285900 -0.782712 0.552832
-7.984800 25.127701 -6.177400 -0.285900 -0.782712 0.552832
-8.704300 24.905701 -6.036500 -0.285900 -0.782712 0.552832
-7.451900 27.210300 -3.504400 0.899158 0.007889 0.437552
-8.704300 24.905701 -6.036500 0.899158 0.007889 0.437552
-8.503900 27.435900 -5.670300 0.899158 0.007889 0.437552
-6.463600 36.223400 -3.704900 -0.293676 0.955783 0.015277
-5.743400 36.019600 -3.995900 -0.293676 0.955783 0.015277
-5.115000 35.782600 -2.051700 -0.293676 0.955783 0.015277
-5.778000 35.994701 -1.773100 -0.293676 0.955783 0.015277
-4.513000 55.007702 -5.909800 -0.189279 -0.709198 -0.679126
-4.291100 55.098900 -5.871800 -0.189279 -0.709198 -0.679126
-4.207800 55.799599 -6.651700 -0.189279 -0.709198 -0.679126
-4.871900 55.799599 -6.765400 -0.189279 -0.709198 -0.679126
-2.904000 62.455601 -5.700500 0.959060 0.270852 0.082723
-2.764700 62.455601 -4.128400 0.959060 0.270852 0.082723
-4.736600 55.799599 -5.153900 0.959060 0.270852 0.082723
-4.871900 55.799599 -6.765400 0.959060 0.270852 0.082723
-2.764700 62.455601 -4.128400 0.167860 -0.101350 0.980587
-4.072400 55.799599 -5.040200 0.167860 -0.101350 0.980587
-4.736600 55.799599 -5.153900 0.167860 -0.101350 0.980587
-2.904000 62.455601 -5.700500 -0.167781 0.107182 -0.979980
-4.871900 55.799599 -6.765400 -0.167781 0.107182 -0.979980
-4.207800 55.799599 -6.651700 -0.167781 0.107182 -0.979980
-4.736600 55.799599 -5.153900 0.042232 -0.727963 0.684314
-4.072400 55.799599 -5.040200 0.042232 -0.727963 0.684314
-4.291100 55.098900 -5.871800 0.042232 -0.727963 0.684314
-4.513000 55.007702 -5.909800 0.042232 -0.727963 0.684314
-4.736600 55.799599 -5.153900 0.937220 -0.339745 0.078688
-4.513000 55.007702 -5.909800 0.937220 -0.339745 0.078688
-4.871900 55.799599 -6.765400 0.937220 -0.339745 0.078688
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meshes/ply/Normal_UVs_Colors.ply b/src/tests/evas/meshes/ply/Normal_UVs_Colors.ply
deleted file mode 100644
index 797151afb1..0000000000
--- a/src/tests/evas/meshes/ply/Normal_UVs_Colors.ply
+++ /dev/null
@@ -1,1684 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-property float s
-property float t
-property uchar red
-property uchar green
-property uchar blue
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600 -0.021734 0.023193 -0.999495 0.094400 0.185800 0 253 27
--2.020300 14.610600 -8.278800 -0.021734 0.023193 -0.999495 0.060000 0.185800 0 253 27
--1.712600 0.024900 -9.195700 -0.021734 0.023193 -0.999495 0.089900 0.023200 254 68 73
--3.252600 0.001600 -8.591000 -0.021734 0.023193 -0.999495 0.107400 0.025300 254 68 73
--4.649800 14.945700 -8.785600 -0.983809 -0.091724 -0.153967 0.094400 0.185800 254 68 73
--3.252600 0.001600 -8.591000 -0.983809 -0.091724 -0.153967 0.107400 0.025300 254 88 92
--4.089400 2.633000 -5.031300 -0.983809 -0.091724 -0.153967 0.145000 0.057700 254 68 73
--5.308800 13.910900 -3.738700 -0.983809 -0.091724 -0.153967 0.154100 0.185800 254 68 73
--1.553600 3.059500 -4.173500 0.398905 -0.098999 0.911633 0.181500 0.058600 18 0 253
--1.766900 13.754900 -2.918700 0.398905 -0.098999 0.911633 0.193300 0.185800 0 254 27
--3.061600 3.537800 -3.461700 0.398905 -0.098999 0.911633 0.164000 0.067400 18 0 252
--1.553600 3.059500 -4.173500 0.977159 -0.002648 0.212493 0.181500 0.058600 18 0 253
--0.626000 0.031700 -8.336200 0.977159 -0.002648 0.212493 0.220100 0.017000 19 0 253
--0.971400 14.644800 -6.706400 0.977159 -0.002648 0.212493 0.225200 0.185800 27 229 30
--1.766900 13.754900 -2.918700 0.977159 -0.002648 0.212493 0.193300 0.185800 0 253 27
--5.495700 46.043098 -6.732400 -0.860977 -0.085411 -0.501422 0.139900 0.788400 254 254 254
--2.827600 38.171799 -8.088300 -0.860977 -0.085411 -0.501422 0.114500 0.661600 254 254 254
--5.919200 37.619099 -4.570300 -0.860977 -0.085411 -0.501422 0.183200 0.661600 254 254 254
--6.029500 46.188801 -3.956000 -0.860977 -0.085411 -0.501422 0.183300 0.792100 254 254 254
--4.685700 36.664101 -1.616400 -0.917535 -0.032092 0.396359 0.239100 0.661600 13 240 28
--4.298500 47.001099 -0.058900 -0.917535 -0.032092 0.396359 0.249300 0.802400 5 247 27
--6.029500 46.188801 -3.956000 -0.917535 -0.032092 0.396359 0.183300 0.792100 0 253 27
--5.919200 37.619099 -4.570300 -0.917535 -0.032092 0.396359 0.183200 0.661600 0 253 27
--6.775800 50.206501 -7.534500 -0.223809 0.028781 -0.974208 0.134100 0.852600 0 254 27
--7.252500 54.524502 -7.615000 -0.223809 0.028781 -0.974208 0.126100 0.913200 0 254 27
-0.000000 53.738098 -8.986800 -0.223809 0.028781 -0.974208 0.028100 0.877800 0 254 27
-0.000000 50.037800 -9.413700 -0.223809 0.028781 -0.974208 0.041800 0.827300 0 254 27
--7.252500 54.524502 -7.615000 -0.375359 0.901424 0.215731 0.812300 0.981700 0 253 27
--8.747800 53.770199 -7.353300 -0.375359 0.901424 0.215731 0.807700 0.944900 0 253 27
--8.184300 53.108700 -3.320400 -0.375359 0.901424 0.215731 0.746000 0.944900 0 253 27
--6.624100 53.529800 -2.653700 -0.375359 0.901424 0.215731 0.746000 0.986600 0 253 27
--9.827700 52.989700 -7.188500 -0.412168 0.895237 0.169320 0.805500 0.922700 0 253 27
--14.989100 50.565300 -7.297200 -0.412168 0.895237 0.169320 0.805300 0.834400 0 253 27
--15.636800 49.715099 -4.015700 -0.412168 0.895237 0.169320 0.746000 0.809400 0 253 27
--9.508400 52.403099 -3.672700 -0.412168 0.895237 0.169320 0.746000 0.922700 0 253 27
-0.000000 37.009800 0.550700 -0.339751 -0.089043 0.936291 0.310700 0.661600 172 124 55
-0.000000 47.287498 1.094200 -0.339751 -0.089043 0.936291 0.310700 0.805700 0 252 27
--4.298500 47.001099 -0.058900 -0.339751 -0.089043 0.936291 0.249300 0.802400 0 253 27
--4.685700 36.664101 -1.616400 -0.339751 -0.089043 0.936291 0.239100 0.661600 13 226 40
-0.000000 53.738098 -8.986800 -0.139268 0.841727 -0.521633 0.028100 0.877800 0 254 27
--7.252500 54.524502 -7.615000 -0.139268 0.841727 -0.521633 0.126100 0.913200 0 254 27
--2.321200 55.471001 -5.570800 -0.139268 0.841727 -0.521633 0.053700 0.941000 0 254 27
-0.000000 55.950600 -7.250100 -0.139268 0.841727 -0.521633 0.022400 0.916300 0 254 27
--6.624100 53.529800 -2.653700 -0.510018 -0.190129 0.838888 0.210200 0.900400 0 253 27
--7.813100 49.342701 -3.886900 -0.510018 -0.190129 0.838888 0.181000 0.844200 0 253 27
--6.029500 46.188801 -3.956000 -0.510018 -0.190129 0.838888 0.183300 0.792100 0 253 27
--3.773800 51.093601 -1.034300 -0.510018 -0.190129 0.838888 0.256600 0.864400 0 253 27
--6.029500 46.188801 -3.956000 -0.909885 0.202901 0.361857 0.183300 0.792100 0 253 27
--4.298500 47.001099 -0.058900 -0.909885 0.202901 0.361857 0.249300 0.802400 5 247 27
--3.773800 51.093601 -1.034300 -0.909885 0.202901 0.361857 0.256600 0.864400 0 253 27
-0.000000 50.880199 0.110000 -0.266804 0.255185 0.929352 0.310700 0.860500 0 253 27
--3.773800 51.093601 -1.034300 -0.266804 0.255185 0.929352 0.256600 0.864400 0 253 27
--4.298500 47.001099 -0.058900 -0.266804 0.255185 0.929352 0.249300 0.802400 0 253 27
-0.000000 47.287498 1.094200 -0.266804 0.255185 0.929352 0.310700 0.805700 0 252 27
--16.136200 50.023998 -7.546200 0.129075 0.179950 -0.975171 0.808600 0.809400 0 249 27
--14.989100 50.565300 -7.297200 0.129075 0.179950 -0.975171 0.805300 0.834400 0 252 27
--13.779500 47.417198 -7.715300 0.129075 0.179950 -0.975171 0.879500 0.834400 0 253 27
--14.885000 46.974701 -7.946000 0.129075 0.179950 -0.975171 0.879500 0.809400 0 251 27
--13.779500 47.417198 -7.715300 0.437873 -0.882573 -0.171264 0.626900 0.829400 0 253 27
--8.756500 49.321098 -7.632900 0.437873 -0.882573 -0.171264 0.626900 0.922700 0 253 27
--8.927200 49.128502 -4.128200 0.437873 -0.882573 -0.171264 0.688900 0.922700 0 253 27
--14.977100 45.689201 -4.821000 0.437873 -0.882573 -0.171264 0.680000 0.809400 0 248 31
--17.208200 49.477699 -7.512200 -0.268622 0.938905 0.215175 0.810800 0.788400 0 253 27
--22.585199 48.327702 -7.594400 -0.268622 0.938905 0.215175 0.812700 0.705100 0 253 27
--22.348700 46.932201 -2.822400 -0.268622 0.938905 0.215175 0.746000 0.680200 72 195 37
--16.810101 49.139900 -3.928800 -0.268622 0.938905 0.215175 0.746000 0.788400 0 253 27
--21.936399 43.055199 -3.733600 0.256926 -0.186034 0.948357 0.691800 0.680200 24 182 75
--16.192200 44.960400 -4.877100 0.256926 -0.186034 0.948357 0.677700 0.788400 0 236 42
--16.810101 49.139900 -3.928800 0.256926 -0.186034 0.948357 0.746000 0.788400 0 253 27
--22.348700 46.932201 -2.822400 0.256926 -0.186034 0.948357 0.746000 0.680200 72 195 37
--22.105101 44.119598 -7.074000 -0.471869 -0.161034 -0.866838 0.862200 0.680200 254 254 254
--23.337700 47.268200 -6.945000 -0.471869 -0.161034 -0.866838 0.809900 0.680200 254 254 254
--22.585199 48.327702 -7.594400 -0.471869 -0.161034 -0.866838 0.812700 0.705100 254 254 254
--21.061199 44.183601 -7.611200 -0.471869 -0.161034 -0.866838 0.879500 0.705100 254 254 254
--15.884600 46.520500 -7.855800 0.312108 -0.901546 -0.299673 0.626900 0.788400 0 250 27
--16.192200 44.960400 -4.877100 0.312108 -0.901546 -0.299673 0.677700 0.788400 0 253 27
--21.936399 43.055199 -3.733600 0.312108 -0.901546 -0.299673 0.691800 0.680200 0 253 27
--21.061199 44.183601 -7.611200 0.312108 -0.901546 -0.299673 0.626900 0.699700 52 208 31
--5.598500 31.822901 -1.405400 -0.899226 0.141575 0.413943 0.185400 0.436500 133 152 48
--7.174300 32.815300 -5.168000 -0.899226 0.141575 0.413943 0.136400 0.440500 0 253 27
--7.453900 29.910801 -4.782000 -0.899226 0.141575 0.413943 0.143900 0.408700 0 253 27
--4.970000 33.082802 -8.871300 -0.875321 0.068314 -0.478692 0.086900 0.436600 0 253 27
--5.595300 29.761600 -8.491100 -0.875321 0.068314 -0.478692 0.097300 0.399700 0 253 27
--7.453900 29.910801 -4.782000 -0.875321 0.068314 -0.478692 0.143900 0.408700 0 253 27
--7.174300 32.815300 -5.168000 -0.875321 0.068314 -0.478692 0.136400 0.440500 0 253 27
--6.827700 20.858999 -3.051400 -0.895608 -0.345701 -0.279959 0.166500 0.297500 254 254 254
--5.426000 21.341299 -8.131100 -0.895608 -0.345701 -0.279959 0.106600 0.297500 254 254 254
--6.194700 19.576300 -3.492500 -0.895608 -0.345701 -0.279959 0.163400 0.285600 254 254 254
--0.835600 22.853901 -8.203000 -0.044062 0.086408 -0.995285 0.053300 0.313700 0 253 27
--0.899900 21.410400 -8.342700 -0.044062 0.086408 -0.995285 0.054900 0.297500 0 253 27
--5.426000 21.341299 -8.131100 -0.044062 0.086408 -0.995285 0.106600 0.297500 0 253 27
--5.317800 22.936800 -8.014600 -0.044062 0.086408 -0.995285 0.105500 0.313700 0 253 27
--0.899900 21.410400 -8.342700 0.986890 0.053202 0.152371 0.307200 0.297500 219 57 99
--1.957400 20.620800 -1.217700 0.986890 0.053202 0.152371 0.224300 0.297500 254 68 73
--1.853000 19.164200 -1.385300 0.986890 0.053202 0.152371 0.221600 0.281000 254 68 73
--6.194700 19.576300 -3.492500 -0.393090 -0.299033 0.869517 0.163400 0.285600 114 254 128
--1.853000 19.164200 -1.385300 -0.393090 -0.299033 0.869517 0.221600 0.281000 242 254 242
--1.957400 20.620800 -1.217700 -0.393090 -0.299033 0.869517 0.224300 0.297500 242 254 242
--6.827700 20.858999 -3.051400 -0.393090 -0.299033 0.869517 0.166500 0.297500 168 254 177
--5.259600 15.490400 -9.599400 0.139442 0.106302 -0.984508 0.090700 0.228600 0 253 27
--5.426000 21.341299 -8.131100 0.139442 0.106302 -0.984508 0.106600 0.297500 0 253 27
--0.899900 21.410400 -8.342700 0.139442 0.106302 -0.984508 0.054900 0.297500 0 253 27
--0.294400 16.169500 -7.962700 0.139442 0.106302 -0.984508 0.039600 0.241800 0 253 27
--0.294400 16.169500 -7.962700 0.977002 0.117101 0.178197 0.282300 0.223700 0 253 27
--0.899900 21.410400 -8.342700 0.977002 0.117101 0.178197 0.307200 0.297500 1 216 59
--1.853000 19.164200 -1.385300 0.977002 0.117101 0.178197 0.221600 0.281000 0 253 27
--1.221800 14.450400 -2.004100 0.977002 0.117101 0.178197 0.220300 0.236900 0 253 27
--1.853000 19.164200 -1.385300 -0.395956 -0.119778 0.910424 0.221600 0.281000 254 254 254
--6.194700 19.576300 -3.492500 -0.395956 -0.119778 0.910424 0.163400 0.285600 254 254 254
--6.498700 14.643000 -4.000600 -0.395956 -0.119778 0.910424 0.151700 0.232900 91 254 108
--1.221800 14.450400 -2.004100 -0.395956 -0.119778 0.910424 0.220300 0.236900 0 254 27
--6.498700 14.643000 -4.000600 -0.982418 0.045709 -0.181012 0.151700 0.232900 254 254 254
--6.194700 19.576300 -3.492500 -0.982418 0.045709 -0.181012 0.163400 0.285600 254 254 254
--5.426000 21.341299 -8.131100 -0.982418 0.045709 -0.181012 0.106600 0.297500 254 254 254
--5.259600 15.490400 -9.599400 -0.982418 0.045709 -0.181012 0.090700 0.228600 254 254 254
--7.813100 49.342701 -3.886900 -0.881229 -0.394976 -0.259672 0.181000 0.844200 254 68 73
--6.775800 50.206501 -7.534500 -0.881229 -0.394976 -0.259672 0.134100 0.852600 254 68 73
--5.495700 46.043098 -6.732400 -0.881229 -0.394976 -0.259672 0.139900 0.788400 254 68 73
--6.029500 46.188801 -3.956000 -0.881229 -0.394976 -0.259672 0.183300 0.792100 254 68 73
--8.756500 49.321098 -7.632900 0.341557 -0.936397 -0.080618 0.626900 0.922700 0 254 27
--6.775800 50.206501 -7.534500 0.341557 -0.936397 -0.080618 0.626900 0.944900 0 254 27
--7.813100 49.342701 -3.886900 0.341557 -0.936397 -0.080618 0.686800 0.944900 0 254 27
--8.927200 49.128502 -4.128200 0.341557 -0.936397 -0.080618 0.688900 0.922700 0 254 27
--5.495700 46.043098 -6.732400 -0.295037 -0.218453 -0.930178 0.139900 0.788400 0 254 27
--6.775800 50.206501 -7.534500 -0.295037 -0.218453 -0.930178 0.134100 0.852600 0 254 27
-0.000000 50.037800 -9.413700 -0.295037 -0.218453 -0.930178 0.041800 0.827300 0 254 27
-0.000000 45.235802 -8.516300 -0.295037 -0.218453 -0.930178 0.061400 0.762800 0 254 27
--3.773800 51.093601 -1.034300 -0.217879 0.518058 0.827130 0.256600 0.864400 0 253 27
-0.000000 50.880199 0.110000 -0.217879 0.518058 0.827130 0.310700 0.860500 0 253 27
-0.000000 54.522099 -2.187600 -0.217879 0.518058 0.827130 0.310700 0.919600 0 253 27
--1.435700 55.057400 -2.884500 -0.217879 0.518058 0.827130 0.285800 0.931400 0 253 27
--0.163800 60.672798 0.405300 -0.878123 0.172158 0.446386 0.529100 0.200900 0 254 27
--0.596000 60.268700 -0.255900 -0.878123 0.172158 0.446386 0.502600 0.185300 0 254 27
--0.605400 59.453602 0.006800 -0.878123 0.172158 0.446386 0.508800 0.156900 0 254 27
--0.226300 59.631802 0.717000 -0.878123 0.172158 0.446386 0.529800 0.167300 0 254 27
-0.000000 59.375900 0.272700 -0.351825 0.003851 0.936058 0.533800 0.153800 0 254 27
--0.605400 59.453602 0.006800 -0.351825 0.003851 0.936058 0.508800 0.156900 0 254 27
--0.793500 58.611801 -0.022400 -0.351825 0.003851 0.936058 0.506200 0.129800 0 254 27
-0.000000 58.735298 0.237300 -0.351825 0.003851 0.936058 0.533800 0.134400 0 253 27
--1.340700 61.343498 -1.024900 -0.500896 0.173312 0.847978 0.467800 0.231800 254 254 254
--2.209500 61.230499 -1.515000 -0.500896 0.173312 0.847978 0.430900 0.227000 254 254 254
--2.225300 60.301201 -1.334400 -0.500896 0.173312 0.847978 0.434400 0.187400 254 254 254
--0.474100 61.294899 -0.607800 -0.419394 -0.893935 0.158081 0.499900 0.227200 254 254 254
--0.179900 61.274700 0.058500 -0.419394 -0.893935 0.158081 0.525600 0.223900 254 254 254
--0.785400 61.539799 -0.048800 -0.419394 -0.893935 0.158081 0.505500 0.247600 254 254 254
--0.163800 60.672798 0.405300 -0.879737 0.234636 0.413532 0.529100 0.200900 0 254 27
--0.179900 61.274700 0.058500 -0.879737 0.234636 0.413532 0.525600 0.223900 0 254 27
--0.474100 61.294899 -0.607800 -0.879737 0.234636 0.413532 0.499900 0.227200 0 254 27
--0.596000 60.268700 -0.255900 -0.879737 0.234636 0.413532 0.502600 0.185300 0 254 27
--0.785400 61.539799 -0.048800 -0.405349 0.400850 0.821591 0.505500 0.247600 0 254 27
-0.000000 62.775902 -0.355700 -0.405349 0.400850 0.821591 0.533900 0.286800 0 254 27
--1.901400 62.898899 -1.262500 -0.405349 0.400850 0.821591 0.451600 0.287500 0 254 27
--1.792100 61.563202 -0.648200 -0.405349 0.400850 0.821591 0.464300 0.250800 0 254 27
--1.901400 62.898899 -1.262500 -0.958885 0.139689 0.247034 0.451600 0.287500 254 254 254
--2.505800 61.413601 -3.333900 -0.958885 0.139689 0.247034 0.367200 0.240300 254 254 254
--2.209500 61.230499 -1.515000 -0.958885 0.139689 0.247034 0.430900 0.227000 254 254 254
--1.792100 61.563202 -0.648200 -0.958885 0.139689 0.247034 0.464300 0.250800 254 254 254
--2.071800 58.080299 -1.837600 -0.982605 0.010378 0.185418 0.435700 0.090000 254 254 254
--2.043500 58.694401 -1.722000 -0.982605 0.010378 0.185418 0.434700 0.119000 254 254 254
--2.361600 58.652599 -3.405400 -0.982605 0.010378 0.185418 0.376100 0.111600 254 254 254
--2.361600 58.652599 -3.405400 -0.835615 -0.547438 -0.045374 0.376100 0.111600 254 254 254
--1.480400 57.287800 -3.167400 -0.835615 -0.547438 -0.045374 0.388000 0.054100 254 254 254
--2.071800 58.080299 -1.837600 -0.835615 -0.547438 -0.045374 0.435700 0.090000 254 254 254
--2.361600 58.652599 -3.405400 -0.962379 -0.178153 0.205154 0.376100 0.111600 254 254 254
--2.043500 58.694401 -1.722000 -0.962379 -0.178153 0.205154 0.434700 0.119000 254 254 254
--2.225300 60.301201 -1.334400 -0.962379 -0.178153 0.205154 0.434400 0.187400 254 254 254
--2.484800 60.667999 -2.078300 -0.962379 -0.178153 0.205154 0.409600 0.193000 254 254 254
--0.596000 60.268700 -0.255900 -0.569338 0.180881 0.801958 0.502600 0.185300 0 254 27
--2.225300 60.301201 -1.334400 -0.569338 0.180881 0.801958 0.434400 0.187400 0 254 27
--0.793500 58.611801 -0.022400 -0.569338 0.180881 0.801958 0.506200 0.129800 0 254 27
--0.605400 59.453602 0.006800 -0.569338 0.180881 0.801958 0.508800 0.156900 0 254 27
--0.793500 58.611801 -0.022400 -0.424783 -0.113068 0.898207 0.506200 0.129800 0 254 27
--0.860300 57.339199 -0.345300 -0.424783 -0.113068 0.898207 0.507000 0.087800 0 253 27
-0.000000 57.320400 0.190300 -0.424783 -0.113068 0.898207 0.533800 0.095300 0 253 27
-0.000000 58.735298 0.237300 -0.424783 -0.113068 0.898207 0.533800 0.134400 0 253 27
--2.361600 58.652599 -3.405400 -0.801295 -0.555920 -0.221086 0.376100 0.111600 254 254 254
--1.507500 57.978802 -4.806700 -0.801295 -0.555920 -0.221086 0.327200 0.071700 254 254 254
--1.480400 57.287800 -3.167400 -0.801295 -0.555920 -0.221086 0.388000 0.054100 254 254 254
--1.480400 57.287800 -3.167400 -0.605736 -0.042761 0.794516 0.293600 0.962800 254 153 157
--1.435700 55.057400 -2.884500 -0.605736 -0.042761 0.794516 0.285800 0.931400 244 75 71
-0.000000 54.522099 -2.187600 -0.605736 -0.042761 0.794516 0.310700 0.919600 235 81 69
--0.509500 56.862801 -2.081200 -0.605736 -0.042761 0.794516 0.307800 0.953500 254 129 132
--1.435700 55.057400 -2.884500 -0.962522 0.132164 0.236820 0.285800 0.931400 254 68 73
--1.480400 57.287800 -3.167400 -0.962522 0.132164 0.236820 0.293600 0.962800 254 68 73
--1.507500 57.978802 -4.806700 -0.962522 0.132164 0.236820 0.269900 0.982500 254 68 73
--2.321200 55.471001 -5.570800 -0.962522 0.132164 0.236820 0.259500 0.968000 254 68 73
--5.259600 15.490400 -9.599400 0.329887 -0.177209 -0.927239 0.090700 0.228600 0 253 27
--0.294400 16.169500 -7.962700 0.329887 -0.177209 -0.927239 0.039600 0.241800 0 253 27
--2.020300 14.610600 -8.278800 0.329887 -0.177209 -0.927239 0.063600 0.221000 0 253 27
--0.294400 16.169500 -7.962700 0.923351 -0.382504 0.033356 0.282300 0.223700 157 130 53
--1.221800 14.450400 -2.004100 0.923351 -0.382504 0.033356 0.220300 0.236900 0 252 27
--0.971400 14.644800 -6.706400 0.923351 -0.382504 0.033356 0.253200 0.212300 27 229 30
--5.308800 13.910900 -3.738700 -0.281184 -0.501171 0.818391 0.168700 0.220700 23 254 48
--1.766900 13.754900 -2.918700 -0.281184 -0.501171 0.818391 0.216900 0.223600 0 254 27
--1.221800 14.450400 -2.004100 -0.281184 -0.501171 0.818391 0.220300 0.236900 0 254 27
--6.498700 14.643000 -4.000600 -0.281184 -0.501171 0.818391 0.151700 0.232900 91 254 108
--4.649800 14.945700 -8.785600 -0.465679 -0.853476 -0.233927 0.103500 0.222700 254 68 73
--5.308800 13.910900 -3.738700 -0.465679 -0.853476 -0.233927 0.168700 0.220700 254 68 73
--6.498700 14.643000 -4.000600 -0.465679 -0.853476 -0.233927 0.151700 0.232900 254 68 73
--5.259600 15.490400 -9.599400 -0.465679 -0.853476 -0.233927 0.090700 0.228600 254 68 73
--1.957400 20.620800 -1.217700 0.981627 0.066418 0.178877 0.224300 0.297500 0 253 27
--0.899900 21.410400 -8.342700 0.981627 0.066418 0.178877 0.307200 0.297500 1 216 59
--0.835600 22.853901 -8.203000 0.981627 0.066418 0.178877 0.306600 0.313700 2 205 69
--2.189200 21.987900 -1.481800 0.981627 0.066418 0.178877 0.225500 0.313700 0 253 27
--7.174300 32.815300 -5.168000 -0.882053 0.156893 -0.444261 0.136400 0.440500 0 253 27
--6.542300 35.480598 -4.902800 -0.882053 0.156893 -0.444261 0.133600 0.471500 0 253 27
--5.283200 35.952900 -7.814600 -0.882053 0.156893 -0.444261 0.094100 0.470900 0 254 27
--4.970000 33.082802 -8.871300 -0.882053 0.156893 -0.444261 0.086900 0.436600 0 253 27
--5.598500 31.822901 -1.405400 -0.892193 0.169920 0.418473 0.185400 0.436500 133 152 48
--6.542300 35.480598 -4.902800 -0.892193 0.169920 0.418473 0.133600 0.471500 0 253 27
--7.174300 32.815300 -5.168000 -0.892193 0.169920 0.418473 0.136400 0.440500 0 253 27
--4.685700 36.664101 -1.616400 -0.474113 0.127364 0.871203 0.239100 0.661600 13 226 40
--5.598500 31.822901 -1.405400 -0.474113 0.127364 0.871203 0.231500 0.582200 133 152 48
--3.798500 31.552500 -0.386300 -0.474113 0.127364 0.871203 0.257600 0.582200 211 97 63
--2.225300 60.301201 -1.334400 -0.926529 0.086891 0.366052 0.434400 0.187400 254 254 254
--2.209500 61.230499 -1.515000 -0.926529 0.086891 0.366052 0.430900 0.227000 254 254 254
--2.484800 60.667999 -2.078300 -0.926529 0.086891 0.366052 0.409600 0.193000 254 254 254
--8.927200 49.128502 -4.128200 -0.174303 -0.164506 0.970853 0.688900 0.922700 0 253 27
--7.813100 49.342701 -3.886900 -0.174303 -0.164506 0.970853 0.686800 0.944900 0 253 27
--8.184300 53.108700 -3.320400 -0.174303 -0.164506 0.970853 0.746000 0.944900 0 253 27
--9.508400 52.403099 -3.672700 -0.174303 -0.164506 0.970853 0.746000 0.922700 0 253 27
--8.184300 53.108700 -3.320400 -0.526523 0.826719 0.198265 0.746000 0.944900 0 253 27
--8.747800 53.770199 -7.353300 -0.526523 0.826719 0.198265 0.807700 0.944900 0 253 27
--9.827700 52.989700 -7.188500 -0.526523 0.826719 0.198265 0.805500 0.922700 0 253 27
--9.508400 52.403099 -3.672700 -0.526523 0.826719 0.198265 0.746000 0.922700 0 253 27
--8.747800 53.770199 -7.353300 -0.154881 -0.035505 -0.987295 0.807700 0.944900 0 254 27
--7.252500 54.524502 -7.615000 -0.154881 -0.035505 -0.987295 0.812300 0.981700 0 254 27
--6.775800 50.206501 -7.534500 -0.154881 -0.035505 -0.987295 0.879500 0.944900 0 254 27
--8.927200 49.128502 -4.128200 0.001669 -0.169906 0.985459 0.688900 0.922700 0 253 27
--9.508400 52.403099 -3.672700 0.001669 -0.169906 0.985459 0.746000 0.922700 0 253 27
--15.636800 49.715099 -4.015700 0.001669 -0.169906 0.985459 0.746000 0.809400 0 253 27
--14.977100 45.689201 -4.821000 0.001669 -0.169906 0.985459 0.680000 0.809400 0 248 31
--6.624100 53.529800 -2.653700 -0.215818 0.814400 0.538680 0.210200 0.900400 0 253 27
--3.773800 51.093601 -1.034300 -0.215818 0.814400 0.538680 0.256600 0.864400 0 253 27
--1.435700 55.057400 -2.884500 -0.215818 0.814400 0.538680 0.285800 0.931400 0 253 27
--7.252500 54.524502 -7.615000 -0.215818 0.814400 0.538680 0.180400 0.964800 0 253 27
--2.321200 55.471001 -5.570800 -0.276118 0.932071 0.234526 0.259500 0.968000 0 253 27
--7.252500 54.524502 -7.615000 -0.276118 0.932071 0.234526 0.180400 0.964800 0 253 27
--1.435700 55.057400 -2.884500 -0.276118 0.932071 0.234526 0.285800 0.931400 0 253 27
--2.209500 61.230499 -1.515000 -0.942806 0.279456 0.181716 0.430900 0.227000 254 254 254
--2.505800 61.413601 -3.333900 -0.942806 0.279456 0.181716 0.362700 0.212700 254 254 254
--2.484800 60.667999 -2.078300 -0.942806 0.279456 0.181716 0.409600 0.193000 254 254 254
--2.484800 60.667999 -2.078300 -0.998559 -0.051788 -0.014052 0.409600 0.193000 254 254 254
--2.505800 61.413601 -3.333900 -0.998559 -0.051788 -0.014052 0.362700 0.212700 254 254 254
--2.361600 58.652599 -3.405400 -0.998559 -0.051788 -0.014052 0.376100 0.111600 254 254 254
--2.209500 61.230499 -1.515000 -0.107977 -0.909631 0.401138 0.430900 0.227000 254 254 254
--1.340700 61.343498 -1.024900 -0.107977 -0.909631 0.401138 0.467800 0.231800 254 254 254
--1.792100 61.563202 -0.648200 -0.107977 -0.909631 0.401138 0.464300 0.250800 254 254 254
--3.061600 3.537800 -3.461700 0.234488 0.898953 0.369997 0.290200 0.071700 18 0 252
--3.735600 1.816900 0.228400 0.234488 0.898953 0.369997 0.290200 0.030700 18 0 253
--1.568700 1.981700 -0.627100 0.234488 0.898953 0.369997 0.308400 0.040400 18 0 253
--1.553600 3.059500 -4.173500 0.234488 0.898953 0.369997 0.310400 0.073900 18 0 253
--0.626000 0.031700 -8.336200 0.992053 0.072189 0.103052 0.345300 0.097200 18 0 253
--1.553600 3.059500 -4.173500 0.992053 0.072189 0.103052 0.310400 0.073900 18 0 253
--1.568700 1.981700 -0.627100 0.992053 0.072189 0.103052 0.308400 0.040400 18 0 253
--1.825200 -0.024100 0.601200 0.992053 0.072189 0.103052 0.313500 0.023800 18 0 253
--1.825200 -0.024100 0.601200 -0.002195 -0.999985 -0.005027 0.748300 0.055100 18 0 253
--3.769300 -0.009000 1.132900 -0.002195 -0.999985 -0.005027 0.765800 0.040900 18 0 253
--1.712600 0.024900 -9.195700 -0.002195 -0.999985 -0.005027 0.765100 0.147100 19 0 253
--0.626000 0.031700 -8.336200 -0.002195 -0.999985 -0.005027 0.751000 0.138000 19 0 253
--1.712600 0.024900 -9.195700 0.748722 0.074200 -0.658719 0.089900 0.023200 254 68 73
--2.020300 14.610600 -8.278800 0.748722 0.074200 -0.658719 0.060000 0.185800 0 253 27
--0.971400 14.644800 -6.706400 0.748722 0.074200 -0.658719 0.025900 0.185800 0 253 27
--0.626000 0.031700 -8.336200 0.748722 0.074200 -0.658719 0.075600 0.021500 254 68 73
--1.568700 1.981700 -0.627100 0.270273 0.452545 0.849798 0.308400 0.040400 18 0 253
--3.735600 1.816900 0.228400 0.270273 0.452545 0.849798 0.290200 0.030700 18 0 253
--3.769300 -0.009000 1.132900 0.270273 0.452545 0.849798 0.289700 0.012400 18 0 253
--1.825200 -0.024100 0.601200 0.270273 0.452545 0.849798 0.313500 0.023800 19 0 253
--4.089400 2.633000 -5.031300 -0.957442 -0.073711 -0.279054 0.275500 0.071900 188 254 194
--3.252600 0.001600 -8.591000 -0.957442 -0.073711 -0.279054 0.238500 0.103000 0 254 27
--5.176800 -0.025000 -0.598300 -0.957442 -0.073711 -0.279054 0.266200 0.023600 254 254 254
--5.390300 1.568200 -1.670300 -0.957442 -0.073711 -0.279054 0.274000 0.039600 254 254 254
--3.769300 -0.009000 1.132900 -0.738109 0.308147 0.600201 0.289700 0.012400 18 0 253
--3.735600 1.816900 0.228400 -0.738109 0.308147 0.600201 0.290200 0.030700 18 0 253
--5.390300 1.568200 -1.670300 -0.738109 0.308147 0.600201 0.274000 0.039600 18 0 253
--5.176800 -0.025000 -0.598300 -0.738109 0.308147 0.600201 0.266200 0.023600 18 0 253
--5.390300 1.568200 -1.670300 -0.560649 0.811720 0.163660 0.274000 0.039600 18 0 253
--3.735600 1.816900 0.228400 -0.560649 0.811720 0.163660 0.290200 0.030700 18 0 253
--3.061600 3.537800 -3.461700 -0.560649 0.811720 0.163660 0.290200 0.071700 18 0 252
--4.089400 2.633000 -5.031300 -0.560649 0.811720 0.163660 0.275500 0.071900 18 0 252
--3.061600 3.537800 -3.461700 -0.452521 -0.074303 0.888653 0.164000 0.067400 18 0 252
--1.766900 13.754900 -2.918700 -0.452521 -0.074303 0.888653 0.193300 0.185800 0 254 27
--5.308800 13.910900 -3.738700 -0.452521 -0.074303 0.888653 0.154100 0.185800 14 254 41
--4.089400 2.633000 -5.031300 -0.452521 -0.074303 0.888653 0.145000 0.057700 18 0 252
--2.020300 14.610600 -8.278800 0.001520 -0.830500 -0.557017 0.063600 0.221000 0 253 27
--4.649800 14.945700 -8.785600 0.001520 -0.830500 -0.557017 0.103500 0.222700 0 253 27
--5.259600 15.490400 -9.599400 0.001520 -0.830500 -0.557017 0.090700 0.228600 0 253 27
--2.020300 14.610600 -8.278800 0.649568 -0.634088 -0.419515 0.063600 0.221000 0 253 27
--0.294400 16.169500 -7.962700 0.649568 -0.634088 -0.419515 0.039600 0.241800 0 253 27
--0.971400 14.644800 -6.706400 0.649568 -0.634088 -0.419515 0.028400 0.216500 0 253 27
--5.426000 21.341299 -8.131100 -0.959570 0.028386 -0.280036 0.106600 0.297500 254 254 254
--6.827700 20.858999 -3.051400 -0.959570 0.028386 -0.280036 0.166500 0.297500 254 254 254
--6.824000 22.193899 -3.254300 -0.959570 0.028386 -0.280036 0.165700 0.313700 254 254 254
--5.317800 22.936800 -8.014600 -0.959570 0.028386 -0.280036 0.105500 0.313700 254 254 254
--0.845100 29.891001 -9.491500 -0.126028 -0.127868 -0.983751 0.041700 0.395800 0 253 27
--0.835600 22.853901 -8.203000 -0.126028 -0.127868 -0.983751 0.053300 0.313700 0 253 27
--5.317800 22.936800 -8.014600 -0.126028 -0.127868 -0.983751 0.105500 0.313700 0 253 27
--5.595300 29.761600 -8.491100 -0.126028 -0.127868 -0.983751 0.097300 0.399700 0 254 27
--1.957400 20.620800 -1.217700 -0.346283 0.131313 0.928895 0.224300 0.297500 242 254 242
--2.189200 21.987900 -1.481800 -0.346283 0.131313 0.928895 0.225500 0.313700 218 254 222
--6.824000 22.193899 -3.254300 -0.346283 0.131313 0.928895 0.165700 0.313700 99 254 117
--6.827700 20.858999 -3.051400 -0.346283 0.131313 0.928895 0.166500 0.297500 166 254 175
--0.605400 59.453602 0.006800 -0.276378 -0.886938 0.370075 0.508800 0.156900 254 254 254
-0.000000 59.375900 0.272700 -0.276378 -0.886938 0.370075 0.533800 0.153800 254 254 254
--0.226300 59.631802 0.717000 -0.276378 -0.886938 0.370075 0.529800 0.167300 254 254 254
--21.936399 43.055199 -3.733600 -0.245050 -0.199318 0.948801 0.691800 0.680200 24 182 75
--22.348700 46.932201 -2.822400 -0.245050 -0.199318 0.948801 0.746000 0.680200 72 195 37
--23.323000 46.228001 -3.425200 -0.245050 -0.199318 0.948801 0.746000 0.661900 26 230 29
--23.265499 44.290199 -3.614200 -0.245050 -0.199318 0.948801 0.710900 0.661900 37 214 37
--22.105101 44.119598 -7.074000 -0.680722 -0.210597 -0.701617 0.862200 0.680200 254 254 254
--23.273100 44.479099 -6.170500 -0.680722 -0.210597 -0.701617 0.835600 0.661900 254 254 254
--23.881300 46.267799 -5.995500 -0.680722 -0.210597 -0.701617 0.800900 0.661900 254 254 254
--23.337700 47.268200 -6.945000 -0.680722 -0.210597 -0.701617 0.809900 0.680200 254 254 254
--22.348700 46.932201 -2.822400 -0.710630 0.673907 0.202126 0.746000 0.680200 72 195 37
--23.337700 47.268200 -6.945000 -0.710630 0.673907 0.202126 0.809900 0.680200 0 254 27
--23.881300 46.267799 -5.995500 -0.710630 0.673907 0.202126 0.800900 0.661900 0 253 27
--23.323000 46.228001 -3.425200 -0.710630 0.673907 0.202126 0.746000 0.661900 26 230 29
--21.936399 43.055199 -3.733600 -0.575702 -0.803125 -0.153486 0.691800 0.680200 254 68 73
--23.265499 44.290199 -3.614200 -0.575702 -0.803125 -0.153486 0.710900 0.661900 254 68 73
--23.273100 44.479099 -6.170500 -0.575702 -0.803125 -0.153486 0.665900 0.661900 254 68 73
--22.105101 44.119598 -7.074000 -0.575702 -0.803125 -0.153486 0.641700 0.680200 254 68 73
--23.323000 46.228001 -3.425200 0.234519 0.052147 0.970712 0.746000 0.661900 26 230 29
--24.935400 45.742901 -3.288800 0.234519 0.052147 0.970712 0.746000 0.630500 80 189 39
--24.446100 44.099098 -3.039500 0.234519 0.052147 0.970712 0.723200 0.630500 144 136 53
--23.265499 44.290199 -3.614200 0.234519 0.052147 0.970712 0.710900 0.661900 37 214 37
--23.273100 44.479099 -6.170500 -0.051663 0.047611 -0.997529 0.835600 0.661900 16 254 41
--25.718901 44.407902 -5.989100 -0.051663 0.047611 -0.997529 0.812100 0.630500 47 254 71
--25.982700 45.641201 -5.974700 -0.051663 0.047611 -0.997529 0.796200 0.630500 53 254 75
--23.881300 46.267799 -5.995500 -0.051663 0.047611 -0.997529 0.800900 0.661900 23 254 48
--23.881300 46.267799 -5.995500 -0.283035 0.956157 0.075198 0.800900 0.661900 0 253 27
--25.982700 45.641201 -5.974700 -0.283035 0.956157 0.075198 0.796200 0.630500 0 253 27
--24.935400 45.742901 -3.288800 -0.283035 0.956157 0.075198 0.746000 0.630500 80 189 39
--23.323000 46.228001 -3.425200 -0.283035 0.956157 0.075198 0.746000 0.661900 26 230 29
--23.265499 44.290199 -3.614200 0.050680 -0.993534 -0.101596 0.710900 0.661900 0 254 27
--24.446100 44.099098 -3.039500 0.050680 -0.993534 -0.101596 0.723200 0.630500 0 254 27
--25.718901 44.407902 -5.989100 0.050680 -0.993534 -0.101596 0.677100 0.630500 47 254 71
--23.273100 44.479099 -6.170500 0.050680 -0.993534 -0.101596 0.665900 0.661900 16 254 41
--3.798500 31.552500 -0.386300 -0.302820 0.047342 0.951871 0.257600 0.582200 211 97 63
-0.000000 31.552500 0.128500 -0.302820 0.047342 0.951871 0.310700 0.582200 203 101 62
-0.000000 37.009800 0.550700 -0.302820 0.047342 0.951871 0.310700 0.661600 172 124 55
--4.685700 36.664101 -1.616400 -0.302820 0.047342 0.951871 0.239100 0.661600 13 226 40
--27.058001 43.733101 -1.471100 -0.612973 -0.035197 0.789319 0.783900 0.527900 254 68 73
--28.100901 44.177299 -2.470000 -0.612973 -0.035197 0.789319 0.756100 0.537200 231 80 64
--27.637899 42.321201 -1.984400 -0.612973 -0.035197 0.789319 0.780200 0.502700 254 68 73
--26.775499 43.007000 -1.492900 -0.612973 -0.035197 0.789319 0.799700 0.523000 254 68 73
--27.102699 45.320202 -5.735100 -0.288380 -0.175341 -0.941325 0.706300 0.587600 75 254 93
--25.982700 45.641201 -5.974700 -0.288380 -0.175341 -0.941325 0.701400 0.609900 53 254 75
--25.718901 44.407902 -5.989100 -0.288380 -0.175341 -0.941325 0.674700 0.592000 47 254 71
--26.246300 42.901402 -5.383600 -0.288380 -0.175341 -0.941325 0.663100 0.553800 20 254 46
--24.935400 45.742901 -3.288800 -0.215944 0.976143 0.022647 0.774000 0.616500 80 254 99
--25.982700 45.641201 -5.974700 -0.215944 0.976143 0.022647 0.701400 0.609900 0 254 27
--27.102699 45.320202 -5.735100 -0.215944 0.976143 0.022647 0.706300 0.587600 0 254 27
--26.753901 45.398300 -2.858600 -0.215944 0.976143 0.022647 0.766000 0.574200 163 254 174
--24.446100 44.099098 -3.039500 0.806467 -0.440747 -0.394147 0.815000 0.599300 0 249 30
--26.246300 42.901402 -5.383600 0.806467 -0.440747 -0.394147 0.880100 0.569900 19 213 43
--25.718901 44.407902 -5.989100 0.806467 -0.440747 -0.394147 0.885900 0.607200 46 208 34
--28.380600 42.330502 -3.056600 -0.840529 -0.044209 0.539960 0.741600 0.498200 254 68 73
--27.637899 42.321201 -1.984400 -0.840529 -0.044209 0.539960 0.780200 0.502700 254 68 73
--28.100901 44.177299 -2.470000 -0.840529 -0.044209 0.539960 0.756100 0.537200 254 68 73
--28.697901 44.238201 -3.477500 -0.840529 -0.044209 0.539960 0.737900 0.538900 254 68 73
--28.380600 42.330502 -3.056600 -0.979149 -0.175223 -0.102788 0.741600 0.498200 254 254 254
--28.697901 44.238201 -3.477500 -0.979149 -0.175223 -0.102788 0.737900 0.538900 254 254 254
--28.543800 44.178001 -4.651400 -0.979149 -0.175223 -0.102788 0.718600 0.545700 254 254 254
--28.292801 42.543098 -4.446800 -0.979149 -0.175223 -0.102788 0.704200 0.514300 254 254 254
--26.753901 45.398300 -2.858600 -0.560189 0.737837 0.376544 0.766000 0.574200 163 125 53
--28.697901 44.238201 -3.477500 -0.560189 0.737837 0.376544 0.737900 0.538900 97 175 41
--28.100901 44.177299 -2.470000 -0.560189 0.737837 0.376544 0.756100 0.537200 231 80 64
--24.935400 45.742901 -3.288800 0.484106 0.321222 0.813915 0.774000 0.616500 80 189 39
--26.117701 44.487900 -2.198700 0.484106 0.321222 0.813915 0.788200 0.565100 242 74 67
--25.587200 43.557701 -2.038700 0.484106 0.321222 0.813915 0.806300 0.556900 253 67 73
--24.446100 44.099098 -3.039500 0.484106 0.321222 0.813915 0.815000 0.599300 144 136 53
--24.446100 44.099098 -3.039500 0.765721 -0.642695 -0.024780 0.815000 0.599300 0 249 30
--25.587200 43.557701 -2.038700 0.765721 -0.642695 -0.024780 0.806300 0.556900 0 252 27
--25.491899 42.827301 -2.370100 0.765721 -0.642695 -0.024780 0.813300 0.554500 0 245 34
--26.246300 42.901402 -5.383600 0.765721 -0.642695 -0.024780 0.880100 0.569900 19 213 43
--26.753901 45.398300 -2.858600 0.068715 0.616533 0.784324 0.766000 0.574200 163 125 53
--26.117701 44.487900 -2.198700 0.068715 0.616533 0.784324 0.788200 0.565100 242 74 67
--24.935400 45.742901 -3.288800 0.068715 0.616533 0.784324 0.774000 0.616500 80 189 39
-0.000000 31.552500 0.128500 -0.069551 -0.031626 0.997077 0.310700 0.582200 203 101 62
--3.798500 31.552500 -0.386300 -0.069551 -0.031626 0.997077 0.257600 0.582200 211 97 63
--3.463700 23.872801 -0.356700 -0.069551 -0.031626 0.997077 0.261000 0.472800 254 68 73
-0.000000 24.132099 -0.356700 -0.069551 -0.031626 0.997077 0.310700 0.472800 243 74 70
--2.225300 60.301201 -1.334400 -0.789816 -0.226827 0.569860 0.434400 0.187400 254 254 254
--2.043500 58.694401 -1.722000 -0.789816 -0.226827 0.569860 0.434700 0.119000 254 247 247
--0.793500 58.611801 -0.022400 -0.789816 -0.226827 0.569860 0.506200 0.129800 254 246 246
--0.793500 58.611801 -0.022400 -0.800106 -0.097243 0.591924 0.506200 0.129800 254 246 246
--2.043500 58.694401 -1.722000 -0.800106 -0.097243 0.591924 0.434700 0.119000 254 247 247
--2.071800 58.080299 -1.837600 -0.800106 -0.097243 0.591924 0.435700 0.090000 254 224 225
--0.860300 57.339199 -0.345300 -0.800106 -0.097243 0.591924 0.507000 0.087800 254 172 174
--2.071800 58.080299 -1.837600 -0.594038 -0.791272 0.144939 0.435700 0.090000 254 224 225
--1.480400 57.287800 -3.167400 -0.594038 -0.791272 0.144939 0.435700 0.022900 254 153 157
--0.509500 56.862801 -2.081200 -0.594038 -0.791272 0.144939 0.497100 0.026700 254 129 132
--0.860300 57.339199 -0.345300 -0.594038 -0.791272 0.144939 0.507000 0.087800 254 172 174
--0.179900 61.274700 0.058500 -0.090663 0.188705 0.977840 0.525600 0.223900 0 254 27
-0.000000 61.912998 -0.048000 -0.090663 0.188705 0.977840 0.533800 0.254400 0 254 27
--0.785400 61.539799 -0.048800 -0.090663 0.188705 0.977840 0.505500 0.247600 0 254 27
--15.884600 46.520500 -7.855800 -0.098387 0.080586 -0.991880 0.879500 0.788400 0 250 27
--17.208200 49.477699 -7.512200 -0.098387 0.080586 -0.991880 0.810800 0.788400 6 242 27
--16.136200 50.023998 -7.546200 -0.098387 0.080586 -0.991880 0.808600 0.809400 0 249 27
--14.885000 46.974701 -7.946000 -0.098387 0.080586 -0.991880 0.879500 0.809400 0 251 27
--15.636800 49.715099 -4.015700 -0.436830 0.889212 0.135946 0.746000 0.809400 0 253 27
--16.136200 50.023998 -7.546200 -0.436830 0.889212 0.135946 0.808600 0.809400 0 253 27
--17.208200 49.477699 -7.512200 -0.436830 0.889212 0.135946 0.810800 0.788400 0 253 27
--16.810101 49.139900 -3.928800 -0.436830 0.889212 0.135946 0.746000 0.788400 0 253 27
--16.192200 44.960400 -4.877100 0.435886 -0.826304 -0.356686 0.677700 0.788400 0 236 42
--15.884600 46.520500 -7.855800 0.435886 -0.826304 -0.356686 0.626900 0.788400 0 253 27
--14.885000 46.974701 -7.946000 0.435886 -0.826304 -0.356686 0.626900 0.809400 0 253 27
--14.977100 45.689201 -4.821000 0.435886 -0.826304 -0.356686 0.680000 0.809400 0 248 31
--16.810101 49.139900 -3.928800 0.116417 -0.190205 0.974818 0.746000 0.788400 236 81 69
--16.192200 44.960400 -4.877100 0.116417 -0.190205 0.974818 0.677700 0.788400 200 90 77
--14.977100 45.689201 -4.821000 0.116417 -0.190205 0.974818 0.680000 0.809400 174 120 62
--15.636800 49.715099 -4.015700 0.116417 -0.190205 0.974818 0.746000 0.809400 218 94 66
--13.779500 47.417198 -7.715300 -0.030432 0.115440 -0.992848 0.879500 0.834400 0 253 27
--14.989100 50.565300 -7.297200 -0.030432 0.115440 -0.992848 0.805300 0.834400 0 252 27
--9.827700 52.989700 -7.188500 -0.030432 0.115440 -0.992848 0.805500 0.922700 0 253 27
--8.756500 49.321098 -7.632900 -0.030432 0.115440 -0.992848 0.879500 0.922700 0 253 27
--15.636800 49.715099 -4.015700 -0.447311 0.883265 0.140554 0.746000 0.809400 0 253 27
--14.989100 50.565300 -7.297200 -0.447311 0.883265 0.140554 0.805300 0.834400 0 253 27
--16.136200 50.023998 -7.546200 -0.447311 0.883265 0.140554 0.808600 0.809400 0 253 27
--13.779500 47.417198 -7.715300 0.409629 -0.847844 -0.336697 0.626900 0.829400 0 253 27
--14.977100 45.689201 -4.821000 0.409629 -0.847844 -0.336697 0.680000 0.809400 0 253 27
--14.885000 46.974701 -7.946000 0.409629 -0.847844 -0.336697 0.626900 0.809400 0 251 27
--0.971400 14.644800 -6.706400 0.777065 -0.629233 0.015366 0.253200 0.212300 27 229 30
--1.221800 14.450400 -2.004100 0.777065 -0.629233 0.015366 0.220300 0.236900 0 252 27
--1.766900 13.754900 -2.918700 0.777065 -0.629233 0.015366 0.216900 0.223600 0 253 27
--26.117701 44.487900 -2.198700 0.374471 0.258120 0.890587 0.788200 0.565100 242 74 67
--27.058001 43.733101 -1.471100 0.374471 0.258120 0.890587 0.783900 0.527900 254 68 73
--26.775499 43.007000 -1.492900 0.374471 0.258120 0.890587 0.799700 0.523000 254 68 73
--25.587200 43.557701 -2.038700 0.374471 0.258120 0.890587 0.806300 0.556900 253 67 73
--25.587200 43.557701 -2.038700 0.386633 -0.610879 0.690899 0.806300 0.556900 0 252 27
--26.775499 43.007000 -1.492900 0.386633 -0.610879 0.690899 0.799700 0.523000 0 253 27
--27.637899 42.321201 -1.984400 0.386633 -0.610879 0.690899 0.816200 0.507300 0 253 27
--25.491899 42.827301 -2.370100 0.386633 -0.610879 0.690899 0.813300 0.554500 0 245 34
--26.117701 44.487900 -2.198700 -0.202601 0.798645 0.566673 0.788200 0.565100 242 74 67
--28.100901 44.177299 -2.470000 -0.202601 0.798645 0.566673 0.756100 0.537200 231 80 64
--27.058001 43.733101 -1.471100 -0.202601 0.798645 0.566673 0.783900 0.527900 254 68 73
--8.184300 53.108700 -3.320400 -0.347207 -0.172872 0.921717 0.746000 0.944900 0 253 27
--7.813100 49.342701 -3.886900 -0.347207 -0.172872 0.921717 0.686800 0.944900 0 253 27
--6.624100 53.529800 -2.653700 -0.347207 -0.172872 0.921717 0.746000 0.986600 0 253 27
--8.747800 53.770199 -7.353300 -0.055764 0.062731 -0.996471 0.807700 0.944900 0 254 27
--6.775800 50.206501 -7.534500 -0.055764 0.062731 -0.996471 0.879500 0.944900 0 254 27
--8.756500 49.321098 -7.632900 -0.055764 0.062731 -0.996471 0.879500 0.922700 0 254 27
--9.827700 52.989700 -7.188500 -0.055764 0.062731 -0.996471 0.805500 0.922700 0 254 27
--28.543800 44.178001 -4.651400 -0.562493 0.826801 -0.001192 0.718600 0.545700 0 254 27
--28.697901 44.238201 -3.477500 -0.562493 0.826801 -0.001192 0.737900 0.538900 97 254 114
--26.753901 45.398300 -2.858600 -0.562493 0.826801 -0.001192 0.766000 0.574200 163 254 174
--27.102699 45.320202 -5.735100 -0.562493 0.826801 -0.001192 0.706300 0.587600 0 254 27
--26.246300 42.901402 -5.383600 0.106461 -0.983873 -0.143736 0.880100 0.569900 20 231 27
--28.380600 42.330502 -3.056600 0.106461 -0.983873 -0.143736 0.853500 0.507000 0 252 27
--28.292801 42.543098 -4.446800 0.106461 -0.983873 -0.143736 0.879400 0.523100 5 243 27
--28.100901 44.177299 -2.470000 -0.192584 0.484112 0.853550 0.756100 0.537200 231 80 64
--26.117701 44.487900 -2.198700 -0.192584 0.484112 0.853550 0.788200 0.565100 242 74 67
--26.753901 45.398300 -2.858600 -0.192584 0.484112 0.853550 0.766000 0.574200 163 125 53
--1.712600 0.024900 -9.195700 0.013475 -0.999909 -0.000374 0.765100 0.147100 254 254 254
--3.769300 -0.009000 1.132900 0.013475 -0.999909 -0.000374 0.765800 0.040900 0 254 27
--5.176800 -0.025000 -0.598300 0.013475 -0.999909 -0.000374 0.783900 0.050100 0 254 27
--3.252600 0.001600 -8.591000 0.013475 -0.999909 -0.000374 0.777900 0.139800 254 254 254
-0.000000 61.912998 -0.048000 -0.158526 0.331625 0.929997 0.533800 0.254400 0 254 27
-0.000000 62.775902 -0.355700 -0.158526 0.331625 0.929997 0.533900 0.286800 0 254 27
--0.785400 61.539799 -0.048800 -0.158526 0.331625 0.929997 0.505500 0.247600 0 254 27
--0.340300 31.400700 -9.922000 0.943854 -0.327649 -0.042263 0.348900 0.396000 0 253 27
--0.425600 30.069099 -1.503600 0.943854 -0.327649 -0.042263 0.251300 0.411900 0 253 27
--0.845100 29.891001 -9.491500 0.943854 -0.327649 -0.042263 0.339400 0.379800 0 253 27
-0.000000 54.522099 -2.187600 0.000000 -0.045410 0.998968 0.310700 0.919600 235 81 69
-0.000000 56.862801 -2.081200 0.000000 -0.045410 0.998968 0.310500 0.953100 254 127 130
--0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968 0.307800 0.953500 254 129 132
--0.509500 56.862801 -2.081200 -0.098448 -0.971038 0.217700 0.497100 0.026700 254 129 132
-0.000000 56.862801 -2.081200 -0.098448 -0.971038 0.217700 0.533800 0.019000 254 127 130
-0.000000 57.320400 0.190300 -0.098448 -0.971038 0.217700 0.533800 0.095300 254 190 192
--0.860300 57.339199 -0.345300 -0.098448 -0.971038 0.217700 0.507000 0.087800 254 172 174
--5.598500 31.822901 -1.405400 -0.881296 0.021519 0.472075 0.185400 0.436500 133 152 48
--7.453900 29.910801 -4.782000 -0.881296 0.021519 0.472075 0.143900 0.408700 0 253 27
--6.824000 22.193899 -3.254300 -0.881296 0.021519 0.472075 0.165700 0.313700 99 254 117
--6.824000 22.193899 -3.254300 -0.921164 -0.108973 -0.373607 0.165700 0.313700 254 68 73
--7.453900 29.910801 -4.782000 -0.921164 -0.108973 -0.373607 0.143900 0.408700 254 68 73
--5.595300 29.761600 -8.491100 -0.921164 -0.108973 -0.373607 0.097300 0.399700 254 68 73
--5.317800 22.936800 -8.014600 -0.921164 -0.108973 -0.373607 0.105500 0.313700 254 68 73
--3.798500 31.552500 -0.386300 -0.402805 -0.146650 0.903461 0.210900 0.433400 211 97 63
--5.598500 31.822901 -1.405400 -0.402805 -0.146650 0.903461 0.185400 0.436500 133 152 48
--6.824000 22.193899 -3.254300 -0.402805 -0.146650 0.903461 0.165700 0.313700 99 254 117
--2.189200 21.987900 -1.481800 -0.402805 -0.146650 0.903461 0.225500 0.313700 218 254 222
--0.340300 31.400700 -9.922000 -0.229486 -0.108632 -0.967231 0.033600 0.413900 0 253 27
--0.845100 29.891001 -9.491500 -0.229486 -0.108632 -0.967231 0.041700 0.395800 0 253 27
--5.595300 29.761600 -8.491100 -0.229486 -0.108632 -0.967231 0.097300 0.399700 0 254 27
--4.970000 33.082802 -8.871300 -0.229486 -0.108632 -0.967231 0.086900 0.436600 0 254 27
--0.835600 22.853901 -8.203000 0.992234 -0.110109 0.057862 0.306600 0.313700 2 205 69
--0.845100 29.891001 -9.491500 0.992234 -0.110109 0.057862 0.339400 0.379800 0 241 37
--0.425600 30.069099 -1.503600 0.992234 -0.110109 0.057862 0.251300 0.411900 0 253 27
--2.189200 21.987900 -1.481800 0.992234 -0.110109 0.057862 0.225500 0.313700 0 253 27
--2.162800 35.743500 -9.599900 -0.324262 0.084100 -0.942221 0.052600 0.465300 0 254 27
--0.340300 31.400700 -9.922000 -0.324262 0.084100 -0.942221 0.033600 0.413900 0 253 27
--4.970000 33.082802 -8.871300 -0.324262 0.084100 -0.942221 0.086900 0.436600 0 254 27
--5.283200 35.952900 -7.814600 -0.324262 0.084100 -0.942221 0.094100 0.470900 0 254 27
--5.283200 35.952900 -7.814600 -0.889642 0.311183 -0.334218 0.142000 0.631800 0 254 27
--6.542300 35.480598 -4.902800 -0.889642 0.311183 -0.334218 0.182300 0.631800 0 254 27
--5.919200 37.619099 -4.570300 -0.889642 0.311183 -0.334218 0.183200 0.661600 0 254 27
--5.919200 37.619099 -4.570300 -0.882633 0.186716 0.431389 0.183200 0.661600 0 253 27
--6.542300 35.480598 -4.902800 -0.882633 0.186716 0.431389 0.182300 0.631800 0 253 27
--5.598500 31.822901 -1.405400 -0.882633 0.186716 0.431389 0.231500 0.582200 133 152 48
--4.685700 36.664101 -1.616400 -0.882633 0.186716 0.431389 0.239100 0.661600 13 240 28
--0.474100 61.294899 -0.607800 -0.490764 0.255871 0.832875 0.499900 0.227200 0 254 27
--1.340700 61.343498 -1.024900 -0.490764 0.255871 0.832875 0.467800 0.231800 0 254 27
--2.225300 60.301201 -1.334400 -0.490764 0.255871 0.832875 0.434400 0.187400 0 254 27
--0.596000 60.268700 -0.255900 -0.490764 0.255871 0.832875 0.502600 0.185300 0 254 27
--1.340700 61.343498 -1.024900 -0.199083 -0.932669 0.300824 0.467800 0.231800 254 254 254
--0.474100 61.294899 -0.607800 -0.199083 -0.932669 0.300824 0.499900 0.227200 254 254 254
--0.785400 61.539799 -0.048800 -0.199083 -0.932669 0.300824 0.505500 0.247600 254 254 254
--1.792100 61.563202 -0.648200 -0.199083 -0.932669 0.300824 0.464300 0.250800 254 254 254
-0.000000 45.235802 -8.516300 -0.205813 0.023108 -0.978318 0.061400 0.762800 0 253 27
-0.000000 38.221600 -8.073300 -0.205813 0.023108 -0.978318 0.073200 0.661600 0 253 27
--2.827600 38.171799 -8.088300 -0.205813 0.023108 -0.978318 0.114500 0.661600 0 253 27
--5.495700 46.043098 -6.732400 -0.205813 0.023108 -0.978318 0.139900 0.788400 0 253 27
--0.425600 30.069099 -1.503600 0.289736 -0.060654 0.955183 0.251300 0.411900 254 254 254
--3.798500 31.552500 -0.386300 0.289736 -0.060654 0.955183 0.210900 0.433400 254 254 254
--2.189200 21.987900 -1.481800 0.289736 -0.060654 0.955183 0.225500 0.313700 254 254 254
-0.000000 31.547001 -9.939100 0.347255 -0.926523 -0.144807 0.349900 0.400200 254 68 73
-0.000000 30.215401 -1.522000 0.347255 -0.926523 -0.144807 0.252400 0.417000 254 68 73
--0.425600 30.069099 -1.503600 0.347255 -0.926523 -0.144807 0.251300 0.411900 254 68 73
--0.340300 31.400700 -9.922000 0.347255 -0.926523 -0.144807 0.348900 0.396000 254 68 73
--21.061199 44.183601 -7.611200 -0.028361 0.039319 -0.998824 0.879500 0.705100 52 208 31
--22.585199 48.327702 -7.594400 -0.028361 0.039319 -0.998824 0.812700 0.705100 104 170 42
--17.208200 49.477699 -7.512200 -0.028361 0.039319 -0.998824 0.810800 0.788400 6 242 27
--15.884600 46.520500 -7.855800 -0.028361 0.039319 -0.998824 0.879500 0.788400 0 250 27
--22.348700 46.932201 -2.822400 -0.723103 0.652497 0.226650 0.746000 0.680200 72 195 37
--22.585199 48.327702 -7.594400 -0.723103 0.652497 0.226650 0.812700 0.705100 0 253 27
--23.337700 47.268200 -6.945000 -0.723103 0.652497 0.226650 0.809900 0.680200 0 254 27
--21.061199 44.183601 -7.611200 -0.095048 -0.949863 -0.297868 0.626900 0.699700 52 208 31
--21.936399 43.055199 -3.733600 -0.095048 -0.949863 -0.297868 0.691800 0.680200 0 253 27
--22.105101 44.119598 -7.074000 -0.095048 -0.949863 -0.297868 0.641700 0.680200 30 225 27
-0.000000 59.375900 0.272700 0.000000 -0.866545 0.499100 0.533800 0.153800 254 254 254
-0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100 0.537800 0.167300 254 254 254
--0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100 0.529800 0.167300 254 254 254
--0.163800 60.672798 0.405300 0.000000 0.286842 0.957978 0.529100 0.200900 0 254 27
--0.226300 59.631802 0.717000 0.000000 0.286842 0.957978 0.529800 0.167300 0 254 27
-0.226300 59.631802 0.717000 0.000000 0.286842 0.957978 0.537800 0.167300 0 254 27
-0.163800 60.672798 0.405300 0.000000 0.286842 0.957978 0.538500 0.200900 0 254 27
--0.340300 31.400700 -9.922000 -0.012671 0.074070 -0.997173 0.033600 0.413900 0 253 27
--2.162800 35.743500 -9.599900 -0.012671 0.074070 -0.997173 0.052600 0.465300 0 253 27
-0.000000 35.795200 -9.599900 -0.012671 0.074070 -0.997173 0.027500 0.464800 0 253 27
-0.000000 31.547001 -9.939100 -0.012671 0.074070 -0.997173 0.029600 0.415400 0 253 27
--5.919200 37.619099 -4.570300 -0.561685 0.544798 -0.622660 0.183200 0.661600 0 254 27
--2.827600 38.171799 -8.088300 -0.561685 0.544798 -0.622660 0.114500 0.661600 0 254 27
--2.162800 35.743500 -9.599900 -0.561685 0.544798 -0.622660 0.096500 0.631800 0 254 27
--5.283200 35.952900 -7.814600 -0.561685 0.544798 -0.622660 0.142000 0.631800 0 254 27
--28.543800 44.178001 -4.651400 -0.410462 -0.233070 -0.881589 0.718600 0.545700 254 254 254
--27.102699 45.320202 -5.735100 -0.410462 -0.233070 -0.881589 0.706300 0.587600 254 254 254
--26.246300 42.901402 -5.383600 -0.410462 -0.233070 -0.881589 0.663100 0.553800 254 254 254
--28.292801 42.543098 -4.446800 -0.410462 -0.233070 -0.881589 0.704200 0.514300 254 254 254
--25.491899 42.827301 -2.370100 0.201709 -0.968181 -0.148119 0.813300 0.554500 0 254 27
--27.637899 42.321201 -1.984400 0.201709 -0.968181 -0.148119 0.816200 0.507300 0 254 27
--28.380600 42.330502 -3.056600 0.201709 -0.968181 -0.148119 0.853500 0.507000 0 254 27
--26.246300 42.901402 -5.383600 0.185319 -0.980147 -0.070494 0.880100 0.569900 20 231 27
--25.491899 42.827301 -2.370100 0.185319 -0.980147 -0.070494 0.813300 0.554500 0 253 27
--28.380600 42.330502 -3.056600 0.185319 -0.980147 -0.070494 0.853500 0.507000 0 252 27
--0.179900 61.274700 0.058500 0.000000 0.499235 0.866467 0.525600 0.223900 0 254 27
--0.163800 60.672798 0.405300 0.000000 0.499235 0.866467 0.529100 0.200900 0 254 27
-0.163800 60.672798 0.405300 0.000000 0.499235 0.866467 0.538500 0.200900 0 254 27
-0.179900 61.274700 0.058500 0.000000 0.499235 0.866467 0.542100 0.223900 0 254 27
-0.000000 61.912998 -0.048000 0.000000 0.164575 0.986365 0.533800 0.254400 0 254 27
--0.179900 61.274700 0.058500 0.000000 0.164575 0.986365 0.525600 0.223900 0 254 27
-0.179900 61.274700 0.058500 0.000000 0.164575 0.986365 0.542100 0.223900 0 254 27
--2.162800 35.743500 -9.599900 -0.008224 0.529675 -0.848161 0.096500 0.631800 0 253 27
--2.827600 38.171799 -8.088300 -0.008224 0.529675 -0.848161 0.114500 0.661600 0 253 27
-0.000000 38.221600 -8.073300 -0.008224 0.529675 -0.848161 0.073200 0.661600 0 253 27
-0.000000 35.795200 -9.599900 -0.008224 0.529675 -0.848161 0.068100 0.631800 0 253 27
-4.620900 14.945700 -8.516100 0.163464 0.013069 -0.986463 0.912200 0.175600 0 253 27
-3.252600 0.001600 -8.591000 0.163464 0.013069 -0.986463 0.909400 0.032900 235 80 66
-1.712600 0.024900 -9.195700 0.163464 0.013069 -0.986463 0.925400 0.031900 254 68 73
-1.456400 14.610600 -8.695100 0.163464 0.013069 -0.986463 0.943400 0.175600 0 253 27
-4.089400 2.633000 -5.031300 0.982688 -0.088487 -0.162770 0.873900 0.060000 18 0 253
-3.252600 0.001600 -8.591000 0.982688 -0.088487 -0.162770 0.909400 0.032900 19 0 253
-4.620900 14.945700 -8.516100 0.982688 -0.088487 -0.162770 0.912200 0.175600 0 247 31
-5.308800 13.910900 -3.738700 0.982688 -0.088487 -0.162770 0.859000 0.175600 0 253 27
-1.553600 3.059500 -4.173500 -0.398905 -0.098999 0.911633 0.841100 0.058900 18 0 253
-3.061600 3.537800 -3.461700 -0.398905 -0.098999 0.911633 0.856300 0.067800 18 0 253
-1.766900 13.754900 -2.918700 -0.398905 -0.098999 0.911633 0.824200 0.175600 0 254 27
-1.553600 3.059500 -4.173500 -0.983093 0.009545 0.182857 0.841100 0.058900 254 254 254
-1.766900 13.754900 -2.918700 -0.983093 0.009545 0.182857 0.824200 0.175600 254 254 254
-1.239800 14.644800 -6.465300 -0.983093 0.009545 0.182857 0.795300 0.175600 254 254 254
-0.626000 0.031700 -8.336200 -0.983093 0.009545 0.182857 0.808600 0.019600 254 254 254
-5.495700 46.043098 -6.732400 0.860977 -0.085411 -0.501422 0.140100 0.788400 0 252 27
-6.029500 46.188801 -3.956000 0.860977 -0.085411 -0.501422 0.183500 0.792100 0 253 27
-5.919200 37.619099 -4.570300 0.860977 -0.085411 -0.501422 0.183400 0.661600 9 98 162
-2.827600 38.171799 -8.088300 0.860977 -0.085411 -0.501422 0.114700 0.661600 8 119 142
-4.685700 36.664101 -1.616400 0.917535 -0.032092 0.396359 0.239300 0.661600 0 250 28
-5.919200 37.619099 -4.570300 0.917535 -0.032092 0.396359 0.183400 0.661600 9 98 162
-6.029500 46.188801 -3.956000 0.917535 -0.032092 0.396359 0.183500 0.792100 0 253 27
-4.298500 47.001099 -0.058900 0.917535 -0.032092 0.396359 0.249500 0.802400 0 253 27
-6.775800 50.206501 -7.534500 0.223809 0.028781 -0.974208 0.134300 0.852600 0 253 27
-0.000000 50.037800 -9.413700 0.223809 0.028781 -0.974208 0.042000 0.827300 0 253 27
-0.000000 53.738098 -8.986800 0.223809 0.028781 -0.974208 0.028300 0.877800 0 253 27
-7.252500 54.524502 -7.615000 0.223809 0.028781 -0.974208 0.126400 0.913200 0 254 27
-7.252500 54.524502 -7.615000 0.375359 0.901424 0.215731 0.533200 0.977800 0 254 27
-6.624100 53.529800 -2.653700 0.375359 0.901424 0.215731 0.469900 0.977800 0 253 27
-8.184300 53.108700 -3.320400 0.375359 0.901424 0.215731 0.469900 0.942000 0 253 27
-8.747800 53.770199 -7.353300 0.375359 0.901424 0.215731 0.528600 0.942000 0 253 27
-9.827700 52.989700 -7.188500 0.412168 0.895237 0.169320 0.526400 0.916400 0 253 27
-9.508400 52.403099 -3.672700 0.412168 0.895237 0.169320 0.469900 0.916400 0 253 27
-15.636800 49.715099 -4.015700 0.412168 0.895237 0.169320 0.469900 0.803100 1 215 59
-14.989100 50.565300 -7.297200 0.412168 0.895237 0.169320 0.526200 0.828100 0 249 29
-0.000000 37.009800 0.550700 0.339751 -0.089043 0.936291 0.310700 0.661600 0 253 27
-4.685700 36.664101 -1.616400 0.339751 -0.089043 0.936291 0.239300 0.661600 0 250 28
-4.298500 47.001099 -0.058900 0.339751 -0.089043 0.936291 0.249500 0.802400 0 253 27
-0.000000 47.287498 1.094200 0.339751 -0.089043 0.936291 0.310700 0.805700 0 253 27
-0.000000 53.738098 -8.986800 0.139268 0.841727 -0.521633 0.028300 0.877800 0 253 27
-0.000000 55.950600 -7.250100 0.139268 0.841727 -0.521633 0.022600 0.916300 0 253 27
-2.321200 55.471001 -5.570800 0.139268 0.841727 -0.521633 0.053900 0.941000 0 253 27
-7.252500 54.524502 -7.615000 0.139268 0.841727 -0.521633 0.126400 0.913200 0 254 27
-3.773800 51.093601 -1.034300 0.772400 -0.022870 0.634725 0.256800 0.864400 0 253 27
-4.298500 47.001099 -0.058900 0.772400 -0.022870 0.634725 0.249500 0.802400 0 253 27
-6.029500 46.188801 -3.956000 0.772400 -0.022870 0.634725 0.183500 0.792100 0 253 27
-6.624100 53.529800 -2.653700 0.772400 -0.022870 0.634725 0.210400 0.900400 0 253 27
-6.624100 53.529800 -2.653700 0.299992 -0.190133 0.934802 0.210400 0.900400 254 68 73
-6.029500 46.188801 -3.956000 0.299992 -0.190133 0.934802 0.183500 0.792100 254 68 73
-7.813100 49.342701 -3.886900 0.299992 -0.190133 0.934802 0.181200 0.844200 254 68 73
-0.000000 50.880199 0.110000 0.266804 0.255185 0.929352 0.310700 0.860500 0 253 27
-0.000000 47.287498 1.094200 0.266804 0.255185 0.929352 0.310700 0.805700 0 252 27
-4.298500 47.001099 -0.058900 0.266804 0.255185 0.929352 0.249500 0.802400 0 253 27
-3.773800 51.093601 -1.034300 0.266804 0.255185 0.929352 0.256800 0.864400 0 253 27
-16.136200 50.023998 -7.546200 -0.129075 0.179950 -0.975171 0.529500 0.803100 0 253 27
-14.885000 46.974701 -7.946000 -0.129075 0.179950 -0.975171 0.590800 0.803100 0 253 27
-13.779500 47.417198 -7.715300 -0.129075 0.179950 -0.975171 0.590800 0.828100 0 253 27
-14.989100 50.565300 -7.297200 -0.129075 0.179950 -0.975171 0.526200 0.828100 0 253 27
-13.779500 47.417198 -7.715300 -0.437873 -0.882573 -0.171264 0.347800 0.823100 0 253 27
-14.977100 45.689201 -4.821000 -0.437873 -0.882573 -0.171264 0.400900 0.803100 0 253 27
-8.927200 49.128502 -4.128200 -0.437873 -0.882573 -0.171264 0.409800 0.916400 0 253 27
-8.756500 49.321098 -7.632900 -0.437873 -0.882573 -0.171264 0.347800 0.916400 0 253 27
-17.208200 49.477699 -7.512200 0.268622 0.938905 0.215175 0.531700 0.782100 0 227 47
-16.810101 49.139900 -3.928800 0.268622 0.938905 0.215175 0.469900 0.782100 35 133 112
-22.348700 46.932201 -2.822400 0.268622 0.938905 0.215175 0.469900 0.674700 19 0 250
-22.585199 48.327702 -7.594400 0.268622 0.938905 0.215175 0.533600 0.698800 0 236 38
-21.936399 43.055199 -3.733600 -0.256926 -0.186034 0.948357 0.412700 0.674700 19 0 253
-22.348700 46.932201 -2.822400 -0.256926 -0.186034 0.948357 0.469900 0.674700 19 0 250
-16.810101 49.139900 -3.928800 -0.256926 -0.186034 0.948357 0.469900 0.782100 35 133 112
-16.192200 44.960400 -4.877100 -0.256926 -0.186034 0.948357 0.398600 0.782100 18 0 253
-22.105101 44.119598 -7.074000 0.471869 -0.161034 -0.866838 0.583100 0.674700 0 253 27
-21.061199 44.183601 -7.611200 0.471869 -0.161034 -0.866838 0.590800 0.698800 0 253 27
-22.585199 48.327702 -7.594400 0.471869 -0.161034 -0.866838 0.533600 0.698800 0 253 27
-23.337700 47.268200 -6.945000 0.471869 -0.161034 -0.866838 0.530800 0.674700 0 253 27
-15.884600 46.520500 -7.855800 -0.312108 -0.901546 -0.299673 0.347800 0.782100 0 253 27
-21.061199 44.183601 -7.611200 -0.312108 -0.901546 -0.299673 0.347800 0.693400 0 253 27
-21.936399 43.055199 -3.733600 -0.312108 -0.901546 -0.299673 0.412700 0.674700 0 253 27
-16.192200 44.960400 -4.877100 -0.312108 -0.901546 -0.299673 0.398600 0.782100 0 253 27
-5.598500 31.822901 -1.404300 0.899204 0.141743 0.413933 0.847900 0.413200 0 240 37
-7.453900 29.910801 -4.780100 0.899204 0.141743 0.413933 0.884800 0.385400 18 0 251
-7.174300 32.815300 -5.167300 0.899204 0.141743 0.413933 0.893300 0.414200 17 7 244
-4.970000 33.082802 -8.871900 0.875445 0.068330 -0.478463 0.938900 0.409500 18 0 252
-7.174300 32.815300 -5.167300 0.875445 0.068330 -0.478463 0.893300 0.414200 17 7 244
-7.453900 29.910801 -4.780100 0.875445 0.068330 -0.478463 0.884800 0.385400 18 0 251
-5.595300 29.761600 -8.492500 0.875445 0.068330 -0.478463 0.927500 0.375900 18 0 253
-6.827700 20.858999 -3.044800 0.895156 -0.347215 -0.279532 0.858900 0.286100 0 231 44
-6.194700 19.576300 -3.478600 0.895156 -0.347215 -0.279532 0.860200 0.277400 0 248 31
-5.426000 21.341299 -8.132600 0.895156 -0.347215 -0.279532 0.914200 0.282100 15 21 230
-0.835600 22.853901 -8.210700 0.045309 0.086115 -0.995254 0.964300 0.301600 0 253 27
-5.317800 22.936800 -8.016200 0.045309 0.086115 -0.995254 0.916400 0.301600 0 253 27
-5.426000 21.341299 -8.132600 0.045309 0.086115 -0.995254 0.914200 0.282100 0 253 27
-0.899900 21.410400 -8.349400 0.045309 0.086115 -0.995254 0.962800 0.286100 0 253 27
-0.899900 21.410400 -8.349400 -0.986876 0.054006 0.152183 0.726500 0.282100 254 254 254
-1.853000 19.164200 -1.371600 -0.986876 0.054006 0.152183 0.805100 0.274200 254 254 254
-1.957400 20.620800 -1.211500 -0.986876 0.054006 0.152183 0.804700 0.286100 254 254 254
-6.194700 19.576300 -3.478600 0.393316 -0.294694 0.870895 0.860200 0.277400 0 248 31
-6.827700 20.858999 -3.044800 0.393316 -0.294694 0.870895 0.858900 0.286100 0 231 44
-1.957400 20.620800 -1.211500 0.393316 -0.294694 0.870895 0.804700 0.286100 0 253 27
-1.853000 19.164200 -1.371600 0.393316 -0.294694 0.870895 0.805100 0.274200 0 253 27
-5.117200 15.490400 -9.679700 -0.013076 0.210350 -0.977539 0.917300 0.220800 0 253 27
-0.134100 16.169500 -9.174700 -0.013076 0.210350 -0.977539 0.969900 0.225300 0 253 27
-0.899900 21.410400 -8.349400 -0.013076 0.210350 -0.977539 0.962800 0.286100 0 253 27
-5.426000 21.341299 -8.132600 -0.013076 0.210350 -0.977539 0.914200 0.282100 0 253 27
-0.134100 16.169500 -9.174700 -0.979250 0.051054 0.196120 0.732600 0.207100 0 254 27
-1.716700 14.450400 -2.459200 -0.979250 0.051054 0.196120 0.808600 0.236100 0 254 27
-1.853000 19.164200 -1.371600 -0.979250 0.051054 0.196120 0.805100 0.274200 0 254 27
-0.899900 21.410400 -8.349400 -0.979250 0.051054 0.196120 0.726500 0.282100 0 254 27
-1.853000 19.164200 -1.371600 0.369977 -0.140579 0.918343 0.805100 0.274200 0 253 27
-1.716700 14.450400 -2.459200 0.369977 -0.140579 0.918343 0.808600 0.236100 0 253 27
-6.069200 14.643000 -3.762300 0.369977 -0.140579 0.918343 0.859400 0.227800 0 253 27
-6.194700 19.576300 -3.478600 0.369977 -0.140579 0.918343 0.860200 0.277400 0 248 31
-6.069200 14.643000 -3.762300 0.986467 -0.011966 -0.163524 0.859400 0.227800 0 253 27
-5.117200 15.490400 -9.679700 0.986467 -0.011966 -0.163524 0.917300 0.220800 2 202 70
-5.426000 21.341299 -8.132600 0.986467 -0.011966 -0.163524 0.914200 0.282100 15 21 230
-6.194700 19.576300 -3.478600 0.986467 -0.011966 -0.163524 0.860200 0.277400 0 248 31
-7.813100 49.342701 -3.886900 0.881229 -0.394976 -0.259672 0.181200 0.844200 0 253 27
-6.029500 46.188801 -3.956000 0.881229 -0.394976 -0.259672 0.183500 0.792100 0 253 27
-5.495700 46.043098 -6.732400 0.881229 -0.394976 -0.259672 0.140100 0.788400 0 252 27
-6.775800 50.206501 -7.534500 0.881229 -0.394976 -0.259672 0.134300 0.852600 0 253 27
-8.756500 49.321098 -7.632900 -0.341557 -0.936397 -0.080618 0.347800 0.916400 254 68 73
-8.927200 49.128502 -4.128200 -0.341557 -0.936397 -0.080618 0.409800 0.916400 254 68 73
-7.813100 49.342701 -3.886900 -0.341557 -0.936397 -0.080618 0.407700 0.942000 254 68 73
-6.775800 50.206501 -7.534500 -0.341557 -0.936397 -0.080618 0.347800 0.942000 254 68 73
-5.495700 46.043098 -6.732400 0.295037 -0.218453 -0.930178 0.140100 0.788400 0 253 27
-0.000000 45.235802 -8.516300 0.295037 -0.218453 -0.930178 0.061600 0.762900 0 253 27
-0.000000 50.037800 -9.413700 0.295037 -0.218453 -0.930178 0.042000 0.827300 0 253 27
-6.775800 50.206501 -7.534500 0.295037 -0.218453 -0.930178 0.134300 0.852600 0 253 27
-3.773800 51.093601 -1.034300 0.217879 0.518058 0.827130 0.256800 0.864400 0 253 27
-1.435700 55.057400 -2.884500 0.217879 0.518058 0.827130 0.286000 0.931400 0 253 27
-0.000000 54.522099 -2.187600 0.217879 0.518058 0.827130 0.310700 0.919600 0 253 27
-0.000000 50.880199 0.110000 0.217879 0.518058 0.827130 0.310700 0.860500 0 253 27
-0.163800 60.672798 0.405300 0.878123 0.172158 0.446386 0.538500 0.200900 0 253 27
-0.226300 59.631802 0.717000 0.878123 0.172158 0.446386 0.537800 0.167300 0 253 27
-0.605400 59.453602 0.006800 0.878123 0.172158 0.446386 0.558900 0.156900 0 253 27
-0.596000 60.268700 -0.255900 0.878123 0.172158 0.446386 0.565100 0.185300 0 253 27
-0.000000 59.375900 0.272700 0.351825 0.003851 0.936058 0.533800 0.153800 0 253 27
-0.000000 58.735298 0.237300 0.351825 0.003851 0.936058 0.533800 0.134400 0 253 27
-0.793500 58.611801 -0.022400 0.351825 0.003851 0.936058 0.561500 0.129800 0 253 27
-0.605400 59.453602 0.006800 0.351825 0.003851 0.936058 0.558900 0.156900 0 253 27
-1.340700 61.343498 -1.024900 0.500896 0.173312 0.847978 0.599900 0.231700 254 254 254
-2.225300 60.301201 -1.334400 0.500896 0.173312 0.847978 0.633200 0.187400 254 254 254
-2.209500 61.230499 -1.515000 0.500896 0.173312 0.847978 0.636800 0.228100 254 254 254
-0.474100 61.294899 -0.607800 0.419394 -0.893935 0.158081 0.567800 0.227200 0 253 27
-0.785400 61.539799 -0.048800 0.419394 -0.893935 0.158081 0.562200 0.247600 0 253 27
-0.179900 61.274700 0.058500 0.419394 -0.893935 0.158081 0.542100 0.223900 0 253 27
-0.163800 60.672798 0.405300 0.879737 0.234636 0.413532 0.538500 0.200900 0 253 27
-0.596000 60.268700 -0.255900 0.879737 0.234636 0.413532 0.565100 0.185300 0 253 27
-0.474100 61.294899 -0.607800 0.879737 0.234636 0.413532 0.567800 0.227200 0 253 27
-0.179900 61.274700 0.058500 0.879737 0.234636 0.413532 0.542100 0.223900 0 253 27
-0.785400 61.539799 -0.048800 0.405349 0.400850 0.821591 0.562200 0.247600 0 253 27
-1.792100 61.563202 -0.648200 0.405349 0.400850 0.821591 0.603400 0.250800 0 253 27
-1.901400 62.898899 -1.262500 0.405349 0.400850 0.821591 0.616100 0.287500 0 253 27
-0.000000 62.775902 -0.355700 0.405349 0.400850 0.821591 0.533900 0.286800 0 253 27
-1.901400 62.898899 -1.262500 0.958885 0.139689 0.247034 0.616100 0.287500 254 73 78
-1.792100 61.563202 -0.648200 0.958885 0.139689 0.247034 0.603400 0.250800 254 68 73
-2.209500 61.230499 -1.515000 0.958885 0.139689 0.247034 0.636800 0.228100 254 68 73
-2.505800 61.413601 -3.333900 0.958885 0.139689 0.247034 0.700500 0.240200 254 68 73
-2.071800 58.080299 -1.837600 0.982605 0.010378 0.185418 0.632000 0.089900 254 254 254
-2.361600 58.652599 -3.405400 0.982605 0.010378 0.185418 0.691600 0.111600 254 254 254
-2.043500 58.694401 -1.722000 0.982605 0.010378 0.185418 0.633000 0.119000 254 254 254
-2.361600 58.652599 -3.405400 0.835615 -0.547438 -0.045374 0.691600 0.111600 254 254 254
-2.071800 58.080299 -1.837600 0.835615 -0.547438 -0.045374 0.632000 0.089900 254 254 254
-1.480400 57.287800 -3.167400 0.835615 -0.547438 -0.045374 0.679600 0.054000 254 254 254
-2.361600 58.652599 -3.405400 0.962379 -0.178153 0.205154 0.691600 0.111600 254 254 254
-2.484800 60.667999 -2.078300 0.962379 -0.178153 0.205154 0.658100 0.193000 254 254 254
-2.225300 60.301201 -1.334400 0.962379 -0.178153 0.205154 0.633200 0.187400 254 254 254
-2.043500 58.694401 -1.722000 0.962379 -0.178153 0.205154 0.633000 0.119000 254 254 254
-0.596000 60.268700 -0.255900 0.569338 0.180881 0.801958 0.565100 0.185300 0 253 27
-0.605400 59.453602 0.006800 0.569338 0.180881 0.801958 0.558900 0.156900 0 253 27
-0.793500 58.611801 -0.022400 0.569338 0.180881 0.801958 0.561500 0.129800 0 253 27
-2.225300 60.301201 -1.334400 0.569338 0.180881 0.801958 0.633200 0.187400 0 253 27
-0.793500 58.611801 -0.022400 0.424783 -0.113068 0.898207 0.561500 0.129800 254 68 73
-0.000000 58.735298 0.237300 0.424783 -0.113068 0.898207 0.533800 0.134400 254 68 73
-0.000000 57.320400 0.190300 0.424783 -0.113068 0.898207 0.533800 0.095300 254 68 73
-0.860300 57.339199 -0.345300 0.424783 -0.113068 0.898207 0.560600 0.087800 254 68 73
-2.361600 58.652599 -3.405400 0.801295 -0.555920 -0.221086 0.691600 0.111600 254 254 254
-1.480400 57.287800 -3.167400 0.801295 -0.555920 -0.221086 0.679600 0.054000 254 254 254
-1.507500 57.978802 -4.806700 0.801295 -0.555920 -0.221086 0.740400 0.071600 254 254 254
-1.480400 57.287800 -3.167400 0.605736 -0.042761 0.794516 0.293800 0.962800 0 253 27
-0.509500 56.862801 -2.081200 0.605736 -0.042761 0.794516 0.308000 0.953500 0 253 27
-0.000000 54.522099 -2.187600 0.605736 -0.042761 0.794516 0.310700 0.919600 0 253 27
-1.435700 55.057400 -2.884500 0.605736 -0.042761 0.794516 0.286000 0.931400 0 254 27
-1.435700 55.057400 -2.884500 0.962522 0.132164 0.236820 0.286000 0.931400 254 68 73
-2.321200 55.471001 -5.570800 0.962522 0.132164 0.236820 0.259700 0.968000 254 68 73
-1.507500 57.978802 -4.806700 0.962522 0.132164 0.236820 0.270100 0.982500 254 68 73
-1.480400 57.287800 -3.167400 0.962522 0.132164 0.236820 0.293800 0.962800 254 68 73
-5.117200 15.490400 -9.679700 -0.146405 -0.402228 -0.903758 0.917300 0.220800 0 253 27
-1.456400 14.610600 -8.695100 -0.146405 -0.402228 -0.903758 0.949700 0.207500 0 253 27
-0.134100 16.169500 -9.174700 -0.146405 -0.402228 -0.903758 0.969900 0.225300 0 253 27
-0.134100 16.169500 -9.174700 -0.868940 -0.488451 0.079739 0.732600 0.207100 254 254 254
-1.239800 14.644800 -6.465300 -0.868940 -0.488451 0.079739 0.774100 0.204900 254 254 254
-1.716700 14.450400 -2.459200 -0.868940 -0.488451 0.079739 0.808600 0.236100 254 254 254
-5.308800 13.910900 -3.738700 0.254739 -0.396087 0.882170 0.855000 0.218100 0 253 27
-6.069200 14.643000 -3.762300 0.254739 -0.396087 0.882170 0.859400 0.227800 0 253 27
-1.716700 14.450400 -2.459200 0.254739 -0.396087 0.882170 0.808600 0.236100 0 253 27
-1.766900 13.754900 -2.918700 0.254739 -0.396087 0.882170 0.809900 0.215800 0 253 27
-4.620900 14.945700 -8.516100 0.580484 -0.782092 -0.226651 0.914400 0.215300 0 247 31
-5.117200 15.490400 -9.679700 0.580484 -0.782092 -0.226651 0.917300 0.220800 2 205 68
-6.069200 14.643000 -3.762300 0.580484 -0.782092 -0.226651 0.859400 0.227800 0 253 27
-5.308800 13.910900 -3.738700 0.580484 -0.782092 -0.226651 0.855000 0.218100 0 253 27
-1.957400 20.620800 -1.211500 -0.981620 0.066989 0.178702 0.804700 0.286100 254 254 254
-2.189200 21.987900 -1.483700 -0.981620 0.066989 0.178702 0.804500 0.301600 254 254 254
-0.835600 22.853901 -8.210700 -0.981620 0.066989 0.178702 0.728900 0.301600 254 254 254
-0.899900 21.410400 -8.349400 -0.981620 0.066989 0.178702 0.726500 0.282100 254 254 254
-7.174300 32.815300 -5.167300 0.882089 0.156872 -0.444196 0.893300 0.414200 17 7 244
-4.970000 33.082802 -8.871900 0.882089 0.156872 -0.444196 0.938900 0.409500 18 0 252
-5.283200 35.952900 -7.814600 0.882089 0.156872 -0.444196 0.933900 0.441300 18 1 249
-6.542300 35.480598 -4.902800 0.882089 0.156872 -0.444196 0.897200 0.442800 15 32 221
-5.598500 31.822901 -1.404300 0.892181 0.170029 0.418452 0.847900 0.413200 0 240 37
-7.174300 32.815300 -5.167300 0.892181 0.170029 0.418452 0.893300 0.414200 17 7 244
-6.542300 35.480598 -4.902800 0.892181 0.170029 0.418452 0.897200 0.442800 15 32 221
-4.685700 36.664101 -1.616400 0.472747 0.127337 0.871949 0.239300 0.661600 0 250 28
-3.798500 31.552500 -0.388900 0.472747 0.127337 0.871949 0.257800 0.582200 0 253 27
-5.598500 31.822901 -1.404300 0.472747 0.127337 0.871949 0.231700 0.582200 0 240 37
-2.225300 60.301201 -1.334400 0.926529 0.086891 0.366052 0.633200 0.187400 254 254 254
-2.484800 60.667999 -2.078300 0.926529 0.086891 0.366052 0.658100 0.193000 254 254 254
-2.209500 61.230499 -1.515000 0.926529 0.086891 0.366052 0.636800 0.228100 254 254 254
-8.927200 49.128502 -4.128200 0.174303 -0.164506 0.970853 0.409800 0.916400 254 68 73
-9.508400 52.403099 -3.672700 0.174303 -0.164506 0.970853 0.469900 0.916400 254 68 73
-8.184300 53.108700 -3.320400 0.174303 -0.164506 0.970853 0.469900 0.942000 254 68 73
-7.813100 49.342701 -3.886900 0.174303 -0.164506 0.970853 0.407700 0.942000 254 68 73
-8.184300 53.108700 -3.320400 0.526523 0.826719 0.198265 0.469900 0.942000 0 253 27
-9.508400 52.403099 -3.672700 0.526523 0.826719 0.198265 0.469900 0.916400 0 253 27
-9.827700 52.989700 -7.188500 0.526523 0.826719 0.198265 0.526400 0.916400 0 253 27
-8.747800 53.770199 -7.353300 0.526523 0.826719 0.198265 0.528600 0.942000 0 253 27
-8.747800 53.770199 -7.353300 0.154881 -0.035505 -0.987295 0.528600 0.942000 0 253 27
-6.775800 50.206501 -7.534500 0.154881 -0.035505 -0.987295 0.590800 0.942000 0 253 27
-7.252500 54.524502 -7.615000 0.154881 -0.035505 -0.987295 0.533200 0.977800 0 254 27
-8.927200 49.128502 -4.128200 -0.001669 -0.169906 0.985459 0.409800 0.916400 0 253 27
-14.977100 45.689201 -4.821000 -0.001669 -0.169906 0.985459 0.400900 0.803100 18 0 253
-15.636800 49.715099 -4.015700 -0.001669 -0.169906 0.985459 0.469900 0.803100 29 188 60
-9.508400 52.403099 -3.672700 -0.001669 -0.169906 0.985459 0.469900 0.916400 0 253 27
-1.435700 55.057400 -2.884500 0.215818 0.814400 0.538680 0.286000 0.931400 0 253 27
-3.773800 51.093601 -1.034300 0.215818 0.814400 0.538680 0.256800 0.864400 0 253 27
-6.624100 53.529800 -2.653700 0.215818 0.814400 0.538680 0.210400 0.900400 0 253 27
-7.252500 54.524502 -7.615000 0.215818 0.814400 0.538680 0.180600 0.964800 0 253 27
-2.321200 55.471001 -5.570800 0.276118 0.932071 0.234526 0.259700 0.968000 0 253 27
-1.435700 55.057400 -2.884500 0.276118 0.932071 0.234526 0.286000 0.931400 0 253 27
-7.252500 54.524502 -7.615000 0.276118 0.932071 0.234526 0.180600 0.964800 0 253 27
-2.209500 61.230499 -1.515000 0.942806 0.279456 0.181716 0.636800 0.228100 254 254 254
-2.484800 60.667999 -2.078300 0.942806 0.279456 0.181716 0.658100 0.193000 254 254 254
-2.505800 61.413601 -3.333900 0.942806 0.279456 0.181716 0.704900 0.212700 254 254 254
-2.484800 60.667999 -2.078300 0.998559 -0.051788 -0.014052 0.658100 0.193000 254 254 254
-2.361600 58.652599 -3.405400 0.998559 -0.051788 -0.014052 0.691600 0.111600 254 254 254
-2.505800 61.413601 -3.333900 0.998559 -0.051788 -0.014052 0.704900 0.212700 254 254 254
-2.209500 61.230499 -1.515000 0.107977 -0.909631 0.401138 0.636800 0.228100 254 68 73
-1.792100 61.563202 -0.648200 0.107977 -0.909631 0.401138 0.603400 0.250800 254 68 73
-1.340700 61.343498 -1.024900 0.107977 -0.909631 0.401138 0.599900 0.231700 254 68 73
-3.061600 3.537800 -3.461700 -0.234488 0.898953 0.369997 0.290200 0.071700 18 0 253
-1.553600 3.059500 -4.173500 -0.234488 0.898953 0.369997 0.275500 0.071900 18 0 253
-1.568700 1.981700 -0.627100 -0.234488 0.898953 0.369997 0.274000 0.039600 19 0 253
-3.735600 1.816900 0.228400 -0.234488 0.898953 0.369997 0.290200 0.030700 19 0 253
-0.626000 0.031700 -8.336200 -0.992053 0.072189 0.103052 0.238500 0.103000 0 254 27
-1.825200 -0.024100 0.601200 -0.992053 0.072189 0.103052 0.266200 0.023600 254 254 254
-1.568700 1.981700 -0.627100 -0.992053 0.072189 0.103052 0.274000 0.039600 254 254 254
-1.553600 3.059500 -4.173500 -0.992053 0.072189 0.103052 0.275500 0.071900 186 254 192
-1.825200 -0.024100 0.601200 0.002195 -0.999985 -0.005027 0.783900 0.050100 0 254 27
-0.626000 0.031700 -8.336200 0.002195 -0.999985 -0.005027 0.777900 0.139800 253 254 253
-1.712600 0.024900 -9.195700 0.002195 -0.999985 -0.005027 0.765100 0.147100 254 254 254
-3.769300 -0.009000 1.132900 0.002195 -0.999985 -0.005027 0.765800 0.040900 0 254 27
-1.712600 0.024900 -9.195700 -0.920325 0.042849 -0.388801 0.925400 0.031900 254 68 73
-0.626000 0.031700 -8.336200 -0.920325 0.042849 -0.388801 0.938600 0.031200 254 68 73
-1.239800 14.644800 -6.465300 -0.920325 0.042849 -0.388801 0.974400 0.175600 254 68 73
-1.456400 14.610600 -8.695100 -0.920325 0.042849 -0.388801 0.943400 0.175600 254 68 73
-1.568700 1.981700 -0.627100 -0.270273 0.452545 0.849798 0.274000 0.039600 19 0 253
-1.825200 -0.024100 0.601200 -0.270273 0.452545 0.849798 0.266200 0.023600 19 0 253
-3.769300 -0.009000 1.132900 -0.270273 0.452545 0.849798 0.289700 0.012400 19 0 253
-3.735600 1.816900 0.228400 -0.270273 0.452545 0.849798 0.290200 0.030700 19 0 253
-4.089400 2.633000 -5.031300 0.957442 -0.073711 -0.279054 0.310400 0.073900 18 0 253
-5.390300 1.568200 -1.670300 0.957442 -0.073711 -0.279054 0.308400 0.040400 18 0 253
-5.176800 -0.025000 -0.598300 0.957442 -0.073711 -0.279054 0.313500 0.023800 18 0 253
-3.252600 0.001600 -8.591000 0.957442 -0.073711 -0.279054 0.345300 0.097200 19 0 253
-3.769300 -0.009000 1.132900 0.738109 0.308147 0.600201 0.289700 0.012400 18 0 253
-5.176800 -0.025000 -0.598300 0.738109 0.308147 0.600201 0.313500 0.023800 18 0 253
-5.390300 1.568200 -1.670300 0.738109 0.308147 0.600201 0.308400 0.040400 18 0 253
-3.735600 1.816900 0.228400 0.738109 0.308147 0.600201 0.290200 0.030700 18 0 253
-5.390300 1.568200 -1.670300 0.560649 0.811720 0.163660 0.308400 0.040400 18 0 253
-4.089400 2.633000 -5.031300 0.560649 0.811720 0.163660 0.310400 0.073900 18 0 253
-3.061600 3.537800 -3.461700 0.560649 0.811720 0.163660 0.290200 0.071700 18 0 253
-3.735600 1.816900 0.228400 0.560649 0.811720 0.163660 0.290200 0.030700 18 0 253
-3.061600 3.537800 -3.461700 0.452521 -0.074303 0.888653 0.856300 0.067800 18 0 253
-4.089400 2.633000 -5.031300 0.452521 -0.074303 0.888653 0.873900 0.060000 18 0 253
-5.308800 13.910900 -3.738700 0.452521 -0.074303 0.888653 0.859000 0.175600 0 253 27
-1.766900 13.754900 -2.918700 0.452521 -0.074303 0.888653 0.824200 0.175600 0 253 27
-5.117200 15.490400 -9.679700 0.118623 -0.917754 -0.379021 0.917300 0.220800 0 253 27
-4.620900 14.945700 -8.516100 0.118623 -0.917754 -0.379021 0.914400 0.215300 0 253 27
-1.456400 14.610600 -8.695100 0.118623 -0.917754 -0.379021 0.949700 0.207500 0 253 27
-1.456400 14.610600 -8.695100 -0.751462 -0.656769 -0.062923 0.746600 0.183800 254 254 254
-1.239800 14.644800 -6.465300 -0.751462 -0.656769 -0.062923 0.774100 0.204900 254 254 254
-0.134100 16.169500 -9.174700 -0.751462 -0.656769 -0.062923 0.732600 0.207100 254 254 254
-5.426000 21.341299 -8.132600 0.959663 0.028025 -0.279753 0.914200 0.282100 15 21 230
-5.317800 22.936800 -8.016200 0.959663 0.028025 -0.279753 0.916400 0.301600 18 0 252
-6.824000 22.193899 -3.251500 0.959663 0.028025 -0.279753 0.860400 0.301600 3 179 89
-6.827700 20.858999 -3.044800 0.959663 0.028025 -0.279753 0.858900 0.286100 0 231 44
-0.845100 29.891001 -9.498900 0.127296 -0.127838 -0.983592 0.978500 0.369500 0 253 27
-5.595300 29.761600 -8.492500 0.127296 -0.127838 -0.983592 0.927500 0.375900 0 253 27
-5.317800 22.936800 -8.016200 0.127296 -0.127838 -0.983592 0.916400 0.301600 0 253 27
-0.835600 22.853901 -8.210700 0.127296 -0.127838 -0.983592 0.964300 0.301600 0 253 27
-1.957400 20.620800 -1.211500 0.345482 0.135420 0.928603 0.804700 0.286100 254 68 73
-6.827700 20.858999 -3.044800 0.345482 0.135420 0.928603 0.858900 0.286100 232 61 86
-6.824000 22.193899 -3.251500 0.345482 0.135420 0.928603 0.860400 0.301600 185 47 122
-2.189200 21.987900 -1.483700 0.345482 0.135420 0.928603 0.804500 0.301600 254 68 73
-0.605400 59.453602 0.006800 0.276378 -0.886938 0.370075 0.558900 0.156900 254 68 73
-0.226300 59.631802 0.717000 0.276378 -0.886938 0.370075 0.537800 0.167300 254 68 73
-0.000000 59.375900 0.272700 0.276378 -0.886938 0.370075 0.533800 0.153800 254 68 73
-21.936399 43.055199 -3.733600 0.245050 -0.199318 0.948801 0.412700 0.674700 19 0 253
-23.265499 44.290199 -3.614200 0.245050 -0.199318 0.948801 0.431800 0.655600 19 0 253
-23.323000 46.228001 -3.425200 0.245050 -0.199318 0.948801 0.469900 0.655600 19 0 251
-22.348700 46.932201 -2.822400 0.245050 -0.199318 0.948801 0.469900 0.674700 20 0 250
-22.105101 44.119598 -7.074000 0.680722 -0.210597 -0.701617 0.583100 0.674700 0 253 27
-23.337700 47.268200 -6.945000 0.680722 -0.210597 -0.701617 0.530800 0.674700 0 253 27
-23.881300 46.267799 -5.995500 0.680722 -0.210597 -0.701617 0.521800 0.655600 0 253 27
-23.273100 44.479099 -6.170500 0.680722 -0.210597 -0.701617 0.556600 0.655600 0 253 27
-22.348700 46.932201 -2.822400 0.710630 0.673907 0.202126 0.469900 0.674700 18 0 249
-23.323000 46.228001 -3.425200 0.710630 0.673907 0.202126 0.469900 0.655600 18 0 251
-23.881300 46.267799 -5.995500 0.710630 0.673907 0.202126 0.521800 0.655600 12 63 193
-23.337700 47.268200 -6.945000 0.710630 0.673907 0.202126 0.530800 0.674700 2 175 92
-21.936399 43.055199 -3.733600 0.575702 -0.803125 -0.153486 0.412700 0.674700 18 0 253
-22.105101 44.119598 -7.074000 0.575702 -0.803125 -0.153486 0.362600 0.674700 18 0 253
-23.273100 44.479099 -6.170500 0.575702 -0.803125 -0.153486 0.386800 0.655600 18 0 253
-23.265499 44.290199 -3.614200 0.575702 -0.803125 -0.153486 0.431800 0.655600 18 0 253
-23.323000 46.228001 -3.425200 -0.234519 0.052147 0.970712 0.469900 0.655600 19 0 251
-23.265499 44.290199 -3.614200 -0.234519 0.052147 0.970712 0.431800 0.655600 19 0 253
-24.446100 44.099098 -3.039500 -0.234519 0.052147 0.970712 0.444100 0.624200 19 0 253
-24.935400 45.742901 -3.288800 -0.234519 0.052147 0.970712 0.469900 0.624200 20 0 251
-23.273100 44.479099 -6.170500 0.051663 0.047611 -0.997529 0.556600 0.655600 0 253 27
-23.881300 46.267799 -5.995500 0.051663 0.047611 -0.997529 0.521800 0.655600 0 253 27
-25.982700 45.641201 -5.974700 0.051663 0.047611 -0.997529 0.517100 0.624200 0 253 27
-25.718901 44.407902 -5.989100 0.051663 0.047611 -0.997529 0.533000 0.624200 0 253 27
-23.881300 46.267799 -5.995500 0.283035 0.956157 0.075198 0.521800 0.655600 64 24 202
-23.323000 46.228001 -3.425200 0.283035 0.956157 0.075198 0.469900 0.655600 19 0 251
-24.935400 45.742901 -3.288800 0.283035 0.956157 0.075198 0.469900 0.624200 20 0 251
-25.982700 45.641201 -5.974700 0.283035 0.956157 0.075198 0.517100 0.624200 65 29 197
-23.265499 44.290199 -3.614200 -0.050680 -0.993534 -0.101596 0.431800 0.655600 0 251 27
-23.273100 44.479099 -6.170500 -0.050680 -0.993534 -0.101596 0.386800 0.655600 0 253 27
-25.718901 44.407902 -5.989100 -0.050680 -0.993534 -0.101596 0.398000 0.624200 0 253 27
-24.446100 44.099098 -3.039500 -0.050680 -0.993534 -0.101596 0.444100 0.624200 53 205 30
-3.798500 31.552500 -0.388900 0.303080 0.047081 0.951802 0.257800 0.582200 57 208 35
-4.685700 36.664101 -1.616400 0.303080 0.047081 0.951802 0.239300 0.661600 0 250 28
-0.000000 37.009800 0.550700 0.303080 0.047081 0.951802 0.310700 0.661600 172 124 55
-0.000000 31.552500 0.128500 0.303080 0.047081 0.951802 0.310700 0.582200 203 101 62
-27.058001 43.733101 -1.471100 0.612973 -0.035197 0.789319 0.783900 0.527900 19 0 253
-26.775499 43.007000 -1.492900 0.612973 -0.035197 0.789319 0.799700 0.523000 19 0 253
-27.637899 42.321201 -1.984400 0.612973 -0.035197 0.789319 0.780200 0.502700 19 0 253
-28.100901 44.177299 -2.470000 0.612973 -0.035197 0.789319 0.756100 0.537200 19 0 253
-27.102699 45.320202 -5.735100 0.288380 -0.175341 -0.941325 0.706300 0.587600 0 253 27
-26.246300 42.901402 -5.383600 0.288380 -0.175341 -0.941325 0.663100 0.553800 0 252 27
-25.718901 44.407902 -5.989100 0.288380 -0.175341 -0.941325 0.674700 0.592000 0 253 27
-25.982700 45.641201 -5.974700 0.288380 -0.175341 -0.941325 0.701400 0.609900 0 253 27
-24.935400 45.742901 -3.288800 0.215944 0.976143 0.022647 0.774000 0.616500 20 0 251
-26.753901 45.398300 -2.858600 0.215944 0.976143 0.022647 0.766000 0.574200 21 0 250
-27.102699 45.320202 -5.735100 0.215944 0.976143 0.022647 0.706300 0.587600 69 22 201
-25.982700 45.641201 -5.974700 0.215944 0.976143 0.022647 0.701400 0.609900 65 29 197
-24.446100 44.099098 -3.039500 -0.806467 -0.440747 -0.394147 0.815000 0.599300 254 254 254
-25.718901 44.407902 -5.989100 -0.806467 -0.440747 -0.394147 0.885900 0.607200 254 254 254
-26.246300 42.901402 -5.383600 -0.806467 -0.440747 -0.394147 0.880100 0.569900 254 254 254
-28.380600 42.330502 -3.056600 0.840529 -0.044209 0.539960 0.741600 0.498200 19 0 253
-28.697901 44.238201 -3.477500 0.840529 -0.044209 0.539960 0.737900 0.538900 20 0 252
-28.100901 44.177299 -2.470000 0.840529 -0.044209 0.539960 0.756100 0.537200 19 0 253
-27.637899 42.321201 -1.984400 0.840529 -0.044209 0.539960 0.780200 0.502700 19 0 253
-28.380600 42.330502 -3.056600 0.979149 -0.175223 -0.102788 0.741600 0.498200 19 0 253
-28.292801 42.543098 -4.446800 0.979149 -0.175223 -0.102788 0.704200 0.514300 19 0 253
-28.543800 44.178001 -4.651400 0.979149 -0.175223 -0.102788 0.718600 0.545700 20 3 248
-28.697901 44.238201 -3.477500 0.979149 -0.175223 -0.102788 0.737900 0.538900 20 0 252
-26.753901 45.398300 -2.858600 0.560189 0.737837 0.376544 0.766000 0.574200 20 0 250
-28.100901 44.177299 -2.470000 0.560189 0.737837 0.376544 0.756100 0.537200 19 0 253
-28.697901 44.238201 -3.477500 0.560189 0.737837 0.376544 0.737900 0.538900 20 0 252
-24.935400 45.742901 -3.288800 -0.484106 0.321222 0.813915 0.774000 0.616500 20 0 251
-24.446100 44.099098 -3.039500 -0.484106 0.321222 0.813915 0.815000 0.599300 19 0 253
-25.587200 43.557701 -2.038700 -0.484106 0.321222 0.813915 0.806300 0.556900 19 0 253
-26.117701 44.487900 -2.198700 -0.484106 0.321222 0.813915 0.788200 0.565100 19 0 253
-24.446100 44.099098 -3.039500 -0.765721 -0.642695 -0.024780 0.815000 0.599300 254 68 73
-26.246300 42.901402 -5.383600 -0.765721 -0.642695 -0.024780 0.880100 0.569900 254 68 73
-25.491899 42.827301 -2.370100 -0.765721 -0.642695 -0.024780 0.813300 0.554500 254 68 73
-25.587200 43.557701 -2.038700 -0.765721 -0.642695 -0.024780 0.806300 0.556900 254 68 73
-26.753901 45.398300 -2.858600 -0.068715 0.616533 0.784324 0.766000 0.574200 21 0 250
-24.935400 45.742901 -3.288800 -0.068715 0.616533 0.784324 0.774000 0.616500 20 0 251
-26.117701 44.487900 -2.198700 -0.068715 0.616533 0.784324 0.788200 0.565100 19 0 253
-0.000000 31.552500 0.128500 0.069913 -0.031462 0.997057 0.310700 0.582200 0 253 27
-0.000000 24.132099 -0.356700 0.069913 -0.031462 0.997057 0.310700 0.472800 0 253 27
-3.463700 23.872801 -0.356700 0.069913 -0.031462 0.997057 0.261200 0.472800 0 253 27
-3.798500 31.552500 -0.388900 0.069913 -0.031462 0.997057 0.257800 0.582200 0 253 27
-2.225300 60.301201 -1.334400 0.789816 -0.226827 0.569860 0.633200 0.187400 0 253 27
-0.793500 58.611801 -0.022400 0.789816 -0.226827 0.569860 0.561500 0.129800 0 253 27
-2.043500 58.694401 -1.722000 0.789816 -0.226827 0.569860 0.633000 0.119000 0 253 27
-0.793500 58.611801 -0.022400 0.800106 -0.097243 0.591924 0.561500 0.129800 0 253 27
-0.860300 57.339199 -0.345300 0.800106 -0.097243 0.591924 0.560600 0.087800 0 253 27
-2.071800 58.080299 -1.837600 0.800106 -0.097243 0.591924 0.632000 0.089900 0 253 27
-2.043500 58.694401 -1.722000 0.800106 -0.097243 0.591924 0.633000 0.119000 0 253 27
-2.071800 58.080299 -1.837600 0.594038 -0.791272 0.144939 0.632000 0.089900 254 68 73
-0.860300 57.339199 -0.345300 0.594038 -0.791272 0.144939 0.560600 0.087800 254 68 73
-0.509500 56.862801 -2.081200 0.594038 -0.791272 0.144939 0.570500 0.026600 254 68 73
-1.480400 57.287800 -3.167400 0.594038 -0.791272 0.144939 0.631900 0.022800 254 68 73
-0.179900 61.274700 0.058500 0.090663 0.188705 0.977840 0.542100 0.223900 0 254 27
-0.785400 61.539799 -0.048800 0.090663 0.188705 0.977840 0.562200 0.247600 0 254 27
-0.000000 61.912998 -0.048000 0.090663 0.188705 0.977840 0.533800 0.254400 0 254 27
-15.884600 46.520500 -7.855800 0.098387 0.080586 -0.991880 0.590800 0.782100 0 253 27
-14.885000 46.974701 -7.946000 0.098387 0.080586 -0.991880 0.590800 0.803100 0 253 27
-16.136200 50.023998 -7.546200 0.098387 0.080586 -0.991880 0.529500 0.803100 0 253 27
-17.208200 49.477699 -7.512200 0.098387 0.080586 -0.991880 0.531700 0.782100 0 253 27
-15.636800 49.715099 -4.015700 0.436830 0.889212 0.135946 0.469900 0.803100 1 215 59
-16.810101 49.139900 -3.928800 0.436830 0.889212 0.135946 0.469900 0.782100 5 158 110
-17.208200 49.477699 -7.512200 0.436830 0.889212 0.135946 0.531700 0.782100 0 227 47
-16.136200 50.023998 -7.546200 0.436830 0.889212 0.135946 0.529500 0.803100 0 244 34
-16.192200 44.960400 -4.877100 -0.435886 -0.826304 -0.356686 0.398600 0.782100 254 252 252
-14.977100 45.689201 -4.821000 -0.435886 -0.826304 -0.356686 0.400900 0.803100 254 202 204
-14.885000 46.974701 -7.946000 -0.435886 -0.826304 -0.356686 0.347800 0.803100 254 123 127
-15.884600 46.520500 -7.855800 -0.435886 -0.826304 -0.356686 0.347800 0.782100 254 212 213
-16.810101 49.139900 -3.928800 -0.116417 -0.190205 0.974818 0.469900 0.782100 35 133 112
-15.636800 49.715099 -4.015700 -0.116417 -0.190205 0.974818 0.469900 0.803100 25 190 59
-14.977100 45.689201 -4.821000 -0.116417 -0.190205 0.974818 0.400900 0.803100 18 0 253
-16.192200 44.960400 -4.877100 -0.116417 -0.190205 0.974818 0.398600 0.782100 18 0 253
-13.779500 47.417198 -7.715300 0.030432 0.115440 -0.992848 0.590800 0.828100 12 79 181
-8.756500 49.321098 -7.632900 0.030432 0.115440 -0.992848 0.590800 0.916400 0 250 29
-9.827700 52.989700 -7.188500 0.030432 0.115440 -0.992848 0.526400 0.916400 0 253 27
-14.989100 50.565300 -7.297200 0.030432 0.115440 -0.992848 0.526200 0.828100 0 249 29
-15.636800 49.715099 -4.015700 0.447311 0.883265 0.140554 0.469900 0.803100 1 215 59
-16.136200 50.023998 -7.546200 0.447311 0.883265 0.140554 0.529500 0.803100 0 244 34
-14.989100 50.565300 -7.297200 0.447311 0.883265 0.140554 0.526200 0.828100 0 249 29
-13.779500 47.417198 -7.715300 -0.409629 -0.847844 -0.336696 0.347800 0.823100 254 70 75
-14.885000 46.974701 -7.946000 -0.409629 -0.847844 -0.336696 0.347800 0.803100 254 123 127
-14.977100 45.689201 -4.821000 -0.409629 -0.847844 -0.336696 0.400900 0.803100 254 202 204
-1.239800 14.644800 -6.465300 -0.983473 -0.143727 0.110102 0.774100 0.204900 254 254 254
-1.766900 13.754900 -2.918700 -0.983473 -0.143727 0.110102 0.809900 0.215800 254 254 254
-1.716700 14.450400 -2.459200 -0.983473 -0.143727 0.110102 0.808600 0.236100 254 254 254
-26.117701 44.487900 -2.198700 -0.374471 0.258120 0.890587 0.788200 0.565100 19 0 253
-25.587200 43.557701 -2.038700 -0.374471 0.258120 0.890587 0.806300 0.556900 19 0 253
-26.775499 43.007000 -1.492900 -0.374471 0.258120 0.890587 0.799700 0.523000 19 0 253
-27.058001 43.733101 -1.471100 -0.374471 0.258120 0.890587 0.783900 0.527900 19 0 253
-25.587200 43.557701 -2.038700 -0.386633 -0.610879 0.690899 0.806300 0.556900 19 0 253
-25.491899 42.827301 -2.370100 -0.386633 -0.610879 0.690899 0.813300 0.554500 19 0 253
-27.637899 42.321201 -1.984400 -0.386633 -0.610879 0.690899 0.816200 0.507300 19 0 253
-26.775499 43.007000 -1.492900 -0.386633 -0.610879 0.690899 0.799700 0.523000 19 0 253
-26.117701 44.487900 -2.198700 0.202601 0.798645 0.566673 0.788200 0.565100 19 0 253
-27.058001 43.733101 -1.471100 0.202601 0.798645 0.566673 0.783900 0.527900 19 0 253
-28.100901 44.177299 -2.470000 0.202601 0.798645 0.566673 0.756100 0.537200 19 0 253
-8.184300 53.108700 -3.320400 0.347207 -0.172872 0.921717 0.469900 0.942000 254 68 73
-6.624100 53.529800 -2.653700 0.347207 -0.172872 0.921717 0.469900 0.977800 254 68 73
-7.813100 49.342701 -3.886900 0.347207 -0.172872 0.921717 0.407700 0.942000 254 68 73
-8.747800 53.770199 -7.353300 0.055764 0.062731 -0.996471 0.528600 0.942000 0 253 27
-9.827700 52.989700 -7.188500 0.055764 0.062731 -0.996471 0.526400 0.916400 0 253 27
-8.756500 49.321098 -7.632900 0.055764 0.062731 -0.996471 0.590800 0.916400 0 253 27
-6.775800 50.206501 -7.534500 0.055764 0.062731 -0.996471 0.590800 0.942000 0 253 27
-28.543800 44.178001 -4.651400 0.562493 0.826801 -0.001192 0.718600 0.545700 20 3 248
-27.102699 45.320202 -5.735100 0.562493 0.826801 -0.001192 0.706300 0.587600 12 64 193
-26.753901 45.398300 -2.858600 0.562493 0.826801 -0.001192 0.766000 0.574200 20 0 250
-28.697901 44.238201 -3.477500 0.562493 0.826801 -0.001192 0.737900 0.538900 20 0 252
-26.246300 42.901402 -5.383600 -0.106461 -0.983873 -0.143736 0.880100 0.569900 0 252 27
-28.292801 42.543098 -4.446800 -0.106461 -0.983873 -0.143736 0.879400 0.523100 87 180 37
-28.380600 42.330502 -3.056600 -0.106461 -0.983873 -0.143736 0.853500 0.507000 242 73 67
-28.100901 44.177299 -2.470000 0.192584 0.484112 0.853550 0.756100 0.537200 19 0 253
-26.753901 45.398300 -2.858600 0.192584 0.484112 0.853550 0.766000 0.574200 21 0 250
-26.117701 44.487900 -2.198700 0.192584 0.484112 0.853550 0.788200 0.565100 19 0 253
-1.712600 0.024900 -9.195700 -0.013475 -0.999909 -0.000374 0.765100 0.147100 19 0 253
-3.252600 0.001600 -8.591000 -0.013475 -0.999909 -0.000374 0.751000 0.138000 19 0 253
-5.176800 -0.025000 -0.598300 -0.013475 -0.999909 -0.000374 0.748300 0.055100 18 0 253
-3.769300 -0.009000 1.132900 -0.013475 -0.999909 -0.000374 0.765800 0.040900 18 0 253
-0.000000 61.912998 -0.048000 0.158526 0.331625 0.929997 0.533800 0.254400 0 254 27
-0.785400 61.539799 -0.048800 0.158526 0.331625 0.929997 0.562200 0.247600 0 254 27
-0.000000 62.775902 -0.355700 0.158526 0.331625 0.929997 0.533900 0.286800 0 254 27
-0.340300 31.400700 -9.928000 -0.943868 -0.327610 -0.042246 0.694900 0.384200 254 254 254
-0.845100 29.891001 -9.498900 -0.943868 -0.327610 -0.042246 0.702700 0.368200 254 254 254
-0.425600 30.069099 -1.507500 -0.943868 -0.327610 -0.042246 0.785600 0.393300 254 254 254
-0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968 0.308000 0.953500 254 127 129
-0.509500 56.862801 -2.081200 0.098448 -0.971038 0.217700 0.570500 0.026600 0 253 27
-0.860300 57.339199 -0.345300 0.098448 -0.971038 0.217700 0.560600 0.087800 0 253 27
-0.000000 57.320400 0.190300 0.098448 -0.971038 0.217700 0.533800 0.095300 0 253 27
-0.000000 56.862801 -2.081200 0.098448 -0.971038 0.217700 0.533800 0.019000 0 253 27
-5.598500 31.822901 -1.404300 0.881264 0.021588 0.472131 0.847900 0.413200 0 240 37
-6.824000 22.193899 -3.251500 0.881264 0.021588 0.472131 0.860400 0.301600 3 179 89
-7.453900 29.910801 -4.780100 0.881264 0.021588 0.472131 0.884800 0.385400 18 0 251
-6.824000 22.193899 -3.251500 0.921284 -0.108958 -0.373315 0.860400 0.301600 3 179 89
-5.317800 22.936800 -8.016200 0.921284 -0.108958 -0.373315 0.916400 0.301600 18 0 252
-5.595300 29.761600 -8.492500 0.921284 -0.108958 -0.373315 0.927500 0.375900 18 0 253
-7.453900 29.910801 -4.780100 0.921284 -0.108958 -0.373315 0.884800 0.385400 18 0 251
-3.798500 31.552500 -0.388900 0.401815 -0.146587 0.903912 0.824000 0.411400 0 253 27
-2.189200 21.987900 -1.483700 0.401815 -0.146587 0.903912 0.804500 0.301600 0 253 27
-6.824000 22.193899 -3.251500 0.401815 -0.146587 0.903912 0.860400 0.301600 3 179 89
-5.598500 31.822901 -1.404300 0.401815 -0.146587 0.903912 0.847900 0.413200 0 240 37
-0.340300 31.400700 -9.928000 0.230509 -0.107925 -0.967067 0.986800 0.385200 0 253 27
-4.970000 33.082802 -8.871900 0.230509 -0.107925 -0.967067 0.938900 0.409500 0 253 27
-5.595300 29.761600 -8.492500 0.230509 -0.107925 -0.967067 0.927500 0.375900 0 253 27
-0.845100 29.891001 -9.498900 0.230509 -0.107925 -0.967067 0.978500 0.369500 0 253 27
-0.835600 22.853901 -8.210700 -0.992236 -0.110106 0.057826 0.728900 0.301600 254 254 254
-2.189200 21.987900 -1.483700 -0.992236 -0.110106 0.057826 0.804500 0.301600 254 254 254
-0.425600 30.069099 -1.507500 -0.992236 -0.110106 0.057826 0.785600 0.393300 254 254 254
-0.845100 29.891001 -9.498900 -0.992236 -0.110106 0.057826 0.702700 0.368200 254 254 254
-2.162800 35.743500 -9.599900 0.324673 0.084802 -0.942017 0.972400 0.433600 0 253 27
-5.283200 35.952900 -7.814600 0.324673 0.084802 -0.942017 0.933900 0.441300 0 253 27
-4.970000 33.082802 -8.871900 0.324673 0.084802 -0.942017 0.938900 0.409500 0 253 27
-0.340300 31.400700 -9.928000 0.324673 0.084802 -0.942017 0.986800 0.385200 0 253 27
-5.283200 35.952900 -7.814600 0.889642 0.311183 -0.334218 0.142200 0.631800 18 1 249
-5.919200 37.619099 -4.570300 0.889642 0.311183 -0.334218 0.183400 0.661600 9 98 162
-6.542300 35.480598 -4.902800 0.889642 0.311183 -0.334218 0.182500 0.631800 15 32 221
-5.919200 37.619099 -4.570300 0.882631 0.186784 0.431364 0.183400 0.661600 9 98 162
-4.685700 36.664101 -1.616400 0.882631 0.186784 0.431364 0.239300 0.661600 0 250 28
-5.598500 31.822901 -1.404300 0.882631 0.186784 0.431364 0.231700 0.582200 0 240 37
-6.542300 35.480598 -4.902800 0.882631 0.186784 0.431364 0.182500 0.631800 15 32 221
-0.474100 61.294899 -0.607800 0.490764 0.255871 0.832875 0.567800 0.227200 254 68 73
-0.596000 60.268700 -0.255900 0.490764 0.255871 0.832875 0.565100 0.185300 254 68 73
-2.225300 60.301201 -1.334400 0.490764 0.255871 0.832875 0.633200 0.187400 254 68 73
-1.340700 61.343498 -1.024900 0.490764 0.255871 0.832875 0.599900 0.231700 254 68 73
-1.340700 61.343498 -1.024900 0.199083 -0.932669 0.300824 0.599900 0.231700 0 253 27
-1.792100 61.563202 -0.648200 0.199083 -0.932669 0.300824 0.603400 0.250800 0 253 27
-0.785400 61.539799 -0.048800 0.199083 -0.932669 0.300824 0.562200 0.247600 0 253 27
-0.474100 61.294899 -0.607800 0.199083 -0.932669 0.300824 0.567800 0.227200 0 253 27
-0.000000 45.235802 -8.516300 0.205813 0.023108 -0.978318 0.061600 0.762900 0 253 27
-5.495700 46.043098 -6.732400 0.205813 0.023108 -0.978318 0.140100 0.788400 0 252 27
-2.827600 38.171799 -8.088300 0.205813 0.023108 -0.978318 0.114700 0.661600 8 119 142
-0.000000 38.221600 -8.073300 0.205813 0.023108 -0.978318 0.073400 0.661600 0 240 38
-0.425600 30.069099 -1.507500 -0.290133 -0.060504 0.955072 0.785600 0.393300 254 254 254
-2.189200 21.987900 -1.483700 -0.290133 -0.060504 0.955072 0.804500 0.301600 254 254 254
-3.798500 31.552500 -0.388900 -0.290133 -0.060504 0.955072 0.824000 0.411400 254 254 254
-0.000000 31.547001 -9.939100 -0.348901 -0.925923 -0.144686 0.694200 0.388200 254 68 73
-0.340300 31.400700 -9.928000 -0.348901 -0.925923 -0.144686 0.694900 0.384200 254 68 73
-0.425600 30.069099 -1.507500 -0.348901 -0.925923 -0.144686 0.785600 0.393300 254 68 73
-0.000000 30.215401 -1.522000 -0.348901 -0.925923 -0.144686 0.785000 0.398100 254 68 73
-21.061199 44.183601 -7.611200 0.028361 0.039319 -0.998824 0.590800 0.698800 18 0 253
-15.884600 46.520500 -7.855800 0.028361 0.039319 -0.998824 0.590800 0.782100 17 5 246
-17.208200 49.477699 -7.512200 0.028361 0.039319 -0.998824 0.531700 0.782100 0 227 47
-22.585199 48.327702 -7.594400 0.028361 0.039319 -0.998824 0.533600 0.698800 0 239 38
-22.348700 46.932201 -2.822400 0.723103 0.652497 0.226650 0.469900 0.674700 18 0 249
-23.337700 47.268200 -6.945000 0.723103 0.652497 0.226650 0.530800 0.674700 2 175 92
-22.585199 48.327702 -7.594400 0.723103 0.652497 0.226650 0.533600 0.698800 0 239 38
-21.061199 44.183601 -7.611200 0.095048 -0.949863 -0.297868 0.347800 0.693400 0 253 27
-22.105101 44.119598 -7.074000 0.095048 -0.949863 -0.297868 0.362600 0.674700 0 253 27
-21.936399 43.055199 -3.733600 0.095048 -0.949863 -0.297868 0.412700 0.674700 0 253 27
-0.340300 31.400700 -9.928000 0.010374 0.075249 -0.997111 0.986800 0.385200 0 253 27
-0.000000 31.547001 -9.939100 0.010374 0.075249 -0.997111 0.990600 0.386300 0 253 27
-0.000000 35.795200 -9.599900 0.010374 0.075249 -0.997111 0.995500 0.431600 0 253 27
-2.162800 35.743500 -9.599900 0.010374 0.075249 -0.997111 0.972400 0.433600 0 253 27
-5.919200 37.619099 -4.570300 0.561685 0.544798 -0.622660 0.183400 0.661600 9 98 162
-5.283200 35.952900 -7.814600 0.561685 0.544798 -0.622660 0.142200 0.631800 18 1 249
-2.162800 35.743500 -9.599900 0.561685 0.544798 -0.622660 0.096700 0.631800 16 28 225
-2.827600 38.171799 -8.088300 0.561685 0.544798 -0.622660 0.114700 0.661600 8 119 142
-28.543800 44.178001 -4.651400 0.410462 -0.233070 -0.881589 0.718600 0.545700 77 187 34
-28.292801 42.543098 -4.446800 0.410462 -0.233070 -0.881589 0.704200 0.514300 87 180 37
-26.246300 42.901402 -5.383600 0.410462 -0.233070 -0.881589 0.663100 0.553800 0 252 27
-27.102699 45.320202 -5.735100 0.410462 -0.233070 -0.881589 0.706300 0.587600 0 253 27
-25.491899 42.827301 -2.370100 -0.201709 -0.968181 -0.148119 0.813300 0.554500 190 254 195
-28.380600 42.330502 -3.056600 -0.201709 -0.968181 -0.148119 0.853500 0.507000 242 254 242
-27.637899 42.321201 -1.984400 -0.201709 -0.968181 -0.148119 0.816200 0.507300 254 254 254
-26.246300 42.901402 -5.383600 -0.185319 -0.980147 -0.070494 0.880100 0.569900 0 254 27
-28.380600 42.330502 -3.056600 -0.185319 -0.980147 -0.070494 0.853500 0.507000 242 254 242
-25.491899 42.827301 -2.370100 -0.185319 -0.980147 -0.070494 0.813300 0.554500 190 254 195
-2.162800 35.743500 -9.599900 0.008224 0.529675 -0.848161 0.096700 0.631800 0 253 27
-0.000000 35.795200 -9.599900 0.008224 0.529675 -0.848161 0.068300 0.631800 0 253 27
-0.000000 38.221600 -8.073300 0.008224 0.529675 -0.848161 0.073400 0.661600 0 253 27
-2.827600 38.171799 -8.088300 0.008224 0.529675 -0.848161 0.114700 0.661600 0 253 27
-0.706900 62.538601 -0.289700 0.498102 0.211804 0.840853 0.409100 0.538600 0 253 27
-1.838200 62.255798 -0.802600 0.498102 0.211804 0.840853 0.430000 0.507000 0 253 27
-1.901400 63.532299 -1.247600 0.498102 0.211804 0.840853 0.451500 0.531400 0 253 27
-0.672300 63.485901 -0.421800 0.498102 0.211804 0.840853 0.426300 0.552700 0 253 27
-1.901400 63.532299 -1.247600 0.915374 0.111541 0.386845 0.451500 0.531400 0 253 27
-1.838200 62.255798 -0.802600 0.915374 0.111541 0.386845 0.430000 0.507000 0 253 27
-3.194200 60.597198 -3.460400 0.915374 0.111541 0.386845 0.492000 0.451400 0 253 27
-2.758700 63.532299 -3.348800 0.915374 0.111541 0.386845 0.499700 0.518700 0 253 27
-2.758700 63.532299 -3.348800 0.984906 0.142377 0.098436 0.499700 0.518700 0 253 27
-3.194200 60.597198 -3.460400 0.984906 0.142377 0.098436 0.492000 0.451400 0 253 27
-3.446000 60.597198 -5.980300 0.984906 0.142377 0.098436 0.552100 0.445900 0 253 27
-3.010600 63.532299 -5.868700 0.984906 0.142377 0.098436 0.554200 0.511800 0 253 27
-3.194200 60.597198 -3.460400 0.917633 0.222238 0.329485 0.492000 0.451400 0 253 27
-1.838200 62.255798 -0.802600 0.917633 0.222238 0.329485 0.430000 0.507000 0 253 27
-2.336800 60.597198 -1.072500 0.917633 0.222238 0.329485 0.434100 0.460700 0 253 27
-2.130500 53.628601 -1.359200 0.842435 0.033555 0.537753 0.416700 0.297200 0 253 27
-4.088800 54.879799 -3.460400 0.842435 0.033555 0.537753 0.486800 0.316000 0 253 27
-3.194200 60.597198 -3.460400 0.842435 0.033555 0.537753 0.492000 0.451400 0 253 27
-2.336800 60.597198 -1.072500 0.842435 0.033555 0.537753 0.434100 0.460700 0 253 27
-4.088800 54.879799 -3.460400 0.982155 0.156435 0.104398 0.486800 0.316000 0 253 27
-4.340700 55.234299 -6.210400 0.982155 0.156435 0.104398 0.542400 0.331500 0 254 27
-3.446000 60.597198 -5.980300 0.982155 0.156435 0.104398 0.552100 0.445900 0 253 27
-3.194200 60.597198 -3.460400 0.982155 0.156435 0.104398 0.492000 0.451400 0 253 27
-3.010600 63.532299 -5.868700 0.839145 0.204241 -0.504105 0.554200 0.511800 0 253 27
-3.446000 60.597198 -5.980300 0.839145 0.204241 -0.504105 0.552100 0.445900 0 253 27
-2.517200 60.597198 -7.879200 0.839145 0.204241 -0.504105 0.601000 0.450200 0 253 27
-1.932100 63.532299 -7.311200 0.839145 0.204241 -0.504105 0.591100 0.519300 0 253 27
-3.446000 60.597198 -5.980300 0.847590 0.127945 -0.514996 0.552100 0.445900 0 253 27
-4.340700 55.234299 -6.210400 0.847590 0.127945 -0.514996 0.542400 0.331500 0 254 27
-2.990300 54.496300 -8.246000 0.847590 0.127945 -0.514996 0.608400 0.297700 0 253 27
-2.517200 60.597198 -7.879200 0.847590 0.127945 -0.514996 0.601000 0.450200 0 253 27
-1.932100 63.532299 -7.311200 0.365116 0.222173 -0.904063 0.591100 0.519300 0 253 27
-2.517200 60.597198 -7.879200 0.365116 0.222173 -0.904063 0.601000 0.450200 0 253 27
-0.000000 60.597198 -8.812800 0.365116 0.222173 -0.904063 0.661800 0.464200 0 253 27
-0.000000 63.532299 -8.174500 0.365116 0.222173 -0.904063 0.634800 0.537700 0 253 27
-2.990300 54.496300 -8.246000 0.255106 0.035267 -0.966270 0.608400 0.297700 0 253 27
-0.000000 54.050800 -8.782700 0.255106 0.035267 -0.966270 0.682300 0.308600 0 253 27
-0.000000 60.597198 -8.812800 0.255106 0.035267 -0.966270 0.661800 0.464200 0 253 27
-2.517200 60.597198 -7.879200 0.255106 0.035267 -0.966270 0.601000 0.450200 0 253 27
-0.672300 63.485901 -0.421800 0.422112 0.618267 0.662999 0.426300 0.552700 0 253 27
-1.901400 63.532299 -1.247600 0.422112 0.618267 0.662999 0.451500 0.531400 0 253 27
-1.171400 65.057899 -2.205500 0.422112 0.618267 0.662999 0.482000 0.564300 0 253 27
-1.901400 63.532299 -1.247600 0.756752 0.608663 0.238446 0.451500 0.531400 0 253 27
-2.758700 63.532299 -3.348800 0.756752 0.608663 0.238446 0.499700 0.518700 0 253 27
-1.795600 65.057899 -4.806100 0.756752 0.608663 0.238446 0.538600 0.556700 0 253 27
-1.171400 65.057899 -2.205500 0.756752 0.608663 0.238446 0.482000 0.564300 0 253 27
-2.758700 63.532299 -3.348800 0.806293 0.585999 0.080601 0.499700 0.518700 0 253 27
-3.010600 63.532299 -5.868700 0.806293 0.585999 0.080601 0.554200 0.511800 0 253 27
-1.795600 65.057899 -4.806100 0.806293 0.585999 0.080601 0.538600 0.556700 0 253 27
-3.010600 63.532299 -5.868700 0.468822 0.765524 -0.440657 0.554200 0.511800 0 253 27
-1.932100 63.532299 -7.311200 0.468822 0.765524 -0.440657 0.591100 0.519300 0 254 27
-0.000000 65.057899 -6.421400 0.468822 0.765524 -0.440657 0.588900 0.582100 0 253 27
-1.795600 65.057899 -4.806100 0.468822 0.765524 -0.440657 0.538600 0.556700 0 253 27
-1.932100 63.532299 -7.311200 0.281463 0.723860 -0.629925 0.591100 0.519300 0 254 27
-0.000000 63.532299 -8.174500 0.281463 0.723860 -0.629925 0.634800 0.537700 0 253 27
-0.000000 65.057899 -6.421400 0.281463 0.723860 -0.629925 0.588900 0.582100 0 253 27
-1.171400 65.057899 -2.205500 0.296421 0.952404 0.071148 0.482000 0.564300 0 253 27
-1.795600 65.057899 -4.806100 0.296421 0.952404 0.071148 0.538600 0.556700 0 253 27
-0.000000 65.560898 -4.058400 0.296421 0.952404 0.071148 0.523700 0.603300 0 253 27
-1.795600 65.057899 -4.806100 0.184093 0.961370 -0.204641 0.538600 0.556700 0 254 27
-0.000000 65.057899 -6.421400 0.184093 0.961370 -0.204641 0.588900 0.582100 0 254 27
-0.000000 65.560898 -4.058400 0.184093 0.961370 -0.204641 0.523700 0.603300 0 254 27
-0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183 0.426300 0.552700 0 254 27
-1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183 0.482000 0.564300 0 254 27
--1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183 0.466700 0.607600 0 254 27
--0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183 0.416100 0.581700 0 254 27
-0.706900 62.538601 -0.289700 0.204667 0.142518 0.968401 0.409100 0.538600 0 254 27
-0.672300 63.485901 -0.421800 0.204667 0.142518 0.968401 0.426300 0.552700 0 254 27
-0.000000 62.538601 -0.140300 0.204667 0.142518 0.968401 0.398200 0.559100 0 254 27
-0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572 0.426300 0.552700 0 254 27
--0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572 0.416100 0.581700 0 254 27
-0.000000 62.538601 -0.140300 -0.000000 0.284850 0.958572 0.398200 0.559100 0 254 27
-2.130500 53.628601 -1.359200 -0.899990 0.017690 0.435552 0.416700 0.297200 0 253 27
-2.336800 60.597198 -1.072500 -0.899990 0.017690 0.435552 0.434100 0.460700 0 253 27
-1.393700 60.597198 -3.164700 -0.899990 0.017690 0.435552 0.380300 0.463400 0 253 27
-1.187300 53.628601 -3.164700 -0.899990 0.017690 0.435552 0.369000 0.300200 0 253 27
--0.706900 62.538601 -0.289700 -0.498102 0.211804 0.840853 0.409100 0.538600 0 254 27
--0.672300 63.485901 -0.421800 -0.498102 0.211804 0.840853 0.426300 0.552800 0 254 27
--1.901400 63.532299 -1.247600 -0.498102 0.211804 0.840853 0.451500 0.531500 0 254 27
--1.838200 62.255798 -0.802600 -0.498102 0.211804 0.840853 0.430000 0.507100 0 254 27
--1.901400 63.532299 -1.247600 -0.915374 0.111541 0.386845 0.451500 0.531500 0 254 27
--2.758700 63.532299 -3.348800 -0.915374 0.111541 0.386845 0.499700 0.518800 0 254 27
--3.194200 60.597198 -3.460400 -0.915374 0.111541 0.386845 0.492000 0.451500 0 254 27
--1.838200 62.255798 -0.802600 -0.915374 0.111541 0.386845 0.430000 0.507100 0 254 27
--2.758700 63.532299 -3.348800 -0.984906 0.142377 0.098436 0.499700 0.518800 0 254 27
--3.010600 63.532299 -5.868700 -0.984906 0.142377 0.098436 0.554200 0.511900 0 254 27
--3.446000 60.597198 -5.980300 -0.984906 0.142377 0.098436 0.552100 0.445900 0 254 27
--3.194200 60.597198 -3.460400 -0.984906 0.142377 0.098436 0.492000 0.451500 0 254 27
--3.194200 60.597198 -3.460400 -0.917633 0.222238 0.329485 0.492000 0.451500 0 254 27
--2.336800 60.597198 -1.072500 -0.917633 0.222238 0.329485 0.434000 0.460800 0 254 27
--1.838200 62.255798 -0.802600 -0.917633 0.222238 0.329485 0.430000 0.507100 0 254 27
--2.130500 53.628601 -1.359200 -0.842435 0.033555 0.537753 0.416600 0.297300 0 253 27
--2.336800 60.597198 -1.072500 -0.842435 0.033555 0.537753 0.434000 0.460800 0 254 27
--3.194200 60.597198 -3.460400 -0.842435 0.033555 0.537753 0.492000 0.451500 0 254 27
--4.088800 54.879799 -3.460400 -0.842435 0.033555 0.537753 0.486700 0.316100 0 253 27
--4.088800 54.879799 -3.460400 -0.982155 0.156435 0.104398 0.486700 0.316100 0 253 27
--3.194200 60.597198 -3.460400 -0.982155 0.156435 0.104398 0.492000 0.451500 0 253 27
--3.446000 60.597198 -5.980300 -0.982155 0.156435 0.104398 0.552100 0.445900 0 253 27
--4.340700 55.234299 -6.210400 -0.982155 0.156435 0.104398 0.542400 0.331500 0 254 27
--3.010600 63.532299 -5.868700 -0.839145 0.204241 -0.504105 0.554200 0.511900 0 254 27
--1.932100 63.532299 -7.311200 -0.839145 0.204241 -0.504105 0.591100 0.519300 0 254 27
--2.517200 60.597198 -7.879200 -0.839145 0.204241 -0.504105 0.601000 0.450300 0 254 27
--3.446000 60.597198 -5.980300 -0.839145 0.204241 -0.504105 0.552100 0.445900 0 254 27
--3.446000 60.597198 -5.980300 -0.847590 0.127945 -0.514996 0.552100 0.445900 0 254 27
--2.517200 60.597198 -7.879200 -0.847590 0.127945 -0.514996 0.601000 0.450300 0 254 27
--2.990300 54.496300 -8.246000 -0.847590 0.127945 -0.514996 0.608300 0.297700 0 254 27
--4.340700 55.234299 -6.210400 -0.847590 0.127945 -0.514996 0.542400 0.331500 0 254 27
--1.932100 63.532299 -7.311200 -0.365116 0.222173 -0.904063 0.591100 0.519300 0 254 27
-0.000000 63.532299 -8.174500 -0.365116 0.222173 -0.904063 0.634800 0.537700 0 254 27
-0.000000 60.597198 -8.812800 -0.365116 0.222173 -0.904063 0.661800 0.464200 0 254 27
--2.517200 60.597198 -7.879200 -0.365116 0.222173 -0.904063 0.601000 0.450300 0 254 27
--2.990300 54.496300 -8.246000 -0.255106 0.035267 -0.966270 0.608300 0.297700 0 254 27
--2.517200 60.597198 -7.879200 -0.255106 0.035267 -0.966270 0.601000 0.450300 0 254 27
-0.000000 60.597198 -8.812800 -0.255106 0.035267 -0.966270 0.661800 0.464200 0 254 27
-0.000000 54.050800 -8.782700 -0.255106 0.035267 -0.966270 0.682300 0.308600 0 254 27
--0.672300 63.485901 -0.421800 -0.422112 0.618267 0.662999 0.426300 0.552800 0 254 27
--1.171400 65.057899 -2.205500 -0.422112 0.618267 0.662999 0.482000 0.564400 0 254 27
--1.901400 63.532299 -1.247600 -0.422112 0.618267 0.662999 0.451500 0.531500 0 254 27
--1.901400 63.532299 -1.247600 -0.756752 0.608663 0.238446 0.451500 0.531500 0 254 27
--1.171400 65.057899 -2.205500 -0.756752 0.608663 0.238446 0.482000 0.564400 0 254 27
--1.795600 65.057899 -4.806100 -0.756752 0.608663 0.238446 0.538600 0.556700 0 254 27
--2.758700 63.532299 -3.348800 -0.756752 0.608663 0.238446 0.499700 0.518800 0 254 27
--2.758700 63.532299 -3.348800 -0.806293 0.585999 0.080601 0.499700 0.518800 0 254 27
--1.795600 65.057899 -4.806100 -0.806293 0.585999 0.080601 0.538600 0.556700 0 254 27
--3.010600 63.532299 -5.868700 -0.806293 0.585999 0.080601 0.554200 0.511900 0 254 27
--3.010600 63.532299 -5.868700 -0.468822 0.765524 -0.440657 0.554200 0.511900 0 254 27
--1.795600 65.057899 -4.806100 -0.468822 0.765524 -0.440657 0.538600 0.556700 0 254 27
-0.000000 65.057899 -6.421400 -0.468822 0.765524 -0.440657 0.589000 0.582100 0 254 27
--1.932100 63.532299 -7.311200 -0.468822 0.765524 -0.440657 0.591100 0.519300 0 254 27
--1.932100 63.532299 -7.311200 -0.281463 0.723860 -0.629925 0.591100 0.519300 0 254 27
-0.000000 65.057899 -6.421400 -0.281463 0.723860 -0.629925 0.589000 0.582100 0 254 27
-0.000000 63.532299 -8.174500 -0.281463 0.723860 -0.629925 0.634800 0.537700 0 254 27
--1.171400 65.057899 -2.205500 -0.296421 0.952404 0.071148 0.482000 0.564400 0 254 27
-0.000000 65.560898 -4.058400 -0.296421 0.952404 0.071148 0.523700 0.603400 0 254 27
--1.795600 65.057899 -4.806100 -0.296421 0.952404 0.071148 0.538600 0.556700 0 254 27
--1.795600 65.057899 -4.806100 -0.184093 0.961370 -0.204641 0.538600 0.556700 0 254 27
-0.000000 65.560898 -4.058400 -0.184093 0.961370 -0.204641 0.523700 0.603400 0 254 27
-0.000000 65.057899 -6.421400 -0.184093 0.961370 -0.204641 0.589000 0.582100 0 254 27
--1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984 0.466700 0.607600 0 254 27
-1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984 0.482000 0.564300 0 254 27
-0.000000 65.560898 -4.058400 0.000000 0.965072 0.261984 0.523700 0.603300 0 254 27
--0.706900 62.538601 -0.289700 -0.204667 0.142518 0.968401 0.409100 0.538600 0 254 27
-0.000000 62.538601 -0.140300 -0.204667 0.142518 0.968401 0.398200 0.559200 0 254 27
--0.672300 63.485901 -0.421800 -0.204667 0.142518 0.968401 0.426300 0.552800 0 254 27
--2.130500 53.628601 -1.359200 0.899990 0.017690 0.435552 0.416600 0.297300 164 133 56
--1.187300 53.628601 -3.164700 0.899990 0.017690 0.435552 0.369000 0.300300 209 100 64
--1.393700 60.597198 -3.164700 0.899990 0.017690 0.435552 0.380200 0.463500 254 254 254
--2.336800 60.597198 -1.072500 0.899990 0.017690 0.435552 0.434000 0.460800 254 254 254
-8.704300 24.905701 -6.036500 0.233777 0.158187 -0.959336 0.967100 0.466200 0 253 27
-7.984800 25.127701 -6.177400 0.233777 0.158187 -0.959336 0.966400 0.464600 0 253 27
-7.649900 27.558001 -5.856100 0.233777 0.158187 -0.959336 0.993500 0.506600 0 253 27
-8.503900 27.435900 -5.670300 0.233777 0.158187 -0.959336 0.976600 0.507100 0 253 27
-6.463600 36.223400 -3.704900 0.910800 0.108730 0.398273 0.962000 0.710700 9 100 160
-5.778000 35.994701 -1.773100 0.910800 0.108730 0.398273 0.922200 0.717000 0 231 44
-7.451900 27.210300 -3.504400 0.910800 0.108730 0.398273 0.930000 0.516400 18 2 248
-8.503900 27.435900 -5.670300 0.910800 0.108730 0.398273 0.976600 0.507100 18 0 253
-5.115000 35.782600 -2.051700 -0.272059 -0.232411 0.933793 0.916000 0.725700 0 241 37
-6.597900 27.332300 -3.690200 -0.272059 -0.232411 0.933793 0.913000 0.515500 16 16 234
-7.451900 27.210300 -3.504400 -0.272059 -0.232411 0.933793 0.930000 0.516400 18 2 248
-5.778000 35.994701 -1.773100 -0.272059 -0.232411 0.933793 0.922200 0.717000 0 231 44
-5.743400 36.019600 -3.995900 0.266707 0.266447 -0.926215 0.971100 0.718900 0 253 27
-6.463600 36.223400 -3.704900 0.266707 0.266447 -0.926215 0.962000 0.710700 0 253 27
-8.503900 27.435900 -5.670300 0.266707 0.266447 -0.926215 0.976600 0.507100 0 253 27
-7.649900 27.558001 -5.856100 0.266707 0.266447 -0.926215 0.993500 0.506600 0 253 27
-7.451900 27.210300 -3.504400 -0.285900 -0.782712 0.552832 0.930000 0.516400 21 0 248
-6.597900 27.332300 -3.690200 -0.285900 -0.782712 0.552832 0.913000 0.515500 35 1 237
-7.984800 25.127701 -6.177400 -0.285900 -0.782712 0.552832 0.966400 0.464600 19 0 253
-8.704300 24.905701 -6.036500 -0.285900 -0.782712 0.552832 0.967100 0.466200 19 0 253
-7.451900 27.210300 -3.504400 0.899158 0.007889 0.437552 0.930000 0.516400 18 2 248
-8.704300 24.905701 -6.036500 0.899158 0.007889 0.437552 0.967100 0.466200 18 0 253
-8.503900 27.435900 -5.670300 0.899158 0.007889 0.437552 0.976600 0.507100 18 0 253
-6.463600 36.223400 -3.704900 -0.293676 0.955783 0.015277 0.962000 0.710700 254 68 73
-5.743400 36.019600 -3.995900 -0.293676 0.955783 0.015277 0.971100 0.718900 254 68 73
-5.115000 35.782600 -2.051700 -0.293676 0.955783 0.015277 0.916000 0.725700 254 68 73
-5.778000 35.994701 -1.773100 -0.293676 0.955783 0.015277 0.922200 0.717000 254 68 73
-4.513000 55.007702 -5.909800 -0.189279 -0.709198 -0.679126 0.935300 0.759300 0 253 27
-4.291100 55.098900 -5.871800 -0.189279 -0.709198 -0.679126 0.932300 0.755300 0 253 27
-4.207800 55.799599 -6.651700 -0.189279 -0.709198 -0.679126 0.967500 0.768900 0 253 27
-4.871900 55.799599 -6.765400 -0.189279 -0.709198 -0.679126 0.957200 0.775300 0 253 27
-2.904000 62.455601 -5.700500 0.959060 0.270852 0.082723 0.954300 0.968000 0 253 27
-2.764700 62.455601 -4.128400 0.959060 0.270852 0.082723 0.909900 0.975800 0 253 27
-4.736600 55.799599 -5.153900 0.959060 0.270852 0.082723 0.919700 0.781300 0 253 27
-4.871900 55.799599 -6.765400 0.959060 0.270852 0.082723 0.957200 0.775300 0 253 27
-2.764700 62.455601 -4.128400 0.167860 -0.101350 0.980587 0.909900 0.975800 0 253 27
-4.072400 55.799599 -5.040200 0.167860 -0.101350 0.980587 0.904100 0.777700 0 253 27
-4.736600 55.799599 -5.153900 0.167860 -0.101350 0.980587 0.919700 0.781300 0 253 27
-2.904000 62.455601 -5.700500 -0.167781 0.107182 -0.979980 0.954300 0.968000 0 253 27
-4.871900 55.799599 -6.765400 -0.167781 0.107182 -0.979980 0.957200 0.775300 0 253 27
-4.207800 55.799599 -6.651700 -0.167781 0.107182 -0.979980 0.967500 0.768900 0 253 27
-4.736600 55.799599 -5.153900 0.042232 -0.727963 0.684314 0.919700 0.781300 254 68 73
-4.072400 55.799599 -5.040200 0.042232 -0.727963 0.684314 0.904100 0.777700 254 68 73
-4.291100 55.098900 -5.871800 0.042232 -0.727963 0.684314 0.932300 0.755300 254 68 73
-4.513000 55.007702 -5.909800 0.042232 -0.727963 0.684314 0.935300 0.759300 254 68 73
-4.736600 55.799599 -5.153900 0.937220 -0.339745 0.078688 0.919700 0.781300 0 253 27
-4.513000 55.007702 -5.909800 0.937220 -0.339745 0.078688 0.935300 0.759300 0 253 27
-4.871900 55.799599 -6.765400 0.937220 -0.339745 0.078688 0.957200 0.775300 0 253 27
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meshes/ply/Normal_UVs_NoColors.ply b/src/tests/evas/meshes/ply/Normal_UVs_NoColors.ply
deleted file mode 100644
index 5622bee27d..0000000000
--- a/src/tests/evas/meshes/ply/Normal_UVs_NoColors.ply
+++ /dev/null
@@ -1,1681 +0,0 @@
-ply
-format ascii 1.0
-comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
-element vertex 1310
-property float x
-property float y
-property float z
-property float nx
-property float ny
-property float nz
-property float s
-property float t
-element face 356
-property list uchar uint vertex_indices
-end_header
--4.649800 14.945700 -8.785600 -0.021734 0.023193 -0.999495 0.094400 0.185800
--2.020300 14.610600 -8.278800 -0.021734 0.023193 -0.999495 0.060000 0.185800
--1.712600 0.024900 -9.195700 -0.021734 0.023193 -0.999495 0.089900 0.023200
--3.252600 0.001600 -8.591000 -0.021734 0.023193 -0.999495 0.107400 0.025300
--4.649800 14.945700 -8.785600 -0.983809 -0.091724 -0.153967 0.094400 0.185800
--3.252600 0.001600 -8.591000 -0.983809 -0.091724 -0.153967 0.107400 0.025300
--4.089400 2.633000 -5.031300 -0.983809 -0.091724 -0.153967 0.145000 0.057700
--5.308800 13.910900 -3.738700 -0.983809 -0.091724 -0.153967 0.154100 0.185800
--1.553600 3.059500 -4.173500 0.398905 -0.098999 0.911633 0.181500 0.058600
--1.766900 13.754900 -2.918700 0.398905 -0.098999 0.911633 0.193300 0.185800
--3.061600 3.537800 -3.461700 0.398905 -0.098999 0.911633 0.164000 0.067400
--1.553600 3.059500 -4.173500 0.977159 -0.002648 0.212493 0.181500 0.058600
--0.626000 0.031700 -8.336200 0.977159 -0.002648 0.212493 0.220100 0.017000
--0.971400 14.644800 -6.706400 0.977159 -0.002648 0.212493 0.225200 0.185800
--1.766900 13.754900 -2.918700 0.977159 -0.002648 0.212493 0.193300 0.185800
--5.495700 46.043098 -6.732400 -0.860977 -0.085411 -0.501422 0.139900 0.788400
--2.827600 38.171799 -8.088300 -0.860977 -0.085411 -0.501422 0.114500 0.661600
--5.919200 37.619099 -4.570300 -0.860977 -0.085411 -0.501422 0.183200 0.661600
--6.029500 46.188801 -3.956000 -0.860977 -0.085411 -0.501422 0.183300 0.792100
--4.685700 36.664101 -1.616400 -0.917535 -0.032092 0.396359 0.239100 0.661600
--4.298500 47.001099 -0.058900 -0.917535 -0.032092 0.396359 0.249300 0.802400
--6.029500 46.188801 -3.956000 -0.917535 -0.032092 0.396359 0.183300 0.792100
--5.919200 37.619099 -4.570300 -0.917535 -0.032092 0.396359 0.183200 0.661600
--6.775800 50.206501 -7.534500 -0.223809 0.028781 -0.974208 0.134100 0.852600
--7.252500 54.524502 -7.615000 -0.223809 0.028781 -0.974208 0.126100 0.913200
-0.000000 53.738098 -8.986800 -0.223809 0.028781 -0.974208 0.028100 0.877800
-0.000000 50.037800 -9.413700 -0.223809 0.028781 -0.974208 0.041800 0.827300
--7.252500 54.524502 -7.615000 -0.375359 0.901424 0.215731 0.812300 0.981700
--8.747800 53.770199 -7.353300 -0.375359 0.901424 0.215731 0.807700 0.944900
--8.184300 53.108700 -3.320400 -0.375359 0.901424 0.215731 0.746000 0.944900
--6.624100 53.529800 -2.653700 -0.375359 0.901424 0.215731 0.746000 0.986600
--9.827700 52.989700 -7.188500 -0.412168 0.895237 0.169320 0.805500 0.922700
--14.989100 50.565300 -7.297200 -0.412168 0.895237 0.169320 0.805300 0.834400
--15.636800 49.715099 -4.015700 -0.412168 0.895237 0.169320 0.746000 0.809400
--9.508400 52.403099 -3.672700 -0.412168 0.895237 0.169320 0.746000 0.922700
-0.000000 37.009800 0.550700 -0.339751 -0.089043 0.936291 0.310700 0.661600
-0.000000 47.287498 1.094200 -0.339751 -0.089043 0.936291 0.310700 0.805700
--4.298500 47.001099 -0.058900 -0.339751 -0.089043 0.936291 0.249300 0.802400
--4.685700 36.664101 -1.616400 -0.339751 -0.089043 0.936291 0.239100 0.661600
-0.000000 53.738098 -8.986800 -0.139268 0.841727 -0.521633 0.028100 0.877800
--7.252500 54.524502 -7.615000 -0.139268 0.841727 -0.521633 0.126100 0.913200
--2.321200 55.471001 -5.570800 -0.139268 0.841727 -0.521633 0.053700 0.941000
-0.000000 55.950600 -7.250100 -0.139268 0.841727 -0.521633 0.022400 0.916300
--6.624100 53.529800 -2.653700 -0.510018 -0.190129 0.838888 0.210200 0.900400
--7.813100 49.342701 -3.886900 -0.510018 -0.190129 0.838888 0.181000 0.844200
--6.029500 46.188801 -3.956000 -0.510018 -0.190129 0.838888 0.183300 0.792100
--3.773800 51.093601 -1.034300 -0.510018 -0.190129 0.838888 0.256600 0.864400
--6.029500 46.188801 -3.956000 -0.909885 0.202901 0.361857 0.183300 0.792100
--4.298500 47.001099 -0.058900 -0.909885 0.202901 0.361857 0.249300 0.802400
--3.773800 51.093601 -1.034300 -0.909885 0.202901 0.361857 0.256600 0.864400
-0.000000 50.880199 0.110000 -0.266804 0.255185 0.929352 0.310700 0.860500
--3.773800 51.093601 -1.034300 -0.266804 0.255185 0.929352 0.256600 0.864400
--4.298500 47.001099 -0.058900 -0.266804 0.255185 0.929352 0.249300 0.802400
-0.000000 47.287498 1.094200 -0.266804 0.255185 0.929352 0.310700 0.805700
--16.136200 50.023998 -7.546200 0.129075 0.179950 -0.975171 0.808600 0.809400
--14.989100 50.565300 -7.297200 0.129075 0.179950 -0.975171 0.805300 0.834400
--13.779500 47.417198 -7.715300 0.129075 0.179950 -0.975171 0.879500 0.834400
--14.885000 46.974701 -7.946000 0.129075 0.179950 -0.975171 0.879500 0.809400
--13.779500 47.417198 -7.715300 0.437873 -0.882573 -0.171264 0.626900 0.829400
--8.756500 49.321098 -7.632900 0.437873 -0.882573 -0.171264 0.626900 0.922700
--8.927200 49.128502 -4.128200 0.437873 -0.882573 -0.171264 0.688900 0.922700
--14.977100 45.689201 -4.821000 0.437873 -0.882573 -0.171264 0.680000 0.809400
--17.208200 49.477699 -7.512200 -0.268622 0.938905 0.215175 0.810800 0.788400
--22.585199 48.327702 -7.594400 -0.268622 0.938905 0.215175 0.812700 0.705100
--22.348700 46.932201 -2.822400 -0.268622 0.938905 0.215175 0.746000 0.680200
--16.810101 49.139900 -3.928800 -0.268622 0.938905 0.215175 0.746000 0.788400
--21.936399 43.055199 -3.733600 0.256926 -0.186034 0.948357 0.691800 0.680200
--16.192200 44.960400 -4.877100 0.256926 -0.186034 0.948357 0.677700 0.788400
--16.810101 49.139900 -3.928800 0.256926 -0.186034 0.948357 0.746000 0.788400
--22.348700 46.932201 -2.822400 0.256926 -0.186034 0.948357 0.746000 0.680200
--22.105101 44.119598 -7.074000 -0.471869 -0.161034 -0.866838 0.862200 0.680200
--23.337700 47.268200 -6.945000 -0.471869 -0.161034 -0.866838 0.809900 0.680200
--22.585199 48.327702 -7.594400 -0.471869 -0.161034 -0.866838 0.812700 0.705100
--21.061199 44.183601 -7.611200 -0.471869 -0.161034 -0.866838 0.879500 0.705100
--15.884600 46.520500 -7.855800 0.312108 -0.901546 -0.299673 0.626900 0.788400
--16.192200 44.960400 -4.877100 0.312108 -0.901546 -0.299673 0.677700 0.788400
--21.936399 43.055199 -3.733600 0.312108 -0.901546 -0.299673 0.691800 0.680200
--21.061199 44.183601 -7.611200 0.312108 -0.901546 -0.299673 0.626900 0.699700
--5.598500 31.822901 -1.405400 -0.899226 0.141575 0.413943 0.185400 0.436500
--7.174300 32.815300 -5.168000 -0.899226 0.141575 0.413943 0.136400 0.440500
--7.453900 29.910801 -4.782000 -0.899226 0.141575 0.413943 0.143900 0.408700
--4.970000 33.082802 -8.871300 -0.875321 0.068314 -0.478692 0.086900 0.436600
--5.595300 29.761600 -8.491100 -0.875321 0.068314 -0.478692 0.097300 0.399700
--7.453900 29.910801 -4.782000 -0.875321 0.068314 -0.478692 0.143900 0.408700
--7.174300 32.815300 -5.168000 -0.875321 0.068314 -0.478692 0.136400 0.440500
--6.827700 20.858999 -3.051400 -0.895608 -0.345701 -0.279959 0.166500 0.297500
--5.426000 21.341299 -8.131100 -0.895608 -0.345701 -0.279959 0.106600 0.297500
--6.194700 19.576300 -3.492500 -0.895608 -0.345701 -0.279959 0.163400 0.285600
--0.835600 22.853901 -8.203000 -0.044062 0.086408 -0.995285 0.053300 0.313700
--0.899900 21.410400 -8.342700 -0.044062 0.086408 -0.995285 0.054900 0.297500
--5.426000 21.341299 -8.131100 -0.044062 0.086408 -0.995285 0.106600 0.297500
--5.317800 22.936800 -8.014600 -0.044062 0.086408 -0.995285 0.105500 0.313700
--0.899900 21.410400 -8.342700 0.986890 0.053202 0.152371 0.307200 0.297500
--1.957400 20.620800 -1.217700 0.986890 0.053202 0.152371 0.224300 0.297500
--1.853000 19.164200 -1.385300 0.986890 0.053202 0.152371 0.221600 0.281000
--6.194700 19.576300 -3.492500 -0.393090 -0.299033 0.869517 0.163400 0.285600
--1.853000 19.164200 -1.385300 -0.393090 -0.299033 0.869517 0.221600 0.281000
--1.957400 20.620800 -1.217700 -0.393090 -0.299033 0.869517 0.224300 0.297500
--6.827700 20.858999 -3.051400 -0.393090 -0.299033 0.869517 0.166500 0.297500
--5.259600 15.490400 -9.599400 0.139442 0.106302 -0.984508 0.090700 0.228600
--5.426000 21.341299 -8.131100 0.139442 0.106302 -0.984508 0.106600 0.297500
--0.899900 21.410400 -8.342700 0.139442 0.106302 -0.984508 0.054900 0.297500
--0.294400 16.169500 -7.962700 0.139442 0.106302 -0.984508 0.039600 0.241800
--0.294400 16.169500 -7.962700 0.977002 0.117101 0.178197 0.282300 0.223700
--0.899900 21.410400 -8.342700 0.977002 0.117101 0.178197 0.307200 0.297500
--1.853000 19.164200 -1.385300 0.977002 0.117101 0.178197 0.221600 0.281000
--1.221800 14.450400 -2.004100 0.977002 0.117101 0.178197 0.220300 0.236900
--1.853000 19.164200 -1.385300 -0.395956 -0.119778 0.910424 0.221600 0.281000
--6.194700 19.576300 -3.492500 -0.395956 -0.119778 0.910424 0.163400 0.285600
--6.498700 14.643000 -4.000600 -0.395956 -0.119778 0.910424 0.151700 0.232900
--1.221800 14.450400 -2.004100 -0.395956 -0.119778 0.910424 0.220300 0.236900
--6.498700 14.643000 -4.000600 -0.982418 0.045709 -0.181012 0.151700 0.232900
--6.194700 19.576300 -3.492500 -0.982418 0.045709 -0.181012 0.163400 0.285600
--5.426000 21.341299 -8.131100 -0.982418 0.045709 -0.181012 0.106600 0.297500
--5.259600 15.490400 -9.599400 -0.982418 0.045709 -0.181012 0.090700 0.228600
--7.813100 49.342701 -3.886900 -0.881229 -0.394976 -0.259672 0.181000 0.844200
--6.775800 50.206501 -7.534500 -0.881229 -0.394976 -0.259672 0.134100 0.852600
--5.495700 46.043098 -6.732400 -0.881229 -0.394976 -0.259672 0.139900 0.788400
--6.029500 46.188801 -3.956000 -0.881229 -0.394976 -0.259672 0.183300 0.792100
--8.756500 49.321098 -7.632900 0.341557 -0.936397 -0.080618 0.626900 0.922700
--6.775800 50.206501 -7.534500 0.341557 -0.936397 -0.080618 0.626900 0.944900
--7.813100 49.342701 -3.886900 0.341557 -0.936397 -0.080618 0.686800 0.944900
--8.927200 49.128502 -4.128200 0.341557 -0.936397 -0.080618 0.688900 0.922700
--5.495700 46.043098 -6.732400 -0.295037 -0.218453 -0.930178 0.139900 0.788400
--6.775800 50.206501 -7.534500 -0.295037 -0.218453 -0.930178 0.134100 0.852600
-0.000000 50.037800 -9.413700 -0.295037 -0.218453 -0.930178 0.041800 0.827300
-0.000000 45.235802 -8.516300 -0.295037 -0.218453 -0.930178 0.061400 0.762800
--3.773800 51.093601 -1.034300 -0.217879 0.518058 0.827130 0.256600 0.864400
-0.000000 50.880199 0.110000 -0.217879 0.518058 0.827130 0.310700 0.860500
-0.000000 54.522099 -2.187600 -0.217879 0.518058 0.827130 0.310700 0.919600
--1.435700 55.057400 -2.884500 -0.217879 0.518058 0.827130 0.285800 0.931400
--0.163800 60.672798 0.405300 -0.878123 0.172158 0.446386 0.529100 0.200900
--0.596000 60.268700 -0.255900 -0.878123 0.172158 0.446386 0.502600 0.185300
--0.605400 59.453602 0.006800 -0.878123 0.172158 0.446386 0.508800 0.156900
--0.226300 59.631802 0.717000 -0.878123 0.172158 0.446386 0.529800 0.167300
-0.000000 59.375900 0.272700 -0.351825 0.003851 0.936058 0.533800 0.153800
--0.605400 59.453602 0.006800 -0.351825 0.003851 0.936058 0.508800 0.156900
--0.793500 58.611801 -0.022400 -0.351825 0.003851 0.936058 0.506200 0.129800
-0.000000 58.735298 0.237300 -0.351825 0.003851 0.936058 0.533800 0.134400
--1.340700 61.343498 -1.024900 -0.500896 0.173312 0.847978 0.467800 0.231800
--2.209500 61.230499 -1.515000 -0.500896 0.173312 0.847978 0.430900 0.227000
--2.225300 60.301201 -1.334400 -0.500896 0.173312 0.847978 0.434400 0.187400
--0.474100 61.294899 -0.607800 -0.419394 -0.893935 0.158081 0.499900 0.227200
--0.179900 61.274700 0.058500 -0.419394 -0.893935 0.158081 0.525600 0.223900
--0.785400 61.539799 -0.048800 -0.419394 -0.893935 0.158081 0.505500 0.247600
--0.163800 60.672798 0.405300 -0.879737 0.234636 0.413532 0.529100 0.200900
--0.179900 61.274700 0.058500 -0.879737 0.234636 0.413532 0.525600 0.223900
--0.474100 61.294899 -0.607800 -0.879737 0.234636 0.413532 0.499900 0.227200
--0.596000 60.268700 -0.255900 -0.879737 0.234636 0.413532 0.502600 0.185300
--0.785400 61.539799 -0.048800 -0.405349 0.400850 0.821591 0.505500 0.247600
-0.000000 62.775902 -0.355700 -0.405349 0.400850 0.821591 0.533900 0.286800
--1.901400 62.898899 -1.262500 -0.405349 0.400850 0.821591 0.451600 0.287500
--1.792100 61.563202 -0.648200 -0.405349 0.400850 0.821591 0.464300 0.250800
--1.901400 62.898899 -1.262500 -0.958885 0.139689 0.247034 0.451600 0.287500
--2.505800 61.413601 -3.333900 -0.958885 0.139689 0.247034 0.367200 0.240300
--2.209500 61.230499 -1.515000 -0.958885 0.139689 0.247034 0.430900 0.227000
--1.792100 61.563202 -0.648200 -0.958885 0.139689 0.247034 0.464300 0.250800
--2.071800 58.080299 -1.837600 -0.982605 0.010378 0.185418 0.435700 0.090000
--2.043500 58.694401 -1.722000 -0.982605 0.010378 0.185418 0.434700 0.119000
--2.361600 58.652599 -3.405400 -0.982605 0.010378 0.185418 0.376100 0.111600
--2.361600 58.652599 -3.405400 -0.835615 -0.547438 -0.045374 0.376100 0.111600
--1.480400 57.287800 -3.167400 -0.835615 -0.547438 -0.045374 0.388000 0.054100
--2.071800 58.080299 -1.837600 -0.835615 -0.547438 -0.045374 0.435700 0.090000
--2.361600 58.652599 -3.405400 -0.962379 -0.178153 0.205154 0.376100 0.111600
--2.043500 58.694401 -1.722000 -0.962379 -0.178153 0.205154 0.434700 0.119000
--2.225300 60.301201 -1.334400 -0.962379 -0.178153 0.205154 0.434400 0.187400
--2.484800 60.667999 -2.078300 -0.962379 -0.178153 0.205154 0.409600 0.193000
--0.596000 60.268700 -0.255900 -0.569338 0.180881 0.801958 0.502600 0.185300
--2.225300 60.301201 -1.334400 -0.569338 0.180881 0.801958 0.434400 0.187400
--0.793500 58.611801 -0.022400 -0.569338 0.180881 0.801958 0.506200 0.129800
--0.605400 59.453602 0.006800 -0.569338 0.180881 0.801958 0.508800 0.156900
--0.793500 58.611801 -0.022400 -0.424783 -0.113068 0.898207 0.506200 0.129800
--0.860300 57.339199 -0.345300 -0.424783 -0.113068 0.898207 0.507000 0.087800
-0.000000 57.320400 0.190300 -0.424783 -0.113068 0.898207 0.533800 0.095300
-0.000000 58.735298 0.237300 -0.424783 -0.113068 0.898207 0.533800 0.134400
--2.361600 58.652599 -3.405400 -0.801295 -0.555920 -0.221086 0.376100 0.111600
--1.507500 57.978802 -4.806700 -0.801295 -0.555920 -0.221086 0.327200 0.071700
--1.480400 57.287800 -3.167400 -0.801295 -0.555920 -0.221086 0.388000 0.054100
--1.480400 57.287800 -3.167400 -0.605736 -0.042761 0.794516 0.293600 0.962800
--1.435700 55.057400 -2.884500 -0.605736 -0.042761 0.794516 0.285800 0.931400
-0.000000 54.522099 -2.187600 -0.605736 -0.042761 0.794516 0.310700 0.919600
--0.509500 56.862801 -2.081200 -0.605736 -0.042761 0.794516 0.307800 0.953500
--1.435700 55.057400 -2.884500 -0.962522 0.132164 0.236820 0.285800 0.931400
--1.480400 57.287800 -3.167400 -0.962522 0.132164 0.236820 0.293600 0.962800
--1.507500 57.978802 -4.806700 -0.962522 0.132164 0.236820 0.269900 0.982500
--2.321200 55.471001 -5.570800 -0.962522 0.132164 0.236820 0.259500 0.968000
--5.259600 15.490400 -9.599400 0.329887 -0.177209 -0.927239 0.090700 0.228600
--0.294400 16.169500 -7.962700 0.329887 -0.177209 -0.927239 0.039600 0.241800
--2.020300 14.610600 -8.278800 0.329887 -0.177209 -0.927239 0.063600 0.221000
--0.294400 16.169500 -7.962700 0.923351 -0.382504 0.033356 0.282300 0.223700
--1.221800 14.450400 -2.004100 0.923351 -0.382504 0.033356 0.220300 0.236900
--0.971400 14.644800 -6.706400 0.923351 -0.382504 0.033356 0.253200 0.212300
--5.308800 13.910900 -3.738700 -0.281184 -0.501171 0.818391 0.168700 0.220700
--1.766900 13.754900 -2.918700 -0.281184 -0.501171 0.818391 0.216900 0.223600
--1.221800 14.450400 -2.004100 -0.281184 -0.501171 0.818391 0.220300 0.236900
--6.498700 14.643000 -4.000600 -0.281184 -0.501171 0.818391 0.151700 0.232900
--4.649800 14.945700 -8.785600 -0.465679 -0.853476 -0.233927 0.103500 0.222700
--5.308800 13.910900 -3.738700 -0.465679 -0.853476 -0.233927 0.168700 0.220700
--6.498700 14.643000 -4.000600 -0.465679 -0.853476 -0.233927 0.151700 0.232900
--5.259600 15.490400 -9.599400 -0.465679 -0.853476 -0.233927 0.090700 0.228600
--1.957400 20.620800 -1.217700 0.981627 0.066418 0.178877 0.224300 0.297500
--0.899900 21.410400 -8.342700 0.981627 0.066418 0.178877 0.307200 0.297500
--0.835600 22.853901 -8.203000 0.981627 0.066418 0.178877 0.306600 0.313700
--2.189200 21.987900 -1.481800 0.981627 0.066418 0.178877 0.225500 0.313700
--7.174300 32.815300 -5.168000 -0.882053 0.156893 -0.444261 0.136400 0.440500
--6.542300 35.480598 -4.902800 -0.882053 0.156893 -0.444261 0.133600 0.471500
--5.283200 35.952900 -7.814600 -0.882053 0.156893 -0.444261 0.094100 0.470900
--4.970000 33.082802 -8.871300 -0.882053 0.156893 -0.444261 0.086900 0.436600
--5.598500 31.822901 -1.405400 -0.892193 0.169920 0.418473 0.185400 0.436500
--6.542300 35.480598 -4.902800 -0.892193 0.169920 0.418473 0.133600 0.471500
--7.174300 32.815300 -5.168000 -0.892193 0.169920 0.418473 0.136400 0.440500
--4.685700 36.664101 -1.616400 -0.474113 0.127364 0.871203 0.239100 0.661600
--5.598500 31.822901 -1.405400 -0.474113 0.127364 0.871203 0.231500 0.582200
--3.798500 31.552500 -0.386300 -0.474113 0.127364 0.871203 0.257600 0.582200
--2.225300 60.301201 -1.334400 -0.926529 0.086891 0.366052 0.434400 0.187400
--2.209500 61.230499 -1.515000 -0.926529 0.086891 0.366052 0.430900 0.227000
--2.484800 60.667999 -2.078300 -0.926529 0.086891 0.366052 0.409600 0.193000
--8.927200 49.128502 -4.128200 -0.174303 -0.164506 0.970853 0.688900 0.922700
--7.813100 49.342701 -3.886900 -0.174303 -0.164506 0.970853 0.686800 0.944900
--8.184300 53.108700 -3.320400 -0.174303 -0.164506 0.970853 0.746000 0.944900
--9.508400 52.403099 -3.672700 -0.174303 -0.164506 0.970853 0.746000 0.922700
--8.184300 53.108700 -3.320400 -0.526523 0.826719 0.198265 0.746000 0.944900
--8.747800 53.770199 -7.353300 -0.526523 0.826719 0.198265 0.807700 0.944900
--9.827700 52.989700 -7.188500 -0.526523 0.826719 0.198265 0.805500 0.922700
--9.508400 52.403099 -3.672700 -0.526523 0.826719 0.198265 0.746000 0.922700
--8.747800 53.770199 -7.353300 -0.154881 -0.035505 -0.987295 0.807700 0.944900
--7.252500 54.524502 -7.615000 -0.154881 -0.035505 -0.987295 0.812300 0.981700
--6.775800 50.206501 -7.534500 -0.154881 -0.035505 -0.987295 0.879500 0.944900
--8.927200 49.128502 -4.128200 0.001669 -0.169906 0.985459 0.688900 0.922700
--9.508400 52.403099 -3.672700 0.001669 -0.169906 0.985459 0.746000 0.922700
--15.636800 49.715099 -4.015700 0.001669 -0.169906 0.985459 0.746000 0.809400
--14.977100 45.689201 -4.821000 0.001669 -0.169906 0.985459 0.680000 0.809400
--6.624100 53.529800 -2.653700 -0.215818 0.814400 0.538680 0.210200 0.900400
--3.773800 51.093601 -1.034300 -0.215818 0.814400 0.538680 0.256600 0.864400
--1.435700 55.057400 -2.884500 -0.215818 0.814400 0.538680 0.285800 0.931400
--7.252500 54.524502 -7.615000 -0.215818 0.814400 0.538680 0.180400 0.964800
--2.321200 55.471001 -5.570800 -0.276118 0.932071 0.234526 0.259500 0.968000
--7.252500 54.524502 -7.615000 -0.276118 0.932071 0.234526 0.180400 0.964800
--1.435700 55.057400 -2.884500 -0.276118 0.932071 0.234526 0.285800 0.931400
--2.209500 61.230499 -1.515000 -0.942806 0.279456 0.181716 0.430900 0.227000
--2.505800 61.413601 -3.333900 -0.942806 0.279456 0.181716 0.362700 0.212700
--2.484800 60.667999 -2.078300 -0.942806 0.279456 0.181716 0.409600 0.193000
--2.484800 60.667999 -2.078300 -0.998559 -0.051788 -0.014052 0.409600 0.193000
--2.505800 61.413601 -3.333900 -0.998559 -0.051788 -0.014052 0.362700 0.212700
--2.361600 58.652599 -3.405400 -0.998559 -0.051788 -0.014052 0.376100 0.111600
--2.209500 61.230499 -1.515000 -0.107977 -0.909631 0.401138 0.430900 0.227000
--1.340700 61.343498 -1.024900 -0.107977 -0.909631 0.401138 0.467800 0.231800
--1.792100 61.563202 -0.648200 -0.107977 -0.909631 0.401138 0.464300 0.250800
--3.061600 3.537800 -3.461700 0.234488 0.898953 0.369997 0.290200 0.071700
--3.735600 1.816900 0.228400 0.234488 0.898953 0.369997 0.290200 0.030700
--1.568700 1.981700 -0.627100 0.234488 0.898953 0.369997 0.308400 0.040400
--1.553600 3.059500 -4.173500 0.234488 0.898953 0.369997 0.310400 0.073900
--0.626000 0.031700 -8.336200 0.992053 0.072189 0.103052 0.345300 0.097200
--1.553600 3.059500 -4.173500 0.992053 0.072189 0.103052 0.310400 0.073900
--1.568700 1.981700 -0.627100 0.992053 0.072189 0.103052 0.308400 0.040400
--1.825200 -0.024100 0.601200 0.992053 0.072189 0.103052 0.313500 0.023800
--1.825200 -0.024100 0.601200 -0.002195 -0.999985 -0.005027 0.748300 0.055100
--3.769300 -0.009000 1.132900 -0.002195 -0.999985 -0.005027 0.765800 0.040900
--1.712600 0.024900 -9.195700 -0.002195 -0.999985 -0.005027 0.765100 0.147100
--0.626000 0.031700 -8.336200 -0.002195 -0.999985 -0.005027 0.751000 0.138000
--1.712600 0.024900 -9.195700 0.748722 0.074200 -0.658719 0.089900 0.023200
--2.020300 14.610600 -8.278800 0.748722 0.074200 -0.658719 0.060000 0.185800
--0.971400 14.644800 -6.706400 0.748722 0.074200 -0.658719 0.025900 0.185800
--0.626000 0.031700 -8.336200 0.748722 0.074200 -0.658719 0.075600 0.021500
--1.568700 1.981700 -0.627100 0.270273 0.452545 0.849798 0.308400 0.040400
--3.735600 1.816900 0.228400 0.270273 0.452545 0.849798 0.290200 0.030700
--3.769300 -0.009000 1.132900 0.270273 0.452545 0.849798 0.289700 0.012400
--1.825200 -0.024100 0.601200 0.270273 0.452545 0.849798 0.313500 0.023800
--4.089400 2.633000 -5.031300 -0.957442 -0.073711 -0.279054 0.275500 0.071900
--3.252600 0.001600 -8.591000 -0.957442 -0.073711 -0.279054 0.238500 0.103000
--5.176800 -0.025000 -0.598300 -0.957442 -0.073711 -0.279054 0.266200 0.023600
--5.390300 1.568200 -1.670300 -0.957442 -0.073711 -0.279054 0.274000 0.039600
--3.769300 -0.009000 1.132900 -0.738109 0.308147 0.600201 0.289700 0.012400
--3.735600 1.816900 0.228400 -0.738109 0.308147 0.600201 0.290200 0.030700
--5.390300 1.568200 -1.670300 -0.738109 0.308147 0.600201 0.274000 0.039600
--5.176800 -0.025000 -0.598300 -0.738109 0.308147 0.600201 0.266200 0.023600
--5.390300 1.568200 -1.670300 -0.560649 0.811720 0.163660 0.274000 0.039600
--3.735600 1.816900 0.228400 -0.560649 0.811720 0.163660 0.290200 0.030700
--3.061600 3.537800 -3.461700 -0.560649 0.811720 0.163660 0.290200 0.071700
--4.089400 2.633000 -5.031300 -0.560649 0.811720 0.163660 0.275500 0.071900
--3.061600 3.537800 -3.461700 -0.452521 -0.074303 0.888653 0.164000 0.067400
--1.766900 13.754900 -2.918700 -0.452521 -0.074303 0.888653 0.193300 0.185800
--5.308800 13.910900 -3.738700 -0.452521 -0.074303 0.888653 0.154100 0.185800
--4.089400 2.633000 -5.031300 -0.452521 -0.074303 0.888653 0.145000 0.057700
--2.020300 14.610600 -8.278800 0.001520 -0.830500 -0.557017 0.063600 0.221000
--4.649800 14.945700 -8.785600 0.001520 -0.830500 -0.557017 0.103500 0.222700
--5.259600 15.490400 -9.599400 0.001520 -0.830500 -0.557017 0.090700 0.228600
--2.020300 14.610600 -8.278800 0.649568 -0.634088 -0.419515 0.063600 0.221000
--0.294400 16.169500 -7.962700 0.649568 -0.634088 -0.419515 0.039600 0.241800
--0.971400 14.644800 -6.706400 0.649568 -0.634088 -0.419515 0.028400 0.216500
--5.426000 21.341299 -8.131100 -0.959570 0.028386 -0.280036 0.106600 0.297500
--6.827700 20.858999 -3.051400 -0.959570 0.028386 -0.280036 0.166500 0.297500
--6.824000 22.193899 -3.254300 -0.959570 0.028386 -0.280036 0.165700 0.313700
--5.317800 22.936800 -8.014600 -0.959570 0.028386 -0.280036 0.105500 0.313700
--0.845100 29.891001 -9.491500 -0.126028 -0.127868 -0.983751 0.041700 0.395800
--0.835600 22.853901 -8.203000 -0.126028 -0.127868 -0.983751 0.053300 0.313700
--5.317800 22.936800 -8.014600 -0.126028 -0.127868 -0.983751 0.105500 0.313700
--5.595300 29.761600 -8.491100 -0.126028 -0.127868 -0.983751 0.097300 0.399700
--1.957400 20.620800 -1.217700 -0.346283 0.131313 0.928895 0.224300 0.297500
--2.189200 21.987900 -1.481800 -0.346283 0.131313 0.928895 0.225500 0.313700
--6.824000 22.193899 -3.254300 -0.346283 0.131313 0.928895 0.165700 0.313700
--6.827700 20.858999 -3.051400 -0.346283 0.131313 0.928895 0.166500 0.297500
--0.605400 59.453602 0.006800 -0.276378 -0.886938 0.370075 0.508800 0.156900
-0.000000 59.375900 0.272700 -0.276378 -0.886938 0.370075 0.533800 0.153800
--0.226300 59.631802 0.717000 -0.276378 -0.886938 0.370075 0.529800 0.167300
--21.936399 43.055199 -3.733600 -0.245050 -0.199318 0.948801 0.691800 0.680200
--22.348700 46.932201 -2.822400 -0.245050 -0.199318 0.948801 0.746000 0.680200
--23.323000 46.228001 -3.425200 -0.245050 -0.199318 0.948801 0.746000 0.661900
--23.265499 44.290199 -3.614200 -0.245050 -0.199318 0.948801 0.710900 0.661900
--22.105101 44.119598 -7.074000 -0.680722 -0.210597 -0.701617 0.862200 0.680200
--23.273100 44.479099 -6.170500 -0.680722 -0.210597 -0.701617 0.835600 0.661900
--23.881300 46.267799 -5.995500 -0.680722 -0.210597 -0.701617 0.800900 0.661900
--23.337700 47.268200 -6.945000 -0.680722 -0.210597 -0.701617 0.809900 0.680200
--22.348700 46.932201 -2.822400 -0.710630 0.673907 0.202126 0.746000 0.680200
--23.337700 47.268200 -6.945000 -0.710630 0.673907 0.202126 0.809900 0.680200
--23.881300 46.267799 -5.995500 -0.710630 0.673907 0.202126 0.800900 0.661900
--23.323000 46.228001 -3.425200 -0.710630 0.673907 0.202126 0.746000 0.661900
--21.936399 43.055199 -3.733600 -0.575702 -0.803125 -0.153486 0.691800 0.680200
--23.265499 44.290199 -3.614200 -0.575702 -0.803125 -0.153486 0.710900 0.661900
--23.273100 44.479099 -6.170500 -0.575702 -0.803125 -0.153486 0.665900 0.661900
--22.105101 44.119598 -7.074000 -0.575702 -0.803125 -0.153486 0.641700 0.680200
--23.323000 46.228001 -3.425200 0.234519 0.052147 0.970712 0.746000 0.661900
--24.935400 45.742901 -3.288800 0.234519 0.052147 0.970712 0.746000 0.630500
--24.446100 44.099098 -3.039500 0.234519 0.052147 0.970712 0.723200 0.630500
--23.265499 44.290199 -3.614200 0.234519 0.052147 0.970712 0.710900 0.661900
--23.273100 44.479099 -6.170500 -0.051663 0.047611 -0.997529 0.835600 0.661900
--25.718901 44.407902 -5.989100 -0.051663 0.047611 -0.997529 0.812100 0.630500
--25.982700 45.641201 -5.974700 -0.051663 0.047611 -0.997529 0.796200 0.630500
--23.881300 46.267799 -5.995500 -0.051663 0.047611 -0.997529 0.800900 0.661900
--23.881300 46.267799 -5.995500 -0.283035 0.956157 0.075198 0.800900 0.661900
--25.982700 45.641201 -5.974700 -0.283035 0.956157 0.075198 0.796200 0.630500
--24.935400 45.742901 -3.288800 -0.283035 0.956157 0.075198 0.746000 0.630500
--23.323000 46.228001 -3.425200 -0.283035 0.956157 0.075198 0.746000 0.661900
--23.265499 44.290199 -3.614200 0.050680 -0.993534 -0.101596 0.710900 0.661900
--24.446100 44.099098 -3.039500 0.050680 -0.993534 -0.101596 0.723200 0.630500
--25.718901 44.407902 -5.989100 0.050680 -0.993534 -0.101596 0.677100 0.630500
--23.273100 44.479099 -6.170500 0.050680 -0.993534 -0.101596 0.665900 0.661900
--3.798500 31.552500 -0.386300 -0.302820 0.047342 0.951871 0.257600 0.582200
-0.000000 31.552500 0.128500 -0.302820 0.047342 0.951871 0.310700 0.582200
-0.000000 37.009800 0.550700 -0.302820 0.047342 0.951871 0.310700 0.661600
--4.685700 36.664101 -1.616400 -0.302820 0.047342 0.951871 0.239100 0.661600
--27.058001 43.733101 -1.471100 -0.612973 -0.035197 0.789319 0.783900 0.527900
--28.100901 44.177299 -2.470000 -0.612973 -0.035197 0.789319 0.756100 0.537200
--27.637899 42.321201 -1.984400 -0.612973 -0.035197 0.789319 0.780200 0.502700
--26.775499 43.007000 -1.492900 -0.612973 -0.035197 0.789319 0.799700 0.523000
--27.102699 45.320202 -5.735100 -0.288380 -0.175341 -0.941325 0.706300 0.587600
--25.982700 45.641201 -5.974700 -0.288380 -0.175341 -0.941325 0.701400 0.609900
--25.718901 44.407902 -5.989100 -0.288380 -0.175341 -0.941325 0.674700 0.592000
--26.246300 42.901402 -5.383600 -0.288380 -0.175341 -0.941325 0.663100 0.553800
--24.935400 45.742901 -3.288800 -0.215944 0.976143 0.022647 0.774000 0.616500
--25.982700 45.641201 -5.974700 -0.215944 0.976143 0.022647 0.701400 0.609900
--27.102699 45.320202 -5.735100 -0.215944 0.976143 0.022647 0.706300 0.587600
--26.753901 45.398300 -2.858600 -0.215944 0.976143 0.022647 0.766000 0.574200
--24.446100 44.099098 -3.039500 0.806467 -0.440747 -0.394147 0.815000 0.599300
--26.246300 42.901402 -5.383600 0.806467 -0.440747 -0.394147 0.880100 0.569900
--25.718901 44.407902 -5.989100 0.806467 -0.440747 -0.394147 0.885900 0.607200
--28.380600 42.330502 -3.056600 -0.840529 -0.044209 0.539960 0.741600 0.498200
--27.637899 42.321201 -1.984400 -0.840529 -0.044209 0.539960 0.780200 0.502700
--28.100901 44.177299 -2.470000 -0.840529 -0.044209 0.539960 0.756100 0.537200
--28.697901 44.238201 -3.477500 -0.840529 -0.044209 0.539960 0.737900 0.538900
--28.380600 42.330502 -3.056600 -0.979149 -0.175223 -0.102788 0.741600 0.498200
--28.697901 44.238201 -3.477500 -0.979149 -0.175223 -0.102788 0.737900 0.538900
--28.543800 44.178001 -4.651400 -0.979149 -0.175223 -0.102788 0.718600 0.545700
--28.292801 42.543098 -4.446800 -0.979149 -0.175223 -0.102788 0.704200 0.514300
--26.753901 45.398300 -2.858600 -0.560189 0.737837 0.376544 0.766000 0.574200
--28.697901 44.238201 -3.477500 -0.560189 0.737837 0.376544 0.737900 0.538900
--28.100901 44.177299 -2.470000 -0.560189 0.737837 0.376544 0.756100 0.537200
--24.935400 45.742901 -3.288800 0.484106 0.321222 0.813915 0.774000 0.616500
--26.117701 44.487900 -2.198700 0.484106 0.321222 0.813915 0.788200 0.565100
--25.587200 43.557701 -2.038700 0.484106 0.321222 0.813915 0.806300 0.556900
--24.446100 44.099098 -3.039500 0.484106 0.321222 0.813915 0.815000 0.599300
--24.446100 44.099098 -3.039500 0.765721 -0.642695 -0.024780 0.815000 0.599300
--25.587200 43.557701 -2.038700 0.765721 -0.642695 -0.024780 0.806300 0.556900
--25.491899 42.827301 -2.370100 0.765721 -0.642695 -0.024780 0.813300 0.554500
--26.246300 42.901402 -5.383600 0.765721 -0.642695 -0.024780 0.880100 0.569900
--26.753901 45.398300 -2.858600 0.068715 0.616533 0.784324 0.766000 0.574200
--26.117701 44.487900 -2.198700 0.068715 0.616533 0.784324 0.788200 0.565100
--24.935400 45.742901 -3.288800 0.068715 0.616533 0.784324 0.774000 0.616500
-0.000000 31.552500 0.128500 -0.069551 -0.031626 0.997077 0.310700 0.582200
--3.798500 31.552500 -0.386300 -0.069551 -0.031626 0.997077 0.257600 0.582200
--3.463700 23.872801 -0.356700 -0.069551 -0.031626 0.997077 0.261000 0.472800
-0.000000 24.132099 -0.356700 -0.069551 -0.031626 0.997077 0.310700 0.472800
--2.225300 60.301201 -1.334400 -0.789816 -0.226827 0.569860 0.434400 0.187400
--2.043500 58.694401 -1.722000 -0.789816 -0.226827 0.569860 0.434700 0.119000
--0.793500 58.611801 -0.022400 -0.789816 -0.226827 0.569860 0.506200 0.129800
--0.793500 58.611801 -0.022400 -0.800106 -0.097243 0.591924 0.506200 0.129800
--2.043500 58.694401 -1.722000 -0.800106 -0.097243 0.591924 0.434700 0.119000
--2.071800 58.080299 -1.837600 -0.800106 -0.097243 0.591924 0.435700 0.090000
--0.860300 57.339199 -0.345300 -0.800106 -0.097243 0.591924 0.507000 0.087800
--2.071800 58.080299 -1.837600 -0.594038 -0.791272 0.144939 0.435700 0.090000
--1.480400 57.287800 -3.167400 -0.594038 -0.791272 0.144939 0.435700 0.022900
--0.509500 56.862801 -2.081200 -0.594038 -0.791272 0.144939 0.497100 0.026700
--0.860300 57.339199 -0.345300 -0.594038 -0.791272 0.144939 0.507000 0.087800
--0.179900 61.274700 0.058500 -0.090663 0.188705 0.977840 0.525600 0.223900
-0.000000 61.912998 -0.048000 -0.090663 0.188705 0.977840 0.533800 0.254400
--0.785400 61.539799 -0.048800 -0.090663 0.188705 0.977840 0.505500 0.247600
--15.884600 46.520500 -7.855800 -0.098387 0.080586 -0.991880 0.879500 0.788400
--17.208200 49.477699 -7.512200 -0.098387 0.080586 -0.991880 0.810800 0.788400
--16.136200 50.023998 -7.546200 -0.098387 0.080586 -0.991880 0.808600 0.809400
--14.885000 46.974701 -7.946000 -0.098387 0.080586 -0.991880 0.879500 0.809400
--15.636800 49.715099 -4.015700 -0.436830 0.889212 0.135946 0.746000 0.809400
--16.136200 50.023998 -7.546200 -0.436830 0.889212 0.135946 0.808600 0.809400
--17.208200 49.477699 -7.512200 -0.436830 0.889212 0.135946 0.810800 0.788400
--16.810101 49.139900 -3.928800 -0.436830 0.889212 0.135946 0.746000 0.788400
--16.192200 44.960400 -4.877100 0.435886 -0.826304 -0.356686 0.677700 0.788400
--15.884600 46.520500 -7.855800 0.435886 -0.826304 -0.356686 0.626900 0.788400
--14.885000 46.974701 -7.946000 0.435886 -0.826304 -0.356686 0.626900 0.809400
--14.977100 45.689201 -4.821000 0.435886 -0.826304 -0.356686 0.680000 0.809400
--16.810101 49.139900 -3.928800 0.116417 -0.190205 0.974818 0.746000 0.788400
--16.192200 44.960400 -4.877100 0.116417 -0.190205 0.974818 0.677700 0.788400
--14.977100 45.689201 -4.821000 0.116417 -0.190205 0.974818 0.680000 0.809400
--15.636800 49.715099 -4.015700 0.116417 -0.190205 0.974818 0.746000 0.809400
--13.779500 47.417198 -7.715300 -0.030432 0.115440 -0.992848 0.879500 0.834400
--14.989100 50.565300 -7.297200 -0.030432 0.115440 -0.992848 0.805300 0.834400
--9.827700 52.989700 -7.188500 -0.030432 0.115440 -0.992848 0.805500 0.922700
--8.756500 49.321098 -7.632900 -0.030432 0.115440 -0.992848 0.879500 0.922700
--15.636800 49.715099 -4.015700 -0.447311 0.883265 0.140554 0.746000 0.809400
--14.989100 50.565300 -7.297200 -0.447311 0.883265 0.140554 0.805300 0.834400
--16.136200 50.023998 -7.546200 -0.447311 0.883265 0.140554 0.808600 0.809400
--13.779500 47.417198 -7.715300 0.409629 -0.847844 -0.336697 0.626900 0.829400
--14.977100 45.689201 -4.821000 0.409629 -0.847844 -0.336697 0.680000 0.809400
--14.885000 46.974701 -7.946000 0.409629 -0.847844 -0.336697 0.626900 0.809400
--0.971400 14.644800 -6.706400 0.777065 -0.629233 0.015366 0.253200 0.212300
--1.221800 14.450400 -2.004100 0.777065 -0.629233 0.015366 0.220300 0.236900
--1.766900 13.754900 -2.918700 0.777065 -0.629233 0.015366 0.216900 0.223600
--26.117701 44.487900 -2.198700 0.374471 0.258120 0.890587 0.788200 0.565100
--27.058001 43.733101 -1.471100 0.374471 0.258120 0.890587 0.783900 0.527900
--26.775499 43.007000 -1.492900 0.374471 0.258120 0.890587 0.799700 0.523000
--25.587200 43.557701 -2.038700 0.374471 0.258120 0.890587 0.806300 0.556900
--25.587200 43.557701 -2.038700 0.386633 -0.610879 0.690899 0.806300 0.556900
--26.775499 43.007000 -1.492900 0.386633 -0.610879 0.690899 0.799700 0.523000
--27.637899 42.321201 -1.984400 0.386633 -0.610879 0.690899 0.816200 0.507300
--25.491899 42.827301 -2.370100 0.386633 -0.610879 0.690899 0.813300 0.554500
--26.117701 44.487900 -2.198700 -0.202601 0.798645 0.566673 0.788200 0.565100
--28.100901 44.177299 -2.470000 -0.202601 0.798645 0.566673 0.756100 0.537200
--27.058001 43.733101 -1.471100 -0.202601 0.798645 0.566673 0.783900 0.527900
--8.184300 53.108700 -3.320400 -0.347207 -0.172872 0.921717 0.746000 0.944900
--7.813100 49.342701 -3.886900 -0.347207 -0.172872 0.921717 0.686800 0.944900
--6.624100 53.529800 -2.653700 -0.347207 -0.172872 0.921717 0.746000 0.986600
--8.747800 53.770199 -7.353300 -0.055764 0.062731 -0.996471 0.807700 0.944900
--6.775800 50.206501 -7.534500 -0.055764 0.062731 -0.996471 0.879500 0.944900
--8.756500 49.321098 -7.632900 -0.055764 0.062731 -0.996471 0.879500 0.922700
--9.827700 52.989700 -7.188500 -0.055764 0.062731 -0.996471 0.805500 0.922700
--28.543800 44.178001 -4.651400 -0.562493 0.826801 -0.001192 0.718600 0.545700
--28.697901 44.238201 -3.477500 -0.562493 0.826801 -0.001192 0.737900 0.538900
--26.753901 45.398300 -2.858600 -0.562493 0.826801 -0.001192 0.766000 0.574200
--27.102699 45.320202 -5.735100 -0.562493 0.826801 -0.001192 0.706300 0.587600
--26.246300 42.901402 -5.383600 0.106461 -0.983873 -0.143736 0.880100 0.569900
--28.380600 42.330502 -3.056600 0.106461 -0.983873 -0.143736 0.853500 0.507000
--28.292801 42.543098 -4.446800 0.106461 -0.983873 -0.143736 0.879400 0.523100
--28.100901 44.177299 -2.470000 -0.192584 0.484112 0.853550 0.756100 0.537200
--26.117701 44.487900 -2.198700 -0.192584 0.484112 0.853550 0.788200 0.565100
--26.753901 45.398300 -2.858600 -0.192584 0.484112 0.853550 0.766000 0.574200
--1.712600 0.024900 -9.195700 0.013475 -0.999909 -0.000374 0.765100 0.147100
--3.769300 -0.009000 1.132900 0.013475 -0.999909 -0.000374 0.765800 0.040900
--5.176800 -0.025000 -0.598300 0.013475 -0.999909 -0.000374 0.783900 0.050100
--3.252600 0.001600 -8.591000 0.013475 -0.999909 -0.000374 0.777900 0.139800
-0.000000 61.912998 -0.048000 -0.158526 0.331625 0.929997 0.533800 0.254400
-0.000000 62.775902 -0.355700 -0.158526 0.331625 0.929997 0.533900 0.286800
--0.785400 61.539799 -0.048800 -0.158526 0.331625 0.929997 0.505500 0.247600
--0.340300 31.400700 -9.922000 0.943854 -0.327649 -0.042263 0.348900 0.396000
--0.425600 30.069099 -1.503600 0.943854 -0.327649 -0.042263 0.251300 0.411900
--0.845100 29.891001 -9.491500 0.943854 -0.327649 -0.042263 0.339400 0.379800
-0.000000 54.522099 -2.187600 0.000000 -0.045410 0.998968 0.310700 0.919600
-0.000000 56.862801 -2.081200 0.000000 -0.045410 0.998968 0.310500 0.953100
--0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968 0.307800 0.953500
--0.509500 56.862801 -2.081200 -0.098448 -0.971038 0.217700 0.497100 0.026700
-0.000000 56.862801 -2.081200 -0.098448 -0.971038 0.217700 0.533800 0.019000
-0.000000 57.320400 0.190300 -0.098448 -0.971038 0.217700 0.533800 0.095300
--0.860300 57.339199 -0.345300 -0.098448 -0.971038 0.217700 0.507000 0.087800
--5.598500 31.822901 -1.405400 -0.881296 0.021519 0.472075 0.185400 0.436500
--7.453900 29.910801 -4.782000 -0.881296 0.021519 0.472075 0.143900 0.408700
--6.824000 22.193899 -3.254300 -0.881296 0.021519 0.472075 0.165700 0.313700
--6.824000 22.193899 -3.254300 -0.921164 -0.108973 -0.373607 0.165700 0.313700
--7.453900 29.910801 -4.782000 -0.921164 -0.108973 -0.373607 0.143900 0.408700
--5.595300 29.761600 -8.491100 -0.921164 -0.108973 -0.373607 0.097300 0.399700
--5.317800 22.936800 -8.014600 -0.921164 -0.108973 -0.373607 0.105500 0.313700
--3.798500 31.552500 -0.386300 -0.402805 -0.146650 0.903461 0.210900 0.433400
--5.598500 31.822901 -1.405400 -0.402805 -0.146650 0.903461 0.185400 0.436500
--6.824000 22.193899 -3.254300 -0.402805 -0.146650 0.903461 0.165700 0.313700
--2.189200 21.987900 -1.481800 -0.402805 -0.146650 0.903461 0.225500 0.313700
--0.340300 31.400700 -9.922000 -0.229486 -0.108632 -0.967231 0.033600 0.413900
--0.845100 29.891001 -9.491500 -0.229486 -0.108632 -0.967231 0.041700 0.395800
--5.595300 29.761600 -8.491100 -0.229486 -0.108632 -0.967231 0.097300 0.399700
--4.970000 33.082802 -8.871300 -0.229486 -0.108632 -0.967231 0.086900 0.436600
--0.835600 22.853901 -8.203000 0.992234 -0.110109 0.057862 0.306600 0.313700
--0.845100 29.891001 -9.491500 0.992234 -0.110109 0.057862 0.339400 0.379800
--0.425600 30.069099 -1.503600 0.992234 -0.110109 0.057862 0.251300 0.411900
--2.189200 21.987900 -1.481800 0.992234 -0.110109 0.057862 0.225500 0.313700
--2.162800 35.743500 -9.599900 -0.324262 0.084100 -0.942221 0.052600 0.465300
--0.340300 31.400700 -9.922000 -0.324262 0.084100 -0.942221 0.033600 0.413900
--4.970000 33.082802 -8.871300 -0.324262 0.084100 -0.942221 0.086900 0.436600
--5.283200 35.952900 -7.814600 -0.324262 0.084100 -0.942221 0.094100 0.470900
--5.283200 35.952900 -7.814600 -0.889642 0.311183 -0.334218 0.142000 0.631800
--6.542300 35.480598 -4.902800 -0.889642 0.311183 -0.334218 0.182300 0.631800
--5.919200 37.619099 -4.570300 -0.889642 0.311183 -0.334218 0.183200 0.661600
--5.919200 37.619099 -4.570300 -0.882633 0.186716 0.431389 0.183200 0.661600
--6.542300 35.480598 -4.902800 -0.882633 0.186716 0.431389 0.182300 0.631800
--5.598500 31.822901 -1.405400 -0.882633 0.186716 0.431389 0.231500 0.582200
--4.685700 36.664101 -1.616400 -0.882633 0.186716 0.431389 0.239100 0.661600
--0.474100 61.294899 -0.607800 -0.490764 0.255871 0.832875 0.499900 0.227200
--1.340700 61.343498 -1.024900 -0.490764 0.255871 0.832875 0.467800 0.231800
--2.225300 60.301201 -1.334400 -0.490764 0.255871 0.832875 0.434400 0.187400
--0.596000 60.268700 -0.255900 -0.490764 0.255871 0.832875 0.502600 0.185300
--1.340700 61.343498 -1.024900 -0.199083 -0.932669 0.300824 0.467800 0.231800
--0.474100 61.294899 -0.607800 -0.199083 -0.932669 0.300824 0.499900 0.227200
--0.785400 61.539799 -0.048800 -0.199083 -0.932669 0.300824 0.505500 0.247600
--1.792100 61.563202 -0.648200 -0.199083 -0.932669 0.300824 0.464300 0.250800
-0.000000 45.235802 -8.516300 -0.205813 0.023108 -0.978318 0.061400 0.762800
-0.000000 38.221600 -8.073300 -0.205813 0.023108 -0.978318 0.073200 0.661600
--2.827600 38.171799 -8.088300 -0.205813 0.023108 -0.978318 0.114500 0.661600
--5.495700 46.043098 -6.732400 -0.205813 0.023108 -0.978318 0.139900 0.788400
--0.425600 30.069099 -1.503600 0.289736 -0.060654 0.955183 0.251300 0.411900
--3.798500 31.552500 -0.386300 0.289736 -0.060654 0.955183 0.210900 0.433400
--2.189200 21.987900 -1.481800 0.289736 -0.060654 0.955183 0.225500 0.313700
-0.000000 31.547001 -9.939100 0.347255 -0.926523 -0.144807 0.349900 0.400200
-0.000000 30.215401 -1.522000 0.347255 -0.926523 -0.144807 0.252400 0.417000
--0.425600 30.069099 -1.503600 0.347255 -0.926523 -0.144807 0.251300 0.411900
--0.340300 31.400700 -9.922000 0.347255 -0.926523 -0.144807 0.348900 0.396000
--21.061199 44.183601 -7.611200 -0.028361 0.039319 -0.998824 0.879500 0.705100
--22.585199 48.327702 -7.594400 -0.028361 0.039319 -0.998824 0.812700 0.705100
--17.208200 49.477699 -7.512200 -0.028361 0.039319 -0.998824 0.810800 0.788400
--15.884600 46.520500 -7.855800 -0.028361 0.039319 -0.998824 0.879500 0.788400
--22.348700 46.932201 -2.822400 -0.723103 0.652497 0.226650 0.746000 0.680200
--22.585199 48.327702 -7.594400 -0.723103 0.652497 0.226650 0.812700 0.705100
--23.337700 47.268200 -6.945000 -0.723103 0.652497 0.226650 0.809900 0.680200
--21.061199 44.183601 -7.611200 -0.095048 -0.949863 -0.297868 0.626900 0.699700
--21.936399 43.055199 -3.733600 -0.095048 -0.949863 -0.297868 0.691800 0.680200
--22.105101 44.119598 -7.074000 -0.095048 -0.949863 -0.297868 0.641700 0.680200
-0.000000 59.375900 0.272700 0.000000 -0.866545 0.499100 0.533800 0.153800
-0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100 0.537800 0.167300
--0.226300 59.631802 0.717000 0.000000 -0.866545 0.499100 0.529800 0.167300
--0.163800 60.672798 0.405300 0.000000 0.286842 0.957978 0.529100 0.200900
--0.226300 59.631802 0.717000 0.000000 0.286842 0.957978 0.529800 0.167300
-0.226300 59.631802 0.717000 0.000000 0.286842 0.957978 0.537800 0.167300
-0.163800 60.672798 0.405300 0.000000 0.286842 0.957978 0.538500 0.200900
--0.340300 31.400700 -9.922000 -0.012671 0.074070 -0.997173 0.033600 0.413900
--2.162800 35.743500 -9.599900 -0.012671 0.074070 -0.997173 0.052600 0.465300
-0.000000 35.795200 -9.599900 -0.012671 0.074070 -0.997173 0.027500 0.464800
-0.000000 31.547001 -9.939100 -0.012671 0.074070 -0.997173 0.029600 0.415400
--5.919200 37.619099 -4.570300 -0.561685 0.544798 -0.622660 0.183200 0.661600
--2.827600 38.171799 -8.088300 -0.561685 0.544798 -0.622660 0.114500 0.661600
--2.162800 35.743500 -9.599900 -0.561685 0.544798 -0.622660 0.096500 0.631800
--5.283200 35.952900 -7.814600 -0.561685 0.544798 -0.622660 0.142000 0.631800
--28.543800 44.178001 -4.651400 -0.410462 -0.233070 -0.881589 0.718600 0.545700
--27.102699 45.320202 -5.735100 -0.410462 -0.233070 -0.881589 0.706300 0.587600
--26.246300 42.901402 -5.383600 -0.410462 -0.233070 -0.881589 0.663100 0.553800
--28.292801 42.543098 -4.446800 -0.410462 -0.233070 -0.881589 0.704200 0.514300
--25.491899 42.827301 -2.370100 0.201709 -0.968181 -0.148119 0.813300 0.554500
--27.637899 42.321201 -1.984400 0.201709 -0.968181 -0.148119 0.816200 0.507300
--28.380600 42.330502 -3.056600 0.201709 -0.968181 -0.148119 0.853500 0.507000
--26.246300 42.901402 -5.383600 0.185319 -0.980147 -0.070494 0.880100 0.569900
--25.491899 42.827301 -2.370100 0.185319 -0.980147 -0.070494 0.813300 0.554500
--28.380600 42.330502 -3.056600 0.185319 -0.980147 -0.070494 0.853500 0.507000
--0.179900 61.274700 0.058500 0.000000 0.499235 0.866467 0.525600 0.223900
--0.163800 60.672798 0.405300 0.000000 0.499235 0.866467 0.529100 0.200900
-0.163800 60.672798 0.405300 0.000000 0.499235 0.866467 0.538500 0.200900
-0.179900 61.274700 0.058500 0.000000 0.499235 0.866467 0.542100 0.223900
-0.000000 61.912998 -0.048000 0.000000 0.164575 0.986365 0.533800 0.254400
--0.179900 61.274700 0.058500 0.000000 0.164575 0.986365 0.525600 0.223900
-0.179900 61.274700 0.058500 0.000000 0.164575 0.986365 0.542100 0.223900
--2.162800 35.743500 -9.599900 -0.008224 0.529675 -0.848161 0.096500 0.631800
--2.827600 38.171799 -8.088300 -0.008224 0.529675 -0.848161 0.114500 0.661600
-0.000000 38.221600 -8.073300 -0.008224 0.529675 -0.848161 0.073200 0.661600
-0.000000 35.795200 -9.599900 -0.008224 0.529675 -0.848161 0.068100 0.631800
-4.620900 14.945700 -8.516100 0.163464 0.013069 -0.986463 0.912200 0.175600
-3.252600 0.001600 -8.591000 0.163464 0.013069 -0.986463 0.909400 0.032900
-1.712600 0.024900 -9.195700 0.163464 0.013069 -0.986463 0.925400 0.031900
-1.456400 14.610600 -8.695100 0.163464 0.013069 -0.986463 0.943400 0.175600
-4.089400 2.633000 -5.031300 0.982688 -0.088487 -0.162770 0.873900 0.060000
-3.252600 0.001600 -8.591000 0.982688 -0.088487 -0.162770 0.909400 0.032900
-4.620900 14.945700 -8.516100 0.982688 -0.088487 -0.162770 0.912200 0.175600
-5.308800 13.910900 -3.738700 0.982688 -0.088487 -0.162770 0.859000 0.175600
-1.553600 3.059500 -4.173500 -0.398905 -0.098999 0.911633 0.841100 0.058900
-3.061600 3.537800 -3.461700 -0.398905 -0.098999 0.911633 0.856300 0.067800
-1.766900 13.754900 -2.918700 -0.398905 -0.098999 0.911633 0.824200 0.175600
-1.553600 3.059500 -4.173500 -0.983093 0.009545 0.182857 0.841100 0.058900
-1.766900 13.754900 -2.918700 -0.983093 0.009545 0.182857 0.824200 0.175600
-1.239800 14.644800 -6.465300 -0.983093 0.009545 0.182857 0.795300 0.175600
-0.626000 0.031700 -8.336200 -0.983093 0.009545 0.182857 0.808600 0.019600
-5.495700 46.043098 -6.732400 0.860977 -0.085411 -0.501422 0.140100 0.788400
-6.029500 46.188801 -3.956000 0.860977 -0.085411 -0.501422 0.183500 0.792100
-5.919200 37.619099 -4.570300 0.860977 -0.085411 -0.501422 0.183400 0.661600
-2.827600 38.171799 -8.088300 0.860977 -0.085411 -0.501422 0.114700 0.661600
-4.685700 36.664101 -1.616400 0.917535 -0.032092 0.396359 0.239300 0.661600
-5.919200 37.619099 -4.570300 0.917535 -0.032092 0.396359 0.183400 0.661600
-6.029500 46.188801 -3.956000 0.917535 -0.032092 0.396359 0.183500 0.792100
-4.298500 47.001099 -0.058900 0.917535 -0.032092 0.396359 0.249500 0.802400
-6.775800 50.206501 -7.534500 0.223809 0.028781 -0.974208 0.134300 0.852600
-0.000000 50.037800 -9.413700 0.223809 0.028781 -0.974208 0.042000 0.827300
-0.000000 53.738098 -8.986800 0.223809 0.028781 -0.974208 0.028300 0.877800
-7.252500 54.524502 -7.615000 0.223809 0.028781 -0.974208 0.126400 0.913200
-7.252500 54.524502 -7.615000 0.375359 0.901424 0.215731 0.533200 0.977800
-6.624100 53.529800 -2.653700 0.375359 0.901424 0.215731 0.469900 0.977800
-8.184300 53.108700 -3.320400 0.375359 0.901424 0.215731 0.469900 0.942000
-8.747800 53.770199 -7.353300 0.375359 0.901424 0.215731 0.528600 0.942000
-9.827700 52.989700 -7.188500 0.412168 0.895237 0.169320 0.526400 0.916400
-9.508400 52.403099 -3.672700 0.412168 0.895237 0.169320 0.469900 0.916400
-15.636800 49.715099 -4.015700 0.412168 0.895237 0.169320 0.469900 0.803100
-14.989100 50.565300 -7.297200 0.412168 0.895237 0.169320 0.526200 0.828100
-0.000000 37.009800 0.550700 0.339751 -0.089043 0.936291 0.310700 0.661600
-4.685700 36.664101 -1.616400 0.339751 -0.089043 0.936291 0.239300 0.661600
-4.298500 47.001099 -0.058900 0.339751 -0.089043 0.936291 0.249500 0.802400
-0.000000 47.287498 1.094200 0.339751 -0.089043 0.936291 0.310700 0.805700
-0.000000 53.738098 -8.986800 0.139268 0.841727 -0.521633 0.028300 0.877800
-0.000000 55.950600 -7.250100 0.139268 0.841727 -0.521633 0.022600 0.916300
-2.321200 55.471001 -5.570800 0.139268 0.841727 -0.521633 0.053900 0.941000
-7.252500 54.524502 -7.615000 0.139268 0.841727 -0.521633 0.126400 0.913200
-3.773800 51.093601 -1.034300 0.772400 -0.022870 0.634725 0.256800 0.864400
-4.298500 47.001099 -0.058900 0.772400 -0.022870 0.634725 0.249500 0.802400
-6.029500 46.188801 -3.956000 0.772400 -0.022870 0.634725 0.183500 0.792100
-6.624100 53.529800 -2.653700 0.772400 -0.022870 0.634725 0.210400 0.900400
-6.624100 53.529800 -2.653700 0.299992 -0.190133 0.934802 0.210400 0.900400
-6.029500 46.188801 -3.956000 0.299992 -0.190133 0.934802 0.183500 0.792100
-7.813100 49.342701 -3.886900 0.299992 -0.190133 0.934802 0.181200 0.844200
-0.000000 50.880199 0.110000 0.266804 0.255185 0.929352 0.310700 0.860500
-0.000000 47.287498 1.094200 0.266804 0.255185 0.929352 0.310700 0.805700
-4.298500 47.001099 -0.058900 0.266804 0.255185 0.929352 0.249500 0.802400
-3.773800 51.093601 -1.034300 0.266804 0.255185 0.929352 0.256800 0.864400
-16.136200 50.023998 -7.546200 -0.129075 0.179950 -0.975171 0.529500 0.803100
-14.885000 46.974701 -7.946000 -0.129075 0.179950 -0.975171 0.590800 0.803100
-13.779500 47.417198 -7.715300 -0.129075 0.179950 -0.975171 0.590800 0.828100
-14.989100 50.565300 -7.297200 -0.129075 0.179950 -0.975171 0.526200 0.828100
-13.779500 47.417198 -7.715300 -0.437873 -0.882573 -0.171264 0.347800 0.823100
-14.977100 45.689201 -4.821000 -0.437873 -0.882573 -0.171264 0.400900 0.803100
-8.927200 49.128502 -4.128200 -0.437873 -0.882573 -0.171264 0.409800 0.916400
-8.756500 49.321098 -7.632900 -0.437873 -0.882573 -0.171264 0.347800 0.916400
-17.208200 49.477699 -7.512200 0.268622 0.938905 0.215175 0.531700 0.782100
-16.810101 49.139900 -3.928800 0.268622 0.938905 0.215175 0.469900 0.782100
-22.348700 46.932201 -2.822400 0.268622 0.938905 0.215175 0.469900 0.674700
-22.585199 48.327702 -7.594400 0.268622 0.938905 0.215175 0.533600 0.698800
-21.936399 43.055199 -3.733600 -0.256926 -0.186034 0.948357 0.412700 0.674700
-22.348700 46.932201 -2.822400 -0.256926 -0.186034 0.948357 0.469900 0.674700
-16.810101 49.139900 -3.928800 -0.256926 -0.186034 0.948357 0.469900 0.782100
-16.192200 44.960400 -4.877100 -0.256926 -0.186034 0.948357 0.398600 0.782100
-22.105101 44.119598 -7.074000 0.471869 -0.161034 -0.866838 0.583100 0.674700
-21.061199 44.183601 -7.611200 0.471869 -0.161034 -0.866838 0.590800 0.698800
-22.585199 48.327702 -7.594400 0.471869 -0.161034 -0.866838 0.533600 0.698800
-23.337700 47.268200 -6.945000 0.471869 -0.161034 -0.866838 0.530800 0.674700
-15.884600 46.520500 -7.855800 -0.312108 -0.901546 -0.299673 0.347800 0.782100
-21.061199 44.183601 -7.611200 -0.312108 -0.901546 -0.299673 0.347800 0.693400
-21.936399 43.055199 -3.733600 -0.312108 -0.901546 -0.299673 0.412700 0.674700
-16.192200 44.960400 -4.877100 -0.312108 -0.901546 -0.299673 0.398600 0.782100
-5.598500 31.822901 -1.404300 0.899204 0.141743 0.413933 0.847900 0.413200
-7.453900 29.910801 -4.780100 0.899204 0.141743 0.413933 0.884800 0.385400
-7.174300 32.815300 -5.167300 0.899204 0.141743 0.413933 0.893300 0.414200
-4.970000 33.082802 -8.871900 0.875445 0.068330 -0.478463 0.938900 0.409500
-7.174300 32.815300 -5.167300 0.875445 0.068330 -0.478463 0.893300 0.414200
-7.453900 29.910801 -4.780100 0.875445 0.068330 -0.478463 0.884800 0.385400
-5.595300 29.761600 -8.492500 0.875445 0.068330 -0.478463 0.927500 0.375900
-6.827700 20.858999 -3.044800 0.895156 -0.347215 -0.279532 0.858900 0.286100
-6.194700 19.576300 -3.478600 0.895156 -0.347215 -0.279532 0.860200 0.277400
-5.426000 21.341299 -8.132600 0.895156 -0.347215 -0.279532 0.914200 0.282100
-0.835600 22.853901 -8.210700 0.045309 0.086115 -0.995254 0.964300 0.301600
-5.317800 22.936800 -8.016200 0.045309 0.086115 -0.995254 0.916400 0.301600
-5.426000 21.341299 -8.132600 0.045309 0.086115 -0.995254 0.914200 0.282100
-0.899900 21.410400 -8.349400 0.045309 0.086115 -0.995254 0.962800 0.286100
-0.899900 21.410400 -8.349400 -0.986876 0.054006 0.152183 0.726500 0.282100
-1.853000 19.164200 -1.371600 -0.986876 0.054006 0.152183 0.805100 0.274200
-1.957400 20.620800 -1.211500 -0.986876 0.054006 0.152183 0.804700 0.286100
-6.194700 19.576300 -3.478600 0.393316 -0.294694 0.870895 0.860200 0.277400
-6.827700 20.858999 -3.044800 0.393316 -0.294694 0.870895 0.858900 0.286100
-1.957400 20.620800 -1.211500 0.393316 -0.294694 0.870895 0.804700 0.286100
-1.853000 19.164200 -1.371600 0.393316 -0.294694 0.870895 0.805100 0.274200
-5.117200 15.490400 -9.679700 -0.013076 0.210350 -0.977539 0.917300 0.220800
-0.134100 16.169500 -9.174700 -0.013076 0.210350 -0.977539 0.969900 0.225300
-0.899900 21.410400 -8.349400 -0.013076 0.210350 -0.977539 0.962800 0.286100
-5.426000 21.341299 -8.132600 -0.013076 0.210350 -0.977539 0.914200 0.282100
-0.134100 16.169500 -9.174700 -0.979250 0.051054 0.196120 0.732600 0.207100
-1.716700 14.450400 -2.459200 -0.979250 0.051054 0.196120 0.808600 0.236100
-1.853000 19.164200 -1.371600 -0.979250 0.051054 0.196120 0.805100 0.274200
-0.899900 21.410400 -8.349400 -0.979250 0.051054 0.196120 0.726500 0.282100
-1.853000 19.164200 -1.371600 0.369977 -0.140579 0.918343 0.805100 0.274200
-1.716700 14.450400 -2.459200 0.369977 -0.140579 0.918343 0.808600 0.236100
-6.069200 14.643000 -3.762300 0.369977 -0.140579 0.918343 0.859400 0.227800
-6.194700 19.576300 -3.478600 0.369977 -0.140579 0.918343 0.860200 0.277400
-6.069200 14.643000 -3.762300 0.986467 -0.011966 -0.163524 0.859400 0.227800
-5.117200 15.490400 -9.679700 0.986467 -0.011966 -0.163524 0.917300 0.220800
-5.426000 21.341299 -8.132600 0.986467 -0.011966 -0.163524 0.914200 0.282100
-6.194700 19.576300 -3.478600 0.986467 -0.011966 -0.163524 0.860200 0.277400
-7.813100 49.342701 -3.886900 0.881229 -0.394976 -0.259672 0.181200 0.844200
-6.029500 46.188801 -3.956000 0.881229 -0.394976 -0.259672 0.183500 0.792100
-5.495700 46.043098 -6.732400 0.881229 -0.394976 -0.259672 0.140100 0.788400
-6.775800 50.206501 -7.534500 0.881229 -0.394976 -0.259672 0.134300 0.852600
-8.756500 49.321098 -7.632900 -0.341557 -0.936397 -0.080618 0.347800 0.916400
-8.927200 49.128502 -4.128200 -0.341557 -0.936397 -0.080618 0.409800 0.916400
-7.813100 49.342701 -3.886900 -0.341557 -0.936397 -0.080618 0.407700 0.942000
-6.775800 50.206501 -7.534500 -0.341557 -0.936397 -0.080618 0.347800 0.942000
-5.495700 46.043098 -6.732400 0.295037 -0.218453 -0.930178 0.140100 0.788400
-0.000000 45.235802 -8.516300 0.295037 -0.218453 -0.930178 0.061600 0.762900
-0.000000 50.037800 -9.413700 0.295037 -0.218453 -0.930178 0.042000 0.827300
-6.775800 50.206501 -7.534500 0.295037 -0.218453 -0.930178 0.134300 0.852600
-3.773800 51.093601 -1.034300 0.217879 0.518058 0.827130 0.256800 0.864400
-1.435700 55.057400 -2.884500 0.217879 0.518058 0.827130 0.286000 0.931400
-0.000000 54.522099 -2.187600 0.217879 0.518058 0.827130 0.310700 0.919600
-0.000000 50.880199 0.110000 0.217879 0.518058 0.827130 0.310700 0.860500
-0.163800 60.672798 0.405300 0.878123 0.172158 0.446386 0.538500 0.200900
-0.226300 59.631802 0.717000 0.878123 0.172158 0.446386 0.537800 0.167300
-0.605400 59.453602 0.006800 0.878123 0.172158 0.446386 0.558900 0.156900
-0.596000 60.268700 -0.255900 0.878123 0.172158 0.446386 0.565100 0.185300
-0.000000 59.375900 0.272700 0.351825 0.003851 0.936058 0.533800 0.153800
-0.000000 58.735298 0.237300 0.351825 0.003851 0.936058 0.533800 0.134400
-0.793500 58.611801 -0.022400 0.351825 0.003851 0.936058 0.561500 0.129800
-0.605400 59.453602 0.006800 0.351825 0.003851 0.936058 0.558900 0.156900
-1.340700 61.343498 -1.024900 0.500896 0.173312 0.847978 0.599900 0.231700
-2.225300 60.301201 -1.334400 0.500896 0.173312 0.847978 0.633200 0.187400
-2.209500 61.230499 -1.515000 0.500896 0.173312 0.847978 0.636800 0.228100
-0.474100 61.294899 -0.607800 0.419394 -0.893935 0.158081 0.567800 0.227200
-0.785400 61.539799 -0.048800 0.419394 -0.893935 0.158081 0.562200 0.247600
-0.179900 61.274700 0.058500 0.419394 -0.893935 0.158081 0.542100 0.223900
-0.163800 60.672798 0.405300 0.879737 0.234636 0.413532 0.538500 0.200900
-0.596000 60.268700 -0.255900 0.879737 0.234636 0.413532 0.565100 0.185300
-0.474100 61.294899 -0.607800 0.879737 0.234636 0.413532 0.567800 0.227200
-0.179900 61.274700 0.058500 0.879737 0.234636 0.413532 0.542100 0.223900
-0.785400 61.539799 -0.048800 0.405349 0.400850 0.821591 0.562200 0.247600
-1.792100 61.563202 -0.648200 0.405349 0.400850 0.821591 0.603400 0.250800
-1.901400 62.898899 -1.262500 0.405349 0.400850 0.821591 0.616100 0.287500
-0.000000 62.775902 -0.355700 0.405349 0.400850 0.821591 0.533900 0.286800
-1.901400 62.898899 -1.262500 0.958885 0.139689 0.247034 0.616100 0.287500
-1.792100 61.563202 -0.648200 0.958885 0.139689 0.247034 0.603400 0.250800
-2.209500 61.230499 -1.515000 0.958885 0.139689 0.247034 0.636800 0.228100
-2.505800 61.413601 -3.333900 0.958885 0.139689 0.247034 0.700500 0.240200
-2.071800 58.080299 -1.837600 0.982605 0.010378 0.185418 0.632000 0.089900
-2.361600 58.652599 -3.405400 0.982605 0.010378 0.185418 0.691600 0.111600
-2.043500 58.694401 -1.722000 0.982605 0.010378 0.185418 0.633000 0.119000
-2.361600 58.652599 -3.405400 0.835615 -0.547438 -0.045374 0.691600 0.111600
-2.071800 58.080299 -1.837600 0.835615 -0.547438 -0.045374 0.632000 0.089900
-1.480400 57.287800 -3.167400 0.835615 -0.547438 -0.045374 0.679600 0.054000
-2.361600 58.652599 -3.405400 0.962379 -0.178153 0.205154 0.691600 0.111600
-2.484800 60.667999 -2.078300 0.962379 -0.178153 0.205154 0.658100 0.193000
-2.225300 60.301201 -1.334400 0.962379 -0.178153 0.205154 0.633200 0.187400
-2.043500 58.694401 -1.722000 0.962379 -0.178153 0.205154 0.633000 0.119000
-0.596000 60.268700 -0.255900 0.569338 0.180881 0.801958 0.565100 0.185300
-0.605400 59.453602 0.006800 0.569338 0.180881 0.801958 0.558900 0.156900
-0.793500 58.611801 -0.022400 0.569338 0.180881 0.801958 0.561500 0.129800
-2.225300 60.301201 -1.334400 0.569338 0.180881 0.801958 0.633200 0.187400
-0.793500 58.611801 -0.022400 0.424783 -0.113068 0.898207 0.561500 0.129800
-0.000000 58.735298 0.237300 0.424783 -0.113068 0.898207 0.533800 0.134400
-0.000000 57.320400 0.190300 0.424783 -0.113068 0.898207 0.533800 0.095300
-0.860300 57.339199 -0.345300 0.424783 -0.113068 0.898207 0.560600 0.087800
-2.361600 58.652599 -3.405400 0.801295 -0.555920 -0.221086 0.691600 0.111600
-1.480400 57.287800 -3.167400 0.801295 -0.555920 -0.221086 0.679600 0.054000
-1.507500 57.978802 -4.806700 0.801295 -0.555920 -0.221086 0.740400 0.071600
-1.480400 57.287800 -3.167400 0.605736 -0.042761 0.794516 0.293800 0.962800
-0.509500 56.862801 -2.081200 0.605736 -0.042761 0.794516 0.308000 0.953500
-0.000000 54.522099 -2.187600 0.605736 -0.042761 0.794516 0.310700 0.919600
-1.435700 55.057400 -2.884500 0.605736 -0.042761 0.794516 0.286000 0.931400
-1.435700 55.057400 -2.884500 0.962522 0.132164 0.236820 0.286000 0.931400
-2.321200 55.471001 -5.570800 0.962522 0.132164 0.236820 0.259700 0.968000
-1.507500 57.978802 -4.806700 0.962522 0.132164 0.236820 0.270100 0.982500
-1.480400 57.287800 -3.167400 0.962522 0.132164 0.236820 0.293800 0.962800
-5.117200 15.490400 -9.679700 -0.146405 -0.402228 -0.903758 0.917300 0.220800
-1.456400 14.610600 -8.695100 -0.146405 -0.402228 -0.903758 0.949700 0.207500
-0.134100 16.169500 -9.174700 -0.146405 -0.402228 -0.903758 0.969900 0.225300
-0.134100 16.169500 -9.174700 -0.868940 -0.488451 0.079739 0.732600 0.207100
-1.239800 14.644800 -6.465300 -0.868940 -0.488451 0.079739 0.774100 0.204900
-1.716700 14.450400 -2.459200 -0.868940 -0.488451 0.079739 0.808600 0.236100
-5.308800 13.910900 -3.738700 0.254739 -0.396087 0.882170 0.855000 0.218100
-6.069200 14.643000 -3.762300 0.254739 -0.396087 0.882170 0.859400 0.227800
-1.716700 14.450400 -2.459200 0.254739 -0.396087 0.882170 0.808600 0.236100
-1.766900 13.754900 -2.918700 0.254739 -0.396087 0.882170 0.809900 0.215800
-4.620900 14.945700 -8.516100 0.580484 -0.782092 -0.226651 0.914400 0.215300
-5.117200 15.490400 -9.679700 0.580484 -0.782092 -0.226651 0.917300 0.220800
-6.069200 14.643000 -3.762300 0.580484 -0.782092 -0.226651 0.859400 0.227800
-5.308800 13.910900 -3.738700 0.580484 -0.782092 -0.226651 0.855000 0.218100
-1.957400 20.620800 -1.211500 -0.981620 0.066989 0.178702 0.804700 0.286100
-2.189200 21.987900 -1.483700 -0.981620 0.066989 0.178702 0.804500 0.301600
-0.835600 22.853901 -8.210700 -0.981620 0.066989 0.178702 0.728900 0.301600
-0.899900 21.410400 -8.349400 -0.981620 0.066989 0.178702 0.726500 0.282100
-7.174300 32.815300 -5.167300 0.882089 0.156872 -0.444196 0.893300 0.414200
-4.970000 33.082802 -8.871900 0.882089 0.156872 -0.444196 0.938900 0.409500
-5.283200 35.952900 -7.814600 0.882089 0.156872 -0.444196 0.933900 0.441300
-6.542300 35.480598 -4.902800 0.882089 0.156872 -0.444196 0.897200 0.442800
-5.598500 31.822901 -1.404300 0.892181 0.170029 0.418452 0.847900 0.413200
-7.174300 32.815300 -5.167300 0.892181 0.170029 0.418452 0.893300 0.414200
-6.542300 35.480598 -4.902800 0.892181 0.170029 0.418452 0.897200 0.442800
-4.685700 36.664101 -1.616400 0.472747 0.127337 0.871949 0.239300 0.661600
-3.798500 31.552500 -0.388900 0.472747 0.127337 0.871949 0.257800 0.582200
-5.598500 31.822901 -1.404300 0.472747 0.127337 0.871949 0.231700 0.582200
-2.225300 60.301201 -1.334400 0.926529 0.086891 0.366052 0.633200 0.187400
-2.484800 60.667999 -2.078300 0.926529 0.086891 0.366052 0.658100 0.193000
-2.209500 61.230499 -1.515000 0.926529 0.086891 0.366052 0.636800 0.228100
-8.927200 49.128502 -4.128200 0.174303 -0.164506 0.970853 0.409800 0.916400
-9.508400 52.403099 -3.672700 0.174303 -0.164506 0.970853 0.469900 0.916400
-8.184300 53.108700 -3.320400 0.174303 -0.164506 0.970853 0.469900 0.942000
-7.813100 49.342701 -3.886900 0.174303 -0.164506 0.970853 0.407700 0.942000
-8.184300 53.108700 -3.320400 0.526523 0.826719 0.198265 0.469900 0.942000
-9.508400 52.403099 -3.672700 0.526523 0.826719 0.198265 0.469900 0.916400
-9.827700 52.989700 -7.188500 0.526523 0.826719 0.198265 0.526400 0.916400
-8.747800 53.770199 -7.353300 0.526523 0.826719 0.198265 0.528600 0.942000
-8.747800 53.770199 -7.353300 0.154881 -0.035505 -0.987295 0.528600 0.942000
-6.775800 50.206501 -7.534500 0.154881 -0.035505 -0.987295 0.590800 0.942000
-7.252500 54.524502 -7.615000 0.154881 -0.035505 -0.987295 0.533200 0.977800
-8.927200 49.128502 -4.128200 -0.001669 -0.169906 0.985459 0.409800 0.916400
-14.977100 45.689201 -4.821000 -0.001669 -0.169906 0.985459 0.400900 0.803100
-15.636800 49.715099 -4.015700 -0.001669 -0.169906 0.985459 0.469900 0.803100
-9.508400 52.403099 -3.672700 -0.001669 -0.169906 0.985459 0.469900 0.916400
-1.435700 55.057400 -2.884500 0.215818 0.814400 0.538680 0.286000 0.931400
-3.773800 51.093601 -1.034300 0.215818 0.814400 0.538680 0.256800 0.864400
-6.624100 53.529800 -2.653700 0.215818 0.814400 0.538680 0.210400 0.900400
-7.252500 54.524502 -7.615000 0.215818 0.814400 0.538680 0.180600 0.964800
-2.321200 55.471001 -5.570800 0.276118 0.932071 0.234526 0.259700 0.968000
-1.435700 55.057400 -2.884500 0.276118 0.932071 0.234526 0.286000 0.931400
-7.252500 54.524502 -7.615000 0.276118 0.932071 0.234526 0.180600 0.964800
-2.209500 61.230499 -1.515000 0.942806 0.279456 0.181716 0.636800 0.228100
-2.484800 60.667999 -2.078300 0.942806 0.279456 0.181716 0.658100 0.193000
-2.505800 61.413601 -3.333900 0.942806 0.279456 0.181716 0.704900 0.212700
-2.484800 60.667999 -2.078300 0.998559 -0.051788 -0.014052 0.658100 0.193000
-2.361600 58.652599 -3.405400 0.998559 -0.051788 -0.014052 0.691600 0.111600
-2.505800 61.413601 -3.333900 0.998559 -0.051788 -0.014052 0.704900 0.212700
-2.209500 61.230499 -1.515000 0.107977 -0.909631 0.401138 0.636800 0.228100
-1.792100 61.563202 -0.648200 0.107977 -0.909631 0.401138 0.603400 0.250800
-1.340700 61.343498 -1.024900 0.107977 -0.909631 0.401138 0.599900 0.231700
-3.061600 3.537800 -3.461700 -0.234488 0.898953 0.369997 0.290200 0.071700
-1.553600 3.059500 -4.173500 -0.234488 0.898953 0.369997 0.275500 0.071900
-1.568700 1.981700 -0.627100 -0.234488 0.898953 0.369997 0.274000 0.039600
-3.735600 1.816900 0.228400 -0.234488 0.898953 0.369997 0.290200 0.030700
-0.626000 0.031700 -8.336200 -0.992053 0.072189 0.103052 0.238500 0.103000
-1.825200 -0.024100 0.601200 -0.992053 0.072189 0.103052 0.266200 0.023600
-1.568700 1.981700 -0.627100 -0.992053 0.072189 0.103052 0.274000 0.039600
-1.553600 3.059500 -4.173500 -0.992053 0.072189 0.103052 0.275500 0.071900
-1.825200 -0.024100 0.601200 0.002195 -0.999985 -0.005027 0.783900 0.050100
-0.626000 0.031700 -8.336200 0.002195 -0.999985 -0.005027 0.777900 0.139800
-1.712600 0.024900 -9.195700 0.002195 -0.999985 -0.005027 0.765100 0.147100
-3.769300 -0.009000 1.132900 0.002195 -0.999985 -0.005027 0.765800 0.040900
-1.712600 0.024900 -9.195700 -0.920325 0.042849 -0.388801 0.925400 0.031900
-0.626000 0.031700 -8.336200 -0.920325 0.042849 -0.388801 0.938600 0.031200
-1.239800 14.644800 -6.465300 -0.920325 0.042849 -0.388801 0.974400 0.175600
-1.456400 14.610600 -8.695100 -0.920325 0.042849 -0.388801 0.943400 0.175600
-1.568700 1.981700 -0.627100 -0.270273 0.452545 0.849798 0.274000 0.039600
-1.825200 -0.024100 0.601200 -0.270273 0.452545 0.849798 0.266200 0.023600
-3.769300 -0.009000 1.132900 -0.270273 0.452545 0.849798 0.289700 0.012400
-3.735600 1.816900 0.228400 -0.270273 0.452545 0.849798 0.290200 0.030700
-4.089400 2.633000 -5.031300 0.957442 -0.073711 -0.279054 0.310400 0.073900
-5.390300 1.568200 -1.670300 0.957442 -0.073711 -0.279054 0.308400 0.040400
-5.176800 -0.025000 -0.598300 0.957442 -0.073711 -0.279054 0.313500 0.023800
-3.252600 0.001600 -8.591000 0.957442 -0.073711 -0.279054 0.345300 0.097200
-3.769300 -0.009000 1.132900 0.738109 0.308147 0.600201 0.289700 0.012400
-5.176800 -0.025000 -0.598300 0.738109 0.308147 0.600201 0.313500 0.023800
-5.390300 1.568200 -1.670300 0.738109 0.308147 0.600201 0.308400 0.040400
-3.735600 1.816900 0.228400 0.738109 0.308147 0.600201 0.290200 0.030700
-5.390300 1.568200 -1.670300 0.560649 0.811720 0.163660 0.308400 0.040400
-4.089400 2.633000 -5.031300 0.560649 0.811720 0.163660 0.310400 0.073900
-3.061600 3.537800 -3.461700 0.560649 0.811720 0.163660 0.290200 0.071700
-3.735600 1.816900 0.228400 0.560649 0.811720 0.163660 0.290200 0.030700
-3.061600 3.537800 -3.461700 0.452521 -0.074303 0.888653 0.856300 0.067800
-4.089400 2.633000 -5.031300 0.452521 -0.074303 0.888653 0.873900 0.060000
-5.308800 13.910900 -3.738700 0.452521 -0.074303 0.888653 0.859000 0.175600
-1.766900 13.754900 -2.918700 0.452521 -0.074303 0.888653 0.824200 0.175600
-5.117200 15.490400 -9.679700 0.118623 -0.917754 -0.379021 0.917300 0.220800
-4.620900 14.945700 -8.516100 0.118623 -0.917754 -0.379021 0.914400 0.215300
-1.456400 14.610600 -8.695100 0.118623 -0.917754 -0.379021 0.949700 0.207500
-1.456400 14.610600 -8.695100 -0.751462 -0.656769 -0.062923 0.746600 0.183800
-1.239800 14.644800 -6.465300 -0.751462 -0.656769 -0.062923 0.774100 0.204900
-0.134100 16.169500 -9.174700 -0.751462 -0.656769 -0.062923 0.732600 0.207100
-5.426000 21.341299 -8.132600 0.959663 0.028025 -0.279753 0.914200 0.282100
-5.317800 22.936800 -8.016200 0.959663 0.028025 -0.279753 0.916400 0.301600
-6.824000 22.193899 -3.251500 0.959663 0.028025 -0.279753 0.860400 0.301600
-6.827700 20.858999 -3.044800 0.959663 0.028025 -0.279753 0.858900 0.286100
-0.845100 29.891001 -9.498900 0.127296 -0.127838 -0.983592 0.978500 0.369500
-5.595300 29.761600 -8.492500 0.127296 -0.127838 -0.983592 0.927500 0.375900
-5.317800 22.936800 -8.016200 0.127296 -0.127838 -0.983592 0.916400 0.301600
-0.835600 22.853901 -8.210700 0.127296 -0.127838 -0.983592 0.964300 0.301600
-1.957400 20.620800 -1.211500 0.345482 0.135420 0.928603 0.804700 0.286100
-6.827700 20.858999 -3.044800 0.345482 0.135420 0.928603 0.858900 0.286100
-6.824000 22.193899 -3.251500 0.345482 0.135420 0.928603 0.860400 0.301600
-2.189200 21.987900 -1.483700 0.345482 0.135420 0.928603 0.804500 0.301600
-0.605400 59.453602 0.006800 0.276378 -0.886938 0.370075 0.558900 0.156900
-0.226300 59.631802 0.717000 0.276378 -0.886938 0.370075 0.537800 0.167300
-0.000000 59.375900 0.272700 0.276378 -0.886938 0.370075 0.533800 0.153800
-21.936399 43.055199 -3.733600 0.245050 -0.199318 0.948801 0.412700 0.674700
-23.265499 44.290199 -3.614200 0.245050 -0.199318 0.948801 0.431800 0.655600
-23.323000 46.228001 -3.425200 0.245050 -0.199318 0.948801 0.469900 0.655600
-22.348700 46.932201 -2.822400 0.245050 -0.199318 0.948801 0.469900 0.674700
-22.105101 44.119598 -7.074000 0.680722 -0.210597 -0.701617 0.583100 0.674700
-23.337700 47.268200 -6.945000 0.680722 -0.210597 -0.701617 0.530800 0.674700
-23.881300 46.267799 -5.995500 0.680722 -0.210597 -0.701617 0.521800 0.655600
-23.273100 44.479099 -6.170500 0.680722 -0.210597 -0.701617 0.556600 0.655600
-22.348700 46.932201 -2.822400 0.710630 0.673907 0.202126 0.469900 0.674700
-23.323000 46.228001 -3.425200 0.710630 0.673907 0.202126 0.469900 0.655600
-23.881300 46.267799 -5.995500 0.710630 0.673907 0.202126 0.521800 0.655600
-23.337700 47.268200 -6.945000 0.710630 0.673907 0.202126 0.530800 0.674700
-21.936399 43.055199 -3.733600 0.575702 -0.803125 -0.153486 0.412700 0.674700
-22.105101 44.119598 -7.074000 0.575702 -0.803125 -0.153486 0.362600 0.674700
-23.273100 44.479099 -6.170500 0.575702 -0.803125 -0.153486 0.386800 0.655600
-23.265499 44.290199 -3.614200 0.575702 -0.803125 -0.153486 0.431800 0.655600
-23.323000 46.228001 -3.425200 -0.234519 0.052147 0.970712 0.469900 0.655600
-23.265499 44.290199 -3.614200 -0.234519 0.052147 0.970712 0.431800 0.655600
-24.446100 44.099098 -3.039500 -0.234519 0.052147 0.970712 0.444100 0.624200
-24.935400 45.742901 -3.288800 -0.234519 0.052147 0.970712 0.469900 0.624200
-23.273100 44.479099 -6.170500 0.051663 0.047611 -0.997529 0.556600 0.655600
-23.881300 46.267799 -5.995500 0.051663 0.047611 -0.997529 0.521800 0.655600
-25.982700 45.641201 -5.974700 0.051663 0.047611 -0.997529 0.517100 0.624200
-25.718901 44.407902 -5.989100 0.051663 0.047611 -0.997529 0.533000 0.624200
-23.881300 46.267799 -5.995500 0.283035 0.956157 0.075198 0.521800 0.655600
-23.323000 46.228001 -3.425200 0.283035 0.956157 0.075198 0.469900 0.655600
-24.935400 45.742901 -3.288800 0.283035 0.956157 0.075198 0.469900 0.624200
-25.982700 45.641201 -5.974700 0.283035 0.956157 0.075198 0.517100 0.624200
-23.265499 44.290199 -3.614200 -0.050680 -0.993534 -0.101596 0.431800 0.655600
-23.273100 44.479099 -6.170500 -0.050680 -0.993534 -0.101596 0.386800 0.655600
-25.718901 44.407902 -5.989100 -0.050680 -0.993534 -0.101596 0.398000 0.624200
-24.446100 44.099098 -3.039500 -0.050680 -0.993534 -0.101596 0.444100 0.624200
-3.798500 31.552500 -0.388900 0.303080 0.047081 0.951802 0.257800 0.582200
-4.685700 36.664101 -1.616400 0.303080 0.047081 0.951802 0.239300 0.661600
-0.000000 37.009800 0.550700 0.303080 0.047081 0.951802 0.310700 0.661600
-0.000000 31.552500 0.128500 0.303080 0.047081 0.951802 0.310700 0.582200
-27.058001 43.733101 -1.471100 0.612973 -0.035197 0.789319 0.783900 0.527900
-26.775499 43.007000 -1.492900 0.612973 -0.035197 0.789319 0.799700 0.523000
-27.637899 42.321201 -1.984400 0.612973 -0.035197 0.789319 0.780200 0.502700
-28.100901 44.177299 -2.470000 0.612973 -0.035197 0.789319 0.756100 0.537200
-27.102699 45.320202 -5.735100 0.288380 -0.175341 -0.941325 0.706300 0.587600
-26.246300 42.901402 -5.383600 0.288380 -0.175341 -0.941325 0.663100 0.553800
-25.718901 44.407902 -5.989100 0.288380 -0.175341 -0.941325 0.674700 0.592000
-25.982700 45.641201 -5.974700 0.288380 -0.175341 -0.941325 0.701400 0.609900
-24.935400 45.742901 -3.288800 0.215944 0.976143 0.022647 0.774000 0.616500
-26.753901 45.398300 -2.858600 0.215944 0.976143 0.022647 0.766000 0.574200
-27.102699 45.320202 -5.735100 0.215944 0.976143 0.022647 0.706300 0.587600
-25.982700 45.641201 -5.974700 0.215944 0.976143 0.022647 0.701400 0.609900
-24.446100 44.099098 -3.039500 -0.806467 -0.440747 -0.394147 0.815000 0.599300
-25.718901 44.407902 -5.989100 -0.806467 -0.440747 -0.394147 0.885900 0.607200
-26.246300 42.901402 -5.383600 -0.806467 -0.440747 -0.394147 0.880100 0.569900
-28.380600 42.330502 -3.056600 0.840529 -0.044209 0.539960 0.741600 0.498200
-28.697901 44.238201 -3.477500 0.840529 -0.044209 0.539960 0.737900 0.538900
-28.100901 44.177299 -2.470000 0.840529 -0.044209 0.539960 0.756100 0.537200
-27.637899 42.321201 -1.984400 0.840529 -0.044209 0.539960 0.780200 0.502700
-28.380600 42.330502 -3.056600 0.979149 -0.175223 -0.102788 0.741600 0.498200
-28.292801 42.543098 -4.446800 0.979149 -0.175223 -0.102788 0.704200 0.514300
-28.543800 44.178001 -4.651400 0.979149 -0.175223 -0.102788 0.718600 0.545700
-28.697901 44.238201 -3.477500 0.979149 -0.175223 -0.102788 0.737900 0.538900
-26.753901 45.398300 -2.858600 0.560189 0.737837 0.376544 0.766000 0.574200
-28.100901 44.177299 -2.470000 0.560189 0.737837 0.376544 0.756100 0.537200
-28.697901 44.238201 -3.477500 0.560189 0.737837 0.376544 0.737900 0.538900
-24.935400 45.742901 -3.288800 -0.484106 0.321222 0.813915 0.774000 0.616500
-24.446100 44.099098 -3.039500 -0.484106 0.321222 0.813915 0.815000 0.599300
-25.587200 43.557701 -2.038700 -0.484106 0.321222 0.813915 0.806300 0.556900
-26.117701 44.487900 -2.198700 -0.484106 0.321222 0.813915 0.788200 0.565100
-24.446100 44.099098 -3.039500 -0.765721 -0.642695 -0.024780 0.815000 0.599300
-26.246300 42.901402 -5.383600 -0.765721 -0.642695 -0.024780 0.880100 0.569900
-25.491899 42.827301 -2.370100 -0.765721 -0.642695 -0.024780 0.813300 0.554500
-25.587200 43.557701 -2.038700 -0.765721 -0.642695 -0.024780 0.806300 0.556900
-26.753901 45.398300 -2.858600 -0.068715 0.616533 0.784324 0.766000 0.574200
-24.935400 45.742901 -3.288800 -0.068715 0.616533 0.784324 0.774000 0.616500
-26.117701 44.487900 -2.198700 -0.068715 0.616533 0.784324 0.788200 0.565100
-0.000000 31.552500 0.128500 0.069913 -0.031462 0.997057 0.310700 0.582200
-0.000000 24.132099 -0.356700 0.069913 -0.031462 0.997057 0.310700 0.472800
-3.463700 23.872801 -0.356700 0.069913 -0.031462 0.997057 0.261200 0.472800
-3.798500 31.552500 -0.388900 0.069913 -0.031462 0.997057 0.257800 0.582200
-2.225300 60.301201 -1.334400 0.789816 -0.226827 0.569860 0.633200 0.187400
-0.793500 58.611801 -0.022400 0.789816 -0.226827 0.569860 0.561500 0.129800
-2.043500 58.694401 -1.722000 0.789816 -0.226827 0.569860 0.633000 0.119000
-0.793500 58.611801 -0.022400 0.800106 -0.097243 0.591924 0.561500 0.129800
-0.860300 57.339199 -0.345300 0.800106 -0.097243 0.591924 0.560600 0.087800
-2.071800 58.080299 -1.837600 0.800106 -0.097243 0.591924 0.632000 0.089900
-2.043500 58.694401 -1.722000 0.800106 -0.097243 0.591924 0.633000 0.119000
-2.071800 58.080299 -1.837600 0.594038 -0.791272 0.144939 0.632000 0.089900
-0.860300 57.339199 -0.345300 0.594038 -0.791272 0.144939 0.560600 0.087800
-0.509500 56.862801 -2.081200 0.594038 -0.791272 0.144939 0.570500 0.026600
-1.480400 57.287800 -3.167400 0.594038 -0.791272 0.144939 0.631900 0.022800
-0.179900 61.274700 0.058500 0.090663 0.188705 0.977840 0.542100 0.223900
-0.785400 61.539799 -0.048800 0.090663 0.188705 0.977840 0.562200 0.247600
-0.000000 61.912998 -0.048000 0.090663 0.188705 0.977840 0.533800 0.254400
-15.884600 46.520500 -7.855800 0.098387 0.080586 -0.991880 0.590800 0.782100
-14.885000 46.974701 -7.946000 0.098387 0.080586 -0.991880 0.590800 0.803100
-16.136200 50.023998 -7.546200 0.098387 0.080586 -0.991880 0.529500 0.803100
-17.208200 49.477699 -7.512200 0.098387 0.080586 -0.991880 0.531700 0.782100
-15.636800 49.715099 -4.015700 0.436830 0.889212 0.135946 0.469900 0.803100
-16.810101 49.139900 -3.928800 0.436830 0.889212 0.135946 0.469900 0.782100
-17.208200 49.477699 -7.512200 0.436830 0.889212 0.135946 0.531700 0.782100
-16.136200 50.023998 -7.546200 0.436830 0.889212 0.135946 0.529500 0.803100
-16.192200 44.960400 -4.877100 -0.435886 -0.826304 -0.356686 0.398600 0.782100
-14.977100 45.689201 -4.821000 -0.435886 -0.826304 -0.356686 0.400900 0.803100
-14.885000 46.974701 -7.946000 -0.435886 -0.826304 -0.356686 0.347800 0.803100
-15.884600 46.520500 -7.855800 -0.435886 -0.826304 -0.356686 0.347800 0.782100
-16.810101 49.139900 -3.928800 -0.116417 -0.190205 0.974818 0.469900 0.782100
-15.636800 49.715099 -4.015700 -0.116417 -0.190205 0.974818 0.469900 0.803100
-14.977100 45.689201 -4.821000 -0.116417 -0.190205 0.974818 0.400900 0.803100
-16.192200 44.960400 -4.877100 -0.116417 -0.190205 0.974818 0.398600 0.782100
-13.779500 47.417198 -7.715300 0.030432 0.115440 -0.992848 0.590800 0.828100
-8.756500 49.321098 -7.632900 0.030432 0.115440 -0.992848 0.590800 0.916400
-9.827700 52.989700 -7.188500 0.030432 0.115440 -0.992848 0.526400 0.916400
-14.989100 50.565300 -7.297200 0.030432 0.115440 -0.992848 0.526200 0.828100
-15.636800 49.715099 -4.015700 0.447311 0.883265 0.140554 0.469900 0.803100
-16.136200 50.023998 -7.546200 0.447311 0.883265 0.140554 0.529500 0.803100
-14.989100 50.565300 -7.297200 0.447311 0.883265 0.140554 0.526200 0.828100
-13.779500 47.417198 -7.715300 -0.409629 -0.847844 -0.336696 0.347800 0.823100
-14.885000 46.974701 -7.946000 -0.409629 -0.847844 -0.336696 0.347800 0.803100
-14.977100 45.689201 -4.821000 -0.409629 -0.847844 -0.336696 0.400900 0.803100
-1.239800 14.644800 -6.465300 -0.983473 -0.143727 0.110102 0.774100 0.204900
-1.766900 13.754900 -2.918700 -0.983473 -0.143727 0.110102 0.809900 0.215800
-1.716700 14.450400 -2.459200 -0.983473 -0.143727 0.110102 0.808600 0.236100
-26.117701 44.487900 -2.198700 -0.374471 0.258120 0.890587 0.788200 0.565100
-25.587200 43.557701 -2.038700 -0.374471 0.258120 0.890587 0.806300 0.556900
-26.775499 43.007000 -1.492900 -0.374471 0.258120 0.890587 0.799700 0.523000
-27.058001 43.733101 -1.471100 -0.374471 0.258120 0.890587 0.783900 0.527900
-25.587200 43.557701 -2.038700 -0.386633 -0.610879 0.690899 0.806300 0.556900
-25.491899 42.827301 -2.370100 -0.386633 -0.610879 0.690899 0.813300 0.554500
-27.637899 42.321201 -1.984400 -0.386633 -0.610879 0.690899 0.816200 0.507300
-26.775499 43.007000 -1.492900 -0.386633 -0.610879 0.690899 0.799700 0.523000
-26.117701 44.487900 -2.198700 0.202601 0.798645 0.566673 0.788200 0.565100
-27.058001 43.733101 -1.471100 0.202601 0.798645 0.566673 0.783900 0.527900
-28.100901 44.177299 -2.470000 0.202601 0.798645 0.566673 0.756100 0.537200
-8.184300 53.108700 -3.320400 0.347207 -0.172872 0.921717 0.469900 0.942000
-6.624100 53.529800 -2.653700 0.347207 -0.172872 0.921717 0.469900 0.977800
-7.813100 49.342701 -3.886900 0.347207 -0.172872 0.921717 0.407700 0.942000
-8.747800 53.770199 -7.353300 0.055764 0.062731 -0.996471 0.528600 0.942000
-9.827700 52.989700 -7.188500 0.055764 0.062731 -0.996471 0.526400 0.916400
-8.756500 49.321098 -7.632900 0.055764 0.062731 -0.996471 0.590800 0.916400
-6.775800 50.206501 -7.534500 0.055764 0.062731 -0.996471 0.590800 0.942000
-28.543800 44.178001 -4.651400 0.562493 0.826801 -0.001192 0.718600 0.545700
-27.102699 45.320202 -5.735100 0.562493 0.826801 -0.001192 0.706300 0.587600
-26.753901 45.398300 -2.858600 0.562493 0.826801 -0.001192 0.766000 0.574200
-28.697901 44.238201 -3.477500 0.562493 0.826801 -0.001192 0.737900 0.538900
-26.246300 42.901402 -5.383600 -0.106461 -0.983873 -0.143736 0.880100 0.569900
-28.292801 42.543098 -4.446800 -0.106461 -0.983873 -0.143736 0.879400 0.523100
-28.380600 42.330502 -3.056600 -0.106461 -0.983873 -0.143736 0.853500 0.507000
-28.100901 44.177299 -2.470000 0.192584 0.484112 0.853550 0.756100 0.537200
-26.753901 45.398300 -2.858600 0.192584 0.484112 0.853550 0.766000 0.574200
-26.117701 44.487900 -2.198700 0.192584 0.484112 0.853550 0.788200 0.565100
-1.712600 0.024900 -9.195700 -0.013475 -0.999909 -0.000374 0.765100 0.147100
-3.252600 0.001600 -8.591000 -0.013475 -0.999909 -0.000374 0.751000 0.138000
-5.176800 -0.025000 -0.598300 -0.013475 -0.999909 -0.000374 0.748300 0.055100
-3.769300 -0.009000 1.132900 -0.013475 -0.999909 -0.000374 0.765800 0.040900
-0.000000 61.912998 -0.048000 0.158526 0.331625 0.929997 0.533800 0.254400
-0.785400 61.539799 -0.048800 0.158526 0.331625 0.929997 0.562200 0.247600
-0.000000 62.775902 -0.355700 0.158526 0.331625 0.929997 0.533900 0.286800
-0.340300 31.400700 -9.928000 -0.943868 -0.327610 -0.042246 0.694900 0.384200
-0.845100 29.891001 -9.498900 -0.943868 -0.327610 -0.042246 0.702700 0.368200
-0.425600 30.069099 -1.507500 -0.943868 -0.327610 -0.042246 0.785600 0.393300
-0.509500 56.862801 -2.081200 0.000000 -0.045410 0.998968 0.308000 0.953500
-0.509500 56.862801 -2.081200 0.098448 -0.971038 0.217700 0.570500 0.026600
-0.860300 57.339199 -0.345300 0.098448 -0.971038 0.217700 0.560600 0.087800
-0.000000 57.320400 0.190300 0.098448 -0.971038 0.217700 0.533800 0.095300
-0.000000 56.862801 -2.081200 0.098448 -0.971038 0.217700 0.533800 0.019000
-5.598500 31.822901 -1.404300 0.881264 0.021588 0.472131 0.847900 0.413200
-6.824000 22.193899 -3.251500 0.881264 0.021588 0.472131 0.860400 0.301600
-7.453900 29.910801 -4.780100 0.881264 0.021588 0.472131 0.884800 0.385400
-6.824000 22.193899 -3.251500 0.921284 -0.108958 -0.373315 0.860400 0.301600
-5.317800 22.936800 -8.016200 0.921284 -0.108958 -0.373315 0.916400 0.301600
-5.595300 29.761600 -8.492500 0.921284 -0.108958 -0.373315 0.927500 0.375900
-7.453900 29.910801 -4.780100 0.921284 -0.108958 -0.373315 0.884800 0.385400
-3.798500 31.552500 -0.388900 0.401815 -0.146587 0.903912 0.824000 0.411400
-2.189200 21.987900 -1.483700 0.401815 -0.146587 0.903912 0.804500 0.301600
-6.824000 22.193899 -3.251500 0.401815 -0.146587 0.903912 0.860400 0.301600
-5.598500 31.822901 -1.404300 0.401815 -0.146587 0.903912 0.847900 0.413200
-0.340300 31.400700 -9.928000 0.230509 -0.107925 -0.967067 0.986800 0.385200
-4.970000 33.082802 -8.871900 0.230509 -0.107925 -0.967067 0.938900 0.409500
-5.595300 29.761600 -8.492500 0.230509 -0.107925 -0.967067 0.927500 0.375900
-0.845100 29.891001 -9.498900 0.230509 -0.107925 -0.967067 0.978500 0.369500
-0.835600 22.853901 -8.210700 -0.992236 -0.110106 0.057826 0.728900 0.301600
-2.189200 21.987900 -1.483700 -0.992236 -0.110106 0.057826 0.804500 0.301600
-0.425600 30.069099 -1.507500 -0.992236 -0.110106 0.057826 0.785600 0.393300
-0.845100 29.891001 -9.498900 -0.992236 -0.110106 0.057826 0.702700 0.368200
-2.162800 35.743500 -9.599900 0.324673 0.084802 -0.942017 0.972400 0.433600
-5.283200 35.952900 -7.814600 0.324673 0.084802 -0.942017 0.933900 0.441300
-4.970000 33.082802 -8.871900 0.324673 0.084802 -0.942017 0.938900 0.409500
-0.340300 31.400700 -9.928000 0.324673 0.084802 -0.942017 0.986800 0.385200
-5.283200 35.952900 -7.814600 0.889642 0.311183 -0.334218 0.142200 0.631800
-5.919200 37.619099 -4.570300 0.889642 0.311183 -0.334218 0.183400 0.661600
-6.542300 35.480598 -4.902800 0.889642 0.311183 -0.334218 0.182500 0.631800
-5.919200 37.619099 -4.570300 0.882631 0.186784 0.431364 0.183400 0.661600
-4.685700 36.664101 -1.616400 0.882631 0.186784 0.431364 0.239300 0.661600
-5.598500 31.822901 -1.404300 0.882631 0.186784 0.431364 0.231700 0.582200
-6.542300 35.480598 -4.902800 0.882631 0.186784 0.431364 0.182500 0.631800
-0.474100 61.294899 -0.607800 0.490764 0.255871 0.832875 0.567800 0.227200
-0.596000 60.268700 -0.255900 0.490764 0.255871 0.832875 0.565100 0.185300
-2.225300 60.301201 -1.334400 0.490764 0.255871 0.832875 0.633200 0.187400
-1.340700 61.343498 -1.024900 0.490764 0.255871 0.832875 0.599900 0.231700
-1.340700 61.343498 -1.024900 0.199083 -0.932669 0.300824 0.599900 0.231700
-1.792100 61.563202 -0.648200 0.199083 -0.932669 0.300824 0.603400 0.250800
-0.785400 61.539799 -0.048800 0.199083 -0.932669 0.300824 0.562200 0.247600
-0.474100 61.294899 -0.607800 0.199083 -0.932669 0.300824 0.567800 0.227200
-0.000000 45.235802 -8.516300 0.205813 0.023108 -0.978318 0.061600 0.762900
-5.495700 46.043098 -6.732400 0.205813 0.023108 -0.978318 0.140100 0.788400
-2.827600 38.171799 -8.088300 0.205813 0.023108 -0.978318 0.114700 0.661600
-0.000000 38.221600 -8.073300 0.205813 0.023108 -0.978318 0.073400 0.661600
-0.425600 30.069099 -1.507500 -0.290133 -0.060504 0.955072 0.785600 0.393300
-2.189200 21.987900 -1.483700 -0.290133 -0.060504 0.955072 0.804500 0.301600
-3.798500 31.552500 -0.388900 -0.290133 -0.060504 0.955072 0.824000 0.411400
-0.000000 31.547001 -9.939100 -0.348901 -0.925923 -0.144686 0.694200 0.388200
-0.340300 31.400700 -9.928000 -0.348901 -0.925923 -0.144686 0.694900 0.384200
-0.425600 30.069099 -1.507500 -0.348901 -0.925923 -0.144686 0.785600 0.393300
-0.000000 30.215401 -1.522000 -0.348901 -0.925923 -0.144686 0.785000 0.398100
-21.061199 44.183601 -7.611200 0.028361 0.039319 -0.998824 0.590800 0.698800
-15.884600 46.520500 -7.855800 0.028361 0.039319 -0.998824 0.590800 0.782100
-17.208200 49.477699 -7.512200 0.028361 0.039319 -0.998824 0.531700 0.782100
-22.585199 48.327702 -7.594400 0.028361 0.039319 -0.998824 0.533600 0.698800
-22.348700 46.932201 -2.822400 0.723103 0.652497 0.226650 0.469900 0.674700
-23.337700 47.268200 -6.945000 0.723103 0.652497 0.226650 0.530800 0.674700
-22.585199 48.327702 -7.594400 0.723103 0.652497 0.226650 0.533600 0.698800
-21.061199 44.183601 -7.611200 0.095048 -0.949863 -0.297868 0.347800 0.693400
-22.105101 44.119598 -7.074000 0.095048 -0.949863 -0.297868 0.362600 0.674700
-21.936399 43.055199 -3.733600 0.095048 -0.949863 -0.297868 0.412700 0.674700
-0.340300 31.400700 -9.928000 0.010374 0.075249 -0.997111 0.986800 0.385200
-0.000000 31.547001 -9.939100 0.010374 0.075249 -0.997111 0.990600 0.386300
-0.000000 35.795200 -9.599900 0.010374 0.075249 -0.997111 0.995500 0.431600
-2.162800 35.743500 -9.599900 0.010374 0.075249 -0.997111 0.972400 0.433600
-5.919200 37.619099 -4.570300 0.561685 0.544798 -0.622660 0.183400 0.661600
-5.283200 35.952900 -7.814600 0.561685 0.544798 -0.622660 0.142200 0.631800
-2.162800 35.743500 -9.599900 0.561685 0.544798 -0.622660 0.096700 0.631800
-2.827600 38.171799 -8.088300 0.561685 0.544798 -0.622660 0.114700 0.661600
-28.543800 44.178001 -4.651400 0.410462 -0.233070 -0.881589 0.718600 0.545700
-28.292801 42.543098 -4.446800 0.410462 -0.233070 -0.881589 0.704200 0.514300
-26.246300 42.901402 -5.383600 0.410462 -0.233070 -0.881589 0.663100 0.553800
-27.102699 45.320202 -5.735100 0.410462 -0.233070 -0.881589 0.706300 0.587600
-25.491899 42.827301 -2.370100 -0.201709 -0.968181 -0.148119 0.813300 0.554500
-28.380600 42.330502 -3.056600 -0.201709 -0.968181 -0.148119 0.853500 0.507000
-27.637899 42.321201 -1.984400 -0.201709 -0.968181 -0.148119 0.816200 0.507300
-26.246300 42.901402 -5.383600 -0.185319 -0.980147 -0.070494 0.880100 0.569900
-28.380600 42.330502 -3.056600 -0.185319 -0.980147 -0.070494 0.853500 0.507000
-25.491899 42.827301 -2.370100 -0.185319 -0.980147 -0.070494 0.813300 0.554500
-2.162800 35.743500 -9.599900 0.008224 0.529675 -0.848161 0.096700 0.631800
-0.000000 35.795200 -9.599900 0.008224 0.529675 -0.848161 0.068300 0.631800
-0.000000 38.221600 -8.073300 0.008224 0.529675 -0.848161 0.073400 0.661600
-2.827600 38.171799 -8.088300 0.008224 0.529675 -0.848161 0.114700 0.661600
-0.706900 62.538601 -0.289700 0.498102 0.211804 0.840853 0.409100 0.538600
-1.838200 62.255798 -0.802600 0.498102 0.211804 0.840853 0.430000 0.507000
-1.901400 63.532299 -1.247600 0.498102 0.211804 0.840853 0.451500 0.531400
-0.672300 63.485901 -0.421800 0.498102 0.211804 0.840853 0.426300 0.552700
-1.901400 63.532299 -1.247600 0.915374 0.111541 0.386845 0.451500 0.531400
-1.838200 62.255798 -0.802600 0.915374 0.111541 0.386845 0.430000 0.507000
-3.194200 60.597198 -3.460400 0.915374 0.111541 0.386845 0.492000 0.451400
-2.758700 63.532299 -3.348800 0.915374 0.111541 0.386845 0.499700 0.518700
-2.758700 63.532299 -3.348800 0.984906 0.142377 0.098436 0.499700 0.518700
-3.194200 60.597198 -3.460400 0.984906 0.142377 0.098436 0.492000 0.451400
-3.446000 60.597198 -5.980300 0.984906 0.142377 0.098436 0.552100 0.445900
-3.010600 63.532299 -5.868700 0.984906 0.142377 0.098436 0.554200 0.511800
-3.194200 60.597198 -3.460400 0.917633 0.222238 0.329485 0.492000 0.451400
-1.838200 62.255798 -0.802600 0.917633 0.222238 0.329485 0.430000 0.507000
-2.336800 60.597198 -1.072500 0.917633 0.222238 0.329485 0.434100 0.460700
-2.130500 53.628601 -1.359200 0.842435 0.033555 0.537753 0.416700 0.297200
-4.088800 54.879799 -3.460400 0.842435 0.033555 0.537753 0.486800 0.316000
-3.194200 60.597198 -3.460400 0.842435 0.033555 0.537753 0.492000 0.451400
-2.336800 60.597198 -1.072500 0.842435 0.033555 0.537753 0.434100 0.460700
-4.088800 54.879799 -3.460400 0.982155 0.156435 0.104398 0.486800 0.316000
-4.340700 55.234299 -6.210400 0.982155 0.156435 0.104398 0.542400 0.331500
-3.446000 60.597198 -5.980300 0.982155 0.156435 0.104398 0.552100 0.445900
-3.194200 60.597198 -3.460400 0.982155 0.156435 0.104398 0.492000 0.451400
-3.010600 63.532299 -5.868700 0.839145 0.204241 -0.504105 0.554200 0.511800
-3.446000 60.597198 -5.980300 0.839145 0.204241 -0.504105 0.552100 0.445900
-2.517200 60.597198 -7.879200 0.839145 0.204241 -0.504105 0.601000 0.450200
-1.932100 63.532299 -7.311200 0.839145 0.204241 -0.504105 0.591100 0.519300
-3.446000 60.597198 -5.980300 0.847590 0.127945 -0.514996 0.552100 0.445900
-4.340700 55.234299 -6.210400 0.847590 0.127945 -0.514996 0.542400 0.331500
-2.990300 54.496300 -8.246000 0.847590 0.127945 -0.514996 0.608400 0.297700
-2.517200 60.597198 -7.879200 0.847590 0.127945 -0.514996 0.601000 0.450200
-1.932100 63.532299 -7.311200 0.365116 0.222173 -0.904063 0.591100 0.519300
-2.517200 60.597198 -7.879200 0.365116 0.222173 -0.904063 0.601000 0.450200
-0.000000 60.597198 -8.812800 0.365116 0.222173 -0.904063 0.661800 0.464200
-0.000000 63.532299 -8.174500 0.365116 0.222173 -0.904063 0.634800 0.537700
-2.990300 54.496300 -8.246000 0.255106 0.035267 -0.966270 0.608400 0.297700
-0.000000 54.050800 -8.782700 0.255106 0.035267 -0.966270 0.682300 0.308600
-0.000000 60.597198 -8.812800 0.255106 0.035267 -0.966270 0.661800 0.464200
-2.517200 60.597198 -7.879200 0.255106 0.035267 -0.966270 0.601000 0.450200
-0.672300 63.485901 -0.421800 0.422112 0.618267 0.662999 0.426300 0.552700
-1.901400 63.532299 -1.247600 0.422112 0.618267 0.662999 0.451500 0.531400
-1.171400 65.057899 -2.205500 0.422112 0.618267 0.662999 0.482000 0.564300
-1.901400 63.532299 -1.247600 0.756752 0.608663 0.238446 0.451500 0.531400
-2.758700 63.532299 -3.348800 0.756752 0.608663 0.238446 0.499700 0.518700
-1.795600 65.057899 -4.806100 0.756752 0.608663 0.238446 0.538600 0.556700
-1.171400 65.057899 -2.205500 0.756752 0.608663 0.238446 0.482000 0.564300
-2.758700 63.532299 -3.348800 0.806293 0.585999 0.080601 0.499700 0.518700
-3.010600 63.532299 -5.868700 0.806293 0.585999 0.080601 0.554200 0.511800
-1.795600 65.057899 -4.806100 0.806293 0.585999 0.080601 0.538600 0.556700
-3.010600 63.532299 -5.868700 0.468822 0.765524 -0.440657 0.554200 0.511800
-1.932100 63.532299 -7.311200 0.468822 0.765524 -0.440657 0.591100 0.519300
-0.000000 65.057899 -6.421400 0.468822 0.765524 -0.440657 0.588900 0.582100
-1.795600 65.057899 -4.806100 0.468822 0.765524 -0.440657 0.538600 0.556700
-1.932100 63.532299 -7.311200 0.281463 0.723860 -0.629925 0.591100 0.519300
-0.000000 63.532299 -8.174500 0.281463 0.723860 -0.629925 0.634800 0.537700
-0.000000 65.057899 -6.421400 0.281463 0.723860 -0.629925 0.588900 0.582100
-1.171400 65.057899 -2.205500 0.296421 0.952404 0.071148 0.482000 0.564300
-1.795600 65.057899 -4.806100 0.296421 0.952404 0.071148 0.538600 0.556700
-0.000000 65.560898 -4.058400 0.296421 0.952404 0.071148 0.523700 0.603300
-1.795600 65.057899 -4.806100 0.184093 0.961370 -0.204641 0.538600 0.556700
-0.000000 65.057899 -6.421400 0.184093 0.961370 -0.204641 0.588900 0.582100
-0.000000 65.560898 -4.058400 0.184093 0.961370 -0.204641 0.523700 0.603300
-0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183 0.426300 0.552700
-1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183 0.482000 0.564300
--1.171400 65.057899 -2.205500 0.000000 0.750225 0.661183 0.466700 0.607600
--0.672300 63.485901 -0.421800 0.000000 0.750225 0.661183 0.416100 0.581700
-0.706900 62.538601 -0.289700 0.204667 0.142518 0.968401 0.409100 0.538600
-0.672300 63.485901 -0.421800 0.204667 0.142518 0.968401 0.426300 0.552700
-0.000000 62.538601 -0.140300 0.204667 0.142518 0.968401 0.398200 0.559100
-0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572 0.426300 0.552700
--0.672300 63.485901 -0.421800 -0.000000 0.284850 0.958572 0.416100 0.581700
-0.000000 62.538601 -0.140300 -0.000000 0.284850 0.958572 0.398200 0.559100
-2.130500 53.628601 -1.359200 -0.899990 0.017690 0.435552 0.416700 0.297200
-2.336800 60.597198 -1.072500 -0.899990 0.017690 0.435552 0.434100 0.460700
-1.393700 60.597198 -3.164700 -0.899990 0.017690 0.435552 0.380300 0.463400
-1.187300 53.628601 -3.164700 -0.899990 0.017690 0.435552 0.369000 0.300200
--0.706900 62.538601 -0.289700 -0.498102 0.211804 0.840853 0.409100 0.538600
--0.672300 63.485901 -0.421800 -0.498102 0.211804 0.840853 0.426300 0.552800
--1.901400 63.532299 -1.247600 -0.498102 0.211804 0.840853 0.451500 0.531500
--1.838200 62.255798 -0.802600 -0.498102 0.211804 0.840853 0.430000 0.507100
--1.901400 63.532299 -1.247600 -0.915374 0.111541 0.386845 0.451500 0.531500
--2.758700 63.532299 -3.348800 -0.915374 0.111541 0.386845 0.499700 0.518800
--3.194200 60.597198 -3.460400 -0.915374 0.111541 0.386845 0.492000 0.451500
--1.838200 62.255798 -0.802600 -0.915374 0.111541 0.386845 0.430000 0.507100
--2.758700 63.532299 -3.348800 -0.984906 0.142377 0.098436 0.499700 0.518800
--3.010600 63.532299 -5.868700 -0.984906 0.142377 0.098436 0.554200 0.511900
--3.446000 60.597198 -5.980300 -0.984906 0.142377 0.098436 0.552100 0.445900
--3.194200 60.597198 -3.460400 -0.984906 0.142377 0.098436 0.492000 0.451500
--3.194200 60.597198 -3.460400 -0.917633 0.222238 0.329485 0.492000 0.451500
--2.336800 60.597198 -1.072500 -0.917633 0.222238 0.329485 0.434000 0.460800
--1.838200 62.255798 -0.802600 -0.917633 0.222238 0.329485 0.430000 0.507100
--2.130500 53.628601 -1.359200 -0.842435 0.033555 0.537753 0.416600 0.297300
--2.336800 60.597198 -1.072500 -0.842435 0.033555 0.537753 0.434000 0.460800
--3.194200 60.597198 -3.460400 -0.842435 0.033555 0.537753 0.492000 0.451500
--4.088800 54.879799 -3.460400 -0.842435 0.033555 0.537753 0.486700 0.316100
--4.088800 54.879799 -3.460400 -0.982155 0.156435 0.104398 0.486700 0.316100
--3.194200 60.597198 -3.460400 -0.982155 0.156435 0.104398 0.492000 0.451500
--3.446000 60.597198 -5.980300 -0.982155 0.156435 0.104398 0.552100 0.445900
--4.340700 55.234299 -6.210400 -0.982155 0.156435 0.104398 0.542400 0.331500
--3.010600 63.532299 -5.868700 -0.839145 0.204241 -0.504105 0.554200 0.511900
--1.932100 63.532299 -7.311200 -0.839145 0.204241 -0.504105 0.591100 0.519300
--2.517200 60.597198 -7.879200 -0.839145 0.204241 -0.504105 0.601000 0.450300
--3.446000 60.597198 -5.980300 -0.839145 0.204241 -0.504105 0.552100 0.445900
--3.446000 60.597198 -5.980300 -0.847590 0.127945 -0.514996 0.552100 0.445900
--2.517200 60.597198 -7.879200 -0.847590 0.127945 -0.514996 0.601000 0.450300
--2.990300 54.496300 -8.246000 -0.847590 0.127945 -0.514996 0.608300 0.297700
--4.340700 55.234299 -6.210400 -0.847590 0.127945 -0.514996 0.542400 0.331500
--1.932100 63.532299 -7.311200 -0.365116 0.222173 -0.904063 0.591100 0.519300
-0.000000 63.532299 -8.174500 -0.365116 0.222173 -0.904063 0.634800 0.537700
-0.000000 60.597198 -8.812800 -0.365116 0.222173 -0.904063 0.661800 0.464200
--2.517200 60.597198 -7.879200 -0.365116 0.222173 -0.904063 0.601000 0.450300
--2.990300 54.496300 -8.246000 -0.255106 0.035267 -0.966270 0.608300 0.297700
--2.517200 60.597198 -7.879200 -0.255106 0.035267 -0.966270 0.601000 0.450300
-0.000000 60.597198 -8.812800 -0.255106 0.035267 -0.966270 0.661800 0.464200
-0.000000 54.050800 -8.782700 -0.255106 0.035267 -0.966270 0.682300 0.308600
--0.672300 63.485901 -0.421800 -0.422112 0.618267 0.662999 0.426300 0.552800
--1.171400 65.057899 -2.205500 -0.422112 0.618267 0.662999 0.482000 0.564400
--1.901400 63.532299 -1.247600 -0.422112 0.618267 0.662999 0.451500 0.531500
--1.901400 63.532299 -1.247600 -0.756752 0.608663 0.238446 0.451500 0.531500
--1.171400 65.057899 -2.205500 -0.756752 0.608663 0.238446 0.482000 0.564400
--1.795600 65.057899 -4.806100 -0.756752 0.608663 0.238446 0.538600 0.556700
--2.758700 63.532299 -3.348800 -0.756752 0.608663 0.238446 0.499700 0.518800
--2.758700 63.532299 -3.348800 -0.806293 0.585999 0.080601 0.499700 0.518800
--1.795600 65.057899 -4.806100 -0.806293 0.585999 0.080601 0.538600 0.556700
--3.010600 63.532299 -5.868700 -0.806293 0.585999 0.080601 0.554200 0.511900
--3.010600 63.532299 -5.868700 -0.468822 0.765524 -0.440657 0.554200 0.511900
--1.795600 65.057899 -4.806100 -0.468822 0.765524 -0.440657 0.538600 0.556700
-0.000000 65.057899 -6.421400 -0.468822 0.765524 -0.440657 0.589000 0.582100
--1.932100 63.532299 -7.311200 -0.468822 0.765524 -0.440657 0.591100 0.519300
--1.932100 63.532299 -7.311200 -0.281463 0.723860 -0.629925 0.591100 0.519300
-0.000000 65.057899 -6.421400 -0.281463 0.723860 -0.629925 0.589000 0.582100
-0.000000 63.532299 -8.174500 -0.281463 0.723860 -0.629925 0.634800 0.537700
--1.171400 65.057899 -2.205500 -0.296421 0.952404 0.071148 0.482000 0.564400
-0.000000 65.560898 -4.058400 -0.296421 0.952404 0.071148 0.523700 0.603400
--1.795600 65.057899 -4.806100 -0.296421 0.952404 0.071148 0.538600 0.556700
--1.795600 65.057899 -4.806100 -0.184093 0.961370 -0.204641 0.538600 0.556700
-0.000000 65.560898 -4.058400 -0.184093 0.961370 -0.204641 0.523700 0.603400
-0.000000 65.057899 -6.421400 -0.184093 0.961370 -0.204641 0.589000 0.582100
--1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984 0.466700 0.607600
-1.171400 65.057899 -2.205500 0.000000 0.965072 0.261984 0.482000 0.564300
-0.000000 65.560898 -4.058400 0.000000 0.965072 0.261984 0.523700 0.603300
--0.706900 62.538601 -0.289700 -0.204667 0.142518 0.968401 0.409100 0.538600
-0.000000 62.538601 -0.140300 -0.204667 0.142518 0.968401 0.398200 0.559200
--0.672300 63.485901 -0.421800 -0.204667 0.142518 0.968401 0.426300 0.552800
--2.130500 53.628601 -1.359200 0.899990 0.017690 0.435552 0.416600 0.297300
--1.187300 53.628601 -3.164700 0.899990 0.017690 0.435552 0.369000 0.300300
--1.393700 60.597198 -3.164700 0.899990 0.017690 0.435552 0.380200 0.463500
--2.336800 60.597198 -1.072500 0.899990 0.017690 0.435552 0.434000 0.460800
-8.704300 24.905701 -6.036500 0.233777 0.158187 -0.959336 0.967100 0.466200
-7.984800 25.127701 -6.177400 0.233777 0.158187 -0.959336 0.966400 0.464600
-7.649900 27.558001 -5.856100 0.233777 0.158187 -0.959336 0.993500 0.506600
-8.503900 27.435900 -5.670300 0.233777 0.158187 -0.959336 0.976600 0.507100
-6.463600 36.223400 -3.704900 0.910800 0.108730 0.398273 0.962000 0.710700
-5.778000 35.994701 -1.773100 0.910800 0.108730 0.398273 0.922200 0.717000
-7.451900 27.210300 -3.504400 0.910800 0.108730 0.398273 0.930000 0.516400
-8.503900 27.435900 -5.670300 0.910800 0.108730 0.398273 0.976600 0.507100
-5.115000 35.782600 -2.051700 -0.272059 -0.232411 0.933793 0.916000 0.725700
-6.597900 27.332300 -3.690200 -0.272059 -0.232411 0.933793 0.913000 0.515500
-7.451900 27.210300 -3.504400 -0.272059 -0.232411 0.933793 0.930000 0.516400
-5.778000 35.994701 -1.773100 -0.272059 -0.232411 0.933793 0.922200 0.717000
-5.743400 36.019600 -3.995900 0.266707 0.266447 -0.926215 0.971100 0.718900
-6.463600 36.223400 -3.704900 0.266707 0.266447 -0.926215 0.962000 0.710700
-8.503900 27.435900 -5.670300 0.266707 0.266447 -0.926215 0.976600 0.507100
-7.649900 27.558001 -5.856100 0.266707 0.266447 -0.926215 0.993500 0.506600
-7.451900 27.210300 -3.504400 -0.285900 -0.782712 0.552832 0.930000 0.516400
-6.597900 27.332300 -3.690200 -0.285900 -0.782712 0.552832 0.913000 0.515500
-7.984800 25.127701 -6.177400 -0.285900 -0.782712 0.552832 0.966400 0.464600
-8.704300 24.905701 -6.036500 -0.285900 -0.782712 0.552832 0.967100 0.466200
-7.451900 27.210300 -3.504400 0.899158 0.007889 0.437552 0.930000 0.516400
-8.704300 24.905701 -6.036500 0.899158 0.007889 0.437552 0.967100 0.466200
-8.503900 27.435900 -5.670300 0.899158 0.007889 0.437552 0.976600 0.507100
-6.463600 36.223400 -3.704900 -0.293676 0.955783 0.015277 0.962000 0.710700
-5.743400 36.019600 -3.995900 -0.293676 0.955783 0.015277 0.971100 0.718900
-5.115000 35.782600 -2.051700 -0.293676 0.955783 0.015277 0.916000 0.725700
-5.778000 35.994701 -1.773100 -0.293676 0.955783 0.015277 0.922200 0.717000
-4.513000 55.007702 -5.909800 -0.189279 -0.709198 -0.679126 0.935300 0.759300
-4.291100 55.098900 -5.871800 -0.189279 -0.709198 -0.679126 0.932300 0.755300
-4.207800 55.799599 -6.651700 -0.189279 -0.709198 -0.679126 0.967500 0.768900
-4.871900 55.799599 -6.765400 -0.189279 -0.709198 -0.679126 0.957200 0.775300
-2.904000 62.455601 -5.700500 0.959060 0.270852 0.082723 0.954300 0.968000
-2.764700 62.455601 -4.128400 0.959060 0.270852 0.082723 0.909900 0.975800
-4.736600 55.799599 -5.153900 0.959060 0.270852 0.082723 0.919700 0.781300
-4.871900 55.799599 -6.765400 0.959060 0.270852 0.082723 0.957200 0.775300
-2.764700 62.455601 -4.128400 0.167860 -0.101350 0.980587 0.909900 0.975800
-4.072400 55.799599 -5.040200 0.167860 -0.101350 0.980587 0.904100 0.777700
-4.736600 55.799599 -5.153900 0.167860 -0.101350 0.980587 0.919700 0.781300
-2.904000 62.455601 -5.700500 -0.167781 0.107182 -0.979980 0.954300 0.968000
-4.871900 55.799599 -6.765400 -0.167781 0.107182 -0.979980 0.957200 0.775300
-4.207800 55.799599 -6.651700 -0.167781 0.107182 -0.979980 0.967500 0.768900
-4.736600 55.799599 -5.153900 0.042232 -0.727963 0.684314 0.919700 0.781300
-4.072400 55.799599 -5.040200 0.042232 -0.727963 0.684314 0.904100 0.777700
-4.291100 55.098900 -5.871800 0.042232 -0.727963 0.684314 0.932300 0.755300
-4.513000 55.007702 -5.909800 0.042232 -0.727963 0.684314 0.935300 0.759300
-4.736600 55.799599 -5.153900 0.937220 -0.339745 0.078688 0.919700 0.781300
-4.513000 55.007702 -5.909800 0.937220 -0.339745 0.078688 0.935300 0.759300
-4.871900 55.799599 -6.765400 0.937220 -0.339745 0.078688 0.957200 0.775300
-4 0 1 2 3
-4 4 5 6 7
-3 8 9 10
-4 11 12 13 14
-4 15 16 17 18
-4 19 20 21 22
-4 23 24 25 26
-4 27 28 29 30
-4 31 32 33 34
-4 35 36 37 38
-4 39 40 41 42
-4 43 44 45 46
-3 47 48 49
-4 50 51 52 53
-4 54 55 56 57
-4 58 59 60 61
-4 62 63 64 65
-4 66 67 68 69
-4 70 71 72 73
-4 74 75 76 77
-3 78 79 80
-4 81 82 83 84
-3 85 86 87
-4 88 89 90 91
-3 92 93 94
-4 95 96 97 98
-4 99 100 101 102
-4 103 104 105 106
-4 107 108 109 110
-4 111 112 113 114
-4 115 116 117 118
-4 119 120 121 122
-4 123 124 125 126
-4 127 128 129 130
-4 131 132 133 134
-4 135 136 137 138
-3 139 140 141
-3 142 143 144
-4 145 146 147 148
-4 149 150 151 152
-4 153 154 155 156
-3 157 158 159
-3 160 161 162
-4 163 164 165 166
-4 167 168 169 170
-4 171 172 173 174
-3 175 176 177
-4 178 179 180 181
-4 182 183 184 185
-3 186 187 188
-3 189 190 191
-4 192 193 194 195
-4 196 197 198 199
-4 200 201 202 203
-4 204 205 206 207
-3 208 209 210
-3 211 212 213
-3 214 215 216
-4 217 218 219 220
-4 221 222 223 224
-3 225 226 227
-4 228 229 230 231
-4 232 233 234 235
-3 236 237 238
-3 239 240 241
-3 242 243 244
-3 245 246 247
-4 248 249 250 251
-4 252 253 254 255
-4 256 257 258 259
-4 260 261 262 263
-4 264 265 266 267
-4 268 269 270 271
-4 272 273 274 275
-4 276 277 278 279
-4 280 281 282 283
-3 284 285 286
-3 287 288 289
-4 290 291 292 293
-4 294 295 296 297
-4 298 299 300 301
-3 302 303 304
-4 305 306 307 308
-4 309 310 311 312
-4 313 314 315 316
-4 317 318 319 320
-4 321 322 323 324
-4 325 326 327 328
-4 329 330 331 332
-4 333 334 335 336
-4 337 338 339 340
-4 341 342 343 344
-4 345 346 347 348
-4 349 350 351 352
-3 353 354 355
-4 356 357 358 359
-4 360 361 362 363
-3 364 365 366
-4 367 368 369 370
-4 371 372 373 374
-3 375 376 377
-4 378 379 380 381
-3 382 383 384
-4 385 386 387 388
-4 389 390 391 392
-3 393 394 395
-4 396 397 398 399
-4 400 401 402 403
-4 404 405 406 407
-4 408 409 410 411
-4 412 413 414 415
-3 416 417 418
-3 419 420 421
-3 422 423 424
-4 425 426 427 428
-4 429 430 431 432
-3 433 434 435
-3 436 437 438
-4 439 440 441 442
-4 443 444 445 446
-3 447 448 449
-3 450 451 452
-4 453 454 455 456
-3 457 458 459
-3 460 461 462
-3 463 464 465
-4 466 467 468 469
-3 470 471 472
-4 473 474 475 476
-4 477 478 479 480
-4 481 482 483 484
-4 485 486 487 488
-4 489 490 491 492
-3 493 494 495
-4 496 497 498 499
-4 500 501 502 503
-4 504 505 506 507
-4 508 509 510 511
-3 512 513 514
-4 515 516 517 518
-4 519 520 521 522
-3 523 524 525
-3 526 527 528
-3 529 530 531
-4 532 533 534 535
-4 536 537 538 539
-4 540 541 542 543
-4 544 545 546 547
-3 548 549 550
-3 551 552 553
-4 554 555 556 557
-3 558 559 560
-4 561 562 563 564
-4 565 566 567 568
-4 569 570 571 572
-3 573 574 575
-4 576 577 578 579
-4 580 581 582 583
-4 584 585 586 587
-4 588 589 590 591
-4 592 593 594 595
-4 596 597 598 599
-4 600 601 602 603
-4 604 605 606 607
-4 608 609 610 611
-3 612 613 614
-4 615 616 617 618
-4 619 620 621 622
-4 623 624 625 626
-4 627 628 629 630
-4 631 632 633 634
-4 635 636 637 638
-4 639 640 641 642
-3 643 644 645
-4 646 647 648 649
-3 650 651 652
-4 653 654 655 656
-3 657 658 659
-4 660 661 662 663
-4 664 665 666 667
-4 668 669 670 671
-4 672 673 674 675
-4 676 677 678 679
-4 680 681 682 683
-4 684 685 686 687
-4 688 689 690 691
-4 692 693 694 695
-4 696 697 698 699
-4 700 701 702 703
-3 704 705 706
-3 707 708 709
-4 710 711 712 713
-4 714 715 716 717
-4 718 719 720 721
-3 722 723 724
-3 725 726 727
-4 728 729 730 731
-4 732 733 734 735
-4 736 737 738 739
-3 740 741 742
-4 743 744 745 746
-4 747 748 749 750
-3 751 752 753
-3 754 755 756
-4 757 758 759 760
-4 761 762 763 764
-4 765 766 767 768
-4 769 770 771 772
-3 773 774 775
-3 776 777 778
-3 779 780 781
-4 782 783 784 785
-4 786 787 788 789
-3 790 791 792
-4 793 794 795 796
-4 797 798 799 800
-3 801 802 803
-3 804 805 806
-3 807 808 809
-3 810 811 812
-4 813 814 815 816
-4 817 818 819 820
-4 821 822 823 824
-4 825 826 827 828
-4 829 830 831 832
-4 833 834 835 836
-4 837 838 839 840
-4 841 842 843 844
-4 845 846 847 848
-3 849 850 851
-3 852 853 854
-4 855 856 857 858
-4 859 860 861 862
-4 863 864 865 866
-3 867 868 869
-4 870 871 872 873
-4 874 875 876 877
-4 878 879 880 881
-4 882 883 884 885
-4 886 887 888 889
-4 890 891 892 893
-4 894 895 896 897
-4 898 899 900 901
-4 902 903 904 905
-4 906 907 908 909
-4 910 911 912 913
-4 914 915 916 917
-3 918 919 920
-4 921 922 923 924
-4 925 926 927 928
-3 929 930 931
-4 932 933 934 935
-4 936 937 938 939
-3 940 941 942
-4 943 944 945 946
-3 947 948 949
-4 950 951 952 953
-4 954 955 956 957
-3 958 959 960
-4 961 962 963 964
-4 965 966 967 968
-4 969 970 971 972
-4 973 974 975 976
-4 977 978 979 980
-3 981 982 983
-3 984 985 986
-3 987 988 989
-4 990 991 992 993
-4 994 995 996 997
-3 998 999 1000
-3 1001 1002 1003
-4 1004 1005 1006 1007
-4 1008 1009 1010 1011
-3 1012 1013 1014
-3 1015 1016 1017
-4 1018 1019 1020 1021
-3 1022 1023 1024
-3 1025 1026 1027
-3 463 1028 464
-4 1029 1030 1031 1032
-3 1033 1034 1035
-4 1036 1037 1038 1039
-4 1040 1041 1042 1043
-4 1044 1045 1046 1047
-4 1048 1049 1050 1051
-4 1052 1053 1054 1055
-3 1056 1057 1058
-4 1059 1060 1061 1062
-4 1063 1064 1065 1066
-4 1067 1068 1069 1070
-4 1071 1072 1073 1074
-3 1075 1076 1077
-4 1078 1079 1080 1081
-4 1082 1083 1084 1085
-3 1086 1087 1088
-3 1089 1090 1091
-4 1092 1093 1094 1095
-4 1096 1097 1098 1099
-4 1100 1101 1102 1103
-3 1104 1105 1106
-3 1107 1108 1109
-4 1110 1111 1112 1113
-4 1114 1115 1116 1117
-4 1118 1119 1120 1121
-4 1122 1123 1124 1125
-3 1126 1127 1128
-4 1129 1130 1131 1132
-4 1133 1134 1135 1136
-4 1137 1138 1139 1140
-4 1141 1142 1143 1144
-4 1145 1146 1147 1148
-4 1149 1150 1151 1152
-3 1153 1154 1155
-4 1156 1157 1158 1159
-3 1160 1161 1162
-4 1163 1164 1165 1166
-3 1167 1168 1169
-3 1170 1171 1172
-3 1173 1174 1175
-4 1176 1177 1178 1179
-3 1180 1181 1182
-3 1183 1184 1185
-4 1186 1187 1188 1189
-4 1190 1191 1192 1193
-4 1194 1195 1196 1197
-4 1198 1199 1200 1201
-3 1202 1203 1204
-4 1205 1206 1207 1208
-4 1209 1210 1211 1212
-4 1213 1214 1215 1216
-4 1217 1218 1219 1220
-4 1221 1222 1223 1224
-4 1225 1226 1227 1228
-3 1229 1230 1231
-4 1232 1233 1234 1235
-3 1236 1237 1238
-4 1239 1240 1241 1242
-3 1243 1244 1245
-3 1246 1247 1248
-3 1249 1250 1251
-3 1252 1253 1254
-3 1255 1256 1257
-4 1258 1259 1260 1261
-4 1262 1263 1264 1265
-4 1266 1267 1268 1269
-4 1270 1271 1272 1273
-4 1274 1275 1276 1277
-4 1278 1279 1280 1281
-3 1282 1283 1284
-4 1285 1286 1287 1288
-4 1289 1290 1291 1292
-4 1293 1294 1295 1296
-3 1297 1298 1299
-3 1300 1301 1302
-4 1303 1304 1305 1306
-3 1307 1308 1309
diff --git a/src/tests/evas/meson.build b/src/tests/evas/meson.build
index d89d602507..bee736035f 100644
--- a/src/tests/evas/meson.build
+++ b/src/tests/evas/meson.build
@@ -11,10 +11,8 @@ evas_suite_src = [
'evas_test_render_engines.c',
'evas_test_filters.c',
'evas_test_image.c',
- 'evas_test_mesh.c',
'evas_test_mask.c',
'evas_test_evasgl.c',
- 'evas_test_matrix.c',
'evas_test_focus.c',
'evas_test_events.c',
'evas_tests_helpers.h',
@@ -27,7 +25,7 @@ evas_suite_src = [
evas_suite = executable('evas_suite',
evas_suite_src,
- dependencies: [evas_bin, evas, ecore_evas, dl, check],
+ dependencies: [evas_bin, evas, ecore_evas, dl, check, evas_ext_none_static_deps, eet], #external deps needed here since tests do include internal headers
include_directories: include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer')),
c_args : [
'-DTESTS_BUILD_DIR="'+meson.current_build_dir()+'"',
@@ -35,5 +33,6 @@ evas_suite = executable('evas_suite',
)
test('evas-suite', evas_suite,
- env : test_env
+ env : test_env,
+ timeout: 60,
)
diff --git a/src/tests/evil/evil_test_stdlib.c b/src/tests/evil/evil_test_stdlib.c
index c9f09813ef..57afb94fbd 100644
--- a/src/tests/evil/evil_test_stdlib.c
+++ b/src/tests/evil/evil_test_stdlib.c
@@ -169,86 +169,6 @@ EFL_START_TEST(evil_stdlib_unsetenv)
}
EFL_END_TEST
-EFL_START_TEST(evil_stdlib_mkdtemp)
-{
- char template[] = "file_XXXXXX";
- char *res;
-
- res = mkdtemp(template);
- fail_if(res == NULL);
-
- fail_if(rmdir(res) < 0);
-}
-EFL_END_TEST
-
-EFL_START_TEST(evil_stdlib_mkdtemp_fail)
-{
- char template[] = "file_XXX";
- char *res;
-
- res = mkdtemp(template);
- fail_if(res != NULL);
-}
-EFL_END_TEST
-
-EFL_START_TEST(evil_stdlib_mkstemp)
-{
- char template[] = "file_XXXXXX";
- int fd;
-
- fd = mkstemp(template);
- fail_if(fd < 0);
-
- fail_if(close(fd) == -1);
-
- fail_if(unlink(template) == -1);
-}
-EFL_END_TEST
-
-EFL_START_TEST(evil_stdlib_mkstemp_fail)
-{
- char template[] = "file_XXX";
- int fd;
-
- fd = mkstemp(template);
- fail_if(fd >= 0);
-}
-EFL_END_TEST
-
-EFL_START_TEST(evil_stdlib_mkstemps)
-{
- char template[] = "file_XXXXXX.ext";
- int fd;
-
- fd = mkstemps(template, 4);
- fail_if(fd < 0);
-
- fail_if(close(fd) == -1);
-
- fail_if(unlink(template) == -1);
-}
-EFL_END_TEST
-
-EFL_START_TEST(evil_stdlib_mkstemps_fail_1)
-{
- char template[] = "file_XXX.ext";
- int fd;
-
- fd = mkstemps(template, 4);
- fail_if(fd >= 0);
-}
-EFL_END_TEST
-
-EFL_START_TEST(evil_stdlib_mkstemps_fail_2)
-{
- char template[] = "file_XXX";
- int fd;
-
- fd = mkstemps(template, 4);
- fail_if(fd >= 0);
-}
-EFL_END_TEST
-
EFL_START_TEST(evil_stdlib_realpath_1)
{
char buf[PATH_MAX];
@@ -302,14 +222,6 @@ void evil_test_stdlib(TCase *tc)
tcase_add_test(tc, evil_stdlib_getenv_two_swapped);
tcase_add_test(tc, evil_stdlib_unsetenv);
- tcase_add_test(tc, evil_stdlib_mkdtemp);
- tcase_add_test(tc, evil_stdlib_mkdtemp_fail);
- tcase_add_test(tc, evil_stdlib_mkstemp);
- tcase_add_test(tc, evil_stdlib_mkstemp_fail);
- tcase_add_test(tc, evil_stdlib_mkstemps);
- tcase_add_test(tc, evil_stdlib_mkstemps_fail_1);
- tcase_add_test(tc, evil_stdlib_mkstemps_fail_2);
-
tcase_add_test(tc, evil_stdlib_realpath_1);
tcase_add_test(tc, evil_stdlib_realpath_2);
tcase_add_test(tc, evil_stdlib_realpath_3);
diff --git a/src/wayland_protocol/meson.build b/src/wayland_protocol/meson.build
index 5301adbe71..3749e5d91b 100644
--- a/src/wayland_protocol/meson.build
+++ b/src/wayland_protocol/meson.build
@@ -7,9 +7,7 @@ wayland_client = dependency('wayland-client')
wl_protocol_local = [
'efl-aux-hints.xml',
'efl-hints.xml',
- 'session-recovery.xml',
- 'teamwork.xml',
- 'www.xml'
+ 'session-recovery.xml'
]
wl_unstable_protocol_sys = [
@@ -66,3 +64,8 @@ wayland_protocol = declare_dependency(
sources: gen_obj_header,
dependencies : [wayland_client]
)
+
+wayland_protocol_simple = declare_dependency(
+ include_directories: include_directories('.'),
+ sources: gen_obj_header,
+)
diff --git a/src/wayland_protocol/teamwork.xml b/src/wayland_protocol/teamwork.xml
deleted file mode 100644
index 99e2f33dfa..0000000000
--- a/src/wayland_protocol/teamwork.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<protocol name="teamwork">
-
- <interface name="zwp_teamwork" version="2">
- <request name="preload_uri">
- <arg name="surface" type="object" interface="wl_surface"/>
- <arg name="uri" type="string"/>
- </request>
- <request name="activate_uri">
- <arg name="surface" type="object" interface="wl_surface"/>
- <arg name="uri" type="string"/>
- <arg name="x" type="fixed" summary="surface local coords"/>
- <arg name="y" type="fixed" summary="surface local coords"/>
- </request>
- <request name="deactivate_uri">
- <arg name="surface" type="object" interface="wl_surface"/>
- <arg name="uri" type="string"/>
- </request>
- <request name="open_uri">
- <arg name="surface" type="object" interface="wl_surface"/>
- <arg name="uri" type="string"/>
- </request>
-
- <event name="fetching_uri">
- <arg name="surface" type="object" interface="wl_surface"/>
- <arg name="uri" type="string"/>
- </event>
- <event name="completed_uri">
- <arg name="surface" type="object" interface="wl_surface"/>
- <arg name="uri" type="string"/>
- <arg name="valid" type="int" summary="1 if uri can be displayed, else 0"/>
- </event>
- <event name="fetch_info">
- <arg name="surface" type="object" interface="wl_surface"/>
- <arg name="uri" type="string"/>
- <arg name="progress" type="uint" summary="percentage of download"/>
- </event>
- </interface>
-
-</protocol>
diff --git a/src/wayland_protocol/www.xml b/src/wayland_protocol/www.xml
deleted file mode 100644
index 8d455178de..0000000000
--- a/src/wayland_protocol/www.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<protocol name="zwp_www">
- <interface name="www" version="1">
- <request name="create">
- <description summary="Create an object for WWW notifications">
- </description>
- <arg name="id" type="new_id" interface="www_surface"/>
- <arg name="surface" type="object" interface="wl_surface"/>
- </request>
- </interface>
- <interface name="www_surface" version="1">
- <event name="status">
- <description summary="Status update on a www_surface"></description>
- <arg name="x_rel" type="int"/>
- <arg name="y_rel" type="int"/>
- <arg name="timestamp" type="uint"/>
- </event>
- <event name="start_drag">
- <description summary="Drag has started"></description>
- </event>
- <event name="end_drag">
- <description summary="Drag has ended"></description>
- </event>
- <request name="destroy" type="destructor">
- <description summary="Destroy a www_surface">
- </description>
- </request>
- </interface>
-</protocol>
diff --git a/systemd-services/meson.build b/systemd-services/meson.build
index 18be63c5ef..a17790e857 100644
--- a/systemd-services/meson.build
+++ b/systemd-services/meson.build
@@ -1,13 +1,16 @@
if get_option('systemd') == true
- dep = dependency('systemd')
+ sys_dep = dependency('systemd', required: false)
+ if sys_dep.found()
+ sys_dir = sys_dep.get_pkgconfig_variable('systemduserunitdir')
+ else
+ sys_dir = join_paths(dir_lib, 'systemd', 'user')
+ endif
ethumb_service_config = configuration_data()
-
ethumb_service_config.set('prefix', dir_prefix)
- configure_file(
- input: 'ethumb.service.in',
- output: 'ethumb.service',
- configuration: ethumb_service_config,
- install_dir: dep.get_pkgconfig_variable('systemduserunitdir'))
+ configure_file(input : 'ethumb.service.in',
+ output : 'ethumb.service',
+ configuration : ethumb_service_config,
+ install_dir : sys_dir)
endif